diff --git a/build.gradle b/build.gradle index f72c565..74e88d2 100644 --- a/build.gradle +++ b/build.gradle @@ -5,13 +5,25 @@ buildscript { jcenter() } dependencies { - classpath "com.android.tools.build:gradle:4.1.1" + //classpath "com.android.tools.build:gradle:4.1.1" + classpath 'com.android.tools.build:gradle:3.5.0' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } +ext.buildConfigProperties = new Properties() +ext.buildConfigProperties.load(new FileInputStream(project.file("buildconfig.default.properties"))) +if(project.file("buildconfig.local.properties").exists()) { + ext.buildConfigProperties.load(new FileInputStream(project.file("buildconfig.local.properties"))) +} + +ext.ABI_FILTERS = ext.buildConfigProperties["abi.filters"] + +group = "com.radio.codec2" +version = "1.0" + allprojects { repositories { google() diff --git a/buildconfig.default.properties b/buildconfig.default.properties new file mode 100644 index 0000000..e6e49d7 --- /dev/null +++ b/buildconfig.default.properties @@ -0,0 +1,5 @@ +#When publishing with maven, this sets the directory to publish to +repo.dir=../codec2-repo + +#Native versions to build (ABI filters) +abi.filters=x86;x86_64;armeabi-v7a;arm64-v8a diff --git a/codec2talkie/build.gradle b/codec2talkie/build.gradle index 090940a..2be75f5 100644 --- a/codec2talkie/build.gradle +++ b/codec2talkie/build.gradle @@ -29,11 +29,13 @@ android { } dependencies { - + implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation project(":libcodec2-android") + implementation 'androidx.appcompat:appcompat:1.2.0' implementation 'com.google.android.material:material:1.2.1' implementation 'androidx.constraintlayout:constraintlayout:2.0.4' - implementation files('libs/codec2.jar') + testImplementation 'junit:junit:4.13.1' androidTestImplementation 'androidx.test.ext:junit:1.1.2' androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' diff --git a/codec2talkie/libs/codec2.jar b/codec2talkie/libs/codec2.jar deleted file mode 100644 index 9429bfc..0000000 Binary files a/codec2talkie/libs/codec2.jar and /dev/null differ diff --git a/codec2talkie/src/main/jniLibs/arm64-v8a/libCodec2JNI.so b/codec2talkie/src/main/jniLibs/arm64-v8a/libCodec2JNI.so deleted file mode 100755 index a90f30a..0000000 Binary files a/codec2talkie/src/main/jniLibs/arm64-v8a/libCodec2JNI.so and /dev/null differ diff --git a/codec2talkie/src/main/jniLibs/arm64-v8a/libcodec2.so b/codec2talkie/src/main/jniLibs/arm64-v8a/libcodec2.so deleted file mode 100755 index 340818f..0000000 Binary files a/codec2talkie/src/main/jniLibs/arm64-v8a/libcodec2.so and /dev/null differ diff --git a/codec2talkie/src/main/jniLibs/armeabi-v7a/libCodec2JNI.so b/codec2talkie/src/main/jniLibs/armeabi-v7a/libCodec2JNI.so deleted file mode 100755 index b14f648..0000000 Binary files a/codec2talkie/src/main/jniLibs/armeabi-v7a/libCodec2JNI.so and /dev/null differ diff --git a/codec2talkie/src/main/jniLibs/armeabi-v7a/libcodec2.so b/codec2talkie/src/main/jniLibs/armeabi-v7a/libcodec2.so deleted file mode 100755 index 7239766..0000000 Binary files a/codec2talkie/src/main/jniLibs/armeabi-v7a/libcodec2.so and /dev/null differ diff --git a/codec2talkie/src/main/jniLibs/x86/libCodec2JNI.so b/codec2talkie/src/main/jniLibs/x86/libCodec2JNI.so deleted file mode 100755 index c8c5cfb..0000000 Binary files a/codec2talkie/src/main/jniLibs/x86/libCodec2JNI.so and /dev/null differ diff --git a/codec2talkie/src/main/jniLibs/x86/libcodec2.so b/codec2talkie/src/main/jniLibs/x86/libcodec2.so deleted file mode 100755 index d5bf1ff..0000000 Binary files a/codec2talkie/src/main/jniLibs/x86/libcodec2.so and /dev/null differ diff --git a/codec2talkie/src/main/jniLibs/x86_64/libCodec2JNI.so b/codec2talkie/src/main/jniLibs/x86_64/libCodec2JNI.so deleted file mode 100755 index e6dd494..0000000 Binary files a/codec2talkie/src/main/jniLibs/x86_64/libCodec2JNI.so and /dev/null differ diff --git a/codec2talkie/src/main/jniLibs/x86_64/libcodec2.so b/codec2talkie/src/main/jniLibs/x86_64/libcodec2.so deleted file mode 100755 index ffc7021..0000000 Binary files a/codec2talkie/src/main/jniLibs/x86_64/libcodec2.so and /dev/null differ diff --git a/libcodec2-android/.gitignore b/libcodec2-android/.gitignore new file mode 100644 index 0000000..c43caa6 --- /dev/null +++ b/libcodec2-android/.gitignore @@ -0,0 +1,3 @@ +/build +**/.cxx + diff --git a/libcodec2-android/build.gradle b/libcodec2-android/build.gradle new file mode 100644 index 0000000..f10fc6c --- /dev/null +++ b/libcodec2-android/build.gradle @@ -0,0 +1,136 @@ +apply plugin: 'digital.wup.android-maven-publish' +apply plugin: 'com.android.library' + +buildscript { + repositories { + jcenter() + } + + dependencies { + classpath "digital.wup:android-maven-publish:3.6.2" + } +} + +android { + compileSdkVersion 28 + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + + defaultConfig { + minSdkVersion 16 + targetSdkVersion 28 + versionCode 1 + versionName "1.0" + testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + externalNativeBuild { + cmake { + cppFlags "" + } + } + ndk { + abiFilters = [] + abiFilters.addAll(rootProject.ext.ABI_FILTERS.split(';').collect{it as String}) + } + } + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } + } + externalNativeBuild { + cmake { + path "src/main/cpp/CMakeLists.txt" + } + } + sourceSets { + main { + jniLibs.srcDirs = ['build/imported-lib'] + } + } +} + +// As per: https://github.com/googlesamples/android-ndk/blob/master/hello-libs/app/build.gradle +tasks.whenTaskAdded { task -> + if (task.name == 'externalNativeBuildRelease') { + task.dependsOn compileCodec2 + } else if (task.name == 'externalNativeBuildDebug') { + task.dependsOn compileCodec2 + } +} + +task compileCodec2 { + doFirst { + project.file("build/codec2_build_linux").mkdirs() + for(String abi : rootProject.ext.ABI_FILTERS.split(";")) { + project.file("build/codec2_build_android_" + abi).mkdirs() + project.file("build/imported-lib/"+abi).mkdirs() + } + } + + doLast { + exec { + workingDir "$projectDir/build/codec2_build_linux" + commandLine "/usr/bin/cmake", "$projectDir/src/codec2" + } + + exec { + workingDir "$projectDir/build/codec2_build_linux" + commandLine "/usr/bin/make" + } + + + for(String abi : rootProject.ext.ABI_FILTERS.split(";")) { + System.out.println("Handle abi " + abi) + exec { + workingDir "$projectDir/build/codec2_build_android_" + abi + commandLine "/usr/bin/cmake", "$projectDir/src/codec2", + "-DCMAKE_TOOLCHAIN_FILE=" + android.ndkDirectory + "/build/cmake/android.toolchain.cmake", + "-DUNITTEST=FALSE", + "-DGENERATE_CODEBOOK=$projectDir/build/codec2_build_linux/src/generate_codebook", + "-DANDROID_NATIVE_API_LEVEL=23", "-DANDROID_ABI="+abi, + "-DANDROID_STL=c++_shared" + } + + exec { + workingDir "$projectDir/build/codec2_build_android_" + abi + commandLine "/usr/bin/cmake", "--build", "." + } + + copy { + from "$projectDir/build/codec2_build_android_" + abi +"/src/libcodec2.so" + into "$projectDir/build/imported-lib/"+abi + } + } + } +} + +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation 'com.android.support:support-annotations:28.0.0' + testImplementation 'junit:junit:4.12' + androidTestImplementation 'com.android.support.test:runner:1.0.2' + androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' +} + +publishing { + publications { + mavenAar(MavenPublication) { + from components.android + + groupId rootProject.group + artifactId project.name + version "${rootProject.version}" + } + } + + repositories { + //Set this in projectdir/extrasettings.gradle + maven { + url rootProject.file(rootProject.ext.buildConfigProperties['repo.dir']).getAbsolutePath() + } + } +} diff --git a/libcodec2-android/proguard-rules.pro b/libcodec2-android/proguard-rules.pro new file mode 100644 index 0000000..f1b4245 --- /dev/null +++ b/libcodec2-android/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile diff --git a/libcodec2-android/src/androidTest/java/com/ustadmobile/codec2/ExampleInstrumentedTest.java b/libcodec2-android/src/androidTest/java/com/ustadmobile/codec2/ExampleInstrumentedTest.java new file mode 100644 index 0000000..2a0e7fa --- /dev/null +++ b/libcodec2-android/src/androidTest/java/com/ustadmobile/codec2/ExampleInstrumentedTest.java @@ -0,0 +1,26 @@ +package com.ustadmobile.codec2; + +import android.content.Context; +import android.support.test.InstrumentationRegistry; +import android.support.test.runner.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.assertEquals; + +/** + * Instrumented test, which will execute on an Android device. + * + * @see Testing documentation + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + @Test + public void useAppContext() { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getTargetContext(); + + assertEquals("com.ustadmobile.codec2", appContext.getPackageName()); + } +} diff --git a/libcodec2-android/src/androidTest/java/com/ustadmobile/codec2/TestCodec2Decode.java b/libcodec2-android/src/androidTest/java/com/ustadmobile/codec2/TestCodec2Decode.java new file mode 100644 index 0000000..d34807d --- /dev/null +++ b/libcodec2-android/src/androidTest/java/com/ustadmobile/codec2/TestCodec2Decode.java @@ -0,0 +1,7 @@ +package com.ustadmobile.codec2; + +public class TestCodec2Decode { + + + +} diff --git a/libcodec2-android/src/codec2/CMakeLists.txt b/libcodec2-android/src/codec2/CMakeLists.txt new file mode 100644 index 0000000..57339fa --- /dev/null +++ b/libcodec2-android/src/codec2/CMakeLists.txt @@ -0,0 +1,868 @@ +# +# Codec2 - Next-Generation Digital Voice for Two-Way Radio +# +# CMake configuration contributed by Richard Shaw (KF5OIM) +# Please report questions, comments, problems, or patches to the freetel +# mailing list: https://lists.sourceforge.net/lists/listinfo/freetel-codec2 +# +set(CMAKE_OSX_DEPLOYMENT_TARGET "10.9" CACHE STRING "Minimum OS X deployment version") + +project(codec2 C) + +cmake_minimum_required(VERSION 3.0) + +# Set policies here, probably should move to cmake dir. +if(POLICY CMP0075) + cmake_policy(SET CMP0075 NEW) +endif() +if(POLICY CMP0079) + cmake_policy(SET CMP0079 NEW) +endif() + +include(GNUInstallDirs) +mark_as_advanced(CLEAR + CMAKE_INSTALL_BINDIR + CMAKE_INSTALL_INCLUDEDIR + CMAKE_INSTALL_LIBDIR +) + +# +# Prevent in-source builds +# If an in-source build is attempted, you will still need to clean up a few +# files manually. +# +set(CMAKE_DISABLE_SOURCE_CHANGES ON) +set(CMAKE_DISABLE_IN_SOURCE_BUILD ON) +if("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_BINARY_DIR}") + message(FATAL_ERROR "In-source builds in ${CMAKE_BINARY_DIR} are not " + "allowed, please remove ./CMakeCache.txt and ./CMakeFiles/, create a " + "separate build directory and run cmake from there.") +endif("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_BINARY_DIR}") + +# +# Set project version information. This should probably be done via external +# file at some point. +# +set(CODEC2_VERSION_MAJOR 0) +set(CODEC2_VERSION_MINOR 9) +# Set to patch level if needed, otherwise leave FALSE. +# Must be positive (non-zero) if set, since 0 == FALSE in CMake. +set(CODEC2_VERSION_PATCH 2) +set(CODEC2_VERSION "${CODEC2_VERSION_MAJOR}.${CODEC2_VERSION_MINOR}") +# Patch level version bumps should not change API/ABI. +set(SOVERSION "${CODEC2_VERSION_MAJOR}.${CODEC2_VERSION_MINOR}") +if(CODEC2_VERSION_PATCH) + set(CODEC2_VERSION "${CODEC2_VERSION}.${CODEC2_VERSION_PATCH}") +endif() +message(STATUS "codec2 version: ${CODEC2_VERSION}") + +# Set default build type +if(NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE "Debug") +endif() + +# Build universal ARM64 and x86_64 binaries on Mac. +if(BUILD_OSX_UNIVERSAL) +set(CMAKE_OSX_ARCHITECTURES "x86_64;arm64") +endif(BUILD_OSX_UNIVERSAL) + +# +# Find the git hash if this is a working copy. +# +if(EXISTS ${CMAKE_SOURCE_DIR}/.git) + find_package(Git QUIET) + if(Git_FOUND) + execute_process( + COMMAND "${GIT_EXECUTABLE}" describe --always HEAD + WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" + RESULT_VARIABLE res + OUTPUT_VARIABLE FREEDV_HASH + ERROR_QUIET + OUTPUT_STRIP_TRAILING_WHITESPACE) + message(STATUS "freedv-gui current git hash: ${FREEDV_HASH}") + add_definitions(-DGIT_HASH="${FREEDV_HASH}") + else() + message(WARNING "Git not found. Can not determine current commit hash.") + add_definitions(-DGIT_HASH="Unknown") + endif() +else() + add_definitions(-DGIT_HASH="None") +endif() + +# Set default C flags. +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wno-strict-overflow") + +# Check for what C standard is supported. +include(CheckCCompilerFlag) +CHECK_C_COMPILER_FLAG("-std=gnu11" COMPILER_SUPPORTS_GNU11) +CHECK_C_COMPILER_FLAG("-std=gnu99" COMPILER_SUPPORTS_GNU99) + +if(COMPILER_SUPPORTS_GNU11) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu11") +elseif(COMPILER_SUPPORTS_GNU99) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99") +else() + message(SEND_ERROR "Compiler doesn't seem to support at least gnu99, might cause problems" ) +endif() + +# -fPIC is implied on MinGW... +if(NOT WIN32) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC") +endif() + +set(CMAKE_C_FLAGS_DEBUG "-g -O2 -DDUMP") +set(CMAKE_C_FLAGS_RELEASE "-O3") + +# +# Setup Windows/MinGW specifics here. +# +if(MINGW) + message(STATUS "System is MinGW.") +endif(MINGW) + + +# +# Find the git hash if this is a working copy. +# +if(EXISTS ${CMAKE_SOURCE_DIR}/.git) + find_package(Git) + if(Git_FOUND) + execute_process( + COMMAND "${GIT_EXECUTABLE}" describe --always HEAD + WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" + RESULT_VARIABLE res + OUTPUT_VARIABLE CODEC2_HASH + ERROR_QUIET + OUTPUT_STRIP_TRAILING_WHITESPACE) + message(STATUS "Codec2 current git hash: ${CODEC2_HASH}") + else() + message(WARNING "Git not found. Can not determine current commit hash.") + endif() +endif() + + +# +# Default options +# +option(BUILD_SHARED_LIBS + "Build shared library. Set to OFF for static library." ON) +# Unittest should be on for dev builds and off for releases. +if(CMAKE_BUILD_TYPE MATCHES "Release") + option(UNITTEST "Build unittest binaries." OFF) +else() + option(UNITTEST "Build unittest binaries." ON) +endif() +option(INSTALL_EXAMPLES "Install example code." OFF) +if(INSTALL_EXAMPLES) + install(DIRECTORY octave raw script wav + USE_SOURCE_PERMISSIONS + DESTINATION ${CMAKE_INSTALL_DATADIR}/codec2) +endif() + +# LPCNet needs to be bootstraped because codec2 and freedvlpcnet are +# cross dependent. +option(LPCNET "Build codec2 with LPCNet support." OFF) +set(LPCNET_BUILD_DIR FALSE CACHE PATH "Location of lpcnet build tree.") +# Setting LPCNET_BUILD_DIR implies LPCNET=ON +if(LPCNET_BUILD_DIR) + set(LPCNET ON) +endif() + + + +include(CheckIncludeFiles) +check_include_files("stdlib.h" HAVE_STDLIB_H) +check_include_files("string.h" HAVE_STRING_H) + +include(CheckSymbolExists) +# Check if _GNU_SOURCE is available. +if (NOT DEFINED _GNU_SOURCE) + check_symbol_exists(__GNU_LIBRARY__ "features.h" _GNU_SOURCE) + + if (NOT _GNU_SOURCE) + unset(_GNU_SOURCE CACHE) + check_symbol_exists(_GNU_SOURCE "features.h" _GNU_SOURCE) + endif() +endif() + +if (_GNU_SOURCE) + add_definitions(-D_GNU_SOURCE=1) +endif() + +if(UNIX) + set(CMAKE_REQUIRED_LIBRARIES m) +endif() + +check_symbol_exists(floor math.h HAVE_FLOOR) +check_symbol_exists(ceil math.h HAVE_CEIL) +check_symbol_exists(pow math.h HAVE_POW) +check_symbol_exists(sqrt math.h HAVE_SQRT) +check_symbol_exists(sin math.h HAVE_SIN) +check_symbol_exists(cos math.h HAVE_COS) +check_symbol_exists(atan2 math.h HAVE_ATAN2) +check_symbol_exists(log10 math.h HAVE_LOG10) +check_symbol_exists(round math.h HAVE_ROUND) +check_symbol_exists(getopt getopt.h HAVE_GETOPT) + +configure_file ("${PROJECT_SOURCE_DIR}/cmake/config.h.in" + "${PROJECT_BINARY_DIR}/config.h" ) +# Output path is such that #include in codec2.h works +set(CODEC2_VERSION_PATH "${PROJECT_BINARY_DIR}/codec2") +configure_file ("${PROJECT_SOURCE_DIR}/cmake/version.h.in" + "${CODEC2_VERSION_PATH}/version.h" ) +include_directories(${PROJECT_BINARY_DIR}) + +# CMake Package setup +#include(CMakePackageConfigHelpers) +#configure_package_config_file(cmake/codec2-config.cmake.in +# ${CMAKE_CURRENT_BINARY_DIR}/codec2-config.cmake +# INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/codec2 +# PATH_VARS CMAKE_INSTALL_INCLUDEDIR +#) + + +# +# Find lpcnet library +# +if(LPCNET) + if(LPCNET_BUILD_DIR) + find_package(lpcnetfreedv REQUIRED + PATHS ${LPCNET_BUILD_DIR} + NO_DEFAULT_PATH + CONFIGS lpcnetfreedv.cmake + ) + if(lpcnetfreedv_FOUND) + message(STATUS "liblpcnetfreedv found in build tree.") + add_definitions("-D__LPCNET__") + else() + message(FATAL_ERROR "LPCNet include/library not found in build tree.") + endif() + else() + find_package(lpcnetfreedv REQUIRED) + if(lpcnetfreedv_FOUND) + add_definitions("-D__LPCNET__") + message(STATUS "liblpcnetfreedv found.") + else() + message(FATAL_ERROR "lpcnetfreedv library not found.") + endif() + endif() +endif() + + +# +# codec2 library +# +add_subdirectory(src) + + +if(UNITTEST) + # Pthread Library + find_package(Threads REQUIRED) + message(STATUS "Threads library flags: ${CMAKE_THREAD_LIBS_INIT}") + + add_subdirectory(unittest) + add_subdirectory(misc) +endif(UNITTEST) + +message(STATUS "Build type is: " ${CMAKE_BUILD_TYPE}) +string(TOUPPER ${CMAKE_BUILD_TYPE} _FLAGS) +if(_FLAGS STREQUAL "NONE") + message(STATUS "Compiler Flags: " ${CMAKE_C_FLAGS}) +else() + message(STATUS "Compiler Flags: " ${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_${_FLAGS}}) +endif() +message(STATUS "Libraries linked: " ${CMAKE_REQUIRED_LIBRARIES}) + +# +# Cpack NSIS installer configuration for Windows. +# See: http://nsis.sourceforge.net/Download +# +# *nix systems should use "make install" and/or appropriate +# distribution packaging tools. +# +if(WIN32) + # Detect if we're doing a 32-bit or 64-bit windows build. + if(${CMAKE_SIZEOF_VOID_P} EQUAL 8) + set(CMAKE_CL_64 TRUE) + endif() + configure_file(cmake/GetDependencies.cmake.in cmake/GetDependencies.cmake + @ONLY + ) + install(SCRIPT ${CMAKE_BINARY_DIR}/cmake/GetDependencies.cmake) + set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Next-Generation Digital Voice for Two-Way Radio") + set(CPACK_PACKAGE_VENDOR "CMake") + set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/README.md") + set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/COPYING") + set(CPACK_PACKAGE_VERSION_MAJOR ${CODEC2_VERSION_MAJOR}) + set(CPACK_PACKAGE_VERSION_MINOR ${CODEC2_VERSION_MINOR}) + if(CODEC2_VERSION_PATCH) + set(CPACK_PACKAGE_VERSION_PATCH ${CODEC2_VERSION_PATCH}) + else() + set(CPACK_PACKAGE_VERSION_PATCH 0) + endif() + set(CPACK_PACKAGE_INSTALL_DIRECTORY "Codec2") + set(CPACK_CREATE_DESKTOP_LINKS "") + set(CPACK_NSIS_DISPLAY_NAME "${CPACK_PACKAGE_INSTALL_DIRECTORY}") + set(CPACK_NSIS_URL_INFO_ABOUT "http://rowetel.com/codec2.html") + set(CPACK_NSIS_MODIFY_PATH ON) + include(CPack) +endif(WIN32) + +######################################################################## +# Create Pkg Config File +######################################################################## +configure_file( + ${CMAKE_CURRENT_SOURCE_DIR}/codec2.pc.in + ${CMAKE_CURRENT_BINARY_DIR}/codec2.pc + @ONLY +) + +install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/codec2.pc + DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig + COMPONENT "codec2_devel" +) + +################################################################## +# Tests +################################################################## + +if(UNITTEST) + include(CTest) + enable_testing() + + add_test(NAME test_freedv_get_hash + COMMAND sh -c "${CMAKE_CURRENT_BINARY_DIR}/unittest/thash") + + add_test(NAME test_CML_ldpcut + COMMAND sh -c "cd ${CMAKE_CURRENT_SOURCE_DIR}/octave; SHORT_VERSION_FOR_CTEST=1 octave --no-gui -qf ldpcut.m") + set_tests_properties(test_CML_ldpcut PROPERTIES PASS_REGULAR_EXPRESSION "Nerr: 0") + + add_test(NAME test_codec2_700c_octave_port + COMMAND sh -c " + cd ${CMAKE_CURRENT_BINARY_DIR}/src; + ./c2sim ${CMAKE_CURRENT_SOURCE_DIR}/raw/cq_ref.raw --phase0 --postfilter --dump cq_ref --lpc 10 --dump_pitch_e cq_ref_pitche.txt; + cd ${CMAKE_CURRENT_BINARY_DIR}/unittest; ./tnewamp1 ${CMAKE_CURRENT_SOURCE_DIR}/raw/cq_ref.raw; + cd ${CMAKE_CURRENT_SOURCE_DIR}/octave; + DISPLAY=\"\" octave-cli -qf --eval 'tnewamp1(\"${CMAKE_CURRENT_BINARY_DIR}/src/cq_ref\", \"${CMAKE_CURRENT_BINARY_DIR}/unittest\")'") + set_tests_properties(test_codec2_700c_octave_port PROPERTIES PASS_REGULAR_EXPRESSION "fails: 0") + + add_test(NAME test_FDMDV_modem_octave_port + COMMAND sh -c "$ && DISPLAY=\"\" octave-cli --no-gui -qf ${CMAKE_CURRENT_SOURCE_DIR}/octave/tfdmdv.m" + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/octave) + set_tests_properties(test_FDMDV_modem_octave_port PROPERTIES + PASS_REGULAR_EXPRESSION "fails: 0") + + add_test(NAME test_COHPSK_modem_octave_port + COMMAND sh -c "$ && DISPLAY=\"\" octave-cli --no-gui -qf ${CMAKE_CURRENT_SOURCE_DIR}/octave/tcohpsk.m" + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/octave) + set_tests_properties(test_COHPSK_modem_octave_port PROPERTIES + PASS_REGULAR_EXPRESSION "fails: 0") + + add_test(NAME test_COHPSK_modem_AWGN_BER + COMMAND sh -c "$ - 5600 | $ - - | $ - - -30 | $ - - | $ -" + ) + + add_test(NAME test_COHPSK_modem_freq_offset + COMMAND sh -c "set -x; $ - 5600 | $ - - | $ - - -40 -f -20 | $ -v - - 2>log.txt | $ - ; ! grep 'lost sync' log.txt" + ) + + # ------------------------------------------------------------------------- + # OFDM Modem + # ------------------------------------------------------------------------- + + add_test(NAME test_OFDM_qam16 + COMMAND sh -c "${CMAKE_CURRENT_BINARY_DIR}/unittest/tqam16") + + add_test(NAME test_OFDM_modem_octave_port + COMMAND sh -c "PATH_TO_TOFDM=${CMAKE_CURRENT_BINARY_DIR}/unittest/tofdm DISPLAY=\"\" octave-cli --no-gui -qf ${CMAKE_CURRENT_SOURCE_DIR}/octave/tofdm.m" + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/octave) + set_tests_properties(test_OFDM_modem_octave_port PROPERTIES + PASS_REGULAR_EXPRESSION "fails: 0") + + add_test(NAME test_OFDM_modem_octave_port_Nc_31 + COMMAND sh -c "NC=31 PATH_TO_TOFDM=${CMAKE_CURRENT_BINARY_DIR}/unittest/tofdm DISPLAY=\"\" octave-cli --no-gui -qf ${CMAKE_CURRENT_SOURCE_DIR}/octave/tofdm.m" + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/octave) + set_tests_properties(test_OFDM_modem_octave_port_Nc_31 PROPERTIES + PASS_REGULAR_EXPRESSION "fails: 0") + + # noise free uncoded 700D test, including reading and writing payload bits + add_test(NAME test_OFDM_modem_700D + COMMAND sh -c "cd ${CMAKE_CURRENT_BINARY_DIR}/src; + ./ofdm_get_test_bits - | + ./ofdm_mod | + ./ofdm_demod --testframes > /dev/null") + + # noise free coded 700D test, including reading and writing payload bits + add_test(NAME test_OFDM_modem_700D_ldpc + COMMAND sh -c "cd ${CMAKE_CURRENT_BINARY_DIR}/src; + ./ofdm_get_test_bits - --ldpc | + ./ofdm_mod --ldpc | + ./ofdm_demod --ldpc --testframes > /dev/null") + + # noise free 2020 test, including reading and writing payload bits. fsk_*_test_bits used as it does it's own frame sync + add_test(NAME test_OFDM_modem_2020_ldpc + COMMAND sh -c "cd ${CMAKE_CURRENT_BINARY_DIR}/src; + ./fsk_get_test_bits - 5000 | + ./ofdm_mod --ldpc --mode 2020 -p 312 | + ./ofdm_demod --ldpc --mode 2020 -p 312 | + ./fsk_put_test_bits - -q") + + add_test(NAME test_OFDM_modem_AWGN_BER + COMMAND sh -c "$ --in /dev/zero --ldpc --testframes 60 --txbpf | $ - - -20 --Fs 8000 -f -50 | $ --out /dev/null --testframes --ldpc --verbose 1" + ) + + configure_file(unittest/ofdm_fade.sh.in unittest/ofdm_fade.sh) + add_test(NAME test_OFDM_modem_fading_BER + COMMAND ${CMAKE_CURRENT_BINARY_DIR}/unittest/ofdm_fade.sh + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/unittest + ) + + add_test(NAME test_OFDM_modem_phase_est_bw + COMMAND sh -c "cd ${CMAKE_CURRENT_SOURCE_DIR}/unittest; + PATH=$PATH:${CMAKE_CURRENT_BINARY_DIR}/src ./ofdm_phase_est_bw.sh") + + add_test(NAME test_OFDM_modem_fading_DPSK_BER + COMMAND sh -c "cd ${CMAKE_CURRENT_SOURCE_DIR}/unittest; + PATH=$PATH:${CMAKE_CURRENT_BINARY_DIR}/src ./ofdm_fade_dpsk.sh") + + add_test(NAME test_OFDM_modem_time_sync_700D + COMMAND sh -c "cd ${CMAKE_CURRENT_SOURCE_DIR}/unittest; + PATH=$PATH:${CMAKE_CURRENT_BINARY_DIR}/src ./ofdm_time_sync.sh 700D") + +if(LPCNET) + add_test(NAME test_OFDM_modem_time_sync_2020 + COMMAND sh -c "cd ${CMAKE_CURRENT_SOURCE_DIR}/unittest; + PATH=$PATH:${CMAKE_CURRENT_BINARY_DIR}/src ./ofdm_time_sync.sh 2020") +endif() + + # ------------------------------------------------------------------------- + # OFDM Data modes + # ------------------------------------------------------------------------- + + # C Tx, Octave Rx + add_test(NAME test_OFDM_modem_datac1_octave + COMMAND sh -c "cd ${CMAKE_CURRENT_BINARY_DIR}; + ./src/ofdm_mod --mode datac1 --in /dev/zero --testframes 5 --verbose 1 > test.raw; + cd ${CMAKE_CURRENT_SOURCE_DIR}/octave; + DISPLAY=\"\" octave-cli -qf --eval 'ofdm_rx(\"${CMAKE_CURRENT_BINARY_DIR}/test.raw\",\"datac1\")'") + set_tests_properties(test_OFDM_modem_datac1_octave PROPERTIES PASS_REGULAR_EXPRESSION "BER..: 0.0000") + # C Tx, C Rx, uncoded + add_test(NAME test_OFDM_modem_datac1 + COMMAND sh -c "cd ${CMAKE_CURRENT_BINARY_DIR}/src; + ./ofdm_mod --mode datac1 --in /dev/zero --testframes 10 --verbose 1 | + ./ofdm_demod --mode datac1 --out /dev/null --testframes --verbose 1") + # C Tx, C Rx, coded + add_test(NAME test_OFDM_modem_datac1_ldpc + COMMAND sh -c "cd ${CMAKE_CURRENT_BINARY_DIR}/src; + ./ofdm_mod --mode datac1 --in /dev/zero --testframes 10 --ldpc --verbose 1 | + ./ofdm_demod --mode datac1 --out /dev/null --testframes --ldpc --verbose 1") + + # ------------------------------------------------------------------------- + # LDPC + # ------------------------------------------------------------------------- + + # tests ldpc_enc/ldpc_noise/ldpc_dec + add_test(NAME test_ldpc_enc_dec + COMMAND sh -c "cd ${CMAKE_CURRENT_BINARY_DIR}/src; + ./ldpc_enc /dev/zero - --sd --code HRA_112_112 --testframes 200 | + ./ldpc_noise - - 0.5 | + ./ldpc_dec - /dev/null --code HRA_112_112 --sd --testframes" + ) + + add_test(NAME test_ldpc_enc_dec_HRAb_396_504 + COMMAND sh -c "cd ${CMAKE_CURRENT_BINARY_DIR}/src; + ./ldpc_enc /dev/zero - --sd --code HRAb_396_504 --testframes 200 | + ./ldpc_noise - - -2.0 | + ./ldpc_dec - /dev/null --code HRAb_396_504 --sd --testframes" + ) + + add_test(NAME test_ldpc_enc_dec_H_256_768_22 + COMMAND sh -c "cd ${CMAKE_CURRENT_BINARY_DIR}/src; + ./ldpc_enc /dev/zero - --sd --code H_256_768_22 --testframes 200 | + ./ldpc_noise - - 3.0 | + ./ldpc_dec - /dev/null --code H_256_768_22 --sd --testframes" + ) + + add_test(NAME test_ldpc_enc_dec_H_256_512_4 + COMMAND sh -c "cd ${CMAKE_CURRENT_BINARY_DIR}/src; + ./ldpc_enc /dev/zero - --sd --code H_256_512_4 --testframes 200 | + ./ldpc_noise - - 0.5 | + ./ldpc_dec - /dev/null --code H_256_512_4 --sd --testframes" + ) + + add_test(NAME test_ldpc_enc_dec_HRAa_1536_512 + COMMAND sh -c "cd ${CMAKE_CURRENT_BINARY_DIR}/src; + ./ldpc_enc /dev/zero - --sd --code HRAa_1536_512 --testframes 200 | + ./ldpc_noise - - -2 | + ./ldpc_dec - /dev/null --code HRAa_1536_512 --sd --testframes" + ) + + add_test(NAME test_ldpc_enc_dec_H_128_256_5 + COMMAND sh -c "cd ${CMAKE_CURRENT_BINARY_DIR}/src; + ./ldpc_enc /dev/zero - --sd --code H_128_256_5 --testframes 200 | + ./ldpc_noise - - 0.5 | + ./ldpc_dec - /dev/null --code H_128_256_5 --sd --testframes" + ) + + add_test(NAME test_freedv_api_1600 + COMMAND sh -c "cd ${CMAKE_CURRENT_BINARY_DIR}/src; + ./freedv_tx 1600 ../../raw/ve9qrp_10s.raw - | ./freedv_rx 1600 - /dev/null") + set_tests_properties(test_freedv_api_1600 PROPERTIES PASS_REGULAR_EXPRESSION "frames decoded: 503") + + add_test(NAME test_freedv_api_700C + COMMAND sh -c "cd ${CMAKE_CURRENT_BINARY_DIR}/src; + ./freedv_tx 700C ../../raw/ve9qrp_10s.raw - | ./freedv_rx 700C - /dev/null") + set_tests_properties(test_freedv_api_700C PROPERTIES PASS_REGULAR_EXPRESSION "frames decoded: 125") + + add_test(NAME test_freedv_api_700D_backwards_compatability + COMMAND sh -c "$ 700D ${CMAKE_CURRENT_SOURCE_DIR}/raw/testframes_700d.raw /dev/null --testframes --discard" + ) + + # no random speech output due to trial sync when listening to noise + add_test(NAME test_freedv_api_700D_burble + COMMAND sh -c "cd ${CMAKE_CURRENT_BINARY_DIR}/src; + ./freedv_tx 700D ../../raw/ve9qrp.raw - | + ./cohpsk_ch - - -10 --Fs 8000 | + ./freedv_rx 700D - /dev/null --squelch -2") + set_tests_properties(test_freedv_api_700D_burble PROPERTIES PASS_REGULAR_EXPRESSION "frames decoded: 746 output speech samples: 0") + + add_test(NAME test_freedv_api_700D_AWGN_BER + COMMAND sh -c "dd bs=2560 count=120 if=/dev/zero | $ 700D - - --testframes | $ - - -20 --Fs 8000 -f -10 | $ 700D - /dev/null --testframes --discard" + ) + + add_test(NAME test_freedv_api_700D_AWGN_BER_USECOMPLEX + COMMAND sh -c "dd bs=2560 count=120 if=/dev/zero | $ 700D - - --testframes | $ - - -20 --Fs 8000 -f -10 | $ 700D - /dev/null --testframes --discard --usecomplex" + ) + +if(LPCNET) + + add_test(NAME test_freedv_api_2020_to_ofdm_demod + COMMAND sh -c "cd ${CMAKE_CURRENT_BINARY_DIR}/src; + ./freedv_tx 2020 ../../wav/wia_16kHz.wav - --testframes | + ./ofdm_demod --mode 2020 --verbose 1 --ldpc -p 312 --testframes > /dev/null" + ) + + add_test(NAME test_freedv_api_2020_from_ofdm_mod + COMMAND sh -c "cd ${CMAKE_CURRENT_BINARY_DIR}/src; + ./ofdm_mod --in /dev/zero --mode 2020 --verbose 1 --ldpc -p 312 --testframes 10 | + ./freedv_rx 2020 - /dev/null --testframes" + ) + + add_test(NAME test_freedv_api_2020_awgn + COMMAND sh -c "cd ${CMAKE_CURRENT_BINARY_DIR}/src; + dd bs=32000 count=10 if=/dev/zero | + ./freedv_tx 2020 - - --testframes | + ./cohpsk_ch - - -24 --Fs 8000 | + ./freedv_rx 2020 - /dev/null --testframes" + ) +endif() + + add_test(NAME test_freedv_api_2400A + COMMAND sh -c "cd ${CMAKE_CURRENT_BINARY_DIR}/src; + ./freedv_tx 2400A ../../raw/ve9qrp_10s.raw - | ./freedv_rx 2400A - /dev/null") + set_tests_properties(test_freedv_api_2400A PROPERTIES PASS_REGULAR_EXPRESSION "frames decoded: 250") + add_test(NAME test_freedv_api_2400B + COMMAND sh -c "cd ${CMAKE_CURRENT_BINARY_DIR}/src; + ./freedv_tx 2400B ../../raw/ve9qrp_10s.raw - | ./freedv_rx 2400B - /dev/null") + set_tests_properties(test_freedv_api_2400B PROPERTIES PASS_REGULAR_EXPRESSION "frames decoded: 250") + add_test(NAME test_freedv_api_800XA + COMMAND sh -c "cd ${CMAKE_CURRENT_BINARY_DIR}/src; + ./freedv_tx 800XA ../../raw/ve9qrp_10s.raw - | ./freedv_rx 800XA - /dev/null") + set_tests_properties(test_freedv_api_800XA PROPERTIES PASS_REGULAR_EXPRESSION "frames decoded: 125") + + add_test(NAME test_freedv_api_rawdata_800XA + COMMAND sh -c "./tfreedv_800XA_rawdata" + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/unittest + ) + + add_test(NAME test_freedv_api_rawdata_2400A + COMMAND sh -c "./tfreedv_2400A_rawdata" + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/unittest + ) + + add_test(NAME test_freedv_api_rawdata_2400B + COMMAND sh -c "./tfreedv_2400B_rawdata" + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/unittest + ) + +if(UNIX) # Uses pthreads + add_test(NAME test_fifo + COMMAND $ + ) +endif() + +if (NOT APPLE) + add_test(NAME test_memory_leak_FreeDV_1600_tx + COMMAND sh -c " valgrind --leak-check=full --show-leak-kinds=all --track-origins=yes ./freedv_tx 1600 ${CMAKE_CURRENT_SOURCE_DIR}/raw/hts1a.raw /dev/null" + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/src + ) + set_tests_properties(test_memory_leak_FreeDV_1600_tx PROPERTIES PASS_REGULAR_EXPRESSION "ERROR SUMMARY: 0 errors") + + add_test(NAME test_memory_leak_FreeDV_1600_rx + COMMAND sh -c "./freedv_tx 1600 ${CMAKE_CURRENT_SOURCE_DIR}/raw/hts1a.raw t.raw; \ + valgrind --leak-check=full --show-leak-kinds=all --track-origins=yes ./freedv_rx 1600 t.raw /dev/null" + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/src + ) + set_tests_properties(test_memory_leak_FreeDV_1600_rx PROPERTIES PASS_REGULAR_EXPRESSION "ERROR SUMMARY: 0 errors") + + add_test(NAME test_memory_leak_FreeDV_700D_tx + COMMAND sh -c " valgrind --leak-check=full --show-leak-kinds=all --track-origins=yes ./freedv_tx 700D ${CMAKE_CURRENT_SOURCE_DIR}/raw/hts1a.raw /dev/null" + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/src + ) + set_tests_properties(test_memory_leak_FreeDV_700D_tx PROPERTIES PASS_REGULAR_EXPRESSION "ERROR SUMMARY: 0 errors") + + add_test(NAME test_memory_leak_FreeDV_700D_rx + COMMAND sh -c "./freedv_tx 700D ${CMAKE_CURRENT_SOURCE_DIR}/raw/hts1a.raw t.raw; \ + valgrind --leak-check=full --show-leak-kinds=all --track-origins=yes ./freedv_rx 700D t.raw /dev/null" + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/src + ) + set_tests_properties(test_memory_leak_FreeDV_700D_rx PROPERTIES PASS_REGULAR_EXPRESSION "ERROR SUMMARY: 0 errors") + + add_test(NAME test_memory_leak_FreeDV_700C_tx + COMMAND sh -c " valgrind --leak-check=full --show-leak-kinds=all --track-origins=yes ./freedv_tx 700C ${CMAKE_CURRENT_SOURCE_DIR}/raw/hts1a.raw /dev/null" + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/src + ) + set_tests_properties(test_memory_leak_FreeDV_700C_tx PROPERTIES PASS_REGULAR_EXPRESSION "ERROR SUMMARY: 0 errors") + + add_test(NAME test_memory_leak_FreeDV_700C_rx + COMMAND sh -c "cd ${CMAKE_CURRENT_BINARY_DIR}/src; + ./freedv_tx 700C ${CMAKE_CURRENT_SOURCE_DIR}/raw/hts1a.raw t.raw; \ + valgrind --leak-check=full --show-leak-kinds=all --track-origins=yes ./freedv_rx 700C t.raw /dev/null" + ) + set_tests_properties(test_memory_leak_FreeDV_700C_rx PROPERTIES PASS_REGULAR_EXPRESSION "ERROR SUMMARY: 0 errors") + + add_test(NAME test_memory_leak_FreeDV_FSK_LDPC_tx + COMMAND sh -c "cd ${CMAKE_CURRENT_BINARY_DIR}/src; + valgrind --leak-check=full --show-leak-kinds=all --track-origins=yes \ + ./freedv_data_raw_tx --testframes 10 FSK_LDPC /dev/zero /dev/null") + set_tests_properties(test_memory_leak_FreeDV_FSK_LDPC_tx PROPERTIES PASS_REGULAR_EXPRESSION "ERROR SUMMARY: 0 errors") + +if(LPCNET) + add_test(NAME test_memory_leak_FreeDV_2020_tx + COMMAND sh -c "cd ${CMAKE_CURRENT_BINARY_DIR}/src; + valgrind --leak-check=full --show-leak-kinds=all --track-origins=yes ./freedv_tx 2020 ../../wav/wia_16kHz.wav /dev/null" + ) + set_tests_properties(test_memory_leak_FreeDV_2020_tx PROPERTIES PASS_REGULAR_EXPRESSION "ERROR SUMMARY: 0 errors") + + add_test(NAME test_memory_leak_FreeDV_2020_rx + COMMAND sh -c "cd ${CMAKE_CURRENT_BINARY_DIR}/src; + ./freedv_tx 2020 ../../wav/wia_16kHz.wav t.raw; \ + valgrind --leak-check=full --show-leak-kinds=all --track-origins=yes ./freedv_rx 2020 t.raw /dev/null" + ) + set_tests_properties(test_memory_leak_FreeDV_2020_rx PROPERTIES PASS_REGULAR_EXPRESSION "ERROR SUMMARY: 0 errors") +endif(LPCNET) +endif(NOT APPLE) + + add_test(NAME test_codec2_mode_dot_c2 + COMMAND sh -c "./c2enc 700C ${CMAKE_CURRENT_SOURCE_DIR}/raw/hts1a.raw hts1a.c2 && ./c2dec 1600 hts1a.c2 /dev/null" + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/src + ) + set_tests_properties(test_codec2_mode_dot_c2 PROPERTIES PASS_REGULAR_EXPRESSION "mode 8") + + add_test(NAME test_codec2_mode_3200 + COMMAND sh -c "./c2enc 3200 ${CMAKE_CURRENT_SOURCE_DIR}/raw/hts1a.raw - | ./c2dec 3200 - - | sox -t .s16 -r 8000 - hts1a_3200.wav" + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/src + ) + add_test(NAME test_codec2_mode_2400 + COMMAND sh -c "./c2enc 2400 ${CMAKE_CURRENT_SOURCE_DIR}/raw/hts1a.raw - | ./c2dec 2400 - - | sox -t .s16 -r 8000 - hts1a_2400.wav" + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/src + ) + add_test(NAME test_codec2_mode_1400 + COMMAND sh -c "./c2enc 1400 ${CMAKE_CURRENT_SOURCE_DIR}/raw/hts1a.raw - | ./c2dec 1400 - - | sox -t .s16 -r 8000 - hts1a_1400.wav" + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/src + ) + add_test(NAME test_codec2_mode_1300 + COMMAND sh -c "./c2enc 1300 ${CMAKE_CURRENT_SOURCE_DIR}/raw/hts1a.raw - | ./c2dec 1300 - - | sox -t .s16 -r 8000 - hts1a_1300.wav" + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/src + ) + add_test(NAME test_codec2_mode_1200 + COMMAND sh -c "./c2enc 1200 ${CMAKE_CURRENT_SOURCE_DIR}/raw/hts1a.raw - | ./c2dec 1200 - - | sox -t .s16 -r 8000 - hts1a_1200.wav" + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/src + ) + add_test(NAME test_codec2_mode_700C + COMMAND sh -c "./c2enc 700C ${CMAKE_CURRENT_SOURCE_DIR}/raw/hts1a.raw - | ./c2dec 700C - - | sox -t .s16 -r 8000 - hts1a_700C.wav" + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/src + ) + add_test(NAME test_codec2_mode_450 + COMMAND sh -c "./c2enc 450 ${CMAKE_CURRENT_SOURCE_DIR}/raw/hts1a.raw - | ./c2dec 450 - - | sox -t .s16 -r 8000 - hts1a_450.wav" + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/src + ) + add_test(NAME test_codec2_mode_450PWB + COMMAND sh -c "./c2enc 450PWB ${CMAKE_CURRENT_SOURCE_DIR}/raw/hts1a.raw - | ./c2dec 450PWB - - | sox -t .s16 -r 16000 - hts1a_450PWB.wav" + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/src + ) + + configure_file(unittest/est_n0.sh.in unittest/est_n0.sh) + add_test(NAME test_est_n0 + COMMAND ${CMAKE_CURRENT_BINARY_DIR}/unittest/est_n0.sh + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/unittest + ) + add_test(NAME test_vq_mbest + COMMAND sh -c "./tvq_mbest; \ + cat target.f32 | ../misc/vq_mbest -k 2 -q vq1.f32,vq2.f32 --mbest 2 -v > out.f32; \ + diff target.f32 out.f32" + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/unittest + ) + configure_file(unittest/test_700c_eq.sh.in unittest/test_700c_eq.sh) + add_test(NAME test_700c_eq + COMMAND ${CMAKE_CURRENT_BINARY_DIR}/unittest/test_700c_eq.sh + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/unittest + ) + + # ------------------------------------------------------------------------- + # FSK Modem + # ------------------------------------------------------------------------- + + # Octave FSK Modem, to make sure we don't break reference simulation + add_test(NAME test_fsk_lib + COMMAND sh -c "cd ${CMAKE_CURRENT_SOURCE_DIR}/octave; DISPLAY=\"\" octave --no-gui -qf fsk_lib_demo.m") + set_tests_properties(test_fsk_lib PROPERTIES PASS_REGULAR_EXPRESSION "PASS") + + add_test(NAME test_fsk_modem_octave_port + COMMAND sh -c "cd ${CMAKE_CURRENT_SOURCE_DIR}/octave; + PATH_TO_TFSK=${CMAKE_CURRENT_BINARY_DIR}/unittest/tfsk octave --no-gui -qf tfsk.m") + set_tests_properties(test_fsk_modem_octave_port PROPERTIES PASS_REGULAR_EXPRESSION "PASS") + + add_test(NAME test_fsk_modem_mod_demod + COMMAND sh -c "$ - 10000 | + $ 2 8000 100 1200 100 - - | + $ -l 2 8000 100 - - | + $ -p 99 -q -" + ) + + # 2FSK modem at Eb/No = 9dB, SNR = Eb/No+10log10(Rb/B) = 9 + 10*log10(100/3000) = -5.7dB + # Ideal BER = 0.0094, set thresh 50% higher + add_test(NAME test_fsk_2fsk_ber + COMMAND sh -c "cd ${CMAKE_CURRENT_BINARY_DIR}/src; + ./fsk_get_test_bits - 10000 | ./fsk_mod 2 8000 100 1000 100 - - | + ./cohpsk_ch - - -26 --Fs 8000 | + ./fsk_demod 2 8000 100 - - | ./fsk_put_test_bits -b 0.015 -q - ") + # 4FSK modem at Eb/No = 6dB, SNR = Eb/No+10log10(Rb/B) = 6 + 10*log10(2*100/3000) = -5.7dB + # Ideal BER = 0.016, set thresh 50% higher + add_test(NAME test_fsk_4fsk_ber + COMMAND sh -c "cd ${CMAKE_CURRENT_BINARY_DIR}/src; + ./fsk_get_test_bits - 10000 | ./fsk_mod 4 8000 100 1000 100 - - | + ./cohpsk_ch - - -26 --Fs 8000 | + ./fsk_demod 4 8000 100 - - | ./fsk_put_test_bits -b 0.025 - ") + # shift FSK signal to -ve frequencies, note No 3dB higher as noise is single sided + add_test(NAME test_fsk_4fsk_ber_negative_freq + COMMAND sh -c "cd ${CMAKE_CURRENT_BINARY_DIR}/src; + ./fsk_get_test_bits - 10000 | ./fsk_mod 4 8000 100 1000 200 - - | + ./cohpsk_ch - - -23 --Fs 8000 --ssbfilt 0 --complexout -f -4000 | + ./fsk_demod -c -p 8 4 8000 100 - - | + ./fsk_put_test_bits -b 0.025 -q - ") + # Low SNR 4FSK uncoded PER/BER test: + # 4FSK modem at Eb/No = 2dB, SNR = Eb/No+10log10(Rb/B) = 6 + 10*log10(2*100/3000) = -15.7dB + # Theoretical BER is 0.14. As it's single sided noise cohpsk_ch reports 3dB less (-18.7dB) + # Pass condition is 10% PER + add_test(NAME test_fsk_4fsk_lockdown + COMMAND sh -c "cd ${CMAKE_CURRENT_BINARY_DIR}/src; + bits=512; tx_packets=20; rx_packets=18; tx_tone_sep=270; Rs=25; + ./fsk_get_test_bits - $(($bits*$tx_packets)) $bits | + ./fsk_mod 4 8000 $Rs 1000 $tx_tone_sep - - | + ./cohpsk_ch - - -13 --Fs 8000 --ssbfilt 0 -f -3000 --complexout | + ./fsk_demod -c -p 8 --mask $tx_tone_sep -t1 --nsym 100 4 8000 $Rs - - 2>stats.txt | + ./fsk_put_test_bits -t 0.25 -b 0.20 -p $rx_packets -f $bits -q -") + + # Octave 4FSK LLR reference simulation - make sure this keeps working + add_test(NAME test_fsk_lib_4fsk_ldpc + COMMAND sh -c "cd ${CMAKE_CURRENT_SOURCE_DIR}/octave; DISPLAY=\"\" octave --no-gui -qf fsk_lib_ldpc_demo.m") + set_tests_properties(test_fsk_lib_4fsk_ldpc PROPERTIES PASS_REGULAR_EXPRESSION "PASS") + + # Command line Unique Word (UW) framer in hard decision mode + add_test(NAME test_fsk_framer + COMMAND sh -c "cd ${CMAKE_CURRENT_BINARY_DIR}/src; + ./fsk_get_test_bits - 300 | + ./framer - - 100 51 | + ./deframer - - 100 51 --hard | + ./fsk_put_test_bits -") + set_tests_properties(test_fsk_framer PROPERTIES PASS_REGULAR_EXPRESSION "PASS") + + # Command line Unique Word (UW) framer with LLRs and LDPC (no noise) + add_test(NAME test_fsk_framer_ldpc + COMMAND sh -c "cd ${CMAKE_CURRENT_BINARY_DIR}/src; + ./ldpc_enc /dev/zero - --code HRA_112_112 --testframes 10 | ./framer - - 224 51 | + ./tollr | ./deframer - - 224 51 | ./ldpc_dec - /dev/null --code HRA_112_112 --testframes") + + # mFSK soft decision rx_filter to LLR mapping + add_test(NAME test_fsk_llr + COMMAND sh -c "${CMAKE_CURRENT_BINARY_DIR}/unittest/tfsk_llr") + + # 4FSK LDPC modem with framer at Rs=100 (uncoded Rb=200), rate 0.8 code + # SNR = Eb/No + 10*log10(Rb/B) = 5 + 10*log10(200/3000) = -6.7dB + # Coded Ebc/No = Eb/No - 10*log1010(0.8) = 5 - 10*log10(0.8) = 6.0dB + # (calculation ignores small UW overhead). See also test_freedv_fsk_ldpc below + # which is the same thing bundled up into a FreeDV "mode" + add_test(NAME test_fsk_4fsk_ldpc + COMMAND sh -c "cd ${CMAKE_CURRENT_BINARY_DIR}/src; + ./ldpc_enc /dev/zero - --code HRAb_396_504 --testframes 200 | + ./framer - - 504 5186 | + ./fsk_mod 4 8000 100 1000 100 - - | + ./cohpsk_ch - - -25 --Fs 8000 | + ./fsk_demod -s 4 8000 100 - - | + ./deframer - - 504 5186 | + ./ldpc_dec - /dev/null --code HRAb_396_504 --testframes") + + # 800XA framer test + add_test(NAME test_fsk_vhf_framer + COMMAND sh -c "cd ${CMAKE_CURRENT_BINARY_DIR}/src; + ./c2enc 700C ../../raw/ve9qrp_10s.raw - | + ./vhf_frame_c2 B - - | + ./fsk_mod -p 10 4 8000 400 400 400 - - | + ./fsk_demod -p 10 4 8000 400 - - | + ./vhf_deframe_c2 B - /dev/null") + set_tests_properties(test_fsk_vhf_framer PROPERTIES PASS_REGULAR_EXPRESSION "total_uw_err: 0") + + # VHF Ethernet-style packet system + add_test(NAME test_freedv_data_channel + COMMAND sh -c "./tfreedv_data_channel" + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/unittest + ) + + # --------------------------------------------------------- + # FreeDV API raw data + # --------------------------------------------------------- + + # OFDM LDPC + add_test(NAME test_freedv_data_raw_ofdm + COMMAND sh -c "cd ${CMAKE_CURRENT_BINARY_DIR}/src; + head -c 140 binaryIn.bin; + ./freedv_data_raw_tx 700D binaryIn.bin - | + ./freedv_data_raw_rx 700D - - -v | + diff /dev/stdin binaryIn.bin") + + # FSK LDPC default 100 bit/s 2FSK, enough noise for several % raw BER to give + # FEC/acquisition a work out, bursts of 1 frame as that stresses acquisition + add_test(NAME test_freedv_data_raw_fsk_ldpc_100 + COMMAND sh -c "cd ${CMAKE_CURRENT_BINARY_DIR}/src; + ./freedv_data_raw_tx --testframes 1 --bursts 10 FSK_LDPC /dev/zero - | + ./cohpsk_ch - - -5 --Fs 8000 --ssbfilt 0 | + ./freedv_data_raw_rx --testframes -v FSK_LDPC - /dev/null") + set_tests_properties(test_freedv_data_raw_fsk_ldpc_100 PROPERTIES PASS_REGULAR_EXPRESSION "output_packets: 10") + + # FSK LDPC 1000 bit/s 2FSK, Fs=40kHz, as different configs can upset acquisition + add_test(NAME test_freedv_data_raw_fsk_ldpc_1k + COMMAND sh -c "cd ${CMAKE_CURRENT_BINARY_DIR}/src; + ./freedv_data_raw_tx --Fs 40000 --Rs 1000 --tone1 1000 --shift 1000 --testframes 1 --bursts 10 FSK_LDPC /dev/zero - | + ./cohpsk_ch - - -10 --Fs 8000 --ssbfilt 0 | + ./freedv_data_raw_rx --testframes -v --Fs 40000 --Rs 1000 FSK_LDPC - /dev/null") + set_tests_properties(test_freedv_data_raw_fsk_ldpc_1k PROPERTIES PASS_REGULAR_EXPRESSION "output_packets: 10") + + # FSK LDPC 10000 bit/s 2FSK, Fs=100kHz, each of the 10 bursts has 100 frames + add_test(NAME test_freedv_data_raw_fsk_ldpc_10k + COMMAND sh -c "cd ${CMAKE_CURRENT_BINARY_DIR}/src; + ./freedv_data_raw_tx --Fs 100000 --Rs 10000 --tone1 10000 --shift 10000 --testframes 100 --bursts 10 FSK_LDPC /dev/zero - | + ./cohpsk_ch - - -15 --Fs 8000 --ssbfilt 0 | + ./freedv_data_raw_rx --testframes -v --Fs 100000 --Rs 10000 FSK_LDPC - /dev/null") + set_tests_properties(test_freedv_data_raw_fsk_ldpc_10k PROPERTIES PASS_REGULAR_EXPRESSION "output_packets: 1000") + + # FSK LDPC Rs=1000 bit/s (Rb=2000) 4FSK, Fs=40kHz, this needs --mask and longer preamble to work, due to lower Es/No, about 2dB over 2FSK + add_test(NAME test_freedv_data_raw_fsk_ldpc_2k + COMMAND sh -c "cd ${CMAKE_CURRENT_BINARY_DIR}/src; + ./freedv_data_raw_tx -a 8192 -m 4 --Fs 40000 --Rs 1000 --tone1 1000 --shift 1000 --testframes 1 --bursts 10 FSK_LDPC /dev/zero - | + ./cohpsk_ch - - -22 --Fs 8000 --ssbfilt 0 | + ./freedv_data_raw_rx -m 4 --testframes -v --Fs 40000 --Rs 1000 FSK_LDPC --mask 1000 - /dev/null") + set_tests_properties(test_freedv_data_raw_fsk_ldpc_2k PROPERTIES PASS_REGULAR_EXPRESSION "output_packets: 10") + +endif(UNITTEST) diff --git a/libcodec2-android/src/codec2/COPYING b/libcodec2-android/src/codec2/COPYING new file mode 100644 index 0000000..cc40a46 --- /dev/null +++ b/libcodec2-android/src/codec2/COPYING @@ -0,0 +1,502 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, see + . + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! diff --git a/libcodec2-android/src/codec2/README.md b/libcodec2-android/src/codec2/README.md new file mode 100644 index 0000000..6e88f7c --- /dev/null +++ b/libcodec2-android/src/codec2/README.md @@ -0,0 +1,201 @@ +# Codec 2 README + +Codec 2 is an open source (LGPL 2.1) low bit rate speech codec: http://rowetel.com/codec2.html + +Also included: + + + The FreeDV API for digital voice over radio. FreeDV is an open source digital voice protocol that integrates modems, codecs, and FEC [README_freedv](README_freedv.md) + + APIs for raw and Ethernet packet data over radio [README_data](README_data.md) + + High performance coherent OFDM modem for HF channels [README_ofdm](README_ofdm.md) + + High performance non-coherent FSK modem [README_fsk](README_fsk.md) + + An STM32 embedded version of FreeDV 1600/700D for the [SM1000](stm32/README.md) + + Coherent PSK modem [README_cohpsk](README_cohpsk.md) for HF channels + + FDMDV DPSK modem [README_fdmdv](README_fdmdv.md) for HF channels + +## Quickstart + +1. Install packages (Debian/Ubuntu): + ``` + $ sudo apt install git build-essential cmake + ``` + Fedora/RH distros: + ``` + $ sudo dnf groupinstall "Development Tools" "C Development Tools and Libraries" + $ sudo dnf install cmake + ``` + +1. Build Codec 2: + ``` + $ git clone git@github.com:drowe67/codec2.git + $ cd codec2 + $ mkdir build_linux + $ cd build_linux + $ cmake .. + $ make + ``` + +1. Listen to Codec 2 (run from ```codec2/build_linux```): + ``` + $ ./src/c2demo ../raw/hts1a.raw hts1a_c2.raw + $ aplay -f S16_LE ../raw/hts1a.raw + $ aplay -f S16_LE hts1a_c2.raw + ``` +1. Compress, decompress and then play a file using Codec 2 at 2400 bit/s: + ``` + $ ./src/c2enc 2400 ../raw/hts1a.raw hts1a_c2.bit + $ ./src/c2dec 2400 hts1a_c2.bit hts1a_c2_2400.raw + ``` + which can be played with: + ``` + $ aplay -f S16_LE hts1a_c2_2400.raw + ``` + Or using Codec 2 using 700C (700 bits/s): + ``` + $ ./src/c2enc 700C ../raw/hts1a.raw hts1a_c2.bit + $ ./src/c2dec 700C hts1a_c2.bit hts1a_c2_700.raw + $ aplay -f S16_LE hts1a_c2_700.raw + ``` +1. If you prefer a one-liner without saving to files: + ``` + $ ./src/c2enc 1300 ../raw/hts1a.raw - | ./src/c2dec 1300 - - | aplay -f S16_LE + ``` + +## FreeDV 2020 support (building with LPCNet) + +1. Build codec2 initially without LPCNet + ``` + $ cd ~ + $ git clone https://github.com/drowe67/codec2.git + $ cd codec2 && mkdir build_linux && cd build_linux + $ cmake ../ + $ make + ``` + +1. Build LPCNet: + ``` + $ cd ~ + $ git clone https://github.com/drowe67/LPCNet + $ cd LPCNet && mkdir build_linux && cd build_linux + $ cmake -DCODEC2_BUILD_DIR=~/codec2/build_linux ../ + $ make + ``` + +1. (Re)build Codec 2 with LPCNet support: + ``` + $ cd ~/codec2/build_linux && rm -Rf * + $ cmake -DLPCNET_BUILD_DIR=~/LPCNet/build_linux .. + $ make + ``` + +## Programs + ++ ```c2demo``` encodes a file of speech samples, then decodes them and saves the result. + ++ ```c2enc``` encodes a file of speech samples to a compressed file of encoded bits. ```c2dec``` decodes a compressed file of bits to a file of speech samples. + ++ ```c2sim``` is a simulation/development version of Codec 2. It allows selective use of the various Codec 2 algorithms. For example switching phase modelling or quantisation on and off. + ++ ```freedv_tx``` & ```freedv_rx``` are command line implementations of the FreeDV protocol, which combines Codec 2, modems, and Forward Error Correction (FEC). + ++ ```cohpsk_*``` are coherent PSK (COHPSK) HF modem command line programs. + ++ ```fdmdv_*``` are differential PSK HF modem command line programs (README_fdmdv). + ++ ```fsk_*``` are command line programs for a non-coherent FSK modem (README_fsk). + ++ ```ldpc_*``` are LDPC encoder/decoder command line programs, based on the CML library. + ++ ```ofdm_*``` are OFDM PSK HF modem command line programs (README_ofdm). + +## Building and Running Unit Tests + +CTest is used as a test framework, with support from [GNU Octave](https://www.gnu.org/software/octave/) scripts. + +1. Install GNU Octave and libraries on Ubuntu with: + ``` + $ sudo apt install octave octave-common octave-signal liboctave-dev gnuplot python3-numpy sox valgrind + ``` +1. Install CML library with instructions at the top of [```octave/ldpc.m```](octave/ldpc.m) + +1. To build and run the tests: + ``` + $ cd ~/codec2 + $ rm -Rf build_linux && mkdir build_linux + $ cd build_linux + $ cmake -DCMAKE_BUILD_TYPE=Debug .. + $ make all test + ``` + +1. To just run tests without rebuilding: + ``` + $ ctest + ``` + +1. To get a verbose run (e.g. for test debugging): + ``` + $ ctest -V + ``` + +1. To just run a single test: + ``` + $ ctest -R test_OFDM_modem_octave_port + ``` + +1. To list the available tests: + ``` + $ ctest -N + ``` + +## Directories +``` +cmake - cmake support files +misc - misc C programs that have been useful in development, + not reqd for Codec 2 release. Part of Debug build. +octave - Octave scripts used to support development +script - shell scripts for playing and converting raw files +src - C source code for Codec 2, FDMDV modem, COHPSK modem, FreeDV API +raw - speech files in raw format (16 bits signed linear 8 kHz) +stm32 - STM32F4 microcontroller and SM1000 FreeDV Adaptor support +unittest - Code to perform and support testing. Part of Debug build. +wav - speech files in wave file format +``` +## GDB and Dump Files + +1. To compile with debug symbols for using gdb: + ``` + $ cd ~/codec2 + $ rm -Rf build_linux && mkdir build_linux + $ cd build_linux + $ CFLAGS=-g cmake .. + $ make + ``` + +1. For dump file support (dump data from c2sim for input to Octave development scripts): + ``` + $ cd ~/codec2 + $ rm -Rf build_linux && mkdir build_linux + $ cd build_linux + $ CFLAGS=-DDUMP cmake .. + $ make + ``` + +## Building for Windows on a Linux machine + +On Ubuntu 17 and above: + ``` + $ sudo apt-get install mingw-w64 + $ mkdir build_windows && cd build_windows + $ cmake .. -DCMAKE_TOOLCHAIN_FILE=/home/david/freedv-dev/cmake/Toolchain-Ubuntu-mingw32.cmake -DUNITTEST=FALSE -DGENERATE_CODEBOOK=/home/david/codec2/build_linux/src/generate_codebook + $ make + ``` + +## Building for Windows on a Windows machine + + ``` + mkdir build_windows (Or what ever you want to call your build dir) + cmake -G "MinGW Makefiles" -D CMAKE_MAKE_PROGRAM=mingw32-make.exe + Or if you use ninja for building cmake -G "Ninja" .. + mingw32-make or ninja depends on what you used in the last command + wait for it to build. + ``` + diff --git a/libcodec2-android/src/codec2/README_cohpsk.md b/libcodec2-android/src/codec2/README_cohpsk.md new file mode 100644 index 0000000..ef6544a --- /dev/null +++ b/libcodec2-android/src/codec2/README_cohpsk.md @@ -0,0 +1,43 @@ +# README_cohpsk.md + +## Introduction + +## Quickstart + +1. BER test in AWGN channel with just less that 2% average bit error rate: + + ``` + $ ./cohpsk_get_test_bits - 5600 | ./cohpsk_mod - - | ./cohpsk_ch - - -30 | ./cohpsk_demod - - | ./cohpsk_put_test_bits - + + SNR3k(dB): 3.41 C/No: 38.2 PAPR: 8.1 + BER: 0.017 Nbits: 5264 Nerrors: 92 + + ``` + +2. Plot some of the demod internal states, used to chase down freq offset problemL + + ``` + $ cd build_linux/src + $ ./cohpsk_get_test_bits - 5600 | ./cohpsk_mod - - | ./cohpsk_ch - - -40 -f -20 | ./cohpsk_demod -o cohpsk_demod.txt - - | ./cohpsk_put_test_bits - + $ cd ../../octave + $ octave --no-gui + $ cohpsk_demod_plot("../build_linux/src/cohpsk_demod.txt") + ``` + +3. Run Octave<-> tests + + ``` + $ cd ~/codec2/build_linux/unittest + $ ./tochpsk + $ cd ~/codec2/octave + $ octave --no-gui + octave> tcohpsk + ``` + +## References + +## C Code + +## Octave Scripts + + diff --git a/libcodec2-android/src/codec2/README_data.md b/libcodec2-android/src/codec2/README_data.md new file mode 100644 index 0000000..ca36056 --- /dev/null +++ b/libcodec2-android/src/codec2/README_data.md @@ -0,0 +1,257 @@ +# README_data.md + +# Introduction + +FreeDV can be used to send data over radio channels. Two APis are supported: ++ VHF packet data channel which uses Ethernet style framing. ++ Raw frames of modem data + +## Credits + +The VHF data channel was developed by Jeroen Vreeken. + +## Quickstart + +VHF packet data API: + +1. Simple test using mode 2400A and VHF packet data + + ```sh + $ cd ~/codec2/build_linux + $ ./src/freedv_data_tx 2400A - --frames 15 | ./src/freedv_data_rx 2400A - + + ``` + You can listen to the modem signal using: + ```sh + $ ./src/freedv_data_tx 2400A - --frames 15 | aplay -f S16_LE -r 48000 + + ``` + +2. Same for 2400B and 800XA + + ```sh + $ ./src/freedv_data_tx 2400B - --frames 15 | ./src/freedv_data_rx 2400B - + $ ./src/freedv_data_tx 800XA - --frames 15 | ./src/freedv_data_rx 800XA - + + ``` + +3. Using a different callsign and secondary station id + + ```sh + $ ./src/freedv_data_tx 2400A - --callsign T3ST --ssid 15 --frames 15 | src/freedv_data_rx 2400A - + ``` + +Raw modem frame API: + +1. Let's send two modem frames of 14 bytes using FreeDV 700D: + ```sh + $ head -c 28 binaryIn.bin + $ ./src/freedv_data_raw_tx 700D binaryIn.bin - | ./src/freedv_data_raw_rx 700D - - | hexdump + bits_per_modem_frame: 112 bytes_per_modem_frame: 14 + frames processed: 4 output bytes: 28 + $ hexdump binaryIn.bin + 0000000 4325 0363 ce1f fb88 8102 7d76 c487 e092 + 0000010 2ded bc06 7689 eb67 5dfe 43df + ``` + +# VHF Packet Data Channel + +The FreeDV VHF data channel operates on a packet level. The FreeDV modems however typically operate on a fixed frame base. This means that data packets have to be sent in multiple frames. + +The packet format is modeled after Ethernet. As a result, any protocol that is compatible with Ethernet can potentially be used over a FreeDV data link. (There are of course practical limits. Browsing the world wide web with just a few hundred bits per second will not be a pleasant experience.) + +## Header optimization + +When there are no packets available for transmission a small 'filler' packet with just the sender's address will be sent. +When there is a packet available not all of the header needs to be sent. The sender's address can often be left out if it was already sent in a previous frame. Likewise when the packet has no specific destination but is targeted at a multicast address, this can also be transmitted in a single bit as opposed to a 6 byte broadcast address. + + +## Addressing + +Since the format is based on Ethernet, a 6 byte sender and destination address is used. It is possible to encode an ITU compatible callsign in these bytes. See http://dmlinking.net/eth_ar.html for more info. Or have a look at freedv_data_tx.c and freedv_data_rx.c for an actual implementation. + +## Packet types + +The 2 byte EtherType field is used to distinguish between various protocols. + +## Checks + +Not all channels are perfect, and especially since a packet is split up over multiple frames, bits might get lost. Each packet therefore has a CRC which is checked before it is accepted. Note there is No FEC on 2400A/2400B/800XA. + +## Available modes + +The data channel is available for modes 2400A, 2400B and 800XA. + +## API + +The data channel is part of the regular FreeDV API. + +### Initialization + +After creating a new freedv instance with freedv_open(), a few more calls need to be done before the data channel is usable. + + ``` + void freedv_set_data_header (struct freedv *freedv, unsigned char *header); + ``` + +The address that will be used for 'filler' packets must be set. The freedv_set_data_header() function must be called with a 6 byte header. + + ``` + typedef void (*freedv_callback_datarx)(void *, unsigned char *packet, size_t size); + typedef void (*freedv_callback_datatx)(void *, unsigned char *packet, size_t *size); + void freedv_set_callback_data (struct freedv *freedv, freedv_callback_datarx datarx, freedv_callback_datatx datatx, void *callback_state); + ``` + +Using freedv_set_callback_data() two callback functions can be provided. The datarx callback will be used whenever a new data packet has been successfully received. The datatx callback will be used when a new data packet is required for transmission. + +### Operation + + ``` + void freedv_datatx (struct freedv *f, short mod_out[]); + ``` + +During normal operation the freedv_datatx() function can be used whenever a data frame has to be sent. If no data is available it will request new data using the datatx callback. The callback function is allowed to set 'size' to zero if no data is available or if it wishes to send an address frame. + +For reception the regular freedv_rx() functions can be used as received data will automatically be reported using the datarx callback. Be aware that these functions return the actual number of received speech samples. When a data frame is received the return value will be zero. This may lead to 'gaps' in the audio stream which will have to be filled with silence. + +### Examples + +The freedv_data_tx and freedv_data_rx test programs implement the minimum needed to send and receive data packets. + +## Mixing voice and data + +Encoding only voice data is easy with the FreeDV API. Simply use the freedv_tx() function and provide it with speech samples. +Likewise encoding only data is also easy. Make sure to provide a source of data frames using the freedv_set_callback_data() function, and use the freedv_datatx() function to generate frames. + +However there are many use cases where one would like to transmit a mix of voice and data. For example one might want to transmit their callsign in a machine readable format, or a short position report. There are a few ways to do this: + +### Data bursts at start and/or end of transmission + +This method simply transmits voice frames during the transmission, except for a few moments. For example when the user keys the radio the software uses the freedv_datatx() function for a number of frames before switching to regular voice frames. +Likewise when the user releases the key the software may hold it for a number of frames to transmit data before it releases the actual radio. + +Be careful though: depending on your setup (radio, PC, soundcard, etc) the generated frames and the keying of your radio might not be perfectly in sync and the first or last frames might be lost in the actual transmission. Make sure to take this into account when using this method. + +### Data and voice interleaved + +Another method is to generate a mixed stream of frames. Compared to a small burst at the beginning or end a lot more data can be sent. We only need a way to choose between voice or data such that the recovered speech at the other side is not impacted. + +#### Detect voice activity + +When it is possible to determine activity in the voice signal (and it almost always is) this presence can be used to insert a data frame by calling freedv_datatx() instead of freedv_tx()/freedv_codectx(). This method is used in the freedv_mixed_tx demo program. When the option --codectx is given the codec2 library is used to determine the activity. + + ``` + $ ./src/freedv_mixed_tx 2400A ../raw/hts1a.raw - --codectx | src/freedv_data_rx 2400A - + $ ./src/freedv_mixed_tx 2400A ../raw/hts1a.raw - | src/freedv_data_rx 2400A - + ``` + +The advantage of this method is that the audio is not distorted, there was nothing (or near nothing) to distort. A drawback is that constant voice activity may mean there are insufficient frames for data. + +### Receiving mixed voice and data + +Receiving and decoding a mixed voice and data stream is (almost) as easy as receiving a regular voice-only transmission. +One simply uses the regular API calls for reception of speech samples. In addition, the callback functions are used for data. +There is one caveat though: when a data frame is received the API functions (like freedv_rx) will return zero as this is the amount of codec/voice data received. +For proper playback silence (or comfort noise) should be inserted for the duration of a frame to restore the timing of the original source speech samples. +An example of how this is done is provided in freedv_mixed_rx + + ``` + $ ./src/freedv_mixed_tx 2400A ../raw/hts1a.raw - | src/freedv_mixed_rx 2400A - ./hts1a_out.raw + ``` + +### Insert a data frame periodically + +This is a very simple method, simply insert a data frame every n frames, (e.g. once every 10 seconds). Since single FreeDV frames are relatively short (tens of milliseconds) the effect on received audio will be minor. The advantage of this method is that one can create a guaranteed amount of data bandwidth. A drawback is some interruption in the audio that may be noticed. + +### Combination of the above. + +A combination of the two methods may also be used. Send data when no voice is active and insert a frame when this does not occur for a long time. + +# Raw Data using the FreeDV API + +The demo programs [freedv_data_raw_tx.c](src/freedv_data_raw_tx.c) and [freedv_data_raw_rx.c](src/freedv_data_raw_rx.c) show how to use the raw data API. The raw data API may lose frames due to channel impairments, loss of sync, or acquisition delays. The caller must handle these situations. The caller is also responsible for segmentation/re-assembly of the modem frames into larger blocks of data. + +## FSK LDPC Raw Data Mode + +The FSK_LDPC mode uses 2 or 4 FSK in combination with powerful LDPC codes. Parameters such as the number of FSK tones, sample rate, symbol rate, and LDPC code can be selected at initialisation time. The frame format is: +``` +| Preamble | UW | payload data | CRC | parity | UW | payload data | CRC | parity | ........... | + | frame 1 -------------------------| frame 2 -------------------------| ... frame n | +``` +Only one preamble is transmitted for each data burst, which can contain as many frames as you like. Each frame starts with a 32 bit Unique Word (UW), then the FEC codeword consisting of the data and parity bits. At the end of the data bits, we reserve 16 bits for a CRC. + +Here is an example of sending some text: +``` +$ cd codec2/build_linux/src +$ echo 'Hello World ' | + ./freedv_data_raw_tx FSK_LDPC - - 2>/dev/null | + ./freedv_data_raw_rx FSK_LDPC - - 2>/dev/null | + hexdump -C +00000000 48 65 6c 6c 6f 20 57 6f 72 6c 64 20 20 20 20 20 |Hello World | +00000010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 11 c6 | ..| +00000020 +``` +Notes: +1. The input data is padded to 30 bytes. The (512,256) code sends 256 data bits every frame, we reserve 16 for a CRC, so there are 240 bits, or 30 bytes of payload data required for one frame. +1. You can see the `0x11c6` CRC bytes at the end of the hexdump output. +1. The '2>/dev/null' command redirects stderr to nowhere, removing some of the debug information the test programs usually display to make this example easier to read. + +When testing, it's convenient to use an internal source of test data. Here is an example where we send a single burst of 10 test frames: +``` +$ cd codec2/build_linux/src +$ ./freedv_data_raw_tx --testframes 10 FSK_LDPC /dev/zero - | ./freedv_data_raw_rx --testframes FSK_LDPC - /dev/null +Nbits: 50 N: 4000 Ndft: 1024 +bits_per_modem_frame: 256 bytes_per_modem_frame: 32 +bytes_per_modem_frame: 32 +Frequency: Fs: 8.0 kHz Rs: 0.1 kHz Tone1: 1.0 kHz Shift: 0.2 kHz M: 2 + +frames processed: 131 output bytes: 320 output_packets: 10 +BER......: 0.0000 Tbits: 5440 Terrs: 0 +Coded BER: 0.0000 Tbits: 2560 Terrs: 0 +``` +The default is 100 bits/s 2FSK. The (512,256) code sends 256 data bits (32 bytes) with every codeword, the remaining 256 bits reserved for parity. The `--testframes` mode reports `320 output bytes` (10 frames where sent), and `Tbits: 2560`, so all of our data made it through. + +In real world operation, 16 of the data bits are reserved for a CRC, leaving 240 payload data bits per frame. Taking into account the overhead of the UW, CRC, and parity bits, we send 240 payload data bits for every out of 544, so the payload data rate in this example is (240/512)*(100 bits/s) = 44.1 bits/s. + +We can add some channel noise using the `cohpsk_ch` tool and see how it performs: +``` +$ ./freedv_data_raw_tx --testframes 1 --bursts 10 FSK_LDPC /dev/zero - | + ./cohpsk_ch - - -5 --Fs 8000 --ssbfilt 0 | + ./freedv_data_raw_rx --testframes -v FSK_LDPC - /dev/null + +frames processed: 336 output bytes: 320 output_packets: 10 +BER......: 0.0778 Tbits: 5440 Terrs: 423 +SNR3k(dB): -13.00 C/No: 21.8 PAPR: 7.5 +Coded BER: 0.0000 Tbits: 2560 Terrs: 0 +``` +The `cohpsk_ch` stderr reporting is mixed up with the testframes results but we can see that over a channel with a -13dB SNR, we obtained a raw bit error rate of 0.0778 (nearly 8%). However the LDPC code cleaned that up nicely and still received all 10 packets with no errors. + +Here is an example running 4FSK at 20000 bits/s (10000 symbols/s), at a sample rate of 200 kHz: +``` +$./freedv_data_raw_tx -m 4 --Fs 200000 --Rs 10000 --tone1 10000 --shift 10000 --testframes 100 --bursts 10 FSK_LDPC /dev/zero - | + ./cohpsk_ch - - -12 --Fs 8000 --ssbfilt 0 | + ./freedv_data_raw_rx -m 4 --testframes -v --Fs 200000 --Rs 10000 FSK_LDPC --mask 10000 - /dev/null + + frames processed: 5568 output bytes: 30144 output_packets: 942 +BER......: 0.0691 Tbits: 528224 Terrs: 36505 +Coded BER: 0.0022 Tbits: 248576 Terrs: 535 +``` +Some notes on this example: +1. We transmit 10 bursts, each of 100 frames in length, 1000 packets total. There are a couple of frames silence between each burst. This gives the acquisition algorithms a good work out. +1. Only 942 packets make it though this rather noisy channel, a 6% Packet Error Rate (PER). In a real world application, a higher protocol layer would need to detect this, and arrange for re-transmission of missing packets. If the SNR was a few dB better, all 1000 packets would likely make it through. If it was 1dB worse, nothing would get through; LDPC codes have a very sharp "knee" in the PER versus SNR curve. +1. Our first tone `--tone` is at 10kHz, and each tone is spaced `--shift` by 10kHz, so we have FSK tones at 10,20,30, and 40 kHz. For good performance, FSK tones must be spaced by at least the symbol rate Rs. +1. Although the `cohpsk_ch` utility is designed for 8kHz sample rate operation, it just operates on sampled signals, so it's OK to use at higher sample rates. It does have some internal filtering so best to keep your signal well away from 0 and (sample rate)/2. The SNR measurement is calibrated to a 3000 Hz noise bandwidth, so won't make much sense at other sample rates. The third argument `-12` sets the noise level of the channel. +1. The `--mask` frequency offset algorithm is used, which gives better results on noisy channels, especially for 4FSK. + +There are some more example in the [ctests](CMakeLists.txt). + +## HF Raw Data modes + +The following FreeDV modes are recommended for *preliminary development* using the raw data API. These modes were originally designed for streaming voice rather than data and are not suitable for production HF data applications. They have small payloads, and acquisition algorithms not suitable for packet data over real world HF channels. New modes are being design for HF data at the time of writing (June 2020). + +| FreeDV Mode | RF bandwidth (Hz) | Payload data rate bits/s | bytes/frame | FEC | Min SNR (dB, AWGN) | +| :-: | :-: | :-: | :-: | :-: | :-: | +| 700C | 1100 | 700 | 7 | none | 2 | +| 700D | 1100 | 700 | 14 | rate 0.8 | -2 | +| 2020 | 1500 | 1733 | 39 | rate 0.6 | 2 | + diff --git a/libcodec2-android/src/codec2/README_fdmdv.md b/libcodec2-android/src/codec2/README_fdmdv.md new file mode 100644 index 0000000..55b9e3f --- /dev/null +++ b/libcodec2-android/src/codec2/README_fdmdv.md @@ -0,0 +1,122 @@ +# README_fdmdv + +## Introduction + +A 1400 bit/s (nominal) Frequency Division Multiplexed Digital Voice (FDMDV) modem based on [FreeDV 1600 Specification](https://freedv.org/freedv-specification). Used for FreeDV 1600. + +The FDMDV modem was first implemented in GNU Octave, then ported to C. Algorithm development is generally easier in Octave, but for real-time work we need the C version. Automated units tests ensure the operation of the Octave and C versions are identical. + +## Quickstart + +Built as part of codec2, see [README](README.md) for build instructions. + +1. Generate some test bits and modulate them: + ``` + $ ./fdmdv_get_test_bits test.c2 1400 + $ ./fdmdv_mod test.c2 test.raw + $ play -r 8000 -s -2 test.raw + ``` + +1. Two seconds of test frame data modulated and sent out of sound device: + ``` + $ ./fdmdv_get_test_bits - 2800 | ./fdmdv_mod - - | play -t raw -r 8000 -s -2 - + ``` + +1. Send 14000 modulated bits (10 seconds) to the demod and count errors: + ``` + $ ./fdmdv_get_test_bits - 14000 | ./fdmdv_mod - - | ./fdmdv_demod - - 14 demod_dump.txt | ./fdmdv_put_test_bits - + ``` + Use Octave to look at plots of 1 second (1400 bits) of modem operation: + ``` + $ cd ../octave + $ octave --no-gui + octave:1> fdmdv_demod_c("../src/demod_dump.txt",14000) + ``` + +1. Run Octave simulation of entire modem and AWGN channel: + ``` + $ cd ../octave + $ octave + octave:1> fdmdv_ut + ``` + +1. NOTE: If you would like to play modem samples over the air please convert the 8 kHz samples to 48 kHz. Many PC sound cards have wildly inaccurate sample clock rates when set to 8 kHz, but seem to perform OK when set for 48 kHz. If playing and recording files you can use the sox utility: + ``` + $ sox -r 8000 -s -2 modem_sample_8kHz.raw -r 48000 modem_sample_48kHz.wav + ``` + For real-time applications, the fdmdv.[ch] library includes functions to convert between 48 and 8 kHz sample rates. + +1. Send 20 seconds at 2000 bit/s (20 carriers) to demod and count errors: + ``` + $ ./fdmdv_get_test_bits - 20000 20 | ./fdmdv_mod - - 20 | ./fdmdv_demod - - 20 | ./fdmdv_put_test_bits - 20 + ``` + +1. Test with timing slips due to sample clock offset of 1000ppm: + ``` + $ ./fdmdv_get_test_bits - 30000 | ./fdmdv_mod - - | sox -t raw -r 8000 -s -2 - -t raw -r 7990 - | ./fdmdv_demod - - 14 demod_dump.txt | ./fdmdv_put_test_bits - + octave:98> fdmdv_demod_c("../build_linux/src/demod_dump.txt",28000) + 27552 bits 0 errors BER: 0.0000 + ``` + +## References + +1. [FreeDV 1600 Specification](https://freedv.org/freedv-specification) +3. [Testing a FDMDV Modem](http://www.rowetel.com/blog/?p=2433) +4. [FDMDV Modem Page](http://www.rowetel.com/blog/?p=2458) + +## C Code + +| File | Description | +| --- | --- | +| src/fdmdv_mod.c | C version of modulator that takes a file of bits and converts it to a raw file of modulated samples | +| src/fdmdv_demod.c | C version of demodulator that takes a raw file of modulated samples and outputs a file of bits. Optionally dumps demod states to a text file which can be plotted using the Octave script fdmdv_demod_c.m | +| src/codec2_fdmdv.h | Header file that exposes FDMDV C API functions. Include this file in your application program | +| src/fdmdv.c | C functions that implement the FDMDV modem | +| src/fdmdv-internal.h | internal states and constants for FDMDV modem, shouldn't be exposed to application program | +| unittest/tfdmdv.c | Used to conjunction with unittest/tfdmdv.m to automatically test C FDMDV functions against Octave versions | + +## Octave Scripts + +Note these require some Octave packages to be installed, see [README](README.md) + +| File | Description | +| --- | --- | +| fdmdv.m | Functions and variables that implement the Octave version of the FDMDV modem | +| fdmdv_ut.m | Unit test for fdmdv Octave code, useful while developing algorithm. Includes tx/rx plus basic channel simulation | +| fdmdv_mod.m | Octave version of modulator that outputs a raw file. The modulator is driven by a test frame of bits. This can then be played over a real channel or through a channel simulator like PathSim. The sample rate can be changed using "sox" to simulate differences in tx/rx sample clocks | +| fdmdv_demod.m | Demodulator program that takes a raw file as input, and works out the bit error rate using the known test frame. Can be used to test the demod performs with off-air signals, or signals that have been passed through a channel simulator | +| fdmdv_demod_c.m | Takes an output text file from the C demod fdmdv_demod.c and produces plots and measures BER. Useful for evaluating fdmdv_demod.c performance. The plots produced are identical to the Octave version fdmdv_demod.m, allowing direct comparison of the C and Octave versions | +| tfdmdv.m | Automatic tests that compare the Octave and C versions of the FDMDV modem functions. First run unittest/tfdmdv, this will generate a text file with test vectors from the C version. Then run the Octave script tfdmdv and it will generate Octave versions of the test vectors and compare each vector with the C equivalent. It plots the vectors and errors (green). It also produces an automatic checklist based on test results. If the Octave or C modem code is changed, this script should be used to ensure the C and Octave versions remain identical | + +1. Typical fdmdv_ut run: + ``` + octave:6> fdmdv_ut + Eb/No (meas): 7.30 (8.29) dB + bits........: 2464 + errors......: 20 + BER.........: 0.0081 + PAPR........: 13.54 dB + SNR.........: 4.0 dB + ``` + It also outputs lots of nice plots that show the operation of the modem. + + For a 1400 bit/s DQPSK modem we expect about 1% BER for Eb/No = 7.3dB, which corresponds to SNR = 4dB (3kHz noise BW). The extra dB of measured power is due to the DBPSK pilot. Currently the noise generation code doesn't take the pilot power into account, so in this example the real SNR is actually 5dB. + +1. To generate 10 seconds of modulated signal: + ``` + octave:8> fdmdv_mod("test.raw",1400*10); + ``` + To demodulate 2 seconds of the test.raw file generated above: + ``` + octave:9> fdmdv_demod("test.raw",1400*2); + 2464 bits 0 errors BER: 0.0000 + ``` + It also produces several plots showing the internal states of the demod. Useful for debugging and observing what happens with various channels. + +## Modelling sample clock errors using sox + + +This introduces a simulated 1000ppm error: + ``` + sox -r 8000 -s -2 mod_dqpsk.raw -s -2 mod_dqpsk_8008hz.raw rate -h 8008 + ``` diff --git a/libcodec2-android/src/codec2/README_freedv.md b/libcodec2-android/src/codec2/README_freedv.md new file mode 100644 index 0000000..1dc2450 --- /dev/null +++ b/libcodec2-android/src/codec2/README_freedv.md @@ -0,0 +1,180 @@ +# FreeDV Technology + +FreeDV is an open source digital voice protocol that integrates modems, codecs, and FEC. + +On transmit, FreeDV converts speech to a modem signal you can send over a radio channel. On receive, FreeDV takes off air modem signals and converts them to speech samples. + +FreeDV is available as a GUI application, an open source library (FreeDV API), and in hardware (the SM1000 FreeDV adaptor). FreeDV is part of the Codec 2 project. + +This document gives an overview of the technology inside FreeDV, and some additional notes on building/using the FreeDV 2020 and 2400A/2400B modes. + +![FreeDV mode knob](http://www.rowetel.com/images/codec2/mode_dv.jpg) + +## Reading Further + +1. [FreeDV web site](http://freedv.org) +1. [FreeDV GUI User Manual](https://github.com/drowe67/freedv-gui/blob/master/USER_MANUAL.md) +1. [Codec 2](http://rowetel.com/codec2.html) +1. FreeDV can also be used for data [README_data](https://github.com/drowe67/codec2/blob/master/README_data.md) +1. [FreeDV 1600 specification](https://freedv.org/freedv-specification) +1. [FreeDV 700C blog post](http://www.rowetel.com/wordpress/?p=5456) +1. [FreeDV 700D Released blog post](http://www.rowetel.com/wordpress/?p=6103) +1. [FreeDV 2020 blog post](http://www.rowetel.com/wordpress/?p=6747) +1. [FreeDV 2400A blog post](http://www.rowetel.com/?p=5119) +1. [FreeDV 2400A & 2400B](http://www.rowetel.com/?p=5219) +1. Technical information on various modem waveforms in the [modem codec frame design spreadsheet](https://github.com/drowe67/codec2/blob/master/doc/modem_codec_frame_design.ods) +1. [Modems for HF Digital Voice Part 1](http://www.rowetel.com/wordpress/?p=5420) +1. [Modems for HF Digital Voice Part 2](http://www.rowetel.com/wordpress/?p=5448) +1. [FDMDV modem README](README_fdmdv.md) +1. [OFDM modem README](README_ofdm.md) +1. Many blog posts in the [rowetel.com blog archives](http://www.rowetel.com/?page_id=6172) + +## FreeDV HF Modes + +These are designed for use with a HF SSB radio. + +| Mode | Date | Codec | Modem | RF BW | Raw bits/s | FEC | Text | SNR min | Multipath | +| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | +| 1600 | 2012 | Codec2 1300 | DQPSK + pilot | 1125 | 1600 | Golay (23,12) | Y | 4 | poor | +| 700C | 2017 | Codec2 700C | coherent QPSK + diversity | 1500 | 1400 | - | - | 2 | good | +| 700D | 2018 | Codec2 700C | coherent OFDM/QPSK | 1000 | 1900 | LDPC (224,112) | Y | -2 | fair | +| 2020 | 2019 | LPCNet 1733 | coherent OFDM/QPSK | 1600 | 3000 | LDPC (504,396) | Y | 2 | poor | + +Notes: + +1. *Raw bits/s* is the number of payload bits/s carried over the channel by the modem. This consists of codec frames, FEC parity bits, unprotected text, and synchronisation information such as pilot and unique word bits. The estimates are open to interpretation for the OFDM waveforms due to pilot symbol and cyclic prefix considerations (see spreadsheet). + +1. *RF BW* is the bandwidth of the RF signal over the air. FreeDV is more bandwidth efficient than SSB. + +1. *Multipath* is the relative resilience of the mode to multipath fading, the biggest problem digital voice faces on HF radio channels. Analog SSB would be rated as "good". + +1. *Text* is a side channel for low bit rate text such as your location and call sign. It is generally unprotected by FEC, and encoded with varicode. + +1. *SNR Min* is for an AWGN channel (no multipath/fading). + +1. All of the modems use multiple parallel carriers running at a low symbol rate of around 50 Hz. This helps combat the effects of multipath channels. + +1. Some of the Codec 2 modes (2400/1300/700C etc) happen to match the name of a FreeDV mode. For example FreeDV 700C uses Codec 2 700C for voice compression. However FreeDV 700D *also* uses Codec 2 700C for voice compression, but has a very different modem waveform to FreeDV 700C. Sorry for the confusing nomenclature. + +1. Coherent demodulation gives much better performance than differential, at the cost of some additional complexity. Pilot symbols are transmitted regularly to allow the demod to estimate the reference phase of each carrier. + +1. The 1600 and 700C waveforms use parallel tone modems, later modes use OFDM. OFDM gives tighter carrier packing which allows higher bit rates, but tends to suffer more from frequency offsets and delay spread. + +1. At medium to high SNRs, FreeDV 700C performs well (better than 700D) on fast fading multipath channels with large delay spread due its parallel tone design and high pilot symbol rate. It employs transmit diversity which delivers BER performance similar to modes using FEC. FreeDV 700C also has a short frame (40ms), so syncs fast with low latency. Fast sync is useful on marginal channels that move between unusable and barely usable. + +1. FreeDV 700D uses an OFDM modem and was optimised for low SNR channels, with strong FEC but a low pilot symbol rate and modest (2ms) cyclic prefix which means its performance degrades on multipath channels with fast (> 1Hz) fading. The use of strong FEC makes this mode quite robust to other channel impairments, such as static crashes, urban HF noise, and in-band interference. + +1. FEC was added fairly recently to FreeDV modes. The voice codecs we use work OK at bit error rates of a few %, and packet error rates of 10%. Raw bit error rates on multipath channels often exceed 10%. For reasonable latency (say 40ms) we need small codewords. Thus to be useful we require a FEC code that works at over 10% raw BER, has 1% output (coded) bit error rate, and a codeword of around 100 bits. Digital voice has unusual requirements, most FEC codes are designed for data which is intolerant of any bit errors, and few operate over 10% raw BER. Powerful FEC codes have long block lengths (1000's of bits) which leads to long latency. However LDPC codes come close, and can also "clean up" other channel errors caused by static and interference. The use of OFDM means we now have "room" for the extra bits required for FEC, so there is little cost in adding it, apart from latency. + +## FreeDV VHF Modes + +These modes use constant amplitude modulation like FSK or FM, and are designed for VHF and above. However 800XA can be run over HF or VHF on a SSB radio. + +| Mode | Date | Codec2 | Modem | RF BW | Raw bits/s | FEC | Text | +| --- | --- | --- | --- | --- | --- | --- | --- | +| 2400A | 2016 | 1300 | 4FSK | 2400 | 5kHz | Golay (23,12) | Y | +| 2400B | 2016 | 1300 | baseband/analog FM | analog FM | 2400 | Golay (23,12) | Y | +| 800XA | 2017 | 700C | 4FSK | 2000 | 800 | - | N | +| FSK_LDPC | 2020 | - | 2 or 4 FSK | user defined | user defined | LDPC | - | - | + +The FSK_LDPC mode is used for data, and has user defined bit rate and a variety of LDPC codes available. It is discussed in [README_data](README_data.md) + +## FreeDV API + +See [freedv_api.h](src/freedv_api.h) and [freedv_api.c](src/freedv_api.c), and the command line demo programs [freedv_tx.c](src/freedv_tx.c) & [freedv_rx.c](src/freedv_rx.c). Quickstart demo using FreeDV 1600: +``` +$ ./freedv_tx 1600 ../../raw/hts1.raw - | ./freedv_rx 1600 - - | play -t raw -r 8000 -s -2 -q - +$ cat freedv_rx_log.txt +``` +## FreeDV 2400A and 2400B modes + +FreeDV 2400A and FreeDV 2400B are modes designed for VHF radio. FreeDV 2400A is designed for SDR radios (it has a 5 kHz RF bandwidth), however FreeDV 2400B is designed to pass through commodity FM radios. + +Demos of FreeDV 2400A and 2400B: +``` +$ ./freedv_tx 2400A ../../raw/ve9qrp_10s.raw - | ./freedv_rx 2400A - - | play -t raw -r 8000 -s -2 - +$ ./freedv_tx 2400B ../../raw/ve9qrp_10s.raw - | ./freedv_rx 2400B - - | play -t raw -r 8000 -s -2 - +``` +Note for FreeDV 2400A/2400B the modem signal sample rate is 48kHz. To +listen to the modem tones from FreeDV 2400B, or play them into a FM HT +mic input: +``` +$ ./freedv_tx 2400B ../../raw/ve9qrp_10s.raw - | play -t raw -r 48000 -s -2 - +``` +Simulate FreeDV 2400B passing through a 300 to 3000 Hz audio path using sox to filter: +``` +$ ./freedv_tx 2400B ../../raw/ve9qrp_10s.raw - | sox -t raw -r 48000 -s -2 - -t raw - sinc 300-3000 | ./freedv_rx 2400B - - | play -t raw -r 8000 -s -2 - +``` + +## FreeDV 2020 support (building with LPCNet) + +1. Build codec2 initially without LPCNet + ``` + $ cd ~ + $ git clone https://github.com/drowe67/codec2.git + $ cd codec2 && mkdir build_linux && cd build_linux + $ cmake ../ + $ make + ``` + +1. Build LPCNet: + ``` + $ cd ~ + $ git clone https://github.com/drowe67/LPCNet + $ cd LPCNet && mkdir build_linux && cd build_linux + $ cmake -DCODEC2_BUILD_DIR=~/codec2/build_linux ../ + $ make + ``` + +1. (Re)build Codec 2 with LPCNet support: + ``` + $ cd ~/codec2/build_linux && rm -Rf * + $ cmake -DLPCNET_BUILD_DIR=~/LPCNet/build_linux .. + $ make + ``` + +## FreeDV 2020 tests with FreeDV API + +``` +$ cat ~/LPCNet/wav/wia.wav | ~/LPCNet/build_linux/src/lpcnet_enc -s | ./ofdm_mod --mode 2020 --ldpc --verbose 1 -p 312 | ./ofdm_demod --mode 2020 --verbose 1 --ldpc -p 312 | ~/LPCNet/build_linux/src/lpcnet_dec -s | aplay -f S16_LE -r 16000 +``` +Listen the reference tx: +``` +$ cat ~/LPCNet/wav/wia.wav | ~/LPCNet/build_linux/src/lpcnet_enc -s | ./ofdm_mod --mode 2020 --ldpc --verbose 1 -p 312 | aplay -f S16_LE +``` + +Listen the freedv_tx: +``` +$ ./freedv_tx 2020 ~/LPCNet/wav/wia.wav - | aplay -f S16_LE +``` + +FreeDV API tx, with reference rx from above: +``` +$ ./freedv_tx 2020 ~/LPCNet/wav/wia.wav - | ./ofdm_demod --mode 2020 --verbose 1 --ldpc -p 312 | ~/LPCNet/build_linux/src/lpcnet_dec -s | aplay -f S16_LE -r 16000 +``` + +FreeDV API tx and rx: +``` +$ ./freedv_tx 2020 ~/LPCNet/wav/all.wav - | ./freedv_rx 2020 - - | aplay -f S16_LE -r 16000 +$ ./freedv_tx 2020 ~/LPCNet/wav/all.wav - --testframes | ./freedv_rx 2020 - /dev/null --testframes -vv +``` + +Simulated HF slow fading channel, 10.8dB SNR: +``` +$ ./freedv_tx 2020 ~/LPCNet/wav/all.wav - | ./cohpsk_ch - - -30 --Fs 8000 --slow | ./freedv_rx 2020 - - | aplay -f S16_LE -r 16000 +``` +It falls down quite a bit with fast fading (--fast): + +AWGN (noise but no fading) channel, 2.8dB SNR: +``` +$ ./freedv_tx 2020 ~/LPCNet/wav/all.wav - | ./cohpsk_ch - - -22 --Fs 8000 | ./freedv_rx 2020 - - | aplay -f S16_LE -r 16000 +``` + +## Further work + +1. ~~Spell check/proofread~~ +1. Screen shots of each modes (waterfall and spectrum), discussing aspects of waveforms +1. ~~Link to this doc from freedv-gui user manual, rowetel/codec2 page, freedv.org~~ +1. ~~README_fdmdv.txt -> .md~~ +1. nice image or two +1. table of source files diff --git a/libcodec2-android/src/codec2/README_fsk.md b/libcodec2-android/src/codec2/README_fsk.md new file mode 100644 index 0000000..7bf08c1 --- /dev/null +++ b/libcodec2-android/src/codec2/README_fsk.md @@ -0,0 +1,179 @@ +# README_fsk + +A FSK modem with a non-coherent demodulator. Performance is within a fraction of a dB of ideal. The demodulator automagically estimates the tone frequencies and tracks frequency drift. + +Here is a typical Bit Error Rate (BER) versus Eb/No curve: + +![BER versus Eb/No curve](doc/fsk_modem_ber_8000_100.png) + +Note how close the theory line is to measured performance. + +This modem can demodulate FSK signals that sound like [this sample](doc/lockdown_3s.wav); and is used to receive images from the [edge of space](https://github.com/projecthorus/wenet): + +![HAB image from edge of space](doc/wenet_image.jpg) + +## Credits + +The Octave version of the modem was developed by David Rowe. Brady O'Brien ported the modem to C, and wrote the C/Octave tests. The modem is being maintained by David Rowe. Mark Jessop has helped improve the modem operation by testing against various balloon telemtry waveforms. Bill Cowley has developed the Log Likelihood Ratio (LLR) algorithms for 4FSK. + +## Quickstart + +1. Build codec2: + ``` + $ cd codec2 && mkdir build_linux && cmake .. && make + ``` + +1. Generate 1000 test bits, modulate them using 2FSK using a 8000 Hz sample rate, 100 bits/s, play on your sound card: + ``` + $ cd ~/codec2/build_linux/src + $ ./fsk_get_test_bits - 1000 | ./fsk_mod 2 8000 100 1200 1200 - - | aplay -f S16_LE + ``` + The low tone frequency is 1200Hz, and the upper tone 1200 + 1200 = 2400Hz. + +1. Add the demodulator and measure the bit error rate over 10,000 bits of 100 bit/s 2FSK: + ``` + $ ./fsk_get_test_bits - 10000 | ./fsk_mod 2 8000 100 1200 100 - - | ./fsk_demod 2 8000 100 - - | ./fsk_put_test_bits - + + [0099] BER 0.000, bits tested 9900, bit errors 0 + PASS + ``` + We get a Bit Error Rate (BER) of 0, as there is no channel noise to induce bit errors. + +1. Same thing but this time with 4FSK, and less verbose output: + ``` + $ ./fsk_get_test_bits - 10000 | ./fsk_mod 4 8000 100 1200 100 - - | ./fsk_demod 4 8000 100 - - | ./fsk_put_test_bits -q - + + [0099] BER 0.000, bits tested 9900, bit errors 0 + PASS + ``` + +1. Lets add some channel noise: + ``` + $ ./fsk_get_test_bits - 10000 | ./fsk_mod 2 8000 100 1200 100 - - | ./cohpsk_ch - - -26 --Fs 8000 | ./fsk_demod 2 8000 100 - - | ./fsk_put_test_bits -b 0.015 - + + SNR3k(dB): -5.76 C/No: 29.0 PAPR: 3.0 + [0099] BER 0.010, bits tested 9900, bit errors 103 + PASS + ``` + The cohpsk_ch utility takes the FSK modulator signal, and adds calibrated noise to it (the -26 value specifies the noise). Try changing the noise level, and note how the Bit Error Rate (BER) changes. The BER is 0.01, which is right on theory for this sort of FSK demodulator at this SNR (2FSK non-coherent demodulator Eb/No=9dB). + + The SNR is calculated using the signal power divided by the noise power in 3000 Hz. The C/No value is the same thing, but uses a noise bandwidth of 1 Hz. There is less noise power when you look at just 1Hz, so C/No is higher. Peak to Average Power ratio (PAPR) is 3dB as a FSK signal is just a single sine wave, and a sine wave peak is 3dB higher than it's average. + +1. You can visualise the C modem operation with a companion python script, for example: + ``` + $ ./fsk_get_test_bits - 10000 | ./fsk_mod -p 10 4 8000 400 400 400 - - | ./fsk_demod -p 10 -t1 4 8000 400 - /dev/null 2>stats.txt + $ python ../../octave/plot_fsk_demod_stats.py stats.txt + ``` + +1. Send some digital voice using FSK at 800 bits/s, and try the two 2400 bits/s FSK modes: + ``` + $ ./freedv_tx 800XA ../../raw/ve9qrp.raw - | ./freedv_rx 800XA - - -vv | aplay -f S16_LE + $ ./freedv_tx 2400A ../../raw/ve9qrp.raw - | ./freedv_rx 2400A - - -vv | aplay -f S16_LE + $ ./freedv_tx 2400B ../../raw/ve9qrp.raw - | ./freedv_rx 2400B - - -vv | aplay -f S16_LE + ``` + +1. LDPC encoded 4FSK, with framing: + ``` + $ cd ~/codec2/build_linux/src + $ ./ldpc_enc /dev/zero - --code H_256_512_4 --testframes 200 | + ./framer - - 512 5186 | ./fsk_mod 4 8000 100 1000 100 - - | + ./cohpsk_ch - - -24 --Fs 8000 | + ./fsk_demod -s 4 8000 100 - - | + ./deframer - - 512 5186 | + ./ldpc_dec - /dev/null --code H_256_512_4 --testframes + + SNR3k(dB): -7.74 C/No: 27.0 PAPR: 3.0 + Raw Tbits: 100352 Terr: 6701 BER: 0.067 + Coded Tbits: 50176 Terr: 139 BER: 0.003 + Tpkts: 196 Tper: 4 PER: 0.020 + ``` + In this example the unique word is the 16 bit sequence `5186`. See also several ctests using these application. Other codes are also available: + ``` + $ ./ldpc_enc --listcodes + + H2064_516_sparse rate 0.80 (2580,2064) + HRA_112_112 rate 0.50 (224,112) + HRAb_396_504 rate 0.79 (504,396) + H_256_768 rate 0.33 (768,256) + H_256_512_4 rate 0.50 (512,256) + HRAa_1536_512 rate 0.75 (2048,1536) + H_128_256_5 rate 0.50 (256,128) + ``` + If you change the code you also need to change the `frameSizeBits` argument in `framer/deframer` (`512` in the example above). + +1. The FSK/LDPC/framer steps above have been combined in a FreeDV API mode. See "FSK LDPC Raw Data Mode" in [README_data.md](README_data.md). + +1. FSK modem C files in ```codec2/src```: + + | File | Description | + | --- | --- | + | fsk.c/fsk.h | core FSK modem library | + | fsk_mod.c | command line modulator | + | fsk_demod.c | command line demodulator | + | fsk_get_test_bits.c | source of test bits | + | fsk_put_test_bits.c | test bit sync, counts bit errors and packet errors | + | fsk_mod_ext_vco.c | modulator that uses an external FSK oscillator | + | framer.c | adds a unique word to a frame of bits to implement frame sync for LDPC codewords | + | deframer.c | locates and strips a unique word to implement frame sync for LDPC codewords | + | tollr.c | converts bits to LLRs for testing LDPC framing | + +1. GNU Octave files in ```codec2/octave```: + + | File | Description | + | --- | --- | + | fsk_lib.m | Core FSK modem library | + | fsk_lib_demo.m | A demonstration of fsk_lib, runs a single point BER test | + | fsk_demod_file.m | Demodulates FSK signals from a file, useful for debugging FSK waveforms | + | fsk_lock_down.m | simulations to support the "lock down" low SNR waveform | + | tfsk.m | automated test that compares the C and Octave versions of the modem | + | fsk_cml.m | Symbol rate experiments with FSK modem LLR estimation and LDPC | + | fsk_cml_sam.m | Sample rate experiments with FSK modem LLR estimation and LDPC | + | fsk_llr_plot.m | Plots curves from fsk_cml.m & fsk_cml_sam.m | + | fsk_lib_ldpc_demo.m | CML library LLR routines and LDPC codes with fsk_lib.m | + + You can run many of them from the Octave command line: + ``` + $ octave --no-gui + octave:1> fsk_lib_demo + ``` + +1. A suite of automated ctests that exercise the C and Octave code: + ``` + $ cd ~/codec2/build_linux + $ ctest -R test_fsk + 1/9 Test #39: test_fsk_lib ...................... Passed 3.37 sec + 3/9 Test #41: test_fsk_modem_octave_port ........ Passed 4.17 sec + 4/9 Test #42: test_fsk_modem_mod_demod .......... Passed 0.06 sec + 5/9 Test #43: test_fsk_2fsk_ber ................. Passed 0.24 sec + 6/9 Test #44: test_fsk_4fsk_ber ................. Passed 0.12 sec + 7/9 Test #45: test_fsk_4fsk_ber_negative_freq ... Passed 0.07 sec + 8/9 Test #46: test_fsk_4fsk_lockdown ............ Passed 2.84 sec + 9/9 Test #47: test_fsk_vhf_framer ............... Passed 0.06 sec + ``` + These are written in ```codec2/CmakeLists.txt```, inspect them to find out how we test the modem. + +1. ```fsk_demod_file.m``` is useful for peering inside the modem, for example when debugging. + ``` + $ cd ~/codec2/build_linux/src + $ ./fsk_get_test_bits - 1000 | ./fsk_mod 2 8000 100 1000 1000 - ../../octave/fsk.s16 + $ octave --no-gui + octave:1> fsk_demod_file("fsk.s16",format="s16",8000,100,2) + ``` + +## Further Reading + + Here are some links to projects and blog posts that use this modem: + + 1. [Horus Binary](https://github.com/projecthorus/horusbinary) High Altitude Balloon (HAB) telemetry protocol, 3 second updates, works at 7dB lower SNR that RTTY. + 1. [Testing HAB Telemetry, Horus binary waveform](http://www.rowetel.com/?p=5906) + 1. A really useful reference on a variety of modulation techniques from [Atlanta DSP](http://www.atlantarf.com/FSK_Modulation.php). I keep this handy when experimenting with modems. + 1. The [RTTY modem project](http://www.rowetel.com/?p=4629) that kicked off the FSK modem work. + 1. [Wenet](https://github.com/projecthorus/wenet) - high speed SSTV images from balloons at the edge of space + 1. [Wenet High speed SSTV images](http://www.rowetel.com/?p=5344) + 1. [FreeDV 2400A and 2400B](http://www.rowetel.com/?p=5219), digital speech for VHF/UHF radios. + 1. [HF FSK with Rpitx](http://www.rowetel.com/?p=6317), a zero hardware FSK transmitter using a Pi + 1. [Eb/No and SNR worked Example](http://www.rowetel.com/wordpress/?p=4621) + 1. [FSK LLR LDPC Code Experiments](https://github.com/drowe67/codec2/pull/129) + 1. [FreeDV API FSK LDPC Raw Data Mode](README_data.md) + + diff --git a/libcodec2-android/src/codec2/README_ofdm.md b/libcodec2-android/src/codec2/README_ofdm.md new file mode 100644 index 0000000..43c2b0a --- /dev/null +++ b/libcodec2-android/src/codec2/README_ofdm.md @@ -0,0 +1,246 @@ +# README_ofdm + +An Orthogonal Frequency Division Multiplexed (OFDM) modem designed for digital voice over HF SSB. Typical configuration for FreeDV 700D is 700 bit/s voice, a rate 0.5 LDPC code, and 1400 bit/s raw data rate over the channel. + +The OFDM modem was first implemented in GNU Octave, then ported to C. Algorithm development is generally easier in Octave, but for real time work we need the C version. Automated units tests ensure the operation of the Octave and C versions are identical. + +## Credits + +Steve, David, Don, Richard + +## References + +1. Spreadsheet describing the [waveform design](doc/modem_codec_frame_design.ods) The OFDM tab descrives the baseline 700D OFDM waveform. + +1. This modem can be used for sending [raw data frames](README_data.md) over HF channels. + +1. [Towards FreeDV 700D](https://www.rowetel.com/?p=5573) + +1. [FreeDV 700D - First Over The Air Tests](https://www.rowetel.com/?p=5630) + +1. [Steve Ports an OFDM modem from Octave to C](https://www.rowetel.com/?p=5824) + +1. [Modems for HF Digital Voice Part 1](http://www.rowetel.com/wordpress/?p=5420) + +1. [Modems for HF Digital Voice Part 2](http://www.rowetel.com/wordpress/?p=5448) + +# Examples + +Built as part of codec2-dev, see [README](README.md) for build instructions. + +1. Generate 10 seconds of test frame bits, modulate, and play audio + out of sound device (SoX v14.4.2): + ``` + $ build_linux/src$ ./ofdm_mod --in /dev/zero --testframes 10 | play --type s16 --rate 8000 --channels 2 - + ``` + +1. Generate 10 seconds of uncoded test frame bits, modulate, demodulate, count errors: + ``` + $ build_linux/src$ ./ofdm_mod --in /dev/zero --testframes 10 | ./ofdm_demod --out /dev/null --testframes --verbose 1 --log demod_dump.txt + ``` + Use Octave to look at plots of C modem operation: + ``` + $ cd ../../octave + $ octave --no-gui + octave:1> ofdm_demod_c("../build_linux/src/demod_dump.txt") + ``` + +1. Run Octave versions of mod and demod (called tx and rx to avoid namespace clashes in Octave): + ``` + $ cd ~/octave + $ octave --no-gui + octave:1> ofdm_tx("ofdm_test.raw","700D",10) + octave:1> ofdm_rx("ofdm_test.raw") + ``` + The Octave modulator ofdm_tx can simulate channel impairments, for + example AWGN noise at 4dB SNR: + ``` + octave:1> ofdm_tx("ofdm_test.raw", "700D", 10, 4) + ``` + The Octave versions use the same test frames as C so can interoperate. + ``` + build_linux/src$ ./ofdm_demod --in ../../octave/ofdm_test.raw --out /dev/null --testframes --verbose 1 + ``` + +1. Run mod/demod with LDPC FEC; 60 seconds, 3dB SNR: + ``` + octave:6> ofdm_ldpc_tx('ofdm_test.raw',"700D",60,3) + octave:7> ofdm_ldpc_rx('ofdm_test.raw',"700D") + ``` + C demodulator/LDPC decoder: + ``` + build_linux/src$ ./ofdm_demod --in ../../octave/ofdm_test.raw --out /dev/null --verbose 1 --testframes --ldpc + ``` + +1. Pass Codec 2 700C compressed speech through OFDM modem: + ``` + build_linux/src$ ./c2enc 700C ../../raw/ve9qrp_10s.raw - --bitperchar | ./ofdm_mod --ldpc | ./ofdm_demod --ldpc | ./c2dec 700C - - --bitperchar | play --type s16 --rate 8000 --channels 1 - + ``` + +1. Listen to signal through simulated fading channel in C: + ``` + build_linux/src$ ./c2enc 700C ../../raw/ve9qrp_10s.raw - --bitperchar | ./ofdm_mod --ldpc | ./cohpsk_ch - - -20 --Fs 8000 --slow -f -5 | aplay -f S16 + ``` + +1. Run test frames through simulated channel in C: + ``` + build_linux/src$ ./ofdm_mod --in /dev/zero --ldpc --testframes 20 | ./cohpsk_ch - - -24 --Fs 8000 -f -10 --fast | ./ofdm_demod --out /dev/null --testframes --verbose 1 --ldpc + ``` + +1. Run codec voice through simulated fast fading channel, just where it starts to fall over: + ``` + build_linux/src$ ./c2enc 700C ../../raw/ve9qrp.raw - --bitperchar | ./ofdm_mod --ldpc | ./cohpsk_ch - - -24 --Fs 8000 -f -10 --fast | ./ofdm_demod --ldpc --verbose 1 | ./c2dec 700C - - --bitperchar | aplay -f S16 + ``` + +1. FreeDV 1600 on the same channel conditions, roughly same quality at 8dB higher SNR: + ``` + build_linux/src$ ./freedv_tx 1600 ../../raw/ve9qrp_10s.raw - | ./cohpsk_ch - - -30 --Fs 8000 -f -10 --fast | ./freedv_rx 1600 - - | aplay -f S16 + ``` + +1. Using FreeDV API test programs: + ``` + build_linux/src$ ./freedv_tx 700D ../../raw/hts1a.raw - --testframes | ./freedv_rx 700D - /dev/null --testframes + build_linux/src$ ./freedv_tx 700D ../../raw/hts1a.raw - | ./freedv_rx 700D - - | aplay -f S16 + build_linux/src$ ./freedv_tx 700D ../../raw/ve9qrp.raw - | ./cohpsk_ch - - -26 --Fs 8000 -f -10 --fast | ./freedv_rx 700D - - | aplay -f S16 + ``` + +## FreeDV 2020 extensions + +1. 37 Carrier waveform with a (504,396) code: + ``` + build_linux/src$ nc=37; ./ofdm_mod --in /dev/zero --testframes 300 --mode 2020 --nc $nc --ldpc --verbose 1 | ./cohpsk_ch - - -22.5 --Fs 8000 -f 10 --ssbfilt 1 | ./ofdm_demod --out /dev/null --testframes --mode 2020 --nc $nc --verbose 1 --ldpc + + SNR3k(dB): 4.05 C/No: 38.8 PAPR: 10.8 + BER......: 0.0348 Tbits: 1044792 Terrs: 36345 + Coded BER: 0.0094 Tbits: 820908 Terrs: 7717 + ``` + +1. 20.5ms symbol period, 31 carrier waveform, (504,396) code, but only 312 data bits used, so we don't send unused data bits. This means we need less carriers (so more power per carrier), and code rate is increased slightly (sorta). Anyhoo, it works about 1.5dB better: + ``` + build_linux/src$ ./ofdm_mod --in /dev/zero --testframes 300 --mode 2020 --ldpc 1 --verbose 1 -p 312 | ./cohpsk_ch - - -22 --Fs 8000 -f 10 --ssbfilt 1 | ./ofdm_demod --out /dev/null --testframes --mode 2020 --verbose 1 --ldpc -p 312 + + SNR3k(dB): 2.21 C/No: 37.0 PAPR: 9.6 + BER......: 0.0505 Tbits: 874020 Terrs: 44148 + Coded BER: 0.0096 Tbits: 649272 Terrs: 6230 + ``` + +## Acquisition tests + +1. Acquisition (getting sync) can be problematic in fading channels. Some special tests have been developed, that measure acquisition time on off air 700D samples at different time offsets: + ``` + octave:61> ofdm_ldpc_rx("../wav/vk2tpm_004.wav", "700D", "", 5, 4) + build_linux/src$ ./ofdm_demod --in ../../wav/vk2tpm_004.wav --out /dev/null --verbose 2 --ldpc --start_secs 5 --len_secs 4 + ``` + +1. Different time offsets effectively tests the ability to sync on fading channel in different states. Stats for a series of these tests can be obtained with: + ``` + octave:61> ofdm_time_sync("../wav/vk2tpm_004.wav", 30) + + pass: 30 fails: 0 mean: 1.35 var 0.51 + ``` + +## Octave Acceptance Tests + +Here are some useful tests for the Octave, uncoded modem. + +The rate 1/2 LDPC code can correct up to about 10% raw BER, so a good test is to run the modem at Eb/No operating points that produce just less that BER=0.1. The BER2 measure truncates the effect of any start up transients, e.g. as the frequency offset is tracked out. + +1. HF Multipath: + ``` + octave:580> ofdm_tx("ofdm_test.raw","700D",60,2,'mpm',20) + octave:581> ofdm_rx("ofdm_test.raw") + BER2.: 0.0803 Tbits: 84728 Terrs: 6803 + ``` + +1. AWGN: + ``` + octave:582> ofdm_tx("ofdm_test.raw","700D",60,-2,'awgn') + octave:583> ofdm_rx("ofdm_test.raw") + BER2.: 0.0885 Tbits: 84252 Terrs: 7459 + ``` + +## C Acceptance Tests + +Here are some useful tests for the LDPC coded C version of the modem, useful to verify any changes. + +1. AWGN channel, -2dB: + ``` + ./ofdm_mod --in /dev/zero --ldpc --testframes 60 --txbpf | ./cohpsk_ch - - -20 --Fs 8000 -f -10 | ./ofdm_demod --out /dev/null --testframes --verbose 1 --ldpc + + SNR3k(dB): -1.85 C/No: 32.9 PAPR: 9.8 + BER......: 0.0815 Tbits: 98532 Terrs: 8031 + Coded BER: 0.0034 Tbits: 46368 Terrs: 157 + ``` + +1. Fading HF channel: + ``` + ./ofdm_mod --in /dev/zero --ldpc --testframes 60 --txbpf | ./cohpsk_ch - - -24 --Fs 8000 -f -10 --fast | ./ofdm_demod --out /dev/null --testframes --verbose 1 --ldpc + + SNR3k(dB): 2.15 C/No: 36.9 PAPR: 9.8 + BER......: 0.1015 Tbits: 88774 Terrs: 9012 + Coded BER: 0.0445 Tbits: 41776 Terrs: 1860 + ``` + + Note: 10% Raw BER operating point on both channels, as per design. + +# C Code + +| File | Description | +| :-- | :-- | +| ofdm.c | OFDM library | +| codec2_ofdm.h | API header file for OFDM library | +| ofdm_get_test_bits | Generate OFDM test frames | +| ofdm_mod | OFDM modulator command line program | +| ofdm_demod | OFDM demodulator command line program, supports uncoded (raw) and LDPC coded test frames, LDPC decoding of codec data, and can output LLRs to external LDPC decoder | +| ofdm_put_test_bits | Measure BER in OFDM test frames | +| unittest/tofdm | Run C port of modem to compare with octave version (see octave/tofdm) | +| cohpsk_ch | From COHPSK modem development, useful C channel simulator | + +# Octave Scripts + +| File | Description | +| :-- | :-- | +| ofdm_lib | OFDM library | +| ofdm_dev | Used for modem development, run various simulations | +| ofdm_tx | Modulate test frames to a file of sample, cam add channel impairments | +| ofdm_rx | Demod from a sample file and count errors | +| tofdm | Compares Octave and C ports of modem | +| ofdm_ldpc_tx | OFDM modulator with LDPC FEC | +| ofdm_ldpc_rx | OFDM demodulator with LDPC FEC | + +## Specifications + +Nominal FreeDV 700D configuration: + +| Parameter | Value | +| :-- | :-- | +| Modem | OFDM, pilot assisted coherent QPSK | +| Payload bits/s | 700 | +| Text bits/s | 25 (note 4) | +| Unique Word | 10 bits | +| Carriers | 17 | +| RF bandwidth | 944 Hz | +| Symbol period | 18ms +| Cyclic Prefix | 2ms (note 1) +| Pilot rate | 1 in every 8 symbols | +| Frame Period | 160ms | +| FEC | rate 1/2 (224,112) LDPC | +| Operating point | | +| AWGN | Eb/No -0.5dB SNR(3000Hz): -2.5dB (note 2) | +| HF Multipath | Eb/No 4.0dB SNR(3000Hz): 2.0dB (note 3) | +| Freq offset | +/- 60 Hz (sync range) | +| Freq drift | +/- 0.2 Hz/s (for 0.5 dB loss) | +| Sample clock error | 1000 ppm | + +Notes: + +1. Modem can cope with up to 2ms of multipath +1. + ``` + Ideal SNR(3000) = Eb/No + 10*log10(Rb/B) + = -1 + 10*log10(1400/3000) + = -4.3 dB + ``` + So we have about 1.8dB overhead for synchronisation, implementation loss, and the text channel. +1. "CCIR Poor" HF Multipath channel used for testing is two path, 1Hz Doppler, 1ms delay. +1. The text channel is an auxillary channel, unprotected by FEC, that typically carries callsign/location information for Ham stations. diff --git a/libcodec2-android/src/codec2/build_linux/CMakeCache.txt b/libcodec2-android/src/codec2/build_linux/CMakeCache.txt new file mode 100644 index 0000000..fac885f --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeCache.txt @@ -0,0 +1,571 @@ +# This is the CMakeCache file. +# For build in directory: /home/sh/Downloads/hackrf/codec2/build_linux +# It was generated by CMake: /usr/bin/cmake +# You can edit this file to change values found and used by cmake. +# If you do not want to change any of the values, simply exit the editor. +# If you do want to change a value, simply edit, save, and exit the editor. +# The syntax for the file is as follows: +# KEY:TYPE=VALUE +# KEY is the name of a variable in the cache. +# TYPE is a hint to GUIs for the type of VALUE, DO NOT EDIT TYPE!. +# VALUE is the current value for the KEY. + +######################## +# EXTERNAL cache entries +######################## + +//Build shared library. Set to OFF for static library. +BUILD_SHARED_LIBS:BOOL=ON + +//Build the testing tree. +BUILD_TESTING:BOOL=ON + +//Path to a program. +BZRCOMMAND:FILEPATH=BZRCOMMAND-NOTFOUND + +//Path to a program. +CMAKE_AR:FILEPATH=/usr/bin/ar + +//Choose the type of build, options are: None Debug Release RelWithDebInfo +// MinSizeRel ... +CMAKE_BUILD_TYPE:STRING= + +//Enable/Disable color output during build. +CMAKE_COLOR_MAKEFILE:BOOL=ON + +//C compiler +CMAKE_C_COMPILER:FILEPATH=/usr/bin/cc + +//A wrapper around 'ar' adding the appropriate '--plugin' option +// for the GCC compiler +CMAKE_C_COMPILER_AR:FILEPATH=/usr/bin/gcc-ar-8 + +//A wrapper around 'ranlib' adding the appropriate '--plugin' option +// for the GCC compiler +CMAKE_C_COMPILER_RANLIB:FILEPATH=/usr/bin/gcc-ranlib-8 + +//Flags used by the C compiler during all build types. +CMAKE_C_FLAGS:STRING= + +//Flags used by the C compiler during DEBUG builds. +CMAKE_C_FLAGS_DEBUG:STRING=-g + +//Flags used by the C compiler during MINSIZEREL builds. +CMAKE_C_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG + +//Flags used by the C compiler during RELEASE builds. +CMAKE_C_FLAGS_RELEASE:STRING=-O3 -DNDEBUG + +//Flags used by the C compiler during RELWITHDEBINFO builds. +CMAKE_C_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG + +//Flags used by the linker during all build types. +CMAKE_EXE_LINKER_FLAGS:STRING= + +//Flags used by the linker during DEBUG builds. +CMAKE_EXE_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during MINSIZEREL builds. +CMAKE_EXE_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during RELEASE builds. +CMAKE_EXE_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during RELWITHDEBINFO builds. +CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//Enable/Disable output of compile commands during generation. +CMAKE_EXPORT_COMPILE_COMMANDS:BOOL=OFF + +//User executables (bin) +CMAKE_INSTALL_BINDIR:PATH=bin + +//Read-only architecture-independent data (DATAROOTDIR) +CMAKE_INSTALL_DATADIR:PATH= + +//Read-only architecture-independent data root (share) +CMAKE_INSTALL_DATAROOTDIR:PATH=share + +//Documentation root (DATAROOTDIR/doc/PROJECT_NAME) +CMAKE_INSTALL_DOCDIR:PATH= + +//C header files (include) +CMAKE_INSTALL_INCLUDEDIR:PATH=include + +//Info documentation (DATAROOTDIR/info) +CMAKE_INSTALL_INFODIR:PATH= + +//Object code libraries (lib) +CMAKE_INSTALL_LIBDIR:PATH=lib + +//Program executables (libexec) +CMAKE_INSTALL_LIBEXECDIR:PATH=libexec + +//Locale-dependent data (DATAROOTDIR/locale) +CMAKE_INSTALL_LOCALEDIR:PATH= + +//Modifiable single-machine data (var) +CMAKE_INSTALL_LOCALSTATEDIR:PATH=var + +//Man documentation (DATAROOTDIR/man) +CMAKE_INSTALL_MANDIR:PATH= + +//C header files for non-gcc (/usr/include) +CMAKE_INSTALL_OLDINCLUDEDIR:PATH=/usr/include + +//Install path prefix, prepended onto install directories. +CMAKE_INSTALL_PREFIX:PATH=/opt/install/codec2 + +//Run-time variable data (LOCALSTATEDIR/run) +CMAKE_INSTALL_RUNSTATEDIR:PATH= + +//System admin executables (sbin) +CMAKE_INSTALL_SBINDIR:PATH=sbin + +//Modifiable architecture-independent data (com) +CMAKE_INSTALL_SHAREDSTATEDIR:PATH=com + +//Read-only single-machine data (etc) +CMAKE_INSTALL_SYSCONFDIR:PATH=etc + +//Path to a program. +CMAKE_LINKER:FILEPATH=/usr/bin/ld + +//Path to a program. +CMAKE_MAKE_PROGRAM:FILEPATH=/usr/bin/make + +//Flags used by the linker during the creation of modules during +// all build types. +CMAKE_MODULE_LINKER_FLAGS:STRING= + +//Flags used by the linker during the creation of modules during +// DEBUG builds. +CMAKE_MODULE_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during the creation of modules during +// MINSIZEREL builds. +CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during the creation of modules during +// RELEASE builds. +CMAKE_MODULE_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during the creation of modules during +// RELWITHDEBINFO builds. +CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//Path to a program. +CMAKE_NM:FILEPATH=/usr/bin/nm + +//Path to a program. +CMAKE_OBJCOPY:FILEPATH=/usr/bin/objcopy + +//Path to a program. +CMAKE_OBJDUMP:FILEPATH=/usr/bin/objdump + +//Minimum OS X deployment version +CMAKE_OSX_DEPLOYMENT_TARGET:STRING=10.9 + +//Value Computed by CMake +CMAKE_PROJECT_DESCRIPTION:STATIC= + +//Value Computed by CMake +CMAKE_PROJECT_HOMEPAGE_URL:STATIC= + +//Value Computed by CMake +CMAKE_PROJECT_NAME:STATIC=codec2 + +//Path to a program. +CMAKE_RANLIB:FILEPATH=/usr/bin/ranlib + +//Flags used by the linker during the creation of shared libraries +// during all build types. +CMAKE_SHARED_LINKER_FLAGS:STRING= + +//Flags used by the linker during the creation of shared libraries +// during DEBUG builds. +CMAKE_SHARED_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during the creation of shared libraries +// during MINSIZEREL builds. +CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during the creation of shared libraries +// during RELEASE builds. +CMAKE_SHARED_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during the creation of shared libraries +// during RELWITHDEBINFO builds. +CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//If set, runtime paths are not added when installing shared libraries, +// but are added when building. +CMAKE_SKIP_INSTALL_RPATH:BOOL=NO + +//If set, runtime paths are not added when using shared libraries. +CMAKE_SKIP_RPATH:BOOL=NO + +//Flags used by the linker during the creation of static libraries +// during all build types. +CMAKE_STATIC_LINKER_FLAGS:STRING= + +//Flags used by the linker during the creation of static libraries +// during DEBUG builds. +CMAKE_STATIC_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during the creation of static libraries +// during MINSIZEREL builds. +CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during the creation of static libraries +// during RELEASE builds. +CMAKE_STATIC_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during the creation of static libraries +// during RELWITHDEBINFO builds. +CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//Path to a program. +CMAKE_STRIP:FILEPATH=/usr/bin/strip + +//If this value is on, makefiles will be generated without the +// .SILENT directive, and all commands will be echoed to the console +// during the make. This is useful for debugging only. With Visual +// Studio IDE projects all commands are done without /nologo. +CMAKE_VERBOSE_MAKEFILE:BOOL=FALSE + +//Path to the coverage program that CTest uses for performing coverage +// inspection +COVERAGE_COMMAND:FILEPATH=/usr/bin/gcov + +//Extra command line flags to pass to the coverage tool +COVERAGE_EXTRA_FLAGS:STRING=-l + +//How many times to retry timed-out CTest submissions. +CTEST_SUBMIT_RETRY_COUNT:STRING=3 + +//How long to wait between timed-out CTest submissions. +CTEST_SUBMIT_RETRY_DELAY:STRING=5 + +//Path to a program. +CVSCOMMAND:FILEPATH=CVSCOMMAND-NOTFOUND + +//Options passed to the cvs update command. +CVS_UPDATE_OPTIONS:STRING=-d -A -P + +//Maximum time allowed before CTest will kill the test. +DART_TESTING_TIMEOUT:STRING=1500 + +//Path to a program. +GITCOMMAND:FILEPATH=/usr/bin/git + +//Git command line client +GIT_EXECUTABLE:FILEPATH=/usr/bin/git + +//Path to a program. +HGCOMMAND:FILEPATH=HGCOMMAND-NOTFOUND + +//Install example code. +INSTALL_EXAMPLES:BOOL=OFF + +//Build codec2 with LPCNet support. +LPCNET:BOOL=OFF + +//Location of lpcnet build tree. +LPCNET_BUILD_DIR:PATH=FALSE + +//Command to build the project +MAKECOMMAND:STRING=/usr/bin/cmake --build . --config "${CTEST_CONFIGURATION_TYPE}" -- -i + +//Path to the memory checking command, used for memory error detection. +MEMORYCHECK_COMMAND:FILEPATH=MEMORYCHECK_COMMAND-NOTFOUND + +//File that contains suppressions for the memory checker +MEMORYCHECK_SUPPRESSIONS_FILE:FILEPATH= + +//Path to a program. +P4COMMAND:FILEPATH=P4COMMAND-NOTFOUND + +//Path to scp command, used by CTest for submitting results to +// a Dart server +SCPCOMMAND:FILEPATH=/usr/bin/scp + +//Name of the computer/site where compile is being run +SITE:STRING=chiliagon + +//Path to the SLURM sbatch executable +SLURM_SBATCH_COMMAND:FILEPATH=SLURM_SBATCH_COMMAND-NOTFOUND + +//Path to the SLURM srun executable +SLURM_SRUN_COMMAND:FILEPATH=SLURM_SRUN_COMMAND-NOTFOUND + +//Path to a program. +SVNCOMMAND:FILEPATH=/usr/bin/svn + +//Build unittest binaries. +UNITTEST:BOOL=ON + +//Value Computed by CMake +codec2_BINARY_DIR:STATIC=/home/sh/Downloads/hackrf/codec2/build_linux + +//Dependencies for the target +codec2_LIB_DEPENDS:STATIC=general;m; + +//Value Computed by CMake +codec2_SOURCE_DIR:STATIC=/home/sh/Downloads/hackrf/codec2 + + +######################## +# INTERNAL cache entries +######################## + +//ADVANCED property for variable: BZRCOMMAND +BZRCOMMAND-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_AR +CMAKE_AR-ADVANCED:INTERNAL=1 +//This is the directory where this CMakeCache.txt was created +CMAKE_CACHEFILE_DIR:INTERNAL=/home/sh/Downloads/hackrf/codec2/build_linux +//Major version of cmake used to create the current loaded cache +CMAKE_CACHE_MAJOR_VERSION:INTERNAL=3 +//Minor version of cmake used to create the current loaded cache +CMAKE_CACHE_MINOR_VERSION:INTERNAL=13 +//Patch version of cmake used to create the current loaded cache +CMAKE_CACHE_PATCH_VERSION:INTERNAL=4 +//ADVANCED property for variable: CMAKE_COLOR_MAKEFILE +CMAKE_COLOR_MAKEFILE-ADVANCED:INTERNAL=1 +//Path to CMake executable. +CMAKE_COMMAND:INTERNAL=/usr/bin/cmake +//Path to cpack program executable. +CMAKE_CPACK_COMMAND:INTERNAL=/usr/bin/cpack +//ADVANCED property for variable: CMAKE_CTEST_COMMAND +CMAKE_CTEST_COMMAND-ADVANCED:INTERNAL=1 +//Path to ctest program executable. +CMAKE_CTEST_COMMAND:INTERNAL=/usr/bin/ctest +//ADVANCED property for variable: CMAKE_C_COMPILER +CMAKE_C_COMPILER-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_COMPILER_AR +CMAKE_C_COMPILER_AR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_COMPILER_RANLIB +CMAKE_C_COMPILER_RANLIB-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS +CMAKE_C_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS_DEBUG +CMAKE_C_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS_MINSIZEREL +CMAKE_C_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS_RELEASE +CMAKE_C_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS_RELWITHDEBINFO +CMAKE_C_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//Whether to issue deprecation errors for macros and functions. +CMAKE_ERROR_DEPRECATED:INTERNAL=FALSE +//Executable file format +CMAKE_EXECUTABLE_FORMAT:INTERNAL=ELF +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS +CMAKE_EXE_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_DEBUG +CMAKE_EXE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_MINSIZEREL +CMAKE_EXE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELEASE +CMAKE_EXE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXPORT_COMPILE_COMMANDS +CMAKE_EXPORT_COMPILE_COMMANDS-ADVANCED:INTERNAL=1 +//Name of external makefile project generator. +CMAKE_EXTRA_GENERATOR:INTERNAL= +//Name of generator. +CMAKE_GENERATOR:INTERNAL=Unix Makefiles +//Generator instance identifier. +CMAKE_GENERATOR_INSTANCE:INTERNAL= +//Name of generator platform. +CMAKE_GENERATOR_PLATFORM:INTERNAL= +//Name of generator toolset. +CMAKE_GENERATOR_TOOLSET:INTERNAL= +//Have symbol pthread_create +CMAKE_HAVE_LIBC_CREATE:INTERNAL= +//Have library pthreads +CMAKE_HAVE_PTHREADS_CREATE:INTERNAL= +//Have library pthread +CMAKE_HAVE_PTHREAD_CREATE:INTERNAL=1 +//Have include pthread.h +CMAKE_HAVE_PTHREAD_H:INTERNAL=1 +//Source directory with the top level CMakeLists.txt file for this +// project +CMAKE_HOME_DIRECTORY:INTERNAL=/home/sh/Downloads/hackrf/codec2 +//ADVANCED property for variable: CMAKE_INSTALL_BINDIR +CMAKE_INSTALL_BINDIR-ADVANCED:INTERNAL=0 +//ADVANCED property for variable: CMAKE_INSTALL_DATADIR +CMAKE_INSTALL_DATADIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_DATAROOTDIR +CMAKE_INSTALL_DATAROOTDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_DOCDIR +CMAKE_INSTALL_DOCDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_INCLUDEDIR +CMAKE_INSTALL_INCLUDEDIR-ADVANCED:INTERNAL=0 +//ADVANCED property for variable: CMAKE_INSTALL_INFODIR +CMAKE_INSTALL_INFODIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_LIBDIR +CMAKE_INSTALL_LIBDIR-ADVANCED:INTERNAL=0 +//ADVANCED property for variable: CMAKE_INSTALL_LIBEXECDIR +CMAKE_INSTALL_LIBEXECDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_LOCALEDIR +CMAKE_INSTALL_LOCALEDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_LOCALSTATEDIR +CMAKE_INSTALL_LOCALSTATEDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_MANDIR +CMAKE_INSTALL_MANDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_OLDINCLUDEDIR +CMAKE_INSTALL_OLDINCLUDEDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_RUNSTATEDIR +CMAKE_INSTALL_RUNSTATEDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_SBINDIR +CMAKE_INSTALL_SBINDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_SHAREDSTATEDIR +CMAKE_INSTALL_SHAREDSTATEDIR-ADVANCED:INTERNAL=1 +//Install .so files without execute permission. +CMAKE_INSTALL_SO_NO_EXE:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_SYSCONFDIR +CMAKE_INSTALL_SYSCONFDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_LINKER +CMAKE_LINKER-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MAKE_PROGRAM +CMAKE_MAKE_PROGRAM-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS +CMAKE_MODULE_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_DEBUG +CMAKE_MODULE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL +CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELEASE +CMAKE_MODULE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_NM +CMAKE_NM-ADVANCED:INTERNAL=1 +//number of local generators +CMAKE_NUMBER_OF_MAKEFILES:INTERNAL=4 +//ADVANCED property for variable: CMAKE_OBJCOPY +CMAKE_OBJCOPY-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_OBJDUMP +CMAKE_OBJDUMP-ADVANCED:INTERNAL=1 +//Platform information initialized +CMAKE_PLATFORM_INFO_INITIALIZED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_RANLIB +CMAKE_RANLIB-ADVANCED:INTERNAL=1 +//Path to CMake installation. +CMAKE_ROOT:INTERNAL=/usr/share/cmake-3.13 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS +CMAKE_SHARED_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_DEBUG +CMAKE_SHARED_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL +CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELEASE +CMAKE_SHARED_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SKIP_INSTALL_RPATH +CMAKE_SKIP_INSTALL_RPATH-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SKIP_RPATH +CMAKE_SKIP_RPATH-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS +CMAKE_STATIC_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_DEBUG +CMAKE_STATIC_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL +CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELEASE +CMAKE_STATIC_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STRIP +CMAKE_STRIP-ADVANCED:INTERNAL=1 +//Suppress errors that are meant for the author of the CMakeLists.txt +// files. +CMAKE_SUPPRESS_DEVELOPER_ERRORS:INTERNAL=TRUE +//Suppress Warnings that are meant for the author of the CMakeLists.txt +// files. +CMAKE_SUPPRESS_DEVELOPER_WARNINGS:INTERNAL=TRUE +//uname command +CMAKE_UNAME:INTERNAL=/bin/uname +//ADVANCED property for variable: CMAKE_VERBOSE_MAKEFILE +CMAKE_VERBOSE_MAKEFILE-ADVANCED:INTERNAL=1 +//Whether to issue warnings for deprecated functionality. +CMAKE_WARN_DEPRECATED:INTERNAL=FALSE +//Test COMPILER_SUPPORTS_GNU11 +COMPILER_SUPPORTS_GNU11:INTERNAL=1 +//Test COMPILER_SUPPORTS_GNU99 +COMPILER_SUPPORTS_GNU99:INTERNAL=1 +//ADVANCED property for variable: COVERAGE_COMMAND +COVERAGE_COMMAND-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: COVERAGE_EXTRA_FLAGS +COVERAGE_EXTRA_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CTEST_SUBMIT_RETRY_COUNT +CTEST_SUBMIT_RETRY_COUNT-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CTEST_SUBMIT_RETRY_DELAY +CTEST_SUBMIT_RETRY_DELAY-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CVSCOMMAND +CVSCOMMAND-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CVS_UPDATE_OPTIONS +CVS_UPDATE_OPTIONS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: DART_TESTING_TIMEOUT +DART_TESTING_TIMEOUT-ADVANCED:INTERNAL=1 +//Details about finding Git +FIND_PACKAGE_MESSAGE_DETAILS_Git:INTERNAL=[/usr/bin/git][v2.20.1()] +//Details about finding Threads +FIND_PACKAGE_MESSAGE_DETAILS_Threads:INTERNAL=[TRUE][v()] +//ADVANCED property for variable: GITCOMMAND +GITCOMMAND-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: GIT_EXECUTABLE +GIT_EXECUTABLE-ADVANCED:INTERNAL=1 +//Have symbol atan2 +HAVE_ATAN2:INTERNAL= +//Have symbol ceil +HAVE_CEIL:INTERNAL= +//Have symbol cos +HAVE_COS:INTERNAL= +//Have symbol floor +HAVE_FLOOR:INTERNAL= +//Have symbol getopt +HAVE_GETOPT:INTERNAL= +//Have symbol log10 +HAVE_LOG10:INTERNAL= +//Have symbol pow +HAVE_POW:INTERNAL= +//Have symbol round +HAVE_ROUND:INTERNAL= +//Have symbol sin +HAVE_SIN:INTERNAL= +//Have symbol sqrt +HAVE_SQRT:INTERNAL= +//Have include stdlib.h +HAVE_STDLIB_H:INTERNAL=1 +//Have include string.h +HAVE_STRING_H:INTERNAL=1 +//ADVANCED property for variable: HGCOMMAND +HGCOMMAND-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: MAKECOMMAND +MAKECOMMAND-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: MEMORYCHECK_COMMAND +MEMORYCHECK_COMMAND-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: MEMORYCHECK_SUPPRESSIONS_FILE +MEMORYCHECK_SUPPRESSIONS_FILE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: P4COMMAND +P4COMMAND-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: SCPCOMMAND +SCPCOMMAND-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: SITE +SITE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: SLURM_SBATCH_COMMAND +SLURM_SBATCH_COMMAND-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: SLURM_SRUN_COMMAND +SLURM_SRUN_COMMAND-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: SVNCOMMAND +SVNCOMMAND-ADVANCED:INTERNAL=1 +//CMAKE_INSTALL_PREFIX during last run +_GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX:INTERNAL=/opt/install/codec2 +//Have symbol __GNU_LIBRARY__ +_GNU_SOURCE:INTERNAL=1 + diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/3.13.4/CMakeCCompiler.cmake b/libcodec2-android/src/codec2/build_linux/CMakeFiles/3.13.4/CMakeCCompiler.cmake new file mode 100644 index 0000000..3f570ea --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/3.13.4/CMakeCCompiler.cmake @@ -0,0 +1,73 @@ +set(CMAKE_C_COMPILER "/usr/bin/cc") +set(CMAKE_C_COMPILER_ARG1 "") +set(CMAKE_C_COMPILER_ID "GNU") +set(CMAKE_C_COMPILER_VERSION "8.3.0") +set(CMAKE_C_COMPILER_VERSION_INTERNAL "") +set(CMAKE_C_COMPILER_WRAPPER "") +set(CMAKE_C_STANDARD_COMPUTED_DEFAULT "11") +set(CMAKE_C_COMPILE_FEATURES "c_std_90;c_function_prototypes;c_std_99;c_restrict;c_variadic_macros;c_std_11;c_static_assert") +set(CMAKE_C90_COMPILE_FEATURES "c_std_90;c_function_prototypes") +set(CMAKE_C99_COMPILE_FEATURES "c_std_99;c_restrict;c_variadic_macros") +set(CMAKE_C11_COMPILE_FEATURES "c_std_11;c_static_assert") + +set(CMAKE_C_PLATFORM_ID "Linux") +set(CMAKE_C_SIMULATE_ID "") +set(CMAKE_C_SIMULATE_VERSION "") + + + +set(CMAKE_AR "/usr/bin/ar") +set(CMAKE_C_COMPILER_AR "/usr/bin/gcc-ar-8") +set(CMAKE_RANLIB "/usr/bin/ranlib") +set(CMAKE_C_COMPILER_RANLIB "/usr/bin/gcc-ranlib-8") +set(CMAKE_LINKER "/usr/bin/ld") +set(CMAKE_COMPILER_IS_GNUCC 1) +set(CMAKE_C_COMPILER_LOADED 1) +set(CMAKE_C_COMPILER_WORKS TRUE) +set(CMAKE_C_ABI_COMPILED TRUE) +set(CMAKE_COMPILER_IS_MINGW ) +set(CMAKE_COMPILER_IS_CYGWIN ) +if(CMAKE_COMPILER_IS_CYGWIN) + set(CYGWIN 1) + set(UNIX 1) +endif() + +set(CMAKE_C_COMPILER_ENV_VAR "CC") + +if(CMAKE_COMPILER_IS_MINGW) + set(MINGW 1) +endif() +set(CMAKE_C_COMPILER_ID_RUN 1) +set(CMAKE_C_SOURCE_FILE_EXTENSIONS c;m) +set(CMAKE_C_IGNORE_EXTENSIONS h;H;o;O;obj;OBJ;def;DEF;rc;RC) +set(CMAKE_C_LINKER_PREFERENCE 10) + +# Save compiler ABI information. +set(CMAKE_C_SIZEOF_DATA_PTR "8") +set(CMAKE_C_COMPILER_ABI "ELF") +set(CMAKE_C_LIBRARY_ARCHITECTURE "x86_64-linux-gnu") + +if(CMAKE_C_SIZEOF_DATA_PTR) + set(CMAKE_SIZEOF_VOID_P "${CMAKE_C_SIZEOF_DATA_PTR}") +endif() + +if(CMAKE_C_COMPILER_ABI) + set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_C_COMPILER_ABI}") +endif() + +if(CMAKE_C_LIBRARY_ARCHITECTURE) + set(CMAKE_LIBRARY_ARCHITECTURE "x86_64-linux-gnu") +endif() + +set(CMAKE_C_CL_SHOWINCLUDES_PREFIX "") +if(CMAKE_C_CL_SHOWINCLUDES_PREFIX) + set(CMAKE_CL_SHOWINCLUDES_PREFIX "${CMAKE_C_CL_SHOWINCLUDES_PREFIX}") +endif() + + + + + +set(CMAKE_C_IMPLICIT_LINK_LIBRARIES "gcc;gcc_s;c;gcc;gcc_s") +set(CMAKE_C_IMPLICIT_LINK_DIRECTORIES "/usr/lib/gcc/x86_64-linux-gnu/8;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib") +set(CMAKE_C_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "") diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/3.13.4/CMakeDetermineCompilerABI_C.bin b/libcodec2-android/src/codec2/build_linux/CMakeFiles/3.13.4/CMakeDetermineCompilerABI_C.bin new file mode 100755 index 0000000..c40afa7 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/CMakeFiles/3.13.4/CMakeDetermineCompilerABI_C.bin differ diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/3.13.4/CMakeSystem.cmake b/libcodec2-android/src/codec2/build_linux/CMakeFiles/3.13.4/CMakeSystem.cmake new file mode 100644 index 0000000..c09d2db --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/3.13.4/CMakeSystem.cmake @@ -0,0 +1,15 @@ +set(CMAKE_HOST_SYSTEM "Linux-4.19.0-6-amd64") +set(CMAKE_HOST_SYSTEM_NAME "Linux") +set(CMAKE_HOST_SYSTEM_VERSION "4.19.0-6-amd64") +set(CMAKE_HOST_SYSTEM_PROCESSOR "x86_64") + + + +set(CMAKE_SYSTEM "Linux-4.19.0-6-amd64") +set(CMAKE_SYSTEM_NAME "Linux") +set(CMAKE_SYSTEM_VERSION "4.19.0-6-amd64") +set(CMAKE_SYSTEM_PROCESSOR "x86_64") + +set(CMAKE_CROSSCOMPILING "FALSE") + +set(CMAKE_SYSTEM_LOADED 1) diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/3.13.4/CompilerIdC/CMakeCCompilerId.c b/libcodec2-android/src/codec2/build_linux/CMakeFiles/3.13.4/CompilerIdC/CMakeCCompilerId.c new file mode 100644 index 0000000..bfc6ebb --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/3.13.4/CompilerIdC/CMakeCCompilerId.c @@ -0,0 +1,623 @@ +#ifdef __cplusplus +# error "A C++ compiler has been selected for C." +#endif + +#if defined(__18CXX) +# define ID_VOID_MAIN +#endif +#if defined(__CLASSIC_C__) +/* cv-qualifiers did not exist in K&R C */ +# define const +# define volatile +#endif + + +/* Version number components: V=Version, R=Revision, P=Patch + Version date components: YYYY=Year, MM=Month, DD=Day */ + +#if defined(__INTEL_COMPILER) || defined(__ICC) +# define COMPILER_ID "Intel" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif + /* __INTEL_COMPILER = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100) +# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10) +# if defined(__INTEL_COMPILER_UPDATE) +# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE) +# else +# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER % 10) +# endif +# if defined(__INTEL_COMPILER_BUILD_DATE) + /* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */ +# define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE) +# endif +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif + +#elif defined(__PATHCC__) +# define COMPILER_ID "PathScale" +# define COMPILER_VERSION_MAJOR DEC(__PATHCC__) +# define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__) +# if defined(__PATHCC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__) +# endif + +#elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__) +# define COMPILER_ID "Embarcadero" +# define COMPILER_VERSION_MAJOR HEX(__CODEGEARC_VERSION__>>24 & 0x00FF) +# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF) +# define COMPILER_VERSION_PATCH DEC(__CODEGEARC_VERSION__ & 0xFFFF) + +#elif defined(__BORLANDC__) +# define COMPILER_ID "Borland" + /* __BORLANDC__ = 0xVRR */ +# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8) +# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF) + +#elif defined(__WATCOMC__) && __WATCOMC__ < 1200 +# define COMPILER_ID "Watcom" + /* __WATCOMC__ = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__WATCOMC__) +# define COMPILER_ID "OpenWatcom" + /* __WATCOMC__ = VVRP + 1100 */ +# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__SUNPRO_C) +# define COMPILER_ID "SunPro" +# if __SUNPRO_C >= 0x5100 + /* __SUNPRO_C = 0xVRRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>12) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xFF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_C & 0xF) +# else + /* __SUNPRO_CC = 0xVRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>8) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_C & 0xF) +# endif + +#elif defined(__HP_cc) +# define COMPILER_ID "HP" + /* __HP_cc = VVRRPP */ +# define COMPILER_VERSION_MAJOR DEC(__HP_cc/10000) +# define COMPILER_VERSION_MINOR DEC(__HP_cc/100 % 100) +# define COMPILER_VERSION_PATCH DEC(__HP_cc % 100) + +#elif defined(__DECC) +# define COMPILER_ID "Compaq" + /* __DECC_VER = VVRRTPPPP */ +# define COMPILER_VERSION_MAJOR DEC(__DECC_VER/10000000) +# define COMPILER_VERSION_MINOR DEC(__DECC_VER/100000 % 100) +# define COMPILER_VERSION_PATCH DEC(__DECC_VER % 10000) + +#elif defined(__IBMC__) && defined(__COMPILER_VER__) +# define COMPILER_ID "zOS" +# if defined(__ibmxl__) +# define COMPILER_VERSION_MAJOR DEC(__ibmxl_version__) +# define COMPILER_VERSION_MINOR DEC(__ibmxl_release__) +# define COMPILER_VERSION_PATCH DEC(__ibmxl_modification__) +# define COMPILER_VERSION_TWEAK DEC(__ibmxl_ptf_fix_level__) +# else + /* __IBMC__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) +# endif + + +#elif defined(__ibmxl__) || (defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ >= 800) +# define COMPILER_ID "XL" +# if defined(__ibmxl__) +# define COMPILER_VERSION_MAJOR DEC(__ibmxl_version__) +# define COMPILER_VERSION_MINOR DEC(__ibmxl_release__) +# define COMPILER_VERSION_PATCH DEC(__ibmxl_modification__) +# define COMPILER_VERSION_TWEAK DEC(__ibmxl_ptf_fix_level__) +# else + /* __IBMC__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) +# endif + + +#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ < 800 +# define COMPILER_ID "VisualAge" +# if defined(__ibmxl__) +# define COMPILER_VERSION_MAJOR DEC(__ibmxl_version__) +# define COMPILER_VERSION_MINOR DEC(__ibmxl_release__) +# define COMPILER_VERSION_PATCH DEC(__ibmxl_modification__) +# define COMPILER_VERSION_TWEAK DEC(__ibmxl_ptf_fix_level__) +# else + /* __IBMC__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) +# endif + + +#elif defined(__PGI) +# define COMPILER_ID "PGI" +# define COMPILER_VERSION_MAJOR DEC(__PGIC__) +# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__) +# if defined(__PGIC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__) +# endif + +#elif defined(_CRAYC) +# define COMPILER_ID "Cray" +# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR) +# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR) + +#elif defined(__TI_COMPILER_VERSION__) +# define COMPILER_ID "TI" + /* __TI_COMPILER_VERSION__ = VVVRRRPPP */ +# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000) +# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000) +# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000) + +#elif defined(__FUJITSU) || defined(__FCC_VERSION) || defined(__fcc_version) +# define COMPILER_ID "Fujitsu" + +#elif defined(__TINYC__) +# define COMPILER_ID "TinyCC" + +#elif defined(__BCC__) +# define COMPILER_ID "Bruce" + +#elif defined(__SCO_VERSION__) +# define COMPILER_ID "SCO" + +#elif defined(__clang__) && defined(__apple_build_version__) +# define COMPILER_ID "AppleClang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif +# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__) + +#elif defined(__clang__) +# define COMPILER_ID "Clang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif + +#elif defined(__GNUC__) +# define COMPILER_ID "GNU" +# define COMPILER_VERSION_MAJOR DEC(__GNUC__) +# if defined(__GNUC_MINOR__) +# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__) +# endif +# if defined(__GNUC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif + +#elif defined(_MSC_VER) +# define COMPILER_ID "MSVC" + /* _MSC_VER = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100) +# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100) +# if defined(_MSC_FULL_VER) +# if _MSC_VER >= 1400 + /* _MSC_FULL_VER = VVRRPPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000) +# else + /* _MSC_FULL_VER = VVRRPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000) +# endif +# endif +# if defined(_MSC_BUILD) +# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD) +# endif + +#elif defined(__VISUALDSPVERSION__) || defined(__ADSPBLACKFIN__) || defined(__ADSPTS__) || defined(__ADSP21000__) +# define COMPILER_ID "ADSP" +#if defined(__VISUALDSPVERSION__) + /* __VISUALDSPVERSION__ = 0xVVRRPP00 */ +# define COMPILER_VERSION_MAJOR HEX(__VISUALDSPVERSION__>>24) +# define COMPILER_VERSION_MINOR HEX(__VISUALDSPVERSION__>>16 & 0xFF) +# define COMPILER_VERSION_PATCH HEX(__VISUALDSPVERSION__>>8 & 0xFF) +#endif + +#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) +# define COMPILER_ID "IAR" +# if defined(__VER__) +# define COMPILER_VERSION_MAJOR DEC((__VER__) / 1000000) +# define COMPILER_VERSION_MINOR DEC(((__VER__) / 1000) % 1000) +# define COMPILER_VERSION_PATCH DEC((__VER__) % 1000) +# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) +# endif + +#elif defined(__ARMCC_VERSION) +# define COMPILER_ID "ARMCC" +#if __ARMCC_VERSION >= 1000000 + /* __ARMCC_VERSION = VRRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/1000000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 100) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#else + /* __ARMCC_VERSION = VRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/100000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 10) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#endif + + +#elif defined(__SDCC_VERSION_MAJOR) || defined(SDCC) +# define COMPILER_ID "SDCC" +# if defined(__SDCC_VERSION_MAJOR) +# define COMPILER_VERSION_MAJOR DEC(__SDCC_VERSION_MAJOR) +# define COMPILER_VERSION_MINOR DEC(__SDCC_VERSION_MINOR) +# define COMPILER_VERSION_PATCH DEC(__SDCC_VERSION_PATCH) +# else + /* SDCC = VRP */ +# define COMPILER_VERSION_MAJOR DEC(SDCC/100) +# define COMPILER_VERSION_MINOR DEC(SDCC/10 % 10) +# define COMPILER_VERSION_PATCH DEC(SDCC % 10) +# endif + +#elif defined(_SGI_COMPILER_VERSION) || defined(_COMPILER_VERSION) +# define COMPILER_ID "MIPSpro" +# if defined(_SGI_COMPILER_VERSION) + /* _SGI_COMPILER_VERSION = VRP */ +# define COMPILER_VERSION_MAJOR DEC(_SGI_COMPILER_VERSION/100) +# define COMPILER_VERSION_MINOR DEC(_SGI_COMPILER_VERSION/10 % 10) +# define COMPILER_VERSION_PATCH DEC(_SGI_COMPILER_VERSION % 10) +# else + /* _COMPILER_VERSION = VRP */ +# define COMPILER_VERSION_MAJOR DEC(_COMPILER_VERSION/100) +# define COMPILER_VERSION_MINOR DEC(_COMPILER_VERSION/10 % 10) +# define COMPILER_VERSION_PATCH DEC(_COMPILER_VERSION % 10) +# endif + + +/* These compilers are either not known or too old to define an + identification macro. Try to identify the platform and guess that + it is the native compiler. */ +#elif defined(__sgi) +# define COMPILER_ID "MIPSpro" + +#elif defined(__hpux) || defined(__hpua) +# define COMPILER_ID "HP" + +#else /* unknown compiler */ +# define COMPILER_ID "" +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]"; +#ifdef SIMULATE_ID +char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]"; +#endif + +#ifdef __QNXNTO__ +char const* qnxnto = "INFO" ":" "qnxnto[]"; +#endif + +#if defined(__CRAYXE) || defined(__CRAYXC) +char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]"; +#endif + +#define STRINGIFY_HELPER(X) #X +#define STRINGIFY(X) STRINGIFY_HELPER(X) + +/* Identify known platforms by name. */ +#if defined(__linux) || defined(__linux__) || defined(linux) +# define PLATFORM_ID "Linux" + +#elif defined(__CYGWIN__) +# define PLATFORM_ID "Cygwin" + +#elif defined(__MINGW32__) +# define PLATFORM_ID "MinGW" + +#elif defined(__APPLE__) +# define PLATFORM_ID "Darwin" + +#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32) +# define PLATFORM_ID "Windows" + +#elif defined(__FreeBSD__) || defined(__FreeBSD) +# define PLATFORM_ID "FreeBSD" + +#elif defined(__NetBSD__) || defined(__NetBSD) +# define PLATFORM_ID "NetBSD" + +#elif defined(__OpenBSD__) || defined(__OPENBSD) +# define PLATFORM_ID "OpenBSD" + +#elif defined(__sun) || defined(sun) +# define PLATFORM_ID "SunOS" + +#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__) +# define PLATFORM_ID "AIX" + +#elif defined(__sgi) || defined(__sgi__) || defined(_SGI) +# define PLATFORM_ID "IRIX" + +#elif defined(__hpux) || defined(__hpux__) +# define PLATFORM_ID "HP-UX" + +#elif defined(__HAIKU__) +# define PLATFORM_ID "Haiku" + +#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS) +# define PLATFORM_ID "BeOS" + +#elif defined(__QNX__) || defined(__QNXNTO__) +# define PLATFORM_ID "QNX" + +#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__) +# define PLATFORM_ID "Tru64" + +#elif defined(__riscos) || defined(__riscos__) +# define PLATFORM_ID "RISCos" + +#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__) +# define PLATFORM_ID "SINIX" + +#elif defined(__UNIX_SV__) +# define PLATFORM_ID "UNIX_SV" + +#elif defined(__bsdos__) +# define PLATFORM_ID "BSDOS" + +#elif defined(_MPRAS) || defined(MPRAS) +# define PLATFORM_ID "MP-RAS" + +#elif defined(__osf) || defined(__osf__) +# define PLATFORM_ID "OSF1" + +#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv) +# define PLATFORM_ID "SCO_SV" + +#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX) +# define PLATFORM_ID "ULTRIX" + +#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX) +# define PLATFORM_ID "Xenix" + +#elif defined(__WATCOMC__) +# if defined(__LINUX__) +# define PLATFORM_ID "Linux" + +# elif defined(__DOS__) +# define PLATFORM_ID "DOS" + +# elif defined(__OS2__) +# define PLATFORM_ID "OS2" + +# elif defined(__WINDOWS__) +# define PLATFORM_ID "Windows3x" + +# else /* unknown platform */ +# define PLATFORM_ID +# endif + +#else /* unknown platform */ +# define PLATFORM_ID + +#endif + +/* For windows compilers MSVC and Intel we can determine + the architecture of the compiler being used. This is because + the compilers do not have flags that can change the architecture, + but rather depend on which compiler is being used +*/ +#if defined(_WIN32) && defined(_MSC_VER) +# if defined(_M_IA64) +# define ARCHITECTURE_ID "IA64" + +# elif defined(_M_X64) || defined(_M_AMD64) +# define ARCHITECTURE_ID "x64" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# elif defined(_M_ARM64) +# define ARCHITECTURE_ID "ARM64" + +# elif defined(_M_ARM) +# if _M_ARM == 4 +# define ARCHITECTURE_ID "ARMV4I" +# elif _M_ARM == 5 +# define ARCHITECTURE_ID "ARMV5I" +# else +# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM) +# endif + +# elif defined(_M_MIPS) +# define ARCHITECTURE_ID "MIPS" + +# elif defined(_M_SH) +# define ARCHITECTURE_ID "SHx" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__WATCOMC__) +# if defined(_M_I86) +# define ARCHITECTURE_ID "I86" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) +# if defined(__ICCARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__ICCAVR__) +# define ARCHITECTURE_ID "AVR" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif +#else +# define ARCHITECTURE_ID +#endif + +/* Convert integer to decimal digit literals. */ +#define DEC(n) \ + ('0' + (((n) / 10000000)%10)), \ + ('0' + (((n) / 1000000)%10)), \ + ('0' + (((n) / 100000)%10)), \ + ('0' + (((n) / 10000)%10)), \ + ('0' + (((n) / 1000)%10)), \ + ('0' + (((n) / 100)%10)), \ + ('0' + (((n) / 10)%10)), \ + ('0' + ((n) % 10)) + +/* Convert integer to hex digit literals. */ +#define HEX(n) \ + ('0' + ((n)>>28 & 0xF)), \ + ('0' + ((n)>>24 & 0xF)), \ + ('0' + ((n)>>20 & 0xF)), \ + ('0' + ((n)>>16 & 0xF)), \ + ('0' + ((n)>>12 & 0xF)), \ + ('0' + ((n)>>8 & 0xF)), \ + ('0' + ((n)>>4 & 0xF)), \ + ('0' + ((n) & 0xF)) + +/* Construct a string literal encoding the version number components. */ +#ifdef COMPILER_VERSION_MAJOR +char const info_version[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[', + COMPILER_VERSION_MAJOR, +# ifdef COMPILER_VERSION_MINOR + '.', COMPILER_VERSION_MINOR, +# ifdef COMPILER_VERSION_PATCH + '.', COMPILER_VERSION_PATCH, +# ifdef COMPILER_VERSION_TWEAK + '.', COMPILER_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct a string literal encoding the internal version number. */ +#ifdef COMPILER_VERSION_INTERNAL +char const info_version_internal[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','_', + 'i','n','t','e','r','n','a','l','[', + COMPILER_VERSION_INTERNAL,']','\0'}; +#endif + +/* Construct a string literal encoding the version number components. */ +#ifdef SIMULATE_VERSION_MAJOR +char const info_simulate_version[] = { + 'I', 'N', 'F', 'O', ':', + 's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[', + SIMULATE_VERSION_MAJOR, +# ifdef SIMULATE_VERSION_MINOR + '.', SIMULATE_VERSION_MINOR, +# ifdef SIMULATE_VERSION_PATCH + '.', SIMULATE_VERSION_PATCH, +# ifdef SIMULATE_VERSION_TWEAK + '.', SIMULATE_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]"; +char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]"; + + + + +#if !defined(__STDC__) +# if (defined(_MSC_VER) && !defined(__clang__)) \ + || (defined(__ibmxl__) || defined(__IBMC__)) +# define C_DIALECT "90" +# else +# define C_DIALECT +# endif +#elif __STDC_VERSION__ >= 201000L +# define C_DIALECT "11" +#elif __STDC_VERSION__ >= 199901L +# define C_DIALECT "99" +#else +# define C_DIALECT "90" +#endif +const char* info_language_dialect_default = + "INFO" ":" "dialect_default[" C_DIALECT "]"; + +/*--------------------------------------------------------------------------*/ + +#ifdef ID_VOID_MAIN +void main() {} +#else +# if defined(__CLASSIC_C__) +int main(argc, argv) int argc; char *argv[]; +# else +int main(int argc, char* argv[]) +# endif +{ + int require = 0; + require += info_compiler[argc]; + require += info_platform[argc]; + require += info_arch[argc]; +#ifdef COMPILER_VERSION_MAJOR + require += info_version[argc]; +#endif +#ifdef COMPILER_VERSION_INTERNAL + require += info_version_internal[argc]; +#endif +#ifdef SIMULATE_ID + require += info_simulate[argc]; +#endif +#ifdef SIMULATE_VERSION_MAJOR + require += info_simulate_version[argc]; +#endif +#if defined(__CRAYXE) || defined(__CRAYXC) + require += info_cray[argc]; +#endif + require += info_language_dialect_default[argc]; + (void)argv; + return require; +} +#endif diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/3.13.4/CompilerIdC/a.out b/libcodec2-android/src/codec2/build_linux/CMakeFiles/3.13.4/CompilerIdC/a.out new file mode 100755 index 0000000..f0754bf Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/CMakeFiles/3.13.4/CompilerIdC/a.out differ diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/CMakeDirectoryInformation.cmake b/libcodec2-android/src/codec2/build_linux/CMakeFiles/CMakeDirectoryInformation.cmake new file mode 100644 index 0000000..4745369 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/CMakeDirectoryInformation.cmake @@ -0,0 +1,16 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Relative path conversion top directories. +set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/home/sh/Downloads/hackrf/codec2") +set(CMAKE_RELATIVE_PATH_TOP_BINARY "/home/sh/Downloads/hackrf/codec2/build_linux") + +# Force unix paths in dependencies. +set(CMAKE_FORCE_UNIX_PATHS 1) + + +# The C and CXX include file regular expressions for this directory. +set(CMAKE_C_INCLUDE_REGEX_SCAN "^.*$") +set(CMAKE_C_INCLUDE_REGEX_COMPLAIN "^$") +set(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN}) +set(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN}) diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/CMakeError.log b/libcodec2-android/src/codec2/build_linux/CMakeFiles/CMakeError.log new file mode 100644 index 0000000..f919d93 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/CMakeError.log @@ -0,0 +1,380 @@ +Determining if the floor exist failed with the following output: +Change Dir: /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp + +Run Build Command:"/usr/bin/make" "cmTC_dd8dd/fast" +/usr/bin/make -f CMakeFiles/cmTC_dd8dd.dir/build.make CMakeFiles/cmTC_dd8dd.dir/build +make[1]: Entering directory '/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp' +Building C object CMakeFiles/cmTC_dd8dd.dir/CheckSymbolExists.c.o +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -o CMakeFiles/cmTC_dd8dd.dir/CheckSymbolExists.c.o -c /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp/CheckSymbolExists.c +Linking C executable cmTC_dd8dd +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_dd8dd.dir/link.txt --verbose=1 +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -rdynamic CMakeFiles/cmTC_dd8dd.dir/CheckSymbolExists.c.o -o cmTC_dd8dd +/usr/bin/ld: CMakeFiles/cmTC_dd8dd.dir/CheckSymbolExists.c.o: in function `main': +CheckSymbolExists.c:(.text+0x1b): undefined reference to `floor' +collect2: error: ld returned 1 exit status +make[1]: *** [CMakeFiles/cmTC_dd8dd.dir/build.make:87: cmTC_dd8dd] Error 1 +make[1]: Leaving directory '/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp' +make: *** [Makefile:121: cmTC_dd8dd/fast] Error 2 + +File /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp/CheckSymbolExists.c: +/* */ +#include + +int main(int argc, char** argv) +{ + (void)argv; +#ifndef floor + return ((int*)(&floor))[argc]; +#else + (void)argc; + return 0; +#endif +} + +Determining if the ceil exist failed with the following output: +Change Dir: /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp + +Run Build Command:"/usr/bin/make" "cmTC_6c64a/fast" +/usr/bin/make -f CMakeFiles/cmTC_6c64a.dir/build.make CMakeFiles/cmTC_6c64a.dir/build +make[1]: Entering directory '/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp' +Building C object CMakeFiles/cmTC_6c64a.dir/CheckSymbolExists.c.o +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -o CMakeFiles/cmTC_6c64a.dir/CheckSymbolExists.c.o -c /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp/CheckSymbolExists.c +Linking C executable cmTC_6c64a +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_6c64a.dir/link.txt --verbose=1 +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -rdynamic CMakeFiles/cmTC_6c64a.dir/CheckSymbolExists.c.o -o cmTC_6c64a +/usr/bin/ld: CMakeFiles/cmTC_6c64a.dir/CheckSymbolExists.c.o: in function `main': +CheckSymbolExists.c:(.text+0x1b): undefined reference to `ceil' +collect2: error: ld returned 1 exit status +make[1]: *** [CMakeFiles/cmTC_6c64a.dir/build.make:87: cmTC_6c64a] Error 1 +make[1]: Leaving directory '/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp' +make: *** [Makefile:121: cmTC_6c64a/fast] Error 2 + +File /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp/CheckSymbolExists.c: +/* */ +#include + +int main(int argc, char** argv) +{ + (void)argv; +#ifndef ceil + return ((int*)(&ceil))[argc]; +#else + (void)argc; + return 0; +#endif +} + +Determining if the pow exist failed with the following output: +Change Dir: /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp + +Run Build Command:"/usr/bin/make" "cmTC_b7d1e/fast" +/usr/bin/make -f CMakeFiles/cmTC_b7d1e.dir/build.make CMakeFiles/cmTC_b7d1e.dir/build +make[1]: Entering directory '/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp' +Building C object CMakeFiles/cmTC_b7d1e.dir/CheckSymbolExists.c.o +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -o CMakeFiles/cmTC_b7d1e.dir/CheckSymbolExists.c.o -c /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp/CheckSymbolExists.c +Linking C executable cmTC_b7d1e +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_b7d1e.dir/link.txt --verbose=1 +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -rdynamic CMakeFiles/cmTC_b7d1e.dir/CheckSymbolExists.c.o -o cmTC_b7d1e +/usr/bin/ld: CMakeFiles/cmTC_b7d1e.dir/CheckSymbolExists.c.o: in function `main': +CheckSymbolExists.c:(.text+0x1b): undefined reference to `pow' +collect2: error: ld returned 1 exit status +make[1]: *** [CMakeFiles/cmTC_b7d1e.dir/build.make:87: cmTC_b7d1e] Error 1 +make[1]: Leaving directory '/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp' +make: *** [Makefile:121: cmTC_b7d1e/fast] Error 2 + +File /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp/CheckSymbolExists.c: +/* */ +#include + +int main(int argc, char** argv) +{ + (void)argv; +#ifndef pow + return ((int*)(&pow))[argc]; +#else + (void)argc; + return 0; +#endif +} + +Determining if the sqrt exist failed with the following output: +Change Dir: /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp + +Run Build Command:"/usr/bin/make" "cmTC_5c615/fast" +/usr/bin/make -f CMakeFiles/cmTC_5c615.dir/build.make CMakeFiles/cmTC_5c615.dir/build +make[1]: Entering directory '/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp' +Building C object CMakeFiles/cmTC_5c615.dir/CheckSymbolExists.c.o +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -o CMakeFiles/cmTC_5c615.dir/CheckSymbolExists.c.o -c /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp/CheckSymbolExists.c +Linking C executable cmTC_5c615 +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_5c615.dir/link.txt --verbose=1 +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -rdynamic CMakeFiles/cmTC_5c615.dir/CheckSymbolExists.c.o -o cmTC_5c615 +/usr/bin/ld: CMakeFiles/cmTC_5c615.dir/CheckSymbolExists.c.o: in function `main': +CheckSymbolExists.c:(.text+0x1b): undefined reference to `sqrt' +collect2: error: ld returned 1 exit status +make[1]: *** [CMakeFiles/cmTC_5c615.dir/build.make:87: cmTC_5c615] Error 1 +make[1]: Leaving directory '/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp' +make: *** [Makefile:121: cmTC_5c615/fast] Error 2 + +File /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp/CheckSymbolExists.c: +/* */ +#include + +int main(int argc, char** argv) +{ + (void)argv; +#ifndef sqrt + return ((int*)(&sqrt))[argc]; +#else + (void)argc; + return 0; +#endif +} + +Determining if the sin exist failed with the following output: +Change Dir: /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp + +Run Build Command:"/usr/bin/make" "cmTC_f86c3/fast" +/usr/bin/make -f CMakeFiles/cmTC_f86c3.dir/build.make CMakeFiles/cmTC_f86c3.dir/build +make[1]: Entering directory '/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp' +Building C object CMakeFiles/cmTC_f86c3.dir/CheckSymbolExists.c.o +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -o CMakeFiles/cmTC_f86c3.dir/CheckSymbolExists.c.o -c /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp/CheckSymbolExists.c +Linking C executable cmTC_f86c3 +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_f86c3.dir/link.txt --verbose=1 +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -rdynamic CMakeFiles/cmTC_f86c3.dir/CheckSymbolExists.c.o -o cmTC_f86c3 +/usr/bin/ld: CMakeFiles/cmTC_f86c3.dir/CheckSymbolExists.c.o: in function `main': +CheckSymbolExists.c:(.text+0x1b): undefined reference to `sin' +collect2: error: ld returned 1 exit status +make[1]: *** [CMakeFiles/cmTC_f86c3.dir/build.make:87: cmTC_f86c3] Error 1 +make[1]: Leaving directory '/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp' +make: *** [Makefile:121: cmTC_f86c3/fast] Error 2 + +File /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp/CheckSymbolExists.c: +/* */ +#include + +int main(int argc, char** argv) +{ + (void)argv; +#ifndef sin + return ((int*)(&sin))[argc]; +#else + (void)argc; + return 0; +#endif +} + +Determining if the cos exist failed with the following output: +Change Dir: /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp + +Run Build Command:"/usr/bin/make" "cmTC_2509b/fast" +/usr/bin/make -f CMakeFiles/cmTC_2509b.dir/build.make CMakeFiles/cmTC_2509b.dir/build +make[1]: Entering directory '/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp' +Building C object CMakeFiles/cmTC_2509b.dir/CheckSymbolExists.c.o +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -o CMakeFiles/cmTC_2509b.dir/CheckSymbolExists.c.o -c /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp/CheckSymbolExists.c +Linking C executable cmTC_2509b +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_2509b.dir/link.txt --verbose=1 +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -rdynamic CMakeFiles/cmTC_2509b.dir/CheckSymbolExists.c.o -o cmTC_2509b +/usr/bin/ld: CMakeFiles/cmTC_2509b.dir/CheckSymbolExists.c.o: in function `main': +CheckSymbolExists.c:(.text+0x1b): undefined reference to `cos' +collect2: error: ld returned 1 exit status +make[1]: *** [CMakeFiles/cmTC_2509b.dir/build.make:87: cmTC_2509b] Error 1 +make[1]: Leaving directory '/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp' +make: *** [Makefile:121: cmTC_2509b/fast] Error 2 + +File /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp/CheckSymbolExists.c: +/* */ +#include + +int main(int argc, char** argv) +{ + (void)argv; +#ifndef cos + return ((int*)(&cos))[argc]; +#else + (void)argc; + return 0; +#endif +} + +Determining if the atan2 exist failed with the following output: +Change Dir: /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp + +Run Build Command:"/usr/bin/make" "cmTC_c93e3/fast" +/usr/bin/make -f CMakeFiles/cmTC_c93e3.dir/build.make CMakeFiles/cmTC_c93e3.dir/build +make[1]: Entering directory '/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp' +Building C object CMakeFiles/cmTC_c93e3.dir/CheckSymbolExists.c.o +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -o CMakeFiles/cmTC_c93e3.dir/CheckSymbolExists.c.o -c /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp/CheckSymbolExists.c +Linking C executable cmTC_c93e3 +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_c93e3.dir/link.txt --verbose=1 +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -rdynamic CMakeFiles/cmTC_c93e3.dir/CheckSymbolExists.c.o -o cmTC_c93e3 +/usr/bin/ld: CMakeFiles/cmTC_c93e3.dir/CheckSymbolExists.c.o: in function `main': +CheckSymbolExists.c:(.text+0x1b): undefined reference to `atan2' +collect2: error: ld returned 1 exit status +make[1]: *** [CMakeFiles/cmTC_c93e3.dir/build.make:87: cmTC_c93e3] Error 1 +make[1]: Leaving directory '/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp' +make: *** [Makefile:121: cmTC_c93e3/fast] Error 2 + +File /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp/CheckSymbolExists.c: +/* */ +#include + +int main(int argc, char** argv) +{ + (void)argv; +#ifndef atan2 + return ((int*)(&atan2))[argc]; +#else + (void)argc; + return 0; +#endif +} + +Determining if the log10 exist failed with the following output: +Change Dir: /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp + +Run Build Command:"/usr/bin/make" "cmTC_6a5ee/fast" +/usr/bin/make -f CMakeFiles/cmTC_6a5ee.dir/build.make CMakeFiles/cmTC_6a5ee.dir/build +make[1]: Entering directory '/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp' +Building C object CMakeFiles/cmTC_6a5ee.dir/CheckSymbolExists.c.o +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -o CMakeFiles/cmTC_6a5ee.dir/CheckSymbolExists.c.o -c /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp/CheckSymbolExists.c +Linking C executable cmTC_6a5ee +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_6a5ee.dir/link.txt --verbose=1 +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -rdynamic CMakeFiles/cmTC_6a5ee.dir/CheckSymbolExists.c.o -o cmTC_6a5ee +/usr/bin/ld: CMakeFiles/cmTC_6a5ee.dir/CheckSymbolExists.c.o: in function `main': +CheckSymbolExists.c:(.text+0x1b): undefined reference to `log10' +collect2: error: ld returned 1 exit status +make[1]: *** [CMakeFiles/cmTC_6a5ee.dir/build.make:87: cmTC_6a5ee] Error 1 +make[1]: Leaving directory '/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp' +make: *** [Makefile:121: cmTC_6a5ee/fast] Error 2 + +File /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp/CheckSymbolExists.c: +/* */ +#include + +int main(int argc, char** argv) +{ + (void)argv; +#ifndef log10 + return ((int*)(&log10))[argc]; +#else + (void)argc; + return 0; +#endif +} + +Determining if the round exist failed with the following output: +Change Dir: /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp + +Run Build Command:"/usr/bin/make" "cmTC_4b5c4/fast" +/usr/bin/make -f CMakeFiles/cmTC_4b5c4.dir/build.make CMakeFiles/cmTC_4b5c4.dir/build +make[1]: Entering directory '/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp' +Building C object CMakeFiles/cmTC_4b5c4.dir/CheckSymbolExists.c.o +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -o CMakeFiles/cmTC_4b5c4.dir/CheckSymbolExists.c.o -c /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp/CheckSymbolExists.c +Linking C executable cmTC_4b5c4 +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_4b5c4.dir/link.txt --verbose=1 +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -rdynamic CMakeFiles/cmTC_4b5c4.dir/CheckSymbolExists.c.o -o cmTC_4b5c4 +/usr/bin/ld: CMakeFiles/cmTC_4b5c4.dir/CheckSymbolExists.c.o: in function `main': +CheckSymbolExists.c:(.text+0x1b): undefined reference to `round' +collect2: error: ld returned 1 exit status +make[1]: *** [CMakeFiles/cmTC_4b5c4.dir/build.make:87: cmTC_4b5c4] Error 1 +make[1]: Leaving directory '/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp' +make: *** [Makefile:121: cmTC_4b5c4/fast] Error 2 + +File /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp/CheckSymbolExists.c: +/* */ +#include + +int main(int argc, char** argv) +{ + (void)argv; +#ifndef round + return ((int*)(&round))[argc]; +#else + (void)argc; + return 0; +#endif +} + +Determining if the getopt exist failed with the following output: +Change Dir: /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp + +Run Build Command:"/usr/bin/make" "cmTC_645d4/fast" +/usr/bin/make -f CMakeFiles/cmTC_645d4.dir/build.make CMakeFiles/cmTC_645d4.dir/build +make[1]: Entering directory '/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp' +Building C object CMakeFiles/cmTC_645d4.dir/CheckSymbolExists.c.o +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -o CMakeFiles/cmTC_645d4.dir/CheckSymbolExists.c.o -c /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp/CheckSymbolExists.c +/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp/CheckSymbolExists.c: In function ‘main’: +/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp/CheckSymbolExists.c:8:19: error: ‘getopt’ undeclared (first use in this function) + return ((int*)(&getopt))[argc]; + ^~~~~~ +/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp/CheckSymbolExists.c:8:19: note: each undeclared identifier is reported only once for each function it appears in +make[1]: *** [CMakeFiles/cmTC_645d4.dir/build.make:66: CMakeFiles/cmTC_645d4.dir/CheckSymbolExists.c.o] Error 1 +make[1]: Leaving directory '/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp' +make: *** [Makefile:121: cmTC_645d4/fast] Error 2 + +File /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp/CheckSymbolExists.c: +/* */ +#include + +int main(int argc, char** argv) +{ + (void)argv; +#ifndef getopt + return ((int*)(&getopt))[argc]; +#else + (void)argc; + return 0; +#endif +} + +Determining if the pthread_create exist failed with the following output: +Change Dir: /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp + +Run Build Command:"/usr/bin/make" "cmTC_1dce1/fast" +/usr/bin/make -f CMakeFiles/cmTC_1dce1.dir/build.make CMakeFiles/cmTC_1dce1.dir/build +make[1]: Entering directory '/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp' +Building C object CMakeFiles/cmTC_1dce1.dir/CheckSymbolExists.c.o +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -o CMakeFiles/cmTC_1dce1.dir/CheckSymbolExists.c.o -c /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp/CheckSymbolExists.c +Linking C executable cmTC_1dce1 +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_1dce1.dir/link.txt --verbose=1 +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -rdynamic CMakeFiles/cmTC_1dce1.dir/CheckSymbolExists.c.o -o cmTC_1dce1 +/usr/bin/ld: CMakeFiles/cmTC_1dce1.dir/CheckSymbolExists.c.o: in function `main': +CheckSymbolExists.c:(.text+0x1b): undefined reference to `pthread_create' +collect2: error: ld returned 1 exit status +make[1]: *** [CMakeFiles/cmTC_1dce1.dir/build.make:87: cmTC_1dce1] Error 1 +make[1]: Leaving directory '/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp' +make: *** [Makefile:121: cmTC_1dce1/fast] Error 2 + +File /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp/CheckSymbolExists.c: +/* */ +#include + +int main(int argc, char** argv) +{ + (void)argv; +#ifndef pthread_create + return ((int*)(&pthread_create))[argc]; +#else + (void)argc; + return 0; +#endif +} + +Determining if the function pthread_create exists in the pthreads failed with the following output: +Change Dir: /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp + +Run Build Command:"/usr/bin/make" "cmTC_2446c/fast" +/usr/bin/make -f CMakeFiles/cmTC_2446c.dir/build.make CMakeFiles/cmTC_2446c.dir/build +make[1]: Entering directory '/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp' +Building C object CMakeFiles/cmTC_2446c.dir/CheckFunctionExists.c.o +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -DCHECK_FUNCTION_EXISTS=pthread_create -o CMakeFiles/cmTC_2446c.dir/CheckFunctionExists.c.o -c /usr/share/cmake-3.13/Modules/CheckFunctionExists.c +Linking C executable cmTC_2446c +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_2446c.dir/link.txt --verbose=1 +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -DCHECK_FUNCTION_EXISTS=pthread_create -rdynamic CMakeFiles/cmTC_2446c.dir/CheckFunctionExists.c.o -o cmTC_2446c -lpthreads +/usr/bin/ld: cannot find -lpthreads +collect2: error: ld returned 1 exit status +make[1]: *** [CMakeFiles/cmTC_2446c.dir/build.make:87: cmTC_2446c] Error 1 +make[1]: Leaving directory '/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp' +make: *** [Makefile:121: cmTC_2446c/fast] Error 2 + + diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/CMakeOutput.log b/libcodec2-android/src/codec2/build_linux/CMakeFiles/CMakeOutput.log new file mode 100644 index 0000000..c9c48c7 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/CMakeOutput.log @@ -0,0 +1,314 @@ +The system is: Linux - 4.19.0-6-amd64 - x86_64 +Compiling the C compiler identification source file "CMakeCCompilerId.c" succeeded. +Compiler: /usr/bin/cc +Build flags: +Id flags: + +The output was: +0 + + +Compilation of the C compiler identification source "CMakeCCompilerId.c" produced "a.out" + +The C compiler identification is GNU, found in "/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/3.13.4/CompilerIdC/a.out" + +Determining if the C compiler works passed with the following output: +Change Dir: /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp + +Run Build Command:"/usr/bin/make" "cmTC_1ddae/fast" +/usr/bin/make -f CMakeFiles/cmTC_1ddae.dir/build.make CMakeFiles/cmTC_1ddae.dir/build +make[1]: Entering directory '/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp' +Building C object CMakeFiles/cmTC_1ddae.dir/testCCompiler.c.o +/usr/bin/cc -o CMakeFiles/cmTC_1ddae.dir/testCCompiler.c.o -c /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp/testCCompiler.c +Linking C executable cmTC_1ddae +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_1ddae.dir/link.txt --verbose=1 +/usr/bin/cc -rdynamic CMakeFiles/cmTC_1ddae.dir/testCCompiler.c.o -o cmTC_1ddae +make[1]: Leaving directory '/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp' + + +Detecting C compiler ABI info compiled with the following output: +Change Dir: /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp + +Run Build Command:"/usr/bin/make" "cmTC_832d9/fast" +/usr/bin/make -f CMakeFiles/cmTC_832d9.dir/build.make CMakeFiles/cmTC_832d9.dir/build +make[1]: Entering directory '/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp' +Building C object CMakeFiles/cmTC_832d9.dir/CMakeCCompilerABI.c.o +/usr/bin/cc -o CMakeFiles/cmTC_832d9.dir/CMakeCCompilerABI.c.o -c /usr/share/cmake-3.13/Modules/CMakeCCompilerABI.c +Linking C executable cmTC_832d9 +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_832d9.dir/link.txt --verbose=1 +/usr/bin/cc -v -rdynamic CMakeFiles/cmTC_832d9.dir/CMakeCCompilerABI.c.o -o cmTC_832d9 +Using built-in specs. +COLLECT_GCC=/usr/bin/cc +COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/8/lto-wrapper +OFFLOAD_TARGET_NAMES=nvptx-none +OFFLOAD_TARGET_DEFAULT=1 +Target: x86_64-linux-gnu +Configured with: ../src/configure -v --with-pkgversion='Debian 8.3.0-6' --with-bugurl=file:///usr/share/doc/gcc-8/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++ --prefix=/usr --with-gcc-major-version-only --program-suffix=-8 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu +Thread model: posix +gcc version 8.3.0 (Debian 8.3.0-6) +COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/8/:/usr/lib/gcc/x86_64-linux-gnu/8/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/8/:/usr/lib/gcc/x86_64-linux-gnu/ +LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/8/:/usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/8/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/8/../../../:/lib/:/usr/lib/ +COLLECT_GCC_OPTIONS='-v' '-rdynamic' '-o' 'cmTC_832d9' '-mtune=generic' '-march=x86-64' + /usr/lib/gcc/x86_64-linux-gnu/8/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/8/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/8/lto-wrapper -plugin-opt=-fresolution=/tmp/user/1000/ccEIB3tk.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -o cmTC_832d9 /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/8/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/8 -L/usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/8/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/8/../../.. CMakeFiles/cmTC_832d9.dir/CMakeCCompilerABI.c.o -lgcc --push-state --as-needed -lgcc_s --pop-state -lc -lgcc --push-state --as-needed -lgcc_s --pop-state /usr/lib/gcc/x86_64-linux-gnu/8/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/crtn.o +COLLECT_GCC_OPTIONS='-v' '-rdynamic' '-o' 'cmTC_832d9' '-mtune=generic' '-march=x86-64' +make[1]: Leaving directory '/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp' + + +Parsed C implicit link information from above output: + link line regex: [^( *|.*[/\])(ld|CMAKE_LINK_STARTFILE-NOTFOUND|([^/\]+-)?ld|collect2)[^/\]*( |$)] + ignore line: [Change Dir: /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp] + ignore line: [] + ignore line: [Run Build Command:"/usr/bin/make" "cmTC_832d9/fast"] + ignore line: [/usr/bin/make -f CMakeFiles/cmTC_832d9.dir/build.make CMakeFiles/cmTC_832d9.dir/build] + ignore line: [make[1]: Entering directory '/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp'] + ignore line: [Building C object CMakeFiles/cmTC_832d9.dir/CMakeCCompilerABI.c.o] + ignore line: [/usr/bin/cc -o CMakeFiles/cmTC_832d9.dir/CMakeCCompilerABI.c.o -c /usr/share/cmake-3.13/Modules/CMakeCCompilerABI.c] + ignore line: [Linking C executable cmTC_832d9] + ignore line: [/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_832d9.dir/link.txt --verbose=1] + ignore line: [/usr/bin/cc -v -rdynamic CMakeFiles/cmTC_832d9.dir/CMakeCCompilerABI.c.o -o cmTC_832d9 ] + ignore line: [Using built-in specs.] + ignore line: [COLLECT_GCC=/usr/bin/cc] + ignore line: [COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/8/lto-wrapper] + ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none] + ignore line: [OFFLOAD_TARGET_DEFAULT=1] + ignore line: [Target: x86_64-linux-gnu] + ignore line: [Configured with: ../src/configure -v --with-pkgversion='Debian 8.3.0-6' --with-bugurl=file:///usr/share/doc/gcc-8/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++ --prefix=/usr --with-gcc-major-version-only --program-suffix=-8 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu] + ignore line: [Thread model: posix] + ignore line: [gcc version 8.3.0 (Debian 8.3.0-6) ] + ignore line: [COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/8/:/usr/lib/gcc/x86_64-linux-gnu/8/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/8/:/usr/lib/gcc/x86_64-linux-gnu/] + ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/8/:/usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/8/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/8/../../../:/lib/:/usr/lib/] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-rdynamic' '-o' 'cmTC_832d9' '-mtune=generic' '-march=x86-64'] + link line: [ /usr/lib/gcc/x86_64-linux-gnu/8/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/8/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/8/lto-wrapper -plugin-opt=-fresolution=/tmp/user/1000/ccEIB3tk.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -o cmTC_832d9 /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/8/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/8 -L/usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/8/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/8/../../.. CMakeFiles/cmTC_832d9.dir/CMakeCCompilerABI.c.o -lgcc --push-state --as-needed -lgcc_s --pop-state -lc -lgcc --push-state --as-needed -lgcc_s --pop-state /usr/lib/gcc/x86_64-linux-gnu/8/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/crtn.o] + arg [/usr/lib/gcc/x86_64-linux-gnu/8/collect2] ==> ignore + arg [-plugin] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/8/liblto_plugin.so] ==> ignore + arg [-plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/8/lto-wrapper] ==> ignore + arg [-plugin-opt=-fresolution=/tmp/user/1000/ccEIB3tk.res] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [-plugin-opt=-pass-through=-lc] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [--build-id] ==> ignore + arg [--eh-frame-hdr] ==> ignore + arg [-m] ==> ignore + arg [elf_x86_64] ==> ignore + arg [--hash-style=gnu] ==> ignore + arg [-export-dynamic] ==> ignore + arg [-dynamic-linker] ==> ignore + arg [/lib64/ld-linux-x86-64.so.2] ==> ignore + arg [-pie] ==> ignore + arg [-o] ==> ignore + arg [cmTC_832d9] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/Scrt1.o] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/crti.o] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/8/crtbeginS.o] ==> ignore + arg [-L/usr/lib/gcc/x86_64-linux-gnu/8] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/8] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/8/../../../../lib] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/8/../../../../lib] + arg [-L/lib/x86_64-linux-gnu] ==> dir [/lib/x86_64-linux-gnu] + arg [-L/lib/../lib] ==> dir [/lib/../lib] + arg [-L/usr/lib/x86_64-linux-gnu] ==> dir [/usr/lib/x86_64-linux-gnu] + arg [-L/usr/lib/../lib] ==> dir [/usr/lib/../lib] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/8/../../..] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/8/../../..] + arg [CMakeFiles/cmTC_832d9.dir/CMakeCCompilerABI.c.o] ==> ignore + arg [-lgcc] ==> lib [gcc] + arg [--push-state] ==> ignore + arg [--as-needed] ==> ignore + arg [-lgcc_s] ==> lib [gcc_s] + arg [--pop-state] ==> ignore + arg [-lc] ==> lib [c] + arg [-lgcc] ==> lib [gcc] + arg [--push-state] ==> ignore + arg [--as-needed] ==> ignore + arg [-lgcc_s] ==> lib [gcc_s] + arg [--pop-state] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/8/crtendS.o] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/crtn.o] ==> ignore + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/8] ==> [/usr/lib/gcc/x86_64-linux-gnu/8] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/8/../../../../lib] ==> [/usr/lib] + collapse library dir [/lib/x86_64-linux-gnu] ==> [/lib/x86_64-linux-gnu] + collapse library dir [/lib/../lib] ==> [/lib] + collapse library dir [/usr/lib/x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu] + collapse library dir [/usr/lib/../lib] ==> [/usr/lib] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/8/../../..] ==> [/usr/lib] + implicit libs: [gcc;gcc_s;c;gcc;gcc_s] + implicit dirs: [/usr/lib/gcc/x86_64-linux-gnu/8;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib] + implicit fwks: [] + + + + +Detecting C [-std=c11] compiler features compiled with the following output: +Change Dir: /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp + +Run Build Command:"/usr/bin/make" "cmTC_216c5/fast" +/usr/bin/make -f CMakeFiles/cmTC_216c5.dir/build.make CMakeFiles/cmTC_216c5.dir/build +make[1]: Entering directory '/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp' +Building C object CMakeFiles/cmTC_216c5.dir/feature_tests.c.o +/usr/bin/cc -std=c11 -o CMakeFiles/cmTC_216c5.dir/feature_tests.c.o -c /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/feature_tests.c +Linking C executable cmTC_216c5 +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_216c5.dir/link.txt --verbose=1 +/usr/bin/cc -rdynamic CMakeFiles/cmTC_216c5.dir/feature_tests.c.o -o cmTC_216c5 +make[1]: Leaving directory '/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp' + + + Feature record: C_FEATURE:1c_function_prototypes + Feature record: C_FEATURE:1c_restrict + Feature record: C_FEATURE:1c_static_assert + Feature record: C_FEATURE:1c_variadic_macros + + +Detecting C [-std=c99] compiler features compiled with the following output: +Change Dir: /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp + +Run Build Command:"/usr/bin/make" "cmTC_0d4de/fast" +/usr/bin/make -f CMakeFiles/cmTC_0d4de.dir/build.make CMakeFiles/cmTC_0d4de.dir/build +make[1]: Entering directory '/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp' +Building C object CMakeFiles/cmTC_0d4de.dir/feature_tests.c.o +/usr/bin/cc -std=c99 -o CMakeFiles/cmTC_0d4de.dir/feature_tests.c.o -c /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/feature_tests.c +Linking C executable cmTC_0d4de +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_0d4de.dir/link.txt --verbose=1 +/usr/bin/cc -rdynamic CMakeFiles/cmTC_0d4de.dir/feature_tests.c.o -o cmTC_0d4de +make[1]: Leaving directory '/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp' + + + Feature record: C_FEATURE:1c_function_prototypes + Feature record: C_FEATURE:1c_restrict + Feature record: C_FEATURE:0c_static_assert + Feature record: C_FEATURE:1c_variadic_macros + + +Detecting C [-std=c90] compiler features compiled with the following output: +Change Dir: /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp + +Run Build Command:"/usr/bin/make" "cmTC_124f1/fast" +/usr/bin/make -f CMakeFiles/cmTC_124f1.dir/build.make CMakeFiles/cmTC_124f1.dir/build +make[1]: Entering directory '/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp' +Building C object CMakeFiles/cmTC_124f1.dir/feature_tests.c.o +/usr/bin/cc -std=c90 -o CMakeFiles/cmTC_124f1.dir/feature_tests.c.o -c /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/feature_tests.c +Linking C executable cmTC_124f1 +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_124f1.dir/link.txt --verbose=1 +/usr/bin/cc -rdynamic CMakeFiles/cmTC_124f1.dir/feature_tests.c.o -o cmTC_124f1 +make[1]: Leaving directory '/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp' + + + Feature record: C_FEATURE:1c_function_prototypes + Feature record: C_FEATURE:0c_restrict + Feature record: C_FEATURE:0c_static_assert + Feature record: C_FEATURE:0c_variadic_macros +Performing C SOURCE FILE Test COMPILER_SUPPORTS_GNU11 succeeded with the following output: +Change Dir: /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp + +Run Build Command:"/usr/bin/make" "cmTC_cf9e6/fast" +/usr/bin/make -f CMakeFiles/cmTC_cf9e6.dir/build.make CMakeFiles/cmTC_cf9e6.dir/build +make[1]: Entering directory '/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp' +Building C object CMakeFiles/cmTC_cf9e6.dir/src.c.o +/usr/bin/cc -Wall -Wno-strict-overflow -DCOMPILER_SUPPORTS_GNU11 -std=gnu11 -o CMakeFiles/cmTC_cf9e6.dir/src.c.o -c /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp/src.c +Linking C executable cmTC_cf9e6 +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_cf9e6.dir/link.txt --verbose=1 +/usr/bin/cc -Wall -Wno-strict-overflow -DCOMPILER_SUPPORTS_GNU11 -rdynamic CMakeFiles/cmTC_cf9e6.dir/src.c.o -o cmTC_cf9e6 +make[1]: Leaving directory '/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp' + +Source file was: +int main(void) { return 0; } +Performing C SOURCE FILE Test COMPILER_SUPPORTS_GNU99 succeeded with the following output: +Change Dir: /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp + +Run Build Command:"/usr/bin/make" "cmTC_31e8b/fast" +/usr/bin/make -f CMakeFiles/cmTC_31e8b.dir/build.make CMakeFiles/cmTC_31e8b.dir/build +make[1]: Entering directory '/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp' +Building C object CMakeFiles/cmTC_31e8b.dir/src.c.o +/usr/bin/cc -Wall -Wno-strict-overflow -DCOMPILER_SUPPORTS_GNU99 -std=gnu99 -o CMakeFiles/cmTC_31e8b.dir/src.c.o -c /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp/src.c +Linking C executable cmTC_31e8b +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_31e8b.dir/link.txt --verbose=1 +/usr/bin/cc -Wall -Wno-strict-overflow -DCOMPILER_SUPPORTS_GNU99 -rdynamic CMakeFiles/cmTC_31e8b.dir/src.c.o -o cmTC_31e8b +make[1]: Leaving directory '/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp' + +Source file was: +int main(void) { return 0; } +Determining if files stdlib.h exist passed with the following output: +Change Dir: /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp + +Run Build Command:"/usr/bin/make" "cmTC_03207/fast" +/usr/bin/make -f CMakeFiles/cmTC_03207.dir/build.make CMakeFiles/cmTC_03207.dir/build +make[1]: Entering directory '/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp' +Building C object CMakeFiles/cmTC_03207.dir/HAVE_STDLIB_H.c.o +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -o CMakeFiles/cmTC_03207.dir/HAVE_STDLIB_H.c.o -c /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CheckIncludeFiles/HAVE_STDLIB_H.c +Linking C executable cmTC_03207 +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_03207.dir/link.txt --verbose=1 +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -rdynamic CMakeFiles/cmTC_03207.dir/HAVE_STDLIB_H.c.o -o cmTC_03207 +make[1]: Leaving directory '/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp' + + +Determining if files string.h exist passed with the following output: +Change Dir: /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp + +Run Build Command:"/usr/bin/make" "cmTC_e3f48/fast" +/usr/bin/make -f CMakeFiles/cmTC_e3f48.dir/build.make CMakeFiles/cmTC_e3f48.dir/build +make[1]: Entering directory '/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp' +Building C object CMakeFiles/cmTC_e3f48.dir/HAVE_STRING_H.c.o +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -o CMakeFiles/cmTC_e3f48.dir/HAVE_STRING_H.c.o -c /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CheckIncludeFiles/HAVE_STRING_H.c +Linking C executable cmTC_e3f48 +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_e3f48.dir/link.txt --verbose=1 +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -rdynamic CMakeFiles/cmTC_e3f48.dir/HAVE_STRING_H.c.o -o cmTC_e3f48 +make[1]: Leaving directory '/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp' + + +Determining if the __GNU_LIBRARY__ exist passed with the following output: +Change Dir: /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp + +Run Build Command:"/usr/bin/make" "cmTC_969e3/fast" +/usr/bin/make -f CMakeFiles/cmTC_969e3.dir/build.make CMakeFiles/cmTC_969e3.dir/build +make[1]: Entering directory '/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp' +Building C object CMakeFiles/cmTC_969e3.dir/CheckSymbolExists.c.o +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -o CMakeFiles/cmTC_969e3.dir/CheckSymbolExists.c.o -c /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp/CheckSymbolExists.c +Linking C executable cmTC_969e3 +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_969e3.dir/link.txt --verbose=1 +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -rdynamic CMakeFiles/cmTC_969e3.dir/CheckSymbolExists.c.o -o cmTC_969e3 +make[1]: Leaving directory '/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp' + +File /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp/CheckSymbolExists.c: +/* */ +#include + +int main(int argc, char** argv) +{ + (void)argv; +#ifndef __GNU_LIBRARY__ + return ((int*)(&__GNU_LIBRARY__))[argc]; +#else + (void)argc; + return 0; +#endif +} + +Determining if the include file pthread.h exists passed with the following output: +Change Dir: /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp + +Run Build Command:"/usr/bin/make" "cmTC_0e7c0/fast" +/usr/bin/make -f CMakeFiles/cmTC_0e7c0.dir/build.make CMakeFiles/cmTC_0e7c0.dir/build +make[1]: Entering directory '/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp' +Building C object CMakeFiles/cmTC_0e7c0.dir/CheckIncludeFile.c.o +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -o CMakeFiles/cmTC_0e7c0.dir/CheckIncludeFile.c.o -c /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp/CheckIncludeFile.c +Linking C executable cmTC_0e7c0 +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_0e7c0.dir/link.txt --verbose=1 +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -rdynamic CMakeFiles/cmTC_0e7c0.dir/CheckIncludeFile.c.o -o cmTC_0e7c0 +make[1]: Leaving directory '/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp' + + +Determining if the function pthread_create exists in the pthread passed with the following output: +Change Dir: /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp + +Run Build Command:"/usr/bin/make" "cmTC_b8dfa/fast" +/usr/bin/make -f CMakeFiles/cmTC_b8dfa.dir/build.make CMakeFiles/cmTC_b8dfa.dir/build +make[1]: Entering directory '/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp' +Building C object CMakeFiles/cmTC_b8dfa.dir/CheckFunctionExists.c.o +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -DCHECK_FUNCTION_EXISTS=pthread_create -o CMakeFiles/cmTC_b8dfa.dir/CheckFunctionExists.c.o -c /usr/share/cmake-3.13/Modules/CheckFunctionExists.c +Linking C executable cmTC_b8dfa +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_b8dfa.dir/link.txt --verbose=1 +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -DCHECK_FUNCTION_EXISTS=pthread_create -rdynamic CMakeFiles/cmTC_b8dfa.dir/CheckFunctionExists.c.o -o cmTC_b8dfa -lpthread +make[1]: Leaving directory '/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/CMakeTmp' + + diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/CMakeRuleHashes.txt b/libcodec2-android/src/codec2/build_linux/CMakeFiles/CMakeRuleHashes.txt new file mode 100644 index 0000000..a0de598 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/CMakeRuleHashes.txt @@ -0,0 +1,39 @@ +# Hashes of file build rules. +7c7dfb587d456c225070aad6d4774a2c CMakeFiles/Continuous +11844d0b58c459d3f36a2c0f0f13e8f1 CMakeFiles/ContinuousBuild +d96d2a7ab144609a2be5ebf2cf7024be CMakeFiles/ContinuousConfigure +19c67e8cd461a1340c70de888ae017c1 CMakeFiles/ContinuousCoverage +d3be82eee8132bc4a8f669f976bbc8e8 CMakeFiles/ContinuousMemCheck +87b0fbd676b729b1fc58faab74263a5f CMakeFiles/ContinuousStart +468b5267626cb347270dc32893c9c3c2 CMakeFiles/ContinuousSubmit +7d2cdc4cb0df64f4547cf13dbebee0fa CMakeFiles/ContinuousTest +85ced87e901d8daf28c29e175e60ea99 CMakeFiles/ContinuousUpdate +df392eb54c865301c8527f36d05e8b2d CMakeFiles/Experimental +27d3850f918a9816dcadc90e37cf8578 CMakeFiles/ExperimentalBuild +8f29e8a48947c80cb2f52c89bbefcfe6 CMakeFiles/ExperimentalConfigure +ddc7ce17306c478b2bfcd561445b2f9c CMakeFiles/ExperimentalCoverage +9d8c1adf4182e1b4771f98b1a479c2e4 CMakeFiles/ExperimentalMemCheck +2da7cdc534668bda44615c833e984bef CMakeFiles/ExperimentalStart +a0d015a3c5a29611e444b20e80f0efac CMakeFiles/ExperimentalSubmit +e2c873dd97394d864ce1ba319f2c44c7 CMakeFiles/ExperimentalTest +b886d29641efe9c6142554137416ec7b CMakeFiles/ExperimentalUpdate +ddda079ac1c2f2be072446a1fc540266 CMakeFiles/Nightly +f2990e4c67de97767cf93674db260653 CMakeFiles/NightlyBuild +1a0ca39e1bc7e6b5148f64c27ef69bd3 CMakeFiles/NightlyConfigure +b8870f620396ddfc0156c323b565d674 CMakeFiles/NightlyCoverage +996808e72c1af0cbb1937df7d569a06c CMakeFiles/NightlyMemCheck +119279ccd8eb9897dfe18e1afa790680 CMakeFiles/NightlyMemoryCheck +69dfdabc976a6c05e592c8ced7bb3439 CMakeFiles/NightlyStart +ac576456475853dae621396fc2c8b955 CMakeFiles/NightlySubmit +a1135a96c4573d829189818b6cdc260d CMakeFiles/NightlyTest +63ca02bc64f3f3b9932311ef45ff98e8 CMakeFiles/NightlyUpdate +a8f1a91997b82f40a588ba7ebf5bbdc6 src/codebook.c +8da91890bd96ec6db12ae69342986ae9 src/codebookd.c +b109cbebb4fa303397d7935cdb38a76e src/codebookge.c +d6392c6d9a85b253f662b07783eb6927 src/codebookjvm.c +91095f198e2009a3e3b9045858112473 src/codebooklspmelvq.c +d3da0d232ce8f81825bf8c397af60579 src/codebookmel.c +c027462884f527c0b94b9887503195c5 src/codebooknewamp1.c +525689982bbf5718618586b912c561ef src/codebooknewamp1_energy.c +59ecb79a2132f3a3e085942ab74dc994 src/codebooknewamp2.c +8af163fc838995589c524aab35db69d1 src/codebooknewamp2_energy.c diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/CheckIncludeFiles/HAVE_STDLIB_H.c b/libcodec2-android/src/codec2/build_linux/CMakeFiles/CheckIncludeFiles/HAVE_STDLIB_H.c new file mode 100644 index 0000000..d3bfc13 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/CheckIncludeFiles/HAVE_STDLIB_H.c @@ -0,0 +1,6 @@ +/* */ +#include + + +int main(void){return 0;} + diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/CheckIncludeFiles/HAVE_STRING_H.c b/libcodec2-android/src/codec2/build_linux/CMakeFiles/CheckIncludeFiles/HAVE_STRING_H.c new file mode 100644 index 0000000..13fa947 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/CheckIncludeFiles/HAVE_STRING_H.c @@ -0,0 +1,6 @@ +/* */ +#include + + +int main(void){return 0;} + diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/Continuous.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/CMakeFiles/Continuous.dir/DependInfo.cmake new file mode 100644 index 0000000..19fab21 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/Continuous.dir/DependInfo.cmake @@ -0,0 +1,11 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + ) +# The set of files for implicit dependencies of each language: + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/Continuous.dir/build.make b/libcodec2-android/src/codec2/build_linux/CMakeFiles/Continuous.dir/build.make new file mode 100644 index 0000000..6dfe4a1 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/Continuous.dir/build.make @@ -0,0 +1,76 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Utility rule file for Continuous. + +# Include the progress variables for this target. +include CMakeFiles/Continuous.dir/progress.make + +CMakeFiles/Continuous: + /usr/bin/ctest -D Continuous + +Continuous: CMakeFiles/Continuous +Continuous: CMakeFiles/Continuous.dir/build.make + +.PHONY : Continuous + +# Rule to build all files generated by this target. +CMakeFiles/Continuous.dir/build: Continuous + +.PHONY : CMakeFiles/Continuous.dir/build + +CMakeFiles/Continuous.dir/clean: + $(CMAKE_COMMAND) -P CMakeFiles/Continuous.dir/cmake_clean.cmake +.PHONY : CMakeFiles/Continuous.dir/clean + +CMakeFiles/Continuous.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/Continuous.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : CMakeFiles/Continuous.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/Continuous.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/CMakeFiles/Continuous.dir/cmake_clean.cmake new file mode 100644 index 0000000..7e1791c --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/Continuous.dir/cmake_clean.cmake @@ -0,0 +1,8 @@ +file(REMOVE_RECURSE + "CMakeFiles/Continuous" +) + +# Per-language clean rules from dependency scanning. +foreach(lang ) + include(CMakeFiles/Continuous.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/Continuous.dir/progress.make b/libcodec2-android/src/codec2/build_linux/CMakeFiles/Continuous.dir/progress.make new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/Continuous.dir/progress.make @@ -0,0 +1 @@ + diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousBuild.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousBuild.dir/DependInfo.cmake new file mode 100644 index 0000000..19fab21 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousBuild.dir/DependInfo.cmake @@ -0,0 +1,11 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + ) +# The set of files for implicit dependencies of each language: + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousBuild.dir/build.make b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousBuild.dir/build.make new file mode 100644 index 0000000..dad18be --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousBuild.dir/build.make @@ -0,0 +1,76 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Utility rule file for ContinuousBuild. + +# Include the progress variables for this target. +include CMakeFiles/ContinuousBuild.dir/progress.make + +CMakeFiles/ContinuousBuild: + /usr/bin/ctest -D ContinuousBuild + +ContinuousBuild: CMakeFiles/ContinuousBuild +ContinuousBuild: CMakeFiles/ContinuousBuild.dir/build.make + +.PHONY : ContinuousBuild + +# Rule to build all files generated by this target. +CMakeFiles/ContinuousBuild.dir/build: ContinuousBuild + +.PHONY : CMakeFiles/ContinuousBuild.dir/build + +CMakeFiles/ContinuousBuild.dir/clean: + $(CMAKE_COMMAND) -P CMakeFiles/ContinuousBuild.dir/cmake_clean.cmake +.PHONY : CMakeFiles/ContinuousBuild.dir/clean + +CMakeFiles/ContinuousBuild.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/ContinuousBuild.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : CMakeFiles/ContinuousBuild.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousBuild.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousBuild.dir/cmake_clean.cmake new file mode 100644 index 0000000..afccd13 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousBuild.dir/cmake_clean.cmake @@ -0,0 +1,8 @@ +file(REMOVE_RECURSE + "CMakeFiles/ContinuousBuild" +) + +# Per-language clean rules from dependency scanning. +foreach(lang ) + include(CMakeFiles/ContinuousBuild.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousBuild.dir/progress.make b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousBuild.dir/progress.make new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousBuild.dir/progress.make @@ -0,0 +1 @@ + diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousConfigure.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousConfigure.dir/DependInfo.cmake new file mode 100644 index 0000000..19fab21 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousConfigure.dir/DependInfo.cmake @@ -0,0 +1,11 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + ) +# The set of files for implicit dependencies of each language: + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousConfigure.dir/build.make b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousConfigure.dir/build.make new file mode 100644 index 0000000..c09c8b9 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousConfigure.dir/build.make @@ -0,0 +1,76 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Utility rule file for ContinuousConfigure. + +# Include the progress variables for this target. +include CMakeFiles/ContinuousConfigure.dir/progress.make + +CMakeFiles/ContinuousConfigure: + /usr/bin/ctest -D ContinuousConfigure + +ContinuousConfigure: CMakeFiles/ContinuousConfigure +ContinuousConfigure: CMakeFiles/ContinuousConfigure.dir/build.make + +.PHONY : ContinuousConfigure + +# Rule to build all files generated by this target. +CMakeFiles/ContinuousConfigure.dir/build: ContinuousConfigure + +.PHONY : CMakeFiles/ContinuousConfigure.dir/build + +CMakeFiles/ContinuousConfigure.dir/clean: + $(CMAKE_COMMAND) -P CMakeFiles/ContinuousConfigure.dir/cmake_clean.cmake +.PHONY : CMakeFiles/ContinuousConfigure.dir/clean + +CMakeFiles/ContinuousConfigure.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/ContinuousConfigure.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : CMakeFiles/ContinuousConfigure.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousConfigure.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousConfigure.dir/cmake_clean.cmake new file mode 100644 index 0000000..eb51e20 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousConfigure.dir/cmake_clean.cmake @@ -0,0 +1,8 @@ +file(REMOVE_RECURSE + "CMakeFiles/ContinuousConfigure" +) + +# Per-language clean rules from dependency scanning. +foreach(lang ) + include(CMakeFiles/ContinuousConfigure.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousConfigure.dir/progress.make b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousConfigure.dir/progress.make new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousConfigure.dir/progress.make @@ -0,0 +1 @@ + diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousCoverage.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousCoverage.dir/DependInfo.cmake new file mode 100644 index 0000000..19fab21 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousCoverage.dir/DependInfo.cmake @@ -0,0 +1,11 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + ) +# The set of files for implicit dependencies of each language: + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousCoverage.dir/build.make b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousCoverage.dir/build.make new file mode 100644 index 0000000..07968e0 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousCoverage.dir/build.make @@ -0,0 +1,76 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Utility rule file for ContinuousCoverage. + +# Include the progress variables for this target. +include CMakeFiles/ContinuousCoverage.dir/progress.make + +CMakeFiles/ContinuousCoverage: + /usr/bin/ctest -D ContinuousCoverage + +ContinuousCoverage: CMakeFiles/ContinuousCoverage +ContinuousCoverage: CMakeFiles/ContinuousCoverage.dir/build.make + +.PHONY : ContinuousCoverage + +# Rule to build all files generated by this target. +CMakeFiles/ContinuousCoverage.dir/build: ContinuousCoverage + +.PHONY : CMakeFiles/ContinuousCoverage.dir/build + +CMakeFiles/ContinuousCoverage.dir/clean: + $(CMAKE_COMMAND) -P CMakeFiles/ContinuousCoverage.dir/cmake_clean.cmake +.PHONY : CMakeFiles/ContinuousCoverage.dir/clean + +CMakeFiles/ContinuousCoverage.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/ContinuousCoverage.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : CMakeFiles/ContinuousCoverage.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousCoverage.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousCoverage.dir/cmake_clean.cmake new file mode 100644 index 0000000..6115f89 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousCoverage.dir/cmake_clean.cmake @@ -0,0 +1,8 @@ +file(REMOVE_RECURSE + "CMakeFiles/ContinuousCoverage" +) + +# Per-language clean rules from dependency scanning. +foreach(lang ) + include(CMakeFiles/ContinuousCoverage.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousCoverage.dir/progress.make b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousCoverage.dir/progress.make new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousCoverage.dir/progress.make @@ -0,0 +1 @@ + diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousMemCheck.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousMemCheck.dir/DependInfo.cmake new file mode 100644 index 0000000..19fab21 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousMemCheck.dir/DependInfo.cmake @@ -0,0 +1,11 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + ) +# The set of files for implicit dependencies of each language: + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousMemCheck.dir/build.make b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousMemCheck.dir/build.make new file mode 100644 index 0000000..ca6de21 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousMemCheck.dir/build.make @@ -0,0 +1,76 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Utility rule file for ContinuousMemCheck. + +# Include the progress variables for this target. +include CMakeFiles/ContinuousMemCheck.dir/progress.make + +CMakeFiles/ContinuousMemCheck: + /usr/bin/ctest -D ContinuousMemCheck + +ContinuousMemCheck: CMakeFiles/ContinuousMemCheck +ContinuousMemCheck: CMakeFiles/ContinuousMemCheck.dir/build.make + +.PHONY : ContinuousMemCheck + +# Rule to build all files generated by this target. +CMakeFiles/ContinuousMemCheck.dir/build: ContinuousMemCheck + +.PHONY : CMakeFiles/ContinuousMemCheck.dir/build + +CMakeFiles/ContinuousMemCheck.dir/clean: + $(CMAKE_COMMAND) -P CMakeFiles/ContinuousMemCheck.dir/cmake_clean.cmake +.PHONY : CMakeFiles/ContinuousMemCheck.dir/clean + +CMakeFiles/ContinuousMemCheck.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/ContinuousMemCheck.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : CMakeFiles/ContinuousMemCheck.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousMemCheck.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousMemCheck.dir/cmake_clean.cmake new file mode 100644 index 0000000..ad69e7f --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousMemCheck.dir/cmake_clean.cmake @@ -0,0 +1,8 @@ +file(REMOVE_RECURSE + "CMakeFiles/ContinuousMemCheck" +) + +# Per-language clean rules from dependency scanning. +foreach(lang ) + include(CMakeFiles/ContinuousMemCheck.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousMemCheck.dir/progress.make b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousMemCheck.dir/progress.make new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousMemCheck.dir/progress.make @@ -0,0 +1 @@ + diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousStart.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousStart.dir/DependInfo.cmake new file mode 100644 index 0000000..19fab21 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousStart.dir/DependInfo.cmake @@ -0,0 +1,11 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + ) +# The set of files for implicit dependencies of each language: + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousStart.dir/build.make b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousStart.dir/build.make new file mode 100644 index 0000000..9d0dc75 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousStart.dir/build.make @@ -0,0 +1,76 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Utility rule file for ContinuousStart. + +# Include the progress variables for this target. +include CMakeFiles/ContinuousStart.dir/progress.make + +CMakeFiles/ContinuousStart: + /usr/bin/ctest -D ContinuousStart + +ContinuousStart: CMakeFiles/ContinuousStart +ContinuousStart: CMakeFiles/ContinuousStart.dir/build.make + +.PHONY : ContinuousStart + +# Rule to build all files generated by this target. +CMakeFiles/ContinuousStart.dir/build: ContinuousStart + +.PHONY : CMakeFiles/ContinuousStart.dir/build + +CMakeFiles/ContinuousStart.dir/clean: + $(CMAKE_COMMAND) -P CMakeFiles/ContinuousStart.dir/cmake_clean.cmake +.PHONY : CMakeFiles/ContinuousStart.dir/clean + +CMakeFiles/ContinuousStart.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/ContinuousStart.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : CMakeFiles/ContinuousStart.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousStart.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousStart.dir/cmake_clean.cmake new file mode 100644 index 0000000..13d5b2b --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousStart.dir/cmake_clean.cmake @@ -0,0 +1,8 @@ +file(REMOVE_RECURSE + "CMakeFiles/ContinuousStart" +) + +# Per-language clean rules from dependency scanning. +foreach(lang ) + include(CMakeFiles/ContinuousStart.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousStart.dir/progress.make b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousStart.dir/progress.make new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousStart.dir/progress.make @@ -0,0 +1 @@ + diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousSubmit.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousSubmit.dir/DependInfo.cmake new file mode 100644 index 0000000..19fab21 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousSubmit.dir/DependInfo.cmake @@ -0,0 +1,11 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + ) +# The set of files for implicit dependencies of each language: + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousSubmit.dir/build.make b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousSubmit.dir/build.make new file mode 100644 index 0000000..d57bb7d --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousSubmit.dir/build.make @@ -0,0 +1,76 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Utility rule file for ContinuousSubmit. + +# Include the progress variables for this target. +include CMakeFiles/ContinuousSubmit.dir/progress.make + +CMakeFiles/ContinuousSubmit: + /usr/bin/ctest -D ContinuousSubmit + +ContinuousSubmit: CMakeFiles/ContinuousSubmit +ContinuousSubmit: CMakeFiles/ContinuousSubmit.dir/build.make + +.PHONY : ContinuousSubmit + +# Rule to build all files generated by this target. +CMakeFiles/ContinuousSubmit.dir/build: ContinuousSubmit + +.PHONY : CMakeFiles/ContinuousSubmit.dir/build + +CMakeFiles/ContinuousSubmit.dir/clean: + $(CMAKE_COMMAND) -P CMakeFiles/ContinuousSubmit.dir/cmake_clean.cmake +.PHONY : CMakeFiles/ContinuousSubmit.dir/clean + +CMakeFiles/ContinuousSubmit.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/ContinuousSubmit.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : CMakeFiles/ContinuousSubmit.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousSubmit.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousSubmit.dir/cmake_clean.cmake new file mode 100644 index 0000000..cc66ba3 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousSubmit.dir/cmake_clean.cmake @@ -0,0 +1,8 @@ +file(REMOVE_RECURSE + "CMakeFiles/ContinuousSubmit" +) + +# Per-language clean rules from dependency scanning. +foreach(lang ) + include(CMakeFiles/ContinuousSubmit.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousSubmit.dir/progress.make b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousSubmit.dir/progress.make new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousSubmit.dir/progress.make @@ -0,0 +1 @@ + diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousTest.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousTest.dir/DependInfo.cmake new file mode 100644 index 0000000..19fab21 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousTest.dir/DependInfo.cmake @@ -0,0 +1,11 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + ) +# The set of files for implicit dependencies of each language: + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousTest.dir/build.make b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousTest.dir/build.make new file mode 100644 index 0000000..ce08780 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousTest.dir/build.make @@ -0,0 +1,76 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Utility rule file for ContinuousTest. + +# Include the progress variables for this target. +include CMakeFiles/ContinuousTest.dir/progress.make + +CMakeFiles/ContinuousTest: + /usr/bin/ctest -D ContinuousTest + +ContinuousTest: CMakeFiles/ContinuousTest +ContinuousTest: CMakeFiles/ContinuousTest.dir/build.make + +.PHONY : ContinuousTest + +# Rule to build all files generated by this target. +CMakeFiles/ContinuousTest.dir/build: ContinuousTest + +.PHONY : CMakeFiles/ContinuousTest.dir/build + +CMakeFiles/ContinuousTest.dir/clean: + $(CMAKE_COMMAND) -P CMakeFiles/ContinuousTest.dir/cmake_clean.cmake +.PHONY : CMakeFiles/ContinuousTest.dir/clean + +CMakeFiles/ContinuousTest.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/ContinuousTest.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : CMakeFiles/ContinuousTest.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousTest.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousTest.dir/cmake_clean.cmake new file mode 100644 index 0000000..ff11d48 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousTest.dir/cmake_clean.cmake @@ -0,0 +1,8 @@ +file(REMOVE_RECURSE + "CMakeFiles/ContinuousTest" +) + +# Per-language clean rules from dependency scanning. +foreach(lang ) + include(CMakeFiles/ContinuousTest.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousTest.dir/progress.make b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousTest.dir/progress.make new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousTest.dir/progress.make @@ -0,0 +1 @@ + diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousUpdate.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousUpdate.dir/DependInfo.cmake new file mode 100644 index 0000000..19fab21 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousUpdate.dir/DependInfo.cmake @@ -0,0 +1,11 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + ) +# The set of files for implicit dependencies of each language: + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousUpdate.dir/build.make b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousUpdate.dir/build.make new file mode 100644 index 0000000..a5f040e --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousUpdate.dir/build.make @@ -0,0 +1,76 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Utility rule file for ContinuousUpdate. + +# Include the progress variables for this target. +include CMakeFiles/ContinuousUpdate.dir/progress.make + +CMakeFiles/ContinuousUpdate: + /usr/bin/ctest -D ContinuousUpdate + +ContinuousUpdate: CMakeFiles/ContinuousUpdate +ContinuousUpdate: CMakeFiles/ContinuousUpdate.dir/build.make + +.PHONY : ContinuousUpdate + +# Rule to build all files generated by this target. +CMakeFiles/ContinuousUpdate.dir/build: ContinuousUpdate + +.PHONY : CMakeFiles/ContinuousUpdate.dir/build + +CMakeFiles/ContinuousUpdate.dir/clean: + $(CMAKE_COMMAND) -P CMakeFiles/ContinuousUpdate.dir/cmake_clean.cmake +.PHONY : CMakeFiles/ContinuousUpdate.dir/clean + +CMakeFiles/ContinuousUpdate.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/ContinuousUpdate.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : CMakeFiles/ContinuousUpdate.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousUpdate.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousUpdate.dir/cmake_clean.cmake new file mode 100644 index 0000000..7a77a24 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousUpdate.dir/cmake_clean.cmake @@ -0,0 +1,8 @@ +file(REMOVE_RECURSE + "CMakeFiles/ContinuousUpdate" +) + +# Per-language clean rules from dependency scanning. +foreach(lang ) + include(CMakeFiles/ContinuousUpdate.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousUpdate.dir/progress.make b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousUpdate.dir/progress.make new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ContinuousUpdate.dir/progress.make @@ -0,0 +1 @@ + diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/Experimental.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/CMakeFiles/Experimental.dir/DependInfo.cmake new file mode 100644 index 0000000..19fab21 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/Experimental.dir/DependInfo.cmake @@ -0,0 +1,11 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + ) +# The set of files for implicit dependencies of each language: + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/Experimental.dir/build.make b/libcodec2-android/src/codec2/build_linux/CMakeFiles/Experimental.dir/build.make new file mode 100644 index 0000000..f7cf8cc --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/Experimental.dir/build.make @@ -0,0 +1,76 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Utility rule file for Experimental. + +# Include the progress variables for this target. +include CMakeFiles/Experimental.dir/progress.make + +CMakeFiles/Experimental: + /usr/bin/ctest -D Experimental + +Experimental: CMakeFiles/Experimental +Experimental: CMakeFiles/Experimental.dir/build.make + +.PHONY : Experimental + +# Rule to build all files generated by this target. +CMakeFiles/Experimental.dir/build: Experimental + +.PHONY : CMakeFiles/Experimental.dir/build + +CMakeFiles/Experimental.dir/clean: + $(CMAKE_COMMAND) -P CMakeFiles/Experimental.dir/cmake_clean.cmake +.PHONY : CMakeFiles/Experimental.dir/clean + +CMakeFiles/Experimental.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/Experimental.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : CMakeFiles/Experimental.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/Experimental.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/CMakeFiles/Experimental.dir/cmake_clean.cmake new file mode 100644 index 0000000..799e708 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/Experimental.dir/cmake_clean.cmake @@ -0,0 +1,8 @@ +file(REMOVE_RECURSE + "CMakeFiles/Experimental" +) + +# Per-language clean rules from dependency scanning. +foreach(lang ) + include(CMakeFiles/Experimental.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/Experimental.dir/progress.make b/libcodec2-android/src/codec2/build_linux/CMakeFiles/Experimental.dir/progress.make new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/Experimental.dir/progress.make @@ -0,0 +1 @@ + diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalBuild.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalBuild.dir/DependInfo.cmake new file mode 100644 index 0000000..19fab21 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalBuild.dir/DependInfo.cmake @@ -0,0 +1,11 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + ) +# The set of files for implicit dependencies of each language: + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalBuild.dir/build.make b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalBuild.dir/build.make new file mode 100644 index 0000000..970764b --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalBuild.dir/build.make @@ -0,0 +1,76 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Utility rule file for ExperimentalBuild. + +# Include the progress variables for this target. +include CMakeFiles/ExperimentalBuild.dir/progress.make + +CMakeFiles/ExperimentalBuild: + /usr/bin/ctest -D ExperimentalBuild + +ExperimentalBuild: CMakeFiles/ExperimentalBuild +ExperimentalBuild: CMakeFiles/ExperimentalBuild.dir/build.make + +.PHONY : ExperimentalBuild + +# Rule to build all files generated by this target. +CMakeFiles/ExperimentalBuild.dir/build: ExperimentalBuild + +.PHONY : CMakeFiles/ExperimentalBuild.dir/build + +CMakeFiles/ExperimentalBuild.dir/clean: + $(CMAKE_COMMAND) -P CMakeFiles/ExperimentalBuild.dir/cmake_clean.cmake +.PHONY : CMakeFiles/ExperimentalBuild.dir/clean + +CMakeFiles/ExperimentalBuild.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/ExperimentalBuild.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : CMakeFiles/ExperimentalBuild.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalBuild.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalBuild.dir/cmake_clean.cmake new file mode 100644 index 0000000..3354e3f --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalBuild.dir/cmake_clean.cmake @@ -0,0 +1,8 @@ +file(REMOVE_RECURSE + "CMakeFiles/ExperimentalBuild" +) + +# Per-language clean rules from dependency scanning. +foreach(lang ) + include(CMakeFiles/ExperimentalBuild.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalBuild.dir/progress.make b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalBuild.dir/progress.make new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalBuild.dir/progress.make @@ -0,0 +1 @@ + diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalConfigure.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalConfigure.dir/DependInfo.cmake new file mode 100644 index 0000000..19fab21 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalConfigure.dir/DependInfo.cmake @@ -0,0 +1,11 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + ) +# The set of files for implicit dependencies of each language: + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalConfigure.dir/build.make b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalConfigure.dir/build.make new file mode 100644 index 0000000..c2f19fb --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalConfigure.dir/build.make @@ -0,0 +1,76 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Utility rule file for ExperimentalConfigure. + +# Include the progress variables for this target. +include CMakeFiles/ExperimentalConfigure.dir/progress.make + +CMakeFiles/ExperimentalConfigure: + /usr/bin/ctest -D ExperimentalConfigure + +ExperimentalConfigure: CMakeFiles/ExperimentalConfigure +ExperimentalConfigure: CMakeFiles/ExperimentalConfigure.dir/build.make + +.PHONY : ExperimentalConfigure + +# Rule to build all files generated by this target. +CMakeFiles/ExperimentalConfigure.dir/build: ExperimentalConfigure + +.PHONY : CMakeFiles/ExperimentalConfigure.dir/build + +CMakeFiles/ExperimentalConfigure.dir/clean: + $(CMAKE_COMMAND) -P CMakeFiles/ExperimentalConfigure.dir/cmake_clean.cmake +.PHONY : CMakeFiles/ExperimentalConfigure.dir/clean + +CMakeFiles/ExperimentalConfigure.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/ExperimentalConfigure.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : CMakeFiles/ExperimentalConfigure.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalConfigure.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalConfigure.dir/cmake_clean.cmake new file mode 100644 index 0000000..69e4a71 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalConfigure.dir/cmake_clean.cmake @@ -0,0 +1,8 @@ +file(REMOVE_RECURSE + "CMakeFiles/ExperimentalConfigure" +) + +# Per-language clean rules from dependency scanning. +foreach(lang ) + include(CMakeFiles/ExperimentalConfigure.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalConfigure.dir/progress.make b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalConfigure.dir/progress.make new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalConfigure.dir/progress.make @@ -0,0 +1 @@ + diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalCoverage.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalCoverage.dir/DependInfo.cmake new file mode 100644 index 0000000..19fab21 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalCoverage.dir/DependInfo.cmake @@ -0,0 +1,11 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + ) +# The set of files for implicit dependencies of each language: + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalCoverage.dir/build.make b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalCoverage.dir/build.make new file mode 100644 index 0000000..972a7c7 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalCoverage.dir/build.make @@ -0,0 +1,76 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Utility rule file for ExperimentalCoverage. + +# Include the progress variables for this target. +include CMakeFiles/ExperimentalCoverage.dir/progress.make + +CMakeFiles/ExperimentalCoverage: + /usr/bin/ctest -D ExperimentalCoverage + +ExperimentalCoverage: CMakeFiles/ExperimentalCoverage +ExperimentalCoverage: CMakeFiles/ExperimentalCoverage.dir/build.make + +.PHONY : ExperimentalCoverage + +# Rule to build all files generated by this target. +CMakeFiles/ExperimentalCoverage.dir/build: ExperimentalCoverage + +.PHONY : CMakeFiles/ExperimentalCoverage.dir/build + +CMakeFiles/ExperimentalCoverage.dir/clean: + $(CMAKE_COMMAND) -P CMakeFiles/ExperimentalCoverage.dir/cmake_clean.cmake +.PHONY : CMakeFiles/ExperimentalCoverage.dir/clean + +CMakeFiles/ExperimentalCoverage.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/ExperimentalCoverage.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : CMakeFiles/ExperimentalCoverage.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalCoverage.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalCoverage.dir/cmake_clean.cmake new file mode 100644 index 0000000..b8d6597 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalCoverage.dir/cmake_clean.cmake @@ -0,0 +1,8 @@ +file(REMOVE_RECURSE + "CMakeFiles/ExperimentalCoverage" +) + +# Per-language clean rules from dependency scanning. +foreach(lang ) + include(CMakeFiles/ExperimentalCoverage.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalCoverage.dir/progress.make b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalCoverage.dir/progress.make new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalCoverage.dir/progress.make @@ -0,0 +1 @@ + diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalMemCheck.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalMemCheck.dir/DependInfo.cmake new file mode 100644 index 0000000..19fab21 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalMemCheck.dir/DependInfo.cmake @@ -0,0 +1,11 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + ) +# The set of files for implicit dependencies of each language: + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalMemCheck.dir/build.make b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalMemCheck.dir/build.make new file mode 100644 index 0000000..6d6ce8b --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalMemCheck.dir/build.make @@ -0,0 +1,76 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Utility rule file for ExperimentalMemCheck. + +# Include the progress variables for this target. +include CMakeFiles/ExperimentalMemCheck.dir/progress.make + +CMakeFiles/ExperimentalMemCheck: + /usr/bin/ctest -D ExperimentalMemCheck + +ExperimentalMemCheck: CMakeFiles/ExperimentalMemCheck +ExperimentalMemCheck: CMakeFiles/ExperimentalMemCheck.dir/build.make + +.PHONY : ExperimentalMemCheck + +# Rule to build all files generated by this target. +CMakeFiles/ExperimentalMemCheck.dir/build: ExperimentalMemCheck + +.PHONY : CMakeFiles/ExperimentalMemCheck.dir/build + +CMakeFiles/ExperimentalMemCheck.dir/clean: + $(CMAKE_COMMAND) -P CMakeFiles/ExperimentalMemCheck.dir/cmake_clean.cmake +.PHONY : CMakeFiles/ExperimentalMemCheck.dir/clean + +CMakeFiles/ExperimentalMemCheck.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/ExperimentalMemCheck.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : CMakeFiles/ExperimentalMemCheck.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalMemCheck.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalMemCheck.dir/cmake_clean.cmake new file mode 100644 index 0000000..ed3f7bc --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalMemCheck.dir/cmake_clean.cmake @@ -0,0 +1,8 @@ +file(REMOVE_RECURSE + "CMakeFiles/ExperimentalMemCheck" +) + +# Per-language clean rules from dependency scanning. +foreach(lang ) + include(CMakeFiles/ExperimentalMemCheck.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalMemCheck.dir/progress.make b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalMemCheck.dir/progress.make new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalMemCheck.dir/progress.make @@ -0,0 +1 @@ + diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalStart.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalStart.dir/DependInfo.cmake new file mode 100644 index 0000000..19fab21 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalStart.dir/DependInfo.cmake @@ -0,0 +1,11 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + ) +# The set of files for implicit dependencies of each language: + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalStart.dir/build.make b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalStart.dir/build.make new file mode 100644 index 0000000..0bcaabb --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalStart.dir/build.make @@ -0,0 +1,76 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Utility rule file for ExperimentalStart. + +# Include the progress variables for this target. +include CMakeFiles/ExperimentalStart.dir/progress.make + +CMakeFiles/ExperimentalStart: + /usr/bin/ctest -D ExperimentalStart + +ExperimentalStart: CMakeFiles/ExperimentalStart +ExperimentalStart: CMakeFiles/ExperimentalStart.dir/build.make + +.PHONY : ExperimentalStart + +# Rule to build all files generated by this target. +CMakeFiles/ExperimentalStart.dir/build: ExperimentalStart + +.PHONY : CMakeFiles/ExperimentalStart.dir/build + +CMakeFiles/ExperimentalStart.dir/clean: + $(CMAKE_COMMAND) -P CMakeFiles/ExperimentalStart.dir/cmake_clean.cmake +.PHONY : CMakeFiles/ExperimentalStart.dir/clean + +CMakeFiles/ExperimentalStart.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/ExperimentalStart.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : CMakeFiles/ExperimentalStart.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalStart.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalStart.dir/cmake_clean.cmake new file mode 100644 index 0000000..4e2736b --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalStart.dir/cmake_clean.cmake @@ -0,0 +1,8 @@ +file(REMOVE_RECURSE + "CMakeFiles/ExperimentalStart" +) + +# Per-language clean rules from dependency scanning. +foreach(lang ) + include(CMakeFiles/ExperimentalStart.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalStart.dir/progress.make b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalStart.dir/progress.make new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalStart.dir/progress.make @@ -0,0 +1 @@ + diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalSubmit.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalSubmit.dir/DependInfo.cmake new file mode 100644 index 0000000..19fab21 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalSubmit.dir/DependInfo.cmake @@ -0,0 +1,11 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + ) +# The set of files for implicit dependencies of each language: + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalSubmit.dir/build.make b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalSubmit.dir/build.make new file mode 100644 index 0000000..5685535 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalSubmit.dir/build.make @@ -0,0 +1,76 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Utility rule file for ExperimentalSubmit. + +# Include the progress variables for this target. +include CMakeFiles/ExperimentalSubmit.dir/progress.make + +CMakeFiles/ExperimentalSubmit: + /usr/bin/ctest -D ExperimentalSubmit + +ExperimentalSubmit: CMakeFiles/ExperimentalSubmit +ExperimentalSubmit: CMakeFiles/ExperimentalSubmit.dir/build.make + +.PHONY : ExperimentalSubmit + +# Rule to build all files generated by this target. +CMakeFiles/ExperimentalSubmit.dir/build: ExperimentalSubmit + +.PHONY : CMakeFiles/ExperimentalSubmit.dir/build + +CMakeFiles/ExperimentalSubmit.dir/clean: + $(CMAKE_COMMAND) -P CMakeFiles/ExperimentalSubmit.dir/cmake_clean.cmake +.PHONY : CMakeFiles/ExperimentalSubmit.dir/clean + +CMakeFiles/ExperimentalSubmit.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/ExperimentalSubmit.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : CMakeFiles/ExperimentalSubmit.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalSubmit.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalSubmit.dir/cmake_clean.cmake new file mode 100644 index 0000000..d130e45 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalSubmit.dir/cmake_clean.cmake @@ -0,0 +1,8 @@ +file(REMOVE_RECURSE + "CMakeFiles/ExperimentalSubmit" +) + +# Per-language clean rules from dependency scanning. +foreach(lang ) + include(CMakeFiles/ExperimentalSubmit.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalSubmit.dir/progress.make b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalSubmit.dir/progress.make new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalSubmit.dir/progress.make @@ -0,0 +1 @@ + diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalTest.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalTest.dir/DependInfo.cmake new file mode 100644 index 0000000..19fab21 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalTest.dir/DependInfo.cmake @@ -0,0 +1,11 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + ) +# The set of files for implicit dependencies of each language: + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalTest.dir/build.make b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalTest.dir/build.make new file mode 100644 index 0000000..101aa4a --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalTest.dir/build.make @@ -0,0 +1,76 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Utility rule file for ExperimentalTest. + +# Include the progress variables for this target. +include CMakeFiles/ExperimentalTest.dir/progress.make + +CMakeFiles/ExperimentalTest: + /usr/bin/ctest -D ExperimentalTest + +ExperimentalTest: CMakeFiles/ExperimentalTest +ExperimentalTest: CMakeFiles/ExperimentalTest.dir/build.make + +.PHONY : ExperimentalTest + +# Rule to build all files generated by this target. +CMakeFiles/ExperimentalTest.dir/build: ExperimentalTest + +.PHONY : CMakeFiles/ExperimentalTest.dir/build + +CMakeFiles/ExperimentalTest.dir/clean: + $(CMAKE_COMMAND) -P CMakeFiles/ExperimentalTest.dir/cmake_clean.cmake +.PHONY : CMakeFiles/ExperimentalTest.dir/clean + +CMakeFiles/ExperimentalTest.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/ExperimentalTest.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : CMakeFiles/ExperimentalTest.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalTest.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalTest.dir/cmake_clean.cmake new file mode 100644 index 0000000..4348aa3 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalTest.dir/cmake_clean.cmake @@ -0,0 +1,8 @@ +file(REMOVE_RECURSE + "CMakeFiles/ExperimentalTest" +) + +# Per-language clean rules from dependency scanning. +foreach(lang ) + include(CMakeFiles/ExperimentalTest.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalTest.dir/progress.make b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalTest.dir/progress.make new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalTest.dir/progress.make @@ -0,0 +1 @@ + diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalUpdate.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalUpdate.dir/DependInfo.cmake new file mode 100644 index 0000000..19fab21 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalUpdate.dir/DependInfo.cmake @@ -0,0 +1,11 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + ) +# The set of files for implicit dependencies of each language: + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalUpdate.dir/build.make b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalUpdate.dir/build.make new file mode 100644 index 0000000..7151f4c --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalUpdate.dir/build.make @@ -0,0 +1,76 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Utility rule file for ExperimentalUpdate. + +# Include the progress variables for this target. +include CMakeFiles/ExperimentalUpdate.dir/progress.make + +CMakeFiles/ExperimentalUpdate: + /usr/bin/ctest -D ExperimentalUpdate + +ExperimentalUpdate: CMakeFiles/ExperimentalUpdate +ExperimentalUpdate: CMakeFiles/ExperimentalUpdate.dir/build.make + +.PHONY : ExperimentalUpdate + +# Rule to build all files generated by this target. +CMakeFiles/ExperimentalUpdate.dir/build: ExperimentalUpdate + +.PHONY : CMakeFiles/ExperimentalUpdate.dir/build + +CMakeFiles/ExperimentalUpdate.dir/clean: + $(CMAKE_COMMAND) -P CMakeFiles/ExperimentalUpdate.dir/cmake_clean.cmake +.PHONY : CMakeFiles/ExperimentalUpdate.dir/clean + +CMakeFiles/ExperimentalUpdate.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/ExperimentalUpdate.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : CMakeFiles/ExperimentalUpdate.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalUpdate.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalUpdate.dir/cmake_clean.cmake new file mode 100644 index 0000000..2319049 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalUpdate.dir/cmake_clean.cmake @@ -0,0 +1,8 @@ +file(REMOVE_RECURSE + "CMakeFiles/ExperimentalUpdate" +) + +# Per-language clean rules from dependency scanning. +foreach(lang ) + include(CMakeFiles/ExperimentalUpdate.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalUpdate.dir/progress.make b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalUpdate.dir/progress.make new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/ExperimentalUpdate.dir/progress.make @@ -0,0 +1 @@ + diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/Makefile.cmake b/libcodec2-android/src/codec2/build_linux/CMakeFiles/Makefile.cmake new file mode 100644 index 0000000..c0d1e8b --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/Makefile.cmake @@ -0,0 +1,188 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# The generator used is: +set(CMAKE_DEPENDS_GENERATOR "Unix Makefiles") + +# The top level Makefile was generated from the following files: +set(CMAKE_MAKEFILE_DEPENDS + "CMakeCache.txt" + "../CMakeLists.txt" + "CMakeFiles/3.13.4/CMakeCCompiler.cmake" + "CMakeFiles/3.13.4/CMakeSystem.cmake" + "../cmake/config.h.in" + "../cmake/version.h.in" + "../codec2.pc.in" + "../misc/CMakeLists.txt" + "../src/CMakeLists.txt" + "../unittest/CMakeLists.txt" + "../unittest/est_n0.sh.in" + "../unittest/ofdm_fade.sh.in" + "../unittest/test_700c_eq.sh.in" + "/usr/share/cmake-3.13/Modules/CMakeCInformation.cmake" + "/usr/share/cmake-3.13/Modules/CMakeCheckCompilerFlagCommonPatterns.cmake" + "/usr/share/cmake-3.13/Modules/CMakeCommonLanguageInclude.cmake" + "/usr/share/cmake-3.13/Modules/CMakeGenericSystem.cmake" + "/usr/share/cmake-3.13/Modules/CMakeInitializeConfigs.cmake" + "/usr/share/cmake-3.13/Modules/CMakeLanguageInformation.cmake" + "/usr/share/cmake-3.13/Modules/CMakeSystemSpecificInformation.cmake" + "/usr/share/cmake-3.13/Modules/CMakeSystemSpecificInitialize.cmake" + "/usr/share/cmake-3.13/Modules/CTest.cmake" + "/usr/share/cmake-3.13/Modules/CTestTargets.cmake" + "/usr/share/cmake-3.13/Modules/CTestUseLaunchers.cmake" + "/usr/share/cmake-3.13/Modules/CheckCCompilerFlag.cmake" + "/usr/share/cmake-3.13/Modules/CheckCSourceCompiles.cmake" + "/usr/share/cmake-3.13/Modules/CheckIncludeFile.cmake" + "/usr/share/cmake-3.13/Modules/CheckIncludeFiles.cmake" + "/usr/share/cmake-3.13/Modules/CheckLibraryExists.cmake" + "/usr/share/cmake-3.13/Modules/CheckSymbolExists.cmake" + "/usr/share/cmake-3.13/Modules/Compiler/CMakeCommonCompilerMacros.cmake" + "/usr/share/cmake-3.13/Modules/Compiler/GNU-C.cmake" + "/usr/share/cmake-3.13/Modules/Compiler/GNU.cmake" + "/usr/share/cmake-3.13/Modules/DartConfiguration.tcl.in" + "/usr/share/cmake-3.13/Modules/FindGit.cmake" + "/usr/share/cmake-3.13/Modules/FindPackageHandleStandardArgs.cmake" + "/usr/share/cmake-3.13/Modules/FindPackageMessage.cmake" + "/usr/share/cmake-3.13/Modules/FindThreads.cmake" + "/usr/share/cmake-3.13/Modules/GNUInstallDirs.cmake" + "/usr/share/cmake-3.13/Modules/Platform/Linux-GNU-C.cmake" + "/usr/share/cmake-3.13/Modules/Platform/Linux-GNU.cmake" + "/usr/share/cmake-3.13/Modules/Platform/Linux.cmake" + "/usr/share/cmake-3.13/Modules/Platform/UnixPaths.cmake" + ) + +# The corresponding makefile is: +set(CMAKE_MAKEFILE_OUTPUTS + "Makefile" + "CMakeFiles/cmake.check_cache" + ) + +# Byproducts of CMake generate step: +set(CMAKE_MAKEFILE_PRODUCTS + "config.h" + "codec2/version.h" + "codec2.pc" + "DartConfiguration.tcl" + "unittest/ofdm_fade.sh" + "unittest/est_n0.sh" + "unittest/test_700c_eq.sh" + "CMakeFiles/CMakeDirectoryInformation.cmake" + "src/CMakeFiles/CMakeDirectoryInformation.cmake" + "unittest/CMakeFiles/CMakeDirectoryInformation.cmake" + "misc/CMakeFiles/CMakeDirectoryInformation.cmake" + ) + +# Dependency information for all targets: +set(CMAKE_DEPEND_INFO_FILES + "CMakeFiles/ContinuousSubmit.dir/DependInfo.cmake" + "CMakeFiles/ContinuousMemCheck.dir/DependInfo.cmake" + "CMakeFiles/ContinuousConfigure.dir/DependInfo.cmake" + "CMakeFiles/ExperimentalSubmit.dir/DependInfo.cmake" + "CMakeFiles/ExperimentalMemCheck.dir/DependInfo.cmake" + "CMakeFiles/ExperimentalTest.dir/DependInfo.cmake" + "CMakeFiles/NightlyUpdate.dir/DependInfo.cmake" + "CMakeFiles/NightlyStart.dir/DependInfo.cmake" + "CMakeFiles/NightlyMemoryCheck.dir/DependInfo.cmake" + "CMakeFiles/NightlyBuild.dir/DependInfo.cmake" + "CMakeFiles/ExperimentalUpdate.dir/DependInfo.cmake" + "CMakeFiles/ContinuousBuild.dir/DependInfo.cmake" + "CMakeFiles/Continuous.dir/DependInfo.cmake" + "CMakeFiles/Experimental.dir/DependInfo.cmake" + "CMakeFiles/ExperimentalConfigure.dir/DependInfo.cmake" + "CMakeFiles/NightlyTest.dir/DependInfo.cmake" + "CMakeFiles/NightlyCoverage.dir/DependInfo.cmake" + "CMakeFiles/ExperimentalCoverage.dir/DependInfo.cmake" + "CMakeFiles/NightlyMemCheck.dir/DependInfo.cmake" + "CMakeFiles/ContinuousStart.dir/DependInfo.cmake" + "CMakeFiles/NightlySubmit.dir/DependInfo.cmake" + "CMakeFiles/ContinuousCoverage.dir/DependInfo.cmake" + "CMakeFiles/Nightly.dir/DependInfo.cmake" + "CMakeFiles/NightlyConfigure.dir/DependInfo.cmake" + "CMakeFiles/ExperimentalStart.dir/DependInfo.cmake" + "CMakeFiles/ContinuousTest.dir/DependInfo.cmake" + "CMakeFiles/ContinuousUpdate.dir/DependInfo.cmake" + "CMakeFiles/ExperimentalBuild.dir/DependInfo.cmake" + "src/CMakeFiles/ldpc_dec.dir/DependInfo.cmake" + "src/CMakeFiles/ldpc_enc.dir/DependInfo.cmake" + "src/CMakeFiles/ldpc_noise.dir/DependInfo.cmake" + "src/CMakeFiles/tollr.dir/DependInfo.cmake" + "src/CMakeFiles/cohpsk_ch.dir/DependInfo.cmake" + "src/CMakeFiles/cohpsk_put_test_bits.dir/DependInfo.cmake" + "src/CMakeFiles/cohpsk_get_test_bits.dir/DependInfo.cmake" + "src/CMakeFiles/cohpsk_demod.dir/DependInfo.cmake" + "src/CMakeFiles/vhf_frame_c2.dir/DependInfo.cmake" + "src/CMakeFiles/freedv_data_raw_rx.dir/DependInfo.cmake" + "src/CMakeFiles/insert_errors.dir/DependInfo.cmake" + "src/CMakeFiles/fm_demod.dir/DependInfo.cmake" + "src/CMakeFiles/fdmdv_channel.dir/DependInfo.cmake" + "src/CMakeFiles/freedv_data_raw_tx.dir/DependInfo.cmake" + "src/CMakeFiles/cohpsk_mod.dir/DependInfo.cmake" + "src/CMakeFiles/c2dec.dir/DependInfo.cmake" + "src/CMakeFiles/freedv_rx.dir/DependInfo.cmake" + "src/CMakeFiles/fdmdv_get_test_bits.dir/DependInfo.cmake" + "src/CMakeFiles/c2demo.dir/DependInfo.cmake" + "src/CMakeFiles/fdmdv_put_test_bits.dir/DependInfo.cmake" + "src/CMakeFiles/codec2.dir/DependInfo.cmake" + "src/CMakeFiles/ofdm_get_test_bits.dir/DependInfo.cmake" + "src/CMakeFiles/freedv_tx.dir/DependInfo.cmake" + "src/CMakeFiles/c2enc.dir/DependInfo.cmake" + "src/CMakeFiles/generate_codebook.dir/DependInfo.cmake" + "src/CMakeFiles/freedv_mixed_tx.dir/DependInfo.cmake" + "src/CMakeFiles/c2sim.dir/DependInfo.cmake" + "src/CMakeFiles/fdmdv_demod.dir/DependInfo.cmake" + "src/CMakeFiles/vhf_deframe_c2.dir/DependInfo.cmake" + "src/CMakeFiles/fsk_mod.dir/DependInfo.cmake" + "src/CMakeFiles/fsk_put_test_bits.dir/DependInfo.cmake" + "src/CMakeFiles/freedv_data_tx.dir/DependInfo.cmake" + "src/CMakeFiles/freedv_data_rx.dir/DependInfo.cmake" + "src/CMakeFiles/freedv_mixed_rx.dir/DependInfo.cmake" + "src/CMakeFiles/fmfsk_demod.dir/DependInfo.cmake" + "src/CMakeFiles/fsk_mod_ext_vco.dir/DependInfo.cmake" + "src/CMakeFiles/fsk_demod.dir/DependInfo.cmake" + "src/CMakeFiles/fsk_get_test_bits.dir/DependInfo.cmake" + "src/CMakeFiles/framer.dir/DependInfo.cmake" + "src/CMakeFiles/deframer.dir/DependInfo.cmake" + "src/CMakeFiles/ofdm_mod.dir/DependInfo.cmake" + "src/CMakeFiles/fdmdv_mod.dir/DependInfo.cmake" + "src/CMakeFiles/ofdm_demod.dir/DependInfo.cmake" + "src/CMakeFiles/ofdm_put_test_bits.dir/DependInfo.cmake" + "src/CMakeFiles/fmfsk_mod.dir/DependInfo.cmake" + "unittest/CMakeFiles/tqam16.dir/DependInfo.cmake" + "unittest/CMakeFiles/tfsk_llr.dir/DependInfo.cmake" + "unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/DependInfo.cmake" + "unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/DependInfo.cmake" + "unittest/CMakeFiles/thash.dir/DependInfo.cmake" + "unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/DependInfo.cmake" + "unittest/CMakeFiles/tfreedv_data_channel.dir/DependInfo.cmake" + "unittest/CMakeFiles/tofdm.dir/DependInfo.cmake" + "unittest/CMakeFiles/tvq_mbest.dir/DependInfo.cmake" + "unittest/CMakeFiles/tdeframer.dir/DependInfo.cmake" + "unittest/CMakeFiles/ofdm_stack.dir/DependInfo.cmake" + "unittest/CMakeFiles/tfsk.dir/DependInfo.cmake" + "unittest/CMakeFiles/fdmdv_mem.dir/DependInfo.cmake" + "unittest/CMakeFiles/tfdmdv.dir/DependInfo.cmake" + "unittest/CMakeFiles/tcohpsk.dir/DependInfo.cmake" + "unittest/CMakeFiles/tfifo.dir/DependInfo.cmake" + "unittest/CMakeFiles/ofdm_mem.dir/DependInfo.cmake" + "unittest/CMakeFiles/tfmfsk.dir/DependInfo.cmake" + "unittest/CMakeFiles/function_trace.dir/DependInfo.cmake" + "unittest/CMakeFiles/tnewamp1.dir/DependInfo.cmake" + "unittest/CMakeFiles/compare_ints.dir/DependInfo.cmake" + "unittest/CMakeFiles/tst_codec2_fft_init.dir/DependInfo.cmake" + "unittest/CMakeFiles/compare_floats.dir/DependInfo.cmake" + "unittest/CMakeFiles/test_phi0.dir/DependInfo.cmake" + "misc/CMakeFiles/extract.dir/DependInfo.cmake" + "misc/CMakeFiles/tdec.dir/DependInfo.cmake" + "misc/CMakeFiles/16_8_short.dir/DependInfo.cmake" + "misc/CMakeFiles/t16_8.dir/DependInfo.cmake" + "misc/CMakeFiles/t16_8_short.dir/DependInfo.cmake" + "misc/CMakeFiles/mksine.dir/DependInfo.cmake" + "misc/CMakeFiles/tnlp.dir/DependInfo.cmake" + "misc/CMakeFiles/vqtrain.dir/DependInfo.cmake" + "misc/CMakeFiles/tlininterp.dir/DependInfo.cmake" + "misc/CMakeFiles/pre.dir/DependInfo.cmake" + "misc/CMakeFiles/raw2h.dir/DependInfo.cmake" + "misc/CMakeFiles/timpulse.dir/DependInfo.cmake" + "misc/CMakeFiles/est_n0.dir/DependInfo.cmake" + "misc/CMakeFiles/vq_mbest.dir/DependInfo.cmake" + ) diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/Makefile2 b/libcodec2-android/src/codec2/build_linux/CMakeFiles/Makefile2 new file mode 100644 index 0000000..ff6e30b --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/Makefile2 @@ -0,0 +1,4257 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Default target executed when no arguments are given to make. +default_target: all + +.PHONY : default_target + +# The main recursive all target +all: + +.PHONY : all + +# The main recursive preinstall target +preinstall: + +.PHONY : preinstall + +# The main recursive clean target +clean: + +.PHONY : clean + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +#============================================================================= +# Target rules for target CMakeFiles/ContinuousSubmit.dir + +# All Build rule for target. +CMakeFiles/ContinuousSubmit.dir/all: + $(MAKE) -f CMakeFiles/ContinuousSubmit.dir/build.make CMakeFiles/ContinuousSubmit.dir/depend + $(MAKE) -f CMakeFiles/ContinuousSubmit.dir/build.make CMakeFiles/ContinuousSubmit.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num= "Built target ContinuousSubmit" +.PHONY : CMakeFiles/ContinuousSubmit.dir/all + +# Build rule for subdir invocation for target. +CMakeFiles/ContinuousSubmit.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 + $(MAKE) -f CMakeFiles/Makefile2 CMakeFiles/ContinuousSubmit.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : CMakeFiles/ContinuousSubmit.dir/rule + +# Convenience name for target. +ContinuousSubmit: CMakeFiles/ContinuousSubmit.dir/rule + +.PHONY : ContinuousSubmit + +# clean rule for target. +CMakeFiles/ContinuousSubmit.dir/clean: + $(MAKE) -f CMakeFiles/ContinuousSubmit.dir/build.make CMakeFiles/ContinuousSubmit.dir/clean +.PHONY : CMakeFiles/ContinuousSubmit.dir/clean + +# clean rule for target. +clean: CMakeFiles/ContinuousSubmit.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target CMakeFiles/ContinuousMemCheck.dir + +# All Build rule for target. +CMakeFiles/ContinuousMemCheck.dir/all: + $(MAKE) -f CMakeFiles/ContinuousMemCheck.dir/build.make CMakeFiles/ContinuousMemCheck.dir/depend + $(MAKE) -f CMakeFiles/ContinuousMemCheck.dir/build.make CMakeFiles/ContinuousMemCheck.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num= "Built target ContinuousMemCheck" +.PHONY : CMakeFiles/ContinuousMemCheck.dir/all + +# Build rule for subdir invocation for target. +CMakeFiles/ContinuousMemCheck.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 + $(MAKE) -f CMakeFiles/Makefile2 CMakeFiles/ContinuousMemCheck.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : CMakeFiles/ContinuousMemCheck.dir/rule + +# Convenience name for target. +ContinuousMemCheck: CMakeFiles/ContinuousMemCheck.dir/rule + +.PHONY : ContinuousMemCheck + +# clean rule for target. +CMakeFiles/ContinuousMemCheck.dir/clean: + $(MAKE) -f CMakeFiles/ContinuousMemCheck.dir/build.make CMakeFiles/ContinuousMemCheck.dir/clean +.PHONY : CMakeFiles/ContinuousMemCheck.dir/clean + +# clean rule for target. +clean: CMakeFiles/ContinuousMemCheck.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target CMakeFiles/ContinuousConfigure.dir + +# All Build rule for target. +CMakeFiles/ContinuousConfigure.dir/all: + $(MAKE) -f CMakeFiles/ContinuousConfigure.dir/build.make CMakeFiles/ContinuousConfigure.dir/depend + $(MAKE) -f CMakeFiles/ContinuousConfigure.dir/build.make CMakeFiles/ContinuousConfigure.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num= "Built target ContinuousConfigure" +.PHONY : CMakeFiles/ContinuousConfigure.dir/all + +# Build rule for subdir invocation for target. +CMakeFiles/ContinuousConfigure.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 + $(MAKE) -f CMakeFiles/Makefile2 CMakeFiles/ContinuousConfigure.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : CMakeFiles/ContinuousConfigure.dir/rule + +# Convenience name for target. +ContinuousConfigure: CMakeFiles/ContinuousConfigure.dir/rule + +.PHONY : ContinuousConfigure + +# clean rule for target. +CMakeFiles/ContinuousConfigure.dir/clean: + $(MAKE) -f CMakeFiles/ContinuousConfigure.dir/build.make CMakeFiles/ContinuousConfigure.dir/clean +.PHONY : CMakeFiles/ContinuousConfigure.dir/clean + +# clean rule for target. +clean: CMakeFiles/ContinuousConfigure.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target CMakeFiles/ExperimentalSubmit.dir + +# All Build rule for target. +CMakeFiles/ExperimentalSubmit.dir/all: + $(MAKE) -f CMakeFiles/ExperimentalSubmit.dir/build.make CMakeFiles/ExperimentalSubmit.dir/depend + $(MAKE) -f CMakeFiles/ExperimentalSubmit.dir/build.make CMakeFiles/ExperimentalSubmit.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num= "Built target ExperimentalSubmit" +.PHONY : CMakeFiles/ExperimentalSubmit.dir/all + +# Build rule for subdir invocation for target. +CMakeFiles/ExperimentalSubmit.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 + $(MAKE) -f CMakeFiles/Makefile2 CMakeFiles/ExperimentalSubmit.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : CMakeFiles/ExperimentalSubmit.dir/rule + +# Convenience name for target. +ExperimentalSubmit: CMakeFiles/ExperimentalSubmit.dir/rule + +.PHONY : ExperimentalSubmit + +# clean rule for target. +CMakeFiles/ExperimentalSubmit.dir/clean: + $(MAKE) -f CMakeFiles/ExperimentalSubmit.dir/build.make CMakeFiles/ExperimentalSubmit.dir/clean +.PHONY : CMakeFiles/ExperimentalSubmit.dir/clean + +# clean rule for target. +clean: CMakeFiles/ExperimentalSubmit.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target CMakeFiles/ExperimentalMemCheck.dir + +# All Build rule for target. +CMakeFiles/ExperimentalMemCheck.dir/all: + $(MAKE) -f CMakeFiles/ExperimentalMemCheck.dir/build.make CMakeFiles/ExperimentalMemCheck.dir/depend + $(MAKE) -f CMakeFiles/ExperimentalMemCheck.dir/build.make CMakeFiles/ExperimentalMemCheck.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num= "Built target ExperimentalMemCheck" +.PHONY : CMakeFiles/ExperimentalMemCheck.dir/all + +# Build rule for subdir invocation for target. +CMakeFiles/ExperimentalMemCheck.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 + $(MAKE) -f CMakeFiles/Makefile2 CMakeFiles/ExperimentalMemCheck.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : CMakeFiles/ExperimentalMemCheck.dir/rule + +# Convenience name for target. +ExperimentalMemCheck: CMakeFiles/ExperimentalMemCheck.dir/rule + +.PHONY : ExperimentalMemCheck + +# clean rule for target. +CMakeFiles/ExperimentalMemCheck.dir/clean: + $(MAKE) -f CMakeFiles/ExperimentalMemCheck.dir/build.make CMakeFiles/ExperimentalMemCheck.dir/clean +.PHONY : CMakeFiles/ExperimentalMemCheck.dir/clean + +# clean rule for target. +clean: CMakeFiles/ExperimentalMemCheck.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target CMakeFiles/ExperimentalTest.dir + +# All Build rule for target. +CMakeFiles/ExperimentalTest.dir/all: + $(MAKE) -f CMakeFiles/ExperimentalTest.dir/build.make CMakeFiles/ExperimentalTest.dir/depend + $(MAKE) -f CMakeFiles/ExperimentalTest.dir/build.make CMakeFiles/ExperimentalTest.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num= "Built target ExperimentalTest" +.PHONY : CMakeFiles/ExperimentalTest.dir/all + +# Build rule for subdir invocation for target. +CMakeFiles/ExperimentalTest.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 + $(MAKE) -f CMakeFiles/Makefile2 CMakeFiles/ExperimentalTest.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : CMakeFiles/ExperimentalTest.dir/rule + +# Convenience name for target. +ExperimentalTest: CMakeFiles/ExperimentalTest.dir/rule + +.PHONY : ExperimentalTest + +# clean rule for target. +CMakeFiles/ExperimentalTest.dir/clean: + $(MAKE) -f CMakeFiles/ExperimentalTest.dir/build.make CMakeFiles/ExperimentalTest.dir/clean +.PHONY : CMakeFiles/ExperimentalTest.dir/clean + +# clean rule for target. +clean: CMakeFiles/ExperimentalTest.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target CMakeFiles/NightlyUpdate.dir + +# All Build rule for target. +CMakeFiles/NightlyUpdate.dir/all: + $(MAKE) -f CMakeFiles/NightlyUpdate.dir/build.make CMakeFiles/NightlyUpdate.dir/depend + $(MAKE) -f CMakeFiles/NightlyUpdate.dir/build.make CMakeFiles/NightlyUpdate.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num= "Built target NightlyUpdate" +.PHONY : CMakeFiles/NightlyUpdate.dir/all + +# Build rule for subdir invocation for target. +CMakeFiles/NightlyUpdate.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 + $(MAKE) -f CMakeFiles/Makefile2 CMakeFiles/NightlyUpdate.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : CMakeFiles/NightlyUpdate.dir/rule + +# Convenience name for target. +NightlyUpdate: CMakeFiles/NightlyUpdate.dir/rule + +.PHONY : NightlyUpdate + +# clean rule for target. +CMakeFiles/NightlyUpdate.dir/clean: + $(MAKE) -f CMakeFiles/NightlyUpdate.dir/build.make CMakeFiles/NightlyUpdate.dir/clean +.PHONY : CMakeFiles/NightlyUpdate.dir/clean + +# clean rule for target. +clean: CMakeFiles/NightlyUpdate.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target CMakeFiles/NightlyStart.dir + +# All Build rule for target. +CMakeFiles/NightlyStart.dir/all: + $(MAKE) -f CMakeFiles/NightlyStart.dir/build.make CMakeFiles/NightlyStart.dir/depend + $(MAKE) -f CMakeFiles/NightlyStart.dir/build.make CMakeFiles/NightlyStart.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num= "Built target NightlyStart" +.PHONY : CMakeFiles/NightlyStart.dir/all + +# Build rule for subdir invocation for target. +CMakeFiles/NightlyStart.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 + $(MAKE) -f CMakeFiles/Makefile2 CMakeFiles/NightlyStart.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : CMakeFiles/NightlyStart.dir/rule + +# Convenience name for target. +NightlyStart: CMakeFiles/NightlyStart.dir/rule + +.PHONY : NightlyStart + +# clean rule for target. +CMakeFiles/NightlyStart.dir/clean: + $(MAKE) -f CMakeFiles/NightlyStart.dir/build.make CMakeFiles/NightlyStart.dir/clean +.PHONY : CMakeFiles/NightlyStart.dir/clean + +# clean rule for target. +clean: CMakeFiles/NightlyStart.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target CMakeFiles/NightlyMemoryCheck.dir + +# All Build rule for target. +CMakeFiles/NightlyMemoryCheck.dir/all: + $(MAKE) -f CMakeFiles/NightlyMemoryCheck.dir/build.make CMakeFiles/NightlyMemoryCheck.dir/depend + $(MAKE) -f CMakeFiles/NightlyMemoryCheck.dir/build.make CMakeFiles/NightlyMemoryCheck.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num= "Built target NightlyMemoryCheck" +.PHONY : CMakeFiles/NightlyMemoryCheck.dir/all + +# Build rule for subdir invocation for target. +CMakeFiles/NightlyMemoryCheck.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 + $(MAKE) -f CMakeFiles/Makefile2 CMakeFiles/NightlyMemoryCheck.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : CMakeFiles/NightlyMemoryCheck.dir/rule + +# Convenience name for target. +NightlyMemoryCheck: CMakeFiles/NightlyMemoryCheck.dir/rule + +.PHONY : NightlyMemoryCheck + +# clean rule for target. +CMakeFiles/NightlyMemoryCheck.dir/clean: + $(MAKE) -f CMakeFiles/NightlyMemoryCheck.dir/build.make CMakeFiles/NightlyMemoryCheck.dir/clean +.PHONY : CMakeFiles/NightlyMemoryCheck.dir/clean + +# clean rule for target. +clean: CMakeFiles/NightlyMemoryCheck.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target CMakeFiles/NightlyBuild.dir + +# All Build rule for target. +CMakeFiles/NightlyBuild.dir/all: + $(MAKE) -f CMakeFiles/NightlyBuild.dir/build.make CMakeFiles/NightlyBuild.dir/depend + $(MAKE) -f CMakeFiles/NightlyBuild.dir/build.make CMakeFiles/NightlyBuild.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num= "Built target NightlyBuild" +.PHONY : CMakeFiles/NightlyBuild.dir/all + +# Build rule for subdir invocation for target. +CMakeFiles/NightlyBuild.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 + $(MAKE) -f CMakeFiles/Makefile2 CMakeFiles/NightlyBuild.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : CMakeFiles/NightlyBuild.dir/rule + +# Convenience name for target. +NightlyBuild: CMakeFiles/NightlyBuild.dir/rule + +.PHONY : NightlyBuild + +# clean rule for target. +CMakeFiles/NightlyBuild.dir/clean: + $(MAKE) -f CMakeFiles/NightlyBuild.dir/build.make CMakeFiles/NightlyBuild.dir/clean +.PHONY : CMakeFiles/NightlyBuild.dir/clean + +# clean rule for target. +clean: CMakeFiles/NightlyBuild.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target CMakeFiles/ExperimentalUpdate.dir + +# All Build rule for target. +CMakeFiles/ExperimentalUpdate.dir/all: + $(MAKE) -f CMakeFiles/ExperimentalUpdate.dir/build.make CMakeFiles/ExperimentalUpdate.dir/depend + $(MAKE) -f CMakeFiles/ExperimentalUpdate.dir/build.make CMakeFiles/ExperimentalUpdate.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num= "Built target ExperimentalUpdate" +.PHONY : CMakeFiles/ExperimentalUpdate.dir/all + +# Build rule for subdir invocation for target. +CMakeFiles/ExperimentalUpdate.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 + $(MAKE) -f CMakeFiles/Makefile2 CMakeFiles/ExperimentalUpdate.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : CMakeFiles/ExperimentalUpdate.dir/rule + +# Convenience name for target. +ExperimentalUpdate: CMakeFiles/ExperimentalUpdate.dir/rule + +.PHONY : ExperimentalUpdate + +# clean rule for target. +CMakeFiles/ExperimentalUpdate.dir/clean: + $(MAKE) -f CMakeFiles/ExperimentalUpdate.dir/build.make CMakeFiles/ExperimentalUpdate.dir/clean +.PHONY : CMakeFiles/ExperimentalUpdate.dir/clean + +# clean rule for target. +clean: CMakeFiles/ExperimentalUpdate.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target CMakeFiles/ContinuousBuild.dir + +# All Build rule for target. +CMakeFiles/ContinuousBuild.dir/all: + $(MAKE) -f CMakeFiles/ContinuousBuild.dir/build.make CMakeFiles/ContinuousBuild.dir/depend + $(MAKE) -f CMakeFiles/ContinuousBuild.dir/build.make CMakeFiles/ContinuousBuild.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num= "Built target ContinuousBuild" +.PHONY : CMakeFiles/ContinuousBuild.dir/all + +# Build rule for subdir invocation for target. +CMakeFiles/ContinuousBuild.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 + $(MAKE) -f CMakeFiles/Makefile2 CMakeFiles/ContinuousBuild.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : CMakeFiles/ContinuousBuild.dir/rule + +# Convenience name for target. +ContinuousBuild: CMakeFiles/ContinuousBuild.dir/rule + +.PHONY : ContinuousBuild + +# clean rule for target. +CMakeFiles/ContinuousBuild.dir/clean: + $(MAKE) -f CMakeFiles/ContinuousBuild.dir/build.make CMakeFiles/ContinuousBuild.dir/clean +.PHONY : CMakeFiles/ContinuousBuild.dir/clean + +# clean rule for target. +clean: CMakeFiles/ContinuousBuild.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target CMakeFiles/Continuous.dir + +# All Build rule for target. +CMakeFiles/Continuous.dir/all: + $(MAKE) -f CMakeFiles/Continuous.dir/build.make CMakeFiles/Continuous.dir/depend + $(MAKE) -f CMakeFiles/Continuous.dir/build.make CMakeFiles/Continuous.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num= "Built target Continuous" +.PHONY : CMakeFiles/Continuous.dir/all + +# Build rule for subdir invocation for target. +CMakeFiles/Continuous.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 + $(MAKE) -f CMakeFiles/Makefile2 CMakeFiles/Continuous.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : CMakeFiles/Continuous.dir/rule + +# Convenience name for target. +Continuous: CMakeFiles/Continuous.dir/rule + +.PHONY : Continuous + +# clean rule for target. +CMakeFiles/Continuous.dir/clean: + $(MAKE) -f CMakeFiles/Continuous.dir/build.make CMakeFiles/Continuous.dir/clean +.PHONY : CMakeFiles/Continuous.dir/clean + +# clean rule for target. +clean: CMakeFiles/Continuous.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target CMakeFiles/Experimental.dir + +# All Build rule for target. +CMakeFiles/Experimental.dir/all: + $(MAKE) -f CMakeFiles/Experimental.dir/build.make CMakeFiles/Experimental.dir/depend + $(MAKE) -f CMakeFiles/Experimental.dir/build.make CMakeFiles/Experimental.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num= "Built target Experimental" +.PHONY : CMakeFiles/Experimental.dir/all + +# Build rule for subdir invocation for target. +CMakeFiles/Experimental.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 + $(MAKE) -f CMakeFiles/Makefile2 CMakeFiles/Experimental.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : CMakeFiles/Experimental.dir/rule + +# Convenience name for target. +Experimental: CMakeFiles/Experimental.dir/rule + +.PHONY : Experimental + +# clean rule for target. +CMakeFiles/Experimental.dir/clean: + $(MAKE) -f CMakeFiles/Experimental.dir/build.make CMakeFiles/Experimental.dir/clean +.PHONY : CMakeFiles/Experimental.dir/clean + +# clean rule for target. +clean: CMakeFiles/Experimental.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target CMakeFiles/ExperimentalConfigure.dir + +# All Build rule for target. +CMakeFiles/ExperimentalConfigure.dir/all: + $(MAKE) -f CMakeFiles/ExperimentalConfigure.dir/build.make CMakeFiles/ExperimentalConfigure.dir/depend + $(MAKE) -f CMakeFiles/ExperimentalConfigure.dir/build.make CMakeFiles/ExperimentalConfigure.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num= "Built target ExperimentalConfigure" +.PHONY : CMakeFiles/ExperimentalConfigure.dir/all + +# Build rule for subdir invocation for target. +CMakeFiles/ExperimentalConfigure.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 + $(MAKE) -f CMakeFiles/Makefile2 CMakeFiles/ExperimentalConfigure.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : CMakeFiles/ExperimentalConfigure.dir/rule + +# Convenience name for target. +ExperimentalConfigure: CMakeFiles/ExperimentalConfigure.dir/rule + +.PHONY : ExperimentalConfigure + +# clean rule for target. +CMakeFiles/ExperimentalConfigure.dir/clean: + $(MAKE) -f CMakeFiles/ExperimentalConfigure.dir/build.make CMakeFiles/ExperimentalConfigure.dir/clean +.PHONY : CMakeFiles/ExperimentalConfigure.dir/clean + +# clean rule for target. +clean: CMakeFiles/ExperimentalConfigure.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target CMakeFiles/NightlyTest.dir + +# All Build rule for target. +CMakeFiles/NightlyTest.dir/all: + $(MAKE) -f CMakeFiles/NightlyTest.dir/build.make CMakeFiles/NightlyTest.dir/depend + $(MAKE) -f CMakeFiles/NightlyTest.dir/build.make CMakeFiles/NightlyTest.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num= "Built target NightlyTest" +.PHONY : CMakeFiles/NightlyTest.dir/all + +# Build rule for subdir invocation for target. +CMakeFiles/NightlyTest.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 + $(MAKE) -f CMakeFiles/Makefile2 CMakeFiles/NightlyTest.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : CMakeFiles/NightlyTest.dir/rule + +# Convenience name for target. +NightlyTest: CMakeFiles/NightlyTest.dir/rule + +.PHONY : NightlyTest + +# clean rule for target. +CMakeFiles/NightlyTest.dir/clean: + $(MAKE) -f CMakeFiles/NightlyTest.dir/build.make CMakeFiles/NightlyTest.dir/clean +.PHONY : CMakeFiles/NightlyTest.dir/clean + +# clean rule for target. +clean: CMakeFiles/NightlyTest.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target CMakeFiles/NightlyCoverage.dir + +# All Build rule for target. +CMakeFiles/NightlyCoverage.dir/all: + $(MAKE) -f CMakeFiles/NightlyCoverage.dir/build.make CMakeFiles/NightlyCoverage.dir/depend + $(MAKE) -f CMakeFiles/NightlyCoverage.dir/build.make CMakeFiles/NightlyCoverage.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num= "Built target NightlyCoverage" +.PHONY : CMakeFiles/NightlyCoverage.dir/all + +# Build rule for subdir invocation for target. +CMakeFiles/NightlyCoverage.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 + $(MAKE) -f CMakeFiles/Makefile2 CMakeFiles/NightlyCoverage.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : CMakeFiles/NightlyCoverage.dir/rule + +# Convenience name for target. +NightlyCoverage: CMakeFiles/NightlyCoverage.dir/rule + +.PHONY : NightlyCoverage + +# clean rule for target. +CMakeFiles/NightlyCoverage.dir/clean: + $(MAKE) -f CMakeFiles/NightlyCoverage.dir/build.make CMakeFiles/NightlyCoverage.dir/clean +.PHONY : CMakeFiles/NightlyCoverage.dir/clean + +# clean rule for target. +clean: CMakeFiles/NightlyCoverage.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target CMakeFiles/ExperimentalCoverage.dir + +# All Build rule for target. +CMakeFiles/ExperimentalCoverage.dir/all: + $(MAKE) -f CMakeFiles/ExperimentalCoverage.dir/build.make CMakeFiles/ExperimentalCoverage.dir/depend + $(MAKE) -f CMakeFiles/ExperimentalCoverage.dir/build.make CMakeFiles/ExperimentalCoverage.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num= "Built target ExperimentalCoverage" +.PHONY : CMakeFiles/ExperimentalCoverage.dir/all + +# Build rule for subdir invocation for target. +CMakeFiles/ExperimentalCoverage.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 + $(MAKE) -f CMakeFiles/Makefile2 CMakeFiles/ExperimentalCoverage.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : CMakeFiles/ExperimentalCoverage.dir/rule + +# Convenience name for target. +ExperimentalCoverage: CMakeFiles/ExperimentalCoverage.dir/rule + +.PHONY : ExperimentalCoverage + +# clean rule for target. +CMakeFiles/ExperimentalCoverage.dir/clean: + $(MAKE) -f CMakeFiles/ExperimentalCoverage.dir/build.make CMakeFiles/ExperimentalCoverage.dir/clean +.PHONY : CMakeFiles/ExperimentalCoverage.dir/clean + +# clean rule for target. +clean: CMakeFiles/ExperimentalCoverage.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target CMakeFiles/NightlyMemCheck.dir + +# All Build rule for target. +CMakeFiles/NightlyMemCheck.dir/all: + $(MAKE) -f CMakeFiles/NightlyMemCheck.dir/build.make CMakeFiles/NightlyMemCheck.dir/depend + $(MAKE) -f CMakeFiles/NightlyMemCheck.dir/build.make CMakeFiles/NightlyMemCheck.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num= "Built target NightlyMemCheck" +.PHONY : CMakeFiles/NightlyMemCheck.dir/all + +# Build rule for subdir invocation for target. +CMakeFiles/NightlyMemCheck.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 + $(MAKE) -f CMakeFiles/Makefile2 CMakeFiles/NightlyMemCheck.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : CMakeFiles/NightlyMemCheck.dir/rule + +# Convenience name for target. +NightlyMemCheck: CMakeFiles/NightlyMemCheck.dir/rule + +.PHONY : NightlyMemCheck + +# clean rule for target. +CMakeFiles/NightlyMemCheck.dir/clean: + $(MAKE) -f CMakeFiles/NightlyMemCheck.dir/build.make CMakeFiles/NightlyMemCheck.dir/clean +.PHONY : CMakeFiles/NightlyMemCheck.dir/clean + +# clean rule for target. +clean: CMakeFiles/NightlyMemCheck.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target CMakeFiles/ContinuousStart.dir + +# All Build rule for target. +CMakeFiles/ContinuousStart.dir/all: + $(MAKE) -f CMakeFiles/ContinuousStart.dir/build.make CMakeFiles/ContinuousStart.dir/depend + $(MAKE) -f CMakeFiles/ContinuousStart.dir/build.make CMakeFiles/ContinuousStart.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num= "Built target ContinuousStart" +.PHONY : CMakeFiles/ContinuousStart.dir/all + +# Build rule for subdir invocation for target. +CMakeFiles/ContinuousStart.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 + $(MAKE) -f CMakeFiles/Makefile2 CMakeFiles/ContinuousStart.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : CMakeFiles/ContinuousStart.dir/rule + +# Convenience name for target. +ContinuousStart: CMakeFiles/ContinuousStart.dir/rule + +.PHONY : ContinuousStart + +# clean rule for target. +CMakeFiles/ContinuousStart.dir/clean: + $(MAKE) -f CMakeFiles/ContinuousStart.dir/build.make CMakeFiles/ContinuousStart.dir/clean +.PHONY : CMakeFiles/ContinuousStart.dir/clean + +# clean rule for target. +clean: CMakeFiles/ContinuousStart.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target CMakeFiles/NightlySubmit.dir + +# All Build rule for target. +CMakeFiles/NightlySubmit.dir/all: + $(MAKE) -f CMakeFiles/NightlySubmit.dir/build.make CMakeFiles/NightlySubmit.dir/depend + $(MAKE) -f CMakeFiles/NightlySubmit.dir/build.make CMakeFiles/NightlySubmit.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num= "Built target NightlySubmit" +.PHONY : CMakeFiles/NightlySubmit.dir/all + +# Build rule for subdir invocation for target. +CMakeFiles/NightlySubmit.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 + $(MAKE) -f CMakeFiles/Makefile2 CMakeFiles/NightlySubmit.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : CMakeFiles/NightlySubmit.dir/rule + +# Convenience name for target. +NightlySubmit: CMakeFiles/NightlySubmit.dir/rule + +.PHONY : NightlySubmit + +# clean rule for target. +CMakeFiles/NightlySubmit.dir/clean: + $(MAKE) -f CMakeFiles/NightlySubmit.dir/build.make CMakeFiles/NightlySubmit.dir/clean +.PHONY : CMakeFiles/NightlySubmit.dir/clean + +# clean rule for target. +clean: CMakeFiles/NightlySubmit.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target CMakeFiles/ContinuousCoverage.dir + +# All Build rule for target. +CMakeFiles/ContinuousCoverage.dir/all: + $(MAKE) -f CMakeFiles/ContinuousCoverage.dir/build.make CMakeFiles/ContinuousCoverage.dir/depend + $(MAKE) -f CMakeFiles/ContinuousCoverage.dir/build.make CMakeFiles/ContinuousCoverage.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num= "Built target ContinuousCoverage" +.PHONY : CMakeFiles/ContinuousCoverage.dir/all + +# Build rule for subdir invocation for target. +CMakeFiles/ContinuousCoverage.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 + $(MAKE) -f CMakeFiles/Makefile2 CMakeFiles/ContinuousCoverage.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : CMakeFiles/ContinuousCoverage.dir/rule + +# Convenience name for target. +ContinuousCoverage: CMakeFiles/ContinuousCoverage.dir/rule + +.PHONY : ContinuousCoverage + +# clean rule for target. +CMakeFiles/ContinuousCoverage.dir/clean: + $(MAKE) -f CMakeFiles/ContinuousCoverage.dir/build.make CMakeFiles/ContinuousCoverage.dir/clean +.PHONY : CMakeFiles/ContinuousCoverage.dir/clean + +# clean rule for target. +clean: CMakeFiles/ContinuousCoverage.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target CMakeFiles/Nightly.dir + +# All Build rule for target. +CMakeFiles/Nightly.dir/all: + $(MAKE) -f CMakeFiles/Nightly.dir/build.make CMakeFiles/Nightly.dir/depend + $(MAKE) -f CMakeFiles/Nightly.dir/build.make CMakeFiles/Nightly.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num= "Built target Nightly" +.PHONY : CMakeFiles/Nightly.dir/all + +# Build rule for subdir invocation for target. +CMakeFiles/Nightly.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 + $(MAKE) -f CMakeFiles/Makefile2 CMakeFiles/Nightly.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : CMakeFiles/Nightly.dir/rule + +# Convenience name for target. +Nightly: CMakeFiles/Nightly.dir/rule + +.PHONY : Nightly + +# clean rule for target. +CMakeFiles/Nightly.dir/clean: + $(MAKE) -f CMakeFiles/Nightly.dir/build.make CMakeFiles/Nightly.dir/clean +.PHONY : CMakeFiles/Nightly.dir/clean + +# clean rule for target. +clean: CMakeFiles/Nightly.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target CMakeFiles/NightlyConfigure.dir + +# All Build rule for target. +CMakeFiles/NightlyConfigure.dir/all: + $(MAKE) -f CMakeFiles/NightlyConfigure.dir/build.make CMakeFiles/NightlyConfigure.dir/depend + $(MAKE) -f CMakeFiles/NightlyConfigure.dir/build.make CMakeFiles/NightlyConfigure.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num= "Built target NightlyConfigure" +.PHONY : CMakeFiles/NightlyConfigure.dir/all + +# Build rule for subdir invocation for target. +CMakeFiles/NightlyConfigure.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 + $(MAKE) -f CMakeFiles/Makefile2 CMakeFiles/NightlyConfigure.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : CMakeFiles/NightlyConfigure.dir/rule + +# Convenience name for target. +NightlyConfigure: CMakeFiles/NightlyConfigure.dir/rule + +.PHONY : NightlyConfigure + +# clean rule for target. +CMakeFiles/NightlyConfigure.dir/clean: + $(MAKE) -f CMakeFiles/NightlyConfigure.dir/build.make CMakeFiles/NightlyConfigure.dir/clean +.PHONY : CMakeFiles/NightlyConfigure.dir/clean + +# clean rule for target. +clean: CMakeFiles/NightlyConfigure.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target CMakeFiles/ExperimentalStart.dir + +# All Build rule for target. +CMakeFiles/ExperimentalStart.dir/all: + $(MAKE) -f CMakeFiles/ExperimentalStart.dir/build.make CMakeFiles/ExperimentalStart.dir/depend + $(MAKE) -f CMakeFiles/ExperimentalStart.dir/build.make CMakeFiles/ExperimentalStart.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num= "Built target ExperimentalStart" +.PHONY : CMakeFiles/ExperimentalStart.dir/all + +# Build rule for subdir invocation for target. +CMakeFiles/ExperimentalStart.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 + $(MAKE) -f CMakeFiles/Makefile2 CMakeFiles/ExperimentalStart.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : CMakeFiles/ExperimentalStart.dir/rule + +# Convenience name for target. +ExperimentalStart: CMakeFiles/ExperimentalStart.dir/rule + +.PHONY : ExperimentalStart + +# clean rule for target. +CMakeFiles/ExperimentalStart.dir/clean: + $(MAKE) -f CMakeFiles/ExperimentalStart.dir/build.make CMakeFiles/ExperimentalStart.dir/clean +.PHONY : CMakeFiles/ExperimentalStart.dir/clean + +# clean rule for target. +clean: CMakeFiles/ExperimentalStart.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target CMakeFiles/ContinuousTest.dir + +# All Build rule for target. +CMakeFiles/ContinuousTest.dir/all: + $(MAKE) -f CMakeFiles/ContinuousTest.dir/build.make CMakeFiles/ContinuousTest.dir/depend + $(MAKE) -f CMakeFiles/ContinuousTest.dir/build.make CMakeFiles/ContinuousTest.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num= "Built target ContinuousTest" +.PHONY : CMakeFiles/ContinuousTest.dir/all + +# Build rule for subdir invocation for target. +CMakeFiles/ContinuousTest.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 + $(MAKE) -f CMakeFiles/Makefile2 CMakeFiles/ContinuousTest.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : CMakeFiles/ContinuousTest.dir/rule + +# Convenience name for target. +ContinuousTest: CMakeFiles/ContinuousTest.dir/rule + +.PHONY : ContinuousTest + +# clean rule for target. +CMakeFiles/ContinuousTest.dir/clean: + $(MAKE) -f CMakeFiles/ContinuousTest.dir/build.make CMakeFiles/ContinuousTest.dir/clean +.PHONY : CMakeFiles/ContinuousTest.dir/clean + +# clean rule for target. +clean: CMakeFiles/ContinuousTest.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target CMakeFiles/ContinuousUpdate.dir + +# All Build rule for target. +CMakeFiles/ContinuousUpdate.dir/all: + $(MAKE) -f CMakeFiles/ContinuousUpdate.dir/build.make CMakeFiles/ContinuousUpdate.dir/depend + $(MAKE) -f CMakeFiles/ContinuousUpdate.dir/build.make CMakeFiles/ContinuousUpdate.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num= "Built target ContinuousUpdate" +.PHONY : CMakeFiles/ContinuousUpdate.dir/all + +# Build rule for subdir invocation for target. +CMakeFiles/ContinuousUpdate.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 + $(MAKE) -f CMakeFiles/Makefile2 CMakeFiles/ContinuousUpdate.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : CMakeFiles/ContinuousUpdate.dir/rule + +# Convenience name for target. +ContinuousUpdate: CMakeFiles/ContinuousUpdate.dir/rule + +.PHONY : ContinuousUpdate + +# clean rule for target. +CMakeFiles/ContinuousUpdate.dir/clean: + $(MAKE) -f CMakeFiles/ContinuousUpdate.dir/build.make CMakeFiles/ContinuousUpdate.dir/clean +.PHONY : CMakeFiles/ContinuousUpdate.dir/clean + +# clean rule for target. +clean: CMakeFiles/ContinuousUpdate.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target CMakeFiles/ExperimentalBuild.dir + +# All Build rule for target. +CMakeFiles/ExperimentalBuild.dir/all: + $(MAKE) -f CMakeFiles/ExperimentalBuild.dir/build.make CMakeFiles/ExperimentalBuild.dir/depend + $(MAKE) -f CMakeFiles/ExperimentalBuild.dir/build.make CMakeFiles/ExperimentalBuild.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num= "Built target ExperimentalBuild" +.PHONY : CMakeFiles/ExperimentalBuild.dir/all + +# Build rule for subdir invocation for target. +CMakeFiles/ExperimentalBuild.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 + $(MAKE) -f CMakeFiles/Makefile2 CMakeFiles/ExperimentalBuild.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : CMakeFiles/ExperimentalBuild.dir/rule + +# Convenience name for target. +ExperimentalBuild: CMakeFiles/ExperimentalBuild.dir/rule + +.PHONY : ExperimentalBuild + +# clean rule for target. +CMakeFiles/ExperimentalBuild.dir/clean: + $(MAKE) -f CMakeFiles/ExperimentalBuild.dir/build.make CMakeFiles/ExperimentalBuild.dir/clean +.PHONY : CMakeFiles/ExperimentalBuild.dir/clean + +# clean rule for target. +clean: CMakeFiles/ExperimentalBuild.dir/clean + +.PHONY : clean + +#============================================================================= +# Directory level rules for directory src + +# Convenience name for "all" pass in the directory. +src/all: src/CMakeFiles/ldpc_dec.dir/all +src/all: src/CMakeFiles/ldpc_enc.dir/all +src/all: src/CMakeFiles/ldpc_noise.dir/all +src/all: src/CMakeFiles/tollr.dir/all +src/all: src/CMakeFiles/cohpsk_ch.dir/all +src/all: src/CMakeFiles/cohpsk_put_test_bits.dir/all +src/all: src/CMakeFiles/cohpsk_get_test_bits.dir/all +src/all: src/CMakeFiles/cohpsk_demod.dir/all +src/all: src/CMakeFiles/vhf_frame_c2.dir/all +src/all: src/CMakeFiles/freedv_data_raw_rx.dir/all +src/all: src/CMakeFiles/insert_errors.dir/all +src/all: src/CMakeFiles/fm_demod.dir/all +src/all: src/CMakeFiles/fdmdv_channel.dir/all +src/all: src/CMakeFiles/freedv_data_raw_tx.dir/all +src/all: src/CMakeFiles/cohpsk_mod.dir/all +src/all: src/CMakeFiles/c2dec.dir/all +src/all: src/CMakeFiles/freedv_rx.dir/all +src/all: src/CMakeFiles/fdmdv_get_test_bits.dir/all +src/all: src/CMakeFiles/c2demo.dir/all +src/all: src/CMakeFiles/fdmdv_put_test_bits.dir/all +src/all: src/CMakeFiles/codec2.dir/all +src/all: src/CMakeFiles/ofdm_get_test_bits.dir/all +src/all: src/CMakeFiles/freedv_tx.dir/all +src/all: src/CMakeFiles/c2enc.dir/all +src/all: src/CMakeFiles/generate_codebook.dir/all +src/all: src/CMakeFiles/freedv_mixed_tx.dir/all +src/all: src/CMakeFiles/c2sim.dir/all +src/all: src/CMakeFiles/fdmdv_demod.dir/all +src/all: src/CMakeFiles/vhf_deframe_c2.dir/all +src/all: src/CMakeFiles/fsk_mod.dir/all +src/all: src/CMakeFiles/fsk_put_test_bits.dir/all +src/all: src/CMakeFiles/freedv_data_tx.dir/all +src/all: src/CMakeFiles/freedv_data_rx.dir/all +src/all: src/CMakeFiles/freedv_mixed_rx.dir/all +src/all: src/CMakeFiles/fmfsk_demod.dir/all +src/all: src/CMakeFiles/fsk_mod_ext_vco.dir/all +src/all: src/CMakeFiles/fsk_demod.dir/all +src/all: src/CMakeFiles/fsk_get_test_bits.dir/all +src/all: src/CMakeFiles/framer.dir/all +src/all: src/CMakeFiles/deframer.dir/all +src/all: src/CMakeFiles/ofdm_mod.dir/all +src/all: src/CMakeFiles/fdmdv_mod.dir/all +src/all: src/CMakeFiles/ofdm_demod.dir/all +src/all: src/CMakeFiles/ofdm_put_test_bits.dir/all +src/all: src/CMakeFiles/fmfsk_mod.dir/all + +.PHONY : src/all + +# Convenience name for "clean" pass in the directory. +src/clean: src/CMakeFiles/ldpc_dec.dir/clean +src/clean: src/CMakeFiles/ldpc_enc.dir/clean +src/clean: src/CMakeFiles/ldpc_noise.dir/clean +src/clean: src/CMakeFiles/tollr.dir/clean +src/clean: src/CMakeFiles/cohpsk_ch.dir/clean +src/clean: src/CMakeFiles/cohpsk_put_test_bits.dir/clean +src/clean: src/CMakeFiles/cohpsk_get_test_bits.dir/clean +src/clean: src/CMakeFiles/cohpsk_demod.dir/clean +src/clean: src/CMakeFiles/vhf_frame_c2.dir/clean +src/clean: src/CMakeFiles/freedv_data_raw_rx.dir/clean +src/clean: src/CMakeFiles/insert_errors.dir/clean +src/clean: src/CMakeFiles/fm_demod.dir/clean +src/clean: src/CMakeFiles/fdmdv_channel.dir/clean +src/clean: src/CMakeFiles/freedv_data_raw_tx.dir/clean +src/clean: src/CMakeFiles/cohpsk_mod.dir/clean +src/clean: src/CMakeFiles/c2dec.dir/clean +src/clean: src/CMakeFiles/freedv_rx.dir/clean +src/clean: src/CMakeFiles/fdmdv_get_test_bits.dir/clean +src/clean: src/CMakeFiles/c2demo.dir/clean +src/clean: src/CMakeFiles/fdmdv_put_test_bits.dir/clean +src/clean: src/CMakeFiles/codec2.dir/clean +src/clean: src/CMakeFiles/ofdm_get_test_bits.dir/clean +src/clean: src/CMakeFiles/freedv_tx.dir/clean +src/clean: src/CMakeFiles/c2enc.dir/clean +src/clean: src/CMakeFiles/generate_codebook.dir/clean +src/clean: src/CMakeFiles/freedv_mixed_tx.dir/clean +src/clean: src/CMakeFiles/c2sim.dir/clean +src/clean: src/CMakeFiles/fdmdv_demod.dir/clean +src/clean: src/CMakeFiles/vhf_deframe_c2.dir/clean +src/clean: src/CMakeFiles/fsk_mod.dir/clean +src/clean: src/CMakeFiles/fsk_put_test_bits.dir/clean +src/clean: src/CMakeFiles/freedv_data_tx.dir/clean +src/clean: src/CMakeFiles/freedv_data_rx.dir/clean +src/clean: src/CMakeFiles/freedv_mixed_rx.dir/clean +src/clean: src/CMakeFiles/fmfsk_demod.dir/clean +src/clean: src/CMakeFiles/fsk_mod_ext_vco.dir/clean +src/clean: src/CMakeFiles/fsk_demod.dir/clean +src/clean: src/CMakeFiles/fsk_get_test_bits.dir/clean +src/clean: src/CMakeFiles/framer.dir/clean +src/clean: src/CMakeFiles/deframer.dir/clean +src/clean: src/CMakeFiles/ofdm_mod.dir/clean +src/clean: src/CMakeFiles/fdmdv_mod.dir/clean +src/clean: src/CMakeFiles/ofdm_demod.dir/clean +src/clean: src/CMakeFiles/ofdm_put_test_bits.dir/clean +src/clean: src/CMakeFiles/fmfsk_mod.dir/clean + +.PHONY : src/clean + +# Convenience name for "preinstall" pass in the directory. +src/preinstall: + +.PHONY : src/preinstall + +#============================================================================= +# Target rules for target src/CMakeFiles/ldpc_dec.dir + +# All Build rule for target. +src/CMakeFiles/ldpc_dec.dir/all: src/CMakeFiles/codec2.dir/all + $(MAKE) -f src/CMakeFiles/ldpc_dec.dir/build.make src/CMakeFiles/ldpc_dec.dir/depend + $(MAKE) -f src/CMakeFiles/ldpc_dec.dir/build.make src/CMakeFiles/ldpc_dec.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num= "Built target ldpc_dec" +.PHONY : src/CMakeFiles/ldpc_dec.dir/all + +# Include target in all. +all: src/CMakeFiles/ldpc_dec.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +src/CMakeFiles/ldpc_dec.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 23 + $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/ldpc_dec.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : src/CMakeFiles/ldpc_dec.dir/rule + +# Convenience name for target. +ldpc_dec: src/CMakeFiles/ldpc_dec.dir/rule + +.PHONY : ldpc_dec + +# clean rule for target. +src/CMakeFiles/ldpc_dec.dir/clean: + $(MAKE) -f src/CMakeFiles/ldpc_dec.dir/build.make src/CMakeFiles/ldpc_dec.dir/clean +.PHONY : src/CMakeFiles/ldpc_dec.dir/clean + +# clean rule for target. +clean: src/CMakeFiles/ldpc_dec.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target src/CMakeFiles/ldpc_enc.dir + +# All Build rule for target. +src/CMakeFiles/ldpc_enc.dir/all: src/CMakeFiles/codec2.dir/all + $(MAKE) -f src/CMakeFiles/ldpc_enc.dir/build.make src/CMakeFiles/ldpc_enc.dir/depend + $(MAKE) -f src/CMakeFiles/ldpc_enc.dir/build.make src/CMakeFiles/ldpc_enc.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=58 "Built target ldpc_enc" +.PHONY : src/CMakeFiles/ldpc_enc.dir/all + +# Include target in all. +all: src/CMakeFiles/ldpc_enc.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +src/CMakeFiles/ldpc_enc.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 24 + $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/ldpc_enc.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : src/CMakeFiles/ldpc_enc.dir/rule + +# Convenience name for target. +ldpc_enc: src/CMakeFiles/ldpc_enc.dir/rule + +.PHONY : ldpc_enc + +# clean rule for target. +src/CMakeFiles/ldpc_enc.dir/clean: + $(MAKE) -f src/CMakeFiles/ldpc_enc.dir/build.make src/CMakeFiles/ldpc_enc.dir/clean +.PHONY : src/CMakeFiles/ldpc_enc.dir/clean + +# clean rule for target. +clean: src/CMakeFiles/ldpc_enc.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target src/CMakeFiles/ldpc_noise.dir + +# All Build rule for target. +src/CMakeFiles/ldpc_noise.dir/all: + $(MAKE) -f src/CMakeFiles/ldpc_noise.dir/build.make src/CMakeFiles/ldpc_noise.dir/depend + $(MAKE) -f src/CMakeFiles/ldpc_noise.dir/build.make src/CMakeFiles/ldpc_noise.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=59 "Built target ldpc_noise" +.PHONY : src/CMakeFiles/ldpc_noise.dir/all + +# Include target in all. +all: src/CMakeFiles/ldpc_noise.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +src/CMakeFiles/ldpc_noise.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 1 + $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/ldpc_noise.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : src/CMakeFiles/ldpc_noise.dir/rule + +# Convenience name for target. +ldpc_noise: src/CMakeFiles/ldpc_noise.dir/rule + +.PHONY : ldpc_noise + +# clean rule for target. +src/CMakeFiles/ldpc_noise.dir/clean: + $(MAKE) -f src/CMakeFiles/ldpc_noise.dir/build.make src/CMakeFiles/ldpc_noise.dir/clean +.PHONY : src/CMakeFiles/ldpc_noise.dir/clean + +# clean rule for target. +clean: src/CMakeFiles/ldpc_noise.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target src/CMakeFiles/tollr.dir + +# All Build rule for target. +src/CMakeFiles/tollr.dir/all: + $(MAKE) -f src/CMakeFiles/tollr.dir/build.make src/CMakeFiles/tollr.dir/depend + $(MAKE) -f src/CMakeFiles/tollr.dir/build.make src/CMakeFiles/tollr.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=95 "Built target tollr" +.PHONY : src/CMakeFiles/tollr.dir/all + +# Include target in all. +all: src/CMakeFiles/tollr.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +src/CMakeFiles/tollr.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 1 + $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/tollr.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : src/CMakeFiles/tollr.dir/rule + +# Convenience name for target. +tollr: src/CMakeFiles/tollr.dir/rule + +.PHONY : tollr + +# clean rule for target. +src/CMakeFiles/tollr.dir/clean: + $(MAKE) -f src/CMakeFiles/tollr.dir/build.make src/CMakeFiles/tollr.dir/clean +.PHONY : src/CMakeFiles/tollr.dir/clean + +# clean rule for target. +clean: src/CMakeFiles/tollr.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target src/CMakeFiles/cohpsk_ch.dir + +# All Build rule for target. +src/CMakeFiles/cohpsk_ch.dir/all: src/CMakeFiles/codec2.dir/all + $(MAKE) -f src/CMakeFiles/cohpsk_ch.dir/build.make src/CMakeFiles/cohpsk_ch.dir/depend + $(MAKE) -f src/CMakeFiles/cohpsk_ch.dir/build.make src/CMakeFiles/cohpsk_ch.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=26 "Built target cohpsk_ch" +.PHONY : src/CMakeFiles/cohpsk_ch.dir/all + +# Include target in all. +all: src/CMakeFiles/cohpsk_ch.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +src/CMakeFiles/cohpsk_ch.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 24 + $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/cohpsk_ch.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : src/CMakeFiles/cohpsk_ch.dir/rule + +# Convenience name for target. +cohpsk_ch: src/CMakeFiles/cohpsk_ch.dir/rule + +.PHONY : cohpsk_ch + +# clean rule for target. +src/CMakeFiles/cohpsk_ch.dir/clean: + $(MAKE) -f src/CMakeFiles/cohpsk_ch.dir/build.make src/CMakeFiles/cohpsk_ch.dir/clean +.PHONY : src/CMakeFiles/cohpsk_ch.dir/clean + +# clean rule for target. +clean: src/CMakeFiles/cohpsk_ch.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target src/CMakeFiles/cohpsk_put_test_bits.dir + +# All Build rule for target. +src/CMakeFiles/cohpsk_put_test_bits.dir/all: src/CMakeFiles/codec2.dir/all + $(MAKE) -f src/CMakeFiles/cohpsk_put_test_bits.dir/build.make src/CMakeFiles/cohpsk_put_test_bits.dir/depend + $(MAKE) -f src/CMakeFiles/cohpsk_put_test_bits.dir/build.make src/CMakeFiles/cohpsk_put_test_bits.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=29 "Built target cohpsk_put_test_bits" +.PHONY : src/CMakeFiles/cohpsk_put_test_bits.dir/all + +# Include target in all. +all: src/CMakeFiles/cohpsk_put_test_bits.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +src/CMakeFiles/cohpsk_put_test_bits.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 24 + $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/cohpsk_put_test_bits.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : src/CMakeFiles/cohpsk_put_test_bits.dir/rule + +# Convenience name for target. +cohpsk_put_test_bits: src/CMakeFiles/cohpsk_put_test_bits.dir/rule + +.PHONY : cohpsk_put_test_bits + +# clean rule for target. +src/CMakeFiles/cohpsk_put_test_bits.dir/clean: + $(MAKE) -f src/CMakeFiles/cohpsk_put_test_bits.dir/build.make src/CMakeFiles/cohpsk_put_test_bits.dir/clean +.PHONY : src/CMakeFiles/cohpsk_put_test_bits.dir/clean + +# clean rule for target. +clean: src/CMakeFiles/cohpsk_put_test_bits.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target src/CMakeFiles/cohpsk_get_test_bits.dir + +# All Build rule for target. +src/CMakeFiles/cohpsk_get_test_bits.dir/all: src/CMakeFiles/codec2.dir/all + $(MAKE) -f src/CMakeFiles/cohpsk_get_test_bits.dir/build.make src/CMakeFiles/cohpsk_get_test_bits.dir/depend + $(MAKE) -f src/CMakeFiles/cohpsk_get_test_bits.dir/build.make src/CMakeFiles/cohpsk_get_test_bits.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num= "Built target cohpsk_get_test_bits" +.PHONY : src/CMakeFiles/cohpsk_get_test_bits.dir/all + +# Include target in all. +all: src/CMakeFiles/cohpsk_get_test_bits.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +src/CMakeFiles/cohpsk_get_test_bits.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 23 + $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/cohpsk_get_test_bits.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : src/CMakeFiles/cohpsk_get_test_bits.dir/rule + +# Convenience name for target. +cohpsk_get_test_bits: src/CMakeFiles/cohpsk_get_test_bits.dir/rule + +.PHONY : cohpsk_get_test_bits + +# clean rule for target. +src/CMakeFiles/cohpsk_get_test_bits.dir/clean: + $(MAKE) -f src/CMakeFiles/cohpsk_get_test_bits.dir/build.make src/CMakeFiles/cohpsk_get_test_bits.dir/clean +.PHONY : src/CMakeFiles/cohpsk_get_test_bits.dir/clean + +# clean rule for target. +clean: src/CMakeFiles/cohpsk_get_test_bits.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target src/CMakeFiles/cohpsk_demod.dir + +# All Build rule for target. +src/CMakeFiles/cohpsk_demod.dir/all: src/CMakeFiles/codec2.dir/all + $(MAKE) -f src/CMakeFiles/cohpsk_demod.dir/build.make src/CMakeFiles/cohpsk_demod.dir/depend + $(MAKE) -f src/CMakeFiles/cohpsk_demod.dir/build.make src/CMakeFiles/cohpsk_demod.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=27 "Built target cohpsk_demod" +.PHONY : src/CMakeFiles/cohpsk_demod.dir/all + +# Include target in all. +all: src/CMakeFiles/cohpsk_demod.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +src/CMakeFiles/cohpsk_demod.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 24 + $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/cohpsk_demod.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : src/CMakeFiles/cohpsk_demod.dir/rule + +# Convenience name for target. +cohpsk_demod: src/CMakeFiles/cohpsk_demod.dir/rule + +.PHONY : cohpsk_demod + +# clean rule for target. +src/CMakeFiles/cohpsk_demod.dir/clean: + $(MAKE) -f src/CMakeFiles/cohpsk_demod.dir/build.make src/CMakeFiles/cohpsk_demod.dir/clean +.PHONY : src/CMakeFiles/cohpsk_demod.dir/clean + +# clean rule for target. +clean: src/CMakeFiles/cohpsk_demod.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target src/CMakeFiles/vhf_frame_c2.dir + +# All Build rule for target. +src/CMakeFiles/vhf_frame_c2.dir/all: src/CMakeFiles/codec2.dir/all + $(MAKE) -f src/CMakeFiles/vhf_frame_c2.dir/build.make src/CMakeFiles/vhf_frame_c2.dir/depend + $(MAKE) -f src/CMakeFiles/vhf_frame_c2.dir/build.make src/CMakeFiles/vhf_frame_c2.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num= "Built target vhf_frame_c2" +.PHONY : src/CMakeFiles/vhf_frame_c2.dir/all + +# Include target in all. +all: src/CMakeFiles/vhf_frame_c2.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +src/CMakeFiles/vhf_frame_c2.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 23 + $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/vhf_frame_c2.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : src/CMakeFiles/vhf_frame_c2.dir/rule + +# Convenience name for target. +vhf_frame_c2: src/CMakeFiles/vhf_frame_c2.dir/rule + +.PHONY : vhf_frame_c2 + +# clean rule for target. +src/CMakeFiles/vhf_frame_c2.dir/clean: + $(MAKE) -f src/CMakeFiles/vhf_frame_c2.dir/build.make src/CMakeFiles/vhf_frame_c2.dir/clean +.PHONY : src/CMakeFiles/vhf_frame_c2.dir/clean + +# clean rule for target. +clean: src/CMakeFiles/vhf_frame_c2.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target src/CMakeFiles/freedv_data_raw_rx.dir + +# All Build rule for target. +src/CMakeFiles/freedv_data_raw_rx.dir/all: src/CMakeFiles/codec2.dir/all + $(MAKE) -f src/CMakeFiles/freedv_data_raw_rx.dir/build.make src/CMakeFiles/freedv_data_raw_rx.dir/depend + $(MAKE) -f src/CMakeFiles/freedv_data_raw_rx.dir/build.make src/CMakeFiles/freedv_data_raw_rx.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num= "Built target freedv_data_raw_rx" +.PHONY : src/CMakeFiles/freedv_data_raw_rx.dir/all + +# Include target in all. +all: src/CMakeFiles/freedv_data_raw_rx.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +src/CMakeFiles/freedv_data_raw_rx.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 23 + $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/freedv_data_raw_rx.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : src/CMakeFiles/freedv_data_raw_rx.dir/rule + +# Convenience name for target. +freedv_data_raw_rx: src/CMakeFiles/freedv_data_raw_rx.dir/rule + +.PHONY : freedv_data_raw_rx + +# clean rule for target. +src/CMakeFiles/freedv_data_raw_rx.dir/clean: + $(MAKE) -f src/CMakeFiles/freedv_data_raw_rx.dir/build.make src/CMakeFiles/freedv_data_raw_rx.dir/clean +.PHONY : src/CMakeFiles/freedv_data_raw_rx.dir/clean + +# clean rule for target. +clean: src/CMakeFiles/freedv_data_raw_rx.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target src/CMakeFiles/insert_errors.dir + +# All Build rule for target. +src/CMakeFiles/insert_errors.dir/all: + $(MAKE) -f src/CMakeFiles/insert_errors.dir/build.make src/CMakeFiles/insert_errors.dir/depend + $(MAKE) -f src/CMakeFiles/insert_errors.dir/build.make src/CMakeFiles/insert_errors.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=57 "Built target insert_errors" +.PHONY : src/CMakeFiles/insert_errors.dir/all + +# Include target in all. +all: src/CMakeFiles/insert_errors.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +src/CMakeFiles/insert_errors.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 1 + $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/insert_errors.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : src/CMakeFiles/insert_errors.dir/rule + +# Convenience name for target. +insert_errors: src/CMakeFiles/insert_errors.dir/rule + +.PHONY : insert_errors + +# clean rule for target. +src/CMakeFiles/insert_errors.dir/clean: + $(MAKE) -f src/CMakeFiles/insert_errors.dir/build.make src/CMakeFiles/insert_errors.dir/clean +.PHONY : src/CMakeFiles/insert_errors.dir/clean + +# clean rule for target. +clean: src/CMakeFiles/insert_errors.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target src/CMakeFiles/fm_demod.dir + +# All Build rule for target. +src/CMakeFiles/fm_demod.dir/all: + $(MAKE) -f src/CMakeFiles/fm_demod.dir/build.make src/CMakeFiles/fm_demod.dir/depend + $(MAKE) -f src/CMakeFiles/fm_demod.dir/build.make src/CMakeFiles/fm_demod.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=43 "Built target fm_demod" +.PHONY : src/CMakeFiles/fm_demod.dir/all + +# Include target in all. +all: src/CMakeFiles/fm_demod.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +src/CMakeFiles/fm_demod.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 1 + $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/fm_demod.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : src/CMakeFiles/fm_demod.dir/rule + +# Convenience name for target. +fm_demod: src/CMakeFiles/fm_demod.dir/rule + +.PHONY : fm_demod + +# clean rule for target. +src/CMakeFiles/fm_demod.dir/clean: + $(MAKE) -f src/CMakeFiles/fm_demod.dir/build.make src/CMakeFiles/fm_demod.dir/clean +.PHONY : src/CMakeFiles/fm_demod.dir/clean + +# clean rule for target. +clean: src/CMakeFiles/fm_demod.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target src/CMakeFiles/fdmdv_channel.dir + +# All Build rule for target. +src/CMakeFiles/fdmdv_channel.dir/all: src/CMakeFiles/codec2.dir/all + $(MAKE) -f src/CMakeFiles/fdmdv_channel.dir/build.make src/CMakeFiles/fdmdv_channel.dir/depend + $(MAKE) -f src/CMakeFiles/fdmdv_channel.dir/build.make src/CMakeFiles/fdmdv_channel.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=33 "Built target fdmdv_channel" +.PHONY : src/CMakeFiles/fdmdv_channel.dir/all + +# Include target in all. +all: src/CMakeFiles/fdmdv_channel.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +src/CMakeFiles/fdmdv_channel.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 24 + $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/fdmdv_channel.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : src/CMakeFiles/fdmdv_channel.dir/rule + +# Convenience name for target. +fdmdv_channel: src/CMakeFiles/fdmdv_channel.dir/rule + +.PHONY : fdmdv_channel + +# clean rule for target. +src/CMakeFiles/fdmdv_channel.dir/clean: + $(MAKE) -f src/CMakeFiles/fdmdv_channel.dir/build.make src/CMakeFiles/fdmdv_channel.dir/clean +.PHONY : src/CMakeFiles/fdmdv_channel.dir/clean + +# clean rule for target. +clean: src/CMakeFiles/fdmdv_channel.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target src/CMakeFiles/freedv_data_raw_tx.dir + +# All Build rule for target. +src/CMakeFiles/freedv_data_raw_tx.dir/all: src/CMakeFiles/codec2.dir/all + $(MAKE) -f src/CMakeFiles/freedv_data_raw_tx.dir/build.make src/CMakeFiles/freedv_data_raw_tx.dir/depend + $(MAKE) -f src/CMakeFiles/freedv_data_raw_tx.dir/build.make src/CMakeFiles/freedv_data_raw_tx.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=47 "Built target freedv_data_raw_tx" +.PHONY : src/CMakeFiles/freedv_data_raw_tx.dir/all + +# Include target in all. +all: src/CMakeFiles/freedv_data_raw_tx.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +src/CMakeFiles/freedv_data_raw_tx.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 24 + $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/freedv_data_raw_tx.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : src/CMakeFiles/freedv_data_raw_tx.dir/rule + +# Convenience name for target. +freedv_data_raw_tx: src/CMakeFiles/freedv_data_raw_tx.dir/rule + +.PHONY : freedv_data_raw_tx + +# clean rule for target. +src/CMakeFiles/freedv_data_raw_tx.dir/clean: + $(MAKE) -f src/CMakeFiles/freedv_data_raw_tx.dir/build.make src/CMakeFiles/freedv_data_raw_tx.dir/clean +.PHONY : src/CMakeFiles/freedv_data_raw_tx.dir/clean + +# clean rule for target. +clean: src/CMakeFiles/freedv_data_raw_tx.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target src/CMakeFiles/cohpsk_mod.dir + +# All Build rule for target. +src/CMakeFiles/cohpsk_mod.dir/all: src/CMakeFiles/codec2.dir/all + $(MAKE) -f src/CMakeFiles/cohpsk_mod.dir/build.make src/CMakeFiles/cohpsk_mod.dir/depend + $(MAKE) -f src/CMakeFiles/cohpsk_mod.dir/build.make src/CMakeFiles/cohpsk_mod.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=28 "Built target cohpsk_mod" +.PHONY : src/CMakeFiles/cohpsk_mod.dir/all + +# Include target in all. +all: src/CMakeFiles/cohpsk_mod.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +src/CMakeFiles/cohpsk_mod.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 24 + $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/cohpsk_mod.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : src/CMakeFiles/cohpsk_mod.dir/rule + +# Convenience name for target. +cohpsk_mod: src/CMakeFiles/cohpsk_mod.dir/rule + +.PHONY : cohpsk_mod + +# clean rule for target. +src/CMakeFiles/cohpsk_mod.dir/clean: + $(MAKE) -f src/CMakeFiles/cohpsk_mod.dir/build.make src/CMakeFiles/cohpsk_mod.dir/clean +.PHONY : src/CMakeFiles/cohpsk_mod.dir/clean + +# clean rule for target. +clean: src/CMakeFiles/cohpsk_mod.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target src/CMakeFiles/c2dec.dir + +# All Build rule for target. +src/CMakeFiles/c2dec.dir/all: src/CMakeFiles/codec2.dir/all + $(MAKE) -f src/CMakeFiles/c2dec.dir/build.make src/CMakeFiles/c2dec.dir/depend + $(MAKE) -f src/CMakeFiles/c2dec.dir/build.make src/CMakeFiles/c2dec.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num= "Built target c2dec" +.PHONY : src/CMakeFiles/c2dec.dir/all + +# Include target in all. +all: src/CMakeFiles/c2dec.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +src/CMakeFiles/c2dec.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 23 + $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/c2dec.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : src/CMakeFiles/c2dec.dir/rule + +# Convenience name for target. +c2dec: src/CMakeFiles/c2dec.dir/rule + +.PHONY : c2dec + +# clean rule for target. +src/CMakeFiles/c2dec.dir/clean: + $(MAKE) -f src/CMakeFiles/c2dec.dir/build.make src/CMakeFiles/c2dec.dir/clean +.PHONY : src/CMakeFiles/c2dec.dir/clean + +# clean rule for target. +clean: src/CMakeFiles/c2dec.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target src/CMakeFiles/freedv_rx.dir + +# All Build rule for target. +src/CMakeFiles/freedv_rx.dir/all: src/CMakeFiles/codec2.dir/all + $(MAKE) -f src/CMakeFiles/freedv_rx.dir/build.make src/CMakeFiles/freedv_rx.dir/depend + $(MAKE) -f src/CMakeFiles/freedv_rx.dir/build.make src/CMakeFiles/freedv_rx.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num= "Built target freedv_rx" +.PHONY : src/CMakeFiles/freedv_rx.dir/all + +# Include target in all. +all: src/CMakeFiles/freedv_rx.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +src/CMakeFiles/freedv_rx.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 23 + $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/freedv_rx.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : src/CMakeFiles/freedv_rx.dir/rule + +# Convenience name for target. +freedv_rx: src/CMakeFiles/freedv_rx.dir/rule + +.PHONY : freedv_rx + +# clean rule for target. +src/CMakeFiles/freedv_rx.dir/clean: + $(MAKE) -f src/CMakeFiles/freedv_rx.dir/build.make src/CMakeFiles/freedv_rx.dir/clean +.PHONY : src/CMakeFiles/freedv_rx.dir/clean + +# clean rule for target. +clean: src/CMakeFiles/freedv_rx.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target src/CMakeFiles/fdmdv_get_test_bits.dir + +# All Build rule for target. +src/CMakeFiles/fdmdv_get_test_bits.dir/all: + $(MAKE) -f src/CMakeFiles/fdmdv_get_test_bits.dir/build.make src/CMakeFiles/fdmdv_get_test_bits.dir/depend + $(MAKE) -f src/CMakeFiles/fdmdv_get_test_bits.dir/build.make src/CMakeFiles/fdmdv_get_test_bits.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=36,37 "Built target fdmdv_get_test_bits" +.PHONY : src/CMakeFiles/fdmdv_get_test_bits.dir/all + +# Include target in all. +all: src/CMakeFiles/fdmdv_get_test_bits.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +src/CMakeFiles/fdmdv_get_test_bits.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 2 + $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/fdmdv_get_test_bits.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : src/CMakeFiles/fdmdv_get_test_bits.dir/rule + +# Convenience name for target. +fdmdv_get_test_bits: src/CMakeFiles/fdmdv_get_test_bits.dir/rule + +.PHONY : fdmdv_get_test_bits + +# clean rule for target. +src/CMakeFiles/fdmdv_get_test_bits.dir/clean: + $(MAKE) -f src/CMakeFiles/fdmdv_get_test_bits.dir/build.make src/CMakeFiles/fdmdv_get_test_bits.dir/clean +.PHONY : src/CMakeFiles/fdmdv_get_test_bits.dir/clean + +# clean rule for target. +clean: src/CMakeFiles/fdmdv_get_test_bits.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target src/CMakeFiles/c2demo.dir + +# All Build rule for target. +src/CMakeFiles/c2demo.dir/all: src/CMakeFiles/codec2.dir/all + $(MAKE) -f src/CMakeFiles/c2demo.dir/build.make src/CMakeFiles/c2demo.dir/depend + $(MAKE) -f src/CMakeFiles/c2demo.dir/build.make src/CMakeFiles/c2demo.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=2 "Built target c2demo" +.PHONY : src/CMakeFiles/c2demo.dir/all + +# Include target in all. +all: src/CMakeFiles/c2demo.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +src/CMakeFiles/c2demo.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 24 + $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/c2demo.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : src/CMakeFiles/c2demo.dir/rule + +# Convenience name for target. +c2demo: src/CMakeFiles/c2demo.dir/rule + +.PHONY : c2demo + +# clean rule for target. +src/CMakeFiles/c2demo.dir/clean: + $(MAKE) -f src/CMakeFiles/c2demo.dir/build.make src/CMakeFiles/c2demo.dir/clean +.PHONY : src/CMakeFiles/c2demo.dir/clean + +# clean rule for target. +clean: src/CMakeFiles/c2demo.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target src/CMakeFiles/fdmdv_put_test_bits.dir + +# All Build rule for target. +src/CMakeFiles/fdmdv_put_test_bits.dir/all: + $(MAKE) -f src/CMakeFiles/fdmdv_put_test_bits.dir/build.make src/CMakeFiles/fdmdv_put_test_bits.dir/depend + $(MAKE) -f src/CMakeFiles/fdmdv_put_test_bits.dir/build.make src/CMakeFiles/fdmdv_put_test_bits.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=41,42 "Built target fdmdv_put_test_bits" +.PHONY : src/CMakeFiles/fdmdv_put_test_bits.dir/all + +# Include target in all. +all: src/CMakeFiles/fdmdv_put_test_bits.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +src/CMakeFiles/fdmdv_put_test_bits.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 2 + $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/fdmdv_put_test_bits.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : src/CMakeFiles/fdmdv_put_test_bits.dir/rule + +# Convenience name for target. +fdmdv_put_test_bits: src/CMakeFiles/fdmdv_put_test_bits.dir/rule + +.PHONY : fdmdv_put_test_bits + +# clean rule for target. +src/CMakeFiles/fdmdv_put_test_bits.dir/clean: + $(MAKE) -f src/CMakeFiles/fdmdv_put_test_bits.dir/build.make src/CMakeFiles/fdmdv_put_test_bits.dir/clean +.PHONY : src/CMakeFiles/fdmdv_put_test_bits.dir/clean + +# clean rule for target. +clean: src/CMakeFiles/fdmdv_put_test_bits.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target src/CMakeFiles/codec2.dir + +# All Build rule for target. +src/CMakeFiles/codec2.dir/all: src/CMakeFiles/generate_codebook.dir/all + $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/depend + $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25 "Built target codec2" +.PHONY : src/CMakeFiles/codec2.dir/all + +# Include target in all. +all: src/CMakeFiles/codec2.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +src/CMakeFiles/codec2.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 23 + $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/codec2.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : src/CMakeFiles/codec2.dir/rule + +# Convenience name for target. +codec2: src/CMakeFiles/codec2.dir/rule + +.PHONY : codec2 + +# clean rule for target. +src/CMakeFiles/codec2.dir/clean: + $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/clean +.PHONY : src/CMakeFiles/codec2.dir/clean + +# clean rule for target. +clean: src/CMakeFiles/codec2.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target src/CMakeFiles/ofdm_get_test_bits.dir + +# All Build rule for target. +src/CMakeFiles/ofdm_get_test_bits.dir/all: src/CMakeFiles/codec2.dir/all + $(MAKE) -f src/CMakeFiles/ofdm_get_test_bits.dir/build.make src/CMakeFiles/ofdm_get_test_bits.dir/depend + $(MAKE) -f src/CMakeFiles/ofdm_get_test_bits.dir/build.make src/CMakeFiles/ofdm_get_test_bits.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=61 "Built target ofdm_get_test_bits" +.PHONY : src/CMakeFiles/ofdm_get_test_bits.dir/all + +# Include target in all. +all: src/CMakeFiles/ofdm_get_test_bits.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +src/CMakeFiles/ofdm_get_test_bits.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 24 + $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/ofdm_get_test_bits.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : src/CMakeFiles/ofdm_get_test_bits.dir/rule + +# Convenience name for target. +ofdm_get_test_bits: src/CMakeFiles/ofdm_get_test_bits.dir/rule + +.PHONY : ofdm_get_test_bits + +# clean rule for target. +src/CMakeFiles/ofdm_get_test_bits.dir/clean: + $(MAKE) -f src/CMakeFiles/ofdm_get_test_bits.dir/build.make src/CMakeFiles/ofdm_get_test_bits.dir/clean +.PHONY : src/CMakeFiles/ofdm_get_test_bits.dir/clean + +# clean rule for target. +clean: src/CMakeFiles/ofdm_get_test_bits.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target src/CMakeFiles/freedv_tx.dir + +# All Build rule for target. +src/CMakeFiles/freedv_tx.dir/all: src/CMakeFiles/codec2.dir/all + $(MAKE) -f src/CMakeFiles/freedv_tx.dir/build.make src/CMakeFiles/freedv_tx.dir/depend + $(MAKE) -f src/CMakeFiles/freedv_tx.dir/build.make src/CMakeFiles/freedv_tx.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=51 "Built target freedv_tx" +.PHONY : src/CMakeFiles/freedv_tx.dir/all + +# Include target in all. +all: src/CMakeFiles/freedv_tx.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +src/CMakeFiles/freedv_tx.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 24 + $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/freedv_tx.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : src/CMakeFiles/freedv_tx.dir/rule + +# Convenience name for target. +freedv_tx: src/CMakeFiles/freedv_tx.dir/rule + +.PHONY : freedv_tx + +# clean rule for target. +src/CMakeFiles/freedv_tx.dir/clean: + $(MAKE) -f src/CMakeFiles/freedv_tx.dir/build.make src/CMakeFiles/freedv_tx.dir/clean +.PHONY : src/CMakeFiles/freedv_tx.dir/clean + +# clean rule for target. +clean: src/CMakeFiles/freedv_tx.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target src/CMakeFiles/c2enc.dir + +# All Build rule for target. +src/CMakeFiles/c2enc.dir/all: src/CMakeFiles/codec2.dir/all + $(MAKE) -f src/CMakeFiles/c2enc.dir/build.make src/CMakeFiles/c2enc.dir/depend + $(MAKE) -f src/CMakeFiles/c2enc.dir/build.make src/CMakeFiles/c2enc.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=3 "Built target c2enc" +.PHONY : src/CMakeFiles/c2enc.dir/all + +# Include target in all. +all: src/CMakeFiles/c2enc.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +src/CMakeFiles/c2enc.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 24 + $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/c2enc.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : src/CMakeFiles/c2enc.dir/rule + +# Convenience name for target. +c2enc: src/CMakeFiles/c2enc.dir/rule + +.PHONY : c2enc + +# clean rule for target. +src/CMakeFiles/c2enc.dir/clean: + $(MAKE) -f src/CMakeFiles/c2enc.dir/build.make src/CMakeFiles/c2enc.dir/clean +.PHONY : src/CMakeFiles/c2enc.dir/clean + +# clean rule for target. +clean: src/CMakeFiles/c2enc.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target src/CMakeFiles/generate_codebook.dir + +# All Build rule for target. +src/CMakeFiles/generate_codebook.dir/all: + $(MAKE) -f src/CMakeFiles/generate_codebook.dir/build.make src/CMakeFiles/generate_codebook.dir/depend + $(MAKE) -f src/CMakeFiles/generate_codebook.dir/build.make src/CMakeFiles/generate_codebook.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=56 "Built target generate_codebook" +.PHONY : src/CMakeFiles/generate_codebook.dir/all + +# Include target in all. +all: src/CMakeFiles/generate_codebook.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +src/CMakeFiles/generate_codebook.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 1 + $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/generate_codebook.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : src/CMakeFiles/generate_codebook.dir/rule + +# Convenience name for target. +generate_codebook: src/CMakeFiles/generate_codebook.dir/rule + +.PHONY : generate_codebook + +# clean rule for target. +src/CMakeFiles/generate_codebook.dir/clean: + $(MAKE) -f src/CMakeFiles/generate_codebook.dir/build.make src/CMakeFiles/generate_codebook.dir/clean +.PHONY : src/CMakeFiles/generate_codebook.dir/clean + +# clean rule for target. +clean: src/CMakeFiles/generate_codebook.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target src/CMakeFiles/freedv_mixed_tx.dir + +# All Build rule for target. +src/CMakeFiles/freedv_mixed_tx.dir/all: src/CMakeFiles/codec2.dir/all + $(MAKE) -f src/CMakeFiles/freedv_mixed_tx.dir/build.make src/CMakeFiles/freedv_mixed_tx.dir/depend + $(MAKE) -f src/CMakeFiles/freedv_mixed_tx.dir/build.make src/CMakeFiles/freedv_mixed_tx.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=50 "Built target freedv_mixed_tx" +.PHONY : src/CMakeFiles/freedv_mixed_tx.dir/all + +# Include target in all. +all: src/CMakeFiles/freedv_mixed_tx.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +src/CMakeFiles/freedv_mixed_tx.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 24 + $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/freedv_mixed_tx.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : src/CMakeFiles/freedv_mixed_tx.dir/rule + +# Convenience name for target. +freedv_mixed_tx: src/CMakeFiles/freedv_mixed_tx.dir/rule + +.PHONY : freedv_mixed_tx + +# clean rule for target. +src/CMakeFiles/freedv_mixed_tx.dir/clean: + $(MAKE) -f src/CMakeFiles/freedv_mixed_tx.dir/build.make src/CMakeFiles/freedv_mixed_tx.dir/clean +.PHONY : src/CMakeFiles/freedv_mixed_tx.dir/clean + +# clean rule for target. +clean: src/CMakeFiles/freedv_mixed_tx.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target src/CMakeFiles/c2sim.dir + +# All Build rule for target. +src/CMakeFiles/c2sim.dir/all: src/CMakeFiles/codec2.dir/all + $(MAKE) -f src/CMakeFiles/c2sim.dir/build.make src/CMakeFiles/c2sim.dir/depend + $(MAKE) -f src/CMakeFiles/c2sim.dir/build.make src/CMakeFiles/c2sim.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num= "Built target c2sim" +.PHONY : src/CMakeFiles/c2sim.dir/all + +# Include target in all. +all: src/CMakeFiles/c2sim.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +src/CMakeFiles/c2sim.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 23 + $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/c2sim.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : src/CMakeFiles/c2sim.dir/rule + +# Convenience name for target. +c2sim: src/CMakeFiles/c2sim.dir/rule + +.PHONY : c2sim + +# clean rule for target. +src/CMakeFiles/c2sim.dir/clean: + $(MAKE) -f src/CMakeFiles/c2sim.dir/build.make src/CMakeFiles/c2sim.dir/clean +.PHONY : src/CMakeFiles/c2sim.dir/clean + +# clean rule for target. +clean: src/CMakeFiles/c2sim.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target src/CMakeFiles/fdmdv_demod.dir + +# All Build rule for target. +src/CMakeFiles/fdmdv_demod.dir/all: + $(MAKE) -f src/CMakeFiles/fdmdv_demod.dir/build.make src/CMakeFiles/fdmdv_demod.dir/depend + $(MAKE) -f src/CMakeFiles/fdmdv_demod.dir/build.make src/CMakeFiles/fdmdv_demod.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=34,35 "Built target fdmdv_demod" +.PHONY : src/CMakeFiles/fdmdv_demod.dir/all + +# Include target in all. +all: src/CMakeFiles/fdmdv_demod.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +src/CMakeFiles/fdmdv_demod.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 2 + $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/fdmdv_demod.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : src/CMakeFiles/fdmdv_demod.dir/rule + +# Convenience name for target. +fdmdv_demod: src/CMakeFiles/fdmdv_demod.dir/rule + +.PHONY : fdmdv_demod + +# clean rule for target. +src/CMakeFiles/fdmdv_demod.dir/clean: + $(MAKE) -f src/CMakeFiles/fdmdv_demod.dir/build.make src/CMakeFiles/fdmdv_demod.dir/clean +.PHONY : src/CMakeFiles/fdmdv_demod.dir/clean + +# clean rule for target. +clean: src/CMakeFiles/fdmdv_demod.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target src/CMakeFiles/vhf_deframe_c2.dir + +# All Build rule for target. +src/CMakeFiles/vhf_deframe_c2.dir/all: src/CMakeFiles/codec2.dir/all + $(MAKE) -f src/CMakeFiles/vhf_deframe_c2.dir/build.make src/CMakeFiles/vhf_deframe_c2.dir/depend + $(MAKE) -f src/CMakeFiles/vhf_deframe_c2.dir/build.make src/CMakeFiles/vhf_deframe_c2.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=98 "Built target vhf_deframe_c2" +.PHONY : src/CMakeFiles/vhf_deframe_c2.dir/all + +# Include target in all. +all: src/CMakeFiles/vhf_deframe_c2.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +src/CMakeFiles/vhf_deframe_c2.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 24 + $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/vhf_deframe_c2.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : src/CMakeFiles/vhf_deframe_c2.dir/rule + +# Convenience name for target. +vhf_deframe_c2: src/CMakeFiles/vhf_deframe_c2.dir/rule + +.PHONY : vhf_deframe_c2 + +# clean rule for target. +src/CMakeFiles/vhf_deframe_c2.dir/clean: + $(MAKE) -f src/CMakeFiles/vhf_deframe_c2.dir/build.make src/CMakeFiles/vhf_deframe_c2.dir/clean +.PHONY : src/CMakeFiles/vhf_deframe_c2.dir/clean + +# clean rule for target. +clean: src/CMakeFiles/vhf_deframe_c2.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target src/CMakeFiles/fsk_mod.dir + +# All Build rule for target. +src/CMakeFiles/fsk_mod.dir/all: src/CMakeFiles/codec2.dir/all + $(MAKE) -f src/CMakeFiles/fsk_mod.dir/build.make src/CMakeFiles/fsk_mod.dir/depend + $(MAKE) -f src/CMakeFiles/fsk_mod.dir/build.make src/CMakeFiles/fsk_mod.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num= "Built target fsk_mod" +.PHONY : src/CMakeFiles/fsk_mod.dir/all + +# Include target in all. +all: src/CMakeFiles/fsk_mod.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +src/CMakeFiles/fsk_mod.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 23 + $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/fsk_mod.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : src/CMakeFiles/fsk_mod.dir/rule + +# Convenience name for target. +fsk_mod: src/CMakeFiles/fsk_mod.dir/rule + +.PHONY : fsk_mod + +# clean rule for target. +src/CMakeFiles/fsk_mod.dir/clean: + $(MAKE) -f src/CMakeFiles/fsk_mod.dir/build.make src/CMakeFiles/fsk_mod.dir/clean +.PHONY : src/CMakeFiles/fsk_mod.dir/clean + +# clean rule for target. +clean: src/CMakeFiles/fsk_mod.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target src/CMakeFiles/fsk_put_test_bits.dir + +# All Build rule for target. +src/CMakeFiles/fsk_put_test_bits.dir/all: src/CMakeFiles/codec2.dir/all + $(MAKE) -f src/CMakeFiles/fsk_put_test_bits.dir/build.make src/CMakeFiles/fsk_put_test_bits.dir/depend + $(MAKE) -f src/CMakeFiles/fsk_put_test_bits.dir/build.make src/CMakeFiles/fsk_put_test_bits.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=55 "Built target fsk_put_test_bits" +.PHONY : src/CMakeFiles/fsk_put_test_bits.dir/all + +# Include target in all. +all: src/CMakeFiles/fsk_put_test_bits.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +src/CMakeFiles/fsk_put_test_bits.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 24 + $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/fsk_put_test_bits.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : src/CMakeFiles/fsk_put_test_bits.dir/rule + +# Convenience name for target. +fsk_put_test_bits: src/CMakeFiles/fsk_put_test_bits.dir/rule + +.PHONY : fsk_put_test_bits + +# clean rule for target. +src/CMakeFiles/fsk_put_test_bits.dir/clean: + $(MAKE) -f src/CMakeFiles/fsk_put_test_bits.dir/build.make src/CMakeFiles/fsk_put_test_bits.dir/clean +.PHONY : src/CMakeFiles/fsk_put_test_bits.dir/clean + +# clean rule for target. +clean: src/CMakeFiles/fsk_put_test_bits.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target src/CMakeFiles/freedv_data_tx.dir + +# All Build rule for target. +src/CMakeFiles/freedv_data_tx.dir/all: src/CMakeFiles/codec2.dir/all + $(MAKE) -f src/CMakeFiles/freedv_data_tx.dir/build.make src/CMakeFiles/freedv_data_tx.dir/depend + $(MAKE) -f src/CMakeFiles/freedv_data_tx.dir/build.make src/CMakeFiles/freedv_data_tx.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num= "Built target freedv_data_tx" +.PHONY : src/CMakeFiles/freedv_data_tx.dir/all + +# Include target in all. +all: src/CMakeFiles/freedv_data_tx.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +src/CMakeFiles/freedv_data_tx.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 23 + $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/freedv_data_tx.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : src/CMakeFiles/freedv_data_tx.dir/rule + +# Convenience name for target. +freedv_data_tx: src/CMakeFiles/freedv_data_tx.dir/rule + +.PHONY : freedv_data_tx + +# clean rule for target. +src/CMakeFiles/freedv_data_tx.dir/clean: + $(MAKE) -f src/CMakeFiles/freedv_data_tx.dir/build.make src/CMakeFiles/freedv_data_tx.dir/clean +.PHONY : src/CMakeFiles/freedv_data_tx.dir/clean + +# clean rule for target. +clean: src/CMakeFiles/freedv_data_tx.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target src/CMakeFiles/freedv_data_rx.dir + +# All Build rule for target. +src/CMakeFiles/freedv_data_rx.dir/all: src/CMakeFiles/codec2.dir/all + $(MAKE) -f src/CMakeFiles/freedv_data_rx.dir/build.make src/CMakeFiles/freedv_data_rx.dir/depend + $(MAKE) -f src/CMakeFiles/freedv_data_rx.dir/build.make src/CMakeFiles/freedv_data_rx.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=48 "Built target freedv_data_rx" +.PHONY : src/CMakeFiles/freedv_data_rx.dir/all + +# Include target in all. +all: src/CMakeFiles/freedv_data_rx.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +src/CMakeFiles/freedv_data_rx.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 24 + $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/freedv_data_rx.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : src/CMakeFiles/freedv_data_rx.dir/rule + +# Convenience name for target. +freedv_data_rx: src/CMakeFiles/freedv_data_rx.dir/rule + +.PHONY : freedv_data_rx + +# clean rule for target. +src/CMakeFiles/freedv_data_rx.dir/clean: + $(MAKE) -f src/CMakeFiles/freedv_data_rx.dir/build.make src/CMakeFiles/freedv_data_rx.dir/clean +.PHONY : src/CMakeFiles/freedv_data_rx.dir/clean + +# clean rule for target. +clean: src/CMakeFiles/freedv_data_rx.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target src/CMakeFiles/freedv_mixed_rx.dir + +# All Build rule for target. +src/CMakeFiles/freedv_mixed_rx.dir/all: src/CMakeFiles/codec2.dir/all + $(MAKE) -f src/CMakeFiles/freedv_mixed_rx.dir/build.make src/CMakeFiles/freedv_mixed_rx.dir/depend + $(MAKE) -f src/CMakeFiles/freedv_mixed_rx.dir/build.make src/CMakeFiles/freedv_mixed_rx.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=49 "Built target freedv_mixed_rx" +.PHONY : src/CMakeFiles/freedv_mixed_rx.dir/all + +# Include target in all. +all: src/CMakeFiles/freedv_mixed_rx.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +src/CMakeFiles/freedv_mixed_rx.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 24 + $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/freedv_mixed_rx.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : src/CMakeFiles/freedv_mixed_rx.dir/rule + +# Convenience name for target. +freedv_mixed_rx: src/CMakeFiles/freedv_mixed_rx.dir/rule + +.PHONY : freedv_mixed_rx + +# clean rule for target. +src/CMakeFiles/freedv_mixed_rx.dir/clean: + $(MAKE) -f src/CMakeFiles/freedv_mixed_rx.dir/build.make src/CMakeFiles/freedv_mixed_rx.dir/clean +.PHONY : src/CMakeFiles/freedv_mixed_rx.dir/clean + +# clean rule for target. +clean: src/CMakeFiles/freedv_mixed_rx.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target src/CMakeFiles/fmfsk_demod.dir + +# All Build rule for target. +src/CMakeFiles/fmfsk_demod.dir/all: src/CMakeFiles/codec2.dir/all + $(MAKE) -f src/CMakeFiles/fmfsk_demod.dir/build.make src/CMakeFiles/fmfsk_demod.dir/depend + $(MAKE) -f src/CMakeFiles/fmfsk_demod.dir/build.make src/CMakeFiles/fmfsk_demod.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=44 "Built target fmfsk_demod" +.PHONY : src/CMakeFiles/fmfsk_demod.dir/all + +# Include target in all. +all: src/CMakeFiles/fmfsk_demod.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +src/CMakeFiles/fmfsk_demod.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 24 + $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/fmfsk_demod.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : src/CMakeFiles/fmfsk_demod.dir/rule + +# Convenience name for target. +fmfsk_demod: src/CMakeFiles/fmfsk_demod.dir/rule + +.PHONY : fmfsk_demod + +# clean rule for target. +src/CMakeFiles/fmfsk_demod.dir/clean: + $(MAKE) -f src/CMakeFiles/fmfsk_demod.dir/build.make src/CMakeFiles/fmfsk_demod.dir/clean +.PHONY : src/CMakeFiles/fmfsk_demod.dir/clean + +# clean rule for target. +clean: src/CMakeFiles/fmfsk_demod.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target src/CMakeFiles/fsk_mod_ext_vco.dir + +# All Build rule for target. +src/CMakeFiles/fsk_mod_ext_vco.dir/all: + $(MAKE) -f src/CMakeFiles/fsk_mod_ext_vco.dir/build.make src/CMakeFiles/fsk_mod_ext_vco.dir/depend + $(MAKE) -f src/CMakeFiles/fsk_mod_ext_vco.dir/build.make src/CMakeFiles/fsk_mod_ext_vco.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=54 "Built target fsk_mod_ext_vco" +.PHONY : src/CMakeFiles/fsk_mod_ext_vco.dir/all + +# Include target in all. +all: src/CMakeFiles/fsk_mod_ext_vco.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +src/CMakeFiles/fsk_mod_ext_vco.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 1 + $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/fsk_mod_ext_vco.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : src/CMakeFiles/fsk_mod_ext_vco.dir/rule + +# Convenience name for target. +fsk_mod_ext_vco: src/CMakeFiles/fsk_mod_ext_vco.dir/rule + +.PHONY : fsk_mod_ext_vco + +# clean rule for target. +src/CMakeFiles/fsk_mod_ext_vco.dir/clean: + $(MAKE) -f src/CMakeFiles/fsk_mod_ext_vco.dir/build.make src/CMakeFiles/fsk_mod_ext_vco.dir/clean +.PHONY : src/CMakeFiles/fsk_mod_ext_vco.dir/clean + +# clean rule for target. +clean: src/CMakeFiles/fsk_mod_ext_vco.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target src/CMakeFiles/fsk_demod.dir + +# All Build rule for target. +src/CMakeFiles/fsk_demod.dir/all: src/CMakeFiles/codec2.dir/all + $(MAKE) -f src/CMakeFiles/fsk_demod.dir/build.make src/CMakeFiles/fsk_demod.dir/depend + $(MAKE) -f src/CMakeFiles/fsk_demod.dir/build.make src/CMakeFiles/fsk_demod.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=52 "Built target fsk_demod" +.PHONY : src/CMakeFiles/fsk_demod.dir/all + +# Include target in all. +all: src/CMakeFiles/fsk_demod.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +src/CMakeFiles/fsk_demod.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 24 + $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/fsk_demod.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : src/CMakeFiles/fsk_demod.dir/rule + +# Convenience name for target. +fsk_demod: src/CMakeFiles/fsk_demod.dir/rule + +.PHONY : fsk_demod + +# clean rule for target. +src/CMakeFiles/fsk_demod.dir/clean: + $(MAKE) -f src/CMakeFiles/fsk_demod.dir/build.make src/CMakeFiles/fsk_demod.dir/clean +.PHONY : src/CMakeFiles/fsk_demod.dir/clean + +# clean rule for target. +clean: src/CMakeFiles/fsk_demod.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target src/CMakeFiles/fsk_get_test_bits.dir + +# All Build rule for target. +src/CMakeFiles/fsk_get_test_bits.dir/all: + $(MAKE) -f src/CMakeFiles/fsk_get_test_bits.dir/build.make src/CMakeFiles/fsk_get_test_bits.dir/depend + $(MAKE) -f src/CMakeFiles/fsk_get_test_bits.dir/build.make src/CMakeFiles/fsk_get_test_bits.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=53 "Built target fsk_get_test_bits" +.PHONY : src/CMakeFiles/fsk_get_test_bits.dir/all + +# Include target in all. +all: src/CMakeFiles/fsk_get_test_bits.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +src/CMakeFiles/fsk_get_test_bits.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 1 + $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/fsk_get_test_bits.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : src/CMakeFiles/fsk_get_test_bits.dir/rule + +# Convenience name for target. +fsk_get_test_bits: src/CMakeFiles/fsk_get_test_bits.dir/rule + +.PHONY : fsk_get_test_bits + +# clean rule for target. +src/CMakeFiles/fsk_get_test_bits.dir/clean: + $(MAKE) -f src/CMakeFiles/fsk_get_test_bits.dir/build.make src/CMakeFiles/fsk_get_test_bits.dir/clean +.PHONY : src/CMakeFiles/fsk_get_test_bits.dir/clean + +# clean rule for target. +clean: src/CMakeFiles/fsk_get_test_bits.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target src/CMakeFiles/framer.dir + +# All Build rule for target. +src/CMakeFiles/framer.dir/all: + $(MAKE) -f src/CMakeFiles/framer.dir/build.make src/CMakeFiles/framer.dir/depend + $(MAKE) -f src/CMakeFiles/framer.dir/build.make src/CMakeFiles/framer.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=46 "Built target framer" +.PHONY : src/CMakeFiles/framer.dir/all + +# Include target in all. +all: src/CMakeFiles/framer.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +src/CMakeFiles/framer.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 1 + $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/framer.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : src/CMakeFiles/framer.dir/rule + +# Convenience name for target. +framer: src/CMakeFiles/framer.dir/rule + +.PHONY : framer + +# clean rule for target. +src/CMakeFiles/framer.dir/clean: + $(MAKE) -f src/CMakeFiles/framer.dir/build.make src/CMakeFiles/framer.dir/clean +.PHONY : src/CMakeFiles/framer.dir/clean + +# clean rule for target. +clean: src/CMakeFiles/framer.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target src/CMakeFiles/deframer.dir + +# All Build rule for target. +src/CMakeFiles/deframer.dir/all: + $(MAKE) -f src/CMakeFiles/deframer.dir/build.make src/CMakeFiles/deframer.dir/depend + $(MAKE) -f src/CMakeFiles/deframer.dir/build.make src/CMakeFiles/deframer.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=31 "Built target deframer" +.PHONY : src/CMakeFiles/deframer.dir/all + +# Include target in all. +all: src/CMakeFiles/deframer.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +src/CMakeFiles/deframer.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 1 + $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/deframer.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : src/CMakeFiles/deframer.dir/rule + +# Convenience name for target. +deframer: src/CMakeFiles/deframer.dir/rule + +.PHONY : deframer + +# clean rule for target. +src/CMakeFiles/deframer.dir/clean: + $(MAKE) -f src/CMakeFiles/deframer.dir/build.make src/CMakeFiles/deframer.dir/clean +.PHONY : src/CMakeFiles/deframer.dir/clean + +# clean rule for target. +clean: src/CMakeFiles/deframer.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target src/CMakeFiles/ofdm_mod.dir + +# All Build rule for target. +src/CMakeFiles/ofdm_mod.dir/all: src/CMakeFiles/codec2.dir/all + $(MAKE) -f src/CMakeFiles/ofdm_mod.dir/build.make src/CMakeFiles/ofdm_mod.dir/depend + $(MAKE) -f src/CMakeFiles/ofdm_mod.dir/build.make src/CMakeFiles/ofdm_mod.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=65 "Built target ofdm_mod" +.PHONY : src/CMakeFiles/ofdm_mod.dir/all + +# Include target in all. +all: src/CMakeFiles/ofdm_mod.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +src/CMakeFiles/ofdm_mod.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 24 + $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/ofdm_mod.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : src/CMakeFiles/ofdm_mod.dir/rule + +# Convenience name for target. +ofdm_mod: src/CMakeFiles/ofdm_mod.dir/rule + +.PHONY : ofdm_mod + +# clean rule for target. +src/CMakeFiles/ofdm_mod.dir/clean: + $(MAKE) -f src/CMakeFiles/ofdm_mod.dir/build.make src/CMakeFiles/ofdm_mod.dir/clean +.PHONY : src/CMakeFiles/ofdm_mod.dir/clean + +# clean rule for target. +clean: src/CMakeFiles/ofdm_mod.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target src/CMakeFiles/fdmdv_mod.dir + +# All Build rule for target. +src/CMakeFiles/fdmdv_mod.dir/all: + $(MAKE) -f src/CMakeFiles/fdmdv_mod.dir/build.make src/CMakeFiles/fdmdv_mod.dir/depend + $(MAKE) -f src/CMakeFiles/fdmdv_mod.dir/build.make src/CMakeFiles/fdmdv_mod.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=39,40 "Built target fdmdv_mod" +.PHONY : src/CMakeFiles/fdmdv_mod.dir/all + +# Include target in all. +all: src/CMakeFiles/fdmdv_mod.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +src/CMakeFiles/fdmdv_mod.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 2 + $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/fdmdv_mod.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : src/CMakeFiles/fdmdv_mod.dir/rule + +# Convenience name for target. +fdmdv_mod: src/CMakeFiles/fdmdv_mod.dir/rule + +.PHONY : fdmdv_mod + +# clean rule for target. +src/CMakeFiles/fdmdv_mod.dir/clean: + $(MAKE) -f src/CMakeFiles/fdmdv_mod.dir/build.make src/CMakeFiles/fdmdv_mod.dir/clean +.PHONY : src/CMakeFiles/fdmdv_mod.dir/clean + +# clean rule for target. +clean: src/CMakeFiles/fdmdv_mod.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target src/CMakeFiles/ofdm_demod.dir + +# All Build rule for target. +src/CMakeFiles/ofdm_demod.dir/all: src/CMakeFiles/codec2.dir/all + $(MAKE) -f src/CMakeFiles/ofdm_demod.dir/build.make src/CMakeFiles/ofdm_demod.dir/depend + $(MAKE) -f src/CMakeFiles/ofdm_demod.dir/build.make src/CMakeFiles/ofdm_demod.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=60 "Built target ofdm_demod" +.PHONY : src/CMakeFiles/ofdm_demod.dir/all + +# Include target in all. +all: src/CMakeFiles/ofdm_demod.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +src/CMakeFiles/ofdm_demod.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 24 + $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/ofdm_demod.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : src/CMakeFiles/ofdm_demod.dir/rule + +# Convenience name for target. +ofdm_demod: src/CMakeFiles/ofdm_demod.dir/rule + +.PHONY : ofdm_demod + +# clean rule for target. +src/CMakeFiles/ofdm_demod.dir/clean: + $(MAKE) -f src/CMakeFiles/ofdm_demod.dir/build.make src/CMakeFiles/ofdm_demod.dir/clean +.PHONY : src/CMakeFiles/ofdm_demod.dir/clean + +# clean rule for target. +clean: src/CMakeFiles/ofdm_demod.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target src/CMakeFiles/ofdm_put_test_bits.dir + +# All Build rule for target. +src/CMakeFiles/ofdm_put_test_bits.dir/all: src/CMakeFiles/codec2.dir/all + $(MAKE) -f src/CMakeFiles/ofdm_put_test_bits.dir/build.make src/CMakeFiles/ofdm_put_test_bits.dir/depend + $(MAKE) -f src/CMakeFiles/ofdm_put_test_bits.dir/build.make src/CMakeFiles/ofdm_put_test_bits.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num= "Built target ofdm_put_test_bits" +.PHONY : src/CMakeFiles/ofdm_put_test_bits.dir/all + +# Include target in all. +all: src/CMakeFiles/ofdm_put_test_bits.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +src/CMakeFiles/ofdm_put_test_bits.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 23 + $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/ofdm_put_test_bits.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : src/CMakeFiles/ofdm_put_test_bits.dir/rule + +# Convenience name for target. +ofdm_put_test_bits: src/CMakeFiles/ofdm_put_test_bits.dir/rule + +.PHONY : ofdm_put_test_bits + +# clean rule for target. +src/CMakeFiles/ofdm_put_test_bits.dir/clean: + $(MAKE) -f src/CMakeFiles/ofdm_put_test_bits.dir/build.make src/CMakeFiles/ofdm_put_test_bits.dir/clean +.PHONY : src/CMakeFiles/ofdm_put_test_bits.dir/clean + +# clean rule for target. +clean: src/CMakeFiles/ofdm_put_test_bits.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target src/CMakeFiles/fmfsk_mod.dir + +# All Build rule for target. +src/CMakeFiles/fmfsk_mod.dir/all: src/CMakeFiles/codec2.dir/all + $(MAKE) -f src/CMakeFiles/fmfsk_mod.dir/build.make src/CMakeFiles/fmfsk_mod.dir/depend + $(MAKE) -f src/CMakeFiles/fmfsk_mod.dir/build.make src/CMakeFiles/fmfsk_mod.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=45 "Built target fmfsk_mod" +.PHONY : src/CMakeFiles/fmfsk_mod.dir/all + +# Include target in all. +all: src/CMakeFiles/fmfsk_mod.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +src/CMakeFiles/fmfsk_mod.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 24 + $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/fmfsk_mod.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : src/CMakeFiles/fmfsk_mod.dir/rule + +# Convenience name for target. +fmfsk_mod: src/CMakeFiles/fmfsk_mod.dir/rule + +.PHONY : fmfsk_mod + +# clean rule for target. +src/CMakeFiles/fmfsk_mod.dir/clean: + $(MAKE) -f src/CMakeFiles/fmfsk_mod.dir/build.make src/CMakeFiles/fmfsk_mod.dir/clean +.PHONY : src/CMakeFiles/fmfsk_mod.dir/clean + +# clean rule for target. +clean: src/CMakeFiles/fmfsk_mod.dir/clean + +.PHONY : clean + +#============================================================================= +# Directory level rules for directory unittest + +# Convenience name for "all" pass in the directory. +unittest/all: unittest/CMakeFiles/tqam16.dir/all +unittest/all: unittest/CMakeFiles/tfsk_llr.dir/all +unittest/all: unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/all +unittest/all: unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/all +unittest/all: unittest/CMakeFiles/thash.dir/all +unittest/all: unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/all +unittest/all: unittest/CMakeFiles/tfreedv_data_channel.dir/all +unittest/all: unittest/CMakeFiles/tofdm.dir/all +unittest/all: unittest/CMakeFiles/tvq_mbest.dir/all +unittest/all: unittest/CMakeFiles/tdeframer.dir/all +unittest/all: unittest/CMakeFiles/ofdm_stack.dir/all +unittest/all: unittest/CMakeFiles/tfsk.dir/all +unittest/all: unittest/CMakeFiles/fdmdv_mem.dir/all +unittest/all: unittest/CMakeFiles/tfdmdv.dir/all +unittest/all: unittest/CMakeFiles/tcohpsk.dir/all +unittest/all: unittest/CMakeFiles/tfifo.dir/all +unittest/all: unittest/CMakeFiles/ofdm_mem.dir/all +unittest/all: unittest/CMakeFiles/tfmfsk.dir/all +unittest/all: unittest/CMakeFiles/function_trace.dir/all +unittest/all: unittest/CMakeFiles/tnewamp1.dir/all +unittest/all: unittest/CMakeFiles/compare_ints.dir/all +unittest/all: unittest/CMakeFiles/tst_codec2_fft_init.dir/all +unittest/all: unittest/CMakeFiles/compare_floats.dir/all +unittest/all: unittest/CMakeFiles/test_phi0.dir/all + +.PHONY : unittest/all + +# Convenience name for "clean" pass in the directory. +unittest/clean: unittest/CMakeFiles/tqam16.dir/clean +unittest/clean: unittest/CMakeFiles/tfsk_llr.dir/clean +unittest/clean: unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/clean +unittest/clean: unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/clean +unittest/clean: unittest/CMakeFiles/thash.dir/clean +unittest/clean: unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/clean +unittest/clean: unittest/CMakeFiles/tfreedv_data_channel.dir/clean +unittest/clean: unittest/CMakeFiles/tofdm.dir/clean +unittest/clean: unittest/CMakeFiles/tvq_mbest.dir/clean +unittest/clean: unittest/CMakeFiles/tdeframer.dir/clean +unittest/clean: unittest/CMakeFiles/ofdm_stack.dir/clean +unittest/clean: unittest/CMakeFiles/tfsk.dir/clean +unittest/clean: unittest/CMakeFiles/fdmdv_mem.dir/clean +unittest/clean: unittest/CMakeFiles/tfdmdv.dir/clean +unittest/clean: unittest/CMakeFiles/tcohpsk.dir/clean +unittest/clean: unittest/CMakeFiles/tfifo.dir/clean +unittest/clean: unittest/CMakeFiles/ofdm_mem.dir/clean +unittest/clean: unittest/CMakeFiles/tfmfsk.dir/clean +unittest/clean: unittest/CMakeFiles/function_trace.dir/clean +unittest/clean: unittest/CMakeFiles/tnewamp1.dir/clean +unittest/clean: unittest/CMakeFiles/compare_ints.dir/clean +unittest/clean: unittest/CMakeFiles/tst_codec2_fft_init.dir/clean +unittest/clean: unittest/CMakeFiles/compare_floats.dir/clean +unittest/clean: unittest/CMakeFiles/test_phi0.dir/clean + +.PHONY : unittest/clean + +# Convenience name for "preinstall" pass in the directory. +unittest/preinstall: + +.PHONY : unittest/preinstall + +#============================================================================= +# Target rules for target unittest/CMakeFiles/tqam16.dir + +# All Build rule for target. +unittest/CMakeFiles/tqam16.dir/all: src/CMakeFiles/codec2.dir/all + $(MAKE) -f unittest/CMakeFiles/tqam16.dir/build.make unittest/CMakeFiles/tqam16.dir/depend + $(MAKE) -f unittest/CMakeFiles/tqam16.dir/build.make unittest/CMakeFiles/tqam16.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=96 "Built target tqam16" +.PHONY : unittest/CMakeFiles/tqam16.dir/all + +# Include target in all. +all: unittest/CMakeFiles/tqam16.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +unittest/CMakeFiles/tqam16.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 24 + $(MAKE) -f CMakeFiles/Makefile2 unittest/CMakeFiles/tqam16.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : unittest/CMakeFiles/tqam16.dir/rule + +# Convenience name for target. +tqam16: unittest/CMakeFiles/tqam16.dir/rule + +.PHONY : tqam16 + +# clean rule for target. +unittest/CMakeFiles/tqam16.dir/clean: + $(MAKE) -f unittest/CMakeFiles/tqam16.dir/build.make unittest/CMakeFiles/tqam16.dir/clean +.PHONY : unittest/CMakeFiles/tqam16.dir/clean + +# clean rule for target. +clean: unittest/CMakeFiles/tqam16.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target unittest/CMakeFiles/tfsk_llr.dir + +# All Build rule for target. +unittest/CMakeFiles/tfsk_llr.dir/all: src/CMakeFiles/codec2.dir/all + $(MAKE) -f unittest/CMakeFiles/tfsk_llr.dir/build.make unittest/CMakeFiles/tfsk_llr.dir/depend + $(MAKE) -f unittest/CMakeFiles/tfsk_llr.dir/build.make unittest/CMakeFiles/tfsk_llr.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=85 "Built target tfsk_llr" +.PHONY : unittest/CMakeFiles/tfsk_llr.dir/all + +# Include target in all. +all: unittest/CMakeFiles/tfsk_llr.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +unittest/CMakeFiles/tfsk_llr.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 24 + $(MAKE) -f CMakeFiles/Makefile2 unittest/CMakeFiles/tfsk_llr.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : unittest/CMakeFiles/tfsk_llr.dir/rule + +# Convenience name for target. +tfsk_llr: unittest/CMakeFiles/tfsk_llr.dir/rule + +.PHONY : tfsk_llr + +# clean rule for target. +unittest/CMakeFiles/tfsk_llr.dir/clean: + $(MAKE) -f unittest/CMakeFiles/tfsk_llr.dir/build.make unittest/CMakeFiles/tfsk_llr.dir/clean +.PHONY : unittest/CMakeFiles/tfsk_llr.dir/clean + +# clean rule for target. +clean: unittest/CMakeFiles/tfsk_llr.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target unittest/CMakeFiles/tfreedv_2400B_rawdata.dir + +# All Build rule for target. +unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/all: src/CMakeFiles/codec2.dir/all + $(MAKE) -f unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/build.make unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/depend + $(MAKE) -f unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/build.make unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=81 "Built target tfreedv_2400B_rawdata" +.PHONY : unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/all + +# Include target in all. +all: unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 24 + $(MAKE) -f CMakeFiles/Makefile2 unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/rule + +# Convenience name for target. +tfreedv_2400B_rawdata: unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/rule + +.PHONY : tfreedv_2400B_rawdata + +# clean rule for target. +unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/clean: + $(MAKE) -f unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/build.make unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/clean +.PHONY : unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/clean + +# clean rule for target. +clean: unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target unittest/CMakeFiles/tfreedv_2400A_rawdata.dir + +# All Build rule for target. +unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/all: src/CMakeFiles/codec2.dir/all + $(MAKE) -f unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/build.make unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/depend + $(MAKE) -f unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/build.make unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num= "Built target tfreedv_2400A_rawdata" +.PHONY : unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/all + +# Include target in all. +all: unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 23 + $(MAKE) -f CMakeFiles/Makefile2 unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/rule + +# Convenience name for target. +tfreedv_2400A_rawdata: unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/rule + +.PHONY : tfreedv_2400A_rawdata + +# clean rule for target. +unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/clean: + $(MAKE) -f unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/build.make unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/clean +.PHONY : unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/clean + +# clean rule for target. +clean: unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target unittest/CMakeFiles/thash.dir + +# All Build rule for target. +unittest/CMakeFiles/thash.dir/all: src/CMakeFiles/codec2.dir/all + $(MAKE) -f unittest/CMakeFiles/thash.dir/build.make unittest/CMakeFiles/thash.dir/depend + $(MAKE) -f unittest/CMakeFiles/thash.dir/build.make unittest/CMakeFiles/thash.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=86 "Built target thash" +.PHONY : unittest/CMakeFiles/thash.dir/all + +# Include target in all. +all: unittest/CMakeFiles/thash.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +unittest/CMakeFiles/thash.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 24 + $(MAKE) -f CMakeFiles/Makefile2 unittest/CMakeFiles/thash.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : unittest/CMakeFiles/thash.dir/rule + +# Convenience name for target. +thash: unittest/CMakeFiles/thash.dir/rule + +.PHONY : thash + +# clean rule for target. +unittest/CMakeFiles/thash.dir/clean: + $(MAKE) -f unittest/CMakeFiles/thash.dir/build.make unittest/CMakeFiles/thash.dir/clean +.PHONY : unittest/CMakeFiles/thash.dir/clean + +# clean rule for target. +clean: unittest/CMakeFiles/thash.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target unittest/CMakeFiles/tfreedv_800XA_rawdata.dir + +# All Build rule for target. +unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/all: src/CMakeFiles/codec2.dir/all + $(MAKE) -f unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/build.make unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/depend + $(MAKE) -f unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/build.make unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=82 "Built target tfreedv_800XA_rawdata" +.PHONY : unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/all + +# Include target in all. +all: unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 24 + $(MAKE) -f CMakeFiles/Makefile2 unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/rule + +# Convenience name for target. +tfreedv_800XA_rawdata: unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/rule + +.PHONY : tfreedv_800XA_rawdata + +# clean rule for target. +unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/clean: + $(MAKE) -f unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/build.make unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/clean +.PHONY : unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/clean + +# clean rule for target. +clean: unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target unittest/CMakeFiles/tfreedv_data_channel.dir + +# All Build rule for target. +unittest/CMakeFiles/tfreedv_data_channel.dir/all: + $(MAKE) -f unittest/CMakeFiles/tfreedv_data_channel.dir/build.make unittest/CMakeFiles/tfreedv_data_channel.dir/depend + $(MAKE) -f unittest/CMakeFiles/tfreedv_data_channel.dir/build.make unittest/CMakeFiles/tfreedv_data_channel.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=83 "Built target tfreedv_data_channel" +.PHONY : unittest/CMakeFiles/tfreedv_data_channel.dir/all + +# Include target in all. +all: unittest/CMakeFiles/tfreedv_data_channel.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +unittest/CMakeFiles/tfreedv_data_channel.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 1 + $(MAKE) -f CMakeFiles/Makefile2 unittest/CMakeFiles/tfreedv_data_channel.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : unittest/CMakeFiles/tfreedv_data_channel.dir/rule + +# Convenience name for target. +tfreedv_data_channel: unittest/CMakeFiles/tfreedv_data_channel.dir/rule + +.PHONY : tfreedv_data_channel + +# clean rule for target. +unittest/CMakeFiles/tfreedv_data_channel.dir/clean: + $(MAKE) -f unittest/CMakeFiles/tfreedv_data_channel.dir/build.make unittest/CMakeFiles/tfreedv_data_channel.dir/clean +.PHONY : unittest/CMakeFiles/tfreedv_data_channel.dir/clean + +# clean rule for target. +clean: unittest/CMakeFiles/tfreedv_data_channel.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target unittest/CMakeFiles/tofdm.dir + +# All Build rule for target. +unittest/CMakeFiles/tofdm.dir/all: + $(MAKE) -f unittest/CMakeFiles/tofdm.dir/build.make unittest/CMakeFiles/tofdm.dir/depend + $(MAKE) -f unittest/CMakeFiles/tofdm.dir/build.make unittest/CMakeFiles/tofdm.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=92,93,94 "Built target tofdm" +.PHONY : unittest/CMakeFiles/tofdm.dir/all + +# Include target in all. +all: unittest/CMakeFiles/tofdm.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +unittest/CMakeFiles/tofdm.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 3 + $(MAKE) -f CMakeFiles/Makefile2 unittest/CMakeFiles/tofdm.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : unittest/CMakeFiles/tofdm.dir/rule + +# Convenience name for target. +tofdm: unittest/CMakeFiles/tofdm.dir/rule + +.PHONY : tofdm + +# clean rule for target. +unittest/CMakeFiles/tofdm.dir/clean: + $(MAKE) -f unittest/CMakeFiles/tofdm.dir/build.make unittest/CMakeFiles/tofdm.dir/clean +.PHONY : unittest/CMakeFiles/tofdm.dir/clean + +# clean rule for target. +clean: unittest/CMakeFiles/tofdm.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target unittest/CMakeFiles/tvq_mbest.dir + +# All Build rule for target. +unittest/CMakeFiles/tvq_mbest.dir/all: + $(MAKE) -f unittest/CMakeFiles/tvq_mbest.dir/build.make unittest/CMakeFiles/tvq_mbest.dir/depend + $(MAKE) -f unittest/CMakeFiles/tvq_mbest.dir/build.make unittest/CMakeFiles/tvq_mbest.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=97 "Built target tvq_mbest" +.PHONY : unittest/CMakeFiles/tvq_mbest.dir/all + +# Include target in all. +all: unittest/CMakeFiles/tvq_mbest.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +unittest/CMakeFiles/tvq_mbest.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 1 + $(MAKE) -f CMakeFiles/Makefile2 unittest/CMakeFiles/tvq_mbest.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : unittest/CMakeFiles/tvq_mbest.dir/rule + +# Convenience name for target. +tvq_mbest: unittest/CMakeFiles/tvq_mbest.dir/rule + +.PHONY : tvq_mbest + +# clean rule for target. +unittest/CMakeFiles/tvq_mbest.dir/clean: + $(MAKE) -f unittest/CMakeFiles/tvq_mbest.dir/build.make unittest/CMakeFiles/tvq_mbest.dir/clean +.PHONY : unittest/CMakeFiles/tvq_mbest.dir/clean + +# clean rule for target. +clean: unittest/CMakeFiles/tvq_mbest.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target unittest/CMakeFiles/tdeframer.dir + +# All Build rule for target. +unittest/CMakeFiles/tdeframer.dir/all: src/CMakeFiles/codec2.dir/all + $(MAKE) -f unittest/CMakeFiles/tdeframer.dir/build.make unittest/CMakeFiles/tdeframer.dir/depend + $(MAKE) -f unittest/CMakeFiles/tdeframer.dir/build.make unittest/CMakeFiles/tdeframer.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=75 "Built target tdeframer" +.PHONY : unittest/CMakeFiles/tdeframer.dir/all + +# Include target in all. +all: unittest/CMakeFiles/tdeframer.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +unittest/CMakeFiles/tdeframer.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 24 + $(MAKE) -f CMakeFiles/Makefile2 unittest/CMakeFiles/tdeframer.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : unittest/CMakeFiles/tdeframer.dir/rule + +# Convenience name for target. +tdeframer: unittest/CMakeFiles/tdeframer.dir/rule + +.PHONY : tdeframer + +# clean rule for target. +unittest/CMakeFiles/tdeframer.dir/clean: + $(MAKE) -f unittest/CMakeFiles/tdeframer.dir/build.make unittest/CMakeFiles/tdeframer.dir/clean +.PHONY : unittest/CMakeFiles/tdeframer.dir/clean + +# clean rule for target. +clean: unittest/CMakeFiles/tdeframer.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target unittest/CMakeFiles/ofdm_stack.dir + +# All Build rule for target. +unittest/CMakeFiles/ofdm_stack.dir/all: unittest/CMakeFiles/function_trace.dir/all + $(MAKE) -f unittest/CMakeFiles/ofdm_stack.dir/build.make unittest/CMakeFiles/ofdm_stack.dir/depend + $(MAKE) -f unittest/CMakeFiles/ofdm_stack.dir/build.make unittest/CMakeFiles/ofdm_stack.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=66,67,68 "Built target ofdm_stack" +.PHONY : unittest/CMakeFiles/ofdm_stack.dir/all + +# Include target in all. +all: unittest/CMakeFiles/ofdm_stack.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +unittest/CMakeFiles/ofdm_stack.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 3 + $(MAKE) -f CMakeFiles/Makefile2 unittest/CMakeFiles/ofdm_stack.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : unittest/CMakeFiles/ofdm_stack.dir/rule + +# Convenience name for target. +ofdm_stack: unittest/CMakeFiles/ofdm_stack.dir/rule + +.PHONY : ofdm_stack + +# clean rule for target. +unittest/CMakeFiles/ofdm_stack.dir/clean: + $(MAKE) -f unittest/CMakeFiles/ofdm_stack.dir/build.make unittest/CMakeFiles/ofdm_stack.dir/clean +.PHONY : unittest/CMakeFiles/ofdm_stack.dir/clean + +# clean rule for target. +clean: unittest/CMakeFiles/ofdm_stack.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target unittest/CMakeFiles/tfsk.dir + +# All Build rule for target. +unittest/CMakeFiles/tfsk.dir/all: + $(MAKE) -f unittest/CMakeFiles/tfsk.dir/build.make unittest/CMakeFiles/tfsk.dir/depend + $(MAKE) -f unittest/CMakeFiles/tfsk.dir/build.make unittest/CMakeFiles/tfsk.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=84 "Built target tfsk" +.PHONY : unittest/CMakeFiles/tfsk.dir/all + +# Include target in all. +all: unittest/CMakeFiles/tfsk.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +unittest/CMakeFiles/tfsk.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 1 + $(MAKE) -f CMakeFiles/Makefile2 unittest/CMakeFiles/tfsk.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : unittest/CMakeFiles/tfsk.dir/rule + +# Convenience name for target. +tfsk: unittest/CMakeFiles/tfsk.dir/rule + +.PHONY : tfsk + +# clean rule for target. +unittest/CMakeFiles/tfsk.dir/clean: + $(MAKE) -f unittest/CMakeFiles/tfsk.dir/build.make unittest/CMakeFiles/tfsk.dir/clean +.PHONY : unittest/CMakeFiles/tfsk.dir/clean + +# clean rule for target. +clean: unittest/CMakeFiles/tfsk.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target unittest/CMakeFiles/fdmdv_mem.dir + +# All Build rule for target. +unittest/CMakeFiles/fdmdv_mem.dir/all: + $(MAKE) -f unittest/CMakeFiles/fdmdv_mem.dir/build.make unittest/CMakeFiles/fdmdv_mem.dir/depend + $(MAKE) -f unittest/CMakeFiles/fdmdv_mem.dir/build.make unittest/CMakeFiles/fdmdv_mem.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=38 "Built target fdmdv_mem" +.PHONY : unittest/CMakeFiles/fdmdv_mem.dir/all + +# Include target in all. +all: unittest/CMakeFiles/fdmdv_mem.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +unittest/CMakeFiles/fdmdv_mem.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 1 + $(MAKE) -f CMakeFiles/Makefile2 unittest/CMakeFiles/fdmdv_mem.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : unittest/CMakeFiles/fdmdv_mem.dir/rule + +# Convenience name for target. +fdmdv_mem: unittest/CMakeFiles/fdmdv_mem.dir/rule + +.PHONY : fdmdv_mem + +# clean rule for target. +unittest/CMakeFiles/fdmdv_mem.dir/clean: + $(MAKE) -f unittest/CMakeFiles/fdmdv_mem.dir/build.make unittest/CMakeFiles/fdmdv_mem.dir/clean +.PHONY : unittest/CMakeFiles/fdmdv_mem.dir/clean + +# clean rule for target. +clean: unittest/CMakeFiles/fdmdv_mem.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target unittest/CMakeFiles/tfdmdv.dir + +# All Build rule for target. +unittest/CMakeFiles/tfdmdv.dir/all: src/CMakeFiles/codec2.dir/all + $(MAKE) -f unittest/CMakeFiles/tfdmdv.dir/build.make unittest/CMakeFiles/tfdmdv.dir/depend + $(MAKE) -f unittest/CMakeFiles/tfdmdv.dir/build.make unittest/CMakeFiles/tfdmdv.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=77 "Built target tfdmdv" +.PHONY : unittest/CMakeFiles/tfdmdv.dir/all + +# Include target in all. +all: unittest/CMakeFiles/tfdmdv.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +unittest/CMakeFiles/tfdmdv.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 24 + $(MAKE) -f CMakeFiles/Makefile2 unittest/CMakeFiles/tfdmdv.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : unittest/CMakeFiles/tfdmdv.dir/rule + +# Convenience name for target. +tfdmdv: unittest/CMakeFiles/tfdmdv.dir/rule + +.PHONY : tfdmdv + +# clean rule for target. +unittest/CMakeFiles/tfdmdv.dir/clean: + $(MAKE) -f unittest/CMakeFiles/tfdmdv.dir/build.make unittest/CMakeFiles/tfdmdv.dir/clean +.PHONY : unittest/CMakeFiles/tfdmdv.dir/clean + +# clean rule for target. +clean: unittest/CMakeFiles/tfdmdv.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target unittest/CMakeFiles/tcohpsk.dir + +# All Build rule for target. +unittest/CMakeFiles/tcohpsk.dir/all: src/CMakeFiles/codec2.dir/all + $(MAKE) -f unittest/CMakeFiles/tcohpsk.dir/build.make unittest/CMakeFiles/tcohpsk.dir/depend + $(MAKE) -f unittest/CMakeFiles/tcohpsk.dir/build.make unittest/CMakeFiles/tcohpsk.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=73 "Built target tcohpsk" +.PHONY : unittest/CMakeFiles/tcohpsk.dir/all + +# Include target in all. +all: unittest/CMakeFiles/tcohpsk.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +unittest/CMakeFiles/tcohpsk.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 24 + $(MAKE) -f CMakeFiles/Makefile2 unittest/CMakeFiles/tcohpsk.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : unittest/CMakeFiles/tcohpsk.dir/rule + +# Convenience name for target. +tcohpsk: unittest/CMakeFiles/tcohpsk.dir/rule + +.PHONY : tcohpsk + +# clean rule for target. +unittest/CMakeFiles/tcohpsk.dir/clean: + $(MAKE) -f unittest/CMakeFiles/tcohpsk.dir/build.make unittest/CMakeFiles/tcohpsk.dir/clean +.PHONY : unittest/CMakeFiles/tcohpsk.dir/clean + +# clean rule for target. +clean: unittest/CMakeFiles/tcohpsk.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target unittest/CMakeFiles/tfifo.dir + +# All Build rule for target. +unittest/CMakeFiles/tfifo.dir/all: src/CMakeFiles/codec2.dir/all + $(MAKE) -f unittest/CMakeFiles/tfifo.dir/build.make unittest/CMakeFiles/tfifo.dir/depend + $(MAKE) -f unittest/CMakeFiles/tfifo.dir/build.make unittest/CMakeFiles/tfifo.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=78 "Built target tfifo" +.PHONY : unittest/CMakeFiles/tfifo.dir/all + +# Include target in all. +all: unittest/CMakeFiles/tfifo.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +unittest/CMakeFiles/tfifo.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 24 + $(MAKE) -f CMakeFiles/Makefile2 unittest/CMakeFiles/tfifo.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : unittest/CMakeFiles/tfifo.dir/rule + +# Convenience name for target. +tfifo: unittest/CMakeFiles/tfifo.dir/rule + +.PHONY : tfifo + +# clean rule for target. +unittest/CMakeFiles/tfifo.dir/clean: + $(MAKE) -f unittest/CMakeFiles/tfifo.dir/build.make unittest/CMakeFiles/tfifo.dir/clean +.PHONY : unittest/CMakeFiles/tfifo.dir/clean + +# clean rule for target. +clean: unittest/CMakeFiles/tfifo.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target unittest/CMakeFiles/ofdm_mem.dir + +# All Build rule for target. +unittest/CMakeFiles/ofdm_mem.dir/all: + $(MAKE) -f unittest/CMakeFiles/ofdm_mem.dir/build.make unittest/CMakeFiles/ofdm_mem.dir/depend + $(MAKE) -f unittest/CMakeFiles/ofdm_mem.dir/build.make unittest/CMakeFiles/ofdm_mem.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=62,63,64 "Built target ofdm_mem" +.PHONY : unittest/CMakeFiles/ofdm_mem.dir/all + +# Include target in all. +all: unittest/CMakeFiles/ofdm_mem.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +unittest/CMakeFiles/ofdm_mem.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 3 + $(MAKE) -f CMakeFiles/Makefile2 unittest/CMakeFiles/ofdm_mem.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : unittest/CMakeFiles/ofdm_mem.dir/rule + +# Convenience name for target. +ofdm_mem: unittest/CMakeFiles/ofdm_mem.dir/rule + +.PHONY : ofdm_mem + +# clean rule for target. +unittest/CMakeFiles/ofdm_mem.dir/clean: + $(MAKE) -f unittest/CMakeFiles/ofdm_mem.dir/build.make unittest/CMakeFiles/ofdm_mem.dir/clean +.PHONY : unittest/CMakeFiles/ofdm_mem.dir/clean + +# clean rule for target. +clean: unittest/CMakeFiles/ofdm_mem.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target unittest/CMakeFiles/tfmfsk.dir + +# All Build rule for target. +unittest/CMakeFiles/tfmfsk.dir/all: + $(MAKE) -f unittest/CMakeFiles/tfmfsk.dir/build.make unittest/CMakeFiles/tfmfsk.dir/depend + $(MAKE) -f unittest/CMakeFiles/tfmfsk.dir/build.make unittest/CMakeFiles/tfmfsk.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=79,80 "Built target tfmfsk" +.PHONY : unittest/CMakeFiles/tfmfsk.dir/all + +# Include target in all. +all: unittest/CMakeFiles/tfmfsk.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +unittest/CMakeFiles/tfmfsk.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 2 + $(MAKE) -f CMakeFiles/Makefile2 unittest/CMakeFiles/tfmfsk.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : unittest/CMakeFiles/tfmfsk.dir/rule + +# Convenience name for target. +tfmfsk: unittest/CMakeFiles/tfmfsk.dir/rule + +.PHONY : tfmfsk + +# clean rule for target. +unittest/CMakeFiles/tfmfsk.dir/clean: + $(MAKE) -f unittest/CMakeFiles/tfmfsk.dir/build.make unittest/CMakeFiles/tfmfsk.dir/clean +.PHONY : unittest/CMakeFiles/tfmfsk.dir/clean + +# clean rule for target. +clean: unittest/CMakeFiles/tfmfsk.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target unittest/CMakeFiles/function_trace.dir + +# All Build rule for target. +unittest/CMakeFiles/function_trace.dir/all: + $(MAKE) -f unittest/CMakeFiles/function_trace.dir/build.make unittest/CMakeFiles/function_trace.dir/depend + $(MAKE) -f unittest/CMakeFiles/function_trace.dir/build.make unittest/CMakeFiles/function_trace.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num= "Built target function_trace" +.PHONY : unittest/CMakeFiles/function_trace.dir/all + +# Include target in all. +all: unittest/CMakeFiles/function_trace.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +unittest/CMakeFiles/function_trace.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 + $(MAKE) -f CMakeFiles/Makefile2 unittest/CMakeFiles/function_trace.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : unittest/CMakeFiles/function_trace.dir/rule + +# Convenience name for target. +function_trace: unittest/CMakeFiles/function_trace.dir/rule + +.PHONY : function_trace + +# clean rule for target. +unittest/CMakeFiles/function_trace.dir/clean: + $(MAKE) -f unittest/CMakeFiles/function_trace.dir/build.make unittest/CMakeFiles/function_trace.dir/clean +.PHONY : unittest/CMakeFiles/function_trace.dir/clean + +# clean rule for target. +clean: unittest/CMakeFiles/function_trace.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target unittest/CMakeFiles/tnewamp1.dir + +# All Build rule for target. +unittest/CMakeFiles/tnewamp1.dir/all: src/CMakeFiles/codec2.dir/all + $(MAKE) -f unittest/CMakeFiles/tnewamp1.dir/build.make unittest/CMakeFiles/tnewamp1.dir/depend + $(MAKE) -f unittest/CMakeFiles/tnewamp1.dir/build.make unittest/CMakeFiles/tnewamp1.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=88,89,90 "Built target tnewamp1" +.PHONY : unittest/CMakeFiles/tnewamp1.dir/all + +# Include target in all. +all: unittest/CMakeFiles/tnewamp1.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +unittest/CMakeFiles/tnewamp1.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 26 + $(MAKE) -f CMakeFiles/Makefile2 unittest/CMakeFiles/tnewamp1.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : unittest/CMakeFiles/tnewamp1.dir/rule + +# Convenience name for target. +tnewamp1: unittest/CMakeFiles/tnewamp1.dir/rule + +.PHONY : tnewamp1 + +# clean rule for target. +unittest/CMakeFiles/tnewamp1.dir/clean: + $(MAKE) -f unittest/CMakeFiles/tnewamp1.dir/build.make unittest/CMakeFiles/tnewamp1.dir/clean +.PHONY : unittest/CMakeFiles/tnewamp1.dir/clean + +# clean rule for target. +clean: unittest/CMakeFiles/tnewamp1.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target unittest/CMakeFiles/compare_ints.dir + +# All Build rule for target. +unittest/CMakeFiles/compare_ints.dir/all: + $(MAKE) -f unittest/CMakeFiles/compare_ints.dir/build.make unittest/CMakeFiles/compare_ints.dir/depend + $(MAKE) -f unittest/CMakeFiles/compare_ints.dir/build.make unittest/CMakeFiles/compare_ints.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num= "Built target compare_ints" +.PHONY : unittest/CMakeFiles/compare_ints.dir/all + +# Include target in all. +all: unittest/CMakeFiles/compare_ints.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +unittest/CMakeFiles/compare_ints.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 + $(MAKE) -f CMakeFiles/Makefile2 unittest/CMakeFiles/compare_ints.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : unittest/CMakeFiles/compare_ints.dir/rule + +# Convenience name for target. +compare_ints: unittest/CMakeFiles/compare_ints.dir/rule + +.PHONY : compare_ints + +# clean rule for target. +unittest/CMakeFiles/compare_ints.dir/clean: + $(MAKE) -f unittest/CMakeFiles/compare_ints.dir/build.make unittest/CMakeFiles/compare_ints.dir/clean +.PHONY : unittest/CMakeFiles/compare_ints.dir/clean + +# clean rule for target. +clean: unittest/CMakeFiles/compare_ints.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target unittest/CMakeFiles/tst_codec2_fft_init.dir + +# All Build rule for target. +unittest/CMakeFiles/tst_codec2_fft_init.dir/all: src/CMakeFiles/codec2.dir/all + $(MAKE) -f unittest/CMakeFiles/tst_codec2_fft_init.dir/build.make unittest/CMakeFiles/tst_codec2_fft_init.dir/depend + $(MAKE) -f unittest/CMakeFiles/tst_codec2_fft_init.dir/build.make unittest/CMakeFiles/tst_codec2_fft_init.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num= "Built target tst_codec2_fft_init" +.PHONY : unittest/CMakeFiles/tst_codec2_fft_init.dir/all + +# Include target in all. +all: unittest/CMakeFiles/tst_codec2_fft_init.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +unittest/CMakeFiles/tst_codec2_fft_init.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 23 + $(MAKE) -f CMakeFiles/Makefile2 unittest/CMakeFiles/tst_codec2_fft_init.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : unittest/CMakeFiles/tst_codec2_fft_init.dir/rule + +# Convenience name for target. +tst_codec2_fft_init: unittest/CMakeFiles/tst_codec2_fft_init.dir/rule + +.PHONY : tst_codec2_fft_init + +# clean rule for target. +unittest/CMakeFiles/tst_codec2_fft_init.dir/clean: + $(MAKE) -f unittest/CMakeFiles/tst_codec2_fft_init.dir/build.make unittest/CMakeFiles/tst_codec2_fft_init.dir/clean +.PHONY : unittest/CMakeFiles/tst_codec2_fft_init.dir/clean + +# clean rule for target. +clean: unittest/CMakeFiles/tst_codec2_fft_init.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target unittest/CMakeFiles/compare_floats.dir + +# All Build rule for target. +unittest/CMakeFiles/compare_floats.dir/all: + $(MAKE) -f unittest/CMakeFiles/compare_floats.dir/build.make unittest/CMakeFiles/compare_floats.dir/depend + $(MAKE) -f unittest/CMakeFiles/compare_floats.dir/build.make unittest/CMakeFiles/compare_floats.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=30 "Built target compare_floats" +.PHONY : unittest/CMakeFiles/compare_floats.dir/all + +# Include target in all. +all: unittest/CMakeFiles/compare_floats.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +unittest/CMakeFiles/compare_floats.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 1 + $(MAKE) -f CMakeFiles/Makefile2 unittest/CMakeFiles/compare_floats.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : unittest/CMakeFiles/compare_floats.dir/rule + +# Convenience name for target. +compare_floats: unittest/CMakeFiles/compare_floats.dir/rule + +.PHONY : compare_floats + +# clean rule for target. +unittest/CMakeFiles/compare_floats.dir/clean: + $(MAKE) -f unittest/CMakeFiles/compare_floats.dir/build.make unittest/CMakeFiles/compare_floats.dir/clean +.PHONY : unittest/CMakeFiles/compare_floats.dir/clean + +# clean rule for target. +clean: unittest/CMakeFiles/compare_floats.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target unittest/CMakeFiles/test_phi0.dir + +# All Build rule for target. +unittest/CMakeFiles/test_phi0.dir/all: + $(MAKE) -f unittest/CMakeFiles/test_phi0.dir/build.make unittest/CMakeFiles/test_phi0.dir/depend + $(MAKE) -f unittest/CMakeFiles/test_phi0.dir/build.make unittest/CMakeFiles/test_phi0.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=76 "Built target test_phi0" +.PHONY : unittest/CMakeFiles/test_phi0.dir/all + +# Include target in all. +all: unittest/CMakeFiles/test_phi0.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +unittest/CMakeFiles/test_phi0.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 1 + $(MAKE) -f CMakeFiles/Makefile2 unittest/CMakeFiles/test_phi0.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : unittest/CMakeFiles/test_phi0.dir/rule + +# Convenience name for target. +test_phi0: unittest/CMakeFiles/test_phi0.dir/rule + +.PHONY : test_phi0 + +# clean rule for target. +unittest/CMakeFiles/test_phi0.dir/clean: + $(MAKE) -f unittest/CMakeFiles/test_phi0.dir/build.make unittest/CMakeFiles/test_phi0.dir/clean +.PHONY : unittest/CMakeFiles/test_phi0.dir/clean + +# clean rule for target. +clean: unittest/CMakeFiles/test_phi0.dir/clean + +.PHONY : clean + +#============================================================================= +# Directory level rules for directory misc + +# Convenience name for "all" pass in the directory. +misc/all: misc/CMakeFiles/extract.dir/all +misc/all: misc/CMakeFiles/tdec.dir/all +misc/all: misc/CMakeFiles/16_8_short.dir/all +misc/all: misc/CMakeFiles/t16_8.dir/all +misc/all: misc/CMakeFiles/t16_8_short.dir/all +misc/all: misc/CMakeFiles/mksine.dir/all +misc/all: misc/CMakeFiles/tnlp.dir/all +misc/all: misc/CMakeFiles/vqtrain.dir/all +misc/all: misc/CMakeFiles/tlininterp.dir/all +misc/all: misc/CMakeFiles/pre.dir/all +misc/all: misc/CMakeFiles/raw2h.dir/all +misc/all: misc/CMakeFiles/timpulse.dir/all +misc/all: misc/CMakeFiles/est_n0.dir/all +misc/all: misc/CMakeFiles/vq_mbest.dir/all + +.PHONY : misc/all + +# Convenience name for "clean" pass in the directory. +misc/clean: misc/CMakeFiles/extract.dir/clean +misc/clean: misc/CMakeFiles/tdec.dir/clean +misc/clean: misc/CMakeFiles/16_8_short.dir/clean +misc/clean: misc/CMakeFiles/t16_8.dir/clean +misc/clean: misc/CMakeFiles/t16_8_short.dir/clean +misc/clean: misc/CMakeFiles/mksine.dir/clean +misc/clean: misc/CMakeFiles/tnlp.dir/clean +misc/clean: misc/CMakeFiles/vqtrain.dir/clean +misc/clean: misc/CMakeFiles/tlininterp.dir/clean +misc/clean: misc/CMakeFiles/pre.dir/clean +misc/clean: misc/CMakeFiles/raw2h.dir/clean +misc/clean: misc/CMakeFiles/timpulse.dir/clean +misc/clean: misc/CMakeFiles/est_n0.dir/clean +misc/clean: misc/CMakeFiles/vq_mbest.dir/clean + +.PHONY : misc/clean + +# Convenience name for "preinstall" pass in the directory. +misc/preinstall: + +.PHONY : misc/preinstall + +#============================================================================= +# Target rules for target misc/CMakeFiles/extract.dir + +# All Build rule for target. +misc/CMakeFiles/extract.dir/all: + $(MAKE) -f misc/CMakeFiles/extract.dir/build.make misc/CMakeFiles/extract.dir/depend + $(MAKE) -f misc/CMakeFiles/extract.dir/build.make misc/CMakeFiles/extract.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num= "Built target extract" +.PHONY : misc/CMakeFiles/extract.dir/all + +# Include target in all. +all: misc/CMakeFiles/extract.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +misc/CMakeFiles/extract.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 + $(MAKE) -f CMakeFiles/Makefile2 misc/CMakeFiles/extract.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : misc/CMakeFiles/extract.dir/rule + +# Convenience name for target. +extract: misc/CMakeFiles/extract.dir/rule + +.PHONY : extract + +# clean rule for target. +misc/CMakeFiles/extract.dir/clean: + $(MAKE) -f misc/CMakeFiles/extract.dir/build.make misc/CMakeFiles/extract.dir/clean +.PHONY : misc/CMakeFiles/extract.dir/clean + +# clean rule for target. +clean: misc/CMakeFiles/extract.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target misc/CMakeFiles/tdec.dir + +# All Build rule for target. +misc/CMakeFiles/tdec.dir/all: + $(MAKE) -f misc/CMakeFiles/tdec.dir/build.make misc/CMakeFiles/tdec.dir/depend + $(MAKE) -f misc/CMakeFiles/tdec.dir/build.make misc/CMakeFiles/tdec.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=74 "Built target tdec" +.PHONY : misc/CMakeFiles/tdec.dir/all + +# Include target in all. +all: misc/CMakeFiles/tdec.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +misc/CMakeFiles/tdec.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 1 + $(MAKE) -f CMakeFiles/Makefile2 misc/CMakeFiles/tdec.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : misc/CMakeFiles/tdec.dir/rule + +# Convenience name for target. +tdec: misc/CMakeFiles/tdec.dir/rule + +.PHONY : tdec + +# clean rule for target. +misc/CMakeFiles/tdec.dir/clean: + $(MAKE) -f misc/CMakeFiles/tdec.dir/build.make misc/CMakeFiles/tdec.dir/clean +.PHONY : misc/CMakeFiles/tdec.dir/clean + +# clean rule for target. +clean: misc/CMakeFiles/tdec.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target misc/CMakeFiles/16_8_short.dir + +# All Build rule for target. +misc/CMakeFiles/16_8_short.dir/all: src/CMakeFiles/codec2.dir/all + $(MAKE) -f misc/CMakeFiles/16_8_short.dir/build.make misc/CMakeFiles/16_8_short.dir/depend + $(MAKE) -f misc/CMakeFiles/16_8_short.dir/build.make misc/CMakeFiles/16_8_short.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=1 "Built target 16_8_short" +.PHONY : misc/CMakeFiles/16_8_short.dir/all + +# Include target in all. +all: misc/CMakeFiles/16_8_short.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +misc/CMakeFiles/16_8_short.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 24 + $(MAKE) -f CMakeFiles/Makefile2 misc/CMakeFiles/16_8_short.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : misc/CMakeFiles/16_8_short.dir/rule + +# Convenience name for target. +16_8_short: misc/CMakeFiles/16_8_short.dir/rule + +.PHONY : 16_8_short + +# clean rule for target. +misc/CMakeFiles/16_8_short.dir/clean: + $(MAKE) -f misc/CMakeFiles/16_8_short.dir/build.make misc/CMakeFiles/16_8_short.dir/clean +.PHONY : misc/CMakeFiles/16_8_short.dir/clean + +# clean rule for target. +clean: misc/CMakeFiles/16_8_short.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target misc/CMakeFiles/t16_8.dir + +# All Build rule for target. +misc/CMakeFiles/t16_8.dir/all: src/CMakeFiles/codec2.dir/all + $(MAKE) -f misc/CMakeFiles/t16_8.dir/build.make misc/CMakeFiles/t16_8.dir/depend + $(MAKE) -f misc/CMakeFiles/t16_8.dir/build.make misc/CMakeFiles/t16_8.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=70,71 "Built target t16_8" +.PHONY : misc/CMakeFiles/t16_8.dir/all + +# Include target in all. +all: misc/CMakeFiles/t16_8.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +misc/CMakeFiles/t16_8.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 25 + $(MAKE) -f CMakeFiles/Makefile2 misc/CMakeFiles/t16_8.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : misc/CMakeFiles/t16_8.dir/rule + +# Convenience name for target. +t16_8: misc/CMakeFiles/t16_8.dir/rule + +.PHONY : t16_8 + +# clean rule for target. +misc/CMakeFiles/t16_8.dir/clean: + $(MAKE) -f misc/CMakeFiles/t16_8.dir/build.make misc/CMakeFiles/t16_8.dir/clean +.PHONY : misc/CMakeFiles/t16_8.dir/clean + +# clean rule for target. +clean: misc/CMakeFiles/t16_8.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target misc/CMakeFiles/t16_8_short.dir + +# All Build rule for target. +misc/CMakeFiles/t16_8_short.dir/all: src/CMakeFiles/codec2.dir/all + $(MAKE) -f misc/CMakeFiles/t16_8_short.dir/build.make misc/CMakeFiles/t16_8_short.dir/depend + $(MAKE) -f misc/CMakeFiles/t16_8_short.dir/build.make misc/CMakeFiles/t16_8_short.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=72 "Built target t16_8_short" +.PHONY : misc/CMakeFiles/t16_8_short.dir/all + +# Include target in all. +all: misc/CMakeFiles/t16_8_short.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +misc/CMakeFiles/t16_8_short.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 24 + $(MAKE) -f CMakeFiles/Makefile2 misc/CMakeFiles/t16_8_short.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : misc/CMakeFiles/t16_8_short.dir/rule + +# Convenience name for target. +t16_8_short: misc/CMakeFiles/t16_8_short.dir/rule + +.PHONY : t16_8_short + +# clean rule for target. +misc/CMakeFiles/t16_8_short.dir/clean: + $(MAKE) -f misc/CMakeFiles/t16_8_short.dir/build.make misc/CMakeFiles/t16_8_short.dir/clean +.PHONY : misc/CMakeFiles/t16_8_short.dir/clean + +# clean rule for target. +clean: misc/CMakeFiles/t16_8_short.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target misc/CMakeFiles/mksine.dir + +# All Build rule for target. +misc/CMakeFiles/mksine.dir/all: + $(MAKE) -f misc/CMakeFiles/mksine.dir/build.make misc/CMakeFiles/mksine.dir/depend + $(MAKE) -f misc/CMakeFiles/mksine.dir/build.make misc/CMakeFiles/mksine.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num= "Built target mksine" +.PHONY : misc/CMakeFiles/mksine.dir/all + +# Include target in all. +all: misc/CMakeFiles/mksine.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +misc/CMakeFiles/mksine.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 + $(MAKE) -f CMakeFiles/Makefile2 misc/CMakeFiles/mksine.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : misc/CMakeFiles/mksine.dir/rule + +# Convenience name for target. +mksine: misc/CMakeFiles/mksine.dir/rule + +.PHONY : mksine + +# clean rule for target. +misc/CMakeFiles/mksine.dir/clean: + $(MAKE) -f misc/CMakeFiles/mksine.dir/build.make misc/CMakeFiles/mksine.dir/clean +.PHONY : misc/CMakeFiles/mksine.dir/clean + +# clean rule for target. +clean: misc/CMakeFiles/mksine.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target misc/CMakeFiles/tnlp.dir + +# All Build rule for target. +misc/CMakeFiles/tnlp.dir/all: src/CMakeFiles/codec2.dir/all + $(MAKE) -f misc/CMakeFiles/tnlp.dir/build.make misc/CMakeFiles/tnlp.dir/depend + $(MAKE) -f misc/CMakeFiles/tnlp.dir/build.make misc/CMakeFiles/tnlp.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=91 "Built target tnlp" +.PHONY : misc/CMakeFiles/tnlp.dir/all + +# Include target in all. +all: misc/CMakeFiles/tnlp.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +misc/CMakeFiles/tnlp.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 24 + $(MAKE) -f CMakeFiles/Makefile2 misc/CMakeFiles/tnlp.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : misc/CMakeFiles/tnlp.dir/rule + +# Convenience name for target. +tnlp: misc/CMakeFiles/tnlp.dir/rule + +.PHONY : tnlp + +# clean rule for target. +misc/CMakeFiles/tnlp.dir/clean: + $(MAKE) -f misc/CMakeFiles/tnlp.dir/build.make misc/CMakeFiles/tnlp.dir/clean +.PHONY : misc/CMakeFiles/tnlp.dir/clean + +# clean rule for target. +clean: misc/CMakeFiles/tnlp.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target misc/CMakeFiles/vqtrain.dir + +# All Build rule for target. +misc/CMakeFiles/vqtrain.dir/all: + $(MAKE) -f misc/CMakeFiles/vqtrain.dir/build.make misc/CMakeFiles/vqtrain.dir/depend + $(MAKE) -f misc/CMakeFiles/vqtrain.dir/build.make misc/CMakeFiles/vqtrain.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=100 "Built target vqtrain" +.PHONY : misc/CMakeFiles/vqtrain.dir/all + +# Include target in all. +all: misc/CMakeFiles/vqtrain.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +misc/CMakeFiles/vqtrain.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 1 + $(MAKE) -f CMakeFiles/Makefile2 misc/CMakeFiles/vqtrain.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : misc/CMakeFiles/vqtrain.dir/rule + +# Convenience name for target. +vqtrain: misc/CMakeFiles/vqtrain.dir/rule + +.PHONY : vqtrain + +# clean rule for target. +misc/CMakeFiles/vqtrain.dir/clean: + $(MAKE) -f misc/CMakeFiles/vqtrain.dir/build.make misc/CMakeFiles/vqtrain.dir/clean +.PHONY : misc/CMakeFiles/vqtrain.dir/clean + +# clean rule for target. +clean: misc/CMakeFiles/vqtrain.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target misc/CMakeFiles/tlininterp.dir + +# All Build rule for target. +misc/CMakeFiles/tlininterp.dir/all: + $(MAKE) -f misc/CMakeFiles/tlininterp.dir/build.make misc/CMakeFiles/tlininterp.dir/depend + $(MAKE) -f misc/CMakeFiles/tlininterp.dir/build.make misc/CMakeFiles/tlininterp.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=87 "Built target tlininterp" +.PHONY : misc/CMakeFiles/tlininterp.dir/all + +# Include target in all. +all: misc/CMakeFiles/tlininterp.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +misc/CMakeFiles/tlininterp.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 1 + $(MAKE) -f CMakeFiles/Makefile2 misc/CMakeFiles/tlininterp.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : misc/CMakeFiles/tlininterp.dir/rule + +# Convenience name for target. +tlininterp: misc/CMakeFiles/tlininterp.dir/rule + +.PHONY : tlininterp + +# clean rule for target. +misc/CMakeFiles/tlininterp.dir/clean: + $(MAKE) -f misc/CMakeFiles/tlininterp.dir/build.make misc/CMakeFiles/tlininterp.dir/clean +.PHONY : misc/CMakeFiles/tlininterp.dir/clean + +# clean rule for target. +clean: misc/CMakeFiles/tlininterp.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target misc/CMakeFiles/pre.dir + +# All Build rule for target. +misc/CMakeFiles/pre.dir/all: src/CMakeFiles/codec2.dir/all + $(MAKE) -f misc/CMakeFiles/pre.dir/build.make misc/CMakeFiles/pre.dir/depend + $(MAKE) -f misc/CMakeFiles/pre.dir/build.make misc/CMakeFiles/pre.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=69 "Built target pre" +.PHONY : misc/CMakeFiles/pre.dir/all + +# Include target in all. +all: misc/CMakeFiles/pre.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +misc/CMakeFiles/pre.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 24 + $(MAKE) -f CMakeFiles/Makefile2 misc/CMakeFiles/pre.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : misc/CMakeFiles/pre.dir/rule + +# Convenience name for target. +pre: misc/CMakeFiles/pre.dir/rule + +.PHONY : pre + +# clean rule for target. +misc/CMakeFiles/pre.dir/clean: + $(MAKE) -f misc/CMakeFiles/pre.dir/build.make misc/CMakeFiles/pre.dir/clean +.PHONY : misc/CMakeFiles/pre.dir/clean + +# clean rule for target. +clean: misc/CMakeFiles/pre.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target misc/CMakeFiles/raw2h.dir + +# All Build rule for target. +misc/CMakeFiles/raw2h.dir/all: src/CMakeFiles/codec2.dir/all + $(MAKE) -f misc/CMakeFiles/raw2h.dir/build.make misc/CMakeFiles/raw2h.dir/depend + $(MAKE) -f misc/CMakeFiles/raw2h.dir/build.make misc/CMakeFiles/raw2h.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num= "Built target raw2h" +.PHONY : misc/CMakeFiles/raw2h.dir/all + +# Include target in all. +all: misc/CMakeFiles/raw2h.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +misc/CMakeFiles/raw2h.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 23 + $(MAKE) -f CMakeFiles/Makefile2 misc/CMakeFiles/raw2h.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : misc/CMakeFiles/raw2h.dir/rule + +# Convenience name for target. +raw2h: misc/CMakeFiles/raw2h.dir/rule + +.PHONY : raw2h + +# clean rule for target. +misc/CMakeFiles/raw2h.dir/clean: + $(MAKE) -f misc/CMakeFiles/raw2h.dir/build.make misc/CMakeFiles/raw2h.dir/clean +.PHONY : misc/CMakeFiles/raw2h.dir/clean + +# clean rule for target. +clean: misc/CMakeFiles/raw2h.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target misc/CMakeFiles/timpulse.dir + +# All Build rule for target. +misc/CMakeFiles/timpulse.dir/all: + $(MAKE) -f misc/CMakeFiles/timpulse.dir/build.make misc/CMakeFiles/timpulse.dir/depend + $(MAKE) -f misc/CMakeFiles/timpulse.dir/build.make misc/CMakeFiles/timpulse.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num= "Built target timpulse" +.PHONY : misc/CMakeFiles/timpulse.dir/all + +# Include target in all. +all: misc/CMakeFiles/timpulse.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +misc/CMakeFiles/timpulse.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 + $(MAKE) -f CMakeFiles/Makefile2 misc/CMakeFiles/timpulse.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : misc/CMakeFiles/timpulse.dir/rule + +# Convenience name for target. +timpulse: misc/CMakeFiles/timpulse.dir/rule + +.PHONY : timpulse + +# clean rule for target. +misc/CMakeFiles/timpulse.dir/clean: + $(MAKE) -f misc/CMakeFiles/timpulse.dir/build.make misc/CMakeFiles/timpulse.dir/clean +.PHONY : misc/CMakeFiles/timpulse.dir/clean + +# clean rule for target. +clean: misc/CMakeFiles/timpulse.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target misc/CMakeFiles/est_n0.dir + +# All Build rule for target. +misc/CMakeFiles/est_n0.dir/all: + $(MAKE) -f misc/CMakeFiles/est_n0.dir/build.make misc/CMakeFiles/est_n0.dir/depend + $(MAKE) -f misc/CMakeFiles/est_n0.dir/build.make misc/CMakeFiles/est_n0.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=32 "Built target est_n0" +.PHONY : misc/CMakeFiles/est_n0.dir/all + +# Include target in all. +all: misc/CMakeFiles/est_n0.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +misc/CMakeFiles/est_n0.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 1 + $(MAKE) -f CMakeFiles/Makefile2 misc/CMakeFiles/est_n0.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : misc/CMakeFiles/est_n0.dir/rule + +# Convenience name for target. +est_n0: misc/CMakeFiles/est_n0.dir/rule + +.PHONY : est_n0 + +# clean rule for target. +misc/CMakeFiles/est_n0.dir/clean: + $(MAKE) -f misc/CMakeFiles/est_n0.dir/build.make misc/CMakeFiles/est_n0.dir/clean +.PHONY : misc/CMakeFiles/est_n0.dir/clean + +# clean rule for target. +clean: misc/CMakeFiles/est_n0.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target misc/CMakeFiles/vq_mbest.dir + +# All Build rule for target. +misc/CMakeFiles/vq_mbest.dir/all: src/CMakeFiles/codec2.dir/all + $(MAKE) -f misc/CMakeFiles/vq_mbest.dir/build.make misc/CMakeFiles/vq_mbest.dir/depend + $(MAKE) -f misc/CMakeFiles/vq_mbest.dir/build.make misc/CMakeFiles/vq_mbest.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=99 "Built target vq_mbest" +.PHONY : misc/CMakeFiles/vq_mbest.dir/all + +# Include target in all. +all: misc/CMakeFiles/vq_mbest.dir/all + +.PHONY : all + +# Build rule for subdir invocation for target. +misc/CMakeFiles/vq_mbest.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 24 + $(MAKE) -f CMakeFiles/Makefile2 misc/CMakeFiles/vq_mbest.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : misc/CMakeFiles/vq_mbest.dir/rule + +# Convenience name for target. +vq_mbest: misc/CMakeFiles/vq_mbest.dir/rule + +.PHONY : vq_mbest + +# clean rule for target. +misc/CMakeFiles/vq_mbest.dir/clean: + $(MAKE) -f misc/CMakeFiles/vq_mbest.dir/build.make misc/CMakeFiles/vq_mbest.dir/clean +.PHONY : misc/CMakeFiles/vq_mbest.dir/clean + +# clean rule for target. +clean: misc/CMakeFiles/vq_mbest.dir/clean + +.PHONY : clean + +#============================================================================= +# Special targets to cleanup operation of make. + +# Special rule to run CMake to check the build system integrity. +# No rule that depends on this can have commands that come from listfiles +# because they might be regenerated. +cmake_check_build_system: + $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 +.PHONY : cmake_check_build_system + diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/Nightly.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/CMakeFiles/Nightly.dir/DependInfo.cmake new file mode 100644 index 0000000..19fab21 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/Nightly.dir/DependInfo.cmake @@ -0,0 +1,11 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + ) +# The set of files for implicit dependencies of each language: + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/Nightly.dir/build.make b/libcodec2-android/src/codec2/build_linux/CMakeFiles/Nightly.dir/build.make new file mode 100644 index 0000000..97054f0 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/Nightly.dir/build.make @@ -0,0 +1,76 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Utility rule file for Nightly. + +# Include the progress variables for this target. +include CMakeFiles/Nightly.dir/progress.make + +CMakeFiles/Nightly: + /usr/bin/ctest -D Nightly + +Nightly: CMakeFiles/Nightly +Nightly: CMakeFiles/Nightly.dir/build.make + +.PHONY : Nightly + +# Rule to build all files generated by this target. +CMakeFiles/Nightly.dir/build: Nightly + +.PHONY : CMakeFiles/Nightly.dir/build + +CMakeFiles/Nightly.dir/clean: + $(CMAKE_COMMAND) -P CMakeFiles/Nightly.dir/cmake_clean.cmake +.PHONY : CMakeFiles/Nightly.dir/clean + +CMakeFiles/Nightly.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/Nightly.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : CMakeFiles/Nightly.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/Nightly.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/CMakeFiles/Nightly.dir/cmake_clean.cmake new file mode 100644 index 0000000..99a4ac1 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/Nightly.dir/cmake_clean.cmake @@ -0,0 +1,8 @@ +file(REMOVE_RECURSE + "CMakeFiles/Nightly" +) + +# Per-language clean rules from dependency scanning. +foreach(lang ) + include(CMakeFiles/Nightly.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/Nightly.dir/progress.make b/libcodec2-android/src/codec2/build_linux/CMakeFiles/Nightly.dir/progress.make new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/Nightly.dir/progress.make @@ -0,0 +1 @@ + diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyBuild.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyBuild.dir/DependInfo.cmake new file mode 100644 index 0000000..19fab21 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyBuild.dir/DependInfo.cmake @@ -0,0 +1,11 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + ) +# The set of files for implicit dependencies of each language: + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyBuild.dir/build.make b/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyBuild.dir/build.make new file mode 100644 index 0000000..2f83f87 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyBuild.dir/build.make @@ -0,0 +1,76 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Utility rule file for NightlyBuild. + +# Include the progress variables for this target. +include CMakeFiles/NightlyBuild.dir/progress.make + +CMakeFiles/NightlyBuild: + /usr/bin/ctest -D NightlyBuild + +NightlyBuild: CMakeFiles/NightlyBuild +NightlyBuild: CMakeFiles/NightlyBuild.dir/build.make + +.PHONY : NightlyBuild + +# Rule to build all files generated by this target. +CMakeFiles/NightlyBuild.dir/build: NightlyBuild + +.PHONY : CMakeFiles/NightlyBuild.dir/build + +CMakeFiles/NightlyBuild.dir/clean: + $(CMAKE_COMMAND) -P CMakeFiles/NightlyBuild.dir/cmake_clean.cmake +.PHONY : CMakeFiles/NightlyBuild.dir/clean + +CMakeFiles/NightlyBuild.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/NightlyBuild.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : CMakeFiles/NightlyBuild.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyBuild.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyBuild.dir/cmake_clean.cmake new file mode 100644 index 0000000..7aa38a7 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyBuild.dir/cmake_clean.cmake @@ -0,0 +1,8 @@ +file(REMOVE_RECURSE + "CMakeFiles/NightlyBuild" +) + +# Per-language clean rules from dependency scanning. +foreach(lang ) + include(CMakeFiles/NightlyBuild.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyBuild.dir/progress.make b/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyBuild.dir/progress.make new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyBuild.dir/progress.make @@ -0,0 +1 @@ + diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyConfigure.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyConfigure.dir/DependInfo.cmake new file mode 100644 index 0000000..19fab21 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyConfigure.dir/DependInfo.cmake @@ -0,0 +1,11 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + ) +# The set of files for implicit dependencies of each language: + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyConfigure.dir/build.make b/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyConfigure.dir/build.make new file mode 100644 index 0000000..58a6193 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyConfigure.dir/build.make @@ -0,0 +1,76 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Utility rule file for NightlyConfigure. + +# Include the progress variables for this target. +include CMakeFiles/NightlyConfigure.dir/progress.make + +CMakeFiles/NightlyConfigure: + /usr/bin/ctest -D NightlyConfigure + +NightlyConfigure: CMakeFiles/NightlyConfigure +NightlyConfigure: CMakeFiles/NightlyConfigure.dir/build.make + +.PHONY : NightlyConfigure + +# Rule to build all files generated by this target. +CMakeFiles/NightlyConfigure.dir/build: NightlyConfigure + +.PHONY : CMakeFiles/NightlyConfigure.dir/build + +CMakeFiles/NightlyConfigure.dir/clean: + $(CMAKE_COMMAND) -P CMakeFiles/NightlyConfigure.dir/cmake_clean.cmake +.PHONY : CMakeFiles/NightlyConfigure.dir/clean + +CMakeFiles/NightlyConfigure.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/NightlyConfigure.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : CMakeFiles/NightlyConfigure.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyConfigure.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyConfigure.dir/cmake_clean.cmake new file mode 100644 index 0000000..080c729 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyConfigure.dir/cmake_clean.cmake @@ -0,0 +1,8 @@ +file(REMOVE_RECURSE + "CMakeFiles/NightlyConfigure" +) + +# Per-language clean rules from dependency scanning. +foreach(lang ) + include(CMakeFiles/NightlyConfigure.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyConfigure.dir/progress.make b/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyConfigure.dir/progress.make new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyConfigure.dir/progress.make @@ -0,0 +1 @@ + diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyCoverage.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyCoverage.dir/DependInfo.cmake new file mode 100644 index 0000000..19fab21 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyCoverage.dir/DependInfo.cmake @@ -0,0 +1,11 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + ) +# The set of files for implicit dependencies of each language: + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyCoverage.dir/build.make b/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyCoverage.dir/build.make new file mode 100644 index 0000000..cf5b648 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyCoverage.dir/build.make @@ -0,0 +1,76 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Utility rule file for NightlyCoverage. + +# Include the progress variables for this target. +include CMakeFiles/NightlyCoverage.dir/progress.make + +CMakeFiles/NightlyCoverage: + /usr/bin/ctest -D NightlyCoverage + +NightlyCoverage: CMakeFiles/NightlyCoverage +NightlyCoverage: CMakeFiles/NightlyCoverage.dir/build.make + +.PHONY : NightlyCoverage + +# Rule to build all files generated by this target. +CMakeFiles/NightlyCoverage.dir/build: NightlyCoverage + +.PHONY : CMakeFiles/NightlyCoverage.dir/build + +CMakeFiles/NightlyCoverage.dir/clean: + $(CMAKE_COMMAND) -P CMakeFiles/NightlyCoverage.dir/cmake_clean.cmake +.PHONY : CMakeFiles/NightlyCoverage.dir/clean + +CMakeFiles/NightlyCoverage.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/NightlyCoverage.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : CMakeFiles/NightlyCoverage.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyCoverage.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyCoverage.dir/cmake_clean.cmake new file mode 100644 index 0000000..d6cba89 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyCoverage.dir/cmake_clean.cmake @@ -0,0 +1,8 @@ +file(REMOVE_RECURSE + "CMakeFiles/NightlyCoverage" +) + +# Per-language clean rules from dependency scanning. +foreach(lang ) + include(CMakeFiles/NightlyCoverage.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyCoverage.dir/progress.make b/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyCoverage.dir/progress.make new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyCoverage.dir/progress.make @@ -0,0 +1 @@ + diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyMemCheck.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyMemCheck.dir/DependInfo.cmake new file mode 100644 index 0000000..19fab21 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyMemCheck.dir/DependInfo.cmake @@ -0,0 +1,11 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + ) +# The set of files for implicit dependencies of each language: + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyMemCheck.dir/build.make b/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyMemCheck.dir/build.make new file mode 100644 index 0000000..be3cc60 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyMemCheck.dir/build.make @@ -0,0 +1,76 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Utility rule file for NightlyMemCheck. + +# Include the progress variables for this target. +include CMakeFiles/NightlyMemCheck.dir/progress.make + +CMakeFiles/NightlyMemCheck: + /usr/bin/ctest -D NightlyMemCheck + +NightlyMemCheck: CMakeFiles/NightlyMemCheck +NightlyMemCheck: CMakeFiles/NightlyMemCheck.dir/build.make + +.PHONY : NightlyMemCheck + +# Rule to build all files generated by this target. +CMakeFiles/NightlyMemCheck.dir/build: NightlyMemCheck + +.PHONY : CMakeFiles/NightlyMemCheck.dir/build + +CMakeFiles/NightlyMemCheck.dir/clean: + $(CMAKE_COMMAND) -P CMakeFiles/NightlyMemCheck.dir/cmake_clean.cmake +.PHONY : CMakeFiles/NightlyMemCheck.dir/clean + +CMakeFiles/NightlyMemCheck.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/NightlyMemCheck.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : CMakeFiles/NightlyMemCheck.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyMemCheck.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyMemCheck.dir/cmake_clean.cmake new file mode 100644 index 0000000..3c0e881 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyMemCheck.dir/cmake_clean.cmake @@ -0,0 +1,8 @@ +file(REMOVE_RECURSE + "CMakeFiles/NightlyMemCheck" +) + +# Per-language clean rules from dependency scanning. +foreach(lang ) + include(CMakeFiles/NightlyMemCheck.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyMemCheck.dir/progress.make b/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyMemCheck.dir/progress.make new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyMemCheck.dir/progress.make @@ -0,0 +1 @@ + diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyMemoryCheck.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyMemoryCheck.dir/DependInfo.cmake new file mode 100644 index 0000000..19fab21 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyMemoryCheck.dir/DependInfo.cmake @@ -0,0 +1,11 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + ) +# The set of files for implicit dependencies of each language: + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyMemoryCheck.dir/build.make b/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyMemoryCheck.dir/build.make new file mode 100644 index 0000000..d0647dd --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyMemoryCheck.dir/build.make @@ -0,0 +1,76 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Utility rule file for NightlyMemoryCheck. + +# Include the progress variables for this target. +include CMakeFiles/NightlyMemoryCheck.dir/progress.make + +CMakeFiles/NightlyMemoryCheck: + /usr/bin/ctest -D NightlyMemoryCheck + +NightlyMemoryCheck: CMakeFiles/NightlyMemoryCheck +NightlyMemoryCheck: CMakeFiles/NightlyMemoryCheck.dir/build.make + +.PHONY : NightlyMemoryCheck + +# Rule to build all files generated by this target. +CMakeFiles/NightlyMemoryCheck.dir/build: NightlyMemoryCheck + +.PHONY : CMakeFiles/NightlyMemoryCheck.dir/build + +CMakeFiles/NightlyMemoryCheck.dir/clean: + $(CMAKE_COMMAND) -P CMakeFiles/NightlyMemoryCheck.dir/cmake_clean.cmake +.PHONY : CMakeFiles/NightlyMemoryCheck.dir/clean + +CMakeFiles/NightlyMemoryCheck.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/NightlyMemoryCheck.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : CMakeFiles/NightlyMemoryCheck.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyMemoryCheck.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyMemoryCheck.dir/cmake_clean.cmake new file mode 100644 index 0000000..8846611 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyMemoryCheck.dir/cmake_clean.cmake @@ -0,0 +1,8 @@ +file(REMOVE_RECURSE + "CMakeFiles/NightlyMemoryCheck" +) + +# Per-language clean rules from dependency scanning. +foreach(lang ) + include(CMakeFiles/NightlyMemoryCheck.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyMemoryCheck.dir/progress.make b/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyMemoryCheck.dir/progress.make new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyMemoryCheck.dir/progress.make @@ -0,0 +1 @@ + diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyStart.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyStart.dir/DependInfo.cmake new file mode 100644 index 0000000..19fab21 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyStart.dir/DependInfo.cmake @@ -0,0 +1,11 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + ) +# The set of files for implicit dependencies of each language: + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyStart.dir/build.make b/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyStart.dir/build.make new file mode 100644 index 0000000..dd80cbf --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyStart.dir/build.make @@ -0,0 +1,76 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Utility rule file for NightlyStart. + +# Include the progress variables for this target. +include CMakeFiles/NightlyStart.dir/progress.make + +CMakeFiles/NightlyStart: + /usr/bin/ctest -D NightlyStart + +NightlyStart: CMakeFiles/NightlyStart +NightlyStart: CMakeFiles/NightlyStart.dir/build.make + +.PHONY : NightlyStart + +# Rule to build all files generated by this target. +CMakeFiles/NightlyStart.dir/build: NightlyStart + +.PHONY : CMakeFiles/NightlyStart.dir/build + +CMakeFiles/NightlyStart.dir/clean: + $(CMAKE_COMMAND) -P CMakeFiles/NightlyStart.dir/cmake_clean.cmake +.PHONY : CMakeFiles/NightlyStart.dir/clean + +CMakeFiles/NightlyStart.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/NightlyStart.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : CMakeFiles/NightlyStart.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyStart.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyStart.dir/cmake_clean.cmake new file mode 100644 index 0000000..6a2c6c6 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyStart.dir/cmake_clean.cmake @@ -0,0 +1,8 @@ +file(REMOVE_RECURSE + "CMakeFiles/NightlyStart" +) + +# Per-language clean rules from dependency scanning. +foreach(lang ) + include(CMakeFiles/NightlyStart.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyStart.dir/progress.make b/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyStart.dir/progress.make new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyStart.dir/progress.make @@ -0,0 +1 @@ + diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlySubmit.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlySubmit.dir/DependInfo.cmake new file mode 100644 index 0000000..19fab21 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlySubmit.dir/DependInfo.cmake @@ -0,0 +1,11 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + ) +# The set of files for implicit dependencies of each language: + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlySubmit.dir/build.make b/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlySubmit.dir/build.make new file mode 100644 index 0000000..1c49849 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlySubmit.dir/build.make @@ -0,0 +1,76 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Utility rule file for NightlySubmit. + +# Include the progress variables for this target. +include CMakeFiles/NightlySubmit.dir/progress.make + +CMakeFiles/NightlySubmit: + /usr/bin/ctest -D NightlySubmit + +NightlySubmit: CMakeFiles/NightlySubmit +NightlySubmit: CMakeFiles/NightlySubmit.dir/build.make + +.PHONY : NightlySubmit + +# Rule to build all files generated by this target. +CMakeFiles/NightlySubmit.dir/build: NightlySubmit + +.PHONY : CMakeFiles/NightlySubmit.dir/build + +CMakeFiles/NightlySubmit.dir/clean: + $(CMAKE_COMMAND) -P CMakeFiles/NightlySubmit.dir/cmake_clean.cmake +.PHONY : CMakeFiles/NightlySubmit.dir/clean + +CMakeFiles/NightlySubmit.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/NightlySubmit.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : CMakeFiles/NightlySubmit.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlySubmit.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlySubmit.dir/cmake_clean.cmake new file mode 100644 index 0000000..6f88ccc --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlySubmit.dir/cmake_clean.cmake @@ -0,0 +1,8 @@ +file(REMOVE_RECURSE + "CMakeFiles/NightlySubmit" +) + +# Per-language clean rules from dependency scanning. +foreach(lang ) + include(CMakeFiles/NightlySubmit.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlySubmit.dir/progress.make b/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlySubmit.dir/progress.make new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlySubmit.dir/progress.make @@ -0,0 +1 @@ + diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyTest.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyTest.dir/DependInfo.cmake new file mode 100644 index 0000000..19fab21 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyTest.dir/DependInfo.cmake @@ -0,0 +1,11 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + ) +# The set of files for implicit dependencies of each language: + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyTest.dir/build.make b/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyTest.dir/build.make new file mode 100644 index 0000000..c42f752 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyTest.dir/build.make @@ -0,0 +1,76 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Utility rule file for NightlyTest. + +# Include the progress variables for this target. +include CMakeFiles/NightlyTest.dir/progress.make + +CMakeFiles/NightlyTest: + /usr/bin/ctest -D NightlyTest + +NightlyTest: CMakeFiles/NightlyTest +NightlyTest: CMakeFiles/NightlyTest.dir/build.make + +.PHONY : NightlyTest + +# Rule to build all files generated by this target. +CMakeFiles/NightlyTest.dir/build: NightlyTest + +.PHONY : CMakeFiles/NightlyTest.dir/build + +CMakeFiles/NightlyTest.dir/clean: + $(CMAKE_COMMAND) -P CMakeFiles/NightlyTest.dir/cmake_clean.cmake +.PHONY : CMakeFiles/NightlyTest.dir/clean + +CMakeFiles/NightlyTest.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/NightlyTest.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : CMakeFiles/NightlyTest.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyTest.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyTest.dir/cmake_clean.cmake new file mode 100644 index 0000000..8f40bb8 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyTest.dir/cmake_clean.cmake @@ -0,0 +1,8 @@ +file(REMOVE_RECURSE + "CMakeFiles/NightlyTest" +) + +# Per-language clean rules from dependency scanning. +foreach(lang ) + include(CMakeFiles/NightlyTest.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyTest.dir/progress.make b/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyTest.dir/progress.make new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyTest.dir/progress.make @@ -0,0 +1 @@ + diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyUpdate.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyUpdate.dir/DependInfo.cmake new file mode 100644 index 0000000..19fab21 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyUpdate.dir/DependInfo.cmake @@ -0,0 +1,11 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + ) +# The set of files for implicit dependencies of each language: + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyUpdate.dir/build.make b/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyUpdate.dir/build.make new file mode 100644 index 0000000..25573c7 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyUpdate.dir/build.make @@ -0,0 +1,76 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Utility rule file for NightlyUpdate. + +# Include the progress variables for this target. +include CMakeFiles/NightlyUpdate.dir/progress.make + +CMakeFiles/NightlyUpdate: + /usr/bin/ctest -D NightlyUpdate + +NightlyUpdate: CMakeFiles/NightlyUpdate +NightlyUpdate: CMakeFiles/NightlyUpdate.dir/build.make + +.PHONY : NightlyUpdate + +# Rule to build all files generated by this target. +CMakeFiles/NightlyUpdate.dir/build: NightlyUpdate + +.PHONY : CMakeFiles/NightlyUpdate.dir/build + +CMakeFiles/NightlyUpdate.dir/clean: + $(CMAKE_COMMAND) -P CMakeFiles/NightlyUpdate.dir/cmake_clean.cmake +.PHONY : CMakeFiles/NightlyUpdate.dir/clean + +CMakeFiles/NightlyUpdate.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/NightlyUpdate.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : CMakeFiles/NightlyUpdate.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyUpdate.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyUpdate.dir/cmake_clean.cmake new file mode 100644 index 0000000..0f10e82 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyUpdate.dir/cmake_clean.cmake @@ -0,0 +1,8 @@ +file(REMOVE_RECURSE + "CMakeFiles/NightlyUpdate" +) + +# Per-language clean rules from dependency scanning. +foreach(lang ) + include(CMakeFiles/NightlyUpdate.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyUpdate.dir/progress.make b/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyUpdate.dir/progress.make new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/NightlyUpdate.dir/progress.make @@ -0,0 +1 @@ + diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/TargetDirectories.txt b/libcodec2-android/src/codec2/build_linux/CMakeFiles/TargetDirectories.txt new file mode 100644 index 0000000..21c5d45 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/TargetDirectories.txt @@ -0,0 +1,139 @@ +/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/rebuild_cache.dir +/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/test.dir +/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/ContinuousSubmit.dir +/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/ContinuousMemCheck.dir +/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/ContinuousConfigure.dir +/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/ExperimentalSubmit.dir +/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/ExperimentalMemCheck.dir +/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/install/strip.dir +/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/ExperimentalTest.dir +/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/NightlyUpdate.dir +/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/install/local.dir +/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/NightlyStart.dir +/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/NightlyMemoryCheck.dir +/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/NightlyBuild.dir +/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/ExperimentalUpdate.dir +/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/ContinuousBuild.dir +/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/Continuous.dir +/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/Experimental.dir +/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/ExperimentalConfigure.dir +/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/edit_cache.dir +/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/NightlyTest.dir +/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/NightlyCoverage.dir +/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/install.dir +/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/ExperimentalCoverage.dir +/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/NightlyMemCheck.dir +/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/ContinuousStart.dir +/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/NightlySubmit.dir +/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/ContinuousCoverage.dir +/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/Nightly.dir +/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/NightlyConfigure.dir +/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/ExperimentalStart.dir +/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/list_install_components.dir +/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/ContinuousTest.dir +/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/ContinuousUpdate.dir +/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/ExperimentalBuild.dir +/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/install/local.dir +/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/install.dir +/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/rebuild_cache.dir +/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/test.dir +/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/ldpc_dec.dir +/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/ldpc_enc.dir +/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/ldpc_noise.dir +/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/tollr.dir +/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/cohpsk_ch.dir +/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/cohpsk_put_test_bits.dir +/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/cohpsk_get_test_bits.dir +/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/cohpsk_demod.dir +/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/vhf_frame_c2.dir +/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/freedv_data_raw_rx.dir +/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/insert_errors.dir +/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/fm_demod.dir +/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/list_install_components.dir +/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/fdmdv_channel.dir +/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/freedv_data_raw_tx.dir +/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/cohpsk_mod.dir +/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/c2dec.dir +/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/freedv_rx.dir +/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/fdmdv_get_test_bits.dir +/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/c2demo.dir +/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/fdmdv_put_test_bits.dir +/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/edit_cache.dir +/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir +/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/ofdm_get_test_bits.dir +/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/freedv_tx.dir +/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/c2enc.dir +/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/generate_codebook.dir +/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/freedv_mixed_tx.dir +/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/c2sim.dir +/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/install/strip.dir +/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/fdmdv_demod.dir +/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/vhf_deframe_c2.dir +/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/fsk_mod.dir +/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/fsk_put_test_bits.dir +/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/freedv_data_tx.dir +/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/freedv_data_rx.dir +/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/freedv_mixed_rx.dir +/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/fmfsk_demod.dir +/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/fsk_mod_ext_vco.dir +/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/fsk_demod.dir +/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/fsk_get_test_bits.dir +/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/framer.dir +/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/deframer.dir +/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/ofdm_mod.dir +/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/fdmdv_mod.dir +/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/ofdm_demod.dir +/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/ofdm_put_test_bits.dir +/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/fmfsk_mod.dir +/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/install/strip.dir +/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/install/local.dir +/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/list_install_components.dir +/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/rebuild_cache.dir +/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/edit_cache.dir +/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/test.dir +/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/tqam16.dir +/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/tfsk_llr.dir +/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/tfreedv_2400B_rawdata.dir +/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/tfreedv_2400A_rawdata.dir +/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/install.dir +/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/thash.dir +/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/tfreedv_800XA_rawdata.dir +/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/tfreedv_data_channel.dir +/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/tofdm.dir +/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/tvq_mbest.dir +/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/tdeframer.dir +/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/ofdm_stack.dir +/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/tfsk.dir +/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/fdmdv_mem.dir +/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/tfdmdv.dir +/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/tcohpsk.dir +/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/tfifo.dir +/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/ofdm_mem.dir +/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/tfmfsk.dir +/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/function_trace.dir +/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/tnewamp1.dir +/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/compare_ints.dir +/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/tst_codec2_fft_init.dir +/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/compare_floats.dir +/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/test_phi0.dir +/home/sh/Downloads/hackrf/codec2/build_linux/misc/CMakeFiles/install/local.dir +/home/sh/Downloads/hackrf/codec2/build_linux/misc/CMakeFiles/install.dir +/home/sh/Downloads/hackrf/codec2/build_linux/misc/CMakeFiles/list_install_components.dir +/home/sh/Downloads/hackrf/codec2/build_linux/misc/CMakeFiles/rebuild_cache.dir +/home/sh/Downloads/hackrf/codec2/build_linux/misc/CMakeFiles/extract.dir +/home/sh/Downloads/hackrf/codec2/build_linux/misc/CMakeFiles/tdec.dir +/home/sh/Downloads/hackrf/codec2/build_linux/misc/CMakeFiles/16_8_short.dir +/home/sh/Downloads/hackrf/codec2/build_linux/misc/CMakeFiles/t16_8.dir +/home/sh/Downloads/hackrf/codec2/build_linux/misc/CMakeFiles/t16_8_short.dir +/home/sh/Downloads/hackrf/codec2/build_linux/misc/CMakeFiles/mksine.dir +/home/sh/Downloads/hackrf/codec2/build_linux/misc/CMakeFiles/tnlp.dir +/home/sh/Downloads/hackrf/codec2/build_linux/misc/CMakeFiles/vqtrain.dir +/home/sh/Downloads/hackrf/codec2/build_linux/misc/CMakeFiles/tlininterp.dir +/home/sh/Downloads/hackrf/codec2/build_linux/misc/CMakeFiles/test.dir +/home/sh/Downloads/hackrf/codec2/build_linux/misc/CMakeFiles/pre.dir +/home/sh/Downloads/hackrf/codec2/build_linux/misc/CMakeFiles/raw2h.dir +/home/sh/Downloads/hackrf/codec2/build_linux/misc/CMakeFiles/timpulse.dir +/home/sh/Downloads/hackrf/codec2/build_linux/misc/CMakeFiles/install/strip.dir +/home/sh/Downloads/hackrf/codec2/build_linux/misc/CMakeFiles/est_n0.dir +/home/sh/Downloads/hackrf/codec2/build_linux/misc/CMakeFiles/vq_mbest.dir +/home/sh/Downloads/hackrf/codec2/build_linux/misc/CMakeFiles/edit_cache.dir diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/cmake.check_cache b/libcodec2-android/src/codec2/build_linux/CMakeFiles/cmake.check_cache new file mode 100644 index 0000000..3dccd73 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/cmake.check_cache @@ -0,0 +1 @@ +# This file is generated by cmake for dependency checking of the CMakeCache.txt file diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/feature_tests.bin b/libcodec2-android/src/codec2/build_linux/CMakeFiles/feature_tests.bin new file mode 100755 index 0000000..cbce1e1 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/CMakeFiles/feature_tests.bin differ diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/feature_tests.c b/libcodec2-android/src/codec2/build_linux/CMakeFiles/feature_tests.c new file mode 100644 index 0000000..83e86dd --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/feature_tests.c @@ -0,0 +1,34 @@ + + const char features[] = {"\n" +"C_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 304 +"1" +#else +"0" +#endif +"c_function_prototypes\n" +"C_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 304 && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L +"1" +#else +"0" +#endif +"c_restrict\n" +"C_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201000L +"1" +#else +"0" +#endif +"c_static_assert\n" +"C_FEATURE:" +#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 304 && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L +"1" +#else +"0" +#endif +"c_variadic_macros\n" + +}; + +int main(int argc, char** argv) { (void)argv; return features[argc]; } diff --git a/libcodec2-android/src/codec2/build_linux/CMakeFiles/progress.marks b/libcodec2-android/src/codec2/build_linux/CMakeFiles/progress.marks new file mode 100644 index 0000000..29d6383 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CMakeFiles/progress.marks @@ -0,0 +1 @@ +100 diff --git a/libcodec2-android/src/codec2/build_linux/CTestTestfile.cmake b/libcodec2-android/src/codec2/build_linux/CTestTestfile.cmake new file mode 100644 index 0000000..a28b067 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/CTestTestfile.cmake @@ -0,0 +1,240 @@ +# CMake generated Testfile for +# Source directory: /home/sh/Downloads/hackrf/codec2 +# Build directory: /home/sh/Downloads/hackrf/codec2/build_linux +# +# This file includes the relevant testing commands required for +# testing this directory and lists subdirectories to be tested as well. +add_test(test_freedv_get_hash "sh" "-c" "/home/sh/Downloads/hackrf/codec2/build_linux/unittest/thash") +add_test(test_CML_ldpcut "sh" "-c" "cd /home/sh/Downloads/hackrf/codec2/octave; SHORT_VERSION_FOR_CTEST=1 octave --no-gui -qf ldpcut.m") +set_tests_properties(test_CML_ldpcut PROPERTIES PASS_REGULAR_EXPRESSION "Nerr: 0") +add_test(test_codec2_700c_octave_port "sh" "-c" " + cd /home/sh/Downloads/hackrf/codec2/build_linux/src; + ./c2sim /home/sh/Downloads/hackrf/codec2/raw/cq_ref.raw --phase0 --postfilter --dump cq_ref --lpc 10 --dump_pitch_e cq_ref_pitche.txt; + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest; ./tnewamp1 /home/sh/Downloads/hackrf/codec2/raw/cq_ref.raw; + cd /home/sh/Downloads/hackrf/codec2/octave; + DISPLAY=\"\" octave-cli -qf --eval 'tnewamp1(\"/home/sh/Downloads/hackrf/codec2/build_linux/src/cq_ref\", \"/home/sh/Downloads/hackrf/codec2/build_linux/unittest\")'") +set_tests_properties(test_codec2_700c_octave_port PROPERTIES PASS_REGULAR_EXPRESSION "fails: 0") +add_test(test_FDMDV_modem_octave_port "sh" "-c" "/home/sh/Downloads/hackrf/codec2/build_linux/unittest/tfdmdv && DISPLAY=\"\" octave-cli --no-gui -qf /home/sh/Downloads/hackrf/codec2/octave/tfdmdv.m") +set_tests_properties(test_FDMDV_modem_octave_port PROPERTIES PASS_REGULAR_EXPRESSION "fails: 0" WORKING_DIRECTORY "/home/sh/Downloads/hackrf/codec2/octave") +add_test(test_COHPSK_modem_octave_port "sh" "-c" "/home/sh/Downloads/hackrf/codec2/build_linux/unittest/tcohpsk && DISPLAY=\"\" octave-cli --no-gui -qf /home/sh/Downloads/hackrf/codec2/octave/tcohpsk.m") +set_tests_properties(test_COHPSK_modem_octave_port PROPERTIES PASS_REGULAR_EXPRESSION "fails: 0" WORKING_DIRECTORY "/home/sh/Downloads/hackrf/codec2/octave") +add_test(test_COHPSK_modem_AWGN_BER "sh" "-c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/cohpsk_get_test_bits - 5600 | /home/sh/Downloads/hackrf/codec2/build_linux/src/cohpsk_mod - - | /home/sh/Downloads/hackrf/codec2/build_linux/src/cohpsk_ch - - -30 | /home/sh/Downloads/hackrf/codec2/build_linux/src/cohpsk_demod - - | /home/sh/Downloads/hackrf/codec2/build_linux/src/cohpsk_put_test_bits -") +add_test(test_COHPSK_modem_freq_offset "sh" "-c" "set -x; /home/sh/Downloads/hackrf/codec2/build_linux/src/cohpsk_get_test_bits - 5600 | /home/sh/Downloads/hackrf/codec2/build_linux/src/cohpsk_mod - - | /home/sh/Downloads/hackrf/codec2/build_linux/src/cohpsk_ch - - -40 -f -20 | /home/sh/Downloads/hackrf/codec2/build_linux/src/cohpsk_demod -v - - 2>log.txt | /home/sh/Downloads/hackrf/codec2/build_linux/src/cohpsk_put_test_bits - ; ! grep 'lost sync' log.txt") +add_test(test_OFDM_qam16 "sh" "-c" "/home/sh/Downloads/hackrf/codec2/build_linux/unittest/tqam16") +add_test(test_OFDM_modem_octave_port "sh" "-c" "PATH_TO_TOFDM=/home/sh/Downloads/hackrf/codec2/build_linux/unittest/tofdm DISPLAY=\"\" octave-cli --no-gui -qf /home/sh/Downloads/hackrf/codec2/octave/tofdm.m") +set_tests_properties(test_OFDM_modem_octave_port PROPERTIES PASS_REGULAR_EXPRESSION "fails: 0" WORKING_DIRECTORY "/home/sh/Downloads/hackrf/codec2/octave") +add_test(test_OFDM_modem_octave_port_Nc_31 "sh" "-c" "NC=31 PATH_TO_TOFDM=/home/sh/Downloads/hackrf/codec2/build_linux/unittest/tofdm DISPLAY=\"\" octave-cli --no-gui -qf /home/sh/Downloads/hackrf/codec2/octave/tofdm.m") +set_tests_properties(test_OFDM_modem_octave_port_Nc_31 PROPERTIES PASS_REGULAR_EXPRESSION "fails: 0" WORKING_DIRECTORY "/home/sh/Downloads/hackrf/codec2/octave") +add_test(test_OFDM_modem_700D "sh" "-c" "cd /home/sh/Downloads/hackrf/codec2/build_linux/src; + ./ofdm_get_test_bits - | + ./ofdm_mod | + ./ofdm_demod --testframes > /dev/null") +add_test(test_OFDM_modem_700D_ldpc "sh" "-c" "cd /home/sh/Downloads/hackrf/codec2/build_linux/src; + ./ofdm_get_test_bits - --ldpc | + ./ofdm_mod --ldpc | + ./ofdm_demod --ldpc --testframes > /dev/null") +add_test(test_OFDM_modem_2020_ldpc "sh" "-c" "cd /home/sh/Downloads/hackrf/codec2/build_linux/src; + ./fsk_get_test_bits - 5000 | + ./ofdm_mod --ldpc --mode 2020 -p 312 | + ./ofdm_demod --ldpc --mode 2020 -p 312 | + ./fsk_put_test_bits - -q") +add_test(test_OFDM_modem_AWGN_BER "sh" "-c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/ofdm_mod --in /dev/zero --ldpc --testframes 60 --txbpf | /home/sh/Downloads/hackrf/codec2/build_linux/src/cohpsk_ch - - -20 --Fs 8000 -f -50 | /home/sh/Downloads/hackrf/codec2/build_linux/src/ofdm_demod --out /dev/null --testframes --ldpc --verbose 1") +add_test(test_OFDM_modem_fading_BER "/home/sh/Downloads/hackrf/codec2/build_linux/unittest/ofdm_fade.sh") +set_tests_properties(test_OFDM_modem_fading_BER PROPERTIES WORKING_DIRECTORY "/home/sh/Downloads/hackrf/codec2/unittest") +add_test(test_OFDM_modem_phase_est_bw "sh" "-c" "cd /home/sh/Downloads/hackrf/codec2/unittest; + PATH=\$PATH:/home/sh/Downloads/hackrf/codec2/build_linux/src ./ofdm_phase_est_bw.sh") +add_test(test_OFDM_modem_fading_DPSK_BER "sh" "-c" "cd /home/sh/Downloads/hackrf/codec2/unittest; + PATH=\$PATH:/home/sh/Downloads/hackrf/codec2/build_linux/src ./ofdm_fade_dpsk.sh") +add_test(test_OFDM_modem_time_sync_700D "sh" "-c" "cd /home/sh/Downloads/hackrf/codec2/unittest; + PATH=\$PATH:/home/sh/Downloads/hackrf/codec2/build_linux/src ./ofdm_time_sync.sh 700D") +add_test(test_OFDM_modem_datac1_octave "sh" "-c" "cd /home/sh/Downloads/hackrf/codec2/build_linux; + ./src/ofdm_mod --mode datac1 --in /dev/zero --testframes 5 --verbose 1 > test.raw; + cd /home/sh/Downloads/hackrf/codec2/octave; + DISPLAY=\"\" octave-cli -qf --eval 'ofdm_rx(\"/home/sh/Downloads/hackrf/codec2/build_linux/test.raw\",\"datac1\")'") +set_tests_properties(test_OFDM_modem_datac1_octave PROPERTIES PASS_REGULAR_EXPRESSION "BER..: 0.0000") +add_test(test_OFDM_modem_datac1 "sh" "-c" "cd /home/sh/Downloads/hackrf/codec2/build_linux/src; + ./ofdm_mod --mode datac1 --in /dev/zero --testframes 10 --verbose 1 | + ./ofdm_demod --mode datac1 --out /dev/null --testframes --verbose 1") +add_test(test_OFDM_modem_datac1_ldpc "sh" "-c" "cd /home/sh/Downloads/hackrf/codec2/build_linux/src; + ./ofdm_mod --mode datac1 --in /dev/zero --testframes 10 --ldpc --verbose 1 | + ./ofdm_demod --mode datac1 --out /dev/null --testframes --ldpc --verbose 1") +add_test(test_ldpc_enc_dec "sh" "-c" "cd /home/sh/Downloads/hackrf/codec2/build_linux/src; + ./ldpc_enc /dev/zero - --sd --code HRA_112_112 --testframes 200 | + ./ldpc_noise - - 0.5 | + ./ldpc_dec - /dev/null --code HRA_112_112 --sd --testframes") +add_test(test_ldpc_enc_dec_HRAb_396_504 "sh" "-c" "cd /home/sh/Downloads/hackrf/codec2/build_linux/src; + ./ldpc_enc /dev/zero - --sd --code HRAb_396_504 --testframes 200 | + ./ldpc_noise - - -2.0 | + ./ldpc_dec - /dev/null --code HRAb_396_504 --sd --testframes") +add_test(test_ldpc_enc_dec_H_256_768_22 "sh" "-c" "cd /home/sh/Downloads/hackrf/codec2/build_linux/src; + ./ldpc_enc /dev/zero - --sd --code H_256_768_22 --testframes 200 | + ./ldpc_noise - - 3.0 | + ./ldpc_dec - /dev/null --code H_256_768_22 --sd --testframes") +add_test(test_ldpc_enc_dec_H_256_512_4 "sh" "-c" "cd /home/sh/Downloads/hackrf/codec2/build_linux/src; + ./ldpc_enc /dev/zero - --sd --code H_256_512_4 --testframes 200 | + ./ldpc_noise - - 0.5 | + ./ldpc_dec - /dev/null --code H_256_512_4 --sd --testframes") +add_test(test_ldpc_enc_dec_HRAa_1536_512 "sh" "-c" "cd /home/sh/Downloads/hackrf/codec2/build_linux/src; + ./ldpc_enc /dev/zero - --sd --code HRAa_1536_512 --testframes 200 | + ./ldpc_noise - - -2 | + ./ldpc_dec - /dev/null --code HRAa_1536_512 --sd --testframes") +add_test(test_ldpc_enc_dec_H_128_256_5 "sh" "-c" "cd /home/sh/Downloads/hackrf/codec2/build_linux/src; + ./ldpc_enc /dev/zero - --sd --code H_128_256_5 --testframes 200 | + ./ldpc_noise - - 0.5 | + ./ldpc_dec - /dev/null --code H_128_256_5 --sd --testframes") +add_test(test_freedv_api_1600 "sh" "-c" "cd /home/sh/Downloads/hackrf/codec2/build_linux/src; + ./freedv_tx 1600 ../../raw/ve9qrp_10s.raw - | ./freedv_rx 1600 - /dev/null") +set_tests_properties(test_freedv_api_1600 PROPERTIES PASS_REGULAR_EXPRESSION "frames decoded: 503") +add_test(test_freedv_api_700C "sh" "-c" "cd /home/sh/Downloads/hackrf/codec2/build_linux/src; + ./freedv_tx 700C ../../raw/ve9qrp_10s.raw - | ./freedv_rx 700C - /dev/null") +set_tests_properties(test_freedv_api_700C PROPERTIES PASS_REGULAR_EXPRESSION "frames decoded: 125") +add_test(test_freedv_api_700D_backwards_compatability "sh" "-c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/freedv_rx 700D /home/sh/Downloads/hackrf/codec2/raw/testframes_700d.raw /dev/null --testframes --discard") +add_test(test_freedv_api_700D_burble "sh" "-c" "cd /home/sh/Downloads/hackrf/codec2/build_linux/src; + ./freedv_tx 700D ../../raw/ve9qrp.raw - | + ./cohpsk_ch - - -10 --Fs 8000 | + ./freedv_rx 700D - /dev/null --squelch -2") +set_tests_properties(test_freedv_api_700D_burble PROPERTIES PASS_REGULAR_EXPRESSION "frames decoded: 746 output speech samples: 0") +add_test(test_freedv_api_700D_AWGN_BER "sh" "-c" "dd bs=2560 count=120 if=/dev/zero | /home/sh/Downloads/hackrf/codec2/build_linux/src/freedv_tx 700D - - --testframes | /home/sh/Downloads/hackrf/codec2/build_linux/src/cohpsk_ch - - -20 --Fs 8000 -f -10 | /home/sh/Downloads/hackrf/codec2/build_linux/src/freedv_rx 700D - /dev/null --testframes --discard") +add_test(test_freedv_api_700D_AWGN_BER_USECOMPLEX "sh" "-c" "dd bs=2560 count=120 if=/dev/zero | /home/sh/Downloads/hackrf/codec2/build_linux/src/freedv_tx 700D - - --testframes | /home/sh/Downloads/hackrf/codec2/build_linux/src/cohpsk_ch - - -20 --Fs 8000 -f -10 | /home/sh/Downloads/hackrf/codec2/build_linux/src/freedv_rx 700D - /dev/null --testframes --discard --usecomplex") +add_test(test_freedv_api_2400A "sh" "-c" "cd /home/sh/Downloads/hackrf/codec2/build_linux/src; + ./freedv_tx 2400A ../../raw/ve9qrp_10s.raw - | ./freedv_rx 2400A - /dev/null") +set_tests_properties(test_freedv_api_2400A PROPERTIES PASS_REGULAR_EXPRESSION "frames decoded: 250") +add_test(test_freedv_api_2400B "sh" "-c" "cd /home/sh/Downloads/hackrf/codec2/build_linux/src; + ./freedv_tx 2400B ../../raw/ve9qrp_10s.raw - | ./freedv_rx 2400B - /dev/null") +set_tests_properties(test_freedv_api_2400B PROPERTIES PASS_REGULAR_EXPRESSION "frames decoded: 250") +add_test(test_freedv_api_800XA "sh" "-c" "cd /home/sh/Downloads/hackrf/codec2/build_linux/src; + ./freedv_tx 800XA ../../raw/ve9qrp_10s.raw - | ./freedv_rx 800XA - /dev/null") +set_tests_properties(test_freedv_api_800XA PROPERTIES PASS_REGULAR_EXPRESSION "frames decoded: 125") +add_test(test_freedv_api_rawdata_800XA "sh" "-c" "./tfreedv_800XA_rawdata") +set_tests_properties(test_freedv_api_rawdata_800XA PROPERTIES WORKING_DIRECTORY "/home/sh/Downloads/hackrf/codec2/build_linux/unittest") +add_test(test_freedv_api_rawdata_2400A "sh" "-c" "./tfreedv_2400A_rawdata") +set_tests_properties(test_freedv_api_rawdata_2400A PROPERTIES WORKING_DIRECTORY "/home/sh/Downloads/hackrf/codec2/build_linux/unittest") +add_test(test_freedv_api_rawdata_2400B "sh" "-c" "./tfreedv_2400B_rawdata") +set_tests_properties(test_freedv_api_rawdata_2400B PROPERTIES WORKING_DIRECTORY "/home/sh/Downloads/hackrf/codec2/build_linux/unittest") +add_test(test_fifo "/home/sh/Downloads/hackrf/codec2/build_linux/unittest/tfifo") +add_test(test_memory_leak_FreeDV_1600_tx "sh" "-c" " valgrind --leak-check=full --show-leak-kinds=all --track-origins=yes ./freedv_tx 1600 /home/sh/Downloads/hackrf/codec2/raw/hts1a.raw /dev/null") +set_tests_properties(test_memory_leak_FreeDV_1600_tx PROPERTIES PASS_REGULAR_EXPRESSION "ERROR SUMMARY: 0 errors" WORKING_DIRECTORY "/home/sh/Downloads/hackrf/codec2/build_linux/src") +add_test(test_memory_leak_FreeDV_1600_rx "sh" "-c" "./freedv_tx 1600 /home/sh/Downloads/hackrf/codec2/raw/hts1a.raw t.raw; valgrind --leak-check=full --show-leak-kinds=all --track-origins=yes ./freedv_rx 1600 t.raw /dev/null") +set_tests_properties(test_memory_leak_FreeDV_1600_rx PROPERTIES PASS_REGULAR_EXPRESSION "ERROR SUMMARY: 0 errors" WORKING_DIRECTORY "/home/sh/Downloads/hackrf/codec2/build_linux/src") +add_test(test_memory_leak_FreeDV_700D_tx "sh" "-c" " valgrind --leak-check=full --show-leak-kinds=all --track-origins=yes ./freedv_tx 700D /home/sh/Downloads/hackrf/codec2/raw/hts1a.raw /dev/null") +set_tests_properties(test_memory_leak_FreeDV_700D_tx PROPERTIES PASS_REGULAR_EXPRESSION "ERROR SUMMARY: 0 errors" WORKING_DIRECTORY "/home/sh/Downloads/hackrf/codec2/build_linux/src") +add_test(test_memory_leak_FreeDV_700D_rx "sh" "-c" "./freedv_tx 700D /home/sh/Downloads/hackrf/codec2/raw/hts1a.raw t.raw; valgrind --leak-check=full --show-leak-kinds=all --track-origins=yes ./freedv_rx 700D t.raw /dev/null") +set_tests_properties(test_memory_leak_FreeDV_700D_rx PROPERTIES PASS_REGULAR_EXPRESSION "ERROR SUMMARY: 0 errors" WORKING_DIRECTORY "/home/sh/Downloads/hackrf/codec2/build_linux/src") +add_test(test_memory_leak_FreeDV_700C_tx "sh" "-c" " valgrind --leak-check=full --show-leak-kinds=all --track-origins=yes ./freedv_tx 700C /home/sh/Downloads/hackrf/codec2/raw/hts1a.raw /dev/null") +set_tests_properties(test_memory_leak_FreeDV_700C_tx PROPERTIES PASS_REGULAR_EXPRESSION "ERROR SUMMARY: 0 errors" WORKING_DIRECTORY "/home/sh/Downloads/hackrf/codec2/build_linux/src") +add_test(test_memory_leak_FreeDV_700C_rx "sh" "-c" "cd /home/sh/Downloads/hackrf/codec2/build_linux/src; + ./freedv_tx 700C /home/sh/Downloads/hackrf/codec2/raw/hts1a.raw t.raw; valgrind --leak-check=full --show-leak-kinds=all --track-origins=yes ./freedv_rx 700C t.raw /dev/null") +set_tests_properties(test_memory_leak_FreeDV_700C_rx PROPERTIES PASS_REGULAR_EXPRESSION "ERROR SUMMARY: 0 errors") +add_test(test_memory_leak_FreeDV_FSK_LDPC_tx "sh" "-c" "cd /home/sh/Downloads/hackrf/codec2/build_linux/src; + valgrind --leak-check=full --show-leak-kinds=all --track-origins=yes ./freedv_data_raw_tx --testframes 10 FSK_LDPC /dev/zero /dev/null") +set_tests_properties(test_memory_leak_FreeDV_FSK_LDPC_tx PROPERTIES PASS_REGULAR_EXPRESSION "ERROR SUMMARY: 0 errors") +add_test(test_codec2_mode_dot_c2 "sh" "-c" "./c2enc 700C /home/sh/Downloads/hackrf/codec2/raw/hts1a.raw hts1a.c2 && ./c2dec 1600 hts1a.c2 /dev/null") +set_tests_properties(test_codec2_mode_dot_c2 PROPERTIES PASS_REGULAR_EXPRESSION "mode 8" WORKING_DIRECTORY "/home/sh/Downloads/hackrf/codec2/build_linux/src") +add_test(test_codec2_mode_3200 "sh" "-c" "./c2enc 3200 /home/sh/Downloads/hackrf/codec2/raw/hts1a.raw - | ./c2dec 3200 - - | sox -t .s16 -r 8000 - hts1a_3200.wav") +set_tests_properties(test_codec2_mode_3200 PROPERTIES WORKING_DIRECTORY "/home/sh/Downloads/hackrf/codec2/build_linux/src") +add_test(test_codec2_mode_2400 "sh" "-c" "./c2enc 2400 /home/sh/Downloads/hackrf/codec2/raw/hts1a.raw - | ./c2dec 2400 - - | sox -t .s16 -r 8000 - hts1a_2400.wav") +set_tests_properties(test_codec2_mode_2400 PROPERTIES WORKING_DIRECTORY "/home/sh/Downloads/hackrf/codec2/build_linux/src") +add_test(test_codec2_mode_1400 "sh" "-c" "./c2enc 1400 /home/sh/Downloads/hackrf/codec2/raw/hts1a.raw - | ./c2dec 1400 - - | sox -t .s16 -r 8000 - hts1a_1400.wav") +set_tests_properties(test_codec2_mode_1400 PROPERTIES WORKING_DIRECTORY "/home/sh/Downloads/hackrf/codec2/build_linux/src") +add_test(test_codec2_mode_1300 "sh" "-c" "./c2enc 1300 /home/sh/Downloads/hackrf/codec2/raw/hts1a.raw - | ./c2dec 1300 - - | sox -t .s16 -r 8000 - hts1a_1300.wav") +set_tests_properties(test_codec2_mode_1300 PROPERTIES WORKING_DIRECTORY "/home/sh/Downloads/hackrf/codec2/build_linux/src") +add_test(test_codec2_mode_1200 "sh" "-c" "./c2enc 1200 /home/sh/Downloads/hackrf/codec2/raw/hts1a.raw - | ./c2dec 1200 - - | sox -t .s16 -r 8000 - hts1a_1200.wav") +set_tests_properties(test_codec2_mode_1200 PROPERTIES WORKING_DIRECTORY "/home/sh/Downloads/hackrf/codec2/build_linux/src") +add_test(test_codec2_mode_700C "sh" "-c" "./c2enc 700C /home/sh/Downloads/hackrf/codec2/raw/hts1a.raw - | ./c2dec 700C - - | sox -t .s16 -r 8000 - hts1a_700C.wav") +set_tests_properties(test_codec2_mode_700C PROPERTIES WORKING_DIRECTORY "/home/sh/Downloads/hackrf/codec2/build_linux/src") +add_test(test_codec2_mode_450 "sh" "-c" "./c2enc 450 /home/sh/Downloads/hackrf/codec2/raw/hts1a.raw - | ./c2dec 450 - - | sox -t .s16 -r 8000 - hts1a_450.wav") +set_tests_properties(test_codec2_mode_450 PROPERTIES WORKING_DIRECTORY "/home/sh/Downloads/hackrf/codec2/build_linux/src") +add_test(test_codec2_mode_450PWB "sh" "-c" "./c2enc 450PWB /home/sh/Downloads/hackrf/codec2/raw/hts1a.raw - | ./c2dec 450PWB - - | sox -t .s16 -r 16000 - hts1a_450PWB.wav") +set_tests_properties(test_codec2_mode_450PWB PROPERTIES WORKING_DIRECTORY "/home/sh/Downloads/hackrf/codec2/build_linux/src") +add_test(test_est_n0 "/home/sh/Downloads/hackrf/codec2/build_linux/unittest/est_n0.sh") +set_tests_properties(test_est_n0 PROPERTIES WORKING_DIRECTORY "/home/sh/Downloads/hackrf/codec2/unittest") +add_test(test_vq_mbest "sh" "-c" "./tvq_mbest; cat target.f32 | ../misc/vq_mbest -k 2 -q vq1.f32,vq2.f32 --mbest 2 -v > out.f32; diff target.f32 out.f32") +set_tests_properties(test_vq_mbest PROPERTIES WORKING_DIRECTORY "/home/sh/Downloads/hackrf/codec2/build_linux/unittest") +add_test(test_700c_eq "/home/sh/Downloads/hackrf/codec2/build_linux/unittest/test_700c_eq.sh") +set_tests_properties(test_700c_eq PROPERTIES WORKING_DIRECTORY "/home/sh/Downloads/hackrf/codec2/unittest") +add_test(test_fsk_lib "sh" "-c" "cd /home/sh/Downloads/hackrf/codec2/octave; DISPLAY=\"\" octave --no-gui -qf fsk_lib_demo.m") +set_tests_properties(test_fsk_lib PROPERTIES PASS_REGULAR_EXPRESSION "PASS") +add_test(test_fsk_modem_octave_port "sh" "-c" "cd /home/sh/Downloads/hackrf/codec2/octave; + PATH_TO_TFSK=/home/sh/Downloads/hackrf/codec2/build_linux/unittest/tfsk octave --no-gui -qf tfsk.m") +set_tests_properties(test_fsk_modem_octave_port PROPERTIES PASS_REGULAR_EXPRESSION "PASS") +add_test(test_fsk_modem_mod_demod "sh" "-c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/fsk_get_test_bits - 10000 | + /home/sh/Downloads/hackrf/codec2/build_linux/src/fsk_mod 2 8000 100 1200 100 - - | + /home/sh/Downloads/hackrf/codec2/build_linux/src/fsk_demod -l 2 8000 100 - - | + /home/sh/Downloads/hackrf/codec2/build_linux/src/fsk_put_test_bits -p 99 -q -") +add_test(test_fsk_2fsk_ber "sh" "-c" "cd /home/sh/Downloads/hackrf/codec2/build_linux/src; + ./fsk_get_test_bits - 10000 | ./fsk_mod 2 8000 100 1000 100 - - | + ./cohpsk_ch - - -26 --Fs 8000 | + ./fsk_demod 2 8000 100 - - | ./fsk_put_test_bits -b 0.015 -q - ") +add_test(test_fsk_4fsk_ber "sh" "-c" "cd /home/sh/Downloads/hackrf/codec2/build_linux/src; + ./fsk_get_test_bits - 10000 | ./fsk_mod 4 8000 100 1000 100 - - | + ./cohpsk_ch - - -26 --Fs 8000 | + ./fsk_demod 4 8000 100 - - | ./fsk_put_test_bits -b 0.025 - ") +add_test(test_fsk_4fsk_ber_negative_freq "sh" "-c" "cd /home/sh/Downloads/hackrf/codec2/build_linux/src; + ./fsk_get_test_bits - 10000 | ./fsk_mod 4 8000 100 1000 200 - - | + ./cohpsk_ch - - -23 --Fs 8000 --ssbfilt 0 --complexout -f -4000 | + ./fsk_demod -c -p 8 4 8000 100 - - | + ./fsk_put_test_bits -b 0.025 -q - ") +add_test(test_fsk_4fsk_lockdown "sh" "-c" "cd /home/sh/Downloads/hackrf/codec2/build_linux/src; + bits=512; tx_packets=20; rx_packets=18; tx_tone_sep=270; Rs=25; + ./fsk_get_test_bits - \$((\$bits*\$tx_packets)) \$bits | + ./fsk_mod 4 8000 \$Rs 1000 \$tx_tone_sep - - | + ./cohpsk_ch - - -13 --Fs 8000 --ssbfilt 0 -f -3000 --complexout | + ./fsk_demod -c -p 8 --mask \$tx_tone_sep -t1 --nsym 100 4 8000 \$Rs - - 2>stats.txt | + ./fsk_put_test_bits -t 0.25 -b 0.20 -p \$rx_packets -f \$bits -q -") +add_test(test_fsk_lib_4fsk_ldpc "sh" "-c" "cd /home/sh/Downloads/hackrf/codec2/octave; DISPLAY=\"\" octave --no-gui -qf fsk_lib_ldpc_demo.m") +set_tests_properties(test_fsk_lib_4fsk_ldpc PROPERTIES PASS_REGULAR_EXPRESSION "PASS") +add_test(test_fsk_framer "sh" "-c" "cd /home/sh/Downloads/hackrf/codec2/build_linux/src; + ./fsk_get_test_bits - 300 | + ./framer - - 100 51 | + ./deframer - - 100 51 --hard | + ./fsk_put_test_bits -") +set_tests_properties(test_fsk_framer PROPERTIES PASS_REGULAR_EXPRESSION "PASS") +add_test(test_fsk_framer_ldpc "sh" "-c" "cd /home/sh/Downloads/hackrf/codec2/build_linux/src; + ./ldpc_enc /dev/zero - --code HRA_112_112 --testframes 10 | ./framer - - 224 51 | + ./tollr | ./deframer - - 224 51 | ./ldpc_dec - /dev/null --code HRA_112_112 --testframes") +add_test(test_fsk_llr "sh" "-c" "/home/sh/Downloads/hackrf/codec2/build_linux/unittest/tfsk_llr") +add_test(test_fsk_4fsk_ldpc "sh" "-c" "cd /home/sh/Downloads/hackrf/codec2/build_linux/src; + ./ldpc_enc /dev/zero - --code HRAb_396_504 --testframes 200 | + ./framer - - 504 5186 | + ./fsk_mod 4 8000 100 1000 100 - - | + ./cohpsk_ch - - -25 --Fs 8000 | + ./fsk_demod -s 4 8000 100 - - | + ./deframer - - 504 5186 | + ./ldpc_dec - /dev/null --code HRAb_396_504 --testframes") +add_test(test_fsk_vhf_framer "sh" "-c" "cd /home/sh/Downloads/hackrf/codec2/build_linux/src; + ./c2enc 700C ../../raw/ve9qrp_10s.raw - | + ./vhf_frame_c2 B - - | + ./fsk_mod -p 10 4 8000 400 400 400 - - | + ./fsk_demod -p 10 4 8000 400 - - | + ./vhf_deframe_c2 B - /dev/null") +set_tests_properties(test_fsk_vhf_framer PROPERTIES PASS_REGULAR_EXPRESSION "total_uw_err: 0") +add_test(test_freedv_data_channel "sh" "-c" "./tfreedv_data_channel") +set_tests_properties(test_freedv_data_channel PROPERTIES WORKING_DIRECTORY "/home/sh/Downloads/hackrf/codec2/build_linux/unittest") +add_test(test_freedv_data_raw_ofdm "sh" "-c" "cd /home/sh/Downloads/hackrf/codec2/build_linux/src; + head -c 140 binaryIn.bin; + ./freedv_data_raw_tx 700D binaryIn.bin - | + ./freedv_data_raw_rx 700D - - -v | + diff /dev/stdin binaryIn.bin") +add_test(test_freedv_data_raw_fsk_ldpc_100 "sh" "-c" "cd /home/sh/Downloads/hackrf/codec2/build_linux/src; + ./freedv_data_raw_tx --testframes 1 --bursts 10 FSK_LDPC /dev/zero - | + ./cohpsk_ch - - -5 --Fs 8000 --ssbfilt 0 | + ./freedv_data_raw_rx --testframes -v FSK_LDPC - /dev/null") +set_tests_properties(test_freedv_data_raw_fsk_ldpc_100 PROPERTIES PASS_REGULAR_EXPRESSION "output_packets: 10") +add_test(test_freedv_data_raw_fsk_ldpc_1k "sh" "-c" "cd /home/sh/Downloads/hackrf/codec2/build_linux/src; + ./freedv_data_raw_tx --Fs 40000 --Rs 1000 --tone1 1000 --shift 1000 --testframes 1 --bursts 10 FSK_LDPC /dev/zero - | + ./cohpsk_ch - - -10 --Fs 8000 --ssbfilt 0 | + ./freedv_data_raw_rx --testframes -v --Fs 40000 --Rs 1000 FSK_LDPC - /dev/null") +set_tests_properties(test_freedv_data_raw_fsk_ldpc_1k PROPERTIES PASS_REGULAR_EXPRESSION "output_packets: 10") +add_test(test_freedv_data_raw_fsk_ldpc_10k "sh" "-c" "cd /home/sh/Downloads/hackrf/codec2/build_linux/src; + ./freedv_data_raw_tx --Fs 100000 --Rs 10000 --tone1 10000 --shift 10000 --testframes 100 --bursts 10 FSK_LDPC /dev/zero - | + ./cohpsk_ch - - -15 --Fs 8000 --ssbfilt 0 | + ./freedv_data_raw_rx --testframes -v --Fs 100000 --Rs 10000 FSK_LDPC - /dev/null") +set_tests_properties(test_freedv_data_raw_fsk_ldpc_10k PROPERTIES PASS_REGULAR_EXPRESSION "output_packets: 1000") +add_test(test_freedv_data_raw_fsk_ldpc_2k "sh" "-c" "cd /home/sh/Downloads/hackrf/codec2/build_linux/src; + ./freedv_data_raw_tx -a 8192 -m 4 --Fs 40000 --Rs 1000 --tone1 1000 --shift 1000 --testframes 1 --bursts 10 FSK_LDPC /dev/zero - | + ./cohpsk_ch - - -22 --Fs 8000 --ssbfilt 0 | + ./freedv_data_raw_rx -m 4 --testframes -v --Fs 40000 --Rs 1000 FSK_LDPC --mask 1000 - /dev/null") +set_tests_properties(test_freedv_data_raw_fsk_ldpc_2k PROPERTIES PASS_REGULAR_EXPRESSION "output_packets: 10") +subdirs("src") +subdirs("unittest") +subdirs("misc") diff --git a/libcodec2-android/src/codec2/build_linux/DartConfiguration.tcl b/libcodec2-android/src/codec2/build_linux/DartConfiguration.tcl new file mode 100644 index 0000000..3d6f9d5 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/DartConfiguration.tcl @@ -0,0 +1,115 @@ +# This file is configured by CMake automatically as DartConfiguration.tcl +# If you choose not to use CMake, this file may be hand configured, by +# filling in the required variables. + + +# Configuration directories and files +SourceDirectory: /home/sh/Downloads/hackrf/codec2 +BuildDirectory: /home/sh/Downloads/hackrf/codec2/build_linux + +# Where to place the cost data store +CostDataFile: + +# Site is something like machine.domain, i.e. pragmatic.crd +Site: chiliagon + +# Build name is osname-revision-compiler, i.e. Linux-2.4.2-2smp-c++ +BuildName: Linux-cc + +# Subprojects +LabelsForSubprojects: + +# Submission information +IsCDash: +CDashVersion: +QueryCDashVersion: +DropSite: +DropLocation: +DropSiteUser: +DropSitePassword: +DropSiteMode: +DropMethod: http +TriggerSite: +ScpCommand: /usr/bin/scp + +# Dashboard start time +NightlyStartTime: 00:00:00 EDT + +# Commands for the build/test/submit cycle +ConfigureCommand: "/usr/bin/cmake" "/home/sh/Downloads/hackrf/codec2" +MakeCommand: /usr/bin/cmake --build . --config "${CTEST_CONFIGURATION_TYPE}" -- -i +DefaultCTestConfigurationType: Release + +# version control +UpdateVersionOnly: + +# CVS options +# Default is "-d -P -A" +CVSCommand: CVSCOMMAND-NOTFOUND +CVSUpdateOptions: -d -A -P + +# Subversion options +SVNCommand: /usr/bin/svn +SVNOptions: +SVNUpdateOptions: + +# Git options +GITCommand: /usr/bin/git +GITInitSubmodules: +GITUpdateOptions: +GITUpdateCustom: + +# Perforce options +P4Command: P4COMMAND-NOTFOUND +P4Client: +P4Options: +P4UpdateOptions: +P4UpdateCustom: + +# Generic update command +UpdateCommand: /usr/bin/git +UpdateOptions: +UpdateType: git + +# Compiler info +Compiler: +CompilerVersion: + +# Dynamic analysis (MemCheck) +PurifyCommand: +ValgrindCommand: +ValgrindCommandOptions: +MemoryCheckType: +MemoryCheckSanitizerOptions: +MemoryCheckCommand: MEMORYCHECK_COMMAND-NOTFOUND +MemoryCheckCommandOptions: +MemoryCheckSuppressionFile: + +# Coverage +CoverageCommand: /usr/bin/gcov +CoverageExtraFlags: -l + +# Cluster commands +SlurmBatchCommand: SLURM_SBATCH_COMMAND-NOTFOUND +SlurmRunCommand: SLURM_SRUN_COMMAND-NOTFOUND + +# Testing options +# TimeOut is the amount of time in seconds to wait for processes +# to complete during testing. After TimeOut seconds, the +# process will be summarily terminated. +# Currently set to 25 minutes +TimeOut: 1500 + +# During parallel testing CTest will not start a new test if doing +# so would cause the system load to exceed this value. +TestLoad: + +UseLaunchers: +CurlOptions: +# warning, if you add new options here that have to do with submit, +# you have to update cmCTestSubmitCommand.cxx + +# For CTest submissions that timeout, these options +# specify behavior for retrying the submission +CTestSubmitRetryDelay: 5 +CTestSubmitRetryCount: 3 diff --git a/libcodec2-android/src/codec2/build_linux/ImportExecutables.cmake b/libcodec2-android/src/codec2/build_linux/ImportExecutables.cmake new file mode 100644 index 0000000..9c3b1c2 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/ImportExecutables.cmake @@ -0,0 +1,58 @@ +# Generated by CMake + +if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.5) + message(FATAL_ERROR "CMake >= 2.6.0 required") +endif() +cmake_policy(PUSH) +cmake_policy(VERSION 2.6) +#---------------------------------------------------------------- +# Generated CMake target import file. +#---------------------------------------------------------------- + +# Commands may need to know the format version. +set(CMAKE_IMPORT_FILE_VERSION 1) + +# Protect against multiple inclusion, which would fail when already imported targets are added once more. +set(_targetsDefined) +set(_targetsNotDefined) +set(_expectedTargets) +foreach(_expectedTarget generate_codebook) + list(APPEND _expectedTargets ${_expectedTarget}) + if(NOT TARGET ${_expectedTarget}) + list(APPEND _targetsNotDefined ${_expectedTarget}) + endif() + if(TARGET ${_expectedTarget}) + list(APPEND _targetsDefined ${_expectedTarget}) + endif() +endforeach() +if("${_targetsDefined}" STREQUAL "${_expectedTargets}") + unset(_targetsDefined) + unset(_targetsNotDefined) + unset(_expectedTargets) + set(CMAKE_IMPORT_FILE_VERSION) + cmake_policy(POP) + return() +endif() +if(NOT "${_targetsDefined}" STREQUAL "") + message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\nTargets Defined: ${_targetsDefined}\nTargets not yet defined: ${_targetsNotDefined}\n") +endif() +unset(_targetsDefined) +unset(_targetsNotDefined) +unset(_expectedTargets) + + +# Create imported target generate_codebook +add_executable(generate_codebook IMPORTED) + +# Import target "generate_codebook" for configuration "Debug" +set_property(TARGET generate_codebook APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG) +set_target_properties(generate_codebook PROPERTIES + IMPORTED_LOCATION_DEBUG "/home/sh/Downloads/hackrf/codec2/build_linux/src/generate_codebook" + ) + +# This file does not depend on other imported targets which have +# been exported from the same project but in a separate export set. + +# Commands beyond this point should not need to know the version. +set(CMAKE_IMPORT_FILE_VERSION) +cmake_policy(POP) diff --git a/libcodec2-android/src/codec2/build_linux/Makefile b/libcodec2-android/src/codec2/build_linux/Makefile new file mode 100644 index 0000000..bbd7f20 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/Makefile @@ -0,0 +1,1750 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Default target executed when no arguments are given to make. +default_target: all + +.PHONY : default_target + +# Allow only one "make -f Makefile2" at a time, but pass parallelism. +.NOTPARALLEL: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +#============================================================================= +# Targets provided globally by CMake. + +# Special rule for the target rebuild_cache +rebuild_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..." + /usr/bin/cmake -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.PHONY : rebuild_cache + +# Special rule for the target rebuild_cache +rebuild_cache/fast: rebuild_cache + +.PHONY : rebuild_cache/fast + +# Special rule for the target test +test: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running tests..." + /usr/bin/ctest --force-new-ctest-process $(ARGS) +.PHONY : test + +# Special rule for the target test +test/fast: test + +.PHONY : test/fast + +# Special rule for the target install/strip +install/strip: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..." + /usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake +.PHONY : install/strip + +# Special rule for the target install/strip +install/strip/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..." + /usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake +.PHONY : install/strip/fast + +# Special rule for the target install/local +install/local: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..." + /usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake +.PHONY : install/local + +# Special rule for the target install/local +install/local/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..." + /usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake +.PHONY : install/local/fast + +# Special rule for the target edit_cache +edit_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "No interactive CMake dialog available..." + /usr/bin/cmake -E echo No\ interactive\ CMake\ dialog\ available. +.PHONY : edit_cache + +# Special rule for the target edit_cache +edit_cache/fast: edit_cache + +.PHONY : edit_cache/fast + +# Special rule for the target install +install: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install + +# Special rule for the target install +install/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install/fast + +# Special rule for the target list_install_components +list_install_components: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Available install components are: \"Unspecified\" \"codec2_devel\"" +.PHONY : list_install_components + +# Special rule for the target list_install_components +list_install_components/fast: list_install_components + +.PHONY : list_install_components/fast + +# The main all target +all: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles/progress.marks + $(MAKE) -f CMakeFiles/Makefile2 all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : all + +# The main clean target +clean: + $(MAKE) -f CMakeFiles/Makefile2 clean +.PHONY : clean + +# The main clean target +clean/fast: clean + +.PHONY : clean/fast + +# Prepare targets for installation. +preinstall: all + $(MAKE) -f CMakeFiles/Makefile2 preinstall +.PHONY : preinstall + +# Prepare targets for installation. +preinstall/fast: + $(MAKE) -f CMakeFiles/Makefile2 preinstall +.PHONY : preinstall/fast + +# clear depends +depend: + $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1 +.PHONY : depend + +#============================================================================= +# Target rules for targets named ContinuousSubmit + +# Build rule for target. +ContinuousSubmit: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 ContinuousSubmit +.PHONY : ContinuousSubmit + +# fast build rule for target. +ContinuousSubmit/fast: + $(MAKE) -f CMakeFiles/ContinuousSubmit.dir/build.make CMakeFiles/ContinuousSubmit.dir/build +.PHONY : ContinuousSubmit/fast + +#============================================================================= +# Target rules for targets named ContinuousMemCheck + +# Build rule for target. +ContinuousMemCheck: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 ContinuousMemCheck +.PHONY : ContinuousMemCheck + +# fast build rule for target. +ContinuousMemCheck/fast: + $(MAKE) -f CMakeFiles/ContinuousMemCheck.dir/build.make CMakeFiles/ContinuousMemCheck.dir/build +.PHONY : ContinuousMemCheck/fast + +#============================================================================= +# Target rules for targets named ContinuousConfigure + +# Build rule for target. +ContinuousConfigure: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 ContinuousConfigure +.PHONY : ContinuousConfigure + +# fast build rule for target. +ContinuousConfigure/fast: + $(MAKE) -f CMakeFiles/ContinuousConfigure.dir/build.make CMakeFiles/ContinuousConfigure.dir/build +.PHONY : ContinuousConfigure/fast + +#============================================================================= +# Target rules for targets named ExperimentalSubmit + +# Build rule for target. +ExperimentalSubmit: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 ExperimentalSubmit +.PHONY : ExperimentalSubmit + +# fast build rule for target. +ExperimentalSubmit/fast: + $(MAKE) -f CMakeFiles/ExperimentalSubmit.dir/build.make CMakeFiles/ExperimentalSubmit.dir/build +.PHONY : ExperimentalSubmit/fast + +#============================================================================= +# Target rules for targets named ExperimentalMemCheck + +# Build rule for target. +ExperimentalMemCheck: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 ExperimentalMemCheck +.PHONY : ExperimentalMemCheck + +# fast build rule for target. +ExperimentalMemCheck/fast: + $(MAKE) -f CMakeFiles/ExperimentalMemCheck.dir/build.make CMakeFiles/ExperimentalMemCheck.dir/build +.PHONY : ExperimentalMemCheck/fast + +#============================================================================= +# Target rules for targets named ExperimentalTest + +# Build rule for target. +ExperimentalTest: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 ExperimentalTest +.PHONY : ExperimentalTest + +# fast build rule for target. +ExperimentalTest/fast: + $(MAKE) -f CMakeFiles/ExperimentalTest.dir/build.make CMakeFiles/ExperimentalTest.dir/build +.PHONY : ExperimentalTest/fast + +#============================================================================= +# Target rules for targets named NightlyUpdate + +# Build rule for target. +NightlyUpdate: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 NightlyUpdate +.PHONY : NightlyUpdate + +# fast build rule for target. +NightlyUpdate/fast: + $(MAKE) -f CMakeFiles/NightlyUpdate.dir/build.make CMakeFiles/NightlyUpdate.dir/build +.PHONY : NightlyUpdate/fast + +#============================================================================= +# Target rules for targets named NightlyStart + +# Build rule for target. +NightlyStart: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 NightlyStart +.PHONY : NightlyStart + +# fast build rule for target. +NightlyStart/fast: + $(MAKE) -f CMakeFiles/NightlyStart.dir/build.make CMakeFiles/NightlyStart.dir/build +.PHONY : NightlyStart/fast + +#============================================================================= +# Target rules for targets named NightlyMemoryCheck + +# Build rule for target. +NightlyMemoryCheck: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 NightlyMemoryCheck +.PHONY : NightlyMemoryCheck + +# fast build rule for target. +NightlyMemoryCheck/fast: + $(MAKE) -f CMakeFiles/NightlyMemoryCheck.dir/build.make CMakeFiles/NightlyMemoryCheck.dir/build +.PHONY : NightlyMemoryCheck/fast + +#============================================================================= +# Target rules for targets named NightlyBuild + +# Build rule for target. +NightlyBuild: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 NightlyBuild +.PHONY : NightlyBuild + +# fast build rule for target. +NightlyBuild/fast: + $(MAKE) -f CMakeFiles/NightlyBuild.dir/build.make CMakeFiles/NightlyBuild.dir/build +.PHONY : NightlyBuild/fast + +#============================================================================= +# Target rules for targets named ExperimentalUpdate + +# Build rule for target. +ExperimentalUpdate: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 ExperimentalUpdate +.PHONY : ExperimentalUpdate + +# fast build rule for target. +ExperimentalUpdate/fast: + $(MAKE) -f CMakeFiles/ExperimentalUpdate.dir/build.make CMakeFiles/ExperimentalUpdate.dir/build +.PHONY : ExperimentalUpdate/fast + +#============================================================================= +# Target rules for targets named ContinuousBuild + +# Build rule for target. +ContinuousBuild: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 ContinuousBuild +.PHONY : ContinuousBuild + +# fast build rule for target. +ContinuousBuild/fast: + $(MAKE) -f CMakeFiles/ContinuousBuild.dir/build.make CMakeFiles/ContinuousBuild.dir/build +.PHONY : ContinuousBuild/fast + +#============================================================================= +# Target rules for targets named Continuous + +# Build rule for target. +Continuous: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 Continuous +.PHONY : Continuous + +# fast build rule for target. +Continuous/fast: + $(MAKE) -f CMakeFiles/Continuous.dir/build.make CMakeFiles/Continuous.dir/build +.PHONY : Continuous/fast + +#============================================================================= +# Target rules for targets named Experimental + +# Build rule for target. +Experimental: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 Experimental +.PHONY : Experimental + +# fast build rule for target. +Experimental/fast: + $(MAKE) -f CMakeFiles/Experimental.dir/build.make CMakeFiles/Experimental.dir/build +.PHONY : Experimental/fast + +#============================================================================= +# Target rules for targets named ExperimentalConfigure + +# Build rule for target. +ExperimentalConfigure: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 ExperimentalConfigure +.PHONY : ExperimentalConfigure + +# fast build rule for target. +ExperimentalConfigure/fast: + $(MAKE) -f CMakeFiles/ExperimentalConfigure.dir/build.make CMakeFiles/ExperimentalConfigure.dir/build +.PHONY : ExperimentalConfigure/fast + +#============================================================================= +# Target rules for targets named NightlyTest + +# Build rule for target. +NightlyTest: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 NightlyTest +.PHONY : NightlyTest + +# fast build rule for target. +NightlyTest/fast: + $(MAKE) -f CMakeFiles/NightlyTest.dir/build.make CMakeFiles/NightlyTest.dir/build +.PHONY : NightlyTest/fast + +#============================================================================= +# Target rules for targets named NightlyCoverage + +# Build rule for target. +NightlyCoverage: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 NightlyCoverage +.PHONY : NightlyCoverage + +# fast build rule for target. +NightlyCoverage/fast: + $(MAKE) -f CMakeFiles/NightlyCoverage.dir/build.make CMakeFiles/NightlyCoverage.dir/build +.PHONY : NightlyCoverage/fast + +#============================================================================= +# Target rules for targets named ExperimentalCoverage + +# Build rule for target. +ExperimentalCoverage: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 ExperimentalCoverage +.PHONY : ExperimentalCoverage + +# fast build rule for target. +ExperimentalCoverage/fast: + $(MAKE) -f CMakeFiles/ExperimentalCoverage.dir/build.make CMakeFiles/ExperimentalCoverage.dir/build +.PHONY : ExperimentalCoverage/fast + +#============================================================================= +# Target rules for targets named NightlyMemCheck + +# Build rule for target. +NightlyMemCheck: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 NightlyMemCheck +.PHONY : NightlyMemCheck + +# fast build rule for target. +NightlyMemCheck/fast: + $(MAKE) -f CMakeFiles/NightlyMemCheck.dir/build.make CMakeFiles/NightlyMemCheck.dir/build +.PHONY : NightlyMemCheck/fast + +#============================================================================= +# Target rules for targets named ContinuousStart + +# Build rule for target. +ContinuousStart: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 ContinuousStart +.PHONY : ContinuousStart + +# fast build rule for target. +ContinuousStart/fast: + $(MAKE) -f CMakeFiles/ContinuousStart.dir/build.make CMakeFiles/ContinuousStart.dir/build +.PHONY : ContinuousStart/fast + +#============================================================================= +# Target rules for targets named NightlySubmit + +# Build rule for target. +NightlySubmit: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 NightlySubmit +.PHONY : NightlySubmit + +# fast build rule for target. +NightlySubmit/fast: + $(MAKE) -f CMakeFiles/NightlySubmit.dir/build.make CMakeFiles/NightlySubmit.dir/build +.PHONY : NightlySubmit/fast + +#============================================================================= +# Target rules for targets named ContinuousCoverage + +# Build rule for target. +ContinuousCoverage: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 ContinuousCoverage +.PHONY : ContinuousCoverage + +# fast build rule for target. +ContinuousCoverage/fast: + $(MAKE) -f CMakeFiles/ContinuousCoverage.dir/build.make CMakeFiles/ContinuousCoverage.dir/build +.PHONY : ContinuousCoverage/fast + +#============================================================================= +# Target rules for targets named Nightly + +# Build rule for target. +Nightly: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 Nightly +.PHONY : Nightly + +# fast build rule for target. +Nightly/fast: + $(MAKE) -f CMakeFiles/Nightly.dir/build.make CMakeFiles/Nightly.dir/build +.PHONY : Nightly/fast + +#============================================================================= +# Target rules for targets named NightlyConfigure + +# Build rule for target. +NightlyConfigure: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 NightlyConfigure +.PHONY : NightlyConfigure + +# fast build rule for target. +NightlyConfigure/fast: + $(MAKE) -f CMakeFiles/NightlyConfigure.dir/build.make CMakeFiles/NightlyConfigure.dir/build +.PHONY : NightlyConfigure/fast + +#============================================================================= +# Target rules for targets named ExperimentalStart + +# Build rule for target. +ExperimentalStart: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 ExperimentalStart +.PHONY : ExperimentalStart + +# fast build rule for target. +ExperimentalStart/fast: + $(MAKE) -f CMakeFiles/ExperimentalStart.dir/build.make CMakeFiles/ExperimentalStart.dir/build +.PHONY : ExperimentalStart/fast + +#============================================================================= +# Target rules for targets named ContinuousTest + +# Build rule for target. +ContinuousTest: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 ContinuousTest +.PHONY : ContinuousTest + +# fast build rule for target. +ContinuousTest/fast: + $(MAKE) -f CMakeFiles/ContinuousTest.dir/build.make CMakeFiles/ContinuousTest.dir/build +.PHONY : ContinuousTest/fast + +#============================================================================= +# Target rules for targets named ContinuousUpdate + +# Build rule for target. +ContinuousUpdate: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 ContinuousUpdate +.PHONY : ContinuousUpdate + +# fast build rule for target. +ContinuousUpdate/fast: + $(MAKE) -f CMakeFiles/ContinuousUpdate.dir/build.make CMakeFiles/ContinuousUpdate.dir/build +.PHONY : ContinuousUpdate/fast + +#============================================================================= +# Target rules for targets named ExperimentalBuild + +# Build rule for target. +ExperimentalBuild: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 ExperimentalBuild +.PHONY : ExperimentalBuild + +# fast build rule for target. +ExperimentalBuild/fast: + $(MAKE) -f CMakeFiles/ExperimentalBuild.dir/build.make CMakeFiles/ExperimentalBuild.dir/build +.PHONY : ExperimentalBuild/fast + +#============================================================================= +# Target rules for targets named ldpc_dec + +# Build rule for target. +ldpc_dec: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 ldpc_dec +.PHONY : ldpc_dec + +# fast build rule for target. +ldpc_dec/fast: + $(MAKE) -f src/CMakeFiles/ldpc_dec.dir/build.make src/CMakeFiles/ldpc_dec.dir/build +.PHONY : ldpc_dec/fast + +#============================================================================= +# Target rules for targets named ldpc_enc + +# Build rule for target. +ldpc_enc: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 ldpc_enc +.PHONY : ldpc_enc + +# fast build rule for target. +ldpc_enc/fast: + $(MAKE) -f src/CMakeFiles/ldpc_enc.dir/build.make src/CMakeFiles/ldpc_enc.dir/build +.PHONY : ldpc_enc/fast + +#============================================================================= +# Target rules for targets named ldpc_noise + +# Build rule for target. +ldpc_noise: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 ldpc_noise +.PHONY : ldpc_noise + +# fast build rule for target. +ldpc_noise/fast: + $(MAKE) -f src/CMakeFiles/ldpc_noise.dir/build.make src/CMakeFiles/ldpc_noise.dir/build +.PHONY : ldpc_noise/fast + +#============================================================================= +# Target rules for targets named tollr + +# Build rule for target. +tollr: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 tollr +.PHONY : tollr + +# fast build rule for target. +tollr/fast: + $(MAKE) -f src/CMakeFiles/tollr.dir/build.make src/CMakeFiles/tollr.dir/build +.PHONY : tollr/fast + +#============================================================================= +# Target rules for targets named cohpsk_ch + +# Build rule for target. +cohpsk_ch: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 cohpsk_ch +.PHONY : cohpsk_ch + +# fast build rule for target. +cohpsk_ch/fast: + $(MAKE) -f src/CMakeFiles/cohpsk_ch.dir/build.make src/CMakeFiles/cohpsk_ch.dir/build +.PHONY : cohpsk_ch/fast + +#============================================================================= +# Target rules for targets named cohpsk_put_test_bits + +# Build rule for target. +cohpsk_put_test_bits: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 cohpsk_put_test_bits +.PHONY : cohpsk_put_test_bits + +# fast build rule for target. +cohpsk_put_test_bits/fast: + $(MAKE) -f src/CMakeFiles/cohpsk_put_test_bits.dir/build.make src/CMakeFiles/cohpsk_put_test_bits.dir/build +.PHONY : cohpsk_put_test_bits/fast + +#============================================================================= +# Target rules for targets named cohpsk_get_test_bits + +# Build rule for target. +cohpsk_get_test_bits: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 cohpsk_get_test_bits +.PHONY : cohpsk_get_test_bits + +# fast build rule for target. +cohpsk_get_test_bits/fast: + $(MAKE) -f src/CMakeFiles/cohpsk_get_test_bits.dir/build.make src/CMakeFiles/cohpsk_get_test_bits.dir/build +.PHONY : cohpsk_get_test_bits/fast + +#============================================================================= +# Target rules for targets named cohpsk_demod + +# Build rule for target. +cohpsk_demod: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 cohpsk_demod +.PHONY : cohpsk_demod + +# fast build rule for target. +cohpsk_demod/fast: + $(MAKE) -f src/CMakeFiles/cohpsk_demod.dir/build.make src/CMakeFiles/cohpsk_demod.dir/build +.PHONY : cohpsk_demod/fast + +#============================================================================= +# Target rules for targets named vhf_frame_c2 + +# Build rule for target. +vhf_frame_c2: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 vhf_frame_c2 +.PHONY : vhf_frame_c2 + +# fast build rule for target. +vhf_frame_c2/fast: + $(MAKE) -f src/CMakeFiles/vhf_frame_c2.dir/build.make src/CMakeFiles/vhf_frame_c2.dir/build +.PHONY : vhf_frame_c2/fast + +#============================================================================= +# Target rules for targets named freedv_data_raw_rx + +# Build rule for target. +freedv_data_raw_rx: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 freedv_data_raw_rx +.PHONY : freedv_data_raw_rx + +# fast build rule for target. +freedv_data_raw_rx/fast: + $(MAKE) -f src/CMakeFiles/freedv_data_raw_rx.dir/build.make src/CMakeFiles/freedv_data_raw_rx.dir/build +.PHONY : freedv_data_raw_rx/fast + +#============================================================================= +# Target rules for targets named insert_errors + +# Build rule for target. +insert_errors: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 insert_errors +.PHONY : insert_errors + +# fast build rule for target. +insert_errors/fast: + $(MAKE) -f src/CMakeFiles/insert_errors.dir/build.make src/CMakeFiles/insert_errors.dir/build +.PHONY : insert_errors/fast + +#============================================================================= +# Target rules for targets named fm_demod + +# Build rule for target. +fm_demod: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 fm_demod +.PHONY : fm_demod + +# fast build rule for target. +fm_demod/fast: + $(MAKE) -f src/CMakeFiles/fm_demod.dir/build.make src/CMakeFiles/fm_demod.dir/build +.PHONY : fm_demod/fast + +#============================================================================= +# Target rules for targets named fdmdv_channel + +# Build rule for target. +fdmdv_channel: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 fdmdv_channel +.PHONY : fdmdv_channel + +# fast build rule for target. +fdmdv_channel/fast: + $(MAKE) -f src/CMakeFiles/fdmdv_channel.dir/build.make src/CMakeFiles/fdmdv_channel.dir/build +.PHONY : fdmdv_channel/fast + +#============================================================================= +# Target rules for targets named freedv_data_raw_tx + +# Build rule for target. +freedv_data_raw_tx: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 freedv_data_raw_tx +.PHONY : freedv_data_raw_tx + +# fast build rule for target. +freedv_data_raw_tx/fast: + $(MAKE) -f src/CMakeFiles/freedv_data_raw_tx.dir/build.make src/CMakeFiles/freedv_data_raw_tx.dir/build +.PHONY : freedv_data_raw_tx/fast + +#============================================================================= +# Target rules for targets named cohpsk_mod + +# Build rule for target. +cohpsk_mod: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 cohpsk_mod +.PHONY : cohpsk_mod + +# fast build rule for target. +cohpsk_mod/fast: + $(MAKE) -f src/CMakeFiles/cohpsk_mod.dir/build.make src/CMakeFiles/cohpsk_mod.dir/build +.PHONY : cohpsk_mod/fast + +#============================================================================= +# Target rules for targets named c2dec + +# Build rule for target. +c2dec: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 c2dec +.PHONY : c2dec + +# fast build rule for target. +c2dec/fast: + $(MAKE) -f src/CMakeFiles/c2dec.dir/build.make src/CMakeFiles/c2dec.dir/build +.PHONY : c2dec/fast + +#============================================================================= +# Target rules for targets named freedv_rx + +# Build rule for target. +freedv_rx: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 freedv_rx +.PHONY : freedv_rx + +# fast build rule for target. +freedv_rx/fast: + $(MAKE) -f src/CMakeFiles/freedv_rx.dir/build.make src/CMakeFiles/freedv_rx.dir/build +.PHONY : freedv_rx/fast + +#============================================================================= +# Target rules for targets named fdmdv_get_test_bits + +# Build rule for target. +fdmdv_get_test_bits: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 fdmdv_get_test_bits +.PHONY : fdmdv_get_test_bits + +# fast build rule for target. +fdmdv_get_test_bits/fast: + $(MAKE) -f src/CMakeFiles/fdmdv_get_test_bits.dir/build.make src/CMakeFiles/fdmdv_get_test_bits.dir/build +.PHONY : fdmdv_get_test_bits/fast + +#============================================================================= +# Target rules for targets named c2demo + +# Build rule for target. +c2demo: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 c2demo +.PHONY : c2demo + +# fast build rule for target. +c2demo/fast: + $(MAKE) -f src/CMakeFiles/c2demo.dir/build.make src/CMakeFiles/c2demo.dir/build +.PHONY : c2demo/fast + +#============================================================================= +# Target rules for targets named fdmdv_put_test_bits + +# Build rule for target. +fdmdv_put_test_bits: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 fdmdv_put_test_bits +.PHONY : fdmdv_put_test_bits + +# fast build rule for target. +fdmdv_put_test_bits/fast: + $(MAKE) -f src/CMakeFiles/fdmdv_put_test_bits.dir/build.make src/CMakeFiles/fdmdv_put_test_bits.dir/build +.PHONY : fdmdv_put_test_bits/fast + +#============================================================================= +# Target rules for targets named codec2 + +# Build rule for target. +codec2: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 codec2 +.PHONY : codec2 + +# fast build rule for target. +codec2/fast: + $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/build +.PHONY : codec2/fast + +#============================================================================= +# Target rules for targets named ofdm_get_test_bits + +# Build rule for target. +ofdm_get_test_bits: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 ofdm_get_test_bits +.PHONY : ofdm_get_test_bits + +# fast build rule for target. +ofdm_get_test_bits/fast: + $(MAKE) -f src/CMakeFiles/ofdm_get_test_bits.dir/build.make src/CMakeFiles/ofdm_get_test_bits.dir/build +.PHONY : ofdm_get_test_bits/fast + +#============================================================================= +# Target rules for targets named freedv_tx + +# Build rule for target. +freedv_tx: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 freedv_tx +.PHONY : freedv_tx + +# fast build rule for target. +freedv_tx/fast: + $(MAKE) -f src/CMakeFiles/freedv_tx.dir/build.make src/CMakeFiles/freedv_tx.dir/build +.PHONY : freedv_tx/fast + +#============================================================================= +# Target rules for targets named c2enc + +# Build rule for target. +c2enc: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 c2enc +.PHONY : c2enc + +# fast build rule for target. +c2enc/fast: + $(MAKE) -f src/CMakeFiles/c2enc.dir/build.make src/CMakeFiles/c2enc.dir/build +.PHONY : c2enc/fast + +#============================================================================= +# Target rules for targets named generate_codebook + +# Build rule for target. +generate_codebook: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 generate_codebook +.PHONY : generate_codebook + +# fast build rule for target. +generate_codebook/fast: + $(MAKE) -f src/CMakeFiles/generate_codebook.dir/build.make src/CMakeFiles/generate_codebook.dir/build +.PHONY : generate_codebook/fast + +#============================================================================= +# Target rules for targets named freedv_mixed_tx + +# Build rule for target. +freedv_mixed_tx: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 freedv_mixed_tx +.PHONY : freedv_mixed_tx + +# fast build rule for target. +freedv_mixed_tx/fast: + $(MAKE) -f src/CMakeFiles/freedv_mixed_tx.dir/build.make src/CMakeFiles/freedv_mixed_tx.dir/build +.PHONY : freedv_mixed_tx/fast + +#============================================================================= +# Target rules for targets named c2sim + +# Build rule for target. +c2sim: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 c2sim +.PHONY : c2sim + +# fast build rule for target. +c2sim/fast: + $(MAKE) -f src/CMakeFiles/c2sim.dir/build.make src/CMakeFiles/c2sim.dir/build +.PHONY : c2sim/fast + +#============================================================================= +# Target rules for targets named fdmdv_demod + +# Build rule for target. +fdmdv_demod: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 fdmdv_demod +.PHONY : fdmdv_demod + +# fast build rule for target. +fdmdv_demod/fast: + $(MAKE) -f src/CMakeFiles/fdmdv_demod.dir/build.make src/CMakeFiles/fdmdv_demod.dir/build +.PHONY : fdmdv_demod/fast + +#============================================================================= +# Target rules for targets named vhf_deframe_c2 + +# Build rule for target. +vhf_deframe_c2: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 vhf_deframe_c2 +.PHONY : vhf_deframe_c2 + +# fast build rule for target. +vhf_deframe_c2/fast: + $(MAKE) -f src/CMakeFiles/vhf_deframe_c2.dir/build.make src/CMakeFiles/vhf_deframe_c2.dir/build +.PHONY : vhf_deframe_c2/fast + +#============================================================================= +# Target rules for targets named fsk_mod + +# Build rule for target. +fsk_mod: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 fsk_mod +.PHONY : fsk_mod + +# fast build rule for target. +fsk_mod/fast: + $(MAKE) -f src/CMakeFiles/fsk_mod.dir/build.make src/CMakeFiles/fsk_mod.dir/build +.PHONY : fsk_mod/fast + +#============================================================================= +# Target rules for targets named fsk_put_test_bits + +# Build rule for target. +fsk_put_test_bits: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 fsk_put_test_bits +.PHONY : fsk_put_test_bits + +# fast build rule for target. +fsk_put_test_bits/fast: + $(MAKE) -f src/CMakeFiles/fsk_put_test_bits.dir/build.make src/CMakeFiles/fsk_put_test_bits.dir/build +.PHONY : fsk_put_test_bits/fast + +#============================================================================= +# Target rules for targets named freedv_data_tx + +# Build rule for target. +freedv_data_tx: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 freedv_data_tx +.PHONY : freedv_data_tx + +# fast build rule for target. +freedv_data_tx/fast: + $(MAKE) -f src/CMakeFiles/freedv_data_tx.dir/build.make src/CMakeFiles/freedv_data_tx.dir/build +.PHONY : freedv_data_tx/fast + +#============================================================================= +# Target rules for targets named freedv_data_rx + +# Build rule for target. +freedv_data_rx: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 freedv_data_rx +.PHONY : freedv_data_rx + +# fast build rule for target. +freedv_data_rx/fast: + $(MAKE) -f src/CMakeFiles/freedv_data_rx.dir/build.make src/CMakeFiles/freedv_data_rx.dir/build +.PHONY : freedv_data_rx/fast + +#============================================================================= +# Target rules for targets named freedv_mixed_rx + +# Build rule for target. +freedv_mixed_rx: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 freedv_mixed_rx +.PHONY : freedv_mixed_rx + +# fast build rule for target. +freedv_mixed_rx/fast: + $(MAKE) -f src/CMakeFiles/freedv_mixed_rx.dir/build.make src/CMakeFiles/freedv_mixed_rx.dir/build +.PHONY : freedv_mixed_rx/fast + +#============================================================================= +# Target rules for targets named fmfsk_demod + +# Build rule for target. +fmfsk_demod: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 fmfsk_demod +.PHONY : fmfsk_demod + +# fast build rule for target. +fmfsk_demod/fast: + $(MAKE) -f src/CMakeFiles/fmfsk_demod.dir/build.make src/CMakeFiles/fmfsk_demod.dir/build +.PHONY : fmfsk_demod/fast + +#============================================================================= +# Target rules for targets named fsk_mod_ext_vco + +# Build rule for target. +fsk_mod_ext_vco: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 fsk_mod_ext_vco +.PHONY : fsk_mod_ext_vco + +# fast build rule for target. +fsk_mod_ext_vco/fast: + $(MAKE) -f src/CMakeFiles/fsk_mod_ext_vco.dir/build.make src/CMakeFiles/fsk_mod_ext_vco.dir/build +.PHONY : fsk_mod_ext_vco/fast + +#============================================================================= +# Target rules for targets named fsk_demod + +# Build rule for target. +fsk_demod: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 fsk_demod +.PHONY : fsk_demod + +# fast build rule for target. +fsk_demod/fast: + $(MAKE) -f src/CMakeFiles/fsk_demod.dir/build.make src/CMakeFiles/fsk_demod.dir/build +.PHONY : fsk_demod/fast + +#============================================================================= +# Target rules for targets named fsk_get_test_bits + +# Build rule for target. +fsk_get_test_bits: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 fsk_get_test_bits +.PHONY : fsk_get_test_bits + +# fast build rule for target. +fsk_get_test_bits/fast: + $(MAKE) -f src/CMakeFiles/fsk_get_test_bits.dir/build.make src/CMakeFiles/fsk_get_test_bits.dir/build +.PHONY : fsk_get_test_bits/fast + +#============================================================================= +# Target rules for targets named framer + +# Build rule for target. +framer: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 framer +.PHONY : framer + +# fast build rule for target. +framer/fast: + $(MAKE) -f src/CMakeFiles/framer.dir/build.make src/CMakeFiles/framer.dir/build +.PHONY : framer/fast + +#============================================================================= +# Target rules for targets named deframer + +# Build rule for target. +deframer: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 deframer +.PHONY : deframer + +# fast build rule for target. +deframer/fast: + $(MAKE) -f src/CMakeFiles/deframer.dir/build.make src/CMakeFiles/deframer.dir/build +.PHONY : deframer/fast + +#============================================================================= +# Target rules for targets named ofdm_mod + +# Build rule for target. +ofdm_mod: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 ofdm_mod +.PHONY : ofdm_mod + +# fast build rule for target. +ofdm_mod/fast: + $(MAKE) -f src/CMakeFiles/ofdm_mod.dir/build.make src/CMakeFiles/ofdm_mod.dir/build +.PHONY : ofdm_mod/fast + +#============================================================================= +# Target rules for targets named fdmdv_mod + +# Build rule for target. +fdmdv_mod: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 fdmdv_mod +.PHONY : fdmdv_mod + +# fast build rule for target. +fdmdv_mod/fast: + $(MAKE) -f src/CMakeFiles/fdmdv_mod.dir/build.make src/CMakeFiles/fdmdv_mod.dir/build +.PHONY : fdmdv_mod/fast + +#============================================================================= +# Target rules for targets named ofdm_demod + +# Build rule for target. +ofdm_demod: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 ofdm_demod +.PHONY : ofdm_demod + +# fast build rule for target. +ofdm_demod/fast: + $(MAKE) -f src/CMakeFiles/ofdm_demod.dir/build.make src/CMakeFiles/ofdm_demod.dir/build +.PHONY : ofdm_demod/fast + +#============================================================================= +# Target rules for targets named ofdm_put_test_bits + +# Build rule for target. +ofdm_put_test_bits: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 ofdm_put_test_bits +.PHONY : ofdm_put_test_bits + +# fast build rule for target. +ofdm_put_test_bits/fast: + $(MAKE) -f src/CMakeFiles/ofdm_put_test_bits.dir/build.make src/CMakeFiles/ofdm_put_test_bits.dir/build +.PHONY : ofdm_put_test_bits/fast + +#============================================================================= +# Target rules for targets named fmfsk_mod + +# Build rule for target. +fmfsk_mod: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 fmfsk_mod +.PHONY : fmfsk_mod + +# fast build rule for target. +fmfsk_mod/fast: + $(MAKE) -f src/CMakeFiles/fmfsk_mod.dir/build.make src/CMakeFiles/fmfsk_mod.dir/build +.PHONY : fmfsk_mod/fast + +#============================================================================= +# Target rules for targets named tqam16 + +# Build rule for target. +tqam16: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 tqam16 +.PHONY : tqam16 + +# fast build rule for target. +tqam16/fast: + $(MAKE) -f unittest/CMakeFiles/tqam16.dir/build.make unittest/CMakeFiles/tqam16.dir/build +.PHONY : tqam16/fast + +#============================================================================= +# Target rules for targets named tfsk_llr + +# Build rule for target. +tfsk_llr: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 tfsk_llr +.PHONY : tfsk_llr + +# fast build rule for target. +tfsk_llr/fast: + $(MAKE) -f unittest/CMakeFiles/tfsk_llr.dir/build.make unittest/CMakeFiles/tfsk_llr.dir/build +.PHONY : tfsk_llr/fast + +#============================================================================= +# Target rules for targets named tfreedv_2400B_rawdata + +# Build rule for target. +tfreedv_2400B_rawdata: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 tfreedv_2400B_rawdata +.PHONY : tfreedv_2400B_rawdata + +# fast build rule for target. +tfreedv_2400B_rawdata/fast: + $(MAKE) -f unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/build.make unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/build +.PHONY : tfreedv_2400B_rawdata/fast + +#============================================================================= +# Target rules for targets named tfreedv_2400A_rawdata + +# Build rule for target. +tfreedv_2400A_rawdata: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 tfreedv_2400A_rawdata +.PHONY : tfreedv_2400A_rawdata + +# fast build rule for target. +tfreedv_2400A_rawdata/fast: + $(MAKE) -f unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/build.make unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/build +.PHONY : tfreedv_2400A_rawdata/fast + +#============================================================================= +# Target rules for targets named thash + +# Build rule for target. +thash: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 thash +.PHONY : thash + +# fast build rule for target. +thash/fast: + $(MAKE) -f unittest/CMakeFiles/thash.dir/build.make unittest/CMakeFiles/thash.dir/build +.PHONY : thash/fast + +#============================================================================= +# Target rules for targets named tfreedv_800XA_rawdata + +# Build rule for target. +tfreedv_800XA_rawdata: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 tfreedv_800XA_rawdata +.PHONY : tfreedv_800XA_rawdata + +# fast build rule for target. +tfreedv_800XA_rawdata/fast: + $(MAKE) -f unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/build.make unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/build +.PHONY : tfreedv_800XA_rawdata/fast + +#============================================================================= +# Target rules for targets named tfreedv_data_channel + +# Build rule for target. +tfreedv_data_channel: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 tfreedv_data_channel +.PHONY : tfreedv_data_channel + +# fast build rule for target. +tfreedv_data_channel/fast: + $(MAKE) -f unittest/CMakeFiles/tfreedv_data_channel.dir/build.make unittest/CMakeFiles/tfreedv_data_channel.dir/build +.PHONY : tfreedv_data_channel/fast + +#============================================================================= +# Target rules for targets named tofdm + +# Build rule for target. +tofdm: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 tofdm +.PHONY : tofdm + +# fast build rule for target. +tofdm/fast: + $(MAKE) -f unittest/CMakeFiles/tofdm.dir/build.make unittest/CMakeFiles/tofdm.dir/build +.PHONY : tofdm/fast + +#============================================================================= +# Target rules for targets named tvq_mbest + +# Build rule for target. +tvq_mbest: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 tvq_mbest +.PHONY : tvq_mbest + +# fast build rule for target. +tvq_mbest/fast: + $(MAKE) -f unittest/CMakeFiles/tvq_mbest.dir/build.make unittest/CMakeFiles/tvq_mbest.dir/build +.PHONY : tvq_mbest/fast + +#============================================================================= +# Target rules for targets named tdeframer + +# Build rule for target. +tdeframer: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 tdeframer +.PHONY : tdeframer + +# fast build rule for target. +tdeframer/fast: + $(MAKE) -f unittest/CMakeFiles/tdeframer.dir/build.make unittest/CMakeFiles/tdeframer.dir/build +.PHONY : tdeframer/fast + +#============================================================================= +# Target rules for targets named ofdm_stack + +# Build rule for target. +ofdm_stack: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 ofdm_stack +.PHONY : ofdm_stack + +# fast build rule for target. +ofdm_stack/fast: + $(MAKE) -f unittest/CMakeFiles/ofdm_stack.dir/build.make unittest/CMakeFiles/ofdm_stack.dir/build +.PHONY : ofdm_stack/fast + +#============================================================================= +# Target rules for targets named tfsk + +# Build rule for target. +tfsk: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 tfsk +.PHONY : tfsk + +# fast build rule for target. +tfsk/fast: + $(MAKE) -f unittest/CMakeFiles/tfsk.dir/build.make unittest/CMakeFiles/tfsk.dir/build +.PHONY : tfsk/fast + +#============================================================================= +# Target rules for targets named fdmdv_mem + +# Build rule for target. +fdmdv_mem: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 fdmdv_mem +.PHONY : fdmdv_mem + +# fast build rule for target. +fdmdv_mem/fast: + $(MAKE) -f unittest/CMakeFiles/fdmdv_mem.dir/build.make unittest/CMakeFiles/fdmdv_mem.dir/build +.PHONY : fdmdv_mem/fast + +#============================================================================= +# Target rules for targets named tfdmdv + +# Build rule for target. +tfdmdv: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 tfdmdv +.PHONY : tfdmdv + +# fast build rule for target. +tfdmdv/fast: + $(MAKE) -f unittest/CMakeFiles/tfdmdv.dir/build.make unittest/CMakeFiles/tfdmdv.dir/build +.PHONY : tfdmdv/fast + +#============================================================================= +# Target rules for targets named tcohpsk + +# Build rule for target. +tcohpsk: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 tcohpsk +.PHONY : tcohpsk + +# fast build rule for target. +tcohpsk/fast: + $(MAKE) -f unittest/CMakeFiles/tcohpsk.dir/build.make unittest/CMakeFiles/tcohpsk.dir/build +.PHONY : tcohpsk/fast + +#============================================================================= +# Target rules for targets named tfifo + +# Build rule for target. +tfifo: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 tfifo +.PHONY : tfifo + +# fast build rule for target. +tfifo/fast: + $(MAKE) -f unittest/CMakeFiles/tfifo.dir/build.make unittest/CMakeFiles/tfifo.dir/build +.PHONY : tfifo/fast + +#============================================================================= +# Target rules for targets named ofdm_mem + +# Build rule for target. +ofdm_mem: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 ofdm_mem +.PHONY : ofdm_mem + +# fast build rule for target. +ofdm_mem/fast: + $(MAKE) -f unittest/CMakeFiles/ofdm_mem.dir/build.make unittest/CMakeFiles/ofdm_mem.dir/build +.PHONY : ofdm_mem/fast + +#============================================================================= +# Target rules for targets named tfmfsk + +# Build rule for target. +tfmfsk: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 tfmfsk +.PHONY : tfmfsk + +# fast build rule for target. +tfmfsk/fast: + $(MAKE) -f unittest/CMakeFiles/tfmfsk.dir/build.make unittest/CMakeFiles/tfmfsk.dir/build +.PHONY : tfmfsk/fast + +#============================================================================= +# Target rules for targets named function_trace + +# Build rule for target. +function_trace: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 function_trace +.PHONY : function_trace + +# fast build rule for target. +function_trace/fast: + $(MAKE) -f unittest/CMakeFiles/function_trace.dir/build.make unittest/CMakeFiles/function_trace.dir/build +.PHONY : function_trace/fast + +#============================================================================= +# Target rules for targets named tnewamp1 + +# Build rule for target. +tnewamp1: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 tnewamp1 +.PHONY : tnewamp1 + +# fast build rule for target. +tnewamp1/fast: + $(MAKE) -f unittest/CMakeFiles/tnewamp1.dir/build.make unittest/CMakeFiles/tnewamp1.dir/build +.PHONY : tnewamp1/fast + +#============================================================================= +# Target rules for targets named compare_ints + +# Build rule for target. +compare_ints: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 compare_ints +.PHONY : compare_ints + +# fast build rule for target. +compare_ints/fast: + $(MAKE) -f unittest/CMakeFiles/compare_ints.dir/build.make unittest/CMakeFiles/compare_ints.dir/build +.PHONY : compare_ints/fast + +#============================================================================= +# Target rules for targets named tst_codec2_fft_init + +# Build rule for target. +tst_codec2_fft_init: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 tst_codec2_fft_init +.PHONY : tst_codec2_fft_init + +# fast build rule for target. +tst_codec2_fft_init/fast: + $(MAKE) -f unittest/CMakeFiles/tst_codec2_fft_init.dir/build.make unittest/CMakeFiles/tst_codec2_fft_init.dir/build +.PHONY : tst_codec2_fft_init/fast + +#============================================================================= +# Target rules for targets named compare_floats + +# Build rule for target. +compare_floats: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 compare_floats +.PHONY : compare_floats + +# fast build rule for target. +compare_floats/fast: + $(MAKE) -f unittest/CMakeFiles/compare_floats.dir/build.make unittest/CMakeFiles/compare_floats.dir/build +.PHONY : compare_floats/fast + +#============================================================================= +# Target rules for targets named test_phi0 + +# Build rule for target. +test_phi0: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 test_phi0 +.PHONY : test_phi0 + +# fast build rule for target. +test_phi0/fast: + $(MAKE) -f unittest/CMakeFiles/test_phi0.dir/build.make unittest/CMakeFiles/test_phi0.dir/build +.PHONY : test_phi0/fast + +#============================================================================= +# Target rules for targets named extract + +# Build rule for target. +extract: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 extract +.PHONY : extract + +# fast build rule for target. +extract/fast: + $(MAKE) -f misc/CMakeFiles/extract.dir/build.make misc/CMakeFiles/extract.dir/build +.PHONY : extract/fast + +#============================================================================= +# Target rules for targets named tdec + +# Build rule for target. +tdec: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 tdec +.PHONY : tdec + +# fast build rule for target. +tdec/fast: + $(MAKE) -f misc/CMakeFiles/tdec.dir/build.make misc/CMakeFiles/tdec.dir/build +.PHONY : tdec/fast + +#============================================================================= +# Target rules for targets named 16_8_short + +# Build rule for target. +16_8_short: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 16_8_short +.PHONY : 16_8_short + +# fast build rule for target. +16_8_short/fast: + $(MAKE) -f misc/CMakeFiles/16_8_short.dir/build.make misc/CMakeFiles/16_8_short.dir/build +.PHONY : 16_8_short/fast + +#============================================================================= +# Target rules for targets named t16_8 + +# Build rule for target. +t16_8: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 t16_8 +.PHONY : t16_8 + +# fast build rule for target. +t16_8/fast: + $(MAKE) -f misc/CMakeFiles/t16_8.dir/build.make misc/CMakeFiles/t16_8.dir/build +.PHONY : t16_8/fast + +#============================================================================= +# Target rules for targets named t16_8_short + +# Build rule for target. +t16_8_short: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 t16_8_short +.PHONY : t16_8_short + +# fast build rule for target. +t16_8_short/fast: + $(MAKE) -f misc/CMakeFiles/t16_8_short.dir/build.make misc/CMakeFiles/t16_8_short.dir/build +.PHONY : t16_8_short/fast + +#============================================================================= +# Target rules for targets named mksine + +# Build rule for target. +mksine: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 mksine +.PHONY : mksine + +# fast build rule for target. +mksine/fast: + $(MAKE) -f misc/CMakeFiles/mksine.dir/build.make misc/CMakeFiles/mksine.dir/build +.PHONY : mksine/fast + +#============================================================================= +# Target rules for targets named tnlp + +# Build rule for target. +tnlp: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 tnlp +.PHONY : tnlp + +# fast build rule for target. +tnlp/fast: + $(MAKE) -f misc/CMakeFiles/tnlp.dir/build.make misc/CMakeFiles/tnlp.dir/build +.PHONY : tnlp/fast + +#============================================================================= +# Target rules for targets named vqtrain + +# Build rule for target. +vqtrain: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 vqtrain +.PHONY : vqtrain + +# fast build rule for target. +vqtrain/fast: + $(MAKE) -f misc/CMakeFiles/vqtrain.dir/build.make misc/CMakeFiles/vqtrain.dir/build +.PHONY : vqtrain/fast + +#============================================================================= +# Target rules for targets named tlininterp + +# Build rule for target. +tlininterp: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 tlininterp +.PHONY : tlininterp + +# fast build rule for target. +tlininterp/fast: + $(MAKE) -f misc/CMakeFiles/tlininterp.dir/build.make misc/CMakeFiles/tlininterp.dir/build +.PHONY : tlininterp/fast + +#============================================================================= +# Target rules for targets named pre + +# Build rule for target. +pre: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 pre +.PHONY : pre + +# fast build rule for target. +pre/fast: + $(MAKE) -f misc/CMakeFiles/pre.dir/build.make misc/CMakeFiles/pre.dir/build +.PHONY : pre/fast + +#============================================================================= +# Target rules for targets named raw2h + +# Build rule for target. +raw2h: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 raw2h +.PHONY : raw2h + +# fast build rule for target. +raw2h/fast: + $(MAKE) -f misc/CMakeFiles/raw2h.dir/build.make misc/CMakeFiles/raw2h.dir/build +.PHONY : raw2h/fast + +#============================================================================= +# Target rules for targets named timpulse + +# Build rule for target. +timpulse: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 timpulse +.PHONY : timpulse + +# fast build rule for target. +timpulse/fast: + $(MAKE) -f misc/CMakeFiles/timpulse.dir/build.make misc/CMakeFiles/timpulse.dir/build +.PHONY : timpulse/fast + +#============================================================================= +# Target rules for targets named est_n0 + +# Build rule for target. +est_n0: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 est_n0 +.PHONY : est_n0 + +# fast build rule for target. +est_n0/fast: + $(MAKE) -f misc/CMakeFiles/est_n0.dir/build.make misc/CMakeFiles/est_n0.dir/build +.PHONY : est_n0/fast + +#============================================================================= +# Target rules for targets named vq_mbest + +# Build rule for target. +vq_mbest: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 vq_mbest +.PHONY : vq_mbest + +# fast build rule for target. +vq_mbest/fast: + $(MAKE) -f misc/CMakeFiles/vq_mbest.dir/build.make misc/CMakeFiles/vq_mbest.dir/build +.PHONY : vq_mbest/fast + +# Help Target +help: + @echo "The following are some of the valid targets for this Makefile:" + @echo "... all (the default if no target is provided)" + @echo "... clean" + @echo "... depend" + @echo "... rebuild_cache" + @echo "... test" + @echo "... ContinuousSubmit" + @echo "... ContinuousMemCheck" + @echo "... ContinuousConfigure" + @echo "... ExperimentalSubmit" + @echo "... ExperimentalMemCheck" + @echo "... install/strip" + @echo "... ExperimentalTest" + @echo "... NightlyUpdate" + @echo "... install/local" + @echo "... NightlyStart" + @echo "... NightlyMemoryCheck" + @echo "... NightlyBuild" + @echo "... ExperimentalUpdate" + @echo "... ContinuousBuild" + @echo "... Continuous" + @echo "... Experimental" + @echo "... ExperimentalConfigure" + @echo "... edit_cache" + @echo "... NightlyTest" + @echo "... NightlyCoverage" + @echo "... install" + @echo "... ExperimentalCoverage" + @echo "... NightlyMemCheck" + @echo "... ContinuousStart" + @echo "... NightlySubmit" + @echo "... ContinuousCoverage" + @echo "... Nightly" + @echo "... NightlyConfigure" + @echo "... ExperimentalStart" + @echo "... list_install_components" + @echo "... ContinuousTest" + @echo "... ContinuousUpdate" + @echo "... ExperimentalBuild" + @echo "... ldpc_dec" + @echo "... ldpc_enc" + @echo "... ldpc_noise" + @echo "... tollr" + @echo "... cohpsk_ch" + @echo "... cohpsk_put_test_bits" + @echo "... cohpsk_get_test_bits" + @echo "... cohpsk_demod" + @echo "... vhf_frame_c2" + @echo "... freedv_data_raw_rx" + @echo "... insert_errors" + @echo "... fm_demod" + @echo "... fdmdv_channel" + @echo "... freedv_data_raw_tx" + @echo "... cohpsk_mod" + @echo "... c2dec" + @echo "... freedv_rx" + @echo "... fdmdv_get_test_bits" + @echo "... c2demo" + @echo "... fdmdv_put_test_bits" + @echo "... codec2" + @echo "... ofdm_get_test_bits" + @echo "... freedv_tx" + @echo "... c2enc" + @echo "... generate_codebook" + @echo "... freedv_mixed_tx" + @echo "... c2sim" + @echo "... fdmdv_demod" + @echo "... vhf_deframe_c2" + @echo "... fsk_mod" + @echo "... fsk_put_test_bits" + @echo "... freedv_data_tx" + @echo "... freedv_data_rx" + @echo "... freedv_mixed_rx" + @echo "... fmfsk_demod" + @echo "... fsk_mod_ext_vco" + @echo "... fsk_demod" + @echo "... fsk_get_test_bits" + @echo "... framer" + @echo "... deframer" + @echo "... ofdm_mod" + @echo "... fdmdv_mod" + @echo "... ofdm_demod" + @echo "... ofdm_put_test_bits" + @echo "... fmfsk_mod" + @echo "... tqam16" + @echo "... tfsk_llr" + @echo "... tfreedv_2400B_rawdata" + @echo "... tfreedv_2400A_rawdata" + @echo "... thash" + @echo "... tfreedv_800XA_rawdata" + @echo "... tfreedv_data_channel" + @echo "... tofdm" + @echo "... tvq_mbest" + @echo "... tdeframer" + @echo "... ofdm_stack" + @echo "... tfsk" + @echo "... fdmdv_mem" + @echo "... tfdmdv" + @echo "... tcohpsk" + @echo "... tfifo" + @echo "... ofdm_mem" + @echo "... tfmfsk" + @echo "... function_trace" + @echo "... tnewamp1" + @echo "... compare_ints" + @echo "... tst_codec2_fft_init" + @echo "... compare_floats" + @echo "... test_phi0" + @echo "... extract" + @echo "... tdec" + @echo "... 16_8_short" + @echo "... t16_8" + @echo "... t16_8_short" + @echo "... mksine" + @echo "... tnlp" + @echo "... vqtrain" + @echo "... tlininterp" + @echo "... pre" + @echo "... raw2h" + @echo "... timpulse" + @echo "... est_n0" + @echo "... vq_mbest" +.PHONY : help + + + +#============================================================================= +# Special targets to cleanup operation of make. + +# Special rule to run CMake to check the build system integrity. +# No rule that depends on this can have commands that come from listfiles +# because they might be regenerated. +cmake_check_build_system: + $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 +.PHONY : cmake_check_build_system + diff --git a/libcodec2-android/src/codec2/build_linux/cmake_install.cmake b/libcodec2-android/src/codec2/build_linux/cmake_install.cmake new file mode 100644 index 0000000..9ec763a --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/cmake_install.cmake @@ -0,0 +1,61 @@ +# Install script for directory: /home/sh/Downloads/hackrf/codec2 + +# Set the install prefix +if(NOT DEFINED CMAKE_INSTALL_PREFIX) + set(CMAKE_INSTALL_PREFIX "/opt/install/codec2") +endif() +string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") + +# Set the install configuration name. +if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) + if(BUILD_TYPE) + string(REGEX REPLACE "^[^A-Za-z0-9_]+" "" + CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") + else() + set(CMAKE_INSTALL_CONFIG_NAME "Debug") + endif() + message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") +endif() + +# Set the component getting installed. +if(NOT CMAKE_INSTALL_COMPONENT) + if(COMPONENT) + message(STATUS "Install component: \"${COMPONENT}\"") + set(CMAKE_INSTALL_COMPONENT "${COMPONENT}") + else() + set(CMAKE_INSTALL_COMPONENT) + endif() +endif() + +# Install shared libraries without execute permission? +if(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE) + set(CMAKE_INSTALL_SO_NO_EXE "1") +endif() + +# Is this installation the result of a crosscompile? +if(NOT DEFINED CMAKE_CROSSCOMPILING) + set(CMAKE_CROSSCOMPILING "FALSE") +endif() + +if("x${CMAKE_INSTALL_COMPONENT}x" STREQUAL "xcodec2_develx" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/lib/pkgconfig" TYPE FILE FILES "/home/sh/Downloads/hackrf/codec2/build_linux/codec2.pc") +endif() + +if(NOT CMAKE_INSTALL_LOCAL_ONLY) + # Include the install script for each subdirectory. + include("/home/sh/Downloads/hackrf/codec2/build_linux/src/cmake_install.cmake") + include("/home/sh/Downloads/hackrf/codec2/build_linux/unittest/cmake_install.cmake") + include("/home/sh/Downloads/hackrf/codec2/build_linux/misc/cmake_install.cmake") + +endif() + +if(CMAKE_INSTALL_COMPONENT) + set(CMAKE_INSTALL_MANIFEST "install_manifest_${CMAKE_INSTALL_COMPONENT}.txt") +else() + set(CMAKE_INSTALL_MANIFEST "install_manifest.txt") +endif() + +string(REPLACE ";" "\n" CMAKE_INSTALL_MANIFEST_CONTENT + "${CMAKE_INSTALL_MANIFEST_FILES}") +file(WRITE "/home/sh/Downloads/hackrf/codec2/build_linux/${CMAKE_INSTALL_MANIFEST}" + "${CMAKE_INSTALL_MANIFEST_CONTENT}") diff --git a/libcodec2-android/src/codec2/build_linux/codec2.cmake b/libcodec2-android/src/codec2/build_linux/codec2.cmake new file mode 100644 index 0000000..a94b5b5 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/codec2.cmake @@ -0,0 +1,64 @@ +# Generated by CMake + +if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.5) + message(FATAL_ERROR "CMake >= 2.6.0 required") +endif() +cmake_policy(PUSH) +cmake_policy(VERSION 2.6) +#---------------------------------------------------------------- +# Generated CMake target import file. +#---------------------------------------------------------------- + +# Commands may need to know the format version. +set(CMAKE_IMPORT_FILE_VERSION 1) + +# Protect against multiple inclusion, which would fail when already imported targets are added once more. +set(_targetsDefined) +set(_targetsNotDefined) +set(_expectedTargets) +foreach(_expectedTarget codec2) + list(APPEND _expectedTargets ${_expectedTarget}) + if(NOT TARGET ${_expectedTarget}) + list(APPEND _targetsNotDefined ${_expectedTarget}) + endif() + if(TARGET ${_expectedTarget}) + list(APPEND _targetsDefined ${_expectedTarget}) + endif() +endforeach() +if("${_targetsDefined}" STREQUAL "${_expectedTargets}") + unset(_targetsDefined) + unset(_targetsNotDefined) + unset(_expectedTargets) + set(CMAKE_IMPORT_FILE_VERSION) + cmake_policy(POP) + return() +endif() +if(NOT "${_targetsDefined}" STREQUAL "") + message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\nTargets Defined: ${_targetsDefined}\nTargets not yet defined: ${_targetsNotDefined}\n") +endif() +unset(_targetsDefined) +unset(_targetsNotDefined) +unset(_expectedTargets) + + +# Create imported target codec2 +add_library(codec2 SHARED IMPORTED) + +set_target_properties(codec2 PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "/home/sh/Downloads/hackrf/codec2/src;/home/sh/Downloads/hackrf/codec2/build_linux" + INTERFACE_LINK_LIBRARIES "m" +) + +# Import target "codec2" for configuration "Debug" +set_property(TARGET codec2 APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG) +set_target_properties(codec2 PROPERTIES + IMPORTED_LOCATION_DEBUG "/home/sh/Downloads/hackrf/codec2/build_linux/src/libcodec2.so.0.9" + IMPORTED_SONAME_DEBUG "libcodec2.so.0.9" + ) + +# This file does not depend on other imported targets which have +# been exported from the same project but in a separate export set. + +# Commands beyond this point should not need to know the version. +set(CMAKE_IMPORT_FILE_VERSION) +cmake_policy(POP) diff --git a/libcodec2-android/src/codec2/build_linux/codec2.pc b/libcodec2-android/src/codec2/build_linux/codec2.pc new file mode 100644 index 0000000..919cdd1 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/codec2.pc @@ -0,0 +1,10 @@ +prefix=/opt/install/codec2 +libdir=/opt/install/codec2/lib +includedir=/opt/install/codec2/include/codec2 + +Name: codec2 +Description: A speech codec for 2400 bit/s and below +Requires: +Version: 0.9.2 +Libs: -L${libdir} -lcodec2 +Cflags: -I${includedir} diff --git a/libcodec2-android/src/codec2/build_linux/codec2/version.h b/libcodec2-android/src/codec2/build_linux/codec2/version.h new file mode 100644 index 0000000..bae2151 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/codec2/version.h @@ -0,0 +1,37 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: version.h + AUTHOR......: Tomas Härdin + DATE CREATED: 03 November 2017 + + Codec 2 VERSION #defines + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2017 Tomas Härdin + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +//this functions both as an include guard and your typical HAVE macro +#ifndef CODEC2_HAVE_VERSION +#define CODEC2_HAVE_VERSION + +#define CODEC2_VERSION_MAJOR 0 +#define CODEC2_VERSION_MINOR 9 +#define CODEC2_VERSION_PATCH 2 +#define CODEC2_VERSION "0.9.2" + +#endif //CODEC2_HAVE_VERSION diff --git a/libcodec2-android/src/codec2/build_linux/config.h b/libcodec2-android/src/codec2/build_linux/config.h new file mode 100644 index 0000000..9fe2d5c --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/config.h @@ -0,0 +1,23 @@ +/*-------------------------------------------------------------------------- + ** This file is autogenerated from config.h.in + ** during the cmake configuration of your project. If you need to make changes + ** edit the original file NOT THIS FILE. + ** --------------------------------------------------------------------------*/ +#ifndef _CONFIGURATION_HEADER_GUARD_H_ +#define _CONFIGURATION_HEADER_GUARD_H_ + +#define SIZEOF_INT +#define HAVE_STDLIB_H 1 +#define HAVE_STRING_H 1 +/* #undef HAVE_FLOOR */ +/* #undef HAVE_CEIL */ +/* #undef HAVE_MEMSET */ +/* #undef HAVE_POW */ +/* #undef HAVE_SQRT */ +/* #undef HAVE_SIN */ +/* #undef HAVE_COS */ +/* #undef HAVE_ATAN2 */ +/* #undef HAVE_LOG10 */ +/* #undef HAVE_ROUND */ +/* #undef HAVE_GETOPT */ +#endif diff --git a/libcodec2-android/src/codec2/build_linux/install_manifest.txt b/libcodec2-android/src/codec2/build_linux/install_manifest.txt new file mode 100644 index 0000000..a362ffd --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/install_manifest.txt @@ -0,0 +1,16 @@ +/opt/install/codec2/lib/pkgconfig/codec2.pc +/opt/install/codec2/lib/cmake/codec2/codec2-config.cmake +/opt/install/codec2/lib/cmake/codec2/codec2-config-debug.cmake +/opt/install/codec2/lib/libcodec2.so.0.9 +/opt/install/codec2/lib/libcodec2.so +/opt/install/codec2/include/codec2/codec2.h +/opt/install/codec2/include/codec2/codec2_fdmdv.h +/opt/install/codec2/include/codec2/codec2_cohpsk.h +/opt/install/codec2/include/codec2/codec2_fm.h +/opt/install/codec2/include/codec2/codec2_ofdm.h +/opt/install/codec2/include/codec2/fsk.h +/opt/install/codec2/include/codec2/codec2_fifo.h +/opt/install/codec2/include/codec2/comp.h +/opt/install/codec2/include/codec2/modem_stats.h +/opt/install/codec2/include/codec2/freedv_api.h +/opt/install/codec2/include/codec2/version.h \ No newline at end of file diff --git a/libcodec2-android/src/codec2/build_linux/misc/16_8_short b/libcodec2-android/src/codec2/build_linux/misc/16_8_short new file mode 100755 index 0000000..6c73bb7 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/misc/16_8_short differ diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/16_8_short.dir/16_8_short.c.o b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/16_8_short.dir/16_8_short.c.o new file mode 100644 index 0000000..570007c Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/16_8_short.dir/16_8_short.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/16_8_short.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/16_8_short.dir/C.includecache new file mode 100644 index 0000000..3a93078 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/16_8_short.dir/C.includecache @@ -0,0 +1,168 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +../misc/../src/codec2_fdmdv.h +comp.h +../misc/../src/comp.h +modem_stats.h +../misc/../src/modem_stats.h + +../misc/../src/comp.h + +../misc/../src/kiss_fft.h +stdlib.h +- +stdio.h +- +math.h +- +string.h +- +xmmintrin.h +- +sys/types.h +- + +../misc/../src/modem_stats.h +comp.h +../misc/../src/comp.h +kiss_fft.h +../misc/../src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/misc/16_8_short.c +assert.h +- +math.h +- +stdlib.h +- +stdio.h +- +codec2_fdmdv.h +/home/sh/Downloads/hackrf/codec2/misc/codec2_fdmdv.h + +/home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +modem_stats.h +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h + +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.h +assert.h +- +stdlib.h +- +stdio.h +- +string.h +- +math.h +- +fdv_arm_math.h +/home/sh/Downloads/hackrf/codec2/src/fdv_arm_math.h +defines.h +/home/sh/Downloads/hackrf/codec2/src/defines.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +kiss_fftr.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/comp_prim.h + +/home/sh/Downloads/hackrf/codec2/src/debug_alloc.h +stdio.h +- + +/home/sh/Downloads/hackrf/codec2/src/defines.h + +/home/sh/Downloads/hackrf/codec2/src/fdmdv.c +assert.h +- +stdlib.h +- +stdio.h +- +string.h +- +math.h +- +fdmdv_internal.h +/home/sh/Downloads/hackrf/codec2/src/fdmdv_internal.h +codec2_fdmdv.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h +comp_prim.h +/home/sh/Downloads/hackrf/codec2/src/comp_prim.h +rn.h +/home/sh/Downloads/hackrf/codec2/src/rn.h +rxdec_coeff.h +/home/sh/Downloads/hackrf/codec2/src/rxdec_coeff.h +test_bits.h +/home/sh/Downloads/hackrf/codec2/src/test_bits.h +pilot_coeff.h +/home/sh/Downloads/hackrf/codec2/src/pilot_coeff.h +codec2_fft.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.h +hanning.h +/home/sh/Downloads/hackrf/codec2/src/hanning.h +os.h +/home/sh/Downloads/hackrf/codec2/src/os.h +machdep.h +/home/sh/Downloads/hackrf/codec2/src/machdep.h +debug_alloc.h +/home/sh/Downloads/hackrf/codec2/src/debug_alloc.h + +/home/sh/Downloads/hackrf/codec2/src/fdmdv_internal.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +codec2_fdmdv.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h +codec2_fft.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.h + +/home/sh/Downloads/hackrf/codec2/src/hanning.h + +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h +stdlib.h +- +stdio.h +- +math.h +- +string.h +- +xmmintrin.h +- +sys/types.h +- + +/home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/src/machdep.h + +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/src/os.h + +/home/sh/Downloads/hackrf/codec2/src/pilot_coeff.h + +/home/sh/Downloads/hackrf/codec2/src/rn.h + +/home/sh/Downloads/hackrf/codec2/src/rxdec_coeff.h + +/home/sh/Downloads/hackrf/codec2/src/test_bits.h + diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/16_8_short.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/16_8_short.dir/DependInfo.cmake new file mode 100644 index 0000000..70104ed --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/16_8_short.dir/DependInfo.cmake @@ -0,0 +1,34 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/misc/16_8_short.c" "/home/sh/Downloads/hackrf/codec2/build_linux/misc/CMakeFiles/16_8_short.dir/16_8_short.c.o" + "/home/sh/Downloads/hackrf/codec2/src/fdmdv.c" "/home/sh/Downloads/hackrf/codec2/build_linux/misc/CMakeFiles/16_8_short.dir/__/src/fdmdv.c.o" + "/home/sh/Downloads/hackrf/codec2/src/kiss_fft.c" "/home/sh/Downloads/hackrf/codec2/build_linux/misc/CMakeFiles/16_8_short.dir/__/src/kiss_fft.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "FLOATING_POINT" + "GIT_HASH=\"df2ed16c\"" + "VAR_ARRAYS" + "_GNU_SOURCE=1" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../misc/../src" + "../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/DependInfo.cmake" + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/16_8_short.dir/__/src/fdmdv.c.o b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/16_8_short.dir/__/src/fdmdv.c.o new file mode 100644 index 0000000..f981940 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/16_8_short.dir/__/src/fdmdv.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/16_8_short.dir/__/src/kiss_fft.c.o b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/16_8_short.dir/__/src/kiss_fft.c.o new file mode 100644 index 0000000..1193fcd Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/16_8_short.dir/__/src/kiss_fft.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/16_8_short.dir/build.make b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/16_8_short.dir/build.make new file mode 100644 index 0000000..60da5be --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/16_8_short.dir/build.make @@ -0,0 +1,129 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include misc/CMakeFiles/16_8_short.dir/depend.make + +# Include the progress variables for this target. +include misc/CMakeFiles/16_8_short.dir/progress.make + +# Include the compile flags for this target's objects. +include misc/CMakeFiles/16_8_short.dir/flags.make + +misc/CMakeFiles/16_8_short.dir/16_8_short.c.o: misc/CMakeFiles/16_8_short.dir/flags.make +misc/CMakeFiles/16_8_short.dir/16_8_short.c.o: ../misc/16_8_short.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object misc/CMakeFiles/16_8_short.dir/16_8_short.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/16_8_short.dir/16_8_short.c.o -c /home/sh/Downloads/hackrf/codec2/misc/16_8_short.c + +misc/CMakeFiles/16_8_short.dir/16_8_short.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/16_8_short.dir/16_8_short.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/misc/16_8_short.c > CMakeFiles/16_8_short.dir/16_8_short.c.i + +misc/CMakeFiles/16_8_short.dir/16_8_short.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/16_8_short.dir/16_8_short.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/misc/16_8_short.c -o CMakeFiles/16_8_short.dir/16_8_short.c.s + +misc/CMakeFiles/16_8_short.dir/__/src/fdmdv.c.o: misc/CMakeFiles/16_8_short.dir/flags.make +misc/CMakeFiles/16_8_short.dir/__/src/fdmdv.c.o: ../src/fdmdv.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Building C object misc/CMakeFiles/16_8_short.dir/__/src/fdmdv.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/16_8_short.dir/__/src/fdmdv.c.o -c /home/sh/Downloads/hackrf/codec2/src/fdmdv.c + +misc/CMakeFiles/16_8_short.dir/__/src/fdmdv.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/16_8_short.dir/__/src/fdmdv.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/fdmdv.c > CMakeFiles/16_8_short.dir/__/src/fdmdv.c.i + +misc/CMakeFiles/16_8_short.dir/__/src/fdmdv.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/16_8_short.dir/__/src/fdmdv.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/fdmdv.c -o CMakeFiles/16_8_short.dir/__/src/fdmdv.c.s + +misc/CMakeFiles/16_8_short.dir/__/src/kiss_fft.c.o: misc/CMakeFiles/16_8_short.dir/flags.make +misc/CMakeFiles/16_8_short.dir/__/src/kiss_fft.c.o: ../src/kiss_fft.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_3) "Building C object misc/CMakeFiles/16_8_short.dir/__/src/kiss_fft.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/16_8_short.dir/__/src/kiss_fft.c.o -c /home/sh/Downloads/hackrf/codec2/src/kiss_fft.c + +misc/CMakeFiles/16_8_short.dir/__/src/kiss_fft.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/16_8_short.dir/__/src/kiss_fft.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/kiss_fft.c > CMakeFiles/16_8_short.dir/__/src/kiss_fft.c.i + +misc/CMakeFiles/16_8_short.dir/__/src/kiss_fft.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/16_8_short.dir/__/src/kiss_fft.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/kiss_fft.c -o CMakeFiles/16_8_short.dir/__/src/kiss_fft.c.s + +# Object files for target 16_8_short +16_8_short_OBJECTS = \ +"CMakeFiles/16_8_short.dir/16_8_short.c.o" \ +"CMakeFiles/16_8_short.dir/__/src/fdmdv.c.o" \ +"CMakeFiles/16_8_short.dir/__/src/kiss_fft.c.o" + +# External object files for target 16_8_short +16_8_short_EXTERNAL_OBJECTS = + +misc/16_8_short: misc/CMakeFiles/16_8_short.dir/16_8_short.c.o +misc/16_8_short: misc/CMakeFiles/16_8_short.dir/__/src/fdmdv.c.o +misc/16_8_short: misc/CMakeFiles/16_8_short.dir/__/src/kiss_fft.c.o +misc/16_8_short: misc/CMakeFiles/16_8_short.dir/build.make +misc/16_8_short: src/libcodec2.so.0.9 +misc/16_8_short: misc/CMakeFiles/16_8_short.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_4) "Linking C executable 16_8_short" + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/16_8_short.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +misc/CMakeFiles/16_8_short.dir/build: misc/16_8_short + +.PHONY : misc/CMakeFiles/16_8_short.dir/build + +misc/CMakeFiles/16_8_short.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && $(CMAKE_COMMAND) -P CMakeFiles/16_8_short.dir/cmake_clean.cmake +.PHONY : misc/CMakeFiles/16_8_short.dir/clean + +misc/CMakeFiles/16_8_short.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/misc /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/misc /home/sh/Downloads/hackrf/codec2/build_linux/misc/CMakeFiles/16_8_short.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : misc/CMakeFiles/16_8_short.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/16_8_short.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/16_8_short.dir/cmake_clean.cmake new file mode 100644 index 0000000..aa58c82 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/16_8_short.dir/cmake_clean.cmake @@ -0,0 +1,12 @@ +file(REMOVE_RECURSE + "CMakeFiles/16_8_short.dir/16_8_short.c.o" + "CMakeFiles/16_8_short.dir/__/src/fdmdv.c.o" + "CMakeFiles/16_8_short.dir/__/src/kiss_fft.c.o" + "16_8_short.pdb" + "16_8_short" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/16_8_short.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/16_8_short.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/16_8_short.dir/depend.internal new file mode 100644 index 0000000..eb5707b --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/16_8_short.dir/depend.internal @@ -0,0 +1,32 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +misc/CMakeFiles/16_8_short.dir/16_8_short.c.o + ../misc/../src/codec2_fdmdv.h + ../misc/../src/comp.h + ../misc/../src/kiss_fft.h + ../misc/../src/modem_stats.h + /home/sh/Downloads/hackrf/codec2/misc/16_8_short.c +misc/CMakeFiles/16_8_short.dir/__/src/fdmdv.c.o + /home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h + /home/sh/Downloads/hackrf/codec2/src/codec2_fft.h + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/comp_prim.h + /home/sh/Downloads/hackrf/codec2/src/debug_alloc.h + /home/sh/Downloads/hackrf/codec2/src/defines.h + /home/sh/Downloads/hackrf/codec2/src/fdmdv.c + /home/sh/Downloads/hackrf/codec2/src/fdmdv_internal.h + /home/sh/Downloads/hackrf/codec2/src/hanning.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h + /home/sh/Downloads/hackrf/codec2/src/machdep.h + /home/sh/Downloads/hackrf/codec2/src/modem_stats.h + /home/sh/Downloads/hackrf/codec2/src/os.h + /home/sh/Downloads/hackrf/codec2/src/pilot_coeff.h + /home/sh/Downloads/hackrf/codec2/src/rn.h + /home/sh/Downloads/hackrf/codec2/src/rxdec_coeff.h + /home/sh/Downloads/hackrf/codec2/src/test_bits.h +misc/CMakeFiles/16_8_short.dir/__/src/kiss_fft.c.o + /home/sh/Downloads/hackrf/codec2/src/_kiss_fft_guts.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.c + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/16_8_short.dir/depend.make b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/16_8_short.dir/depend.make new file mode 100644 index 0000000..041fa37 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/16_8_short.dir/depend.make @@ -0,0 +1,32 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +misc/CMakeFiles/16_8_short.dir/16_8_short.c.o: ../misc/../src/codec2_fdmdv.h +misc/CMakeFiles/16_8_short.dir/16_8_short.c.o: ../misc/../src/comp.h +misc/CMakeFiles/16_8_short.dir/16_8_short.c.o: ../misc/../src/kiss_fft.h +misc/CMakeFiles/16_8_short.dir/16_8_short.c.o: ../misc/../src/modem_stats.h +misc/CMakeFiles/16_8_short.dir/16_8_short.c.o: ../misc/16_8_short.c + +misc/CMakeFiles/16_8_short.dir/__/src/fdmdv.c.o: ../src/codec2_fdmdv.h +misc/CMakeFiles/16_8_short.dir/__/src/fdmdv.c.o: ../src/codec2_fft.h +misc/CMakeFiles/16_8_short.dir/__/src/fdmdv.c.o: ../src/comp.h +misc/CMakeFiles/16_8_short.dir/__/src/fdmdv.c.o: ../src/comp_prim.h +misc/CMakeFiles/16_8_short.dir/__/src/fdmdv.c.o: ../src/debug_alloc.h +misc/CMakeFiles/16_8_short.dir/__/src/fdmdv.c.o: ../src/defines.h +misc/CMakeFiles/16_8_short.dir/__/src/fdmdv.c.o: ../src/fdmdv.c +misc/CMakeFiles/16_8_short.dir/__/src/fdmdv.c.o: ../src/fdmdv_internal.h +misc/CMakeFiles/16_8_short.dir/__/src/fdmdv.c.o: ../src/hanning.h +misc/CMakeFiles/16_8_short.dir/__/src/fdmdv.c.o: ../src/kiss_fft.h +misc/CMakeFiles/16_8_short.dir/__/src/fdmdv.c.o: ../src/kiss_fftr.h +misc/CMakeFiles/16_8_short.dir/__/src/fdmdv.c.o: ../src/machdep.h +misc/CMakeFiles/16_8_short.dir/__/src/fdmdv.c.o: ../src/modem_stats.h +misc/CMakeFiles/16_8_short.dir/__/src/fdmdv.c.o: ../src/os.h +misc/CMakeFiles/16_8_short.dir/__/src/fdmdv.c.o: ../src/pilot_coeff.h +misc/CMakeFiles/16_8_short.dir/__/src/fdmdv.c.o: ../src/rn.h +misc/CMakeFiles/16_8_short.dir/__/src/fdmdv.c.o: ../src/rxdec_coeff.h +misc/CMakeFiles/16_8_short.dir/__/src/fdmdv.c.o: ../src/test_bits.h + +misc/CMakeFiles/16_8_short.dir/__/src/kiss_fft.c.o: ../src/_kiss_fft_guts.h +misc/CMakeFiles/16_8_short.dir/__/src/kiss_fft.c.o: ../src/kiss_fft.c +misc/CMakeFiles/16_8_short.dir/__/src/kiss_fft.c.o: ../src/kiss_fft.h + diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/16_8_short.dir/flags.make b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/16_8_short.dir/flags.make new file mode 100644 index 0000000..1280567 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/16_8_short.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DFLOATING_POINT -DGIT_HASH=\"df2ed16c\" -DVAR_ARRAYS -D_GNU_SOURCE=1 + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/misc/../src -I/home/sh/Downloads/hackrf/codec2/src + diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/16_8_short.dir/link.txt b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/16_8_short.dir/link.txt new file mode 100644 index 0000000..3b89794 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/16_8_short.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/16_8_short.dir/16_8_short.c.o CMakeFiles/16_8_short.dir/__/src/fdmdv.c.o CMakeFiles/16_8_short.dir/__/src/kiss_fft.c.o -o 16_8_short -Wl,-rpath,/home/sh/Downloads/hackrf/codec2/build_linux/src ../src/libcodec2.so.0.9 -lm diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/16_8_short.dir/progress.make b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/16_8_short.dir/progress.make new file mode 100644 index 0000000..83b1fa7 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/16_8_short.dir/progress.make @@ -0,0 +1,5 @@ +CMAKE_PROGRESS_1 = +CMAKE_PROGRESS_2 = +CMAKE_PROGRESS_3 = +CMAKE_PROGRESS_4 = 1 + diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/CMakeDirectoryInformation.cmake b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/CMakeDirectoryInformation.cmake new file mode 100644 index 0000000..4745369 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/CMakeDirectoryInformation.cmake @@ -0,0 +1,16 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Relative path conversion top directories. +set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/home/sh/Downloads/hackrf/codec2") +set(CMAKE_RELATIVE_PATH_TOP_BINARY "/home/sh/Downloads/hackrf/codec2/build_linux") + +# Force unix paths in dependencies. +set(CMAKE_FORCE_UNIX_PATHS 1) + + +# The C and CXX include file regular expressions for this directory. +set(CMAKE_C_INCLUDE_REGEX_SCAN "^.*$") +set(CMAKE_C_INCLUDE_REGEX_COMPLAIN "^$") +set(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN}) +set(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN}) diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/est_n0.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/est_n0.dir/C.includecache new file mode 100644 index 0000000..32d73a0 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/est_n0.dir/C.includecache @@ -0,0 +1,26 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +../misc/../src/defines.h + +/home/sh/Downloads/hackrf/codec2/misc/est_n0.c +assert.h +- +complex.h +- +getopt.h +- +math.h +- +stdlib.h +- +stdio.h +- +defines.h +/home/sh/Downloads/hackrf/codec2/misc/defines.h + diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/est_n0.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/est_n0.dir/DependInfo.cmake new file mode 100644 index 0000000..5e25596 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/est_n0.dir/DependInfo.cmake @@ -0,0 +1,30 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/misc/est_n0.c" "/home/sh/Downloads/hackrf/codec2/build_linux/misc/CMakeFiles/est_n0.dir/est_n0.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "FLOATING_POINT" + "GIT_HASH=\"df2ed16c\"" + "VAR_ARRAYS" + "_GNU_SOURCE=1" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../misc/../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/est_n0.dir/build.make b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/est_n0.dir/build.make new file mode 100644 index 0000000..dcfd86e --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/est_n0.dir/build.make @@ -0,0 +1,98 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include misc/CMakeFiles/est_n0.dir/depend.make + +# Include the progress variables for this target. +include misc/CMakeFiles/est_n0.dir/progress.make + +# Include the compile flags for this target's objects. +include misc/CMakeFiles/est_n0.dir/flags.make + +misc/CMakeFiles/est_n0.dir/est_n0.c.o: misc/CMakeFiles/est_n0.dir/flags.make +misc/CMakeFiles/est_n0.dir/est_n0.c.o: ../misc/est_n0.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object misc/CMakeFiles/est_n0.dir/est_n0.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/est_n0.dir/est_n0.c.o -c /home/sh/Downloads/hackrf/codec2/misc/est_n0.c + +misc/CMakeFiles/est_n0.dir/est_n0.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/est_n0.dir/est_n0.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/misc/est_n0.c > CMakeFiles/est_n0.dir/est_n0.c.i + +misc/CMakeFiles/est_n0.dir/est_n0.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/est_n0.dir/est_n0.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/misc/est_n0.c -o CMakeFiles/est_n0.dir/est_n0.c.s + +# Object files for target est_n0 +est_n0_OBJECTS = \ +"CMakeFiles/est_n0.dir/est_n0.c.o" + +# External object files for target est_n0 +est_n0_EXTERNAL_OBJECTS = + +misc/est_n0: misc/CMakeFiles/est_n0.dir/est_n0.c.o +misc/est_n0: misc/CMakeFiles/est_n0.dir/build.make +misc/est_n0: misc/CMakeFiles/est_n0.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking C executable est_n0" + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/est_n0.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +misc/CMakeFiles/est_n0.dir/build: misc/est_n0 + +.PHONY : misc/CMakeFiles/est_n0.dir/build + +misc/CMakeFiles/est_n0.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && $(CMAKE_COMMAND) -P CMakeFiles/est_n0.dir/cmake_clean.cmake +.PHONY : misc/CMakeFiles/est_n0.dir/clean + +misc/CMakeFiles/est_n0.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/misc /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/misc /home/sh/Downloads/hackrf/codec2/build_linux/misc/CMakeFiles/est_n0.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : misc/CMakeFiles/est_n0.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/est_n0.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/est_n0.dir/cmake_clean.cmake new file mode 100644 index 0000000..cbf8359 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/est_n0.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +file(REMOVE_RECURSE + "CMakeFiles/est_n0.dir/est_n0.c.o" + "est_n0.pdb" + "est_n0" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/est_n0.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/est_n0.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/est_n0.dir/depend.internal new file mode 100644 index 0000000..232dc8c --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/est_n0.dir/depend.internal @@ -0,0 +1,6 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +misc/CMakeFiles/est_n0.dir/est_n0.c.o + ../misc/../src/defines.h + /home/sh/Downloads/hackrf/codec2/misc/est_n0.c diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/est_n0.dir/depend.make b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/est_n0.dir/depend.make new file mode 100644 index 0000000..89fe10f --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/est_n0.dir/depend.make @@ -0,0 +1,6 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +misc/CMakeFiles/est_n0.dir/est_n0.c.o: ../misc/../src/defines.h +misc/CMakeFiles/est_n0.dir/est_n0.c.o: ../misc/est_n0.c + diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/est_n0.dir/est_n0.c.o b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/est_n0.dir/est_n0.c.o new file mode 100644 index 0000000..2a6dc2e Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/est_n0.dir/est_n0.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/est_n0.dir/flags.make b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/est_n0.dir/flags.make new file mode 100644 index 0000000..25eaffc --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/est_n0.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DFLOATING_POINT -DGIT_HASH=\"df2ed16c\" -DVAR_ARRAYS -D_GNU_SOURCE=1 + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/misc/../src + diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/est_n0.dir/link.txt b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/est_n0.dir/link.txt new file mode 100644 index 0000000..9ee8c62 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/est_n0.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/est_n0.dir/est_n0.c.o -o est_n0 -lm diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/est_n0.dir/progress.make b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/est_n0.dir/progress.make new file mode 100644 index 0000000..67f3ae8 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/est_n0.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = +CMAKE_PROGRESS_2 = 32 + diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/extract.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/extract.dir/C.includecache new file mode 100644 index 0000000..9196c0f --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/extract.dir/C.includecache @@ -0,0 +1,18 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +/home/sh/Downloads/hackrf/codec2/misc/extract.c +assert.h +- +stdlib.h +- +stdio.h +- +getopt.h +- + diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/extract.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/extract.dir/DependInfo.cmake new file mode 100644 index 0000000..7b668b6 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/extract.dir/DependInfo.cmake @@ -0,0 +1,30 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/misc/extract.c" "/home/sh/Downloads/hackrf/codec2/build_linux/misc/CMakeFiles/extract.dir/extract.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "FLOATING_POINT" + "GIT_HASH=\"df2ed16c\"" + "VAR_ARRAYS" + "_GNU_SOURCE=1" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../misc/../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/extract.dir/build.make b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/extract.dir/build.make new file mode 100644 index 0000000..3554a44 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/extract.dir/build.make @@ -0,0 +1,98 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include misc/CMakeFiles/extract.dir/depend.make + +# Include the progress variables for this target. +include misc/CMakeFiles/extract.dir/progress.make + +# Include the compile flags for this target's objects. +include misc/CMakeFiles/extract.dir/flags.make + +misc/CMakeFiles/extract.dir/extract.c.o: misc/CMakeFiles/extract.dir/flags.make +misc/CMakeFiles/extract.dir/extract.c.o: ../misc/extract.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object misc/CMakeFiles/extract.dir/extract.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/extract.dir/extract.c.o -c /home/sh/Downloads/hackrf/codec2/misc/extract.c + +misc/CMakeFiles/extract.dir/extract.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/extract.dir/extract.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/misc/extract.c > CMakeFiles/extract.dir/extract.c.i + +misc/CMakeFiles/extract.dir/extract.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/extract.dir/extract.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/misc/extract.c -o CMakeFiles/extract.dir/extract.c.s + +# Object files for target extract +extract_OBJECTS = \ +"CMakeFiles/extract.dir/extract.c.o" + +# External object files for target extract +extract_EXTERNAL_OBJECTS = + +misc/extract: misc/CMakeFiles/extract.dir/extract.c.o +misc/extract: misc/CMakeFiles/extract.dir/build.make +misc/extract: misc/CMakeFiles/extract.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking C executable extract" + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/extract.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +misc/CMakeFiles/extract.dir/build: misc/extract + +.PHONY : misc/CMakeFiles/extract.dir/build + +misc/CMakeFiles/extract.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && $(CMAKE_COMMAND) -P CMakeFiles/extract.dir/cmake_clean.cmake +.PHONY : misc/CMakeFiles/extract.dir/clean + +misc/CMakeFiles/extract.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/misc /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/misc /home/sh/Downloads/hackrf/codec2/build_linux/misc/CMakeFiles/extract.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : misc/CMakeFiles/extract.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/extract.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/extract.dir/cmake_clean.cmake new file mode 100644 index 0000000..8d7c117 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/extract.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +file(REMOVE_RECURSE + "CMakeFiles/extract.dir/extract.c.o" + "extract.pdb" + "extract" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/extract.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/extract.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/extract.dir/depend.internal new file mode 100644 index 0000000..9b4b8b7 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/extract.dir/depend.internal @@ -0,0 +1,5 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +misc/CMakeFiles/extract.dir/extract.c.o + /home/sh/Downloads/hackrf/codec2/misc/extract.c diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/extract.dir/depend.make b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/extract.dir/depend.make new file mode 100644 index 0000000..4660cfc --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/extract.dir/depend.make @@ -0,0 +1,5 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +misc/CMakeFiles/extract.dir/extract.c.o: ../misc/extract.c + diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/extract.dir/extract.c.o b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/extract.dir/extract.c.o new file mode 100644 index 0000000..6ade486 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/extract.dir/extract.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/extract.dir/flags.make b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/extract.dir/flags.make new file mode 100644 index 0000000..25eaffc --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/extract.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DFLOATING_POINT -DGIT_HASH=\"df2ed16c\" -DVAR_ARRAYS -D_GNU_SOURCE=1 + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/misc/../src + diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/extract.dir/link.txt b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/extract.dir/link.txt new file mode 100644 index 0000000..d3fd3d4 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/extract.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/extract.dir/extract.c.o -o extract diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/extract.dir/progress.make b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/extract.dir/progress.make new file mode 100644 index 0000000..6c287f1 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/extract.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = +CMAKE_PROGRESS_2 = + diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/mksine.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/mksine.dir/C.includecache new file mode 100644 index 0000000..8e54ca9 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/mksine.dir/C.includecache @@ -0,0 +1,8 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/mksine.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/mksine.dir/DependInfo.cmake new file mode 100644 index 0000000..f28786f --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/mksine.dir/DependInfo.cmake @@ -0,0 +1,30 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/misc/mksine.c" "/home/sh/Downloads/hackrf/codec2/build_linux/misc/CMakeFiles/mksine.dir/mksine.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "FLOATING_POINT" + "GIT_HASH=\"df2ed16c\"" + "VAR_ARRAYS" + "_GNU_SOURCE=1" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../misc/../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/mksine.dir/build.make b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/mksine.dir/build.make new file mode 100644 index 0000000..d647f0b --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/mksine.dir/build.make @@ -0,0 +1,98 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include misc/CMakeFiles/mksine.dir/depend.make + +# Include the progress variables for this target. +include misc/CMakeFiles/mksine.dir/progress.make + +# Include the compile flags for this target's objects. +include misc/CMakeFiles/mksine.dir/flags.make + +misc/CMakeFiles/mksine.dir/mksine.c.o: misc/CMakeFiles/mksine.dir/flags.make +misc/CMakeFiles/mksine.dir/mksine.c.o: ../misc/mksine.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object misc/CMakeFiles/mksine.dir/mksine.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/mksine.dir/mksine.c.o -c /home/sh/Downloads/hackrf/codec2/misc/mksine.c + +misc/CMakeFiles/mksine.dir/mksine.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/mksine.dir/mksine.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/misc/mksine.c > CMakeFiles/mksine.dir/mksine.c.i + +misc/CMakeFiles/mksine.dir/mksine.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/mksine.dir/mksine.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/misc/mksine.c -o CMakeFiles/mksine.dir/mksine.c.s + +# Object files for target mksine +mksine_OBJECTS = \ +"CMakeFiles/mksine.dir/mksine.c.o" + +# External object files for target mksine +mksine_EXTERNAL_OBJECTS = + +misc/mksine: misc/CMakeFiles/mksine.dir/mksine.c.o +misc/mksine: misc/CMakeFiles/mksine.dir/build.make +misc/mksine: misc/CMakeFiles/mksine.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking C executable mksine" + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/mksine.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +misc/CMakeFiles/mksine.dir/build: misc/mksine + +.PHONY : misc/CMakeFiles/mksine.dir/build + +misc/CMakeFiles/mksine.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && $(CMAKE_COMMAND) -P CMakeFiles/mksine.dir/cmake_clean.cmake +.PHONY : misc/CMakeFiles/mksine.dir/clean + +misc/CMakeFiles/mksine.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/misc /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/misc /home/sh/Downloads/hackrf/codec2/build_linux/misc/CMakeFiles/mksine.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : misc/CMakeFiles/mksine.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/mksine.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/mksine.dir/cmake_clean.cmake new file mode 100644 index 0000000..994f4a5 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/mksine.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +file(REMOVE_RECURSE + "CMakeFiles/mksine.dir/mksine.c.o" + "mksine.pdb" + "mksine" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/mksine.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/mksine.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/mksine.dir/depend.internal new file mode 100644 index 0000000..6907ef4 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/mksine.dir/depend.internal @@ -0,0 +1,5 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +misc/CMakeFiles/mksine.dir/mksine.c.o + /home/sh/Downloads/hackrf/codec2/misc/mksine.c diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/mksine.dir/depend.make b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/mksine.dir/depend.make new file mode 100644 index 0000000..4f25932 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/mksine.dir/depend.make @@ -0,0 +1,5 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +misc/CMakeFiles/mksine.dir/mksine.c.o: ../misc/mksine.c + diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/mksine.dir/flags.make b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/mksine.dir/flags.make new file mode 100644 index 0000000..25eaffc --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/mksine.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DFLOATING_POINT -DGIT_HASH=\"df2ed16c\" -DVAR_ARRAYS -D_GNU_SOURCE=1 + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/misc/../src + diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/mksine.dir/link.txt b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/mksine.dir/link.txt new file mode 100644 index 0000000..0eff8da --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/mksine.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/mksine.dir/mksine.c.o -o mksine -lm diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/mksine.dir/mksine.c.o b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/mksine.dir/mksine.c.o new file mode 100644 index 0000000..811429d Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/mksine.dir/mksine.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/mksine.dir/progress.make b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/mksine.dir/progress.make new file mode 100644 index 0000000..6c287f1 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/mksine.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = +CMAKE_PROGRESS_2 = + diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/pre.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/pre.dir/C.includecache new file mode 100644 index 0000000..d42849f --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/pre.dir/C.includecache @@ -0,0 +1,26 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +../misc/../src/lpc.h + +/home/sh/Downloads/hackrf/codec2/misc/pre.c +assert.h +- +math.h +- +errno.h +- +stdlib.h +- +stdio.h +- +string.h +- +lpc.h +/home/sh/Downloads/hackrf/codec2/misc/lpc.h + diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/pre.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/pre.dir/DependInfo.cmake new file mode 100644 index 0000000..42962a1 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/pre.dir/DependInfo.cmake @@ -0,0 +1,32 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/misc/pre.c" "/home/sh/Downloads/hackrf/codec2/build_linux/misc/CMakeFiles/pre.dir/pre.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "FLOATING_POINT" + "GIT_HASH=\"df2ed16c\"" + "VAR_ARRAYS" + "_GNU_SOURCE=1" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../misc/../src" + "../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/DependInfo.cmake" + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/pre.dir/build.make b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/pre.dir/build.make new file mode 100644 index 0000000..ed2dd1a --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/pre.dir/build.make @@ -0,0 +1,99 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include misc/CMakeFiles/pre.dir/depend.make + +# Include the progress variables for this target. +include misc/CMakeFiles/pre.dir/progress.make + +# Include the compile flags for this target's objects. +include misc/CMakeFiles/pre.dir/flags.make + +misc/CMakeFiles/pre.dir/pre.c.o: misc/CMakeFiles/pre.dir/flags.make +misc/CMakeFiles/pre.dir/pre.c.o: ../misc/pre.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object misc/CMakeFiles/pre.dir/pre.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/pre.dir/pre.c.o -c /home/sh/Downloads/hackrf/codec2/misc/pre.c + +misc/CMakeFiles/pre.dir/pre.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/pre.dir/pre.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/misc/pre.c > CMakeFiles/pre.dir/pre.c.i + +misc/CMakeFiles/pre.dir/pre.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/pre.dir/pre.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/misc/pre.c -o CMakeFiles/pre.dir/pre.c.s + +# Object files for target pre +pre_OBJECTS = \ +"CMakeFiles/pre.dir/pre.c.o" + +# External object files for target pre +pre_EXTERNAL_OBJECTS = + +misc/pre: misc/CMakeFiles/pre.dir/pre.c.o +misc/pre: misc/CMakeFiles/pre.dir/build.make +misc/pre: src/libcodec2.so.0.9 +misc/pre: misc/CMakeFiles/pre.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking C executable pre" + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/pre.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +misc/CMakeFiles/pre.dir/build: misc/pre + +.PHONY : misc/CMakeFiles/pre.dir/build + +misc/CMakeFiles/pre.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && $(CMAKE_COMMAND) -P CMakeFiles/pre.dir/cmake_clean.cmake +.PHONY : misc/CMakeFiles/pre.dir/clean + +misc/CMakeFiles/pre.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/misc /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/misc /home/sh/Downloads/hackrf/codec2/build_linux/misc/CMakeFiles/pre.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : misc/CMakeFiles/pre.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/pre.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/pre.dir/cmake_clean.cmake new file mode 100644 index 0000000..664b552 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/pre.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +file(REMOVE_RECURSE + "CMakeFiles/pre.dir/pre.c.o" + "pre.pdb" + "pre" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/pre.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/pre.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/pre.dir/depend.internal new file mode 100644 index 0000000..b8106ba --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/pre.dir/depend.internal @@ -0,0 +1,6 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +misc/CMakeFiles/pre.dir/pre.c.o + ../misc/../src/lpc.h + /home/sh/Downloads/hackrf/codec2/misc/pre.c diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/pre.dir/depend.make b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/pre.dir/depend.make new file mode 100644 index 0000000..f466874 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/pre.dir/depend.make @@ -0,0 +1,6 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +misc/CMakeFiles/pre.dir/pre.c.o: ../misc/../src/lpc.h +misc/CMakeFiles/pre.dir/pre.c.o: ../misc/pre.c + diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/pre.dir/flags.make b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/pre.dir/flags.make new file mode 100644 index 0000000..1280567 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/pre.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DFLOATING_POINT -DGIT_HASH=\"df2ed16c\" -DVAR_ARRAYS -D_GNU_SOURCE=1 + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/misc/../src -I/home/sh/Downloads/hackrf/codec2/src + diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/pre.dir/link.txt b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/pre.dir/link.txt new file mode 100644 index 0000000..5f5b8da --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/pre.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/pre.dir/pre.c.o -o pre -Wl,-rpath,/home/sh/Downloads/hackrf/codec2/build_linux/src ../src/libcodec2.so.0.9 -lm diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/pre.dir/pre.c.o b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/pre.dir/pre.c.o new file mode 100644 index 0000000..439aee0 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/pre.dir/pre.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/pre.dir/progress.make b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/pre.dir/progress.make new file mode 100644 index 0000000..2e7701f --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/pre.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = +CMAKE_PROGRESS_2 = 69 + diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/progress.marks b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/progress.marks new file mode 100644 index 0000000..a787364 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/progress.marks @@ -0,0 +1 @@ +34 diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/raw2h.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/raw2h.dir/C.includecache new file mode 100644 index 0000000..8e54ca9 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/raw2h.dir/C.includecache @@ -0,0 +1,8 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/raw2h.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/raw2h.dir/DependInfo.cmake new file mode 100644 index 0000000..9b880ef --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/raw2h.dir/DependInfo.cmake @@ -0,0 +1,32 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/misc/raw2h.c" "/home/sh/Downloads/hackrf/codec2/build_linux/misc/CMakeFiles/raw2h.dir/raw2h.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "FLOATING_POINT" + "GIT_HASH=\"df2ed16c\"" + "VAR_ARRAYS" + "_GNU_SOURCE=1" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../misc/../src" + "../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/DependInfo.cmake" + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/raw2h.dir/build.make b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/raw2h.dir/build.make new file mode 100644 index 0000000..f0ad5be --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/raw2h.dir/build.make @@ -0,0 +1,99 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include misc/CMakeFiles/raw2h.dir/depend.make + +# Include the progress variables for this target. +include misc/CMakeFiles/raw2h.dir/progress.make + +# Include the compile flags for this target's objects. +include misc/CMakeFiles/raw2h.dir/flags.make + +misc/CMakeFiles/raw2h.dir/raw2h.c.o: misc/CMakeFiles/raw2h.dir/flags.make +misc/CMakeFiles/raw2h.dir/raw2h.c.o: ../misc/raw2h.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object misc/CMakeFiles/raw2h.dir/raw2h.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/raw2h.dir/raw2h.c.o -c /home/sh/Downloads/hackrf/codec2/misc/raw2h.c + +misc/CMakeFiles/raw2h.dir/raw2h.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/raw2h.dir/raw2h.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/misc/raw2h.c > CMakeFiles/raw2h.dir/raw2h.c.i + +misc/CMakeFiles/raw2h.dir/raw2h.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/raw2h.dir/raw2h.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/misc/raw2h.c -o CMakeFiles/raw2h.dir/raw2h.c.s + +# Object files for target raw2h +raw2h_OBJECTS = \ +"CMakeFiles/raw2h.dir/raw2h.c.o" + +# External object files for target raw2h +raw2h_EXTERNAL_OBJECTS = + +misc/raw2h: misc/CMakeFiles/raw2h.dir/raw2h.c.o +misc/raw2h: misc/CMakeFiles/raw2h.dir/build.make +misc/raw2h: src/libcodec2.so.0.9 +misc/raw2h: misc/CMakeFiles/raw2h.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking C executable raw2h" + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/raw2h.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +misc/CMakeFiles/raw2h.dir/build: misc/raw2h + +.PHONY : misc/CMakeFiles/raw2h.dir/build + +misc/CMakeFiles/raw2h.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && $(CMAKE_COMMAND) -P CMakeFiles/raw2h.dir/cmake_clean.cmake +.PHONY : misc/CMakeFiles/raw2h.dir/clean + +misc/CMakeFiles/raw2h.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/misc /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/misc /home/sh/Downloads/hackrf/codec2/build_linux/misc/CMakeFiles/raw2h.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : misc/CMakeFiles/raw2h.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/raw2h.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/raw2h.dir/cmake_clean.cmake new file mode 100644 index 0000000..d25bb37 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/raw2h.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +file(REMOVE_RECURSE + "CMakeFiles/raw2h.dir/raw2h.c.o" + "raw2h.pdb" + "raw2h" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/raw2h.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/raw2h.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/raw2h.dir/depend.internal new file mode 100644 index 0000000..eb05a8f --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/raw2h.dir/depend.internal @@ -0,0 +1,5 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +misc/CMakeFiles/raw2h.dir/raw2h.c.o + /home/sh/Downloads/hackrf/codec2/misc/raw2h.c diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/raw2h.dir/depend.make b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/raw2h.dir/depend.make new file mode 100644 index 0000000..3b15a6a --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/raw2h.dir/depend.make @@ -0,0 +1,5 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +misc/CMakeFiles/raw2h.dir/raw2h.c.o: ../misc/raw2h.c + diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/raw2h.dir/flags.make b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/raw2h.dir/flags.make new file mode 100644 index 0000000..1280567 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/raw2h.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DFLOATING_POINT -DGIT_HASH=\"df2ed16c\" -DVAR_ARRAYS -D_GNU_SOURCE=1 + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/misc/../src -I/home/sh/Downloads/hackrf/codec2/src + diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/raw2h.dir/link.txt b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/raw2h.dir/link.txt new file mode 100644 index 0000000..38b7c79 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/raw2h.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/raw2h.dir/raw2h.c.o -o raw2h -Wl,-rpath,/home/sh/Downloads/hackrf/codec2/build_linux/src ../src/libcodec2.so.0.9 -lm diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/raw2h.dir/progress.make b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/raw2h.dir/progress.make new file mode 100644 index 0000000..6c287f1 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/raw2h.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = +CMAKE_PROGRESS_2 = + diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/raw2h.dir/raw2h.c.o b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/raw2h.dir/raw2h.c.o new file mode 100644 index 0000000..a57e7af Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/raw2h.dir/raw2h.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/t16_8.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/t16_8.dir/C.includecache new file mode 100644 index 0000000..422944c --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/t16_8.dir/C.includecache @@ -0,0 +1,168 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +../misc/../src/codec2_fdmdv.h +comp.h +../misc/../src/comp.h +modem_stats.h +../misc/../src/modem_stats.h + +../misc/../src/comp.h + +../misc/../src/kiss_fft.h +stdlib.h +- +stdio.h +- +math.h +- +string.h +- +xmmintrin.h +- +sys/types.h +- + +../misc/../src/modem_stats.h +comp.h +../misc/../src/comp.h +kiss_fft.h +../misc/../src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/misc/t16_8.c +assert.h +- +math.h +- +stdlib.h +- +stdio.h +- +codec2_fdmdv.h +/home/sh/Downloads/hackrf/codec2/misc/codec2_fdmdv.h + +/home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +modem_stats.h +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h + +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.h +assert.h +- +stdlib.h +- +stdio.h +- +string.h +- +math.h +- +fdv_arm_math.h +/home/sh/Downloads/hackrf/codec2/src/fdv_arm_math.h +defines.h +/home/sh/Downloads/hackrf/codec2/src/defines.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +kiss_fftr.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/comp_prim.h + +/home/sh/Downloads/hackrf/codec2/src/debug_alloc.h +stdio.h +- + +/home/sh/Downloads/hackrf/codec2/src/defines.h + +/home/sh/Downloads/hackrf/codec2/src/fdmdv.c +assert.h +- +stdlib.h +- +stdio.h +- +string.h +- +math.h +- +fdmdv_internal.h +/home/sh/Downloads/hackrf/codec2/src/fdmdv_internal.h +codec2_fdmdv.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h +comp_prim.h +/home/sh/Downloads/hackrf/codec2/src/comp_prim.h +rn.h +/home/sh/Downloads/hackrf/codec2/src/rn.h +rxdec_coeff.h +/home/sh/Downloads/hackrf/codec2/src/rxdec_coeff.h +test_bits.h +/home/sh/Downloads/hackrf/codec2/src/test_bits.h +pilot_coeff.h +/home/sh/Downloads/hackrf/codec2/src/pilot_coeff.h +codec2_fft.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.h +hanning.h +/home/sh/Downloads/hackrf/codec2/src/hanning.h +os.h +/home/sh/Downloads/hackrf/codec2/src/os.h +machdep.h +/home/sh/Downloads/hackrf/codec2/src/machdep.h +debug_alloc.h +/home/sh/Downloads/hackrf/codec2/src/debug_alloc.h + +/home/sh/Downloads/hackrf/codec2/src/fdmdv_internal.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +codec2_fdmdv.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h +codec2_fft.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.h + +/home/sh/Downloads/hackrf/codec2/src/hanning.h + +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h +stdlib.h +- +stdio.h +- +math.h +- +string.h +- +xmmintrin.h +- +sys/types.h +- + +/home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/src/machdep.h + +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/src/os.h + +/home/sh/Downloads/hackrf/codec2/src/pilot_coeff.h + +/home/sh/Downloads/hackrf/codec2/src/rn.h + +/home/sh/Downloads/hackrf/codec2/src/rxdec_coeff.h + +/home/sh/Downloads/hackrf/codec2/src/test_bits.h + diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/t16_8.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/t16_8.dir/DependInfo.cmake new file mode 100644 index 0000000..5866053 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/t16_8.dir/DependInfo.cmake @@ -0,0 +1,34 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/src/fdmdv.c" "/home/sh/Downloads/hackrf/codec2/build_linux/misc/CMakeFiles/t16_8.dir/__/src/fdmdv.c.o" + "/home/sh/Downloads/hackrf/codec2/src/kiss_fft.c" "/home/sh/Downloads/hackrf/codec2/build_linux/misc/CMakeFiles/t16_8.dir/__/src/kiss_fft.c.o" + "/home/sh/Downloads/hackrf/codec2/misc/t16_8.c" "/home/sh/Downloads/hackrf/codec2/build_linux/misc/CMakeFiles/t16_8.dir/t16_8.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "FLOATING_POINT" + "GIT_HASH=\"df2ed16c\"" + "VAR_ARRAYS" + "_GNU_SOURCE=1" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../misc/../src" + "../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/DependInfo.cmake" + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/t16_8.dir/__/src/fdmdv.c.o b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/t16_8.dir/__/src/fdmdv.c.o new file mode 100644 index 0000000..f981940 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/t16_8.dir/__/src/fdmdv.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/t16_8.dir/__/src/kiss_fft.c.o b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/t16_8.dir/__/src/kiss_fft.c.o new file mode 100644 index 0000000..1193fcd Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/t16_8.dir/__/src/kiss_fft.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/t16_8.dir/build.make b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/t16_8.dir/build.make new file mode 100644 index 0000000..28d9b92 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/t16_8.dir/build.make @@ -0,0 +1,129 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include misc/CMakeFiles/t16_8.dir/depend.make + +# Include the progress variables for this target. +include misc/CMakeFiles/t16_8.dir/progress.make + +# Include the compile flags for this target's objects. +include misc/CMakeFiles/t16_8.dir/flags.make + +misc/CMakeFiles/t16_8.dir/t16_8.c.o: misc/CMakeFiles/t16_8.dir/flags.make +misc/CMakeFiles/t16_8.dir/t16_8.c.o: ../misc/t16_8.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object misc/CMakeFiles/t16_8.dir/t16_8.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/t16_8.dir/t16_8.c.o -c /home/sh/Downloads/hackrf/codec2/misc/t16_8.c + +misc/CMakeFiles/t16_8.dir/t16_8.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/t16_8.dir/t16_8.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/misc/t16_8.c > CMakeFiles/t16_8.dir/t16_8.c.i + +misc/CMakeFiles/t16_8.dir/t16_8.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/t16_8.dir/t16_8.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/misc/t16_8.c -o CMakeFiles/t16_8.dir/t16_8.c.s + +misc/CMakeFiles/t16_8.dir/__/src/fdmdv.c.o: misc/CMakeFiles/t16_8.dir/flags.make +misc/CMakeFiles/t16_8.dir/__/src/fdmdv.c.o: ../src/fdmdv.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Building C object misc/CMakeFiles/t16_8.dir/__/src/fdmdv.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/t16_8.dir/__/src/fdmdv.c.o -c /home/sh/Downloads/hackrf/codec2/src/fdmdv.c + +misc/CMakeFiles/t16_8.dir/__/src/fdmdv.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/t16_8.dir/__/src/fdmdv.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/fdmdv.c > CMakeFiles/t16_8.dir/__/src/fdmdv.c.i + +misc/CMakeFiles/t16_8.dir/__/src/fdmdv.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/t16_8.dir/__/src/fdmdv.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/fdmdv.c -o CMakeFiles/t16_8.dir/__/src/fdmdv.c.s + +misc/CMakeFiles/t16_8.dir/__/src/kiss_fft.c.o: misc/CMakeFiles/t16_8.dir/flags.make +misc/CMakeFiles/t16_8.dir/__/src/kiss_fft.c.o: ../src/kiss_fft.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_3) "Building C object misc/CMakeFiles/t16_8.dir/__/src/kiss_fft.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/t16_8.dir/__/src/kiss_fft.c.o -c /home/sh/Downloads/hackrf/codec2/src/kiss_fft.c + +misc/CMakeFiles/t16_8.dir/__/src/kiss_fft.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/t16_8.dir/__/src/kiss_fft.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/kiss_fft.c > CMakeFiles/t16_8.dir/__/src/kiss_fft.c.i + +misc/CMakeFiles/t16_8.dir/__/src/kiss_fft.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/t16_8.dir/__/src/kiss_fft.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/kiss_fft.c -o CMakeFiles/t16_8.dir/__/src/kiss_fft.c.s + +# Object files for target t16_8 +t16_8_OBJECTS = \ +"CMakeFiles/t16_8.dir/t16_8.c.o" \ +"CMakeFiles/t16_8.dir/__/src/fdmdv.c.o" \ +"CMakeFiles/t16_8.dir/__/src/kiss_fft.c.o" + +# External object files for target t16_8 +t16_8_EXTERNAL_OBJECTS = + +misc/t16_8: misc/CMakeFiles/t16_8.dir/t16_8.c.o +misc/t16_8: misc/CMakeFiles/t16_8.dir/__/src/fdmdv.c.o +misc/t16_8: misc/CMakeFiles/t16_8.dir/__/src/kiss_fft.c.o +misc/t16_8: misc/CMakeFiles/t16_8.dir/build.make +misc/t16_8: src/libcodec2.so.0.9 +misc/t16_8: misc/CMakeFiles/t16_8.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_4) "Linking C executable t16_8" + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/t16_8.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +misc/CMakeFiles/t16_8.dir/build: misc/t16_8 + +.PHONY : misc/CMakeFiles/t16_8.dir/build + +misc/CMakeFiles/t16_8.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && $(CMAKE_COMMAND) -P CMakeFiles/t16_8.dir/cmake_clean.cmake +.PHONY : misc/CMakeFiles/t16_8.dir/clean + +misc/CMakeFiles/t16_8.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/misc /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/misc /home/sh/Downloads/hackrf/codec2/build_linux/misc/CMakeFiles/t16_8.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : misc/CMakeFiles/t16_8.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/t16_8.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/t16_8.dir/cmake_clean.cmake new file mode 100644 index 0000000..80b640d --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/t16_8.dir/cmake_clean.cmake @@ -0,0 +1,12 @@ +file(REMOVE_RECURSE + "CMakeFiles/t16_8.dir/t16_8.c.o" + "CMakeFiles/t16_8.dir/__/src/fdmdv.c.o" + "CMakeFiles/t16_8.dir/__/src/kiss_fft.c.o" + "t16_8.pdb" + "t16_8" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/t16_8.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/t16_8.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/t16_8.dir/depend.internal new file mode 100644 index 0000000..e2c1162 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/t16_8.dir/depend.internal @@ -0,0 +1,32 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +misc/CMakeFiles/t16_8.dir/__/src/fdmdv.c.o + /home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h + /home/sh/Downloads/hackrf/codec2/src/codec2_fft.h + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/comp_prim.h + /home/sh/Downloads/hackrf/codec2/src/debug_alloc.h + /home/sh/Downloads/hackrf/codec2/src/defines.h + /home/sh/Downloads/hackrf/codec2/src/fdmdv.c + /home/sh/Downloads/hackrf/codec2/src/fdmdv_internal.h + /home/sh/Downloads/hackrf/codec2/src/hanning.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h + /home/sh/Downloads/hackrf/codec2/src/machdep.h + /home/sh/Downloads/hackrf/codec2/src/modem_stats.h + /home/sh/Downloads/hackrf/codec2/src/os.h + /home/sh/Downloads/hackrf/codec2/src/pilot_coeff.h + /home/sh/Downloads/hackrf/codec2/src/rn.h + /home/sh/Downloads/hackrf/codec2/src/rxdec_coeff.h + /home/sh/Downloads/hackrf/codec2/src/test_bits.h +misc/CMakeFiles/t16_8.dir/__/src/kiss_fft.c.o + /home/sh/Downloads/hackrf/codec2/src/_kiss_fft_guts.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.c + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h +misc/CMakeFiles/t16_8.dir/t16_8.c.o + ../misc/../src/codec2_fdmdv.h + ../misc/../src/comp.h + ../misc/../src/kiss_fft.h + ../misc/../src/modem_stats.h + /home/sh/Downloads/hackrf/codec2/misc/t16_8.c diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/t16_8.dir/depend.make b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/t16_8.dir/depend.make new file mode 100644 index 0000000..587ac29 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/t16_8.dir/depend.make @@ -0,0 +1,32 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +misc/CMakeFiles/t16_8.dir/__/src/fdmdv.c.o: ../src/codec2_fdmdv.h +misc/CMakeFiles/t16_8.dir/__/src/fdmdv.c.o: ../src/codec2_fft.h +misc/CMakeFiles/t16_8.dir/__/src/fdmdv.c.o: ../src/comp.h +misc/CMakeFiles/t16_8.dir/__/src/fdmdv.c.o: ../src/comp_prim.h +misc/CMakeFiles/t16_8.dir/__/src/fdmdv.c.o: ../src/debug_alloc.h +misc/CMakeFiles/t16_8.dir/__/src/fdmdv.c.o: ../src/defines.h +misc/CMakeFiles/t16_8.dir/__/src/fdmdv.c.o: ../src/fdmdv.c +misc/CMakeFiles/t16_8.dir/__/src/fdmdv.c.o: ../src/fdmdv_internal.h +misc/CMakeFiles/t16_8.dir/__/src/fdmdv.c.o: ../src/hanning.h +misc/CMakeFiles/t16_8.dir/__/src/fdmdv.c.o: ../src/kiss_fft.h +misc/CMakeFiles/t16_8.dir/__/src/fdmdv.c.o: ../src/kiss_fftr.h +misc/CMakeFiles/t16_8.dir/__/src/fdmdv.c.o: ../src/machdep.h +misc/CMakeFiles/t16_8.dir/__/src/fdmdv.c.o: ../src/modem_stats.h +misc/CMakeFiles/t16_8.dir/__/src/fdmdv.c.o: ../src/os.h +misc/CMakeFiles/t16_8.dir/__/src/fdmdv.c.o: ../src/pilot_coeff.h +misc/CMakeFiles/t16_8.dir/__/src/fdmdv.c.o: ../src/rn.h +misc/CMakeFiles/t16_8.dir/__/src/fdmdv.c.o: ../src/rxdec_coeff.h +misc/CMakeFiles/t16_8.dir/__/src/fdmdv.c.o: ../src/test_bits.h + +misc/CMakeFiles/t16_8.dir/__/src/kiss_fft.c.o: ../src/_kiss_fft_guts.h +misc/CMakeFiles/t16_8.dir/__/src/kiss_fft.c.o: ../src/kiss_fft.c +misc/CMakeFiles/t16_8.dir/__/src/kiss_fft.c.o: ../src/kiss_fft.h + +misc/CMakeFiles/t16_8.dir/t16_8.c.o: ../misc/../src/codec2_fdmdv.h +misc/CMakeFiles/t16_8.dir/t16_8.c.o: ../misc/../src/comp.h +misc/CMakeFiles/t16_8.dir/t16_8.c.o: ../misc/../src/kiss_fft.h +misc/CMakeFiles/t16_8.dir/t16_8.c.o: ../misc/../src/modem_stats.h +misc/CMakeFiles/t16_8.dir/t16_8.c.o: ../misc/t16_8.c + diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/t16_8.dir/flags.make b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/t16_8.dir/flags.make new file mode 100644 index 0000000..1280567 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/t16_8.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DFLOATING_POINT -DGIT_HASH=\"df2ed16c\" -DVAR_ARRAYS -D_GNU_SOURCE=1 + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/misc/../src -I/home/sh/Downloads/hackrf/codec2/src + diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/t16_8.dir/link.txt b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/t16_8.dir/link.txt new file mode 100644 index 0000000..68296f6 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/t16_8.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/t16_8.dir/t16_8.c.o CMakeFiles/t16_8.dir/__/src/fdmdv.c.o CMakeFiles/t16_8.dir/__/src/kiss_fft.c.o -o t16_8 -Wl,-rpath,/home/sh/Downloads/hackrf/codec2/build_linux/src ../src/libcodec2.so.0.9 -lm diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/t16_8.dir/progress.make b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/t16_8.dir/progress.make new file mode 100644 index 0000000..a27176f --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/t16_8.dir/progress.make @@ -0,0 +1,5 @@ +CMAKE_PROGRESS_1 = 70 +CMAKE_PROGRESS_2 = +CMAKE_PROGRESS_3 = +CMAKE_PROGRESS_4 = 71 + diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/t16_8.dir/t16_8.c.o b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/t16_8.dir/t16_8.c.o new file mode 100644 index 0000000..ede46ef Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/t16_8.dir/t16_8.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/t16_8_short.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/t16_8_short.dir/C.includecache new file mode 100644 index 0000000..c962db0 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/t16_8_short.dir/C.includecache @@ -0,0 +1,168 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +../misc/../src/codec2_fdmdv.h +comp.h +../misc/../src/comp.h +modem_stats.h +../misc/../src/modem_stats.h + +../misc/../src/comp.h + +../misc/../src/kiss_fft.h +stdlib.h +- +stdio.h +- +math.h +- +string.h +- +xmmintrin.h +- +sys/types.h +- + +../misc/../src/modem_stats.h +comp.h +../misc/../src/comp.h +kiss_fft.h +../misc/../src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/misc/t16_8_short.c +assert.h +- +math.h +- +stdlib.h +- +stdio.h +- +codec2_fdmdv.h +/home/sh/Downloads/hackrf/codec2/misc/codec2_fdmdv.h + +/home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +modem_stats.h +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h + +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.h +assert.h +- +stdlib.h +- +stdio.h +- +string.h +- +math.h +- +fdv_arm_math.h +/home/sh/Downloads/hackrf/codec2/src/fdv_arm_math.h +defines.h +/home/sh/Downloads/hackrf/codec2/src/defines.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +kiss_fftr.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/comp_prim.h + +/home/sh/Downloads/hackrf/codec2/src/debug_alloc.h +stdio.h +- + +/home/sh/Downloads/hackrf/codec2/src/defines.h + +/home/sh/Downloads/hackrf/codec2/src/fdmdv.c +assert.h +- +stdlib.h +- +stdio.h +- +string.h +- +math.h +- +fdmdv_internal.h +/home/sh/Downloads/hackrf/codec2/src/fdmdv_internal.h +codec2_fdmdv.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h +comp_prim.h +/home/sh/Downloads/hackrf/codec2/src/comp_prim.h +rn.h +/home/sh/Downloads/hackrf/codec2/src/rn.h +rxdec_coeff.h +/home/sh/Downloads/hackrf/codec2/src/rxdec_coeff.h +test_bits.h +/home/sh/Downloads/hackrf/codec2/src/test_bits.h +pilot_coeff.h +/home/sh/Downloads/hackrf/codec2/src/pilot_coeff.h +codec2_fft.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.h +hanning.h +/home/sh/Downloads/hackrf/codec2/src/hanning.h +os.h +/home/sh/Downloads/hackrf/codec2/src/os.h +machdep.h +/home/sh/Downloads/hackrf/codec2/src/machdep.h +debug_alloc.h +/home/sh/Downloads/hackrf/codec2/src/debug_alloc.h + +/home/sh/Downloads/hackrf/codec2/src/fdmdv_internal.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +codec2_fdmdv.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h +codec2_fft.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.h + +/home/sh/Downloads/hackrf/codec2/src/hanning.h + +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h +stdlib.h +- +stdio.h +- +math.h +- +string.h +- +xmmintrin.h +- +sys/types.h +- + +/home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/src/machdep.h + +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/src/os.h + +/home/sh/Downloads/hackrf/codec2/src/pilot_coeff.h + +/home/sh/Downloads/hackrf/codec2/src/rn.h + +/home/sh/Downloads/hackrf/codec2/src/rxdec_coeff.h + +/home/sh/Downloads/hackrf/codec2/src/test_bits.h + diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/t16_8_short.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/t16_8_short.dir/DependInfo.cmake new file mode 100644 index 0000000..af96251 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/t16_8_short.dir/DependInfo.cmake @@ -0,0 +1,34 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/src/fdmdv.c" "/home/sh/Downloads/hackrf/codec2/build_linux/misc/CMakeFiles/t16_8_short.dir/__/src/fdmdv.c.o" + "/home/sh/Downloads/hackrf/codec2/src/kiss_fft.c" "/home/sh/Downloads/hackrf/codec2/build_linux/misc/CMakeFiles/t16_8_short.dir/__/src/kiss_fft.c.o" + "/home/sh/Downloads/hackrf/codec2/misc/t16_8_short.c" "/home/sh/Downloads/hackrf/codec2/build_linux/misc/CMakeFiles/t16_8_short.dir/t16_8_short.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "FLOATING_POINT" + "GIT_HASH=\"df2ed16c\"" + "VAR_ARRAYS" + "_GNU_SOURCE=1" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../misc/../src" + "../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/DependInfo.cmake" + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/t16_8_short.dir/__/src/fdmdv.c.o b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/t16_8_short.dir/__/src/fdmdv.c.o new file mode 100644 index 0000000..f981940 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/t16_8_short.dir/__/src/fdmdv.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/t16_8_short.dir/__/src/kiss_fft.c.o b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/t16_8_short.dir/__/src/kiss_fft.c.o new file mode 100644 index 0000000..1193fcd Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/t16_8_short.dir/__/src/kiss_fft.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/t16_8_short.dir/build.make b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/t16_8_short.dir/build.make new file mode 100644 index 0000000..0e3aee2 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/t16_8_short.dir/build.make @@ -0,0 +1,129 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include misc/CMakeFiles/t16_8_short.dir/depend.make + +# Include the progress variables for this target. +include misc/CMakeFiles/t16_8_short.dir/progress.make + +# Include the compile flags for this target's objects. +include misc/CMakeFiles/t16_8_short.dir/flags.make + +misc/CMakeFiles/t16_8_short.dir/t16_8_short.c.o: misc/CMakeFiles/t16_8_short.dir/flags.make +misc/CMakeFiles/t16_8_short.dir/t16_8_short.c.o: ../misc/t16_8_short.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object misc/CMakeFiles/t16_8_short.dir/t16_8_short.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/t16_8_short.dir/t16_8_short.c.o -c /home/sh/Downloads/hackrf/codec2/misc/t16_8_short.c + +misc/CMakeFiles/t16_8_short.dir/t16_8_short.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/t16_8_short.dir/t16_8_short.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/misc/t16_8_short.c > CMakeFiles/t16_8_short.dir/t16_8_short.c.i + +misc/CMakeFiles/t16_8_short.dir/t16_8_short.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/t16_8_short.dir/t16_8_short.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/misc/t16_8_short.c -o CMakeFiles/t16_8_short.dir/t16_8_short.c.s + +misc/CMakeFiles/t16_8_short.dir/__/src/fdmdv.c.o: misc/CMakeFiles/t16_8_short.dir/flags.make +misc/CMakeFiles/t16_8_short.dir/__/src/fdmdv.c.o: ../src/fdmdv.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Building C object misc/CMakeFiles/t16_8_short.dir/__/src/fdmdv.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/t16_8_short.dir/__/src/fdmdv.c.o -c /home/sh/Downloads/hackrf/codec2/src/fdmdv.c + +misc/CMakeFiles/t16_8_short.dir/__/src/fdmdv.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/t16_8_short.dir/__/src/fdmdv.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/fdmdv.c > CMakeFiles/t16_8_short.dir/__/src/fdmdv.c.i + +misc/CMakeFiles/t16_8_short.dir/__/src/fdmdv.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/t16_8_short.dir/__/src/fdmdv.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/fdmdv.c -o CMakeFiles/t16_8_short.dir/__/src/fdmdv.c.s + +misc/CMakeFiles/t16_8_short.dir/__/src/kiss_fft.c.o: misc/CMakeFiles/t16_8_short.dir/flags.make +misc/CMakeFiles/t16_8_short.dir/__/src/kiss_fft.c.o: ../src/kiss_fft.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_3) "Building C object misc/CMakeFiles/t16_8_short.dir/__/src/kiss_fft.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/t16_8_short.dir/__/src/kiss_fft.c.o -c /home/sh/Downloads/hackrf/codec2/src/kiss_fft.c + +misc/CMakeFiles/t16_8_short.dir/__/src/kiss_fft.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/t16_8_short.dir/__/src/kiss_fft.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/kiss_fft.c > CMakeFiles/t16_8_short.dir/__/src/kiss_fft.c.i + +misc/CMakeFiles/t16_8_short.dir/__/src/kiss_fft.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/t16_8_short.dir/__/src/kiss_fft.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/kiss_fft.c -o CMakeFiles/t16_8_short.dir/__/src/kiss_fft.c.s + +# Object files for target t16_8_short +t16_8_short_OBJECTS = \ +"CMakeFiles/t16_8_short.dir/t16_8_short.c.o" \ +"CMakeFiles/t16_8_short.dir/__/src/fdmdv.c.o" \ +"CMakeFiles/t16_8_short.dir/__/src/kiss_fft.c.o" + +# External object files for target t16_8_short +t16_8_short_EXTERNAL_OBJECTS = + +misc/t16_8_short: misc/CMakeFiles/t16_8_short.dir/t16_8_short.c.o +misc/t16_8_short: misc/CMakeFiles/t16_8_short.dir/__/src/fdmdv.c.o +misc/t16_8_short: misc/CMakeFiles/t16_8_short.dir/__/src/kiss_fft.c.o +misc/t16_8_short: misc/CMakeFiles/t16_8_short.dir/build.make +misc/t16_8_short: src/libcodec2.so.0.9 +misc/t16_8_short: misc/CMakeFiles/t16_8_short.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_4) "Linking C executable t16_8_short" + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/t16_8_short.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +misc/CMakeFiles/t16_8_short.dir/build: misc/t16_8_short + +.PHONY : misc/CMakeFiles/t16_8_short.dir/build + +misc/CMakeFiles/t16_8_short.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && $(CMAKE_COMMAND) -P CMakeFiles/t16_8_short.dir/cmake_clean.cmake +.PHONY : misc/CMakeFiles/t16_8_short.dir/clean + +misc/CMakeFiles/t16_8_short.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/misc /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/misc /home/sh/Downloads/hackrf/codec2/build_linux/misc/CMakeFiles/t16_8_short.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : misc/CMakeFiles/t16_8_short.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/t16_8_short.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/t16_8_short.dir/cmake_clean.cmake new file mode 100644 index 0000000..a1eb5d1 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/t16_8_short.dir/cmake_clean.cmake @@ -0,0 +1,12 @@ +file(REMOVE_RECURSE + "CMakeFiles/t16_8_short.dir/t16_8_short.c.o" + "CMakeFiles/t16_8_short.dir/__/src/fdmdv.c.o" + "CMakeFiles/t16_8_short.dir/__/src/kiss_fft.c.o" + "t16_8_short.pdb" + "t16_8_short" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/t16_8_short.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/t16_8_short.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/t16_8_short.dir/depend.internal new file mode 100644 index 0000000..1bb9f9d --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/t16_8_short.dir/depend.internal @@ -0,0 +1,32 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +misc/CMakeFiles/t16_8_short.dir/__/src/fdmdv.c.o + /home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h + /home/sh/Downloads/hackrf/codec2/src/codec2_fft.h + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/comp_prim.h + /home/sh/Downloads/hackrf/codec2/src/debug_alloc.h + /home/sh/Downloads/hackrf/codec2/src/defines.h + /home/sh/Downloads/hackrf/codec2/src/fdmdv.c + /home/sh/Downloads/hackrf/codec2/src/fdmdv_internal.h + /home/sh/Downloads/hackrf/codec2/src/hanning.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h + /home/sh/Downloads/hackrf/codec2/src/machdep.h + /home/sh/Downloads/hackrf/codec2/src/modem_stats.h + /home/sh/Downloads/hackrf/codec2/src/os.h + /home/sh/Downloads/hackrf/codec2/src/pilot_coeff.h + /home/sh/Downloads/hackrf/codec2/src/rn.h + /home/sh/Downloads/hackrf/codec2/src/rxdec_coeff.h + /home/sh/Downloads/hackrf/codec2/src/test_bits.h +misc/CMakeFiles/t16_8_short.dir/__/src/kiss_fft.c.o + /home/sh/Downloads/hackrf/codec2/src/_kiss_fft_guts.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.c + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h +misc/CMakeFiles/t16_8_short.dir/t16_8_short.c.o + ../misc/../src/codec2_fdmdv.h + ../misc/../src/comp.h + ../misc/../src/kiss_fft.h + ../misc/../src/modem_stats.h + /home/sh/Downloads/hackrf/codec2/misc/t16_8_short.c diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/t16_8_short.dir/depend.make b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/t16_8_short.dir/depend.make new file mode 100644 index 0000000..7d0ea83 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/t16_8_short.dir/depend.make @@ -0,0 +1,32 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +misc/CMakeFiles/t16_8_short.dir/__/src/fdmdv.c.o: ../src/codec2_fdmdv.h +misc/CMakeFiles/t16_8_short.dir/__/src/fdmdv.c.o: ../src/codec2_fft.h +misc/CMakeFiles/t16_8_short.dir/__/src/fdmdv.c.o: ../src/comp.h +misc/CMakeFiles/t16_8_short.dir/__/src/fdmdv.c.o: ../src/comp_prim.h +misc/CMakeFiles/t16_8_short.dir/__/src/fdmdv.c.o: ../src/debug_alloc.h +misc/CMakeFiles/t16_8_short.dir/__/src/fdmdv.c.o: ../src/defines.h +misc/CMakeFiles/t16_8_short.dir/__/src/fdmdv.c.o: ../src/fdmdv.c +misc/CMakeFiles/t16_8_short.dir/__/src/fdmdv.c.o: ../src/fdmdv_internal.h +misc/CMakeFiles/t16_8_short.dir/__/src/fdmdv.c.o: ../src/hanning.h +misc/CMakeFiles/t16_8_short.dir/__/src/fdmdv.c.o: ../src/kiss_fft.h +misc/CMakeFiles/t16_8_short.dir/__/src/fdmdv.c.o: ../src/kiss_fftr.h +misc/CMakeFiles/t16_8_short.dir/__/src/fdmdv.c.o: ../src/machdep.h +misc/CMakeFiles/t16_8_short.dir/__/src/fdmdv.c.o: ../src/modem_stats.h +misc/CMakeFiles/t16_8_short.dir/__/src/fdmdv.c.o: ../src/os.h +misc/CMakeFiles/t16_8_short.dir/__/src/fdmdv.c.o: ../src/pilot_coeff.h +misc/CMakeFiles/t16_8_short.dir/__/src/fdmdv.c.o: ../src/rn.h +misc/CMakeFiles/t16_8_short.dir/__/src/fdmdv.c.o: ../src/rxdec_coeff.h +misc/CMakeFiles/t16_8_short.dir/__/src/fdmdv.c.o: ../src/test_bits.h + +misc/CMakeFiles/t16_8_short.dir/__/src/kiss_fft.c.o: ../src/_kiss_fft_guts.h +misc/CMakeFiles/t16_8_short.dir/__/src/kiss_fft.c.o: ../src/kiss_fft.c +misc/CMakeFiles/t16_8_short.dir/__/src/kiss_fft.c.o: ../src/kiss_fft.h + +misc/CMakeFiles/t16_8_short.dir/t16_8_short.c.o: ../misc/../src/codec2_fdmdv.h +misc/CMakeFiles/t16_8_short.dir/t16_8_short.c.o: ../misc/../src/comp.h +misc/CMakeFiles/t16_8_short.dir/t16_8_short.c.o: ../misc/../src/kiss_fft.h +misc/CMakeFiles/t16_8_short.dir/t16_8_short.c.o: ../misc/../src/modem_stats.h +misc/CMakeFiles/t16_8_short.dir/t16_8_short.c.o: ../misc/t16_8_short.c + diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/t16_8_short.dir/flags.make b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/t16_8_short.dir/flags.make new file mode 100644 index 0000000..1280567 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/t16_8_short.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DFLOATING_POINT -DGIT_HASH=\"df2ed16c\" -DVAR_ARRAYS -D_GNU_SOURCE=1 + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/misc/../src -I/home/sh/Downloads/hackrf/codec2/src + diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/t16_8_short.dir/link.txt b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/t16_8_short.dir/link.txt new file mode 100644 index 0000000..7a4cbac --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/t16_8_short.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/t16_8_short.dir/t16_8_short.c.o CMakeFiles/t16_8_short.dir/__/src/fdmdv.c.o CMakeFiles/t16_8_short.dir/__/src/kiss_fft.c.o -o t16_8_short -Wl,-rpath,/home/sh/Downloads/hackrf/codec2/build_linux/src ../src/libcodec2.so.0.9 -lm diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/t16_8_short.dir/progress.make b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/t16_8_short.dir/progress.make new file mode 100644 index 0000000..1bc3675 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/t16_8_short.dir/progress.make @@ -0,0 +1,5 @@ +CMAKE_PROGRESS_1 = +CMAKE_PROGRESS_2 = +CMAKE_PROGRESS_3 = 72 +CMAKE_PROGRESS_4 = + diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/t16_8_short.dir/t16_8_short.c.o b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/t16_8_short.dir/t16_8_short.c.o new file mode 100644 index 0000000..b6db5bb Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/t16_8_short.dir/t16_8_short.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tdec.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tdec.dir/C.includecache new file mode 100644 index 0000000..8e54ca9 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tdec.dir/C.includecache @@ -0,0 +1,8 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tdec.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tdec.dir/DependInfo.cmake new file mode 100644 index 0000000..51f695d --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tdec.dir/DependInfo.cmake @@ -0,0 +1,30 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/misc/tdec.c" "/home/sh/Downloads/hackrf/codec2/build_linux/misc/CMakeFiles/tdec.dir/tdec.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "FLOATING_POINT" + "GIT_HASH=\"df2ed16c\"" + "VAR_ARRAYS" + "_GNU_SOURCE=1" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../misc/../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tdec.dir/build.make b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tdec.dir/build.make new file mode 100644 index 0000000..91a4e45 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tdec.dir/build.make @@ -0,0 +1,98 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include misc/CMakeFiles/tdec.dir/depend.make + +# Include the progress variables for this target. +include misc/CMakeFiles/tdec.dir/progress.make + +# Include the compile flags for this target's objects. +include misc/CMakeFiles/tdec.dir/flags.make + +misc/CMakeFiles/tdec.dir/tdec.c.o: misc/CMakeFiles/tdec.dir/flags.make +misc/CMakeFiles/tdec.dir/tdec.c.o: ../misc/tdec.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object misc/CMakeFiles/tdec.dir/tdec.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/tdec.dir/tdec.c.o -c /home/sh/Downloads/hackrf/codec2/misc/tdec.c + +misc/CMakeFiles/tdec.dir/tdec.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/tdec.dir/tdec.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/misc/tdec.c > CMakeFiles/tdec.dir/tdec.c.i + +misc/CMakeFiles/tdec.dir/tdec.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/tdec.dir/tdec.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/misc/tdec.c -o CMakeFiles/tdec.dir/tdec.c.s + +# Object files for target tdec +tdec_OBJECTS = \ +"CMakeFiles/tdec.dir/tdec.c.o" + +# External object files for target tdec +tdec_EXTERNAL_OBJECTS = + +misc/tdec: misc/CMakeFiles/tdec.dir/tdec.c.o +misc/tdec: misc/CMakeFiles/tdec.dir/build.make +misc/tdec: misc/CMakeFiles/tdec.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking C executable tdec" + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/tdec.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +misc/CMakeFiles/tdec.dir/build: misc/tdec + +.PHONY : misc/CMakeFiles/tdec.dir/build + +misc/CMakeFiles/tdec.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && $(CMAKE_COMMAND) -P CMakeFiles/tdec.dir/cmake_clean.cmake +.PHONY : misc/CMakeFiles/tdec.dir/clean + +misc/CMakeFiles/tdec.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/misc /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/misc /home/sh/Downloads/hackrf/codec2/build_linux/misc/CMakeFiles/tdec.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : misc/CMakeFiles/tdec.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tdec.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tdec.dir/cmake_clean.cmake new file mode 100644 index 0000000..9505da0 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tdec.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +file(REMOVE_RECURSE + "CMakeFiles/tdec.dir/tdec.c.o" + "tdec.pdb" + "tdec" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/tdec.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tdec.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tdec.dir/depend.internal new file mode 100644 index 0000000..b32b851 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tdec.dir/depend.internal @@ -0,0 +1,5 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +misc/CMakeFiles/tdec.dir/tdec.c.o + /home/sh/Downloads/hackrf/codec2/misc/tdec.c diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tdec.dir/depend.make b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tdec.dir/depend.make new file mode 100644 index 0000000..f712ab3 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tdec.dir/depend.make @@ -0,0 +1,5 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +misc/CMakeFiles/tdec.dir/tdec.c.o: ../misc/tdec.c + diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tdec.dir/flags.make b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tdec.dir/flags.make new file mode 100644 index 0000000..25eaffc --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tdec.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DFLOATING_POINT -DGIT_HASH=\"df2ed16c\" -DVAR_ARRAYS -D_GNU_SOURCE=1 + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/misc/../src + diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tdec.dir/link.txt b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tdec.dir/link.txt new file mode 100644 index 0000000..e80cac8 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tdec.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/tdec.dir/tdec.c.o -o tdec diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tdec.dir/progress.make b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tdec.dir/progress.make new file mode 100644 index 0000000..6c01700 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tdec.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = 74 +CMAKE_PROGRESS_2 = + diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tdec.dir/tdec.c.o b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tdec.dir/tdec.c.o new file mode 100644 index 0000000..89cef94 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tdec.dir/tdec.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/timpulse.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/timpulse.dir/C.includecache new file mode 100644 index 0000000..a7e9782 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/timpulse.dir/C.includecache @@ -0,0 +1,18 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +/home/sh/Downloads/hackrf/codec2/misc/timpulse.c +assert.h +- +math.h +- +stdlib.h +- +stdio.h +- + diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/timpulse.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/timpulse.dir/DependInfo.cmake new file mode 100644 index 0000000..8c1ef31 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/timpulse.dir/DependInfo.cmake @@ -0,0 +1,30 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/misc/timpulse.c" "/home/sh/Downloads/hackrf/codec2/build_linux/misc/CMakeFiles/timpulse.dir/timpulse.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "FLOATING_POINT" + "GIT_HASH=\"df2ed16c\"" + "VAR_ARRAYS" + "_GNU_SOURCE=1" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../misc/../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/timpulse.dir/build.make b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/timpulse.dir/build.make new file mode 100644 index 0000000..b7e0e96 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/timpulse.dir/build.make @@ -0,0 +1,98 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include misc/CMakeFiles/timpulse.dir/depend.make + +# Include the progress variables for this target. +include misc/CMakeFiles/timpulse.dir/progress.make + +# Include the compile flags for this target's objects. +include misc/CMakeFiles/timpulse.dir/flags.make + +misc/CMakeFiles/timpulse.dir/timpulse.c.o: misc/CMakeFiles/timpulse.dir/flags.make +misc/CMakeFiles/timpulse.dir/timpulse.c.o: ../misc/timpulse.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object misc/CMakeFiles/timpulse.dir/timpulse.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/timpulse.dir/timpulse.c.o -c /home/sh/Downloads/hackrf/codec2/misc/timpulse.c + +misc/CMakeFiles/timpulse.dir/timpulse.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/timpulse.dir/timpulse.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/misc/timpulse.c > CMakeFiles/timpulse.dir/timpulse.c.i + +misc/CMakeFiles/timpulse.dir/timpulse.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/timpulse.dir/timpulse.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/misc/timpulse.c -o CMakeFiles/timpulse.dir/timpulse.c.s + +# Object files for target timpulse +timpulse_OBJECTS = \ +"CMakeFiles/timpulse.dir/timpulse.c.o" + +# External object files for target timpulse +timpulse_EXTERNAL_OBJECTS = + +misc/timpulse: misc/CMakeFiles/timpulse.dir/timpulse.c.o +misc/timpulse: misc/CMakeFiles/timpulse.dir/build.make +misc/timpulse: misc/CMakeFiles/timpulse.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking C executable timpulse" + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/timpulse.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +misc/CMakeFiles/timpulse.dir/build: misc/timpulse + +.PHONY : misc/CMakeFiles/timpulse.dir/build + +misc/CMakeFiles/timpulse.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && $(CMAKE_COMMAND) -P CMakeFiles/timpulse.dir/cmake_clean.cmake +.PHONY : misc/CMakeFiles/timpulse.dir/clean + +misc/CMakeFiles/timpulse.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/misc /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/misc /home/sh/Downloads/hackrf/codec2/build_linux/misc/CMakeFiles/timpulse.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : misc/CMakeFiles/timpulse.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/timpulse.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/timpulse.dir/cmake_clean.cmake new file mode 100644 index 0000000..5a12aee --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/timpulse.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +file(REMOVE_RECURSE + "CMakeFiles/timpulse.dir/timpulse.c.o" + "timpulse.pdb" + "timpulse" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/timpulse.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/timpulse.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/timpulse.dir/depend.internal new file mode 100644 index 0000000..28de875 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/timpulse.dir/depend.internal @@ -0,0 +1,5 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +misc/CMakeFiles/timpulse.dir/timpulse.c.o + /home/sh/Downloads/hackrf/codec2/misc/timpulse.c diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/timpulse.dir/depend.make b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/timpulse.dir/depend.make new file mode 100644 index 0000000..fb16930 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/timpulse.dir/depend.make @@ -0,0 +1,5 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +misc/CMakeFiles/timpulse.dir/timpulse.c.o: ../misc/timpulse.c + diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/timpulse.dir/flags.make b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/timpulse.dir/flags.make new file mode 100644 index 0000000..25eaffc --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/timpulse.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DFLOATING_POINT -DGIT_HASH=\"df2ed16c\" -DVAR_ARRAYS -D_GNU_SOURCE=1 + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/misc/../src + diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/timpulse.dir/link.txt b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/timpulse.dir/link.txt new file mode 100644 index 0000000..5719c3a --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/timpulse.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/timpulse.dir/timpulse.c.o -o timpulse -lm diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/timpulse.dir/progress.make b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/timpulse.dir/progress.make new file mode 100644 index 0000000..6c287f1 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/timpulse.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = +CMAKE_PROGRESS_2 = + diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/timpulse.dir/timpulse.c.o b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/timpulse.dir/timpulse.c.o new file mode 100644 index 0000000..cdaa46a Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/timpulse.dir/timpulse.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tlininterp.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tlininterp.dir/C.includecache new file mode 100644 index 0000000..fd0914a --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tlininterp.dir/C.includecache @@ -0,0 +1,22 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +/home/sh/Downloads/hackrf/codec2/misc/tlininterp.c +assert.h +- +getopt.h +- +string.h +- +stdlib.h +- +stdio.h +- +stdint.h +- + diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tlininterp.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tlininterp.dir/DependInfo.cmake new file mode 100644 index 0000000..415ae05 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tlininterp.dir/DependInfo.cmake @@ -0,0 +1,30 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/misc/tlininterp.c" "/home/sh/Downloads/hackrf/codec2/build_linux/misc/CMakeFiles/tlininterp.dir/tlininterp.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "FLOATING_POINT" + "GIT_HASH=\"df2ed16c\"" + "VAR_ARRAYS" + "_GNU_SOURCE=1" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../misc/../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tlininterp.dir/build.make b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tlininterp.dir/build.make new file mode 100644 index 0000000..1ab346a --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tlininterp.dir/build.make @@ -0,0 +1,98 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include misc/CMakeFiles/tlininterp.dir/depend.make + +# Include the progress variables for this target. +include misc/CMakeFiles/tlininterp.dir/progress.make + +# Include the compile flags for this target's objects. +include misc/CMakeFiles/tlininterp.dir/flags.make + +misc/CMakeFiles/tlininterp.dir/tlininterp.c.o: misc/CMakeFiles/tlininterp.dir/flags.make +misc/CMakeFiles/tlininterp.dir/tlininterp.c.o: ../misc/tlininterp.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object misc/CMakeFiles/tlininterp.dir/tlininterp.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/tlininterp.dir/tlininterp.c.o -c /home/sh/Downloads/hackrf/codec2/misc/tlininterp.c + +misc/CMakeFiles/tlininterp.dir/tlininterp.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/tlininterp.dir/tlininterp.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/misc/tlininterp.c > CMakeFiles/tlininterp.dir/tlininterp.c.i + +misc/CMakeFiles/tlininterp.dir/tlininterp.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/tlininterp.dir/tlininterp.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/misc/tlininterp.c -o CMakeFiles/tlininterp.dir/tlininterp.c.s + +# Object files for target tlininterp +tlininterp_OBJECTS = \ +"CMakeFiles/tlininterp.dir/tlininterp.c.o" + +# External object files for target tlininterp +tlininterp_EXTERNAL_OBJECTS = + +misc/tlininterp: misc/CMakeFiles/tlininterp.dir/tlininterp.c.o +misc/tlininterp: misc/CMakeFiles/tlininterp.dir/build.make +misc/tlininterp: misc/CMakeFiles/tlininterp.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking C executable tlininterp" + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/tlininterp.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +misc/CMakeFiles/tlininterp.dir/build: misc/tlininterp + +.PHONY : misc/CMakeFiles/tlininterp.dir/build + +misc/CMakeFiles/tlininterp.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && $(CMAKE_COMMAND) -P CMakeFiles/tlininterp.dir/cmake_clean.cmake +.PHONY : misc/CMakeFiles/tlininterp.dir/clean + +misc/CMakeFiles/tlininterp.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/misc /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/misc /home/sh/Downloads/hackrf/codec2/build_linux/misc/CMakeFiles/tlininterp.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : misc/CMakeFiles/tlininterp.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tlininterp.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tlininterp.dir/cmake_clean.cmake new file mode 100644 index 0000000..147f34c --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tlininterp.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +file(REMOVE_RECURSE + "CMakeFiles/tlininterp.dir/tlininterp.c.o" + "tlininterp.pdb" + "tlininterp" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/tlininterp.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tlininterp.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tlininterp.dir/depend.internal new file mode 100644 index 0000000..cc03256 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tlininterp.dir/depend.internal @@ -0,0 +1,5 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +misc/CMakeFiles/tlininterp.dir/tlininterp.c.o + /home/sh/Downloads/hackrf/codec2/misc/tlininterp.c diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tlininterp.dir/depend.make b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tlininterp.dir/depend.make new file mode 100644 index 0000000..26bce4a --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tlininterp.dir/depend.make @@ -0,0 +1,5 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +misc/CMakeFiles/tlininterp.dir/tlininterp.c.o: ../misc/tlininterp.c + diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tlininterp.dir/flags.make b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tlininterp.dir/flags.make new file mode 100644 index 0000000..25eaffc --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tlininterp.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DFLOATING_POINT -DGIT_HASH=\"df2ed16c\" -DVAR_ARRAYS -D_GNU_SOURCE=1 + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/misc/../src + diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tlininterp.dir/link.txt b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tlininterp.dir/link.txt new file mode 100644 index 0000000..4653b3a --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tlininterp.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/tlininterp.dir/tlininterp.c.o -o tlininterp diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tlininterp.dir/progress.make b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tlininterp.dir/progress.make new file mode 100644 index 0000000..15b2c73 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tlininterp.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = 87 +CMAKE_PROGRESS_2 = + diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tlininterp.dir/tlininterp.c.o b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tlininterp.dir/tlininterp.c.o new file mode 100644 index 0000000..d8096d3 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tlininterp.dir/tlininterp.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tnlp.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tnlp.dir/C.includecache new file mode 100644 index 0000000..76ab914 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tnlp.dir/C.includecache @@ -0,0 +1,114 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +../misc/../src/codec2_fft.h +assert.h +- +stdlib.h +- +stdio.h +- +string.h +- +math.h +- +fdv_arm_math.h +../misc/../src/fdv_arm_math.h +defines.h +../misc/../src/defines.h +comp.h +../misc/../src/comp.h +kiss_fftr.h +../misc/../src/kiss_fftr.h +kiss_fft.h +../misc/../src/kiss_fft.h + +../misc/../src/codec2_internal.h +codec2_fft.h +../misc/../src/codec2_fft.h +newamp1.h +../misc/../src/newamp1.h +newamp2.h +../misc/../src/newamp2.h + +../misc/../src/comp.h + +../misc/../src/defines.h + +../misc/../src/dump.h +defines.h +../misc/../src/defines.h +comp.h +../misc/../src/comp.h +codec2_fft.h +../misc/../src/codec2_fft.h +codec2_internal.h +../misc/../src/codec2_internal.h + +../misc/../src/kiss_fft.h +stdlib.h +- +stdio.h +- +math.h +- +string.h +- +xmmintrin.h +- +sys/types.h +- + +../misc/../src/kiss_fftr.h +kiss_fft.h +../misc/../src/kiss_fft.h + +../misc/../src/newamp1.h +codec2_fft.h +../misc/../src/codec2_fft.h +comp.h +../misc/../src/comp.h + +../misc/../src/newamp2.h +codec2_fft.h +../misc/../src/codec2_fft.h +comp.h +../misc/../src/comp.h + +../misc/../src/nlp.h +comp.h +../misc/../src/comp.h + +../misc/../src/sine.h +defines.h +../misc/../src/defines.h +comp.h +../misc/../src/comp.h +codec2_fft.h +../misc/../src/codec2_fft.h + +/home/sh/Downloads/hackrf/codec2/misc/tnlp.c +stdlib.h +- +stdio.h +- +string.h +- +math.h +- +defines.h +/home/sh/Downloads/hackrf/codec2/misc/defines.h +dump.h +/home/sh/Downloads/hackrf/codec2/misc/dump.h +sine.h +/home/sh/Downloads/hackrf/codec2/misc/sine.h +nlp.h +/home/sh/Downloads/hackrf/codec2/misc/nlp.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/misc/kiss_fft.h + diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tnlp.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tnlp.dir/DependInfo.cmake new file mode 100644 index 0000000..177ed74 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tnlp.dir/DependInfo.cmake @@ -0,0 +1,32 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/misc/tnlp.c" "/home/sh/Downloads/hackrf/codec2/build_linux/misc/CMakeFiles/tnlp.dir/tnlp.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "FLOATING_POINT" + "GIT_HASH=\"df2ed16c\"" + "VAR_ARRAYS" + "_GNU_SOURCE=1" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../misc/../src" + "../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/DependInfo.cmake" + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tnlp.dir/build.make b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tnlp.dir/build.make new file mode 100644 index 0000000..dfb2c40 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tnlp.dir/build.make @@ -0,0 +1,99 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include misc/CMakeFiles/tnlp.dir/depend.make + +# Include the progress variables for this target. +include misc/CMakeFiles/tnlp.dir/progress.make + +# Include the compile flags for this target's objects. +include misc/CMakeFiles/tnlp.dir/flags.make + +misc/CMakeFiles/tnlp.dir/tnlp.c.o: misc/CMakeFiles/tnlp.dir/flags.make +misc/CMakeFiles/tnlp.dir/tnlp.c.o: ../misc/tnlp.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object misc/CMakeFiles/tnlp.dir/tnlp.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/tnlp.dir/tnlp.c.o -c /home/sh/Downloads/hackrf/codec2/misc/tnlp.c + +misc/CMakeFiles/tnlp.dir/tnlp.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/tnlp.dir/tnlp.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/misc/tnlp.c > CMakeFiles/tnlp.dir/tnlp.c.i + +misc/CMakeFiles/tnlp.dir/tnlp.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/tnlp.dir/tnlp.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/misc/tnlp.c -o CMakeFiles/tnlp.dir/tnlp.c.s + +# Object files for target tnlp +tnlp_OBJECTS = \ +"CMakeFiles/tnlp.dir/tnlp.c.o" + +# External object files for target tnlp +tnlp_EXTERNAL_OBJECTS = + +misc/tnlp: misc/CMakeFiles/tnlp.dir/tnlp.c.o +misc/tnlp: misc/CMakeFiles/tnlp.dir/build.make +misc/tnlp: src/libcodec2.so.0.9 +misc/tnlp: misc/CMakeFiles/tnlp.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking C executable tnlp" + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/tnlp.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +misc/CMakeFiles/tnlp.dir/build: misc/tnlp + +.PHONY : misc/CMakeFiles/tnlp.dir/build + +misc/CMakeFiles/tnlp.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && $(CMAKE_COMMAND) -P CMakeFiles/tnlp.dir/cmake_clean.cmake +.PHONY : misc/CMakeFiles/tnlp.dir/clean + +misc/CMakeFiles/tnlp.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/misc /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/misc /home/sh/Downloads/hackrf/codec2/build_linux/misc/CMakeFiles/tnlp.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : misc/CMakeFiles/tnlp.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tnlp.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tnlp.dir/cmake_clean.cmake new file mode 100644 index 0000000..dbf19cb --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tnlp.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +file(REMOVE_RECURSE + "CMakeFiles/tnlp.dir/tnlp.c.o" + "tnlp.pdb" + "tnlp" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/tnlp.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tnlp.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tnlp.dir/depend.internal new file mode 100644 index 0000000..fb63bb8 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tnlp.dir/depend.internal @@ -0,0 +1,16 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +misc/CMakeFiles/tnlp.dir/tnlp.c.o + ../misc/../src/codec2_fft.h + ../misc/../src/codec2_internal.h + ../misc/../src/comp.h + ../misc/../src/defines.h + ../misc/../src/dump.h + ../misc/../src/kiss_fft.h + ../misc/../src/kiss_fftr.h + ../misc/../src/newamp1.h + ../misc/../src/newamp2.h + ../misc/../src/nlp.h + ../misc/../src/sine.h + /home/sh/Downloads/hackrf/codec2/misc/tnlp.c diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tnlp.dir/depend.make b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tnlp.dir/depend.make new file mode 100644 index 0000000..3872f30 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tnlp.dir/depend.make @@ -0,0 +1,16 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +misc/CMakeFiles/tnlp.dir/tnlp.c.o: ../misc/../src/codec2_fft.h +misc/CMakeFiles/tnlp.dir/tnlp.c.o: ../misc/../src/codec2_internal.h +misc/CMakeFiles/tnlp.dir/tnlp.c.o: ../misc/../src/comp.h +misc/CMakeFiles/tnlp.dir/tnlp.c.o: ../misc/../src/defines.h +misc/CMakeFiles/tnlp.dir/tnlp.c.o: ../misc/../src/dump.h +misc/CMakeFiles/tnlp.dir/tnlp.c.o: ../misc/../src/kiss_fft.h +misc/CMakeFiles/tnlp.dir/tnlp.c.o: ../misc/../src/kiss_fftr.h +misc/CMakeFiles/tnlp.dir/tnlp.c.o: ../misc/../src/newamp1.h +misc/CMakeFiles/tnlp.dir/tnlp.c.o: ../misc/../src/newamp2.h +misc/CMakeFiles/tnlp.dir/tnlp.c.o: ../misc/../src/nlp.h +misc/CMakeFiles/tnlp.dir/tnlp.c.o: ../misc/../src/sine.h +misc/CMakeFiles/tnlp.dir/tnlp.c.o: ../misc/tnlp.c + diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tnlp.dir/flags.make b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tnlp.dir/flags.make new file mode 100644 index 0000000..1280567 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tnlp.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DFLOATING_POINT -DGIT_HASH=\"df2ed16c\" -DVAR_ARRAYS -D_GNU_SOURCE=1 + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/misc/../src -I/home/sh/Downloads/hackrf/codec2/src + diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tnlp.dir/link.txt b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tnlp.dir/link.txt new file mode 100644 index 0000000..84f823e --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tnlp.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/tnlp.dir/tnlp.c.o -o tnlp -Wl,-rpath,/home/sh/Downloads/hackrf/codec2/build_linux/src ../src/libcodec2.so.0.9 -lm diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tnlp.dir/progress.make b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tnlp.dir/progress.make new file mode 100644 index 0000000..8dea22a --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tnlp.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = 91 +CMAKE_PROGRESS_2 = + diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tnlp.dir/tnlp.c.o b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tnlp.dir/tnlp.c.o new file mode 100644 index 0000000..9035cfb Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/tnlp.dir/tnlp.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/vq_mbest.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/vq_mbest.dir/C.includecache new file mode 100644 index 0000000..2738873 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/vq_mbest.dir/C.includecache @@ -0,0 +1,26 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +../misc/../src/mbest.h + +/home/sh/Downloads/hackrf/codec2/misc/vq_mbest.c +assert.h +- +getopt.h +- +math.h +- +stdlib.h +- +stdio.h +- +string.h +- +mbest.h +/home/sh/Downloads/hackrf/codec2/misc/mbest.h + diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/vq_mbest.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/vq_mbest.dir/DependInfo.cmake new file mode 100644 index 0000000..e873213 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/vq_mbest.dir/DependInfo.cmake @@ -0,0 +1,32 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/misc/vq_mbest.c" "/home/sh/Downloads/hackrf/codec2/build_linux/misc/CMakeFiles/vq_mbest.dir/vq_mbest.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "FLOATING_POINT" + "GIT_HASH=\"df2ed16c\"" + "VAR_ARRAYS" + "_GNU_SOURCE=1" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../misc/../src" + "../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/DependInfo.cmake" + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/vq_mbest.dir/build.make b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/vq_mbest.dir/build.make new file mode 100644 index 0000000..8143e6e --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/vq_mbest.dir/build.make @@ -0,0 +1,99 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include misc/CMakeFiles/vq_mbest.dir/depend.make + +# Include the progress variables for this target. +include misc/CMakeFiles/vq_mbest.dir/progress.make + +# Include the compile flags for this target's objects. +include misc/CMakeFiles/vq_mbest.dir/flags.make + +misc/CMakeFiles/vq_mbest.dir/vq_mbest.c.o: misc/CMakeFiles/vq_mbest.dir/flags.make +misc/CMakeFiles/vq_mbest.dir/vq_mbest.c.o: ../misc/vq_mbest.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object misc/CMakeFiles/vq_mbest.dir/vq_mbest.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/vq_mbest.dir/vq_mbest.c.o -c /home/sh/Downloads/hackrf/codec2/misc/vq_mbest.c + +misc/CMakeFiles/vq_mbest.dir/vq_mbest.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/vq_mbest.dir/vq_mbest.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/misc/vq_mbest.c > CMakeFiles/vq_mbest.dir/vq_mbest.c.i + +misc/CMakeFiles/vq_mbest.dir/vq_mbest.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/vq_mbest.dir/vq_mbest.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/misc/vq_mbest.c -o CMakeFiles/vq_mbest.dir/vq_mbest.c.s + +# Object files for target vq_mbest +vq_mbest_OBJECTS = \ +"CMakeFiles/vq_mbest.dir/vq_mbest.c.o" + +# External object files for target vq_mbest +vq_mbest_EXTERNAL_OBJECTS = + +misc/vq_mbest: misc/CMakeFiles/vq_mbest.dir/vq_mbest.c.o +misc/vq_mbest: misc/CMakeFiles/vq_mbest.dir/build.make +misc/vq_mbest: src/libcodec2.so.0.9 +misc/vq_mbest: misc/CMakeFiles/vq_mbest.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking C executable vq_mbest" + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/vq_mbest.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +misc/CMakeFiles/vq_mbest.dir/build: misc/vq_mbest + +.PHONY : misc/CMakeFiles/vq_mbest.dir/build + +misc/CMakeFiles/vq_mbest.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && $(CMAKE_COMMAND) -P CMakeFiles/vq_mbest.dir/cmake_clean.cmake +.PHONY : misc/CMakeFiles/vq_mbest.dir/clean + +misc/CMakeFiles/vq_mbest.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/misc /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/misc /home/sh/Downloads/hackrf/codec2/build_linux/misc/CMakeFiles/vq_mbest.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : misc/CMakeFiles/vq_mbest.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/vq_mbest.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/vq_mbest.dir/cmake_clean.cmake new file mode 100644 index 0000000..b62e853 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/vq_mbest.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +file(REMOVE_RECURSE + "CMakeFiles/vq_mbest.dir/vq_mbest.c.o" + "vq_mbest.pdb" + "vq_mbest" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/vq_mbest.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/vq_mbest.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/vq_mbest.dir/depend.internal new file mode 100644 index 0000000..7cd3503 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/vq_mbest.dir/depend.internal @@ -0,0 +1,6 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +misc/CMakeFiles/vq_mbest.dir/vq_mbest.c.o + ../misc/../src/mbest.h + /home/sh/Downloads/hackrf/codec2/misc/vq_mbest.c diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/vq_mbest.dir/depend.make b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/vq_mbest.dir/depend.make new file mode 100644 index 0000000..f11d656 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/vq_mbest.dir/depend.make @@ -0,0 +1,6 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +misc/CMakeFiles/vq_mbest.dir/vq_mbest.c.o: ../misc/../src/mbest.h +misc/CMakeFiles/vq_mbest.dir/vq_mbest.c.o: ../misc/vq_mbest.c + diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/vq_mbest.dir/flags.make b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/vq_mbest.dir/flags.make new file mode 100644 index 0000000..1280567 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/vq_mbest.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DFLOATING_POINT -DGIT_HASH=\"df2ed16c\" -DVAR_ARRAYS -D_GNU_SOURCE=1 + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/misc/../src -I/home/sh/Downloads/hackrf/codec2/src + diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/vq_mbest.dir/link.txt b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/vq_mbest.dir/link.txt new file mode 100644 index 0000000..8cd23e6 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/vq_mbest.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/vq_mbest.dir/vq_mbest.c.o -o vq_mbest -Wl,-rpath,/home/sh/Downloads/hackrf/codec2/build_linux/src ../src/libcodec2.so.0.9 -lm diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/vq_mbest.dir/progress.make b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/vq_mbest.dir/progress.make new file mode 100644 index 0000000..7935527 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/vq_mbest.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = 99 +CMAKE_PROGRESS_2 = + diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/vq_mbest.dir/vq_mbest.c.o b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/vq_mbest.dir/vq_mbest.c.o new file mode 100644 index 0000000..56a899e Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/vq_mbest.dir/vq_mbest.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/vqtrain.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/vqtrain.dir/C.includecache new file mode 100644 index 0000000..6e10ccd --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/vqtrain.dir/C.includecache @@ -0,0 +1,24 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +/home/sh/Downloads/hackrf/codec2/misc/vqtrain.c +assert.h +- +stdio.h +- +stdlib.h +- +string.h +- +math.h +- +ctype.h +- +getopt.h +- + diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/vqtrain.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/vqtrain.dir/DependInfo.cmake new file mode 100644 index 0000000..02a6af8 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/vqtrain.dir/DependInfo.cmake @@ -0,0 +1,30 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/misc/vqtrain.c" "/home/sh/Downloads/hackrf/codec2/build_linux/misc/CMakeFiles/vqtrain.dir/vqtrain.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "FLOATING_POINT" + "GIT_HASH=\"df2ed16c\"" + "VAR_ARRAYS" + "_GNU_SOURCE=1" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../misc/../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/vqtrain.dir/build.make b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/vqtrain.dir/build.make new file mode 100644 index 0000000..b25add8 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/vqtrain.dir/build.make @@ -0,0 +1,98 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include misc/CMakeFiles/vqtrain.dir/depend.make + +# Include the progress variables for this target. +include misc/CMakeFiles/vqtrain.dir/progress.make + +# Include the compile flags for this target's objects. +include misc/CMakeFiles/vqtrain.dir/flags.make + +misc/CMakeFiles/vqtrain.dir/vqtrain.c.o: misc/CMakeFiles/vqtrain.dir/flags.make +misc/CMakeFiles/vqtrain.dir/vqtrain.c.o: ../misc/vqtrain.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object misc/CMakeFiles/vqtrain.dir/vqtrain.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/vqtrain.dir/vqtrain.c.o -c /home/sh/Downloads/hackrf/codec2/misc/vqtrain.c + +misc/CMakeFiles/vqtrain.dir/vqtrain.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/vqtrain.dir/vqtrain.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/misc/vqtrain.c > CMakeFiles/vqtrain.dir/vqtrain.c.i + +misc/CMakeFiles/vqtrain.dir/vqtrain.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/vqtrain.dir/vqtrain.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/misc/vqtrain.c -o CMakeFiles/vqtrain.dir/vqtrain.c.s + +# Object files for target vqtrain +vqtrain_OBJECTS = \ +"CMakeFiles/vqtrain.dir/vqtrain.c.o" + +# External object files for target vqtrain +vqtrain_EXTERNAL_OBJECTS = + +misc/vqtrain: misc/CMakeFiles/vqtrain.dir/vqtrain.c.o +misc/vqtrain: misc/CMakeFiles/vqtrain.dir/build.make +misc/vqtrain: misc/CMakeFiles/vqtrain.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking C executable vqtrain" + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/vqtrain.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +misc/CMakeFiles/vqtrain.dir/build: misc/vqtrain + +.PHONY : misc/CMakeFiles/vqtrain.dir/build + +misc/CMakeFiles/vqtrain.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/misc && $(CMAKE_COMMAND) -P CMakeFiles/vqtrain.dir/cmake_clean.cmake +.PHONY : misc/CMakeFiles/vqtrain.dir/clean + +misc/CMakeFiles/vqtrain.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/misc /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/misc /home/sh/Downloads/hackrf/codec2/build_linux/misc/CMakeFiles/vqtrain.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : misc/CMakeFiles/vqtrain.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/vqtrain.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/vqtrain.dir/cmake_clean.cmake new file mode 100644 index 0000000..b1e2cfd --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/vqtrain.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +file(REMOVE_RECURSE + "CMakeFiles/vqtrain.dir/vqtrain.c.o" + "vqtrain.pdb" + "vqtrain" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/vqtrain.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/vqtrain.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/vqtrain.dir/depend.internal new file mode 100644 index 0000000..2aafe37 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/vqtrain.dir/depend.internal @@ -0,0 +1,5 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +misc/CMakeFiles/vqtrain.dir/vqtrain.c.o + /home/sh/Downloads/hackrf/codec2/misc/vqtrain.c diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/vqtrain.dir/depend.make b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/vqtrain.dir/depend.make new file mode 100644 index 0000000..d244245 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/vqtrain.dir/depend.make @@ -0,0 +1,5 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +misc/CMakeFiles/vqtrain.dir/vqtrain.c.o: ../misc/vqtrain.c + diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/vqtrain.dir/flags.make b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/vqtrain.dir/flags.make new file mode 100644 index 0000000..25eaffc --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/vqtrain.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DFLOATING_POINT -DGIT_HASH=\"df2ed16c\" -DVAR_ARRAYS -D_GNU_SOURCE=1 + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/misc/../src + diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/vqtrain.dir/link.txt b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/vqtrain.dir/link.txt new file mode 100644 index 0000000..7e3dea3 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/vqtrain.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/vqtrain.dir/vqtrain.c.o -o vqtrain -lm diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/vqtrain.dir/progress.make b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/vqtrain.dir/progress.make new file mode 100644 index 0000000..1f1e9c2 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/vqtrain.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = +CMAKE_PROGRESS_2 = 100 + diff --git a/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/vqtrain.dir/vqtrain.c.o b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/vqtrain.dir/vqtrain.c.o new file mode 100644 index 0000000..56328df Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/misc/CMakeFiles/vqtrain.dir/vqtrain.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/misc/Makefile b/libcodec2-android/src/codec2/build_linux/misc/Makefile new file mode 100644 index 0000000..03ed07f --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/Makefile @@ -0,0 +1,912 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Default target executed when no arguments are given to make. +default_target: all + +.PHONY : default_target + +# Allow only one "make -f Makefile2" at a time, but pass parallelism. +.NOTPARALLEL: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +#============================================================================= +# Targets provided globally by CMake. + +# Special rule for the target install/local +install/local: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..." + /usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake +.PHONY : install/local + +# Special rule for the target install/local +install/local/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..." + /usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake +.PHONY : install/local/fast + +# Special rule for the target install +install: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install + +# Special rule for the target install +install/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install/fast + +# Special rule for the target list_install_components +list_install_components: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Available install components are: \"Unspecified\" \"codec2_devel\"" +.PHONY : list_install_components + +# Special rule for the target list_install_components +list_install_components/fast: list_install_components + +.PHONY : list_install_components/fast + +# Special rule for the target rebuild_cache +rebuild_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..." + /usr/bin/cmake -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.PHONY : rebuild_cache + +# Special rule for the target rebuild_cache +rebuild_cache/fast: rebuild_cache + +.PHONY : rebuild_cache/fast + +# Special rule for the target test +test: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running tests..." + /usr/bin/ctest --force-new-ctest-process $(ARGS) +.PHONY : test + +# Special rule for the target test +test/fast: test + +.PHONY : test/fast + +# Special rule for the target install/strip +install/strip: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..." + /usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake +.PHONY : install/strip + +# Special rule for the target install/strip +install/strip/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..." + /usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake +.PHONY : install/strip/fast + +# Special rule for the target edit_cache +edit_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "No interactive CMake dialog available..." + /usr/bin/cmake -E echo No\ interactive\ CMake\ dialog\ available. +.PHONY : edit_cache + +# Special rule for the target edit_cache +edit_cache/fast: edit_cache + +.PHONY : edit_cache/fast + +# The main all target +all: cmake_check_build_system + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles /home/sh/Downloads/hackrf/codec2/build_linux/misc/CMakeFiles/progress.marks + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 misc/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : all + +# The main clean target +clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 misc/clean +.PHONY : clean + +# The main clean target +clean/fast: clean + +.PHONY : clean/fast + +# Prepare targets for installation. +preinstall: all + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 misc/preinstall +.PHONY : preinstall + +# Prepare targets for installation. +preinstall/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 misc/preinstall +.PHONY : preinstall/fast + +# clear depends +depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1 +.PHONY : depend + +# Convenience name for target. +misc/CMakeFiles/extract.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 misc/CMakeFiles/extract.dir/rule +.PHONY : misc/CMakeFiles/extract.dir/rule + +# Convenience name for target. +extract: misc/CMakeFiles/extract.dir/rule + +.PHONY : extract + +# fast build rule for target. +extract/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f misc/CMakeFiles/extract.dir/build.make misc/CMakeFiles/extract.dir/build +.PHONY : extract/fast + +# Convenience name for target. +misc/CMakeFiles/tdec.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 misc/CMakeFiles/tdec.dir/rule +.PHONY : misc/CMakeFiles/tdec.dir/rule + +# Convenience name for target. +tdec: misc/CMakeFiles/tdec.dir/rule + +.PHONY : tdec + +# fast build rule for target. +tdec/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f misc/CMakeFiles/tdec.dir/build.make misc/CMakeFiles/tdec.dir/build +.PHONY : tdec/fast + +# Convenience name for target. +misc/CMakeFiles/16_8_short.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 misc/CMakeFiles/16_8_short.dir/rule +.PHONY : misc/CMakeFiles/16_8_short.dir/rule + +# Convenience name for target. +16_8_short: misc/CMakeFiles/16_8_short.dir/rule + +.PHONY : 16_8_short + +# fast build rule for target. +16_8_short/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f misc/CMakeFiles/16_8_short.dir/build.make misc/CMakeFiles/16_8_short.dir/build +.PHONY : 16_8_short/fast + +# Convenience name for target. +misc/CMakeFiles/t16_8.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 misc/CMakeFiles/t16_8.dir/rule +.PHONY : misc/CMakeFiles/t16_8.dir/rule + +# Convenience name for target. +t16_8: misc/CMakeFiles/t16_8.dir/rule + +.PHONY : t16_8 + +# fast build rule for target. +t16_8/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f misc/CMakeFiles/t16_8.dir/build.make misc/CMakeFiles/t16_8.dir/build +.PHONY : t16_8/fast + +# Convenience name for target. +misc/CMakeFiles/t16_8_short.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 misc/CMakeFiles/t16_8_short.dir/rule +.PHONY : misc/CMakeFiles/t16_8_short.dir/rule + +# Convenience name for target. +t16_8_short: misc/CMakeFiles/t16_8_short.dir/rule + +.PHONY : t16_8_short + +# fast build rule for target. +t16_8_short/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f misc/CMakeFiles/t16_8_short.dir/build.make misc/CMakeFiles/t16_8_short.dir/build +.PHONY : t16_8_short/fast + +# Convenience name for target. +misc/CMakeFiles/mksine.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 misc/CMakeFiles/mksine.dir/rule +.PHONY : misc/CMakeFiles/mksine.dir/rule + +# Convenience name for target. +mksine: misc/CMakeFiles/mksine.dir/rule + +.PHONY : mksine + +# fast build rule for target. +mksine/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f misc/CMakeFiles/mksine.dir/build.make misc/CMakeFiles/mksine.dir/build +.PHONY : mksine/fast + +# Convenience name for target. +misc/CMakeFiles/tnlp.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 misc/CMakeFiles/tnlp.dir/rule +.PHONY : misc/CMakeFiles/tnlp.dir/rule + +# Convenience name for target. +tnlp: misc/CMakeFiles/tnlp.dir/rule + +.PHONY : tnlp + +# fast build rule for target. +tnlp/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f misc/CMakeFiles/tnlp.dir/build.make misc/CMakeFiles/tnlp.dir/build +.PHONY : tnlp/fast + +# Convenience name for target. +misc/CMakeFiles/vqtrain.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 misc/CMakeFiles/vqtrain.dir/rule +.PHONY : misc/CMakeFiles/vqtrain.dir/rule + +# Convenience name for target. +vqtrain: misc/CMakeFiles/vqtrain.dir/rule + +.PHONY : vqtrain + +# fast build rule for target. +vqtrain/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f misc/CMakeFiles/vqtrain.dir/build.make misc/CMakeFiles/vqtrain.dir/build +.PHONY : vqtrain/fast + +# Convenience name for target. +misc/CMakeFiles/tlininterp.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 misc/CMakeFiles/tlininterp.dir/rule +.PHONY : misc/CMakeFiles/tlininterp.dir/rule + +# Convenience name for target. +tlininterp: misc/CMakeFiles/tlininterp.dir/rule + +.PHONY : tlininterp + +# fast build rule for target. +tlininterp/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f misc/CMakeFiles/tlininterp.dir/build.make misc/CMakeFiles/tlininterp.dir/build +.PHONY : tlininterp/fast + +# Convenience name for target. +misc/CMakeFiles/pre.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 misc/CMakeFiles/pre.dir/rule +.PHONY : misc/CMakeFiles/pre.dir/rule + +# Convenience name for target. +pre: misc/CMakeFiles/pre.dir/rule + +.PHONY : pre + +# fast build rule for target. +pre/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f misc/CMakeFiles/pre.dir/build.make misc/CMakeFiles/pre.dir/build +.PHONY : pre/fast + +# Convenience name for target. +misc/CMakeFiles/raw2h.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 misc/CMakeFiles/raw2h.dir/rule +.PHONY : misc/CMakeFiles/raw2h.dir/rule + +# Convenience name for target. +raw2h: misc/CMakeFiles/raw2h.dir/rule + +.PHONY : raw2h + +# fast build rule for target. +raw2h/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f misc/CMakeFiles/raw2h.dir/build.make misc/CMakeFiles/raw2h.dir/build +.PHONY : raw2h/fast + +# Convenience name for target. +misc/CMakeFiles/timpulse.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 misc/CMakeFiles/timpulse.dir/rule +.PHONY : misc/CMakeFiles/timpulse.dir/rule + +# Convenience name for target. +timpulse: misc/CMakeFiles/timpulse.dir/rule + +.PHONY : timpulse + +# fast build rule for target. +timpulse/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f misc/CMakeFiles/timpulse.dir/build.make misc/CMakeFiles/timpulse.dir/build +.PHONY : timpulse/fast + +# Convenience name for target. +misc/CMakeFiles/est_n0.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 misc/CMakeFiles/est_n0.dir/rule +.PHONY : misc/CMakeFiles/est_n0.dir/rule + +# Convenience name for target. +est_n0: misc/CMakeFiles/est_n0.dir/rule + +.PHONY : est_n0 + +# fast build rule for target. +est_n0/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f misc/CMakeFiles/est_n0.dir/build.make misc/CMakeFiles/est_n0.dir/build +.PHONY : est_n0/fast + +# Convenience name for target. +misc/CMakeFiles/vq_mbest.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 misc/CMakeFiles/vq_mbest.dir/rule +.PHONY : misc/CMakeFiles/vq_mbest.dir/rule + +# Convenience name for target. +vq_mbest: misc/CMakeFiles/vq_mbest.dir/rule + +.PHONY : vq_mbest + +# fast build rule for target. +vq_mbest/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f misc/CMakeFiles/vq_mbest.dir/build.make misc/CMakeFiles/vq_mbest.dir/build +.PHONY : vq_mbest/fast + +16_8_short.o: 16_8_short.c.o + +.PHONY : 16_8_short.o + +# target to build an object file +16_8_short.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f misc/CMakeFiles/16_8_short.dir/build.make misc/CMakeFiles/16_8_short.dir/16_8_short.c.o +.PHONY : 16_8_short.c.o + +16_8_short.i: 16_8_short.c.i + +.PHONY : 16_8_short.i + +# target to preprocess a source file +16_8_short.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f misc/CMakeFiles/16_8_short.dir/build.make misc/CMakeFiles/16_8_short.dir/16_8_short.c.i +.PHONY : 16_8_short.c.i + +16_8_short.s: 16_8_short.c.s + +.PHONY : 16_8_short.s + +# target to generate assembly for a file +16_8_short.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f misc/CMakeFiles/16_8_short.dir/build.make misc/CMakeFiles/16_8_short.dir/16_8_short.c.s +.PHONY : 16_8_short.c.s + +__/src/fdmdv.o: __/src/fdmdv.c.o + +.PHONY : __/src/fdmdv.o + +# target to build an object file +__/src/fdmdv.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f misc/CMakeFiles/16_8_short.dir/build.make misc/CMakeFiles/16_8_short.dir/__/src/fdmdv.c.o + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f misc/CMakeFiles/t16_8.dir/build.make misc/CMakeFiles/t16_8.dir/__/src/fdmdv.c.o + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f misc/CMakeFiles/t16_8_short.dir/build.make misc/CMakeFiles/t16_8_short.dir/__/src/fdmdv.c.o +.PHONY : __/src/fdmdv.c.o + +__/src/fdmdv.i: __/src/fdmdv.c.i + +.PHONY : __/src/fdmdv.i + +# target to preprocess a source file +__/src/fdmdv.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f misc/CMakeFiles/16_8_short.dir/build.make misc/CMakeFiles/16_8_short.dir/__/src/fdmdv.c.i + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f misc/CMakeFiles/t16_8.dir/build.make misc/CMakeFiles/t16_8.dir/__/src/fdmdv.c.i + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f misc/CMakeFiles/t16_8_short.dir/build.make misc/CMakeFiles/t16_8_short.dir/__/src/fdmdv.c.i +.PHONY : __/src/fdmdv.c.i + +__/src/fdmdv.s: __/src/fdmdv.c.s + +.PHONY : __/src/fdmdv.s + +# target to generate assembly for a file +__/src/fdmdv.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f misc/CMakeFiles/16_8_short.dir/build.make misc/CMakeFiles/16_8_short.dir/__/src/fdmdv.c.s + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f misc/CMakeFiles/t16_8.dir/build.make misc/CMakeFiles/t16_8.dir/__/src/fdmdv.c.s + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f misc/CMakeFiles/t16_8_short.dir/build.make misc/CMakeFiles/t16_8_short.dir/__/src/fdmdv.c.s +.PHONY : __/src/fdmdv.c.s + +__/src/kiss_fft.o: __/src/kiss_fft.c.o + +.PHONY : __/src/kiss_fft.o + +# target to build an object file +__/src/kiss_fft.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f misc/CMakeFiles/16_8_short.dir/build.make misc/CMakeFiles/16_8_short.dir/__/src/kiss_fft.c.o + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f misc/CMakeFiles/t16_8.dir/build.make misc/CMakeFiles/t16_8.dir/__/src/kiss_fft.c.o + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f misc/CMakeFiles/t16_8_short.dir/build.make misc/CMakeFiles/t16_8_short.dir/__/src/kiss_fft.c.o +.PHONY : __/src/kiss_fft.c.o + +__/src/kiss_fft.i: __/src/kiss_fft.c.i + +.PHONY : __/src/kiss_fft.i + +# target to preprocess a source file +__/src/kiss_fft.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f misc/CMakeFiles/16_8_short.dir/build.make misc/CMakeFiles/16_8_short.dir/__/src/kiss_fft.c.i + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f misc/CMakeFiles/t16_8.dir/build.make misc/CMakeFiles/t16_8.dir/__/src/kiss_fft.c.i + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f misc/CMakeFiles/t16_8_short.dir/build.make misc/CMakeFiles/t16_8_short.dir/__/src/kiss_fft.c.i +.PHONY : __/src/kiss_fft.c.i + +__/src/kiss_fft.s: __/src/kiss_fft.c.s + +.PHONY : __/src/kiss_fft.s + +# target to generate assembly for a file +__/src/kiss_fft.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f misc/CMakeFiles/16_8_short.dir/build.make misc/CMakeFiles/16_8_short.dir/__/src/kiss_fft.c.s + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f misc/CMakeFiles/t16_8.dir/build.make misc/CMakeFiles/t16_8.dir/__/src/kiss_fft.c.s + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f misc/CMakeFiles/t16_8_short.dir/build.make misc/CMakeFiles/t16_8_short.dir/__/src/kiss_fft.c.s +.PHONY : __/src/kiss_fft.c.s + +est_n0.o: est_n0.c.o + +.PHONY : est_n0.o + +# target to build an object file +est_n0.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f misc/CMakeFiles/est_n0.dir/build.make misc/CMakeFiles/est_n0.dir/est_n0.c.o +.PHONY : est_n0.c.o + +est_n0.i: est_n0.c.i + +.PHONY : est_n0.i + +# target to preprocess a source file +est_n0.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f misc/CMakeFiles/est_n0.dir/build.make misc/CMakeFiles/est_n0.dir/est_n0.c.i +.PHONY : est_n0.c.i + +est_n0.s: est_n0.c.s + +.PHONY : est_n0.s + +# target to generate assembly for a file +est_n0.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f misc/CMakeFiles/est_n0.dir/build.make misc/CMakeFiles/est_n0.dir/est_n0.c.s +.PHONY : est_n0.c.s + +extract.o: extract.c.o + +.PHONY : extract.o + +# target to build an object file +extract.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f misc/CMakeFiles/extract.dir/build.make misc/CMakeFiles/extract.dir/extract.c.o +.PHONY : extract.c.o + +extract.i: extract.c.i + +.PHONY : extract.i + +# target to preprocess a source file +extract.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f misc/CMakeFiles/extract.dir/build.make misc/CMakeFiles/extract.dir/extract.c.i +.PHONY : extract.c.i + +extract.s: extract.c.s + +.PHONY : extract.s + +# target to generate assembly for a file +extract.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f misc/CMakeFiles/extract.dir/build.make misc/CMakeFiles/extract.dir/extract.c.s +.PHONY : extract.c.s + +mksine.o: mksine.c.o + +.PHONY : mksine.o + +# target to build an object file +mksine.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f misc/CMakeFiles/mksine.dir/build.make misc/CMakeFiles/mksine.dir/mksine.c.o +.PHONY : mksine.c.o + +mksine.i: mksine.c.i + +.PHONY : mksine.i + +# target to preprocess a source file +mksine.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f misc/CMakeFiles/mksine.dir/build.make misc/CMakeFiles/mksine.dir/mksine.c.i +.PHONY : mksine.c.i + +mksine.s: mksine.c.s + +.PHONY : mksine.s + +# target to generate assembly for a file +mksine.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f misc/CMakeFiles/mksine.dir/build.make misc/CMakeFiles/mksine.dir/mksine.c.s +.PHONY : mksine.c.s + +pre.o: pre.c.o + +.PHONY : pre.o + +# target to build an object file +pre.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f misc/CMakeFiles/pre.dir/build.make misc/CMakeFiles/pre.dir/pre.c.o +.PHONY : pre.c.o + +pre.i: pre.c.i + +.PHONY : pre.i + +# target to preprocess a source file +pre.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f misc/CMakeFiles/pre.dir/build.make misc/CMakeFiles/pre.dir/pre.c.i +.PHONY : pre.c.i + +pre.s: pre.c.s + +.PHONY : pre.s + +# target to generate assembly for a file +pre.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f misc/CMakeFiles/pre.dir/build.make misc/CMakeFiles/pre.dir/pre.c.s +.PHONY : pre.c.s + +raw2h.o: raw2h.c.o + +.PHONY : raw2h.o + +# target to build an object file +raw2h.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f misc/CMakeFiles/raw2h.dir/build.make misc/CMakeFiles/raw2h.dir/raw2h.c.o +.PHONY : raw2h.c.o + +raw2h.i: raw2h.c.i + +.PHONY : raw2h.i + +# target to preprocess a source file +raw2h.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f misc/CMakeFiles/raw2h.dir/build.make misc/CMakeFiles/raw2h.dir/raw2h.c.i +.PHONY : raw2h.c.i + +raw2h.s: raw2h.c.s + +.PHONY : raw2h.s + +# target to generate assembly for a file +raw2h.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f misc/CMakeFiles/raw2h.dir/build.make misc/CMakeFiles/raw2h.dir/raw2h.c.s +.PHONY : raw2h.c.s + +t16_8.o: t16_8.c.o + +.PHONY : t16_8.o + +# target to build an object file +t16_8.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f misc/CMakeFiles/t16_8.dir/build.make misc/CMakeFiles/t16_8.dir/t16_8.c.o +.PHONY : t16_8.c.o + +t16_8.i: t16_8.c.i + +.PHONY : t16_8.i + +# target to preprocess a source file +t16_8.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f misc/CMakeFiles/t16_8.dir/build.make misc/CMakeFiles/t16_8.dir/t16_8.c.i +.PHONY : t16_8.c.i + +t16_8.s: t16_8.c.s + +.PHONY : t16_8.s + +# target to generate assembly for a file +t16_8.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f misc/CMakeFiles/t16_8.dir/build.make misc/CMakeFiles/t16_8.dir/t16_8.c.s +.PHONY : t16_8.c.s + +t16_8_short.o: t16_8_short.c.o + +.PHONY : t16_8_short.o + +# target to build an object file +t16_8_short.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f misc/CMakeFiles/t16_8_short.dir/build.make misc/CMakeFiles/t16_8_short.dir/t16_8_short.c.o +.PHONY : t16_8_short.c.o + +t16_8_short.i: t16_8_short.c.i + +.PHONY : t16_8_short.i + +# target to preprocess a source file +t16_8_short.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f misc/CMakeFiles/t16_8_short.dir/build.make misc/CMakeFiles/t16_8_short.dir/t16_8_short.c.i +.PHONY : t16_8_short.c.i + +t16_8_short.s: t16_8_short.c.s + +.PHONY : t16_8_short.s + +# target to generate assembly for a file +t16_8_short.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f misc/CMakeFiles/t16_8_short.dir/build.make misc/CMakeFiles/t16_8_short.dir/t16_8_short.c.s +.PHONY : t16_8_short.c.s + +tdec.o: tdec.c.o + +.PHONY : tdec.o + +# target to build an object file +tdec.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f misc/CMakeFiles/tdec.dir/build.make misc/CMakeFiles/tdec.dir/tdec.c.o +.PHONY : tdec.c.o + +tdec.i: tdec.c.i + +.PHONY : tdec.i + +# target to preprocess a source file +tdec.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f misc/CMakeFiles/tdec.dir/build.make misc/CMakeFiles/tdec.dir/tdec.c.i +.PHONY : tdec.c.i + +tdec.s: tdec.c.s + +.PHONY : tdec.s + +# target to generate assembly for a file +tdec.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f misc/CMakeFiles/tdec.dir/build.make misc/CMakeFiles/tdec.dir/tdec.c.s +.PHONY : tdec.c.s + +timpulse.o: timpulse.c.o + +.PHONY : timpulse.o + +# target to build an object file +timpulse.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f misc/CMakeFiles/timpulse.dir/build.make misc/CMakeFiles/timpulse.dir/timpulse.c.o +.PHONY : timpulse.c.o + +timpulse.i: timpulse.c.i + +.PHONY : timpulse.i + +# target to preprocess a source file +timpulse.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f misc/CMakeFiles/timpulse.dir/build.make misc/CMakeFiles/timpulse.dir/timpulse.c.i +.PHONY : timpulse.c.i + +timpulse.s: timpulse.c.s + +.PHONY : timpulse.s + +# target to generate assembly for a file +timpulse.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f misc/CMakeFiles/timpulse.dir/build.make misc/CMakeFiles/timpulse.dir/timpulse.c.s +.PHONY : timpulse.c.s + +tlininterp.o: tlininterp.c.o + +.PHONY : tlininterp.o + +# target to build an object file +tlininterp.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f misc/CMakeFiles/tlininterp.dir/build.make misc/CMakeFiles/tlininterp.dir/tlininterp.c.o +.PHONY : tlininterp.c.o + +tlininterp.i: tlininterp.c.i + +.PHONY : tlininterp.i + +# target to preprocess a source file +tlininterp.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f misc/CMakeFiles/tlininterp.dir/build.make misc/CMakeFiles/tlininterp.dir/tlininterp.c.i +.PHONY : tlininterp.c.i + +tlininterp.s: tlininterp.c.s + +.PHONY : tlininterp.s + +# target to generate assembly for a file +tlininterp.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f misc/CMakeFiles/tlininterp.dir/build.make misc/CMakeFiles/tlininterp.dir/tlininterp.c.s +.PHONY : tlininterp.c.s + +tnlp.o: tnlp.c.o + +.PHONY : tnlp.o + +# target to build an object file +tnlp.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f misc/CMakeFiles/tnlp.dir/build.make misc/CMakeFiles/tnlp.dir/tnlp.c.o +.PHONY : tnlp.c.o + +tnlp.i: tnlp.c.i + +.PHONY : tnlp.i + +# target to preprocess a source file +tnlp.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f misc/CMakeFiles/tnlp.dir/build.make misc/CMakeFiles/tnlp.dir/tnlp.c.i +.PHONY : tnlp.c.i + +tnlp.s: tnlp.c.s + +.PHONY : tnlp.s + +# target to generate assembly for a file +tnlp.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f misc/CMakeFiles/tnlp.dir/build.make misc/CMakeFiles/tnlp.dir/tnlp.c.s +.PHONY : tnlp.c.s + +vq_mbest.o: vq_mbest.c.o + +.PHONY : vq_mbest.o + +# target to build an object file +vq_mbest.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f misc/CMakeFiles/vq_mbest.dir/build.make misc/CMakeFiles/vq_mbest.dir/vq_mbest.c.o +.PHONY : vq_mbest.c.o + +vq_mbest.i: vq_mbest.c.i + +.PHONY : vq_mbest.i + +# target to preprocess a source file +vq_mbest.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f misc/CMakeFiles/vq_mbest.dir/build.make misc/CMakeFiles/vq_mbest.dir/vq_mbest.c.i +.PHONY : vq_mbest.c.i + +vq_mbest.s: vq_mbest.c.s + +.PHONY : vq_mbest.s + +# target to generate assembly for a file +vq_mbest.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f misc/CMakeFiles/vq_mbest.dir/build.make misc/CMakeFiles/vq_mbest.dir/vq_mbest.c.s +.PHONY : vq_mbest.c.s + +vqtrain.o: vqtrain.c.o + +.PHONY : vqtrain.o + +# target to build an object file +vqtrain.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f misc/CMakeFiles/vqtrain.dir/build.make misc/CMakeFiles/vqtrain.dir/vqtrain.c.o +.PHONY : vqtrain.c.o + +vqtrain.i: vqtrain.c.i + +.PHONY : vqtrain.i + +# target to preprocess a source file +vqtrain.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f misc/CMakeFiles/vqtrain.dir/build.make misc/CMakeFiles/vqtrain.dir/vqtrain.c.i +.PHONY : vqtrain.c.i + +vqtrain.s: vqtrain.c.s + +.PHONY : vqtrain.s + +# target to generate assembly for a file +vqtrain.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f misc/CMakeFiles/vqtrain.dir/build.make misc/CMakeFiles/vqtrain.dir/vqtrain.c.s +.PHONY : vqtrain.c.s + +# Help Target +help: + @echo "The following are some of the valid targets for this Makefile:" + @echo "... all (the default if no target is provided)" + @echo "... clean" + @echo "... depend" + @echo "... install/local" + @echo "... install" + @echo "... list_install_components" + @echo "... rebuild_cache" + @echo "... extract" + @echo "... tdec" + @echo "... 16_8_short" + @echo "... t16_8" + @echo "... t16_8_short" + @echo "... mksine" + @echo "... tnlp" + @echo "... vqtrain" + @echo "... tlininterp" + @echo "... test" + @echo "... pre" + @echo "... raw2h" + @echo "... timpulse" + @echo "... install/strip" + @echo "... est_n0" + @echo "... vq_mbest" + @echo "... edit_cache" + @echo "... 16_8_short.o" + @echo "... 16_8_short.i" + @echo "... 16_8_short.s" + @echo "... __/src/fdmdv.o" + @echo "... __/src/fdmdv.i" + @echo "... __/src/fdmdv.s" + @echo "... __/src/kiss_fft.o" + @echo "... __/src/kiss_fft.i" + @echo "... __/src/kiss_fft.s" + @echo "... est_n0.o" + @echo "... est_n0.i" + @echo "... est_n0.s" + @echo "... extract.o" + @echo "... extract.i" + @echo "... extract.s" + @echo "... mksine.o" + @echo "... mksine.i" + @echo "... mksine.s" + @echo "... pre.o" + @echo "... pre.i" + @echo "... pre.s" + @echo "... raw2h.o" + @echo "... raw2h.i" + @echo "... raw2h.s" + @echo "... t16_8.o" + @echo "... t16_8.i" + @echo "... t16_8.s" + @echo "... t16_8_short.o" + @echo "... t16_8_short.i" + @echo "... t16_8_short.s" + @echo "... tdec.o" + @echo "... tdec.i" + @echo "... tdec.s" + @echo "... timpulse.o" + @echo "... timpulse.i" + @echo "... timpulse.s" + @echo "... tlininterp.o" + @echo "... tlininterp.i" + @echo "... tlininterp.s" + @echo "... tnlp.o" + @echo "... tnlp.i" + @echo "... tnlp.s" + @echo "... vq_mbest.o" + @echo "... vq_mbest.i" + @echo "... vq_mbest.s" + @echo "... vqtrain.o" + @echo "... vqtrain.i" + @echo "... vqtrain.s" +.PHONY : help + + + +#============================================================================= +# Special targets to cleanup operation of make. + +# Special rule to run CMake to check the build system integrity. +# No rule that depends on this can have commands that come from listfiles +# because they might be regenerated. +cmake_check_build_system: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 +.PHONY : cmake_check_build_system + diff --git a/libcodec2-android/src/codec2/build_linux/misc/cmake_install.cmake b/libcodec2-android/src/codec2/build_linux/misc/cmake_install.cmake new file mode 100644 index 0000000..4d0ed9d --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/misc/cmake_install.cmake @@ -0,0 +1,39 @@ +# Install script for directory: /home/sh/Downloads/hackrf/codec2/misc + +# Set the install prefix +if(NOT DEFINED CMAKE_INSTALL_PREFIX) + set(CMAKE_INSTALL_PREFIX "/opt/install/codec2") +endif() +string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") + +# Set the install configuration name. +if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) + if(BUILD_TYPE) + string(REGEX REPLACE "^[^A-Za-z0-9_]+" "" + CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") + else() + set(CMAKE_INSTALL_CONFIG_NAME "Debug") + endif() + message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") +endif() + +# Set the component getting installed. +if(NOT CMAKE_INSTALL_COMPONENT) + if(COMPONENT) + message(STATUS "Install component: \"${COMPONENT}\"") + set(CMAKE_INSTALL_COMPONENT "${COMPONENT}") + else() + set(CMAKE_INSTALL_COMPONENT) + endif() +endif() + +# Install shared libraries without execute permission? +if(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE) + set(CMAKE_INSTALL_SO_NO_EXE "1") +endif() + +# Is this installation the result of a crosscompile? +if(NOT DEFINED CMAKE_CROSSCOMPILING) + set(CMAKE_CROSSCOMPILING "FALSE") +endif() + diff --git a/libcodec2-android/src/codec2/build_linux/misc/est_n0 b/libcodec2-android/src/codec2/build_linux/misc/est_n0 new file mode 100755 index 0000000..83125bc Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/misc/est_n0 differ diff --git a/libcodec2-android/src/codec2/build_linux/misc/extract b/libcodec2-android/src/codec2/build_linux/misc/extract new file mode 100755 index 0000000..f8a8d1b Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/misc/extract differ diff --git a/libcodec2-android/src/codec2/build_linux/misc/mksine b/libcodec2-android/src/codec2/build_linux/misc/mksine new file mode 100755 index 0000000..53c78f9 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/misc/mksine differ diff --git a/libcodec2-android/src/codec2/build_linux/misc/pre b/libcodec2-android/src/codec2/build_linux/misc/pre new file mode 100755 index 0000000..b454394 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/misc/pre differ diff --git a/libcodec2-android/src/codec2/build_linux/misc/raw2h b/libcodec2-android/src/codec2/build_linux/misc/raw2h new file mode 100755 index 0000000..0328269 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/misc/raw2h differ diff --git a/libcodec2-android/src/codec2/build_linux/misc/t16_8 b/libcodec2-android/src/codec2/build_linux/misc/t16_8 new file mode 100755 index 0000000..6995810 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/misc/t16_8 differ diff --git a/libcodec2-android/src/codec2/build_linux/misc/t16_8_short b/libcodec2-android/src/codec2/build_linux/misc/t16_8_short new file mode 100755 index 0000000..1a39501 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/misc/t16_8_short differ diff --git a/libcodec2-android/src/codec2/build_linux/misc/tdec b/libcodec2-android/src/codec2/build_linux/misc/tdec new file mode 100755 index 0000000..6c732cb Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/misc/tdec differ diff --git a/libcodec2-android/src/codec2/build_linux/misc/timpulse b/libcodec2-android/src/codec2/build_linux/misc/timpulse new file mode 100755 index 0000000..b8e65af Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/misc/timpulse differ diff --git a/libcodec2-android/src/codec2/build_linux/misc/tlininterp b/libcodec2-android/src/codec2/build_linux/misc/tlininterp new file mode 100755 index 0000000..e5b9928 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/misc/tlininterp differ diff --git a/libcodec2-android/src/codec2/build_linux/misc/tnlp b/libcodec2-android/src/codec2/build_linux/misc/tnlp new file mode 100755 index 0000000..44d9853 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/misc/tnlp differ diff --git a/libcodec2-android/src/codec2/build_linux/misc/vq_mbest b/libcodec2-android/src/codec2/build_linux/misc/vq_mbest new file mode 100755 index 0000000..acf76b2 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/misc/vq_mbest differ diff --git a/libcodec2-android/src/codec2/build_linux/misc/vqtrain b/libcodec2-android/src/codec2/build_linux/misc/vqtrain new file mode 100755 index 0000000..b604157 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/misc/vqtrain differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/CMakeDirectoryInformation.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/CMakeDirectoryInformation.cmake new file mode 100644 index 0000000..4745369 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/CMakeDirectoryInformation.cmake @@ -0,0 +1,16 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Relative path conversion top directories. +set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/home/sh/Downloads/hackrf/codec2") +set(CMAKE_RELATIVE_PATH_TOP_BINARY "/home/sh/Downloads/hackrf/codec2/build_linux") + +# Force unix paths in dependencies. +set(CMAKE_FORCE_UNIX_PATHS 1) + + +# The C and CXX include file regular expressions for this directory. +set(CMAKE_C_INCLUDE_REGEX_SCAN "^.*$") +set(CMAKE_C_INCLUDE_REGEX_COMPLAIN "^$") +set(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN}) +set(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN}) diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/Export/lib/cmake/codec2/codec2-config-debug.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/Export/lib/cmake/codec2/codec2-config-debug.cmake new file mode 100644 index 0000000..ca37e5c --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/Export/lib/cmake/codec2/codec2-config-debug.cmake @@ -0,0 +1,19 @@ +#---------------------------------------------------------------- +# Generated CMake target import file for configuration "Debug". +#---------------------------------------------------------------- + +# Commands may need to know the format version. +set(CMAKE_IMPORT_FILE_VERSION 1) + +# Import target "codec2" for configuration "Debug" +set_property(TARGET codec2 APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG) +set_target_properties(codec2 PROPERTIES + IMPORTED_LOCATION_DEBUG "${_IMPORT_PREFIX}/lib/libcodec2.so.0.9" + IMPORTED_SONAME_DEBUG "libcodec2.so.0.9" + ) + +list(APPEND _IMPORT_CHECK_TARGETS codec2 ) +list(APPEND _IMPORT_CHECK_FILES_FOR_codec2 "${_IMPORT_PREFIX}/lib/libcodec2.so.0.9" ) + +# Commands beyond this point should not need to know the version. +set(CMAKE_IMPORT_FILE_VERSION) diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/Export/lib/cmake/codec2/codec2-config.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/Export/lib/cmake/codec2/codec2-config.cmake new file mode 100644 index 0000000..ba2fcbe --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/Export/lib/cmake/codec2/codec2-config.cmake @@ -0,0 +1,99 @@ +# Generated by CMake + +if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.5) + message(FATAL_ERROR "CMake >= 2.6.0 required") +endif() +cmake_policy(PUSH) +cmake_policy(VERSION 2.6) +#---------------------------------------------------------------- +# Generated CMake target import file. +#---------------------------------------------------------------- + +# Commands may need to know the format version. +set(CMAKE_IMPORT_FILE_VERSION 1) + +# Protect against multiple inclusion, which would fail when already imported targets are added once more. +set(_targetsDefined) +set(_targetsNotDefined) +set(_expectedTargets) +foreach(_expectedTarget codec2) + list(APPEND _expectedTargets ${_expectedTarget}) + if(NOT TARGET ${_expectedTarget}) + list(APPEND _targetsNotDefined ${_expectedTarget}) + endif() + if(TARGET ${_expectedTarget}) + list(APPEND _targetsDefined ${_expectedTarget}) + endif() +endforeach() +if("${_targetsDefined}" STREQUAL "${_expectedTargets}") + unset(_targetsDefined) + unset(_targetsNotDefined) + unset(_expectedTargets) + set(CMAKE_IMPORT_FILE_VERSION) + cmake_policy(POP) + return() +endif() +if(NOT "${_targetsDefined}" STREQUAL "") + message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\nTargets Defined: ${_targetsDefined}\nTargets not yet defined: ${_targetsNotDefined}\n") +endif() +unset(_targetsDefined) +unset(_targetsNotDefined) +unset(_expectedTargets) + + +# Compute the installation prefix relative to this file. +get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +if(_IMPORT_PREFIX STREQUAL "/") + set(_IMPORT_PREFIX "") +endif() + +# Create imported target codec2 +add_library(codec2 SHARED IMPORTED) + +set_target_properties(codec2 PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include/codec2" + INTERFACE_LINK_LIBRARIES "m" +) + +if(CMAKE_VERSION VERSION_LESS 2.8.12) + message(FATAL_ERROR "This file relies on consumers using CMake 2.8.12 or greater.") +endif() + +# Load information for each installed configuration. +get_filename_component(_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) +file(GLOB CONFIG_FILES "${_DIR}/codec2-config-*.cmake") +foreach(f ${CONFIG_FILES}) + include(${f}) +endforeach() + +# Cleanup temporary variables. +set(_IMPORT_PREFIX) + +# Loop over all imported files and verify that they actually exist +foreach(target ${_IMPORT_CHECK_TARGETS} ) + foreach(file ${_IMPORT_CHECK_FILES_FOR_${target}} ) + if(NOT EXISTS "${file}" ) + message(FATAL_ERROR "The imported target \"${target}\" references the file + \"${file}\" +but this file does not exist. Possible reasons include: +* The file was deleted, renamed, or moved to another location. +* An install or uninstall procedure did not complete successfully. +* The installation package was faulty and contained + \"${CMAKE_CURRENT_LIST_FILE}\" +but not all the files it references. +") + endif() + endforeach() + unset(_IMPORT_CHECK_FILES_FOR_${target}) +endforeach() +unset(_IMPORT_CHECK_TARGETS) + +# This file does not depend on other imported targets which have +# been exported from the same project but in a separate export set. + +# Commands beyond this point should not need to know the version. +set(CMAKE_IMPORT_FILE_VERSION) +cmake_policy(POP) diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2dec.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2dec.dir/C.includecache new file mode 100644 index 0000000..45af49a --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2dec.dir/C.includecache @@ -0,0 +1,110 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +/home/sh/Downloads/hackrf/codec2/src/c2dec.c +codec2.h +/home/sh/Downloads/hackrf/codec2/src/codec2.h +dump.h +/home/sh/Downloads/hackrf/codec2/src/dump.h +c2file.h +/home/sh/Downloads/hackrf/codec2/src/c2file.h +assert.h +- +stdio.h +- +stdlib.h +- +string.h +- +errno.h +- +getopt.h +- + +/home/sh/Downloads/hackrf/codec2/src/c2file.h + +/home/sh/Downloads/hackrf/codec2/src/codec2.h +codec2/version.h +- + +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.h +assert.h +- +stdlib.h +- +stdio.h +- +string.h +- +math.h +- +fdv_arm_math.h +/home/sh/Downloads/hackrf/codec2/src/fdv_arm_math.h +defines.h +/home/sh/Downloads/hackrf/codec2/src/defines.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +kiss_fftr.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/src/codec2_internal.h +codec2_fft.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.h +newamp1.h +/home/sh/Downloads/hackrf/codec2/src/newamp1.h +newamp2.h +/home/sh/Downloads/hackrf/codec2/src/newamp2.h + +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/defines.h + +/home/sh/Downloads/hackrf/codec2/src/dump.h +defines.h +/home/sh/Downloads/hackrf/codec2/src/defines.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +codec2_fft.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.h +codec2_internal.h +/home/sh/Downloads/hackrf/codec2/src/codec2_internal.h + +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h +stdlib.h +- +stdio.h +- +math.h +- +string.h +- +xmmintrin.h +- +sys/types.h +- + +/home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/src/newamp1.h +codec2_fft.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/newamp2.h +codec2_fft.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h + +codec2/version.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2dec.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2dec.dir/DependInfo.cmake new file mode 100644 index 0000000..c82e405 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2dec.dir/DependInfo.cmake @@ -0,0 +1,29 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/src/c2dec.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/c2dec.dir/c2dec.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "GIT_HASH=\"df2ed16c\"" + "_GNU_SOURCE=1" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/DependInfo.cmake" + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2dec.dir/build.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2dec.dir/build.make new file mode 100644 index 0000000..8b81fe4 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2dec.dir/build.make @@ -0,0 +1,99 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include src/CMakeFiles/c2dec.dir/depend.make + +# Include the progress variables for this target. +include src/CMakeFiles/c2dec.dir/progress.make + +# Include the compile flags for this target's objects. +include src/CMakeFiles/c2dec.dir/flags.make + +src/CMakeFiles/c2dec.dir/c2dec.c.o: src/CMakeFiles/c2dec.dir/flags.make +src/CMakeFiles/c2dec.dir/c2dec.c.o: ../src/c2dec.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object src/CMakeFiles/c2dec.dir/c2dec.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/c2dec.dir/c2dec.c.o -c /home/sh/Downloads/hackrf/codec2/src/c2dec.c + +src/CMakeFiles/c2dec.dir/c2dec.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/c2dec.dir/c2dec.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/c2dec.c > CMakeFiles/c2dec.dir/c2dec.c.i + +src/CMakeFiles/c2dec.dir/c2dec.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/c2dec.dir/c2dec.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/c2dec.c -o CMakeFiles/c2dec.dir/c2dec.c.s + +# Object files for target c2dec +c2dec_OBJECTS = \ +"CMakeFiles/c2dec.dir/c2dec.c.o" + +# External object files for target c2dec +c2dec_EXTERNAL_OBJECTS = + +src/c2dec: src/CMakeFiles/c2dec.dir/c2dec.c.o +src/c2dec: src/CMakeFiles/c2dec.dir/build.make +src/c2dec: src/libcodec2.so.0.9 +src/c2dec: src/CMakeFiles/c2dec.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking C executable c2dec" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/c2dec.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +src/CMakeFiles/c2dec.dir/build: src/c2dec + +.PHONY : src/CMakeFiles/c2dec.dir/build + +src/CMakeFiles/c2dec.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -P CMakeFiles/c2dec.dir/cmake_clean.cmake +.PHONY : src/CMakeFiles/c2dec.dir/clean + +src/CMakeFiles/c2dec.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/src /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/src /home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/c2dec.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : src/CMakeFiles/c2dec.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2dec.dir/c2dec.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2dec.dir/c2dec.c.o new file mode 100644 index 0000000..73643ab Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2dec.dir/c2dec.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2dec.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2dec.dir/cmake_clean.cmake new file mode 100644 index 0000000..46e7c13 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2dec.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +file(REMOVE_RECURSE + "CMakeFiles/c2dec.dir/c2dec.c.o" + "c2dec.pdb" + "c2dec" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/c2dec.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2dec.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2dec.dir/depend.internal new file mode 100644 index 0000000..0a82787 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2dec.dir/depend.internal @@ -0,0 +1,17 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/c2dec.dir/c2dec.c.o + /home/sh/Downloads/hackrf/codec2/src/c2dec.c + /home/sh/Downloads/hackrf/codec2/src/c2file.h + /home/sh/Downloads/hackrf/codec2/src/codec2.h + /home/sh/Downloads/hackrf/codec2/src/codec2_fft.h + /home/sh/Downloads/hackrf/codec2/src/codec2_internal.h + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/defines.h + /home/sh/Downloads/hackrf/codec2/src/dump.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h + /home/sh/Downloads/hackrf/codec2/src/newamp1.h + /home/sh/Downloads/hackrf/codec2/src/newamp2.h + codec2/version.h diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2dec.dir/depend.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2dec.dir/depend.make new file mode 100644 index 0000000..44847b5 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2dec.dir/depend.make @@ -0,0 +1,17 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/c2dec.dir/c2dec.c.o: ../src/c2dec.c +src/CMakeFiles/c2dec.dir/c2dec.c.o: ../src/c2file.h +src/CMakeFiles/c2dec.dir/c2dec.c.o: ../src/codec2.h +src/CMakeFiles/c2dec.dir/c2dec.c.o: ../src/codec2_fft.h +src/CMakeFiles/c2dec.dir/c2dec.c.o: ../src/codec2_internal.h +src/CMakeFiles/c2dec.dir/c2dec.c.o: ../src/comp.h +src/CMakeFiles/c2dec.dir/c2dec.c.o: ../src/defines.h +src/CMakeFiles/c2dec.dir/c2dec.c.o: ../src/dump.h +src/CMakeFiles/c2dec.dir/c2dec.c.o: ../src/kiss_fft.h +src/CMakeFiles/c2dec.dir/c2dec.c.o: ../src/kiss_fftr.h +src/CMakeFiles/c2dec.dir/c2dec.c.o: ../src/newamp1.h +src/CMakeFiles/c2dec.dir/c2dec.c.o: ../src/newamp2.h +src/CMakeFiles/c2dec.dir/c2dec.c.o: codec2/version.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2dec.dir/flags.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2dec.dir/flags.make new file mode 100644 index 0000000..814242c --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2dec.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DGIT_HASH=\"df2ed16c\" -D_GNU_SOURCE=1 + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/src + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2dec.dir/link.txt b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2dec.dir/link.txt new file mode 100644 index 0000000..a818097 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2dec.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/c2dec.dir/c2dec.c.o -o c2dec -Wl,-rpath,/home/sh/Downloads/hackrf/codec2/build_linux/src -lm libcodec2.so.0.9 -lm diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2dec.dir/progress.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2dec.dir/progress.make new file mode 100644 index 0000000..6c287f1 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2dec.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = +CMAKE_PROGRESS_2 = + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2demo.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2demo.dir/C.includecache new file mode 100644 index 0000000..384e839 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2demo.dir/C.includecache @@ -0,0 +1,112 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +/home/sh/Downloads/hackrf/codec2/src/c2demo.c +codec2.h +/home/sh/Downloads/hackrf/codec2/src/codec2.h +sine.h +/home/sh/Downloads/hackrf/codec2/src/sine.h +dump.h +/home/sh/Downloads/hackrf/codec2/src/dump.h +stdio.h +- +stdlib.h +- +string.h +- +errno.h +- + +/home/sh/Downloads/hackrf/codec2/src/codec2.h +codec2/version.h +- + +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.h +assert.h +- +stdlib.h +- +stdio.h +- +string.h +- +math.h +- +fdv_arm_math.h +/home/sh/Downloads/hackrf/codec2/src/fdv_arm_math.h +defines.h +/home/sh/Downloads/hackrf/codec2/src/defines.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +kiss_fftr.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/src/codec2_internal.h +codec2_fft.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.h +newamp1.h +/home/sh/Downloads/hackrf/codec2/src/newamp1.h +newamp2.h +/home/sh/Downloads/hackrf/codec2/src/newamp2.h + +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/defines.h + +/home/sh/Downloads/hackrf/codec2/src/dump.h +defines.h +/home/sh/Downloads/hackrf/codec2/src/defines.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +codec2_fft.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.h +codec2_internal.h +/home/sh/Downloads/hackrf/codec2/src/codec2_internal.h + +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h +stdlib.h +- +stdio.h +- +math.h +- +string.h +- +xmmintrin.h +- +sys/types.h +- + +/home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/src/newamp1.h +codec2_fft.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/newamp2.h +codec2_fft.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/sine.h +defines.h +/home/sh/Downloads/hackrf/codec2/src/defines.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +codec2_fft.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.h + +codec2/version.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2demo.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2demo.dir/DependInfo.cmake new file mode 100644 index 0000000..870455d --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2demo.dir/DependInfo.cmake @@ -0,0 +1,29 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/src/c2demo.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/c2demo.dir/c2demo.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "GIT_HASH=\"df2ed16c\"" + "_GNU_SOURCE=1" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/DependInfo.cmake" + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2demo.dir/build.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2demo.dir/build.make new file mode 100644 index 0000000..0a512ea --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2demo.dir/build.make @@ -0,0 +1,99 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include src/CMakeFiles/c2demo.dir/depend.make + +# Include the progress variables for this target. +include src/CMakeFiles/c2demo.dir/progress.make + +# Include the compile flags for this target's objects. +include src/CMakeFiles/c2demo.dir/flags.make + +src/CMakeFiles/c2demo.dir/c2demo.c.o: src/CMakeFiles/c2demo.dir/flags.make +src/CMakeFiles/c2demo.dir/c2demo.c.o: ../src/c2demo.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object src/CMakeFiles/c2demo.dir/c2demo.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/c2demo.dir/c2demo.c.o -c /home/sh/Downloads/hackrf/codec2/src/c2demo.c + +src/CMakeFiles/c2demo.dir/c2demo.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/c2demo.dir/c2demo.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/c2demo.c > CMakeFiles/c2demo.dir/c2demo.c.i + +src/CMakeFiles/c2demo.dir/c2demo.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/c2demo.dir/c2demo.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/c2demo.c -o CMakeFiles/c2demo.dir/c2demo.c.s + +# Object files for target c2demo +c2demo_OBJECTS = \ +"CMakeFiles/c2demo.dir/c2demo.c.o" + +# External object files for target c2demo +c2demo_EXTERNAL_OBJECTS = + +src/c2demo: src/CMakeFiles/c2demo.dir/c2demo.c.o +src/c2demo: src/CMakeFiles/c2demo.dir/build.make +src/c2demo: src/libcodec2.so.0.9 +src/c2demo: src/CMakeFiles/c2demo.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking C executable c2demo" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/c2demo.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +src/CMakeFiles/c2demo.dir/build: src/c2demo + +.PHONY : src/CMakeFiles/c2demo.dir/build + +src/CMakeFiles/c2demo.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -P CMakeFiles/c2demo.dir/cmake_clean.cmake +.PHONY : src/CMakeFiles/c2demo.dir/clean + +src/CMakeFiles/c2demo.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/src /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/src /home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/c2demo.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : src/CMakeFiles/c2demo.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2demo.dir/c2demo.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2demo.dir/c2demo.c.o new file mode 100644 index 0000000..049b8d7 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2demo.dir/c2demo.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2demo.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2demo.dir/cmake_clean.cmake new file mode 100644 index 0000000..7522cb8 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2demo.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +file(REMOVE_RECURSE + "CMakeFiles/c2demo.dir/c2demo.c.o" + "c2demo.pdb" + "c2demo" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/c2demo.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2demo.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2demo.dir/depend.internal new file mode 100644 index 0000000..169ae9c --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2demo.dir/depend.internal @@ -0,0 +1,17 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/c2demo.dir/c2demo.c.o + /home/sh/Downloads/hackrf/codec2/src/c2demo.c + /home/sh/Downloads/hackrf/codec2/src/codec2.h + /home/sh/Downloads/hackrf/codec2/src/codec2_fft.h + /home/sh/Downloads/hackrf/codec2/src/codec2_internal.h + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/defines.h + /home/sh/Downloads/hackrf/codec2/src/dump.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h + /home/sh/Downloads/hackrf/codec2/src/newamp1.h + /home/sh/Downloads/hackrf/codec2/src/newamp2.h + /home/sh/Downloads/hackrf/codec2/src/sine.h + codec2/version.h diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2demo.dir/depend.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2demo.dir/depend.make new file mode 100644 index 0000000..adc283a --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2demo.dir/depend.make @@ -0,0 +1,17 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/c2demo.dir/c2demo.c.o: ../src/c2demo.c +src/CMakeFiles/c2demo.dir/c2demo.c.o: ../src/codec2.h +src/CMakeFiles/c2demo.dir/c2demo.c.o: ../src/codec2_fft.h +src/CMakeFiles/c2demo.dir/c2demo.c.o: ../src/codec2_internal.h +src/CMakeFiles/c2demo.dir/c2demo.c.o: ../src/comp.h +src/CMakeFiles/c2demo.dir/c2demo.c.o: ../src/defines.h +src/CMakeFiles/c2demo.dir/c2demo.c.o: ../src/dump.h +src/CMakeFiles/c2demo.dir/c2demo.c.o: ../src/kiss_fft.h +src/CMakeFiles/c2demo.dir/c2demo.c.o: ../src/kiss_fftr.h +src/CMakeFiles/c2demo.dir/c2demo.c.o: ../src/newamp1.h +src/CMakeFiles/c2demo.dir/c2demo.c.o: ../src/newamp2.h +src/CMakeFiles/c2demo.dir/c2demo.c.o: ../src/sine.h +src/CMakeFiles/c2demo.dir/c2demo.c.o: codec2/version.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2demo.dir/flags.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2demo.dir/flags.make new file mode 100644 index 0000000..814242c --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2demo.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DGIT_HASH=\"df2ed16c\" -D_GNU_SOURCE=1 + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/src + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2demo.dir/link.txt b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2demo.dir/link.txt new file mode 100644 index 0000000..60858be --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2demo.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/c2demo.dir/c2demo.c.o -o c2demo -Wl,-rpath,/home/sh/Downloads/hackrf/codec2/build_linux/src -lm libcodec2.so.0.9 -lm diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2demo.dir/progress.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2demo.dir/progress.make new file mode 100644 index 0000000..e9511b0 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2demo.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = 2 +CMAKE_PROGRESS_2 = + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2enc.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2enc.dir/C.includecache new file mode 100644 index 0000000..35716f2 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2enc.dir/C.includecache @@ -0,0 +1,32 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +/home/sh/Downloads/hackrf/codec2/src/c2enc.c +codec2.h +/home/sh/Downloads/hackrf/codec2/src/codec2.h +c2file.h +/home/sh/Downloads/hackrf/codec2/src/c2file.h +stdio.h +- +stdlib.h +- +string.h +- +errno.h +- +math.h +- + +/home/sh/Downloads/hackrf/codec2/src/c2file.h + +/home/sh/Downloads/hackrf/codec2/src/codec2.h +codec2/version.h +- + +codec2/version.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2enc.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2enc.dir/DependInfo.cmake new file mode 100644 index 0000000..245cba4 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2enc.dir/DependInfo.cmake @@ -0,0 +1,29 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/src/c2enc.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/c2enc.dir/c2enc.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "GIT_HASH=\"df2ed16c\"" + "_GNU_SOURCE=1" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/DependInfo.cmake" + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2enc.dir/build.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2enc.dir/build.make new file mode 100644 index 0000000..7634e3d --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2enc.dir/build.make @@ -0,0 +1,99 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include src/CMakeFiles/c2enc.dir/depend.make + +# Include the progress variables for this target. +include src/CMakeFiles/c2enc.dir/progress.make + +# Include the compile flags for this target's objects. +include src/CMakeFiles/c2enc.dir/flags.make + +src/CMakeFiles/c2enc.dir/c2enc.c.o: src/CMakeFiles/c2enc.dir/flags.make +src/CMakeFiles/c2enc.dir/c2enc.c.o: ../src/c2enc.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object src/CMakeFiles/c2enc.dir/c2enc.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/c2enc.dir/c2enc.c.o -c /home/sh/Downloads/hackrf/codec2/src/c2enc.c + +src/CMakeFiles/c2enc.dir/c2enc.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/c2enc.dir/c2enc.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/c2enc.c > CMakeFiles/c2enc.dir/c2enc.c.i + +src/CMakeFiles/c2enc.dir/c2enc.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/c2enc.dir/c2enc.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/c2enc.c -o CMakeFiles/c2enc.dir/c2enc.c.s + +# Object files for target c2enc +c2enc_OBJECTS = \ +"CMakeFiles/c2enc.dir/c2enc.c.o" + +# External object files for target c2enc +c2enc_EXTERNAL_OBJECTS = + +src/c2enc: src/CMakeFiles/c2enc.dir/c2enc.c.o +src/c2enc: src/CMakeFiles/c2enc.dir/build.make +src/c2enc: src/libcodec2.so.0.9 +src/c2enc: src/CMakeFiles/c2enc.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking C executable c2enc" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/c2enc.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +src/CMakeFiles/c2enc.dir/build: src/c2enc + +.PHONY : src/CMakeFiles/c2enc.dir/build + +src/CMakeFiles/c2enc.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -P CMakeFiles/c2enc.dir/cmake_clean.cmake +.PHONY : src/CMakeFiles/c2enc.dir/clean + +src/CMakeFiles/c2enc.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/src /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/src /home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/c2enc.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : src/CMakeFiles/c2enc.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2enc.dir/c2enc.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2enc.dir/c2enc.c.o new file mode 100644 index 0000000..9317551 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2enc.dir/c2enc.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2enc.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2enc.dir/cmake_clean.cmake new file mode 100644 index 0000000..2c9bf1b --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2enc.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +file(REMOVE_RECURSE + "CMakeFiles/c2enc.dir/c2enc.c.o" + "c2enc.pdb" + "c2enc" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/c2enc.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2enc.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2enc.dir/depend.internal new file mode 100644 index 0000000..9a0118f --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2enc.dir/depend.internal @@ -0,0 +1,8 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/c2enc.dir/c2enc.c.o + /home/sh/Downloads/hackrf/codec2/src/c2enc.c + /home/sh/Downloads/hackrf/codec2/src/c2file.h + /home/sh/Downloads/hackrf/codec2/src/codec2.h + codec2/version.h diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2enc.dir/depend.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2enc.dir/depend.make new file mode 100644 index 0000000..63a7640 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2enc.dir/depend.make @@ -0,0 +1,8 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/c2enc.dir/c2enc.c.o: ../src/c2enc.c +src/CMakeFiles/c2enc.dir/c2enc.c.o: ../src/c2file.h +src/CMakeFiles/c2enc.dir/c2enc.c.o: ../src/codec2.h +src/CMakeFiles/c2enc.dir/c2enc.c.o: codec2/version.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2enc.dir/flags.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2enc.dir/flags.make new file mode 100644 index 0000000..814242c --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2enc.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DGIT_HASH=\"df2ed16c\" -D_GNU_SOURCE=1 + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/src + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2enc.dir/link.txt b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2enc.dir/link.txt new file mode 100644 index 0000000..2108f09 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2enc.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/c2enc.dir/c2enc.c.o -o c2enc -Wl,-rpath,/home/sh/Downloads/hackrf/codec2/build_linux/src -lm libcodec2.so.0.9 -lm diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2enc.dir/progress.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2enc.dir/progress.make new file mode 100644 index 0000000..d7043a9 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2enc.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = +CMAKE_PROGRESS_2 = 3 + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2sim.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2sim.dir/C.includecache new file mode 100644 index 0000000..a239185 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2sim.dir/C.includecache @@ -0,0 +1,168 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +/home/sh/Downloads/hackrf/codec2/src/bpf.h + +/home/sh/Downloads/hackrf/codec2/src/bpfb.h + +/home/sh/Downloads/hackrf/codec2/src/c2sim.c +assert.h +- +stdio.h +- +stdlib.h +- +string.h +- +errno.h +- +math.h +- +unistd.h +- +getopt.h +- +defines.h +/home/sh/Downloads/hackrf/codec2/src/defines.h +sine.h +/home/sh/Downloads/hackrf/codec2/src/sine.h +nlp.h +/home/sh/Downloads/hackrf/codec2/src/nlp.h +dump.h +/home/sh/Downloads/hackrf/codec2/src/dump.h +lpc.h +/home/sh/Downloads/hackrf/codec2/src/lpc.h +lsp.h +/home/sh/Downloads/hackrf/codec2/src/lsp.h +quantise.h +/home/sh/Downloads/hackrf/codec2/src/quantise.h +phase.h +/home/sh/Downloads/hackrf/codec2/src/phase.h +postfilter.h +/home/sh/Downloads/hackrf/codec2/src/postfilter.h +interp.h +/home/sh/Downloads/hackrf/codec2/src/interp.h +bpf.h +/home/sh/Downloads/hackrf/codec2/src/bpf.h +bpfb.h +/home/sh/Downloads/hackrf/codec2/src/bpfb.h +newamp1.h +/home/sh/Downloads/hackrf/codec2/src/newamp1.h +lpcnet_freq.h +/home/sh/Downloads/hackrf/codec2/src/lpcnet_freq.h + +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.h +assert.h +- +stdlib.h +- +stdio.h +- +string.h +- +math.h +- +fdv_arm_math.h +/home/sh/Downloads/hackrf/codec2/src/fdv_arm_math.h +defines.h +/home/sh/Downloads/hackrf/codec2/src/defines.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +kiss_fftr.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/src/codec2_internal.h +codec2_fft.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.h +newamp1.h +/home/sh/Downloads/hackrf/codec2/src/newamp1.h +newamp2.h +/home/sh/Downloads/hackrf/codec2/src/newamp2.h + +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/defines.h + +/home/sh/Downloads/hackrf/codec2/src/dump.h +defines.h +/home/sh/Downloads/hackrf/codec2/src/defines.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +codec2_fft.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.h +codec2_internal.h +/home/sh/Downloads/hackrf/codec2/src/codec2_internal.h + +/home/sh/Downloads/hackrf/codec2/src/interp.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h +stdlib.h +- +stdio.h +- +math.h +- +string.h +- +xmmintrin.h +- +sys/types.h +- + +/home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/src/lpc.h + +/home/sh/Downloads/hackrf/codec2/src/lpcnet_freq.h + +/home/sh/Downloads/hackrf/codec2/src/lsp.h + +/home/sh/Downloads/hackrf/codec2/src/newamp1.h +codec2_fft.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/newamp2.h +codec2_fft.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/nlp.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/phase.h +codec2_fft.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/postfilter.h + +/home/sh/Downloads/hackrf/codec2/src/quantise.h +codec2_fft.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/sine.h +defines.h +/home/sh/Downloads/hackrf/codec2/src/defines.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +codec2_fft.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2sim.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2sim.dir/DependInfo.cmake new file mode 100644 index 0000000..cd2e1fd --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2sim.dir/DependInfo.cmake @@ -0,0 +1,29 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/src/c2sim.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/c2sim.dir/c2sim.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "GIT_HASH=\"df2ed16c\"" + "_GNU_SOURCE=1" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/DependInfo.cmake" + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2sim.dir/build.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2sim.dir/build.make new file mode 100644 index 0000000..c1f95ed --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2sim.dir/build.make @@ -0,0 +1,99 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include src/CMakeFiles/c2sim.dir/depend.make + +# Include the progress variables for this target. +include src/CMakeFiles/c2sim.dir/progress.make + +# Include the compile flags for this target's objects. +include src/CMakeFiles/c2sim.dir/flags.make + +src/CMakeFiles/c2sim.dir/c2sim.c.o: src/CMakeFiles/c2sim.dir/flags.make +src/CMakeFiles/c2sim.dir/c2sim.c.o: ../src/c2sim.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object src/CMakeFiles/c2sim.dir/c2sim.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/c2sim.dir/c2sim.c.o -c /home/sh/Downloads/hackrf/codec2/src/c2sim.c + +src/CMakeFiles/c2sim.dir/c2sim.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/c2sim.dir/c2sim.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/c2sim.c > CMakeFiles/c2sim.dir/c2sim.c.i + +src/CMakeFiles/c2sim.dir/c2sim.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/c2sim.dir/c2sim.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/c2sim.c -o CMakeFiles/c2sim.dir/c2sim.c.s + +# Object files for target c2sim +c2sim_OBJECTS = \ +"CMakeFiles/c2sim.dir/c2sim.c.o" + +# External object files for target c2sim +c2sim_EXTERNAL_OBJECTS = + +src/c2sim: src/CMakeFiles/c2sim.dir/c2sim.c.o +src/c2sim: src/CMakeFiles/c2sim.dir/build.make +src/c2sim: src/libcodec2.so.0.9 +src/c2sim: src/CMakeFiles/c2sim.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking C executable c2sim" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/c2sim.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +src/CMakeFiles/c2sim.dir/build: src/c2sim + +.PHONY : src/CMakeFiles/c2sim.dir/build + +src/CMakeFiles/c2sim.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -P CMakeFiles/c2sim.dir/cmake_clean.cmake +.PHONY : src/CMakeFiles/c2sim.dir/clean + +src/CMakeFiles/c2sim.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/src /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/src /home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/c2sim.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : src/CMakeFiles/c2sim.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2sim.dir/c2sim.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2sim.dir/c2sim.c.o new file mode 100644 index 0000000..e499c5d Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2sim.dir/c2sim.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2sim.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2sim.dir/cmake_clean.cmake new file mode 100644 index 0000000..e4b36a2 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2sim.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +file(REMOVE_RECURSE + "CMakeFiles/c2sim.dir/c2sim.c.o" + "c2sim.pdb" + "c2sim" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/c2sim.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2sim.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2sim.dir/depend.internal new file mode 100644 index 0000000..bc3fdec --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2sim.dir/depend.internal @@ -0,0 +1,25 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/c2sim.dir/c2sim.c.o + /home/sh/Downloads/hackrf/codec2/src/bpf.h + /home/sh/Downloads/hackrf/codec2/src/bpfb.h + /home/sh/Downloads/hackrf/codec2/src/c2sim.c + /home/sh/Downloads/hackrf/codec2/src/codec2_fft.h + /home/sh/Downloads/hackrf/codec2/src/codec2_internal.h + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/defines.h + /home/sh/Downloads/hackrf/codec2/src/dump.h + /home/sh/Downloads/hackrf/codec2/src/interp.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h + /home/sh/Downloads/hackrf/codec2/src/lpc.h + /home/sh/Downloads/hackrf/codec2/src/lpcnet_freq.h + /home/sh/Downloads/hackrf/codec2/src/lsp.h + /home/sh/Downloads/hackrf/codec2/src/newamp1.h + /home/sh/Downloads/hackrf/codec2/src/newamp2.h + /home/sh/Downloads/hackrf/codec2/src/nlp.h + /home/sh/Downloads/hackrf/codec2/src/phase.h + /home/sh/Downloads/hackrf/codec2/src/postfilter.h + /home/sh/Downloads/hackrf/codec2/src/quantise.h + /home/sh/Downloads/hackrf/codec2/src/sine.h diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2sim.dir/depend.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2sim.dir/depend.make new file mode 100644 index 0000000..f7faac7 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2sim.dir/depend.make @@ -0,0 +1,25 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/c2sim.dir/c2sim.c.o: ../src/bpf.h +src/CMakeFiles/c2sim.dir/c2sim.c.o: ../src/bpfb.h +src/CMakeFiles/c2sim.dir/c2sim.c.o: ../src/c2sim.c +src/CMakeFiles/c2sim.dir/c2sim.c.o: ../src/codec2_fft.h +src/CMakeFiles/c2sim.dir/c2sim.c.o: ../src/codec2_internal.h +src/CMakeFiles/c2sim.dir/c2sim.c.o: ../src/comp.h +src/CMakeFiles/c2sim.dir/c2sim.c.o: ../src/defines.h +src/CMakeFiles/c2sim.dir/c2sim.c.o: ../src/dump.h +src/CMakeFiles/c2sim.dir/c2sim.c.o: ../src/interp.h +src/CMakeFiles/c2sim.dir/c2sim.c.o: ../src/kiss_fft.h +src/CMakeFiles/c2sim.dir/c2sim.c.o: ../src/kiss_fftr.h +src/CMakeFiles/c2sim.dir/c2sim.c.o: ../src/lpc.h +src/CMakeFiles/c2sim.dir/c2sim.c.o: ../src/lpcnet_freq.h +src/CMakeFiles/c2sim.dir/c2sim.c.o: ../src/lsp.h +src/CMakeFiles/c2sim.dir/c2sim.c.o: ../src/newamp1.h +src/CMakeFiles/c2sim.dir/c2sim.c.o: ../src/newamp2.h +src/CMakeFiles/c2sim.dir/c2sim.c.o: ../src/nlp.h +src/CMakeFiles/c2sim.dir/c2sim.c.o: ../src/phase.h +src/CMakeFiles/c2sim.dir/c2sim.c.o: ../src/postfilter.h +src/CMakeFiles/c2sim.dir/c2sim.c.o: ../src/quantise.h +src/CMakeFiles/c2sim.dir/c2sim.c.o: ../src/sine.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2sim.dir/flags.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2sim.dir/flags.make new file mode 100644 index 0000000..814242c --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2sim.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DGIT_HASH=\"df2ed16c\" -D_GNU_SOURCE=1 + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/src + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2sim.dir/link.txt b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2sim.dir/link.txt new file mode 100644 index 0000000..4bfa792 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2sim.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/c2sim.dir/c2sim.c.o -o c2sim -Wl,-rpath,/home/sh/Downloads/hackrf/codec2/build_linux/src -lm libcodec2.so.0.9 -lm diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2sim.dir/progress.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2sim.dir/progress.make new file mode 100644 index 0000000..6c287f1 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/c2sim.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = +CMAKE_PROGRESS_2 = + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/C.includecache new file mode 100644 index 0000000..3339f49 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/C.includecache @@ -0,0 +1,1244 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +../src/defines.h + +/home/sh/Downloads/hackrf/codec2/build_linux/src/codebook.c +defines.h +/home/sh/Downloads/hackrf/codec2/build_linux/src/defines.h + +/home/sh/Downloads/hackrf/codec2/build_linux/src/codebookd.c +defines.h +/home/sh/Downloads/hackrf/codec2/build_linux/src/defines.h + +/home/sh/Downloads/hackrf/codec2/build_linux/src/codebookge.c +defines.h +/home/sh/Downloads/hackrf/codec2/build_linux/src/defines.h + +/home/sh/Downloads/hackrf/codec2/build_linux/src/codebookjvm.c +defines.h +/home/sh/Downloads/hackrf/codec2/build_linux/src/defines.h + +/home/sh/Downloads/hackrf/codec2/build_linux/src/codebooknewamp1.c +defines.h +/home/sh/Downloads/hackrf/codec2/build_linux/src/defines.h + +/home/sh/Downloads/hackrf/codec2/build_linux/src/codebooknewamp1_energy.c +defines.h +/home/sh/Downloads/hackrf/codec2/build_linux/src/defines.h + +/home/sh/Downloads/hackrf/codec2/build_linux/src/codebooknewamp2.c +defines.h +/home/sh/Downloads/hackrf/codec2/build_linux/src/defines.h + +/home/sh/Downloads/hackrf/codec2/build_linux/src/codebooknewamp2_energy.c +defines.h +/home/sh/Downloads/hackrf/codec2/build_linux/src/defines.h + +/home/sh/Downloads/hackrf/codec2/src/H2064_516_sparse.h +stdint.h +- + +/home/sh/Downloads/hackrf/codec2/src/HRA_112_112.h + +/home/sh/Downloads/hackrf/codec2/src/HRAa_1536_512.c +stdint.h +- +HRAa_1536_512.h +/home/sh/Downloads/hackrf/codec2/src/HRAa_1536_512.h + +/home/sh/Downloads/hackrf/codec2/src/HRAa_1536_512.h + +/home/sh/Downloads/hackrf/codec2/src/HRAb_396_504.h + +/home/sh/Downloads/hackrf/codec2/src/H_128_256_5.c +stdint.h +- +H_128_256_5.h +/home/sh/Downloads/hackrf/codec2/src/H_128_256_5.h + +/home/sh/Downloads/hackrf/codec2/src/H_128_256_5.h + +/home/sh/Downloads/hackrf/codec2/src/H_256_512_4.c +stdint.h +- +H_256_512_4.h +/home/sh/Downloads/hackrf/codec2/src/H_256_512_4.h + +/home/sh/Downloads/hackrf/codec2/src/H_256_512_4.h + +/home/sh/Downloads/hackrf/codec2/src/H_256_768_22.c +stdint.h +- +H_256_768_22.h +/home/sh/Downloads/hackrf/codec2/src/H_256_768_22.h + +/home/sh/Downloads/hackrf/codec2/src/H_256_768_22.h + +/home/sh/Downloads/hackrf/codec2/src/_kiss_fft_guts.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h +limits.h +- +alloca.h +- + +/home/sh/Downloads/hackrf/codec2/src/bpf.h + +/home/sh/Downloads/hackrf/codec2/src/bpfb.h + +/home/sh/Downloads/hackrf/codec2/src/c2wideband.h +defines.h +/home/sh/Downloads/hackrf/codec2/src/defines.h +phase.h +/home/sh/Downloads/hackrf/codec2/src/phase.h +quantise.h +/home/sh/Downloads/hackrf/codec2/src/quantise.h +newamp1.h +/home/sh/Downloads/hackrf/codec2/src/newamp1.h +codec2_internal.h +/home/sh/Downloads/hackrf/codec2/src/codec2_internal.h + +/home/sh/Downloads/hackrf/codec2/src/codec2.c +assert.h +- +stdio.h +- +stdlib.h +- +stdbool.h +- +string.h +- +math.h +- +defines.h +/home/sh/Downloads/hackrf/codec2/src/defines.h +codec2_fft.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.h +sine.h +/home/sh/Downloads/hackrf/codec2/src/sine.h +nlp.h +/home/sh/Downloads/hackrf/codec2/src/nlp.h +dump.h +/home/sh/Downloads/hackrf/codec2/src/dump.h +lpc.h +/home/sh/Downloads/hackrf/codec2/src/lpc.h +quantise.h +/home/sh/Downloads/hackrf/codec2/src/quantise.h +phase.h +/home/sh/Downloads/hackrf/codec2/src/phase.h +interp.h +/home/sh/Downloads/hackrf/codec2/src/interp.h +postfilter.h +/home/sh/Downloads/hackrf/codec2/src/postfilter.h +codec2.h +/home/sh/Downloads/hackrf/codec2/src/codec2.h +lsp.h +/home/sh/Downloads/hackrf/codec2/src/lsp.h +newamp2.h +/home/sh/Downloads/hackrf/codec2/src/newamp2.h +codec2_internal.h +/home/sh/Downloads/hackrf/codec2/src/codec2_internal.h +machdep.h +/home/sh/Downloads/hackrf/codec2/src/machdep.h +bpf.h +/home/sh/Downloads/hackrf/codec2/src/bpf.h +bpfb.h +/home/sh/Downloads/hackrf/codec2/src/bpfb.h +c2wideband.h +/home/sh/Downloads/hackrf/codec2/src/c2wideband.h +debug_alloc.h +/home/sh/Downloads/hackrf/codec2/src/debug_alloc.h + +/home/sh/Downloads/hackrf/codec2/src/codec2.h +codec2/version.h +- + +/home/sh/Downloads/hackrf/codec2/src/codec2_cohpsk.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +modem_stats.h +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h + +/home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +modem_stats.h +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h + +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.c +codec2_fft.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.h +debug_alloc.h +/home/sh/Downloads/hackrf/codec2/src/debug_alloc.h +_kiss_fft_guts.h +/home/sh/Downloads/hackrf/codec2/src/_kiss_fft_guts.h + +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.h +assert.h +- +stdlib.h +- +stdio.h +- +string.h +- +math.h +- +fdv_arm_math.h +/home/sh/Downloads/hackrf/codec2/src/fdv_arm_math.h +defines.h +/home/sh/Downloads/hackrf/codec2/src/defines.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +kiss_fftr.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/src/codec2_fifo.c +assert.h +- +stdlib.h +- +stdio.h +- +codec2_fifo.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fifo.h + +/home/sh/Downloads/hackrf/codec2/src/codec2_fifo.h + +/home/sh/Downloads/hackrf/codec2/src/codec2_internal.h +codec2_fft.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.h +newamp1.h +/home/sh/Downloads/hackrf/codec2/src/newamp1.h +newamp2.h +/home/sh/Downloads/hackrf/codec2/src/newamp2.h + +/home/sh/Downloads/hackrf/codec2/src/codec2_ofdm.h +stdbool.h +- +stdint.h +- +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +modem_stats.h +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h + +/home/sh/Downloads/hackrf/codec2/src/cohpsk.c +assert.h +- +stdlib.h +- +stdio.h +- +string.h +- +math.h +- +codec2_cohpsk.h +/home/sh/Downloads/hackrf/codec2/src/codec2_cohpsk.h +cohpsk_defs.h +/home/sh/Downloads/hackrf/codec2/src/cohpsk_defs.h +cohpsk_internal.h +/home/sh/Downloads/hackrf/codec2/src/cohpsk_internal.h +fdmdv_internal.h +/home/sh/Downloads/hackrf/codec2/src/fdmdv_internal.h +pilots_coh.h +/home/sh/Downloads/hackrf/codec2/src/pilots_coh.h +comp_prim.h +/home/sh/Downloads/hackrf/codec2/src/comp_prim.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h +linreg.h +/home/sh/Downloads/hackrf/codec2/src/linreg.h +rn_coh.h +/home/sh/Downloads/hackrf/codec2/src/rn_coh.h +test_bits_coh.h +/home/sh/Downloads/hackrf/codec2/src/test_bits_coh.h +debug_alloc.h +/home/sh/Downloads/hackrf/codec2/src/debug_alloc.h + +/home/sh/Downloads/hackrf/codec2/src/cohpsk_defs.h + +/home/sh/Downloads/hackrf/codec2/src/cohpsk_internal.h +fdmdv_internal.h +/home/sh/Downloads/hackrf/codec2/src/fdmdv_internal.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/comp_prim.h + +/home/sh/Downloads/hackrf/codec2/src/debug_alloc.h +stdio.h +- + +/home/sh/Downloads/hackrf/codec2/src/defines.h + +/home/sh/Downloads/hackrf/codec2/src/dump.c +defines.h +/home/sh/Downloads/hackrf/codec2/src/defines.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +dump.h +/home/sh/Downloads/hackrf/codec2/src/dump.h +assert.h +- +stdlib.h +- +stdio.h +- +string.h +- +math.h +- +gdb_stdio.h +/home/sh/Downloads/hackrf/codec2/src/gdb_stdio.h + +/home/sh/Downloads/hackrf/codec2/src/dump.h +defines.h +/home/sh/Downloads/hackrf/codec2/src/defines.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +codec2_fft.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.h +codec2_internal.h +/home/sh/Downloads/hackrf/codec2/src/codec2_internal.h + +/home/sh/Downloads/hackrf/codec2/src/fdmdv.c +assert.h +- +stdlib.h +- +stdio.h +- +string.h +- +math.h +- +fdmdv_internal.h +/home/sh/Downloads/hackrf/codec2/src/fdmdv_internal.h +codec2_fdmdv.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h +comp_prim.h +/home/sh/Downloads/hackrf/codec2/src/comp_prim.h +rn.h +/home/sh/Downloads/hackrf/codec2/src/rn.h +rxdec_coeff.h +/home/sh/Downloads/hackrf/codec2/src/rxdec_coeff.h +test_bits.h +/home/sh/Downloads/hackrf/codec2/src/test_bits.h +pilot_coeff.h +/home/sh/Downloads/hackrf/codec2/src/pilot_coeff.h +codec2_fft.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.h +hanning.h +/home/sh/Downloads/hackrf/codec2/src/hanning.h +os.h +/home/sh/Downloads/hackrf/codec2/src/os.h +machdep.h +/home/sh/Downloads/hackrf/codec2/src/machdep.h +debug_alloc.h +/home/sh/Downloads/hackrf/codec2/src/debug_alloc.h + +/home/sh/Downloads/hackrf/codec2/src/fdmdv_internal.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +codec2_fdmdv.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h +codec2_fft.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.h + +/home/sh/Downloads/hackrf/codec2/src/filter.c +stdlib.h +- +string.h +- +math.h +- +complex.h +- +filter.h +/home/sh/Downloads/hackrf/codec2/src/filter.h +filter_coef.h +/home/sh/Downloads/hackrf/codec2/src/filter_coef.h +debug_alloc.h +/home/sh/Downloads/hackrf/codec2/src/debug_alloc.h + +/home/sh/Downloads/hackrf/codec2/src/filter.h +complex.h +- + +/home/sh/Downloads/hackrf/codec2/src/filter_coef.h + +/home/sh/Downloads/hackrf/codec2/src/fmfsk.c +assert.h +- +stdint.h +- +stdlib.h +- +math.h +- +string.h +- +stdio.h +- +fmfsk.h +/home/sh/Downloads/hackrf/codec2/src/fmfsk.h +modem_probe.h +/home/sh/Downloads/hackrf/codec2/src/modem_probe.h +comp_prim.h +/home/sh/Downloads/hackrf/codec2/src/comp_prim.h + +/home/sh/Downloads/hackrf/codec2/src/fmfsk.h +stdint.h +- +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +modem_stats.h +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h + +/home/sh/Downloads/hackrf/codec2/src/freedv_1600.c +assert.h +- +stdlib.h +- +stdbool.h +- +stdint.h +- +stdio.h +- +string.h +- +math.h +- +codec2_fdmdv.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h +golay23.h +/home/sh/Downloads/hackrf/codec2/src/golay23.h +codec2.h +/home/sh/Downloads/hackrf/codec2/src/codec2.h +varicode.h +/home/sh/Downloads/hackrf/codec2/src/varicode.h +freedv_api.h +/home/sh/Downloads/hackrf/codec2/src/freedv_api.h +freedv_api_internal.h +/home/sh/Downloads/hackrf/codec2/src/freedv_api_internal.h +comp_prim.h +/home/sh/Downloads/hackrf/codec2/src/comp_prim.h +debug_alloc.h +/home/sh/Downloads/hackrf/codec2/src/debug_alloc.h +fdmdv_internal.h +/home/sh/Downloads/hackrf/codec2/src/fdmdv_internal.h + +/home/sh/Downloads/hackrf/codec2/src/freedv_2020.c +assert.h +- +stdlib.h +- +stdbool.h +- +stdint.h +- +stdio.h +- +string.h +- +math.h +- +fsk.h +/home/sh/Downloads/hackrf/codec2/src/fsk.h +fmfsk.h +/home/sh/Downloads/hackrf/codec2/src/fmfsk.h +codec2.h +/home/sh/Downloads/hackrf/codec2/src/codec2.h +codec2_fdmdv.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h +varicode.h +/home/sh/Downloads/hackrf/codec2/src/varicode.h +freedv_api.h +/home/sh/Downloads/hackrf/codec2/src/freedv_api.h +freedv_api_internal.h +/home/sh/Downloads/hackrf/codec2/src/freedv_api_internal.h +comp_prim.h +/home/sh/Downloads/hackrf/codec2/src/comp_prim.h +codec2_ofdm.h +/home/sh/Downloads/hackrf/codec2/src/codec2_ofdm.h +ofdm_internal.h +/home/sh/Downloads/hackrf/codec2/src/ofdm_internal.h +mpdecode_core.h +/home/sh/Downloads/hackrf/codec2/src/mpdecode_core.h +gp_interleaver.h +/home/sh/Downloads/hackrf/codec2/src/gp_interleaver.h +ldpc_codes.h +/home/sh/Downloads/hackrf/codec2/src/ldpc_codes.h +interldpc.h +/home/sh/Downloads/hackrf/codec2/src/interldpc.h +debug_alloc.h +/home/sh/Downloads/hackrf/codec2/src/debug_alloc.h + +/home/sh/Downloads/hackrf/codec2/src/freedv_700.c +assert.h +- +stdlib.h +- +stdbool.h +- +stdint.h +- +stdio.h +- +string.h +- +math.h +- +fsk.h +/home/sh/Downloads/hackrf/codec2/src/fsk.h +fmfsk.h +/home/sh/Downloads/hackrf/codec2/src/fmfsk.h +codec2.h +/home/sh/Downloads/hackrf/codec2/src/codec2.h +codec2_fdmdv.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h +varicode.h +/home/sh/Downloads/hackrf/codec2/src/varicode.h +freedv_api.h +/home/sh/Downloads/hackrf/codec2/src/freedv_api.h +freedv_api_internal.h +/home/sh/Downloads/hackrf/codec2/src/freedv_api_internal.h +comp_prim.h +/home/sh/Downloads/hackrf/codec2/src/comp_prim.h +codec2_ofdm.h +/home/sh/Downloads/hackrf/codec2/src/codec2_ofdm.h +ofdm_internal.h +/home/sh/Downloads/hackrf/codec2/src/ofdm_internal.h +mpdecode_core.h +/home/sh/Downloads/hackrf/codec2/src/mpdecode_core.h +gp_interleaver.h +/home/sh/Downloads/hackrf/codec2/src/gp_interleaver.h +ldpc_codes.h +/home/sh/Downloads/hackrf/codec2/src/ldpc_codes.h +interldpc.h +/home/sh/Downloads/hackrf/codec2/src/interldpc.h +debug_alloc.h +/home/sh/Downloads/hackrf/codec2/src/debug_alloc.h +filter.h +/home/sh/Downloads/hackrf/codec2/src/filter.h + +/home/sh/Downloads/hackrf/codec2/src/freedv_api.c +assert.h +- +stdlib.h +- +stdbool.h +- +stdint.h +- +stdio.h +- +string.h +- +math.h +- +fsk.h +/home/sh/Downloads/hackrf/codec2/src/fsk.h +fmfsk.h +/home/sh/Downloads/hackrf/codec2/src/fmfsk.h +codec2.h +/home/sh/Downloads/hackrf/codec2/src/codec2.h +codec2_fdmdv.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h +fdmdv_internal.h +/home/sh/Downloads/hackrf/codec2/src/fdmdv_internal.h +varicode.h +/home/sh/Downloads/hackrf/codec2/src/varicode.h +freedv_api.h +/home/sh/Downloads/hackrf/codec2/src/freedv_api.h +freedv_api_internal.h +/home/sh/Downloads/hackrf/codec2/src/freedv_api_internal.h +freedv_vhf_framing.h +/home/sh/Downloads/hackrf/codec2/src/freedv_vhf_framing.h +comp_prim.h +/home/sh/Downloads/hackrf/codec2/src/comp_prim.h +codec2_ofdm.h +/home/sh/Downloads/hackrf/codec2/src/codec2_ofdm.h +ofdm_internal.h +/home/sh/Downloads/hackrf/codec2/src/ofdm_internal.h +mpdecode_core.h +/home/sh/Downloads/hackrf/codec2/src/mpdecode_core.h +gp_interleaver.h +/home/sh/Downloads/hackrf/codec2/src/gp_interleaver.h +interldpc.h +/home/sh/Downloads/hackrf/codec2/src/interldpc.h +debug_alloc.h +/home/sh/Downloads/hackrf/codec2/src/debug_alloc.h + +/home/sh/Downloads/hackrf/codec2/src/freedv_api.h +sys/types.h +- +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/freedv_api_internal.h +varicode.h +/home/sh/Downloads/hackrf/codec2/src/varicode.h +fsk.h +/home/sh/Downloads/hackrf/codec2/src/fsk.h +fmfsk.h +/home/sh/Downloads/hackrf/codec2/src/fmfsk.h +codec2_fdmdv.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h +codec2_cohpsk.h +/home/sh/Downloads/hackrf/codec2/src/codec2_cohpsk.h +lpcnet_freedv.h +/home/sh/Downloads/hackrf/codec2/src/lpcnet_freedv.h +freedv_api.h +/home/sh/Downloads/hackrf/codec2/src/freedv_api.h + +/home/sh/Downloads/hackrf/codec2/src/freedv_data_channel.c +freedv_data_channel.h +/home/sh/Downloads/hackrf/codec2/src/freedv_data_channel.h +stdlib.h +- +string.h +- + +/home/sh/Downloads/hackrf/codec2/src/freedv_data_channel.h +stdlib.h +- + +/home/sh/Downloads/hackrf/codec2/src/freedv_fsk.c +assert.h +- +stdlib.h +- +stdbool.h +- +stdint.h +- +stdio.h +- +string.h +- +math.h +- +fsk.h +/home/sh/Downloads/hackrf/codec2/src/fsk.h +fmfsk.h +/home/sh/Downloads/hackrf/codec2/src/fmfsk.h +codec2.h +/home/sh/Downloads/hackrf/codec2/src/codec2.h +freedv_vhf_framing.h +/home/sh/Downloads/hackrf/codec2/src/freedv_vhf_framing.h +varicode.h +/home/sh/Downloads/hackrf/codec2/src/varicode.h +freedv_api.h +/home/sh/Downloads/hackrf/codec2/src/freedv_api.h +freedv_api_internal.h +/home/sh/Downloads/hackrf/codec2/src/freedv_api_internal.h +comp_prim.h +/home/sh/Downloads/hackrf/codec2/src/comp_prim.h +debug_alloc.h +/home/sh/Downloads/hackrf/codec2/src/debug_alloc.h +ldpc_codes.h +/home/sh/Downloads/hackrf/codec2/src/ldpc_codes.h +interldpc.h +/home/sh/Downloads/hackrf/codec2/src/interldpc.h + +/home/sh/Downloads/hackrf/codec2/src/freedv_vhf_framing.c +stdint.h +- +stdlib.h +- +stdio.h +- +string.h +- +assert.h +- +freedv_vhf_framing.h +/home/sh/Downloads/hackrf/codec2/src/freedv_vhf_framing.h +freedv_api_internal.h +/home/sh/Downloads/hackrf/codec2/src/freedv_api_internal.h + +/home/sh/Downloads/hackrf/codec2/src/freedv_vhf_framing.h +freedv_data_channel.h +/home/sh/Downloads/hackrf/codec2/src/freedv_data_channel.h + +/home/sh/Downloads/hackrf/codec2/src/fsk.c +assert.h +- +stdlib.h +- +stdint.h +- +math.h +- +fsk.h +/home/sh/Downloads/hackrf/codec2/src/fsk.h +comp_prim.h +/home/sh/Downloads/hackrf/codec2/src/comp_prim.h +kiss_fftr.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h +modem_probe.h +/home/sh/Downloads/hackrf/codec2/src/modem_probe.h + +/home/sh/Downloads/hackrf/codec2/src/fsk.h +stdint.h +- +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +kiss_fftr.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h +modem_stats.h +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h + +/home/sh/Downloads/hackrf/codec2/src/golay23.h + +/home/sh/Downloads/hackrf/codec2/src/gp_interleaver.c +assert.h +- +stdio.h +- +gp_interleaver.h +/home/sh/Downloads/hackrf/codec2/src/gp_interleaver.h + +/home/sh/Downloads/hackrf/codec2/src/gp_interleaver.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/hanning.h + +/home/sh/Downloads/hackrf/codec2/src/interldpc.c +assert.h +- +stdio.h +- +stdlib.h +- +stdint.h +- +string.h +- +math.h +- +interldpc.h +/home/sh/Downloads/hackrf/codec2/src/interldpc.h +ofdm_internal.h +/home/sh/Downloads/hackrf/codec2/src/ofdm_internal.h +mpdecode_core.h +/home/sh/Downloads/hackrf/codec2/src/mpdecode_core.h +gp_interleaver.h +/home/sh/Downloads/hackrf/codec2/src/gp_interleaver.h + +/home/sh/Downloads/hackrf/codec2/src/interldpc.h +stdint.h +- +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +mpdecode_core.h +/home/sh/Downloads/hackrf/codec2/src/mpdecode_core.h +ofdm_internal.h +/home/sh/Downloads/hackrf/codec2/src/ofdm_internal.h + +/home/sh/Downloads/hackrf/codec2/src/interp.c +assert.h +- +math.h +- +string.h +- +stdio.h +- +defines.h +/home/sh/Downloads/hackrf/codec2/src/defines.h +interp.h +/home/sh/Downloads/hackrf/codec2/src/interp.h +lsp.h +/home/sh/Downloads/hackrf/codec2/src/lsp.h +quantise.h +/home/sh/Downloads/hackrf/codec2/src/quantise.h + +/home/sh/Downloads/hackrf/codec2/src/interp.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h +stdlib.h +- +stdio.h +- +math.h +- +string.h +- +xmmintrin.h +- +sys/types.h +- + +/home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/src/ldpc_codes.c +stdio.h +- +string.h +- +assert.h +/home/sh/Downloads/hackrf/codec2/src/assert.h +ldpc_codes.h +/home/sh/Downloads/hackrf/codec2/src/ldpc_codes.h +interldpc.h +/home/sh/Downloads/hackrf/codec2/src/interldpc.h +H2064_516_sparse.h +/home/sh/Downloads/hackrf/codec2/src/H2064_516_sparse.h +HRA_112_112.h +/home/sh/Downloads/hackrf/codec2/src/HRA_112_112.h +HRAb_396_504.h +/home/sh/Downloads/hackrf/codec2/src/HRAb_396_504.h +H_256_768_22.h +/home/sh/Downloads/hackrf/codec2/src/H_256_768_22.h +H_256_512_4.h +/home/sh/Downloads/hackrf/codec2/src/H_256_512_4.h +HRAa_1536_512.h +/home/sh/Downloads/hackrf/codec2/src/HRAa_1536_512.h +H_128_256_5.h +/home/sh/Downloads/hackrf/codec2/src/H_128_256_5.h + +/home/sh/Downloads/hackrf/codec2/src/ldpc_codes.h +mpdecode_core.h +/home/sh/Downloads/hackrf/codec2/src/mpdecode_core.h + +/home/sh/Downloads/hackrf/codec2/src/linreg.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/lpc.c +assert.h +- +math.h +- +defines.h +/home/sh/Downloads/hackrf/codec2/src/defines.h +lpc.h +/home/sh/Downloads/hackrf/codec2/src/lpc.h + +/home/sh/Downloads/hackrf/codec2/src/lpc.h + +/home/sh/Downloads/hackrf/codec2/src/lpcnet_freq.c +assert.h +- +math.h +- +stdio.h +- +stdlib.h +- +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +lpcnet_freq.h +/home/sh/Downloads/hackrf/codec2/src/lpcnet_freq.h + +/home/sh/Downloads/hackrf/codec2/src/lpcnet_freq.h + +/home/sh/Downloads/hackrf/codec2/src/lsp.c +defines.h +/home/sh/Downloads/hackrf/codec2/src/defines.h +lsp.h +/home/sh/Downloads/hackrf/codec2/src/lsp.h +math.h +- +stdio.h +- +stdlib.h +- + +/home/sh/Downloads/hackrf/codec2/src/lsp.h + +/home/sh/Downloads/hackrf/codec2/src/machdep.h + +/home/sh/Downloads/hackrf/codec2/src/mbest.c +assert.h +- +math.h +- +stdio.h +- +stdlib.h +- +string.h +- +mbest.h +/home/sh/Downloads/hackrf/codec2/src/mbest.h + +/home/sh/Downloads/hackrf/codec2/src/mbest.h + +/home/sh/Downloads/hackrf/codec2/src/modem_probe.h +stdint.h +- +stdlib.h +- +complex.h +- +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/modem_stats.c +assert.h +- +math.h +- +modem_stats.h +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h +codec2_fdmdv.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h + +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/src/mpdecode_core.c +math.h +- +stdlib.h +- +stdint.h +- +stdio.h +- +assert.h +- +mpdecode_core.h +/home/sh/Downloads/hackrf/codec2/src/mpdecode_core.h +phi0.h +/home/sh/Downloads/hackrf/codec2/src/phi0.h +debug_alloc.h +/home/sh/Downloads/hackrf/codec2/src/debug_alloc.h +machdep.h +/home/sh/Downloads/hackrf/codec2/src/machdep.h + +/home/sh/Downloads/hackrf/codec2/src/mpdecode_core.h +stdint.h +- +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/newamp1.c +assert.h +- +stdio.h +- +stdlib.h +- +string.h +- +math.h +- +defines.h +/home/sh/Downloads/hackrf/codec2/src/defines.h +phase.h +/home/sh/Downloads/hackrf/codec2/src/phase.h +quantise.h +/home/sh/Downloads/hackrf/codec2/src/quantise.h +mbest.h +/home/sh/Downloads/hackrf/codec2/src/mbest.h +newamp1.h +/home/sh/Downloads/hackrf/codec2/src/newamp1.h + +/home/sh/Downloads/hackrf/codec2/src/newamp1.h +codec2_fft.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/newamp2.c +assert.h +- +stdio.h +- +stdlib.h +- +string.h +- +math.h +- +defines.h +/home/sh/Downloads/hackrf/codec2/src/defines.h +phase.h +/home/sh/Downloads/hackrf/codec2/src/phase.h +quantise.h +/home/sh/Downloads/hackrf/codec2/src/quantise.h +mbest.h +/home/sh/Downloads/hackrf/codec2/src/mbest.h +newamp1.h +/home/sh/Downloads/hackrf/codec2/src/newamp1.h +newamp2.h +/home/sh/Downloads/hackrf/codec2/src/newamp2.h + +/home/sh/Downloads/hackrf/codec2/src/newamp2.h +codec2_fft.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/nlp.c +defines.h +/home/sh/Downloads/hackrf/codec2/src/defines.h +nlp.h +/home/sh/Downloads/hackrf/codec2/src/nlp.h +dump.h +/home/sh/Downloads/hackrf/codec2/src/dump.h +codec2_fft.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.h +machdep.h +/home/sh/Downloads/hackrf/codec2/src/machdep.h +os.h +/home/sh/Downloads/hackrf/codec2/src/os.h +assert.h +- +math.h +- +stdlib.h +- + +/home/sh/Downloads/hackrf/codec2/src/nlp.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/ofdm.c +stdio.h +- +stdlib.h +- +stdbool.h +- +stdint.h +- +string.h +- +math.h +- +assert.h +- +complex.h +- +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +ofdm_internal.h +/home/sh/Downloads/hackrf/codec2/src/ofdm_internal.h +codec2_ofdm.h +/home/sh/Downloads/hackrf/codec2/src/codec2_ofdm.h +filter.h +/home/sh/Downloads/hackrf/codec2/src/filter.h +wval.h +/home/sh/Downloads/hackrf/codec2/src/wval.h +debug_alloc.h +/home/sh/Downloads/hackrf/codec2/src/debug_alloc.h +machdep.h +/home/sh/Downloads/hackrf/codec2/src/machdep.h + +/home/sh/Downloads/hackrf/codec2/src/ofdm_internal.h +complex.h +- +stdbool.h +- +stdint.h +- +codec2_ofdm.h +/home/sh/Downloads/hackrf/codec2/src/codec2_ofdm.h +filter.h +/home/sh/Downloads/hackrf/codec2/src/filter.h + +/home/sh/Downloads/hackrf/codec2/src/ofdm_mode.c +assert.h +- +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +ofdm_internal.h +/home/sh/Downloads/hackrf/codec2/src/ofdm_internal.h +ofdm_mode.h +/home/sh/Downloads/hackrf/codec2/src/ofdm_mode.h + +/home/sh/Downloads/hackrf/codec2/src/ofdm_mode.h + +/home/sh/Downloads/hackrf/codec2/src/os.h + +/home/sh/Downloads/hackrf/codec2/src/pack.c +defines.h +/home/sh/Downloads/hackrf/codec2/src/defines.h +quantise.h +/home/sh/Downloads/hackrf/codec2/src/quantise.h +stdio.h +- + +/home/sh/Downloads/hackrf/codec2/src/phase.c +defines.h +/home/sh/Downloads/hackrf/codec2/src/defines.h +phase.h +/home/sh/Downloads/hackrf/codec2/src/phase.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +comp_prim.h +/home/sh/Downloads/hackrf/codec2/src/comp_prim.h +sine.h +/home/sh/Downloads/hackrf/codec2/src/sine.h +assert.h +- +ctype.h +- +math.h +- +string.h +- +stdlib.h +- + +/home/sh/Downloads/hackrf/codec2/src/phase.h +codec2_fft.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/phi0.h + +/home/sh/Downloads/hackrf/codec2/src/pilot_coeff.h + +/home/sh/Downloads/hackrf/codec2/src/pilots_coh.h + +/home/sh/Downloads/hackrf/codec2/src/postfilter.c +assert.h +- +stdlib.h +- +stdio.h +- +math.h +- +defines.h +/home/sh/Downloads/hackrf/codec2/src/defines.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +dump.h +/home/sh/Downloads/hackrf/codec2/src/dump.h +sine.h +/home/sh/Downloads/hackrf/codec2/src/sine.h +postfilter.h +/home/sh/Downloads/hackrf/codec2/src/postfilter.h + +/home/sh/Downloads/hackrf/codec2/src/postfilter.h + +/home/sh/Downloads/hackrf/codec2/src/quantise.c +assert.h +- +ctype.h +- +stdio.h +- +stdlib.h +- +string.h +- +math.h +- +defines.h +/home/sh/Downloads/hackrf/codec2/src/defines.h +dump.h +/home/sh/Downloads/hackrf/codec2/src/dump.h +quantise.h +/home/sh/Downloads/hackrf/codec2/src/quantise.h +lpc.h +/home/sh/Downloads/hackrf/codec2/src/lpc.h +lsp.h +/home/sh/Downloads/hackrf/codec2/src/lsp.h +codec2_fft.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.h +phase.h +/home/sh/Downloads/hackrf/codec2/src/phase.h +mbest.h +/home/sh/Downloads/hackrf/codec2/src/mbest.h +machdep.h +/home/sh/Downloads/hackrf/codec2/src/machdep.h + +/home/sh/Downloads/hackrf/codec2/src/quantise.h +codec2_fft.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/rn.h + +/home/sh/Downloads/hackrf/codec2/src/rn_coh.h + +/home/sh/Downloads/hackrf/codec2/src/rxdec_coeff.h + +/home/sh/Downloads/hackrf/codec2/src/sine.c +stdlib.h +- +stdio.h +- +math.h +- +defines.h +/home/sh/Downloads/hackrf/codec2/src/defines.h +sine.h +/home/sh/Downloads/hackrf/codec2/src/sine.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/src/sine.h +defines.h +/home/sh/Downloads/hackrf/codec2/src/defines.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +codec2_fft.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.h + +/home/sh/Downloads/hackrf/codec2/src/test_bits.h + +/home/sh/Downloads/hackrf/codec2/src/test_bits_coh.h + +/home/sh/Downloads/hackrf/codec2/src/varicode.c +assert.h +- +ctype.h +- +stdio.h +- +stdlib.h +- +string.h +- +varicode.h +/home/sh/Downloads/hackrf/codec2/src/varicode.h +varicode_table.h +/home/sh/Downloads/hackrf/codec2/src/varicode_table.h +debug_alloc.h +/home/sh/Downloads/hackrf/codec2/src/debug_alloc.h + +/home/sh/Downloads/hackrf/codec2/src/varicode.h + +/home/sh/Downloads/hackrf/codec2/src/varicode_table.h + +/home/sh/Downloads/hackrf/codec2/src/wval.h +complex.h +- + +codec2/version.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/DependInfo.cmake new file mode 100644 index 0000000..2bf1d3d --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/DependInfo.cmake @@ -0,0 +1,90 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/src/HRA_112_112.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/HRA_112_112.c.o" + "/home/sh/Downloads/hackrf/codec2/src/HRAa_1536_512.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/HRAa_1536_512.c.o" + "/home/sh/Downloads/hackrf/codec2/src/HRAb_396_504.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/HRAb_396_504.c.o" + "/home/sh/Downloads/hackrf/codec2/src/H_128_256_5.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/H_128_256_5.c.o" + "/home/sh/Downloads/hackrf/codec2/src/H_256_512_4.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/H_256_512_4.c.o" + "/home/sh/Downloads/hackrf/codec2/src/H_256_768_22.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/H_256_768_22.c.o" + "/home/sh/Downloads/hackrf/codec2/build_linux/src/codebook.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/codebook.c.o" + "/home/sh/Downloads/hackrf/codec2/build_linux/src/codebookd.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/codebookd.c.o" + "/home/sh/Downloads/hackrf/codec2/build_linux/src/codebookge.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/codebookge.c.o" + "/home/sh/Downloads/hackrf/codec2/build_linux/src/codebookjvm.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/codebookjvm.c.o" + "/home/sh/Downloads/hackrf/codec2/build_linux/src/codebooknewamp1.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/codebooknewamp1.c.o" + "/home/sh/Downloads/hackrf/codec2/build_linux/src/codebooknewamp1_energy.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/codebooknewamp1_energy.c.o" + "/home/sh/Downloads/hackrf/codec2/build_linux/src/codebooknewamp2.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/codebooknewamp2.c.o" + "/home/sh/Downloads/hackrf/codec2/build_linux/src/codebooknewamp2_energy.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/codebooknewamp2_energy.c.o" + "/home/sh/Downloads/hackrf/codec2/src/codec2.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/codec2.c.o" + "/home/sh/Downloads/hackrf/codec2/src/codec2_fft.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/codec2_fft.c.o" + "/home/sh/Downloads/hackrf/codec2/src/codec2_fifo.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/codec2_fifo.c.o" + "/home/sh/Downloads/hackrf/codec2/src/cohpsk.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/cohpsk.c.o" + "/home/sh/Downloads/hackrf/codec2/src/dump.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/dump.c.o" + "/home/sh/Downloads/hackrf/codec2/src/fdmdv.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/fdmdv.c.o" + "/home/sh/Downloads/hackrf/codec2/src/filter.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/filter.c.o" + "/home/sh/Downloads/hackrf/codec2/src/fm.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/fm.c.o" + "/home/sh/Downloads/hackrf/codec2/src/fmfsk.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/fmfsk.c.o" + "/home/sh/Downloads/hackrf/codec2/src/freedv_1600.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/freedv_1600.c.o" + "/home/sh/Downloads/hackrf/codec2/src/freedv_2020.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/freedv_2020.c.o" + "/home/sh/Downloads/hackrf/codec2/src/freedv_700.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/freedv_700.c.o" + "/home/sh/Downloads/hackrf/codec2/src/freedv_api.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/freedv_api.c.o" + "/home/sh/Downloads/hackrf/codec2/src/freedv_data_channel.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/freedv_data_channel.c.o" + "/home/sh/Downloads/hackrf/codec2/src/freedv_fsk.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/freedv_fsk.c.o" + "/home/sh/Downloads/hackrf/codec2/src/freedv_vhf_framing.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/freedv_vhf_framing.c.o" + "/home/sh/Downloads/hackrf/codec2/src/fsk.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/fsk.c.o" + "/home/sh/Downloads/hackrf/codec2/src/golay23.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/golay23.c.o" + "/home/sh/Downloads/hackrf/codec2/src/gp_interleaver.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/gp_interleaver.c.o" + "/home/sh/Downloads/hackrf/codec2/src/interldpc.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/interldpc.c.o" + "/home/sh/Downloads/hackrf/codec2/src/interp.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/interp.c.o" + "/home/sh/Downloads/hackrf/codec2/src/kiss_fft.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/kiss_fft.c.o" + "/home/sh/Downloads/hackrf/codec2/src/kiss_fftr.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/kiss_fftr.c.o" + "/home/sh/Downloads/hackrf/codec2/src/ldpc_codes.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/ldpc_codes.c.o" + "/home/sh/Downloads/hackrf/codec2/src/linreg.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/linreg.c.o" + "/home/sh/Downloads/hackrf/codec2/src/lpc.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/lpc.c.o" + "/home/sh/Downloads/hackrf/codec2/src/lpcnet_freq.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/lpcnet_freq.c.o" + "/home/sh/Downloads/hackrf/codec2/src/lsp.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/lsp.c.o" + "/home/sh/Downloads/hackrf/codec2/src/mbest.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/mbest.c.o" + "/home/sh/Downloads/hackrf/codec2/src/modem_stats.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/modem_stats.c.o" + "/home/sh/Downloads/hackrf/codec2/src/mpdecode_core.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/mpdecode_core.c.o" + "/home/sh/Downloads/hackrf/codec2/src/newamp1.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/newamp1.c.o" + "/home/sh/Downloads/hackrf/codec2/src/newamp2.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/newamp2.c.o" + "/home/sh/Downloads/hackrf/codec2/src/nlp.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/nlp.c.o" + "/home/sh/Downloads/hackrf/codec2/src/ofdm.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/ofdm.c.o" + "/home/sh/Downloads/hackrf/codec2/src/ofdm_mode.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/ofdm_mode.c.o" + "/home/sh/Downloads/hackrf/codec2/src/pack.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/pack.c.o" + "/home/sh/Downloads/hackrf/codec2/src/phase.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/phase.c.o" + "/home/sh/Downloads/hackrf/codec2/src/phi0.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/phi0.c.o" + "/home/sh/Downloads/hackrf/codec2/src/postfilter.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/postfilter.c.o" + "/home/sh/Downloads/hackrf/codec2/src/quantise.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/quantise.c.o" + "/home/sh/Downloads/hackrf/codec2/src/sine.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/sine.c.o" + "/home/sh/Downloads/hackrf/codec2/src/varicode.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/varicode.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "GIT_HASH=\"df2ed16c\"" + "_GNU_SOURCE=1" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../src" + ) + +# Pairs of files generated by the same build rule. +set(CMAKE_MULTIPLE_OUTPUT_PAIRS + "/home/sh/Downloads/hackrf/codec2/build_linux/src/libcodec2.so" "/home/sh/Downloads/hackrf/codec2/build_linux/src/libcodec2.so.0.9" + ) + + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/HRA_112_112.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/HRA_112_112.c.o new file mode 100644 index 0000000..c08bbaa Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/HRA_112_112.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/HRAa_1536_512.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/HRAa_1536_512.c.o new file mode 100644 index 0000000..c5a51ef Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/HRAa_1536_512.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/HRAb_396_504.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/HRAb_396_504.c.o new file mode 100644 index 0000000..8f21eb6 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/HRAb_396_504.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/H_128_256_5.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/H_128_256_5.c.o new file mode 100644 index 0000000..ce89339 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/H_128_256_5.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/H_256_512_4.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/H_256_512_4.c.o new file mode 100644 index 0000000..1e5235c Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/H_256_512_4.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/H_256_768_22.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/H_256_768_22.c.o new file mode 100644 index 0000000..d352ee0 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/H_256_768_22.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/build.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/build.make new file mode 100644 index 0000000..cf791e6 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/build.make @@ -0,0 +1,1010 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include src/CMakeFiles/codec2.dir/depend.make + +# Include the progress variables for this target. +include src/CMakeFiles/codec2.dir/progress.make + +# Include the compile flags for this target's objects. +include src/CMakeFiles/codec2.dir/flags.make + +src/codebook.c: src/generate_codebook +src/codebook.c: ../src/codebook/lsp1.txt +src/codebook.c: ../src/codebook/lsp2.txt +src/codebook.c: ../src/codebook/lsp3.txt +src/codebook.c: ../src/codebook/lsp4.txt +src/codebook.c: ../src/codebook/lsp5.txt +src/codebook.c: ../src/codebook/lsp6.txt +src/codebook.c: ../src/codebook/lsp7.txt +src/codebook.c: ../src/codebook/lsp8.txt +src/codebook.c: ../src/codebook/lsp9.txt +src/codebook.c: ../src/codebook/lsp10.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --blue --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Generating codebook.c" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && ./generate_codebook lsp_cb /home/sh/Downloads/hackrf/codec2/src/codebook/lsp1.txt /home/sh/Downloads/hackrf/codec2/src/codebook/lsp2.txt /home/sh/Downloads/hackrf/codec2/src/codebook/lsp3.txt /home/sh/Downloads/hackrf/codec2/src/codebook/lsp4.txt /home/sh/Downloads/hackrf/codec2/src/codebook/lsp5.txt /home/sh/Downloads/hackrf/codec2/src/codebook/lsp6.txt /home/sh/Downloads/hackrf/codec2/src/codebook/lsp7.txt /home/sh/Downloads/hackrf/codec2/src/codebook/lsp8.txt /home/sh/Downloads/hackrf/codec2/src/codebook/lsp9.txt /home/sh/Downloads/hackrf/codec2/src/codebook/lsp10.txt > /home/sh/Downloads/hackrf/codec2/build_linux/src/codebook.c + +src/codebookd.c: src/generate_codebook +src/codebookd.c: ../src/codebook/dlsp1.txt +src/codebookd.c: ../src/codebook/dlsp2.txt +src/codebookd.c: ../src/codebook/dlsp3.txt +src/codebookd.c: ../src/codebook/dlsp4.txt +src/codebookd.c: ../src/codebook/dlsp5.txt +src/codebookd.c: ../src/codebook/dlsp6.txt +src/codebookd.c: ../src/codebook/dlsp7.txt +src/codebookd.c: ../src/codebook/dlsp8.txt +src/codebookd.c: ../src/codebook/dlsp9.txt +src/codebookd.c: ../src/codebook/dlsp10.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --blue --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Generating codebookd.c" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && ./generate_codebook lsp_cbd /home/sh/Downloads/hackrf/codec2/src/codebook/dlsp1.txt /home/sh/Downloads/hackrf/codec2/src/codebook/dlsp2.txt /home/sh/Downloads/hackrf/codec2/src/codebook/dlsp3.txt /home/sh/Downloads/hackrf/codec2/src/codebook/dlsp4.txt /home/sh/Downloads/hackrf/codec2/src/codebook/dlsp5.txt /home/sh/Downloads/hackrf/codec2/src/codebook/dlsp6.txt /home/sh/Downloads/hackrf/codec2/src/codebook/dlsp7.txt /home/sh/Downloads/hackrf/codec2/src/codebook/dlsp8.txt /home/sh/Downloads/hackrf/codec2/src/codebook/dlsp9.txt /home/sh/Downloads/hackrf/codec2/src/codebook/dlsp10.txt > /home/sh/Downloads/hackrf/codec2/build_linux/src/codebookd.c + +src/codebookjvm.c: src/generate_codebook +src/codebookjvm.c: ../src/codebook/lspjvm1.txt +src/codebookjvm.c: ../src/codebook/lspjvm2.txt +src/codebookjvm.c: ../src/codebook/lspjvm3.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --blue --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_3) "Generating codebookjvm.c" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && ./generate_codebook lsp_cbjvm /home/sh/Downloads/hackrf/codec2/src/codebook/lspjvm1.txt /home/sh/Downloads/hackrf/codec2/src/codebook/lspjvm2.txt /home/sh/Downloads/hackrf/codec2/src/codebook/lspjvm3.txt > /home/sh/Downloads/hackrf/codec2/build_linux/src/codebookjvm.c + +src/codebookge.c: src/generate_codebook +src/codebookge.c: ../src/codebook/gecb.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --blue --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_4) "Generating codebookge.c" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && ./generate_codebook ge_cb /home/sh/Downloads/hackrf/codec2/src/codebook/gecb.txt > /home/sh/Downloads/hackrf/codec2/build_linux/src/codebookge.c + +src/codebooknewamp1.c: src/generate_codebook +src/codebooknewamp1.c: ../src/codebook/train_120_1.txt +src/codebooknewamp1.c: ../src/codebook/train_120_2.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --blue --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_5) "Generating codebooknewamp1.c" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && ./generate_codebook newamp1vq_cb /home/sh/Downloads/hackrf/codec2/src/codebook/train_120_1.txt /home/sh/Downloads/hackrf/codec2/src/codebook/train_120_2.txt > /home/sh/Downloads/hackrf/codec2/build_linux/src/codebooknewamp1.c + +src/codebooknewamp1_energy.c: src/generate_codebook +src/codebooknewamp1_energy.c: ../src/codebook/newamp1_energy_q.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --blue --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_6) "Generating codebooknewamp1_energy.c" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && ./generate_codebook newamp1_energy_cb /home/sh/Downloads/hackrf/codec2/src/codebook/newamp1_energy_q.txt > /home/sh/Downloads/hackrf/codec2/build_linux/src/codebooknewamp1_energy.c + +src/codebooknewamp2.c: src/generate_codebook +src/codebooknewamp2.c: ../src/codebook/codes_450.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --blue --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_7) "Generating codebooknewamp2.c" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && ./generate_codebook newamp2vq_cb /home/sh/Downloads/hackrf/codec2/src/codebook/codes_450.txt > /home/sh/Downloads/hackrf/codec2/build_linux/src/codebooknewamp2.c + +src/codebooknewamp2_energy.c: src/generate_codebook +src/codebooknewamp2_energy.c: ../src/codebook/newamp2_energy_q.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --blue --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_8) "Generating codebooknewamp2_energy.c" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && ./generate_codebook newamp2_energy_cb /home/sh/Downloads/hackrf/codec2/src/codebook/newamp2_energy_q.txt > /home/sh/Downloads/hackrf/codec2/build_linux/src/codebooknewamp2_energy.c + +src/CMakeFiles/codec2.dir/dump.c.o: src/CMakeFiles/codec2.dir/flags.make +src/CMakeFiles/codec2.dir/dump.c.o: ../src/dump.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_9) "Building C object src/CMakeFiles/codec2.dir/dump.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/codec2.dir/dump.c.o -c /home/sh/Downloads/hackrf/codec2/src/dump.c + +src/CMakeFiles/codec2.dir/dump.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/codec2.dir/dump.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/dump.c > CMakeFiles/codec2.dir/dump.c.i + +src/CMakeFiles/codec2.dir/dump.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/codec2.dir/dump.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/dump.c -o CMakeFiles/codec2.dir/dump.c.s + +src/CMakeFiles/codec2.dir/lpc.c.o: src/CMakeFiles/codec2.dir/flags.make +src/CMakeFiles/codec2.dir/lpc.c.o: ../src/lpc.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_10) "Building C object src/CMakeFiles/codec2.dir/lpc.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/codec2.dir/lpc.c.o -c /home/sh/Downloads/hackrf/codec2/src/lpc.c + +src/CMakeFiles/codec2.dir/lpc.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/codec2.dir/lpc.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/lpc.c > CMakeFiles/codec2.dir/lpc.c.i + +src/CMakeFiles/codec2.dir/lpc.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/codec2.dir/lpc.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/lpc.c -o CMakeFiles/codec2.dir/lpc.c.s + +src/CMakeFiles/codec2.dir/nlp.c.o: src/CMakeFiles/codec2.dir/flags.make +src/CMakeFiles/codec2.dir/nlp.c.o: ../src/nlp.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_11) "Building C object src/CMakeFiles/codec2.dir/nlp.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/codec2.dir/nlp.c.o -c /home/sh/Downloads/hackrf/codec2/src/nlp.c + +src/CMakeFiles/codec2.dir/nlp.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/codec2.dir/nlp.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/nlp.c > CMakeFiles/codec2.dir/nlp.c.i + +src/CMakeFiles/codec2.dir/nlp.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/codec2.dir/nlp.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/nlp.c -o CMakeFiles/codec2.dir/nlp.c.s + +src/CMakeFiles/codec2.dir/postfilter.c.o: src/CMakeFiles/codec2.dir/flags.make +src/CMakeFiles/codec2.dir/postfilter.c.o: ../src/postfilter.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_12) "Building C object src/CMakeFiles/codec2.dir/postfilter.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/codec2.dir/postfilter.c.o -c /home/sh/Downloads/hackrf/codec2/src/postfilter.c + +src/CMakeFiles/codec2.dir/postfilter.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/codec2.dir/postfilter.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/postfilter.c > CMakeFiles/codec2.dir/postfilter.c.i + +src/CMakeFiles/codec2.dir/postfilter.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/codec2.dir/postfilter.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/postfilter.c -o CMakeFiles/codec2.dir/postfilter.c.s + +src/CMakeFiles/codec2.dir/sine.c.o: src/CMakeFiles/codec2.dir/flags.make +src/CMakeFiles/codec2.dir/sine.c.o: ../src/sine.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_13) "Building C object src/CMakeFiles/codec2.dir/sine.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/codec2.dir/sine.c.o -c /home/sh/Downloads/hackrf/codec2/src/sine.c + +src/CMakeFiles/codec2.dir/sine.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/codec2.dir/sine.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/sine.c > CMakeFiles/codec2.dir/sine.c.i + +src/CMakeFiles/codec2.dir/sine.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/codec2.dir/sine.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/sine.c -o CMakeFiles/codec2.dir/sine.c.s + +src/CMakeFiles/codec2.dir/codec2.c.o: src/CMakeFiles/codec2.dir/flags.make +src/CMakeFiles/codec2.dir/codec2.c.o: ../src/codec2.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_14) "Building C object src/CMakeFiles/codec2.dir/codec2.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/codec2.dir/codec2.c.o -c /home/sh/Downloads/hackrf/codec2/src/codec2.c + +src/CMakeFiles/codec2.dir/codec2.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/codec2.dir/codec2.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/codec2.c > CMakeFiles/codec2.dir/codec2.c.i + +src/CMakeFiles/codec2.dir/codec2.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/codec2.dir/codec2.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/codec2.c -o CMakeFiles/codec2.dir/codec2.c.s + +src/CMakeFiles/codec2.dir/codec2_fft.c.o: src/CMakeFiles/codec2.dir/flags.make +src/CMakeFiles/codec2.dir/codec2_fft.c.o: ../src/codec2_fft.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_15) "Building C object src/CMakeFiles/codec2.dir/codec2_fft.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/codec2.dir/codec2_fft.c.o -c /home/sh/Downloads/hackrf/codec2/src/codec2_fft.c + +src/CMakeFiles/codec2.dir/codec2_fft.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/codec2.dir/codec2_fft.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/codec2_fft.c > CMakeFiles/codec2.dir/codec2_fft.c.i + +src/CMakeFiles/codec2.dir/codec2_fft.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/codec2.dir/codec2_fft.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/codec2_fft.c -o CMakeFiles/codec2.dir/codec2_fft.c.s + +src/CMakeFiles/codec2.dir/cohpsk.c.o: src/CMakeFiles/codec2.dir/flags.make +src/CMakeFiles/codec2.dir/cohpsk.c.o: ../src/cohpsk.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_16) "Building C object src/CMakeFiles/codec2.dir/cohpsk.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/codec2.dir/cohpsk.c.o -c /home/sh/Downloads/hackrf/codec2/src/cohpsk.c + +src/CMakeFiles/codec2.dir/cohpsk.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/codec2.dir/cohpsk.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/cohpsk.c > CMakeFiles/codec2.dir/cohpsk.c.i + +src/CMakeFiles/codec2.dir/cohpsk.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/codec2.dir/cohpsk.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/cohpsk.c -o CMakeFiles/codec2.dir/cohpsk.c.s + +src/CMakeFiles/codec2.dir/codec2_fifo.c.o: src/CMakeFiles/codec2.dir/flags.make +src/CMakeFiles/codec2.dir/codec2_fifo.c.o: ../src/codec2_fifo.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_17) "Building C object src/CMakeFiles/codec2.dir/codec2_fifo.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/codec2.dir/codec2_fifo.c.o -c /home/sh/Downloads/hackrf/codec2/src/codec2_fifo.c + +src/CMakeFiles/codec2.dir/codec2_fifo.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/codec2.dir/codec2_fifo.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/codec2_fifo.c > CMakeFiles/codec2.dir/codec2_fifo.c.i + +src/CMakeFiles/codec2.dir/codec2_fifo.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/codec2.dir/codec2_fifo.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/codec2_fifo.c -o CMakeFiles/codec2.dir/codec2_fifo.c.s + +src/CMakeFiles/codec2.dir/fdmdv.c.o: src/CMakeFiles/codec2.dir/flags.make +src/CMakeFiles/codec2.dir/fdmdv.c.o: ../src/fdmdv.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_18) "Building C object src/CMakeFiles/codec2.dir/fdmdv.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/codec2.dir/fdmdv.c.o -c /home/sh/Downloads/hackrf/codec2/src/fdmdv.c + +src/CMakeFiles/codec2.dir/fdmdv.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/codec2.dir/fdmdv.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/fdmdv.c > CMakeFiles/codec2.dir/fdmdv.c.i + +src/CMakeFiles/codec2.dir/fdmdv.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/codec2.dir/fdmdv.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/fdmdv.c -o CMakeFiles/codec2.dir/fdmdv.c.s + +src/CMakeFiles/codec2.dir/fm.c.o: src/CMakeFiles/codec2.dir/flags.make +src/CMakeFiles/codec2.dir/fm.c.o: ../src/fm.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_19) "Building C object src/CMakeFiles/codec2.dir/fm.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/codec2.dir/fm.c.o -c /home/sh/Downloads/hackrf/codec2/src/fm.c + +src/CMakeFiles/codec2.dir/fm.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/codec2.dir/fm.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/fm.c > CMakeFiles/codec2.dir/fm.c.i + +src/CMakeFiles/codec2.dir/fm.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/codec2.dir/fm.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/fm.c -o CMakeFiles/codec2.dir/fm.c.s + +src/CMakeFiles/codec2.dir/fsk.c.o: src/CMakeFiles/codec2.dir/flags.make +src/CMakeFiles/codec2.dir/fsk.c.o: ../src/fsk.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_20) "Building C object src/CMakeFiles/codec2.dir/fsk.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/codec2.dir/fsk.c.o -c /home/sh/Downloads/hackrf/codec2/src/fsk.c + +src/CMakeFiles/codec2.dir/fsk.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/codec2.dir/fsk.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/fsk.c > CMakeFiles/codec2.dir/fsk.c.i + +src/CMakeFiles/codec2.dir/fsk.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/codec2.dir/fsk.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/fsk.c -o CMakeFiles/codec2.dir/fsk.c.s + +src/CMakeFiles/codec2.dir/fmfsk.c.o: src/CMakeFiles/codec2.dir/flags.make +src/CMakeFiles/codec2.dir/fmfsk.c.o: ../src/fmfsk.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_21) "Building C object src/CMakeFiles/codec2.dir/fmfsk.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/codec2.dir/fmfsk.c.o -c /home/sh/Downloads/hackrf/codec2/src/fmfsk.c + +src/CMakeFiles/codec2.dir/fmfsk.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/codec2.dir/fmfsk.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/fmfsk.c > CMakeFiles/codec2.dir/fmfsk.c.i + +src/CMakeFiles/codec2.dir/fmfsk.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/codec2.dir/fmfsk.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/fmfsk.c -o CMakeFiles/codec2.dir/fmfsk.c.s + +src/CMakeFiles/codec2.dir/kiss_fft.c.o: src/CMakeFiles/codec2.dir/flags.make +src/CMakeFiles/codec2.dir/kiss_fft.c.o: ../src/kiss_fft.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_22) "Building C object src/CMakeFiles/codec2.dir/kiss_fft.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/codec2.dir/kiss_fft.c.o -c /home/sh/Downloads/hackrf/codec2/src/kiss_fft.c + +src/CMakeFiles/codec2.dir/kiss_fft.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/codec2.dir/kiss_fft.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/kiss_fft.c > CMakeFiles/codec2.dir/kiss_fft.c.i + +src/CMakeFiles/codec2.dir/kiss_fft.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/codec2.dir/kiss_fft.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/kiss_fft.c -o CMakeFiles/codec2.dir/kiss_fft.c.s + +src/CMakeFiles/codec2.dir/kiss_fftr.c.o: src/CMakeFiles/codec2.dir/flags.make +src/CMakeFiles/codec2.dir/kiss_fftr.c.o: ../src/kiss_fftr.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_23) "Building C object src/CMakeFiles/codec2.dir/kiss_fftr.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/codec2.dir/kiss_fftr.c.o -c /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.c + +src/CMakeFiles/codec2.dir/kiss_fftr.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/codec2.dir/kiss_fftr.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.c > CMakeFiles/codec2.dir/kiss_fftr.c.i + +src/CMakeFiles/codec2.dir/kiss_fftr.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/codec2.dir/kiss_fftr.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.c -o CMakeFiles/codec2.dir/kiss_fftr.c.s + +src/CMakeFiles/codec2.dir/linreg.c.o: src/CMakeFiles/codec2.dir/flags.make +src/CMakeFiles/codec2.dir/linreg.c.o: ../src/linreg.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_24) "Building C object src/CMakeFiles/codec2.dir/linreg.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/codec2.dir/linreg.c.o -c /home/sh/Downloads/hackrf/codec2/src/linreg.c + +src/CMakeFiles/codec2.dir/linreg.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/codec2.dir/linreg.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/linreg.c > CMakeFiles/codec2.dir/linreg.c.i + +src/CMakeFiles/codec2.dir/linreg.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/codec2.dir/linreg.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/linreg.c -o CMakeFiles/codec2.dir/linreg.c.s + +src/CMakeFiles/codec2.dir/interp.c.o: src/CMakeFiles/codec2.dir/flags.make +src/CMakeFiles/codec2.dir/interp.c.o: ../src/interp.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_25) "Building C object src/CMakeFiles/codec2.dir/interp.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/codec2.dir/interp.c.o -c /home/sh/Downloads/hackrf/codec2/src/interp.c + +src/CMakeFiles/codec2.dir/interp.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/codec2.dir/interp.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/interp.c > CMakeFiles/codec2.dir/interp.c.i + +src/CMakeFiles/codec2.dir/interp.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/codec2.dir/interp.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/interp.c -o CMakeFiles/codec2.dir/interp.c.s + +src/CMakeFiles/codec2.dir/lsp.c.o: src/CMakeFiles/codec2.dir/flags.make +src/CMakeFiles/codec2.dir/lsp.c.o: ../src/lsp.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_26) "Building C object src/CMakeFiles/codec2.dir/lsp.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/codec2.dir/lsp.c.o -c /home/sh/Downloads/hackrf/codec2/src/lsp.c + +src/CMakeFiles/codec2.dir/lsp.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/codec2.dir/lsp.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/lsp.c > CMakeFiles/codec2.dir/lsp.c.i + +src/CMakeFiles/codec2.dir/lsp.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/codec2.dir/lsp.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/lsp.c -o CMakeFiles/codec2.dir/lsp.c.s + +src/CMakeFiles/codec2.dir/mbest.c.o: src/CMakeFiles/codec2.dir/flags.make +src/CMakeFiles/codec2.dir/mbest.c.o: ../src/mbest.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_27) "Building C object src/CMakeFiles/codec2.dir/mbest.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/codec2.dir/mbest.c.o -c /home/sh/Downloads/hackrf/codec2/src/mbest.c + +src/CMakeFiles/codec2.dir/mbest.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/codec2.dir/mbest.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/mbest.c > CMakeFiles/codec2.dir/mbest.c.i + +src/CMakeFiles/codec2.dir/mbest.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/codec2.dir/mbest.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/mbest.c -o CMakeFiles/codec2.dir/mbest.c.s + +src/CMakeFiles/codec2.dir/newamp1.c.o: src/CMakeFiles/codec2.dir/flags.make +src/CMakeFiles/codec2.dir/newamp1.c.o: ../src/newamp1.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_28) "Building C object src/CMakeFiles/codec2.dir/newamp1.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/codec2.dir/newamp1.c.o -c /home/sh/Downloads/hackrf/codec2/src/newamp1.c + +src/CMakeFiles/codec2.dir/newamp1.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/codec2.dir/newamp1.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/newamp1.c > CMakeFiles/codec2.dir/newamp1.c.i + +src/CMakeFiles/codec2.dir/newamp1.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/codec2.dir/newamp1.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/newamp1.c -o CMakeFiles/codec2.dir/newamp1.c.s + +src/CMakeFiles/codec2.dir/newamp2.c.o: src/CMakeFiles/codec2.dir/flags.make +src/CMakeFiles/codec2.dir/newamp2.c.o: ../src/newamp2.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_29) "Building C object src/CMakeFiles/codec2.dir/newamp2.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/codec2.dir/newamp2.c.o -c /home/sh/Downloads/hackrf/codec2/src/newamp2.c + +src/CMakeFiles/codec2.dir/newamp2.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/codec2.dir/newamp2.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/newamp2.c > CMakeFiles/codec2.dir/newamp2.c.i + +src/CMakeFiles/codec2.dir/newamp2.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/codec2.dir/newamp2.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/newamp2.c -o CMakeFiles/codec2.dir/newamp2.c.s + +src/CMakeFiles/codec2.dir/ofdm.c.o: src/CMakeFiles/codec2.dir/flags.make +src/CMakeFiles/codec2.dir/ofdm.c.o: ../src/ofdm.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_30) "Building C object src/CMakeFiles/codec2.dir/ofdm.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/codec2.dir/ofdm.c.o -c /home/sh/Downloads/hackrf/codec2/src/ofdm.c + +src/CMakeFiles/codec2.dir/ofdm.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/codec2.dir/ofdm.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/ofdm.c > CMakeFiles/codec2.dir/ofdm.c.i + +src/CMakeFiles/codec2.dir/ofdm.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/codec2.dir/ofdm.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/ofdm.c -o CMakeFiles/codec2.dir/ofdm.c.s + +src/CMakeFiles/codec2.dir/ofdm_mode.c.o: src/CMakeFiles/codec2.dir/flags.make +src/CMakeFiles/codec2.dir/ofdm_mode.c.o: ../src/ofdm_mode.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_31) "Building C object src/CMakeFiles/codec2.dir/ofdm_mode.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/codec2.dir/ofdm_mode.c.o -c /home/sh/Downloads/hackrf/codec2/src/ofdm_mode.c + +src/CMakeFiles/codec2.dir/ofdm_mode.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/codec2.dir/ofdm_mode.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/ofdm_mode.c > CMakeFiles/codec2.dir/ofdm_mode.c.i + +src/CMakeFiles/codec2.dir/ofdm_mode.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/codec2.dir/ofdm_mode.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/ofdm_mode.c -o CMakeFiles/codec2.dir/ofdm_mode.c.s + +src/CMakeFiles/codec2.dir/phase.c.o: src/CMakeFiles/codec2.dir/flags.make +src/CMakeFiles/codec2.dir/phase.c.o: ../src/phase.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_32) "Building C object src/CMakeFiles/codec2.dir/phase.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/codec2.dir/phase.c.o -c /home/sh/Downloads/hackrf/codec2/src/phase.c + +src/CMakeFiles/codec2.dir/phase.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/codec2.dir/phase.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/phase.c > CMakeFiles/codec2.dir/phase.c.i + +src/CMakeFiles/codec2.dir/phase.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/codec2.dir/phase.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/phase.c -o CMakeFiles/codec2.dir/phase.c.s + +src/CMakeFiles/codec2.dir/quantise.c.o: src/CMakeFiles/codec2.dir/flags.make +src/CMakeFiles/codec2.dir/quantise.c.o: ../src/quantise.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_33) "Building C object src/CMakeFiles/codec2.dir/quantise.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/codec2.dir/quantise.c.o -c /home/sh/Downloads/hackrf/codec2/src/quantise.c + +src/CMakeFiles/codec2.dir/quantise.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/codec2.dir/quantise.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/quantise.c > CMakeFiles/codec2.dir/quantise.c.i + +src/CMakeFiles/codec2.dir/quantise.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/codec2.dir/quantise.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/quantise.c -o CMakeFiles/codec2.dir/quantise.c.s + +src/CMakeFiles/codec2.dir/pack.c.o: src/CMakeFiles/codec2.dir/flags.make +src/CMakeFiles/codec2.dir/pack.c.o: ../src/pack.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_34) "Building C object src/CMakeFiles/codec2.dir/pack.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/codec2.dir/pack.c.o -c /home/sh/Downloads/hackrf/codec2/src/pack.c + +src/CMakeFiles/codec2.dir/pack.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/codec2.dir/pack.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/pack.c > CMakeFiles/codec2.dir/pack.c.i + +src/CMakeFiles/codec2.dir/pack.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/codec2.dir/pack.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/pack.c -o CMakeFiles/codec2.dir/pack.c.s + +src/CMakeFiles/codec2.dir/codebook.c.o: src/CMakeFiles/codec2.dir/flags.make +src/CMakeFiles/codec2.dir/codebook.c.o: src/codebook.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_35) "Building C object src/CMakeFiles/codec2.dir/codebook.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/codec2.dir/codebook.c.o -c /home/sh/Downloads/hackrf/codec2/build_linux/src/codebook.c + +src/CMakeFiles/codec2.dir/codebook.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/codec2.dir/codebook.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/build_linux/src/codebook.c > CMakeFiles/codec2.dir/codebook.c.i + +src/CMakeFiles/codec2.dir/codebook.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/codec2.dir/codebook.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/build_linux/src/codebook.c -o CMakeFiles/codec2.dir/codebook.c.s + +src/CMakeFiles/codec2.dir/codebookd.c.o: src/CMakeFiles/codec2.dir/flags.make +src/CMakeFiles/codec2.dir/codebookd.c.o: src/codebookd.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_36) "Building C object src/CMakeFiles/codec2.dir/codebookd.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/codec2.dir/codebookd.c.o -c /home/sh/Downloads/hackrf/codec2/build_linux/src/codebookd.c + +src/CMakeFiles/codec2.dir/codebookd.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/codec2.dir/codebookd.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/build_linux/src/codebookd.c > CMakeFiles/codec2.dir/codebookd.c.i + +src/CMakeFiles/codec2.dir/codebookd.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/codec2.dir/codebookd.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/build_linux/src/codebookd.c -o CMakeFiles/codec2.dir/codebookd.c.s + +src/CMakeFiles/codec2.dir/codebookjvm.c.o: src/CMakeFiles/codec2.dir/flags.make +src/CMakeFiles/codec2.dir/codebookjvm.c.o: src/codebookjvm.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_37) "Building C object src/CMakeFiles/codec2.dir/codebookjvm.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/codec2.dir/codebookjvm.c.o -c /home/sh/Downloads/hackrf/codec2/build_linux/src/codebookjvm.c + +src/CMakeFiles/codec2.dir/codebookjvm.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/codec2.dir/codebookjvm.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/build_linux/src/codebookjvm.c > CMakeFiles/codec2.dir/codebookjvm.c.i + +src/CMakeFiles/codec2.dir/codebookjvm.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/codec2.dir/codebookjvm.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/build_linux/src/codebookjvm.c -o CMakeFiles/codec2.dir/codebookjvm.c.s + +src/CMakeFiles/codec2.dir/codebookge.c.o: src/CMakeFiles/codec2.dir/flags.make +src/CMakeFiles/codec2.dir/codebookge.c.o: src/codebookge.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_38) "Building C object src/CMakeFiles/codec2.dir/codebookge.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/codec2.dir/codebookge.c.o -c /home/sh/Downloads/hackrf/codec2/build_linux/src/codebookge.c + +src/CMakeFiles/codec2.dir/codebookge.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/codec2.dir/codebookge.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/build_linux/src/codebookge.c > CMakeFiles/codec2.dir/codebookge.c.i + +src/CMakeFiles/codec2.dir/codebookge.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/codec2.dir/codebookge.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/build_linux/src/codebookge.c -o CMakeFiles/codec2.dir/codebookge.c.s + +src/CMakeFiles/codec2.dir/codebooknewamp1.c.o: src/CMakeFiles/codec2.dir/flags.make +src/CMakeFiles/codec2.dir/codebooknewamp1.c.o: src/codebooknewamp1.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_39) "Building C object src/CMakeFiles/codec2.dir/codebooknewamp1.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/codec2.dir/codebooknewamp1.c.o -c /home/sh/Downloads/hackrf/codec2/build_linux/src/codebooknewamp1.c + +src/CMakeFiles/codec2.dir/codebooknewamp1.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/codec2.dir/codebooknewamp1.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/build_linux/src/codebooknewamp1.c > CMakeFiles/codec2.dir/codebooknewamp1.c.i + +src/CMakeFiles/codec2.dir/codebooknewamp1.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/codec2.dir/codebooknewamp1.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/build_linux/src/codebooknewamp1.c -o CMakeFiles/codec2.dir/codebooknewamp1.c.s + +src/CMakeFiles/codec2.dir/codebooknewamp1_energy.c.o: src/CMakeFiles/codec2.dir/flags.make +src/CMakeFiles/codec2.dir/codebooknewamp1_energy.c.o: src/codebooknewamp1_energy.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_40) "Building C object src/CMakeFiles/codec2.dir/codebooknewamp1_energy.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/codec2.dir/codebooknewamp1_energy.c.o -c /home/sh/Downloads/hackrf/codec2/build_linux/src/codebooknewamp1_energy.c + +src/CMakeFiles/codec2.dir/codebooknewamp1_energy.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/codec2.dir/codebooknewamp1_energy.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/build_linux/src/codebooknewamp1_energy.c > CMakeFiles/codec2.dir/codebooknewamp1_energy.c.i + +src/CMakeFiles/codec2.dir/codebooknewamp1_energy.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/codec2.dir/codebooknewamp1_energy.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/build_linux/src/codebooknewamp1_energy.c -o CMakeFiles/codec2.dir/codebooknewamp1_energy.c.s + +src/CMakeFiles/codec2.dir/codebooknewamp2.c.o: src/CMakeFiles/codec2.dir/flags.make +src/CMakeFiles/codec2.dir/codebooknewamp2.c.o: src/codebooknewamp2.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_41) "Building C object src/CMakeFiles/codec2.dir/codebooknewamp2.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/codec2.dir/codebooknewamp2.c.o -c /home/sh/Downloads/hackrf/codec2/build_linux/src/codebooknewamp2.c + +src/CMakeFiles/codec2.dir/codebooknewamp2.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/codec2.dir/codebooknewamp2.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/build_linux/src/codebooknewamp2.c > CMakeFiles/codec2.dir/codebooknewamp2.c.i + +src/CMakeFiles/codec2.dir/codebooknewamp2.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/codec2.dir/codebooknewamp2.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/build_linux/src/codebooknewamp2.c -o CMakeFiles/codec2.dir/codebooknewamp2.c.s + +src/CMakeFiles/codec2.dir/codebooknewamp2_energy.c.o: src/CMakeFiles/codec2.dir/flags.make +src/CMakeFiles/codec2.dir/codebooknewamp2_energy.c.o: src/codebooknewamp2_energy.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_42) "Building C object src/CMakeFiles/codec2.dir/codebooknewamp2_energy.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/codec2.dir/codebooknewamp2_energy.c.o -c /home/sh/Downloads/hackrf/codec2/build_linux/src/codebooknewamp2_energy.c + +src/CMakeFiles/codec2.dir/codebooknewamp2_energy.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/codec2.dir/codebooknewamp2_energy.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/build_linux/src/codebooknewamp2_energy.c > CMakeFiles/codec2.dir/codebooknewamp2_energy.c.i + +src/CMakeFiles/codec2.dir/codebooknewamp2_energy.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/codec2.dir/codebooknewamp2_energy.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/build_linux/src/codebooknewamp2_energy.c -o CMakeFiles/codec2.dir/codebooknewamp2_energy.c.s + +src/CMakeFiles/codec2.dir/golay23.c.o: src/CMakeFiles/codec2.dir/flags.make +src/CMakeFiles/codec2.dir/golay23.c.o: ../src/golay23.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_43) "Building C object src/CMakeFiles/codec2.dir/golay23.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/codec2.dir/golay23.c.o -c /home/sh/Downloads/hackrf/codec2/src/golay23.c + +src/CMakeFiles/codec2.dir/golay23.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/codec2.dir/golay23.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/golay23.c > CMakeFiles/codec2.dir/golay23.c.i + +src/CMakeFiles/codec2.dir/golay23.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/codec2.dir/golay23.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/golay23.c -o CMakeFiles/codec2.dir/golay23.c.s + +src/CMakeFiles/codec2.dir/freedv_api.c.o: src/CMakeFiles/codec2.dir/flags.make +src/CMakeFiles/codec2.dir/freedv_api.c.o: ../src/freedv_api.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_44) "Building C object src/CMakeFiles/codec2.dir/freedv_api.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/codec2.dir/freedv_api.c.o -c /home/sh/Downloads/hackrf/codec2/src/freedv_api.c + +src/CMakeFiles/codec2.dir/freedv_api.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/codec2.dir/freedv_api.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/freedv_api.c > CMakeFiles/codec2.dir/freedv_api.c.i + +src/CMakeFiles/codec2.dir/freedv_api.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/codec2.dir/freedv_api.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/freedv_api.c -o CMakeFiles/codec2.dir/freedv_api.c.s + +src/CMakeFiles/codec2.dir/freedv_1600.c.o: src/CMakeFiles/codec2.dir/flags.make +src/CMakeFiles/codec2.dir/freedv_1600.c.o: ../src/freedv_1600.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_45) "Building C object src/CMakeFiles/codec2.dir/freedv_1600.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/codec2.dir/freedv_1600.c.o -c /home/sh/Downloads/hackrf/codec2/src/freedv_1600.c + +src/CMakeFiles/codec2.dir/freedv_1600.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/codec2.dir/freedv_1600.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/freedv_1600.c > CMakeFiles/codec2.dir/freedv_1600.c.i + +src/CMakeFiles/codec2.dir/freedv_1600.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/codec2.dir/freedv_1600.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/freedv_1600.c -o CMakeFiles/codec2.dir/freedv_1600.c.s + +src/CMakeFiles/codec2.dir/freedv_700.c.o: src/CMakeFiles/codec2.dir/flags.make +src/CMakeFiles/codec2.dir/freedv_700.c.o: ../src/freedv_700.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_46) "Building C object src/CMakeFiles/codec2.dir/freedv_700.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/codec2.dir/freedv_700.c.o -c /home/sh/Downloads/hackrf/codec2/src/freedv_700.c + +src/CMakeFiles/codec2.dir/freedv_700.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/codec2.dir/freedv_700.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/freedv_700.c > CMakeFiles/codec2.dir/freedv_700.c.i + +src/CMakeFiles/codec2.dir/freedv_700.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/codec2.dir/freedv_700.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/freedv_700.c -o CMakeFiles/codec2.dir/freedv_700.c.s + +src/CMakeFiles/codec2.dir/freedv_2020.c.o: src/CMakeFiles/codec2.dir/flags.make +src/CMakeFiles/codec2.dir/freedv_2020.c.o: ../src/freedv_2020.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_47) "Building C object src/CMakeFiles/codec2.dir/freedv_2020.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/codec2.dir/freedv_2020.c.o -c /home/sh/Downloads/hackrf/codec2/src/freedv_2020.c + +src/CMakeFiles/codec2.dir/freedv_2020.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/codec2.dir/freedv_2020.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/freedv_2020.c > CMakeFiles/codec2.dir/freedv_2020.c.i + +src/CMakeFiles/codec2.dir/freedv_2020.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/codec2.dir/freedv_2020.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/freedv_2020.c -o CMakeFiles/codec2.dir/freedv_2020.c.s + +src/CMakeFiles/codec2.dir/freedv_fsk.c.o: src/CMakeFiles/codec2.dir/flags.make +src/CMakeFiles/codec2.dir/freedv_fsk.c.o: ../src/freedv_fsk.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_48) "Building C object src/CMakeFiles/codec2.dir/freedv_fsk.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/codec2.dir/freedv_fsk.c.o -c /home/sh/Downloads/hackrf/codec2/src/freedv_fsk.c + +src/CMakeFiles/codec2.dir/freedv_fsk.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/codec2.dir/freedv_fsk.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/freedv_fsk.c > CMakeFiles/codec2.dir/freedv_fsk.c.i + +src/CMakeFiles/codec2.dir/freedv_fsk.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/codec2.dir/freedv_fsk.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/freedv_fsk.c -o CMakeFiles/codec2.dir/freedv_fsk.c.s + +src/CMakeFiles/codec2.dir/freedv_vhf_framing.c.o: src/CMakeFiles/codec2.dir/flags.make +src/CMakeFiles/codec2.dir/freedv_vhf_framing.c.o: ../src/freedv_vhf_framing.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_49) "Building C object src/CMakeFiles/codec2.dir/freedv_vhf_framing.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/codec2.dir/freedv_vhf_framing.c.o -c /home/sh/Downloads/hackrf/codec2/src/freedv_vhf_framing.c + +src/CMakeFiles/codec2.dir/freedv_vhf_framing.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/codec2.dir/freedv_vhf_framing.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/freedv_vhf_framing.c > CMakeFiles/codec2.dir/freedv_vhf_framing.c.i + +src/CMakeFiles/codec2.dir/freedv_vhf_framing.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/codec2.dir/freedv_vhf_framing.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/freedv_vhf_framing.c -o CMakeFiles/codec2.dir/freedv_vhf_framing.c.s + +src/CMakeFiles/codec2.dir/freedv_data_channel.c.o: src/CMakeFiles/codec2.dir/flags.make +src/CMakeFiles/codec2.dir/freedv_data_channel.c.o: ../src/freedv_data_channel.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_50) "Building C object src/CMakeFiles/codec2.dir/freedv_data_channel.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/codec2.dir/freedv_data_channel.c.o -c /home/sh/Downloads/hackrf/codec2/src/freedv_data_channel.c + +src/CMakeFiles/codec2.dir/freedv_data_channel.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/codec2.dir/freedv_data_channel.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/freedv_data_channel.c > CMakeFiles/codec2.dir/freedv_data_channel.c.i + +src/CMakeFiles/codec2.dir/freedv_data_channel.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/codec2.dir/freedv_data_channel.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/freedv_data_channel.c -o CMakeFiles/codec2.dir/freedv_data_channel.c.s + +src/CMakeFiles/codec2.dir/varicode.c.o: src/CMakeFiles/codec2.dir/flags.make +src/CMakeFiles/codec2.dir/varicode.c.o: ../src/varicode.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_51) "Building C object src/CMakeFiles/codec2.dir/varicode.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/codec2.dir/varicode.c.o -c /home/sh/Downloads/hackrf/codec2/src/varicode.c + +src/CMakeFiles/codec2.dir/varicode.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/codec2.dir/varicode.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/varicode.c > CMakeFiles/codec2.dir/varicode.c.i + +src/CMakeFiles/codec2.dir/varicode.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/codec2.dir/varicode.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/varicode.c -o CMakeFiles/codec2.dir/varicode.c.s + +src/CMakeFiles/codec2.dir/modem_stats.c.o: src/CMakeFiles/codec2.dir/flags.make +src/CMakeFiles/codec2.dir/modem_stats.c.o: ../src/modem_stats.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_52) "Building C object src/CMakeFiles/codec2.dir/modem_stats.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/codec2.dir/modem_stats.c.o -c /home/sh/Downloads/hackrf/codec2/src/modem_stats.c + +src/CMakeFiles/codec2.dir/modem_stats.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/codec2.dir/modem_stats.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/modem_stats.c > CMakeFiles/codec2.dir/modem_stats.c.i + +src/CMakeFiles/codec2.dir/modem_stats.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/codec2.dir/modem_stats.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/modem_stats.c -o CMakeFiles/codec2.dir/modem_stats.c.s + +src/CMakeFiles/codec2.dir/mpdecode_core.c.o: src/CMakeFiles/codec2.dir/flags.make +src/CMakeFiles/codec2.dir/mpdecode_core.c.o: ../src/mpdecode_core.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_53) "Building C object src/CMakeFiles/codec2.dir/mpdecode_core.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/codec2.dir/mpdecode_core.c.o -c /home/sh/Downloads/hackrf/codec2/src/mpdecode_core.c + +src/CMakeFiles/codec2.dir/mpdecode_core.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/codec2.dir/mpdecode_core.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/mpdecode_core.c > CMakeFiles/codec2.dir/mpdecode_core.c.i + +src/CMakeFiles/codec2.dir/mpdecode_core.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/codec2.dir/mpdecode_core.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/mpdecode_core.c -o CMakeFiles/codec2.dir/mpdecode_core.c.s + +src/CMakeFiles/codec2.dir/phi0.c.o: src/CMakeFiles/codec2.dir/flags.make +src/CMakeFiles/codec2.dir/phi0.c.o: ../src/phi0.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_54) "Building C object src/CMakeFiles/codec2.dir/phi0.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/codec2.dir/phi0.c.o -c /home/sh/Downloads/hackrf/codec2/src/phi0.c + +src/CMakeFiles/codec2.dir/phi0.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/codec2.dir/phi0.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/phi0.c > CMakeFiles/codec2.dir/phi0.c.i + +src/CMakeFiles/codec2.dir/phi0.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/codec2.dir/phi0.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/phi0.c -o CMakeFiles/codec2.dir/phi0.c.s + +src/CMakeFiles/codec2.dir/gp_interleaver.c.o: src/CMakeFiles/codec2.dir/flags.make +src/CMakeFiles/codec2.dir/gp_interleaver.c.o: ../src/gp_interleaver.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_55) "Building C object src/CMakeFiles/codec2.dir/gp_interleaver.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/codec2.dir/gp_interleaver.c.o -c /home/sh/Downloads/hackrf/codec2/src/gp_interleaver.c + +src/CMakeFiles/codec2.dir/gp_interleaver.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/codec2.dir/gp_interleaver.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/gp_interleaver.c > CMakeFiles/codec2.dir/gp_interleaver.c.i + +src/CMakeFiles/codec2.dir/gp_interleaver.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/codec2.dir/gp_interleaver.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/gp_interleaver.c -o CMakeFiles/codec2.dir/gp_interleaver.c.s + +src/CMakeFiles/codec2.dir/interldpc.c.o: src/CMakeFiles/codec2.dir/flags.make +src/CMakeFiles/codec2.dir/interldpc.c.o: ../src/interldpc.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_56) "Building C object src/CMakeFiles/codec2.dir/interldpc.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/codec2.dir/interldpc.c.o -c /home/sh/Downloads/hackrf/codec2/src/interldpc.c + +src/CMakeFiles/codec2.dir/interldpc.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/codec2.dir/interldpc.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/interldpc.c > CMakeFiles/codec2.dir/interldpc.c.i + +src/CMakeFiles/codec2.dir/interldpc.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/codec2.dir/interldpc.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/interldpc.c -o CMakeFiles/codec2.dir/interldpc.c.s + +src/CMakeFiles/codec2.dir/filter.c.o: src/CMakeFiles/codec2.dir/flags.make +src/CMakeFiles/codec2.dir/filter.c.o: ../src/filter.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_57) "Building C object src/CMakeFiles/codec2.dir/filter.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/codec2.dir/filter.c.o -c /home/sh/Downloads/hackrf/codec2/src/filter.c + +src/CMakeFiles/codec2.dir/filter.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/codec2.dir/filter.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/filter.c > CMakeFiles/codec2.dir/filter.c.i + +src/CMakeFiles/codec2.dir/filter.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/codec2.dir/filter.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/filter.c -o CMakeFiles/codec2.dir/filter.c.s + +src/CMakeFiles/codec2.dir/HRA_112_112.c.o: src/CMakeFiles/codec2.dir/flags.make +src/CMakeFiles/codec2.dir/HRA_112_112.c.o: ../src/HRA_112_112.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_58) "Building C object src/CMakeFiles/codec2.dir/HRA_112_112.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/codec2.dir/HRA_112_112.c.o -c /home/sh/Downloads/hackrf/codec2/src/HRA_112_112.c + +src/CMakeFiles/codec2.dir/HRA_112_112.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/codec2.dir/HRA_112_112.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/HRA_112_112.c > CMakeFiles/codec2.dir/HRA_112_112.c.i + +src/CMakeFiles/codec2.dir/HRA_112_112.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/codec2.dir/HRA_112_112.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/HRA_112_112.c -o CMakeFiles/codec2.dir/HRA_112_112.c.s + +src/CMakeFiles/codec2.dir/HRAb_396_504.c.o: src/CMakeFiles/codec2.dir/flags.make +src/CMakeFiles/codec2.dir/HRAb_396_504.c.o: ../src/HRAb_396_504.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_59) "Building C object src/CMakeFiles/codec2.dir/HRAb_396_504.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/codec2.dir/HRAb_396_504.c.o -c /home/sh/Downloads/hackrf/codec2/src/HRAb_396_504.c + +src/CMakeFiles/codec2.dir/HRAb_396_504.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/codec2.dir/HRAb_396_504.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/HRAb_396_504.c > CMakeFiles/codec2.dir/HRAb_396_504.c.i + +src/CMakeFiles/codec2.dir/HRAb_396_504.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/codec2.dir/HRAb_396_504.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/HRAb_396_504.c -o CMakeFiles/codec2.dir/HRAb_396_504.c.s + +src/CMakeFiles/codec2.dir/H_256_768_22.c.o: src/CMakeFiles/codec2.dir/flags.make +src/CMakeFiles/codec2.dir/H_256_768_22.c.o: ../src/H_256_768_22.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_60) "Building C object src/CMakeFiles/codec2.dir/H_256_768_22.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/codec2.dir/H_256_768_22.c.o -c /home/sh/Downloads/hackrf/codec2/src/H_256_768_22.c + +src/CMakeFiles/codec2.dir/H_256_768_22.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/codec2.dir/H_256_768_22.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/H_256_768_22.c > CMakeFiles/codec2.dir/H_256_768_22.c.i + +src/CMakeFiles/codec2.dir/H_256_768_22.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/codec2.dir/H_256_768_22.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/H_256_768_22.c -o CMakeFiles/codec2.dir/H_256_768_22.c.s + +src/CMakeFiles/codec2.dir/H_256_512_4.c.o: src/CMakeFiles/codec2.dir/flags.make +src/CMakeFiles/codec2.dir/H_256_512_4.c.o: ../src/H_256_512_4.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_61) "Building C object src/CMakeFiles/codec2.dir/H_256_512_4.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/codec2.dir/H_256_512_4.c.o -c /home/sh/Downloads/hackrf/codec2/src/H_256_512_4.c + +src/CMakeFiles/codec2.dir/H_256_512_4.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/codec2.dir/H_256_512_4.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/H_256_512_4.c > CMakeFiles/codec2.dir/H_256_512_4.c.i + +src/CMakeFiles/codec2.dir/H_256_512_4.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/codec2.dir/H_256_512_4.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/H_256_512_4.c -o CMakeFiles/codec2.dir/H_256_512_4.c.s + +src/CMakeFiles/codec2.dir/HRAa_1536_512.c.o: src/CMakeFiles/codec2.dir/flags.make +src/CMakeFiles/codec2.dir/HRAa_1536_512.c.o: ../src/HRAa_1536_512.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_62) "Building C object src/CMakeFiles/codec2.dir/HRAa_1536_512.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/codec2.dir/HRAa_1536_512.c.o -c /home/sh/Downloads/hackrf/codec2/src/HRAa_1536_512.c + +src/CMakeFiles/codec2.dir/HRAa_1536_512.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/codec2.dir/HRAa_1536_512.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/HRAa_1536_512.c > CMakeFiles/codec2.dir/HRAa_1536_512.c.i + +src/CMakeFiles/codec2.dir/HRAa_1536_512.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/codec2.dir/HRAa_1536_512.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/HRAa_1536_512.c -o CMakeFiles/codec2.dir/HRAa_1536_512.c.s + +src/CMakeFiles/codec2.dir/H_128_256_5.c.o: src/CMakeFiles/codec2.dir/flags.make +src/CMakeFiles/codec2.dir/H_128_256_5.c.o: ../src/H_128_256_5.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_63) "Building C object src/CMakeFiles/codec2.dir/H_128_256_5.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/codec2.dir/H_128_256_5.c.o -c /home/sh/Downloads/hackrf/codec2/src/H_128_256_5.c + +src/CMakeFiles/codec2.dir/H_128_256_5.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/codec2.dir/H_128_256_5.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/H_128_256_5.c > CMakeFiles/codec2.dir/H_128_256_5.c.i + +src/CMakeFiles/codec2.dir/H_128_256_5.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/codec2.dir/H_128_256_5.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/H_128_256_5.c -o CMakeFiles/codec2.dir/H_128_256_5.c.s + +src/CMakeFiles/codec2.dir/ldpc_codes.c.o: src/CMakeFiles/codec2.dir/flags.make +src/CMakeFiles/codec2.dir/ldpc_codes.c.o: ../src/ldpc_codes.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_64) "Building C object src/CMakeFiles/codec2.dir/ldpc_codes.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/codec2.dir/ldpc_codes.c.o -c /home/sh/Downloads/hackrf/codec2/src/ldpc_codes.c + +src/CMakeFiles/codec2.dir/ldpc_codes.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/codec2.dir/ldpc_codes.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/ldpc_codes.c > CMakeFiles/codec2.dir/ldpc_codes.c.i + +src/CMakeFiles/codec2.dir/ldpc_codes.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/codec2.dir/ldpc_codes.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/ldpc_codes.c -o CMakeFiles/codec2.dir/ldpc_codes.c.s + +src/CMakeFiles/codec2.dir/lpcnet_freq.c.o: src/CMakeFiles/codec2.dir/flags.make +src/CMakeFiles/codec2.dir/lpcnet_freq.c.o: ../src/lpcnet_freq.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_65) "Building C object src/CMakeFiles/codec2.dir/lpcnet_freq.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/codec2.dir/lpcnet_freq.c.o -c /home/sh/Downloads/hackrf/codec2/src/lpcnet_freq.c + +src/CMakeFiles/codec2.dir/lpcnet_freq.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/codec2.dir/lpcnet_freq.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/lpcnet_freq.c > CMakeFiles/codec2.dir/lpcnet_freq.c.i + +src/CMakeFiles/codec2.dir/lpcnet_freq.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/codec2.dir/lpcnet_freq.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/lpcnet_freq.c -o CMakeFiles/codec2.dir/lpcnet_freq.c.s + +# Object files for target codec2 +codec2_OBJECTS = \ +"CMakeFiles/codec2.dir/dump.c.o" \ +"CMakeFiles/codec2.dir/lpc.c.o" \ +"CMakeFiles/codec2.dir/nlp.c.o" \ +"CMakeFiles/codec2.dir/postfilter.c.o" \ +"CMakeFiles/codec2.dir/sine.c.o" \ +"CMakeFiles/codec2.dir/codec2.c.o" \ +"CMakeFiles/codec2.dir/codec2_fft.c.o" \ +"CMakeFiles/codec2.dir/cohpsk.c.o" \ +"CMakeFiles/codec2.dir/codec2_fifo.c.o" \ +"CMakeFiles/codec2.dir/fdmdv.c.o" \ +"CMakeFiles/codec2.dir/fm.c.o" \ +"CMakeFiles/codec2.dir/fsk.c.o" \ +"CMakeFiles/codec2.dir/fmfsk.c.o" \ +"CMakeFiles/codec2.dir/kiss_fft.c.o" \ +"CMakeFiles/codec2.dir/kiss_fftr.c.o" \ +"CMakeFiles/codec2.dir/linreg.c.o" \ +"CMakeFiles/codec2.dir/interp.c.o" \ +"CMakeFiles/codec2.dir/lsp.c.o" \ +"CMakeFiles/codec2.dir/mbest.c.o" \ +"CMakeFiles/codec2.dir/newamp1.c.o" \ +"CMakeFiles/codec2.dir/newamp2.c.o" \ +"CMakeFiles/codec2.dir/ofdm.c.o" \ +"CMakeFiles/codec2.dir/ofdm_mode.c.o" \ +"CMakeFiles/codec2.dir/phase.c.o" \ +"CMakeFiles/codec2.dir/quantise.c.o" \ +"CMakeFiles/codec2.dir/pack.c.o" \ +"CMakeFiles/codec2.dir/codebook.c.o" \ +"CMakeFiles/codec2.dir/codebookd.c.o" \ +"CMakeFiles/codec2.dir/codebookjvm.c.o" \ +"CMakeFiles/codec2.dir/codebookge.c.o" \ +"CMakeFiles/codec2.dir/codebooknewamp1.c.o" \ +"CMakeFiles/codec2.dir/codebooknewamp1_energy.c.o" \ +"CMakeFiles/codec2.dir/codebooknewamp2.c.o" \ +"CMakeFiles/codec2.dir/codebooknewamp2_energy.c.o" \ +"CMakeFiles/codec2.dir/golay23.c.o" \ +"CMakeFiles/codec2.dir/freedv_api.c.o" \ +"CMakeFiles/codec2.dir/freedv_1600.c.o" \ +"CMakeFiles/codec2.dir/freedv_700.c.o" \ +"CMakeFiles/codec2.dir/freedv_2020.c.o" \ +"CMakeFiles/codec2.dir/freedv_fsk.c.o" \ +"CMakeFiles/codec2.dir/freedv_vhf_framing.c.o" \ +"CMakeFiles/codec2.dir/freedv_data_channel.c.o" \ +"CMakeFiles/codec2.dir/varicode.c.o" \ +"CMakeFiles/codec2.dir/modem_stats.c.o" \ +"CMakeFiles/codec2.dir/mpdecode_core.c.o" \ +"CMakeFiles/codec2.dir/phi0.c.o" \ +"CMakeFiles/codec2.dir/gp_interleaver.c.o" \ +"CMakeFiles/codec2.dir/interldpc.c.o" \ +"CMakeFiles/codec2.dir/filter.c.o" \ +"CMakeFiles/codec2.dir/HRA_112_112.c.o" \ +"CMakeFiles/codec2.dir/HRAb_396_504.c.o" \ +"CMakeFiles/codec2.dir/H_256_768_22.c.o" \ +"CMakeFiles/codec2.dir/H_256_512_4.c.o" \ +"CMakeFiles/codec2.dir/HRAa_1536_512.c.o" \ +"CMakeFiles/codec2.dir/H_128_256_5.c.o" \ +"CMakeFiles/codec2.dir/ldpc_codes.c.o" \ +"CMakeFiles/codec2.dir/lpcnet_freq.c.o" + +# External object files for target codec2 +codec2_EXTERNAL_OBJECTS = + +src/libcodec2.so.0.9: src/CMakeFiles/codec2.dir/dump.c.o +src/libcodec2.so.0.9: src/CMakeFiles/codec2.dir/lpc.c.o +src/libcodec2.so.0.9: src/CMakeFiles/codec2.dir/nlp.c.o +src/libcodec2.so.0.9: src/CMakeFiles/codec2.dir/postfilter.c.o +src/libcodec2.so.0.9: src/CMakeFiles/codec2.dir/sine.c.o +src/libcodec2.so.0.9: src/CMakeFiles/codec2.dir/codec2.c.o +src/libcodec2.so.0.9: src/CMakeFiles/codec2.dir/codec2_fft.c.o +src/libcodec2.so.0.9: src/CMakeFiles/codec2.dir/cohpsk.c.o +src/libcodec2.so.0.9: src/CMakeFiles/codec2.dir/codec2_fifo.c.o +src/libcodec2.so.0.9: src/CMakeFiles/codec2.dir/fdmdv.c.o +src/libcodec2.so.0.9: src/CMakeFiles/codec2.dir/fm.c.o +src/libcodec2.so.0.9: src/CMakeFiles/codec2.dir/fsk.c.o +src/libcodec2.so.0.9: src/CMakeFiles/codec2.dir/fmfsk.c.o +src/libcodec2.so.0.9: src/CMakeFiles/codec2.dir/kiss_fft.c.o +src/libcodec2.so.0.9: src/CMakeFiles/codec2.dir/kiss_fftr.c.o +src/libcodec2.so.0.9: src/CMakeFiles/codec2.dir/linreg.c.o +src/libcodec2.so.0.9: src/CMakeFiles/codec2.dir/interp.c.o +src/libcodec2.so.0.9: src/CMakeFiles/codec2.dir/lsp.c.o +src/libcodec2.so.0.9: src/CMakeFiles/codec2.dir/mbest.c.o +src/libcodec2.so.0.9: src/CMakeFiles/codec2.dir/newamp1.c.o +src/libcodec2.so.0.9: src/CMakeFiles/codec2.dir/newamp2.c.o +src/libcodec2.so.0.9: src/CMakeFiles/codec2.dir/ofdm.c.o +src/libcodec2.so.0.9: src/CMakeFiles/codec2.dir/ofdm_mode.c.o +src/libcodec2.so.0.9: src/CMakeFiles/codec2.dir/phase.c.o +src/libcodec2.so.0.9: src/CMakeFiles/codec2.dir/quantise.c.o +src/libcodec2.so.0.9: src/CMakeFiles/codec2.dir/pack.c.o +src/libcodec2.so.0.9: src/CMakeFiles/codec2.dir/codebook.c.o +src/libcodec2.so.0.9: src/CMakeFiles/codec2.dir/codebookd.c.o +src/libcodec2.so.0.9: src/CMakeFiles/codec2.dir/codebookjvm.c.o +src/libcodec2.so.0.9: src/CMakeFiles/codec2.dir/codebookge.c.o +src/libcodec2.so.0.9: src/CMakeFiles/codec2.dir/codebooknewamp1.c.o +src/libcodec2.so.0.9: src/CMakeFiles/codec2.dir/codebooknewamp1_energy.c.o +src/libcodec2.so.0.9: src/CMakeFiles/codec2.dir/codebooknewamp2.c.o +src/libcodec2.so.0.9: src/CMakeFiles/codec2.dir/codebooknewamp2_energy.c.o +src/libcodec2.so.0.9: src/CMakeFiles/codec2.dir/golay23.c.o +src/libcodec2.so.0.9: src/CMakeFiles/codec2.dir/freedv_api.c.o +src/libcodec2.so.0.9: src/CMakeFiles/codec2.dir/freedv_1600.c.o +src/libcodec2.so.0.9: src/CMakeFiles/codec2.dir/freedv_700.c.o +src/libcodec2.so.0.9: src/CMakeFiles/codec2.dir/freedv_2020.c.o +src/libcodec2.so.0.9: src/CMakeFiles/codec2.dir/freedv_fsk.c.o +src/libcodec2.so.0.9: src/CMakeFiles/codec2.dir/freedv_vhf_framing.c.o +src/libcodec2.so.0.9: src/CMakeFiles/codec2.dir/freedv_data_channel.c.o +src/libcodec2.so.0.9: src/CMakeFiles/codec2.dir/varicode.c.o +src/libcodec2.so.0.9: src/CMakeFiles/codec2.dir/modem_stats.c.o +src/libcodec2.so.0.9: src/CMakeFiles/codec2.dir/mpdecode_core.c.o +src/libcodec2.so.0.9: src/CMakeFiles/codec2.dir/phi0.c.o +src/libcodec2.so.0.9: src/CMakeFiles/codec2.dir/gp_interleaver.c.o +src/libcodec2.so.0.9: src/CMakeFiles/codec2.dir/interldpc.c.o +src/libcodec2.so.0.9: src/CMakeFiles/codec2.dir/filter.c.o +src/libcodec2.so.0.9: src/CMakeFiles/codec2.dir/HRA_112_112.c.o +src/libcodec2.so.0.9: src/CMakeFiles/codec2.dir/HRAb_396_504.c.o +src/libcodec2.so.0.9: src/CMakeFiles/codec2.dir/H_256_768_22.c.o +src/libcodec2.so.0.9: src/CMakeFiles/codec2.dir/H_256_512_4.c.o +src/libcodec2.so.0.9: src/CMakeFiles/codec2.dir/HRAa_1536_512.c.o +src/libcodec2.so.0.9: src/CMakeFiles/codec2.dir/H_128_256_5.c.o +src/libcodec2.so.0.9: src/CMakeFiles/codec2.dir/ldpc_codes.c.o +src/libcodec2.so.0.9: src/CMakeFiles/codec2.dir/lpcnet_freq.c.o +src/libcodec2.so.0.9: src/CMakeFiles/codec2.dir/build.make +src/libcodec2.so.0.9: src/CMakeFiles/codec2.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_66) "Linking C shared library libcodec2.so" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/codec2.dir/link.txt --verbose=$(VERBOSE) + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -E cmake_symlink_library libcodec2.so.0.9 libcodec2.so.0.9 libcodec2.so + +src/libcodec2.so: src/libcodec2.so.0.9 + @$(CMAKE_COMMAND) -E touch_nocreate src/libcodec2.so + +# Rule to build all files generated by this target. +src/CMakeFiles/codec2.dir/build: src/libcodec2.so + +.PHONY : src/CMakeFiles/codec2.dir/build + +src/CMakeFiles/codec2.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -P CMakeFiles/codec2.dir/cmake_clean.cmake +.PHONY : src/CMakeFiles/codec2.dir/clean + +src/CMakeFiles/codec2.dir/depend: src/codebook.c +src/CMakeFiles/codec2.dir/depend: src/codebookd.c +src/CMakeFiles/codec2.dir/depend: src/codebookjvm.c +src/CMakeFiles/codec2.dir/depend: src/codebookge.c +src/CMakeFiles/codec2.dir/depend: src/codebooknewamp1.c +src/CMakeFiles/codec2.dir/depend: src/codebooknewamp1_energy.c +src/CMakeFiles/codec2.dir/depend: src/codebooknewamp2.c +src/CMakeFiles/codec2.dir/depend: src/codebooknewamp2_energy.c + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/src /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/src /home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : src/CMakeFiles/codec2.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/cmake_clean.cmake new file mode 100644 index 0000000..0b419ca --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/cmake_clean.cmake @@ -0,0 +1,75 @@ +file(REMOVE_RECURSE + "codebook.c" + "codebookd.c" + "codebookjvm.c" + "codebookge.c" + "codebooknewamp1.c" + "codebooknewamp1_energy.c" + "codebooknewamp2.c" + "codebooknewamp2_energy.c" + "CMakeFiles/codec2.dir/dump.c.o" + "CMakeFiles/codec2.dir/lpc.c.o" + "CMakeFiles/codec2.dir/nlp.c.o" + "CMakeFiles/codec2.dir/postfilter.c.o" + "CMakeFiles/codec2.dir/sine.c.o" + "CMakeFiles/codec2.dir/codec2.c.o" + "CMakeFiles/codec2.dir/codec2_fft.c.o" + "CMakeFiles/codec2.dir/cohpsk.c.o" + "CMakeFiles/codec2.dir/codec2_fifo.c.o" + "CMakeFiles/codec2.dir/fdmdv.c.o" + "CMakeFiles/codec2.dir/fm.c.o" + "CMakeFiles/codec2.dir/fsk.c.o" + "CMakeFiles/codec2.dir/fmfsk.c.o" + "CMakeFiles/codec2.dir/kiss_fft.c.o" + "CMakeFiles/codec2.dir/kiss_fftr.c.o" + "CMakeFiles/codec2.dir/linreg.c.o" + "CMakeFiles/codec2.dir/interp.c.o" + "CMakeFiles/codec2.dir/lsp.c.o" + "CMakeFiles/codec2.dir/mbest.c.o" + "CMakeFiles/codec2.dir/newamp1.c.o" + "CMakeFiles/codec2.dir/newamp2.c.o" + "CMakeFiles/codec2.dir/ofdm.c.o" + "CMakeFiles/codec2.dir/ofdm_mode.c.o" + "CMakeFiles/codec2.dir/phase.c.o" + "CMakeFiles/codec2.dir/quantise.c.o" + "CMakeFiles/codec2.dir/pack.c.o" + "CMakeFiles/codec2.dir/codebook.c.o" + "CMakeFiles/codec2.dir/codebookd.c.o" + "CMakeFiles/codec2.dir/codebookjvm.c.o" + "CMakeFiles/codec2.dir/codebookge.c.o" + "CMakeFiles/codec2.dir/codebooknewamp1.c.o" + "CMakeFiles/codec2.dir/codebooknewamp1_energy.c.o" + "CMakeFiles/codec2.dir/codebooknewamp2.c.o" + "CMakeFiles/codec2.dir/codebooknewamp2_energy.c.o" + "CMakeFiles/codec2.dir/golay23.c.o" + "CMakeFiles/codec2.dir/freedv_api.c.o" + "CMakeFiles/codec2.dir/freedv_1600.c.o" + "CMakeFiles/codec2.dir/freedv_700.c.o" + "CMakeFiles/codec2.dir/freedv_2020.c.o" + "CMakeFiles/codec2.dir/freedv_fsk.c.o" + "CMakeFiles/codec2.dir/freedv_vhf_framing.c.o" + "CMakeFiles/codec2.dir/freedv_data_channel.c.o" + "CMakeFiles/codec2.dir/varicode.c.o" + "CMakeFiles/codec2.dir/modem_stats.c.o" + "CMakeFiles/codec2.dir/mpdecode_core.c.o" + "CMakeFiles/codec2.dir/phi0.c.o" + "CMakeFiles/codec2.dir/gp_interleaver.c.o" + "CMakeFiles/codec2.dir/interldpc.c.o" + "CMakeFiles/codec2.dir/filter.c.o" + "CMakeFiles/codec2.dir/HRA_112_112.c.o" + "CMakeFiles/codec2.dir/HRAb_396_504.c.o" + "CMakeFiles/codec2.dir/H_256_768_22.c.o" + "CMakeFiles/codec2.dir/H_256_512_4.c.o" + "CMakeFiles/codec2.dir/HRAa_1536_512.c.o" + "CMakeFiles/codec2.dir/H_128_256_5.c.o" + "CMakeFiles/codec2.dir/ldpc_codes.c.o" + "CMakeFiles/codec2.dir/lpcnet_freq.c.o" + "libcodec2.pdb" + "libcodec2.so.0.9" + "libcodec2.so" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/codec2.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/codebook.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/codebook.c.o new file mode 100644 index 0000000..658ad1f Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/codebook.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/codebookd.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/codebookd.c.o new file mode 100644 index 0000000..75d9e54 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/codebookd.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/codebookge.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/codebookge.c.o new file mode 100644 index 0000000..d17b5f0 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/codebookge.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/codebookjvm.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/codebookjvm.c.o new file mode 100644 index 0000000..55026e5 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/codebookjvm.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/codebooknewamp1.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/codebooknewamp1.c.o new file mode 100644 index 0000000..5329245 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/codebooknewamp1.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/codebooknewamp1_energy.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/codebooknewamp1_energy.c.o new file mode 100644 index 0000000..f237973 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/codebooknewamp1_energy.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/codebooknewamp2.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/codebooknewamp2.c.o new file mode 100644 index 0000000..e7e64df Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/codebooknewamp2.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/codebooknewamp2_energy.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/codebooknewamp2_energy.c.o new file mode 100644 index 0000000..b2fcb80 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/codebooknewamp2_energy.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/codec2.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/codec2.c.o new file mode 100644 index 0000000..a4c19da Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/codec2.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/codec2_fft.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/codec2_fft.c.o new file mode 100644 index 0000000..7d51431 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/codec2_fft.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/codec2_fifo.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/codec2_fifo.c.o new file mode 100644 index 0000000..04aede9 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/codec2_fifo.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/cohpsk.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/cohpsk.c.o new file mode 100644 index 0000000..b2ce463 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/cohpsk.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/depend.internal new file mode 100644 index 0000000..ad7aab5 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/depend.internal @@ -0,0 +1,509 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/codec2.dir/HRA_112_112.c.o + /home/sh/Downloads/hackrf/codec2/src/HRA_112_112.c + /home/sh/Downloads/hackrf/codec2/src/HRA_112_112.h +src/CMakeFiles/codec2.dir/HRAa_1536_512.c.o + /home/sh/Downloads/hackrf/codec2/src/HRAa_1536_512.c + /home/sh/Downloads/hackrf/codec2/src/HRAa_1536_512.h +src/CMakeFiles/codec2.dir/HRAb_396_504.c.o + /home/sh/Downloads/hackrf/codec2/src/HRAb_396_504.c + /home/sh/Downloads/hackrf/codec2/src/HRAb_396_504.h +src/CMakeFiles/codec2.dir/H_128_256_5.c.o + /home/sh/Downloads/hackrf/codec2/src/H_128_256_5.c + /home/sh/Downloads/hackrf/codec2/src/H_128_256_5.h +src/CMakeFiles/codec2.dir/H_256_512_4.c.o + /home/sh/Downloads/hackrf/codec2/src/H_256_512_4.c + /home/sh/Downloads/hackrf/codec2/src/H_256_512_4.h +src/CMakeFiles/codec2.dir/H_256_768_22.c.o + /home/sh/Downloads/hackrf/codec2/src/H_256_768_22.c + /home/sh/Downloads/hackrf/codec2/src/H_256_768_22.h +src/CMakeFiles/codec2.dir/codebook.c.o + ../src/defines.h + /home/sh/Downloads/hackrf/codec2/build_linux/src/codebook.c +src/CMakeFiles/codec2.dir/codebookd.c.o + ../src/defines.h + /home/sh/Downloads/hackrf/codec2/build_linux/src/codebookd.c +src/CMakeFiles/codec2.dir/codebookge.c.o + ../src/defines.h + /home/sh/Downloads/hackrf/codec2/build_linux/src/codebookge.c +src/CMakeFiles/codec2.dir/codebookjvm.c.o + ../src/defines.h + /home/sh/Downloads/hackrf/codec2/build_linux/src/codebookjvm.c +src/CMakeFiles/codec2.dir/codebooknewamp1.c.o + ../src/defines.h + /home/sh/Downloads/hackrf/codec2/build_linux/src/codebooknewamp1.c +src/CMakeFiles/codec2.dir/codebooknewamp1_energy.c.o + ../src/defines.h + /home/sh/Downloads/hackrf/codec2/build_linux/src/codebooknewamp1_energy.c +src/CMakeFiles/codec2.dir/codebooknewamp2.c.o + ../src/defines.h + /home/sh/Downloads/hackrf/codec2/build_linux/src/codebooknewamp2.c +src/CMakeFiles/codec2.dir/codebooknewamp2_energy.c.o + ../src/defines.h + /home/sh/Downloads/hackrf/codec2/build_linux/src/codebooknewamp2_energy.c +src/CMakeFiles/codec2.dir/codec2.c.o + /home/sh/Downloads/hackrf/codec2/src/bpf.h + /home/sh/Downloads/hackrf/codec2/src/bpfb.h + /home/sh/Downloads/hackrf/codec2/src/c2wideband.h + /home/sh/Downloads/hackrf/codec2/src/codec2.c + /home/sh/Downloads/hackrf/codec2/src/codec2.h + /home/sh/Downloads/hackrf/codec2/src/codec2_fft.h + /home/sh/Downloads/hackrf/codec2/src/codec2_internal.h + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/debug_alloc.h + /home/sh/Downloads/hackrf/codec2/src/defines.h + /home/sh/Downloads/hackrf/codec2/src/dump.h + /home/sh/Downloads/hackrf/codec2/src/interp.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h + /home/sh/Downloads/hackrf/codec2/src/lpc.h + /home/sh/Downloads/hackrf/codec2/src/lsp.h + /home/sh/Downloads/hackrf/codec2/src/machdep.h + /home/sh/Downloads/hackrf/codec2/src/newamp1.h + /home/sh/Downloads/hackrf/codec2/src/newamp2.h + /home/sh/Downloads/hackrf/codec2/src/nlp.h + /home/sh/Downloads/hackrf/codec2/src/phase.h + /home/sh/Downloads/hackrf/codec2/src/postfilter.h + /home/sh/Downloads/hackrf/codec2/src/quantise.h + /home/sh/Downloads/hackrf/codec2/src/sine.h + codec2/version.h +src/CMakeFiles/codec2.dir/codec2_fft.c.o + /home/sh/Downloads/hackrf/codec2/src/_kiss_fft_guts.h + /home/sh/Downloads/hackrf/codec2/src/codec2_fft.c + /home/sh/Downloads/hackrf/codec2/src/codec2_fft.h + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/debug_alloc.h + /home/sh/Downloads/hackrf/codec2/src/defines.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h +src/CMakeFiles/codec2.dir/codec2_fifo.c.o + /home/sh/Downloads/hackrf/codec2/src/codec2_fifo.c + /home/sh/Downloads/hackrf/codec2/src/codec2_fifo.h +src/CMakeFiles/codec2.dir/cohpsk.c.o + /home/sh/Downloads/hackrf/codec2/src/codec2_cohpsk.h + /home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h + /home/sh/Downloads/hackrf/codec2/src/codec2_fft.h + /home/sh/Downloads/hackrf/codec2/src/cohpsk.c + /home/sh/Downloads/hackrf/codec2/src/cohpsk_defs.h + /home/sh/Downloads/hackrf/codec2/src/cohpsk_internal.h + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/comp_prim.h + /home/sh/Downloads/hackrf/codec2/src/debug_alloc.h + /home/sh/Downloads/hackrf/codec2/src/defines.h + /home/sh/Downloads/hackrf/codec2/src/fdmdv_internal.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h + /home/sh/Downloads/hackrf/codec2/src/linreg.h + /home/sh/Downloads/hackrf/codec2/src/modem_stats.h + /home/sh/Downloads/hackrf/codec2/src/pilots_coh.h + /home/sh/Downloads/hackrf/codec2/src/rn_coh.h + /home/sh/Downloads/hackrf/codec2/src/test_bits_coh.h +src/CMakeFiles/codec2.dir/dump.c.o + /home/sh/Downloads/hackrf/codec2/src/codec2_fft.h + /home/sh/Downloads/hackrf/codec2/src/codec2_internal.h + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/defines.h + /home/sh/Downloads/hackrf/codec2/src/dump.c + /home/sh/Downloads/hackrf/codec2/src/dump.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h + /home/sh/Downloads/hackrf/codec2/src/newamp1.h + /home/sh/Downloads/hackrf/codec2/src/newamp2.h +src/CMakeFiles/codec2.dir/fdmdv.c.o + /home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h + /home/sh/Downloads/hackrf/codec2/src/codec2_fft.h + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/comp_prim.h + /home/sh/Downloads/hackrf/codec2/src/debug_alloc.h + /home/sh/Downloads/hackrf/codec2/src/defines.h + /home/sh/Downloads/hackrf/codec2/src/fdmdv.c + /home/sh/Downloads/hackrf/codec2/src/fdmdv_internal.h + /home/sh/Downloads/hackrf/codec2/src/hanning.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h + /home/sh/Downloads/hackrf/codec2/src/machdep.h + /home/sh/Downloads/hackrf/codec2/src/modem_stats.h + /home/sh/Downloads/hackrf/codec2/src/os.h + /home/sh/Downloads/hackrf/codec2/src/pilot_coeff.h + /home/sh/Downloads/hackrf/codec2/src/rn.h + /home/sh/Downloads/hackrf/codec2/src/rxdec_coeff.h + /home/sh/Downloads/hackrf/codec2/src/test_bits.h +src/CMakeFiles/codec2.dir/filter.c.o + /home/sh/Downloads/hackrf/codec2/src/debug_alloc.h + /home/sh/Downloads/hackrf/codec2/src/filter.c + /home/sh/Downloads/hackrf/codec2/src/filter.h + /home/sh/Downloads/hackrf/codec2/src/filter_coef.h +src/CMakeFiles/codec2.dir/fm.c.o + /home/sh/Downloads/hackrf/codec2/src/codec2_fm.h + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/comp_prim.h + /home/sh/Downloads/hackrf/codec2/src/fm.c + /home/sh/Downloads/hackrf/codec2/src/fm_fir_coeff.h +src/CMakeFiles/codec2.dir/fmfsk.c.o + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/comp_prim.h + /home/sh/Downloads/hackrf/codec2/src/fmfsk.c + /home/sh/Downloads/hackrf/codec2/src/fmfsk.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/modem_probe.h + /home/sh/Downloads/hackrf/codec2/src/modem_stats.h +src/CMakeFiles/codec2.dir/freedv_1600.c.o + /home/sh/Downloads/hackrf/codec2/src/codec2.h + /home/sh/Downloads/hackrf/codec2/src/codec2_cohpsk.h + /home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h + /home/sh/Downloads/hackrf/codec2/src/codec2_fft.h + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/comp_prim.h + /home/sh/Downloads/hackrf/codec2/src/debug_alloc.h + /home/sh/Downloads/hackrf/codec2/src/defines.h + /home/sh/Downloads/hackrf/codec2/src/fdmdv_internal.h + /home/sh/Downloads/hackrf/codec2/src/fmfsk.h + /home/sh/Downloads/hackrf/codec2/src/freedv_1600.c + /home/sh/Downloads/hackrf/codec2/src/freedv_api.h + /home/sh/Downloads/hackrf/codec2/src/freedv_api_internal.h + /home/sh/Downloads/hackrf/codec2/src/fsk.h + /home/sh/Downloads/hackrf/codec2/src/golay23.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h + /home/sh/Downloads/hackrf/codec2/src/modem_stats.h + /home/sh/Downloads/hackrf/codec2/src/varicode.h + codec2/version.h +src/CMakeFiles/codec2.dir/freedv_2020.c.o + /home/sh/Downloads/hackrf/codec2/src/codec2.h + /home/sh/Downloads/hackrf/codec2/src/codec2_cohpsk.h + /home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h + /home/sh/Downloads/hackrf/codec2/src/codec2_ofdm.h + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/comp_prim.h + /home/sh/Downloads/hackrf/codec2/src/debug_alloc.h + /home/sh/Downloads/hackrf/codec2/src/filter.h + /home/sh/Downloads/hackrf/codec2/src/fmfsk.h + /home/sh/Downloads/hackrf/codec2/src/freedv_2020.c + /home/sh/Downloads/hackrf/codec2/src/freedv_api.h + /home/sh/Downloads/hackrf/codec2/src/freedv_api_internal.h + /home/sh/Downloads/hackrf/codec2/src/fsk.h + /home/sh/Downloads/hackrf/codec2/src/gp_interleaver.h + /home/sh/Downloads/hackrf/codec2/src/interldpc.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h + /home/sh/Downloads/hackrf/codec2/src/ldpc_codes.h + /home/sh/Downloads/hackrf/codec2/src/modem_stats.h + /home/sh/Downloads/hackrf/codec2/src/mpdecode_core.h + /home/sh/Downloads/hackrf/codec2/src/ofdm_internal.h + /home/sh/Downloads/hackrf/codec2/src/varicode.h + codec2/version.h +src/CMakeFiles/codec2.dir/freedv_700.c.o + /home/sh/Downloads/hackrf/codec2/src/codec2.h + /home/sh/Downloads/hackrf/codec2/src/codec2_cohpsk.h + /home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h + /home/sh/Downloads/hackrf/codec2/src/codec2_ofdm.h + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/comp_prim.h + /home/sh/Downloads/hackrf/codec2/src/debug_alloc.h + /home/sh/Downloads/hackrf/codec2/src/filter.h + /home/sh/Downloads/hackrf/codec2/src/fmfsk.h + /home/sh/Downloads/hackrf/codec2/src/freedv_700.c + /home/sh/Downloads/hackrf/codec2/src/freedv_api.h + /home/sh/Downloads/hackrf/codec2/src/freedv_api_internal.h + /home/sh/Downloads/hackrf/codec2/src/fsk.h + /home/sh/Downloads/hackrf/codec2/src/gp_interleaver.h + /home/sh/Downloads/hackrf/codec2/src/interldpc.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h + /home/sh/Downloads/hackrf/codec2/src/ldpc_codes.h + /home/sh/Downloads/hackrf/codec2/src/modem_stats.h + /home/sh/Downloads/hackrf/codec2/src/mpdecode_core.h + /home/sh/Downloads/hackrf/codec2/src/ofdm_internal.h + /home/sh/Downloads/hackrf/codec2/src/varicode.h + codec2/version.h +src/CMakeFiles/codec2.dir/freedv_api.c.o + /home/sh/Downloads/hackrf/codec2/src/codec2.h + /home/sh/Downloads/hackrf/codec2/src/codec2_cohpsk.h + /home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h + /home/sh/Downloads/hackrf/codec2/src/codec2_fft.h + /home/sh/Downloads/hackrf/codec2/src/codec2_ofdm.h + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/comp_prim.h + /home/sh/Downloads/hackrf/codec2/src/debug_alloc.h + /home/sh/Downloads/hackrf/codec2/src/defines.h + /home/sh/Downloads/hackrf/codec2/src/fdmdv_internal.h + /home/sh/Downloads/hackrf/codec2/src/filter.h + /home/sh/Downloads/hackrf/codec2/src/fmfsk.h + /home/sh/Downloads/hackrf/codec2/src/freedv_api.c + /home/sh/Downloads/hackrf/codec2/src/freedv_api.h + /home/sh/Downloads/hackrf/codec2/src/freedv_api_internal.h + /home/sh/Downloads/hackrf/codec2/src/freedv_data_channel.h + /home/sh/Downloads/hackrf/codec2/src/freedv_vhf_framing.h + /home/sh/Downloads/hackrf/codec2/src/fsk.h + /home/sh/Downloads/hackrf/codec2/src/gp_interleaver.h + /home/sh/Downloads/hackrf/codec2/src/interldpc.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h + /home/sh/Downloads/hackrf/codec2/src/modem_stats.h + /home/sh/Downloads/hackrf/codec2/src/mpdecode_core.h + /home/sh/Downloads/hackrf/codec2/src/ofdm_internal.h + /home/sh/Downloads/hackrf/codec2/src/varicode.h + codec2/version.h +src/CMakeFiles/codec2.dir/freedv_data_channel.c.o + /home/sh/Downloads/hackrf/codec2/src/freedv_data_channel.c + /home/sh/Downloads/hackrf/codec2/src/freedv_data_channel.h +src/CMakeFiles/codec2.dir/freedv_fsk.c.o + /home/sh/Downloads/hackrf/codec2/src/codec2.h + /home/sh/Downloads/hackrf/codec2/src/codec2_cohpsk.h + /home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h + /home/sh/Downloads/hackrf/codec2/src/codec2_ofdm.h + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/comp_prim.h + /home/sh/Downloads/hackrf/codec2/src/debug_alloc.h + /home/sh/Downloads/hackrf/codec2/src/filter.h + /home/sh/Downloads/hackrf/codec2/src/fmfsk.h + /home/sh/Downloads/hackrf/codec2/src/freedv_api.h + /home/sh/Downloads/hackrf/codec2/src/freedv_api_internal.h + /home/sh/Downloads/hackrf/codec2/src/freedv_data_channel.h + /home/sh/Downloads/hackrf/codec2/src/freedv_fsk.c + /home/sh/Downloads/hackrf/codec2/src/freedv_vhf_framing.h + /home/sh/Downloads/hackrf/codec2/src/fsk.h + /home/sh/Downloads/hackrf/codec2/src/interldpc.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h + /home/sh/Downloads/hackrf/codec2/src/ldpc_codes.h + /home/sh/Downloads/hackrf/codec2/src/modem_stats.h + /home/sh/Downloads/hackrf/codec2/src/mpdecode_core.h + /home/sh/Downloads/hackrf/codec2/src/ofdm_internal.h + /home/sh/Downloads/hackrf/codec2/src/varicode.h + codec2/version.h +src/CMakeFiles/codec2.dir/freedv_vhf_framing.c.o + /home/sh/Downloads/hackrf/codec2/src/codec2_cohpsk.h + /home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/fmfsk.h + /home/sh/Downloads/hackrf/codec2/src/freedv_api.h + /home/sh/Downloads/hackrf/codec2/src/freedv_api_internal.h + /home/sh/Downloads/hackrf/codec2/src/freedv_data_channel.h + /home/sh/Downloads/hackrf/codec2/src/freedv_vhf_framing.c + /home/sh/Downloads/hackrf/codec2/src/freedv_vhf_framing.h + /home/sh/Downloads/hackrf/codec2/src/fsk.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h + /home/sh/Downloads/hackrf/codec2/src/modem_stats.h + /home/sh/Downloads/hackrf/codec2/src/varicode.h +src/CMakeFiles/codec2.dir/fsk.c.o + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/comp_prim.h + /home/sh/Downloads/hackrf/codec2/src/fsk.c + /home/sh/Downloads/hackrf/codec2/src/fsk.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h + /home/sh/Downloads/hackrf/codec2/src/modem_probe.h + /home/sh/Downloads/hackrf/codec2/src/modem_stats.h +src/CMakeFiles/codec2.dir/golay23.c.o + /home/sh/Downloads/hackrf/codec2/src/golay23.c + /home/sh/Downloads/hackrf/codec2/src/golaydectable.h + /home/sh/Downloads/hackrf/codec2/src/golayenctable.h +src/CMakeFiles/codec2.dir/gp_interleaver.c.o + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/gp_interleaver.c + /home/sh/Downloads/hackrf/codec2/src/gp_interleaver.h +src/CMakeFiles/codec2.dir/interldpc.c.o + /home/sh/Downloads/hackrf/codec2/src/codec2_ofdm.h + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/filter.h + /home/sh/Downloads/hackrf/codec2/src/gp_interleaver.h + /home/sh/Downloads/hackrf/codec2/src/interldpc.c + /home/sh/Downloads/hackrf/codec2/src/interldpc.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/modem_stats.h + /home/sh/Downloads/hackrf/codec2/src/mpdecode_core.h + /home/sh/Downloads/hackrf/codec2/src/ofdm_internal.h +src/CMakeFiles/codec2.dir/interp.c.o + /home/sh/Downloads/hackrf/codec2/src/codec2_fft.h + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/defines.h + /home/sh/Downloads/hackrf/codec2/src/interp.c + /home/sh/Downloads/hackrf/codec2/src/interp.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h + /home/sh/Downloads/hackrf/codec2/src/lsp.h + /home/sh/Downloads/hackrf/codec2/src/quantise.h +src/CMakeFiles/codec2.dir/kiss_fft.c.o + /home/sh/Downloads/hackrf/codec2/src/_kiss_fft_guts.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.c + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h +src/CMakeFiles/codec2.dir/kiss_fftr.c.o + /home/sh/Downloads/hackrf/codec2/src/_kiss_fft_guts.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.c + /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h +src/CMakeFiles/codec2.dir/ldpc_codes.c.o + /home/sh/Downloads/hackrf/codec2/src/H2064_516_sparse.h + /home/sh/Downloads/hackrf/codec2/src/HRA_112_112.h + /home/sh/Downloads/hackrf/codec2/src/HRAa_1536_512.h + /home/sh/Downloads/hackrf/codec2/src/HRAb_396_504.h + /home/sh/Downloads/hackrf/codec2/src/H_128_256_5.h + /home/sh/Downloads/hackrf/codec2/src/H_256_512_4.h + /home/sh/Downloads/hackrf/codec2/src/H_256_768_22.h + /home/sh/Downloads/hackrf/codec2/src/codec2_ofdm.h + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/filter.h + /home/sh/Downloads/hackrf/codec2/src/interldpc.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/ldpc_codes.c + /home/sh/Downloads/hackrf/codec2/src/ldpc_codes.h + /home/sh/Downloads/hackrf/codec2/src/modem_stats.h + /home/sh/Downloads/hackrf/codec2/src/mpdecode_core.h + /home/sh/Downloads/hackrf/codec2/src/ofdm_internal.h +src/CMakeFiles/codec2.dir/linreg.c.o + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/comp_prim.h + /home/sh/Downloads/hackrf/codec2/src/linreg.c + /home/sh/Downloads/hackrf/codec2/src/linreg.h +src/CMakeFiles/codec2.dir/lpc.c.o + /home/sh/Downloads/hackrf/codec2/src/defines.h + /home/sh/Downloads/hackrf/codec2/src/lpc.c + /home/sh/Downloads/hackrf/codec2/src/lpc.h +src/CMakeFiles/codec2.dir/lpcnet_freq.c.o + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/lpcnet_freq.c + /home/sh/Downloads/hackrf/codec2/src/lpcnet_freq.h +src/CMakeFiles/codec2.dir/lsp.c.o + /home/sh/Downloads/hackrf/codec2/src/defines.h + /home/sh/Downloads/hackrf/codec2/src/lsp.c + /home/sh/Downloads/hackrf/codec2/src/lsp.h +src/CMakeFiles/codec2.dir/mbest.c.o + /home/sh/Downloads/hackrf/codec2/src/mbest.c + /home/sh/Downloads/hackrf/codec2/src/mbest.h +src/CMakeFiles/codec2.dir/modem_stats.c.o + /home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/modem_stats.c + /home/sh/Downloads/hackrf/codec2/src/modem_stats.h +src/CMakeFiles/codec2.dir/mpdecode_core.c.o + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/debug_alloc.h + /home/sh/Downloads/hackrf/codec2/src/machdep.h + /home/sh/Downloads/hackrf/codec2/src/mpdecode_core.c + /home/sh/Downloads/hackrf/codec2/src/mpdecode_core.h + /home/sh/Downloads/hackrf/codec2/src/phi0.h +src/CMakeFiles/codec2.dir/newamp1.c.o + /home/sh/Downloads/hackrf/codec2/src/codec2_fft.h + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/defines.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h + /home/sh/Downloads/hackrf/codec2/src/mbest.h + /home/sh/Downloads/hackrf/codec2/src/newamp1.c + /home/sh/Downloads/hackrf/codec2/src/newamp1.h + /home/sh/Downloads/hackrf/codec2/src/phase.h + /home/sh/Downloads/hackrf/codec2/src/quantise.h +src/CMakeFiles/codec2.dir/newamp2.c.o + /home/sh/Downloads/hackrf/codec2/src/codec2_fft.h + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/defines.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h + /home/sh/Downloads/hackrf/codec2/src/mbest.h + /home/sh/Downloads/hackrf/codec2/src/newamp1.h + /home/sh/Downloads/hackrf/codec2/src/newamp2.c + /home/sh/Downloads/hackrf/codec2/src/newamp2.h + /home/sh/Downloads/hackrf/codec2/src/phase.h + /home/sh/Downloads/hackrf/codec2/src/quantise.h +src/CMakeFiles/codec2.dir/nlp.c.o + /home/sh/Downloads/hackrf/codec2/src/codec2_fft.h + /home/sh/Downloads/hackrf/codec2/src/codec2_internal.h + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/defines.h + /home/sh/Downloads/hackrf/codec2/src/dump.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h + /home/sh/Downloads/hackrf/codec2/src/machdep.h + /home/sh/Downloads/hackrf/codec2/src/newamp1.h + /home/sh/Downloads/hackrf/codec2/src/newamp2.h + /home/sh/Downloads/hackrf/codec2/src/nlp.c + /home/sh/Downloads/hackrf/codec2/src/nlp.h + /home/sh/Downloads/hackrf/codec2/src/os.h +src/CMakeFiles/codec2.dir/ofdm.c.o + /home/sh/Downloads/hackrf/codec2/src/codec2_ofdm.h + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/debug_alloc.h + /home/sh/Downloads/hackrf/codec2/src/filter.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/machdep.h + /home/sh/Downloads/hackrf/codec2/src/modem_stats.h + /home/sh/Downloads/hackrf/codec2/src/ofdm.c + /home/sh/Downloads/hackrf/codec2/src/ofdm_internal.h + /home/sh/Downloads/hackrf/codec2/src/wval.h +src/CMakeFiles/codec2.dir/ofdm_mode.c.o + /home/sh/Downloads/hackrf/codec2/src/codec2_ofdm.h + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/filter.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/modem_stats.h + /home/sh/Downloads/hackrf/codec2/src/ofdm_internal.h + /home/sh/Downloads/hackrf/codec2/src/ofdm_mode.c + /home/sh/Downloads/hackrf/codec2/src/ofdm_mode.h +src/CMakeFiles/codec2.dir/pack.c.o + /home/sh/Downloads/hackrf/codec2/src/codec2_fft.h + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/defines.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h + /home/sh/Downloads/hackrf/codec2/src/pack.c + /home/sh/Downloads/hackrf/codec2/src/quantise.h +src/CMakeFiles/codec2.dir/phase.c.o + /home/sh/Downloads/hackrf/codec2/src/codec2_fft.h + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/comp_prim.h + /home/sh/Downloads/hackrf/codec2/src/defines.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h + /home/sh/Downloads/hackrf/codec2/src/phase.c + /home/sh/Downloads/hackrf/codec2/src/phase.h + /home/sh/Downloads/hackrf/codec2/src/sine.h +src/CMakeFiles/codec2.dir/phi0.c.o + /home/sh/Downloads/hackrf/codec2/src/phi0.c +src/CMakeFiles/codec2.dir/postfilter.c.o + /home/sh/Downloads/hackrf/codec2/src/codec2_fft.h + /home/sh/Downloads/hackrf/codec2/src/codec2_internal.h + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/defines.h + /home/sh/Downloads/hackrf/codec2/src/dump.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h + /home/sh/Downloads/hackrf/codec2/src/newamp1.h + /home/sh/Downloads/hackrf/codec2/src/newamp2.h + /home/sh/Downloads/hackrf/codec2/src/postfilter.c + /home/sh/Downloads/hackrf/codec2/src/postfilter.h + /home/sh/Downloads/hackrf/codec2/src/sine.h +src/CMakeFiles/codec2.dir/quantise.c.o + /home/sh/Downloads/hackrf/codec2/src/codec2_fft.h + /home/sh/Downloads/hackrf/codec2/src/codec2_internal.h + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/defines.h + /home/sh/Downloads/hackrf/codec2/src/dump.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h + /home/sh/Downloads/hackrf/codec2/src/lpc.h + /home/sh/Downloads/hackrf/codec2/src/lsp.h + /home/sh/Downloads/hackrf/codec2/src/machdep.h + /home/sh/Downloads/hackrf/codec2/src/mbest.h + /home/sh/Downloads/hackrf/codec2/src/newamp1.h + /home/sh/Downloads/hackrf/codec2/src/newamp2.h + /home/sh/Downloads/hackrf/codec2/src/phase.h + /home/sh/Downloads/hackrf/codec2/src/quantise.c + /home/sh/Downloads/hackrf/codec2/src/quantise.h +src/CMakeFiles/codec2.dir/sine.c.o + /home/sh/Downloads/hackrf/codec2/src/codec2_fft.h + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/defines.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h + /home/sh/Downloads/hackrf/codec2/src/sine.c + /home/sh/Downloads/hackrf/codec2/src/sine.h +src/CMakeFiles/codec2.dir/varicode.c.o + /home/sh/Downloads/hackrf/codec2/src/debug_alloc.h + /home/sh/Downloads/hackrf/codec2/src/varicode.c + /home/sh/Downloads/hackrf/codec2/src/varicode.h + /home/sh/Downloads/hackrf/codec2/src/varicode_table.h diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/depend.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/depend.make new file mode 100644 index 0000000..000c29a --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/depend.make @@ -0,0 +1,509 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/codec2.dir/HRA_112_112.c.o: ../src/HRA_112_112.c +src/CMakeFiles/codec2.dir/HRA_112_112.c.o: ../src/HRA_112_112.h + +src/CMakeFiles/codec2.dir/HRAa_1536_512.c.o: ../src/HRAa_1536_512.c +src/CMakeFiles/codec2.dir/HRAa_1536_512.c.o: ../src/HRAa_1536_512.h + +src/CMakeFiles/codec2.dir/HRAb_396_504.c.o: ../src/HRAb_396_504.c +src/CMakeFiles/codec2.dir/HRAb_396_504.c.o: ../src/HRAb_396_504.h + +src/CMakeFiles/codec2.dir/H_128_256_5.c.o: ../src/H_128_256_5.c +src/CMakeFiles/codec2.dir/H_128_256_5.c.o: ../src/H_128_256_5.h + +src/CMakeFiles/codec2.dir/H_256_512_4.c.o: ../src/H_256_512_4.c +src/CMakeFiles/codec2.dir/H_256_512_4.c.o: ../src/H_256_512_4.h + +src/CMakeFiles/codec2.dir/H_256_768_22.c.o: ../src/H_256_768_22.c +src/CMakeFiles/codec2.dir/H_256_768_22.c.o: ../src/H_256_768_22.h + +src/CMakeFiles/codec2.dir/codebook.c.o: ../src/defines.h +src/CMakeFiles/codec2.dir/codebook.c.o: src/codebook.c + +src/CMakeFiles/codec2.dir/codebookd.c.o: ../src/defines.h +src/CMakeFiles/codec2.dir/codebookd.c.o: src/codebookd.c + +src/CMakeFiles/codec2.dir/codebookge.c.o: ../src/defines.h +src/CMakeFiles/codec2.dir/codebookge.c.o: src/codebookge.c + +src/CMakeFiles/codec2.dir/codebookjvm.c.o: ../src/defines.h +src/CMakeFiles/codec2.dir/codebookjvm.c.o: src/codebookjvm.c + +src/CMakeFiles/codec2.dir/codebooknewamp1.c.o: ../src/defines.h +src/CMakeFiles/codec2.dir/codebooknewamp1.c.o: src/codebooknewamp1.c + +src/CMakeFiles/codec2.dir/codebooknewamp1_energy.c.o: ../src/defines.h +src/CMakeFiles/codec2.dir/codebooknewamp1_energy.c.o: src/codebooknewamp1_energy.c + +src/CMakeFiles/codec2.dir/codebooknewamp2.c.o: ../src/defines.h +src/CMakeFiles/codec2.dir/codebooknewamp2.c.o: src/codebooknewamp2.c + +src/CMakeFiles/codec2.dir/codebooknewamp2_energy.c.o: ../src/defines.h +src/CMakeFiles/codec2.dir/codebooknewamp2_energy.c.o: src/codebooknewamp2_energy.c + +src/CMakeFiles/codec2.dir/codec2.c.o: ../src/bpf.h +src/CMakeFiles/codec2.dir/codec2.c.o: ../src/bpfb.h +src/CMakeFiles/codec2.dir/codec2.c.o: ../src/c2wideband.h +src/CMakeFiles/codec2.dir/codec2.c.o: ../src/codec2.c +src/CMakeFiles/codec2.dir/codec2.c.o: ../src/codec2.h +src/CMakeFiles/codec2.dir/codec2.c.o: ../src/codec2_fft.h +src/CMakeFiles/codec2.dir/codec2.c.o: ../src/codec2_internal.h +src/CMakeFiles/codec2.dir/codec2.c.o: ../src/comp.h +src/CMakeFiles/codec2.dir/codec2.c.o: ../src/debug_alloc.h +src/CMakeFiles/codec2.dir/codec2.c.o: ../src/defines.h +src/CMakeFiles/codec2.dir/codec2.c.o: ../src/dump.h +src/CMakeFiles/codec2.dir/codec2.c.o: ../src/interp.h +src/CMakeFiles/codec2.dir/codec2.c.o: ../src/kiss_fft.h +src/CMakeFiles/codec2.dir/codec2.c.o: ../src/kiss_fftr.h +src/CMakeFiles/codec2.dir/codec2.c.o: ../src/lpc.h +src/CMakeFiles/codec2.dir/codec2.c.o: ../src/lsp.h +src/CMakeFiles/codec2.dir/codec2.c.o: ../src/machdep.h +src/CMakeFiles/codec2.dir/codec2.c.o: ../src/newamp1.h +src/CMakeFiles/codec2.dir/codec2.c.o: ../src/newamp2.h +src/CMakeFiles/codec2.dir/codec2.c.o: ../src/nlp.h +src/CMakeFiles/codec2.dir/codec2.c.o: ../src/phase.h +src/CMakeFiles/codec2.dir/codec2.c.o: ../src/postfilter.h +src/CMakeFiles/codec2.dir/codec2.c.o: ../src/quantise.h +src/CMakeFiles/codec2.dir/codec2.c.o: ../src/sine.h +src/CMakeFiles/codec2.dir/codec2.c.o: codec2/version.h + +src/CMakeFiles/codec2.dir/codec2_fft.c.o: ../src/_kiss_fft_guts.h +src/CMakeFiles/codec2.dir/codec2_fft.c.o: ../src/codec2_fft.c +src/CMakeFiles/codec2.dir/codec2_fft.c.o: ../src/codec2_fft.h +src/CMakeFiles/codec2.dir/codec2_fft.c.o: ../src/comp.h +src/CMakeFiles/codec2.dir/codec2_fft.c.o: ../src/debug_alloc.h +src/CMakeFiles/codec2.dir/codec2_fft.c.o: ../src/defines.h +src/CMakeFiles/codec2.dir/codec2_fft.c.o: ../src/kiss_fft.h +src/CMakeFiles/codec2.dir/codec2_fft.c.o: ../src/kiss_fftr.h + +src/CMakeFiles/codec2.dir/codec2_fifo.c.o: ../src/codec2_fifo.c +src/CMakeFiles/codec2.dir/codec2_fifo.c.o: ../src/codec2_fifo.h + +src/CMakeFiles/codec2.dir/cohpsk.c.o: ../src/codec2_cohpsk.h +src/CMakeFiles/codec2.dir/cohpsk.c.o: ../src/codec2_fdmdv.h +src/CMakeFiles/codec2.dir/cohpsk.c.o: ../src/codec2_fft.h +src/CMakeFiles/codec2.dir/cohpsk.c.o: ../src/cohpsk.c +src/CMakeFiles/codec2.dir/cohpsk.c.o: ../src/cohpsk_defs.h +src/CMakeFiles/codec2.dir/cohpsk.c.o: ../src/cohpsk_internal.h +src/CMakeFiles/codec2.dir/cohpsk.c.o: ../src/comp.h +src/CMakeFiles/codec2.dir/cohpsk.c.o: ../src/comp_prim.h +src/CMakeFiles/codec2.dir/cohpsk.c.o: ../src/debug_alloc.h +src/CMakeFiles/codec2.dir/cohpsk.c.o: ../src/defines.h +src/CMakeFiles/codec2.dir/cohpsk.c.o: ../src/fdmdv_internal.h +src/CMakeFiles/codec2.dir/cohpsk.c.o: ../src/kiss_fft.h +src/CMakeFiles/codec2.dir/cohpsk.c.o: ../src/kiss_fftr.h +src/CMakeFiles/codec2.dir/cohpsk.c.o: ../src/linreg.h +src/CMakeFiles/codec2.dir/cohpsk.c.o: ../src/modem_stats.h +src/CMakeFiles/codec2.dir/cohpsk.c.o: ../src/pilots_coh.h +src/CMakeFiles/codec2.dir/cohpsk.c.o: ../src/rn_coh.h +src/CMakeFiles/codec2.dir/cohpsk.c.o: ../src/test_bits_coh.h + +src/CMakeFiles/codec2.dir/dump.c.o: ../src/codec2_fft.h +src/CMakeFiles/codec2.dir/dump.c.o: ../src/codec2_internal.h +src/CMakeFiles/codec2.dir/dump.c.o: ../src/comp.h +src/CMakeFiles/codec2.dir/dump.c.o: ../src/defines.h +src/CMakeFiles/codec2.dir/dump.c.o: ../src/dump.c +src/CMakeFiles/codec2.dir/dump.c.o: ../src/dump.h +src/CMakeFiles/codec2.dir/dump.c.o: ../src/kiss_fft.h +src/CMakeFiles/codec2.dir/dump.c.o: ../src/kiss_fftr.h +src/CMakeFiles/codec2.dir/dump.c.o: ../src/newamp1.h +src/CMakeFiles/codec2.dir/dump.c.o: ../src/newamp2.h + +src/CMakeFiles/codec2.dir/fdmdv.c.o: ../src/codec2_fdmdv.h +src/CMakeFiles/codec2.dir/fdmdv.c.o: ../src/codec2_fft.h +src/CMakeFiles/codec2.dir/fdmdv.c.o: ../src/comp.h +src/CMakeFiles/codec2.dir/fdmdv.c.o: ../src/comp_prim.h +src/CMakeFiles/codec2.dir/fdmdv.c.o: ../src/debug_alloc.h +src/CMakeFiles/codec2.dir/fdmdv.c.o: ../src/defines.h +src/CMakeFiles/codec2.dir/fdmdv.c.o: ../src/fdmdv.c +src/CMakeFiles/codec2.dir/fdmdv.c.o: ../src/fdmdv_internal.h +src/CMakeFiles/codec2.dir/fdmdv.c.o: ../src/hanning.h +src/CMakeFiles/codec2.dir/fdmdv.c.o: ../src/kiss_fft.h +src/CMakeFiles/codec2.dir/fdmdv.c.o: ../src/kiss_fftr.h +src/CMakeFiles/codec2.dir/fdmdv.c.o: ../src/machdep.h +src/CMakeFiles/codec2.dir/fdmdv.c.o: ../src/modem_stats.h +src/CMakeFiles/codec2.dir/fdmdv.c.o: ../src/os.h +src/CMakeFiles/codec2.dir/fdmdv.c.o: ../src/pilot_coeff.h +src/CMakeFiles/codec2.dir/fdmdv.c.o: ../src/rn.h +src/CMakeFiles/codec2.dir/fdmdv.c.o: ../src/rxdec_coeff.h +src/CMakeFiles/codec2.dir/fdmdv.c.o: ../src/test_bits.h + +src/CMakeFiles/codec2.dir/filter.c.o: ../src/debug_alloc.h +src/CMakeFiles/codec2.dir/filter.c.o: ../src/filter.c +src/CMakeFiles/codec2.dir/filter.c.o: ../src/filter.h +src/CMakeFiles/codec2.dir/filter.c.o: ../src/filter_coef.h + +src/CMakeFiles/codec2.dir/fm.c.o: ../src/codec2_fm.h +src/CMakeFiles/codec2.dir/fm.c.o: ../src/comp.h +src/CMakeFiles/codec2.dir/fm.c.o: ../src/comp_prim.h +src/CMakeFiles/codec2.dir/fm.c.o: ../src/fm.c +src/CMakeFiles/codec2.dir/fm.c.o: ../src/fm_fir_coeff.h + +src/CMakeFiles/codec2.dir/fmfsk.c.o: ../src/comp.h +src/CMakeFiles/codec2.dir/fmfsk.c.o: ../src/comp_prim.h +src/CMakeFiles/codec2.dir/fmfsk.c.o: ../src/fmfsk.c +src/CMakeFiles/codec2.dir/fmfsk.c.o: ../src/fmfsk.h +src/CMakeFiles/codec2.dir/fmfsk.c.o: ../src/kiss_fft.h +src/CMakeFiles/codec2.dir/fmfsk.c.o: ../src/modem_probe.h +src/CMakeFiles/codec2.dir/fmfsk.c.o: ../src/modem_stats.h + +src/CMakeFiles/codec2.dir/freedv_1600.c.o: ../src/codec2.h +src/CMakeFiles/codec2.dir/freedv_1600.c.o: ../src/codec2_cohpsk.h +src/CMakeFiles/codec2.dir/freedv_1600.c.o: ../src/codec2_fdmdv.h +src/CMakeFiles/codec2.dir/freedv_1600.c.o: ../src/codec2_fft.h +src/CMakeFiles/codec2.dir/freedv_1600.c.o: ../src/comp.h +src/CMakeFiles/codec2.dir/freedv_1600.c.o: ../src/comp_prim.h +src/CMakeFiles/codec2.dir/freedv_1600.c.o: ../src/debug_alloc.h +src/CMakeFiles/codec2.dir/freedv_1600.c.o: ../src/defines.h +src/CMakeFiles/codec2.dir/freedv_1600.c.o: ../src/fdmdv_internal.h +src/CMakeFiles/codec2.dir/freedv_1600.c.o: ../src/fmfsk.h +src/CMakeFiles/codec2.dir/freedv_1600.c.o: ../src/freedv_1600.c +src/CMakeFiles/codec2.dir/freedv_1600.c.o: ../src/freedv_api.h +src/CMakeFiles/codec2.dir/freedv_1600.c.o: ../src/freedv_api_internal.h +src/CMakeFiles/codec2.dir/freedv_1600.c.o: ../src/fsk.h +src/CMakeFiles/codec2.dir/freedv_1600.c.o: ../src/golay23.h +src/CMakeFiles/codec2.dir/freedv_1600.c.o: ../src/kiss_fft.h +src/CMakeFiles/codec2.dir/freedv_1600.c.o: ../src/kiss_fftr.h +src/CMakeFiles/codec2.dir/freedv_1600.c.o: ../src/modem_stats.h +src/CMakeFiles/codec2.dir/freedv_1600.c.o: ../src/varicode.h +src/CMakeFiles/codec2.dir/freedv_1600.c.o: codec2/version.h + +src/CMakeFiles/codec2.dir/freedv_2020.c.o: ../src/codec2.h +src/CMakeFiles/codec2.dir/freedv_2020.c.o: ../src/codec2_cohpsk.h +src/CMakeFiles/codec2.dir/freedv_2020.c.o: ../src/codec2_fdmdv.h +src/CMakeFiles/codec2.dir/freedv_2020.c.o: ../src/codec2_ofdm.h +src/CMakeFiles/codec2.dir/freedv_2020.c.o: ../src/comp.h +src/CMakeFiles/codec2.dir/freedv_2020.c.o: ../src/comp_prim.h +src/CMakeFiles/codec2.dir/freedv_2020.c.o: ../src/debug_alloc.h +src/CMakeFiles/codec2.dir/freedv_2020.c.o: ../src/filter.h +src/CMakeFiles/codec2.dir/freedv_2020.c.o: ../src/fmfsk.h +src/CMakeFiles/codec2.dir/freedv_2020.c.o: ../src/freedv_2020.c +src/CMakeFiles/codec2.dir/freedv_2020.c.o: ../src/freedv_api.h +src/CMakeFiles/codec2.dir/freedv_2020.c.o: ../src/freedv_api_internal.h +src/CMakeFiles/codec2.dir/freedv_2020.c.o: ../src/fsk.h +src/CMakeFiles/codec2.dir/freedv_2020.c.o: ../src/gp_interleaver.h +src/CMakeFiles/codec2.dir/freedv_2020.c.o: ../src/interldpc.h +src/CMakeFiles/codec2.dir/freedv_2020.c.o: ../src/kiss_fft.h +src/CMakeFiles/codec2.dir/freedv_2020.c.o: ../src/kiss_fftr.h +src/CMakeFiles/codec2.dir/freedv_2020.c.o: ../src/ldpc_codes.h +src/CMakeFiles/codec2.dir/freedv_2020.c.o: ../src/modem_stats.h +src/CMakeFiles/codec2.dir/freedv_2020.c.o: ../src/mpdecode_core.h +src/CMakeFiles/codec2.dir/freedv_2020.c.o: ../src/ofdm_internal.h +src/CMakeFiles/codec2.dir/freedv_2020.c.o: ../src/varicode.h +src/CMakeFiles/codec2.dir/freedv_2020.c.o: codec2/version.h + +src/CMakeFiles/codec2.dir/freedv_700.c.o: ../src/codec2.h +src/CMakeFiles/codec2.dir/freedv_700.c.o: ../src/codec2_cohpsk.h +src/CMakeFiles/codec2.dir/freedv_700.c.o: ../src/codec2_fdmdv.h +src/CMakeFiles/codec2.dir/freedv_700.c.o: ../src/codec2_ofdm.h +src/CMakeFiles/codec2.dir/freedv_700.c.o: ../src/comp.h +src/CMakeFiles/codec2.dir/freedv_700.c.o: ../src/comp_prim.h +src/CMakeFiles/codec2.dir/freedv_700.c.o: ../src/debug_alloc.h +src/CMakeFiles/codec2.dir/freedv_700.c.o: ../src/filter.h +src/CMakeFiles/codec2.dir/freedv_700.c.o: ../src/fmfsk.h +src/CMakeFiles/codec2.dir/freedv_700.c.o: ../src/freedv_700.c +src/CMakeFiles/codec2.dir/freedv_700.c.o: ../src/freedv_api.h +src/CMakeFiles/codec2.dir/freedv_700.c.o: ../src/freedv_api_internal.h +src/CMakeFiles/codec2.dir/freedv_700.c.o: ../src/fsk.h +src/CMakeFiles/codec2.dir/freedv_700.c.o: ../src/gp_interleaver.h +src/CMakeFiles/codec2.dir/freedv_700.c.o: ../src/interldpc.h +src/CMakeFiles/codec2.dir/freedv_700.c.o: ../src/kiss_fft.h +src/CMakeFiles/codec2.dir/freedv_700.c.o: ../src/kiss_fftr.h +src/CMakeFiles/codec2.dir/freedv_700.c.o: ../src/ldpc_codes.h +src/CMakeFiles/codec2.dir/freedv_700.c.o: ../src/modem_stats.h +src/CMakeFiles/codec2.dir/freedv_700.c.o: ../src/mpdecode_core.h +src/CMakeFiles/codec2.dir/freedv_700.c.o: ../src/ofdm_internal.h +src/CMakeFiles/codec2.dir/freedv_700.c.o: ../src/varicode.h +src/CMakeFiles/codec2.dir/freedv_700.c.o: codec2/version.h + +src/CMakeFiles/codec2.dir/freedv_api.c.o: ../src/codec2.h +src/CMakeFiles/codec2.dir/freedv_api.c.o: ../src/codec2_cohpsk.h +src/CMakeFiles/codec2.dir/freedv_api.c.o: ../src/codec2_fdmdv.h +src/CMakeFiles/codec2.dir/freedv_api.c.o: ../src/codec2_fft.h +src/CMakeFiles/codec2.dir/freedv_api.c.o: ../src/codec2_ofdm.h +src/CMakeFiles/codec2.dir/freedv_api.c.o: ../src/comp.h +src/CMakeFiles/codec2.dir/freedv_api.c.o: ../src/comp_prim.h +src/CMakeFiles/codec2.dir/freedv_api.c.o: ../src/debug_alloc.h +src/CMakeFiles/codec2.dir/freedv_api.c.o: ../src/defines.h +src/CMakeFiles/codec2.dir/freedv_api.c.o: ../src/fdmdv_internal.h +src/CMakeFiles/codec2.dir/freedv_api.c.o: ../src/filter.h +src/CMakeFiles/codec2.dir/freedv_api.c.o: ../src/fmfsk.h +src/CMakeFiles/codec2.dir/freedv_api.c.o: ../src/freedv_api.c +src/CMakeFiles/codec2.dir/freedv_api.c.o: ../src/freedv_api.h +src/CMakeFiles/codec2.dir/freedv_api.c.o: ../src/freedv_api_internal.h +src/CMakeFiles/codec2.dir/freedv_api.c.o: ../src/freedv_data_channel.h +src/CMakeFiles/codec2.dir/freedv_api.c.o: ../src/freedv_vhf_framing.h +src/CMakeFiles/codec2.dir/freedv_api.c.o: ../src/fsk.h +src/CMakeFiles/codec2.dir/freedv_api.c.o: ../src/gp_interleaver.h +src/CMakeFiles/codec2.dir/freedv_api.c.o: ../src/interldpc.h +src/CMakeFiles/codec2.dir/freedv_api.c.o: ../src/kiss_fft.h +src/CMakeFiles/codec2.dir/freedv_api.c.o: ../src/kiss_fftr.h +src/CMakeFiles/codec2.dir/freedv_api.c.o: ../src/modem_stats.h +src/CMakeFiles/codec2.dir/freedv_api.c.o: ../src/mpdecode_core.h +src/CMakeFiles/codec2.dir/freedv_api.c.o: ../src/ofdm_internal.h +src/CMakeFiles/codec2.dir/freedv_api.c.o: ../src/varicode.h +src/CMakeFiles/codec2.dir/freedv_api.c.o: codec2/version.h + +src/CMakeFiles/codec2.dir/freedv_data_channel.c.o: ../src/freedv_data_channel.c +src/CMakeFiles/codec2.dir/freedv_data_channel.c.o: ../src/freedv_data_channel.h + +src/CMakeFiles/codec2.dir/freedv_fsk.c.o: ../src/codec2.h +src/CMakeFiles/codec2.dir/freedv_fsk.c.o: ../src/codec2_cohpsk.h +src/CMakeFiles/codec2.dir/freedv_fsk.c.o: ../src/codec2_fdmdv.h +src/CMakeFiles/codec2.dir/freedv_fsk.c.o: ../src/codec2_ofdm.h +src/CMakeFiles/codec2.dir/freedv_fsk.c.o: ../src/comp.h +src/CMakeFiles/codec2.dir/freedv_fsk.c.o: ../src/comp_prim.h +src/CMakeFiles/codec2.dir/freedv_fsk.c.o: ../src/debug_alloc.h +src/CMakeFiles/codec2.dir/freedv_fsk.c.o: ../src/filter.h +src/CMakeFiles/codec2.dir/freedv_fsk.c.o: ../src/fmfsk.h +src/CMakeFiles/codec2.dir/freedv_fsk.c.o: ../src/freedv_api.h +src/CMakeFiles/codec2.dir/freedv_fsk.c.o: ../src/freedv_api_internal.h +src/CMakeFiles/codec2.dir/freedv_fsk.c.o: ../src/freedv_data_channel.h +src/CMakeFiles/codec2.dir/freedv_fsk.c.o: ../src/freedv_fsk.c +src/CMakeFiles/codec2.dir/freedv_fsk.c.o: ../src/freedv_vhf_framing.h +src/CMakeFiles/codec2.dir/freedv_fsk.c.o: ../src/fsk.h +src/CMakeFiles/codec2.dir/freedv_fsk.c.o: ../src/interldpc.h +src/CMakeFiles/codec2.dir/freedv_fsk.c.o: ../src/kiss_fft.h +src/CMakeFiles/codec2.dir/freedv_fsk.c.o: ../src/kiss_fftr.h +src/CMakeFiles/codec2.dir/freedv_fsk.c.o: ../src/ldpc_codes.h +src/CMakeFiles/codec2.dir/freedv_fsk.c.o: ../src/modem_stats.h +src/CMakeFiles/codec2.dir/freedv_fsk.c.o: ../src/mpdecode_core.h +src/CMakeFiles/codec2.dir/freedv_fsk.c.o: ../src/ofdm_internal.h +src/CMakeFiles/codec2.dir/freedv_fsk.c.o: ../src/varicode.h +src/CMakeFiles/codec2.dir/freedv_fsk.c.o: codec2/version.h + +src/CMakeFiles/codec2.dir/freedv_vhf_framing.c.o: ../src/codec2_cohpsk.h +src/CMakeFiles/codec2.dir/freedv_vhf_framing.c.o: ../src/codec2_fdmdv.h +src/CMakeFiles/codec2.dir/freedv_vhf_framing.c.o: ../src/comp.h +src/CMakeFiles/codec2.dir/freedv_vhf_framing.c.o: ../src/fmfsk.h +src/CMakeFiles/codec2.dir/freedv_vhf_framing.c.o: ../src/freedv_api.h +src/CMakeFiles/codec2.dir/freedv_vhf_framing.c.o: ../src/freedv_api_internal.h +src/CMakeFiles/codec2.dir/freedv_vhf_framing.c.o: ../src/freedv_data_channel.h +src/CMakeFiles/codec2.dir/freedv_vhf_framing.c.o: ../src/freedv_vhf_framing.c +src/CMakeFiles/codec2.dir/freedv_vhf_framing.c.o: ../src/freedv_vhf_framing.h +src/CMakeFiles/codec2.dir/freedv_vhf_framing.c.o: ../src/fsk.h +src/CMakeFiles/codec2.dir/freedv_vhf_framing.c.o: ../src/kiss_fft.h +src/CMakeFiles/codec2.dir/freedv_vhf_framing.c.o: ../src/kiss_fftr.h +src/CMakeFiles/codec2.dir/freedv_vhf_framing.c.o: ../src/modem_stats.h +src/CMakeFiles/codec2.dir/freedv_vhf_framing.c.o: ../src/varicode.h + +src/CMakeFiles/codec2.dir/fsk.c.o: ../src/comp.h +src/CMakeFiles/codec2.dir/fsk.c.o: ../src/comp_prim.h +src/CMakeFiles/codec2.dir/fsk.c.o: ../src/fsk.c +src/CMakeFiles/codec2.dir/fsk.c.o: ../src/fsk.h +src/CMakeFiles/codec2.dir/fsk.c.o: ../src/kiss_fft.h +src/CMakeFiles/codec2.dir/fsk.c.o: ../src/kiss_fftr.h +src/CMakeFiles/codec2.dir/fsk.c.o: ../src/modem_probe.h +src/CMakeFiles/codec2.dir/fsk.c.o: ../src/modem_stats.h + +src/CMakeFiles/codec2.dir/golay23.c.o: ../src/golay23.c +src/CMakeFiles/codec2.dir/golay23.c.o: ../src/golaydectable.h +src/CMakeFiles/codec2.dir/golay23.c.o: ../src/golayenctable.h + +src/CMakeFiles/codec2.dir/gp_interleaver.c.o: ../src/comp.h +src/CMakeFiles/codec2.dir/gp_interleaver.c.o: ../src/gp_interleaver.c +src/CMakeFiles/codec2.dir/gp_interleaver.c.o: ../src/gp_interleaver.h + +src/CMakeFiles/codec2.dir/interldpc.c.o: ../src/codec2_ofdm.h +src/CMakeFiles/codec2.dir/interldpc.c.o: ../src/comp.h +src/CMakeFiles/codec2.dir/interldpc.c.o: ../src/filter.h +src/CMakeFiles/codec2.dir/interldpc.c.o: ../src/gp_interleaver.h +src/CMakeFiles/codec2.dir/interldpc.c.o: ../src/interldpc.c +src/CMakeFiles/codec2.dir/interldpc.c.o: ../src/interldpc.h +src/CMakeFiles/codec2.dir/interldpc.c.o: ../src/kiss_fft.h +src/CMakeFiles/codec2.dir/interldpc.c.o: ../src/modem_stats.h +src/CMakeFiles/codec2.dir/interldpc.c.o: ../src/mpdecode_core.h +src/CMakeFiles/codec2.dir/interldpc.c.o: ../src/ofdm_internal.h + +src/CMakeFiles/codec2.dir/interp.c.o: ../src/codec2_fft.h +src/CMakeFiles/codec2.dir/interp.c.o: ../src/comp.h +src/CMakeFiles/codec2.dir/interp.c.o: ../src/defines.h +src/CMakeFiles/codec2.dir/interp.c.o: ../src/interp.c +src/CMakeFiles/codec2.dir/interp.c.o: ../src/interp.h +src/CMakeFiles/codec2.dir/interp.c.o: ../src/kiss_fft.h +src/CMakeFiles/codec2.dir/interp.c.o: ../src/kiss_fftr.h +src/CMakeFiles/codec2.dir/interp.c.o: ../src/lsp.h +src/CMakeFiles/codec2.dir/interp.c.o: ../src/quantise.h + +src/CMakeFiles/codec2.dir/kiss_fft.c.o: ../src/_kiss_fft_guts.h +src/CMakeFiles/codec2.dir/kiss_fft.c.o: ../src/kiss_fft.c +src/CMakeFiles/codec2.dir/kiss_fft.c.o: ../src/kiss_fft.h + +src/CMakeFiles/codec2.dir/kiss_fftr.c.o: ../src/_kiss_fft_guts.h +src/CMakeFiles/codec2.dir/kiss_fftr.c.o: ../src/kiss_fft.h +src/CMakeFiles/codec2.dir/kiss_fftr.c.o: ../src/kiss_fftr.c +src/CMakeFiles/codec2.dir/kiss_fftr.c.o: ../src/kiss_fftr.h + +src/CMakeFiles/codec2.dir/ldpc_codes.c.o: ../src/H2064_516_sparse.h +src/CMakeFiles/codec2.dir/ldpc_codes.c.o: ../src/HRA_112_112.h +src/CMakeFiles/codec2.dir/ldpc_codes.c.o: ../src/HRAa_1536_512.h +src/CMakeFiles/codec2.dir/ldpc_codes.c.o: ../src/HRAb_396_504.h +src/CMakeFiles/codec2.dir/ldpc_codes.c.o: ../src/H_128_256_5.h +src/CMakeFiles/codec2.dir/ldpc_codes.c.o: ../src/H_256_512_4.h +src/CMakeFiles/codec2.dir/ldpc_codes.c.o: ../src/H_256_768_22.h +src/CMakeFiles/codec2.dir/ldpc_codes.c.o: ../src/codec2_ofdm.h +src/CMakeFiles/codec2.dir/ldpc_codes.c.o: ../src/comp.h +src/CMakeFiles/codec2.dir/ldpc_codes.c.o: ../src/filter.h +src/CMakeFiles/codec2.dir/ldpc_codes.c.o: ../src/interldpc.h +src/CMakeFiles/codec2.dir/ldpc_codes.c.o: ../src/kiss_fft.h +src/CMakeFiles/codec2.dir/ldpc_codes.c.o: ../src/ldpc_codes.c +src/CMakeFiles/codec2.dir/ldpc_codes.c.o: ../src/ldpc_codes.h +src/CMakeFiles/codec2.dir/ldpc_codes.c.o: ../src/modem_stats.h +src/CMakeFiles/codec2.dir/ldpc_codes.c.o: ../src/mpdecode_core.h +src/CMakeFiles/codec2.dir/ldpc_codes.c.o: ../src/ofdm_internal.h + +src/CMakeFiles/codec2.dir/linreg.c.o: ../src/comp.h +src/CMakeFiles/codec2.dir/linreg.c.o: ../src/comp_prim.h +src/CMakeFiles/codec2.dir/linreg.c.o: ../src/linreg.c +src/CMakeFiles/codec2.dir/linreg.c.o: ../src/linreg.h + +src/CMakeFiles/codec2.dir/lpc.c.o: ../src/defines.h +src/CMakeFiles/codec2.dir/lpc.c.o: ../src/lpc.c +src/CMakeFiles/codec2.dir/lpc.c.o: ../src/lpc.h + +src/CMakeFiles/codec2.dir/lpcnet_freq.c.o: ../src/comp.h +src/CMakeFiles/codec2.dir/lpcnet_freq.c.o: ../src/lpcnet_freq.c +src/CMakeFiles/codec2.dir/lpcnet_freq.c.o: ../src/lpcnet_freq.h + +src/CMakeFiles/codec2.dir/lsp.c.o: ../src/defines.h +src/CMakeFiles/codec2.dir/lsp.c.o: ../src/lsp.c +src/CMakeFiles/codec2.dir/lsp.c.o: ../src/lsp.h + +src/CMakeFiles/codec2.dir/mbest.c.o: ../src/mbest.c +src/CMakeFiles/codec2.dir/mbest.c.o: ../src/mbest.h + +src/CMakeFiles/codec2.dir/modem_stats.c.o: ../src/codec2_fdmdv.h +src/CMakeFiles/codec2.dir/modem_stats.c.o: ../src/comp.h +src/CMakeFiles/codec2.dir/modem_stats.c.o: ../src/kiss_fft.h +src/CMakeFiles/codec2.dir/modem_stats.c.o: ../src/modem_stats.c +src/CMakeFiles/codec2.dir/modem_stats.c.o: ../src/modem_stats.h + +src/CMakeFiles/codec2.dir/mpdecode_core.c.o: ../src/comp.h +src/CMakeFiles/codec2.dir/mpdecode_core.c.o: ../src/debug_alloc.h +src/CMakeFiles/codec2.dir/mpdecode_core.c.o: ../src/machdep.h +src/CMakeFiles/codec2.dir/mpdecode_core.c.o: ../src/mpdecode_core.c +src/CMakeFiles/codec2.dir/mpdecode_core.c.o: ../src/mpdecode_core.h +src/CMakeFiles/codec2.dir/mpdecode_core.c.o: ../src/phi0.h + +src/CMakeFiles/codec2.dir/newamp1.c.o: ../src/codec2_fft.h +src/CMakeFiles/codec2.dir/newamp1.c.o: ../src/comp.h +src/CMakeFiles/codec2.dir/newamp1.c.o: ../src/defines.h +src/CMakeFiles/codec2.dir/newamp1.c.o: ../src/kiss_fft.h +src/CMakeFiles/codec2.dir/newamp1.c.o: ../src/kiss_fftr.h +src/CMakeFiles/codec2.dir/newamp1.c.o: ../src/mbest.h +src/CMakeFiles/codec2.dir/newamp1.c.o: ../src/newamp1.c +src/CMakeFiles/codec2.dir/newamp1.c.o: ../src/newamp1.h +src/CMakeFiles/codec2.dir/newamp1.c.o: ../src/phase.h +src/CMakeFiles/codec2.dir/newamp1.c.o: ../src/quantise.h + +src/CMakeFiles/codec2.dir/newamp2.c.o: ../src/codec2_fft.h +src/CMakeFiles/codec2.dir/newamp2.c.o: ../src/comp.h +src/CMakeFiles/codec2.dir/newamp2.c.o: ../src/defines.h +src/CMakeFiles/codec2.dir/newamp2.c.o: ../src/kiss_fft.h +src/CMakeFiles/codec2.dir/newamp2.c.o: ../src/kiss_fftr.h +src/CMakeFiles/codec2.dir/newamp2.c.o: ../src/mbest.h +src/CMakeFiles/codec2.dir/newamp2.c.o: ../src/newamp1.h +src/CMakeFiles/codec2.dir/newamp2.c.o: ../src/newamp2.c +src/CMakeFiles/codec2.dir/newamp2.c.o: ../src/newamp2.h +src/CMakeFiles/codec2.dir/newamp2.c.o: ../src/phase.h +src/CMakeFiles/codec2.dir/newamp2.c.o: ../src/quantise.h + +src/CMakeFiles/codec2.dir/nlp.c.o: ../src/codec2_fft.h +src/CMakeFiles/codec2.dir/nlp.c.o: ../src/codec2_internal.h +src/CMakeFiles/codec2.dir/nlp.c.o: ../src/comp.h +src/CMakeFiles/codec2.dir/nlp.c.o: ../src/defines.h +src/CMakeFiles/codec2.dir/nlp.c.o: ../src/dump.h +src/CMakeFiles/codec2.dir/nlp.c.o: ../src/kiss_fft.h +src/CMakeFiles/codec2.dir/nlp.c.o: ../src/kiss_fftr.h +src/CMakeFiles/codec2.dir/nlp.c.o: ../src/machdep.h +src/CMakeFiles/codec2.dir/nlp.c.o: ../src/newamp1.h +src/CMakeFiles/codec2.dir/nlp.c.o: ../src/newamp2.h +src/CMakeFiles/codec2.dir/nlp.c.o: ../src/nlp.c +src/CMakeFiles/codec2.dir/nlp.c.o: ../src/nlp.h +src/CMakeFiles/codec2.dir/nlp.c.o: ../src/os.h + +src/CMakeFiles/codec2.dir/ofdm.c.o: ../src/codec2_ofdm.h +src/CMakeFiles/codec2.dir/ofdm.c.o: ../src/comp.h +src/CMakeFiles/codec2.dir/ofdm.c.o: ../src/debug_alloc.h +src/CMakeFiles/codec2.dir/ofdm.c.o: ../src/filter.h +src/CMakeFiles/codec2.dir/ofdm.c.o: ../src/kiss_fft.h +src/CMakeFiles/codec2.dir/ofdm.c.o: ../src/machdep.h +src/CMakeFiles/codec2.dir/ofdm.c.o: ../src/modem_stats.h +src/CMakeFiles/codec2.dir/ofdm.c.o: ../src/ofdm.c +src/CMakeFiles/codec2.dir/ofdm.c.o: ../src/ofdm_internal.h +src/CMakeFiles/codec2.dir/ofdm.c.o: ../src/wval.h + +src/CMakeFiles/codec2.dir/ofdm_mode.c.o: ../src/codec2_ofdm.h +src/CMakeFiles/codec2.dir/ofdm_mode.c.o: ../src/comp.h +src/CMakeFiles/codec2.dir/ofdm_mode.c.o: ../src/filter.h +src/CMakeFiles/codec2.dir/ofdm_mode.c.o: ../src/kiss_fft.h +src/CMakeFiles/codec2.dir/ofdm_mode.c.o: ../src/modem_stats.h +src/CMakeFiles/codec2.dir/ofdm_mode.c.o: ../src/ofdm_internal.h +src/CMakeFiles/codec2.dir/ofdm_mode.c.o: ../src/ofdm_mode.c +src/CMakeFiles/codec2.dir/ofdm_mode.c.o: ../src/ofdm_mode.h + +src/CMakeFiles/codec2.dir/pack.c.o: ../src/codec2_fft.h +src/CMakeFiles/codec2.dir/pack.c.o: ../src/comp.h +src/CMakeFiles/codec2.dir/pack.c.o: ../src/defines.h +src/CMakeFiles/codec2.dir/pack.c.o: ../src/kiss_fft.h +src/CMakeFiles/codec2.dir/pack.c.o: ../src/kiss_fftr.h +src/CMakeFiles/codec2.dir/pack.c.o: ../src/pack.c +src/CMakeFiles/codec2.dir/pack.c.o: ../src/quantise.h + +src/CMakeFiles/codec2.dir/phase.c.o: ../src/codec2_fft.h +src/CMakeFiles/codec2.dir/phase.c.o: ../src/comp.h +src/CMakeFiles/codec2.dir/phase.c.o: ../src/comp_prim.h +src/CMakeFiles/codec2.dir/phase.c.o: ../src/defines.h +src/CMakeFiles/codec2.dir/phase.c.o: ../src/kiss_fft.h +src/CMakeFiles/codec2.dir/phase.c.o: ../src/kiss_fftr.h +src/CMakeFiles/codec2.dir/phase.c.o: ../src/phase.c +src/CMakeFiles/codec2.dir/phase.c.o: ../src/phase.h +src/CMakeFiles/codec2.dir/phase.c.o: ../src/sine.h + +src/CMakeFiles/codec2.dir/phi0.c.o: ../src/phi0.c + +src/CMakeFiles/codec2.dir/postfilter.c.o: ../src/codec2_fft.h +src/CMakeFiles/codec2.dir/postfilter.c.o: ../src/codec2_internal.h +src/CMakeFiles/codec2.dir/postfilter.c.o: ../src/comp.h +src/CMakeFiles/codec2.dir/postfilter.c.o: ../src/defines.h +src/CMakeFiles/codec2.dir/postfilter.c.o: ../src/dump.h +src/CMakeFiles/codec2.dir/postfilter.c.o: ../src/kiss_fft.h +src/CMakeFiles/codec2.dir/postfilter.c.o: ../src/kiss_fftr.h +src/CMakeFiles/codec2.dir/postfilter.c.o: ../src/newamp1.h +src/CMakeFiles/codec2.dir/postfilter.c.o: ../src/newamp2.h +src/CMakeFiles/codec2.dir/postfilter.c.o: ../src/postfilter.c +src/CMakeFiles/codec2.dir/postfilter.c.o: ../src/postfilter.h +src/CMakeFiles/codec2.dir/postfilter.c.o: ../src/sine.h + +src/CMakeFiles/codec2.dir/quantise.c.o: ../src/codec2_fft.h +src/CMakeFiles/codec2.dir/quantise.c.o: ../src/codec2_internal.h +src/CMakeFiles/codec2.dir/quantise.c.o: ../src/comp.h +src/CMakeFiles/codec2.dir/quantise.c.o: ../src/defines.h +src/CMakeFiles/codec2.dir/quantise.c.o: ../src/dump.h +src/CMakeFiles/codec2.dir/quantise.c.o: ../src/kiss_fft.h +src/CMakeFiles/codec2.dir/quantise.c.o: ../src/kiss_fftr.h +src/CMakeFiles/codec2.dir/quantise.c.o: ../src/lpc.h +src/CMakeFiles/codec2.dir/quantise.c.o: ../src/lsp.h +src/CMakeFiles/codec2.dir/quantise.c.o: ../src/machdep.h +src/CMakeFiles/codec2.dir/quantise.c.o: ../src/mbest.h +src/CMakeFiles/codec2.dir/quantise.c.o: ../src/newamp1.h +src/CMakeFiles/codec2.dir/quantise.c.o: ../src/newamp2.h +src/CMakeFiles/codec2.dir/quantise.c.o: ../src/phase.h +src/CMakeFiles/codec2.dir/quantise.c.o: ../src/quantise.c +src/CMakeFiles/codec2.dir/quantise.c.o: ../src/quantise.h + +src/CMakeFiles/codec2.dir/sine.c.o: ../src/codec2_fft.h +src/CMakeFiles/codec2.dir/sine.c.o: ../src/comp.h +src/CMakeFiles/codec2.dir/sine.c.o: ../src/defines.h +src/CMakeFiles/codec2.dir/sine.c.o: ../src/kiss_fft.h +src/CMakeFiles/codec2.dir/sine.c.o: ../src/kiss_fftr.h +src/CMakeFiles/codec2.dir/sine.c.o: ../src/sine.c +src/CMakeFiles/codec2.dir/sine.c.o: ../src/sine.h + +src/CMakeFiles/codec2.dir/varicode.c.o: ../src/debug_alloc.h +src/CMakeFiles/codec2.dir/varicode.c.o: ../src/varicode.c +src/CMakeFiles/codec2.dir/varicode.c.o: ../src/varicode.h +src/CMakeFiles/codec2.dir/varicode.c.o: ../src/varicode_table.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/dump.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/dump.c.o new file mode 100644 index 0000000..b07af43 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/dump.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/fdmdv.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/fdmdv.c.o new file mode 100644 index 0000000..02a53a4 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/fdmdv.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/filter.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/filter.c.o new file mode 100644 index 0000000..bf21519 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/filter.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/flags.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/flags.make new file mode 100644 index 0000000..beeb0c6 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -fPIC + +C_DEFINES = -DGIT_HASH=\"df2ed16c\" -D_GNU_SOURCE=1 -Dcodec2_EXPORTS + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/src + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/fm.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/fm.c.o new file mode 100644 index 0000000..e0b74e4 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/fm.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/fmfsk.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/fmfsk.c.o new file mode 100644 index 0000000..bbb0342 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/fmfsk.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/freedv_1600.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/freedv_1600.c.o new file mode 100644 index 0000000..d58cc14 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/freedv_1600.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/freedv_2020.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/freedv_2020.c.o new file mode 100644 index 0000000..3306701 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/freedv_2020.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/freedv_700.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/freedv_700.c.o new file mode 100644 index 0000000..f057779 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/freedv_700.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/freedv_api.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/freedv_api.c.o new file mode 100644 index 0000000..216e7b7 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/freedv_api.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/freedv_data_channel.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/freedv_data_channel.c.o new file mode 100644 index 0000000..6c51f55 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/freedv_data_channel.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/freedv_fsk.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/freedv_fsk.c.o new file mode 100644 index 0000000..648e87f Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/freedv_fsk.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/freedv_vhf_framing.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/freedv_vhf_framing.c.o new file mode 100644 index 0000000..995d6fd Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/freedv_vhf_framing.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/fsk.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/fsk.c.o new file mode 100644 index 0000000..fa3896f Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/fsk.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/golay23.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/golay23.c.o new file mode 100644 index 0000000..663127b Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/golay23.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/gp_interleaver.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/gp_interleaver.c.o new file mode 100644 index 0000000..5d703d7 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/gp_interleaver.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/interldpc.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/interldpc.c.o new file mode 100644 index 0000000..d73cc95 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/interldpc.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/interp.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/interp.c.o new file mode 100644 index 0000000..1ed97dc Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/interp.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/kiss_fft.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/kiss_fft.c.o new file mode 100644 index 0000000..cf7c5c8 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/kiss_fft.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/kiss_fftr.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/kiss_fftr.c.o new file mode 100644 index 0000000..03157f4 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/kiss_fftr.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/ldpc_codes.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/ldpc_codes.c.o new file mode 100644 index 0000000..98ac251 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/ldpc_codes.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/link.txt b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/link.txt new file mode 100644 index 0000000..42907e5 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -fPIC -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -shared -Wl,-soname,libcodec2.so.0.9 -o libcodec2.so.0.9 CMakeFiles/codec2.dir/dump.c.o CMakeFiles/codec2.dir/lpc.c.o CMakeFiles/codec2.dir/nlp.c.o CMakeFiles/codec2.dir/postfilter.c.o CMakeFiles/codec2.dir/sine.c.o CMakeFiles/codec2.dir/codec2.c.o CMakeFiles/codec2.dir/codec2_fft.c.o CMakeFiles/codec2.dir/cohpsk.c.o CMakeFiles/codec2.dir/codec2_fifo.c.o CMakeFiles/codec2.dir/fdmdv.c.o CMakeFiles/codec2.dir/fm.c.o CMakeFiles/codec2.dir/fsk.c.o CMakeFiles/codec2.dir/fmfsk.c.o CMakeFiles/codec2.dir/kiss_fft.c.o CMakeFiles/codec2.dir/kiss_fftr.c.o CMakeFiles/codec2.dir/linreg.c.o CMakeFiles/codec2.dir/interp.c.o CMakeFiles/codec2.dir/lsp.c.o CMakeFiles/codec2.dir/mbest.c.o CMakeFiles/codec2.dir/newamp1.c.o CMakeFiles/codec2.dir/newamp2.c.o CMakeFiles/codec2.dir/ofdm.c.o CMakeFiles/codec2.dir/ofdm_mode.c.o CMakeFiles/codec2.dir/phase.c.o CMakeFiles/codec2.dir/quantise.c.o CMakeFiles/codec2.dir/pack.c.o CMakeFiles/codec2.dir/codebook.c.o CMakeFiles/codec2.dir/codebookd.c.o CMakeFiles/codec2.dir/codebookjvm.c.o CMakeFiles/codec2.dir/codebookge.c.o CMakeFiles/codec2.dir/codebooknewamp1.c.o CMakeFiles/codec2.dir/codebooknewamp1_energy.c.o CMakeFiles/codec2.dir/codebooknewamp2.c.o CMakeFiles/codec2.dir/codebooknewamp2_energy.c.o CMakeFiles/codec2.dir/golay23.c.o CMakeFiles/codec2.dir/freedv_api.c.o CMakeFiles/codec2.dir/freedv_1600.c.o CMakeFiles/codec2.dir/freedv_700.c.o CMakeFiles/codec2.dir/freedv_2020.c.o CMakeFiles/codec2.dir/freedv_fsk.c.o CMakeFiles/codec2.dir/freedv_vhf_framing.c.o CMakeFiles/codec2.dir/freedv_data_channel.c.o CMakeFiles/codec2.dir/varicode.c.o CMakeFiles/codec2.dir/modem_stats.c.o CMakeFiles/codec2.dir/mpdecode_core.c.o CMakeFiles/codec2.dir/phi0.c.o CMakeFiles/codec2.dir/gp_interleaver.c.o CMakeFiles/codec2.dir/interldpc.c.o CMakeFiles/codec2.dir/filter.c.o CMakeFiles/codec2.dir/HRA_112_112.c.o CMakeFiles/codec2.dir/HRAb_396_504.c.o CMakeFiles/codec2.dir/H_256_768_22.c.o CMakeFiles/codec2.dir/H_256_512_4.c.o CMakeFiles/codec2.dir/HRAa_1536_512.c.o CMakeFiles/codec2.dir/H_128_256_5.c.o CMakeFiles/codec2.dir/ldpc_codes.c.o CMakeFiles/codec2.dir/lpcnet_freq.c.o -lm diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/linreg.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/linreg.c.o new file mode 100644 index 0000000..6d3de85 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/linreg.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/lpc.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/lpc.c.o new file mode 100644 index 0000000..b893792 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/lpc.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/lpcnet_freq.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/lpcnet_freq.c.o new file mode 100644 index 0000000..e128456 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/lpcnet_freq.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/lsp.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/lsp.c.o new file mode 100644 index 0000000..e5608ec Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/lsp.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/mbest.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/mbest.c.o new file mode 100644 index 0000000..0b73cca Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/mbest.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/modem_stats.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/modem_stats.c.o new file mode 100644 index 0000000..dfb3230 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/modem_stats.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/mpdecode_core.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/mpdecode_core.c.o new file mode 100644 index 0000000..833198d Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/mpdecode_core.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/newamp1.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/newamp1.c.o new file mode 100644 index 0000000..cfffc44 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/newamp1.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/newamp2.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/newamp2.c.o new file mode 100644 index 0000000..96bc2c5 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/newamp2.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/nlp.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/nlp.c.o new file mode 100644 index 0000000..b41cd43 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/nlp.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/ofdm.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/ofdm.c.o new file mode 100644 index 0000000..677392f Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/ofdm.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/ofdm_mode.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/ofdm_mode.c.o new file mode 100644 index 0000000..ed5f418 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/ofdm_mode.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/pack.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/pack.c.o new file mode 100644 index 0000000..0c7718a Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/pack.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/phase.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/phase.c.o new file mode 100644 index 0000000..e61f3f2 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/phase.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/phi0.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/phi0.c.o new file mode 100644 index 0000000..fc56b5a Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/phi0.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/postfilter.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/postfilter.c.o new file mode 100644 index 0000000..e63a089 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/postfilter.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/progress.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/progress.make new file mode 100644 index 0000000..4b1ae3c --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/progress.make @@ -0,0 +1,67 @@ +CMAKE_PROGRESS_1 = 4 +CMAKE_PROGRESS_2 = +CMAKE_PROGRESS_3 = +CMAKE_PROGRESS_4 = 5 +CMAKE_PROGRESS_5 = +CMAKE_PROGRESS_6 = +CMAKE_PROGRESS_7 = 6 +CMAKE_PROGRESS_8 = +CMAKE_PROGRESS_9 = +CMAKE_PROGRESS_10 = 7 +CMAKE_PROGRESS_11 = +CMAKE_PROGRESS_12 = +CMAKE_PROGRESS_13 = 8 +CMAKE_PROGRESS_14 = +CMAKE_PROGRESS_15 = +CMAKE_PROGRESS_16 = 9 +CMAKE_PROGRESS_17 = +CMAKE_PROGRESS_18 = +CMAKE_PROGRESS_19 = 10 +CMAKE_PROGRESS_20 = +CMAKE_PROGRESS_21 = +CMAKE_PROGRESS_22 = 11 +CMAKE_PROGRESS_23 = +CMAKE_PROGRESS_24 = +CMAKE_PROGRESS_25 = 12 +CMAKE_PROGRESS_26 = +CMAKE_PROGRESS_27 = +CMAKE_PROGRESS_28 = 13 +CMAKE_PROGRESS_29 = +CMAKE_PROGRESS_30 = +CMAKE_PROGRESS_31 = 14 +CMAKE_PROGRESS_32 = +CMAKE_PROGRESS_33 = +CMAKE_PROGRESS_34 = 15 +CMAKE_PROGRESS_35 = +CMAKE_PROGRESS_36 = +CMAKE_PROGRESS_37 = 16 +CMAKE_PROGRESS_38 = +CMAKE_PROGRESS_39 = +CMAKE_PROGRESS_40 = +CMAKE_PROGRESS_41 = 17 +CMAKE_PROGRESS_42 = +CMAKE_PROGRESS_43 = +CMAKE_PROGRESS_44 = 18 +CMAKE_PROGRESS_45 = +CMAKE_PROGRESS_46 = +CMAKE_PROGRESS_47 = 19 +CMAKE_PROGRESS_48 = +CMAKE_PROGRESS_49 = +CMAKE_PROGRESS_50 = 20 +CMAKE_PROGRESS_51 = +CMAKE_PROGRESS_52 = +CMAKE_PROGRESS_53 = 21 +CMAKE_PROGRESS_54 = +CMAKE_PROGRESS_55 = +CMAKE_PROGRESS_56 = 22 +CMAKE_PROGRESS_57 = +CMAKE_PROGRESS_58 = +CMAKE_PROGRESS_59 = 23 +CMAKE_PROGRESS_60 = +CMAKE_PROGRESS_61 = +CMAKE_PROGRESS_62 = 24 +CMAKE_PROGRESS_63 = +CMAKE_PROGRESS_64 = +CMAKE_PROGRESS_65 = 25 +CMAKE_PROGRESS_66 = + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/quantise.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/quantise.c.o new file mode 100644 index 0000000..25d6ccb Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/quantise.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/sine.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/sine.c.o new file mode 100644 index 0000000..56b7916 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/sine.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/varicode.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/varicode.c.o new file mode 100644 index 0000000..893983a Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/codec2.dir/varicode.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_ch.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_ch.dir/C.includecache new file mode 100644 index 0000000..7a5b213 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_ch.dir/C.includecache @@ -0,0 +1,82 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +/home/sh/Downloads/hackrf/codec2/src/codec2_cohpsk.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +modem_stats.h +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h + +/home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +modem_stats.h +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h + +/home/sh/Downloads/hackrf/codec2/src/cohpsk_ch.c +assert.h +- +stdio.h +- +stdlib.h +- +string.h +- +math.h +- +errno.h +- +codec2_fdmdv.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h +codec2_cohpsk.h +/home/sh/Downloads/hackrf/codec2/src/codec2_cohpsk.h +comp_prim.h +/home/sh/Downloads/hackrf/codec2/src/comp_prim.h +noise_samples.h +/home/sh/Downloads/hackrf/codec2/src/noise_samples.h +ht_coeff.h +/home/sh/Downloads/hackrf/codec2/src/ht_coeff.h +ssbfilt_coeff.h +/home/sh/Downloads/hackrf/codec2/src/ssbfilt_coeff.h +debug_alloc.h +/home/sh/Downloads/hackrf/codec2/src/debug_alloc.h + +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/comp_prim.h + +/home/sh/Downloads/hackrf/codec2/src/debug_alloc.h +stdio.h +- + +/home/sh/Downloads/hackrf/codec2/src/ht_coeff.h + +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h +stdlib.h +- +stdio.h +- +math.h +- +string.h +- +xmmintrin.h +- +sys/types.h +- + +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/src/noise_samples.h + +/home/sh/Downloads/hackrf/codec2/src/ssbfilt_coeff.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_ch.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_ch.dir/DependInfo.cmake new file mode 100644 index 0000000..e8abeb9 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_ch.dir/DependInfo.cmake @@ -0,0 +1,29 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/src/cohpsk_ch.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/cohpsk_ch.dir/cohpsk_ch.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "GIT_HASH=\"df2ed16c\"" + "_GNU_SOURCE=1" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/DependInfo.cmake" + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_ch.dir/build.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_ch.dir/build.make new file mode 100644 index 0000000..7cf9467 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_ch.dir/build.make @@ -0,0 +1,99 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include src/CMakeFiles/cohpsk_ch.dir/depend.make + +# Include the progress variables for this target. +include src/CMakeFiles/cohpsk_ch.dir/progress.make + +# Include the compile flags for this target's objects. +include src/CMakeFiles/cohpsk_ch.dir/flags.make + +src/CMakeFiles/cohpsk_ch.dir/cohpsk_ch.c.o: src/CMakeFiles/cohpsk_ch.dir/flags.make +src/CMakeFiles/cohpsk_ch.dir/cohpsk_ch.c.o: ../src/cohpsk_ch.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object src/CMakeFiles/cohpsk_ch.dir/cohpsk_ch.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/cohpsk_ch.dir/cohpsk_ch.c.o -c /home/sh/Downloads/hackrf/codec2/src/cohpsk_ch.c + +src/CMakeFiles/cohpsk_ch.dir/cohpsk_ch.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/cohpsk_ch.dir/cohpsk_ch.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/cohpsk_ch.c > CMakeFiles/cohpsk_ch.dir/cohpsk_ch.c.i + +src/CMakeFiles/cohpsk_ch.dir/cohpsk_ch.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/cohpsk_ch.dir/cohpsk_ch.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/cohpsk_ch.c -o CMakeFiles/cohpsk_ch.dir/cohpsk_ch.c.s + +# Object files for target cohpsk_ch +cohpsk_ch_OBJECTS = \ +"CMakeFiles/cohpsk_ch.dir/cohpsk_ch.c.o" + +# External object files for target cohpsk_ch +cohpsk_ch_EXTERNAL_OBJECTS = + +src/cohpsk_ch: src/CMakeFiles/cohpsk_ch.dir/cohpsk_ch.c.o +src/cohpsk_ch: src/CMakeFiles/cohpsk_ch.dir/build.make +src/cohpsk_ch: src/libcodec2.so.0.9 +src/cohpsk_ch: src/CMakeFiles/cohpsk_ch.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking C executable cohpsk_ch" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/cohpsk_ch.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +src/CMakeFiles/cohpsk_ch.dir/build: src/cohpsk_ch + +.PHONY : src/CMakeFiles/cohpsk_ch.dir/build + +src/CMakeFiles/cohpsk_ch.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -P CMakeFiles/cohpsk_ch.dir/cmake_clean.cmake +.PHONY : src/CMakeFiles/cohpsk_ch.dir/clean + +src/CMakeFiles/cohpsk_ch.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/src /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/src /home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/cohpsk_ch.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : src/CMakeFiles/cohpsk_ch.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_ch.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_ch.dir/cmake_clean.cmake new file mode 100644 index 0000000..4bbc4d1 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_ch.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +file(REMOVE_RECURSE + "CMakeFiles/cohpsk_ch.dir/cohpsk_ch.c.o" + "cohpsk_ch.pdb" + "cohpsk_ch" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/cohpsk_ch.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_ch.dir/cohpsk_ch.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_ch.dir/cohpsk_ch.c.o new file mode 100644 index 0000000..9212559 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_ch.dir/cohpsk_ch.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_ch.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_ch.dir/depend.internal new file mode 100644 index 0000000..d4ca748 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_ch.dir/depend.internal @@ -0,0 +1,15 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/cohpsk_ch.dir/cohpsk_ch.c.o + /home/sh/Downloads/hackrf/codec2/src/codec2_cohpsk.h + /home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h + /home/sh/Downloads/hackrf/codec2/src/cohpsk_ch.c + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/comp_prim.h + /home/sh/Downloads/hackrf/codec2/src/debug_alloc.h + /home/sh/Downloads/hackrf/codec2/src/ht_coeff.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/modem_stats.h + /home/sh/Downloads/hackrf/codec2/src/noise_samples.h + /home/sh/Downloads/hackrf/codec2/src/ssbfilt_coeff.h diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_ch.dir/depend.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_ch.dir/depend.make new file mode 100644 index 0000000..3ae42b0 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_ch.dir/depend.make @@ -0,0 +1,15 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/cohpsk_ch.dir/cohpsk_ch.c.o: ../src/codec2_cohpsk.h +src/CMakeFiles/cohpsk_ch.dir/cohpsk_ch.c.o: ../src/codec2_fdmdv.h +src/CMakeFiles/cohpsk_ch.dir/cohpsk_ch.c.o: ../src/cohpsk_ch.c +src/CMakeFiles/cohpsk_ch.dir/cohpsk_ch.c.o: ../src/comp.h +src/CMakeFiles/cohpsk_ch.dir/cohpsk_ch.c.o: ../src/comp_prim.h +src/CMakeFiles/cohpsk_ch.dir/cohpsk_ch.c.o: ../src/debug_alloc.h +src/CMakeFiles/cohpsk_ch.dir/cohpsk_ch.c.o: ../src/ht_coeff.h +src/CMakeFiles/cohpsk_ch.dir/cohpsk_ch.c.o: ../src/kiss_fft.h +src/CMakeFiles/cohpsk_ch.dir/cohpsk_ch.c.o: ../src/modem_stats.h +src/CMakeFiles/cohpsk_ch.dir/cohpsk_ch.c.o: ../src/noise_samples.h +src/CMakeFiles/cohpsk_ch.dir/cohpsk_ch.c.o: ../src/ssbfilt_coeff.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_ch.dir/flags.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_ch.dir/flags.make new file mode 100644 index 0000000..814242c --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_ch.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DGIT_HASH=\"df2ed16c\" -D_GNU_SOURCE=1 + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/src + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_ch.dir/link.txt b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_ch.dir/link.txt new file mode 100644 index 0000000..c1fc932 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_ch.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/cohpsk_ch.dir/cohpsk_ch.c.o -o cohpsk_ch -Wl,-rpath,/home/sh/Downloads/hackrf/codec2/build_linux/src -lm libcodec2.so.0.9 -lm diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_ch.dir/progress.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_ch.dir/progress.make new file mode 100644 index 0000000..fd38c8b --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_ch.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = +CMAKE_PROGRESS_2 = 26 + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_demod.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_demod.dir/C.includecache new file mode 100644 index 0000000..933620d --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_demod.dir/C.includecache @@ -0,0 +1,122 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +/home/sh/Downloads/hackrf/codec2/src/codec2_cohpsk.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +modem_stats.h +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h + +/home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +modem_stats.h +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h + +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.h +assert.h +- +stdlib.h +- +stdio.h +- +string.h +- +math.h +- +fdv_arm_math.h +/home/sh/Downloads/hackrf/codec2/src/fdv_arm_math.h +defines.h +/home/sh/Downloads/hackrf/codec2/src/defines.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +kiss_fftr.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/src/cohpsk_defs.h + +/home/sh/Downloads/hackrf/codec2/src/cohpsk_demod.c +assert.h +- +stdio.h +- +stdlib.h +- +string.h +- +math.h +- +errno.h +- +getopt.h +- +codec2_cohpsk.h +/home/sh/Downloads/hackrf/codec2/src/codec2_cohpsk.h +cohpsk_defs.h +/home/sh/Downloads/hackrf/codec2/src/cohpsk_defs.h +cohpsk_internal.h +/home/sh/Downloads/hackrf/codec2/src/cohpsk_internal.h +codec2_fdmdv.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h +octave.h +/home/sh/Downloads/hackrf/codec2/src/octave.h +debug_alloc.h +/home/sh/Downloads/hackrf/codec2/src/debug_alloc.h + +/home/sh/Downloads/hackrf/codec2/src/cohpsk_internal.h +fdmdv_internal.h +/home/sh/Downloads/hackrf/codec2/src/fdmdv_internal.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/debug_alloc.h +stdio.h +- + +/home/sh/Downloads/hackrf/codec2/src/defines.h + +/home/sh/Downloads/hackrf/codec2/src/fdmdv_internal.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +codec2_fdmdv.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h +codec2_fft.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.h + +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h +stdlib.h +- +stdio.h +- +math.h +- +string.h +- +xmmintrin.h +- +sys/types.h +- + +/home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/src/octave.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_demod.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_demod.dir/DependInfo.cmake new file mode 100644 index 0000000..1babc51 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_demod.dir/DependInfo.cmake @@ -0,0 +1,30 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/src/cohpsk_demod.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/cohpsk_demod.dir/cohpsk_demod.c.o" + "/home/sh/Downloads/hackrf/codec2/src/octave.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/cohpsk_demod.dir/octave.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "GIT_HASH=\"df2ed16c\"" + "_GNU_SOURCE=1" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/DependInfo.cmake" + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_demod.dir/build.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_demod.dir/build.make new file mode 100644 index 0000000..702663b --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_demod.dir/build.make @@ -0,0 +1,114 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include src/CMakeFiles/cohpsk_demod.dir/depend.make + +# Include the progress variables for this target. +include src/CMakeFiles/cohpsk_demod.dir/progress.make + +# Include the compile flags for this target's objects. +include src/CMakeFiles/cohpsk_demod.dir/flags.make + +src/CMakeFiles/cohpsk_demod.dir/cohpsk_demod.c.o: src/CMakeFiles/cohpsk_demod.dir/flags.make +src/CMakeFiles/cohpsk_demod.dir/cohpsk_demod.c.o: ../src/cohpsk_demod.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object src/CMakeFiles/cohpsk_demod.dir/cohpsk_demod.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/cohpsk_demod.dir/cohpsk_demod.c.o -c /home/sh/Downloads/hackrf/codec2/src/cohpsk_demod.c + +src/CMakeFiles/cohpsk_demod.dir/cohpsk_demod.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/cohpsk_demod.dir/cohpsk_demod.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/cohpsk_demod.c > CMakeFiles/cohpsk_demod.dir/cohpsk_demod.c.i + +src/CMakeFiles/cohpsk_demod.dir/cohpsk_demod.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/cohpsk_demod.dir/cohpsk_demod.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/cohpsk_demod.c -o CMakeFiles/cohpsk_demod.dir/cohpsk_demod.c.s + +src/CMakeFiles/cohpsk_demod.dir/octave.c.o: src/CMakeFiles/cohpsk_demod.dir/flags.make +src/CMakeFiles/cohpsk_demod.dir/octave.c.o: ../src/octave.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Building C object src/CMakeFiles/cohpsk_demod.dir/octave.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/cohpsk_demod.dir/octave.c.o -c /home/sh/Downloads/hackrf/codec2/src/octave.c + +src/CMakeFiles/cohpsk_demod.dir/octave.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/cohpsk_demod.dir/octave.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/octave.c > CMakeFiles/cohpsk_demod.dir/octave.c.i + +src/CMakeFiles/cohpsk_demod.dir/octave.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/cohpsk_demod.dir/octave.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/octave.c -o CMakeFiles/cohpsk_demod.dir/octave.c.s + +# Object files for target cohpsk_demod +cohpsk_demod_OBJECTS = \ +"CMakeFiles/cohpsk_demod.dir/cohpsk_demod.c.o" \ +"CMakeFiles/cohpsk_demod.dir/octave.c.o" + +# External object files for target cohpsk_demod +cohpsk_demod_EXTERNAL_OBJECTS = + +src/cohpsk_demod: src/CMakeFiles/cohpsk_demod.dir/cohpsk_demod.c.o +src/cohpsk_demod: src/CMakeFiles/cohpsk_demod.dir/octave.c.o +src/cohpsk_demod: src/CMakeFiles/cohpsk_demod.dir/build.make +src/cohpsk_demod: src/libcodec2.so.0.9 +src/cohpsk_demod: src/CMakeFiles/cohpsk_demod.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_3) "Linking C executable cohpsk_demod" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/cohpsk_demod.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +src/CMakeFiles/cohpsk_demod.dir/build: src/cohpsk_demod + +.PHONY : src/CMakeFiles/cohpsk_demod.dir/build + +src/CMakeFiles/cohpsk_demod.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -P CMakeFiles/cohpsk_demod.dir/cmake_clean.cmake +.PHONY : src/CMakeFiles/cohpsk_demod.dir/clean + +src/CMakeFiles/cohpsk_demod.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/src /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/src /home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/cohpsk_demod.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : src/CMakeFiles/cohpsk_demod.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_demod.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_demod.dir/cmake_clean.cmake new file mode 100644 index 0000000..2cf2673 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_demod.dir/cmake_clean.cmake @@ -0,0 +1,11 @@ +file(REMOVE_RECURSE + "CMakeFiles/cohpsk_demod.dir/cohpsk_demod.c.o" + "CMakeFiles/cohpsk_demod.dir/octave.c.o" + "cohpsk_demod.pdb" + "cohpsk_demod" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/cohpsk_demod.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_demod.dir/cohpsk_demod.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_demod.dir/cohpsk_demod.c.o new file mode 100644 index 0000000..957da9d Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_demod.dir/cohpsk_demod.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_demod.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_demod.dir/depend.internal new file mode 100644 index 0000000..55641f4 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_demod.dir/depend.internal @@ -0,0 +1,22 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/cohpsk_demod.dir/cohpsk_demod.c.o + /home/sh/Downloads/hackrf/codec2/src/codec2_cohpsk.h + /home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h + /home/sh/Downloads/hackrf/codec2/src/codec2_fft.h + /home/sh/Downloads/hackrf/codec2/src/cohpsk_defs.h + /home/sh/Downloads/hackrf/codec2/src/cohpsk_demod.c + /home/sh/Downloads/hackrf/codec2/src/cohpsk_internal.h + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/debug_alloc.h + /home/sh/Downloads/hackrf/codec2/src/defines.h + /home/sh/Downloads/hackrf/codec2/src/fdmdv_internal.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h + /home/sh/Downloads/hackrf/codec2/src/modem_stats.h + /home/sh/Downloads/hackrf/codec2/src/octave.h +src/CMakeFiles/cohpsk_demod.dir/octave.c.o + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/octave.c + /home/sh/Downloads/hackrf/codec2/src/octave.h diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_demod.dir/depend.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_demod.dir/depend.make new file mode 100644 index 0000000..7a07110 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_demod.dir/depend.make @@ -0,0 +1,22 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/cohpsk_demod.dir/cohpsk_demod.c.o: ../src/codec2_cohpsk.h +src/CMakeFiles/cohpsk_demod.dir/cohpsk_demod.c.o: ../src/codec2_fdmdv.h +src/CMakeFiles/cohpsk_demod.dir/cohpsk_demod.c.o: ../src/codec2_fft.h +src/CMakeFiles/cohpsk_demod.dir/cohpsk_demod.c.o: ../src/cohpsk_defs.h +src/CMakeFiles/cohpsk_demod.dir/cohpsk_demod.c.o: ../src/cohpsk_demod.c +src/CMakeFiles/cohpsk_demod.dir/cohpsk_demod.c.o: ../src/cohpsk_internal.h +src/CMakeFiles/cohpsk_demod.dir/cohpsk_demod.c.o: ../src/comp.h +src/CMakeFiles/cohpsk_demod.dir/cohpsk_demod.c.o: ../src/debug_alloc.h +src/CMakeFiles/cohpsk_demod.dir/cohpsk_demod.c.o: ../src/defines.h +src/CMakeFiles/cohpsk_demod.dir/cohpsk_demod.c.o: ../src/fdmdv_internal.h +src/CMakeFiles/cohpsk_demod.dir/cohpsk_demod.c.o: ../src/kiss_fft.h +src/CMakeFiles/cohpsk_demod.dir/cohpsk_demod.c.o: ../src/kiss_fftr.h +src/CMakeFiles/cohpsk_demod.dir/cohpsk_demod.c.o: ../src/modem_stats.h +src/CMakeFiles/cohpsk_demod.dir/cohpsk_demod.c.o: ../src/octave.h + +src/CMakeFiles/cohpsk_demod.dir/octave.c.o: ../src/comp.h +src/CMakeFiles/cohpsk_demod.dir/octave.c.o: ../src/octave.c +src/CMakeFiles/cohpsk_demod.dir/octave.c.o: ../src/octave.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_demod.dir/flags.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_demod.dir/flags.make new file mode 100644 index 0000000..814242c --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_demod.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DGIT_HASH=\"df2ed16c\" -D_GNU_SOURCE=1 + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/src + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_demod.dir/link.txt b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_demod.dir/link.txt new file mode 100644 index 0000000..05018be --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_demod.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/cohpsk_demod.dir/cohpsk_demod.c.o CMakeFiles/cohpsk_demod.dir/octave.c.o -o cohpsk_demod -Wl,-rpath,/home/sh/Downloads/hackrf/codec2/build_linux/src -lm libcodec2.so.0.9 -lm diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_demod.dir/octave.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_demod.dir/octave.c.o new file mode 100644 index 0000000..889ec3b Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_demod.dir/octave.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_demod.dir/progress.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_demod.dir/progress.make new file mode 100644 index 0000000..495f144 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_demod.dir/progress.make @@ -0,0 +1,4 @@ +CMAKE_PROGRESS_1 = +CMAKE_PROGRESS_2 = +CMAKE_PROGRESS_3 = 27 + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_get_test_bits.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_get_test_bits.dir/C.includecache new file mode 100644 index 0000000..b59ce0e --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_get_test_bits.dir/C.includecache @@ -0,0 +1,56 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +/home/sh/Downloads/hackrf/codec2/src/codec2_cohpsk.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +modem_stats.h +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h + +/home/sh/Downloads/hackrf/codec2/src/cohpsk_get_test_bits.c +assert.h +- +stdio.h +- +stdlib.h +- +string.h +- +math.h +- +errno.h +- +codec2_cohpsk.h +/home/sh/Downloads/hackrf/codec2/src/codec2_cohpsk.h +test_bits_coh.h +/home/sh/Downloads/hackrf/codec2/src/test_bits_coh.h + +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h +stdlib.h +- +stdio.h +- +math.h +- +string.h +- +xmmintrin.h +- +sys/types.h +- + +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/src/test_bits_coh.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_get_test_bits.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_get_test_bits.dir/DependInfo.cmake new file mode 100644 index 0000000..59c5fdb --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_get_test_bits.dir/DependInfo.cmake @@ -0,0 +1,29 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/src/cohpsk_get_test_bits.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/cohpsk_get_test_bits.dir/cohpsk_get_test_bits.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "GIT_HASH=\"df2ed16c\"" + "_GNU_SOURCE=1" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/DependInfo.cmake" + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_get_test_bits.dir/build.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_get_test_bits.dir/build.make new file mode 100644 index 0000000..ebccb5a --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_get_test_bits.dir/build.make @@ -0,0 +1,99 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include src/CMakeFiles/cohpsk_get_test_bits.dir/depend.make + +# Include the progress variables for this target. +include src/CMakeFiles/cohpsk_get_test_bits.dir/progress.make + +# Include the compile flags for this target's objects. +include src/CMakeFiles/cohpsk_get_test_bits.dir/flags.make + +src/CMakeFiles/cohpsk_get_test_bits.dir/cohpsk_get_test_bits.c.o: src/CMakeFiles/cohpsk_get_test_bits.dir/flags.make +src/CMakeFiles/cohpsk_get_test_bits.dir/cohpsk_get_test_bits.c.o: ../src/cohpsk_get_test_bits.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object src/CMakeFiles/cohpsk_get_test_bits.dir/cohpsk_get_test_bits.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/cohpsk_get_test_bits.dir/cohpsk_get_test_bits.c.o -c /home/sh/Downloads/hackrf/codec2/src/cohpsk_get_test_bits.c + +src/CMakeFiles/cohpsk_get_test_bits.dir/cohpsk_get_test_bits.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/cohpsk_get_test_bits.dir/cohpsk_get_test_bits.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/cohpsk_get_test_bits.c > CMakeFiles/cohpsk_get_test_bits.dir/cohpsk_get_test_bits.c.i + +src/CMakeFiles/cohpsk_get_test_bits.dir/cohpsk_get_test_bits.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/cohpsk_get_test_bits.dir/cohpsk_get_test_bits.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/cohpsk_get_test_bits.c -o CMakeFiles/cohpsk_get_test_bits.dir/cohpsk_get_test_bits.c.s + +# Object files for target cohpsk_get_test_bits +cohpsk_get_test_bits_OBJECTS = \ +"CMakeFiles/cohpsk_get_test_bits.dir/cohpsk_get_test_bits.c.o" + +# External object files for target cohpsk_get_test_bits +cohpsk_get_test_bits_EXTERNAL_OBJECTS = + +src/cohpsk_get_test_bits: src/CMakeFiles/cohpsk_get_test_bits.dir/cohpsk_get_test_bits.c.o +src/cohpsk_get_test_bits: src/CMakeFiles/cohpsk_get_test_bits.dir/build.make +src/cohpsk_get_test_bits: src/libcodec2.so.0.9 +src/cohpsk_get_test_bits: src/CMakeFiles/cohpsk_get_test_bits.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking C executable cohpsk_get_test_bits" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/cohpsk_get_test_bits.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +src/CMakeFiles/cohpsk_get_test_bits.dir/build: src/cohpsk_get_test_bits + +.PHONY : src/CMakeFiles/cohpsk_get_test_bits.dir/build + +src/CMakeFiles/cohpsk_get_test_bits.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -P CMakeFiles/cohpsk_get_test_bits.dir/cmake_clean.cmake +.PHONY : src/CMakeFiles/cohpsk_get_test_bits.dir/clean + +src/CMakeFiles/cohpsk_get_test_bits.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/src /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/src /home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/cohpsk_get_test_bits.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : src/CMakeFiles/cohpsk_get_test_bits.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_get_test_bits.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_get_test_bits.dir/cmake_clean.cmake new file mode 100644 index 0000000..732686c --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_get_test_bits.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +file(REMOVE_RECURSE + "CMakeFiles/cohpsk_get_test_bits.dir/cohpsk_get_test_bits.c.o" + "cohpsk_get_test_bits.pdb" + "cohpsk_get_test_bits" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/cohpsk_get_test_bits.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_get_test_bits.dir/cohpsk_get_test_bits.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_get_test_bits.dir/cohpsk_get_test_bits.c.o new file mode 100644 index 0000000..e97e745 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_get_test_bits.dir/cohpsk_get_test_bits.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_get_test_bits.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_get_test_bits.dir/depend.internal new file mode 100644 index 0000000..afc303a --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_get_test_bits.dir/depend.internal @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/cohpsk_get_test_bits.dir/cohpsk_get_test_bits.c.o + /home/sh/Downloads/hackrf/codec2/src/codec2_cohpsk.h + /home/sh/Downloads/hackrf/codec2/src/cohpsk_get_test_bits.c + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/modem_stats.h + /home/sh/Downloads/hackrf/codec2/src/test_bits_coh.h diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_get_test_bits.dir/depend.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_get_test_bits.dir/depend.make new file mode 100644 index 0000000..6263482 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_get_test_bits.dir/depend.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/cohpsk_get_test_bits.dir/cohpsk_get_test_bits.c.o: ../src/codec2_cohpsk.h +src/CMakeFiles/cohpsk_get_test_bits.dir/cohpsk_get_test_bits.c.o: ../src/cohpsk_get_test_bits.c +src/CMakeFiles/cohpsk_get_test_bits.dir/cohpsk_get_test_bits.c.o: ../src/comp.h +src/CMakeFiles/cohpsk_get_test_bits.dir/cohpsk_get_test_bits.c.o: ../src/kiss_fft.h +src/CMakeFiles/cohpsk_get_test_bits.dir/cohpsk_get_test_bits.c.o: ../src/modem_stats.h +src/CMakeFiles/cohpsk_get_test_bits.dir/cohpsk_get_test_bits.c.o: ../src/test_bits_coh.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_get_test_bits.dir/flags.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_get_test_bits.dir/flags.make new file mode 100644 index 0000000..814242c --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_get_test_bits.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DGIT_HASH=\"df2ed16c\" -D_GNU_SOURCE=1 + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/src + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_get_test_bits.dir/link.txt b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_get_test_bits.dir/link.txt new file mode 100644 index 0000000..1e70a4f --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_get_test_bits.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/cohpsk_get_test_bits.dir/cohpsk_get_test_bits.c.o -o cohpsk_get_test_bits -Wl,-rpath,/home/sh/Downloads/hackrf/codec2/build_linux/src -lm libcodec2.so.0.9 -lm diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_get_test_bits.dir/progress.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_get_test_bits.dir/progress.make new file mode 100644 index 0000000..6c287f1 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_get_test_bits.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = +CMAKE_PROGRESS_2 = + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_mod.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_mod.dir/C.includecache new file mode 100644 index 0000000..4d8aa9d --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_mod.dir/C.includecache @@ -0,0 +1,60 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +/home/sh/Downloads/hackrf/codec2/src/codec2_cohpsk.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +modem_stats.h +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h + +/home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +modem_stats.h +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h + +/home/sh/Downloads/hackrf/codec2/src/cohpsk_mod.c +assert.h +- +stdio.h +- +stdlib.h +- +string.h +- +math.h +- +errno.h +- +codec2_cohpsk.h +/home/sh/Downloads/hackrf/codec2/src/codec2_cohpsk.h +codec2_fdmdv.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h + +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h +stdlib.h +- +stdio.h +- +math.h +- +string.h +- +xmmintrin.h +- +sys/types.h +- + +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_mod.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_mod.dir/DependInfo.cmake new file mode 100644 index 0000000..0b73bc1 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_mod.dir/DependInfo.cmake @@ -0,0 +1,29 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/src/cohpsk_mod.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/cohpsk_mod.dir/cohpsk_mod.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "GIT_HASH=\"df2ed16c\"" + "_GNU_SOURCE=1" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/DependInfo.cmake" + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_mod.dir/build.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_mod.dir/build.make new file mode 100644 index 0000000..fcacbb6 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_mod.dir/build.make @@ -0,0 +1,99 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include src/CMakeFiles/cohpsk_mod.dir/depend.make + +# Include the progress variables for this target. +include src/CMakeFiles/cohpsk_mod.dir/progress.make + +# Include the compile flags for this target's objects. +include src/CMakeFiles/cohpsk_mod.dir/flags.make + +src/CMakeFiles/cohpsk_mod.dir/cohpsk_mod.c.o: src/CMakeFiles/cohpsk_mod.dir/flags.make +src/CMakeFiles/cohpsk_mod.dir/cohpsk_mod.c.o: ../src/cohpsk_mod.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object src/CMakeFiles/cohpsk_mod.dir/cohpsk_mod.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/cohpsk_mod.dir/cohpsk_mod.c.o -c /home/sh/Downloads/hackrf/codec2/src/cohpsk_mod.c + +src/CMakeFiles/cohpsk_mod.dir/cohpsk_mod.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/cohpsk_mod.dir/cohpsk_mod.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/cohpsk_mod.c > CMakeFiles/cohpsk_mod.dir/cohpsk_mod.c.i + +src/CMakeFiles/cohpsk_mod.dir/cohpsk_mod.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/cohpsk_mod.dir/cohpsk_mod.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/cohpsk_mod.c -o CMakeFiles/cohpsk_mod.dir/cohpsk_mod.c.s + +# Object files for target cohpsk_mod +cohpsk_mod_OBJECTS = \ +"CMakeFiles/cohpsk_mod.dir/cohpsk_mod.c.o" + +# External object files for target cohpsk_mod +cohpsk_mod_EXTERNAL_OBJECTS = + +src/cohpsk_mod: src/CMakeFiles/cohpsk_mod.dir/cohpsk_mod.c.o +src/cohpsk_mod: src/CMakeFiles/cohpsk_mod.dir/build.make +src/cohpsk_mod: src/libcodec2.so.0.9 +src/cohpsk_mod: src/CMakeFiles/cohpsk_mod.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking C executable cohpsk_mod" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/cohpsk_mod.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +src/CMakeFiles/cohpsk_mod.dir/build: src/cohpsk_mod + +.PHONY : src/CMakeFiles/cohpsk_mod.dir/build + +src/CMakeFiles/cohpsk_mod.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -P CMakeFiles/cohpsk_mod.dir/cmake_clean.cmake +.PHONY : src/CMakeFiles/cohpsk_mod.dir/clean + +src/CMakeFiles/cohpsk_mod.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/src /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/src /home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/cohpsk_mod.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : src/CMakeFiles/cohpsk_mod.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_mod.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_mod.dir/cmake_clean.cmake new file mode 100644 index 0000000..16d8622 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_mod.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +file(REMOVE_RECURSE + "CMakeFiles/cohpsk_mod.dir/cohpsk_mod.c.o" + "cohpsk_mod.pdb" + "cohpsk_mod" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/cohpsk_mod.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_mod.dir/cohpsk_mod.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_mod.dir/cohpsk_mod.c.o new file mode 100644 index 0000000..d36e252 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_mod.dir/cohpsk_mod.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_mod.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_mod.dir/depend.internal new file mode 100644 index 0000000..1f3641d --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_mod.dir/depend.internal @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/cohpsk_mod.dir/cohpsk_mod.c.o + /home/sh/Downloads/hackrf/codec2/src/codec2_cohpsk.h + /home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h + /home/sh/Downloads/hackrf/codec2/src/cohpsk_mod.c + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/modem_stats.h diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_mod.dir/depend.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_mod.dir/depend.make new file mode 100644 index 0000000..fc40e17 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_mod.dir/depend.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/cohpsk_mod.dir/cohpsk_mod.c.o: ../src/codec2_cohpsk.h +src/CMakeFiles/cohpsk_mod.dir/cohpsk_mod.c.o: ../src/codec2_fdmdv.h +src/CMakeFiles/cohpsk_mod.dir/cohpsk_mod.c.o: ../src/cohpsk_mod.c +src/CMakeFiles/cohpsk_mod.dir/cohpsk_mod.c.o: ../src/comp.h +src/CMakeFiles/cohpsk_mod.dir/cohpsk_mod.c.o: ../src/kiss_fft.h +src/CMakeFiles/cohpsk_mod.dir/cohpsk_mod.c.o: ../src/modem_stats.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_mod.dir/flags.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_mod.dir/flags.make new file mode 100644 index 0000000..814242c --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_mod.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DGIT_HASH=\"df2ed16c\" -D_GNU_SOURCE=1 + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/src + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_mod.dir/link.txt b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_mod.dir/link.txt new file mode 100644 index 0000000..287a9a6 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_mod.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/cohpsk_mod.dir/cohpsk_mod.c.o -o cohpsk_mod -Wl,-rpath,/home/sh/Downloads/hackrf/codec2/build_linux/src -lm libcodec2.so.0.9 -lm diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_mod.dir/progress.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_mod.dir/progress.make new file mode 100644 index 0000000..70f7710 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_mod.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = 28 +CMAKE_PROGRESS_2 = + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_put_test_bits.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_put_test_bits.dir/C.includecache new file mode 100644 index 0000000..7e31c34 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_put_test_bits.dir/C.includecache @@ -0,0 +1,58 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +/home/sh/Downloads/hackrf/codec2/src/codec2_cohpsk.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +modem_stats.h +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h + +/home/sh/Downloads/hackrf/codec2/src/cohpsk_put_test_bits.c +assert.h +- +stdio.h +- +stdlib.h +- +string.h +- +math.h +- +errno.h +- +codec2_cohpsk.h +/home/sh/Downloads/hackrf/codec2/src/codec2_cohpsk.h +octave.h +/home/sh/Downloads/hackrf/codec2/src/octave.h + +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h +stdlib.h +- +stdio.h +- +math.h +- +string.h +- +xmmintrin.h +- +sys/types.h +- + +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/src/octave.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_put_test_bits.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_put_test_bits.dir/DependInfo.cmake new file mode 100644 index 0000000..22d8bb2 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_put_test_bits.dir/DependInfo.cmake @@ -0,0 +1,30 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/src/cohpsk_put_test_bits.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/cohpsk_put_test_bits.dir/cohpsk_put_test_bits.c.o" + "/home/sh/Downloads/hackrf/codec2/src/octave.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/cohpsk_put_test_bits.dir/octave.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "GIT_HASH=\"df2ed16c\"" + "_GNU_SOURCE=1" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/DependInfo.cmake" + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_put_test_bits.dir/build.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_put_test_bits.dir/build.make new file mode 100644 index 0000000..989be14 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_put_test_bits.dir/build.make @@ -0,0 +1,114 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include src/CMakeFiles/cohpsk_put_test_bits.dir/depend.make + +# Include the progress variables for this target. +include src/CMakeFiles/cohpsk_put_test_bits.dir/progress.make + +# Include the compile flags for this target's objects. +include src/CMakeFiles/cohpsk_put_test_bits.dir/flags.make + +src/CMakeFiles/cohpsk_put_test_bits.dir/cohpsk_put_test_bits.c.o: src/CMakeFiles/cohpsk_put_test_bits.dir/flags.make +src/CMakeFiles/cohpsk_put_test_bits.dir/cohpsk_put_test_bits.c.o: ../src/cohpsk_put_test_bits.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object src/CMakeFiles/cohpsk_put_test_bits.dir/cohpsk_put_test_bits.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/cohpsk_put_test_bits.dir/cohpsk_put_test_bits.c.o -c /home/sh/Downloads/hackrf/codec2/src/cohpsk_put_test_bits.c + +src/CMakeFiles/cohpsk_put_test_bits.dir/cohpsk_put_test_bits.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/cohpsk_put_test_bits.dir/cohpsk_put_test_bits.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/cohpsk_put_test_bits.c > CMakeFiles/cohpsk_put_test_bits.dir/cohpsk_put_test_bits.c.i + +src/CMakeFiles/cohpsk_put_test_bits.dir/cohpsk_put_test_bits.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/cohpsk_put_test_bits.dir/cohpsk_put_test_bits.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/cohpsk_put_test_bits.c -o CMakeFiles/cohpsk_put_test_bits.dir/cohpsk_put_test_bits.c.s + +src/CMakeFiles/cohpsk_put_test_bits.dir/octave.c.o: src/CMakeFiles/cohpsk_put_test_bits.dir/flags.make +src/CMakeFiles/cohpsk_put_test_bits.dir/octave.c.o: ../src/octave.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Building C object src/CMakeFiles/cohpsk_put_test_bits.dir/octave.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/cohpsk_put_test_bits.dir/octave.c.o -c /home/sh/Downloads/hackrf/codec2/src/octave.c + +src/CMakeFiles/cohpsk_put_test_bits.dir/octave.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/cohpsk_put_test_bits.dir/octave.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/octave.c > CMakeFiles/cohpsk_put_test_bits.dir/octave.c.i + +src/CMakeFiles/cohpsk_put_test_bits.dir/octave.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/cohpsk_put_test_bits.dir/octave.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/octave.c -o CMakeFiles/cohpsk_put_test_bits.dir/octave.c.s + +# Object files for target cohpsk_put_test_bits +cohpsk_put_test_bits_OBJECTS = \ +"CMakeFiles/cohpsk_put_test_bits.dir/cohpsk_put_test_bits.c.o" \ +"CMakeFiles/cohpsk_put_test_bits.dir/octave.c.o" + +# External object files for target cohpsk_put_test_bits +cohpsk_put_test_bits_EXTERNAL_OBJECTS = + +src/cohpsk_put_test_bits: src/CMakeFiles/cohpsk_put_test_bits.dir/cohpsk_put_test_bits.c.o +src/cohpsk_put_test_bits: src/CMakeFiles/cohpsk_put_test_bits.dir/octave.c.o +src/cohpsk_put_test_bits: src/CMakeFiles/cohpsk_put_test_bits.dir/build.make +src/cohpsk_put_test_bits: src/libcodec2.so.0.9 +src/cohpsk_put_test_bits: src/CMakeFiles/cohpsk_put_test_bits.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_3) "Linking C executable cohpsk_put_test_bits" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/cohpsk_put_test_bits.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +src/CMakeFiles/cohpsk_put_test_bits.dir/build: src/cohpsk_put_test_bits + +.PHONY : src/CMakeFiles/cohpsk_put_test_bits.dir/build + +src/CMakeFiles/cohpsk_put_test_bits.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -P CMakeFiles/cohpsk_put_test_bits.dir/cmake_clean.cmake +.PHONY : src/CMakeFiles/cohpsk_put_test_bits.dir/clean + +src/CMakeFiles/cohpsk_put_test_bits.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/src /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/src /home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/cohpsk_put_test_bits.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : src/CMakeFiles/cohpsk_put_test_bits.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_put_test_bits.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_put_test_bits.dir/cmake_clean.cmake new file mode 100644 index 0000000..59ef2e4 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_put_test_bits.dir/cmake_clean.cmake @@ -0,0 +1,11 @@ +file(REMOVE_RECURSE + "CMakeFiles/cohpsk_put_test_bits.dir/cohpsk_put_test_bits.c.o" + "CMakeFiles/cohpsk_put_test_bits.dir/octave.c.o" + "cohpsk_put_test_bits.pdb" + "cohpsk_put_test_bits" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/cohpsk_put_test_bits.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_put_test_bits.dir/cohpsk_put_test_bits.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_put_test_bits.dir/cohpsk_put_test_bits.c.o new file mode 100644 index 0000000..24f9764 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_put_test_bits.dir/cohpsk_put_test_bits.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_put_test_bits.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_put_test_bits.dir/depend.internal new file mode 100644 index 0000000..26e151a --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_put_test_bits.dir/depend.internal @@ -0,0 +1,14 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/cohpsk_put_test_bits.dir/cohpsk_put_test_bits.c.o + /home/sh/Downloads/hackrf/codec2/src/codec2_cohpsk.h + /home/sh/Downloads/hackrf/codec2/src/cohpsk_put_test_bits.c + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/modem_stats.h + /home/sh/Downloads/hackrf/codec2/src/octave.h +src/CMakeFiles/cohpsk_put_test_bits.dir/octave.c.o + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/octave.c + /home/sh/Downloads/hackrf/codec2/src/octave.h diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_put_test_bits.dir/depend.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_put_test_bits.dir/depend.make new file mode 100644 index 0000000..2dcf544 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_put_test_bits.dir/depend.make @@ -0,0 +1,14 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/cohpsk_put_test_bits.dir/cohpsk_put_test_bits.c.o: ../src/codec2_cohpsk.h +src/CMakeFiles/cohpsk_put_test_bits.dir/cohpsk_put_test_bits.c.o: ../src/cohpsk_put_test_bits.c +src/CMakeFiles/cohpsk_put_test_bits.dir/cohpsk_put_test_bits.c.o: ../src/comp.h +src/CMakeFiles/cohpsk_put_test_bits.dir/cohpsk_put_test_bits.c.o: ../src/kiss_fft.h +src/CMakeFiles/cohpsk_put_test_bits.dir/cohpsk_put_test_bits.c.o: ../src/modem_stats.h +src/CMakeFiles/cohpsk_put_test_bits.dir/cohpsk_put_test_bits.c.o: ../src/octave.h + +src/CMakeFiles/cohpsk_put_test_bits.dir/octave.c.o: ../src/comp.h +src/CMakeFiles/cohpsk_put_test_bits.dir/octave.c.o: ../src/octave.c +src/CMakeFiles/cohpsk_put_test_bits.dir/octave.c.o: ../src/octave.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_put_test_bits.dir/flags.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_put_test_bits.dir/flags.make new file mode 100644 index 0000000..814242c --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_put_test_bits.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DGIT_HASH=\"df2ed16c\" -D_GNU_SOURCE=1 + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/src + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_put_test_bits.dir/link.txt b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_put_test_bits.dir/link.txt new file mode 100644 index 0000000..4038804 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_put_test_bits.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/cohpsk_put_test_bits.dir/cohpsk_put_test_bits.c.o CMakeFiles/cohpsk_put_test_bits.dir/octave.c.o -o cohpsk_put_test_bits -Wl,-rpath,/home/sh/Downloads/hackrf/codec2/build_linux/src -lm libcodec2.so.0.9 -lm diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_put_test_bits.dir/octave.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_put_test_bits.dir/octave.c.o new file mode 100644 index 0000000..889ec3b Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_put_test_bits.dir/octave.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_put_test_bits.dir/progress.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_put_test_bits.dir/progress.make new file mode 100644 index 0000000..78664ed --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/cohpsk_put_test_bits.dir/progress.make @@ -0,0 +1,4 @@ +CMAKE_PROGRESS_1 = +CMAKE_PROGRESS_2 = 29 +CMAKE_PROGRESS_3 = + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/deframer.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/deframer.dir/C.includecache new file mode 100644 index 0000000..6f9cae3 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/deframer.dir/C.includecache @@ -0,0 +1,54 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/deframer.c +assert.h +- +stdio.h +- +string.h +- +fsk.h +/home/sh/Downloads/hackrf/codec2/src/fsk.h + +/home/sh/Downloads/hackrf/codec2/src/fsk.h +stdint.h +- +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +kiss_fftr.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h +modem_stats.h +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h + +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h +stdlib.h +- +stdio.h +- +math.h +- +string.h +- +xmmintrin.h +- +sys/types.h +- + +/home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/deframer.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/deframer.dir/DependInfo.cmake new file mode 100644 index 0000000..f14e0f3 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/deframer.dir/DependInfo.cmake @@ -0,0 +1,28 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/src/deframer.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/deframer.dir/deframer.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "GIT_HASH=\"df2ed16c\"" + "_GNU_SOURCE=1" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/deframer.dir/build.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/deframer.dir/build.make new file mode 100644 index 0000000..4e82610 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/deframer.dir/build.make @@ -0,0 +1,98 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include src/CMakeFiles/deframer.dir/depend.make + +# Include the progress variables for this target. +include src/CMakeFiles/deframer.dir/progress.make + +# Include the compile flags for this target's objects. +include src/CMakeFiles/deframer.dir/flags.make + +src/CMakeFiles/deframer.dir/deframer.c.o: src/CMakeFiles/deframer.dir/flags.make +src/CMakeFiles/deframer.dir/deframer.c.o: ../src/deframer.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object src/CMakeFiles/deframer.dir/deframer.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/deframer.dir/deframer.c.o -c /home/sh/Downloads/hackrf/codec2/src/deframer.c + +src/CMakeFiles/deframer.dir/deframer.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/deframer.dir/deframer.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/deframer.c > CMakeFiles/deframer.dir/deframer.c.i + +src/CMakeFiles/deframer.dir/deframer.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/deframer.dir/deframer.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/deframer.c -o CMakeFiles/deframer.dir/deframer.c.s + +# Object files for target deframer +deframer_OBJECTS = \ +"CMakeFiles/deframer.dir/deframer.c.o" + +# External object files for target deframer +deframer_EXTERNAL_OBJECTS = + +src/deframer: src/CMakeFiles/deframer.dir/deframer.c.o +src/deframer: src/CMakeFiles/deframer.dir/build.make +src/deframer: src/CMakeFiles/deframer.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking C executable deframer" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/deframer.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +src/CMakeFiles/deframer.dir/build: src/deframer + +.PHONY : src/CMakeFiles/deframer.dir/build + +src/CMakeFiles/deframer.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -P CMakeFiles/deframer.dir/cmake_clean.cmake +.PHONY : src/CMakeFiles/deframer.dir/clean + +src/CMakeFiles/deframer.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/src /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/src /home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/deframer.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : src/CMakeFiles/deframer.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/deframer.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/deframer.dir/cmake_clean.cmake new file mode 100644 index 0000000..34060de --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/deframer.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +file(REMOVE_RECURSE + "CMakeFiles/deframer.dir/deframer.c.o" + "deframer.pdb" + "deframer" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/deframer.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/deframer.dir/deframer.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/deframer.dir/deframer.c.o new file mode 100644 index 0000000..a1f1ce8 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/deframer.dir/deframer.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/deframer.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/deframer.dir/depend.internal new file mode 100644 index 0000000..7518a73 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/deframer.dir/depend.internal @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/deframer.dir/deframer.c.o + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/deframer.c + /home/sh/Downloads/hackrf/codec2/src/fsk.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h + /home/sh/Downloads/hackrf/codec2/src/modem_stats.h diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/deframer.dir/depend.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/deframer.dir/depend.make new file mode 100644 index 0000000..e2c9a51 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/deframer.dir/depend.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/deframer.dir/deframer.c.o: ../src/comp.h +src/CMakeFiles/deframer.dir/deframer.c.o: ../src/deframer.c +src/CMakeFiles/deframer.dir/deframer.c.o: ../src/fsk.h +src/CMakeFiles/deframer.dir/deframer.c.o: ../src/kiss_fft.h +src/CMakeFiles/deframer.dir/deframer.c.o: ../src/kiss_fftr.h +src/CMakeFiles/deframer.dir/deframer.c.o: ../src/modem_stats.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/deframer.dir/flags.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/deframer.dir/flags.make new file mode 100644 index 0000000..814242c --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/deframer.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DGIT_HASH=\"df2ed16c\" -D_GNU_SOURCE=1 + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/src + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/deframer.dir/link.txt b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/deframer.dir/link.txt new file mode 100644 index 0000000..ca8f970 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/deframer.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/deframer.dir/deframer.c.o -o deframer diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/deframer.dir/progress.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/deframer.dir/progress.make new file mode 100644 index 0000000..14e668e --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/deframer.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = 31 +CMAKE_PROGRESS_2 = + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/drs232.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/drs232.dir/C.includecache new file mode 100644 index 0000000..3760ff5 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/drs232.dir/C.includecache @@ -0,0 +1,22 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +/home/sh/Downloads/hackrf/codec2/src/drs232.c +assert.h +- +stdlib.h +- +errno.h +- +stdio.h +- +string.h +- +stdint.h +- + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/drs232.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/drs232.dir/DependInfo.cmake new file mode 100644 index 0000000..a2677a8 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/drs232.dir/DependInfo.cmake @@ -0,0 +1,31 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/src/drs232.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/drs232.dir/drs232.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "HORUS_L2_RX" + "INTERLEAVER" + "RUN_TIME_TABLES" + "SCRAMBLER" + "_GNU_SOURCE=1" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/drs232.dir/build.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/drs232.dir/build.make new file mode 100644 index 0000000..a8eb3a6 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/drs232.dir/build.make @@ -0,0 +1,98 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include src/CMakeFiles/drs232.dir/depend.make + +# Include the progress variables for this target. +include src/CMakeFiles/drs232.dir/progress.make + +# Include the compile flags for this target's objects. +include src/CMakeFiles/drs232.dir/flags.make + +src/CMakeFiles/drs232.dir/drs232.c.o: src/CMakeFiles/drs232.dir/flags.make +src/CMakeFiles/drs232.dir/drs232.c.o: ../src/drs232.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object src/CMakeFiles/drs232.dir/drs232.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/drs232.dir/drs232.c.o -c /home/sh/Downloads/hackrf/codec2/src/drs232.c + +src/CMakeFiles/drs232.dir/drs232.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/drs232.dir/drs232.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/drs232.c > CMakeFiles/drs232.dir/drs232.c.i + +src/CMakeFiles/drs232.dir/drs232.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/drs232.dir/drs232.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/drs232.c -o CMakeFiles/drs232.dir/drs232.c.s + +# Object files for target drs232 +drs232_OBJECTS = \ +"CMakeFiles/drs232.dir/drs232.c.o" + +# External object files for target drs232 +drs232_EXTERNAL_OBJECTS = + +src/drs232: src/CMakeFiles/drs232.dir/drs232.c.o +src/drs232: src/CMakeFiles/drs232.dir/build.make +src/drs232: src/CMakeFiles/drs232.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking C executable drs232" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/drs232.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +src/CMakeFiles/drs232.dir/build: src/drs232 + +.PHONY : src/CMakeFiles/drs232.dir/build + +src/CMakeFiles/drs232.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -P CMakeFiles/drs232.dir/cmake_clean.cmake +.PHONY : src/CMakeFiles/drs232.dir/clean + +src/CMakeFiles/drs232.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/src /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/src /home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/drs232.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : src/CMakeFiles/drs232.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/drs232.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/drs232.dir/cmake_clean.cmake new file mode 100644 index 0000000..5060ca8 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/drs232.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +file(REMOVE_RECURSE + "CMakeFiles/drs232.dir/drs232.c.o" + "drs232.pdb" + "drs232" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/drs232.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/drs232.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/drs232.dir/depend.internal new file mode 100644 index 0000000..a608b9c --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/drs232.dir/depend.internal @@ -0,0 +1,5 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/drs232.dir/drs232.c.o + /home/sh/Downloads/hackrf/codec2/src/drs232.c diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/drs232.dir/depend.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/drs232.dir/depend.make new file mode 100644 index 0000000..d1b516d --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/drs232.dir/depend.make @@ -0,0 +1,5 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/drs232.dir/drs232.c.o: ../src/drs232.c + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/drs232.dir/drs232.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/drs232.dir/drs232.c.o new file mode 100644 index 0000000..54f7e93 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/drs232.dir/drs232.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/drs232.dir/flags.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/drs232.dir/flags.make new file mode 100644 index 0000000..943f794 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/drs232.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 + +C_DEFINES = -DHORUS_L2_RX -DINTERLEAVER -DRUN_TIME_TABLES -DSCRAMBLER -D_GNU_SOURCE=1 + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/src + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/drs232.dir/link.txt b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/drs232.dir/link.txt new file mode 100644 index 0000000..823bcfb --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/drs232.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -rdynamic CMakeFiles/drs232.dir/drs232.c.o -o drs232 diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/drs232.dir/progress.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/drs232.dir/progress.make new file mode 100644 index 0000000..6c287f1 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/drs232.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = +CMAKE_PROGRESS_2 = + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/drs232_ldpc.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/drs232_ldpc.dir/C.includecache new file mode 100644 index 0000000..43e5840 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/drs232_ldpc.dir/C.includecache @@ -0,0 +1,38 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +/home/sh/Downloads/hackrf/codec2/src/H2064_516_sparse.h +stdint.h +- + +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/drs232_ldpc.c +assert.h +- +stdlib.h +- +errno.h +- +stdio.h +- +string.h +- +stdint.h +- +mpdecode_core.h +/home/sh/Downloads/hackrf/codec2/src/mpdecode_core.h +H2064_516_sparse.h +/home/sh/Downloads/hackrf/codec2/src/H2064_516_sparse.h + +/home/sh/Downloads/hackrf/codec2/src/mpdecode_core.h +stdint.h +- +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/drs232_ldpc.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/drs232_ldpc.dir/DependInfo.cmake new file mode 100644 index 0000000..74c4041 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/drs232_ldpc.dir/DependInfo.cmake @@ -0,0 +1,32 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/src/drs232_ldpc.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/drs232_ldpc.dir/drs232_ldpc.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "HORUS_L2_RX" + "INTERLEAVER" + "RUN_TIME_TABLES" + "SCRAMBLER" + "_GNU_SOURCE=1" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/DependInfo.cmake" + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/drs232_ldpc.dir/build.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/drs232_ldpc.dir/build.make new file mode 100644 index 0000000..4e39123 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/drs232_ldpc.dir/build.make @@ -0,0 +1,99 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include src/CMakeFiles/drs232_ldpc.dir/depend.make + +# Include the progress variables for this target. +include src/CMakeFiles/drs232_ldpc.dir/progress.make + +# Include the compile flags for this target's objects. +include src/CMakeFiles/drs232_ldpc.dir/flags.make + +src/CMakeFiles/drs232_ldpc.dir/drs232_ldpc.c.o: src/CMakeFiles/drs232_ldpc.dir/flags.make +src/CMakeFiles/drs232_ldpc.dir/drs232_ldpc.c.o: ../src/drs232_ldpc.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object src/CMakeFiles/drs232_ldpc.dir/drs232_ldpc.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/drs232_ldpc.dir/drs232_ldpc.c.o -c /home/sh/Downloads/hackrf/codec2/src/drs232_ldpc.c + +src/CMakeFiles/drs232_ldpc.dir/drs232_ldpc.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/drs232_ldpc.dir/drs232_ldpc.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/drs232_ldpc.c > CMakeFiles/drs232_ldpc.dir/drs232_ldpc.c.i + +src/CMakeFiles/drs232_ldpc.dir/drs232_ldpc.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/drs232_ldpc.dir/drs232_ldpc.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/drs232_ldpc.c -o CMakeFiles/drs232_ldpc.dir/drs232_ldpc.c.s + +# Object files for target drs232_ldpc +drs232_ldpc_OBJECTS = \ +"CMakeFiles/drs232_ldpc.dir/drs232_ldpc.c.o" + +# External object files for target drs232_ldpc +drs232_ldpc_EXTERNAL_OBJECTS = + +src/drs232_ldpc: src/CMakeFiles/drs232_ldpc.dir/drs232_ldpc.c.o +src/drs232_ldpc: src/CMakeFiles/drs232_ldpc.dir/build.make +src/drs232_ldpc: src/libcodec2.so.0.9 +src/drs232_ldpc: src/CMakeFiles/drs232_ldpc.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking C executable drs232_ldpc" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/drs232_ldpc.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +src/CMakeFiles/drs232_ldpc.dir/build: src/drs232_ldpc + +.PHONY : src/CMakeFiles/drs232_ldpc.dir/build + +src/CMakeFiles/drs232_ldpc.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -P CMakeFiles/drs232_ldpc.dir/cmake_clean.cmake +.PHONY : src/CMakeFiles/drs232_ldpc.dir/clean + +src/CMakeFiles/drs232_ldpc.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/src /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/src /home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/drs232_ldpc.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : src/CMakeFiles/drs232_ldpc.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/drs232_ldpc.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/drs232_ldpc.dir/cmake_clean.cmake new file mode 100644 index 0000000..02f3ae7 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/drs232_ldpc.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +file(REMOVE_RECURSE + "CMakeFiles/drs232_ldpc.dir/drs232_ldpc.c.o" + "drs232_ldpc.pdb" + "drs232_ldpc" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/drs232_ldpc.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/drs232_ldpc.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/drs232_ldpc.dir/depend.internal new file mode 100644 index 0000000..3e8cbb8 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/drs232_ldpc.dir/depend.internal @@ -0,0 +1,8 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/drs232_ldpc.dir/drs232_ldpc.c.o + /home/sh/Downloads/hackrf/codec2/src/H2064_516_sparse.h + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/drs232_ldpc.c + /home/sh/Downloads/hackrf/codec2/src/mpdecode_core.h diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/drs232_ldpc.dir/depend.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/drs232_ldpc.dir/depend.make new file mode 100644 index 0000000..fd725d6 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/drs232_ldpc.dir/depend.make @@ -0,0 +1,8 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/drs232_ldpc.dir/drs232_ldpc.c.o: ../src/H2064_516_sparse.h +src/CMakeFiles/drs232_ldpc.dir/drs232_ldpc.c.o: ../src/comp.h +src/CMakeFiles/drs232_ldpc.dir/drs232_ldpc.c.o: ../src/drs232_ldpc.c +src/CMakeFiles/drs232_ldpc.dir/drs232_ldpc.c.o: ../src/mpdecode_core.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/drs232_ldpc.dir/drs232_ldpc.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/drs232_ldpc.dir/drs232_ldpc.c.o new file mode 100644 index 0000000..281c0e7 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/drs232_ldpc.dir/drs232_ldpc.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/drs232_ldpc.dir/flags.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/drs232_ldpc.dir/flags.make new file mode 100644 index 0000000..943f794 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/drs232_ldpc.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 + +C_DEFINES = -DHORUS_L2_RX -DINTERLEAVER -DRUN_TIME_TABLES -DSCRAMBLER -D_GNU_SOURCE=1 + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/src + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/drs232_ldpc.dir/link.txt b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/drs232_ldpc.dir/link.txt new file mode 100644 index 0000000..15b79e5 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/drs232_ldpc.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -rdynamic CMakeFiles/drs232_ldpc.dir/drs232_ldpc.c.o -o drs232_ldpc -Wl,-rpath,/home/sh/Downloads/hackrf/codec2/build_linux/src: libcodec2.so.0.9 -lm diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/drs232_ldpc.dir/progress.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/drs232_ldpc.dir/progress.make new file mode 100644 index 0000000..527b7e9 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/drs232_ldpc.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = 34 +CMAKE_PROGRESS_2 = + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_channel.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_channel.dir/C.includecache new file mode 100644 index 0000000..a392f99 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_channel.dir/C.includecache @@ -0,0 +1,90 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +/home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +modem_stats.h +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h + +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.h +assert.h +- +stdlib.h +- +stdio.h +- +string.h +- +math.h +- +fdv_arm_math.h +/home/sh/Downloads/hackrf/codec2/src/fdv_arm_math.h +defines.h +/home/sh/Downloads/hackrf/codec2/src/defines.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +kiss_fftr.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/defines.h + +/home/sh/Downloads/hackrf/codec2/src/fdmdv_channel.c +assert.h +- +stdio.h +- +stdlib.h +- +string.h +- +math.h +- +errno.h +- +codec2_fdmdv.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h +fdmdv_internal.h +/home/sh/Downloads/hackrf/codec2/src/fdmdv_internal.h + +/home/sh/Downloads/hackrf/codec2/src/fdmdv_internal.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +codec2_fdmdv.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h +codec2_fft.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.h + +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h +stdlib.h +- +stdio.h +- +math.h +- +string.h +- +xmmintrin.h +- +sys/types.h +- + +/home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_channel.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_channel.dir/DependInfo.cmake new file mode 100644 index 0000000..e9c91eb --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_channel.dir/DependInfo.cmake @@ -0,0 +1,29 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/src/fdmdv_channel.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/fdmdv_channel.dir/fdmdv_channel.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "GIT_HASH=\"df2ed16c\"" + "_GNU_SOURCE=1" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/DependInfo.cmake" + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_channel.dir/build.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_channel.dir/build.make new file mode 100644 index 0000000..19abd47 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_channel.dir/build.make @@ -0,0 +1,99 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include src/CMakeFiles/fdmdv_channel.dir/depend.make + +# Include the progress variables for this target. +include src/CMakeFiles/fdmdv_channel.dir/progress.make + +# Include the compile flags for this target's objects. +include src/CMakeFiles/fdmdv_channel.dir/flags.make + +src/CMakeFiles/fdmdv_channel.dir/fdmdv_channel.c.o: src/CMakeFiles/fdmdv_channel.dir/flags.make +src/CMakeFiles/fdmdv_channel.dir/fdmdv_channel.c.o: ../src/fdmdv_channel.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object src/CMakeFiles/fdmdv_channel.dir/fdmdv_channel.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/fdmdv_channel.dir/fdmdv_channel.c.o -c /home/sh/Downloads/hackrf/codec2/src/fdmdv_channel.c + +src/CMakeFiles/fdmdv_channel.dir/fdmdv_channel.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/fdmdv_channel.dir/fdmdv_channel.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/fdmdv_channel.c > CMakeFiles/fdmdv_channel.dir/fdmdv_channel.c.i + +src/CMakeFiles/fdmdv_channel.dir/fdmdv_channel.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/fdmdv_channel.dir/fdmdv_channel.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/fdmdv_channel.c -o CMakeFiles/fdmdv_channel.dir/fdmdv_channel.c.s + +# Object files for target fdmdv_channel +fdmdv_channel_OBJECTS = \ +"CMakeFiles/fdmdv_channel.dir/fdmdv_channel.c.o" + +# External object files for target fdmdv_channel +fdmdv_channel_EXTERNAL_OBJECTS = + +src/fdmdv_channel: src/CMakeFiles/fdmdv_channel.dir/fdmdv_channel.c.o +src/fdmdv_channel: src/CMakeFiles/fdmdv_channel.dir/build.make +src/fdmdv_channel: src/libcodec2.so.0.9 +src/fdmdv_channel: src/CMakeFiles/fdmdv_channel.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking C executable fdmdv_channel" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/fdmdv_channel.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +src/CMakeFiles/fdmdv_channel.dir/build: src/fdmdv_channel + +.PHONY : src/CMakeFiles/fdmdv_channel.dir/build + +src/CMakeFiles/fdmdv_channel.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -P CMakeFiles/fdmdv_channel.dir/cmake_clean.cmake +.PHONY : src/CMakeFiles/fdmdv_channel.dir/clean + +src/CMakeFiles/fdmdv_channel.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/src /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/src /home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/fdmdv_channel.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : src/CMakeFiles/fdmdv_channel.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_channel.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_channel.dir/cmake_clean.cmake new file mode 100644 index 0000000..417394e --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_channel.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +file(REMOVE_RECURSE + "CMakeFiles/fdmdv_channel.dir/fdmdv_channel.c.o" + "fdmdv_channel.pdb" + "fdmdv_channel" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/fdmdv_channel.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_channel.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_channel.dir/depend.internal new file mode 100644 index 0000000..6d0989a --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_channel.dir/depend.internal @@ -0,0 +1,13 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/fdmdv_channel.dir/fdmdv_channel.c.o + /home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h + /home/sh/Downloads/hackrf/codec2/src/codec2_fft.h + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/defines.h + /home/sh/Downloads/hackrf/codec2/src/fdmdv_channel.c + /home/sh/Downloads/hackrf/codec2/src/fdmdv_internal.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h + /home/sh/Downloads/hackrf/codec2/src/modem_stats.h diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_channel.dir/depend.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_channel.dir/depend.make new file mode 100644 index 0000000..472b4dd --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_channel.dir/depend.make @@ -0,0 +1,13 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/fdmdv_channel.dir/fdmdv_channel.c.o: ../src/codec2_fdmdv.h +src/CMakeFiles/fdmdv_channel.dir/fdmdv_channel.c.o: ../src/codec2_fft.h +src/CMakeFiles/fdmdv_channel.dir/fdmdv_channel.c.o: ../src/comp.h +src/CMakeFiles/fdmdv_channel.dir/fdmdv_channel.c.o: ../src/defines.h +src/CMakeFiles/fdmdv_channel.dir/fdmdv_channel.c.o: ../src/fdmdv_channel.c +src/CMakeFiles/fdmdv_channel.dir/fdmdv_channel.c.o: ../src/fdmdv_internal.h +src/CMakeFiles/fdmdv_channel.dir/fdmdv_channel.c.o: ../src/kiss_fft.h +src/CMakeFiles/fdmdv_channel.dir/fdmdv_channel.c.o: ../src/kiss_fftr.h +src/CMakeFiles/fdmdv_channel.dir/fdmdv_channel.c.o: ../src/modem_stats.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_channel.dir/fdmdv_channel.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_channel.dir/fdmdv_channel.c.o new file mode 100644 index 0000000..c09b5df Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_channel.dir/fdmdv_channel.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_channel.dir/flags.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_channel.dir/flags.make new file mode 100644 index 0000000..814242c --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_channel.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DGIT_HASH=\"df2ed16c\" -D_GNU_SOURCE=1 + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/src + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_channel.dir/link.txt b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_channel.dir/link.txt new file mode 100644 index 0000000..a6121eb --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_channel.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/fdmdv_channel.dir/fdmdv_channel.c.o -o fdmdv_channel -Wl,-rpath,/home/sh/Downloads/hackrf/codec2/build_linux/src -lm libcodec2.so.0.9 -lm diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_channel.dir/progress.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_channel.dir/progress.make new file mode 100644 index 0000000..72822ce --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_channel.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = 33 +CMAKE_PROGRESS_2 = + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_demod.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_demod.dir/C.includecache new file mode 100644 index 0000000..859d48d --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_demod.dir/C.includecache @@ -0,0 +1,186 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +/home/sh/Downloads/hackrf/codec2/src/_kiss_fft_guts.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h +limits.h +- +alloca.h +- + +/home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +modem_stats.h +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h + +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.c +codec2_fft.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.h +debug_alloc.h +/home/sh/Downloads/hackrf/codec2/src/debug_alloc.h +_kiss_fft_guts.h +/home/sh/Downloads/hackrf/codec2/src/_kiss_fft_guts.h + +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.h +assert.h +- +stdlib.h +- +stdio.h +- +string.h +- +math.h +- +fdv_arm_math.h +/home/sh/Downloads/hackrf/codec2/src/fdv_arm_math.h +defines.h +/home/sh/Downloads/hackrf/codec2/src/defines.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +kiss_fftr.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/comp_prim.h + +/home/sh/Downloads/hackrf/codec2/src/debug_alloc.h +stdio.h +- + +/home/sh/Downloads/hackrf/codec2/src/defines.h + +/home/sh/Downloads/hackrf/codec2/src/fdmdv.c +assert.h +- +stdlib.h +- +stdio.h +- +string.h +- +math.h +- +fdmdv_internal.h +/home/sh/Downloads/hackrf/codec2/src/fdmdv_internal.h +codec2_fdmdv.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h +comp_prim.h +/home/sh/Downloads/hackrf/codec2/src/comp_prim.h +rn.h +/home/sh/Downloads/hackrf/codec2/src/rn.h +rxdec_coeff.h +/home/sh/Downloads/hackrf/codec2/src/rxdec_coeff.h +test_bits.h +/home/sh/Downloads/hackrf/codec2/src/test_bits.h +pilot_coeff.h +/home/sh/Downloads/hackrf/codec2/src/pilot_coeff.h +codec2_fft.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.h +hanning.h +/home/sh/Downloads/hackrf/codec2/src/hanning.h +os.h +/home/sh/Downloads/hackrf/codec2/src/os.h +machdep.h +/home/sh/Downloads/hackrf/codec2/src/machdep.h +debug_alloc.h +/home/sh/Downloads/hackrf/codec2/src/debug_alloc.h + +/home/sh/Downloads/hackrf/codec2/src/fdmdv_demod.c +assert.h +- +stdio.h +- +stdlib.h +- +string.h +- +math.h +- +errno.h +- +codec2_fdmdv.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h +octave.h +/home/sh/Downloads/hackrf/codec2/src/octave.h +freedv_api.h +/home/sh/Downloads/hackrf/codec2/src/freedv_api.h +debug_alloc.h +/home/sh/Downloads/hackrf/codec2/src/debug_alloc.h + +/home/sh/Downloads/hackrf/codec2/src/fdmdv_internal.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +codec2_fdmdv.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h +codec2_fft.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.h + +/home/sh/Downloads/hackrf/codec2/src/freedv_api.h +sys/types.h +- +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/hanning.h + +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h +stdlib.h +- +stdio.h +- +math.h +- +string.h +- +xmmintrin.h +- +sys/types.h +- + +/home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/src/machdep.h + +/home/sh/Downloads/hackrf/codec2/src/modem_stats.c +assert.h +- +math.h +- +modem_stats.h +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h +codec2_fdmdv.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h + +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/src/octave.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/os.h + +/home/sh/Downloads/hackrf/codec2/src/pilot_coeff.h + +/home/sh/Downloads/hackrf/codec2/src/rn.h + +/home/sh/Downloads/hackrf/codec2/src/rxdec_coeff.h + +/home/sh/Downloads/hackrf/codec2/src/test_bits.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_demod.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_demod.dir/DependInfo.cmake new file mode 100644 index 0000000..60dc1ef --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_demod.dir/DependInfo.cmake @@ -0,0 +1,34 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/src/codec2_fft.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/fdmdv_demod.dir/codec2_fft.c.o" + "/home/sh/Downloads/hackrf/codec2/src/fdmdv.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/fdmdv_demod.dir/fdmdv.c.o" + "/home/sh/Downloads/hackrf/codec2/src/fdmdv_demod.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/fdmdv_demod.dir/fdmdv_demod.c.o" + "/home/sh/Downloads/hackrf/codec2/src/kiss_fft.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/fdmdv_demod.dir/kiss_fft.c.o" + "/home/sh/Downloads/hackrf/codec2/src/kiss_fftr.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/fdmdv_demod.dir/kiss_fftr.c.o" + "/home/sh/Downloads/hackrf/codec2/src/modem_stats.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/fdmdv_demod.dir/modem_stats.c.o" + "/home/sh/Downloads/hackrf/codec2/src/octave.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/fdmdv_demod.dir/octave.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "GIT_HASH=\"df2ed16c\"" + "_GNU_SOURCE=1" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_demod.dir/build.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_demod.dir/build.make new file mode 100644 index 0000000..20cfa8e --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_demod.dir/build.make @@ -0,0 +1,188 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include src/CMakeFiles/fdmdv_demod.dir/depend.make + +# Include the progress variables for this target. +include src/CMakeFiles/fdmdv_demod.dir/progress.make + +# Include the compile flags for this target's objects. +include src/CMakeFiles/fdmdv_demod.dir/flags.make + +src/CMakeFiles/fdmdv_demod.dir/fdmdv_demod.c.o: src/CMakeFiles/fdmdv_demod.dir/flags.make +src/CMakeFiles/fdmdv_demod.dir/fdmdv_demod.c.o: ../src/fdmdv_demod.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object src/CMakeFiles/fdmdv_demod.dir/fdmdv_demod.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/fdmdv_demod.dir/fdmdv_demod.c.o -c /home/sh/Downloads/hackrf/codec2/src/fdmdv_demod.c + +src/CMakeFiles/fdmdv_demod.dir/fdmdv_demod.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/fdmdv_demod.dir/fdmdv_demod.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/fdmdv_demod.c > CMakeFiles/fdmdv_demod.dir/fdmdv_demod.c.i + +src/CMakeFiles/fdmdv_demod.dir/fdmdv_demod.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/fdmdv_demod.dir/fdmdv_demod.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/fdmdv_demod.c -o CMakeFiles/fdmdv_demod.dir/fdmdv_demod.c.s + +src/CMakeFiles/fdmdv_demod.dir/fdmdv.c.o: src/CMakeFiles/fdmdv_demod.dir/flags.make +src/CMakeFiles/fdmdv_demod.dir/fdmdv.c.o: ../src/fdmdv.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Building C object src/CMakeFiles/fdmdv_demod.dir/fdmdv.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/fdmdv_demod.dir/fdmdv.c.o -c /home/sh/Downloads/hackrf/codec2/src/fdmdv.c + +src/CMakeFiles/fdmdv_demod.dir/fdmdv.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/fdmdv_demod.dir/fdmdv.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/fdmdv.c > CMakeFiles/fdmdv_demod.dir/fdmdv.c.i + +src/CMakeFiles/fdmdv_demod.dir/fdmdv.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/fdmdv_demod.dir/fdmdv.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/fdmdv.c -o CMakeFiles/fdmdv_demod.dir/fdmdv.c.s + +src/CMakeFiles/fdmdv_demod.dir/kiss_fft.c.o: src/CMakeFiles/fdmdv_demod.dir/flags.make +src/CMakeFiles/fdmdv_demod.dir/kiss_fft.c.o: ../src/kiss_fft.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_3) "Building C object src/CMakeFiles/fdmdv_demod.dir/kiss_fft.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/fdmdv_demod.dir/kiss_fft.c.o -c /home/sh/Downloads/hackrf/codec2/src/kiss_fft.c + +src/CMakeFiles/fdmdv_demod.dir/kiss_fft.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/fdmdv_demod.dir/kiss_fft.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/kiss_fft.c > CMakeFiles/fdmdv_demod.dir/kiss_fft.c.i + +src/CMakeFiles/fdmdv_demod.dir/kiss_fft.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/fdmdv_demod.dir/kiss_fft.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/kiss_fft.c -o CMakeFiles/fdmdv_demod.dir/kiss_fft.c.s + +src/CMakeFiles/fdmdv_demod.dir/octave.c.o: src/CMakeFiles/fdmdv_demod.dir/flags.make +src/CMakeFiles/fdmdv_demod.dir/octave.c.o: ../src/octave.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_4) "Building C object src/CMakeFiles/fdmdv_demod.dir/octave.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/fdmdv_demod.dir/octave.c.o -c /home/sh/Downloads/hackrf/codec2/src/octave.c + +src/CMakeFiles/fdmdv_demod.dir/octave.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/fdmdv_demod.dir/octave.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/octave.c > CMakeFiles/fdmdv_demod.dir/octave.c.i + +src/CMakeFiles/fdmdv_demod.dir/octave.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/fdmdv_demod.dir/octave.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/octave.c -o CMakeFiles/fdmdv_demod.dir/octave.c.s + +src/CMakeFiles/fdmdv_demod.dir/modem_stats.c.o: src/CMakeFiles/fdmdv_demod.dir/flags.make +src/CMakeFiles/fdmdv_demod.dir/modem_stats.c.o: ../src/modem_stats.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_5) "Building C object src/CMakeFiles/fdmdv_demod.dir/modem_stats.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/fdmdv_demod.dir/modem_stats.c.o -c /home/sh/Downloads/hackrf/codec2/src/modem_stats.c + +src/CMakeFiles/fdmdv_demod.dir/modem_stats.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/fdmdv_demod.dir/modem_stats.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/modem_stats.c > CMakeFiles/fdmdv_demod.dir/modem_stats.c.i + +src/CMakeFiles/fdmdv_demod.dir/modem_stats.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/fdmdv_demod.dir/modem_stats.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/modem_stats.c -o CMakeFiles/fdmdv_demod.dir/modem_stats.c.s + +src/CMakeFiles/fdmdv_demod.dir/codec2_fft.c.o: src/CMakeFiles/fdmdv_demod.dir/flags.make +src/CMakeFiles/fdmdv_demod.dir/codec2_fft.c.o: ../src/codec2_fft.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_6) "Building C object src/CMakeFiles/fdmdv_demod.dir/codec2_fft.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/fdmdv_demod.dir/codec2_fft.c.o -c /home/sh/Downloads/hackrf/codec2/src/codec2_fft.c + +src/CMakeFiles/fdmdv_demod.dir/codec2_fft.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/fdmdv_demod.dir/codec2_fft.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/codec2_fft.c > CMakeFiles/fdmdv_demod.dir/codec2_fft.c.i + +src/CMakeFiles/fdmdv_demod.dir/codec2_fft.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/fdmdv_demod.dir/codec2_fft.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/codec2_fft.c -o CMakeFiles/fdmdv_demod.dir/codec2_fft.c.s + +src/CMakeFiles/fdmdv_demod.dir/kiss_fftr.c.o: src/CMakeFiles/fdmdv_demod.dir/flags.make +src/CMakeFiles/fdmdv_demod.dir/kiss_fftr.c.o: ../src/kiss_fftr.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_7) "Building C object src/CMakeFiles/fdmdv_demod.dir/kiss_fftr.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/fdmdv_demod.dir/kiss_fftr.c.o -c /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.c + +src/CMakeFiles/fdmdv_demod.dir/kiss_fftr.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/fdmdv_demod.dir/kiss_fftr.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.c > CMakeFiles/fdmdv_demod.dir/kiss_fftr.c.i + +src/CMakeFiles/fdmdv_demod.dir/kiss_fftr.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/fdmdv_demod.dir/kiss_fftr.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.c -o CMakeFiles/fdmdv_demod.dir/kiss_fftr.c.s + +# Object files for target fdmdv_demod +fdmdv_demod_OBJECTS = \ +"CMakeFiles/fdmdv_demod.dir/fdmdv_demod.c.o" \ +"CMakeFiles/fdmdv_demod.dir/fdmdv.c.o" \ +"CMakeFiles/fdmdv_demod.dir/kiss_fft.c.o" \ +"CMakeFiles/fdmdv_demod.dir/octave.c.o" \ +"CMakeFiles/fdmdv_demod.dir/modem_stats.c.o" \ +"CMakeFiles/fdmdv_demod.dir/codec2_fft.c.o" \ +"CMakeFiles/fdmdv_demod.dir/kiss_fftr.c.o" + +# External object files for target fdmdv_demod +fdmdv_demod_EXTERNAL_OBJECTS = + +src/fdmdv_demod: src/CMakeFiles/fdmdv_demod.dir/fdmdv_demod.c.o +src/fdmdv_demod: src/CMakeFiles/fdmdv_demod.dir/fdmdv.c.o +src/fdmdv_demod: src/CMakeFiles/fdmdv_demod.dir/kiss_fft.c.o +src/fdmdv_demod: src/CMakeFiles/fdmdv_demod.dir/octave.c.o +src/fdmdv_demod: src/CMakeFiles/fdmdv_demod.dir/modem_stats.c.o +src/fdmdv_demod: src/CMakeFiles/fdmdv_demod.dir/codec2_fft.c.o +src/fdmdv_demod: src/CMakeFiles/fdmdv_demod.dir/kiss_fftr.c.o +src/fdmdv_demod: src/CMakeFiles/fdmdv_demod.dir/build.make +src/fdmdv_demod: src/CMakeFiles/fdmdv_demod.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_8) "Linking C executable fdmdv_demod" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/fdmdv_demod.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +src/CMakeFiles/fdmdv_demod.dir/build: src/fdmdv_demod + +.PHONY : src/CMakeFiles/fdmdv_demod.dir/build + +src/CMakeFiles/fdmdv_demod.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -P CMakeFiles/fdmdv_demod.dir/cmake_clean.cmake +.PHONY : src/CMakeFiles/fdmdv_demod.dir/clean + +src/CMakeFiles/fdmdv_demod.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/src /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/src /home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/fdmdv_demod.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : src/CMakeFiles/fdmdv_demod.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_demod.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_demod.dir/cmake_clean.cmake new file mode 100644 index 0000000..f552a32 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_demod.dir/cmake_clean.cmake @@ -0,0 +1,16 @@ +file(REMOVE_RECURSE + "CMakeFiles/fdmdv_demod.dir/fdmdv_demod.c.o" + "CMakeFiles/fdmdv_demod.dir/fdmdv.c.o" + "CMakeFiles/fdmdv_demod.dir/kiss_fft.c.o" + "CMakeFiles/fdmdv_demod.dir/octave.c.o" + "CMakeFiles/fdmdv_demod.dir/modem_stats.c.o" + "CMakeFiles/fdmdv_demod.dir/codec2_fft.c.o" + "CMakeFiles/fdmdv_demod.dir/kiss_fftr.c.o" + "fdmdv_demod.pdb" + "fdmdv_demod" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/fdmdv_demod.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_demod.dir/codec2_fft.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_demod.dir/codec2_fft.c.o new file mode 100644 index 0000000..7d51431 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_demod.dir/codec2_fft.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_demod.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_demod.dir/depend.internal new file mode 100644 index 0000000..52efc11 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_demod.dir/depend.internal @@ -0,0 +1,59 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/fdmdv_demod.dir/codec2_fft.c.o + /home/sh/Downloads/hackrf/codec2/src/_kiss_fft_guts.h + /home/sh/Downloads/hackrf/codec2/src/codec2_fft.c + /home/sh/Downloads/hackrf/codec2/src/codec2_fft.h + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/debug_alloc.h + /home/sh/Downloads/hackrf/codec2/src/defines.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h +src/CMakeFiles/fdmdv_demod.dir/fdmdv.c.o + /home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h + /home/sh/Downloads/hackrf/codec2/src/codec2_fft.h + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/comp_prim.h + /home/sh/Downloads/hackrf/codec2/src/debug_alloc.h + /home/sh/Downloads/hackrf/codec2/src/defines.h + /home/sh/Downloads/hackrf/codec2/src/fdmdv.c + /home/sh/Downloads/hackrf/codec2/src/fdmdv_internal.h + /home/sh/Downloads/hackrf/codec2/src/hanning.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h + /home/sh/Downloads/hackrf/codec2/src/machdep.h + /home/sh/Downloads/hackrf/codec2/src/modem_stats.h + /home/sh/Downloads/hackrf/codec2/src/os.h + /home/sh/Downloads/hackrf/codec2/src/pilot_coeff.h + /home/sh/Downloads/hackrf/codec2/src/rn.h + /home/sh/Downloads/hackrf/codec2/src/rxdec_coeff.h + /home/sh/Downloads/hackrf/codec2/src/test_bits.h +src/CMakeFiles/fdmdv_demod.dir/fdmdv_demod.c.o + /home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/debug_alloc.h + /home/sh/Downloads/hackrf/codec2/src/fdmdv_demod.c + /home/sh/Downloads/hackrf/codec2/src/freedv_api.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/modem_stats.h + /home/sh/Downloads/hackrf/codec2/src/octave.h +src/CMakeFiles/fdmdv_demod.dir/kiss_fft.c.o + /home/sh/Downloads/hackrf/codec2/src/_kiss_fft_guts.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.c + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h +src/CMakeFiles/fdmdv_demod.dir/kiss_fftr.c.o + /home/sh/Downloads/hackrf/codec2/src/_kiss_fft_guts.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.c + /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h +src/CMakeFiles/fdmdv_demod.dir/modem_stats.c.o + /home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/modem_stats.c + /home/sh/Downloads/hackrf/codec2/src/modem_stats.h +src/CMakeFiles/fdmdv_demod.dir/octave.c.o + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/octave.c + /home/sh/Downloads/hackrf/codec2/src/octave.h diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_demod.dir/depend.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_demod.dir/depend.make new file mode 100644 index 0000000..bb00482 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_demod.dir/depend.make @@ -0,0 +1,59 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/fdmdv_demod.dir/codec2_fft.c.o: ../src/_kiss_fft_guts.h +src/CMakeFiles/fdmdv_demod.dir/codec2_fft.c.o: ../src/codec2_fft.c +src/CMakeFiles/fdmdv_demod.dir/codec2_fft.c.o: ../src/codec2_fft.h +src/CMakeFiles/fdmdv_demod.dir/codec2_fft.c.o: ../src/comp.h +src/CMakeFiles/fdmdv_demod.dir/codec2_fft.c.o: ../src/debug_alloc.h +src/CMakeFiles/fdmdv_demod.dir/codec2_fft.c.o: ../src/defines.h +src/CMakeFiles/fdmdv_demod.dir/codec2_fft.c.o: ../src/kiss_fft.h +src/CMakeFiles/fdmdv_demod.dir/codec2_fft.c.o: ../src/kiss_fftr.h + +src/CMakeFiles/fdmdv_demod.dir/fdmdv.c.o: ../src/codec2_fdmdv.h +src/CMakeFiles/fdmdv_demod.dir/fdmdv.c.o: ../src/codec2_fft.h +src/CMakeFiles/fdmdv_demod.dir/fdmdv.c.o: ../src/comp.h +src/CMakeFiles/fdmdv_demod.dir/fdmdv.c.o: ../src/comp_prim.h +src/CMakeFiles/fdmdv_demod.dir/fdmdv.c.o: ../src/debug_alloc.h +src/CMakeFiles/fdmdv_demod.dir/fdmdv.c.o: ../src/defines.h +src/CMakeFiles/fdmdv_demod.dir/fdmdv.c.o: ../src/fdmdv.c +src/CMakeFiles/fdmdv_demod.dir/fdmdv.c.o: ../src/fdmdv_internal.h +src/CMakeFiles/fdmdv_demod.dir/fdmdv.c.o: ../src/hanning.h +src/CMakeFiles/fdmdv_demod.dir/fdmdv.c.o: ../src/kiss_fft.h +src/CMakeFiles/fdmdv_demod.dir/fdmdv.c.o: ../src/kiss_fftr.h +src/CMakeFiles/fdmdv_demod.dir/fdmdv.c.o: ../src/machdep.h +src/CMakeFiles/fdmdv_demod.dir/fdmdv.c.o: ../src/modem_stats.h +src/CMakeFiles/fdmdv_demod.dir/fdmdv.c.o: ../src/os.h +src/CMakeFiles/fdmdv_demod.dir/fdmdv.c.o: ../src/pilot_coeff.h +src/CMakeFiles/fdmdv_demod.dir/fdmdv.c.o: ../src/rn.h +src/CMakeFiles/fdmdv_demod.dir/fdmdv.c.o: ../src/rxdec_coeff.h +src/CMakeFiles/fdmdv_demod.dir/fdmdv.c.o: ../src/test_bits.h + +src/CMakeFiles/fdmdv_demod.dir/fdmdv_demod.c.o: ../src/codec2_fdmdv.h +src/CMakeFiles/fdmdv_demod.dir/fdmdv_demod.c.o: ../src/comp.h +src/CMakeFiles/fdmdv_demod.dir/fdmdv_demod.c.o: ../src/debug_alloc.h +src/CMakeFiles/fdmdv_demod.dir/fdmdv_demod.c.o: ../src/fdmdv_demod.c +src/CMakeFiles/fdmdv_demod.dir/fdmdv_demod.c.o: ../src/freedv_api.h +src/CMakeFiles/fdmdv_demod.dir/fdmdv_demod.c.o: ../src/kiss_fft.h +src/CMakeFiles/fdmdv_demod.dir/fdmdv_demod.c.o: ../src/modem_stats.h +src/CMakeFiles/fdmdv_demod.dir/fdmdv_demod.c.o: ../src/octave.h + +src/CMakeFiles/fdmdv_demod.dir/kiss_fft.c.o: ../src/_kiss_fft_guts.h +src/CMakeFiles/fdmdv_demod.dir/kiss_fft.c.o: ../src/kiss_fft.c +src/CMakeFiles/fdmdv_demod.dir/kiss_fft.c.o: ../src/kiss_fft.h + +src/CMakeFiles/fdmdv_demod.dir/kiss_fftr.c.o: ../src/_kiss_fft_guts.h +src/CMakeFiles/fdmdv_demod.dir/kiss_fftr.c.o: ../src/kiss_fft.h +src/CMakeFiles/fdmdv_demod.dir/kiss_fftr.c.o: ../src/kiss_fftr.c +src/CMakeFiles/fdmdv_demod.dir/kiss_fftr.c.o: ../src/kiss_fftr.h + +src/CMakeFiles/fdmdv_demod.dir/modem_stats.c.o: ../src/codec2_fdmdv.h +src/CMakeFiles/fdmdv_demod.dir/modem_stats.c.o: ../src/comp.h +src/CMakeFiles/fdmdv_demod.dir/modem_stats.c.o: ../src/kiss_fft.h +src/CMakeFiles/fdmdv_demod.dir/modem_stats.c.o: ../src/modem_stats.c +src/CMakeFiles/fdmdv_demod.dir/modem_stats.c.o: ../src/modem_stats.h + +src/CMakeFiles/fdmdv_demod.dir/octave.c.o: ../src/comp.h +src/CMakeFiles/fdmdv_demod.dir/octave.c.o: ../src/octave.c +src/CMakeFiles/fdmdv_demod.dir/octave.c.o: ../src/octave.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_demod.dir/fdmdv.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_demod.dir/fdmdv.c.o new file mode 100644 index 0000000..02a53a4 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_demod.dir/fdmdv.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_demod.dir/fdmdv_demod.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_demod.dir/fdmdv_demod.c.o new file mode 100644 index 0000000..0e514b2 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_demod.dir/fdmdv_demod.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_demod.dir/flags.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_demod.dir/flags.make new file mode 100644 index 0000000..814242c --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_demod.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DGIT_HASH=\"df2ed16c\" -D_GNU_SOURCE=1 + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/src + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_demod.dir/kiss_fft.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_demod.dir/kiss_fft.c.o new file mode 100644 index 0000000..cf7c5c8 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_demod.dir/kiss_fft.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_demod.dir/kiss_fftr.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_demod.dir/kiss_fftr.c.o new file mode 100644 index 0000000..03157f4 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_demod.dir/kiss_fftr.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_demod.dir/link.txt b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_demod.dir/link.txt new file mode 100644 index 0000000..e61d971 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_demod.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/fdmdv_demod.dir/fdmdv_demod.c.o CMakeFiles/fdmdv_demod.dir/fdmdv.c.o CMakeFiles/fdmdv_demod.dir/kiss_fft.c.o CMakeFiles/fdmdv_demod.dir/octave.c.o CMakeFiles/fdmdv_demod.dir/modem_stats.c.o CMakeFiles/fdmdv_demod.dir/codec2_fft.c.o CMakeFiles/fdmdv_demod.dir/kiss_fftr.c.o -o fdmdv_demod -lm -lm diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_demod.dir/modem_stats.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_demod.dir/modem_stats.c.o new file mode 100644 index 0000000..dfb3230 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_demod.dir/modem_stats.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_demod.dir/octave.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_demod.dir/octave.c.o new file mode 100644 index 0000000..889ec3b Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_demod.dir/octave.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_demod.dir/progress.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_demod.dir/progress.make new file mode 100644 index 0000000..84a8e75 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_demod.dir/progress.make @@ -0,0 +1,9 @@ +CMAKE_PROGRESS_1 = +CMAKE_PROGRESS_2 = +CMAKE_PROGRESS_3 = 34 +CMAKE_PROGRESS_4 = +CMAKE_PROGRESS_5 = +CMAKE_PROGRESS_6 = 35 +CMAKE_PROGRESS_7 = +CMAKE_PROGRESS_8 = + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_get_test_bits.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_get_test_bits.dir/C.includecache new file mode 100644 index 0000000..6b7a1ba --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_get_test_bits.dir/C.includecache @@ -0,0 +1,160 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +/home/sh/Downloads/hackrf/codec2/src/_kiss_fft_guts.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h +limits.h +- +alloca.h +- + +/home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +modem_stats.h +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h + +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.c +codec2_fft.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.h +debug_alloc.h +/home/sh/Downloads/hackrf/codec2/src/debug_alloc.h +_kiss_fft_guts.h +/home/sh/Downloads/hackrf/codec2/src/_kiss_fft_guts.h + +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.h +assert.h +- +stdlib.h +- +stdio.h +- +string.h +- +math.h +- +fdv_arm_math.h +/home/sh/Downloads/hackrf/codec2/src/fdv_arm_math.h +defines.h +/home/sh/Downloads/hackrf/codec2/src/defines.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +kiss_fftr.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/comp_prim.h + +/home/sh/Downloads/hackrf/codec2/src/debug_alloc.h +stdio.h +- + +/home/sh/Downloads/hackrf/codec2/src/defines.h + +/home/sh/Downloads/hackrf/codec2/src/fdmdv.c +assert.h +- +stdlib.h +- +stdio.h +- +string.h +- +math.h +- +fdmdv_internal.h +/home/sh/Downloads/hackrf/codec2/src/fdmdv_internal.h +codec2_fdmdv.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h +comp_prim.h +/home/sh/Downloads/hackrf/codec2/src/comp_prim.h +rn.h +/home/sh/Downloads/hackrf/codec2/src/rn.h +rxdec_coeff.h +/home/sh/Downloads/hackrf/codec2/src/rxdec_coeff.h +test_bits.h +/home/sh/Downloads/hackrf/codec2/src/test_bits.h +pilot_coeff.h +/home/sh/Downloads/hackrf/codec2/src/pilot_coeff.h +codec2_fft.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.h +hanning.h +/home/sh/Downloads/hackrf/codec2/src/hanning.h +os.h +/home/sh/Downloads/hackrf/codec2/src/os.h +machdep.h +/home/sh/Downloads/hackrf/codec2/src/machdep.h +debug_alloc.h +/home/sh/Downloads/hackrf/codec2/src/debug_alloc.h + +/home/sh/Downloads/hackrf/codec2/src/fdmdv_get_test_bits.c +assert.h +- +stdio.h +- +stdlib.h +- +string.h +- +math.h +- +errno.h +- +codec2_fdmdv.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h + +/home/sh/Downloads/hackrf/codec2/src/fdmdv_internal.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +codec2_fdmdv.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h +codec2_fft.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.h + +/home/sh/Downloads/hackrf/codec2/src/hanning.h + +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h +stdlib.h +- +stdio.h +- +math.h +- +string.h +- +xmmintrin.h +- +sys/types.h +- + +/home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/src/machdep.h + +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/src/os.h + +/home/sh/Downloads/hackrf/codec2/src/pilot_coeff.h + +/home/sh/Downloads/hackrf/codec2/src/rn.h + +/home/sh/Downloads/hackrf/codec2/src/rxdec_coeff.h + +/home/sh/Downloads/hackrf/codec2/src/test_bits.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_get_test_bits.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_get_test_bits.dir/DependInfo.cmake new file mode 100644 index 0000000..cd2c1a1 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_get_test_bits.dir/DependInfo.cmake @@ -0,0 +1,32 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/src/codec2_fft.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/fdmdv_get_test_bits.dir/codec2_fft.c.o" + "/home/sh/Downloads/hackrf/codec2/src/fdmdv.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/fdmdv_get_test_bits.dir/fdmdv.c.o" + "/home/sh/Downloads/hackrf/codec2/src/fdmdv_get_test_bits.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/fdmdv_get_test_bits.dir/fdmdv_get_test_bits.c.o" + "/home/sh/Downloads/hackrf/codec2/src/kiss_fft.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/fdmdv_get_test_bits.dir/kiss_fft.c.o" + "/home/sh/Downloads/hackrf/codec2/src/kiss_fftr.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/fdmdv_get_test_bits.dir/kiss_fftr.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "GIT_HASH=\"df2ed16c\"" + "_GNU_SOURCE=1" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_get_test_bits.dir/build.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_get_test_bits.dir/build.make new file mode 100644 index 0000000..d32812d --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_get_test_bits.dir/build.make @@ -0,0 +1,158 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include src/CMakeFiles/fdmdv_get_test_bits.dir/depend.make + +# Include the progress variables for this target. +include src/CMakeFiles/fdmdv_get_test_bits.dir/progress.make + +# Include the compile flags for this target's objects. +include src/CMakeFiles/fdmdv_get_test_bits.dir/flags.make + +src/CMakeFiles/fdmdv_get_test_bits.dir/fdmdv_get_test_bits.c.o: src/CMakeFiles/fdmdv_get_test_bits.dir/flags.make +src/CMakeFiles/fdmdv_get_test_bits.dir/fdmdv_get_test_bits.c.o: ../src/fdmdv_get_test_bits.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object src/CMakeFiles/fdmdv_get_test_bits.dir/fdmdv_get_test_bits.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/fdmdv_get_test_bits.dir/fdmdv_get_test_bits.c.o -c /home/sh/Downloads/hackrf/codec2/src/fdmdv_get_test_bits.c + +src/CMakeFiles/fdmdv_get_test_bits.dir/fdmdv_get_test_bits.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/fdmdv_get_test_bits.dir/fdmdv_get_test_bits.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/fdmdv_get_test_bits.c > CMakeFiles/fdmdv_get_test_bits.dir/fdmdv_get_test_bits.c.i + +src/CMakeFiles/fdmdv_get_test_bits.dir/fdmdv_get_test_bits.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/fdmdv_get_test_bits.dir/fdmdv_get_test_bits.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/fdmdv_get_test_bits.c -o CMakeFiles/fdmdv_get_test_bits.dir/fdmdv_get_test_bits.c.s + +src/CMakeFiles/fdmdv_get_test_bits.dir/fdmdv.c.o: src/CMakeFiles/fdmdv_get_test_bits.dir/flags.make +src/CMakeFiles/fdmdv_get_test_bits.dir/fdmdv.c.o: ../src/fdmdv.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Building C object src/CMakeFiles/fdmdv_get_test_bits.dir/fdmdv.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/fdmdv_get_test_bits.dir/fdmdv.c.o -c /home/sh/Downloads/hackrf/codec2/src/fdmdv.c + +src/CMakeFiles/fdmdv_get_test_bits.dir/fdmdv.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/fdmdv_get_test_bits.dir/fdmdv.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/fdmdv.c > CMakeFiles/fdmdv_get_test_bits.dir/fdmdv.c.i + +src/CMakeFiles/fdmdv_get_test_bits.dir/fdmdv.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/fdmdv_get_test_bits.dir/fdmdv.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/fdmdv.c -o CMakeFiles/fdmdv_get_test_bits.dir/fdmdv.c.s + +src/CMakeFiles/fdmdv_get_test_bits.dir/kiss_fft.c.o: src/CMakeFiles/fdmdv_get_test_bits.dir/flags.make +src/CMakeFiles/fdmdv_get_test_bits.dir/kiss_fft.c.o: ../src/kiss_fft.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_3) "Building C object src/CMakeFiles/fdmdv_get_test_bits.dir/kiss_fft.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/fdmdv_get_test_bits.dir/kiss_fft.c.o -c /home/sh/Downloads/hackrf/codec2/src/kiss_fft.c + +src/CMakeFiles/fdmdv_get_test_bits.dir/kiss_fft.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/fdmdv_get_test_bits.dir/kiss_fft.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/kiss_fft.c > CMakeFiles/fdmdv_get_test_bits.dir/kiss_fft.c.i + +src/CMakeFiles/fdmdv_get_test_bits.dir/kiss_fft.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/fdmdv_get_test_bits.dir/kiss_fft.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/kiss_fft.c -o CMakeFiles/fdmdv_get_test_bits.dir/kiss_fft.c.s + +src/CMakeFiles/fdmdv_get_test_bits.dir/codec2_fft.c.o: src/CMakeFiles/fdmdv_get_test_bits.dir/flags.make +src/CMakeFiles/fdmdv_get_test_bits.dir/codec2_fft.c.o: ../src/codec2_fft.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_4) "Building C object src/CMakeFiles/fdmdv_get_test_bits.dir/codec2_fft.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/fdmdv_get_test_bits.dir/codec2_fft.c.o -c /home/sh/Downloads/hackrf/codec2/src/codec2_fft.c + +src/CMakeFiles/fdmdv_get_test_bits.dir/codec2_fft.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/fdmdv_get_test_bits.dir/codec2_fft.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/codec2_fft.c > CMakeFiles/fdmdv_get_test_bits.dir/codec2_fft.c.i + +src/CMakeFiles/fdmdv_get_test_bits.dir/codec2_fft.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/fdmdv_get_test_bits.dir/codec2_fft.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/codec2_fft.c -o CMakeFiles/fdmdv_get_test_bits.dir/codec2_fft.c.s + +src/CMakeFiles/fdmdv_get_test_bits.dir/kiss_fftr.c.o: src/CMakeFiles/fdmdv_get_test_bits.dir/flags.make +src/CMakeFiles/fdmdv_get_test_bits.dir/kiss_fftr.c.o: ../src/kiss_fftr.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_5) "Building C object src/CMakeFiles/fdmdv_get_test_bits.dir/kiss_fftr.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/fdmdv_get_test_bits.dir/kiss_fftr.c.o -c /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.c + +src/CMakeFiles/fdmdv_get_test_bits.dir/kiss_fftr.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/fdmdv_get_test_bits.dir/kiss_fftr.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.c > CMakeFiles/fdmdv_get_test_bits.dir/kiss_fftr.c.i + +src/CMakeFiles/fdmdv_get_test_bits.dir/kiss_fftr.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/fdmdv_get_test_bits.dir/kiss_fftr.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.c -o CMakeFiles/fdmdv_get_test_bits.dir/kiss_fftr.c.s + +# Object files for target fdmdv_get_test_bits +fdmdv_get_test_bits_OBJECTS = \ +"CMakeFiles/fdmdv_get_test_bits.dir/fdmdv_get_test_bits.c.o" \ +"CMakeFiles/fdmdv_get_test_bits.dir/fdmdv.c.o" \ +"CMakeFiles/fdmdv_get_test_bits.dir/kiss_fft.c.o" \ +"CMakeFiles/fdmdv_get_test_bits.dir/codec2_fft.c.o" \ +"CMakeFiles/fdmdv_get_test_bits.dir/kiss_fftr.c.o" + +# External object files for target fdmdv_get_test_bits +fdmdv_get_test_bits_EXTERNAL_OBJECTS = + +src/fdmdv_get_test_bits: src/CMakeFiles/fdmdv_get_test_bits.dir/fdmdv_get_test_bits.c.o +src/fdmdv_get_test_bits: src/CMakeFiles/fdmdv_get_test_bits.dir/fdmdv.c.o +src/fdmdv_get_test_bits: src/CMakeFiles/fdmdv_get_test_bits.dir/kiss_fft.c.o +src/fdmdv_get_test_bits: src/CMakeFiles/fdmdv_get_test_bits.dir/codec2_fft.c.o +src/fdmdv_get_test_bits: src/CMakeFiles/fdmdv_get_test_bits.dir/kiss_fftr.c.o +src/fdmdv_get_test_bits: src/CMakeFiles/fdmdv_get_test_bits.dir/build.make +src/fdmdv_get_test_bits: src/CMakeFiles/fdmdv_get_test_bits.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_6) "Linking C executable fdmdv_get_test_bits" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/fdmdv_get_test_bits.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +src/CMakeFiles/fdmdv_get_test_bits.dir/build: src/fdmdv_get_test_bits + +.PHONY : src/CMakeFiles/fdmdv_get_test_bits.dir/build + +src/CMakeFiles/fdmdv_get_test_bits.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -P CMakeFiles/fdmdv_get_test_bits.dir/cmake_clean.cmake +.PHONY : src/CMakeFiles/fdmdv_get_test_bits.dir/clean + +src/CMakeFiles/fdmdv_get_test_bits.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/src /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/src /home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/fdmdv_get_test_bits.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : src/CMakeFiles/fdmdv_get_test_bits.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_get_test_bits.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_get_test_bits.dir/cmake_clean.cmake new file mode 100644 index 0000000..35074ff --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_get_test_bits.dir/cmake_clean.cmake @@ -0,0 +1,14 @@ +file(REMOVE_RECURSE + "CMakeFiles/fdmdv_get_test_bits.dir/fdmdv_get_test_bits.c.o" + "CMakeFiles/fdmdv_get_test_bits.dir/fdmdv.c.o" + "CMakeFiles/fdmdv_get_test_bits.dir/kiss_fft.c.o" + "CMakeFiles/fdmdv_get_test_bits.dir/codec2_fft.c.o" + "CMakeFiles/fdmdv_get_test_bits.dir/kiss_fftr.c.o" + "fdmdv_get_test_bits.pdb" + "fdmdv_get_test_bits" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/fdmdv_get_test_bits.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_get_test_bits.dir/codec2_fft.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_get_test_bits.dir/codec2_fft.c.o new file mode 100644 index 0000000..7d51431 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_get_test_bits.dir/codec2_fft.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_get_test_bits.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_get_test_bits.dir/depend.internal new file mode 100644 index 0000000..2c81e29 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_get_test_bits.dir/depend.internal @@ -0,0 +1,46 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/fdmdv_get_test_bits.dir/codec2_fft.c.o + /home/sh/Downloads/hackrf/codec2/src/_kiss_fft_guts.h + /home/sh/Downloads/hackrf/codec2/src/codec2_fft.c + /home/sh/Downloads/hackrf/codec2/src/codec2_fft.h + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/debug_alloc.h + /home/sh/Downloads/hackrf/codec2/src/defines.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h +src/CMakeFiles/fdmdv_get_test_bits.dir/fdmdv.c.o + /home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h + /home/sh/Downloads/hackrf/codec2/src/codec2_fft.h + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/comp_prim.h + /home/sh/Downloads/hackrf/codec2/src/debug_alloc.h + /home/sh/Downloads/hackrf/codec2/src/defines.h + /home/sh/Downloads/hackrf/codec2/src/fdmdv.c + /home/sh/Downloads/hackrf/codec2/src/fdmdv_internal.h + /home/sh/Downloads/hackrf/codec2/src/hanning.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h + /home/sh/Downloads/hackrf/codec2/src/machdep.h + /home/sh/Downloads/hackrf/codec2/src/modem_stats.h + /home/sh/Downloads/hackrf/codec2/src/os.h + /home/sh/Downloads/hackrf/codec2/src/pilot_coeff.h + /home/sh/Downloads/hackrf/codec2/src/rn.h + /home/sh/Downloads/hackrf/codec2/src/rxdec_coeff.h + /home/sh/Downloads/hackrf/codec2/src/test_bits.h +src/CMakeFiles/fdmdv_get_test_bits.dir/fdmdv_get_test_bits.c.o + /home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/fdmdv_get_test_bits.c + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/modem_stats.h +src/CMakeFiles/fdmdv_get_test_bits.dir/kiss_fft.c.o + /home/sh/Downloads/hackrf/codec2/src/_kiss_fft_guts.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.c + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h +src/CMakeFiles/fdmdv_get_test_bits.dir/kiss_fftr.c.o + /home/sh/Downloads/hackrf/codec2/src/_kiss_fft_guts.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.c + /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_get_test_bits.dir/depend.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_get_test_bits.dir/depend.make new file mode 100644 index 0000000..a385a21 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_get_test_bits.dir/depend.make @@ -0,0 +1,46 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/fdmdv_get_test_bits.dir/codec2_fft.c.o: ../src/_kiss_fft_guts.h +src/CMakeFiles/fdmdv_get_test_bits.dir/codec2_fft.c.o: ../src/codec2_fft.c +src/CMakeFiles/fdmdv_get_test_bits.dir/codec2_fft.c.o: ../src/codec2_fft.h +src/CMakeFiles/fdmdv_get_test_bits.dir/codec2_fft.c.o: ../src/comp.h +src/CMakeFiles/fdmdv_get_test_bits.dir/codec2_fft.c.o: ../src/debug_alloc.h +src/CMakeFiles/fdmdv_get_test_bits.dir/codec2_fft.c.o: ../src/defines.h +src/CMakeFiles/fdmdv_get_test_bits.dir/codec2_fft.c.o: ../src/kiss_fft.h +src/CMakeFiles/fdmdv_get_test_bits.dir/codec2_fft.c.o: ../src/kiss_fftr.h + +src/CMakeFiles/fdmdv_get_test_bits.dir/fdmdv.c.o: ../src/codec2_fdmdv.h +src/CMakeFiles/fdmdv_get_test_bits.dir/fdmdv.c.o: ../src/codec2_fft.h +src/CMakeFiles/fdmdv_get_test_bits.dir/fdmdv.c.o: ../src/comp.h +src/CMakeFiles/fdmdv_get_test_bits.dir/fdmdv.c.o: ../src/comp_prim.h +src/CMakeFiles/fdmdv_get_test_bits.dir/fdmdv.c.o: ../src/debug_alloc.h +src/CMakeFiles/fdmdv_get_test_bits.dir/fdmdv.c.o: ../src/defines.h +src/CMakeFiles/fdmdv_get_test_bits.dir/fdmdv.c.o: ../src/fdmdv.c +src/CMakeFiles/fdmdv_get_test_bits.dir/fdmdv.c.o: ../src/fdmdv_internal.h +src/CMakeFiles/fdmdv_get_test_bits.dir/fdmdv.c.o: ../src/hanning.h +src/CMakeFiles/fdmdv_get_test_bits.dir/fdmdv.c.o: ../src/kiss_fft.h +src/CMakeFiles/fdmdv_get_test_bits.dir/fdmdv.c.o: ../src/kiss_fftr.h +src/CMakeFiles/fdmdv_get_test_bits.dir/fdmdv.c.o: ../src/machdep.h +src/CMakeFiles/fdmdv_get_test_bits.dir/fdmdv.c.o: ../src/modem_stats.h +src/CMakeFiles/fdmdv_get_test_bits.dir/fdmdv.c.o: ../src/os.h +src/CMakeFiles/fdmdv_get_test_bits.dir/fdmdv.c.o: ../src/pilot_coeff.h +src/CMakeFiles/fdmdv_get_test_bits.dir/fdmdv.c.o: ../src/rn.h +src/CMakeFiles/fdmdv_get_test_bits.dir/fdmdv.c.o: ../src/rxdec_coeff.h +src/CMakeFiles/fdmdv_get_test_bits.dir/fdmdv.c.o: ../src/test_bits.h + +src/CMakeFiles/fdmdv_get_test_bits.dir/fdmdv_get_test_bits.c.o: ../src/codec2_fdmdv.h +src/CMakeFiles/fdmdv_get_test_bits.dir/fdmdv_get_test_bits.c.o: ../src/comp.h +src/CMakeFiles/fdmdv_get_test_bits.dir/fdmdv_get_test_bits.c.o: ../src/fdmdv_get_test_bits.c +src/CMakeFiles/fdmdv_get_test_bits.dir/fdmdv_get_test_bits.c.o: ../src/kiss_fft.h +src/CMakeFiles/fdmdv_get_test_bits.dir/fdmdv_get_test_bits.c.o: ../src/modem_stats.h + +src/CMakeFiles/fdmdv_get_test_bits.dir/kiss_fft.c.o: ../src/_kiss_fft_guts.h +src/CMakeFiles/fdmdv_get_test_bits.dir/kiss_fft.c.o: ../src/kiss_fft.c +src/CMakeFiles/fdmdv_get_test_bits.dir/kiss_fft.c.o: ../src/kiss_fft.h + +src/CMakeFiles/fdmdv_get_test_bits.dir/kiss_fftr.c.o: ../src/_kiss_fft_guts.h +src/CMakeFiles/fdmdv_get_test_bits.dir/kiss_fftr.c.o: ../src/kiss_fft.h +src/CMakeFiles/fdmdv_get_test_bits.dir/kiss_fftr.c.o: ../src/kiss_fftr.c +src/CMakeFiles/fdmdv_get_test_bits.dir/kiss_fftr.c.o: ../src/kiss_fftr.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_get_test_bits.dir/fdmdv.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_get_test_bits.dir/fdmdv.c.o new file mode 100644 index 0000000..02a53a4 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_get_test_bits.dir/fdmdv.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_get_test_bits.dir/fdmdv_get_test_bits.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_get_test_bits.dir/fdmdv_get_test_bits.c.o new file mode 100644 index 0000000..25cf59a Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_get_test_bits.dir/fdmdv_get_test_bits.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_get_test_bits.dir/flags.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_get_test_bits.dir/flags.make new file mode 100644 index 0000000..814242c --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_get_test_bits.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DGIT_HASH=\"df2ed16c\" -D_GNU_SOURCE=1 + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/src + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_get_test_bits.dir/kiss_fft.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_get_test_bits.dir/kiss_fft.c.o new file mode 100644 index 0000000..cf7c5c8 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_get_test_bits.dir/kiss_fft.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_get_test_bits.dir/kiss_fftr.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_get_test_bits.dir/kiss_fftr.c.o new file mode 100644 index 0000000..03157f4 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_get_test_bits.dir/kiss_fftr.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_get_test_bits.dir/link.txt b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_get_test_bits.dir/link.txt new file mode 100644 index 0000000..8a45a55 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_get_test_bits.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/fdmdv_get_test_bits.dir/fdmdv_get_test_bits.c.o CMakeFiles/fdmdv_get_test_bits.dir/fdmdv.c.o CMakeFiles/fdmdv_get_test_bits.dir/kiss_fft.c.o CMakeFiles/fdmdv_get_test_bits.dir/codec2_fft.c.o CMakeFiles/fdmdv_get_test_bits.dir/kiss_fftr.c.o -o fdmdv_get_test_bits -lm -lm diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_get_test_bits.dir/progress.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_get_test_bits.dir/progress.make new file mode 100644 index 0000000..4a8becb --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_get_test_bits.dir/progress.make @@ -0,0 +1,7 @@ +CMAKE_PROGRESS_1 = 36 +CMAKE_PROGRESS_2 = +CMAKE_PROGRESS_3 = +CMAKE_PROGRESS_4 = 37 +CMAKE_PROGRESS_5 = +CMAKE_PROGRESS_6 = + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_mod.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_mod.dir/C.includecache new file mode 100644 index 0000000..7fb4aa7 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_mod.dir/C.includecache @@ -0,0 +1,160 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +/home/sh/Downloads/hackrf/codec2/src/_kiss_fft_guts.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h +limits.h +- +alloca.h +- + +/home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +modem_stats.h +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h + +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.c +codec2_fft.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.h +debug_alloc.h +/home/sh/Downloads/hackrf/codec2/src/debug_alloc.h +_kiss_fft_guts.h +/home/sh/Downloads/hackrf/codec2/src/_kiss_fft_guts.h + +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.h +assert.h +- +stdlib.h +- +stdio.h +- +string.h +- +math.h +- +fdv_arm_math.h +/home/sh/Downloads/hackrf/codec2/src/fdv_arm_math.h +defines.h +/home/sh/Downloads/hackrf/codec2/src/defines.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +kiss_fftr.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/comp_prim.h + +/home/sh/Downloads/hackrf/codec2/src/debug_alloc.h +stdio.h +- + +/home/sh/Downloads/hackrf/codec2/src/defines.h + +/home/sh/Downloads/hackrf/codec2/src/fdmdv.c +assert.h +- +stdlib.h +- +stdio.h +- +string.h +- +math.h +- +fdmdv_internal.h +/home/sh/Downloads/hackrf/codec2/src/fdmdv_internal.h +codec2_fdmdv.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h +comp_prim.h +/home/sh/Downloads/hackrf/codec2/src/comp_prim.h +rn.h +/home/sh/Downloads/hackrf/codec2/src/rn.h +rxdec_coeff.h +/home/sh/Downloads/hackrf/codec2/src/rxdec_coeff.h +test_bits.h +/home/sh/Downloads/hackrf/codec2/src/test_bits.h +pilot_coeff.h +/home/sh/Downloads/hackrf/codec2/src/pilot_coeff.h +codec2_fft.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.h +hanning.h +/home/sh/Downloads/hackrf/codec2/src/hanning.h +os.h +/home/sh/Downloads/hackrf/codec2/src/os.h +machdep.h +/home/sh/Downloads/hackrf/codec2/src/machdep.h +debug_alloc.h +/home/sh/Downloads/hackrf/codec2/src/debug_alloc.h + +/home/sh/Downloads/hackrf/codec2/src/fdmdv_internal.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +codec2_fdmdv.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h +codec2_fft.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.h + +/home/sh/Downloads/hackrf/codec2/src/fdmdv_mod.c +assert.h +- +stdio.h +- +stdlib.h +- +string.h +- +math.h +- +errno.h +- +codec2_fdmdv.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h + +/home/sh/Downloads/hackrf/codec2/src/hanning.h + +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h +stdlib.h +- +stdio.h +- +math.h +- +string.h +- +xmmintrin.h +- +sys/types.h +- + +/home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/src/machdep.h + +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/src/os.h + +/home/sh/Downloads/hackrf/codec2/src/pilot_coeff.h + +/home/sh/Downloads/hackrf/codec2/src/rn.h + +/home/sh/Downloads/hackrf/codec2/src/rxdec_coeff.h + +/home/sh/Downloads/hackrf/codec2/src/test_bits.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_mod.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_mod.dir/DependInfo.cmake new file mode 100644 index 0000000..e2443fa --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_mod.dir/DependInfo.cmake @@ -0,0 +1,32 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/src/codec2_fft.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/fdmdv_mod.dir/codec2_fft.c.o" + "/home/sh/Downloads/hackrf/codec2/src/fdmdv.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/fdmdv_mod.dir/fdmdv.c.o" + "/home/sh/Downloads/hackrf/codec2/src/fdmdv_mod.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/fdmdv_mod.dir/fdmdv_mod.c.o" + "/home/sh/Downloads/hackrf/codec2/src/kiss_fft.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/fdmdv_mod.dir/kiss_fft.c.o" + "/home/sh/Downloads/hackrf/codec2/src/kiss_fftr.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/fdmdv_mod.dir/kiss_fftr.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "GIT_HASH=\"df2ed16c\"" + "_GNU_SOURCE=1" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_mod.dir/build.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_mod.dir/build.make new file mode 100644 index 0000000..5212ac7 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_mod.dir/build.make @@ -0,0 +1,158 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include src/CMakeFiles/fdmdv_mod.dir/depend.make + +# Include the progress variables for this target. +include src/CMakeFiles/fdmdv_mod.dir/progress.make + +# Include the compile flags for this target's objects. +include src/CMakeFiles/fdmdv_mod.dir/flags.make + +src/CMakeFiles/fdmdv_mod.dir/fdmdv_mod.c.o: src/CMakeFiles/fdmdv_mod.dir/flags.make +src/CMakeFiles/fdmdv_mod.dir/fdmdv_mod.c.o: ../src/fdmdv_mod.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object src/CMakeFiles/fdmdv_mod.dir/fdmdv_mod.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/fdmdv_mod.dir/fdmdv_mod.c.o -c /home/sh/Downloads/hackrf/codec2/src/fdmdv_mod.c + +src/CMakeFiles/fdmdv_mod.dir/fdmdv_mod.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/fdmdv_mod.dir/fdmdv_mod.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/fdmdv_mod.c > CMakeFiles/fdmdv_mod.dir/fdmdv_mod.c.i + +src/CMakeFiles/fdmdv_mod.dir/fdmdv_mod.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/fdmdv_mod.dir/fdmdv_mod.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/fdmdv_mod.c -o CMakeFiles/fdmdv_mod.dir/fdmdv_mod.c.s + +src/CMakeFiles/fdmdv_mod.dir/fdmdv.c.o: src/CMakeFiles/fdmdv_mod.dir/flags.make +src/CMakeFiles/fdmdv_mod.dir/fdmdv.c.o: ../src/fdmdv.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Building C object src/CMakeFiles/fdmdv_mod.dir/fdmdv.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/fdmdv_mod.dir/fdmdv.c.o -c /home/sh/Downloads/hackrf/codec2/src/fdmdv.c + +src/CMakeFiles/fdmdv_mod.dir/fdmdv.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/fdmdv_mod.dir/fdmdv.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/fdmdv.c > CMakeFiles/fdmdv_mod.dir/fdmdv.c.i + +src/CMakeFiles/fdmdv_mod.dir/fdmdv.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/fdmdv_mod.dir/fdmdv.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/fdmdv.c -o CMakeFiles/fdmdv_mod.dir/fdmdv.c.s + +src/CMakeFiles/fdmdv_mod.dir/kiss_fft.c.o: src/CMakeFiles/fdmdv_mod.dir/flags.make +src/CMakeFiles/fdmdv_mod.dir/kiss_fft.c.o: ../src/kiss_fft.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_3) "Building C object src/CMakeFiles/fdmdv_mod.dir/kiss_fft.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/fdmdv_mod.dir/kiss_fft.c.o -c /home/sh/Downloads/hackrf/codec2/src/kiss_fft.c + +src/CMakeFiles/fdmdv_mod.dir/kiss_fft.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/fdmdv_mod.dir/kiss_fft.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/kiss_fft.c > CMakeFiles/fdmdv_mod.dir/kiss_fft.c.i + +src/CMakeFiles/fdmdv_mod.dir/kiss_fft.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/fdmdv_mod.dir/kiss_fft.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/kiss_fft.c -o CMakeFiles/fdmdv_mod.dir/kiss_fft.c.s + +src/CMakeFiles/fdmdv_mod.dir/codec2_fft.c.o: src/CMakeFiles/fdmdv_mod.dir/flags.make +src/CMakeFiles/fdmdv_mod.dir/codec2_fft.c.o: ../src/codec2_fft.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_4) "Building C object src/CMakeFiles/fdmdv_mod.dir/codec2_fft.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/fdmdv_mod.dir/codec2_fft.c.o -c /home/sh/Downloads/hackrf/codec2/src/codec2_fft.c + +src/CMakeFiles/fdmdv_mod.dir/codec2_fft.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/fdmdv_mod.dir/codec2_fft.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/codec2_fft.c > CMakeFiles/fdmdv_mod.dir/codec2_fft.c.i + +src/CMakeFiles/fdmdv_mod.dir/codec2_fft.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/fdmdv_mod.dir/codec2_fft.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/codec2_fft.c -o CMakeFiles/fdmdv_mod.dir/codec2_fft.c.s + +src/CMakeFiles/fdmdv_mod.dir/kiss_fftr.c.o: src/CMakeFiles/fdmdv_mod.dir/flags.make +src/CMakeFiles/fdmdv_mod.dir/kiss_fftr.c.o: ../src/kiss_fftr.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_5) "Building C object src/CMakeFiles/fdmdv_mod.dir/kiss_fftr.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/fdmdv_mod.dir/kiss_fftr.c.o -c /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.c + +src/CMakeFiles/fdmdv_mod.dir/kiss_fftr.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/fdmdv_mod.dir/kiss_fftr.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.c > CMakeFiles/fdmdv_mod.dir/kiss_fftr.c.i + +src/CMakeFiles/fdmdv_mod.dir/kiss_fftr.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/fdmdv_mod.dir/kiss_fftr.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.c -o CMakeFiles/fdmdv_mod.dir/kiss_fftr.c.s + +# Object files for target fdmdv_mod +fdmdv_mod_OBJECTS = \ +"CMakeFiles/fdmdv_mod.dir/fdmdv_mod.c.o" \ +"CMakeFiles/fdmdv_mod.dir/fdmdv.c.o" \ +"CMakeFiles/fdmdv_mod.dir/kiss_fft.c.o" \ +"CMakeFiles/fdmdv_mod.dir/codec2_fft.c.o" \ +"CMakeFiles/fdmdv_mod.dir/kiss_fftr.c.o" + +# External object files for target fdmdv_mod +fdmdv_mod_EXTERNAL_OBJECTS = + +src/fdmdv_mod: src/CMakeFiles/fdmdv_mod.dir/fdmdv_mod.c.o +src/fdmdv_mod: src/CMakeFiles/fdmdv_mod.dir/fdmdv.c.o +src/fdmdv_mod: src/CMakeFiles/fdmdv_mod.dir/kiss_fft.c.o +src/fdmdv_mod: src/CMakeFiles/fdmdv_mod.dir/codec2_fft.c.o +src/fdmdv_mod: src/CMakeFiles/fdmdv_mod.dir/kiss_fftr.c.o +src/fdmdv_mod: src/CMakeFiles/fdmdv_mod.dir/build.make +src/fdmdv_mod: src/CMakeFiles/fdmdv_mod.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_6) "Linking C executable fdmdv_mod" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/fdmdv_mod.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +src/CMakeFiles/fdmdv_mod.dir/build: src/fdmdv_mod + +.PHONY : src/CMakeFiles/fdmdv_mod.dir/build + +src/CMakeFiles/fdmdv_mod.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -P CMakeFiles/fdmdv_mod.dir/cmake_clean.cmake +.PHONY : src/CMakeFiles/fdmdv_mod.dir/clean + +src/CMakeFiles/fdmdv_mod.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/src /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/src /home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/fdmdv_mod.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : src/CMakeFiles/fdmdv_mod.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_mod.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_mod.dir/cmake_clean.cmake new file mode 100644 index 0000000..d3f1516 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_mod.dir/cmake_clean.cmake @@ -0,0 +1,14 @@ +file(REMOVE_RECURSE + "CMakeFiles/fdmdv_mod.dir/fdmdv_mod.c.o" + "CMakeFiles/fdmdv_mod.dir/fdmdv.c.o" + "CMakeFiles/fdmdv_mod.dir/kiss_fft.c.o" + "CMakeFiles/fdmdv_mod.dir/codec2_fft.c.o" + "CMakeFiles/fdmdv_mod.dir/kiss_fftr.c.o" + "fdmdv_mod.pdb" + "fdmdv_mod" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/fdmdv_mod.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_mod.dir/codec2_fft.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_mod.dir/codec2_fft.c.o new file mode 100644 index 0000000..7d51431 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_mod.dir/codec2_fft.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_mod.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_mod.dir/depend.internal new file mode 100644 index 0000000..9e2b861 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_mod.dir/depend.internal @@ -0,0 +1,46 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/fdmdv_mod.dir/codec2_fft.c.o + /home/sh/Downloads/hackrf/codec2/src/_kiss_fft_guts.h + /home/sh/Downloads/hackrf/codec2/src/codec2_fft.c + /home/sh/Downloads/hackrf/codec2/src/codec2_fft.h + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/debug_alloc.h + /home/sh/Downloads/hackrf/codec2/src/defines.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h +src/CMakeFiles/fdmdv_mod.dir/fdmdv.c.o + /home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h + /home/sh/Downloads/hackrf/codec2/src/codec2_fft.h + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/comp_prim.h + /home/sh/Downloads/hackrf/codec2/src/debug_alloc.h + /home/sh/Downloads/hackrf/codec2/src/defines.h + /home/sh/Downloads/hackrf/codec2/src/fdmdv.c + /home/sh/Downloads/hackrf/codec2/src/fdmdv_internal.h + /home/sh/Downloads/hackrf/codec2/src/hanning.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h + /home/sh/Downloads/hackrf/codec2/src/machdep.h + /home/sh/Downloads/hackrf/codec2/src/modem_stats.h + /home/sh/Downloads/hackrf/codec2/src/os.h + /home/sh/Downloads/hackrf/codec2/src/pilot_coeff.h + /home/sh/Downloads/hackrf/codec2/src/rn.h + /home/sh/Downloads/hackrf/codec2/src/rxdec_coeff.h + /home/sh/Downloads/hackrf/codec2/src/test_bits.h +src/CMakeFiles/fdmdv_mod.dir/fdmdv_mod.c.o + /home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/fdmdv_mod.c + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/modem_stats.h +src/CMakeFiles/fdmdv_mod.dir/kiss_fft.c.o + /home/sh/Downloads/hackrf/codec2/src/_kiss_fft_guts.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.c + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h +src/CMakeFiles/fdmdv_mod.dir/kiss_fftr.c.o + /home/sh/Downloads/hackrf/codec2/src/_kiss_fft_guts.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.c + /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_mod.dir/depend.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_mod.dir/depend.make new file mode 100644 index 0000000..38b9d24 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_mod.dir/depend.make @@ -0,0 +1,46 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/fdmdv_mod.dir/codec2_fft.c.o: ../src/_kiss_fft_guts.h +src/CMakeFiles/fdmdv_mod.dir/codec2_fft.c.o: ../src/codec2_fft.c +src/CMakeFiles/fdmdv_mod.dir/codec2_fft.c.o: ../src/codec2_fft.h +src/CMakeFiles/fdmdv_mod.dir/codec2_fft.c.o: ../src/comp.h +src/CMakeFiles/fdmdv_mod.dir/codec2_fft.c.o: ../src/debug_alloc.h +src/CMakeFiles/fdmdv_mod.dir/codec2_fft.c.o: ../src/defines.h +src/CMakeFiles/fdmdv_mod.dir/codec2_fft.c.o: ../src/kiss_fft.h +src/CMakeFiles/fdmdv_mod.dir/codec2_fft.c.o: ../src/kiss_fftr.h + +src/CMakeFiles/fdmdv_mod.dir/fdmdv.c.o: ../src/codec2_fdmdv.h +src/CMakeFiles/fdmdv_mod.dir/fdmdv.c.o: ../src/codec2_fft.h +src/CMakeFiles/fdmdv_mod.dir/fdmdv.c.o: ../src/comp.h +src/CMakeFiles/fdmdv_mod.dir/fdmdv.c.o: ../src/comp_prim.h +src/CMakeFiles/fdmdv_mod.dir/fdmdv.c.o: ../src/debug_alloc.h +src/CMakeFiles/fdmdv_mod.dir/fdmdv.c.o: ../src/defines.h +src/CMakeFiles/fdmdv_mod.dir/fdmdv.c.o: ../src/fdmdv.c +src/CMakeFiles/fdmdv_mod.dir/fdmdv.c.o: ../src/fdmdv_internal.h +src/CMakeFiles/fdmdv_mod.dir/fdmdv.c.o: ../src/hanning.h +src/CMakeFiles/fdmdv_mod.dir/fdmdv.c.o: ../src/kiss_fft.h +src/CMakeFiles/fdmdv_mod.dir/fdmdv.c.o: ../src/kiss_fftr.h +src/CMakeFiles/fdmdv_mod.dir/fdmdv.c.o: ../src/machdep.h +src/CMakeFiles/fdmdv_mod.dir/fdmdv.c.o: ../src/modem_stats.h +src/CMakeFiles/fdmdv_mod.dir/fdmdv.c.o: ../src/os.h +src/CMakeFiles/fdmdv_mod.dir/fdmdv.c.o: ../src/pilot_coeff.h +src/CMakeFiles/fdmdv_mod.dir/fdmdv.c.o: ../src/rn.h +src/CMakeFiles/fdmdv_mod.dir/fdmdv.c.o: ../src/rxdec_coeff.h +src/CMakeFiles/fdmdv_mod.dir/fdmdv.c.o: ../src/test_bits.h + +src/CMakeFiles/fdmdv_mod.dir/fdmdv_mod.c.o: ../src/codec2_fdmdv.h +src/CMakeFiles/fdmdv_mod.dir/fdmdv_mod.c.o: ../src/comp.h +src/CMakeFiles/fdmdv_mod.dir/fdmdv_mod.c.o: ../src/fdmdv_mod.c +src/CMakeFiles/fdmdv_mod.dir/fdmdv_mod.c.o: ../src/kiss_fft.h +src/CMakeFiles/fdmdv_mod.dir/fdmdv_mod.c.o: ../src/modem_stats.h + +src/CMakeFiles/fdmdv_mod.dir/kiss_fft.c.o: ../src/_kiss_fft_guts.h +src/CMakeFiles/fdmdv_mod.dir/kiss_fft.c.o: ../src/kiss_fft.c +src/CMakeFiles/fdmdv_mod.dir/kiss_fft.c.o: ../src/kiss_fft.h + +src/CMakeFiles/fdmdv_mod.dir/kiss_fftr.c.o: ../src/_kiss_fft_guts.h +src/CMakeFiles/fdmdv_mod.dir/kiss_fftr.c.o: ../src/kiss_fft.h +src/CMakeFiles/fdmdv_mod.dir/kiss_fftr.c.o: ../src/kiss_fftr.c +src/CMakeFiles/fdmdv_mod.dir/kiss_fftr.c.o: ../src/kiss_fftr.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_mod.dir/fdmdv.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_mod.dir/fdmdv.c.o new file mode 100644 index 0000000..02a53a4 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_mod.dir/fdmdv.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_mod.dir/fdmdv_mod.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_mod.dir/fdmdv_mod.c.o new file mode 100644 index 0000000..b8c1ab3 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_mod.dir/fdmdv_mod.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_mod.dir/flags.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_mod.dir/flags.make new file mode 100644 index 0000000..814242c --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_mod.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DGIT_HASH=\"df2ed16c\" -D_GNU_SOURCE=1 + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/src + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_mod.dir/kiss_fft.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_mod.dir/kiss_fft.c.o new file mode 100644 index 0000000..cf7c5c8 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_mod.dir/kiss_fft.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_mod.dir/kiss_fftr.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_mod.dir/kiss_fftr.c.o new file mode 100644 index 0000000..03157f4 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_mod.dir/kiss_fftr.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_mod.dir/link.txt b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_mod.dir/link.txt new file mode 100644 index 0000000..2ddfe48 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_mod.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/fdmdv_mod.dir/fdmdv_mod.c.o CMakeFiles/fdmdv_mod.dir/fdmdv.c.o CMakeFiles/fdmdv_mod.dir/kiss_fft.c.o CMakeFiles/fdmdv_mod.dir/codec2_fft.c.o CMakeFiles/fdmdv_mod.dir/kiss_fftr.c.o -o fdmdv_mod -lm -lm diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_mod.dir/progress.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_mod.dir/progress.make new file mode 100644 index 0000000..ceba398 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_mod.dir/progress.make @@ -0,0 +1,7 @@ +CMAKE_PROGRESS_1 = +CMAKE_PROGRESS_2 = 39 +CMAKE_PROGRESS_3 = +CMAKE_PROGRESS_4 = +CMAKE_PROGRESS_5 = 40 +CMAKE_PROGRESS_6 = + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_put_test_bits.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_put_test_bits.dir/C.includecache new file mode 100644 index 0000000..dd533a9 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_put_test_bits.dir/C.includecache @@ -0,0 +1,160 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +/home/sh/Downloads/hackrf/codec2/src/_kiss_fft_guts.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h +limits.h +- +alloca.h +- + +/home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +modem_stats.h +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h + +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.c +codec2_fft.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.h +debug_alloc.h +/home/sh/Downloads/hackrf/codec2/src/debug_alloc.h +_kiss_fft_guts.h +/home/sh/Downloads/hackrf/codec2/src/_kiss_fft_guts.h + +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.h +assert.h +- +stdlib.h +- +stdio.h +- +string.h +- +math.h +- +fdv_arm_math.h +/home/sh/Downloads/hackrf/codec2/src/fdv_arm_math.h +defines.h +/home/sh/Downloads/hackrf/codec2/src/defines.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +kiss_fftr.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/comp_prim.h + +/home/sh/Downloads/hackrf/codec2/src/debug_alloc.h +stdio.h +- + +/home/sh/Downloads/hackrf/codec2/src/defines.h + +/home/sh/Downloads/hackrf/codec2/src/fdmdv.c +assert.h +- +stdlib.h +- +stdio.h +- +string.h +- +math.h +- +fdmdv_internal.h +/home/sh/Downloads/hackrf/codec2/src/fdmdv_internal.h +codec2_fdmdv.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h +comp_prim.h +/home/sh/Downloads/hackrf/codec2/src/comp_prim.h +rn.h +/home/sh/Downloads/hackrf/codec2/src/rn.h +rxdec_coeff.h +/home/sh/Downloads/hackrf/codec2/src/rxdec_coeff.h +test_bits.h +/home/sh/Downloads/hackrf/codec2/src/test_bits.h +pilot_coeff.h +/home/sh/Downloads/hackrf/codec2/src/pilot_coeff.h +codec2_fft.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.h +hanning.h +/home/sh/Downloads/hackrf/codec2/src/hanning.h +os.h +/home/sh/Downloads/hackrf/codec2/src/os.h +machdep.h +/home/sh/Downloads/hackrf/codec2/src/machdep.h +debug_alloc.h +/home/sh/Downloads/hackrf/codec2/src/debug_alloc.h + +/home/sh/Downloads/hackrf/codec2/src/fdmdv_internal.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +codec2_fdmdv.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h +codec2_fft.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.h + +/home/sh/Downloads/hackrf/codec2/src/fdmdv_put_test_bits.c +assert.h +- +stdio.h +- +stdlib.h +- +string.h +- +math.h +- +errno.h +- +codec2_fdmdv.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h + +/home/sh/Downloads/hackrf/codec2/src/hanning.h + +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h +stdlib.h +- +stdio.h +- +math.h +- +string.h +- +xmmintrin.h +- +sys/types.h +- + +/home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/src/machdep.h + +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/src/os.h + +/home/sh/Downloads/hackrf/codec2/src/pilot_coeff.h + +/home/sh/Downloads/hackrf/codec2/src/rn.h + +/home/sh/Downloads/hackrf/codec2/src/rxdec_coeff.h + +/home/sh/Downloads/hackrf/codec2/src/test_bits.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_put_test_bits.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_put_test_bits.dir/DependInfo.cmake new file mode 100644 index 0000000..acc64cd --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_put_test_bits.dir/DependInfo.cmake @@ -0,0 +1,32 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/src/codec2_fft.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/fdmdv_put_test_bits.dir/codec2_fft.c.o" + "/home/sh/Downloads/hackrf/codec2/src/fdmdv.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/fdmdv_put_test_bits.dir/fdmdv.c.o" + "/home/sh/Downloads/hackrf/codec2/src/fdmdv_put_test_bits.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/fdmdv_put_test_bits.dir/fdmdv_put_test_bits.c.o" + "/home/sh/Downloads/hackrf/codec2/src/kiss_fft.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/fdmdv_put_test_bits.dir/kiss_fft.c.o" + "/home/sh/Downloads/hackrf/codec2/src/kiss_fftr.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/fdmdv_put_test_bits.dir/kiss_fftr.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "GIT_HASH=\"df2ed16c\"" + "_GNU_SOURCE=1" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_put_test_bits.dir/build.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_put_test_bits.dir/build.make new file mode 100644 index 0000000..3608765 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_put_test_bits.dir/build.make @@ -0,0 +1,158 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include src/CMakeFiles/fdmdv_put_test_bits.dir/depend.make + +# Include the progress variables for this target. +include src/CMakeFiles/fdmdv_put_test_bits.dir/progress.make + +# Include the compile flags for this target's objects. +include src/CMakeFiles/fdmdv_put_test_bits.dir/flags.make + +src/CMakeFiles/fdmdv_put_test_bits.dir/fdmdv_put_test_bits.c.o: src/CMakeFiles/fdmdv_put_test_bits.dir/flags.make +src/CMakeFiles/fdmdv_put_test_bits.dir/fdmdv_put_test_bits.c.o: ../src/fdmdv_put_test_bits.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object src/CMakeFiles/fdmdv_put_test_bits.dir/fdmdv_put_test_bits.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/fdmdv_put_test_bits.dir/fdmdv_put_test_bits.c.o -c /home/sh/Downloads/hackrf/codec2/src/fdmdv_put_test_bits.c + +src/CMakeFiles/fdmdv_put_test_bits.dir/fdmdv_put_test_bits.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/fdmdv_put_test_bits.dir/fdmdv_put_test_bits.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/fdmdv_put_test_bits.c > CMakeFiles/fdmdv_put_test_bits.dir/fdmdv_put_test_bits.c.i + +src/CMakeFiles/fdmdv_put_test_bits.dir/fdmdv_put_test_bits.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/fdmdv_put_test_bits.dir/fdmdv_put_test_bits.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/fdmdv_put_test_bits.c -o CMakeFiles/fdmdv_put_test_bits.dir/fdmdv_put_test_bits.c.s + +src/CMakeFiles/fdmdv_put_test_bits.dir/fdmdv.c.o: src/CMakeFiles/fdmdv_put_test_bits.dir/flags.make +src/CMakeFiles/fdmdv_put_test_bits.dir/fdmdv.c.o: ../src/fdmdv.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Building C object src/CMakeFiles/fdmdv_put_test_bits.dir/fdmdv.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/fdmdv_put_test_bits.dir/fdmdv.c.o -c /home/sh/Downloads/hackrf/codec2/src/fdmdv.c + +src/CMakeFiles/fdmdv_put_test_bits.dir/fdmdv.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/fdmdv_put_test_bits.dir/fdmdv.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/fdmdv.c > CMakeFiles/fdmdv_put_test_bits.dir/fdmdv.c.i + +src/CMakeFiles/fdmdv_put_test_bits.dir/fdmdv.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/fdmdv_put_test_bits.dir/fdmdv.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/fdmdv.c -o CMakeFiles/fdmdv_put_test_bits.dir/fdmdv.c.s + +src/CMakeFiles/fdmdv_put_test_bits.dir/kiss_fft.c.o: src/CMakeFiles/fdmdv_put_test_bits.dir/flags.make +src/CMakeFiles/fdmdv_put_test_bits.dir/kiss_fft.c.o: ../src/kiss_fft.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_3) "Building C object src/CMakeFiles/fdmdv_put_test_bits.dir/kiss_fft.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/fdmdv_put_test_bits.dir/kiss_fft.c.o -c /home/sh/Downloads/hackrf/codec2/src/kiss_fft.c + +src/CMakeFiles/fdmdv_put_test_bits.dir/kiss_fft.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/fdmdv_put_test_bits.dir/kiss_fft.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/kiss_fft.c > CMakeFiles/fdmdv_put_test_bits.dir/kiss_fft.c.i + +src/CMakeFiles/fdmdv_put_test_bits.dir/kiss_fft.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/fdmdv_put_test_bits.dir/kiss_fft.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/kiss_fft.c -o CMakeFiles/fdmdv_put_test_bits.dir/kiss_fft.c.s + +src/CMakeFiles/fdmdv_put_test_bits.dir/codec2_fft.c.o: src/CMakeFiles/fdmdv_put_test_bits.dir/flags.make +src/CMakeFiles/fdmdv_put_test_bits.dir/codec2_fft.c.o: ../src/codec2_fft.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_4) "Building C object src/CMakeFiles/fdmdv_put_test_bits.dir/codec2_fft.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/fdmdv_put_test_bits.dir/codec2_fft.c.o -c /home/sh/Downloads/hackrf/codec2/src/codec2_fft.c + +src/CMakeFiles/fdmdv_put_test_bits.dir/codec2_fft.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/fdmdv_put_test_bits.dir/codec2_fft.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/codec2_fft.c > CMakeFiles/fdmdv_put_test_bits.dir/codec2_fft.c.i + +src/CMakeFiles/fdmdv_put_test_bits.dir/codec2_fft.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/fdmdv_put_test_bits.dir/codec2_fft.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/codec2_fft.c -o CMakeFiles/fdmdv_put_test_bits.dir/codec2_fft.c.s + +src/CMakeFiles/fdmdv_put_test_bits.dir/kiss_fftr.c.o: src/CMakeFiles/fdmdv_put_test_bits.dir/flags.make +src/CMakeFiles/fdmdv_put_test_bits.dir/kiss_fftr.c.o: ../src/kiss_fftr.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_5) "Building C object src/CMakeFiles/fdmdv_put_test_bits.dir/kiss_fftr.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/fdmdv_put_test_bits.dir/kiss_fftr.c.o -c /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.c + +src/CMakeFiles/fdmdv_put_test_bits.dir/kiss_fftr.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/fdmdv_put_test_bits.dir/kiss_fftr.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.c > CMakeFiles/fdmdv_put_test_bits.dir/kiss_fftr.c.i + +src/CMakeFiles/fdmdv_put_test_bits.dir/kiss_fftr.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/fdmdv_put_test_bits.dir/kiss_fftr.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.c -o CMakeFiles/fdmdv_put_test_bits.dir/kiss_fftr.c.s + +# Object files for target fdmdv_put_test_bits +fdmdv_put_test_bits_OBJECTS = \ +"CMakeFiles/fdmdv_put_test_bits.dir/fdmdv_put_test_bits.c.o" \ +"CMakeFiles/fdmdv_put_test_bits.dir/fdmdv.c.o" \ +"CMakeFiles/fdmdv_put_test_bits.dir/kiss_fft.c.o" \ +"CMakeFiles/fdmdv_put_test_bits.dir/codec2_fft.c.o" \ +"CMakeFiles/fdmdv_put_test_bits.dir/kiss_fftr.c.o" + +# External object files for target fdmdv_put_test_bits +fdmdv_put_test_bits_EXTERNAL_OBJECTS = + +src/fdmdv_put_test_bits: src/CMakeFiles/fdmdv_put_test_bits.dir/fdmdv_put_test_bits.c.o +src/fdmdv_put_test_bits: src/CMakeFiles/fdmdv_put_test_bits.dir/fdmdv.c.o +src/fdmdv_put_test_bits: src/CMakeFiles/fdmdv_put_test_bits.dir/kiss_fft.c.o +src/fdmdv_put_test_bits: src/CMakeFiles/fdmdv_put_test_bits.dir/codec2_fft.c.o +src/fdmdv_put_test_bits: src/CMakeFiles/fdmdv_put_test_bits.dir/kiss_fftr.c.o +src/fdmdv_put_test_bits: src/CMakeFiles/fdmdv_put_test_bits.dir/build.make +src/fdmdv_put_test_bits: src/CMakeFiles/fdmdv_put_test_bits.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_6) "Linking C executable fdmdv_put_test_bits" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/fdmdv_put_test_bits.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +src/CMakeFiles/fdmdv_put_test_bits.dir/build: src/fdmdv_put_test_bits + +.PHONY : src/CMakeFiles/fdmdv_put_test_bits.dir/build + +src/CMakeFiles/fdmdv_put_test_bits.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -P CMakeFiles/fdmdv_put_test_bits.dir/cmake_clean.cmake +.PHONY : src/CMakeFiles/fdmdv_put_test_bits.dir/clean + +src/CMakeFiles/fdmdv_put_test_bits.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/src /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/src /home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/fdmdv_put_test_bits.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : src/CMakeFiles/fdmdv_put_test_bits.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_put_test_bits.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_put_test_bits.dir/cmake_clean.cmake new file mode 100644 index 0000000..a3fa24c --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_put_test_bits.dir/cmake_clean.cmake @@ -0,0 +1,14 @@ +file(REMOVE_RECURSE + "CMakeFiles/fdmdv_put_test_bits.dir/fdmdv_put_test_bits.c.o" + "CMakeFiles/fdmdv_put_test_bits.dir/fdmdv.c.o" + "CMakeFiles/fdmdv_put_test_bits.dir/kiss_fft.c.o" + "CMakeFiles/fdmdv_put_test_bits.dir/codec2_fft.c.o" + "CMakeFiles/fdmdv_put_test_bits.dir/kiss_fftr.c.o" + "fdmdv_put_test_bits.pdb" + "fdmdv_put_test_bits" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/fdmdv_put_test_bits.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_put_test_bits.dir/codec2_fft.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_put_test_bits.dir/codec2_fft.c.o new file mode 100644 index 0000000..7d51431 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_put_test_bits.dir/codec2_fft.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_put_test_bits.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_put_test_bits.dir/depend.internal new file mode 100644 index 0000000..a8971f4 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_put_test_bits.dir/depend.internal @@ -0,0 +1,46 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/fdmdv_put_test_bits.dir/codec2_fft.c.o + /home/sh/Downloads/hackrf/codec2/src/_kiss_fft_guts.h + /home/sh/Downloads/hackrf/codec2/src/codec2_fft.c + /home/sh/Downloads/hackrf/codec2/src/codec2_fft.h + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/debug_alloc.h + /home/sh/Downloads/hackrf/codec2/src/defines.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h +src/CMakeFiles/fdmdv_put_test_bits.dir/fdmdv.c.o + /home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h + /home/sh/Downloads/hackrf/codec2/src/codec2_fft.h + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/comp_prim.h + /home/sh/Downloads/hackrf/codec2/src/debug_alloc.h + /home/sh/Downloads/hackrf/codec2/src/defines.h + /home/sh/Downloads/hackrf/codec2/src/fdmdv.c + /home/sh/Downloads/hackrf/codec2/src/fdmdv_internal.h + /home/sh/Downloads/hackrf/codec2/src/hanning.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h + /home/sh/Downloads/hackrf/codec2/src/machdep.h + /home/sh/Downloads/hackrf/codec2/src/modem_stats.h + /home/sh/Downloads/hackrf/codec2/src/os.h + /home/sh/Downloads/hackrf/codec2/src/pilot_coeff.h + /home/sh/Downloads/hackrf/codec2/src/rn.h + /home/sh/Downloads/hackrf/codec2/src/rxdec_coeff.h + /home/sh/Downloads/hackrf/codec2/src/test_bits.h +src/CMakeFiles/fdmdv_put_test_bits.dir/fdmdv_put_test_bits.c.o + /home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/fdmdv_put_test_bits.c + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/modem_stats.h +src/CMakeFiles/fdmdv_put_test_bits.dir/kiss_fft.c.o + /home/sh/Downloads/hackrf/codec2/src/_kiss_fft_guts.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.c + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h +src/CMakeFiles/fdmdv_put_test_bits.dir/kiss_fftr.c.o + /home/sh/Downloads/hackrf/codec2/src/_kiss_fft_guts.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.c + /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_put_test_bits.dir/depend.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_put_test_bits.dir/depend.make new file mode 100644 index 0000000..87716f2 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_put_test_bits.dir/depend.make @@ -0,0 +1,46 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/fdmdv_put_test_bits.dir/codec2_fft.c.o: ../src/_kiss_fft_guts.h +src/CMakeFiles/fdmdv_put_test_bits.dir/codec2_fft.c.o: ../src/codec2_fft.c +src/CMakeFiles/fdmdv_put_test_bits.dir/codec2_fft.c.o: ../src/codec2_fft.h +src/CMakeFiles/fdmdv_put_test_bits.dir/codec2_fft.c.o: ../src/comp.h +src/CMakeFiles/fdmdv_put_test_bits.dir/codec2_fft.c.o: ../src/debug_alloc.h +src/CMakeFiles/fdmdv_put_test_bits.dir/codec2_fft.c.o: ../src/defines.h +src/CMakeFiles/fdmdv_put_test_bits.dir/codec2_fft.c.o: ../src/kiss_fft.h +src/CMakeFiles/fdmdv_put_test_bits.dir/codec2_fft.c.o: ../src/kiss_fftr.h + +src/CMakeFiles/fdmdv_put_test_bits.dir/fdmdv.c.o: ../src/codec2_fdmdv.h +src/CMakeFiles/fdmdv_put_test_bits.dir/fdmdv.c.o: ../src/codec2_fft.h +src/CMakeFiles/fdmdv_put_test_bits.dir/fdmdv.c.o: ../src/comp.h +src/CMakeFiles/fdmdv_put_test_bits.dir/fdmdv.c.o: ../src/comp_prim.h +src/CMakeFiles/fdmdv_put_test_bits.dir/fdmdv.c.o: ../src/debug_alloc.h +src/CMakeFiles/fdmdv_put_test_bits.dir/fdmdv.c.o: ../src/defines.h +src/CMakeFiles/fdmdv_put_test_bits.dir/fdmdv.c.o: ../src/fdmdv.c +src/CMakeFiles/fdmdv_put_test_bits.dir/fdmdv.c.o: ../src/fdmdv_internal.h +src/CMakeFiles/fdmdv_put_test_bits.dir/fdmdv.c.o: ../src/hanning.h +src/CMakeFiles/fdmdv_put_test_bits.dir/fdmdv.c.o: ../src/kiss_fft.h +src/CMakeFiles/fdmdv_put_test_bits.dir/fdmdv.c.o: ../src/kiss_fftr.h +src/CMakeFiles/fdmdv_put_test_bits.dir/fdmdv.c.o: ../src/machdep.h +src/CMakeFiles/fdmdv_put_test_bits.dir/fdmdv.c.o: ../src/modem_stats.h +src/CMakeFiles/fdmdv_put_test_bits.dir/fdmdv.c.o: ../src/os.h +src/CMakeFiles/fdmdv_put_test_bits.dir/fdmdv.c.o: ../src/pilot_coeff.h +src/CMakeFiles/fdmdv_put_test_bits.dir/fdmdv.c.o: ../src/rn.h +src/CMakeFiles/fdmdv_put_test_bits.dir/fdmdv.c.o: ../src/rxdec_coeff.h +src/CMakeFiles/fdmdv_put_test_bits.dir/fdmdv.c.o: ../src/test_bits.h + +src/CMakeFiles/fdmdv_put_test_bits.dir/fdmdv_put_test_bits.c.o: ../src/codec2_fdmdv.h +src/CMakeFiles/fdmdv_put_test_bits.dir/fdmdv_put_test_bits.c.o: ../src/comp.h +src/CMakeFiles/fdmdv_put_test_bits.dir/fdmdv_put_test_bits.c.o: ../src/fdmdv_put_test_bits.c +src/CMakeFiles/fdmdv_put_test_bits.dir/fdmdv_put_test_bits.c.o: ../src/kiss_fft.h +src/CMakeFiles/fdmdv_put_test_bits.dir/fdmdv_put_test_bits.c.o: ../src/modem_stats.h + +src/CMakeFiles/fdmdv_put_test_bits.dir/kiss_fft.c.o: ../src/_kiss_fft_guts.h +src/CMakeFiles/fdmdv_put_test_bits.dir/kiss_fft.c.o: ../src/kiss_fft.c +src/CMakeFiles/fdmdv_put_test_bits.dir/kiss_fft.c.o: ../src/kiss_fft.h + +src/CMakeFiles/fdmdv_put_test_bits.dir/kiss_fftr.c.o: ../src/_kiss_fft_guts.h +src/CMakeFiles/fdmdv_put_test_bits.dir/kiss_fftr.c.o: ../src/kiss_fft.h +src/CMakeFiles/fdmdv_put_test_bits.dir/kiss_fftr.c.o: ../src/kiss_fftr.c +src/CMakeFiles/fdmdv_put_test_bits.dir/kiss_fftr.c.o: ../src/kiss_fftr.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_put_test_bits.dir/fdmdv.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_put_test_bits.dir/fdmdv.c.o new file mode 100644 index 0000000..02a53a4 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_put_test_bits.dir/fdmdv.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_put_test_bits.dir/fdmdv_put_test_bits.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_put_test_bits.dir/fdmdv_put_test_bits.c.o new file mode 100644 index 0000000..87e25b0 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_put_test_bits.dir/fdmdv_put_test_bits.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_put_test_bits.dir/flags.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_put_test_bits.dir/flags.make new file mode 100644 index 0000000..814242c --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_put_test_bits.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DGIT_HASH=\"df2ed16c\" -D_GNU_SOURCE=1 + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/src + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_put_test_bits.dir/kiss_fft.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_put_test_bits.dir/kiss_fft.c.o new file mode 100644 index 0000000..cf7c5c8 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_put_test_bits.dir/kiss_fft.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_put_test_bits.dir/kiss_fftr.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_put_test_bits.dir/kiss_fftr.c.o new file mode 100644 index 0000000..03157f4 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_put_test_bits.dir/kiss_fftr.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_put_test_bits.dir/link.txt b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_put_test_bits.dir/link.txt new file mode 100644 index 0000000..bcb19ed --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_put_test_bits.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/fdmdv_put_test_bits.dir/fdmdv_put_test_bits.c.o CMakeFiles/fdmdv_put_test_bits.dir/fdmdv.c.o CMakeFiles/fdmdv_put_test_bits.dir/kiss_fft.c.o CMakeFiles/fdmdv_put_test_bits.dir/codec2_fft.c.o CMakeFiles/fdmdv_put_test_bits.dir/kiss_fftr.c.o -o fdmdv_put_test_bits -lm -lm diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_put_test_bits.dir/progress.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_put_test_bits.dir/progress.make new file mode 100644 index 0000000..91aa4e6 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fdmdv_put_test_bits.dir/progress.make @@ -0,0 +1,7 @@ +CMAKE_PROGRESS_1 = +CMAKE_PROGRESS_2 = 41 +CMAKE_PROGRESS_3 = +CMAKE_PROGRESS_4 = +CMAKE_PROGRESS_5 = 42 +CMAKE_PROGRESS_6 = + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fm_demod.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fm_demod.dir/C.includecache new file mode 100644 index 0000000..8e54ca9 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fm_demod.dir/C.includecache @@ -0,0 +1,8 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fm_demod.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fm_demod.dir/DependInfo.cmake new file mode 100644 index 0000000..2ce4e38 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fm_demod.dir/DependInfo.cmake @@ -0,0 +1,29 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/src/fm.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/fm_demod.dir/fm.c.o" + "/home/sh/Downloads/hackrf/codec2/src/fm_demod.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/fm_demod.dir/fm_demod.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "GIT_HASH=\"df2ed16c\"" + "_GNU_SOURCE=1" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fm_demod.dir/build.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fm_demod.dir/build.make new file mode 100644 index 0000000..175172e --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fm_demod.dir/build.make @@ -0,0 +1,113 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include src/CMakeFiles/fm_demod.dir/depend.make + +# Include the progress variables for this target. +include src/CMakeFiles/fm_demod.dir/progress.make + +# Include the compile flags for this target's objects. +include src/CMakeFiles/fm_demod.dir/flags.make + +src/CMakeFiles/fm_demod.dir/fm_demod.c.o: src/CMakeFiles/fm_demod.dir/flags.make +src/CMakeFiles/fm_demod.dir/fm_demod.c.o: ../src/fm_demod.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object src/CMakeFiles/fm_demod.dir/fm_demod.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/fm_demod.dir/fm_demod.c.o -c /home/sh/Downloads/hackrf/codec2/src/fm_demod.c + +src/CMakeFiles/fm_demod.dir/fm_demod.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/fm_demod.dir/fm_demod.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/fm_demod.c > CMakeFiles/fm_demod.dir/fm_demod.c.i + +src/CMakeFiles/fm_demod.dir/fm_demod.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/fm_demod.dir/fm_demod.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/fm_demod.c -o CMakeFiles/fm_demod.dir/fm_demod.c.s + +src/CMakeFiles/fm_demod.dir/fm.c.o: src/CMakeFiles/fm_demod.dir/flags.make +src/CMakeFiles/fm_demod.dir/fm.c.o: ../src/fm.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Building C object src/CMakeFiles/fm_demod.dir/fm.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/fm_demod.dir/fm.c.o -c /home/sh/Downloads/hackrf/codec2/src/fm.c + +src/CMakeFiles/fm_demod.dir/fm.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/fm_demod.dir/fm.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/fm.c > CMakeFiles/fm_demod.dir/fm.c.i + +src/CMakeFiles/fm_demod.dir/fm.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/fm_demod.dir/fm.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/fm.c -o CMakeFiles/fm_demod.dir/fm.c.s + +# Object files for target fm_demod +fm_demod_OBJECTS = \ +"CMakeFiles/fm_demod.dir/fm_demod.c.o" \ +"CMakeFiles/fm_demod.dir/fm.c.o" + +# External object files for target fm_demod +fm_demod_EXTERNAL_OBJECTS = + +src/fm_demod: src/CMakeFiles/fm_demod.dir/fm_demod.c.o +src/fm_demod: src/CMakeFiles/fm_demod.dir/fm.c.o +src/fm_demod: src/CMakeFiles/fm_demod.dir/build.make +src/fm_demod: src/CMakeFiles/fm_demod.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_3) "Linking C executable fm_demod" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/fm_demod.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +src/CMakeFiles/fm_demod.dir/build: src/fm_demod + +.PHONY : src/CMakeFiles/fm_demod.dir/build + +src/CMakeFiles/fm_demod.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -P CMakeFiles/fm_demod.dir/cmake_clean.cmake +.PHONY : src/CMakeFiles/fm_demod.dir/clean + +src/CMakeFiles/fm_demod.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/src /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/src /home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/fm_demod.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : src/CMakeFiles/fm_demod.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fm_demod.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fm_demod.dir/cmake_clean.cmake new file mode 100644 index 0000000..6ac12e4 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fm_demod.dir/cmake_clean.cmake @@ -0,0 +1,11 @@ +file(REMOVE_RECURSE + "CMakeFiles/fm_demod.dir/fm_demod.c.o" + "CMakeFiles/fm_demod.dir/fm.c.o" + "fm_demod.pdb" + "fm_demod" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/fm_demod.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fm_demod.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fm_demod.dir/depend.internal new file mode 100644 index 0000000..748adda --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fm_demod.dir/depend.internal @@ -0,0 +1,14 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/fm_demod.dir/fm.c.o + /home/sh/Downloads/hackrf/codec2/src/codec2_fm.h + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/comp_prim.h + /home/sh/Downloads/hackrf/codec2/src/fm.c + /home/sh/Downloads/hackrf/codec2/src/fm_fir_coeff.h +src/CMakeFiles/fm_demod.dir/fm_demod.c.o + /home/sh/Downloads/hackrf/codec2/src/codec2_fm.h + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/fm_demod.c + /home/sh/Downloads/hackrf/codec2/src/octave.h diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fm_demod.dir/depend.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fm_demod.dir/depend.make new file mode 100644 index 0000000..94b7a3f --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fm_demod.dir/depend.make @@ -0,0 +1,14 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/fm_demod.dir/fm.c.o: ../src/codec2_fm.h +src/CMakeFiles/fm_demod.dir/fm.c.o: ../src/comp.h +src/CMakeFiles/fm_demod.dir/fm.c.o: ../src/comp_prim.h +src/CMakeFiles/fm_demod.dir/fm.c.o: ../src/fm.c +src/CMakeFiles/fm_demod.dir/fm.c.o: ../src/fm_fir_coeff.h + +src/CMakeFiles/fm_demod.dir/fm_demod.c.o: ../src/codec2_fm.h +src/CMakeFiles/fm_demod.dir/fm_demod.c.o: ../src/comp.h +src/CMakeFiles/fm_demod.dir/fm_demod.c.o: ../src/fm_demod.c +src/CMakeFiles/fm_demod.dir/fm_demod.c.o: ../src/octave.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fm_demod.dir/flags.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fm_demod.dir/flags.make new file mode 100644 index 0000000..814242c --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fm_demod.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DGIT_HASH=\"df2ed16c\" -D_GNU_SOURCE=1 + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/src + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fm_demod.dir/fm.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fm_demod.dir/fm.c.o new file mode 100644 index 0000000..e0b74e4 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fm_demod.dir/fm.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fm_demod.dir/fm_demod.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fm_demod.dir/fm_demod.c.o new file mode 100644 index 0000000..67bedab Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fm_demod.dir/fm_demod.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fm_demod.dir/link.txt b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fm_demod.dir/link.txt new file mode 100644 index 0000000..f41a5c7 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fm_demod.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/fm_demod.dir/fm_demod.c.o CMakeFiles/fm_demod.dir/fm.c.o -o fm_demod -lm -lm diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fm_demod.dir/progress.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fm_demod.dir/progress.make new file mode 100644 index 0000000..5ab070b --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fm_demod.dir/progress.make @@ -0,0 +1,4 @@ +CMAKE_PROGRESS_1 = +CMAKE_PROGRESS_2 = 43 +CMAKE_PROGRESS_3 = + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fmfsk_demod.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fmfsk_demod.dir/C.includecache new file mode 100644 index 0000000..91f72ef --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fmfsk_demod.dir/C.includecache @@ -0,0 +1,66 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +/home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +modem_stats.h +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h + +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/fmfsk.h +stdint.h +- +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +modem_stats.h +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h + +/home/sh/Downloads/hackrf/codec2/src/fmfsk_demod.c +stdio.h +- +fmfsk.h +/home/sh/Downloads/hackrf/codec2/src/fmfsk.h +modem_stats.h +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h +modem_probe.h +/home/sh/Downloads/hackrf/codec2/src/modem_probe.h +codec2_fdmdv.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h + +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h +stdlib.h +- +stdio.h +- +math.h +- +string.h +- +xmmintrin.h +- +sys/types.h +- + +/home/sh/Downloads/hackrf/codec2/src/modem_probe.h +stdint.h +- +stdlib.h +- +complex.h +- +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fmfsk_demod.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fmfsk_demod.dir/DependInfo.cmake new file mode 100644 index 0000000..b85cce9 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fmfsk_demod.dir/DependInfo.cmake @@ -0,0 +1,31 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/src/fmfsk_demod.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/fmfsk_demod.dir/fmfsk_demod.c.o" + "/home/sh/Downloads/hackrf/codec2/src/modem_probe.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/fmfsk_demod.dir/modem_probe.c.o" + "/home/sh/Downloads/hackrf/codec2/src/octave.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/fmfsk_demod.dir/octave.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "GIT_HASH=\"df2ed16c\"" + "_GNU_SOURCE=1" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/DependInfo.cmake" + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fmfsk_demod.dir/build.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fmfsk_demod.dir/build.make new file mode 100644 index 0000000..dc6383b --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fmfsk_demod.dir/build.make @@ -0,0 +1,129 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include src/CMakeFiles/fmfsk_demod.dir/depend.make + +# Include the progress variables for this target. +include src/CMakeFiles/fmfsk_demod.dir/progress.make + +# Include the compile flags for this target's objects. +include src/CMakeFiles/fmfsk_demod.dir/flags.make + +src/CMakeFiles/fmfsk_demod.dir/fmfsk_demod.c.o: src/CMakeFiles/fmfsk_demod.dir/flags.make +src/CMakeFiles/fmfsk_demod.dir/fmfsk_demod.c.o: ../src/fmfsk_demod.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object src/CMakeFiles/fmfsk_demod.dir/fmfsk_demod.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/fmfsk_demod.dir/fmfsk_demod.c.o -c /home/sh/Downloads/hackrf/codec2/src/fmfsk_demod.c + +src/CMakeFiles/fmfsk_demod.dir/fmfsk_demod.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/fmfsk_demod.dir/fmfsk_demod.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/fmfsk_demod.c > CMakeFiles/fmfsk_demod.dir/fmfsk_demod.c.i + +src/CMakeFiles/fmfsk_demod.dir/fmfsk_demod.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/fmfsk_demod.dir/fmfsk_demod.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/fmfsk_demod.c -o CMakeFiles/fmfsk_demod.dir/fmfsk_demod.c.s + +src/CMakeFiles/fmfsk_demod.dir/modem_probe.c.o: src/CMakeFiles/fmfsk_demod.dir/flags.make +src/CMakeFiles/fmfsk_demod.dir/modem_probe.c.o: ../src/modem_probe.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Building C object src/CMakeFiles/fmfsk_demod.dir/modem_probe.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/fmfsk_demod.dir/modem_probe.c.o -c /home/sh/Downloads/hackrf/codec2/src/modem_probe.c + +src/CMakeFiles/fmfsk_demod.dir/modem_probe.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/fmfsk_demod.dir/modem_probe.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/modem_probe.c > CMakeFiles/fmfsk_demod.dir/modem_probe.c.i + +src/CMakeFiles/fmfsk_demod.dir/modem_probe.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/fmfsk_demod.dir/modem_probe.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/modem_probe.c -o CMakeFiles/fmfsk_demod.dir/modem_probe.c.s + +src/CMakeFiles/fmfsk_demod.dir/octave.c.o: src/CMakeFiles/fmfsk_demod.dir/flags.make +src/CMakeFiles/fmfsk_demod.dir/octave.c.o: ../src/octave.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_3) "Building C object src/CMakeFiles/fmfsk_demod.dir/octave.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/fmfsk_demod.dir/octave.c.o -c /home/sh/Downloads/hackrf/codec2/src/octave.c + +src/CMakeFiles/fmfsk_demod.dir/octave.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/fmfsk_demod.dir/octave.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/octave.c > CMakeFiles/fmfsk_demod.dir/octave.c.i + +src/CMakeFiles/fmfsk_demod.dir/octave.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/fmfsk_demod.dir/octave.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/octave.c -o CMakeFiles/fmfsk_demod.dir/octave.c.s + +# Object files for target fmfsk_demod +fmfsk_demod_OBJECTS = \ +"CMakeFiles/fmfsk_demod.dir/fmfsk_demod.c.o" \ +"CMakeFiles/fmfsk_demod.dir/modem_probe.c.o" \ +"CMakeFiles/fmfsk_demod.dir/octave.c.o" + +# External object files for target fmfsk_demod +fmfsk_demod_EXTERNAL_OBJECTS = + +src/fmfsk_demod: src/CMakeFiles/fmfsk_demod.dir/fmfsk_demod.c.o +src/fmfsk_demod: src/CMakeFiles/fmfsk_demod.dir/modem_probe.c.o +src/fmfsk_demod: src/CMakeFiles/fmfsk_demod.dir/octave.c.o +src/fmfsk_demod: src/CMakeFiles/fmfsk_demod.dir/build.make +src/fmfsk_demod: src/libcodec2.so.0.9 +src/fmfsk_demod: src/CMakeFiles/fmfsk_demod.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_4) "Linking C executable fmfsk_demod" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/fmfsk_demod.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +src/CMakeFiles/fmfsk_demod.dir/build: src/fmfsk_demod + +.PHONY : src/CMakeFiles/fmfsk_demod.dir/build + +src/CMakeFiles/fmfsk_demod.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -P CMakeFiles/fmfsk_demod.dir/cmake_clean.cmake +.PHONY : src/CMakeFiles/fmfsk_demod.dir/clean + +src/CMakeFiles/fmfsk_demod.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/src /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/src /home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/fmfsk_demod.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : src/CMakeFiles/fmfsk_demod.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fmfsk_demod.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fmfsk_demod.dir/cmake_clean.cmake new file mode 100644 index 0000000..8614f3e --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fmfsk_demod.dir/cmake_clean.cmake @@ -0,0 +1,12 @@ +file(REMOVE_RECURSE + "CMakeFiles/fmfsk_demod.dir/fmfsk_demod.c.o" + "CMakeFiles/fmfsk_demod.dir/modem_probe.c.o" + "CMakeFiles/fmfsk_demod.dir/octave.c.o" + "fmfsk_demod.pdb" + "fmfsk_demod" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/fmfsk_demod.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fmfsk_demod.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fmfsk_demod.dir/depend.internal new file mode 100644 index 0000000..00de1ba --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fmfsk_demod.dir/depend.internal @@ -0,0 +1,19 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/fmfsk_demod.dir/fmfsk_demod.c.o + /home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/fmfsk.h + /home/sh/Downloads/hackrf/codec2/src/fmfsk_demod.c + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/modem_probe.h + /home/sh/Downloads/hackrf/codec2/src/modem_stats.h +src/CMakeFiles/fmfsk_demod.dir/modem_probe.c.o + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/modem_probe.c + /home/sh/Downloads/hackrf/codec2/src/octave.h +src/CMakeFiles/fmfsk_demod.dir/octave.c.o + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/octave.c + /home/sh/Downloads/hackrf/codec2/src/octave.h diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fmfsk_demod.dir/depend.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fmfsk_demod.dir/depend.make new file mode 100644 index 0000000..72a4c67 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fmfsk_demod.dir/depend.make @@ -0,0 +1,19 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/fmfsk_demod.dir/fmfsk_demod.c.o: ../src/codec2_fdmdv.h +src/CMakeFiles/fmfsk_demod.dir/fmfsk_demod.c.o: ../src/comp.h +src/CMakeFiles/fmfsk_demod.dir/fmfsk_demod.c.o: ../src/fmfsk.h +src/CMakeFiles/fmfsk_demod.dir/fmfsk_demod.c.o: ../src/fmfsk_demod.c +src/CMakeFiles/fmfsk_demod.dir/fmfsk_demod.c.o: ../src/kiss_fft.h +src/CMakeFiles/fmfsk_demod.dir/fmfsk_demod.c.o: ../src/modem_probe.h +src/CMakeFiles/fmfsk_demod.dir/fmfsk_demod.c.o: ../src/modem_stats.h + +src/CMakeFiles/fmfsk_demod.dir/modem_probe.c.o: ../src/comp.h +src/CMakeFiles/fmfsk_demod.dir/modem_probe.c.o: ../src/modem_probe.c +src/CMakeFiles/fmfsk_demod.dir/modem_probe.c.o: ../src/octave.h + +src/CMakeFiles/fmfsk_demod.dir/octave.c.o: ../src/comp.h +src/CMakeFiles/fmfsk_demod.dir/octave.c.o: ../src/octave.c +src/CMakeFiles/fmfsk_demod.dir/octave.c.o: ../src/octave.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fmfsk_demod.dir/flags.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fmfsk_demod.dir/flags.make new file mode 100644 index 0000000..814242c --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fmfsk_demod.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DGIT_HASH=\"df2ed16c\" -D_GNU_SOURCE=1 + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/src + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fmfsk_demod.dir/fmfsk_demod.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fmfsk_demod.dir/fmfsk_demod.c.o new file mode 100644 index 0000000..9e1d940 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fmfsk_demod.dir/fmfsk_demod.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fmfsk_demod.dir/link.txt b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fmfsk_demod.dir/link.txt new file mode 100644 index 0000000..6ecd279 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fmfsk_demod.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/fmfsk_demod.dir/fmfsk_demod.c.o CMakeFiles/fmfsk_demod.dir/modem_probe.c.o CMakeFiles/fmfsk_demod.dir/octave.c.o -o fmfsk_demod -Wl,-rpath,/home/sh/Downloads/hackrf/codec2/build_linux/src -lm libcodec2.so.0.9 -lm diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fmfsk_demod.dir/modem_probe.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fmfsk_demod.dir/modem_probe.c.o new file mode 100644 index 0000000..7716fc4 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fmfsk_demod.dir/modem_probe.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fmfsk_demod.dir/octave.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fmfsk_demod.dir/octave.c.o new file mode 100644 index 0000000..889ec3b Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fmfsk_demod.dir/octave.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fmfsk_demod.dir/progress.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fmfsk_demod.dir/progress.make new file mode 100644 index 0000000..a6615d4 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fmfsk_demod.dir/progress.make @@ -0,0 +1,5 @@ +CMAKE_PROGRESS_1 = +CMAKE_PROGRESS_2 = 44 +CMAKE_PROGRESS_3 = +CMAKE_PROGRESS_4 = + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fmfsk_mod.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fmfsk_mod.dir/C.includecache new file mode 100644 index 0000000..43b2cbe --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fmfsk_mod.dir/C.includecache @@ -0,0 +1,54 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +/home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +modem_stats.h +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h + +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/fmfsk.h +stdint.h +- +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +modem_stats.h +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h + +/home/sh/Downloads/hackrf/codec2/src/fmfsk_mod.c +stdio.h +- +string.h +- +fmfsk.h +/home/sh/Downloads/hackrf/codec2/src/fmfsk.h +codec2_fdmdv.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h + +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h +stdlib.h +- +stdio.h +- +math.h +- +string.h +- +xmmintrin.h +- +sys/types.h +- + +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fmfsk_mod.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fmfsk_mod.dir/DependInfo.cmake new file mode 100644 index 0000000..b728049 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fmfsk_mod.dir/DependInfo.cmake @@ -0,0 +1,29 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/src/fmfsk_mod.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/fmfsk_mod.dir/fmfsk_mod.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "GIT_HASH=\"df2ed16c\"" + "_GNU_SOURCE=1" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/DependInfo.cmake" + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fmfsk_mod.dir/build.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fmfsk_mod.dir/build.make new file mode 100644 index 0000000..8492a21 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fmfsk_mod.dir/build.make @@ -0,0 +1,99 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include src/CMakeFiles/fmfsk_mod.dir/depend.make + +# Include the progress variables for this target. +include src/CMakeFiles/fmfsk_mod.dir/progress.make + +# Include the compile flags for this target's objects. +include src/CMakeFiles/fmfsk_mod.dir/flags.make + +src/CMakeFiles/fmfsk_mod.dir/fmfsk_mod.c.o: src/CMakeFiles/fmfsk_mod.dir/flags.make +src/CMakeFiles/fmfsk_mod.dir/fmfsk_mod.c.o: ../src/fmfsk_mod.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object src/CMakeFiles/fmfsk_mod.dir/fmfsk_mod.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/fmfsk_mod.dir/fmfsk_mod.c.o -c /home/sh/Downloads/hackrf/codec2/src/fmfsk_mod.c + +src/CMakeFiles/fmfsk_mod.dir/fmfsk_mod.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/fmfsk_mod.dir/fmfsk_mod.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/fmfsk_mod.c > CMakeFiles/fmfsk_mod.dir/fmfsk_mod.c.i + +src/CMakeFiles/fmfsk_mod.dir/fmfsk_mod.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/fmfsk_mod.dir/fmfsk_mod.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/fmfsk_mod.c -o CMakeFiles/fmfsk_mod.dir/fmfsk_mod.c.s + +# Object files for target fmfsk_mod +fmfsk_mod_OBJECTS = \ +"CMakeFiles/fmfsk_mod.dir/fmfsk_mod.c.o" + +# External object files for target fmfsk_mod +fmfsk_mod_EXTERNAL_OBJECTS = + +src/fmfsk_mod: src/CMakeFiles/fmfsk_mod.dir/fmfsk_mod.c.o +src/fmfsk_mod: src/CMakeFiles/fmfsk_mod.dir/build.make +src/fmfsk_mod: src/libcodec2.so.0.9 +src/fmfsk_mod: src/CMakeFiles/fmfsk_mod.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking C executable fmfsk_mod" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/fmfsk_mod.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +src/CMakeFiles/fmfsk_mod.dir/build: src/fmfsk_mod + +.PHONY : src/CMakeFiles/fmfsk_mod.dir/build + +src/CMakeFiles/fmfsk_mod.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -P CMakeFiles/fmfsk_mod.dir/cmake_clean.cmake +.PHONY : src/CMakeFiles/fmfsk_mod.dir/clean + +src/CMakeFiles/fmfsk_mod.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/src /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/src /home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/fmfsk_mod.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : src/CMakeFiles/fmfsk_mod.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fmfsk_mod.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fmfsk_mod.dir/cmake_clean.cmake new file mode 100644 index 0000000..12918af --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fmfsk_mod.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +file(REMOVE_RECURSE + "CMakeFiles/fmfsk_mod.dir/fmfsk_mod.c.o" + "fmfsk_mod.pdb" + "fmfsk_mod" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/fmfsk_mod.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fmfsk_mod.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fmfsk_mod.dir/depend.internal new file mode 100644 index 0000000..769adde --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fmfsk_mod.dir/depend.internal @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/fmfsk_mod.dir/fmfsk_mod.c.o + /home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/fmfsk.h + /home/sh/Downloads/hackrf/codec2/src/fmfsk_mod.c + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/modem_stats.h diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fmfsk_mod.dir/depend.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fmfsk_mod.dir/depend.make new file mode 100644 index 0000000..035d862 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fmfsk_mod.dir/depend.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/fmfsk_mod.dir/fmfsk_mod.c.o: ../src/codec2_fdmdv.h +src/CMakeFiles/fmfsk_mod.dir/fmfsk_mod.c.o: ../src/comp.h +src/CMakeFiles/fmfsk_mod.dir/fmfsk_mod.c.o: ../src/fmfsk.h +src/CMakeFiles/fmfsk_mod.dir/fmfsk_mod.c.o: ../src/fmfsk_mod.c +src/CMakeFiles/fmfsk_mod.dir/fmfsk_mod.c.o: ../src/kiss_fft.h +src/CMakeFiles/fmfsk_mod.dir/fmfsk_mod.c.o: ../src/modem_stats.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fmfsk_mod.dir/flags.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fmfsk_mod.dir/flags.make new file mode 100644 index 0000000..814242c --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fmfsk_mod.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DGIT_HASH=\"df2ed16c\" -D_GNU_SOURCE=1 + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/src + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fmfsk_mod.dir/fmfsk_mod.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fmfsk_mod.dir/fmfsk_mod.c.o new file mode 100644 index 0000000..d4082b9 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fmfsk_mod.dir/fmfsk_mod.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fmfsk_mod.dir/link.txt b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fmfsk_mod.dir/link.txt new file mode 100644 index 0000000..4bd8c52 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fmfsk_mod.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/fmfsk_mod.dir/fmfsk_mod.c.o -o fmfsk_mod -Wl,-rpath,/home/sh/Downloads/hackrf/codec2/build_linux/src -lm libcodec2.so.0.9 -lm diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fmfsk_mod.dir/progress.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fmfsk_mod.dir/progress.make new file mode 100644 index 0000000..f18f1bf --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fmfsk_mod.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = 45 +CMAKE_PROGRESS_2 = + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/framer.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/framer.dir/C.includecache new file mode 100644 index 0000000..64b8c96 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/framer.dir/C.includecache @@ -0,0 +1,54 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/framer.c +assert.h +- +stdio.h +- +string.h +- +fsk.h +/home/sh/Downloads/hackrf/codec2/src/fsk.h + +/home/sh/Downloads/hackrf/codec2/src/fsk.h +stdint.h +- +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +kiss_fftr.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h +modem_stats.h +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h + +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h +stdlib.h +- +stdio.h +- +math.h +- +string.h +- +xmmintrin.h +- +sys/types.h +- + +/home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/framer.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/framer.dir/DependInfo.cmake new file mode 100644 index 0000000..f4bfb77 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/framer.dir/DependInfo.cmake @@ -0,0 +1,28 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/src/framer.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/framer.dir/framer.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "GIT_HASH=\"df2ed16c\"" + "_GNU_SOURCE=1" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/framer.dir/build.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/framer.dir/build.make new file mode 100644 index 0000000..edae97e --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/framer.dir/build.make @@ -0,0 +1,98 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include src/CMakeFiles/framer.dir/depend.make + +# Include the progress variables for this target. +include src/CMakeFiles/framer.dir/progress.make + +# Include the compile flags for this target's objects. +include src/CMakeFiles/framer.dir/flags.make + +src/CMakeFiles/framer.dir/framer.c.o: src/CMakeFiles/framer.dir/flags.make +src/CMakeFiles/framer.dir/framer.c.o: ../src/framer.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object src/CMakeFiles/framer.dir/framer.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/framer.dir/framer.c.o -c /home/sh/Downloads/hackrf/codec2/src/framer.c + +src/CMakeFiles/framer.dir/framer.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/framer.dir/framer.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/framer.c > CMakeFiles/framer.dir/framer.c.i + +src/CMakeFiles/framer.dir/framer.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/framer.dir/framer.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/framer.c -o CMakeFiles/framer.dir/framer.c.s + +# Object files for target framer +framer_OBJECTS = \ +"CMakeFiles/framer.dir/framer.c.o" + +# External object files for target framer +framer_EXTERNAL_OBJECTS = + +src/framer: src/CMakeFiles/framer.dir/framer.c.o +src/framer: src/CMakeFiles/framer.dir/build.make +src/framer: src/CMakeFiles/framer.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking C executable framer" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/framer.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +src/CMakeFiles/framer.dir/build: src/framer + +.PHONY : src/CMakeFiles/framer.dir/build + +src/CMakeFiles/framer.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -P CMakeFiles/framer.dir/cmake_clean.cmake +.PHONY : src/CMakeFiles/framer.dir/clean + +src/CMakeFiles/framer.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/src /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/src /home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/framer.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : src/CMakeFiles/framer.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/framer.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/framer.dir/cmake_clean.cmake new file mode 100644 index 0000000..96c7686 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/framer.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +file(REMOVE_RECURSE + "CMakeFiles/framer.dir/framer.c.o" + "framer.pdb" + "framer" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/framer.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/framer.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/framer.dir/depend.internal new file mode 100644 index 0000000..2295658 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/framer.dir/depend.internal @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/framer.dir/framer.c.o + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/framer.c + /home/sh/Downloads/hackrf/codec2/src/fsk.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h + /home/sh/Downloads/hackrf/codec2/src/modem_stats.h diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/framer.dir/depend.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/framer.dir/depend.make new file mode 100644 index 0000000..f9b6f47 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/framer.dir/depend.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/framer.dir/framer.c.o: ../src/comp.h +src/CMakeFiles/framer.dir/framer.c.o: ../src/framer.c +src/CMakeFiles/framer.dir/framer.c.o: ../src/fsk.h +src/CMakeFiles/framer.dir/framer.c.o: ../src/kiss_fft.h +src/CMakeFiles/framer.dir/framer.c.o: ../src/kiss_fftr.h +src/CMakeFiles/framer.dir/framer.c.o: ../src/modem_stats.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/framer.dir/flags.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/framer.dir/flags.make new file mode 100644 index 0000000..814242c --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/framer.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DGIT_HASH=\"df2ed16c\" -D_GNU_SOURCE=1 + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/src + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/framer.dir/framer.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/framer.dir/framer.c.o new file mode 100644 index 0000000..52616a2 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/framer.dir/framer.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/framer.dir/link.txt b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/framer.dir/link.txt new file mode 100644 index 0000000..8c46bdf --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/framer.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/framer.dir/framer.c.o -o framer diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/framer.dir/progress.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/framer.dir/progress.make new file mode 100644 index 0000000..64adcce --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/framer.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = +CMAKE_PROGRESS_2 = 46 + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_raw_rx.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_raw_rx.dir/C.includecache new file mode 100644 index 0000000..8948a36 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_raw_rx.dir/C.includecache @@ -0,0 +1,74 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/freedv_api.h +sys/types.h +- +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/freedv_data_raw_rx.c +assert.h +- +stdlib.h +- +stdio.h +- +string.h +- +errno.h +- +stdlib.h +- +stdio.h +- +stdint.h +- +getopt.h +- +freedv_api.h +/home/sh/Downloads/hackrf/codec2/src/freedv_api.h +fsk.h +/home/sh/Downloads/hackrf/codec2/src/fsk.h + +/home/sh/Downloads/hackrf/codec2/src/fsk.h +stdint.h +- +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +kiss_fftr.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h +modem_stats.h +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h + +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h +stdlib.h +- +stdio.h +- +math.h +- +string.h +- +xmmintrin.h +- +sys/types.h +- + +/home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_raw_rx.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_raw_rx.dir/DependInfo.cmake new file mode 100644 index 0000000..1615451 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_raw_rx.dir/DependInfo.cmake @@ -0,0 +1,29 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/src/freedv_data_raw_rx.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/freedv_data_raw_rx.dir/freedv_data_raw_rx.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "GIT_HASH=\"df2ed16c\"" + "_GNU_SOURCE=1" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/DependInfo.cmake" + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_raw_rx.dir/build.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_raw_rx.dir/build.make new file mode 100644 index 0000000..10201bf --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_raw_rx.dir/build.make @@ -0,0 +1,99 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include src/CMakeFiles/freedv_data_raw_rx.dir/depend.make + +# Include the progress variables for this target. +include src/CMakeFiles/freedv_data_raw_rx.dir/progress.make + +# Include the compile flags for this target's objects. +include src/CMakeFiles/freedv_data_raw_rx.dir/flags.make + +src/CMakeFiles/freedv_data_raw_rx.dir/freedv_data_raw_rx.c.o: src/CMakeFiles/freedv_data_raw_rx.dir/flags.make +src/CMakeFiles/freedv_data_raw_rx.dir/freedv_data_raw_rx.c.o: ../src/freedv_data_raw_rx.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object src/CMakeFiles/freedv_data_raw_rx.dir/freedv_data_raw_rx.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/freedv_data_raw_rx.dir/freedv_data_raw_rx.c.o -c /home/sh/Downloads/hackrf/codec2/src/freedv_data_raw_rx.c + +src/CMakeFiles/freedv_data_raw_rx.dir/freedv_data_raw_rx.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/freedv_data_raw_rx.dir/freedv_data_raw_rx.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/freedv_data_raw_rx.c > CMakeFiles/freedv_data_raw_rx.dir/freedv_data_raw_rx.c.i + +src/CMakeFiles/freedv_data_raw_rx.dir/freedv_data_raw_rx.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/freedv_data_raw_rx.dir/freedv_data_raw_rx.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/freedv_data_raw_rx.c -o CMakeFiles/freedv_data_raw_rx.dir/freedv_data_raw_rx.c.s + +# Object files for target freedv_data_raw_rx +freedv_data_raw_rx_OBJECTS = \ +"CMakeFiles/freedv_data_raw_rx.dir/freedv_data_raw_rx.c.o" + +# External object files for target freedv_data_raw_rx +freedv_data_raw_rx_EXTERNAL_OBJECTS = + +src/freedv_data_raw_rx: src/CMakeFiles/freedv_data_raw_rx.dir/freedv_data_raw_rx.c.o +src/freedv_data_raw_rx: src/CMakeFiles/freedv_data_raw_rx.dir/build.make +src/freedv_data_raw_rx: src/libcodec2.so.0.9 +src/freedv_data_raw_rx: src/CMakeFiles/freedv_data_raw_rx.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking C executable freedv_data_raw_rx" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/freedv_data_raw_rx.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +src/CMakeFiles/freedv_data_raw_rx.dir/build: src/freedv_data_raw_rx + +.PHONY : src/CMakeFiles/freedv_data_raw_rx.dir/build + +src/CMakeFiles/freedv_data_raw_rx.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -P CMakeFiles/freedv_data_raw_rx.dir/cmake_clean.cmake +.PHONY : src/CMakeFiles/freedv_data_raw_rx.dir/clean + +src/CMakeFiles/freedv_data_raw_rx.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/src /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/src /home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/freedv_data_raw_rx.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : src/CMakeFiles/freedv_data_raw_rx.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_raw_rx.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_raw_rx.dir/cmake_clean.cmake new file mode 100644 index 0000000..c92e171 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_raw_rx.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +file(REMOVE_RECURSE + "CMakeFiles/freedv_data_raw_rx.dir/freedv_data_raw_rx.c.o" + "freedv_data_raw_rx.pdb" + "freedv_data_raw_rx" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/freedv_data_raw_rx.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_raw_rx.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_raw_rx.dir/depend.internal new file mode 100644 index 0000000..b90c5c1 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_raw_rx.dir/depend.internal @@ -0,0 +1,11 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/freedv_data_raw_rx.dir/freedv_data_raw_rx.c.o + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/freedv_api.h + /home/sh/Downloads/hackrf/codec2/src/freedv_data_raw_rx.c + /home/sh/Downloads/hackrf/codec2/src/fsk.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h + /home/sh/Downloads/hackrf/codec2/src/modem_stats.h diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_raw_rx.dir/depend.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_raw_rx.dir/depend.make new file mode 100644 index 0000000..e4e0cd4 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_raw_rx.dir/depend.make @@ -0,0 +1,11 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/freedv_data_raw_rx.dir/freedv_data_raw_rx.c.o: ../src/comp.h +src/CMakeFiles/freedv_data_raw_rx.dir/freedv_data_raw_rx.c.o: ../src/freedv_api.h +src/CMakeFiles/freedv_data_raw_rx.dir/freedv_data_raw_rx.c.o: ../src/freedv_data_raw_rx.c +src/CMakeFiles/freedv_data_raw_rx.dir/freedv_data_raw_rx.c.o: ../src/fsk.h +src/CMakeFiles/freedv_data_raw_rx.dir/freedv_data_raw_rx.c.o: ../src/kiss_fft.h +src/CMakeFiles/freedv_data_raw_rx.dir/freedv_data_raw_rx.c.o: ../src/kiss_fftr.h +src/CMakeFiles/freedv_data_raw_rx.dir/freedv_data_raw_rx.c.o: ../src/modem_stats.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_raw_rx.dir/flags.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_raw_rx.dir/flags.make new file mode 100644 index 0000000..814242c --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_raw_rx.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DGIT_HASH=\"df2ed16c\" -D_GNU_SOURCE=1 + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/src + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_raw_rx.dir/freedv_data_raw_rx.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_raw_rx.dir/freedv_data_raw_rx.c.o new file mode 100644 index 0000000..9ed7971 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_raw_rx.dir/freedv_data_raw_rx.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_raw_rx.dir/link.txt b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_raw_rx.dir/link.txt new file mode 100644 index 0000000..e397650 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_raw_rx.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/freedv_data_raw_rx.dir/freedv_data_raw_rx.c.o -o freedv_data_raw_rx -Wl,-rpath,/home/sh/Downloads/hackrf/codec2/build_linux/src -lm libcodec2.so.0.9 -lm diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_raw_rx.dir/progress.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_raw_rx.dir/progress.make new file mode 100644 index 0000000..6c287f1 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_raw_rx.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = +CMAKE_PROGRESS_2 = + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_raw_tx.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_raw_tx.dir/C.includecache new file mode 100644 index 0000000..1bd0c41 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_raw_tx.dir/C.includecache @@ -0,0 +1,98 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +/home/sh/Downloads/hackrf/codec2/src/codec2_ofdm.h +stdbool.h +- +stdint.h +- +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +modem_stats.h +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h + +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/filter.h +complex.h +- + +/home/sh/Downloads/hackrf/codec2/src/freedv_api.h +sys/types.h +- +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/freedv_data_raw_tx.c +assert.h +- +stdlib.h +- +stdio.h +- +string.h +- +errno.h +- +stdint.h +- +getopt.h +- +freedv_api.h +/home/sh/Downloads/hackrf/codec2/src/freedv_api.h +fsk.h +/home/sh/Downloads/hackrf/codec2/src/fsk.h +ofdm_internal.h +/home/sh/Downloads/hackrf/codec2/src/ofdm_internal.h + +/home/sh/Downloads/hackrf/codec2/src/fsk.h +stdint.h +- +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +kiss_fftr.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h +modem_stats.h +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h + +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h +stdlib.h +- +stdio.h +- +math.h +- +string.h +- +xmmintrin.h +- +sys/types.h +- + +/home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/src/ofdm_internal.h +complex.h +- +stdbool.h +- +stdint.h +- +codec2_ofdm.h +/home/sh/Downloads/hackrf/codec2/src/codec2_ofdm.h +filter.h +/home/sh/Downloads/hackrf/codec2/src/filter.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_raw_tx.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_raw_tx.dir/DependInfo.cmake new file mode 100644 index 0000000..3e23bc0 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_raw_tx.dir/DependInfo.cmake @@ -0,0 +1,29 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/src/freedv_data_raw_tx.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/freedv_data_raw_tx.dir/freedv_data_raw_tx.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "GIT_HASH=\"df2ed16c\"" + "_GNU_SOURCE=1" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/DependInfo.cmake" + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_raw_tx.dir/build.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_raw_tx.dir/build.make new file mode 100644 index 0000000..f8271be --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_raw_tx.dir/build.make @@ -0,0 +1,99 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include src/CMakeFiles/freedv_data_raw_tx.dir/depend.make + +# Include the progress variables for this target. +include src/CMakeFiles/freedv_data_raw_tx.dir/progress.make + +# Include the compile flags for this target's objects. +include src/CMakeFiles/freedv_data_raw_tx.dir/flags.make + +src/CMakeFiles/freedv_data_raw_tx.dir/freedv_data_raw_tx.c.o: src/CMakeFiles/freedv_data_raw_tx.dir/flags.make +src/CMakeFiles/freedv_data_raw_tx.dir/freedv_data_raw_tx.c.o: ../src/freedv_data_raw_tx.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object src/CMakeFiles/freedv_data_raw_tx.dir/freedv_data_raw_tx.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/freedv_data_raw_tx.dir/freedv_data_raw_tx.c.o -c /home/sh/Downloads/hackrf/codec2/src/freedv_data_raw_tx.c + +src/CMakeFiles/freedv_data_raw_tx.dir/freedv_data_raw_tx.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/freedv_data_raw_tx.dir/freedv_data_raw_tx.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/freedv_data_raw_tx.c > CMakeFiles/freedv_data_raw_tx.dir/freedv_data_raw_tx.c.i + +src/CMakeFiles/freedv_data_raw_tx.dir/freedv_data_raw_tx.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/freedv_data_raw_tx.dir/freedv_data_raw_tx.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/freedv_data_raw_tx.c -o CMakeFiles/freedv_data_raw_tx.dir/freedv_data_raw_tx.c.s + +# Object files for target freedv_data_raw_tx +freedv_data_raw_tx_OBJECTS = \ +"CMakeFiles/freedv_data_raw_tx.dir/freedv_data_raw_tx.c.o" + +# External object files for target freedv_data_raw_tx +freedv_data_raw_tx_EXTERNAL_OBJECTS = + +src/freedv_data_raw_tx: src/CMakeFiles/freedv_data_raw_tx.dir/freedv_data_raw_tx.c.o +src/freedv_data_raw_tx: src/CMakeFiles/freedv_data_raw_tx.dir/build.make +src/freedv_data_raw_tx: src/libcodec2.so.0.9 +src/freedv_data_raw_tx: src/CMakeFiles/freedv_data_raw_tx.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking C executable freedv_data_raw_tx" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/freedv_data_raw_tx.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +src/CMakeFiles/freedv_data_raw_tx.dir/build: src/freedv_data_raw_tx + +.PHONY : src/CMakeFiles/freedv_data_raw_tx.dir/build + +src/CMakeFiles/freedv_data_raw_tx.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -P CMakeFiles/freedv_data_raw_tx.dir/cmake_clean.cmake +.PHONY : src/CMakeFiles/freedv_data_raw_tx.dir/clean + +src/CMakeFiles/freedv_data_raw_tx.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/src /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/src /home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/freedv_data_raw_tx.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : src/CMakeFiles/freedv_data_raw_tx.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_raw_tx.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_raw_tx.dir/cmake_clean.cmake new file mode 100644 index 0000000..a3bd67b --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_raw_tx.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +file(REMOVE_RECURSE + "CMakeFiles/freedv_data_raw_tx.dir/freedv_data_raw_tx.c.o" + "freedv_data_raw_tx.pdb" + "freedv_data_raw_tx" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/freedv_data_raw_tx.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_raw_tx.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_raw_tx.dir/depend.internal new file mode 100644 index 0000000..2f706e0 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_raw_tx.dir/depend.internal @@ -0,0 +1,14 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/freedv_data_raw_tx.dir/freedv_data_raw_tx.c.o + /home/sh/Downloads/hackrf/codec2/src/codec2_ofdm.h + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/filter.h + /home/sh/Downloads/hackrf/codec2/src/freedv_api.h + /home/sh/Downloads/hackrf/codec2/src/freedv_data_raw_tx.c + /home/sh/Downloads/hackrf/codec2/src/fsk.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h + /home/sh/Downloads/hackrf/codec2/src/modem_stats.h + /home/sh/Downloads/hackrf/codec2/src/ofdm_internal.h diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_raw_tx.dir/depend.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_raw_tx.dir/depend.make new file mode 100644 index 0000000..529da08 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_raw_tx.dir/depend.make @@ -0,0 +1,14 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/freedv_data_raw_tx.dir/freedv_data_raw_tx.c.o: ../src/codec2_ofdm.h +src/CMakeFiles/freedv_data_raw_tx.dir/freedv_data_raw_tx.c.o: ../src/comp.h +src/CMakeFiles/freedv_data_raw_tx.dir/freedv_data_raw_tx.c.o: ../src/filter.h +src/CMakeFiles/freedv_data_raw_tx.dir/freedv_data_raw_tx.c.o: ../src/freedv_api.h +src/CMakeFiles/freedv_data_raw_tx.dir/freedv_data_raw_tx.c.o: ../src/freedv_data_raw_tx.c +src/CMakeFiles/freedv_data_raw_tx.dir/freedv_data_raw_tx.c.o: ../src/fsk.h +src/CMakeFiles/freedv_data_raw_tx.dir/freedv_data_raw_tx.c.o: ../src/kiss_fft.h +src/CMakeFiles/freedv_data_raw_tx.dir/freedv_data_raw_tx.c.o: ../src/kiss_fftr.h +src/CMakeFiles/freedv_data_raw_tx.dir/freedv_data_raw_tx.c.o: ../src/modem_stats.h +src/CMakeFiles/freedv_data_raw_tx.dir/freedv_data_raw_tx.c.o: ../src/ofdm_internal.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_raw_tx.dir/flags.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_raw_tx.dir/flags.make new file mode 100644 index 0000000..814242c --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_raw_tx.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DGIT_HASH=\"df2ed16c\" -D_GNU_SOURCE=1 + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/src + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_raw_tx.dir/freedv_data_raw_tx.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_raw_tx.dir/freedv_data_raw_tx.c.o new file mode 100644 index 0000000..a08d73e Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_raw_tx.dir/freedv_data_raw_tx.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_raw_tx.dir/link.txt b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_raw_tx.dir/link.txt new file mode 100644 index 0000000..2d78594 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_raw_tx.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/freedv_data_raw_tx.dir/freedv_data_raw_tx.c.o -o freedv_data_raw_tx -Wl,-rpath,/home/sh/Downloads/hackrf/codec2/build_linux/src -lm libcodec2.so.0.9 -lm diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_raw_tx.dir/progress.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_raw_tx.dir/progress.make new file mode 100644 index 0000000..e767016 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_raw_tx.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = 47 +CMAKE_PROGRESS_2 = + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_rx.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_rx.dir/C.includecache new file mode 100644 index 0000000..5918b9e --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_rx.dir/C.includecache @@ -0,0 +1,38 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/freedv_api.h +sys/types.h +- +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/freedv_data_rx.c +assert.h +- +stdlib.h +- +stdio.h +- +string.h +- +errno.h +- +stdlib.h +- +stdio.h +- +stdint.h +- +stdbool.h +- +freedv_api.h +/home/sh/Downloads/hackrf/codec2/src/freedv_api.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_rx.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_rx.dir/DependInfo.cmake new file mode 100644 index 0000000..3d6fac4 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_rx.dir/DependInfo.cmake @@ -0,0 +1,29 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/src/freedv_data_rx.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/freedv_data_rx.dir/freedv_data_rx.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "GIT_HASH=\"df2ed16c\"" + "_GNU_SOURCE=1" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/DependInfo.cmake" + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_rx.dir/build.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_rx.dir/build.make new file mode 100644 index 0000000..5e2c8ab --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_rx.dir/build.make @@ -0,0 +1,99 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include src/CMakeFiles/freedv_data_rx.dir/depend.make + +# Include the progress variables for this target. +include src/CMakeFiles/freedv_data_rx.dir/progress.make + +# Include the compile flags for this target's objects. +include src/CMakeFiles/freedv_data_rx.dir/flags.make + +src/CMakeFiles/freedv_data_rx.dir/freedv_data_rx.c.o: src/CMakeFiles/freedv_data_rx.dir/flags.make +src/CMakeFiles/freedv_data_rx.dir/freedv_data_rx.c.o: ../src/freedv_data_rx.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object src/CMakeFiles/freedv_data_rx.dir/freedv_data_rx.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/freedv_data_rx.dir/freedv_data_rx.c.o -c /home/sh/Downloads/hackrf/codec2/src/freedv_data_rx.c + +src/CMakeFiles/freedv_data_rx.dir/freedv_data_rx.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/freedv_data_rx.dir/freedv_data_rx.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/freedv_data_rx.c > CMakeFiles/freedv_data_rx.dir/freedv_data_rx.c.i + +src/CMakeFiles/freedv_data_rx.dir/freedv_data_rx.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/freedv_data_rx.dir/freedv_data_rx.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/freedv_data_rx.c -o CMakeFiles/freedv_data_rx.dir/freedv_data_rx.c.s + +# Object files for target freedv_data_rx +freedv_data_rx_OBJECTS = \ +"CMakeFiles/freedv_data_rx.dir/freedv_data_rx.c.o" + +# External object files for target freedv_data_rx +freedv_data_rx_EXTERNAL_OBJECTS = + +src/freedv_data_rx: src/CMakeFiles/freedv_data_rx.dir/freedv_data_rx.c.o +src/freedv_data_rx: src/CMakeFiles/freedv_data_rx.dir/build.make +src/freedv_data_rx: src/libcodec2.so.0.9 +src/freedv_data_rx: src/CMakeFiles/freedv_data_rx.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking C executable freedv_data_rx" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/freedv_data_rx.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +src/CMakeFiles/freedv_data_rx.dir/build: src/freedv_data_rx + +.PHONY : src/CMakeFiles/freedv_data_rx.dir/build + +src/CMakeFiles/freedv_data_rx.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -P CMakeFiles/freedv_data_rx.dir/cmake_clean.cmake +.PHONY : src/CMakeFiles/freedv_data_rx.dir/clean + +src/CMakeFiles/freedv_data_rx.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/src /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/src /home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/freedv_data_rx.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : src/CMakeFiles/freedv_data_rx.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_rx.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_rx.dir/cmake_clean.cmake new file mode 100644 index 0000000..377cdfa --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_rx.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +file(REMOVE_RECURSE + "CMakeFiles/freedv_data_rx.dir/freedv_data_rx.c.o" + "freedv_data_rx.pdb" + "freedv_data_rx" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/freedv_data_rx.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_rx.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_rx.dir/depend.internal new file mode 100644 index 0000000..1029a2a --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_rx.dir/depend.internal @@ -0,0 +1,7 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/freedv_data_rx.dir/freedv_data_rx.c.o + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/freedv_api.h + /home/sh/Downloads/hackrf/codec2/src/freedv_data_rx.c diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_rx.dir/depend.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_rx.dir/depend.make new file mode 100644 index 0000000..dc25fef --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_rx.dir/depend.make @@ -0,0 +1,7 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/freedv_data_rx.dir/freedv_data_rx.c.o: ../src/comp.h +src/CMakeFiles/freedv_data_rx.dir/freedv_data_rx.c.o: ../src/freedv_api.h +src/CMakeFiles/freedv_data_rx.dir/freedv_data_rx.c.o: ../src/freedv_data_rx.c + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_rx.dir/flags.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_rx.dir/flags.make new file mode 100644 index 0000000..814242c --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_rx.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DGIT_HASH=\"df2ed16c\" -D_GNU_SOURCE=1 + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/src + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_rx.dir/freedv_data_rx.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_rx.dir/freedv_data_rx.c.o new file mode 100644 index 0000000..4757c49 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_rx.dir/freedv_data_rx.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_rx.dir/link.txt b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_rx.dir/link.txt new file mode 100644 index 0000000..11b113e --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_rx.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/freedv_data_rx.dir/freedv_data_rx.c.o -o freedv_data_rx -Wl,-rpath,/home/sh/Downloads/hackrf/codec2/build_linux/src -lm libcodec2.so.0.9 -lm diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_rx.dir/progress.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_rx.dir/progress.make new file mode 100644 index 0000000..b39c96b --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_rx.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = +CMAKE_PROGRESS_2 = 48 + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_tx.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_tx.dir/C.includecache new file mode 100644 index 0000000..9df2f8e --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_tx.dir/C.includecache @@ -0,0 +1,44 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +/home/sh/Downloads/hackrf/codec2/src/codec2.h +codec2/version.h +- + +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/freedv_api.h +sys/types.h +- +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/freedv_data_tx.c +assert.h +- +stdlib.h +- +stdio.h +- +string.h +- +errno.h +- +ctype.h +- +stdint.h +- +stdbool.h +- +freedv_api.h +/home/sh/Downloads/hackrf/codec2/src/freedv_api.h +codec2.h +/home/sh/Downloads/hackrf/codec2/src/codec2.h + +codec2/version.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_tx.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_tx.dir/DependInfo.cmake new file mode 100644 index 0000000..c59fc51 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_tx.dir/DependInfo.cmake @@ -0,0 +1,29 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/src/freedv_data_tx.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/freedv_data_tx.dir/freedv_data_tx.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "GIT_HASH=\"df2ed16c\"" + "_GNU_SOURCE=1" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/DependInfo.cmake" + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_tx.dir/build.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_tx.dir/build.make new file mode 100644 index 0000000..153062c --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_tx.dir/build.make @@ -0,0 +1,99 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include src/CMakeFiles/freedv_data_tx.dir/depend.make + +# Include the progress variables for this target. +include src/CMakeFiles/freedv_data_tx.dir/progress.make + +# Include the compile flags for this target's objects. +include src/CMakeFiles/freedv_data_tx.dir/flags.make + +src/CMakeFiles/freedv_data_tx.dir/freedv_data_tx.c.o: src/CMakeFiles/freedv_data_tx.dir/flags.make +src/CMakeFiles/freedv_data_tx.dir/freedv_data_tx.c.o: ../src/freedv_data_tx.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object src/CMakeFiles/freedv_data_tx.dir/freedv_data_tx.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/freedv_data_tx.dir/freedv_data_tx.c.o -c /home/sh/Downloads/hackrf/codec2/src/freedv_data_tx.c + +src/CMakeFiles/freedv_data_tx.dir/freedv_data_tx.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/freedv_data_tx.dir/freedv_data_tx.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/freedv_data_tx.c > CMakeFiles/freedv_data_tx.dir/freedv_data_tx.c.i + +src/CMakeFiles/freedv_data_tx.dir/freedv_data_tx.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/freedv_data_tx.dir/freedv_data_tx.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/freedv_data_tx.c -o CMakeFiles/freedv_data_tx.dir/freedv_data_tx.c.s + +# Object files for target freedv_data_tx +freedv_data_tx_OBJECTS = \ +"CMakeFiles/freedv_data_tx.dir/freedv_data_tx.c.o" + +# External object files for target freedv_data_tx +freedv_data_tx_EXTERNAL_OBJECTS = + +src/freedv_data_tx: src/CMakeFiles/freedv_data_tx.dir/freedv_data_tx.c.o +src/freedv_data_tx: src/CMakeFiles/freedv_data_tx.dir/build.make +src/freedv_data_tx: src/libcodec2.so.0.9 +src/freedv_data_tx: src/CMakeFiles/freedv_data_tx.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking C executable freedv_data_tx" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/freedv_data_tx.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +src/CMakeFiles/freedv_data_tx.dir/build: src/freedv_data_tx + +.PHONY : src/CMakeFiles/freedv_data_tx.dir/build + +src/CMakeFiles/freedv_data_tx.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -P CMakeFiles/freedv_data_tx.dir/cmake_clean.cmake +.PHONY : src/CMakeFiles/freedv_data_tx.dir/clean + +src/CMakeFiles/freedv_data_tx.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/src /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/src /home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/freedv_data_tx.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : src/CMakeFiles/freedv_data_tx.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_tx.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_tx.dir/cmake_clean.cmake new file mode 100644 index 0000000..8c33524 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_tx.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +file(REMOVE_RECURSE + "CMakeFiles/freedv_data_tx.dir/freedv_data_tx.c.o" + "freedv_data_tx.pdb" + "freedv_data_tx" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/freedv_data_tx.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_tx.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_tx.dir/depend.internal new file mode 100644 index 0000000..6ca4b3d --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_tx.dir/depend.internal @@ -0,0 +1,9 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/freedv_data_tx.dir/freedv_data_tx.c.o + /home/sh/Downloads/hackrf/codec2/src/codec2.h + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/freedv_api.h + /home/sh/Downloads/hackrf/codec2/src/freedv_data_tx.c + codec2/version.h diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_tx.dir/depend.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_tx.dir/depend.make new file mode 100644 index 0000000..61fa1de --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_tx.dir/depend.make @@ -0,0 +1,9 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/freedv_data_tx.dir/freedv_data_tx.c.o: ../src/codec2.h +src/CMakeFiles/freedv_data_tx.dir/freedv_data_tx.c.o: ../src/comp.h +src/CMakeFiles/freedv_data_tx.dir/freedv_data_tx.c.o: ../src/freedv_api.h +src/CMakeFiles/freedv_data_tx.dir/freedv_data_tx.c.o: ../src/freedv_data_tx.c +src/CMakeFiles/freedv_data_tx.dir/freedv_data_tx.c.o: codec2/version.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_tx.dir/flags.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_tx.dir/flags.make new file mode 100644 index 0000000..814242c --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_tx.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DGIT_HASH=\"df2ed16c\" -D_GNU_SOURCE=1 + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/src + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_tx.dir/freedv_data_tx.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_tx.dir/freedv_data_tx.c.o new file mode 100644 index 0000000..c3e79e8 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_tx.dir/freedv_data_tx.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_tx.dir/link.txt b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_tx.dir/link.txt new file mode 100644 index 0000000..9901f25 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_tx.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/freedv_data_tx.dir/freedv_data_tx.c.o -o freedv_data_tx -Wl,-rpath,/home/sh/Downloads/hackrf/codec2/build_linux/src -lm libcodec2.so.0.9 -lm diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_tx.dir/progress.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_tx.dir/progress.make new file mode 100644 index 0000000..6c287f1 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_data_tx.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = +CMAKE_PROGRESS_2 = + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_mixed_rx.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_mixed_rx.dir/C.includecache new file mode 100644 index 0000000..c6cf6a4 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_mixed_rx.dir/C.includecache @@ -0,0 +1,64 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +/home/sh/Downloads/hackrf/codec2/src/codec2.h +codec2/version.h +- + +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/freedv_api.h +sys/types.h +- +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/freedv_mixed_rx.c +assert.h +- +stdlib.h +- +stdio.h +- +string.h +- +errno.h +- +stdlib.h +- +stdio.h +- +freedv_api.h +/home/sh/Downloads/hackrf/codec2/src/freedv_api.h +modem_stats.h +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h +codec2.h +/home/sh/Downloads/hackrf/codec2/src/codec2.h + +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h +stdlib.h +- +stdio.h +- +math.h +- +string.h +- +xmmintrin.h +- +sys/types.h +- + +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + +codec2/version.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_mixed_rx.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_mixed_rx.dir/DependInfo.cmake new file mode 100644 index 0000000..337458d --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_mixed_rx.dir/DependInfo.cmake @@ -0,0 +1,29 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/src/freedv_mixed_rx.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/freedv_mixed_rx.dir/freedv_mixed_rx.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "GIT_HASH=\"df2ed16c\"" + "_GNU_SOURCE=1" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/DependInfo.cmake" + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_mixed_rx.dir/build.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_mixed_rx.dir/build.make new file mode 100644 index 0000000..02a33a1 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_mixed_rx.dir/build.make @@ -0,0 +1,99 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include src/CMakeFiles/freedv_mixed_rx.dir/depend.make + +# Include the progress variables for this target. +include src/CMakeFiles/freedv_mixed_rx.dir/progress.make + +# Include the compile flags for this target's objects. +include src/CMakeFiles/freedv_mixed_rx.dir/flags.make + +src/CMakeFiles/freedv_mixed_rx.dir/freedv_mixed_rx.c.o: src/CMakeFiles/freedv_mixed_rx.dir/flags.make +src/CMakeFiles/freedv_mixed_rx.dir/freedv_mixed_rx.c.o: ../src/freedv_mixed_rx.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object src/CMakeFiles/freedv_mixed_rx.dir/freedv_mixed_rx.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/freedv_mixed_rx.dir/freedv_mixed_rx.c.o -c /home/sh/Downloads/hackrf/codec2/src/freedv_mixed_rx.c + +src/CMakeFiles/freedv_mixed_rx.dir/freedv_mixed_rx.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/freedv_mixed_rx.dir/freedv_mixed_rx.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/freedv_mixed_rx.c > CMakeFiles/freedv_mixed_rx.dir/freedv_mixed_rx.c.i + +src/CMakeFiles/freedv_mixed_rx.dir/freedv_mixed_rx.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/freedv_mixed_rx.dir/freedv_mixed_rx.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/freedv_mixed_rx.c -o CMakeFiles/freedv_mixed_rx.dir/freedv_mixed_rx.c.s + +# Object files for target freedv_mixed_rx +freedv_mixed_rx_OBJECTS = \ +"CMakeFiles/freedv_mixed_rx.dir/freedv_mixed_rx.c.o" + +# External object files for target freedv_mixed_rx +freedv_mixed_rx_EXTERNAL_OBJECTS = + +src/freedv_mixed_rx: src/CMakeFiles/freedv_mixed_rx.dir/freedv_mixed_rx.c.o +src/freedv_mixed_rx: src/CMakeFiles/freedv_mixed_rx.dir/build.make +src/freedv_mixed_rx: src/libcodec2.so.0.9 +src/freedv_mixed_rx: src/CMakeFiles/freedv_mixed_rx.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking C executable freedv_mixed_rx" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/freedv_mixed_rx.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +src/CMakeFiles/freedv_mixed_rx.dir/build: src/freedv_mixed_rx + +.PHONY : src/CMakeFiles/freedv_mixed_rx.dir/build + +src/CMakeFiles/freedv_mixed_rx.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -P CMakeFiles/freedv_mixed_rx.dir/cmake_clean.cmake +.PHONY : src/CMakeFiles/freedv_mixed_rx.dir/clean + +src/CMakeFiles/freedv_mixed_rx.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/src /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/src /home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/freedv_mixed_rx.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : src/CMakeFiles/freedv_mixed_rx.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_mixed_rx.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_mixed_rx.dir/cmake_clean.cmake new file mode 100644 index 0000000..d810d03 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_mixed_rx.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +file(REMOVE_RECURSE + "CMakeFiles/freedv_mixed_rx.dir/freedv_mixed_rx.c.o" + "freedv_mixed_rx.pdb" + "freedv_mixed_rx" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/freedv_mixed_rx.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_mixed_rx.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_mixed_rx.dir/depend.internal new file mode 100644 index 0000000..5e88a7f --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_mixed_rx.dir/depend.internal @@ -0,0 +1,11 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/freedv_mixed_rx.dir/freedv_mixed_rx.c.o + /home/sh/Downloads/hackrf/codec2/src/codec2.h + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/freedv_api.h + /home/sh/Downloads/hackrf/codec2/src/freedv_mixed_rx.c + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/modem_stats.h + codec2/version.h diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_mixed_rx.dir/depend.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_mixed_rx.dir/depend.make new file mode 100644 index 0000000..5a23c9d --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_mixed_rx.dir/depend.make @@ -0,0 +1,11 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/freedv_mixed_rx.dir/freedv_mixed_rx.c.o: ../src/codec2.h +src/CMakeFiles/freedv_mixed_rx.dir/freedv_mixed_rx.c.o: ../src/comp.h +src/CMakeFiles/freedv_mixed_rx.dir/freedv_mixed_rx.c.o: ../src/freedv_api.h +src/CMakeFiles/freedv_mixed_rx.dir/freedv_mixed_rx.c.o: ../src/freedv_mixed_rx.c +src/CMakeFiles/freedv_mixed_rx.dir/freedv_mixed_rx.c.o: ../src/kiss_fft.h +src/CMakeFiles/freedv_mixed_rx.dir/freedv_mixed_rx.c.o: ../src/modem_stats.h +src/CMakeFiles/freedv_mixed_rx.dir/freedv_mixed_rx.c.o: codec2/version.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_mixed_rx.dir/flags.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_mixed_rx.dir/flags.make new file mode 100644 index 0000000..814242c --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_mixed_rx.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DGIT_HASH=\"df2ed16c\" -D_GNU_SOURCE=1 + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/src + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_mixed_rx.dir/freedv_mixed_rx.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_mixed_rx.dir/freedv_mixed_rx.c.o new file mode 100644 index 0000000..9983180 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_mixed_rx.dir/freedv_mixed_rx.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_mixed_rx.dir/link.txt b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_mixed_rx.dir/link.txt new file mode 100644 index 0000000..29c09a1 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_mixed_rx.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/freedv_mixed_rx.dir/freedv_mixed_rx.c.o -o freedv_mixed_rx -Wl,-rpath,/home/sh/Downloads/hackrf/codec2/build_linux/src -lm libcodec2.so.0.9 -lm diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_mixed_rx.dir/progress.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_mixed_rx.dir/progress.make new file mode 100644 index 0000000..0a44ece --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_mixed_rx.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = 49 +CMAKE_PROGRESS_2 = + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_mixed_tx.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_mixed_tx.dir/C.includecache new file mode 100644 index 0000000..d3e1aeb --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_mixed_tx.dir/C.includecache @@ -0,0 +1,44 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +/home/sh/Downloads/hackrf/codec2/src/codec2.h +codec2/version.h +- + +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/freedv_api.h +sys/types.h +- +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/freedv_mixed_tx.c +assert.h +- +stdlib.h +- +stdio.h +- +string.h +- +errno.h +- +ctype.h +- +stdint.h +- +stdbool.h +- +freedv_api.h +/home/sh/Downloads/hackrf/codec2/src/freedv_api.h +codec2.h +/home/sh/Downloads/hackrf/codec2/src/codec2.h + +codec2/version.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_mixed_tx.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_mixed_tx.dir/DependInfo.cmake new file mode 100644 index 0000000..d4c89dd --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_mixed_tx.dir/DependInfo.cmake @@ -0,0 +1,29 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/src/freedv_mixed_tx.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/freedv_mixed_tx.dir/freedv_mixed_tx.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "GIT_HASH=\"df2ed16c\"" + "_GNU_SOURCE=1" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/DependInfo.cmake" + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_mixed_tx.dir/build.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_mixed_tx.dir/build.make new file mode 100644 index 0000000..6d04003 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_mixed_tx.dir/build.make @@ -0,0 +1,99 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include src/CMakeFiles/freedv_mixed_tx.dir/depend.make + +# Include the progress variables for this target. +include src/CMakeFiles/freedv_mixed_tx.dir/progress.make + +# Include the compile flags for this target's objects. +include src/CMakeFiles/freedv_mixed_tx.dir/flags.make + +src/CMakeFiles/freedv_mixed_tx.dir/freedv_mixed_tx.c.o: src/CMakeFiles/freedv_mixed_tx.dir/flags.make +src/CMakeFiles/freedv_mixed_tx.dir/freedv_mixed_tx.c.o: ../src/freedv_mixed_tx.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object src/CMakeFiles/freedv_mixed_tx.dir/freedv_mixed_tx.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/freedv_mixed_tx.dir/freedv_mixed_tx.c.o -c /home/sh/Downloads/hackrf/codec2/src/freedv_mixed_tx.c + +src/CMakeFiles/freedv_mixed_tx.dir/freedv_mixed_tx.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/freedv_mixed_tx.dir/freedv_mixed_tx.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/freedv_mixed_tx.c > CMakeFiles/freedv_mixed_tx.dir/freedv_mixed_tx.c.i + +src/CMakeFiles/freedv_mixed_tx.dir/freedv_mixed_tx.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/freedv_mixed_tx.dir/freedv_mixed_tx.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/freedv_mixed_tx.c -o CMakeFiles/freedv_mixed_tx.dir/freedv_mixed_tx.c.s + +# Object files for target freedv_mixed_tx +freedv_mixed_tx_OBJECTS = \ +"CMakeFiles/freedv_mixed_tx.dir/freedv_mixed_tx.c.o" + +# External object files for target freedv_mixed_tx +freedv_mixed_tx_EXTERNAL_OBJECTS = + +src/freedv_mixed_tx: src/CMakeFiles/freedv_mixed_tx.dir/freedv_mixed_tx.c.o +src/freedv_mixed_tx: src/CMakeFiles/freedv_mixed_tx.dir/build.make +src/freedv_mixed_tx: src/libcodec2.so.0.9 +src/freedv_mixed_tx: src/CMakeFiles/freedv_mixed_tx.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking C executable freedv_mixed_tx" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/freedv_mixed_tx.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +src/CMakeFiles/freedv_mixed_tx.dir/build: src/freedv_mixed_tx + +.PHONY : src/CMakeFiles/freedv_mixed_tx.dir/build + +src/CMakeFiles/freedv_mixed_tx.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -P CMakeFiles/freedv_mixed_tx.dir/cmake_clean.cmake +.PHONY : src/CMakeFiles/freedv_mixed_tx.dir/clean + +src/CMakeFiles/freedv_mixed_tx.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/src /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/src /home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/freedv_mixed_tx.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : src/CMakeFiles/freedv_mixed_tx.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_mixed_tx.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_mixed_tx.dir/cmake_clean.cmake new file mode 100644 index 0000000..2c76911 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_mixed_tx.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +file(REMOVE_RECURSE + "CMakeFiles/freedv_mixed_tx.dir/freedv_mixed_tx.c.o" + "freedv_mixed_tx.pdb" + "freedv_mixed_tx" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/freedv_mixed_tx.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_mixed_tx.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_mixed_tx.dir/depend.internal new file mode 100644 index 0000000..0ac68b0 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_mixed_tx.dir/depend.internal @@ -0,0 +1,9 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/freedv_mixed_tx.dir/freedv_mixed_tx.c.o + /home/sh/Downloads/hackrf/codec2/src/codec2.h + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/freedv_api.h + /home/sh/Downloads/hackrf/codec2/src/freedv_mixed_tx.c + codec2/version.h diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_mixed_tx.dir/depend.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_mixed_tx.dir/depend.make new file mode 100644 index 0000000..fcbe4fa --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_mixed_tx.dir/depend.make @@ -0,0 +1,9 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/freedv_mixed_tx.dir/freedv_mixed_tx.c.o: ../src/codec2.h +src/CMakeFiles/freedv_mixed_tx.dir/freedv_mixed_tx.c.o: ../src/comp.h +src/CMakeFiles/freedv_mixed_tx.dir/freedv_mixed_tx.c.o: ../src/freedv_api.h +src/CMakeFiles/freedv_mixed_tx.dir/freedv_mixed_tx.c.o: ../src/freedv_mixed_tx.c +src/CMakeFiles/freedv_mixed_tx.dir/freedv_mixed_tx.c.o: codec2/version.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_mixed_tx.dir/flags.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_mixed_tx.dir/flags.make new file mode 100644 index 0000000..814242c --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_mixed_tx.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DGIT_HASH=\"df2ed16c\" -D_GNU_SOURCE=1 + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/src + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_mixed_tx.dir/freedv_mixed_tx.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_mixed_tx.dir/freedv_mixed_tx.c.o new file mode 100644 index 0000000..da89325 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_mixed_tx.dir/freedv_mixed_tx.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_mixed_tx.dir/link.txt b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_mixed_tx.dir/link.txt new file mode 100644 index 0000000..ddbe5d6 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_mixed_tx.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/freedv_mixed_tx.dir/freedv_mixed_tx.c.o -o freedv_mixed_tx -Wl,-rpath,/home/sh/Downloads/hackrf/codec2/build_linux/src -lm libcodec2.so.0.9 -lm diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_mixed_tx.dir/progress.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_mixed_tx.dir/progress.make new file mode 100644 index 0000000..cc669c1 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_mixed_tx.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = +CMAKE_PROGRESS_2 = 50 + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_rx.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_rx.dir/C.includecache new file mode 100644 index 0000000..3704def --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_rx.dir/C.includecache @@ -0,0 +1,56 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/freedv_api.h +sys/types.h +- +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/freedv_rx.c +assert.h +- +stdlib.h +- +stdio.h +- +string.h +- +errno.h +- +stdlib.h +- +stdio.h +- +freedv_api.h +/home/sh/Downloads/hackrf/codec2/src/freedv_api.h +modem_stats.h +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h + +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h +stdlib.h +- +stdio.h +- +math.h +- +string.h +- +xmmintrin.h +- +sys/types.h +- + +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_rx.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_rx.dir/DependInfo.cmake new file mode 100644 index 0000000..eef4ef9 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_rx.dir/DependInfo.cmake @@ -0,0 +1,29 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/src/freedv_rx.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/freedv_rx.dir/freedv_rx.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "GIT_HASH=\"df2ed16c\"" + "_GNU_SOURCE=1" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/DependInfo.cmake" + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_rx.dir/build.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_rx.dir/build.make new file mode 100644 index 0000000..da286a2 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_rx.dir/build.make @@ -0,0 +1,99 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include src/CMakeFiles/freedv_rx.dir/depend.make + +# Include the progress variables for this target. +include src/CMakeFiles/freedv_rx.dir/progress.make + +# Include the compile flags for this target's objects. +include src/CMakeFiles/freedv_rx.dir/flags.make + +src/CMakeFiles/freedv_rx.dir/freedv_rx.c.o: src/CMakeFiles/freedv_rx.dir/flags.make +src/CMakeFiles/freedv_rx.dir/freedv_rx.c.o: ../src/freedv_rx.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object src/CMakeFiles/freedv_rx.dir/freedv_rx.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/freedv_rx.dir/freedv_rx.c.o -c /home/sh/Downloads/hackrf/codec2/src/freedv_rx.c + +src/CMakeFiles/freedv_rx.dir/freedv_rx.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/freedv_rx.dir/freedv_rx.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/freedv_rx.c > CMakeFiles/freedv_rx.dir/freedv_rx.c.i + +src/CMakeFiles/freedv_rx.dir/freedv_rx.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/freedv_rx.dir/freedv_rx.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/freedv_rx.c -o CMakeFiles/freedv_rx.dir/freedv_rx.c.s + +# Object files for target freedv_rx +freedv_rx_OBJECTS = \ +"CMakeFiles/freedv_rx.dir/freedv_rx.c.o" + +# External object files for target freedv_rx +freedv_rx_EXTERNAL_OBJECTS = + +src/freedv_rx: src/CMakeFiles/freedv_rx.dir/freedv_rx.c.o +src/freedv_rx: src/CMakeFiles/freedv_rx.dir/build.make +src/freedv_rx: src/libcodec2.so.0.9 +src/freedv_rx: src/CMakeFiles/freedv_rx.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking C executable freedv_rx" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/freedv_rx.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +src/CMakeFiles/freedv_rx.dir/build: src/freedv_rx + +.PHONY : src/CMakeFiles/freedv_rx.dir/build + +src/CMakeFiles/freedv_rx.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -P CMakeFiles/freedv_rx.dir/cmake_clean.cmake +.PHONY : src/CMakeFiles/freedv_rx.dir/clean + +src/CMakeFiles/freedv_rx.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/src /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/src /home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/freedv_rx.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : src/CMakeFiles/freedv_rx.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_rx.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_rx.dir/cmake_clean.cmake new file mode 100644 index 0000000..a3048a1 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_rx.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +file(REMOVE_RECURSE + "CMakeFiles/freedv_rx.dir/freedv_rx.c.o" + "freedv_rx.pdb" + "freedv_rx" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/freedv_rx.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_rx.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_rx.dir/depend.internal new file mode 100644 index 0000000..c7ee9fe --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_rx.dir/depend.internal @@ -0,0 +1,9 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/freedv_rx.dir/freedv_rx.c.o + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/freedv_api.h + /home/sh/Downloads/hackrf/codec2/src/freedv_rx.c + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/modem_stats.h diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_rx.dir/depend.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_rx.dir/depend.make new file mode 100644 index 0000000..51bfb1a --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_rx.dir/depend.make @@ -0,0 +1,9 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/freedv_rx.dir/freedv_rx.c.o: ../src/comp.h +src/CMakeFiles/freedv_rx.dir/freedv_rx.c.o: ../src/freedv_api.h +src/CMakeFiles/freedv_rx.dir/freedv_rx.c.o: ../src/freedv_rx.c +src/CMakeFiles/freedv_rx.dir/freedv_rx.c.o: ../src/kiss_fft.h +src/CMakeFiles/freedv_rx.dir/freedv_rx.c.o: ../src/modem_stats.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_rx.dir/flags.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_rx.dir/flags.make new file mode 100644 index 0000000..814242c --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_rx.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DGIT_HASH=\"df2ed16c\" -D_GNU_SOURCE=1 + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/src + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_rx.dir/freedv_rx.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_rx.dir/freedv_rx.c.o new file mode 100644 index 0000000..3893771 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_rx.dir/freedv_rx.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_rx.dir/link.txt b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_rx.dir/link.txt new file mode 100644 index 0000000..167ff58 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_rx.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/freedv_rx.dir/freedv_rx.c.o -o freedv_rx -Wl,-rpath,/home/sh/Downloads/hackrf/codec2/build_linux/src -lm libcodec2.so.0.9 -lm diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_rx.dir/progress.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_rx.dir/progress.make new file mode 100644 index 0000000..6c287f1 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_rx.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = +CMAKE_PROGRESS_2 = + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_tx.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_tx.dir/C.includecache new file mode 100644 index 0000000..da7143b --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_tx.dir/C.includecache @@ -0,0 +1,30 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/freedv_api.h +sys/types.h +- +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/freedv_tx.c +assert.h +- +stdlib.h +- +stdio.h +- +string.h +- +errno.h +- +freedv_api.h +/home/sh/Downloads/hackrf/codec2/src/freedv_api.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_tx.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_tx.dir/DependInfo.cmake new file mode 100644 index 0000000..947e151 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_tx.dir/DependInfo.cmake @@ -0,0 +1,29 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/src/freedv_tx.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/freedv_tx.dir/freedv_tx.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "GIT_HASH=\"df2ed16c\"" + "_GNU_SOURCE=1" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/DependInfo.cmake" + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_tx.dir/build.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_tx.dir/build.make new file mode 100644 index 0000000..31a49ee --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_tx.dir/build.make @@ -0,0 +1,99 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include src/CMakeFiles/freedv_tx.dir/depend.make + +# Include the progress variables for this target. +include src/CMakeFiles/freedv_tx.dir/progress.make + +# Include the compile flags for this target's objects. +include src/CMakeFiles/freedv_tx.dir/flags.make + +src/CMakeFiles/freedv_tx.dir/freedv_tx.c.o: src/CMakeFiles/freedv_tx.dir/flags.make +src/CMakeFiles/freedv_tx.dir/freedv_tx.c.o: ../src/freedv_tx.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object src/CMakeFiles/freedv_tx.dir/freedv_tx.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/freedv_tx.dir/freedv_tx.c.o -c /home/sh/Downloads/hackrf/codec2/src/freedv_tx.c + +src/CMakeFiles/freedv_tx.dir/freedv_tx.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/freedv_tx.dir/freedv_tx.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/freedv_tx.c > CMakeFiles/freedv_tx.dir/freedv_tx.c.i + +src/CMakeFiles/freedv_tx.dir/freedv_tx.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/freedv_tx.dir/freedv_tx.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/freedv_tx.c -o CMakeFiles/freedv_tx.dir/freedv_tx.c.s + +# Object files for target freedv_tx +freedv_tx_OBJECTS = \ +"CMakeFiles/freedv_tx.dir/freedv_tx.c.o" + +# External object files for target freedv_tx +freedv_tx_EXTERNAL_OBJECTS = + +src/freedv_tx: src/CMakeFiles/freedv_tx.dir/freedv_tx.c.o +src/freedv_tx: src/CMakeFiles/freedv_tx.dir/build.make +src/freedv_tx: src/libcodec2.so.0.9 +src/freedv_tx: src/CMakeFiles/freedv_tx.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking C executable freedv_tx" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/freedv_tx.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +src/CMakeFiles/freedv_tx.dir/build: src/freedv_tx + +.PHONY : src/CMakeFiles/freedv_tx.dir/build + +src/CMakeFiles/freedv_tx.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -P CMakeFiles/freedv_tx.dir/cmake_clean.cmake +.PHONY : src/CMakeFiles/freedv_tx.dir/clean + +src/CMakeFiles/freedv_tx.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/src /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/src /home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/freedv_tx.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : src/CMakeFiles/freedv_tx.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_tx.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_tx.dir/cmake_clean.cmake new file mode 100644 index 0000000..bd8e846 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_tx.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +file(REMOVE_RECURSE + "CMakeFiles/freedv_tx.dir/freedv_tx.c.o" + "freedv_tx.pdb" + "freedv_tx" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/freedv_tx.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_tx.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_tx.dir/depend.internal new file mode 100644 index 0000000..762fd28 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_tx.dir/depend.internal @@ -0,0 +1,7 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/freedv_tx.dir/freedv_tx.c.o + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/freedv_api.h + /home/sh/Downloads/hackrf/codec2/src/freedv_tx.c diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_tx.dir/depend.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_tx.dir/depend.make new file mode 100644 index 0000000..194a56f --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_tx.dir/depend.make @@ -0,0 +1,7 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/freedv_tx.dir/freedv_tx.c.o: ../src/comp.h +src/CMakeFiles/freedv_tx.dir/freedv_tx.c.o: ../src/freedv_api.h +src/CMakeFiles/freedv_tx.dir/freedv_tx.c.o: ../src/freedv_tx.c + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_tx.dir/flags.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_tx.dir/flags.make new file mode 100644 index 0000000..814242c --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_tx.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DGIT_HASH=\"df2ed16c\" -D_GNU_SOURCE=1 + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/src + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_tx.dir/freedv_tx.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_tx.dir/freedv_tx.c.o new file mode 100644 index 0000000..c071513 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_tx.dir/freedv_tx.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_tx.dir/link.txt b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_tx.dir/link.txt new file mode 100644 index 0000000..3b65fb5 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_tx.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/freedv_tx.dir/freedv_tx.c.o -o freedv_tx -Wl,-rpath,/home/sh/Downloads/hackrf/codec2/build_linux/src -lm libcodec2.so.0.9 -lm diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_tx.dir/progress.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_tx.dir/progress.make new file mode 100644 index 0000000..9fc8bfe --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/freedv_tx.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = +CMAKE_PROGRESS_2 = 51 + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_demod.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_demod.dir/C.includecache new file mode 100644 index 0000000..0b5cac0 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_demod.dir/C.includecache @@ -0,0 +1,80 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +/home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +modem_stats.h +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h + +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/fsk.h +stdint.h +- +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +kiss_fftr.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h +modem_stats.h +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h + +/home/sh/Downloads/hackrf/codec2/src/fsk_demod.c +assert.h +- +stdio.h +- +stdlib.h +- +getopt.h +- +time.h +- +signal.h +- +unistd.h +- +fsk.h +/home/sh/Downloads/hackrf/codec2/src/fsk.h +codec2_fdmdv.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h +mpdecode_core.h +/home/sh/Downloads/hackrf/codec2/src/mpdecode_core.h +modem_stats.h +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h + +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h +stdlib.h +- +stdio.h +- +math.h +- +string.h +- +xmmintrin.h +- +sys/types.h +- + +/home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/src/mpdecode_core.h +stdint.h +- +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_demod.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_demod.dir/DependInfo.cmake new file mode 100644 index 0000000..f5fc37a --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_demod.dir/DependInfo.cmake @@ -0,0 +1,31 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/src/fsk_demod.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/fsk_demod.dir/fsk_demod.c.o" + "/home/sh/Downloads/hackrf/codec2/src/modem_probe.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/fsk_demod.dir/modem_probe.c.o" + "/home/sh/Downloads/hackrf/codec2/src/octave.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/fsk_demod.dir/octave.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "GIT_HASH=\"df2ed16c\"" + "_GNU_SOURCE=1" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/DependInfo.cmake" + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_demod.dir/build.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_demod.dir/build.make new file mode 100644 index 0000000..08bec45 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_demod.dir/build.make @@ -0,0 +1,129 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include src/CMakeFiles/fsk_demod.dir/depend.make + +# Include the progress variables for this target. +include src/CMakeFiles/fsk_demod.dir/progress.make + +# Include the compile flags for this target's objects. +include src/CMakeFiles/fsk_demod.dir/flags.make + +src/CMakeFiles/fsk_demod.dir/fsk_demod.c.o: src/CMakeFiles/fsk_demod.dir/flags.make +src/CMakeFiles/fsk_demod.dir/fsk_demod.c.o: ../src/fsk_demod.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object src/CMakeFiles/fsk_demod.dir/fsk_demod.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/fsk_demod.dir/fsk_demod.c.o -c /home/sh/Downloads/hackrf/codec2/src/fsk_demod.c + +src/CMakeFiles/fsk_demod.dir/fsk_demod.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/fsk_demod.dir/fsk_demod.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/fsk_demod.c > CMakeFiles/fsk_demod.dir/fsk_demod.c.i + +src/CMakeFiles/fsk_demod.dir/fsk_demod.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/fsk_demod.dir/fsk_demod.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/fsk_demod.c -o CMakeFiles/fsk_demod.dir/fsk_demod.c.s + +src/CMakeFiles/fsk_demod.dir/modem_probe.c.o: src/CMakeFiles/fsk_demod.dir/flags.make +src/CMakeFiles/fsk_demod.dir/modem_probe.c.o: ../src/modem_probe.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Building C object src/CMakeFiles/fsk_demod.dir/modem_probe.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/fsk_demod.dir/modem_probe.c.o -c /home/sh/Downloads/hackrf/codec2/src/modem_probe.c + +src/CMakeFiles/fsk_demod.dir/modem_probe.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/fsk_demod.dir/modem_probe.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/modem_probe.c > CMakeFiles/fsk_demod.dir/modem_probe.c.i + +src/CMakeFiles/fsk_demod.dir/modem_probe.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/fsk_demod.dir/modem_probe.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/modem_probe.c -o CMakeFiles/fsk_demod.dir/modem_probe.c.s + +src/CMakeFiles/fsk_demod.dir/octave.c.o: src/CMakeFiles/fsk_demod.dir/flags.make +src/CMakeFiles/fsk_demod.dir/octave.c.o: ../src/octave.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_3) "Building C object src/CMakeFiles/fsk_demod.dir/octave.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/fsk_demod.dir/octave.c.o -c /home/sh/Downloads/hackrf/codec2/src/octave.c + +src/CMakeFiles/fsk_demod.dir/octave.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/fsk_demod.dir/octave.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/octave.c > CMakeFiles/fsk_demod.dir/octave.c.i + +src/CMakeFiles/fsk_demod.dir/octave.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/fsk_demod.dir/octave.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/octave.c -o CMakeFiles/fsk_demod.dir/octave.c.s + +# Object files for target fsk_demod +fsk_demod_OBJECTS = \ +"CMakeFiles/fsk_demod.dir/fsk_demod.c.o" \ +"CMakeFiles/fsk_demod.dir/modem_probe.c.o" \ +"CMakeFiles/fsk_demod.dir/octave.c.o" + +# External object files for target fsk_demod +fsk_demod_EXTERNAL_OBJECTS = + +src/fsk_demod: src/CMakeFiles/fsk_demod.dir/fsk_demod.c.o +src/fsk_demod: src/CMakeFiles/fsk_demod.dir/modem_probe.c.o +src/fsk_demod: src/CMakeFiles/fsk_demod.dir/octave.c.o +src/fsk_demod: src/CMakeFiles/fsk_demod.dir/build.make +src/fsk_demod: src/libcodec2.so.0.9 +src/fsk_demod: src/CMakeFiles/fsk_demod.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_4) "Linking C executable fsk_demod" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/fsk_demod.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +src/CMakeFiles/fsk_demod.dir/build: src/fsk_demod + +.PHONY : src/CMakeFiles/fsk_demod.dir/build + +src/CMakeFiles/fsk_demod.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -P CMakeFiles/fsk_demod.dir/cmake_clean.cmake +.PHONY : src/CMakeFiles/fsk_demod.dir/clean + +src/CMakeFiles/fsk_demod.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/src /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/src /home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/fsk_demod.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : src/CMakeFiles/fsk_demod.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_demod.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_demod.dir/cmake_clean.cmake new file mode 100644 index 0000000..8b9cc83 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_demod.dir/cmake_clean.cmake @@ -0,0 +1,12 @@ +file(REMOVE_RECURSE + "CMakeFiles/fsk_demod.dir/fsk_demod.c.o" + "CMakeFiles/fsk_demod.dir/modem_probe.c.o" + "CMakeFiles/fsk_demod.dir/octave.c.o" + "fsk_demod.pdb" + "fsk_demod" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/fsk_demod.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_demod.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_demod.dir/depend.internal new file mode 100644 index 0000000..618b550 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_demod.dir/depend.internal @@ -0,0 +1,20 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/fsk_demod.dir/fsk_demod.c.o + /home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/fsk.h + /home/sh/Downloads/hackrf/codec2/src/fsk_demod.c + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h + /home/sh/Downloads/hackrf/codec2/src/modem_stats.h + /home/sh/Downloads/hackrf/codec2/src/mpdecode_core.h +src/CMakeFiles/fsk_demod.dir/modem_probe.c.o + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/modem_probe.c + /home/sh/Downloads/hackrf/codec2/src/octave.h +src/CMakeFiles/fsk_demod.dir/octave.c.o + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/octave.c + /home/sh/Downloads/hackrf/codec2/src/octave.h diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_demod.dir/depend.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_demod.dir/depend.make new file mode 100644 index 0000000..3338787 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_demod.dir/depend.make @@ -0,0 +1,20 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/fsk_demod.dir/fsk_demod.c.o: ../src/codec2_fdmdv.h +src/CMakeFiles/fsk_demod.dir/fsk_demod.c.o: ../src/comp.h +src/CMakeFiles/fsk_demod.dir/fsk_demod.c.o: ../src/fsk.h +src/CMakeFiles/fsk_demod.dir/fsk_demod.c.o: ../src/fsk_demod.c +src/CMakeFiles/fsk_demod.dir/fsk_demod.c.o: ../src/kiss_fft.h +src/CMakeFiles/fsk_demod.dir/fsk_demod.c.o: ../src/kiss_fftr.h +src/CMakeFiles/fsk_demod.dir/fsk_demod.c.o: ../src/modem_stats.h +src/CMakeFiles/fsk_demod.dir/fsk_demod.c.o: ../src/mpdecode_core.h + +src/CMakeFiles/fsk_demod.dir/modem_probe.c.o: ../src/comp.h +src/CMakeFiles/fsk_demod.dir/modem_probe.c.o: ../src/modem_probe.c +src/CMakeFiles/fsk_demod.dir/modem_probe.c.o: ../src/octave.h + +src/CMakeFiles/fsk_demod.dir/octave.c.o: ../src/comp.h +src/CMakeFiles/fsk_demod.dir/octave.c.o: ../src/octave.c +src/CMakeFiles/fsk_demod.dir/octave.c.o: ../src/octave.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_demod.dir/flags.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_demod.dir/flags.make new file mode 100644 index 0000000..814242c --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_demod.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DGIT_HASH=\"df2ed16c\" -D_GNU_SOURCE=1 + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/src + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_demod.dir/fsk_demod.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_demod.dir/fsk_demod.c.o new file mode 100644 index 0000000..a2cc993 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_demod.dir/fsk_demod.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_demod.dir/link.txt b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_demod.dir/link.txt new file mode 100644 index 0000000..c9a64e1 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_demod.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/fsk_demod.dir/fsk_demod.c.o CMakeFiles/fsk_demod.dir/modem_probe.c.o CMakeFiles/fsk_demod.dir/octave.c.o -o fsk_demod -Wl,-rpath,/home/sh/Downloads/hackrf/codec2/build_linux/src -lm libcodec2.so.0.9 -lm diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_demod.dir/modem_probe.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_demod.dir/modem_probe.c.o new file mode 100644 index 0000000..7716fc4 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_demod.dir/modem_probe.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_demod.dir/octave.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_demod.dir/octave.c.o new file mode 100644 index 0000000..889ec3b Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_demod.dir/octave.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_demod.dir/progress.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_demod.dir/progress.make new file mode 100644 index 0000000..c0fa4cc --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_demod.dir/progress.make @@ -0,0 +1,5 @@ +CMAKE_PROGRESS_1 = +CMAKE_PROGRESS_2 = +CMAKE_PROGRESS_3 = 52 +CMAKE_PROGRESS_4 = + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_get_test_bits.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_get_test_bits.dir/C.includecache new file mode 100644 index 0000000..cf26caf --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_get_test_bits.dir/C.includecache @@ -0,0 +1,52 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/fsk.h +stdint.h +- +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +kiss_fftr.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h +modem_stats.h +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h + +/home/sh/Downloads/hackrf/codec2/src/fsk_get_test_bits.c +stdio.h +- +string.h +- +fsk.h +/home/sh/Downloads/hackrf/codec2/src/fsk.h + +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h +stdlib.h +- +stdio.h +- +math.h +- +string.h +- +xmmintrin.h +- +sys/types.h +- + +/home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_get_test_bits.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_get_test_bits.dir/DependInfo.cmake new file mode 100644 index 0000000..4abeb68 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_get_test_bits.dir/DependInfo.cmake @@ -0,0 +1,28 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/src/fsk_get_test_bits.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/fsk_get_test_bits.dir/fsk_get_test_bits.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "GIT_HASH=\"df2ed16c\"" + "_GNU_SOURCE=1" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_get_test_bits.dir/build.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_get_test_bits.dir/build.make new file mode 100644 index 0000000..96d5c03 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_get_test_bits.dir/build.make @@ -0,0 +1,98 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include src/CMakeFiles/fsk_get_test_bits.dir/depend.make + +# Include the progress variables for this target. +include src/CMakeFiles/fsk_get_test_bits.dir/progress.make + +# Include the compile flags for this target's objects. +include src/CMakeFiles/fsk_get_test_bits.dir/flags.make + +src/CMakeFiles/fsk_get_test_bits.dir/fsk_get_test_bits.c.o: src/CMakeFiles/fsk_get_test_bits.dir/flags.make +src/CMakeFiles/fsk_get_test_bits.dir/fsk_get_test_bits.c.o: ../src/fsk_get_test_bits.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object src/CMakeFiles/fsk_get_test_bits.dir/fsk_get_test_bits.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/fsk_get_test_bits.dir/fsk_get_test_bits.c.o -c /home/sh/Downloads/hackrf/codec2/src/fsk_get_test_bits.c + +src/CMakeFiles/fsk_get_test_bits.dir/fsk_get_test_bits.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/fsk_get_test_bits.dir/fsk_get_test_bits.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/fsk_get_test_bits.c > CMakeFiles/fsk_get_test_bits.dir/fsk_get_test_bits.c.i + +src/CMakeFiles/fsk_get_test_bits.dir/fsk_get_test_bits.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/fsk_get_test_bits.dir/fsk_get_test_bits.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/fsk_get_test_bits.c -o CMakeFiles/fsk_get_test_bits.dir/fsk_get_test_bits.c.s + +# Object files for target fsk_get_test_bits +fsk_get_test_bits_OBJECTS = \ +"CMakeFiles/fsk_get_test_bits.dir/fsk_get_test_bits.c.o" + +# External object files for target fsk_get_test_bits +fsk_get_test_bits_EXTERNAL_OBJECTS = + +src/fsk_get_test_bits: src/CMakeFiles/fsk_get_test_bits.dir/fsk_get_test_bits.c.o +src/fsk_get_test_bits: src/CMakeFiles/fsk_get_test_bits.dir/build.make +src/fsk_get_test_bits: src/CMakeFiles/fsk_get_test_bits.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking C executable fsk_get_test_bits" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/fsk_get_test_bits.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +src/CMakeFiles/fsk_get_test_bits.dir/build: src/fsk_get_test_bits + +.PHONY : src/CMakeFiles/fsk_get_test_bits.dir/build + +src/CMakeFiles/fsk_get_test_bits.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -P CMakeFiles/fsk_get_test_bits.dir/cmake_clean.cmake +.PHONY : src/CMakeFiles/fsk_get_test_bits.dir/clean + +src/CMakeFiles/fsk_get_test_bits.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/src /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/src /home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/fsk_get_test_bits.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : src/CMakeFiles/fsk_get_test_bits.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_get_test_bits.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_get_test_bits.dir/cmake_clean.cmake new file mode 100644 index 0000000..d252b1a --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_get_test_bits.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +file(REMOVE_RECURSE + "CMakeFiles/fsk_get_test_bits.dir/fsk_get_test_bits.c.o" + "fsk_get_test_bits.pdb" + "fsk_get_test_bits" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/fsk_get_test_bits.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_get_test_bits.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_get_test_bits.dir/depend.internal new file mode 100644 index 0000000..3309b2c --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_get_test_bits.dir/depend.internal @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/fsk_get_test_bits.dir/fsk_get_test_bits.c.o + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/fsk.h + /home/sh/Downloads/hackrf/codec2/src/fsk_get_test_bits.c + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h + /home/sh/Downloads/hackrf/codec2/src/modem_stats.h diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_get_test_bits.dir/depend.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_get_test_bits.dir/depend.make new file mode 100644 index 0000000..af72eeb --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_get_test_bits.dir/depend.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/fsk_get_test_bits.dir/fsk_get_test_bits.c.o: ../src/comp.h +src/CMakeFiles/fsk_get_test_bits.dir/fsk_get_test_bits.c.o: ../src/fsk.h +src/CMakeFiles/fsk_get_test_bits.dir/fsk_get_test_bits.c.o: ../src/fsk_get_test_bits.c +src/CMakeFiles/fsk_get_test_bits.dir/fsk_get_test_bits.c.o: ../src/kiss_fft.h +src/CMakeFiles/fsk_get_test_bits.dir/fsk_get_test_bits.c.o: ../src/kiss_fftr.h +src/CMakeFiles/fsk_get_test_bits.dir/fsk_get_test_bits.c.o: ../src/modem_stats.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_get_test_bits.dir/flags.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_get_test_bits.dir/flags.make new file mode 100644 index 0000000..814242c --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_get_test_bits.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DGIT_HASH=\"df2ed16c\" -D_GNU_SOURCE=1 + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/src + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_get_test_bits.dir/fsk_get_test_bits.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_get_test_bits.dir/fsk_get_test_bits.c.o new file mode 100644 index 0000000..8163afa Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_get_test_bits.dir/fsk_get_test_bits.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_get_test_bits.dir/link.txt b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_get_test_bits.dir/link.txt new file mode 100644 index 0000000..00f740c --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_get_test_bits.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/fsk_get_test_bits.dir/fsk_get_test_bits.c.o -o fsk_get_test_bits diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_get_test_bits.dir/progress.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_get_test_bits.dir/progress.make new file mode 100644 index 0000000..356049e --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_get_test_bits.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = +CMAKE_PROGRESS_2 = 53 + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_mod.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_mod.dir/C.includecache new file mode 100644 index 0000000..89d1c2a --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_mod.dir/C.includecache @@ -0,0 +1,62 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +/home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +modem_stats.h +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h + +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/fsk.h +stdint.h +- +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +kiss_fftr.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h +modem_stats.h +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h + +/home/sh/Downloads/hackrf/codec2/src/fsk_mod.c +stdio.h +- +string.h +- +getopt.h +- +fsk.h +/home/sh/Downloads/hackrf/codec2/src/fsk.h +codec2_fdmdv.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h + +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h +stdlib.h +- +stdio.h +- +math.h +- +string.h +- +xmmintrin.h +- +sys/types.h +- + +/home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_mod.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_mod.dir/DependInfo.cmake new file mode 100644 index 0000000..950c4d5 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_mod.dir/DependInfo.cmake @@ -0,0 +1,29 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/src/fsk_mod.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/fsk_mod.dir/fsk_mod.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "GIT_HASH=\"df2ed16c\"" + "_GNU_SOURCE=1" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/DependInfo.cmake" + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_mod.dir/build.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_mod.dir/build.make new file mode 100644 index 0000000..f2e1f85 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_mod.dir/build.make @@ -0,0 +1,99 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include src/CMakeFiles/fsk_mod.dir/depend.make + +# Include the progress variables for this target. +include src/CMakeFiles/fsk_mod.dir/progress.make + +# Include the compile flags for this target's objects. +include src/CMakeFiles/fsk_mod.dir/flags.make + +src/CMakeFiles/fsk_mod.dir/fsk_mod.c.o: src/CMakeFiles/fsk_mod.dir/flags.make +src/CMakeFiles/fsk_mod.dir/fsk_mod.c.o: ../src/fsk_mod.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object src/CMakeFiles/fsk_mod.dir/fsk_mod.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/fsk_mod.dir/fsk_mod.c.o -c /home/sh/Downloads/hackrf/codec2/src/fsk_mod.c + +src/CMakeFiles/fsk_mod.dir/fsk_mod.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/fsk_mod.dir/fsk_mod.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/fsk_mod.c > CMakeFiles/fsk_mod.dir/fsk_mod.c.i + +src/CMakeFiles/fsk_mod.dir/fsk_mod.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/fsk_mod.dir/fsk_mod.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/fsk_mod.c -o CMakeFiles/fsk_mod.dir/fsk_mod.c.s + +# Object files for target fsk_mod +fsk_mod_OBJECTS = \ +"CMakeFiles/fsk_mod.dir/fsk_mod.c.o" + +# External object files for target fsk_mod +fsk_mod_EXTERNAL_OBJECTS = + +src/fsk_mod: src/CMakeFiles/fsk_mod.dir/fsk_mod.c.o +src/fsk_mod: src/CMakeFiles/fsk_mod.dir/build.make +src/fsk_mod: src/libcodec2.so.0.9 +src/fsk_mod: src/CMakeFiles/fsk_mod.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking C executable fsk_mod" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/fsk_mod.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +src/CMakeFiles/fsk_mod.dir/build: src/fsk_mod + +.PHONY : src/CMakeFiles/fsk_mod.dir/build + +src/CMakeFiles/fsk_mod.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -P CMakeFiles/fsk_mod.dir/cmake_clean.cmake +.PHONY : src/CMakeFiles/fsk_mod.dir/clean + +src/CMakeFiles/fsk_mod.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/src /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/src /home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/fsk_mod.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : src/CMakeFiles/fsk_mod.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_mod.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_mod.dir/cmake_clean.cmake new file mode 100644 index 0000000..4f16eba --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_mod.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +file(REMOVE_RECURSE + "CMakeFiles/fsk_mod.dir/fsk_mod.c.o" + "fsk_mod.pdb" + "fsk_mod" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/fsk_mod.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_mod.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_mod.dir/depend.internal new file mode 100644 index 0000000..982949a --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_mod.dir/depend.internal @@ -0,0 +1,11 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/fsk_mod.dir/fsk_mod.c.o + /home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/fsk.h + /home/sh/Downloads/hackrf/codec2/src/fsk_mod.c + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h + /home/sh/Downloads/hackrf/codec2/src/modem_stats.h diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_mod.dir/depend.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_mod.dir/depend.make new file mode 100644 index 0000000..f837195 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_mod.dir/depend.make @@ -0,0 +1,11 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/fsk_mod.dir/fsk_mod.c.o: ../src/codec2_fdmdv.h +src/CMakeFiles/fsk_mod.dir/fsk_mod.c.o: ../src/comp.h +src/CMakeFiles/fsk_mod.dir/fsk_mod.c.o: ../src/fsk.h +src/CMakeFiles/fsk_mod.dir/fsk_mod.c.o: ../src/fsk_mod.c +src/CMakeFiles/fsk_mod.dir/fsk_mod.c.o: ../src/kiss_fft.h +src/CMakeFiles/fsk_mod.dir/fsk_mod.c.o: ../src/kiss_fftr.h +src/CMakeFiles/fsk_mod.dir/fsk_mod.c.o: ../src/modem_stats.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_mod.dir/flags.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_mod.dir/flags.make new file mode 100644 index 0000000..814242c --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_mod.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DGIT_HASH=\"df2ed16c\" -D_GNU_SOURCE=1 + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/src + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_mod.dir/fsk_mod.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_mod.dir/fsk_mod.c.o new file mode 100644 index 0000000..278c2af Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_mod.dir/fsk_mod.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_mod.dir/link.txt b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_mod.dir/link.txt new file mode 100644 index 0000000..0aae8da --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_mod.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/fsk_mod.dir/fsk_mod.c.o -o fsk_mod -Wl,-rpath,/home/sh/Downloads/hackrf/codec2/build_linux/src -lm libcodec2.so.0.9 -lm diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_mod.dir/progress.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_mod.dir/progress.make new file mode 100644 index 0000000..6c287f1 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_mod.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = +CMAKE_PROGRESS_2 = + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_mod_ext_vco.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_mod_ext_vco.dir/C.includecache new file mode 100644 index 0000000..8e54ca9 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_mod_ext_vco.dir/C.includecache @@ -0,0 +1,8 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_mod_ext_vco.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_mod_ext_vco.dir/DependInfo.cmake new file mode 100644 index 0000000..b5b1254 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_mod_ext_vco.dir/DependInfo.cmake @@ -0,0 +1,28 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/src/fsk_mod_ext_vco.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/fsk_mod_ext_vco.dir/fsk_mod_ext_vco.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "GIT_HASH=\"df2ed16c\"" + "_GNU_SOURCE=1" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_mod_ext_vco.dir/build.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_mod_ext_vco.dir/build.make new file mode 100644 index 0000000..79e43a3 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_mod_ext_vco.dir/build.make @@ -0,0 +1,98 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include src/CMakeFiles/fsk_mod_ext_vco.dir/depend.make + +# Include the progress variables for this target. +include src/CMakeFiles/fsk_mod_ext_vco.dir/progress.make + +# Include the compile flags for this target's objects. +include src/CMakeFiles/fsk_mod_ext_vco.dir/flags.make + +src/CMakeFiles/fsk_mod_ext_vco.dir/fsk_mod_ext_vco.c.o: src/CMakeFiles/fsk_mod_ext_vco.dir/flags.make +src/CMakeFiles/fsk_mod_ext_vco.dir/fsk_mod_ext_vco.c.o: ../src/fsk_mod_ext_vco.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object src/CMakeFiles/fsk_mod_ext_vco.dir/fsk_mod_ext_vco.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/fsk_mod_ext_vco.dir/fsk_mod_ext_vco.c.o -c /home/sh/Downloads/hackrf/codec2/src/fsk_mod_ext_vco.c + +src/CMakeFiles/fsk_mod_ext_vco.dir/fsk_mod_ext_vco.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/fsk_mod_ext_vco.dir/fsk_mod_ext_vco.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/fsk_mod_ext_vco.c > CMakeFiles/fsk_mod_ext_vco.dir/fsk_mod_ext_vco.c.i + +src/CMakeFiles/fsk_mod_ext_vco.dir/fsk_mod_ext_vco.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/fsk_mod_ext_vco.dir/fsk_mod_ext_vco.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/fsk_mod_ext_vco.c -o CMakeFiles/fsk_mod_ext_vco.dir/fsk_mod_ext_vco.c.s + +# Object files for target fsk_mod_ext_vco +fsk_mod_ext_vco_OBJECTS = \ +"CMakeFiles/fsk_mod_ext_vco.dir/fsk_mod_ext_vco.c.o" + +# External object files for target fsk_mod_ext_vco +fsk_mod_ext_vco_EXTERNAL_OBJECTS = + +src/fsk_mod_ext_vco: src/CMakeFiles/fsk_mod_ext_vco.dir/fsk_mod_ext_vco.c.o +src/fsk_mod_ext_vco: src/CMakeFiles/fsk_mod_ext_vco.dir/build.make +src/fsk_mod_ext_vco: src/CMakeFiles/fsk_mod_ext_vco.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking C executable fsk_mod_ext_vco" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/fsk_mod_ext_vco.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +src/CMakeFiles/fsk_mod_ext_vco.dir/build: src/fsk_mod_ext_vco + +.PHONY : src/CMakeFiles/fsk_mod_ext_vco.dir/build + +src/CMakeFiles/fsk_mod_ext_vco.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -P CMakeFiles/fsk_mod_ext_vco.dir/cmake_clean.cmake +.PHONY : src/CMakeFiles/fsk_mod_ext_vco.dir/clean + +src/CMakeFiles/fsk_mod_ext_vco.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/src /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/src /home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/fsk_mod_ext_vco.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : src/CMakeFiles/fsk_mod_ext_vco.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_mod_ext_vco.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_mod_ext_vco.dir/cmake_clean.cmake new file mode 100644 index 0000000..6b6d874 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_mod_ext_vco.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +file(REMOVE_RECURSE + "CMakeFiles/fsk_mod_ext_vco.dir/fsk_mod_ext_vco.c.o" + "fsk_mod_ext_vco.pdb" + "fsk_mod_ext_vco" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/fsk_mod_ext_vco.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_mod_ext_vco.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_mod_ext_vco.dir/depend.internal new file mode 100644 index 0000000..0fa5e36 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_mod_ext_vco.dir/depend.internal @@ -0,0 +1,5 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/fsk_mod_ext_vco.dir/fsk_mod_ext_vco.c.o + /home/sh/Downloads/hackrf/codec2/src/fsk_mod_ext_vco.c diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_mod_ext_vco.dir/depend.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_mod_ext_vco.dir/depend.make new file mode 100644 index 0000000..6880fcf --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_mod_ext_vco.dir/depend.make @@ -0,0 +1,5 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/fsk_mod_ext_vco.dir/fsk_mod_ext_vco.c.o: ../src/fsk_mod_ext_vco.c + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_mod_ext_vco.dir/flags.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_mod_ext_vco.dir/flags.make new file mode 100644 index 0000000..814242c --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_mod_ext_vco.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DGIT_HASH=\"df2ed16c\" -D_GNU_SOURCE=1 + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/src + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_mod_ext_vco.dir/fsk_mod_ext_vco.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_mod_ext_vco.dir/fsk_mod_ext_vco.c.o new file mode 100644 index 0000000..d3bf423 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_mod_ext_vco.dir/fsk_mod_ext_vco.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_mod_ext_vco.dir/link.txt b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_mod_ext_vco.dir/link.txt new file mode 100644 index 0000000..3e9ab7a --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_mod_ext_vco.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/fsk_mod_ext_vco.dir/fsk_mod_ext_vco.c.o -o fsk_mod_ext_vco -lm -lm diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_mod_ext_vco.dir/progress.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_mod_ext_vco.dir/progress.make new file mode 100644 index 0000000..6bcc885 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_mod_ext_vco.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = 54 +CMAKE_PROGRESS_2 = + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_put_test_bits.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_put_test_bits.dir/C.includecache new file mode 100644 index 0000000..a5da62a --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_put_test_bits.dir/C.includecache @@ -0,0 +1,54 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/fsk.h +stdint.h +- +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +kiss_fftr.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h +modem_stats.h +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h + +/home/sh/Downloads/hackrf/codec2/src/fsk_put_test_bits.c +stdio.h +- +string.h +- +getopt.h +- +fsk.h +/home/sh/Downloads/hackrf/codec2/src/fsk.h + +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h +stdlib.h +- +stdio.h +- +math.h +- +string.h +- +xmmintrin.h +- +sys/types.h +- + +/home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_put_test_bits.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_put_test_bits.dir/DependInfo.cmake new file mode 100644 index 0000000..c23397c --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_put_test_bits.dir/DependInfo.cmake @@ -0,0 +1,29 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/src/fsk_put_test_bits.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/fsk_put_test_bits.dir/fsk_put_test_bits.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "GIT_HASH=\"df2ed16c\"" + "_GNU_SOURCE=1" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/DependInfo.cmake" + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_put_test_bits.dir/build.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_put_test_bits.dir/build.make new file mode 100644 index 0000000..7d3510c --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_put_test_bits.dir/build.make @@ -0,0 +1,99 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include src/CMakeFiles/fsk_put_test_bits.dir/depend.make + +# Include the progress variables for this target. +include src/CMakeFiles/fsk_put_test_bits.dir/progress.make + +# Include the compile flags for this target's objects. +include src/CMakeFiles/fsk_put_test_bits.dir/flags.make + +src/CMakeFiles/fsk_put_test_bits.dir/fsk_put_test_bits.c.o: src/CMakeFiles/fsk_put_test_bits.dir/flags.make +src/CMakeFiles/fsk_put_test_bits.dir/fsk_put_test_bits.c.o: ../src/fsk_put_test_bits.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object src/CMakeFiles/fsk_put_test_bits.dir/fsk_put_test_bits.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/fsk_put_test_bits.dir/fsk_put_test_bits.c.o -c /home/sh/Downloads/hackrf/codec2/src/fsk_put_test_bits.c + +src/CMakeFiles/fsk_put_test_bits.dir/fsk_put_test_bits.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/fsk_put_test_bits.dir/fsk_put_test_bits.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/fsk_put_test_bits.c > CMakeFiles/fsk_put_test_bits.dir/fsk_put_test_bits.c.i + +src/CMakeFiles/fsk_put_test_bits.dir/fsk_put_test_bits.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/fsk_put_test_bits.dir/fsk_put_test_bits.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/fsk_put_test_bits.c -o CMakeFiles/fsk_put_test_bits.dir/fsk_put_test_bits.c.s + +# Object files for target fsk_put_test_bits +fsk_put_test_bits_OBJECTS = \ +"CMakeFiles/fsk_put_test_bits.dir/fsk_put_test_bits.c.o" + +# External object files for target fsk_put_test_bits +fsk_put_test_bits_EXTERNAL_OBJECTS = + +src/fsk_put_test_bits: src/CMakeFiles/fsk_put_test_bits.dir/fsk_put_test_bits.c.o +src/fsk_put_test_bits: src/CMakeFiles/fsk_put_test_bits.dir/build.make +src/fsk_put_test_bits: src/libcodec2.so.0.9 +src/fsk_put_test_bits: src/CMakeFiles/fsk_put_test_bits.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking C executable fsk_put_test_bits" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/fsk_put_test_bits.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +src/CMakeFiles/fsk_put_test_bits.dir/build: src/fsk_put_test_bits + +.PHONY : src/CMakeFiles/fsk_put_test_bits.dir/build + +src/CMakeFiles/fsk_put_test_bits.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -P CMakeFiles/fsk_put_test_bits.dir/cmake_clean.cmake +.PHONY : src/CMakeFiles/fsk_put_test_bits.dir/clean + +src/CMakeFiles/fsk_put_test_bits.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/src /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/src /home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/fsk_put_test_bits.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : src/CMakeFiles/fsk_put_test_bits.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_put_test_bits.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_put_test_bits.dir/cmake_clean.cmake new file mode 100644 index 0000000..f98a2fe --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_put_test_bits.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +file(REMOVE_RECURSE + "CMakeFiles/fsk_put_test_bits.dir/fsk_put_test_bits.c.o" + "fsk_put_test_bits.pdb" + "fsk_put_test_bits" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/fsk_put_test_bits.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_put_test_bits.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_put_test_bits.dir/depend.internal new file mode 100644 index 0000000..b70e47d --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_put_test_bits.dir/depend.internal @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/fsk_put_test_bits.dir/fsk_put_test_bits.c.o + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/fsk.h + /home/sh/Downloads/hackrf/codec2/src/fsk_put_test_bits.c + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h + /home/sh/Downloads/hackrf/codec2/src/modem_stats.h diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_put_test_bits.dir/depend.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_put_test_bits.dir/depend.make new file mode 100644 index 0000000..bcdae10 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_put_test_bits.dir/depend.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/fsk_put_test_bits.dir/fsk_put_test_bits.c.o: ../src/comp.h +src/CMakeFiles/fsk_put_test_bits.dir/fsk_put_test_bits.c.o: ../src/fsk.h +src/CMakeFiles/fsk_put_test_bits.dir/fsk_put_test_bits.c.o: ../src/fsk_put_test_bits.c +src/CMakeFiles/fsk_put_test_bits.dir/fsk_put_test_bits.c.o: ../src/kiss_fft.h +src/CMakeFiles/fsk_put_test_bits.dir/fsk_put_test_bits.c.o: ../src/kiss_fftr.h +src/CMakeFiles/fsk_put_test_bits.dir/fsk_put_test_bits.c.o: ../src/modem_stats.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_put_test_bits.dir/flags.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_put_test_bits.dir/flags.make new file mode 100644 index 0000000..814242c --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_put_test_bits.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DGIT_HASH=\"df2ed16c\" -D_GNU_SOURCE=1 + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/src + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_put_test_bits.dir/fsk_put_test_bits.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_put_test_bits.dir/fsk_put_test_bits.c.o new file mode 100644 index 0000000..6fabb98 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_put_test_bits.dir/fsk_put_test_bits.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_put_test_bits.dir/link.txt b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_put_test_bits.dir/link.txt new file mode 100644 index 0000000..5ad5855 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_put_test_bits.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/fsk_put_test_bits.dir/fsk_put_test_bits.c.o -o fsk_put_test_bits -Wl,-rpath,/home/sh/Downloads/hackrf/codec2/build_linux/src -lm libcodec2.so.0.9 -lm diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_put_test_bits.dir/progress.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_put_test_bits.dir/progress.make new file mode 100644 index 0000000..3fab501 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/fsk_put_test_bits.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = +CMAKE_PROGRESS_2 = 55 + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/generate_codebook.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/generate_codebook.dir/C.includecache new file mode 100644 index 0000000..e57b3f5 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/generate_codebook.dir/C.includecache @@ -0,0 +1,18 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +/home/sh/Downloads/hackrf/codec2/src/generate_codebook.c +stdlib.h +- +stdio.h +- +ctype.h +- +math.h +- + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/generate_codebook.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/generate_codebook.dir/DependInfo.cmake new file mode 100644 index 0000000..b28a0a9 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/generate_codebook.dir/DependInfo.cmake @@ -0,0 +1,28 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/src/generate_codebook.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/generate_codebook.dir/generate_codebook.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "GIT_HASH=\"df2ed16c\"" + "_GNU_SOURCE=1" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/generate_codebook.dir/build.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/generate_codebook.dir/build.make new file mode 100644 index 0000000..5cc7274 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/generate_codebook.dir/build.make @@ -0,0 +1,98 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include src/CMakeFiles/generate_codebook.dir/depend.make + +# Include the progress variables for this target. +include src/CMakeFiles/generate_codebook.dir/progress.make + +# Include the compile flags for this target's objects. +include src/CMakeFiles/generate_codebook.dir/flags.make + +src/CMakeFiles/generate_codebook.dir/generate_codebook.c.o: src/CMakeFiles/generate_codebook.dir/flags.make +src/CMakeFiles/generate_codebook.dir/generate_codebook.c.o: ../src/generate_codebook.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object src/CMakeFiles/generate_codebook.dir/generate_codebook.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/generate_codebook.dir/generate_codebook.c.o -c /home/sh/Downloads/hackrf/codec2/src/generate_codebook.c + +src/CMakeFiles/generate_codebook.dir/generate_codebook.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/generate_codebook.dir/generate_codebook.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/generate_codebook.c > CMakeFiles/generate_codebook.dir/generate_codebook.c.i + +src/CMakeFiles/generate_codebook.dir/generate_codebook.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/generate_codebook.dir/generate_codebook.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/generate_codebook.c -o CMakeFiles/generate_codebook.dir/generate_codebook.c.s + +# Object files for target generate_codebook +generate_codebook_OBJECTS = \ +"CMakeFiles/generate_codebook.dir/generate_codebook.c.o" + +# External object files for target generate_codebook +generate_codebook_EXTERNAL_OBJECTS = + +src/generate_codebook: src/CMakeFiles/generate_codebook.dir/generate_codebook.c.o +src/generate_codebook: src/CMakeFiles/generate_codebook.dir/build.make +src/generate_codebook: src/CMakeFiles/generate_codebook.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking C executable generate_codebook" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/generate_codebook.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +src/CMakeFiles/generate_codebook.dir/build: src/generate_codebook + +.PHONY : src/CMakeFiles/generate_codebook.dir/build + +src/CMakeFiles/generate_codebook.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -P CMakeFiles/generate_codebook.dir/cmake_clean.cmake +.PHONY : src/CMakeFiles/generate_codebook.dir/clean + +src/CMakeFiles/generate_codebook.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/src /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/src /home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/generate_codebook.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : src/CMakeFiles/generate_codebook.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/generate_codebook.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/generate_codebook.dir/cmake_clean.cmake new file mode 100644 index 0000000..876dfa2 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/generate_codebook.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +file(REMOVE_RECURSE + "CMakeFiles/generate_codebook.dir/generate_codebook.c.o" + "generate_codebook.pdb" + "generate_codebook" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/generate_codebook.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/generate_codebook.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/generate_codebook.dir/depend.internal new file mode 100644 index 0000000..9b9fc09 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/generate_codebook.dir/depend.internal @@ -0,0 +1,5 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/generate_codebook.dir/generate_codebook.c.o + /home/sh/Downloads/hackrf/codec2/src/generate_codebook.c diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/generate_codebook.dir/depend.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/generate_codebook.dir/depend.make new file mode 100644 index 0000000..9374a83 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/generate_codebook.dir/depend.make @@ -0,0 +1,5 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/generate_codebook.dir/generate_codebook.c.o: ../src/generate_codebook.c + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/generate_codebook.dir/flags.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/generate_codebook.dir/flags.make new file mode 100644 index 0000000..814242c --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/generate_codebook.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DGIT_HASH=\"df2ed16c\" -D_GNU_SOURCE=1 + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/src + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/generate_codebook.dir/generate_codebook.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/generate_codebook.dir/generate_codebook.c.o new file mode 100644 index 0000000..e3d4d1b Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/generate_codebook.dir/generate_codebook.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/generate_codebook.dir/link.txt b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/generate_codebook.dir/link.txt new file mode 100644 index 0000000..cf780b6 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/generate_codebook.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/generate_codebook.dir/generate_codebook.c.o -o generate_codebook -lm -lm diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/generate_codebook.dir/progress.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/generate_codebook.dir/progress.make new file mode 100644 index 0000000..d999701 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/generate_codebook.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = 56 +CMAKE_PROGRESS_2 = + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/horus_demod.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/horus_demod.dir/C.includecache new file mode 100644 index 0000000..4bad8f3 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/horus_demod.dir/C.includecache @@ -0,0 +1,164 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +/home/sh/Downloads/hackrf/codec2/src/_kiss_fft_guts.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h +limits.h +- +alloca.h +- + +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/comp_prim.h + +/home/sh/Downloads/hackrf/codec2/src/fsk.c +assert.h +- +stdlib.h +- +stdint.h +- +math.h +- +fsk.h +/home/sh/Downloads/hackrf/codec2/src/fsk.h +comp_prim.h +/home/sh/Downloads/hackrf/codec2/src/comp_prim.h +kiss_fftr.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h +modem_probe.h +/home/sh/Downloads/hackrf/codec2/src/modem_probe.h + +/home/sh/Downloads/hackrf/codec2/src/fsk.h +stdint.h +- +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +kiss_fftr.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h +modem_stats.h +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h + +/home/sh/Downloads/hackrf/codec2/src/golay23.c +assert.h +- +golayenctable.h +/home/sh/Downloads/hackrf/codec2/src/golayenctable.h +golaydectable.h +/home/sh/Downloads/hackrf/codec2/src/golaydectable.h +intrin.h +- +stdio.h +- +stdio.h +- +stdlib.h +- +memory.h +- + +/home/sh/Downloads/hackrf/codec2/src/golay23.h + +/home/sh/Downloads/hackrf/codec2/src/golaydectable.h + +/home/sh/Downloads/hackrf/codec2/src/golayenctable.h + +/home/sh/Downloads/hackrf/codec2/src/horus_api.c +assert.h +- +stdlib.h +- +stdio.h +- +horus_api.h +/home/sh/Downloads/hackrf/codec2/src/horus_api.h +fsk.h +/home/sh/Downloads/hackrf/codec2/src/fsk.h +horus_l2.h +/home/sh/Downloads/hackrf/codec2/src/horus_l2.h + +/home/sh/Downloads/hackrf/codec2/src/horus_api.h +stdint.h +- +modem_stats.h +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h + +/home/sh/Downloads/hackrf/codec2/src/horus_demod.c +assert.h +- +stdlib.h +- +stdio.h +- +getopt.h +- +horus_api.h +/home/sh/Downloads/hackrf/codec2/src/horus_api.h +fsk.h +/home/sh/Downloads/hackrf/codec2/src/fsk.h +horus_l2.h +/home/sh/Downloads/hackrf/codec2/src/horus_l2.h + +/home/sh/Downloads/hackrf/codec2/src/horus_l2.c +assert.h +- +stdio.h +- +stdlib.h +- +string.h +- +stdint.h +- +horus_l2.h +/home/sh/Downloads/hackrf/codec2/src/horus_l2.h +golay23.h +/home/sh/Downloads/hackrf/codec2/src/golay23.h + +/home/sh/Downloads/hackrf/codec2/src/horus_l2.h + +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.c +_kiss_fft_guts.h +/home/sh/Downloads/hackrf/codec2/src/_kiss_fft_guts.h + +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h +stdlib.h +- +stdio.h +- +math.h +- +string.h +- +xmmintrin.h +- +sys/types.h +- + +/home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/src/modem_probe.h +stdint.h +- +stdlib.h +- +complex.h +- +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/horus_demod.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/horus_demod.dir/DependInfo.cmake new file mode 100644 index 0000000..82e7149 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/horus_demod.dir/DependInfo.cmake @@ -0,0 +1,36 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/src/fsk.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/horus_demod.dir/fsk.c.o" + "/home/sh/Downloads/hackrf/codec2/src/golay23.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/horus_demod.dir/golay23.c.o" + "/home/sh/Downloads/hackrf/codec2/src/horus_api.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/horus_demod.dir/horus_api.c.o" + "/home/sh/Downloads/hackrf/codec2/src/horus_demod.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/horus_demod.dir/horus_demod.c.o" + "/home/sh/Downloads/hackrf/codec2/src/horus_l2.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/horus_demod.dir/horus_l2.c.o" + "/home/sh/Downloads/hackrf/codec2/src/kiss_fft.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/horus_demod.dir/kiss_fft.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "HORUS_L2_RX" + "INTERLEAVER" + "RUN_TIME_TABLES" + "SCRAMBLER" + "_GNU_SOURCE=1" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/horus_demod.dir/build.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/horus_demod.dir/build.make new file mode 100644 index 0000000..3ece768 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/horus_demod.dir/build.make @@ -0,0 +1,173 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include src/CMakeFiles/horus_demod.dir/depend.make + +# Include the progress variables for this target. +include src/CMakeFiles/horus_demod.dir/progress.make + +# Include the compile flags for this target's objects. +include src/CMakeFiles/horus_demod.dir/flags.make + +src/CMakeFiles/horus_demod.dir/horus_demod.c.o: src/CMakeFiles/horus_demod.dir/flags.make +src/CMakeFiles/horus_demod.dir/horus_demod.c.o: ../src/horus_demod.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object src/CMakeFiles/horus_demod.dir/horus_demod.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/horus_demod.dir/horus_demod.c.o -c /home/sh/Downloads/hackrf/codec2/src/horus_demod.c + +src/CMakeFiles/horus_demod.dir/horus_demod.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/horus_demod.dir/horus_demod.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/horus_demod.c > CMakeFiles/horus_demod.dir/horus_demod.c.i + +src/CMakeFiles/horus_demod.dir/horus_demod.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/horus_demod.dir/horus_demod.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/horus_demod.c -o CMakeFiles/horus_demod.dir/horus_demod.c.s + +src/CMakeFiles/horus_demod.dir/horus_api.c.o: src/CMakeFiles/horus_demod.dir/flags.make +src/CMakeFiles/horus_demod.dir/horus_api.c.o: ../src/horus_api.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Building C object src/CMakeFiles/horus_demod.dir/horus_api.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/horus_demod.dir/horus_api.c.o -c /home/sh/Downloads/hackrf/codec2/src/horus_api.c + +src/CMakeFiles/horus_demod.dir/horus_api.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/horus_demod.dir/horus_api.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/horus_api.c > CMakeFiles/horus_demod.dir/horus_api.c.i + +src/CMakeFiles/horus_demod.dir/horus_api.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/horus_demod.dir/horus_api.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/horus_api.c -o CMakeFiles/horus_demod.dir/horus_api.c.s + +src/CMakeFiles/horus_demod.dir/horus_l2.c.o: src/CMakeFiles/horus_demod.dir/flags.make +src/CMakeFiles/horus_demod.dir/horus_l2.c.o: ../src/horus_l2.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_3) "Building C object src/CMakeFiles/horus_demod.dir/horus_l2.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/horus_demod.dir/horus_l2.c.o -c /home/sh/Downloads/hackrf/codec2/src/horus_l2.c + +src/CMakeFiles/horus_demod.dir/horus_l2.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/horus_demod.dir/horus_l2.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/horus_l2.c > CMakeFiles/horus_demod.dir/horus_l2.c.i + +src/CMakeFiles/horus_demod.dir/horus_l2.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/horus_demod.dir/horus_l2.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/horus_l2.c -o CMakeFiles/horus_demod.dir/horus_l2.c.s + +src/CMakeFiles/horus_demod.dir/golay23.c.o: src/CMakeFiles/horus_demod.dir/flags.make +src/CMakeFiles/horus_demod.dir/golay23.c.o: ../src/golay23.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_4) "Building C object src/CMakeFiles/horus_demod.dir/golay23.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/horus_demod.dir/golay23.c.o -c /home/sh/Downloads/hackrf/codec2/src/golay23.c + +src/CMakeFiles/horus_demod.dir/golay23.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/horus_demod.dir/golay23.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/golay23.c > CMakeFiles/horus_demod.dir/golay23.c.i + +src/CMakeFiles/horus_demod.dir/golay23.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/horus_demod.dir/golay23.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/golay23.c -o CMakeFiles/horus_demod.dir/golay23.c.s + +src/CMakeFiles/horus_demod.dir/fsk.c.o: src/CMakeFiles/horus_demod.dir/flags.make +src/CMakeFiles/horus_demod.dir/fsk.c.o: ../src/fsk.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_5) "Building C object src/CMakeFiles/horus_demod.dir/fsk.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/horus_demod.dir/fsk.c.o -c /home/sh/Downloads/hackrf/codec2/src/fsk.c + +src/CMakeFiles/horus_demod.dir/fsk.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/horus_demod.dir/fsk.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/fsk.c > CMakeFiles/horus_demod.dir/fsk.c.i + +src/CMakeFiles/horus_demod.dir/fsk.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/horus_demod.dir/fsk.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/fsk.c -o CMakeFiles/horus_demod.dir/fsk.c.s + +src/CMakeFiles/horus_demod.dir/kiss_fft.c.o: src/CMakeFiles/horus_demod.dir/flags.make +src/CMakeFiles/horus_demod.dir/kiss_fft.c.o: ../src/kiss_fft.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_6) "Building C object src/CMakeFiles/horus_demod.dir/kiss_fft.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/horus_demod.dir/kiss_fft.c.o -c /home/sh/Downloads/hackrf/codec2/src/kiss_fft.c + +src/CMakeFiles/horus_demod.dir/kiss_fft.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/horus_demod.dir/kiss_fft.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/kiss_fft.c > CMakeFiles/horus_demod.dir/kiss_fft.c.i + +src/CMakeFiles/horus_demod.dir/kiss_fft.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/horus_demod.dir/kiss_fft.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/kiss_fft.c -o CMakeFiles/horus_demod.dir/kiss_fft.c.s + +# Object files for target horus_demod +horus_demod_OBJECTS = \ +"CMakeFiles/horus_demod.dir/horus_demod.c.o" \ +"CMakeFiles/horus_demod.dir/horus_api.c.o" \ +"CMakeFiles/horus_demod.dir/horus_l2.c.o" \ +"CMakeFiles/horus_demod.dir/golay23.c.o" \ +"CMakeFiles/horus_demod.dir/fsk.c.o" \ +"CMakeFiles/horus_demod.dir/kiss_fft.c.o" + +# External object files for target horus_demod +horus_demod_EXTERNAL_OBJECTS = + +src/horus_demod: src/CMakeFiles/horus_demod.dir/horus_demod.c.o +src/horus_demod: src/CMakeFiles/horus_demod.dir/horus_api.c.o +src/horus_demod: src/CMakeFiles/horus_demod.dir/horus_l2.c.o +src/horus_demod: src/CMakeFiles/horus_demod.dir/golay23.c.o +src/horus_demod: src/CMakeFiles/horus_demod.dir/fsk.c.o +src/horus_demod: src/CMakeFiles/horus_demod.dir/kiss_fft.c.o +src/horus_demod: src/CMakeFiles/horus_demod.dir/build.make +src/horus_demod: src/CMakeFiles/horus_demod.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_7) "Linking C executable horus_demod" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/horus_demod.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +src/CMakeFiles/horus_demod.dir/build: src/horus_demod + +.PHONY : src/CMakeFiles/horus_demod.dir/build + +src/CMakeFiles/horus_demod.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -P CMakeFiles/horus_demod.dir/cmake_clean.cmake +.PHONY : src/CMakeFiles/horus_demod.dir/clean + +src/CMakeFiles/horus_demod.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/src /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/src /home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/horus_demod.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : src/CMakeFiles/horus_demod.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/horus_demod.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/horus_demod.dir/cmake_clean.cmake new file mode 100644 index 0000000..61cc428 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/horus_demod.dir/cmake_clean.cmake @@ -0,0 +1,15 @@ +file(REMOVE_RECURSE + "CMakeFiles/horus_demod.dir/horus_demod.c.o" + "CMakeFiles/horus_demod.dir/horus_api.c.o" + "CMakeFiles/horus_demod.dir/horus_l2.c.o" + "CMakeFiles/horus_demod.dir/golay23.c.o" + "CMakeFiles/horus_demod.dir/fsk.c.o" + "CMakeFiles/horus_demod.dir/kiss_fft.c.o" + "horus_demod.pdb" + "horus_demod" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/horus_demod.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/horus_demod.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/horus_demod.dir/depend.internal new file mode 100644 index 0000000..ecbf73b --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/horus_demod.dir/depend.internal @@ -0,0 +1,42 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/horus_demod.dir/fsk.c.o + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/comp_prim.h + /home/sh/Downloads/hackrf/codec2/src/fsk.c + /home/sh/Downloads/hackrf/codec2/src/fsk.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h + /home/sh/Downloads/hackrf/codec2/src/modem_probe.h + /home/sh/Downloads/hackrf/codec2/src/modem_stats.h +src/CMakeFiles/horus_demod.dir/golay23.c.o + /home/sh/Downloads/hackrf/codec2/src/golay23.c + /home/sh/Downloads/hackrf/codec2/src/golaydectable.h + /home/sh/Downloads/hackrf/codec2/src/golayenctable.h +src/CMakeFiles/horus_demod.dir/horus_api.c.o + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/fsk.h + /home/sh/Downloads/hackrf/codec2/src/horus_api.c + /home/sh/Downloads/hackrf/codec2/src/horus_api.h + /home/sh/Downloads/hackrf/codec2/src/horus_l2.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h + /home/sh/Downloads/hackrf/codec2/src/modem_stats.h +src/CMakeFiles/horus_demod.dir/horus_demod.c.o + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/fsk.h + /home/sh/Downloads/hackrf/codec2/src/horus_api.h + /home/sh/Downloads/hackrf/codec2/src/horus_demod.c + /home/sh/Downloads/hackrf/codec2/src/horus_l2.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h + /home/sh/Downloads/hackrf/codec2/src/modem_stats.h +src/CMakeFiles/horus_demod.dir/horus_l2.c.o + /home/sh/Downloads/hackrf/codec2/src/golay23.h + /home/sh/Downloads/hackrf/codec2/src/horus_l2.c + /home/sh/Downloads/hackrf/codec2/src/horus_l2.h +src/CMakeFiles/horus_demod.dir/kiss_fft.c.o + /home/sh/Downloads/hackrf/codec2/src/_kiss_fft_guts.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.c + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/horus_demod.dir/depend.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/horus_demod.dir/depend.make new file mode 100644 index 0000000..1fb0213 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/horus_demod.dir/depend.make @@ -0,0 +1,42 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/horus_demod.dir/fsk.c.o: ../src/comp.h +src/CMakeFiles/horus_demod.dir/fsk.c.o: ../src/comp_prim.h +src/CMakeFiles/horus_demod.dir/fsk.c.o: ../src/fsk.c +src/CMakeFiles/horus_demod.dir/fsk.c.o: ../src/fsk.h +src/CMakeFiles/horus_demod.dir/fsk.c.o: ../src/kiss_fft.h +src/CMakeFiles/horus_demod.dir/fsk.c.o: ../src/kiss_fftr.h +src/CMakeFiles/horus_demod.dir/fsk.c.o: ../src/modem_probe.h +src/CMakeFiles/horus_demod.dir/fsk.c.o: ../src/modem_stats.h + +src/CMakeFiles/horus_demod.dir/golay23.c.o: ../src/golay23.c +src/CMakeFiles/horus_demod.dir/golay23.c.o: ../src/golaydectable.h +src/CMakeFiles/horus_demod.dir/golay23.c.o: ../src/golayenctable.h + +src/CMakeFiles/horus_demod.dir/horus_api.c.o: ../src/comp.h +src/CMakeFiles/horus_demod.dir/horus_api.c.o: ../src/fsk.h +src/CMakeFiles/horus_demod.dir/horus_api.c.o: ../src/horus_api.c +src/CMakeFiles/horus_demod.dir/horus_api.c.o: ../src/horus_api.h +src/CMakeFiles/horus_demod.dir/horus_api.c.o: ../src/horus_l2.h +src/CMakeFiles/horus_demod.dir/horus_api.c.o: ../src/kiss_fft.h +src/CMakeFiles/horus_demod.dir/horus_api.c.o: ../src/kiss_fftr.h +src/CMakeFiles/horus_demod.dir/horus_api.c.o: ../src/modem_stats.h + +src/CMakeFiles/horus_demod.dir/horus_demod.c.o: ../src/comp.h +src/CMakeFiles/horus_demod.dir/horus_demod.c.o: ../src/fsk.h +src/CMakeFiles/horus_demod.dir/horus_demod.c.o: ../src/horus_api.h +src/CMakeFiles/horus_demod.dir/horus_demod.c.o: ../src/horus_demod.c +src/CMakeFiles/horus_demod.dir/horus_demod.c.o: ../src/horus_l2.h +src/CMakeFiles/horus_demod.dir/horus_demod.c.o: ../src/kiss_fft.h +src/CMakeFiles/horus_demod.dir/horus_demod.c.o: ../src/kiss_fftr.h +src/CMakeFiles/horus_demod.dir/horus_demod.c.o: ../src/modem_stats.h + +src/CMakeFiles/horus_demod.dir/horus_l2.c.o: ../src/golay23.h +src/CMakeFiles/horus_demod.dir/horus_l2.c.o: ../src/horus_l2.c +src/CMakeFiles/horus_demod.dir/horus_l2.c.o: ../src/horus_l2.h + +src/CMakeFiles/horus_demod.dir/kiss_fft.c.o: ../src/_kiss_fft_guts.h +src/CMakeFiles/horus_demod.dir/kiss_fft.c.o: ../src/kiss_fft.c +src/CMakeFiles/horus_demod.dir/kiss_fft.c.o: ../src/kiss_fft.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/horus_demod.dir/flags.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/horus_demod.dir/flags.make new file mode 100644 index 0000000..943f794 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/horus_demod.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 + +C_DEFINES = -DHORUS_L2_RX -DINTERLEAVER -DRUN_TIME_TABLES -DSCRAMBLER -D_GNU_SOURCE=1 + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/src + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/horus_demod.dir/fsk.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/horus_demod.dir/fsk.c.o new file mode 100644 index 0000000..e005392 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/horus_demod.dir/fsk.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/horus_demod.dir/golay23.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/horus_demod.dir/golay23.c.o new file mode 100644 index 0000000..7528f9a Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/horus_demod.dir/golay23.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/horus_demod.dir/horus_api.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/horus_demod.dir/horus_api.c.o new file mode 100644 index 0000000..ce60435 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/horus_demod.dir/horus_api.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/horus_demod.dir/horus_demod.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/horus_demod.dir/horus_demod.c.o new file mode 100644 index 0000000..307f302 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/horus_demod.dir/horus_demod.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/horus_demod.dir/horus_l2.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/horus_demod.dir/horus_l2.c.o new file mode 100644 index 0000000..b237484 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/horus_demod.dir/horus_l2.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/horus_demod.dir/kiss_fft.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/horus_demod.dir/kiss_fft.c.o new file mode 100644 index 0000000..cf7c5c8 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/horus_demod.dir/kiss_fft.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/horus_demod.dir/link.txt b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/horus_demod.dir/link.txt new file mode 100644 index 0000000..27ab22c --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/horus_demod.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -rdynamic CMakeFiles/horus_demod.dir/horus_demod.c.o CMakeFiles/horus_demod.dir/horus_api.c.o CMakeFiles/horus_demod.dir/horus_l2.c.o CMakeFiles/horus_demod.dir/golay23.c.o CMakeFiles/horus_demod.dir/fsk.c.o CMakeFiles/horus_demod.dir/kiss_fft.c.o -o horus_demod -lm diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/horus_demod.dir/progress.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/horus_demod.dir/progress.make new file mode 100644 index 0000000..8284d90 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/horus_demod.dir/progress.make @@ -0,0 +1,8 @@ +CMAKE_PROGRESS_1 = 57 +CMAKE_PROGRESS_2 = +CMAKE_PROGRESS_3 = 58 +CMAKE_PROGRESS_4 = +CMAKE_PROGRESS_5 = +CMAKE_PROGRESS_6 = 59 +CMAKE_PROGRESS_7 = + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/insert_errors.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/insert_errors.dir/C.includecache new file mode 100644 index 0000000..07babf0 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/insert_errors.dir/C.includecache @@ -0,0 +1,28 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +/home/sh/Downloads/hackrf/codec2/src/codec2.h +codec2/version.h +- + +/home/sh/Downloads/hackrf/codec2/src/insert_errors.c +codec2.h +/home/sh/Downloads/hackrf/codec2/src/codec2.h +assert.h +- +stdio.h +- +stdlib.h +- +string.h +- +errno.h +- + +codec2/version.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/insert_errors.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/insert_errors.dir/DependInfo.cmake new file mode 100644 index 0000000..ef0bf59 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/insert_errors.dir/DependInfo.cmake @@ -0,0 +1,28 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/src/insert_errors.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/insert_errors.dir/insert_errors.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "GIT_HASH=\"df2ed16c\"" + "_GNU_SOURCE=1" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/insert_errors.dir/build.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/insert_errors.dir/build.make new file mode 100644 index 0000000..01ebb21 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/insert_errors.dir/build.make @@ -0,0 +1,98 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include src/CMakeFiles/insert_errors.dir/depend.make + +# Include the progress variables for this target. +include src/CMakeFiles/insert_errors.dir/progress.make + +# Include the compile flags for this target's objects. +include src/CMakeFiles/insert_errors.dir/flags.make + +src/CMakeFiles/insert_errors.dir/insert_errors.c.o: src/CMakeFiles/insert_errors.dir/flags.make +src/CMakeFiles/insert_errors.dir/insert_errors.c.o: ../src/insert_errors.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object src/CMakeFiles/insert_errors.dir/insert_errors.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/insert_errors.dir/insert_errors.c.o -c /home/sh/Downloads/hackrf/codec2/src/insert_errors.c + +src/CMakeFiles/insert_errors.dir/insert_errors.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/insert_errors.dir/insert_errors.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/insert_errors.c > CMakeFiles/insert_errors.dir/insert_errors.c.i + +src/CMakeFiles/insert_errors.dir/insert_errors.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/insert_errors.dir/insert_errors.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/insert_errors.c -o CMakeFiles/insert_errors.dir/insert_errors.c.s + +# Object files for target insert_errors +insert_errors_OBJECTS = \ +"CMakeFiles/insert_errors.dir/insert_errors.c.o" + +# External object files for target insert_errors +insert_errors_EXTERNAL_OBJECTS = + +src/insert_errors: src/CMakeFiles/insert_errors.dir/insert_errors.c.o +src/insert_errors: src/CMakeFiles/insert_errors.dir/build.make +src/insert_errors: src/CMakeFiles/insert_errors.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking C executable insert_errors" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/insert_errors.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +src/CMakeFiles/insert_errors.dir/build: src/insert_errors + +.PHONY : src/CMakeFiles/insert_errors.dir/build + +src/CMakeFiles/insert_errors.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -P CMakeFiles/insert_errors.dir/cmake_clean.cmake +.PHONY : src/CMakeFiles/insert_errors.dir/clean + +src/CMakeFiles/insert_errors.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/src /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/src /home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/insert_errors.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : src/CMakeFiles/insert_errors.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/insert_errors.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/insert_errors.dir/cmake_clean.cmake new file mode 100644 index 0000000..0ccfc9f --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/insert_errors.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +file(REMOVE_RECURSE + "CMakeFiles/insert_errors.dir/insert_errors.c.o" + "insert_errors.pdb" + "insert_errors" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/insert_errors.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/insert_errors.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/insert_errors.dir/depend.internal new file mode 100644 index 0000000..bf3e54d --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/insert_errors.dir/depend.internal @@ -0,0 +1,7 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/insert_errors.dir/insert_errors.c.o + /home/sh/Downloads/hackrf/codec2/src/codec2.h + /home/sh/Downloads/hackrf/codec2/src/insert_errors.c + codec2/version.h diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/insert_errors.dir/depend.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/insert_errors.dir/depend.make new file mode 100644 index 0000000..18947ca --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/insert_errors.dir/depend.make @@ -0,0 +1,7 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/insert_errors.dir/insert_errors.c.o: ../src/codec2.h +src/CMakeFiles/insert_errors.dir/insert_errors.c.o: ../src/insert_errors.c +src/CMakeFiles/insert_errors.dir/insert_errors.c.o: codec2/version.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/insert_errors.dir/flags.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/insert_errors.dir/flags.make new file mode 100644 index 0000000..814242c --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/insert_errors.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DGIT_HASH=\"df2ed16c\" -D_GNU_SOURCE=1 + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/src + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/insert_errors.dir/insert_errors.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/insert_errors.dir/insert_errors.c.o new file mode 100644 index 0000000..5964310 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/insert_errors.dir/insert_errors.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/insert_errors.dir/link.txt b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/insert_errors.dir/link.txt new file mode 100644 index 0000000..18e6ab7 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/insert_errors.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/insert_errors.dir/insert_errors.c.o -o insert_errors -lm diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/insert_errors.dir/progress.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/insert_errors.dir/progress.make new file mode 100644 index 0000000..33a37e7 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/insert_errors.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = +CMAKE_PROGRESS_2 = 57 + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_dec.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_dec.dir/C.includecache new file mode 100644 index 0000000..dad8080 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_dec.dir/C.includecache @@ -0,0 +1,88 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +/home/sh/Downloads/hackrf/codec2/src/codec2_ofdm.h +stdbool.h +- +stdint.h +- +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +modem_stats.h +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h + +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/filter.h +complex.h +- + +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h +stdlib.h +- +stdio.h +- +math.h +- +string.h +- +xmmintrin.h +- +sys/types.h +- + +/home/sh/Downloads/hackrf/codec2/src/ldpc_codes.h +mpdecode_core.h +/home/sh/Downloads/hackrf/codec2/src/mpdecode_core.h + +/home/sh/Downloads/hackrf/codec2/src/ldpc_dec.c +assert.h +- +errno.h +- +math.h +- +stdlib.h +- +stdint.h +- +string.h +- +stdio.h +- +mpdecode_core.h +/home/sh/Downloads/hackrf/codec2/src/mpdecode_core.h +ldpc_codes.h +/home/sh/Downloads/hackrf/codec2/src/ldpc_codes.h +ofdm_internal.h +/home/sh/Downloads/hackrf/codec2/src/ofdm_internal.h + +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/src/mpdecode_core.h +stdint.h +- +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/ofdm_internal.h +complex.h +- +stdbool.h +- +stdint.h +- +codec2_ofdm.h +/home/sh/Downloads/hackrf/codec2/src/codec2_ofdm.h +filter.h +/home/sh/Downloads/hackrf/codec2/src/filter.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_dec.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_dec.dir/DependInfo.cmake new file mode 100644 index 0000000..d8c629a --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_dec.dir/DependInfo.cmake @@ -0,0 +1,29 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/src/ldpc_dec.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/ldpc_dec.dir/ldpc_dec.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "GIT_HASH=\"df2ed16c\"" + "_GNU_SOURCE=1" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/DependInfo.cmake" + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_dec.dir/build.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_dec.dir/build.make new file mode 100644 index 0000000..7b05603 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_dec.dir/build.make @@ -0,0 +1,99 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include src/CMakeFiles/ldpc_dec.dir/depend.make + +# Include the progress variables for this target. +include src/CMakeFiles/ldpc_dec.dir/progress.make + +# Include the compile flags for this target's objects. +include src/CMakeFiles/ldpc_dec.dir/flags.make + +src/CMakeFiles/ldpc_dec.dir/ldpc_dec.c.o: src/CMakeFiles/ldpc_dec.dir/flags.make +src/CMakeFiles/ldpc_dec.dir/ldpc_dec.c.o: ../src/ldpc_dec.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object src/CMakeFiles/ldpc_dec.dir/ldpc_dec.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/ldpc_dec.dir/ldpc_dec.c.o -c /home/sh/Downloads/hackrf/codec2/src/ldpc_dec.c + +src/CMakeFiles/ldpc_dec.dir/ldpc_dec.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/ldpc_dec.dir/ldpc_dec.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/ldpc_dec.c > CMakeFiles/ldpc_dec.dir/ldpc_dec.c.i + +src/CMakeFiles/ldpc_dec.dir/ldpc_dec.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/ldpc_dec.dir/ldpc_dec.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/ldpc_dec.c -o CMakeFiles/ldpc_dec.dir/ldpc_dec.c.s + +# Object files for target ldpc_dec +ldpc_dec_OBJECTS = \ +"CMakeFiles/ldpc_dec.dir/ldpc_dec.c.o" + +# External object files for target ldpc_dec +ldpc_dec_EXTERNAL_OBJECTS = + +src/ldpc_dec: src/CMakeFiles/ldpc_dec.dir/ldpc_dec.c.o +src/ldpc_dec: src/CMakeFiles/ldpc_dec.dir/build.make +src/ldpc_dec: src/libcodec2.so.0.9 +src/ldpc_dec: src/CMakeFiles/ldpc_dec.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking C executable ldpc_dec" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/ldpc_dec.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +src/CMakeFiles/ldpc_dec.dir/build: src/ldpc_dec + +.PHONY : src/CMakeFiles/ldpc_dec.dir/build + +src/CMakeFiles/ldpc_dec.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -P CMakeFiles/ldpc_dec.dir/cmake_clean.cmake +.PHONY : src/CMakeFiles/ldpc_dec.dir/clean + +src/CMakeFiles/ldpc_dec.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/src /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/src /home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/ldpc_dec.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : src/CMakeFiles/ldpc_dec.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_dec.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_dec.dir/cmake_clean.cmake new file mode 100644 index 0000000..5539eac --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_dec.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +file(REMOVE_RECURSE + "CMakeFiles/ldpc_dec.dir/ldpc_dec.c.o" + "ldpc_dec.pdb" + "ldpc_dec" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/ldpc_dec.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_dec.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_dec.dir/depend.internal new file mode 100644 index 0000000..f7b6f59 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_dec.dir/depend.internal @@ -0,0 +1,13 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/ldpc_dec.dir/ldpc_dec.c.o + /home/sh/Downloads/hackrf/codec2/src/codec2_ofdm.h + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/filter.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/ldpc_codes.h + /home/sh/Downloads/hackrf/codec2/src/ldpc_dec.c + /home/sh/Downloads/hackrf/codec2/src/modem_stats.h + /home/sh/Downloads/hackrf/codec2/src/mpdecode_core.h + /home/sh/Downloads/hackrf/codec2/src/ofdm_internal.h diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_dec.dir/depend.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_dec.dir/depend.make new file mode 100644 index 0000000..7c7f936 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_dec.dir/depend.make @@ -0,0 +1,13 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/ldpc_dec.dir/ldpc_dec.c.o: ../src/codec2_ofdm.h +src/CMakeFiles/ldpc_dec.dir/ldpc_dec.c.o: ../src/comp.h +src/CMakeFiles/ldpc_dec.dir/ldpc_dec.c.o: ../src/filter.h +src/CMakeFiles/ldpc_dec.dir/ldpc_dec.c.o: ../src/kiss_fft.h +src/CMakeFiles/ldpc_dec.dir/ldpc_dec.c.o: ../src/ldpc_codes.h +src/CMakeFiles/ldpc_dec.dir/ldpc_dec.c.o: ../src/ldpc_dec.c +src/CMakeFiles/ldpc_dec.dir/ldpc_dec.c.o: ../src/modem_stats.h +src/CMakeFiles/ldpc_dec.dir/ldpc_dec.c.o: ../src/mpdecode_core.h +src/CMakeFiles/ldpc_dec.dir/ldpc_dec.c.o: ../src/ofdm_internal.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_dec.dir/flags.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_dec.dir/flags.make new file mode 100644 index 0000000..814242c --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_dec.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DGIT_HASH=\"df2ed16c\" -D_GNU_SOURCE=1 + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/src + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_dec.dir/ldpc_dec.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_dec.dir/ldpc_dec.c.o new file mode 100644 index 0000000..5ea1cd8 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_dec.dir/ldpc_dec.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_dec.dir/link.txt b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_dec.dir/link.txt new file mode 100644 index 0000000..39bc347 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_dec.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/ldpc_dec.dir/ldpc_dec.c.o -o ldpc_dec -Wl,-rpath,/home/sh/Downloads/hackrf/codec2/build_linux/src -lm libcodec2.so.0.9 -lm diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_dec.dir/progress.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_dec.dir/progress.make new file mode 100644 index 0000000..6c287f1 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_dec.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = +CMAKE_PROGRESS_2 = + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_enc.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_enc.dir/C.includecache new file mode 100644 index 0000000..ce9bc60 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_enc.dir/C.includecache @@ -0,0 +1,84 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +/home/sh/Downloads/hackrf/codec2/src/codec2_ofdm.h +stdbool.h +- +stdint.h +- +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +modem_stats.h +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h + +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/filter.h +complex.h +- + +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h +stdlib.h +- +stdio.h +- +math.h +- +string.h +- +xmmintrin.h +- +sys/types.h +- + +/home/sh/Downloads/hackrf/codec2/src/ldpc_codes.h +mpdecode_core.h +/home/sh/Downloads/hackrf/codec2/src/mpdecode_core.h + +/home/sh/Downloads/hackrf/codec2/src/ldpc_enc.c +stdio.h +- +stdlib.h +- +stdint.h +- +string.h +- +errno.h +- +mpdecode_core.h +/home/sh/Downloads/hackrf/codec2/src/mpdecode_core.h +ldpc_codes.h +/home/sh/Downloads/hackrf/codec2/src/ldpc_codes.h +ofdm_internal.h +/home/sh/Downloads/hackrf/codec2/src/ofdm_internal.h + +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/src/mpdecode_core.h +stdint.h +- +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/ofdm_internal.h +complex.h +- +stdbool.h +- +stdint.h +- +codec2_ofdm.h +/home/sh/Downloads/hackrf/codec2/src/codec2_ofdm.h +filter.h +/home/sh/Downloads/hackrf/codec2/src/filter.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_enc.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_enc.dir/DependInfo.cmake new file mode 100644 index 0000000..eae3359 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_enc.dir/DependInfo.cmake @@ -0,0 +1,29 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/src/ldpc_enc.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/ldpc_enc.dir/ldpc_enc.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "GIT_HASH=\"df2ed16c\"" + "_GNU_SOURCE=1" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/DependInfo.cmake" + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_enc.dir/build.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_enc.dir/build.make new file mode 100644 index 0000000..f5c32a4 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_enc.dir/build.make @@ -0,0 +1,99 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include src/CMakeFiles/ldpc_enc.dir/depend.make + +# Include the progress variables for this target. +include src/CMakeFiles/ldpc_enc.dir/progress.make + +# Include the compile flags for this target's objects. +include src/CMakeFiles/ldpc_enc.dir/flags.make + +src/CMakeFiles/ldpc_enc.dir/ldpc_enc.c.o: src/CMakeFiles/ldpc_enc.dir/flags.make +src/CMakeFiles/ldpc_enc.dir/ldpc_enc.c.o: ../src/ldpc_enc.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object src/CMakeFiles/ldpc_enc.dir/ldpc_enc.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/ldpc_enc.dir/ldpc_enc.c.o -c /home/sh/Downloads/hackrf/codec2/src/ldpc_enc.c + +src/CMakeFiles/ldpc_enc.dir/ldpc_enc.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/ldpc_enc.dir/ldpc_enc.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/ldpc_enc.c > CMakeFiles/ldpc_enc.dir/ldpc_enc.c.i + +src/CMakeFiles/ldpc_enc.dir/ldpc_enc.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/ldpc_enc.dir/ldpc_enc.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/ldpc_enc.c -o CMakeFiles/ldpc_enc.dir/ldpc_enc.c.s + +# Object files for target ldpc_enc +ldpc_enc_OBJECTS = \ +"CMakeFiles/ldpc_enc.dir/ldpc_enc.c.o" + +# External object files for target ldpc_enc +ldpc_enc_EXTERNAL_OBJECTS = + +src/ldpc_enc: src/CMakeFiles/ldpc_enc.dir/ldpc_enc.c.o +src/ldpc_enc: src/CMakeFiles/ldpc_enc.dir/build.make +src/ldpc_enc: src/libcodec2.so.0.9 +src/ldpc_enc: src/CMakeFiles/ldpc_enc.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking C executable ldpc_enc" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/ldpc_enc.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +src/CMakeFiles/ldpc_enc.dir/build: src/ldpc_enc + +.PHONY : src/CMakeFiles/ldpc_enc.dir/build + +src/CMakeFiles/ldpc_enc.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -P CMakeFiles/ldpc_enc.dir/cmake_clean.cmake +.PHONY : src/CMakeFiles/ldpc_enc.dir/clean + +src/CMakeFiles/ldpc_enc.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/src /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/src /home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/ldpc_enc.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : src/CMakeFiles/ldpc_enc.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_enc.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_enc.dir/cmake_clean.cmake new file mode 100644 index 0000000..c25f1c5 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_enc.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +file(REMOVE_RECURSE + "CMakeFiles/ldpc_enc.dir/ldpc_enc.c.o" + "ldpc_enc.pdb" + "ldpc_enc" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/ldpc_enc.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_enc.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_enc.dir/depend.internal new file mode 100644 index 0000000..e64018e --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_enc.dir/depend.internal @@ -0,0 +1,13 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/ldpc_enc.dir/ldpc_enc.c.o + /home/sh/Downloads/hackrf/codec2/src/codec2_ofdm.h + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/filter.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/ldpc_codes.h + /home/sh/Downloads/hackrf/codec2/src/ldpc_enc.c + /home/sh/Downloads/hackrf/codec2/src/modem_stats.h + /home/sh/Downloads/hackrf/codec2/src/mpdecode_core.h + /home/sh/Downloads/hackrf/codec2/src/ofdm_internal.h diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_enc.dir/depend.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_enc.dir/depend.make new file mode 100644 index 0000000..5decb3c --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_enc.dir/depend.make @@ -0,0 +1,13 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/ldpc_enc.dir/ldpc_enc.c.o: ../src/codec2_ofdm.h +src/CMakeFiles/ldpc_enc.dir/ldpc_enc.c.o: ../src/comp.h +src/CMakeFiles/ldpc_enc.dir/ldpc_enc.c.o: ../src/filter.h +src/CMakeFiles/ldpc_enc.dir/ldpc_enc.c.o: ../src/kiss_fft.h +src/CMakeFiles/ldpc_enc.dir/ldpc_enc.c.o: ../src/ldpc_codes.h +src/CMakeFiles/ldpc_enc.dir/ldpc_enc.c.o: ../src/ldpc_enc.c +src/CMakeFiles/ldpc_enc.dir/ldpc_enc.c.o: ../src/modem_stats.h +src/CMakeFiles/ldpc_enc.dir/ldpc_enc.c.o: ../src/mpdecode_core.h +src/CMakeFiles/ldpc_enc.dir/ldpc_enc.c.o: ../src/ofdm_internal.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_enc.dir/flags.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_enc.dir/flags.make new file mode 100644 index 0000000..814242c --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_enc.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DGIT_HASH=\"df2ed16c\" -D_GNU_SOURCE=1 + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/src + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_enc.dir/ldpc_enc.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_enc.dir/ldpc_enc.c.o new file mode 100644 index 0000000..887282d Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_enc.dir/ldpc_enc.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_enc.dir/link.txt b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_enc.dir/link.txt new file mode 100644 index 0000000..6b1bd9f --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_enc.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/ldpc_enc.dir/ldpc_enc.c.o -o ldpc_enc -Wl,-rpath,/home/sh/Downloads/hackrf/codec2/build_linux/src -lm libcodec2.so.0.9 -lm diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_enc.dir/progress.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_enc.dir/progress.make new file mode 100644 index 0000000..b46bf58 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_enc.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = 58 +CMAKE_PROGRESS_2 = + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_noise.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_noise.dir/C.includecache new file mode 100644 index 0000000..e712936 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_noise.dir/C.includecache @@ -0,0 +1,22 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +/home/sh/Downloads/hackrf/codec2/src/ldpc_noise.c +stdio.h +- +stdlib.h +- +stdint.h +- +string.h +- +math.h +- +errno.h +- + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_noise.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_noise.dir/DependInfo.cmake new file mode 100644 index 0000000..a340384 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_noise.dir/DependInfo.cmake @@ -0,0 +1,28 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/src/ldpc_noise.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/ldpc_noise.dir/ldpc_noise.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "GIT_HASH=\"df2ed16c\"" + "_GNU_SOURCE=1" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_noise.dir/build.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_noise.dir/build.make new file mode 100644 index 0000000..33d96b9 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_noise.dir/build.make @@ -0,0 +1,98 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include src/CMakeFiles/ldpc_noise.dir/depend.make + +# Include the progress variables for this target. +include src/CMakeFiles/ldpc_noise.dir/progress.make + +# Include the compile flags for this target's objects. +include src/CMakeFiles/ldpc_noise.dir/flags.make + +src/CMakeFiles/ldpc_noise.dir/ldpc_noise.c.o: src/CMakeFiles/ldpc_noise.dir/flags.make +src/CMakeFiles/ldpc_noise.dir/ldpc_noise.c.o: ../src/ldpc_noise.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object src/CMakeFiles/ldpc_noise.dir/ldpc_noise.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/ldpc_noise.dir/ldpc_noise.c.o -c /home/sh/Downloads/hackrf/codec2/src/ldpc_noise.c + +src/CMakeFiles/ldpc_noise.dir/ldpc_noise.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/ldpc_noise.dir/ldpc_noise.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/ldpc_noise.c > CMakeFiles/ldpc_noise.dir/ldpc_noise.c.i + +src/CMakeFiles/ldpc_noise.dir/ldpc_noise.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/ldpc_noise.dir/ldpc_noise.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/ldpc_noise.c -o CMakeFiles/ldpc_noise.dir/ldpc_noise.c.s + +# Object files for target ldpc_noise +ldpc_noise_OBJECTS = \ +"CMakeFiles/ldpc_noise.dir/ldpc_noise.c.o" + +# External object files for target ldpc_noise +ldpc_noise_EXTERNAL_OBJECTS = + +src/ldpc_noise: src/CMakeFiles/ldpc_noise.dir/ldpc_noise.c.o +src/ldpc_noise: src/CMakeFiles/ldpc_noise.dir/build.make +src/ldpc_noise: src/CMakeFiles/ldpc_noise.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking C executable ldpc_noise" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/ldpc_noise.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +src/CMakeFiles/ldpc_noise.dir/build: src/ldpc_noise + +.PHONY : src/CMakeFiles/ldpc_noise.dir/build + +src/CMakeFiles/ldpc_noise.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -P CMakeFiles/ldpc_noise.dir/cmake_clean.cmake +.PHONY : src/CMakeFiles/ldpc_noise.dir/clean + +src/CMakeFiles/ldpc_noise.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/src /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/src /home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/ldpc_noise.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : src/CMakeFiles/ldpc_noise.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_noise.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_noise.dir/cmake_clean.cmake new file mode 100644 index 0000000..ed9c7e3 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_noise.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +file(REMOVE_RECURSE + "CMakeFiles/ldpc_noise.dir/ldpc_noise.c.o" + "ldpc_noise.pdb" + "ldpc_noise" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/ldpc_noise.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_noise.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_noise.dir/depend.internal new file mode 100644 index 0000000..ca236be --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_noise.dir/depend.internal @@ -0,0 +1,5 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/ldpc_noise.dir/ldpc_noise.c.o + /home/sh/Downloads/hackrf/codec2/src/ldpc_noise.c diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_noise.dir/depend.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_noise.dir/depend.make new file mode 100644 index 0000000..eef7059 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_noise.dir/depend.make @@ -0,0 +1,5 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/ldpc_noise.dir/ldpc_noise.c.o: ../src/ldpc_noise.c + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_noise.dir/flags.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_noise.dir/flags.make new file mode 100644 index 0000000..814242c --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_noise.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DGIT_HASH=\"df2ed16c\" -D_GNU_SOURCE=1 + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/src + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_noise.dir/ldpc_noise.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_noise.dir/ldpc_noise.c.o new file mode 100644 index 0000000..3cc02fc Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_noise.dir/ldpc_noise.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_noise.dir/link.txt b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_noise.dir/link.txt new file mode 100644 index 0000000..22a57eb --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_noise.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/ldpc_noise.dir/ldpc_noise.c.o -o ldpc_noise -lm diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_noise.dir/progress.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_noise.dir/progress.make new file mode 100644 index 0000000..5b6b61f --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ldpc_noise.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = +CMAKE_PROGRESS_2 = 59 + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_demod.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_demod.dir/C.includecache new file mode 100644 index 0000000..d9b81f6 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_demod.dir/C.includecache @@ -0,0 +1,124 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +/home/sh/Downloads/hackrf/codec2/src/codec2_ofdm.h +stdbool.h +- +stdint.h +- +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +modem_stats.h +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h + +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/filter.h +complex.h +- + +/home/sh/Downloads/hackrf/codec2/src/gp_interleaver.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/interldpc.h +stdint.h +- +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +mpdecode_core.h +/home/sh/Downloads/hackrf/codec2/src/mpdecode_core.h +ofdm_internal.h +/home/sh/Downloads/hackrf/codec2/src/ofdm_internal.h + +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h +stdlib.h +- +stdio.h +- +math.h +- +string.h +- +xmmintrin.h +- +sys/types.h +- + +/home/sh/Downloads/hackrf/codec2/src/ldpc_codes.h +mpdecode_core.h +/home/sh/Downloads/hackrf/codec2/src/mpdecode_core.h + +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/src/mpdecode_core.h +stdint.h +- +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/octave.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/ofdm_demod.c +optparse.h +/home/sh/Downloads/hackrf/codec2/src/optparse.h +assert.h +- +stdio.h +- +stdlib.h +- +stdbool.h +- +stdint.h +- +string.h +- +math.h +- +errno.h +- +codec2_ofdm.h +/home/sh/Downloads/hackrf/codec2/src/codec2_ofdm.h +ofdm_internal.h +/home/sh/Downloads/hackrf/codec2/src/ofdm_internal.h +ofdm_mode.h +/home/sh/Downloads/hackrf/codec2/src/ofdm_mode.h +octave.h +/home/sh/Downloads/hackrf/codec2/src/octave.h +mpdecode_core.h +/home/sh/Downloads/hackrf/codec2/src/mpdecode_core.h +ldpc_codes.h +/home/sh/Downloads/hackrf/codec2/src/ldpc_codes.h +gp_interleaver.h +/home/sh/Downloads/hackrf/codec2/src/gp_interleaver.h +interldpc.h +/home/sh/Downloads/hackrf/codec2/src/interldpc.h + +/home/sh/Downloads/hackrf/codec2/src/ofdm_internal.h +complex.h +- +stdbool.h +- +stdint.h +- +codec2_ofdm.h +/home/sh/Downloads/hackrf/codec2/src/codec2_ofdm.h +filter.h +/home/sh/Downloads/hackrf/codec2/src/filter.h + +/home/sh/Downloads/hackrf/codec2/src/ofdm_mode.h + +/home/sh/Downloads/hackrf/codec2/src/optparse.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_demod.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_demod.dir/DependInfo.cmake new file mode 100644 index 0000000..ac935ac --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_demod.dir/DependInfo.cmake @@ -0,0 +1,30 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/src/octave.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/ofdm_demod.dir/octave.c.o" + "/home/sh/Downloads/hackrf/codec2/src/ofdm_demod.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/ofdm_demod.dir/ofdm_demod.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "GIT_HASH=\"df2ed16c\"" + "_GNU_SOURCE=1" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/DependInfo.cmake" + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_demod.dir/build.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_demod.dir/build.make new file mode 100644 index 0000000..5815035 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_demod.dir/build.make @@ -0,0 +1,114 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include src/CMakeFiles/ofdm_demod.dir/depend.make + +# Include the progress variables for this target. +include src/CMakeFiles/ofdm_demod.dir/progress.make + +# Include the compile flags for this target's objects. +include src/CMakeFiles/ofdm_demod.dir/flags.make + +src/CMakeFiles/ofdm_demod.dir/ofdm_demod.c.o: src/CMakeFiles/ofdm_demod.dir/flags.make +src/CMakeFiles/ofdm_demod.dir/ofdm_demod.c.o: ../src/ofdm_demod.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object src/CMakeFiles/ofdm_demod.dir/ofdm_demod.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/ofdm_demod.dir/ofdm_demod.c.o -c /home/sh/Downloads/hackrf/codec2/src/ofdm_demod.c + +src/CMakeFiles/ofdm_demod.dir/ofdm_demod.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/ofdm_demod.dir/ofdm_demod.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/ofdm_demod.c > CMakeFiles/ofdm_demod.dir/ofdm_demod.c.i + +src/CMakeFiles/ofdm_demod.dir/ofdm_demod.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/ofdm_demod.dir/ofdm_demod.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/ofdm_demod.c -o CMakeFiles/ofdm_demod.dir/ofdm_demod.c.s + +src/CMakeFiles/ofdm_demod.dir/octave.c.o: src/CMakeFiles/ofdm_demod.dir/flags.make +src/CMakeFiles/ofdm_demod.dir/octave.c.o: ../src/octave.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Building C object src/CMakeFiles/ofdm_demod.dir/octave.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/ofdm_demod.dir/octave.c.o -c /home/sh/Downloads/hackrf/codec2/src/octave.c + +src/CMakeFiles/ofdm_demod.dir/octave.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/ofdm_demod.dir/octave.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/octave.c > CMakeFiles/ofdm_demod.dir/octave.c.i + +src/CMakeFiles/ofdm_demod.dir/octave.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/ofdm_demod.dir/octave.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/octave.c -o CMakeFiles/ofdm_demod.dir/octave.c.s + +# Object files for target ofdm_demod +ofdm_demod_OBJECTS = \ +"CMakeFiles/ofdm_demod.dir/ofdm_demod.c.o" \ +"CMakeFiles/ofdm_demod.dir/octave.c.o" + +# External object files for target ofdm_demod +ofdm_demod_EXTERNAL_OBJECTS = + +src/ofdm_demod: src/CMakeFiles/ofdm_demod.dir/ofdm_demod.c.o +src/ofdm_demod: src/CMakeFiles/ofdm_demod.dir/octave.c.o +src/ofdm_demod: src/CMakeFiles/ofdm_demod.dir/build.make +src/ofdm_demod: src/libcodec2.so.0.9 +src/ofdm_demod: src/CMakeFiles/ofdm_demod.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_3) "Linking C executable ofdm_demod" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/ofdm_demod.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +src/CMakeFiles/ofdm_demod.dir/build: src/ofdm_demod + +.PHONY : src/CMakeFiles/ofdm_demod.dir/build + +src/CMakeFiles/ofdm_demod.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -P CMakeFiles/ofdm_demod.dir/cmake_clean.cmake +.PHONY : src/CMakeFiles/ofdm_demod.dir/clean + +src/CMakeFiles/ofdm_demod.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/src /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/src /home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/ofdm_demod.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : src/CMakeFiles/ofdm_demod.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_demod.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_demod.dir/cmake_clean.cmake new file mode 100644 index 0000000..11f73d2 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_demod.dir/cmake_clean.cmake @@ -0,0 +1,11 @@ +file(REMOVE_RECURSE + "CMakeFiles/ofdm_demod.dir/ofdm_demod.c.o" + "CMakeFiles/ofdm_demod.dir/octave.c.o" + "ofdm_demod.pdb" + "ofdm_demod" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/ofdm_demod.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_demod.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_demod.dir/depend.internal new file mode 100644 index 0000000..f59718f --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_demod.dir/depend.internal @@ -0,0 +1,22 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/ofdm_demod.dir/octave.c.o + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/octave.c + /home/sh/Downloads/hackrf/codec2/src/octave.h +src/CMakeFiles/ofdm_demod.dir/ofdm_demod.c.o + /home/sh/Downloads/hackrf/codec2/src/codec2_ofdm.h + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/filter.h + /home/sh/Downloads/hackrf/codec2/src/gp_interleaver.h + /home/sh/Downloads/hackrf/codec2/src/interldpc.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/ldpc_codes.h + /home/sh/Downloads/hackrf/codec2/src/modem_stats.h + /home/sh/Downloads/hackrf/codec2/src/mpdecode_core.h + /home/sh/Downloads/hackrf/codec2/src/octave.h + /home/sh/Downloads/hackrf/codec2/src/ofdm_demod.c + /home/sh/Downloads/hackrf/codec2/src/ofdm_internal.h + /home/sh/Downloads/hackrf/codec2/src/ofdm_mode.h + /home/sh/Downloads/hackrf/codec2/src/optparse.h diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_demod.dir/depend.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_demod.dir/depend.make new file mode 100644 index 0000000..8268c6b --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_demod.dir/depend.make @@ -0,0 +1,22 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/ofdm_demod.dir/octave.c.o: ../src/comp.h +src/CMakeFiles/ofdm_demod.dir/octave.c.o: ../src/octave.c +src/CMakeFiles/ofdm_demod.dir/octave.c.o: ../src/octave.h + +src/CMakeFiles/ofdm_demod.dir/ofdm_demod.c.o: ../src/codec2_ofdm.h +src/CMakeFiles/ofdm_demod.dir/ofdm_demod.c.o: ../src/comp.h +src/CMakeFiles/ofdm_demod.dir/ofdm_demod.c.o: ../src/filter.h +src/CMakeFiles/ofdm_demod.dir/ofdm_demod.c.o: ../src/gp_interleaver.h +src/CMakeFiles/ofdm_demod.dir/ofdm_demod.c.o: ../src/interldpc.h +src/CMakeFiles/ofdm_demod.dir/ofdm_demod.c.o: ../src/kiss_fft.h +src/CMakeFiles/ofdm_demod.dir/ofdm_demod.c.o: ../src/ldpc_codes.h +src/CMakeFiles/ofdm_demod.dir/ofdm_demod.c.o: ../src/modem_stats.h +src/CMakeFiles/ofdm_demod.dir/ofdm_demod.c.o: ../src/mpdecode_core.h +src/CMakeFiles/ofdm_demod.dir/ofdm_demod.c.o: ../src/octave.h +src/CMakeFiles/ofdm_demod.dir/ofdm_demod.c.o: ../src/ofdm_demod.c +src/CMakeFiles/ofdm_demod.dir/ofdm_demod.c.o: ../src/ofdm_internal.h +src/CMakeFiles/ofdm_demod.dir/ofdm_demod.c.o: ../src/ofdm_mode.h +src/CMakeFiles/ofdm_demod.dir/ofdm_demod.c.o: ../src/optparse.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_demod.dir/flags.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_demod.dir/flags.make new file mode 100644 index 0000000..814242c --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_demod.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DGIT_HASH=\"df2ed16c\" -D_GNU_SOURCE=1 + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/src + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_demod.dir/link.txt b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_demod.dir/link.txt new file mode 100644 index 0000000..55e7f33 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_demod.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/ofdm_demod.dir/ofdm_demod.c.o CMakeFiles/ofdm_demod.dir/octave.c.o -o ofdm_demod -Wl,-rpath,/home/sh/Downloads/hackrf/codec2/build_linux/src -lm libcodec2.so.0.9 -lm diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_demod.dir/octave.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_demod.dir/octave.c.o new file mode 100644 index 0000000..889ec3b Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_demod.dir/octave.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_demod.dir/ofdm_demod.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_demod.dir/ofdm_demod.c.o new file mode 100644 index 0000000..a54f642 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_demod.dir/ofdm_demod.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_demod.dir/progress.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_demod.dir/progress.make new file mode 100644 index 0000000..4a742bf --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_demod.dir/progress.make @@ -0,0 +1,4 @@ +CMAKE_PROGRESS_1 = 60 +CMAKE_PROGRESS_2 = +CMAKE_PROGRESS_3 = + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_gen_test_bits.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_gen_test_bits.dir/C.includecache new file mode 100644 index 0000000..cefded7 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_gen_test_bits.dir/C.includecache @@ -0,0 +1,108 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +/home/sh/Downloads/hackrf/codec2/src/codec2_ofdm.h +complex.h +- +stdbool.h +- +stdint.h +- +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +modem_stats.h +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h + +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/fdv_arm_math.h +arm_const_structs.h +/home/sh/Downloads/hackrf/codec2/src/arm_const_structs.h + +/home/sh/Downloads/hackrf/codec2/src/filter.h +complex.h +- + +/home/sh/Downloads/hackrf/codec2/src/interldpc.h +stdint.h +- +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +mpdecode_core.h +/home/sh/Downloads/hackrf/codec2/src/mpdecode_core.h +ofdm_internal.h +/home/sh/Downloads/hackrf/codec2/src/ofdm_internal.h + +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h +stdlib.h +- +stdio.h +- +math.h +- +string.h +- +xmmintrin.h +- +sys/types.h +- + +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/src/mpdecode_core.h +stdint.h +- +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/ofdm_gen_test_bits.c +optparse.h +/home/sh/Downloads/hackrf/codec2/src/optparse.h +assert.h +- +stdio.h +- +stdlib.h +- +string.h +- +math.h +- +errno.h +- +codec2_ofdm.h +/home/sh/Downloads/hackrf/codec2/src/codec2_ofdm.h +ofdm_internal.h +/home/sh/Downloads/hackrf/codec2/src/ofdm_internal.h +interldpc.h +/home/sh/Downloads/hackrf/codec2/src/interldpc.h +varicode.h +/home/sh/Downloads/hackrf/codec2/src/varicode.h + +/home/sh/Downloads/hackrf/codec2/src/ofdm_internal.h +complex.h +- +stdbool.h +- +stdint.h +- +codec2_ofdm.h +/home/sh/Downloads/hackrf/codec2/src/codec2_ofdm.h +filter.h +/home/sh/Downloads/hackrf/codec2/src/filter.h +fdv_arm_math.h +/home/sh/Downloads/hackrf/codec2/src/fdv_arm_math.h + +/home/sh/Downloads/hackrf/codec2/src/optparse.h + +/home/sh/Downloads/hackrf/codec2/src/varicode.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_gen_test_bits.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_gen_test_bits.dir/DependInfo.cmake new file mode 100644 index 0000000..d3ce90e --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_gen_test_bits.dir/DependInfo.cmake @@ -0,0 +1,32 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/src/ofdm_gen_test_bits.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/ofdm_gen_test_bits.dir/ofdm_gen_test_bits.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "HORUS_L2_RX" + "INTERLEAVER" + "RUN_TIME_TABLES" + "SCRAMBLER" + "_GNU_SOURCE=1" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/DependInfo.cmake" + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_gen_test_bits.dir/build.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_gen_test_bits.dir/build.make new file mode 100644 index 0000000..943d22c --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_gen_test_bits.dir/build.make @@ -0,0 +1,99 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include src/CMakeFiles/ofdm_gen_test_bits.dir/depend.make + +# Include the progress variables for this target. +include src/CMakeFiles/ofdm_gen_test_bits.dir/progress.make + +# Include the compile flags for this target's objects. +include src/CMakeFiles/ofdm_gen_test_bits.dir/flags.make + +src/CMakeFiles/ofdm_gen_test_bits.dir/ofdm_gen_test_bits.c.o: src/CMakeFiles/ofdm_gen_test_bits.dir/flags.make +src/CMakeFiles/ofdm_gen_test_bits.dir/ofdm_gen_test_bits.c.o: ../src/ofdm_gen_test_bits.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object src/CMakeFiles/ofdm_gen_test_bits.dir/ofdm_gen_test_bits.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/ofdm_gen_test_bits.dir/ofdm_gen_test_bits.c.o -c /home/sh/Downloads/hackrf/codec2/src/ofdm_gen_test_bits.c + +src/CMakeFiles/ofdm_gen_test_bits.dir/ofdm_gen_test_bits.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/ofdm_gen_test_bits.dir/ofdm_gen_test_bits.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/ofdm_gen_test_bits.c > CMakeFiles/ofdm_gen_test_bits.dir/ofdm_gen_test_bits.c.i + +src/CMakeFiles/ofdm_gen_test_bits.dir/ofdm_gen_test_bits.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/ofdm_gen_test_bits.dir/ofdm_gen_test_bits.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/ofdm_gen_test_bits.c -o CMakeFiles/ofdm_gen_test_bits.dir/ofdm_gen_test_bits.c.s + +# Object files for target ofdm_gen_test_bits +ofdm_gen_test_bits_OBJECTS = \ +"CMakeFiles/ofdm_gen_test_bits.dir/ofdm_gen_test_bits.c.o" + +# External object files for target ofdm_gen_test_bits +ofdm_gen_test_bits_EXTERNAL_OBJECTS = + +src/ofdm_gen_test_bits: src/CMakeFiles/ofdm_gen_test_bits.dir/ofdm_gen_test_bits.c.o +src/ofdm_gen_test_bits: src/CMakeFiles/ofdm_gen_test_bits.dir/build.make +src/ofdm_gen_test_bits: src/libcodec2.so.0.9 +src/ofdm_gen_test_bits: src/CMakeFiles/ofdm_gen_test_bits.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking C executable ofdm_gen_test_bits" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/ofdm_gen_test_bits.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +src/CMakeFiles/ofdm_gen_test_bits.dir/build: src/ofdm_gen_test_bits + +.PHONY : src/CMakeFiles/ofdm_gen_test_bits.dir/build + +src/CMakeFiles/ofdm_gen_test_bits.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -P CMakeFiles/ofdm_gen_test_bits.dir/cmake_clean.cmake +.PHONY : src/CMakeFiles/ofdm_gen_test_bits.dir/clean + +src/CMakeFiles/ofdm_gen_test_bits.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/src /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/src /home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/ofdm_gen_test_bits.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : src/CMakeFiles/ofdm_gen_test_bits.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_gen_test_bits.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_gen_test_bits.dir/cmake_clean.cmake new file mode 100644 index 0000000..2bcc9d3 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_gen_test_bits.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +file(REMOVE_RECURSE + "CMakeFiles/ofdm_gen_test_bits.dir/ofdm_gen_test_bits.c.o" + "ofdm_gen_test_bits.pdb" + "ofdm_gen_test_bits" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/ofdm_gen_test_bits.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_gen_test_bits.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_gen_test_bits.dir/depend.internal new file mode 100644 index 0000000..7e6a0b3 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_gen_test_bits.dir/depend.internal @@ -0,0 +1,16 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/ofdm_gen_test_bits.dir/ofdm_gen_test_bits.c.o + /home/sh/Downloads/hackrf/codec2/src/codec2_ofdm.h + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/fdv_arm_math.h + /home/sh/Downloads/hackrf/codec2/src/filter.h + /home/sh/Downloads/hackrf/codec2/src/interldpc.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/modem_stats.h + /home/sh/Downloads/hackrf/codec2/src/mpdecode_core.h + /home/sh/Downloads/hackrf/codec2/src/ofdm_gen_test_bits.c + /home/sh/Downloads/hackrf/codec2/src/ofdm_internal.h + /home/sh/Downloads/hackrf/codec2/src/optparse.h + /home/sh/Downloads/hackrf/codec2/src/varicode.h diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_gen_test_bits.dir/depend.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_gen_test_bits.dir/depend.make new file mode 100644 index 0000000..3c1a82d --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_gen_test_bits.dir/depend.make @@ -0,0 +1,16 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/ofdm_gen_test_bits.dir/ofdm_gen_test_bits.c.o: ../src/codec2_ofdm.h +src/CMakeFiles/ofdm_gen_test_bits.dir/ofdm_gen_test_bits.c.o: ../src/comp.h +src/CMakeFiles/ofdm_gen_test_bits.dir/ofdm_gen_test_bits.c.o: ../src/fdv_arm_math.h +src/CMakeFiles/ofdm_gen_test_bits.dir/ofdm_gen_test_bits.c.o: ../src/filter.h +src/CMakeFiles/ofdm_gen_test_bits.dir/ofdm_gen_test_bits.c.o: ../src/interldpc.h +src/CMakeFiles/ofdm_gen_test_bits.dir/ofdm_gen_test_bits.c.o: ../src/kiss_fft.h +src/CMakeFiles/ofdm_gen_test_bits.dir/ofdm_gen_test_bits.c.o: ../src/modem_stats.h +src/CMakeFiles/ofdm_gen_test_bits.dir/ofdm_gen_test_bits.c.o: ../src/mpdecode_core.h +src/CMakeFiles/ofdm_gen_test_bits.dir/ofdm_gen_test_bits.c.o: ../src/ofdm_gen_test_bits.c +src/CMakeFiles/ofdm_gen_test_bits.dir/ofdm_gen_test_bits.c.o: ../src/ofdm_internal.h +src/CMakeFiles/ofdm_gen_test_bits.dir/ofdm_gen_test_bits.c.o: ../src/optparse.h +src/CMakeFiles/ofdm_gen_test_bits.dir/ofdm_gen_test_bits.c.o: ../src/varicode.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_gen_test_bits.dir/flags.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_gen_test_bits.dir/flags.make new file mode 100644 index 0000000..943f794 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_gen_test_bits.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 + +C_DEFINES = -DHORUS_L2_RX -DINTERLEAVER -DRUN_TIME_TABLES -DSCRAMBLER -D_GNU_SOURCE=1 + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/src + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_gen_test_bits.dir/link.txt b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_gen_test_bits.dir/link.txt new file mode 100644 index 0000000..04dd865 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_gen_test_bits.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -rdynamic CMakeFiles/ofdm_gen_test_bits.dir/ofdm_gen_test_bits.c.o -o ofdm_gen_test_bits -Wl,-rpath,/home/sh/Downloads/hackrf/codec2/build_linux/src libcodec2.so.0.9 -lm diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_gen_test_bits.dir/ofdm_gen_test_bits.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_gen_test_bits.dir/ofdm_gen_test_bits.c.o new file mode 100644 index 0000000..612accf Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_gen_test_bits.dir/ofdm_gen_test_bits.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_gen_test_bits.dir/progress.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_gen_test_bits.dir/progress.make new file mode 100644 index 0000000..05e01bb --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_gen_test_bits.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = +CMAKE_PROGRESS_2 = 65 + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_get_test_bits.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_get_test_bits.dir/C.includecache new file mode 100644 index 0000000..bfe3ea6 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_get_test_bits.dir/C.includecache @@ -0,0 +1,106 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +/home/sh/Downloads/hackrf/codec2/src/codec2_ofdm.h +stdbool.h +- +stdint.h +- +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +modem_stats.h +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h + +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/filter.h +complex.h +- + +/home/sh/Downloads/hackrf/codec2/src/interldpc.h +stdint.h +- +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +mpdecode_core.h +/home/sh/Downloads/hackrf/codec2/src/mpdecode_core.h +ofdm_internal.h +/home/sh/Downloads/hackrf/codec2/src/ofdm_internal.h + +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h +stdlib.h +- +stdio.h +- +math.h +- +string.h +- +xmmintrin.h +- +sys/types.h +- + +/home/sh/Downloads/hackrf/codec2/src/ldpc_codes.h +mpdecode_core.h +/home/sh/Downloads/hackrf/codec2/src/mpdecode_core.h + +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/src/mpdecode_core.h +stdint.h +- +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/ofdm_get_test_bits.c +optparse.h +/home/sh/Downloads/hackrf/codec2/src/optparse.h +assert.h +- +stdio.h +- +stdlib.h +- +string.h +- +math.h +- +errno.h +- +codec2_ofdm.h +/home/sh/Downloads/hackrf/codec2/src/codec2_ofdm.h +ofdm_internal.h +/home/sh/Downloads/hackrf/codec2/src/ofdm_internal.h +ldpc_codes.h +/home/sh/Downloads/hackrf/codec2/src/ldpc_codes.h +interldpc.h +/home/sh/Downloads/hackrf/codec2/src/interldpc.h +varicode.h +/home/sh/Downloads/hackrf/codec2/src/varicode.h + +/home/sh/Downloads/hackrf/codec2/src/ofdm_internal.h +complex.h +- +stdbool.h +- +stdint.h +- +codec2_ofdm.h +/home/sh/Downloads/hackrf/codec2/src/codec2_ofdm.h +filter.h +/home/sh/Downloads/hackrf/codec2/src/filter.h + +/home/sh/Downloads/hackrf/codec2/src/optparse.h + +/home/sh/Downloads/hackrf/codec2/src/varicode.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_get_test_bits.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_get_test_bits.dir/DependInfo.cmake new file mode 100644 index 0000000..8440e71 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_get_test_bits.dir/DependInfo.cmake @@ -0,0 +1,29 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/src/ofdm_get_test_bits.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/ofdm_get_test_bits.dir/ofdm_get_test_bits.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "GIT_HASH=\"df2ed16c\"" + "_GNU_SOURCE=1" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/DependInfo.cmake" + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_get_test_bits.dir/build.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_get_test_bits.dir/build.make new file mode 100644 index 0000000..b1d5398 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_get_test_bits.dir/build.make @@ -0,0 +1,99 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include src/CMakeFiles/ofdm_get_test_bits.dir/depend.make + +# Include the progress variables for this target. +include src/CMakeFiles/ofdm_get_test_bits.dir/progress.make + +# Include the compile flags for this target's objects. +include src/CMakeFiles/ofdm_get_test_bits.dir/flags.make + +src/CMakeFiles/ofdm_get_test_bits.dir/ofdm_get_test_bits.c.o: src/CMakeFiles/ofdm_get_test_bits.dir/flags.make +src/CMakeFiles/ofdm_get_test_bits.dir/ofdm_get_test_bits.c.o: ../src/ofdm_get_test_bits.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object src/CMakeFiles/ofdm_get_test_bits.dir/ofdm_get_test_bits.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/ofdm_get_test_bits.dir/ofdm_get_test_bits.c.o -c /home/sh/Downloads/hackrf/codec2/src/ofdm_get_test_bits.c + +src/CMakeFiles/ofdm_get_test_bits.dir/ofdm_get_test_bits.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/ofdm_get_test_bits.dir/ofdm_get_test_bits.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/ofdm_get_test_bits.c > CMakeFiles/ofdm_get_test_bits.dir/ofdm_get_test_bits.c.i + +src/CMakeFiles/ofdm_get_test_bits.dir/ofdm_get_test_bits.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/ofdm_get_test_bits.dir/ofdm_get_test_bits.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/ofdm_get_test_bits.c -o CMakeFiles/ofdm_get_test_bits.dir/ofdm_get_test_bits.c.s + +# Object files for target ofdm_get_test_bits +ofdm_get_test_bits_OBJECTS = \ +"CMakeFiles/ofdm_get_test_bits.dir/ofdm_get_test_bits.c.o" + +# External object files for target ofdm_get_test_bits +ofdm_get_test_bits_EXTERNAL_OBJECTS = + +src/ofdm_get_test_bits: src/CMakeFiles/ofdm_get_test_bits.dir/ofdm_get_test_bits.c.o +src/ofdm_get_test_bits: src/CMakeFiles/ofdm_get_test_bits.dir/build.make +src/ofdm_get_test_bits: src/libcodec2.so.0.9 +src/ofdm_get_test_bits: src/CMakeFiles/ofdm_get_test_bits.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking C executable ofdm_get_test_bits" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/ofdm_get_test_bits.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +src/CMakeFiles/ofdm_get_test_bits.dir/build: src/ofdm_get_test_bits + +.PHONY : src/CMakeFiles/ofdm_get_test_bits.dir/build + +src/CMakeFiles/ofdm_get_test_bits.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -P CMakeFiles/ofdm_get_test_bits.dir/cmake_clean.cmake +.PHONY : src/CMakeFiles/ofdm_get_test_bits.dir/clean + +src/CMakeFiles/ofdm_get_test_bits.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/src /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/src /home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/ofdm_get_test_bits.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : src/CMakeFiles/ofdm_get_test_bits.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_get_test_bits.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_get_test_bits.dir/cmake_clean.cmake new file mode 100644 index 0000000..f4c8c36 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_get_test_bits.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +file(REMOVE_RECURSE + "CMakeFiles/ofdm_get_test_bits.dir/ofdm_get_test_bits.c.o" + "ofdm_get_test_bits.pdb" + "ofdm_get_test_bits" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/ofdm_get_test_bits.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_get_test_bits.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_get_test_bits.dir/depend.internal new file mode 100644 index 0000000..a27c5ce --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_get_test_bits.dir/depend.internal @@ -0,0 +1,16 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/ofdm_get_test_bits.dir/ofdm_get_test_bits.c.o + /home/sh/Downloads/hackrf/codec2/src/codec2_ofdm.h + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/filter.h + /home/sh/Downloads/hackrf/codec2/src/interldpc.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/ldpc_codes.h + /home/sh/Downloads/hackrf/codec2/src/modem_stats.h + /home/sh/Downloads/hackrf/codec2/src/mpdecode_core.h + /home/sh/Downloads/hackrf/codec2/src/ofdm_get_test_bits.c + /home/sh/Downloads/hackrf/codec2/src/ofdm_internal.h + /home/sh/Downloads/hackrf/codec2/src/optparse.h + /home/sh/Downloads/hackrf/codec2/src/varicode.h diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_get_test_bits.dir/depend.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_get_test_bits.dir/depend.make new file mode 100644 index 0000000..a9a9f73 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_get_test_bits.dir/depend.make @@ -0,0 +1,16 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/ofdm_get_test_bits.dir/ofdm_get_test_bits.c.o: ../src/codec2_ofdm.h +src/CMakeFiles/ofdm_get_test_bits.dir/ofdm_get_test_bits.c.o: ../src/comp.h +src/CMakeFiles/ofdm_get_test_bits.dir/ofdm_get_test_bits.c.o: ../src/filter.h +src/CMakeFiles/ofdm_get_test_bits.dir/ofdm_get_test_bits.c.o: ../src/interldpc.h +src/CMakeFiles/ofdm_get_test_bits.dir/ofdm_get_test_bits.c.o: ../src/kiss_fft.h +src/CMakeFiles/ofdm_get_test_bits.dir/ofdm_get_test_bits.c.o: ../src/ldpc_codes.h +src/CMakeFiles/ofdm_get_test_bits.dir/ofdm_get_test_bits.c.o: ../src/modem_stats.h +src/CMakeFiles/ofdm_get_test_bits.dir/ofdm_get_test_bits.c.o: ../src/mpdecode_core.h +src/CMakeFiles/ofdm_get_test_bits.dir/ofdm_get_test_bits.c.o: ../src/ofdm_get_test_bits.c +src/CMakeFiles/ofdm_get_test_bits.dir/ofdm_get_test_bits.c.o: ../src/ofdm_internal.h +src/CMakeFiles/ofdm_get_test_bits.dir/ofdm_get_test_bits.c.o: ../src/optparse.h +src/CMakeFiles/ofdm_get_test_bits.dir/ofdm_get_test_bits.c.o: ../src/varicode.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_get_test_bits.dir/flags.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_get_test_bits.dir/flags.make new file mode 100644 index 0000000..814242c --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_get_test_bits.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DGIT_HASH=\"df2ed16c\" -D_GNU_SOURCE=1 + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/src + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_get_test_bits.dir/link.txt b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_get_test_bits.dir/link.txt new file mode 100644 index 0000000..f1d8163 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_get_test_bits.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/ofdm_get_test_bits.dir/ofdm_get_test_bits.c.o -o ofdm_get_test_bits -Wl,-rpath,/home/sh/Downloads/hackrf/codec2/build_linux/src -lm libcodec2.so.0.9 -lm diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_get_test_bits.dir/ofdm_get_test_bits.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_get_test_bits.dir/ofdm_get_test_bits.c.o new file mode 100644 index 0000000..e67db93 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_get_test_bits.dir/ofdm_get_test_bits.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_get_test_bits.dir/progress.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_get_test_bits.dir/progress.make new file mode 100644 index 0000000..a86269a --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_get_test_bits.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = 61 +CMAKE_PROGRESS_2 = + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_mod.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_mod.dir/C.includecache new file mode 100644 index 0000000..b074860 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_mod.dir/C.includecache @@ -0,0 +1,114 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +/home/sh/Downloads/hackrf/codec2/src/codec2_ofdm.h +stdbool.h +- +stdint.h +- +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +modem_stats.h +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h + +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/filter.h +complex.h +- + +/home/sh/Downloads/hackrf/codec2/src/gp_interleaver.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/interldpc.h +stdint.h +- +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +mpdecode_core.h +/home/sh/Downloads/hackrf/codec2/src/mpdecode_core.h +ofdm_internal.h +/home/sh/Downloads/hackrf/codec2/src/ofdm_internal.h + +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h +stdlib.h +- +stdio.h +- +math.h +- +string.h +- +xmmintrin.h +- +sys/types.h +- + +/home/sh/Downloads/hackrf/codec2/src/ldpc_codes.h +mpdecode_core.h +/home/sh/Downloads/hackrf/codec2/src/mpdecode_core.h + +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/src/mpdecode_core.h +stdint.h +- +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/ofdm_internal.h +complex.h +- +stdbool.h +- +stdint.h +- +codec2_ofdm.h +/home/sh/Downloads/hackrf/codec2/src/codec2_ofdm.h +filter.h +/home/sh/Downloads/hackrf/codec2/src/filter.h + +/home/sh/Downloads/hackrf/codec2/src/ofdm_mod.c +optparse.h +/home/sh/Downloads/hackrf/codec2/src/optparse.h +assert.h +- +stdio.h +- +stdlib.h +- +string.h +- +math.h +- +codec2_ofdm.h +/home/sh/Downloads/hackrf/codec2/src/codec2_ofdm.h +ofdm_internal.h +/home/sh/Downloads/hackrf/codec2/src/ofdm_internal.h +ofdm_mode.h +/home/sh/Downloads/hackrf/codec2/src/ofdm_mode.h +gp_interleaver.h +/home/sh/Downloads/hackrf/codec2/src/gp_interleaver.h +ldpc_codes.h +/home/sh/Downloads/hackrf/codec2/src/ldpc_codes.h +interldpc.h +/home/sh/Downloads/hackrf/codec2/src/interldpc.h +varicode.h +/home/sh/Downloads/hackrf/codec2/src/varicode.h + +/home/sh/Downloads/hackrf/codec2/src/ofdm_mode.h + +/home/sh/Downloads/hackrf/codec2/src/optparse.h + +/home/sh/Downloads/hackrf/codec2/src/varicode.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_mod.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_mod.dir/DependInfo.cmake new file mode 100644 index 0000000..56a46b9 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_mod.dir/DependInfo.cmake @@ -0,0 +1,29 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/src/ofdm_mod.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/ofdm_mod.dir/ofdm_mod.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "GIT_HASH=\"df2ed16c\"" + "_GNU_SOURCE=1" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/DependInfo.cmake" + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_mod.dir/build.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_mod.dir/build.make new file mode 100644 index 0000000..fa2d183 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_mod.dir/build.make @@ -0,0 +1,99 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include src/CMakeFiles/ofdm_mod.dir/depend.make + +# Include the progress variables for this target. +include src/CMakeFiles/ofdm_mod.dir/progress.make + +# Include the compile flags for this target's objects. +include src/CMakeFiles/ofdm_mod.dir/flags.make + +src/CMakeFiles/ofdm_mod.dir/ofdm_mod.c.o: src/CMakeFiles/ofdm_mod.dir/flags.make +src/CMakeFiles/ofdm_mod.dir/ofdm_mod.c.o: ../src/ofdm_mod.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object src/CMakeFiles/ofdm_mod.dir/ofdm_mod.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/ofdm_mod.dir/ofdm_mod.c.o -c /home/sh/Downloads/hackrf/codec2/src/ofdm_mod.c + +src/CMakeFiles/ofdm_mod.dir/ofdm_mod.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/ofdm_mod.dir/ofdm_mod.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/ofdm_mod.c > CMakeFiles/ofdm_mod.dir/ofdm_mod.c.i + +src/CMakeFiles/ofdm_mod.dir/ofdm_mod.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/ofdm_mod.dir/ofdm_mod.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/ofdm_mod.c -o CMakeFiles/ofdm_mod.dir/ofdm_mod.c.s + +# Object files for target ofdm_mod +ofdm_mod_OBJECTS = \ +"CMakeFiles/ofdm_mod.dir/ofdm_mod.c.o" + +# External object files for target ofdm_mod +ofdm_mod_EXTERNAL_OBJECTS = + +src/ofdm_mod: src/CMakeFiles/ofdm_mod.dir/ofdm_mod.c.o +src/ofdm_mod: src/CMakeFiles/ofdm_mod.dir/build.make +src/ofdm_mod: src/libcodec2.so.0.9 +src/ofdm_mod: src/CMakeFiles/ofdm_mod.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking C executable ofdm_mod" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/ofdm_mod.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +src/CMakeFiles/ofdm_mod.dir/build: src/ofdm_mod + +.PHONY : src/CMakeFiles/ofdm_mod.dir/build + +src/CMakeFiles/ofdm_mod.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -P CMakeFiles/ofdm_mod.dir/cmake_clean.cmake +.PHONY : src/CMakeFiles/ofdm_mod.dir/clean + +src/CMakeFiles/ofdm_mod.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/src /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/src /home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/ofdm_mod.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : src/CMakeFiles/ofdm_mod.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_mod.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_mod.dir/cmake_clean.cmake new file mode 100644 index 0000000..943169f --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_mod.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +file(REMOVE_RECURSE + "CMakeFiles/ofdm_mod.dir/ofdm_mod.c.o" + "ofdm_mod.pdb" + "ofdm_mod" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/ofdm_mod.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_mod.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_mod.dir/depend.internal new file mode 100644 index 0000000..27091b1 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_mod.dir/depend.internal @@ -0,0 +1,18 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/ofdm_mod.dir/ofdm_mod.c.o + /home/sh/Downloads/hackrf/codec2/src/codec2_ofdm.h + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/filter.h + /home/sh/Downloads/hackrf/codec2/src/gp_interleaver.h + /home/sh/Downloads/hackrf/codec2/src/interldpc.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/ldpc_codes.h + /home/sh/Downloads/hackrf/codec2/src/modem_stats.h + /home/sh/Downloads/hackrf/codec2/src/mpdecode_core.h + /home/sh/Downloads/hackrf/codec2/src/ofdm_internal.h + /home/sh/Downloads/hackrf/codec2/src/ofdm_mod.c + /home/sh/Downloads/hackrf/codec2/src/ofdm_mode.h + /home/sh/Downloads/hackrf/codec2/src/optparse.h + /home/sh/Downloads/hackrf/codec2/src/varicode.h diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_mod.dir/depend.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_mod.dir/depend.make new file mode 100644 index 0000000..42a952b --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_mod.dir/depend.make @@ -0,0 +1,18 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/ofdm_mod.dir/ofdm_mod.c.o: ../src/codec2_ofdm.h +src/CMakeFiles/ofdm_mod.dir/ofdm_mod.c.o: ../src/comp.h +src/CMakeFiles/ofdm_mod.dir/ofdm_mod.c.o: ../src/filter.h +src/CMakeFiles/ofdm_mod.dir/ofdm_mod.c.o: ../src/gp_interleaver.h +src/CMakeFiles/ofdm_mod.dir/ofdm_mod.c.o: ../src/interldpc.h +src/CMakeFiles/ofdm_mod.dir/ofdm_mod.c.o: ../src/kiss_fft.h +src/CMakeFiles/ofdm_mod.dir/ofdm_mod.c.o: ../src/ldpc_codes.h +src/CMakeFiles/ofdm_mod.dir/ofdm_mod.c.o: ../src/modem_stats.h +src/CMakeFiles/ofdm_mod.dir/ofdm_mod.c.o: ../src/mpdecode_core.h +src/CMakeFiles/ofdm_mod.dir/ofdm_mod.c.o: ../src/ofdm_internal.h +src/CMakeFiles/ofdm_mod.dir/ofdm_mod.c.o: ../src/ofdm_mod.c +src/CMakeFiles/ofdm_mod.dir/ofdm_mod.c.o: ../src/ofdm_mode.h +src/CMakeFiles/ofdm_mod.dir/ofdm_mod.c.o: ../src/optparse.h +src/CMakeFiles/ofdm_mod.dir/ofdm_mod.c.o: ../src/varicode.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_mod.dir/flags.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_mod.dir/flags.make new file mode 100644 index 0000000..814242c --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_mod.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DGIT_HASH=\"df2ed16c\" -D_GNU_SOURCE=1 + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/src + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_mod.dir/link.txt b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_mod.dir/link.txt new file mode 100644 index 0000000..b1cb51f --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_mod.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/ofdm_mod.dir/ofdm_mod.c.o -o ofdm_mod -Wl,-rpath,/home/sh/Downloads/hackrf/codec2/build_linux/src -lm libcodec2.so.0.9 -lm diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_mod.dir/ofdm_mod.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_mod.dir/ofdm_mod.c.o new file mode 100644 index 0000000..0540256 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_mod.dir/ofdm_mod.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_mod.dir/progress.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_mod.dir/progress.make new file mode 100644 index 0000000..05e01bb --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_mod.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = +CMAKE_PROGRESS_2 = 65 + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_put_test_bits.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_put_test_bits.dir/C.includecache new file mode 100644 index 0000000..047dc16 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_put_test_bits.dir/C.includecache @@ -0,0 +1,78 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +/home/sh/Downloads/hackrf/codec2/src/codec2_ofdm.h +stdbool.h +- +stdint.h +- +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +modem_stats.h +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h + +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/filter.h +complex.h +- + +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h +stdlib.h +- +stdio.h +- +math.h +- +string.h +- +xmmintrin.h +- +sys/types.h +- + +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/src/ofdm_internal.h +complex.h +- +stdbool.h +- +stdint.h +- +codec2_ofdm.h +/home/sh/Downloads/hackrf/codec2/src/codec2_ofdm.h +filter.h +/home/sh/Downloads/hackrf/codec2/src/filter.h + +/home/sh/Downloads/hackrf/codec2/src/ofdm_put_test_bits.c +assert.h +- +stdio.h +- +stdlib.h +- +string.h +- +math.h +- +errno.h +- +codec2_ofdm.h +/home/sh/Downloads/hackrf/codec2/src/codec2_ofdm.h +ofdm_internal.h +/home/sh/Downloads/hackrf/codec2/src/ofdm_internal.h +test_bits_ofdm.h +/home/sh/Downloads/hackrf/codec2/src/test_bits_ofdm.h + +/home/sh/Downloads/hackrf/codec2/src/test_bits_ofdm.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_put_test_bits.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_put_test_bits.dir/DependInfo.cmake new file mode 100644 index 0000000..b80db45 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_put_test_bits.dir/DependInfo.cmake @@ -0,0 +1,29 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/src/ofdm_put_test_bits.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/ofdm_put_test_bits.dir/ofdm_put_test_bits.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "GIT_HASH=\"df2ed16c\"" + "_GNU_SOURCE=1" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/DependInfo.cmake" + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_put_test_bits.dir/build.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_put_test_bits.dir/build.make new file mode 100644 index 0000000..608a158 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_put_test_bits.dir/build.make @@ -0,0 +1,99 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include src/CMakeFiles/ofdm_put_test_bits.dir/depend.make + +# Include the progress variables for this target. +include src/CMakeFiles/ofdm_put_test_bits.dir/progress.make + +# Include the compile flags for this target's objects. +include src/CMakeFiles/ofdm_put_test_bits.dir/flags.make + +src/CMakeFiles/ofdm_put_test_bits.dir/ofdm_put_test_bits.c.o: src/CMakeFiles/ofdm_put_test_bits.dir/flags.make +src/CMakeFiles/ofdm_put_test_bits.dir/ofdm_put_test_bits.c.o: ../src/ofdm_put_test_bits.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object src/CMakeFiles/ofdm_put_test_bits.dir/ofdm_put_test_bits.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/ofdm_put_test_bits.dir/ofdm_put_test_bits.c.o -c /home/sh/Downloads/hackrf/codec2/src/ofdm_put_test_bits.c + +src/CMakeFiles/ofdm_put_test_bits.dir/ofdm_put_test_bits.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/ofdm_put_test_bits.dir/ofdm_put_test_bits.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/ofdm_put_test_bits.c > CMakeFiles/ofdm_put_test_bits.dir/ofdm_put_test_bits.c.i + +src/CMakeFiles/ofdm_put_test_bits.dir/ofdm_put_test_bits.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/ofdm_put_test_bits.dir/ofdm_put_test_bits.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/ofdm_put_test_bits.c -o CMakeFiles/ofdm_put_test_bits.dir/ofdm_put_test_bits.c.s + +# Object files for target ofdm_put_test_bits +ofdm_put_test_bits_OBJECTS = \ +"CMakeFiles/ofdm_put_test_bits.dir/ofdm_put_test_bits.c.o" + +# External object files for target ofdm_put_test_bits +ofdm_put_test_bits_EXTERNAL_OBJECTS = + +src/ofdm_put_test_bits: src/CMakeFiles/ofdm_put_test_bits.dir/ofdm_put_test_bits.c.o +src/ofdm_put_test_bits: src/CMakeFiles/ofdm_put_test_bits.dir/build.make +src/ofdm_put_test_bits: src/libcodec2.so.0.9 +src/ofdm_put_test_bits: src/CMakeFiles/ofdm_put_test_bits.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking C executable ofdm_put_test_bits" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/ofdm_put_test_bits.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +src/CMakeFiles/ofdm_put_test_bits.dir/build: src/ofdm_put_test_bits + +.PHONY : src/CMakeFiles/ofdm_put_test_bits.dir/build + +src/CMakeFiles/ofdm_put_test_bits.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -P CMakeFiles/ofdm_put_test_bits.dir/cmake_clean.cmake +.PHONY : src/CMakeFiles/ofdm_put_test_bits.dir/clean + +src/CMakeFiles/ofdm_put_test_bits.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/src /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/src /home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/ofdm_put_test_bits.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : src/CMakeFiles/ofdm_put_test_bits.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_put_test_bits.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_put_test_bits.dir/cmake_clean.cmake new file mode 100644 index 0000000..234eed0 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_put_test_bits.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +file(REMOVE_RECURSE + "CMakeFiles/ofdm_put_test_bits.dir/ofdm_put_test_bits.c.o" + "ofdm_put_test_bits.pdb" + "ofdm_put_test_bits" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/ofdm_put_test_bits.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_put_test_bits.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_put_test_bits.dir/depend.internal new file mode 100644 index 0000000..60ab962 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_put_test_bits.dir/depend.internal @@ -0,0 +1,12 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/ofdm_put_test_bits.dir/ofdm_put_test_bits.c.o + /home/sh/Downloads/hackrf/codec2/src/codec2_ofdm.h + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/filter.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/modem_stats.h + /home/sh/Downloads/hackrf/codec2/src/ofdm_internal.h + /home/sh/Downloads/hackrf/codec2/src/ofdm_put_test_bits.c + /home/sh/Downloads/hackrf/codec2/src/test_bits_ofdm.h diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_put_test_bits.dir/depend.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_put_test_bits.dir/depend.make new file mode 100644 index 0000000..9751abf --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_put_test_bits.dir/depend.make @@ -0,0 +1,12 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/ofdm_put_test_bits.dir/ofdm_put_test_bits.c.o: ../src/codec2_ofdm.h +src/CMakeFiles/ofdm_put_test_bits.dir/ofdm_put_test_bits.c.o: ../src/comp.h +src/CMakeFiles/ofdm_put_test_bits.dir/ofdm_put_test_bits.c.o: ../src/filter.h +src/CMakeFiles/ofdm_put_test_bits.dir/ofdm_put_test_bits.c.o: ../src/kiss_fft.h +src/CMakeFiles/ofdm_put_test_bits.dir/ofdm_put_test_bits.c.o: ../src/modem_stats.h +src/CMakeFiles/ofdm_put_test_bits.dir/ofdm_put_test_bits.c.o: ../src/ofdm_internal.h +src/CMakeFiles/ofdm_put_test_bits.dir/ofdm_put_test_bits.c.o: ../src/ofdm_put_test_bits.c +src/CMakeFiles/ofdm_put_test_bits.dir/ofdm_put_test_bits.c.o: ../src/test_bits_ofdm.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_put_test_bits.dir/flags.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_put_test_bits.dir/flags.make new file mode 100644 index 0000000..814242c --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_put_test_bits.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DGIT_HASH=\"df2ed16c\" -D_GNU_SOURCE=1 + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/src + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_put_test_bits.dir/link.txt b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_put_test_bits.dir/link.txt new file mode 100644 index 0000000..c40f5d9 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_put_test_bits.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/ofdm_put_test_bits.dir/ofdm_put_test_bits.c.o -o ofdm_put_test_bits -Wl,-rpath,/home/sh/Downloads/hackrf/codec2/build_linux/src -lm libcodec2.so.0.9 -lm diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_put_test_bits.dir/ofdm_put_test_bits.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_put_test_bits.dir/ofdm_put_test_bits.c.o new file mode 100644 index 0000000..fd8a1b3 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_put_test_bits.dir/ofdm_put_test_bits.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_put_test_bits.dir/progress.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_put_test_bits.dir/progress.make new file mode 100644 index 0000000..6c287f1 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/ofdm_put_test_bits.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = +CMAKE_PROGRESS_2 = + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/progress.marks b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/progress.marks new file mode 100644 index 0000000..abdfb05 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/progress.marks @@ -0,0 +1 @@ +60 diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/tollr.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/tollr.dir/C.includecache new file mode 100644 index 0000000..7a08f4e --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/tollr.dir/C.includecache @@ -0,0 +1,14 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +/home/sh/Downloads/hackrf/codec2/src/tollr.c +stdio.h +- +stdint.h +- + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/tollr.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/tollr.dir/DependInfo.cmake new file mode 100644 index 0000000..7776719 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/tollr.dir/DependInfo.cmake @@ -0,0 +1,28 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/src/tollr.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/tollr.dir/tollr.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "GIT_HASH=\"df2ed16c\"" + "_GNU_SOURCE=1" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/tollr.dir/build.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/tollr.dir/build.make new file mode 100644 index 0000000..37013d2 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/tollr.dir/build.make @@ -0,0 +1,98 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include src/CMakeFiles/tollr.dir/depend.make + +# Include the progress variables for this target. +include src/CMakeFiles/tollr.dir/progress.make + +# Include the compile flags for this target's objects. +include src/CMakeFiles/tollr.dir/flags.make + +src/CMakeFiles/tollr.dir/tollr.c.o: src/CMakeFiles/tollr.dir/flags.make +src/CMakeFiles/tollr.dir/tollr.c.o: ../src/tollr.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object src/CMakeFiles/tollr.dir/tollr.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/tollr.dir/tollr.c.o -c /home/sh/Downloads/hackrf/codec2/src/tollr.c + +src/CMakeFiles/tollr.dir/tollr.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/tollr.dir/tollr.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/tollr.c > CMakeFiles/tollr.dir/tollr.c.i + +src/CMakeFiles/tollr.dir/tollr.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/tollr.dir/tollr.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/tollr.c -o CMakeFiles/tollr.dir/tollr.c.s + +# Object files for target tollr +tollr_OBJECTS = \ +"CMakeFiles/tollr.dir/tollr.c.o" + +# External object files for target tollr +tollr_EXTERNAL_OBJECTS = + +src/tollr: src/CMakeFiles/tollr.dir/tollr.c.o +src/tollr: src/CMakeFiles/tollr.dir/build.make +src/tollr: src/CMakeFiles/tollr.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking C executable tollr" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/tollr.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +src/CMakeFiles/tollr.dir/build: src/tollr + +.PHONY : src/CMakeFiles/tollr.dir/build + +src/CMakeFiles/tollr.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -P CMakeFiles/tollr.dir/cmake_clean.cmake +.PHONY : src/CMakeFiles/tollr.dir/clean + +src/CMakeFiles/tollr.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/src /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/src /home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/tollr.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : src/CMakeFiles/tollr.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/tollr.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/tollr.dir/cmake_clean.cmake new file mode 100644 index 0000000..52db377 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/tollr.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +file(REMOVE_RECURSE + "CMakeFiles/tollr.dir/tollr.c.o" + "tollr.pdb" + "tollr" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/tollr.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/tollr.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/tollr.dir/depend.internal new file mode 100644 index 0000000..459e0bf --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/tollr.dir/depend.internal @@ -0,0 +1,5 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/tollr.dir/tollr.c.o + /home/sh/Downloads/hackrf/codec2/src/tollr.c diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/tollr.dir/depend.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/tollr.dir/depend.make new file mode 100644 index 0000000..3a6dcb2 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/tollr.dir/depend.make @@ -0,0 +1,5 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/tollr.dir/tollr.c.o: ../src/tollr.c + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/tollr.dir/flags.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/tollr.dir/flags.make new file mode 100644 index 0000000..814242c --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/tollr.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DGIT_HASH=\"df2ed16c\" -D_GNU_SOURCE=1 + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/src + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/tollr.dir/link.txt b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/tollr.dir/link.txt new file mode 100644 index 0000000..b66eb21 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/tollr.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/tollr.dir/tollr.c.o -o tollr diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/tollr.dir/progress.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/tollr.dir/progress.make new file mode 100644 index 0000000..c16f3dd --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/tollr.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = 95 +CMAKE_PROGRESS_2 = + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/tollr.dir/tollr.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/tollr.dir/tollr.c.o new file mode 100644 index 0000000..bcae980 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/tollr.dir/tollr.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/vhf_deframe_c2.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/vhf_deframe_c2.dir/C.includecache new file mode 100644 index 0000000..6bb9361 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/vhf_deframe_c2.dir/C.includecache @@ -0,0 +1,28 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +/home/sh/Downloads/hackrf/codec2/src/freedv_data_channel.h +stdlib.h +- + +/home/sh/Downloads/hackrf/codec2/src/freedv_vhf_framing.h +freedv_data_channel.h +/home/sh/Downloads/hackrf/codec2/src/freedv_data_channel.h + +/home/sh/Downloads/hackrf/codec2/src/vhf_deframe_c2.c +stdio.h +- +stdint.h +- +stdlib.h +- +string.h +- +freedv_vhf_framing.h +/home/sh/Downloads/hackrf/codec2/src/freedv_vhf_framing.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/vhf_deframe_c2.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/vhf_deframe_c2.dir/DependInfo.cmake new file mode 100644 index 0000000..47e90ff --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/vhf_deframe_c2.dir/DependInfo.cmake @@ -0,0 +1,29 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/src/vhf_deframe_c2.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/vhf_deframe_c2.dir/vhf_deframe_c2.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "GIT_HASH=\"df2ed16c\"" + "_GNU_SOURCE=1" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/DependInfo.cmake" + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/vhf_deframe_c2.dir/build.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/vhf_deframe_c2.dir/build.make new file mode 100644 index 0000000..d398317 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/vhf_deframe_c2.dir/build.make @@ -0,0 +1,99 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include src/CMakeFiles/vhf_deframe_c2.dir/depend.make + +# Include the progress variables for this target. +include src/CMakeFiles/vhf_deframe_c2.dir/progress.make + +# Include the compile flags for this target's objects. +include src/CMakeFiles/vhf_deframe_c2.dir/flags.make + +src/CMakeFiles/vhf_deframe_c2.dir/vhf_deframe_c2.c.o: src/CMakeFiles/vhf_deframe_c2.dir/flags.make +src/CMakeFiles/vhf_deframe_c2.dir/vhf_deframe_c2.c.o: ../src/vhf_deframe_c2.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object src/CMakeFiles/vhf_deframe_c2.dir/vhf_deframe_c2.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/vhf_deframe_c2.dir/vhf_deframe_c2.c.o -c /home/sh/Downloads/hackrf/codec2/src/vhf_deframe_c2.c + +src/CMakeFiles/vhf_deframe_c2.dir/vhf_deframe_c2.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/vhf_deframe_c2.dir/vhf_deframe_c2.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/vhf_deframe_c2.c > CMakeFiles/vhf_deframe_c2.dir/vhf_deframe_c2.c.i + +src/CMakeFiles/vhf_deframe_c2.dir/vhf_deframe_c2.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/vhf_deframe_c2.dir/vhf_deframe_c2.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/vhf_deframe_c2.c -o CMakeFiles/vhf_deframe_c2.dir/vhf_deframe_c2.c.s + +# Object files for target vhf_deframe_c2 +vhf_deframe_c2_OBJECTS = \ +"CMakeFiles/vhf_deframe_c2.dir/vhf_deframe_c2.c.o" + +# External object files for target vhf_deframe_c2 +vhf_deframe_c2_EXTERNAL_OBJECTS = + +src/vhf_deframe_c2: src/CMakeFiles/vhf_deframe_c2.dir/vhf_deframe_c2.c.o +src/vhf_deframe_c2: src/CMakeFiles/vhf_deframe_c2.dir/build.make +src/vhf_deframe_c2: src/libcodec2.so.0.9 +src/vhf_deframe_c2: src/CMakeFiles/vhf_deframe_c2.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking C executable vhf_deframe_c2" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/vhf_deframe_c2.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +src/CMakeFiles/vhf_deframe_c2.dir/build: src/vhf_deframe_c2 + +.PHONY : src/CMakeFiles/vhf_deframe_c2.dir/build + +src/CMakeFiles/vhf_deframe_c2.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -P CMakeFiles/vhf_deframe_c2.dir/cmake_clean.cmake +.PHONY : src/CMakeFiles/vhf_deframe_c2.dir/clean + +src/CMakeFiles/vhf_deframe_c2.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/src /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/src /home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/vhf_deframe_c2.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : src/CMakeFiles/vhf_deframe_c2.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/vhf_deframe_c2.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/vhf_deframe_c2.dir/cmake_clean.cmake new file mode 100644 index 0000000..c5ab0fa --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/vhf_deframe_c2.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +file(REMOVE_RECURSE + "CMakeFiles/vhf_deframe_c2.dir/vhf_deframe_c2.c.o" + "vhf_deframe_c2.pdb" + "vhf_deframe_c2" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/vhf_deframe_c2.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/vhf_deframe_c2.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/vhf_deframe_c2.dir/depend.internal new file mode 100644 index 0000000..061da4a --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/vhf_deframe_c2.dir/depend.internal @@ -0,0 +1,7 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/vhf_deframe_c2.dir/vhf_deframe_c2.c.o + /home/sh/Downloads/hackrf/codec2/src/freedv_data_channel.h + /home/sh/Downloads/hackrf/codec2/src/freedv_vhf_framing.h + /home/sh/Downloads/hackrf/codec2/src/vhf_deframe_c2.c diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/vhf_deframe_c2.dir/depend.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/vhf_deframe_c2.dir/depend.make new file mode 100644 index 0000000..5593718 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/vhf_deframe_c2.dir/depend.make @@ -0,0 +1,7 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/vhf_deframe_c2.dir/vhf_deframe_c2.c.o: ../src/freedv_data_channel.h +src/CMakeFiles/vhf_deframe_c2.dir/vhf_deframe_c2.c.o: ../src/freedv_vhf_framing.h +src/CMakeFiles/vhf_deframe_c2.dir/vhf_deframe_c2.c.o: ../src/vhf_deframe_c2.c + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/vhf_deframe_c2.dir/flags.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/vhf_deframe_c2.dir/flags.make new file mode 100644 index 0000000..814242c --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/vhf_deframe_c2.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DGIT_HASH=\"df2ed16c\" -D_GNU_SOURCE=1 + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/src + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/vhf_deframe_c2.dir/link.txt b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/vhf_deframe_c2.dir/link.txt new file mode 100644 index 0000000..0f4018f --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/vhf_deframe_c2.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/vhf_deframe_c2.dir/vhf_deframe_c2.c.o -o vhf_deframe_c2 -Wl,-rpath,/home/sh/Downloads/hackrf/codec2/build_linux/src -lm libcodec2.so.0.9 -lm diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/vhf_deframe_c2.dir/progress.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/vhf_deframe_c2.dir/progress.make new file mode 100644 index 0000000..0d87696 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/vhf_deframe_c2.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = +CMAKE_PROGRESS_2 = 98 + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/vhf_deframe_c2.dir/vhf_deframe_c2.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/vhf_deframe_c2.dir/vhf_deframe_c2.c.o new file mode 100644 index 0000000..735f6a2 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/vhf_deframe_c2.dir/vhf_deframe_c2.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/vhf_frame_c2.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/vhf_frame_c2.dir/C.includecache new file mode 100644 index 0000000..6725563 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/vhf_frame_c2.dir/C.includecache @@ -0,0 +1,28 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +/home/sh/Downloads/hackrf/codec2/src/freedv_data_channel.h +stdlib.h +- + +/home/sh/Downloads/hackrf/codec2/src/freedv_vhf_framing.h +freedv_data_channel.h +/home/sh/Downloads/hackrf/codec2/src/freedv_data_channel.h + +/home/sh/Downloads/hackrf/codec2/src/vhf_frame_c2.c +stdio.h +- +stdint.h +- +stdlib.h +- +string.h +- +freedv_vhf_framing.h +/home/sh/Downloads/hackrf/codec2/src/freedv_vhf_framing.h + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/vhf_frame_c2.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/vhf_frame_c2.dir/DependInfo.cmake new file mode 100644 index 0000000..fc7e78a --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/vhf_frame_c2.dir/DependInfo.cmake @@ -0,0 +1,29 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/src/vhf_frame_c2.c" "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/vhf_frame_c2.dir/vhf_frame_c2.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "GIT_HASH=\"df2ed16c\"" + "_GNU_SOURCE=1" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/DependInfo.cmake" + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/vhf_frame_c2.dir/build.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/vhf_frame_c2.dir/build.make new file mode 100644 index 0000000..0a2a20a --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/vhf_frame_c2.dir/build.make @@ -0,0 +1,99 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include src/CMakeFiles/vhf_frame_c2.dir/depend.make + +# Include the progress variables for this target. +include src/CMakeFiles/vhf_frame_c2.dir/progress.make + +# Include the compile flags for this target's objects. +include src/CMakeFiles/vhf_frame_c2.dir/flags.make + +src/CMakeFiles/vhf_frame_c2.dir/vhf_frame_c2.c.o: src/CMakeFiles/vhf_frame_c2.dir/flags.make +src/CMakeFiles/vhf_frame_c2.dir/vhf_frame_c2.c.o: ../src/vhf_frame_c2.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object src/CMakeFiles/vhf_frame_c2.dir/vhf_frame_c2.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/vhf_frame_c2.dir/vhf_frame_c2.c.o -c /home/sh/Downloads/hackrf/codec2/src/vhf_frame_c2.c + +src/CMakeFiles/vhf_frame_c2.dir/vhf_frame_c2.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/vhf_frame_c2.dir/vhf_frame_c2.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/vhf_frame_c2.c > CMakeFiles/vhf_frame_c2.dir/vhf_frame_c2.c.i + +src/CMakeFiles/vhf_frame_c2.dir/vhf_frame_c2.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/vhf_frame_c2.dir/vhf_frame_c2.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/vhf_frame_c2.c -o CMakeFiles/vhf_frame_c2.dir/vhf_frame_c2.c.s + +# Object files for target vhf_frame_c2 +vhf_frame_c2_OBJECTS = \ +"CMakeFiles/vhf_frame_c2.dir/vhf_frame_c2.c.o" + +# External object files for target vhf_frame_c2 +vhf_frame_c2_EXTERNAL_OBJECTS = + +src/vhf_frame_c2: src/CMakeFiles/vhf_frame_c2.dir/vhf_frame_c2.c.o +src/vhf_frame_c2: src/CMakeFiles/vhf_frame_c2.dir/build.make +src/vhf_frame_c2: src/libcodec2.so.0.9 +src/vhf_frame_c2: src/CMakeFiles/vhf_frame_c2.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking C executable vhf_frame_c2" + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/vhf_frame_c2.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +src/CMakeFiles/vhf_frame_c2.dir/build: src/vhf_frame_c2 + +.PHONY : src/CMakeFiles/vhf_frame_c2.dir/build + +src/CMakeFiles/vhf_frame_c2.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/src && $(CMAKE_COMMAND) -P CMakeFiles/vhf_frame_c2.dir/cmake_clean.cmake +.PHONY : src/CMakeFiles/vhf_frame_c2.dir/clean + +src/CMakeFiles/vhf_frame_c2.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/src /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/src /home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/vhf_frame_c2.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : src/CMakeFiles/vhf_frame_c2.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/vhf_frame_c2.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/vhf_frame_c2.dir/cmake_clean.cmake new file mode 100644 index 0000000..622e76c --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/vhf_frame_c2.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +file(REMOVE_RECURSE + "CMakeFiles/vhf_frame_c2.dir/vhf_frame_c2.c.o" + "vhf_frame_c2.pdb" + "vhf_frame_c2" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/vhf_frame_c2.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/vhf_frame_c2.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/vhf_frame_c2.dir/depend.internal new file mode 100644 index 0000000..109cc1e --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/vhf_frame_c2.dir/depend.internal @@ -0,0 +1,7 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/vhf_frame_c2.dir/vhf_frame_c2.c.o + /home/sh/Downloads/hackrf/codec2/src/freedv_data_channel.h + /home/sh/Downloads/hackrf/codec2/src/freedv_vhf_framing.h + /home/sh/Downloads/hackrf/codec2/src/vhf_frame_c2.c diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/vhf_frame_c2.dir/depend.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/vhf_frame_c2.dir/depend.make new file mode 100644 index 0000000..6d85bb6 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/vhf_frame_c2.dir/depend.make @@ -0,0 +1,7 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +src/CMakeFiles/vhf_frame_c2.dir/vhf_frame_c2.c.o: ../src/freedv_data_channel.h +src/CMakeFiles/vhf_frame_c2.dir/vhf_frame_c2.c.o: ../src/freedv_vhf_framing.h +src/CMakeFiles/vhf_frame_c2.dir/vhf_frame_c2.c.o: ../src/vhf_frame_c2.c + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/vhf_frame_c2.dir/flags.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/vhf_frame_c2.dir/flags.make new file mode 100644 index 0000000..814242c --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/vhf_frame_c2.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DGIT_HASH=\"df2ed16c\" -D_GNU_SOURCE=1 + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/src + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/vhf_frame_c2.dir/link.txt b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/vhf_frame_c2.dir/link.txt new file mode 100644 index 0000000..1687eaa --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/vhf_frame_c2.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/vhf_frame_c2.dir/vhf_frame_c2.c.o -o vhf_frame_c2 -Wl,-rpath,/home/sh/Downloads/hackrf/codec2/build_linux/src -lm libcodec2.so.0.9 -lm diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/vhf_frame_c2.dir/progress.make b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/vhf_frame_c2.dir/progress.make new file mode 100644 index 0000000..6c287f1 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/vhf_frame_c2.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = +CMAKE_PROGRESS_2 = + diff --git a/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/vhf_frame_c2.dir/vhf_frame_c2.c.o b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/vhf_frame_c2.dir/vhf_frame_c2.c.o new file mode 100644 index 0000000..2472be8 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/CMakeFiles/vhf_frame_c2.dir/vhf_frame_c2.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/src/Makefile b/libcodec2-android/src/codec2/build_linux/src/Makefile new file mode 100644 index 0000000..72ee47a --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/Makefile @@ -0,0 +1,4078 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Default target executed when no arguments are given to make. +default_target: all + +.PHONY : default_target + +# Allow only one "make -f Makefile2" at a time, but pass parallelism. +.NOTPARALLEL: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +#============================================================================= +# Targets provided globally by CMake. + +# Special rule for the target install/local +install/local: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..." + /usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake +.PHONY : install/local + +# Special rule for the target install/local +install/local/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..." + /usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake +.PHONY : install/local/fast + +# Special rule for the target install +install: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install + +# Special rule for the target install +install/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install/fast + +# Special rule for the target rebuild_cache +rebuild_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..." + /usr/bin/cmake -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.PHONY : rebuild_cache + +# Special rule for the target rebuild_cache +rebuild_cache/fast: rebuild_cache + +.PHONY : rebuild_cache/fast + +# Special rule for the target test +test: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running tests..." + /usr/bin/ctest --force-new-ctest-process $(ARGS) +.PHONY : test + +# Special rule for the target test +test/fast: test + +.PHONY : test/fast + +# Special rule for the target list_install_components +list_install_components: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Available install components are: \"Unspecified\" \"codec2_devel\"" +.PHONY : list_install_components + +# Special rule for the target list_install_components +list_install_components/fast: list_install_components + +.PHONY : list_install_components/fast + +# Special rule for the target edit_cache +edit_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "No interactive CMake dialog available..." + /usr/bin/cmake -E echo No\ interactive\ CMake\ dialog\ available. +.PHONY : edit_cache + +# Special rule for the target edit_cache +edit_cache/fast: edit_cache + +.PHONY : edit_cache/fast + +# Special rule for the target install/strip +install/strip: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..." + /usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake +.PHONY : install/strip + +# Special rule for the target install/strip +install/strip/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..." + /usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake +.PHONY : install/strip/fast + +# The main all target +all: cmake_check_build_system + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles /home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/progress.marks + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 src/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : all + +# The main clean target +clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 src/clean +.PHONY : clean + +# The main clean target +clean/fast: clean + +.PHONY : clean/fast + +# Prepare targets for installation. +preinstall: all + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 src/preinstall +.PHONY : preinstall + +# Prepare targets for installation. +preinstall/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 src/preinstall +.PHONY : preinstall/fast + +# clear depends +depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1 +.PHONY : depend + +# Convenience name for target. +src/CMakeFiles/ldpc_dec.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/ldpc_dec.dir/rule +.PHONY : src/CMakeFiles/ldpc_dec.dir/rule + +# Convenience name for target. +ldpc_dec: src/CMakeFiles/ldpc_dec.dir/rule + +.PHONY : ldpc_dec + +# fast build rule for target. +ldpc_dec/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/ldpc_dec.dir/build.make src/CMakeFiles/ldpc_dec.dir/build +.PHONY : ldpc_dec/fast + +# Convenience name for target. +src/CMakeFiles/ldpc_enc.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/ldpc_enc.dir/rule +.PHONY : src/CMakeFiles/ldpc_enc.dir/rule + +# Convenience name for target. +ldpc_enc: src/CMakeFiles/ldpc_enc.dir/rule + +.PHONY : ldpc_enc + +# fast build rule for target. +ldpc_enc/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/ldpc_enc.dir/build.make src/CMakeFiles/ldpc_enc.dir/build +.PHONY : ldpc_enc/fast + +# Convenience name for target. +src/CMakeFiles/ldpc_noise.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/ldpc_noise.dir/rule +.PHONY : src/CMakeFiles/ldpc_noise.dir/rule + +# Convenience name for target. +ldpc_noise: src/CMakeFiles/ldpc_noise.dir/rule + +.PHONY : ldpc_noise + +# fast build rule for target. +ldpc_noise/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/ldpc_noise.dir/build.make src/CMakeFiles/ldpc_noise.dir/build +.PHONY : ldpc_noise/fast + +# Convenience name for target. +src/CMakeFiles/tollr.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/tollr.dir/rule +.PHONY : src/CMakeFiles/tollr.dir/rule + +# Convenience name for target. +tollr: src/CMakeFiles/tollr.dir/rule + +.PHONY : tollr + +# fast build rule for target. +tollr/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/tollr.dir/build.make src/CMakeFiles/tollr.dir/build +.PHONY : tollr/fast + +# Convenience name for target. +src/CMakeFiles/cohpsk_ch.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/cohpsk_ch.dir/rule +.PHONY : src/CMakeFiles/cohpsk_ch.dir/rule + +# Convenience name for target. +cohpsk_ch: src/CMakeFiles/cohpsk_ch.dir/rule + +.PHONY : cohpsk_ch + +# fast build rule for target. +cohpsk_ch/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/cohpsk_ch.dir/build.make src/CMakeFiles/cohpsk_ch.dir/build +.PHONY : cohpsk_ch/fast + +# Convenience name for target. +src/CMakeFiles/cohpsk_put_test_bits.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/cohpsk_put_test_bits.dir/rule +.PHONY : src/CMakeFiles/cohpsk_put_test_bits.dir/rule + +# Convenience name for target. +cohpsk_put_test_bits: src/CMakeFiles/cohpsk_put_test_bits.dir/rule + +.PHONY : cohpsk_put_test_bits + +# fast build rule for target. +cohpsk_put_test_bits/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/cohpsk_put_test_bits.dir/build.make src/CMakeFiles/cohpsk_put_test_bits.dir/build +.PHONY : cohpsk_put_test_bits/fast + +# Convenience name for target. +src/CMakeFiles/cohpsk_get_test_bits.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/cohpsk_get_test_bits.dir/rule +.PHONY : src/CMakeFiles/cohpsk_get_test_bits.dir/rule + +# Convenience name for target. +cohpsk_get_test_bits: src/CMakeFiles/cohpsk_get_test_bits.dir/rule + +.PHONY : cohpsk_get_test_bits + +# fast build rule for target. +cohpsk_get_test_bits/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/cohpsk_get_test_bits.dir/build.make src/CMakeFiles/cohpsk_get_test_bits.dir/build +.PHONY : cohpsk_get_test_bits/fast + +# Convenience name for target. +src/CMakeFiles/cohpsk_demod.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/cohpsk_demod.dir/rule +.PHONY : src/CMakeFiles/cohpsk_demod.dir/rule + +# Convenience name for target. +cohpsk_demod: src/CMakeFiles/cohpsk_demod.dir/rule + +.PHONY : cohpsk_demod + +# fast build rule for target. +cohpsk_demod/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/cohpsk_demod.dir/build.make src/CMakeFiles/cohpsk_demod.dir/build +.PHONY : cohpsk_demod/fast + +# Convenience name for target. +src/CMakeFiles/vhf_frame_c2.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/vhf_frame_c2.dir/rule +.PHONY : src/CMakeFiles/vhf_frame_c2.dir/rule + +# Convenience name for target. +vhf_frame_c2: src/CMakeFiles/vhf_frame_c2.dir/rule + +.PHONY : vhf_frame_c2 + +# fast build rule for target. +vhf_frame_c2/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/vhf_frame_c2.dir/build.make src/CMakeFiles/vhf_frame_c2.dir/build +.PHONY : vhf_frame_c2/fast + +# Convenience name for target. +src/CMakeFiles/freedv_data_raw_rx.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/freedv_data_raw_rx.dir/rule +.PHONY : src/CMakeFiles/freedv_data_raw_rx.dir/rule + +# Convenience name for target. +freedv_data_raw_rx: src/CMakeFiles/freedv_data_raw_rx.dir/rule + +.PHONY : freedv_data_raw_rx + +# fast build rule for target. +freedv_data_raw_rx/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/freedv_data_raw_rx.dir/build.make src/CMakeFiles/freedv_data_raw_rx.dir/build +.PHONY : freedv_data_raw_rx/fast + +# Convenience name for target. +src/CMakeFiles/insert_errors.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/insert_errors.dir/rule +.PHONY : src/CMakeFiles/insert_errors.dir/rule + +# Convenience name for target. +insert_errors: src/CMakeFiles/insert_errors.dir/rule + +.PHONY : insert_errors + +# fast build rule for target. +insert_errors/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/insert_errors.dir/build.make src/CMakeFiles/insert_errors.dir/build +.PHONY : insert_errors/fast + +# Convenience name for target. +src/CMakeFiles/fm_demod.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/fm_demod.dir/rule +.PHONY : src/CMakeFiles/fm_demod.dir/rule + +# Convenience name for target. +fm_demod: src/CMakeFiles/fm_demod.dir/rule + +.PHONY : fm_demod + +# fast build rule for target. +fm_demod/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fm_demod.dir/build.make src/CMakeFiles/fm_demod.dir/build +.PHONY : fm_demod/fast + +# Convenience name for target. +src/CMakeFiles/fdmdv_channel.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/fdmdv_channel.dir/rule +.PHONY : src/CMakeFiles/fdmdv_channel.dir/rule + +# Convenience name for target. +fdmdv_channel: src/CMakeFiles/fdmdv_channel.dir/rule + +.PHONY : fdmdv_channel + +# fast build rule for target. +fdmdv_channel/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fdmdv_channel.dir/build.make src/CMakeFiles/fdmdv_channel.dir/build +.PHONY : fdmdv_channel/fast + +# Convenience name for target. +src/CMakeFiles/freedv_data_raw_tx.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/freedv_data_raw_tx.dir/rule +.PHONY : src/CMakeFiles/freedv_data_raw_tx.dir/rule + +# Convenience name for target. +freedv_data_raw_tx: src/CMakeFiles/freedv_data_raw_tx.dir/rule + +.PHONY : freedv_data_raw_tx + +# fast build rule for target. +freedv_data_raw_tx/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/freedv_data_raw_tx.dir/build.make src/CMakeFiles/freedv_data_raw_tx.dir/build +.PHONY : freedv_data_raw_tx/fast + +# Convenience name for target. +src/CMakeFiles/cohpsk_mod.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/cohpsk_mod.dir/rule +.PHONY : src/CMakeFiles/cohpsk_mod.dir/rule + +# Convenience name for target. +cohpsk_mod: src/CMakeFiles/cohpsk_mod.dir/rule + +.PHONY : cohpsk_mod + +# fast build rule for target. +cohpsk_mod/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/cohpsk_mod.dir/build.make src/CMakeFiles/cohpsk_mod.dir/build +.PHONY : cohpsk_mod/fast + +# Convenience name for target. +src/CMakeFiles/c2dec.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/c2dec.dir/rule +.PHONY : src/CMakeFiles/c2dec.dir/rule + +# Convenience name for target. +c2dec: src/CMakeFiles/c2dec.dir/rule + +.PHONY : c2dec + +# fast build rule for target. +c2dec/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/c2dec.dir/build.make src/CMakeFiles/c2dec.dir/build +.PHONY : c2dec/fast + +# Convenience name for target. +src/CMakeFiles/freedv_rx.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/freedv_rx.dir/rule +.PHONY : src/CMakeFiles/freedv_rx.dir/rule + +# Convenience name for target. +freedv_rx: src/CMakeFiles/freedv_rx.dir/rule + +.PHONY : freedv_rx + +# fast build rule for target. +freedv_rx/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/freedv_rx.dir/build.make src/CMakeFiles/freedv_rx.dir/build +.PHONY : freedv_rx/fast + +# Convenience name for target. +src/CMakeFiles/fdmdv_get_test_bits.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/fdmdv_get_test_bits.dir/rule +.PHONY : src/CMakeFiles/fdmdv_get_test_bits.dir/rule + +# Convenience name for target. +fdmdv_get_test_bits: src/CMakeFiles/fdmdv_get_test_bits.dir/rule + +.PHONY : fdmdv_get_test_bits + +# fast build rule for target. +fdmdv_get_test_bits/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fdmdv_get_test_bits.dir/build.make src/CMakeFiles/fdmdv_get_test_bits.dir/build +.PHONY : fdmdv_get_test_bits/fast + +# Convenience name for target. +src/CMakeFiles/c2demo.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/c2demo.dir/rule +.PHONY : src/CMakeFiles/c2demo.dir/rule + +# Convenience name for target. +c2demo: src/CMakeFiles/c2demo.dir/rule + +.PHONY : c2demo + +# fast build rule for target. +c2demo/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/c2demo.dir/build.make src/CMakeFiles/c2demo.dir/build +.PHONY : c2demo/fast + +# Convenience name for target. +src/CMakeFiles/fdmdv_put_test_bits.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/fdmdv_put_test_bits.dir/rule +.PHONY : src/CMakeFiles/fdmdv_put_test_bits.dir/rule + +# Convenience name for target. +fdmdv_put_test_bits: src/CMakeFiles/fdmdv_put_test_bits.dir/rule + +.PHONY : fdmdv_put_test_bits + +# fast build rule for target. +fdmdv_put_test_bits/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fdmdv_put_test_bits.dir/build.make src/CMakeFiles/fdmdv_put_test_bits.dir/build +.PHONY : fdmdv_put_test_bits/fast + +# Convenience name for target. +src/CMakeFiles/codec2.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/codec2.dir/rule +.PHONY : src/CMakeFiles/codec2.dir/rule + +# Convenience name for target. +codec2: src/CMakeFiles/codec2.dir/rule + +.PHONY : codec2 + +# fast build rule for target. +codec2/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/build +.PHONY : codec2/fast + +# Convenience name for target. +src/CMakeFiles/ofdm_get_test_bits.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/ofdm_get_test_bits.dir/rule +.PHONY : src/CMakeFiles/ofdm_get_test_bits.dir/rule + +# Convenience name for target. +ofdm_get_test_bits: src/CMakeFiles/ofdm_get_test_bits.dir/rule + +.PHONY : ofdm_get_test_bits + +# fast build rule for target. +ofdm_get_test_bits/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/ofdm_get_test_bits.dir/build.make src/CMakeFiles/ofdm_get_test_bits.dir/build +.PHONY : ofdm_get_test_bits/fast + +# Convenience name for target. +src/CMakeFiles/freedv_tx.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/freedv_tx.dir/rule +.PHONY : src/CMakeFiles/freedv_tx.dir/rule + +# Convenience name for target. +freedv_tx: src/CMakeFiles/freedv_tx.dir/rule + +.PHONY : freedv_tx + +# fast build rule for target. +freedv_tx/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/freedv_tx.dir/build.make src/CMakeFiles/freedv_tx.dir/build +.PHONY : freedv_tx/fast + +# Convenience name for target. +src/CMakeFiles/c2enc.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/c2enc.dir/rule +.PHONY : src/CMakeFiles/c2enc.dir/rule + +# Convenience name for target. +c2enc: src/CMakeFiles/c2enc.dir/rule + +.PHONY : c2enc + +# fast build rule for target. +c2enc/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/c2enc.dir/build.make src/CMakeFiles/c2enc.dir/build +.PHONY : c2enc/fast + +# Convenience name for target. +src/CMakeFiles/generate_codebook.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/generate_codebook.dir/rule +.PHONY : src/CMakeFiles/generate_codebook.dir/rule + +# Convenience name for target. +generate_codebook: src/CMakeFiles/generate_codebook.dir/rule + +.PHONY : generate_codebook + +# fast build rule for target. +generate_codebook/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/generate_codebook.dir/build.make src/CMakeFiles/generate_codebook.dir/build +.PHONY : generate_codebook/fast + +# Convenience name for target. +src/CMakeFiles/freedv_mixed_tx.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/freedv_mixed_tx.dir/rule +.PHONY : src/CMakeFiles/freedv_mixed_tx.dir/rule + +# Convenience name for target. +freedv_mixed_tx: src/CMakeFiles/freedv_mixed_tx.dir/rule + +.PHONY : freedv_mixed_tx + +# fast build rule for target. +freedv_mixed_tx/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/freedv_mixed_tx.dir/build.make src/CMakeFiles/freedv_mixed_tx.dir/build +.PHONY : freedv_mixed_tx/fast + +# Convenience name for target. +src/CMakeFiles/c2sim.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/c2sim.dir/rule +.PHONY : src/CMakeFiles/c2sim.dir/rule + +# Convenience name for target. +c2sim: src/CMakeFiles/c2sim.dir/rule + +.PHONY : c2sim + +# fast build rule for target. +c2sim/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/c2sim.dir/build.make src/CMakeFiles/c2sim.dir/build +.PHONY : c2sim/fast + +# Convenience name for target. +src/CMakeFiles/fdmdv_demod.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/fdmdv_demod.dir/rule +.PHONY : src/CMakeFiles/fdmdv_demod.dir/rule + +# Convenience name for target. +fdmdv_demod: src/CMakeFiles/fdmdv_demod.dir/rule + +.PHONY : fdmdv_demod + +# fast build rule for target. +fdmdv_demod/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fdmdv_demod.dir/build.make src/CMakeFiles/fdmdv_demod.dir/build +.PHONY : fdmdv_demod/fast + +# Convenience name for target. +src/CMakeFiles/vhf_deframe_c2.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/vhf_deframe_c2.dir/rule +.PHONY : src/CMakeFiles/vhf_deframe_c2.dir/rule + +# Convenience name for target. +vhf_deframe_c2: src/CMakeFiles/vhf_deframe_c2.dir/rule + +.PHONY : vhf_deframe_c2 + +# fast build rule for target. +vhf_deframe_c2/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/vhf_deframe_c2.dir/build.make src/CMakeFiles/vhf_deframe_c2.dir/build +.PHONY : vhf_deframe_c2/fast + +# Convenience name for target. +src/CMakeFiles/fsk_mod.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/fsk_mod.dir/rule +.PHONY : src/CMakeFiles/fsk_mod.dir/rule + +# Convenience name for target. +fsk_mod: src/CMakeFiles/fsk_mod.dir/rule + +.PHONY : fsk_mod + +# fast build rule for target. +fsk_mod/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fsk_mod.dir/build.make src/CMakeFiles/fsk_mod.dir/build +.PHONY : fsk_mod/fast + +# Convenience name for target. +src/CMakeFiles/fsk_put_test_bits.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/fsk_put_test_bits.dir/rule +.PHONY : src/CMakeFiles/fsk_put_test_bits.dir/rule + +# Convenience name for target. +fsk_put_test_bits: src/CMakeFiles/fsk_put_test_bits.dir/rule + +.PHONY : fsk_put_test_bits + +# fast build rule for target. +fsk_put_test_bits/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fsk_put_test_bits.dir/build.make src/CMakeFiles/fsk_put_test_bits.dir/build +.PHONY : fsk_put_test_bits/fast + +# Convenience name for target. +src/CMakeFiles/freedv_data_tx.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/freedv_data_tx.dir/rule +.PHONY : src/CMakeFiles/freedv_data_tx.dir/rule + +# Convenience name for target. +freedv_data_tx: src/CMakeFiles/freedv_data_tx.dir/rule + +.PHONY : freedv_data_tx + +# fast build rule for target. +freedv_data_tx/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/freedv_data_tx.dir/build.make src/CMakeFiles/freedv_data_tx.dir/build +.PHONY : freedv_data_tx/fast + +# Convenience name for target. +src/CMakeFiles/freedv_data_rx.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/freedv_data_rx.dir/rule +.PHONY : src/CMakeFiles/freedv_data_rx.dir/rule + +# Convenience name for target. +freedv_data_rx: src/CMakeFiles/freedv_data_rx.dir/rule + +.PHONY : freedv_data_rx + +# fast build rule for target. +freedv_data_rx/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/freedv_data_rx.dir/build.make src/CMakeFiles/freedv_data_rx.dir/build +.PHONY : freedv_data_rx/fast + +# Convenience name for target. +src/CMakeFiles/freedv_mixed_rx.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/freedv_mixed_rx.dir/rule +.PHONY : src/CMakeFiles/freedv_mixed_rx.dir/rule + +# Convenience name for target. +freedv_mixed_rx: src/CMakeFiles/freedv_mixed_rx.dir/rule + +.PHONY : freedv_mixed_rx + +# fast build rule for target. +freedv_mixed_rx/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/freedv_mixed_rx.dir/build.make src/CMakeFiles/freedv_mixed_rx.dir/build +.PHONY : freedv_mixed_rx/fast + +# Convenience name for target. +src/CMakeFiles/fmfsk_demod.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/fmfsk_demod.dir/rule +.PHONY : src/CMakeFiles/fmfsk_demod.dir/rule + +# Convenience name for target. +fmfsk_demod: src/CMakeFiles/fmfsk_demod.dir/rule + +.PHONY : fmfsk_demod + +# fast build rule for target. +fmfsk_demod/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fmfsk_demod.dir/build.make src/CMakeFiles/fmfsk_demod.dir/build +.PHONY : fmfsk_demod/fast + +# Convenience name for target. +src/CMakeFiles/fsk_mod_ext_vco.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/fsk_mod_ext_vco.dir/rule +.PHONY : src/CMakeFiles/fsk_mod_ext_vco.dir/rule + +# Convenience name for target. +fsk_mod_ext_vco: src/CMakeFiles/fsk_mod_ext_vco.dir/rule + +.PHONY : fsk_mod_ext_vco + +# fast build rule for target. +fsk_mod_ext_vco/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fsk_mod_ext_vco.dir/build.make src/CMakeFiles/fsk_mod_ext_vco.dir/build +.PHONY : fsk_mod_ext_vco/fast + +# Convenience name for target. +src/CMakeFiles/fsk_demod.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/fsk_demod.dir/rule +.PHONY : src/CMakeFiles/fsk_demod.dir/rule + +# Convenience name for target. +fsk_demod: src/CMakeFiles/fsk_demod.dir/rule + +.PHONY : fsk_demod + +# fast build rule for target. +fsk_demod/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fsk_demod.dir/build.make src/CMakeFiles/fsk_demod.dir/build +.PHONY : fsk_demod/fast + +# Convenience name for target. +src/CMakeFiles/fsk_get_test_bits.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/fsk_get_test_bits.dir/rule +.PHONY : src/CMakeFiles/fsk_get_test_bits.dir/rule + +# Convenience name for target. +fsk_get_test_bits: src/CMakeFiles/fsk_get_test_bits.dir/rule + +.PHONY : fsk_get_test_bits + +# fast build rule for target. +fsk_get_test_bits/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fsk_get_test_bits.dir/build.make src/CMakeFiles/fsk_get_test_bits.dir/build +.PHONY : fsk_get_test_bits/fast + +# Convenience name for target. +src/CMakeFiles/framer.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/framer.dir/rule +.PHONY : src/CMakeFiles/framer.dir/rule + +# Convenience name for target. +framer: src/CMakeFiles/framer.dir/rule + +.PHONY : framer + +# fast build rule for target. +framer/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/framer.dir/build.make src/CMakeFiles/framer.dir/build +.PHONY : framer/fast + +# Convenience name for target. +src/CMakeFiles/deframer.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/deframer.dir/rule +.PHONY : src/CMakeFiles/deframer.dir/rule + +# Convenience name for target. +deframer: src/CMakeFiles/deframer.dir/rule + +.PHONY : deframer + +# fast build rule for target. +deframer/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/deframer.dir/build.make src/CMakeFiles/deframer.dir/build +.PHONY : deframer/fast + +# Convenience name for target. +src/CMakeFiles/ofdm_mod.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/ofdm_mod.dir/rule +.PHONY : src/CMakeFiles/ofdm_mod.dir/rule + +# Convenience name for target. +ofdm_mod: src/CMakeFiles/ofdm_mod.dir/rule + +.PHONY : ofdm_mod + +# fast build rule for target. +ofdm_mod/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/ofdm_mod.dir/build.make src/CMakeFiles/ofdm_mod.dir/build +.PHONY : ofdm_mod/fast + +# Convenience name for target. +src/CMakeFiles/fdmdv_mod.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/fdmdv_mod.dir/rule +.PHONY : src/CMakeFiles/fdmdv_mod.dir/rule + +# Convenience name for target. +fdmdv_mod: src/CMakeFiles/fdmdv_mod.dir/rule + +.PHONY : fdmdv_mod + +# fast build rule for target. +fdmdv_mod/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fdmdv_mod.dir/build.make src/CMakeFiles/fdmdv_mod.dir/build +.PHONY : fdmdv_mod/fast + +# Convenience name for target. +src/CMakeFiles/ofdm_demod.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/ofdm_demod.dir/rule +.PHONY : src/CMakeFiles/ofdm_demod.dir/rule + +# Convenience name for target. +ofdm_demod: src/CMakeFiles/ofdm_demod.dir/rule + +.PHONY : ofdm_demod + +# fast build rule for target. +ofdm_demod/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/ofdm_demod.dir/build.make src/CMakeFiles/ofdm_demod.dir/build +.PHONY : ofdm_demod/fast + +# Convenience name for target. +src/CMakeFiles/ofdm_put_test_bits.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/ofdm_put_test_bits.dir/rule +.PHONY : src/CMakeFiles/ofdm_put_test_bits.dir/rule + +# Convenience name for target. +ofdm_put_test_bits: src/CMakeFiles/ofdm_put_test_bits.dir/rule + +.PHONY : ofdm_put_test_bits + +# fast build rule for target. +ofdm_put_test_bits/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/ofdm_put_test_bits.dir/build.make src/CMakeFiles/ofdm_put_test_bits.dir/build +.PHONY : ofdm_put_test_bits/fast + +# Convenience name for target. +src/CMakeFiles/fmfsk_mod.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 src/CMakeFiles/fmfsk_mod.dir/rule +.PHONY : src/CMakeFiles/fmfsk_mod.dir/rule + +# Convenience name for target. +fmfsk_mod: src/CMakeFiles/fmfsk_mod.dir/rule + +.PHONY : fmfsk_mod + +# fast build rule for target. +fmfsk_mod/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fmfsk_mod.dir/build.make src/CMakeFiles/fmfsk_mod.dir/build +.PHONY : fmfsk_mod/fast + +HRA_112_112.o: HRA_112_112.c.o + +.PHONY : HRA_112_112.o + +# target to build an object file +HRA_112_112.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/HRA_112_112.c.o +.PHONY : HRA_112_112.c.o + +HRA_112_112.i: HRA_112_112.c.i + +.PHONY : HRA_112_112.i + +# target to preprocess a source file +HRA_112_112.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/HRA_112_112.c.i +.PHONY : HRA_112_112.c.i + +HRA_112_112.s: HRA_112_112.c.s + +.PHONY : HRA_112_112.s + +# target to generate assembly for a file +HRA_112_112.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/HRA_112_112.c.s +.PHONY : HRA_112_112.c.s + +HRAa_1536_512.o: HRAa_1536_512.c.o + +.PHONY : HRAa_1536_512.o + +# target to build an object file +HRAa_1536_512.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/HRAa_1536_512.c.o +.PHONY : HRAa_1536_512.c.o + +HRAa_1536_512.i: HRAa_1536_512.c.i + +.PHONY : HRAa_1536_512.i + +# target to preprocess a source file +HRAa_1536_512.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/HRAa_1536_512.c.i +.PHONY : HRAa_1536_512.c.i + +HRAa_1536_512.s: HRAa_1536_512.c.s + +.PHONY : HRAa_1536_512.s + +# target to generate assembly for a file +HRAa_1536_512.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/HRAa_1536_512.c.s +.PHONY : HRAa_1536_512.c.s + +HRAb_396_504.o: HRAb_396_504.c.o + +.PHONY : HRAb_396_504.o + +# target to build an object file +HRAb_396_504.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/HRAb_396_504.c.o +.PHONY : HRAb_396_504.c.o + +HRAb_396_504.i: HRAb_396_504.c.i + +.PHONY : HRAb_396_504.i + +# target to preprocess a source file +HRAb_396_504.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/HRAb_396_504.c.i +.PHONY : HRAb_396_504.c.i + +HRAb_396_504.s: HRAb_396_504.c.s + +.PHONY : HRAb_396_504.s + +# target to generate assembly for a file +HRAb_396_504.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/HRAb_396_504.c.s +.PHONY : HRAb_396_504.c.s + +H_128_256_5.o: H_128_256_5.c.o + +.PHONY : H_128_256_5.o + +# target to build an object file +H_128_256_5.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/H_128_256_5.c.o +.PHONY : H_128_256_5.c.o + +H_128_256_5.i: H_128_256_5.c.i + +.PHONY : H_128_256_5.i + +# target to preprocess a source file +H_128_256_5.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/H_128_256_5.c.i +.PHONY : H_128_256_5.c.i + +H_128_256_5.s: H_128_256_5.c.s + +.PHONY : H_128_256_5.s + +# target to generate assembly for a file +H_128_256_5.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/H_128_256_5.c.s +.PHONY : H_128_256_5.c.s + +H_256_512_4.o: H_256_512_4.c.o + +.PHONY : H_256_512_4.o + +# target to build an object file +H_256_512_4.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/H_256_512_4.c.o +.PHONY : H_256_512_4.c.o + +H_256_512_4.i: H_256_512_4.c.i + +.PHONY : H_256_512_4.i + +# target to preprocess a source file +H_256_512_4.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/H_256_512_4.c.i +.PHONY : H_256_512_4.c.i + +H_256_512_4.s: H_256_512_4.c.s + +.PHONY : H_256_512_4.s + +# target to generate assembly for a file +H_256_512_4.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/H_256_512_4.c.s +.PHONY : H_256_512_4.c.s + +H_256_768_22.o: H_256_768_22.c.o + +.PHONY : H_256_768_22.o + +# target to build an object file +H_256_768_22.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/H_256_768_22.c.o +.PHONY : H_256_768_22.c.o + +H_256_768_22.i: H_256_768_22.c.i + +.PHONY : H_256_768_22.i + +# target to preprocess a source file +H_256_768_22.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/H_256_768_22.c.i +.PHONY : H_256_768_22.c.i + +H_256_768_22.s: H_256_768_22.c.s + +.PHONY : H_256_768_22.s + +# target to generate assembly for a file +H_256_768_22.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/H_256_768_22.c.s +.PHONY : H_256_768_22.c.s + +c2dec.o: c2dec.c.o + +.PHONY : c2dec.o + +# target to build an object file +c2dec.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/c2dec.dir/build.make src/CMakeFiles/c2dec.dir/c2dec.c.o +.PHONY : c2dec.c.o + +c2dec.i: c2dec.c.i + +.PHONY : c2dec.i + +# target to preprocess a source file +c2dec.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/c2dec.dir/build.make src/CMakeFiles/c2dec.dir/c2dec.c.i +.PHONY : c2dec.c.i + +c2dec.s: c2dec.c.s + +.PHONY : c2dec.s + +# target to generate assembly for a file +c2dec.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/c2dec.dir/build.make src/CMakeFiles/c2dec.dir/c2dec.c.s +.PHONY : c2dec.c.s + +c2demo.o: c2demo.c.o + +.PHONY : c2demo.o + +# target to build an object file +c2demo.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/c2demo.dir/build.make src/CMakeFiles/c2demo.dir/c2demo.c.o +.PHONY : c2demo.c.o + +c2demo.i: c2demo.c.i + +.PHONY : c2demo.i + +# target to preprocess a source file +c2demo.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/c2demo.dir/build.make src/CMakeFiles/c2demo.dir/c2demo.c.i +.PHONY : c2demo.c.i + +c2demo.s: c2demo.c.s + +.PHONY : c2demo.s + +# target to generate assembly for a file +c2demo.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/c2demo.dir/build.make src/CMakeFiles/c2demo.dir/c2demo.c.s +.PHONY : c2demo.c.s + +c2enc.o: c2enc.c.o + +.PHONY : c2enc.o + +# target to build an object file +c2enc.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/c2enc.dir/build.make src/CMakeFiles/c2enc.dir/c2enc.c.o +.PHONY : c2enc.c.o + +c2enc.i: c2enc.c.i + +.PHONY : c2enc.i + +# target to preprocess a source file +c2enc.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/c2enc.dir/build.make src/CMakeFiles/c2enc.dir/c2enc.c.i +.PHONY : c2enc.c.i + +c2enc.s: c2enc.c.s + +.PHONY : c2enc.s + +# target to generate assembly for a file +c2enc.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/c2enc.dir/build.make src/CMakeFiles/c2enc.dir/c2enc.c.s +.PHONY : c2enc.c.s + +c2sim.o: c2sim.c.o + +.PHONY : c2sim.o + +# target to build an object file +c2sim.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/c2sim.dir/build.make src/CMakeFiles/c2sim.dir/c2sim.c.o +.PHONY : c2sim.c.o + +c2sim.i: c2sim.c.i + +.PHONY : c2sim.i + +# target to preprocess a source file +c2sim.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/c2sim.dir/build.make src/CMakeFiles/c2sim.dir/c2sim.c.i +.PHONY : c2sim.c.i + +c2sim.s: c2sim.c.s + +.PHONY : c2sim.s + +# target to generate assembly for a file +c2sim.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/c2sim.dir/build.make src/CMakeFiles/c2sim.dir/c2sim.c.s +.PHONY : c2sim.c.s + +codebook.o: codebook.c.o + +.PHONY : codebook.o + +# target to build an object file +codebook.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/codebook.c.o +.PHONY : codebook.c.o + +codebook.i: codebook.c.i + +.PHONY : codebook.i + +# target to preprocess a source file +codebook.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/codebook.c.i +.PHONY : codebook.c.i + +codebook.s: codebook.c.s + +.PHONY : codebook.s + +# target to generate assembly for a file +codebook.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/codebook.c.s +.PHONY : codebook.c.s + +codebookd.o: codebookd.c.o + +.PHONY : codebookd.o + +# target to build an object file +codebookd.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/codebookd.c.o +.PHONY : codebookd.c.o + +codebookd.i: codebookd.c.i + +.PHONY : codebookd.i + +# target to preprocess a source file +codebookd.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/codebookd.c.i +.PHONY : codebookd.c.i + +codebookd.s: codebookd.c.s + +.PHONY : codebookd.s + +# target to generate assembly for a file +codebookd.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/codebookd.c.s +.PHONY : codebookd.c.s + +codebookge.o: codebookge.c.o + +.PHONY : codebookge.o + +# target to build an object file +codebookge.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/codebookge.c.o +.PHONY : codebookge.c.o + +codebookge.i: codebookge.c.i + +.PHONY : codebookge.i + +# target to preprocess a source file +codebookge.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/codebookge.c.i +.PHONY : codebookge.c.i + +codebookge.s: codebookge.c.s + +.PHONY : codebookge.s + +# target to generate assembly for a file +codebookge.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/codebookge.c.s +.PHONY : codebookge.c.s + +codebookjvm.o: codebookjvm.c.o + +.PHONY : codebookjvm.o + +# target to build an object file +codebookjvm.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/codebookjvm.c.o +.PHONY : codebookjvm.c.o + +codebookjvm.i: codebookjvm.c.i + +.PHONY : codebookjvm.i + +# target to preprocess a source file +codebookjvm.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/codebookjvm.c.i +.PHONY : codebookjvm.c.i + +codebookjvm.s: codebookjvm.c.s + +.PHONY : codebookjvm.s + +# target to generate assembly for a file +codebookjvm.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/codebookjvm.c.s +.PHONY : codebookjvm.c.s + +codebooknewamp1.o: codebooknewamp1.c.o + +.PHONY : codebooknewamp1.o + +# target to build an object file +codebooknewamp1.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/codebooknewamp1.c.o +.PHONY : codebooknewamp1.c.o + +codebooknewamp1.i: codebooknewamp1.c.i + +.PHONY : codebooknewamp1.i + +# target to preprocess a source file +codebooknewamp1.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/codebooknewamp1.c.i +.PHONY : codebooknewamp1.c.i + +codebooknewamp1.s: codebooknewamp1.c.s + +.PHONY : codebooknewamp1.s + +# target to generate assembly for a file +codebooknewamp1.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/codebooknewamp1.c.s +.PHONY : codebooknewamp1.c.s + +codebooknewamp1_energy.o: codebooknewamp1_energy.c.o + +.PHONY : codebooknewamp1_energy.o + +# target to build an object file +codebooknewamp1_energy.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/codebooknewamp1_energy.c.o +.PHONY : codebooknewamp1_energy.c.o + +codebooknewamp1_energy.i: codebooknewamp1_energy.c.i + +.PHONY : codebooknewamp1_energy.i + +# target to preprocess a source file +codebooknewamp1_energy.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/codebooknewamp1_energy.c.i +.PHONY : codebooknewamp1_energy.c.i + +codebooknewamp1_energy.s: codebooknewamp1_energy.c.s + +.PHONY : codebooknewamp1_energy.s + +# target to generate assembly for a file +codebooknewamp1_energy.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/codebooknewamp1_energy.c.s +.PHONY : codebooknewamp1_energy.c.s + +codebooknewamp2.o: codebooknewamp2.c.o + +.PHONY : codebooknewamp2.o + +# target to build an object file +codebooknewamp2.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/codebooknewamp2.c.o +.PHONY : codebooknewamp2.c.o + +codebooknewamp2.i: codebooknewamp2.c.i + +.PHONY : codebooknewamp2.i + +# target to preprocess a source file +codebooknewamp2.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/codebooknewamp2.c.i +.PHONY : codebooknewamp2.c.i + +codebooknewamp2.s: codebooknewamp2.c.s + +.PHONY : codebooknewamp2.s + +# target to generate assembly for a file +codebooknewamp2.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/codebooknewamp2.c.s +.PHONY : codebooknewamp2.c.s + +codebooknewamp2_energy.o: codebooknewamp2_energy.c.o + +.PHONY : codebooknewamp2_energy.o + +# target to build an object file +codebooknewamp2_energy.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/codebooknewamp2_energy.c.o +.PHONY : codebooknewamp2_energy.c.o + +codebooknewamp2_energy.i: codebooknewamp2_energy.c.i + +.PHONY : codebooknewamp2_energy.i + +# target to preprocess a source file +codebooknewamp2_energy.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/codebooknewamp2_energy.c.i +.PHONY : codebooknewamp2_energy.c.i + +codebooknewamp2_energy.s: codebooknewamp2_energy.c.s + +.PHONY : codebooknewamp2_energy.s + +# target to generate assembly for a file +codebooknewamp2_energy.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/codebooknewamp2_energy.c.s +.PHONY : codebooknewamp2_energy.c.s + +codec2.o: codec2.c.o + +.PHONY : codec2.o + +# target to build an object file +codec2.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/codec2.c.o +.PHONY : codec2.c.o + +codec2.i: codec2.c.i + +.PHONY : codec2.i + +# target to preprocess a source file +codec2.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/codec2.c.i +.PHONY : codec2.c.i + +codec2.s: codec2.c.s + +.PHONY : codec2.s + +# target to generate assembly for a file +codec2.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/codec2.c.s +.PHONY : codec2.c.s + +codec2_fft.o: codec2_fft.c.o + +.PHONY : codec2_fft.o + +# target to build an object file +codec2_fft.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fdmdv_get_test_bits.dir/build.make src/CMakeFiles/fdmdv_get_test_bits.dir/codec2_fft.c.o + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fdmdv_put_test_bits.dir/build.make src/CMakeFiles/fdmdv_put_test_bits.dir/codec2_fft.c.o + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/codec2_fft.c.o + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fdmdv_demod.dir/build.make src/CMakeFiles/fdmdv_demod.dir/codec2_fft.c.o + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fdmdv_mod.dir/build.make src/CMakeFiles/fdmdv_mod.dir/codec2_fft.c.o +.PHONY : codec2_fft.c.o + +codec2_fft.i: codec2_fft.c.i + +.PHONY : codec2_fft.i + +# target to preprocess a source file +codec2_fft.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fdmdv_get_test_bits.dir/build.make src/CMakeFiles/fdmdv_get_test_bits.dir/codec2_fft.c.i + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fdmdv_put_test_bits.dir/build.make src/CMakeFiles/fdmdv_put_test_bits.dir/codec2_fft.c.i + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/codec2_fft.c.i + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fdmdv_demod.dir/build.make src/CMakeFiles/fdmdv_demod.dir/codec2_fft.c.i + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fdmdv_mod.dir/build.make src/CMakeFiles/fdmdv_mod.dir/codec2_fft.c.i +.PHONY : codec2_fft.c.i + +codec2_fft.s: codec2_fft.c.s + +.PHONY : codec2_fft.s + +# target to generate assembly for a file +codec2_fft.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fdmdv_get_test_bits.dir/build.make src/CMakeFiles/fdmdv_get_test_bits.dir/codec2_fft.c.s + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fdmdv_put_test_bits.dir/build.make src/CMakeFiles/fdmdv_put_test_bits.dir/codec2_fft.c.s + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/codec2_fft.c.s + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fdmdv_demod.dir/build.make src/CMakeFiles/fdmdv_demod.dir/codec2_fft.c.s + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fdmdv_mod.dir/build.make src/CMakeFiles/fdmdv_mod.dir/codec2_fft.c.s +.PHONY : codec2_fft.c.s + +codec2_fifo.o: codec2_fifo.c.o + +.PHONY : codec2_fifo.o + +# target to build an object file +codec2_fifo.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/codec2_fifo.c.o +.PHONY : codec2_fifo.c.o + +codec2_fifo.i: codec2_fifo.c.i + +.PHONY : codec2_fifo.i + +# target to preprocess a source file +codec2_fifo.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/codec2_fifo.c.i +.PHONY : codec2_fifo.c.i + +codec2_fifo.s: codec2_fifo.c.s + +.PHONY : codec2_fifo.s + +# target to generate assembly for a file +codec2_fifo.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/codec2_fifo.c.s +.PHONY : codec2_fifo.c.s + +cohpsk.o: cohpsk.c.o + +.PHONY : cohpsk.o + +# target to build an object file +cohpsk.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/cohpsk.c.o +.PHONY : cohpsk.c.o + +cohpsk.i: cohpsk.c.i + +.PHONY : cohpsk.i + +# target to preprocess a source file +cohpsk.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/cohpsk.c.i +.PHONY : cohpsk.c.i + +cohpsk.s: cohpsk.c.s + +.PHONY : cohpsk.s + +# target to generate assembly for a file +cohpsk.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/cohpsk.c.s +.PHONY : cohpsk.c.s + +cohpsk_ch.o: cohpsk_ch.c.o + +.PHONY : cohpsk_ch.o + +# target to build an object file +cohpsk_ch.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/cohpsk_ch.dir/build.make src/CMakeFiles/cohpsk_ch.dir/cohpsk_ch.c.o +.PHONY : cohpsk_ch.c.o + +cohpsk_ch.i: cohpsk_ch.c.i + +.PHONY : cohpsk_ch.i + +# target to preprocess a source file +cohpsk_ch.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/cohpsk_ch.dir/build.make src/CMakeFiles/cohpsk_ch.dir/cohpsk_ch.c.i +.PHONY : cohpsk_ch.c.i + +cohpsk_ch.s: cohpsk_ch.c.s + +.PHONY : cohpsk_ch.s + +# target to generate assembly for a file +cohpsk_ch.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/cohpsk_ch.dir/build.make src/CMakeFiles/cohpsk_ch.dir/cohpsk_ch.c.s +.PHONY : cohpsk_ch.c.s + +cohpsk_demod.o: cohpsk_demod.c.o + +.PHONY : cohpsk_demod.o + +# target to build an object file +cohpsk_demod.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/cohpsk_demod.dir/build.make src/CMakeFiles/cohpsk_demod.dir/cohpsk_demod.c.o +.PHONY : cohpsk_demod.c.o + +cohpsk_demod.i: cohpsk_demod.c.i + +.PHONY : cohpsk_demod.i + +# target to preprocess a source file +cohpsk_demod.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/cohpsk_demod.dir/build.make src/CMakeFiles/cohpsk_demod.dir/cohpsk_demod.c.i +.PHONY : cohpsk_demod.c.i + +cohpsk_demod.s: cohpsk_demod.c.s + +.PHONY : cohpsk_demod.s + +# target to generate assembly for a file +cohpsk_demod.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/cohpsk_demod.dir/build.make src/CMakeFiles/cohpsk_demod.dir/cohpsk_demod.c.s +.PHONY : cohpsk_demod.c.s + +cohpsk_get_test_bits.o: cohpsk_get_test_bits.c.o + +.PHONY : cohpsk_get_test_bits.o + +# target to build an object file +cohpsk_get_test_bits.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/cohpsk_get_test_bits.dir/build.make src/CMakeFiles/cohpsk_get_test_bits.dir/cohpsk_get_test_bits.c.o +.PHONY : cohpsk_get_test_bits.c.o + +cohpsk_get_test_bits.i: cohpsk_get_test_bits.c.i + +.PHONY : cohpsk_get_test_bits.i + +# target to preprocess a source file +cohpsk_get_test_bits.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/cohpsk_get_test_bits.dir/build.make src/CMakeFiles/cohpsk_get_test_bits.dir/cohpsk_get_test_bits.c.i +.PHONY : cohpsk_get_test_bits.c.i + +cohpsk_get_test_bits.s: cohpsk_get_test_bits.c.s + +.PHONY : cohpsk_get_test_bits.s + +# target to generate assembly for a file +cohpsk_get_test_bits.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/cohpsk_get_test_bits.dir/build.make src/CMakeFiles/cohpsk_get_test_bits.dir/cohpsk_get_test_bits.c.s +.PHONY : cohpsk_get_test_bits.c.s + +cohpsk_mod.o: cohpsk_mod.c.o + +.PHONY : cohpsk_mod.o + +# target to build an object file +cohpsk_mod.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/cohpsk_mod.dir/build.make src/CMakeFiles/cohpsk_mod.dir/cohpsk_mod.c.o +.PHONY : cohpsk_mod.c.o + +cohpsk_mod.i: cohpsk_mod.c.i + +.PHONY : cohpsk_mod.i + +# target to preprocess a source file +cohpsk_mod.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/cohpsk_mod.dir/build.make src/CMakeFiles/cohpsk_mod.dir/cohpsk_mod.c.i +.PHONY : cohpsk_mod.c.i + +cohpsk_mod.s: cohpsk_mod.c.s + +.PHONY : cohpsk_mod.s + +# target to generate assembly for a file +cohpsk_mod.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/cohpsk_mod.dir/build.make src/CMakeFiles/cohpsk_mod.dir/cohpsk_mod.c.s +.PHONY : cohpsk_mod.c.s + +cohpsk_put_test_bits.o: cohpsk_put_test_bits.c.o + +.PHONY : cohpsk_put_test_bits.o + +# target to build an object file +cohpsk_put_test_bits.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/cohpsk_put_test_bits.dir/build.make src/CMakeFiles/cohpsk_put_test_bits.dir/cohpsk_put_test_bits.c.o +.PHONY : cohpsk_put_test_bits.c.o + +cohpsk_put_test_bits.i: cohpsk_put_test_bits.c.i + +.PHONY : cohpsk_put_test_bits.i + +# target to preprocess a source file +cohpsk_put_test_bits.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/cohpsk_put_test_bits.dir/build.make src/CMakeFiles/cohpsk_put_test_bits.dir/cohpsk_put_test_bits.c.i +.PHONY : cohpsk_put_test_bits.c.i + +cohpsk_put_test_bits.s: cohpsk_put_test_bits.c.s + +.PHONY : cohpsk_put_test_bits.s + +# target to generate assembly for a file +cohpsk_put_test_bits.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/cohpsk_put_test_bits.dir/build.make src/CMakeFiles/cohpsk_put_test_bits.dir/cohpsk_put_test_bits.c.s +.PHONY : cohpsk_put_test_bits.c.s + +deframer.o: deframer.c.o + +.PHONY : deframer.o + +# target to build an object file +deframer.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/deframer.dir/build.make src/CMakeFiles/deframer.dir/deframer.c.o +.PHONY : deframer.c.o + +deframer.i: deframer.c.i + +.PHONY : deframer.i + +# target to preprocess a source file +deframer.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/deframer.dir/build.make src/CMakeFiles/deframer.dir/deframer.c.i +.PHONY : deframer.c.i + +deframer.s: deframer.c.s + +.PHONY : deframer.s + +# target to generate assembly for a file +deframer.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/deframer.dir/build.make src/CMakeFiles/deframer.dir/deframer.c.s +.PHONY : deframer.c.s + +dump.o: dump.c.o + +.PHONY : dump.o + +# target to build an object file +dump.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/dump.c.o +.PHONY : dump.c.o + +dump.i: dump.c.i + +.PHONY : dump.i + +# target to preprocess a source file +dump.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/dump.c.i +.PHONY : dump.c.i + +dump.s: dump.c.s + +.PHONY : dump.s + +# target to generate assembly for a file +dump.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/dump.c.s +.PHONY : dump.c.s + +fdmdv.o: fdmdv.c.o + +.PHONY : fdmdv.o + +# target to build an object file +fdmdv.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fdmdv_get_test_bits.dir/build.make src/CMakeFiles/fdmdv_get_test_bits.dir/fdmdv.c.o + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fdmdv_put_test_bits.dir/build.make src/CMakeFiles/fdmdv_put_test_bits.dir/fdmdv.c.o + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/fdmdv.c.o + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fdmdv_demod.dir/build.make src/CMakeFiles/fdmdv_demod.dir/fdmdv.c.o + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fdmdv_mod.dir/build.make src/CMakeFiles/fdmdv_mod.dir/fdmdv.c.o +.PHONY : fdmdv.c.o + +fdmdv.i: fdmdv.c.i + +.PHONY : fdmdv.i + +# target to preprocess a source file +fdmdv.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fdmdv_get_test_bits.dir/build.make src/CMakeFiles/fdmdv_get_test_bits.dir/fdmdv.c.i + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fdmdv_put_test_bits.dir/build.make src/CMakeFiles/fdmdv_put_test_bits.dir/fdmdv.c.i + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/fdmdv.c.i + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fdmdv_demod.dir/build.make src/CMakeFiles/fdmdv_demod.dir/fdmdv.c.i + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fdmdv_mod.dir/build.make src/CMakeFiles/fdmdv_mod.dir/fdmdv.c.i +.PHONY : fdmdv.c.i + +fdmdv.s: fdmdv.c.s + +.PHONY : fdmdv.s + +# target to generate assembly for a file +fdmdv.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fdmdv_get_test_bits.dir/build.make src/CMakeFiles/fdmdv_get_test_bits.dir/fdmdv.c.s + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fdmdv_put_test_bits.dir/build.make src/CMakeFiles/fdmdv_put_test_bits.dir/fdmdv.c.s + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/fdmdv.c.s + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fdmdv_demod.dir/build.make src/CMakeFiles/fdmdv_demod.dir/fdmdv.c.s + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fdmdv_mod.dir/build.make src/CMakeFiles/fdmdv_mod.dir/fdmdv.c.s +.PHONY : fdmdv.c.s + +fdmdv_channel.o: fdmdv_channel.c.o + +.PHONY : fdmdv_channel.o + +# target to build an object file +fdmdv_channel.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fdmdv_channel.dir/build.make src/CMakeFiles/fdmdv_channel.dir/fdmdv_channel.c.o +.PHONY : fdmdv_channel.c.o + +fdmdv_channel.i: fdmdv_channel.c.i + +.PHONY : fdmdv_channel.i + +# target to preprocess a source file +fdmdv_channel.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fdmdv_channel.dir/build.make src/CMakeFiles/fdmdv_channel.dir/fdmdv_channel.c.i +.PHONY : fdmdv_channel.c.i + +fdmdv_channel.s: fdmdv_channel.c.s + +.PHONY : fdmdv_channel.s + +# target to generate assembly for a file +fdmdv_channel.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fdmdv_channel.dir/build.make src/CMakeFiles/fdmdv_channel.dir/fdmdv_channel.c.s +.PHONY : fdmdv_channel.c.s + +fdmdv_demod.o: fdmdv_demod.c.o + +.PHONY : fdmdv_demod.o + +# target to build an object file +fdmdv_demod.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fdmdv_demod.dir/build.make src/CMakeFiles/fdmdv_demod.dir/fdmdv_demod.c.o +.PHONY : fdmdv_demod.c.o + +fdmdv_demod.i: fdmdv_demod.c.i + +.PHONY : fdmdv_demod.i + +# target to preprocess a source file +fdmdv_demod.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fdmdv_demod.dir/build.make src/CMakeFiles/fdmdv_demod.dir/fdmdv_demod.c.i +.PHONY : fdmdv_demod.c.i + +fdmdv_demod.s: fdmdv_demod.c.s + +.PHONY : fdmdv_demod.s + +# target to generate assembly for a file +fdmdv_demod.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fdmdv_demod.dir/build.make src/CMakeFiles/fdmdv_demod.dir/fdmdv_demod.c.s +.PHONY : fdmdv_demod.c.s + +fdmdv_get_test_bits.o: fdmdv_get_test_bits.c.o + +.PHONY : fdmdv_get_test_bits.o + +# target to build an object file +fdmdv_get_test_bits.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fdmdv_get_test_bits.dir/build.make src/CMakeFiles/fdmdv_get_test_bits.dir/fdmdv_get_test_bits.c.o +.PHONY : fdmdv_get_test_bits.c.o + +fdmdv_get_test_bits.i: fdmdv_get_test_bits.c.i + +.PHONY : fdmdv_get_test_bits.i + +# target to preprocess a source file +fdmdv_get_test_bits.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fdmdv_get_test_bits.dir/build.make src/CMakeFiles/fdmdv_get_test_bits.dir/fdmdv_get_test_bits.c.i +.PHONY : fdmdv_get_test_bits.c.i + +fdmdv_get_test_bits.s: fdmdv_get_test_bits.c.s + +.PHONY : fdmdv_get_test_bits.s + +# target to generate assembly for a file +fdmdv_get_test_bits.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fdmdv_get_test_bits.dir/build.make src/CMakeFiles/fdmdv_get_test_bits.dir/fdmdv_get_test_bits.c.s +.PHONY : fdmdv_get_test_bits.c.s + +fdmdv_mod.o: fdmdv_mod.c.o + +.PHONY : fdmdv_mod.o + +# target to build an object file +fdmdv_mod.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fdmdv_mod.dir/build.make src/CMakeFiles/fdmdv_mod.dir/fdmdv_mod.c.o +.PHONY : fdmdv_mod.c.o + +fdmdv_mod.i: fdmdv_mod.c.i + +.PHONY : fdmdv_mod.i + +# target to preprocess a source file +fdmdv_mod.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fdmdv_mod.dir/build.make src/CMakeFiles/fdmdv_mod.dir/fdmdv_mod.c.i +.PHONY : fdmdv_mod.c.i + +fdmdv_mod.s: fdmdv_mod.c.s + +.PHONY : fdmdv_mod.s + +# target to generate assembly for a file +fdmdv_mod.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fdmdv_mod.dir/build.make src/CMakeFiles/fdmdv_mod.dir/fdmdv_mod.c.s +.PHONY : fdmdv_mod.c.s + +fdmdv_put_test_bits.o: fdmdv_put_test_bits.c.o + +.PHONY : fdmdv_put_test_bits.o + +# target to build an object file +fdmdv_put_test_bits.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fdmdv_put_test_bits.dir/build.make src/CMakeFiles/fdmdv_put_test_bits.dir/fdmdv_put_test_bits.c.o +.PHONY : fdmdv_put_test_bits.c.o + +fdmdv_put_test_bits.i: fdmdv_put_test_bits.c.i + +.PHONY : fdmdv_put_test_bits.i + +# target to preprocess a source file +fdmdv_put_test_bits.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fdmdv_put_test_bits.dir/build.make src/CMakeFiles/fdmdv_put_test_bits.dir/fdmdv_put_test_bits.c.i +.PHONY : fdmdv_put_test_bits.c.i + +fdmdv_put_test_bits.s: fdmdv_put_test_bits.c.s + +.PHONY : fdmdv_put_test_bits.s + +# target to generate assembly for a file +fdmdv_put_test_bits.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fdmdv_put_test_bits.dir/build.make src/CMakeFiles/fdmdv_put_test_bits.dir/fdmdv_put_test_bits.c.s +.PHONY : fdmdv_put_test_bits.c.s + +filter.o: filter.c.o + +.PHONY : filter.o + +# target to build an object file +filter.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/filter.c.o +.PHONY : filter.c.o + +filter.i: filter.c.i + +.PHONY : filter.i + +# target to preprocess a source file +filter.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/filter.c.i +.PHONY : filter.c.i + +filter.s: filter.c.s + +.PHONY : filter.s + +# target to generate assembly for a file +filter.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/filter.c.s +.PHONY : filter.c.s + +fm.o: fm.c.o + +.PHONY : fm.o + +# target to build an object file +fm.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fm_demod.dir/build.make src/CMakeFiles/fm_demod.dir/fm.c.o + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/fm.c.o +.PHONY : fm.c.o + +fm.i: fm.c.i + +.PHONY : fm.i + +# target to preprocess a source file +fm.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fm_demod.dir/build.make src/CMakeFiles/fm_demod.dir/fm.c.i + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/fm.c.i +.PHONY : fm.c.i + +fm.s: fm.c.s + +.PHONY : fm.s + +# target to generate assembly for a file +fm.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fm_demod.dir/build.make src/CMakeFiles/fm_demod.dir/fm.c.s + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/fm.c.s +.PHONY : fm.c.s + +fm_demod.o: fm_demod.c.o + +.PHONY : fm_demod.o + +# target to build an object file +fm_demod.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fm_demod.dir/build.make src/CMakeFiles/fm_demod.dir/fm_demod.c.o +.PHONY : fm_demod.c.o + +fm_demod.i: fm_demod.c.i + +.PHONY : fm_demod.i + +# target to preprocess a source file +fm_demod.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fm_demod.dir/build.make src/CMakeFiles/fm_demod.dir/fm_demod.c.i +.PHONY : fm_demod.c.i + +fm_demod.s: fm_demod.c.s + +.PHONY : fm_demod.s + +# target to generate assembly for a file +fm_demod.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fm_demod.dir/build.make src/CMakeFiles/fm_demod.dir/fm_demod.c.s +.PHONY : fm_demod.c.s + +fmfsk.o: fmfsk.c.o + +.PHONY : fmfsk.o + +# target to build an object file +fmfsk.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/fmfsk.c.o +.PHONY : fmfsk.c.o + +fmfsk.i: fmfsk.c.i + +.PHONY : fmfsk.i + +# target to preprocess a source file +fmfsk.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/fmfsk.c.i +.PHONY : fmfsk.c.i + +fmfsk.s: fmfsk.c.s + +.PHONY : fmfsk.s + +# target to generate assembly for a file +fmfsk.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/fmfsk.c.s +.PHONY : fmfsk.c.s + +fmfsk_demod.o: fmfsk_demod.c.o + +.PHONY : fmfsk_demod.o + +# target to build an object file +fmfsk_demod.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fmfsk_demod.dir/build.make src/CMakeFiles/fmfsk_demod.dir/fmfsk_demod.c.o +.PHONY : fmfsk_demod.c.o + +fmfsk_demod.i: fmfsk_demod.c.i + +.PHONY : fmfsk_demod.i + +# target to preprocess a source file +fmfsk_demod.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fmfsk_demod.dir/build.make src/CMakeFiles/fmfsk_demod.dir/fmfsk_demod.c.i +.PHONY : fmfsk_demod.c.i + +fmfsk_demod.s: fmfsk_demod.c.s + +.PHONY : fmfsk_demod.s + +# target to generate assembly for a file +fmfsk_demod.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fmfsk_demod.dir/build.make src/CMakeFiles/fmfsk_demod.dir/fmfsk_demod.c.s +.PHONY : fmfsk_demod.c.s + +fmfsk_mod.o: fmfsk_mod.c.o + +.PHONY : fmfsk_mod.o + +# target to build an object file +fmfsk_mod.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fmfsk_mod.dir/build.make src/CMakeFiles/fmfsk_mod.dir/fmfsk_mod.c.o +.PHONY : fmfsk_mod.c.o + +fmfsk_mod.i: fmfsk_mod.c.i + +.PHONY : fmfsk_mod.i + +# target to preprocess a source file +fmfsk_mod.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fmfsk_mod.dir/build.make src/CMakeFiles/fmfsk_mod.dir/fmfsk_mod.c.i +.PHONY : fmfsk_mod.c.i + +fmfsk_mod.s: fmfsk_mod.c.s + +.PHONY : fmfsk_mod.s + +# target to generate assembly for a file +fmfsk_mod.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fmfsk_mod.dir/build.make src/CMakeFiles/fmfsk_mod.dir/fmfsk_mod.c.s +.PHONY : fmfsk_mod.c.s + +framer.o: framer.c.o + +.PHONY : framer.o + +# target to build an object file +framer.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/framer.dir/build.make src/CMakeFiles/framer.dir/framer.c.o +.PHONY : framer.c.o + +framer.i: framer.c.i + +.PHONY : framer.i + +# target to preprocess a source file +framer.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/framer.dir/build.make src/CMakeFiles/framer.dir/framer.c.i +.PHONY : framer.c.i + +framer.s: framer.c.s + +.PHONY : framer.s + +# target to generate assembly for a file +framer.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/framer.dir/build.make src/CMakeFiles/framer.dir/framer.c.s +.PHONY : framer.c.s + +freedv_1600.o: freedv_1600.c.o + +.PHONY : freedv_1600.o + +# target to build an object file +freedv_1600.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/freedv_1600.c.o +.PHONY : freedv_1600.c.o + +freedv_1600.i: freedv_1600.c.i + +.PHONY : freedv_1600.i + +# target to preprocess a source file +freedv_1600.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/freedv_1600.c.i +.PHONY : freedv_1600.c.i + +freedv_1600.s: freedv_1600.c.s + +.PHONY : freedv_1600.s + +# target to generate assembly for a file +freedv_1600.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/freedv_1600.c.s +.PHONY : freedv_1600.c.s + +freedv_2020.o: freedv_2020.c.o + +.PHONY : freedv_2020.o + +# target to build an object file +freedv_2020.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/freedv_2020.c.o +.PHONY : freedv_2020.c.o + +freedv_2020.i: freedv_2020.c.i + +.PHONY : freedv_2020.i + +# target to preprocess a source file +freedv_2020.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/freedv_2020.c.i +.PHONY : freedv_2020.c.i + +freedv_2020.s: freedv_2020.c.s + +.PHONY : freedv_2020.s + +# target to generate assembly for a file +freedv_2020.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/freedv_2020.c.s +.PHONY : freedv_2020.c.s + +freedv_700.o: freedv_700.c.o + +.PHONY : freedv_700.o + +# target to build an object file +freedv_700.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/freedv_700.c.o +.PHONY : freedv_700.c.o + +freedv_700.i: freedv_700.c.i + +.PHONY : freedv_700.i + +# target to preprocess a source file +freedv_700.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/freedv_700.c.i +.PHONY : freedv_700.c.i + +freedv_700.s: freedv_700.c.s + +.PHONY : freedv_700.s + +# target to generate assembly for a file +freedv_700.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/freedv_700.c.s +.PHONY : freedv_700.c.s + +freedv_api.o: freedv_api.c.o + +.PHONY : freedv_api.o + +# target to build an object file +freedv_api.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/freedv_api.c.o +.PHONY : freedv_api.c.o + +freedv_api.i: freedv_api.c.i + +.PHONY : freedv_api.i + +# target to preprocess a source file +freedv_api.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/freedv_api.c.i +.PHONY : freedv_api.c.i + +freedv_api.s: freedv_api.c.s + +.PHONY : freedv_api.s + +# target to generate assembly for a file +freedv_api.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/freedv_api.c.s +.PHONY : freedv_api.c.s + +freedv_data_channel.o: freedv_data_channel.c.o + +.PHONY : freedv_data_channel.o + +# target to build an object file +freedv_data_channel.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/freedv_data_channel.c.o +.PHONY : freedv_data_channel.c.o + +freedv_data_channel.i: freedv_data_channel.c.i + +.PHONY : freedv_data_channel.i + +# target to preprocess a source file +freedv_data_channel.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/freedv_data_channel.c.i +.PHONY : freedv_data_channel.c.i + +freedv_data_channel.s: freedv_data_channel.c.s + +.PHONY : freedv_data_channel.s + +# target to generate assembly for a file +freedv_data_channel.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/freedv_data_channel.c.s +.PHONY : freedv_data_channel.c.s + +freedv_data_raw_rx.o: freedv_data_raw_rx.c.o + +.PHONY : freedv_data_raw_rx.o + +# target to build an object file +freedv_data_raw_rx.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/freedv_data_raw_rx.dir/build.make src/CMakeFiles/freedv_data_raw_rx.dir/freedv_data_raw_rx.c.o +.PHONY : freedv_data_raw_rx.c.o + +freedv_data_raw_rx.i: freedv_data_raw_rx.c.i + +.PHONY : freedv_data_raw_rx.i + +# target to preprocess a source file +freedv_data_raw_rx.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/freedv_data_raw_rx.dir/build.make src/CMakeFiles/freedv_data_raw_rx.dir/freedv_data_raw_rx.c.i +.PHONY : freedv_data_raw_rx.c.i + +freedv_data_raw_rx.s: freedv_data_raw_rx.c.s + +.PHONY : freedv_data_raw_rx.s + +# target to generate assembly for a file +freedv_data_raw_rx.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/freedv_data_raw_rx.dir/build.make src/CMakeFiles/freedv_data_raw_rx.dir/freedv_data_raw_rx.c.s +.PHONY : freedv_data_raw_rx.c.s + +freedv_data_raw_tx.o: freedv_data_raw_tx.c.o + +.PHONY : freedv_data_raw_tx.o + +# target to build an object file +freedv_data_raw_tx.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/freedv_data_raw_tx.dir/build.make src/CMakeFiles/freedv_data_raw_tx.dir/freedv_data_raw_tx.c.o +.PHONY : freedv_data_raw_tx.c.o + +freedv_data_raw_tx.i: freedv_data_raw_tx.c.i + +.PHONY : freedv_data_raw_tx.i + +# target to preprocess a source file +freedv_data_raw_tx.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/freedv_data_raw_tx.dir/build.make src/CMakeFiles/freedv_data_raw_tx.dir/freedv_data_raw_tx.c.i +.PHONY : freedv_data_raw_tx.c.i + +freedv_data_raw_tx.s: freedv_data_raw_tx.c.s + +.PHONY : freedv_data_raw_tx.s + +# target to generate assembly for a file +freedv_data_raw_tx.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/freedv_data_raw_tx.dir/build.make src/CMakeFiles/freedv_data_raw_tx.dir/freedv_data_raw_tx.c.s +.PHONY : freedv_data_raw_tx.c.s + +freedv_data_rx.o: freedv_data_rx.c.o + +.PHONY : freedv_data_rx.o + +# target to build an object file +freedv_data_rx.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/freedv_data_rx.dir/build.make src/CMakeFiles/freedv_data_rx.dir/freedv_data_rx.c.o +.PHONY : freedv_data_rx.c.o + +freedv_data_rx.i: freedv_data_rx.c.i + +.PHONY : freedv_data_rx.i + +# target to preprocess a source file +freedv_data_rx.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/freedv_data_rx.dir/build.make src/CMakeFiles/freedv_data_rx.dir/freedv_data_rx.c.i +.PHONY : freedv_data_rx.c.i + +freedv_data_rx.s: freedv_data_rx.c.s + +.PHONY : freedv_data_rx.s + +# target to generate assembly for a file +freedv_data_rx.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/freedv_data_rx.dir/build.make src/CMakeFiles/freedv_data_rx.dir/freedv_data_rx.c.s +.PHONY : freedv_data_rx.c.s + +freedv_data_tx.o: freedv_data_tx.c.o + +.PHONY : freedv_data_tx.o + +# target to build an object file +freedv_data_tx.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/freedv_data_tx.dir/build.make src/CMakeFiles/freedv_data_tx.dir/freedv_data_tx.c.o +.PHONY : freedv_data_tx.c.o + +freedv_data_tx.i: freedv_data_tx.c.i + +.PHONY : freedv_data_tx.i + +# target to preprocess a source file +freedv_data_tx.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/freedv_data_tx.dir/build.make src/CMakeFiles/freedv_data_tx.dir/freedv_data_tx.c.i +.PHONY : freedv_data_tx.c.i + +freedv_data_tx.s: freedv_data_tx.c.s + +.PHONY : freedv_data_tx.s + +# target to generate assembly for a file +freedv_data_tx.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/freedv_data_tx.dir/build.make src/CMakeFiles/freedv_data_tx.dir/freedv_data_tx.c.s +.PHONY : freedv_data_tx.c.s + +freedv_fsk.o: freedv_fsk.c.o + +.PHONY : freedv_fsk.o + +# target to build an object file +freedv_fsk.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/freedv_fsk.c.o +.PHONY : freedv_fsk.c.o + +freedv_fsk.i: freedv_fsk.c.i + +.PHONY : freedv_fsk.i + +# target to preprocess a source file +freedv_fsk.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/freedv_fsk.c.i +.PHONY : freedv_fsk.c.i + +freedv_fsk.s: freedv_fsk.c.s + +.PHONY : freedv_fsk.s + +# target to generate assembly for a file +freedv_fsk.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/freedv_fsk.c.s +.PHONY : freedv_fsk.c.s + +freedv_mixed_rx.o: freedv_mixed_rx.c.o + +.PHONY : freedv_mixed_rx.o + +# target to build an object file +freedv_mixed_rx.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/freedv_mixed_rx.dir/build.make src/CMakeFiles/freedv_mixed_rx.dir/freedv_mixed_rx.c.o +.PHONY : freedv_mixed_rx.c.o + +freedv_mixed_rx.i: freedv_mixed_rx.c.i + +.PHONY : freedv_mixed_rx.i + +# target to preprocess a source file +freedv_mixed_rx.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/freedv_mixed_rx.dir/build.make src/CMakeFiles/freedv_mixed_rx.dir/freedv_mixed_rx.c.i +.PHONY : freedv_mixed_rx.c.i + +freedv_mixed_rx.s: freedv_mixed_rx.c.s + +.PHONY : freedv_mixed_rx.s + +# target to generate assembly for a file +freedv_mixed_rx.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/freedv_mixed_rx.dir/build.make src/CMakeFiles/freedv_mixed_rx.dir/freedv_mixed_rx.c.s +.PHONY : freedv_mixed_rx.c.s + +freedv_mixed_tx.o: freedv_mixed_tx.c.o + +.PHONY : freedv_mixed_tx.o + +# target to build an object file +freedv_mixed_tx.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/freedv_mixed_tx.dir/build.make src/CMakeFiles/freedv_mixed_tx.dir/freedv_mixed_tx.c.o +.PHONY : freedv_mixed_tx.c.o + +freedv_mixed_tx.i: freedv_mixed_tx.c.i + +.PHONY : freedv_mixed_tx.i + +# target to preprocess a source file +freedv_mixed_tx.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/freedv_mixed_tx.dir/build.make src/CMakeFiles/freedv_mixed_tx.dir/freedv_mixed_tx.c.i +.PHONY : freedv_mixed_tx.c.i + +freedv_mixed_tx.s: freedv_mixed_tx.c.s + +.PHONY : freedv_mixed_tx.s + +# target to generate assembly for a file +freedv_mixed_tx.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/freedv_mixed_tx.dir/build.make src/CMakeFiles/freedv_mixed_tx.dir/freedv_mixed_tx.c.s +.PHONY : freedv_mixed_tx.c.s + +freedv_rx.o: freedv_rx.c.o + +.PHONY : freedv_rx.o + +# target to build an object file +freedv_rx.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/freedv_rx.dir/build.make src/CMakeFiles/freedv_rx.dir/freedv_rx.c.o +.PHONY : freedv_rx.c.o + +freedv_rx.i: freedv_rx.c.i + +.PHONY : freedv_rx.i + +# target to preprocess a source file +freedv_rx.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/freedv_rx.dir/build.make src/CMakeFiles/freedv_rx.dir/freedv_rx.c.i +.PHONY : freedv_rx.c.i + +freedv_rx.s: freedv_rx.c.s + +.PHONY : freedv_rx.s + +# target to generate assembly for a file +freedv_rx.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/freedv_rx.dir/build.make src/CMakeFiles/freedv_rx.dir/freedv_rx.c.s +.PHONY : freedv_rx.c.s + +freedv_tx.o: freedv_tx.c.o + +.PHONY : freedv_tx.o + +# target to build an object file +freedv_tx.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/freedv_tx.dir/build.make src/CMakeFiles/freedv_tx.dir/freedv_tx.c.o +.PHONY : freedv_tx.c.o + +freedv_tx.i: freedv_tx.c.i + +.PHONY : freedv_tx.i + +# target to preprocess a source file +freedv_tx.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/freedv_tx.dir/build.make src/CMakeFiles/freedv_tx.dir/freedv_tx.c.i +.PHONY : freedv_tx.c.i + +freedv_tx.s: freedv_tx.c.s + +.PHONY : freedv_tx.s + +# target to generate assembly for a file +freedv_tx.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/freedv_tx.dir/build.make src/CMakeFiles/freedv_tx.dir/freedv_tx.c.s +.PHONY : freedv_tx.c.s + +freedv_vhf_framing.o: freedv_vhf_framing.c.o + +.PHONY : freedv_vhf_framing.o + +# target to build an object file +freedv_vhf_framing.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/freedv_vhf_framing.c.o +.PHONY : freedv_vhf_framing.c.o + +freedv_vhf_framing.i: freedv_vhf_framing.c.i + +.PHONY : freedv_vhf_framing.i + +# target to preprocess a source file +freedv_vhf_framing.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/freedv_vhf_framing.c.i +.PHONY : freedv_vhf_framing.c.i + +freedv_vhf_framing.s: freedv_vhf_framing.c.s + +.PHONY : freedv_vhf_framing.s + +# target to generate assembly for a file +freedv_vhf_framing.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/freedv_vhf_framing.c.s +.PHONY : freedv_vhf_framing.c.s + +fsk.o: fsk.c.o + +.PHONY : fsk.o + +# target to build an object file +fsk.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/fsk.c.o +.PHONY : fsk.c.o + +fsk.i: fsk.c.i + +.PHONY : fsk.i + +# target to preprocess a source file +fsk.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/fsk.c.i +.PHONY : fsk.c.i + +fsk.s: fsk.c.s + +.PHONY : fsk.s + +# target to generate assembly for a file +fsk.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/fsk.c.s +.PHONY : fsk.c.s + +fsk_demod.o: fsk_demod.c.o + +.PHONY : fsk_demod.o + +# target to build an object file +fsk_demod.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fsk_demod.dir/build.make src/CMakeFiles/fsk_demod.dir/fsk_demod.c.o +.PHONY : fsk_demod.c.o + +fsk_demod.i: fsk_demod.c.i + +.PHONY : fsk_demod.i + +# target to preprocess a source file +fsk_demod.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fsk_demod.dir/build.make src/CMakeFiles/fsk_demod.dir/fsk_demod.c.i +.PHONY : fsk_demod.c.i + +fsk_demod.s: fsk_demod.c.s + +.PHONY : fsk_demod.s + +# target to generate assembly for a file +fsk_demod.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fsk_demod.dir/build.make src/CMakeFiles/fsk_demod.dir/fsk_demod.c.s +.PHONY : fsk_demod.c.s + +fsk_get_test_bits.o: fsk_get_test_bits.c.o + +.PHONY : fsk_get_test_bits.o + +# target to build an object file +fsk_get_test_bits.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fsk_get_test_bits.dir/build.make src/CMakeFiles/fsk_get_test_bits.dir/fsk_get_test_bits.c.o +.PHONY : fsk_get_test_bits.c.o + +fsk_get_test_bits.i: fsk_get_test_bits.c.i + +.PHONY : fsk_get_test_bits.i + +# target to preprocess a source file +fsk_get_test_bits.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fsk_get_test_bits.dir/build.make src/CMakeFiles/fsk_get_test_bits.dir/fsk_get_test_bits.c.i +.PHONY : fsk_get_test_bits.c.i + +fsk_get_test_bits.s: fsk_get_test_bits.c.s + +.PHONY : fsk_get_test_bits.s + +# target to generate assembly for a file +fsk_get_test_bits.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fsk_get_test_bits.dir/build.make src/CMakeFiles/fsk_get_test_bits.dir/fsk_get_test_bits.c.s +.PHONY : fsk_get_test_bits.c.s + +fsk_mod.o: fsk_mod.c.o + +.PHONY : fsk_mod.o + +# target to build an object file +fsk_mod.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fsk_mod.dir/build.make src/CMakeFiles/fsk_mod.dir/fsk_mod.c.o +.PHONY : fsk_mod.c.o + +fsk_mod.i: fsk_mod.c.i + +.PHONY : fsk_mod.i + +# target to preprocess a source file +fsk_mod.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fsk_mod.dir/build.make src/CMakeFiles/fsk_mod.dir/fsk_mod.c.i +.PHONY : fsk_mod.c.i + +fsk_mod.s: fsk_mod.c.s + +.PHONY : fsk_mod.s + +# target to generate assembly for a file +fsk_mod.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fsk_mod.dir/build.make src/CMakeFiles/fsk_mod.dir/fsk_mod.c.s +.PHONY : fsk_mod.c.s + +fsk_mod_ext_vco.o: fsk_mod_ext_vco.c.o + +.PHONY : fsk_mod_ext_vco.o + +# target to build an object file +fsk_mod_ext_vco.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fsk_mod_ext_vco.dir/build.make src/CMakeFiles/fsk_mod_ext_vco.dir/fsk_mod_ext_vco.c.o +.PHONY : fsk_mod_ext_vco.c.o + +fsk_mod_ext_vco.i: fsk_mod_ext_vco.c.i + +.PHONY : fsk_mod_ext_vco.i + +# target to preprocess a source file +fsk_mod_ext_vco.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fsk_mod_ext_vco.dir/build.make src/CMakeFiles/fsk_mod_ext_vco.dir/fsk_mod_ext_vco.c.i +.PHONY : fsk_mod_ext_vco.c.i + +fsk_mod_ext_vco.s: fsk_mod_ext_vco.c.s + +.PHONY : fsk_mod_ext_vco.s + +# target to generate assembly for a file +fsk_mod_ext_vco.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fsk_mod_ext_vco.dir/build.make src/CMakeFiles/fsk_mod_ext_vco.dir/fsk_mod_ext_vco.c.s +.PHONY : fsk_mod_ext_vco.c.s + +fsk_put_test_bits.o: fsk_put_test_bits.c.o + +.PHONY : fsk_put_test_bits.o + +# target to build an object file +fsk_put_test_bits.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fsk_put_test_bits.dir/build.make src/CMakeFiles/fsk_put_test_bits.dir/fsk_put_test_bits.c.o +.PHONY : fsk_put_test_bits.c.o + +fsk_put_test_bits.i: fsk_put_test_bits.c.i + +.PHONY : fsk_put_test_bits.i + +# target to preprocess a source file +fsk_put_test_bits.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fsk_put_test_bits.dir/build.make src/CMakeFiles/fsk_put_test_bits.dir/fsk_put_test_bits.c.i +.PHONY : fsk_put_test_bits.c.i + +fsk_put_test_bits.s: fsk_put_test_bits.c.s + +.PHONY : fsk_put_test_bits.s + +# target to generate assembly for a file +fsk_put_test_bits.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fsk_put_test_bits.dir/build.make src/CMakeFiles/fsk_put_test_bits.dir/fsk_put_test_bits.c.s +.PHONY : fsk_put_test_bits.c.s + +generate_codebook.o: generate_codebook.c.o + +.PHONY : generate_codebook.o + +# target to build an object file +generate_codebook.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/generate_codebook.dir/build.make src/CMakeFiles/generate_codebook.dir/generate_codebook.c.o +.PHONY : generate_codebook.c.o + +generate_codebook.i: generate_codebook.c.i + +.PHONY : generate_codebook.i + +# target to preprocess a source file +generate_codebook.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/generate_codebook.dir/build.make src/CMakeFiles/generate_codebook.dir/generate_codebook.c.i +.PHONY : generate_codebook.c.i + +generate_codebook.s: generate_codebook.c.s + +.PHONY : generate_codebook.s + +# target to generate assembly for a file +generate_codebook.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/generate_codebook.dir/build.make src/CMakeFiles/generate_codebook.dir/generate_codebook.c.s +.PHONY : generate_codebook.c.s + +golay23.o: golay23.c.o + +.PHONY : golay23.o + +# target to build an object file +golay23.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/golay23.c.o +.PHONY : golay23.c.o + +golay23.i: golay23.c.i + +.PHONY : golay23.i + +# target to preprocess a source file +golay23.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/golay23.c.i +.PHONY : golay23.c.i + +golay23.s: golay23.c.s + +.PHONY : golay23.s + +# target to generate assembly for a file +golay23.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/golay23.c.s +.PHONY : golay23.c.s + +gp_interleaver.o: gp_interleaver.c.o + +.PHONY : gp_interleaver.o + +# target to build an object file +gp_interleaver.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/gp_interleaver.c.o +.PHONY : gp_interleaver.c.o + +gp_interleaver.i: gp_interleaver.c.i + +.PHONY : gp_interleaver.i + +# target to preprocess a source file +gp_interleaver.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/gp_interleaver.c.i +.PHONY : gp_interleaver.c.i + +gp_interleaver.s: gp_interleaver.c.s + +.PHONY : gp_interleaver.s + +# target to generate assembly for a file +gp_interleaver.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/gp_interleaver.c.s +.PHONY : gp_interleaver.c.s + +insert_errors.o: insert_errors.c.o + +.PHONY : insert_errors.o + +# target to build an object file +insert_errors.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/insert_errors.dir/build.make src/CMakeFiles/insert_errors.dir/insert_errors.c.o +.PHONY : insert_errors.c.o + +insert_errors.i: insert_errors.c.i + +.PHONY : insert_errors.i + +# target to preprocess a source file +insert_errors.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/insert_errors.dir/build.make src/CMakeFiles/insert_errors.dir/insert_errors.c.i +.PHONY : insert_errors.c.i + +insert_errors.s: insert_errors.c.s + +.PHONY : insert_errors.s + +# target to generate assembly for a file +insert_errors.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/insert_errors.dir/build.make src/CMakeFiles/insert_errors.dir/insert_errors.c.s +.PHONY : insert_errors.c.s + +interldpc.o: interldpc.c.o + +.PHONY : interldpc.o + +# target to build an object file +interldpc.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/interldpc.c.o +.PHONY : interldpc.c.o + +interldpc.i: interldpc.c.i + +.PHONY : interldpc.i + +# target to preprocess a source file +interldpc.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/interldpc.c.i +.PHONY : interldpc.c.i + +interldpc.s: interldpc.c.s + +.PHONY : interldpc.s + +# target to generate assembly for a file +interldpc.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/interldpc.c.s +.PHONY : interldpc.c.s + +interp.o: interp.c.o + +.PHONY : interp.o + +# target to build an object file +interp.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/interp.c.o +.PHONY : interp.c.o + +interp.i: interp.c.i + +.PHONY : interp.i + +# target to preprocess a source file +interp.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/interp.c.i +.PHONY : interp.c.i + +interp.s: interp.c.s + +.PHONY : interp.s + +# target to generate assembly for a file +interp.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/interp.c.s +.PHONY : interp.c.s + +kiss_fft.o: kiss_fft.c.o + +.PHONY : kiss_fft.o + +# target to build an object file +kiss_fft.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fdmdv_get_test_bits.dir/build.make src/CMakeFiles/fdmdv_get_test_bits.dir/kiss_fft.c.o + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fdmdv_put_test_bits.dir/build.make src/CMakeFiles/fdmdv_put_test_bits.dir/kiss_fft.c.o + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/kiss_fft.c.o + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fdmdv_demod.dir/build.make src/CMakeFiles/fdmdv_demod.dir/kiss_fft.c.o + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fdmdv_mod.dir/build.make src/CMakeFiles/fdmdv_mod.dir/kiss_fft.c.o +.PHONY : kiss_fft.c.o + +kiss_fft.i: kiss_fft.c.i + +.PHONY : kiss_fft.i + +# target to preprocess a source file +kiss_fft.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fdmdv_get_test_bits.dir/build.make src/CMakeFiles/fdmdv_get_test_bits.dir/kiss_fft.c.i + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fdmdv_put_test_bits.dir/build.make src/CMakeFiles/fdmdv_put_test_bits.dir/kiss_fft.c.i + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/kiss_fft.c.i + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fdmdv_demod.dir/build.make src/CMakeFiles/fdmdv_demod.dir/kiss_fft.c.i + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fdmdv_mod.dir/build.make src/CMakeFiles/fdmdv_mod.dir/kiss_fft.c.i +.PHONY : kiss_fft.c.i + +kiss_fft.s: kiss_fft.c.s + +.PHONY : kiss_fft.s + +# target to generate assembly for a file +kiss_fft.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fdmdv_get_test_bits.dir/build.make src/CMakeFiles/fdmdv_get_test_bits.dir/kiss_fft.c.s + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fdmdv_put_test_bits.dir/build.make src/CMakeFiles/fdmdv_put_test_bits.dir/kiss_fft.c.s + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/kiss_fft.c.s + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fdmdv_demod.dir/build.make src/CMakeFiles/fdmdv_demod.dir/kiss_fft.c.s + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fdmdv_mod.dir/build.make src/CMakeFiles/fdmdv_mod.dir/kiss_fft.c.s +.PHONY : kiss_fft.c.s + +kiss_fftr.o: kiss_fftr.c.o + +.PHONY : kiss_fftr.o + +# target to build an object file +kiss_fftr.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fdmdv_get_test_bits.dir/build.make src/CMakeFiles/fdmdv_get_test_bits.dir/kiss_fftr.c.o + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fdmdv_put_test_bits.dir/build.make src/CMakeFiles/fdmdv_put_test_bits.dir/kiss_fftr.c.o + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/kiss_fftr.c.o + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fdmdv_demod.dir/build.make src/CMakeFiles/fdmdv_demod.dir/kiss_fftr.c.o + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fdmdv_mod.dir/build.make src/CMakeFiles/fdmdv_mod.dir/kiss_fftr.c.o +.PHONY : kiss_fftr.c.o + +kiss_fftr.i: kiss_fftr.c.i + +.PHONY : kiss_fftr.i + +# target to preprocess a source file +kiss_fftr.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fdmdv_get_test_bits.dir/build.make src/CMakeFiles/fdmdv_get_test_bits.dir/kiss_fftr.c.i + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fdmdv_put_test_bits.dir/build.make src/CMakeFiles/fdmdv_put_test_bits.dir/kiss_fftr.c.i + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/kiss_fftr.c.i + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fdmdv_demod.dir/build.make src/CMakeFiles/fdmdv_demod.dir/kiss_fftr.c.i + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fdmdv_mod.dir/build.make src/CMakeFiles/fdmdv_mod.dir/kiss_fftr.c.i +.PHONY : kiss_fftr.c.i + +kiss_fftr.s: kiss_fftr.c.s + +.PHONY : kiss_fftr.s + +# target to generate assembly for a file +kiss_fftr.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fdmdv_get_test_bits.dir/build.make src/CMakeFiles/fdmdv_get_test_bits.dir/kiss_fftr.c.s + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fdmdv_put_test_bits.dir/build.make src/CMakeFiles/fdmdv_put_test_bits.dir/kiss_fftr.c.s + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/kiss_fftr.c.s + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fdmdv_demod.dir/build.make src/CMakeFiles/fdmdv_demod.dir/kiss_fftr.c.s + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fdmdv_mod.dir/build.make src/CMakeFiles/fdmdv_mod.dir/kiss_fftr.c.s +.PHONY : kiss_fftr.c.s + +ldpc_codes.o: ldpc_codes.c.o + +.PHONY : ldpc_codes.o + +# target to build an object file +ldpc_codes.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/ldpc_codes.c.o +.PHONY : ldpc_codes.c.o + +ldpc_codes.i: ldpc_codes.c.i + +.PHONY : ldpc_codes.i + +# target to preprocess a source file +ldpc_codes.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/ldpc_codes.c.i +.PHONY : ldpc_codes.c.i + +ldpc_codes.s: ldpc_codes.c.s + +.PHONY : ldpc_codes.s + +# target to generate assembly for a file +ldpc_codes.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/ldpc_codes.c.s +.PHONY : ldpc_codes.c.s + +ldpc_dec.o: ldpc_dec.c.o + +.PHONY : ldpc_dec.o + +# target to build an object file +ldpc_dec.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/ldpc_dec.dir/build.make src/CMakeFiles/ldpc_dec.dir/ldpc_dec.c.o +.PHONY : ldpc_dec.c.o + +ldpc_dec.i: ldpc_dec.c.i + +.PHONY : ldpc_dec.i + +# target to preprocess a source file +ldpc_dec.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/ldpc_dec.dir/build.make src/CMakeFiles/ldpc_dec.dir/ldpc_dec.c.i +.PHONY : ldpc_dec.c.i + +ldpc_dec.s: ldpc_dec.c.s + +.PHONY : ldpc_dec.s + +# target to generate assembly for a file +ldpc_dec.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/ldpc_dec.dir/build.make src/CMakeFiles/ldpc_dec.dir/ldpc_dec.c.s +.PHONY : ldpc_dec.c.s + +ldpc_enc.o: ldpc_enc.c.o + +.PHONY : ldpc_enc.o + +# target to build an object file +ldpc_enc.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/ldpc_enc.dir/build.make src/CMakeFiles/ldpc_enc.dir/ldpc_enc.c.o +.PHONY : ldpc_enc.c.o + +ldpc_enc.i: ldpc_enc.c.i + +.PHONY : ldpc_enc.i + +# target to preprocess a source file +ldpc_enc.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/ldpc_enc.dir/build.make src/CMakeFiles/ldpc_enc.dir/ldpc_enc.c.i +.PHONY : ldpc_enc.c.i + +ldpc_enc.s: ldpc_enc.c.s + +.PHONY : ldpc_enc.s + +# target to generate assembly for a file +ldpc_enc.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/ldpc_enc.dir/build.make src/CMakeFiles/ldpc_enc.dir/ldpc_enc.c.s +.PHONY : ldpc_enc.c.s + +ldpc_noise.o: ldpc_noise.c.o + +.PHONY : ldpc_noise.o + +# target to build an object file +ldpc_noise.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/ldpc_noise.dir/build.make src/CMakeFiles/ldpc_noise.dir/ldpc_noise.c.o +.PHONY : ldpc_noise.c.o + +ldpc_noise.i: ldpc_noise.c.i + +.PHONY : ldpc_noise.i + +# target to preprocess a source file +ldpc_noise.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/ldpc_noise.dir/build.make src/CMakeFiles/ldpc_noise.dir/ldpc_noise.c.i +.PHONY : ldpc_noise.c.i + +ldpc_noise.s: ldpc_noise.c.s + +.PHONY : ldpc_noise.s + +# target to generate assembly for a file +ldpc_noise.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/ldpc_noise.dir/build.make src/CMakeFiles/ldpc_noise.dir/ldpc_noise.c.s +.PHONY : ldpc_noise.c.s + +linreg.o: linreg.c.o + +.PHONY : linreg.o + +# target to build an object file +linreg.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/linreg.c.o +.PHONY : linreg.c.o + +linreg.i: linreg.c.i + +.PHONY : linreg.i + +# target to preprocess a source file +linreg.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/linreg.c.i +.PHONY : linreg.c.i + +linreg.s: linreg.c.s + +.PHONY : linreg.s + +# target to generate assembly for a file +linreg.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/linreg.c.s +.PHONY : linreg.c.s + +lpc.o: lpc.c.o + +.PHONY : lpc.o + +# target to build an object file +lpc.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/lpc.c.o +.PHONY : lpc.c.o + +lpc.i: lpc.c.i + +.PHONY : lpc.i + +# target to preprocess a source file +lpc.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/lpc.c.i +.PHONY : lpc.c.i + +lpc.s: lpc.c.s + +.PHONY : lpc.s + +# target to generate assembly for a file +lpc.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/lpc.c.s +.PHONY : lpc.c.s + +lpcnet_freq.o: lpcnet_freq.c.o + +.PHONY : lpcnet_freq.o + +# target to build an object file +lpcnet_freq.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/lpcnet_freq.c.o +.PHONY : lpcnet_freq.c.o + +lpcnet_freq.i: lpcnet_freq.c.i + +.PHONY : lpcnet_freq.i + +# target to preprocess a source file +lpcnet_freq.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/lpcnet_freq.c.i +.PHONY : lpcnet_freq.c.i + +lpcnet_freq.s: lpcnet_freq.c.s + +.PHONY : lpcnet_freq.s + +# target to generate assembly for a file +lpcnet_freq.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/lpcnet_freq.c.s +.PHONY : lpcnet_freq.c.s + +lsp.o: lsp.c.o + +.PHONY : lsp.o + +# target to build an object file +lsp.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/lsp.c.o +.PHONY : lsp.c.o + +lsp.i: lsp.c.i + +.PHONY : lsp.i + +# target to preprocess a source file +lsp.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/lsp.c.i +.PHONY : lsp.c.i + +lsp.s: lsp.c.s + +.PHONY : lsp.s + +# target to generate assembly for a file +lsp.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/lsp.c.s +.PHONY : lsp.c.s + +mbest.o: mbest.c.o + +.PHONY : mbest.o + +# target to build an object file +mbest.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/mbest.c.o +.PHONY : mbest.c.o + +mbest.i: mbest.c.i + +.PHONY : mbest.i + +# target to preprocess a source file +mbest.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/mbest.c.i +.PHONY : mbest.c.i + +mbest.s: mbest.c.s + +.PHONY : mbest.s + +# target to generate assembly for a file +mbest.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/mbest.c.s +.PHONY : mbest.c.s + +modem_probe.o: modem_probe.c.o + +.PHONY : modem_probe.o + +# target to build an object file +modem_probe.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fmfsk_demod.dir/build.make src/CMakeFiles/fmfsk_demod.dir/modem_probe.c.o + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fsk_demod.dir/build.make src/CMakeFiles/fsk_demod.dir/modem_probe.c.o +.PHONY : modem_probe.c.o + +modem_probe.i: modem_probe.c.i + +.PHONY : modem_probe.i + +# target to preprocess a source file +modem_probe.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fmfsk_demod.dir/build.make src/CMakeFiles/fmfsk_demod.dir/modem_probe.c.i + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fsk_demod.dir/build.make src/CMakeFiles/fsk_demod.dir/modem_probe.c.i +.PHONY : modem_probe.c.i + +modem_probe.s: modem_probe.c.s + +.PHONY : modem_probe.s + +# target to generate assembly for a file +modem_probe.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fmfsk_demod.dir/build.make src/CMakeFiles/fmfsk_demod.dir/modem_probe.c.s + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fsk_demod.dir/build.make src/CMakeFiles/fsk_demod.dir/modem_probe.c.s +.PHONY : modem_probe.c.s + +modem_stats.o: modem_stats.c.o + +.PHONY : modem_stats.o + +# target to build an object file +modem_stats.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/modem_stats.c.o + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fdmdv_demod.dir/build.make src/CMakeFiles/fdmdv_demod.dir/modem_stats.c.o +.PHONY : modem_stats.c.o + +modem_stats.i: modem_stats.c.i + +.PHONY : modem_stats.i + +# target to preprocess a source file +modem_stats.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/modem_stats.c.i + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fdmdv_demod.dir/build.make src/CMakeFiles/fdmdv_demod.dir/modem_stats.c.i +.PHONY : modem_stats.c.i + +modem_stats.s: modem_stats.c.s + +.PHONY : modem_stats.s + +# target to generate assembly for a file +modem_stats.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/modem_stats.c.s + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fdmdv_demod.dir/build.make src/CMakeFiles/fdmdv_demod.dir/modem_stats.c.s +.PHONY : modem_stats.c.s + +mpdecode_core.o: mpdecode_core.c.o + +.PHONY : mpdecode_core.o + +# target to build an object file +mpdecode_core.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/mpdecode_core.c.o +.PHONY : mpdecode_core.c.o + +mpdecode_core.i: mpdecode_core.c.i + +.PHONY : mpdecode_core.i + +# target to preprocess a source file +mpdecode_core.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/mpdecode_core.c.i +.PHONY : mpdecode_core.c.i + +mpdecode_core.s: mpdecode_core.c.s + +.PHONY : mpdecode_core.s + +# target to generate assembly for a file +mpdecode_core.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/mpdecode_core.c.s +.PHONY : mpdecode_core.c.s + +newamp1.o: newamp1.c.o + +.PHONY : newamp1.o + +# target to build an object file +newamp1.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/newamp1.c.o +.PHONY : newamp1.c.o + +newamp1.i: newamp1.c.i + +.PHONY : newamp1.i + +# target to preprocess a source file +newamp1.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/newamp1.c.i +.PHONY : newamp1.c.i + +newamp1.s: newamp1.c.s + +.PHONY : newamp1.s + +# target to generate assembly for a file +newamp1.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/newamp1.c.s +.PHONY : newamp1.c.s + +newamp2.o: newamp2.c.o + +.PHONY : newamp2.o + +# target to build an object file +newamp2.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/newamp2.c.o +.PHONY : newamp2.c.o + +newamp2.i: newamp2.c.i + +.PHONY : newamp2.i + +# target to preprocess a source file +newamp2.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/newamp2.c.i +.PHONY : newamp2.c.i + +newamp2.s: newamp2.c.s + +.PHONY : newamp2.s + +# target to generate assembly for a file +newamp2.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/newamp2.c.s +.PHONY : newamp2.c.s + +nlp.o: nlp.c.o + +.PHONY : nlp.o + +# target to build an object file +nlp.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/nlp.c.o +.PHONY : nlp.c.o + +nlp.i: nlp.c.i + +.PHONY : nlp.i + +# target to preprocess a source file +nlp.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/nlp.c.i +.PHONY : nlp.c.i + +nlp.s: nlp.c.s + +.PHONY : nlp.s + +# target to generate assembly for a file +nlp.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/nlp.c.s +.PHONY : nlp.c.s + +octave.o: octave.c.o + +.PHONY : octave.o + +# target to build an object file +octave.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/cohpsk_put_test_bits.dir/build.make src/CMakeFiles/cohpsk_put_test_bits.dir/octave.c.o + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/cohpsk_demod.dir/build.make src/CMakeFiles/cohpsk_demod.dir/octave.c.o + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fdmdv_demod.dir/build.make src/CMakeFiles/fdmdv_demod.dir/octave.c.o + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fmfsk_demod.dir/build.make src/CMakeFiles/fmfsk_demod.dir/octave.c.o + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fsk_demod.dir/build.make src/CMakeFiles/fsk_demod.dir/octave.c.o + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/ofdm_demod.dir/build.make src/CMakeFiles/ofdm_demod.dir/octave.c.o +.PHONY : octave.c.o + +octave.i: octave.c.i + +.PHONY : octave.i + +# target to preprocess a source file +octave.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/cohpsk_put_test_bits.dir/build.make src/CMakeFiles/cohpsk_put_test_bits.dir/octave.c.i + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/cohpsk_demod.dir/build.make src/CMakeFiles/cohpsk_demod.dir/octave.c.i + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fdmdv_demod.dir/build.make src/CMakeFiles/fdmdv_demod.dir/octave.c.i + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fmfsk_demod.dir/build.make src/CMakeFiles/fmfsk_demod.dir/octave.c.i + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fsk_demod.dir/build.make src/CMakeFiles/fsk_demod.dir/octave.c.i + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/ofdm_demod.dir/build.make src/CMakeFiles/ofdm_demod.dir/octave.c.i +.PHONY : octave.c.i + +octave.s: octave.c.s + +.PHONY : octave.s + +# target to generate assembly for a file +octave.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/cohpsk_put_test_bits.dir/build.make src/CMakeFiles/cohpsk_put_test_bits.dir/octave.c.s + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/cohpsk_demod.dir/build.make src/CMakeFiles/cohpsk_demod.dir/octave.c.s + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fdmdv_demod.dir/build.make src/CMakeFiles/fdmdv_demod.dir/octave.c.s + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fmfsk_demod.dir/build.make src/CMakeFiles/fmfsk_demod.dir/octave.c.s + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/fsk_demod.dir/build.make src/CMakeFiles/fsk_demod.dir/octave.c.s + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/ofdm_demod.dir/build.make src/CMakeFiles/ofdm_demod.dir/octave.c.s +.PHONY : octave.c.s + +ofdm.o: ofdm.c.o + +.PHONY : ofdm.o + +# target to build an object file +ofdm.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/ofdm.c.o +.PHONY : ofdm.c.o + +ofdm.i: ofdm.c.i + +.PHONY : ofdm.i + +# target to preprocess a source file +ofdm.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/ofdm.c.i +.PHONY : ofdm.c.i + +ofdm.s: ofdm.c.s + +.PHONY : ofdm.s + +# target to generate assembly for a file +ofdm.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/ofdm.c.s +.PHONY : ofdm.c.s + +ofdm_demod.o: ofdm_demod.c.o + +.PHONY : ofdm_demod.o + +# target to build an object file +ofdm_demod.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/ofdm_demod.dir/build.make src/CMakeFiles/ofdm_demod.dir/ofdm_demod.c.o +.PHONY : ofdm_demod.c.o + +ofdm_demod.i: ofdm_demod.c.i + +.PHONY : ofdm_demod.i + +# target to preprocess a source file +ofdm_demod.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/ofdm_demod.dir/build.make src/CMakeFiles/ofdm_demod.dir/ofdm_demod.c.i +.PHONY : ofdm_demod.c.i + +ofdm_demod.s: ofdm_demod.c.s + +.PHONY : ofdm_demod.s + +# target to generate assembly for a file +ofdm_demod.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/ofdm_demod.dir/build.make src/CMakeFiles/ofdm_demod.dir/ofdm_demod.c.s +.PHONY : ofdm_demod.c.s + +ofdm_get_test_bits.o: ofdm_get_test_bits.c.o + +.PHONY : ofdm_get_test_bits.o + +# target to build an object file +ofdm_get_test_bits.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/ofdm_get_test_bits.dir/build.make src/CMakeFiles/ofdm_get_test_bits.dir/ofdm_get_test_bits.c.o +.PHONY : ofdm_get_test_bits.c.o + +ofdm_get_test_bits.i: ofdm_get_test_bits.c.i + +.PHONY : ofdm_get_test_bits.i + +# target to preprocess a source file +ofdm_get_test_bits.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/ofdm_get_test_bits.dir/build.make src/CMakeFiles/ofdm_get_test_bits.dir/ofdm_get_test_bits.c.i +.PHONY : ofdm_get_test_bits.c.i + +ofdm_get_test_bits.s: ofdm_get_test_bits.c.s + +.PHONY : ofdm_get_test_bits.s + +# target to generate assembly for a file +ofdm_get_test_bits.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/ofdm_get_test_bits.dir/build.make src/CMakeFiles/ofdm_get_test_bits.dir/ofdm_get_test_bits.c.s +.PHONY : ofdm_get_test_bits.c.s + +ofdm_mod.o: ofdm_mod.c.o + +.PHONY : ofdm_mod.o + +# target to build an object file +ofdm_mod.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/ofdm_mod.dir/build.make src/CMakeFiles/ofdm_mod.dir/ofdm_mod.c.o +.PHONY : ofdm_mod.c.o + +ofdm_mod.i: ofdm_mod.c.i + +.PHONY : ofdm_mod.i + +# target to preprocess a source file +ofdm_mod.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/ofdm_mod.dir/build.make src/CMakeFiles/ofdm_mod.dir/ofdm_mod.c.i +.PHONY : ofdm_mod.c.i + +ofdm_mod.s: ofdm_mod.c.s + +.PHONY : ofdm_mod.s + +# target to generate assembly for a file +ofdm_mod.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/ofdm_mod.dir/build.make src/CMakeFiles/ofdm_mod.dir/ofdm_mod.c.s +.PHONY : ofdm_mod.c.s + +ofdm_mode.o: ofdm_mode.c.o + +.PHONY : ofdm_mode.o + +# target to build an object file +ofdm_mode.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/ofdm_mode.c.o +.PHONY : ofdm_mode.c.o + +ofdm_mode.i: ofdm_mode.c.i + +.PHONY : ofdm_mode.i + +# target to preprocess a source file +ofdm_mode.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/ofdm_mode.c.i +.PHONY : ofdm_mode.c.i + +ofdm_mode.s: ofdm_mode.c.s + +.PHONY : ofdm_mode.s + +# target to generate assembly for a file +ofdm_mode.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/ofdm_mode.c.s +.PHONY : ofdm_mode.c.s + +ofdm_put_test_bits.o: ofdm_put_test_bits.c.o + +.PHONY : ofdm_put_test_bits.o + +# target to build an object file +ofdm_put_test_bits.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/ofdm_put_test_bits.dir/build.make src/CMakeFiles/ofdm_put_test_bits.dir/ofdm_put_test_bits.c.o +.PHONY : ofdm_put_test_bits.c.o + +ofdm_put_test_bits.i: ofdm_put_test_bits.c.i + +.PHONY : ofdm_put_test_bits.i + +# target to preprocess a source file +ofdm_put_test_bits.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/ofdm_put_test_bits.dir/build.make src/CMakeFiles/ofdm_put_test_bits.dir/ofdm_put_test_bits.c.i +.PHONY : ofdm_put_test_bits.c.i + +ofdm_put_test_bits.s: ofdm_put_test_bits.c.s + +.PHONY : ofdm_put_test_bits.s + +# target to generate assembly for a file +ofdm_put_test_bits.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/ofdm_put_test_bits.dir/build.make src/CMakeFiles/ofdm_put_test_bits.dir/ofdm_put_test_bits.c.s +.PHONY : ofdm_put_test_bits.c.s + +pack.o: pack.c.o + +.PHONY : pack.o + +# target to build an object file +pack.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/pack.c.o +.PHONY : pack.c.o + +pack.i: pack.c.i + +.PHONY : pack.i + +# target to preprocess a source file +pack.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/pack.c.i +.PHONY : pack.c.i + +pack.s: pack.c.s + +.PHONY : pack.s + +# target to generate assembly for a file +pack.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/pack.c.s +.PHONY : pack.c.s + +phase.o: phase.c.o + +.PHONY : phase.o + +# target to build an object file +phase.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/phase.c.o +.PHONY : phase.c.o + +phase.i: phase.c.i + +.PHONY : phase.i + +# target to preprocess a source file +phase.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/phase.c.i +.PHONY : phase.c.i + +phase.s: phase.c.s + +.PHONY : phase.s + +# target to generate assembly for a file +phase.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/phase.c.s +.PHONY : phase.c.s + +phi0.o: phi0.c.o + +.PHONY : phi0.o + +# target to build an object file +phi0.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/phi0.c.o +.PHONY : phi0.c.o + +phi0.i: phi0.c.i + +.PHONY : phi0.i + +# target to preprocess a source file +phi0.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/phi0.c.i +.PHONY : phi0.c.i + +phi0.s: phi0.c.s + +.PHONY : phi0.s + +# target to generate assembly for a file +phi0.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/phi0.c.s +.PHONY : phi0.c.s + +postfilter.o: postfilter.c.o + +.PHONY : postfilter.o + +# target to build an object file +postfilter.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/postfilter.c.o +.PHONY : postfilter.c.o + +postfilter.i: postfilter.c.i + +.PHONY : postfilter.i + +# target to preprocess a source file +postfilter.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/postfilter.c.i +.PHONY : postfilter.c.i + +postfilter.s: postfilter.c.s + +.PHONY : postfilter.s + +# target to generate assembly for a file +postfilter.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/postfilter.c.s +.PHONY : postfilter.c.s + +quantise.o: quantise.c.o + +.PHONY : quantise.o + +# target to build an object file +quantise.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/quantise.c.o +.PHONY : quantise.c.o + +quantise.i: quantise.c.i + +.PHONY : quantise.i + +# target to preprocess a source file +quantise.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/quantise.c.i +.PHONY : quantise.c.i + +quantise.s: quantise.c.s + +.PHONY : quantise.s + +# target to generate assembly for a file +quantise.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/quantise.c.s +.PHONY : quantise.c.s + +sine.o: sine.c.o + +.PHONY : sine.o + +# target to build an object file +sine.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/sine.c.o +.PHONY : sine.c.o + +sine.i: sine.c.i + +.PHONY : sine.i + +# target to preprocess a source file +sine.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/sine.c.i +.PHONY : sine.c.i + +sine.s: sine.c.s + +.PHONY : sine.s + +# target to generate assembly for a file +sine.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/sine.c.s +.PHONY : sine.c.s + +tollr.o: tollr.c.o + +.PHONY : tollr.o + +# target to build an object file +tollr.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/tollr.dir/build.make src/CMakeFiles/tollr.dir/tollr.c.o +.PHONY : tollr.c.o + +tollr.i: tollr.c.i + +.PHONY : tollr.i + +# target to preprocess a source file +tollr.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/tollr.dir/build.make src/CMakeFiles/tollr.dir/tollr.c.i +.PHONY : tollr.c.i + +tollr.s: tollr.c.s + +.PHONY : tollr.s + +# target to generate assembly for a file +tollr.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/tollr.dir/build.make src/CMakeFiles/tollr.dir/tollr.c.s +.PHONY : tollr.c.s + +varicode.o: varicode.c.o + +.PHONY : varicode.o + +# target to build an object file +varicode.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/varicode.c.o +.PHONY : varicode.c.o + +varicode.i: varicode.c.i + +.PHONY : varicode.i + +# target to preprocess a source file +varicode.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/varicode.c.i +.PHONY : varicode.c.i + +varicode.s: varicode.c.s + +.PHONY : varicode.s + +# target to generate assembly for a file +varicode.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/codec2.dir/build.make src/CMakeFiles/codec2.dir/varicode.c.s +.PHONY : varicode.c.s + +vhf_deframe_c2.o: vhf_deframe_c2.c.o + +.PHONY : vhf_deframe_c2.o + +# target to build an object file +vhf_deframe_c2.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/vhf_deframe_c2.dir/build.make src/CMakeFiles/vhf_deframe_c2.dir/vhf_deframe_c2.c.o +.PHONY : vhf_deframe_c2.c.o + +vhf_deframe_c2.i: vhf_deframe_c2.c.i + +.PHONY : vhf_deframe_c2.i + +# target to preprocess a source file +vhf_deframe_c2.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/vhf_deframe_c2.dir/build.make src/CMakeFiles/vhf_deframe_c2.dir/vhf_deframe_c2.c.i +.PHONY : vhf_deframe_c2.c.i + +vhf_deframe_c2.s: vhf_deframe_c2.c.s + +.PHONY : vhf_deframe_c2.s + +# target to generate assembly for a file +vhf_deframe_c2.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/vhf_deframe_c2.dir/build.make src/CMakeFiles/vhf_deframe_c2.dir/vhf_deframe_c2.c.s +.PHONY : vhf_deframe_c2.c.s + +vhf_frame_c2.o: vhf_frame_c2.c.o + +.PHONY : vhf_frame_c2.o + +# target to build an object file +vhf_frame_c2.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/vhf_frame_c2.dir/build.make src/CMakeFiles/vhf_frame_c2.dir/vhf_frame_c2.c.o +.PHONY : vhf_frame_c2.c.o + +vhf_frame_c2.i: vhf_frame_c2.c.i + +.PHONY : vhf_frame_c2.i + +# target to preprocess a source file +vhf_frame_c2.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/vhf_frame_c2.dir/build.make src/CMakeFiles/vhf_frame_c2.dir/vhf_frame_c2.c.i +.PHONY : vhf_frame_c2.c.i + +vhf_frame_c2.s: vhf_frame_c2.c.s + +.PHONY : vhf_frame_c2.s + +# target to generate assembly for a file +vhf_frame_c2.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f src/CMakeFiles/vhf_frame_c2.dir/build.make src/CMakeFiles/vhf_frame_c2.dir/vhf_frame_c2.c.s +.PHONY : vhf_frame_c2.c.s + +# Help Target +help: + @echo "The following are some of the valid targets for this Makefile:" + @echo "... all (the default if no target is provided)" + @echo "... clean" + @echo "... depend" + @echo "... install/local" + @echo "... install" + @echo "... rebuild_cache" + @echo "... test" + @echo "... ldpc_dec" + @echo "... ldpc_enc" + @echo "... ldpc_noise" + @echo "... tollr" + @echo "... cohpsk_ch" + @echo "... cohpsk_put_test_bits" + @echo "... cohpsk_get_test_bits" + @echo "... cohpsk_demod" + @echo "... vhf_frame_c2" + @echo "... freedv_data_raw_rx" + @echo "... insert_errors" + @echo "... fm_demod" + @echo "... list_install_components" + @echo "... fdmdv_channel" + @echo "... freedv_data_raw_tx" + @echo "... cohpsk_mod" + @echo "... c2dec" + @echo "... freedv_rx" + @echo "... fdmdv_get_test_bits" + @echo "... c2demo" + @echo "... fdmdv_put_test_bits" + @echo "... edit_cache" + @echo "... codec2" + @echo "... ofdm_get_test_bits" + @echo "... freedv_tx" + @echo "... c2enc" + @echo "... generate_codebook" + @echo "... freedv_mixed_tx" + @echo "... c2sim" + @echo "... install/strip" + @echo "... fdmdv_demod" + @echo "... vhf_deframe_c2" + @echo "... fsk_mod" + @echo "... fsk_put_test_bits" + @echo "... freedv_data_tx" + @echo "... freedv_data_rx" + @echo "... freedv_mixed_rx" + @echo "... fmfsk_demod" + @echo "... fsk_mod_ext_vco" + @echo "... fsk_demod" + @echo "... fsk_get_test_bits" + @echo "... framer" + @echo "... deframer" + @echo "... ofdm_mod" + @echo "... fdmdv_mod" + @echo "... ofdm_demod" + @echo "... ofdm_put_test_bits" + @echo "... fmfsk_mod" + @echo "... HRA_112_112.o" + @echo "... HRA_112_112.i" + @echo "... HRA_112_112.s" + @echo "... HRAa_1536_512.o" + @echo "... HRAa_1536_512.i" + @echo "... HRAa_1536_512.s" + @echo "... HRAb_396_504.o" + @echo "... HRAb_396_504.i" + @echo "... HRAb_396_504.s" + @echo "... H_128_256_5.o" + @echo "... H_128_256_5.i" + @echo "... H_128_256_5.s" + @echo "... H_256_512_4.o" + @echo "... H_256_512_4.i" + @echo "... H_256_512_4.s" + @echo "... H_256_768_22.o" + @echo "... H_256_768_22.i" + @echo "... H_256_768_22.s" + @echo "... c2dec.o" + @echo "... c2dec.i" + @echo "... c2dec.s" + @echo "... c2demo.o" + @echo "... c2demo.i" + @echo "... c2demo.s" + @echo "... c2enc.o" + @echo "... c2enc.i" + @echo "... c2enc.s" + @echo "... c2sim.o" + @echo "... c2sim.i" + @echo "... c2sim.s" + @echo "... codebook.o" + @echo "... codebook.i" + @echo "... codebook.s" + @echo "... codebookd.o" + @echo "... codebookd.i" + @echo "... codebookd.s" + @echo "... codebookge.o" + @echo "... codebookge.i" + @echo "... codebookge.s" + @echo "... codebookjvm.o" + @echo "... codebookjvm.i" + @echo "... codebookjvm.s" + @echo "... codebooknewamp1.o" + @echo "... codebooknewamp1.i" + @echo "... codebooknewamp1.s" + @echo "... codebooknewamp1_energy.o" + @echo "... codebooknewamp1_energy.i" + @echo "... codebooknewamp1_energy.s" + @echo "... codebooknewamp2.o" + @echo "... codebooknewamp2.i" + @echo "... codebooknewamp2.s" + @echo "... codebooknewamp2_energy.o" + @echo "... codebooknewamp2_energy.i" + @echo "... codebooknewamp2_energy.s" + @echo "... codec2.o" + @echo "... codec2.i" + @echo "... codec2.s" + @echo "... codec2_fft.o" + @echo "... codec2_fft.i" + @echo "... codec2_fft.s" + @echo "... codec2_fifo.o" + @echo "... codec2_fifo.i" + @echo "... codec2_fifo.s" + @echo "... cohpsk.o" + @echo "... cohpsk.i" + @echo "... cohpsk.s" + @echo "... cohpsk_ch.o" + @echo "... cohpsk_ch.i" + @echo "... cohpsk_ch.s" + @echo "... cohpsk_demod.o" + @echo "... cohpsk_demod.i" + @echo "... cohpsk_demod.s" + @echo "... cohpsk_get_test_bits.o" + @echo "... cohpsk_get_test_bits.i" + @echo "... cohpsk_get_test_bits.s" + @echo "... cohpsk_mod.o" + @echo "... cohpsk_mod.i" + @echo "... cohpsk_mod.s" + @echo "... cohpsk_put_test_bits.o" + @echo "... cohpsk_put_test_bits.i" + @echo "... cohpsk_put_test_bits.s" + @echo "... deframer.o" + @echo "... deframer.i" + @echo "... deframer.s" + @echo "... dump.o" + @echo "... dump.i" + @echo "... dump.s" + @echo "... fdmdv.o" + @echo "... fdmdv.i" + @echo "... fdmdv.s" + @echo "... fdmdv_channel.o" + @echo "... fdmdv_channel.i" + @echo "... fdmdv_channel.s" + @echo "... fdmdv_demod.o" + @echo "... fdmdv_demod.i" + @echo "... fdmdv_demod.s" + @echo "... fdmdv_get_test_bits.o" + @echo "... fdmdv_get_test_bits.i" + @echo "... fdmdv_get_test_bits.s" + @echo "... fdmdv_mod.o" + @echo "... fdmdv_mod.i" + @echo "... fdmdv_mod.s" + @echo "... fdmdv_put_test_bits.o" + @echo "... fdmdv_put_test_bits.i" + @echo "... fdmdv_put_test_bits.s" + @echo "... filter.o" + @echo "... filter.i" + @echo "... filter.s" + @echo "... fm.o" + @echo "... fm.i" + @echo "... fm.s" + @echo "... fm_demod.o" + @echo "... fm_demod.i" + @echo "... fm_demod.s" + @echo "... fmfsk.o" + @echo "... fmfsk.i" + @echo "... fmfsk.s" + @echo "... fmfsk_demod.o" + @echo "... fmfsk_demod.i" + @echo "... fmfsk_demod.s" + @echo "... fmfsk_mod.o" + @echo "... fmfsk_mod.i" + @echo "... fmfsk_mod.s" + @echo "... framer.o" + @echo "... framer.i" + @echo "... framer.s" + @echo "... freedv_1600.o" + @echo "... freedv_1600.i" + @echo "... freedv_1600.s" + @echo "... freedv_2020.o" + @echo "... freedv_2020.i" + @echo "... freedv_2020.s" + @echo "... freedv_700.o" + @echo "... freedv_700.i" + @echo "... freedv_700.s" + @echo "... freedv_api.o" + @echo "... freedv_api.i" + @echo "... freedv_api.s" + @echo "... freedv_data_channel.o" + @echo "... freedv_data_channel.i" + @echo "... freedv_data_channel.s" + @echo "... freedv_data_raw_rx.o" + @echo "... freedv_data_raw_rx.i" + @echo "... freedv_data_raw_rx.s" + @echo "... freedv_data_raw_tx.o" + @echo "... freedv_data_raw_tx.i" + @echo "... freedv_data_raw_tx.s" + @echo "... freedv_data_rx.o" + @echo "... freedv_data_rx.i" + @echo "... freedv_data_rx.s" + @echo "... freedv_data_tx.o" + @echo "... freedv_data_tx.i" + @echo "... freedv_data_tx.s" + @echo "... freedv_fsk.o" + @echo "... freedv_fsk.i" + @echo "... freedv_fsk.s" + @echo "... freedv_mixed_rx.o" + @echo "... freedv_mixed_rx.i" + @echo "... freedv_mixed_rx.s" + @echo "... freedv_mixed_tx.o" + @echo "... freedv_mixed_tx.i" + @echo "... freedv_mixed_tx.s" + @echo "... freedv_rx.o" + @echo "... freedv_rx.i" + @echo "... freedv_rx.s" + @echo "... freedv_tx.o" + @echo "... freedv_tx.i" + @echo "... freedv_tx.s" + @echo "... freedv_vhf_framing.o" + @echo "... freedv_vhf_framing.i" + @echo "... freedv_vhf_framing.s" + @echo "... fsk.o" + @echo "... fsk.i" + @echo "... fsk.s" + @echo "... fsk_demod.o" + @echo "... fsk_demod.i" + @echo "... fsk_demod.s" + @echo "... fsk_get_test_bits.o" + @echo "... fsk_get_test_bits.i" + @echo "... fsk_get_test_bits.s" + @echo "... fsk_mod.o" + @echo "... fsk_mod.i" + @echo "... fsk_mod.s" + @echo "... fsk_mod_ext_vco.o" + @echo "... fsk_mod_ext_vco.i" + @echo "... fsk_mod_ext_vco.s" + @echo "... fsk_put_test_bits.o" + @echo "... fsk_put_test_bits.i" + @echo "... fsk_put_test_bits.s" + @echo "... generate_codebook.o" + @echo "... generate_codebook.i" + @echo "... generate_codebook.s" + @echo "... golay23.o" + @echo "... golay23.i" + @echo "... golay23.s" + @echo "... gp_interleaver.o" + @echo "... gp_interleaver.i" + @echo "... gp_interleaver.s" + @echo "... insert_errors.o" + @echo "... insert_errors.i" + @echo "... insert_errors.s" + @echo "... interldpc.o" + @echo "... interldpc.i" + @echo "... interldpc.s" + @echo "... interp.o" + @echo "... interp.i" + @echo "... interp.s" + @echo "... kiss_fft.o" + @echo "... kiss_fft.i" + @echo "... kiss_fft.s" + @echo "... kiss_fftr.o" + @echo "... kiss_fftr.i" + @echo "... kiss_fftr.s" + @echo "... ldpc_codes.o" + @echo "... ldpc_codes.i" + @echo "... ldpc_codes.s" + @echo "... ldpc_dec.o" + @echo "... ldpc_dec.i" + @echo "... ldpc_dec.s" + @echo "... ldpc_enc.o" + @echo "... ldpc_enc.i" + @echo "... ldpc_enc.s" + @echo "... ldpc_noise.o" + @echo "... ldpc_noise.i" + @echo "... ldpc_noise.s" + @echo "... linreg.o" + @echo "... linreg.i" + @echo "... linreg.s" + @echo "... lpc.o" + @echo "... lpc.i" + @echo "... lpc.s" + @echo "... lpcnet_freq.o" + @echo "... lpcnet_freq.i" + @echo "... lpcnet_freq.s" + @echo "... lsp.o" + @echo "... lsp.i" + @echo "... lsp.s" + @echo "... mbest.o" + @echo "... mbest.i" + @echo "... mbest.s" + @echo "... modem_probe.o" + @echo "... modem_probe.i" + @echo "... modem_probe.s" + @echo "... modem_stats.o" + @echo "... modem_stats.i" + @echo "... modem_stats.s" + @echo "... mpdecode_core.o" + @echo "... mpdecode_core.i" + @echo "... mpdecode_core.s" + @echo "... newamp1.o" + @echo "... newamp1.i" + @echo "... newamp1.s" + @echo "... newamp2.o" + @echo "... newamp2.i" + @echo "... newamp2.s" + @echo "... nlp.o" + @echo "... nlp.i" + @echo "... nlp.s" + @echo "... octave.o" + @echo "... octave.i" + @echo "... octave.s" + @echo "... ofdm.o" + @echo "... ofdm.i" + @echo "... ofdm.s" + @echo "... ofdm_demod.o" + @echo "... ofdm_demod.i" + @echo "... ofdm_demod.s" + @echo "... ofdm_get_test_bits.o" + @echo "... ofdm_get_test_bits.i" + @echo "... ofdm_get_test_bits.s" + @echo "... ofdm_mod.o" + @echo "... ofdm_mod.i" + @echo "... ofdm_mod.s" + @echo "... ofdm_mode.o" + @echo "... ofdm_mode.i" + @echo "... ofdm_mode.s" + @echo "... ofdm_put_test_bits.o" + @echo "... ofdm_put_test_bits.i" + @echo "... ofdm_put_test_bits.s" + @echo "... pack.o" + @echo "... pack.i" + @echo "... pack.s" + @echo "... phase.o" + @echo "... phase.i" + @echo "... phase.s" + @echo "... phi0.o" + @echo "... phi0.i" + @echo "... phi0.s" + @echo "... postfilter.o" + @echo "... postfilter.i" + @echo "... postfilter.s" + @echo "... quantise.o" + @echo "... quantise.i" + @echo "... quantise.s" + @echo "... sine.o" + @echo "... sine.i" + @echo "... sine.s" + @echo "... tollr.o" + @echo "... tollr.i" + @echo "... tollr.s" + @echo "... varicode.o" + @echo "... varicode.i" + @echo "... varicode.s" + @echo "... vhf_deframe_c2.o" + @echo "... vhf_deframe_c2.i" + @echo "... vhf_deframe_c2.s" + @echo "... vhf_frame_c2.o" + @echo "... vhf_frame_c2.i" + @echo "... vhf_frame_c2.s" +.PHONY : help + + + +#============================================================================= +# Special targets to cleanup operation of make. + +# Special rule to run CMake to check the build system integrity. +# No rule that depends on this can have commands that come from listfiles +# because they might be regenerated. +cmake_check_build_system: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 +.PHONY : cmake_check_build_system + diff --git a/libcodec2-android/src/codec2/build_linux/src/c2dec b/libcodec2-android/src/codec2/build_linux/src/c2dec new file mode 100755 index 0000000..2734a62 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/c2dec differ diff --git a/libcodec2-android/src/codec2/build_linux/src/c2demo b/libcodec2-android/src/codec2/build_linux/src/c2demo new file mode 100755 index 0000000..d4792cb Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/c2demo differ diff --git a/libcodec2-android/src/codec2/build_linux/src/c2enc b/libcodec2-android/src/codec2/build_linux/src/c2enc new file mode 100755 index 0000000..bc20c2c Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/c2enc differ diff --git a/libcodec2-android/src/codec2/build_linux/src/c2sim b/libcodec2-android/src/codec2/build_linux/src/c2sim new file mode 100755 index 0000000..398d889 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/c2sim differ diff --git a/libcodec2-android/src/codec2/build_linux/src/cmake_install.cmake b/libcodec2-android/src/codec2/build_linux/src/cmake_install.cmake new file mode 100644 index 0000000..e765289 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/cmake_install.cmake @@ -0,0 +1,106 @@ +# Install script for directory: /home/sh/Downloads/hackrf/codec2/src + +# Set the install prefix +if(NOT DEFINED CMAKE_INSTALL_PREFIX) + set(CMAKE_INSTALL_PREFIX "/opt/install/codec2") +endif() +string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") + +# Set the install configuration name. +if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) + if(BUILD_TYPE) + string(REGEX REPLACE "^[^A-Za-z0-9_]+" "" + CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") + else() + set(CMAKE_INSTALL_CONFIG_NAME "Debug") + endif() + message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") +endif() + +# Set the component getting installed. +if(NOT CMAKE_INSTALL_COMPONENT) + if(COMPONENT) + message(STATUS "Install component: \"${COMPONENT}\"") + set(CMAKE_INSTALL_COMPONENT "${COMPONENT}") + else() + set(CMAKE_INSTALL_COMPONENT) + endif() +endif() + +# Install shared libraries without execute permission? +if(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE) + set(CMAKE_INSTALL_SO_NO_EXE "1") +endif() + +# Is this installation the result of a crosscompile? +if(NOT DEFINED CMAKE_CROSSCOMPILING) + set(CMAKE_CROSSCOMPILING "FALSE") +endif() + +if("x${CMAKE_INSTALL_COMPONENT}x" STREQUAL "xUnspecifiedx" OR NOT CMAKE_INSTALL_COMPONENT) + if(EXISTS "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/lib/cmake/codec2/codec2-config.cmake") + file(DIFFERENT EXPORT_FILE_CHANGED FILES + "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/lib/cmake/codec2/codec2-config.cmake" + "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/Export/lib/cmake/codec2/codec2-config.cmake") + if(EXPORT_FILE_CHANGED) + file(GLOB OLD_CONFIG_FILES "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/lib/cmake/codec2/codec2-config-*.cmake") + if(OLD_CONFIG_FILES) + message(STATUS "Old export file \"$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/lib/cmake/codec2/codec2-config.cmake\" will be replaced. Removing files [${OLD_CONFIG_FILES}].") + file(REMOVE ${OLD_CONFIG_FILES}) + endif() + endif() + endif() + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/lib/cmake/codec2" TYPE FILE FILES "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/Export/lib/cmake/codec2/codec2-config.cmake") + if("${CMAKE_INSTALL_CONFIG_NAME}" MATCHES "^([Dd][Ee][Bb][Uu][Gg])$") + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/lib/cmake/codec2" TYPE FILE FILES "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/Export/lib/cmake/codec2/codec2-config-debug.cmake") + endif() +endif() + +if("x${CMAKE_INSTALL_COMPONENT}x" STREQUAL "xUnspecifiedx" OR NOT CMAKE_INSTALL_COMPONENT) + if(EXISTS "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/lib/libcodec2.so.0.9" AND + NOT IS_SYMLINK "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/lib/libcodec2.so.0.9") + file(RPATH_CHECK + FILE "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/lib/libcodec2.so.0.9" + RPATH "") + endif() + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/lib" TYPE SHARED_LIBRARY FILES "/home/sh/Downloads/hackrf/codec2/build_linux/src/libcodec2.so.0.9") + if(EXISTS "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/lib/libcodec2.so.0.9" AND + NOT IS_SYMLINK "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/lib/libcodec2.so.0.9") + if(CMAKE_INSTALL_DO_STRIP) + execute_process(COMMAND "/usr/bin/strip" "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/lib/libcodec2.so.0.9") + endif() + endif() +endif() + +if("x${CMAKE_INSTALL_COMPONENT}x" STREQUAL "xUnspecifiedx" OR NOT CMAKE_INSTALL_COMPONENT) + if(EXISTS "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/lib/libcodec2.so" AND + NOT IS_SYMLINK "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/lib/libcodec2.so") + file(RPATH_CHECK + FILE "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/lib/libcodec2.so" + RPATH "") + endif() + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/lib" TYPE SHARED_LIBRARY FILES "/home/sh/Downloads/hackrf/codec2/build_linux/src/libcodec2.so") + if(EXISTS "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/lib/libcodec2.so" AND + NOT IS_SYMLINK "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/lib/libcodec2.so") + if(CMAKE_INSTALL_DO_STRIP) + execute_process(COMMAND "/usr/bin/strip" "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/lib/libcodec2.so") + endif() + endif() +endif() + +if("x${CMAKE_INSTALL_COMPONENT}x" STREQUAL "xUnspecifiedx" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/include/codec2" TYPE FILE FILES + "/home/sh/Downloads/hackrf/codec2/src/codec2.h" + "/home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h" + "/home/sh/Downloads/hackrf/codec2/src/codec2_cohpsk.h" + "/home/sh/Downloads/hackrf/codec2/src/codec2_fm.h" + "/home/sh/Downloads/hackrf/codec2/src/codec2_ofdm.h" + "/home/sh/Downloads/hackrf/codec2/src/fsk.h" + "/home/sh/Downloads/hackrf/codec2/src/codec2_fifo.h" + "/home/sh/Downloads/hackrf/codec2/src/comp.h" + "/home/sh/Downloads/hackrf/codec2/src/modem_stats.h" + "/home/sh/Downloads/hackrf/codec2/src/freedv_api.h" + "/home/sh/Downloads/hackrf/codec2/build_linux/codec2/version.h" + ) +endif() + diff --git a/libcodec2-android/src/codec2/build_linux/src/codebook.c b/libcodec2-android/src/codec2/build_linux/src/codebook.c new file mode 100644 index 0000000..325b872 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/codebook.c @@ -0,0 +1,285 @@ +/* THIS IS A GENERATED FILE. Edit generate_codebook.c and its input */ + +/* + * This intermediary file and the files that used to create it are under + * The LGPL. See the file COPYING. + */ + +#include "defines.h" + + /* /home/sh/Downloads/hackrf/codec2/src/codebook/lsp1.txt */ +#ifdef __EMBEDDED__ +static const float codes0[] = { +#else +static float codes0[] = { +#endif + 225, + 250, + 275, + 300, + 325, + 350, + 375, + 400, + 425, + 450, + 475, + 500, + 525, + 550, + 575, + 600 +}; + /* /home/sh/Downloads/hackrf/codec2/src/codebook/lsp2.txt */ +#ifdef __EMBEDDED__ +static const float codes1[] = { +#else +static float codes1[] = { +#endif + 325, + 350, + 375, + 400, + 425, + 450, + 475, + 500, + 525, + 550, + 575, + 600, + 625, + 650, + 675, + 700 +}; + /* /home/sh/Downloads/hackrf/codec2/src/codebook/lsp3.txt */ +#ifdef __EMBEDDED__ +static const float codes2[] = { +#else +static float codes2[] = { +#endif + 500, + 550, + 600, + 650, + 700, + 750, + 800, + 850, + 900, + 950, + 1000, + 1050, + 1100, + 1150, + 1200, + 1250 +}; + /* /home/sh/Downloads/hackrf/codec2/src/codebook/lsp4.txt */ +#ifdef __EMBEDDED__ +static const float codes3[] = { +#else +static float codes3[] = { +#endif + 700, + 800, + 900, + 1000, + 1100, + 1200, + 1300, + 1400, + 1500, + 1600, + 1700, + 1800, + 1900, + 2000, + 2100, + 2200 +}; + /* /home/sh/Downloads/hackrf/codec2/src/codebook/lsp5.txt */ +#ifdef __EMBEDDED__ +static const float codes4[] = { +#else +static float codes4[] = { +#endif + 950, + 1050, + 1150, + 1250, + 1350, + 1450, + 1550, + 1650, + 1750, + 1850, + 1950, + 2050, + 2150, + 2250, + 2350, + 2450 +}; + /* /home/sh/Downloads/hackrf/codec2/src/codebook/lsp6.txt */ +#ifdef __EMBEDDED__ +static const float codes5[] = { +#else +static float codes5[] = { +#endif + 1100, + 1200, + 1300, + 1400, + 1500, + 1600, + 1700, + 1800, + 1900, + 2000, + 2100, + 2200, + 2300, + 2400, + 2500, + 2600 +}; + /* /home/sh/Downloads/hackrf/codec2/src/codebook/lsp7.txt */ +#ifdef __EMBEDDED__ +static const float codes6[] = { +#else +static float codes6[] = { +#endif + 1500, + 1600, + 1700, + 1800, + 1900, + 2000, + 2100, + 2200, + 2300, + 2400, + 2500, + 2600, + 2700, + 2800, + 2900, + 3000 +}; + /* /home/sh/Downloads/hackrf/codec2/src/codebook/lsp8.txt */ +#ifdef __EMBEDDED__ +static const float codes7[] = { +#else +static float codes7[] = { +#endif + 2300, + 2400, + 2500, + 2600, + 2700, + 2800, + 2900, + 3000 +}; + /* /home/sh/Downloads/hackrf/codec2/src/codebook/lsp9.txt */ +#ifdef __EMBEDDED__ +static const float codes8[] = { +#else +static float codes8[] = { +#endif + 2500, + 2600, + 2700, + 2800, + 2900, + 3000, + 3100, + 3200 +}; + /* /home/sh/Downloads/hackrf/codec2/src/codebook/lsp10.txt */ +#ifdef __EMBEDDED__ +static const float codes9[] = { +#else +static float codes9[] = { +#endif + 2900, + 3100, + 3300, + 3500 +}; + +const struct lsp_codebook lsp_cb[] = { + /* /home/sh/Downloads/hackrf/codec2/src/codebook/lsp1.txt */ + { + 1, + 4, + 16, + codes0 + }, + /* /home/sh/Downloads/hackrf/codec2/src/codebook/lsp2.txt */ + { + 1, + 4, + 16, + codes1 + }, + /* /home/sh/Downloads/hackrf/codec2/src/codebook/lsp3.txt */ + { + 1, + 4, + 16, + codes2 + }, + /* /home/sh/Downloads/hackrf/codec2/src/codebook/lsp4.txt */ + { + 1, + 4, + 16, + codes3 + }, + /* /home/sh/Downloads/hackrf/codec2/src/codebook/lsp5.txt */ + { + 1, + 4, + 16, + codes4 + }, + /* /home/sh/Downloads/hackrf/codec2/src/codebook/lsp6.txt */ + { + 1, + 4, + 16, + codes5 + }, + /* /home/sh/Downloads/hackrf/codec2/src/codebook/lsp7.txt */ + { + 1, + 4, + 16, + codes6 + }, + /* /home/sh/Downloads/hackrf/codec2/src/codebook/lsp8.txt */ + { + 1, + 3, + 8, + codes7 + }, + /* /home/sh/Downloads/hackrf/codec2/src/codebook/lsp9.txt */ + { + 1, + 3, + 8, + codes8 + }, + /* /home/sh/Downloads/hackrf/codec2/src/codebook/lsp10.txt */ + { + 1, + 2, + 4, + codes9 + }, + { 0, 0, 0, 0 } +}; diff --git a/libcodec2-android/src/codec2/build_linux/src/codebookd.c b/libcodec2-android/src/codec2/build_linux/src/codebookd.c new file mode 100644 index 0000000..69be7b5 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/codebookd.c @@ -0,0 +1,473 @@ +/* THIS IS A GENERATED FILE. Edit generate_codebook.c and its input */ + +/* + * This intermediary file and the files that used to create it are under + * The LGPL. See the file COPYING. + */ + +#include "defines.h" + + /* /home/sh/Downloads/hackrf/codec2/src/codebook/dlsp1.txt */ +#ifdef __EMBEDDED__ +static const float codes0[] = { +#else +static float codes0[] = { +#endif + 25, + 50, + 75, + 100, + 125, + 150, + 175, + 200, + 225, + 250, + 275, + 300, + 325, + 350, + 375, + 400, + 425, + 450, + 475, + 500, + 525, + 550, + 575, + 600, + 625, + 650, + 675, + 700, + 725, + 750, + 775, + 800 +}; + /* /home/sh/Downloads/hackrf/codec2/src/codebook/dlsp2.txt */ +#ifdef __EMBEDDED__ +static const float codes1[] = { +#else +static float codes1[] = { +#endif + 25, + 50, + 75, + 100, + 125, + 150, + 175, + 200, + 225, + 250, + 275, + 300, + 325, + 350, + 375, + 400, + 425, + 450, + 475, + 500, + 525, + 550, + 575, + 600, + 625, + 650, + 675, + 700, + 725, + 750, + 775, + 800 +}; + /* /home/sh/Downloads/hackrf/codec2/src/codebook/dlsp3.txt */ +#ifdef __EMBEDDED__ +static const float codes2[] = { +#else +static float codes2[] = { +#endif + 25, + 50, + 75, + 100, + 125, + 150, + 175, + 200, + 225, + 250, + 275, + 300, + 325, + 350, + 375, + 400, + 425, + 450, + 475, + 500, + 525, + 550, + 575, + 600, + 625, + 650, + 675, + 700, + 725, + 750, + 775, + 800 +}; + /* /home/sh/Downloads/hackrf/codec2/src/codebook/dlsp4.txt */ +#ifdef __EMBEDDED__ +static const float codes3[] = { +#else +static float codes3[] = { +#endif + 25, + 50, + 75, + 100, + 125, + 150, + 175, + 200, + 250, + 300, + 350, + 400, + 450, + 500, + 550, + 600, + 650, + 700, + 750, + 800, + 850, + 900, + 950, + 1000, + 1050, + 1100, + 1150, + 1200, + 1250, + 1300, + 1350, + 1400 +}; + /* /home/sh/Downloads/hackrf/codec2/src/codebook/dlsp5.txt */ +#ifdef __EMBEDDED__ +static const float codes4[] = { +#else +static float codes4[] = { +#endif + 25, + 50, + 75, + 100, + 125, + 150, + 175, + 200, + 250, + 300, + 350, + 400, + 450, + 500, + 550, + 600, + 650, + 700, + 750, + 800, + 850, + 900, + 950, + 1000, + 1050, + 1100, + 1150, + 1200, + 1250, + 1300, + 1350, + 1400 +}; + /* /home/sh/Downloads/hackrf/codec2/src/codebook/dlsp6.txt */ +#ifdef __EMBEDDED__ +static const float codes5[] = { +#else +static float codes5[] = { +#endif + 25, + 50, + 75, + 100, + 125, + 150, + 175, + 200, + 250, + 300, + 350, + 400, + 450, + 500, + 550, + 600, + 650, + 700, + 750, + 800, + 850, + 900, + 950, + 1000, + 1050, + 1100, + 1150, + 1200, + 1250, + 1300, + 1350, + 1400 +}; + /* /home/sh/Downloads/hackrf/codec2/src/codebook/dlsp7.txt */ +#ifdef __EMBEDDED__ +static const float codes6[] = { +#else +static float codes6[] = { +#endif + 25, + 50, + 75, + 100, + 125, + 150, + 175, + 200, + 225, + 250, + 275, + 300, + 325, + 350, + 375, + 400, + 425, + 450, + 475, + 500, + 525, + 550, + 575, + 600, + 625, + 650, + 675, + 700, + 725, + 750, + 775, + 800 +}; + /* /home/sh/Downloads/hackrf/codec2/src/codebook/dlsp8.txt */ +#ifdef __EMBEDDED__ +static const float codes7[] = { +#else +static float codes7[] = { +#endif + 25, + 50, + 75, + 100, + 125, + 150, + 175, + 200, + 225, + 250, + 275, + 300, + 325, + 350, + 375, + 400, + 425, + 450, + 475, + 500, + 525, + 550, + 575, + 600, + 625, + 650, + 675, + 700, + 725, + 750, + 775, + 800 +}; + /* /home/sh/Downloads/hackrf/codec2/src/codebook/dlsp9.txt */ +#ifdef __EMBEDDED__ +static const float codes8[] = { +#else +static float codes8[] = { +#endif + 25, + 50, + 75, + 100, + 125, + 150, + 175, + 200, + 225, + 250, + 275, + 300, + 325, + 350, + 375, + 400, + 425, + 450, + 475, + 500, + 525, + 550, + 575, + 600, + 625, + 650, + 675, + 700, + 725, + 750, + 775, + 800 +}; + /* /home/sh/Downloads/hackrf/codec2/src/codebook/dlsp10.txt */ +#ifdef __EMBEDDED__ +static const float codes9[] = { +#else +static float codes9[] = { +#endif + 25, + 50, + 75, + 100, + 125, + 150, + 175, + 200, + 225, + 250, + 275, + 300, + 325, + 350, + 375, + 400, + 425, + 450, + 475, + 500, + 525, + 550, + 575, + 600, + 625, + 650, + 675, + 700, + 725, + 750, + 775, + 800 +}; + +const struct lsp_codebook lsp_cbd[] = { + /* /home/sh/Downloads/hackrf/codec2/src/codebook/dlsp1.txt */ + { + 1, + 5, + 32, + codes0 + }, + /* /home/sh/Downloads/hackrf/codec2/src/codebook/dlsp2.txt */ + { + 1, + 5, + 32, + codes1 + }, + /* /home/sh/Downloads/hackrf/codec2/src/codebook/dlsp3.txt */ + { + 1, + 5, + 32, + codes2 + }, + /* /home/sh/Downloads/hackrf/codec2/src/codebook/dlsp4.txt */ + { + 1, + 5, + 32, + codes3 + }, + /* /home/sh/Downloads/hackrf/codec2/src/codebook/dlsp5.txt */ + { + 1, + 5, + 32, + codes4 + }, + /* /home/sh/Downloads/hackrf/codec2/src/codebook/dlsp6.txt */ + { + 1, + 5, + 32, + codes5 + }, + /* /home/sh/Downloads/hackrf/codec2/src/codebook/dlsp7.txt */ + { + 1, + 5, + 32, + codes6 + }, + /* /home/sh/Downloads/hackrf/codec2/src/codebook/dlsp8.txt */ + { + 1, + 5, + 32, + codes7 + }, + /* /home/sh/Downloads/hackrf/codec2/src/codebook/dlsp9.txt */ + { + 1, + 5, + 32, + codes8 + }, + /* /home/sh/Downloads/hackrf/codec2/src/codebook/dlsp10.txt */ + { + 1, + 5, + 32, + codes9 + }, + { 0, 0, 0, 0 } +}; diff --git a/libcodec2-android/src/codec2/build_linux/src/codebookge.c b/libcodec2-android/src/codec2/build_linux/src/codebookge.c new file mode 100644 index 0000000..54a82e6 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/codebookge.c @@ -0,0 +1,283 @@ +/* THIS IS A GENERATED FILE. Edit generate_codebook.c and its input */ + +/* + * This intermediary file and the files that used to create it are under + * The LGPL. See the file COPYING. + */ + +#include "defines.h" + + /* /home/sh/Downloads/hackrf/codec2/src/codebook/gecb.txt */ +#ifdef __EMBEDDED__ +static const float codes0[] = { +#else +static float codes0[] = { +#endif + 2.71, 12.0184, + 0.04675, -2.73881, + 0.120993, 8.38895, + -1.58028, -0.892307, + 1.19307, -1.91561, + 0.187101, -3.27679, + 0.332251, -7.66455, + -1.47944, 31.2461, + 1.52761, 27.7095, + -0.524379, 5.25012, + 0.55333, 7.4388, + -0.843451, -1.95299, + 2.26389, 8.61029, + 0.143143, 2.36549, + 0.616506, 1.28427, + -1.71133, 22.0967, + 1.00813, 17.3965, + -0.106718, 1.41891, + -0.136246, 14.2736, + -1.70909, -20.5319, + 1.65787, -3.39107, + 0.138049, -4.95785, + 0.536729, -1.94375, + 0.196307, 36.8519, + 1.27248, 22.5565, + -0.670219, -1.90604, + 0.382092, 6.40113, + -0.756911, -4.90102, + 1.82931, 4.6138, + 0.318794, 0.73683, + 0.612815, -2.07505, + -0.410151, 24.7871, + 1.77602, 13.1909, + 0.106457, -0.104492, + 0.192206, 10.1838, + -1.82442, -7.71565, + 0.931346, 4.34835, + 0.308813, -4.086, + 0.397143, -11.8089, + -0.048715, 41.2273, + 0.877342, 35.8503, + -0.759794, 0.476634, + 0.978593, 7.67467, + -1.19506, 3.03883, + 2.63989, -3.41106, + 0.191127, 3.60351, + 0.402932, 1.0843, + -2.15202, 18.1076, + 1.5468, 8.32271, + -0.143089, -4.07592, + -0.150142, 5.86674, + -1.40844, -3.2507, + 1.56615, -10.4132, + 0.178171, -10.2267, + 0.362164, -0.028556, + -0.070125, 24.3907, + 0.594752, 17.4828, + -0.28698, -6.90407, + 0.464818, 10.2055, + -1.00684, -14.3572, + 2.32957, -3.69161, + 0.335745, 2.40714, + 1.01966, -3.15565, + -1.25945, 7.9919, + 2.38369, 19.6806, + -0.094947, -2.41374, + 0.20933, 6.66477, + -2.22103, 1.37986, + 1.29239, 2.04633, + 0.243626, -0.890741, + 0.428773, -7.19366, + -1.11374, 41.3414, + 2.6098, 31.1405, + -0.446468, 2.53419, + 0.490104, 4.62757, + -1.11723, -3.24174, + 1.79156, 8.41493, + 0.156012, 0.183336, + 0.532447, 3.15455, + -0.764484, 18.514, + 0.952395, 11.7713, + -0.332567, 0.346987, + 0.202165, 14.7168, + -2.12924, -15.559, + 1.35358, -1.92679, + -0.010963, -16.3364, + 0.399053, -2.79057, + 0.750657, 31.1483, + 0.655743, 24.4819, + -0.45321, -0.735879, + 0.2869, 6.5467, + -0.715673, -12.3578, + 1.54849, 3.87217, + 0.271874, 0.802339, + 0.502073, -4.85485, + -0.497037, 17.7619, + 1.19116, 13.9544, + 0.01563, 1.33157, + 0.341867, 8.93537, + -2.31601, -5.39506, + 0.75861, 1.9645, + 0.24132, -3.23769, + 0.267151, -11.2344, + -0.273126, 32.6248, + 1.75352, 40.432, + -0.784011, 3.04576, + 0.705987, 5.66118, + -1.3864, 1.35356, + 2.37646, 1.67485, + 0.242973, 4.73218, + 0.491227, 0.354061, + -1.60676, 8.65895, + 1.16711, 5.9871, + -0.137601, -12.0417, + -0.251375, 10.3972, + -1.43151, -8.90411, + 0.98828, -13.209, + 0.261484, -6.35497, + 0.395932, -0.702529, + 0.283704, 26.8996, + 0.420959, 15.4418, + -0.355804, -13.7278, + 0.527372, 12.3985, + -1.16956, -15.9985, + 1.90669, -5.81605, + 0.354492, 3.85157, + 0.82576, -4.16264, + -0.49019, 13.0572, + 2.25577, 13.5264, + -0.004956, -3.23713, + 0.026709, 7.86645, + -1.81037, -0.451183, + 1.08383, -0.18362, + 0.135836, -2.26658, + 0.375812, -5.51225, + -1.96644, 38.6829, + 1.97799, 24.5655, + -0.704656, 6.35881, + 0.480786, 7.05175, + -0.976417, -2.42273, + 2.50215, 6.75935, + 0.083588, 3.2588, + 0.543629, 0.910013, + -1.23196, 23.0915, + 0.785492, 14.807, + -0.213554, 1.688, + 0.004748, 18.1718, + -1.54719, -16.1168, + 1.50104, -3.28114, + 0.080133, -4.63472, + 0.476592, -2.18093, + 0.44247, 40.304, + 1.07277, 27.592, + -0.594738, -4.16681, + 0.42248, 7.61609, + -0.927521, -7.27441, + 1.99162, 1.29636, + 0.291307, 2.39878, + 0.721081, -1.95062, + -0.804256, 24.9295, + 1.64839, 19.1197, + 0.060852, -0.590639, + 0.266085, 9.10325, + -1.9574, -2.88461, + 1.11693, 2.6724, + 0.35458, -2.74854, + 0.330733, -14.1561, + -0.527851, 39.5756, + 0.991152, 43.195, + -0.589619, 1.26919, + 0.787401, 8.73071, + -1.0138, 1.02507, + 2.8254, 1.89538, + 0.24089, 2.74557, + 0.427195, 2.54446, + -1.95311, 12.244, + 1.44862, 12.0607, + -0.210492, -3.37906, + -0.056713, 10.204, + -1.65237, -5.10274, + 1.29475, -12.2708, + 0.111608, -8.67592, + 0.326634, -1.16763, + 0.021781, 31.1258, + 0.455335, 21.4684, + -0.37544, -3.37121, + 0.39362, 11.302, + -0.851456, -19.4149, + 2.10703, -2.22886, + 0.373233, 1.92406, + 0.884438, -1.72058, + -0.975127, 9.84013, + 2.0033, 17.3954, + -0.036915, -1.11137, + 0.148456, 5.39997, + -1.91441, 4.77382, + 1.44791, 0.537122, + 0.194979, -1.03818, + 0.495771, -9.95502, + -1.05899, 32.9471, + 2.01122, 32.4544, + -0.30965, 4.71911, + 0.436082, 4.63552, + -1.23711, -1.25428, + 2.02274, 9.42834, + 0.190342, 1.46077, + 0.479017, 2.48479, + -1.07848, 16.2217, + 1.20764, 9.65421, + -0.258087, -1.67236, + 0.071852, 13.416, + -1.87723, -16.072, + 1.28957, -4.87118, + 0.067713, -13.4427, + 0.435551, -4.1655, + 0.46614, 30.5895, + 0.904895, 21.598, + -0.518369, -2.53205, + 0.337363, 5.63726, + -0.554975, -17.4005, + 1.69188, 1.14574, + 0.227934, 0.889297, + 0.587303, -5.72973, + -0.262133, 18.6666, + 1.39505, 17.0029, + -0.01909, 4.30838, + 0.304235, 12.6699, + -2.07406, -6.46084, + 0.920546, 1.21296, + 0.284927, -1.78547, + 0.209724, -16.024, + -0.636067, 31.5768, + 1.34989, 34.6775, + -0.971625, 5.30086, + 0.590249, 4.44971, + -1.56787, 3.60239, + 2.1455, 4.51666, + 0.296022, 4.12017, + 0.445299, 0.868772, + -1.44193, 14.1284, + 1.35575, 6.0074, + -0.012814, -7.49657, + -0.43, 8.50012, + -1.20469, -7.11326, + 1.10102, -6.83682, + 0.196463, -6.234, + 0.436747, -1.12979, + 0.141052, 22.8549, + 0.290821, 18.8114, + -0.529536, -7.73251, + 0.63428, 10.7898, + -1.33472, -20.3258, + 1.81564, -1.90332, + 0.394778, 3.79758, + 0.732682, -8.18382, + -0.741244, 11.7683 +}; + +const struct lsp_codebook ge_cb[] = { + /* /home/sh/Downloads/hackrf/codec2/src/codebook/gecb.txt */ + { + 2, + 8, + 256, + codes0 + }, + { 0, 0, 0, 0 } +}; diff --git a/libcodec2-android/src/codec2/build_linux/src/codebookjvm.c b/libcodec2-android/src/codec2/build_linux/src/codebookjvm.c new file mode 100644 index 0000000..7f1ecb2 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/codebookjvm.c @@ -0,0 +1,1591 @@ +/* THIS IS A GENERATED FILE. Edit generate_codebook.c and its input */ + +/* + * This intermediary file and the files that used to create it are under + * The LGPL. See the file COPYING. + */ + +#include "defines.h" + + /* /home/sh/Downloads/hackrf/codec2/src/codebook/lspjvm1.txt */ +#ifdef __EMBEDDED__ +static const float codes0[] = { +#else +static float codes0[] = { +#endif + 0.435217, 0.668864, 1.0103, 1.22042, 1.50398, 1.78468, 2.13546, 2.35747, 2.61891, 2.73804, + 0.179285, 0.33316, 0.500638, 0.79695, 1.03999, 1.23497, 1.6523, 1.84823, 2.62556, 2.80497, + 0.268785, 0.356576, 0.595753, 1.04434, 1.24938, 1.42868, 1.68699, 1.86469, 2.33991, 2.5138, + 0.12007, 0.165585, 0.484694, 0.95916, 1.23753, 1.52915, 1.83751, 2.10773, 2.48749, 2.76685, + 0.150214, 0.229487, 0.62824, 0.961255, 1.33706, 1.59831, 1.91974, 2.21786, 2.53732, 2.75956, + 0.268624, 0.34598, 0.569637, 0.754737, 0.916538, 1.50854, 1.78635, 1.95442, 2.36953, 2.50182, + 0.246064, 0.468874, 0.662711, 0.890015, 1.14715, 1.51043, 1.78106, 2.09594, 2.65539, 2.80037, + 0.191631, 0.280628, 0.393229, 0.611761, 1.42017, 1.70774, 1.87303, 2.10155, 2.28035, 2.49949, + 0.361668, 0.507047, 0.789974, 1.04599, 1.50238, 1.67703, 1.90534, 2.16255, 2.43226, 2.59087, + 0.20816, 0.294285, 0.448634, 0.694229, 0.872517, 1.07032, 1.70335, 2.16874, 2.42619, 2.60366, + 0.316939, 0.513618, 0.705487, 0.917036, 1.17599, 1.31114, 1.6186, 2.03784, 2.45052, 2.5794, + 0.241068, 0.377728, 0.521595, 0.717203, 1.31041, 1.53999, 1.73643, 2.09893, 2.29792, 2.58735, + 0.234937, 0.281875, 0.780422, 1.44073, 1.60943, 1.75643, 1.97721, 2.14861, 2.60203, 2.7225, + 0.178679, 0.242672, 0.416988, 0.708348, 0.95562, 1.17667, 1.7818, 2.05449, 2.28159, 2.44811, + 0.345036, 0.42108, 0.740887, 1.16544, 1.32494, 1.4888, 1.76346, 1.90617, 2.39505, 2.64916, + 0.249586, 0.357494, 0.520747, 0.847195, 1.42841, 1.59778, 1.77819, 2.1785, 2.41344, 2.56466, + 0.295235, 0.574231, 1.2491, 1.4641, 1.72756, 1.92679, 2.09536, 2.28483, 2.56707, 2.72248, + 0.34193, 0.427307, 0.634001, 0.804212, 0.905629, 1.33337, 1.79033, 1.89276, 2.44582, 2.60283, + 0.363948, 0.508985, 0.667357, 0.946354, 1.43756, 1.62654, 1.81114, 2.03909, 2.29188, 2.43549, + 0.163514, 0.277407, 0.409207, 0.902065, 1.18907, 1.33964, 1.80241, 1.96077, 2.65293, 2.81899, + 0.302643, 0.359753, 0.651207, 1.20802, 1.4237, 1.54815, 1.88213, 2.01559, 2.26054, 2.5789, + 0.155928, 0.216908, 0.381812, 0.654803, 1.11237, 1.58993, 1.84756, 1.97672, 2.22408, 2.72534, + 0.274981, 0.347675, 0.572, 0.736046, 0.894248, 1.63237, 1.89139, 2.05689, 2.6029, 2.72178, + 0.154496, 0.243461, 0.348174, 0.689505, 1.57381, 1.70031, 1.94318, 2.10158, 2.56466, 2.77317, + 0.292612, 0.466612, 0.795936, 1.04747, 1.41369, 1.75085, 2.06289, 2.34007, 2.61361, 2.76949, + 0.242896, 0.3615, 0.555859, 0.793597, 0.932291, 1.40947, 1.86386, 2.00953, 2.4645, 2.67749, + 0.221646, 0.344724, 0.554564, 0.729403, 1.13657, 1.30177, 1.52918, 2.16359, 2.39582, 2.61081, + 0.160969, 0.224467, 0.371545, 0.626879, 1.16095, 1.44423, 1.67597, 1.87978, 2.47859, 2.67202, + 0.214172, 0.341585, 0.676575, 0.977397, 1.32543, 1.7201, 2.07259, 2.36954, 2.63528, 2.77879, + 0.203311, 0.289438, 0.458739, 0.914153, 1.12288, 1.30292, 1.58384, 1.88683, 2.18787, 2.42704, + 0.280383, 0.3716, 0.824827, 1.10025, 1.23623, 1.39892, 1.57804, 2.016, 2.36897, 2.50673, + 0.170627, 0.251778, 0.393686, 0.608347, 1.2876, 1.44667, 1.79328, 2.03655, 2.31015, 2.75244, + 0.18058, 0.288746, 0.987854, 1.43171, 1.67722, 1.91566, 2.12494, 2.28945, 2.58961, 2.75426, + 0.176335, 0.266263, 0.445421, 0.706403, 0.875402, 1.42292, 1.75867, 1.96091, 2.41068, 2.60175, + 0.216173, 0.287404, 0.480696, 1.00977, 1.2913, 1.47664, 1.89558, 2.06429, 2.28406, 2.48311, + 0.176523, 0.273934, 0.403407, 0.966139, 1.30472, 1.43661, 1.94473, 2.08484, 2.54446, 2.76242, + 0.311836, 0.550501, 0.879591, 1.09623, 1.27666, 1.47786, 1.81771, 2.15434, 2.56047, 2.77984, + 0.179765, 0.25056, 0.455939, 1.02389, 1.22513, 1.47566, 1.73462, 1.91871, 2.14734, 2.43824, + 0.271033, 0.457235, 0.599622, 0.821049, 0.940125, 1.20094, 1.84972, 1.98666, 2.54817, 2.75158, + 0.179326, 0.248002, 0.426405, 0.81706, 1.28589, 1.56502, 2.11736, 2.29871, 2.5724, 2.7527, + 0.374409, 0.535936, 0.897009, 1.18507, 1.59157, 1.7572, 1.96794, 2.17999, 2.45739, 2.62264, + 0.185472, 0.282752, 0.409439, 0.657499, 0.856446, 1.0294, 1.87993, 2.06932, 2.34474, 2.7531, + 0.375964, 0.578457, 0.758945, 0.929339, 1.12748, 1.25944, 1.70411, 2.12297, 2.33603, 2.4983, + 0.225641, 0.36103, 0.501679, 0.783379, 1.31485, 1.45262, 1.71415, 1.98716, 2.2257, 2.72436, + 0.144996, 0.252919, 0.632145, 1.22604, 1.57534, 1.90155, 2.17148, 2.39055, 2.68229, 2.80983, + 0.172022, 0.263338, 0.448634, 0.729435, 0.984007, 1.1716, 1.75705, 1.99023, 2.32131, 2.77121, + 0.235731, 0.351117, 0.796871, 1.05571, 1.30022, 1.59182, 1.89587, 2.12292, 2.41789, 2.59982, + 0.254053, 0.319371, 0.455623, 1.08614, 1.66467, 1.91588, 2.05908, 2.23342, 2.45204, 2.58679, + 0.375538, 0.742993, 1.13991, 1.33776, 1.73556, 2.01391, 2.31501, 2.48343, 2.65158, 2.75521, + 0.247245, 0.481131, 0.710366, 0.897602, 1.12109, 1.27171, 1.78735, 2.1995, 2.42966, 2.74067, + 0.226103, 0.311441, 0.501648, 0.844424, 1.36282, 1.53134, 1.77747, 1.98993, 2.18749, 2.3585, + 0.195862, 0.296224, 0.609554, 0.783241, 1.24347, 1.44548, 1.63703, 2.02264, 2.48356, 2.64614, + 0.233302, 0.299441, 0.472792, 1.24946, 1.45788, 1.60186, 1.83143, 1.99372, 2.59719, 2.75543, + 0.168096, 0.224183, 0.3827, 0.596214, 1.06059, 1.29442, 1.60576, 1.84849, 2.3577, 2.56919, + 0.33005, 0.445912, 0.661713, 0.874446, 1.00079, 1.45297, 1.94399, 2.07692, 2.42388, 2.61236, + 0.226382, 0.287303, 0.517631, 0.806229, 1.30901, 1.88528, 2.16051, 2.28641, 2.52638, 2.66082, + 0.20317, 0.499314, 0.887358, 1.23507, 1.46292, 1.69826, 1.99932, 2.22922, 2.57161, 2.76669, + 0.307531, 0.378353, 0.573606, 0.712218, 0.850169, 1.309, 2.05909, 2.26382, 2.49794, 2.67682, + 0.276203, 0.51025, 0.6868, 0.902844, 1.2052, 1.32798, 1.71889, 2.03895, 2.25639, 2.69715, + 0.161948, 0.229115, 0.393619, 0.683613, 1.13781, 1.32269, 1.78372, 1.96158, 2.38907, 2.63608, + 0.201334, 0.276773, 0.468994, 0.967017, 1.47597, 1.63242, 1.96577, 2.19728, 2.48059, 2.70155, + 0.214587, 0.315421, 0.469498, 0.733397, 1.146, 1.27791, 1.72784, 2.22713, 2.44026, 2.68112, + 0.255602, 0.394609, 0.743393, 0.977796, 1.19908, 1.40597, 1.91834, 2.22483, 2.47919, 2.66339, + 0.245989, 0.352625, 0.517055, 0.80283, 1.55871, 1.79565, 1.94405, 2.13364, 2.33327, 2.47998, + 0.337423, 0.480433, 0.869036, 1.13957, 1.63076, 1.82296, 2.07484, 2.29261, 2.47913, 2.62532, + 0.220974, 0.35885, 0.57164, 0.752791, 0.937013, 1.15172, 1.6744, 2.06247, 2.55872, 2.78484, + 0.267518, 0.331708, 0.541111, 1.11655, 1.41112, 1.53287, 1.79295, 1.93352, 2.24894, 2.62864, + 0.084613, 0.105083, 0.297424, 0.916949, 1.2563, 1.56703, 1.88539, 2.18987, 2.52279, 2.7921, + 0.205328, 0.287223, 0.724462, 1.0324, 1.45771, 1.64217, 1.92563, 2.17552, 2.42964, 2.60549, + 0.232554, 0.338724, 0.502115, 0.859975, 1.04409, 1.24565, 1.80656, 1.99964, 2.26116, 2.45998, + 0.291638, 0.379172, 0.626072, 0.792796, 0.959124, 1.50489, 1.73447, 1.91961, 2.61436, 2.72271, + 0.191554, 0.263114, 0.426797, 0.610628, 1.07741, 1.82954, 2.02195, 2.21057, 2.42765, 2.61383, + 0.389151, 0.679476, 0.915414, 1.03664, 1.25085, 1.58661, 2.04097, 2.2815, 2.56794, 2.71882, + 0.2032, 0.30128, 0.470357, 0.668716, 0.851737, 0.980327, 1.57086, 2.03762, 2.28907, 2.69388, + 0.304064, 0.405934, 0.710274, 0.962705, 1.12882, 1.34167, 1.63505, 1.84538, 2.07992, 2.50751, + 0.171777, 0.240705, 0.409371, 0.786432, 1.2232, 1.37569, 1.69176, 1.86608, 2.35041, 2.49394, + 0.231251, 0.277994, 0.557867, 1.32582, 1.66035, 1.77948, 2.00714, 2.17232, 2.44046, 2.65231, + 0.188101, 0.259494, 0.412543, 0.624843, 0.839549, 1.0337, 1.63413, 1.93194, 2.24608, 2.42577, + 0.361304, 0.419465, 0.795676, 1.18461, 1.2968, 1.57845, 1.84175, 1.99736, 2.54054, 2.68714, + 0.274372, 0.338938, 0.492443, 0.963516, 1.50951, 1.70638, 1.86988, 2.07717, 2.26128, 2.44418, + 0.41599, 0.652103, 1.03129, 1.26955, 1.57275, 1.77297, 2.00466, 2.17527, 2.43061, 2.59655, + 0.242045, 0.370942, 0.534392, 0.763529, 1.00117, 1.12976, 1.68219, 2.14464, 2.32448, 2.7157, + 0.377438, 0.588168, 0.765394, 0.976873, 1.35665, 1.49009, 1.73797, 2.00677, 2.21369, 2.38997, + 0.191625, 0.284123, 0.405342, 1.01678, 1.43273, 1.54759, 1.81393, 1.95832, 2.47077, 2.64926, + 0.272672, 0.349555, 0.633911, 1.15223, 1.30394, 1.54764, 1.9195, 2.0477, 2.56278, 2.73058, + 0.168423, 0.23633, 0.421468, 0.831345, 1.08354, 1.55345, 1.88073, 2.0647, 2.37086, 2.63295, + 0.219318, 0.301481, 0.513617, 0.765086, 1.02602, 1.51465, 2.0482, 2.24857, 2.49981, 2.65707, + 0.232695, 0.347947, 0.495203, 0.71883, 1.42301, 1.72249, 1.87958, 2.16504, 2.42025, 2.58966, + 0.270284, 0.336865, 0.684929, 1.15579, 1.69042, 1.87674, 2.02736, 2.22618, 2.44675, 2.582, + 0.149701, 0.193747, 0.352019, 0.520123, 0.823974, 1.43475, 1.68659, 1.96115, 2.37091, 2.69307, + 0.254818, 0.412303, 0.601514, 0.771438, 1.17545, 1.37657, 1.53903, 1.93704, 2.40858, 2.56362, + 0.233713, 0.355886, 0.593725, 0.76288, 1.27148, 1.5639, 1.79752, 2.09469, 2.53863, 2.71173, + 0.179028, 0.237103, 0.396818, 1.04202, 1.63354, 1.76268, 2.12393, 2.32239, 2.58819, 2.75134, + 0.182027, 0.251039, 0.434581, 0.714302, 0.950997, 1.4379, 1.81357, 1.9691, 2.14588, 2.35397, + 0.501538, 0.692148, 0.84886, 1.07131, 1.35054, 1.48948, 1.84164, 2.10428, 2.34154, 2.51529, + 0.27453, 0.38147, 0.526682, 0.922143, 1.44495, 1.5736, 1.85877, 2.06675, 2.2848, 2.62682, + 0.360617, 0.583131, 0.979491, 1.25408, 1.48835, 1.79756, 2.21952, 2.48218, 2.74237, 2.86203, + 0.140913, 0.220301, 0.619552, 0.818307, 1.05243, 1.33997, 1.83073, 2.13395, 2.53638, 2.75113, + 0.293514, 0.391691, 0.79008, 0.96274, 1.16032, 1.5266, 1.80549, 2.04146, 2.36162, 2.56496, + 0.199542, 0.290571, 0.452891, 0.689515, 1.25853, 1.40988, 1.88624, 2.22813, 2.46568, 2.72665, + 0.29692, 0.356356, 0.784287, 0.99654, 1.14618, 1.62387, 1.8155, 2.0383, 2.60063, 2.7057, + 0.206451, 0.276025, 0.537547, 0.802572, 1.22041, 1.64206, 1.86363, 2.00198, 2.21534, 2.58538, + 0.33365, 0.464751, 0.653772, 0.966306, 1.10387, 1.3402, 1.7847, 1.91459, 2.47017, 2.68692, + 0.181861, 0.24487, 0.376456, 0.554383, 1.3299, 1.81044, 2.04784, 2.20232, 2.66086, 2.81706, + 0.450565, 0.647291, 0.951172, 1.22943, 1.51964, 1.68681, 2.04911, 2.26717, 2.50128, 2.6506, + 0.219996, 0.320591, 0.427747, 0.601183, 0.753448, 0.929578, 1.74198, 2.28579, 2.47263, 2.74957, + 0.333848, 0.423373, 0.658791, 1.0313, 1.22263, 1.36577, 1.90189, 2.1211, 2.29031, 2.53118, + 0.166064, 0.233902, 0.383355, 0.661806, 1.22657, 1.39968, 1.77127, 1.97454, 2.17349, 2.56634, + 0.189286, 0.243602, 0.390584, 1.38793, 1.58872, 1.76324, 2.09112, 2.31631, 2.59353, 2.75508, + 0.158404, 0.224878, 0.385, 0.668463, 0.942954, 1.41197, 1.70031, 1.82807, 2.0594, 2.69255, + 0.325989, 0.461263, 0.851471, 1.04571, 1.28403, 1.5162, 1.79734, 2.08839, 2.43767, 2.62721, + 0.223709, 0.28919, 0.632812, 0.858738, 1.5419, 1.74677, 1.93574, 2.18482, 2.40433, 2.58301, + 0.545842, 0.95242, 1.34082, 1.51684, 1.83888, 2.01289, 2.24497, 2.40317, 2.59228, 2.69112, + 0.238526, 0.349079, 0.494582, 0.987665, 1.17075, 1.34823, 1.46864, 2.29696, 2.64416, 2.78738, + 0.270857, 0.442003, 0.655998, 0.881913, 1.25925, 1.42836, 1.76987, 1.99853, 2.39559, 2.65284, + 0.154384, 0.211806, 0.489481, 0.997257, 1.24982, 1.54123, 1.77886, 1.9494, 2.31914, 2.62339, + 0.268258, 0.312888, 0.589114, 1.25863, 1.57271, 1.67543, 1.91278, 2.07046, 2.27993, 2.56423, + 0.170715, 0.224965, 0.374011, 0.540197, 1.16189, 1.49907, 1.92587, 2.08257, 2.24662, 2.46972, + 0.324358, 0.391989, 0.706816, 0.833614, 1.01573, 1.56899, 1.73598, 2.12707, 2.55841, 2.65387, + 0.178059, 0.258575, 0.374125, 0.536831, 1.33483, 1.79863, 1.98698, 2.18925, 2.43227, 2.6267, + 0.198857, 0.420955, 0.817664, 1.17836, 1.46674, 1.8213, 2.20733, 2.47441, 2.73828, 2.85119, + 0.188344, 0.324302, 0.470468, 0.790033, 0.934101, 1.18872, 1.88717, 2.05283, 2.44832, 2.63024, + 0.201295, 0.365646, 0.526513, 0.758388, 1.1401, 1.26733, 1.65017, 1.87934, 2.10289, 2.60029, + 0.135058, 0.169428, 0.307348, 0.50316, 1.01808, 1.44795, 1.81098, 2.134, 2.48028, 2.75985, + 0.178006, 0.26661, 0.390327, 0.928681, 1.50161, 1.62133, 1.87136, 2.02586, 2.58044, 2.7708, + 0.246182, 0.42429, 0.644023, 0.801168, 1.11488, 1.27776, 1.50332, 2.07489, 2.2957, 2.50138, + 0.322996, 0.430355, 0.6316, 1.0477, 1.22184, 1.42673, 1.90308, 2.03222, 2.51673, 2.70845, + 0.292994, 0.430599, 0.619178, 0.794567, 1.28303, 1.65282, 1.84084, 2.06995, 2.38538, 2.52825, + 0.525494, 0.787797, 1.12182, 1.38748, 1.67457, 1.93622, 2.22404, 2.39062, 2.63428, 2.74323, + 0.299504, 0.409196, 0.602235, 0.892336, 1.05643, 1.25377, 1.48914, 1.63988, 2.42748, 2.65037, + 0.423758, 0.52048, 0.758987, 1.04126, 1.17366, 1.42368, 1.81824, 1.93641, 2.363, 2.62664, + 0.155042, 0.247496, 0.641445, 0.954509, 1.22497, 1.46585, 1.83784, 2.09046, 2.4515, 2.71616, + 0.251949, 0.421094, 0.706797, 0.975659, 1.25991, 1.52007, 1.81631, 2.12202, 2.47491, 2.71667, + 0.21522, 0.302248, 0.730598, 0.896343, 1.14557, 1.37019, 1.70069, 2.02256, 2.28327, 2.48922, + 0.28523, 0.453559, 0.66367, 0.861526, 1.0116, 1.24742, 1.65598, 1.86129, 2.57894, 2.73133, + 0.162067, 0.219409, 0.373433, 0.544669, 1.1033, 1.59718, 1.92104, 2.1434, 2.4065, 2.66048, + 0.342367, 0.511499, 0.93135, 1.16322, 1.39365, 1.61115, 1.97277, 2.19442, 2.47077, 2.64926, + 0.25101, 0.364125, 0.560956, 0.746545, 1.01984, 1.17072, 1.53295, 2.28867, 2.57709, 2.72307, + 0.315001, 0.489412, 0.720682, 0.877607, 1.09047, 1.25385, 1.44822, 1.92295, 2.25589, 2.40863, + 0.174666, 0.235793, 0.387644, 0.554402, 1.23109, 1.45614, 1.68803, 2.12745, 2.36703, 2.59727, + 0.215113, 0.341915, 1.04372, 1.32275, 1.49541, 1.74189, 1.96116, 2.23982, 2.5449, 2.70394, + 0.219852, 0.30177, 0.513912, 0.705474, 0.87754, 1.2959, 1.699, 1.98706, 2.28797, 2.49697, + 0.290638, 0.366442, 0.655155, 1.04499, 1.17215, 1.53254, 1.80079, 1.94893, 2.50968, 2.66005, + 0.232252, 0.31377, 0.658552, 0.941977, 1.46317, 1.66549, 1.86246, 2.02784, 2.53402, 2.70124, + 0.326539, 0.552681, 1.12173, 1.33138, 1.52007, 1.86708, 2.08286, 2.33247, 2.60604, 2.73709, + 0.190254, 0.340428, 0.492777, 0.739738, 0.895461, 1.07937, 1.64316, 1.79529, 2.49182, 2.72938, + 0.283586, 0.41844, 0.587306, 0.870866, 1.41855, 1.57703, 1.7995, 2.0694, 2.27448, 2.4381, + 0.235752, 0.35765, 0.502891, 1.01243, 1.25885, 1.40779, 1.82006, 1.95583, 2.5059, 2.73433, + 0.278412, 0.343137, 0.849977, 1.2329, 1.3505, 1.59063, 1.78752, 2.09158, 2.54136, 2.66386, + 0.162966, 0.243159, 0.439238, 0.684821, 0.887783, 1.4629, 1.88174, 2.04425, 2.28939, 2.705, + 0.235063, 0.371799, 0.57821, 0.752199, 1.00855, 1.47628, 1.80491, 2.2714, 2.65504, 2.78965, + 0.154939, 0.223696, 0.344718, 0.667555, 1.49566, 1.66944, 2.06988, 2.30721, 2.62769, 2.81134, + 0.239702, 0.335917, 0.716616, 1.1318, 1.45251, 1.63913, 2.10552, 2.27982, 2.50203, 2.66922, + 0.226818, 0.331261, 0.472705, 0.651974, 0.781639, 1.2198, 1.8229, 2.08273, 2.43933, 2.6109, + 0.223413, 0.359594, 0.534704, 0.741518, 1.22589, 1.38987, 1.61819, 2.00991, 2.207, 2.45984, + 0.171308, 0.268378, 0.383799, 0.858926, 1.37629, 1.51917, 1.7806, 1.92291, 2.62309, 2.8024, + 0.140134, 0.21232, 0.443224, 0.967457, 1.26424, 1.56215, 1.92915, 2.21739, 2.66834, 2.83075, + 0.221323, 0.322124, 0.485563, 0.818589, 1.01184, 1.19898, 1.42362, 1.6694, 2.15752, 2.36319, + 0.369687, 0.525655, 0.719213, 0.939654, 1.13763, 1.31222, 1.59994, 1.82681, 2.35522, 2.58068, + 0.211975, 0.314411, 0.489148, 0.739213, 1.3778, 1.5545, 1.82437, 2.15887, 2.35299, 2.72262, + 0.170698, 0.296368, 0.934285, 1.24313, 1.5559, 1.86654, 2.15994, 2.36344, 2.58503, 2.73853, + 0.189263, 0.305887, 0.439912, 0.78461, 1.22726, 1.34251, 1.58765, 1.75491, 2.43989, 2.72131, + 0.296339, 0.385169, 0.612012, 1.08132, 1.27636, 1.43718, 1.87147, 2.00172, 2.33909, 2.64022, + 0.229588, 0.320544, 0.517278, 0.969137, 1.14256, 1.62609, 1.87792, 2.11546, 2.54674, 2.70802, + 0.248869, 0.420193, 0.732388, 1.04902, 1.30341, 1.60146, 1.94921, 2.23946, 2.64822, 2.82261, + 0.2076, 0.29232, 0.496539, 0.857149, 1.18229, 1.39985, 1.71416, 1.86824, 2.02794, 2.20074, + 0.225558, 0.396897, 0.541783, 0.873366, 1.17897, 1.29958, 1.67719, 1.8496, 2.33048, 2.75272, + 0.176821, 0.231377, 0.372767, 0.508565, 1.15282, 1.80805, 2.11268, 2.25007, 2.57134, 2.74855, + 0.352149, 0.515765, 1.02324, 1.26022, 1.44357, 1.62207, 1.8728, 2.10018, 2.48928, 2.67104, + 0.166138, 0.263444, 0.370151, 0.590066, 0.754819, 0.940533, 1.76187, 1.94661, 2.44501, 2.75819, + 0.342082, 0.476411, 0.656223, 0.851774, 1.00399, 1.15337, 1.6944, 2.06562, 2.25564, 2.44015, + 0.227237, 0.376514, 0.514329, 0.894887, 1.14167, 1.28305, 1.83138, 1.9859, 2.33447, 2.78488, + 0.215891, 0.269548, 0.684111, 1.40566, 1.67481, 1.80093, 2.17209, 2.3394, 2.59157, 2.7301, + 0.23624, 0.400377, 0.533684, 0.750343, 0.910405, 1.08911, 1.73773, 1.91281, 2.19252, 2.68873, + 0.169242, 0.284879, 0.916252, 1.16977, 1.43368, 1.64438, 1.91912, 2.16162, 2.48266, 2.68259, + 0.270731, 0.336506, 0.477594, 1.04271, 1.60584, 1.79686, 1.94591, 2.16004, 2.35491, 2.52095, + 0.420586, 0.652563, 1.11716, 1.40601, 1.74754, 1.94742, 2.20309, 2.35997, 2.5479, 2.68217, + 0.281552, 0.395037, 0.640181, 0.944531, 1.19396, 1.33049, 1.71866, 2.18839, 2.44459, 2.57867, + 0.311824, 0.476892, 0.633431, 0.845825, 1.33252, 1.49166, 1.69361, 2.04108, 2.28932, 2.4394, + 0.133945, 0.20079, 0.647237, 0.927687, 1.18888, 1.36966, 1.69956, 1.97278, 2.29526, 2.67818, + 0.204796, 0.278215, 0.443465, 1.27048, 1.40521, 1.64092, 1.82425, 2.32709, 2.59964, 2.77253, + 0.18397, 0.244116, 0.410594, 0.639103, 1.22159, 1.40487, 1.62836, 1.90244, 2.16863, 2.3068, + 0.343622, 0.434735, 0.666599, 0.868069, 1.04894, 1.53278, 1.81983, 1.97188, 2.2887, 2.44875, + 0.238017, 0.320361, 0.657255, 0.917611, 1.30331, 1.72736, 1.98891, 2.18145, 2.44297, 2.61332, + 0.323613, 0.545056, 0.930173, 1.22606, 1.44018, 1.7723, 2.05689, 2.34781, 2.68938, 2.82062, + 0.28893, 0.401387, 0.617124, 0.836453, 0.990306, 1.26123, 1.91328, 2.11005, 2.32458, 2.55716, + 0.33267, 0.480804, 0.656147, 0.880536, 1.02957, 1.23049, 1.76906, 1.9323, 2.20037, 2.58521, + 0.185551, 0.265352, 0.409432, 0.608847, 1.0347, 1.22282, 1.87697, 2.17165, 2.4035, 2.66644, + 0.155026, 0.223348, 0.401684, 1.07914, 1.41579, 1.62002, 2.04552, 2.25851, 2.63162, 2.80229, + 0.183461, 0.263081, 0.425694, 0.635685, 1.18866, 1.35756, 1.57499, 2.08598, 2.28872, 2.51111, + 0.314738, 0.463011, 0.648733, 0.877651, 1.00289, 1.26581, 2.00541, 2.1981, 2.48153, 2.71418, + 0.244411, 0.318444, 0.546578, 0.793615, 1.32615, 1.73548, 1.9456, 2.11466, 2.31535, 2.47853, + 0.326237, 0.54354, 0.987361, 1.30441, 1.68493, 1.90215, 2.20717, 2.37427, 2.55753, 2.71622, + 0.157795, 0.283302, 0.430398, 0.660379, 0.81106, 1.14254, 1.4793, 1.71871, 2.67026, 2.84756, + 0.220856, 0.283872, 0.779935, 1.07494, 1.31221, 1.62633, 1.83761, 1.96888, 2.15599, 2.60238, + 0.140763, 0.205719, 0.406561, 0.762459, 1.04127, 1.48699, 1.83831, 2.11461, 2.55281, 2.77228, + 0.140451, 0.39592, 0.79211, 1.108, 1.40264, 1.62308, 1.94315, 2.22795, 2.54616, 2.774, + 0.229862, 0.336462, 0.54659, 0.81015, 1.20191, 1.34679, 1.82532, 2.09293, 2.28573, 2.47336, + 0.224913, 0.328246, 0.517269, 0.874793, 1.01259, 1.45218, 1.69578, 2.01493, 2.51145, 2.67257, + 0.247745, 0.335741, 0.546558, 0.710177, 1.17056, 1.72779, 1.97068, 2.15853, 2.48282, 2.62891, + 0.398252, 0.555087, 0.890367, 1.1212, 1.38153, 1.60123, 1.86665, 2.06661, 2.40516, 2.58802, + 0.198563, 0.288867, 0.478054, 0.658477, 0.851841, 1.0271, 1.53974, 2.02111, 2.57946, 2.78418, + 0.304271, 0.371642, 0.66159, 1.06898, 1.22425, 1.41193, 1.68052, 1.86977, 2.10007, 2.30855, + 0.188223, 0.257939, 0.432402, 0.73505, 1.31804, 1.48553, 1.82811, 2.04644, 2.30702, 2.45724, + 0.246723, 0.297276, 0.604475, 1.3109, 1.57044, 1.68885, 1.91366, 2.05133, 2.55601, 2.71497, + 0.158309, 0.234509, 0.435792, 0.6679, 0.957567, 1.23592, 1.59294, 1.81816, 2.30739, 2.76897, + 0.419843, 0.501412, 0.766892, 1.07317, 1.18937, 1.48022, 1.7666, 1.92215, 2.53794, 2.69477, + 0.27514, 0.335563, 0.678421, 1.08152, 1.59238, 1.77263, 1.93124, 2.1407, 2.3338, 2.49086, + 0.372056, 0.856814, 1.23954, 1.40999, 1.6903, 1.86302, 2.0727, 2.27355, 2.53266, 2.69052, + 0.321254, 0.422981, 0.604856, 0.793437, 0.912112, 1.12845, 1.79598, 2.17323, 2.36015, 2.53614, + 0.395214, 0.598779, 0.771997, 0.946713, 1.21378, 1.33043, 1.66033, 1.97715, 2.16506, 2.34402, + 0.225286, 0.317828, 0.464801, 1.11233, 1.36951, 1.512, 1.92195, 2.05341, 2.59352, 2.77729, + 0.330612, 0.407807, 0.730129, 1.25973, 1.45981, 1.60567, 1.98131, 2.13701, 2.46597, 2.67972, + 0.213145, 0.305305, 0.507016, 0.662299, 1.05685, 1.47986, 1.6719, 2.10271, 2.36987, 2.58199, + 0.219658, 0.296096, 0.443507, 0.610973, 0.799691, 1.67658, 1.96549, 2.15323, 2.50223, 2.693, + 0.174947, 0.257739, 0.373547, 0.552567, 1.40532, 1.61425, 1.84892, 2.11779, 2.31788, 2.7119, + 0.209667, 0.297529, 0.756195, 1.0953, 1.5642, 1.84477, 2.1037, 2.29266, 2.52005, 2.67949, + 0.170138, 0.24031, 0.452247, 0.684414, 0.880102, 1.36692, 1.74165, 2.13129, 2.50573, 2.73261, + 0.278164, 0.468635, 0.707518, 0.853693, 1.05478, 1.21046, 1.54094, 2.17456, 2.41066, 2.61214, + 0.155738, 0.23889, 0.352836, 0.621012, 1.44144, 1.6197, 1.82517, 1.97533, 2.52537, 2.74857, + 0.223776, 0.274424, 0.479048, 0.797871, 1.69419, 1.87813, 2.13528, 2.37373, 2.59542, 2.72979, + 0.151088, 0.198286, 0.326558, 0.536276, 0.845893, 1.14165, 1.46056, 1.76287, 2.02585, 2.1773, + 0.434445, 0.614208, 0.887657, 1.02845, 1.19136, 1.3922, 1.78689, 2.06248, 2.4234, 2.61936, + 0.180755, 0.275311, 0.397787, 0.859366, 1.40976, 1.52332, 1.90885, 2.08232, 2.38972, 2.74389, + 0.275975, 0.508416, 0.889894, 1.31893, 1.63331, 1.90473, 2.16901, 2.37466, 2.72697, 2.84767, + 0.156239, 0.262624, 0.406657, 0.739074, 1.04449, 1.20123, 1.81089, 2.0056, 2.5817, 2.80489, + 0.195391, 0.258771, 0.654924, 0.824371, 1.31526, 1.50073, 1.76594, 2.06399, 2.34118, 2.51366, + 0.178034, 0.301047, 0.46302, 0.716172, 1.19887, 1.34045, 1.83456, 2.02213, 2.40075, 2.77629, + 0.340368, 0.404236, 0.843747, 1.03924, 1.20211, 1.70805, 1.91495, 2.16951, 2.52152, 2.62335, + 0.218465, 0.289694, 0.528045, 0.817051, 1.13234, 1.58046, 1.83889, 1.98339, 2.14749, 2.34813, + 0.322509, 0.458058, 0.654679, 0.958976, 1.11821, 1.32157, 1.90139, 2.04641, 2.36093, 2.66422, + 0.191821, 0.252321, 0.389176, 0.581111, 1.52967, 1.93169, 2.08361, 2.27046, 2.56685, 2.71388, + 0.493961, 0.710827, 0.98226, 1.19627, 1.41933, 1.62091, 1.92801, 2.14565, 2.42977, 2.60197, + 0.213148, 0.311589, 0.424636, 0.602664, 0.736895, 1.02216, 1.99228, 2.21853, 2.61163, 2.85032, + 0.288129, 0.434441, 0.629313, 0.856153, 1.28967, 1.42452, 1.8758, 2.15024, 2.35181, 2.53684, + 0.160031, 0.230716, 0.406654, 0.870424, 1.15652, 1.39232, 1.8041, 1.95144, 2.21048, 2.73516, + 0.22934, 0.293962, 0.503222, 1.2421, 1.47582, 1.62465, 1.99868, 2.1445, 2.57855, 2.75327, + 0.15877, 0.220035, 0.363386, 0.577761, 0.96309, 1.17494, 1.73817, 1.9792, 2.16244, 2.66192, + 0.346062, 0.444816, 0.716985, 1.18072, 1.37058, 1.523, 1.89217, 2.06668, 2.3958, 2.62766, + 0.307495, 0.38933, 0.612607, 0.969283, 1.55771, 1.83994, 1.99674, 2.17238, 2.42063, 2.5392, + 0.437804, 0.726957, 1.29117, 1.5033, 1.76543, 1.96212, 2.16365, 2.33623, 2.57962, 2.70852, + 0.232184, 0.333678, 0.528368, 0.706749, 1.20328, 1.37902, 1.61116, 2.15468, 2.5929, 2.75032, + 0.272652, 0.46171, 0.625777, 0.839609, 1.34202, 1.49673, 1.71538, 2.13757, 2.37004, 2.59739, + 0.184908, 0.302324, 0.454883, 0.880307, 1.10438, 1.29253, 1.7772, 1.94336, 2.44417, 2.62273, + 0.265644, 0.341261, 0.553228, 1.13947, 1.42715, 1.56044, 1.93394, 2.08413, 2.39331, 2.65413, + 0.16792, 0.207301, 0.370331, 0.525538, 1.03089, 1.36816, 1.78247, 2.0624, 2.33276, 2.5263, + 0.343172, 0.433912, 0.717501, 0.889734, 1.05206, 1.69528, 2.05316, 2.20846, 2.60887, 2.71832, + 0.216527, 0.305247, 0.44589, 0.729271, 1.63974, 1.90328, 2.05335, 2.22125, 2.43225, 2.56802, + 0.110545, 0.209955, 0.844788, 1.1742, 1.4922, 1.81024, 2.17727, 2.4405, 2.69729, 2.83523, + 0.217384, 0.337412, 0.488999, 0.761842, 0.879715, 1.20953, 1.97075, 2.1208, 2.61165, 2.79176, + 0.190459, 0.296484, 0.469967, 0.800649, 1.10556, 1.27853, 1.51694, 1.69307, 2.11442, 2.71674, + 0.134814, 0.175978, 0.300425, 0.496817, 1.2443, 1.48531, 1.86172, 2.13123, 2.48505, 2.77388, + 0.210174, 0.278266, 0.435508, 0.927538, 1.60691, 1.7539, 1.95755, 2.16628, 2.39852, 2.74961, + 0.213766, 0.3153, 0.509924, 0.70993, 0.964724, 1.10678, 1.38261, 2.00107, 2.32321, 2.56531, + 0.400615, 0.524954, 0.798552, 1.01285, 1.13549, 1.47485, 1.98903, 2.13091, 2.50797, 2.67946, + 0.2494, 0.377023, 0.519635, 0.754227, 1.45956, 1.64276, 1.82896, 2.07788, 2.29823, 2.46753, + 0.473365, 0.683973, 1.05234, 1.37583, 1.54811, 1.74759, 2.1393, 2.31877, 2.60998, 2.73925, + 0.203877, 0.341791, 0.48518, 0.884069, 1.09759, 1.26953, 1.47992, 1.75788, 2.6484, 2.82239, + 0.273046, 0.404254, 0.555403, 0.954547, 1.29123, 1.39902, 1.72289, 1.90344, 2.17198, 2.64531, + 0.040369, 0.117266, 0.617136, 0.892043, 1.26033, 1.54165, 1.85938, 2.1531, 2.49823, 2.76189, + 0.132414, 0.211358, 0.742445, 1.06686, 1.33108, 1.57079, 1.86746, 2.13253, 2.47962, 2.73108, + 0.237329, 0.326529, 0.612538, 0.790663, 0.990133, 1.41374, 1.73823, 1.93691, 2.16773, 2.45163, + 0.27396, 0.405794, 0.57253, 0.933672, 1.05782, 1.39795, 1.85653, 1.99755, 2.59949, 2.76004, + 0.199334, 0.29838, 0.442931, 0.628638, 1.30321, 1.64014, 1.80402, 2.11302, 2.37545, 2.54895, + 0.350188, 0.50201, 0.821298, 1.03864, 1.36929, 1.5924, 1.91082, 2.15649, 2.46051, 2.65326, + 0.281558, 0.399892, 0.573105, 0.753299, 0.900613, 1.05457, 1.58199, 2.17844, 2.43035, 2.61604, + 0.344653, 0.543532, 0.703715, 0.862285, 1.19822, 1.33821, 1.57908, 2.06077, 2.30675, 2.48575, + 0.220701, 0.326795, 0.520618, 0.755133, 1.29555, 1.45189, 1.6905, 2.20005, 2.41427, 2.61591, + 0.279478, 0.332193, 0.801527, 1.34597, 1.48748, 1.6785, 1.9222, 2.10002, 2.58557, 2.71339, + 0.163502, 0.212169, 0.365096, 0.525464, 0.869846, 1.20881, 1.79399, 2.04031, 2.29718, 2.4698, + 0.285531, 0.341488, 0.754059, 1.17002, 1.30084, 1.5137, 1.69986, 1.88992, 2.58146, 2.70687, + 0.249595, 0.366997, 0.626427, 0.945219, 1.40704, 1.56056, 1.83166, 2.23115, 2.46635, 2.65452, + 0.271671, 0.443136, 1.15641, 1.40646, 1.67652, 1.85648, 2.06322, 2.2305, 2.47584, 2.63958, + 0.28662, 0.427806, 0.63732, 0.803409, 0.996161, 1.26638, 1.68175, 2.00397, 2.39465, 2.58855, + 0.314906, 0.440519, 0.612129, 0.896126, 1.47241, 1.71769, 1.88135, 2.09944, 2.36917, 2.49547, + 0.170277, 0.25127, 0.405477, 0.915641, 1.12689, 1.43663, 1.71477, 1.8932, 2.55299, 2.73852, + 0.27941, 0.337137, 0.734563, 1.28105, 1.4806, 1.61188, 1.85321, 1.99488, 2.41605, 2.65483, + 0.165776, 0.226083, 0.417544, 0.744574, 1.04447, 1.53489, 1.80849, 1.94495, 2.13849, 2.60179, + 0.264579, 0.336652, 0.542033, 0.71019, 0.913338, 1.65575, 1.81776, 2.23196, 2.52444, 2.65852, + 0.158194, 0.235588, 0.338347, 0.541657, 1.58338, 1.76629, 2.00914, 2.24334, 2.50394, 2.77516, + 0.332612, 0.50962, 0.822935, 1.07588, 1.45429, 1.65079, 1.97445, 2.25128, 2.53734, 2.74512, + 0.262817, 0.359709, 0.520893, 0.707667, 0.818364, 1.43885, 1.97125, 2.08767, 2.49701, 2.64644, + 0.2332, 0.399599, 0.612456, 0.775547, 1.19919, 1.35576, 1.6469, 2.13625, 2.34249, 2.69574, + 0.149687, 0.238538, 0.372248, 0.63452, 1.25581, 1.43379, 1.77004, 1.92875, 2.61191, 2.82493, + 0.137016, 0.210297, 0.591489, 1.12545, 1.37565, 1.6853, 2.08961, 2.39089, 2.70446, 2.84443, + 0.21349, 0.341024, 0.541716, 0.750061, 1.0882, 1.24458, 1.55534, 1.96557, 2.1879, 2.38371, + 0.300159, 0.489291, 0.825022, 1.0371, 1.19409, 1.34738, 1.68475, 2.02494, 2.46561, 2.74097, + 0.170029, 0.255033, 0.392758, 0.727117, 1.38207, 1.57968, 1.80091, 1.95907, 2.28234, 2.7288, + 0.175883, 0.365509, 1.11217, 1.38587, 1.72039, 1.97781, 2.2453, 2.42161, 2.62957, 2.754, + 0.16259, 0.248164, 0.45463, 0.763209, 0.966031, 1.28234, 1.73074, 1.93805, 2.47938, 2.66756, + 0.258043, 0.345866, 0.55652, 0.981312, 1.36153, 1.48238, 1.87224, 2.15823, 2.36227, 2.55503, + 0.234139, 0.348843, 0.528234, 0.987884, 1.19522, 1.42215, 1.96003, 2.12737, 2.60332, 2.793, + 0.179699, 0.559209, 0.867682, 1.08884, 1.31689, 1.5715, 1.9222, 2.19739, 2.50112, 2.72868, + 0.216784, 0.310791, 0.487492, 0.932903, 1.20195, 1.36655, 1.8004, 1.9775, 2.17426, 2.53707, + 0.186878, 0.400655, 0.580952, 0.846287, 1.10387, 1.26678, 1.84277, 2.01959, 2.488, 2.71722, + 0.164641, 0.248712, 0.389358, 0.772822, 1.21256, 1.36992, 2.02587, 2.27762, 2.61752, 2.80953, + 0.351899, 0.520326, 0.926597, 1.21965, 1.50984, 1.67684, 1.92174, 2.11125, 2.35638, 2.54593, + 0.242182, 0.365285, 0.506156, 0.71602, 0.865221, 1.01169, 1.78692, 2.12298, 2.35088, 2.76773, + 0.413776, 0.559566, 0.7358, 0.928997, 1.07912, 1.26718, 1.88007, 2.15249, 2.32483, 2.53986, + 0.210597, 0.329568, 0.469735, 0.78859, 1.21549, 1.31981, 1.71146, 2.05899, 2.24544, 2.65373, + 0.197937, 0.254148, 0.477985, 1.22709, 1.62992, 1.76743, 2.18698, 2.3851, 2.59487, 2.72554, + 0.205489, 0.333855, 0.523915, 0.706275, 1.10215, 1.24661, 1.6489, 2.02683, 2.28169, 2.75931, + 0.230328, 0.322431, 0.861834, 1.14561, 1.34721, 1.57611, 1.80728, 2.00482, 2.35437, 2.57225, + 0.224898, 0.282022, 0.506636, 1.1523, 1.62656, 1.75209, 2.02818, 2.21882, 2.48896, 2.67046, + 0.313732, 0.625469, 1.16447, 1.49908, 1.74961, 2.01853, 2.26223, 2.4296, 2.69216, 2.8225, + 0.375623, 0.575307, 0.7912, 0.93577, 1.09694, 1.34339, 1.80799, 2.18731, 2.51972, 2.6948, + 0.236981, 0.332412, 0.47927, 0.844461, 1.34764, 1.49073, 1.68394, 2.03914, 2.29762, 2.45843, + 0.129047, 0.20625, 0.636751, 0.865101, 1.13689, 1.35661, 1.7048, 1.91668, 2.51836, 2.75632, + 0.195171, 0.266517, 0.414793, 1.23956, 1.45291, 1.60836, 1.83305, 2.0478, 2.47352, 2.62199, + 0.165853, 0.21272, 0.372757, 0.536136, 1.01394, 1.33963, 1.55512, 1.94574, 2.23628, 2.44095, + 0.256981, 0.368868, 0.635878, 0.802543, 1.08476, 1.43912, 1.81473, 2.12052, 2.45815, 2.62146, + 0.214382, 0.297135, 0.445091, 0.70205, 1.3651, 1.85126, 2.06703, 2.2073, 2.47073, 2.61243, + 0.34071, 0.532103, 0.935278, 1.17102, 1.37789, 1.6386, 1.96527, 2.24616, 2.63127, 2.80634, + 0.310524, 0.412051, 0.582478, 0.768755, 0.871594, 1.11985, 1.92635, 2.20751, 2.40709, 2.63663, + 0.249349, 0.443517, 0.631532, 0.810096, 1.20513, 1.35721, 1.6074, 1.98416, 2.20802, 2.64511, + 0.14309, 0.185312, 0.325214, 0.504, 1.13447, 1.32791, 1.67365, 2.0069, 2.38928, 2.74609, + 0.226575, 0.298946, 0.453938, 0.998061, 1.3946, 1.59728, 2.06418, 2.22325, 2.42547, 2.56946, + 0.183924, 0.255181, 0.415834, 0.624247, 1.04234, 1.20308, 1.55524, 2.12531, 2.40035, 2.66192, + 0.27561, 0.365968, 0.654909, 0.990108, 1.1708, 1.45533, 2.07756, 2.25267, 2.50232, 2.68595, + 0.204334, 0.287844, 0.39481, 0.761295, 1.5012, 1.78471, 1.93557, 2.15283, 2.34926, 2.54564, + 0.342976, 0.527539, 0.917466, 1.16059, 1.49953, 1.76183, 2.09527, 2.30187, 2.54057, 2.69469, + 0.202374, 0.333367, 0.480179, 0.708677, 0.819505, 1.10529, 1.80664, 1.95335, 2.61084, 2.7975, + 0.307033, 0.368471, 0.602486, 1.10861, 1.41335, 1.52864, 1.79852, 1.98614, 2.16905, 2.43726, + 0.144073, 0.196932, 0.386988, 0.819061, 1.28977, 1.62507, 1.90192, 2.13611, 2.48302, 2.70797, + 0.17676, 0.268627, 0.662082, 1.05687, 1.54797, 1.71139, 1.97294, 2.24991, 2.54447, 2.76109, + 0.191409, 0.292985, 0.492193, 0.800526, 1.04184, 1.27855, 1.83663, 2.02868, 2.24939, 2.62778, + 0.324102, 0.399146, 0.687435, 0.868704, 1.02296, 1.58208, 1.85385, 1.98188, 2.55491, 2.67706, + 0.229172, 0.302836, 0.481418, 0.704363, 0.967567, 1.82827, 2.0973, 2.25847, 2.54911, 2.70465, + 0.467124, 0.696788, 0.9395, 1.09499, 1.27754, 1.4885, 1.89628, 2.15847, 2.47418, 2.65999, + 0.175418, 0.234039, 0.367674, 0.513586, 0.747619, 1.0084, 1.58316, 2.05311, 2.36329, 2.68115, + 0.410273, 0.561949, 0.736215, 0.956685, 1.13569, 1.28842, 1.75061, 1.93771, 2.15132, 2.48934, + 0.204541, 0.277613, 0.529607, 0.722971, 1.19998, 1.44734, 1.71563, 1.92105, 2.35778, 2.50749, + 0.253116, 0.311907, 0.696982, 1.32008, 1.57542, 1.70532, 2.00507, 2.16867, 2.46188, 2.66505, + 0.163657, 0.237902, 0.393374, 0.60949, 0.854272, 1.08998, 1.52639, 1.84234, 2.12625, 2.67905, + 0.448627, 0.530664, 0.812719, 1.0952, 1.20764, 1.57541, 1.88421, 2.0343, 2.55301, 2.68835, + 0.262717, 0.338748, 0.512685, 1.00354, 1.48018, 1.62208, 1.82852, 2.14242, 2.35646, 2.51153, + 0.417111, 0.636688, 1.03657, 1.31988, 1.67992, 1.87339, 2.07372, 2.2494, 2.50773, 2.65105, + 0.263698, 0.461151, 0.618737, 0.830471, 1.00404, 1.15887, 1.80157, 2.02022, 2.30656, 2.74304, + 0.387779, 0.575108, 0.729791, 0.932981, 1.36116, 1.50516, 1.75118, 2.06847, 2.33826, 2.48764, + 0.18151, 0.265666, 0.454631, 1.08238, 1.2873, 1.5792, 1.85118, 2.09696, 2.46724, 2.64693, + 0.277668, 0.345119, 0.602341, 1.1792, 1.37899, 1.54562, 1.81386, 1.96259, 2.4918, 2.66445, + 0.17932, 0.24808, 0.456925, 0.722589, 1.12693, 1.57945, 1.7994, 1.95067, 2.48412, 2.70724, + 0.314322, 0.381145, 0.608651, 0.727613, 0.890472, 1.61028, 2.13617, 2.25836, 2.59638, 2.70978, + 0.189539, 0.266068, 0.419729, 0.651693, 1.41016, 1.64311, 1.85481, 2.27558, 2.49205, 2.72201, + 0.254466, 0.313038, 0.594149, 1.01254, 1.68881, 1.93546, 2.11918, 2.28787, 2.53554, 2.66793, + 0.134691, 0.171906, 0.30274, 0.492936, 0.899551, 1.22919, 1.73394, 2.01288, 2.44634, 2.74276, + 0.231556, 0.365068, 0.680761, 0.889142, 1.11134, 1.2959, 1.54264, 1.97178, 2.42756, 2.63191, + 0.222525, 0.305606, 0.527193, 0.687519, 1.18138, 1.67176, 1.86368, 2.07202, 2.63452, 2.77927, + 0.17877, 0.237415, 0.37516, 0.856692, 1.67368, 1.81374, 2.01679, 2.27242, 2.5226, 2.73596, + 0.193532, 0.268731, 0.451328, 0.753471, 0.984854, 1.28535, 1.68565, 1.88412, 2.09168, 2.24342, + 0.476037, 0.65161, 0.801054, 1.01016, 1.24137, 1.35584, 1.77598, 2.08615, 2.27291, 2.45435, + 0.211657, 0.308331, 0.421366, 0.865966, 1.41877, 1.55674, 1.78615, 2.02033, 2.19859, 2.63198, + 0.203789, 0.490794, 1.01014, 1.27501, 1.47221, 1.81014, 2.17064, 2.43766, 2.66212, 2.78806, + 0.174355, 0.252095, 0.674715, 0.842194, 1.05509, 1.278, 1.69868, 2.07056, 2.39938, 2.65743, + 0.245109, 0.324049, 0.628822, 0.92791, 1.1236, 1.58007, 1.87864, 2.0546, 2.35872, 2.54684, + 0.182644, 0.253804, 0.386248, 0.614056, 1.36482, 1.54588, 2.04017, 2.21883, 2.41901, 2.62461, + 0.295605, 0.367794, 0.690701, 1.05516, 1.1866, 1.64445, 1.94415, 2.10144, 2.56212, 2.69127, + 0.220878, 0.289573, 0.640307, 0.822072, 1.14406, 1.5678, 1.76641, 1.90811, 2.10346, 2.56049, + 0.403453, 0.526298, 0.732204, 0.90115, 1.03587, 1.33938, 1.78399, 1.94196, 2.37103, 2.62665, + 0.212825, 0.25857, 0.471588, 0.685549, 1.26374, 1.82105, 2.16382, 2.2884, 2.62806, 2.78816, + 0.401181, 0.642053, 1.03247, 1.23611, 1.44445, 1.68668, 2.00672, 2.22851, 2.57211, 2.72396, + 0.239433, 0.341091, 0.492629, 0.70763, 0.881426, 1.03082, 1.71925, 2.34406, 2.57906, 2.75694, + 0.294093, 0.38277, 0.577412, 1.00928, 1.31304, 1.4193, 1.74467, 2.09423, 2.28904, 2.47584, + 0.169805, 0.236922, 0.403314, 0.638995, 1.17645, 1.35214, 1.66557, 1.90976, 2.15012, 2.71624, + 0.210447, 0.277913, 0.452474, 1.40269, 1.51343, 1.72094, 1.90394, 2.2785, 2.58376, 2.74318, + 0.159574, 0.225382, 0.374008, 0.714137, 1.01125, 1.37171, 1.69916, 1.87159, 2.02706, 2.49119, + 0.258602, 0.557253, 0.81972, 1.03886, 1.30147, 1.44536, 1.83061, 2.09817, 2.32081, 2.54107, + 0.232756, 0.282242, 0.631974, 0.898694, 1.53744, 1.86922, 2.06397, 2.23446, 2.49823, 2.63352, + 0.580133, 0.997946, 1.32096, 1.48187, 1.73161, 1.89858, 2.12071, 2.29013, 2.53009, 2.65166, + 0.21184, 0.307093, 0.45336, 0.945579, 1.25082, 1.49029, 1.72414, 2.2811, 2.5627, 2.7526, + 0.314276, 0.493555, 0.667782, 0.8965, 1.32301, 1.48262, 1.66749, 1.97441, 2.42735, 2.55568, + 0.182455, 0.261592, 0.418011, 1.05093, 1.26139, 1.44337, 1.66547, 1.93903, 2.44469, 2.63845, + 0.24157, 0.306934, 0.491293, 1.10595, 1.55483, 1.66652, 1.92392, 2.08765, 2.3676, 2.65489, + 0.190084, 0.25485, 0.454062, 0.724519, 1.08336, 1.39389, 1.89234, 2.08886, 2.32176, 2.4843, + 0.306497, 0.389831, 0.721793, 0.839714, 1.12475, 1.6524, 1.82292, 2.27331, 2.5692, 2.6696, + 0.1862, 0.27346, 0.383201, 0.564758, 1.51107, 1.84502, 1.99828, 2.1941, 2.38869, 2.58792, + 0.300722, 0.478218, 0.823364, 1.12749, 1.59114, 1.87135, 2.17472, 2.40318, 2.62478, 2.7824, + 0.228884, 0.358342, 0.504622, 0.795874, 1.00562, 1.15261, 1.90805, 2.12479, 2.37247, 2.79758, + 0.171885, 0.248234, 0.432842, 0.833143, 1.04089, 1.26929, 1.66164, 1.91863, 2.15896, 2.6534, + 0.140943, 0.193684, 0.343025, 0.562303, 1.06955, 1.54333, 1.82447, 1.96164, 2.46351, 2.77054, + 0.173053, 0.245656, 0.360656, 0.960618, 1.58953, 1.68991, 1.98414, 2.143, 2.58839, 2.7594, + 0.24018, 0.429951, 0.63744, 0.786596, 1.06915, 1.22657, 1.47088, 1.95205, 2.19506, 2.61597, + 0.367862, 0.471897, 0.730834, 1.08232, 1.22629, 1.46293, 1.92817, 2.05247, 2.40674, 2.66246, + 0.247175, 0.358209, 0.535946, 0.781876, 1.3637, 1.63524, 1.80723, 1.99378, 2.45277, 2.60104, + 0.445578, 0.687898, 1.11411, 1.30103, 1.5774, 1.88604, 2.2249, 2.43653, 2.65969, 2.76103, + 0.214389, 0.336025, 0.487794, 0.759534, 0.970518, 1.1411, 1.45733, 1.62464, 2.30692, 2.71527, + 0.3773, 0.466775, 0.716121, 1.08378, 1.25654, 1.41124, 1.78943, 1.93637, 2.20557, 2.56236, + 0.148362, 0.214593, 0.545023, 0.840437, 1.19333, 1.48066, 1.79187, 2.08342, 2.41054, 2.67613, + 0.150403, 0.278398, 0.792676, 0.97668, 1.21885, 1.40524, 1.77506, 2.16246, 2.54786, 2.74638, + 0.236301, 0.328633, 0.630867, 0.839915, 1.04235, 1.29887, 1.62775, 1.83949, 2.29893, 2.49396, + 0.337889, 0.49792, 0.711277, 0.85042, 0.992027, 1.24688, 1.71075, 2.08668, 2.52716, 2.70716, + 0.172215, 0.23654, 0.372897, 0.525146, 1.18258, 1.73573, 1.92703, 2.11462, 2.31917, 2.54278, + 0.415304, 0.624807, 0.906616, 1.11784, 1.44615, 1.66942, 1.94841, 2.17282, 2.50453, 2.67075, + 0.265417, 0.407241, 0.613894, 0.816534, 0.980063, 1.15606, 1.75675, 2.27485, 2.49719, 2.71224, + 0.27644, 0.468209, 0.649518, 0.816686, 1.19517, 1.35552, 1.54923, 1.93527, 2.21787, 2.42698, + 0.188925, 0.277012, 0.412665, 0.672627, 1.35481, 1.51452, 1.69999, 2.14455, 2.38219, 2.58608, + 0.24263, 0.352485, 0.912974, 1.34378, 1.60443, 1.80187, 2.01479, 2.19307, 2.46081, 2.632, + 0.190903, 0.285841, 0.44907, 0.760328, 0.954285, 1.18294, 1.69264, 1.87816, 2.27684, 2.46596, + 0.220659, 0.300374, 0.721694, 0.947306, 1.29833, 1.56298, 1.76062, 1.88825, 2.50644, 2.68968, + 0.213168, 0.290928, 0.695227, 0.918179, 1.37819, 1.63199, 1.84789, 2.00307, 2.35836, 2.61935, + 0.328586, 0.517244, 0.93732, 1.37624, 1.57484, 1.76435, 2.05863, 2.22433, 2.58444, 2.75665, + 0.248486, 0.367007, 0.562147, 0.750632, 0.902785, 1.14756, 1.63742, 1.91206, 2.41399, 2.6057, + 0.310691, 0.477895, 0.670796, 0.940507, 1.41829, 1.5635, 1.80514, 2.11408, 2.37636, 2.53516, + 0.256555, 0.41421, 0.559427, 0.981289, 1.19165, 1.37831, 1.6784, 1.84931, 2.5767, 2.75663, + 0.291424, 0.335003, 0.750149, 1.28965, 1.43721, 1.59999, 1.80318, 1.96741, 2.60175, 2.73376, + 0.195254, 0.279513, 0.451755, 0.649111, 0.828694, 1.60951, 1.91491, 2.09122, 2.31959, 2.5349, + 0.222304, 0.332624, 0.475678, 0.685205, 1.03033, 1.73722, 1.92098, 2.37829, 2.70672, 2.81773, + 0.164833, 0.240093, 0.359862, 0.801929, 1.51368, 1.64171, 2.04052, 2.24884, 2.48866, 2.71403, + 0.214777, 0.287322, 0.572644, 1.14507, 1.36711, 1.75269, 2.04242, 2.22207, 2.54305, 2.69789, + 0.226099, 0.330382, 0.474439, 0.687757, 0.799187, 1.31984, 1.94457, 2.0781, 2.3678, 2.50846, + 0.24454, 0.392163, 0.553692, 0.729765, 1.24786, 1.44838, 1.61759, 2.07464, 2.34005, 2.51806, + 0.175381, 0.314231, 0.446023, 0.797404, 1.32846, 1.43973, 1.79335, 1.93957, 2.4688, 2.72165, + 0.205808, 0.29367, 0.452447, 1.07427, 1.28823, 1.65563, 1.8575, 2.36469, 2.63981, 2.79814, + 0.253926, 0.392653, 0.587584, 0.800134, 0.97631, 1.18559, 1.57069, 1.82141, 2.09089, 2.34902, + 0.322461, 0.410912, 0.723569, 1.06064, 1.20152, 1.40036, 1.57919, 1.78876, 2.46024, 2.6166, + 0.211266, 0.304981, 0.436011, 0.771978, 1.49062, 1.67775, 1.88623, 2.1135, 2.32635, 2.72726, + 0.235012, 0.406911, 0.864785, 1.29148, 1.70829, 1.93855, 2.1799, 2.3524, 2.56379, 2.71145, + 0.176814, 0.26862, 0.445837, 0.823113, 1.02978, 1.27157, 1.62339, 1.81122, 2.40214, 2.61417, + 0.241865, 0.339268, 0.507509, 1.00368, 1.20435, 1.37256, 1.94079, 2.10137, 2.38561, 2.66998, + 0.230878, 0.334743, 0.50037, 0.879929, 1.02189, 1.53377, 1.97079, 2.12897, 2.56726, 2.71729, + 0.297505, 0.451574, 0.748848, 0.988527, 1.36624, 1.60667, 1.89466, 2.17448, 2.52143, 2.75917, + 0.199265, 0.271145, 0.49816, 0.854679, 1.1721, 1.36415, 1.76208, 1.96909, 2.17354, 2.31163, + 0.222173, 0.424864, 0.564942, 0.829809, 1.03817, 1.19405, 1.7206, 1.85809, 2.43176, 2.74146, + 0.181961, 0.226819, 0.390513, 0.556339, 1.0566, 1.55306, 2.12835, 2.25802, 2.6025, 2.80212, + 0.3576, 0.565047, 1.15301, 1.35031, 1.53358, 1.71854, 1.95789, 2.17535, 2.50565, 2.67849, + 0.162257, 0.236808, 0.374039, 0.570569, 0.748034, 1.17226, 1.82339, 2.05303, 2.51377, 2.77207, + 0.305794, 0.46587, 0.645121, 0.88265, 1.14129, 1.26686, 1.70158, 2.00288, 2.18412, 2.41125, + 0.231652, 0.380738, 0.549642, 0.83741, 1.22527, 1.33297, 1.85158, 2.11937, 2.31508, 2.73211, + 0.235449, 0.286771, 0.684809, 1.34666, 1.52663, 1.70348, 2.10149, 2.25455, 2.57718, 2.71899, + 0.23387, 0.446515, 0.60508, 0.814654, 1.05496, 1.1788, 1.63316, 1.84974, 2.13938, 2.73277, + 0.271706, 0.335152, 0.857227, 1.25374, 1.38719, 1.70217, 1.89677, 2.19111, 2.48, 2.60136, + 0.237386, 0.314549, 0.438339, 0.912164, 1.57776, 1.87779, 2.03279, 2.19704, 2.41232, 2.53648, + 0.361168, 0.574093, 1.02384, 1.46852, 1.69056, 1.91737, 2.18737, 2.33403, 2.6691, 2.80629, + 0.27848, 0.398742, 0.573342, 0.839212, 1.07389, 1.22209, 1.69168, 2.16526, 2.37741, 2.53688, + 0.286018, 0.447947, 0.61506, 0.849446, 1.31947, 1.46358, 1.76995, 2.00103, 2.18943, 2.45038, + 0.21944, 0.301601, 0.668534, 0.861094, 1.21, 1.49867, 1.74512, 1.87777, 2.31438, 2.6196, + 0.223591, 0.352153, 0.598841, 1.21789, 1.35908, 1.59174, 1.77109, 2.21386, 2.56154, 2.73542, + 0.176857, 0.236601, 0.395107, 0.634632, 1.13349, 1.33512, 1.77037, 1.98131, 2.20656, 2.33972, + 0.334735, 0.402265, 0.659168, 0.781639, 0.975228, 1.665, 1.87207, 2.04753, 2.47696, 2.57398, + 0.215968, 0.284755, 0.524241, 0.78146, 1.33481, 1.77238, 1.95388, 2.19421, 2.57825, 2.74194, + 0.298193, 0.489879, 0.812985, 1.18369, 1.49642, 1.67998, 2.10879, 2.31656, 2.67378, 2.85161, + 0.312989, 0.415446, 0.618011, 0.899096, 1.08368, 1.26338, 1.8874, 2.24306, 2.41945, 2.57048, + 0.244471, 0.431115, 0.601512, 0.813139, 1.10216, 1.22106, 1.69244, 2.03316, 2.2218, 2.61984, + 0.150949, 0.21906, 0.349217, 0.611327, 1.07711, 1.25055, 1.91552, 2.08398, 2.45, 2.79254, + 0.161611, 0.218964, 0.445377, 0.927863, 1.45115, 1.76846, 2.13001, 2.36672, 2.666, 2.81405, + 0.196, 0.297256, 0.497266, 0.6919, 1.08988, 1.27368, 1.51372, 2.00647, 2.27378, 2.57222, + 0.335268, 0.460795, 0.685187, 0.867664, 1.01381, 1.47955, 2.01199, 2.16848, 2.57264, 2.71756, + 0.257604, 0.340872, 0.499757, 0.843052, 1.39655, 1.83169, 2.03423, 2.17033, 2.42262, 2.5405, + 0.417663, 0.631718, 0.955424, 1.19732, 1.6598, 1.87988, 2.1688, 2.35905, 2.57809, 2.69825, + 0.162052, 0.251583, 0.4399, 0.660911, 0.903902, 1.3203, 1.62476, 1.77858, 2.53053, 2.79971, + 0.256861, 0.322803, 0.68537, 1.08644, 1.26328, 1.56988, 1.85165, 2.01495, 2.26471, 2.44701, + 0.125192, 0.176171, 0.336135, 0.7816, 1.20022, 1.43997, 1.80542, 2.07752, 2.46247, 2.73819, + 0.102286, 0.191322, 0.774556, 1.07615, 1.36946, 1.62715, 1.97301, 2.236, 2.60937, 2.81298, + 0.173442, 0.232622, 0.491622, 0.844157, 1.09524, 1.3708, 1.69697, 2.05141, 2.31606, 2.50205, + 0.257531, 0.343598, 0.654071, 0.838985, 1.0481, 1.48747, 1.72538, 1.89742, 2.43051, 2.586, + 0.1979, 0.276312, 0.440283, 0.705103, 1.26734, 1.7403, 1.93448, 2.15401, 2.4002, 2.62414, + 0.40959, 0.596785, 0.983751, 1.18177, 1.37115, 1.50238, 1.75828, 2.01857, 2.38005, 2.59215, + 0.231819, 0.33289, 0.483514, 0.644585, 0.816808, 0.926308, 1.4033, 2.23301, 2.46786, 2.67846, + 0.25861, 0.340064, 0.670485, 0.908467, 1.10761, 1.45624, 1.75958, 1.93218, 2.11312, 2.31013, + 0.184377, 0.249203, 0.410806, 0.587907, 1.3025, 1.51032, 1.72443, 1.98189, 2.2829, 2.42213, + 0.25411, 0.313328, 0.659859, 1.26582, 1.41295, 1.66593, 1.92715, 2.10198, 2.55145, 2.67303, + 0.161592, 0.23748, 0.376535, 0.637094, 0.823028, 1.13761, 1.69642, 1.87577, 2.40363, 2.63962, + 0.384501, 0.466812, 0.740791, 0.938093, 1.06235, 1.50928, 1.74914, 1.9178, 2.54816, 2.67151, + 0.333872, 0.419367, 0.638994, 1.09262, 1.52055, 1.64945, 1.86662, 2.14894, 2.34672, 2.50614, + 0.426216, 0.686997, 1.23588, 1.42885, 1.61159, 1.79286, 2.01759, 2.23372, 2.54777, 2.69661, + 0.262949, 0.367509, 0.530429, 0.741867, 0.872474, 1.0696, 1.74557, 2.06119, 2.28384, 2.49418, + 0.335782, 0.547236, 0.716211, 0.919077, 1.27569, 1.40844, 1.68512, 1.96739, 2.21764, 2.44668, + 0.227629, 0.330991, 0.486068, 1.11757, 1.30498, 1.51013, 1.75726, 1.94697, 2.62556, 2.7826, + 0.35985, 0.436633, 0.750634, 1.20151, 1.33757, 1.59484, 1.97027, 2.11384, 2.57381, 2.72996, + 0.211871, 0.304028, 0.512758, 0.663762, 1.08635, 1.63333, 1.81802, 2.12958, 2.39108, 2.60077, + 0.196092, 0.279726, 0.434488, 0.624802, 0.772358, 1.40438, 1.94878, 2.16092, 2.63, 2.77518, + 0.176304, 0.262521, 0.373719, 0.581101, 1.52011, 1.73617, 1.93323, 2.14017, 2.35813, 2.75352, + 0.254932, 0.381411, 0.806187, 1.10229, 1.53452, 1.75028, 1.9709, 2.15987, 2.45592, 2.65841, + 0.190385, 0.288656, 0.449066, 0.678174, 0.812376, 1.44933, 1.72866, 1.96632, 2.63881, 2.78955, + 0.251178, 0.386509, 0.609363, 0.797102, 1.02416, 1.18173, 1.45466, 2.01263, 2.49309, 2.69893, + 0.166654, 0.266226, 0.385171, 0.71199, 1.3979, 1.53235, 1.91597, 2.088, 2.56527, 2.78953, + 0.238453, 0.306036, 0.449309, 0.876277, 1.52144, 1.93398, 2.13442, 2.26799, 2.5376, 2.65825, + 0.161634, 0.219919, 0.353206, 0.524346, 0.961806, 1.20771, 1.68792, 1.91694, 2.16187, 2.32066, + 0.413612, 0.597095, 0.793763, 0.98629, 1.28179, 1.41266, 1.65246, 2.01609, 2.38416, 2.52858, + 0.228655, 0.341562, 0.480989, 0.988605, 1.371, 1.47742, 1.86103, 2.01585, 2.33975, 2.77315, + 0.259092, 0.597012, 0.985224, 1.32174, 1.64335, 1.95737, 2.28868, 2.49747, 2.71649, 2.84447, + 0.185652, 0.304664, 0.446232, 0.864434, 1.09179, 1.27377, 1.94257, 2.09554, 2.52465, 2.76824, + 0.176687, 0.256678, 0.745652, 0.934909, 1.28376, 1.44006, 1.76524, 2.12209, 2.3881, 2.59055, + 0.189805, 0.275637, 0.440995, 0.821356, 1.25602, 1.41098, 1.92978, 2.12014, 2.39603, 2.60464, + 0.266823, 0.337688, 0.819408, 1.13475, 1.2892, 1.77703, 1.98289, 2.22175, 2.59029, 2.6981, + 0.205348, 0.276512, 0.527305, 0.727412, 1.02465, 1.65398, 1.90418, 2.04661, 2.21792, 2.45566, + 0.293498, 0.424494, 0.613795, 0.95613, 1.13398, 1.3248, 1.80903, 1.95392, 2.29385, 2.57588, + 0.18312, 0.24965, 0.376204, 0.543914, 1.35083, 1.90722, 2.09255, 2.25571, 2.51439, 2.6879, + 0.541205, 0.789796, 1.05895, 1.26942, 1.5039, 1.70219, 1.97018, 2.17544, 2.49681, 2.65224, + 0.229326, 0.339475, 0.451881, 0.66121, 0.795832, 1.0738, 2.0271, 2.20637, 2.4789, 2.72678, + 0.330006, 0.506868, 0.673076, 0.887406, 1.22877, 1.34923, 1.78129, 2.08658, 2.27776, 2.48003, + 0.138389, 0.200001, 0.396259, 0.811975, 1.09071, 1.46041, 1.74549, 1.90427, 2.34825, 2.69989, + 0.176584, 0.242161, 0.37827, 1.17785, 1.56472, 1.67817, 1.95162, 2.12141, 2.58011, 2.73713, + 0.145852, 0.198423, 0.335644, 0.550505, 1.01973, 1.37119, 1.79763, 1.94383, 2.20749, 2.74647, + 0.385078, 0.503696, 0.703239, 1.06999, 1.36574, 1.47205, 1.82583, 2.15964, 2.37128, 2.52097, + 0.28495, 0.38805, 0.507352, 0.879125, 1.52353, 1.77624, 1.9296, 2.15756, 2.44799, 2.5864, + 0.491116, 0.756155, 1.2552, 1.52246, 1.77658, 2.02812, 2.28606, 2.42977, 2.67911, 2.77616, + 0.252477, 0.396081, 0.713022, 0.861502, 1.15222, 1.3708, 1.61401, 2.1448, 2.57407, 2.71253, + 0.282756, 0.438437, 0.613566, 0.847746, 1.26077, 1.37906, 1.6422, 2.13754, 2.36837, 2.52216, + 0.203971, 0.322195, 0.479842, 0.953133, 1.21128, 1.39763, 1.80081, 1.95452, 2.40348, 2.57371, + 0.264533, 0.358424, 0.628768, 1.11124, 1.34025, 1.50648, 1.99959, 2.19411, 2.46141, 2.66736, + 0.17773, 0.22368, 0.394553, 0.556177, 0.947415, 1.50064, 1.73353, 1.92605, 2.26147, 2.43605, + 0.314223, 0.363636, 0.727886, 0.85188, 1.05384, 1.79813, 1.97435, 2.1826, 2.538, 2.62968, + 0.201778, 0.2755, 0.404891, 0.747466, 1.50005, 1.84118, 1.99884, 2.22681, 2.48199, 2.66951, + 0.132164, 0.314955, 0.821473, 1.19604, 1.42659, 1.69993, 2.03686, 2.3235, 2.68547, 2.82896, + 0.223374, 0.347335, 0.50773, 0.773547, 0.967916, 1.13413, 1.9914, 2.30657, 2.52136, 2.78875, + 0.312742, 0.449784, 0.583287, 0.934234, 1.26857, 1.36506, 1.5693, 1.68705, 2.0773, 2.59502, + 0.124286, 0.162126, 0.29073, 0.654031, 1.23166, 1.53846, 1.89307, 2.18478, 2.56264, 2.79822, + 0.177049, 0.251654, 0.367891, 0.912504, 1.55758, 1.69305, 1.89899, 2.07214, 2.35016, 2.64604, + 0.240517, 0.378333, 0.547809, 0.754272, 0.973321, 1.10367, 1.57442, 2.02805, 2.21113, 2.56271, + 0.427795, 0.519003, 0.771284, 0.93724, 1.08662, 1.60988, 1.87875, 2.05279, 2.53412, 2.65715, + 0.22437, 0.317969, 0.439666, 0.812931, 1.3985, 1.62663, 1.79418, 2.114, 2.30916, 2.49684 +}; + /* /home/sh/Downloads/hackrf/codec2/src/codebook/lspjvm2.txt */ +#ifdef __EMBEDDED__ +static const float codes1[] = { +#else +static float codes1[] = { +#endif + 0.005167, -0.03731, -0.002159, 0.016849, 0.130396, + 0.039445, 0.03168, -0.074412, -0.031499, 0.060536, + 0.019479, -0.030564, -0.048137, -0.056279, -0.027829, + 0.020585, -0.01127, 0.023913, -0.005706, 0.011407, + -0.023217, 0.107455, -0.037777, 0.00407, -0.017279, + -0.090444, 0.007641, 0.099001, -0.047913, -0.017199, + 0.0227, -0.063865, 0.047213, 0.043843, -0.036225, + 0.001312, -0.123861, -0.038988, 0.058666, 0.074541, + 0.039508, 0.1103, 0.013954, -0.119228, -0.035807, + -0.047392, 0.027035, -0.004412, -0.03265, -0.03715, + 0.002491, -0.045447, 0.15826, 0.022828, -0.030124, + -0.047856, 0.088744, -0.009678, 0.106688, 0.08769, + -0.027941, 0.044084, -0.0285, 0.018736, -0.069969, + -0.035358, -0.051568, -0.030459, -0.017899, 0.027632, + -0.018607, -0.123557, 0.019228, 0.057485, -0.028907, + 0.019057, 0.038151, -0.08022, 0.034222, 0.023081, + 0.021312, 0.041905, 0.112903, 0.024092, 0.093974, + -0.116679, 0.015344, -0.066059, -0.096437, 0.004041, + -0.022464, -0.11626, 0.047819, -0.003921, -0.073504, + 0.001975, -0.025869, 0.0282, 0.12269, 0.010627, + -0.035672, 0.078963, -0.009686, 0.000743, -0.147582, + 0.016932, -0.020291, -0.096896, -0.237875, -0.029121, + 0.017376, -0.04013, -0.053865, 0.15406, -0.013215, + 0.015215, -0.019023, -0.070604, 0.032265, 0.04034, + 0.102365, -0.022746, 0.019895, 0.05057, 0.008845, + -0.034134, 0.044441, -0.049387, -0.140481, 0.07257, + 0.013023, -0.006079, 0.037574, 0.004937, -0.081501, + 0.003696, 0.049908, 0.007355, 0.000403, 0.026006, + -0.008466, 0.08068, 0.061382, -0.108985, -0.08806, + -0.012275, -0.081061, 0.020333, -0.079001, 0.068724, + -0.014081, -0.042609, 0.093365, 0.04412, 0.000303, + 0.063391, 0.096574, -0.105424, 0.039041, 0.010412, + -0.054031, -0.084948, 0.080406, -0.035883, 0.137428, + 0.063037, 0.050562, 0.02469, -0.031394, 0.13032, + -0.015501, -0.078884, -0.076886, -0.013864, -0.073587, + 0.048778, 0.003814, -0.031125, 0.046897, 0.028304, + 0.048692, 0.132795, 0.06545, 0.059487, -0.042396, + -0.176999, 0.056943, -0.004135, -0.049378, -0.041083, + -0.039445, -0.016292, -0.00455, 0.06201, -0.079613, + -0.054566, -0.008476, -0.01671, 0.049202, 0.025758, + -0.078723, 0.092091, 0.096536, -0.065079, 0.021161, + 0.076657, 0.009203, -0.036866, -0.016559, 0.012823, + 0.008225, -0.003006, 0.108033, 0.04312, -0.06087, + -0.019346, 0.02279, -0.001728, 0.062304, -0.016965, + -0.001302, -0.01449, -0.041803, -0.034058, -0.197066, + -0.033655, -0.127217, -0.108681, -0.010571, -0.004705, + -0.015553, -0.086069, 0.034109, -0.101379, 0.002068, + -0.004003, -0.044637, -0.068617, 0.052228, -0.047812, + -0.043307, 0.035681, 0.042207, -0.055946, 0.055944, + -0.026792, -0.012601, -0.05671, -0.021094, 0.105842, + -0.025598, -0.078858, -0.013487, 0.030728, -0.031956, + 0.031444, 0.022763, 0.025364, 0.121366, 0.070736, + -0.084556, 0.098118, -0.024301, -0.058655, -0.043194, + -0.011752, -0.043781, 0.091051, -0.071201, -0.02098, + 0.082904, -0.031657, -0.088247, 0.066709, -0.079182, + -0.012151, 0.011796, -0.010589, 0.100656, 0.094539, + 0.035967, 0.025338, 0.071826, 0.009741, -0.040209, + 0.006866, -0.015095, -0.168469, -0.056133, 0.060145, + 0.04583, -0.068969, 0.034551, 0.015842, -0.092809, + 0.054699, 0.138744, 0.001726, 0.006927, 0.005167, + 0.016978, 0.046384, -0.060183, -0.040742, -0.072692, + -0.022489, -0.029728, -0.065018, -0.124741, 0.044927, + -0.029057, -0.037154, 0.031068, 0.060086, 0.009984, + 0.009311, -0.006957, -0.105508, 0.059637, -0.019564, + -0.068154, -0.066443, 0.000799, 0.028579, 0.097063, + 0.096936, 0.03023, -0.034623, -0.088918, 0.040334, + 0.019439, -0.050707, -0.003294, -0.028505, -0.053599, + 0.06246, -0.070688, -0.016465, -0.03568, 0.017378, + 0.009363, 0.048761, 0.043374, 0.039587, -0.023232, + -0.067033, 0.042663, 0.05407, -0.042797, -0.089391, + -0.030497, -0.050249, 0.059528, 0.089089, -0.029633, + 0.064125, -0.086614, -0.002005, 0.08062, 0.000502, + -0.00349, 0.097336, 0.099565, 0.015648, 0.006691, + 0.077668, 0.016572, 0.035404, -0.046026, 0.017237, + -0.048631, 0.009314, 0.141479, 0.017079, 0.043796, + -0.106474, 0.145951, 0.05774, 0.01125, -0.059443, + 0.027572, 0.02665, 0.008527, 0.002949, -0.03768, + -0.077991, -0.090617, 0.00342, -0.04601, 0.007354, + 0.019056, -0.128651, 0.016464, 0.004584, -0.030883, + -0.092069, 0.038976, -0.08184, 0.066695, -0.04734, + 0.003513, 0.040613, 0.046815, -0.023406, 0.062389, + 0.021759, 0.024928, -0.018922, -0.048006, 0.0638, + -0.014416, -0.050333, 0.042628, -0.114934, -0.10145, + 0.062139, 0.029295, -0.065908, 0.111463, 0.050781, + -0.022707, 0.135414, 0.003548, 0.134535, -0.048259, + -0.092344, -0.027727, 0.016343, -0.060786, -0.081502, + -0.005412, -0.026229, -0.143331, 0.052404, -0.077298, + -0.035919, -0.041968, -0.106108, -0.004369, 0.065028, + 0.09637, -0.053299, 0.043317, -0.049735, 0.049815, + 0.032324, 0.051309, -0.009607, -0.205917, 0.005023, + -0.054316, -0.022895, 0.099327, -0.006927, -0.076574, + -0.111024, 0.111026, 0.038381, -0.060368, 0.064238, + -0.034316, 0.026846, 0.02574, -0.076162, -0.163904, + 0.055955, -0.056885, 0.014831, -0.120715, 0.090938, + 0.035289, -0.036439, 0.060012, 0.080302, 0.036215, + 0.06525, 0.08303, -0.058784, 0.104826, -0.051805, + -0.011099, -0.00642, 0.053042, 0.024127, 0.092534, + 0.058569, -0.033442, 0.025186, -0.018222, 0.117744, + 0.044345, -0.042456, -0.043767, -0.021378, -0.121965, + 0.027371, 0.052731, -0.020316, 0.036912, 0.115357, + 0.03115, 0.041547, 0.059267, -0.039672, -0.086918, + -0.162369, 0.024801, 0.031725, 0.0834, -0.034463, + 0.000272, -0.008147, -0.002016, 0.131953, -0.092911, + -0.091944, -0.062864, -0.005221, 0.063647, -0.012658, + 0.042685, 0.067952, 0.038644, -0.153221, 0.096841, + 0.108299, 0.089446, -0.047164, 0.004196, -0.043268, + -0.035456, 0.050838, 0.070444, 0.084465, -0.07998, + -0.048916, 0.057726, 0.023894, 0.027653, 0.017775, + 0.015461, -0.030287, -0.022245, 0.052081, -0.150947, + -0.002682, -0.056774, -0.123366, -0.091754, 0.006536, + 0.006473, -0.143025, 0.05469, -0.043189, 0.03297, + 0.027446, 0.033127, -0.132722, -0.010417, -0.080097, + -0.018187, 0.001858, 0.11129, -0.090749, 0.059434, + -0.068738, 0.090679, -0.14507, -0.065277, 0.063514, + -0.003982, -0.056382, -0.003673, 0.015845, -0.073396, + 0.043688, 0.002836, 0.069211, 0.124852, -0.053313, + -0.040946, 0.07044, -0.107024, -0.019199, -0.033672, + -0.00144, 0.02168, 0.110595, -0.053452, -0.052426, + 0.035461, -0.028179, -0.049041, 0.02258, -0.010989, + -0.002913, -0.051691, -0.075881, 0.037241, 0.076377, + 0.034735, -0.031556, 0.073516, -0.001427, 0.016296, + -0.017537, 0.003346, -0.099774, -0.067624, -0.044257, + -0.018202, 0.030622, 0.012773, 0.046475, -0.121785, + -0.057265, 0.116179, -0.079916, 0.066396, 0.050104, + -0.013177, 0.057766, -0.047879, -0.109526, -0.146491, + 0.032675, -0.049318, -0.057045, -0.080068, 0.089621, + -0.046564, -0.029992, 0.040828, 0.029281, -0.037369, + -0.009731, -0.082145, -0.117622, 0.117077, 0.037369, + 0.00082, -0.106634, -0.007967, 0.000812, 0.140637, + 0.03653, 0.062121, -0.065504, -0.09493, 0.121336, + 0.01753, -0.01733, -0.040402, -0.018255, 0.010992, + 0.019746, -0.027564, 0.033588, 0.042466, -0.003143, + 0.013767, 0.084179, 0.033753, -0.017279, -0.009676, + -0.006452, 0.032645, 0.031852, -0.030975, -0.043384, + -0.005433, -0.015258, 0.053273, 0.054748, -0.064736, + 0.008959, -0.141223, -0.032957, -0.015079, 0.018198, + -0.001681, 0.143079, 0.076, 0.001037, -0.048744, + 0.022062, 0.02603, -0.008263, -0.050353, -0.023037, + -0.036477, -0.051733, 0.137823, -0.034438, -0.007573, + -0.004256, 0.064218, 0.075183, 0.095106, 0.026497, + 0.02636, 0.009791, -0.058039, 0.053315, -0.077817, + -0.033283, -0.081151, -0.05522, 0.004268, 0.017539, + -0.007329, -0.1172, 0.09322, 0.037359, 0.002718, + 0.010749, 0.018281, -0.0758, -0.024889, 0.00572, + 0.022129, 0.035613, 0.036187, 0.032246, 0.105439, + -0.073766, 0.016887, -0.059934, -0.049471, 0.07352, + -0.024041, -0.104642, 0.023557, -0.059746, -0.043871, + 0.022311, -0.00025, -0.074027, 0.198593, 0.102732, + 0.024478, 0.077658, -0.060042, -0.018229, -0.149648, + -0.009871, -0.105822, 0.007585, -0.161459, -0.041121, + -0.02146, 0.00902, -0.065018, 0.111801, -0.024953, + 0.074594, -0.026041, -0.062859, 0.009199, 0.069609, + 0.078672, -0.033414, 0.054128, 0.005408, -0.016273, + 0.052076, 0.10761, -0.067518, -0.0964, 0.033703, + -0.01435, -0.024676, 0.056254, -0.04377, -0.060847, + -0.004185, 0.07355, -0.05783, -0.016644, 0.029096, + 0.005755, 0.026472, 0.040449, -0.09195, -0.048538, + -0.034439, -0.107938, 0.090712, -0.117001, 0.04317, + -0.006505, -0.035277, 0.117316, 0.127002, 0.047906, + -0.001441, 0.118379, -0.132165, 0.00738, 0.023823, + -0.02012, -0.083725, 0.047284, 0.023795, 0.074123, + -0.013439, 0.024994, 0.060254, -0.06912, 0.166373, + -0.024228, -0.06315, -0.046506, -0.077202, -0.054592, + -0.006571, 0.010335, -0.006568, 0.003982, 0.075837, + 0.008643, 0.136339, -0.005502, 0.03391, -0.066379, + -0.127371, -0.006954, 0.03977, -0.070123, 0.060925, + -0.046386, -0.02642, -0.00528, 0.103509, -0.02231, + -0.00374, -0.014999, -0.03777, 0.080005, 0.025231, + -0.054995, 0.071017, 0.009442, -0.075737, 0.013441, + 0.051947, 0.027097, -0.070351, -0.055705, -0.021115, + 0.021387, 0.029232, 0.163331, -0.03238, 0.010008, + -0.011987, -0.028631, 0.002665, 0.01477, -0.009558, + -0.034325, 0.01583, -0.091253, -0.012677, -0.107378, + -0.034624, -0.047725, -0.10233, 0.042525, -0.006869, + 0.014048, -0.043127, 0.052384, -0.047473, 0.055102, + 0.009744, -0.033646, -0.081755, -0.001464, -0.016223, + -0.036697, -0.002279, 0.023279, -0.036221, 0.101478, + -0.058454, 0.065074, 0.003524, 0.00501, 0.097182, + -0.038171, -0.037943, -0.009994, -0.033355, -0.044552, + 0.041318, 0.065041, 9.2e-05, 0.100816, 0.029007, + -0.031803, 0.183537, -0.009617, -0.010544, -0.028465, + 0.0069, -0.014988, 0.09049, -0.174817, 0.027464, + 0.063314, -0.049281, -0.001567, 0.091421, -0.078603, + -0.004869, -0.063266, -0.001922, 0.069338, 0.081771, + 0.058737, 0.073195, 0.081676, -0.047808, -0.025797, + -0.004185, 0.033203, -0.125472, -0.108148, 0.031258, + 0.035192, 0.029957, 0.046675, 0.047238, -0.088197, + 0.033315, 0.114919, -0.04918, 0.025707, 0.053843, + 0.035182, 0.140206, -0.05866, -0.025978, -0.019658, + -0.014847, -0.021051, -0.034385, -0.121789, 0.173406, + -0.112251, -0.022333, 0.071206, 0.028998, 0.046468, + 0.067704, -0.026159, -0.158316, 0.014936, 0.040216, + -0.010137, -0.053492, 0.004935, -0.011277, 0.073852, + 0.091261, 0.114794, -0.01406, -0.051545, 0.077316, + 0.101258, -0.046137, 0.022994, -0.066767, -0.065537, + 0.049952, -0.043582, 0.012823, 0.009313, 0.036343, + 0.054885, 0.037796, 0.02194, 0.013211, 0.006019, + -0.099578, 0.058596, -0.045463, -0.015632, -0.087141, + -0.019273, -0.03314, 0.043796, 0.119057, -0.081813, + -0.021538, -0.070453, -0.052551, 0.077213, 9.4e-05, + 0.050268, 0.092271, 0.051688, -0.025224, 0.075437, + 0.027983, 0.069205, 0.031787, -0.099975, 0.004387, + -0.002747, -0.056567, 0.161394, 0.000164, 0.084189, + -0.124844, 0.050329, 0.009844, 0.055877, 0.055701, + 0.030479, 0.028843, -0.001076, -0.017173, -0.10277, + -0.038426, -0.133841, -0.03584, -0.072046, 0.020206, + 0.016438, -0.097885, 0.041857, 0.034601, 0.030422, + -0.089192, -0.014112, -0.052276, 0.012005, -0.029335, + -0.011331, 0.101833, 0.063827, 0.044288, 0.101597, + -0.034689, -0.027434, -0.017801, -0.079224, 0.067103, + -0.027456, -0.098034, 0.009448, -0.038986, -0.156729, + 0.085023, 0.033136, -0.021343, 0.110701, -0.011901, + -0.006484, 0.082023, -0.027094, 0.091208, -0.013163, + -0.012223, 0.005933, 0.010653, -0.098119, -0.005304, + -0.021061, -0.058077, -0.073035, 0.097856, -0.102847, + -0.035329, -0.092754, -0.101463, -0.048671, 0.055015, + 0.102145, 0.062017, 0.016002, 0.036489, 0.059, + 0.042861, 0.025447, -0.019735, -0.107841, -0.033752, + -0.043982, -0.067059, 0.051092, 0.025235, -0.147107, + -0.016269, 0.123009, 0.035894, -0.020453, 0.040013, + 0.015557, 0.015825, 0.080712, -0.06963, -0.149739, + 0.022006, -0.008848, 0.040169, -0.095688, 0.059575, + -0.030641, -0.061353, 0.046302, 0.104489, 0.043372, + -0.001579, 0.059737, -0.104073, 0.042342, -0.048611, + -0.013811, -0.056255, 0.107179, 0.057433, 0.084815, + 0.030217, 0.02236, -0.040342, -0.028775, 0.120588, + 0.04127, -0.045775, -0.030195, -0.106859, -0.104349, + 0.072418, -0.003603, -0.013072, 0.040728, 0.086869, + 0.091943, 0.066517, 0.024442, -0.030929, -0.03292, + -0.160336, -0.010347, -0.068458, 0.017458, 0.044823, + 0.050694, 0.067625, 0.040303, 0.113164, -0.038747, + -0.065558, -0.106357, -0.028352, 0.121488, 0.026548, + -0.00782, 0.054872, 0.094674, -0.099533, 0.005231, + 0.118132, 0.04278, -0.065079, 0.03144, 0.043229, + -0.050024, 0.015943, 0.073917, 0.034049, 0.010548, + -0.024979, 0.022639, 0.027795, 0.049491, 0.048762, + -0.002738, -0.010783, -0.027637, -0.006986, -0.104141, + -0.066719, -0.061742, -0.067028, -0.053057, -0.003478, + -0.050948, -0.122196, 0.022082, 0.002595, 0.015094, + 0.006014, 0.005784, -0.184537, -0.034872, -0.036104, + 0.055412, 0.006886, 0.103488, -0.063001, 0.096665, + -0.035533, 0.009847, -0.095114, 0.008588, 0.023736, + -0.034278, -0.11197, -0.041172, 0.03973, -0.102952, + 0.063775, 0.039273, 0.109863, 0.0918, 0.030306, + -0.082206, 0.089449, -0.058478, -0.029341, 0.038389, + 0.061057, -0.024711, 0.111044, -0.035079, -0.027985, + 0.01457, 0.002046, -0.031545, 0.058848, -0.0195, + -0.002475, -0.025589, -0.144358, 0.063478, 0.124927, + -0.014094, -0.01097, 0.031621, -0.040043, 0.004389, + 0.025003, 0.052397, -0.054526, -0.073469, 0.026795, + -0.024697, 0.024739, 0.118299, 0.014948, -0.132109, + 0.020192, 0.037815, -0.09027, 0.049313, 0.082764, + -0.022642, -0.006053, -0.038073, -0.057363, -0.107347, + 0.033166, -0.027556, -0.019765, -0.111958, 0.027773, + -0.063001, -0.052998, 0.019353, -0.009646, -0.01127, + 0.011872, -0.006508, -0.122226, 0.059824, 0.041779, + 0.016445, -0.03189, -0.03631, 0.013085, 0.091631, + 0.062866, 0.054501, -0.117523, -0.010907, 0.087026, + -0.014974, -0.03592, -0.048565, -0.019246, -0.043405, + -0.006959, 0.006211, 0.04237, 0.014603, -0.006435, + 0.019149, 0.078038, -0.020556, 0.018114, -0.036521, + -0.054036, 0.007325, 0.056349, -0.033497, -0.02596, + 0.050184, -0.066536, 0.091501, 0.071356, -0.049044, + -0.032263, -0.095268, -0.008784, 0.049033, 0.036929, + 0.020357, 0.152151, 0.040814, -0.063159, -0.024324, + -0.017084, 0.011876, -0.015442, -0.019811, -0.000366, + -0.0027, -0.072981, 0.109288, 0.007473, -0.049442, + -0.05404, 0.051947, 0.019359, 0.12916, 0.021981, + 0.002248, 0.035262, -0.023141, 0.064666, -0.078273, + -0.031663, -0.031343, -0.006058, -0.045421, 0.017466, + -0.067122, -0.130784, 0.067057, 0.05246, -0.041165, + -0.004411, 0.046453, -0.055461, 0.048162, -0.009687, + 0.02153, 0.007211, 0.104764, 0.079849, 0.086248, + -0.072791, 0.001112, -0.027964, -0.071233, -0.013339, + 0.007979, -0.118231, 0.076826, -0.060762, -0.084358, + -0.011447, 0.009765, 0.014163, 0.164784, -0.015892, + -0.020756, 0.152509, -0.014014, -0.041853, -0.117008, + -0.011755, -0.005766, -0.086896, -0.13965, -0.032342, + 0.025651, -0.007843, -0.039073, 0.103397, -0.042591, + -0.005971, -0.001324, -0.053945, -0.000716, 0.048977, + 0.130185, 0.028226, 0.061179, 0.024489, -0.021939, + -0.007019, 0.054336, -0.01004, -0.095411, 0.082406, + -0.03213, -0.015054, 0.033059, 0.002802, -0.080159, + -0.022452, 0.077426, -0.015314, 0.033583, 0.028479, + 0.023293, 0.035078, 0.006442, -0.110541, -0.106244, + -0.034737, -0.10414, -0.03457, -0.114316, 0.079382, + 0.006009, 0.003901, 0.080081, 0.055082, 0.012896, + 0.064981, 0.057219, -0.112986, 0.003906, -0.028414, + -0.012383, -0.054541, 0.077483, 0.004267, 0.123567, + 0.007369, 0.099856, 0.023273, -0.028194, 0.12203, + -0.036635, -0.126589, -0.034567, -0.028288, -0.06504, + 0.01428, 0.011435, -0.004867, 0.043901, 0.035395, + 0.028599, 0.075858, 0.11846, 0.070581, -0.051903, + -0.170905, 0.050352, 0.053514, -0.017139, 0.021748, + -0.09661, 0.008904, -0.001049, 0.078787, -0.101201, + -0.026229, -0.019757, -0.035771, 0.054142, 0.068041, + -0.020328, 0.099979, 0.096623, -0.046957, -0.001733, + 0.049586, 0.052458, -0.031724, -0.028332, -0.005418, + 0.04671, 0.014238, 0.133125, -0.005428, -0.080055, + -0.033226, 0.034007, 0.025272, 0.033924, -0.044662, + -0.03469, -0.079173, -0.160689, -0.153893, -0.228771, + -0.00245, -0.083966, -0.168294, 0.010694, -0.012167, + 4e-06, -0.044377, 0.023373, -0.077437, 0.012178, + -0.015899, -0.010828, -0.062847, 0.029927, -0.074557, + -0.053306, 0.049688, 0.057017, -0.022571, 0.015337, + -0.046545, 0.018895, -0.024848, -0.004424, 0.165442, + -0.060201, -0.098629, -0.06519, 0.036582, -0.038566, + 0.051453, 0.093478, 0.039619, 0.117535, 0.090386, + -0.029366, 0.108075, -0.016568, -0.093576, -0.048799, + -0.045599, -0.023619, 0.070072, -0.109294, 0.001548, + 0.076285, -0.091274, -0.068829, 0.000215, -0.046519, + -0.022512, -0.027067, 0.014905, 0.079017, 0.140699, + 0.061141, 0.009178, 0.097811, 0.033468, -0.006666, + 0.007163, -0.007578, -0.124238, -0.025271, 0.017581, + 0.042405, -0.034252, 0.06489, 0.0025, -0.139083, + 0.009733, 0.158179, 0.014474, 0.038913, 0.05629, + -0.004998, 0.075401, -0.030557, -0.038595, -0.04907, + -0.01468, -0.076306, -0.132365, -0.177693, 0.09176, + -0.057238, -0.072379, 0.050877, 0.051489, 0.028125, + 0.004991, 0.032621, -0.167359, 0.041002, -0.007072, + -0.086405, -0.042263, -0.019757, -0.011524, 0.066004, + 0.08567, 0.008071, -0.013614, -0.062142, 0.08328, + 0.000887, -0.07582, 0.008295, -0.020136, -0.016886, + 0.089657, -0.10626, -0.051491, -0.012687, 0.054778, + 0.011535, 0.086613, 0.053803, 0.027164, -0.023825, + -0.040009, 0.080987, 0.026309, -0.000334, -0.085288, + -0.024208, -0.08504, 0.096077, 0.120527, -0.044181, + 0.003034, -0.091142, 0.006471, 0.115971, -0.026358, + 0.003489, 0.083633, 0.109975, -0.029425, 0.061726, + 0.056115, -0.006711, 0.013158, -0.062917, -0.015029, + 0.003354, 0.031574, 0.119045, 0.022859, 0.023777, + -0.068292, 0.115604, 0.031617, 0.008953, 0.006943, + 0.01442, 0.008569, -0.031547, -0.006857, -0.05169, + -0.086683, -0.108339, 0.005093, -0.108646, -0.03472, + 0.054273, -0.096753, 0.050806, -0.021115, -0.025278, + -0.079997, 0.027008, -0.034211, 0.090949, 0.005678, + 0.019288, 0.042083, 0.062119, 0.019301, 0.040859, + -0.009113, 0.022427, -0.004019, -0.06089, 0.032884, + -0.012373, -0.037976, 0.017625, -0.079369, -0.050788, + 0.07972, -0.039347, -0.085324, 0.091044, 0.026653, + -0.063122, 0.099371, -0.024736, 0.084631, -0.100421, + -0.073313, 0.014317, 0.022555, -0.116051, -0.063966, + -0.009688, -0.063666, -0.131709, 0.016744, -0.135028, + -0.003708, -0.043685, -0.121631, -0.03693, 0.125776, + 0.084333, 0.010114, 0.071231, -0.010395, 0.059391, + 0.01776, 0.033034, -0.018996, -0.13054, 0.025758, + -0.018261, -0.060044, 0.127025, -0.032724, -0.107299, + -0.064538, 0.090073, -0.010186, -0.066127, 0.107025, + -0.01094, 0.003083, 0.01903, -0.023935, -0.140176, + 0.003549, -0.042402, -0.010695, -0.185915, 0.060835, + 0.005405, -0.013822, 0.029205, 0.079338, 0.068155, + 0.071485, 0.030282, -0.087207, 0.07348, -0.02794, + 0.004896, -0.033246, 0.072637, 0.018017, 0.054712, + 0.026184, -0.005287, 0.034456, -0.036753, 0.079232, + 0.072707, 0.004506, -0.039353, -0.01556, -0.071466, + 0.010257, 0.067446, -0.006598, 0.047396, 0.072218, + 0.023405, 0.082663, 0.015319, -0.035436, -0.075461, + -0.124036, -0.032046, 0.060837, 0.010231, -0.053024, + 0.0228, 0.042891, -0.041549, 0.132395, -0.09533, + -0.077091, -0.058554, -0.070632, 0.04757, 0.031856, + 0.000127, 0.114996, 0.05866, -0.092472, 0.064503, + 0.09645, 0.0662, -0.001059, 0.039487, -0.032859, + -0.065721, 0.001601, 0.088037, 0.059828, -0.047411, + -0.077714, 0.010275, 0.013629, 0.003304, 0.005407, + 0.000665, 0.012927, -0.077525, 0.069202, -0.157417, + 0.014547, -0.095965, -0.087546, -0.067375, -0.027867, + 0.005458, -0.095839, 0.105294, -0.044892, 0.045151, + -0.001349, 0.038356, -0.127152, -0.080503, -0.105423, + -0.018484, 0.008439, 0.104398, -0.027959, 0.082086, + -0.020605, 0.042785, -0.109139, -0.025958, 0.079733, + 0.036289, -0.083773, -0.033819, 0.032566, -0.065556, + 0.006659, 0.00209, 0.097027, 0.115715, -0.013271, + -0.067514, 0.128365, -0.089129, 0.02616, -0.040584, + -0.002443, -0.017254, 0.129204, -0.110078, -0.064943, + 0.089215, -0.022299, -0.034959, 0.022446, -0.019254, + -0.0389, -0.069862, -0.07054, 0.069949, 0.111993, + -0.006311, -0.009057, 0.094278, -0.014932, 0.003657, + -0.019323, 0.026145, -0.062611, -0.073753, -0.007182, + 0.014101, 0.015776, 0.052537, 0.064728, -0.160187, + -0.005122, 0.076356, -0.104763, 0.091493, 0.020225, + -0.000433, 0.062698, -0.060457, -0.14754, -0.066168, + 0.007195, -0.061498, -0.037801, -0.039763, 0.059551, + -0.02841, -0.07451, 0.057667, 0.020584, -0.04251, + -0.025311, -0.037825, -0.18801, 0.077423, 0.030749, + -0.025465, -0.067541, 0.003073, -0.049778, 0.127789, + 0.002786, 0.120009, -0.067812, -0.026565, 0.111272, + 0.023219, -0.024403, -0.014507, -0.048624, 0.022163, + 0.014596, -0.052136, 0.00158, 0.064595, 0.017963, + 0.02133, 0.098862, -0.009253, -0.041062, 0.008903, + -0.013829, 0.031967, 0.076571, -0.005348, -0.04401, + 0.031252, 0.000369, 0.036818, 0.072854, -0.038569, + 0.004161, -0.128017, -0.053152, 0.050896, -0.015212, + -0.036159, 0.097995, 0.068397, -0.048472, -0.056131, + -0.01192, 0.059188, 0.010215, -0.061152, -0.011717, + -0.035949, -0.057039, 0.090859, -0.029682, 0.041466, + -0.025106, 0.131191, 0.059327, 0.085383, 0.021699, + 0.04923, 0.03663, -0.077086, 0.017806, -0.08879, + 0.00404, -0.069533, -0.026785, 0.009666, 0.014017, + -0.055897, -0.096299, 0.120693, 0.029995, 0.032602, + -0.001365, 0.034015, -0.053512, 0.001573, -0.01917, + 0.003956, 0.006452, 0.067313, 0.028301, 0.160615, + -0.053111, 0.01399, -0.02706, -0.013638, 0.039376, + -0.054462, -0.096553, 0.079994, -0.043791, -0.025051, + -0.003222, 0.019418, -0.049525, 0.151136, 0.034123, + 0.055117, 0.058918, -0.017393, 0.026169, -0.12638, + -0.019008, -0.028939, -0.014027, -0.173373, -0.032841, + -0.00337, 0.03968, -0.118311, 0.114094, -0.041869, + 0.041121, -0.038391, -0.096074, -0.032479, 0.060222, + 0.063968, -0.024528, 0.018158, -0.009892, -0.043882, + -0.005004, 0.1298, -0.025438, -0.121186, 0.04986, + 0.010448, -0.040388, 0.061853, -0.017304, -0.035088, + -0.008678, 0.061476, -0.039493, -0.005055, 0.079169, + 0.046134, 0.00977, 0.068294, -0.078965, -0.043792, + -0.030529, -0.053845, 0.053853, -0.140682, 0.111461, + 0.003549, -0.014939, 0.148955, 0.072861, 0.004332, + 0.015386, 0.062006, -0.122325, -0.032529, 0.010241, + -0.047982, -0.12644, 0.05584, 0.067128, 0.101189, + -0.00263, 0.031969, 0.046076, -0.080194, 0.10474, + -0.033486, -0.077818, -0.058697, -0.095258, -0.111074, + 0.037236, 0.011711, 0.001113, -0.005664, 0.048588, + 0.041131, 0.098257, 0.033126, 0.029317, -0.095311, + -0.071555, -0.039999, 0.026678, -0.072182, 0.035031, + -0.007997, -0.048174, -0.006796, 0.075959, -0.05206, + -0.007645, 0.037076, -0.035574, 0.085576, 0.034126, + -0.050676, 0.05143, 0.031999, -0.134308, -0.001489, + 0.084564, -0.018394, -0.09741, -0.042931, -0.025608, + -0.025489, 0.041919, 0.142482, 0.004617, -0.041085, + -0.028816, -0.015527, -0.031005, 0.028405, -0.02224, + -0.067737, -0.025241, -0.052578, 0.012322, -0.120556, + 0.016278, -0.081744, -0.09916, 0.025144, 0.025441, + 0.003176, -0.073871, 0.031718, -0.028622, 0.029031, + 0.01791, -0.030693, -0.104215, -0.015422, -0.065738, + -0.048346, -0.012847, 0.046849, -0.008621, 0.058771, + -0.054495, 0.031597, -0.038844, 0.043138, 0.092588, + -0.071371, -0.059093, -0.001197, 0.001766, -0.074762, + 0.02947, 0.089616, 0.005009, 0.052977, 0.015899, + -0.045424, 0.158466, -0.038717, -0.032506, 0.028687, + 0.011435, -0.006772, 0.047605, -0.144659, -0.031229, + 0.073577, 0.01153, -0.008172, 0.058883, -0.088412, + 0.033615, -0.03412, -0.030701, 0.101215, 0.096645, + 0.027368, 0.041249, 0.081502, -0.02544, 0.007592, + 0.059893, 0.012106, -0.112009, -0.114692, 0.016397, + 0.087068, 0.016199, 0.051263, 0.011915, -0.085364, + 0.026046, 0.145258, -0.047521, 0.077134, -0.000345, + 0.034532, 0.099801, -0.087591, -0.059719, -0.058671, + 0.022737, -0.001887, -0.107049, -0.116757, 0.134115, + -0.055403, 0.005157, 0.067618, 0.081074, 0.071787, + 0.063802, -0.00343, -0.106491, 0.017543, 0.002214, + -0.013785, -0.032962, 0.010084, 0.024325, 0.045963, + 0.059883, 0.072282, -0.008608, -0.015127, 0.048225, + 0.041752, -0.068845, 0.012227, -0.090748, -0.035309, + 0.045353, -0.078624, -0.019489, 0.035531, 0.058571, + 0.045414, 0.039032, -0.011106, 0.048787, -0.025336, + -0.084893, 0.031896, 0.01085, 0.012526, -0.053205, + 0.016952, -0.044041, 0.068766, 0.097328, -0.122229, + 0.027016, -0.051759, -0.057246, 0.074566, 0.006201, + 0.069904, 0.100068, 0.076124, 0.004278, 0.029466, + 0.045229, 0.055683, 0.01879, -0.067806, 0.039373, + 0.029179, -0.036787, 0.129921, -0.028993, 0.037711, + -0.105011, 0.138747, -0.00437, 0.05208, 0.050835, + 0.025511, -0.002962, 0.007852, -0.055234, -0.075055, + 0.00046, -0.089231, -0.030467, -0.080347, 0.007488, + 0.06746, -0.076368, 0.084991, 0.039544, 0.033391, + -0.044318, 0.00639, -0.079387, -0.002909, -0.029708, + -0.047882, 0.06304, 0.065719, 0.021811, 0.070945, + -0.007571, -0.001302, -0.064119, -0.068005, 0.05104, + -0.017747, -0.063938, 0.018673, -0.038391, -0.099966, + 0.057475, -0.007669, 0.009384, 0.109283, 0.012248, + -0.048858, 0.092498, 0.011967, 0.061525, -0.028819, + -0.015131, -0.02416, -0.03322, -0.101648, -0.01798, + -0.003342, -0.049829, -0.125096, 0.128241, -0.047377, + -0.028943, -0.109072, -0.066133, -0.015454, 0.098334, + 0.053371, 0.011324, 0.042781, 0.044313, 0.06251, + 0.098408, 0.06541, -0.040693, -0.116351, -0.032327, + -0.013634, -0.058591, 0.081507, 0.042019, -0.09977, + -0.018275, 0.084624, -0.007512, -0.041113, 0.054203, + 0.017879, -0.029747, 0.059865, -0.048281, -0.111513, + -0.022478, 0.002059, 0.022383, -0.12536, 0.058216, + 0.002386, -0.0816, 0.049288, 0.157428, 0.057724, + 0.005046, 0.102125, -0.083473, 0.044059, -0.094864, + 0.03912, -0.063306, 0.057341, 0.060519, 0.107383, + 0.007076, -0.009373, -0.012555, -0.06663, 0.117121, + 0.025254, -0.008796, -0.062102, -0.083164, -0.079007, + 0.084839, 0.042308, -0.055353, 0.036386, 0.132641, + 0.084464, 0.056288, -0.011636, -0.059554, -0.087748, + -0.147377, -0.052414, -0.010203, -0.009159, -0.018829, + 0.009621, 0.061633, 0.015716, 0.086332, -0.061465, + -0.011833, -0.062998, -0.021168, 0.125194, 0.045025, + 0.052316, 0.02572, 0.095155, -0.093252, 0.02872, + 0.056113, 0.063321, -0.045315, 0.025199, 0.023591, + -0.070481, 0.07235, 0.092458, 0.047973, -0.025439, + -0.001281, 0.021028, 0.034576, 0.084779, 0.006867, + -0.010323, -0.04633, -0.009172, 0.030485, -0.117679, + -0.021782, -0.034737, -0.086292, -0.045885, 0.009655, + -0.037167, -0.123331, 0.017291, -0.028319, 0.071447, + -0.05718, -0.032912, -0.139418, -0.025966, -0.039305, + 0.009411, -0.054017, 0.076307, -0.060252, 0.110087, + -0.061366, 0.038897, -0.098107, 0.046119, 0.043021, + -0.02913, -0.096885, 0.007623, 0.090513, -0.097416, + 0.053264, 0.058296, 0.054372, 0.060769, 0.015586, + -0.067956, 0.059996, -0.03785, 0.005986, 0.000778, + 0.045873, -0.065546, 0.0779, -0.085638, 0.000698, + 0.027694, -0.021241, -0.002777, 0.034509, -0.048173, + 0.009988, 0.001008, -0.077434, 0.026002, 0.13949, + 0.00891, 0.007791, 0.059292, -0.057047, 0.014127, + -0.022959, 0.08571, -0.068087, -0.081561, 0.005935, + 0.007577, 0.061544, 0.076542, 0.00166, -0.113279, + 0.024973, 0.08675, -0.061674, 0.095059, 0.089352, + -0.024436, 0.024181, -0.016117, -0.073634, -0.067986, + 0.074701, -0.046868, -0.054634, -0.092485, 0.006662, + -0.033256, -0.053774, 0.049001, -0.002339, 0.013545, + -0.006432, -0.012089, -0.086842, 0.104105, 0.061991 +}; + /* /home/sh/Downloads/hackrf/codec2/src/codebook/lspjvm3.txt */ +#ifdef __EMBEDDED__ +static const float codes2[] = { +#else +static float codes2[] = { +#endif + 0.007066, 0.075781, -0.070082, -0.092014, -0.066477, + 0.09051, 0.106622, 0.025911, -0.01676, 0.003724, + -0.024628, 0.058332, 0.012876, 0.059557, -0.002092, + -0.065092, -0.096975, -0.041837, -0.002432, 0.058918, + 0.014358, 0.080049, -0.008803, -0.002091, -0.097584, + 0.085323, -0.026053, -0.086585, -0.009541, 0.130555, + 0.045391, 0.037557, 0.074726, -0.050453, 0.033517, + -0.035576, -0.084211, -0.08643, 0.00891, -0.072674, + -0.098699, -0.02454, -0.048972, -0.066975, -0.048791, + 0.032184, 0.070992, -0.014416, 0.141892, -0.044249, + -0.108921, -0.02045, 0.115988, 0.011287, -0.026273, + 0.024341, 0.138519, -0.036467, 0.020684, 0.074258, + -0.053563, 0.077463, 0.072166, 0.032112, -0.079303, + -0.025039, 0.079675, 0.094211, -0.115754, 0.038892, + 0.050897, -0.024639, 0.057826, -0.110429, 0.071184, + 0.015309, -0.034027, -0.055726, 0.043179, -0.063089, + 0.043359, -0.011698, 0.006637, 0.002751, 0.03011, + -0.001261, 0.11147, 0.043277, -0.004205, -0.021599, + -0.005698, 0.058842, 0.168422, 0.059313, -0.007971, + -0.087599, 0.073891, -0.083238, 0.099279, -0.017364, + -0.018429, 0.01404, -0.014864, -0.111512, 0.08945, + -0.028498, -0.087983, -0.07732, -0.062602, 0.000328, + -0.027152, -0.093796, 0.111381, -0.018603, 0.092394, + -0.007256, 0.025391, 0.011454, 0.012802, -0.04168, + 0.008078, 0.020905, -0.105401, -0.083265, 0.027756, + -0.04963, -0.044085, -0.051424, 0.104125, -0.000779, + -0.063079, -0.130699, 0.0705, 0.033468, -0.019802, + -0.061011, 0.094839, -0.040122, 0.118409, 0.05695, + 0.086391, -0.006615, 0.045337, -0.04419, -0.106474, + -0.081912, 0.067557, -0.031649, -0.014437, 0.057585, + -0.121755, -0.049113, 0.057109, -0.049872, 0.044104, + 0.064705, -0.091589, 0.037286, -0.048606, -0.045398, + 0.003456, 0.05723, 0.006262, -0.055206, -0.063871, + -0.005249, 0.081783, 0.134969, -0.002331, 0.052643, + -0.093346, 0.072093, 0.116025, -0.031453, -0.006012, + -0.038574, -0.030841, 0.010288, 0.02442, 0.051657, + -0.086584, 0.046381, 0.00541, 0.052622, -0.072741, + 0.079023, 0.078099, -0.093912, 0.005477, -0.006721, + 0.100232, -0.017587, 0.044819, 0.036655, 0.02158, + -0.006829, -0.050076, -0.00302, 0.088246, 0.01356, + -0.01569, 0.012477, -0.052595, -0.048861, -0.033688, + 0.055615, 0.092298, -0.066194, 0.016416, -0.066059, + 0.046976, 0.003023, 0.104646, 0.109136, 0.018293, + -0.016507, -0.006859, 0.004326, 0.070843, 0.14075, + 0.025774, 0.03473, -0.07959, 0.050054, -0.10795, + 0.002378, 0.097498, 0.027111, -0.122953, -0.002423, + -0.020539, -0.063263, -0.095493, -0.157361, -0.039183, + 0.025721, 0.026897, -0.0012, 0.033997, -0.001749, + 0.061593, -0.013053, -0.106317, -0.06819, 0.046352, + -0.05606, 0.157084, -0.049365, 0.053959, -0.051065, + -0.047672, 0.08157, 0.064342, -0.030705, -0.070806, + -0.076503, -0.059471, 0.012419, 0.073968, -0.026179, + -0.038473, 0.059013, -0.035783, -0.030057, -0.036346, + -0.052692, -0.015346, -0.022687, -0.035279, 0.013314, + 0.068397, -0.046609, -0.009593, -0.040796, 0.157438, + -0.07536, -0.110464, 0.031839, -0.029035, -0.015222, + 0.041013, -0.099212, -0.10892, -0.008627, 0.012095, + 0.020855, 0.009935, -0.086917, 0.058827, -0.006536, + 0.022104, -0.005013, 0.003496, 0.046663, -0.051061, + -0.036803, -0.067317, -0.007075, 0.18087, -0.027434, + -0.025056, -0.039341, -0.073918, -0.00318, -0.11093, + -0.042711, 0.005519, -0.035005, -0.088419, 0.170942, + 0.001503, -0.121485, 0.066383, -0.067346, 0.005643, + 0.080088, -0.042562, -0.006668, -0.036538, 0.020683, + 0.042848, 0.027852, -0.029088, -0.156468, 0.006503, + 0.037716, 0.032082, 0.038416, 0.021835, -0.106963, + -0.043017, 0.018166, 0.070409, -0.005426, -0.035585, + -0.111071, -0.039986, 0.05043, 0.035157, 0.066902, + -0.040684, 0.060527, 0.036225, 0.002527, -0.015087, + 0.059243, 0.021268, -0.010682, -0.018434, 0.059128, + 0.111314, -0.05407, 0.105744, -0.051476, -0.01297, + -0.000358, -0.099249, -0.077385, 0.069924, -0.039101, + -0.072139, -0.049069, -0.088018, 0.006144, 0.000712, + 0.08103, 0.021987, -0.046031, 0.058087, -0.00132, + -0.046851, -0.011062, 0.108321, -0.001146, -0.071193, + 0.044973, -0.002915, -0.003323, 0.041735, 0.094566, + 0.05353, 0.035927, 0.100282, 0.059082, -0.054059, + -0.012158, -0.035417, 0.020412, -0.073193, 0.059296, + -0.040489, -0.09525, -0.003821, -0.084904, 0.053925, + 0.109183, -0.005862, -0.036538, 0.080962, -0.040647, + 0.02007, 0.057778, -0.020197, -0.079626, -0.003186, + -0.050855, 0.128185, 0.034731, 0.05746, -0.035236, + -0.057096, -0.001238, 0.122018, -0.071204, -0.047253, + -0.051767, 0.048301, -0.052678, 0.02599, -0.017481, + -0.029379, 0.030738, 0.047207, -0.047864, -0.033561, + 0.029884, -0.091175, -0.085446, -0.02614, 0.092628, + 0.067706, -0.085617, 0.081433, 0.047305, 0.031945, + -0.048728, -0.040387, 0.046206, 0.010578, -0.037639, + 0.011328, -0.042458, -0.149597, 0.033882, -0.061869, + 0.0088, 0.057754, -0.095876, 0.03823, 0.096876, + -0.033487, -0.141669, -0.014172, 0.028439, -0.092764, + -0.053714, 0.086926, 0.034786, 0.136053, -0.005569, + 0.028753, 0.00963, 0.044114, -0.050365, -0.066224, + 0.006017, 0.014348, 0.024471, 0.000489, 0.067234, + -0.021678, -0.11876, 0.036349, -0.040295, 0.076358, + -0.008444, -0.086082, -0.044018, -0.025804, 0.028971, + -0.009233, 0.053026, -0.035341, -0.182193, -0.102515, + 0.08921, 0.066812, 0.032417, 0.046882, -0.034815, + -0.052293, 0.022814, 0.129622, 0.128232, -0.012105, + -0.087084, 0.004762, 0.086538, 0.046566, 0.098359, + -0.018713, 0.039204, -0.021707, -0.06011, -0.117527, + -0.005459, 0.060994, -0.057718, -0.021783, 0.035154, + 0.100557, -0.01547, -0.025818, 0.00845, 0.051535, + -0.001388, -0.11461, -0.057903, 0.041862, 0.061778, + 0.045701, -0.078563, -0.070166, -0.04845, -0.08853, + 0.021375, -0.004598, -0.09071, -0.009399, -0.073952, + -0.035575, -0.05028, 0.11478, 0.137866, 0.065234, + 0.003594, -0.066802, -0.144989, 0.166201, 0.039564, + -0.022457, -0.03009, 0.016187, 0.115443, -0.097331, + -0.019139, 0.09944, 0.002198, -0.030953, 0.021099, + -0.045399, -0.046871, 0.022533, -0.064657, 0.005776, + 0.049063, -0.028478, 0.019268, 0.054265, 0.028042, + 0.045559, -0.005541, -0.01441, -0.024165, -0.054976, + -0.073258, 0.084205, 0.036077, -0.068683, 0.004708, + -0.085228, 0.001234, 0.046261, -0.050496, -0.028227, + -0.086828, -0.001218, 0.021865, 0.003791, -0.000568, + -0.088733, -0.040041, -0.035891, -0.054915, 0.073463, + -0.132031, -0.012844, -0.068544, 0.013052, 0.087335, + 0.038603, -0.115382, -0.010433, -0.007113, 0.095126, + -0.047378, -0.081353, 0.018021, -0.021156, -0.120774, + 0.040038, 0.007633, -0.088728, -0.009928, 0.020142, + 0.052024, -0.021063, -0.118121, 0.102739, -0.055837, + 0.005253, -0.061924, 0.06368, -0.014512, -0.020259, + 0.029493, -0.013435, -0.020638, 0.089342, 0.001092, + -0.046491, -0.145634, -0.083159, -0.158142, -0.279281, + 0.003611, 0.055863, -0.064655, -0.088773, 0.089283, + -0.029619, -0.089949, 0.017197, -0.066633, -0.052347, + 0.090828, -0.087551, 0.000338, 0.085238, -0.005313, + 0.096211, 0.071381, -0.076546, -0.077927, -0.040864, + 0.062936, 0.041559, 0.016235, -0.017513, 0.014773, + -0.025734, 0.028586, 0.070292, 0.055794, -0.026131, + -0.076954, -0.082228, 0.043947, -0.035921, 0.152668, + -0.04951, 0.023159, 0.008506, -0.044773, -0.160358, + 0.024984, -0.025587, -0.071627, -0.038376, 0.088478, + 0.120568, 0.046723, 0.086731, 0.000695, -0.015751, + -0.027837, -0.160937, -0.095031, 0.036271, -0.009061, + -0.015078, -0.036281, -0.103665, -0.058258, -0.049573, + 0.022021, 0.108296, -0.002586, 0.065655, -0.018584, + -0.046441, -0.031018, 0.06735, 0.014328, 0.00886, + -0.000245, 0.0634, -0.00181, 0.043515, 0.090344, + -0.063845, 0.020485, 0.079401, 0.070558, -0.116428, + 0.032628, 0.068949, 0.052238, -0.04453, 0.096813, + 0.029911, -0.008814, 0.044352, -0.168172, 0.009604, + 0.055828, -0.100739, -0.026013, 0.021193, -0.051425, + 0.035891, -0.004085, 0.030216, -0.060801, 0.037202, + 0.007262, 0.120686, 0.026846, 0.058464, -0.100792, + -0.009176, 0.027589, 0.123957, -0.011283, -0.025744, + -0.105081, 0.118244, -0.042122, -0.025404, 0.000873, + -0.012703, 0.084159, -0.067539, -0.140536, 0.041637, + -0.014485, -0.043382, -0.048004, -0.075416, 0.054401, + -0.018651, -0.032908, 0.164231, -0.053236, 0.033946, + -0.021681, -0.012655, -0.037049, -0.001613, -0.053393, + -0.014635, 0.017954, -0.116115, -0.027232, 0.034005, + -0.035376, 0.026492, -0.03725, 0.070733, 0.074835, + -0.021378, -0.14298, 0.123195, 0.003699, 0.025398, + 0.015629, 0.07737, 0.032623, 0.12158, 0.0971, + 0.000946, -0.056355, 0.042065, 0.008184, -0.081824, + -0.101937, 0.065473, 0.00336, 0.069241, 0.073002, + -0.053844, -0.044301, 0.080351, -0.091833, 0.044288, + 0.007447, -0.120723, -0.013806, -0.023636, -0.064616, + 0.030556, 0.07263, 0.074428, -0.087759, -0.02644, + 0.06484, 0.049162, 0.091053, 0.023891, 0.033811, + -0.027746, 0.116392, 0.106126, -0.056644, -0.014781, + 0.036137, -0.002632, 0.055512, 0.070077, 0.067819, + -0.030625, 0.053772, -0.078457, -0.021351, -0.113011, + 0.052797, 0.044875, -0.077269, -0.009867, 0.101493, + 0.073477, -0.024103, 0.049145, -0.004706, -0.025211, + -0.053731, -0.049009, -0.035786, 0.05443, 0.046515, + 0.025154, -0.043569, -0.034789, -0.05861, 0.006931, + 0.012049, 0.046809, -0.129441, 0.025541, -0.030933, + 0.000297, -0.054058, 0.179837, 0.081515, 0.004932, + -0.028445, -0.073753, 0.010629, 0.080042, 0.09871, + -0.014017, 0.057597, 0.00101, 0.071658, -0.06757, + 0.074384, 0.110366, -0.018121, -0.108754, 0.037793, + 0.028041, -0.047508, -0.031359, -0.098913, -0.036486, + -0.017311, -0.001279, -0.013694, 0.051968, 0.036512, + 0.088201, 0.031155, -0.043442, -0.065045, 0.023486, + 0.027, 0.104768, -0.015176, -0.038754, -0.004178, + 0.003732, 0.062166, 0.085438, -0.077368, -0.101645, + -0.118347, 0.007589, -0.056489, 0.082268, 0.020253, + -0.035623, 0.034235, -0.099354, -0.061237, -0.024285, + 0.005441, -0.039694, -0.025957, -0.004411, 0.049903, + 0.00304, 0.036243, 0.023552, -0.007334, 0.128963, + -0.077727, -0.059175, -0.019437, -0.024872, 0.004339, + 0.084006, -0.076605, -0.102261, 0.036714, -0.035205, + -0.007642, -0.005125, -0.030525, 0.09639, -0.053138, + -0.002192, -0.024851, 0.050645, 0.04149, -0.043183, + 0.046796, -0.050894, 0.055023, 0.133834, -0.024013, + 0.000872, -0.057072, -0.00063, 0.04207, -0.129339, + -0.064283, 0.037836, -0.066393, 0.004438, 0.125379, + -0.062213, -0.067468, 0.090177, -0.046094, -0.025725, + 0.079101, -0.074909, -0.04373, -0.073483, 0.069672, + -0.020413, -7.9e-05, -0.049725, -0.120751, -0.04698, + 0.039894, 0.072305, 0.009798, 0.005613, -0.045217, + 0.006862, 0.036285, 0.074819, -0.006747, 0.015144, + -0.071562, 0.012324, -0.001082, 0.014835, 0.07996, + -0.027804, 0.103358, -0.017203, 0.014914, -0.056687, + 0.030827, 0.028076, 0.003395, -0.073255, 0.11031, + 0.056498, -0.044893, 0.110122, -0.109058, -0.052302, + -0.001604, -0.089977, -0.060548, 0.107808, 0.025463, + -0.070203, -0.000513, -0.123913, 0.046247, -0.085392, + 0.096343, 0.09589, -0.06495, 0.070363, 0.034272, + 0.037773, -0.07695, 0.124858, -0.009008, -0.010115, + 0.083868, 0.051242, 0.039149, 0.015185, 0.083375, + 0.029773, -0.045961, 0.100395, 0.003743, -0.138294, + -0.041755, 0.010806, 0.057797, -0.147374, 0.095858, + -0.009929, -0.103347, -0.03231, -0.11056, 0.121377, + 0.145244, 0.017079, -0.080587, 0.020516, -0.044939, + -0.010477, 0.038347, -0.003466, -0.001618, 0.0196, + -0.021762, 0.125482, 0.011074, 0.065815, 0.040298, + 0.009202, -0.051686, 0.129684, -0.131135, 0.044536, + 0.009313, 0.102518, -0.075351, 0.054338, 0.020273, + -0.045753, 0.031345, 0.000407, -0.097294, -0.000416, + -0.007466, -0.044972, -0.078744, 0.042414, 0.066624, + 0.030318, -0.067852, 0.061416, -0.028992, 0.056606, + 0.004038, -0.036253, -0.014279, 0.023123, -0.007832, + -0.000137, -0.027684, -0.127648, -0.007713, -0.008746, + -0.0265, 0.049032, -0.183319, 0.059107, 0.0665, + 0.016902, -0.093331, 0.090129, 0.016648, -0.083492, + -0.023669, -0.010473, 0.027614, 0.145068, 0.000681, + 0.044133, -0.035809, 0.005668, -0.090461, -0.090732, + -0.033927, 0.042997, 0.0217, -0.046955, 0.044487, + -0.026444, -0.061011, 0.01011, -0.023804, 0.030427, + -0.015195, -0.155603, -0.016584, 0.021461, -0.003528, + -0.059784, 0.032214, 0.000847, -0.098859, -0.07898, + 0.043188, 0.066433, 0.062309, 0.144507, 0.006865, + -0.068953, 0.046698, 0.099369, 0.043354, -0.014309, + -0.033202, -0.00295, 0.040734, 0.083454, 0.039319, + 0.051358, 0.006074, -0.073465, -0.090554, -0.120787, + -0.040676, 0.092412, -0.085151, -0.021699, 0.005813, + 0.103135, 0.024964, 0.025832, -0.075982, 0.035699, + -0.02731, -0.153007, 0.03642, 0.0576, 0.08163, + 0.001605, -0.054191, -0.033043, -0.01439, -0.071383, + 0.03618, 0.03586, -0.04698, 0.038541, -0.044757, + -0.078032, -0.029878, 0.078183, 0.082251, 0.010549, + 0.053317, -0.038231, -0.06561, 0.055798, 0.037504, + 0.076317, -0.027605, 0.010349, 0.095361, -0.088636, + 0.049089, 0.113316, 0.051084, 0.038589, 0.03433, + -0.055948, -0.037217, -0.015418, -0.139976, 0.036306, + 0.039306, -0.009889, -0.04491, 0.016559, -5e-05, + 0.106073, 0.01528, -0.002563, -0.109085, -0.048475, + -0.035319, 0.16386, 0.032981, -0.044932, 0.003227, + -0.123233, -0.010638, 0.055479, -0.003666, -0.072249, + -0.111158, 0.065365, 0.010691, 0.039119, -0.001837, + -0.118729, 0.06147, -0.002077, -0.033335, -0.060165, + -0.026081, -0.001806, -0.079616, -7.5e-05, 0.080598, + 0.032908, -0.03514, -0.003136, -0.029024, 0.094622, + -0.075773, -0.022898, -0.014817, 0.058393, -0.111505, + 0.036794, -0.01576, -0.112602, 0.030323, 0.085897, + -0.020834, 0.056079, -0.103762, 0.117671, -0.041205, + 0.041684, -0.084336, 0.034186, 0.011973, -0.006313, + 0.040836, -0.035709, 0.03417, 0.122672, 0.090973, + -0.053182, -0.059371, 0.091017, -0.090998, -0.116986, + 0.001405, 0.138364, 0.017107, -0.064076, 0.103486, + -0.031142, -0.030068, 0.046547, -0.133471, -0.042055, + 0.140418, -0.125084, 0.035218, -0.001162, -0.02113, + -0.012034, 0.097413, -0.079006, -0.03903, -0.054011, + 0.143887, 0.078835, -0.000601, -0.021173, -0.039895, + -0.02505, 0.075865, 0.039221, 0.032458, 0.038206, + -0.038873, -0.085003, -0.032736, -0.026956, 0.113525, + -0.023933, 0.120794, -0.003862, -0.026459, -0.138724, + 0.089559, 0.029002, -0.052098, -0.085692, 0.115174, + 0.083497, 0.024179, 0.119021, -0.067541, 0.019047, + -0.02772, -0.086083, -0.055329, 0.020087, -0.027086, + -0.047858, -0.051975, -0.035205, -0.059342, -0.068582, + 0.058936, 0.044141, -0.080315, 0.119744, -0.046518, + -0.064588, -0.027212, 0.147823, 0.032404, 0.01669, + 0.024302, 0.08556, -0.001525, 0.016469, 0.038891, + -0.020146, 0.019943, 0.045067, 0.03807, -0.086274, + -0.025769, 0.044192, 0.102141, -0.064765, 0.055849, + 0.048803, -0.030066, -0.00922, -0.116655, 0.068295, + 0.04758, -0.076138, -0.070307, 0.047582, -0.111342, + 0.004656, -0.004452, 0.029703, -0.004259, 0.01113, + 0.014446, 0.166086, 0.059565, 0.000985, -0.052607, + 0.013251, 0.094476, 0.106216, 0.016715, -0.025581, + -0.101244, 0.072897, -0.114526, 0.024681, 0.010784, + -0.051759, 0.032389, -0.050202, -0.083316, 0.052334, + -0.0351, -0.116721, -0.110336, -0.053391, 0.065541, + -0.02979, -0.020457, 0.135285, -0.004142, 0.111508, + -0.030936, 0.018549, -0.016034, 0.018572, -0.084336, + -0.048615, -0.018739, -0.096815, -0.090162, 0.01941, + -0.040821, -0.009925, -0.097427, 0.091891, 0.031793, + -0.024598, -0.132848, 0.078353, 0.089339, -0.068562, + -0.020779, 0.040974, -0.055675, 0.169131, 0.029649, + 0.078165, -0.050679, -0.005881, -0.004983, -0.104324, + -0.069096, 0.12796, 0.011392, -0.000769, 0.062168, + -0.079842, 0.001606, 0.089284, -0.035465, 0.031075, + 0.029519, -0.102956, -0.010902, -0.06403, -0.019669, + 0.057492, 0.075802, -0.008904, -0.060743, -0.053144, + 0.005126, 0.06298, 0.085674, 0.019895, 0.104448, + -0.086473, 0.056906, 0.056795, -0.01294, 0.036606, + -0.008604, -0.04045, 0.042062, 0.04181, 0.02768, + -0.092256, 0.091237, -0.0395, 0.024761, -0.088978, + 0.068585, 0.088295, -0.048033, -0.017808, 0.04537, + 0.1246, -0.03532, 0.056751, 0.092751, 0.054025, + -0.015725, -0.061938, 0.036806, 0.078768, -0.016065, + 0.002444, -0.023887, -0.072177, -0.02979, -0.00586, + 0.015478, 0.129142, -0.091024, 0.071482, -0.065445, + 0.005867, -0.006051, 0.098646, 0.054089, 0.018713, + 0.033837, -0.008355, -0.051959, 0.05744, 0.160305, + -0.001863, 0.016738, -0.033705, 0.062233, -0.140759, + 0.027342, 0.060074, 0.030362, -0.117875, 0.06102, + -0.028026, -0.088238, -0.003782, -0.146288, -0.080395, + 0.050048, 0.036136, 0.0195, 0.066902, 0.020355, + 0.024817, -0.056254, -0.140918, -0.085803, 0.02054, + -0.00373, 0.161411, -0.049408, 0.000219, -0.002348, + -0.055021, 0.06782, 0.126483, -0.031063, -0.119299, + -0.102834, 0.001133, 0.010172, 0.107707, -0.029106, + -0.059813, 0.036698, -0.02172, -0.043189, -0.00227, + -0.031694, 0.009605, -0.022459, -0.036417, 0.053675, + 0.061561, -0.012723, 0.05004, -0.02945, 0.131044, + -0.124516, -0.107579, -0.012171, 0.011761, 0.002599, + 0.016327, -0.060854, -0.08091, 0.030875, -0.002997, + -0.02097, -0.01188, -0.086096, 0.037912, 0.012421, + 0.055253, -0.00725, 0.04174, 0.055596, -0.02442, + -0.017564, -0.079202, 0.008897, 0.180091, 0.05449, + 0.001772, -0.022151, -0.082048, -0.010559, -0.163377, + -0.02066, -0.017827, -0.0308, -0.045856, 0.122405, + -0.052946, -0.13049, 0.097383, -0.116737, 0.039855, + 0.056504, -0.059549, -0.059931, -0.018658, 0.034898, + 0.054889, 0.005373, -0.066796, -0.12736, 0.04796, + 0.071746, 0.02741, -0.006212, 0.024132, -0.094062, + 0.005369, -0.008926, 0.073085, -0.014265, -0.029204, + -0.100025, -0.072076, 0.014651, 0.069368, 0.048275, + -0.066823, 0.086074, 0.014921, -0.015395, -0.045138, + 0.026224, 0.000902, -0.038208, -0.035221, 0.057397, + 0.097606, -0.073195, 0.051626, -0.033488, 0.027813, + 0.00207, -0.09751, -0.057877, 0.12668, -0.082194, + -0.072597, 0.006014, -0.093185, -0.016853, -0.02279, + 0.138461, 0.005394, -0.056485, 0.102778, 0.028918, + -0.045604, -0.060041, 0.121251, 0.02926, -0.101404, + 0.061194, 0.033039, -0.016798, 0.064263, 0.065144, + 0.010925, 0.023151, 0.107623, 0.027977, -0.090356, + -0.024863, -0.00644, 0.04787, -0.047486, 0.088211, + -0.012139, -0.116121, -0.000525, -0.140961, 0.016604, + 0.06349, -0.022732, -0.046944, 0.06697, -0.068838, + 0.016143, 0.026202, -0.043344, -0.064881, 0.024877, + -0.072845, 0.120531, 0.077901, 0.047272, 0.011713, + -0.044646, 0.040932, 0.076164, -0.101233, -0.029615, + -0.065118, 0.050966, -0.023273, 0.053517, 0.02371, + -0.007489, 0.035822, 0.023439, -0.055528, -0.004033, + -0.007662, -0.096546, -0.081662, 0.037141, 0.137562, + 0.075526, -0.097496, 0.12399, 0.013996, 0.087005, + -0.019788, -0.082043, 0.020524, 0.007027, -0.021537, + -0.036264, -0.090952, -0.177722, -0.009306, -0.031473, + -0.009287, 0.047557, -0.090241, 0.089347, 0.056375, + -0.005506, -0.112128, 0.004356, 0.064421, -0.038478, + -0.035674, 0.040616, 0.007731, 0.160236, -0.054199, + -0.007537, 0.012434, 0.022001, -0.021567, -0.075163, + -0.026053, 0.015909, 0.041015, 0.021832, 0.034152, + -0.048539, -0.086655, 0.047465, 0.000682, 0.04264, + 0.023697, -0.095971, -0.022874, -0.000369, 0.003413, + 0.046005, 0.064807, 0.010131, -0.129517, -0.092254, + 0.116469, 0.053796, 0.03811, 0.09447, 0.018435, + -0.034803, 0.073591, 0.108348, 0.104096, 0.049884, + -0.021274, 0.022097, 0.065347, 0.065555, 0.089319, + 0.000474, -0.004186, -0.040493, -0.065543, -0.083167, + -0.017425, 0.049177, -0.044248, 0.008399, 0.06818, + 0.154778, 0.027549, -0.008012, 0.01495, 0.043254, + 0.039599, -0.136415, -0.018716, 0.0619, 0.031263, + 0.058118, -0.0372, -0.114692, -0.080876, -0.053238, + 0.077436, 0.015015, -0.092517, 0.005804, -0.065541, + -0.005653, -0.073184, 0.095594, 0.08247, 0.060989, + -0.000262, -0.035766, -0.083441, 0.122634, 0.088429, + -0.014397, -0.055434, -0.005659, 0.069697, -0.064892, + 0.008824, 0.082498, 0.051866, -0.03607, 0.033403, + -0.082855, -0.087376, 0.002714, -0.097121, -0.01917, + 0.027179, -0.06987, -0.009316, 0.04745, 0.040657, + 0.060527, 0.00462, -0.040264, -0.051228, -0.029023, + -0.071384, 0.101421, 0.009538, -0.099185, 0.0601, + -0.048395, -0.024677, 0.025125, -0.056043, -0.058045, + -0.054059, 0.008107, 0.021078, 0.04529, -0.018459, + -0.113359, 0.014009, -0.006826, -0.052747, 0.046922, + -0.075976, 0.008538, -0.084411, -0.004369, 0.045801, + 0.075392, -0.06734, 0.014454, 0.032407, 0.092478, + -0.061859, -0.083458, 0.051442, 0.031695, -0.080233, + 0.054028, 0.027, -0.073549, 0.0323, 0.036501, + -0.011384, -0.02078, -0.124142, 0.093905, -0.028332, + 0.039139, -0.030944, 0.079952, -0.001717, 0.013976, + 0.038005, -0.001751, -0.044097, 0.129827, 0.014385, + -0.001682, -0.063458, -0.002511, -0.07815, -0.141236, + 0.021955, 0.104851, -0.093246, -0.060019, 0.069998, + 0.004399, -0.096408, 0.059327, -0.062268, -0.074327, + 0.108063, -0.090534, -0.045654, 0.048119, 0.049187, + 0.042105, 0.043964, -0.091516, -0.047999, -0.028881, + 0.070471, 0.055401, -0.025605, 0.011176, 0.008475, + 0.022254, 0.038266, 0.048106, 0.047176, -0.017967, + -0.010978, -0.088762, 0.034806, 0.019311, 0.126815, + -0.010571, 0.053073, 0.032162, -0.00078, -0.1522, + -0.014253, -0.021954, -0.13104, -0.061376, 0.113838, + 0.060725, 0.020201, 0.102533, -0.011392, -0.052046, + -0.069625, -0.091011, -0.097954, 0.067847, 0.017856, + -0.053461, -0.040679, -0.121664, -0.077208, -0.106919, + 0.057996, 0.069756, -0.012433, 0.069569, -0.055159, + -0.024801, -0.060448, 0.1017, 0.014619, 0.03658, + -0.004526, 0.093977, -0.028211, 0.045261, 0.149736, + -0.014691, -0.007959, 0.097708, 0.107128, -0.079723, + 0.029157, 0.020116, 0.104828, -0.064208, 0.119172, + 0.039583, -0.029446, 0.006628, -0.110398, 0.004062, + 0.048132, -0.060601, 0.009448, 0.051777, -0.053127, + 0.050551, -0.001924, 0.028079, -0.050618, -0.013698, + 0.00192, 0.088162, 0.073078, 0.085795, -0.066788, + 0.014025, 0.042699, 0.176241, -0.046674, -0.034822, + -0.051433, 0.121729, -0.057076, 0.023901, 0.045075, + -0.057182, 0.05478, -0.01728, -0.146674, 0.00209, + -0.016223, -0.044841, -0.084524, -0.152479, 0.072688, + -0.006962, 0.008711, 0.127455, -0.003876, 0.053162, + -0.013682, -0.025386, -0.000427, -0.024811, -0.024474, + -0.056267, 0.062116, -0.121311, -0.053011, 0.065651, + -0.075385, -0.00868, -0.063033, 0.083039, 0.110577, + -0.000152, -0.127017, 0.055904, 0.013659, 0.005664, + -0.002852, 0.047248, 0.001128, 0.100773, 0.037274, + 0.026368, -0.042205, 0.021887, -0.020247, -0.056678, + -0.077475, 0.089799, 0.058003, 0.039741, 0.106663, + -0.016853, -0.015972, 0.075741, -0.048829, 0.015374, + -0.032657, -0.125677, -0.06206, -0.057409, -0.061287, + 0.073151, 0.050357, 0.053547, -0.059886, -0.051298, + 0.057954, -0.003817, 0.076028, 0.006757, 0.061109, + -0.03803, 0.143209, 0.092207, -0.018493, 0.062291, + 0.005751, -0.036449, 0.067582, 0.031449, 0.101894, + -0.080754, 0.011515, -0.049485, -0.016137, -0.087818, + 0.108851, 0.038222, -0.099315, -0.003117, 0.052278, + 0.107517, -0.036233, 0.06537, 0.040409, -0.057029, + -0.033167, -0.081758, -0.019502, 0.033438, 0.013365, + -0.01776, -0.025906, -0.020244, -0.078722, -0.011697, + -0.028246, 0.068647, -0.106417, 0.026956, -0.064914, + 0.062711, -0.017857, 0.151539, 0.044613, -0.01782, + 0.009085, -0.032785, -0.025795, 0.07579, 0.075667, + -0.040398, 0.058556, -0.042634, 0.093973, -0.099529, + 0.057103, 0.073562, 0.01264, -0.066141, 0.029558, + 0.060219, -0.083699, -0.054799, -0.120442, -0.000374, + 0.006521, 0.034512, -0.039558, 0.042191, 0.033865, + 0.103992, -0.014977, -0.077384, -0.05134, 0.001873, + 0.047451, 0.140612, -0.024885, -0.02142, -0.046604, + 0.030606, 0.10066, 0.076356, -0.019288, -0.09857, + -0.114463, -0.010855, -0.034657, 0.025618, -0.003356, + -0.087913, 0.064346, -0.07554, -0.091569, -0.024965, + -0.021232, -0.017255, -0.056931, -0.003104, 0.030219, + -0.020112, -0.012334, 0.035298, 0.001405, 0.161753, + -0.064618, -0.064401, -0.007218, -0.00012, -0.047208, + 0.116105, -0.056464, -0.069645, -0.007032, -0.01209, + -0.023237, 0.016, -0.039802, 0.074319, -0.012604, + 0.014863, -0.058081, 0.093219, 0.062253, -0.040302, + 0.027405, -0.128683, 0.039923, 0.116808, -0.011706, + 0.012483, -0.017698, 0.003645, -0.007588, -0.120662, + -0.032868, 0.066217, -0.031343, -0.034166, 0.146334, + -0.031228, -0.125921, 0.117756, -0.042686, -0.062094, + 0.049375, -0.112262, 0.010166, -0.073599, 0.04869, + 0.028292, 0.020076, -0.062865, -0.106114, -0.0253, + 0.066916, 0.029279, 0.028191, -0.003599, -0.040614, + 0.020491, 0.060238, 0.052747, -0.01039, -0.022389, + -0.063358, -0.028707, 0.035907, -0.011898, 0.079703, + -0.003758, 0.078051, -0.017869, 0.009045, -0.018982, + 0.034974, 0.069405, -0.018909, -0.038613, 0.083909, + 0.033935, -0.036607, 0.088891, -0.052599, -0.059839, + 0.052758, -0.068308, -0.063615, 0.126093, -0.00946, + -0.042175, -0.011113, -0.073071, 0.052086, -0.052619, + 0.049226, 0.066898, -0.045666, 0.117923, 0.053656, + -0.010739, -0.043962, 0.141903, 0.001792, -0.035469, + 0.090671, 0.043993, -0.013655, 0.018989, 0.127223, + 0.00103, -0.001154, 0.081839, -0.024979, -0.103704, + -0.07792, 0.036083, 0.06822, -0.06221, 0.11373, + -0.010501, -0.065801, 0.050885, -0.104304, 0.121937, + 0.11185, 0.00968, -0.011791, 0.001677, -0.035029, + 0.010677, 0.024572, -0.01286, -0.030323, -0.010466, + 0.011279, 0.167752, 0.003136, 0.109709, 0.007292, + 0.000987, 0.004572, 0.108706, -0.113192, -0.012431, + -0.015225, 0.073653, -0.051275, 0.077928, -0.012752, + -0.011708, 0.014172, 0.025162, -0.095378, 0.026382, + -0.028889, -0.058569, -0.129329, 0.011087, 0.061452, + 0.056893, -0.058004, 0.103586, -0.060752, 0.081824, + -0.042805, -0.015991, -0.024444, 0.028952, -0.013528, + 0.042851, 0.019988, -0.165741, -0.031012, -0.014713, + -0.026059, 0.031698, -0.134343, 0.03209, 0.020828, + 0.051674, -0.128006, 0.050856, 0.02222, -0.073513, + -0.00934, 0.013756, 0.036163, 0.098407, -0.023495, + 0.023858, 0.008121, 0.02222, -0.103489, -0.046663, + -0.033, 0.063565, 0.029224, -0.012693, 0.084202, + 0.012187, -0.051, 0.026126, -0.043293, 0.008675, + -0.019812, -0.16507, -0.014555, -0.047431, 0.01799, + -0.040073, 0.107192, 0.022228, -0.089023, -0.066885, + 0.01463, 0.073186, 0.069902, 0.072634, 0.019593, + -0.041539, 0.031788, 0.09231, 0.027223, 0.034027, + -0.051855, 0.000391, 0.007869, 0.13191, 0.069384, + 0.046276, 0.04044, -0.037093, -0.031393, -0.112828, + 0.015709, 0.096749, -0.103205, -0.021284, 0.011405, + 0.158287, -0.021028, 0.042219, -0.050759, 0.069715, + -0.042907, -0.11698, 0.014224, 0.094648, 0.028395, + 0.041535, -0.057033, -0.047607, -0.024419, -0.034905, + 0.010125, 0.036728, -0.052503, -0.001839, -0.033477, + -0.053414, -0.070394, 0.092895, 0.1006, -0.026352, + 0.080574, -0.028763, -0.059548, 0.094571, 0.091787, + 0.041437, 0.014312, 0.045792, 0.108269, -0.081586, + 0.056288, 0.137447, 0.054718, -0.032474, 0.054502, + -0.100144, -0.00646, 0.024739, -0.117043, -0.008919, + 0.070299, -0.036862, -0.014543, 0.0245, -0.015222, + 0.114975, -0.043705, 0.000421, -0.061872, -0.035148, + -0.022797, 0.128575, -0.031798, -0.086718, -0.007172, + -0.071706, -0.006833, 0.028645, -0.007011, -0.096745, + -0.142269, 0.027996, 0.06521, 0.061381, 0.000741, + -0.140531, 0.01748, -0.014986, -0.040893, -0.012718, + -0.012494, -0.021869, -0.032923, 0.016456, 0.104475, + 0.010792, -0.066178, 0.019097, -0.001893, 0.067513, + -0.092673, -0.059851, -0.045936, 0.052642, -0.0625, + 0.065013, -0.025659, -0.149301, 0.051705, 0.035692, + -0.04579, -0.007482, -0.069141, 0.149365, -0.042039, + 0.018492, -0.081315, 0.05588, 0.058158, 0.019669, + 0.063836, -0.012391, 0.007057, 0.155454, 0.033854, + -0.016532, -0.007661, 0.043113, -0.080283, -0.10867, + -0.029344, 0.093781, -0.01584, -0.068134, 0.091804, + 0.004148, -0.058507, 0.059633, -0.095883, -0.004939, + 0.086151, -0.113571, -0.019466, -0.009167, 0.003662 +}; + +const struct lsp_codebook lsp_cbjvm[] = { + /* /home/sh/Downloads/hackrf/codec2/src/codebook/lspjvm1.txt */ + { + 10, + 9, + 512, + codes0 + }, + /* /home/sh/Downloads/hackrf/codec2/src/codebook/lspjvm2.txt */ + { + 5, + 9, + 512, + codes1 + }, + /* /home/sh/Downloads/hackrf/codec2/src/codebook/lspjvm3.txt */ + { + 5, + 9, + 512, + codes2 + }, + { 0, 0, 0, 0 } +}; diff --git a/libcodec2-android/src/codec2/build_linux/src/codebooklspmelvq.c b/libcodec2-android/src/codec2/build_linux/src/codebooklspmelvq.c new file mode 100644 index 0000000..c2e1203 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/codebooklspmelvq.c @@ -0,0 +1,235 @@ +/* THIS IS A GENERATED FILE. Edit generate_codebook.c and its input */ + +/* + * This intermediary file and the files that used to create it are under + * The LGPL. See the file COPYING. + */ + +#include "defines.h" + + /* /home/sh/Downloads/hackrf/codec2/src/codebook/lspmelvq1.txt */ +static float codes0[] = { + 640.185, 893.139, 1393.85, 1494.06, 1656.26, 1700.82, + 558.516, 716.906, 1057.36, 1182.62, 1503.8, 1610.03, + 615.108, 769.622, 1120.16, 1222.84, 1366.46, 1465.05, + 663.458, 736.833, 964.764, 1043.54, 1623.17, 1681.29, + 487.957, 577.723, 1017.43, 1177.04, 1552.1, 1615.69, + 536.099, 733.407, 1292.28, 1406.09, 1577.7, 1637.49, + 473.015, 542.559, 877.397, 1285.82, 1591.04, 1647.44, + 525.343, 652.014, 1206.83, 1493.96, 1647.97, 1698.3, + 510.887, 572.868, 945.226, 1445.68, 1678.17, 1705.53, + 534.915, 721.265, 1275.92, 1415.76, 1648.5, 1695.73, + 865.189, 1047, 1267.14, 1389.32, 1646.57, 1696.97, + 608.033, 869.887, 1300.95, 1432.87, 1639.74, 1689.41, + 554.972, 649.352, 866.845, 979.873, 1645.31, 1695.39, + 696.079, 813.97, 1102.49, 1219.79, 1536.49, 1621.94, + 553.879, 691.097, 1200.84, 1339.34, 1629.08, 1683.5, + 778.561, 997.776, 1258.63, 1390.34, 1601.99, 1657.86, + 713.107, 778.893, 992.875, 1051.95, 1497.45, 1650.66, + 490.27, 598.18, 1116.02, 1244.13, 1622.26, 1672.21, + 448.556, 512.085, 1271.7, 1448.18, 1579.37, 1642.48, + 465.688, 535.312, 1099.19, 1535.79, 1684.29, 1710.9, + 812.222, 1087.53, 1470.44, 1559.73, 1692.18, 1726.38, + 428.174, 489.426, 1160.33, 1409.3, 1597.5, 1651.3, + 712.81, 957.56, 1433.02, 1516.37, 1675.39, 1710.06, + 717.255, 934.073, 1305.2, 1436.72, 1647.2, 1693.09, + 492.888, 580.393, 1339.52, 1461.07, 1592, 1653.42, + 550.467, 675.888, 990.888, 1177.44, 1615.64, 1658, + 714.528, 801.792, 1072.94, 1146.08, 1637.06, 1706.58, + 513.819, 590.989, 798.691, 895.755, 1557.76, 1624.56, + 436.653, 518.413, 1281.99, 1547.08, 1685.12, 1717.76, + 681.854, 758.354, 1046.65, 1120.92, 1412.25, 1603.42, + 873.962, 1118.49, 1376.61, 1465.07, 1665.38, 1707.18, + 553.529, 634.092, 1144.77, 1284.8, 1542.87, 1620.63, + 448.532, 519.097, 1054.57, 1319.66, 1591.26, 1649.85, + 742.267, 885.293, 1152.83, 1318.51, 1569.36, 1631.45, + 529.03, 654.522, 1355.76, 1511.75, 1662.39, 1706.4, + 463.794, 597.77, 1176.05, 1366.13, 1629.37, 1678.01, + 626.936, 706.66, 1058.04, 1323.62, 1473.28, 1599.68, + 477.322, 615.5, 1488.89, 1550.5, 1683.1, 1712.34, + 547.442, 815.442, 1313.38, 1486.96, 1671.97, 1717.4, + 610.671, 819.955, 1219.11, 1363.66, 1592.05, 1654.31, + 547.414, 746.54, 1438.43, 1517.72, 1659.64, 1695.57, + 604.823, 821.146, 1137.94, 1358.29, 1598.94, 1655.64, + 525.935, 616.739, 1060.13, 1427.33, 1593.35, 1657.48, + 622.5, 762.143, 1318.65, 1410.96, 1618.12, 1680.06, + 436.917, 516.583, 1390.29, 1475.86, 1594.71, 1633.74, + 792.487, 1031.24, 1362.62, 1472.68, 1649.26, 1697.35, + 457.707, 526.207, 865.966, 1120.47, 1564.83, 1625.28, + 526.39, 624.21, 1269.65, 1374.23, 1558.07, 1620.96, + 483.768, 573.505, 1440.66, 1512.43, 1622.37, 1671.31, + 953.061, 1194.03, 1416.67, 1515.82, 1678.82, 1718.21, + 499.947, 627.358, 1299.94, 1394.23, 1643.17, 1685.33, + 648.723, 838.181, 1225.5, 1383.45, 1637.46, 1691.67, + 672.588, 1022.6, 1346.21, 1443.75, 1651.15, 1695.43, + 581.833, 674.944, 955.167, 1020.5, 1370.5, 1503.11, + 536.143, 652.531, 1243.84, 1315.27, 1425.1, 1505.73, + 560.558, 786.65, 1224.66, 1373.98, 1630.06, 1682.68, + 591.926, 783.722, 982, 1140.81, 1581.61, 1625.28, + 548.537, 644.524, 940.451, 1048.74, 1557.89, 1609.48, + 516.916, 723.253, 1135.95, 1309.19, 1600.08, 1669.48, + 426.521, 506.077, 1457.73, 1535.02, 1641.35, 1678.45, + 645.189, 776.595, 1020.78, 1240.07, 1597, 1648.7, + 637.105, 941.474, 1242.21, 1372.49, 1646.7, 1694.8, + 691.228, 788.141, 1202.12, 1294.89, 1626.97, 1681.77, + 699.08, 886.655, 1300.9, 1399.28, 1579.94, 1646.79 +}; + /* /home/sh/Downloads/hackrf/codec2/src/codebook/lspmelvq2.txt */ +static float codes1[] = { + 4.44342, 51.1708, 7.45726, -27.4373, -18.5056, -18.1989, + 51.58, 63.3166, 57.7796, -44.1591, -18.4834, -6.93392, + -20.2795, -21.7454, 4.66947, 52.1569, 30.4367, 36.8582, + -29.1104, -5.63933, -3.45383, -63.0261, -20.4423, -19.0485, + 2.91622, 40.8374, 16.579, -51.8461, 38.5045, 18.1728, + -20.6977, -11.4022, -36.6173, -16.6116, -56.8965, -24.301, + -20.2385, 26.6332, 33.1191, 27.6284, -36.7493, -25.6041, + 54.9871, 0.71748, 23.0674, -22.1031, 11.6643, 10.9938, + -62.7215, 21.7547, 21.2907, -7.64891, -4.5533, -9.71777, + -9.56338, -3.85841, 25.0454, -9.45216, 6.05017, 5.35043, + 47.3823, 56.6122, -27.0315, -24.67, 4.86343, -0.225495, + 26.3997, 26.7857, -1.66167, 62.8366, -19.7653, -8.55169, + -8.77648, -9.04545, -7.88996, 28.2433, -35.0963, -21.9709, + 14.8423, 25.4563, -56.1262, -50.2934, -22.9393, -15.8113, + 4.94186, 27.7798, 8.34579, 10.8553, -3.12587, -3.97807, + 12.6426, -52.2317, 37.2487, -57.2067, -14.5125, -5.54035, + 13.485, 15.3246, -23.9644, -21.3135, 19.5779, 14.1597, + -55.3543, -45.2077, 10.5185, 43.0461, -24.9859, -19.3484, + 27.7226, 32.1882, 20.0321, 24.3328, -72.8194, -51.1823, + -31.3818, -5.25745, -43.7806, 14.1312, 17.6392, 9.81024, + -48.26, -26.2973, -44.1428, -31.9001, 22.5085, -0.467938, + 7.37202, -7.79071, -12.5732, 27.1074, 9.34052, 14.4477, + 14.5295, 8.82597, 57.0009, -16.3234, -32.4142, -21.0224, + 32.4616, 48.6062, 38.5452, 9.77182, 1.82856, 11.5063, + -43.8275, -22.6263, -29.8278, 13.6115, 9.66849, -63.5218, + -11.9967, 2.74308, -73.6375, -20.9809, -4.11839, 7.71405, + 24.0162, -2.29513, -6.80983, -26.4043, -21.8529, -16.3381, + -16.1484, 35.9086, -3.0837, 3.83958, 42.3003, 17.5003, + 54.1225, -48.7513, -14.8712, -38.1256, 15.2903, 7.33079, + 53.0929, 13.9221, 10.6536, 24.345, -16.5952, -16.0365, + 33.1415, 38.5714, -26.0251, 22.021, 15.6866, 13.2593, + 15.7194, -49.4061, 31.4552, 10.1896, 0.219911, 1.62902, + 4.10868, 14.2755, 58.475, -1.16668, 52.6265, 43.4938, + 358.653, -112.587, 85.9867, 52.08, -52.88, -249.24, + -12.5792, -6.64039, -33.0106, 1.51449, 50.3259, 61.6091, + -6.81685, 14.3146, 14.1563, 53.6363, 83.6051, 38.174, + -18.0006, 41.3575, -46.3736, 8.47794, -10.4611, -11.3847, + 28.7711, 31.4689, -39.5744, 1.43977, -37.7309, -30.5309, + -34.4692, -11.0778, 44.4681, -60.0045, -44.9729, -34.8364, + 38.7401, 41.0529, -7.92946, 20.0279, 74.4246, 54.6498, + 81.8008, 133.531, -5.47375, 34.4759, 75.7417, 52.6112, + -61.5067, -76.6328, -47.2471, -43.5928, -9.46878, 0.832598, + -11.544, -44.7728, -13.9257, -3.32122, 24.816, 21.9064, + 2.83945, -45.0522, -36.8776, -14.7577, -11.9912, -8.75366, + -8.97657, -14.0499, 39.2628, 48.8038, -14.3789, -4.79625, + 31.6292, 32.0168, 5.52278, -79.8411, -24.1789, -15.7597, + 15.893, 10.4667, -43.9057, -20.4885, 80.7594, 6.8023, + 22.3285, -69.4942, -5.16156, 48.8868, 4.01995, -3.04376, + 31.4062, -20.0952, -55.1259, 0.505988, 20.86, 15.0816, + -12.9696, 37.2548, 18.1009, 51.0767, 18.2053, 19.8474, + -45.4855, -45.3454, -4.22795, -15.8693, -6.07272, -1.99631, + -9.25462, 45.0241, 70.2879, -44.4484, 2.63165, 4.15336, + -51.1589, -27.7586, 19.7999, -9.87882, 63.4125, 48.3124, + -8.94084, -13.4815, -44.9602, 52.839, -17.2582, -1.59439, + 23.18, -3.00374, 33.162, 31.5424, 29.111, 25.9327, + -28.4665, -10.6868, 88.7543, -3.88024, 17.5881, 13.7336, + -10.6578, 7.43021, -20.945, -17.6491, -11.2815, -10.8001, + -35.6182, -6.90301, 3.92829, 26.9695, 2.8894, 5.01685, + -3.78263, -19.2095, -10.5568, -67.7468, 20.3733, 29.552, + 53.8109, -33.8374, -27.8223, -7.73289, -31.3462, -23.5678, + -38.8762, -17.7679, 11.457, 28.4607, 50.7006, -19.2488, + -44.6024, -60.2806, 56.35, 21.7545, 5.23677, 7.66608, + -3.80758, -39.1425, 28.8305, -3.09285, -42.7534, -25.1803, + 45.2559, 28.8742, 60.0723, 64.461, 3.51203, -27.883 +}; + /* /home/sh/Downloads/hackrf/codec2/src/codebook/lspmelvq3.txt */ +static float codes2[] = { + -9.63558, 27.5501, 15.4445, -4.34872, -1.8587, 1.27054, + -15.5343, 23.0515, -15.4436, -2.01887, -6.19433, -13.5085, + 8.38867, -1.60998, -32.3903, 10.1765, 1.9467, 12.2454, + -3.06306, -9.55983, 14.367, -1.87159, 19.6192, -3.78366, + -18.495, -13.3811, -23.8928, -20.3745, -6.87856, -17.4887, + 15.4925, 14.707, -0.0697855, 15.7541, 12.6051, -3.19768, + 9.60466, -4.56494, 10.1616, 15.5594, 6.89224, -31.5602, + -11.5625, -23.0872, 34.9163, 12.3052, 7.67426, -1.26298, + 2.5486, -3.90251, -19.1132, 7.6131, -31.0016, 12.4759, + 2.74156, 12.4124, -39.5057, -0.325024, -22.9186, -28.5606, + 6.30148, 15.4402, -2.6284, -20.1603, 5.22906, -12.3451, + -6.91862, 16.6335, -1.65064, 2.99602, -23.9479, -1.43947, + -14.3907, -31.417, 10.1113, 1.70013, -21.5733, 4.736, + -1.67171, 6.22751, -13.7187, 21.0936, -9.69243, -10.5756, + 2.15266, 21.2198, -13.0171, -1.43135, 18.8831, 10.6664, + 13.8913, 27.3565, 0.472838, -7.40477, -14.8705, 25.7448, + 28.402, -2.05484, -9.32712, -17.3169, 15.643, 6.96908, + -15.863, -17.8482, -24.9238, 12.5574, 7.17566, 0.0161972, + 5.99291, -41.0228, 1.95791, -6.78012, 9.20162, 4.6234, + -6.33629, -7.61679, 27.7318, -8.9214, -14.1931, 7.88247, + -12.2367, -21.245, -2.5927, 13.7776, -2.7864, -24.5072, + 23.15, -9.93687, -2.92559, 3.88086, 11.2667, 11.1998, + 9.67437, -9.4269, 6.2582, 36.5694, 2.88654, 1.82052, + 15.385, -2.88243, 19.8377, -14.5111, 5.92264, -2.55757, + -20.9648, 3.76147, 18.5074, -13.5547, -7.84261, -19.98, + 24.6032, 16.989, -19.1622, 1.35535, -0.0122027, 0.166227, + 9.98886, -6.89666, -20.5111, -2.89196, 2.58467, -17.049, + -9.17761, -23.7209, 12.6088, -18.2654, 2.17718, -13.0865, + -9.73326, -12.2682, 6.80914, 20.3469, -10.2912, 4.85191, + -5.19406, 6.78014, 18.0099, 14.3782, -0.124328, -10.0141, + -4.69806, 6.71393, -19.1371, 8.19814, 23.3987, -10.3316, + 1.02965, -4.63654, 21.9822, 11.5088, -30.9617, -20.6354, + -33.2824, 31.4666, -11.4837, 11.5144, -1.36834, 9.44599, + -37.5431, -3.16317, -2.09497, -2.62712, 40.4714, -33.0527, + -8.79595, -15.5174, -15.7916, 7.97003, 37.2542, 40.7063, + -14.7261, -12.6884, 2.42105, -10.2686, 25.9033, 14.8525, + 22.9598, -16.6224, -3.64949, 4.44269, -22.3897, 13.6968, + -10.874, 4.18931, -24.2284, -3.63764, -15.1379, 40.9515, + 28.2393, -8.63225, -12.544, 28.8282, -0.987894, -4.9824, + -25.0777, -0.481678, -3.37082, 5.55114, -9.89898, -8.07628, + 23.3581, 3.12034, -8.63348, 0.63042, -18.2216, -22.1886, + 44.9505, 19.8267, 23.7129, 8.58075, 7.80458, 1.78796, + -8.13112, -2.1262, -7.12776, -25.0529, -16.7287, 8.41402, + 2.01965, 19.2579, 20.0963, 5.99199, 28.1098, 5.96128, + 2.42493, -6.33216, -26.5858, -23.8607, 8.27049, 3.05805, + 0.0153248, 0.446112, -4.92759, 19.0023, 22.7346, 15.5451, + -7.39591, 40.285, 10.8414, 25.7961, -8.81069, -13.5, + 5.81306, 11.2384, 6.93765, -9.43067, 9.51418, 22.9709, + -9.17611, -16.4993, -1.56929, -2.9111, 4.17113, 10.9228, + 10.0376, -27.4993, -8.25332, -1.715, -11.5063, -10.467, + 23.6637, -13.8338, 14.7284, 8.00341, -2.71881, -8.80708, + 27.101, 2.42801, 11.4599, -24.1577, -20.9901, 4.52358, + 16.8065, 19.3315, 11.1219, 13.3391, -13.1522, 0.91428, + -25.2603, 6.04837, 12.1994, 21.9372, 14.8795, 6.93368, + -1.24639, -7.96856, 16.4064, -2.36409, -25.9093, 46.0938, + 8.81687, 24.8004, 11.4475, -13.261, -19.8693, -28.4793, + 15.3175, -12.5335, 24.1778, 10.5133, 22.2244, 9.93191, + -18.7982, 38.939, -20.0631, -35.4052, 7.5879, -0.599373, + -18.1388, 9.5843, 17.4375, -21.057, 8.1634, 6.31216, + -61.5486, -8.71159, 19.7502, -25.2365, 3.56558, -1.64973, + -26.9863, 0.291017, -12.5337, -10.505, 11.0614, 4.84072, + -0.630579, -3.87056, -0.707795, -13.1306, -19.6548, -16.2436, + 4.87022, -5.90744, 3.46971, -40.0866, 16.8741, 10.3333, + -1.00985, 16.234, -0.475836, 28.3848, 1.75473, 28.2608 +}; + +const struct lsp_codebook lspmelvq_cb[] = { + /* /home/sh/Downloads/hackrf/codec2/src/codebook/lspmelvq1.txt */ + { + 6, + 6, + 64, + codes0 + }, + /* /home/sh/Downloads/hackrf/codec2/src/codebook/lspmelvq2.txt */ + { + 6, + 6, + 64, + codes1 + }, + /* /home/sh/Downloads/hackrf/codec2/src/codebook/lspmelvq3.txt */ + { + 6, + 6, + 64, + codes2 + }, + { 0, 0, 0, 0 } +}; diff --git a/libcodec2-android/src/codec2/build_linux/src/codebookmel.c b/libcodec2-android/src/codec2/build_linux/src/codebookmel.c new file mode 100644 index 0000000..0f0a675 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/codebookmel.c @@ -0,0 +1,121 @@ +/* THIS IS A GENERATED FILE. Edit generate_codebook.c and its input */ + +/* + * This intermediary file and the files that used to create it are under + * The LGPL. See the file COPYING. + */ + +#include "defines.h" + + /* /home/sh/Downloads/hackrf/codec2/src/codebook/mel1.txt */ +static float codes0[] = { + 550, + 600, + 650, + 700, + 750, + 800, + 850, + 900 +}; + /* /home/sh/Downloads/hackrf/codec2/src/codebook/mel2.txt */ +static float codes1[] = { + 50, + 100, + 200, + 300 +}; + /* /home/sh/Downloads/hackrf/codec2/src/codebook/mel3.txt */ +static float codes2[] = { + 800, + 850, + 900, + 950, + 1000, + 1050, + 1100, + 1150, + 1200, + 1250, + 1300, + 1350, + 1400, + 1450, + 1500, + 1650 +}; + /* /home/sh/Downloads/hackrf/codec2/src/codebook/mel4.txt */ +static float codes3[] = { + 25, + 50, + 75, + 100, + 125, + 150, + 175, + 250 +}; + /* /home/sh/Downloads/hackrf/codec2/src/codebook/mel5.txt */ +static float codes4[] = { + 1350, + 1400, + 1450, + 1500, + 1550, + 1600, + 1650, + 1700 +}; + /* /home/sh/Downloads/hackrf/codec2/src/codebook/mel6.txt */ +static float codes5[] = { + 25, + 50, + 100, + 150 +}; + +const struct lsp_codebook mel_cb[] = { + /* /home/sh/Downloads/hackrf/codec2/src/codebook/mel1.txt */ + { + 1, + 3, + 8, + codes0 + }, + /* /home/sh/Downloads/hackrf/codec2/src/codebook/mel2.txt */ + { + 1, + 2, + 4, + codes1 + }, + /* /home/sh/Downloads/hackrf/codec2/src/codebook/mel3.txt */ + { + 1, + 4, + 16, + codes2 + }, + /* /home/sh/Downloads/hackrf/codec2/src/codebook/mel4.txt */ + { + 1, + 3, + 8, + codes3 + }, + /* /home/sh/Downloads/hackrf/codec2/src/codebook/mel5.txt */ + { + 1, + 3, + 8, + codes4 + }, + /* /home/sh/Downloads/hackrf/codec2/src/codebook/mel6.txt */ + { + 1, + 2, + 4, + codes5 + }, + { 0, 0, 0, 0 } +}; diff --git a/libcodec2-android/src/codec2/build_linux/src/codebooknewamp1.c b/libcodec2-android/src/codec2/build_linux/src/codebooknewamp1.c new file mode 100644 index 0000000..190acb6 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/codebooknewamp1.c @@ -0,0 +1,1065 @@ +/* THIS IS A GENERATED FILE. Edit generate_codebook.c and its input */ + +/* + * This intermediary file and the files that used to create it are under + * The LGPL. See the file COPYING. + */ + +#include "defines.h" + + /* /home/sh/Downloads/hackrf/codec2/src/codebook/train_120_1.txt */ +#ifdef __EMBEDDED__ +static const float codes0[] = { +#else +static float codes0[] = { +#endif + 6.7484, 7.6125, 6.0332, 5.2789, 1.5239, 2.2353, 2.0748, 0.5289, 0.8748, 2.5432, -2.2863, -3.191, -0.0434, -1.9857, -3.3605, 0.7069, -5.9493, -0.5672, -0.6798, -18.0977, + 4.0503, 3.9086, 2.9225, 2.3773, 0.658, -0.4363, -0.0644, 2.4063, 1.3428, 2.4542, 0.5275, 0.982, -1.3277, 0.6811, 0.0273, -0.1838, -0.0222, -0.6478, -2.2405, -17.4152, + 13.3284, 12.1212, 10.6531, 9.8214, 11.0388, 15.812, 19.711, 16.5488, 16.1068, 15.8771, 7.2553, 4.2486, -6.0036, -12.5476, -20.1299, -28.2803, -25.3971, -21.7907, -11.5143, -26.859, + 21.4405, 18.4703, 17.8693, 14.9679, 11.2994, 6.4906, 4.7717, 0.1959, -0.8801, 1.8991, 1.9793, -4.9755, -7.7852, -10.0492, -8.5295, -8.2893, -4.1203, -12.4072, -16.166, -26.1817, + 4.0023, 3.8279, 1.2681, 1.0053, 0.7002, -0.3886, 3.4465, -1.4055, -6.7846, -2.3345, -2.905, -0.1344, 3.4192, 2.4319, 10.0096, 3.9279, 0.6807, 0.322, -3.8325, -17.2565, + 29.8276, 21.1543, 12.7853, 13.0246, 5.8164, 3.7469, 2.4198, 0.151, -4.5449, 5.2695, 11.7552, -4.8954, -6.0291, -8.978, 4.965, -10.654, -12.5363, -21.6056, -18.2985, -23.3739, + 4.861, 5.1207, 6.5382, 9.8638, 15.4754, 18.8192, 14.8018, 10.7685, 12.4401, 14.0392, 2.92, -3.7283, -9.7213, -13.5526, -16.073, -13.7571, -5.4267, -12.2552, -14.5143, -26.6193, + 3.0429, 3.0335, 4.4785, 5.6483, 5.3476, 5.7519, 3.5651, 4.9007, 4.9672, -0.733, -0.6458, 6.5888, 5.2957, -2.0068, -6.0189, -7.2145, 2.5545, -5.8358, -7.4936, -25.2263, + 5.9384, 7.0203, 10.7433, 15.2477, 14.8437, 8.0949, 3.1384, -0.0014, -0.1756, 2.1601, 8.1029, 0.4123, -6.8062, -9.6038, -6.2302, 0.4409, -8.9878, -10.1638, -4.6903, -29.484, + 7.188, 6.1134, 5.4021, 10.5427, 17.0718, 14.5658, 6.8632, 2.2257, 0.4412, 3.8257, 9.0388, -1.1212, -6.7639, -9.2412, -8.6575, -2.9951, -8.6659, -9.422, -6.6046, -29.8068, + 9.8859, 4.3889, 3.6253, 3.2033, 4.6563, 4.5967, 1.8747, -0.0037, 3.2114, 3.8854, 3.1501, 0.8523, -5.283, -8.4603, -5.1159, -3.9157, 6.98, -1.527, -6.0421, -19.9624, + 7.6208, 10.1888, 12.8648, 16.4838, 14.9269, 7.8064, 3.5594, -2.8048, -3.6303, -10.8596, -7.1254, -2.889, 5.4295, -2.5015, -5.5359, -2.9934, -6.598, -7.1493, -4.9387, -21.8545, + 12.7227, 17.1387, 21.7055, 19.8068, 12.1832, 5.8645, -2.4103, -3.8445, -5.5496, -5.5608, -0.201, 5.1772, -1.4666, -6.6602, -1.2573, -3.1593, -10.7925, -14.3751, -12.0047, -27.3167, + 7.4465, 7.8765, 9.4912, 12.2074, 12.1631, 11.478, 7.6294, 2.6922, 0.1566, -2.1903, -1.5699, -1.8031, 2.2555, -1.5591, -7.9267, -10.3612, -5.5432, -5.5673, -10.0797, -26.796, + 0.3749, 1.9725, 2.6868, 6.3326, 8.9635, 12.8113, 13.6523, 14.0916, 11.2443, 1.2914, -1.9954, -2.9443, -4.6718, -4.3132, -3.4613, -8.1105, -7.9033, -7.0956, -6.5898, -26.3361, + 10.3072, 10.6822, 8.8253, 4.8992, 4.3627, 8.8165, 9.7824, 3.7264, 0.4265, 0.6068, 3.0934, 2.9121, -0.6717, -5.8045, -1.7344, -9.1008, -8.8333, -6.0633, -11.2321, -25.0005, + 10.6992, 14.806, 18.9665, 22.421, 21.871, 15.6647, 10.616, 12.1366, 14.0479, 7.0707, -3.8212, -12.177, -16.1111, -19.3389, -18.8315, -17.5346, -7.9646, -9.4592, -17.5614, -25.5, + 9.9592, 11.7001, 14.2704, 14.1434, 7.3322, 4.2766, -0.0567, -2.7113, -5.7358, -6.739, -5.9067, -0.1939, 4.8177, -3.981, -7.2528, -3.2695, -1.5685, -7.894, -6.3355, -14.8548, + 17.6322, 19.5153, 22.4362, 16.2943, 10.4698, 2.5066, -2.3936, -5.377, -7.9766, -9.8004, -12.964, -13.1015, -9.8076, -5.7565, 1.8732, 0.4843, 3.3621, -1.0048, -4.8377, -21.5543, + 9.9491, 17.4987, 23.2236, 17.3142, 6.8072, 6.6873, 1.9421, 1.1415, 2.9409, 6.847, 2.4633, -7.2869, -8.9792, -3.3155, -0.1918, -11.8037, -18.6298, -12.6475, -9.762, -24.1984, + 9.208, 9.9971, 12.5064, 20.0609, 20.9647, 10.9574, 7.436, 4.4943, 4.8454, 11.0636, 1.8176, -7.3479, -12.5617, -15.3912, -11.5022, -5.0309, -14.7556, -15.4294, -6.415, -24.9176, + 7.7917, 9.3291, 11.8185, 15.3501, 19.3235, 20.6869, 19.816, 14.6028, 10.2893, 9.9407, 9.8534, 3.6182, 2.7695, -5.2735, -19.7962, -24.6834, -27.0316, -25.6805, -24.9149, -27.8096, + 0.1108, 3.1261, 6.8163, 12.4528, 16.9192, 10.8153, 2.6109, -0.2652, -4.8897, -6.1056, -7.3218, -4.4594, 4.3004, 3.7728, -2.8276, -0.0458, 1.0104, -6.4884, -6.486, -23.0456, + 12.9442, 10.3059, 3.1303, 2.1611, 1.4795, 2.758, 6.9527, 8.4487, 7.1533, 1.4465, -0.9113, -3.9971, -4.909, -5.3881, -3.1011, -0.4922, -1.1819, -5.3279, -8.2374, -23.2345, + 25.0945, 17.8572, 8.95, 2.704, 0.2187, 1.4115, 0.7421, 0.5831, -0.3096, 0.9334, -2.9667, -4.0352, -2.8473, -4.8594, -4.5863, -4.4311, -2.8466, -4.4808, -5.1669, -21.9645, + 14.6124, 19.7986, 21.2066, 15.762, 8.7509, 3.7653, -0.5239, -3.8894, -6.8522, -8.4979, -8.1879, -5.8438, 0.5485, 6.7415, 0.4745, 2.675, -10.3676, -15.0245, -12.2357, -22.9125, + 11.9959, 12.9771, 17.1177, 21.531, 16.8892, 10.8731, 9.7276, 8.5106, 12.9569, 2.2512, -6.9324, -13.2124, -16.538, -18.0518, -16.6252, -9.7038, -6.122, -8.7542, -6.8998, -21.9905, + 12.8107, 14.567, 13.4289, 7.1693, 3.4265, 3.1397, 2.5457, -1.2214, -0.3887, 2.4506, 3.9777, 0.9056, -6.9195, -7.3811, -3.2619, -0.3714, 2.6266, -6.3479, -12.2319, -28.9244, + 2.6437, 2.2575, 3.8643, 6.0625, 10.9091, 16.9554, 21.5045, 12.7233, 9.3579, 9.4439, 12.8585, 4.4528, -2.4283, -4.733, -2.2502, -11.3098, -18.5273, -22.457, -23.1304, -28.1976, + 10.5757, 10.9392, 14.0126, 18.2101, 14.3745, 8.6896, 4.908, 1.0411, 2.3482, 7.2221, 4.544, -5.0353, -11.2852, -13.0882, -10.96, -3.0288, -9.5005, -10.2217, -6.6739, -27.0717, + 14.6172, 4.5412, 13.3824, 9.2916, 19.2818, 13.6563, 14.4089, 10.126, 1.6926, 3.9361, -0.6461, -5.1244, -9.3641, -13.9807, -11.4128, -11.8597, -0.8237, -20.3149, -12.3561, -19.0515, + 4.0591, 4.6177, 7.7662, 6.8737, 9.4052, 10.1099, 12.8714, 8.1202, 6.6015, 7.9224, 1.7548, -1.6325, -4.8379, -5.0955, -2.1947, -8.422, -11.8799, -10.7107, -12.0066, -23.3222, + -3.3385, -1.1297, 3.0554, 4.9769, 3.8625, 8.6998, 8.0974, -0.5519, -1.0699, -5.4771, -4.7235, -4.8192, 7.1236, -0.4895, -2.0107, 0.1838, 3.518, 3.2804, 3.1904, -22.3779, + 10.9362, 15.2821, 18.1297, 12.4682, 2.6895, -1.2007, -1.7676, -6.1681, -6.0524, -5.8064, -3.1002, 4.3237, 2.0263, -5.5109, 1.0348, -0.476, -4.6274, 1.4107, -7.5329, -26.0586, + 27.0648, 22.2199, 14.8908, 7.7845, 2.8689, -0.0364, 0.0683, -0.1186, -1.6323, -2.4217, -4.0112, -2.3476, -5.4442, -5.8509, -6.4386, -6.2558, -6.7739, -5.9348, -7.0916, -20.5398, + 4.3156, -0.2499, 1.1824, 2.8225, 8.191, 5.2798, 2.2597, -3.0043, -5.0382, -5.2727, -4.0013, 2.6952, 8.1245, -1.1517, -1.8957, 2.4603, 3.0897, -1.0817, -0.1353, -18.5898, + 17.5894, 22.9315, 26.4862, 22.162, 13.7474, 13.5177, 15.2005, 16.3224, 4.9523, -4.2419, -8.3503, -12.4022, -12.6698, -6.7159, -16.2122, -20.1926, -20.5969, -16.0749, -12.5173, -22.9353, + 6.5871, 8.0443, 8.4339, 11.3345, 17.3665, 13.4455, 6.9211, 2.0512, -0.7348, -1.2898, 1.0076, 8.4862, -0.336, -6.4714, -5.9432, -4.1602, -12.1155, -12.4645, -10.9269, -29.2355, + 19.0066, 20.3716, 18.0417, 9.4806, 4.8058, 0.3359, -4.1091, -8.193, -8.9962, -9.7495, -13.2924, -8.6275, -4.9424, 6.0502, -6.8142, -7.1166, -3.0922, 8.8016, 5.6937, -17.6547, + 4.7309, -6.5949, 4.9914, 7.3489, 9.0188, 4.1567, 7.1949, 0.4917, 5.0462, 7.5219, 1.5314, -15.3803, 5.313, -0.0983, -7.0327, -1.2671, -0.4646, -1.6442, -0.7446, -24.119, + 13.7639, 5.1424, 5.3193, 3.8945, 3.9574, 1.4034, 0.1896, -4.0608, -2.5264, -4.9434, 2.8459, 2.6311, -2.7915, -3.7842, -0.3711, 0.5487, 5.3766, -4.3496, -3.2801, -18.9656, + 12.6752, 14.7799, 16.2157, 18.6944, 14.139, 7.0937, 3.8206, -2.4778, -3.9766, -4.4531, -2.8711, 3.2148, 0.68, -9.1748, -10.16, -6.0557, -0.8581, -9.2828, -14.0109, -27.9924, + 15.0025, 18.2042, 22.4086, 21.6195, 14.2308, 10.5772, 6.7291, 6.0463, 11.7877, 8.4162, -3.4731, -11.2708, -15.6923, -17.5613, -14.5235, -4.5248, -17.8954, -18.3529, -10.3105, -21.4173, + 2.5368, 2.8687, 8.7229, 5.2089, 8.9671, 2.8847, -1.3535, -4.4273, -4.906, -7.8939, -15.475, -10.4797, -4.4811, 6.5892, 9.9939, 12.9078, 3.2705, 1.3246, 3.7883, -20.0468, + 8.5207, 11.8364, 16.4466, 19.9166, 16.0662, 8.4129, 4.329, -0.8928, -3.7592, -5.4071, -4.287, 0.4615, 9.9611, 5.819, 1.7969, -7.7765, -17.3073, -19.5235, -17.7924, -26.8211, + 3.0595, 10.0158, 11.1623, 5.9413, 3.1988, -2.1129, 0.3528, -3.0158, -2.3599, -1.3347, -1.0479, 3.9189, 7.8019, 3.0538, -1.6139, 0.8043, -4.929, -6.9959, -7.2918, -18.6077, + 17.8476, 19.4332, 25.4614, 19.1508, 12.2748, 9.4543, 6.1101, 3.6929, 2.9336, 5.5407, -9.2238, -17.0071, -20.8856, -22.9308, -21.1711, -15.0234, 4.8627, 2.2867, -2.1943, -20.6125, + 9.6165, 8.8018, 11.1694, 14.6183, 18.4154, 13.4481, 7.158, 4.165, 1.8242, 0.9521, 5.1356, 4.027, -5.9523, -12.0202, -14.3055, -10.5893, -2.8308, -12.2805, -13.3723, -27.9806, + 13.4166, 16.7617, 20.6572, 22.0976, 15.9129, 10.641, 5.4061, 3.157, -0.7256, 1.2303, 5.9463, 5.1273, 3.4864, 1.6884, -10.9215, -19.5567, -22.8693, -20.4758, -24.042, -26.9379, + 8.0404, 15.9476, 21.0441, 15.082, 8.2842, 3.1036, -0.2419, -4.2559, -6.0751, -7.4529, -5.5847, 1.552, 8.3483, 3.3751, -1.0503, -10.4691, -11.936, -5.5738, -6.8713, -25.2662, + 19.995, 20.2102, 18.7443, 12.722, 5.8592, 3.8088, 0.4504, -1.5876, -0.0425, -3.0873, 5.5382, -0.1499, -5.85, -7.9372, -6.2374, -0.2643, -15.0702, -16.9914, -9.3644, -20.7458, + -2.6024, -7.495, -1.2522, 3.5119, 3.9726, 3.4991, 2.4457, 3.2158, -0.183, -1.7087, -7.3996, -6.8962, -5.2421, -7.5762, -9.1433, 6.6126, 10.5297, 10.4556, 18.2991, -13.0433, + 0.8317, 2.2343, 3.6899, 5.6335, 5.8479, 6.433, 6.0022, 5.363, 2.3387, -0.5344, -1.0716, 0.6509, -0.7175, -4.0229, -6.0631, -4.7546, -1.97, -4.6226, 0.0933, -15.3616, + -9.366, -6.9175, -4.9307, -3.1828, -1.6587, -1.4971, -0.1586, 0.6208, 0.5169, 2.4709, 4.6017, 5.3127, 4.5449, 3.269, 3.759, 3.4511, 3.826, 3.9369, 4.8805, -13.479, + -1.183, 0.5095, 1.1754, 2.3109, 2.2722, 1.3243, 1.6529, -0.1799, -0.2874, -1.2863, -2.2761, -1.5668, -1.2037, -2.4367, -3.9243, -2.1186, 2.3502, 1.4312, 9.5827, -6.1467, + 9.2349, 10.765, 18.1608, 20.6655, 13.5769, 5.4902, 3.0323, -1.0259, -0.501, 1.7689, 10.381, 12.0253, 9.1922, -4.9615, -15.0315, -19.9651, -21.4377, -17.68, -6.4577, -27.2328, + 10.6391, 10.7983, 11.4949, 16.5329, 19.2664, 13.6129, 6.1846, 2.4573, -3.1501, -7.1814, -7.9387, -2.6238, 4.6419, -5.9113, -9.351, -7.0591, -3.2275, -10.282, -10.5308, -28.3726, + 18.6364, 19.3874, 19.593, 14.3075, 9.4402, 3.6045, -1.9801, -5.5352, -9.0094, -10.9308, -12.7345, -14.0779, -10.9593, -3.8674, 6.3753, 9.5959, -1.4018, -7.4988, -6.1435, -16.8015, + 9.4969, 11.3591, 11.5468, 7.8918, 4.7217, 3.0266, 4.2145, 2.2878, 1.2224, 5.6903, 10.6919, 4.2718, 0.7184, -3.7583, -6.7954, -8.0558, -7.9668, -10.2861, -12.5018, -27.7759, + 1.9805, 4.9512, 7.016, 7.8284, 8.7891, 8.0863, 7.7994, 7.9865, 8.6027, 13.1944, 14.7771, 11.0643, 2.1716, -5.7171, -10.9834, -8.7615, -16.8907, -14.3039, -17.4732, -30.1175, + 7.4683, 9.4924, 11.1231, 14.049, 15.3387, 7.9538, 5.2116, -0.0275, -3.0014, 0.105, 0.6547, 7.966, -2.3476, -7.0894, -4.6113, -2.0949, -15.972, -16.2041, -7.4758, -20.5386, + 4.8388, 4.2032, 3.5738, 6.4994, 10.8701, 16.7006, 14.8672, 6.7149, 3.1448, 0.6167, 2.5321, 7.5899, 1.6456, -3.0073, -4.4465, -2.3406, -11.2907, -15.6965, -17.0827, -29.9328, + 9.8208, 5.5733, 3.2835, 2.3197, 5.4502, 9.1113, 10.3794, 8.6442, 6.0107, 6.4897, 4.2548, 1.1709, -4.1757, -9.6942, -10.5243, -11.8609, -10.0641, -3.4488, -2.2532, -20.4873, + 5.8783, 5.8851, 7.6595, 5.2009, 5.1, 1.982, 2.2615, 1.4023, -1.1079, 1.1247, 3.7199, 2.8362, -0.5182, 1.4421, 1.5607, -8.4521, -3.7106, -1.6008, -5.275, -25.3888, + 13.8298, 17.3228, 17.9494, 18.8765, 12.6415, 7.5326, 5.2828, 1.03, -1.0231, -5.4994, -6.6194, -2.5155, 4.6895, -3.4515, -7.2113, -4.1051, -13.7542, -14.3604, -11.8611, -28.7541, + -8.8559, -3.0649, 2.2249, 4.9828, 6.417, 6.9906, 9.9342, 12.0149, 12.2463, 14.3103, 18.4345, 6.3234, 4.2404, -2.7341, -6.9396, -10.7644, -10.1668, -12.3674, -16.3891, -26.8371, + 10.9983, 13.5279, 16.2801, 19.6892, 16.9475, 11.0028, 3.9633, 1.1799, -2.0078, -0.985, 2.7247, -0.1311, -6.6215, -8.589, -4.3971, -11.9543, -15.4358, -13.3278, -4.8427, -28.0217, + 7.2013, 9.1028, 13.1142, 19.8377, 22.536, 16.6528, 11.833, 10.3141, 12.9885, 15.8372, 9.0995, 8.4627, 1.1838, -14.4656, -21.4397, -23.6775, -22.5547, -24.8595, -24.4974, -26.6692, + -8.4073, -6.6779, -3.958, -1.6241, -2.147, -2.2867, -2.2534, -3.0205, -4.5931, -2.5545, -2.135, -1.3098, 1.1053, -1.1397, 1.217, 6.2234, 3.6093, 9.8015, 23.5766, -3.426, + 9.6955, 11.4467, 15.0851, 15.4765, 9.8267, 3.549, -0.5777, -2.7726, -5.1878, -5.7225, -4.4558, 0.4969, 9.2914, 5.8917, 6.4235, -4.2514, -11.0149, -9.4893, -13.0444, -30.6665, + 2.9943, 1.4307, 0.8714, 2.2925, 2.1145, 2.9148, 2.4003, 1.9382, 1.6662, -2.3476, -2.0877, -1.9322, 3.3342, 1.7171, -0.9114, 3.2785, 1.7852, 1.4651, -1.3549, -21.5695, + 7.7138, 9.34, 11.7519, 14.3217, 14.9762, 11.0903, 9.904, 9.3599, 10.4611, 6.3795, -3.9927, -7.6734, -12.4888, -12.1729, -5.7999, -5.5417, -9.569, -9.5926, -7.6846, -30.7825, + 4.4498, 9.229, 15.0677, 17.9679, 11.2745, 2.673, -0.9888, -5.6255, -7.5349, -8.4589, -8.451, -5.5027, 1.7669, 4.3143, -4.8629, -2.0721, 4.6797, -5.0125, -4.4213, -18.4923, + 11.1829, 12.4396, 12.7925, 12.6901, 8.015, 3.4089, 1.7847, -0.2306, -2.0077, -1.0178, 2.2167, -0.4542, -8.4111, -8.9029, -8.0861, -3.9439, -6.2512, -2.2635, -2.1307, -20.8306, + -0.0237, 3.59, 4.5144, 3.8794, 5.7527, 11.0182, 8.9091, 7.1863, 7.0702, 7.1782, 4.7799, 0.6784, -4.3508, -5.3991, -6.5953, -5.6132, -9.5378, -5.6903, -1.3834, -25.9632, + -2.7117, -1.4799, 1.2116, 2.3262, 3.7406, 3.7668, 1.2697, 0.2086, 0.7399, -1.3479, -2.2145, -3.7982, 4.9747, -0.4583, -1.7465, -0.9161, 7.2119, 0.8965, -0.2723, -11.4012, + 7.6123, 10.5335, 16.3125, 23.5319, 21.6117, 16.329, 18.2001, 16.9715, 0.9425, -7.0707, -12.7338, -16.0871, -18.4761, -17.8994, -14.8763, -4.844, -8.9433, -6.8294, -0.8772, -23.408, + 9.1763, 3.0851, 4.6724, 8.0499, 14.6517, 16.8559, 10.4532, 11.9797, 13.2732, 7.6578, -1.4245, -7.0469, -11.9925, -15.0269, -14.7577, -15.9057, -2.4494, -8.2002, -4.4694, -18.5819, + -0.3793, 0.7119, 0.4558, 1.7011, 3.1548, 7.4097, 8.6888, 7.5902, 9.102, 7.3493, 9.7346, 15.2626, 6.8726, -0.7975, 0.8553, -9.6815, -9.3426, -14.3122, -13.9791, -30.3963, + 5.2988, 6.3406, 1.2009, 3.3308, 2.029, 2.8107, 1.003, 0.4513, -1.4458, 3.0391, 1.2595, -9.2407, 1.3164, 1.9175, 0.7738, 1.8301, 0.5948, -0.9497, -2.7482, -18.8117, + 23.5623, 25.058, 25.0568, 22.4174, 16.4713, 14.4026, 11.1159, 5.025, -1.0266, -8.5971, -10.1924, -9.612, -11.8638, -13.7028, -4.2, -6.01, -12.7481, -18.5497, -22.5946, -24.012, + -5.0424, -4.212, -3.2703, -0.4028, 1.8335, 3.2012, 2.3768, 2.0802, 0.6396, 0.2079, 0.1418, -0.1844, 2.5056, -0.2078, -1.3169, -0.2911, 0.814, 1.7717, 5.2809, -5.9255, + 7.633, 9.9835, 15.1303, 18.9128, 13.0001, 5.9224, 1.3978, -3.1674, -6.4703, -8.3713, -7.747, -5.2412, 1.6661, 5.3754, 0.9111, 2.2634, -7.6214, -11.2828, -5.6474, -26.647, + 15.3965, 19.4488, 18.3928, 11.4564, 4.0261, 0.4604, -4.6326, -9.8409, -11.0926, -12.7123, -13.1035, -12.3357, -8.4063, 1.3638, 7.8807, 5.5655, 3.421, 0.7205, 5.4867, -21.4953, + 4.0267, 4.8087, 7.0895, 9.6094, 12.6372, 17.6545, 19.7244, 17.4364, 13.7517, 13.9367, 6.0059, -4.5448, -9.4075, -13.3403, -13.662, -10.1856, -10.5214, -17.1512, -19.3146, -28.5537, + 26.5287, 22.7007, 21.6748, 17.6005, 11.9372, 12.6653, 5.4749, -6.1299, -8.9419, -6.962, -5.7222, -5.6209, -8.635, -10.0876, -8.1562, -7.7238, -5.4233, -10.0839, -13.1237, -21.9717, + 3.974, 4.1572, 5.7242, 12.448, 17.3522, 11.6512, 5.2405, 1.2103, 0.5569, 2.7329, 9.6369, -0.5073, -5.1263, -2.7956, -0.7621, -3.7186, -1.7764, -8.4788, -18.8985, -32.6208, + 6.8442, 11.6517, 15.0164, 13.0383, 3.5465, 0.5949, -3.0134, -7.5262, -8.2082, -8.6101, -7.2813, -1.2345, 9.272, 5.1011, 6.0543, -0.9163, -4.5878, 3.4588, -4.8078, -28.3926, + 7.8637, 4.0004, -2.938, 2.0521, 2.2442, -0.4633, 1.8855, 1.9277, -0.6295, 1.3834, 1.2896, 1.0703, -0.4938, 1.5669, 0.0079, -1.5584, -2.007, 0.9263, -0.4846, -17.6435, + 5.8623, 7.6023, 7.9357, 8.1933, 9.8252, 14.3094, 18.598, 17.631, 14.1029, 11.3791, 8.9224, 4.7903, -4.573, -11.3683, -17.8078, -14.2065, -11.2294, -16.2936, -23.1509, -30.5225, + -1.7942, -0.0063, 1.995, 3.6026, 3.2262, 0.8396, 2.3621, 2.373, 0.2704, 0.4107, 0.3605, 1.3362, -2.3048, -2.1177, -2.8566, 0.0808, -2.4432, 2.0828, 10.0173, -17.4341, + 16.0587, 21.303, 20.2092, 12.229, 4.0091, 1.0523, -3.6402, -8.1002, -8.5006, -10.1681, -9.7303, -7.7995, -1.2107, 8.9891, 5.5157, 1.2399, -8.3907, -7.4334, -1.1958, -24.4366, + 15.8248, 21.2415, 22.3705, 19.6523, 12.6511, 4.98, 2.0524, 1.2562, -2.0002, -7.0989, -8.4866, -8.1644, -3.6111, 2.9801, -6.3159, -7.3905, -2.5939, -11.1587, -18.1433, -28.0453, + 11.4701, 14.8919, 19.2495, 17.1766, 9.1256, 4.6224, 0.3569, -3.6692, -6.2969, -8.7664, -7.4764, -1.7487, 3.4354, -4.0219, -5.5797, 1.1971, -7.0079, -5.6899, -4.914, -26.3546, + 4.0502, 6.3561, 7.7528, 13.2425, 22.1071, 16.8285, 10.8539, 9.9555, 11.6373, 14.4871, 1.0686, -6.014, -8.7291, -9.9474, -5.242, -14.0196, -19.62, -16.4317, -13.2116, -25.1241, + 14.0747, 12.9823, 14.7396, 18.358, 20.8024, 21.6686, 20.4893, 18.2777, 14.8271, 4.2101, -4.6228, -5.0852, -8.9555, -9.9704, -14.4886, -22.2364, -24.8924, -24.6202, -19.9776, -25.5806, + 6.5756, 6.5342, 9.0959, 14.5314, 20.6452, 22.1123, 17.0555, 14.5823, 18.4626, 9.7441, 0.1482, -4.4759, -4.9624, -0.2271, -12.9306, -21.6336, -23.8195, -22.7039, -21.8165, -26.9179, + -2.413, -0.2375, 2.8918, 5.5011, 6.7427, 5.7418, 5.0778, 5.1858, 4.3188, 3.4462, 4.3416, 1.8899, 2.3449, -0.9372, -1.2877, -2.8414, -4.0969, -5.4193, -7.2573, -22.992, + 18.6934, 11.3904, 9.2311, 9.3832, 5.4199, 3.6295, -0.1793, 0.6487, -3.5589, -4.0062, -6.2031, 0.6797, 0.8497, -5.8255, -3.0197, -0.8407, 3.412, -4.6925, -10.2551, -24.7566, + -1.1447, 1.564, 1.4686, 1.7604, 1.7234, 2.3262, 4.7312, 2.6246, 3.8383, 6.5465, 3.383, 1.7225, -1.7619, -1.0275, -1.1491, 1.9434, -4.9663, -2.3871, -2.8449, -18.3507, + 14.1023, 13.565, 10.151, 8.7911, 7.7313, 7.648, 9.2651, 8.0399, 4.9244, 6.1141, 5.5459, -0.9256, -6.155, -7.0836, -8.6484, -9.0926, -9.2649, -13.5303, -12.0852, -29.0925, + 9.8451, 13.4743, 16.9269, 13.4623, 5.8133, 1.7553, -0.7487, -3.9831, -8.1249, -9.5689, -8.7611, -6.3983, -0.6612, 10.9895, 12.8583, 0.3283, -8.6023, -10.4136, -5.9048, -22.2865, + 19.2227, 18.1307, 15.9732, 13.2757, 8.9377, 4.0318, 2.7371, 2.4204, 4.8079, 5.9436, -1.6587, -5.6682, -8.2354, -8.6156, -5.7373, -5.9194, -13.5825, -11.1928, -9.7272, -25.1435, + 9.7172, 12.7596, 17.788, 19.5982, 13.1714, 6.9756, 4.2961, 1.3629, -0.4383, 4.963, 8.784, 0.9395, -2.9094, 0.87, -9.7739, -17.6442, -19.7626, -14.0983, -10.0576, -26.5411, + 19.7847, 26.9921, 27.0885, 20.9467, 13.4352, 6.9927, 3.8926, 5.5073, 6.395, 3.641, -3.526, -9.9366, -12.2833, -15.4366, -15.2739, -13.403, -13.6697, -14.5223, -14.0162, -22.6082, + -4.745, -2.3439, -1.2527, 0.2681, 2.5169, 3.0271, 3.2731, 1.1854, -1.4898, -2.2085, 0.9214, 6.1154, 5.0556, 7.1405, 5.3972, 1.8235, -0.1874, -0.9732, -2.7856, -20.7382, + 2.7354, 2.9846, 4.5226, 11.0075, 16.9767, 9.7039, 5.0497, 0.2367, -2.2382, -2.2319, 3.3972, 5.8953, -3.5572, -7.9222, -5.1006, 4.0687, -6.798, -6.9512, -1.5062, -30.2728, + 1.8923, 1.9933, 1.7272, 1.4697, 2.1029, 2.7198, 2.2271, 0.4083, 1.489, 2.3633, 0.0136, -3.1335, -1.8351, -3.4645, -2.5082, 0.1244, -0.6305, -0.2515, 2.667, -9.3744, + 7.3147, 10.8559, 16.3202, 21.3322, 15.5047, 5.7917, 2.0324, -0.5787, -3.8385, -3.1611, 4.7722, 6.9085, -0.8153, 0.2585, 0.5455, -11.9753, -19.4608, -19.4821, -11.0006, -21.3242, + -4.8271, -2.3317, -0.8263, -0.6913, 0.0284, 2.1785, 4.853, 2.4866, 0.5257, 1.0973, 0.9581, 2.0508, -0.085, -0.324, -2.1544, -3.6769, 8.253, 1.6818, 2.7619, -11.9586, + 28.0344, 21.3292, 26.7011, 15.9009, 17.4755, 11.8357, 5.06, 6.5559, -4.3031, -3.5802, -8.7494, -8.4692, -7.5683, -2.5689, -10.7488, -16.5549, -18.6071, -16.7713, -13.4451, -21.5263, + 11.4465, 12.5754, 14.651, 12.0835, 5.352, 1.6789, 2.3021, -2.4719, -2.0905, -0.5169, -2.1754, -2.9241, -2.7917, 2.0815, 1.0635, -3.6587, -4.768, -6.8125, -8.2348, -26.7899, + 11.1007, 8.9165, 11.8079, 11.0313, 1.9749, -0.9229, -2.467, -6.7769, -9.1537, -10.4373, -8.8596, -6.3617, 0.2425, 8.333, 2.9722, 9.5504, -3.2943, -3.168, 4.4488, -18.9367, + 12.7055, 18.2073, 17.6143, 9.1957, 1.5762, -1.0952, -4.9687, -6.129, -7.3791, -7.2053, -4.3066, 3.6014, 9.8467, 10.7313, -1.8676, -11.4282, -13.9225, -8.1802, 2.6837, -19.6797, + 0.8368, -1.761, 0.4628, 2.3612, 5.116, 7.7374, 9.4921, 4.3865, 6.1712, 5.6238, 6.3738, 5.3491, 2.7348, 5.4859, 4.6651, -8.4273, -10.9892, -8.675, -10.7619, -26.1822, + 12.9582, 16.0251, 19.0637, 18.9347, 12.6765, 7.8161, 3.8112, 0.9397, 6.1611, 7.4639, -2.5194, -7.1391, -10.2242, -10.1934, -4.1747, -5.7525, -14.4868, -8.2946, -13.9643, -29.1013, + 29.3165, 26.9707, 19.9517, 12.4469, 7.3647, 2.8794, 1.4068, -2.4963, -5.4012, -4.1083, -5.2153, -6.4891, -5.9548, -6.4872, -6.651, -6.7351, -9.9422, -8.4833, -11.8558, -20.5171, + 7.6646, 7.8496, 5.346, 3.4574, 6.3183, 1.1408, 3.1494, 5.1045, 0.2373, 1.0847, -0.432, -0.3662, -0.3503, -0.5473, -8.1949, -0.9695, -1.7599, -3.3828, -3.0248, -22.3253, + 7.0587, 8.6157, 9.7452, 14.4294, 20.8498, 17.0788, 7.0614, 2.4228, -0.5017, -1.0215, 3.1054, 5.3564, -3.4904, -7.3987, -7.4398, -7.0656, -8.8032, -12.863, -18.8666, -28.2731, + 5.767, -2.6937, 9.6459, -0.7839, 10.7523, 2.796, -2.6113, -3.2915, -6.2928, -7.6167, -12.6729, -5.4796, 5.0447, 13.7582, 10.305, 4.5191, -1.3433, 5.4917, -1.7375, -23.5567, + -11.2311, -7.9712, -5.4028, -3.3542, -3.1975, -4.2245, -3.9952, -5.3576, -5.3493, -4.8108, -5.4962, -2.9288, 2.5785, 4.7736, 13.8058, 17.8731, 9.8332, 14.95, 11.022, -11.5171, + 2.8142, 1.3603, 4.2714, 4.8975, 4.3374, -3.4231, 3.1881, 5.0714, 3.9705, 6.2234, 3.7268, 5.279, 1.3825, -7.6582, -2.9268, 2.0075, -4.057, -5.6086, 1.2855, -26.1418, + 4.9776, 6.4457, 7.7463, 9.3687, 9.5559, 9.1954, 6.3666, 4.9237, 2.1719, 1.7788, 1.4634, -0.3859, -6.1409, -5.3778, -2.6336, -2.5068, -8.3667, -7.0441, -11.2867, -20.2514, + 10.0472, 11.9967, 16.4907, 19.9334, 16.2325, 9.2915, 4.313, 0.7097, -4.0959, -8.1186, -10.5064, -10.3134, -5.2102, 1.0801, -1.5982, -3.8949, 1.2501, -7.5248, -12.9333, -27.1495, + 17.0433, 19.1713, 22.6813, 17.1064, 8.7516, 4.3917, -0.7236, -5.3026, -7.9288, -8.3773, -7.4784, -3.7859, -2.5186, 0.02, -1.5465, 0.1954, -10.783, -12.0301, -3.0579, -25.8283, + 18.6591, 22.3501, 23.5831, 19.0252, 13.9063, 13.3289, 9.0463, -3.2346, 1.2718, 1.4619, -4.3706, -7.4089, -10.771, -11.8151, -0.8947, -8.7094, -22.3259, -8.0672, -18.5235, -26.5118, + 3.2886, 3.8514, 1.5062, 4.9096, 3.9001, 3.8964, -0.6349, -1.5534, -1.3119, -2.313, -1.8455, -3.5666, -2.6094, 3.4411, -1.0089, -3.0556, 4.525, 3.3979, 1.1349, -15.952, + -5.6652, -3.8931, -1.8885, 1.6299, 2.3371, 2.0746, 2.1285, 0.4372, 0.0031, 4.2521, 5.201, 3.3227, 2.8933, 1.9467, 2.1449, 0.9405, 2.168, 2.3807, -1.3113, -21.1022, + 21.727, 24.2953, 23.2112, 13.4917, 7.3423, 1.4843, -3.1924, -4.8355, -10.3896, -11.396, -12.8133, -11.6304, -9.9774, -2.6034, 3.7943, 3.526, -4.2988, -6.0579, 0.3494, -22.0269, + 7.1102, 6.3521, 11.665, 18.7864, 16.7459, 8.3216, 5.8454, 4.3436, 9.4868, 7.7601, -3.1382, -10.3196, -14.1642, -15.1634, -11.6972, -1.82, -7.1959, -8.5258, -1.8553, -22.5374, + 14.2212, 17.8028, 21.4842, 24.9383, 24.9854, 22.3982, 21.377, 20.9687, 13.4315, 0.0683, -9.1695, -13.1215, -13.8982, -14.9798, -18.1636, -20.5802, -22.0396, -23.026, -22.3178, -24.3795, + 8.9039, 9.7955, 9.3225, 11.7206, 17.8844, 21.1802, 19.2262, 17.3421, 13.9029, 7.386, -2.6995, -8.3297, -10.1319, -8.7756, -6.059, -8.7597, -15.4747, -24.0243, -25.5723, -26.8375, + 3.8554, 4.2234, 6.2441, 12.5445, 18.1461, 14.0699, 5.9992, 2.722, 1.0526, 2.1813, 9.5825, 3.3502, -4.3618, -5.0291, 0.561, -10.3142, -15.3449, -12.7063, -7.6401, -29.1358, + -8.9085, -6.1917, -3.8341, 0.0473, -0.3559, -1.0455, 0.4343, 0.7424, 0.1788, -2.4081, -1.5815, 0.7755, 2.7896, -0.3538, 0.5914, 4.753, 5.3039, 5.5717, 8.461, -4.9697, + 6.0177, 9.1902, 12.54, 17.665, 18.0833, 11.1113, 3.6376, -0.9348, -2.434, -3.3221, -2.487, 5.475, 6.1443, -3.6923, -2.5169, -0.6902, -11.0083, -16.8129, -17.3554, -28.6106, + 12.6629, 16.5188, 17.012, 11.3763, 2.7817, -0.7077, -5.5288, -8.1972, -9.1883, -10.5072, -9.3239, -6.2042, 2.0877, 8.3448, 2.7802, 8.4635, -5.0126, -9.023, -5.59, -12.7449, + 26.6077, 25.1133, 19.7421, 13.7493, 7.5294, 4.8418, 5.8235, 5.9404, 3.3399, 4.8147, -1.6758, -4.4299, -7.1722, -6.547, -9.6023, -9.9251, -17.0327, -19.5694, -18.7525, -22.7953, + 9.3391, 15.4719, 19.7226, 13.6838, 5.7655, 2.9423, -0.2309, -3.0447, -5.0071, -3.643, 3.6089, 8.1171, -1.0555, -2.536, 2.0952, -6.4482, -11.0547, -9.9411, -11.5931, -26.1921, + 6.7164, 12.9088, 8.1465, 2.9974, -1.5306, 3.7966, 4.6355, 0.1956, -4.4054, 2.5643, -3.5126, -0.4027, 0.5107, -1.6406, 0.9829, -5.6846, -0.0083, -4.8894, -3.3272, -18.0535, + 1.8584, 3.5453, 10.7864, 10.3313, 8.8364, 11.3153, 12.655, 8.0839, 10.2072, 14.1247, 0.1105, 4.9955, 5.9811, 7.9709, 7.5141, -6.0319, -21.0185, -23.4977, -32.6987, -35.0693, + 13.1044, 15.4062, 17.5958, 18.0756, 11.3524, 4.367, 2.6428, 0.8781, 0.0399, 6.6751, 8.2361, -2.6757, -10.1776, -9.8299, -3.1506, -9.5151, -14.3971, -6.2859, -13.5883, -28.7532, + 0.0688, 2.2921, 6.5965, 8.3598, 8.2327, 8.6486, 7.1471, 7.1631, 4.4823, 3.4067, 11.3001, 9.5567, 0.6574, -2.5849, -6.7404, -8.6614, -8.6399, -12.0189, -13.1958, -26.0705, + 9.5134, 11.1944, 14.6379, 21.3303, 20.9351, 12.8622, 5.9234, 3.0673, 0.5662, 2.8569, 7.4992, -0.6339, -9.8527, -12.4761, -11.2573, -4.7464, -13.594, -18.0638, -14.8928, -24.8691, + 5.5904, 5.1588, 4.7053, 4.3271, 5.8271, 9.5093, 8.411, 1.6453, -2.2667, -2.6767, -1.4248, -1.126, 2.4114, -1.8009, -4.819, -8.2201, -2.9355, -0.2567, -0.3488, -21.7105, + 0.4175, 1.2148, 5.1829, 9.3743, 9.7458, 5.9476, 5.0377, 2.5369, -2.7391, -8.896, -11.0818, -7.065, -7.4393, -1.4335, 10.1963, 9.6385, 5.0133, -4.2894, -3.8725, -17.489, + 8.8274, 9.1037, 13.6965, 18.9331, 20.496, 15.7102, 9.1227, 5.5813, 1.7546, 1.3849, 6.9672, 6.4807, 5.2247, 4.2668, -9.8256, -18.2374, -24.2455, -24.1902, -22.7864, -28.2649, + -10.4296, -11.2348, -7.6061, -8.6646, -7.9499, -6.125, -4.3918, -6.8877, -5.4461, -2.2579, -1.3507, 2.298, 4.8244, 12.7426, 12.4434, 14.4927, 14.8125, 12.9871, 9.6224, -11.879, + 8.889, 12.0408, 17.2338, 23.3492, 22.1801, 17.325, 16.4611, 18.6109, 12.0359, -2.1102, -7.5218, -11.7288, -11.4854, -7.679, -11.7033, -21.2349, -23.6258, -19.3358, -7.8566, -23.8442, + -7.7648, -7.6325, -5.9874, -5.7763, -5.5038, -4.9788, -3.5524, -3.9264, -4.7269, -2.6727, -1.6911, -0.4884, 1.8633, 1.5449, 3.1375, 9.0909, 11.6855, 13.422, 16.9117, -2.9544, + 17.5979, 21.004, 20.369, 15.7264, 13.3239, 13.0722, 13.4678, 1.7577, -6.0904, -6.9925, -8.3415, -10.6335, -9.5482, -1.5234, 3.987, -6.9271, -17.4878, -18.4739, -8.9267, -25.3608, + 6.1805, 4.1462, 3.501, 2.723, 3.9708, 8.1302, 9.491, 3.6927, 2.979, 2.0598, -0.61, -1.6298, -2.5238, -2.5441, -3.9959, -2.7189, -3.9403, -3.9477, -4.9568, -20.0067, + 7.7322, 4.4707, 5.232, 7.8782, 9.1005, 5.4418, 6.0577, 3.7093, 0.1939, -0.2785, 1.1984, -2.6011, 0.6595, 2.7395, -0.9452, -4.5096, -8.4529, -6.4501, -6.8768, -24.2995, + -6.4169, -3.8203, -3.3676, -1.3384, 0.0068, -0.0917, -0.654, -1.1092, -2.2062, -2.8976, -3.0409, -2.6706, 2.975, 6.3064, 7.4779, 12.0806, 5.7715, 5.5715, 0.9432, -13.5194, + 7.6067, 9.3813, 13.4849, 19.9139, 22.7781, 18.435, 15.914, 18.9134, 10.1002, -4.3291, -8.2178, -13.6741, -15.704, -16.5313, -14.1193, -3.7115, -13.7922, -12.8183, -7.7992, -25.8309, + 4.7167, 3.8923, 5.7519, 8.0369, 12.8563, 16.738, 15.0698, 9.7568, 7.4623, 7.4165, 7.755, 1.1797, -6.3964, -6.5897, -1.5093, -9.7231, -17.0341, -15.7607, -12.6623, -30.9568, + 9.6098, 13.4286, 18.728, 18.1791, 9.8536, 3.5779, 1.4841, 0.4639, -0.5329, 2.6536, 9.8742, -3.2808, -8.9269, -11.0817, -6.3122, -2.5681, -15.3236, -12.3977, -1.9946, -25.4341, + 3.899, 7.6431, 13.4623, 16.8504, 10.0821, 3.4259, -0.1709, -4.7791, -8.1809, -9.2214, -8.3021, -5.9798, 2.0125, 6.9915, 1.4712, 6.5493, -3.7836, -4.9571, 1.3613, -28.3737, + 13.9079, 16.7984, 20.6342, 24.6533, 24.3507, 19.3643, 17.9172, 18.392, 11.702, 0.001, -10.1043, -14.9084, -18.2285, -20.4094, -21.5267, -19.7383, -13.5385, -9.5045, -16.6159, -23.1465, + 7.1797, 11.3922, 15.749, 19.3949, 17.3819, 10.7478, 7.3006, 6.1472, 9.1598, 11.0073, 4.7816, -2.4892, -3.7349, -3.7521, -1.7971, -9.8976, -22.2914, -25.755, -23.0236, -27.501, + 5.66, 8.46, 10.4652, 12.1954, 14.9914, 18.5645, 17.0459, 10.3163, 4.813, 2.322, 0.5889, 4.1108, 1.2082, -9.395, -13.7061, -13.109, -10.106, -11.3113, -21.8744, -31.2396, + -1.8886, -0.7563, 0.4909, 4.9127, 6.9239, 5.1456, 6.2254, 6.4299, 5.1768, 9.199, 13.2223, 5.4194, -3.0538, -4.7242, -5.1855, -3.7939, -7.3421, -6.1816, -4.3871, -25.8328, + 11.3455, 9.9507, 8.1659, 6.0877, 1.4526, 0.9704, 4.7975, 4.0208, -0.5941, 2.5357, 1.534, -4.3306, -1.6103, -4.4373, -0.0323, -2.6725, -2.0195, -3.5278, -6.3697, -25.2666, + -0.8009, 5.6194, 7.0974, 6.1331, 7.2063, 7.4038, 4.5741, 8.4379, 4.2968, 7.9137, 13.0725, 2.3362, 0.6963, -2.4917, -4.9374, -7.2728, -8.216, -9.6329, -14.4558, -26.98, + 9.4449, 12.499, 15.8206, 17.3018, 10.9373, 5.5366, 0.8716, -1.2105, -2.477, -3.4484, 1.0611, 6.1591, -1.7466, -7.5929, -6.9295, -2.1338, -8.9361, -10.3674, -6.3554, -28.4344, + 11.5326, 10.9047, 16.3163, 21.0845, 11.9757, 7.0511, 0.8356, -4.987, -6.945, -9.2309, -9.7748, -8.2038, -2.2957, 5.5139, -5.4119, -2.741, 2.4166, -7.4497, -6.0628, -24.5286, + 9.3064, 9.3678, 11.2235, 13.9991, 14.4345, 11.1982, 6.3282, 1.4131, -2.6884, -7.1825, -11.0075, -12.3749, -9.2573, -6.0414, 2.3206, 4.6097, 3.567, -3.2208, -9.5445, -26.4507, + -6.7163, -6.0323, -3.7943, 0.882, 3.6629, 4.3198, 4.7402, 4.0799, 4.8854, 5.8718, 8.3927, 9.6825, 10.5717, 3.8917, 0.9125, -1.2807, -3.7018, -5.757, -8.2525, -26.3582, + 10.2748, 11.6455, 16.3809, 20.149, 18.2488, 12.7899, 10.3972, 8.0106, -0.6794, -6.4024, -9.7054, -13.5667, -14.6497, -16.1902, -6.9531, 0.2117, -0.7067, -1.2331, -10.6728, -27.3488, + 13.3782, 16.35, 15.3612, 8.9247, 3.489, -0.7729, -2.6106, -7.5432, -8.0129, -7.614, -7.8535, -2.4356, 6.505, -4.5887, -3.2816, 5.8982, -1.3889, 0.3111, 0.3606, -24.4762, + 10.0811, 14.1057, 20.3635, 24.0314, 20.369, 17.0236, 16.446, 19.2548, 6.0111, -3.4365, -9.9143, -13.0905, -15.015, -11.4726, -6.6405, -10.0976, -14.6658, -19.9459, -19.48, -23.9274, + -7.1817, -5.5458, -1.6137, 0.8007, 1.9284, 2.5116, 0.3432, 3.3359, 0.2833, -1.3305, -2.496, -1.6366, -2.6968, 3.6695, 6.8225, 4.4926, 6.194, 6.7541, 2.2072, -16.8418, + 9.6326, 11.3478, 14.3982, 20.7665, 19.7772, 12.3406, 6.1933, 1.0438, -1.1521, -1.586, 1.844, 7.8419, -1.5328, -9.8703, -10.1973, -2.244, -12.0413, -18.5948, -20.6014, -27.366, + 1.5056, 1.688, 4.2152, 9.5291, 17.0514, 16.2096, 8.5432, 4.2111, 4.4898, 11.7231, 5.577, -4.8191, -7.502, -5.9733, -0.7664, -10.2798, -14.8967, -9.8638, -3.1062, -27.5357, + 15.2115, 17.9992, 21.5012, 24.9136, 19.176, 15.8798, 16.4094, 17.804, 5.9025, -3.3769, -10.4408, -15.3738, -18.5882, -19.7882, -17.7007, -14.2386, -13.9566, -13.8247, -5.8162, -21.6922, + 12.1911, 17.2966, 17.4896, 10.6943, 3.5061, -0.1018, -2.5405, -6.3143, -7.6095, -8.5828, -7.4501, -2.2275, 8.4004, 0.023, -1.6734, 2.8727, -8.2243, -7.2548, -0.595, -19.8998, + -0.4264, 0.0708, 1.9133, 6.0904, 12.781, 17.8469, 12.0313, 4.9753, 4.279, 6.9401, 10.3052, 0.2003, -6.7328, -10.0168, -10.0292, -2.7869, -5.6536, -9.3242, -6.0818, -26.3818, + 7.8387, 12.9821, 20.1116, 21.8527, 15.0291, 10.4182, 9.9996, 12.5177, 11.6815, -0.1048, -5.5624, -6.4577, -2.0918, -6.3498, -17.7376, -20.9015, -21.1073, -13.6752, -3.7477, -24.6953, + 18.0184, 21.7405, 20.202, 16.4376, 12.3859, 12.2417, 12.1975, 6.3324, -4.4281, -11.4734, -5.9353, -8.8421, -10.328, -4.7973, 3.4477, 1.4017, -15.9637, -17.1346, -16.9459, -28.5571, + 8.9922, 8.4069, 10.2569, 10.5303, 10.1285, 4.9362, 1.8698, -0.0537, -5.3906, -5.9983, -4.6797, 1.6021, -1.9697, -5.3874, -2.3336, -0.9265, -2.7071, -2.3523, -3.3933, -21.5307, + 0.1643, -2.21, -0.9888, -3.4801, -0.5275, -1.468, -0.5683, -1.5514, -0.4216, 0.5034, -0.8521, -2.7835, 0.5014, -1.2182, -0.7495, 5.2974, 5.8643, 8.2766, 6.0259, -9.8143, + 7.672, 8.0788, 9.1059, 14.2217, 21.6149, 24.6272, 15.4198, 12.7487, 14.5686, 14.3925, 0.6524, -7.7122, -12.314, -13.4374, -8.0366, -14.9387, -21.7305, -22.0625, -19.3233, -23.5474, + 2.2815, 1.7578, -0.6674, 1.7705, 0.4755, 0.4978, -1.3799, -2.1107, -2.6075, -3.5652, -2.8715, -6.8295, -1.7109, 2.8096, -0.7449, 2.5543, 8.6739, -0.5359, 6.8846, -4.6821, + 18.2027, 16.9209, 12.1191, 7.6862, 3.0545, 0.5751, -1.6156, -1.2378, -3.1289, -4.2377, -5.6464, -5.0994, -5.0515, -1.2417, 1.1802, 1.1938, 0.3821, -6.3202, -6.4152, -21.3203, + 3.5023, 4.9407, 6.5095, 8.9494, 13.2647, 15.1725, 11.9431, 6.2423, 1.1652, -1.6313, -2.9929, -1.9072, 3.4422, 2.8306, -3.2309, -5.3351, -2.3238, -10.7536, -17.8375, -31.9502, + 4.7778, 10.318, 13.9538, 16.0868, 9.138, 2.9991, -0.6627, -4.2067, -5.6625, -4.9839, -1.2287, 7.7334, 9.3244, 7.4153, -4.1228, -11.6166, -8.7569, -5.6012, -5.8002, -29.1044, + -3.8341, -1.3838, -0.9472, -0.4209, 1.7906, 4.2155, 2.2324, 4.3091, 1.1357, 8.4456, 9.7973, 6.3722, 2.6068, 0.3293, 0.1016, -0.3203, -4.2313, -3.6986, -3.9405, -22.5593, + 7.9933, 10.952, 14.6109, 19.7867, 15.1983, 6.5296, 4.9056, 0.7415, -0.5271, -0.1092, 6.9036, 12.3792, 7.7901, 2.0866, -9.1117, -12.3605, -5.7793, -23.1437, -29.0076, -29.8384, + 25.899, 23.1895, 19.6721, 15.4616, 9.3167, 5.4831, 6.1546, 7.4477, 4.2279, -1.3757, -8.0309, -11.4646, -10.4795, -7.5543, -4.2227, -6.0439, -16.4547, -16.3865, -13.0397, -21.7998, + 5.9702, 6.6918, 8.5551, 14.7594, 15.5278, 10.2403, 6.0423, 1.7099, -0.1415, 0.4245, 5.8906, 10.2752, 2.9571, 1.0304, -7.5844, -15.493, -16.0321, -8.3602, -12.0263, -30.437, + 0.2377, 1.249, 0.9118, 1.8024, 3.7548, 4.8963, 5.1515, 4.2684, 0.3786, 0.5058, 0.4839, -0.9914, 1.4073, 1.1727, -2.9065, -4.4307, -6.9456, -0.2385, 0.3969, -11.1044, + 4.9017, 3.2442, -1.2482, -1.2472, -2.0773, -5.4371, 0.3708, 4.1825, 12.1289, 1.295, -2.3136, -3.1723, -0.4429, -1.6571, -9.7455, 6.5626, 13.4075, 7.0987, -2.0865, -23.7642, + 26.5958, 8.4474, 11.9082, 11.6976, 1.401, -0.25, 3.9848, 3.6429, -6.0468, 2.5341, -5.2699, -11.5085, 3.8103, -6.3108, -2.4679, 2.153, -6.3876, -7.178, -8.406, -22.3496, + 2.2962, 0.8041, 0.8352, 6.615, 14.5461, 15.0856, 3.2964, 0.5549, -1.6557, -2.0236, 2.8955, 7.5016, -1.2031, -5.6899, -4.7833, 1.2942, -7.3403, -8.3771, -4.0417, -20.61, + -3.152, -0.4969, 6.6485, 7.8768, 5.5605, 6.5283, 5.6337, 4.1543, 13.9779, 2.7762, 6.1398, -3.707, -1.7982, -2.8944, -6.0041, -6.5265, -11.4873, -1.5122, 6.058, -27.7754, + -8.002, -4.6131, -0.7821, 3.316, 4.4465, 4.7754, 2.8155, 1.0612, 4.806, 6.0492, 5.939, 3.1446, 2.8568, -0.6657, -2.6961, -2.15, -0.9756, -0.2816, -1.9847, -17.0594, + 12.4378, 17.8157, 22.2857, 21.4926, 15.3987, 11.6565, 8.461, -5.9608, -14.7466, -15.8101, -21.885, -17.3295, -13.0545, -3.3503, 5.7314, 1.5346, 1.1396, -7.594, -1.8366, -16.3862, + 0.8964, 0.1937, 0.1104, 1.6479, 5.6517, 12.189, 10.2771, 4.4234, 1.0502, -0.5311, 1.2594, 6.8796, 5.2931, -3.9156, -6.05, -0.9098, -4.2858, -6.9837, -7.0958, -20.1002, + 19.8439, 13.428, 9.6622, 10.665, 8.095, 5.5066, 1.7572, -1.0429, -0.8012, -2.8142, -0.4934, 1.3117, 0.5243, -6.173, -8.129, -6.3324, -1.5063, -10.0417, -9.139, -24.3207, + -2.7279, -1.7097, -1.1534, 1.6639, 5.7537, 6.7942, 10.6044, 12.5105, 10.6069, 10.0936, 6.6639, 5.768, -0.0784, -3.9348, -2.0808, -2.5423, -7.773, -12.2311, -11.4054, -24.8224, + 10.1275, 12.1619, 16.2723, 20.8127, 20.974, 14.8019, 10.1842, 6.5306, 4.4543, 7.4531, 12.2713, 6.962, 6.8204, -5.0668, -18.1362, -24.0479, -25.9037, -25.4208, -24.389, -26.8618, + -9.9466, -6.5695, -9.8093, -1.7391, 0.058, 3.2073, 7.0375, 2.3619, -1.1764, -5.8692, 0.305, -4.2033, 11.2777, -0.3904, 7.8268, 9.8649, 4.7504, 6.9825, 7.6743, -21.6424, + 14.0137, 16.9699, 19.0697, 15.0058, 7.0268, 5.9083, 2.9474, 2.1595, 3.8159, 7.2602, 11.3975, 7.5965, 1.66, -6.7074, -13.8401, -15.7435, -16.6488, -16.4066, -16.4466, -29.0384, + 6.2399, 3.2858, -0.2213, -1.4923, 1.3132, 3.933, 3.5221, 2.8631, 1.3615, -0.079, -1.0125, -1.0737, -0.3033, -0.848, -0.4749, -1.1495, 0.1031, -0.209, -1.3002, -14.458, + 14.6593, 20.5101, 23.6344, 20.8409, 12.562, 6.6891, 3.7103, -0.8534, -3.6042, -5.9363, -7.011, -3.7764, 1.6775, -5.6072, -12.2281, -10.8044, -4.3275, -11.1148, -14.7836, -24.2367, + 17.5445, 22.4817, 15.1353, 12.588, 5.1049, 1.9643, 5.3928, -3.5987, -0.475, 11.7373, 12.9388, -3.8264, -3.5752, -8.3127, 9.4226, -10.0441, -20.2747, -19.0638, -21.801, -23.3385, + 11.5639, 14.1176, 19.178, 24.7909, 18.2344, 11.0457, 8.2594, 6.6617, 7.5852, 14.184, 12.1883, 7.8148, -0.4947, -16.4472, -21.5615, -22.7378, -21.8493, -21.9703, -24.981, -25.582, + 7.3833, 6.5793, 5.7205, 10.2722, 16.6567, 15.1599, 9.5922, 5.5668, 5.0234, 9.3817, 5.3741, -5.1082, -9.8091, -12.3432, -12.5495, -6.2366, -5.9929, -8.3697, -6.8581, -29.4426, + 0.3726, -5.6285, -3.2253, 2.1557, 3.8332, 12.1538, 14.6059, 12.3634, 15.7294, 17.0679, 4.8054, -1.6834, -7.5585, -11.9417, -12.8749, -9.7037, -1.2933, -5.8852, -6.0304, -17.2623, + 12.4589, 17.5375, 23.1698, 18.7129, 9.0574, 6.8369, 3.3366, -0.7668, -3.5028, -5.8079, -2.0422, 3.5413, -5.492, -15.4559, -14.9601, -7.186, -2.1139, -10.3945, -4.5301, -22.3991, + 7.7831, 5.9803, 3.3957, 1.1363, 0.6624, -0.3876, -1.227, 0.535, 0.3563, 5.2276, 9.1991, 8.9238, 2.632, -1.9335, -4.212, -2.5342, -1.0999, -4.9168, -4.9485, -24.572, + 12.7865, 11.7808, 12.0132, 12.7418, 11.7725, 11.2618, 10.9064, 7.0094, 3.3808, -2.3233, -4.5714, -6.7413, -8.0255, -8.7048, -10.995, -7.0616, -9.371, -7.6597, -4.91, -23.2897, + 7.4583, 10.3954, 16.3813, 20.381, 16.5656, 9.1371, 4.5296, 4.0559, 6.8658, 9.8043, 0.1187, -6.6202, -8.4161, -2.4957, -9.4787, -16.3418, -17.6122, -13.1639, -7.5007, -24.0638, + 10.5778, 12.5102, 15.45, 16.251, 14.1076, 12.4513, 11.9259, 10.4537, 6.3771, 1.6824, -3.8825, -5.5239, -8.8633, -8.0708, -4.646, -3.2386, -13.9943, -17.4761, -15.8823, -30.2093, + 16.545, 21.4563, 20.013, 10.542, 0.7521, -0.1817, -5.7313, -0.269, -4.1817, -0.5968, 6.2079, 4.1626, -0.4622, 5.1095, -10.2058, -16.0783, -19.9597, -11.663, 4.3789, -19.838, + 0.6538, 1.9228, 2.293, 5.2351, 12.5744, 11.0394, 7.485, 0.8228, -3.4564, -5.0324, -2.9456, 4.4755, 9.605, 1.6136, 0.0025, -0.9954, -6.7769, -7.886, -2.933, -27.6973, + 14.1315, 17.7109, 22.9482, 25.5022, 19.8506, 12.4355, 10.8121, 14.0608, 12.2635, -2.6541, -11.3457, -15.5204, -18.073, -18.739, -15.772, -7.2576, -9.9721, -9.7355, -17.106, -23.54, + -5.7314, -4.059, 1.0581, 0.9805, 1.3616, 2.7093, 6.3692, 11.6381, 12.018, 9.1818, 6.8001, 1.9409, 3.0785, -2.5335, -5.799, -0.6774, 0.8325, -4.7436, -7.1073, -27.3175, + -1.064, 0.7851, 2.716, 6.1021, 12.1198, 15.4431, 10.3026, 4.0089, 1.9648, -0.0384, 2.4993, 9.2599, 1.9572, -4.2838, -3.1953, -1.1928, -7.8283, -8.5999, -10.0789, -30.8773, + -5.6296, -4.3307, -2.3209, -0.8933, 0.2894, -1.9304, -2.0575, -2.778, -6.2185, -5.9192, -6.6197, -5.5076, 1.7, -2.2417, 6.734, 9.7221, 5.4135, 15.423, 16.2356, -9.0706, + 21.8983, 23.2393, 21.5176, 17.3026, 15.6381, 10.7095, -4.6739, -9.4131, -7.3736, -9.636, -10.3893, -7.6173, -3.694, 2.4229, 12.3234, -14.8401, -14.2133, -12.879, -4.4302, -25.8921, + 11.8056, 15.656, 20.2939, 16.8416, 9.1858, 2.5617, 2.6711, -1.0207, -1.45, -0.2437, 6.6714, 6.5193, -0.4136, -1.1308, -3.7531, -13.8441, -14.3531, -10.4897, -18.0817, -27.4259, + 55.7273, 39.936, 26.2526, 15.0127, 6.4718, 0.7391, -2.3157, -3.1939, -2.9475, -3.3569, -5.3235, -7.9446, -10.6626, -13.1662, -14.21, -14.4691, -14.4121, -13.8376, -15.6433, -22.6564, + 3.7665, 2.9173, 4.2496, 1.847, 7.9023, 14.8241, 11.0448, 3.454, 2.7173, -3.8368, 2.5626, 4.5604, 2.9217, -9.5401, -8.3622, -8.8234, -1.4224, -0.0449, -2.7094, -28.0285, + -9.3983, -8.0419, -4.4832, 1.9754, -0.3749, 4.6985, 6.4445, 3.4462, 1.2139, 4.153, -6.0488, 0.4383, 7.0647, 3.8491, 2.7818, -2.689, 2.0052, 6.3893, 4.3086, -17.7324, + 10.6303, 13.7716, 17.1718, 20.1678, 12.2486, 3.36, 2.4058, -2.5934, -4.8765, -6.0115, -4.6562, -0.7932, 8.0003, -2.284, -3.8243, 0.1863, -9.1648, -14.9839, -14.094, -24.6607, + 16.6586, 21.6444, 20.8223, 12.8954, 8.1955, 4.1214, 1.5648, -2.8573, -5.5724, -6.5555, -5.8004, -2.3591, 4.833, -0.2831, 0.7092, -9.8961, -15.4807, -12.0228, -6.1807, -24.4365, + 6.2715, 7.1856, 9.0377, 12.3924, 19.0793, 22.2584, 18.7678, 12.6682, 9.6569, 13.2645, 2.9549, -2.9501, -4.4734, -4.244, -12.7065, -19.5653, -21.3156, -21.7041, -19.8037, -26.7746, + 6.6118, 7.9766, 9.5899, 16.7112, 22.8331, 15.9736, 8.1328, 4.9522, 3.0471, 7.2666, 11.8402, -1.4154, -4.2808, -5.2523, -8.9476, -17.0691, -18.3281, -12.6216, -21.0003, -26.0198, + 17.3127, 17.4868, 17.7344, 12.4834, 5.8856, 4.6009, 1.073, -2.7678, -2.0723, -0.4628, -3.7999, -5.837, -8.6148, -7.6108, -6.5104, -2.5688, -1.6184, -6.1466, -7.5013, -21.0659, + 3.4054, 5.0769, 7.0766, 9.8006, 20.025, 22.5645, 11.5478, 6.2329, 4.4723, 6.4844, 10.6573, 0.2331, -6.2477, -11.087, -10.3507, -4.2484, -15.1989, -19.0756, -16.4193, -24.9492, + 4.7627, -2.1833, -2.2828, -3.7716, 2.8453, 7.51, 11.3439, 6.188, 0.3611, -1.2837, -10.299, -7.9318, -4.0985, 1.3582, 6.4088, 6.3304, 9.4372, -0.3781, -7.0962, -17.2205, + 0.0639, 1.7461, 3.2578, 7.1373, 14.2936, 21.0383, 16.8137, 10.1108, 14.304, 14.1399, 0.3676, -6.3231, -10.5295, -12.7919, -9.1838, -2.4821, -12.1068, -13.6518, -9.174, -27.0298, + 6.2012, 6.2177, 8.6617, 15.7008, 20.0807, 16.3263, 9.7644, 7.667, 11.6809, 8.6315, -2.6559, -7.4948, -10.0457, -10.1131, -6.9875, -12.9972, -15.776, -10.0148, -6.4425, -28.4048, + 8.4071, 5.8192, 3.5662, 1.9627, 2.4472, 1.8597, -0.737, 2.3814, 0.1779, 1.4958, 2.9385, -6.0143, -2.3152, 0.3049, -1.7145, 0.7158, -1.3399, -5.1439, 2.0438, -16.8555, + 7.4409, 3.3788, 6.5115, 14.5248, 13.0646, 4.0268, -1.1894, -5.0999, -7.691, -8.4282, -7.9356, -3.3516, 6.9774, 0.9806, -1.3988, 5.5785, -3.1694, -5.2282, 1.6484, -20.6401, + 11.6728, 5.2904, 7.2713, 8.1521, 8.6202, 4.839, 1.9077, -2.7604, -4.5028, -8.9428, -12.4662, -11.0383, -4.7642, 4.2903, 3.3702, 1.0547, 5.8752, 0.7203, -0.1952, -18.3942, + 1.7662, 2.1132, 0.6823, 0.5069, -0.7694, -0.573, -0.6749, 0.4539, -2.385, -0.8937, 3.2905, 1.9366, 4.8907, 8.891, 3.4773, 1.6832, -0.385, -1.0325, -5.4486, -17.5299, + 11.1327, 8.1369, 5.9398, 7.2387, 9.0755, 13.7563, 15.6715, 10.9671, 4.3603, 6.5521, 8.2784, 8.2998, -3.5109, -8.8874, -13.5723, -11.9565, -11.2912, -14.9059, -15.3573, -29.9274, + 17.2359, 18.8517, 18.1626, 16.5245, 13.3466, 10.8703, 8.4673, 4.7337, 2.635, 0.0183, 1.1954, 4.7388, -2.9359, -6.0731, -7.4347, -16.3769, -19.935, -20.0072, -15.2078, -28.8095, + 15.9881, 16.1253, 11.9372, 8.7157, 5.3883, 4.3873, 5.5095, 5.6589, 0.5361, -1.1208, -4.817, -4.8077, -4.2337, -3.8897, -5.7866, -5.1486, -6.6937, -4.6271, -8.1104, -25.0113, + 10.5287, 10.4645, 11.0189, 12.4921, 10.2092, 2.1803, 0.6775, -1.9607, -7.8737, -8.5232, -10.8456, -10.0601, -9.5234, -5.7091, 4.1283, 1.9979, 4.9082, 2.3842, -1.6831, -14.8109, + 6.8712, 7.1195, 7.8478, 9.0102, 7.5469, 4.9121, 6.0618, 3.0705, 0.6628, 1.7728, 2.714, 6.3541, 3.1029, -4.2377, -6.3687, -2.2545, -6.3865, -11.4164, -9.6711, -26.7119, + 16.6601, 22.046, 20.3084, 13.4923, 8.0021, 8.7024, 10.126, 10.4026, 4.1888, -3.7328, -6.171, -10.8693, -16.0494, -7.8483, 0.2833, 3.3381, -13.0116, -16.9474, -14.2501, -28.6704, + -1.6472, -1.5329, -0.7265, -0.859, 1.55, 3.3445, 6.06, 5.7678, 2.9402, 4.2316, 1.8384, -2.4116, 1.7488, -1.1846, 0.2843, -0.4495, 1.5215, -2.2191, -1.2847, -16.9723, + 5.4499, 9.2168, 13.6525, 18.6245, 21.2266, 16.3225, 10.2029, 13.7648, 16.3433, 7.8345, -0.8506, -3.0654, 0.8282, -4.7895, -14.3191, -13.6263, -16.5382, -25.7242, -26.3799, -28.1733, + 5.4928, 7.273, 11.4735, 16.9546, 13.9651, 4.9178, 1.4991, -1.5005, -3.3689, -4.2367, 1.4622, 8.4912, 0.6337, -0.2593, 0.3732, -7.8143, -10.1871, -7.5615, -7.0778, -30.5301, + 6.6781, 5.8903, 6.7632, 9.181, 8.8397, 9.7239, 8.7155, 7.797, 6.3227, 3.4228, 0.2514, 0.111, -1.6716, -5.4364, -5.9387, -8.2352, -7.5149, -7.0855, -8.8552, -28.9591, + 11.8209, 17.497, 19.5821, 14.6674, 8.781, 10.5929, 17.1599, 11.1304, -1.5934, -2.4291, -7.104, -7.2023, -9.3009, -11.7782, -8.5498, -11.3872, -9.756, -0.1211, -12.0128, -29.997, + 10.1575, 12.1948, 14.9933, 16.4447, 14.1842, 8.2787, 4.1829, 1.5996, -0.4007, 2.6686, 4.592, 3.807, -0.5362, -2.8498, -6.0317, -8.0974, -11.2561, -15.969, -16.7096, -31.2528, + 17.3728, 16.5602, 12.158, 2.2953, -0.7338, -2.2088, -3.006, -3.495, -5.7703, -1.8968, -4.1417, -2.255, -0.4691, -0.6536, -2.4783, -1.3584, 1.113, -1.5486, -2.18, -17.3041, + 10.9509, 14.6912, 20.9171, 20.7445, 13.3882, 9.0276, 8.481, 10.448, 11.1634, -1.3107, -8.8976, -12.455, -14.1419, -12.2168, -8.1653, -9.184, -14.6536, -10.7798, -3.349, -24.6582, + -4.2511, -4.318, -6.4235, -4.0719, -2.3887, -3.1485, -4.2032, -3.5194, -7.501, -5.4107, -2.3368, 0.6165, -2.548, -6.5746, 5.71, 1.8165, 14.8553, 24.383, 15.8024, -6.4884, + 6.8815, 10.8626, 15.3667, 14.4704, 2.5878, 0.6962, -3.7687, -7.2033, -9.3334, -10.5308, -9.619, -8.2135, -3.3921, 8.1225, 8.7748, 9.4979, -0.1825, -3.9609, 2.5378, -23.5939, + 10.7457, 13.4613, 16.3838, 18.1633, 11.9764, 6.2322, 2.2046, -1.6815, -5.4025, -5.3261, -1.9194, 5.785, 7.0183, 8.8506, -7.0398, -15.809, -17.0181, -9.4482, -9.5562, -27.6203, + 4.4895, 6.7459, 11.3127, 18.7251, 18.1351, 6.5502, 1.1677, -1.0341, -3.9953, -2.3382, 3.5745, 11.8555, 2.9192, 6.0596, -4.8984, -13.0118, -16.247, -15.0252, -10.6982, -24.2871, + 10.1449, 10.3471, 14.749, 16.1718, 16.9528, 11.3815, 6.8749, 1.4265, -2.7864, -6.1956, -8.0139, -7.8556, -2.8591, 4.0596, 5.4548, 3.3633, -10.2166, -16.2406, -18.8135, -27.945, + 9.5266, 9.8619, 11.6564, 16.1435, 22.5856, 19.0228, 9.5649, 5.1013, 3.9082, 6.9523, 9.4453, -4.8784, -10.6008, -16.0258, -16.6123, -14.774, -6.6639, -13.8342, -16.3927, -23.9867, + -2.8166, -0.2578, 2.8925, 4.4555, 5.6756, 4.6914, 3.4417, 3.4041, 1.889, 1.8575, -0.5242, 1.9867, 0.9536, -0.9744, -1.401, -2.1961, -1.2827, -2.3186, -2.1481, -17.3281, + 6.5757, 10.4876, 15.8653, 20.5177, 18.3749, 8.4114, 4.7411, 0.5009, -2.9659, -4.1461, -4.5681, -0.6566, 5.8038, -2.3737, -8.5532, -6.5787, -2.8561, -13.7548, -17.8769, -26.9485, + 7.1295, 8.3469, 8.9916, 14.7649, 20.5, 15.5149, 7.3359, 0.6792, -1.5195, -5.0373, 0.9468, 7.0372, -4.0339, -9.7787, -8.9444, -0.8558, -12.0386, -13.0157, -7.1764, -28.8465, + -6.3643, -3.56, -0.9853, 1.3808, 3.5164, 4.4752, 4.2783, 4.1699, 0.4058, -0.8097, -0.9913, 3.1386, 9.3653, -1.1057, -1.2662, 0.7587, 1.7985, -2.7481, 1.1071, -16.5641, + 10.8441, 6.1056, 4.5464, 11.5523, 11.5304, 4.8593, 1.2036, 0.6177, -6.5224, -11.5032, -13.3278, -7.1852, -1.6717, 9.2735, 6.7578, -0.905, -7.2789, -6.0827, 3.0089, -15.8228, + 2.43, 2.4475, 8.1825, 8.1925, 2.2974, 10.8311, 15.569, 1.4027, 0.329, -0.4366, 6.3648, 1.0487, -0.9166, -8.1367, -8.1915, -9.569, -3.4184, 0.0616, -4.9205, -23.5675, + 18.5545, 22.239, 21.2685, 17.01, 9.6982, 4.732, 4.3296, 7.5541, 8.1889, 7.8498, 0.4258, -3.7349, -6.3446, -8.3581, -11.0931, -16.2715, -16.4055, -15.8123, -17.441, -26.3892, + 5.3049, 3.9686, 5.5462, 12.1792, 19.9309, 17.032, 8.3644, 7.8784, 10.6383, 15.3943, 3.6647, -0.1421, 3.0499, -3.2605, -15.9284, -20.0685, -19.5084, -15.1548, -11.4151, -27.474, + -4.1173, -2.8993, -1.1226, 2.7523, 4.1168, 4.2377, 1.6192, 1.4859, 2.7141, 0.481, 0.9555, -0.9423, 1.2205, 0.597, 0.3948, 0.467, 2.1347, 1.5199, 1.6806, -17.2954, + 15.7137, 20.9924, 24.3419, 24.5468, 20.7453, 18.1011, 19.1224, 15.9122, 12.9399, 8.1629, -8.2323, -12.3399, -17.0242, -22.3729, -23.1787, -23.2286, -17.6989, -10.8077, -20.3082, -25.3873, + -1.2634, 1.8562, 5.1481, 8.605, 8.7868, 9.5351, 6.6634, 3.816, -0.1296, -4.656, -0.5036, -0.2003, 1.6621, -1.6607, -2.8913, -4.8208, 0.3233, -5.1066, -6.1044, -19.0592, + 10.6986, 11.8307, 11.5659, 12.449, 11.188, 6.9008, 2.6629, 3.0301, 3.4569, 5.3227, 2.5092, -1.0853, -3.8118, -7.084, -4.9747, -7.3629, -11.0099, -5.9887, -11.0008, -29.2965, + 13.6712, 17.1821, 19.2431, 13.3261, 5.9589, 0.4984, 0.367, -2.3834, -3.2315, -2.1198, 4.8356, 0.4745, -8.1763, -11.1278, -9.8688, -0.1733, -8.1227, -9.3563, -5.3546, -15.6426, + -5.7735, -2.5076, -1.5044, -1.1663, 0.0004, 2.3285, 2.2748, 3.5509, 0.5101, -3.3403, 0.8431, 1.7502, 3.2945, -0.4888, 1.3903, 4.0779, 1.6571, 2.3564, 6.2297, -15.4829, + 9.1796, 11.0931, 14.7746, 19.7918, 17.0503, 10.0451, 7.8355, 5.3063, 5.9805, 11.7545, 10.2992, 6.2216, 2.6489, -6.8542, -15.2068, -16.6927, -14.099, -23.4163, -26.3767, -29.3354, + 4.4691, 6.369, 7.7808, 12.847, 20.5705, 17.7665, 9.4381, 6.2778, 2.4431, 5.0549, 9.9596, 3.2883, -2.2059, 2.04, -4.0438, -15.0151, -19.7303, -18.2469, -20.2388, -28.8235, + 25.3208, 24.3974, 22.6154, 19.5733, 14.8131, 10.5701, 9.4361, 4.3748, -1.5593, -4.3511, -14.7283, -17.6258, -0.952, -8.5196, -7.3624, -3.251, -9.9332, -17.3271, -21.4343, -24.057, + 22.3042, 16.1278, 12.0077, 14.7975, 10.7206, 8.3648, 8.061, 10.1267, 7.5498, 1.8723, -3.9201, -8.2481, -10.1623, -11.376, -12.7367, -5.005, -3.3744, -11.9178, -17.47, -27.722, + 4.0018, 3.5852, 3.3315, 5.3461, 4.3656, 2.8461, -0.0206, -2.5696, 0.1895, 5.1002, 3.3534, 0.2158, 1.3297, -0.9671, -0.5937, -1.9855, -1.7054, -1.7064, -4.2453, -19.8713, + -0.182, 0.3377, 2.3741, 5.1705, 4.8793, 2.2995, 4.3309, 2.2662, 0.4173, -0.8843, 6.0098, 9.0178, 2.964, -0.8977, -1.5385, -6.1656, -4.1289, -4.7989, -1.1105, -20.3607, + 7.6526, 7.4466, 4.8852, 0.6442, 1.5298, 0.3141, 2.6136, 0.1768, 0.3184, 1.5717, 0.2364, -0.4716, -4.0283, -1.7854, 1.1771, -1.1242, 0.5833, -0.2901, -4.6526, -16.7979, + 19.3739, 25.1966, 25.2676, 19.4367, 10.1976, 2.4144, -1.1928, -4.0638, -8.7478, -10.523, -11.0799, -12.5634, -10.0392, -5.3666, 3.7592, 3.344, 0.1212, -8.8586, -13.7562, -22.9202, + 9.6043, 10.541, 12.3377, 19.7574, 26.3167, 19.8022, 16.1636, 16.4176, 17.5852, 2.8061, -5.6826, -11.1198, -15.0897, -15.5002, -11.1047, -14.2676, -20.4525, -20.5783, -15.3843, -22.1521, + 12.9015, 20.6704, 27.9257, 24.9274, 19.2594, 24.215, 19.1475, 0.5334, -3.3152, -12.4822, -15.0498, -16.9033, -19.2802, -17.1972, -9.8015, -9.8416, -13.7988, -8.2071, -2.2124, -21.4912, + 14.4389, 13.4012, 16.1103, 14.9288, 9.7959, 11.0171, 12.0893, -1.4171, -9.8704, -8.5713, -15.4225, -18.6377, -16.5003, -13.9403, 1.0172, 8.7826, 2.1557, -0.7217, -0.1613, -18.4945, + 3.2298, 2.2245, 4.4788, 6.2407, 6.6193, 4.0854, 3.5648, 2.2977, 2.4361, 0.5689, -4.6553, -1.2701, -2.8888, -2.1474, -1.0212, -1.5878, -0.7381, 0.5436, -4.6923, -17.2887, + 12.1886, 11.0008, 17.9358, 24.301, 22.2969, 15.0778, 12.8771, 17.0838, 11.2261, -0.0847, -7.9648, -13.0993, -17.1559, -19.7583, -18.6302, -14.9903, -5.4184, -14.9564, -12.137, -19.7926, + 18.1628, 19.7982, 21.7942, 23.1496, 22.2974, 18.3029, 13.8973, 12.5987, 14.0955, 8.3018, -1.2018, -2.7097, -5.1243, -15.5625, -20.9814, -25.9011, -25.5502, -25.1062, -24.3739, -25.8874, + 5.12, 2.6682, 2.7787, 5.122, 7.7683, 7.6609, 0.3239, -0.5597, -2.1976, -4.2025, -2.3433, 5.4581, 3.3195, -4.6819, -7.7339, -5.9433, 6.7709, -3.0093, -0.4617, -15.857, + 3.1474, 3.9068, 4.6743, 6.198, 3.9172, 5.5703, 3.756, 5.3815, 6.4792, 7.4263, 4.0188, -0.9053, -2.9276, -4.264, -3.8751, -2.5664, -3.8921, -5.7279, -7.3914, -22.9261, + 7.7606, 7.9634, 9.259, 13.4058, 20.913, 19.2571, 11.4285, 9.1142, 10.4227, 12.6605, 1.394, -7.8667, -12.9049, -16.1586, -15.3321, -7.7158, -10.1835, -11.8246, -14.2319, -27.3607, + 9.9378, 9.7046, 10.1765, 13.167, 9.5151, 2.2155, -0.0456, 0.0357, -0.3521, -1.264, 0.0667, 3.9496, -0.7853, 0.9935, 1.7327, -2.1738, -2.4763, -8.9075, -14.5354, -30.9548, + 9.4566, 14.4761, 17.5184, 16.5421, 10.8319, 4.8634, 3.7958, 1.0301, -0.7413, -4.7772, 0.1278, 10.6261, 1.7256, -4.7562, -1.8151, -1.2979, -10.9708, -19.1139, -21.0656, -26.4558, + 4.1609, 4.3674, 5.163, 10.4393, 19.9966, 22.0365, 15.0772, 16.7404, 13.2009, 0.0579, -7.2967, -13.1855, -16.4671, -16.2778, -13.5417, -3.6468, -7.6575, -10.0591, -0.8708, -22.2374, + 9.2619, 9.285, 10.6963, 10.0411, 5.3819, 1.803, 1.0922, -0.366, -0.8976, -3.181, -0.6819, -3.8642, -8.4569, -8.9974, -5.5095, -1.9498, -5.7587, -2.8793, 9.9987, -15.0177, + 16.0944, 15.0736, 17.429, 17.1266, 16.3425, 13.9152, -0.3124, -3.4633, -3.3349, -5.5676, 1.022, 7.3152, 5.0978, 0.8308, -5.9027, -14.3898, -14.2461, -12.232, -23.5828, -27.2154, + 2.0137, 5.7764, 10.2219, 14.9245, 16.5703, 10.5235, 3.0729, -1.4882, -7.205, -6.2506, -5.1311, 1.5065, 6.9953, -1.443, 1.824, -1.5831, -9.7701, -7.7954, -0.2269, -32.5358, + 0.8118, 3.1428, 4.1975, 8.8492, 17.1316, 16.9999, 8.6244, -0.0326, -4.953, -5.2292, -0.1353, 6.3691, -2.1837, -2.6835, 3.8299, -6.3313, -4.714, -0.206, -11.6261, -31.8615, + 16.0656, 15.8566, 16.266, 14.0919, 7.2745, 1.1478, 0.5592, -3.1884, -2.7528, -3.9872, -1.52, -5.6031, -7.1936, -11.6082, -9.9024, -5.9648, -1.2652, -4.4434, -0.5317, -13.3008, + 6.0546, 7.8172, 12.5175, 18.974, 18.6314, 12.5099, 8.6741, 7.3229, 9.6232, 16.1584, 9.3568, 6.3688, 5.3827, -10.1648, -19.1392, -25.0842, -25.6307, -21.0082, -12.2957, -26.0685, + 8.7645, 5.7385, 7.3877, 9.4659, 8.7034, 6.7927, 2.2815, 1.642, 0.5587, -0.7987, 1.2054, 8.0228, 11.5479, 4.5805, -6.4932, -9.4841, -11.6576, -7.6077, -9.5897, -31.0604, + 13.5337, 13.1762, 15.6646, 19.9549, 24.347, 21.3479, 19.5471, 19.3675, 13.3653, -0.5856, -8.6584, -13.2572, -16.9863, -17.9847, -20.7708, -15.4798, -11.0509, -15.4702, -16.1382, -23.9221, + 9.4656, 10.0639, 11.4433, 14.668, 18.7771, 15.2024, 9.3195, 5.137, 1.9578, 0.3561, 3.767, 8.6933, 1.32, -4.9956, -10.6736, -14.332, -17.7829, -18.0592, -14.314, -30.0137, + 1.5799, 4.3053, 2.3818, 2.891, -1.2059, -0.83, -0.1903, -0.1292, 1.0233, 3.9206, 3.9828, 2.2978, 3.232, -2.5703, -2.6923, -1.3776, 2.9213, 0.1727, -0.511, -19.2019, + 6.8519, 4.8647, 1.9844, 2.2401, 3.7555, 1.5005, -1.3694, 0.5704, 2.1485, 0.76, 0.6917, -1.0898, 1.8295, -1.7615, 0.1607, -2.4085, 0.4928, -1.2003, -0.2145, -19.8066, + 26.8652, 27.9313, 22.2964, 13.2728, 4.9234, 4.975, 10.5105, 12.7213, 4.9587, -6.5278, -2.0124, -3.4059, -5.9594, -7.3378, -10.2568, -18.1183, -18.7465, -15.1523, -18.6899, -22.2476, + 11.7015, 12.5524, 16.8036, 20.5917, 17.3325, 11.6535, 7.9132, 3.4464, 6.4909, 8.4604, 0.112, -8.677, -13.3036, -17.0534, -16.5775, -11.3553, -3.454, -9.9071, -10.954, -25.776, + 20.0026, 21.9415, 20.1743, 15.7692, 9.6829, 6.6171, 12.1877, 15.1379, 6.9729, -2.6223, -11.926, -8.003, -5.4775, -7.9242, -14.3282, -6.4602, -11.9823, -18.5276, -14.5214, -26.7133, + 8.4727, 10.313, 16.1554, 22.5237, 20.4885, 15.1245, 10.9192, 10.3785, 14.0959, 8.6752, -2.6735, -8.1503, -8.9174, -2.4684, -9.1899, -21.2524, -22.7439, -18.1241, -17.6618, -25.965, + 16.4001, 11.079, 6.5408, 3.9922, 0.9638, 0.6155, 0.1321, -0.0033, -1.5205, -0.5347, 0.0838, -0.8675, -0.2837, -1.6297, -1.6342, -2.753, -2.7291, -3.0597, -3.9086, -20.8833, + 12.8347, 13.993, 15.6832, 15.4917, 10.9362, 11.4157, 15.6476, 4.371, -10.872, 4.3584, -2.6363, -7.3238, -10.3423, -4.3725, 0.4684, 7.2994, -11.0045, -18.8176, -14.2499, -32.8805, + 12.3323, 15.8058, 21.8399, 24.3008, 14.4087, 10.993, 7.8357, 8.0265, 12.8222, 14.2335, 5.8155, 6.0731, -6.0593, -17.6762, -22.1263, -23.2555, -24.2165, -21.7123, -15.9183, -23.5226, + 5.7344, 5.3389, 3.8374, 3.419, 2.8812, 1.7219, 0.1439, 1.858, -0.5349, 2.0653, -5.3722, 2.7017, 1.0724, -0.8636, -1.4371, 0.4192, -0.6553, -2.1126, -0.737, -19.4805, + 8.7871, 8.8914, 10.508, 13.7939, 18.1053, 18.3809, 13.6037, 9.9123, 6.2489, 7.8891, 6.4768, -2.8713, -8.9109, -11.1699, -11.8847, -5.8137, -11.8112, -19.3777, -21.5409, -29.2171, + 21.2487, 22.5877, 21.7624, 19.0832, 14.4498, 8.3623, 6.4664, 3.1545, -0.286, -1.9696, -3.9389, -1.8288, -3.7243, -9.6176, -13.7865, -15.0846, -11.3343, -12.9399, -16.9243, -25.6805, + 15.5067, 16.3749, 16.311, 12.8646, 5.4498, 2.4274, -1.0299, -3.27, -3.2357, -0.0252, 7.5399, -0.6948, -6.2588, -9.1664, -6.8883, 0.76, -11.6902, -9.982, -1.1495, -23.8436, + 15.5548, 17.3265, 20.2482, 21.9118, 17.7825, 12.4436, 8.5947, 8.3626, 10.7582, 6.8704, -2.615, -7.1451, -11.7102, -15.2112, -16.7335, -10.8661, -12.143, -16.7183, -19.7849, -26.926, + 9.7348, 18.6985, 22.2, 9.7733, 3.5414, -0.989, -5.4561, -5.4928, -8.476, -6.8757, -4.1569, 6.8951, 2.1633, -1.2892, 3.0483, -7.4717, -12.0842, -7.7317, 1.0735, -17.105, + 6.6628, 6.9628, 9.289, 7.3292, 2.0881, -0.1054, -1.5163, -4.7058, -4.4988, -5.4883, -6.5025, -2.6194, 5.9468, -1.1287, -0.4851, 5.3144, -1.644, -1.6601, 4.2795, -17.5182, + 11.7595, 13.0074, 13.6551, 14.3417, 13.9024, 11.589, 9.9365, 4.195, -1.2916, -2.3847, -1.5414, -3.1381, -5.4213, -4.9864, 0.0096, 0.2286, -7.594, -13.3606, -21.1287, -31.778, + 16.556, 21.1528, 18.2294, 14.8217, 11.7211, 5.8948, 0.1128, -5.7142, 0.4819, 3.4296, -7.6731, -15.2596, -14.091, -4.345, 4.2359, -1.261, -8.7829, -14.4366, -8.1323, -16.9402, + -9.6162, -5.892, -0.4336, -0.0688, 3.9825, 0.71, -1.9156, -3.0982, -4.8027, -4.2612, -2.6264, 1.0431, 5.5418, 11.1806, 9.5552, 5.0905, 3.5862, 4.3463, 5.867, -18.1885, + 9.2493, 12.521, 14.8487, 20.3042, 16.9267, 10.5281, 5.4085, -1.4152, -5.3054, -5.325, -4.1371, 2.4443, 0.8006, -8.09, -7.9314, -5.9206, -13.5877, -13.0043, -4.8031, -23.5116, + 5.9148, 6.0122, 7.7679, 11.9347, 14.3202, 11.188, 5.7941, 0.6362, -0.9006, -3.7616, -1.0465, 6.3361, 0.5894, -7.7629, -9.2778, -6.0898, -0.474, -7.4253, -3.178, -30.5771, + 9.047, 12.9059, 18.1346, 24.2631, 23.6353, 19.2579, 20.8877, 17.0355, 3.1774, -5.2773, -10.0473, -14.9178, -17.5773, -16.4551, -11.9394, -9.6664, -11.9143, -7.0063, -19.2353, -24.308, + 11.6229, 13.7686, 16.3077, 18.973, 21.2077, 21.177, 18.6717, 15.526, 14.4577, 10.9286, -2.0523, -9.7658, -14.147, -18.3895, -20.2191, -19.9491, -14.1791, -17.4745, -18.9708, -27.4939, + -1.2854, -2.7859, 2.0352, 3.8729, 2.5634, 1.1875, 2.9803, 3.4105, 0.6928, -0.5396, -6.4408, -2.1739, 4.1284, -0.7168, -3.4324, -5.3047, 2.106, 6.1169, 6.17, -12.5844, + 3.6719, 5.1933, 3.433, 2.0915, 1.709, 4.9193, 7.5225, 11.4575, 7.7921, 1.1072, -1.3846, 0.672, -0.8916, -0.5196, -2.8857, -5.7085, -3.7344, -4.4707, -6.4364, -23.5377, + 5.0076, 6.0603, 5.6858, 5.8716, 4.9796, 4.351, 3.2343, -0.0278, -1.6006, -3.6879, -3.6306, -0.3994, -2.7867, -5.8602, -4.3815, -4.1661, 1.9375, 0.0251, 1.7605, -12.3723, + 1.5611, 2.5677, 6.9184, 12.7642, 12.9002, 7.6294, 1.5737, -0.4407, -4.6258, -3.3019, -0.3274, 9.4821, 8.3473, 7.1185, 0.9099, -4.2945, -2.0947, -5.5952, -16.6889, -34.4035, + -10.077, -9.2074, -7.5499, -5.3349, -2.0639, 0.7289, 3.3239, 5.0911, 7.8838, 10.9963, 10.2149, 9.1756, 7.3923, 3.8453, -0.9308, -1.4293, -1.7749, -2.4954, -0.635, -17.1538, + 11.6964, 15.7897, 21.5631, 25.0743, 21.2867, 19.0704, 20.7015, 14.1826, 0.0839, -7.4606, -11.2687, -14.0743, -15.6804, -14.7951, -10.801, -12.5161, -17.6133, -13.8075, -7.4286, -24.0031, + -6.9283, -6.6188, -5.8684, -5.5056, -3.6164, -2.5751, -3.3395, -0.3521, -3.7955, -8.6077, -6.1256, -4.7755, -5.6371, 1.9017, 5.4236, 6.9088, 17.0056, 9.6477, 17.8081, 5.05, + 1.04, 4.3584, 5.7473, 5.9965, 7.1951, 11.1543, 16.3999, 17.9219, 13.7898, 8.5105, 6.6032, 8.3888, 3.1208, -8.4853, -12.1692, -10.3091, -9.406, -16.3383, -22.0676, -31.451, + 4.0785, 3.7601, 3.2477, 4.5535, 2.8617, 2.8959, 4.0341, 3.3572, -6.7255, 5.4042, 2.4187, 1.223, 0.1581, -3.0654, -1.9472, 0.8423, -1.1312, 1.2092, -3.2861, -23.8888, + 7.3239, 6.915, 9.3764, 18.0744, 16.9415, 9.605, 5.2932, 1.9763, 2.0297, 6.284, 11.8379, 10.9565, 8.5711, -5.0433, -15.8094, -21.0356, -22.5868, -18.9436, -8.4281, -23.3379, + -1.7885, -4.8321, -3.3241, 0.9574, -0.7694, -4.0018, -4.5674, -4.526, -2.6221, 4.0186, 7.6808, 10.9687, 1.1618, 6.5552, 7.2914, 5.9801, 0.8194, -0.4241, 1.0077, -19.5855, + 2.5382, 2.7665, 6.6332, 9.6977, 12.0223, 5.6888, 5.2502, -0.0648, 0.179, 1.7261, 3.6718, 4.6019, -4.2546, -5.2838, -8.6175, -3.503, -2.89, -5.1451, -3.1562, -21.8607, + -1.7959, -1.641, -1.3048, -1.9856, -1.1093, -0.5878, -1.7759, -0.7425, -2.7139, -3.3222, -3.9402, -1.9787, -4.1788, -1.9573, -0.0518, 0.6181, 5.7386, 8.4544, 14.2974, -0.0227, + 1.9227, 3.4879, 4.9261, 5.1627, 4.2257, 4.6417, 3.0455, -0.455, -1.933, -4.6665, -6.5225, -3.7829, -5.2713, -1.4162, 3.7054, 5.6573, 7.046, 2.7847, -1.9201, -20.6381, + 5.4951, 4.1184, 5.0794, 4.1307, 2.3794, 0.0327, -0.8237, -1.5895, -3.7505, -6.6385, -6.0766, -2.2466, -0.408, -4.9327, -5.84, -1.6035, 0.3752, 6.5602, 12.3259, -6.5875, + 6.8048, 2.6542, 8.2117, 4.3594, 9.5824, 4.9978, 9.2805, 5.4616, 0.1801, 2.8218, 4.8979, 8.0336, 1.3602, -0.8584, 3.0641, -6.3167, -11.4947, -13.9096, -9.3665, -29.7643, + 20.4394, 23.8508, 19.9523, 13.4804, 4.7063, -0.881, 2.3157, 4.3508, 4.6054, 2.6117, -2.816, -5.7052, -5.0189, -10.4846, -14.5942, -12.8055, -6.1098, -12.0585, -7.7055, -18.1337, + 9.9351, 14.3502, 19.553, 16.3727, 7.0796, 2.9949, -1.1604, -3.2246, -3.9592, -2.8637, 3.6007, 8.3194, 1.5624, 4.008, -6.2282, -13.296, -15.2078, -10.4525, -5.9946, -25.3891, + 5.5354, 4.2644, 3.4234, 3.565, 3.9406, 1.8276, 0.2709, 0.3493, -0.002, -0.7304, 1.8692, 2.1692, -1.3779, -0.9234, -5.0911, 0.1335, -1.1518, -0.8308, -1.2357, -16.0052, + 14.718, 8.4248, 6.7389, 6.9731, 8.7963, 12.7964, 14.6589, 10.3137, 3.2909, -3.7235, -5.8542, -6.9864, -6.8348, -4.2701, -4.4326, -5.4747, 0.7281, -9.3904, -11.2298, -29.2424, + 9.1842, 9.7851, 10.8472, 12.9244, 10.6955, 6.8423, 4.6037, 0.765, -2.0301, -2.7855, 1.3686, 5.5053, -1.4464, -8.6948, -6.8949, -4.4565, -9.3587, -11.9106, -7.0277, -17.9162, + 9.5187, 11.0469, 10.8992, 10.5477, 12.4336, 17.931, 22.0092, 22.1029, 21.2249, 17.7472, 4.1368, -3.9142, -11.6583, -18.8125, -22.4708, -24.5855, -14.9292, -12.6855, -22.7109, -27.8313, + 12.0341, 16.6419, 15.8489, 10.0396, 3.3655, -1.8695, -5.2143, -9.4106, -10.9745, -12.0991, -12.045, -11.1231, -7.2635, 0.0306, 12.4231, 12.6061, 4.1888, -1.9085, 0.6831, -15.9537, + -1.3674, -0.5228, -4.0775, -3.81, -1.0761, 13.75, 19.2044, 15.7231, 9.5615, 7.9996, 6.5298, 3.6199, 0.5658, -1.3324, -7.5527, -6.3571, -7.0946, -6.2162, -8.1181, -29.4293, + 7.3145, 11.1318, 15.8219, 21.2414, 19.7326, 13.4391, 10.1286, 13.1458, 13.522, 4.5818, -4.9865, -10.4663, -12.4137, -8.4915, -7.5278, -14.5074, -14.9519, -10.6855, -18.9716, -27.0572, + -2.6938, -1.0116, 0.5434, -0.5197, 1.251, 2.781, -3.1452, 2.3461, 1.3093, 1.0916, 0.2998, 1.6109, 9.4326, 9.1761, -2.9635, -1.3175, -1.3459, -2.3687, -0.4622, -14.0137, + -0.6799, -0.1341, 0.7366, 1.5016, 2.3553, 1.9877, 1.8684, -1.1687, -1.7388, -0.3259, 3.2899, 3.7096, 2.8005, -0.4016, 0.0798, 0.8146, 0.249, -0.5574, 0.0812, -14.4681, + -4.5962, -1.7335, 2.2323, 4.9758, 4.1965, 6.112, 6.3004, -0.242, -0.4268, -3.4101, -1.9343, 1.8578, -0.3352, -3.5061, -2.9167, 0.7871, 0.7063, -1.6356, 3.3878, -9.8196, + 13.1227, 13.7568, 12.075, 11.2378, 13.9543, 15.7037, 14.8582, 9.5334, 0.1292, -3.0889, -7.7565, -10.9896, -5.4579, -2.1373, 0.1387, -11.7169, -13.0933, -7.4977, -12.364, -30.4077, + 29.3087, 22.8979, 20.4744, 14.9176, 7.8398, 2.3822, -3.7671, 1.0563, -3.5131, 2.1709, 4.106, -2.4865, -7.3802, -9.3667, -9.8213, -8.8247, -9.4073, -14.9259, -16.153, -19.5079, + 8.2477, 12.7093, 19.458, 20.8257, 15.6422, 8.6762, 4.5782, 4.1335, 5.6439, 14.7051, 12.4104, 11.4909, -6.3291, -17.1032, -20.7835, -24.4558, -22.5241, -14.5649, -5.2278, -27.5328, + 0.7217, 4.0954, 5.2473, 1.527, 1.7119, 3.5822, -1.4614, 0.872, -1.3606, -1.4757, -0.4869, 1.0336, -0.7433, 2.0743, 0.6152, -7.1442, 0.592, 6.3583, 2.8714, -18.6301, + 20.3582, 21.7378, 21.8475, 15.5031, 8.5323, 5.5254, -0.6584, -4.0833, -5.5901, -5.8466, -2.2597, 3.0499, -4.1864, -7.3615, -5.3521, -8.6549, -8.7165, -10.8646, -9.6599, -23.3202, + 7.9037, 5.3843, 2.5963, 1.7924, -4.1648, 1.1119, 1.0025, 0.4959, -1.4533, -3.0047, 0.7379, 1.8636, 2.4329, 0.95, -0.1706, -0.3177, 0.7889, 1.1735, -0.473, -18.6499, + -1.9942, -2.2404, 1.0361, 1.1275, 2.4246, 0.9687, -0.7731, -0.435, 2.7773, 4.6081, 2.2666, 5.9874, 1.4863, -4.3135, -1.0943, 3.1059, -4.9201, 3.6382, 1.5522, -15.2082, + 15.5189, 17.894, 20.2047, 21.1613, 16.5719, 9.883, 6.2072, 1.5961, -2.8649, -4.235, -1.2109, 1.6294, -0.3114, -6.289, -6.647, -6.6461, -16.7097, -18.4834, -19.5782, -27.6908, + 4.5707, 9.9453, 16.9194, 16.3836, 7.5074, 1.7185, -1.6704, -4.647, -7.171, -7.5216, -6.2372, -1.4728, 9.199, 4.5872, 4.2446, -3.1203, -10.1462, -8.9093, -2.0237, -22.1562, + 10.2043, 6.2265, 8.048, 6.0822, 2.9673, -0.2686, -0.4905, -3.3479, -4.2925, -4.0224, -2.6407, -3.8742, 0.6899, 3.7007, 5.8631, 8.848, -1.0855, -6.5692, -4.1304, -21.9079, + 12.9155, 18.0966, 19.8262, 14.0767, 6.9947, 1.6106, -0.8791, -6.2102, -7.3162, -10.2835, -10.9883, -8.3441, -1.6557, 0.008, -5.7847, 1.4192, -5.5022, -4.2471, 3.9784, -17.7147, + 5.1637, 8.0679, 12.5738, 17.5701, 14.9252, 4.1592, 0.9276, -0.3161, 0.0005, 3.6819, 10.2605, 3.1026, -2.7955, -2.8307, -1.1861, -9.2862, -11.7976, -5.3295, -15.7634, -31.1274, + 6.9673, 6.7974, 6.1367, 10.4782, 15.9809, 13.2295, 4.9742, 0.4813, -4.131, -5.6911, -5.9712, -1.2511, 7.3306, 2.6442, 0.3224, -0.8372, -7.4799, -9.3018, -8.5882, -32.0913, + 13.1396, 12.9563, 12.3478, 9.0857, 2.3849, -0.849, -1.4825, -4.2362, -7.2804, -7.4639, -6.8853, -6.4479, -4.2443, -8.2231, -3.9022, 0.4289, 0.1896, 3.7001, 6.9697, -10.1879, + 15.333, 18.1603, 22.1112, 21.6848, 13.1886, 10.5333, 8.8464, 9.6626, 12.4137, 13.9577, 10.142, -0.2864, -11.4409, -16.9791, -19.7494, -15.6645, -19.7643, -22.5, -23.5283, -26.1208, + 6.8457, -6.8649, 5.4271, 5.2712, -1.3685, 5.0072, 1.5557, 0.4655, -8.6121, 0.8133, -3.3697, -1.5367, 2.2231, 2.7614, 0.6905, -0.9517, 3.9757, 2.5271, 6.8378, -21.6975, + 4.0198, 5.3861, 1.469, -2.5892, -0.7717, 2.5302, 1.6444, 0.6228, 0.0646, 3.2916, 3.8112, -0.6089, 2.1623, 0.1459, 0.1339, 0.1325, -1.6768, -0.5331, -0.5013, -18.7335, + -7.1586, -2.6175, 0.5796, 4.1833, -1.3849, 0.3608, -8.9238, -4.4835, -1.6026, -5.1856, -8.3891, -1.473, 9.5706, -8.3291, 11.6042, 11.148, -0.2734, 4.8182, 12.1074, -4.5509, + 12.6166, 14.8923, 16.2633, 17.1269, 18.2744, 19.287, 16.5858, 10.4162, 6.9131, 6.3384, 2.9142, -1.3754, -10.9051, -16.4865, -19.5016, -17.7616, -6.9047, -16.5161, -23.1066, -29.0706, + 10.8009, 12.8094, 14.6516, 18.7246, 16.6285, 12.1161, 8.7229, 6.4887, 7.8806, 10.133, 4.172, -4.3839, -6.8368, -8.8011, -8.4415, -14.6175, -16.9291, -13.3638, -20.2402, -29.5143, + 6.219, 6.4291, 6.1608, 8.0273, 9.8018, 9.8514, 6.5431, 7.0773, 5.8326, 5.6116, 8.215, 7.4679, -0.2957, -6.5386, -7.9, -7.1888, -10.2895, -12.2362, -14.0338, -28.7541, + 8.0266, 9.6417, 12.2059, 15.4655, 15.3945, 10.4886, 6.7757, 2.33, 3.3664, 6.5551, 2.3159, -4.1967, -9.2962, -11.8145, -9.9788, 0.04, -6.7484, -6.4088, -11.3916, -32.771, + -6.0361, -3.7035, -0.2831, 1.4674, 0.7756, 0.3247, -0.7445, -0.5024, -2.1341, 2.7813, -0.1459, -3.5635, -3.9893, -4.293, -0.5948, 5.6527, 2.1314, 14.0267, 12.5554, -13.7247, + -14.2301, -11.8469, -5.4438, -2.2899, 3.4911, 0.4713, 0.7187, -2.7114, -1.5588, -2.821, -0.0887, 1.506, 2.8286, 9.35, 12.2742, 8.0817, 12.1298, 7.7574, 3.4239, -21.0423, + 10.2809, 9.4545, 10.3039, 12.6386, 19.498, 22.5798, 19.2258, 15.3342, 18.162, 10.8305, -3.6184, -11.2472, -16.1533, -19.0561, -21.3742, -19.1215, -7.0133, -13.0322, -12.3255, -25.3663, + -7.1992, -4.095, -0.4752, -0.0397, -1.2923, 1.268, 2.102, -2.0159, 0.5678, -4.1475, -2.286, 1.2468, 2.916, 3.7433, -3.5078, 6.2645, 5.1466, 3.3947, 11.0482, -12.6391, + -1.4558, 2.635, 2.5261, -0.4261, 7.9067, 7.3761, 10.505, 2.1413, -4.1382, -2.8818, 6.9021, 5.4317, 4.9534, 4.5363, -2.8372, -3.4508, -1.0165, -1.6706, -9.0235, -28.0132, + 5.4483, 7.0338, 8.8713, 13.9617, 19.3432, 16.574, 12.5536, 13.7232, 15.1487, 4.1979, -4.0767, -8.9863, -10.9482, -13.1722, -11.3412, -7.4945, -4.4916, -3.5707, -22.8865, -29.8879, + 12.0309, 14.2862, 17.8716, 18.2606, 13.3426, 8.9006, 1.3455, -9.418, -11.1012, -15.4444, -17.4768, -17.9985, -12.4515, -5.2431, 8.8612, 5.5913, 6.3114, -1.1018, 0.2013, -16.7679, + 16.8689, 16.8256, 18.5632, 14.4683, 8.2457, 2.7262, 1.7491, 0.4673, -4.4682, -6.2835, -4.328, 2.1966, -4.4856, -9.6447, -7.5807, 2.0175, -9.6747, -9.7002, -3.665, -24.2978, + 10.3443, 9.5624, 9.5859, 9.3945, 7.7097, 5.9502, 5.4955, 7.0578, 3.897, 1.8002, 2.9026, 0.83, -0.8072, -3.4283, -8.7861, -9.4681, -7.6897, -10.0581, -8.5829, -25.7097, + 8.4589, 13.906, 18.357, 21.8577, 20.8363, 13.5168, 7.0018, 3.5585, 0.2984, -4.3657, -7.6435, -5.4526, -6.4991, -0.0823, -10.9834, -14.489, -9.9873, -4.5713, -15.9935, -27.7237, + -2.7942, -1.0695, -0.1214, 2.5877, 1.5098, 1.0893, 1.5717, 3.2131, 6.2989, 10.9335, 9.8682, 8.6743, 4.8838, 1.8707, -1.0579, -3.7852, -5.7917, -7.6708, -7.9578, -22.2525, + 25.1784, 20.8581, 17.0052, 12.9557, 7.7424, 3.9815, 6.0072, 3.4663, -1.9041, -8.1079, -11.4077, -11.8642, -8.7727, 4.7601, 2.8284, -7.3135, -15.0133, -13.8178, -7.5999, -18.9821, + 13.6088, 10.9215, 11.1892, 11.7633, 13.2294, 6.3264, 1.9267, -1.7303, -3.3278, -4.4979, -7.2855, -3.9683, 5.3311, -1.6679, -8.5378, -6.9275, 2.8396, -8.2151, -5.8206, -25.1573, + 20.0774, 19.5893, 17.125, 15.9021, 10.2327, 5.8537, 4.1551, 8.7468, 6.2824, -1.6643, -0.8142, -5.7458, -5.8553, -6.7971, -4.8129, 0.1863, -14.4064, -22.1846, -19.7857, -26.0848, + 1.9579, 3.5459, 5.6047, 9.8227, 17.151, 16.9383, 8.2371, 2.3829, -0.9137, -2.6491, -2.1733, 3.0262, 6.5399, -2.8952, -2.9389, -0.9532, -9.2242, -11.9604, -12.7131, -28.7857, + 2.7147, 5.0851, 5.901, 8.2492, 9.0379, 12.5344, 15.7585, 7.9343, 2.8699, -7.6515, -7.5935, -7.0792, -7.0329, -0.2973, -4.1153, 0.8146, 0.8342, -8.0293, -6.0641, -23.8708, + -1.8671, 0.2021, 1.1744, 3.3514, 3.8114, 4.6535, 6.4708, 5.5903, 4.6873, 6.12, 7.1503, 10.882, 10.1467, 5.0564, -4.0471, -7.0223, -5.8028, -7.0328, -13.2761, -30.2485, + 14.4582, 17.2732, 16.2772, 7.1332, 0.6525, -4.4947, -7.791, -9.8395, -12.5801, -10.7856, -8.8712, -4.2717, 7.2719, 0.7198, 1.5521, 3.5804, -2.9845, 0.1717, 6.3548, -13.8266, + 28.6852, 25.8888, 20.5479, 11.1546, 4.6177, 1.8681, 3.9247, 1.295, -2.924, 4.305, 4.3461, -5.4196, -7.8904, -10.2821, -8.2802, -13.991, -11.2895, -12.538, -13.7725, -20.2458, + 6.9489, 8.2782, 12.9177, 18.1269, 10.1196, 2.5932, -1.2838, -5.9588, -9.0612, -10.7381, -10.6395, -8.4104, -4.0818, 7.0965, 0.3344, 2.1418, 2.2817, -3.7137, 1.6102, -18.5618, + 6.2919, 7.1483, 7.7499, 10.3266, 12.7585, 21.8234, 21.7899, 13.6697, 7.2737, 9.3185, 13.4418, -0.153, -6.4198, -9.4554, -7.4143, -12.4542, -21.2295, -24.5545, -24.4585, -25.4529, + 3.2078, 1.1604, 2.382, 7.1676, 15.6309, 19.6735, 9.8897, 7.8474, 10.1305, 10.405, -1.822, -9.0708, -12.7476, -14.298, -11.7869, -3.2366, -4.1439, -6.6114, -0.0121, -23.7655, + 4.9484, 5.9562, 10.0092, 16.2669, 12.926, 3.9525, 0.492, -2.9838, -4.7825, -5.0706, -3.0972, 4.4166, 5.1484, -3.0885, -2.2935, 1.8467, -6.6209, -8.5405, -3.2672, -26.218, + 9.119, 11.7308, 15.3181, 20.5759, 15.7183, 7.69, 3.7341, -3.2723, -6.7161, -9.0437, -8.0703, -0.593, 6.4087, 3.5269, 3.0413, -8.4178, -14.7425, -12.7049, -6.9905, -26.3121, + 1.4852, -0.6829, -1.569, -0.2848, 5.5052, 12.8631, 6.4129, 0.4626, -3.55, -5.4162, -3.9006, -1.4888, 7.5205, 5.649, 1.1393, 5.5204, -1.2344, -6.2194, -3.0728, -19.139, + 11.9158, 15.3244, 18.2371, 17.8689, 12.9861, 8.5734, 2.6935, -0.462, -0.3115, 4.3187, 1.8359, -6.5328, -11.3944, -12.3343, -10.2127, -3.2123, -10.7404, -11.6243, -6.0915, -20.8377, + -1.1406, 4.4681, 1.0243, 1.7567, 0.8452, 1.0568, 1.7113, 1.4304, 8.2151, 0.5703, 1.2053, -5.7909, -4.3638, 0.9165, -4.5872, 3.4354, 6.9859, 3.9875, -3.5121, -18.2142, + 18.8171, 22.5033, 16.7157, 10.3549, 3.9514, 1.6962, -0.6346, -5.9992, -6.8816, -7.3001, -7.9076, -4.3326, 4.9348, 4.6458, 0.9437, -3.5521, -9.364, -2.4386, -11.4118, -24.7409, + -0.9409, 0.5904, 2.2794, 4.9547, 5.8743, 8.7846, 11.0088, 11.1838, 11.6958, 14.1355, 8.9116, 2.5256, -1.8779, -5.6262, -5.5753, -9.1754, -9.0981, -12.4659, -11.4699, -25.7149, + 0.4141, 2.8215, 2.0838, 3.1886, 4.2216, 1.7188, 4.6179, 2.9704, 1.6545, -2.846, -0.9511, 2.6537, -1.8008, 0.9825, 1.2384, 1.5282, -0.7271, -3.094, -0.809, -19.8659, + 6.043, 4.6516, 4.3017, 7.7179, 6.7963, 6.291, 8.7476, 8.7592, 7.7014, 12.1586, 8.0227, -1.3414, -6.0075, -8.1097, -6.8511, -6.6141, -5.8068, -8.7086, -9.3302, -28.4218, + 7.1395, 6.4611, 6.477, 6.5752, 5.736, 5.6174, 3.8338, -0.3402, -1.9803, -2.2319, -4.1316, -3.2411, -2.2252, 4.195, 1.9636, -1.7425, 0.5431, -3.5115, -6.8529, -22.2844, + 17.8843, 21.4402, 20.6904, 15.9517, 9.7051, 2.5656, -1.5516, -7.4554, -8.8729, -10.2263, -8.6781, -5.1896, -0.7045, -6.768, -8.2898, -6.9326, 1.3954, -3.2208, -6.0504, -15.6928, + 10.6767, 10.3544, 18.1231, 11.2879, 6.1413, -0.361, -2.4504, -5.1076, -4.9943, -4.9704, -2.3126, 5.9757, 0.9523, -4.2427, -2.5152, 4.9197, -8.3019, -9.0057, 0.3384, -24.5078, + 9.9161, 11.8977, 18.2327, 24.4645, 22.2618, 14.5543, 11.0874, 11.6473, 16.7269, 16.7802, 10.9221, 4.3259, -12.8739, -20.0422, -22.5408, -24.1296, -20.9142, -22.6765, -24.3668, -25.2731, + 9.4023, 7.3715, 11.9062, 12.512, 7.0268, 13.6459, 7.2747, 2.8388, 14.6515, 22.1573, 24.2647, 6.5863, -1.1334, -12.1075, -18.8356, -21.0343, -18.7149, -21.3705, -23.1378, -23.304, + 6.1154, 6.8878, 8.0486, 2.083, 11.4555, 24.4875, 10.2548, 8.5452, 8.1934, -4.1865, 11.8854, 1.3485, 1.9895, -14.5678, -11.0286, -3.4615, 1.3428, -19.7548, -24.2069, -25.4313, + 10.357, 12.8522, 17.3265, 22.8368, 16.6859, 10.9743, 8.2198, 6.8557, 9.3432, 12.2609, 5.1561, 1.541, 1.3448, -11.6896, -19.8579, -22.4891, -19.3409, -16.0157, -19.9891, -26.372, + -2.2958, -3.0198, 2.5524, 6.5326, 5.0549, 2.8939, 1.6085, 1.4431, -0.1701, -2.0055, 1.1867, -1.3016, -2.2987, 6.124, 3.0188, -0.9646, 2.6135, 4.0735, 0.2584, -25.3041, + 3.3425, -4.9398, 1.7857, 0.981, 8.2974, 13.876, 7.3422, 4.3951, 4.0317, 8.9378, 9.1371, -1.7588, -9.1168, -12.4667, -12.0238, -9.0772, 4.3501, -0.6556, 4.4305, -20.8684, + 2.6724, 2.4627, -2.5441, -3.3045, -4.2917, -1.4508, 1.5865, -1.0572, -2.1109, 1.487, -1.0006, 3.5002, 3.7107, 1.3794, -1.6261, 0.0378, 2.0162, 0.3261, 3.2452, -5.0385, + 3.1268, 4.8784, 8.6218, 13.5865, 14.1019, 7.249, 1.4764, 0.4142, -1.444, -0.1256, 6.7242, 13.6333, 7.9001, 5.1808, -8.7618, -15.9427, -17.574, -13.2732, -3.9031, -25.8689, + 8.7515, 17.2518, 23.5164, 15.769, 8.1574, 4.9814, 0.5026, -0.4621, -1.5217, 2.4458, 11.1982, 12.8925, 8.2107, -10.1894, -18.8969, -20.9839, -19.6436, -9.2705, -7.3159, -25.3934, + 11.798, 12.1448, 14.6065, 20.2682, 20.5368, 14.0544, 8.9695, 7.1447, 9.3182, 10.2279, -1.3945, -9.863, -14.231, -14.26, -11.294, -5.3186, -14.6453, -16.0278, -14.7441, -27.2906, + 8.3692, 9.6882, 12.8542, 17.3005, 21.134, 18.5917, 11.2777, 5.5517, 0.547, -2.3437, -2.3633, -0.2054, 0.7833, -4.4844, -5.7547, -6.4185, -15.2118, -20.989, -20.6002, -27.7265, + 3.254, 3.5495, 5.6572, 11.4443, 18.6822, 14.2818, 7.9623, 5.8581, 7.6636, 11.238, 10.4719, -0.3434, -0.9127, 0.3323, -9.6682, -12.3368, -7.0303, -17.504, -22.5944, -30.0053, + 10.5668, 4.7765, 4.8789, 5.9385, 13.1029, 20.5979, 14.5257, 8.6496, 2.4271, -1.164, 1.2029, 9.4957, -0.02, -12.573, -14.8513, -9.422, -4.4288, -12.9535, -14.372, -26.3782, + 3.6092, 2.1429, -0.2581, 2.1516, 6.0252, 4.4742, 4.352, 2.9527, 3.6102, 2.6901, -0.0942, 2.2564, 1.3309, -0.5758, -1.109, 0.1191, -0.118, -0.1015, -5.5503, -27.9075, + 8.4206, 12.653, 18.9633, 23.9855, 21.254, 9.7237, 1.5121, -0.7361, 0.7545, -1.5581, 2.4158, 9.9186, 6.7278, 3.6705, -12.4971, -19.8574, -23.2581, -23.72, -10.9203, -27.4525, + 22.1951, 16.4633, 13.2055, 7.497, 2.228, -2.4528, 8.773, 10.687, 4.9929, 1.1178, -5.3802, -8.2471, -5.7256, -8.8078, -8.354, 1.5835, 1.5054, -11.6521, -13.9564, -25.6726, + -7.9053, -6.584, -6.0103, -4.8986, -4.2425, -4.7462, -6.7261, -8.5401, -8.6906, -8.8402, -5.6306, -0.7673, 8.6501, 5.08, 13.9798, 11.4953, 10.0314, 17.429, 14.9683, -8.0522, + 11.9359, 8.4098, 2.8637, 0.1621, 4.2653, 2.699, 1.2433, -1.9101, -2.5608, -4.4372, -0.737, 5.0345, 2.4512, -1.2451, -4.6924, -2.0267, 0.3932, -0.7445, -1.8229, -19.2813, + -1.3202, 3.8184, 7.4609, 11.6391, 16.2849, 25.4929, 15.8707, 1.4126, 12.3759, 21.2527, 8.1587, -3.8943, -14.786, -10.693, -17.9239, -16.3824, -1.7644, -13.0054, -19.3451, -24.6522, + 9.8443, 9.9627, 12.5201, 13.7261, 10.3992, 6.629, 2.9281, -0.7644, -3.9695, -5.3737, -8.3704, -7.5382, -1.7207, 5.7599, 1.941, -0.8146, 0.5436, -5.6632, -12.2155, -27.8236, + 6.429, 4.7082, 3.9317, 3.1702, -1.6353, -3.6078, -6.315, -9.1986, -10.3233, -9.8065, -5.8063, -1.3404, -0.7673, -2.2448, -1.2797, 7.1795, 3.2561, 15.5273, 14.8629, -6.7401, + 23.9506, 22.1558, 17.7456, 14.435, 8.3329, 3.1023, 4.3134, 8.6024, 3.8015, -3.9642, -10.78, -9.6229, -10.886, -10.6376, -8.0083, 4.7524, -6.4851, -13.7226, -12.4871, -24.598, + 9.576, 11.4366, 12.9012, 14.4846, 16.8425, 19.5473, 19.7042, 15.2736, 12.0272, 11.0446, 7.4677, 1.1314, -9.0848, -18.3215, -23.8214, -23.171, -19.9932, -10.2715, -17.3599, -29.4137, + -3.4431, -3.1613, -1.9102, -0.6935, 1.387, 1.2966, -1.0892, -2.4642, -3.0407, -4.4927, -5.4209, -4.2773, -0.5358, 0.409, 1.2794, 5.899, 14.3402, 3.7638, 11.1512, -8.9972, + 15.2464, 18.8014, 25.3166, 19.5775, 11.0313, 6.5896, 5.6381, 2.9552, 5.1185, 13.254, 13.6736, 8.5584, -8.3365, -15.9401, -20.3756, -21.2859, -21.2275, -19.3217, -15.1325, -24.1407, + 3.1035, 6.1792, 5.0462, 3.5926, 7.0741, 6.4046, 9.9419, 7.7684, 4.2113, 3.6277, 6.5092, 5.59, -1.7178, -6.4492, -7.8871, -6.9582, -5.1379, -8.3058, -10.5436, -22.049, + -0.728, 0.5704, 3.9717, 5.9469, 6.078, 4.077, 1.2426, -1.3458, -3.2314, -4.6819, -6.2378, -5.0198, -1.208, 10.5808, 2.6382, 3.7712, 3.8446, -1.7555, -1.1558, -17.3572, + 5.3326, 5.4267, 9.824, 16.2001, 13.6887, 6.951, 1.1917, -1.6723, -2.5788, -2.7648, 2.6931, 5.4843, -4.2095, -9.6143, -6.2919, 3.6211, -3.8754, -6.5263, -5.2823, -27.5977, + 2.5771, 3.4727, 5.4467, 8.8349, 9.887, 12.1341, 12.0826, 7.7444, 4.5255, 0.7889, -2.0382, -4.7604, -5.7542, -4.6241, -2.4718, -4.0958, -6.2797, -4.6267, -9.5398, -23.3031, + 14.7846, 16.0256, 18.44, 18.7731, 12.4129, 9.2087, 4.9463, 5.2837, 7.9434, 9.1983, 5.6775, 1.0431, -7.1678, -12.3799, -13.9635, -9.429, -13.5075, -18.2553, -21.2672, -27.767, + 14.086, 12.616, 17.7362, 22.848, 13.2766, 7.4189, 5.7487, 1.8704, 2.3287, 6.7312, 16.704, 13.9396, 0.1199, -14.272, -18.2397, -22.3862, -24.8172, -19.6941, -10.4326, -25.5823, + 1.2702, -1.274, -3.71, -0.5628, -4.5219, -4.458, -7.71, -8.3547, -7.0524, -3.3805, -3.0927, 1.978, 6.7217, 16.8392, 12.2288, 6.1018, 4.3647, 3.7046, 7.0648, -16.1569, + -1.5691, -0.6625, 0.8145, 2.7114, 4.5683, 6.3808, 5.3169, 3.3697, 3.7409, -1.1329, 1.3502, 1.4333, 7.1092, 8.0819, 7.414, -0.3489, -3.5222, -5.2023, -8.9373, -30.9159, + 8.8791, 11.5486, 17.4354, 21.959, 18.7721, 13.0614, 12.3597, 15.8383, 7.9901, -4.7504, -11.1404, -17.0402, -20.1418, -20.5768, -16.8543, -10.271, 3.5082, 1.5897, -6.0317, -26.1349, + 1.4924, 2.3041, 3.6995, 3.9735, 2.9478, 1.4182, -0.1153, -0.7081, -1.6935, -4.7155, -3.8966, -1.0552, 4.3924, 3.5582, 4.7903, 3.4573, 4.4498, 3.7588, -4.9783, -23.08, + 19.7104, 23.5312, 26.4663, 21.1276, 13.4352, 11.0142, 11.5216, 12.6431, 11.662, 1.8352, -2.6313, -2.1531, -10.9044, -16.4683, -19.1821, -21.4207, -21.6631, -20.6795, -14.544, -23.3003, + -7.3825, -5.1236, -2.0803, -0.3985, -2.1515, -3.3191, -2.5398, -3.6553, -4.6673, 0.245, -1.138, 0.4163, -5.0235, -3.1123, 1.6781, 0.5456, 9.2542, 19.9831, 16.2303, -7.7611, + 2.5108, 2.1845, 2.6268, 3.2213, 4.7277, 4.9151, 4.4068, 2.5115, -1.2667, -1.047, -0.584, 3.198, 11.3786, 3.1343, -1.5396, -0.779, -4.2909, -5.9553, -4.0558, -25.2973, + 1.3099, 3.8149, 5.9305, 6.029, 6.2561, 6.5634, 6.5483, 2.2558, 2.8164, 5.8479, 6.7553, 3.8567, 2.7371, -0.0626, -3.8527, -5.1436, -5.5124, -7.3236, -9.2045, -29.6219, + 6.9414, 7.8896, 11.9174, 19.4391, 22.8159, 17.513, 12.8967, 11.7403, 13.3801, 0.6255, -8.6365, -13.1338, -15.0777, -14.1269, -8.2615, -12.9862, -16.1846, -10.2908, -1.8314, -24.6297, + 13.6675, 18.7539, 23.7644, 23.5665, 14.5584, 8.2788, 5.9566, 3.8037, 5.8231, 9.3954, 3.8096, -3.7071, -3.0809, -2.7965, -15.391, -22.2338, -22.7083, -19.7578, -17.2327, -24.4698, + 6.8878, 4.6215, 4.083, 1.7534, 6.3161, 9.303, 9.1793, 1.8539, -3.8953, -6.2684, -7.283, -6.1167, 0.8013, 5.3564, -0.9241, -2.6976, 1.7576, -1.1627, -4.9125, -18.6528, + 11.5366, 9.1379, 9.1023, 13.3107, 15.2931, 8.4262, 2.0019, -1.8545, -5.347, -10.498, -13.165, -8.7617, -2.8037, 6.5213, -2.9746, -1.1653, 2.895, -3.9002, -0.4074, -27.3478, + 8.1149, 5.2054, 4.7193, 10.9119, 14.2393, 9.7159, 2.7743, 0.0628, -0.9042, 2.5046, 6.2675, 4.5297, -1.7121, -2.7212, -6.4591, -8.2032, -12.1525, -9.796, -4.5542, -22.5432, + 10.427, 10.1489, 7.8411, 6.9092, 5.2675, 3.1553, 3.186, 0.3063, 0.4719, -0.871, -0.6868, -1.1505, -4.6137, -2.9984, -2.9661, -2.854, -3.0302, -2.2057, -5.9823, -20.3547, + 16.5991, 18.818, 20.4139, 16.0812, 15.2582, 13.6, 9.773, 4.82, 7.267, 0.5444, -5.1929, -8.9752, -12.2178, -15.2451, -9.0857, -9.6324, -11.9042, -7.0554, -15.8485, -28.0175, + 6.9984, 7.5807, 9.7172, 14.2935, 21.1422, 18.8026, 13.0729, 13.6068, 15.6061, 5.7873, -4.4176, -10.663, -14.9625, -15.276, -12.1485, -4.9859, -13.8661, -15.0801, -8.9505, -26.2577, + 4.8529, 5.9107, 5.9519, 3.1046, -0.7986, -3.8, -3.3218, -6.5949, -9.5964, -7.6925, -7.0336, -3.5031, 2.4411, -0.1901, 9.1699, 13.0532, 0.4243, 10.947, 3.0406, -16.3654, + 2.3975, 0.4924, 3.8005, 6.146, 0.9043, 2.1381, -0.0106, 2.9239, -11.7677, -3.8359, -3.4925, 0.8716, 3.474, -2.8287, -3.8786, 1.2858, 6.8931, -2.1701, 3.3894, -6.7326, + -3.5428, -1.39, 0.9285, 2.4806, 2.9675, 0.798, 0.9612, 0.2854, -2.0562, -1.3222, -1.9025, -0.0059, 8.6474, 4.6327, 1.6964, 0.3984, 0.9512, 1.7069, 1.4812, -17.7159, + 17.4798, 18.9995, 21.9699, 20.6967, 14.4015, 9.2408, 9.2963, 4.6834, -0.5765, -2.0466, -4.687, -8.134, -10.84, -6.9387, -4.9129, -2.3346, -9.5282, -16.6374, -22.862, -27.27, + 30.2051, 29.0816, 22.701, 15.9702, 13.2347, 12.3034, 7.9736, 1.711, -2.905, -5.822, -9.0457, -11.4933, -10.9824, -10.7128, -9.7198, -11.447, -12.1083, -14.372, -14.3489, -20.2236, + 4.3667, 5.6948, 7.6382, 9.1345, 7.9965, 5.9946, 4.8983, 4.5838, 1.3099, -1.1182, -2.4032, -2.5986, -0.3123, -3.8248, -3.3874, -4.6492, -2.5381, -4.101, -4.4278, -22.2567, + 13.3799, 15.9919, 18.2801, 18.5738, 14.5051, 15.061, 12.6361, 1.8684, -4.4789, -7.5763, -7.3687, -5.7285, -8.7693, -10.097, -1.0795, 0.7696, -6.5956, -14.5402, -16.2583, -28.5735, + 1.2989, -0.2985, -0.1264, 2.2528, 6.1919, 9.085, 11.5888, 9.6084, 6.4565, 4.6999, 3.8291, -3.1433, -2.0178, -5.4377, -3.5892, -2.4088, -3.4525, -6.5279, -6.8848, -21.1245, + 6.699, 6.9952, 6.99, 10.6461, 18.176, 23.4925, 20.7738, 19.3068, 14.5258, 4.1679, -5.0313, -10.5967, -15.7569, -18.7535, -19.3572, -18.4953, -9.1098, -8.3084, -3.508, -22.8561, + 0.3614, -3.0919, -2.2049, 0.2924, 3.5194, 12.3203, 10.5339, 6.5081, 2.9888, 3.7587, 9.6208, 6.5139, -3.3458, -8.5883, -8.7468, -4.73, 1.1707, -5.5824, -3.0982, -18.2001, + 3.6833, 5.1669, 7.0034, 5.1138, 6.2451, 5.1324, 2.9024, -0.2756, 0.6913, 0.7688, 2.7471, -3.0081, -4.2841, -1.679, 0.6913, -2.2915, -1.1739, -2.5591, -2.7007, -22.1738, + 11.4726, 11.0663, 10.8078, 10.4446, 10.6033, 12.3965, 13.0646, 7.6243, 1.8855, -2.1733, -3.8981, -0.7658, 2.9887, -2.4982, -10.215, -14.2533, -12.1696, -5.433, -8.34, -32.608, + -6.7179, -4.6131, -3.1636, 0.0876, 0.6888, 1.0614, 0.5541, -3.503, -3.5922, -2.2597, -0.8136, 6.0096, 11.8925, 2.9252, -1.145, -0.4619, -0.0294, 2.9522, 6.4894, -6.3616, + 5.3482, 3.731, 5.0957, 3.1029, 1.678, 3.1184, 0.5161, -3.5018, -4.5034, -6.3519, -7.8639, -5.658, -5.1767, -2.3928, 0.1325, 3.3098, 7.821, 11.9881, 4.419, -14.8118, + 8.2697, 5.8835, 6.0215, 10.4427, 12.0342, 7.5709, 3.5443, -1.0166, -4.1313, -6.5619, -5.066, -0.8575, 7.1102, -0.6052, -4.0956, 0.6756, 0.8926, -4.2551, -6.4788, -29.3772, + 2.0192, 3.9566, 4.9448, 8.089, 14.6263, 15.3545, 12.2775, 10.3302, 7.2993, 12.5826, 7.7803, -2.3944, -7.4949, -10.2984, -9.7837, -7.3581, -7.2692, -6.1954, -16.7366, -31.7295, + 12.8428, 15.92, 16.2497, 11.854, 3.8, -1.0057, -2.5059, -6.532, -8.39, -9.9165, -9.6596, -6.0113, 1.0447, 13.8469, 7.3566, -4.1906, -11.0801, -8.0052, 3.2361, -18.8537, + 17.202, 18.636, 23.3502, 20.5862, 15.5823, 12.7495, 6.4445, -6.6661, -9.171, -15.5663, -21.8272, -18.4838, -16.7082, -14.2582, 2.8891, 3.6115, -0.4823, -0.0577, 2.5754, -20.4057, + 11.2405, 16.2045, 19.5245, 19.0279, 10.816, 4.2621, 0.0074, -4.8018, -7.7494, -9.5065, -10.8518, -10.4718, -6.2617, 1.5892, 9.5055, 4.0459, -4.23, -9.8946, -9.4119, -23.0441, + 21.5981, 16.6548, 9.2131, 4.2901, -2.7752, -6.0814, -5.7172, -6.8518, -5.3057, -3.6255, 1.9348, 7.8994, -1.326, -8.0365, -10.6481, -6.5275, -3.0468, 3.5257, 5.6627, -10.8371, + 2.3529, 1.9098, 1.1705, -1.0129, 0.2322, -2.1724, -2.7849, -0.3004, 1.1108, 2.9625, 0.3261, -2.0946, 1.0272, 3.4696, 1.9753, 1.1513, 2.4885, 2.1442, 0.7739, -14.7298, + -1.7003, -2.4848, -2.4346, 4.7038, 24.9669, 27.0962, 7.9463, 4.7152, 0.192, -0.8991, -0.8489, 9.9068, -2.48, -9.4907, -11.9321, -1.857, -6.2441, -11.0862, -11.2891, -16.7804, + 14.9206, 17.922, 23.4494, 28.4771, 23.9338, 22.5858, 21.7793, 9.3991, -3.6346, -10.2702, -14.3748, -16.3264, -19.3026, -18.4585, -17.3134, -12.271, -10.593, -10.9994, -7.9141, -21.0092, + 10.8472, 9.9985, 8.1012, 5.6373, 0.7372, 0.0745, -0.8638, -1.7933, -2.9142, -3.015, -2.2427, -0.7782, -2.5201, -6.2197, -5.1933, 0.2777, -5.0155, 0.2927, 4.1108, -9.5213, + 11.2774, 17.5024, 20.7927, 14.9512, 8.8893, 5.3831, 1.1126, -0.5407, -1.8226, -0.7548, 3.8991, 14.1917, 11.4189, -2.2812, -13.1711, -17.2396, -15.8893, -13.7806, -15.9376, -28.0009, + -1.8142, -1.3801, -0.2831, 1.382, 1.7722, 1.4623, -1.2023, -3.2113, -5.2345, -6.7523, -4.9565, -2.8637, 4.0779, -2.6764, 0.8821, 14.4958, 8.5614, 4.5439, 7.906, -14.7091, + 10.5077, 13.8832, 19.5676, 20.853, 17.7078, 12.7109, 11.5269, 8.0218, 2.2318, -5.7244, -10.1683, -12.812, -14.923, -10.7023, -2.0109, -8.3963, -10.2008, -5.4032, -10.7793, -25.8902, + -0.2509, 1.3469, 0.6421, 2.6377, 6.0659, 4.3721, 5.352, 3.9824, -1.7069, -2.0895, -5.2191, -1.537, -3.3737, 1.3384, 4.0383, 10.2321, 1.6548, -3.2413, -5.147, -19.0973, + 6.4953, 9.3365, 14.1057, 20.6271, 16.1168, 7.358, 1.4929, -2.7587, -4.0681, -3.9748, 1.3672, 8.9105, -0.92, -5.3133, 0.3345, -6.1299, -12.7503, -9.3229, -13.4612, -27.4454, + 0.6201, 2.4328, 4.976, 9.2545, 15.4025, 12.2971, 5.768, 5.0077, 4.0499, 4.2155, 9.706, 7.7493, 5.8274, 0.3852, -5.9984, -11.5236, -7.305, -10.3504, -20.7971, -31.7176, + -3.7294, -1.4413, -3.7524, -4.5904, -3.2743, 0.736, -3.2763, -4.8007, -0.6213, 4.903, 10.4614, 11.0474, 17.3494, -0.7763, 5.4732, 0.7769, 1.2498, -0.7639, -2.107, -22.8638, + 6.7163, 9.2255, 12.3187, 17.6924, 17.6404, 11.894, 7.0991, 4.2645, 4.3021, 9.9874, 5.8382, -3.4579, -6.9519, -4.809, -2.1538, -14.0697, -18.7474, -17.332, -11.2745, -28.1824, + 14.7156, 19.4663, 14.7897, 6.5422, 1.1728, -2.3524, -4.9286, -7.8168, -8.8525, -9.4747, -10.7274, -8.5129, -4.4565, 7.8312, 0.0283, 4.0451, 1.6338, -1.3894, 4.4306, -16.1441, + 19.068, 22.0875, 24.611, 22.0341, 17.3706, 15.8785, 14.1658, 11.9508, 4.4308, -1.1373, -6.4223, -10.3244, -11.8572, -13.5064, -14.4779, -15.1004, -15.5216, -16.8251, -22.0101, -24.4145, + 9.0336, 19.0176, 24.4867, 24.6758, 18.9461, 11.7838, 7.6427, 4.775, 1.2864, 0.4513, 1.8155, -1.2592, -9.2086, -14.2929, -15.7555, -13.6408, -7.7748, -14.5157, -21.5902, -25.877, + 1.4827, 0.2805, -0.381, 1.4732, 8.234, 8.1707, 10.06, 8.3087, 4.1212, 2.7249, 3.5821, 7.9718, 3.7426, -2.6511, -5.3909, -4.4519, -4.5293, -6.7232, -8.9602, -27.0648, + 10.5705, 10.67, 11.7791, 12.1925, 10.0236, 6.6964, 5.1163, 2.6148, 4.7648, 2.5521, -3.9125, -7.4628, -9.6721, -9.3307, -9.9466, -8.0895, 1.1968, -3.82, -3.4846, -22.458, + 7.5905, 8.3863, 11.5587, 16.2565, 22.0088, 23.0422, 17.8049, 13.1018, 17.1694, 13.5769, -0.2381, -1.8062, 1.5806, -10.3901, -20.8106, -24.7914, -25.0524, -24.3552, -19.3769, -25.2554, + 7.3275, 11.616, 16.6781, 15.5131, 8.1538, 4.8147, -1.7134, -2.9599, -6.5688, -7.0695, -0.9248, 5.3367, -4.508, -7.1758, -3.427, -3.5021, -8.7907, -5.2842, 1.7479, -19.2635, + 8.6994, 13.7488, 20.2706, 15.6056, 8.03, 2.7906, -2.4915, -6.3762, -9.0577, -10.4892, -11.7811, -10.7422, -7.7494, -0.3422, 10.0858, 3.8928, 3.968, -2.0796, -2.0561, -23.9265, + -1.8066, -1.3696, 1.0493, 1.3711, 1.9691, 1.1999, -1.8646, -1.9643, -1.7749, -1.339, -3.3717, 3.1526, 1.2109, 0.799, 0.4966, 2.5531, 3.3704, 2.3429, 4.9229, -10.9469, + 4.0689, 7.4175, 12.694, 18.06, 16.5869, 9.3259, 4.5282, 2.8636, 1.6428, 4.7328, 12.4121, 9.1212, 6.2302, 0.0152, -12.5596, -17.7355, -18.6999, -12.797, -17.6503, -30.2571, + 0.8292, 2.6495, 1.8804, 4.1439, 5.6667, 5.7021, 4.9475, 6.8868, 6.795, 8.0289, 10.5666, 8.6874, 1.8534, -2.2297, -6.3646, -6.79, -8.1505, -9.3082, -10.0423, -25.7522, + 7.1022, 3.8236, 1.8946, 4.423, 4.784, 4.6315, 5.8219, 2.7914, 1.6501, 0.4344, 2.2205, 4.0071, 0.0326, -2.6285, -2.5436, -3.5874, -3.6688, -4.2155, -7.0087, -19.9643, + 0.1242, 12.2019, 4.3084, 4.2478, 1.9093, 0.6288, 1.1102, 1.5269, 2.2918, 5.1362, 2.1955, -5.7687, 1.1936, -1.4469, 0.2971, -4.6605, 0.8522, 1.2017, -3.9848, -23.3647, + -5.1159, -1.2775, 2.526, 4.1265, 3.4097, -1.7194, -0.8844, -1.4795, -5.4958, -6.8537, -1.5398, 0.9661, -2.324, -4.8943, 8.2925, 3.4432, -1.7853, 6.31, 13.441, -9.1454, + 3.9898, 4.3777, 4.2357, 3.0453, 3.7447, 2.5019, 1.1011, -0.478, -2.4003, -0.6497, 0.8291, 0.2117, 0.0985, -0.2133, 0.383, -1.785, -1.0322, -2.1328, -1.6069, -14.2203, + 11.3622, 14.7416, 16.8859, 15.0883, 9.9488, 8.7692, 4.3995, -2.0242, -2.6878, -1.0092, 0.7764, -2.2298, -4.084, -8.1165, -6.2525, -5.2064, -7.0092, -6.7164, -9.2528, -27.3833, + 3.6579, 2.8996, 4.0461, 8.3701, 17.0082, 23.3625, 16.2578, 7.1955, 17.3887, 6.3999, -4.2883, -9.9015, -12.7556, -12.3388, -5.468, -10.3674, -10.9476, -10.1432, -6.0175, -24.3585, + 7.5312, 5.8939, 4.3265, 4.0014, 2.9087, 1.6542, 2.9601, 3.9087, 1.37, -2.9778, -0.8059, -0.8752, -0.992, -0.8125, -0.8336, -0.0306, -2.6451, -2.7999, -4.2986, -17.4834, + 15.3876, 20.0855, 22.6771, 20.6277, 15.1509, 8.8202, 3.6289, -2.1904, -8.5688, -13.1818, -15.2549, -15.0083, -12.7233, -8.7307, 0.5974, 4.3829, -2.277, -0.0304, -7.8902, -25.5026, + 23.6589, 23.2539, 20.352, 15.1761, 11.4144, 5.8059, 5.4712, 1.316, 0.0827, -2.4308, -7.0613, -6.1765, -1.8534, 5.6004, -1.4387, -15.4564, -17.387, -18.868, -17.3832, -24.0763, + 11.6709, 14.1123, 21.1753, 25.8068, 20.7082, 14.063, 14.1588, 17.922, 14.6153, 4.8179, 3.3194, 0.469, -11.4997, -19.1991, -21.5666, -21.4213, -21.1902, -22.3547, -22.1566, -23.4508, + 4.6799, 3.0606, 1.6539, 6.2007, -2.0201, 3.0954, 0.5569, 3.2707, 1.3312, 0.0725, 1.8286, -5.9667, 2.657, -0.0978, -1.2174, -2.2597, 0.2234, 1.4765, -4.2077, -14.3379, + 9.3104, 11.8578, 14.9832, 13.1906, 8.5578, 4.2616, -0.4942, -3.0677, -3.2171, -5.1322, -1.7298, 6.6384, -0.8475, -8.0712, -9.5863, -5.8386, 2.661, -8.3104, -6.0285, -19.1373, + 2.2896, 3.8587, 4.9224, 8.6357, 13.9236, 17.8222, 15.7427, 11.5211, 7.5272, 9.1679, 9.7247, 5.7451, 0.5275, 0.3504, -6.2281, -12.9212, -14.0843, -20.5964, -26.6432, -31.2855, + 18.9039, 18.0327, 13.6297, 9.7561, 7.4319, 5.3744, 2.9646, 1.7415, 0.6716, 0.6859, 2.7446, 0.5342, -4.3187, -6.1877, -6.9311, -9.8734, -11.9041, -9.1281, -8.9591, -25.169, + 6.4513, 6.7843, 9.4438, 12.9549, 16.4801, 14.9093, 8.2954, 1.6877, -2.5193, -4.4922, -6.7348, -6.9853, -4.6783, 0.7181, 1.0483, -5.1128, -1.1161, -7.5305, -12.398, -27.2058 +}; + /* /home/sh/Downloads/hackrf/codec2/src/codebook/train_120_2.txt */ +#ifdef __EMBEDDED__ +static const float codes1[] = { +#else +static float codes1[] = { +#endif + -1.2668, -1.2477, -0.0681, 3.8419, -0.0693, -1.7919, -1.5943, 0.8402, 0.155, -3.1526, -3.0204, 0.7337, -0.2603, 1.659, 0.023, 5.5893, -2.4959, 1.9604, -0.6348, 0.7999, + 2.6673, 1.4923, 1.1408, -0.7478, -1.0755, -1.3421, -0.4884, 0.2535, 0.2951, 1.5088, 1.9447, -2.662, 2.3751, 1.5298, 4.1357, -6.563, -2.1766, -2.7535, -0.7706, 1.2362, + -0.6415, -0.4348, -1.2178, -0.987, -1.1057, -2.1421, -2.3594, -0.4977, -4.1484, -4.712, 5.5425, 3.0695, 3.661, 2.9729, 2.4379, -1.6136, -1.3052, 2.1342, 1.9164, -0.5692, + 1.593, -1.1175, -1.2476, 1.6203, 2.5315, 2.3427, -0.5223, -3.1063, -2.1739, -1.4774, -2.6108, -3.5842, -0.3828, -0.1511, 0.8929, 2.5717, -1.7657, 1.8954, 6.0193, -1.3272, + -0.2102, -0.3681, -1.2724, -1.152, -0.3715, -0.5633, -2.5238, -1.768, 4.7356, 5.6452, 0.862, 0.875, -0.8932, -1.5918, -1.4047, -0.072, -0.608, -0.7876, 1.3972, 0.0717, + 5.1178, -1.5391, -4.2881, -1.9745, 1.3515, 2.4014, 0.9329, 3.4647, -2.4062, -0.4224, 2.8708, -1.6053, -3.1492, -2.6783, -2.6937, -4.4645, 1.8599, -0.5456, 3.891, 3.877, + -1.7119, -1.0101, -0.5002, -1.7849, -0.4884, 0.2279, -0.8335, -1.0083, -1.2819, 0.1129, -1.3674, -1.3338, 0.929, 3.0765, 2.6339, 3.5627, -2.2713, 0.6565, -1.2099, 3.6022, + -1.5938, -1.3264, 0.9856, 2.8765, 2.37, 1.2528, 1.2586, -1.2453, -1.3974, -1.4988, -1.6309, -1.2183, -0.1625, -0.869, 0.003, -2.0081, 1.358, 2.9585, 3.3396, -3.452, + -1.368, -0.6304, -2.5755, -1.2397, 4.9487, 2.7251, 1.4675, -0.1832, -0.3932, 1.4723, 1.741, 0.6216, -1.0849, -0.7112, -0.3751, -1.7539, 0.1222, 1.9858, -0.5248, -4.2444, + -1.2786, -0.2384, 0.6718, 2.9763, -1.6959, 6.4607, -3.9459, -2.056, -2.7306, -0.2583, 0.0389, -3.6271, -4.0721, 0.826, 0.8112, 2.8769, 2.24, 0.5444, 0.3571, 2.0995, + 2.5196, 2.3359, 1.662, 0.625, -1.0528, -0.9133, 1.8668, 1.2853, 1.4368, 1.4676, 1.1301, 1.3664, 1.1076, -3.2853, -0.453, 0.4467, -4.7302, -3.8149, -3.9866, 0.9865, + 0.1738, 1.294, 1.3514, -0.3684, -0.7078, -0.2329, 1.3467, -1.0678, -0.0262, 0.2448, -0.8418, -0.391, 2.7415, 2.9948, -4.5965, -0.1192, 0.2496, 0.4684, 0.0669, -2.5805, + 0.2482, -1.3236, -1.481, 0.9433, 3.4287, 2.2233, 8.9344, -1.1138, 0.4585, -3.747, 3.0416, -2.7394, 2.288, 1.6598, -3.6439, 0.0633, -2.7363, -1.2617, -3.1924, -2.05, + 1.4672, -1.3248, -0.5511, 1.4512, -0.471, -1.2381, 2.9453, -2.3244, 2.3249, -2.1969, 0.9414, -1.9926, 0.5254, 0.0792, -3.2076, -2.414, 3.5291, 3.5738, -0.0613, -1.0556, + 1.556, 0.0091, 0.077, 2.8542, -1.4594, -2.0102, 0.544, 2.8119, -0.2925, -0.7111, 0.9589, -1.6923, -1.8606, 1.104, -1.6733, -0.0895, 3.6894, 2.7628, -6.9922, 0.4138, + -1.5539, 0.682, 1.4458, 0.4297, -0.4115, -1.3266, 0.5024, -0.6975, -0.382, 1.284, 0.9597, -1.0561, 2.2198, 0.1292, 1.4343, 3.0313, -3.9845, 0.6776, 0.338, -3.7217, + -2.0283, -1.5216, 1.0103, 4.8788, 3.7028, 4.4, -0.3076, 2.4853, 2.2296, -1.5213, 0.436, -5.9903, -2.6578, -2.3985, -2.0127, 1.3737, -3.795, 2.3105, -0.2099, -0.3839, + -1.7339, -0.9861, -0.2078, -1.2579, 2.5808, -0.9255, 3.2388, 1.0999, 3.6754, 4.6424, 1.9111, 1.4716, 2.7531, -0.2725, -0.3573, -0.5392, -4.2109, -6.4662, -2.3713, -2.0442, + 0.7177, 1.4094, 0.7205, 6.8683, 1.7836, 7.1562, -2.9368, 3.4036, -0.6064, 2.3377, 2.8714, -7.0408, -9.7129, 4.1278, -3.4444, -5.9919, 5.5073, -0.8996, -7.5142, 1.2434, + 0.8042, 1.5886, 0.8754, -0.4378, 0.2336, 0.0424, -0.1245, 0.0847, 0.6402, 2.6508, 1.6375, -3.2393, -2.2823, -2.1435, -1.5628, 0.4271, 2.2571, 2.5048, -1.5933, -2.3629, + 0.6292, 1.1956, 0.8357, -0.8634, -0.1796, 1.8589, 0.694, 2.8309, 2.5569, -0.4253, 0.2913, 0.7772, 1.418, 3.421, -1.9468, 4.2236, -7.3361, -3.7802, -3.598, -2.6029, + 1.9034, -0.7126, -2.3343, 0.2344, 3.6545, 3.9405, 3.0203, 0.1937, -1.1906, -1.9012, -0.6667, -1.259, -1.1021, -2.665, 0.14, -1.4183, -1.2342, 0.0547, 0.1519, 1.1906, + -3.6125, -2.2485, -1.082, -1.9912, -1.1521, -2.2527, -2.5383, 0.932, 1.1572, 2.023, 1.6579, 1.3763, 6.4432, 2.1652, -2.0259, 1.9724, 3.2824, -0.4615, -1.1909, -2.4539, + -1.153, -2.179, -0.7355, -2.0941, 0.6246, 1.7502, -3.3266, -3.4374, -2.6486, -2.2938, 0.9286, 1.3396, -2.1323, 0.2739, 1.2664, 4.4111, 1.3864, 3.905, 2.8286, 1.2861, + -1.9752, 0.7423, 2.4137, 1.8854, -1.1393, -2.5802, -2.9355, -3.674, -1.8244, 0.3099, 6.1403, 4.6215, -2.0636, -3.7172, -0.94, 1.424, -0.3669, 2.0205, 0.6217, 1.0369, + -0.1561, 3.9621, -1.3649, 0.2912, 3.5366, 0.8537, -0.9376, -3.7333, -6.5447, -1.2107, 3.3183, 2.5758, 1.9693, -4.869, 0.6212, 0.0985, 1.5746, 0.2433, -2.6173, 2.389, + 0.6849, -1.1521, -2.0382, -0.8953, 0.8771, 1.1996, -0.9704, -1.3679, -1.146, 0.0582, 0.2636, -1.9785, 0.5235, 1.6427, 0.6362, 0.7411, 5.6052, -0.3533, 0.6579, -2.9883, + 0.5989, -3.9928, -2.1937, 3.8742, 2.0056, 2.3132, -0.4478, -2.0855, -4.3607, -2.126, 5.3544, 1.9827, 5.3407, -0.8346, -2.4624, 1.1729, -4.3825, 0.7623, -1.9429, 1.424, + -3.3103, 0.0394, 2.0113, 2.6733, 1.2484, -0.2186, 0.1156, -0.4856, 2.4501, 0.8179, -1.1164, -2.1952, -0.9719, 2.0728, 0.4002, 1.1891, 1.7518, -1.2571, -3.3136, -1.9012, + 1.886, 6.9767, 2.4311, -2.0414, 3.91, 5.5378, -1.7478, -0.8304, 2.8523, -1.4075, 0.1309, 1.8232, -2.8868, -7.5003, -3.4867, -3.2756, -2.8584, 6.2611, -7.4682, 1.694, + 3.5074, 1.3392, 1.0862, 2.9814, 0.8158, -2.616, -2.3837, -0.8255, -0.1595, 2.0087, -2.8876, -2.4727, -1.3574, -1.2864, -1.5711, -1.0772, 0.4648, 2.7262, 2.1044, -0.397, + -0.143, -0.9788, -2.1195, -0.7774, 4.0804, 3.7123, 1.5082, 0.2869, -2.5968, -2.0127, 1.5147, 3.7486, 3.2447, 0.6959, 0.3308, -2.4516, -3.4598, -4.1669, -0.687, 0.2709, + 0.0724, 0.3235, -1.9536, -2.7454, -3.3392, -1.9023, -1.015, 0.7511, -0.0539, -2.8386, 5.2737, 5.1053, 1.4372, 1.4046, 1.4504, 2.4912, -2.6526, -0.6188, -0.653, -0.5369, + -6.955, 1.3233, 4.3542, 2.9502, 0.9929, -0.1186, -0.8657, -2.3452, 3.5061, 2.8348, -4.1741, -4.1264, 4.697, 3.0117, -0.2849, -8.0081, 3.4452, 0.7819, -2.7443, 1.7251, + -4.0878, -0.8849, -4.7521, 5.0067, -3.351, -4.8233, -6.6328, 4.8752, -0.7474, 3.8614, 2.6271, 0.9119, 1.0371, 2.2968, 4.316, -3.7042, 0.99, 0.496, 4.7952, -2.23, + 0.5901, 2.0654, 1.7824, -0.557, 0.4874, 2.7659, 0.8232, -0.1306, -0.6795, -1.3143, -1.248, 0.9969, 2.0563, 0.1625, 0.7346, 0.0223, -1.6836, -2.9087, -4.1058, 0.1406, + -0.5074, -0.8373, -0.8579, -0.046, -0.0854, -1.4221, -0.6935, 2.5302, 2.2014, 2.2225, 0.5896, 1.2715, -0.7624, -2.7997, -5.3296, 4.0372, 3.2176, -1.4146, -1.3705, 0.0565, + -3.819, -1.1051, 1.5169, -0.5542, -1.5591, 0.2921, -2.1144, 1.6664, 2.8275, 0.7745, 2.6977, 4.4021, -0.201, 0.0685, 1.3158, -0.8045, -5.9834, 1.7874, -2.1592, 0.9509, + 0.6749, -0.0635, 0.3751, 0.6561, 0.4718, -2.3144, -4.9191, -3.0907, 0.5499, -0.3498, 1.237, 2.6699, 1.5353, 1.6809, 1.2117, -1.3733, 0.0977, 1.361, 0.0102, -0.4207, + 0.8139, -2.9454, -1.1694, 1.1826, 3.5742, 4.3331, 1.4143, 1.7017, -1.2428, 4.8459, -4.4642, -0.0684, -1.7273, -0.1932, -2.6041, -1.4272, 0.2873, -0.9676, -0.1422, -1.2013, + -1.869, 1.2475, -2.8884, -0.3842, -0.3588, 2.7759, -2.006, -2.2023, -2.6599, -2.5791, -3.1221, 3.2645, 1.8131, 2.863, 6.3144, -4.2619, 0.7589, -0.7608, 4.8657, -0.8104, + 2.3449, 0.3057, -2.2411, -1.3084, 0.6572, -0.379, 0.2674, 0.5337, 0.4996, 0.8832, 2.3616, 3.9339, 4.7846, -2.7473, -0.5167, -0.0864, 0.9288, -4.3018, -4.0903, -1.8294, + 2.9658, 2.7467, -1.9276, -4.0009, -0.7257, -0.6616, -2.0255, -1.2898, 0.3022, 1.581, 3.0521, 2.579, -3.2369, -0.4791, 0.4455, 0.1138, 1.1032, 0.9003, -1.5708, 0.1285, + 5.2204, -2.819, 0.8203, 0.5992, -1.3205, -2.1549, 5.0256, -1.605, 0.5506, -2.8092, -0.2831, -1.6376, -1.8233, -0.0177, 2.5319, 2.0586, 0.9166, -1.5417, -0.3071, -1.4039, + 0.109, -0.1359, -0.4821, -0.506, -1.1903, -0.1205, 1.301, 0.0989, 0.228, 1.3298, 1.4648, 0.728, 0.0076, -1.4837, -0.1633, 1.2525, 0.9437, -0.0019, -3.9783, 0.5988, + -4.0941, -3.422, 0.4966, -5.4678, 6.0636, 1.1749, -0.183, 3.3518, 3.548, 1.4243, 2.5791, -5.9065, -1.8723, -1.6703, 1.399, 6.8845, 1.8643, -1.2344, -3.7475, -1.188, + 3.5819, 1.2282, -0.2187, -0.8194, -0.0683, 0.6784, 0.9405, -0.1871, -1.0635, -2.3089, -1.7476, -2.3377, -1.8039, -0.2123, 0.7402, 0.881, 0.7063, -3.8015, 4.2698, 1.5426, + -0.7508, -2.5319, -1.4606, 1.0638, -3.8848, 1.206, 2.6878, -1.2315, -0.1629, -2.273, -3.3361, -1.6208, 1.9855, 3.4308, -0.212, -1.4559, -0.3738, 2.3568, 2.3629, 4.2004, + 1.5564, 1.6137, 1.4225, 1.6668, 1.3266, 0.046, 0.1831, -0.3664, -1.4348, 2.569, 2.2918, 1.6955, 1.668, -1.3807, -1.0884, -1.098, -0.5844, -1.0295, -3.6955, -5.3616, + 1.7128, -1.8066, -4.0653, -3.8214, -0.9531, 3.4797, 0.7961, -2.4955, -2.7851, 0.0025, 0.7872, 1.0652, 1.5456, -0.4352, 1.9173, 4.6258, 0.3691, -0.1501, -0.2351, 0.4458, + -1.6777, -3.1299, -1.6947, -1.1535, -2.1999, -3.2226, -0.9846, -2.1533, -0.6467, 2.0938, 2.1307, 2.9065, 1.5181, 3.0875, 0.0486, -0.2157, 1.3461, 0.7741, 2.732, 0.4413, + -2.0098, -0.0651, -1.1313, -3.1454, -1.8173, 0.4664, 2.3278, 3.1806, -3.0726, -1.5969, 3.6994, 0.6478, -0.6833, 1.0635, 1.1405, 6.7102, -4.8934, -4.2029, 3.4752, -0.0933, + 3.0911, 3.132, 3.6764, 1.2247, 2.0977, -0.4399, -3.947, 1.4276, -0.2596, 0.5511, -6.4999, -0.9385, 3.2215, 1.7397, -2.0786, -2.616, -3.015, -2.0586, 1.9218, -0.2304, + 0.5955, -0.9572, -3.8115, -1.2133, 0.96, 3.0247, 8.636, 5.7851, 6.1244, 0.7094, -2.441, -1.1712, -1.7901, -3.5399, -2.8318, -2.5468, -4.9596, -0.6022, 0.6141, -0.5845, + 12.5835, 1.8094, 0.1352, 1.7718, 0.9427, -1.369, 7.1277, 0.0421, -2.3404, -4.665, 1.4653, -2.488, 2.6056, -10.3828, -8.1067, 4.1108, -1.2481, -1.833, -2.7827, 2.6214, + 2.9658, -0.2617, 0.2806, -0.2164, 2.855, 1.9755, -3.5301, -1.235, 0.9311, 0.8713, -2.2265, -0.6005, 2.6386, 2.7666, -2.3603, -2.5163, 1.6854, 1.0161, -7.8883, 2.8489, + -0.9445, 0.6006, -1.3214, -5.0651, -2.1702, -0.0289, 0.1003, 2.2883, 0.0424, 3.4686, 2.0494, 1.6327, -1.6152, 0.122, -2.8666, -2.2261, 4.9579, -2.2581, -2.7323, 5.9663, + -1.3666, -0.2364, -0.3999, -0.9988, -2.0227, -0.061, -0.5411, -2.2113, -0.2283, -1.715, 1.0239, 4.276, 1.9603, -3.0526, -2.5894, 0.8611, 5.2528, 3.4951, -2.2336, 0.7875, + 4.7609, 3.7023, 0.7955, -3.1291, -1.3671, 0.8798, -0.9947, 0.2668, 0.5762, -0.9479, -4.5541, -0.6922, 0.0699, -5.8412, 4.2302, 5.0652, 1.3544, -2.4661, -0.6224, -1.0865, + -2.6815, -0.9958, 1.6109, -1.7618, -2.5561, 1.0357, -1.5863, -2.2811, 3.4491, 1.1806, -0.2855, -0.138, -0.0202, 5.6861, 0.8289, -1.0913, 0.5986, -1.1493, 3.2455, -3.0884, + 1.7353, 3.1908, 5.0898, -0.4602, 0.0751, -2.1427, -5.091, -3.1667, -3.3291, 1.9531, 0.4802, -4.8101, 2.2518, 2.438, 0.6439, -7.3548, -0.0689, 1.8997, 5.717, 0.9491, + -1.1588, -3.1119, -3.4525, 0.2538, 1.3345, -1.05, -0.387, -0.0472, 0.1522, 4.0806, 2.8886, 3.8741, -1.9507, -2.9183, -0.3828, -0.0805, 0.4136, 1.1466, -3.1863, 3.5818, + -4.1654, -5.7362, -5.0041, -0.9889, 4.1884, 4.8135, 1.5658, -2.3781, 0.8425, 7.5151, 7.3977, 3.9243, 0.6283, 0.9194, -5.0741, -1.9566, 0.21, -4.9786, 0.876, -2.5989, + -5.3114, 2.2992, -1.9803, 1.215, 9.1545, -2.196, -2.8749, 9.6686, 0.5512, -4.17, -1.1338, -4.1549, 1.6645, -3.1643, -1.78, 4.9896, 0.339, -0.0421, -1.0391, -2.0347, + 1.074, 2.184, 0.9247, 2.0617, -2.1994, -4.0653, -1.5118, -0.9397, 1.3781, 2.9104, -0.8864, 8.5382, 0.5495, -3.5922, -0.2482, -0.5485, -0.9604, -1.8453, -3.1808, 0.3575, + 3.5141, 2.7621, 1.2101, -0.3665, -1.1827, -0.5351, 0.4822, 0.7598, 0.8241, 1.4976, -0.8943, -2.8067, -2.3512, -2.0448, 0.3706, -0.9201, -3.9192, 1.1431, 0.4761, 1.9809, + -1.7817, 1.1939, -1.2195, 1.7524, -4.7374, 1.152, 0.0973, 1.5475, 2.2848, -7.787, 2.0346, 0.5213, 2.8861, 3.1077, 1.1974, 2.3936, -1.4248, -0.2888, -1.4706, -1.4588, + -0.7677, -2.0426, -2.9918, -1.8722, -1.4336, 0.4207, 1.4107, 1.0509, -0.1714, 0.2221, 1.3054, 0.5884, 3.1454, 1.8747, 0.151, -0.5701, 0.5457, 2.7058, -0.0854, -3.4859, + 1.6593, 1.0024, 0.3202, 1.0267, -0.2368, 0.1208, -0.7272, -1.0487, 0.2686, -1.0197, -1.3131, 4.1829, 1.0297, 1.7779, -3.0898, -0.7777, -4.5532, 2.1765, -0.31, -0.4886, + 2.9341, -0.2895, -2.421, 0.9438, 2.949, 1.2447, -0.4279, -0.4133, -0.2487, 0.6464, 0.1859, -0.8613, 0.069, -2.0024, -3.5783, -0.9123, -2.3469, 0.3089, 5.3909, -1.171, + 13.8818, 0.6217, -0.6459, -3.4218, 0.8331, 0.8918, 2.2009, 4.0596, -3.038, -7.3862, -3.2105, -2.2108, 4.7972, -5.3735, 3.887, -1.819, -0.5123, 0.9752, -3.6921, -0.8383, + 0.2536, -11.0226, 4.4625, -7.9396, 8.6657, 2.6088, -1.0215, 0.4492, -5.0641, 2.7194, 1.1735, 2.207, 3.3733, -0.2605, 5.5319, 3.5989, 0.2759, -3.6185, -2.9338, -3.4591, + -0.2533, -1.2245, -1.1924, -0.1962, 0.6099, -2.1289, -2.0002, -2.039, -1.5592, 0.7879, 0.1165, -0.9325, -1.5485, 0.4552, 0.3883, 1.9054, 2.3495, 3.9138, 2.3594, 0.1886, + 0.175, 3.7528, 1.6899, -4.327, -5.0437, -3.141, -4.7768, -1.9628, -4.5893, 5.9435, -9.6773, -0.4601, 3.0571, 1.2797, 0.1161, 3.5574, 3.7157, -2.0222, 5.9308, 6.7823, + -0.6999, -2.9933, -3.6606, -0.6207, -1.4032, -1.1364, 0.253, -0.9004, -2.7685, -4.3142, -0.7561, 0.8142, -0.4715, 0.8444, 2.0053, 0.5983, 3.3363, 4.4913, 6.9146, 0.4673, + 1.0959, -0.0886, 0.2379, 3.2725, 1.2016, -1.1581, -1.364, -0.6268, -0.3678, 0.9051, 0.7593, -2.2902, -1.4578, 0.6349, 0.5115, -4.4984, 2.2315, 2.2535, -2.7867, 1.5345, + 3.6055, 3.8842, 2.1794, -0.7568, -1.05, -2.1686, -0.6731, -2.0718, 0.8001, -0.6819, 1.1112, 0.5707, -2.4862, 3.1489, 2.6767, 2.5134, -1.9147, -4.1519, -2.4548, -2.0802, + -1.9388, -0.7447, -0.8349, 0.1123, 0.1251, -1.3476, -2.6413, -0.477, 5.6864, -1.8563, -3.3514, -0.5309, -1.6295, -1.3453, -0.4664, 4.593, 1.1909, 2.9264, 0.9356, 1.5944, + 0.5951, -0.4177, -0.1304, 0.5462, -1.3265, 1.4534, 1.6425, 0.973, 0.8946, 2.1586, 4.2557, 0.8968, -5.0524, -1.9576, 2.6089, 0.6571, 0.7918, -2.2504, -4.5907, -1.748, + -1.6456, -2.0706, -2.4462, -2.5983, -2.5056, 2.0863, -0.9159, -0.8806, -0.8052, -0.7776, 1.0285, 0.4522, 1.5131, 3.453, 4.933, -2.7752, 1.775, 2.1982, -0.0181, -0.0006, + 2.2117, 0.6658, -0.1647, -0.7769, -0.3291, -0.0686, 3.183, 1.8603, 1.0488, -0.7866, -1.0352, 1.6465, 0.2395, 0.3989, -1.2496, -1.9498, -2.6996, -7.5216, 1.332, 3.9951, + 1.0405, 1.3681, 2.7153, 3.0279, 2.8206, 1.9933, -1.5434, -2.0223, -1.049, -1.2756, -0.1434, 0.2554, 0.8858, 1.3178, 0.3714, 3.567, -3.1912, -1.0147, -3.0243, -6.0993, + -0.8348, -2.4017, -3.6731, -2.0399, -0.2474, -1.064, -1.1488, 1.3352, 2.8367, 5.1498, -0.0673, 1.7148, 2.0672, 0.78, -2.8302, 2.8981, -0.7525, 1.3119, -2.4119, -0.6222, + 3.0927, 2.0509, 2.4548, -1.3001, -3.9942, -0.7486, 2.8523, 0.1569, -4.3404, -10.5627, 4.2087, 4.2968, 2.7013, -1.1646, 0.2008, -2.4272, 1.8708, 0.5192, -2.3092, 2.4416, + 0.6449, -3.5216, -3.8362, 2.1329, -1.2999, 0.6434, -2.5079, 3.1409, -0.943, 2.1409, -0.9005, 2.6639, 5.842, 2.2508, -0.1834, -3.5407, -2.0329, -1.9827, -0.2675, 1.5565, + 5.1512, 4.1361, 0.9497, -3.1897, -6.0608, -4.8346, -0.7128, -2.1849, -2.1809, 0.1265, 0.3295, 0.2665, 1.1233, -0.4722, 2.7945, 1.1909, 0.4093, 1.9529, 0.638, 0.5674, + -2.0255, 1.8944, 3.261, -0.6543, -0.1603, 1.6419, 1.8339, -4.1284, -1.6495, -7.4417, 2.7611, 3.0349, -5.4696, 5.3754, 0.2729, 5.17, 0.7296, -0.1265, -1.6533, -2.6659, + -7.1882, -6.8851, -0.9549, 2.6573, 1.6288, -0.3149, -2.2361, 1.6706, 4.0565, 3.2723, -2.0478, -0.6505, 2.7769, 4.9536, 1.831, -4.1026, -0.854, 2.2409, 0.8671, -0.7209, + 0.8703, 1.1461, 2.9551, 0.5102, 0.4539, 9.1307, -3.4339, -1.5513, -2.2902, -4.1038, -6.058, -0.8757, 3.583, 2.5081, -1.9449, 0.3605, 0.8645, 0.6768, -0.2206, -2.5809, + -4.5091, -1.0618, 1.6342, 0.589, 1.0199, 0.707, -0.4636, -0.7393, -2.0902, -4.3948, -1.8491, 2.8967, 1.9263, 0.6394, 4.9955, 3.9485, -0.2145, -1.3652, -1.4955, -0.1736, + -1.2527, -0.6868, 0.0359, 0.5854, 0.7286, -0.5988, -1.0892, -1.2358, -0.5524, -1.8766, -4.8554, 1.3154, 3.0969, 1.2141, 0.4785, 0.5435, 0.966, 0.9526, 2.5969, -0.3662, + -3.4429, -2.5359, -0.7902, 1.6794, 1.395, 0.9304, 0.5281, 2.0451, -0.282, -0.762, -2.3113, -2.5279, -1.2407, -4.6199, 3.9276, -1.3637, 2.0692, 2.0266, 2.415, 2.8601, + -0.0841, -1.4504, -2.5295, -2.1914, 0.016, -1.5806, -3.8581, -1.8751, 1.241, 1.4792, -0.0268, -3.0304, 1.1672, 3.1034, -0.0043, -1.775, 1.0722, 5.8103, 3.7335, 0.783, + -1.2601, -0.9248, -0.9753, -1.158, -0.4657, 0.9286, 0.4457, -0.7164, 2.9298, 6.0232, 1.1288, -9.2201, -2.6002, 1.0866, 3.5907, -0.3994, -0.8783, -0.4493, 3.0463, -0.132, + -2.6865, -1.7683, 0.5719, 4.2697, 0.4434, 0.9403, -0.1787, -3.9995, -1.4954, -2.9666, 0.5871, 0.7458, -0.5643, -3.3758, 2.4009, 1.363, 3.2345, 2.9305, 0.6423, -1.0943, + 0.2605, -0.1269, 0.1894, 0.8801, 5.6065, 4.4842, -0.336, 1.6337, -1.008, 2.2349, -1.3371, -3.4195, -1.5849, 3.4658, -2.7632, -2.8878, 0.2535, -1.0857, -3.4858, -0.9736, + 0.5903, -1.1309, -3.8731, -2.8181, 0.6957, -2.193, -3.7976, -0.1684, 0.3131, 0.8609, 0.0568, -0.1356, 5.9915, 2.3704, 3.984, 0.584, -1.9366, -2.6479, 0.4937, 2.7608, + -1.4917, 0.6707, -1.8279, 0.4736, -4.3226, 7.6508, -0.677, -1.0388, 1.6577, 3.4357, 2.121, -1.6783, -1.9394, -0.4857, 0.0446, -2.1769, -1.5641, 1.5895, 1.475, -1.9161, + -2.4617, -1.4865, 0.9268, 3.7356, 1.9298, -1.0879, -0.9003, -0.6573, -0.4536, 1.1463, 2.5279, -0.9025, -2.1547, 0.5579, -1.4546, -2.5618, -1.102, 1.7633, 4.9058, -2.2707, + 3.2436, 2.0698, 1.3674, -1.4618, -0.4269, 1.2764, 0.316, 1.2237, 0.7208, 1.5117, 1.4584, -0.5527, -0.7757, -2.7217, -4.0792, 1.8261, 2.7197, -3.9546, -1.7508, -2.0101, + 0.2659, 1.9357, 0.5705, -1.8509, -5.0017, -3.7512, -2.7574, 0.2996, -1.125, 0.6895, 2.7521, 3.709, 3.4556, 6.5334, -3.5389, -3.897, -2.9436, 0.765, 1.5177, 2.3717, + -1.2532, -0.7651, -0.7634, -1.69, -2.3167, -1.0574, 0.9291, -0.7963, -1.477, -1.6646, 0.5558, 0.7009, 3.4059, 9.2719, 1.4172, 2.4588, -0.7901, -3.7873, -1.0613, -1.3173, + 3.2264, 0.6063, -2.4159, -3.8529, -1.9936, 2.6889, 2.5115, 0.8341, 0.8209, 1.2008, 0.7255, -2.1489, -1.1543, -0.6443, 2.0479, -0.7011, -0.5619, -0.082, 0.5538, -1.6613, + 0.89, 0.2673, 1.2328, -0.1459, 2.5186, 2.3429, -0.5461, -0.5497, 1.9452, 5.1637, 1.5156, -3.9805, -1.5621, -1.5331, -2.7711, -2.2357, 0.7958, -1.6083, -2.3152, 0.5758, + 4.0233, 3.7838, 3.0862, 2.468, -0.8644, -2.4804, -0.9694, -1.9035, -3.4966, -3.959, -3.9724, -1.208, -1.6237, 0.7915, 0.4354, 0.8419, 1.1287, 1.8538, 2.3476, -0.2827, + -0.5315, 1.6742, 2.6296, -0.5391, -1.8812, 2.7171, 6.8646, 3.9934, -2.0577, -0.8537, -4.3316, -2.4473, -2.8864, -0.3456, -1.9169, -1.4494, 0.4578, 1.9608, -0.1673, -0.8898, + -2.1559, -2.48, -1.5001, 1.3457, 3.3362, 2.6367, 1.4331, 2.3397, 3.7557, 3.4063, 1.6588, 1.2723, -0.3658, 0.5614, -2.5827, -5.6096, -3.4952, -4.1966, -1.5564, 2.1965, + 0.1567, -1.6324, -1.8735, -2.1011, 0.8687, 2.8596, 1.0227, 5.0782, -3.8186, -0.4012, -1.0627, -1.0858, 2.3105, 2.5822, -1.0014, -0.6915, 1.2628, 0.1273, -4.312, 1.7113, + 0.5493, 0.1877, -0.3065, 0.0805, 0.17, -0.4682, -0.7192, 0.7521, 1.1935, -1.2445, 0.5061, 3.0407, 3.3122, 2.9044, 2.0613, -2.6946, -2.8479, -1.4855, -3.4536, -1.5377, + 1.2611, 1.2112, -0.4954, 1.5849, 2.8817, 0.5597, -3.2189, -1.8993, -2.3996, 0.0235, -0.927, -1.1263, -1.6443, -3.5163, -1.2543, 1.841, 4.5628, 1.0754, -0.1607, 1.6406, + -0.8759, -1.6975, 0.2532, 6.4042, -3.4246, -2.9858, 1.9661, -3.2513, -4.0109, -0.5134, 2.5545, -3.0437, -2.1093, -3.6915, 4.1398, 6.0036, -1.3456, 1.3628, -1.0285, 5.294, + 8.8405, -7.236, 2.8239, 7.1563, -1.4248, -8.041, -1.9196, 1.8187, -0.932, -3.1134, 1.9133, 4.5783, 5.5866, -1.744, -0.1615, -9.2039, 4.4457, -2.5424, 2.5822, -3.4268, + -1.9594, -0.144, -0.0014, -0.5248, -1.274, 1.9184, 0.2637, 0.9658, 3.9879, -1.7646, 0.8739, 3.6824, -1.4748, -0.5493, 4.194, -0.5892, 0.9704, -2.3393, -5.2036, -1.0319, + -1.8153, -0.8777, -1.3975, -2.8688, -1.315, 0.6005, 2.0795, 2.0158, -0.0187, 2.3273, 5.2446, 3.191, 0.542, -1.0394, 1.3294, -4.655, -1.5318, -1.6999, 0.2573, -0.3684, + 4.3069, 1.2137, -1.8464, -3.0026, -0.9539, 3.1554, 3.4215, 2.0922, 0.4828, 1.6102, 1.1857, 1.5577, -1.8593, -2.9907, -3.064, -4.6355, -1.6614, 1.3592, 1.5116, -1.8833, + 0.6407, 1.1519, 1.5429, -0.7369, -1.7269, -1.6671, -0.129, -0.7049, 0.8116, -1.2198, -4.0157, -5.1437, -3.1965, 2.3418, 0.7111, 2.6992, 0.5585, 1.9829, 4.9644, 1.1355, + 0.6364, 2.1072, 0.987, -5.1572, -4.3363, -1.0839, -1.3521, 1.8709, 0.8132, -0.2938, -0.2079, -2.5242, -0.8999, 2.3401, 0.7392, 3.1549, 3.0568, -1.1375, 0.0963, 1.1908, + -0.0136, -2.4241, -0.4209, 1.6339, 3.4114, 3.5889, -1.41, -3.5651, 3.1831, 2.0426, 0.5548, -2.0177, 1.6429, -3.2634, 1.578, -4.1305, -0.9389, 0.1651, 0.4588, -0.0751, + 2.0687, 0.8544, -0.3821, -0.1978, 1.0057, 2.3289, 3.0174, -0.333, 2.0178, -0.6679, -0.1993, -1.917, 1.6018, -0.3834, 0.6526, 1.9588, 0.3355, -2.0462, -4.1767, -5.5379, + 2.7809, 0.2282, 0.482, 1.9051, -1.735, -3.4716, -3.3685, -1.3005, 0.1251, -1.5366, -1.9516, -2.1469, 1.2541, 3.7123, 3.039, 0.8154, 2.3154, 2.5014, 0.0685, -3.7166, + -2.7442, -0.5589, 1.8753, 0.2528, -1.7122, -1.5279, 0.3471, 1.3429, -0.0809, -1.0979, -0.5556, 2.8899, 0.2864, 2.18, 1.7006, -3.4442, -2.6681, 2.9174, 1.9107, -1.3132, + 1.1471, -0.3191, -2.5131, -2.6788, 2.7236, 4.0318, 2.942, 3.1336, 1.5351, 0.48, -0.0086, -1.0945, -1.1975, -0.4758, 0.1588, -0.497, -0.2437, -3.5219, -3.3061, -0.2958, + -0.6947, -3.5085, -2.7613, 0.0475, 0.2365, -2.4104, -0.4597, -0.9262, -0.2261, 1.8983, 0.9162, 0.3544, -1.0767, 2.3229, 2.3748, -1.6417, 3.4712, -3.6716, 0.1472, 5.6077, + -1.7531, -0.9915, -0.4352, 0.4089, 0.189, -1.7111, -0.6401, -0.9353, -0.5743, 0.3365, -0.6869, 0.9392, 0.8776, -0.2201, 0.7815, -1.7487, -0.2509, 3.0732, 0.2971, 3.0442, + -6.4696, -1.5332, 1.3136, 7.9582, 4.7035, 0.4178, -1.4784, -2.4577, -0.6662, -2.4183, -3.1348, -2.0591, -4.3423, -0.208, 1.5975, -2.6953, 0.1211, 4.7779, 4.5315, 2.0419, + 0.8642, 3.0824, 1.7461, -0.8529, 0.9231, -0.3502, -2.7586, -2.7081, -1.4853, 1.1577, 2.4953, -2.0279, 3.1643, -1.1352, 0.2786, -0.165, 2.423, -0.5282, -0.4006, -3.7227, + -3.9091, 0.2639, -0.0395, -5.0339, 1.4635, 7.9381, -1.8279, -7.5321, 1.8947, 0.9696, -7.1991, 7.7502, 4.8838, -5.2722, 5.2271, 6.4012, -8.2785, -5.8271, 0.4487, 7.6786, + -0.4051, 0.3015, -0.5211, -1.1563, -1.5548, -0.8506, -1.7742, -0.6679, 0.3853, 3.9695, 3.145, -3.5632, -0.3392, -3.3757, 1.3514, 4.4934, -1.2754, -0.4248, 1.0022, 1.2601, + -3.0667, 3.2388, 3.6288, -0.3263, -3.6989, -4.3941, -3.0073, -2.9882, -2.7834, -3.8873, 2.3701, 6.1068, 1.0432, -2.8444, 0.146, -2.5272, 1.8208, 2.6818, 7.7176, 0.7699, + -0.8674, 0.6588, -0.0766, 1.935, 3.3452, 2.7012, 0.4707, -0.8282, -0.7703, -3.8252, -2.8814, -0.2389, -1.3895, -0.9376, 0.2572, -3.4418, -2.3763, -1.8695, 7.4789, 2.6558, + 0.8567, 1.9741, 0.6363, 2.1993, 1.9072, 2.2211, 3.7376, -0.0455, 1.3289, -1.0736, -4.8817, -4.0284, 2.4624, 1.0596, -3.8101, -3.8498, 0.8895, -0.5176, -2.3743, 1.3083, + 3.7465, 3.5865, 0.1979, 0.4072, -1.1714, -1.4598, -2.1688, -1.4971, -1.1953, -2.8028, -1.8515, 1.1483, 3.7654, -2.6485, 1.2635, -2.4929, -1.4965, 0.6356, 3.3756, 0.6583, + -1.7286, -0.6675, 0.3769, 1.1159, 0.0587, 1.4828, 1.214, 6.0165, 1.2212, -3.4526, -2.4321, -0.8616, -2.2663, -0.0017, -0.0046, 0.2615, 0.0517, -0.8546, 0.5801, -0.1095, + 3.4455, 1.4668, -0.0851, -2.9245, 0.0932, 1.2861, 1.125, -0.6317, -4.0005, -4.4206, -1.5097, 1.3643, -0.1238, -0.8046, -2.45, 4.2293, 2.9297, 3.2594, -3.0122, 0.7633, + 2.2354, -0.6334, -2.7256, -1.7876, -1.8603, 0.6549, 0.1244, -1.81, -1.7636, -2.7665, 1.0419, 3.6034, 2.7187, -5.8124, -0.9848, 2.8478, -0.3193, 3.4835, 2.5353, 1.2184, + 3.0602, 4.3425, 2.426, -0.5623, -0.8919, -0.273, 1.3901, 0.4772, -0.5219, -1.3754, 0.4815, 2.4087, -5.0472, -5.6009, -2.8901, -2.4607, 1.8809, 3.5997, 3.9232, -4.3669, + -0.0346, -0.2122, -0.229, -0.9365, -0.4221, -1.93, -2.3572, -2.9919, -2.2394, 3.2115, 2.4104, 2.4249, -0.5682, 1.5001, -1.3857, 2.614, -1.8866, -5.618, 7.3368, 1.3135, + -0.4484, -1.1107, -1.9143, -1.2992, -0.5392, -1.0181, -0.6562, 0.5186, -0.7919, -1.4379, -4.0959, 2.4107, 1.5417, 0.0557, 3.4844, 1.7096, -0.8275, 1.7994, 2.0983, 0.5209, + -0.4549, 0.183, 0.2262, -2.2572, -1.5931, -0.7026, 2.6431, 2.6098, 4.0381, -0.4805, -2.9134, -3.5443, -0.6536, -2.1551, 2.0956, 1.2393, 0.2979, 0.9155, -2.0621, 2.5682, + -0.1092, -1.2889, -2.5682, -2.3378, -1.7259, -0.5628, -0.6114, -2.8295, -2.569, -3.3678, -2.2669, 0.6023, 0.3823, 5.9006, 5.7607, 1.9871, 0.6942, 1.2471, 3.2445, 0.4186, + 0.6515, 1.8638, -0.3444, -2.0169, -0.6995, -2.9879, -2.4596, -1.0847, -0.8686, -2.3776, 2.0331, 4.8909, 4.1694, 1.269, 1.4079, 1.9289, 1.882, -0.9986, -3.0198, -3.239, + 1.7936, 1.2201, -1.9231, -2.6761, 1.6107, 7.0585, 8.8031, 2.9894, -2.3291, -6.5825, -1.5641, 3.0126, -4.0096, -4.0332, -0.6223, -0.5985, -0.8359, 1.2689, 0.3585, -2.941, + -1.2384, -0.3295, 2.3565, 3.0657, 3.2204, 1.089, -0.5456, 0.1283, 2.9904, -0.097, -5.2104, -1.5801, -2.5751, -2.3243, -0.3014, 2.6881, 0.5623, -1.5424, -1.9388, 1.5825, + -2.6631, -2.8705, -3.6445, -0.1511, 1.0369, 4.6018, 2.7993, -0.5794, -0.1152, 0.9196, 4.1279, -0.7083, -3.1505, -2.187, -2.5145, -0.8667, 1.9629, 3.781, 1.8562, -1.6347, + -3.7832, -0.9972, 1.0298, 0.8253, -2.4369, -3.3827, -2.6892, -0.8231, -1.082, -0.0375, -0.7937, -1.8433, -0.5302, 3.8146, 2.3123, 1.6122, 4.1004, 5.6672, -1.045, 0.0824, + -0.1, -2.02, -0.5383, 2.2917, 0.8366, -2.2105, -0.8495, 2.1052, 3.4989, -0.0827, -0.3031, -1.7154, 1.3463, 5.4572, -3.0939, -0.0935, -1.1704, -5.241, 2.43, -0.5476, + -3.7789, -1.9485, 1.8338, 2.9833, 0.6807, 1.8337, 5.1432, -0.4532, 0.5973, -0.6042, 0.8753, -1.5014, 0.4292, -2.2709, -1.2993, -0.1667, -1.6955, 1.1932, -6.0865, 4.2353, + -0.492, 0.0568, -2.6837, -3.2294, -0.292, -0.679, 2.7843, 3.0219, 1.7934, -2.2037, -3.0967, 1.8829, 0.5782, -1.6334, 1.9235, 4.5606, -4.2261, -0.0121, 2.2982, -0.3517, + -0.6429, 2.5139, 2.3667, 2.2, -1.8905, -1.3195, -0.0575, -0.672, 2.8832, 0.3828, 0.9744, 2.9334, -0.6053, 3.2595, 2.5269, 0.0016, -5.8119, -0.9627, -4.8744, -3.2058, + 0.8584, 0.9302, 0.363, -0.3058, -0.919, -1.1142, -3.3748, -2.621, 0.9921, -0.044, -0.2277, 0.806, 1.7478, 2.0581, 0.39, 4.4187, 5.843, -6.6138, -3.1191, -0.068, + 0.3281, -0.0986, -1.1173, -1.9481, -2.4515, -1.0863, -1.3545, 1.1448, 2.8412, 3.7501, 2.6741, 2.7224, 1.8554, 1.4018, -3.7195, -2.9142, -1.2068, -4.2062, 2.968, 0.417, + 0.2181, -1.3017, -1.3715, -0.9326, -1.1639, -0.6082, 2.2905, 2.1838, 3.153, 3.3746, 2.0088, -0.8055, -1.0486, 0.7007, -1.796, -0.3898, -2.4327, -2.4057, -2.1793, 2.506, + -2.4912, -0.4925, 1.9418, -0.632, -1.0125, 1.8048, -1.536, -1.7457, -0.3001, 0.5912, 0.4548, -1.4661, -1.5177, -0.5917, 5.6377, -3.6558, 1.8798, 3.7139, 3.0715, -3.6543, + -1.077, 1.7774, 3.6503, 0.2492, -2.5625, -1.2989, 0.3077, -1.4511, -0.7454, -1.0293, 0.9281, -0.097, -1.418, 0.5544, 2.007, 3.1415, 2.3666, -0.7117, -2.8143, -1.777, + -1.8815, -2.2795, -1.158, 1.0865, -0.0453, 1.6476, 0.0859, -1.8231, -0.7599, -1.0013, 0.0173, -0.6116, 0.011, 0.6057, 0.1048, 0.392, 2.8241, -0.4223, -0.292, 3.4995, + 0.0544, 2.8654, 4.0202, 1.6845, -1.8534, -2.9185, -1.4228, -3.6388, -2.021, -2.4342, -3.4254, -1.7961, 2.7218, 6.6019, 2.278, -0.0758, -2.1727, 1.0645, -0.3083, 0.7762, + -4.2733, -4.7209, -2.5347, -4.1434, -2.3709, 0.1195, 0.9517, -1.8672, 1.5567, 3.4133, 0.9511, 6.1534, 5.0591, 3.3617, 4.3448, -0.8335, 0.0697, -1.2096, -2.2085, -1.8188, + 0.0539, 1.0537, 0.6965, 0.7551, -2.3328, -4.4085, -1.7944, 4.6582, -1.8228, -0.38, 0.4342, 0.9079, 1.1727, -0.2538, -0.9787, 1.6403, 0.3758, 0.2889, -1.0679, 1.0017, + 0.9075, 0.5642, -0.6092, -2.8652, -3.3111, -1.2627, 1.6981, 0.5866, 2.5675, 2.8589, 1.6024, 2.0917, 0.4354, 1.0342, 1.2054, -2.7817, -0.5893, 0.0883, -2.8199, -1.401, + 0.898, -0.3869, -0.4833, 2.6033, -0.0884, -0.3699, 7.2953, 1.6809, 0.8531, 1.6498, -4.4993, 0.0072, -1.9421, -1.8001, -2.5825, -3.6475, -2.3221, 0.6178, 0.3128, 2.204, + -6.0307, -1.3653, -0.3786, 0.0247, 0.6616, 0.7676, 3.3234, 3.0965, 0.7765, -0.6097, 1.0441, -0.9142, 1.6186, -9.2158, -4.2017, 2.5866, 2.2875, 2.0945, 2.8697, 1.5646, + -0.3542, -0.028, 4.1718, 2.5282, 6.0404, 2.9659, -1.0269, -1.4497, -5.6815, -3.9178, -3.928, -6.4467, -2.5804, -4.6703, -1.3963, 3.1437, 4.398, -0.5477, 2.7035, 6.0758, + -1.5432, 3.8376, 1.421, -1.1449, 0.4892, 1.3172, -2.0383, -2.2564, -2.1791, 3.0272, -4.0284, -1.3615, -1.9716, -4.988, 3.88, 2.5715, -2.8049, 5.2429, -2.0992, 4.629, + 1.9112, 0.2401, 1.209, 1.9221, -0.5051, 2.0731, -0.8317, -1.4381, 1.1319, 0.2604, 4.857, -4.2486, -4.2343, -0.1445, 2.6106, 1.1135, -3.459, -1.7688, 1.2613, -1.96, + -4.6396, -2.9689, 0.9238, 0.7657, 0.5574, -0.365, -3.7022, -4.0756, -5.0362, 0.3243, 3.188, 1.727, -0.7319, 2.9308, 3.7592, 2.6099, -0.3181, 4.3233, 1.9146, -1.1863, + 0.198, -2.2883, 0.933, 3.8033, -3.0797, 0.0635, -1.8773, -1.7344, -1.0161, 0.156, -0.1661, -3.8927, -0.3658, 0.3316, 1.1226, 1.9542, -1.049, -2.2906, 3.6658, 5.5322, + -0.8058, -0.987, 1.9765, 0.8081, -0.8891, 1.6549, -1.7178, -0.2062, -0.6134, 3.7968, 2.8384, 4.3753, 1.2045, -6.0029, -1.5145, -3.5656, 0.8785, -0.8278, 0.9419, -1.3448, + -1.9513, 2.4604, 2.9573, 3.3043, 2.2986, 1.0394, -0.4185, -0.089, -0.2841, 2.2073, 1.6514, 0.3367, -1.0792, -1.4676, -0.885, 1.7747, 0.0695, -7.9932, -5.3486, 1.4171, + -2.8766, -0.2007, 0.3439, 0.7801, -0.0362, -1.8832, 1.2162, 3.7611, 1.5511, -0.2914, 4.4891, 2.4265, 0.517, 1.2791, -3.0822, -4.3172, 2.155, -1.7349, -2.5924, -1.5044, + -1.3853, -0.5001, 0.6365, -1.9167, -1.9693, -1.6932, -2.5123, -3.1209, -1.5363, 3.8772, 1.7176, 4.5613, 2.2969, -1.7507, -0.4549, 2.7398, -2.2572, -0.1132, 1.3625, 2.0183, + -0.2587, 0.7517, 0.0083, -1.5665, -2.9108, -3.8211, -5.3272, -2.2879, -3.3006, 3.201, 3.9688, 4.6713, 3.8047, 3.4665, 0.6502, 0.9612, 0.0958, -1.5002, 1.1994, -1.8059, + -0.0767, -2.8888, -3.8572, -1.6523, 2.8392, 3.7128, 0.7093, -0.0657, 0.9823, -1.6073, -2.181, -1.5064, -0.6392, 2.2679, 1.7322, -1.1001, 1.0422, 1.4078, 2.4192, -1.5382, + 2.1069, 1.6101, -0.6015, -1.1106, -0.0731, 0.3657, 2.1738, 0.6411, -3.2826, -4.2217, 0.0005, 4.1333, 2.9287, 4.0221, -1.0117, -7.1186, -0.37, 1.5812, 0.1654, -1.9391, + -3.3989, -5.4211, -3.3823, 0.1417, -0.209, -2.9282, 3.8367, 5.4395, 2.1603, -1.6658, -0.0286, 3.8151, -1.6236, -0.4057, -0.8473, 2.3634, 0.3434, 0.0424, -0.3374, 2.1055, + 3.8095, -5.8994, -4.2159, -2.8701, 5.179, -4.6791, -5.6257, 0.4437, 3.5907, 6.0531, -2.4206, -0.619, 2.0474, 3.5867, 7.1475, -4.6633, 4.1906, 1.2868, -11.1492, 4.8074, + -5.2857, -2.3511, 1.887, -1.8753, -2.8109, 0.3363, -1.9008, -0.409, 0.8741, -0.4525, -6.3796, 0.4485, 2.7092, 2.5765, 4.4129, 4.7975, -0.3228, 3.7712, 2.7353, -2.7608, + -3.9913, -5.9775, -2.6898, 8.0565, 3.5971, 1.2374, 3.459, 0.3338, 0.6958, -1.1912, -2.2406, -2.0748, 0.0857, 3.9701, 1.1276, 1.2332, 0.6559, -3.8152, 0.9255, -3.3971, + -2.4876, -2.515, -2.0296, -1.0642, 1.008, 0.6973, -1.7376, -1.5703, 1.5923, -0.7283, -0.1226, -1.7315, 2.4167, -0.4425, -1.5075, 3.8846, 0.5544, 0.8966, 4.627, 0.26, + 2.8767, 0.9007, 0.0796, -2.1662, -1.5086, 1.0148, -1.337, 0.8661, 0.0749, 1.4614, 3.18, 2.1743, -1.6449, -2.7523, -2.7644, 2.2901, -1.91, -4.8716, -2.0883, 6.1248, + 3.6336, 2.1044, 0.4628, -0.6805, -0.0353, -2.3281, 1.0902, 3.0334, -1.907, -2.0882, -2.9673, 0.1514, 0.3556, -1.0151, -5.4063, 2.3884, 2.5624, -3.2553, 3.9458, -0.0449, + -1.3869, -1.5992, 1.4579, 1.4992, 1.7691, 0.8878, 0.9518, 0.7305, -1.505, -1.6287, -1.6402, -0.3868, 2.7983, -2.2046, -0.5051, 0.1956, 7.1623, 2.4667, -5.9139, -3.1488, + -3.5734, -7.3577, -7.1566, -1.3669, 4.32, 2.1415, 0.4237, -0.1707, 3.4434, 2.6751, 2.2337, 0.4895, 2.5968, 1.0123, -0.9145, -1.1189, 0.9048, 2.1474, 0.4312, -1.1607, + -5.2465, -1.6283, -2.7428, -3.2948, -2.2122, 4.3049, 4.7808, 4.7619, 0.2262, -0.6089, 1.1643, 3.359, -2.1676, 0.2134, -1.1502, 1.4193, 1.4168, 0.3538, -2.8694, -0.0796, + -3.4905, 1.2508, 2.0451, 0.449, 3.13, 4.3899, 0.1675, -1.3519, -0.0668, 0.4245, -1.7121, 0.2301, -2.207, 0.3069, 3.1491, -7.5721, 2.7986, 3.8554, -4.1493, -1.6472, + 1.5232, 1.53, -1.0621, -1.4488, -0.8044, -0.39, 1.3086, -2.5549, -4.3776, 0.5264, 2.2421, -0.5299, -2.7363, 4.9582, 1.0929, 1.1601, 2.8351, 1.9896, -4.9813, -0.2808, + 6.5366, -2.5283, -5.5972, -3.4516, -0.2385, 1.8382, -1.6024, 0.2804, 8.8284, 4.4416, -6.1238, 3.7728, 3.4763, 2.9323, -2.3678, -5.511, -4.9901, -0.1283, 0.0084, 0.4242, + 1.9342, 1.566, 2.2346, 1.0331, -0.6035, -0.4461, 0.0271, 0.7571, 1.1796, 0.2963, -0.9807, -0.5607, -1.4711, -2.5426, -4.1871, 2.4178, 0.203, -1.7949, -3.6655, 4.6035, + 2.2188, 0.9702, -1.9037, -2.3323, -0.927, -0.7473, 0.4463, 4.0069, 3.238, 1.6378, 1.585, -1.9473, -1.213, -2.1935, -1.9102, -3.3249, 2.6456, 1.082, -1.3884, 0.057, + 1.8633, 1.2717, 1.6148, 0.3758, 2.9711, -0.8914, -1.2864, 1.1672, 2.0355, 1.2245, -3.703, 3.72, -3.0675, -1.925, 2.2356, -0.7355, 0.5128, -4.4528, -2.9595, 0.0288, + -2.2984, -0.5209, 0.3609, 2.6675, -3.691, -0.3519, 6.3822, 3.0237, -0.1277, -2.2553, 1.0403, 0.997, -1.3107, -1.9745, -0.1646, 4.8839, 0.1333, -1.3256, -3.424, -2.0441, + -2.319, 2.2812, 1.2138, -1.1727, -3.334, -5.2226, 3.639, 2.5124, -1.5642, 3.4166, 0.533, 1.8016, -0.3986, -2.9233, -3.7394, 0.9982, -0.006, -1.6833, 4.3443, 1.6231, + -2.2576, -2.6516, -1.1317, -1.2013, 0.7393, 0.1827, -1.2343, -3.2192, 2.3728, 2.7817, 1.6779, 0.8901, 0.532, 1.4647, 3.7014, 7.0412, -2.6912, -2.5104, -1.2474, -3.2389, + -1.769, -1.9167, -2.8243, 0.8559, 1.6454, 0.6817, 0.5231, -1.2522, -2.6542, -3.2288, -0.2864, 0.0091, 0.5513, -0.6182, -3.9328, 4.4973, 6.4951, 0.4313, 1.6808, 1.1116, + -0.2744, -1.578, -1.8323, -1.2019, -0.362, 1.2906, -0.2832, -1.9105, -0.8966, 0.8634, -0.4648, -2.3172, -1.9676, -1.7065, 0.8232, -2.4736, 3.5667, 5.3037, 4.3018, 1.1191, + -0.4003, -1.4016, -2.6548, -3.2373, -2.1471, -0.9075, -1.1057, 1.1084, 0.0584, 0.6994, -2.2697, 0.1501, -0.0187, -0.2177, -1.1214, 2.5501, 5.4533, 5.8815, -0.4561, 0.0366, + 2.4755, 2.6766, 3.381, 2.8797, -1.3067, -1.2604, 0.4792, -1.5575, -2.0569, -1.156, -1.3594, -0.7176, 0.2831, 1.2557, -0.1965, -2.5773, 0.8488, 0.4905, -3.0053, 0.4234, + -0.5334, -1.6405, -1.4903, -1.2901, -2.0368, -2.4054, -2.0422, -1.2649, -0.3204, 2.3946, 2.8987, 2.5774, -1.9494, -5.6321, 2.8212, 3.655, 3.985, 1.2152, 1.3991, -0.3406, + -1.8395, -0.9841, -0.1468, -2.7046, 0.5709, -0.0486, 2.3079, -3.1973, 5.7249, -2.0537, -0.8947, -0.5513, -1.5588, -0.066, 1.7712, 1.4939, 0.7539, 0.8995, 0.7376, -0.2144, + -2.1136, -6.496, 4.0091, -2.7287, -2.852, 0.0889, 4.2865, 1.1559, 1.4489, 2.3747, -0.2811, -1.6675, -2.1043, 2.4825, 1.5983, 3.0151, 1.4924, 1.4598, 1.4466, -6.6156, + 0.3044, 0.5145, 0.8314, -0.5726, -1.4732, 0.5522, 1.0454, 0.7132, -0.3595, 0.4703, 4.9451, 2.9593, 3.4319, -1.7835, -2.7963, -3.6604, -2.7125, 1.2113, -5.0055, 1.3846, + 2.3458, 3.264, 1.811, 0.4827, -1.6195, 1.9882, 1.8256, 3.5857, 4.1301, 1.6235, -5.1588, -3.8052, -1.7214, -1.0231, 1.3522, -0.3858, -5.6155, -1.3895, -1.6421, -0.048, + 3.7883, 2.2512, 0.5915, 3.6595, 3.6582, 1.2917, -2.0747, 3.0623, -4.8462, -9.6783, -4.7828, -4.1622, -5.2776, -1.2559, 2.3471, 0.9386, 6.0401, 4.8334, -1.7435, 1.3593, + -0.5609, -1.1658, -2.4817, -6.555, -4.61, -0.2509, 0.7628, -0.8368, 3.8495, 3.922, 3.0356, 2.0951, 1.5781, 3.7313, 2.8834, -1.2291, -3.427, 1.5639, 1.6072, -3.9116, + -1.4268, 0.2383, 2.3216, 0.1248, 2.0796, 1.5987, 0.8138, -0.2165, -2.9254, -1.2364, 4.4075, -3.3005, -5.5475, 2.3771, 2.6523, 1.5551, 2.538, 1.7514, -3.2529, -4.552, + -0.7746, 0.9904, 0.2665, 0.8152, 1.7416, -1.7222, -3.8193, 0.6115, 3.8698, -1.5065, -1.1919, -1.259, -0.954, 1.8722, -0.152, -4.1283, -0.551, 0.1951, 0.742, 4.9546, + -4.9471, -2.6326, -0.7296, -2.9661, 3.2611, 5.2949, 1.3584, -0.3484, 0.0238, -0.5367, 1.037, -2.4283, -1.4686, 5.4446, 2.1704, -0.2969, -1.9436, 4.7301, 0.0591, -5.0816, + 0.8281, -1.2416, -3.3762, -3.932, -1.3993, -3.0591, -0.9292, 2.5927, 2.1047, 2.4478, 0.5704, 1.2666, 0.5289, -0.2372, 1.2696, 3.8278, 3.1348, 1.0903, -4.3525, -1.1346, + -0.743, -0.748, -1.261, -0.7625, 1.0816, 1.6556, 1.2019, 2.2812, 3.2082, 1.5688, -1.3094, -2.0639, -2.5822, -2.2528, -1.34, -1.6246, 0.6375, 2.89, 1.4778, -1.315, + 0.8081, -1.3233, 1.3342, -0.4629, 2.2543, -1.7177, 1.7285, 2.2425, -4.4738, 0.6367, 1.5497, -1.2988, 0.3335, -1.159, 0.1744, -4.2648, 5.1183, 0.3072, -2.6556, 0.8684, + 4.0404, 1.9094, -0.2474, -1.16, -0.9167, -2.2516, 3.93, 2.7965, 0.9719, -0.3105, 2.6858, -1.8089, -6.0898, -5.0707, 2.0812, -0.0971, -1.5043, 0.0458, -1.0273, 2.0234, + 0.1375, 0.239, 1.2366, 1.5253, 1.5536, 1.1452, -3.3801, -3.1595, -2.7411, 1.0175, 6.4814, 1.4661, -1.2521, -3.3744, -3.5432, -5.427, -1.3071, 4.3703, 3.6696, 1.3422, + -0.0191, 0.4401, -0.0551, 1.261, 4.9915, 1.8859, 4.2946, 2.2533, 1.246, -0.3261, -1.8245, 0.5397, -0.962, -2.4208, -1.3984, 1.3654, -2.31, -4.0785, -1.5595, -3.3235, + -4.1713, -3.8609, -3.6233, -2.2953, 0.459, -0.2721, -0.1506, -1.7078, 0.0356, 1.5074, 1.0712, 0.7854, 0.7858, 0.0168, -0.816, 0.081, 0.5445, 4.5197, 7.1653, -0.0742, + -2.9674, -1.465, 1.0679, 3.2208, 3.0814, -0.6959, -0.9252, 1.0871, 0.168, -0.9317, -0.6966, -1.1041, 2.3656, 1.0874, -0.7021, -0.5843, -5.954, -1.0591, 4.3651, 0.6421, + -2.3881, -1.1722, -0.2878, -1.31, 0.1054, 2.7187, 3.1286, 1.395, 2.5138, 0.8551, -1.0485, -2.7991, -1.7081, -1.9009, -0.2092, -1.1297, 5.4416, 0.9634, -4.8359, 1.6679, + 0.3475, 0.6761, -0.916, -3.3303, -2.5114, -1.3053, -2.4606, -1.5909, -0.1066, 1.2867, 0.1087, 0.6627, -0.938, -2.1561, -4.1442, 0.553, 3.6775, 4.3771, 4.5604, 3.2095, + 1.8172, 1.9142, 1.3748, -1.2576, -1.3958, 0.406, -0.4725, -1.2643, 0.8079, -0.6725, -3.4257, -3.2969, 2.8901, -0.0329, 4.2131, 0.839, -2.3538, -2.2196, 3.3371, -1.2078, + 1.9496, 3.6573, 4.2326, 1.1863, 1.8389, -0.7982, -0.8176, 0.9762, -2.1796, -2.4082, 0.46, -2.1099, -0.13, 5.8933, -3.2271, 1.4122, -3.0287, -5.0286, 0.1022, -1.9807, + 0.7977, 0.4131, 0.7926, 0.7439, -2.715, -3.186, -1.6061, -0.5456, 3.5797, 0.0724, -0.4993, 0.4656, -0.7994, -0.5991, 0.0862, 3.6997, -0.5342, -0.3047, 0.9064, -0.7678, + 1.0025, 0.1292, 1.8299, -0.2181, -0.3367, 2.6298, -1.6812, -0.7903, 1.0473, -0.5336, -4.1833, 2.6382, 0.948, -0.3031, -1.3062, -0.6706, 1.4954, 1.107, -3.9483, 1.1443, + -2.822, -2.9373, -1.7368, -1.1113, 0.7976, 1.021, 2.2881, 1.7823, -1.6829, -2.1388, -0.0636, 0.6047, 1.3691, 0.5354, -2.8472, 1.99, -0.2414, -1.8409, 2.3664, 4.6674, + 0.81, 0.5306, 3.2216, 2.7904, 2.3222, -0.094, -1.2977, 0.6699, -0.3153, -2.0729, -0.4524, 0.1611, 0.0422, -0.9458, -1.6284, -1.059, 0.4113, -0.2203, -0.7025, -2.1711, + 0.6469, 2.9521, -0.5269, -2.8396, -2.829, -0.4167, -2.6035, -1.8694, -1.271, -1.195, -0.6111, -1.1719, -0.0843, 4.1129, 3.9912, -0.9572, -5.8704, 3.6319, 4.0418, 2.869, + -1.7675, 0.6361, 2.5132, 2.083, 1.8929, -1.5061, -3.5844, -4.2969, -2.8299, -0.687, 0.8308, 1.3968, 0.3529, 4.0998, -1.6161, 1.3306, 0.56, -0.5129, -1.6573, 2.7621, + -4.0964, -1.5173, 1.2551, 0.2978, 1.5682, 0.3497, -1.4315, -2.0554, -0.5756, 2.5392, 0.79, 3.4286, -2.9558, -1.7034, -0.8459, 1.0513, 5.1871, -2.5294, 1.2695, -0.0257, + 0.0328, -1.2155, -1.2836, -0.9363, -1.2229, -1.693, -1.8595, 0.3399, -1.5276, -1.0107, 6.404, -1.9072, 0.7733, 0.6079, 2.8719, 3.0211, 2.307, -3.5448, 0.3434, -0.5002, + -6.6638, -3.5679, 2.7288, 3.1465, -1.8044, -3.2026, 0.3954, 1.5738, 0.684, -0.5029, 1.1915, -2.4277, -2.892, -0.4612, 0.5352, 2.0495, 4.9107, 0.7993, 0.1809, 3.327, + -7.7693, -2.7271, -0.5302, -1.6862, -2.675, -4.1941, 6.2224, 4.1406, 1.2187, -0.8566, 3.217, 2.7593, 3.3324, -2.3093, -1.4924, 1.2643, -2.9807, 2.3328, 4.673, -1.9398, + -0.3214, 0.7654, 1.4453, 1.0347, 0.7854, -0.0281, 0.6653, 2.1756, 2.5539, 2.4886, 2.8291, -2.3264, -5.6113, -4.1472, -2.1955, -0.1794, -0.8897, -2.9162, 2.0658, 1.8062, + 0.0689, -0.0814, 0.5156, -0.9104, 1.9645, 1.489, -0.7622, -1.4287, 1.4489, 2.2731, 1.0561, 3.0605, 2.5928, -3.3062, -2.8865, -3.6767, -3.9506, -2.1727, -0.4806, 5.1867, + -2.7262, -0.408, -7.2353, 0.2532, -1.7494, 4.8406, 2.4161, -8.2402, -0.3311, 1.0612, 3.376, -0.5373, 3.2052, 3.7144, -2.9286, 10.7765, 4.9188, -8.1638, -0.8809, -1.3612, + 3.8706, 1.5102, 0.378, -7.459, -0.9006, 2.4899, 2.468, -2.4184, -1.4186, 0.2908, 2.1056, 2.4328, 4.226, -3.9887, -6.7913, -1.0651, 2.4289, 0.5874, 4.8024, -3.5488, + -1.2691, -4.1749, -2.7407, 1.493, 1.4665, -0.9212, -1.463, -5.1747, -2.2251, 0.8474, 0.854, 6.6525, 0.1651, -0.5706, -0.3287, 3.1547, -1.46, 0.8291, 2.5923, 2.2733, + 3.8347, 2.4921, 1.8361, 2.4264, 0.2839, -2.7167, 0.2831, -0.5469, -0.6398, 0.3108, 1.0194, -2.1389, -0.8456, -4.7666, -2.5049, 1.2075, -5.6326, 1.3761, 3.1197, 1.602, + -3.7739, -1.8529, 0.6063, -0.8541, -1.637, 3.6233, 0.8975, 1.9643, 3.5106, -0.3623, -2.4744, -0.7625, -0.7853, -1.5705, 0.2237, -0.6207, 0.0761, -0.4742, 1.5632, 2.7029, + 1.157, 0.8704, 1.6827, 1.2654, -0.5848, -2.69, -2.6615, -0.9589, -1.6641, -2.7103, -1.4381, -0.4901, 1.8045, -1.5216, -1.1394, 5.0021, 4.1235, 1.555, -3.7877, 2.1859, + 2.542, 1.6423, 0.7395, 0.8846, 0.9016, 2.7752, 3.3824, 2.5574, 0.4625, -2.0442, -1.8686, -0.186, -1.7933, -5.0038, -3.5773, -1.2917, -2.0519, -1.8556, 1.0146, 2.7701, + -4.4081, -3.4569, -0.8021, 0.2773, 2.5574, 2.3862, 1.3118, 0.1408, 0.6688, 1.9053, -1.5497, -0.5855, 1.2457, -0.5521, 0.963, -2.247, -2.8924, -3.743, 6.1844, 2.5961, + 0.4138, -4.3685, -4.3743, 3.3166, 1.9814, -1.9703, -1.1246, -1.8788, 1.8555, 2.5293, -0.6354, 0.3032, 3.9855, 0.4439, -1.3412, -2.6733, 1.5434, 2.8406, -1.39, 0.543, + -0.9949, 0.7752, 0.5153, -0.3382, 0.759, -0.3806, 0.6362, -0.0446, 0.6992, -2.3407, -2.218, -0.8794, 1.9075, 1.9883, 2.6403, 1.4665, 1.1384, 1.9497, -0.4373, -6.842, + -0.369, 1.5979, 3.652, 2.5947, 0.9915, -0.4587, -1.5761, -1.3889, -0.8595, -0.0002, 0.3336, 2.0392, 1.9215, -1.5962, -2.1409, -2.1868, -2.0225, -6.9604, 4.1862, 2.2427, + 0.7081, 1.2472, 1.2274, -0.7827, -1.3963, 0.1531, 1.0164, 1.122, 1.4236, 4.7449, 4.197, -1.6566, 1.4602, -0.4324, -5.0812, -4.6776, -3.2034, 0.202, -0.8325, 0.5609, + -0.8996, -1.1981, -0.4982, -3.3678, -3.1656, -0.484, -1.6889, 1.4162, 1.8691, 1.8944, 0.6984, 2.1971, 0.7659, -0.3399, -1.054, -1.9648, 4.8986, 2.2357, -0.435, -0.8795, + -3.0303, -1.1024, -3.6351, 1.8563, 2.2581, 0.9526, -1.318, 1.052, 0.9676, 1.4472, -0.2536, 1.6459, 0.5539, 2.7964, -2.3045, 3.1405, -0.8848, -0.5008, -4.0553, 0.4143, + -2.0566, 0.3509, 1.5804, -0.1468, -1.2009, -5.1236, -1.6316, -0.6083, -0.2262, -3.8727, -1.4106, 4.1461, 2.8353, 5.5841, 2.0344, -1.3445, -0.2669, 1.6597, 0.4425, -0.7448, + 0.4237, 5.5027, 3.4466, -0.9733, 1.1101, 0.3187, 0.4016, -0.8934, -4.1773, 1.2529, -1.0141, 1.7716, -1.4207, 2.0071, -6.7629, -1.426, -0.8769, -1.9766, 2.062, 1.2241, + 0.525, 0.4342, -1.3517, -2.8754, -3.0586, 0.6098, 2.2679, 1.4929, 1.4608, 3.1011, 1.506, -4.8013, -7.5268, -0.6504, -0.503, 2.778, 2.8557, 1.0462, 3.4571, -0.7675, + 3.573, 1.8714, -0.1581, -1.7722, -0.3433, -2.7056, -3.0806, -1.91, -3.1355, 1.0548, -1.9906, 0.4699, 0.0873, 2.5566, -0.1726, -0.8702, 2.1464, 4.3968, 5.0995, -5.1171, + -0.6968, -1.4896, -0.0495, 0.8149, 1.4216, -0.0327, -1.7535, -2.2313, -0.321, 1.9568, 4.8784, -1.9324, -1.8058, -2.6431, -3.7316, 0.3685, 1.1306, 4.9893, -0.2577, 1.3848, + -1.4341, -1.1497, -1.8056, 0.1413, 2.571, 2.939, 0.7055, -0.4196, -0.2614, 0.1608, -0.6195, -0.3637, 4.1643, 0.3576, 0.0984, 2.2749, 0.4728, -7.315, -0.1921, -0.3248, + -4.2895, -7.0396, -4.8802, -1.5844, 1.4442, 1.8886, 0.5829, 0.1608, -2.6352, -1.0632, 0.4985, 3.2097, 6.327, 9.0622, 8.0546, -0.4311, 2.12, -2.0642, -2.9293, -6.4319, + -2.8918, -0.9105, -1.1049, -1.3358, 0.0333, -0.4429, 1.114, 3.2177, -0.2479, -0.9423, 2.0518, -3.4204, -3.3752, -1.508, 4.5184, 3.5104, 0.837, 0.3279, 4.1906, -3.6215, + 1.1012, 2.83, 4.9338, 4.9135, -1.4413, -4.6933, -2.9852, -2.2104, -2.0709, -0.2446, -1.7323, 0.446, -0.3491, 0.7293, 1.2549, 1.552, -1.6591, -0.0263, -1.3091, 0.9607, + -3.8105, -2.2705, -0.4801, 0.003, -1.0835, -0.8967, -1.848, 4.3428, 2.2775, 1.1261, 1.5948, 4.4091, 3.5564, -2.1928, -2.8051, -1.2385, -1.6399, -0.9968, 0.5731, 1.3796, + 4.5581, 4.2833, 0.3675, -0.5438, 1.94, 3.0816, 0.3261, -0.8096, -2.6679, -2.1086, -0.8131, -4.9186, -3.634, 5.7405, 0.0185, 0.6308, 2.5276, -4.0355, -1.8846, -2.0583, + -1.2863, -0.264, -0.1222, 1.8197, -0.8215, -1.4173, 6.3047, -1.3136, 2.0735, -0.1627, 3.0262, 1.5599, -2.3044, -2.9292, -2.1284, -0.006, -0.2974, -0.4468, 0.2977, -1.5818, + -0.3043, -4.9833, -4.4641, 1.6692, 5.7638, 4.6547, 3.7525, -0.961, -3.955, -2.2488, 0.7885, 4.2621, 3.6322, 2.1375, -6.9698, 1.9153, 2.5541, -3.4886, -0.8469, -2.9081, + 1.6869, -2.2603, -5.3537, -1.924, -2.3796, 2.8412, 5.8922, -3.3838, 0.7866, 3.3273, 0.722, 4.1493, -2.8075, 1.2195, -4.122, 2.7912, 5.5751, -0.9361, -3.796, -2.0281, + 1.8743, 1.5687, 0.9347, -0.0119, 5.1974, -0.9505, -1.5819, -0.0387, -0.2355, 2.4835, -2.718, -2.1816, -1.0347, -1.5606, -1.4552, 0.4355, -1.6713, -3.1551, -0.2146, 4.3156, + -0.5064, 0.6473, 1.6157, 0.4031, -0.7786, 0.4664, 2.3609, -0.8533, -2.7426, 0.0584, 3.6047, -1.3728, 0.0256, -2.0089, 0.7575, -3.1106, -1.7839, 0.971, 1.5709, 0.6757, + -0.1854, -0.4792, 0.2327, 0.5721, 1.3762, 0.9344, 1.6367, 0.2158, 0.6455, 0.9744, -3.1471, -5.2734, -4.3577, 3.1646, 3.1365, 2.2803, 1.2303, -1.996, -1.5643, 0.6037, + 1.554, 2.1016, 2.3825, 0.8004, -2.0847, -2.7548, -1.5073, 0.1971, -0.2707, -0.769, -1.8324, -0.6385, -4.5361, -6.8801, 5.4599, 2.666, 1.1252, 2.285, 1.3862, 1.3159, + -2.3092, 8.5984, 0.5061, -0.6741, -2.467, 3.2934, -0.668, 2.0327, 0.6889, -1.8602, -0.9325, -1.2001, -4.3458, -2.5628, 0.6948, -1.1889, 0.4479, 2.595, 1.2931, -1.9416, + 0.8421, 1.5717, 0.5751, 0.5951, 0.4783, -2.2142, 0.3553, 6.0828, 3.0287, -2.3343, -3.2264, -0.7759, -2.009, -0.3873, -2.4778, 0.6768, -3.499, -0.8957, 4.2903, -0.6766, + -0.6942, 8.6603, -5.4134, -0.8727, -0.3504, -3.3092, -0.5586, -0.2913, 2.8905, -3.0583, -2.9724, -1.747, 3.325, -1.1022, -4.4193, 7.6704, 0.5149, -0.7173, -3.6, 6.0453, + 0.6802, 1.0947, 1.2451, 3.8611, 4.5266, 1.8951, 0.7625, 6.226, 2.5223, 4.8966, 1.838, -0.3753, 1.3861, -7.5361, -6.881, -3.7307, -4.9193, -2.5727, -4.5778, -0.3414, + -1.4648, -1.9631, -1.4302, 3.2813, 2.7021, -1.3306, -3.5822, -3.4123, -2.6251, -2.554, -2.983, 1.7868, 1.1612, 1.7944, 0.6471, 3.7619, 3.5844, -0.436, 2.9666, 0.0957, + -2.6065, -0.4815, 3.7667, 3.2609, 1.4317, 5.8806, 0.0973, -3.3441, -3.2874, -4.9485, -1.6589, 0.7537, 0.3424, 0.9215, 3.8135, -4.2041, -1.8751, -0.8917, 1.0067, 2.0227, + 4.0705, -1.6316, -3.7042, -1.3612, 1.3654, 1.6949, -0.0461, -0.428, 2.9316, 0.2615, -3.3312, 0.4341, 1.2323, -0.8543, -0.862, -4.8579, -6.1758, 3.1382, 4.934, 3.1899, + -4.1097, -4.1313, -2.7947, -1.2657, -0.6757, 0.0158, -0.2664, -0.7288, -2.8256, -1.9407, 0.4965, 2.0938, 4.2596, 1.7443, 2.092, 3.1468, 3.6217, 1.9383, 0.0884, -0.7586, + -0.5474, 3.7117, 4.4423, -1.1991, -3.2034, 0.2008, -1.1999, -0.3645, -0.3658, -1.5068, 4.3945, -0.5362, -1.4209, -0.9138, -0.075, -0.959, 3.3133, 2.7513, -7.0608, 0.5385, + -0.2792, 1.018, 0.1758, 4.6409, 0.999, 0.8572, -2.2212, -4.3593, 1.021, 5.0992, 3.1964, 1.4429, -1.7425, -0.9214, -2.3245, -1.3975, -6.8773, 2.8027, -1.1862, 0.056, + 1.7064, 0.3215, -0.2518, 0.0527, -2.5377, -4.4163, -3.0416, -0.1822, -1.1887, -2.941, 0.6761, 3.4948, 1.6101, 1.2626, 0.2612, 5.622, -3.9114, -1.0915, 4.1888, 0.3661, + -1.7866, -1.1389, -0.0309, -0.9349, 0.3853, 1.9195, 0.2339, 0.3886, 0.9745, 1.4208, 2.5313, 4.3943, -4.636, -2.5445, -2.1898, -2.533, -0.3527, 4.7621, 0.5928, -1.4558, + 7.8057, -3.8468, 0.8827, 0.8768, -4.7631, -5.1731, 0.0664, 5.3199, -1.789, -4.3428, 1.9966, 2.9221, -4.5512, 5.176, 0.582, -0.2561, -0.2887, 0.6505, -0.8654, -0.4024, + -2.578, -0.0834, 0.144, -1.6096, -4.137, -4.824, -1.6968, 2.0832, 4.4015, 2.3414, 0.0326, -1.7738, 3.0088, 2.5338, 2.2405, 0.7822, -3.427, 2.3235, 0.3274, -0.0892, + 2.1843, 2.593, 1.3745, 1.7373, 2.8715, 2.7285, -1.1274, -0.1783, 0.9497, 1.0004, -0.2974, -0.2919, 0.6463, 0.2228, -1.5085, -5.8708, -3.691, -0.8536, -2.5539, 0.0647, + -1.6643, -0.8616, 0.2098, 2.2486, 4.6647, 3.854, 2.3834, 1.3656, -0.2611, -0.7523, -0.2703, 2.863, 1.157, -1.6263, -4.3844, -3.5346, -0.0484, -0.8649, -4.9645, 0.4867, + 0.6824, 1.0939, 0.6691, 0.3291, -0.2396, -0.9714, -0.9487, 0.4056, -0.8422, -1.0662, -0.8121, -1.8756, 1.8363, 1.0681, 3.7568, 2.7493, -2.279, 1.4171, -4.9986, 0.0258, + -2.0461, -1.9677, -1.8134, -2.6831, -3.0621, -1.6874, 2.2873, 0.6491, 1.7878, 1.1808, 1.5028, -1.154, -1.2923, -0.0603, -3.5107, 6.4917, 4.0814, 1.4288, 0.0396, -0.1721, + 1.7926, 0.64, 0.0107, -3.4114, 12.2384, -4.2391, -4.1672, -5.5139, -1.6966, 5.3015, -0.9447, -4.0014, 3.1093, 5.2076, 5.6201, 2.3962, -5.3615, -1.8057, -0.2628, -4.9121, + 1.2301, -0.2653, 0.0535, -2.1294, -3.7763, -2.5405, -1.3165, 1.3892, 1.1754, 1.8095, 2.3931, -0.531, -0.8291, 0.5926, -0.2725, -7.2218, 1.8619, 3.8534, 3.4226, 1.1011, + -4.1789, -3.5276, -0.8324, -0.4176, -2.4, 0.0369, 0.9853, 5.4189, -1.8625, 4.5416, -0.0534, -2.2531, -1.839, 3.0263, 1.3992, -0.9141, -0.2291, 0.6856, 2.4454, -0.0313, + -6.4975, -4.6128, -3.3675, -4.8986, -0.8354, 2.3584, -0.6088, 4.1352, 0.6068, 0.7211, 0.275, -2.0557, 0.4476, 2.7831, 4.6078, -0.4014, 5.9849, 2.1061, 1.2312, -1.9795, + 1.323, 1.1384, 1.2773, 1.715, -0.7509, -3.8269, -1.129, -0.1851, -3.0673, 2.4551, -1.8006, -0.5768, 2.5367, -0.4358, 1.0236, 2.8956, 4.5161, -0.4242, -3.2309, -3.4534, + -0.3567, 2.4123, 4.0459, 3.3988, 2.0862, -2.1774, -5.126, -1.093, -2.2588, -0.1938, 0.5021, -0.2723, 1.0175, -2.6722, 0.0196, -1.3546, -1.6702, 0.808, 0.6509, 2.2336, + -3.1316, -2.5501, -0.7668, 1.9764, 1.8647, -0.0801, 0.9053, 0.9563, -1.0947, 0.3992, -1.9982, 2.2428, 2.0122, -5.4193, -2.6261, -0.7274, 0.7121, 1.7109, 3.9486, 1.666, + -7.9949, 4.0953, 3.7255, -1.4546, 8.0933, 1.7853, -4.2627, 4.4208, 9.6075, -2.0281, -0.5418, -3.566, -1.9219, -6.8006, -1.4426, -1.872, 6.0536, -6.8174, 0.7937, 0.1276, + -1.9787, -1.0115, 0.4548, -0.6009, 1.0489, -0.3883, -3.8168, 3.5539, 1.8044, -0.802, 2.2377, 4.013, 2.5264, 2.9341, 2.9402, 3.194, -12.1756, -4.5827, 0.714, -0.0649, + -2.6937, -0.9969, 0.6136, -0.2092, 0.1112, 0.1733, 0.0276, 0.6804, -4.181, 0.4835, 3.1126, -0.8365, -1.6005, 3.1133, -1.3297, -0.4657, 2.8302, 2.713, -2.7204, 1.175, + -4.2305, -1.0868, 0.5304, -0.1415, -1.2124, -0.8981, -0.879, -0.8763, -0.9777, 1.0148, 4.1145, 2.1714, 1.231, -1.6938, -1.4429, 1.2355, 6.6877, 0.2382, -3.2655, -0.5189, + -2.1503, -3.4325, -3.4567, -1.0918, 0.5993, 0.3527, 0.3437, 0.2288, 0.7821, 1.0173, 2.2607, -0.9887, -0.3595, 4.4457, 3.707, 1.5475, -3.7173, 0.7682, -0.5101, -0.3462, + -3.7019, -3.2897, -0.3993, 1.1225, 4.7873, 3.25, -1.8347, -2.0699, 0.0727, 1.2966, -0.1512, 1.4478, -2.4263, -0.3987, -2.4159, -3.3225, 2.8445, 0.7735, 0.8954, 3.5197, + 0.0807, -1.1966, -2.9464, 0.8465, 1.6234, 1.1215, 1.2824, 3.7187, 2.3234, -3.7329, -7.3924, -3.2192, -4.4371, -4.8564, 3.1927, 2.3654, 4.5154, -1.033, 4.4531, 3.291, + 0.0329, 2.1961, 1.8627, 0.509, -2.3566, -3.1635, -1.4865, -3.4766, -3.4834, -4.5095, -2.404, -5.545, 7.4389, 3.1752, 2.6905, 4.3345, 1.8695, -0.0444, -0.0458, 2.4056, + -4.2525, -4.2615, -2.8448, -1.4174, -1.4188, -1.0941, 0.0321, 2.7304, 1.6246, 3.7714, 3.6887, 2.3979, 1.9374, 0.7696, -7.0469, 0.1811, 3.9202, 4.8839, -3.2038, -0.3977, + -0.4109, -0.9615, -1.1887, -1.3425, -1.0669, -2.7829, -2.9395, 1.289, 1.6984, -0.5601, 1.6775, -0.5469, -0.8102, -0.2298, -0.7565, 0.3451, 3.1792, 2.2226, 4.5535, -1.3689, + -5.7264, -3.6531, -1.3521, 0.1463, 1.711, 3.189, 0.7838, -1.0176, -0.2195, 1.4384, 0.0207, -0.4968, -1.0491, 0.1749, 1.0739, 2.0378, 1.358, 1.236, 0.4429, -0.098, + 0.7773, -0.8979, -1.2165, -1.9337, -2.9157, -4.0101, -0.3148, -4.646, -4.2945, 4.177, 5.5969, 1.4549, 3.5448, 1.4079, -0.8343, -3.2017, 5.5239, 2.2268, -0.3838, -0.0607, + -0.6985, -0.6307, 2.4635, -0.5381, -0.2883, 3.4018, 2.1088, 2.918, -0.5123, -0.9613, 0.0579, -4.3385, -3.8027, 1.0743, 5.0578, -1.828, -2.2439, -4.7171, 0.9386, 2.5388, + -4.5218, 0.1558, 2.838, 2.3948, -1.9436, 0.6339, -0.7954, 1.9788, 1.5836, 1.1696, -4.5526, -0.564, 1.4447, 7.0584, -6.8023, -4.5393, -6.0449, -0.5031, 6.1354, 4.8739, + 0.3624, -1.2047, -2.0776, -1.5816, -0.7523, -0.4259, 1.9866, -0.1702, -0.471, -1.9514, -1.5113, -0.2099, 2.707, 3.8409, 4.1635, -1.6517, 0.8031, 3.118, -4.9637, -0.01, + 3.3248, 2.1375, 1.3785, 0.2103, 3.0519, 1.4244, 0.2968, -0.3016, -1.2728, 0.9142, 0.2763, 0.9396, 2.3345, -1.6742, -3.9431, -3.4421, -2.5066, -1.7463, 1.1359, -2.5381, + 7.3832, 7.8862, -6.4414, -8.9767, 0.1372, -3.3099, 3.3247, -2.2516, -2.6663, 1.5419, 7.2572, -0.6762, -1.4552, 3.0048, 6.921, -8.5959, -2.6649, 2.5301, -0.7893, -2.1588, + 1.3303, 0.1631, -2.4438, -1.2379, 0.9953, 2.7203, 1.9038, 1.2786, 0.3887, 2.8669, 0.368, -0.1846, 5.6338, 2.1238, -1.0482, -5.2051, -1.0787, -7.2281, -1.5184, 0.1722, + 0.1645, -0.9895, -2.0311, -3.1149, -3.298, -2.1249, 2.0221, 2.1048, -0.3058, -1.0676, -2.5289, -1.4215, -1.7517, 2.914, 4.1244, -0.6494, 2.6877, 3.2611, 2.5839, -0.5792, + -0.4639, -1.9119, -0.6903, 1.0816, 1.798, 1.1866, 0.422, 1.5316, 0.8944, -2.981, 5.6782, 3.5367, -0.9955, 2.4778, -1.9477, -3.1693, -0.034, -1.9442, -1.8186, -2.6506, + -3.9601, -3.1838, -1.3333, -0.9936, 0.4708, 1.864, 0.2776, -3.5639, -1.8523, 3.8979, 6.3274, 1.9935, 2.4867, -0.2835, -0.1329, -0.9778, 1.4936, 2.4315, 0.5084, -5.4702, + -1.9007, -8.9624, 0.7258, -2.6244, 1.8683, 0.7413, 8.169, -2.357, -4.2143, -5.3821, 5.3979, -0.3396, -0.0209, 2.4866, -1.7903, 8.5769, -2.6396, -4.5135, 0.4288, 6.3503, + 2.3682, 1.2735, 1.0581, 0.7198, -1.3884, -1.1783, 2.7862, -0.315, -4.4216, 1.0457, 0.802, 0.2322, -1.8255, 0.9933, 1.5522, 4.2681, -3.4105, -1.8681, -3.1691, 0.4773, + 0.1022, 3.5273, 4.7298, 1.5753, -3.6041, -2.406, 0.8414, 1.2204, 1.0785, 1.4517, 0.9533, 1.0682, -0.0095, -1.2482, -3.715, -1.4924, 0.0586, 0.2151, -3.5086, -0.8381, + 2.6097, 1.3046, 0.1797, -0.8433, -0.8002, -0.6737, -0.7817, -0.0181, -1.8564, -0.0021, 1.7429, 2.1363, 2.4019, 0.852, -1.2013, -2.3776, 0.1614, -1.6535, 0.2922, -1.473, + -1.1555, -1.9989, -3.7971, -3.5419, -1.7702, 5.6208, 1.6756, -3.4769, -2.2174, -0.5921, -2.9465, 2.4449, 3.2181, 2.5732, 0.5741, 1.4008, -1.6104, 2.6683, 4.0017, -1.0706, + 2.6808, 2.4971, 2.2595, 2.6039, 2.5012, 2.7248, 0.3061, -0.5761, -0.0415, -2.4607, -1.2162, -0.08, -2.7145, -3.3777, 0.3468, 1.3821, -2.901, -0.5334, -2.3262, -1.075, + -1.4573, -0.7869, 0.2356, -0.1795, -1.7997, -2.4756, -0.7083, -1.2917, -0.2409, 1.8121, 2.3854, -0.078, -2.6742, 0.8926, 3.1169, 2.4329, -3.2335, 1.5184, 1.6752, 0.8566, + 1.3578, 1.5299, 1.0786, -1.596, -3.3648, -1.6673, 1.3592, 5.7139, -0.3364, -0.8154, -1.0911, 0.3285, 1.2167, -6.5169, 3.5759, 0.3841, -3.4189, 2.252, -0.3564, 0.3665, + -3.9427, -4.1692, -3.9599, -2.7914, -2.7852, 0.8501, 2.1268, 3.1929, 2.9997, 0.9798, 3.7115, 2.7044, 0.8023, -1.3597, -0.1213, 1.8505, 0.8537, 2.357, 0.4425, -3.7419, + 1.1259, 1.7278, 1.7181, 1.0824, 0.9378, 2.2855, -0.4426, -2.0998, 0.2868, -2.3258, -2.4774, -3.503, -2.192, -0.0403, 0.0689, -2.1823, -1.7516, 0.3348, 2.6371, 4.8097, + 2.6282, 3.1949, 1.4763, -1.8168, -2.3026, -0.1157, -0.0177, 1.6877, 0.85, 0.1002, -0.5211, 1.2286, 1.5164, -0.6411, -0.9348, -3.1872, 0.1863, -3.1762, -3.7899, 3.6345, + 0.6239, 1.6179, 1.2014, 0.2608, -1.992, 4.7736, 2.9884, -1.6687, -1.57, -3.2904, 2.3265, 0.1217, -0.6529, 1.1537, -1.343, -3.266, -0.7427, -0.3946, -0.8553, 0.7078, + -2.5785, 3.3274, 0.7827, -1.1641, 0.3099, 2.093, -3.8923, -2.1233, -0.2174, -1.0352, 2.3827, 3.2008, -1.3061, -1.3553, 2.0138, -4.8137, 2.2926, -0.4492, 0.2262, 2.3061, + 0.703, -0.6796, 0.6702, 1.233, 0.3286, -1.1249, -0.2281, 0.9008, -0.4257, 1.5252, 0.1413, 3.8708, -2.7125, -0.1048, -1.3046, -2.6469, -1.7645, -0.4236, 2.6448, -0.6022, + -2.0396, 0.9147, 3.7884, 2.4844, -0.2561, -2.4529, 1.8969, -0.1479, 0.695, -1.2549, -4.9008, -1.2459, 0.9313, 0.6906, 5.2636, -1.1277, -0.2394, -2.2895, -2.5856, 1.8753, + 1.678, -1.6532, -2.7599, -2.245, 0.5197, -1.6003, 4.4426, 1.0934, -0.3109, 0.9191, -3.4242, 1.3304, -1.5208, -0.9853, -0.2434, 3.9418, 0.4425, -2.2543, 4.6335, -2.0037, + 2.2658, -0.6139, -1.3935, -0.0563, -2.955, -1.9056, 3.4601, -0.3817, -1.6475, -0.291, -0.5503, 1.7727, 0.0114, 2.6384, 2.8574, 0.5346, -5.4829, -2.6161, 0.958, 3.3952, + -2.9553, 0.0039, 3.9564, 2.2087, -0.9348, -1.5953, -1.378, 0.1552, -2.1548, 0.7917, 1.8242, 1.6997, -1.8826, -0.8677, -0.7876, -0.2152, 2.3842, 2.1467, 1.7116, -4.111, + 0.7023, 1.9303, 1.0064, 0.0165, 5.4286, -1.1464, -1.0459, -2.0088, -1.2634, -2.1806, -0.6159, 0.3372, 3.405, -1.1188, -2.8596, -2.391, -0.555, 5.4226, -1.0697, -1.9937, + -0.8683, 0.0341, 1.1306, -1.3868, -1.9833, 2.9612, -0.7025, 0.9705, -3.1777, 4.1388, 0.7353, 0.3664, 2.0843, 0.2998, -0.405, -1.1895, 3.2137, -5.0324, 1.1351, -2.3244, + -1.0092, 0.5101, 2.307, 2.1852, 1.5304, -1.7001, 1.6095, -1.457, -3.9762, -1.6422, -0.2532, 1.3474, 0.8974, 0.9819, -2.2295, 4.7058, -2.038, 3.1038, -2.542, -2.3311, + 1.9713, 1.0803, -1.0686, -1.2321, 0.3041, -0.5899, -1.6032, -0.6543, -2.1903, -2.1676, 0.3844, 0.2905, -0.5787, -1.1285, -3.3703, -0.5637, 0.3705, 2.2696, 8.3763, 0.1004, + -2.3313, 3.6108, -3.7738, 2.3534, -6.3897, 3.9802, 2.8098, 6.2413, 2.517, 5.126, 2.4541, -1.7202, -4.9921, -5.7179, -3.3204, 5.3271, 2.0124, -5.7657, 0.7907, -3.2116, + 0.323, 1.0311, 1.366, 0.9706, 2.0785, 2.0724, -0.0151, -0.8301, -1.1195, -2.8044, -0.9819, 0.0417, 0.0944, -1.2077, -2.2323, 4.1593, 1.4207, -2.7654, -0.5102, -1.0909, + 1.0182, 0.5812, 0.3232, 1.704, 1.6371, 0.0882, 0.7883, 2.0623, -2.4549, -1.7632, -0.0828, 0.1245, -1.0882, -0.0487, -2.0254, -0.8118, -5.9132, 2.5533, 0.488, 2.8199, + -2.1755, -1.411, 0.7926, 3.1903, 3.2045, 1.4005, 2.2246, 0.4995, 1.4795, 1.0003, 1.4155, -1.8108, -1.7649, -2.0289, -4.9177, 1.9399, 0.4644, -0.6846, -2.6827, -0.1356, + -2.3372, -0.8774, 1.8295, 2.5713, 0.4237, -1.62, 0.725, 1.2049, -2.5557, -1.7837, -2.0535, 1.8608, 2.0142, 1.1559, 0.414, -2.2055, 2.6316, -1.0207, -0.4407, 0.0634, + -6.476, 2.3566, 6.2881, 1.178, 2.2768, 0.5492, 3.6691, 1.5956, 1.5393, 0.8045, -2.4474, -1.1396, -3.0192, -2.8013, 2.1788, 0.9584, -4.0593, -1.3318, -0.6033, -1.5164, + -0.2224, 3.1469, 4.1918, -1.5853, -2.9401, 2.4424, -2.0556, -1.6902, 1.4657, -1.4987, -4.5783, -3.9175, 1.8499, 2.5001, -2.9926, -3.1367, 4.3814, 2.8761, -0.3135, 2.0766, + 0.2838, 0.7448, 1.5373, 1.7127, 1.9184, 1.9954, 1.4552, 0.6636, -0.0775, -1.4076, -2.7023, -2.4765, -6.0615, -4.2297, -2.8214, 4.4402, 0.5975, 1.2302, 2.2798, 0.9178, + 0.1873, 0.8058, 1.4948, 0.4584, -0.6762, -2.1053, -0.4098, -0.951, -0.4347, -0.3909, -1.0508, -2.5837, -1.0389, -4.2899, -4.0647, 3.8453, 2.2675, 2.8481, 4.595, 1.4936, + 6.4165, 4.769, 2.1643, -0.5306, -1.7418, -1.1821, 0.4655, 2.4797, -1.0005, -2.7835, 0.6462, 1.054, 0.1648, -0.2195, -1.2133, -1.6876, -0.2896, -1.1843, -4.2375, -2.0895, + 0.6591, -2.4247, -3.5305, -2.0684, 0.7993, 0.5286, -1.0223, -0.9537, 0.6266, 1.4075, 1.462, 1.6652, 1.3324, -0.3799, 1.6047, -0.403, -1.4183, -0.7574, 3.5079, -0.6351, + -0.7402, -0.5022, -0.0104, -0.1501, 0.0126, -0.8303, -0.6338, 0.0643, 0.7573, 4.3586, 2.2234, -0.7379, 3.8453, 0.8151, 2.8221, -1.4249, -1.4011, -3.5524, -6.4818, 1.5666, + 1.297, 2.6835, 1.2613, -1.8292, -0.939, -1.6773, -1.9287, 1.2477, 1.3854, -1.9138, -1.0744, 1.6338, -4.8418, -0.558, -1.29, 5.2745, -2.7458, 2.6939, -0.9625, 2.2835, + 1.8861, 3.1363, 4.0321, 1.7435, 0.5233, -0.7855, 2.0137, 0.8065, 1.2174, -4.0074, 0.586, -1.0339, -6.4815, -6.1251, 1.1641, -3.9644, -6.3895, 7.8222, 2.0846, 1.7715, + 3.9399, 2.2907, 1.6049, 0.7588, -0.5727, -0.4203, 1.1669, 0.6185, -0.3417, 1.2484, 1.5946, 1.7091, -1.8086, -4.7596, -2.8399, -3.9325, -2.0296, -0.678, -0.7509, 3.2019, + -0.3222, 0.619, 2.2698, 6.3269, 5.8198, 2.6992, 0.0601, -0.5335, -1.7361, -3.6667, 0.2231, -2.3194, -2.0166, 2.496, 0.142, -3.4765, -2.9842, -0.3195, -1.1974, -2.084, + 1.2403, -2.3646, -2.0313, 0.7252, 3.2474, 2.8194, 3.1981, 0.9009, 1.1286, -0.917, -2.4531, -2.402, 1.6229, 2.3317, -1.4971, 0.7586, -3.2903, -2.1223, -1.2864, 0.3911, + 2.1547, -0.4814, -1.6208, -0.2568, 3.766, 2.5927, -0.5335, 0.5221, 2.1027, -1.7193, -2.1878, -1.5973, 0.4487, -3.0208, -3.0695, -0.2839, 1.21, -4.2182, 4.88, 1.3123, + -0.8216, 0.0172, 1.0117, 1.8195, 2.2767, 0.0322, -4.7072, -3.7244, 0.2876, 1.2946, -1.1268, -2.0514, -0.3229, 1.5642, 2.8282, 1.4525, -0.2405, 0.3745, -0.8299, 0.8658, + -0.5885, -0.7711, -0.1566, 0.2456, -1.1305, -2.14, -1.5832, -2.7023, 2.6573, 2.8982, -1.9439, -1.4435, 3.2616, 3.0544, -1.0646, -0.2393, 0.2808, -0.6774, -3.3509, 5.3938, + -2.1609, 4.7541, 2.6519, 2.9104, -0.9771, -3.4464, 1.3102, 4.9024, 3.0997, 0.1198, -0.6878, -5.0516, -2.6241, -0.139, 0.326, -3.7625, -4.6033, 5.7644, -2.7192, 0.333, + -0.0774, 0.0212, 1.7356, 2.6966, 3.8703, -1.264, -2.204, -3.8688, -2.8745, -0.383, -1.2433, 2.7247, 1.1808, 0.5913, 3.3839, -2.9426, 0.1962, -0.6047, -3.1975, 2.2593, + -1.7694, -0.8337, -1.4857, 1.6357, 3.0084, 1.4757, 0.7496, 0.4982, -0.8638, 1.0294, 3.8151, 2.548, -0.4944, -5.1598, -4.1575, 1.6819, -0.9028, -3.0629, 2.9081, -0.6201, + -4.1737, -1.1372, 0.4218, -0.398, -0.2873, -2.0904, -1.4241, 1.1799, 4.8192, 5.5695, 2.124, -1.9634, -0.1503, -0.2208, -2.6623, -1.214, 1.5287, 0.1773, -0.4832, 0.3844, + 1.1759, 3.6352, 3.0816, -1.1382, -0.8341, -1.2549, 1.7627, -0.261, -1.7582, -4.6767, -1.9887, 0.8806, -0.2903, -2.9331, -3.3697, 0.3291, -2.5313, 6.3991, 2.6926, 1.0793, + 3.1054, 0.5446, -2.7707, -3.1154, -2.4354, -2.1091, -1.9215, 1.5263, -0.5089, -2.1954, -3.0602, -1.7502, 2.0283, 3.094, 3.1639, 6.0315, 0.1168, -2.3219, 2.2755, 0.3024, + 1.4017, 0.2037, -0.1188, 0.363, -1.7809, 1.2589, -0.0416, 0.1426, -0.29, -0.0669, -0.9365, -1.7637, -4.6543, 4.5857, 0.7173, -1.2893, 0.7992, 1.8632, 0.4734, -0.8667, + -0.6645, 0.3054, -0.1583, 0.39, 0.1223, 1.1996, 4.2148, 1.7843, 2.7706, 0.9297, -1.0663, 1.2711, -0.1675, -0.5861, -2.5452, -2.9107, 1.264, 0.2394, -4.6672, -1.7254, + 1.3908, 0.5115, -0.8577, 0.3878, 0.771, 1.2838, -1.2112, -1.293, -1.9359, -2.3893, -2.5796, 1.2692, 3.1933, -0.2748, 0.2489, 3.4206, -5.3967, -3.2312, 2.6326, 4.06, + -3.1151, -2.4768, -1.4409, 0.082, -0.065, 0.8542, 2.7545, 0.8481, 2.7775, 3.2925, -1.1392, -0.56, 5.6459, -1.5505, 0.7937, -0.2372, -3.8294, -1.7699, -1.1681, 0.3038, + -1.4631, -1.5744, -1.0602, 1.2727, 5.2755, 0.7411, 2.6424, 0.9111, -1.5443, -0.8217, -2.458, -1.9627, -0.3229, -0.7005, -0.1842, 1.441, 1.119, -0.0388, -1.7254, 0.4532, + 2.6735, -0.132, -2.0731, -1.2667, -0.0059, 0.4063, 1.1045, -0.65, 0.2919, -0.2343, -0.1432, 0.5161, -1.3203, -1.9223, -1.8439, -0.3541, 2.5902, 0.7807, 0.9691, 0.6136, + -2.576, -2.1039, 3.3039, 7.5737, 4.851, -1.928, 1.3509, -0.0624, 1.3149, 2.3856, -2.8836, 1.6777, 1.6919, -0.2315, 2.0672, -1.6292, -7.7877, -7.8864, -2.423, 3.2949, + 0.1825, 1.4326, 1.8802, -0.76, -3.5028, -2.0654, -2.5905, -1.978, -1.3931, -2.0377, 2.0912, -0.7666, -1.6801, 0.1901, 1.3312, -0.8245, -0.8221, 9.1933, 2.6121, -0.4925, + 0.6596, 0.5183, 0.0656, 0.6099, 0.217, -0.2483, 0.3752, 0.0528, -1.355, -1.959, -3.0746, -2.7901, 1.748, 0.0667, -1.3253, 1.8365, 1.2016, 0.6331, 1.5502, 1.2179, + 1.518, -2.8697, -3.0225, 1.1901, 1.2949, 1.2425, -0.2655, -1.0124, 0.1504, 0.9476, 0.8294, 0.498, -4.6214, -0.4714, 2.314, 0.5042, 0.0042, 0.6173, 0.025, 1.1274, + 5.2946, 0.9166, -1.6961, 2.6183, 3.7503, -0.5464, -0.4536, -2.5804, 0.7239, -3.0443, -0.9745, -0.5296, -1.2153, 0.2578, -4.9483, 0.2574, 1.6442, -1.7218, -1.0182, 3.2654, + -0.3113, 0.1627, 0.201, -0.6825, 0.4894, 0.3705, 0.5406, -0.5307, 2.3413, 3.1334, -0.2531, 0.7289, 0.0127, 0.8411, -0.5394, -1.5751, -4.4648, 3.3442, -1.3619, -2.4473, + 0.7892, 1.6007, 2.2451, -0.0142, -1.8268, 1.0211, 1.1632, -0.431, 0.4809, 0.7681, -0.3119, -3.184, 1.8621, 0.7982, 3.9396, 5.5125, -9.0182, -7.2338, 1.472, 0.3673, + 4.5691, 3.1984, 0.4848, -1.6299, -1.5279, -0.4613, -0.394, -0.7641, -0.774, -1.4705, -2.0718, -3.7739, -3.8204, -2.0882, 0.9538, 2.3794, 3.3309, 2.1292, 0.9829, 0.7475, + -1.7639, -2.13, 1.8133, 5.4637, 4.9096, 0.44, -0.2077, -3.2872, -2.801, -3.3973, 1.4612, -0.7884, -0.4468, 0.3167, 3.033, 3.6546, 1.5554, -2.1172, -5.0158, -0.6924, + -0.9691, 2.1549, 0.9464, -1.8955, -2.483, 0.5229, 1.0573, -0.1544, -2.7731, -1.7762, -1.2133, 0.4997, -0.404, 0.0598, 2.1564, 0.9676, 0.1749, -0.3066, 1.3334, 2.102, + 0.1735, -0.6351, -2.2851, 0.3979, 2.1071, 0.8723, -1.4327, 2.7248, 2.2122, -3.8366, -6.8693, 2.9956, 2.234, 0.2392, 4.5854, 0.8064, -0.4877, -1.9451, 0.1604, -2.0173, + -3.0467, -2.6229, -0.6828, -1.5402, -4.5504, -0.6274, -1.5654, -1.1048, -5.0244, 1.2208, 4.3959, 1.7152, 0.8404, 2.3104, 3.911, 1.3725, 3.6004, -1.5868, -0.0242, 3.0095, + 4.6972, -2.0723, 3.7478, -0.0539, -1.3604, -1.6975, -5.1051, 4.5477, 7.491, 0.8111, -1.5236, -2.0035, -2.3201, -1.9156, -1.8399, 2.7039, 1.1102, 2.7618, 0.1987, -8.1775, + 4.2697, 2.1482, 1.1807, -0.8188, -0.0158, -0.9415, -3.1934, -7.6652, -5.2761, -0.4096, 0.8289, -0.6591, -0.1321, -2.2645, 2.689, 3.5308, -0.186, 2.2844, 2.1691, 2.4613, + -2.6176, -1.9646, -0.3365, 0.449, 1.789, 3.0096, 1.2687, 0.1913, 0.7099, 3.1055, 2.4376, 1.5156, 0.2027, -3.2954, -0.8316, 0.625, 2.5125, -1.9645, -4.736, -2.0703, + 0.9801, -1.159, -1.1869, -1.8206, -2.6697, -2.2474, -1.9247, 1.339, 0.7955, 3.2786, 2.1796, 1.2439, 3.831, 0.9791, -3.7027, -2.0691, -3.3297, 3.47, 4.0219, -2.0091, + -1.9305, 1.1296, 2.7892, 3.5086, -0.4192, 1.8621, -2.4767, -4.562, -1.3151, -0.4855, 0.213, 4.0896, -0.2763, 2.9118, 1.5789, -0.3477, -0.82, 5.6054, -7.8822, -3.173, + 3.5183, 4.1815, 1.9981, -0.8261, -1.4369, -0.3881, 1.0213, -3.8793, -3.6636, 2.2621, 1.1803, 1.7727, -0.7985, -1.2902, -5.0777, -1.2307, 0.3381, 4.4122, -1.4815, -0.612, + 4.0477, 1.4256, -1.6604, -3.5999, -1.9136, -0.3445, 0.3946, 1.6694, 1.2905, 0.9828, 0.5724, -0.1289, 1.3498, 1.3379, 0.2067, 0.3656, 0.2492, -1.2128, -3.2905, -1.7416, + -2.0178, -2.6699, -1.3526, 0.2496, 0.4148, -0.8854, 1.0823, -0.6203, 1.2579, 0.4148, -2.2346, -0.4015, 1.4157, 4.8809, 6.623, -3.5608, -1.8735, -4.5603, 3.5038, 0.334, + 1.4937, -1.542, -2.385, 3.1706, 1.4707, 0.1938, 0.5057, 3.8806, -0.0936, 0.3334, 0.4606, 1.4472, -0.903, -1.4318, 3.5118, -5.2689, -1.4235, -1.2997, 0.0053, -2.1257, + -3.6561, 0.1855, 0.3705, 1.1645, 0.2341, -0.8092, 2.398, -0.3274, -0.4576, -1.1851, -3.8496, 2.0281, -3.3309, 0.9466, -0.078, 1.0318, 4.0737, 2.619, -0.3495, -1.0083, + -0.1238, -0.3756, -0.3626, -1.1974, -3.028, -3.3983, -3.5184, -2.8303, -0.2464, -1.0525, 0.7469, 1.1667, 1.9967, 2.0536, 5.8842, 4.672, 0.6593, -0.227, -1.2558, 0.4368, + 1.4898, -0.0036, 2.1872, 4.7731, 5.3388, 2.1104, 0.861, -1.9286, -4.4764, -2.9139, -5.8875, 0.1502, 2.3687, -3.3444, 1.8016, 2.0118, 0.348, 1.5855, -1.0664, -5.4053, + -0.2559, -0.097, 0.6606, -3.0637, -4.0503, -2.5522, 0.2345, 0.1786, -0.3244, -2.5706, 1.7286, 2.2086, 1.6927, 2.74, 1.934, -0.1619, 5.414, 3.6846, -5.1534, -2.2469, + 0.7337, 0.6464, -0.7291, -0.8337, -0.3024, 0.3377, 1.5178, 1.0116, 2.585, 0.9759, -1.397, -3.2182, -3.6906, -0.0798, 3.4993, -1.9939, -5.3046, 1.4115, 4.7666, 0.0639, + -2.9601, -0.9321, -1.3007, -4.5012, -0.6859, 1.6271, 0.8938, 1.8188, 2.7147, 2.4868, 2.4402, 0.6577, 1.204, 2.0247, 0.2523, 1.3499, 1.0757, -5.3086, -0.2223, -2.6347, + 1.2887, 2.2547, 3.3766, 1.8575, -1.791, -1.7548, 1.5265, 2.7964, 1.224, 1.972, 0.2687, 1.81, 3.1328, -2.586, -2.7821, -3.9778, -2.4086, -2.0066, -0.0746, -4.1265, + 0.8108, -0.0118, 0.351, 0.2469, -0.3564, -0.0688, 2.2772, 2.9983, 0.022, -0.8672, -4.831, -2.0824, 0.0877, 2.2501, 0.0661, -8.6456, -1.6422, 4.8643, 2.3157, 2.2152, + -2.3502, 1.9923, 1.6641, -2.2786, 3.4633, 2.605, -3.0058, 1.5172, -5.319, -0.9994, -2.4221, 0.2495, 3.8898, -2.058, 1.1705, 0.4058, -1.2798, 2.5712, -0.5349, 0.7192, + 5.2963, 2.758, 0.0542, -1.8363, 0.6217, 3.1975, 0.8761, 0.6926, 0.1889, -2.2049, -2.6639, -2.3949, -0.455, 0.9028, 0.9417, -2.32, -1.6049, 2.2215, -3.0876, -1.184, + 0.0332, 0.6867, -0.5444, -2.656, -2.3272, -1.9975, 2.7492, 3.4613, 1.2531, 2.297, 0.6826, 1.6161, 0.8081, -2.8567, -0.251, 3.1363, -4.7699, -0.8591, 1.4746, -1.9362, + 0.1179, 0.1304, -0.0905, -0.0885, 0.5876, 2.0857, -0.3875, -1.3306, -0.8957, -0.1982, 0.8458, -0.0513, -2.2349, -5.5634, 7.5385, 3.9965, -1.063, -1.5645, -2.102, 0.268, + 1.5416, 0.4773, -0.0338, 0.6704, 0.3091, -0.0982, -0.8312, -1.8586, -2.1668, -3.0698, -3.6621, -2.8717, -0.1465, 2.9749, 3.0473, 2.3156, -0.0362, 0.7605, 1.1471, 1.5312, + -1.4651, -1.1492, -0.67, -0.6012, -0.1247, 1.155, -0.2106, -1.2695, -0.4411, 1.1446, 4.1491, 2.66, 1.3124, 1.6069, 0.6316, -0.4851, -2.5715, -4.3867, -1.004, 1.7189, + 0.2437, 0.6555, 0.3411, 0.8466, -1.7425, -0.1636, 6.1311, 0.6211, -2.703, -1.5009, -0.1744, 0.866, 1.3589, 1.249, 1.1273, -2.7402, -0.0949, -1.544, -1.861, -0.9159, + 4.3927, 3.3672, 0.9009, -1.2521, 0.623, -0.5206, 0.8245, -0.9087, -1.8374, 0.0097, -3.1469, -2.4307, -3.0482, 0.2541, 1.948, 5.7092, -3.3716, -3.2953, 2.6836, -0.9014, + 2.2171, 0.1913, -1.6779, -0.9585, -1.3241, 0.2292, 1.4881, 2.7969, 0.2756, -3.8207, -2.4695, -0.3208, 2.3024, 2.5414, -0.1815, -0.2933, 2.0837, 0.9892, -1.0861, -2.9823, + 0.1186, 0.1645, -0.3865, -0.8001, -0.3047, -2.3398, -0.6229, -0.0641, 0.8491, 1.7026, -1.1341, -2.0704, -0.3123, 0.1814, 3.882, 1.2943, 0.4627, -0.5672, 0.5181, -0.5712, + -0.1015, -2.3234, -2.352, 0.9949, 2.2704, 0.9946, 0.356, 0.9113, 0.1017, -0.453, 0.852, -1.0302, 0.8806, 0.3674, -2.6615, -4.89, -2.9475, 1.9045, 2.6392, 4.4864, + 2.3941, 1.701, 1.9067, 0.4931, -1.4348, -2.6074, -1.1597, -1.0504, -3.046, -2.8157, -0.6597, -0.592, -0.3406, -1.123, -0.8586, 4.9381, 2.8734, 1.4518, 2.5923, -2.6625, + -0.8669, 1.9301, 3.2551, 6.1577, 2.0399, 2.6785, 0.738, -0.3115, 4.7391, 1.4868, -6.0175, -7.4317, -4.5623, -0.859, 3.8966, -0.1349, -2.5476, -0.008, -1.4441, -2.7383, + -1.8064, 0.5147, 0.58, -2.6271, -3.9359, -2.9321, -2.4785, 0.6104, -1.7343, -0.3653, -0.3024, 0.235, 2.3057, 1.9998, 2.2392, 1.9124, 3.0438, -0.2241, 5.1672, -2.202, + 1.858, 3.3342, 3.04, 1.067, 0.2251, 0.548, 1.7906, 0.7871, 1.285, -0.3795, -2.015, -2.3713, 0.5611, 0.5214, -0.8547, 0.0171, -1.8463, -2.7006, -1.7828, -3.0844, + 1.4841, -0.81, -2.4242, -1.8509, -0.9746, -1.0553, 4.8924, 1.3818, -1.8605, -4.3708, -2.0142, 6.4457, 0.9506, -0.5924, 0.1104, 2.4175, -0.6754, -0.8459, -0.1554, -0.053, + -0.0877, -0.9877, -1.7358, 0.3853, 1.1022, 1.2975, 4.3189, -1.9877, -3.1833, 1.0392, 0.1796, 4.1158, 1.465, -1.6177, 1.6123, -4.1615, -3.2584, 1.2187, -4.3136, 4.5989, + 0.4487, -0.1107, -2.0381, -0.2337, 2.5745, 2.8339, -0.0417, 1.4413, -1.4483, -1.1675, -6.2515, -6.936, -3.2717, 4.8492, 0.9246, -0.975, 4.1724, 1.7821, 1.382, 2.0655, + 0.1081, -0.6949, 0.1665, 0.6685, 0.879, 0.7273, 0.1766, -0.0005, -0.2218, -0.4294, 0.4489, -0.4843, 0.2008, 2.1975, 4.5024, -1.0296, -1.2026, -2.5547, -1.0944, -2.3636, + 2.3396, 2.1543, 2.2429, 4.7578, 0.839, -0.8895, 4.6297, 0.4985, -2.3653, 2.1787, -1.0612, -0.8953, -6.2919, 0.5546, -0.4272, -0.967, -1.9781, -0.4692, -5.5295, 0.6795, + 0.153, -2.1926, 2.1973, 4.5005, -1.3453, 1.3286, -2.031, 1.0783, -1.351, -0.7983, 0.6783, -3.4857, 5.3977, -3.6561, -3.5986, 6.0882, 0.1428, -0.9697, 3.0219, -5.1583, + -2.6086, -0.0766, 2.7222, 2.0552, 2.4096, 3.0319, 1.0596, -0.1283, -0.8104, -0.2732, -1.4259, -4.0229, -1.4469, -1.6716, -1.1861, -0.9216, 0.678, -0.0004, 2.0118, 0.6041, + 1.8333, 3.1078, -1.8097, 1.1817, 3.7643, 0.5185, 1.9828, -0.3454, 1.2321, -1.0494, -6.2996, 3.9399, -4.6043, 2.7296, -2.2906, -1.7821, -0.5503, -0.1687, 1.5615, -2.9514, + -1.9822, -1.787, -2.0807, -0.6471, 1.7376, -0.7108, -0.9897, 0.1273, -1.5435, -3.408, 1.1979, 3.2003, 1.0189, -0.9731, -1.079, -1.9655, 3.5511, 1.2692, 3.4593, 1.6049, + 1.8097, 0.7952, 2.3044, 2.0422, 0.0385, -1.489, -2.6817, -2.4115, -2.0814, -4.7349, 1.3168, 5.2099, 2.0691, 0.2209, -0.3967, -1.391, -0.0825, -1.397, -1.3074, 2.1664, + -0.6317, -0.6961, -1.7818, 1.7212, 1.8896, 0.7627, 6.4133, 0.0239, -2.0812, -0.634, -0.8745, -0.8436, -3.5167, -3.0992, -0.4403, -5.0217, 5.7819, 4.7221, -2.9383, 1.2443, + -0.8542, -4.8873, -5.4381, -4.263, -4.129, 0.7749, 4.7768, 0.2842, 0.3115, -0.282, 0.2149, -0.1804, 0.6193, 5.7873, 5.1866, -1.3257, -3.0389, -1.9693, 8.9711, -0.5589, + -1.7203, 0.3016, 0.2697, 0.0913, 0.2499, 2.9554, 0.332, 0.0927, -3.0516, 1.3578, -0.8456, 1.2764, 0.1248, 3.9102, 2.8147, -2.3847, -6.7532, -2.2614, 1.9868, 1.2535, + 2.3588, 1.8978, 1.0798, 1.0217, 0.8258, -0.3312, 0.8967, -0.1754, -0.3981, 1.015, -0.3879, -0.8493, -1.269, -1.1797, 1.5079, -0.1598, -2.3607, 1.1269, 2.648, -7.2674, + 1.1746, 4.6165, 5.494, 3.4461, -3.9021, -1.605, -0.1323, -0.938, -0.4156, -1.9, -0.2856, -1.2349, -3.6515, -2.9147, 0.053, 1.1469, 0.2371, -1.3253, 3.8834, -1.7466, + -2.2758, 1.8844, 4.6711, 2.2076, -1.3597, -0.4741, 0.4627, -0.0358, -0.0017, -1.0258, -0.6957, -1.027, 1.1372, -2.604, -3.0616, -4.3523, 1.6973, 1.9314, 1.1807, 1.741, + 1.9665, 1.3206, -0.1069, 0.8467, 1.1209, 2.6581, 1.0313, -0.7646, -0.9327, -0.4666, 1.3979, -1.1019, -2.4235, -8.2049, 1.1737, 4.931, 0.7484, 0.2664, -6.0708, 2.6104, + 1.1852, -1.5416, -3.6491, 4.4048, -6.7437, 4.6469, 1.6802, 1.291, 2.2789, 2.761, 1.3944, -0.7732, -5.8136, 4.4421, -2.2039, 0.8414, -5.8722, -4.6747, -3.6578, 10.0038, + -3.9689, -0.5502, 1.1683, -2.1974, -1.9082, 0.1416, 1.6772, 0.326, 3.7162, 2.4168, 2.6207, -1.7735, 1.5236, 0.348, -0.3569, 4.1471, 1.4471, -0.6226, -8.1997, 0.0448, + 0.6532, 1.491, 1.2058, 1.7096, 2.395, 1.7319, -1.5483, -1.8447, -2.2888, 0.7634, 3.2796, 1.6709, -4.9985, -3.0829, -1.1211, 1.2229, -0.2209, -1.194, 1.9569, -1.7811, + -1.9523, -4.3005, -4.5837, 1.0346, 1.2567, 1.0099, 3.2344, 2.8332, 1.1895, -1.5164, -2.2052, -1.2334, -1.4331, 2.1022, 2.3179, 5.6712, 2.1958, -2.0504, -2.5243, -1.046, + -1.1815, -1.53, -0.6842, -0.5633, -2.6867, -1.4016, 0.6359, -2.017, -1.297, -1.6432, -1.0489, -1.3764, -1.1731, -0.5962, 3.5229, 5.3595, 3.1187, 3.4061, 0.3009, 0.855, + -3.1382, -0.628, -0.8774, -0.9941, 0.9435, 0.9619, 0.852, -3.3796, -3.2423, -1.3758, 3.304, 2.2194, 1.0056, 2.5348, -0.2996, 0.9762, -3.7819, -0.3936, 5.7234, -0.4105, + -3.2428, -5.3967, -1.5226, 4.3711, 2.0836, 2.1112, 0.7032, -4.0183, -12.6551, -15.4852, 0.9361, 9.2253, 10.5424, 3.4081, 3.4337, -0.7556, 1.6657, 0.8127, 4.5992, -0.816, + 1.8248, 0.0419, 0.5248, 1.8646, -1.2814, -2.6618, -0.0669, 0.1817, 2.2151, -0.8152, 5.1179, 2.3104, 3.6555, -8.7128, -2.079, 1.0629, -0.0963, -1.5473, 0.4756, -2.0146, + -0.1111, 0.3482, -0.0235, -0.7175, -0.1449, -0.3857, -0.8724, 0.4592, 0.498, 0.2237, 0.3924, 0.2623, -0.5426, 0.937, -0.6701, 0.16, 0.1978, 1.4707, -0.454, -1.0274, + -0.9442, -0.4989, -0.2375, -0.5991, -1.2414, -0.4327, -0.2055, -0.5191, 2.6955, 3.9938, -2.7275, 1.8004, 1.9744, 1.7067, -0.5541, -5.7033, 0.6046, -1.4009, -1.3782, 3.6669, + -0.8575, 0.6722, 1.8197, 2.2695, 1.4265, -1.5445, -1.743, -1.5937, 2.047, -0.1126, 0.3473, 1.4243, 0.9317, -1.3895, -1.064, 0.4664, -0.0706, -3.0958, -1.0532, 1.1198, + 0.9735, -3.1553, -4.9524, -1.8534, 0.7715, 2.4911, 5.1271, 0.432, -4.1146, 1.1236, 2.7184, 2.0135, 1.9444, 1.7813, 1.8232, -2.6267, -5.6361, 0.3774, 1.0979, -0.3363, + 1.9497, 1.0413, -1.2191, -0.8636, 0.0511, -0.3375, -0.5315, -1.0284, 2.1218, -5.0828, 1.0827, -2.2172, -1.3936, 0.4537, 3.3006, 0.9962, -1.2147, 0.093, -2.8723, 5.6705, + -3.0064, -0.669, 1.9882, 3.1451, 0.5101, 1.4897, 6.0735, 3.0322, 0.7197, 2.5823, 0.9024, -1.3595, -0.6102, -4.4164, -5.2345, 0.5038, -1.7243, -1.0135, 0.3868, -3.2999, + -1.3127, -0.5603, -0.4395, -0.5779, -1.3273, -0.7737, 1.1446, 2.1363, 0.5709, -0.9646, 0.1742, -0.3429, 0.7079, -1.3617, -0.1807, 0.8278, 4.5177, -3.6128, 1.9484, -0.5738, + 4.9592, 5.5662, -1.4308, 2.4625, -1.3728, 0.3179, 2.5142, -3.1176, -3.0793, 2.5866, -6.0767, -3.0209, -1.0428, 3.7946, 3.4423, -3.9407, 3.868, -5.8781, -3.2612, 2.7097, + 1.8752, 4.6096, 2.6992, 0.0622, 1.9683, -1.5159, -0.2846, 2.0429, 5.1916, 0.0415, 0.4228, 0.2499, -1.8859, -1.2282, -1.8414, -3.2239, -2.8594, -2.2718, -1.947, -2.105, + -0.4172, -0.066, -0.7815, -1.3234, 1.6425, 1.596, 0.1952, 2.8005, 1.8348, -0.0556, -1.7528, -0.333, 2.5351, 3.2175, -0.0237, -2.6102, -2.3993, -0.4569, 0.2104, -3.8124, + 0.534, -7.1325, 7.3739, -7.1474, 5.0035, 4.0837, 1.7481, 0.6285, 2.147, 3.3649, 3.4871, -4.6213, 5.3643, -0.8361, 2.3067, -0.6517, -4.1528, -4.1599, -0.0969, -7.2432, + 6.4977, -1.8922, 6.0123, 2.6649, 3.9019, -2.9401, -5.9544, 6.5995, -3.7727, -1.3909, -4.1986, 0.3151, 1.1248, 0.2299, 1.4836, -7.4381, 0.2549, 4.7727, -2.9947, -3.2755, + 0.0546, 0.0075, 0.5596, 0.2523, -2.3268, -4.5642, -3.6799, -0.8395, 2.7336, 3.7088, 2.7486, 2.6118, 1.5065, 0.0463, 0.417, -0.5592, 1.5006, -0.4534, -1.6715, -2.0529, + 2.9815, 2.4495, 1.7545, 3.2822, 2.8844, 2.5666, 0.0398, 1.6192, 2.6128, 3.3153, -4.7284, -2.6356, -1.7561, -4.3333, -3.6328, -2.9815, -0.9212, -0.8755, -0.3601, -1.2811, + -0.8024, 1.2002, 3.222, -0.7626, -2.1102, -1.0525, -1.8044, 0.6518, -0.3024, 1.2038, 0.2348, 0.2257, -2.8991, -1.661, 1.3306, -0.9177, -2.5629, -0.6077, 5.6868, 1.7272, + -0.1833, -0.3751, 0.5635, 0.1503, -0.2949, -0.6821, 1.4873, -1.2805, -1.3007, -0.6803, 0.0098, 0.9789, 1.7868, 3.5914, 0.8184, 1.0857, 6.4677, -3.3457, -6.706, -2.0913, + 4.2126, 1.0339, -0.8906, 0.9053, 2.8206, 3.1913, 0.4808, 1.7342, 1.1617, 0.7387, 3.7928, -0.7288, -6.1883, -1.6937, -4.9005, -3.6291, -0.7611, -1.4035, -0.2407, 0.3643, + -8.3754, -2.2519, 1.308, 1.8062, 0.885, 1.6497, 2.088, 2.7261, 0.2633, -0.5998, 0.5979, 0.7034, 0.996, 2.9711, 0.165, 0.8745, -0.1614, -0.6875, -1.3556, -3.6024, + 1.4188, 1.0202, 1.5256, 1.662, 0.7476, -1.439, -3.4051, -1.878, 0.4521, -3.9741, 0.7867, -0.3719, -2.3721, -1.0437, 0.6801, -0.2011, -3.0818, 2.9062, 4.2361, 2.3315, + 0.1054, -2.6122, -4.3807, -5.3145, -0.2846, 4.3842, 3.017, 3.8061, 0.711, -1.0498, -0.2574, -0.9802, 0.3402, 1.2503, 2.5457, -7.8042, -0.1469, 2.8259, 3.0062, 0.8386, + 5.2058, 7.108, 4.9534, -1.243, -6.6855, -3.7117, -6.1961, -2.1515, -0.5576, -1.6169, 5.7678, 7.778, -3.9195, 1.0323, -4.8749, 2.1979, -6.6948, 5.7018, -1.1809, -0.9126, + 5.0054, 3.2246, 2.722, 2.5774, 0.3515, -0.4988, -0.6659, -1.1531, -0.3512, -0.2899, -1.1677, 0.8076, -0.071, -1.3279, -1.882, -2.0262, -1.5275, -2.277, -2.2582, 0.808, + -0.3421, -2.1542, -1.9404, 1.9715, 2.0717, 1.269, -0.59, 2.8831, 2.5295, -0.0718, 1.0132, -2.1895, 0.9449, 0.2787, 2.8471, 3.2171, -2.0622, -4.9892, -4.8142, 0.1278, + -3.5648, -4.522, -3.8219, -0.0484, 2.559, 3.3348, 4.6892, 3.089, 3.1738, 2.4402, -0.3648, -2.0478, -1.8476, 0.1171, -0.1749, -2.2364, 0.1988, -2.2378, 0.6726, 0.592, + -2.5566, -0.841, -0.428, -0.4406, -0.5726, -0.3279, -1.871, -2.483, 2.814, 4.1548, -1.1877, -1.2228, 1.1741, 0.7041, -4.1128, 0.8974, 1.646, 2.7315, 1.4956, 0.4265, + 0.6395, 0.6244, 0.2175, 0.2548, -0.6436, -1.4509, -1.2471, -1.8889, -1.6984, 0.63, -0.0902, -1.4274, 1.6267, 2.2897, -1.4907, -1.0863, -0.599, -0.3234, 4.5402, 1.1229, + -3.0281, -3.4576, 0.2465, 1.1848, -0.3128, -1.4112, -1.7883, -2.4368, -3.6604, 0.2309, 4.1432, 0.2306, 3.9874, 1.3414, -2.9661, 0.2318, 1.3943, 2.8996, 1.0512, 2.1197, + -6.4523, -0.8108, 3.0394, 2.9265, 1.7276, -0.6852, -1.3401, -1.2086, 0.2339, 0.6323, 0.9584, -0.4322, -0.4865, 1.1438, 3.9792, -0.5978, -3.3409, -0.0134, 0.1557, 0.5712, + 0.8836, 0.6632, -0.5682, 1.0909, 1.02, 0.2143, 1.7898, 0.4314, -1.2105, -1.6888, -2.8939, 1.5904, 1.4323, 5.0287, -2.409, -2.6282, -1.2927, -1.8499, -3.8726, 4.2691, + 2.7571, 0.5054, 0.5914, -0.4593, -1.9535, -2.8534, -5.1043, -5.0146, 0.3167, 1.921, 1.992, 1.2596, 1.2329, -1.0134, -2.2148, -0.9619, 3.3405, 0.4893, 1.9185, 3.2509, + -7.8257, -8.0514, -2.2922, 4.6049, 1.7841, 0.2877, 2.46, 0.2299, 0.3961, 0.7952, 4.9841, 0.5914, -3.3601, 1.4043, 5.5671, 2.2508, 0.0018, 1.51, -2.0511, -3.2867, + 1.5686, 1.2169, -0.6391, -2.6751, -3.0325, -3.9104, -2.5516, -0.9763, 6.3909, -1.3255, 1.3817, 1.7409, 2.2064, 2.8908, 0.3118, 0.3554, 0.3092, -0.0695, -2.5566, -0.6363, + 1.1784, 0.7886, 1.7506, 3.8841, 0.1097, -3.4846, -1.1668, -0.2517, -0.3004, -0.0493, 2.027, 0.2092, 1.544, 3.4255, 0.2943, -0.8517, -1.6072, -4.0976, -5.8976, 2.4958, + 0.9988, 2.8848, 3.2891, 3.3681, 1.4676, 3.2906, 1.3735, 1.197, 0.4611, -0.5875, 1.7464, 0.9583, 0.5681, -1.4825, -4.2976, -3.2226, -2.3712, -7.0782, -2.8558, 0.2917, + -0.2746, -0.1545, -0.1213, -1.7658, -0.9647, -0.899, -2.2776, -1.6043, 2.1487, 5.2377, -7.3002, -1.2976, 0.8951, 2.6087, 1.9104, 0.8944, 4.2107, 2.4289, -0.6124, -3.0624, + 4.5993, 2.8908, 2.6348, 2.5753, 3.5423, -1.3467, -3.634, -1.3719, -1.5896, -1.7807, 0.4182, -0.4869, -0.0081, -1.7322, -5.0302, -4.0281, 3.2297, 0.1854, 0.7317, 0.2006, + -3.2143, -2.4079, 2.3832, -1.4835, -2.9589, -4.3471, -9.4701, -8.698, 2.2131, 11.9939, 3.4222, 5.6731, 1.0493, 0.9347, 3.177, 3.6996, -0.0115, 2.2951, -2.8928, -1.3571, + 2.2986, 0.5686, -2.7234, 0.0628, 3.3595, 3.0322, 1.2528, 0.1697, 0.2877, -3.1109, -4.5198, 4.2898, 4.5477, -0.5365, -2.9437, -1.776, -3.4896, -0.4971, 0.5506, -0.823, + 0.0226, -1.9088, -4.1034, -3.5139, 1.8311, 6.6465, 1.9042, -0.2585, 0.4811, -1.3603, -0.8669, -2.6469, -2.4021, -2.3699, -1.0708, 1.8059, 0.3697, 0.3642, 3.4726, 3.6036, + 1.8666, 0.3455, -0.4415, 1.453, 2.1752, 0.4141, 0.9988, 0.9339, 2.0369, 0.0808, -1.3138, -1.2683, 0.1032, 0.3074, 0.3794, -2.248, -4.4451, -2.7006, 1.2456, 0.077, + -0.9714, 0.8948, -0.5528, -1.5023, -2.1884, -1.619, -2.6643, 0.3765, 5.2588, 1.9474, 4.7336, 6.0668, 0.9206, -6.1173, 0.2687, 4.2344, -2.7801, 4.7836, -5.9468, -5.1428, + -3.5447, -2.6492, -1.1225, 1.1104, -0.6763, -0.3734, 0.7874, 2.9348, 3.7914, 3.3802, -3.0687, -1.7645, -1.7552, 0.4322, 1.5566, 3.1434, -2.9717, 0.2913, 0.3294, 0.1693, + 2.3099, -0.6833, -2.4051, -0.87, -0.1793, -0.7055, -1.1773, 0.0766, -2.2742, -3.5734, -2.1986, 0.6775, 0.1605, 0.0083, 4.2284, 1.3025, 3.7892, -0.0746, -0.9582, 2.5465, + 0.9486, 0.1048, 1.8316, 3.4918, 2.1758, 1.1342, 1.0848, 2.4632, 0.0993, -1.9453, -1.1703, -1.6274, -2.0353, 0.8991, 0.4736, -4.0911, -2.9565, -2.3552, -2.1133, 3.5874, + 0.6208, 3.4997, 6.2697, 4.2107, 1.2652, 2.1894, 1.1355, -2.5271, -2.9525, 0.0535, 0.3829, -2.5199, -2.9063, -2.7287, -1.9607, 1.46, 1.2748, 0.44, -4.8467, -2.3602, + 0.5243, 2.9289, 2.2684, 0.4191, -2.1542, -0.2881, -0.2706, 0.6758, 5.4475, 1.1883, -2.5477, -6.5024, -4.1506, 0.6656, 0.9576, -1.2352, 1.0736, -4.8441, 2.5699, 3.2741, + -0.7794, 1.1463, 3.5016, 1.112, 0.8485, -1.0628, -0.8132, 3.8405, -0.3344, 1.2653, 0.4357, 0.5494, -2.5741, -2.4964, -3.4166, -4.9706, 4.8271, -4.7341, 1.1838, 2.4711, + 1.8447, 1.0979, -1.7573, 0.3863, -0.5133, -3.1578, 0.0583, -0.5417, 4.1974, -4.603, 0.1241, -3.2329, 4.6242, -4.6647, -2.461, 0.5959, 3.2183, -1.2626, 5.6612, 0.3859, + -2.3894, -1.0328, 1.7896, 5.5648, 5.222, 1.8869, 1.0956, -0.1977, 3.2983, 0.9466, -2.0813, -0.1679, -0.5816, -0.1714, -2.751, 1.1951, 1.5496, 1.64, -5.0073, -9.808, + 0.7738, -1.7298, -3.2257, -0.3183, 1.9284, 1.7227, 0.8166, 0.9095, 0.5332, -0.5016, -1.266, -1.9608, 2.0035, -2.6922, 3.7039, 0.8905, -0.7247, 2.7531, -3.0591, -0.5571, + -0.0748, -0.507, -0.2516, 1.7723, 1.4041, 4.352, 1.7022, 1.099, -1.4641, -2.362, 3.1174, 0.5476, 1.5192, -1.9294, -4.9678, 0.2919, -3.1451, 1.3976, -0.5997, -1.9017, + -0.3043, -4.5751, -6.4864, -2.8079, 2.8553, 1.4264, -0.629, 0.8259, 1.1617, -0.8255, -1.1913, -0.9336, -0.8179, -0.6841, 2.7254, 1.919, 4.4832, 2.4919, 2.0452, -0.6788, + 2.9368, 3.5644, 3.7164, 3.7726, 0.3148, -2.5071, -1.0177, 0.4365, 0.4818, -2.1099, -3.0728, -1.1823, -1.8323, -2.546, -3.2217, -2.5081, 0.1068, -0.334, 2.0018, 3.0001, + 2.0122, -0.8437, -0.0894, -3.5669, 0.2151, 1.3672, -1.1852, 2.2748, 0.2674, 2.1266, -4.5961, -3.5181, 1.641, 4.2095, -4.0873, 0.0362, 3.5548, -2.6567, 1.8468, 0.9915, + -2.9528, 1.3693, 1.3737, 3.6447, 4.6399, 3.0004, -0.4081, -0.5069, -2.0885, -2.1563, 0.7639, 0.479, -2.4821, 1.6495, 0.828, -0.4457, -4.8607, 3.5285, 3.1896, -8.5655, + -4.4449, -2.6584, -0.3396, 2.7055, 3.1313, 2.6691, -0.1405, -2.692, 1.138, 5.9263, 0.1508, -2.5031, -2.5963, -2.2339, -0.4387, 2.7348, 0.1166, -2.0958, -0.1884, 1.7591, + -0.4506, -2.2585, -2.0183, -1.2141, 2.3804, 5.1371, -0.1012, 0.7185, -1.9558, -5.5843, 1.7274, 2.5676, 1.3295, -2.3148, 3.4722, 0.9168, 0.3809, -1.2468, -0.6805, -0.8055, + -0.5741, -1.3187, -1.6054, -1.8387, -3.0009, -2.2631, 1.6411, 1.0542, 0.863, 1.3059, 0.666, 0.5171, -0.9355, -1.8837, 0.8703, 0.385, -0.0855, 0.2754, 4.4605, 1.4674, + 4.0853, 2.9178, 0.0251, -1.7053, -2.9819, -2.0918, -1.9947, -0.8293, -0.6373, 0.5052, 2.1796, 2.6733, -1.7046, -0.6344, 1.362, -0.4864, -2.0884, -1.6708, 1.5012, 1.5754, + -1.5635, 2.8252, -0.9149, -3.0463, -4.7327, 2.7084, 1.1209, 0.7968, 0.7865, -1.2527, -0.1248, 2.6941, 2.7972, 2.2336, -0.0652, -0.4532, -2.9265, -0.056, -0.4324, -0.3945, + 2.462, 0.7164, -1.5674, -3.1513, -1.6402, 2.4149, 2.901, 2.5761, 3.2262, 0.0749, -4.5314, -3.4112, 0.2922, 1.0743, 0.0408, -1.5976, -0.5032, 0.6577, 0.7598, -0.794, + 1.971, 1.173, -0.6838, -2.2094, -1.9356, 1.4952, -2.0825, -0.2927, 0.7657, -1.8337, 4.4472, -3.8324, 0.7557, 0.0732, -3.6271, -1.9071, 4.314, 2.4552, -0.0317, 0.9857, + 3.7325, 2.7934, 1.0157, -1.7096, -2.8454, -1.8953, -0.7562, 0.3146, -0.3781, -1.002, -1.6158, -0.3984, -0.0573, 0.9972, 1.0112, -1.0599, 0.037, 3.6124, 1.1087, -2.9047, + -1.4832, -1.9899, -0.8731, -0.933, -2.9066, 2.382, -0.1603, -0.717, -1.1285, -0.9274, 2.1578, 6.4011, -1.6535, 2.3099, -1.6654, 3.7268, 0.0883, -1.8527, -0.5184, -0.2568, + 0.6353, 1.3687, 1.8257, 0.3226, -0.8766, 1, 1.0853, 1.2934, 0.8779, 1.7553, 1.1543, -2.0442, -1.6763, -0.4593, 0.9294, -1.2072, -2.2593, -0.6144, -2.8074, -0.3032, + -1.207, -1.3475, -1.8312, -1.7806, -2.9611, -3.1818, 2.9332, -0.124, 0.1906, 2.9202, -1.8371, 1.0525, -2.0319, 2.7074, -2.1979, -1.3072, -0.5591, 3.0013, 2.66, 4.9011, + -5.1303, 3.387, -3.7967, -1.9466, -5.3864, -1.1368, -0.5684, 3.7351, -0.5755, -3.2378, -4.425, 2.035, 3.9372, 5.4701, -2.7768, 5.9464, 6.6849, -3.7875, 1.9948, -0.423, + -1.3037, -1.9678, -3.152, -1.4018, 0.2092, 2.801, 2.076, -0.3324, 1.0911, 0.905, 1.7187, 3.4255, 1.0022, 3.5722, -3.5224, -4.7658, -1.0745, 0.2766, 1.2898, -0.8471, + 1.9772, -2.9635, -3.024, -2.2547, 0.1703, 1.7771, -1.6073, -3.1859, 1.541, 1.4356, 0.9203, 3.9297, 4.2495, 5.7007, -4.0193, -0.8612, 1.6423, 0.8844, -5.1605, -1.1517, + 2.9132, 0.8992, -1.0688, -1.5448, -0.9185, 0.4003, -1.77, -2.7768, -1.4639, 0.2261, 0.7139, 1.7997, 3.0514, 3.3204, 0.6803, 0.9792, -0.2717, -2.645, -0.2252, -2.2988, + -2.9741, -2.4804, -3.0116, -3.1521, 0.1074, 1.3714, 0.6662, 2.0637, 1.7849, -0.4611, -0.772, -1.6172, 0.8203, 3.4203, 0.8069, 2.2581, 3.2451, 0.5915, -2.2429, -0.4245, + -0.8028, -0.229, 0.2137, -0.4319, 0.558, 0.2543, 0.9172, 0.8892, -0.4807, -1.2827, 0.9202, 1.1454, -1.6931, -3.6479, 0.4568, 3.9049, 1.2435, 2.6145, 0.7928, -5.3425, + 2.619, 1.9162, 0.9769, -0.1078, -0.429, -0.365, -2.8284, -4.4494, -5.991, -4.8405, 0.711, -0.4595, 0.2195, 3.3942, 0.9527, -1.8867, 3.8742, 3.7699, 1.215, 1.7087, + 1.8829, 0.7201, 0.6607, -0.0626, -1.194, -1.4411, -0.0944, 0.1172, -0.7491, -0.3712, -2.5287, -2.1899, -1.228, -1.4906, -0.5689, -1.4885, 2.7842, 4.0586, -1.1367, 4.32, + 4.671, 0.9897, -0.6156, -0.6851, -1.412, 4.1532, 4.4321, 1.1339, -1.0985, 0.5736, 1.4085, -4.6356, -3.3117, -1.5968, -3.4345, -0.7293, -0.0528, -0.3096, -3.6684, 4.188, + -2.5398, -1.383, 0.0979, 1.9654, 3.5192, -0.0522, -3.287, -3.8507, 0.6356, -0.985, -3.0198, -3.7269, -0.831, 1.9829, 1.8339, -0.8073, 0.2152, 2.0459, 6.118, 2.0688, + 0.4962, 3.2227, 3.5953, 1.3395, -3.4218, -4.9933, -1.9981, 0.9513, -1.0998, -2.7535, 1.3298, -0.6976, 0.0716, 0.7392, 5.8854, -4.3047, 2.189, 1.9699, -2.4444, -0.0765, + -5.8327, 1.1129, 0.8081, 5.6003, 5.5684, 4.702, 2.8089, 0.4347, 1.1649, -4.9188, -11.4465, -1.3196, 0.4225, -2.4705, 0.3286, -0.0113, 8.734, -2.122, -2.1264, -1.4373, + -1.6231, -1.3969, -2.0111, -1.262, 4.3084, -1.2012, 1.2341, 0.1866, 0.0635, -2.6548, 2.3896, 1.8088, 0.029, -4.3105, 3.9166, -0.0331, -0.3748, -2.471, 1.0435, 2.3583, + 0.631, 1.3989, 1.5277, 0.7608, 1.0894, 1.7235, 2.0681, 2.3537, 0.9918, 1.2164, -0.3325, -2.2666, 0.1756, 0.1615, 0.5196, -2.673, -7.1201, -2.9272, -5.4551, 6.1563, + 7.8768, 5.4153, -2.5369, 0.0405, 4.1259, -0.2108, -4.6599, -0.9803, -1.3472, -5.5873, 0.0334, -6.0975, -0.7915, 0.7551, -0.1575, 2.8766, -3.5702, -0.2561, 4.01, 1.0615 +}; + +const struct lsp_codebook newamp1vq_cb[] = { + /* /home/sh/Downloads/hackrf/codec2/src/codebook/train_120_1.txt */ + { + 20, + 9, + 512, + codes0 + }, + /* /home/sh/Downloads/hackrf/codec2/src/codebook/train_120_2.txt */ + { + 20, + 9, + 512, + codes1 + }, + { 0, 0, 0, 0 } +}; diff --git a/libcodec2-android/src/codec2/build_linux/src/codebooknewamp1_energy.c b/libcodec2-android/src/codec2/build_linux/src/codebooknewamp1_energy.c new file mode 100644 index 0000000..8d747eb --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/codebooknewamp1_energy.c @@ -0,0 +1,43 @@ +/* THIS IS A GENERATED FILE. Edit generate_codebook.c and its input */ + +/* + * This intermediary file and the files that used to create it are under + * The LGPL. See the file COPYING. + */ + +#include "defines.h" + + /* /home/sh/Downloads/hackrf/codec2/src/codebook/newamp1_energy_q.txt */ +#ifdef __EMBEDDED__ +static const float codes0[] = { +#else +static float codes0[] = { +#endif + 10, + 12.5, + 15, + 17.5, + 20, + 22.5, + 25, + 27.5, + 30, + 32.5, + 35, + 37.5, + 40, + 42.5, + 45, + 47.5 +}; + +const struct lsp_codebook newamp1_energy_cb[] = { + /* /home/sh/Downloads/hackrf/codec2/src/codebook/newamp1_energy_q.txt */ + { + 1, + 4, + 16, + codes0 + }, + { 0, 0, 0, 0 } +}; diff --git a/libcodec2-android/src/codec2/build_linux/src/codebooknewamp2.c b/libcodec2-android/src/codec2/build_linux/src/codebooknewamp2.c new file mode 100644 index 0000000..1508ff2 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/codebooknewamp2.c @@ -0,0 +1,527 @@ +/* THIS IS A GENERATED FILE. Edit generate_codebook.c and its input */ + +/* + * This intermediary file and the files that used to create it are under + * The LGPL. See the file COPYING. + */ + +#include "defines.h" + + /* /home/sh/Downloads/hackrf/codec2/src/codebook/codes_450.txt */ +#ifdef __EMBEDDED__ +static const float codes0[] = { +#else +static float codes0[] = { +#endif + 11.9178, 14.1558, 15.0079, 16.3077, 17.3822, 18.2611, 17.4655, 14.7258, 9.9322, 5.5523, 2.3108, -0.5449, -3.1948, -5.2578, -6.672, -7.0718, -6.2242, -3.5271, -0.4724, -0.6426, -5.5883, -11.069, -13.9474, -14.1999, -11.6213, -9.2487, -10.7685, -15.1688, -17.7995, 4.747, 5.3362, 4.5288, 2.041, -0.2507, -1.4078, -1.9789, -2.0773, -2.8836, -2.6876, -5.367, -21.5899, + 20.9429, 19.2708, 15.6619, 12.7137, 9.1871, 6.4196, 3.1467, 1.6784, 0.8989, 1.2827, 1.4966, 0.1254, -2.5426, -4.515, -6.1876, -6.3874, -6.0478, -5.9793, -6.4367, -5.2532, -2.2523, -0.5109, 1.6273, 0.3551, -4.439, -9.5465, -11.7875, -11.3329, -11.5883, 4.4211, 3.0334, 0.1707, -1.8877, -1.6176, -0.7003, 0.0063, 0.8933, -0.3305, -0.5297, -3.459, -17.2335, + 10.3698, 10.9179, 12.2827, 14.2252, 13.1924, 8.1149, 3.4397, 0.4163, -0.6468, -1.2093, -1.7787, -2.1501, -2.3738, -2.1698, -1.6602, -2.0012, -2.2206, -2.6679, -2.9048, -4.0924, -3.9533, -4.6653, -3.4648, -4.1545, -4.7802, -5.9292, -6.6217, -6.2599, -7.2545, -1.4487, -2.0915, -2.0764, -2.524, -2.8369, -1.7282, 0.3818, 1.6462, 2.6312, 4.3951, 3.6513, -6.604, + 10.7001, 9.9813, 8.3287, 7.1242, 6.507, 6.5092, 5.9516, 5.2985, 4.9376, 4.9107, 3.3698, 2.148, 1.7415, 1.8271, 2.9065, 1.7503, 1.1809, -0.5973, -2.5964, -4.1194, -4.3826, -4.2663, -6.1171, -8.2455, -10.0389, -10.0722, -11.1753, -11.2765, -12.2855, 0.8221, 0.8933, 0.0873, 0.1278, -0.2444, -0.1326, 0.4115, -0.088, 0.3496, 0.6766, -2.9033, -13.4861, + 14.8732, 12.7779, 9.6261, 7.1258, 5.1364, 5.1173, 4.4647, 4.316, 3.755, 3.9126, 3.6316, 2.8536, 1.993, -1.1494, -2.4465, -3.4951, -3.8807, -4.2782, -4.514, -4.6567, -4.7573, -4.9527, -5.3524, -6.1002, -6.5648, -6.24, -6.7782, -6.9091, -7.5078, -0.7325, -1.047, -1.1322, -1.23, -1.1725, -0.7847, -0.074, 0.3234, 1.3703, 2.8077, 1.6715, -7.7106, + 13.0634, 13.058, 11.8762, 10.3012, 8.7287, 8.2751, 6.914, 5.6997, 4.4786, 3.7849, 4.1201, 2.8106, 0.712, -1.419, -2.0942, -2.3582, -0.5397, 1.516, 0.4684, -2.9378, -7.1601, -10.1338, -10.8807, -10.0235, -7.7214, -7.4752, -9.9005, -11.5702, -11.5927, 4.263, 3.6157, 2.2639, 2.6715, 3.2976, 2.2826, 0.9481, -1.7723, -4.4187, -3.5441, -9.6074, -17.0075, + 17.4365, 16.75, 15.4119, 14.0262, 11.9105, 8.764, 5.0192, 1.9276, 0.0772, -0.8006, -1.8916, -2.6101, -3.2178, -2.5671, -1.7974, -0.9511, -1.6296, -2.8438, -5.2983, -6.939, -8.1364, -7.5562, -6.4223, -7.1565, -8.562, -8.8653, -6.302, -4.6173, -3.1589, 0.3453, 2.406, 5.1191, 5.4688, 4.3371, 3.0997, 0.6091, -2.3128, -3.0561, -3.3297, -12.6865, -6.0911, + 13.0911, 12.7368, 12.4903, 13.0944, 13.0545, 12.0753, 8.9618, 6.1436, 4.1205, 3.004, 2.5067, 2.1012, 1.7892, 1.0194, -0.5009, -2.7054, -4.3792, -5.7855, -7.3332, -7.6356, -6.8161, -6.3032, -6.7524, -8.6805, -9.1565, -8.9761, -9.6991, -10.228, -11.2374, -0.8915, -1.3351, -1.3279, -0.8507, -1.1734, -0.5889, -0.2953, 0.9333, 1.7331, 2.7464, 1.0499, -11.7092, + 20.5201, 20.0295, 17.9227, 15.1345, 11.8697, 8.3087, 5.1766, 3.006, 1.254, 0.4174, -0.172, -0.8532, -1.8929, -2.4981, -2.7278, -3.1121, -3.4982, -3.7976, -4.7868, -5.4073, -5.4391, -5.9033, -7.2898, -8.3095, -8.7395, -9.6577, -9.6812, -9.1534, -10.7197, -2.0265, -2.4422, -3.2898, -3.0803, -2.9851, -1.2856, 0.1567, 1.891, 3.3083, 5.0377, 4.7157, -9.9218, + 8.7254, 11.0045, 12.0666, 13.2121, 13.3296, 12.8324, 10.851, 7.8774, 5.4319, 2.5287, -0.0029, -1.8774, -3.6195, -5.042, -5.6921, -5.2354, -4.487, -3.3016, -2.0527, -2.1409, -3.9671, -5.5705, -6.5599, -6.6471, -6.1324, -6.7689, -8.5096, -9.9894, -10.2634, 3.4359, 2.7738, 2.8295, 2.9482, 1.6625, 0.8956, -0.0514, -1.5848, -1.4749, -2.2921, -9.1424, -14.2391, + 23.9657, 22.7269, 19.7344, 15.7159, 12.2183, 10.6582, 8.5153, 6.8034, 5.1757, 2.7658, 0.5046, -1.3116, -2.041, -1.6635, 0.4261, 3.7125, 3.3282, 0.1068, -4.3151, -7.4691, -8.1547, -7.8283, -7.2057, -10.8214, -15.3903, -17.5933, -17.6434, -16.8095, -18.1107, 1.5132, 0.3244, 0.0189, -0.7294, -1.1966, -0.6245, -0.5177, 0.2092, 1.03, 0.8494, -0.877, -19.8535, + 16.628, 15.7442, 12.731, 10.1009, 8.2897, 8.5577, 8.8444, 10.056, 10.305, 9.1696, 6.7854, 3.8917, 0.3608, -3.0307, -5.8666, -7.1637, -6.5677, -5.6155, -5.1575, -4.9714, -6.5135, -7.7608, -7.9326, -8.4341, -8.5905, -8.717, -10.2926, -12.2908, -12.5593, 4.2267, 2.1595, 0.5102, -1.382, -1.1131, -0.0305, -0.5306, -0.0216, -0.2857, -0.0746, -3.4583, -17.0769, + 13.6209, 12.7507, 12.8553, 14.2468, 15.9471, 14.0699, 8.8461, 3.2261, -1.1845, -3.9187, -5.7488, -7.4173, -8.8555, -9.2473, -8.9917, -6.5605, -1.7283, 2.9838, 3.3778, -0.7316, -2.7883, -0.8816, 0.0532, -4.9902, -8.7894, -10.3247, -7.5806, -5.9415, -6.2971, 14.656, 9.593, 3.1821, -1.9796, -0.7713, -2.07, -4.1354, -3.8071, -3.636, -4.5115, -6.5203, -23.1275, + 23.4988, 25.5182, 26.1443, 25.6216, 23.429, 19.3707, 13.905, 7.5166, 1.8256, -2.4154, -5.4517, -7.7013, -9.8647, -11.2215, -12.6184, -14.4069, -15.4023, -15.6232, -14.8399, -14.567, -14.519, -13.7907, -10.6309, -3.489, 1.4794, 1.635, -2.2134, -1.66, 0.471, 10.9708, 10.5205, 11.2036, 9.2796, 5.4146, -1.1911, -4.4466, -8.0856, -10.7515, -10.9044, -12.0101, -11.4961, + -0.5898, -1.0967, -1.1205, -1.0443, -1.2431, -3.0645, -6.3248, -9.1338, -11.1628, -12.4243, -13.5982, -14.0819, -13.6551, -13.9519, -12.0462, -9.7393, -6.5133, -1.4737, 1.3159, 2.742, 3.1032, 9.2423, 13.5689, 17.8419, 17.0272, 18.0312, 18.1676, 16.34, 14.8841, 4.5894, 3.407, 3.1758, 1.7888, 1.6163, 0.3158, 0.2364, -0.4657, -1.0093, -2.6399, -11.0146, 8.1604, + 13.0299, 12.0907, 11.0575, 11.898, 14.1078, 15.4469, 13.8192, 9.6452, 5.0678, 1.5872, -1.0858, -3.3552, -4.4488, -5.1355, -3.8141, 0.5493, 5.0898, 4.4313, -0.414, -3.7603, -4.7684, -3.669, -4.362, -10.8698, -15.5016, -18.468, -18.1605, -12.2966, -7.7111, 13.7174, 7.2067, 0.5178, -3.0887, -2.4521, -1.3997, -1.4244, -0.6539, -2.051, -3.7269, -6.6452, -24.084, + 20.2958, 22.7253, 24.1108, 25.8434, 27.1854, 26.7629, 24.301, 22.1308, 21.1525, 19.6181, 13.7675, 5.3826, -2.8225, -8.7282, -12.7146, -14.6989, -16.2675, -17.4195, -18.1391, -18.1287, -17.6301, -15.6767, -15.3188, -16.1464, -16.5053, -15.5852, -16.0162, -15.5577, -15.9205, 1.1396, 0.2956, 0.2622, -0.146, -0.2889, 0.0275, 0.0598, -0.0862, -0.0115, -0.3351, -0.9169, -18.8932, + 21.5882, 22.6633, 22.5911, 21.7567, 19.8871, 16.4681, 11.6127, 6.5703, 2.578, -0.4539, -2.9597, -5.4269, -8.0935, -10.3291, -11.8474, -12.0219, -10.4753, -7.1877, -2.9765, -0.5555, -2.4316, -6.5984, -7.4329, -5.2211, -3.7364, -8.4581, -13.117, -14.2101, -12.1825, 9.2042, 6.8442, 4.1847, 1.6315, -1.3411, -3.276, -3.4037, -3.4563, -3.6074, -2.1629, -4.6172, -19.8953, + 10.6094, 9.956, 8.4942, 8.0886, 9.3761, 11.3323, 13.7662, 16.0947, 16.8139, 12.1179, 6.8094, 2.767, 1.8054, 3.1768, 7.3289, 5.1766, -2.2376, -6.9741, -8.5553, -10.5642, -11.2643, -7.7672, -9.8975, -14.2107, -19.646, -19.4783, -14.0319, -7.9045, -11.1818, -5.2324, -8.464, 2.9045, 12.886, 11.9777, 10.5541, 7.9613, -4.2589, -8.3955, -8.1996, -11.7332, -19.6994, + 5.5041, 5.3222, 5.1942, 5.546, 6.9576, 8.9054, 10.4828, 11.034, 9.8032, 6.8135, 3.3656, -0.1277, -3.596, -5.7793, -6.2939, -4.2863, -0.0268, 4.572, 4.4361, 0.4802, -3.4351, -5.2809, -4.4513, -2.2637, -4.765, -9.6486, -13.3377, -14.7275, -10.3971, 17.8073, 13.8296, 10.4356, 9.0219, 2.4512, -5.9813, -10.1712, -10.716, -9.7016, -7.6983, -9.2773, -25.0775, + 16.3656, 18.4878, 18.9993, 18.9918, 18.4816, 16.9653, 13.5777, 9.3381, 5.1691, 1.7384, -1.9039, -5.4804, -8.83, -11.9448, -15.0434, -16.8969, -17.167, -15.0995, -10.9516, -5.3056, 1.0232, 3.6264, 1.1957, 1.1028, 1.6644, -3.8335, -10.3741, -12.278, -11.6184, 10.0963, 5.3648, 2.5424, 2.471, -0.7901, -3.2113, -3.7043, -3.1, -2.4933, -1.9709, -5.2046, -20.9631, + 17.8837, 18.4715, 18.4874, 18.4556, 18.3711, 17.499, 15.0865, 11.4049, 7.8551, 5.655, 5.2257, 5.9267, 6.7868, 6.4202, 3.6161, -0.83, -5.6377, -9.6817, -12.6005, -14.4203, -15.5246, -15.5077, -13.4622, -11.2201, -12.0997, -15.712, -18.3392, -17.8512, -14.2586, 8.3898, 6.8733, 5.8658, 4.5307, 0.2802, -3.1226, -4.8018, -4.8634, -4.4593, -3.4916, -5.2013, -22.21, + -3.1319, -2.9567, -3.5158, -3.6542, -3.9792, -4.569, -4.2861, -2.5541, -2.2464, -1.9153, -2.4682, -3.1479, -3.0568, -4.8839, -4.5795, -5.39, -5.0456, -3.5545, -1.3265, 0.8505, 3.0174, 4.7498, 6.6168, 8.1567, 6.6236, 7.6792, 9.3003, 9.8713, 9.3959, -10.5735, -12.5116, -14.0639, -7.5471, -1.304, 2.4789, 5.3713, 7.7962, 9.4623, 10.2101, 10.6812, 18.1437, + 21.9881, 22.0268, 21.418, 21.0501, 19.7092, 16.8902, 12.8939, 9.2408, 6.1523, 3.8245, 2.5628, 1.6418, 0.828, 0.3977, 0.2944, 0.9841, 0.5033, -2.6922, -7.8516, -11.9595, -14.1961, -14.2907, -11.4202, -8.4658, -10.2796, -16.2385, -20.8415, -22.5979, -21.5723, 2.4756, 1.959, 0.8663, 0.5639, -0.3186, -0.6196, -0.7514, -0.8893, -0.926, -0.411, -1.9489, -22.2015, + 13.6868, 14.9404, 15.1, 15.5585, 16.0353, 14.4054, 10.2425, 6.216, 2.6004, 0.014, -1.093, -1.9058, -2.2147, -3.1008, -3.0478, -1.9164, -0.2033, 1.1951, -1.7083, -5.1393, -7.0402, -8.4745, -8.2053, -8.7459, -9.3367, -10.365, -11.228, -12.609, -13.6605, -1.5164, -1.7406, -1.1213, -1.2392, -0.3054, 0.1166, 1.2891, 0.806, 2.8591, 2.2703, -1.4183, -13.8822, + 24.2507, 21.6076, 17.0141, 11.8925, 7.3451, 3.9013, 1.1114, -0.6837, -1.7199, -1.9483, -2.6719, -3.0002, -3.6624, -4.0397, -4.0608, -4.1225, -3.981, -4.1129, -4.5653, -4.8917, -4.8071, -4.8794, -4.6353, -4.2726, -4.735, -4.9508, -5.2264, -5.1675, -4.9885, -5.7398, -5.9757, -5.9417, -4.9603, -3.1354, -0.5548, 2.3754, 4.4296, 5.8362, 7.1375, 6.5291, -0.9148, + 17.2631, 17.8371, 17.1292, 16.2736, 14.9354, 14.1976, 13.0153, 12.0657, 10.4316, 7.4938, 4.2444, 1.4828, -0.6872, -3.7746, -5.5994, -5.3343, -3.0025, -0.6389, -0.055, -2.7128, -6.5932, -9.9814, -10.8426, -10.0857, -9.6056, -13.2586, -18.8699, -22.5792, -22.7486, -0.7483, -1.0121, -2.2299, -2.0299, -0.7415, -0.0212, 1.8597, 2.903, 2.7112, 2.3661, -3.0572, -22.3309, + -11.1995, -10.693, -9.1942, -8.1742, -7.6079, -6.5119, -6.9193, -7.1422, -7.9717, -7.7574, -7.1013, -6.4983, -6.0445, -5.1389, -3.0175, -0.5052, 2.9571, 5.6253, 7.3169, 6.5738, 7.6017, 10.0073, 10.6429, 11.476, 11.4863, 10.6648, 9.4863, 8.0975, 9.5413, 3.3127, 3.2227, 3.8144, 3.7156, 4.3089, 2.3578, 0.7872, -1.2526, -2.7715, -4.3321, -13.1631, 5.2507, + 17.1783, 16.8887, 14.7421, 11.8348, 8.0205, 3.2499, -1.9129, -6.6225, -10.9397, -13.6517, -14.723, -16.1104, -18.1604, -17.7193, -17.2055, -15.5458, -13.1652, -9.9983, -5.1836, -1.0331, 1.9889, 4.4501, 8.5649, 11.1613, 14.3782, 14.8611, 11.2164, 10.3416, 13.0949, 7.1449, 3.2853, 6.0619, 4.3926, 2.9056, -0.2214, -2.0011, -1.6095, -2.237, -3.8553, -13.8661, 1.4609, + 10.6486, 10.4669, 9.1585, 9.0007, 10.2209, 13.1112, 15.2667, 14.3795, 11.1262, 6.6047, 3.1822, -0.1678, -2.0727, -1.3024, 2.42, 5.9038, 2.7803, -3.182, -6.2303, -8.685, -9.4777, -6.1465, -4.6662, -9.5877, -14.2877, -18.3825, -17.6042, -13.824, -8.6536, 4.3381, -2.0474, -4.0413, 0.7437, 4.3435, 8.027, 4.8604, 0.4728, -3.1556, -4.1581, -9.3831, -21.0994, + 4.5339, 3.018, 1.159, -1.8077, -3.7376, -3.2592, -4.8664, -9.0451, -10.5616, -11.0424, -11.0656, -11.1375, -9.1571, -8.9187, -5.487, -3.7659, -1.1875, -3.3535, 6.862, 12.8048, 15.213, 16.4198, 9.1571, 6.4605, 6.304, 10.6463, -0.7014, -3.2795, 9.7951, 11.6354, 5.742, 6.8106, 9.3406, 9.2914, 6.7851, 13.375, 12.321, -24.4316, -25.4838, -25.3856, -1.3255, + 6.4369, 5.6614, 4.5505, 3.277, 2.0132, 1.6324, -0.2278, -1.7054, -2.5408, -2.944, -2.5595, -3.6388, -4.3998, -3.8497, -2.46, -0.6672, 0.4797, -0.4954, -0.1361, -0.3178, -0.0794, 0.9249, 1.391, 0.569, 0.3416, 1.0916, 0.5145, 1.1248, -3.9866, 15.2047, 12.434, 6.7379, -7.0628, -9.2462, -7.3526, -5.253, -3.4204, -1.8366, -0.0754, -0.1298, -20.8819, + 13.5404, 15.5222, 16.2893, 16.887, 17.0524, 17.1327, 14.7572, 10.872, 6.784, 2.54, -0.5888, -3.3697, -5.4657, -6.7879, -7.7962, -7.6553, -7.4342, -6.9197, -6.9455, -6.3541, -6.7461, -7.4159, -7.7579, -8.3178, -7.4289, -7.3424, -8.2132, -8.9949, -9.843, 0.3453, -0.2701, -0.5525, 0.0397, 0.0597, 0.2448, 0.8902, 1.5587, 1.2101, 0.8399, -4.3658, -12.2454, + 24.5559, 23.413, 20.6408, 17.3808, 14.416, 11.8493, 9.6532, 8.6801, 7.2117, 5.4621, 3.0668, 0.223, -2.112, -4.3454, -5.0915, -4.2332, -0.9253, -0.0786, -2.2834, -6.2673, -9.6185, -12.226, -14.2603, -13.3716, -11.5386, -12.2997, -15.1963, -16.5699, -16.1351, 4.5303, 3.2491, 1.5538, 0.2521, -0.8115, -1.5855, -1.5263, -1.3266, -0.9651, -0.7138, -2.6565, -20.2257, + 8.1022, 9.7899, 9.7931, 9.7477, 9.2987, 8.7666, 6.9904, 5.329, 3.0336, 1.6204, 0.386, -1.2415, -2.468, -4.1707, -5.1485, -6.7003, -7.657, -8.3503, -8.5552, -8.8991, -9.0059, -8.7857, -7.078, -4.545, -2.6069, 0.6288, 2.8467, 3.7676, 5.1114, 3.4695, 4.5378, 3.2083, 2.5145, 1.3409, -1.3752, -0.8674, -0.472, -1.0186, -1.5059, -9.8318, 0.0727, + 14.4586, 14.2733, 13.1879, 11.9606, 10.2045, 9.3636, 9.6651, 11.0114, 12.1122, 12.3036, 11.028, 8.7772, 5.9733, 2.4672, 0.3102, 0.0747, 1.2366, 0.9815, -2.8016, -7.9803, -12.3829, -14.765, -15.7924, -13.6058, -11.0614, -13.0621, -17.8806, -20.1354, -19.922, 5.074, 2.9263, -0.3365, -1.5294, -1.0384, -0.437, -0.2758, -0.3204, -0.0653, -0.0869, -3.9105, -24.588, + 16.8931, 17.8847, 18.3283, 18.5232, 18.199, 16.7506, 13.533, 8.8264, 3.6715, -0.1991, -2.2432, -3.329, -3.3054, -2.6748, -0.669, 2.7103, 4.8565, 3.5571, -0.4645, -5.0037, -8.7773, -10.0343, -10.0215, -10.2618, -11.9582, -16.0391, -19.8259, -20.4865, -18.4405, 4.2237, 7.7521, 9.4271, 7.7776, 3.2089, -1.3047, -4.371, -6.1258, -6.624, -6.4665, -7.4973, -21.6119, + 26.2407, 26.8595, 25.5084, 23.5987, 20.6139, 16.2421, 10.9416, 5.9994, 2.3434, -0.3767, -2.7912, -5.3898, -7.9202, -9.5689, -11.3407, -12.1566, -12.5654, -12.0723, -10.0537, -6.9972, -3.0971, -1.8157, -4.5501, -5.7844, -5.5235, -7.2936, -10.9909, -13.4932, -14.5663, 2.1561, 1.5321, 0.2818, -0.1633, -0.3426, -0.3136, 0.0161, -0.3898, 0.0287, -0.0952, -2.7103, -16.2994, + 18.3705, 19.3592, 20.1123, 19.1051, 15.6286, 9.5321, 3.0603, -1.6458, -4.5598, -6.3273, -7.5713, -8.4739, -9.3282, -10.3168, -10.7509, -9.103, -6.7703, -2.574, 3.3208, 6.7538, 4.2453, 2.974, 1.108, -3.3077, -7.0808, -9.7837, -9.6571, -8.2866, -8.0329, 10.1201, 5.6162, 1.7587, -0.9681, -1.7807, -2.3958, -2.4286, -1.6485, -1.8262, -1.9033, -4.544, -20.3964, + 13.2741, 15.4244, 17.0234, 18.2818, 19.5432, 18.9691, 14.9962, 9.1156, 3.6419, -0.2906, -3.157, -6.1768, -7.9818, -9.3506, -9.4656, -9.2507, -8.4602, -6.2085, -1.8201, 1.5162, 1.249, -0.0059, -1.8007, -4.5282, -8.6837, -12.6709, -15.3611, -15.4209, -12.4015, 7.815, 3.1728, 1.5432, 0.795, -0.5318, -1.2456, -1.5988, -1.7996, -2.1907, -2.0052, -3.9542, -22.2556, + 15.9184, 17.3622, 17.4678, 16.8842, 14.6841, 11.8317, 7.6477, 2.3173, -1.3712, -4.0441, -5.5323, -6.8296, -7.7101, -8.4121, -8.4766, -8.2702, -8.0827, -7.3742, -7.9359, -7.9155, -8.0671, -7.6939, -7.0166, -5.7862, -3.8811, -1.0122, 2.4703, 3.9838, 4.8441, 2.9188, 2.7328, 3.6011, 4.033, 4.2894, 1.6661, -1.5176, -1.7944, -2.1907, -2.2625, -11.4761, -0.6248, + 27.6543, 28.3344, 28.0974, 27.8652, 25.881, 21.2395, 14.9679, 8.7442, 3.5965, -1.0986, -5.8391, -9.7803, -12.4065, -13.0919, -11.4339, -7.2826, -2.4552, -0.6713, -3.1822, -8.1469, -9.6767, -9.4577, -8.9612, -11.2661, -13.6229, -15.3616, -15.2642, -14.0444, -13.3373, 2.3229, 0.95, 0.5581, 0.0389, -0.1161, 0.3407, -0.3396, -0.7413, -0.8075, -0.6566, -1.5496, -16.0531, + 14.7743, 15.871, 16.5584, 17.4275, 18.6438, 19.6359, 19.7934, 19.0788, 17.9177, 16.9057, 15.9073, 14.4531, 10.2026, 3.0567, -4.1665, -9.7579, -13.4361, -15.9678, -18.1928, -19.8105, -20.3101, -20.0861, -19.2226, -16.1803, -12.5817, -12.1735, -14.1311, -13.5138, -10.6954, 7.7639, 2.5429, 2.6941, 2.9367, 0.5893, -1.929, -2.8709, -3.1704, -3.0337, -2.2216, -3.3012, -22.819, + 12.7199, 12.8622, 12.1185, 10.3818, 7.6754, 5.4729, 4.0902, 2.5106, 1.3459, -0.1508, -1.059, -0.9743, -1.2979, -1.7207, -2.0981, -3.4023, -3.6088, -3.7334, -2.9611, -2.7071, -3.2507, -3.7314, -4.9032, -4.9793, -5.4541, -5.3634, -5.5199, -5.9327, -6.3294, 0.5719, 0.7629, 0.4111, 0.3851, 0.5406, 0.361, -0.6901, -0.4405, 0.2987, 0.0781, -2.2788, -7.7046, + 17.0925, 17.268, 16.3588, 15.6578, 15.5233, 15.868, 16.0037, 14.7721, 12.292, 8.7258, 4.3618, 0.2688, -3.5171, -6.9208, -9.2849, -8.9305, -6.2881, -2.6008, 0.0832, -0.7819, -3.3713, -5.1713, -4.904, -6.2218, -11.397, -17.6896, -21.9017, -23.4215, -21.8734, 3.1762, 2.3323, 1.1259, -0.1136, -0.6656, -1.1934, -1.1198, -0.332, -0.0039, -0.1887, -3.0174, -24.2388, + 17.2297, 15.6739, 13.0707, 10.1587, 7.8155, 7.3743, 6.0217, 4.4665, 3.0535, 2.6239, 2.2641, 1.967, 1.5434, 0.6206, -1.2673, -3.0579, -4.7912, -5.9248, -5.918, -6.122, -5.8687, -6.3517, -6.5968, -7.5677, -7.4916, -7.9499, -8.0977, -8.4791, -8.399, 1.8899, 2.2808, 2.6284, 2.1186, 1.2552, 0.2046, -0.3591, -0.6669, -1.5091, -1.4378, -6.4047, -11.8263, + 4.5933, 4.7596, 4.4438, 5.2453, 6.6446, 8.2821, 6.9832, 4.381, 1.1278, -1.5253, -1.8904, -2.1516, -3.4268, -5.4133, -6.8772, -7.1547, -5.3998, -2.6582, 1.2751, 2.0882, -0.7302, -4.1881, -5.1819, -2.1264, 0.8208, 0.5532, -1.8235, -1.5249, 0.8743, 5.3771, 4.5451, 4.0828, 5.1397, 3.7744, 0.358, -1.2512, -0.7183, -2.7542, -4.1142, -14.4391, -6.0204, + -2.2799, -1.768, -3.2413, -3.927, -2.7062, -1.0703, -1.335, -1.9824, -2.4957, -1.3919, -2.1103, -4.0545, -4.3911, -5.7784, -7.9812, -7.7496, -7.5943, -5.8788, -3.7846, -2.676, 2.8977, 4.842, 8.2162, 4.4328, 10.2839, 10.4092, 11.3489, 11.1069, 10.659, -9.8885, -12.0674, -13.7764, -6.7026, -2.8416, 2.6527, 5.34, 7.6116, 8.5217, 10.1675, 10.983, 18.5816, + 8.679, 8.1241, 7.9956, 9.001, 10.6051, 11.9336, 12.07, 10.4828, 7.604, 4.4092, 1.4213, -0.5435, -1.807, -2.2849, -1.1776, 2.4297, 6.7853, 8.4364, 6.3991, 4.5951, 1.7264, -5.9987, -12.0781, -16.538, -18.7068, -19.2937, -18.0295, -14.918, -11.3219, 9.6625, 7.9093, 9.1967, 5.7578, -1.0641, -5.1134, -6.0886, -5.4946, -5.3822, -2.7102, -6.6734, -25.9833, + 10.3657, 10.3631, 9.7058, 9.4298, 9.0617, 7.9822, 5.9655, 2.6688, -0.5238, -2.6855, -3.0614, -3.3624, -4.7739, -5.3797, -4.5954, -3.2382, -1.5077, -1.7236, -2.7671, -2.9653, -4.5764, -6.3959, -5.0542, -3.3922, -3.4383, -5.4556, -2.3727, -2.0655, 3.7923, -5.226, -22.0236, -1.5093, 6.4261, 7.5104, 7.6639, 4.2871, 1.2994, 0.5479, 5.7985, -4.7744, 7.7899, + 10.4446, 10.4588, 9.0587, 7.0901, 3.1501, -0.3318, -2.706, -4.6185, -5.7165, -6.2274, -5.5457, -6.1342, -6.9016, -7.4068, -6.2107, -3.8982, -1.1383, -1.7125, -3.1209, -2.5081, -2.3909, 0.2919, 4.6445, 2.6432, 2.6694, 4.3011, 3.5911, 6.8931, 1.3315, 21.797, 18.1696, 11.3834, -3.1623, -8.4098, -8.5693, -7.6899, -7.0385, -5.9998, -5.4794, -5.0009, -22.6316, + 17.2287, 17.7616, 17.8929, 19.2677, 20.817, 21.4764, 18.7667, 14.2036, 10.5122, 8.1941, 7.842, 9.4381, 10.7037, 7.2143, -0.2794, -6.1524, -10.8365, -13.8587, -16.1691, -17.3352, -17.228, -14.8106, -11.1914, -12.304, -16.0739, -18.1082, -16.4868, -14.5719, -15.9127, 2.3379, 0.5208, 0.3528, -0.1779, -0.65, -0.5172, -0.1244, -0.1086, 0.2128, -0.1577, -1.6885, -22.6503, + 18.5355, 20.4972, 20.185, 18.5749, 15.6167, 12.2745, 7.9486, 3.0171, -0.8357, -2.7695, -4.9, -6.7903, -8.0533, -9.4775, -9.7203, -10.0951, -9.496, -9.2581, -9.1995, -6.3741, -2.3905, 0.456, 1.0899, -0.4465, -1.4521, -2.6965, -6.3247, -8.5287, -9.3872, 0.7079, 0.5683, -0.4043, -0.7092, -0.1113, 1.5441, 2.4584, 1.8607, 0.7709, -0.1603, -6.5252, -13.3875, + 15.7485, 14.5502, 12.3547, 10.1884, 8.6909, 8.0435, 6.3074, 4.6065, 2.2122, -0.193, -1.2413, -2.4859, -3.7253, -4.0244, -2.8733, -1.95, -1.0559, -2.6557, -3.6275, -3.0937, -3.1904, -3.242, -3.8325, -6.0485, -6.6724, -6.1617, -7.5456, -8.3219, -10.7613, 9.0819, 5.6131, 0.9836, -3.3767, -5.113, -4.5161, -2.5844, -1.0875, -0.3335, 0.8807, 0.4519, -18.486, + 13.0658, 12.0977, 9.3051, 6.8101, 5.9796, 6.1211, 5.3037, 4.3634, 4.1469, 2.3546, 0.6265, -1.0456, -1.8168, -2.1623, -1.4037, -2.0812, -2.8168, -3.454, -4.9104, -5.6641, -6.1702, -5.2274, -3.5942, -3.4678, -3.4265, -4.9099, -5.1651, -6.2588, -6.5997, 3.1896, 2.3931, 3.5929, 2.5385, 1.8123, 0.7336, -0.3261, -0.9462, -1.535, -2.552, -8.9007, -9.6432, + 6.9128, 6.7304, 6.9243, 6.4631, 5.6472, 3.9796, 1.7898, -0.2489, -2.4436, -2.6508, -2.547, -2.8932, -3.7418, -4.0472, -3.7409, -4.1721, -4.5045, -2.5398, -1.2681, -2.2512, -4.0819, -2.5504, -0.5617, -0.8125, -6.3247, -16.4522, 5.3598, 10.4107, 13.6148, 2.9041, 3.9937, 4.1878, 3.1505, 2.3718, 2.0861, -0.7564, -2.898, -3.01, -1.1906, -10.8392, 7.899, + 15.3717, 14.4646, 14.0665, 15.2685, 17.889, 16.6173, 10.8299, 5.4591, 1.3248, -1.5112, -3.5105, -5.0396, -4.7139, -3.2327, 0.4893, 6.608, 9.2663, 7.1616, 4.6529, 0.9359, -6.9866, -12.7386, -15.0655, -16.3268, -15.5303, -12.5805, -11.4429, -13.9588, -17.7676, 4.4548, 2.5041, -0.5574, -1.9092, -1.6954, -0.798, -0.8178, 0.6929, 0.2455, 0.1742, -2.2936, -23.5972, + 15.1415, 17.2129, 18.5276, 20.2576, 22.0435, 22.941, 21.3301, 18.4906, 16.7921, 16.6351, 16.5489, 13.5214, 7.0026, -0.4264, -6.3907, -10.2154, -12.0432, -13.8717, -14.814, -14.5501, -12.6863, -11.2906, -14.4502, -19.325, -21.0242, -20.2029, -17.6079, -17.4052, -20.1409, -0.1152, 0.2933, 0.6422, 0.8539, 0.5304, -0.1244, -0.6918, -0.3401, -0.1677, 0.0292, -0.9099, -22.1229, + 16.3527, 16.4358, 14.5529, 11.7515, 8.0259, 5.7593, 4.7947, 5.2455, 6.9418, 9.3793, 10.6924, 9.9655, 9.0457, 8.3252, 8.4762, 6.3689, 3.4623, -0.5745, -4.6846, -8.568, -10.9887, -12.4636, -14.764, -14.5242, -15.3129, -17.5422, -18.4522, -18.6412, -19.0596, 4.6132, 1.4513, -0.0514, -0.1917, -0.3334, -0.137, -0.0439, -0.2954, -0.2393, -0.9118, -3.8606, -24.6234, + 3.0149, 3.3679, 2.0858, 1.6705, 1.6501, 2.5867, 1.6237, 0.5766, -1.332, -2.3047, -2.927, -3.0607, -3.6274, -5.2376, -5.7845, -5.3526, -3.5342, -1.1532, 1.814, 2.9895, 2.7465, 1.9285, 1.7068, 1.7703, 2.22, 1.9728, 0.2297, -1.0946, 1.4544, -2.0981, -1.6916, 0.235, 2.2065, 3.1538, 2.2516, 2.893, 1.2452, 0.2641, 0.7151, -9.1746, 0.1743, + 33.1383, 31.0792, 25.7434, 19.1612, 13.837, 10.1403, 5.0657, -0.9848, -4.0125, -3.8049, -1.4317, 2.9301, 4.0459, 0.1222, -5.3168, -8.1684, -10.0826, -10.8448, -10.2597, -10.3317, -9.4719, -5.7311, -3.3677, -4.7251, -6.396, -9.1268, -12.2844, -14.42, -14.5022, 2.606, 2.2289, 1.6967, 0.1399, -0.9831, -0.9608, -0.851, -1.0292, -0.7889, -0.5855, -1.473, -15.7149, + 27.2923, 26.1076, 23.8786, 21.313, 19.0418, 17.172, 15.5267, 14.4631, 14.0462, 13.507, 12.4676, 9.9142, 5.6853, 0.598, -4.4056, -8.3465, -10.4675, -12.5667, -14.3166, -15.5842, -15.4689, -15.0589, -15.5652, -16.495, -16.8464, -17.9497, -19.4354, -19.6539, -18.853, 1.2956, 0.1647, -0.0666, -0.5622, -1.0818, -1.0177, -0.6516, 0.0389, 0.9296, 1.4023, -0.4513, -20.2788, + 26.6766, 26.7374, 25.7566, 24.028, 20.4779, 14.6637, 7.833, 1.9621, -2.07, -4.7989, -7.3077, -9.0786, -9.622, -7.7331, -4.741, 0.1848, 4.407, 2.7266, -2.1973, -5.5028, -7.5677, -8.3692, -9.3827, -11.2185, -12.6814, -12.9582, -12.5667, -13.3838, -14.2742, 2.1312, 0.7483, 0.4117, -0.1309, -0.2886, -0.2604, -0.4816, 0.0583, -0.0383, -0.2744, -1.8754, -17.9569, + 3.3978, 4.4684, 4.2593, 3.9748, 2.4838, 0.6609, -2.0182, -4.4753, -6.9532, -7.4489, -7.9821, -8.8126, -7.7701, -6.4035, -3.2114, -0.1726, 4.0273, 6.9857, 8.4846, 6.351, 4.9727, 4.647, 4.6414, 3.6916, 1.9176, 0.3255, -2.6101, -3.475, -3.9565, 1.7533, 1.1049, 0.647, -0.2625, -0.1699, -0.7934, -1.0459, -1.6085, 0.7985, 2.6353, -3.0588, -6.3429, + 10.0599, 9.5448, 6.901, 4.3178, 2.5886, 1.5303, 0.1509, -1.0275, -2.6254, -2.8291, -3.0667, -3.4775, -4.4368, -5.1122, -6.2497, -6.7213, -5.2797, -3.88, -2.4109, -1.6128, -3.0693, -4.8056, -5.1575, -1.7918, 2.5625, 3.7623, 3.5521, 7.7141, 10.8696, 8.0651, 6.4772, 6.6051, 3.56, 1.8517, -0.5246, -1.7934, -2.7395, -3.6923, -4.3495, -13.4599, 0.6565, + 25.7569, 24.1232, 20.4182, 16.1881, 12.4409, 10.9425, 10.5212, 10.6127, 10.069, 8.9583, 6.8593, 5.3047, 4.2774, 2.9654, 1.7215, -0.5266, -3.2445, -6.9442, -10.3293, -12.7061, -14.021, -14.2363, -13.7968, -14.0351, -15.0354, -15.6847, -16.5621, -16.6992, -17.3378, 1.2536, 0.3575, 0.1415, -0.1561, -0.1699, -0.6288, -0.437, 0.0255, 0.2138, 0.5498, -1.1499, -20.2166, + 0.0231, -0.9014, -1.8167, -1.2335, -0.9356, 0.1659, 0.0099, -0.3194, -1.2785, -1.6159, -0.9934, -0.9581, -1.828, -2.2803, -1.6717, -0.1281, -0.6227, 0.0211, -0.2651, -0.5372, -0.9352, -1.0325, 0.2653, -0.4461, 0.6598, 1.585, 4.5525, 6.2731, 6.2437, 6.2289, 7.1906, 6.8806, 4.1911, 2.5668, 0.0429, -1.5955, -2.8462, -4.6688, -4.0492, -13.9413, -0.0713, + 7.9284, 9.1572, 9.8203, 10.6262, 11.7687, 13.2204, 14.0222, 13.2111, 10.5107, 6.8116, 3.6111, 0.4955, -2.3899, -5.1121, -6.5572, -6.6556, -5.2199, -2.9231, -0.5211, -0.857, -4.748, -9.1464, -11.8191, -10.7137, -6.0224, -4.822, -8.063, -12.3598, -13.2532, 13.1773, 12.7484, 9.6243, 5.0688, -0.9409, -6.7845, -7.3453, -6.4726, -6.1985, -4.8683, -8.0086, -24.4428, + 20.659, 19.3955, 16.2834, 13.6379, 12.4445, 12.1295, 10.9807, 10.1646, 10.4918, 11.3802, 11.3612, 11.2354, 10.6339, 6.7227, 1.1138, -3.7021, -6.4288, -7.959, -9.976, -11.0475, -13.1574, -15.9863, -18.1733, -17.6149, -16.1809, -16.3342, -15.4709, -13.2473, -13.3553, 6.4606, 2.2334, 0.0904, -1.0983, -1.1535, -1.871, -1.3953, -0.4539, -0.1442, 0.1951, -2.8632, -21.9027, + 11.5076, 12.066, 12.717, 14.7721, 15.3221, 13.0928, 8.0689, 3.5812, 1.5428, 1.239, 0.9197, -0.0146, -2.1654, -5.8495, -7.9985, -6.4957, -1.4612, 4.6035, 5.2013, 1.9497, -2.2153, -5.558, -2.2714, -3.5929, -8.3748, -16.9482, -17.692, -14.1565, -11.7896, -0.1089, 2.8427, 6.389, 4.636, 3.9712, 2.8762, -3.4553, 0.8911, -3.1126, -3.8817, -11.0478, -18.2605, + 9.1012, 8.2983, 7.709, 8.2796, 9.717, 11.3893, 12.9622, 12.4812, 9.4717, 5.4783, 2.6937, 2.0314, 2.3476, 3.7201, 7.2459, 7.9823, 4.2063, -1.0767, -4.4784, -6.7559, -4.5456, -4.6976, -8.2963, -18.7549, -25.0006, -24.3482, -13.5441, -8.7468, -4.87, 9.4162, -0.0518, -5.6394, -1.8175, 2.846, 5.7461, 4.9827, 2.5039, -4.5892, -5.3372, -8.0598, -24.0108, + 25.3914, 22.4719, 18.4847, 14.1484, 9.8827, 6.3827, 3.7424, 2.3869, 2.0026, 2.1806, 2.2067, 2.4594, 2.5334, 2.7925, 2.7285, 2.5917, 0.9336, -1.3314, -3.7507, -6.3146, -9.9633, -12.2523, -11.7329, -10.5539, -10.5613, -12.897, -14.8061, -16.0931, -13.0635, 9.4907, 8.6133, 6.9669, 5.2967, 0.8483, -2.8965, -3.7224, -5.4526, -6.1034, -5.5404, -7.5006, -19.2567, + 14.7633, 21.0347, 26.5178, 28.8557, 23.366, 14.8939, 7.8472, 4.1479, 1.6451, 0.194, -1.0241, -1.71, -2.7839, -5.4888, -5.8766, -6.7065, -6.5101, -6.3172, -7.4748, -8.1349, -8.6673, -9.2054, -8.7696, -9.2949, -9.5243, -9.8586, -10.6206, -12.3755, -12.9225, 0.5464, 0.3011, -0.4717, -0.8221, -0.5981, -0.7596, -0.1787, 0.0888, 0.268, 1.7014, -0.0756, -13.4143, + 14.5722, 15.9781, 17.0264, 17.6175, 17.4232, 16.5459, 14.6151, 11.6122, 8.3872, 5.7241, 3.1297, 0.7916, -1.8948, -4.6319, -7.4829, -9.0432, -9.8372, -10.2623, -9.8461, -8.3463, -7.1311, -7.5141, -8.8925, -9.9645, -10.0906, -8.0182, -7.1753, -10.4665, -12.8258, 7.5756, 9.5196, 10.3723, 8.1609, 3.493, -3.1717, -6.1605, -6.9929, -7.1805, -6.8863, -8.7297, -20.7652, + 37.2037, 35.8111, 32.3205, 28.0474, 23.2802, 17.7045, 11.6084, 5.8427, 0.267, -3.7432, -6.2669, -8.1167, -9.3928, -10.1312, -10.3467, -10.0877, -9.5979, -9.7744, -10.3207, -10.6331, -9.9469, -8.6203, -8.3585, -9.6074, -10.8446, -11.5167, -11.7789, -11.6363, -11.3647, 0.3839, 0.1181, -0.0142, -0.2099, -0.2835, 0.155, -0.034, 0.1033, 0.0295, 0.1568, -0.4049, -11.8075, + 25.2715, 25.9731, 25.5019, 24.4387, 22.0168, 17.9875, 12.8839, 8.1186, 4.0883, 0.9493, -1.832, -4.9719, -7.8984, -10.8034, -12.5203, -12.4959, -10.7116, -8.3345, -4.1201, -0.1578, 0.1929, 0.1873, -2.8273, -8.7555, -14.7009, -17.595, -18.3997, -17.0685, -14.4171, 1.9066, 0.3797, 0.2936, 0.7746, -0.4377, -0.094, 0.1464, -0.0351, 0.2602, -0.8075, -2.3869, -18.3683, + -1.7829, -2.9115, -3.3197, -3.0219, -3.0103, -2.1963, -1.8274, -1.5453, -1.3834, -0.5971, -0.1822, -0.0707, -0.4004, -0.4751, 0.5738, 0.6319, 1.4145, 1.0927, 1.3496, 1.6238, 1.3746, 1.5109, 1.6452, 1.4227, 2.6607, 1.9921, 2.0933, 1.3984, 1.9401, -5.1733, -5.1451, -4.0887, -4.3334, -2.3485, -1.275, 1.8849, 3.8802, 5.4984, 6.3884, 4.712, 5.8699, + 3.0884, 3.6195, 4.4987, 5.4241, 5.9234, 4.3151, 1.2318, -2.0672, -4.856, -6.7176, -7.7263, -9.2051, -9.8093, -9.8027, -9.8649, -7.58, -3.5471, 1.2395, 3.8333, 2.452, -0.138, -0.1169, 2.7696, 4.2835, 3.0029, 2.8349, 6.1975, 8.555, 8.1619, 3.4262, 3.7255, 2.9723, 1.5679, 0.6856, 0.7789, 0.0324, -0.04, -1.093, -1.5814, -10.4745, 2.5083, + 7.7805, 8.5455, 8.0969, 7.418, 6.0322, 4.2643, 0.7072, -3.9008, -6.6106, -8.5279, -9.9913, -12.2197, -13.9875, -14.6194, -13.4585, -8.5866, -0.141, 5.8556, 2.7328, -4.3868, -7.6497, 1.0307, 6.7604, 2.0849, -2.0565, 4.3945, 7.6154, 14.5442, 18.2732, 15.9793, 12.4675, 8.6361, 9.3177, 7.162, -0.437, -7.8068, -13.596, -11.2218, -10.5975, -9.9034, -5.2521, + 15.1743, 16.3078, 16.6845, 19.2037, 24.9642, 26.0482, 22.2299, 20.1754, 18.1609, 11.9813, 3.3906, -4.1269, -9.8102, -12.4054, -13.1972, -14.9771, -15.2101, -17.035, -17.5402, -17.273, -16.8388, -14.0848, -9.7661, -6.4551, -6.0572, -3.5105, -0.1292, -3.2831, -12.6212, 2.675, 0.5089, 0.394, -0.3851, -0.0012, -0.1207, -0.3792, 0.6121, -0.3176, -1.0554, -1.9307, -19.7041, + 31.556, 30.0892, 27.2291, 23.5683, 19.0546, 13.2491, 7.4257, 2.9756, 1.0209, 1.0243, 1.37, 0.6757, -1.0362, -3.4535, -5.1118, -5.5508, -4.6428, -3.9233, -3.2906, -5.2994, -8.4124, -11.6578, -14.3387, -15.5177, -14.9184, -14.036, -14.9127, -16.4768, -16.6595, 1.6433, 1.397, 1.0165, 0.631, -0.0752, -0.3736, -0.503, -0.708, -0.7791, -0.4687, -1.7802, -17.0148, + 10.1749, 8.8485, 5.1795, 4.5617, 6.0171, 6.4829, 4.3672, 1.6019, -1.645, -2.9876, -3.6524, -3.2008, -2.3296, -2.1644, -0.9768, 0.4251, 1.9391, 3.4981, 4.6467, 4.5048, 2.1218, -0.3094, -2.3029, -5.762, -6.5009, -7.7314, -8.789, -8.6982, -7.319, -8.3023, -3.9045, 0.7597, 3.5083, 5.647, 8.438, 8.927, 8.157, 4.5045, 0.2453, -27.9802, 0.6878, + -2.6861, 19.2221, 33.978, 25.1761, 5.3276, 0.9553, 6.0941, 10.8857, -5.1659, -6.6908, 10.287, 5.5719, -7.7825, 0.7662, -3.2785, -9.7089, 2.1449, -8.495, -0.8482, -8.2638, -3.5649, -9.0557, -5.193, -8.2034, -6.3047, -4.3602, -8.0851, -11.0228, -11.6996, 3.2339, 2.5869, 1.5692, 0.5614, -0.4616, -0.6459, -1.3729, -1.3736, -1.2425, -0.6779, -2.177, -11.9897, + 7.7287, 10.4343, 12.3692, 13.9892, 14.6808, 14.5459, 13.0629, 9.866, 5.8851, 1.8545, -0.9409, -3.2758, -5.5305, -7.8527, -9.4747, -10.4586, -10.7336, -9.8759, -8.2611, -5.1685, -1.7008, 0.1176, -2.2902, -4.5858, -4.0962, -2.2, -2.3668, -6.9728, -8.7495, 13.3085, 14.0301, 12.5973, 11.0446, 6.5436, -2.6637, -9.4551, -11.0645, -11.2845, -10.7446, -12.3117, -20.4326, + 10.736, 10.3386, 8.2768, 6.4632, 4.7302, 3.0267, 0.5796, 0.112, 1.9363, 5.0018, 8.3004, 9.8879, 8.2713, 4.5555, 2.8097, 1.8606, 2.8946, 3.7421, 5.297, 1.2683, -4.7378, -8.7201, -12.8564, -12.496, -9.6753, -7.5251, -10.0781, -16.3686, -17.6314, 11.3379, 8.1471, 4.3411, 2.5211, 1.4007, -1.3607, -3.3014, -4.3151, -5.9538, -5.2614, -7.5554, -24.6877, + 15.8329, 15.515, 15.4055, 16.5837, 18.1854, 17.6604, 13.6126, 8.4914, 4.4891, 2.4328, 0.8814, 0.778, 2.695, 5.3091, 6.6587, 3.8545, -1.3529, -6.1324, -10.5147, -12.4571, -13.5735, -11.0746, -7.2535, -11.2844, -17.2383, -20.4683, -17.4107, -10.9397, -8.6853, 6.2333, 2.1814, 0.232, -2.1897, -2.6025, -1.7475, 0.3359, 2.9117, 0.0927, -0.1075, -5.3398, -21.1984, + 7.6562, 6.587, 4.6968, 5.126, 9.8218, 14.9709, 16.085, 11.5684, 4.7265, -0.2176, -2.9979, -6.0694, -8.2544, -9.495, -8.0755, -5.7955, -0.4807, 4.7296, 3.3026, -0.0914, -2.8102, -1.2809, -0.3393, -3.3149, -5.6215, -8.5469, -6.678, -7.897, -11.3047, 12.3298, 6.3356, 1.6165, -2.5162, -1.6392, -1.6454, -1.7173, -2.3908, -2.4175, -3.1101, -4.8454, -23.7397, + 4.9452, 5.0593, 3.8655, 4.302, 7.6977, 11.2424, 13.0502, 11.2196, 6.9219, 2.6857, 0.2056, -1.5076, -2.7845, -3.1104, -0.8091, 1.9648, 6.1634, 5.4049, 1.224, 0.3494, -1.5074, -1.8246, -3.5432, -4.5137, -4.3268, -8.6129, -12.2904, -18.8599, -22.6111, 7.0748, 5.7565, 2.9123, -0.3591, -1.5206, -1.728, -1.8572, -1.6318, -2.3011, -2.3197, -4.0261, -26.4685, + 6.064, 7.2189, 7.3048, 8.3637, 9.316, 10.4746, 10.1941, 8.3124, 5.0444, 1.9281, -0.2645, -1.4345, -2.125, -2.621, -3.0015, -2.7992, -2.6148, -2.9666, -3.0696, -3.8743, -4.5941, -4.898, -5.682, -5.7978, -5.5722, -5.1973, -5.4147, -6.4176, -5.8765, -6.4521, -7.2215, -4.2413, -2.7669, -0.8266, 1.9295, 3.3149, 5.244, 5.9014, 6.7572, -1.6387, -0.2567, + 5.2371, 4.8863, 3.31, 2.1337, 3.1492, 5.6939, 8.7998, 11.5679, 12.8023, 11.4528, 9.0298, 8.9298, 10.6661, 11.0071, 6.4326, 0.2441, -4.1637, -7.7062, -9.8518, -10.2264, -9.582, -9.1951, -8.6992, -10.3299, -13.3858, -12.1048, -8.3569, -6.0495, -5.6913, 14.1502, 9.0286, 4.54, -1.001, -2.1523, -1.3098, -3.6803, -4.2446, -3.9915, -4.5409, -6.7984, -22.3276, + 1.1749, 2.9147, 3.84, 5.6634, 7.4575, 9.0125, 7.3532, 4.8392, 2.719, 0.871, -1.4481, -2.7601, -4.4452, -5.2662, -3.9827, -3.4617, -3.6219, -3.1639, 0.2716, 3.4947, 2.5863, 2.0483, 0.3695, -1.8223, -3.055, -5.56, -5.1761, -5.3683, -5.4841, 2.7668, 2.1577, 3.0912, 2.4351, 2.4455, 2.9457, 1.449, -1.5314, -2.866, -2.9647, -9.929, -9.9768, + 25.7146, 25.3619, 23.9564, 22.3568, 19.1718, 13.1052, 5.5763, -0.1008, -2.7575, -4.2993, -6.3232, -7.4184, -9.0999, -12.1658, -14.7424, -14.2269, -13.0082, -10.2417, -6.6055, -0.914, 1.6308, -1.8199, -3.8874, -1.8765, -3.1164, -7.7016, -9.3481, -4.282, -2.9383, 8.4368, 1.7117, -0.7722, -1.4926, -2.2285, -1.9674, -1.046, -0.6567, 0.1437, 0.9502, -3.079, -15.7527, + 10.7572, 9.4885, 7.7426, 6.5423, 6.0951, 6.6895, 8.5238, 11.1515, 12.9326, 13.0679, 11.3687, 8.6878, 5.8071, 4.2486, 4.2979, 5.1375, 3.6691, -0.4487, -5.794, -9.6188, -11.6687, -12.0791, -10.1837, -7.1986, -9.3267, -15.4942, -18.3956, -19.0668, -16.9329, 10.8057, 6.4011, 3.369, 1.5029, -0.9587, -2.8947, -3.7517, -3.2931, -2.8022, -2.8052, -5.5731, -27.3774, + 30.7504, 28.4951, 25.5185, 22.1742, 18.1099, 13.036, 7.7976, 3.5112, 0.1176, -2.6569, -5.1898, -7.4966, -10.1459, -13.1401, -15.8245, -17.097, -17.1868, -16.6198, -16.0292, -14.4009, -11.3257, -6.937, 0.011, 2.6766, 1.9106, 1.9904, 0.8448, -1.2215, -1.6723, 13.9837, 12.0732, 6.7883, 4.2122, -0.6419, -6.1564, -6.879, -7.3232, -5.7545, -3.2248, -7.0778, -13.8733, + 5.5235, 4.9142, 3.2141, 2.659, 2.9961, 4.2989, 2.3547, 0.5028, -0.826, -1.5841, -2.8526, -2.4476, -1.183, 1.5505, 2.5932, 1.4615, -0.955, -2.6992, -1.462, 0.7531, 3.9055, 4.2326, 1.8576, -1.8966, -2.2755, -5.1995, -7.0773, -7.5304, -4.8283, 8.7008, 8.7053, 7.0759, 3.5239, 0.2213, -0.4716, -2.9649, -4.4365, -3.897, -5.646, -10.8111, -11.0662, + 10.0683, 11.2576, 9.125, 5.5609, 2.1927, 2.3916, 0.5672, -0.6821, -1.7701, -2.4144, -2.1229, -2.5051, -3.0931, -3.4474, -3.5498, -4.6568, -4.0419, -2.9786, -1.6058, 0.2043, 0.2119, -0.9338, -2.1449, -1.59, -1.2476, -0.0367, -0.7467, -1.0002, -1.0118, -12.1871, -7.6015, -6.026, -2.6153, 1.8019, 5.1419, 7.0075, 7.4839, 6.3084, 5.7281, -5.0417, 11.1839, + 19.0914, 19.5418, 18.555, 17.3149, 15.8219, 14.6893, 12.7457, 11.1878, 8.8607, 6.1729, 3.1425, -0.6029, -5.0284, -9.2811, -12.4294, -13.9531, -12.8183, -10.2445, -6.0419, -0.7352, 0.9087, -2.2874, -5.6745, -5.3857, -4.8993, -8.6787, -14.4653, -17.3889, -18.1181, 2.0079, 2.3051, 0.155, -1.9709, -2.1518, -1.0518, -0.2981, 0.922, 1.4828, 1.7198, -3.1202, -19.8209, + 7.5768, 6.693, 5.4155, 4.9157, 5.4796, 5.747, 5.5734, 5.4561, 5.0927, 4.7098, 4.4827, 3.6618, 2.9817, 3.26, 4.2867, 6.6922, 8.7811, 7.7587, 3.8523, -0.1532, -4.4933, -6.9881, -8.1454, -8.949, -9.5267, -13.8968, -17.7691, -17.7758, -14.7195, 9.4196, 10.2634, 10.4478, 8.8124, 5.1507, 1.4872, -4.9411, -9.3928, -9.8991, -10.009, -11.3391, -24.4463, + 6.3112, 6.1145, 5.3668, 4.5313, 3.6954, 4.7877, 6.2658, 8.3789, 10.2936, 11.7688, 11.4084, 9.532, 6.981, 5.0657, 4.7615, 5.5904, 6.1808, 3.6441, -0.8606, -5.0517, -7.7101, -8.0207, -7.3867, -7.998, -11.4209, -15.6623, -18.321, -19.2583, -18.9878, 1.9218, -1.0898, -2.1315, -2.6064, -0.329, 1.3612, 2.7055, 3.4481, 2.127, 0.3937, -5.8006, -23.891, + 4.7133, 7.0828, 7.4451, 6.1536, 5.1026, 6.1735, 5.562, 4.7204, 2.3449, 0.0662, -0.0552, -1.4746, -1.3028, -2.0833, -2.3742, -3.0032, -1.8959, -3.1532, -2.7407, -2.7522, -3.1457, -4.1303, -3.0723, -3.0359, -3.2114, -2.1394, -2.2842, -3.9496, -3.5601, -9.5458, -8.5225, -2.1447, -3.0135, -13.5275, -8.701, 7.2088, 11.6588, 11.789, 11.7226, 3.0758, 6.7721, + 14.9989, 17.5318, 17.0021, 15.1799, 12.5029, 9.0797, 3.8559, 0.1428, -2.0371, -1.8983, 1.178, 2.723, 2.0463, 1.0309, 1.6621, 0.5141, -1.5732, -3.0527, -4.0016, -5.2671, -5.7073, -7.6154, -8.5918, -8.8827, -8.7941, -6.7438, -5.5924, -13.4525, -16.2384, -1.004, -2.5012, -0.5919, 1.0505, 3.9201, 5.2244, 4.5335, 2.9522, -3.9239, 1.3432, -11.0028, -13.759, + 23.3831, 23.986, 23.9088, 23.9899, 24.5442, 24.7231, 23.4676, 20.9361, 19.0352, 18.1315, 16.6484, 13.2407, 6.9323, -0.853, -7.8736, -12.542, -15.8304, -18.1801, -19.7679, -20.6937, -20.6499, -19.866, -18.7929, -17.4798, -16.8484, -17.7541, -18.9554, -19.1779, -17.6622, 2.2274, 0.2658, 0.2329, 0.5563, -0.2993, -0.6411, -0.8349, -0.8217, -0.3946, 0.3529, -0.6438, -20.4737, + 27.1582, 28.3012, 27.2357, 25.1547, 21.7324, 15.2318, 7.9956, 2.0196, -1.2674, -2.1412, -2.5552, -3.818, -5.536, -7.5787, -8.8477, -9.9856, -10.6186, -10.6812, -11.5427, -13.058, -14.018, -14.2114, -12.3911, -5.9856, -0.0551, 2.4393, -1.0062, -8.7488, -13.2219, 8.5421, 8.1274, 3.1062, 1.0714, -1.1957, -2.6079, -3.1237, -3.4444, -3.3713, -3.1296, -3.9745, -17.2997, + 0.2274, 1.5742, 0.903, -0.0755, -0.9929, -0.001, 0.9686, 1.1448, 0.4783, -0.3525, -0.1336, -0.1913, -1.6241, -4.5094, -5.8249, -5.384, -4.269, -0.9607, 3.2627, 5.8265, 5.0034, 2.6931, 1.4156, 0.6324, 1.3181, 1.5226, -0.7562, -0.2634, -1.6323, 10.1447, 8.1369, 6.9278, 1.8273, -2.8348, -3.1502, -3.8258, -3.2103, -3.0403, -2.8386, -8.1368, -10.7452, + 2.203, 2.3567, 2.277, 1.9391, 1.4807, 2.4535, 3.7369, 4.5955, 4.8497, 4.7689, 3.9314, 2.906, 0.5571, -2.275, -3.2233, -2.8254, -1.7099, 0.781, 3.0014, 3.5591, 0.5135, -3.7594, -6.0245, -4.9397, -2.1317, -1.108, -3.4783, -7.2902, -7.145, 17.4214, 15.9833, 12.556, 11.8901, 6.7955, -3.1206, -12.2737, -12.4585, -12.5086, -11.3448, -12.94, -23.4673, + 1.7001, 2.1276, 3.1509, 3.8711, 3.445, 3.9578, 3.9916, 2.2726, 1.586, 2.9582, 1.5039, -0.3172, -1.6934, 0.048, 1.7637, 5.8108, 12.7325, 15.4092, 10.2323, 1.637, -5.9209, -8.2841, -8.8154, -8.6341, -8.8994, -8.7332, -8.858, -9.426, -8.6166, 1.0902, -0.3804, -1.838, -2.1594, -2.0188, -0.5336, -0.2356, 0.9072, 1.9988, 2.4507, 0.7188, -11.1533, + 3.347, 4.2651, 3.1581, 1.5899, 1.3593, 5.4416, 9.6912, 10.3789, 8.2781, 5.7621, 2.3516, -1.6093, -4.6703, -4.3014, -2.0948, 1.2895, 4.5826, 5.8867, 2.758, -0.5921, -1.6254, -0.3408, -0.8297, -4.7115, -8.7548, -10.195, -9.4023, -10.1017, -10.9107, 5.4257, 1.3752, -1.6808, -1.6847, 0.0776, 4.2441, 3.7807, 1.7086, -1.1629, -3.5093, -8.5743, -19.3479, + 16.0698, 16.0234, 16.6242, 18.4265, 19.5793, 17.7359, 12.2454, 6.7061, 2.9279, 1.0254, 1.3081, 3.1537, 6.2322, 6.7809, 1.2833, -4.6315, -8.4988, -10.9702, -12.9812, -12.8617, -10.8763, -6.7933, -7.5585, -12.211, -13.1807, -11.6979, -8.6529, -10.8315, -14.3767, 3.5106, 2.2779, 0.8347, -0.4316, 0.4812, -0.3548, -0.958, -0.3001, -0.9639, -1.0077, -3.0884, -21.7124, + 14.8614, 14.3243, 13.2597, 11.9042, 11.3617, 12.9241, 16.0023, 18.6135, 19.9112, 18.7801, 18.0215, 16.7944, 15.059, 9.5509, 2.2373, -3.7737, -7.9433, -11.6438, -15.8775, -19.0534, -20.0063, -19.8849, -17.4072, -14.6677, -14.9214, -15.6185, -17.3399, -17.4032, -18.065, 0.4331, -1.3874, -1.3387, -1.2657, 0.1397, 0.9913, 1.3715, 1.5636, 0.9626, 0.3031, -1.7729, -22.491, + 24.4358, 25.1322, 25.6771, 26.9458, 25.4271, 20.1741, 13.1848, 7.1606, 2.9511, -1.5207, -6.2228, -9.1615, -10.2139, -7.9615, -3.5511, 0.8947, -0.064, -5.6909, -11.888, -15.0418, -13.4238, -8.6724, -10.1392, -15.6141, -16.4146, -15.3775, -9.3359, -5.8457, -5.844, 5.367, 0.7714, -1.2803, -0.3316, 0.0917, 1.3247, -0.3166, -0.6629, -0.4726, -0.9886, -3.5022, -15.8979, + 11.2574, 14.5322, 17.177, 19.437, 21.2176, 22.024, 20.3915, 16.7178, 12.6022, 9.4053, 7.3741, 6.1361, 6.443, 7.2023, 6.6378, 2.8391, -3.5908, -9.035, -12.7524, -16.0348, -18.3668, -20.0831, -20.1715, -19.0743, -16.0476, -13.945, -16.7267, -18.3902, -17.1759, 6.7669, 3.5601, 1.4726, 1.2131, 0.8001, -1.0515, -1.7968, -2.1212, -2.4567, -2.6039, -3.7828, -21.2313, + 9.8296, 10.9668, 11.4657, 12.4379, 13.8874, 14.6363, 14.3342, 12.4038, 8.9235, 5.049, 2.1177, -0.5223, -2.7832, -4.1482, -4.6107, -3.0828, -0.2052, 2.3942, 2.4641, -1.9911, -6.8813, -9.3285, -9.5593, -6.0838, -4.8651, -9.6703, -15.7893, -21.0597, -20.3293, 7.8335, 9.3572, 8.2255, 6.2992, 3.6571, -1.3039, -4.8523, -6.7448, -6.9973, -6.7242, -8.7501, -23.8675, + 10.0961, 10.4449, 9.9127, 8.5711, 6.218, 4.5618, 2.4521, 1.111, -0.1627, -0.3653, 0.8918, 1.6279, 1.8907, 0.7438, -0.7728, -1.2107, -1.2055, -1.5566, -3.2793, -4.1807, -4.1312, -5.1981, -4.9412, -5.1286, -4.9138, -5.1042, -5.2876, -6.4396, -4.6442, -4.2766, -4.5588, -1.6946, -0.6815, 1.6923, 2.6384, 3.794, 3.9827, 3.1253, 3.8234, -7.8447, -3.7539, + 0.0757, -0.0653, -0.5789, 0.6712, 3.3974, 5.2272, 3.8057, 1.3204, -0.9531, -1.2566, -1.6955, -1.1717, -0.9735, 0.2237, 1.1803, 4.3319, 6.8301, 9.0463, 9.4433, 7.5902, 3.7433, 0.0327, -1.4644, -4.7154, -6.0059, -7.2747, -9.9821, -10.6151, -10.1672, 1.8545, 3.4334, 6.1661, 5.8556, 3.1158, 1.3495, -0.3375, -1.2855, -2.2198, -4.5273, -13.4049, -11.7714, + 18.832, 19.0344, 19.1952, 19.544, 18.8449, 14.8697, 8.6867, 2.7879, -1.6869, -4.7635, -7.1363, -8.878, -9.6594, -9.0777, -6.9523, -1.8282, 3.5267, 4.4511, -1.5807, -5.656, -7.8512, -4.0511, 0.2367, -5.4146, -11.328, -13.9141, -12.866, -9.0793, -8.286, 7.2253, 2.308, 0.9914, -1.0476, -1.1123, -1.0979, 0.2181, 0.5772, -1.1907, -1.879, -4.9926, -19.5991, + 6.9436, 25.3648, 31.2509, 23.4659, 7.6212, 8.5476, 13.4044, 12.1024, 6.331, 6.4395, 11.2808, 6.4453, 3.3798, -0.4108, -2.6193, -4.1535, -5.4353, -7.8115, -9.9117, -10.8599, -12.3626, -13.5397, -13.0447, -13.134, -12.5666, -12.9922, -14.205, -14.7731, -14.7573, 0.6782, 0.293, 1.1419, 0.5868, -0.3036, -0.7149, -0.2401, 0.2321, -0.6483, 0.2892, -1.3142, -13.0829, + 8.063, 8.593, 8.9037, 9.6389, 9.9192, 8.643, 5.1562, 1.1687, -2.685, -5.3768, -7.2472, -8.6966, -9.7539, -8.277, -7.3009, -4.7332, -2.5381, -2.7034, -3.2364, -4.1264, -4.6546, -3.984, -4.4745, -3.1865, -2.7693, 0.2429, 6.0573, 8.4087, 10.949, 1.5828, 2.2857, 2.4626, 4.2564, 3.1914, 1.9048, -0.4814, -1.9794, -1.6878, -0.6562, -10.8788, 6.9006, + 15.3121, 14.0216, 12.315, 10.8984, 9.8481, 9.486, 9.9555, 11.2336, 12.1475, 11.5421, 9.508, 6.1797, 2.1804, -1.5586, -4.1037, -3.8925, -2.2145, -0.574, -2.0726, -5.8999, -9.587, -12.3986, -13.2888, -11.0931, -8.695, -10.6144, -15.3843, -17.4751, -15.7759, 11.6735, 8.2281, 4.7038, 3.1666, 1.7515, -3.5926, -5.6951, -5.7508, -5.1915, -3.439, -5.8544, -26.0008, + 10.5147, 10.1953, 9.3949, 9.1051, 8.3007, 7.6855, 5.3821, 2.1136, -0.5365, -2.3955, -3.8024, -5.3725, -5.6568, -4.8775, -2.4291, 0.2566, 4.4555, 7.9385, 8.4324, 6.4827, 2.9059, 0.5262, -2.9536, -6.313, -9.2242, -10.021, -12.3911, -13.793, -13.9236, -1.0018, -1.0252, -1.9659, -2.6464, -2.974, -1.2967, 0.3806, 1.637, 3.3651, 4.3609, 1.1664, -14.6511, + 17.246, 16.9637, 17.1204, 18.874, 20.7478, 19.3865, 13.9822, 8.1265, 3.288, 0.778, -0.2592, -1.0141, 0.0742, 3.2639, 4.6036, 2.5181, -3.1653, -6.8864, -8.0795, -7.3818, -6.3471, -6.8628, -11.5495, -14.8984, -15.4665, -15.712, -14.8453, -15.6943, -18.8106, 1.498, 1.4377, 1.0081, 0.1939, -0.3867, 0.3736, -0.2884, -0.4032, -0.4237, -0.7102, -2.299, -21.4765, + 29.1324, 27.4472, 23.9346, 19.8815, 15.3348, 10.3288, 4.4524, -0.1346, -3.0576, -4.7063, -5.5439, -5.9222, -5.9328, -6.6024, -6.7197, -6.0365, -5.2696, -5.1176, -6.4818, -7.5705, -8.4454, -8.5007, -8.4654, -7.9097, -7.0136, -8.1875, -7.3437, -4.302, -1.2484, 4.1307, 4.9307, 5.3321, 3.9185, 2.3886, 0.5401, -1.5333, -2.6429, -3.4176, -4.0077, -9.6393, -7.8398, + 26.1063, 27.1257, 26.4958, 24.5623, 21.0909, 16.0392, 10.3606, 5.2224, 1.283, -1.7057, -5.2899, -8.7872, -11.5471, -13.8485, -15.6146, -16.5388, -16.6318, -15.7526, -14.3061, -11.8594, -6.9641, 0.2736, 3.2894, 2.3319, 2.1876, -0.1464, -6.9487, -10.5477, -9.8802, 8.0155, 5.1637, 1.2918, -0.1585, -1.6768, -2.1876, -2.1575, -2.3734, -1.4901, -0.3422, -4.085, -16.2781, + -2.8938, 0.5854, 4.9032, 19.8896, 33.0777, 27.8431, 5.8284, -0.8777, -0.4212, 7.5419, 14.4523, 0.5889, -7.2843, -5.7721, 2.2765, -3.867, -7.0376, -2.4089, -1.923, -6.9736, -5.054, -6.8128, -9.1282, -7.6378, -9.9538, -8.0762, -10.1133, -10.3156, -10.4365, 1.79, 1.293, 1.2513, 1.1649, -0.0523, -0.1935, -1.3719, -0.6466, -0.7256, -0.6226, -1.8868, -11.7248, + 5.0511, 7.2825, 7.4756, 7.6284, 6.3099, 6.5711, 6.0062, 5.2464, 4.1337, 3.5789, 2.7344, 1.9171, -0.0947, -4.7055, -6.3175, -6.726, -8.3754, -7.5699, -4.4289, -0.5061, 0.5491, -0.6121, -1.663, -2.5886, -1.0683, -1.0286, -4.3484, -7.2928, -7.1586, 2.8359, 1.6298, 0.9777, 0.2594, 0.2894, -0.2649, -0.2767, 0.5984, -0.0902, -0.5417, -5.4171, -8.5849, + 26.8109, 26.2612, 24.6562, 22.4444, 19.7975, 16.2207, 11.9006, 7.5618, 4.2432, 1.162, -1.9686, -4.6999, -7.0035, -8.7711, -9.4863, -9.0559, -7.8923, -6.8802, -7.012, -8.4837, -11.2123, -13.1769, -13.1832, -11.7848, -8.9173, -7.9697, -7.9495, -8.0762, -7.535, 6.9413, 5.9114, 4.4559, 1.9045, -0.222, -1.5629, -2.1181, -2.9624, -3.1458, -3.1496, -6.0522, -15.8707, + 15.4221, 13.9665, 11.5956, 9.4217, 7.3471, 4.9825, 2.5822, 1.1306, -0.4479, -0.0543, 0.4224, 2.6264, 2.4323, 2.9777, 3.9679, 4.5466, 4.0757, 2.5862, 0.7066, -2.3566, -5.4206, -6.8028, -9.1716, -8.9333, -8.9478, -9.7023, -11.2057, -13.2026, -14.5445, 4.5118, 3.2465, 1.4635, 1.0112, 0.8257, -0.5633, -0.8311, -1.4185, -1.8127, -1.1914, -5.2417, -16.4127, + 28.007, 28.9811, 29.1691, 29.0099, 27.2163, 23.1256, 18.5752, 16.0256, 16.0772, 16.0792, 13.4415, 7.1002, -1.0509, -7.6202, -12.1978, -14.61, -16.035, -16.8734, -17.1512, -17.3461, -17.2821, -16.7355, -16.3289, -16.1605, -16.3294, -16.8373, -17.0316, -17.0117, -16.2062, 0.8143, -0.0316, 0.0425, -0.0469, -0.56, -0.2604, -0.2934, -0.0397, 0.1815, 0.6487, -0.4551, -17.2928, + 21.3473, 20.28, 18.5835, 16.4034, 13.0771, 9.2891, 7.0954, 6.8063, 9.6682, 13.1023, 14.6281, 13.8935, 12.0583, 11.5472, 11.1879, 7.7716, 2.5072, -3.2634, -8.4595, -14.0714, -18.2085, -21.2308, -24.2103, -24.5753, -21.1428, -16.8159, -16.8684, -20.7499, -19.65, 7.8883, 2.8059, -0.2509, 0.2746, 0.577, -0.7075, -1.0613, -1.6761, -2.152, -2.4962, -3.2017, -23.7494, + 16.7277, 16.51, 14.9737, 13.3864, 11.3764, 9.4606, 7.4445, 4.9221, 3.5715, 2.4337, 1.9778, 1.0209, 0.1128, -1.6904, -3.3639, -3.2615, -1.5944, -0.2581, -0.903, -2.3174, -4.1698, -4.9533, -4.5665, -6.1912, -10.0495, -13.234, -15.5995, -16.5459, -15.2199, 5.3973, 5.3767, 6.35, 5.5996, 2.0913, -2.3482, -4.267, -3.6648, -4.0077, -3.9263, -6.601, -20.6386, + 3.6641, 3.072, 2.139, 1.3959, 0.5821, 0.1856, -0.7457, -1.801, -2.5799, -2.9996, -3.1922, -3.7936, -4.3073, -4.4608, -3.725, -2.3583, -1.9204, -1.2606, -2.2907, -2.819, -3.6214, -3.1415, -2.0045, 0.0938, 2.4493, 4.0398, 6.5627, 10.1038, 12.7333, -5.2898, -3.8412, -0.6529, 0.7502, 1.5439, 2.507, 2.6854, 3.8159, 2.2321, 3.0585, -6.8092, 14.5213, + 7.5981, 6.7937, 5.2222, 4.6535, 5.7305, 7.9847, 10.01, 10.9988, 9.0694, 6.0491, 3.4695, 2.202, 3.1237, 4.5225, 7.5338, 7.066, 2.89, -1.4622, -5.4401, -6.1963, -7.3166, -5.9799, -7.7791, -10.5609, -13.5413, -13.8804, -12.9467, -9.4679, -10.3461, 11.6866, 9.3826, 4.4701, -2.9772, -5.447, -4.9307, -2.727, -0.1581, -1.4072, -1.6802, -6.2119, -24.8632, + 5.8372, 5.4933, 4.4445, 3.1566, 1.2701, 1.1435, -1.1096, -2.4243, -3.5109, -2.2282, 0.6573, 2.1785, 1.1141, 0.6038, -0.927, -0.101, 0.3438, 0.9773, 1.8036, -0.1658, -2.1507, -2.6201, -1.5194, -0.3072, 1.7488, -3.1481, -4.7553, -3.5314, -2.2733, 1.5456, 3.9136, 6.0524, 4.791, 5.6839, 4.8261, 0.4655, -3.9096, -15.7692, 1.863, -9.4624, -9.489, + 4.6026, 4.2957, 4.0221, 3.8863, 4.8775, 7.7799, 11.9268, 15.6438, 16.1838, 13.0359, 8.2259, 3.9397, 1.1633, -0.5844, -0.4453, 1.672, 3.9861, 4.4822, 0.7429, -4.6835, -8.2254, -8.6845, -8.8455, -9.205, -9.3625, -12.115, -14.9115, -16.6057, -16.7984, 9.4268, 8.2301, 5.436, 2.2444, -2.802, -3.6865, -3.4374, -3.621, -3.4624, -3.4351, -4.8928, -25.4465, + 31.7873, 30.4727, 26.1023, 20.2575, 14.3546, 8.305, 2.5479, -2.7242, -6.2652, -7.8786, -9.5076, -10.7253, -11.9221, -12.5796, -13.002, -12.411, -11.3787, -10.5858, -9.2885, -7.2279, -5.6862, -4.5481, -3.8155, -3.181, -0.2688, 1.7479, 2.4086, 2.6005, 2.4118, 6.0159, 2.6937, 1.8092, 1.2143, 0.6228, -0.1962, -1.5166, -0.7925, -1.1563, -2.0509, -6.6433, -6.4991, + 18.8196, 18.806, 19.0012, 19.7425, 18.9386, 15.192, 9.3626, 3.8042, -0.7101, -2.8913, -4.5793, -4.8562, -4.2855, -1.5235, 2.8079, 3.9527, -0.682, -6.1064, -9.0907, -10.7715, -10.2261, -6.853, -5.4028, -9.0538, -11.2966, -11.9744, -10.3023, -9.0454, -10.7763, 4.8079, 2.0464, 0.5831, -0.5085, -0.7115, -0.6171, -0.2759, -0.3213, -0.227, -0.8577, -3.9185, -18.4439, + 29.8848, 29.1207, 27.5698, 25.5473, 23.0863, 20.0333, 16.4515, 12.7057, 8.6525, 4.4123, 0.1328, -3.7662, -7.0685, -9.2222, -10.1967, -10.3862, -9.4399, -7.5052, -6.1986, -7.052, -9.653, -11.7447, -12.817, -13.2994, -13.4411, -14.5193, -16.0619, -17.4467, -17.7785, 0.6444, 0.915, 1.0957, 0.6198, -0.2661, -0.3037, -0.4308, -0.4697, -0.3863, -0.3182, -1.1, -17.5027, + 18.4803, 19.3278, 19.3456, 18.5446, 16.5534, 13.5838, 10.0057, 6.5241, 3.2399, 0.544, -2.4922, -5.5969, -8.475, -10.0774, -10.9952, -10.9028, -10.6525, -9.9639, -8.7708, -5.9295, -0.9987, 2.2097, -2.2176, -6.2966, -4.0572, -2.0702, -5.9921, -9.8384, -13.0318, 9.7202, 8.7919, 5.85, 1.2627, -3.1473, -4.0847, -3.9814, -3.8063, -3.2668, -2.9485, -4.3897, -21.4605, + 10.8936, 10.0376, 8.9233, 8.3835, 9.1909, 11.1956, 12.7625, 12.831, 11.2547, 8.6892, 5.7674, 5.0532, 5.1919, 6.4652, 5.5698, 1.2762, -3.6991, -7.9057, -10.9535, -12.3006, -13.0325, -12.0668, -10.2756, -8.9081, -9.5586, -12.4845, -12.5292, -10.6874, -9.0841, 6.7548, 4.3777, 7.2866, 11.0895, 5.9012, -3.2191, -7.2773, -7.4247, -5.9063, -4.6316, -6.951, -23.662, + 14.1801, 13.6094, 10.246, 6.2621, 3.2304, 0.492, -3.3704, -5.1542, -6.4379, -7.1331, -6.8071, -6.701, -7.0994, -6.7923, -5.4284, -4.1081, -2.2588, -0.3405, 0.3901, -0.1306, 0.2111, 1.2777, 2.612, 2.4542, 2.4177, 2.7283, 1.9381, 0.6674, -0.9548, 1.3373, 0.4195, 0.2246, -0.2612, -0.578, -0.3401, 0.2289, 0.3082, 1.5502, 2.1823, -5.0717, -1.9154, + 7.4197, 7.6107, 5.1248, 2.8926, 2.5158, 5.2747, 7.9445, 9.5554, 9.8134, 10.8602, 11.2127, 10.8181, 10.8451, 8.6337, 3.4818, -1.7126, -6.6143, -9.2501, -11.755, -13.8987, -14.1553, -13.7199, -12.4906, -7.978, -7.1759, -5.4179, -4.3134, -2.3617, -3.1596, 3.7397, 0.2684, -0.7543, 2.0473, 3.1074, 3.1748, 0.6925, 0.1021, -1.9327, -0.9979, -9.4471, -15.9473, + 5.0374, 7.8743, 10.506, 13.2551, 15.8405, 18.1863, 17.687, 15.2297, 11.9245, 8.8446, 6.8821, 5.5715, 2.9277, -1.1968, -4.6014, -6.2302, -7.5567, -8.8097, -8.9946, -8.6106, -9.0917, -8.5223, -8.8031, -10.3066, -10.5465, -10.512, -10.3576, -11.9252, -13.702, 3.764, 1.872, 2.0488, 1.2415, 0.9134, -0.5949, -1.6362, -1.3248, -1.6433, -1.0179, -3.6227, -18.8186, + 19.2311, 20.9055, 21.1816, 19.8035, 16.764, 10.9316, 4.3014, -1.2152, -6.3082, -9.8229, -12.4158, -14.601, -15.196, -13.5529, -10.486, -6.001, -0.0077, 5.5394, 4.4883, 0.8609, -0.7114, -0.5882, -2.0714, -4.1988, -3.5305, -2.7385, -3.9119, -6.6059, -10.044, 6.8589, 1.6709, -0.4277, -0.8756, -0.7567, -0.4132, -0.3654, -0.2776, -1.2933, -1.0276, -3.0928, -19.711, + 24.3921, 23.8657, 21.7178, 19.5721, 17.2483, 13.0391, 8.278, 4.5096, 2.1017, 1.4583, 0.4028, -1.6986, -2.5413, -2.4202, -3.3681, -6.3081, -8.4179, -8.6508, -8.3994, -5.6233, -2.8768, -2.4582, -4.6987, -11.026, -15.7297, -17.5495, -16.498, -11.2445, -7.0765, 10.9683, 8.5482, 1.624, -0.8116, -2.3291, -2.0794, -2.7065, -3.3384, -2.8326, -2.6102, -4.4326, -18.4205, + 21.6293, 21.2629, 20.0435, 18.0462, 14.0665, 8.5047, 3.1435, -1.3209, -4.4014, -5.7444, -6.244, -6.5178, -6.8764, -6.1381, -3.8131, -1.3478, -0.7585, -3.8085, -6.8211, -8.0966, -7.589, -5.2013, -2.5966, -3.9678, -5.8322, -4.8627, -3.8164, -4.4574, -6.4845, 7.4192, 3.5944, 0.8769, -1.2773, -0.8711, -1.2539, -1.2063, -1.1651, -0.7991, -1.1807, -4.1369, -15.4669, + 25.3218, 25.2194, 24.6132, 23.8034, 22.1467, 19.2686, 16.007, 12.6244, 9.8907, 7.3439, 4.6106, 2.0173, -0.23, -3.1887, -6.2778, -8.9287, -10.75, -12.4083, -13.6221, -14.5295, -14.0216, -11.6668, -8.29, -7.178, -8.6454, -13.0929, -18.1357, -20.6369, -21.2645, 0.649, 1.5279, 1.4976, 1.2259, -0.2509, -0.5437, -1.0645, -0.9697, -0.4026, 0.0229, -1.6919, -19.5268, + -1.2546, -1.5446, -0.9486, 0.9829, 1.7405, 1.8511, 2.612, 4.5582, 4.2836, 3.2383, 1.925, 1.5674, 0.4781, -1.1296, -1.5011, -0.3895, 1.2177, 2.8828, 3.7419, 3.9893, 0.6886, -1.304, -2.837, -5.679, -3.6007, -1.063, -1.5598, -5.1076, -7.8381, 10.2277, 6.2474, 2.9832, -0.8736, -8.4082, -6.4397, -4.2854, -1.8654, 0.4359, 0.954, 1.0241, -18.8314, + -3.652, -0.9802, 0.633, 3.0142, 3.7152, 4.2246, 3.065, 2.2808, 0.7668, -0.9696, -2.1283, -3.4617, -5.696, -9.1999, -10.9932, -10.595, -8.8872, -8.3491, -3.9024, 3.8951, 4.5732, 4.1833, 4.4267, 5.3015, 7.163, 6.8136, 3.6, 4.1437, 7.0149, 8.8113, 4.5339, 4.332, 3.8462, 2.4702, 0.0061, -1.7359, -2.2461, -3.3967, -3.6881, -12.9329, -0.9921, + 24.1276, 23.4144, 21.9515, 19.2491, 15.3233, 10.6683, 5.7075, 1.4491, -1.9622, -3.4974, -4.3346, -5.264, -5.4783, -4.5424, -2.5563, 1.0471, 2.9749, 1.0585, -4.2112, -7.704, -8.5161, -8.5574, -7.1906, -8.4892, -11.7312, -13.8838, -13.1386, -9.4367, -6.477, -5.2323, -4.7057, -2.176, 0.8632, 2.4803, 4.6972, 3.2524, 3.1237, 0.8651, 3.0078, -6.1758, -9.0277, + 9.207, 8.6269, 7.9993, 9.2567, 10.6048, 10.9179, 8.2726, 5.4801, 2.9587, 1.4349, 1.6895, 0.8687, -0.1341, -1.4667, -2.2954, -2.9979, -3.1146, -3.5248, -3.6823, -3.9108, -4.704, -5.0502, -5.2411, -6.0582, -6.2892, -7.1229, -6.8496, -7.8359, -7.0393, 1.0164, 0.3126, 0.256, 0.1094, 0.1566, -0.0117, -0.2184, 0.266, 0.0029, 0.5627, -2.4525, -9.3388, + 19.0542, 19.7864, 20.4414, 20.8883, 19.4828, 14.6899, 8.0652, 2.5866, -1.961, -4.2899, -5.3264, -5.8141, -5.3969, -2.8814, 0.6767, 3.6783, 2.8172, -1.1754, -3.8287, -4.3496, -4.1271, -2.7566, -3.4552, -6.5139, -9.4384, -14.1688, -17.1871, -19.0448, -20.4515, 1.8392, 0.8553, 0.2154, -0.0271, -0.4104, -0.2449, -0.1708, 0.0249, -0.0369, -0.2525, -1.7922, -22.7099, + 22.2875, 23.2966, 21.0875, 19.4172, 19.4631, 20.2489, 19.086, 14.7884, 9.6247, 4.7618, -1.1341, -7.8711, -13.4709, -16.4039, -17.9473, -16.0183, -8.7161, -0.3674, 4.2198, 1.897, -0.6141, -0.3383, 1.4297, -1.9778, -12.253, -18.9367, -22.1657, -22.0094, -21.384, 0.0857, -0.3388, -0.3844, -0.6424, -0.7435, -0.5609, -0.1067, 0.1511, 0.7988, 1.0267, 0.7142, -22.3449, + 1.5997, 0.7952, 0.5771, -0.1086, -0.9165, -0.4936, -0.5385, -1.1104, -2.3027, -2.7303, -1.7093, -1.2741, -1.2559, 0.1339, 2.1512, 4.2566, 4.4113, 3.294, 1.9275, 1.166, 0.9857, 0.1003, -0.1015, -0.9056, -0.5391, -0.5752, -1.0655, -2.5147, -3.257, 1.4399, 1.6942, 1.2365, 0.6457, -0.0065, 0.5875, 0.3795, -0.0796, 0.4453, 1.0116, -7.354, -5.9661, + 17.6306, 19.8446, 20.6406, 20.9119, 20.8696, 19.9715, 17.0436, 12.6644, 7.8356, 3.7315, 0.0618, -2.5156, -4.0666, -3.6383, -2.3405, -0.6112, -0.7237, -3.4603, -8.5171, -12.2394, -14.9608, -15.8437, -14.9681, -12.615, -11.0775, -11.0437, -12.1047, -15.2272, -15.2522, 3.8383, 2.7442, 1.4004, 0.6138, -0.4141, -0.6861, -1.0225, -0.8449, -0.9118, -0.8189, -3.8984, -19.7618, + 4.0159, 4.7341, 5.0428, 5.4476, 5.5823, 5.0017, 4.7364, 5.0152, 5.4244, 7.2281, 10.0426, 12.1892, 12.5133, 10.8886, 9.4587, 9.9271, 9.6594, 6.2877, 1.1672, -4.8743, -9.8309, -10.9887, -10.4195, -8.8449, -10.0345, -14.288, -19.4282, -23.5124, -22.141, 9.6326, 8.1547, 3.0154, -1.3662, -1.9025, -0.9827, -0.5431, -2.6536, -3.4587, -4.054, -5.842, -26.6165, + 1.3951, 2.3341, 2.7846, 3.6043, 3.9813, 5.2605, 5.5279, 4.846, 3.2475, 2.3327, 1.8366, 1.4325, 0.6121, -0.4539, -1.6285, -2.8274, -4.2077, -4.6993, -5.0706, -4.2874, -4.4071, -3.4175, -3.0547, -3.3504, -1.7471, -0.7879, -0.0749, -0.117, 0.9361, 4.5093, 3.2132, 3.2053, 2.7775, 1.5517, -0.0446, -1.3922, -2.0535, -0.9648, -1.7751, -9.0269, -4.586, + 28.2916, 29.7152, 29.0955, 27.1159, 23.3768, 18.1997, 11.9697, 5.6704, 0.9205, -2.5625, -6.9213, -11.486, -15.0627, -16.3635, -16.7915, -16.8262, -16.229, -14.5129, -11.0684, -5.6647, 2.9493, 7.145, 4.8374, 2.6581, -2.8551, -9.629, -15.306, -15.9776, -14.6886, 0.7674, -0.5757, -1.0994, -0.2628, -0.333, 0.2608, 0.1505, 0.3201, 0.6736, 0.6525, -0.5539, -15.2205, + 21.3574, 19.0821, 16.0689, 13.5763, 11.7756, 9.8197, 7.1626, 5.6591, 4.1988, 2.6866, 1.2839, 0.297, -0.7392, -2.1025, -2.9588, -3.9692, -4.2266, -4.5449, -5.2046, -5.5074, -6.5396, -7.8927, -8.7128, -9.14, -9.3002, -10.003, -10.319, -10.7968, -11.0108, 1.2272, 0.8607, 0.9681, 0.0462, -0.4903, -0.1304, -0.4412, -0.146, 0.3281, 0.933, -3.1554, -13.2931, + -11.9427, -9.0347, -8.1854, 0.5355, 16.2351, 30.0772, 15.6863, -0.5026, -5.1802, -3.4273, 8.1185, 14.303, 3.9959, -5.7275, -2.8537, 5.8633, 2.1444, -4.9037, -1.6011, 1.0216, -1.4938, -3.6235, -5.0675, -4.7195, -2.6927, -4.8393, -5.4537, -9.4932, -7.2387, 4.1282, 1.8786, 1.9953, 0.5488, -0.3819, -1.3723, -1.0026, 0.0804, -1.6472, -0.9937, -3.2335, -11.7554, + 18.449, 17.8582, 16.6014, 15.4593, 14.0319, 12.3568, 10.0803, 7.8236, 5.707, 4.5343, 3.607, 3.4959, 2.7669, 0.5453, -0.986, -2.0713, -2.6104, -3.5225, -5.566, -7.1856, -8.5038, -9.9136, -10.8379, -12.1072, -13.2841, -13.7883, -13.6681, -14.0513, -15.221, 1.9454, 1.7954, 1.7868, 0.9124, 0.3779, -0.2762, -0.6521, -0.9212, -0.7314, -0.0795, -4.1574, -18.4931, + 11.8976, 17.951, 18.5286, 15.1944, 9.4977, 6.4581, 3.3668, -0.2268, -3.9011, -5.4058, -5.9886, -7.2383, -7.8525, -10.3087, -12.8063, -12.1794, -11.0999, -8.8156, -8.1165, -6.1532, -4.2252, -4.0395, -1.3151, 0.5738, 3.955, 8.7131, 6.7113, 1.7138, 5.1116, 0.9965, 1.4759, 3.0237, 2.9344, 5.1266, 4.6639, 2.7831, 2.9561, 0.3334, -5.8448, -18.4487, 1.1692, + 0.9487, 1.413, 0.9479, -0.0826, 0.2145, 3.217, 4.0687, 3.2987, 3.5035, 4.5743, 4.0544, 3.4101, 4.0914, 4.5664, 4.8132, 6.4401, 9.3451, 8.9607, 6.079, 2.7728, 0.8498, -0.8017, -2.4432, -4.7032, -9.3198, -12.6235, -15.1492, -15.7996, -16.6466, -0.8633, -0.9141, -0.0119, -0.337, -0.1759, 0.0244, 0.0238, 0.6518, 1.091, 1.8672, -1.356, -15.2177, + 34.1302, 32.0599, 27.8887, 23.7603, 19.3256, 13.9648, 7.8176, 2.2845, -0.8316, -2.8468, -4.8687, -6.8758, -8.2507, -10.028, -11.0038, -9.9438, -7.5333, -4.6451, -2.1804, -2.2669, -3.7303, -5.3382, -6.9605, -9.3264, -11.3621, -13.0806, -13.5868, -13.1789, -13.393, 0.4195, 0.2121, 0.0329, 0.2371, 0.0989, 0.178, 0.0464, 0.0275, 0.3526, 0.0885, -1.6936, -14.6518, + 15.6422, 15.2859, 14.7754, 15.3593, 17.2032, 19.1105, 18.2304, 15.0687, 12.08, 11.4521, 13.3209, 14.1182, 10.1435, 2.4651, -4.8883, -9.38, -12.5864, -13.8568, -15.1276, -15.6378, -14.1885, -9.7248, -6.9518, -9.9796, -12.4385, -13.0782, -14.0208, -19.5089, -22.8872, 0.499, 0.8082, 1.3862, 0.4212, 0.1198, -0.3486, -1.0547, -0.403, 0.3854, -0.1208, -1.6927, -24.4489, + 31.6974, 29.478, 26.629, 23.262, 19.3188, 14.1307, 8.2731, 2.81, -1.094, -3.2472, -4.229, -4.829, -5.3248, -6.1539, -6.7558, -5.9669, -4.6964, -4.4401, -6.192, -8.0753, -8.1121, -6.2825, -6.0789, -5.7147, -3.3695, -8.9378, -16.7789, -19.5464, -19.7736, 3.0519, 6.0787, 1.0322, -0.6589, -1.6175, -2.1104, -1.9403, -1.7062, -0.9516, 0.481, -1.659, -17.7143, + 6.6516, 7.1945, 6.2582, 4.9369, 3.5619, 3.6748, 2.077, 0.4189, -2.1975, -3.886, -3.9613, -3.8644, -5.3511, -7.2609, -7.6175, -7.1661, -5.7976, -4.5218, -1.9308, 1.448, 5.0915, 4.7364, 4.6719, 3.6113, 3.3328, 2.0626, -1.533, -2.8815, -1.7589, 6.4246, 5.9081, 6.0283, 5.5237, 2.9559, -0.7124, -3.2659, -4.6501, -4.6857, -3.8757, -9.6509, -8.7268, + 12.9326, 13.6158, 13.6027, 13.5734, 13.4039, 13.8175, 13.8659, 12.7258, 9.7632, 6.3103, 2.7321, -0.5733, -3.8746, -7.086, -9.645, -10.7832, -10.3935, -8.3777, -4.8027, -1.1394, -0.1906, -2.9954, -5.6539, -5.3461, -4.393, -8.2738, -13.2039, -15.2593, -14.3519, 12.0896, 7.9934, 4.3314, 2.9333, -0.2922, -3.974, -5.2453, -5.1292, -4.2466, -2.5427, -5.9177, -24.1706, + 3.3111, 5.7192, 7.6731, 8.6538, 8.7816, 9.2367, 10.2956, 10.7802, 8.7371, 5.9609, 4.1644, 2.5137, 0.7897, -0.7157, -1.6711, -1.2978, -0.9879, -0.5737, -1.7029, -3.8746, -6.212, -6.9054, -7.5755, -8.5853, -8.663, -8.4875, -9.3126, -9.4585, -10.5934, 1.9845, 0.8889, 0.2842, -0.9179, -1.4593, -0.6826, -0.6777, -0.0392, 0.8979, 1.4414, -1.7202, -13.5455, + 14.2205, 14.4641, 13.7854, 13.0598, 13.2991, 14.8419, 16.1502, 16.5712, 15.2079, 11.8669, 7.9213, 4.5068, 2.1444, 1.2542, 2.5468, 4.6558, 4.3109, 0.6255, -5.187, -9.7699, -11.4109, -10.1544, -8.4757, -11.5168, -17.9764, -22.4698, -24.8959, -25.1837, -24.3922, 1.4299, 0.413, 0.0191, -0.2559, 0.4822, -0.2917, -0.0644, 0.3763, 0.0596, -0.3088, -1.8594, -27.0927, + -2.8758, 15.2556, 21.0124, 15.289, 2.1565, 2.6722, 2.923, 4.3949, 0.446, -0.9254, 1.7753, 1.364, 0.4328, -3.9146, -4.3331, -4.1112, -3.8881, -5.2841, -2.7539, -1.9759, -0.4884, -4.8231, -3.5586, -3.51, -2.3689, -4.3495, -5.1658, -7.1944, -6.2007, -2.475, -1.0212, 2.7562, 1.1019, 2.0472, 2.2292, 2.3273, 2.8928, -1.1663, -0.0381, -8.6541, -3.0398, + 18.8285, 20.4979, 21.7173, 23.1703, 24.2063, 23.5814, 21.0896, 17.9453, 15.643, 14.4782, 13.143, 9.6223, 4.1452, -1.1378, -5.0589, -7.8909, -10.5229, -13.0157, -15.3961, -16.7612, -17.5151, -17.5485, -17.4267, -17.8018, -18.7396, -19.9281, -20.0342, -16.863, -12.4276, 8.6336, 4.4955, 1.3996, -0.2307, -1.5565, -2.0497, -2.323, -2.1696, -2.165, -1.6041, -2.43, -20.8387, + 16.1197, 16.1677, 13.0422, 10.1574, 7.482, 4.6731, 0.9828, -1.4519, -2.9998, -3.7625, -4.0148, -4.3809, -5.3027, -6.4756, -7.1149, -7.3309, -7.7257, -6.9484, -6.1237, -4.9958, -3.5063, -1.5803, 0.7658, 1.786, 3.3939, 3.3871, 0.1351, -1.5829, -2.7956, 3.7721, 2.8811, 2.698, 2.1046, 1.6496, 1.643, 0.3146, -1.1205, -1.2974, -2.3187, -10.3263, -6.3444, + 33.2222, 30.5262, 25.0634, 19.0582, 13.7573, 9.6221, 5.3575, 1.773, -0.2567, -0.9304, -1.7632, -2.8645, -3.748, -4.1938, -4.1659, -4.0416, -4.7502, -6.0605, -7.9728, -8.5077, -8.1116, -7.8726, -8.1931, -9.0767, -10.5826, -11.3078, -11.2136, -11.3407, -11.426, 0.8122, 0.488, 0.3714, -0.1432, -0.1971, -0.2624, -0.2558, -0.0613, 0.088, 0.0913, -0.931, -13.399, + 23.3644, 24.0993, 25.3117, 28.071, 27.1967, 22.1136, 17.5071, 15.1758, 14.335, 11.14, 4.3238, -3.0833, -8.0197, -10.4359, -12.1778, -13.4366, -14.3352, -15.1818, -14.9458, -14.461, -13.872, -11.3742, -10.2486, -10.0143, -11.6705, -10.3545, -10.901, -13.4149, -14.7113, -0.0476, -0.0526, 0.7467, 1.6512, 0.2779, 1.1979, -0.1397, -0.0153, -0.2711, -0.9085, -2.4389, -16.2622, + 14.4881, 12.3355, 8.8723, 6.0773, 3.3394, 2.1115, 0.8125, 0.2147, 0.056, -0.0137, -0.2214, -0.6427, -0.7267, -1.5641, -2.3561, -2.2954, -2.4665, -2.8622, -3.0085, -3.0425, -3.2164, -3.541, -3.2388, -3.283, -3.0079, -3.0781, -3.2229, -3.1753, -3.3443, 0.6505, 0.0498, -0.1331, -1.126, -0.6639, -0.2628, -0.209, 0.4291, 0.7281, 1.5146, -0.9773, -5.3512, + 2.0621, 1.412, 0.1443, -0.6564, 0.5194, 4.127, 7.3667, 9.7238, 11.5833, 11.3655, 7.7646, 4.2923, 2.5041, 4.7009, 7.5418, 8.5568, 4.4916, -1.2294, -4.3559, -5.7809, -5.5627, -3.7357, -4.6814, -7.6996, -10.083, -11.5284, -10.0528, -10.0753, -12.7146, 1.7722, -0.0816, -0.3269, 0.6524, 2.3093, 3.6584, 1.5222, 0.4498, -1.3345, -1.6645, -6.9568, -19.683, + 25.4648, 24.2073, 21.4183, 18.0385, 14.5373, 11.3133, 7.9671, 5.3323, 3.4067, 2.4589, 2.3509, 1.9998, 0.7508, -0.6518, -2.8305, -5.4658, -7.9173, -10.2576, -11.4401, -11.9089, -12.2924, -10.4402, -8.9248, -9.352, -7.9692, -5.3374, -6.585, -12.1411, -15.7319, 4.8043, 4.3614, 2.147, 0.1372, -1.2225, -1.5199, -1.617, -1.646, -1.4994, -1.0956, -2.8494, -19.563, + 10.4477, 9.9103, 9.3167, 9.9753, 13.0396, 16.4188, 16.2006, 11.2422, 5.492, 2.0198, -0.5193, -2.2228, -3.7621, -2.3955, 0.6073, 4.9323, 5.7164, 1.908, -3.853, -5.3428, -5.1549, -4.4637, -8.4757, -12.2439, -13.8905, -14.278, -11.6814, -12.1684, -16.7752, 0.6951, -0.414, -0.215, -0.4177, -0.1652, 2.0344, 0.4827, 0.3849, 0.6488, 0.2765, -3.3105, -20.973, + 11.6894, 11.5653, 11.7767, 13.6634, 16.8841, 16.8356, 11.607, 5.3075, 0.2573, -3.0445, -5.5117, -6.5939, -7.5658, -6.4151, -2.9369, 2.581, 5.6008, 0.1628, -5.9773, -6.9647, -6.5125, -3.3783, -4.0081, -8.2854, -9.9143, -9.2857, -6.2357, -5.9007, -9.4002, 10.4552, 5.0807, 0.6307, -1.3477, -0.5399, -0.5873, -1.8383, -1.7997, -2.057, -2.8514, -5.1454, -22.0833, + 21.2161, 21.5655, 20.7743, 20.2657, 20.4741, 20.8267, 19.9547, 17.4467, 13.8013, 9.3303, 4.0053, -0.5555, -4.305, -6.2844, -5.9649, -3.292, -0.3039, -0.5084, -4.2075, -9.2735, -12.3913, -12.0554, -11.2851, -13.2289, -17.6674, -21.0646, -22.6765, -22.3615, -22.2348, 0.6227, 0.2943, 0.3156, -0.0153, -0.3658, -0.4357, -0.0101, 0.1177, 0.2549, 0.3115, -1.0897, -21.8725, + -5.8017, -5.8902, -5.5846, -4.762, -4.4881, -3.9174, -4.283, -5.1666, -6.3677, -6.8882, -6.9995, -6.8752, -7.3225, -8.7191, -9.5016, -8.754, -7.1882, -3.8658, -0.5597, 2.3798, 1.4716, 2.7987, 5.8548, 11.0383, 14.5525, 16.8697, 19.0261, 18.9539, 19.9898, 7.1234, 3.7053, 2.7491, 2.3946, 1.8894, -0.2885, -0.8988, -0.3606, -0.2356, -2.8434, -13.235, 10.7649, + 29.8544, 29.8362, 28.5318, 26.532, 23.6452, 19.329, 14.5539, 10.284, 6.4573, 3.11, 0.1941, -2.1012, -5.6884, -9.9636, -12.852, -13.5951, -13.0431, -13.2967, -13.3194, -12.2195, -9.3679, -5.0767, -1.3008, -4.8112, -12.0561, -15.7608, -16.8756, -16.0321, -14.9678, 2.1806, 0.2835, -0.2562, -0.386, -0.657, -0.1415, -0.217, -0.2013, 0.4029, 0.2038, -1.2117, -16.045, + 8.0644, 8.0499, 7.1416, 6.5893, 5.5981, 4.3993, 3.4826, 2.7143, 2.8318, 2.358, 2.4915, 1.9093, -0.3049, -1.4506, -1.2401, -2.3404, -1.2673, -2.2808, -2.4575, -3.4995, -3.9318, -5.0149, -5.3296, -3.8867, -4.4533, -4.5744, -4.0511, -4.8087, -4.7385, -9.0466, -10.6663, -9.9253, -6.6473, -2.6332, 0.9689, 4.1205, 6.334, 8.2517, 9.8032, 9.4405, 1.9804, + 9.5207, 9.0443, 7.8069, 7.3329, 7.3094, 8.0083, 9.9299, 12.4518, 13.0618, 11.3574, 7.8442, 3.8017, -0.1018, -3.9012, -6.5018, -7.0985, -5.6241, -2.4385, 1.2347, 1.1544, -2.3784, -5.3165, -6.5624, -5.5597, -5.2937, -9.9992, -14.6755, -17.3896, -17.0176, 9.0473, 5.4785, 3.0998, 0.8918, -1.3974, -3.6623, -3.5233, -2.5034, -1.0502, -1.2373, -5.1436, -25.0416, + -5.0642, -5.1796, -4.6005, -5.1034, -4.7822, -2.6885, -1.4531, -1.7854, -2.0629, -2.7192, -4.452, -3.929, -3.4335, -4.7675, -6.1288, -7.0944, -6.633, -5.1475, -3.279, 1.153, 2.3119, 6.3456, 6.1984, 9.1249, 10.9774, 11.5921, 12.7428, 11.4754, 8.3823, -9.7326, -13.5256, -14.6472, -7.0881, -1.2233, -0.9864, 6.1958, 7.2048, 10.0661, 12.3652, 11.3714, 19.005, + 6.7705, 6.0726, 4.7668, 4.7287, 5.5025, 5.2104, 3.6077, 1.7454, 0.3953, -0.348, -0.7236, -1.1397, -2.5075, -2.4282, -2.0351, -1.5354, -0.9783, -1.1816, -2.7792, -3.3855, -3.4229, -4.1416, -3.3236, -3.6243, -3.9451, -2.9592, -1.2582, 1.2767, 1.6406, 9.6325, 11.3324, 9.8681, 5.5229, 2.3829, -0.2309, -2.8115, -5.0973, -6.3038, -7.6243, -16.6711, -7.8822, + 18.7275, 18.7602, 15.1086, 10.7098, 6.9559, 5.0306, 2.7456, 0.2771, -1.9055, -2.8108, -2.7768, -3.7007, -4.2089, -5.7436, -6.2204, -5.8236, -4.9148, -3.2075, -2.8848, -3.121, -2.7428, -4.5923, -3.8926, -3.7191, -2.9927, -3.2069, -3.9982, -3.813, -2.0396, -6.3039, -3.8256, -2.1569, 0.2409, 3.3218, 4.6289, 5.0475, 3.5987, 1.8219, 1.8959, -8.2692, 2.9296, + 19.0392, 17.4654, 14.9352, 12.2077, 10.497, 11.1852, 10.4778, 8.4045, 4.8902, 1.7924, -0.876, -4.1317, -6.0495, -6.1897, -5.015, -1.439, 2.3264, 1.7138, -1.0924, -3.4019, -4.302, -3.5935, -2.4494, -6.411, -11.384, -13.3423, -14.0158, -14.8337, -16.408, 5.217, 2.0001, 0.7957, -0.6171, -0.8902, -1.2003, -1.1541, -0.6336, -0.6395, -0.6616, -2.2164, -21.367, + 10.4791, 9.9395, 9.0805, 9.1584, 10.6784, 12.7374, 14.6952, 15.0752, 12.809, 9.8648, 7.835, 7.5607, 9.0798, 10.1615, 7.6961, 2.2376, -2.6758, -6.5418, -9.4708, -10.5541, -11.1366, -10.0882, -12.2916, -15.8392, -17.7528, -18.3635, -16.7645, -14.5122, -13.097, 9.0915, 6.6105, 3.9354, -0.3391, -3.1013, -3.4367, -2.504, -2.1417, -1.8401, -1.7766, -4.4978, -24.3538, + 2.0821, 3.1287, 4.0753, 5.4302, 5.7802, 6.6537, 7.213, 6.6951, 4.596, 2.8045, 2.4487, 1.8103, 0.4415, -1.7609, -3.0165, -2.8462, 0.1898, 3.3827, 4.319, 1.6896, -2.8185, -5.5524, -7.0484, -7.5484, -6.109, -5.9753, -4.7225, -7.1165, -8.2257, 3.668, 2.9008, 1.3962, 0.7099, 1.6828, 1.2318, -0.5067, -1.7458, -1.5988, -1.6313, -6.1069, -11.5601, + 1.1497, 1.32, 1.2707, 2.0082, 2.0004, 1.8044, 1.127, -0.2158, -1.8933, -2.4634, -3.4218, -4.7937, -4.71, -4.6869, -4.1693, -4.4056, -4.91, -4.6525, -4.3514, -5.3638, -6.5281, -5.1288, -3.6008, -0.1517, 2.6878, 7.224, 11.7457, 15.7449, 17.364, 6.9238, 4.8734, 3.1279, 0.9919, 0.1466, -0.3872, -0.1158, -0.4139, -1.8167, -1.7305, -11.5996, 8.8903, + 9.7978, 8.0725, 4.8934, 3.5284, 2.7083, 3.7014, 4.0313, 4.6282, 3.9292, 3.2742, 2.0518, 0.7154, -1.2921, -1.9667, -1.5639, -1.3033, -0.5627, -0.4778, -0.7607, -2.2442, -3.8987, -4.4781, -4.252, -4.6421, -4.1577, -4.5224, -4.4218, -5.2138, -5.574, 0.7391, -0.0616, -0.3222, 0.1802, -0.1541, -0.5544, -0.09, 0.4549, 0.453, 0.6154, -1.2603, -6.8376, + 11.0218, 10.5069, 8.2672, 5.9543, 3.9578, 3.9631, 2.6698, 1.5498, 0.3926, 0.318, 0.1925, 0.7238, -0.6282, -2.8873, -3.5603, -4.0488, -2.8863, 0.6168, 3.2951, 2.8007, -0.0448, -2.6501, -4.7672, -5.2381, -5.1827, -6.3352, -6.8157, -6.003, -5.1825, 5.7059, 6.0081, 5.5317, 5.2309, 1.9392, -0.7052, -2.995, -3.4059, -4.2816, -4.2198, -8.8083, -12.1555, + 30.722, 30.4352, 28.7635, 26.8276, 23.0072, 17.1944, 10.8428, 5.1151, 0.6042, -2.9361, -6.0945, -8.6787, -10.4457, -11.4951, -12.7062, -13.0113, -13.2579, -13.2793, -13.0584, -12.0898, -10.8056, -8.6431, -7.2774, -8.7256, -10.1911, -7.2394, -2.5936, -0.3436, -0.6396, 5.5942, 2.8807, 1.9726, 1.6097, 0.9653, 0.3476, -0.8863, -1.5202, -2.194, -2.7497, -6.0197, -9.7496, + 11.0431, 11.2874, 10.754, 9.9197, 8.6647, 8.6958, 8.6183, 9.9875, 10.047, 8.3112, 7.2898, 5.9718, 4.5865, 2.1034, -0.7735, -2.4122, -3.3246, -3.2844, -4.4966, -6.4114, -8.1119, -10.1936, -10.6919, -10.5371, -10.9794, -10.4475, -10.1218, -12.43, -13.0643, -8.4396, -8.4986, -5.5124, -3.9624, -1.092, -0.4675, 2.3907, 5.5877, 7.2456, 8.023, 4.7255, -8.4177, + 12.7397, 11.0783, 9.2586, 6.5612, 4.1628, 2.3704, 1.9316, 1.0515, -1.035, -1.2451, -1.9616, -3.0021, -4.2825, -5.4905, -5.6435, -5.621, -6.6154, -6.2022, -5.0535, -4.7672, -3.5637, -2.1688, -1.0431, 0.1656, 0.9547, 1.642, 2.0989, 1.7796, 1.9001, -9.9315, -12.1933, -12.6352, -7.0282, -1.8872, 1.8245, 4.5894, 7.3621, 9.3193, 10.4805, 10.0998, 9.3097, + 15.1389, 17.4197, 18.3393, 18.5836, 17.5461, 15.0277, 11.1098, 6.8515, 2.5234, -0.3132, -2.9049, -4.0328, -5.4435, -6.6072, -7.1258, -7.1761, -6.4666, -4.533, -0.7343, 1.2614, -1.3012, -6.3734, -11.7238, -12.6667, -10.4556, -6.4641, -7.1625, -10.7517, -11.5648, 8.7437, 7.862, 8.4762, 9.1692, 5.7736, -1.6953, -4.9554, -7.2071, -8.1718, -8.3657, -9.6294, -20.1832, + 18.735, 18.8415, 17.7238, 16.779, 16.8597, 17.9978, 19.1477, 18.5999, 16.1427, 12.4936, 8.6595, 5.9831, 4.9948, 5.7667, 5.588, 1.9462, -3.6217, -9.0782, -13.3577, -15.7337, -14.0069, -9.9754, -8.9549, -15.6483, -21.552, -23.5522, -23.683, -23.3131, -23.7818, 0.3454, -0.042, -0.0575, 0.3156, 0.1128, -0.3066, -0.4222, -0.0008, 0.1796, 0.4486, -0.5731, -24.7214, + 16.6836, 16.0011, 14.2761, 12.3355, 8.6965, 4.5639, -0.4844, -4.198, -4.765, -4.1296, -4.0155, -2.9656, -1.797, 0.468, 1.9673, 2.9994, 4.5, 3.5757, 1.1168, -0.5475, -1.7944, -2.5137, -4.8674, -5.5801, -7.1945, -9.0212, -11.1995, -10.8822, -11.2279, 0.2823, -1.5628, -3.0013, -1.8679, -2.2856, -1.4908, 0.7971, 1.9446, 3.1469, 4.5357, -0.4981, -12.2633, + 19.0033, 19.2025, 17.7777, 15.3002, 12.665, 9.5501, 5.6575, 1.8616, -1.6276, -3.6035, -5.2976, -7.4545, -9.9218, -11.055, -12.1614, -12.333, -11.7581, -10.8363, -9.3486, -5.9142, -0.9878, 3.2625, 3.7572, 3.2186, 3.6513, 0.3807, -3.4386, -5.0746, -4.4758, 13.3555, 8.9978, 5.4532, 3.6182, -1.0628, -3.2096, -4.4349, -5.7492, -5.1348, -3.5353, -8.2981, -16.823, + 18.4297, 15.9331, 11.2397, 7.8129, 5.538, 4.6599, 3.1356, 2.3935, 1.0751, 1.097, 0.648, -0.216, -2.0789, -2.6802, -3.0441, -2.3536, -0.3163, 1.8936, 2.7495, 0.5565, -3.1908, -5.3708, -7.0075, -7.5402, -7.2433, -8.2848, -9.2167, -9.4201, -9.1988, 2.6256, 2.051, 1.3148, 0.5355, 0.063, -0.6332, -0.4758, -0.6747, -0.4639, -0.1424, -4.2, -12.3908, + 7.3097, 7.7813, 7.8527, 7.8546, 8.1128, 8.9506, 10.6384, 12.8363, 14.6251, 15.4901, 15.1366, 13.4976, 11.9988, 11.7295, 11.3616, 8.4914, 2.9159, -3.6536, -9.48, -13.735, -17.1927, -18.7882, -17.6248, -13.8464, -10.5674, -13.8181, -18.1434, -20.8743, -18.8591, 11.3245, 8.7172, 3.5788, -0.9416, -1.5672, -2.3545, -2.3414, -3.3449, -3.961, -3.8438, -5.2662, -25.7869, + -1.6196, -1.5619, -1.3693, -0.0041, 0.6985, 1.0211, -0.2712, -1.1631, -2.5701, -3.8567, -4.4749, -4.1959, -4.6373, -5.4392, -6.632, -6.8724, -5.3058, -4.2328, -1.9447, -0.2533, 0.7399, 0.5052, 2.5635, 6.5244, 9.7417, 10.9027, 8.3775, 5.7836, 9.5462, -0.9205, 1.3066, 3.5975, 5.1438, 4.6369, 2.962, -0.2142, 1.2689, -0.0412, -3.1056, -14.6343, 6.0567, + 14.2155, 14.8572, 14.6396, 15.6515, 18.4554, 21.3207, 21.295, 16.587, 10.7997, 7.0073, 4.3743, 2.985, 1.5061, 3.2006, -0.1576, -6.6249, -11.7054, -14.9389, -16.7542, -15.9586, -13.4133, -9.9384, -8.4859, -12.4268, -14.9176, -16.0461, -14.1275, -6.4255, -4.9741, 5.5063, 0.3654, 3.5212, 7.9053, 3.8839, -1.5841, -4.1647, -4.5145, -3.545, -1.9892, -5.3846, -20.3075, + 9.1018, 8.8735, 7.5282, 6.865, 7.5449, 8.2635, 6.4844, 3.4564, 0.6817, -1.5163, -2.2174, -2.8199, -3.288, -2.4514, -0.1202, 2.7625, 4.3459, 5.3239, 3.3628, -0.1718, -3.0498, -4.4866, -5.5655, -6.7973, -7.4857, -9.1801, -9.3929, -8.469, -7.5827, 4.3844, 4.6419, 5.2823, 3.5134, 1.9965, 0.2705, -0.4359, -2.5064, -3.1275, -3.8266, -10.1926, -14.0516, + 22.6352, 23.6582, 24.5865, 26.389, 26.4341, 23.2091, 17.7722, 13.535, 11.1208, 9.98, 8.2759, 4.0348, -1.7705, -7.8105, -12.5187, -14.9802, -16.3623, -17.382, -17.7578, -17.649, -15.5778, -12.8018, -11.4459, -14.3128, -16.352, -15.2082, -10.9596, -5.2865, -3.4553, 7.6752, 3.5999, 2.0739, 1.1336, -0.6895, -1.5345, -2.458, -2.0781, -1.8815, -2.5118, -3.3292, -17.5176, + 1.875, 1.8662, 1.4311, 0.9127, -0.1302, -0.376, -0.5434, -0.222, 1.2349, 3.6442, 6.7696, 8.9037, 8.5438, 6.152, 3.7222, 3.0903, 4.4232, 5.4581, 6.2833, 3.7218, -0.7522, -4.4112, -6.2164, -5.4842, -3.9166, -5.963, -10.1542, -15.3434, -14.5193, 13.3682, 11.1151, 8.2449, 5.7945, 3.1501, -1.3709, -6.5216, -8.303, -8.2964, -7.6878, -9.493, -25.2906, + 23.8996, 24.1043, 23.8658, 23.668, 21.5342, 15.4333, 6.3905, -1.1158, -4.6322, -5.8867, -6.7301, -7.6112, -8.9183, -10.1939, -10.8837, -8.9691, -3.9727, 3.1911, 5.9335, 0.9841, -5.6662, -8.2167, -5.1918, -3.2488, -11.7754, -15.7999, -16.0905, -9.046, -5.0555, 9.193, 1.3362, -0.8279, -1.4971, -1.9949, -1.9954, -1.0397, -0.8391, 0.6715, 0.815, -3.8216, -17.2628, + 2.1343, 3.1072, 3.1035, 2.4651, 1.077, 2.5793, 2.6348, 1.2152, -0.5649, -2.3867, -0.692, 0.8781, 1.3547, -0.8951, -2.8053, -3.6858, -2.1707, 1.958, 5.8746, 8.3664, 5.4534, -0.2992, -2.5199, -5.0547, -5.4956, -3.579, -4.0494, -3.2599, -4.7435, 6.3175, 4.364, 4.2936, 4.0751, 4.2436, 2.1309, -2.1883, -4.5757, -4.9307, -4.577, -9.1531, -11.6403, + 24.1543, 25.338, 25.2642, 24.289, 21.5268, 15.8776, 8.7349, 1.8963, -3.3513, -6.9022, -9.3648, -10.8355, -12.1831, -12.5211, -12.8565, -12.9812, -11.8854, -11.1641, -9.286, -5.4976, -0.9263, 3.4028, 4.724, 3.7754, 2.3125, -4.4255, -11.3777, -13.5943, -12.1432, 6.6341, 8.4368, 8.7627, 5.8486, 0.7153, -3.2965, -5.0124, -5.0678, -5.2114, -4.9009, -6.9086, -15.732, + 33.3595, 30.8257, 27.394, 23.1538, 18.548, 12.9357, 7.6481, 4.1721, 3.2632, 3.436, 3.9739, 4.0188, 3.3042, 2.799, 2.1257, 0.5313, -1.9459, -5.6161, -9.5935, -12.9587, -14.8978, -16.0532, -16.3206, -16.6767, -16.1054, -16.6153, -17.9698, -18.6045, -18.1317, 1.5134, 0.826, -0.0981, -0.1095, -0.5148, -0.5502, -0.3922, -0.2658, -0.1093, 0.4252, -0.7246, -17.8748, + 1.6216, 0.9985, 0.7656, 2.7126, 3.5846, 4.9869, 4.3162, 4.0409, 2.9716, 0.7825, 0.4168, 0.2302, -0.1647, -1.1633, -1.3128, -0.8806, -0.1106, -0.3406, -2.2081, -3.7852, -4.1417, -2.9134, -2.1959, -1.8077, -1.5502, -2.2082, -1.4934, -0.695, -0.4569, -7.0535, -3.1321, 1.0676, 0.9741, 1.5466, 3.3522, 3.6041, 3.9392, 1.3441, 1.8148, -7.4571, 2.7151, + 15.5981, 19.5861, 21.1052, 20.7702, 17.9972, 13.4362, 8.4295, 3.6958, -0.0748, -3.8419, -6.8494, -8.7952, -9.5977, -10.9677, -13.2231, -11.6825, -9.656, -6.9659, -3.1059, 0.6508, -2.2959, -4.9921, -6.595, -5.9531, -3.291, -4.7702, -3.987, -1.794, -2.8308, -2.5, -4.6538, -0.7258, 4.733, 8.3235, 5.3781, -0.4169, -0.0664, 0.8379, -2.0639, -8.8455, -9.7704, + 23.7863, 25.9404, 25.3891, 21.9998, 16.2579, 9.6322, 3.4737, -1.7621, -6.1163, -9.2774, -11.9071, -13.8355, -14.8079, -15.2219, -15.496, -14.785, -13.1085, -11.2726, -7.3218, -0.9826, 6.1996, 7.861, 5.9579, 4.5346, 0.9527, -4.262, -5.857, -3.1595, -2.8119, 8.3142, 3.663, 2.1376, 0.017, -1.3069, -1.1574, -2.2597, -2.0274, -1.1056, -1.2385, -5.0363, -15.6945, + 20.3765, 22.4983, 23.2522, 22.4935, 18.6192, 11.9388, 4.7215, -2.2228, -6.9248, -8.7614, -9.4361, -10.4167, -12.0447, -14.3511, -15.7581, -15.0919, -13.4051, -11.6659, -8.9412, -4.6688, 1.6099, 5.0989, 2.6335, 0.0407, 0.1956, 0.6445, -1.3875, -1.9917, 2.9449, 22.4551, 18.5214, 5.2727, 6.1503, -0.1446, -8.9143, -8.7222, -9.1792, -9.3487, -7.5459, -8.5445, -16.1222, + 11.1076, 12.0485, 11.055, 10.5716, 11.0874, 11.6622, 9.9206, 4.9761, 0.3715, -2.6436, -4.8249, -9.221, -10.4786, -11.6233, -11.899, -10.3869, -9.3054, -5.4126, -0.0922, 1.7786, 1.9733, 2.3237, 2.4041, 2.1518, -0.8245, -3.1849, -3.9744, -5.1713, -4.3894, 1.391, -2.4885, -4.1076, -3.8565, -1.6768, 1.3241, 2.8087, 3.8092, 4.3728, 3.2455, -4.8218, -10.0894, + -0.2633, -1.4544, -2.4182, -3.0882, -3.5531, -4.3925, -6.6002, -8.5372, -9.6704, -9.8444, -10.3936, -9.9956, -8.9278, -7.5639, -5.9124, -1.9933, 2.8919, 6.3172, 5.944, 4.7295, 5.0606, 5.2459, 8.2338, 8.7234, 10.0863, 10.2509, 9.9392, 9.0613, 8.1243, 1.1238, 0.9922, 1.1101, 1.8146, 2.6706, 2.2247, 1.2363, 1.1432, -0.1842, -0.9655, -11.166, 5.3441, + 6.9294, 5.0117, 2.6132, 2.2629, 4.5422, 9.5764, 14.7837, 15.8748, 11.9468, 7.4679, 4.5656, 4.3597, 5.8184, 8.6426, 5.8541, -0.7924, -5.2311, -8.036, -9.7347, -8.9, -8.2834, -6.3029, -5.072, -7.3093, -8.1284, -8.3417, -7.7152, -10.4763, -15.926, 4.7158, 2.3141, 1.3121, 1.3526, 1.5962, -0.3417, -1.386, -1.6767, -1.776, -1.6516, -4.4588, -23.6471, + 20.5611, 21.499, 21.6805, 21.4105, 19.9564, 16.4129, 11.009, 4.5495, -0.7043, -3.4671, -4.6121, -5.3523, -6.5924, -7.7881, -8.2287, -7.0226, -4.0117, -0.4161, 1.788, 1.3595, -1.3403, -3.8721, -3.965, -4.9622, -8.7031, -14.8711, -18.9891, -20.1269, -15.2011, 9.5765, 9.609, 6.3797, 4.6167, -0.3327, -3.7082, -4.7974, -5.1837, -5.3397, -4.8761, -5.9441, -20.3305, + 28.9011, 29.1365, 27.4009, 24.4914, 20.2583, 14.7607, 8.7681, 4.0956, 2.2405, 2.3157, 3.7552, 5.6036, 6.0319, 3.0401, -2.3373, -6.5825, -9.1181, -11.519, -13.0607, -13.4398, -13.0287, -11.6613, -11.3947, -12.1649, -13.2592, -14.7276, -15.9052, -16.4327, -16.1678, 0.805, 0.5113, 0.4244, -0.0076, -0.2346, -0.4785, -0.2332, -0.0629, -0.0095, 0.3865, -1.101, -17.2993, + 14.0295, 13.9502, 13.6228, 13.9615, 14.5159, 15.7344, 16.5458, 16.6583, 15.876, 14.9767, 14.5095, 14.6169, 14.1664, 10.4532, 3.0906, -3.2947, -6.9042, -10.1425, -12.3464, -13.3132, -12.9262, -11.8067, -11.4974, -15.4253, -20.2544, -22.9691, -22.5572, -21.639, -21.6312, 2.018, 1.7654, 2.894, 1.2851, 1.2694, -0.7044, -1.7554, -1.1719, -1.4637, -0.7534, -3.3831, -24.9877, + 14.3136, 12.8038, 10.76, 9.9164, 8.0164, 4.8641, 0.3656, -1.398, -2.3438, -1.8387, -0.9641, -0.4343, -1.8428, -3.9974, -5.5735, -6.9534, -5.2614, -1.8837, -0.6653, -2.2186, -4.1385, -7.9205, -4.8743, -0.0041, -1.6958, -8.8891, -5.9515, 2.5199, 5.289, -0.4214, 3.3144, 7.7656, 5.2578, 2.3868, 4.6757, -4.9484, 1.0462, -11.2993, 2.2105, -9.9881, -1.011, + 15.2498, 16.8589, 17.4454, 17.3595, 15.7318, 12.0402, 6.8196, 1.9584, -1.895, -4.1206, -5.7554, -6.5663, -7.4096, -8.0543, -8.0905, -5.7704, -1.8905, 1.4927, 2.8765, 0.693, -2.5985, -3.9517, -2.8026, -3.1264, -6.0718, -8.7896, -10.874, -11.1991, -9.5592, 1.025, 2.5513, 3.7885, 4.2634, 3.9729, 3.4142, 0.3627, -0.0631, -2.7607, -5.0823, -11.4719, -15.3324, + 19.7099, 20.3722, 20.4412, 20.5912, 20.9609, 21.5266, 21.3284, 19.9806, 17.9191, 15.7219, 13.9555, 12.9719, 11.7125, 7.8879, 1.8651, -4.0484, -8.384, -12.3338, -16.2678, -19.1476, -20.5188, -20.7942, -19.7332, -19.5087, -20.0131, -21.1706, -22.0267, -21.828, -21.17, 2.6261, 1.4238, 0.5675, 0.1586, -0.3335, -0.753, -0.695, -0.815, -0.6504, -0.3559, -1.1732, -23.1129, + 1.8825, 1.5975, 0.765, 0.8382, 1.097, 2.3121, 1.7334, 1.3645, 1.6653, 2.5832, 3.6249, 3.8831, 3.7892, 3.6596, 2.8817, 2.2713, 1.6918, 1.3161, 0.6652, 0.0342, -2.3559, -3.5644, -4.4403, -3.4709, -4.1781, -4.9507, -5.6105, -5.7659, -5.319, -4.6785, -6.2814, -4.417, -3.7355, -2.9146, -0.606, 2.7131, 5.1159, 5.7786, 5.8363, 3.1891, -2.7682, + 20.9204, 18.3266, 13.9646, 10.345, 7.1213, 4.7949, 2.3975, 0.3252, -0.8377, -1.2032, -1.3516, -1.2322, -1.3903, -2.0806, -3.2115, -3.8099, -3.7972, -3.8008, -4.4221, -4.5737, -4.8822, -4.8118, -5.0104, -5.0121, -4.8009, -5.1006, -5.4825, -5.7785, -5.6058, 0.0304, 0.0212, -0.8099, -1.099, -0.8995, -1.1798, -0.0605, 0.4825, 1.2857, 1.8683, 0.3606, -7.2005, + 5.2951, 4.6853, 3.2703, 1.4395, -0.0679, -1.5464, -4.0205, -5.271, -6.2684, -7.4709, -7.5305, -6.6769, -5.9752, -5.0052, -2.1987, 1.0365, 4.3659, 5.4876, 4.1372, 2.9011, 2.0765, 1.4275, 2.262, 2.497, 2.1857, 1.8463, 1.4213, 2.718, 2.9788, 2.6542, 4.1837, 4.7936, 4.0109, 4.2119, 2.0348, 0.3166, -0.4254, -3.181, -4.8204, -13.7789, -1.2474, + 10.5896, 10.0518, 9.5208, 11.5878, 14.9277, 14.1122, 8.4894, 2.1708, -2.5335, -5.3221, -7.6712, -9.9945, -11.5742, -11.8957, -12.0296, -10.9304, -8.1129, -3.4826, 2.2855, 6.7275, 2.7163, 2.8417, 3.8437, 1.4929, -1.9462, -3.7791, -2.6804, -3.2326, -6.1727, 14.4024, 9.7441, 3.2594, -2.4965, -1.6315, -2.624, -3.3409, -3.9874, -3.0303, -4.0633, -6.2319, -23.1513, + 12.3877, 13.4337, 14.0526, 15.3719, 16.723, 17.0301, 15.6932, 13.1714, 10.9923, 10.12, 9.9867, 8.1477, 4.6596, 0.522, -3.1428, -6.2242, -8.4106, -10.536, -11.526, -13.2012, -11.1252, -8.8838, -9.7283, -14.6481, -19.0045, -16.0374, -8.1446, -9.6615, -12.0177, -3.6514, -5.1768, -3.3816, -0.8285, 1.8774, 4.0666, 6.6919, 6.7739, 0.8553, -0.399, -6.8277, -19.582, + 7.513, 6.3917, 4.409, 3.2713, 2.4681, 1.4505, -0.7914, -2.2729, -2.7937, -1.4184, 0.5941, 1.7683, 1.7245, 2.1691, 0.8665, 0.4093, 0.8033, 3.3147, 3.5683, -0.9897, -3.9384, -5.0587, -4.1462, -2.0529, -1.2512, -5.3164, -7.9226, -1.6494, -1.1198, 3.1545, 4.178, 6.4164, 4.4137, 1.438, 1.5613, -8.5713, -1.5266, -2.1776, 0.8939, -9.7803, -10.1082, + -0.4172, 3.9814, -2.5335, 4.7982, 6.2404, 9.5386, 1.728, -2.6347, 7.9832, -10.0263, -1.023, 2.1623, 7.0028, 7.7748, 15.0971, 5.6506, 5.2734, 4.3666, -5.3182, -6.5883, -8.8498, 1.1908, 5.523, -1.1525, -3.9009, -23.1871, 0.2212, -1.9086, -20.9924, 7.1776, 8.9477, 9.4213, 0.6845, 6.7206, 6.8189, 0.9603, -10.6166, 0.5146, -13.1811, -17.4476, -7.6137, + 23.378, 25.0892, 26.2191, 26.9457, 24.6201, 18.5566, 11.6556, 4.9788, 0.6249, -3.74, -8.5904, -12.3926, -14.727, -15.9297, -15.762, -14.5514, -11.9079, -8.2268, -0.1798, 5.9532, 4.5772, 3.1484, 0.2938, -5.5237, -12.1896, -14.8172, -14.8798, -12.4827, -10.1404, 3.2764, -1.6281, -2.1589, -1.373, -0.4182, 0.5715, -0.2811, 1.7069, 1.5263, 1.5414, -2.7632, -16.8809, + 26.2968, 26.9773, 27.1574, 27.9417, 26.5696, 21.5857, 14.8761, 8.6361, 4.1683, 0.7533, -1.9295, -2.5208, -0.0812, 2.225, 0.9523, -3.4957, -8.2811, -11.7647, -14.3663, -15.2907, -14.5936, -12.5687, -12.9612, -14.8338, -16.5565, -16.2573, -15.0745, -13.883, -13.6813, 1.4448, -0.0533, -0.092, -0.0314, -0.2973, 0.5069, -0.2172, -0.1011, -0.0306, -0.0946, -1.0343, -16.8789, + 15.2599, 15.8558, 16.5112, 17.1923, 16.9184, 12.7155, 6.7767, 1.6437, -3.4349, -7.8714, -10.5492, -12.4016, -14.2321, -14.946, -15.0099, -14.2604, -12.3944, -9.913, -6.0566, 3.4214, 4.0393, 0.985, 0.9812, 5.2322, 5.1852, 2.0753, 2.8816, 0.5603, -7.1654, 13.9261, 10.8083, 1.8284, -2.6412, -3.5133, -2.9693, -2.93, -3.3031, -3.3193, -3.2617, -4.6248, -21.7463, + 17.6998, 15.3407, 11.6586, 7.2522, 2.903, 1.127, 0.287, 0.3993, 0.1515, 0.9131, 1.2039, 0.835, 0.617, -0.2241, -0.4502, -0.7194, -0.2872, -1.3096, -2.7798, -3.9323, -4.0148, -5.4557, -5.6772, -5.5259, -5.6333, -6.0967, -5.8797, -6.4353, -5.9666, -4.2226, -4.1479, -4.5146, -4.3292, -2.7654, -0.8517, 1.0845, 2.937, 4.9613, 6.0166, 5.832, -4.0046, + 6.7958, 6.618, 6.8562, 7.7048, 9.32, 10.2947, 9.2183, 6.4762, 2.7485, -0.8988, -3.443, -4.619, -6.3031, -8.1363, -8.6511, -7.2066, -4.4822, -1.4434, 2.6598, 5.1827, 2.6866, -0.9832, -2.3089, -1.3324, -0.7075, -3.4975, -7.3602, -8.3172, -6.8713, 15.6013, 14.5952, 12.4864, 10.1694, 6.7654, -5.1118, -14.7309, -11.9476, -9.2847, -6.6284, -11.9143, -21.6331, + 14.4296, 12.7223, 10.1123, 8.5522, 7.7405, 6.5977, 2.6762, -1.5488, -4.129, -3.7931, -3.089, -3.1619, -4.0464, -5.1734, -7.7679, -6.3552, -4.2463, 2.5055, 5.5392, 0.2036, -3.7031, -5.8323, -6.0258, -1.1405, -6.8812, -8.2643, -6.4325, 2.2624, 8.249, -1.6654, -1.1619, -3.519, -1.9517, -1.3057, -0.412, 0.2731, 3.0941, 3.3892, 6.7202, -3.4609, 4.9976, + 16.2171, 16.8083, 17.6167, 19.1924, 18.7528, 14.2594, 8.5818, 3.6957, -0.9158, -4.4517, -7.0958, -9.391, -11.6987, -13.394, -14.5794, -13.1362, -10.8013, -7.497, -2.2178, 3.955, 3.3524, 1.1405, 1.732, 1.1123, -4.7613, -8.88, -8.5945, -6.1985, -2.8033, 13.6191, 7.9112, 3.4818, -0.7153, -0.3308, -2.3878, -3.9144, -3.8872, -3.3753, -4.2532, -6.1481, -19.8313, + 6.8744, 6.6595, 5.9608, 5.627, 4.3932, 3.6619, 1.6033, 0.6207, 0.2849, 0.0399, 0.6193, -0.4371, -1.6617, -0.9777, 1.0971, 4.1974, 5.9086, 2.26, -0.0342, 1.3932, -0.7669, -2.8459, -3.327, -4.4869, -4.5589, -4.9693, -7.563, -7.8037, -11.7691, 6.8143, 4.0009, -0.8944, -7.1111, -6.4611, -4.2217, -1.7229, 0.436, 2.1972, 3.2561, 3.7068, -18.5017, + 18.3619, 17.7217, 16.1766, 13.4866, 10.6915, 10.2793, 11.8384, 14.1579, 15.8226, 15.6994, 14.1178, 12.1825, 10.7237, 10.1085, 8.7558, 5.2488, -0.0978, -5.2425, -10.2876, -14.5133, -15.8759, -16.5173, -16.7647, -16.0517, -18.5506, -21.537, -23.2401, -23.8593, -22.8353, 1.5487, 0.0279, -0.5628, -0.2643, 0.4887, -0.1023, -0.4874, 0.2721, 0.8224, -0.165, -1.5779, -24.7124, + 31.7198, 31.7692, 29.2043, 25.0452, 19.3123, 12.8393, 5.9234, 0.3241, -2.4789, -4.4056, -7.0192, -8.8068, -10.3571, -11.5877, -12.2897, -12.495, -12.4338, -12.1031, -11.1686, -9.2498, -5.8575, -2.3369, -1.375, -2.0352, -2.1517, -3.404, -5.9186, -8.2233, -10.44, -0.0554, -0.5312, 0.1527, 0.4184, 0.6585, 0.9224, 0.6649, 0.9519, 0.5466, -0.5067, -3.222, -11.4604, + 20.9886, 21.1123, 20.4027, 20.0167, 19.1884, 16.5783, 12.5867, 8.3317, 4.5773, 1.2778, -1.2341, -2.6474, -2.9142, -1.9783, -0.0434, 0.4668, -1.7813, -4.6738, -7.2502, -9.3057, -10.6229, -10.4876, -10.2177, -11.841, -13.179, -14.6712, -15.1393, -14.287, -13.2531, -3.396, -1.5619, 2.3074, 5.7136, 6.3342, 5.5398, 2.4437, 0.2877, -1.8718, -4.5073, -11.2895, -13.3591, + 19.3924, 20.6124, 21.6255, 22.8929, 23.6118, 22.1117, 17.5653, 12.1779, 8.8663, 7.6147, 7.1982, 7.2343, 9.0939, 9.9573, 8.6027, 6.9323, 4.6278, -0.1742, -9.4767, -17.6803, -21.359, -22.4801, -22.5914, -22.5224, -22.4181, -22.3005, -22.8483, -23.1612, -23.1052, 0.6133, 0.2252, -0.4348, -0.4131, -0.5289, -0.397, -0.218, 0.1438, 0.5713, 0.4924, -0.0541, -22.3321, + -5.4361, -5.853, -6.336, -5.5397, -4.6575, -4.7263, -5.3668, -5.7909, -7.2619, -6.2038, -4.8838, -2.3553, -0.0793, 2.8083, 6.1069, 7.9082, 8.9577, 8.4116, 6.9427, 5.3831, 4.8464, 3.2166, 2.969, 3.6037, 2.4221, 1.8058, 0.2551, -0.2588, -0.888, 1.1827, 1.8083, 1.5989, 1.9336, 1.4331, 1.415, 1.02, 0.1423, -1.1623, -0.54, -8.8315, -3.2727, + 15.8074, 16.7591, 16.8279, 14.8127, 12.3398, 10.0795, 6.3564, 1.5357, -1.2393, -3.3949, -5.2006, -6.9275, -7.1545, -7.4402, -8.2594, -9.4265, -11.1999, -12.9999, -8.0859, -4.8163, -2.9284, 1.356, 0.0774, -2.3044, -1.8591, 0.1665, -4.2809, -4.0953, 5.4946, 9.8215, 5.0171, 7.0888, 8.4199, 6.4234, 3.6409, 10.6458, 9.4642, -18.581, -21.0542, -20.8865, -9.8207, + 16.5885, 17.1406, 17.0874, 16.5509, 14.5628, 11.8287, 11.686, 12.5074, 11.7212, 10.7081, 10.1468, 9.1212, 8.375, 5.9474, 2.4174, 0.3172, -1.3076, -2.387, -7.4556, -13.1264, -14.3324, -15.1303, -14.9156, -14.1134, -15.0136, -16.5819, -19.31, -21.7927, -21.2401, -7.0652, -6.6847, -6.5388, -5.2451, -2.6953, 0.0429, 2.8899, 5.3552, 6.884, 7.0718, 5.9852, -18.2709, + 5.7159, 5.5464, 5.7456, 6.9034, 7.0731, 7.8586, 8.0236, 8.6981, 9.1036, 9.353, 10.1684, 9.7683, 7.9546, 5.4206, 1.7391, -0.2107, -1.2165, -2.1493, -3.9988, -5.8835, -7.1432, -9.2187, -9.9765, -11.168, -10.8259, -10.9835, -11.5153, -12.5521, -12.2304, 0.1902, 0.2673, 0.6601, -0.0091, -0.1874, -0.6461, -0.5035, -1.0433, 0.8599, 2.7028, -2.2908, -14.5718, + 17.6557, 17.3889, 17.6615, 17.9794, 16.5379, 12.1975, 5.9007, 0.5883, -3.1335, -4.8335, -5.4254, -6.2659, -6.3932, -5.9023, -4.4098, -0.6232, 2.7006, 4.3695, 3.8488, 2.2808, 0.7423, -2.7461, -8.2729, -11.5807, -12.4732, -11.8352, -10.1651, -11.6722, -14.1196, 8.4864, 3.3593, 0.136, -1.6129, -1.5632, -1.3569, -1.625, -0.1613, -1.1646, -1.4389, -3.0589, -22.3338, + -10.394, -11.3059, -10.7072, -9.0929, -7.9625, -7.9528, -9.4227, -10.3318, -10.941, -11.1389, -11.6416, -11.7743, -11.8888, -11.1901, -10.5924, -9.486, -5.0151, 0.7991, 6.1915, 8.4506, 7.592, 12.1623, 17.6583, 20.5566, 20.2652, 20.369, 19.7694, 19.3174, 17.7068, 3.6441, 3.32, 3.1784, 2.3126, 2.6626, 2.7456, 1.7616, 0.1272, -1.6565, -3.6722, -14.4236, 11.3192, + -5.28, -6.7018, -5.8538, -2.9829, -0.9541, -0.9051, -2.3575, -3.5615, -3.7286, -3.675, -3.1606, -4.9611, -3.9368, -5.758, -6.751, -8.289, -7.8523, -5.0164, -1.2817, -1.0886, 3.4595, 6.5066, 6.9768, 10.1455, 9.1411, 11.6105, 10.998, 12.7941, 12.4636, -8.2776, -14.0532, -15.1503, -7.3901, -2.1067, 2.8745, 5.7677, 7.7844, 9.1465, 10.3125, 11.0923, 19.6399, + 29.3262, 30.3667, 30.846, 31.0752, 29.3541, 25.4538, 21.7947, 19.7689, 18.2651, 13.3813, 5.5283, -2.7838, -9.2904, -12.5752, -14.327, -15.2147, -15.6347, -15.958, -16.2781, -16.2588, -15.7969, -15.4712, -15.0026, -15.2417, -15.4496, -14.8024, -15.4856, -15.3255, -14.2641, 0.8519, 0.0729, -0.0994, -0.0081, -0.3526, -0.2653, 0.2798, -0.1248, -0.0021, 0.1016, -0.4538, -15.6262, + 15.4867, 33.4494, 31.067, 16.7893, 6.4957, 16.0571, 16.9999, 3.5875, -1.1144, 4.8625, -0.6863, -3.8211, -1.9744, -8.9072, -8.5418, -10.0978, -9.2052, -7.2961, -7.0614, -7.4703, -6.4488, -9.4828, -7.1526, -6.4892, -6.7913, -8.1872, -9.9015, -12.0879, -12.078, 0.2229, 0.6948, 1.138, 0.0739, -0.1888, -0.1421, 0.1878, 0.2524, -0.6463, 0.3346, -1.9272, -10.914, + 5.6609, 8.4186, 9.2335, 8.5627, 6.3863, 5.2965, 4.7202, 4.121, 2.247, 0.4513, -1.5117, -3.6436, -5.3381, -8.3221, -7.4711, -7.9576, -7.8478, -7.1587, -4.1684, -2.5146, -2.1257, -2.2843, -1.1957, -1.5497, 0.8946, 0.9399, 1.4159, 1.7779, 2.9627, -5.4497, -6.1886, -3.2681, -2.133, -0.0404, 3.3281, 4.7853, 6.276, 5.5714, 2.7564, -5.6374, 7.7525, + 8.2746, 28.7187, 36.6976, 28.2924, 10.6085, 7.9432, 11.522, 11.0743, -0.8646, -3.5525, 2.5564, -2.1952, -6.5887, -4.6155, -7.3323, -7.9392, -7.8581, -8.4524, -7.5176, -8.1708, -7.7429, -8.5235, -8.284, -8.3037, -8.0554, -8.4741, -9.7485, -10.9377, -10.531, 0.614, 0.5808, 0.566, -0.0413, 0.0489, -0.0922, -0.0506, -0.0413, -0.202, -0.1189, -1.2632, -9.9199, + 11.0404, 11.4527, 12.0166, 13.1928, 15.2678, 14.9233, 9.1277, 2.3164, -2.7085, -5.3527, -7.7675, -9.0506, -9.7011, -10.3636, -8.8246, -5.5374, -1.0381, 4.5069, 6.0732, 3.0152, -2.7476, -2.7839, 0.0922, -1.8194, -6.8672, -9.4573, -9.4575, -5.7898, -3.7583, 10.8326, 2.8363, 2.0266, -5.3026, -6.6996, -2.9341, 1.7162, 6.9334, 1.7529, -2.8185, -8.3432, -20.4214, + 12.4387, 12.5027, 11.9274, 11.7982, 12.5741, 13.7391, 15.0701, 16.2946, 15.8718, 14.4312, 13.1234, 12.3489, 12.0782, 10.4253, 5.1065, -2.4414, -7.7163, -11.2866, -14.5564, -17.0603, -18.3751, -18.6502, -16.8442, -12.5688, -10.3598, -13.7062, -17.0023, -16.5492, -12.6137, 10.1763, 4.1712, 1.7946, 2.0076, 0.9052, -2.1595, -3.3835, -3.6172, -3.1645, -2.457, -4.273, -25.1913, + 23.6574, 23.796, 23.2767, 22.058, 20.0235, 16.6036, 11.9504, 7.3306, 3.6864, 1.7264, 0.9711, 0.7044, 1.071, 2.2585, 2.9655, 1.1649, -2.95, -7.6177, -11.4979, -13.5632, -15.3135, -16.4809, -16.207, -14.4023, -12.2974, -13.2762, -14.7359, -14.053, -10.8494, 8.8738, 6.6767, 4.8152, 2.7736, 0.0848, -2.4935, -3.4294, -4.0796, -4.0216, -3.7791, -5.4208, -19.2524, + 24.5799, 26.6882, 26.121, 23.6936, 19.3829, 13.8994, 6.2899, -0.2105, -4.0678, -6.8423, -8.5308, -9.6576, -10.9976, -12.5439, -13.932, -14.634, -14.8621, -14.4895, -13.6415, -12.6341, -10.1213, -4.554, 2.381, 5.5155, 4.5043, 4.6729, 1.554, -3.0055, -4.5582, 9.0263, 7.4732, 2.8612, 0.7241, -2.0536, -2.7733, -3.2059, -2.7189, -1.5532, -1.3601, -6.4198, -12.7575, + 7.6213, 8.4172, 8.9876, 10.4827, 12.2597, 15.2393, 17.4791, 18.0965, 15.0336, 10.0484, 5.7655, 2.6712, 0.2945, -1.4627, -1.971, -1.066, 1.16, 3.098, 1.1433, -4.1444, -8.297, -10.7541, -12.9877, -13.8031, -13.3996, -14.1617, -17.1393, -19.3636, -19.2476, 6.5354, 4.7648, 2.4269, 0.5232, -1.4945, -1.8813, -1.964, -1.7311, -1.653, -1.7955, -3.7308, -24.6643, + 13.5087, 13.5242, 12.7722, 11.8179, 11.1371, 10.7172, 10.5263, 11.1693, 11.9327, 11.741, 11.0557, 10.1108, 9.3715, 8.9355, 7.6249, 5.0772, 0.6107, -4.7883, -10.1816, -14.0801, -16.86, -18.9941, -20.5775, -19.3418, -15.1559, -10.7533, -12.0838, -14.9402, -13.8764, 11.0621, 7.6386, 4.9345, 4.3245, 3.4049, 0.2756, -3.5276, -6.3143, -7.1008, -6.6692, -8.0282, -24.5342, + 5.8438, 4.0764, 2.213, 1.0693, 0.2917, 0.2268, 0.3178, 0.0571, -0.122, -0.3299, -0.5484, -0.7221, -0.5026, -0.6535, -0.827, -0.8342, -1.183, -1.478, -1.3638, -1.1982, -1.1886, -1.0489, -0.664, -0.3974, -0.3609, -0.2538, 0.0154, -0.0545, -0.3807, -6.2176, -6.9549, -7.1781, -6.1296, -3.0722, 0.1331, 2.5736, 4.6982, 6.3374, 7.5607, 8.2495, 4.9755, + 0.8084, -0.3755, -1.4286, -0.3083, 0.4094, 0.3217, -1.3855, -3.3308, -4.9621, -6.0578, -7.2055, -8.3467, -8.9662, -9.8798, -8.8811, -7.5773, -5.2881, -2.3523, -0.7359, -2.064, -3.5321, 3.1588, 7.1883, 8.4965, 6.8253, 10.082, 14.4185, 16.1906, 14.7782, 2.7472, 3.178, 3.1134, 1.3703, 0.638, 0.5841, -0.0788, -0.4106, -0.5281, -1.2372, -9.3762, 9.7708, + 6.0347, 7.9306, 7.3087, 7.586, 8.0389, 6.2727, 1.7726, -1.951, -5.1723, -6.4728, -8.8919, -11.0154, -12.2556, -12.0671, -11.6595, -10.0395, -9.5655, -7.4114, -6.337, -7.0881, -7.2175, -0.9489, 2.422, 5.6816, 9.0238, 12.3465, 14.645, 14.7417, 14.2888, 2.3315, 1.6729, 1.0736, 1.3455, 0.9342, 1.8468, 0.4757, 0.6854, 0.1631, -0.4447, -10.0841, 9.3461, + 46.3168, 40.1857, 32.991, 25.4126, 18.0879, 11.1478, 4.737, -0.5137, -4.1524, -5.9367, -6.6956, -7.3488, -7.7462, -7.7468, -7.367, -6.8462, -6.4988, -7.1096, -8.3038, -9.1796, -8.8798, -8.2279, -8.5672, -9.495, -9.9228, -10.8964, -12.033, -12.6718, -12.7395, 0.0319, 0.3618, 0.0496, -0.3085, -0.3788, -0.2193, -0.1354, 0.1832, 0.4305, 0.6666, -0.6818, -13.371, + 11.6554, 10.6537, 9.3283, 9.0008, 10.6684, 13.7237, 16.302, 16.4883, 14.7382, 14.1678, 15.6614, 15.7353, 11.5669, 3.2738, -3.5965, -7.5962, -9.386, -11.3905, -12.5797, -12.1046, -11.4132, -10.6087, -9.1391, -12.6739, -14.9908, -15.8921, -11.8803, -12.2627, -17.4496, 3.468, 2.416, 1.3256, -0.8144, 0.1187, -0.6282, -0.9031, -0.1242, -0.905, -0.7535, -3.1999, -23.5324, + 12.1675, 12.7254, 13.2135, 14.1985, 15.5137, 16.9806, 16.3379, 13.0366, 8.366, 4.1955, 1.8866, 0.9609, 0.6094, 1.9753, 4.6385, 5.7596, 1.8347, -3.2804, -8.2098, -10.9983, -11.7998, -9.9732, -7.5792, -9.7338, -14.223, -17.7555, -18.8744, -17.4527, -14.5201, 8.5409, 5.7667, 4.956, 3.2564, 0.0271, -3.4128, -3.9385, -3.7737, -3.3325, -3.1328, -4.9568, -24.6241, + 9.112, 9.5643, 6.4962, 4.5254, 2.7757, 3.3307, 2.9999, 2.2174, 0.0229, -1.1179, 0.0764, 1.8616, 1.8079, -0.7101, -2.7389, -1.9102, -1.6224, -0.6549, 0.4717, -1.0044, -2.57, -7.5968, -14.5192, -14.0727, -5.93, 1.9148, 1.1204, 1.1277, 5.0226, -1.2631, 1.5663, 1.1958, 1.8714, 2.7703, 3.0917, 1.6973, 0.4038, -0.8317, -0.0474, -10.4545, 2.316, + 17.413, 18.4485, 19.823, 21.9391, 23.4308, 21.8507, 17.8532, 15.0747, 14.5401, 16.0453, 15.3416, 9.4703, 1.3616, -5.8986, -10.9098, -13.9034, -16.0964, -17.8246, -18.9143, -19.3551, -18.7588, -15.8862, -10.9884, -9.6544, -11.1991, -11.1716, -7.9982, -9.7072, -14.3257, 2.4025, 0.4919, 0.6628, -0.0126, 0.21, -0.6177, -0.6937, -0.1321, -0.2311, -0.0316, -2.0484, -21.0953, + 23.3464, 23.7587, 23.3198, 22.6359, 21.2675, 18.808, 15.3692, 11.2959, 7.5849, 4.5951, 2.3321, 0.6206, 0.1406, 1.2537, 2.7028, 2.3454, -1.0568, -5.4629, -9.1807, -11.1211, -11.633, -11.0576, -12.1808, -16.0691, -19.9208, -21.7935, -21.7452, -20.5008, -19.6545, 1.7728, 0.6055, 0.3687, 0.2898, 0.001, -0.3228, -0.5114, -0.4052, -0.3988, -0.136, -1.2637, -21.53, + -3.6391, -1.828, -2.2141, -2.8117, -2.3529, -0.6648, 0.7132, 2.6314, 3.0327, 3.8765, 4.7159, 6.0331, 6.984, 8.0909, 8.2184, 7.4433, 5.1418, 1.2303, -2.8864, -5.9181, -7.2732, -6.6797, -6.8357, -5.8669, -3.4482, -1.6078, -1.4231, -1.7328, -0.9288, 5.0214, 2.8439, 1.2445, 2.6452, 1.4416, 1.0353, -0.6548, -1.6658, 0.1662, -1.8989, -10.1785, -9.4487, + 28.59, 28.4485, 26.4597, 24.2982, 20.1833, 14.5406, 9.8101, 7.1801, 4.6176, 2.4138, 0.7001, -2.5862, -4.1909, -6.9729, -9.1018, -9.6205, -10.881, -11.6812, -10.5387, -10.434, -10.1742, -2.9512, -0.769, -7.7471, -11.9011, -14.8085, -14.9057, -14.9118, -13.0663, -2.8812, -2.2219, 3.1021, 7.3299, 4.0256, 5.0339, 1.4276, -2.9978, -1.6788, -3.5104, -7.6288, -12.833, + 17.2116, 17.2987, 16.9789, 18.3176, 20.751, 21.2753, 16.7522, 10.5133, 5.1142, 1.071, -1.6324, -4.2824, -5.9266, -7.1525, -5.1415, -0.8661, 3.3622, 1.3492, -3.6601, -7.4519, -9.7242, -8.3497, -5.386, -9.2331, -14.7369, -17.544, -17.6867, -15.904, -15.3169, 3.1075, 0.5173, 0.2992, -0.3406, -0.3, 0.1907, 0.194, 0.147, -0.5, -0.5615, -2.7535, -21.0709, + -3.1988, -4.0916, -5.2881, -5.3666, -5.4604, -5.669, -4.5675, -2.8244, -2.3646, -2.2769, -2.5378, -3.9469, -5.3482, -6.8601, -7.9884, -9.9236, -10.036, -5.5943, -1.7619, 2.5871, 4.2247, 6.6177, 8.6593, 10.3741, 10.0072, 13.2806, 13.3423, 12.7747, 13.2373, -10.5369, -13.7286, -14.4672, -7.5571, -1.4016, 2.5948, 5.6055, 7.446, 9.7262, 10.9589, 11.36, 20.0322, + 6.7783, 7.2343, 7.5331, 7.7761, 7.5074, 7.6964, 8.5725, 10.1613, 11.2545, 11.2432, 10.164, 8.2217, 5.7244, 3.0761, 1.5943, 2.29, 3.8412, 4.4389, 2.8003, -1.0955, -5.1726, -8.1891, -9.0934, -10.2132, -12.0854, -15.5298, -19.4471, -23.4981, -23.5838, 4.8567, 5.6416, 5.2432, 4.8449, 4.3077, 1.0329, -3.6054, -4.753, -5.3304, -4.6545, -7.5837, -26.896, + 8.4973, 9.579, 10.3958, 11.0142, 10.3482, 7.3892, 3.2338, 0.0093, -2.226, -2.9444, -3.5594, -3.3833, -3.1035, -3.2915, -3.1816, -1.7272, -1.5694, -1.309, -0.9698, -1.6827, -1.8826, -2.4935, -2.7299, -3.3411, -3.5987, -3.5349, -4.0664, -5.515, -4.3567, 3.6788, 2.2969, 2.2073, 2.205, 0.4179, -0.5426, -0.2219, -1.2268, -0.5609, -0.3836, -7.8702, -9.1107, + 17.6231, 17.9262, 18.5472, 20.0216, 20.3023, 17.2887, 12.1996, 7.3566, 4.7274, 3.6547, 4.0756, 5.881, 5.504, 1.8555, -4.482, -8.8437, -12.2983, -14.1074, -15.701, -15.7749, -15.0957, -12.7982, -7.9092, -8.3535, -11.5389, -11.4704, -7.3965, -5.1788, -6.015, 7.6735, 4.3849, 2.0779, 0.2256, -0.3031, -1.8488, -2.2661, -1.6177, -1.6092, -1.8719, -4.8451, -18.7476, + 12.8205, 14.2684, 15.5868, 16.7831, 17.8071, 18.5983, 18.8925, 18.18, 16.6295, 15.0296, 14.4114, 15.1384, 15.0538, 11.9286, 6.3973, 0.5192, -5.4829, -11.2613, -15.915, -19.5693, -22.3818, -23.8883, -24.2652, -24.1324, -21.657, -17.7761, -13.9964, -14.512, -13.2068, 12.3627, 9.0753, 5.2809, 2.4178, 1.3885, -1.6252, -3.9036, -5.7988, -6.3917, -5.9659, -6.8402, -21.2728, + 20.5006, 19.7859, 17.9876, 15.5578, 13.4254, 11.0431, 7.8434, 4.6796, 1.3542, -1.1988, -3.1242, -4.8289, -6.6124, -8.2071, -8.4241, -6.4513, -2.471, 0.8654, 0.4899, -3.0973, -6.3396, -7.6626, -7.3643, -5.6214, -3.7466, -5.6286, -8.3519, -11.4399, -12.9632, 6.3044, 6.3906, 3.8753, 0.4819, -1.9504, -2.646, -2.8098, -2.5547, -2.1552, -0.9715, -3.9646, -18.7636, + 4.95, 4.5607, 3.172, 2.1209, 0.349, -1.0626, -3.5132, -4.7851, -6.2971, -7.3286, -6.8625, -6.4027, -6.8983, -8.1437, -7.2159, -6.5081, -6.243, -5.2328, -3.1319, -1.8582, -0.2079, -0.4158, 1.4593, 6.3046, 10.2618, 11.6043, 10.489, 12.3236, 14.512, 7.5422, 7.3893, 6.7744, 4.7439, 3.7082, 1.4685, -2.1681, -2.4628, -6.2634, -5.1931, -15.539, 4.5238, + -7.141, -6.5576, -5.8532, -3.8568, -2.3391, -0.1389, -0.2988, -0.6152, -1.3909, -2.2598, -3.3096, -3.1888, -4.0487, -5.2444, -3.1046, -1.246, -0.3725, 1.6801, 1.7857, 1.4104, 0.4592, 2.1738, 4.1615, 5.0013, 6.4493, 6.5541, 6.132, 7.0552, 8.1032, 1.4568, 1.3024, 1.2345, 0.1461, -0.9716, 0.5343, 1.2784, 1.2357, -0.0481, 1.4818, -7.6504, 7.6553, + 2.7066, 2.4471, 1.1636, -0.0118, -0.1417, -0.8857, -3.1245, -4.8414, -6.9143, -7.764, -7.8038, -8.175, -9.1533, -9.9253, -10.0476, -7.9885, -5.4758, -0.6781, 2.4938, 3.5356, 5.3377, 10.4949, 13.4549, 12.5233, 9.2737, 7.1566, 5.3825, 4.3104, 2.6502, 1.7997, 1.0976, 0.5063, 0.9888, -0.0215, 0.8543, 0.3799, 1.5785, 0.4497, 0.6056, -8.2389, 0.7587, + 15.6038, 13.7257, 10.761, 8.3191, 6.7695, 6.1252, 5.5801, 6.3511, 7.5592, 7.0879, 5.0425, 2.3556, -0.6287, -2.0902, -1.8476, 1.1771, 5.218, 6.2633, 2.3465, -3.3395, -7.6295, -9.3311, -8.2251, -8.2814, -12.4973, -15.3911, -16.5987, -12.5111, -11.9141, 6.9187, 2.666, -0.5025, -2.5042, -3.4261, -3.1605, -1.1635, 1.6816, 1.5678, 1.5285, -3.6059, -21.5346, + 17.6619, 19.2955, 19.3999, 18.1758, 14.7064, 10.338, 5.4051, 0.8448, -2.7673, -5.8069, -8.5749, -10.4074, -11.7428, -13.3545, -14.7279, -15.0946, -14.9717, -14.1635, -12.0366, -9.1704, -5.5296, 1.7983, 8.7621, 10.6721, 9.0083, 6.252, 0.4593, -2.8951, -1.5362, 17.6102, 14.966, 11.8151, 6.0356, -2.6221, -10.0292, -11.4635, -9.0063, -4.3623, -3.1041, -9.8395, -15.6595, + 15.5037, 19.5752, 20.4189, 20.0547, 19.078, 16.8051, 14.6828, 13.1886, 10.1566, 3.7762, -1.134, -2.4739, -2.6979, -3.0349, -2.9212, -1.9641, -2.139, -4.2528, -5.4908, -5.4648, -2.3822, 1.3316, 0.1433, -8.8993, -18.5802, -23.4001, -24.1794, -22.3013, -23.3986, -0.5049, 2.4704, -2.1518, 0.1889, 8.8275, 7.0883, -1.7491, -2.8957, -3.5389, -3.58, -4.1549, -22.0424, + 22.2571, 23.2194, 23.3933, 23.2954, 22.5841, 20.0392, 15.7479, 11.5849, 8.77, 7.9103, 8.1392, 8.4163, 7.8831, 4.6926, -0.6859, -6.5062, -11.4228, -14.857, -17.9311, -19.2012, -19.8667, -20.3831, -19.2002, -15.1301, -11.0896, -11.7977, -14.413, -13.8987, -11.5493, 6.2481, 3.7903, 3.5761, 3.3013, -0.8054, -2.9745, -3.092, -3.5267, -2.491, -0.8625, -3.1636, -20.4183, + 9.8965, 9.6623, 8.329, 7.4658, 5.9247, 5.2895, 3.6738, 3.1009, 1.1973, -0.2394, 0.0744, -0.2488, -1.7673, -2.8794, -4.7879, -4.3784, -4.5885, -3.9967, -2.8591, -1.8656, -2.4063, -3.7709, -4.0771, -4.7175, -3.4331, -2.4372, -2.8219, -1.4458, -1.8932, 10.2458, 7.5639, 2.768, -9.9537, -3.5803, -1.8907, 0.2144, 0.7131, -0.3057, 0.1415, -5.9163, -11.5491, + 15.2412, 13.6648, 11.746, 11.4262, 12.464, 13.7257, 13.2285, 9.7944, 4.8606, 1.4831, -0.3682, -1.5802, -2.2343, -0.4399, 3.1592, 4.1899, -0.2603, -4.7397, -7.1446, -6.9457, -6.2341, -4.9071, -5.6164, -9.2612, -10.3548, -11.0953, -11.7433, -14.5977, -17.4609, 6.0283, 4.4046, 1.6269, -0.9371, -1.3835, -1.4248, -1.2533, -0.8106, -1.1426, -1.5174, -3.5905, -22.8504, + 10.9657, 10.2369, 8.6562, 6.5066, 5.4153, 4.3801, 3.7307, 2.9701, 3.0231, 3.962, 5.6227, 6.8354, 6.8607, 7.7333, 9.3711, 9.9052, 7.3966, 2.1887, -3.3161, -8.0311, -11.2107, -14.2345, -15.6874, -15.1299, -12.3738, -7.8431, -8.18, -10.637, -9.1168, 12.4941, 8.2803, 6.3797, 5.8238, 4.5394, 1.5368, -3.0238, -7.3749, -9.2127, -8.2187, -11.2239, -21.6561, + -1.8184, 2.4357, 5.5586, 6.9268, 6.9316, 6.6729, 5.8397, 5.6316, 4.9978, 3.5427, 2.8029, 2.1519, 1.5431, 0.6158, 0.3469, -0.516, -0.7873, -1.1647, -1.4196, -2.0573, -2.9471, -3.3866, -4.0651, -4.9043, -5.5018, -6.2789, -6.6909, -6.974, -7.4862, 0.3871, 0.0109, -0.4655, -0.7491, -0.9646, -0.7984, -0.5764, -0.2825, 0.8617, 1.8001, 0.7766, -8.6084, + 26.9824, 24.7422, 20.3883, 16.4687, 12.785, 8.7194, 4.1423, 1.1187, 0.4923, 1.295, 1.3167, -1.4325, -5.9855, -8.8959, -10.4619, -7.317, -2.2777, -2.0173, -3.2424, -2.3419, 0.2272, 1.3235, 1.3113, -5.1772, -12.0604, -15.3385, -15.4975, -15.3067, -13.9604, 3.9044, 0.9553, -0.105, -0.6867, -0.6467, -0.6666, -0.6241, -0.2928, -0.2046, -0.3915, -1.2419, -18.1483, + 17.4264, 17.8739, 18.0003, 19.1004, 20.7794, 20.0129, 15.2235, 9.3432, 5.1301, 3.7231, 2.3327, 1.2995, 1.8338, 4.1579, 7.7891, 10.5489, 10.0894, 9.6396, 4.8572, -4.9005, -15.2998, -20.5168, -23.2742, -23.953, -23.553, -22.129, -20.9638, -20.9315, -23.6395, 0.5658, 0.703, -0.1044, -0.6743, -0.6856, -0.735, -0.3973, 0.2942, 0.8749, 0.8195, -0.6608, -23.7592, + 11.0645, 10.901, 10.3455, 9.1551, 8.2401, 8.4773, 10.1716, 11.9195, 13.3973, 14.303, 14.0566, 13.0477, 11.7356, 9.5219, 7.83, 6.8087, 4.1182, -0.0372, -5.3649, -10.0547, -11.7439, -11.6649, -9.2813, -10.9454, -17.6273, -22.3121, -25.1873, -26.7049, -24.1694, 1.5313, -0.0939, -0.8118, -1.4436, 1.2266, 2.0907, 1.6972, 1.5907, -0.0005, -1.5372, -4.2496, -26.64, + 7.2201, 8.5015, 11.5206, 11.9242, 7.928, 3.2514, 0.5668, 0.7646, 1.2768, 1.9716, 3.4275, 3.9772, 2.0908, -0.4764, -2.4307, -1.9307, -0.2561, 1.3364, 0.1271, -2.1785, -4.4197, -5.1263, -6.374, -7.1163, -6.5611, -6.9173, -7.2567, -7.3864, -7.4542, 4.2215, 2.477, 1.4908, 0.9538, 0.278, -2.2207, -1.8537, -1.0888, -0.2235, 0.301, -4.3353, -11.8723, + 9.0358, 8.4259, 6.9459, 5.289, 4.7496, 6.3098, 9.2991, 13.3013, 15.9079, 15.539, 12.4964, 10.644, 9.7104, 9.7273, 8.5423, 3.6988, -2.7453, -8.0067, -11.5004, -13.3609, -14.6771, -13.2598, -11.305, -7.8208, -9.6607, -12.4588, -13.3476, -14.2784, -17.201, 1.6164, -1.2748, -1.3834, -0.4721, 0.9792, 1.3035, 2.0628, 2.1638, 0.6958, -0.7525, -4.9387, -23.7718, + 9.9565, 8.4628, 5.9625, 4.33, 2.9878, 3.3325, 3.411, 2.9855, 3.4264, 4.1032, 5.0697, 5.2769, 4.9009, 3.1001, 1.4373, -0.264, -1.896, -3.0143, -3.5656, -4.3939, -4.4464, -4.68, -5.3044, -6.0923, -5.6495, -6.5418, -7.2604, -8.5353, -7.0993, 1.0313, 1.1537, 1.5169, 0.9291, 0.7698, 0.3306, -0.6705, -0.6783, -0.1746, -0.1455, -4.0627, -9.9902, + 8.8206, 8.3311, 7.6969, 7.4773, 8.8832, 10.4436, 11.5039, 11.592, 9.4044, 5.3729, 2.7965, 1.9244, 0.844, 0.9343, 3.0627, 6.0994, 4.9989, -0.1279, -4.374, -6.7306, -7.8914, -6.9026, -5.4598, -8.4881, -12.8495, -16.5109, -17.0277, -14.2238, -9.5997, 15.6704, 10.6049, 9.844, 7.9028, 1.2354, -5.4491, -8.2374, -7.873, -7.9121, -7.2858, -8.5, -25.1681, + 28.034, 39.0868, 27.1887, 10.6361, 11.9455, 17.4394, 5.1212, 0.4727, 0.9604, -3.2583, -4.9003, -4.7245, -5.4538, -5.8998, -6.9947, -8.1227, -7.9559, -7.4467, -7.2961, -8.3144, -8.2615, -7.493, -6.2339, -6.9302, -6.771, -7.9933, -8.7878, -9.0802, -8.9666, 0.2832, 0.1164, 0.0146, 0.0499, -0.3417, -0.2028, 0.0292, -0.0176, 0.3328, 0.3092, -0.5731, -8.1546, + 13.2856, 13.6736, 13.8385, 14.28, 16.0154, 17.101, 16.3952, 13.2274, 9.9508, 8.9754, 9.0915, 10.0588, 8.791, 4.7013, -0.6836, -5.8039, -9.0189, -11.2256, -12.734, -12.444, -11.1395, -8.86, -7.8172, -12.7618, -18.4517, -20.0185, -18.1437, -12.9371, -7.3458, 15.2491, 9.0836, 7.8889, 2.1805, -3.0815, -5.2994, -5.5285, -5.1346, -5.1469, -4.4882, -5.723, -22.9727, + 13.2791, 36.046, 37.8677, 20.5156, 1.8115, 5.3912, 6.3369, -1.8419, -4.5104, -2.1483, -1.6031, -4.4187, -2.3622, -5.5552, -5.8859, -5.4153, -6.3869, -5.0848, -6.7256, -6.3113, -6.6644, -6.7067, -6.3379, -7.1113, -6.5094, -6.6908, -7.2644, -7.5701, -8.1431, 0.0788, -0.2498, 0.1241, -0.2112, 0.0855, -0.0675, 0.3132, 0.2893, 0.0553, 0.4068, -0.8245, -8.0347, + 7.9344, 6.5125, 3.7957, 3.5965, 6.7588, 12.694, 16.5097, 15.1028, 8.0593, 1.9598, -1.2146, -2.5926, -3.3772, -1.3486, 3.1728, 5.8914, 1.9225, -4.7654, -9.1401, -9.7051, -8.8318, -4.5607, -2.0376, -6.245, -8.0736, -8.0805, -5.2827, -6.9369, -11.718, 7.2258, 3.3652, 1.3586, -1.1046, 0.1664, -0.3445, -1.186, -1.2597, -1.3364, -2.1233, -4.7616, -22.1072, + 21.0378, 20.1437, 17.5203, 14.9435, 12.2481, 9.7639, 5.599, 1.4969, -1.3751, -3.1146, -3.919, -4.7517, -4.5423, -4.8816, -3.7907, -3.156, -2.1567, -0.7505, 0.1795, -0.4587, -2.1088, -3.6718, -5.6034, -7.3929, -8.2906, -9.552, -10.5896, -12.2849, -10.5415, -10.7549, -8.4301, -5.8121, -1.4994, 2.1408, 6.5891, 7.6924, 9.5764, 7.2596, 6.0779, -12.8398, -1.9629, + 10.7156, 9.5865, 7.6225, 6.9649, 7.0204, 6.9685, 5.2279, 3.7124, 2.4551, 1.6576, 1.9988, 3.6736, 4.0688, 1.8389, -1.2786, -2.3368, -0.4395, 1.0954, 3.9267, 3.5576, -1.4334, -6.6048, -9.776, -10.9008, -10.7709, -9.343, -10.2106, -9.759, -9.2378, 2.5943, 0.3766, -1.2329, -1.3523, -0.5254, -0.1927, -0.3463, -0.4383, 0.4702, 1.6846, -1.0379, -12.5558, + 24.058, 24.4379, 23.9745, 23.0444, 20.8465, 16.8979, 11.813, 7.1514, 3.368, 0.5959, -1.6053, -3.718, -5.6992, -7.0693, -6.5902, -3.1806, 1.0957, 2.1175, -1.3667, -5.8106, -7.7326, -6.3061, -6.7167, -11.4328, -17.2877, -19.9514, -19.4929, -18.2702, -17.1703, 1.8172, -0.1844, -0.2118, -0.1481, -0.6409, -0.6132, -0.3659, 0.2614, 0.3884, 0.5934, -0.896, -20.2332, + 19.4765, 20.139, 19.4603, 17.8222, 14.3397, 10.2003, 4.8581, -0.7364, -4.1646, -6.0966, -7.2789, -8.6454, -10.5389, -11.5302, -9.4624, -7.2408, -3.9524, -2.2222, -4.3879, -6.9029, -9.6078, -8.5139, -4.7196, -4.0072, -5.4425, -3.2306, 1.5193, 5.03, 5.8358, 16.6913, 13.78, 8.079, 4.9477, 0.9965, -4.7924, -7.0379, -7.8346, -6.8472, -7.4504, -10.5321, -11.1317, + 18.8135, 17.0829, 14.0965, 11.2672, 7.9285, 3.6326, 1.0246, 1.6274, 5.2441, 9.5096, 12.7855, 11.9891, 9.99, 8.1345, 7.9624, 7.3196, 8.1668, 7.4695, 3.3884, -5.5692, -13.6276, -18.3033, -22.2152, -22.3568, -16.4382, -9.9941, -12.6602, -22.2049, -24.0632, 8.03, 3.8659, 0.487, 0.5409, 0.8745, -0.3373, -1.1358, -2.3213, -3.1408, -3.2458, -3.6172, -26.2789, + -3.1846, -2.1461, -1.3884, -2.1168, -3.4536, -2.2068, -1.9328, -3.2837, -4.0724, -3.4451, -3.7064, -3.449, -5.5867, -7.8526, -8.9224, -10.9618, -10.414, -7.1444, -2.693, 1.689, 4.0196, 6.33, 6.7767, 10.2897, 10.6153, 11.6584, 13.3164, 12.9788, 10.2869, -8.7628, -13.5736, -14.7094, -7.7628, -1.0738, 2.3985, 3.7455, 7.9153, 9.1097, 10.9709, 11.7425, 19.7352, + 7.2036, 10.7988, 12.0301, 12.67, 13.909, 16.0294, 17.1742, 15.7924, 13.0556, 11.3737, 9.8981, 9.758, 10.055, 8.6757, 4.393, 0.9731, -2.5467, -5.8685, -7.3935, -7.9704, -6.2553, -7.4006, -13.7008, -21.8328, -25.5284, -24.9555, -17.274, -13.6475, -19.4157, -0.8046, -1.7221, 0.6106, 5.7975, 8.4089, 4.3333, -1.5262, -3.211, -3.4206, -4.0492, -4.4166, -25.3279, + 15.5255, 15.8281, 15.8649, 15.5717, 15.2512, 14.5946, 13.3549, 11.766, 10.2176, 8.4641, 7.0906, 6.0253, 5.1563, 4.7439, 4.4714, 3.6019, 0.9681, -2.7655, -6.2281, -9.0931, -11.2485, -13.4855, -15.2719, -16.2999, -17.251, -18.5206, -20.9106, -20.3915, -17.03, 7.378, 8.0307, 7.885, 7.6236, 5.1345, 1.2557, -3.7418, -6.8045, -8.6459, -8.6051, -9.5101, -22.9827, + 26.7348, 25.8552, 24.2536, 22.168, 19.2892, 15.067, 11.8818, 10.349, 10.6841, 11.6366, 12.5339, 12.4939, 11.6206, 9.1288, 4.6195, -0.5596, -5.8142, -10.4221, -14.3446, -17.6431, -19.9802, -21.2101, -22.1807, -21.9, -20.1487, -18.1387, -18.1454, -19.6347, -18.1941, 5.5041, 1.739, -0.1498, 0.3482, -0.1172, -0.967, -1.1456, -1.3452, -1.2394, -1.1363, -1.491, -21.2326, + 16.937, 16.4331, 14.8117, 13.584, 11.6269, 10.1575, 7.6822, 5.8162, 3.2955, 0.7078, -0.94, -2.4858, -3.3054, -4.9715, -5.404, -5.2105, -5.0578, -4.9223, -4.7159, -4.8903, -5.6388, -6.4062, -6.4586, -6.1964, -6.2205, -6.7543, -6.8166, -7.3223, -7.3349, -2.386, -1.5474, -0.5275, -0.2007, 0.87, 2.1354, 2.2672, 1.9194, 1.3885, 1.7931, -5.712, -7.0233, + 18.1837, 17.9105, 17.8502, 18.6001, 17.6649, 14.2299, 8.9135, 3.9793, 0.2595, -2.5341, -4.9127, -7.3705, -8.608, -10.0958, -9.6568, -8.5105, -6.6859, -1.7349, 3.3029, 3.1008, 0.1928, -0.6889, -2.6251, -6.034, -10.08, -12.4257, -10.0527, -7.9815, -14.1909, -0.8841, -2.2545, -2.1948, -0.1934, 1.8452, 1.587, 0.0467, 0.886, 1.7017, 2.0046, -2.5444, -18.3771, + 8.7179, 7.6147, 4.8975, 2.3828, 0.6009, 0.0492, 0.7007, 3.0024, 5.6126, 8.3164, 9.7108, 8.5643, 5.5842, 2.4437, 0.8618, 1.4883, 2.2665, 4.0837, 2.0839, -2.0359, -5.2412, -7.0937, -7.9286, -7.0963, -7.3007, -8.8955, -10.5985, -11.5307, -11.2613, 4.1091, 1.9827, 0.6908, -1.0075, -0.1945, -0.4742, -0.465, 0.2047, 0.0728, -0.1453, -4.7735, -16.8928, + 26.5577, 26.0733, 24.6549, 22.5723, 19.6449, 15.1079, 9.6936, 5.0965, 2.0343, 0.4929, -0.51, -0.7852, -0.6639, -1.6495, -4.5761, -7.3418, -9.5136, -10.9969, -12.3139, -12.694, -11.8566, -8.9787, -3.5622, 1.2887, 1.2102, -6.9904, -16.4084, -22.1027, -23.4832, -1.8879, 0.4885, 2.0094, -0.3326, -2.5347, -2.2882, -2.5729, -1.0909, 0.4876, 5.9716, 1.75, -19.5897, + 35.3242, 34.3711, 32.268, 29.4806, 25.8876, 21.5217, 17.0469, 12.7325, 8.2745, 3.717, -0.9461, -5.4939, -9.1998, -10.9322, -11.5916, -11.7605, -11.9938, -12.5431, -13.0923, -13.2971, -13.3947, -13.1377, -12.6123, -12.5003, -13.0962, -13.2815, -13.653, -14.1174, -13.9808, 0.5697, 0.0342, -0.0298, -0.0559, -0.1023, 0.0891, -0.0151, -0.1749, -0.0061, 0.0508, -0.3598, -13.8339, + 10.0703, 9.7251, 9.1433, 8.8944, 8.618, 8.9798, 8.7995, 7.6156, 6.5867, 6.0265, 5.9165, 4.8201, 3.4139, 2.636, 2.763, 3.8113, 3.0665, -0.158, -4.1852, -6.9646, -8.5002, -7.9262, -6.4833, -8.3135, -11.7801, -15.4185, -14.2921, -13.7284, -13.1365, 1.2932, 3.3955, 6.0907, 4.2778, 4.2667, 1.2855, -2.6003, -1.0796, -3.6746, -1.8634, -11.3916, -19.3656, + 23.3051, 24.1993, 23.9215, 23.6862, 23.1858, 21.5213, 18.1183, 13.5369, 8.5586, 3.3648, -2.7305, -8.4197, -12.7332, -14.9501, -15.7545, -16.1289, -14.8115, -12.7042, -10.1815, -6.8723, -4.1455, -3.1746, -3.2618, -1.9552, -2.0348, -7.0796, -14.1032, -17.0807, -15.2758, 6.0612, 4.0067, 0.6827, -0.7321, -1.3626, -1.3544, -1.3699, -1.2448, -1.0738, -0.8706, -2.7423, -19.3798, + 15.2674, 16.9866, 17.1277, 16.7099, 15.7308, 13.2318, 9.297, 4.9391, 0.8073, -2.3215, -4.1763, -5.419, -5.9209, -6.5426, -6.5178, -6.1109, -5.5659, -5.2001, -5.0134, -5.0517, -5.0368, -5.4231, -5.5314, -6.1976, -6.3703, -6.2889, -5.3624, -6.1367, -5.9099, -8.075, -7.3361, -4.4931, -3.1183, -2.2693, -0.445, 2.6648, 5.708, 7.3558, 8.7204, 1.2878, -1.4334, + 16.2521, 17.5727, 18.3716, 19.7318, 20.2218, 17.5895, 11.4595, 3.5824, -4.4163, -9.7646, -11.0944, -11.4598, -11.7153, -11.2087, -10.3436, -9.499, -7.9409, -5.7447, -1.7839, 3.2246, 5.5449, 5.2691, 3.5281, 1.4077, -0.7885, -7.8706, -13.4426, -14.7741, -11.9087, 8.1501, 11.0831, 13.4143, 10.3995, 2.9803, -3.3969, -7.2017, -8.5882, -8.4386, -8.7227, -9.6791, -18.788, + 13.3298, 15.6004, 16.9495, 17.9742, 18.6413, 18.0052, 15.3407, 10.8188, 5.7704, 1.6139, -1.5541, -4.5241, -6.85, -8.6887, -10.0915, -10.3456, -9.1067, -7.2349, -3.6908, -0.4604, -0.7272, -4.5894, -7.5233, -6.1277, -2.5212, -4.8361, -11.8782, -16.9767, -16.3176, 9.514, 11.6129, 9.6344, 6.8283, 1.8214, -5.0008, -6.9907, -7.4822, -6.786, -5.353, -7.7983, -21.5097, + 5.8509, 5.0121, 4.1809, 3.1146, 2.3783, 3.1729, 5.0219, 8.3707, 10.9759, 11.227, 8.3063, 4.3902, 0.4943, -2.3167, -1.645, 1.9935, 5.6473, 4.3761, -0.8021, -4.8923, -7.3829, -8.9257, -7.0734, -4.5608, -5.6127, -9.9029, -12.5815, -12.1258, -6.6911, 19.4769, 13.9666, 10.8452, 9.4207, 4.267, -4.7851, -10.4839, -11.6782, -11.7512, -9.0329, -10.245, -24.1213, + 21.8999, 23.2973, 23.7997, 23.4635, 22.0363, 18.0109, 11.7586, 5.0662, 0.6662, -2.2727, -5.6763, -8.5064, -10.4473, -10.5884, -9.8688, -7.3515, -1.6565, 4.9891, 8.0386, 5.1463, 1.6954, -0.6651, -6.4585, -12.0333, -17.064, -19.1042, -20.056, -19.6043, -18.5148, 1.3036, -0.0062, -0.2979, -0.3133, -0.533, -0.7489, -0.3368, 0.3007, 0.2781, 0.7521, -0.3986, -20.6963, + -10.8987, -3.8431, 0.8023, 3.7818, 5.0658, 6.8699, 5.8536, 5.2186, 3.8311, 2.242, 1.7635, 0.0185, -1.2264, -1.7443, -3.2128, -1.6985, -0.4682, -0.6943, 1.3731, 2.1612, 2.0833, 0.947, -0.8848, -2.3964, -2.7117, -2.4339, -2.8978, -3.2996, -3.6012, 2.7097, 2.9692, 3.1594, 3.0175, 3.5504, 2.5518, -0.2289, -2.095, -2.3143, -3.331, -9.9888, -7.1246, + 24.4808, 26.3759, 27.594, 28.3806, 27.5669, 22.5831, 15.7417, 10.5723, 9.0486, 9.8475, 11.5983, 11.3131, 7.1102, 0.2086, -7.1702, -11.973, -14.3609, -16.1449, -17.3317, -17.8091, -17.4066, -16.0482, -15.0664, -15.2895, -16.4422, -17.0076, -17.0725, -17.2911, -16.0079, 1.3349, -0.0323, -0.0023, -0.0696, -0.4582, -0.2103, -0.2903, -0.1486, -0.0517, 0.5839, -0.6555, -18.4443, + 17.9414, 16.0904, 14.3699, 13.3391, 11.1223, 8.3964, 4.984, 2.4988, 0.7921, 0.1608, -0.231, 0.1816, -0.4705, -2.1166, -2.9171, -3.7835, -3.0302, -2.2559, -1.96, -0.9583, -1.2307, -3.4055, -6.3253, -8.4085, -9.7194, -10.3891, -10.6675, -10.8207, -11.1873, 1.0986, 0.4777, -0.0911, -0.085, -0.2734, 0.014, -0.2098, 0.7129, 0.898, 1.8977, -4.4395, -12.1029, + 12.4723, 14.3737, 15.7331, 17.5345, 18.5865, 17.4102, 13.1675, 8.1222, 3.7914, 0.4168, -2.7856, -5.0694, -6.1658, -6.8186, -6.5122, -3.9192, 0.1995, 5.0703, 4.8669, 1.2909, -0.9029, -1.6452, -6.8885, -13.7427, -17.9265, -18.6395, -13.8409, -11.8927, -16.286, 1.0018, -0.413, 0.2921, 0.9706, 3.0372, 2.3311, -1.1419, -1.468, -0.837, -1.0945, -2.6785, -23.0503, + 16.1352, 15.6199, 13.6322, 10.9321, 8.0808, 7.3912, 8.2284, 10.3433, 11.9724, 11.5988, 9.3631, 5.6849, 2.7468, -0.1363, -1.7113, -0.5317, 2.3026, 3.9081, 0.3916, -4.3635, -7.2068, -8.5384, -8.455, -8.954, -13.2029, -18.1608, -21.6849, -22.2538, -23.132, 1.1059, 0.2225, -0.9789, -1.0458, -0.6792, -0.6786, -0.0893, 1.8547, 2.2928, 0.8548, -2.8591, -24.9911, + 28.0419, 26.8927, 23.9676, 20.3423, 17.0949, 14.1432, 11.117, 8.5048, 5.9497, 3.7523, 1.8284, -1.1682, -4.22, -7.3805, -9.6413, -9.8772, -7.8838, -5.3446, -3.541, -3.9253, -6.0372, -7.8179, -8.639, -8.2594, -11.0251, -14.9594, -17.1292, -17.6345, -17.1513, 2.0146, 1.0165, 0.2708, -0.3124, -0.5924, -0.7003, -0.5256, -0.1176, 0.1111, -0.074, -1.0907, -18.2597, + 30.4937, 29.9533, 27.013, 23.2537, 19.3056, 15.2225, 11.4303, 9.6244, 9.1658, 8.8058, 7.5946, 3.9214, -0.3706, -4.6724, -8.3883, -10.6272, -11.6333, -12.3129, -12.9451, -13.0994, -12.8851, -12.729, -13.3639, -13.9071, -13.6304, -13.0095, -13.0398, -14.2416, -14.9284, 0.6244, 0.4573, 0.2518, -0.4563, -0.2954, -0.1108, -0.0098, 0.1405, 0.0912, 0.3156, -1.0087, -16.5521, + 23.7058, 24.6386, 24.654, 23.9896, 22.7528, 20.4522, 16.9148, 13.0348, 9.6982, 7.0016, 4.5976, 2.122, -0.6149, -3.6746, -5.8863, -5.9902, -4.5281, -3.6266, -4.892, -9.1128, -13.5269, -16.4106, -17.2411, -16.4096, -15.1425, -15.8149, -18.5726, -21.0323, -21.086, 0.97, 2.5909, 2.5737, 1.8731, 0.5116, -0.3889, -0.5545, -1.3812, -1.8817, -1.7258, -2.5873, -20.1722, + 22.205, 22.3808, 20.3781, 16.4796, 12.6684, 8.8562, 3.8726, -0.891, -3.6288, -4.2849, -3.4387, -1.6917, 0.1253, 1.9297, 2.5614, 1.1487, -1.7631, -3.8451, -4.6916, -4.6895, -4.3072, -5.2689, -7.0584, -8.3927, -8.7357, -10.2762, -11.8104, -13.7994, -14.0324, 5.754, 5.5094, 3.1104, 0.8059, 0.0318, -1.6334, -2.2746, -2.0707, -2.1335, -1.8766, -5.2228, -18.1315, + 17.6753, 18.8195, 20.1357, 22.2056, 22.9569, 20.8704, 15.5249, 10.2701, 6.9749, 6.5302, 7.5814, 7.0271, 2.6959, -1.7891, -4.8427, -7.5373, -9.7567, -11.089, -11.6891, -11.88, -12.2196, -11.3183, -11.2853, -12.8185, -14.2184, -14.2772, -13.2856, -15.1315, -16.1298, 1.6839, 0.9589, 0.5363, 0.356, 0.0003, -0.3851, -0.4445, -0.1741, -0.4978, -0.0434, -1.9906, -19.7528, + 16.983, 17.0052, 16.9926, 18.4021, 19.9925, 19.1283, 15.4081, 10.3401, 5.5724, 1.5019, -1.4332, -3.0065, -3.3422, -1.3956, 2.0439, 4.2794, 1.1281, -3.7178, -7.4632, -8.5376, -7.6364, -6.3039, -11.6545, -18.3967, -21.4453, -20.788, -16.5366, -10.0359, -7.0843, 11.0713, 4.6537, 0.5072, -0.3393, -0.6602, 0.5953, -2.0626, -2.4851, -3.0603, -3.5773, -4.6428, -20.8691, + 17.7707, 19.5364, 20.6287, 20.9849, 20.093, 17.6674, 14.5484, 11.0817, 6.902, 2.2545, -2.3356, -5.7371, -8.9898, -12.8304, -15.5822, -17.0433, -18.8124, -19.7104, -19.4116, -18.1842, -15.3531, -8.7155, -0.1993, 4.7176, 5.4518, 4.7364, 1.7967, -2.2008, -3.0647, 15.041, 12.3154, 5.6659, 1.3689, -3.8672, -5.9083, -6.0931, -4.9235, -3.3736, -2.9423, -7.2832, -16.8582, + 9.1549, 8.6933, 7.899, 7.7096, 7.5098, 8.0171, 9.241, 10.6919, 12.1971, 13.4831, 13.6508, 14.1654, 13.7371, 10.9089, 4.6506, -2.3217, -5.6454, -8.0201, -9.9057, -10.0159, -10.6042, -10.3898, -8.1978, -9.743, -12.7378, -17.4512, -17.2848, -13.59, -15.8022, 0.6882, 4.3643, 6.04, 2.5052, 2.9297, 1.4706, -1.9898, -0.8867, -4.2772, -3.045, -7.7994, -22.2645, + -7.8843, -6.8506, -6.0261, -4.4439, -3.8369, -1.9649, 0.3352, 2.3185, 3.0465, 3.3257, 3.554, 4.668, 3.7349, 2.5291, 2.4128, 3.779, 4.5682, 5.6219, 5.4149, 4.7479, 2.2185, -0.8515, -1.7161, -2.4559, -2.0632, -2.2051, -3.7165, -3.1032, -5.1569, 8.135, 6.3528, 5.3232, 1.0605, 1.2735, 0.2509, -2.2104, -2.9957, -3.4893, -2.5108, -11.1898, -12.1806, + 19.3396, 19.941, 20.3727, 21.0809, 21.0327, 19.1352, 15.1028, 10.7594, 7.8609, 7.5499, 8.5005, 9.706, 9.1824, 5.3617, -1.3028, -5.6212, -8.2717, -9.5373, -9.7484, -8.8869, -7.1221, -9.045, -14.6697, -18.5948, -20.2891, -20.4076, -19.813, -20.1946, -21.4218, 1.2915, 0.6782, 0.3569, -0.0683, -0.483, -0.2926, -0.3937, 0.261, 0.1608, 0.1333, -1.644, -22.5256, + 2.7246, 2.5148, 1.4831, 1.8238, 1.6121, 2.4035, 2.7381, 2.9387, 2.1358, 2.0826, 2.3275, 2.3406, 1.9098, 0.1135, -0.7424, -0.9928, -0.9805, -0.2098, 0.5803, 0.3688, 0.0187, -1.6561, -1.4168, -1.4577, -1.3632, -2.614, -4.7663, -7.0691, -6.8479, 2.3665, 2.3301, 1.9626, 1.0968, 1.9491, 1.1267, -0.1355, -0.0256, -1.2772, -1.4379, -7.9556, -8.3907, + 4.529, 1.5249, 0.3659, 0.0056, 0.863, 3.3152, 1.1307, -3.3632, -4.3601, -3.7553, -5.0257, -5.6659, -5.3754, -4.9885, -4.3119, -4.9927, -6.0531, -10.2279, -4.3307, 2.1887, 3.8591, 8.8378, 4.5088, 3.9006, 4.9936, 11.1237, 3.014, -1.5171, 9.8068, 13.2445, 7.3306, 5.9252, 9.0687, 7.7216, 4.0675, 11.9777, 11.311, -23.2633, -23.8643, -23.5193, -4.4759, + 22.151, 23.1727, 23.3097, 23.0639, 21.6223, 18.4164, 13.8969, 8.9695, 4.5053, 1.2957, -1.3036, -3.3247, -5.1402, -7.1172, -8.6948, -7.8753, -4.6461, -1.4461, -1.0227, -4.3094, -8.8842, -11.9962, -11.9234, -9.0257, -6.5369, -10.3321, -16.4292, -19.9706, -20.425, 2.3851, 5.8201, 6.5059, 3.9876, 0.333, -2.1429, -2.898, -3.4857, -3.4682, -2.4183, -4.6186, -20.078, + 11.7456, 12.7989, 13.3162, 13.8312, 14.7779, 15.3799, 14.0233, 10.9089, 7.3194, 4.1768, 1.7992, 0.0512, -0.9458, -0.5202, 1.3786, 3.486, 2.0668, -2.392, -7.4022, -10.759, -12.9261, -14.3064, -12.7761, -8.6791, -8.3015, -10.8632, -13.2729, -14.2798, -9.6355, 15.8594, 13.6933, 9.1741, 8.4349, 3.8782, -4.9728, -8.7226, -9.3197, -9.3643, -8.7767, -9.8839, -22.469, + 22.5139, 20.9546, 19.1373, 16.905, 14.6133, 12.3135, 10.2395, 8.4844, 6.951, 5.0069, 2.4662, -0.438, -3.5684, -7.0424, -9.9771, -11.1936, -9.88, -6.3251, -3.0189, -1.9735, -4.9442, -9.7372, -12.9352, -11.8709, -6.8801, -5.688, -9.6188, -12.4995, -11.9948, 12.0588, 11.2938, 8.1711, 2.396, -3.1587, -5.3733, -5.898, -5.622, -4.8347, -3.2857, -5.7474, -21.5935, + 26.6734, 23.862, 18.347, 12.7193, 8.0473, 4.8602, 2.4155, 1.4627, 1.0558, 0.6193, 0.2671, -0.5986, -1.6798, -2.4678, -2.2065, -2.936, -2.8372, -4.0092, -4.438, -5.3046, -5.8491, -6.4148, -7.4157, -7.9456, -8.4776, -9.0352, -9.1998, -9.5061, -10.0078, 1.63, 1.341, 0.6385, 0.2013, -0.3629, -0.2927, -0.3661, -0.3133, -0.063, 0.4392, -2.852, -12.0787, + 9.0155, 7.9133, 6.4106, 6.4968, 8.6477, 11.6576, 14.8601, 16.0323, 14.2529, 11.8653, 10.9041, 9.9373, 7.2309, 2.3059, -4.1636, -8.0163, -9.7982, -12.7129, -15.1421, -15.4797, -14.8005, -12.834, -10.4715, -5.856, -5.3611, -5.0344, -3.584, -5.3517, -8.924, 11.043, 4.7986, 3.1188, -0.3636, -1.4561, -1.9319, -2.5464, -2.3041, -2.3666, -3.0258, -4.9659, -22.6702, + 9.0489, 10.4274, 10.5425, 10.8125, 12.0032, 13.7184, 13.0711, 9.6959, 5.4837, 1.6077, -1.9964, -4.4495, -7.8808, -10.2103, -11.6407, -11.4255, -9.7241, -7.5467, -3.5478, 1.8951, 3.5718, 1.5955, -0.5403, 0.5662, 0.2415, -4.3154, -9.5295, -11.0052, -10.4693, 11.1024, 7.2333, 6.1462, 4.3929, 0.7029, -2.0309, -3.7294, -5.1402, -4.8388, -4.6151, -9.2233, -21.2734, + 11.5593, 10.342, 8.917, 7.7962, 6.0867, 5.9638, 3.8519, 0.4188, -0.7715, -1.3184, -1.5894, -1.6173, -0.5956, 0.0397, 0.998, 0.672, -0.2103, -4.0838, 0.9485, 2.7667, 1.7723, -0.8231, -4.4419, -7.1686, -8.5571, -4.2281, -12.0695, -12.5608, -2.0974, 7.0256, 2.5786, 2.8194, 7.2989, 5.3493, 3.5256, 11.6032, 11.1767, -16.6084, -17.8153, -16.9535, -14.6567, + 24.2288, 25.1078, 25.3408, 25.2954, 24.689, 22.7229, 18.9908, 14.5853, 10.6023, 7.4918, 5.2132, 4.666, 5.1836, 5.0476, 2.8795, -1.3269, -6.117, -10.7585, -14.7563, -17.5071, -18.3274, -18.4398, -17.9983, -17.57, -18.5575, -19.775, -20.4184, -20.5476, -19.9453, 1.4677, 0.899, 0.5256, 0.5195, -0.193, -0.5086, -0.7678, -0.6113, -0.2499, -0.1187, -0.9625, -20.088, + 1.3606, 0.3524, -0.4981, -3.0376, -5.4591, -5.1861, -5.3381, -7.9395, -4.6276, -1.6746, -2.1073, -1.772, 2.3082, 5.262, 5.3649, 4.6501, 3.6803, -1.4394, 4.494, 9.4882, 7.6591, 6.7428, -0.6196, -2.1749, -1.2855, 2.9511, -4.6673, -9.5251, 3.038, 18.0806, 14.1151, 9.121, 5.7949, 2.4151, -7.5054, 6.895, -0.4827, -16.5385, -16.07, -15.8252, -15.5778, + 21.5243, 22.4067, 22.6543, 21.9383, 19.0581, 14.0232, 8.4188, 2.8494, -1.1924, -2.9917, -3.8222, -4.1823, -4.8633, -4.9565, -2.8338, 0.9516, 2.0941, -1.6445, -6.8552, -9.959, -11.1205, -11.0602, -8.6668, -7.9525, -10.6286, -14.095, -13.9349, -10.3116, -4.8478, 13.9994, 11.9398, 8.001, 4.2542, -0.6981, -4.9047, -6.1557, -6.5212, -6.7797, -5.8456, -7.2894, -17.9998, + 13.8275, 13.6751, 13.2793, 13.1536, 13.5104, 14.6497, 15.6909, 16.1684, 15.2109, 12.8857, 9.6156, 6.423, 4.2876, 3.2525, 3.1015, 2.9273, 0.8232, -3.76, -9.4442, -13.3046, -15.6203, -16.1398, -14.4329, -11.4384, -11.9914, -16.0394, -20.1422, -21.4553, -18.7137, 9.9896, 6.0754, 2.5716, 1.2147, -0.1252, -2.8394, -3.5768, -3.1998, -3.2277, -2.5626, -4.3197, -26.1243, + 1.0072, 1.0349, 0.4547, 2.0233, 3.1568, 3.6248, 2.6871, 2.1595, 0.3986, -1.1817, -0.8372, -0.4964, -1.131, -1.353, -1.2089, 0.5624, 1.6332, 2.6953, 2.6143, 2.1661, 1.0687, -0.5002, -1.863, -2.0422, -1.929, -2.0051, -4.7328, -5.7009, -2.3057, -9.2017, -9.126, -10.3545, -1.5749, 2.8548, 5.5584, 7.3199, 8.4704, 7.1113, 6.4743, -7.532, 8.8174, + 22.3237, 20.1229, 16.3186, 14.9885, 15.806, 14.2422, 9.0206, 4.5767, 2.3692, 1.2439, -0.3609, -2.4418, -4.3713, -8.0945, -10.811, -9.9282, -5.6299, 1.8658, 5.9594, 1.6554, -4.8836, -8.0129, -7.8686, -4.1518, -10.8846, -16.3956, -17.6436, -10.8807, -8.1336, 8.1699, 0.1374, -2.1155, -2.7808, -2.5717, -2.5099, -1.4743, 0.402, 2.8792, 2.7754, -2.9117, -19.9846, + 14.9448, 13.3235, 11.069, 7.797, 3.6467, 1.2905, -0.1418, 0.0865, 0.0848, 0.1249, -0.0042, -0.4006, -0.5457, -2.0216, -2.4005, -2.6631, -2.7574, -3.493, -3.6341, -4.853, -3.8008, -4.5467, -3.9983, -3.1834, -3.3005, -2.257, -2.3485, -2.8054, -3.2121, -8.3072, -10.2892, -11.0655, -7.2025, -2.5835, 1.3158, 3.9103, 6.1494, 8.7822, 9.4411, 9.849, 4.1623, + 17.4109, 16.3957, 12.7323, 9.0568, 6.0296, 4.0628, 1.3809, -1.0636, -2.5917, -3.1282, -2.4806, -2.6332, -2.6331, -3.0197, -3.1246, -3.2078, -3.2369, -3.3087, -3.5259, -3.6952, -3.2777, -3.5126, -3.3483, -4.6082, -4.5229, -3.9702, -2.8815, -2.2298, -1.0686, 10.2492, 8.7238, 6.5287, 4.1319, 1.3909, -1.3457, -3.1912, -4.083, -5.8573, -5.7467, -10.8007, -10.7504, + 3.681, 4.8086, 4.9739, 5.5677, 4.9032, 4.1256, 1.8122, 0.1556, -1.1456, -2.1369, -2.2315, -2.0785, -3.1848, -4.0677, -5.2026, -5.8769, -6.5043, -6.1685, -5.6023, -5.9105, -4.2511, -1.3453, 1.8335, 3.4033, 5.1448, 5.5509, 4.8678, 3.4921, 1.3864, 4.5899, 3.1561, 2.1086, 1.0104, -0.3847, -0.6586, -0.6429, -0.112, -0.4119, -0.3363, -8.3185, -3.2346, + 3.1333, 2.2434, 0.566, -0.1689, 0.6551, 3.137, 6.4778, 9.1712, 8.4572, 6.33, 4.6298, 2.8657, 0.1787, -1.1319, -0.2827, 2.3196, 5.5007, 6.1676, 2.4317, -1.1696, -3.2988, -3.3141, -2.9589, -3.536, -5.2348, -8.6527, -10.1506, -11.6535, -12.7119, 12.8762, 10.2239, 6.7637, 2.0074, -1.9484, -4.8866, -5.3018, -4.5051, -4.3255, -3.6989, -7.2049, -23.9005, + 8.622, 10.8825, 12.2872, 13.3601, 14.228, 15.3604, 14.9416, 12.814, 8.4375, 3.9118, -0.1235, -3.3572, -6.8491, -10.5514, -12.6045, -13.2373, -13.4285, -13.2888, -12.4858, -9.8652, -5.1267, 0.837, 1.7581, 3.1241, 4.135, -0.4102, -5.4532, -8.806, -9.1118, 14.9701, 12.4418, 7.1314, 0.5687, -6.407, -6.8941, -5.5568, -3.3084, -2.3663, -1.6449, -8.9346, -21.6106, + 19.1182, 16.6713, 12.8335, 8.8739, 6.1759, 6.223, 7.5297, 9.2506, 9.4142, 7.8053, 5.9066, 4.3378, 3.9155, 4.5696, 4.9822, 3.2409, -0.8415, -5.8082, -9.1525, -11.0999, -12.9425, -14.8404, -14.6104, -11.5397, -8.3035, -9.3615, -9.7422, -9.9642, -12.6415, 4.2777, 1.5675, 1.0684, 0.6135, 0.0628, -0.5807, -1.1085, -1.0788, -0.8209, -0.6136, -3.3875, -20.5875, + 0.8644, 0.924, 0.5001, 1.9751, 3.9631, 6.3687, 6.1077, 3.622, 0.7094, -1.0962, -1.8495, -2.7933, -4.0125, -4.8808, -2.1854, 1.6422, 4.3506, 5.1936, 3.1952, -0.0683, -2.2673, -2.2756, -2.5661, -3.5305, -3.3037, -2.7368, -2.4517, -1.7145, -1.6839, 4.7659, 4.9768, 3.8161, 1.7084, 0.2338, 0.0457, -0.5947, -0.8458, -1.4961, -2.2835, -10.3266, -8.0604, + 22.8493, 23.0279, 22.4564, 21.783, 19.763, 14.2941, 7.4867, 2.4477, 1.1542, 1.702, 2.145, 2.1381, 2.9526, 3.5821, 3.514, 2.5293, 1.8263, 1.6906, -0.1177, -4.358, -9.4178, -13.6122, -17.0109, -18.1586, -18.2289, -17.0887, -18.0638, -20.2393, -21.0462, 1.905, 0.4924, 0.1429, -0.1603, -0.2972, -0.2106, -0.5323, -0.0051, -0.0488, 0.0713, -1.3573, -21.7449, + -5.0691, 5.7916, 20.3977, 33.7608, 20.5478, 6.3862, -0.6167, 2.4285, 7.7738, 0.648, -5.4985, -5.1477, -2.1058, -9.1202, -9.7561, -5.6897, -8.4994, -6.6489, -4.049, -6.39, -1.1222, -4.7105, -1.2435, -3.1404, -0.467, -1.2691, -3.2353, -6.3597, -7.5957, 2.6335, 2.9453, 2.3526, 1.7483, 0.5793, -0.6841, -0.692, -0.588, -1.6805, -2.0348, -4.5797, -8.0873, + 27.8982, 26.1875, 22.3314, 17.8436, 13.657, 9.3782, 4.5001, 1.0587, -0.1319, 0.5334, 2.2176, 3.9007, 4.3904, 2.8784, -0.5056, -2.7187, -4.2442, -4.9618, -6.1501, -6.656, -6.3475, -6.6372, -7.4694, -9.822, -14.653, -16.2989, -16.6133, -16.9745, -16.5912, 1.5751, 0.2732, 0.392, -0.1605, -0.6644, -0.5397, -0.03, -0.1057, -0.0387, 0.4893, -1.1907, -17.7674, + 4.0687, 5.1941, 6.0984, 7.7169, 8.4142, 8.8229, 7.325, 5.7734, 4.1436, 2.4793, 2.4633, 2.0981, 1.079, 0.0726, -0.0934, -1.1969, -2.7251, -3.5007, -3.7768, -4.1983, -4.436, -4.9365, -5.3239, -6.0842, -6.5913, -6.0399, -5.6196, -5.4516, -5.7753, 2.3864, 4.1318, 4.1698, 4.0758, 2.9462, 1.5278, 0.0907, -0.4889, -3.3101, -2.5223, -13.0073, -9.7421, + -2.5217, 6.6906, 18.938, 32.5385, 26.0727, 10.4378, 1.8923, 3.892, 11.1274, 10.8157, 0.2901, -2.1358, 1.8304, 0.111, -6.1198, -3.9839, -1.5639, -5.813, -5.0685, -6.2978, -9.356, -8.6952, -9.9906, -9.6668, -9.281, -8.9004, -9.6041, -12.9599, -12.678, 1.0846, 1.273, 0.8512, 0.3292, 0.2685, 0.1416, -0.4299, -0.2512, -0.6945, -0.7869, -1.7857, -11.2964, + 9.0608, 8.3549, 5.9106, 3.0223, 1.5989, 1.4872, 0.5967, -0.7899, -2.0584, -2.6475, -1.994, -0.9341, -0.2649, 0.8782, 0.819, 0.7941, 0.2218, -0.275, -0.3771, -0.9402, -2.1665, -2.7001, -2.978, -2.6056, -1.981, -2.2466, -2.1946, -2.6591, -2.9316, 2.9882, 2.9231, 2.3934, 1.2468, 1.7808, 1.5958, 0.9538, 0.0307, -1.6679, -1.9384, -10.3063, -6.9292, + 25.3209, 26.4747, 25.0162, 21.0118, 15.7497, 9.7187, 3.2049, -2.7534, -7.5484, -11.3498, -13.8939, -15.3292, -16.7275, -17.7766, -18.3047, -18.0188, -16.5419, -14.814, -11.1748, -6.2506, 1.1228, 5.4465, 3.3274, 4.0262, 6.8686, 6.7842, 4.545, 4.7788, 7.0872, 14.4073, 8.6959, 4.9137, 0.7333, -0.0689, -3.2729, -3.9427, -4.6901, -3.7843, -4.7606, -8.2309, -11.1556, + 39.324, 35.158, 30.1649, 24.8807, 19.4559, 14.1503, 9.3376, 5.7395, 2.9171, 0.8743, -0.16, -1.561, -3.3663, -5.479, -7.0899, -8.1039, -8.6121, -9.3362, -10.6742, -11.7063, -11.8889, -11.631, -11.7325, -11.7388, -11.4894, -12.8703, -14.4784, -15.0647, -15.0195, 0.4215, 0.7196, 0.4543, 0.0332, -0.2347, -0.2869, -0.3136, -0.1185, -0.0711, 0.1485, -0.7523, -15.3163, + 4.1198, 2.4046, -0.9207, -3.0537, -4.9411, -4.5132, -4.0855, -3.8951, -3.8661, -1.0021, 0.5493, 0.6922, -0.1138, -0.3066, 0.1108, -0.0251, 0.8424, 2.6646, 9.217, 6.3754, 2.4274, 3.211, 3.9376, 2.5394, 1.3314, 0.0248, -3.5589, -5.2404, -4.9255, -3.5255, -3.1009, -3.7604, -3.47, -2.8733, -1.9992, 0.5113, 3.0512, 5.1249, 4.8231, 5.219, -1.6532, + 3.662, 2.9859, 3.004, 3.0506, 2.2625, 2.4007, 2.1773, 2.2676, 1.7231, 1.4288, 1.216, 0.5069, -0.1552, -0.1104, -0.1481, -0.3494, -0.2743, -0.5949, -0.9982, -1.2915, -1.7757, -1.8432, -2.05, -2.8592, -2.5411, -2.0302, -1.9641, -2.8754, -4.8244, 7.6823, 3.2328, -2.8255, -7.4261, -7.6683, -4.0922, -1.2719, 1.1834, 2.9852, 4.1242, 4.0762, -14.2392, + 12.2682, 12.4958, 10.637, 8.6802, 6.1895, 3.3521, 0.012, -3.1196, -5.8915, -7.9346, -8.4726, -9.2365, -10.2529, -11.6156, -12.3872, -11.4245, -9.0191, -6.8545, -3.2918, -0.0972, 1.404, 0.7813, 2.7012, 7.4433, 10.4513, 8.1526, 4.822, 3.6293, 6.5779, 3.5887, 2.5442, 4.8598, 3.9894, 2.1825, 1.899, -1.1549, -1.3419, -2.5535, -1.8075, -12.206, 0.8433, + 15.4243, 14.3712, 10.5979, 6.0053, 3.6236, 3.166, 2.6457, 3.0378, 3.3307, 2.9774, 1.6056, 0.6289, -1.2252, -2.5293, -2.5259, -3.3644, -3.2999, -2.9968, -4.1243, -3.1379, -4.5943, -5.1946, -6.5332, -5.4258, -4.3474, -2.458, -3.2897, -3.9496, -8.4184, 12.5953, 13.0978, 8.0807, 2.08, -3.4741, -5.6039, -6.0827, -5.2556, -5.1645, -4.3359, -5.937, -19.1939, + 12.6031, 11.514, 9.5918, 8.9721, 11.2278, 16.3861, 18.3055, 15.2493, 9.3533, 5.1262, 3.409, 2.8449, 4.219, 7.3448, 7.1824, 2.1285, -4.7265, -9.0679, -11.7653, -12.9187, -12.377, -9.886, -9.0188, -10.4117, -12.4113, -14.1603, -11.834, -11.7956, -15.0847, 1.6333, -0.1749, -0.124, -0.2004, 0.4426, 1.4656, 0.2738, 0.7777, -0.0047, -0.2122, -3.8769, -21.6008, + 15.7554, 16.8394, 17.1615, 17.2884, 17.403, 17.2657, 15.8921, 13.5652, 10.3715, 6.8406, 3.5351, 0.5517, -2.1632, -4.146, -4.2553, -2.4789, 0.2986, 0.953, -2.3858, -7.5703, -11.2229, -12.115, -10.5591, -8.6344, -11.4398, -17.0807, -20.6444, -20.9882, -18.0373, 8.3336, 5.5551, 2.471, 1.8701, 0.0297, -2.8652, -3.472, -2.9808, -2.8086, -2.1702, -3.9628, -24.3752, + 27.9412, 27.2421, 22.9503, 16.5254, 9.6885, 4.5967, 0.6997, -3.4665, -6.6867, -7.8148, -9.1495, -10.061, -11.4055, -11.7392, -11.8813, -11.3038, -9.8795, -7.5418, -2.587, 4.6153, 3.8429, 0.5688, -2.8955, -0.2237, 1.9886, 1.7001, 1.8074, -3.1272, -14.4038, -3.8881, -2.8329, -1.6443, 1.8671, 3.1413, 1.8729, 0.1398, 2.8367, 0.3757, 1.7313, -3.5996, -13.385, + 9.1831, 9.4128, 8.6344, 9.5797, 10.1063, 10.3011, 8.2263, 4.5395, 1.0974, -1.7556, -3.6105, -4.8265, -5.4684, -5.8802, -4.5931, -3.1888, -0.4075, 0.3805, -0.9063, -3.405, -4.9101, -5.9677, -5.8009, -5.0301, -5.4306, -6.4969, -3.081, -2.1162, 1.4143, -5.1355, -2.3496, -0.042, 3.9648, 4.8248, 5.4912, 2.045, -0.1732, 0.0828, 0.7502, -9.4585, 1.8224, + 4.4588, 4.2389, 3.3197, 3.133, 4.0702, 5.7759, 7.7099, 9.0876, 11.1245, 12.651, 12.5527, 11.9764, 10.9501, 11.0837, 11.4805, 9.3639, 4.7521, -0.5944, -4.4402, -7.1309, -8.3207, -8.3043, -9.481, -12.7554, -15.5784, -17.8883, -18.8492, -17.9501, -16.4359, 5.8124, 3.4155, 3.383, 3.3147, 1.6832, -0.537, -2.7626, -3.1367, -2.1515, -2.797, -6.2238, -24.3008, + 11.3859, 11.294, 10.4575, 10.5198, 11.2222, 12.7124, 13.5178, 13.4129, 10.5164, 5.9792, 2.3897, -0.1138, -1.9321, -3.1972, -3.142, -0.7773, 2.4075, 3.1154, -1.3266, -7.1228, -10.5939, -11.1307, -9.876, -7.3492, -6.6029, -10.8829, -13.8968, -15.3987, -15.5878, 8.9895, 6.7302, 4.3952, 0.2012, -4.6771, -5.1924, -3.7684, -1.4949, -0.4984, -0.067, -4.6178, -24.6307, + 18.9158, 19.7886, 19.7526, 19.1358, 18.1177, 16.4664, 14.0122, 10.8818, 7.5481, 4.5462, 1.5367, -0.9445, -2.7129, -3.9653, -5.5016, -7.5102, -9.0864, -9.0742, -9.0767, -10.2313, -9.4105, -5.3027, -1.9268, -1.391, -3.5726, -10.4635, -17.0711, -22.1873, -21.273, 5.4315, 7.4977, 3.9877, 0.2418, -1.1556, -2.9339, -2.8218, -3.2557, -2.2125, -0.425, -4.3542, -22.8328, + 28.1526, 28.1117, 24.7174, 18.3759, 10.6219, 2.4804, -4.1378, -7.4788, -9.3437, -10.849, -12.5556, -14.1384, -15.1322, -15.0182, -14.614, -14.5304, -14.2862, -13.9234, -11.7259, -8.2717, -1.7653, 6.2167, 7.1311, 7.8239, 8.7319, 8.2789, 7.6074, 7.1853, 2.3358, 3.7971, -0.5557, -1.9296, -2.2395, -1.0081, 1.6256, 1.1217, 0.2632, 1.4311, 1.1466, -3.6525, -7.2238, + -1.9896, -1.5846, -1.1882, -1.5851, -4.5749, -6.7021, -4.694, -3.5898, -2.8275, -4.0926, -5.1006, -4.1183, -4.9559, -5.2145, -6.9309, -7.9964, -7.8043, -5.1453, -1.8211, -0.6339, 3.5622, 6.5139, 7.8184, 9.0948, 11.5264, 11.4601, 10.4022, 10.4535, 11.7185, -9.6611, -13.7925, -13.7882, -6.6479, -2.4133, 2.1029, 4.5429, 8.2581, 9.4338, 9.8315, 12.1338, 18.9608, + 29.0162, 27.1449, 23.5731, 20.2452, 17.511, 14.7918, 12.0251, 9.1599, 6.0664, 3.8158, 0.8485, -1.4407, -3.2916, -4.0983, -4.397, -4.3435, -5.263, -7.1322, -9.5766, -10.6471, -11.1044, -11.3079, -11.3508, -11.6324, -11.9889, -12.9298, -13.9392, -14.6929, -15.0614, 0.4975, 0.3394, -0.0827, -0.4799, -0.4676, -0.3009, 0.0384, 0.1607, 0.4964, 0.5891, -0.7905, -17.1701, + 8.4713, 7.5563, 6.3767, 6.1947, 6.0689, 6.3779, 4.9213, 3.5036, 2.5255, 3.0901, 4.1254, 6.3043, 8.3238, 9.4464, 9.317, 6.566, 2.2721, -0.8163, -4.484, -7.0774, -8.1734, -9.5687, -10.5231, -10.5767, -10.2078, -10.4331, -9.7161, -9.9741, -9.8905, 3.2535, 1.2694, 0.1807, -0.6651, -1.0284, -0.5802, 0.6037, 0.3968, 0.3279, 1.2972, -5.0555, -13.8489, + 8.3726, 8.7329, 8.5586, 8.5134, 8.7002, 9.8765, 11.6676, 13.2674, 13.5452, 12.0942, 10.0691, 7.6401, 4.866, 2.868, 2.7547, 3.9563, 4.9074, 3.0494, -2.0753, -8.4742, -13.384, -15.824, -17.8178, -16.4808, -10.6391, -9.9987, -14.2994, -17.06, -17.3864, 10.6631, 9.4847, 5.5492, 1.305, -3.107, -4.8971, -4.8382, -4.5691, -2.3532, -2.1714, -5.066, -26.2617, + 19.0595, 18.3832, 15.9029, 12.653, 10.0486, 8.156, 6.2927, 4.3924, 2.8935, 2.2985, 1.7559, 0.7258, -0.7293, -3.1142, -3.953, -4.8127, -4.7935, -5.2925, -6.6673, -7.3117, -8.4213, -8.8278, -9.24, -8.0623, -7.4252, -7.1006, -5.9527, -5.3881, -5.4699, 10.5325, 9.0445, 4.9973, 0.1331, -3.2907, -4.1662, -4.1984, -3.1495, -2.7117, -2.1058, -5.085, -17.2009, + 52.2372, 44.3578, 36.5608, 28.9176, 21.5115, 14.4397, 7.8187, 1.8482, -3.252, -7.1355, -9.4888, -11.6207, -13.4063, -14.7098, -15.4667, -15.9341, -16.1369, -16.0366, -15.3538, -13.7588, -10.6277, -7.7814, -6.1144, -5.0819, -4.0409, -3.936, -4.9781, -5.9562, -6.8747, 3.7022, 1.466, 0.4111, 0.137, -0.3542, -0.1182, -0.112, -0.5566, -0.7197, -0.2876, -3.568, -11.6568, + 18.5298, 18.5912, 18.1337, 17.486, 16.8943, 16.3587, 16.0594, 15.4122, 13.4402, 10.4256, 7.3367, 4.652, 2.5497, 1.6836, 2.6521, 4.205, 4.7439, 1.2637, -5.1624, -11.963, -16.836, -19.069, -18.8984, -17.4618, -16.1587, -17.2824, -20.6892, -23.3973, -23.4997, 3.2388, 3.5069, 1.9919, 0.0447, -0.5876, -0.7419, -0.9096, -1.1897, -1.237, -1.2266, -2.8899, -24.3059, + 14.2216, 15.1107, 15.4424, 14.9543, 12.7476, 8.8407, 3.8349, -1.225, -5.2339, -7.6335, -9.5259, -10.5663, -11.348, -10.711, -9.3182, -6.6849, -3.0625, 0.0032, 2.0229, 0.5151, -0.5651, -0.4048, 0.5255, -0.7083, -2.6478, -3.1557, -2.5836, -2.0039, -0.8405, 3.7139, 1.8811, 2.0645, 2.2576, 1.8972, 2.7893, 0.9195, -0.0976, -1.1232, -2.5385, -11.7639, -9.8006, + 27.6767, 26.3073, 23.1657, 18.9402, 14.2694, 9.6933, 4.9155, 1.3429, -1.0736, -2.1647, -2.4791, -3.7245, -5.2366, -7.8495, -9.6757, -10.3534, -9.9166, -8.3142, -6.6376, -3.953, -4.0753, -4.3093, -3.5187, -3.901, -5.2935, -7.7755, -9.0692, -8.273, -8.7168, 5.8445, 3.8687, 2.4179, 0.0649, -0.8031, -1.3677, -1.4763, -1.6757, -1.5716, -1.57, -3.7316, -15.598, + 7.4225, 6.3812, 4.2676, 2.9128, 1.8225, 2.633, 3.2026, 3.4899, 4.3798, 5.0782, 4.0849, 3.8689, 3.6113, 4.5683, 5.8542, 4.5947, 0.2532, -3.2821, -6.4774, -7.465, -7.9861, -7.4196, -6.0622, -5.4357, -5.0398, -5.4225, -4.6902, -3.4197, -5.7249, 10.3884, 8.1074, 7.3911, 3.6782, 0.8704, -2.0339, -3.8319, -4.9728, -4.3725, -5.2689, -9.9555, -15.7366, + 17.5213, 20.443, 21.919, 22.2701, 21.3171, 18.9687, 14.6306, 9.0767, 3.5198, -0.8778, -4.3458, -6.9865, -9.548, -11.142, -12.3506, -13.4175, -13.6194, -14.0717, -13.7947, -12.3999, -9.1656, -3.9176, -0.2193, -1.5457, -4.1719, -2.7467, -2.4932, -5.3995, -7.4528, 7.1434, 7.0238, 7.2627, 6.798, 5.2527, 1.0139, -3.4114, -6.523, -7.8521, -6.8412, -9.8668, -15.3691, + 23.8876, 22.5517, 20.2028, 18.0102, 15.3733, 12.6542, 9.101, 5.3097, 1.3988, -1.1554, -2.5833, -3.9593, -5.0937, -4.9268, -4.3385, -4.0356, -4.4731, -5.2411, -5.8573, -6.0798, -6.4837, -6.6593, -7.293, -7.7787, -8.422, -9.5983, -10.7066, -11.6689, -12.1349, 1.8395, 1.5059, 0.7809, 0.7822, 0.3229, 0.0573, -0.1778, 0.0288, -0.5032, -0.4347, -4.2018, -15.0448, + 13.9062, 13.1904, 12.429, 13.6194, 15.2333, 15.2034, 12.0474, 7.3708, 3.009, -0.0473, -1.0773, -1.4032, 0.0264, 2.8347, 3.5334, 0.2574, -4.8606, -8.499, -10.3461, -10.2062, -9.1724, -6.5298, -5.6943, -9.5272, -11.1766, -10.7021, -7.7752, -7.2838, -8.3598, 9.0389, 8.3462, 5.7086, 0.2994, -0.2224, -1.6621, -3.2697, -3.1981, -3.4783, -4.1342, -7.4282, -20.6505, + -0.1956, 12.8891, 25.959, 29.2372, 11.9659, 3.6545, 1.9759, 11.5615, 8.2666, -2.4823, 2.1238, 10.6975, 3.0083, -5.1305, 2.5407, -3.5456, -5.3431, 1.0377, -4.8653, -4.1095, -8.9872, -10.0069, -10.663, -10.8153, -10.0788, -9.9282, -11.0117, -13.4387, -14.316, 0.9647, 0.5126, 1.4038, 0.7744, 0.0988, -0.4577, -0.1039, -0.1823, -0.4661, -0.3208, -2.2235, -13.2318, + 25.9629, 27.1177, 27.848, 28.135, 27.2179, 24.6308, 20.83, 16.5838, 12.6784, 8.6134, 4.1825, 0.4406, -2.7846, -5.2345, -6.7282, -7.9739, -9.5601, -11.2902, -13.5857, -15.5917, -16.3027, -16.6819, -16.4912, -15.9456, -15.775, -16.835, -17.5886, -18.0613, -17.8109, 1.0702, 0.8294, 0.1689, 0.5813, -0.0091, 0.1284, -0.3058, -0.7039, -0.552, -0.2521, -0.9553, -17.8347, + 28.3817, 26.3242, 22.4988, 18.1016, 13.8114, 9.4292, 5.2503, 1.4133, -1.6541, -2.4802, -2.4725, -3.0842, -3.4601, -3.8401, -3.4525, -2.3946, -2.6693, -1.6244, -0.8581, 0.9642, 0.0547, -3.6789, -8.6927, -12.3146, -14.172, -14.6132, -14.5422, -14.6064, -15.6195, 1.2358, -0.1021, -0.4812, -0.1634, -0.1968, 0.6015, -0.1027, -0.0844, -0.0133, 0.251, -0.9445, -16.6483, + 14.8559, 14.2769, 13.3144, 13.4636, 14.521, 15.1971, 13.3361, 10.1599, 6.7908, 5.5468, 6.0091, 7.5005, 8.7471, 7.3385, 1.8761, -2.5391, -5.4603, -7.6289, -8.7381, -8.1046, -7.0789, -6.1772, -7.8795, -11.4586, -14.0732, -15.6269, -16.7078, -19.9955, -21.4649, 1.8161, 1.8568, 0.796, 0.3224, 0.4841, -0.7227, -0.9581, 0.3734, -0.1277, -0.0325, -3.8078, -24.4035, + 5.4535, 4.296, 0.7585, -1.6071, -2.7931, -2.2472, -2.8178, -3.1626, -2.5628, -1.3912, -0.366, 1.6795, 4.203, 6.4164, 7.0674, 7.5227, 7.0796, 4.9076, 4.3543, 2.9287, -0.1541, -2.4266, -4.0876, -4.9944, -4.2282, -4.2178, -6.484, -7.8159, -5.3111, 9.2246, 8.2902, 7.184, 5.6544, 4.317, 2.1934, 1.5215, -2.4633, -8.8855, -12.3322, -14.7039, -13.9292, + 9.098, 9.2332, 9.0227, 7.89, 7.2001, 9.306, 12.746, 15.4304, 15.0788, 11.5632, 8.2993, 7.2707, 8.2449, 10.9986, 9.5064, 3.6569, -2.3332, -7.1688, -8.9599, -9.8137, -8.1433, -4.6312, -6.5469, -11.9994, -16.1445, -17.53, -16.182, -19.8515, -25.2405, 0.4708, -0.3092, 0.2379, 1.4804, -0.1717, -0.9282, -1.5045, 0.4378, 1.4582, 0.6172, -1.7888, -27.118, + 30.5921, 29.7607, 27.5057, 24.3076, 20.267, 15.1816, 9.3486, 3.1611, -1.4937, -4.0966, -4.8189, -4.992, -5.0548, -3.9493, -2.766, -2.8294, -4.1521, -6.8587, -8.9405, -9.3227, -7.2576, -3.2574, -2.6669, -7.8789, -12.9388, -16.4992, -17.2553, -16.5402, -16.5552, 0.5625, 0.3502, 0.0083, -0.184, -0.6199, -0.4748, -0.2997, -0.1545, 0.4846, 0.8919, -0.5646, -16.4454, + 14.8981, 14.8814, 13.6043, 11.5145, 9.5013, 6.6072, 1.92, -2.184, -4.25, -5.6701, -6.3798, -6.5602, -7.0938, -7.2697, -4.0665, -0.3509, 2.6024, 2.4125, -0.1554, -3.0971, -4.9214, -6.2652, -5.4681, -4.3507, -3.9793, -4.8021, -2.3819, -1.6978, 3.0025, 2.862, 3.2617, 6.8021, 5.2352, 3.3376, 0.5084, -1.9352, -2.2484, -1.4495, -1.6734, -14.7006, -2.2554, + 19.3171, 19.5822, 19.1016, 18.4606, 17.7886, 17.3421, 16.7071, 15.2413, 12.1252, 7.557, 2.4543, -2.6968, -6.6532, -9.4513, -11.1611, -10.7979, -8.4551, -5.851, -3.975, -5.4484, -8.6775, -10.2725, -9.6723, -8.111, -6.9238, -9.5412, -14.0157, -16.8585, -17.1147, 6.4595, 5.2042, 2.6176, 0.4543, -1.5212, -2.1299, -2.1223, -2.0336, -1.9001, -1.436, -3.5925, -21.8904, + 10.0554, 11.4918, 12.0024, 11.9869, 11.4982, 10.7952, 8.7236, 5.9738, 2.4552, -0.5185, -1.8366, -4.1108, -5.5111, -6.6353, -6.8364, -7.097, -6.1121, -5.4311, -4.4856, -3.253, -4.1916, -5.5562, -5.6815, -5.4794, -4.5844, -3.0317, -1.607, -1.6034, -1.4198, 6.0457, 6.4584, 6.3816, 6.2004, 3.9293, 1.7377, -2.4799, -5.0585, -4.1685, -5.2278, -13.8183, -8.6957, + 5.1528, 4.1179, 3.0625, 2.9843, 1.9679, 0.9714, 1.4744, 4.4833, 5.5293, 4.703, 3.5767, 3.8031, 1.7543, -1.0533, -1.2774, 0.957, 5.1278, 5.59, 4.5922, 0.5748, -5.0484, -6.9525, -6.3139, -9.2098, -9.0484, -9.2166, -5.0713, -4.7295, -2.5016, 10.5692, 7.5278, 2.2517, 0.6253, 2.9159, 0.5499, -2.4843, -3.578, -4.6422, -4.8638, -8.8714, -13.879, + 18.7418, 15.9185, 12.8438, 10.204, 7.5183, 6.1018, 4.7206, 3.9908, 3.3693, 2.4047, 1.441, 0.1504, -0.1335, -0.4013, 0.1702, -0.4796, -1.4923, -3.1582, -4.6899, -4.8726, -5.5428, -6.5059, -7.1643, -7.5192, -7.9222, -8.7815, -9.429, -9.6309, -9.8521, -0.4363, -0.6716, -0.6321, -1.0615, -1.3192, -0.9262, 0.103, 0.7901, 1.5962, 2.2939, 0.2637, -10.2983, + 35.3923, 32.3026, 26.5029, 19.6975, 12.6365, 5.9222, 0.137, -3.8927, -5.9336, -6.6867, -6.9777, -6.7865, -6.2733, -4.3479, -3.5674, -3.6341, -3.7323, -5.0584, -6.319, -6.1046, -4.6307, -4.8921, -3.7741, -3.8037, -7.6419, -9.4026, -9.7867, -9.3143, -10.0304, -0.3209, -0.8025, -0.7882, -0.9161, -0.6206, -0.3729, 0.2723, 0.9229, 1.0626, 1.2478, 0.3157, -11.3279, + 15.1154, 17.2376, 18.5113, 18.6287, 17.8606, 16.0374, 12.387, 7.3049, 2.2274, -1.2547, -3.4619, -4.9984, -7.5019, -10.3433, -11.986, -13.4479, -13.9092, -13.7812, -13.8196, -12.9157, -11.1559, -7.187, -2.1572, 1.9368, 1.9384, 1.8602, 1.894, -1.4092, -3.6107, 13.969, 15.4855, 13.978, 10.9462, 5.3217, -5.087, -10.7886, -11.2651, -11.1873, -9.5973, -11.775, -16.726, + 18.2228, 18.4615, 17.4249, 17.1396, 16.6125, 14.4185, 10.8568, 8.6164, 6.3579, 5.237, 3.856, 1.9252, -0.6359, -4.275, -5.1889, -6.7505, -7.9919, -9.0778, -10.1, -9.9142, -8.7383, -6.1658, -3.7111, -6.176, -9.8971, -12.5047, -12.7338, -12.8872, -12.3808, -0.813, 0.6976, 0.3804, 0.6457, 1.5482, 2.4749, 3.0413, 2.8395, -0.4708, -2.7284, -7.6154, -15.6555, + 6.0325, 10.0051, 11.3341, 12.3589, 13.89, 16.1481, 16.3116, 12.7566, 8.9105, 7.2557, 4.4785, 2.2316, 0.9797, -0.6614, 0.5661, 4.8341, 6.5458, 3.6213, -1.1381, -4.3272, -5.4198, -6.5113, -7.7865, -12.3725, -19.933, -25.0176, -17.8042, -15.8364, -21.4525, -3.1483, -3.2143, -0.2635, 8.5907, 13.2637, 6.6922, -2.8514, -3.6166, -4.6591, -4.9686, -5.8249, -25.4194, + 17.3207, 17.7695, 17.5402, 17.0035, 16.5266, 15.9285, 14.7115, 13.0615, 10.7412, 7.7296, 4.597, 1.7062, -1.0815, -3.0472, -3.6756, -2.2649, -0.4084, -0.9339, -5.2361, -10.6763, -14.8835, -17.2271, -17.8907, -15.6384, -10.4668, -8.4525, -11.8808, -15.4044, -15.4675, 8.8476, 9.5703, 6.9625, 3.109, -0.1253, -3.622, -4.8452, -5.4253, -5.054, -3.4938, -5.9236, -22.7477, + 18.232, 19.5978, 19.719, 18.7548, 16.3427, 13.615, 10.6951, 8.6087, 5.9251, 3.1428, 1.8336, 0.1222, -0.3161, -1.8892, -3.4565, -4.4788, -4.1025, -3.7501, -4.9649, -7.4742, -8.6908, -9.9373, -10.883, -11.3028, -11.4257, -11.5192, -12.7474, -14.6156, -15.0348, -8.1772, -8.1988, -6.2878, -4.971, -3.0389, -0.0545, 3.6911, 6.8598, 7.3721, 8.3424, 4.4628, -8.8778, + 13.8589, 12.2371, 9.8247, 7.6249, 6.1891, 5.8925, 4.1202, 1.8072, 0.1905, -0.9244, -0.4689, 0.1547, 0.5703, 1.3955, 2.047, 2.6142, 1.4776, -0.3379, -2.6582, -5.2107, -5.8303, -6.1283, -6.7972, -7.3151, -7.5206, -7.3966, -7.0187, -6.1092, -6.2882, 2.8357, 1.3808, 1.5156, 0.8705, -0.2752, -0.1447, -0.1738, -1.0712, -0.4308, -0.502, -4.005, -11.046, + 25.9341, 27.732, 28.2232, 27.7876, 25.5774, 21.4281, 15.8329, 10.0447, 4.4219, -0.7932, -4.9567, -7.948, -9.7086, -10.7951, -11.8434, -13.0235, -13.3873, -13.9249, -14.4275, -14.4362, -13.1477, -10.3022, -6.8516, -4.3801, -3.0535, -2.9543, -6.5274, -11.658, -12.8631, 5.4748, 4.2973, 2.0928, 0.3859, -0.05, -1.0781, -1.5335, -2.0293, -2.087, -2.0482, -3.4246, -15.9155, + 12.5611, 14.6864, 16.3579, 17.9048, 19.1559, 20.0003, 19.3273, 16.6175, 11.9366, 7.1513, 3.6125, 1.1772, -0.676, -2.6536, -3.6769, -3.9465, -1.4534, 2.8613, 3.1405, -2.9573, -11.3536, -17.9162, -20.1933, -20.5787, -18.1872, -12.946, -11.7495, -17.2172, -20.9852, 3.0886, 4.0379, 3.6614, 1.7858, 1.8672, 1.0455, -1.0249, -2.3716, -3.3037, -4.0002, -4.786, -22.6731, + 6.3873, 6.0538, 5.2554, 4.7605, 3.7352, 4.0478, 3.0878, 1.1603, -0.41, -0.4842, 0.3498, 0.7144, -0.2324, -1.6604, -3.0147, -3.2036, -2.2852, 0.45, 5.1996, 6.1851, 1.9002, -1.2909, -2.8734, -4.709, -4.8637, -4.9906, -6.0915, -6.1561, -7.0214, -0.4395, -0.6291, -0.8046, -1.1373, -1.0367, -1.1976, -0.5358, 0.8614, 1.5251, 2.7259, 0.6681, -8.1549, + 6.4678, 24.1453, 28.3564, 16.3768, 0.9487, 6.1492, 9.9337, 5.7837, 0.7687, 2.7379, 7.4627, 2.6615, 2.1447, -1.7243, -4.9079, -3.6716, -5.126, -1.3976, -1.3562, -1.3187, -5.1578, -9.3517, -9.8801, -10.0344, -8.5754, -9.5176, -12.9621, -14.5277, -14.4277, 2.6144, 2.0177, 2.0939, -0.3296, 0.2968, -0.6507, -0.6394, 0.0217, -1.9957, -0.1306, -3.2985, -14.8655, + 12.551, 12.4285, 11.8955, 12.7578, 16.9371, 21.2938, 20.7903, 16.7803, 12.6688, 11.7788, 11.63, 7.3846, 0.3301, -5.6353, -9.1568, -12.4924, -14.5919, -16.295, -17.9481, -16.1853, -15.7323, -12.4489, -10.0349, -7.7045, -8.7699, -6.9254, -3.1598, -3.0985, -9.0472, 7.8424, 3.8265, 0.9376, -0.6967, -1.1188, -1.5694, -1.9503, -0.6167, -1.4541, -2.2369, -2.9635, -21.8681, + 15.6754, 16.7432, 16.5153, 12.3311, 4.2455, 0.205, -0.6894, 2.1431, 4.3595, 7.572, 9.8733, 9.2508, 5.8913, 2.6955, 1.6669, 2.5024, 2.1823, 0.5005, -4.3623, -8.712, -8.4826, -7.8486, -12.0698, -13.3968, -11.9915, -10.9867, -12.2995, -11.0273, -12.4867, -2.7836, -4.412, -5.1131, -4.1277, -2.4732, -0.972, 1.3438, 3.6062, 4.7125, 5.6821, 4.537, -11.9, + 22.3286, 23.0046, 23.0498, 23.5807, 23.1994, 18.4599, 10.9563, 4.0795, 0.4966, -1.421, -3.5925, -5.4787, -5.7217, -4.6302, -2.1947, 3.6628, 9.53, 10.8217, 9.1886, 2.5031, -8.0477, -14.9331, -18.4387, -19.9305, -20.4501, -20.2597, -19.9758, -19.4479, -20.3392, 1.1842, 0.4014, 0.0219, -0.1675, -0.5484, -0.3769, -0.3371, -0.0928, -0.0308, 0.3091, -0.3631, -21.5338, + 21.9984, 23.9238, 25.3357, 26.4343, 26.0313, 22.5182, 16.6027, 9.8676, 5.2339, 2.4325, -0.1466, -2.8415, -2.8856, -0.9913, 3.1553, 6.9975, 6.7848, 4.8021, -2.7887, -13.1318, -18.6046, -20.0234, -20.0047, -19.9587, -19.6763, -19.9132, -20.3439, -20.4619, -20.3457, 1.2714, 0.3555, 0.0928, -0.1438, -0.1909, -0.1061, -0.2499, -0.3508, -0.1985, -0.175, -0.3048, -19.6659, + -0.2567, -0.2113, -0.8684, 0.4465, 3.3786, 5.2759, 2.6214, -1.2665, -3.2281, -4.9538, -5.9464, -5.0624, -5.8449, -5.2078, -4.5607, -2.446, -0.3193, 2.4345, 5.491, 8.175, 9.787, 9.0613, 6.6768, 1.8115, -0.9513, -2.1611, -3.707, -3.7433, -4.4246, 0.1631, 2.1256, 4.6102, 5.3221, 6.3935, 4.7668, 3.6937, 3.2175, -0.8613, -8.2952, -21.136, -6.1298, + 3.8793, 4.4914, 2.0392, 1.3477, -1.0271, -0.6639, 0.1117, -1.7816, -3.233, -2.324, -1.7798, -3.8111, -6.4867, -7.2086, -6.2062, -8.1286, -2.5, 3.355, 12.4119, 16.8546, 9.9403, 10.7928, 11.849, 6.7929, -4.703, -7.2697, -8.7835, -9.4026, -8.5564, -1.174, -2.4092, -2.9332, -3.4178, -3.5228, -2.2895, -0.328, 1.5973, 4.164, 4.8094, 5.5038, -5.9517, + 55.6246, 47.8318, 40.1222, 32.5666, 25.2478, 18.2625, 11.7233, 5.7654, 0.6757, -2.9249, -4.9251, -6.7338, -8.2843, -9.4091, -10.0166, -10.5275, -11.0842, -11.8508, -12.6565, -13.2845, -13.4392, -13.4505, -13.5945, -14.13, -14.9588, -15.832, -16.5919, -17.0696, -17.0561, -0.1692, -0.1054, -0.1641, -0.3548, -0.4054, -0.2499, -0.1197, 0.3574, 0.6137, 0.729, -0.1316, -16.1029, + 28.348, 28.4457, 26.9174, 24.2222, 20.0737, 14.3497, 7.6659, 1.6711, -2.293, -4.4091, -5.0514, -3.9119, -1.1398, 2.5446, 4.7855, 3.9543, 0.0941, -4.3143, -7.576, -9.0354, -10.4294, -11.217, -12.2003, -12.8513, -13.7072, -15.19, -16.7728, -16.6535, -16.3197, 1.689, 1.2293, 1.498, 1.02, -0.3583, -0.7205, -0.7464, -0.7978, -0.7991, -0.4289, -1.5854, -17.0352, + 7.1738, 5.876, 3.417, 2.3215, 1.3711, 0.544, -1.4461, -3.1488, -4.5999, -4.7859, -4.3101, -4.0022, -3.9658, -3.1268, -2.0884, -1.4297, -0.0002, 0.9577, 1.567, 1.5085, 1.0721, 0.3227, 0.511, 0.7323, 0.8496, 1.7441, 0.7228, 0.7656, 1.447, -8.6193, -7.2247, -5.3667, -3.5827, -1.8357, 0.6166, 4.1585, 4.9638, 7.0248, 8.8447, 1.0209, 8.4769, + -0.7467, 0.3554, 1.8709, 0.8731, -1.4638, -3.343, -6.6672, -9.5951, -10.4012, -10.6421, -11.0116, -11.8429, -12.2455, -11.7931, -7.9381, -3.6179, 4.3015, 10.3005, 10.2729, 5.6096, 4.179, 4.6704, 9.5416, 5.1426, 3.2307, 6.6932, 7.397, 11.6314, 15.2383, 14.9214, 12.3993, 10.3175, 9.4781, 6.529, 0.7143, -6.7843, -12.1011, -12.5497, -11.0634, -11.8611, -4.9295, + 8.9473, 8.9587, 8.3247, 7.7486, 7.2645, 6.8446, 6.7225, 7.4361, 8.0756, 8.3721, 7.8521, 5.8385, 3.2013, -0.0003, -2.2581, -3.0372, -2.3326, -0.4339, 2.2803, 1.7881, -3.0603, -8.5789, -12.0665, -11.7987, -9.2546, -6.5489, -9.3084, -14.6968, -16.2796, 11.5926, 10.477, 8.8581, 8.3385, 5.311, -2.0531, -7.544, -8.5312, -8.7087, -8.2386, -9.5016, -25.9443, + 17.7853, 20.4425, 22.0494, 22.6794, 21.5241, 17.2874, 10.6686, 4.0415, -0.8452, -3.3573, -4.8317, -6.2098, -8.0414, -10.4109, -12.4433, -13.6668, -13.5852, -12.5998, -10.4309, -6.2165, -0.7444, 0.8686, -2.2118, -2.8842, -0.1978, -1.0432, -7.6768, -11.1308, -8.8188, 14.1142, 12.1567, 7.0646, 6.3108, 1.5813, -5.6339, -6.7414, -7.8081, -7.7366, -5.6857, -7.6219, -18.4403, + 10.4095, 10.1666, 9.2271, 8.086, 6.4145, 4.2188, 0.0306, -2.2509, -4.0464, -2.5048, 0.7199, 3.4238, 3.2446, 1.8968, 2.3554, 2.4242, 1.5237, 2.3494, 4.0741, 2.8937, -1.4622, -5.2927, -9.7781, -9.2472, -7.305, -3.6229, -4.1228, -9.1846, -14.6411, 8.1502, 5.2313, 1.058, 1.4879, 3.7251, 2.9439, -0.5626, -1.1335, -5.4441, -3.6896, -11.7665, -16.0896, + 16.3683, 15.7368, 14.0789, 11.8221, 8.6363, 4.8193, 0.7944, -2.5033, -4.2969, -5.1383, -5.1385, -5.8567, -6.7831, -7.2715, -6.194, -4.4484, -2.8402, -2.2612, -2.0718, -1.0756, 0.0928, 1.1543, 1.4991, -0.3, 0.0566, -0.6778, -3.4172, -5.3252, -9.4588, 11.6386, 8.1885, 3.6288, -1.2989, -3.6855, -3.9476, -4.1335, -3.4808, -2.6249, -1.8682, -2.4166, -19.6188, + 9.9289, 9.2679, 7.9267, 8.7379, 10.9513, 13.7239, 14.8623, 12.3233, 7.4753, 3.3088, 0.9949, -1.1257, -2.9647, -3.3198, -1.5514, 1.8208, 1.1498, -4.6271, -7.9003, -10.0749, -11.1748, -10.0605, -6.3035, -5.8941, -7.6734, -10.1071, -9.5489, -6.0056, -4.14, 9.5365, 2.656, 3.6743, 6.2251, 4.9344, -1.5821, -4.9354, -4.9959, -4.249, -3.3389, -7.9251, -19.9895, + 15.7601, 15.5371, 14.5879, 13.6852, 13.7329, 14.2619, 14.5602, 14.105, 11.9855, 9.0424, 5.9338, 2.9248, 1.1175, -0.2175, -0.4564, -0.8056, -2.8269, -5.9252, -9.3719, -12.1962, -12.8615, -12.521, -10.3147, -10.3071, -11.7171, -13.5357, -14.5158, -14.3799, -15.2819, 0.2685, -1.1025, -1.4893, -1.4317, -1.3748, -0.8857, -0.0388, 0.9292, 2.3295, 3.5114, -0.7158, -18.7537, + 10.0771, 10.8307, 10.8465, 11.7532, 13.7152, 14.8042, 13.3142, 9.3177, 4.2443, -0.137, -2.8245, -4.9084, -6.2428, -7.4346, -7.1199, -4.5048, -0.3499, 3.4684, 5.2923, 2.9229, -0.3932, -2.4266, -2.9696, -4.8989, -8.2386, -13.2276, -16.6579, -16.3335, -11.9188, 12.1564, 11.5591, 10.1368, 8.7589, 4.6074, -3.2222, -8.3162, -9.1139, -8.8367, -7.9752, -9.7544, -23.1025, + 11.5053, 11.7027, 11.7371, 13.2093, 15.2251, 15.5948, 12.9282, 8.237, 4.0626, 1.5654, 0.2206, -0.6203, 0.1854, 2.0975, 5.0249, 6.2795, 5.603, 2.918, 1.3161, -0.0224, -2.9425, -5.8601, -7.8659, -9.4742, -11.962, -17.3077, -22.0414, -24.853, -26.4631, 0.6245, 0.843, 0.7564, -0.0344, 0.186, 0.2573, 0.0022, 0.3483, -0.0033, -0.3539, -2.626, -27.0235, + 5.1441, 5.4989, 4.5886, 4.889, 4.4149, 4.7882, 4.1037, 2.1106, -0.5897, -1.6882, -2.0231, -2.3075, -4.0395, -5.998, -7.0714, -7.2239, -6.85, -6.2178, -5.879, -4.2255, -3.0049, -0.9642, 0.5881, 1.855, 5.0224, 5.6412, 5.331, 2.5657, 1.5411, 13.0414, 12.1678, 10.8758, 8.35, 3.9695, -1.2713, -6.6778, -7.5357, -8.1366, -9.815, -14.9679, -9.097, + 5.6158, 4.9839, 2.6123, 0.8571, -0.5963, -0.3233, -0.2214, -0.3194, -0.137, 0.4421, 0.3275, 0.0835, -0.517, -0.8713, -0.8569, -0.8339, -0.8554, -0.5354, -0.0395, -0.0558, -0.9263, -0.8835, -0.8978, -0.6944, -0.6268, -0.8091, -1.0483, -1.4194, -1.4539, -1.4149, -1.4513, -1.7313, -2.1794, -1.7446, -0.9286, 0.2594, 1.3903, 2.1796, 3.3663, 2.2545, -1.2043, + 10.708, 10.7135, 9.5629, 8.5444, 8.8788, 10.1398, 10.5302, 9.9131, 6.6128, 3.5565, 2.0899, 1.1039, 0.3794, 0.6277, -0.198, -1.3526, -2.7157, -4.4999, -6.1998, -7.9255, -8.1415, -9.2812, -8.2556, -8.1488, -8.8083, -9.3952, -7.3216, -6.7527, -4.3647, -4.2821, -3.0286, 0.3702, 1.9504, 4.267, 4.98, 3.4858, 0.8969, -0.2219, 0.7569, -9.1747, -5.7376, + 15.6199, 17.2444, 17.3338, 14.6899, 10.1694, 6.6473, 3.7155, 2.2358, 1.5381, 1.6499, 1.6341, 0.4488, 0.1506, -1.4323, -2.951, -3.5813, -3.4819, -3.2311, -4.3442, -6.2089, -6.4666, -6.7538, -7.4724, -7.2719, -7.5336, -7.1999, -7.6644, -8.4572, -9.0267, -8.4693, -10.5727, -9.758, -6.2924, -2.3994, 1.2587, 4.0421, 6.4837, 8.0877, 9.5585, 8.0612, -1.6481, + 19.7459, 20.2278, 18.163, 15.009, 12.1531, 9.979, 6.226, 3.3367, 0.8576, -0.7079, -0.8905, -2.1529, -4.1404, -5.6658, -7.062, -8.838, -8.6505, -8.0785, -6.8102, -4.7097, -3.3992, -4.6255, -5.7732, -5.7892, -3.5462, -3.1831, -5.7363, -8.6675, -7.2716, 4.1141, 4.3678, 4.3289, 4.1542, 4.0907, 1.7285, -0.9643, -1.7912, -4.9181, -4.5913, -10.5192, -12.1315, + 6.1392, 7.2498, 8.1626, 7.685, 6.4337, 6.4811, 6.2044, 4.4007, 3.1418, 2.4995, 0.929, 0.1185, -0.7668, 1.7199, 1.8949, 2.0578, 0.9328, -0.211, -2.8546, -2.7195, -3.0066, -5.4613, -5.4714, -6.1331, -7.3092, -7.381, -7.7191, -8.5523, -8.4648, -2.487, -2.6525, -3.0263, -3.5473, -2.5564, -1.093, 0.1556, 2.3664, 3.5226, 4.7554, 4.5624, -7.591, + 9.311, 9.9536, 9.2138, 10.0448, 12.2215, 15.3929, 16.8943, 15.4237, 10.3171, 4.7547, 1.0177, -2.1707, -4.9877, -7.5219, -7.9593, -6.9345, -4.8837, -0.9854, 3.2044, 2.3045, -0.4463, -2.4338, -5.1476, -7.89, -10.631, -12.6634, -14.4919, -15.1208, -15.7863, 5.6159, 2.3509, 0.9141, -0.354, -1.9709, -1.3207, -0.835, -0.2962, -0.1715, -0.2711, -3.6616, -23.6214, + 23.3043, 22.9242, 21.5293, 19.5762, 16.1241, 10.4648, 6.0084, 4.4333, 5.1608, 6.7668, 7.1607, 5.7544, 1.6077, -1.1787, -4.1636, -7.1966, -8.5322, -8.3418, -7.6815, -6.4004, -5.6492, -7.9013, -12.6029, -15.0772, -12.4774, -7.5784, -9.0924, -17.5597, -19.3815, 3.7144, 2.6198, 1.4796, 0.442, -0.5744, -0.9102, -0.6355, -1.0076, -1.4038, -1.1279, -2.5963, -20.6144, + 11.2061, 12.3118, 12.8295, 13.0523, 13.1146, 12.3645, 9.9362, 5.7743, 1.7043, -1.8769, -4.8871, -7.3022, -10.0064, -12.5843, -14.2598, -13.6895, -11.6784, -9.5138, -6.1691, -0.5296, 5.2373, 5.2179, 3.438, 3.0836, 2.2733, -1.6391, -6.1888, -7.6374, -3.5815, 20.8484, 18.6436, 8.9742, 10.0179, 3.879, -7.4403, -11.3642, -12.3105, -11.5853, -8.933, -10.7298, -20.8771, + 16.8529, 17.4255, 16.4102, 15.5784, 15.8674, 17.495, 18.1947, 15.9349, 11.712, 7.2655, 2.7249, -1.9527, -5.0648, -6.5508, -5.6015, -1.523, 3.8782, 6.4704, 3.5684, -1.2082, -2.4831, -2.6718, -6.1617, -14.2995, -21.6998, -24.5766, -25.7294, -25.4801, -24.3755, 1.7078, 0.3442, -0.186, -0.3639, -0.6031, -0.7615, -0.5273, -0.1524, 0.161, 0.3883, -0.0071, -25.9432, + 3.6247, 4.1362, 4.7304, 5.4643, 6.0686, 6.7599, 7.37, 7.9086, 8.2045, 8.2007, 8.305, 7.9346, 6.506, 5.2072, 4.901, 4.7326, 5.1044, 4.6386, 2.5145, -2.675, -8.8497, -12.8927, -16.3752, -16.1979, -12.4272, -9.0385, -10.4849, -12.3511, -11.0196, 16.8771, 16.0363, 12.4221, 5.0921, -2.2734, -6.9441, -6.2634, -7.9111, -8.604, -8.3171, -10.1145, -25.1507, + 20.4102, 22.2333, 21.4536, 19.4223, 16.2855, 13.0015, 8.6431, 4.0577, 0.1512, -3.055, -6.8588, -9.9672, -11.6652, -13.5703, -15.4009, -14.9881, -14.1899, -13.0588, -12.144, -10.7868, -7.9129, -2.9873, -1.111, -1.0826, 1.2318, 4.7844, 4.0367, 1.8708, 1.1966, 1.4837, -0.6523, -2.7877, -2.3545, -1.2604, 3.0293, 4.438, 2.6853, 3.182, 0.1563, -7.9197, -4.8422, + 24.4801, 24.0824, 22.4438, 19.5938, 14.694, 8.679, 3.7523, 0.8565, -0.9075, -1.514, -0.7636, 1.4427, 4.6338, 4.78, -0.4807, -5.3801, -6.6867, -7.1351, -7.2085, -6.89, -7.0642, -5.4063, 1.9414, 1.1193, -8.061, -17.439, -17.6573, -19.7125, -20.1924, -1.8469, 0.7851, 2.9495, 5.7461, 5.1153, 0.0343, 1.2368, -1.4044, -2.4151, -4.0039, -6.1967, -17.9837, + 34.238, 33.5242, 31.1201, 27.6874, 23.0098, 16.3994, 8.7955, 1.8365, -2.8561, -4.7762, -4.6828, -3.5969, -2.7477, -3.7154, -5.8733, -6.7781, -7.1404, -9.1196, -11.1436, -11.7088, -11.204, -10.1729, -10.8046, -9.7894, -7.4004, -10.6648, -13.8125, -14.2674, -14.356, 0.7706, 1.2161, 0.201, -0.2054, -0.41, -0.3813, -0.4077, -0.2383, -0.1037, 0.0286, -0.4699, -14.1437, + 28.8775, 29.5132, 28.5106, 26.2574, 21.3404, 14.0753, 6.0344, -0.6419, -5.0399, -7.8669, -10.5378, -12.6348, -13.9599, -14.7351, -14.0154, -11.1568, -6.4165, -1.6004, -0.2199, -4.6568, -7.7877, -4.327, -3.6815, -7.3611, -9.9812, -9.0522, -3.7854, -1.0622, -4.0886, 4.5036, 0.0436, -1.262, 0.1566, 0.7061, 0.993, -0.1034, -0.8841, -0.1473, -0.6208, -3.3851, -11.7638, + 23.7811, 23.4799, 22.5985, 21.1811, 19.295, 16.9827, 14.153, 11.0015, 7.6758, 4.3321, 1.377, -1.2257, -4.1809, -8.056, -12.0663, -14.7575, -16.2562, -16.8262, -16.6031, -14.6213, -10.859, -6.2555, -3.6846, -3.645, -3.7342, -4.0353, -7.6132, -10.866, -10.5716, 9.6447, 7.8023, 3.9088, 0.9709, -1.2963, -2.9548, -3.6717, -3.5325, -2.8548, -2.7867, -5.23, -17.9213, + 7.3168, 7.9817, 8.1669, 8.3682, 8.5119, 8.7999, 8.5177, 8.224, 7.976, 7.1004, 4.9797, 2.844, -0.2787, -2.8393, -5.1812, -6.501, -7.8099, -7.3824, -4.9246, -1.2066, 1.0202, -1.2524, -5.5773, -6.6635, -6.2109, -4.9615, -7.0357, -10.7105, -11.2719, 12.8705, 11.8805, 10.2523, 9.3642, 5.4904, -1.6627, -6.1562, -9.1055, -10.2004, -10.6557, -12.0775, -23.3035, + 29.5404, 29.4681, 28.4882, 26.7591, 23.995, 19.9029, 14.9906, 9.9884, 4.9431, 0.7201, -2.7182, -4.9295, -5.8329, -5.2835, -3.1411, -1.0337, -1.2994, -4.6551, -9.294, -12.6166, -14.4507, -14.7304, -13.5533, -12.6574, -13.3765, -15.4995, -17.3894, -18.253, -18.0815, 0.4964, 0.5507, 1.1546, 0.737, -0.0255, -0.3498, -0.5226, -0.4656, -0.4711, -0.2868, -0.8174, -17.811, + -1.0744, 14.9003, 33.1596, 35.0523, 13.0736, 2.0052, -0.7661, 8.7597, 2.7166, -6.495, -4.261, 3.772, -4.3426, -8.7782, -3.2656, -7.4382, -8.4893, -4.5093, -7.9161, -3.7247, -7.052, -3.6709, -6.265, -4.496, -4.0238, -4.7559, -5.1416, -7.861, -9.1128, 0.6813, 1.7272, 1.1217, 0.4323, -0.0682, -0.265, -0.1787, -0.4185, -0.8065, -0.2104, -2.0153, -10.3544, + 17.3596, 17.5673, 15.0858, 11.4644, 7.3814, 4.0226, -0.141, -3.3849, -5.6204, -6.9233, -7.1105, -7.9534, -8.3396, -9.0384, -9.3087, -9.0779, -7.7416, -7.4684, -7.3969, -6.6548, -5.2109, -4.5759, -2.5217, -0.3381, 2.765, 6.1586, 8.7075, 9.567, 8.7272, 5.4636, 3.5914, 3.5111, 3.4034, 3.2185, 1.4996, -0.7001, -2.2097, -2.6342, -2.6685, -12.4751, 1.7656, + 9.2805, 8.3218, 6.4144, 5.5901, 4.5122, 4.117, 2.0243, 0.4668, -1.3946, -1.908, -1.6016, -2.3054, -3.2805, -3.6877, -3.6998, -3.136, -2.3723, -2.0691, -2.5325, -3.5697, -3.7685, -3.6638, -2.437, -2.4841, -1.3748, -1.3849, -0.1182, 1.3637, 4.6978, -2.5191, 0.6452, 3.8178, 5.9716, 6.9002, 5.0344, 1.4694, -0.9067, -2.4853, -4.2997, -13.628, 3.6107, + 14.3113, 15.3825, 16.0172, 17.0841, 17.9406, 17.4527, 13.8237, 9.1622, 4.4761, 0.4333, -1.8491, -4.1973, -6.2352, -7.3255, -6.6956, -3.8665, 0.4871, 1.8452, -1.9049, -6.4158, -9.6692, -9.9954, -8.3868, -6.3274, -7.5276, -11.6979, -13.095, -12.8586, -10.3679, 12.6405, 9.43, 6.8308, 1.9954, -1.8154, -4.05, -4.6445, -4.94, -4.6161, -4.141, -6.6897, -21.7106, + 15.9574, 13.5685, 10.9183, 9.2647, 7.9607, 6.5007, 4.5878, 3.5591, 3.2169, 1.2933, -0.051, -0.9224, -2.2752, -2.6282, -3.7623, -4.7934, -4.9449, -4.3779, -4.6931, -3.1458, -4.4724, -5.0318, -4.9908, -4.4859, -5.058, -5.3554, -5.0038, -5.0901, -5.7451, -5.4116, -5.6692, -5.7576, -5.1885, -3.0995, -0.5277, 2.1995, 4.1437, 5.6134, 6.876, 6.8216, -1.5471, + 19.4303, 18.5843, 17.0128, 17.0462, 18.3032, 19.023, 17.0309, 14.9915, 13.9671, 13.7472, 10.8472, 5.3475, -0.7858, -5.0732, -8.3887, -9.9459, -10.5501, -11.5448, -12.079, -11.0765, -11.334, -10.813, -12.3197, -14.8319, -14.5526, -12.6243, -11.2782, -13.0457, -15.0877, 2.8732, 1.857, 1.3694, -0.0267, -0.8287, -0.4903, -0.4684, -0.4454, -0.2649, -0.5119, -3.0635, -20.4302, + 12.4117, 13.0466, 13.2331, 13.485, 13.9028, 13.3369, 10.6679, 6.6169, 2.3362, -0.7175, -3.1184, -5.0629, -7.1577, -9.3769, -10.526, -9.6526, -5.9526, -0.9724, 3.2956, 3.3183, -0.2154, -2.7832, -2.1155, -2.0009, -5.4287, -9.8635, -12.0371, -11.731, -6.9389, 19.8935, 17.5132, 8.1204, 5.9513, -0.9114, -7.8096, -9.0959, -8.7765, -8.7232, -7.8238, -8.3381, -22.9941, + 5.4465, 6.1545, 6.596, 7.3692, 6.5453, 5.6331, 3.5394, 2.3607, 0.8659, 0.0509, -0.6899, -0.6602, -0.8114, -0.9871, -2.062, -2.1051, -2.1293, -2.4346, -2.8842, -2.7862, -2.7031, -2.7005, -2.3058, -2.4182, -2.9614, -3.3012, -3.625, -3.4399, -3.5562, 1.1375, 0.955, 0.1967, 0.2876, -0.3489, -0.1347, -0.2618, -0.2052, 0.1031, 0.1921, -1.9213, -5.8132, + 19.3219, 18.607, 17.2268, 15.7037, 13.2112, 9.2621, 6.1735, 5.2932, 6.8689, 8.1175, 8.5297, 6.2006, 2.9639, 0.2106, -1.5424, -3.0741, -3.6228, -1.7612, 1.1881, 0.4888, -4.7011, -12.4521, -18.8925, -20.1895, -15.2633, -7.7586, -8.4595, -18.6161, -23.0341, 7.2675, 6.3572, 1.7187, 0.3913, 0.3928, -0.3109, -1.9821, -2.8777, -3.2372, -3.3101, -4.4095, -25.201, + 8.4541, 8.1779, 7.1194, 5.4725, 2.9601, 1.1998, -0.3538, -1.2461, -1.9054, -1.1532, -0.8697, -0.7216, -1.4868, -2.8361, -3.9114, -3.9948, -3.2868, -2.9321, -1.6346, 0.6941, 1.5767, 0.1133, -0.6901, -1.9526, -1.704, -0.6393, -1.7853, -2.0227, -0.6415, 6.3775, 3.5011, 1.7742, 0.8521, -0.8807, -2.4262, -1.9793, -2.713, -1.0301, -0.2906, -3.185, -7.4694, + 10.0438, 9.573, 9.4079, 10.5993, 13.6404, 15.4525, 14.499, 10.5598, 6.2936, 3.7658, 1.8182, 2.4916, 3.9516, 5.8549, 9.0644, 9.6627, 6.8173, 4.3977, 1.349, -4.2076, -12.0535, -17.0808, -19.6338, -19.7015, -18.7275, -16.8855, -13.8529, -11.6701, -15.4293, 6.271, 4.5162, 0.1386, -2.0908, -1.7858, -2.0793, -1.8138, 0.2844, 0.7409, 0.2032, -4.3846, -24.8049, + 25.0551, 24.1141, 20.9653, 16.3108, 10.8527, 5.3678, 0.7364, -2.8219, -5.0859, -5.765, -6.1499, -6.6367, -7.4276, -7.5696, -8.0119, -6.4695, -2.7893, 0.4057, 2.0532, 0.861, -1.2343, -2.5971, -2.0921, -3.1259, -5.4032, -7.7358, -7.6535, -8.064, -10.089, 1.7165, 0.5619, 0.1133, -0.0994, -0.1364, -0.266, -0.4353, 0.5041, 0.4384, 0.8615, -3.2587, -14.5713, + -0.2824, -1.2002, -1.1857, -0.7688, -0.8143, -0.7172, -1.5304, -2.1288, -3.0516, -3.6018, -4.8378, -6.1535, -7.732, -6.8121, -6.1824, -3.6103, -1.4311, 0.9978, 1.1937, 0.8415, 2.4841, 6.3803, 8.8835, 7.0925, 6.7752, 9.2623, 5.7944, 2.8315, -0.4967, 18.7297, 14.2388, 10.8799, 4.2826, -6.9342, -8.6376, -8.3976, -6.7575, -6.0459, -5.4581, -5.9001, -18.8293, + 10.1128, 8.8893, 7.3473, 6.5214, 7.293, 10.3397, 14.0197, 15.8841, 13.7146, 8.7127, 4.4971, 1.7567, 0.2355, 0.565, 2.536, 6.4325, 6.1884, 1.5759, -3.2537, -5.8565, -5.4444, -3.863, -6.5876, -12.9364, -16.8492, -18.9964, -18.8056, -16.0076, -18.0217, 3.9553, 2.3698, 1.9291, -0.0877, -0.9652, -0.9019, -0.4445, -0.6487, -0.2555, -1.3366, -3.614, -25.1871, + 12.2726, 11.228, 9.4632, 7.3787, 5.2189, 3.66, 2.1581, 1.8973, 1.7208, 1.1692, 2.6675, 2.148, 0.1934, -0.9062, -0.5766, -0.7741, -0.2722, -1.4842, -1.6982, -2.2141, -2.7162, -2.8899, -3.2527, -3.3476, -3.8185, -5.7582, -8.5254, -9.5927, -13.3491, 2.9336, -0.0614, -5.1792, -7.8262, -5.8818, -2.4979, 0.281, 2.5842, 4.2687, 5.4567, 5.9224, -16.9053, + 37.2172, 34.3913, 31.2113, 27.7111, 23.6697, 19.0839, 14.6521, 10.8663, 7.8437, 5.4886, 3.9602, 2.5869, 0.56, -1.9033, -4.6862, -7.319, -10.071, -12.7038, -14.768, -15.8511, -16.1191, -16.1652, -16.2159, -15.9004, -15.8958, -16.8057, -17.9478, -18.494, -18.3957, 0.4419, 0.2835, -0.0357, -0.2713, -0.3987, -0.3334, -0.2999, -0.1625, 0.2757, 0.674, -0.1736, -16.8775, + 11.3753, 13.7268, 15.9469, 19.24, 21.6371, 21.2732, 16.6665, 10.0971, 4.1118, -0.3896, -3.6531, -5.5614, -8.0681, -10.2817, -11.6723, -11.5104, -10.0734, -10.1816, -8.5685, -7.1045, -6.4138, -4.8696, -3.9548, -5.7824, -5.0034, -4.9254, -6.3935, -5.3682, -4.2986, 12.8596, 6.0788, 2.4099, 2.8908, 0.0595, -2.3723, -2.9619, -4.0883, -4.5273, -4.0164, -6.3324, -17.4382, + 26.4179, 26.6038, 25.6315, 22.7118, 17.4654, 11.2374, 4.563, -0.6721, -3.649, -5.1965, -6.8885, -8.5149, -9.9685, -10.5303, -10.6988, -9.8426, -8.6196, -5.7793, -0.9658, 3.2322, 2.5498, 0.5196, -0.4196, -3.4101, -7.4205, -10.7757, -11.9107, -12.1132, -13.5565, 2.4448, 1.027, 0.2616, -0.2763, -0.6725, -0.5323, -0.4687, -0.3345, 0.1168, 0.1296, -1.6954, -17.0871, + 18.4471, 16.7466, 13.9277, 10.8916, 8.7857, 7.1932, 5.5568, 4.1778, 3.8018, 3.6509, 4.1995, 4.5197, 3.7143, 2.0835, 1.0146, 0.3919, -0.3931, -1.7518, -3.7102, -5.6106, -7.0424, -8.2355, -8.7436, -9.9803, -10.8971, -12.1221, -12.4526, -14.0451, -14.1182, 1.5911, 1.3311, 0.9816, 0.2592, 0.5671, -0.15, -0.6917, -0.071, -0.0271, 0.0589, -3.8492, -16.0146, + 5.9232, 5.3337, 3.8014, 2.9697, 3.4359, 4.2543, 3.4648, 1.7717, 0.1194, -0.0269, 0.7474, 1.7656, 2.2681, 3.3777, 5.535, 7.6925, 7.117, 5.0594, 1.6134, -2.884, -4.6636, -5.6498, -6.726, -7.6581, -7.7482, -7.0077, -8.1003, -8.2149, -7.5709, 2.7271, 3.2452, 3.0964, 1.8085, 1.2978, 0.1047, -1.3807, -1.5844, -0.8243, -0.5104, -7.9799, -12.0827, + 12.4719, 12.1361, 10.1546, 7.9843, 6.3039, 5.8891, 4.6571, 2.6181, -0.1657, -1.9369, -2.8607, -3.3105, -4.8578, -7.0042, -7.1916, -5.9866, -4.1997, -1.7831, 1.5238, 4.3316, 3.2165, 1.1019, 0.2627, -0.7887, -2.3974, -4.1659, -7.7383, -8.8914, -9.3732, 3.3631, 2.173, 1.7422, 1.8227, 1.4558, 0.1916, -0.0971, -0.1883, -1.5408, -1.1423, -7.7797, -11.8474, + 11.3451, 10.9, 8.9585, 6.1028, 3.1858, -1.1621, -5.3836, -9.5575, -11.5639, -12.6129, -13.2817, -13.1921, -12.6233, -11.4537, -9.9063, -7.2485, -2.9323, -0.1679, 2.3451, 3.4644, 4.1413, 6.5832, 8.0312, 9.6, 9.3866, 8.339, 7.0332, 6.2115, 5.4582, 2.4819, 2.4952, 2.5332, 1.3146, 1.284, 1.1744, 1.4075, 1.6533, -0.791, -1.1435, -12.4097, 1.0916, + 23.6029, 24.2878, 23.193, 21.6752, 20.1647, 17.8825, 13.5147, 9.0959, 4.9067, 0.9398, -2.2819, -4.7976, -6.5405, -7.8935, -8.5957, -8.1319, -5.7029, -2.901, -1.4003, -3.8107, -7.7146, -10.9603, -11.9185, -11.3097, -10.0262, -10.8911, -13.0763, -15.2199, -16.0905, -4.3614, -2.5556, -2.1777, -1.8997, -0.5988, 1.0869, 2.5785, 3.4868, 4.0967, 3.3192, -2.9749, -12.6358, + 4.1481, 24.8058, 32.005, 24.107, 7.9048, 5.1844, 9.4865, 6.993, -4.1867, -5.3105, -0.1042, -5.3429, -7.948, -8.834, -11.8488, -10.9382, -11.6153, -10.8429, -8.8763, -8.2063, -5.9086, -4.678, -0.7362, 0.9339, 1.6189, 1.242, -2.165, -5.4458, -5.4417, 3.8026, 4.9367, 2.9396, 1.2003, 0.8096, -0.4055, -1.2653, -1.7631, -2.913, -1.4945, -5.8474, -8.5756, + 23.7954, 23.1921, 21.7016, 20.0766, 17.1113, 13.7019, 10.3999, 7.0724, 4.4505, 3.2062, 3.6711, 5.104, 6.2303, 4.8847, -0.1659, -4.8929, -7.3427, -9.3139, -10.945, -11.4728, -10.0337, -7.5622, -3.5203, -5.8211, -14.2213, -19.1068, -19.3958, -20.2365, -20.5672, -0.5258, 0.0632, 2.1808, 3.9092, 2.4964, -0.3407, -0.519, -0.8656, -0.9771, -1.7973, -3.6241, -20.0182, + -3.736, -3.6185, -3.3879, -2.0035, -2.0453, -3.0452, -2.1024, -2.2759, -2.6516, -4.3569, -3.6456, -2.3824, -3.7115, -5.0829, -6.2136, -7.0765, -6.8802, -6.4042, -2.6943, 1.3032, 2.8085, -2.4198, 6.8476, 8.522, 10.8666, 10.9764, 11.8694, 11.688, 10.8525, -10.1854, -14.3979, -14.1885, -6.1104, -2.3069, 3.0598, 3.2787, 7.7402, 9.9334, 10.5862, 12.5907, 18.9431, + 13.3492, 12.8348, 12.1001, 10.6097, 8.9141, 7.8597, 5.9391, 3.8673, 2.6411, 2.3479, 2.7602, 2.8027, 2.2779, 0.4287, -1.3226, -2.0315, -2.1676, -1.5551, -1.2222, -2.1197, -4.0818, -6.1594, -8.1874, -9.3177, -9.4499, -9.7874, -10.1789, -10.6801, -10.4712, -3.7681, -4.8313, -5.1537, -4.2661, -3.2035, -1.4351, 1.4217, 3.2157, 5.2602, 6.9893, 5.7708, -7.9426, + 23.1558, 23.5472, 22.1677, 18.7915, 13.0187, 6.0783, -0.4803, -4.5728, -6.1861, -7.0011, -7.3578, -8.089, -10.0377, -12.234, -12.8288, -11.4502, -9.5173, -6.4728, -2.1175, 2.0048, 1.357, -2.9595, -2.6436, 1.518, 3.0406, -2.5769, -4.8065, -2.5134, -0.8343, 3.1119, 3.3528, 5.9276, 3.6737, 2.5908, 1.6925, -3.4674, -1.5813, -3.2207, -2.1812, -9.8987, -8.8538, + 26.492, 27.5278, 23.5895, 18.4003, 14.4396, 11.3628, 6.6147, 2.4341, -0.2444, -2.4075, -4.2073, -6.4485, -7.8162, -9.2259, -9.5571, -9.3064, -9.091, -7.0174, -7.1701, -7.0279, -7.651, -7.5329, -8.2698, -7.2504, -4.4537, -4.4137, -4.3225, -4.9571, -2.4902, -7.3866, -6.0243, -3.8745, 0.0041, 2.702, 4.9257, 5.6046, 5.2905, 3.4738, 1.697, -6.4124, 2.1053, + 20.0311, 32.4089, 21.4065, 3.874, 5.863, 17.0357, 3.7543, 2.9904, 15.6577, 4.2113, -0.9665, 3.2682, -4.9242, 0.9109, -5.5297, -0.979, -5.0003, -0.7131, -5.5269, -8.0296, -9.9403, -10.8809, -10.2649, -9.9965, -9.6956, -10.6759, -12.5982, -13.0794, -12.6109, 0.8915, 0.0604, -0.2305, -0.0021, -0.6053, -0.3414, -0.0731, 0.4824, 0.7549, -0.1062, -0.8306, -13.4365, + 16.7766, 17.5169, 16.4982, 14.0891, 10.0932, 5.3461, 0.6341, -3.6859, -5.9242, -6.3128, -5.935, -5.7548, -6.0307, -6.0498, -6.4996, -6.5626, -4.8816, -3.2502, -3.2922, -4.2819, -4.8479, -5.5791, -4.7813, -3.1384, -3.49, -2.8954, 0.2902, 4.4573, 7.4915, -5.5534, -4.1269, -1.5355, 0.4168, 0.9124, 3.0599, 2.1241, 2.4262, 2.5, 4.5034, -4.7272, 8.0549, + 14.2987, 14.8926, 15.4168, 16.0974, 16.7877, 16.0424, 12.971, 8.0251, 2.909, -0.5642, -2.964, -4.5656, -6.3342, -5.7781, -3.4597, 0.3272, 2.7738, -0.3574, -4.8087, -8.1398, -9.6152, -7.9303, -6.227, -7.0986, -10.3018, -13.1453, -11.2961, -9.1627, -8.7927, 1.0994, 1.8123, 2.8974, 2.905, 4.6509, 3.4505, -0.601, -1.4758, -2.7795, -2.4745, -9.4847, -15.4782, + 19.5896, 21.6796, 21.9059, 19.1821, 14.0268, 8.5044, 2.2676, -4.7266, -10.645, -13.046, -14.086, -14.5335, -14.9498, -14.787, -14.0697, -11.4549, -8.2147, -4.026, 0.3628, 4.9113, 3.4988, 0.578, 1.9943, 2.981, 0.8573, -1.3207, -0.074, 2.1207, 1.474, 10.3387, 1.2319, -0.4911, -1.8207, -1.07, -0.8286, 0.3764, 0.204, -0.829, -1.6698, -5.4418, -14.7994, + 7.6904, 8.5944, 9.5072, 9.882, 10.2276, 10.5222, 10.3373, 9.3607, 7.6459, 4.8852, 2.1707, -0.1575, -1.8433, -2.7877, -2.2526, -0.5664, 2.3824, 4.3345, 3.544, -0.6514, -5.2439, -9.2918, -11.7988, -14.1092, -12.7385, -9.1451, -9.6551, -10.7736, -10.0695, 11.9243, 11.2262, 10.3898, 9.8282, 8.0787, 3.3521, -3.2649, -10.5053, -13.2404, -13.3007, -14.4881, -21.2847, + 30.307, 29.5477, 26.4796, 21.7752, 16.6251, 11.7301, 7.3299, 3.8872, 0.729, -1.2037, -2.4737, -3.5896, -4.8044, -5.4589, -6.3339, -6.5407, -6.0748, -6.4957, -7.6726, -8.7065, -8.7749, -8.8999, -9.3481, -9.1891, -9.9612, -10.0486, -10.55, -11.2845, -11, -6.1498, -6.3059, -5.5965, -4.5595, -2.8356, 0.0899, 2.711, 4.5977, 5.7639, 7.0861, 5.1987, -6.4033, + 12.2542, 12.1227, 12.1295, 13.7252, 16.2506, 16.1281, 10.9394, 4.8988, -0.4731, -3.6819, -5.4021, -7.4944, -8.2715, -8.0576, -6.1477, -3.0306, 1.9117, 4.056, 2.1482, 0.8098, 0.1207, 0.0058, -2.3034, -4.0466, -3.922, -6.4147, -11.2118, -17.1187, -19.9247, 6.0099, 3.6952, 1.2907, -0.5044, -0.8291, -1.0627, -1.1957, -1.1416, -1.4267, -1.5418, -3.2939, -24.486, + 9.7234, 8.7897, 6.536, 5.5091, 6.6941, 8.8748, 9.0238, 7.6482, 4.3129, 1.4757, -0.7289, -2.4072, -4.4322, -5.3461, -3.7806, -1.1393, 2.9797, 3.5166, -1.5034, -4.0711, -4.3945, -4.4639, -5.1951, -6.0761, -6.0336, -6.996, -6.516, -4.952, -7.048, 14.6458, 13.1436, 9.144, 2.7564, -0.8129, -3.8913, -6.65, -6.1267, -6.0986, -6.7696, -9.3407, -21.2384, + 8.5519, 7.5224, 5.9151, 4.8177, 3.503, 2.2565, 1.1622, 0.1988, -0.5493, -0.385, -0.1928, -0.4114, -0.8801, -1.0153, -1.0764, -1.4171, -1.4905, -1.3971, -1.0636, -1.1738, -0.9725, -1.888, -2.3866, -2.7467, -2.5988, -2.5326, -3.1114, -3.2783, -3.3604, -3.8082, -3.8849, -4.0621, -3.5801, -2.8055, -1.5136, 0.9076, 2.835, 4.3455, 5.8838, 5.6825, -0.4474, + 7.7224, 9.4298, 7.9025, 6.4102, 5.0524, 7.1733, 6.8444, 5.1985, 1.7514, 0.1644, 0.4222, 1.0885, -0.3101, -2.4745, -2.9872, -2.3617, -3.5889, -3.7306, -1.5428, -0.5556, -0.6425, -2.7366, -1.5405, -2.2119, -3.2504, -3.1003, -4.4891, -10.0519, -13.5853, -15.9446, -3.2508, 0.2918, -0.9236, 3.57, 5.1357, 5.1789, 6.0048, 3.6122, 3.0229, -6.6974, 0.466, + 12.4572, 13.576, 13.8205, 13.8979, 14.7964, 17.0228, 18.4159, 17.4577, 14.0275, 10.4467, 7.5633, 5.822, 5.5014, 6.0819, 6.428, 5.7453, 2.9483, 0.4368, -2.0706, -3.5909, -6.3177, -11.4245, -17.9894, -23.7008, -25.5017, -25.0724, -24.5956, -23.3443, -22.8376, 1.8005, 0.405, -0.0309, -0.4072, -0.7903, -0.7639, -0.633, 0.2496, 0.9862, 0.2958, -1.1118, -25.7677, + 4.7942, 4.1637, 3.1217, 3.4886, 5.7426, 8.4586, 9.4051, 8.4408, 4.0573, -0.0847, -2.6488, -4.2622, -6.8882, -7.9882, -8.0785, -6.5745, -3.6736, 0.0836, 3.7506, 4.295, 1.443, 1.7647, 2.5945, 0.5096, -1.403, -2.4095, -4.2409, -7.3362, -10.5254, 14.3716, 9.9001, 5.5613, -0.4343, -4.0106, -4.4911, -4.7396, -4.3992, -3.5933, -3.3021, -4.8629, -20.9215, + 21.6217, 21.5816, 19.9361, 17.4078, 14.6925, 11.478, 7.736, 4.5567, 2.3261, 1.3757, 0.8699, 1.0465, 1.101, -0.3579, -2.1883, -4.1422, -5.522, -7.4591, -9.7124, -11.0673, -12.8828, -14.8063, -14.5786, -12.2038, -9.6561, -7.6717, -6.6862, -4.494, -2.3008, -2.8294, -2.2589, -0.7299, 1.858, 3.4539, 3.4053, 2.7591, 1.9997, 0.5308, 0.5471, -8.7356, -3.9438, + 1.0482, 0.882, 0.312, -0.0147, 0.1548, 1.1642, 2.5065, 4.2829, 6.8793, 9.8376, 11.4462, 10.6004, 8.7525, 7.4364, 7.3679, 8.2254, 7.9411, 4.8316, -0.5361, -4.6026, -6.7708, -7.8326, -7.7624, -5.3939, -6.4851, -9.7433, -13.7435, -16.3579, -14.4263, 10.9932, 7.619, 5.9532, 4.7231, 0.1759, -2.5109, -4.5002, -5.8815, -4.2941, -4.7897, -7.4879, -24.0798, + 8.4638, 7.6638, 6.7405, 6.7849, 9.6108, 11.6513, 11.2989, 8.3544, 3.044, -0.8467, -3.9303, -4.9339, -3.7358, -4.1317, -2.0585, 2.7514, 7.6579, 7.9793, 2.3491, -1.2307, -6.1104, -5.2397, -3.7933, -5.5972, -9.8841, -12.1146, -11.4629, -8.7974, -10.4828, 8.1529, 4.6235, 5.0235, -3.915, -7.5503, -5.3361, -1.2531, 6.4683, 2.2949, -0.055, -8.4536, -22.5498, + 9.8543, 8.7085, 6.2122, 3.2566, 2.0932, 1.8184, 0.621, -1.4796, -2.3312, -2.6373, -4.0537, -4.6289, -4.6135, -3.7432, -2.1216, 0.8603, 3.6326, 5.0735, 3.4051, 1.8301, 1.3556, -1.1657, -2.6873, -3.258, -2.3407, -3.5712, -3.7082, -3.8659, -2.5155, -3.0106, -3.6582, 1.1257, 3.5876, 5.1138, 3.862, 1.9732, 0.5329, 1.0253, -0.8077, -9.7439, -1.3313, + -2.9689, -3.6925, -3.2882, -2.1408, -0.3207, 1.4181, 2.0372, 0.1628, -1.5615, -1.1744, -1.1748, -2.3007, -3.8174, -4.8189, -4.0221, -1.3971, 3.2927, 7.6888, 9.8326, 7.1859, 3.6459, 2.2387, 1.1579, 1.6876, 0.0249, -1.1344, -3.2237, -2.0378, -1.2991, 8.2053, 7.6257, 7.4526, 5.2692, 0.6619, -2.5875, -5.5343, -3.5316, -3.8077, -4.5073, -9.2463, -10.5134, + 9.7903, 6.5524, 4.2187, 2.8629, 1.5301, 2.609, 2.8671, -0.4058, 0.1443, 2.1025, 2.2641, 2.254, 2.8227, 4.2305, 2.6246, 0.1011, -0.5037, -2.5281, 5.9816, 8.8018, 3.5902, -2.1055, -8.2336, -7.5542, -8.3988, -6.77, -12.1221, -12.6274, -4.0986, 15.9214, 10.1934, 4.0555, -0.7395, -4.485, -5.0408, 1.8975, -3.7215, -6.1218, -5.7613, -6.198, -17.642, + 29.2898, 29.127, 27.9887, 26.035, 22.788, 18.9325, 14.8741, 10.7353, 6.3361, 1.5435, -3.4721, -8.0918, -11.5471, -14.2024, -15.543, -16.5237, -17.5387, -18.0503, -18.3862, -18.0321, -17.2039, -14.4258, -7.6289, -2.1492, -0.8256, -0.4858, 0.7007, -0.7217, -3.5225, 7.7486, 6.5879, 3.6481, 0.1102, -1.4486, -1.4917, -1.7642, -2.4587, -2.7189, -2.3171, -5.8956, -12.2398, + 4.4923, 5.9961, 3.5313, -0.1456, -2.9561, -3.9972, -5.5178, -6.5495, -8.2904, -9.4007, -9.5368, -9.2154, -10.6132, -12.2389, -12.145, -11.3212, -9.2653, -6.1867, -0.5047, 2.8376, -1.5645, 1.0645, 6.8296, 12.903, 17.1169, 16.2097, 16.8799, 17.2979, 14.2904, 3.6672, 1.4385, 0.6939, -0.7824, -1.0548, 0.7585, 1.5905, 1.4809, 1.2351, 0.7042, -9.7316, 9.0007, + 17.1014, 20.3617, 22.1941, 23.6186, 23.8203, 21.498, 16.0993, 10.2193, 4.4688, 0.3152, -2.6232, -4.4565, -5.7629, -7.4399, -7.9702, -8.7398, -8.6156, -7.5758, -5.6113, -3.8507, -4.771, -7.9311, -11.5008, -12.9375, -11.7921, -9.1891, -8.8722, -13.4431, -16.6139, 2.6455, 3.2595, 3.634, 3.0753, 1.5772, -0.5994, -1.7486, -1.896, -2.7589, -2.489, -4.6996, -18.2534, + -6.795, -4.3945, -2.1814, -0.0391, 1.0243, 2.1577, 2.4659, 2.7954, 2.9978, 2.3847, 1.7726, 1.1096, -0.1514, -3.1834, -4.1688, -4.9229, -4.741, -4.3919, -0.8572, 1.4319, 1.2097, 1.1996, -0.6138, 0.0932, 1.9431, 3.2864, 3.0149, 3.03, 4.5238, -4.4471, -6.9731, -3.2184, -0.9733, 0.9643, 1.9409, 2.7291, 5.1726, 4.8981, 5.2725, -5.3657, 7.6481 +}; + +const struct lsp_codebook newamp2vq_cb[] = { + /* /home/sh/Downloads/hackrf/codec2/src/codebook/codes_450.txt */ + { + 41, + 8.96578, + 500, + codes0 + }, + { 0, 0, 0, 0 } +}; diff --git a/libcodec2-android/src/codec2/build_linux/src/codebooknewamp2_energy.c b/libcodec2-android/src/codec2/build_linux/src/codebooknewamp2_energy.c new file mode 100644 index 0000000..4fd2091 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/codebooknewamp2_energy.c @@ -0,0 +1,35 @@ +/* THIS IS A GENERATED FILE. Edit generate_codebook.c and its input */ + +/* + * This intermediary file and the files that used to create it are under + * The LGPL. See the file COPYING. + */ + +#include "defines.h" + + /* /home/sh/Downloads/hackrf/codec2/src/codebook/newamp2_energy_q.txt */ +#ifdef __EMBEDDED__ +static const float codes0[] = { +#else +static float codes0[] = { +#endif + 0.1, + 5, + 10, + 15, + 20, + 30, + 37.5, + 42.5 +}; + +const struct lsp_codebook newamp2_energy_cb[] = { + /* /home/sh/Downloads/hackrf/codec2/src/codebook/newamp2_energy_q.txt */ + { + 1, + 3, + 8, + codes0 + }, + { 0, 0, 0, 0 } +}; diff --git a/libcodec2-android/src/codec2/build_linux/src/cohpsk_ch b/libcodec2-android/src/codec2/build_linux/src/cohpsk_ch new file mode 100755 index 0000000..742746a Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/cohpsk_ch differ diff --git a/libcodec2-android/src/codec2/build_linux/src/cohpsk_demod b/libcodec2-android/src/codec2/build_linux/src/cohpsk_demod new file mode 100755 index 0000000..c04cf39 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/cohpsk_demod differ diff --git a/libcodec2-android/src/codec2/build_linux/src/cohpsk_get_test_bits b/libcodec2-android/src/codec2/build_linux/src/cohpsk_get_test_bits new file mode 100755 index 0000000..b722631 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/cohpsk_get_test_bits differ diff --git a/libcodec2-android/src/codec2/build_linux/src/cohpsk_mod b/libcodec2-android/src/codec2/build_linux/src/cohpsk_mod new file mode 100755 index 0000000..70b5d54 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/cohpsk_mod differ diff --git a/libcodec2-android/src/codec2/build_linux/src/cohpsk_put_test_bits b/libcodec2-android/src/codec2/build_linux/src/cohpsk_put_test_bits new file mode 100755 index 0000000..702ce76 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/cohpsk_put_test_bits differ diff --git a/libcodec2-android/src/codec2/build_linux/src/deframer b/libcodec2-android/src/codec2/build_linux/src/deframer new file mode 100755 index 0000000..00be3a5 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/deframer differ diff --git a/libcodec2-android/src/codec2/build_linux/src/drs232 b/libcodec2-android/src/codec2/build_linux/src/drs232 new file mode 100755 index 0000000..d3e6ab0 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/drs232 differ diff --git a/libcodec2-android/src/codec2/build_linux/src/drs232_ldpc b/libcodec2-android/src/codec2/build_linux/src/drs232_ldpc new file mode 100755 index 0000000..9f631fd Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/drs232_ldpc differ diff --git a/libcodec2-android/src/codec2/build_linux/src/fdmdv_channel b/libcodec2-android/src/codec2/build_linux/src/fdmdv_channel new file mode 100755 index 0000000..3fd55de Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/fdmdv_channel differ diff --git a/libcodec2-android/src/codec2/build_linux/src/fdmdv_demod b/libcodec2-android/src/codec2/build_linux/src/fdmdv_demod new file mode 100755 index 0000000..18285ae Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/fdmdv_demod differ diff --git a/libcodec2-android/src/codec2/build_linux/src/fdmdv_get_test_bits b/libcodec2-android/src/codec2/build_linux/src/fdmdv_get_test_bits new file mode 100755 index 0000000..050cc6f Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/fdmdv_get_test_bits differ diff --git a/libcodec2-android/src/codec2/build_linux/src/fdmdv_mod b/libcodec2-android/src/codec2/build_linux/src/fdmdv_mod new file mode 100755 index 0000000..6e26a42 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/fdmdv_mod differ diff --git a/libcodec2-android/src/codec2/build_linux/src/fdmdv_put_test_bits b/libcodec2-android/src/codec2/build_linux/src/fdmdv_put_test_bits new file mode 100755 index 0000000..692207d Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/fdmdv_put_test_bits differ diff --git a/libcodec2-android/src/codec2/build_linux/src/fm_demod b/libcodec2-android/src/codec2/build_linux/src/fm_demod new file mode 100755 index 0000000..66b0a0b Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/fm_demod differ diff --git a/libcodec2-android/src/codec2/build_linux/src/fmfsk_demod b/libcodec2-android/src/codec2/build_linux/src/fmfsk_demod new file mode 100755 index 0000000..e1a8591 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/fmfsk_demod differ diff --git a/libcodec2-android/src/codec2/build_linux/src/fmfsk_mod b/libcodec2-android/src/codec2/build_linux/src/fmfsk_mod new file mode 100755 index 0000000..d2d14de Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/fmfsk_mod differ diff --git a/libcodec2-android/src/codec2/build_linux/src/framer b/libcodec2-android/src/codec2/build_linux/src/framer new file mode 100755 index 0000000..f0fce3f Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/framer differ diff --git a/libcodec2-android/src/codec2/build_linux/src/freedv_data_raw_rx b/libcodec2-android/src/codec2/build_linux/src/freedv_data_raw_rx new file mode 100755 index 0000000..7400e51 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/freedv_data_raw_rx differ diff --git a/libcodec2-android/src/codec2/build_linux/src/freedv_data_raw_tx b/libcodec2-android/src/codec2/build_linux/src/freedv_data_raw_tx new file mode 100755 index 0000000..c85192a Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/freedv_data_raw_tx differ diff --git a/libcodec2-android/src/codec2/build_linux/src/freedv_data_rx b/libcodec2-android/src/codec2/build_linux/src/freedv_data_rx new file mode 100755 index 0000000..a3dd1e1 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/freedv_data_rx differ diff --git a/libcodec2-android/src/codec2/build_linux/src/freedv_data_tx b/libcodec2-android/src/codec2/build_linux/src/freedv_data_tx new file mode 100755 index 0000000..5bf5f16 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/freedv_data_tx differ diff --git a/libcodec2-android/src/codec2/build_linux/src/freedv_mixed_rx b/libcodec2-android/src/codec2/build_linux/src/freedv_mixed_rx new file mode 100755 index 0000000..1a102c9 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/freedv_mixed_rx differ diff --git a/libcodec2-android/src/codec2/build_linux/src/freedv_mixed_tx b/libcodec2-android/src/codec2/build_linux/src/freedv_mixed_tx new file mode 100755 index 0000000..14e5a23 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/freedv_mixed_tx differ diff --git a/libcodec2-android/src/codec2/build_linux/src/freedv_rx b/libcodec2-android/src/codec2/build_linux/src/freedv_rx new file mode 100755 index 0000000..6edf9af Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/freedv_rx differ diff --git a/libcodec2-android/src/codec2/build_linux/src/freedv_tx b/libcodec2-android/src/codec2/build_linux/src/freedv_tx new file mode 100755 index 0000000..8bc9bd7 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/freedv_tx differ diff --git a/libcodec2-android/src/codec2/build_linux/src/fsk_demod b/libcodec2-android/src/codec2/build_linux/src/fsk_demod new file mode 100755 index 0000000..769082b Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/fsk_demod differ diff --git a/libcodec2-android/src/codec2/build_linux/src/fsk_get_test_bits b/libcodec2-android/src/codec2/build_linux/src/fsk_get_test_bits new file mode 100755 index 0000000..34d6108 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/fsk_get_test_bits differ diff --git a/libcodec2-android/src/codec2/build_linux/src/fsk_mod b/libcodec2-android/src/codec2/build_linux/src/fsk_mod new file mode 100755 index 0000000..38f2c56 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/fsk_mod differ diff --git a/libcodec2-android/src/codec2/build_linux/src/fsk_mod_ext_vco b/libcodec2-android/src/codec2/build_linux/src/fsk_mod_ext_vco new file mode 100755 index 0000000..3866591 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/fsk_mod_ext_vco differ diff --git a/libcodec2-android/src/codec2/build_linux/src/fsk_put_test_bits b/libcodec2-android/src/codec2/build_linux/src/fsk_put_test_bits new file mode 100755 index 0000000..08cd75b Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/fsk_put_test_bits differ diff --git a/libcodec2-android/src/codec2/build_linux/src/generate_codebook b/libcodec2-android/src/codec2/build_linux/src/generate_codebook new file mode 100755 index 0000000..803040a Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/generate_codebook differ diff --git a/libcodec2-android/src/codec2/build_linux/src/horus_demod b/libcodec2-android/src/codec2/build_linux/src/horus_demod new file mode 100755 index 0000000..b054d91 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/horus_demod differ diff --git a/libcodec2-android/src/codec2/build_linux/src/insert_errors b/libcodec2-android/src/codec2/build_linux/src/insert_errors new file mode 100755 index 0000000..bfbe4b2 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/insert_errors differ diff --git a/libcodec2-android/src/codec2/build_linux/src/ldpc_dec b/libcodec2-android/src/codec2/build_linux/src/ldpc_dec new file mode 100755 index 0000000..cde7599 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/ldpc_dec differ diff --git a/libcodec2-android/src/codec2/build_linux/src/ldpc_enc b/libcodec2-android/src/codec2/build_linux/src/ldpc_enc new file mode 100755 index 0000000..069114a Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/ldpc_enc differ diff --git a/libcodec2-android/src/codec2/build_linux/src/ldpc_noise b/libcodec2-android/src/codec2/build_linux/src/ldpc_noise new file mode 100755 index 0000000..f47c5d4 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/ldpc_noise differ diff --git a/libcodec2-android/src/codec2/build_linux/src/libcodec2.so b/libcodec2-android/src/codec2/build_linux/src/libcodec2.so new file mode 120000 index 0000000..35d7a67 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/src/libcodec2.so @@ -0,0 +1 @@ +libcodec2.so.0.9 \ No newline at end of file diff --git a/libcodec2-android/src/codec2/build_linux/src/libcodec2.so.0.9 b/libcodec2-android/src/codec2/build_linux/src/libcodec2.so.0.9 new file mode 100755 index 0000000..19decb8 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/libcodec2.so.0.9 differ diff --git a/libcodec2-android/src/codec2/build_linux/src/ofdm_demod b/libcodec2-android/src/codec2/build_linux/src/ofdm_demod new file mode 100755 index 0000000..570903b Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/ofdm_demod differ diff --git a/libcodec2-android/src/codec2/build_linux/src/ofdm_gen_test_bits b/libcodec2-android/src/codec2/build_linux/src/ofdm_gen_test_bits new file mode 100755 index 0000000..706d26e Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/ofdm_gen_test_bits differ diff --git a/libcodec2-android/src/codec2/build_linux/src/ofdm_get_test_bits b/libcodec2-android/src/codec2/build_linux/src/ofdm_get_test_bits new file mode 100755 index 0000000..54f40b5 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/ofdm_get_test_bits differ diff --git a/libcodec2-android/src/codec2/build_linux/src/ofdm_mod b/libcodec2-android/src/codec2/build_linux/src/ofdm_mod new file mode 100755 index 0000000..ed72c20 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/ofdm_mod differ diff --git a/libcodec2-android/src/codec2/build_linux/src/ofdm_put_test_bits b/libcodec2-android/src/codec2/build_linux/src/ofdm_put_test_bits new file mode 100755 index 0000000..2a94695 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/ofdm_put_test_bits differ diff --git a/libcodec2-android/src/codec2/build_linux/src/tollr b/libcodec2-android/src/codec2/build_linux/src/tollr new file mode 100755 index 0000000..38584ce Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/tollr differ diff --git a/libcodec2-android/src/codec2/build_linux/src/vhf_deframe_c2 b/libcodec2-android/src/codec2/build_linux/src/vhf_deframe_c2 new file mode 100755 index 0000000..fed6520 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/vhf_deframe_c2 differ diff --git a/libcodec2-android/src/codec2/build_linux/src/vhf_frame_c2 b/libcodec2-android/src/codec2/build_linux/src/vhf_frame_c2 new file mode 100755 index 0000000..a79c618 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/src/vhf_frame_c2 differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/CMakeDirectoryInformation.cmake b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/CMakeDirectoryInformation.cmake new file mode 100644 index 0000000..4745369 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/CMakeDirectoryInformation.cmake @@ -0,0 +1,16 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Relative path conversion top directories. +set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/home/sh/Downloads/hackrf/codec2") +set(CMAKE_RELATIVE_PATH_TOP_BINARY "/home/sh/Downloads/hackrf/codec2/build_linux") + +# Force unix paths in dependencies. +set(CMAKE_FORCE_UNIX_PATHS 1) + + +# The C and CXX include file regular expressions for this directory. +set(CMAKE_C_INCLUDE_REGEX_SCAN "^.*$") +set(CMAKE_C_INCLUDE_REGEX_COMPLAIN "^$") +set(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN}) +set(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN}) diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/compare_floats.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/compare_floats.dir/C.includecache new file mode 100644 index 0000000..8e54ca9 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/compare_floats.dir/C.includecache @@ -0,0 +1,8 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/compare_floats.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/compare_floats.dir/DependInfo.cmake new file mode 100644 index 0000000..916c3ac --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/compare_floats.dir/DependInfo.cmake @@ -0,0 +1,33 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/unittest/compare_floats.c" "/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/compare_floats.dir/compare_floats.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "FLOATING_POINT" + "GIT_HASH=\"df2ed16c\"" + "MODEMPROBE_ENABLE" + "VAR_ARRAYS" + "XXXXX" + "_GNU_SOURCE=1" + "__UNITTEST__" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../unittest/../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/compare_floats.dir/build.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/compare_floats.dir/build.make new file mode 100644 index 0000000..248a6f8 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/compare_floats.dir/build.make @@ -0,0 +1,98 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include unittest/CMakeFiles/compare_floats.dir/depend.make + +# Include the progress variables for this target. +include unittest/CMakeFiles/compare_floats.dir/progress.make + +# Include the compile flags for this target's objects. +include unittest/CMakeFiles/compare_floats.dir/flags.make + +unittest/CMakeFiles/compare_floats.dir/compare_floats.c.o: unittest/CMakeFiles/compare_floats.dir/flags.make +unittest/CMakeFiles/compare_floats.dir/compare_floats.c.o: ../unittest/compare_floats.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object unittest/CMakeFiles/compare_floats.dir/compare_floats.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/compare_floats.dir/compare_floats.c.o -c /home/sh/Downloads/hackrf/codec2/unittest/compare_floats.c + +unittest/CMakeFiles/compare_floats.dir/compare_floats.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/compare_floats.dir/compare_floats.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/unittest/compare_floats.c > CMakeFiles/compare_floats.dir/compare_floats.c.i + +unittest/CMakeFiles/compare_floats.dir/compare_floats.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/compare_floats.dir/compare_floats.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/unittest/compare_floats.c -o CMakeFiles/compare_floats.dir/compare_floats.c.s + +# Object files for target compare_floats +compare_floats_OBJECTS = \ +"CMakeFiles/compare_floats.dir/compare_floats.c.o" + +# External object files for target compare_floats +compare_floats_EXTERNAL_OBJECTS = + +unittest/compare_floats: unittest/CMakeFiles/compare_floats.dir/compare_floats.c.o +unittest/compare_floats: unittest/CMakeFiles/compare_floats.dir/build.make +unittest/compare_floats: unittest/CMakeFiles/compare_floats.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking C executable compare_floats" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/compare_floats.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +unittest/CMakeFiles/compare_floats.dir/build: unittest/compare_floats + +.PHONY : unittest/CMakeFiles/compare_floats.dir/build + +unittest/CMakeFiles/compare_floats.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && $(CMAKE_COMMAND) -P CMakeFiles/compare_floats.dir/cmake_clean.cmake +.PHONY : unittest/CMakeFiles/compare_floats.dir/clean + +unittest/CMakeFiles/compare_floats.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/unittest /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/unittest /home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/compare_floats.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : unittest/CMakeFiles/compare_floats.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/compare_floats.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/compare_floats.dir/cmake_clean.cmake new file mode 100644 index 0000000..d560229 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/compare_floats.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +file(REMOVE_RECURSE + "CMakeFiles/compare_floats.dir/compare_floats.c.o" + "compare_floats.pdb" + "compare_floats" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/compare_floats.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/compare_floats.dir/compare_floats.c.o b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/compare_floats.dir/compare_floats.c.o new file mode 100644 index 0000000..e7668a2 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/compare_floats.dir/compare_floats.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/compare_floats.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/compare_floats.dir/depend.internal new file mode 100644 index 0000000..bc8a4a4 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/compare_floats.dir/depend.internal @@ -0,0 +1,5 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +unittest/CMakeFiles/compare_floats.dir/compare_floats.c.o + /home/sh/Downloads/hackrf/codec2/unittest/compare_floats.c diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/compare_floats.dir/depend.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/compare_floats.dir/depend.make new file mode 100644 index 0000000..646a523 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/compare_floats.dir/depend.make @@ -0,0 +1,5 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +unittest/CMakeFiles/compare_floats.dir/compare_floats.c.o: ../unittest/compare_floats.c + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/compare_floats.dir/flags.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/compare_floats.dir/flags.make new file mode 100644 index 0000000..92b2429 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/compare_floats.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DFLOATING_POINT -DGIT_HASH=\"df2ed16c\" -DMODEMPROBE_ENABLE -DVAR_ARRAYS -DXXXXX -D_GNU_SOURCE=1 -D__UNITTEST__ + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/unittest/../src + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/compare_floats.dir/link.txt b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/compare_floats.dir/link.txt new file mode 100644 index 0000000..7603e96 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/compare_floats.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/compare_floats.dir/compare_floats.c.o -o compare_floats diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/compare_floats.dir/progress.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/compare_floats.dir/progress.make new file mode 100644 index 0000000..15129b8 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/compare_floats.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = +CMAKE_PROGRESS_2 = 30 + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/compare_ints.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/compare_ints.dir/C.includecache new file mode 100644 index 0000000..9cd5603 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/compare_ints.dir/C.includecache @@ -0,0 +1,20 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +/home/sh/Downloads/hackrf/codec2/unittest/compare_ints.c +stdint.h +- +stdio.h +- +stdlib.h +- +getopt.h +- +errno.h +- + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/compare_ints.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/compare_ints.dir/DependInfo.cmake new file mode 100644 index 0000000..746d724 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/compare_ints.dir/DependInfo.cmake @@ -0,0 +1,33 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/unittest/compare_ints.c" "/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/compare_ints.dir/compare_ints.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "FLOATING_POINT" + "GIT_HASH=\"df2ed16c\"" + "MODEMPROBE_ENABLE" + "VAR_ARRAYS" + "XXXXX" + "_GNU_SOURCE=1" + "__UNITTEST__" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../unittest/../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/compare_ints.dir/build.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/compare_ints.dir/build.make new file mode 100644 index 0000000..1c685ad --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/compare_ints.dir/build.make @@ -0,0 +1,98 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include unittest/CMakeFiles/compare_ints.dir/depend.make + +# Include the progress variables for this target. +include unittest/CMakeFiles/compare_ints.dir/progress.make + +# Include the compile flags for this target's objects. +include unittest/CMakeFiles/compare_ints.dir/flags.make + +unittest/CMakeFiles/compare_ints.dir/compare_ints.c.o: unittest/CMakeFiles/compare_ints.dir/flags.make +unittest/CMakeFiles/compare_ints.dir/compare_ints.c.o: ../unittest/compare_ints.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object unittest/CMakeFiles/compare_ints.dir/compare_ints.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/compare_ints.dir/compare_ints.c.o -c /home/sh/Downloads/hackrf/codec2/unittest/compare_ints.c + +unittest/CMakeFiles/compare_ints.dir/compare_ints.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/compare_ints.dir/compare_ints.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/unittest/compare_ints.c > CMakeFiles/compare_ints.dir/compare_ints.c.i + +unittest/CMakeFiles/compare_ints.dir/compare_ints.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/compare_ints.dir/compare_ints.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/unittest/compare_ints.c -o CMakeFiles/compare_ints.dir/compare_ints.c.s + +# Object files for target compare_ints +compare_ints_OBJECTS = \ +"CMakeFiles/compare_ints.dir/compare_ints.c.o" + +# External object files for target compare_ints +compare_ints_EXTERNAL_OBJECTS = + +unittest/compare_ints: unittest/CMakeFiles/compare_ints.dir/compare_ints.c.o +unittest/compare_ints: unittest/CMakeFiles/compare_ints.dir/build.make +unittest/compare_ints: unittest/CMakeFiles/compare_ints.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking C executable compare_ints" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/compare_ints.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +unittest/CMakeFiles/compare_ints.dir/build: unittest/compare_ints + +.PHONY : unittest/CMakeFiles/compare_ints.dir/build + +unittest/CMakeFiles/compare_ints.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && $(CMAKE_COMMAND) -P CMakeFiles/compare_ints.dir/cmake_clean.cmake +.PHONY : unittest/CMakeFiles/compare_ints.dir/clean + +unittest/CMakeFiles/compare_ints.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/unittest /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/unittest /home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/compare_ints.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : unittest/CMakeFiles/compare_ints.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/compare_ints.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/compare_ints.dir/cmake_clean.cmake new file mode 100644 index 0000000..7c01f32 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/compare_ints.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +file(REMOVE_RECURSE + "CMakeFiles/compare_ints.dir/compare_ints.c.o" + "compare_ints.pdb" + "compare_ints" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/compare_ints.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/compare_ints.dir/compare_ints.c.o b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/compare_ints.dir/compare_ints.c.o new file mode 100644 index 0000000..98f28a3 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/compare_ints.dir/compare_ints.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/compare_ints.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/compare_ints.dir/depend.internal new file mode 100644 index 0000000..5eea894 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/compare_ints.dir/depend.internal @@ -0,0 +1,5 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +unittest/CMakeFiles/compare_ints.dir/compare_ints.c.o + /home/sh/Downloads/hackrf/codec2/unittest/compare_ints.c diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/compare_ints.dir/depend.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/compare_ints.dir/depend.make new file mode 100644 index 0000000..8883b1d --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/compare_ints.dir/depend.make @@ -0,0 +1,5 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +unittest/CMakeFiles/compare_ints.dir/compare_ints.c.o: ../unittest/compare_ints.c + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/compare_ints.dir/flags.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/compare_ints.dir/flags.make new file mode 100644 index 0000000..92b2429 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/compare_ints.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DFLOATING_POINT -DGIT_HASH=\"df2ed16c\" -DMODEMPROBE_ENABLE -DVAR_ARRAYS -DXXXXX -D_GNU_SOURCE=1 -D__UNITTEST__ + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/unittest/../src + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/compare_ints.dir/link.txt b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/compare_ints.dir/link.txt new file mode 100644 index 0000000..7d9304c --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/compare_ints.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/compare_ints.dir/compare_ints.c.o -o compare_ints diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/compare_ints.dir/progress.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/compare_ints.dir/progress.make new file mode 100644 index 0000000..6c287f1 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/compare_ints.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = +CMAKE_PROGRESS_2 = + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/fdmdv_mem.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/fdmdv_mem.dir/C.includecache new file mode 100644 index 0000000..05d4a1e --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/fdmdv_mem.dir/C.includecache @@ -0,0 +1,86 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +../unittest/../src/codec2_fdmdv.h +comp.h +../unittest/../src/comp.h +modem_stats.h +../unittest/../src/modem_stats.h + +../unittest/../src/codec2_fft.h +assert.h +- +stdlib.h +- +stdio.h +- +string.h +- +math.h +- +fdv_arm_math.h +../unittest/../src/fdv_arm_math.h +defines.h +../unittest/../src/defines.h +comp.h +../unittest/../src/comp.h +kiss_fftr.h +../unittest/../src/kiss_fftr.h +kiss_fft.h +../unittest/../src/kiss_fft.h + +../unittest/../src/comp.h + +../unittest/../src/defines.h + +../unittest/../src/fdmdv_internal.h +comp.h +../unittest/../src/comp.h +codec2_fdmdv.h +../unittest/../src/codec2_fdmdv.h +codec2_fft.h +../unittest/../src/codec2_fft.h + +../unittest/../src/kiss_fft.h +stdlib.h +- +stdio.h +- +math.h +- +string.h +- +xmmintrin.h +- +sys/types.h +- + +../unittest/../src/kiss_fftr.h +kiss_fft.h +../unittest/../src/kiss_fft.h + +../unittest/../src/modem_stats.h +comp.h +../unittest/../src/comp.h +kiss_fft.h +../unittest/../src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/unittest/fdmdv_mem.c +assert.h +- +stdio.h +- +stdlib.h +- +string.h +- +math.h +- +fdmdv_internal.h +/home/sh/Downloads/hackrf/codec2/unittest/fdmdv_internal.h + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/fdmdv_mem.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/fdmdv_mem.dir/DependInfo.cmake new file mode 100644 index 0000000..3a44323 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/fdmdv_mem.dir/DependInfo.cmake @@ -0,0 +1,33 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/unittest/fdmdv_mem.c" "/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/fdmdv_mem.dir/fdmdv_mem.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "FLOATING_POINT" + "GIT_HASH=\"df2ed16c\"" + "MODEMPROBE_ENABLE" + "VAR_ARRAYS" + "XXXXX" + "_GNU_SOURCE=1" + "__UNITTEST__" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../unittest/../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/fdmdv_mem.dir/build.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/fdmdv_mem.dir/build.make new file mode 100644 index 0000000..0223156 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/fdmdv_mem.dir/build.make @@ -0,0 +1,98 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include unittest/CMakeFiles/fdmdv_mem.dir/depend.make + +# Include the progress variables for this target. +include unittest/CMakeFiles/fdmdv_mem.dir/progress.make + +# Include the compile flags for this target's objects. +include unittest/CMakeFiles/fdmdv_mem.dir/flags.make + +unittest/CMakeFiles/fdmdv_mem.dir/fdmdv_mem.c.o: unittest/CMakeFiles/fdmdv_mem.dir/flags.make +unittest/CMakeFiles/fdmdv_mem.dir/fdmdv_mem.c.o: ../unittest/fdmdv_mem.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object unittest/CMakeFiles/fdmdv_mem.dir/fdmdv_mem.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/fdmdv_mem.dir/fdmdv_mem.c.o -c /home/sh/Downloads/hackrf/codec2/unittest/fdmdv_mem.c + +unittest/CMakeFiles/fdmdv_mem.dir/fdmdv_mem.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/fdmdv_mem.dir/fdmdv_mem.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/unittest/fdmdv_mem.c > CMakeFiles/fdmdv_mem.dir/fdmdv_mem.c.i + +unittest/CMakeFiles/fdmdv_mem.dir/fdmdv_mem.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/fdmdv_mem.dir/fdmdv_mem.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/unittest/fdmdv_mem.c -o CMakeFiles/fdmdv_mem.dir/fdmdv_mem.c.s + +# Object files for target fdmdv_mem +fdmdv_mem_OBJECTS = \ +"CMakeFiles/fdmdv_mem.dir/fdmdv_mem.c.o" + +# External object files for target fdmdv_mem +fdmdv_mem_EXTERNAL_OBJECTS = + +unittest/fdmdv_mem: unittest/CMakeFiles/fdmdv_mem.dir/fdmdv_mem.c.o +unittest/fdmdv_mem: unittest/CMakeFiles/fdmdv_mem.dir/build.make +unittest/fdmdv_mem: unittest/CMakeFiles/fdmdv_mem.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking C executable fdmdv_mem" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/fdmdv_mem.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +unittest/CMakeFiles/fdmdv_mem.dir/build: unittest/fdmdv_mem + +.PHONY : unittest/CMakeFiles/fdmdv_mem.dir/build + +unittest/CMakeFiles/fdmdv_mem.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && $(CMAKE_COMMAND) -P CMakeFiles/fdmdv_mem.dir/cmake_clean.cmake +.PHONY : unittest/CMakeFiles/fdmdv_mem.dir/clean + +unittest/CMakeFiles/fdmdv_mem.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/unittest /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/unittest /home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/fdmdv_mem.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : unittest/CMakeFiles/fdmdv_mem.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/fdmdv_mem.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/fdmdv_mem.dir/cmake_clean.cmake new file mode 100644 index 0000000..ffd382e --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/fdmdv_mem.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +file(REMOVE_RECURSE + "CMakeFiles/fdmdv_mem.dir/fdmdv_mem.c.o" + "fdmdv_mem.pdb" + "fdmdv_mem" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/fdmdv_mem.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/fdmdv_mem.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/fdmdv_mem.dir/depend.internal new file mode 100644 index 0000000..d194c57 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/fdmdv_mem.dir/depend.internal @@ -0,0 +1,13 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +unittest/CMakeFiles/fdmdv_mem.dir/fdmdv_mem.c.o + ../unittest/../src/codec2_fdmdv.h + ../unittest/../src/codec2_fft.h + ../unittest/../src/comp.h + ../unittest/../src/defines.h + ../unittest/../src/fdmdv_internal.h + ../unittest/../src/kiss_fft.h + ../unittest/../src/kiss_fftr.h + ../unittest/../src/modem_stats.h + /home/sh/Downloads/hackrf/codec2/unittest/fdmdv_mem.c diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/fdmdv_mem.dir/depend.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/fdmdv_mem.dir/depend.make new file mode 100644 index 0000000..8804326 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/fdmdv_mem.dir/depend.make @@ -0,0 +1,13 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +unittest/CMakeFiles/fdmdv_mem.dir/fdmdv_mem.c.o: ../unittest/../src/codec2_fdmdv.h +unittest/CMakeFiles/fdmdv_mem.dir/fdmdv_mem.c.o: ../unittest/../src/codec2_fft.h +unittest/CMakeFiles/fdmdv_mem.dir/fdmdv_mem.c.o: ../unittest/../src/comp.h +unittest/CMakeFiles/fdmdv_mem.dir/fdmdv_mem.c.o: ../unittest/../src/defines.h +unittest/CMakeFiles/fdmdv_mem.dir/fdmdv_mem.c.o: ../unittest/../src/fdmdv_internal.h +unittest/CMakeFiles/fdmdv_mem.dir/fdmdv_mem.c.o: ../unittest/../src/kiss_fft.h +unittest/CMakeFiles/fdmdv_mem.dir/fdmdv_mem.c.o: ../unittest/../src/kiss_fftr.h +unittest/CMakeFiles/fdmdv_mem.dir/fdmdv_mem.c.o: ../unittest/../src/modem_stats.h +unittest/CMakeFiles/fdmdv_mem.dir/fdmdv_mem.c.o: ../unittest/fdmdv_mem.c + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/fdmdv_mem.dir/fdmdv_mem.c.o b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/fdmdv_mem.dir/fdmdv_mem.c.o new file mode 100644 index 0000000..cdd1b47 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/fdmdv_mem.dir/fdmdv_mem.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/fdmdv_mem.dir/flags.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/fdmdv_mem.dir/flags.make new file mode 100644 index 0000000..92b2429 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/fdmdv_mem.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DFLOATING_POINT -DGIT_HASH=\"df2ed16c\" -DMODEMPROBE_ENABLE -DVAR_ARRAYS -DXXXXX -D_GNU_SOURCE=1 -D__UNITTEST__ + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/unittest/../src + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/fdmdv_mem.dir/link.txt b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/fdmdv_mem.dir/link.txt new file mode 100644 index 0000000..07b437b --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/fdmdv_mem.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/fdmdv_mem.dir/fdmdv_mem.c.o -o fdmdv_mem diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/fdmdv_mem.dir/progress.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/fdmdv_mem.dir/progress.make new file mode 100644 index 0000000..cb5873d --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/fdmdv_mem.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = 38 +CMAKE_PROGRESS_2 = + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/function_trace.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/function_trace.dir/C.includecache new file mode 100644 index 0000000..8e54ca9 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/function_trace.dir/C.includecache @@ -0,0 +1,8 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/function_trace.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/function_trace.dir/DependInfo.cmake new file mode 100644 index 0000000..b06f1d8 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/function_trace.dir/DependInfo.cmake @@ -0,0 +1,33 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/unittest/function_trace.c" "/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/function_trace.dir/function_trace.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "FLOATING_POINT" + "GIT_HASH=\"df2ed16c\"" + "MODEMPROBE_ENABLE" + "VAR_ARRAYS" + "XXXXX" + "_GNU_SOURCE=1" + "__UNITTEST__" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../unittest/../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/function_trace.dir/build.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/function_trace.dir/build.make new file mode 100644 index 0000000..150a064 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/function_trace.dir/build.make @@ -0,0 +1,99 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include unittest/CMakeFiles/function_trace.dir/depend.make + +# Include the progress variables for this target. +include unittest/CMakeFiles/function_trace.dir/progress.make + +# Include the compile flags for this target's objects. +include unittest/CMakeFiles/function_trace.dir/flags.make + +unittest/CMakeFiles/function_trace.dir/function_trace.c.o: unittest/CMakeFiles/function_trace.dir/flags.make +unittest/CMakeFiles/function_trace.dir/function_trace.c.o: ../unittest/function_trace.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object unittest/CMakeFiles/function_trace.dir/function_trace.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/function_trace.dir/function_trace.c.o -c /home/sh/Downloads/hackrf/codec2/unittest/function_trace.c + +unittest/CMakeFiles/function_trace.dir/function_trace.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/function_trace.dir/function_trace.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/unittest/function_trace.c > CMakeFiles/function_trace.dir/function_trace.c.i + +unittest/CMakeFiles/function_trace.dir/function_trace.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/function_trace.dir/function_trace.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/unittest/function_trace.c -o CMakeFiles/function_trace.dir/function_trace.c.s + +# Object files for target function_trace +function_trace_OBJECTS = \ +"CMakeFiles/function_trace.dir/function_trace.c.o" + +# External object files for target function_trace +function_trace_EXTERNAL_OBJECTS = + +unittest/libfunction_trace.a: unittest/CMakeFiles/function_trace.dir/function_trace.c.o +unittest/libfunction_trace.a: unittest/CMakeFiles/function_trace.dir/build.make +unittest/libfunction_trace.a: unittest/CMakeFiles/function_trace.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking C static library libfunction_trace.a" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && $(CMAKE_COMMAND) -P CMakeFiles/function_trace.dir/cmake_clean_target.cmake + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/function_trace.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +unittest/CMakeFiles/function_trace.dir/build: unittest/libfunction_trace.a + +.PHONY : unittest/CMakeFiles/function_trace.dir/build + +unittest/CMakeFiles/function_trace.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && $(CMAKE_COMMAND) -P CMakeFiles/function_trace.dir/cmake_clean.cmake +.PHONY : unittest/CMakeFiles/function_trace.dir/clean + +unittest/CMakeFiles/function_trace.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/unittest /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/unittest /home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/function_trace.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : unittest/CMakeFiles/function_trace.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/function_trace.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/function_trace.dir/cmake_clean.cmake new file mode 100644 index 0000000..ef98580 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/function_trace.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +file(REMOVE_RECURSE + "CMakeFiles/function_trace.dir/function_trace.c.o" + "libfunction_trace.pdb" + "libfunction_trace.a" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/function_trace.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/function_trace.dir/cmake_clean_target.cmake b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/function_trace.dir/cmake_clean_target.cmake new file mode 100644 index 0000000..a7c2f56 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/function_trace.dir/cmake_clean_target.cmake @@ -0,0 +1,3 @@ +file(REMOVE_RECURSE + "libfunction_trace.a" +) diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/function_trace.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/function_trace.dir/depend.internal new file mode 100644 index 0000000..e3a39d5 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/function_trace.dir/depend.internal @@ -0,0 +1,5 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +unittest/CMakeFiles/function_trace.dir/function_trace.c.o + /home/sh/Downloads/hackrf/codec2/unittest/function_trace.c diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/function_trace.dir/depend.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/function_trace.dir/depend.make new file mode 100644 index 0000000..7dd52af --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/function_trace.dir/depend.make @@ -0,0 +1,5 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +unittest/CMakeFiles/function_trace.dir/function_trace.c.o: ../unittest/function_trace.c + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/function_trace.dir/flags.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/function_trace.dir/flags.make new file mode 100644 index 0000000..92b2429 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/function_trace.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DFLOATING_POINT -DGIT_HASH=\"df2ed16c\" -DMODEMPROBE_ENABLE -DVAR_ARRAYS -DXXXXX -D_GNU_SOURCE=1 -D__UNITTEST__ + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/unittest/../src + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/function_trace.dir/function_trace.c.o b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/function_trace.dir/function_trace.c.o new file mode 100644 index 0000000..143afc2 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/function_trace.dir/function_trace.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/function_trace.dir/link.txt b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/function_trace.dir/link.txt new file mode 100644 index 0000000..818769a --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/function_trace.dir/link.txt @@ -0,0 +1,2 @@ +/usr/bin/ar qc libfunction_trace.a CMakeFiles/function_trace.dir/function_trace.c.o +/usr/bin/ranlib libfunction_trace.a diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/function_trace.dir/progress.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/function_trace.dir/progress.make new file mode 100644 index 0000000..6c287f1 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/function_trace.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = +CMAKE_PROGRESS_2 = + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_mem.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_mem.dir/C.includecache new file mode 100644 index 0000000..ccc97ab --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_mem.dir/C.includecache @@ -0,0 +1,210 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +../unittest/../src/codec2_ofdm.h +stdbool.h +- +stdint.h +- +comp.h +../unittest/../src/comp.h +modem_stats.h +../unittest/../src/modem_stats.h + +../unittest/../src/comp.h + +../unittest/../src/filter.h +complex.h +- + +../unittest/../src/kiss_fft.h +stdlib.h +- +stdio.h +- +math.h +- +string.h +- +xmmintrin.h +- +sys/types.h +- + +../unittest/../src/modem_stats.h +comp.h +../unittest/../src/comp.h +kiss_fft.h +../unittest/../src/kiss_fft.h + +../unittest/../src/ofdm_internal.h +complex.h +- +stdbool.h +- +stdint.h +- +codec2_ofdm.h +../unittest/../src/codec2_ofdm.h +filter.h +../unittest/../src/filter.h + +/home/sh/Downloads/hackrf/codec2/src/codec2_ofdm.h +stdbool.h +- +stdint.h +- +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +modem_stats.h +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h + +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/debug_alloc.h +stdio.h +- + +/home/sh/Downloads/hackrf/codec2/src/filter.c +stdlib.h +- +string.h +- +math.h +- +complex.h +- +filter.h +/home/sh/Downloads/hackrf/codec2/src/filter.h +filter_coef.h +/home/sh/Downloads/hackrf/codec2/src/filter_coef.h +debug_alloc.h +/home/sh/Downloads/hackrf/codec2/src/debug_alloc.h + +/home/sh/Downloads/hackrf/codec2/src/filter.h +complex.h +- + +/home/sh/Downloads/hackrf/codec2/src/filter_coef.h + +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h +stdlib.h +- +stdio.h +- +math.h +- +string.h +- +xmmintrin.h +- +sys/types.h +- + +/home/sh/Downloads/hackrf/codec2/src/machdep.h + +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/src/mpdecode_core.c +math.h +- +stdlib.h +- +stdint.h +- +stdio.h +- +assert.h +- +mpdecode_core.h +/home/sh/Downloads/hackrf/codec2/src/mpdecode_core.h +phi0.h +/home/sh/Downloads/hackrf/codec2/src/phi0.h +debug_alloc.h +/home/sh/Downloads/hackrf/codec2/src/debug_alloc.h +machdep.h +/home/sh/Downloads/hackrf/codec2/src/machdep.h + +/home/sh/Downloads/hackrf/codec2/src/mpdecode_core.h +stdint.h +- +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/ofdm.c +stdio.h +- +stdlib.h +- +stdbool.h +- +stdint.h +- +string.h +- +math.h +- +assert.h +- +complex.h +- +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +ofdm_internal.h +/home/sh/Downloads/hackrf/codec2/src/ofdm_internal.h +codec2_ofdm.h +/home/sh/Downloads/hackrf/codec2/src/codec2_ofdm.h +filter.h +/home/sh/Downloads/hackrf/codec2/src/filter.h +wval.h +/home/sh/Downloads/hackrf/codec2/src/wval.h +debug_alloc.h +/home/sh/Downloads/hackrf/codec2/src/debug_alloc.h +machdep.h +/home/sh/Downloads/hackrf/codec2/src/machdep.h + +/home/sh/Downloads/hackrf/codec2/src/ofdm_internal.h +complex.h +- +stdbool.h +- +stdint.h +- +codec2_ofdm.h +/home/sh/Downloads/hackrf/codec2/src/codec2_ofdm.h +filter.h +/home/sh/Downloads/hackrf/codec2/src/filter.h + +/home/sh/Downloads/hackrf/codec2/src/phi0.h + +/home/sh/Downloads/hackrf/codec2/src/wval.h +complex.h +- + +/home/sh/Downloads/hackrf/codec2/unittest/ofdm_mem.c +assert.h +- +stdio.h +- +stdlib.h +- +string.h +- +math.h +- +complex.h +- +codec2_ofdm.h +/home/sh/Downloads/hackrf/codec2/unittest/codec2_ofdm.h +ofdm_internal.h +/home/sh/Downloads/hackrf/codec2/unittest/ofdm_internal.h + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_mem.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_mem.dir/DependInfo.cmake new file mode 100644 index 0000000..345b75d --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_mem.dir/DependInfo.cmake @@ -0,0 +1,40 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/src/filter.c" "/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/ofdm_mem.dir/__/src/filter.c.o" + "/home/sh/Downloads/hackrf/codec2/src/kiss_fft.c" "/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/ofdm_mem.dir/__/src/kiss_fft.c.o" + "/home/sh/Downloads/hackrf/codec2/src/modem_probe.c" "/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/ofdm_mem.dir/__/src/modem_probe.c.o" + "/home/sh/Downloads/hackrf/codec2/src/mpdecode_core.c" "/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/ofdm_mem.dir/__/src/mpdecode_core.c.o" + "/home/sh/Downloads/hackrf/codec2/src/octave.c" "/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/ofdm_mem.dir/__/src/octave.c.o" + "/home/sh/Downloads/hackrf/codec2/src/ofdm.c" "/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/ofdm_mem.dir/__/src/ofdm.c.o" + "/home/sh/Downloads/hackrf/codec2/src/phi0.c" "/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/ofdm_mem.dir/__/src/phi0.c.o" + "/home/sh/Downloads/hackrf/codec2/unittest/ofdm_mem.c" "/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/ofdm_mem.dir/ofdm_mem.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "FLOATING_POINT" + "GIT_HASH=\"df2ed16c\"" + "MODEMPROBE_ENABLE" + "VAR_ARRAYS" + "XXXXX" + "_GNU_SOURCE=1" + "__UNITTEST__" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../unittest/../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_mem.dir/__/src/filter.c.o b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_mem.dir/__/src/filter.c.o new file mode 100644 index 0000000..a0dad56 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_mem.dir/__/src/filter.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_mem.dir/__/src/kiss_fft.c.o b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_mem.dir/__/src/kiss_fft.c.o new file mode 100644 index 0000000..4899080 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_mem.dir/__/src/kiss_fft.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_mem.dir/__/src/modem_probe.c.o b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_mem.dir/__/src/modem_probe.c.o new file mode 100644 index 0000000..2ba1acf Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_mem.dir/__/src/modem_probe.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_mem.dir/__/src/mpdecode_core.c.o b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_mem.dir/__/src/mpdecode_core.c.o new file mode 100644 index 0000000..7b33683 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_mem.dir/__/src/mpdecode_core.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_mem.dir/__/src/octave.c.o b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_mem.dir/__/src/octave.c.o new file mode 100644 index 0000000..e187c72 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_mem.dir/__/src/octave.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_mem.dir/__/src/ofdm.c.o b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_mem.dir/__/src/ofdm.c.o new file mode 100644 index 0000000..ba0d46b Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_mem.dir/__/src/ofdm.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_mem.dir/__/src/phi0.c.o b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_mem.dir/__/src/phi0.c.o new file mode 100644 index 0000000..ec58b09 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_mem.dir/__/src/phi0.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_mem.dir/build.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_mem.dir/build.make new file mode 100644 index 0000000..913b4cd --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_mem.dir/build.make @@ -0,0 +1,203 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include unittest/CMakeFiles/ofdm_mem.dir/depend.make + +# Include the progress variables for this target. +include unittest/CMakeFiles/ofdm_mem.dir/progress.make + +# Include the compile flags for this target's objects. +include unittest/CMakeFiles/ofdm_mem.dir/flags.make + +unittest/CMakeFiles/ofdm_mem.dir/ofdm_mem.c.o: unittest/CMakeFiles/ofdm_mem.dir/flags.make +unittest/CMakeFiles/ofdm_mem.dir/ofdm_mem.c.o: ../unittest/ofdm_mem.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object unittest/CMakeFiles/ofdm_mem.dir/ofdm_mem.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/ofdm_mem.dir/ofdm_mem.c.o -c /home/sh/Downloads/hackrf/codec2/unittest/ofdm_mem.c + +unittest/CMakeFiles/ofdm_mem.dir/ofdm_mem.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/ofdm_mem.dir/ofdm_mem.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/unittest/ofdm_mem.c > CMakeFiles/ofdm_mem.dir/ofdm_mem.c.i + +unittest/CMakeFiles/ofdm_mem.dir/ofdm_mem.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/ofdm_mem.dir/ofdm_mem.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/unittest/ofdm_mem.c -o CMakeFiles/ofdm_mem.dir/ofdm_mem.c.s + +unittest/CMakeFiles/ofdm_mem.dir/__/src/ofdm.c.o: unittest/CMakeFiles/ofdm_mem.dir/flags.make +unittest/CMakeFiles/ofdm_mem.dir/__/src/ofdm.c.o: ../src/ofdm.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Building C object unittest/CMakeFiles/ofdm_mem.dir/__/src/ofdm.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/ofdm_mem.dir/__/src/ofdm.c.o -c /home/sh/Downloads/hackrf/codec2/src/ofdm.c + +unittest/CMakeFiles/ofdm_mem.dir/__/src/ofdm.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/ofdm_mem.dir/__/src/ofdm.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/ofdm.c > CMakeFiles/ofdm_mem.dir/__/src/ofdm.c.i + +unittest/CMakeFiles/ofdm_mem.dir/__/src/ofdm.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/ofdm_mem.dir/__/src/ofdm.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/ofdm.c -o CMakeFiles/ofdm_mem.dir/__/src/ofdm.c.s + +unittest/CMakeFiles/ofdm_mem.dir/__/src/octave.c.o: unittest/CMakeFiles/ofdm_mem.dir/flags.make +unittest/CMakeFiles/ofdm_mem.dir/__/src/octave.c.o: ../src/octave.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_3) "Building C object unittest/CMakeFiles/ofdm_mem.dir/__/src/octave.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/ofdm_mem.dir/__/src/octave.c.o -c /home/sh/Downloads/hackrf/codec2/src/octave.c + +unittest/CMakeFiles/ofdm_mem.dir/__/src/octave.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/ofdm_mem.dir/__/src/octave.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/octave.c > CMakeFiles/ofdm_mem.dir/__/src/octave.c.i + +unittest/CMakeFiles/ofdm_mem.dir/__/src/octave.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/ofdm_mem.dir/__/src/octave.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/octave.c -o CMakeFiles/ofdm_mem.dir/__/src/octave.c.s + +unittest/CMakeFiles/ofdm_mem.dir/__/src/kiss_fft.c.o: unittest/CMakeFiles/ofdm_mem.dir/flags.make +unittest/CMakeFiles/ofdm_mem.dir/__/src/kiss_fft.c.o: ../src/kiss_fft.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_4) "Building C object unittest/CMakeFiles/ofdm_mem.dir/__/src/kiss_fft.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/ofdm_mem.dir/__/src/kiss_fft.c.o -c /home/sh/Downloads/hackrf/codec2/src/kiss_fft.c + +unittest/CMakeFiles/ofdm_mem.dir/__/src/kiss_fft.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/ofdm_mem.dir/__/src/kiss_fft.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/kiss_fft.c > CMakeFiles/ofdm_mem.dir/__/src/kiss_fft.c.i + +unittest/CMakeFiles/ofdm_mem.dir/__/src/kiss_fft.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/ofdm_mem.dir/__/src/kiss_fft.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/kiss_fft.c -o CMakeFiles/ofdm_mem.dir/__/src/kiss_fft.c.s + +unittest/CMakeFiles/ofdm_mem.dir/__/src/modem_probe.c.o: unittest/CMakeFiles/ofdm_mem.dir/flags.make +unittest/CMakeFiles/ofdm_mem.dir/__/src/modem_probe.c.o: ../src/modem_probe.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_5) "Building C object unittest/CMakeFiles/ofdm_mem.dir/__/src/modem_probe.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/ofdm_mem.dir/__/src/modem_probe.c.o -c /home/sh/Downloads/hackrf/codec2/src/modem_probe.c + +unittest/CMakeFiles/ofdm_mem.dir/__/src/modem_probe.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/ofdm_mem.dir/__/src/modem_probe.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/modem_probe.c > CMakeFiles/ofdm_mem.dir/__/src/modem_probe.c.i + +unittest/CMakeFiles/ofdm_mem.dir/__/src/modem_probe.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/ofdm_mem.dir/__/src/modem_probe.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/modem_probe.c -o CMakeFiles/ofdm_mem.dir/__/src/modem_probe.c.s + +unittest/CMakeFiles/ofdm_mem.dir/__/src/mpdecode_core.c.o: unittest/CMakeFiles/ofdm_mem.dir/flags.make +unittest/CMakeFiles/ofdm_mem.dir/__/src/mpdecode_core.c.o: ../src/mpdecode_core.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_6) "Building C object unittest/CMakeFiles/ofdm_mem.dir/__/src/mpdecode_core.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/ofdm_mem.dir/__/src/mpdecode_core.c.o -c /home/sh/Downloads/hackrf/codec2/src/mpdecode_core.c + +unittest/CMakeFiles/ofdm_mem.dir/__/src/mpdecode_core.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/ofdm_mem.dir/__/src/mpdecode_core.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/mpdecode_core.c > CMakeFiles/ofdm_mem.dir/__/src/mpdecode_core.c.i + +unittest/CMakeFiles/ofdm_mem.dir/__/src/mpdecode_core.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/ofdm_mem.dir/__/src/mpdecode_core.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/mpdecode_core.c -o CMakeFiles/ofdm_mem.dir/__/src/mpdecode_core.c.s + +unittest/CMakeFiles/ofdm_mem.dir/__/src/phi0.c.o: unittest/CMakeFiles/ofdm_mem.dir/flags.make +unittest/CMakeFiles/ofdm_mem.dir/__/src/phi0.c.o: ../src/phi0.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_7) "Building C object unittest/CMakeFiles/ofdm_mem.dir/__/src/phi0.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/ofdm_mem.dir/__/src/phi0.c.o -c /home/sh/Downloads/hackrf/codec2/src/phi0.c + +unittest/CMakeFiles/ofdm_mem.dir/__/src/phi0.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/ofdm_mem.dir/__/src/phi0.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/phi0.c > CMakeFiles/ofdm_mem.dir/__/src/phi0.c.i + +unittest/CMakeFiles/ofdm_mem.dir/__/src/phi0.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/ofdm_mem.dir/__/src/phi0.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/phi0.c -o CMakeFiles/ofdm_mem.dir/__/src/phi0.c.s + +unittest/CMakeFiles/ofdm_mem.dir/__/src/filter.c.o: unittest/CMakeFiles/ofdm_mem.dir/flags.make +unittest/CMakeFiles/ofdm_mem.dir/__/src/filter.c.o: ../src/filter.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_8) "Building C object unittest/CMakeFiles/ofdm_mem.dir/__/src/filter.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/ofdm_mem.dir/__/src/filter.c.o -c /home/sh/Downloads/hackrf/codec2/src/filter.c + +unittest/CMakeFiles/ofdm_mem.dir/__/src/filter.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/ofdm_mem.dir/__/src/filter.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/filter.c > CMakeFiles/ofdm_mem.dir/__/src/filter.c.i + +unittest/CMakeFiles/ofdm_mem.dir/__/src/filter.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/ofdm_mem.dir/__/src/filter.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/filter.c -o CMakeFiles/ofdm_mem.dir/__/src/filter.c.s + +# Object files for target ofdm_mem +ofdm_mem_OBJECTS = \ +"CMakeFiles/ofdm_mem.dir/ofdm_mem.c.o" \ +"CMakeFiles/ofdm_mem.dir/__/src/ofdm.c.o" \ +"CMakeFiles/ofdm_mem.dir/__/src/octave.c.o" \ +"CMakeFiles/ofdm_mem.dir/__/src/kiss_fft.c.o" \ +"CMakeFiles/ofdm_mem.dir/__/src/modem_probe.c.o" \ +"CMakeFiles/ofdm_mem.dir/__/src/mpdecode_core.c.o" \ +"CMakeFiles/ofdm_mem.dir/__/src/phi0.c.o" \ +"CMakeFiles/ofdm_mem.dir/__/src/filter.c.o" + +# External object files for target ofdm_mem +ofdm_mem_EXTERNAL_OBJECTS = + +unittest/ofdm_mem: unittest/CMakeFiles/ofdm_mem.dir/ofdm_mem.c.o +unittest/ofdm_mem: unittest/CMakeFiles/ofdm_mem.dir/__/src/ofdm.c.o +unittest/ofdm_mem: unittest/CMakeFiles/ofdm_mem.dir/__/src/octave.c.o +unittest/ofdm_mem: unittest/CMakeFiles/ofdm_mem.dir/__/src/kiss_fft.c.o +unittest/ofdm_mem: unittest/CMakeFiles/ofdm_mem.dir/__/src/modem_probe.c.o +unittest/ofdm_mem: unittest/CMakeFiles/ofdm_mem.dir/__/src/mpdecode_core.c.o +unittest/ofdm_mem: unittest/CMakeFiles/ofdm_mem.dir/__/src/phi0.c.o +unittest/ofdm_mem: unittest/CMakeFiles/ofdm_mem.dir/__/src/filter.c.o +unittest/ofdm_mem: unittest/CMakeFiles/ofdm_mem.dir/build.make +unittest/ofdm_mem: unittest/CMakeFiles/ofdm_mem.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_9) "Linking C executable ofdm_mem" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/ofdm_mem.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +unittest/CMakeFiles/ofdm_mem.dir/build: unittest/ofdm_mem + +.PHONY : unittest/CMakeFiles/ofdm_mem.dir/build + +unittest/CMakeFiles/ofdm_mem.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && $(CMAKE_COMMAND) -P CMakeFiles/ofdm_mem.dir/cmake_clean.cmake +.PHONY : unittest/CMakeFiles/ofdm_mem.dir/clean + +unittest/CMakeFiles/ofdm_mem.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/unittest /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/unittest /home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/ofdm_mem.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : unittest/CMakeFiles/ofdm_mem.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_mem.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_mem.dir/cmake_clean.cmake new file mode 100644 index 0000000..e066743 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_mem.dir/cmake_clean.cmake @@ -0,0 +1,17 @@ +file(REMOVE_RECURSE + "CMakeFiles/ofdm_mem.dir/ofdm_mem.c.o" + "CMakeFiles/ofdm_mem.dir/__/src/ofdm.c.o" + "CMakeFiles/ofdm_mem.dir/__/src/octave.c.o" + "CMakeFiles/ofdm_mem.dir/__/src/kiss_fft.c.o" + "CMakeFiles/ofdm_mem.dir/__/src/modem_probe.c.o" + "CMakeFiles/ofdm_mem.dir/__/src/mpdecode_core.c.o" + "CMakeFiles/ofdm_mem.dir/__/src/phi0.c.o" + "CMakeFiles/ofdm_mem.dir/__/src/filter.c.o" + "ofdm_mem.pdb" + "ofdm_mem" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/ofdm_mem.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_mem.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_mem.dir/depend.internal new file mode 100644 index 0000000..c720193 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_mem.dir/depend.internal @@ -0,0 +1,48 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +unittest/CMakeFiles/ofdm_mem.dir/__/src/filter.c.o + /home/sh/Downloads/hackrf/codec2/src/debug_alloc.h + /home/sh/Downloads/hackrf/codec2/src/filter.c + /home/sh/Downloads/hackrf/codec2/src/filter.h + /home/sh/Downloads/hackrf/codec2/src/filter_coef.h +unittest/CMakeFiles/ofdm_mem.dir/__/src/kiss_fft.c.o + /home/sh/Downloads/hackrf/codec2/src/_kiss_fft_guts.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.c + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h +unittest/CMakeFiles/ofdm_mem.dir/__/src/modem_probe.c.o + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/modem_probe.c + /home/sh/Downloads/hackrf/codec2/src/octave.h +unittest/CMakeFiles/ofdm_mem.dir/__/src/mpdecode_core.c.o + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/debug_alloc.h + /home/sh/Downloads/hackrf/codec2/src/machdep.h + /home/sh/Downloads/hackrf/codec2/src/mpdecode_core.c + /home/sh/Downloads/hackrf/codec2/src/mpdecode_core.h + /home/sh/Downloads/hackrf/codec2/src/phi0.h +unittest/CMakeFiles/ofdm_mem.dir/__/src/octave.c.o + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/octave.c + /home/sh/Downloads/hackrf/codec2/src/octave.h +unittest/CMakeFiles/ofdm_mem.dir/__/src/ofdm.c.o + /home/sh/Downloads/hackrf/codec2/src/codec2_ofdm.h + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/debug_alloc.h + /home/sh/Downloads/hackrf/codec2/src/filter.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/machdep.h + /home/sh/Downloads/hackrf/codec2/src/modem_stats.h + /home/sh/Downloads/hackrf/codec2/src/ofdm.c + /home/sh/Downloads/hackrf/codec2/src/ofdm_internal.h + /home/sh/Downloads/hackrf/codec2/src/wval.h +unittest/CMakeFiles/ofdm_mem.dir/__/src/phi0.c.o + /home/sh/Downloads/hackrf/codec2/src/phi0.c +unittest/CMakeFiles/ofdm_mem.dir/ofdm_mem.c.o + ../unittest/../src/codec2_ofdm.h + ../unittest/../src/comp.h + ../unittest/../src/filter.h + ../unittest/../src/kiss_fft.h + ../unittest/../src/modem_stats.h + ../unittest/../src/ofdm_internal.h + /home/sh/Downloads/hackrf/codec2/unittest/ofdm_mem.c diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_mem.dir/depend.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_mem.dir/depend.make new file mode 100644 index 0000000..1eedbfd --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_mem.dir/depend.make @@ -0,0 +1,48 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +unittest/CMakeFiles/ofdm_mem.dir/__/src/filter.c.o: ../src/debug_alloc.h +unittest/CMakeFiles/ofdm_mem.dir/__/src/filter.c.o: ../src/filter.c +unittest/CMakeFiles/ofdm_mem.dir/__/src/filter.c.o: ../src/filter.h +unittest/CMakeFiles/ofdm_mem.dir/__/src/filter.c.o: ../src/filter_coef.h + +unittest/CMakeFiles/ofdm_mem.dir/__/src/kiss_fft.c.o: ../src/_kiss_fft_guts.h +unittest/CMakeFiles/ofdm_mem.dir/__/src/kiss_fft.c.o: ../src/kiss_fft.c +unittest/CMakeFiles/ofdm_mem.dir/__/src/kiss_fft.c.o: ../src/kiss_fft.h + +unittest/CMakeFiles/ofdm_mem.dir/__/src/modem_probe.c.o: ../src/comp.h +unittest/CMakeFiles/ofdm_mem.dir/__/src/modem_probe.c.o: ../src/modem_probe.c +unittest/CMakeFiles/ofdm_mem.dir/__/src/modem_probe.c.o: ../src/octave.h + +unittest/CMakeFiles/ofdm_mem.dir/__/src/mpdecode_core.c.o: ../src/comp.h +unittest/CMakeFiles/ofdm_mem.dir/__/src/mpdecode_core.c.o: ../src/debug_alloc.h +unittest/CMakeFiles/ofdm_mem.dir/__/src/mpdecode_core.c.o: ../src/machdep.h +unittest/CMakeFiles/ofdm_mem.dir/__/src/mpdecode_core.c.o: ../src/mpdecode_core.c +unittest/CMakeFiles/ofdm_mem.dir/__/src/mpdecode_core.c.o: ../src/mpdecode_core.h +unittest/CMakeFiles/ofdm_mem.dir/__/src/mpdecode_core.c.o: ../src/phi0.h + +unittest/CMakeFiles/ofdm_mem.dir/__/src/octave.c.o: ../src/comp.h +unittest/CMakeFiles/ofdm_mem.dir/__/src/octave.c.o: ../src/octave.c +unittest/CMakeFiles/ofdm_mem.dir/__/src/octave.c.o: ../src/octave.h + +unittest/CMakeFiles/ofdm_mem.dir/__/src/ofdm.c.o: ../src/codec2_ofdm.h +unittest/CMakeFiles/ofdm_mem.dir/__/src/ofdm.c.o: ../src/comp.h +unittest/CMakeFiles/ofdm_mem.dir/__/src/ofdm.c.o: ../src/debug_alloc.h +unittest/CMakeFiles/ofdm_mem.dir/__/src/ofdm.c.o: ../src/filter.h +unittest/CMakeFiles/ofdm_mem.dir/__/src/ofdm.c.o: ../src/kiss_fft.h +unittest/CMakeFiles/ofdm_mem.dir/__/src/ofdm.c.o: ../src/machdep.h +unittest/CMakeFiles/ofdm_mem.dir/__/src/ofdm.c.o: ../src/modem_stats.h +unittest/CMakeFiles/ofdm_mem.dir/__/src/ofdm.c.o: ../src/ofdm.c +unittest/CMakeFiles/ofdm_mem.dir/__/src/ofdm.c.o: ../src/ofdm_internal.h +unittest/CMakeFiles/ofdm_mem.dir/__/src/ofdm.c.o: ../src/wval.h + +unittest/CMakeFiles/ofdm_mem.dir/__/src/phi0.c.o: ../src/phi0.c + +unittest/CMakeFiles/ofdm_mem.dir/ofdm_mem.c.o: ../unittest/../src/codec2_ofdm.h +unittest/CMakeFiles/ofdm_mem.dir/ofdm_mem.c.o: ../unittest/../src/comp.h +unittest/CMakeFiles/ofdm_mem.dir/ofdm_mem.c.o: ../unittest/../src/filter.h +unittest/CMakeFiles/ofdm_mem.dir/ofdm_mem.c.o: ../unittest/../src/kiss_fft.h +unittest/CMakeFiles/ofdm_mem.dir/ofdm_mem.c.o: ../unittest/../src/modem_stats.h +unittest/CMakeFiles/ofdm_mem.dir/ofdm_mem.c.o: ../unittest/../src/ofdm_internal.h +unittest/CMakeFiles/ofdm_mem.dir/ofdm_mem.c.o: ../unittest/ofdm_mem.c + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_mem.dir/flags.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_mem.dir/flags.make new file mode 100644 index 0000000..92b2429 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_mem.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DFLOATING_POINT -DGIT_HASH=\"df2ed16c\" -DMODEMPROBE_ENABLE -DVAR_ARRAYS -DXXXXX -D_GNU_SOURCE=1 -D__UNITTEST__ + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/unittest/../src + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_mem.dir/link.txt b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_mem.dir/link.txt new file mode 100644 index 0000000..acf2d86 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_mem.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/ofdm_mem.dir/ofdm_mem.c.o CMakeFiles/ofdm_mem.dir/__/src/ofdm.c.o CMakeFiles/ofdm_mem.dir/__/src/octave.c.o CMakeFiles/ofdm_mem.dir/__/src/kiss_fft.c.o CMakeFiles/ofdm_mem.dir/__/src/modem_probe.c.o CMakeFiles/ofdm_mem.dir/__/src/mpdecode_core.c.o CMakeFiles/ofdm_mem.dir/__/src/phi0.c.o CMakeFiles/ofdm_mem.dir/__/src/filter.c.o -o ofdm_mem -lm diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_mem.dir/ofdm_mem.c.o b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_mem.dir/ofdm_mem.c.o new file mode 100644 index 0000000..c5f7982 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_mem.dir/ofdm_mem.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_mem.dir/progress.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_mem.dir/progress.make new file mode 100644 index 0000000..9401160 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_mem.dir/progress.make @@ -0,0 +1,10 @@ +CMAKE_PROGRESS_1 = +CMAKE_PROGRESS_2 = 62 +CMAKE_PROGRESS_3 = +CMAKE_PROGRESS_4 = +CMAKE_PROGRESS_5 = 63 +CMAKE_PROGRESS_6 = +CMAKE_PROGRESS_7 = +CMAKE_PROGRESS_8 = 64 +CMAKE_PROGRESS_9 = + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_stack.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_stack.dir/C.includecache new file mode 100644 index 0000000..5b95945 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_stack.dir/C.includecache @@ -0,0 +1,224 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +../unittest/../src/codec2_ofdm.h +stdbool.h +- +stdint.h +- +comp.h +../unittest/../src/comp.h +modem_stats.h +../unittest/../src/modem_stats.h + +../unittest/../src/comp.h + +../unittest/../src/filter.h +complex.h +- + +../unittest/../src/kiss_fft.h +stdlib.h +- +stdio.h +- +math.h +- +string.h +- +xmmintrin.h +- +sys/types.h +- + +../unittest/../src/modem_stats.h +comp.h +../unittest/../src/comp.h +kiss_fft.h +../unittest/../src/kiss_fft.h + +../unittest/../src/mpdecode_core.h +stdint.h +- +comp.h +../unittest/../src/comp.h + +../unittest/../src/ofdm_internal.h +complex.h +- +stdbool.h +- +stdint.h +- +codec2_ofdm.h +../unittest/../src/codec2_ofdm.h +filter.h +../unittest/../src/filter.h + +../unittest/../src/test_bits_ofdm.h + +/home/sh/Downloads/hackrf/codec2/src/codec2_ofdm.h +stdbool.h +- +stdint.h +- +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +modem_stats.h +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h + +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/debug_alloc.h +stdio.h +- + +/home/sh/Downloads/hackrf/codec2/src/filter.c +stdlib.h +- +string.h +- +math.h +- +complex.h +- +filter.h +/home/sh/Downloads/hackrf/codec2/src/filter.h +filter_coef.h +/home/sh/Downloads/hackrf/codec2/src/filter_coef.h +debug_alloc.h +/home/sh/Downloads/hackrf/codec2/src/debug_alloc.h + +/home/sh/Downloads/hackrf/codec2/src/filter.h +complex.h +- + +/home/sh/Downloads/hackrf/codec2/src/filter_coef.h + +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h +stdlib.h +- +stdio.h +- +math.h +- +string.h +- +xmmintrin.h +- +sys/types.h +- + +/home/sh/Downloads/hackrf/codec2/src/machdep.h + +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/src/mpdecode_core.c +math.h +- +stdlib.h +- +stdint.h +- +stdio.h +- +assert.h +- +mpdecode_core.h +/home/sh/Downloads/hackrf/codec2/src/mpdecode_core.h +phi0.h +/home/sh/Downloads/hackrf/codec2/src/phi0.h +debug_alloc.h +/home/sh/Downloads/hackrf/codec2/src/debug_alloc.h +machdep.h +/home/sh/Downloads/hackrf/codec2/src/machdep.h + +/home/sh/Downloads/hackrf/codec2/src/mpdecode_core.h +stdint.h +- +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/ofdm.c +stdio.h +- +stdlib.h +- +stdbool.h +- +stdint.h +- +string.h +- +math.h +- +assert.h +- +complex.h +- +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +ofdm_internal.h +/home/sh/Downloads/hackrf/codec2/src/ofdm_internal.h +codec2_ofdm.h +/home/sh/Downloads/hackrf/codec2/src/codec2_ofdm.h +filter.h +/home/sh/Downloads/hackrf/codec2/src/filter.h +wval.h +/home/sh/Downloads/hackrf/codec2/src/wval.h +debug_alloc.h +/home/sh/Downloads/hackrf/codec2/src/debug_alloc.h +machdep.h +/home/sh/Downloads/hackrf/codec2/src/machdep.h + +/home/sh/Downloads/hackrf/codec2/src/ofdm_internal.h +complex.h +- +stdbool.h +- +stdint.h +- +codec2_ofdm.h +/home/sh/Downloads/hackrf/codec2/src/codec2_ofdm.h +filter.h +/home/sh/Downloads/hackrf/codec2/src/filter.h + +/home/sh/Downloads/hackrf/codec2/src/phi0.h + +/home/sh/Downloads/hackrf/codec2/src/wval.h +complex.h +- + +/home/sh/Downloads/hackrf/codec2/unittest/ofdm_stack.c +stdio.h +- +stdlib.h +- +string.h +- +complex.h +- +unistd.h +- +assert.h +- +comp.h +/home/sh/Downloads/hackrf/codec2/unittest/comp.h +ofdm_internal.h +/home/sh/Downloads/hackrf/codec2/unittest/ofdm_internal.h +codec2_ofdm.h +/home/sh/Downloads/hackrf/codec2/unittest/codec2_ofdm.h +test_bits_ofdm.h +/home/sh/Downloads/hackrf/codec2/unittest/test_bits_ofdm.h +mpdecode_core.h +/home/sh/Downloads/hackrf/codec2/unittest/mpdecode_core.h + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_stack.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_stack.dir/DependInfo.cmake new file mode 100644 index 0000000..f56e130 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_stack.dir/DependInfo.cmake @@ -0,0 +1,41 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/src/filter.c" "/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/ofdm_stack.dir/__/src/filter.c.o" + "/home/sh/Downloads/hackrf/codec2/src/kiss_fft.c" "/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/ofdm_stack.dir/__/src/kiss_fft.c.o" + "/home/sh/Downloads/hackrf/codec2/src/modem_probe.c" "/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/ofdm_stack.dir/__/src/modem_probe.c.o" + "/home/sh/Downloads/hackrf/codec2/src/mpdecode_core.c" "/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/ofdm_stack.dir/__/src/mpdecode_core.c.o" + "/home/sh/Downloads/hackrf/codec2/src/octave.c" "/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/ofdm_stack.dir/__/src/octave.c.o" + "/home/sh/Downloads/hackrf/codec2/src/ofdm.c" "/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/ofdm_stack.dir/__/src/ofdm.c.o" + "/home/sh/Downloads/hackrf/codec2/src/phi0.c" "/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/ofdm_stack.dir/__/src/phi0.c.o" + "/home/sh/Downloads/hackrf/codec2/unittest/ofdm_stack.c" "/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/ofdm_stack.dir/ofdm_stack.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "FLOATING_POINT" + "GIT_HASH=\"df2ed16c\"" + "MODEMPROBE_ENABLE" + "VAR_ARRAYS" + "XXXXX" + "_GNU_SOURCE=1" + "__UNITTEST__" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../unittest/../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + "/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/function_trace.dir/DependInfo.cmake" + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_stack.dir/__/src/filter.c.o b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_stack.dir/__/src/filter.c.o new file mode 100644 index 0000000..e7afa86 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_stack.dir/__/src/filter.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_stack.dir/__/src/kiss_fft.c.o b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_stack.dir/__/src/kiss_fft.c.o new file mode 100644 index 0000000..a3e4eff Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_stack.dir/__/src/kiss_fft.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_stack.dir/__/src/modem_probe.c.o b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_stack.dir/__/src/modem_probe.c.o new file mode 100644 index 0000000..6602592 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_stack.dir/__/src/modem_probe.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_stack.dir/__/src/mpdecode_core.c.o b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_stack.dir/__/src/mpdecode_core.c.o new file mode 100644 index 0000000..1bbca17 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_stack.dir/__/src/mpdecode_core.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_stack.dir/__/src/octave.c.o b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_stack.dir/__/src/octave.c.o new file mode 100644 index 0000000..0a385dc Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_stack.dir/__/src/octave.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_stack.dir/__/src/ofdm.c.o b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_stack.dir/__/src/ofdm.c.o new file mode 100644 index 0000000..cbacb81 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_stack.dir/__/src/ofdm.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_stack.dir/__/src/phi0.c.o b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_stack.dir/__/src/phi0.c.o new file mode 100644 index 0000000..14154f5 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_stack.dir/__/src/phi0.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_stack.dir/build.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_stack.dir/build.make new file mode 100644 index 0000000..f9b42cc --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_stack.dir/build.make @@ -0,0 +1,204 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include unittest/CMakeFiles/ofdm_stack.dir/depend.make + +# Include the progress variables for this target. +include unittest/CMakeFiles/ofdm_stack.dir/progress.make + +# Include the compile flags for this target's objects. +include unittest/CMakeFiles/ofdm_stack.dir/flags.make + +unittest/CMakeFiles/ofdm_stack.dir/ofdm_stack.c.o: unittest/CMakeFiles/ofdm_stack.dir/flags.make +unittest/CMakeFiles/ofdm_stack.dir/ofdm_stack.c.o: ../unittest/ofdm_stack.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object unittest/CMakeFiles/ofdm_stack.dir/ofdm_stack.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/ofdm_stack.dir/ofdm_stack.c.o -c /home/sh/Downloads/hackrf/codec2/unittest/ofdm_stack.c + +unittest/CMakeFiles/ofdm_stack.dir/ofdm_stack.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/ofdm_stack.dir/ofdm_stack.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/unittest/ofdm_stack.c > CMakeFiles/ofdm_stack.dir/ofdm_stack.c.i + +unittest/CMakeFiles/ofdm_stack.dir/ofdm_stack.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/ofdm_stack.dir/ofdm_stack.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/unittest/ofdm_stack.c -o CMakeFiles/ofdm_stack.dir/ofdm_stack.c.s + +unittest/CMakeFiles/ofdm_stack.dir/__/src/ofdm.c.o: unittest/CMakeFiles/ofdm_stack.dir/flags.make +unittest/CMakeFiles/ofdm_stack.dir/__/src/ofdm.c.o: ../src/ofdm.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Building C object unittest/CMakeFiles/ofdm_stack.dir/__/src/ofdm.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/ofdm_stack.dir/__/src/ofdm.c.o -c /home/sh/Downloads/hackrf/codec2/src/ofdm.c + +unittest/CMakeFiles/ofdm_stack.dir/__/src/ofdm.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/ofdm_stack.dir/__/src/ofdm.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/ofdm.c > CMakeFiles/ofdm_stack.dir/__/src/ofdm.c.i + +unittest/CMakeFiles/ofdm_stack.dir/__/src/ofdm.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/ofdm_stack.dir/__/src/ofdm.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/ofdm.c -o CMakeFiles/ofdm_stack.dir/__/src/ofdm.c.s + +unittest/CMakeFiles/ofdm_stack.dir/__/src/octave.c.o: unittest/CMakeFiles/ofdm_stack.dir/flags.make +unittest/CMakeFiles/ofdm_stack.dir/__/src/octave.c.o: ../src/octave.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_3) "Building C object unittest/CMakeFiles/ofdm_stack.dir/__/src/octave.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/ofdm_stack.dir/__/src/octave.c.o -c /home/sh/Downloads/hackrf/codec2/src/octave.c + +unittest/CMakeFiles/ofdm_stack.dir/__/src/octave.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/ofdm_stack.dir/__/src/octave.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/octave.c > CMakeFiles/ofdm_stack.dir/__/src/octave.c.i + +unittest/CMakeFiles/ofdm_stack.dir/__/src/octave.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/ofdm_stack.dir/__/src/octave.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/octave.c -o CMakeFiles/ofdm_stack.dir/__/src/octave.c.s + +unittest/CMakeFiles/ofdm_stack.dir/__/src/kiss_fft.c.o: unittest/CMakeFiles/ofdm_stack.dir/flags.make +unittest/CMakeFiles/ofdm_stack.dir/__/src/kiss_fft.c.o: ../src/kiss_fft.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_4) "Building C object unittest/CMakeFiles/ofdm_stack.dir/__/src/kiss_fft.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/ofdm_stack.dir/__/src/kiss_fft.c.o -c /home/sh/Downloads/hackrf/codec2/src/kiss_fft.c + +unittest/CMakeFiles/ofdm_stack.dir/__/src/kiss_fft.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/ofdm_stack.dir/__/src/kiss_fft.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/kiss_fft.c > CMakeFiles/ofdm_stack.dir/__/src/kiss_fft.c.i + +unittest/CMakeFiles/ofdm_stack.dir/__/src/kiss_fft.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/ofdm_stack.dir/__/src/kiss_fft.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/kiss_fft.c -o CMakeFiles/ofdm_stack.dir/__/src/kiss_fft.c.s + +unittest/CMakeFiles/ofdm_stack.dir/__/src/modem_probe.c.o: unittest/CMakeFiles/ofdm_stack.dir/flags.make +unittest/CMakeFiles/ofdm_stack.dir/__/src/modem_probe.c.o: ../src/modem_probe.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_5) "Building C object unittest/CMakeFiles/ofdm_stack.dir/__/src/modem_probe.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/ofdm_stack.dir/__/src/modem_probe.c.o -c /home/sh/Downloads/hackrf/codec2/src/modem_probe.c + +unittest/CMakeFiles/ofdm_stack.dir/__/src/modem_probe.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/ofdm_stack.dir/__/src/modem_probe.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/modem_probe.c > CMakeFiles/ofdm_stack.dir/__/src/modem_probe.c.i + +unittest/CMakeFiles/ofdm_stack.dir/__/src/modem_probe.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/ofdm_stack.dir/__/src/modem_probe.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/modem_probe.c -o CMakeFiles/ofdm_stack.dir/__/src/modem_probe.c.s + +unittest/CMakeFiles/ofdm_stack.dir/__/src/mpdecode_core.c.o: unittest/CMakeFiles/ofdm_stack.dir/flags.make +unittest/CMakeFiles/ofdm_stack.dir/__/src/mpdecode_core.c.o: ../src/mpdecode_core.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_6) "Building C object unittest/CMakeFiles/ofdm_stack.dir/__/src/mpdecode_core.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/ofdm_stack.dir/__/src/mpdecode_core.c.o -c /home/sh/Downloads/hackrf/codec2/src/mpdecode_core.c + +unittest/CMakeFiles/ofdm_stack.dir/__/src/mpdecode_core.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/ofdm_stack.dir/__/src/mpdecode_core.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/mpdecode_core.c > CMakeFiles/ofdm_stack.dir/__/src/mpdecode_core.c.i + +unittest/CMakeFiles/ofdm_stack.dir/__/src/mpdecode_core.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/ofdm_stack.dir/__/src/mpdecode_core.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/mpdecode_core.c -o CMakeFiles/ofdm_stack.dir/__/src/mpdecode_core.c.s + +unittest/CMakeFiles/ofdm_stack.dir/__/src/phi0.c.o: unittest/CMakeFiles/ofdm_stack.dir/flags.make +unittest/CMakeFiles/ofdm_stack.dir/__/src/phi0.c.o: ../src/phi0.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_7) "Building C object unittest/CMakeFiles/ofdm_stack.dir/__/src/phi0.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/ofdm_stack.dir/__/src/phi0.c.o -c /home/sh/Downloads/hackrf/codec2/src/phi0.c + +unittest/CMakeFiles/ofdm_stack.dir/__/src/phi0.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/ofdm_stack.dir/__/src/phi0.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/phi0.c > CMakeFiles/ofdm_stack.dir/__/src/phi0.c.i + +unittest/CMakeFiles/ofdm_stack.dir/__/src/phi0.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/ofdm_stack.dir/__/src/phi0.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/phi0.c -o CMakeFiles/ofdm_stack.dir/__/src/phi0.c.s + +unittest/CMakeFiles/ofdm_stack.dir/__/src/filter.c.o: unittest/CMakeFiles/ofdm_stack.dir/flags.make +unittest/CMakeFiles/ofdm_stack.dir/__/src/filter.c.o: ../src/filter.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_8) "Building C object unittest/CMakeFiles/ofdm_stack.dir/__/src/filter.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/ofdm_stack.dir/__/src/filter.c.o -c /home/sh/Downloads/hackrf/codec2/src/filter.c + +unittest/CMakeFiles/ofdm_stack.dir/__/src/filter.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/ofdm_stack.dir/__/src/filter.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/filter.c > CMakeFiles/ofdm_stack.dir/__/src/filter.c.i + +unittest/CMakeFiles/ofdm_stack.dir/__/src/filter.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/ofdm_stack.dir/__/src/filter.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/filter.c -o CMakeFiles/ofdm_stack.dir/__/src/filter.c.s + +# Object files for target ofdm_stack +ofdm_stack_OBJECTS = \ +"CMakeFiles/ofdm_stack.dir/ofdm_stack.c.o" \ +"CMakeFiles/ofdm_stack.dir/__/src/ofdm.c.o" \ +"CMakeFiles/ofdm_stack.dir/__/src/octave.c.o" \ +"CMakeFiles/ofdm_stack.dir/__/src/kiss_fft.c.o" \ +"CMakeFiles/ofdm_stack.dir/__/src/modem_probe.c.o" \ +"CMakeFiles/ofdm_stack.dir/__/src/mpdecode_core.c.o" \ +"CMakeFiles/ofdm_stack.dir/__/src/phi0.c.o" \ +"CMakeFiles/ofdm_stack.dir/__/src/filter.c.o" + +# External object files for target ofdm_stack +ofdm_stack_EXTERNAL_OBJECTS = + +unittest/ofdm_stack: unittest/CMakeFiles/ofdm_stack.dir/ofdm_stack.c.o +unittest/ofdm_stack: unittest/CMakeFiles/ofdm_stack.dir/__/src/ofdm.c.o +unittest/ofdm_stack: unittest/CMakeFiles/ofdm_stack.dir/__/src/octave.c.o +unittest/ofdm_stack: unittest/CMakeFiles/ofdm_stack.dir/__/src/kiss_fft.c.o +unittest/ofdm_stack: unittest/CMakeFiles/ofdm_stack.dir/__/src/modem_probe.c.o +unittest/ofdm_stack: unittest/CMakeFiles/ofdm_stack.dir/__/src/mpdecode_core.c.o +unittest/ofdm_stack: unittest/CMakeFiles/ofdm_stack.dir/__/src/phi0.c.o +unittest/ofdm_stack: unittest/CMakeFiles/ofdm_stack.dir/__/src/filter.c.o +unittest/ofdm_stack: unittest/CMakeFiles/ofdm_stack.dir/build.make +unittest/ofdm_stack: unittest/libfunction_trace.a +unittest/ofdm_stack: unittest/CMakeFiles/ofdm_stack.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_9) "Linking C executable ofdm_stack" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/ofdm_stack.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +unittest/CMakeFiles/ofdm_stack.dir/build: unittest/ofdm_stack + +.PHONY : unittest/CMakeFiles/ofdm_stack.dir/build + +unittest/CMakeFiles/ofdm_stack.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && $(CMAKE_COMMAND) -P CMakeFiles/ofdm_stack.dir/cmake_clean.cmake +.PHONY : unittest/CMakeFiles/ofdm_stack.dir/clean + +unittest/CMakeFiles/ofdm_stack.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/unittest /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/unittest /home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/ofdm_stack.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : unittest/CMakeFiles/ofdm_stack.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_stack.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_stack.dir/cmake_clean.cmake new file mode 100644 index 0000000..e2cac78 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_stack.dir/cmake_clean.cmake @@ -0,0 +1,17 @@ +file(REMOVE_RECURSE + "CMakeFiles/ofdm_stack.dir/ofdm_stack.c.o" + "CMakeFiles/ofdm_stack.dir/__/src/ofdm.c.o" + "CMakeFiles/ofdm_stack.dir/__/src/octave.c.o" + "CMakeFiles/ofdm_stack.dir/__/src/kiss_fft.c.o" + "CMakeFiles/ofdm_stack.dir/__/src/modem_probe.c.o" + "CMakeFiles/ofdm_stack.dir/__/src/mpdecode_core.c.o" + "CMakeFiles/ofdm_stack.dir/__/src/phi0.c.o" + "CMakeFiles/ofdm_stack.dir/__/src/filter.c.o" + "ofdm_stack.pdb" + "ofdm_stack" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/ofdm_stack.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_stack.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_stack.dir/depend.internal new file mode 100644 index 0000000..89750c0 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_stack.dir/depend.internal @@ -0,0 +1,50 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +unittest/CMakeFiles/ofdm_stack.dir/__/src/filter.c.o + /home/sh/Downloads/hackrf/codec2/src/debug_alloc.h + /home/sh/Downloads/hackrf/codec2/src/filter.c + /home/sh/Downloads/hackrf/codec2/src/filter.h + /home/sh/Downloads/hackrf/codec2/src/filter_coef.h +unittest/CMakeFiles/ofdm_stack.dir/__/src/kiss_fft.c.o + /home/sh/Downloads/hackrf/codec2/src/_kiss_fft_guts.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.c + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h +unittest/CMakeFiles/ofdm_stack.dir/__/src/modem_probe.c.o + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/modem_probe.c + /home/sh/Downloads/hackrf/codec2/src/octave.h +unittest/CMakeFiles/ofdm_stack.dir/__/src/mpdecode_core.c.o + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/debug_alloc.h + /home/sh/Downloads/hackrf/codec2/src/machdep.h + /home/sh/Downloads/hackrf/codec2/src/mpdecode_core.c + /home/sh/Downloads/hackrf/codec2/src/mpdecode_core.h + /home/sh/Downloads/hackrf/codec2/src/phi0.h +unittest/CMakeFiles/ofdm_stack.dir/__/src/octave.c.o + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/octave.c + /home/sh/Downloads/hackrf/codec2/src/octave.h +unittest/CMakeFiles/ofdm_stack.dir/__/src/ofdm.c.o + /home/sh/Downloads/hackrf/codec2/src/codec2_ofdm.h + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/debug_alloc.h + /home/sh/Downloads/hackrf/codec2/src/filter.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/machdep.h + /home/sh/Downloads/hackrf/codec2/src/modem_stats.h + /home/sh/Downloads/hackrf/codec2/src/ofdm.c + /home/sh/Downloads/hackrf/codec2/src/ofdm_internal.h + /home/sh/Downloads/hackrf/codec2/src/wval.h +unittest/CMakeFiles/ofdm_stack.dir/__/src/phi0.c.o + /home/sh/Downloads/hackrf/codec2/src/phi0.c +unittest/CMakeFiles/ofdm_stack.dir/ofdm_stack.c.o + ../unittest/../src/codec2_ofdm.h + ../unittest/../src/comp.h + ../unittest/../src/filter.h + ../unittest/../src/kiss_fft.h + ../unittest/../src/modem_stats.h + ../unittest/../src/mpdecode_core.h + ../unittest/../src/ofdm_internal.h + ../unittest/../src/test_bits_ofdm.h + /home/sh/Downloads/hackrf/codec2/unittest/ofdm_stack.c diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_stack.dir/depend.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_stack.dir/depend.make new file mode 100644 index 0000000..99bc7d9 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_stack.dir/depend.make @@ -0,0 +1,50 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +unittest/CMakeFiles/ofdm_stack.dir/__/src/filter.c.o: ../src/debug_alloc.h +unittest/CMakeFiles/ofdm_stack.dir/__/src/filter.c.o: ../src/filter.c +unittest/CMakeFiles/ofdm_stack.dir/__/src/filter.c.o: ../src/filter.h +unittest/CMakeFiles/ofdm_stack.dir/__/src/filter.c.o: ../src/filter_coef.h + +unittest/CMakeFiles/ofdm_stack.dir/__/src/kiss_fft.c.o: ../src/_kiss_fft_guts.h +unittest/CMakeFiles/ofdm_stack.dir/__/src/kiss_fft.c.o: ../src/kiss_fft.c +unittest/CMakeFiles/ofdm_stack.dir/__/src/kiss_fft.c.o: ../src/kiss_fft.h + +unittest/CMakeFiles/ofdm_stack.dir/__/src/modem_probe.c.o: ../src/comp.h +unittest/CMakeFiles/ofdm_stack.dir/__/src/modem_probe.c.o: ../src/modem_probe.c +unittest/CMakeFiles/ofdm_stack.dir/__/src/modem_probe.c.o: ../src/octave.h + +unittest/CMakeFiles/ofdm_stack.dir/__/src/mpdecode_core.c.o: ../src/comp.h +unittest/CMakeFiles/ofdm_stack.dir/__/src/mpdecode_core.c.o: ../src/debug_alloc.h +unittest/CMakeFiles/ofdm_stack.dir/__/src/mpdecode_core.c.o: ../src/machdep.h +unittest/CMakeFiles/ofdm_stack.dir/__/src/mpdecode_core.c.o: ../src/mpdecode_core.c +unittest/CMakeFiles/ofdm_stack.dir/__/src/mpdecode_core.c.o: ../src/mpdecode_core.h +unittest/CMakeFiles/ofdm_stack.dir/__/src/mpdecode_core.c.o: ../src/phi0.h + +unittest/CMakeFiles/ofdm_stack.dir/__/src/octave.c.o: ../src/comp.h +unittest/CMakeFiles/ofdm_stack.dir/__/src/octave.c.o: ../src/octave.c +unittest/CMakeFiles/ofdm_stack.dir/__/src/octave.c.o: ../src/octave.h + +unittest/CMakeFiles/ofdm_stack.dir/__/src/ofdm.c.o: ../src/codec2_ofdm.h +unittest/CMakeFiles/ofdm_stack.dir/__/src/ofdm.c.o: ../src/comp.h +unittest/CMakeFiles/ofdm_stack.dir/__/src/ofdm.c.o: ../src/debug_alloc.h +unittest/CMakeFiles/ofdm_stack.dir/__/src/ofdm.c.o: ../src/filter.h +unittest/CMakeFiles/ofdm_stack.dir/__/src/ofdm.c.o: ../src/kiss_fft.h +unittest/CMakeFiles/ofdm_stack.dir/__/src/ofdm.c.o: ../src/machdep.h +unittest/CMakeFiles/ofdm_stack.dir/__/src/ofdm.c.o: ../src/modem_stats.h +unittest/CMakeFiles/ofdm_stack.dir/__/src/ofdm.c.o: ../src/ofdm.c +unittest/CMakeFiles/ofdm_stack.dir/__/src/ofdm.c.o: ../src/ofdm_internal.h +unittest/CMakeFiles/ofdm_stack.dir/__/src/ofdm.c.o: ../src/wval.h + +unittest/CMakeFiles/ofdm_stack.dir/__/src/phi0.c.o: ../src/phi0.c + +unittest/CMakeFiles/ofdm_stack.dir/ofdm_stack.c.o: ../unittest/../src/codec2_ofdm.h +unittest/CMakeFiles/ofdm_stack.dir/ofdm_stack.c.o: ../unittest/../src/comp.h +unittest/CMakeFiles/ofdm_stack.dir/ofdm_stack.c.o: ../unittest/../src/filter.h +unittest/CMakeFiles/ofdm_stack.dir/ofdm_stack.c.o: ../unittest/../src/kiss_fft.h +unittest/CMakeFiles/ofdm_stack.dir/ofdm_stack.c.o: ../unittest/../src/modem_stats.h +unittest/CMakeFiles/ofdm_stack.dir/ofdm_stack.c.o: ../unittest/../src/mpdecode_core.h +unittest/CMakeFiles/ofdm_stack.dir/ofdm_stack.c.o: ../unittest/../src/ofdm_internal.h +unittest/CMakeFiles/ofdm_stack.dir/ofdm_stack.c.o: ../unittest/../src/test_bits_ofdm.h +unittest/CMakeFiles/ofdm_stack.dir/ofdm_stack.c.o: ../unittest/ofdm_stack.c + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_stack.dir/flags.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_stack.dir/flags.make new file mode 100644 index 0000000..efbdc31 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_stack.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -finstrument-functions -no-pie + +C_DEFINES = -DFLOATING_POINT -DGIT_HASH=\"df2ed16c\" -DMODEMPROBE_ENABLE -DVAR_ARRAYS -DXXXXX -D_GNU_SOURCE=1 -D__UNITTEST__ + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/unittest/../src + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_stack.dir/link.txt b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_stack.dir/link.txt new file mode 100644 index 0000000..90237a6 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_stack.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/ofdm_stack.dir/ofdm_stack.c.o CMakeFiles/ofdm_stack.dir/__/src/ofdm.c.o CMakeFiles/ofdm_stack.dir/__/src/octave.c.o CMakeFiles/ofdm_stack.dir/__/src/kiss_fft.c.o CMakeFiles/ofdm_stack.dir/__/src/modem_probe.c.o CMakeFiles/ofdm_stack.dir/__/src/mpdecode_core.c.o CMakeFiles/ofdm_stack.dir/__/src/phi0.c.o CMakeFiles/ofdm_stack.dir/__/src/filter.c.o -o ofdm_stack libfunction_trace.a -lm -no-pie diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_stack.dir/ofdm_stack.c.o b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_stack.dir/ofdm_stack.c.o new file mode 100644 index 0000000..ae8d45e Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_stack.dir/ofdm_stack.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_stack.dir/progress.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_stack.dir/progress.make new file mode 100644 index 0000000..3fec3e9 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/ofdm_stack.dir/progress.make @@ -0,0 +1,10 @@ +CMAKE_PROGRESS_1 = 66 +CMAKE_PROGRESS_2 = +CMAKE_PROGRESS_3 = +CMAKE_PROGRESS_4 = +CMAKE_PROGRESS_5 = 67 +CMAKE_PROGRESS_6 = +CMAKE_PROGRESS_7 = +CMAKE_PROGRESS_8 = 68 +CMAKE_PROGRESS_9 = + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/progress.marks b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/progress.marks new file mode 100644 index 0000000..0691f67 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/progress.marks @@ -0,0 +1 @@ +52 diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tcohpsk.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tcohpsk.dir/C.includecache new file mode 100644 index 0000000..d4099ea --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tcohpsk.dir/C.includecache @@ -0,0 +1,250 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +../unittest/../src/codec2_cohpsk.h +comp.h +../unittest/../src/comp.h +modem_stats.h +../unittest/../src/modem_stats.h + +../unittest/../src/codec2_fdmdv.h +comp.h +../unittest/../src/comp.h +modem_stats.h +../unittest/../src/modem_stats.h + +../unittest/../src/codec2_fft.h +assert.h +- +stdlib.h +- +stdio.h +- +string.h +- +math.h +- +fdv_arm_math.h +../unittest/../src/fdv_arm_math.h +defines.h +../unittest/../src/defines.h +comp.h +../unittest/../src/comp.h +kiss_fftr.h +../unittest/../src/kiss_fftr.h +kiss_fft.h +../unittest/../src/kiss_fft.h + +../unittest/../src/cohpsk_defs.h + +../unittest/../src/cohpsk_internal.h +fdmdv_internal.h +../unittest/../src/fdmdv_internal.h +kiss_fft.h +../unittest/../src/kiss_fft.h + +../unittest/../src/comp.h + +../unittest/../src/comp_prim.h + +../unittest/../src/defines.h + +../unittest/../src/fdmdv_internal.h +comp.h +../unittest/../src/comp.h +codec2_fdmdv.h +../unittest/../src/codec2_fdmdv.h +codec2_fft.h +../unittest/../src/codec2_fft.h + +../unittest/../src/kiss_fft.h +stdlib.h +- +stdio.h +- +math.h +- +string.h +- +xmmintrin.h +- +sys/types.h +- + +../unittest/../src/kiss_fftr.h +kiss_fft.h +../unittest/../src/kiss_fft.h + +../unittest/../src/modem_stats.h +comp.h +../unittest/../src/comp.h +kiss_fft.h +../unittest/../src/kiss_fft.h + +../unittest/../src/noise_samples.h + +../unittest/../src/octave.h +comp.h +../unittest/../src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/codec2_cohpsk.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +modem_stats.h +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h + +/home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +modem_stats.h +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h + +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.h +assert.h +- +stdlib.h +- +stdio.h +- +string.h +- +math.h +- +fdv_arm_math.h +/home/sh/Downloads/hackrf/codec2/src/fdv_arm_math.h +defines.h +/home/sh/Downloads/hackrf/codec2/src/defines.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +kiss_fftr.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/src/cohpsk.c +assert.h +- +stdlib.h +- +stdio.h +- +string.h +- +math.h +- +codec2_cohpsk.h +/home/sh/Downloads/hackrf/codec2/src/codec2_cohpsk.h +cohpsk_defs.h +/home/sh/Downloads/hackrf/codec2/src/cohpsk_defs.h +cohpsk_internal.h +/home/sh/Downloads/hackrf/codec2/src/cohpsk_internal.h +fdmdv_internal.h +/home/sh/Downloads/hackrf/codec2/src/fdmdv_internal.h +pilots_coh.h +/home/sh/Downloads/hackrf/codec2/src/pilots_coh.h +comp_prim.h +/home/sh/Downloads/hackrf/codec2/src/comp_prim.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h +linreg.h +/home/sh/Downloads/hackrf/codec2/src/linreg.h +rn_coh.h +/home/sh/Downloads/hackrf/codec2/src/rn_coh.h +test_bits_coh.h +/home/sh/Downloads/hackrf/codec2/src/test_bits_coh.h +debug_alloc.h +/home/sh/Downloads/hackrf/codec2/src/debug_alloc.h + +/home/sh/Downloads/hackrf/codec2/src/cohpsk_defs.h + +/home/sh/Downloads/hackrf/codec2/src/cohpsk_internal.h +fdmdv_internal.h +/home/sh/Downloads/hackrf/codec2/src/fdmdv_internal.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/comp_prim.h + +/home/sh/Downloads/hackrf/codec2/src/debug_alloc.h +stdio.h +- + +/home/sh/Downloads/hackrf/codec2/src/defines.h + +/home/sh/Downloads/hackrf/codec2/src/fdmdv_internal.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +codec2_fdmdv.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h +codec2_fft.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.h + +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h +stdlib.h +- +stdio.h +- +math.h +- +string.h +- +xmmintrin.h +- +sys/types.h +- + +/home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/src/linreg.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/src/pilots_coh.h + +/home/sh/Downloads/hackrf/codec2/src/rn_coh.h + +/home/sh/Downloads/hackrf/codec2/src/test_bits_coh.h + +/home/sh/Downloads/hackrf/codec2/unittest/tcohpsk.c +assert.h +- +stdio.h +- +stdlib.h +- +string.h +- +math.h +- +fdmdv_internal.h +/home/sh/Downloads/hackrf/codec2/unittest/fdmdv_internal.h +codec2_fdmdv.h +/home/sh/Downloads/hackrf/codec2/unittest/codec2_fdmdv.h +codec2_cohpsk.h +/home/sh/Downloads/hackrf/codec2/unittest/codec2_cohpsk.h +cohpsk_defs.h +/home/sh/Downloads/hackrf/codec2/unittest/cohpsk_defs.h +cohpsk_internal.h +/home/sh/Downloads/hackrf/codec2/unittest/cohpsk_internal.h +octave.h +/home/sh/Downloads/hackrf/codec2/unittest/octave.h +comp_prim.h +/home/sh/Downloads/hackrf/codec2/unittest/comp_prim.h +noise_samples.h +/home/sh/Downloads/hackrf/codec2/unittest/noise_samples.h + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tcohpsk.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tcohpsk.dir/DependInfo.cmake new file mode 100644 index 0000000..cda4b7e --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tcohpsk.dir/DependInfo.cmake @@ -0,0 +1,37 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/src/cohpsk.c" "/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/tcohpsk.dir/__/src/cohpsk.c.o" + "/home/sh/Downloads/hackrf/codec2/src/octave.c" "/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/tcohpsk.dir/__/src/octave.c.o" + "/home/sh/Downloads/hackrf/codec2/unittest/tcohpsk.c" "/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/tcohpsk.dir/tcohpsk.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "FLOATING_POINT" + "GIT_HASH=\"df2ed16c\"" + "MODEMPROBE_ENABLE" + "VAR_ARRAYS" + "XXXXX" + "_GNU_SOURCE=1" + "__UNITTEST__" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../unittest/../src" + "../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/DependInfo.cmake" + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tcohpsk.dir/__/src/cohpsk.c.o b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tcohpsk.dir/__/src/cohpsk.c.o new file mode 100644 index 0000000..1763244 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tcohpsk.dir/__/src/cohpsk.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tcohpsk.dir/__/src/octave.c.o b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tcohpsk.dir/__/src/octave.c.o new file mode 100644 index 0000000..e187c72 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tcohpsk.dir/__/src/octave.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tcohpsk.dir/build.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tcohpsk.dir/build.make new file mode 100644 index 0000000..00afd1a --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tcohpsk.dir/build.make @@ -0,0 +1,129 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include unittest/CMakeFiles/tcohpsk.dir/depend.make + +# Include the progress variables for this target. +include unittest/CMakeFiles/tcohpsk.dir/progress.make + +# Include the compile flags for this target's objects. +include unittest/CMakeFiles/tcohpsk.dir/flags.make + +unittest/CMakeFiles/tcohpsk.dir/tcohpsk.c.o: unittest/CMakeFiles/tcohpsk.dir/flags.make +unittest/CMakeFiles/tcohpsk.dir/tcohpsk.c.o: ../unittest/tcohpsk.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object unittest/CMakeFiles/tcohpsk.dir/tcohpsk.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/tcohpsk.dir/tcohpsk.c.o -c /home/sh/Downloads/hackrf/codec2/unittest/tcohpsk.c + +unittest/CMakeFiles/tcohpsk.dir/tcohpsk.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/tcohpsk.dir/tcohpsk.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/unittest/tcohpsk.c > CMakeFiles/tcohpsk.dir/tcohpsk.c.i + +unittest/CMakeFiles/tcohpsk.dir/tcohpsk.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/tcohpsk.dir/tcohpsk.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/unittest/tcohpsk.c -o CMakeFiles/tcohpsk.dir/tcohpsk.c.s + +unittest/CMakeFiles/tcohpsk.dir/__/src/cohpsk.c.o: unittest/CMakeFiles/tcohpsk.dir/flags.make +unittest/CMakeFiles/tcohpsk.dir/__/src/cohpsk.c.o: ../src/cohpsk.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Building C object unittest/CMakeFiles/tcohpsk.dir/__/src/cohpsk.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/tcohpsk.dir/__/src/cohpsk.c.o -c /home/sh/Downloads/hackrf/codec2/src/cohpsk.c + +unittest/CMakeFiles/tcohpsk.dir/__/src/cohpsk.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/tcohpsk.dir/__/src/cohpsk.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/cohpsk.c > CMakeFiles/tcohpsk.dir/__/src/cohpsk.c.i + +unittest/CMakeFiles/tcohpsk.dir/__/src/cohpsk.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/tcohpsk.dir/__/src/cohpsk.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/cohpsk.c -o CMakeFiles/tcohpsk.dir/__/src/cohpsk.c.s + +unittest/CMakeFiles/tcohpsk.dir/__/src/octave.c.o: unittest/CMakeFiles/tcohpsk.dir/flags.make +unittest/CMakeFiles/tcohpsk.dir/__/src/octave.c.o: ../src/octave.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_3) "Building C object unittest/CMakeFiles/tcohpsk.dir/__/src/octave.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/tcohpsk.dir/__/src/octave.c.o -c /home/sh/Downloads/hackrf/codec2/src/octave.c + +unittest/CMakeFiles/tcohpsk.dir/__/src/octave.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/tcohpsk.dir/__/src/octave.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/octave.c > CMakeFiles/tcohpsk.dir/__/src/octave.c.i + +unittest/CMakeFiles/tcohpsk.dir/__/src/octave.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/tcohpsk.dir/__/src/octave.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/octave.c -o CMakeFiles/tcohpsk.dir/__/src/octave.c.s + +# Object files for target tcohpsk +tcohpsk_OBJECTS = \ +"CMakeFiles/tcohpsk.dir/tcohpsk.c.o" \ +"CMakeFiles/tcohpsk.dir/__/src/cohpsk.c.o" \ +"CMakeFiles/tcohpsk.dir/__/src/octave.c.o" + +# External object files for target tcohpsk +tcohpsk_EXTERNAL_OBJECTS = + +unittest/tcohpsk: unittest/CMakeFiles/tcohpsk.dir/tcohpsk.c.o +unittest/tcohpsk: unittest/CMakeFiles/tcohpsk.dir/__/src/cohpsk.c.o +unittest/tcohpsk: unittest/CMakeFiles/tcohpsk.dir/__/src/octave.c.o +unittest/tcohpsk: unittest/CMakeFiles/tcohpsk.dir/build.make +unittest/tcohpsk: src/libcodec2.so.0.9 +unittest/tcohpsk: unittest/CMakeFiles/tcohpsk.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_4) "Linking C executable tcohpsk" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/tcohpsk.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +unittest/CMakeFiles/tcohpsk.dir/build: unittest/tcohpsk + +.PHONY : unittest/CMakeFiles/tcohpsk.dir/build + +unittest/CMakeFiles/tcohpsk.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && $(CMAKE_COMMAND) -P CMakeFiles/tcohpsk.dir/cmake_clean.cmake +.PHONY : unittest/CMakeFiles/tcohpsk.dir/clean + +unittest/CMakeFiles/tcohpsk.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/unittest /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/unittest /home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/tcohpsk.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : unittest/CMakeFiles/tcohpsk.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tcohpsk.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tcohpsk.dir/cmake_clean.cmake new file mode 100644 index 0000000..3b2008a --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tcohpsk.dir/cmake_clean.cmake @@ -0,0 +1,12 @@ +file(REMOVE_RECURSE + "CMakeFiles/tcohpsk.dir/tcohpsk.c.o" + "CMakeFiles/tcohpsk.dir/__/src/cohpsk.c.o" + "CMakeFiles/tcohpsk.dir/__/src/octave.c.o" + "tcohpsk.pdb" + "tcohpsk" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/tcohpsk.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tcohpsk.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tcohpsk.dir/depend.internal new file mode 100644 index 0000000..831b3ea --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tcohpsk.dir/depend.internal @@ -0,0 +1,42 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +unittest/CMakeFiles/tcohpsk.dir/__/src/cohpsk.c.o + /home/sh/Downloads/hackrf/codec2/src/codec2_cohpsk.h + /home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h + /home/sh/Downloads/hackrf/codec2/src/codec2_fft.h + /home/sh/Downloads/hackrf/codec2/src/cohpsk.c + /home/sh/Downloads/hackrf/codec2/src/cohpsk_defs.h + /home/sh/Downloads/hackrf/codec2/src/cohpsk_internal.h + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/comp_prim.h + /home/sh/Downloads/hackrf/codec2/src/debug_alloc.h + /home/sh/Downloads/hackrf/codec2/src/defines.h + /home/sh/Downloads/hackrf/codec2/src/fdmdv_internal.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h + /home/sh/Downloads/hackrf/codec2/src/linreg.h + /home/sh/Downloads/hackrf/codec2/src/modem_stats.h + /home/sh/Downloads/hackrf/codec2/src/pilots_coh.h + /home/sh/Downloads/hackrf/codec2/src/rn_coh.h + /home/sh/Downloads/hackrf/codec2/src/test_bits_coh.h +unittest/CMakeFiles/tcohpsk.dir/__/src/octave.c.o + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/octave.c + /home/sh/Downloads/hackrf/codec2/src/octave.h +unittest/CMakeFiles/tcohpsk.dir/tcohpsk.c.o + ../unittest/../src/codec2_cohpsk.h + ../unittest/../src/codec2_fdmdv.h + ../unittest/../src/codec2_fft.h + ../unittest/../src/cohpsk_defs.h + ../unittest/../src/cohpsk_internal.h + ../unittest/../src/comp.h + ../unittest/../src/comp_prim.h + ../unittest/../src/defines.h + ../unittest/../src/fdmdv_internal.h + ../unittest/../src/kiss_fft.h + ../unittest/../src/kiss_fftr.h + ../unittest/../src/modem_stats.h + ../unittest/../src/noise_samples.h + ../unittest/../src/octave.h + /home/sh/Downloads/hackrf/codec2/unittest/tcohpsk.c diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tcohpsk.dir/depend.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tcohpsk.dir/depend.make new file mode 100644 index 0000000..6573233 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tcohpsk.dir/depend.make @@ -0,0 +1,42 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +unittest/CMakeFiles/tcohpsk.dir/__/src/cohpsk.c.o: ../src/codec2_cohpsk.h +unittest/CMakeFiles/tcohpsk.dir/__/src/cohpsk.c.o: ../src/codec2_fdmdv.h +unittest/CMakeFiles/tcohpsk.dir/__/src/cohpsk.c.o: ../src/codec2_fft.h +unittest/CMakeFiles/tcohpsk.dir/__/src/cohpsk.c.o: ../src/cohpsk.c +unittest/CMakeFiles/tcohpsk.dir/__/src/cohpsk.c.o: ../src/cohpsk_defs.h +unittest/CMakeFiles/tcohpsk.dir/__/src/cohpsk.c.o: ../src/cohpsk_internal.h +unittest/CMakeFiles/tcohpsk.dir/__/src/cohpsk.c.o: ../src/comp.h +unittest/CMakeFiles/tcohpsk.dir/__/src/cohpsk.c.o: ../src/comp_prim.h +unittest/CMakeFiles/tcohpsk.dir/__/src/cohpsk.c.o: ../src/debug_alloc.h +unittest/CMakeFiles/tcohpsk.dir/__/src/cohpsk.c.o: ../src/defines.h +unittest/CMakeFiles/tcohpsk.dir/__/src/cohpsk.c.o: ../src/fdmdv_internal.h +unittest/CMakeFiles/tcohpsk.dir/__/src/cohpsk.c.o: ../src/kiss_fft.h +unittest/CMakeFiles/tcohpsk.dir/__/src/cohpsk.c.o: ../src/kiss_fftr.h +unittest/CMakeFiles/tcohpsk.dir/__/src/cohpsk.c.o: ../src/linreg.h +unittest/CMakeFiles/tcohpsk.dir/__/src/cohpsk.c.o: ../src/modem_stats.h +unittest/CMakeFiles/tcohpsk.dir/__/src/cohpsk.c.o: ../src/pilots_coh.h +unittest/CMakeFiles/tcohpsk.dir/__/src/cohpsk.c.o: ../src/rn_coh.h +unittest/CMakeFiles/tcohpsk.dir/__/src/cohpsk.c.o: ../src/test_bits_coh.h + +unittest/CMakeFiles/tcohpsk.dir/__/src/octave.c.o: ../src/comp.h +unittest/CMakeFiles/tcohpsk.dir/__/src/octave.c.o: ../src/octave.c +unittest/CMakeFiles/tcohpsk.dir/__/src/octave.c.o: ../src/octave.h + +unittest/CMakeFiles/tcohpsk.dir/tcohpsk.c.o: ../unittest/../src/codec2_cohpsk.h +unittest/CMakeFiles/tcohpsk.dir/tcohpsk.c.o: ../unittest/../src/codec2_fdmdv.h +unittest/CMakeFiles/tcohpsk.dir/tcohpsk.c.o: ../unittest/../src/codec2_fft.h +unittest/CMakeFiles/tcohpsk.dir/tcohpsk.c.o: ../unittest/../src/cohpsk_defs.h +unittest/CMakeFiles/tcohpsk.dir/tcohpsk.c.o: ../unittest/../src/cohpsk_internal.h +unittest/CMakeFiles/tcohpsk.dir/tcohpsk.c.o: ../unittest/../src/comp.h +unittest/CMakeFiles/tcohpsk.dir/tcohpsk.c.o: ../unittest/../src/comp_prim.h +unittest/CMakeFiles/tcohpsk.dir/tcohpsk.c.o: ../unittest/../src/defines.h +unittest/CMakeFiles/tcohpsk.dir/tcohpsk.c.o: ../unittest/../src/fdmdv_internal.h +unittest/CMakeFiles/tcohpsk.dir/tcohpsk.c.o: ../unittest/../src/kiss_fft.h +unittest/CMakeFiles/tcohpsk.dir/tcohpsk.c.o: ../unittest/../src/kiss_fftr.h +unittest/CMakeFiles/tcohpsk.dir/tcohpsk.c.o: ../unittest/../src/modem_stats.h +unittest/CMakeFiles/tcohpsk.dir/tcohpsk.c.o: ../unittest/../src/noise_samples.h +unittest/CMakeFiles/tcohpsk.dir/tcohpsk.c.o: ../unittest/../src/octave.h +unittest/CMakeFiles/tcohpsk.dir/tcohpsk.c.o: ../unittest/tcohpsk.c + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tcohpsk.dir/flags.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tcohpsk.dir/flags.make new file mode 100644 index 0000000..7c524b1 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tcohpsk.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DFLOATING_POINT -DGIT_HASH=\"df2ed16c\" -DMODEMPROBE_ENABLE -DVAR_ARRAYS -DXXXXX -D_GNU_SOURCE=1 -D__UNITTEST__ + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/unittest/../src -I/home/sh/Downloads/hackrf/codec2/src + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tcohpsk.dir/link.txt b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tcohpsk.dir/link.txt new file mode 100644 index 0000000..fa85b9d --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tcohpsk.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/tcohpsk.dir/tcohpsk.c.o CMakeFiles/tcohpsk.dir/__/src/cohpsk.c.o CMakeFiles/tcohpsk.dir/__/src/octave.c.o -o tcohpsk -Wl,-rpath,/home/sh/Downloads/hackrf/codec2/build_linux/src ../src/libcodec2.so.0.9 -lm diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tcohpsk.dir/progress.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tcohpsk.dir/progress.make new file mode 100644 index 0000000..bc43f57 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tcohpsk.dir/progress.make @@ -0,0 +1,5 @@ +CMAKE_PROGRESS_1 = +CMAKE_PROGRESS_2 = 73 +CMAKE_PROGRESS_3 = +CMAKE_PROGRESS_4 = + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tcohpsk.dir/tcohpsk.c.o b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tcohpsk.dir/tcohpsk.c.o new file mode 100644 index 0000000..f4b0496 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tcohpsk.dir/tcohpsk.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tdeframer.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tdeframer.dir/C.includecache new file mode 100644 index 0000000..fc3169a --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tdeframer.dir/C.includecache @@ -0,0 +1,32 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +../unittest/../src/freedv_data_channel.h +stdlib.h +- + +../unittest/../src/freedv_vhf_framing.h +freedv_data_channel.h +../unittest/../src/freedv_data_channel.h + +../unittest/../src/golay23.h + +/home/sh/Downloads/hackrf/codec2/unittest/tdeframer.c +stdio.h +- +math.h +- +stdint.h +- +freedv_vhf_framing.h +- +golay23.h +- +string.h +- + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tdeframer.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tdeframer.dir/DependInfo.cmake new file mode 100644 index 0000000..bfcc500 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tdeframer.dir/DependInfo.cmake @@ -0,0 +1,35 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/unittest/tdeframer.c" "/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/tdeframer.dir/tdeframer.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "FLOATING_POINT" + "GIT_HASH=\"df2ed16c\"" + "MODEMPROBE_ENABLE" + "VAR_ARRAYS" + "XXXXX" + "_GNU_SOURCE=1" + "__UNITTEST__" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../unittest/../src" + "../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/DependInfo.cmake" + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tdeframer.dir/build.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tdeframer.dir/build.make new file mode 100644 index 0000000..1cd09e2 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tdeframer.dir/build.make @@ -0,0 +1,99 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include unittest/CMakeFiles/tdeframer.dir/depend.make + +# Include the progress variables for this target. +include unittest/CMakeFiles/tdeframer.dir/progress.make + +# Include the compile flags for this target's objects. +include unittest/CMakeFiles/tdeframer.dir/flags.make + +unittest/CMakeFiles/tdeframer.dir/tdeframer.c.o: unittest/CMakeFiles/tdeframer.dir/flags.make +unittest/CMakeFiles/tdeframer.dir/tdeframer.c.o: ../unittest/tdeframer.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object unittest/CMakeFiles/tdeframer.dir/tdeframer.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/tdeframer.dir/tdeframer.c.o -c /home/sh/Downloads/hackrf/codec2/unittest/tdeframer.c + +unittest/CMakeFiles/tdeframer.dir/tdeframer.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/tdeframer.dir/tdeframer.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/unittest/tdeframer.c > CMakeFiles/tdeframer.dir/tdeframer.c.i + +unittest/CMakeFiles/tdeframer.dir/tdeframer.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/tdeframer.dir/tdeframer.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/unittest/tdeframer.c -o CMakeFiles/tdeframer.dir/tdeframer.c.s + +# Object files for target tdeframer +tdeframer_OBJECTS = \ +"CMakeFiles/tdeframer.dir/tdeframer.c.o" + +# External object files for target tdeframer +tdeframer_EXTERNAL_OBJECTS = + +unittest/tdeframer: unittest/CMakeFiles/tdeframer.dir/tdeframer.c.o +unittest/tdeframer: unittest/CMakeFiles/tdeframer.dir/build.make +unittest/tdeframer: src/libcodec2.so.0.9 +unittest/tdeframer: unittest/CMakeFiles/tdeframer.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking C executable tdeframer" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/tdeframer.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +unittest/CMakeFiles/tdeframer.dir/build: unittest/tdeframer + +.PHONY : unittest/CMakeFiles/tdeframer.dir/build + +unittest/CMakeFiles/tdeframer.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && $(CMAKE_COMMAND) -P CMakeFiles/tdeframer.dir/cmake_clean.cmake +.PHONY : unittest/CMakeFiles/tdeframer.dir/clean + +unittest/CMakeFiles/tdeframer.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/unittest /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/unittest /home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/tdeframer.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : unittest/CMakeFiles/tdeframer.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tdeframer.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tdeframer.dir/cmake_clean.cmake new file mode 100644 index 0000000..325d1f5 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tdeframer.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +file(REMOVE_RECURSE + "CMakeFiles/tdeframer.dir/tdeframer.c.o" + "tdeframer.pdb" + "tdeframer" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/tdeframer.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tdeframer.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tdeframer.dir/depend.internal new file mode 100644 index 0000000..d8bdbb9 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tdeframer.dir/depend.internal @@ -0,0 +1,8 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +unittest/CMakeFiles/tdeframer.dir/tdeframer.c.o + ../unittest/../src/freedv_data_channel.h + ../unittest/../src/freedv_vhf_framing.h + ../unittest/../src/golay23.h + /home/sh/Downloads/hackrf/codec2/unittest/tdeframer.c diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tdeframer.dir/depend.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tdeframer.dir/depend.make new file mode 100644 index 0000000..9c9d4ed --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tdeframer.dir/depend.make @@ -0,0 +1,8 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +unittest/CMakeFiles/tdeframer.dir/tdeframer.c.o: ../unittest/../src/freedv_data_channel.h +unittest/CMakeFiles/tdeframer.dir/tdeframer.c.o: ../unittest/../src/freedv_vhf_framing.h +unittest/CMakeFiles/tdeframer.dir/tdeframer.c.o: ../unittest/../src/golay23.h +unittest/CMakeFiles/tdeframer.dir/tdeframer.c.o: ../unittest/tdeframer.c + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tdeframer.dir/flags.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tdeframer.dir/flags.make new file mode 100644 index 0000000..7c524b1 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tdeframer.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DFLOATING_POINT -DGIT_HASH=\"df2ed16c\" -DMODEMPROBE_ENABLE -DVAR_ARRAYS -DXXXXX -D_GNU_SOURCE=1 -D__UNITTEST__ + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/unittest/../src -I/home/sh/Downloads/hackrf/codec2/src + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tdeframer.dir/link.txt b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tdeframer.dir/link.txt new file mode 100644 index 0000000..50527b4 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tdeframer.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/tdeframer.dir/tdeframer.c.o -o tdeframer -Wl,-rpath,/home/sh/Downloads/hackrf/codec2/build_linux/src -lm ../src/libcodec2.so.0.9 -lm diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tdeframer.dir/progress.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tdeframer.dir/progress.make new file mode 100644 index 0000000..98725d7 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tdeframer.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = +CMAKE_PROGRESS_2 = 75 + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tdeframer.dir/tdeframer.c.o b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tdeframer.dir/tdeframer.c.o new file mode 100644 index 0000000..9fa0b65 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tdeframer.dir/tdeframer.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/test_phi0.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/test_phi0.dir/C.includecache new file mode 100644 index 0000000..8e54ca9 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/test_phi0.dir/C.includecache @@ -0,0 +1,8 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/test_phi0.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/test_phi0.dir/DependInfo.cmake new file mode 100644 index 0000000..ca6b39e --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/test_phi0.dir/DependInfo.cmake @@ -0,0 +1,34 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/src/phi0.c" "/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/test_phi0.dir/__/src/phi0.c.o" + "/home/sh/Downloads/hackrf/codec2/unittest/test_phi0.c" "/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/test_phi0.dir/test_phi0.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "FLOATING_POINT" + "GIT_HASH=\"df2ed16c\"" + "MODEMPROBE_ENABLE" + "VAR_ARRAYS" + "XXXXX" + "_GNU_SOURCE=1" + "__UNITTEST__" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../unittest/../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/test_phi0.dir/__/src/phi0.c.o b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/test_phi0.dir/__/src/phi0.c.o new file mode 100644 index 0000000..ec58b09 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/test_phi0.dir/__/src/phi0.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/test_phi0.dir/build.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/test_phi0.dir/build.make new file mode 100644 index 0000000..6979dd6 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/test_phi0.dir/build.make @@ -0,0 +1,113 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include unittest/CMakeFiles/test_phi0.dir/depend.make + +# Include the progress variables for this target. +include unittest/CMakeFiles/test_phi0.dir/progress.make + +# Include the compile flags for this target's objects. +include unittest/CMakeFiles/test_phi0.dir/flags.make + +unittest/CMakeFiles/test_phi0.dir/test_phi0.c.o: unittest/CMakeFiles/test_phi0.dir/flags.make +unittest/CMakeFiles/test_phi0.dir/test_phi0.c.o: ../unittest/test_phi0.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object unittest/CMakeFiles/test_phi0.dir/test_phi0.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/test_phi0.dir/test_phi0.c.o -c /home/sh/Downloads/hackrf/codec2/unittest/test_phi0.c + +unittest/CMakeFiles/test_phi0.dir/test_phi0.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/test_phi0.dir/test_phi0.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/unittest/test_phi0.c > CMakeFiles/test_phi0.dir/test_phi0.c.i + +unittest/CMakeFiles/test_phi0.dir/test_phi0.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/test_phi0.dir/test_phi0.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/unittest/test_phi0.c -o CMakeFiles/test_phi0.dir/test_phi0.c.s + +unittest/CMakeFiles/test_phi0.dir/__/src/phi0.c.o: unittest/CMakeFiles/test_phi0.dir/flags.make +unittest/CMakeFiles/test_phi0.dir/__/src/phi0.c.o: ../src/phi0.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Building C object unittest/CMakeFiles/test_phi0.dir/__/src/phi0.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/test_phi0.dir/__/src/phi0.c.o -c /home/sh/Downloads/hackrf/codec2/src/phi0.c + +unittest/CMakeFiles/test_phi0.dir/__/src/phi0.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/test_phi0.dir/__/src/phi0.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/phi0.c > CMakeFiles/test_phi0.dir/__/src/phi0.c.i + +unittest/CMakeFiles/test_phi0.dir/__/src/phi0.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/test_phi0.dir/__/src/phi0.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/phi0.c -o CMakeFiles/test_phi0.dir/__/src/phi0.c.s + +# Object files for target test_phi0 +test_phi0_OBJECTS = \ +"CMakeFiles/test_phi0.dir/test_phi0.c.o" \ +"CMakeFiles/test_phi0.dir/__/src/phi0.c.o" + +# External object files for target test_phi0 +test_phi0_EXTERNAL_OBJECTS = + +unittest/test_phi0: unittest/CMakeFiles/test_phi0.dir/test_phi0.c.o +unittest/test_phi0: unittest/CMakeFiles/test_phi0.dir/__/src/phi0.c.o +unittest/test_phi0: unittest/CMakeFiles/test_phi0.dir/build.make +unittest/test_phi0: unittest/CMakeFiles/test_phi0.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_3) "Linking C executable test_phi0" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/test_phi0.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +unittest/CMakeFiles/test_phi0.dir/build: unittest/test_phi0 + +.PHONY : unittest/CMakeFiles/test_phi0.dir/build + +unittest/CMakeFiles/test_phi0.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && $(CMAKE_COMMAND) -P CMakeFiles/test_phi0.dir/cmake_clean.cmake +.PHONY : unittest/CMakeFiles/test_phi0.dir/clean + +unittest/CMakeFiles/test_phi0.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/unittest /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/unittest /home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/test_phi0.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : unittest/CMakeFiles/test_phi0.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/test_phi0.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/test_phi0.dir/cmake_clean.cmake new file mode 100644 index 0000000..149db1f --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/test_phi0.dir/cmake_clean.cmake @@ -0,0 +1,11 @@ +file(REMOVE_RECURSE + "CMakeFiles/test_phi0.dir/test_phi0.c.o" + "CMakeFiles/test_phi0.dir/__/src/phi0.c.o" + "test_phi0.pdb" + "test_phi0" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/test_phi0.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/test_phi0.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/test_phi0.dir/depend.internal new file mode 100644 index 0000000..be842e8 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/test_phi0.dir/depend.internal @@ -0,0 +1,8 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +unittest/CMakeFiles/test_phi0.dir/__/src/phi0.c.o + /home/sh/Downloads/hackrf/codec2/src/phi0.c +unittest/CMakeFiles/test_phi0.dir/test_phi0.c.o + ../unittest/../src/phi0.h + /home/sh/Downloads/hackrf/codec2/unittest/test_phi0.c diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/test_phi0.dir/depend.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/test_phi0.dir/depend.make new file mode 100644 index 0000000..0f957d7 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/test_phi0.dir/depend.make @@ -0,0 +1,8 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +unittest/CMakeFiles/test_phi0.dir/__/src/phi0.c.o: ../src/phi0.c + +unittest/CMakeFiles/test_phi0.dir/test_phi0.c.o: ../unittest/../src/phi0.h +unittest/CMakeFiles/test_phi0.dir/test_phi0.c.o: ../unittest/test_phi0.c + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/test_phi0.dir/flags.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/test_phi0.dir/flags.make new file mode 100644 index 0000000..92b2429 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/test_phi0.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DFLOATING_POINT -DGIT_HASH=\"df2ed16c\" -DMODEMPROBE_ENABLE -DVAR_ARRAYS -DXXXXX -D_GNU_SOURCE=1 -D__UNITTEST__ + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/unittest/../src + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/test_phi0.dir/link.txt b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/test_phi0.dir/link.txt new file mode 100644 index 0000000..b4b9074 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/test_phi0.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/test_phi0.dir/test_phi0.c.o CMakeFiles/test_phi0.dir/__/src/phi0.c.o -o test_phi0 -lm diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/test_phi0.dir/progress.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/test_phi0.dir/progress.make new file mode 100644 index 0000000..5ae4177 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/test_phi0.dir/progress.make @@ -0,0 +1,4 @@ +CMAKE_PROGRESS_1 = +CMAKE_PROGRESS_2 = +CMAKE_PROGRESS_3 = 76 + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/test_phi0.dir/test_phi0.c.o b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/test_phi0.dir/test_phi0.c.o new file mode 100644 index 0000000..54dd958 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/test_phi0.dir/test_phi0.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfdmdv.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfdmdv.dir/C.includecache new file mode 100644 index 0000000..1d9f807 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfdmdv.dir/C.includecache @@ -0,0 +1,214 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +../unittest/../src/codec2_fdmdv.h +comp.h +../unittest/../src/comp.h +modem_stats.h +../unittest/../src/modem_stats.h + +../unittest/../src/codec2_fft.h +assert.h +- +stdlib.h +- +stdio.h +- +string.h +- +math.h +- +fdv_arm_math.h +../unittest/../src/fdv_arm_math.h +defines.h +../unittest/../src/defines.h +comp.h +../unittest/../src/comp.h +kiss_fftr.h +../unittest/../src/kiss_fftr.h +kiss_fft.h +../unittest/../src/kiss_fft.h + +../unittest/../src/comp.h + +../unittest/../src/defines.h + +../unittest/../src/fdmdv_internal.h +comp.h +../unittest/../src/comp.h +codec2_fdmdv.h +../unittest/../src/codec2_fdmdv.h +codec2_fft.h +../unittest/../src/codec2_fft.h + +../unittest/../src/kiss_fft.h +stdlib.h +- +stdio.h +- +math.h +- +string.h +- +xmmintrin.h +- +sys/types.h +- + +../unittest/../src/kiss_fftr.h +kiss_fft.h +../unittest/../src/kiss_fft.h + +../unittest/../src/modem_stats.h +comp.h +../unittest/../src/comp.h +kiss_fft.h +../unittest/../src/kiss_fft.h + +../unittest/../src/octave.h +comp.h +../unittest/../src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +modem_stats.h +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h + +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.h +assert.h +- +stdlib.h +- +stdio.h +- +string.h +- +math.h +- +fdv_arm_math.h +/home/sh/Downloads/hackrf/codec2/src/fdv_arm_math.h +defines.h +/home/sh/Downloads/hackrf/codec2/src/defines.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +kiss_fftr.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/comp_prim.h + +/home/sh/Downloads/hackrf/codec2/src/debug_alloc.h +stdio.h +- + +/home/sh/Downloads/hackrf/codec2/src/defines.h + +/home/sh/Downloads/hackrf/codec2/src/fdmdv.c +assert.h +- +stdlib.h +- +stdio.h +- +string.h +- +math.h +- +fdmdv_internal.h +/home/sh/Downloads/hackrf/codec2/src/fdmdv_internal.h +codec2_fdmdv.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h +comp_prim.h +/home/sh/Downloads/hackrf/codec2/src/comp_prim.h +rn.h +/home/sh/Downloads/hackrf/codec2/src/rn.h +rxdec_coeff.h +/home/sh/Downloads/hackrf/codec2/src/rxdec_coeff.h +test_bits.h +/home/sh/Downloads/hackrf/codec2/src/test_bits.h +pilot_coeff.h +/home/sh/Downloads/hackrf/codec2/src/pilot_coeff.h +codec2_fft.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.h +hanning.h +/home/sh/Downloads/hackrf/codec2/src/hanning.h +os.h +/home/sh/Downloads/hackrf/codec2/src/os.h +machdep.h +/home/sh/Downloads/hackrf/codec2/src/machdep.h +debug_alloc.h +/home/sh/Downloads/hackrf/codec2/src/debug_alloc.h + +/home/sh/Downloads/hackrf/codec2/src/fdmdv_internal.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +codec2_fdmdv.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h +codec2_fft.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.h + +/home/sh/Downloads/hackrf/codec2/src/hanning.h + +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h +stdlib.h +- +stdio.h +- +math.h +- +string.h +- +xmmintrin.h +- +sys/types.h +- + +/home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/src/machdep.h + +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/src/os.h + +/home/sh/Downloads/hackrf/codec2/src/pilot_coeff.h + +/home/sh/Downloads/hackrf/codec2/src/rn.h + +/home/sh/Downloads/hackrf/codec2/src/rxdec_coeff.h + +/home/sh/Downloads/hackrf/codec2/src/test_bits.h + +/home/sh/Downloads/hackrf/codec2/unittest/tfdmdv.c +assert.h +- +stdio.h +- +stdlib.h +- +string.h +- +math.h +- +fdmdv_internal.h +/home/sh/Downloads/hackrf/codec2/unittest/fdmdv_internal.h +codec2_fdmdv.h +/home/sh/Downloads/hackrf/codec2/unittest/codec2_fdmdv.h +octave.h +/home/sh/Downloads/hackrf/codec2/unittest/octave.h + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfdmdv.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfdmdv.dir/DependInfo.cmake new file mode 100644 index 0000000..ba67d87 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfdmdv.dir/DependInfo.cmake @@ -0,0 +1,38 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/src/fdmdv.c" "/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/tfdmdv.dir/__/src/fdmdv.c.o" + "/home/sh/Downloads/hackrf/codec2/src/kiss_fft.c" "/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/tfdmdv.dir/__/src/kiss_fft.c.o" + "/home/sh/Downloads/hackrf/codec2/src/octave.c" "/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/tfdmdv.dir/__/src/octave.c.o" + "/home/sh/Downloads/hackrf/codec2/unittest/tfdmdv.c" "/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/tfdmdv.dir/tfdmdv.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "FLOATING_POINT" + "GIT_HASH=\"df2ed16c\"" + "MODEMPROBE_ENABLE" + "VAR_ARRAYS" + "XXXXX" + "_GNU_SOURCE=1" + "__UNITTEST__" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../unittest/../src" + "../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/DependInfo.cmake" + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfdmdv.dir/__/src/fdmdv.c.o b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfdmdv.dir/__/src/fdmdv.c.o new file mode 100644 index 0000000..dc51701 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfdmdv.dir/__/src/fdmdv.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfdmdv.dir/__/src/kiss_fft.c.o b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfdmdv.dir/__/src/kiss_fft.c.o new file mode 100644 index 0000000..4899080 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfdmdv.dir/__/src/kiss_fft.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfdmdv.dir/__/src/octave.c.o b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfdmdv.dir/__/src/octave.c.o new file mode 100644 index 0000000..e187c72 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfdmdv.dir/__/src/octave.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfdmdv.dir/build.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfdmdv.dir/build.make new file mode 100644 index 0000000..8723820 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfdmdv.dir/build.make @@ -0,0 +1,144 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include unittest/CMakeFiles/tfdmdv.dir/depend.make + +# Include the progress variables for this target. +include unittest/CMakeFiles/tfdmdv.dir/progress.make + +# Include the compile flags for this target's objects. +include unittest/CMakeFiles/tfdmdv.dir/flags.make + +unittest/CMakeFiles/tfdmdv.dir/tfdmdv.c.o: unittest/CMakeFiles/tfdmdv.dir/flags.make +unittest/CMakeFiles/tfdmdv.dir/tfdmdv.c.o: ../unittest/tfdmdv.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object unittest/CMakeFiles/tfdmdv.dir/tfdmdv.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/tfdmdv.dir/tfdmdv.c.o -c /home/sh/Downloads/hackrf/codec2/unittest/tfdmdv.c + +unittest/CMakeFiles/tfdmdv.dir/tfdmdv.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/tfdmdv.dir/tfdmdv.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/unittest/tfdmdv.c > CMakeFiles/tfdmdv.dir/tfdmdv.c.i + +unittest/CMakeFiles/tfdmdv.dir/tfdmdv.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/tfdmdv.dir/tfdmdv.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/unittest/tfdmdv.c -o CMakeFiles/tfdmdv.dir/tfdmdv.c.s + +unittest/CMakeFiles/tfdmdv.dir/__/src/fdmdv.c.o: unittest/CMakeFiles/tfdmdv.dir/flags.make +unittest/CMakeFiles/tfdmdv.dir/__/src/fdmdv.c.o: ../src/fdmdv.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Building C object unittest/CMakeFiles/tfdmdv.dir/__/src/fdmdv.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/tfdmdv.dir/__/src/fdmdv.c.o -c /home/sh/Downloads/hackrf/codec2/src/fdmdv.c + +unittest/CMakeFiles/tfdmdv.dir/__/src/fdmdv.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/tfdmdv.dir/__/src/fdmdv.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/fdmdv.c > CMakeFiles/tfdmdv.dir/__/src/fdmdv.c.i + +unittest/CMakeFiles/tfdmdv.dir/__/src/fdmdv.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/tfdmdv.dir/__/src/fdmdv.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/fdmdv.c -o CMakeFiles/tfdmdv.dir/__/src/fdmdv.c.s + +unittest/CMakeFiles/tfdmdv.dir/__/src/kiss_fft.c.o: unittest/CMakeFiles/tfdmdv.dir/flags.make +unittest/CMakeFiles/tfdmdv.dir/__/src/kiss_fft.c.o: ../src/kiss_fft.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_3) "Building C object unittest/CMakeFiles/tfdmdv.dir/__/src/kiss_fft.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/tfdmdv.dir/__/src/kiss_fft.c.o -c /home/sh/Downloads/hackrf/codec2/src/kiss_fft.c + +unittest/CMakeFiles/tfdmdv.dir/__/src/kiss_fft.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/tfdmdv.dir/__/src/kiss_fft.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/kiss_fft.c > CMakeFiles/tfdmdv.dir/__/src/kiss_fft.c.i + +unittest/CMakeFiles/tfdmdv.dir/__/src/kiss_fft.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/tfdmdv.dir/__/src/kiss_fft.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/kiss_fft.c -o CMakeFiles/tfdmdv.dir/__/src/kiss_fft.c.s + +unittest/CMakeFiles/tfdmdv.dir/__/src/octave.c.o: unittest/CMakeFiles/tfdmdv.dir/flags.make +unittest/CMakeFiles/tfdmdv.dir/__/src/octave.c.o: ../src/octave.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_4) "Building C object unittest/CMakeFiles/tfdmdv.dir/__/src/octave.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/tfdmdv.dir/__/src/octave.c.o -c /home/sh/Downloads/hackrf/codec2/src/octave.c + +unittest/CMakeFiles/tfdmdv.dir/__/src/octave.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/tfdmdv.dir/__/src/octave.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/octave.c > CMakeFiles/tfdmdv.dir/__/src/octave.c.i + +unittest/CMakeFiles/tfdmdv.dir/__/src/octave.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/tfdmdv.dir/__/src/octave.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/octave.c -o CMakeFiles/tfdmdv.dir/__/src/octave.c.s + +# Object files for target tfdmdv +tfdmdv_OBJECTS = \ +"CMakeFiles/tfdmdv.dir/tfdmdv.c.o" \ +"CMakeFiles/tfdmdv.dir/__/src/fdmdv.c.o" \ +"CMakeFiles/tfdmdv.dir/__/src/kiss_fft.c.o" \ +"CMakeFiles/tfdmdv.dir/__/src/octave.c.o" + +# External object files for target tfdmdv +tfdmdv_EXTERNAL_OBJECTS = + +unittest/tfdmdv: unittest/CMakeFiles/tfdmdv.dir/tfdmdv.c.o +unittest/tfdmdv: unittest/CMakeFiles/tfdmdv.dir/__/src/fdmdv.c.o +unittest/tfdmdv: unittest/CMakeFiles/tfdmdv.dir/__/src/kiss_fft.c.o +unittest/tfdmdv: unittest/CMakeFiles/tfdmdv.dir/__/src/octave.c.o +unittest/tfdmdv: unittest/CMakeFiles/tfdmdv.dir/build.make +unittest/tfdmdv: src/libcodec2.so.0.9 +unittest/tfdmdv: unittest/CMakeFiles/tfdmdv.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_5) "Linking C executable tfdmdv" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/tfdmdv.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +unittest/CMakeFiles/tfdmdv.dir/build: unittest/tfdmdv + +.PHONY : unittest/CMakeFiles/tfdmdv.dir/build + +unittest/CMakeFiles/tfdmdv.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && $(CMAKE_COMMAND) -P CMakeFiles/tfdmdv.dir/cmake_clean.cmake +.PHONY : unittest/CMakeFiles/tfdmdv.dir/clean + +unittest/CMakeFiles/tfdmdv.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/unittest /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/unittest /home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/tfdmdv.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : unittest/CMakeFiles/tfdmdv.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfdmdv.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfdmdv.dir/cmake_clean.cmake new file mode 100644 index 0000000..1db7b32 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfdmdv.dir/cmake_clean.cmake @@ -0,0 +1,13 @@ +file(REMOVE_RECURSE + "CMakeFiles/tfdmdv.dir/tfdmdv.c.o" + "CMakeFiles/tfdmdv.dir/__/src/fdmdv.c.o" + "CMakeFiles/tfdmdv.dir/__/src/kiss_fft.c.o" + "CMakeFiles/tfdmdv.dir/__/src/octave.c.o" + "tfdmdv.pdb" + "tfdmdv" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/tfdmdv.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfdmdv.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfdmdv.dir/depend.internal new file mode 100644 index 0000000..0c4db03 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfdmdv.dir/depend.internal @@ -0,0 +1,41 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +unittest/CMakeFiles/tfdmdv.dir/__/src/fdmdv.c.o + /home/sh/Downloads/hackrf/codec2/src/codec2_fdmdv.h + /home/sh/Downloads/hackrf/codec2/src/codec2_fft.h + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/comp_prim.h + /home/sh/Downloads/hackrf/codec2/src/debug_alloc.h + /home/sh/Downloads/hackrf/codec2/src/defines.h + /home/sh/Downloads/hackrf/codec2/src/fdmdv.c + /home/sh/Downloads/hackrf/codec2/src/fdmdv_internal.h + /home/sh/Downloads/hackrf/codec2/src/hanning.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h + /home/sh/Downloads/hackrf/codec2/src/machdep.h + /home/sh/Downloads/hackrf/codec2/src/modem_stats.h + /home/sh/Downloads/hackrf/codec2/src/os.h + /home/sh/Downloads/hackrf/codec2/src/pilot_coeff.h + /home/sh/Downloads/hackrf/codec2/src/rn.h + /home/sh/Downloads/hackrf/codec2/src/rxdec_coeff.h + /home/sh/Downloads/hackrf/codec2/src/test_bits.h +unittest/CMakeFiles/tfdmdv.dir/__/src/kiss_fft.c.o + /home/sh/Downloads/hackrf/codec2/src/_kiss_fft_guts.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.c + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h +unittest/CMakeFiles/tfdmdv.dir/__/src/octave.c.o + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/octave.c + /home/sh/Downloads/hackrf/codec2/src/octave.h +unittest/CMakeFiles/tfdmdv.dir/tfdmdv.c.o + ../unittest/../src/codec2_fdmdv.h + ../unittest/../src/codec2_fft.h + ../unittest/../src/comp.h + ../unittest/../src/defines.h + ../unittest/../src/fdmdv_internal.h + ../unittest/../src/kiss_fft.h + ../unittest/../src/kiss_fftr.h + ../unittest/../src/modem_stats.h + ../unittest/../src/octave.h + /home/sh/Downloads/hackrf/codec2/unittest/tfdmdv.c diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfdmdv.dir/depend.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfdmdv.dir/depend.make new file mode 100644 index 0000000..0df3b4e --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfdmdv.dir/depend.make @@ -0,0 +1,41 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +unittest/CMakeFiles/tfdmdv.dir/__/src/fdmdv.c.o: ../src/codec2_fdmdv.h +unittest/CMakeFiles/tfdmdv.dir/__/src/fdmdv.c.o: ../src/codec2_fft.h +unittest/CMakeFiles/tfdmdv.dir/__/src/fdmdv.c.o: ../src/comp.h +unittest/CMakeFiles/tfdmdv.dir/__/src/fdmdv.c.o: ../src/comp_prim.h +unittest/CMakeFiles/tfdmdv.dir/__/src/fdmdv.c.o: ../src/debug_alloc.h +unittest/CMakeFiles/tfdmdv.dir/__/src/fdmdv.c.o: ../src/defines.h +unittest/CMakeFiles/tfdmdv.dir/__/src/fdmdv.c.o: ../src/fdmdv.c +unittest/CMakeFiles/tfdmdv.dir/__/src/fdmdv.c.o: ../src/fdmdv_internal.h +unittest/CMakeFiles/tfdmdv.dir/__/src/fdmdv.c.o: ../src/hanning.h +unittest/CMakeFiles/tfdmdv.dir/__/src/fdmdv.c.o: ../src/kiss_fft.h +unittest/CMakeFiles/tfdmdv.dir/__/src/fdmdv.c.o: ../src/kiss_fftr.h +unittest/CMakeFiles/tfdmdv.dir/__/src/fdmdv.c.o: ../src/machdep.h +unittest/CMakeFiles/tfdmdv.dir/__/src/fdmdv.c.o: ../src/modem_stats.h +unittest/CMakeFiles/tfdmdv.dir/__/src/fdmdv.c.o: ../src/os.h +unittest/CMakeFiles/tfdmdv.dir/__/src/fdmdv.c.o: ../src/pilot_coeff.h +unittest/CMakeFiles/tfdmdv.dir/__/src/fdmdv.c.o: ../src/rn.h +unittest/CMakeFiles/tfdmdv.dir/__/src/fdmdv.c.o: ../src/rxdec_coeff.h +unittest/CMakeFiles/tfdmdv.dir/__/src/fdmdv.c.o: ../src/test_bits.h + +unittest/CMakeFiles/tfdmdv.dir/__/src/kiss_fft.c.o: ../src/_kiss_fft_guts.h +unittest/CMakeFiles/tfdmdv.dir/__/src/kiss_fft.c.o: ../src/kiss_fft.c +unittest/CMakeFiles/tfdmdv.dir/__/src/kiss_fft.c.o: ../src/kiss_fft.h + +unittest/CMakeFiles/tfdmdv.dir/__/src/octave.c.o: ../src/comp.h +unittest/CMakeFiles/tfdmdv.dir/__/src/octave.c.o: ../src/octave.c +unittest/CMakeFiles/tfdmdv.dir/__/src/octave.c.o: ../src/octave.h + +unittest/CMakeFiles/tfdmdv.dir/tfdmdv.c.o: ../unittest/../src/codec2_fdmdv.h +unittest/CMakeFiles/tfdmdv.dir/tfdmdv.c.o: ../unittest/../src/codec2_fft.h +unittest/CMakeFiles/tfdmdv.dir/tfdmdv.c.o: ../unittest/../src/comp.h +unittest/CMakeFiles/tfdmdv.dir/tfdmdv.c.o: ../unittest/../src/defines.h +unittest/CMakeFiles/tfdmdv.dir/tfdmdv.c.o: ../unittest/../src/fdmdv_internal.h +unittest/CMakeFiles/tfdmdv.dir/tfdmdv.c.o: ../unittest/../src/kiss_fft.h +unittest/CMakeFiles/tfdmdv.dir/tfdmdv.c.o: ../unittest/../src/kiss_fftr.h +unittest/CMakeFiles/tfdmdv.dir/tfdmdv.c.o: ../unittest/../src/modem_stats.h +unittest/CMakeFiles/tfdmdv.dir/tfdmdv.c.o: ../unittest/../src/octave.h +unittest/CMakeFiles/tfdmdv.dir/tfdmdv.c.o: ../unittest/tfdmdv.c + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfdmdv.dir/flags.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfdmdv.dir/flags.make new file mode 100644 index 0000000..7c524b1 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfdmdv.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DFLOATING_POINT -DGIT_HASH=\"df2ed16c\" -DMODEMPROBE_ENABLE -DVAR_ARRAYS -DXXXXX -D_GNU_SOURCE=1 -D__UNITTEST__ + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/unittest/../src -I/home/sh/Downloads/hackrf/codec2/src + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfdmdv.dir/link.txt b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfdmdv.dir/link.txt new file mode 100644 index 0000000..6c08f0b --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfdmdv.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/tfdmdv.dir/tfdmdv.c.o CMakeFiles/tfdmdv.dir/__/src/fdmdv.c.o CMakeFiles/tfdmdv.dir/__/src/kiss_fft.c.o CMakeFiles/tfdmdv.dir/__/src/octave.c.o -o tfdmdv -Wl,-rpath,/home/sh/Downloads/hackrf/codec2/build_linux/src ../src/libcodec2.so.0.9 -lm diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfdmdv.dir/progress.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfdmdv.dir/progress.make new file mode 100644 index 0000000..8a8d4de --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfdmdv.dir/progress.make @@ -0,0 +1,6 @@ +CMAKE_PROGRESS_1 = +CMAKE_PROGRESS_2 = +CMAKE_PROGRESS_3 = 77 +CMAKE_PROGRESS_4 = +CMAKE_PROGRESS_5 = + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfdmdv.dir/tfdmdv.c.o b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfdmdv.dir/tfdmdv.c.o new file mode 100644 index 0000000..82bbb1c Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfdmdv.dir/tfdmdv.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfifo.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfifo.dir/C.includecache new file mode 100644 index 0000000..f0d54c3 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfifo.dir/C.includecache @@ -0,0 +1,32 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +../unittest/../src/codec2_fifo.h + +/home/sh/Downloads/hackrf/codec2/src/codec2_fifo.c +assert.h +- +stdlib.h +- +stdio.h +- +codec2_fifo.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fifo.h + +/home/sh/Downloads/hackrf/codec2/src/codec2_fifo.h + +/home/sh/Downloads/hackrf/codec2/unittest/tfifo.c +assert.h +- +stdio.h +- +pthread.h +- +codec2_fifo.h +/home/sh/Downloads/hackrf/codec2/unittest/codec2_fifo.h + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfifo.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfifo.dir/DependInfo.cmake new file mode 100644 index 0000000..b5b974e --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfifo.dir/DependInfo.cmake @@ -0,0 +1,36 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/src/codec2_fifo.c" "/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/tfifo.dir/__/src/codec2_fifo.c.o" + "/home/sh/Downloads/hackrf/codec2/unittest/tfifo.c" "/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/tfifo.dir/tfifo.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "FLOATING_POINT" + "GIT_HASH=\"df2ed16c\"" + "MODEMPROBE_ENABLE" + "VAR_ARRAYS" + "XXXXX" + "_GNU_SOURCE=1" + "__UNITTEST__" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../unittest/../src" + "../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/DependInfo.cmake" + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfifo.dir/__/src/codec2_fifo.c.o b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfifo.dir/__/src/codec2_fifo.c.o new file mode 100644 index 0000000..31f2a41 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfifo.dir/__/src/codec2_fifo.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfifo.dir/build.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfifo.dir/build.make new file mode 100644 index 0000000..4854af8 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfifo.dir/build.make @@ -0,0 +1,114 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include unittest/CMakeFiles/tfifo.dir/depend.make + +# Include the progress variables for this target. +include unittest/CMakeFiles/tfifo.dir/progress.make + +# Include the compile flags for this target's objects. +include unittest/CMakeFiles/tfifo.dir/flags.make + +unittest/CMakeFiles/tfifo.dir/tfifo.c.o: unittest/CMakeFiles/tfifo.dir/flags.make +unittest/CMakeFiles/tfifo.dir/tfifo.c.o: ../unittest/tfifo.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object unittest/CMakeFiles/tfifo.dir/tfifo.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/tfifo.dir/tfifo.c.o -c /home/sh/Downloads/hackrf/codec2/unittest/tfifo.c + +unittest/CMakeFiles/tfifo.dir/tfifo.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/tfifo.dir/tfifo.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/unittest/tfifo.c > CMakeFiles/tfifo.dir/tfifo.c.i + +unittest/CMakeFiles/tfifo.dir/tfifo.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/tfifo.dir/tfifo.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/unittest/tfifo.c -o CMakeFiles/tfifo.dir/tfifo.c.s + +unittest/CMakeFiles/tfifo.dir/__/src/codec2_fifo.c.o: unittest/CMakeFiles/tfifo.dir/flags.make +unittest/CMakeFiles/tfifo.dir/__/src/codec2_fifo.c.o: ../src/codec2_fifo.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Building C object unittest/CMakeFiles/tfifo.dir/__/src/codec2_fifo.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/tfifo.dir/__/src/codec2_fifo.c.o -c /home/sh/Downloads/hackrf/codec2/src/codec2_fifo.c + +unittest/CMakeFiles/tfifo.dir/__/src/codec2_fifo.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/tfifo.dir/__/src/codec2_fifo.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/codec2_fifo.c > CMakeFiles/tfifo.dir/__/src/codec2_fifo.c.i + +unittest/CMakeFiles/tfifo.dir/__/src/codec2_fifo.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/tfifo.dir/__/src/codec2_fifo.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/codec2_fifo.c -o CMakeFiles/tfifo.dir/__/src/codec2_fifo.c.s + +# Object files for target tfifo +tfifo_OBJECTS = \ +"CMakeFiles/tfifo.dir/tfifo.c.o" \ +"CMakeFiles/tfifo.dir/__/src/codec2_fifo.c.o" + +# External object files for target tfifo +tfifo_EXTERNAL_OBJECTS = + +unittest/tfifo: unittest/CMakeFiles/tfifo.dir/tfifo.c.o +unittest/tfifo: unittest/CMakeFiles/tfifo.dir/__/src/codec2_fifo.c.o +unittest/tfifo: unittest/CMakeFiles/tfifo.dir/build.make +unittest/tfifo: src/libcodec2.so.0.9 +unittest/tfifo: unittest/CMakeFiles/tfifo.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_3) "Linking C executable tfifo" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/tfifo.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +unittest/CMakeFiles/tfifo.dir/build: unittest/tfifo + +.PHONY : unittest/CMakeFiles/tfifo.dir/build + +unittest/CMakeFiles/tfifo.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && $(CMAKE_COMMAND) -P CMakeFiles/tfifo.dir/cmake_clean.cmake +.PHONY : unittest/CMakeFiles/tfifo.dir/clean + +unittest/CMakeFiles/tfifo.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/unittest /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/unittest /home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/tfifo.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : unittest/CMakeFiles/tfifo.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfifo.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfifo.dir/cmake_clean.cmake new file mode 100644 index 0000000..9a421a0 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfifo.dir/cmake_clean.cmake @@ -0,0 +1,11 @@ +file(REMOVE_RECURSE + "CMakeFiles/tfifo.dir/tfifo.c.o" + "CMakeFiles/tfifo.dir/__/src/codec2_fifo.c.o" + "tfifo.pdb" + "tfifo" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/tfifo.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfifo.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfifo.dir/depend.internal new file mode 100644 index 0000000..259b9da --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfifo.dir/depend.internal @@ -0,0 +1,9 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +unittest/CMakeFiles/tfifo.dir/__/src/codec2_fifo.c.o + /home/sh/Downloads/hackrf/codec2/src/codec2_fifo.c + /home/sh/Downloads/hackrf/codec2/src/codec2_fifo.h +unittest/CMakeFiles/tfifo.dir/tfifo.c.o + ../unittest/../src/codec2_fifo.h + /home/sh/Downloads/hackrf/codec2/unittest/tfifo.c diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfifo.dir/depend.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfifo.dir/depend.make new file mode 100644 index 0000000..7caf8ec --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfifo.dir/depend.make @@ -0,0 +1,9 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +unittest/CMakeFiles/tfifo.dir/__/src/codec2_fifo.c.o: ../src/codec2_fifo.c +unittest/CMakeFiles/tfifo.dir/__/src/codec2_fifo.c.o: ../src/codec2_fifo.h + +unittest/CMakeFiles/tfifo.dir/tfifo.c.o: ../unittest/../src/codec2_fifo.h +unittest/CMakeFiles/tfifo.dir/tfifo.c.o: ../unittest/tfifo.c + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfifo.dir/flags.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfifo.dir/flags.make new file mode 100644 index 0000000..7c524b1 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfifo.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DFLOATING_POINT -DGIT_HASH=\"df2ed16c\" -DMODEMPROBE_ENABLE -DVAR_ARRAYS -DXXXXX -D_GNU_SOURCE=1 -D__UNITTEST__ + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/unittest/../src -I/home/sh/Downloads/hackrf/codec2/src + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfifo.dir/link.txt b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfifo.dir/link.txt new file mode 100644 index 0000000..8d119d4 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfifo.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/tfifo.dir/tfifo.c.o CMakeFiles/tfifo.dir/__/src/codec2_fifo.c.o -o tfifo -Wl,-rpath,/home/sh/Downloads/hackrf/codec2/build_linux/src ../src/libcodec2.so.0.9 -lpthread -lm diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfifo.dir/progress.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfifo.dir/progress.make new file mode 100644 index 0000000..aac6d7c --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfifo.dir/progress.make @@ -0,0 +1,4 @@ +CMAKE_PROGRESS_1 = 78 +CMAKE_PROGRESS_2 = +CMAKE_PROGRESS_3 = + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfifo.dir/tfifo.c.o b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfifo.dir/tfifo.c.o new file mode 100644 index 0000000..ab521c0 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfifo.dir/tfifo.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfmfsk.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfmfsk.dir/C.includecache new file mode 100644 index 0000000..aff676d --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfmfsk.dir/C.includecache @@ -0,0 +1,78 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +../unittest/../src/comp.h + +../unittest/../src/comp_prim.h + +../unittest/../src/fmfsk.c +assert.h +- +stdint.h +- +stdlib.h +- +math.h +- +string.h +- +stdio.h +- +fmfsk.h +../unittest/../src/fmfsk.h +modem_probe.h +../unittest/../src/modem_probe.h +comp_prim.h +../unittest/../src/comp_prim.h + +../unittest/../src/fmfsk.h +stdint.h +- +comp.h +../unittest/../src/comp.h +modem_stats.h +../unittest/../src/modem_stats.h + +../unittest/../src/kiss_fft.h +stdlib.h +- +stdio.h +- +math.h +- +string.h +- +xmmintrin.h +- +sys/types.h +- + +../unittest/../src/modem_probe.h +stdint.h +- +stdlib.h +- +complex.h +- +comp.h +../unittest/../src/comp.h + +../unittest/../src/modem_stats.h +comp.h +../unittest/../src/comp.h +kiss_fft.h +../unittest/../src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/unittest/tfmfsk.c +modem_probe.h +/home/sh/Downloads/hackrf/codec2/unittest/modem_probe.h +stdio.h +- +fmfsk.c +/home/sh/Downloads/hackrf/codec2/unittest/fmfsk.c + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfmfsk.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfmfsk.dir/DependInfo.cmake new file mode 100644 index 0000000..bbb21fb --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfmfsk.dir/DependInfo.cmake @@ -0,0 +1,35 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/src/modem_probe.c" "/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/tfmfsk.dir/__/src/modem_probe.c.o" + "/home/sh/Downloads/hackrf/codec2/src/octave.c" "/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/tfmfsk.dir/__/src/octave.c.o" + "/home/sh/Downloads/hackrf/codec2/unittest/tfmfsk.c" "/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/tfmfsk.dir/tfmfsk.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "FLOATING_POINT" + "GIT_HASH=\"df2ed16c\"" + "MODEMPROBE_ENABLE" + "VAR_ARRAYS" + "XXXXX" + "_GNU_SOURCE=1" + "__UNITTEST__" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../unittest/../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfmfsk.dir/__/src/modem_probe.c.o b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfmfsk.dir/__/src/modem_probe.c.o new file mode 100644 index 0000000..2ba1acf Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfmfsk.dir/__/src/modem_probe.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfmfsk.dir/__/src/octave.c.o b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfmfsk.dir/__/src/octave.c.o new file mode 100644 index 0000000..e187c72 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfmfsk.dir/__/src/octave.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfmfsk.dir/build.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfmfsk.dir/build.make new file mode 100644 index 0000000..8092f3d --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfmfsk.dir/build.make @@ -0,0 +1,128 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include unittest/CMakeFiles/tfmfsk.dir/depend.make + +# Include the progress variables for this target. +include unittest/CMakeFiles/tfmfsk.dir/progress.make + +# Include the compile flags for this target's objects. +include unittest/CMakeFiles/tfmfsk.dir/flags.make + +unittest/CMakeFiles/tfmfsk.dir/tfmfsk.c.o: unittest/CMakeFiles/tfmfsk.dir/flags.make +unittest/CMakeFiles/tfmfsk.dir/tfmfsk.c.o: ../unittest/tfmfsk.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object unittest/CMakeFiles/tfmfsk.dir/tfmfsk.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/tfmfsk.dir/tfmfsk.c.o -c /home/sh/Downloads/hackrf/codec2/unittest/tfmfsk.c + +unittest/CMakeFiles/tfmfsk.dir/tfmfsk.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/tfmfsk.dir/tfmfsk.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/unittest/tfmfsk.c > CMakeFiles/tfmfsk.dir/tfmfsk.c.i + +unittest/CMakeFiles/tfmfsk.dir/tfmfsk.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/tfmfsk.dir/tfmfsk.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/unittest/tfmfsk.c -o CMakeFiles/tfmfsk.dir/tfmfsk.c.s + +unittest/CMakeFiles/tfmfsk.dir/__/src/octave.c.o: unittest/CMakeFiles/tfmfsk.dir/flags.make +unittest/CMakeFiles/tfmfsk.dir/__/src/octave.c.o: ../src/octave.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Building C object unittest/CMakeFiles/tfmfsk.dir/__/src/octave.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/tfmfsk.dir/__/src/octave.c.o -c /home/sh/Downloads/hackrf/codec2/src/octave.c + +unittest/CMakeFiles/tfmfsk.dir/__/src/octave.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/tfmfsk.dir/__/src/octave.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/octave.c > CMakeFiles/tfmfsk.dir/__/src/octave.c.i + +unittest/CMakeFiles/tfmfsk.dir/__/src/octave.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/tfmfsk.dir/__/src/octave.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/octave.c -o CMakeFiles/tfmfsk.dir/__/src/octave.c.s + +unittest/CMakeFiles/tfmfsk.dir/__/src/modem_probe.c.o: unittest/CMakeFiles/tfmfsk.dir/flags.make +unittest/CMakeFiles/tfmfsk.dir/__/src/modem_probe.c.o: ../src/modem_probe.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_3) "Building C object unittest/CMakeFiles/tfmfsk.dir/__/src/modem_probe.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/tfmfsk.dir/__/src/modem_probe.c.o -c /home/sh/Downloads/hackrf/codec2/src/modem_probe.c + +unittest/CMakeFiles/tfmfsk.dir/__/src/modem_probe.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/tfmfsk.dir/__/src/modem_probe.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/modem_probe.c > CMakeFiles/tfmfsk.dir/__/src/modem_probe.c.i + +unittest/CMakeFiles/tfmfsk.dir/__/src/modem_probe.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/tfmfsk.dir/__/src/modem_probe.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/modem_probe.c -o CMakeFiles/tfmfsk.dir/__/src/modem_probe.c.s + +# Object files for target tfmfsk +tfmfsk_OBJECTS = \ +"CMakeFiles/tfmfsk.dir/tfmfsk.c.o" \ +"CMakeFiles/tfmfsk.dir/__/src/octave.c.o" \ +"CMakeFiles/tfmfsk.dir/__/src/modem_probe.c.o" + +# External object files for target tfmfsk +tfmfsk_EXTERNAL_OBJECTS = + +unittest/tfmfsk: unittest/CMakeFiles/tfmfsk.dir/tfmfsk.c.o +unittest/tfmfsk: unittest/CMakeFiles/tfmfsk.dir/__/src/octave.c.o +unittest/tfmfsk: unittest/CMakeFiles/tfmfsk.dir/__/src/modem_probe.c.o +unittest/tfmfsk: unittest/CMakeFiles/tfmfsk.dir/build.make +unittest/tfmfsk: unittest/CMakeFiles/tfmfsk.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_4) "Linking C executable tfmfsk" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/tfmfsk.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +unittest/CMakeFiles/tfmfsk.dir/build: unittest/tfmfsk + +.PHONY : unittest/CMakeFiles/tfmfsk.dir/build + +unittest/CMakeFiles/tfmfsk.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && $(CMAKE_COMMAND) -P CMakeFiles/tfmfsk.dir/cmake_clean.cmake +.PHONY : unittest/CMakeFiles/tfmfsk.dir/clean + +unittest/CMakeFiles/tfmfsk.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/unittest /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/unittest /home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/tfmfsk.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : unittest/CMakeFiles/tfmfsk.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfmfsk.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfmfsk.dir/cmake_clean.cmake new file mode 100644 index 0000000..7eb5318 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfmfsk.dir/cmake_clean.cmake @@ -0,0 +1,12 @@ +file(REMOVE_RECURSE + "CMakeFiles/tfmfsk.dir/tfmfsk.c.o" + "CMakeFiles/tfmfsk.dir/__/src/octave.c.o" + "CMakeFiles/tfmfsk.dir/__/src/modem_probe.c.o" + "tfmfsk.pdb" + "tfmfsk" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/tfmfsk.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfmfsk.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfmfsk.dir/depend.internal new file mode 100644 index 0000000..1ea5ae6 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfmfsk.dir/depend.internal @@ -0,0 +1,20 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +unittest/CMakeFiles/tfmfsk.dir/__/src/modem_probe.c.o + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/modem_probe.c + /home/sh/Downloads/hackrf/codec2/src/octave.h +unittest/CMakeFiles/tfmfsk.dir/__/src/octave.c.o + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/octave.c + /home/sh/Downloads/hackrf/codec2/src/octave.h +unittest/CMakeFiles/tfmfsk.dir/tfmfsk.c.o + ../unittest/../src/comp.h + ../unittest/../src/comp_prim.h + ../unittest/../src/fmfsk.c + ../unittest/../src/fmfsk.h + ../unittest/../src/kiss_fft.h + ../unittest/../src/modem_probe.h + ../unittest/../src/modem_stats.h + /home/sh/Downloads/hackrf/codec2/unittest/tfmfsk.c diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfmfsk.dir/depend.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfmfsk.dir/depend.make new file mode 100644 index 0000000..5fdfb11 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfmfsk.dir/depend.make @@ -0,0 +1,20 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +unittest/CMakeFiles/tfmfsk.dir/__/src/modem_probe.c.o: ../src/comp.h +unittest/CMakeFiles/tfmfsk.dir/__/src/modem_probe.c.o: ../src/modem_probe.c +unittest/CMakeFiles/tfmfsk.dir/__/src/modem_probe.c.o: ../src/octave.h + +unittest/CMakeFiles/tfmfsk.dir/__/src/octave.c.o: ../src/comp.h +unittest/CMakeFiles/tfmfsk.dir/__/src/octave.c.o: ../src/octave.c +unittest/CMakeFiles/tfmfsk.dir/__/src/octave.c.o: ../src/octave.h + +unittest/CMakeFiles/tfmfsk.dir/tfmfsk.c.o: ../unittest/../src/comp.h +unittest/CMakeFiles/tfmfsk.dir/tfmfsk.c.o: ../unittest/../src/comp_prim.h +unittest/CMakeFiles/tfmfsk.dir/tfmfsk.c.o: ../unittest/../src/fmfsk.c +unittest/CMakeFiles/tfmfsk.dir/tfmfsk.c.o: ../unittest/../src/fmfsk.h +unittest/CMakeFiles/tfmfsk.dir/tfmfsk.c.o: ../unittest/../src/kiss_fft.h +unittest/CMakeFiles/tfmfsk.dir/tfmfsk.c.o: ../unittest/../src/modem_probe.h +unittest/CMakeFiles/tfmfsk.dir/tfmfsk.c.o: ../unittest/../src/modem_stats.h +unittest/CMakeFiles/tfmfsk.dir/tfmfsk.c.o: ../unittest/tfmfsk.c + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfmfsk.dir/flags.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfmfsk.dir/flags.make new file mode 100644 index 0000000..92b2429 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfmfsk.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DFLOATING_POINT -DGIT_HASH=\"df2ed16c\" -DMODEMPROBE_ENABLE -DVAR_ARRAYS -DXXXXX -D_GNU_SOURCE=1 -D__UNITTEST__ + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/unittest/../src + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfmfsk.dir/link.txt b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfmfsk.dir/link.txt new file mode 100644 index 0000000..cc18219 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfmfsk.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/tfmfsk.dir/tfmfsk.c.o CMakeFiles/tfmfsk.dir/__/src/octave.c.o CMakeFiles/tfmfsk.dir/__/src/modem_probe.c.o -o tfmfsk -lm diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfmfsk.dir/progress.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfmfsk.dir/progress.make new file mode 100644 index 0000000..6736d10 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfmfsk.dir/progress.make @@ -0,0 +1,5 @@ +CMAKE_PROGRESS_1 = 79 +CMAKE_PROGRESS_2 = +CMAKE_PROGRESS_3 = +CMAKE_PROGRESS_4 = 80 + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfmfsk.dir/tfmfsk.c.o b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfmfsk.dir/tfmfsk.c.o new file mode 100644 index 0000000..6eed4ef Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfmfsk.dir/tfmfsk.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/C.includecache new file mode 100644 index 0000000..25aaecd --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/C.includecache @@ -0,0 +1,24 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +../unittest/../src/comp.h + +../unittest/../src/freedv_api.h +sys/types.h +- +comp.h +../unittest/../src/comp.h + +/home/sh/Downloads/hackrf/codec2/unittest/tfreedv_2400A_rawdata.c +stdio.h +- +freedv_api.h +/home/sh/Downloads/hackrf/codec2/unittest/freedv_api.h +assert.h +/home/sh/Downloads/hackrf/codec2/unittest/assert.h + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/DependInfo.cmake new file mode 100644 index 0000000..0ef4d75 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/DependInfo.cmake @@ -0,0 +1,35 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/unittest/tfreedv_2400A_rawdata.c" "/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/tfreedv_2400A_rawdata.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "FLOATING_POINT" + "GIT_HASH=\"df2ed16c\"" + "MODEMPROBE_ENABLE" + "VAR_ARRAYS" + "XXXXX" + "_GNU_SOURCE=1" + "__UNITTEST__" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../unittest/../src" + "../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/DependInfo.cmake" + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/build.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/build.make new file mode 100644 index 0000000..ecf09ac --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/build.make @@ -0,0 +1,99 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/depend.make + +# Include the progress variables for this target. +include unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/progress.make + +# Include the compile flags for this target's objects. +include unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/flags.make + +unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/tfreedv_2400A_rawdata.c.o: unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/flags.make +unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/tfreedv_2400A_rawdata.c.o: ../unittest/tfreedv_2400A_rawdata.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/tfreedv_2400A_rawdata.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/tfreedv_2400A_rawdata.dir/tfreedv_2400A_rawdata.c.o -c /home/sh/Downloads/hackrf/codec2/unittest/tfreedv_2400A_rawdata.c + +unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/tfreedv_2400A_rawdata.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/tfreedv_2400A_rawdata.dir/tfreedv_2400A_rawdata.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/unittest/tfreedv_2400A_rawdata.c > CMakeFiles/tfreedv_2400A_rawdata.dir/tfreedv_2400A_rawdata.c.i + +unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/tfreedv_2400A_rawdata.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/tfreedv_2400A_rawdata.dir/tfreedv_2400A_rawdata.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/unittest/tfreedv_2400A_rawdata.c -o CMakeFiles/tfreedv_2400A_rawdata.dir/tfreedv_2400A_rawdata.c.s + +# Object files for target tfreedv_2400A_rawdata +tfreedv_2400A_rawdata_OBJECTS = \ +"CMakeFiles/tfreedv_2400A_rawdata.dir/tfreedv_2400A_rawdata.c.o" + +# External object files for target tfreedv_2400A_rawdata +tfreedv_2400A_rawdata_EXTERNAL_OBJECTS = + +unittest/tfreedv_2400A_rawdata: unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/tfreedv_2400A_rawdata.c.o +unittest/tfreedv_2400A_rawdata: unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/build.make +unittest/tfreedv_2400A_rawdata: src/libcodec2.so.0.9 +unittest/tfreedv_2400A_rawdata: unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking C executable tfreedv_2400A_rawdata" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/tfreedv_2400A_rawdata.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/build: unittest/tfreedv_2400A_rawdata + +.PHONY : unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/build + +unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && $(CMAKE_COMMAND) -P CMakeFiles/tfreedv_2400A_rawdata.dir/cmake_clean.cmake +.PHONY : unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/clean + +unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/unittest /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/unittest /home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/cmake_clean.cmake new file mode 100644 index 0000000..77440df --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +file(REMOVE_RECURSE + "CMakeFiles/tfreedv_2400A_rawdata.dir/tfreedv_2400A_rawdata.c.o" + "tfreedv_2400A_rawdata.pdb" + "tfreedv_2400A_rawdata" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/tfreedv_2400A_rawdata.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/depend.internal new file mode 100644 index 0000000..53c3211 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/depend.internal @@ -0,0 +1,7 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/tfreedv_2400A_rawdata.c.o + ../unittest/../src/comp.h + ../unittest/../src/freedv_api.h + /home/sh/Downloads/hackrf/codec2/unittest/tfreedv_2400A_rawdata.c diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/depend.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/depend.make new file mode 100644 index 0000000..e7021eb --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/depend.make @@ -0,0 +1,7 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/tfreedv_2400A_rawdata.c.o: ../unittest/../src/comp.h +unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/tfreedv_2400A_rawdata.c.o: ../unittest/../src/freedv_api.h +unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/tfreedv_2400A_rawdata.c.o: ../unittest/tfreedv_2400A_rawdata.c + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/flags.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/flags.make new file mode 100644 index 0000000..7c524b1 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DFLOATING_POINT -DGIT_HASH=\"df2ed16c\" -DMODEMPROBE_ENABLE -DVAR_ARRAYS -DXXXXX -D_GNU_SOURCE=1 -D__UNITTEST__ + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/unittest/../src -I/home/sh/Downloads/hackrf/codec2/src + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/link.txt b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/link.txt new file mode 100644 index 0000000..920fa12 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/tfreedv_2400A_rawdata.dir/tfreedv_2400A_rawdata.c.o -o tfreedv_2400A_rawdata -Wl,-rpath,/home/sh/Downloads/hackrf/codec2/build_linux/src ../src/libcodec2.so.0.9 -lm diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/progress.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/progress.make new file mode 100644 index 0000000..6c287f1 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = +CMAKE_PROGRESS_2 = + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/tfreedv_2400A_rawdata.c.o b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/tfreedv_2400A_rawdata.c.o new file mode 100644 index 0000000..237b728 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/tfreedv_2400A_rawdata.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/C.includecache new file mode 100644 index 0000000..be6a753 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/C.includecache @@ -0,0 +1,24 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +../unittest/../src/comp.h + +../unittest/../src/freedv_api.h +sys/types.h +- +comp.h +../unittest/../src/comp.h + +/home/sh/Downloads/hackrf/codec2/unittest/tfreedv_2400B_rawdata.c +stdio.h +- +freedv_api.h +/home/sh/Downloads/hackrf/codec2/unittest/freedv_api.h +assert.h +/home/sh/Downloads/hackrf/codec2/unittest/assert.h + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/DependInfo.cmake new file mode 100644 index 0000000..9d3e469 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/DependInfo.cmake @@ -0,0 +1,35 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/unittest/tfreedv_2400B_rawdata.c" "/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/tfreedv_2400B_rawdata.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "FLOATING_POINT" + "GIT_HASH=\"df2ed16c\"" + "MODEMPROBE_ENABLE" + "VAR_ARRAYS" + "XXXXX" + "_GNU_SOURCE=1" + "__UNITTEST__" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../unittest/../src" + "../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/DependInfo.cmake" + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/build.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/build.make new file mode 100644 index 0000000..1bebf3e --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/build.make @@ -0,0 +1,99 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/depend.make + +# Include the progress variables for this target. +include unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/progress.make + +# Include the compile flags for this target's objects. +include unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/flags.make + +unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/tfreedv_2400B_rawdata.c.o: unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/flags.make +unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/tfreedv_2400B_rawdata.c.o: ../unittest/tfreedv_2400B_rawdata.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/tfreedv_2400B_rawdata.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/tfreedv_2400B_rawdata.dir/tfreedv_2400B_rawdata.c.o -c /home/sh/Downloads/hackrf/codec2/unittest/tfreedv_2400B_rawdata.c + +unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/tfreedv_2400B_rawdata.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/tfreedv_2400B_rawdata.dir/tfreedv_2400B_rawdata.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/unittest/tfreedv_2400B_rawdata.c > CMakeFiles/tfreedv_2400B_rawdata.dir/tfreedv_2400B_rawdata.c.i + +unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/tfreedv_2400B_rawdata.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/tfreedv_2400B_rawdata.dir/tfreedv_2400B_rawdata.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/unittest/tfreedv_2400B_rawdata.c -o CMakeFiles/tfreedv_2400B_rawdata.dir/tfreedv_2400B_rawdata.c.s + +# Object files for target tfreedv_2400B_rawdata +tfreedv_2400B_rawdata_OBJECTS = \ +"CMakeFiles/tfreedv_2400B_rawdata.dir/tfreedv_2400B_rawdata.c.o" + +# External object files for target tfreedv_2400B_rawdata +tfreedv_2400B_rawdata_EXTERNAL_OBJECTS = + +unittest/tfreedv_2400B_rawdata: unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/tfreedv_2400B_rawdata.c.o +unittest/tfreedv_2400B_rawdata: unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/build.make +unittest/tfreedv_2400B_rawdata: src/libcodec2.so.0.9 +unittest/tfreedv_2400B_rawdata: unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking C executable tfreedv_2400B_rawdata" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/tfreedv_2400B_rawdata.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/build: unittest/tfreedv_2400B_rawdata + +.PHONY : unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/build + +unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && $(CMAKE_COMMAND) -P CMakeFiles/tfreedv_2400B_rawdata.dir/cmake_clean.cmake +.PHONY : unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/clean + +unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/unittest /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/unittest /home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/cmake_clean.cmake new file mode 100644 index 0000000..aedfa67 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +file(REMOVE_RECURSE + "CMakeFiles/tfreedv_2400B_rawdata.dir/tfreedv_2400B_rawdata.c.o" + "tfreedv_2400B_rawdata.pdb" + "tfreedv_2400B_rawdata" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/tfreedv_2400B_rawdata.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/depend.internal new file mode 100644 index 0000000..7024179 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/depend.internal @@ -0,0 +1,7 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/tfreedv_2400B_rawdata.c.o + ../unittest/../src/comp.h + ../unittest/../src/freedv_api.h + /home/sh/Downloads/hackrf/codec2/unittest/tfreedv_2400B_rawdata.c diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/depend.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/depend.make new file mode 100644 index 0000000..4949de2 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/depend.make @@ -0,0 +1,7 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/tfreedv_2400B_rawdata.c.o: ../unittest/../src/comp.h +unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/tfreedv_2400B_rawdata.c.o: ../unittest/../src/freedv_api.h +unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/tfreedv_2400B_rawdata.c.o: ../unittest/tfreedv_2400B_rawdata.c + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/flags.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/flags.make new file mode 100644 index 0000000..7c524b1 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DFLOATING_POINT -DGIT_HASH=\"df2ed16c\" -DMODEMPROBE_ENABLE -DVAR_ARRAYS -DXXXXX -D_GNU_SOURCE=1 -D__UNITTEST__ + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/unittest/../src -I/home/sh/Downloads/hackrf/codec2/src + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/link.txt b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/link.txt new file mode 100644 index 0000000..18edb7a --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/tfreedv_2400B_rawdata.dir/tfreedv_2400B_rawdata.c.o -o tfreedv_2400B_rawdata -Wl,-rpath,/home/sh/Downloads/hackrf/codec2/build_linux/src ../src/libcodec2.so.0.9 -lm diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/progress.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/progress.make new file mode 100644 index 0000000..8fc15f2 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = 81 +CMAKE_PROGRESS_2 = + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/tfreedv_2400B_rawdata.c.o b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/tfreedv_2400B_rawdata.c.o new file mode 100644 index 0000000..452ad97 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/tfreedv_2400B_rawdata.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/C.includecache new file mode 100644 index 0000000..a3385b2 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/C.includecache @@ -0,0 +1,24 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +../unittest/../src/comp.h + +../unittest/../src/freedv_api.h +sys/types.h +- +comp.h +../unittest/../src/comp.h + +/home/sh/Downloads/hackrf/codec2/unittest/tfreedv_800XA_rawdata.c +stdio.h +- +freedv_api.h +/home/sh/Downloads/hackrf/codec2/unittest/freedv_api.h +assert.h +/home/sh/Downloads/hackrf/codec2/unittest/assert.h + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/DependInfo.cmake new file mode 100644 index 0000000..0961af2 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/DependInfo.cmake @@ -0,0 +1,35 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/unittest/tfreedv_800XA_rawdata.c" "/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/tfreedv_800XA_rawdata.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "FLOATING_POINT" + "GIT_HASH=\"df2ed16c\"" + "MODEMPROBE_ENABLE" + "VAR_ARRAYS" + "XXXXX" + "_GNU_SOURCE=1" + "__UNITTEST__" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../unittest/../src" + "../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/DependInfo.cmake" + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/build.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/build.make new file mode 100644 index 0000000..a743578 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/build.make @@ -0,0 +1,99 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/depend.make + +# Include the progress variables for this target. +include unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/progress.make + +# Include the compile flags for this target's objects. +include unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/flags.make + +unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/tfreedv_800XA_rawdata.c.o: unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/flags.make +unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/tfreedv_800XA_rawdata.c.o: ../unittest/tfreedv_800XA_rawdata.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/tfreedv_800XA_rawdata.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/tfreedv_800XA_rawdata.dir/tfreedv_800XA_rawdata.c.o -c /home/sh/Downloads/hackrf/codec2/unittest/tfreedv_800XA_rawdata.c + +unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/tfreedv_800XA_rawdata.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/tfreedv_800XA_rawdata.dir/tfreedv_800XA_rawdata.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/unittest/tfreedv_800XA_rawdata.c > CMakeFiles/tfreedv_800XA_rawdata.dir/tfreedv_800XA_rawdata.c.i + +unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/tfreedv_800XA_rawdata.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/tfreedv_800XA_rawdata.dir/tfreedv_800XA_rawdata.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/unittest/tfreedv_800XA_rawdata.c -o CMakeFiles/tfreedv_800XA_rawdata.dir/tfreedv_800XA_rawdata.c.s + +# Object files for target tfreedv_800XA_rawdata +tfreedv_800XA_rawdata_OBJECTS = \ +"CMakeFiles/tfreedv_800XA_rawdata.dir/tfreedv_800XA_rawdata.c.o" + +# External object files for target tfreedv_800XA_rawdata +tfreedv_800XA_rawdata_EXTERNAL_OBJECTS = + +unittest/tfreedv_800XA_rawdata: unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/tfreedv_800XA_rawdata.c.o +unittest/tfreedv_800XA_rawdata: unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/build.make +unittest/tfreedv_800XA_rawdata: src/libcodec2.so.0.9 +unittest/tfreedv_800XA_rawdata: unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking C executable tfreedv_800XA_rawdata" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/tfreedv_800XA_rawdata.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/build: unittest/tfreedv_800XA_rawdata + +.PHONY : unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/build + +unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && $(CMAKE_COMMAND) -P CMakeFiles/tfreedv_800XA_rawdata.dir/cmake_clean.cmake +.PHONY : unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/clean + +unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/unittest /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/unittest /home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/cmake_clean.cmake new file mode 100644 index 0000000..2599947 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +file(REMOVE_RECURSE + "CMakeFiles/tfreedv_800XA_rawdata.dir/tfreedv_800XA_rawdata.c.o" + "tfreedv_800XA_rawdata.pdb" + "tfreedv_800XA_rawdata" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/tfreedv_800XA_rawdata.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/depend.internal new file mode 100644 index 0000000..f82053d --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/depend.internal @@ -0,0 +1,7 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/tfreedv_800XA_rawdata.c.o + ../unittest/../src/comp.h + ../unittest/../src/freedv_api.h + /home/sh/Downloads/hackrf/codec2/unittest/tfreedv_800XA_rawdata.c diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/depend.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/depend.make new file mode 100644 index 0000000..a269f88 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/depend.make @@ -0,0 +1,7 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/tfreedv_800XA_rawdata.c.o: ../unittest/../src/comp.h +unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/tfreedv_800XA_rawdata.c.o: ../unittest/../src/freedv_api.h +unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/tfreedv_800XA_rawdata.c.o: ../unittest/tfreedv_800XA_rawdata.c + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/flags.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/flags.make new file mode 100644 index 0000000..7c524b1 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DFLOATING_POINT -DGIT_HASH=\"df2ed16c\" -DMODEMPROBE_ENABLE -DVAR_ARRAYS -DXXXXX -D_GNU_SOURCE=1 -D__UNITTEST__ + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/unittest/../src -I/home/sh/Downloads/hackrf/codec2/src + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/link.txt b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/link.txt new file mode 100644 index 0000000..105bee5 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/tfreedv_800XA_rawdata.dir/tfreedv_800XA_rawdata.c.o -o tfreedv_800XA_rawdata -Wl,-rpath,/home/sh/Downloads/hackrf/codec2/build_linux/src ../src/libcodec2.so.0.9 -lm diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/progress.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/progress.make new file mode 100644 index 0000000..f21a792 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = +CMAKE_PROGRESS_2 = 82 + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/tfreedv_800XA_rawdata.c.o b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/tfreedv_800XA_rawdata.c.o new file mode 100644 index 0000000..67035ef Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/tfreedv_800XA_rawdata.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_data_channel.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_data_channel.dir/C.includecache new file mode 100644 index 0000000..234e8cf --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_data_channel.dir/C.includecache @@ -0,0 +1,32 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +../unittest/../src/freedv_data_channel.h +stdlib.h +- + +/home/sh/Downloads/hackrf/codec2/src/freedv_data_channel.c +freedv_data_channel.h +/home/sh/Downloads/hackrf/codec2/src/freedv_data_channel.h +stdlib.h +- +string.h +- + +/home/sh/Downloads/hackrf/codec2/src/freedv_data_channel.h +stdlib.h +- + +/home/sh/Downloads/hackrf/codec2/unittest/tfreedv_data_channel.c +freedv_data_channel.h +/home/sh/Downloads/hackrf/codec2/unittest/freedv_data_channel.h +stdio.h +- +string.h +- + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_data_channel.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_data_channel.dir/DependInfo.cmake new file mode 100644 index 0000000..5685f36 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_data_channel.dir/DependInfo.cmake @@ -0,0 +1,34 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/src/freedv_data_channel.c" "/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/tfreedv_data_channel.dir/__/src/freedv_data_channel.c.o" + "/home/sh/Downloads/hackrf/codec2/unittest/tfreedv_data_channel.c" "/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/tfreedv_data_channel.dir/tfreedv_data_channel.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "FLOATING_POINT" + "GIT_HASH=\"df2ed16c\"" + "MODEMPROBE_ENABLE" + "VAR_ARRAYS" + "XXXXX" + "_GNU_SOURCE=1" + "__UNITTEST__" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../unittest/../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_data_channel.dir/__/src/freedv_data_channel.c.o b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_data_channel.dir/__/src/freedv_data_channel.c.o new file mode 100644 index 0000000..53b5e61 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_data_channel.dir/__/src/freedv_data_channel.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_data_channel.dir/build.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_data_channel.dir/build.make new file mode 100644 index 0000000..86beb13 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_data_channel.dir/build.make @@ -0,0 +1,113 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include unittest/CMakeFiles/tfreedv_data_channel.dir/depend.make + +# Include the progress variables for this target. +include unittest/CMakeFiles/tfreedv_data_channel.dir/progress.make + +# Include the compile flags for this target's objects. +include unittest/CMakeFiles/tfreedv_data_channel.dir/flags.make + +unittest/CMakeFiles/tfreedv_data_channel.dir/tfreedv_data_channel.c.o: unittest/CMakeFiles/tfreedv_data_channel.dir/flags.make +unittest/CMakeFiles/tfreedv_data_channel.dir/tfreedv_data_channel.c.o: ../unittest/tfreedv_data_channel.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object unittest/CMakeFiles/tfreedv_data_channel.dir/tfreedv_data_channel.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/tfreedv_data_channel.dir/tfreedv_data_channel.c.o -c /home/sh/Downloads/hackrf/codec2/unittest/tfreedv_data_channel.c + +unittest/CMakeFiles/tfreedv_data_channel.dir/tfreedv_data_channel.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/tfreedv_data_channel.dir/tfreedv_data_channel.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/unittest/tfreedv_data_channel.c > CMakeFiles/tfreedv_data_channel.dir/tfreedv_data_channel.c.i + +unittest/CMakeFiles/tfreedv_data_channel.dir/tfreedv_data_channel.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/tfreedv_data_channel.dir/tfreedv_data_channel.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/unittest/tfreedv_data_channel.c -o CMakeFiles/tfreedv_data_channel.dir/tfreedv_data_channel.c.s + +unittest/CMakeFiles/tfreedv_data_channel.dir/__/src/freedv_data_channel.c.o: unittest/CMakeFiles/tfreedv_data_channel.dir/flags.make +unittest/CMakeFiles/tfreedv_data_channel.dir/__/src/freedv_data_channel.c.o: ../src/freedv_data_channel.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Building C object unittest/CMakeFiles/tfreedv_data_channel.dir/__/src/freedv_data_channel.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/tfreedv_data_channel.dir/__/src/freedv_data_channel.c.o -c /home/sh/Downloads/hackrf/codec2/src/freedv_data_channel.c + +unittest/CMakeFiles/tfreedv_data_channel.dir/__/src/freedv_data_channel.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/tfreedv_data_channel.dir/__/src/freedv_data_channel.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/freedv_data_channel.c > CMakeFiles/tfreedv_data_channel.dir/__/src/freedv_data_channel.c.i + +unittest/CMakeFiles/tfreedv_data_channel.dir/__/src/freedv_data_channel.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/tfreedv_data_channel.dir/__/src/freedv_data_channel.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/freedv_data_channel.c -o CMakeFiles/tfreedv_data_channel.dir/__/src/freedv_data_channel.c.s + +# Object files for target tfreedv_data_channel +tfreedv_data_channel_OBJECTS = \ +"CMakeFiles/tfreedv_data_channel.dir/tfreedv_data_channel.c.o" \ +"CMakeFiles/tfreedv_data_channel.dir/__/src/freedv_data_channel.c.o" + +# External object files for target tfreedv_data_channel +tfreedv_data_channel_EXTERNAL_OBJECTS = + +unittest/tfreedv_data_channel: unittest/CMakeFiles/tfreedv_data_channel.dir/tfreedv_data_channel.c.o +unittest/tfreedv_data_channel: unittest/CMakeFiles/tfreedv_data_channel.dir/__/src/freedv_data_channel.c.o +unittest/tfreedv_data_channel: unittest/CMakeFiles/tfreedv_data_channel.dir/build.make +unittest/tfreedv_data_channel: unittest/CMakeFiles/tfreedv_data_channel.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_3) "Linking C executable tfreedv_data_channel" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/tfreedv_data_channel.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +unittest/CMakeFiles/tfreedv_data_channel.dir/build: unittest/tfreedv_data_channel + +.PHONY : unittest/CMakeFiles/tfreedv_data_channel.dir/build + +unittest/CMakeFiles/tfreedv_data_channel.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && $(CMAKE_COMMAND) -P CMakeFiles/tfreedv_data_channel.dir/cmake_clean.cmake +.PHONY : unittest/CMakeFiles/tfreedv_data_channel.dir/clean + +unittest/CMakeFiles/tfreedv_data_channel.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/unittest /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/unittest /home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/tfreedv_data_channel.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : unittest/CMakeFiles/tfreedv_data_channel.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_data_channel.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_data_channel.dir/cmake_clean.cmake new file mode 100644 index 0000000..6f97253 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_data_channel.dir/cmake_clean.cmake @@ -0,0 +1,11 @@ +file(REMOVE_RECURSE + "CMakeFiles/tfreedv_data_channel.dir/tfreedv_data_channel.c.o" + "CMakeFiles/tfreedv_data_channel.dir/__/src/freedv_data_channel.c.o" + "tfreedv_data_channel.pdb" + "tfreedv_data_channel" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/tfreedv_data_channel.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_data_channel.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_data_channel.dir/depend.internal new file mode 100644 index 0000000..7ed3600 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_data_channel.dir/depend.internal @@ -0,0 +1,9 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +unittest/CMakeFiles/tfreedv_data_channel.dir/__/src/freedv_data_channel.c.o + /home/sh/Downloads/hackrf/codec2/src/freedv_data_channel.c + /home/sh/Downloads/hackrf/codec2/src/freedv_data_channel.h +unittest/CMakeFiles/tfreedv_data_channel.dir/tfreedv_data_channel.c.o + ../unittest/../src/freedv_data_channel.h + /home/sh/Downloads/hackrf/codec2/unittest/tfreedv_data_channel.c diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_data_channel.dir/depend.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_data_channel.dir/depend.make new file mode 100644 index 0000000..ea9610a --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_data_channel.dir/depend.make @@ -0,0 +1,9 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +unittest/CMakeFiles/tfreedv_data_channel.dir/__/src/freedv_data_channel.c.o: ../src/freedv_data_channel.c +unittest/CMakeFiles/tfreedv_data_channel.dir/__/src/freedv_data_channel.c.o: ../src/freedv_data_channel.h + +unittest/CMakeFiles/tfreedv_data_channel.dir/tfreedv_data_channel.c.o: ../unittest/../src/freedv_data_channel.h +unittest/CMakeFiles/tfreedv_data_channel.dir/tfreedv_data_channel.c.o: ../unittest/tfreedv_data_channel.c + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_data_channel.dir/flags.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_data_channel.dir/flags.make new file mode 100644 index 0000000..92b2429 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_data_channel.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DFLOATING_POINT -DGIT_HASH=\"df2ed16c\" -DMODEMPROBE_ENABLE -DVAR_ARRAYS -DXXXXX -D_GNU_SOURCE=1 -D__UNITTEST__ + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/unittest/../src + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_data_channel.dir/link.txt b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_data_channel.dir/link.txt new file mode 100644 index 0000000..ed7d3be --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_data_channel.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/tfreedv_data_channel.dir/tfreedv_data_channel.c.o CMakeFiles/tfreedv_data_channel.dir/__/src/freedv_data_channel.c.o -o tfreedv_data_channel diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_data_channel.dir/progress.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_data_channel.dir/progress.make new file mode 100644 index 0000000..6d5e5af --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_data_channel.dir/progress.make @@ -0,0 +1,4 @@ +CMAKE_PROGRESS_1 = +CMAKE_PROGRESS_2 = +CMAKE_PROGRESS_3 = 83 + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_data_channel.dir/tfreedv_data_channel.c.o b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_data_channel.dir/tfreedv_data_channel.c.o new file mode 100644 index 0000000..999d7a8 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfreedv_data_channel.dir/tfreedv_data_channel.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfsk.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfsk.dir/C.includecache new file mode 100644 index 0000000..f1d7341 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfsk.dir/C.includecache @@ -0,0 +1,82 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +../unittest/../src/comp.h + +../unittest/../src/comp_prim.h + +../unittest/../src/fsk.c +assert.h +- +stdlib.h +- +stdint.h +- +math.h +- +fsk.h +../unittest/../src/fsk.h +comp_prim.h +../unittest/../src/comp_prim.h +kiss_fftr.h +../unittest/../src/kiss_fftr.h +modem_probe.h +../unittest/../src/modem_probe.h + +../unittest/../src/fsk.h +stdint.h +- +comp.h +../unittest/../src/comp.h +kiss_fftr.h +../unittest/../src/kiss_fftr.h +modem_stats.h +../unittest/../src/modem_stats.h + +../unittest/../src/kiss_fft.h +stdlib.h +- +stdio.h +- +math.h +- +string.h +- +xmmintrin.h +- +sys/types.h +- + +../unittest/../src/kiss_fftr.h +kiss_fft.h +../unittest/../src/kiss_fft.h + +../unittest/../src/modem_probe.h +stdint.h +- +stdlib.h +- +complex.h +- +comp.h +../unittest/../src/comp.h + +../unittest/../src/modem_stats.h +comp.h +../unittest/../src/comp.h +kiss_fft.h +../unittest/../src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/unittest/tfsk.c +modem_probe.h +/home/sh/Downloads/hackrf/codec2/unittest/modem_probe.h +stdio.h +- +fsk.c +/home/sh/Downloads/hackrf/codec2/unittest/fsk.c + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfsk.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfsk.dir/DependInfo.cmake new file mode 100644 index 0000000..2da3bcb --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfsk.dir/DependInfo.cmake @@ -0,0 +1,37 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/src/kiss_fft.c" "/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/tfsk.dir/__/src/kiss_fft.c.o" + "/home/sh/Downloads/hackrf/codec2/src/kiss_fftr.c" "/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/tfsk.dir/__/src/kiss_fftr.c.o" + "/home/sh/Downloads/hackrf/codec2/src/modem_probe.c" "/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/tfsk.dir/__/src/modem_probe.c.o" + "/home/sh/Downloads/hackrf/codec2/src/octave.c" "/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/tfsk.dir/__/src/octave.c.o" + "/home/sh/Downloads/hackrf/codec2/unittest/tfsk.c" "/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/tfsk.dir/tfsk.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "FLOATING_POINT" + "GIT_HASH=\"df2ed16c\"" + "MODEMPROBE_ENABLE" + "VAR_ARRAYS" + "XXXXX" + "_GNU_SOURCE=1" + "__UNITTEST__" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../unittest/../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfsk.dir/__/src/kiss_fft.c.o b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfsk.dir/__/src/kiss_fft.c.o new file mode 100644 index 0000000..4899080 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfsk.dir/__/src/kiss_fft.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfsk.dir/__/src/kiss_fftr.c.o b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfsk.dir/__/src/kiss_fftr.c.o new file mode 100644 index 0000000..2f0185a Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfsk.dir/__/src/kiss_fftr.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfsk.dir/__/src/modem_probe.c.o b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfsk.dir/__/src/modem_probe.c.o new file mode 100644 index 0000000..2ba1acf Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfsk.dir/__/src/modem_probe.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfsk.dir/__/src/octave.c.o b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfsk.dir/__/src/octave.c.o new file mode 100644 index 0000000..e187c72 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfsk.dir/__/src/octave.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfsk.dir/build.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfsk.dir/build.make new file mode 100644 index 0000000..1ee5c27 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfsk.dir/build.make @@ -0,0 +1,158 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include unittest/CMakeFiles/tfsk.dir/depend.make + +# Include the progress variables for this target. +include unittest/CMakeFiles/tfsk.dir/progress.make + +# Include the compile flags for this target's objects. +include unittest/CMakeFiles/tfsk.dir/flags.make + +unittest/CMakeFiles/tfsk.dir/tfsk.c.o: unittest/CMakeFiles/tfsk.dir/flags.make +unittest/CMakeFiles/tfsk.dir/tfsk.c.o: ../unittest/tfsk.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object unittest/CMakeFiles/tfsk.dir/tfsk.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/tfsk.dir/tfsk.c.o -c /home/sh/Downloads/hackrf/codec2/unittest/tfsk.c + +unittest/CMakeFiles/tfsk.dir/tfsk.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/tfsk.dir/tfsk.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/unittest/tfsk.c > CMakeFiles/tfsk.dir/tfsk.c.i + +unittest/CMakeFiles/tfsk.dir/tfsk.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/tfsk.dir/tfsk.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/unittest/tfsk.c -o CMakeFiles/tfsk.dir/tfsk.c.s + +unittest/CMakeFiles/tfsk.dir/__/src/kiss_fft.c.o: unittest/CMakeFiles/tfsk.dir/flags.make +unittest/CMakeFiles/tfsk.dir/__/src/kiss_fft.c.o: ../src/kiss_fft.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Building C object unittest/CMakeFiles/tfsk.dir/__/src/kiss_fft.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/tfsk.dir/__/src/kiss_fft.c.o -c /home/sh/Downloads/hackrf/codec2/src/kiss_fft.c + +unittest/CMakeFiles/tfsk.dir/__/src/kiss_fft.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/tfsk.dir/__/src/kiss_fft.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/kiss_fft.c > CMakeFiles/tfsk.dir/__/src/kiss_fft.c.i + +unittest/CMakeFiles/tfsk.dir/__/src/kiss_fft.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/tfsk.dir/__/src/kiss_fft.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/kiss_fft.c -o CMakeFiles/tfsk.dir/__/src/kiss_fft.c.s + +unittest/CMakeFiles/tfsk.dir/__/src/kiss_fftr.c.o: unittest/CMakeFiles/tfsk.dir/flags.make +unittest/CMakeFiles/tfsk.dir/__/src/kiss_fftr.c.o: ../src/kiss_fftr.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_3) "Building C object unittest/CMakeFiles/tfsk.dir/__/src/kiss_fftr.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/tfsk.dir/__/src/kiss_fftr.c.o -c /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.c + +unittest/CMakeFiles/tfsk.dir/__/src/kiss_fftr.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/tfsk.dir/__/src/kiss_fftr.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.c > CMakeFiles/tfsk.dir/__/src/kiss_fftr.c.i + +unittest/CMakeFiles/tfsk.dir/__/src/kiss_fftr.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/tfsk.dir/__/src/kiss_fftr.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.c -o CMakeFiles/tfsk.dir/__/src/kiss_fftr.c.s + +unittest/CMakeFiles/tfsk.dir/__/src/octave.c.o: unittest/CMakeFiles/tfsk.dir/flags.make +unittest/CMakeFiles/tfsk.dir/__/src/octave.c.o: ../src/octave.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_4) "Building C object unittest/CMakeFiles/tfsk.dir/__/src/octave.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/tfsk.dir/__/src/octave.c.o -c /home/sh/Downloads/hackrf/codec2/src/octave.c + +unittest/CMakeFiles/tfsk.dir/__/src/octave.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/tfsk.dir/__/src/octave.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/octave.c > CMakeFiles/tfsk.dir/__/src/octave.c.i + +unittest/CMakeFiles/tfsk.dir/__/src/octave.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/tfsk.dir/__/src/octave.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/octave.c -o CMakeFiles/tfsk.dir/__/src/octave.c.s + +unittest/CMakeFiles/tfsk.dir/__/src/modem_probe.c.o: unittest/CMakeFiles/tfsk.dir/flags.make +unittest/CMakeFiles/tfsk.dir/__/src/modem_probe.c.o: ../src/modem_probe.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_5) "Building C object unittest/CMakeFiles/tfsk.dir/__/src/modem_probe.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/tfsk.dir/__/src/modem_probe.c.o -c /home/sh/Downloads/hackrf/codec2/src/modem_probe.c + +unittest/CMakeFiles/tfsk.dir/__/src/modem_probe.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/tfsk.dir/__/src/modem_probe.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/modem_probe.c > CMakeFiles/tfsk.dir/__/src/modem_probe.c.i + +unittest/CMakeFiles/tfsk.dir/__/src/modem_probe.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/tfsk.dir/__/src/modem_probe.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/modem_probe.c -o CMakeFiles/tfsk.dir/__/src/modem_probe.c.s + +# Object files for target tfsk +tfsk_OBJECTS = \ +"CMakeFiles/tfsk.dir/tfsk.c.o" \ +"CMakeFiles/tfsk.dir/__/src/kiss_fft.c.o" \ +"CMakeFiles/tfsk.dir/__/src/kiss_fftr.c.o" \ +"CMakeFiles/tfsk.dir/__/src/octave.c.o" \ +"CMakeFiles/tfsk.dir/__/src/modem_probe.c.o" + +# External object files for target tfsk +tfsk_EXTERNAL_OBJECTS = + +unittest/tfsk: unittest/CMakeFiles/tfsk.dir/tfsk.c.o +unittest/tfsk: unittest/CMakeFiles/tfsk.dir/__/src/kiss_fft.c.o +unittest/tfsk: unittest/CMakeFiles/tfsk.dir/__/src/kiss_fftr.c.o +unittest/tfsk: unittest/CMakeFiles/tfsk.dir/__/src/octave.c.o +unittest/tfsk: unittest/CMakeFiles/tfsk.dir/__/src/modem_probe.c.o +unittest/tfsk: unittest/CMakeFiles/tfsk.dir/build.make +unittest/tfsk: unittest/CMakeFiles/tfsk.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_6) "Linking C executable tfsk" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/tfsk.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +unittest/CMakeFiles/tfsk.dir/build: unittest/tfsk + +.PHONY : unittest/CMakeFiles/tfsk.dir/build + +unittest/CMakeFiles/tfsk.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && $(CMAKE_COMMAND) -P CMakeFiles/tfsk.dir/cmake_clean.cmake +.PHONY : unittest/CMakeFiles/tfsk.dir/clean + +unittest/CMakeFiles/tfsk.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/unittest /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/unittest /home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/tfsk.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : unittest/CMakeFiles/tfsk.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfsk.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfsk.dir/cmake_clean.cmake new file mode 100644 index 0000000..fd98351 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfsk.dir/cmake_clean.cmake @@ -0,0 +1,14 @@ +file(REMOVE_RECURSE + "CMakeFiles/tfsk.dir/tfsk.c.o" + "CMakeFiles/tfsk.dir/__/src/kiss_fft.c.o" + "CMakeFiles/tfsk.dir/__/src/kiss_fftr.c.o" + "CMakeFiles/tfsk.dir/__/src/octave.c.o" + "CMakeFiles/tfsk.dir/__/src/modem_probe.c.o" + "tfsk.pdb" + "tfsk" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/tfsk.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfsk.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfsk.dir/depend.internal new file mode 100644 index 0000000..2b5aa77 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfsk.dir/depend.internal @@ -0,0 +1,30 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +unittest/CMakeFiles/tfsk.dir/__/src/kiss_fft.c.o + /home/sh/Downloads/hackrf/codec2/src/_kiss_fft_guts.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.c + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h +unittest/CMakeFiles/tfsk.dir/__/src/kiss_fftr.c.o + /home/sh/Downloads/hackrf/codec2/src/_kiss_fft_guts.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.c + /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h +unittest/CMakeFiles/tfsk.dir/__/src/modem_probe.c.o + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/modem_probe.c + /home/sh/Downloads/hackrf/codec2/src/octave.h +unittest/CMakeFiles/tfsk.dir/__/src/octave.c.o + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/octave.c + /home/sh/Downloads/hackrf/codec2/src/octave.h +unittest/CMakeFiles/tfsk.dir/tfsk.c.o + ../unittest/../src/comp.h + ../unittest/../src/comp_prim.h + ../unittest/../src/fsk.c + ../unittest/../src/fsk.h + ../unittest/../src/kiss_fft.h + ../unittest/../src/kiss_fftr.h + ../unittest/../src/modem_probe.h + ../unittest/../src/modem_stats.h + /home/sh/Downloads/hackrf/codec2/unittest/tfsk.c diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfsk.dir/depend.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfsk.dir/depend.make new file mode 100644 index 0000000..de81d88 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfsk.dir/depend.make @@ -0,0 +1,30 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +unittest/CMakeFiles/tfsk.dir/__/src/kiss_fft.c.o: ../src/_kiss_fft_guts.h +unittest/CMakeFiles/tfsk.dir/__/src/kiss_fft.c.o: ../src/kiss_fft.c +unittest/CMakeFiles/tfsk.dir/__/src/kiss_fft.c.o: ../src/kiss_fft.h + +unittest/CMakeFiles/tfsk.dir/__/src/kiss_fftr.c.o: ../src/_kiss_fft_guts.h +unittest/CMakeFiles/tfsk.dir/__/src/kiss_fftr.c.o: ../src/kiss_fft.h +unittest/CMakeFiles/tfsk.dir/__/src/kiss_fftr.c.o: ../src/kiss_fftr.c +unittest/CMakeFiles/tfsk.dir/__/src/kiss_fftr.c.o: ../src/kiss_fftr.h + +unittest/CMakeFiles/tfsk.dir/__/src/modem_probe.c.o: ../src/comp.h +unittest/CMakeFiles/tfsk.dir/__/src/modem_probe.c.o: ../src/modem_probe.c +unittest/CMakeFiles/tfsk.dir/__/src/modem_probe.c.o: ../src/octave.h + +unittest/CMakeFiles/tfsk.dir/__/src/octave.c.o: ../src/comp.h +unittest/CMakeFiles/tfsk.dir/__/src/octave.c.o: ../src/octave.c +unittest/CMakeFiles/tfsk.dir/__/src/octave.c.o: ../src/octave.h + +unittest/CMakeFiles/tfsk.dir/tfsk.c.o: ../unittest/../src/comp.h +unittest/CMakeFiles/tfsk.dir/tfsk.c.o: ../unittest/../src/comp_prim.h +unittest/CMakeFiles/tfsk.dir/tfsk.c.o: ../unittest/../src/fsk.c +unittest/CMakeFiles/tfsk.dir/tfsk.c.o: ../unittest/../src/fsk.h +unittest/CMakeFiles/tfsk.dir/tfsk.c.o: ../unittest/../src/kiss_fft.h +unittest/CMakeFiles/tfsk.dir/tfsk.c.o: ../unittest/../src/kiss_fftr.h +unittest/CMakeFiles/tfsk.dir/tfsk.c.o: ../unittest/../src/modem_probe.h +unittest/CMakeFiles/tfsk.dir/tfsk.c.o: ../unittest/../src/modem_stats.h +unittest/CMakeFiles/tfsk.dir/tfsk.c.o: ../unittest/tfsk.c + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfsk.dir/flags.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfsk.dir/flags.make new file mode 100644 index 0000000..92b2429 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfsk.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DFLOATING_POINT -DGIT_HASH=\"df2ed16c\" -DMODEMPROBE_ENABLE -DVAR_ARRAYS -DXXXXX -D_GNU_SOURCE=1 -D__UNITTEST__ + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/unittest/../src + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfsk.dir/link.txt b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfsk.dir/link.txt new file mode 100644 index 0000000..862291b --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfsk.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/tfsk.dir/tfsk.c.o CMakeFiles/tfsk.dir/__/src/kiss_fft.c.o CMakeFiles/tfsk.dir/__/src/kiss_fftr.c.o CMakeFiles/tfsk.dir/__/src/octave.c.o CMakeFiles/tfsk.dir/__/src/modem_probe.c.o -o tfsk -lm diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfsk.dir/progress.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfsk.dir/progress.make new file mode 100644 index 0000000..50c88f2 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfsk.dir/progress.make @@ -0,0 +1,7 @@ +CMAKE_PROGRESS_1 = +CMAKE_PROGRESS_2 = +CMAKE_PROGRESS_3 = +CMAKE_PROGRESS_4 = 84 +CMAKE_PROGRESS_5 = +CMAKE_PROGRESS_6 = + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfsk.dir/tfsk.c.o b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfsk.dir/tfsk.c.o new file mode 100644 index 0000000..6bea00e Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfsk.dir/tfsk.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfsk_llr.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfsk_llr.dir/C.includecache new file mode 100644 index 0000000..8ea0bc1 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfsk_llr.dir/C.includecache @@ -0,0 +1,24 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +../unittest/../src/comp.h + +../unittest/../src/mpdecode_core.h +stdint.h +- +comp.h +../unittest/../src/comp.h + +/home/sh/Downloads/hackrf/codec2/unittest/tfsk_llr.c +stdio.h +- +math.h +- +mpdecode_core.h +/home/sh/Downloads/hackrf/codec2/unittest/mpdecode_core.h + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfsk_llr.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfsk_llr.dir/DependInfo.cmake new file mode 100644 index 0000000..2fff596 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfsk_llr.dir/DependInfo.cmake @@ -0,0 +1,35 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/unittest/tfsk_llr.c" "/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/tfsk_llr.dir/tfsk_llr.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "FLOATING_POINT" + "GIT_HASH=\"df2ed16c\"" + "MODEMPROBE_ENABLE" + "VAR_ARRAYS" + "XXXXX" + "_GNU_SOURCE=1" + "__UNITTEST__" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../unittest/../src" + "../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/DependInfo.cmake" + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfsk_llr.dir/build.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfsk_llr.dir/build.make new file mode 100644 index 0000000..0ad4f1b --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfsk_llr.dir/build.make @@ -0,0 +1,99 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include unittest/CMakeFiles/tfsk_llr.dir/depend.make + +# Include the progress variables for this target. +include unittest/CMakeFiles/tfsk_llr.dir/progress.make + +# Include the compile flags for this target's objects. +include unittest/CMakeFiles/tfsk_llr.dir/flags.make + +unittest/CMakeFiles/tfsk_llr.dir/tfsk_llr.c.o: unittest/CMakeFiles/tfsk_llr.dir/flags.make +unittest/CMakeFiles/tfsk_llr.dir/tfsk_llr.c.o: ../unittest/tfsk_llr.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object unittest/CMakeFiles/tfsk_llr.dir/tfsk_llr.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/tfsk_llr.dir/tfsk_llr.c.o -c /home/sh/Downloads/hackrf/codec2/unittest/tfsk_llr.c + +unittest/CMakeFiles/tfsk_llr.dir/tfsk_llr.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/tfsk_llr.dir/tfsk_llr.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/unittest/tfsk_llr.c > CMakeFiles/tfsk_llr.dir/tfsk_llr.c.i + +unittest/CMakeFiles/tfsk_llr.dir/tfsk_llr.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/tfsk_llr.dir/tfsk_llr.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/unittest/tfsk_llr.c -o CMakeFiles/tfsk_llr.dir/tfsk_llr.c.s + +# Object files for target tfsk_llr +tfsk_llr_OBJECTS = \ +"CMakeFiles/tfsk_llr.dir/tfsk_llr.c.o" + +# External object files for target tfsk_llr +tfsk_llr_EXTERNAL_OBJECTS = + +unittest/tfsk_llr: unittest/CMakeFiles/tfsk_llr.dir/tfsk_llr.c.o +unittest/tfsk_llr: unittest/CMakeFiles/tfsk_llr.dir/build.make +unittest/tfsk_llr: src/libcodec2.so.0.9 +unittest/tfsk_llr: unittest/CMakeFiles/tfsk_llr.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking C executable tfsk_llr" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/tfsk_llr.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +unittest/CMakeFiles/tfsk_llr.dir/build: unittest/tfsk_llr + +.PHONY : unittest/CMakeFiles/tfsk_llr.dir/build + +unittest/CMakeFiles/tfsk_llr.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && $(CMAKE_COMMAND) -P CMakeFiles/tfsk_llr.dir/cmake_clean.cmake +.PHONY : unittest/CMakeFiles/tfsk_llr.dir/clean + +unittest/CMakeFiles/tfsk_llr.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/unittest /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/unittest /home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/tfsk_llr.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : unittest/CMakeFiles/tfsk_llr.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfsk_llr.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfsk_llr.dir/cmake_clean.cmake new file mode 100644 index 0000000..0b73295 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfsk_llr.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +file(REMOVE_RECURSE + "CMakeFiles/tfsk_llr.dir/tfsk_llr.c.o" + "tfsk_llr.pdb" + "tfsk_llr" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/tfsk_llr.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfsk_llr.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfsk_llr.dir/depend.internal new file mode 100644 index 0000000..785e8ca --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfsk_llr.dir/depend.internal @@ -0,0 +1,7 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +unittest/CMakeFiles/tfsk_llr.dir/tfsk_llr.c.o + ../unittest/../src/comp.h + ../unittest/../src/mpdecode_core.h + /home/sh/Downloads/hackrf/codec2/unittest/tfsk_llr.c diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfsk_llr.dir/depend.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfsk_llr.dir/depend.make new file mode 100644 index 0000000..732fb6a --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfsk_llr.dir/depend.make @@ -0,0 +1,7 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +unittest/CMakeFiles/tfsk_llr.dir/tfsk_llr.c.o: ../unittest/../src/comp.h +unittest/CMakeFiles/tfsk_llr.dir/tfsk_llr.c.o: ../unittest/../src/mpdecode_core.h +unittest/CMakeFiles/tfsk_llr.dir/tfsk_llr.c.o: ../unittest/tfsk_llr.c + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfsk_llr.dir/flags.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfsk_llr.dir/flags.make new file mode 100644 index 0000000..7c524b1 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfsk_llr.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DFLOATING_POINT -DGIT_HASH=\"df2ed16c\" -DMODEMPROBE_ENABLE -DVAR_ARRAYS -DXXXXX -D_GNU_SOURCE=1 -D__UNITTEST__ + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/unittest/../src -I/home/sh/Downloads/hackrf/codec2/src + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfsk_llr.dir/link.txt b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfsk_llr.dir/link.txt new file mode 100644 index 0000000..11589a6 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfsk_llr.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/tfsk_llr.dir/tfsk_llr.c.o -o tfsk_llr -Wl,-rpath,/home/sh/Downloads/hackrf/codec2/build_linux/src ../src/libcodec2.so.0.9 -lm diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfsk_llr.dir/progress.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfsk_llr.dir/progress.make new file mode 100644 index 0000000..57fa75e --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfsk_llr.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = 85 +CMAKE_PROGRESS_2 = + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfsk_llr.dir/tfsk_llr.c.o b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfsk_llr.dir/tfsk_llr.c.o new file mode 100644 index 0000000..7217cc4 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tfsk_llr.dir/tfsk_llr.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/thash.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/thash.dir/C.includecache new file mode 100644 index 0000000..5dcb7f4 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/thash.dir/C.includecache @@ -0,0 +1,22 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +../unittest/../src/comp.h + +../unittest/../src/freedv_api.h +sys/types.h +- +comp.h +../unittest/../src/comp.h + +/home/sh/Downloads/hackrf/codec2/unittest/thash.c +stdio.h +- +freedv_api.h +/home/sh/Downloads/hackrf/codec2/unittest/freedv_api.h + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/thash.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/thash.dir/DependInfo.cmake new file mode 100644 index 0000000..555bfb8 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/thash.dir/DependInfo.cmake @@ -0,0 +1,35 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/unittest/thash.c" "/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/thash.dir/thash.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "FLOATING_POINT" + "GIT_HASH=\"df2ed16c\"" + "MODEMPROBE_ENABLE" + "VAR_ARRAYS" + "XXXXX" + "_GNU_SOURCE=1" + "__UNITTEST__" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../unittest/../src" + "../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/DependInfo.cmake" + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/thash.dir/build.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/thash.dir/build.make new file mode 100644 index 0000000..cdb0250 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/thash.dir/build.make @@ -0,0 +1,99 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include unittest/CMakeFiles/thash.dir/depend.make + +# Include the progress variables for this target. +include unittest/CMakeFiles/thash.dir/progress.make + +# Include the compile flags for this target's objects. +include unittest/CMakeFiles/thash.dir/flags.make + +unittest/CMakeFiles/thash.dir/thash.c.o: unittest/CMakeFiles/thash.dir/flags.make +unittest/CMakeFiles/thash.dir/thash.c.o: ../unittest/thash.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object unittest/CMakeFiles/thash.dir/thash.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/thash.dir/thash.c.o -c /home/sh/Downloads/hackrf/codec2/unittest/thash.c + +unittest/CMakeFiles/thash.dir/thash.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/thash.dir/thash.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/unittest/thash.c > CMakeFiles/thash.dir/thash.c.i + +unittest/CMakeFiles/thash.dir/thash.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/thash.dir/thash.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/unittest/thash.c -o CMakeFiles/thash.dir/thash.c.s + +# Object files for target thash +thash_OBJECTS = \ +"CMakeFiles/thash.dir/thash.c.o" + +# External object files for target thash +thash_EXTERNAL_OBJECTS = + +unittest/thash: unittest/CMakeFiles/thash.dir/thash.c.o +unittest/thash: unittest/CMakeFiles/thash.dir/build.make +unittest/thash: src/libcodec2.so.0.9 +unittest/thash: unittest/CMakeFiles/thash.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking C executable thash" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/thash.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +unittest/CMakeFiles/thash.dir/build: unittest/thash + +.PHONY : unittest/CMakeFiles/thash.dir/build + +unittest/CMakeFiles/thash.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && $(CMAKE_COMMAND) -P CMakeFiles/thash.dir/cmake_clean.cmake +.PHONY : unittest/CMakeFiles/thash.dir/clean + +unittest/CMakeFiles/thash.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/unittest /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/unittest /home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/thash.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : unittest/CMakeFiles/thash.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/thash.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/thash.dir/cmake_clean.cmake new file mode 100644 index 0000000..11ccc13 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/thash.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +file(REMOVE_RECURSE + "CMakeFiles/thash.dir/thash.c.o" + "thash.pdb" + "thash" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/thash.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/thash.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/thash.dir/depend.internal new file mode 100644 index 0000000..e3a46f4 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/thash.dir/depend.internal @@ -0,0 +1,7 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +unittest/CMakeFiles/thash.dir/thash.c.o + ../unittest/../src/comp.h + ../unittest/../src/freedv_api.h + /home/sh/Downloads/hackrf/codec2/unittest/thash.c diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/thash.dir/depend.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/thash.dir/depend.make new file mode 100644 index 0000000..26f47d5 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/thash.dir/depend.make @@ -0,0 +1,7 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +unittest/CMakeFiles/thash.dir/thash.c.o: ../unittest/../src/comp.h +unittest/CMakeFiles/thash.dir/thash.c.o: ../unittest/../src/freedv_api.h +unittest/CMakeFiles/thash.dir/thash.c.o: ../unittest/thash.c + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/thash.dir/flags.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/thash.dir/flags.make new file mode 100644 index 0000000..7c524b1 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/thash.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DFLOATING_POINT -DGIT_HASH=\"df2ed16c\" -DMODEMPROBE_ENABLE -DVAR_ARRAYS -DXXXXX -D_GNU_SOURCE=1 -D__UNITTEST__ + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/unittest/../src -I/home/sh/Downloads/hackrf/codec2/src + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/thash.dir/link.txt b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/thash.dir/link.txt new file mode 100644 index 0000000..71cb8ad --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/thash.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/thash.dir/thash.c.o -o thash -Wl,-rpath,/home/sh/Downloads/hackrf/codec2/build_linux/src ../src/libcodec2.so.0.9 -lm diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/thash.dir/progress.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/thash.dir/progress.make new file mode 100644 index 0000000..9cb3549 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/thash.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = +CMAKE_PROGRESS_2 = 86 + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/thash.dir/thash.c.o b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/thash.dir/thash.c.o new file mode 100644 index 0000000..d4a924b Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/thash.dir/thash.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tnewamp1.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tnewamp1.dir/C.includecache new file mode 100644 index 0000000..0e01466 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tnewamp1.dir/C.includecache @@ -0,0 +1,352 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +../unittest/../src/codec2_fft.h +assert.h +- +stdlib.h +- +stdio.h +- +string.h +- +math.h +- +fdv_arm_math.h +../unittest/../src/fdv_arm_math.h +defines.h +../unittest/../src/defines.h +comp.h +../unittest/../src/comp.h +kiss_fftr.h +../unittest/../src/kiss_fftr.h +kiss_fft.h +../unittest/../src/kiss_fft.h + +../unittest/../src/codec2_internal.h +codec2_fft.h +../unittest/../src/codec2_fft.h +newamp1.h +../unittest/../src/newamp1.h +newamp2.h +../unittest/../src/newamp2.h + +../unittest/../src/comp.h + +../unittest/../src/defines.h + +../unittest/../src/dump.h +defines.h +../unittest/../src/defines.h +comp.h +../unittest/../src/comp.h +codec2_fft.h +../unittest/../src/codec2_fft.h +codec2_internal.h +../unittest/../src/codec2_internal.h + +../unittest/../src/kiss_fft.h +stdlib.h +- +stdio.h +- +math.h +- +string.h +- +xmmintrin.h +- +sys/types.h +- + +../unittest/../src/kiss_fftr.h +kiss_fft.h +../unittest/../src/kiss_fft.h + +../unittest/../src/newamp1.h +codec2_fft.h +../unittest/../src/codec2_fft.h +comp.h +../unittest/../src/comp.h + +../unittest/../src/newamp2.h +codec2_fft.h +../unittest/../src/codec2_fft.h +comp.h +../unittest/../src/comp.h + +../unittest/../src/nlp.h +comp.h +../unittest/../src/comp.h + +../unittest/../src/octave.h +comp.h +../unittest/../src/comp.h + +../unittest/../src/quantise.h +codec2_fft.h +../unittest/../src/codec2_fft.h +comp.h +../unittest/../src/comp.h + +../unittest/../src/sine.h +defines.h +../unittest/../src/defines.h +comp.h +../unittest/../src/comp.h +codec2_fft.h +../unittest/../src/codec2_fft.h + +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.h +assert.h +- +stdlib.h +- +stdio.h +- +string.h +- +math.h +- +fdv_arm_math.h +/home/sh/Downloads/hackrf/codec2/src/fdv_arm_math.h +defines.h +/home/sh/Downloads/hackrf/codec2/src/defines.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +kiss_fftr.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/src/codec2_internal.h +codec2_fft.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.h +newamp1.h +/home/sh/Downloads/hackrf/codec2/src/newamp1.h +newamp2.h +/home/sh/Downloads/hackrf/codec2/src/newamp2.h + +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/defines.h + +/home/sh/Downloads/hackrf/codec2/src/dump.c +defines.h +/home/sh/Downloads/hackrf/codec2/src/defines.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +dump.h +/home/sh/Downloads/hackrf/codec2/src/dump.h +assert.h +- +stdlib.h +- +stdio.h +- +string.h +- +math.h +- +gdb_stdio.h +/home/sh/Downloads/hackrf/codec2/src/gdb_stdio.h + +/home/sh/Downloads/hackrf/codec2/src/dump.h +defines.h +/home/sh/Downloads/hackrf/codec2/src/defines.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +codec2_fft.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.h +codec2_internal.h +/home/sh/Downloads/hackrf/codec2/src/codec2_internal.h + +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h +stdlib.h +- +stdio.h +- +math.h +- +string.h +- +xmmintrin.h +- +sys/types.h +- + +/home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/src/lpc.h + +/home/sh/Downloads/hackrf/codec2/src/lsp.h + +/home/sh/Downloads/hackrf/codec2/src/machdep.h + +/home/sh/Downloads/hackrf/codec2/src/mbest.c +assert.h +- +math.h +- +stdio.h +- +stdlib.h +- +string.h +- +mbest.h +/home/sh/Downloads/hackrf/codec2/src/mbest.h + +/home/sh/Downloads/hackrf/codec2/src/mbest.h + +/home/sh/Downloads/hackrf/codec2/src/newamp1.c +assert.h +- +stdio.h +- +stdlib.h +- +string.h +- +math.h +- +defines.h +/home/sh/Downloads/hackrf/codec2/src/defines.h +phase.h +/home/sh/Downloads/hackrf/codec2/src/phase.h +quantise.h +/home/sh/Downloads/hackrf/codec2/src/quantise.h +mbest.h +/home/sh/Downloads/hackrf/codec2/src/mbest.h +newamp1.h +/home/sh/Downloads/hackrf/codec2/src/newamp1.h + +/home/sh/Downloads/hackrf/codec2/src/newamp1.h +codec2_fft.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/newamp2.h +codec2_fft.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/nlp.c +defines.h +/home/sh/Downloads/hackrf/codec2/src/defines.h +nlp.h +/home/sh/Downloads/hackrf/codec2/src/nlp.h +dump.h +/home/sh/Downloads/hackrf/codec2/src/dump.h +codec2_fft.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.h +machdep.h +/home/sh/Downloads/hackrf/codec2/src/machdep.h +os.h +/home/sh/Downloads/hackrf/codec2/src/os.h +assert.h +- +math.h +- +stdlib.h +- + +/home/sh/Downloads/hackrf/codec2/src/nlp.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/os.h + +/home/sh/Downloads/hackrf/codec2/src/phase.h +codec2_fft.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/quantise.c +assert.h +- +ctype.h +- +stdio.h +- +stdlib.h +- +string.h +- +math.h +- +defines.h +/home/sh/Downloads/hackrf/codec2/src/defines.h +dump.h +/home/sh/Downloads/hackrf/codec2/src/dump.h +quantise.h +/home/sh/Downloads/hackrf/codec2/src/quantise.h +lpc.h +/home/sh/Downloads/hackrf/codec2/src/lpc.h +lsp.h +/home/sh/Downloads/hackrf/codec2/src/lsp.h +codec2_fft.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.h +phase.h +/home/sh/Downloads/hackrf/codec2/src/phase.h +mbest.h +/home/sh/Downloads/hackrf/codec2/src/mbest.h +machdep.h +/home/sh/Downloads/hackrf/codec2/src/machdep.h + +/home/sh/Downloads/hackrf/codec2/src/quantise.h +codec2_fft.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/sine.c +stdlib.h +- +stdio.h +- +math.h +- +defines.h +/home/sh/Downloads/hackrf/codec2/src/defines.h +sine.h +/home/sh/Downloads/hackrf/codec2/src/sine.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/src/sine.h +defines.h +/home/sh/Downloads/hackrf/codec2/src/defines.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +codec2_fft.h +/home/sh/Downloads/hackrf/codec2/src/codec2_fft.h + +/home/sh/Downloads/hackrf/codec2/unittest/tnewamp1.c +defines.h +/home/sh/Downloads/hackrf/codec2/unittest/defines.h +codec2_fft.h +/home/sh/Downloads/hackrf/codec2/unittest/codec2_fft.h +sine.h +/home/sh/Downloads/hackrf/codec2/unittest/sine.h +nlp.h +/home/sh/Downloads/hackrf/codec2/unittest/nlp.h +dump.h +/home/sh/Downloads/hackrf/codec2/unittest/dump.h +octave.h +/home/sh/Downloads/hackrf/codec2/unittest/octave.h +newamp1.h +/home/sh/Downloads/hackrf/codec2/unittest/newamp1.h +quantise.h +/home/sh/Downloads/hackrf/codec2/unittest/quantise.h + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tnewamp1.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tnewamp1.dir/DependInfo.cmake new file mode 100644 index 0000000..76c314e --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tnewamp1.dir/DependInfo.cmake @@ -0,0 +1,43 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/src/dump.c" "/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/tnewamp1.dir/__/src/dump.c.o" + "/home/sh/Downloads/hackrf/codec2/src/kiss_fft.c" "/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/tnewamp1.dir/__/src/kiss_fft.c.o" + "/home/sh/Downloads/hackrf/codec2/src/mbest.c" "/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/tnewamp1.dir/__/src/mbest.c.o" + "/home/sh/Downloads/hackrf/codec2/src/newamp1.c" "/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/tnewamp1.dir/__/src/newamp1.c.o" + "/home/sh/Downloads/hackrf/codec2/src/nlp.c" "/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/tnewamp1.dir/__/src/nlp.c.o" + "/home/sh/Downloads/hackrf/codec2/src/octave.c" "/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/tnewamp1.dir/__/src/octave.c.o" + "/home/sh/Downloads/hackrf/codec2/src/quantise.c" "/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/tnewamp1.dir/__/src/quantise.c.o" + "/home/sh/Downloads/hackrf/codec2/src/sine.c" "/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/tnewamp1.dir/__/src/sine.c.o" + "/home/sh/Downloads/hackrf/codec2/unittest/tnewamp1.c" "/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/tnewamp1.dir/tnewamp1.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "FLOATING_POINT" + "GIT_HASH=\"df2ed16c\"" + "MODEMPROBE_ENABLE" + "VAR_ARRAYS" + "XXXXX" + "_GNU_SOURCE=1" + "__UNITTEST__" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../unittest/../src" + "../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/DependInfo.cmake" + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tnewamp1.dir/__/src/dump.c.o b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tnewamp1.dir/__/src/dump.c.o new file mode 100644 index 0000000..490f90a Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tnewamp1.dir/__/src/dump.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tnewamp1.dir/__/src/kiss_fft.c.o b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tnewamp1.dir/__/src/kiss_fft.c.o new file mode 100644 index 0000000..4899080 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tnewamp1.dir/__/src/kiss_fft.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tnewamp1.dir/__/src/mbest.c.o b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tnewamp1.dir/__/src/mbest.c.o new file mode 100644 index 0000000..649e7a9 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tnewamp1.dir/__/src/mbest.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tnewamp1.dir/__/src/newamp1.c.o b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tnewamp1.dir/__/src/newamp1.c.o new file mode 100644 index 0000000..58530f5 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tnewamp1.dir/__/src/newamp1.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tnewamp1.dir/__/src/nlp.c.o b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tnewamp1.dir/__/src/nlp.c.o new file mode 100644 index 0000000..d0795e6 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tnewamp1.dir/__/src/nlp.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tnewamp1.dir/__/src/octave.c.o b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tnewamp1.dir/__/src/octave.c.o new file mode 100644 index 0000000..e187c72 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tnewamp1.dir/__/src/octave.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tnewamp1.dir/__/src/quantise.c.o b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tnewamp1.dir/__/src/quantise.c.o new file mode 100644 index 0000000..dd35d3c Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tnewamp1.dir/__/src/quantise.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tnewamp1.dir/__/src/sine.c.o b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tnewamp1.dir/__/src/sine.c.o new file mode 100644 index 0000000..339bbd2 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tnewamp1.dir/__/src/sine.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tnewamp1.dir/build.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tnewamp1.dir/build.make new file mode 100644 index 0000000..f578321 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tnewamp1.dir/build.make @@ -0,0 +1,219 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include unittest/CMakeFiles/tnewamp1.dir/depend.make + +# Include the progress variables for this target. +include unittest/CMakeFiles/tnewamp1.dir/progress.make + +# Include the compile flags for this target's objects. +include unittest/CMakeFiles/tnewamp1.dir/flags.make + +unittest/CMakeFiles/tnewamp1.dir/tnewamp1.c.o: unittest/CMakeFiles/tnewamp1.dir/flags.make +unittest/CMakeFiles/tnewamp1.dir/tnewamp1.c.o: ../unittest/tnewamp1.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object unittest/CMakeFiles/tnewamp1.dir/tnewamp1.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/tnewamp1.dir/tnewamp1.c.o -c /home/sh/Downloads/hackrf/codec2/unittest/tnewamp1.c + +unittest/CMakeFiles/tnewamp1.dir/tnewamp1.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/tnewamp1.dir/tnewamp1.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/unittest/tnewamp1.c > CMakeFiles/tnewamp1.dir/tnewamp1.c.i + +unittest/CMakeFiles/tnewamp1.dir/tnewamp1.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/tnewamp1.dir/tnewamp1.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/unittest/tnewamp1.c -o CMakeFiles/tnewamp1.dir/tnewamp1.c.s + +unittest/CMakeFiles/tnewamp1.dir/__/src/quantise.c.o: unittest/CMakeFiles/tnewamp1.dir/flags.make +unittest/CMakeFiles/tnewamp1.dir/__/src/quantise.c.o: ../src/quantise.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Building C object unittest/CMakeFiles/tnewamp1.dir/__/src/quantise.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/tnewamp1.dir/__/src/quantise.c.o -c /home/sh/Downloads/hackrf/codec2/src/quantise.c + +unittest/CMakeFiles/tnewamp1.dir/__/src/quantise.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/tnewamp1.dir/__/src/quantise.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/quantise.c > CMakeFiles/tnewamp1.dir/__/src/quantise.c.i + +unittest/CMakeFiles/tnewamp1.dir/__/src/quantise.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/tnewamp1.dir/__/src/quantise.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/quantise.c -o CMakeFiles/tnewamp1.dir/__/src/quantise.c.s + +unittest/CMakeFiles/tnewamp1.dir/__/src/newamp1.c.o: unittest/CMakeFiles/tnewamp1.dir/flags.make +unittest/CMakeFiles/tnewamp1.dir/__/src/newamp1.c.o: ../src/newamp1.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_3) "Building C object unittest/CMakeFiles/tnewamp1.dir/__/src/newamp1.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/tnewamp1.dir/__/src/newamp1.c.o -c /home/sh/Downloads/hackrf/codec2/src/newamp1.c + +unittest/CMakeFiles/tnewamp1.dir/__/src/newamp1.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/tnewamp1.dir/__/src/newamp1.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/newamp1.c > CMakeFiles/tnewamp1.dir/__/src/newamp1.c.i + +unittest/CMakeFiles/tnewamp1.dir/__/src/newamp1.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/tnewamp1.dir/__/src/newamp1.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/newamp1.c -o CMakeFiles/tnewamp1.dir/__/src/newamp1.c.s + +unittest/CMakeFiles/tnewamp1.dir/__/src/mbest.c.o: unittest/CMakeFiles/tnewamp1.dir/flags.make +unittest/CMakeFiles/tnewamp1.dir/__/src/mbest.c.o: ../src/mbest.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_4) "Building C object unittest/CMakeFiles/tnewamp1.dir/__/src/mbest.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/tnewamp1.dir/__/src/mbest.c.o -c /home/sh/Downloads/hackrf/codec2/src/mbest.c + +unittest/CMakeFiles/tnewamp1.dir/__/src/mbest.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/tnewamp1.dir/__/src/mbest.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/mbest.c > CMakeFiles/tnewamp1.dir/__/src/mbest.c.i + +unittest/CMakeFiles/tnewamp1.dir/__/src/mbest.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/tnewamp1.dir/__/src/mbest.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/mbest.c -o CMakeFiles/tnewamp1.dir/__/src/mbest.c.s + +unittest/CMakeFiles/tnewamp1.dir/__/src/kiss_fft.c.o: unittest/CMakeFiles/tnewamp1.dir/flags.make +unittest/CMakeFiles/tnewamp1.dir/__/src/kiss_fft.c.o: ../src/kiss_fft.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_5) "Building C object unittest/CMakeFiles/tnewamp1.dir/__/src/kiss_fft.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/tnewamp1.dir/__/src/kiss_fft.c.o -c /home/sh/Downloads/hackrf/codec2/src/kiss_fft.c + +unittest/CMakeFiles/tnewamp1.dir/__/src/kiss_fft.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/tnewamp1.dir/__/src/kiss_fft.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/kiss_fft.c > CMakeFiles/tnewamp1.dir/__/src/kiss_fft.c.i + +unittest/CMakeFiles/tnewamp1.dir/__/src/kiss_fft.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/tnewamp1.dir/__/src/kiss_fft.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/kiss_fft.c -o CMakeFiles/tnewamp1.dir/__/src/kiss_fft.c.s + +unittest/CMakeFiles/tnewamp1.dir/__/src/sine.c.o: unittest/CMakeFiles/tnewamp1.dir/flags.make +unittest/CMakeFiles/tnewamp1.dir/__/src/sine.c.o: ../src/sine.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_6) "Building C object unittest/CMakeFiles/tnewamp1.dir/__/src/sine.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/tnewamp1.dir/__/src/sine.c.o -c /home/sh/Downloads/hackrf/codec2/src/sine.c + +unittest/CMakeFiles/tnewamp1.dir/__/src/sine.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/tnewamp1.dir/__/src/sine.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/sine.c > CMakeFiles/tnewamp1.dir/__/src/sine.c.i + +unittest/CMakeFiles/tnewamp1.dir/__/src/sine.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/tnewamp1.dir/__/src/sine.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/sine.c -o CMakeFiles/tnewamp1.dir/__/src/sine.c.s + +unittest/CMakeFiles/tnewamp1.dir/__/src/nlp.c.o: unittest/CMakeFiles/tnewamp1.dir/flags.make +unittest/CMakeFiles/tnewamp1.dir/__/src/nlp.c.o: ../src/nlp.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_7) "Building C object unittest/CMakeFiles/tnewamp1.dir/__/src/nlp.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/tnewamp1.dir/__/src/nlp.c.o -c /home/sh/Downloads/hackrf/codec2/src/nlp.c + +unittest/CMakeFiles/tnewamp1.dir/__/src/nlp.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/tnewamp1.dir/__/src/nlp.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/nlp.c > CMakeFiles/tnewamp1.dir/__/src/nlp.c.i + +unittest/CMakeFiles/tnewamp1.dir/__/src/nlp.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/tnewamp1.dir/__/src/nlp.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/nlp.c -o CMakeFiles/tnewamp1.dir/__/src/nlp.c.s + +unittest/CMakeFiles/tnewamp1.dir/__/src/dump.c.o: unittest/CMakeFiles/tnewamp1.dir/flags.make +unittest/CMakeFiles/tnewamp1.dir/__/src/dump.c.o: ../src/dump.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_8) "Building C object unittest/CMakeFiles/tnewamp1.dir/__/src/dump.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/tnewamp1.dir/__/src/dump.c.o -c /home/sh/Downloads/hackrf/codec2/src/dump.c + +unittest/CMakeFiles/tnewamp1.dir/__/src/dump.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/tnewamp1.dir/__/src/dump.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/dump.c > CMakeFiles/tnewamp1.dir/__/src/dump.c.i + +unittest/CMakeFiles/tnewamp1.dir/__/src/dump.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/tnewamp1.dir/__/src/dump.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/dump.c -o CMakeFiles/tnewamp1.dir/__/src/dump.c.s + +unittest/CMakeFiles/tnewamp1.dir/__/src/octave.c.o: unittest/CMakeFiles/tnewamp1.dir/flags.make +unittest/CMakeFiles/tnewamp1.dir/__/src/octave.c.o: ../src/octave.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_9) "Building C object unittest/CMakeFiles/tnewamp1.dir/__/src/octave.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/tnewamp1.dir/__/src/octave.c.o -c /home/sh/Downloads/hackrf/codec2/src/octave.c + +unittest/CMakeFiles/tnewamp1.dir/__/src/octave.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/tnewamp1.dir/__/src/octave.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/octave.c > CMakeFiles/tnewamp1.dir/__/src/octave.c.i + +unittest/CMakeFiles/tnewamp1.dir/__/src/octave.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/tnewamp1.dir/__/src/octave.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/octave.c -o CMakeFiles/tnewamp1.dir/__/src/octave.c.s + +# Object files for target tnewamp1 +tnewamp1_OBJECTS = \ +"CMakeFiles/tnewamp1.dir/tnewamp1.c.o" \ +"CMakeFiles/tnewamp1.dir/__/src/quantise.c.o" \ +"CMakeFiles/tnewamp1.dir/__/src/newamp1.c.o" \ +"CMakeFiles/tnewamp1.dir/__/src/mbest.c.o" \ +"CMakeFiles/tnewamp1.dir/__/src/kiss_fft.c.o" \ +"CMakeFiles/tnewamp1.dir/__/src/sine.c.o" \ +"CMakeFiles/tnewamp1.dir/__/src/nlp.c.o" \ +"CMakeFiles/tnewamp1.dir/__/src/dump.c.o" \ +"CMakeFiles/tnewamp1.dir/__/src/octave.c.o" + +# External object files for target tnewamp1 +tnewamp1_EXTERNAL_OBJECTS = + +unittest/tnewamp1: unittest/CMakeFiles/tnewamp1.dir/tnewamp1.c.o +unittest/tnewamp1: unittest/CMakeFiles/tnewamp1.dir/__/src/quantise.c.o +unittest/tnewamp1: unittest/CMakeFiles/tnewamp1.dir/__/src/newamp1.c.o +unittest/tnewamp1: unittest/CMakeFiles/tnewamp1.dir/__/src/mbest.c.o +unittest/tnewamp1: unittest/CMakeFiles/tnewamp1.dir/__/src/kiss_fft.c.o +unittest/tnewamp1: unittest/CMakeFiles/tnewamp1.dir/__/src/sine.c.o +unittest/tnewamp1: unittest/CMakeFiles/tnewamp1.dir/__/src/nlp.c.o +unittest/tnewamp1: unittest/CMakeFiles/tnewamp1.dir/__/src/dump.c.o +unittest/tnewamp1: unittest/CMakeFiles/tnewamp1.dir/__/src/octave.c.o +unittest/tnewamp1: unittest/CMakeFiles/tnewamp1.dir/build.make +unittest/tnewamp1: src/libcodec2.so.0.9 +unittest/tnewamp1: unittest/CMakeFiles/tnewamp1.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_10) "Linking C executable tnewamp1" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/tnewamp1.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +unittest/CMakeFiles/tnewamp1.dir/build: unittest/tnewamp1 + +.PHONY : unittest/CMakeFiles/tnewamp1.dir/build + +unittest/CMakeFiles/tnewamp1.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && $(CMAKE_COMMAND) -P CMakeFiles/tnewamp1.dir/cmake_clean.cmake +.PHONY : unittest/CMakeFiles/tnewamp1.dir/clean + +unittest/CMakeFiles/tnewamp1.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/unittest /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/unittest /home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/tnewamp1.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : unittest/CMakeFiles/tnewamp1.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tnewamp1.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tnewamp1.dir/cmake_clean.cmake new file mode 100644 index 0000000..562759c --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tnewamp1.dir/cmake_clean.cmake @@ -0,0 +1,18 @@ +file(REMOVE_RECURSE + "CMakeFiles/tnewamp1.dir/tnewamp1.c.o" + "CMakeFiles/tnewamp1.dir/__/src/quantise.c.o" + "CMakeFiles/tnewamp1.dir/__/src/newamp1.c.o" + "CMakeFiles/tnewamp1.dir/__/src/mbest.c.o" + "CMakeFiles/tnewamp1.dir/__/src/kiss_fft.c.o" + "CMakeFiles/tnewamp1.dir/__/src/sine.c.o" + "CMakeFiles/tnewamp1.dir/__/src/nlp.c.o" + "CMakeFiles/tnewamp1.dir/__/src/dump.c.o" + "CMakeFiles/tnewamp1.dir/__/src/octave.c.o" + "tnewamp1.pdb" + "tnewamp1" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/tnewamp1.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tnewamp1.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tnewamp1.dir/depend.internal new file mode 100644 index 0000000..9290a12 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tnewamp1.dir/depend.internal @@ -0,0 +1,90 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +unittest/CMakeFiles/tnewamp1.dir/__/src/dump.c.o + /home/sh/Downloads/hackrf/codec2/src/codec2_fft.h + /home/sh/Downloads/hackrf/codec2/src/codec2_internal.h + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/defines.h + /home/sh/Downloads/hackrf/codec2/src/dump.c + /home/sh/Downloads/hackrf/codec2/src/dump.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h + /home/sh/Downloads/hackrf/codec2/src/newamp1.h + /home/sh/Downloads/hackrf/codec2/src/newamp2.h +unittest/CMakeFiles/tnewamp1.dir/__/src/kiss_fft.c.o + /home/sh/Downloads/hackrf/codec2/src/_kiss_fft_guts.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.c + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h +unittest/CMakeFiles/tnewamp1.dir/__/src/mbest.c.o + /home/sh/Downloads/hackrf/codec2/src/mbest.c + /home/sh/Downloads/hackrf/codec2/src/mbest.h +unittest/CMakeFiles/tnewamp1.dir/__/src/newamp1.c.o + /home/sh/Downloads/hackrf/codec2/src/codec2_fft.h + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/defines.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h + /home/sh/Downloads/hackrf/codec2/src/mbest.h + /home/sh/Downloads/hackrf/codec2/src/newamp1.c + /home/sh/Downloads/hackrf/codec2/src/newamp1.h + /home/sh/Downloads/hackrf/codec2/src/phase.h + /home/sh/Downloads/hackrf/codec2/src/quantise.h +unittest/CMakeFiles/tnewamp1.dir/__/src/nlp.c.o + /home/sh/Downloads/hackrf/codec2/src/codec2_fft.h + /home/sh/Downloads/hackrf/codec2/src/codec2_internal.h + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/defines.h + /home/sh/Downloads/hackrf/codec2/src/dump.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h + /home/sh/Downloads/hackrf/codec2/src/machdep.h + /home/sh/Downloads/hackrf/codec2/src/newamp1.h + /home/sh/Downloads/hackrf/codec2/src/newamp2.h + /home/sh/Downloads/hackrf/codec2/src/nlp.c + /home/sh/Downloads/hackrf/codec2/src/nlp.h + /home/sh/Downloads/hackrf/codec2/src/os.h +unittest/CMakeFiles/tnewamp1.dir/__/src/octave.c.o + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/octave.c + /home/sh/Downloads/hackrf/codec2/src/octave.h +unittest/CMakeFiles/tnewamp1.dir/__/src/quantise.c.o + /home/sh/Downloads/hackrf/codec2/src/codec2_fft.h + /home/sh/Downloads/hackrf/codec2/src/codec2_internal.h + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/defines.h + /home/sh/Downloads/hackrf/codec2/src/dump.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h + /home/sh/Downloads/hackrf/codec2/src/lpc.h + /home/sh/Downloads/hackrf/codec2/src/lsp.h + /home/sh/Downloads/hackrf/codec2/src/machdep.h + /home/sh/Downloads/hackrf/codec2/src/mbest.h + /home/sh/Downloads/hackrf/codec2/src/newamp1.h + /home/sh/Downloads/hackrf/codec2/src/newamp2.h + /home/sh/Downloads/hackrf/codec2/src/phase.h + /home/sh/Downloads/hackrf/codec2/src/quantise.c + /home/sh/Downloads/hackrf/codec2/src/quantise.h +unittest/CMakeFiles/tnewamp1.dir/__/src/sine.c.o + /home/sh/Downloads/hackrf/codec2/src/codec2_fft.h + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/defines.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fftr.h + /home/sh/Downloads/hackrf/codec2/src/sine.c + /home/sh/Downloads/hackrf/codec2/src/sine.h +unittest/CMakeFiles/tnewamp1.dir/tnewamp1.c.o + ../unittest/../src/codec2_fft.h + ../unittest/../src/codec2_internal.h + ../unittest/../src/comp.h + ../unittest/../src/defines.h + ../unittest/../src/dump.h + ../unittest/../src/kiss_fft.h + ../unittest/../src/kiss_fftr.h + ../unittest/../src/newamp1.h + ../unittest/../src/newamp2.h + ../unittest/../src/nlp.h + ../unittest/../src/octave.h + ../unittest/../src/quantise.h + ../unittest/../src/sine.h + /home/sh/Downloads/hackrf/codec2/unittest/tnewamp1.c diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tnewamp1.dir/depend.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tnewamp1.dir/depend.make new file mode 100644 index 0000000..aea2548 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tnewamp1.dir/depend.make @@ -0,0 +1,90 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +unittest/CMakeFiles/tnewamp1.dir/__/src/dump.c.o: ../src/codec2_fft.h +unittest/CMakeFiles/tnewamp1.dir/__/src/dump.c.o: ../src/codec2_internal.h +unittest/CMakeFiles/tnewamp1.dir/__/src/dump.c.o: ../src/comp.h +unittest/CMakeFiles/tnewamp1.dir/__/src/dump.c.o: ../src/defines.h +unittest/CMakeFiles/tnewamp1.dir/__/src/dump.c.o: ../src/dump.c +unittest/CMakeFiles/tnewamp1.dir/__/src/dump.c.o: ../src/dump.h +unittest/CMakeFiles/tnewamp1.dir/__/src/dump.c.o: ../src/kiss_fft.h +unittest/CMakeFiles/tnewamp1.dir/__/src/dump.c.o: ../src/kiss_fftr.h +unittest/CMakeFiles/tnewamp1.dir/__/src/dump.c.o: ../src/newamp1.h +unittest/CMakeFiles/tnewamp1.dir/__/src/dump.c.o: ../src/newamp2.h + +unittest/CMakeFiles/tnewamp1.dir/__/src/kiss_fft.c.o: ../src/_kiss_fft_guts.h +unittest/CMakeFiles/tnewamp1.dir/__/src/kiss_fft.c.o: ../src/kiss_fft.c +unittest/CMakeFiles/tnewamp1.dir/__/src/kiss_fft.c.o: ../src/kiss_fft.h + +unittest/CMakeFiles/tnewamp1.dir/__/src/mbest.c.o: ../src/mbest.c +unittest/CMakeFiles/tnewamp1.dir/__/src/mbest.c.o: ../src/mbest.h + +unittest/CMakeFiles/tnewamp1.dir/__/src/newamp1.c.o: ../src/codec2_fft.h +unittest/CMakeFiles/tnewamp1.dir/__/src/newamp1.c.o: ../src/comp.h +unittest/CMakeFiles/tnewamp1.dir/__/src/newamp1.c.o: ../src/defines.h +unittest/CMakeFiles/tnewamp1.dir/__/src/newamp1.c.o: ../src/kiss_fft.h +unittest/CMakeFiles/tnewamp1.dir/__/src/newamp1.c.o: ../src/kiss_fftr.h +unittest/CMakeFiles/tnewamp1.dir/__/src/newamp1.c.o: ../src/mbest.h +unittest/CMakeFiles/tnewamp1.dir/__/src/newamp1.c.o: ../src/newamp1.c +unittest/CMakeFiles/tnewamp1.dir/__/src/newamp1.c.o: ../src/newamp1.h +unittest/CMakeFiles/tnewamp1.dir/__/src/newamp1.c.o: ../src/phase.h +unittest/CMakeFiles/tnewamp1.dir/__/src/newamp1.c.o: ../src/quantise.h + +unittest/CMakeFiles/tnewamp1.dir/__/src/nlp.c.o: ../src/codec2_fft.h +unittest/CMakeFiles/tnewamp1.dir/__/src/nlp.c.o: ../src/codec2_internal.h +unittest/CMakeFiles/tnewamp1.dir/__/src/nlp.c.o: ../src/comp.h +unittest/CMakeFiles/tnewamp1.dir/__/src/nlp.c.o: ../src/defines.h +unittest/CMakeFiles/tnewamp1.dir/__/src/nlp.c.o: ../src/dump.h +unittest/CMakeFiles/tnewamp1.dir/__/src/nlp.c.o: ../src/kiss_fft.h +unittest/CMakeFiles/tnewamp1.dir/__/src/nlp.c.o: ../src/kiss_fftr.h +unittest/CMakeFiles/tnewamp1.dir/__/src/nlp.c.o: ../src/machdep.h +unittest/CMakeFiles/tnewamp1.dir/__/src/nlp.c.o: ../src/newamp1.h +unittest/CMakeFiles/tnewamp1.dir/__/src/nlp.c.o: ../src/newamp2.h +unittest/CMakeFiles/tnewamp1.dir/__/src/nlp.c.o: ../src/nlp.c +unittest/CMakeFiles/tnewamp1.dir/__/src/nlp.c.o: ../src/nlp.h +unittest/CMakeFiles/tnewamp1.dir/__/src/nlp.c.o: ../src/os.h + +unittest/CMakeFiles/tnewamp1.dir/__/src/octave.c.o: ../src/comp.h +unittest/CMakeFiles/tnewamp1.dir/__/src/octave.c.o: ../src/octave.c +unittest/CMakeFiles/tnewamp1.dir/__/src/octave.c.o: ../src/octave.h + +unittest/CMakeFiles/tnewamp1.dir/__/src/quantise.c.o: ../src/codec2_fft.h +unittest/CMakeFiles/tnewamp1.dir/__/src/quantise.c.o: ../src/codec2_internal.h +unittest/CMakeFiles/tnewamp1.dir/__/src/quantise.c.o: ../src/comp.h +unittest/CMakeFiles/tnewamp1.dir/__/src/quantise.c.o: ../src/defines.h +unittest/CMakeFiles/tnewamp1.dir/__/src/quantise.c.o: ../src/dump.h +unittest/CMakeFiles/tnewamp1.dir/__/src/quantise.c.o: ../src/kiss_fft.h +unittest/CMakeFiles/tnewamp1.dir/__/src/quantise.c.o: ../src/kiss_fftr.h +unittest/CMakeFiles/tnewamp1.dir/__/src/quantise.c.o: ../src/lpc.h +unittest/CMakeFiles/tnewamp1.dir/__/src/quantise.c.o: ../src/lsp.h +unittest/CMakeFiles/tnewamp1.dir/__/src/quantise.c.o: ../src/machdep.h +unittest/CMakeFiles/tnewamp1.dir/__/src/quantise.c.o: ../src/mbest.h +unittest/CMakeFiles/tnewamp1.dir/__/src/quantise.c.o: ../src/newamp1.h +unittest/CMakeFiles/tnewamp1.dir/__/src/quantise.c.o: ../src/newamp2.h +unittest/CMakeFiles/tnewamp1.dir/__/src/quantise.c.o: ../src/phase.h +unittest/CMakeFiles/tnewamp1.dir/__/src/quantise.c.o: ../src/quantise.c +unittest/CMakeFiles/tnewamp1.dir/__/src/quantise.c.o: ../src/quantise.h + +unittest/CMakeFiles/tnewamp1.dir/__/src/sine.c.o: ../src/codec2_fft.h +unittest/CMakeFiles/tnewamp1.dir/__/src/sine.c.o: ../src/comp.h +unittest/CMakeFiles/tnewamp1.dir/__/src/sine.c.o: ../src/defines.h +unittest/CMakeFiles/tnewamp1.dir/__/src/sine.c.o: ../src/kiss_fft.h +unittest/CMakeFiles/tnewamp1.dir/__/src/sine.c.o: ../src/kiss_fftr.h +unittest/CMakeFiles/tnewamp1.dir/__/src/sine.c.o: ../src/sine.c +unittest/CMakeFiles/tnewamp1.dir/__/src/sine.c.o: ../src/sine.h + +unittest/CMakeFiles/tnewamp1.dir/tnewamp1.c.o: ../unittest/../src/codec2_fft.h +unittest/CMakeFiles/tnewamp1.dir/tnewamp1.c.o: ../unittest/../src/codec2_internal.h +unittest/CMakeFiles/tnewamp1.dir/tnewamp1.c.o: ../unittest/../src/comp.h +unittest/CMakeFiles/tnewamp1.dir/tnewamp1.c.o: ../unittest/../src/defines.h +unittest/CMakeFiles/tnewamp1.dir/tnewamp1.c.o: ../unittest/../src/dump.h +unittest/CMakeFiles/tnewamp1.dir/tnewamp1.c.o: ../unittest/../src/kiss_fft.h +unittest/CMakeFiles/tnewamp1.dir/tnewamp1.c.o: ../unittest/../src/kiss_fftr.h +unittest/CMakeFiles/tnewamp1.dir/tnewamp1.c.o: ../unittest/../src/newamp1.h +unittest/CMakeFiles/tnewamp1.dir/tnewamp1.c.o: ../unittest/../src/newamp2.h +unittest/CMakeFiles/tnewamp1.dir/tnewamp1.c.o: ../unittest/../src/nlp.h +unittest/CMakeFiles/tnewamp1.dir/tnewamp1.c.o: ../unittest/../src/octave.h +unittest/CMakeFiles/tnewamp1.dir/tnewamp1.c.o: ../unittest/../src/quantise.h +unittest/CMakeFiles/tnewamp1.dir/tnewamp1.c.o: ../unittest/../src/sine.h +unittest/CMakeFiles/tnewamp1.dir/tnewamp1.c.o: ../unittest/tnewamp1.c + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tnewamp1.dir/flags.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tnewamp1.dir/flags.make new file mode 100644 index 0000000..7c524b1 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tnewamp1.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DFLOATING_POINT -DGIT_HASH=\"df2ed16c\" -DMODEMPROBE_ENABLE -DVAR_ARRAYS -DXXXXX -D_GNU_SOURCE=1 -D__UNITTEST__ + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/unittest/../src -I/home/sh/Downloads/hackrf/codec2/src + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tnewamp1.dir/link.txt b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tnewamp1.dir/link.txt new file mode 100644 index 0000000..6e45389 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tnewamp1.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/tnewamp1.dir/tnewamp1.c.o CMakeFiles/tnewamp1.dir/__/src/quantise.c.o CMakeFiles/tnewamp1.dir/__/src/newamp1.c.o CMakeFiles/tnewamp1.dir/__/src/mbest.c.o CMakeFiles/tnewamp1.dir/__/src/kiss_fft.c.o CMakeFiles/tnewamp1.dir/__/src/sine.c.o CMakeFiles/tnewamp1.dir/__/src/nlp.c.o CMakeFiles/tnewamp1.dir/__/src/dump.c.o CMakeFiles/tnewamp1.dir/__/src/octave.c.o -o tnewamp1 -Wl,-rpath,/home/sh/Downloads/hackrf/codec2/build_linux/src ../src/libcodec2.so.0.9 -lm diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tnewamp1.dir/progress.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tnewamp1.dir/progress.make new file mode 100644 index 0000000..874046c --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tnewamp1.dir/progress.make @@ -0,0 +1,11 @@ +CMAKE_PROGRESS_1 = +CMAKE_PROGRESS_2 = 88 +CMAKE_PROGRESS_3 = +CMAKE_PROGRESS_4 = +CMAKE_PROGRESS_5 = 89 +CMAKE_PROGRESS_6 = +CMAKE_PROGRESS_7 = +CMAKE_PROGRESS_8 = 90 +CMAKE_PROGRESS_9 = +CMAKE_PROGRESS_10 = + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tnewamp1.dir/tnewamp1.c.o b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tnewamp1.dir/tnewamp1.c.o new file mode 100644 index 0000000..d8757ae Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tnewamp1.dir/tnewamp1.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tofdm.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tofdm.dir/C.includecache new file mode 100644 index 0000000..5c9f947 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tofdm.dir/C.includecache @@ -0,0 +1,240 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +../unittest/../src/HRA_112_112.h + +../unittest/../src/codec2_ofdm.h +stdbool.h +- +stdint.h +- +comp.h +../unittest/../src/comp.h +modem_stats.h +../unittest/../src/modem_stats.h + +../unittest/../src/comp.h + +../unittest/../src/comp_prim.h + +../unittest/../src/filter.h +complex.h +- + +../unittest/../src/kiss_fft.h +stdlib.h +- +stdio.h +- +math.h +- +string.h +- +xmmintrin.h +- +sys/types.h +- + +../unittest/../src/modem_stats.h +comp.h +../unittest/../src/comp.h +kiss_fft.h +../unittest/../src/kiss_fft.h + +../unittest/../src/mpdecode_core.h +stdint.h +- +comp.h +../unittest/../src/comp.h + +../unittest/../src/octave.h +comp.h +../unittest/../src/comp.h + +../unittest/../src/ofdm_internal.h +complex.h +- +stdbool.h +- +stdint.h +- +codec2_ofdm.h +../unittest/../src/codec2_ofdm.h +filter.h +../unittest/../src/filter.h + +../unittest/../src/test_bits_ofdm.h + +/home/sh/Downloads/hackrf/codec2/src/codec2_ofdm.h +stdbool.h +- +stdint.h +- +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +modem_stats.h +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h + +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/debug_alloc.h +stdio.h +- + +/home/sh/Downloads/hackrf/codec2/src/filter.c +stdlib.h +- +string.h +- +math.h +- +complex.h +- +filter.h +/home/sh/Downloads/hackrf/codec2/src/filter.h +filter_coef.h +/home/sh/Downloads/hackrf/codec2/src/filter_coef.h +debug_alloc.h +/home/sh/Downloads/hackrf/codec2/src/debug_alloc.h + +/home/sh/Downloads/hackrf/codec2/src/filter.h +complex.h +- + +/home/sh/Downloads/hackrf/codec2/src/filter_coef.h + +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h +stdlib.h +- +stdio.h +- +math.h +- +string.h +- +xmmintrin.h +- +sys/types.h +- + +/home/sh/Downloads/hackrf/codec2/src/machdep.h + +/home/sh/Downloads/hackrf/codec2/src/modem_stats.h +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +kiss_fft.h +/home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + +/home/sh/Downloads/hackrf/codec2/src/mpdecode_core.c +math.h +- +stdlib.h +- +stdint.h +- +stdio.h +- +assert.h +- +mpdecode_core.h +/home/sh/Downloads/hackrf/codec2/src/mpdecode_core.h +phi0.h +/home/sh/Downloads/hackrf/codec2/src/phi0.h +debug_alloc.h +/home/sh/Downloads/hackrf/codec2/src/debug_alloc.h +machdep.h +/home/sh/Downloads/hackrf/codec2/src/machdep.h + +/home/sh/Downloads/hackrf/codec2/src/mpdecode_core.h +stdint.h +- +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h + +/home/sh/Downloads/hackrf/codec2/src/ofdm.c +stdio.h +- +stdlib.h +- +stdbool.h +- +stdint.h +- +string.h +- +math.h +- +assert.h +- +complex.h +- +comp.h +/home/sh/Downloads/hackrf/codec2/src/comp.h +ofdm_internal.h +/home/sh/Downloads/hackrf/codec2/src/ofdm_internal.h +codec2_ofdm.h +/home/sh/Downloads/hackrf/codec2/src/codec2_ofdm.h +filter.h +/home/sh/Downloads/hackrf/codec2/src/filter.h +wval.h +/home/sh/Downloads/hackrf/codec2/src/wval.h +debug_alloc.h +/home/sh/Downloads/hackrf/codec2/src/debug_alloc.h +machdep.h +/home/sh/Downloads/hackrf/codec2/src/machdep.h + +/home/sh/Downloads/hackrf/codec2/src/ofdm_internal.h +complex.h +- +stdbool.h +- +stdint.h +- +codec2_ofdm.h +/home/sh/Downloads/hackrf/codec2/src/codec2_ofdm.h +filter.h +/home/sh/Downloads/hackrf/codec2/src/filter.h + +/home/sh/Downloads/hackrf/codec2/src/phi0.h + +/home/sh/Downloads/hackrf/codec2/src/wval.h +complex.h +- + +/home/sh/Downloads/hackrf/codec2/unittest/tofdm.c +assert.h +- +stdio.h +- +stdlib.h +- +stdint.h +- +string.h +- +math.h +- +complex.h +- +getopt.h +- +ofdm_internal.h +/home/sh/Downloads/hackrf/codec2/unittest/ofdm_internal.h +codec2_ofdm.h +/home/sh/Downloads/hackrf/codec2/unittest/codec2_ofdm.h +octave.h +/home/sh/Downloads/hackrf/codec2/unittest/octave.h +test_bits_ofdm.h +/home/sh/Downloads/hackrf/codec2/unittest/test_bits_ofdm.h +comp_prim.h +/home/sh/Downloads/hackrf/codec2/unittest/comp_prim.h +mpdecode_core.h +/home/sh/Downloads/hackrf/codec2/unittest/mpdecode_core.h +HRA_112_112.h +/home/sh/Downloads/hackrf/codec2/unittest/HRA_112_112.h + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tofdm.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tofdm.dir/DependInfo.cmake new file mode 100644 index 0000000..33f4f2b --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tofdm.dir/DependInfo.cmake @@ -0,0 +1,41 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/src/HRA_112_112.c" "/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/tofdm.dir/__/src/HRA_112_112.c.o" + "/home/sh/Downloads/hackrf/codec2/src/filter.c" "/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/tofdm.dir/__/src/filter.c.o" + "/home/sh/Downloads/hackrf/codec2/src/kiss_fft.c" "/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/tofdm.dir/__/src/kiss_fft.c.o" + "/home/sh/Downloads/hackrf/codec2/src/modem_probe.c" "/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/tofdm.dir/__/src/modem_probe.c.o" + "/home/sh/Downloads/hackrf/codec2/src/mpdecode_core.c" "/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/tofdm.dir/__/src/mpdecode_core.c.o" + "/home/sh/Downloads/hackrf/codec2/src/octave.c" "/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/tofdm.dir/__/src/octave.c.o" + "/home/sh/Downloads/hackrf/codec2/src/ofdm.c" "/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/tofdm.dir/__/src/ofdm.c.o" + "/home/sh/Downloads/hackrf/codec2/src/phi0.c" "/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/tofdm.dir/__/src/phi0.c.o" + "/home/sh/Downloads/hackrf/codec2/unittest/tofdm.c" "/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/tofdm.dir/tofdm.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "FLOATING_POINT" + "GIT_HASH=\"df2ed16c\"" + "MODEMPROBE_ENABLE" + "VAR_ARRAYS" + "XXXXX" + "_GNU_SOURCE=1" + "__UNITTEST__" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../unittest/../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tofdm.dir/__/src/HRA_112_112.c.o b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tofdm.dir/__/src/HRA_112_112.c.o new file mode 100644 index 0000000..0afcad1 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tofdm.dir/__/src/HRA_112_112.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tofdm.dir/__/src/filter.c.o b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tofdm.dir/__/src/filter.c.o new file mode 100644 index 0000000..a0dad56 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tofdm.dir/__/src/filter.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tofdm.dir/__/src/kiss_fft.c.o b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tofdm.dir/__/src/kiss_fft.c.o new file mode 100644 index 0000000..4899080 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tofdm.dir/__/src/kiss_fft.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tofdm.dir/__/src/modem_probe.c.o b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tofdm.dir/__/src/modem_probe.c.o new file mode 100644 index 0000000..2ba1acf Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tofdm.dir/__/src/modem_probe.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tofdm.dir/__/src/mpdecode_core.c.o b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tofdm.dir/__/src/mpdecode_core.c.o new file mode 100644 index 0000000..7b33683 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tofdm.dir/__/src/mpdecode_core.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tofdm.dir/__/src/octave.c.o b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tofdm.dir/__/src/octave.c.o new file mode 100644 index 0000000..e187c72 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tofdm.dir/__/src/octave.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tofdm.dir/__/src/ofdm.c.o b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tofdm.dir/__/src/ofdm.c.o new file mode 100644 index 0000000..ba0d46b Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tofdm.dir/__/src/ofdm.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tofdm.dir/__/src/phi0.c.o b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tofdm.dir/__/src/phi0.c.o new file mode 100644 index 0000000..ec58b09 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tofdm.dir/__/src/phi0.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tofdm.dir/build.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tofdm.dir/build.make new file mode 100644 index 0000000..36a7965 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tofdm.dir/build.make @@ -0,0 +1,218 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include unittest/CMakeFiles/tofdm.dir/depend.make + +# Include the progress variables for this target. +include unittest/CMakeFiles/tofdm.dir/progress.make + +# Include the compile flags for this target's objects. +include unittest/CMakeFiles/tofdm.dir/flags.make + +unittest/CMakeFiles/tofdm.dir/tofdm.c.o: unittest/CMakeFiles/tofdm.dir/flags.make +unittest/CMakeFiles/tofdm.dir/tofdm.c.o: ../unittest/tofdm.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object unittest/CMakeFiles/tofdm.dir/tofdm.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/tofdm.dir/tofdm.c.o -c /home/sh/Downloads/hackrf/codec2/unittest/tofdm.c + +unittest/CMakeFiles/tofdm.dir/tofdm.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/tofdm.dir/tofdm.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/unittest/tofdm.c > CMakeFiles/tofdm.dir/tofdm.c.i + +unittest/CMakeFiles/tofdm.dir/tofdm.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/tofdm.dir/tofdm.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/unittest/tofdm.c -o CMakeFiles/tofdm.dir/tofdm.c.s + +unittest/CMakeFiles/tofdm.dir/__/src/ofdm.c.o: unittest/CMakeFiles/tofdm.dir/flags.make +unittest/CMakeFiles/tofdm.dir/__/src/ofdm.c.o: ../src/ofdm.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Building C object unittest/CMakeFiles/tofdm.dir/__/src/ofdm.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/tofdm.dir/__/src/ofdm.c.o -c /home/sh/Downloads/hackrf/codec2/src/ofdm.c + +unittest/CMakeFiles/tofdm.dir/__/src/ofdm.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/tofdm.dir/__/src/ofdm.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/ofdm.c > CMakeFiles/tofdm.dir/__/src/ofdm.c.i + +unittest/CMakeFiles/tofdm.dir/__/src/ofdm.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/tofdm.dir/__/src/ofdm.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/ofdm.c -o CMakeFiles/tofdm.dir/__/src/ofdm.c.s + +unittest/CMakeFiles/tofdm.dir/__/src/octave.c.o: unittest/CMakeFiles/tofdm.dir/flags.make +unittest/CMakeFiles/tofdm.dir/__/src/octave.c.o: ../src/octave.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_3) "Building C object unittest/CMakeFiles/tofdm.dir/__/src/octave.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/tofdm.dir/__/src/octave.c.o -c /home/sh/Downloads/hackrf/codec2/src/octave.c + +unittest/CMakeFiles/tofdm.dir/__/src/octave.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/tofdm.dir/__/src/octave.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/octave.c > CMakeFiles/tofdm.dir/__/src/octave.c.i + +unittest/CMakeFiles/tofdm.dir/__/src/octave.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/tofdm.dir/__/src/octave.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/octave.c -o CMakeFiles/tofdm.dir/__/src/octave.c.s + +unittest/CMakeFiles/tofdm.dir/__/src/kiss_fft.c.o: unittest/CMakeFiles/tofdm.dir/flags.make +unittest/CMakeFiles/tofdm.dir/__/src/kiss_fft.c.o: ../src/kiss_fft.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_4) "Building C object unittest/CMakeFiles/tofdm.dir/__/src/kiss_fft.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/tofdm.dir/__/src/kiss_fft.c.o -c /home/sh/Downloads/hackrf/codec2/src/kiss_fft.c + +unittest/CMakeFiles/tofdm.dir/__/src/kiss_fft.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/tofdm.dir/__/src/kiss_fft.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/kiss_fft.c > CMakeFiles/tofdm.dir/__/src/kiss_fft.c.i + +unittest/CMakeFiles/tofdm.dir/__/src/kiss_fft.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/tofdm.dir/__/src/kiss_fft.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/kiss_fft.c -o CMakeFiles/tofdm.dir/__/src/kiss_fft.c.s + +unittest/CMakeFiles/tofdm.dir/__/src/modem_probe.c.o: unittest/CMakeFiles/tofdm.dir/flags.make +unittest/CMakeFiles/tofdm.dir/__/src/modem_probe.c.o: ../src/modem_probe.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_5) "Building C object unittest/CMakeFiles/tofdm.dir/__/src/modem_probe.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/tofdm.dir/__/src/modem_probe.c.o -c /home/sh/Downloads/hackrf/codec2/src/modem_probe.c + +unittest/CMakeFiles/tofdm.dir/__/src/modem_probe.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/tofdm.dir/__/src/modem_probe.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/modem_probe.c > CMakeFiles/tofdm.dir/__/src/modem_probe.c.i + +unittest/CMakeFiles/tofdm.dir/__/src/modem_probe.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/tofdm.dir/__/src/modem_probe.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/modem_probe.c -o CMakeFiles/tofdm.dir/__/src/modem_probe.c.s + +unittest/CMakeFiles/tofdm.dir/__/src/mpdecode_core.c.o: unittest/CMakeFiles/tofdm.dir/flags.make +unittest/CMakeFiles/tofdm.dir/__/src/mpdecode_core.c.o: ../src/mpdecode_core.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_6) "Building C object unittest/CMakeFiles/tofdm.dir/__/src/mpdecode_core.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/tofdm.dir/__/src/mpdecode_core.c.o -c /home/sh/Downloads/hackrf/codec2/src/mpdecode_core.c + +unittest/CMakeFiles/tofdm.dir/__/src/mpdecode_core.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/tofdm.dir/__/src/mpdecode_core.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/mpdecode_core.c > CMakeFiles/tofdm.dir/__/src/mpdecode_core.c.i + +unittest/CMakeFiles/tofdm.dir/__/src/mpdecode_core.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/tofdm.dir/__/src/mpdecode_core.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/mpdecode_core.c -o CMakeFiles/tofdm.dir/__/src/mpdecode_core.c.s + +unittest/CMakeFiles/tofdm.dir/__/src/phi0.c.o: unittest/CMakeFiles/tofdm.dir/flags.make +unittest/CMakeFiles/tofdm.dir/__/src/phi0.c.o: ../src/phi0.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_7) "Building C object unittest/CMakeFiles/tofdm.dir/__/src/phi0.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/tofdm.dir/__/src/phi0.c.o -c /home/sh/Downloads/hackrf/codec2/src/phi0.c + +unittest/CMakeFiles/tofdm.dir/__/src/phi0.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/tofdm.dir/__/src/phi0.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/phi0.c > CMakeFiles/tofdm.dir/__/src/phi0.c.i + +unittest/CMakeFiles/tofdm.dir/__/src/phi0.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/tofdm.dir/__/src/phi0.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/phi0.c -o CMakeFiles/tofdm.dir/__/src/phi0.c.s + +unittest/CMakeFiles/tofdm.dir/__/src/filter.c.o: unittest/CMakeFiles/tofdm.dir/flags.make +unittest/CMakeFiles/tofdm.dir/__/src/filter.c.o: ../src/filter.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_8) "Building C object unittest/CMakeFiles/tofdm.dir/__/src/filter.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/tofdm.dir/__/src/filter.c.o -c /home/sh/Downloads/hackrf/codec2/src/filter.c + +unittest/CMakeFiles/tofdm.dir/__/src/filter.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/tofdm.dir/__/src/filter.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/filter.c > CMakeFiles/tofdm.dir/__/src/filter.c.i + +unittest/CMakeFiles/tofdm.dir/__/src/filter.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/tofdm.dir/__/src/filter.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/filter.c -o CMakeFiles/tofdm.dir/__/src/filter.c.s + +unittest/CMakeFiles/tofdm.dir/__/src/HRA_112_112.c.o: unittest/CMakeFiles/tofdm.dir/flags.make +unittest/CMakeFiles/tofdm.dir/__/src/HRA_112_112.c.o: ../src/HRA_112_112.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_9) "Building C object unittest/CMakeFiles/tofdm.dir/__/src/HRA_112_112.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/tofdm.dir/__/src/HRA_112_112.c.o -c /home/sh/Downloads/hackrf/codec2/src/HRA_112_112.c + +unittest/CMakeFiles/tofdm.dir/__/src/HRA_112_112.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/tofdm.dir/__/src/HRA_112_112.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/src/HRA_112_112.c > CMakeFiles/tofdm.dir/__/src/HRA_112_112.c.i + +unittest/CMakeFiles/tofdm.dir/__/src/HRA_112_112.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/tofdm.dir/__/src/HRA_112_112.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/src/HRA_112_112.c -o CMakeFiles/tofdm.dir/__/src/HRA_112_112.c.s + +# Object files for target tofdm +tofdm_OBJECTS = \ +"CMakeFiles/tofdm.dir/tofdm.c.o" \ +"CMakeFiles/tofdm.dir/__/src/ofdm.c.o" \ +"CMakeFiles/tofdm.dir/__/src/octave.c.o" \ +"CMakeFiles/tofdm.dir/__/src/kiss_fft.c.o" \ +"CMakeFiles/tofdm.dir/__/src/modem_probe.c.o" \ +"CMakeFiles/tofdm.dir/__/src/mpdecode_core.c.o" \ +"CMakeFiles/tofdm.dir/__/src/phi0.c.o" \ +"CMakeFiles/tofdm.dir/__/src/filter.c.o" \ +"CMakeFiles/tofdm.dir/__/src/HRA_112_112.c.o" + +# External object files for target tofdm +tofdm_EXTERNAL_OBJECTS = + +unittest/tofdm: unittest/CMakeFiles/tofdm.dir/tofdm.c.o +unittest/tofdm: unittest/CMakeFiles/tofdm.dir/__/src/ofdm.c.o +unittest/tofdm: unittest/CMakeFiles/tofdm.dir/__/src/octave.c.o +unittest/tofdm: unittest/CMakeFiles/tofdm.dir/__/src/kiss_fft.c.o +unittest/tofdm: unittest/CMakeFiles/tofdm.dir/__/src/modem_probe.c.o +unittest/tofdm: unittest/CMakeFiles/tofdm.dir/__/src/mpdecode_core.c.o +unittest/tofdm: unittest/CMakeFiles/tofdm.dir/__/src/phi0.c.o +unittest/tofdm: unittest/CMakeFiles/tofdm.dir/__/src/filter.c.o +unittest/tofdm: unittest/CMakeFiles/tofdm.dir/__/src/HRA_112_112.c.o +unittest/tofdm: unittest/CMakeFiles/tofdm.dir/build.make +unittest/tofdm: unittest/CMakeFiles/tofdm.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_10) "Linking C executable tofdm" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/tofdm.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +unittest/CMakeFiles/tofdm.dir/build: unittest/tofdm + +.PHONY : unittest/CMakeFiles/tofdm.dir/build + +unittest/CMakeFiles/tofdm.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && $(CMAKE_COMMAND) -P CMakeFiles/tofdm.dir/cmake_clean.cmake +.PHONY : unittest/CMakeFiles/tofdm.dir/clean + +unittest/CMakeFiles/tofdm.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/unittest /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/unittest /home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/tofdm.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : unittest/CMakeFiles/tofdm.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tofdm.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tofdm.dir/cmake_clean.cmake new file mode 100644 index 0000000..f5027c4 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tofdm.dir/cmake_clean.cmake @@ -0,0 +1,18 @@ +file(REMOVE_RECURSE + "CMakeFiles/tofdm.dir/tofdm.c.o" + "CMakeFiles/tofdm.dir/__/src/ofdm.c.o" + "CMakeFiles/tofdm.dir/__/src/octave.c.o" + "CMakeFiles/tofdm.dir/__/src/kiss_fft.c.o" + "CMakeFiles/tofdm.dir/__/src/modem_probe.c.o" + "CMakeFiles/tofdm.dir/__/src/mpdecode_core.c.o" + "CMakeFiles/tofdm.dir/__/src/phi0.c.o" + "CMakeFiles/tofdm.dir/__/src/filter.c.o" + "CMakeFiles/tofdm.dir/__/src/HRA_112_112.c.o" + "tofdm.pdb" + "tofdm" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/tofdm.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tofdm.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tofdm.dir/depend.internal new file mode 100644 index 0000000..f952465 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tofdm.dir/depend.internal @@ -0,0 +1,56 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +unittest/CMakeFiles/tofdm.dir/__/src/HRA_112_112.c.o + /home/sh/Downloads/hackrf/codec2/src/HRA_112_112.c + /home/sh/Downloads/hackrf/codec2/src/HRA_112_112.h +unittest/CMakeFiles/tofdm.dir/__/src/filter.c.o + /home/sh/Downloads/hackrf/codec2/src/debug_alloc.h + /home/sh/Downloads/hackrf/codec2/src/filter.c + /home/sh/Downloads/hackrf/codec2/src/filter.h + /home/sh/Downloads/hackrf/codec2/src/filter_coef.h +unittest/CMakeFiles/tofdm.dir/__/src/kiss_fft.c.o + /home/sh/Downloads/hackrf/codec2/src/_kiss_fft_guts.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.c + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h +unittest/CMakeFiles/tofdm.dir/__/src/modem_probe.c.o + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/modem_probe.c + /home/sh/Downloads/hackrf/codec2/src/octave.h +unittest/CMakeFiles/tofdm.dir/__/src/mpdecode_core.c.o + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/debug_alloc.h + /home/sh/Downloads/hackrf/codec2/src/machdep.h + /home/sh/Downloads/hackrf/codec2/src/mpdecode_core.c + /home/sh/Downloads/hackrf/codec2/src/mpdecode_core.h + /home/sh/Downloads/hackrf/codec2/src/phi0.h +unittest/CMakeFiles/tofdm.dir/__/src/octave.c.o + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/octave.c + /home/sh/Downloads/hackrf/codec2/src/octave.h +unittest/CMakeFiles/tofdm.dir/__/src/ofdm.c.o + /home/sh/Downloads/hackrf/codec2/src/codec2_ofdm.h + /home/sh/Downloads/hackrf/codec2/src/comp.h + /home/sh/Downloads/hackrf/codec2/src/debug_alloc.h + /home/sh/Downloads/hackrf/codec2/src/filter.h + /home/sh/Downloads/hackrf/codec2/src/kiss_fft.h + /home/sh/Downloads/hackrf/codec2/src/machdep.h + /home/sh/Downloads/hackrf/codec2/src/modem_stats.h + /home/sh/Downloads/hackrf/codec2/src/ofdm.c + /home/sh/Downloads/hackrf/codec2/src/ofdm_internal.h + /home/sh/Downloads/hackrf/codec2/src/wval.h +unittest/CMakeFiles/tofdm.dir/__/src/phi0.c.o + /home/sh/Downloads/hackrf/codec2/src/phi0.c +unittest/CMakeFiles/tofdm.dir/tofdm.c.o + ../unittest/../src/HRA_112_112.h + ../unittest/../src/codec2_ofdm.h + ../unittest/../src/comp.h + ../unittest/../src/comp_prim.h + ../unittest/../src/filter.h + ../unittest/../src/kiss_fft.h + ../unittest/../src/modem_stats.h + ../unittest/../src/mpdecode_core.h + ../unittest/../src/octave.h + ../unittest/../src/ofdm_internal.h + ../unittest/../src/test_bits_ofdm.h + /home/sh/Downloads/hackrf/codec2/unittest/tofdm.c diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tofdm.dir/depend.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tofdm.dir/depend.make new file mode 100644 index 0000000..a64758b --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tofdm.dir/depend.make @@ -0,0 +1,56 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +unittest/CMakeFiles/tofdm.dir/__/src/HRA_112_112.c.o: ../src/HRA_112_112.c +unittest/CMakeFiles/tofdm.dir/__/src/HRA_112_112.c.o: ../src/HRA_112_112.h + +unittest/CMakeFiles/tofdm.dir/__/src/filter.c.o: ../src/debug_alloc.h +unittest/CMakeFiles/tofdm.dir/__/src/filter.c.o: ../src/filter.c +unittest/CMakeFiles/tofdm.dir/__/src/filter.c.o: ../src/filter.h +unittest/CMakeFiles/tofdm.dir/__/src/filter.c.o: ../src/filter_coef.h + +unittest/CMakeFiles/tofdm.dir/__/src/kiss_fft.c.o: ../src/_kiss_fft_guts.h +unittest/CMakeFiles/tofdm.dir/__/src/kiss_fft.c.o: ../src/kiss_fft.c +unittest/CMakeFiles/tofdm.dir/__/src/kiss_fft.c.o: ../src/kiss_fft.h + +unittest/CMakeFiles/tofdm.dir/__/src/modem_probe.c.o: ../src/comp.h +unittest/CMakeFiles/tofdm.dir/__/src/modem_probe.c.o: ../src/modem_probe.c +unittest/CMakeFiles/tofdm.dir/__/src/modem_probe.c.o: ../src/octave.h + +unittest/CMakeFiles/tofdm.dir/__/src/mpdecode_core.c.o: ../src/comp.h +unittest/CMakeFiles/tofdm.dir/__/src/mpdecode_core.c.o: ../src/debug_alloc.h +unittest/CMakeFiles/tofdm.dir/__/src/mpdecode_core.c.o: ../src/machdep.h +unittest/CMakeFiles/tofdm.dir/__/src/mpdecode_core.c.o: ../src/mpdecode_core.c +unittest/CMakeFiles/tofdm.dir/__/src/mpdecode_core.c.o: ../src/mpdecode_core.h +unittest/CMakeFiles/tofdm.dir/__/src/mpdecode_core.c.o: ../src/phi0.h + +unittest/CMakeFiles/tofdm.dir/__/src/octave.c.o: ../src/comp.h +unittest/CMakeFiles/tofdm.dir/__/src/octave.c.o: ../src/octave.c +unittest/CMakeFiles/tofdm.dir/__/src/octave.c.o: ../src/octave.h + +unittest/CMakeFiles/tofdm.dir/__/src/ofdm.c.o: ../src/codec2_ofdm.h +unittest/CMakeFiles/tofdm.dir/__/src/ofdm.c.o: ../src/comp.h +unittest/CMakeFiles/tofdm.dir/__/src/ofdm.c.o: ../src/debug_alloc.h +unittest/CMakeFiles/tofdm.dir/__/src/ofdm.c.o: ../src/filter.h +unittest/CMakeFiles/tofdm.dir/__/src/ofdm.c.o: ../src/kiss_fft.h +unittest/CMakeFiles/tofdm.dir/__/src/ofdm.c.o: ../src/machdep.h +unittest/CMakeFiles/tofdm.dir/__/src/ofdm.c.o: ../src/modem_stats.h +unittest/CMakeFiles/tofdm.dir/__/src/ofdm.c.o: ../src/ofdm.c +unittest/CMakeFiles/tofdm.dir/__/src/ofdm.c.o: ../src/ofdm_internal.h +unittest/CMakeFiles/tofdm.dir/__/src/ofdm.c.o: ../src/wval.h + +unittest/CMakeFiles/tofdm.dir/__/src/phi0.c.o: ../src/phi0.c + +unittest/CMakeFiles/tofdm.dir/tofdm.c.o: ../unittest/../src/HRA_112_112.h +unittest/CMakeFiles/tofdm.dir/tofdm.c.o: ../unittest/../src/codec2_ofdm.h +unittest/CMakeFiles/tofdm.dir/tofdm.c.o: ../unittest/../src/comp.h +unittest/CMakeFiles/tofdm.dir/tofdm.c.o: ../unittest/../src/comp_prim.h +unittest/CMakeFiles/tofdm.dir/tofdm.c.o: ../unittest/../src/filter.h +unittest/CMakeFiles/tofdm.dir/tofdm.c.o: ../unittest/../src/kiss_fft.h +unittest/CMakeFiles/tofdm.dir/tofdm.c.o: ../unittest/../src/modem_stats.h +unittest/CMakeFiles/tofdm.dir/tofdm.c.o: ../unittest/../src/mpdecode_core.h +unittest/CMakeFiles/tofdm.dir/tofdm.c.o: ../unittest/../src/octave.h +unittest/CMakeFiles/tofdm.dir/tofdm.c.o: ../unittest/../src/ofdm_internal.h +unittest/CMakeFiles/tofdm.dir/tofdm.c.o: ../unittest/../src/test_bits_ofdm.h +unittest/CMakeFiles/tofdm.dir/tofdm.c.o: ../unittest/tofdm.c + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tofdm.dir/flags.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tofdm.dir/flags.make new file mode 100644 index 0000000..92b2429 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tofdm.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DFLOATING_POINT -DGIT_HASH=\"df2ed16c\" -DMODEMPROBE_ENABLE -DVAR_ARRAYS -DXXXXX -D_GNU_SOURCE=1 -D__UNITTEST__ + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/unittest/../src + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tofdm.dir/link.txt b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tofdm.dir/link.txt new file mode 100644 index 0000000..aa96913 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tofdm.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/tofdm.dir/tofdm.c.o CMakeFiles/tofdm.dir/__/src/ofdm.c.o CMakeFiles/tofdm.dir/__/src/octave.c.o CMakeFiles/tofdm.dir/__/src/kiss_fft.c.o CMakeFiles/tofdm.dir/__/src/modem_probe.c.o CMakeFiles/tofdm.dir/__/src/mpdecode_core.c.o CMakeFiles/tofdm.dir/__/src/phi0.c.o CMakeFiles/tofdm.dir/__/src/filter.c.o CMakeFiles/tofdm.dir/__/src/HRA_112_112.c.o -o tofdm -lm diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tofdm.dir/progress.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tofdm.dir/progress.make new file mode 100644 index 0000000..0fae62b --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tofdm.dir/progress.make @@ -0,0 +1,11 @@ +CMAKE_PROGRESS_1 = +CMAKE_PROGRESS_2 = 92 +CMAKE_PROGRESS_3 = +CMAKE_PROGRESS_4 = +CMAKE_PROGRESS_5 = 93 +CMAKE_PROGRESS_6 = +CMAKE_PROGRESS_7 = +CMAKE_PROGRESS_8 = 94 +CMAKE_PROGRESS_9 = +CMAKE_PROGRESS_10 = + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tofdm.dir/tofdm.c.o b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tofdm.dir/tofdm.c.o new file mode 100644 index 0000000..07ff74f Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tofdm.dir/tofdm.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tqam16.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tqam16.dir/C.includecache new file mode 100644 index 0000000..d931e9e --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tqam16.dir/C.includecache @@ -0,0 +1,62 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +../unittest/../src/codec2_ofdm.h +stdbool.h +- +stdint.h +- +comp.h +../unittest/../src/comp.h +modem_stats.h +../unittest/../src/modem_stats.h + +../unittest/../src/comp.h + +../unittest/../src/filter.h +complex.h +- + +../unittest/../src/kiss_fft.h +stdlib.h +- +stdio.h +- +math.h +- +string.h +- +xmmintrin.h +- +sys/types.h +- + +../unittest/../src/modem_stats.h +comp.h +../unittest/../src/comp.h +kiss_fft.h +../unittest/../src/kiss_fft.h + +../unittest/../src/ofdm_internal.h +complex.h +- +stdbool.h +- +stdint.h +- +codec2_ofdm.h +../unittest/../src/codec2_ofdm.h +filter.h +../unittest/../src/filter.h + +/home/sh/Downloads/hackrf/codec2/unittest/tqam16.c +stdio.h +- +ofdm_internal.h +/home/sh/Downloads/hackrf/codec2/unittest/ofdm_internal.h + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tqam16.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tqam16.dir/DependInfo.cmake new file mode 100644 index 0000000..dfac7c5 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tqam16.dir/DependInfo.cmake @@ -0,0 +1,35 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/unittest/tqam16.c" "/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/tqam16.dir/tqam16.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "FLOATING_POINT" + "GIT_HASH=\"df2ed16c\"" + "MODEMPROBE_ENABLE" + "VAR_ARRAYS" + "XXXXX" + "_GNU_SOURCE=1" + "__UNITTEST__" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../unittest/../src" + "../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/DependInfo.cmake" + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tqam16.dir/build.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tqam16.dir/build.make new file mode 100644 index 0000000..4ef84ea --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tqam16.dir/build.make @@ -0,0 +1,99 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include unittest/CMakeFiles/tqam16.dir/depend.make + +# Include the progress variables for this target. +include unittest/CMakeFiles/tqam16.dir/progress.make + +# Include the compile flags for this target's objects. +include unittest/CMakeFiles/tqam16.dir/flags.make + +unittest/CMakeFiles/tqam16.dir/tqam16.c.o: unittest/CMakeFiles/tqam16.dir/flags.make +unittest/CMakeFiles/tqam16.dir/tqam16.c.o: ../unittest/tqam16.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object unittest/CMakeFiles/tqam16.dir/tqam16.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/tqam16.dir/tqam16.c.o -c /home/sh/Downloads/hackrf/codec2/unittest/tqam16.c + +unittest/CMakeFiles/tqam16.dir/tqam16.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/tqam16.dir/tqam16.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/unittest/tqam16.c > CMakeFiles/tqam16.dir/tqam16.c.i + +unittest/CMakeFiles/tqam16.dir/tqam16.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/tqam16.dir/tqam16.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/unittest/tqam16.c -o CMakeFiles/tqam16.dir/tqam16.c.s + +# Object files for target tqam16 +tqam16_OBJECTS = \ +"CMakeFiles/tqam16.dir/tqam16.c.o" + +# External object files for target tqam16 +tqam16_EXTERNAL_OBJECTS = + +unittest/tqam16: unittest/CMakeFiles/tqam16.dir/tqam16.c.o +unittest/tqam16: unittest/CMakeFiles/tqam16.dir/build.make +unittest/tqam16: src/libcodec2.so.0.9 +unittest/tqam16: unittest/CMakeFiles/tqam16.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking C executable tqam16" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/tqam16.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +unittest/CMakeFiles/tqam16.dir/build: unittest/tqam16 + +.PHONY : unittest/CMakeFiles/tqam16.dir/build + +unittest/CMakeFiles/tqam16.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && $(CMAKE_COMMAND) -P CMakeFiles/tqam16.dir/cmake_clean.cmake +.PHONY : unittest/CMakeFiles/tqam16.dir/clean + +unittest/CMakeFiles/tqam16.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/unittest /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/unittest /home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/tqam16.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : unittest/CMakeFiles/tqam16.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tqam16.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tqam16.dir/cmake_clean.cmake new file mode 100644 index 0000000..b05a651 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tqam16.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +file(REMOVE_RECURSE + "CMakeFiles/tqam16.dir/tqam16.c.o" + "tqam16.pdb" + "tqam16" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/tqam16.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tqam16.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tqam16.dir/depend.internal new file mode 100644 index 0000000..79b55b0 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tqam16.dir/depend.internal @@ -0,0 +1,11 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +unittest/CMakeFiles/tqam16.dir/tqam16.c.o + ../unittest/../src/codec2_ofdm.h + ../unittest/../src/comp.h + ../unittest/../src/filter.h + ../unittest/../src/kiss_fft.h + ../unittest/../src/modem_stats.h + ../unittest/../src/ofdm_internal.h + /home/sh/Downloads/hackrf/codec2/unittest/tqam16.c diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tqam16.dir/depend.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tqam16.dir/depend.make new file mode 100644 index 0000000..5fb709e --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tqam16.dir/depend.make @@ -0,0 +1,11 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +unittest/CMakeFiles/tqam16.dir/tqam16.c.o: ../unittest/../src/codec2_ofdm.h +unittest/CMakeFiles/tqam16.dir/tqam16.c.o: ../unittest/../src/comp.h +unittest/CMakeFiles/tqam16.dir/tqam16.c.o: ../unittest/../src/filter.h +unittest/CMakeFiles/tqam16.dir/tqam16.c.o: ../unittest/../src/kiss_fft.h +unittest/CMakeFiles/tqam16.dir/tqam16.c.o: ../unittest/../src/modem_stats.h +unittest/CMakeFiles/tqam16.dir/tqam16.c.o: ../unittest/../src/ofdm_internal.h +unittest/CMakeFiles/tqam16.dir/tqam16.c.o: ../unittest/tqam16.c + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tqam16.dir/flags.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tqam16.dir/flags.make new file mode 100644 index 0000000..7c524b1 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tqam16.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DFLOATING_POINT -DGIT_HASH=\"df2ed16c\" -DMODEMPROBE_ENABLE -DVAR_ARRAYS -DXXXXX -D_GNU_SOURCE=1 -D__UNITTEST__ + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/unittest/../src -I/home/sh/Downloads/hackrf/codec2/src + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tqam16.dir/link.txt b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tqam16.dir/link.txt new file mode 100644 index 0000000..f1b2ecc --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tqam16.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/tqam16.dir/tqam16.c.o -o tqam16 -Wl,-rpath,/home/sh/Downloads/hackrf/codec2/build_linux/src ../src/libcodec2.so.0.9 -lm diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tqam16.dir/progress.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tqam16.dir/progress.make new file mode 100644 index 0000000..f07b37a --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tqam16.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = +CMAKE_PROGRESS_2 = 96 + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tqam16.dir/tqam16.c.o b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tqam16.dir/tqam16.c.o new file mode 100644 index 0000000..58e527b Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tqam16.dir/tqam16.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tst_codec2_fft_init.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tst_codec2_fft_init.dir/C.includecache new file mode 100644 index 0000000..aeab265 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tst_codec2_fft_init.dir/C.includecache @@ -0,0 +1,98 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +../unittest/../src/codec2.h +codec2/version.h +- + +../unittest/../src/codec2_fft.h +assert.h +- +stdlib.h +- +stdio.h +- +string.h +- +math.h +- +fdv_arm_math.h +../unittest/../src/fdv_arm_math.h +defines.h +../unittest/../src/defines.h +comp.h +../unittest/../src/comp.h +kiss_fftr.h +../unittest/../src/kiss_fftr.h +kiss_fft.h +../unittest/../src/kiss_fft.h + +../unittest/../src/codec2_internal.h +codec2_fft.h +../unittest/../src/codec2_fft.h +newamp1.h +../unittest/../src/newamp1.h +newamp2.h +../unittest/../src/newamp2.h + +../unittest/../src/comp.h + +../unittest/../src/defines.h + +../unittest/../src/kiss_fft.h +stdlib.h +- +stdio.h +- +math.h +- +string.h +- +xmmintrin.h +- +sys/types.h +- + +../unittest/../src/kiss_fftr.h +kiss_fft.h +../unittest/../src/kiss_fft.h + +../unittest/../src/machdep.h + +../unittest/../src/newamp1.h +codec2_fft.h +../unittest/../src/codec2_fft.h +comp.h +../unittest/../src/comp.h + +../unittest/../src/newamp2.h +codec2_fft.h +../unittest/../src/codec2_fft.h +comp.h +../unittest/../src/comp.h + +/home/sh/Downloads/hackrf/codec2/unittest/tst_codec2_fft_init.c +stdio.h +- +stdlib.h +- +stdint.h +- +math.h +- +codec2.h +/home/sh/Downloads/hackrf/codec2/unittest/codec2.h +codec2_internal.h +/home/sh/Downloads/hackrf/codec2/unittest/codec2_internal.h +defines.h +/home/sh/Downloads/hackrf/codec2/unittest/defines.h +machdep.h +/home/sh/Downloads/hackrf/codec2/unittest/machdep.h + +codec2/version.h + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tst_codec2_fft_init.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tst_codec2_fft_init.dir/DependInfo.cmake new file mode 100644 index 0000000..533613d --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tst_codec2_fft_init.dir/DependInfo.cmake @@ -0,0 +1,35 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/unittest/tst_codec2_fft_init.c" "/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/tst_codec2_fft_init.dir/tst_codec2_fft_init.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "FLOATING_POINT" + "GIT_HASH=\"df2ed16c\"" + "MODEMPROBE_ENABLE" + "VAR_ARRAYS" + "XXXXX" + "_GNU_SOURCE=1" + "__UNITTEST__" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../unittest/../src" + "../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + "/home/sh/Downloads/hackrf/codec2/build_linux/src/CMakeFiles/codec2.dir/DependInfo.cmake" + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tst_codec2_fft_init.dir/build.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tst_codec2_fft_init.dir/build.make new file mode 100644 index 0000000..758279f --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tst_codec2_fft_init.dir/build.make @@ -0,0 +1,99 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include unittest/CMakeFiles/tst_codec2_fft_init.dir/depend.make + +# Include the progress variables for this target. +include unittest/CMakeFiles/tst_codec2_fft_init.dir/progress.make + +# Include the compile flags for this target's objects. +include unittest/CMakeFiles/tst_codec2_fft_init.dir/flags.make + +unittest/CMakeFiles/tst_codec2_fft_init.dir/tst_codec2_fft_init.c.o: unittest/CMakeFiles/tst_codec2_fft_init.dir/flags.make +unittest/CMakeFiles/tst_codec2_fft_init.dir/tst_codec2_fft_init.c.o: ../unittest/tst_codec2_fft_init.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object unittest/CMakeFiles/tst_codec2_fft_init.dir/tst_codec2_fft_init.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/tst_codec2_fft_init.dir/tst_codec2_fft_init.c.o -c /home/sh/Downloads/hackrf/codec2/unittest/tst_codec2_fft_init.c + +unittest/CMakeFiles/tst_codec2_fft_init.dir/tst_codec2_fft_init.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/tst_codec2_fft_init.dir/tst_codec2_fft_init.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/unittest/tst_codec2_fft_init.c > CMakeFiles/tst_codec2_fft_init.dir/tst_codec2_fft_init.c.i + +unittest/CMakeFiles/tst_codec2_fft_init.dir/tst_codec2_fft_init.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/tst_codec2_fft_init.dir/tst_codec2_fft_init.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/unittest/tst_codec2_fft_init.c -o CMakeFiles/tst_codec2_fft_init.dir/tst_codec2_fft_init.c.s + +# Object files for target tst_codec2_fft_init +tst_codec2_fft_init_OBJECTS = \ +"CMakeFiles/tst_codec2_fft_init.dir/tst_codec2_fft_init.c.o" + +# External object files for target tst_codec2_fft_init +tst_codec2_fft_init_EXTERNAL_OBJECTS = + +unittest/tst_codec2_fft_init: unittest/CMakeFiles/tst_codec2_fft_init.dir/tst_codec2_fft_init.c.o +unittest/tst_codec2_fft_init: unittest/CMakeFiles/tst_codec2_fft_init.dir/build.make +unittest/tst_codec2_fft_init: src/libcodec2.so.0.9 +unittest/tst_codec2_fft_init: unittest/CMakeFiles/tst_codec2_fft_init.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking C executable tst_codec2_fft_init" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/tst_codec2_fft_init.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +unittest/CMakeFiles/tst_codec2_fft_init.dir/build: unittest/tst_codec2_fft_init + +.PHONY : unittest/CMakeFiles/tst_codec2_fft_init.dir/build + +unittest/CMakeFiles/tst_codec2_fft_init.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && $(CMAKE_COMMAND) -P CMakeFiles/tst_codec2_fft_init.dir/cmake_clean.cmake +.PHONY : unittest/CMakeFiles/tst_codec2_fft_init.dir/clean + +unittest/CMakeFiles/tst_codec2_fft_init.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/unittest /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/unittest /home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/tst_codec2_fft_init.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : unittest/CMakeFiles/tst_codec2_fft_init.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tst_codec2_fft_init.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tst_codec2_fft_init.dir/cmake_clean.cmake new file mode 100644 index 0000000..8c7c129 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tst_codec2_fft_init.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +file(REMOVE_RECURSE + "CMakeFiles/tst_codec2_fft_init.dir/tst_codec2_fft_init.c.o" + "tst_codec2_fft_init.pdb" + "tst_codec2_fft_init" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/tst_codec2_fft_init.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tst_codec2_fft_init.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tst_codec2_fft_init.dir/depend.internal new file mode 100644 index 0000000..189f5c8 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tst_codec2_fft_init.dir/depend.internal @@ -0,0 +1,16 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +unittest/CMakeFiles/tst_codec2_fft_init.dir/tst_codec2_fft_init.c.o + ../unittest/../src/codec2.h + ../unittest/../src/codec2_fft.h + ../unittest/../src/codec2_internal.h + ../unittest/../src/comp.h + ../unittest/../src/defines.h + ../unittest/../src/kiss_fft.h + ../unittest/../src/kiss_fftr.h + ../unittest/../src/machdep.h + ../unittest/../src/newamp1.h + ../unittest/../src/newamp2.h + /home/sh/Downloads/hackrf/codec2/unittest/tst_codec2_fft_init.c + codec2/version.h diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tst_codec2_fft_init.dir/depend.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tst_codec2_fft_init.dir/depend.make new file mode 100644 index 0000000..dc13deb --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tst_codec2_fft_init.dir/depend.make @@ -0,0 +1,16 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +unittest/CMakeFiles/tst_codec2_fft_init.dir/tst_codec2_fft_init.c.o: ../unittest/../src/codec2.h +unittest/CMakeFiles/tst_codec2_fft_init.dir/tst_codec2_fft_init.c.o: ../unittest/../src/codec2_fft.h +unittest/CMakeFiles/tst_codec2_fft_init.dir/tst_codec2_fft_init.c.o: ../unittest/../src/codec2_internal.h +unittest/CMakeFiles/tst_codec2_fft_init.dir/tst_codec2_fft_init.c.o: ../unittest/../src/comp.h +unittest/CMakeFiles/tst_codec2_fft_init.dir/tst_codec2_fft_init.c.o: ../unittest/../src/defines.h +unittest/CMakeFiles/tst_codec2_fft_init.dir/tst_codec2_fft_init.c.o: ../unittest/../src/kiss_fft.h +unittest/CMakeFiles/tst_codec2_fft_init.dir/tst_codec2_fft_init.c.o: ../unittest/../src/kiss_fftr.h +unittest/CMakeFiles/tst_codec2_fft_init.dir/tst_codec2_fft_init.c.o: ../unittest/../src/machdep.h +unittest/CMakeFiles/tst_codec2_fft_init.dir/tst_codec2_fft_init.c.o: ../unittest/../src/newamp1.h +unittest/CMakeFiles/tst_codec2_fft_init.dir/tst_codec2_fft_init.c.o: ../unittest/../src/newamp2.h +unittest/CMakeFiles/tst_codec2_fft_init.dir/tst_codec2_fft_init.c.o: ../unittest/tst_codec2_fft_init.c +unittest/CMakeFiles/tst_codec2_fft_init.dir/tst_codec2_fft_init.c.o: codec2/version.h + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tst_codec2_fft_init.dir/flags.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tst_codec2_fft_init.dir/flags.make new file mode 100644 index 0000000..7c524b1 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tst_codec2_fft_init.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DFLOATING_POINT -DGIT_HASH=\"df2ed16c\" -DMODEMPROBE_ENABLE -DVAR_ARRAYS -DXXXXX -D_GNU_SOURCE=1 -D__UNITTEST__ + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/unittest/../src -I/home/sh/Downloads/hackrf/codec2/src + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tst_codec2_fft_init.dir/link.txt b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tst_codec2_fft_init.dir/link.txt new file mode 100644 index 0000000..a4d9ab0 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tst_codec2_fft_init.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/tst_codec2_fft_init.dir/tst_codec2_fft_init.c.o -o tst_codec2_fft_init -Wl,-rpath,/home/sh/Downloads/hackrf/codec2/build_linux/src -lm ../src/libcodec2.so.0.9 -lm diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tst_codec2_fft_init.dir/progress.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tst_codec2_fft_init.dir/progress.make new file mode 100644 index 0000000..6c287f1 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tst_codec2_fft_init.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = +CMAKE_PROGRESS_2 = + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tst_codec2_fft_init.dir/tst_codec2_fft_init.c.o b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tst_codec2_fft_init.dir/tst_codec2_fft_init.c.o new file mode 100644 index 0000000..2a2c3c8 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tst_codec2_fft_init.dir/tst_codec2_fft_init.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tvq_mbest.dir/C.includecache b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tvq_mbest.dir/C.includecache new file mode 100644 index 0000000..da884d3 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tvq_mbest.dir/C.includecache @@ -0,0 +1,16 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +/home/sh/Downloads/hackrf/codec2/unittest/tvq_mbest.c +assert.h +- +stdlib.h +- +stdio.h +- + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tvq_mbest.dir/DependInfo.cmake b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tvq_mbest.dir/DependInfo.cmake new file mode 100644 index 0000000..47b8de4 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tvq_mbest.dir/DependInfo.cmake @@ -0,0 +1,33 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "C" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_C + "/home/sh/Downloads/hackrf/codec2/unittest/tvq_mbest.c" "/home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/tvq_mbest.dir/tvq_mbest.c.o" + ) +set(CMAKE_C_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_C + "FLOATING_POINT" + "GIT_HASH=\"df2ed16c\"" + "MODEMPROBE_ENABLE" + "VAR_ARRAYS" + "XXXXX" + "_GNU_SOURCE=1" + "__UNITTEST__" + ) + +# The include file search paths: +set(CMAKE_C_TARGET_INCLUDE_PATH + "." + "../unittest/../src" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tvq_mbest.dir/build.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tvq_mbest.dir/build.make new file mode 100644 index 0000000..b7e629a --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tvq_mbest.dir/build.make @@ -0,0 +1,98 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +# Include any dependencies generated for this target. +include unittest/CMakeFiles/tvq_mbest.dir/depend.make + +# Include the progress variables for this target. +include unittest/CMakeFiles/tvq_mbest.dir/progress.make + +# Include the compile flags for this target's objects. +include unittest/CMakeFiles/tvq_mbest.dir/flags.make + +unittest/CMakeFiles/tvq_mbest.dir/tvq_mbest.c.o: unittest/CMakeFiles/tvq_mbest.dir/flags.make +unittest/CMakeFiles/tvq_mbest.dir/tvq_mbest.c.o: ../unittest/tvq_mbest.c + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object unittest/CMakeFiles/tvq_mbest.dir/tvq_mbest.c.o" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -o CMakeFiles/tvq_mbest.dir/tvq_mbest.c.o -c /home/sh/Downloads/hackrf/codec2/unittest/tvq_mbest.c + +unittest/CMakeFiles/tvq_mbest.dir/tvq_mbest.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing C source to CMakeFiles/tvq_mbest.dir/tvq_mbest.c.i" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E /home/sh/Downloads/hackrf/codec2/unittest/tvq_mbest.c > CMakeFiles/tvq_mbest.dir/tvq_mbest.c.i + +unittest/CMakeFiles/tvq_mbest.dir/tvq_mbest.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling C source to assembly CMakeFiles/tvq_mbest.dir/tvq_mbest.c.s" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && /usr/bin/cc $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S /home/sh/Downloads/hackrf/codec2/unittest/tvq_mbest.c -o CMakeFiles/tvq_mbest.dir/tvq_mbest.c.s + +# Object files for target tvq_mbest +tvq_mbest_OBJECTS = \ +"CMakeFiles/tvq_mbest.dir/tvq_mbest.c.o" + +# External object files for target tvq_mbest +tvq_mbest_EXTERNAL_OBJECTS = + +unittest/tvq_mbest: unittest/CMakeFiles/tvq_mbest.dir/tvq_mbest.c.o +unittest/tvq_mbest: unittest/CMakeFiles/tvq_mbest.dir/build.make +unittest/tvq_mbest: unittest/CMakeFiles/tvq_mbest.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking C executable tvq_mbest" + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/tvq_mbest.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +unittest/CMakeFiles/tvq_mbest.dir/build: unittest/tvq_mbest + +.PHONY : unittest/CMakeFiles/tvq_mbest.dir/build + +unittest/CMakeFiles/tvq_mbest.dir/clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux/unittest && $(CMAKE_COMMAND) -P CMakeFiles/tvq_mbest.dir/cmake_clean.cmake +.PHONY : unittest/CMakeFiles/tvq_mbest.dir/clean + +unittest/CMakeFiles/tvq_mbest.dir/depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/sh/Downloads/hackrf/codec2 /home/sh/Downloads/hackrf/codec2/unittest /home/sh/Downloads/hackrf/codec2/build_linux /home/sh/Downloads/hackrf/codec2/build_linux/unittest /home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/tvq_mbest.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : unittest/CMakeFiles/tvq_mbest.dir/depend + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tvq_mbest.dir/cmake_clean.cmake b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tvq_mbest.dir/cmake_clean.cmake new file mode 100644 index 0000000..99d9489 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tvq_mbest.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +file(REMOVE_RECURSE + "CMakeFiles/tvq_mbest.dir/tvq_mbest.c.o" + "tvq_mbest.pdb" + "tvq_mbest" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/tvq_mbest.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tvq_mbest.dir/depend.internal b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tvq_mbest.dir/depend.internal new file mode 100644 index 0000000..caf7918 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tvq_mbest.dir/depend.internal @@ -0,0 +1,5 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +unittest/CMakeFiles/tvq_mbest.dir/tvq_mbest.c.o + /home/sh/Downloads/hackrf/codec2/unittest/tvq_mbest.c diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tvq_mbest.dir/depend.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tvq_mbest.dir/depend.make new file mode 100644 index 0000000..74718ad --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tvq_mbest.dir/depend.make @@ -0,0 +1,5 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +unittest/CMakeFiles/tvq_mbest.dir/tvq_mbest.c.o: ../unittest/tvq_mbest.c + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tvq_mbest.dir/flags.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tvq_mbest.dir/flags.make new file mode 100644 index 0000000..92b2429 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tvq_mbest.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# compile C with /usr/bin/cc +C_FLAGS = -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP + +C_DEFINES = -DFLOATING_POINT -DGIT_HASH=\"df2ed16c\" -DMODEMPROBE_ENABLE -DVAR_ARRAYS -DXXXXX -D_GNU_SOURCE=1 -D__UNITTEST__ + +C_INCLUDES = -I/home/sh/Downloads/hackrf/codec2/build_linux -I/home/sh/Downloads/hackrf/codec2/unittest/../src + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tvq_mbest.dir/link.txt b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tvq_mbest.dir/link.txt new file mode 100644 index 0000000..055a964 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tvq_mbest.dir/link.txt @@ -0,0 +1 @@ +/usr/bin/cc -Wall -Wno-strict-overflow -std=gnu11 -fPIC -g -O2 -DDUMP -rdynamic CMakeFiles/tvq_mbest.dir/tvq_mbest.c.o -o tvq_mbest diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tvq_mbest.dir/progress.make b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tvq_mbest.dir/progress.make new file mode 100644 index 0000000..cf90e91 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tvq_mbest.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = 97 +CMAKE_PROGRESS_2 = + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tvq_mbest.dir/tvq_mbest.c.o b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tvq_mbest.dir/tvq_mbest.c.o new file mode 100644 index 0000000..d3540ed Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/CMakeFiles/tvq_mbest.dir/tvq_mbest.c.o differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/Makefile b/libcodec2-android/src/codec2/build_linux/unittest/Makefile new file mode 100644 index 0000000..7d94a91 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/Makefile @@ -0,0 +1,1945 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.13 + +# Default target executed when no arguments are given to make. +default_target: all + +.PHONY : default_target + +# Allow only one "make -f Makefile2" at a time, but pass parallelism. +.NOTPARALLEL: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/sh/Downloads/hackrf/codec2 + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/sh/Downloads/hackrf/codec2/build_linux + +#============================================================================= +# Targets provided globally by CMake. + +# Special rule for the target install/strip +install/strip: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..." + /usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake +.PHONY : install/strip + +# Special rule for the target install/strip +install/strip/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..." + /usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake +.PHONY : install/strip/fast + +# Special rule for the target install/local +install/local: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..." + /usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake +.PHONY : install/local + +# Special rule for the target install/local +install/local/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..." + /usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake +.PHONY : install/local/fast + +# Special rule for the target list_install_components +list_install_components: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Available install components are: \"Unspecified\" \"codec2_devel\"" +.PHONY : list_install_components + +# Special rule for the target list_install_components +list_install_components/fast: list_install_components + +.PHONY : list_install_components/fast + +# Special rule for the target rebuild_cache +rebuild_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..." + /usr/bin/cmake -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.PHONY : rebuild_cache + +# Special rule for the target rebuild_cache +rebuild_cache/fast: rebuild_cache + +.PHONY : rebuild_cache/fast + +# Special rule for the target edit_cache +edit_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "No interactive CMake dialog available..." + /usr/bin/cmake -E echo No\ interactive\ CMake\ dialog\ available. +.PHONY : edit_cache + +# Special rule for the target edit_cache +edit_cache/fast: edit_cache + +.PHONY : edit_cache/fast + +# Special rule for the target test +test: + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running tests..." + /usr/bin/ctest --force-new-ctest-process $(ARGS) +.PHONY : test + +# Special rule for the target test +test/fast: test + +.PHONY : test/fast + +# Special rule for the target install +install: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install + +# Special rule for the target install +install/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install/fast + +# The main all target +all: cmake_check_build_system + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles /home/sh/Downloads/hackrf/codec2/build_linux/unittest/CMakeFiles/progress.marks + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 unittest/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/sh/Downloads/hackrf/codec2/build_linux/CMakeFiles 0 +.PHONY : all + +# The main clean target +clean: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 unittest/clean +.PHONY : clean + +# The main clean target +clean/fast: clean + +.PHONY : clean/fast + +# Prepare targets for installation. +preinstall: all + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 unittest/preinstall +.PHONY : preinstall + +# Prepare targets for installation. +preinstall/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 unittest/preinstall +.PHONY : preinstall/fast + +# clear depends +depend: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1 +.PHONY : depend + +# Convenience name for target. +unittest/CMakeFiles/tqam16.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 unittest/CMakeFiles/tqam16.dir/rule +.PHONY : unittest/CMakeFiles/tqam16.dir/rule + +# Convenience name for target. +tqam16: unittest/CMakeFiles/tqam16.dir/rule + +.PHONY : tqam16 + +# fast build rule for target. +tqam16/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tqam16.dir/build.make unittest/CMakeFiles/tqam16.dir/build +.PHONY : tqam16/fast + +# Convenience name for target. +unittest/CMakeFiles/tfsk_llr.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 unittest/CMakeFiles/tfsk_llr.dir/rule +.PHONY : unittest/CMakeFiles/tfsk_llr.dir/rule + +# Convenience name for target. +tfsk_llr: unittest/CMakeFiles/tfsk_llr.dir/rule + +.PHONY : tfsk_llr + +# fast build rule for target. +tfsk_llr/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tfsk_llr.dir/build.make unittest/CMakeFiles/tfsk_llr.dir/build +.PHONY : tfsk_llr/fast + +# Convenience name for target. +unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/rule +.PHONY : unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/rule + +# Convenience name for target. +tfreedv_2400B_rawdata: unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/rule + +.PHONY : tfreedv_2400B_rawdata + +# fast build rule for target. +tfreedv_2400B_rawdata/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/build.make unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/build +.PHONY : tfreedv_2400B_rawdata/fast + +# Convenience name for target. +unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/rule +.PHONY : unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/rule + +# Convenience name for target. +tfreedv_2400A_rawdata: unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/rule + +.PHONY : tfreedv_2400A_rawdata + +# fast build rule for target. +tfreedv_2400A_rawdata/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/build.make unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/build +.PHONY : tfreedv_2400A_rawdata/fast + +# Convenience name for target. +unittest/CMakeFiles/thash.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 unittest/CMakeFiles/thash.dir/rule +.PHONY : unittest/CMakeFiles/thash.dir/rule + +# Convenience name for target. +thash: unittest/CMakeFiles/thash.dir/rule + +.PHONY : thash + +# fast build rule for target. +thash/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/thash.dir/build.make unittest/CMakeFiles/thash.dir/build +.PHONY : thash/fast + +# Convenience name for target. +unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/rule +.PHONY : unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/rule + +# Convenience name for target. +tfreedv_800XA_rawdata: unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/rule + +.PHONY : tfreedv_800XA_rawdata + +# fast build rule for target. +tfreedv_800XA_rawdata/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/build.make unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/build +.PHONY : tfreedv_800XA_rawdata/fast + +# Convenience name for target. +unittest/CMakeFiles/tfreedv_data_channel.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 unittest/CMakeFiles/tfreedv_data_channel.dir/rule +.PHONY : unittest/CMakeFiles/tfreedv_data_channel.dir/rule + +# Convenience name for target. +tfreedv_data_channel: unittest/CMakeFiles/tfreedv_data_channel.dir/rule + +.PHONY : tfreedv_data_channel + +# fast build rule for target. +tfreedv_data_channel/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tfreedv_data_channel.dir/build.make unittest/CMakeFiles/tfreedv_data_channel.dir/build +.PHONY : tfreedv_data_channel/fast + +# Convenience name for target. +unittest/CMakeFiles/tofdm.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 unittest/CMakeFiles/tofdm.dir/rule +.PHONY : unittest/CMakeFiles/tofdm.dir/rule + +# Convenience name for target. +tofdm: unittest/CMakeFiles/tofdm.dir/rule + +.PHONY : tofdm + +# fast build rule for target. +tofdm/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tofdm.dir/build.make unittest/CMakeFiles/tofdm.dir/build +.PHONY : tofdm/fast + +# Convenience name for target. +unittest/CMakeFiles/tvq_mbest.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 unittest/CMakeFiles/tvq_mbest.dir/rule +.PHONY : unittest/CMakeFiles/tvq_mbest.dir/rule + +# Convenience name for target. +tvq_mbest: unittest/CMakeFiles/tvq_mbest.dir/rule + +.PHONY : tvq_mbest + +# fast build rule for target. +tvq_mbest/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tvq_mbest.dir/build.make unittest/CMakeFiles/tvq_mbest.dir/build +.PHONY : tvq_mbest/fast + +# Convenience name for target. +unittest/CMakeFiles/tdeframer.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 unittest/CMakeFiles/tdeframer.dir/rule +.PHONY : unittest/CMakeFiles/tdeframer.dir/rule + +# Convenience name for target. +tdeframer: unittest/CMakeFiles/tdeframer.dir/rule + +.PHONY : tdeframer + +# fast build rule for target. +tdeframer/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tdeframer.dir/build.make unittest/CMakeFiles/tdeframer.dir/build +.PHONY : tdeframer/fast + +# Convenience name for target. +unittest/CMakeFiles/ofdm_stack.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 unittest/CMakeFiles/ofdm_stack.dir/rule +.PHONY : unittest/CMakeFiles/ofdm_stack.dir/rule + +# Convenience name for target. +ofdm_stack: unittest/CMakeFiles/ofdm_stack.dir/rule + +.PHONY : ofdm_stack + +# fast build rule for target. +ofdm_stack/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/ofdm_stack.dir/build.make unittest/CMakeFiles/ofdm_stack.dir/build +.PHONY : ofdm_stack/fast + +# Convenience name for target. +unittest/CMakeFiles/tfsk.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 unittest/CMakeFiles/tfsk.dir/rule +.PHONY : unittest/CMakeFiles/tfsk.dir/rule + +# Convenience name for target. +tfsk: unittest/CMakeFiles/tfsk.dir/rule + +.PHONY : tfsk + +# fast build rule for target. +tfsk/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tfsk.dir/build.make unittest/CMakeFiles/tfsk.dir/build +.PHONY : tfsk/fast + +# Convenience name for target. +unittest/CMakeFiles/fdmdv_mem.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 unittest/CMakeFiles/fdmdv_mem.dir/rule +.PHONY : unittest/CMakeFiles/fdmdv_mem.dir/rule + +# Convenience name for target. +fdmdv_mem: unittest/CMakeFiles/fdmdv_mem.dir/rule + +.PHONY : fdmdv_mem + +# fast build rule for target. +fdmdv_mem/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/fdmdv_mem.dir/build.make unittest/CMakeFiles/fdmdv_mem.dir/build +.PHONY : fdmdv_mem/fast + +# Convenience name for target. +unittest/CMakeFiles/tfdmdv.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 unittest/CMakeFiles/tfdmdv.dir/rule +.PHONY : unittest/CMakeFiles/tfdmdv.dir/rule + +# Convenience name for target. +tfdmdv: unittest/CMakeFiles/tfdmdv.dir/rule + +.PHONY : tfdmdv + +# fast build rule for target. +tfdmdv/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tfdmdv.dir/build.make unittest/CMakeFiles/tfdmdv.dir/build +.PHONY : tfdmdv/fast + +# Convenience name for target. +unittest/CMakeFiles/tcohpsk.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 unittest/CMakeFiles/tcohpsk.dir/rule +.PHONY : unittest/CMakeFiles/tcohpsk.dir/rule + +# Convenience name for target. +tcohpsk: unittest/CMakeFiles/tcohpsk.dir/rule + +.PHONY : tcohpsk + +# fast build rule for target. +tcohpsk/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tcohpsk.dir/build.make unittest/CMakeFiles/tcohpsk.dir/build +.PHONY : tcohpsk/fast + +# Convenience name for target. +unittest/CMakeFiles/tfifo.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 unittest/CMakeFiles/tfifo.dir/rule +.PHONY : unittest/CMakeFiles/tfifo.dir/rule + +# Convenience name for target. +tfifo: unittest/CMakeFiles/tfifo.dir/rule + +.PHONY : tfifo + +# fast build rule for target. +tfifo/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tfifo.dir/build.make unittest/CMakeFiles/tfifo.dir/build +.PHONY : tfifo/fast + +# Convenience name for target. +unittest/CMakeFiles/ofdm_mem.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 unittest/CMakeFiles/ofdm_mem.dir/rule +.PHONY : unittest/CMakeFiles/ofdm_mem.dir/rule + +# Convenience name for target. +ofdm_mem: unittest/CMakeFiles/ofdm_mem.dir/rule + +.PHONY : ofdm_mem + +# fast build rule for target. +ofdm_mem/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/ofdm_mem.dir/build.make unittest/CMakeFiles/ofdm_mem.dir/build +.PHONY : ofdm_mem/fast + +# Convenience name for target. +unittest/CMakeFiles/tfmfsk.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 unittest/CMakeFiles/tfmfsk.dir/rule +.PHONY : unittest/CMakeFiles/tfmfsk.dir/rule + +# Convenience name for target. +tfmfsk: unittest/CMakeFiles/tfmfsk.dir/rule + +.PHONY : tfmfsk + +# fast build rule for target. +tfmfsk/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tfmfsk.dir/build.make unittest/CMakeFiles/tfmfsk.dir/build +.PHONY : tfmfsk/fast + +# Convenience name for target. +unittest/CMakeFiles/function_trace.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 unittest/CMakeFiles/function_trace.dir/rule +.PHONY : unittest/CMakeFiles/function_trace.dir/rule + +# Convenience name for target. +function_trace: unittest/CMakeFiles/function_trace.dir/rule + +.PHONY : function_trace + +# fast build rule for target. +function_trace/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/function_trace.dir/build.make unittest/CMakeFiles/function_trace.dir/build +.PHONY : function_trace/fast + +# Convenience name for target. +unittest/CMakeFiles/tnewamp1.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 unittest/CMakeFiles/tnewamp1.dir/rule +.PHONY : unittest/CMakeFiles/tnewamp1.dir/rule + +# Convenience name for target. +tnewamp1: unittest/CMakeFiles/tnewamp1.dir/rule + +.PHONY : tnewamp1 + +# fast build rule for target. +tnewamp1/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tnewamp1.dir/build.make unittest/CMakeFiles/tnewamp1.dir/build +.PHONY : tnewamp1/fast + +# Convenience name for target. +unittest/CMakeFiles/compare_ints.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 unittest/CMakeFiles/compare_ints.dir/rule +.PHONY : unittest/CMakeFiles/compare_ints.dir/rule + +# Convenience name for target. +compare_ints: unittest/CMakeFiles/compare_ints.dir/rule + +.PHONY : compare_ints + +# fast build rule for target. +compare_ints/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/compare_ints.dir/build.make unittest/CMakeFiles/compare_ints.dir/build +.PHONY : compare_ints/fast + +# Convenience name for target. +unittest/CMakeFiles/tst_codec2_fft_init.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 unittest/CMakeFiles/tst_codec2_fft_init.dir/rule +.PHONY : unittest/CMakeFiles/tst_codec2_fft_init.dir/rule + +# Convenience name for target. +tst_codec2_fft_init: unittest/CMakeFiles/tst_codec2_fft_init.dir/rule + +.PHONY : tst_codec2_fft_init + +# fast build rule for target. +tst_codec2_fft_init/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tst_codec2_fft_init.dir/build.make unittest/CMakeFiles/tst_codec2_fft_init.dir/build +.PHONY : tst_codec2_fft_init/fast + +# Convenience name for target. +unittest/CMakeFiles/compare_floats.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 unittest/CMakeFiles/compare_floats.dir/rule +.PHONY : unittest/CMakeFiles/compare_floats.dir/rule + +# Convenience name for target. +compare_floats: unittest/CMakeFiles/compare_floats.dir/rule + +.PHONY : compare_floats + +# fast build rule for target. +compare_floats/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/compare_floats.dir/build.make unittest/CMakeFiles/compare_floats.dir/build +.PHONY : compare_floats/fast + +# Convenience name for target. +unittest/CMakeFiles/test_phi0.dir/rule: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f CMakeFiles/Makefile2 unittest/CMakeFiles/test_phi0.dir/rule +.PHONY : unittest/CMakeFiles/test_phi0.dir/rule + +# Convenience name for target. +test_phi0: unittest/CMakeFiles/test_phi0.dir/rule + +.PHONY : test_phi0 + +# fast build rule for target. +test_phi0/fast: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/test_phi0.dir/build.make unittest/CMakeFiles/test_phi0.dir/build +.PHONY : test_phi0/fast + +__/src/HRA_112_112.o: __/src/HRA_112_112.c.o + +.PHONY : __/src/HRA_112_112.o + +# target to build an object file +__/src/HRA_112_112.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tofdm.dir/build.make unittest/CMakeFiles/tofdm.dir/__/src/HRA_112_112.c.o +.PHONY : __/src/HRA_112_112.c.o + +__/src/HRA_112_112.i: __/src/HRA_112_112.c.i + +.PHONY : __/src/HRA_112_112.i + +# target to preprocess a source file +__/src/HRA_112_112.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tofdm.dir/build.make unittest/CMakeFiles/tofdm.dir/__/src/HRA_112_112.c.i +.PHONY : __/src/HRA_112_112.c.i + +__/src/HRA_112_112.s: __/src/HRA_112_112.c.s + +.PHONY : __/src/HRA_112_112.s + +# target to generate assembly for a file +__/src/HRA_112_112.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tofdm.dir/build.make unittest/CMakeFiles/tofdm.dir/__/src/HRA_112_112.c.s +.PHONY : __/src/HRA_112_112.c.s + +__/src/codec2_fifo.o: __/src/codec2_fifo.c.o + +.PHONY : __/src/codec2_fifo.o + +# target to build an object file +__/src/codec2_fifo.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tfifo.dir/build.make unittest/CMakeFiles/tfifo.dir/__/src/codec2_fifo.c.o +.PHONY : __/src/codec2_fifo.c.o + +__/src/codec2_fifo.i: __/src/codec2_fifo.c.i + +.PHONY : __/src/codec2_fifo.i + +# target to preprocess a source file +__/src/codec2_fifo.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tfifo.dir/build.make unittest/CMakeFiles/tfifo.dir/__/src/codec2_fifo.c.i +.PHONY : __/src/codec2_fifo.c.i + +__/src/codec2_fifo.s: __/src/codec2_fifo.c.s + +.PHONY : __/src/codec2_fifo.s + +# target to generate assembly for a file +__/src/codec2_fifo.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tfifo.dir/build.make unittest/CMakeFiles/tfifo.dir/__/src/codec2_fifo.c.s +.PHONY : __/src/codec2_fifo.c.s + +__/src/cohpsk.o: __/src/cohpsk.c.o + +.PHONY : __/src/cohpsk.o + +# target to build an object file +__/src/cohpsk.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tcohpsk.dir/build.make unittest/CMakeFiles/tcohpsk.dir/__/src/cohpsk.c.o +.PHONY : __/src/cohpsk.c.o + +__/src/cohpsk.i: __/src/cohpsk.c.i + +.PHONY : __/src/cohpsk.i + +# target to preprocess a source file +__/src/cohpsk.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tcohpsk.dir/build.make unittest/CMakeFiles/tcohpsk.dir/__/src/cohpsk.c.i +.PHONY : __/src/cohpsk.c.i + +__/src/cohpsk.s: __/src/cohpsk.c.s + +.PHONY : __/src/cohpsk.s + +# target to generate assembly for a file +__/src/cohpsk.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tcohpsk.dir/build.make unittest/CMakeFiles/tcohpsk.dir/__/src/cohpsk.c.s +.PHONY : __/src/cohpsk.c.s + +__/src/dump.o: __/src/dump.c.o + +.PHONY : __/src/dump.o + +# target to build an object file +__/src/dump.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tnewamp1.dir/build.make unittest/CMakeFiles/tnewamp1.dir/__/src/dump.c.o +.PHONY : __/src/dump.c.o + +__/src/dump.i: __/src/dump.c.i + +.PHONY : __/src/dump.i + +# target to preprocess a source file +__/src/dump.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tnewamp1.dir/build.make unittest/CMakeFiles/tnewamp1.dir/__/src/dump.c.i +.PHONY : __/src/dump.c.i + +__/src/dump.s: __/src/dump.c.s + +.PHONY : __/src/dump.s + +# target to generate assembly for a file +__/src/dump.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tnewamp1.dir/build.make unittest/CMakeFiles/tnewamp1.dir/__/src/dump.c.s +.PHONY : __/src/dump.c.s + +__/src/fdmdv.o: __/src/fdmdv.c.o + +.PHONY : __/src/fdmdv.o + +# target to build an object file +__/src/fdmdv.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tfdmdv.dir/build.make unittest/CMakeFiles/tfdmdv.dir/__/src/fdmdv.c.o +.PHONY : __/src/fdmdv.c.o + +__/src/fdmdv.i: __/src/fdmdv.c.i + +.PHONY : __/src/fdmdv.i + +# target to preprocess a source file +__/src/fdmdv.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tfdmdv.dir/build.make unittest/CMakeFiles/tfdmdv.dir/__/src/fdmdv.c.i +.PHONY : __/src/fdmdv.c.i + +__/src/fdmdv.s: __/src/fdmdv.c.s + +.PHONY : __/src/fdmdv.s + +# target to generate assembly for a file +__/src/fdmdv.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tfdmdv.dir/build.make unittest/CMakeFiles/tfdmdv.dir/__/src/fdmdv.c.s +.PHONY : __/src/fdmdv.c.s + +__/src/filter.o: __/src/filter.c.o + +.PHONY : __/src/filter.o + +# target to build an object file +__/src/filter.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tofdm.dir/build.make unittest/CMakeFiles/tofdm.dir/__/src/filter.c.o + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/ofdm_stack.dir/build.make unittest/CMakeFiles/ofdm_stack.dir/__/src/filter.c.o + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/ofdm_mem.dir/build.make unittest/CMakeFiles/ofdm_mem.dir/__/src/filter.c.o +.PHONY : __/src/filter.c.o + +__/src/filter.i: __/src/filter.c.i + +.PHONY : __/src/filter.i + +# target to preprocess a source file +__/src/filter.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tofdm.dir/build.make unittest/CMakeFiles/tofdm.dir/__/src/filter.c.i + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/ofdm_stack.dir/build.make unittest/CMakeFiles/ofdm_stack.dir/__/src/filter.c.i + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/ofdm_mem.dir/build.make unittest/CMakeFiles/ofdm_mem.dir/__/src/filter.c.i +.PHONY : __/src/filter.c.i + +__/src/filter.s: __/src/filter.c.s + +.PHONY : __/src/filter.s + +# target to generate assembly for a file +__/src/filter.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tofdm.dir/build.make unittest/CMakeFiles/tofdm.dir/__/src/filter.c.s + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/ofdm_stack.dir/build.make unittest/CMakeFiles/ofdm_stack.dir/__/src/filter.c.s + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/ofdm_mem.dir/build.make unittest/CMakeFiles/ofdm_mem.dir/__/src/filter.c.s +.PHONY : __/src/filter.c.s + +__/src/freedv_data_channel.o: __/src/freedv_data_channel.c.o + +.PHONY : __/src/freedv_data_channel.o + +# target to build an object file +__/src/freedv_data_channel.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tfreedv_data_channel.dir/build.make unittest/CMakeFiles/tfreedv_data_channel.dir/__/src/freedv_data_channel.c.o +.PHONY : __/src/freedv_data_channel.c.o + +__/src/freedv_data_channel.i: __/src/freedv_data_channel.c.i + +.PHONY : __/src/freedv_data_channel.i + +# target to preprocess a source file +__/src/freedv_data_channel.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tfreedv_data_channel.dir/build.make unittest/CMakeFiles/tfreedv_data_channel.dir/__/src/freedv_data_channel.c.i +.PHONY : __/src/freedv_data_channel.c.i + +__/src/freedv_data_channel.s: __/src/freedv_data_channel.c.s + +.PHONY : __/src/freedv_data_channel.s + +# target to generate assembly for a file +__/src/freedv_data_channel.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tfreedv_data_channel.dir/build.make unittest/CMakeFiles/tfreedv_data_channel.dir/__/src/freedv_data_channel.c.s +.PHONY : __/src/freedv_data_channel.c.s + +__/src/kiss_fft.o: __/src/kiss_fft.c.o + +.PHONY : __/src/kiss_fft.o + +# target to build an object file +__/src/kiss_fft.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tofdm.dir/build.make unittest/CMakeFiles/tofdm.dir/__/src/kiss_fft.c.o + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/ofdm_stack.dir/build.make unittest/CMakeFiles/ofdm_stack.dir/__/src/kiss_fft.c.o + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tfsk.dir/build.make unittest/CMakeFiles/tfsk.dir/__/src/kiss_fft.c.o + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tfdmdv.dir/build.make unittest/CMakeFiles/tfdmdv.dir/__/src/kiss_fft.c.o + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/ofdm_mem.dir/build.make unittest/CMakeFiles/ofdm_mem.dir/__/src/kiss_fft.c.o + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tnewamp1.dir/build.make unittest/CMakeFiles/tnewamp1.dir/__/src/kiss_fft.c.o +.PHONY : __/src/kiss_fft.c.o + +__/src/kiss_fft.i: __/src/kiss_fft.c.i + +.PHONY : __/src/kiss_fft.i + +# target to preprocess a source file +__/src/kiss_fft.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tofdm.dir/build.make unittest/CMakeFiles/tofdm.dir/__/src/kiss_fft.c.i + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/ofdm_stack.dir/build.make unittest/CMakeFiles/ofdm_stack.dir/__/src/kiss_fft.c.i + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tfsk.dir/build.make unittest/CMakeFiles/tfsk.dir/__/src/kiss_fft.c.i + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tfdmdv.dir/build.make unittest/CMakeFiles/tfdmdv.dir/__/src/kiss_fft.c.i + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/ofdm_mem.dir/build.make unittest/CMakeFiles/ofdm_mem.dir/__/src/kiss_fft.c.i + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tnewamp1.dir/build.make unittest/CMakeFiles/tnewamp1.dir/__/src/kiss_fft.c.i +.PHONY : __/src/kiss_fft.c.i + +__/src/kiss_fft.s: __/src/kiss_fft.c.s + +.PHONY : __/src/kiss_fft.s + +# target to generate assembly for a file +__/src/kiss_fft.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tofdm.dir/build.make unittest/CMakeFiles/tofdm.dir/__/src/kiss_fft.c.s + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/ofdm_stack.dir/build.make unittest/CMakeFiles/ofdm_stack.dir/__/src/kiss_fft.c.s + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tfsk.dir/build.make unittest/CMakeFiles/tfsk.dir/__/src/kiss_fft.c.s + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tfdmdv.dir/build.make unittest/CMakeFiles/tfdmdv.dir/__/src/kiss_fft.c.s + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/ofdm_mem.dir/build.make unittest/CMakeFiles/ofdm_mem.dir/__/src/kiss_fft.c.s + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tnewamp1.dir/build.make unittest/CMakeFiles/tnewamp1.dir/__/src/kiss_fft.c.s +.PHONY : __/src/kiss_fft.c.s + +__/src/kiss_fftr.o: __/src/kiss_fftr.c.o + +.PHONY : __/src/kiss_fftr.o + +# target to build an object file +__/src/kiss_fftr.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tfsk.dir/build.make unittest/CMakeFiles/tfsk.dir/__/src/kiss_fftr.c.o +.PHONY : __/src/kiss_fftr.c.o + +__/src/kiss_fftr.i: __/src/kiss_fftr.c.i + +.PHONY : __/src/kiss_fftr.i + +# target to preprocess a source file +__/src/kiss_fftr.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tfsk.dir/build.make unittest/CMakeFiles/tfsk.dir/__/src/kiss_fftr.c.i +.PHONY : __/src/kiss_fftr.c.i + +__/src/kiss_fftr.s: __/src/kiss_fftr.c.s + +.PHONY : __/src/kiss_fftr.s + +# target to generate assembly for a file +__/src/kiss_fftr.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tfsk.dir/build.make unittest/CMakeFiles/tfsk.dir/__/src/kiss_fftr.c.s +.PHONY : __/src/kiss_fftr.c.s + +__/src/mbest.o: __/src/mbest.c.o + +.PHONY : __/src/mbest.o + +# target to build an object file +__/src/mbest.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tnewamp1.dir/build.make unittest/CMakeFiles/tnewamp1.dir/__/src/mbest.c.o +.PHONY : __/src/mbest.c.o + +__/src/mbest.i: __/src/mbest.c.i + +.PHONY : __/src/mbest.i + +# target to preprocess a source file +__/src/mbest.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tnewamp1.dir/build.make unittest/CMakeFiles/tnewamp1.dir/__/src/mbest.c.i +.PHONY : __/src/mbest.c.i + +__/src/mbest.s: __/src/mbest.c.s + +.PHONY : __/src/mbest.s + +# target to generate assembly for a file +__/src/mbest.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tnewamp1.dir/build.make unittest/CMakeFiles/tnewamp1.dir/__/src/mbest.c.s +.PHONY : __/src/mbest.c.s + +__/src/modem_probe.o: __/src/modem_probe.c.o + +.PHONY : __/src/modem_probe.o + +# target to build an object file +__/src/modem_probe.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tofdm.dir/build.make unittest/CMakeFiles/tofdm.dir/__/src/modem_probe.c.o + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/ofdm_stack.dir/build.make unittest/CMakeFiles/ofdm_stack.dir/__/src/modem_probe.c.o + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tfsk.dir/build.make unittest/CMakeFiles/tfsk.dir/__/src/modem_probe.c.o + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/ofdm_mem.dir/build.make unittest/CMakeFiles/ofdm_mem.dir/__/src/modem_probe.c.o + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tfmfsk.dir/build.make unittest/CMakeFiles/tfmfsk.dir/__/src/modem_probe.c.o +.PHONY : __/src/modem_probe.c.o + +__/src/modem_probe.i: __/src/modem_probe.c.i + +.PHONY : __/src/modem_probe.i + +# target to preprocess a source file +__/src/modem_probe.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tofdm.dir/build.make unittest/CMakeFiles/tofdm.dir/__/src/modem_probe.c.i + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/ofdm_stack.dir/build.make unittest/CMakeFiles/ofdm_stack.dir/__/src/modem_probe.c.i + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tfsk.dir/build.make unittest/CMakeFiles/tfsk.dir/__/src/modem_probe.c.i + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/ofdm_mem.dir/build.make unittest/CMakeFiles/ofdm_mem.dir/__/src/modem_probe.c.i + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tfmfsk.dir/build.make unittest/CMakeFiles/tfmfsk.dir/__/src/modem_probe.c.i +.PHONY : __/src/modem_probe.c.i + +__/src/modem_probe.s: __/src/modem_probe.c.s + +.PHONY : __/src/modem_probe.s + +# target to generate assembly for a file +__/src/modem_probe.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tofdm.dir/build.make unittest/CMakeFiles/tofdm.dir/__/src/modem_probe.c.s + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/ofdm_stack.dir/build.make unittest/CMakeFiles/ofdm_stack.dir/__/src/modem_probe.c.s + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tfsk.dir/build.make unittest/CMakeFiles/tfsk.dir/__/src/modem_probe.c.s + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/ofdm_mem.dir/build.make unittest/CMakeFiles/ofdm_mem.dir/__/src/modem_probe.c.s + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tfmfsk.dir/build.make unittest/CMakeFiles/tfmfsk.dir/__/src/modem_probe.c.s +.PHONY : __/src/modem_probe.c.s + +__/src/mpdecode_core.o: __/src/mpdecode_core.c.o + +.PHONY : __/src/mpdecode_core.o + +# target to build an object file +__/src/mpdecode_core.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tofdm.dir/build.make unittest/CMakeFiles/tofdm.dir/__/src/mpdecode_core.c.o + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/ofdm_stack.dir/build.make unittest/CMakeFiles/ofdm_stack.dir/__/src/mpdecode_core.c.o + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/ofdm_mem.dir/build.make unittest/CMakeFiles/ofdm_mem.dir/__/src/mpdecode_core.c.o +.PHONY : __/src/mpdecode_core.c.o + +__/src/mpdecode_core.i: __/src/mpdecode_core.c.i + +.PHONY : __/src/mpdecode_core.i + +# target to preprocess a source file +__/src/mpdecode_core.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tofdm.dir/build.make unittest/CMakeFiles/tofdm.dir/__/src/mpdecode_core.c.i + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/ofdm_stack.dir/build.make unittest/CMakeFiles/ofdm_stack.dir/__/src/mpdecode_core.c.i + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/ofdm_mem.dir/build.make unittest/CMakeFiles/ofdm_mem.dir/__/src/mpdecode_core.c.i +.PHONY : __/src/mpdecode_core.c.i + +__/src/mpdecode_core.s: __/src/mpdecode_core.c.s + +.PHONY : __/src/mpdecode_core.s + +# target to generate assembly for a file +__/src/mpdecode_core.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tofdm.dir/build.make unittest/CMakeFiles/tofdm.dir/__/src/mpdecode_core.c.s + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/ofdm_stack.dir/build.make unittest/CMakeFiles/ofdm_stack.dir/__/src/mpdecode_core.c.s + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/ofdm_mem.dir/build.make unittest/CMakeFiles/ofdm_mem.dir/__/src/mpdecode_core.c.s +.PHONY : __/src/mpdecode_core.c.s + +__/src/newamp1.o: __/src/newamp1.c.o + +.PHONY : __/src/newamp1.o + +# target to build an object file +__/src/newamp1.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tnewamp1.dir/build.make unittest/CMakeFiles/tnewamp1.dir/__/src/newamp1.c.o +.PHONY : __/src/newamp1.c.o + +__/src/newamp1.i: __/src/newamp1.c.i + +.PHONY : __/src/newamp1.i + +# target to preprocess a source file +__/src/newamp1.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tnewamp1.dir/build.make unittest/CMakeFiles/tnewamp1.dir/__/src/newamp1.c.i +.PHONY : __/src/newamp1.c.i + +__/src/newamp1.s: __/src/newamp1.c.s + +.PHONY : __/src/newamp1.s + +# target to generate assembly for a file +__/src/newamp1.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tnewamp1.dir/build.make unittest/CMakeFiles/tnewamp1.dir/__/src/newamp1.c.s +.PHONY : __/src/newamp1.c.s + +__/src/nlp.o: __/src/nlp.c.o + +.PHONY : __/src/nlp.o + +# target to build an object file +__/src/nlp.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tnewamp1.dir/build.make unittest/CMakeFiles/tnewamp1.dir/__/src/nlp.c.o +.PHONY : __/src/nlp.c.o + +__/src/nlp.i: __/src/nlp.c.i + +.PHONY : __/src/nlp.i + +# target to preprocess a source file +__/src/nlp.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tnewamp1.dir/build.make unittest/CMakeFiles/tnewamp1.dir/__/src/nlp.c.i +.PHONY : __/src/nlp.c.i + +__/src/nlp.s: __/src/nlp.c.s + +.PHONY : __/src/nlp.s + +# target to generate assembly for a file +__/src/nlp.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tnewamp1.dir/build.make unittest/CMakeFiles/tnewamp1.dir/__/src/nlp.c.s +.PHONY : __/src/nlp.c.s + +__/src/octave.o: __/src/octave.c.o + +.PHONY : __/src/octave.o + +# target to build an object file +__/src/octave.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tofdm.dir/build.make unittest/CMakeFiles/tofdm.dir/__/src/octave.c.o + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/ofdm_stack.dir/build.make unittest/CMakeFiles/ofdm_stack.dir/__/src/octave.c.o + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tfsk.dir/build.make unittest/CMakeFiles/tfsk.dir/__/src/octave.c.o + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tfdmdv.dir/build.make unittest/CMakeFiles/tfdmdv.dir/__/src/octave.c.o + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tcohpsk.dir/build.make unittest/CMakeFiles/tcohpsk.dir/__/src/octave.c.o + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/ofdm_mem.dir/build.make unittest/CMakeFiles/ofdm_mem.dir/__/src/octave.c.o + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tfmfsk.dir/build.make unittest/CMakeFiles/tfmfsk.dir/__/src/octave.c.o + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tnewamp1.dir/build.make unittest/CMakeFiles/tnewamp1.dir/__/src/octave.c.o +.PHONY : __/src/octave.c.o + +__/src/octave.i: __/src/octave.c.i + +.PHONY : __/src/octave.i + +# target to preprocess a source file +__/src/octave.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tofdm.dir/build.make unittest/CMakeFiles/tofdm.dir/__/src/octave.c.i + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/ofdm_stack.dir/build.make unittest/CMakeFiles/ofdm_stack.dir/__/src/octave.c.i + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tfsk.dir/build.make unittest/CMakeFiles/tfsk.dir/__/src/octave.c.i + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tfdmdv.dir/build.make unittest/CMakeFiles/tfdmdv.dir/__/src/octave.c.i + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tcohpsk.dir/build.make unittest/CMakeFiles/tcohpsk.dir/__/src/octave.c.i + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/ofdm_mem.dir/build.make unittest/CMakeFiles/ofdm_mem.dir/__/src/octave.c.i + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tfmfsk.dir/build.make unittest/CMakeFiles/tfmfsk.dir/__/src/octave.c.i + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tnewamp1.dir/build.make unittest/CMakeFiles/tnewamp1.dir/__/src/octave.c.i +.PHONY : __/src/octave.c.i + +__/src/octave.s: __/src/octave.c.s + +.PHONY : __/src/octave.s + +# target to generate assembly for a file +__/src/octave.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tofdm.dir/build.make unittest/CMakeFiles/tofdm.dir/__/src/octave.c.s + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/ofdm_stack.dir/build.make unittest/CMakeFiles/ofdm_stack.dir/__/src/octave.c.s + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tfsk.dir/build.make unittest/CMakeFiles/tfsk.dir/__/src/octave.c.s + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tfdmdv.dir/build.make unittest/CMakeFiles/tfdmdv.dir/__/src/octave.c.s + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tcohpsk.dir/build.make unittest/CMakeFiles/tcohpsk.dir/__/src/octave.c.s + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/ofdm_mem.dir/build.make unittest/CMakeFiles/ofdm_mem.dir/__/src/octave.c.s + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tfmfsk.dir/build.make unittest/CMakeFiles/tfmfsk.dir/__/src/octave.c.s + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tnewamp1.dir/build.make unittest/CMakeFiles/tnewamp1.dir/__/src/octave.c.s +.PHONY : __/src/octave.c.s + +__/src/ofdm.o: __/src/ofdm.c.o + +.PHONY : __/src/ofdm.o + +# target to build an object file +__/src/ofdm.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tofdm.dir/build.make unittest/CMakeFiles/tofdm.dir/__/src/ofdm.c.o + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/ofdm_stack.dir/build.make unittest/CMakeFiles/ofdm_stack.dir/__/src/ofdm.c.o + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/ofdm_mem.dir/build.make unittest/CMakeFiles/ofdm_mem.dir/__/src/ofdm.c.o +.PHONY : __/src/ofdm.c.o + +__/src/ofdm.i: __/src/ofdm.c.i + +.PHONY : __/src/ofdm.i + +# target to preprocess a source file +__/src/ofdm.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tofdm.dir/build.make unittest/CMakeFiles/tofdm.dir/__/src/ofdm.c.i + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/ofdm_stack.dir/build.make unittest/CMakeFiles/ofdm_stack.dir/__/src/ofdm.c.i + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/ofdm_mem.dir/build.make unittest/CMakeFiles/ofdm_mem.dir/__/src/ofdm.c.i +.PHONY : __/src/ofdm.c.i + +__/src/ofdm.s: __/src/ofdm.c.s + +.PHONY : __/src/ofdm.s + +# target to generate assembly for a file +__/src/ofdm.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tofdm.dir/build.make unittest/CMakeFiles/tofdm.dir/__/src/ofdm.c.s + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/ofdm_stack.dir/build.make unittest/CMakeFiles/ofdm_stack.dir/__/src/ofdm.c.s + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/ofdm_mem.dir/build.make unittest/CMakeFiles/ofdm_mem.dir/__/src/ofdm.c.s +.PHONY : __/src/ofdm.c.s + +__/src/phi0.o: __/src/phi0.c.o + +.PHONY : __/src/phi0.o + +# target to build an object file +__/src/phi0.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tofdm.dir/build.make unittest/CMakeFiles/tofdm.dir/__/src/phi0.c.o + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/ofdm_stack.dir/build.make unittest/CMakeFiles/ofdm_stack.dir/__/src/phi0.c.o + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/ofdm_mem.dir/build.make unittest/CMakeFiles/ofdm_mem.dir/__/src/phi0.c.o + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/test_phi0.dir/build.make unittest/CMakeFiles/test_phi0.dir/__/src/phi0.c.o +.PHONY : __/src/phi0.c.o + +__/src/phi0.i: __/src/phi0.c.i + +.PHONY : __/src/phi0.i + +# target to preprocess a source file +__/src/phi0.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tofdm.dir/build.make unittest/CMakeFiles/tofdm.dir/__/src/phi0.c.i + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/ofdm_stack.dir/build.make unittest/CMakeFiles/ofdm_stack.dir/__/src/phi0.c.i + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/ofdm_mem.dir/build.make unittest/CMakeFiles/ofdm_mem.dir/__/src/phi0.c.i + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/test_phi0.dir/build.make unittest/CMakeFiles/test_phi0.dir/__/src/phi0.c.i +.PHONY : __/src/phi0.c.i + +__/src/phi0.s: __/src/phi0.c.s + +.PHONY : __/src/phi0.s + +# target to generate assembly for a file +__/src/phi0.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tofdm.dir/build.make unittest/CMakeFiles/tofdm.dir/__/src/phi0.c.s + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/ofdm_stack.dir/build.make unittest/CMakeFiles/ofdm_stack.dir/__/src/phi0.c.s + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/ofdm_mem.dir/build.make unittest/CMakeFiles/ofdm_mem.dir/__/src/phi0.c.s + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/test_phi0.dir/build.make unittest/CMakeFiles/test_phi0.dir/__/src/phi0.c.s +.PHONY : __/src/phi0.c.s + +__/src/quantise.o: __/src/quantise.c.o + +.PHONY : __/src/quantise.o + +# target to build an object file +__/src/quantise.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tnewamp1.dir/build.make unittest/CMakeFiles/tnewamp1.dir/__/src/quantise.c.o +.PHONY : __/src/quantise.c.o + +__/src/quantise.i: __/src/quantise.c.i + +.PHONY : __/src/quantise.i + +# target to preprocess a source file +__/src/quantise.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tnewamp1.dir/build.make unittest/CMakeFiles/tnewamp1.dir/__/src/quantise.c.i +.PHONY : __/src/quantise.c.i + +__/src/quantise.s: __/src/quantise.c.s + +.PHONY : __/src/quantise.s + +# target to generate assembly for a file +__/src/quantise.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tnewamp1.dir/build.make unittest/CMakeFiles/tnewamp1.dir/__/src/quantise.c.s +.PHONY : __/src/quantise.c.s + +__/src/sine.o: __/src/sine.c.o + +.PHONY : __/src/sine.o + +# target to build an object file +__/src/sine.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tnewamp1.dir/build.make unittest/CMakeFiles/tnewamp1.dir/__/src/sine.c.o +.PHONY : __/src/sine.c.o + +__/src/sine.i: __/src/sine.c.i + +.PHONY : __/src/sine.i + +# target to preprocess a source file +__/src/sine.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tnewamp1.dir/build.make unittest/CMakeFiles/tnewamp1.dir/__/src/sine.c.i +.PHONY : __/src/sine.c.i + +__/src/sine.s: __/src/sine.c.s + +.PHONY : __/src/sine.s + +# target to generate assembly for a file +__/src/sine.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tnewamp1.dir/build.make unittest/CMakeFiles/tnewamp1.dir/__/src/sine.c.s +.PHONY : __/src/sine.c.s + +compare_floats.o: compare_floats.c.o + +.PHONY : compare_floats.o + +# target to build an object file +compare_floats.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/compare_floats.dir/build.make unittest/CMakeFiles/compare_floats.dir/compare_floats.c.o +.PHONY : compare_floats.c.o + +compare_floats.i: compare_floats.c.i + +.PHONY : compare_floats.i + +# target to preprocess a source file +compare_floats.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/compare_floats.dir/build.make unittest/CMakeFiles/compare_floats.dir/compare_floats.c.i +.PHONY : compare_floats.c.i + +compare_floats.s: compare_floats.c.s + +.PHONY : compare_floats.s + +# target to generate assembly for a file +compare_floats.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/compare_floats.dir/build.make unittest/CMakeFiles/compare_floats.dir/compare_floats.c.s +.PHONY : compare_floats.c.s + +compare_ints.o: compare_ints.c.o + +.PHONY : compare_ints.o + +# target to build an object file +compare_ints.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/compare_ints.dir/build.make unittest/CMakeFiles/compare_ints.dir/compare_ints.c.o +.PHONY : compare_ints.c.o + +compare_ints.i: compare_ints.c.i + +.PHONY : compare_ints.i + +# target to preprocess a source file +compare_ints.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/compare_ints.dir/build.make unittest/CMakeFiles/compare_ints.dir/compare_ints.c.i +.PHONY : compare_ints.c.i + +compare_ints.s: compare_ints.c.s + +.PHONY : compare_ints.s + +# target to generate assembly for a file +compare_ints.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/compare_ints.dir/build.make unittest/CMakeFiles/compare_ints.dir/compare_ints.c.s +.PHONY : compare_ints.c.s + +fdmdv_mem.o: fdmdv_mem.c.o + +.PHONY : fdmdv_mem.o + +# target to build an object file +fdmdv_mem.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/fdmdv_mem.dir/build.make unittest/CMakeFiles/fdmdv_mem.dir/fdmdv_mem.c.o +.PHONY : fdmdv_mem.c.o + +fdmdv_mem.i: fdmdv_mem.c.i + +.PHONY : fdmdv_mem.i + +# target to preprocess a source file +fdmdv_mem.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/fdmdv_mem.dir/build.make unittest/CMakeFiles/fdmdv_mem.dir/fdmdv_mem.c.i +.PHONY : fdmdv_mem.c.i + +fdmdv_mem.s: fdmdv_mem.c.s + +.PHONY : fdmdv_mem.s + +# target to generate assembly for a file +fdmdv_mem.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/fdmdv_mem.dir/build.make unittest/CMakeFiles/fdmdv_mem.dir/fdmdv_mem.c.s +.PHONY : fdmdv_mem.c.s + +function_trace.o: function_trace.c.o + +.PHONY : function_trace.o + +# target to build an object file +function_trace.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/function_trace.dir/build.make unittest/CMakeFiles/function_trace.dir/function_trace.c.o +.PHONY : function_trace.c.o + +function_trace.i: function_trace.c.i + +.PHONY : function_trace.i + +# target to preprocess a source file +function_trace.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/function_trace.dir/build.make unittest/CMakeFiles/function_trace.dir/function_trace.c.i +.PHONY : function_trace.c.i + +function_trace.s: function_trace.c.s + +.PHONY : function_trace.s + +# target to generate assembly for a file +function_trace.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/function_trace.dir/build.make unittest/CMakeFiles/function_trace.dir/function_trace.c.s +.PHONY : function_trace.c.s + +ofdm_mem.o: ofdm_mem.c.o + +.PHONY : ofdm_mem.o + +# target to build an object file +ofdm_mem.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/ofdm_mem.dir/build.make unittest/CMakeFiles/ofdm_mem.dir/ofdm_mem.c.o +.PHONY : ofdm_mem.c.o + +ofdm_mem.i: ofdm_mem.c.i + +.PHONY : ofdm_mem.i + +# target to preprocess a source file +ofdm_mem.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/ofdm_mem.dir/build.make unittest/CMakeFiles/ofdm_mem.dir/ofdm_mem.c.i +.PHONY : ofdm_mem.c.i + +ofdm_mem.s: ofdm_mem.c.s + +.PHONY : ofdm_mem.s + +# target to generate assembly for a file +ofdm_mem.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/ofdm_mem.dir/build.make unittest/CMakeFiles/ofdm_mem.dir/ofdm_mem.c.s +.PHONY : ofdm_mem.c.s + +ofdm_stack.o: ofdm_stack.c.o + +.PHONY : ofdm_stack.o + +# target to build an object file +ofdm_stack.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/ofdm_stack.dir/build.make unittest/CMakeFiles/ofdm_stack.dir/ofdm_stack.c.o +.PHONY : ofdm_stack.c.o + +ofdm_stack.i: ofdm_stack.c.i + +.PHONY : ofdm_stack.i + +# target to preprocess a source file +ofdm_stack.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/ofdm_stack.dir/build.make unittest/CMakeFiles/ofdm_stack.dir/ofdm_stack.c.i +.PHONY : ofdm_stack.c.i + +ofdm_stack.s: ofdm_stack.c.s + +.PHONY : ofdm_stack.s + +# target to generate assembly for a file +ofdm_stack.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/ofdm_stack.dir/build.make unittest/CMakeFiles/ofdm_stack.dir/ofdm_stack.c.s +.PHONY : ofdm_stack.c.s + +tcohpsk.o: tcohpsk.c.o + +.PHONY : tcohpsk.o + +# target to build an object file +tcohpsk.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tcohpsk.dir/build.make unittest/CMakeFiles/tcohpsk.dir/tcohpsk.c.o +.PHONY : tcohpsk.c.o + +tcohpsk.i: tcohpsk.c.i + +.PHONY : tcohpsk.i + +# target to preprocess a source file +tcohpsk.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tcohpsk.dir/build.make unittest/CMakeFiles/tcohpsk.dir/tcohpsk.c.i +.PHONY : tcohpsk.c.i + +tcohpsk.s: tcohpsk.c.s + +.PHONY : tcohpsk.s + +# target to generate assembly for a file +tcohpsk.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tcohpsk.dir/build.make unittest/CMakeFiles/tcohpsk.dir/tcohpsk.c.s +.PHONY : tcohpsk.c.s + +tdeframer.o: tdeframer.c.o + +.PHONY : tdeframer.o + +# target to build an object file +tdeframer.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tdeframer.dir/build.make unittest/CMakeFiles/tdeframer.dir/tdeframer.c.o +.PHONY : tdeframer.c.o + +tdeframer.i: tdeframer.c.i + +.PHONY : tdeframer.i + +# target to preprocess a source file +tdeframer.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tdeframer.dir/build.make unittest/CMakeFiles/tdeframer.dir/tdeframer.c.i +.PHONY : tdeframer.c.i + +tdeframer.s: tdeframer.c.s + +.PHONY : tdeframer.s + +# target to generate assembly for a file +tdeframer.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tdeframer.dir/build.make unittest/CMakeFiles/tdeframer.dir/tdeframer.c.s +.PHONY : tdeframer.c.s + +test_phi0.o: test_phi0.c.o + +.PHONY : test_phi0.o + +# target to build an object file +test_phi0.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/test_phi0.dir/build.make unittest/CMakeFiles/test_phi0.dir/test_phi0.c.o +.PHONY : test_phi0.c.o + +test_phi0.i: test_phi0.c.i + +.PHONY : test_phi0.i + +# target to preprocess a source file +test_phi0.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/test_phi0.dir/build.make unittest/CMakeFiles/test_phi0.dir/test_phi0.c.i +.PHONY : test_phi0.c.i + +test_phi0.s: test_phi0.c.s + +.PHONY : test_phi0.s + +# target to generate assembly for a file +test_phi0.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/test_phi0.dir/build.make unittest/CMakeFiles/test_phi0.dir/test_phi0.c.s +.PHONY : test_phi0.c.s + +tfdmdv.o: tfdmdv.c.o + +.PHONY : tfdmdv.o + +# target to build an object file +tfdmdv.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tfdmdv.dir/build.make unittest/CMakeFiles/tfdmdv.dir/tfdmdv.c.o +.PHONY : tfdmdv.c.o + +tfdmdv.i: tfdmdv.c.i + +.PHONY : tfdmdv.i + +# target to preprocess a source file +tfdmdv.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tfdmdv.dir/build.make unittest/CMakeFiles/tfdmdv.dir/tfdmdv.c.i +.PHONY : tfdmdv.c.i + +tfdmdv.s: tfdmdv.c.s + +.PHONY : tfdmdv.s + +# target to generate assembly for a file +tfdmdv.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tfdmdv.dir/build.make unittest/CMakeFiles/tfdmdv.dir/tfdmdv.c.s +.PHONY : tfdmdv.c.s + +tfifo.o: tfifo.c.o + +.PHONY : tfifo.o + +# target to build an object file +tfifo.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tfifo.dir/build.make unittest/CMakeFiles/tfifo.dir/tfifo.c.o +.PHONY : tfifo.c.o + +tfifo.i: tfifo.c.i + +.PHONY : tfifo.i + +# target to preprocess a source file +tfifo.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tfifo.dir/build.make unittest/CMakeFiles/tfifo.dir/tfifo.c.i +.PHONY : tfifo.c.i + +tfifo.s: tfifo.c.s + +.PHONY : tfifo.s + +# target to generate assembly for a file +tfifo.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tfifo.dir/build.make unittest/CMakeFiles/tfifo.dir/tfifo.c.s +.PHONY : tfifo.c.s + +tfmfsk.o: tfmfsk.c.o + +.PHONY : tfmfsk.o + +# target to build an object file +tfmfsk.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tfmfsk.dir/build.make unittest/CMakeFiles/tfmfsk.dir/tfmfsk.c.o +.PHONY : tfmfsk.c.o + +tfmfsk.i: tfmfsk.c.i + +.PHONY : tfmfsk.i + +# target to preprocess a source file +tfmfsk.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tfmfsk.dir/build.make unittest/CMakeFiles/tfmfsk.dir/tfmfsk.c.i +.PHONY : tfmfsk.c.i + +tfmfsk.s: tfmfsk.c.s + +.PHONY : tfmfsk.s + +# target to generate assembly for a file +tfmfsk.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tfmfsk.dir/build.make unittest/CMakeFiles/tfmfsk.dir/tfmfsk.c.s +.PHONY : tfmfsk.c.s + +tfreedv_2400A_rawdata.o: tfreedv_2400A_rawdata.c.o + +.PHONY : tfreedv_2400A_rawdata.o + +# target to build an object file +tfreedv_2400A_rawdata.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/build.make unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/tfreedv_2400A_rawdata.c.o +.PHONY : tfreedv_2400A_rawdata.c.o + +tfreedv_2400A_rawdata.i: tfreedv_2400A_rawdata.c.i + +.PHONY : tfreedv_2400A_rawdata.i + +# target to preprocess a source file +tfreedv_2400A_rawdata.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/build.make unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/tfreedv_2400A_rawdata.c.i +.PHONY : tfreedv_2400A_rawdata.c.i + +tfreedv_2400A_rawdata.s: tfreedv_2400A_rawdata.c.s + +.PHONY : tfreedv_2400A_rawdata.s + +# target to generate assembly for a file +tfreedv_2400A_rawdata.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/build.make unittest/CMakeFiles/tfreedv_2400A_rawdata.dir/tfreedv_2400A_rawdata.c.s +.PHONY : tfreedv_2400A_rawdata.c.s + +tfreedv_2400B_rawdata.o: tfreedv_2400B_rawdata.c.o + +.PHONY : tfreedv_2400B_rawdata.o + +# target to build an object file +tfreedv_2400B_rawdata.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/build.make unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/tfreedv_2400B_rawdata.c.o +.PHONY : tfreedv_2400B_rawdata.c.o + +tfreedv_2400B_rawdata.i: tfreedv_2400B_rawdata.c.i + +.PHONY : tfreedv_2400B_rawdata.i + +# target to preprocess a source file +tfreedv_2400B_rawdata.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/build.make unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/tfreedv_2400B_rawdata.c.i +.PHONY : tfreedv_2400B_rawdata.c.i + +tfreedv_2400B_rawdata.s: tfreedv_2400B_rawdata.c.s + +.PHONY : tfreedv_2400B_rawdata.s + +# target to generate assembly for a file +tfreedv_2400B_rawdata.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/build.make unittest/CMakeFiles/tfreedv_2400B_rawdata.dir/tfreedv_2400B_rawdata.c.s +.PHONY : tfreedv_2400B_rawdata.c.s + +tfreedv_800XA_rawdata.o: tfreedv_800XA_rawdata.c.o + +.PHONY : tfreedv_800XA_rawdata.o + +# target to build an object file +tfreedv_800XA_rawdata.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/build.make unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/tfreedv_800XA_rawdata.c.o +.PHONY : tfreedv_800XA_rawdata.c.o + +tfreedv_800XA_rawdata.i: tfreedv_800XA_rawdata.c.i + +.PHONY : tfreedv_800XA_rawdata.i + +# target to preprocess a source file +tfreedv_800XA_rawdata.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/build.make unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/tfreedv_800XA_rawdata.c.i +.PHONY : tfreedv_800XA_rawdata.c.i + +tfreedv_800XA_rawdata.s: tfreedv_800XA_rawdata.c.s + +.PHONY : tfreedv_800XA_rawdata.s + +# target to generate assembly for a file +tfreedv_800XA_rawdata.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/build.make unittest/CMakeFiles/tfreedv_800XA_rawdata.dir/tfreedv_800XA_rawdata.c.s +.PHONY : tfreedv_800XA_rawdata.c.s + +tfreedv_data_channel.o: tfreedv_data_channel.c.o + +.PHONY : tfreedv_data_channel.o + +# target to build an object file +tfreedv_data_channel.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tfreedv_data_channel.dir/build.make unittest/CMakeFiles/tfreedv_data_channel.dir/tfreedv_data_channel.c.o +.PHONY : tfreedv_data_channel.c.o + +tfreedv_data_channel.i: tfreedv_data_channel.c.i + +.PHONY : tfreedv_data_channel.i + +# target to preprocess a source file +tfreedv_data_channel.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tfreedv_data_channel.dir/build.make unittest/CMakeFiles/tfreedv_data_channel.dir/tfreedv_data_channel.c.i +.PHONY : tfreedv_data_channel.c.i + +tfreedv_data_channel.s: tfreedv_data_channel.c.s + +.PHONY : tfreedv_data_channel.s + +# target to generate assembly for a file +tfreedv_data_channel.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tfreedv_data_channel.dir/build.make unittest/CMakeFiles/tfreedv_data_channel.dir/tfreedv_data_channel.c.s +.PHONY : tfreedv_data_channel.c.s + +tfsk.o: tfsk.c.o + +.PHONY : tfsk.o + +# target to build an object file +tfsk.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tfsk.dir/build.make unittest/CMakeFiles/tfsk.dir/tfsk.c.o +.PHONY : tfsk.c.o + +tfsk.i: tfsk.c.i + +.PHONY : tfsk.i + +# target to preprocess a source file +tfsk.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tfsk.dir/build.make unittest/CMakeFiles/tfsk.dir/tfsk.c.i +.PHONY : tfsk.c.i + +tfsk.s: tfsk.c.s + +.PHONY : tfsk.s + +# target to generate assembly for a file +tfsk.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tfsk.dir/build.make unittest/CMakeFiles/tfsk.dir/tfsk.c.s +.PHONY : tfsk.c.s + +tfsk_llr.o: tfsk_llr.c.o + +.PHONY : tfsk_llr.o + +# target to build an object file +tfsk_llr.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tfsk_llr.dir/build.make unittest/CMakeFiles/tfsk_llr.dir/tfsk_llr.c.o +.PHONY : tfsk_llr.c.o + +tfsk_llr.i: tfsk_llr.c.i + +.PHONY : tfsk_llr.i + +# target to preprocess a source file +tfsk_llr.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tfsk_llr.dir/build.make unittest/CMakeFiles/tfsk_llr.dir/tfsk_llr.c.i +.PHONY : tfsk_llr.c.i + +tfsk_llr.s: tfsk_llr.c.s + +.PHONY : tfsk_llr.s + +# target to generate assembly for a file +tfsk_llr.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tfsk_llr.dir/build.make unittest/CMakeFiles/tfsk_llr.dir/tfsk_llr.c.s +.PHONY : tfsk_llr.c.s + +thash.o: thash.c.o + +.PHONY : thash.o + +# target to build an object file +thash.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/thash.dir/build.make unittest/CMakeFiles/thash.dir/thash.c.o +.PHONY : thash.c.o + +thash.i: thash.c.i + +.PHONY : thash.i + +# target to preprocess a source file +thash.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/thash.dir/build.make unittest/CMakeFiles/thash.dir/thash.c.i +.PHONY : thash.c.i + +thash.s: thash.c.s + +.PHONY : thash.s + +# target to generate assembly for a file +thash.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/thash.dir/build.make unittest/CMakeFiles/thash.dir/thash.c.s +.PHONY : thash.c.s + +tnewamp1.o: tnewamp1.c.o + +.PHONY : tnewamp1.o + +# target to build an object file +tnewamp1.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tnewamp1.dir/build.make unittest/CMakeFiles/tnewamp1.dir/tnewamp1.c.o +.PHONY : tnewamp1.c.o + +tnewamp1.i: tnewamp1.c.i + +.PHONY : tnewamp1.i + +# target to preprocess a source file +tnewamp1.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tnewamp1.dir/build.make unittest/CMakeFiles/tnewamp1.dir/tnewamp1.c.i +.PHONY : tnewamp1.c.i + +tnewamp1.s: tnewamp1.c.s + +.PHONY : tnewamp1.s + +# target to generate assembly for a file +tnewamp1.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tnewamp1.dir/build.make unittest/CMakeFiles/tnewamp1.dir/tnewamp1.c.s +.PHONY : tnewamp1.c.s + +tofdm.o: tofdm.c.o + +.PHONY : tofdm.o + +# target to build an object file +tofdm.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tofdm.dir/build.make unittest/CMakeFiles/tofdm.dir/tofdm.c.o +.PHONY : tofdm.c.o + +tofdm.i: tofdm.c.i + +.PHONY : tofdm.i + +# target to preprocess a source file +tofdm.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tofdm.dir/build.make unittest/CMakeFiles/tofdm.dir/tofdm.c.i +.PHONY : tofdm.c.i + +tofdm.s: tofdm.c.s + +.PHONY : tofdm.s + +# target to generate assembly for a file +tofdm.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tofdm.dir/build.make unittest/CMakeFiles/tofdm.dir/tofdm.c.s +.PHONY : tofdm.c.s + +tqam16.o: tqam16.c.o + +.PHONY : tqam16.o + +# target to build an object file +tqam16.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tqam16.dir/build.make unittest/CMakeFiles/tqam16.dir/tqam16.c.o +.PHONY : tqam16.c.o + +tqam16.i: tqam16.c.i + +.PHONY : tqam16.i + +# target to preprocess a source file +tqam16.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tqam16.dir/build.make unittest/CMakeFiles/tqam16.dir/tqam16.c.i +.PHONY : tqam16.c.i + +tqam16.s: tqam16.c.s + +.PHONY : tqam16.s + +# target to generate assembly for a file +tqam16.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tqam16.dir/build.make unittest/CMakeFiles/tqam16.dir/tqam16.c.s +.PHONY : tqam16.c.s + +tst_codec2_fft_init.o: tst_codec2_fft_init.c.o + +.PHONY : tst_codec2_fft_init.o + +# target to build an object file +tst_codec2_fft_init.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tst_codec2_fft_init.dir/build.make unittest/CMakeFiles/tst_codec2_fft_init.dir/tst_codec2_fft_init.c.o +.PHONY : tst_codec2_fft_init.c.o + +tst_codec2_fft_init.i: tst_codec2_fft_init.c.i + +.PHONY : tst_codec2_fft_init.i + +# target to preprocess a source file +tst_codec2_fft_init.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tst_codec2_fft_init.dir/build.make unittest/CMakeFiles/tst_codec2_fft_init.dir/tst_codec2_fft_init.c.i +.PHONY : tst_codec2_fft_init.c.i + +tst_codec2_fft_init.s: tst_codec2_fft_init.c.s + +.PHONY : tst_codec2_fft_init.s + +# target to generate assembly for a file +tst_codec2_fft_init.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tst_codec2_fft_init.dir/build.make unittest/CMakeFiles/tst_codec2_fft_init.dir/tst_codec2_fft_init.c.s +.PHONY : tst_codec2_fft_init.c.s + +tvq_mbest.o: tvq_mbest.c.o + +.PHONY : tvq_mbest.o + +# target to build an object file +tvq_mbest.c.o: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tvq_mbest.dir/build.make unittest/CMakeFiles/tvq_mbest.dir/tvq_mbest.c.o +.PHONY : tvq_mbest.c.o + +tvq_mbest.i: tvq_mbest.c.i + +.PHONY : tvq_mbest.i + +# target to preprocess a source file +tvq_mbest.c.i: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tvq_mbest.dir/build.make unittest/CMakeFiles/tvq_mbest.dir/tvq_mbest.c.i +.PHONY : tvq_mbest.c.i + +tvq_mbest.s: tvq_mbest.c.s + +.PHONY : tvq_mbest.s + +# target to generate assembly for a file +tvq_mbest.c.s: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(MAKE) -f unittest/CMakeFiles/tvq_mbest.dir/build.make unittest/CMakeFiles/tvq_mbest.dir/tvq_mbest.c.s +.PHONY : tvq_mbest.c.s + +# Help Target +help: + @echo "The following are some of the valid targets for this Makefile:" + @echo "... all (the default if no target is provided)" + @echo "... clean" + @echo "... depend" + @echo "... install/strip" + @echo "... install/local" + @echo "... list_install_components" + @echo "... rebuild_cache" + @echo "... edit_cache" + @echo "... test" + @echo "... tqam16" + @echo "... tfsk_llr" + @echo "... tfreedv_2400B_rawdata" + @echo "... tfreedv_2400A_rawdata" + @echo "... install" + @echo "... thash" + @echo "... tfreedv_800XA_rawdata" + @echo "... tfreedv_data_channel" + @echo "... tofdm" + @echo "... tvq_mbest" + @echo "... tdeframer" + @echo "... ofdm_stack" + @echo "... tfsk" + @echo "... fdmdv_mem" + @echo "... tfdmdv" + @echo "... tcohpsk" + @echo "... tfifo" + @echo "... ofdm_mem" + @echo "... tfmfsk" + @echo "... function_trace" + @echo "... tnewamp1" + @echo "... compare_ints" + @echo "... tst_codec2_fft_init" + @echo "... compare_floats" + @echo "... test_phi0" + @echo "... __/src/HRA_112_112.o" + @echo "... __/src/HRA_112_112.i" + @echo "... __/src/HRA_112_112.s" + @echo "... __/src/codec2_fifo.o" + @echo "... __/src/codec2_fifo.i" + @echo "... __/src/codec2_fifo.s" + @echo "... __/src/cohpsk.o" + @echo "... __/src/cohpsk.i" + @echo "... __/src/cohpsk.s" + @echo "... __/src/dump.o" + @echo "... __/src/dump.i" + @echo "... __/src/dump.s" + @echo "... __/src/fdmdv.o" + @echo "... __/src/fdmdv.i" + @echo "... __/src/fdmdv.s" + @echo "... __/src/filter.o" + @echo "... __/src/filter.i" + @echo "... __/src/filter.s" + @echo "... __/src/freedv_data_channel.o" + @echo "... __/src/freedv_data_channel.i" + @echo "... __/src/freedv_data_channel.s" + @echo "... __/src/kiss_fft.o" + @echo "... __/src/kiss_fft.i" + @echo "... __/src/kiss_fft.s" + @echo "... __/src/kiss_fftr.o" + @echo "... __/src/kiss_fftr.i" + @echo "... __/src/kiss_fftr.s" + @echo "... __/src/mbest.o" + @echo "... __/src/mbest.i" + @echo "... __/src/mbest.s" + @echo "... __/src/modem_probe.o" + @echo "... __/src/modem_probe.i" + @echo "... __/src/modem_probe.s" + @echo "... __/src/mpdecode_core.o" + @echo "... __/src/mpdecode_core.i" + @echo "... __/src/mpdecode_core.s" + @echo "... __/src/newamp1.o" + @echo "... __/src/newamp1.i" + @echo "... __/src/newamp1.s" + @echo "... __/src/nlp.o" + @echo "... __/src/nlp.i" + @echo "... __/src/nlp.s" + @echo "... __/src/octave.o" + @echo "... __/src/octave.i" + @echo "... __/src/octave.s" + @echo "... __/src/ofdm.o" + @echo "... __/src/ofdm.i" + @echo "... __/src/ofdm.s" + @echo "... __/src/phi0.o" + @echo "... __/src/phi0.i" + @echo "... __/src/phi0.s" + @echo "... __/src/quantise.o" + @echo "... __/src/quantise.i" + @echo "... __/src/quantise.s" + @echo "... __/src/sine.o" + @echo "... __/src/sine.i" + @echo "... __/src/sine.s" + @echo "... compare_floats.o" + @echo "... compare_floats.i" + @echo "... compare_floats.s" + @echo "... compare_ints.o" + @echo "... compare_ints.i" + @echo "... compare_ints.s" + @echo "... fdmdv_mem.o" + @echo "... fdmdv_mem.i" + @echo "... fdmdv_mem.s" + @echo "... function_trace.o" + @echo "... function_trace.i" + @echo "... function_trace.s" + @echo "... ofdm_mem.o" + @echo "... ofdm_mem.i" + @echo "... ofdm_mem.s" + @echo "... ofdm_stack.o" + @echo "... ofdm_stack.i" + @echo "... ofdm_stack.s" + @echo "... tcohpsk.o" + @echo "... tcohpsk.i" + @echo "... tcohpsk.s" + @echo "... tdeframer.o" + @echo "... tdeframer.i" + @echo "... tdeframer.s" + @echo "... test_phi0.o" + @echo "... test_phi0.i" + @echo "... test_phi0.s" + @echo "... tfdmdv.o" + @echo "... tfdmdv.i" + @echo "... tfdmdv.s" + @echo "... tfifo.o" + @echo "... tfifo.i" + @echo "... tfifo.s" + @echo "... tfmfsk.o" + @echo "... tfmfsk.i" + @echo "... tfmfsk.s" + @echo "... tfreedv_2400A_rawdata.o" + @echo "... tfreedv_2400A_rawdata.i" + @echo "... tfreedv_2400A_rawdata.s" + @echo "... tfreedv_2400B_rawdata.o" + @echo "... tfreedv_2400B_rawdata.i" + @echo "... tfreedv_2400B_rawdata.s" + @echo "... tfreedv_800XA_rawdata.o" + @echo "... tfreedv_800XA_rawdata.i" + @echo "... tfreedv_800XA_rawdata.s" + @echo "... tfreedv_data_channel.o" + @echo "... tfreedv_data_channel.i" + @echo "... tfreedv_data_channel.s" + @echo "... tfsk.o" + @echo "... tfsk.i" + @echo "... tfsk.s" + @echo "... tfsk_llr.o" + @echo "... tfsk_llr.i" + @echo "... tfsk_llr.s" + @echo "... thash.o" + @echo "... thash.i" + @echo "... thash.s" + @echo "... tnewamp1.o" + @echo "... tnewamp1.i" + @echo "... tnewamp1.s" + @echo "... tofdm.o" + @echo "... tofdm.i" + @echo "... tofdm.s" + @echo "... tqam16.o" + @echo "... tqam16.i" + @echo "... tqam16.s" + @echo "... tst_codec2_fft_init.o" + @echo "... tst_codec2_fft_init.i" + @echo "... tst_codec2_fft_init.s" + @echo "... tvq_mbest.o" + @echo "... tvq_mbest.i" + @echo "... tvq_mbest.s" +.PHONY : help + + + +#============================================================================= +# Special targets to cleanup operation of make. + +# Special rule to run CMake to check the build system integrity. +# No rule that depends on this can have commands that come from listfiles +# because they might be regenerated. +cmake_check_build_system: + cd /home/sh/Downloads/hackrf/codec2/build_linux && $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 +.PHONY : cmake_check_build_system + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/cmake_install.cmake b/libcodec2-android/src/codec2/build_linux/unittest/cmake_install.cmake new file mode 100644 index 0000000..8ca7918 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/cmake_install.cmake @@ -0,0 +1,39 @@ +# Install script for directory: /home/sh/Downloads/hackrf/codec2/unittest + +# Set the install prefix +if(NOT DEFINED CMAKE_INSTALL_PREFIX) + set(CMAKE_INSTALL_PREFIX "/opt/install/codec2") +endif() +string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") + +# Set the install configuration name. +if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) + if(BUILD_TYPE) + string(REGEX REPLACE "^[^A-Za-z0-9_]+" "" + CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") + else() + set(CMAKE_INSTALL_CONFIG_NAME "Debug") + endif() + message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") +endif() + +# Set the component getting installed. +if(NOT CMAKE_INSTALL_COMPONENT) + if(COMPONENT) + message(STATUS "Install component: \"${COMPONENT}\"") + set(CMAKE_INSTALL_COMPONENT "${COMPONENT}") + else() + set(CMAKE_INSTALL_COMPONENT) + endif() +endif() + +# Install shared libraries without execute permission? +if(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE) + set(CMAKE_INSTALL_SO_NO_EXE "1") +endif() + +# Is this installation the result of a crosscompile? +if(NOT DEFINED CMAKE_CROSSCOMPILING) + set(CMAKE_CROSSCOMPILING "FALSE") +endif() + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/compare_floats b/libcodec2-android/src/codec2/build_linux/unittest/compare_floats new file mode 100755 index 0000000..2cea40e Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/compare_floats differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/compare_ints b/libcodec2-android/src/codec2/build_linux/unittest/compare_ints new file mode 100755 index 0000000..138dca3 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/compare_ints differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/est_n0.sh b/libcodec2-android/src/codec2/build_linux/unittest/est_n0.sh new file mode 100755 index 0000000..10a220a --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/est_n0.sh @@ -0,0 +1,18 @@ +#!/bin/bash -x +# David Dec 2019 +# Tests misc/est_n0 + +PATH=$PATH:/home/sh/Downloads/hackrf/codec2/build_linux/src:/home/sh/Downloads/hackrf/codec2/build_linux/misc +onerun=$(mktemp) +results=$(mktemp) + +# generate an impulse with time offset 1 +timpulse 1 | c2sim - --modelout - | est_n0 > $results + +python3 -c " +import sys; import numpy as np +est_n0 = np.loadtxt(\"$results\") +#ignore first few frames as buffers load up +est_n0 = est_n0[2:] +sys.exit(0) if np.all(est_n0==1) else sys.exit(1) +" diff --git a/libcodec2-android/src/codec2/build_linux/unittest/fdmdv_mem b/libcodec2-android/src/codec2/build_linux/unittest/fdmdv_mem new file mode 100755 index 0000000..3c261ed Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/fdmdv_mem differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/libfunction_trace.a b/libcodec2-android/src/codec2/build_linux/unittest/libfunction_trace.a new file mode 100644 index 0000000..a9fc340 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/libfunction_trace.a differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/ofdm_fade.sh b/libcodec2-android/src/codec2/build_linux/unittest/ofdm_fade.sh new file mode 100755 index 0000000..28e0bbf --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/ofdm_fade.sh @@ -0,0 +1,24 @@ +#!/bin/bash -x +# +# David June 2019 +# Tests 700D OFDM modem fading channel performance, using a simulated channel + +PATH=$PATH:/home/sh/Downloads/hackrf/codec2/build_linux/src +RAW=$PWD/../raw +results=$(mktemp) + +# generate fading file +if [ ! -f ../raw/fast_fading_samples.float ]; then + echo "Generating fading files ......" + cmd='cd ../octave; pkg load signal; cohpsk_ch_fading("../raw/fast_fading_samples.float", 8000, 1.0, 8000*60)' + octave --no-gui -qf --eval "$cmd" + [ ! $? -eq 0 ] && { echo "octave failed to run correctly .... exiting"; exit 1; } +fi + +pwd +# BER should be around 4% for this test (it's better for larger interleavers but no one uses interleaving in practice) +ofdm_mod --in /dev/zero --ldpc 1 --testframes 60 --txbpf | cohpsk_ch - - -24 --Fs 8000 -f -10 --fast --raw_dir $RAW | ofdm_demod --out /dev/null --testframes --verbose 2 --ldpc 1 2> $results +cat $results +cber=$(cat $results | sed -n "s/^Coded BER.* \([0-9..]*\) Tbits.*/\1/p") +python -c "import sys; sys.exit(0) if $cber<=0.05 else sys.exit(1)" + diff --git a/libcodec2-android/src/codec2/build_linux/unittest/ofdm_mem b/libcodec2-android/src/codec2/build_linux/unittest/ofdm_mem new file mode 100755 index 0000000..c51b2bc Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/ofdm_mem differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/ofdm_stack b/libcodec2-android/src/codec2/build_linux/unittest/ofdm_stack new file mode 100755 index 0000000..9f4b3f9 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/ofdm_stack differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/ofdm_stack.map b/libcodec2-android/src/codec2/build_linux/unittest/ofdm_stack.map new file mode 100644 index 0000000..b0a3e45 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/ofdm_stack.map @@ -0,0 +1,809 @@ +Archive member included to satisfy reference by file (symbol) + +libfunction_trace.a(function_trace.c.o) + CMakeFiles/ofdm_stack.dir/ofdm_stack.c.o (__cyg_profile_func_enter) +/usr/lib/gcc/x86_64-linux-gnu/8/libgcc.a(_mulsc3.o) + CMakeFiles/ofdm_stack.dir/__/src/ofdm.c.o (__mulsc3) +//usr/lib/x86_64-linux-gnu/libc_nonshared.a(elf-init.oS) + /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/crt1.o (__libc_csu_init) + +Discarded input sections + + .note.GNU-stack + 0x0000000000000000 0x0 /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/crt1.o + .note.GNU-stack + 0x0000000000000000 0x0 /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/crti.o + .note.GNU-stack + 0x0000000000000000 0x0 /usr/lib/gcc/x86_64-linux-gnu/8/crtbegin.o + .note.GNU-stack + 0x0000000000000000 0x0 CMakeFiles/ofdm_stack.dir/ofdm_stack.c.o + .note.GNU-stack + 0x0000000000000000 0x0 CMakeFiles/ofdm_stack.dir/__/src/ofdm.c.o + .note.GNU-stack + 0x0000000000000000 0x0 CMakeFiles/ofdm_stack.dir/__/src/octave.c.o + .note.GNU-stack + 0x0000000000000000 0x0 CMakeFiles/ofdm_stack.dir/__/src/kiss_fft.c.o + .note.GNU-stack + 0x0000000000000000 0x0 CMakeFiles/ofdm_stack.dir/__/src/modem_probe.c.o + .note.GNU-stack + 0x0000000000000000 0x0 CMakeFiles/ofdm_stack.dir/__/src/mpdecode_core.c.o + .note.GNU-stack + 0x0000000000000000 0x0 CMakeFiles/ofdm_stack.dir/__/src/phi0.c.o + .note.GNU-stack + 0x0000000000000000 0x0 CMakeFiles/ofdm_stack.dir/__/src/filter.c.o + .note.GNU-stack + 0x0000000000000000 0x0 libfunction_trace.a(function_trace.c.o) + .note.GNU-stack + 0x0000000000000000 0x0 /usr/lib/gcc/x86_64-linux-gnu/8/libgcc.a(_mulsc3.o) + .note.GNU-stack + 0x0000000000000000 0x0 //usr/lib/x86_64-linux-gnu/libc_nonshared.a(elf-init.oS) + .note.GNU-stack + 0x0000000000000000 0x0 /usr/lib/gcc/x86_64-linux-gnu/8/crtend.o + .note.GNU-stack + 0x0000000000000000 0x0 /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/crtn.o + +Memory Configuration + +Name Origin Length Attributes +*default* 0x0000000000000000 0xffffffffffffffff + +Linker script and memory map + +LOAD /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/crt1.o +LOAD /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/crti.o +LOAD /usr/lib/gcc/x86_64-linux-gnu/8/crtbegin.o +LOAD CMakeFiles/ofdm_stack.dir/ofdm_stack.c.o +LOAD CMakeFiles/ofdm_stack.dir/__/src/ofdm.c.o +LOAD CMakeFiles/ofdm_stack.dir/__/src/octave.c.o +LOAD CMakeFiles/ofdm_stack.dir/__/src/kiss_fft.c.o +LOAD CMakeFiles/ofdm_stack.dir/__/src/modem_probe.c.o +LOAD CMakeFiles/ofdm_stack.dir/__/src/mpdecode_core.c.o +LOAD CMakeFiles/ofdm_stack.dir/__/src/phi0.c.o +LOAD CMakeFiles/ofdm_stack.dir/__/src/filter.c.o +LOAD libfunction_trace.a +LOAD /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/libm.so +START GROUP +LOAD //lib/x86_64-linux-gnu/libm.so.6 +LOAD //usr/lib/x86_64-linux-gnu/libmvec_nonshared.a +LOAD //lib/x86_64-linux-gnu/libmvec.so.1 +END GROUP +LOAD /usr/lib/gcc/x86_64-linux-gnu/8/libgcc.a +LOAD /usr/lib/gcc/x86_64-linux-gnu/8/libgcc_s.so +START GROUP +LOAD /usr/lib/gcc/x86_64-linux-gnu/8/libgcc_s.so.1 +LOAD /usr/lib/gcc/x86_64-linux-gnu/8/libgcc.a +END GROUP +LOAD /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/libc.so +START GROUP +LOAD //lib/x86_64-linux-gnu/libc.so.6 +LOAD //usr/lib/x86_64-linux-gnu/libc_nonshared.a +LOAD //lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 +END GROUP +LOAD /usr/lib/gcc/x86_64-linux-gnu/8/libgcc.a +LOAD /usr/lib/gcc/x86_64-linux-gnu/8/libgcc_s.so +START GROUP +LOAD /usr/lib/gcc/x86_64-linux-gnu/8/libgcc_s.so.1 +LOAD /usr/lib/gcc/x86_64-linux-gnu/8/libgcc.a +END GROUP +LOAD /usr/lib/gcc/x86_64-linux-gnu/8/crtend.o +LOAD /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/crtn.o + [!provide] PROVIDE (__executable_start = SEGMENT_START ("text-segment", 0x400000)) + 0x00000000004002a8 . = (SEGMENT_START ("text-segment", 0x400000) + SIZEOF_HEADERS) + +.interp 0x00000000004002a8 0x1c + *(.interp) + .interp 0x00000000004002a8 0x1c /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/crt1.o + +.note.ABI-tag 0x00000000004002c4 0x20 + .note.ABI-tag 0x00000000004002c4 0x20 /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/crt1.o + +.note.gnu.build-id + 0x00000000004002e4 0x24 + *(.note.gnu.build-id) + .note.gnu.build-id + 0x00000000004002e4 0x24 /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/crt1.o + +.hash + *(.hash) + +.gnu.hash 0x0000000000400308 0x2c0 + *(.gnu.hash) + .gnu.hash 0x0000000000400308 0x2c0 /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/crt1.o + +.dynsym 0x00000000004005c8 0xb10 + *(.dynsym) + .dynsym 0x00000000004005c8 0xb10 /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/crt1.o + +.dynstr 0x00000000004010d8 0x687 + *(.dynstr) + .dynstr 0x00000000004010d8 0x687 /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/crt1.o + +.gnu.version 0x0000000000401760 0xec + *(.gnu.version) + .gnu.version 0x0000000000401760 0xec /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/crt1.o + +.gnu.version_d 0x0000000000401850 0x0 + *(.gnu.version_d) + .gnu.version_d + 0x0000000000401850 0x0 /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/crt1.o + +.gnu.version_r 0x0000000000401850 0x50 + *(.gnu.version_r) + .gnu.version_r + 0x0000000000401850 0x50 /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/crt1.o + +.rela.dyn 0x00000000004018a0 0x60 + *(.rela.init) + *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) + .rela.text 0x00000000004018a0 0x0 /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/crt1.o + *(.rela.fini) + *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) + *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) + .rela.data.rel.ro + 0x00000000004018a0 0x0 /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/crt1.o + *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) + *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) + *(.rela.ctors) + *(.rela.dtors) + *(.rela.got) + .rela.got 0x00000000004018a0 0x60 /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/crt1.o + *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) + .rela.bss 0x0000000000401900 0x0 /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/crt1.o + *(.rela.ldata .rela.ldata.* .rela.gnu.linkonce.l.*) + *(.rela.lbss .rela.lbss.* .rela.gnu.linkonce.lb.*) + *(.rela.lrodata .rela.lrodata.* .rela.gnu.linkonce.lr.*) + *(.rela.ifunc) + +.rela.plt 0x0000000000401900 0x240 + *(.rela.plt) + .rela.plt 0x0000000000401900 0x240 /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/crt1.o + [!provide] PROVIDE (__rela_iplt_start = .) + *(.rela.iplt) + .rela.iplt 0x0000000000401b40 0x0 /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/crt1.o + [!provide] PROVIDE (__rela_iplt_end = .) + 0x0000000000402000 . = ALIGN (CONSTANT (MAXPAGESIZE)) + +.init 0x0000000000402000 0x17 + *(SORT_NONE(.init)) + .init 0x0000000000402000 0x12 /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/crti.o + 0x0000000000402000 _init + .init 0x0000000000402012 0x5 /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/crtn.o + +.plt 0x0000000000402020 0x190 + *(.plt) + .plt 0x0000000000402020 0x190 /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/crt1.o + 0x0000000000402030 sincosf@@GLIBC_2.2.5 + 0x0000000000402040 free@@GLIBC_2.2.5 + 0x0000000000402050 strcpy@@GLIBC_2.2.5 + 0x0000000000402060 vsnprintf@@GLIBC_2.2.5 + 0x0000000000402070 roundf@@GLIBC_2.2.5 + 0x0000000000402080 fclose@@GLIBC_2.2.5 + 0x0000000000402090 strlen@@GLIBC_2.2.5 + 0x00000000004020a0 cabsf@@GLIBC_2.2.5 + 0x00000000004020b0 __assert_fail@@GLIBC_2.2.5 + 0x00000000004020c0 fputc@@GLIBC_2.2.5 + 0x00000000004020d0 calloc@@GLIBC_2.2.5 + 0x00000000004020e0 strcmp@@GLIBC_2.2.5 + 0x00000000004020f0 fprintf@@GLIBC_2.2.5 + 0x0000000000402100 log10f@@GLIBC_2.2.5 + 0x0000000000402110 strtol@@GLIBC_2.2.5 + 0x0000000000402120 memcpy@@GLIBC_2.14 + 0x0000000000402130 sqrtf@@GLIBC_2.2.5 + 0x0000000000402140 malloc@@GLIBC_2.2.5 + 0x0000000000402150 atan2f@@GLIBC_2.2.5 + 0x0000000000402160 memmove@@GLIBC_2.2.5 + 0x0000000000402170 fopen@@GLIBC_2.2.5 + 0x0000000000402180 getopt@@GLIBC_2.2.5 + 0x0000000000402190 exit@@GLIBC_2.2.5 + 0x00000000004021a0 fwrite@@GLIBC_2.2.5 + *(.iplt) + .iplt 0x00000000004021b0 0x0 /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/crt1.o + +.plt.got 0x00000000004021b0 0x0 + *(.plt.got) + .plt.got 0x00000000004021b0 0x0 /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/crt1.o + +.plt.sec + *(.plt.sec) + +.text 0x00000000004021b0 0x9f91 + *(.text.unlikely .text.*_unlikely .text.unlikely.*) + *(.text.exit .text.exit.*) + .text.exit 0x00000000004021b0 0x12 libfunction_trace.a(function_trace.c.o) + 0x00000000004021b0 trace_end + *(.text.startup .text.startup.*) + *fill* 0x00000000004021c2 0xe + .text.startup 0x00000000004021d0 0x44f CMakeFiles/ofdm_stack.dir/ofdm_stack.c.o + 0x00000000004021d0 main + *fill* 0x000000000040261f 0x1 + .text.startup 0x0000000000402620 0x23 libfunction_trace.a(function_trace.c.o) + 0x0000000000402620 trace_begin + *(.text.hot .text.hot.*) + *(.text .stub .text.* .gnu.linkonce.t.*) + *fill* 0x0000000000402643 0xd + .text 0x0000000000402650 0x31 /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/crt1.o + 0x0000000000402650 _start + 0x0000000000402680 _dl_relocate_static_pie + .text 0x0000000000402681 0x0 /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/crti.o + *fill* 0x0000000000402681 0xf + .text 0x0000000000402690 0xa2 /usr/lib/gcc/x86_64-linux-gnu/8/crtbegin.o + *fill* 0x0000000000402732 0xe + .text 0x0000000000402740 0x304 CMakeFiles/ofdm_stack.dir/ofdm_stack.c.o + 0x0000000000402740 dummy_code + 0x00000000004027a0 run_modem + *fill* 0x0000000000402a44 0xc + .text 0x0000000000402a50 0x4d48 CMakeFiles/ofdm_stack.dir/__/src/ofdm.c.o + 0x0000000000402a50 qpsk_mod + 0x0000000000402ad0 qpsk_demod + 0x0000000000402bc0 ofdm_get_config_param + 0x0000000000402bf0 ofdm_get_high_doppler + 0x0000000000402c30 ofdm_get_nin + 0x0000000000402c70 ofdm_get_samples_per_frame + 0x0000000000402cb0 ofdm_get_max_samples_per_frame + 0x0000000000402cf0 ofdm_get_bits_per_frame + 0x0000000000402d30 ofdm_set_verbose + 0x0000000000402d70 ofdm_set_timing_enable + 0x0000000000402dc0 ofdm_set_foff_est_enable + 0x0000000000402e00 ofdm_set_phase_est_enable + 0x0000000000402e40 ofdm_set_off_est_hz + 0x0000000000402f30 ofdm_sync_state_machine + 0x0000000000403110 ofdm_rand + 0x0000000000403180 ofdm_assemble_modem_frame + 0x0000000000403310 ofdm_assemble_modem_frame_symbols + 0x0000000000403520 ofdm_disassemble_modem_frame + 0x0000000000403ab0 ofdm_create + 0x0000000000404880 allocate_tx_bpf + 0x00000000004048f0 deallocate_tx_bpf + 0x0000000000404940 ofdm_destroy + 0x0000000000404a10 ofdm_set_tx_bpf + 0x0000000000404a80 ofdm_txframe + 0x0000000000404dd0 ofdm_mod + 0x0000000000404f10 ofdm_generate_payload_data_bits + 0x0000000000404f90 ofdm_print_info + 0x0000000000405dc0 ofdm_sync_search + 0x0000000000405e50 ofdm_sync_search_shorts + 0x0000000000407280 ofdm_demod + 0x0000000000407360 ofdm_demod_shorts + 0x0000000000407450 ofdm_get_demod_stats + 0x00000000004076b0 ofdm_set_high_doppler + 0x00000000004076f0 ofdm_set_sync + *fill* 0x0000000000407798 0x8 + .text 0x00000000004077a0 0x79e CMakeFiles/ofdm_stack.dir/__/src/octave.c.o + 0x00000000004077a0 flush_buffer + 0x0000000000407800 handle_buffer + 0x0000000000407870 printf_buffer + 0x0000000000407970 printf_header + 0x0000000000407a50 octave_save_int + 0x0000000000407be0 octave_save_float + 0x0000000000407d90 octave_save_complex + *fill* 0x0000000000407f3e 0x2 + .text 0x0000000000407f40 0x1291 CMakeFiles/ofdm_stack.dir/__/src/kiss_fft.c.o + 0x00000000004087b0 kiss_fft_cleanup + 0x00000000004087e0 kiss_fft_next_fast_size + 0x0000000000408bd0 kiss_fft_alloc + 0x00000000004090c0 kiss_fft_stride + 0x0000000000409180 kiss_fft + *fill* 0x00000000004091d1 0xf + .text 0x00000000004091e0 0x5d2 CMakeFiles/ofdm_stack.dir/__/src/modem_probe.c.o + 0x00000000004091e0 modem_probe_init_int + 0x0000000000409280 gather_data + 0x0000000000409350 modem_probe_close_int + 0x00000000004094c0 modem_probe_get_trace + 0x0000000000409580 modem_probe_samp_i_int + 0x0000000000409640 modem_probe_samp_f_int + 0x0000000000409700 modem_probe_samp_c_int + *fill* 0x00000000004097b2 0xe + .text 0x00000000004097c0 0x1823 CMakeFiles/ofdm_stack.dir/__/src/mpdecode_core.c.o + 0x00000000004097c0 encode + 0x0000000000409870 sd_to_llr + 0x00000000004099c0 Demod2D + 0x0000000000409b90 init_c_v_nodes + 0x000000000040a500 SumProduct + 0x000000000040a960 run_ldpc_decoder + 0x000000000040acb0 Somap + 0x000000000040add0 symbols_to_llrs + 0x000000000040aec0 ldpc_print_info + *fill* 0x000000000040afe3 0xd + .text 0x000000000040aff0 0x702 CMakeFiles/ofdm_stack.dir/__/src/phi0.c.o + 0x000000000040aff0 phi0 + *fill* 0x000000000040b6f2 0xe + .text 0x000000000040b700 0x609 CMakeFiles/ofdm_stack.dir/__/src/filter.c.o + 0x000000000040b700 quisk_filt_cfInit + 0x000000000040b780 quisk_ccfFilter + 0x000000000040b920 quisk_filt_destroy + 0x000000000040b9a0 quisk_cfInterpDecim + 0x000000000040bbd0 quisk_cfTune + *fill* 0x000000000040bd09 0x7 + .text 0x000000000040bd10 0x59 libfunction_trace.a(function_trace.c.o) + 0x000000000040bd10 __cyg_profile_func_enter + 0x000000000040bd40 __cyg_profile_func_exit + *fill* 0x000000000040bd69 0x7 + .text 0x000000000040bd70 0x363 /usr/lib/gcc/x86_64-linux-gnu/8/libgcc.a(_mulsc3.o) + 0x000000000040bd70 __mulsc3 + *fill* 0x000000000040c0d3 0xd + .text 0x000000000040c0e0 0x61 //usr/lib/x86_64-linux-gnu/libc_nonshared.a(elf-init.oS) + 0x000000000040c0e0 __libc_csu_init + 0x000000000040c140 __libc_csu_fini + .text 0x000000000040c141 0x0 /usr/lib/gcc/x86_64-linux-gnu/8/crtend.o + .text 0x000000000040c141 0x0 /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/crtn.o + *(.gnu.warning) + +.fini 0x000000000040c144 0x9 + *(SORT_NONE(.fini)) + .fini 0x000000000040c144 0x4 /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/crti.o + 0x000000000040c144 _fini + .fini 0x000000000040c148 0x5 /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/crtn.o + [!provide] PROVIDE (__etext = .) + [!provide] PROVIDE (_etext = .) + [!provide] PROVIDE (etext = .) + 0x000000000040d000 . = ALIGN (CONSTANT (MAXPAGESIZE)) + 0x000000000040d000 . = SEGMENT_START ("rodata-segment", (ALIGN (CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 0x1)))) + +.rodata 0x000000000040d000 0x1740 + *(.rodata .rodata.* .gnu.linkonce.r.*) + .rodata.cst4 0x000000000040d000 0x4 /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/crt1.o + 0x000000000040d000 _IO_stdin_used + *fill* 0x000000000040d004 0x1c + .rodata 0x000000000040d020 0x7d8 CMakeFiles/ofdm_stack.dir/ofdm_stack.c.o + 0x000000000040d040 test_codeword + 0x000000000040d3c0 payload_data_bits + 0x000000000040d440 test_bits_ofdm + .rodata.str1.1 + 0x000000000040d7f8 0x4f CMakeFiles/ofdm_stack.dir/ofdm_stack.c.o + *fill* 0x000000000040d847 0x1 + .rodata.str1.8 + 0x000000000040d848 0x86 CMakeFiles/ofdm_stack.dir/ofdm_stack.c.o + *fill* 0x000000000040d8ce 0x2 + .rodata.str1.8 + 0x000000000040d8d0 0x28f CMakeFiles/ofdm_stack.dir/__/src/ofdm.c.o + .rodata.str1.1 + 0x000000000040db5f 0x410 CMakeFiles/ofdm_stack.dir/__/src/ofdm.c.o + 0x41d (size before relaxing) + *fill* 0x000000000040df6f 0x11 + .rodata 0x000000000040df80 0x140 CMakeFiles/ofdm_stack.dir/__/src/ofdm.c.o + .rodata.cst4 0x000000000040e0c0 0x5c CMakeFiles/ofdm_stack.dir/__/src/ofdm.c.o + *fill* 0x000000000040e11c 0x4 + .rodata.cst8 0x000000000040e120 0x8 CMakeFiles/ofdm_stack.dir/__/src/ofdm.c.o + *fill* 0x000000000040e128 0x8 + .rodata.cst16 0x000000000040e130 0x20 CMakeFiles/ofdm_stack.dir/__/src/ofdm.c.o + .rodata.str1.1 + 0x000000000040e150 0x56 CMakeFiles/ofdm_stack.dir/__/src/octave.c.o + 0x5f (size before relaxing) + *fill* 0x000000000040e1a6 0x2 + .rodata.cst8 0x000000000040e1a8 0x18 CMakeFiles/ofdm_stack.dir/__/src/kiss_fft.c.o + .rodata.cst16 0x000000000040e1c0 0x10 CMakeFiles/ofdm_stack.dir/__/src/kiss_fft.c.o + 0x30 (size before relaxing) + .rodata.cst4 0x000000000040e1d0 0x8 CMakeFiles/ofdm_stack.dir/__/src/kiss_fft.c.o + 0x10 (size before relaxing) + .rodata.str1.1 + 0x000000000040e1d8 0x2 CMakeFiles/ofdm_stack.dir/__/src/modem_probe.c.o + *fill* 0x000000000040e1da 0x6 + .rodata.str1.8 + 0x000000000040e1e0 0xa8 CMakeFiles/ofdm_stack.dir/__/src/mpdecode_core.c.o + 0xa1 (size before relaxing) + .rodata.str1.1 + 0x000000000040e288 0x134 CMakeFiles/ofdm_stack.dir/__/src/mpdecode_core.c.o + *fill* 0x000000000040e3bc 0x4 + .rodata 0x000000000040e3c0 0x27 CMakeFiles/ofdm_stack.dir/__/src/mpdecode_core.c.o + *fill* 0x000000000040e3e7 0x9 + .rodata.cst16 0x000000000040e3f0 0x10 CMakeFiles/ofdm_stack.dir/__/src/mpdecode_core.c.o + 0x30 (size before relaxing) + .rodata.cst8 0x000000000040e400 0x28 CMakeFiles/ofdm_stack.dir/__/src/mpdecode_core.c.o + .rodata.cst4 0x000000000040e428 0x4 CMakeFiles/ofdm_stack.dir/__/src/mpdecode_core.c.o + 0x8 (size before relaxing) + .rodata 0x000000000040e42c 0x128 CMakeFiles/ofdm_stack.dir/__/src/phi0.c.o + .rodata.cst4 0x000000000040e554 0x198 CMakeFiles/ofdm_stack.dir/__/src/phi0.c.o + 0x19c (size before relaxing) + *fill* 0x000000000040e6ec 0x4 + .rodata.cst8 0x000000000040e6f0 0x8 CMakeFiles/ofdm_stack.dir/__/src/filter.c.o + 0x18 (size before relaxing) + .rodata.str1.1 + 0x000000000040e6f8 0x25 libfunction_trace.a(function_trace.c.o) + 0x27 (size before relaxing) + *fill* 0x000000000040e71d 0x3 + .rodata.cst4 0x000000000040e720 0x4 /usr/lib/gcc/x86_64-linux-gnu/8/libgcc.a(_mulsc3.o) + 0x8 (size before relaxing) + *fill* 0x000000000040e724 0xc + .rodata.cst16 0x000000000040e730 0x10 /usr/lib/gcc/x86_64-linux-gnu/8/libgcc.a(_mulsc3.o) + 0x30 (size before relaxing) + +.rodata1 + *(.rodata1) + +.eh_frame_hdr 0x000000000040e740 0x314 + *(.eh_frame_hdr) + .eh_frame_hdr 0x000000000040e740 0x314 /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/crt1.o + 0x000000000040e740 __GNU_EH_FRAME_HDR + *(.eh_frame_entry .eh_frame_entry.*) + +.eh_frame 0x000000000040ea58 0x1558 + *(.eh_frame) + .eh_frame 0x000000000040ea58 0x58 /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/crt1.o + 0x5c (size before relaxing) + *fill* 0x000000000040eab0 0x0 + .eh_frame 0x000000000040eab0 0x28 /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/crt1.o + 0x40 (size before relaxing) + .eh_frame 0x000000000040ead8 0x0 /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/crt1.o + .eh_frame 0x000000000040ead8 0x90 CMakeFiles/ofdm_stack.dir/ofdm_stack.c.o + 0xa8 (size before relaxing) + .eh_frame 0x000000000040eb68 0x868 CMakeFiles/ofdm_stack.dir/__/src/ofdm.c.o + 0x880 (size before relaxing) + .eh_frame 0x000000000040f3d0 0x238 CMakeFiles/ofdm_stack.dir/__/src/octave.c.o + 0x250 (size before relaxing) + .eh_frame 0x000000000040f608 0x2d8 CMakeFiles/ofdm_stack.dir/__/src/kiss_fft.c.o + 0x2f0 (size before relaxing) + .eh_frame 0x000000000040f8e0 0x1e0 CMakeFiles/ofdm_stack.dir/__/src/modem_probe.c.o + 0x1f8 (size before relaxing) + .eh_frame 0x000000000040fac0 0x2b0 CMakeFiles/ofdm_stack.dir/__/src/mpdecode_core.c.o + 0x2c8 (size before relaxing) + .eh_frame 0x000000000040fd70 0x28 CMakeFiles/ofdm_stack.dir/__/src/phi0.c.o + 0x40 (size before relaxing) + .eh_frame 0x000000000040fd98 0x148 CMakeFiles/ofdm_stack.dir/__/src/filter.c.o + 0x160 (size before relaxing) + .eh_frame 0x000000000040fee0 0x58 libfunction_trace.a(function_trace.c.o) + 0x70 (size before relaxing) + .eh_frame 0x000000000040ff38 0x18 /usr/lib/gcc/x86_64-linux-gnu/8/libgcc.a(_mulsc3.o) + 0x30 (size before relaxing) + .eh_frame 0x000000000040ff50 0x5c //usr/lib/x86_64-linux-gnu/libc_nonshared.a(elf-init.oS) + 0x78 (size before relaxing) + .eh_frame 0x000000000040ffac 0x4 /usr/lib/gcc/x86_64-linux-gnu/8/crtend.o + *(.eh_frame.*) + +.gcc_except_table + *(.gcc_except_table .gcc_except_table.*) + +.gnu_extab + *(.gnu_extab*) + +.exception_ranges + *(.exception_ranges .exception_ranges*) + 0x0000000000411de0 . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE)) + +.eh_frame + *(.eh_frame) + *(.eh_frame.*) + +.gnu_extab + *(.gnu_extab) + +.gcc_except_table + *(.gcc_except_table .gcc_except_table.*) + +.exception_ranges + *(.exception_ranges .exception_ranges*) + +.tdata 0x0000000000411de0 0x0 + [!provide] PROVIDE (__tdata_start = .) + *(.tdata .tdata.* .gnu.linkonce.td.*) + +.tbss + *(.tbss .tbss.* .gnu.linkonce.tb.*) + *(.tcommon) + +.preinit_array 0x0000000000411de0 0x0 + [!provide] PROVIDE (__preinit_array_start = .) + *(.preinit_array) + [!provide] PROVIDE (__preinit_array_end = .) + +.init_array 0x0000000000411de0 0x10 + 0x0000000000411de0 PROVIDE (__init_array_start = .) + *(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)) + *(.init_array EXCLUDE_FILE(*crtend?.o *crtend.o *crtbegin?.o *crtbegin.o) .ctors) + .init_array 0x0000000000411de0 0x8 /usr/lib/gcc/x86_64-linux-gnu/8/crtbegin.o + .init_array 0x0000000000411de8 0x8 libfunction_trace.a(function_trace.c.o) + 0x0000000000411df0 PROVIDE (__init_array_end = .) + +.fini_array 0x0000000000411df0 0x10 + [!provide] PROVIDE (__fini_array_start = .) + *(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)) + *(.fini_array EXCLUDE_FILE(*crtend?.o *crtend.o *crtbegin?.o *crtbegin.o) .dtors) + .fini_array 0x0000000000411df0 0x8 /usr/lib/gcc/x86_64-linux-gnu/8/crtbegin.o + .fini_array 0x0000000000411df8 0x8 libfunction_trace.a(function_trace.c.o) + [!provide] PROVIDE (__fini_array_end = .) + +.ctors + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT_BY_NAME(.ctors.*)) + *(.ctors) + +.dtors + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT_BY_NAME(.dtors.*)) + *(.dtors) + +.jcr + *(.jcr) + +.data.rel.ro 0x0000000000411e00 0x0 + *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) + *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) + .data.rel.ro 0x0000000000411e00 0x0 /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/crt1.o + +.dynamic 0x0000000000411e00 0x1e0 + *(.dynamic) + .dynamic 0x0000000000411e00 0x1e0 /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/crt1.o + 0x0000000000411e00 _DYNAMIC + +.got 0x0000000000411fe0 0x20 + *(.got) + .got 0x0000000000411fe0 0x20 /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/crt1.o + *(.igot) + 0x0000000000412fe8 . = DATA_SEGMENT_RELRO_END (., (SIZEOF (.got.plt) >= 0x18)?0x18:0x0) + +.got.plt 0x0000000000412000 0xd8 + *(.got.plt) + .got.plt 0x0000000000412000 0xd8 /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/crt1.o + 0x0000000000412000 _GLOBAL_OFFSET_TABLE_ + *(.igot.plt) + .igot.plt 0x00000000004120d8 0x0 /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/crt1.o + +.data 0x00000000004120e0 0xa40 + *(.data .data.* .gnu.linkonce.d.*) + .data 0x00000000004120e0 0x4 /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/crt1.o + 0x00000000004120e0 data_start + 0x00000000004120e0 __data_start + .data 0x00000000004120e4 0x0 /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/crti.o + *fill* 0x00000000004120e4 0x4 + .data 0x00000000004120e8 0x8 /usr/lib/gcc/x86_64-linux-gnu/8/crtbegin.o + 0x00000000004120e8 __dso_handle + .data 0x00000000004120f0 0x0 CMakeFiles/ofdm_stack.dir/ofdm_stack.c.o + .data 0x00000000004120f0 0x0 CMakeFiles/ofdm_stack.dir/__/src/ofdm.c.o + .data 0x00000000004120f0 0x0 CMakeFiles/ofdm_stack.dir/__/src/octave.c.o + .data 0x00000000004120f0 0x0 CMakeFiles/ofdm_stack.dir/__/src/kiss_fft.c.o + .data 0x00000000004120f0 0x0 CMakeFiles/ofdm_stack.dir/__/src/modem_probe.c.o + *fill* 0x00000000004120f0 0x10 + .data 0x0000000000412100 0x20 CMakeFiles/ofdm_stack.dir/__/src/mpdecode_core.c.o + .data 0x0000000000412120 0x0 CMakeFiles/ofdm_stack.dir/__/src/phi0.c.o + .data 0x0000000000412120 0xa00 CMakeFiles/ofdm_stack.dir/__/src/filter.c.o + 0x0000000000412120 quiskFilt120t480 + 0x00000000004128a0 filtP550S750 + .data 0x0000000000412b20 0x0 libfunction_trace.a(function_trace.c.o) + .data 0x0000000000412b20 0x0 /usr/lib/gcc/x86_64-linux-gnu/8/libgcc.a(_mulsc3.o) + .data 0x0000000000412b20 0x0 //usr/lib/x86_64-linux-gnu/libc_nonshared.a(elf-init.oS) + .data 0x0000000000412b20 0x0 /usr/lib/gcc/x86_64-linux-gnu/8/crtend.o + .data 0x0000000000412b20 0x0 /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/crtn.o + +.tm_clone_table + 0x0000000000412b20 0x0 + .tm_clone_table + 0x0000000000412b20 0x0 /usr/lib/gcc/x86_64-linux-gnu/8/crtbegin.o + .tm_clone_table + 0x0000000000412b20 0x0 /usr/lib/gcc/x86_64-linux-gnu/8/crtend.o + +.data1 + *(.data1) + 0x0000000000412b20 _edata = . + [!provide] PROVIDE (edata = .) + 0x0000000000412b20 . = . + 0x0000000000412b20 __bss_start = . + +.bss 0x0000000000412b20 0x118 + *(.dynbss) + .dynbss 0x0000000000412b20 0x0 /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/crt1.o + *(.bss .bss.* .gnu.linkonce.b.*) + .bss 0x0000000000412b20 0x0 /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/crt1.o + .bss 0x0000000000412b20 0x0 /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/crti.o + .bss 0x0000000000412b20 0x1 /usr/lib/gcc/x86_64-linux-gnu/8/crtbegin.o + *fill* 0x0000000000412b21 0x7 + .bss 0x0000000000412b28 0x38 CMakeFiles/ofdm_stack.dir/ofdm_stack.c.o + .bss 0x0000000000412b60 0xb4 CMakeFiles/ofdm_stack.dir/__/src/ofdm.c.o + .bss 0x0000000000412c14 0x0 CMakeFiles/ofdm_stack.dir/__/src/octave.c.o + .bss 0x0000000000412c14 0x0 CMakeFiles/ofdm_stack.dir/__/src/kiss_fft.c.o + *fill* 0x0000000000412c14 0x4 + .bss 0x0000000000412c18 0x18 CMakeFiles/ofdm_stack.dir/__/src/modem_probe.c.o + .bss 0x0000000000412c30 0x0 CMakeFiles/ofdm_stack.dir/__/src/mpdecode_core.c.o + .bss 0x0000000000412c30 0x0 CMakeFiles/ofdm_stack.dir/__/src/phi0.c.o + .bss 0x0000000000412c30 0x0 CMakeFiles/ofdm_stack.dir/__/src/filter.c.o + .bss 0x0000000000412c30 0x8 libfunction_trace.a(function_trace.c.o) + .bss 0x0000000000412c38 0x0 /usr/lib/gcc/x86_64-linux-gnu/8/libgcc.a(_mulsc3.o) + .bss 0x0000000000412c38 0x0 //usr/lib/x86_64-linux-gnu/libc_nonshared.a(elf-init.oS) + .bss 0x0000000000412c38 0x0 /usr/lib/gcc/x86_64-linux-gnu/8/crtend.o + .bss 0x0000000000412c38 0x0 /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/crtn.o + *(COMMON) + 0x0000000000412c38 . = ALIGN ((. != 0x0)?0x8:0x1) + +.lbss + *(.dynlbss) + *(.lbss .lbss.* .gnu.linkonce.lb.*) + *(LARGE_COMMON) + 0x0000000000412c38 . = ALIGN (0x8) + 0x0000000000412c38 . = SEGMENT_START ("ldata-segment", .) + +.lrodata + *(.lrodata .lrodata.* .gnu.linkonce.lr.*) + +.ldata 0x0000000000414c38 0x0 + *(.ldata .ldata.* .gnu.linkonce.l.*) + 0x0000000000414c38 . = ALIGN ((. != 0x0)?0x8:0x1) + 0x0000000000414c38 . = ALIGN (0x8) + 0x0000000000414c38 _end = . + [!provide] PROVIDE (end = .) + 0x0000000000414c38 . = DATA_SEGMENT_END (.) + +.stab + *(.stab) + +.stabstr + *(.stabstr) + +.stab.excl + *(.stab.excl) + +.stab.exclstr + *(.stab.exclstr) + +.stab.index + *(.stab.index) + +.stab.indexstr + *(.stab.indexstr) + +.comment 0x0000000000000000 0x1c + *(.comment) + .comment 0x0000000000000000 0x1c /usr/lib/gcc/x86_64-linux-gnu/8/crtbegin.o + 0x1d (size before relaxing) + .comment 0x000000000000001c 0x1d CMakeFiles/ofdm_stack.dir/ofdm_stack.c.o + .comment 0x000000000000001c 0x1d CMakeFiles/ofdm_stack.dir/__/src/ofdm.c.o + .comment 0x000000000000001c 0x1d CMakeFiles/ofdm_stack.dir/__/src/octave.c.o + .comment 0x000000000000001c 0x1d CMakeFiles/ofdm_stack.dir/__/src/kiss_fft.c.o + .comment 0x000000000000001c 0x1d CMakeFiles/ofdm_stack.dir/__/src/modem_probe.c.o + .comment 0x000000000000001c 0x1d CMakeFiles/ofdm_stack.dir/__/src/mpdecode_core.c.o + .comment 0x000000000000001c 0x1d CMakeFiles/ofdm_stack.dir/__/src/phi0.c.o + .comment 0x000000000000001c 0x1d CMakeFiles/ofdm_stack.dir/__/src/filter.c.o + .comment 0x000000000000001c 0x1d libfunction_trace.a(function_trace.c.o) + .comment 0x000000000000001c 0x1d /usr/lib/gcc/x86_64-linux-gnu/8/crtend.o + +.debug + *(.debug) + +.line + *(.line) + +.debug_srcinfo + *(.debug_srcinfo) + +.debug_sfnames + *(.debug_sfnames) + +.debug_aranges 0x0000000000000000 0x1e0 + *(.debug_aranges) + .debug_aranges + 0x0000000000000000 0x40 CMakeFiles/ofdm_stack.dir/ofdm_stack.c.o + .debug_aranges + 0x0000000000000040 0x30 CMakeFiles/ofdm_stack.dir/__/src/ofdm.c.o + .debug_aranges + 0x0000000000000070 0x30 CMakeFiles/ofdm_stack.dir/__/src/octave.c.o + .debug_aranges + 0x00000000000000a0 0x30 CMakeFiles/ofdm_stack.dir/__/src/kiss_fft.c.o + .debug_aranges + 0x00000000000000d0 0x30 CMakeFiles/ofdm_stack.dir/__/src/modem_probe.c.o + .debug_aranges + 0x0000000000000100 0x30 CMakeFiles/ofdm_stack.dir/__/src/mpdecode_core.c.o + .debug_aranges + 0x0000000000000130 0x30 CMakeFiles/ofdm_stack.dir/__/src/phi0.c.o + .debug_aranges + 0x0000000000000160 0x30 CMakeFiles/ofdm_stack.dir/__/src/filter.c.o + .debug_aranges + 0x0000000000000190 0x50 libfunction_trace.a(function_trace.c.o) + +.debug_pubnames + *(.debug_pubnames) + +.debug_info 0x0000000000000000 0xb1ae + *(.debug_info .gnu.linkonce.wi.*) + .debug_info 0x0000000000000000 0x1154 CMakeFiles/ofdm_stack.dir/ofdm_stack.c.o + .debug_info 0x0000000000001154 0x46fd CMakeFiles/ofdm_stack.dir/__/src/ofdm.c.o + .debug_info 0x0000000000005851 0xed0 CMakeFiles/ofdm_stack.dir/__/src/octave.c.o + .debug_info 0x0000000000006721 0x1268 CMakeFiles/ofdm_stack.dir/__/src/kiss_fft.c.o + .debug_info 0x0000000000007989 0xde1 CMakeFiles/ofdm_stack.dir/__/src/modem_probe.c.o + .debug_info 0x000000000000876a 0x1b1d CMakeFiles/ofdm_stack.dir/__/src/mpdecode_core.c.o + .debug_info 0x000000000000a287 0x14e CMakeFiles/ofdm_stack.dir/__/src/phi0.c.o + .debug_info 0x000000000000a3d5 0x954 CMakeFiles/ofdm_stack.dir/__/src/filter.c.o + .debug_info 0x000000000000ad29 0x485 libfunction_trace.a(function_trace.c.o) + +.debug_abbrev 0x0000000000000000 0x15dd + *(.debug_abbrev) + .debug_abbrev 0x0000000000000000 0x2c1 CMakeFiles/ofdm_stack.dir/ofdm_stack.c.o + .debug_abbrev 0x00000000000002c1 0x477 CMakeFiles/ofdm_stack.dir/__/src/ofdm.c.o + .debug_abbrev 0x0000000000000738 0x205 CMakeFiles/ofdm_stack.dir/__/src/octave.c.o + .debug_abbrev 0x000000000000093d 0x2bc CMakeFiles/ofdm_stack.dir/__/src/kiss_fft.c.o + .debug_abbrev 0x0000000000000bf9 0x2a9 CMakeFiles/ofdm_stack.dir/__/src/modem_probe.c.o + .debug_abbrev 0x0000000000000ea2 0x30d CMakeFiles/ofdm_stack.dir/__/src/mpdecode_core.c.o + .debug_abbrev 0x00000000000011af 0xbd CMakeFiles/ofdm_stack.dir/__/src/phi0.c.o + .debug_abbrev 0x000000000000126c 0x225 CMakeFiles/ofdm_stack.dir/__/src/filter.c.o + .debug_abbrev 0x0000000000001491 0x14c libfunction_trace.a(function_trace.c.o) + +.debug_line 0x0000000000000000 0x5f69 + *(.debug_line .debug_line.* .debug_line_end) + .debug_line 0x0000000000000000 0x62d CMakeFiles/ofdm_stack.dir/ofdm_stack.c.o + .debug_line 0x000000000000062d 0x2725 CMakeFiles/ofdm_stack.dir/__/src/ofdm.c.o + .debug_line 0x0000000000002d52 0x30e CMakeFiles/ofdm_stack.dir/__/src/octave.c.o + .debug_line 0x0000000000003060 0xf9d CMakeFiles/ofdm_stack.dir/__/src/kiss_fft.c.o + .debug_line 0x0000000000003ffd 0x4f0 CMakeFiles/ofdm_stack.dir/__/src/modem_probe.c.o + .debug_line 0x00000000000044ed 0xf9b CMakeFiles/ofdm_stack.dir/__/src/mpdecode_core.c.o + .debug_line 0x0000000000005488 0x4a0 CMakeFiles/ofdm_stack.dir/__/src/phi0.c.o + .debug_line 0x0000000000005928 0x48d CMakeFiles/ofdm_stack.dir/__/src/filter.c.o + .debug_line 0x0000000000005db5 0x1b4 libfunction_trace.a(function_trace.c.o) + +.debug_frame + *(.debug_frame) + +.debug_str 0x0000000000000000 0x17d8 + *(.debug_str) + .debug_str 0x0000000000000000 0x7f6 CMakeFiles/ofdm_stack.dir/ofdm_stack.c.o + 0x988 (size before relaxing) + .debug_str 0x00000000000007f6 0x6fc CMakeFiles/ofdm_stack.dir/__/src/ofdm.c.o + 0x1003 (size before relaxing) + .debug_str 0x0000000000000ef2 0x142 CMakeFiles/ofdm_stack.dir/__/src/octave.c.o + 0x47f (size before relaxing) + .debug_str 0x0000000000001034 0x193 CMakeFiles/ofdm_stack.dir/__/src/kiss_fft.c.o + 0x52b (size before relaxing) + .debug_str 0x00000000000011c7 0x176 CMakeFiles/ofdm_stack.dir/__/src/modem_probe.c.o + 0x529 (size before relaxing) + .debug_str 0x000000000000133d 0x312 CMakeFiles/ofdm_stack.dir/__/src/mpdecode_core.c.o + 0x719 (size before relaxing) + .debug_str 0x000000000000164f 0x2c CMakeFiles/ofdm_stack.dir/__/src/phi0.c.o + 0x16e (size before relaxing) + .debug_str 0x000000000000167b 0xb4 CMakeFiles/ofdm_stack.dir/__/src/filter.c.o + 0x4ff (size before relaxing) + .debug_str 0x000000000000172f 0xa9 libfunction_trace.a(function_trace.c.o) + 0x362 (size before relaxing) + +.debug_loc 0x0000000000000000 0xf55a + *(.debug_loc) + .debug_loc 0x0000000000000000 0xd81 CMakeFiles/ofdm_stack.dir/ofdm_stack.c.o + .debug_loc 0x0000000000000d81 0x5e32 CMakeFiles/ofdm_stack.dir/__/src/ofdm.c.o + .debug_loc 0x0000000000006bb3 0xce2 CMakeFiles/ofdm_stack.dir/__/src/octave.c.o + .debug_loc 0x0000000000007895 0x2c46 CMakeFiles/ofdm_stack.dir/__/src/kiss_fft.c.o + .debug_loc 0x000000000000a4db 0xa53 CMakeFiles/ofdm_stack.dir/__/src/modem_probe.c.o + .debug_loc 0x000000000000af2e 0x35c4 CMakeFiles/ofdm_stack.dir/__/src/mpdecode_core.c.o + .debug_loc 0x000000000000e4f2 0x326 CMakeFiles/ofdm_stack.dir/__/src/phi0.c.o + .debug_loc 0x000000000000e818 0xba6 CMakeFiles/ofdm_stack.dir/__/src/filter.c.o + .debug_loc 0x000000000000f3be 0x19c libfunction_trace.a(function_trace.c.o) + +.debug_macinfo + *(.debug_macinfo) + +.debug_weaknames + *(.debug_weaknames) + +.debug_funcnames + *(.debug_funcnames) + +.debug_typenames + *(.debug_typenames) + +.debug_varnames + *(.debug_varnames) + +.debug_pubtypes + *(.debug_pubtypes) + +.debug_ranges 0x0000000000000000 0x2c0 + *(.debug_ranges) + .debug_ranges 0x0000000000000000 0x60 CMakeFiles/ofdm_stack.dir/ofdm_stack.c.o + .debug_ranges 0x0000000000000060 0x130 CMakeFiles/ofdm_stack.dir/__/src/ofdm.c.o + .debug_ranges 0x0000000000000190 0x30 CMakeFiles/ofdm_stack.dir/__/src/kiss_fft.c.o + .debug_ranges 0x00000000000001c0 0x30 CMakeFiles/ofdm_stack.dir/__/src/mpdecode_core.c.o + .debug_ranges 0x00000000000001f0 0x60 CMakeFiles/ofdm_stack.dir/__/src/phi0.c.o + .debug_ranges 0x0000000000000250 0x30 CMakeFiles/ofdm_stack.dir/__/src/filter.c.o + .debug_ranges 0x0000000000000280 0x40 libfunction_trace.a(function_trace.c.o) + +.debug_macro + *(.debug_macro) + +.debug_addr + *(.debug_addr) + +.gnu.attributes + *(.gnu.attributes) + +/DISCARD/ + *(.note.GNU-stack) + *(.gnu_debuglink) + *(.gnu.lto_*) +OUTPUT(ofdm_stack elf64-x86-64) diff --git a/libcodec2-android/src/codec2/build_linux/unittest/tcohpsk b/libcodec2-android/src/codec2/build_linux/unittest/tcohpsk new file mode 100755 index 0000000..af4638e Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/tcohpsk differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/tdeframer b/libcodec2-android/src/codec2/build_linux/unittest/tdeframer new file mode 100755 index 0000000..42cf7ed Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/tdeframer differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/test_700c_eq.sh b/libcodec2-android/src/codec2/build_linux/unittest/test_700c_eq.sh new file mode 100755 index 0000000..89949d5 --- /dev/null +++ b/libcodec2-android/src/codec2/build_linux/unittest/test_700c_eq.sh @@ -0,0 +1,13 @@ +#!/bin/bash +# test_700c_eq.sh +# make sure 700C EQ is reducing VQ distortion + +PATH=/home/sh/Downloads/hackrf/codec2/build_linux/src:$PATH +results=$(mktemp) + +c2enc 700C ../raw/kristoff.raw /dev/null --var 2> $results +var=$(cat $results | sed -n "s/.*var: \([0-9..]*\) .*/\1/p") +c2enc 700C ../raw/kristoff.raw /dev/null --var --eq 2> $results +var_eq=$(cat $results | sed -n "s/.*var: \([0-9..]*\) .*/\1/p") +printf "var: %5.2f var_eq: %5.2f\n" $var $var_eq +python -c "import sys; sys.exit(0) if $var_eq<=$var else sys.exit(1)" diff --git a/libcodec2-android/src/codec2/build_linux/unittest/test_phi0 b/libcodec2-android/src/codec2/build_linux/unittest/test_phi0 new file mode 100755 index 0000000..2db44af Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/test_phi0 differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/tfdmdv b/libcodec2-android/src/codec2/build_linux/unittest/tfdmdv new file mode 100755 index 0000000..bbf2e5d Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/tfdmdv differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/tfifo b/libcodec2-android/src/codec2/build_linux/unittest/tfifo new file mode 100755 index 0000000..79f624d Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/tfifo differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/tfmfsk b/libcodec2-android/src/codec2/build_linux/unittest/tfmfsk new file mode 100755 index 0000000..9d36199 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/tfmfsk differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/tfreedv_2400A_rawdata b/libcodec2-android/src/codec2/build_linux/unittest/tfreedv_2400A_rawdata new file mode 100755 index 0000000..c06d8ed Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/tfreedv_2400A_rawdata differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/tfreedv_2400B_rawdata b/libcodec2-android/src/codec2/build_linux/unittest/tfreedv_2400B_rawdata new file mode 100755 index 0000000..9d0c572 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/tfreedv_2400B_rawdata differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/tfreedv_800XA_rawdata b/libcodec2-android/src/codec2/build_linux/unittest/tfreedv_800XA_rawdata new file mode 100755 index 0000000..0fbc557 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/tfreedv_800XA_rawdata differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/tfreedv_data_channel b/libcodec2-android/src/codec2/build_linux/unittest/tfreedv_data_channel new file mode 100755 index 0000000..f335ed8 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/tfreedv_data_channel differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/tfsk b/libcodec2-android/src/codec2/build_linux/unittest/tfsk new file mode 100755 index 0000000..e012928 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/tfsk differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/tfsk_llr b/libcodec2-android/src/codec2/build_linux/unittest/tfsk_llr new file mode 100755 index 0000000..d7e0a0c Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/tfsk_llr differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/thash b/libcodec2-android/src/codec2/build_linux/unittest/thash new file mode 100755 index 0000000..589801e Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/thash differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/tnewamp1 b/libcodec2-android/src/codec2/build_linux/unittest/tnewamp1 new file mode 100755 index 0000000..88e4c13 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/tnewamp1 differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/tofdm b/libcodec2-android/src/codec2/build_linux/unittest/tofdm new file mode 100755 index 0000000..7d146e0 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/tofdm differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/tqam16 b/libcodec2-android/src/codec2/build_linux/unittest/tqam16 new file mode 100755 index 0000000..69b1ce7 Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/tqam16 differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/tst_codec2_fft_init b/libcodec2-android/src/codec2/build_linux/unittest/tst_codec2_fft_init new file mode 100755 index 0000000..9e0594a Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/tst_codec2_fft_init differ diff --git a/libcodec2-android/src/codec2/build_linux/unittest/tvq_mbest b/libcodec2-android/src/codec2/build_linux/unittest/tvq_mbest new file mode 100755 index 0000000..0f0646d Binary files /dev/null and b/libcodec2-android/src/codec2/build_linux/unittest/tvq_mbest differ diff --git a/libcodec2-android/src/codec2/cmake/GetDependencies.cmake.in b/libcodec2-android/src/codec2/cmake/GetDependencies.cmake.in new file mode 100644 index 0000000..0d25f67 --- /dev/null +++ b/libcodec2-android/src/codec2/cmake/GetDependencies.cmake.in @@ -0,0 +1,24 @@ +# As this script is run in a new cmake instance, it does not have access to +# the existing cache variables. Pass them in via the configure_file command. +set(CMAKE_BINARY_DIR @CMAKE_BINARY_DIR@) +set(CMAKE_SOURCE_DIR @CMAKE_SOURCE_DIR@) +set(UNIX @UNIX@) +set(WIN32 @WIN32@) +set(CMAKE_CROSSCOMPILING @CMAKE_CROSSCOMPILING@) +set(CMAKE_FIND_LIBRARY_SUFFIXES @CMAKE_FIND_LIBRARY_SUFFIXES@) +set(CMAKE_FIND_LIBRARY_PREFIXES @CMAKE_FIND_LIBRARY_PREFIXES@) +set(CMAKE_SYSTEM_LIBRARY_PATH @CMAKE_SYSTEM_LIBRARY_PATH@) +set(CMAKE_FIND_ROOT_PATH @CMAKE_FIND_ROOT_PATH@) +set(CODEC2_DLL ${CMAKE_BINARY_DIR}/src/libcodec2.dll) + +include(${CMAKE_SOURCE_DIR}/cmake/GetPrerequisites.cmake) +get_prerequisites(${CODEC2_DLL} _deps 1 0 "" "") +foreach(_runtime ${_deps}) + message("Looking for ${_runtime}") + find_library(RUNTIME_${_runtime} ${_runtime}) + message("${RUNTIME_${_runtime}}") + if(RUNTIME_${_runtime}) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/bin" + TYPE EXECUTABLE FILES "${RUNTIME_${_runtime}}") + endif() +endforeach() diff --git a/libcodec2-android/src/codec2/cmake/config.h.in b/libcodec2-android/src/codec2/cmake/config.h.in new file mode 100644 index 0000000..60ee7d6 --- /dev/null +++ b/libcodec2-android/src/codec2/cmake/config.h.in @@ -0,0 +1,23 @@ +/*-------------------------------------------------------------------------- + ** This file is autogenerated from config.h.in + ** during the cmake configuration of your project. If you need to make changes + ** edit the original file NOT THIS FILE. + ** --------------------------------------------------------------------------*/ +#ifndef _CONFIGURATION_HEADER_GUARD_H_ +#define _CONFIGURATION_HEADER_GUARD_H_ + +#define SIZEOF_INT @SIZEOF_INT@ +#cmakedefine HAVE_STDLIB_H @HAVE_STDLIB_H@ +#cmakedefine HAVE_STRING_H @HAVE_STRING_H@ +#cmakedefine HAVE_FLOOR @HAVE_FLOOR@ +#cmakedefine HAVE_CEIL @HAVE_CEIL@ +#cmakedefine HAVE_MEMSET @HAVE_MEMSET@ +#cmakedefine HAVE_POW @HAVE_POW@ +#cmakedefine HAVE_SQRT @HAVE_SQRT@ +#cmakedefine HAVE_SIN @HAVE_SIN@ +#cmakedefine HAVE_COS @HAVE_COS@ +#cmakedefine HAVE_ATAN2 @HAVE_ATAN2@ +#cmakedefine HAVE_LOG10 @HAVE_LOG10@ +#cmakedefine HAVE_ROUND @HAVE_ROUND@ +#cmakedefine HAVE_GETOPT @HAVE_GETOPT@ +#endif diff --git a/libcodec2-android/src/codec2/cmake/version.h.in b/libcodec2-android/src/codec2/cmake/version.h.in new file mode 100644 index 0000000..45b26aa --- /dev/null +++ b/libcodec2-android/src/codec2/cmake/version.h.in @@ -0,0 +1,37 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: version.h + AUTHOR......: Tomas Härdin + DATE CREATED: 03 November 2017 + + Codec 2 VERSION #defines + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2017 Tomas Härdin + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +//this functions both as an include guard and your typical HAVE macro +#ifndef CODEC2_HAVE_VERSION +#define CODEC2_HAVE_VERSION + +#define CODEC2_VERSION_MAJOR @CODEC2_VERSION_MAJOR@ +#define CODEC2_VERSION_MINOR @CODEC2_VERSION_MINOR@ +#cmakedefine CODEC2_VERSION_PATCH @CODEC2_VERSION_PATCH@ +#define CODEC2_VERSION "@CODEC2_VERSION@" + +#endif //CODEC2_HAVE_VERSION \ No newline at end of file diff --git a/libcodec2-android/src/codec2/codec2.pc.in b/libcodec2-android/src/codec2/codec2.pc.in new file mode 100644 index 0000000..ecca704 --- /dev/null +++ b/libcodec2-android/src/codec2/codec2.pc.in @@ -0,0 +1,10 @@ +prefix=@CMAKE_INSTALL_PREFIX@ +libdir=@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_LIBDIR@ +includedir=@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_INCLUDEDIR@/codec2 + +Name: codec2 +Description: A speech codec for 2400 bit/s and below +Requires: +Version: @CODEC2_VERSION@ +Libs: -L${libdir} -lcodec2 +Cflags: -I${includedir} diff --git a/libcodec2-android/src/codec2/debian/changelog b/libcodec2-android/src/codec2/debian/changelog new file mode 100644 index 0000000..214efcf --- /dev/null +++ b/libcodec2-android/src/codec2/debian/changelog @@ -0,0 +1,5 @@ +codec2 (0.4-150830) unstable; urgency=low + + * Subversion snapshot of tag 0.4. + + -- Stuart Longland Sun, 30 Aug 2015 08:57:09 +1000 diff --git a/libcodec2-android/src/codec2/debian/codec2.doc-base.EX b/libcodec2-android/src/codec2/debian/codec2.doc-base.EX new file mode 100644 index 0000000..5836087 --- /dev/null +++ b/libcodec2-android/src/codec2/debian/codec2.doc-base.EX @@ -0,0 +1,20 @@ +Document: codec2 +Title: Debian codec2 Manual +Author: +Abstract: This manual describes what codec2 is + and how it can be used to + manage online manuals on Debian systems. +Section: unknown + +Format: debiandoc-sgml +Files: /usr/share/doc/codec2/codec2.sgml.gz + +Format: postscript +Files: /usr/share/doc/codec2/codec2.ps.gz + +Format: text +Files: /usr/share/doc/codec2/codec2.text.gz + +Format: HTML +Index: /usr/share/doc/codec2/html/index.html +Files: /usr/share/doc/codec2/html/*.html diff --git a/libcodec2-android/src/codec2/debian/codec2.install b/libcodec2-android/src/codec2/debian/codec2.install new file mode 100644 index 0000000..1df36c6 --- /dev/null +++ b/libcodec2-android/src/codec2/debian/codec2.install @@ -0,0 +1 @@ +usr/bin/* diff --git a/libcodec2-android/src/codec2/debian/codec21.dirs b/libcodec2-android/src/codec2/debian/codec21.dirs new file mode 100644 index 0000000..6845771 --- /dev/null +++ b/libcodec2-android/src/codec2/debian/codec21.dirs @@ -0,0 +1 @@ +usr/lib diff --git a/libcodec2-android/src/codec2/debian/codec21.install b/libcodec2-android/src/codec2/debian/codec21.install new file mode 100644 index 0000000..d0dbfd1 --- /dev/null +++ b/libcodec2-android/src/codec2/debian/codec21.install @@ -0,0 +1 @@ +usr/lib/lib*.so.* diff --git a/libcodec2-android/src/codec2/debian/compat b/libcodec2-android/src/codec2/debian/compat new file mode 100644 index 0000000..ec63514 --- /dev/null +++ b/libcodec2-android/src/codec2/debian/compat @@ -0,0 +1 @@ +9 diff --git a/libcodec2-android/src/codec2/debian/control b/libcodec2-android/src/codec2/debian/control new file mode 100644 index 0000000..de9aa3b --- /dev/null +++ b/libcodec2-android/src/codec2/debian/control @@ -0,0 +1,36 @@ +Source: codec2 +Priority: optional +Maintainer: Stuart Longland +Build-Depends: debhelper (>= 9), cmake, libspeexdsp-dev +Standards-Version: 3.9.5 +Section: libs +Homepage: http://www.freedv.org + +Package: libcodec2-dev +Section: libdevel +Architecture: any +Depends: libcodec2 (= ${binary:Version}), ${misc:Depends} +Description: Codec 2: ultra-low bitrate voice codec. Headers. + Codec 2 is an ultra-low bitrate (sub 4kbps) voice codec + for use in radio frequency communications applications. + . + This package provides the headers. + +Package: libcodec2 +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends}, libspeexdsp1 +Description: Codec 2: ultra-low bitrate voice codec. Library. + Codec 2 is an ultra-low bitrate (sub 4kbps) voice codec + for use in radio frequency communications applications. + . + This package provides the runtime library. + +Package: codec2 +Architecture: any +Depends: libcodec2 (= ${binary:Version}), ${shlibs:Depends}, ${misc:Depends} +Description: Codec 2: ultra-low bitrate voice codec. Utilities. + Codec 2 is an ultra-low bitrate (sub 4kbps) voice codec + for use in radio frequency communications applications. + . + This package provides some command line utilities for encoding + and decoding codec2. diff --git a/libcodec2-android/src/codec2/debian/copyright b/libcodec2-android/src/codec2/debian/copyright new file mode 100644 index 0000000..598dd85 --- /dev/null +++ b/libcodec2-android/src/codec2/debian/copyright @@ -0,0 +1,38 @@ +Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: codec2 +Source: + +Files: * +Copyright: + +License: + + + . + + +# If you want to use GPL v2 or later for the /debian/* files use +# the following clauses, or change it to suit. Delete these two lines +Files: debian/* +Copyright: 2015 unknown +License: GPL-2+ + This package is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + . + This package is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + . + You should have received a copy of the GNU General Public License + along with this program. If not, see + . + On Debian systems, the complete text of the GNU General + Public License version 2 can be found in "/usr/share/common-licenses/GPL-2". + +# Please also look if there are files or directories which have a +# different copyright/license attached and list them here. +# Please avoid to pick license terms that are more restrictive than the +# packaged work, as it may make Debian's contributions unacceptable upstream. diff --git a/libcodec2-android/src/codec2/debian/docs b/libcodec2-android/src/codec2/debian/docs new file mode 100644 index 0000000..8e229a3 --- /dev/null +++ b/libcodec2-android/src/codec2/debian/docs @@ -0,0 +1,6 @@ +NEWS +README +README_fdmdv.txt +AUTHORS +ChangeLog +INSTALL diff --git a/libcodec2-android/src/codec2/debian/libcodec2-dev.dirs b/libcodec2-android/src/codec2/debian/libcodec2-dev.dirs new file mode 100644 index 0000000..4418816 --- /dev/null +++ b/libcodec2-android/src/codec2/debian/libcodec2-dev.dirs @@ -0,0 +1,2 @@ +usr/lib +usr/include diff --git a/libcodec2-android/src/codec2/debian/libcodec2-dev.install b/libcodec2-android/src/codec2/debian/libcodec2-dev.install new file mode 100644 index 0000000..41a1414 --- /dev/null +++ b/libcodec2-android/src/codec2/debian/libcodec2-dev.install @@ -0,0 +1 @@ +usr/include/* diff --git a/libcodec2-android/src/codec2/debian/libcodec2.install b/libcodec2-android/src/codec2/debian/libcodec2.install new file mode 100644 index 0000000..f1d0181 --- /dev/null +++ b/libcodec2-android/src/codec2/debian/libcodec2.install @@ -0,0 +1 @@ +usr/lib/* diff --git a/libcodec2-android/src/codec2/debian/rules b/libcodec2-android/src/codec2/debian/rules new file mode 100755 index 0000000..c6cdbe7 --- /dev/null +++ b/libcodec2-android/src/codec2/debian/rules @@ -0,0 +1,24 @@ +#!/usr/bin/make -f +# See debhelper(7) (uncomment to enable) +# output every command that modifies files on the build system. +#DH_VERBOSE = 1 + +# see EXAMPLES in dpkg-buildflags(1) and read /usr/share/dpkg/* +DPKG_EXPORT_BUILDFLAGS = 1 +include /usr/share/dpkg/default.mk + +# see FEATURE AREAS in dpkg-buildflags(1) +#export DEB_BUILD_MAINT_OPTIONS = hardening=+all + +# see ENVIRONMENT in dpkg-buildflags(1) +# package maintainers to append CFLAGS +#export DEB_CFLAGS_MAINT_APPEND = -Wall -pedantic +# package maintainers to append LDFLAGS +#export DEB_LDFLAGS_MAINT_APPEND = -Wl,--as-needed + + +# main packaging script based on dh7 syntax +%: + dh $@ --buildsystem=cmake + + diff --git a/libcodec2-android/src/codec2/debian/source/format b/libcodec2-android/src/codec2/debian/source/format new file mode 100644 index 0000000..163aaf8 --- /dev/null +++ b/libcodec2-android/src/codec2/debian/source/format @@ -0,0 +1 @@ +3.0 (quilt) diff --git a/libcodec2-android/src/codec2/doc/fsk_modem_ber_8000_100.png b/libcodec2-android/src/codec2/doc/fsk_modem_ber_8000_100.png new file mode 100644 index 0000000..d08774d Binary files /dev/null and b/libcodec2-android/src/codec2/doc/fsk_modem_ber_8000_100.png differ diff --git a/libcodec2-android/src/codec2/doc/lockdown_3s.wav b/libcodec2-android/src/codec2/doc/lockdown_3s.wav new file mode 100644 index 0000000..61c7905 Binary files /dev/null and b/libcodec2-android/src/codec2/doc/lockdown_3s.wav differ diff --git a/libcodec2-android/src/codec2/doc/modem_codec_frame_design.ods b/libcodec2-android/src/codec2/doc/modem_codec_frame_design.ods new file mode 100644 index 0000000..c57f614 Binary files /dev/null and b/libcodec2-android/src/codec2/doc/modem_codec_frame_design.ods differ diff --git a/libcodec2-android/src/codec2/doc/wenet_image.jpg b/libcodec2-android/src/codec2/doc/wenet_image.jpg new file mode 100644 index 0000000..c521b9a Binary files /dev/null and b/libcodec2-android/src/codec2/doc/wenet_image.jpg differ diff --git a/libcodec2-android/src/codec2/doc/wenet_spectrum_3d.png b/libcodec2-android/src/codec2/doc/wenet_spectrum_3d.png new file mode 100644 index 0000000..aa3ab1e Binary files /dev/null and b/libcodec2-android/src/codec2/doc/wenet_spectrum_3d.png differ diff --git a/libcodec2-android/src/codec2/misc/16_8_short.c b/libcodec2-android/src/codec2/misc/16_8_short.c new file mode 100644 index 0000000..84b34cd --- /dev/null +++ b/libcodec2-android/src/codec2/misc/16_8_short.c @@ -0,0 +1,48 @@ +/* + 16_8_short.c + David Rowe + October 2018 + + Utilty for resampling raw files from 16 to 8 kHz. + +*/ + +#include +#include +#include +#include +#include "codec2_fdmdv.h" + +#define N8 160 /* procssing buffer size at 8 kHz */ +#define N16 (N8*FDMDV_OS) + +int main(int argc, char *argv[]) { + short in16k_short[FDMDV_OS_TAPS_16K + N16]; + FILE *f16; + short out8k_short[N16]; + FILE *f8; + int i; + + if (argc != 3) { + fprintf(stderr, "usage: %s 16kHz.raw 8kHz.raw\n", argv[0]); + exit(1); + } + f16 = fopen(argv[1], "rb"); + assert(f16 != NULL); + f8 = fopen(argv[2], "wb"); + assert(f8 != NULL); + + /* clear filter memories */ + + for(i=0; i +#include +#include +#include +#include +#include +#include "lpc.h" + +#define N 80 + +int main(int argc, char *argv[]) { + FILE *fin, *fout; + short buf[N]; + float Sn[N], Sn_de[N]; + float de_mem = 0.0; + int i; + + if (argc != 3) { + printf("usage: de InputRawSpeechFile OutputRawSpeechFile\n"); + printf("e.g de input.raw output.raw"); + exit(1); + } + + if (strcmp(argv[1], "-") == 0) fin = stdin; + else if ( (fin = fopen(argv[1],"rb")) == NULL ) { + fprintf(stderr, "Error opening input speech file: %s: %s.\n", + argv[1], strerror(errno)); + exit(1); + } + + if (strcmp(argv[2], "-") == 0) fout = stdout; + else if ( (fout = fopen(argv[2],"wb")) == NULL ) { + fprintf(stderr, "Error opening output speech file: %s: %s.\n", + argv[2], strerror(errno)); + exit(1); + } + + while(fread(buf, sizeof(short), N, fin) == N) { + for(i=0; i. +*/ + +#include +#include +#include +#include +#include +#include +#include +#include + +#define MAX_STR 1024 +#define LEN_TARGET_NAME_RESPONSE 14 +#define N 160 + +/* message parsing state machine states */ + +#define MSGSTATE_HDR1 0 +#define MSGSTATE_HDR2 1 +#define MSGSTATE_DATA 2 + +#define LENGTH_MASK 0x1FFF /* mask for message length */ +#define TYPE_MASK 0xE0 /* mask for upper byte of header */ +#define TYPE_C 0x20 /* compressed speech from target */ +#define TYPE_UC 0x40 /* uncompressed speech from target */ + +#define MAX_MSG_LEN 8192 + +/* Control items sent to DV Dongle */ + +char target_name[] = {0x04, 0x20, 0x01, 0x00}; + +/* note [2] appears to be in error, specifies run as 0x02, stop as 0x01 */ + +char run_state_stop[] = {0x05, 0x00, 0x18, 0x00, 0x00}; +char run_state_run[] = {0x05, 0x00, 0x18, 0x00, 0x01}; + +/* Control item codes from DV Dongle */ + +char data_item_0[] = {0x42, 0x81}; +char data_item_1[] = {0x32, 0xa0}; +char run_state[] = {0x05, 0x00}; +char idle[] = {0x00, 0x00}; + +typedef struct { + short header; + char power; + char control1; + short rate[5]; + short unused[3]; + short dtmf; + short control2; + short channel_data[12]; +} COMPRESSED; + +COMPRESSED c_in; +COMPRESSED c_out; +FILE *fin, *fout, *f; +int fd, c_msg, uc_msg; + +int initport(int fd) { + struct termios options; + + // Set the options for the port... + + cfmakeraw(&options); + cfsetispeed(&options, B230400); + cfsetospeed(&options, B230400); + options.c_cflag |= (CLOCAL | CREAD); + tcsetattr(fd, TCSANOW, &options); + + return 1; +} + +int getbaud(int fd) { + struct termios termAttr; + int inputSpeed = -1; + speed_t baudRate; + + tcgetattr(fd, &termAttr); + + /* Get the input speed */ + + baudRate = cfgetispeed(&termAttr); + switch (baudRate) { + case B0: inputSpeed = 0; break; + case B50: inputSpeed = 50; break; + case B110: inputSpeed = 110; break; + case B134: inputSpeed = 134; break; + case B150: inputSpeed = 150; break; + case B200: inputSpeed = 200; break; + case B300: inputSpeed = 300; break; + case B600: inputSpeed = 600; break; + case B1200: inputSpeed = 1200; break; + case B1800: inputSpeed = 1800; break; + case B2400: inputSpeed = 2400; break; + case B4800: inputSpeed = 4800; break; + case B9600: inputSpeed = 9600; break; + case B19200: inputSpeed = 19200; break; + case B38400: inputSpeed = 38400; break; + case B57600: inputSpeed = 38400; break; + case B115200: inputSpeed = 38400; break; + case B230400: inputSpeed = 230400; break; + } + + return inputSpeed; +} + +void write_dongle(int fd, char *data, int len) { + int n; + //printf(" writing %d bytes\n", len); + n = write(fd, data, len); + if (n < 0) { + perror("write failed"); + exit(1); + } +} + +void read_dongle(int fd, char *data, int len) { + int n; + //printf(" reading %d bytes \n", len); + + n = read(fd, data, len); + if (n < 0) { + perror("read failed"); + exit(1); + } + //printf(" read %d bytes\n", len); +} + +void parse_message(int msg_type, int msg_len, char msg_data[]) { + short buf[N]; + COMPRESSED *c_out; + + //printf("msg_type: 0x%02x msg_len: %d\n", msg_type, msg_len); + + /* echo compressed speech frames back to target */ + + if (msg_type == TYPE_C) { + c_out = (COMPRESSED*)msg_data; +#ifdef TMP + printf("control1 0x%04x\n", c_out->control1 & 0xff); + printf("rate[0] 0x%04x\n", c_out->rate[0]); + printf("rate[1] 0x%04x\n", c_out->rate[1]); + printf("rate[2] 0x%04x\n", c_out->rate[2]); + printf("rate[3] 0x%04x\n", c_out->rate[3]); + printf("rate[4] 0x%04x\n", c_out->rate[4]); + printf("control2 0x%04x\n", c_out->control2 & 0xffff); + printf("cd[0] 0x%04x\n", c_out->channel_data[0] & 0xffff); + printf("cd[1] 0x%04x\n", c_out->channel_data[1] & 0xffff); + printf("cd[2] 0x%04x\n", c_out->channel_data[2] & 0xffff); + printf("cd[3] 0x%04x\n", c_out->channel_data[3] & 0xffff); + printf("cd[4] 0x%04x\n", c_out->channel_data[4] & 0xffff); + printf("cd[5] 0x%04x\n", c_out->channel_data[5] & 0xffff); + printf("cd[6] 0x%04x\n", c_out->channel_data[6] & 0xffff); + printf("uc_msg %d\n", uc_msg); +#endif + printf("bit errors %d\n", c_out->unused[2]); + memcpy(&c_in.channel_data, + &c_out->channel_data, + sizeof(c_in.channel_data)); + + write_dongle(fd, data_item_1, sizeof(data_item_1)); + write_dongle(fd, (char*)&c_in, sizeof(c_in)); + + c_msg++; + } + + /* write speech buffers to disk */ + + if (msg_type == TYPE_UC) { + + if (fout != NULL) { + fwrite(msg_data, sizeof(char), msg_len-2, fout); + printf("msg_len %d\n", msg_len); + } + + if (fin != NULL) + fread(buf, sizeof(short), N, fin); + else + memset(buf, 0, sizeof(buf)); + + write_dongle(fd, data_item_0, sizeof(data_item_0)); + write_dongle(fd, (char*)buf, sizeof(buf)); + + uc_msg++; + } +} + +int main(int argc, char **argv) { + char response[MAX_STR]; + int i; + int state, next_state; + short header; + int msg_type, msg_length; + char msg_data[MAX_MSG_LEN]; + int n, length; + int r; + + char data; + + f = fopen("/tmp/log.txt", "wt"); + assert(f != NULL); + + /* open and configure serial port */ + + fd = open("/dev/ttyUSB0", O_RDWR | O_NOCTTY | O_NDELAY); + if (fd == -1) { + perror("open_port: Unable to open /dev/ttyS0 - "); + exit(1); + } else { + fcntl(fd, F_SETFL, 0); + } + + initport(fd); + + fin = NULL; + if (argc >= 2) { + fin = fopen(argv[1],"rb"); + assert(fin != NULL); + } + fout = NULL; + if (argc == 3) { + fout = fopen(argv[2],"wb"); + assert(fout != NULL); + } + + /* check DV Dongle is alive */ + + write_dongle(fd, target_name, sizeof(target_name)); + read_dongle(fd, response, LEN_TARGET_NAME_RESPONSE); + if (strcmp(&response[4],"DV Dongle") != 0) { + printf("DV Dongle not responding\n"); + exit(1); + } + printf("Found DV Dongle....\n"); + + c_in.header = 0x13ec; + c_in.power = 0x0; + c_in.control1 = 0x0; + +#define RATE2000 +#ifdef RATE2000 + c_in.rate[0] = 0x0028; /* 2000 bit/s, no FEC */ + c_in.rate[1] = 0x0000; + c_in.rate[2] = 0x0000; + c_in.rate[3] = 0x0000; + c_in.rate[4] = 0x6248; +#endif + +#ifdef RATE3600_1200 + c_in.rate[0] = 0x5048; /* 3600 bit/s, 1200 bit/s FEC */ + c_in.rate[1] = 0x0001; + c_in.rate[2] = 0x0000; + c_in.rate[3] = 0x2412; + c_in.rate[4] = 0x6860; +#endif + + c_in.unused[0] = 0x0; + c_in.unused[1] = 0x0; + c_in.unused[2] = 0x0; + c_in.dtmf = 0x00ff; + c_in.control2 = 0x8000; + + /* put codec in run mode */ + + write_dongle(fd, run_state_run, sizeof(run_state_run)); + //write_dongle(fd, data_item_1, sizeof(data_item_1)); + //write_dongle(fd, (char*)&c_in, sizeof(c_in)); + + state = MSGSTATE_HDR1; + header = msg_type = msg_length = n = length = 0; + c_msg = uc_msg = 0; + + for(i=0; i<100000; i++) { + /* + We can only reliably read one byte at a time. Until I + realised this there was "much wailing and gnashing of + teeth". Trying to read() n bytes read() returns n but may + actually reads some number between 1 and n. So it may only + read 1 byte int data[] but return n. + */ + r = read(fd, &data, 1); + assert(r == 1); + + /* used state machine design from ambetest103.zip, SerialPort.cpp */ + + next_state = state; + switch(state) { + case MSGSTATE_HDR1: + header = data; + next_state = MSGSTATE_HDR2; + break; + case MSGSTATE_HDR2: + header |= data<<8; + msg_length = header & LENGTH_MASK; + msg_type = header & TYPE_MASK; + //printf("%0x %d\n", msg_type, msg_length); + if (length == 2) { + parse_message(msg_type, msg_length, msg_data); + next_state = MSGSTATE_HDR1; + } + else { + if (msg_length == 0x0) + length = 8192; + else + length = msg_length - 2; + n = 0; + next_state = MSGSTATE_DATA; + } + break; + case MSGSTATE_DATA: + msg_data[n++] = data; + length--; + if (length == 0) { + parse_message(msg_type, msg_length, msg_data); + next_state = MSGSTATE_HDR1; + } + break; + } + state = next_state; + } + + printf("finished, c_msg = %d uc_msg = %d\n", c_msg, uc_msg); + + write_dongle(fd, run_state_stop, sizeof(run_state_stop)); + + close(fd); + if (fin != NULL) + fclose(fin); + if (fout != NULL) + fclose(fout); + fclose(f); + + return 0; +} diff --git a/libcodec2-android/src/codec2/misc/est_n0.c b/libcodec2-android/src/codec2/misc/est_n0.c new file mode 100644 index 0000000..e5a4d3a --- /dev/null +++ b/libcodec2-android/src/codec2/misc/est_n0.c @@ -0,0 +1,95 @@ +/* + est_n0.c + David Rowe Dec 2019 + + Estimate the position of n0, the impulse that excites each frame in + the source/filter model. This defines the linear component of the + phase spectra. Uses a file of Codec 2 model parameters on stdin as + input. +*/ + +#include +#include +#include +#include +#include +#include +#include "defines.h" + +int main(int argc, char *argv[]) { + MODEL model; + FILE *fdisp; + + int o = 0; int opt_idx = 0; + int extract = 0, add = 0; + while (o != -1) { + static struct option long_opts[] = { + {"remove", no_argument, 0, 'r'}, + {"add", required_argument, 0, 'a'}, + {0, 0, 0, 0} + }; + + o = getopt_long(argc,argv,"hra:",long_opts,&opt_idx); + + switch (o) { + case 'a': + add = 1; fdisp = fopen(optarg, "rb"); + if (fdisp == NULL) { + fprintf(stderr, "Error opening disp model file: %s\n", optarg); + exit(1); + } + break; + case 'r': extract = 1; break; + case 'h': + fprintf(stderr, "usage: %s [-r] [-a disp.model]\n", argv[0]); + fprintf(stderr, "-r remove linear phase term and ouput model records\n"); + fprintf(stderr, "-a est linear phase from model file on stdin, then add disp.model\n"); + exit(1); + } + } + + int wr = 0; + while(fread(&model, sizeof(MODEL), 1, stdin)) { + float Wo = model.Wo; int L = model.L; + float P = 2.0*M_PI/Wo; + float best_error = 1E32; float best_n0=0.0; + + /* note weighting MSE by log10(Am) works much better than + Am*Am, the latter tends to fit a linear phase model between + the two highest amplitude harmonics */ + + for(float n0=0; n0<=P; n0+=0.25) { + float error = 0.0; + for(int m=1; m<=L; m++) { + complex diff = cexp(I*model.phi[m]) - cexp(I*n0*m*Wo); + error += log10(model.A[m])*cabs(diff)*cabs(diff); + } + if (error < best_error) { + best_error = error; + best_n0 = n0; + } + } + if (extract) { + for(int m=1; m<=L; m++) { + complex diff = cexp(I*model.phi[m])*cexp(-I*best_n0*m*Wo); + model.phi[m] = carg(diff); + } + assert(fwrite(&model, sizeof(MODEL), 1, stdout)); + wr++; + } + else if (add) { + MODEL disp; + assert(fread(&disp, sizeof(MODEL), 1, fdisp) == 1); + for(int m=1; m<=L; m++) { + complex combined = cexp(I*disp.phi[m])*cexp(I*best_n0*m*Wo); + model.phi[m] = carg(combined); + } + assert(fwrite(&model, sizeof(MODEL), 1, stdout)); + wr++; + } + else + printf("%f\n", best_n0); + } + fprintf(stderr, "wr: %d\n", wr); + return 0; +} diff --git a/libcodec2-android/src/codec2/misc/extract.c b/libcodec2-android/src/codec2/misc/extract.c new file mode 100644 index 0000000..b4f38db --- /dev/null +++ b/libcodec2-android/src/codec2/misc/extract.c @@ -0,0 +1,117 @@ +/* + extract.c + david Rowe Jan 2019 + + Extracts sub sets of vectors from .f32 files, used for LPCNet VQ experiments. +*/ + +#include +#include +#include +#include + +#define NB_FEATURES 55 /* number of cols per row */ + +int main(int argc, char *argv[]) { + FILE *fin, *fout; + int st = 0; + int en = 17; + int stride = NB_FEATURES; + float gain = 1.0; + int frame_delay = 1; + float pred = 0.0; + int removemean = 0; + float lower = -1E32; + + static struct option long_options[] = { + {"startcol", required_argument, 0, 's'}, + {"endcol", required_argument, 0, 'e'}, + {"stride", required_argument, 0, 't'}, + {"gain", required_argument, 0, 'g'}, + {"pred", required_argument, 0, 'p'}, + {"delay", required_argument, 0, 'd'}, + {"removemean", no_argument, 0, 'm'}, + {"lower", required_argument, 0, 'l'}, + {0, 0, 0, 0} + }; + + int opt_index = 0; + int c; + + while ((c = getopt_long (argc, argv, "s:e:t:g:p:d:ml:", long_options, &opt_index)) != -1) { + switch (c) { + case 's': + st = atoi(optarg); + break; + case 'e': + en = atoi(optarg); + break; + case 't': + stride = atoi(optarg); + break; + case 'g': + gain = atof(optarg); + break; + case 'p': + pred = atof(optarg); + break; + case 'd': + frame_delay = atoi(optarg); + break; + case 'm': + removemean = 1; + break; + case 'l': + lower = atof(optarg); + break; + default: + helpmsg: + fprintf(stderr, "usage: %s -s startCol -e endCol [-t strideCol -g gain -p predCoeff -d framesDelay --removemean --lower] input.f32 output.f32\n", argv[0]); + exit(1); + } + } + if ( (argc - optind) < 2) { + fprintf(stderr, "Too few arguments\n"); + goto helpmsg; + } + + fin = fopen(argv[optind],"rb"); assert(fin != NULL); + fout = fopen(argv[optind+1],"wb"); assert(fout != NULL); + printf("extracting from %d to %d inclusive (stride %d) ... gain = %f pred = %f frame_delay = %d\n", + st, en, stride, gain, pred, frame_delay); + + float features[stride], features_prev[frame_delay][stride], delta[stride]; + int i,f,wr=0; + + for (f=0; f lower) { + fwrite(&delta[st], sizeof(float), en-st+1, fout); + wr++; + } + for (f=frame_delay-1; f>0; f--) + for(i=0; i quantized + + The first column is the log2 of the pitch compared to the lowest freq, + so log2(wo/pi*4000/50) where wo is the frequency your patch outputs. The + second column is the energy in dB, so 10*log10(1e-4+E) +*/ + +/* + Copyright (C) 2012 Jean-Marc Valin + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include + +#include +#include +#include + +#define MIN(a,b) ((a)<(b)?(a):(b)) +//#define COEF 0.0 + +static float COEF[2] = {0.8, 0.9}; +//static float COEF[2] = {0.0, 0.}; + +#define MAX_ENTRIES 16384 + +void compute_weights2(const float *x, const float *xp, float *w, int ndim) +{ + w[0] = 30; + w[1] = 1; + if (x[1]<0) + { + w[0] *= .6; + w[1] *= .3; + } + if (x[1]<-10) + { + w[0] *= .3; + w[1] *= .3; + } + /* Higher weight if pitch is stable */ + if (fabs(x[0]-xp[0])<.2) + { + w[0] *= 2; + w[1] *= 1.5; + } else if (fabs(x[0]-xp[0])>.5) /* Lower if not stable */ + { + w[0] *= .5; + } + + /* Lower weight for low energy */ + if (x[1] < xp[1]-10) + { + w[1] *= .5; + } + if (x[1] < xp[1]-20) + { + w[1] *= .5; + } + + //w[0] = 30; + //w[1] = 1; + + /* Square the weights because it's applied on the squared error */ + w[0] *= w[0]; + w[1] *= w[1]; + +} + +int find_nearest_weighted(const float *codebook, int nb_entries, float *x, const float *w, int ndim) +{ + int i, j; + float min_dist = 1e15; + int nearest = 0; + + for (i=0;i. +*/ + +#include +#include +#include +#include +#include "c2wideband.h" + +static const int Nt = C2WB_NT; +static const int K = C2WB_K; + +static const char usage[] = +"Usage: %s filename array_name\n" +"\tCreate C code for wideband DCT2 map.\n"; + +static const char format[] = +"The table format must be:\n" +"\t8 rows by 30 (Nt x K) floating point numbers to fill the specified dimensions.\n"; + +static const char header[] = +"/* THIS IS A GENERATED FILE. Edit generate_wideband_map.c and its input */\n\n" +"/*\n" +" * This intermediary file and the files that used to create it are under \n" +" * The LGPL. See the file COPYING.\n" +" */\n\n" +"#include \"defines.h\"\n\n"; + + +static void +dump_array(float b[Nt][K]) +{ + + printf("static const float c2wideband_map[%d][%d] = {\n", Nt, K); + int row, col; + for (row = 0; row < Nt; row++ ) { + printf("{ "); + for (col = 0; col < K; col++ ) { + printf(" %g", b[row][col]); + if ( col < K - 1 ) + printf(", "); + else + printf(" }"); + } + if ( row < Nt - 1 ) + printf(",\n"); + else + printf("\n"); + } + printf("};\n"); +} + + + +float +get_float(FILE * in, const char * name, char * * cursor, char * buffer, + int size) +{ + for ( ; ; ) { + char * s = *cursor; + char c; + + while ( (c = *s) != '\0' && !isdigit(c) && c != '-' && c != '.' ) + s++; + + /* Comments start with "#" and continue to the end of the line. */ + if ( c != '\0' && c != '#' ) { + char * end = 0; + float f = 0; + + f = strtod(s, &end); + + if ( end != s ) + *cursor = end; + return f; + } + + if ( fgets(buffer, size, in) == NULL ) { + fprintf(stderr, "%s: Format error. %s\n", name, format); + exit(1); + } + *cursor = buffer; + } +} + +static void +load(FILE * file, const char * name, float b[Nt][K]) +{ + char line[1024]; + char * cursor = line; + + *cursor = '\0'; + int row, col; + + for (row = 0; row < Nt; row++ ) { + + for (col = 0; col < K; col++ ) { + + b[row][col] = get_float(file, name, &cursor, line, sizeof(line)); + } + } + +} + + +int main(int argc, char * * argv) +{ + float b[Nt][K]; + int i; + + if ( argc < 2 ) { + fprintf(stderr, usage, argv[0]); + fprintf(stderr, format); + exit(1); + } + + i=0; + FILE * in = fopen(argv[i + 2], "r"); + + if ( in == NULL ) { + perror(argv[i + 2]); + exit(1); + } + + load(in, argv[i + 2], b); + + fclose(in); + + printf(header); + + printf(" /* %s */\n", argv[i + 2]); + dump_array(b); + + return 0; +} diff --git a/libcodec2-android/src/codec2/misc/genlsp.c b/libcodec2-android/src/codec2/misc/genlsp.c new file mode 100644 index 0000000..342e7ff --- /dev/null +++ b/libcodec2-android/src/codec2/misc/genlsp.c @@ -0,0 +1,183 @@ +/*--------------------------------------------------------------------------*\ + + FILE........: genlsp.c + AUTHOR......: David Rowe + DATE CREATED: 23/2/95 + + This program genrates a text file of LSP vectors from an input + speech file. + +\*--------------------------------------------------------------------------*/ + +/* + Copyright (C) 2009 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#define P 12 /* LP order */ +#define LSP_DELTA1 0.01 /* grid spacing for LSP root searches */ +#define NW 279 /* frame size in samples */ +#define N 80 /* frame to frame shift */ +#define THRESH 40.0 /* threshold energy/sample for frame inclusion */ +#define PI 3.141592654 /* mathematical constant */ + +#include +#include +#include +#include +#include "lpc.h" /* LPC analysis functions */ +#include "lsp.h" /* LSP encode/decode functions */ + +int switch_present(sw,argc,argv) + char sw[]; /* switch in string form */ + int argc; /* number of command line arguments */ + char *argv[]; /* array of command line arguments in string form */ +{ + int i; /* loop variable */ + + for(i=1; i THRESH) { + af++; + printf("Active Frame: %ld unstables: %d\n",af, unstables); + + find_aks(Sn, ak, NW, P, &Eres); + roots = lpc_to_lsp(ak, P , lsp, 5, LSP_DELTA1); + if (roots == P) { + if (lspd) { + if (log) { + fprintf(flsp,"%f ",log10(lsp[0])); + for(i=1; i +#include +#include +#include +#include +#include + +#define TWO_PI 6.283185307 +#define FS 8000.0 +#define AMP 10000.0 + +int main(int argc, char *argv[]) { + FILE *f; + int i,n; + float freq, length; + short *buf; + + if (argc != 4) { + printf("usage: %s outputFile frequencyHz lengthSecs\n", argv[0]); + exit(1); + } + + if (strcmp(argv[1], "-") == 0) { + f = stdout; + } else if ( (f = fopen(argv[1],"wb")) == NULL ) { + fprintf(stderr, "Error opening output file: %s: %s.\n", argv[3], strerror(errno)); + exit(1); + } + freq = atof(argv[2]); + length = atof(argv[3]); + n = length*FS; + buf = (short*)malloc(sizeof(short)*n); + assert(buf != NULL); + + for(i=0; i +#include +#include +#include +#include +#include +#include "lpc.h" + +#define N 80 + +int main(int argc, char*argv[]) { + FILE *fin, *fout; + short buf[N]; + float Sn[N], Sn_pre[N]; + float pre_mem = 0.0; + int i; + + if (argc != 3) { + printf("usage: pre InputRawSpeechFile OutputRawSpeechFile\n"); + printf("e.g pre input.raw output.raw\n"); + exit(1); + } + + if (strcmp(argv[1], "-") == 0) fin = stdin; + else if ( (fin = fopen(argv[1],"rb")) == NULL ) { + fprintf(stderr, "Error opening input speech file: %s: %s.\n", + argv[1], strerror(errno)); + exit(1); + } + + if (strcmp(argv[2], "-") == 0) fout = stdout; + else if ( (fout = fopen(argv[2],"wb")) == NULL ) { + fprintf(stderr, "Error opening output speech file: %s: %s.\n", + argv[2], strerror(errno)); + exit(1); + } + + while(fread(buf, sizeof(short), N, fin) == N) { + for(i=0; i +#include +#include +#include + +int main(int argc, char *argv[]) { + FILE *fraw, *fheader; + int i, samples, ret; + short sam; + + if (argc != 5) { + printf("usage: %s inputRawFile outputHeaderFile arrayName samples\n", argv[0]); + exit(1); + } + + fraw = fopen(argv[1] ,"rb"); + assert(fraw != NULL); + fheader = fopen(argv[2],"wt"); + assert(fheader != NULL); + samples = atoi(argv[4]); + + fprintf(fheader, "short %s[] = {\n", argv[3]); + for(i=0; i. +*/ + +#define MAX_N 2048 /* maximum DFT size */ + +#include +#include "four1.h" +#include "comp.h" +#include "sd.h" + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: spectral_dist() + + AUTHOR......: David Rowe + DATE CREATED: 20/7/93 + + This function returns the soectral distoertion between two + sets of LPCs. + +\*---------------------------------------------------------------------------*/ + +float spectral_dist(float ak1[], float ak2[], int p, int n) +/* float ak1[]; unquantised set of p+1 LPCs */ +/* float ak2[]; quantised set of p+1 LPCs */ +/* int p; LP order */ +/* int n; DFT size to use for SD calculations (power of 2) */ +{ + COMP A1[MAX_N]; /* DFT of ak1[] */ + COMP A2[MAX_N]; /* DFT of ak2[] */ + float P1,P2; /* power of current bin */ + float sd; + int i; + + for(i=0; i. +*/ + +#ifndef __SD__ +#define __SD__ + +float spectral_dist(float ak1[], float ak2[], int p, int n); + +#endif /* __SD__ */ diff --git a/libcodec2-android/src/codec2/misc/speexnoisesup.c b/libcodec2-android/src/codec2/misc/speexnoisesup.c new file mode 100644 index 0000000..f76d5e2 --- /dev/null +++ b/libcodec2-android/src/codec2/misc/speexnoisesup.c @@ -0,0 +1,59 @@ +/*----------------------------------------------------------------------------*\ + + FILE....: speexnoisesup.c + AUTHOR..: David Rowe + CREATED.: Sun 22 June 2014 + + File I/O based test program for Speex pre-processor, used for + initial testing of Speech noise supression. + +\*----------------------------------------------------------------------------*/ + +#include +#include +#include +#include +#include +#include + +#define N 80 +#define FS 8000 + +int main(int argc, char *argv[]) { + FILE *fin, *fout; + short buf[N]; + SpeexPreprocessState *st; + + if (argc < 2) { + printf("usage: %s InFile OutFile\n", argv[0]); + exit(0); + } + + if (strcmp(argv[1], "-") == 0) fin = stdin; + else if ( (fin = fopen(argv[1],"rb")) == NULL ) { + fprintf(stderr, "Error opening %s\n", argv[1]); + exit(1); + } + + if (strcmp(argv[2], "-") == 0) fout = stdout; + else if ((fout = fopen(argv[2],"wb")) == NULL) { + fprintf(stderr, "Error opening %s\n", argv[2]); + exit(1); + } + + st = speex_preprocess_state_init(N, FS); + + while(fread(buf, sizeof(short), N, fin) == N) { + speex_preprocess_run(st, buf); + fwrite(buf, sizeof(short), N, fout); + if (fin == stdin) fflush(stdin); + if (fout == stdout) fflush(stdout); + } + + speex_preprocess_state_destroy(st); + + fclose(fin); + fclose(fout); + + return 0; +} diff --git a/libcodec2-android/src/codec2/misc/t16_8.c b/libcodec2-android/src/codec2/misc/t16_8.c new file mode 100644 index 0000000..f6d83ba --- /dev/null +++ b/libcodec2-android/src/codec2/misc/t16_8.c @@ -0,0 +1,111 @@ +/* + t16_8.c + David Rowe + May 10 2012 + + Unit test for 16 to 8 kHz sample rate conversion functions. I + evaluated output by plotting using Octave and looking for jaggies: + + pl("../unittest/out16.raw",1,3000) + pl("../unittest/out8.raw",1,3000) + + Listening to it also shows up anything nasty: + + $ play -s -2 -r 16000 out16.raw + $ play -s -2 -r 8000 out8.raw + + */ + +#include +#include +#include +#include +#include "codec2_fdmdv.h" + +#define N8 160 /* procssing buffer size at 8 kHz */ +#define N16 (N8*FDMDV_OS) +#define FRAMES 50 +#define TWO_PI 6.283185307 +#define FS 16000 + +#define SINE + +int main() { + float in8k[FDMDV_OS_TAPS_8K + N8]; + float out16k[N16]; + short out16k_short[N16]; + FILE *f16; + + float in16k[FDMDV_OS_TAPS_16K + N16]; + float out8k[N16]; + short out8k_short[N8]; + FILE *f8; + + int i,f,t,t1; + float freq = 800.0; + + f16 = fopen("out16.raw", "wb"); + assert(f16 != NULL); + f8 = fopen("out8.raw", "wb"); + assert(f8 != NULL); + + /* clear filter memories */ + + for(i=0; i +#include +#include +#include +#include "codec2_fdmdv.h" + +#define N8 160 /* procssing buffer size at 8 kHz */ +#define N16 (N8*FDMDV_OS) +#define FRAMES 100 +#define TWO_PI 6.283185307 +#define FS 16000 + +#define SINE + +int main() { + short in8k_short[FDMDV_OS_TAPS_8K + N8]; + short out16k_short[N16]; + FILE *f16; + + short in16k_short[FDMDV_OS_TAPS_16K + N16]; + short out8k_short[N16]; + FILE *f8; + + int i,f,t,t1; + float freq = 800.0; + + f16 = fopen("out16_short.raw", "wb"); + assert(f16 != NULL); + f8 = fopen("out8.raw", "wb"); + assert(f8 != NULL); + + /* clear filter memories */ + + for(i=0; i +#include +#include +#include +#include "codec2_fdmdv.h" + +#define N8 160 /* procssing buffer size at 8 kHz */ +#define N48 (N8*FDMDV_OS) +#define MEM8 (FDMDV_OS_TAPS/FDMDV_OS) +#define FRAMES 50 +#define TWO_PI 6.283185307 +#define FS 8000 + +#define SINE + +int main() { + float in8k[MEM8 + N8]; + float out48k[N48]; + short out48k_short[N48]; + FILE *f48; + + float in48k[FDMDV_OS_TAPS + N48]; + float out8k[N48]; + short out8k_short[N8]; + FILE *f8; + + int i,f,t,t1; + float freq = 800.0; + + f48 = fopen("out48.raw", "wb"); + assert(f48 != NULL); + f8 = fopen("out8.raw", "wb"); + assert(f8 != NULL); + + /* clear filter memories */ + + for(i=0; i +#include +#include +#include +#include +#include + +#include "t_helpers.h" +#include "c2wideband.h" +#include "codec2.h" +#include "defines.h" +#include "codec2_fft.h" +#include "sine.h" +#include "nlp.h" +#include "dump.h" +#include "octave.h" +#include "newamp1.h" +#include "quantise.h" + +#define FRAMES 160 + +float mean(float data[], int n); +int unit_test(); +float std(float data[], int rows); +void diff_de(int rows, int cols, float D[rows][cols], float E[rows][cols], float diff_de[rows][cols]); +void array_col_to_row(int rows, int cols, float data[rows][cols], int col, float res[]); +void std_on_cols(int rows, int cols, float data[rows][cols], float res[]); +float mean_std_diff_de(int rows, int cols, float D[rows][cols], float E[rows][cols]); +void test_wideband_enc_dec(); +void setup_map(WIDEBAND_MAP * wb_map, int Nt, int K); +void test_with_real_data(int argc, char *argv[]); + +int main(int argc, char *argv[]) +{ + + printf("Testing file c2wideband\n"); + + test("mean"); + int n = 5; + float in[] = {1.0, 2.0, 4.0, 6.0, 10.0}; + float res_f; + float expect_f; + + res_f = mean(in, n); + expect_f = 23.0 / 5; + if (res_f != expect_f) { + test_failed_f(expect_f, res_f); + } + + test("std"); + res_f = std(in, n); + expect_f = 3.2000000000000002; + if (res_f != expect_f) { + test_failed_f(expect_f, res_f); + } + + + test("diff_de"); + int rows = 5; + int cols = 3; + float D[rows][cols]; + float E[rows][cols]; + float res_diff_de[rows][cols]; + float expect_diff_de[rows][cols]; + int r, c; + + for (r = 0; r < rows; r++) { + for (c = 0; c < cols; c++) { + float d = rand(); + float e = rand(); + D[r][c] = d; + E[r][c] = e; + expect_diff_de[r][c] = d - e; + } + } + + diff_de(rows, cols, D, E, res_diff_de); + + if (memcmp(res_diff_de, expect_diff_de, rows * cols * sizeof (float)) != 0) { + test_failed(); + } + + + test("array_col_to_row"); + float data[rows][cols]; + float res_data[rows]; + float expect_data[cols][rows]; + for (r = 0; r < rows; r++) { + for (c = 0; c < cols; c++) { + float d = rand(); + data[r][c] = d; + expect_data[c][r] = d; + } + } + for (c = 0; c < cols; c++) { + + array_col_to_row(rows, cols, data, c, res_data); + if (memcmp(res_data, expect_data[c], cols * sizeof (float)) != 0) { + test_failed(); + } + } + + + test("std_on_cols"); + + cols = 4; + + float data_std[5][4] = { + {1.0, 1.0, 4.0, 6.0}, + {1.0, 2.0, 5.5, 6.0}, + {1.0, 4.0, 6.0, 6.0}, + {1.0, 6.0, 3.3, 6.0}, + {1.0, 10.0, -0.2, 6.0} + }; + + float res_data_std[cols]; + float expect_data_std[] = {0.0, 3.2000000000000002, 2.1903424389807178, 0.0}; + + std_on_cols(rows, cols, data_std, res_data_std); + if (memcmp(res_data_std, expect_data_std, cols * sizeof (float)) != 0) { + test_failed(fn); + } + + test("mean_std_diff_de"); + + cols = 4; + + float data_std_d[5][4] = { + {2.0, 1.0, 5.0, 6.0}, + {1.0, 2.0, 10.5, 6.0}, + {4.0, 4.0, 12.0, 6.0}, + {1.0, 6.0, 4.6, 6.0}, + {6.5, 10.0, 0.0, 6.0} + }; + + float data_std_e[5][4] = { + {1.0, 0.0, 1.0, 0.0}, + {0.0, 0.0, 5.0, 0.0}, + {3.0, 0.0, 6.0, 0.0}, + {0.0, 0.0, 1.3, 0.0}, + {5.5, 0.0, 0.2, 0.0} + }; + + float expected_msd = (3.2000000000000002 + 2.1903424389807178) / cols; + + float res_msd; + res_msd = mean_std_diff_de(rows, cols, data_std_d, data_std_e); + if (abs(res_msd - expected_msd) > 0.00001) { + test_failed_f(res_msd, expected_msd); + } + + test_wideband_enc_dec(); + + test_with_real_data(argc, argv); + + return 1; +} + +void test_wideband_enc_dec() +{ + + test("wideband_enc_dec"); + + short *buf; + unsigned char *bits; + //int nsam, nbit, i, r; + int nbit; + int nsam; + int n_block_frames = C2WB_NT * C2WB_DEC; + int K = C2WB_K; + int Nt = C2WB_NT; + int Fs = C2WB_FS; + int dec = C2WB_DEC; + int Nblocks = n_block_frames; + int rate_K_surface_size = Nblocks * Nt * dec; + + struct CODEC2 * codec2 = codec2_create(CODEC2_MODE_WB); + + C2CONST c2const = c2const_create(Fs, N_S); + nsam = C2WB_SPERF; //codec2_samples_per_frame(codec2); + nbit = C2WB_BPERF; //codec2_bits_per_frame(codec2); + + buf = (short*) malloc(nsam * sizeof (short)); + bits = (unsigned char*) malloc(nbit * sizeof (char)); + + WIDEBAND_MAP wb_map; + setup_map(&wb_map, Nt, K); + + MODEL model_block[n_block_frames]; + MODEL model_block_[n_block_frames]; + float dct2_sd[Nblocks]; + int qn; + float rate_K_surface_block[rate_K_surface_size][K]; // rate K vecs for each frame, form a surface that makes pretty graphs + float rate_K_surface_block_[rate_K_surface_size][K]; + int n, i; + + for (n = 0; n < n_block_frames; n++) { + model_block[n].L = 10; + model_block[n].Wo = (float) rand() / RAND_MAX; + for (i = 0; i < MAX_AMP + 1; i++) { + model_block[n].phi[i] = (float) rand() / RAND_MAX; + model_block[n].A[i] = (float) rand() / RAND_MAX; + } + model_block[n].voiced = round((float) rand() / RAND_MAX); + } + + n = 0; + + printf("setup complete. now calling the function\n"); + + wideband_enc_dec(&c2const, n_block_frames, model_block, &wb_map, + model_block_, dct2_sd, &qn, &rate_K_surface_block[n], &rate_K_surface_block_[n]); + + codec2_destroy(codec2); + free(bits); + free(buf); + printf("made it to the end\n"); +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: test_with_real_data() + AUTHOR......: David Rowe + DATE CREATED: July 2017 + + Tests the wideband functions with real data derived from input + speech samples. Test vectors are dumped to Octave vectors so they can + be verified against the Octave version of the wideband functions. + + Supports rapid go/no-go testing of the C port when any canges are + made, and flushes out bugs in the C and octave version. + +\*---------------------------------------------------------------------------*/ + +void test_with_real_data(int argc, char *argv[]) +{ + int Nt = C2WB_NT; + int Fs = C2WB_FS; + int K = C2WB_K; + + C2CONST c2const = c2const_create(Fs, N_S); + int n_samp = c2const.n_samp; + int m_pitch = c2const.m_pitch; + short buf[n_samp]; /* input/output buffer */ + float Sn[m_pitch]; /* float input speech samples */ + COMP Sw[FFT_ENC]; /* DFT of Sn[] */ + codec2_fft_cfg fft_fwd_cfg; /* fwd FFT states */ + float w[m_pitch]; /* time domain hamming window */ + COMP W[FFT_ENC]; /* DFT of w[] */ + MODEL model[FRAMES]; + void *nlp_states; + float pitch, prev_f0; + int i, m, f; + + if (argc != 2) { + printf("test_with_real_data usage: .%s RawFile\n", argv[0]); + exit(1); + } + + nlp_states = nlp_create(&c2const); + prev_f0 = 1.0 / P_MAX_S; + fft_fwd_cfg = codec2_fft_alloc(FFT_ENC, 0, NULL, NULL); + make_analysis_window(&c2const, fft_fwd_cfg, w, W); + + for (i = 0; i < m_pitch; i++) { + Sn[i] = 1.0; + } + + WIDEBAND_MAP wb_map; + setup_map(&wb_map, Nt, K); + int n_block_frames = C2WB_NT * C2WB_DEC; + + float model_octave[FRAMES][MAX_AMP + 2]; // model params in matrix format, useful for C <-> Octave + float rate_K_surface[FRAMES][K]; // rate K vecs for each frame, form a surface that makes pretty graphs + float rate_K_surface_[FRAMES][K]; + MODEL model_block_[n_block_frames]; + + int Nblocks = FRAMES / n_block_frames; + float dct2_sd[Nblocks]; + int qn; + + for (f = 0; f < FRAMES; f++) { + for (m = 0; m < MAX_AMP + 2; m++) { + model_octave[f][m] = 0.0; + } + } + + FILE *fin = fopen(argv[1], "rb"); + if (fin == NULL) { + fprintf(stderr, "Problem opening %s\n", argv[1]); + exit(1); + } + + for (f = 0; f < FRAMES; f++) { + assert(fread(buf, sizeof (short), n_samp, fin) == n_samp); + + /* shift buffer of input samples, and insert new samples */ + + for (i = 0; i < m_pitch - n_samp; i++) { + Sn[i] = Sn[i + n_samp]; + } + for (i = 0; i < n_samp; i++) { + Sn[i + m_pitch - n_samp] = buf[i]; + } + + /* Estimate Sinusoidal Model Parameters ----------------------*/ + + nlp(nlp_states, Sn, n_samp, &pitch, Sw, W, &prev_f0); + model[f].Wo = TWO_PI / pitch; + + dft_speech(&c2const, fft_fwd_cfg, Sw, Sn, w); + two_stage_pitch_refinement(&c2const, &model[f], Sw); + estimate_amplitudes(&model[f], Sw, W, 1); + est_voicing_mbe(&c2const, &model[f], Sw, W); + + fprintf(stderr, "f: %d Wo: %4.3f L: %d v: %d\n", f, model[f].Wo, model[f].L, model[f].voiced); + + /* log some vectors for sinusoidal model */ + + model_octave[f][0] = model[f].Wo; + model_octave[f][1] = model[f].L; + + for (m = 1; m <= model[f].L; m++) { + model_octave[f][m + 1] = model[f].A[m]; + } + + /* once we have collected a block of samples process ----------*/ + + if (((f + 1) % n_block_frames) == 0) { + + /* wideband processing ----------------------------------------*/ + + int block_st = f - n_block_frames + 1; + wideband_enc_dec(&c2const, n_block_frames, &model[block_st], &wb_map, + model_block_, dct2_sd, &qn, + &rate_K_surface[block_st], + &rate_K_surface_[block_st]); + + fprintf(stderr, " Performed a wideband_enc_dec() call, qn: %d\n", qn); + + /* todo: add a synthesis stage here to output decoded speech from model_block_ */ + } + } + + fclose(fin); + + /* save vectors in Octave format */ + + FILE *fout = fopen("tc2wideband_out.txt", "wt"); + assert(fout != NULL); + fprintf(fout, "# Created by tc2wideband.c\n"); + octave_save_float(fout, "rate_K_surface_c", (float*) rate_K_surface, FRAMES, K, K); + octave_save_float(fout, "model_c", (float*) model_octave, FRAMES, MAX_AMP + 2, MAX_AMP + 2); + fclose(fout); + + printf("Done! Now run\n octave:1> tc2wideband(\"../path/to/tc2wideband_out.txt\")\n"); +} diff --git a/libcodec2-android/src/codec2/misc/tcodec2.c b/libcodec2-android/src/codec2/misc/tcodec2.c new file mode 100644 index 0000000..ecb81d7 --- /dev/null +++ b/libcodec2-android/src/codec2/misc/tcodec2.c @@ -0,0 +1,220 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: tcodec2.c + AUTHOR......: David Rowe + DATE CREATED: 24/8/10 + + Test program for codec2.c functions. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2010 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include +#include +#include +#include +#include "defines.h" +#include "comp.h" +#include "codec2.h" +#include "quantise.h" +#include "interp.h" + +/* CODEC2 struct copies from codec2.c to help with testing */ + +struct CODEC2 { + int mode; + float w[M]; /* time domain hamming window */ + COMP W[FFT_ENC]; /* DFT of w[] */ + float Pn[2*N]; /* trapezoidal synthesis window */ + float Sn[M]; /* input speech */ + float hpf_states[2]; /* high pass filter states */ + void *nlp; /* pitch predictor states */ + float Sn_[2*N]; /* synthesised output speech */ + float ex_phase; /* excitation model phase track */ + float bg_est; /* background noise estimate for post filter */ + float prev_Wo; /* previous frame's pitch estimate */ + MODEL prev_model; /* previous frame's model parameters */ + float prev_lsps_[LPC_ORD]; /* previous frame's LSPs */ + float prev_energy; /* previous frame's LPC energy */ +}; + +void analyse_one_frame(struct CODEC2 *c2, MODEL *model, short speech[]); +void synthesise_one_frame(struct CODEC2 *c2, short speech[], MODEL *model, float ak[]); + +int test1() +{ + FILE *fin, *fout; + short buf[N]; + struct CODEC2 *c2; + MODEL model; + float ak[LPC_ORD+1]; + float lsps[LPC_ORD]; + + c2 = codec2_create(CODEC2_MODE_2400); + + fin = fopen("../raw/hts1a.raw", "rb"); + assert(fin != NULL); + fout = fopen("hts1a_test.raw", "wb"); + assert(fout != NULL); + + while(fread(buf, sizeof(short), N, fin) == N) { + analyse_one_frame(c2, &model, buf); + speech_to_uq_lsps(lsps, ak, c2->Sn, c2->w, LPC_ORD); + synthesise_one_frame(c2, buf, &model, ak); + fwrite(buf, sizeof(short), N, fout); + } + + codec2_destroy(c2); + + fclose(fin); + fclose(fout); + + return 0; +} + +int test2() +{ + FILE *fin, *fout; + short buf[2*N]; + struct CODEC2 *c2; + MODEL model, model_interp; + float ak[LPC_ORD+1]; + int voiced1, voiced2; + int lsp_indexes[LPC_ORD]; + int energy_index; + int Wo_index; + char *bits; + int nbit; + int i; + float lsps[LPC_ORD]; + float e; + + c2 = codec2_create(CODEC2_MODE_2400); + bits = (char*)malloc(codec2_bits_per_frame(c2)); + assert(bits != NULL); + fin = fopen("../raw/hts1a.raw", "rb"); + assert(fin != NULL); + fout = fopen("hts1a_test.raw", "wb"); + assert(fout != NULL); + + while(fread(buf, sizeof(short), 2*N, fin) == 2*N) { + /* first 10ms analysis frame - we just want voicing */ + + analyse_one_frame(c2, &model, buf); + voiced1 = model.voiced; + + /* second 10ms analysis frame */ + + analyse_one_frame(c2, &model, &buf[N]); + voiced2 = model.voiced; + + Wo_index = encode_Wo(model.Wo); + e = speech_to_uq_lsps(lsps, ak, c2->Sn, c2->w, LPC_ORD); + encode_lsps_scalar(lsp_indexes, lsps, LPC_ORD); + energy_index = encode_energy(e); + nbit = 0; + pack((unsigned char*)bits, (unsigned *)&nbit, Wo_index, WO_BITS); + for(i=0; iprev_model, &model); + + synthesise_one_frame(c2, buf, &model_interp, ak); + synthesise_one_frame(c2, &buf[N], &model, ak); + + memcpy(&c2->prev_model, &model, sizeof(MODEL)); + fwrite(buf, sizeof(short), 2*N, fout); + } + + free(bits); + codec2_destroy(c2); + + fclose(fin); + fclose(fout); + + return 0; +} + +int test3() +{ + FILE *fin, *fout, *fbits; + short buf1[2*N]; + short buf2[2*N]; + char *bits; + struct CODEC2 *c2; + + c2 = codec2_create(CODEC2_MODE_2400); + int numBits = codec2_bits_per_frame(c2); + int numBytes = (numBits+7)>>3; + + bits = (char*)malloc(numBytes); + + fin = fopen("../raw/hts1a.raw", "rb"); + assert(fin != NULL); + fout = fopen("hts1a_test.raw", "wb"); + assert(fout != NULL); + fbits = fopen("hts1a_test3.bit", "wb"); + assert(fout != NULL); + + while(fread(buf1, sizeof(short), 2*N, fin) == 2*N) { + codec2_encode(c2, (void*)bits, buf1); + fwrite(bits, sizeof(char), numBytes, fbits); + codec2_decode(c2, buf2, (void*)bits); + fwrite(buf2, sizeof(short), numBytes, fout); + } + + free(bits); + codec2_destroy(c2); + + fclose(fin); + fclose(fout); + fclose(fbits); + + return 0; +} + +int main() { + test3(); + return 0; +} diff --git a/libcodec2-android/src/codec2/misc/tdct2.c b/libcodec2-android/src/codec2/misc/tdct2.c new file mode 100644 index 0000000..2b0ca55 --- /dev/null +++ b/libcodec2-android/src/codec2/misc/tdct2.c @@ -0,0 +1,176 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: tdct2.c + AUTHOR......: Phil Ayres + DATE CREATED: July 2017 + + * Unit test for DCT & DCT2 functions + * +\*---------------------------------------------------------------------------*/ + +/* + Copyright David Rowe 2017 + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . + + */ + + +#include +#include +#include +#include +#include +#include + +#include "t_helpers.h" +#include "dct2.h" + +int main() +{ + int i; + int j; + + test("dct"); + + int N = 4; + + codec2_dct_cfg dct_cfg = dct_config(N); + + float y[] = {1, 2, 3, 4}; + float expect_dct[] = {20, -6.30864406, 0, -0.44834153}; + float res_dct[N]; + + dct(dct_cfg, N, y, res_dct); + + + for (i = 0; i < N; i++) { + //printf("Result = %f : %f\n", res_dct[i].real, res_dct[i].imag); + //printf("Expected = %f\n", expect_dct[i]); + if (abs(expect_dct[i] - res_dct[i]) > 0.00001) + test_failed_f(expect_dct[i], res_dct[i]); + } + + dct_cfg_free(dct_cfg); + + test("idct"); + + codec2_dct_cfg idct_cfg = idct_config(N); + + float *expect_idct = y; + float res_idct[N]; + + idct(idct_cfg, N, res_dct, res_idct); + + + for (i = 0; i < N; i++) { + //printf("Result = %f : %f\n", res_dct[i].real, res_dct[i].imag); + //printf("Expected = %f\n", expect_dct[i]); + if (abs(expect_idct[i] - res_idct[i]) > 0.00001) + test_failed_f(expect_idct[i], res_idct[i]); + } + + + dct_cfg_free(idct_cfg); + + test("dct2"); + + int M = 3; + + codec2_dct_cfg dct_cfg_n = dct_config(N); + codec2_dct_cfg dct_cfg_m = dct_config(M); + + + float expect_dct2[3][4] = { + { 180, -26.76530997, 8.48528137, 1.90215201}, + { 3.46410162, -9.60123774, -7.34846923, -3.97696289}, + { -66, 5.5432772, 4.24264069, 2.29610059} + }; + + float y2[3][4] = { + {1, 2, 3, 4}, + {5, 6, 7, 8}, + {3, 1, 2, 3} + }; + + + float res_dct2[M][N]; + dct2(dct_cfg_m, dct_cfg_n, M, N, y2, res_dct2); + + /* + printf("Result\n"); + for (i = 0; i < M; i++) { + for (j = 0; j < N; j++) { + printf("%f ", res_dct2[i][j]); + + //if (abs(expect_dct2[i][j] - res_dct2[i][j]) > 0.00001) + // test_failed_f(expect_dct2[i][j], res_dct2[i][j]); + } + printf("\n"); + } + printf("Expected\n"); + for (i = 0; i < M; i++) { + for (j = 0; j < N; j++) { + printf("%f ", expect_dct2[i][j]); + + //if (abs(expect_dct2[i][j] - res_dct2[i][j]) > 0.00001) + // test_failed_f(expect_dct2[i][j], res_dct2[i][j]); + } + printf("\n"); + } + */ + for (i = 0; i < M; i++) { + for (j = 0; j < N; j++) { + + if (abs(expect_dct2[i][j] - res_dct2[i][j]) > 0.00001) + test_failed_f(expect_dct2[i][j], res_dct2[i][j]); + } + + } + + + + dct_cfg_free(dct_cfg_m); + dct_cfg_free(dct_cfg_n); + test("idct2"); + + codec2_dct_cfg idct_cfg_n = idct_config(N); + codec2_dct_cfg idct_cfg_m = idct_config(M); + + + float expect_idct2[3][4] = { + {1, 2, 3, 4}, + {5, 6, 7, 8}, + {3, 1, 2, 3} + }; + + + float res_idct2[M][N]; + idct2(idct_cfg_m, idct_cfg_n, M, N, res_dct2, res_idct2); + + for (i = 0; i < M; i++) { + for (j = 0; j < N; j++) { + //printf("Result = %f \n", res_idct2[i][j]); + //printf("Expected = %f\n", expect_idct2[i][j]); + if (abs(expect_idct2[i][j] - res_idct2[i][j]) > 0.00001) + test_failed_f(expect_idct2[i][j], res_idct2[i][j]); + } + } + + dct_cfg_free(idct_cfg_m); + dct_cfg_free(idct_cfg_n); + + + printf("OK!\n"); +} \ No newline at end of file diff --git a/libcodec2-android/src/codec2/misc/tdec.c b/libcodec2-android/src/codec2/misc/tdec.c new file mode 100644 index 0000000..501edc6 --- /dev/null +++ b/libcodec2-android/src/codec2/misc/tdec.c @@ -0,0 +1,141 @@ +/* + tdec.c + David Rowe + Jan 2017 + + Trivial non filtered decimator for high ration sample rate conversion. + + build: gcc tdec.c -o tdec -Wall -O2 + +*/ + +#include +#include +#include +#include +#include +#include + +#define SIGNED_16BIT 0 +#define SIGNED_8BIT 1 +#define UNSIGNED_8BIT 2 + +void freq_shift_complex_buf(short buf[], int n, int lo_i[], int lo_q[]); + +void display_help(void) { + fprintf(stderr, "\nusage: tdec inputRawFile OutputRawFile DecimationRatio [-c]\n"); + fprintf(stderr, "\nUse - for stdin/stdout\n\n"); + fprintf(stderr, "-c complex signed 16 bit input and output\n"); + fprintf(stderr, "-d complex signed 8 bit input (e.g. HackRF), complex signed 16 bit output\n"); + fprintf(stderr, "-e complex unsigned 8 bit input (e.g. RTL-SDR), complex signed 16 bit output\n"); + fprintf(stderr, "-f -Fs/4 freq shift\n\n"); +} + +int main(int argc, char *argv[]) { + FILE *fin, *fout; + short dec; + int lo_i[3], lo_q[3]; + + if (argc < 3) { + display_help(); + exit(1); + } + + if (strcmp(argv[1], "-") == 0) + fin = stdin; + else + fin = fopen(argv[1], "rb"); + assert(fin != NULL); + + if (strcmp(argv[2], "-") == 0) + fout = stdout; + else + fout = fopen(argv[2], "wb"); + assert(fout != NULL); + + dec = atoi(argv[3]); + + int channels = 1; + int freq_shift = 0; + lo_i[0] = -1; lo_i[1] = 0; + lo_q[0] = 0; lo_q[1] = -1; + int opt; + int format = SIGNED_16BIT; + while ((opt = getopt(argc, argv, "cdef")) != -1) { + switch (opt) { + case 'c': channels = 2; break; + case 'd': channels = 2; format = SIGNED_8BIT; break; + case 'e': channels = 2; format = UNSIGNED_8BIT; break; + case 'f': freq_shift = 1; break; + default: + display_help(); + exit(1); + } + } + + if (format == SIGNED_16BIT) { + short buf[dec*channels]; + while(fread(buf, sizeof(short)*channels, dec, fin) == dec) { + if (freq_shift) + freq_shift_complex_buf(buf, dec*channels, lo_i, lo_q); + fwrite(buf, sizeof(short), channels, fout); + } + } + else { + uint8_t inbuf[dec*channels]; + short outbuf[dec*channels]; + short sam, i; + + while(fread(inbuf, sizeof(uint8_t)*channels, dec, fin) == dec) { + for (i=0; i +#include +#include +#include + +#define FS 8000 + +int main(int argc, char *argv[]) { + short buf[FS] = {0}; + float f0, n0; + + if (argc < 2) { + printf("usage: %s f0 n0 [filter]\n", argv[0]); + exit(1); + } + else { + f0 = atof(argv[1]); + n0 = atof(argv[2]); + } + float Wo = 2.0*M_PI*f0/FS; + int L = M_PI/Wo; + + for(int i=0; i. +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "defines.h" +#include "sine.h" +#include "interp.h" + +void make_amp(MODEL *model, float f0, float cdB, float mdBHz) +{ + int i; + float mdBrad = mdBHz*FS/TWO_PI; + + model->Wo = f0*TWO_PI/FS; + model->L = PI/model->Wo; + for(i=0; i<=model->L; i++) + model->A[i] = pow(10.0,(cdB + (float)i*model->Wo*mdBrad)/20.0); + model->voiced = 1; +} + +void write_amp(char file[], MODEL *model) +{ + FILE *f; + int i; + + f = fopen(file,"wt"); + for(i=1; i<=model->L; i++) + fprintf(f, "%f\t%f\n", model->Wo*i, model->A[i]); + fclose(f); +} + +const char *get_next_float(const char *s, float *num) +{ + const char *p = s; + char tmp[MAX_STR]; + + while(*p && !isspace(*p)) + p++; + assert((p-s) < (int)(sizeof(tmp)-1)); + memcpy(tmp, s, p-s); + tmp[p-s] = 0; + *num = atof(tmp); + + return p+1; +} + +const char *get_next_int(const char *s, int *num) +{ + const char *p = s; + char tmp[MAX_STR]; + + while(*p && !isspace(*p)) + p++; + assert((p-s) < (int)(sizeof(tmp)-1)); + memcpy(tmp, s, p-s); + tmp[p-s] = 0; + *num = atoi(tmp); + + return p+1; +} + +void load_amp(MODEL *model, const char * file, int frame) +{ + FILE *f; + int i; + char s[1024]; + const char *ps; + + f = fopen(file,"rt"); + assert(f); + + for(i=0; iWo); + ps = get_next_int(ps, &model->L); + for(i=1; i<=model->L; i++) + ps = get_next_float(ps, &model->A[i]); + + fclose(f); +} + +void load_or_make_amp(MODEL *model, + const char * filename, int frame, + float f0, float cdB, float mdBHz) +{ + struct stat buf; + int rc = stat(filename, &buf); + if (rc || !S_ISREG(buf.st_mode) || ((buf.st_mode & S_IRUSR) != S_IRUSR)) + { + make_amp(model, f0, cdB, mdBHz); + } + else + { + load_amp(model, filename, frame); + } +} +int main() { + MODEL prev, next, interp; + + load_or_make_amp(&prev, + "../src/hts1a_model.txt", 32, + 50.0, 60.0, 6E-3); + load_or_make_amp(&next, + "../src/hts1a_model.txt", 34, + 50.0, 40.0, 6E-3); + + interp.voiced = 1; + interpolate(&interp, &prev, &next); + + write_amp("tinterp_prev.txt", &prev); + write_amp("tinterp_interp.txt", &interp); + write_amp("tinterp_next.txt", &next); + + return 0; +} diff --git a/libcodec2-android/src/codec2/misc/tlininterp.c b/libcodec2-android/src/codec2/misc/tlininterp.c new file mode 100644 index 0000000..7db6791 --- /dev/null +++ b/libcodec2-android/src/codec2/misc/tlininterp.c @@ -0,0 +1,153 @@ +/* + tlininterp.c + David Rowe + Jan 2017 + + Fast linear interpolator for high oversampling rates. Upsample + with a decent filter first such that the signal is "low pass" wrt + to the input sample rate. + + build: gcc tlininterp.c -o tlininterp -Wall -O2 + +*/ + +#include +#include +#include +#include +#include +#include + +#define NBUF 1000 +#define SIGNED_16BIT 0 +#define SIGNED_8BIT 1 + +void display_help(void) { + fprintf(stderr, "\nusage: tlininterp inputRawFile OutputRawFile OverSampleRatio [-c]\n"); + fprintf(stderr, "\nUse - for stdin/stdout\n\n"); + fprintf(stderr, "-c complex signed 16 bit input and output\n"); + fprintf(stderr, "-d complex signed 16 bit input, complex signed 8 bit output\n"); + fprintf(stderr, "-f +Fs/4 freq shift\n\n"); +} + +int main(int argc, char *argv[]) { + FILE *fin, *fout; + short left[2], right[2], out[2*NBUF], i; + float oversample, t; + int8_t out_s8[2*NBUF]; + int lo_i[3], lo_q[3]; + + if (argc < 3) { + display_help(); + exit(1); + } + + if (strcmp(argv[1], "-") == 0) + fin = stdin; + else + fin = fopen(argv[1], "rb"); + assert(fin != NULL); + + if (strcmp(argv[2], "-") == 0) + fout = stdout; + else + fout = fopen(argv[2], "wb"); + assert(fout != NULL); + + oversample = atof(argv[3]); + if (oversample <= 1) { + display_help(); + exit(1); + } + + int channels = 1; + int freq_shift = 0; + lo_i[0] = -1; lo_i[1] = 0; + lo_q[0] = 0; lo_q[1] = -1; + int format = SIGNED_16BIT; + int opt; + while ((opt = getopt(argc, argv, "cdf")) != -1) { + switch (opt) { + case 'c': channels = 2; break; + case 'd': channels = 2; format = SIGNED_8BIT; break; + case 'f': freq_shift = 1; break; + default: + display_help(); + exit(1); + } + } + + for (i=0; i> 8; + } + fwrite(&out_s8, sizeof(int8_t)*channels, NBUF, fout); + } + j = 0; + } + + t += 1.0/oversample; + } + + t -= 1.0; + for (i=0; i> 8; + } + fwrite(&out_s8, sizeof(int8_t)*channels, j, fout); + } + + fclose(fout); + fclose(fin); + + return 0; +} diff --git a/libcodec2-android/src/codec2/misc/tnlp.c b/libcodec2-android/src/codec2/misc/tnlp.c new file mode 100644 index 0000000..35e2ea4 --- /dev/null +++ b/libcodec2-android/src/codec2/misc/tnlp.c @@ -0,0 +1,164 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: tnlp.c + AUTHOR......: David Rowe + DATE CREATED: 23/3/93 + + Test program for non linear pitch estimation functions. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2009 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + + +#include +#include +#include +#include + +#include "defines.h" +#include "dump.h" +#include "sine.h" +#include "nlp.h" +#include "kiss_fft.h" + +int frames; + +/*---------------------------------------------------------------------------*\ + + switch_present() + + Searches the command line arguments for a "switch". If the switch is + found, returns the command line argument where it ws found, else returns + NULL. + +\*---------------------------------------------------------------------------*/ + +int switch_present(sw,argc,argv) + char sw[]; /* switch in string form */ + int argc; /* number of command line arguments */ + char *argv[]; /* array of command line arguments in string form */ +{ + int i; /* loop variable */ + + for(i=1; i +#include +#include +#include +#include "lpc.h" + +#define N 10 +#define F 10 + +int main() { + FILE *fprede; + float Sn[N], Sn_pre[N], Sn_de[N]; + float pre_mem = 0.0, de_mem = 0.0; + int i, f; + + fprede = fopen("prede.txt", "wt"); + assert(fprede != NULL); + + for(i=0; i. +*/ + +#include +#include +#include +#include +#include + +#include "defines.h" +#include "dump.h" +#include "quantise.h" + +int test_Wo_quant(); +int test_lsp_quant(); +int test_lsp(int lsp_number, int levels, float max_error_hz); +int test_energy_quant(int levels, float max_error_dB); + +int main() { + quantise_init(); + test_Wo_quant(); + test_lsp_quant(); + test_energy_quant(E_LEVELS, 0.5*(E_MAX_DB - E_MIN_DB)/E_LEVELS); + + return 0; +} + +int test_lsp_quant() { + test_lsp( 1, 16, 12.5); + test_lsp( 2, 16, 12.5); + test_lsp( 3, 16, 25); + test_lsp( 4, 16, 50); + test_lsp( 5, 16, 50); + test_lsp( 6, 16, 50); + test_lsp( 7, 16, 50); + test_lsp( 8, 8, 50); + test_lsp( 9, 8, 50); + test_lsp(10, 4, 100); + + return 0; +} + +int test_energy_quant(int levels, float max_error_dB) { + FILE *fe; + float e,e_dec, error, low_e, high_e; + int index, index_in, index_out, i; + + /* check 1:1 match between input and output levels */ + + for(i=0; i max_error_dB) { + printf("error: %f %f\n", error, max_error_dB); + exit(0); + } + } + + fclose(fe); + return 0; +} + +int test_lsp(int lsp_number, int levels, float max_error_hz) { + float lsp[LPC_ORD]; + int indexes_in[LPC_ORD]; + int indexes_out[LPC_ORD]; + int indexes[LPC_ORD]; + int i; + float lowf, highf, f, error; + char s[MAX_STR]; + FILE *flsp; + float max_error_rads; + + lsp_number--; + max_error_rads = max_error_hz*TWO_PI/FS; + + for(i=0; i max_error_rads) { + printf("%d error: %f %f\n", lsp_number+1, error, max_error_rads); + exit(0); + } + } + + fclose(flsp); + + printf("OK\n"); + + return 0; +} + +int test_Wo_quant() { + int c; + FILE *f; + float Wo,Wo_dec, error, step_size; + int index, index_in, index_out; + + /* output Wo quant curve for plotting */ + + f = fopen("quant_pitch.txt","wt"); + + for(Wo=0.9*(TWO_PI/P_MAX); Wo<=1.1*(TWO_PI/P_MIN); Wo += 0.001) { + index = encode_Wo(Wo, WO_BITS); + fprintf(f, "%f %d\n", Wo, index); + } + + fclose(f); + + /* check for all Wo codes we get 1:1 match between encoder + and decoder Wo levels */ + + for(c=0; c (step_size/2.0)) { + printf("error: %f step_size/2: %f\n", error, step_size/2.0); + exit(0); + } + fprintf(f,"%f\n",error); + } + printf("OK\n"); + + fclose(f); + return 0; +} diff --git a/libcodec2-android/src/codec2/misc/tsrc.c b/libcodec2-android/src/codec2/misc/tsrc.c new file mode 100644 index 0000000..6791b51 --- /dev/null +++ b/libcodec2-android/src/codec2/misc/tsrc.c @@ -0,0 +1,109 @@ +/* + tsrc.c + David Rowe + Sat Nov 3 2012 + + Unit test for libresample code. + + build: gcc tsrc.c -o tsrc -lm -lsamplerate + + */ + +#include +#include +#include +#include +#include +#include +#include + +#define N 10000 /* processing buffer size */ + +void display_help(void) { + fprintf(stderr, "\nusage: tsrc inputRawFile OutputRawFile OutSampleRatio [-l] [-c]\n"); + fprintf(stderr, "\nUse - for stdin/stdout\n\n"); + fprintf(stderr, "-l fast linear resampler\n"); + fprintf(stderr, "-c complex (two channel) resampling\n\n"); +} + +int main(int argc, char *argv[]) { + FILE *fin, *fout; + short in_short[N], out_short[N]; + float in[N], out[N]; + SRC_STATE *src; + SRC_DATA data; + int error, nin, nremaining, i; + + if (argc < 3) { + display_help(); + exit(1); + } + + if (strcmp(argv[1], "-") == 0) + fin = stdin; + else + fin = fopen(argv[1], "rb"); + assert(fin != NULL); + + if (strcmp(argv[2], "-") == 0) + fout = stdout; + else + fout = fopen(argv[2], "wb"); + assert(fout != NULL); + + data.data_in = in; + data.data_out = out; + data.end_of_input = 0; + data.src_ratio = atof(argv[3]); + + int channels = 1; + int resampler = SRC_SINC_FASTEST; + int opt; + while ((opt = getopt(argc, argv, "lc")) != -1) { + switch (opt) { + case 'l': resampler = SRC_LINEAR; break; + case 'c': channels = 2; break; + default: + display_help(); + exit(1); + } + } + + data.input_frames = N/channels; + data.output_frames = N/channels; + + src = src_new(resampler, channels, &error); + assert(src != NULL); + + int total_in = 0; + int total_out = 0; + + nin = data.input_frames; + nremaining = 0; + while(fread(&in_short[nremaining*channels], sizeof(short)*channels, nin, fin) == nin) { + src_short_to_float_array(in_short, in, N); + error = src_process(src, &data); + assert(error == 0); + src_float_to_short_array(out, out_short, data.output_frames_gen*channels); + + fwrite(out_short, sizeof(short), data.output_frames_gen*channels, fout); + if (fout == stdout) fflush(stdout); + + nremaining = data.input_frames - data.input_frames_used; + nin = data.input_frames_used; + //fprintf(stderr, "input frames: %d output_frames %d nremaining: %d\n", + // (int)data.input_frames_used, (int)data.output_frames_gen, nremaining); + for(i=0; i +#include +#include +#include +#include +#include +#include "mbest.h" + +#define MAX_K 20 +#define MAX_ENTRIES 4096 +#define MAX_STAGES 5 + +void quant_pred_mbest(float vec_out[], + int indexes[], + float vec_in[], + int num_stages, + float vq[], + int m[], int k, + int mbest_survivors); + +int verbose = 0; + +int main(int argc, char *argv[]) { + float vq[MAX_STAGES*MAX_K*MAX_ENTRIES]; + int m[MAX_STAGES]; + int k=0, mbest_survivors=0, num_stages=0; + char fnames[256], fn[256], *comma, *p; + FILE *fq; + float lower = -1E32; + + int o = 0; int opt_idx = 0; + while (o != -1) { + static struct option long_opts[] = { + {"k", required_argument, 0, 'q'}, + {"quant", required_argument, 0, 'q'}, + {"mbest", required_argument, 0, 'm'}, + {"lower", required_argument, 0, 'l'}, + {"verbose", required_argument, 0, 'v'}, + {0, 0, 0, 0} + }; + + o = getopt_long(argc,argv,"hk:q:m:v",long_opts,&opt_idx); + switch (o) { + case 'k': + k = atoi(optarg); + assert(k < MAX_K); + break; + case 'q': + /* load up list of comma delimited file names */ + strcpy(fnames, optarg); + p = fnames; + num_stages = 0; + do { + assert(num_stages < MAX_STAGES); + strcpy(fn, p); + comma = strchr(fn, ','); + if (comma) { + *comma = 0; + p = comma+1; + } + /* load quantiser file */ + fprintf(stderr, "stage: %d loading %s ...", num_stages, fn); + fq=fopen(fn, "rb"); + if (fq == NULL) { + fprintf(stderr, "Couldn't open: %s\n", fn); + exit(1); + } + /* count how many entries m of dimension k are in this VQ file */ + m[num_stages] = 0; + float dummy[k]; + while (fread(dummy, sizeof(float), k, fq) == (size_t)k) + m[num_stages]++; + assert(m[num_stages] <= MAX_ENTRIES); + fprintf(stderr, "%d entries of vectors width %d\n", m[num_stages], k); + /* now load VQ into memory */ + rewind(fq); + int rd = fread(&vq[num_stages*k*MAX_ENTRIES], sizeof(float), m[num_stages]*k, fq); + assert(rd == m[num_stages]*k); + num_stages++; + fclose(fq); + } while(comma); + break; + case 'm': + mbest_survivors = atoi(optarg); + fprintf(stderr, "mbest_survivors = %d\n", mbest_survivors); + break; + case 'l': + lower = atof(optarg); + break; + case 'v': + verbose = 1; + break; + help: + fprintf(stderr, "usage: %s -k dimension -q vq1.f32,vq2.f32,.... [-m mbest_survivors] [--lower lowermeanLimit]\n", argv[0]); + fprintf(stderr, "input vectors on stdin, output quantised vectors on stdout\n"); + fprintf(stderr, "--mbest number of survivors at each stage, set to 0 for standard VQ search\n"); + exit(1); + } + } + + if ((num_stages == 0) || (k == 0)) + goto help; + + int indexes[num_stages], nvecs = 0; + float target[k], quantised[k]; + float sqe = 0.0; + while(fread(&target, sizeof(float), k, stdin)) { + int dont_count = 0; + /* optional clamping to lower limit or mean */ + float mean = 0.0; + for(int i=0; ilist[j].index[s1]; + } + /* target is residual err[] vector given path to this candidate */ + for(i=0; ilist[0].index[num_stages-1-s]; + } + + /* OK put it all back together using best survivor */ + for(i=0; i. +*/ + + +#ifdef VALGRIND +#include +#endif + +#include +#include +#include +#include + +#define MIN(a,b) ((a)<(b)?(a):(b)) +#define COEF 0.0f +#define MAX_ENTRIES 16384 + +void compute_weights(const float *x, float *w, int ndim) +{ + int i; + w[0] = MIN(x[0], x[1]-x[0]); + for (i=1;i. +*/ + +/*-----------------------------------------------------------------------*\ + + INCLUDES + +\*-----------------------------------------------------------------------*/ + +#include +#include +#include +#include +#include +#include +#include + +/*-----------------------------------------------------------------------*\ + + DEFINES + +\*-----------------------------------------------------------------------*/ + +#define DELTAQ 0.005 /* quiting distortion */ +#define MAX_STR 80 /* maximum string length */ + +/*-----------------------------------------------------------------------*\ + + FUNCTION PROTOTYPES + +\*-----------------------------------------------------------------------*/ + +void zero(float v[], int k); +void acc(float v1[], float v2[], int k); +void norm(float v[], int k, long n); +long quantise(float cb[], float vec[], int k, int m, float *beste, float *se); + +/*-----------------------------------------------------------------------* \ + + MAIN + +\*-----------------------------------------------------------------------*/ + +int main(int argc, char *argv[]) { + long k,m; /* dimension and codebook size */ + float *vec; /* current vector */ + float *cb; /* vector codebook */ + float *cent; /* centroids for each codebook entry */ + long *n; /* number of vectors in this interval */ + long J; /* number of vectors in training set */ + long i,j; + long ind; /* index of current vector */ + float e; /* sqaured error for current vector */ + float se; /* squared error for this iteration */ + float var,var_1; /* current and previous iterations distortion */ + float delta; /* improvement in distortion */ + long noutliers[3];/* number of vectors quantisers with > 3*sd */ + FILE *ftrain; /* file containing training set */ + FILE *fvq; /* file containing vector quantiser */ + int ret; + float deltaq_stop = DELTAQ; + FILE *fres = NULL; + + int o = 0; + int opt_idx = 0; + while( o != -1 ) { + static struct option long_opts[] = { + {"help", no_argument, 0, 'h'}, + {"residual", required_argument, 0, 'r'}, + {"stop", required_argument, 0, 's'}, + {0, 0, 0, 0} + }; + + o = getopt_long(argc,argv,"hr:s:",long_opts,&opt_idx); + + switch(o) { + case 'r': + fres = fopen(optarg,"wb"); assert(fres != NULL); + //fprintf(stderr, "writing res to : %s \n", optarg); + break; + case 's': + deltaq_stop = atof(optarg); + //fprintf(stderr, "deltaq_stop :%f\n", deltaq_stop); + break; + case 'h': + case '?': + goto helpmsg; + break; + } + } + int dx = optind; + + //fprintf(stderr, "argc: %d dx: %d\n", argc, dx); + if ((argc - dx) < 4) { + fprintf(stderr, "Too few arguments\n"); + helpmsg: + fprintf(stderr, "usage: %s [Options] TrainFile.f32 K(dimension) M(codebook size) VQFile.f32\n", argv[0]); + fprintf(stderr, " -r --residual VQResidualErrorFile.f32usage\n"); + fprintf(stderr, " -s --stop StopDelta\n"); + exit(1); + } + + /* Open training file */ + + ftrain = fopen(argv[dx],"rb"); + if (ftrain == NULL) { + printf("Error opening training database file: %s\n",argv[dx]); + exit(1); + } + + /* determine k and m, and allocate arrays */ + + k = atol(argv[dx+1]); + m = atol(argv[dx+2]); + printf("vector dimension K=%ld codebook size M=%ld ", k, m); + vec = (float*)malloc(sizeof(float)*k); + cb = (float*)malloc(sizeof(float)*k*m); + cent = (float*)malloc(sizeof(float)*k*m); + n = (long*)malloc(sizeof(long)*m); + if (cb == NULL || cb == NULL || cent == NULL || vec == NULL) { + printf("Error in malloc.\n"); + exit(1); + } + + /* determine size of training set */ + + J = 0; zero(cent, k); + while(fread(vec, sizeof(float), k, ftrain) == (size_t)k) { + J++; + acc(cent, vec, k); + } + printf("J=%ld vectors in training set\n", J); + + /* Interation is a 0 bit VQ (i.e. mean of training set) as starting point */ + + norm(cent, k, J); + memcpy(cb, cent, k*sizeof(float)); + se = 0.0; + rewind(ftrain); + for(i=0; i 1.0) noutliers[0]++; + if (sqrt(e/k) > 2.0) noutliers[1]++; + if (sqrt(e/k) > 3.0) noutliers[2]++; + } + var = se/(J*k); + delta = (var_1-var)/var; + + printf("\r It: %ld, var: %f sd: %f outliers > 1/2/3 dB = %3.2f/%f3.2/%3.2f Delta = %5.4f\n", j, var, sqrt(var), + (float)noutliers[0]/J, (float)noutliers[1]/J, (float)noutliers[2]/J, delta); + j++; + + /* determine new codebook from centroids */ + + if (delta > deltaq_stop) + for(i=0; i deltaq_stop); + + /* save VQ to disk */ + + fvq = fopen(argv[dx+3],"wt"); + if (fvq == NULL) { + printf("Error opening VQ file: %s\n",argv[dx+3]); + exit(1); + } + + fwrite(cb, sizeof(float), m*k, fvq); + + /* optionally output residual error for next stage VQ */ + + if (fres != NULL) { + float res[k]; + rewind(ftrain); + for(j=0; j +# name: HRA_112_112 +# type: matrix +# rows: 112 +# columns: 224 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 + 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 + 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 + 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 + + diff --git a/libcodec2-android/src/codec2/octave/HRA_112_56.txt b/libcodec2-android/src/codec2/octave/HRA_112_56.txt new file mode 100644 index 0000000..1df20d8 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/HRA_112_56.txt @@ -0,0 +1,63 @@ +# Created by Octave 3.8.1, Wed Mar 15 17:59:13 2017 ACDT +# name: HRA_112_56 +# type: matrix +# rows: 56 +# columns: 168 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 1 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 1 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 1 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 + 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 + 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 + 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 + 0 0 0 0 1 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 + + diff --git a/libcodec2-android/src/codec2/octave/HRA_504_396.txt b/libcodec2-android/src/codec2/octave/HRA_504_396.txt new file mode 100644 index 0000000..464ae61 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/HRA_504_396.txt @@ -0,0 +1,108 @@ + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 + 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 diff --git a/libcodec2-android/src/codec2/octave/HRA_56_28.txt b/libcodec2-android/src/codec2/octave/HRA_56_28.txt new file mode 100644 index 0000000..ae76248 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/HRA_56_28.txt @@ -0,0 +1,35 @@ +# Created by Octave 3.8.1, Wed Mar 15 18:20:20 2017 ACDT +# name: HRA_56_28 +# type: matrix +# rows: 28 +# columns: 84 + 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 1 0 0 1 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 1 0 0 0 1 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 1 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 1 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 + 0 0 0 1 0 0 0 0 0 0 0 0 1 0 1 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 + 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 1 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 1 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 + 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 + 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 + 0 1 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 + + diff --git a/libcodec2-android/src/codec2/octave/HRA_56_56.txt b/libcodec2-android/src/codec2/octave/HRA_56_56.txt new file mode 100644 index 0000000..8a18f2d --- /dev/null +++ b/libcodec2-android/src/codec2/octave/HRA_56_56.txt @@ -0,0 +1,63 @@ +# Created by Octave 3.8.1, Wed Mar 15 18:12:09 2017 ACDT +# name: HRA_56_56 +# type: matrix +# rows: 56 +# columns: 112 + 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 1 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 1 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 + 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 + 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 + + diff --git a/libcodec2-android/src/codec2/octave/HRAa_1536_512.mat b/libcodec2-android/src/codec2/octave/HRAa_1536_512.mat new file mode 100644 index 0000000..f561d5a Binary files /dev/null and b/libcodec2-android/src/codec2/octave/HRAa_1536_512.mat differ diff --git a/libcodec2-android/src/codec2/octave/H_128_256_5.mat b/libcodec2-android/src/codec2/octave/H_128_256_5.mat new file mode 100644 index 0000000..b6cd20b Binary files /dev/null and b/libcodec2-android/src/codec2/octave/H_128_256_5.mat differ diff --git a/libcodec2-android/src/codec2/octave/H_256_512_4.mat b/libcodec2-android/src/codec2/octave/H_256_512_4.mat new file mode 100644 index 0000000..143ae73 Binary files /dev/null and b/libcodec2-android/src/codec2/octave/H_256_512_4.mat differ diff --git a/libcodec2-android/src/codec2/octave/H_256_768_22.txt b/libcodec2-android/src/codec2/octave/H_256_768_22.txt new file mode 100644 index 0000000..ceb6137 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/H_256_768_22.txt @@ -0,0 +1,519 @@ +# Created by Octave 5.2.0, Sun May 03 15:23:46 2020 ACST +# name: H_256_768_22 +# type: matrix +# rows: 512 +# columns: 768 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 + + diff --git a/libcodec2-android/src/codec2/octave/Mat2Hrows.m b/libcodec2-android/src/codec2/octave/Mat2Hrows.m new file mode 100644 index 0000000..6cbd1d5 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/Mat2Hrows.m @@ -0,0 +1,28 @@ +function [Hrows Hcols] = Mat2Hrows(HRA, RAmode); + +H = full(HRA); +[Nr Nc] = size(H); + +if nargin==1, RAmode = 1; end; + +if RAmode==1 + H= H(:,1:Nc-Nr); + [Nr Nc] = size(H); +end + +Max_colwt = max(sum(H)); +Max_rowwt = max(sum(H')); +Hcols = zeros(Nc, Max_colwt); +Hrows = zeros(Nr, Max_rowwt); + +for i = 1:Nr + nz = find(H(i,:)); + Hrows(i,1:length(nz)) = nz; +end + +H = H'; +for i = 1:Nc + nz = find(H(i,:)); + Hcols(i,1:length(nz)) = nz; +end + diff --git a/libcodec2-android/src/codec2/octave/autotest.m b/libcodec2-android/src/codec2/octave/autotest.m new file mode 100644 index 0000000..4afda42 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/autotest.m @@ -0,0 +1,119 @@ +% autotest.m +% David Rowe Mar 2015 +% +% Helper functions to plot output of C verson and difference between Octave and C versions + +1; + +function stem_sig_and_error(plotnum, subplotnum, sig, error, titlestr, axisvec) + global no_plot_list; + + if find(no_plot_list == plotnum) + return; + end + + figure(plotnum) + subplot(subplotnum) + stem(sig,'g;Octave version;'); + hold on; + stem(error,'r;Octave - C version (hopefully 0);'); + hold off; + if nargin == 6 + axis(axisvec); + end + title(titlestr); +endfunction + + +function plot_sig_and_error(plotnum, subplotnum, sig, error, titlestr, axisvec) + global no_plot_list; + + if find(no_plot_list == plotnum) + return; + end + + figure(plotnum) + subplot(subplotnum) + plot(sig,'g;Octave version;'); + hold on; + plot(error,'r;Octave - C version (hopefully 0);'); + hold off; + if nargin == 6 + axis(axisvec); + end + title(titlestr); +endfunction + + +function pass = check(a, b, test_name, tol, its_an_angle = 0) + global passes; + global fails; + + if nargin == 3 + tol = 1E-3; + end + + [m n] = size(a); + if m > n + ll = m; + else + ll = n; + end + + printf("%s", test_name); + for i=1:(25-length(test_name)) + printf("."); + end + printf(": "); + + if its_an_angle + % take into account pi is close to -pi for angles in rads + e = sum(sum(abs(exp(j*a) - exp(j*b)))/ll); + else + e = sum(sum(abs(a - b))/ll); + end + + if e < tol + printf("OK\n"); + pass = true; + passes++; + else + printf("FAIL (%f)\n",e); + pass = false; + fails++; + end +endfunction + +function pass = check_no_abs(a, b, test_name) + global passes; + global fails; + + tol = 1E-3; + + [m n] = size(a); + if m > n + ll = m; + else + ll = n; + end + + printf("%s", test_name); + for i=1:(25-length(test_name)) + printf("."); + end + printf(": "); + + e = sum(sum(a - b)/ll); + + if e < tol + pass = true; + printf("OK\n"); + passes++; + else + pass = false; + printf("FAIL (%f)\n",e); + fails++; + end +endfunction + + diff --git a/libcodec2-android/src/codec2/octave/c2wideband_map b/libcodec2-android/src/codec2/octave/c2wideband_map new file mode 100644 index 0000000..946aa19 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/c2wideband_map @@ -0,0 +1,8 @@ + 1.00000000e+00 3.00000000e+00 7.00000000e+00 8.00000000e+00 1.10000000e+01 1.50000000e+01 1.90000000e+01 2.60000000e+01 2.10000000e+01 2.40000000e+01 2.00000000e+01 3.00000000e+01 3.80000000e+01 4.80000000e+01 2.90000000e+01 3.20000000e+01 4.20000000e+01 6.40000000e+01 6.30000000e+01 5.40000000e+01 5.60000000e+01 5.00000000e+01 7.20000000e+01 9.10000000e+01 7.80000000e+01 6.70000000e+01 5.70000000e+01 7.00000000e+01 7.60000000e+01 1.04000000e+02 + 2.00000000e+00 5.00000000e+00 1.20000000e+01 2.20000000e+01 2.30000000e+01 3.30000000e+01 3.10000000e+01 4.30000000e+01 3.40000000e+01 3.90000000e+01 4.40000000e+01 4.10000000e+01 4.90000000e+01 6.00000000e+01 5.10000000e+01 7.70000000e+01 9.70000000e+01 9.00000000e+01 1.14000000e+02 8.10000000e+01 1.21000000e+02 1.13000000e+02 8.00000000e+01 9.90000000e+01 1.18000000e+02 1.09000000e+02 8.90000000e+01 1.02000000e+02 1.07000000e+02 1.19000000e+02 + 4.00000000e+00 9.00000000e+00 1.60000000e+01 2.70000000e+01 4.00000000e+01 4.50000000e+01 4.70000000e+01 5.50000000e+01 4.60000000e+01 6.10000000e+01 6.50000000e+01 6.60000000e+01 7.50000000e+01 8.30000000e+01 6.80000000e+01 1.06000000e+02 9.40000000e+01 1.27000000e+02 1.36000000e+02 1.38000000e+02 1.37000000e+02 1.41000000e+02 8.80000000e+01 1.50000000e+02 1.59000000e+02 1.47000000e+02 1.33000000e+02 1.28000000e+02 1.90000000e+02 1.31000000e+02 + 6.00000000e+00 1.80000000e+01 2.80000000e+01 5.20000000e+01 8.40000000e+01 6.20000000e+01 7.30000000e+01 7.90000000e+01 7.10000000e+01 9.80000000e+01 8.50000000e+01 9.30000000e+01 8.70000000e+01 1.12000000e+02 1.15000000e+02 1.10000000e+02 1.29000000e+02 1.99000000e+02 1.42000000e+02 1.70000000e+02 2.18000000e+02 1.62000000e+02 1.74000000e+02 2.05000000e+02 1.43000000e+02 1.64000000e+02 1.72000000e+02 1.75000000e+02 2.02000000e+02 2.16000000e+02 + 1.00000000e+01 2.50000000e+01 3.50000000e+01 6.90000000e+01 7.40000000e+01 9.20000000e+01 9.60000000e+01 1.35000000e+02 1.11000000e+02 1.56000000e+02 9.50000000e+01 1.05000000e+02 1.26000000e+02 1.34000000e+02 1.63000000e+02 2.15000000e+02 1.49000000e+02 1.48000000e+02 1.53000000e+02 2.28000000e+02 1.80000000e+02 2.30000000e+02 2.11000000e+02 2.13000000e+02 2.40000000e+02 2.24000000e+02 2.09000000e+02 2.22000000e+02 2.26000000e+02 1.73000000e+02 + 1.30000000e+01 3.70000000e+01 5.30000000e+01 1.08000000e+02 8.60000000e+01 1.17000000e+02 1.03000000e+02 1.00000000e+02 1.24000000e+02 1.22000000e+02 2.01000000e+02 1.92000000e+02 2.03000000e+02 2.19000000e+02 1.91000000e+02 1.69000000e+02 2.20000000e+02 2.14000000e+02 1.39000000e+02 2.04000000e+02 2.36000000e+02 1.79000000e+02 1.81000000e+02 2.00000000e+02 1.93000000e+02 2.21000000e+02 2.35000000e+02 1.87000000e+02 2.08000000e+02 2.17000000e+02 + 1.40000000e+01 3.60000000e+01 5.90000000e+01 1.16000000e+02 1.30000000e+02 1.78000000e+02 1.40000000e+02 1.32000000e+02 1.57000000e+02 1.52000000e+02 1.68000000e+02 1.60000000e+02 1.23000000e+02 1.97000000e+02 1.83000000e+02 2.34000000e+02 1.44000000e+02 2.23000000e+02 1.65000000e+02 1.67000000e+02 2.31000000e+02 1.96000000e+02 1.71000000e+02 2.33000000e+02 1.82000000e+02 2.25000000e+02 1.88000000e+02 2.37000000e+02 2.27000000e+02 2.10000000e+02 + 1.70000000e+01 5.80000000e+01 8.20000000e+01 1.01000000e+02 1.20000000e+02 1.86000000e+02 1.46000000e+02 1.25000000e+02 1.51000000e+02 1.94000000e+02 1.61000000e+02 1.84000000e+02 1.58000000e+02 1.89000000e+02 1.77000000e+02 1.95000000e+02 1.45000000e+02 1.66000000e+02 2.06000000e+02 1.54000000e+02 1.98000000e+02 2.12000000e+02 2.38000000e+02 2.29000000e+02 1.85000000e+02 1.76000000e+02 2.39000000e+02 1.55000000e+02 2.07000000e+02 2.32000000e+02 diff --git a/libcodec2-android/src/codec2/octave/channel_lib.m b/libcodec2-android/src/codec2/octave/channel_lib.m new file mode 100644 index 0000000..a8906f4 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/channel_lib.m @@ -0,0 +1,61 @@ +% channel.m +% +% Commonly used channel simulation functions + +1; + +function [spread1 spread2 path_delay_samples] = channel_multipath(channel, Fs, Nsam) + % Winlink multipath definitions + if strcmp(channel, 'mpg') dopplerSpreadHz = 0.1; path_delay_ms = 0.5; + elseif strcmp(channel, 'mpm') dopplerSpreadHz = 0.5; path_delay_ms = 1.0; + elseif strcmp(channel, 'mpp') dopplerSpreadHz = 1.0; path_delay_ms = 2.0; + elseif strcmp(channel, 'mpd') dopplerSpreadHz = 2.5; path_delay_ms = 4.0; + elseif printf("Unknown multipath channel\n"); assert(0); end + + path_delay_samples = path_delay_ms*Fs/1000; + printf(" Doppler Spread: %3.2f Hz Path Delay: %3.2f ms %d samples\n", dopplerSpreadHz, path_delay_ms, path_delay_samples); + + % generate same fading pattern for every run + spread1 = doppler_spread(dopplerSpreadHz, Fs, Nsam); + spread2 = doppler_spread(dopplerSpreadHz, Fs, Nsam); + + % sometimes doppler_spread() doesn't return exactly the number of samples we need + if length(spread1) < Nsam + printf("not enough doppler spreading samples %d %d\n", length(spread1), Nsam); + assert(0); + end + if length(spread2) < Nsam + printf("not enough doppler spreading samples %d %d\n", length(spread2), Nsam); + assert(0); + end +endfunction + +function rx = channel_simulate(Fs, SNR3kdB, freq_offset_Hz, channel, tx) + Nsam = length(tx); + rx = tx; + + if strcmp(channel, 'awgn') == 0 + [spread1 spread2 path_delay_samples] = channel_multipath(channel, Fs, Nsam); + rx = tx(1:Nsam) .* spread1(1:Nsam); + rx += [zeros(1,path_delay_samples) tx(1:Nsam-path_delay_samples)] .* spread2(1:Nsam); + end + + woffset = 2*pi*freq_offset_Hz/Fs; + rx = rx .* exp(j*woffset*(1:Nsam)); + + rx = real(rx); S = rx*rx'; + rpapr = 10*log10(max(abs(rx).^2)/mean(abs(rx).^2)); + + % SNR in a 4k bandwidth will be lower than 3k as total noise power N is higher + SNR4kdB = SNR3kdB - 10*log10(Fs/2) + 10*log10(3000); SNR = 10^(SNR4kdB/10); + N = S/SNR; sigma = sqrt(N/Nsam); + n = sigma*randn(1,Nsam); + % printf("SNR3kdB: %f SNR4kdB: %f N: %f %f\n", SNR3kdB, SNR4kdB, N, n*n'); + rx += n; + % check our sums are OK to within 0.25 dB + SNR4kdB_measured = 10*log10(S/(n*n')); assert (abs(SNR4kdB - SNR4kdB_measured) < 0.25); + printf("RPAPR: %4.1f meas SNR3k: %3.2f dB\n", rpapr, 10*log10(S/(n*n')) + 10*log10(4000) - 10*log10(3000)); + + % add a few seconds of no signal either side + rx = [sigma*randn(1,Fs) rx sigma*randn(1,Fs/2)]; +endfunction diff --git a/libcodec2-android/src/codec2/octave/closed_quant_slope.m b/libcodec2-android/src/codec2/octave/closed_quant_slope.m new file mode 100644 index 0000000..7d5a465 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/closed_quant_slope.m @@ -0,0 +1,3 @@ +function b = closed_quant_slope(b) + b(1) = max(0.5, b(1)); +end diff --git a/libcodec2-android/src/codec2/octave/cma.m b/libcodec2-android/src/codec2/octave/cma.m new file mode 100644 index 0000000..a5a2195 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/cma.m @@ -0,0 +1,114 @@ +% cma.m +% +% Constant modulus equaliser example from: +% +% http://dsp.stackexchange.com/questions/23540/matlab-proper-estimation-of-weights-and-how-to-calculate-mse-for-qpsk-signal-f +% +% Adapted to run bpsk and fsk signals + + rand('seed',1); + randn('seed',1); + + N = 5000; % # symbols + h = [1 0 0 0 0 0 0.0 0.5]; % simulation of HF multipath channel impulse response + h = h/norm(h); + Le = 20; % equalizer length + mu = 1E-3; % step size + snr = 30; % snr in dB + M = 10; % oversample rate, e.g. Rs=400Hz at Fs=8000Hz + + tx_type = "fsk"; % select modulation type here "bpsk" or "fsk" + + if strcmp(tx_type, "bpsk") + s0 = round( rand(N,1) )*2 - 1; % BPSK signal + s0M = zeros(N*M,1); % oversampled BPSK signal + k = 1; + for i=1:M:N*M + s0M(i:i+M-1) = s0(k); + k ++; + end + end + + if strcmp(tx_type, "fsk") + tx_bits = round(rand(1,N)); + + % continuous phase FSK modulator + + w1 = pi/4; + w2 = pi/2; + tx_phase = 0; + tx = zeros(M*N,1); + + for i=1:N + for k=1:M + if tx_bits(i) + tx_phase += w2; + else + tx_phase += w1; + end + tx((i-1)*M+k) = exp(j*tx_phase); + end + end + + s0M = tx; + end + + s = filter(h,1,s0M); % filtered signal + + % add Gaussian noise at desired snr + + n = randn(N*M,1); + vs = var(s); + vn = vs*10^(-snr/10); + n = sqrt(vn)*n; + r = s + n; % received signal + + e = zeros(N*M,1); % error + w = zeros(Le,1); % equalizer coefficients + w(Le)=1; % actual filter taps are flipud(w)! + + yd = zeros(N*M,1); + + for i = 1:N*M-Le, + x = r(i:Le+i-1); + y = w'*x; + yd(i)=y; + e(i) = abs(y).^2 - 1; + w = w - mu * e(i) * real(conj(y) * x); + end + + np = 100; % # sybmols to plot (last np will be plotted); np < N! + + figure(1); clf; + %subplot(211), plot( 1:np, e(N-np+1-Le+1:N-Le+1).*e(N-np+1-Le+1:N-Le+1)), title('error') + subplot(211), plot(e.*e), title('error'); + subplot(212), stem(conv(flipud(w),h)), title('equalized channel impulse response') + + figure(2); clf; + subplot(311) + plot(1:np, s0M(N-np+1:N)) + title('transmitted, received, and equalized signal') + subplot(312) + plot(1:np, r(N-np+1:N)) + subplot(313) + plot(1:np, yd(N-np+1-Le+1:N-Le+1)) + + figure(3); clf; + h1 = freqz(h); + h2 = freqz(flipud(w)); + h3 = freqz(conv(flipud(w),h)); + subplot(311); plot(20*log10(abs(h1))); + title('channel, equaliser, combined freq resp') + subplot(312); plot(20*log10(abs(h2))); + subplot(313); plot(20*log10(abs(h3))); + + figure(4); + subplot(211) + plot(20*log10(abs(fft(s0M)))) + axis([1 length(s0M) 0 80]); + grid; + subplot(212) + plot(20*log10(abs(fft(s)))) + axis([1 length(s0M) 0 80]); + grid; + diff --git a/libcodec2-android/src/codec2/octave/cml.patch b/libcodec2-android/src/codec2/octave/cml.patch new file mode 100644 index 0000000..998058c --- /dev/null +++ b/libcodec2-android/src/codec2/octave/cml.patch @@ -0,0 +1,126 @@ +diff -ruN -x '*~' -x -q cml-orig/CmlStartup.m cml/CmlStartup.m +--- cml-orig/CmlStartup.m 2007-09-08 23:12:26.000000000 +0930 ++++ cml/CmlStartup.m 2018-04-12 16:38:31.966825321 +0930 +@@ -20,7 +20,7 @@ + addpath( strcat( cml_home, '\mex'), ... + strcat( cml_home, '\mat'), ... + strcat( cml_home, '\matalt' ), ... +- strcat( cml_home, '\mexhelp'), ... ++ %strcat( cml_home, '\mexhelp'), ... + strcat( cml_home, '\demos' ), ... + strcat( cml_home, '\scenarios'), ... + strcat( cml_home, '\localscenarios'),... +@@ -41,7 +41,7 @@ + addpath( strcat( cml_home, '/mex'), ... + strcat( cml_home, '/mat'), ... + strcat( cml_home, '/matalt' ), ... +- strcat( cml_home, '/mexhelp'), ... ++ %strcat( cml_home, '/mexhelp'), ... + strcat( cml_home, '/demos' ), ... + strcat( cml_home, '/scenarios'), ... + strcat( cml_home, '/localscenarios'),... +@@ -59,4 +59,4 @@ + save_directory = strcat( cml_home, '/scenarios/CmlHome.mat' ); + end + +-save( save_directory, save_flag, 'cml_home' ); +\ No newline at end of file ++save( save_directory, save_flag, 'cml_home' ); +diff -ruN -x '*~' -x -q cml-orig/mat/CreateConstellation.m cml/mat/CreateConstellation.m +--- cml-orig/mat/CreateConstellation.m 2007-12-27 21:36:24.000000000 +1030 ++++ cml/mat/CreateConstellation.m 2018-04-15 10:21:35.325168186 +0930 +@@ -58,7 +58,7 @@ + % Optional argument: Label Type + if (length(varargin)>=2) + label_type = varargin{2}; +- if ~isstr( label_type ) ++ if ~ischar( label_type ) + if (length( label_type ) ~= M ) + error( 'Length of label_type must be M' ); + elseif (sum( sort( label_type ) ~= [0:M-1] ) > 0) +diff -ruN -x '*~' -x -q cml-orig/mat/InitializeWiMaxLDPC.m cml/mat/InitializeWiMaxLDPC.m +--- cml-orig/mat/InitializeWiMaxLDPC.m 2007-07-21 08:18:04.000000000 +0930 ++++ cml/mat/InitializeWiMaxLDPC.m 2018-04-15 10:19:59.487185664 +0930 +@@ -134,7 +134,7 @@ + H(cnt1:cnt1+z-1, cnt2:cnt2+z-1)= eye(z); + end + if (Hbm(i, j) >0) +- if ((rate ==2/3)&(ind ==0)) ++ if ((rate ==2/3)&&(ind ==0)) + H(cnt1:cnt1+z-1, cnt2:cnt2+z-1)=circshift( eye(z),[0,mod(Hbm(i,j),z)]); + else + H(cnt1:cnt1+z-1, cnt2:cnt2+z-1)= circshift( eye(z),[0,floor(Hbm(i,j)*z/z0)]); +@@ -146,7 +146,7 @@ + end + + P =eye(z); +-if ((rate ==3/4) & (ind ==1)) ++if ((rate ==3/4) && (ind ==1)) + P=inv(circshift( eye(z),[0,floor(80*z/z0)])); + end + +diff -ruN -x '*~' -x -q cml-orig/source/matrix.h cml/source/matrix.h +--- cml-orig/source/matrix.h 1970-01-01 09:30:00.000000000 +0930 ++++ cml/source/matrix.h 2018-04-12 16:38:31.966825321 +0930 +@@ -0,0 +1,1 @@ ++#include +diff -ruN -x '*~' -x -q cml-orig/source/MpDecode.c cml/source/MpDecode.c +--- cml-orig/source/MpDecode.c 2007-08-06 14:44:24.000000000 +0930 ++++ cml/source/MpDecode.c 2018-04-15 07:28:51.092724038 +0930 +@@ -53,6 +53,7 @@ + #include + #include + #include ++#include + + /* Input Arguments */ + #define INPUT prhs[0] +@@ -332,8 +333,10 @@ + int sign; + float temp_sum; + float Qi; +- ++ int ssum; ++ + for (iter=0;iter plamp("../src/hts2a",40) +% +% Then press: +% c - to cycle through the wavform being displayed on the figure +% n - next frame +% b - back one frame +% +% tip: hold down n or b to animate the display +% +% The text files used as input are generated using c2sim: +% +% /codec2-dev/src$ c2sim ../raw/hts2a.raw --dump hts2a +% +% The Codec 2 README explains how to build c2sim with dump files +% enabled. + +function codec2_demo(samname, f) + + sn_name = strcat(samname,"_sn.txt"); + Sn = load(sn_name); + + sw_name = strcat(samname,"_sw.txt"); + Sw = load(sw_name); + + model_name = strcat(samname,"_model.txt"); + model = load(model_name); + + figure(1); + + k = ' '; + wf = "Sn"; + do + + if strcmp(wf,"Sn") + clf; + s = [ Sn(2*f-1,:) Sn(2*f,:) ]; + plot(s); + axis([1 length(s) -20000 20000]); + end + + if (strcmp(wf,"Sw")) + clf; + plot((0:255)*4000/256, Sw(f,:),";Sw;"); + end + + if strcmp(wf,"SwAm") + Wo = model(f,1); + L = model(f,2); + Am = model(f,3:(L+2)); + plot((0:255)*4000/256, Sw(f,:),";Sw;"); + hold on; + plot((1:L)*Wo*4000/pi, 20*log10(Am),"+;Am;r"); + axis([1 4000 -10 80]); + hold off; + end + + if strcmp(wf,"Am") + Wo = model(f,1); + L = model(f,2); + Am = model(f,3:(L+2)); + plot((1:L)*Wo*4000/pi, 20*log10(Am),"+;Am;r"); + axis([1 4000 -10 80]); + end + + % interactive menu + + printf("\rframe: %d menu: n-next b-back w-cycle window q-quit", f); + fflush(stdout); + k = kbhit(); + if (k == 'n') + f = f + 1; + end + if (k == 'b') + f = f - 1; + end + if (k == 'w') + if strcmp(wf,"Sn") + next_wf = "Sw"; + end + if strcmp(wf,"Sw") + next_wf = "SwAm"; + end + if strcmp(wf,"SwAm") + next_wf = "Am"; + end + if strcmp(wf,"Am") + next_wf = "Sn"; + end + wf = next_wf; + end + + until (k == 'q') + printf("\n"); + +endfunction diff --git a/libcodec2-android/src/codec2/octave/cohpsk_ch_fading.m b/libcodec2-android/src/codec2/octave/cohpsk_ch_fading.m new file mode 100644 index 0000000..9022177 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/cohpsk_ch_fading.m @@ -0,0 +1,27 @@ +% cohpsk_ch_fading.m +% David Rowe +% April 2018 + +% function to write float fading samples for use by C programs + +function cohpsk_ch_fading(raw_file_name, Fs, dopplerSpreadHz, len_samples) + randn('seed',1); + spread = doppler_spread(dopplerSpreadHz, Fs, len_samples); + spread_2ms = doppler_spread(dopplerSpreadHz, Fs, len_samples); + hf_gain = 1.0/sqrt(var(spread)+var(spread_2ms)); + printf("hf_gain: %f\n", hf_gain); + + % interleave real imag samples + + inter = zeros(1,len_samples*4); + inter(1:4) = hf_gain; + for i=1:len_samples + inter(i*4+1) = real(spread(i)); + inter(i*4+2) = imag(spread(i)); + inter(i*4+3) = real(spread_2ms(i)); + inter(i*4+4) = imag(spread_2ms(i)); + end + f = fopen(raw_file_name,"wb"); + fwrite(f, inter, "float32"); + fclose(f); +endfunction diff --git a/libcodec2-android/src/codec2/octave/cohpsk_demod_plot.m b/libcodec2-android/src/codec2/octave/cohpsk_demod_plot.m new file mode 100644 index 0000000..fd4f719 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/cohpsk_demod_plot.m @@ -0,0 +1,69 @@ +% cohpsk_demod_plot.m +% David Rowe May 2015 +% +% Plot Octave outputs from cohpsk_demod, c2dec, to visualise whats going on +% when errors hit the system + +#{ + $ ./cohpsk_get_test_bits - 5600 | ./cohpsk_mod - - | ./cohpsk_ch - - -40 | ./cohpsk_demod - - -o cohpsk_demod.txt | ./cohpsk_put_test_bits - + octave> cohpsk_demod_plot("../build_linux/src/cohpsk_demod.txt") +#} + +function cohpsk_demod_plot(fn) + Nc=7; Nd=2; Ns=6; + + load(fn); + + Ncf = 100; % number of codec frames to plot + Nmf = Ncf/2; % number of modem frames to plot + Nms = Nmf*Ns; % number of modem symbols to plot + + figure(1) + clf; + + % plot combined signals to show diversity gains + + combined = rx_symb_log_c(:,1:Nc); + for d=2:Nd + combined += rx_symb_log_c(:, (d-1)*Nc+1:d*Nc); + end + plot(combined*exp(j*pi/4)/sqrt(Nd),'+') + title('Scatter'); + axis([-2 2 -2 2]) + + figure(2) + clf; + subplot(211) + plot(rx_phi_log_c(1:Nms,:)) + title('phase') + axis([1 Nms -pi pi]) + subplot(212) + plot(rx_amp_log_c(1:Nms,:)) + title('amplitude') + axis([1 Nms 0 1]) + + figure(3) + subplot(211) + plot(rx_timing_log_c) + title('rx timing'); + subplot(212) + stem(ratio_log_c) + title('Sync ratio'); + + figure(4) + plot(f_est_log_c - 1500) + title('freq offset est'); + axis([1 Nmf -50 50]) + + figure(5) + y = 1:Nms; + x = 1:Nc*Nd; + z = 20*log10(rx_amp_log_c(1:Nms,:)); + mesh(x,y,z); + grid + title('Channel Amplitude dB'); + a = min(min(z)); + b = max(max(z)); + axis([1 Nc*Nd 1 Nms a b]) +end + diff --git a/libcodec2-android/src/codec2/octave/cohpsk_dev.m b/libcodec2-android/src/codec2/octave/cohpsk_dev.m new file mode 100644 index 0000000..0807319 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/cohpsk_dev.m @@ -0,0 +1,439 @@ +% cohpsk_dev.m +% David Rowe Mar 2015 +% +% Coherent PSK modem development and testing functions +% + +cohpsk_lib; + +% Init HF channel model from stored sample files of spreading signal ---------------------------------- + +function [spread spread_2ms hf_gain] = init_hf_model(Fs, nsam) + + % convert "spreading" samples from 1kHz carrier at Fss to complex + % baseband, generated by passing a 1kHz sine wave through PathSim + % with the ccir-poor model, enabling one path at a time. + + Fc = 1000; Fss = 8000; + fspread = fopen("../raw/sine1k_2Hz_spread.raw","rb"); + spread1k = fread(fspread, "int16")/10000; + fclose(fspread); + fspread = fopen("../raw/sine1k_2ms_delay_2Hz_spread.raw","rb"); + spread1k_2ms = fread(fspread, "int16")/10000; + fclose(fspread); + + % down convert to complex baseband + spreadbb = spread1k.*exp(-j*(2*pi*Fc/Fss)*(1:length(spread1k))'); + spreadbb_2ms = spread1k_2ms.*exp(-j*(2*pi*Fc/Fss)*(1:length(spread1k_2ms))'); + + % remove -2000 Hz image + b = fir1(50, 5/Fss); + spread = filter(b,1,spreadbb); + spread_2ms = filter(b,1,spreadbb_2ms); + + % discard first 1000 samples as these were near 0, probably as + % PathSim states were ramping up + + spread = spread(1000:length(spread)); + spread_2ms = spread_2ms(1000:length(spread_2ms)); + + % change output samples so they are at rate Fs reqd by caller + + spread = resample(spread, Fs, Fss); + spread_2ms = resample(spread_2ms, Fs, Fss); + + % Determine "gain" of HF channel model, so we can normalise + % carrier power during HF channel sim to calibrate SNR. I imagine + % different implementations of ccir-poor would do this in + % different ways, leading to different BER results. Oh Well! + + hf_gain = 1.0/sqrt(var(spread(1:nsam))+var(spread_2ms(1:nsam))); +endfunction + + +function write_pilot_file(pilot, Nsymbrowpilot, Ns, Nsymrow, Npilotsframe, Nc); + + filename = sprintf("../src/cohpsk_defs.h", Npilotsframe, Nc); + f=fopen(filename,"wt"); + fprintf(f,"/* Generated by write_pilot_file() Octave function */\n\n"); + fprintf(f,"#define NSYMROW %d /* number of data symbols on each row (i.e. each carrier) */\n", Nsymrow); + fprintf(f,"#define NS %d /* number of data symbols between pilots */\n", Ns); + fprintf(f,"#define NPILOTSFRAME %d /* number of pilot symbols on each row */\n", Npilotsframe); + fprintf(f,"#define PILOTS_NC %d /* number of carriers */\n\n", Nc); + fprintf(f,"#define NSYMROWPILOT %d /* length of row after pilots inserted */\n\n", Nsymbrowpilot); + fclose(f); + + filename = sprintf("../src/pilots_coh.h", Npilotsframe, Nc); + f=fopen(filename,"wt"); + fprintf(f,"/* Generated by write_pilot_file() Octave function */\n\n"); + fprintf(f,"float pilots_coh[][PILOTS_NC]={\n"); + for r=1:Npilotsframe + fprintf(f, " {"); + for c=1:Nc-1 + fprintf(f, " %f,", pilot(r, c)); + end + if r < Npilotsframe + fprintf(f, " %f},\n", pilot(r, Nc)); + else + fprintf(f, " %f}\n};", pilot(r, Nc)); + end + end + fclose(f); +endfunction + + +% Save test bits frame to a text file in the form of a C array + +function test_bits_coh_file(test_bits_coh) + + f=fopen("../src/test_bits_coh.h","wt"); + fprintf(f,"/* Generated by test_bits_coh_file() Octave function */\n\n"); + fprintf(f,"const int test_bits_coh[]={\n"); + for m=1:length(test_bits_coh)-1 + fprintf(f," %d,\n",test_bits_coh(m)); + endfor + fprintf(f," %d\n};\n",test_bits_coh(length(test_bits_coh))); + fclose(f); + +endfunction + + +% Rate Rs BER tests ------------------------------------------------------------------------------ + +function sim_out = ber_test(sim_in) + sim_in = symbol_rate_init(sim_in); + + Fs = sim_in.Fs; + Rs = sim_in.Rs; + Ntrials = sim_in.Ntrials; + verbose = sim_in.verbose; + plot_scatter = sim_in.plot_scatter; + framesize = sim_in.framesize; + bps = sim_in.bps; + + Esvec = sim_in.Esvec; + ldpc_code = sim_in.ldpc_code; + rate = sim_in.ldpc_code_rate; + code_param = sim_in.code_param; + tx_bits_buf = sim_in.tx_bits_buf; + Nsymb = sim_in.Nsymb; + Nsymbrow = sim_in.Nsymbrow; + Nsymbrowpilot = sim_in.Nsymbrowpilot; + Nc = sim_in.Nc; + Npilotsframe = sim_in.Npilotsframe; + Ns = sim_in.Ns; + Np = sim_in.Np; + Nd = sim_in.Nd; + modulation = sim_in.modulation; + pilot = sim_in.pilot; + prev_sym_tx = sim_in.prev_sym_tx; + prev_sym_rx = sim_in.prev_sym_rx; + rx_symb_buf = sim_in.rx_symb_buf; + tx_pilot_buf = sim_in.tx_pilot_buf; + rx_pilot_buf = sim_in.rx_pilot_buf; + + hf_sim = sim_in.hf_sim; + nhfdelay = sim_in.hf_delay_ms*Rs/1000; + hf_mag_only = sim_in.hf_mag_only; + f_off = sim_in.f_off; + div_time_shift = sim_in.div_timeshift; + + [spread spread_2ms hf_gain] = init_hf_model(Rs, Nsymbrowpilot*(Ntrials+2)); + + if strcmp(modulation,'dqpsk') + Nsymbrowpilot = Nsymbrow; + end + + % Start Simulation ---------------------------------------------------------------- + + for ne = 1:length(Esvec) + EsNodB = Esvec(ne); + EsNo = 10^(EsNodB/10); + + variance = 1/EsNo; + if verbose > 1 + printf("EsNo (dB): %f EsNo: %f variance: %f\n", EsNodB, EsNo, variance); + end + + Terrs = 0; Tbits = 0; + + s_ch_tx_log = []; + rx_symb_log = []; + noise_log = []; + errors_log = []; + Nerrs_log = []; + phi_log = []; + amp_log = []; + EsNo__log = []; + + ldpc_errors_log = []; ldpc_Nerrs_log = []; + + Terrsldpc = Tbitsldpc = Ferrsldpc = 0; + + % init HF channel + + hf_n = 1; + + phase_offset_rect = 1; + w_offset = 2*pi*f_off/Rs; + w_offset_rect = exp(j*w_offset); + + ct_symb_buf = zeros(2*Nsymbrowpilot, Nc*Nd); + prev_tx_symb = prev_rx_symb = ones(1, Nc*Nd); + + % simulation starts here----------------------------------- + + for nn = 1:Ntrials+2 + + if ldpc_code + tx_bits = round(rand(1,framesize*rate)); + else + tx_bits = round(rand(1,framesize)); + end + + if strcmp(modulation,'qpsk') + [tx_symb tx_bits] = bits_to_qpsk_symbols(sim_in, tx_bits, code_param); + + % one frame delay on bits for qpsk + + tx_bits_buf(1:framesize) = tx_bits_buf(framesize+1:2*framesize); + tx_bits_buf(framesize+1:2*framesize) = tx_bits; + + end + if strcmp(modulation, 'dqpsk') + [tx_symb prev_tx_symb] = bits_to_dqpsk_symbols(sim_in, tx_bits, prev_tx_symb); + tx_bits_buf(1:framesize) = tx_bits; + end + + s_ch = tx_symb; + + % HF channel simulation ------------------------------------ + + hf_fading = ones(1,Nsymb); + if hf_sim + + % separation between carriers. Note this effectively + % under samples at Rs, I dont think this matters. + % Equivalent to doing freq shift at Fs, then + % decimating to Rs. + + wsep = 2*pi*(1+0.5); % e.g. 75Hz spacing at Rs=50Hz, alpha=0.5 filters + + hf_model(hf_n, :) = zeros(1,Nc*Nd); + + for r=1:Nsymbrowpilot + for c=1:Nd*Nc + if c > Nc + time_shift = sim_in.div_timeshift; + else + time_shift = 1; + end + ahf_model = hf_gain*(spread(hf_n+time_shift) + exp(-j*c*wsep*nhfdelay)*spread_2ms(hf_n+time_shift)); + + if hf_mag_only + s_ch(r,c) *= abs(ahf_model); + else + s_ch(r,c) *= ahf_model; + end + hf_model(hf_n, c) = ahf_model; + end + hf_n++; + end + end + + % keep a record of each tx symbol so we can check average power + + for r=1:Nsymbrow + for c=1:Nd*Nc + s_ch_tx_log = [s_ch_tx_log s_ch(r,c)]; + end + end + + % AWGN noise and phase/freq offset channel simulation + % 0.5 factor ensures var(noise) == variance , i.e. splits power between Re & Im + + noise = sqrt(variance*0.5)*(randn(Nsymbrowpilot,Nc*Nd) + j*randn(Nsymbrowpilot,Nc*Nd)); + noise_log = [noise_log noise]; + + for r=1:Nsymbrowpilot + s_ch(r,:) *= phase_offset_rect; + phase_offset_rect *= w_offset_rect; + end + s_ch += noise; + + ct_symb_buf(1:Nsymbrowpilot,:) = ct_symb_buf(Nsymbrowpilot+1:2*Nsymbrowpilot,:); + ct_symb_buf(Nsymbrowpilot+1:2*Nsymbrowpilot,:) = s_ch; + + if strcmp(modulation,'qpsk') + [rx_symb rx_bits rx_symb_linear amp_ phi_ sig_rms noise_rms sim_in] = qpsk_symbols_to_bits(sim_in, ct_symb_buf(1:Nsymbrowpilot+Npilotsframe,:)); + phi_log = [phi_log; phi_]; + amp_log = [amp_log; amp_]; + end + if strcmp(modulation,'dqpsk') + [rx_symb rx_bits rx_symb_linear prev_rx_symb] = dqpsk_symbols_to_bits(sim_in, s_ch, prev_rx_symb); + end + + % Wait until we have enough frames to do pilot assisted phase estimation + + if nn > 1 + rx_symb_log = [rx_symb_log rx_symb_linear]; + %EsNo__log = [EsNo__log EsNo_]; + + % Measure BER + + error_positions = xor(rx_bits, tx_bits_buf(1:framesize)); + Nerrs = sum(error_positions); + Terrs += Nerrs; + Tbits += length(tx_bits); + errors_log = [errors_log error_positions]; + Nerrs_log = [Nerrs_log Nerrs]; + + % Optionally LDPC decode + + if ldpc_code + detected_data = ldpc_dec(code_param, sim_in.max_iterations, sim_in.demod_type, sim_in.decoder_type, ... + rx_symb_linear, min(100,EsNo_), amp_linear); + error_positions = xor( detected_data(1:framesize*rate), tx_bits_buf(1:framesize*rate) ); + Nerrs = sum(error_positions); + ldpc_Nerrs_log = [ldpc_Nerrs_log Nerrs]; + ldpc_errors_log = [ldpc_errors_log error_positions]; + if Nerrs + Ferrsldpc++; + end + Terrsldpc += Nerrs; + Tbitsldpc += framesize*rate; + end + end + end + + TERvec(ne) = Terrs; + BERvec(ne) = Terrs/Tbits; + + if verbose + av_tx_pwr = (s_ch_tx_log * s_ch_tx_log')/length(s_ch_tx_log); + + printf("EsNo (dB): %3.1f Terrs: %d Tbits: %d BER %5.3f QPSK BER theory %5.3f av_tx_pwr: %3.2f", + EsNodB, Terrs, Tbits, + Terrs/Tbits, 0.5*erfc(sqrt(EsNo/2)), av_tx_pwr); + if ldpc_code + printf("\n LDPC: Terrs: %d BER: %4.2f Ferrs: %d FER: %4.2f", + Terrsldpc, Terrsldpc/Tbitsldpc, Ferrsldpc, Ferrsldpc/Ntrials); + end + printf("\n"); + end + end + + Ebvec = Esvec - 10*log10(bps); + sim_out.BERvec = BERvec; + sim_out.Ebvec = Ebvec; + sim_out.TERvec = TERvec; + sim_out.errors_log = errors_log; + sim_out.ldpc_errors_log = ldpc_errors_log; + + if plot_scatter + figure(2); + clf; + scat = rx_symb_log .* exp(j*pi/4); + plot(real(scat), imag(scat),'+'); + title('Scatter plot'); + a = 1.5*max(real(scat)); b = 1.5*max(imag(scat)); + axis([-a a -b b]); + + if hf_sim + figure(3); + clf; + + y = 1:(hf_n-1); + x = 1:Nc*Nd; + EsNodBSurface = 20*log10(abs(hf_model(y,:))) - 10*log10(variance); + EsNodBSurface(find(EsNodBSurface < -5)) = -5; + EsNodBSurface(find(EsNodBSurface > 25)) = 25; + mesh(x,y,EsNodBSurface); + grid + axis([1 Nc*Nd 1 Rs*5 -5 25]) + title('HF Channel Es/No'); + + if verbose + [m n] = size(hf_model); + av_hf_pwr = sum(sum(abs(hf_model(:,:)).^2))/(m*n); + printf("average HF power: %3.2f over %d symbols\n", av_hf_pwr, m*n); + end + + end + + if strcmp(modulation,'qpsk') + % set up time axis to include gaps for pilots + + [m1 n1] = size(phi_log); + phi_x = []; + phi_x_counter = 1; + p = Ns; + for r=1:m1 + if p == Ns + phi_x_counter += Npilotsframe; + p = 0; + end + p++; + phi_x = [phi_x phi_x_counter++]; + end + + phi_x -= Nsymbrowpilot; % account for delay in pilot buffer + + figure(5); + clf + subplot(211) + [m n] = size(phi_log); + plot(phi_x, phi_log(:,2),'r+;Estimated HF channel phase;') + if hf_sim + hold on; + [m n] = size(hf_model); + plot(angle(hf_model(1:m,2)),'g;HF channel phase;') + hold off; + end + ylabel('Phase (rads)'); + legend('boxoff'); + axis([1 m -1.1*pi 1.1*pi]) + + subplot(212) + plot(phi_x, amp_log(:,2),'r+;Estimated HF channel amp;') + if hf_sim + hold on; + plot(abs(hf_model(1:m,2))) + hold off; + end + ylabel('Amplitude'); + xlabel('Time (symbols)'); + legend('boxoff'); + axis([1 m 0 3]) + end + + figure(4) + clf + stem(Nerrs_log) + axis([1 length(Nerrs_log) 0 max(Nerrs_log)+1]) + end + +endfunction + +function sim_in = standard_init + sim_in.verbose = 1; + sim_in.do_write_pilot_file = 0; + sim_in.plot_scatter = 0; + + sim_in.Esvec = 50; + sim_in.Ntrials = 30; + sim_in.framesize = 2; + sim_in.Rs = 50; + + sim_in.phase_offset = 0; + sim_in.w_offset = 0; + sim_in.phase_noise_amp = 0; + + sim_in.hf_delay_ms = 2; + sim_in.hf_sim = 0; + sim_in.hf_mag_only = 0; + + sim_in.Nd = 1; +endfunction + + diff --git a/libcodec2-android/src/codec2/octave/cohpsk_lib.m b/libcodec2-android/src/codec2/octave/cohpsk_lib.m new file mode 100644 index 0000000..8545c94 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/cohpsk_lib.m @@ -0,0 +1,509 @@ +% cohpsk_lib.m +% David Rowe Mar 2015 +% +% Coherent PSK modem functions +% + +1; + +% Gray coded QPSK modulation function + +function symbol = qpsk_mod(two_bits) + two_bits_decimal = sum(two_bits .* [2 1]); + switch(two_bits_decimal) + case (0) symbol = 1; + case (1) symbol = j; + case (2) symbol = -j; + case (3) symbol = -1; + endswitch +endfunction + + +% Gray coded QPSK demodulation function + +function two_bits = qpsk_demod(symbol) + if isscalar(symbol) == 0 + printf("only works with scalars\n"); + return; + end + bit0 = real(symbol*exp(j*pi/4)) < 0; + bit1 = imag(symbol*exp(j*pi/4)) < 0; + two_bits = [bit1 bit0]; +endfunction + +% init function for symbol rate processing -------------------------------------------------------- + +function sim_in = symbol_rate_init(sim_in) + sim_in.Fs = Fs = 8000; + + modulation = sim_in.modulation; + verbose = sim_in.verbose; + framesize = sim_in.framesize; + Ntrials = sim_in.Ntrials; + Esvec = sim_in.Esvec; + phase_offset = sim_in.phase_offset; + w_offset = sim_in.w_offset; + plot_scatter = sim_in.plot_scatter; + + Rs = sim_in.Rs; + Nc = sim_in.Nc; + + hf_sim = sim_in.hf_sim; + nhfdelay = sim_in.hf_delay_ms*Rs/1000; + hf_mag_only = sim_in.hf_mag_only; + + Nd = sim_in.Nd; % diveristy + Ns = sim_in.Ns; % step size between pilots + ldpc_code = sim_in.ldpc_code; + rate = sim_in.ldpc_code_rate; + + sim_in.bps = bps = 2; + + sim_in.Nsymb = Nsymb = framesize/bps; + sim_in.Nsymbrow = Nsymbrow = Nsymb/Nc; + sim_in.Npilotsframe = Npilotsframe = 2; + sim_in.Nsymbrowpilot = Nsymbrowpilot = Nsymbrow + Npilotsframe; + + if verbose == 2 + printf("Each frame contains %d data bits or %d data symbols, transmitted as %d symbols by %d carriers.", framesize, Nsymb, Nsymbrow, Nc); + printf(" There are %d pilot symbols in each carrier together at the start of each frame, then %d data symbols.", Npilotsframe, Ns); + printf(" Including pilots, the frame is %d symbols long by %d carriers.\n\n", Nsymbrowpilot, Nc); + end + + sim_in.prev_sym_tx = qpsk_mod([0 0])*ones(1,Nc*Nd); + sim_in.prev_sym_rx = qpsk_mod([0 0])*ones(1,Nc*Nd); + + sim_in.rx_symb_buf = zeros(3*Nsymbrow, Nc*Nd); + sim_in.rx_pilot_buf = zeros(3*Npilotsframe,Nc*Nd); + sim_in.tx_bits_buf = zeros(1,2*framesize); + + % pilot sequence is used for phase and amplitude estimation, and frame sync + + pilot = 1 - 2*(rand(Npilotsframe,Nc) > 0.5); + sim_in.pilot = pilot; + sim_in.tx_pilot_buf = [pilot; pilot; pilot]; + + if sim_in.do_write_pilot_file + write_pilot_file(pilot, Nsymbrowpilot, Ns, Nsymbrow, Npilotsframe, Nc); + end + + % we use first 2 pilots of next frame to help with frame sync and fine freq + + sim_in.Nct_sym_buf = 2*Nsymbrowpilot + 2; + sim_in.ct_symb_buf = zeros(sim_in.Nct_sym_buf, Nc*Nd); + + sim_in.ff_phase = 1; + + sim_in.ct_symb_ff_buf = zeros(Nsymbrowpilot + 2, Nc*Nd); + + % Init LDPC -------------------------------------------------------------------- + + if ldpc_code + % Start CML library + + currentdir = pwd; + addpath '~/cml/mat' % assume the source files stored here + cd ~/cml + CmlStartup % note that this is not in the cml path! + cd(currentdir) + + % Our LDPC library + + ldpc; + + mod_order = 4; + modulation2 = 'QPSK'; + mapping = 'gray'; + + sim_in.demod_type = 0; + sim_in.decoder_type = 0; + sim_in.max_iterations = 100; + + code_param = ldpc_init(rate, framesize, modulation2, mod_order, mapping); + code_param.code_bits_per_frame = framesize; + code_param.symbols_per_frame = framesize/bps; + sim_in.code_param = code_param; + else + sim_in.rate = 1; + sim_in.code_param = []; + end +endfunction + + +% Symbol rate processing for tx side (modulator) ------------------------------------------------------- + +% legacy DQPSK mod for comparative testing + +function [tx_symb prev_tx_symb] = bits_to_dqpsk_symbols(sim_in, tx_bits, prev_tx_symb) + Nc = sim_in.Nc; + Nsymbrow = sim_in.Nsymbrow; + + tx_symb = zeros(Nsymbrow,Nc); + + for c=1:Nc + for r=1:Nsymbrow + i = (c-1)*Nsymbrow + r; + tx_symb(r,c) = qpsk_mod(tx_bits(2*(i-1)+1:2*i)); + tx_symb(r,c) *= prev_tx_symb(c); + prev_tx_symb(c) = tx_symb(r,c); + end + end + +endfunction + + +% legacy DQPSK demod for comparative testing + +function [rx_symb rx_bits rx_symb_linear prev_rx_symb] = dqpsk_symbols_to_bits(sim_in, rx_symb, prev_rx_symb) + Nc = sim_in.Nc; + Nsymbrow = sim_in.Nsymbrow; + + tx_symb = zeros(Nsymbrow,Nc); + + for c=1:Nc + for r=1:Nsymbrow + tmp = rx_symb(r,c); + rx_symb(r,c) *= conj(prev_rx_symb(c))/abs(prev_rx_symb(c)); + prev_rx_symb(c) = tmp; + i = (c-1)*Nsymbrow + r; + rx_symb_linear(i) = rx_symb(r,c); + rx_bits((2*(i-1)+1):(2*i)) = qpsk_demod(rx_symb(r,c)); + end + end + +endfunction + + +function [tx_symb tx_bits] = bits_to_qpsk_symbols(sim_in, tx_bits, code_param) + ldpc_code = sim_in.ldpc_code; + rate = sim_in.ldpc_code_rate; + framesize = sim_in.framesize; + Nsymbrow = sim_in.Nsymbrow; + Nsymbrowpilot = sim_in.Nsymbrowpilot; + Nc = sim_in.Nc; + Npilotsframe = sim_in.Npilotsframe; + Ns = sim_in.Ns; + modulation = sim_in.modulation; + pilot = sim_in.pilot; + Nd = sim_in.Nd; + + if ldpc_code + [tx_bits, tmp] = ldpc_enc(tx_bits, code_param); + end + + % modulate -------------------------------------------- + + % organise symbols into a Nsymbrow rows by Nc cols + % data and parity bits are on separate carriers + + tx_symb = zeros(Nsymbrow,Nc); + + for c=1:Nc + for r=1:Nsymbrow + i = (c-1)*Nsymbrow + r; + tx_symb(r,c) = qpsk_mod(tx_bits(2*(i-1)+1:2*i)); + end + end + + % insert pilots at start of frame + + tx_symb = [pilot(1,:); pilot(2,:); tx_symb;]; + + % copy to other carriers (diversity) + + tmp = tx_symb; + for d=1:Nd-1 + tmp = [tmp tx_symb]; + end + tx_symb = tmp; + + % ensures energy/symbol is normalised with diversity + + tx_symb = tx_symb/sqrt(Nd); +endfunction + + +% Symbol rate processing for rx side (demodulator) ------------------------------------------------------- + +function [rx_symb rx_bits rx_symb_linear amp_ phi_ sig_rms noise_rms cohpsk] = qpsk_symbols_to_bits(cohpsk, ct_symb_buf) + framesize = cohpsk.framesize; + Nsymb = cohpsk.Nsymb; + Nsymbrow = cohpsk.Nsymbrow; + Nsymbrowpilot = cohpsk.Nsymbrowpilot; + Nc = cohpsk.Nc; + Nd = cohpsk.Nd; + Npilotsframe = cohpsk.Npilotsframe; + pilot = cohpsk.pilot; + verbose = cohpsk.verbose; + coh_en = cohpsk.coh_en; + + % Use pilots to get phase and amplitude estimates We assume there + % are two samples at the start of each frame and two at the end + % Note: correlation (averging) method was used initially, but was + % poor at tracking fast phase changes that we experience on fading + % channels. Linear regression (fitting a straight line) works + % better on fading channels, but increases BER slightly for AWGN + % channels. + + sampling_points = [1 2 cohpsk.Nsymbrow+3 cohpsk.Nsymbrow+4]; + pilot2 = [cohpsk.pilot(1,:); cohpsk.pilot(2,:); cohpsk.pilot(1,:); cohpsk.pilot(2,:);]; + phi_ = zeros(Nsymbrow, Nc*Nd); + amp_ = zeros(Nsymbrow, Nc*Nd); + + for c=1:Nc*Nd + y = ct_symb_buf(sampling_points,c) .* pilot2(:,c-Nc*floor((c-1)/Nc)); + [m b] = linreg(sampling_points, y, length(sampling_points)); + yfit = m*[3 4 5 6] + b; + phi_(:, c) = angle(yfit); + + mag = sum(abs(ct_symb_buf(sampling_points,c))); + amp_(:, c) = mag/length(sampling_points); + end + + % now correct phase of data symbols + + rx_symb = zeros(Nsymbrow, Nc); + rx_symb_linear = zeros(1, Nsymbrow*Nc*Nd); + rx_bits = zeros(1, framesize); + for c=1:Nc*Nd + for r=1:Nsymbrow + if coh_en == 1 + rx_symb(r,c) = ct_symb_buf(2+r,c)*exp(-j*phi_(r,c)); + else + rx_symb(r,c) = ct_symb_buf(2+r,c); + end + i = (c-1)*Nsymbrow + r; + rx_symb_linear(i) = rx_symb(r,c); + end + end + + % and finally optional diversity combination and make decn on bits + + for c=1:Nc + for r=1:Nsymbrow + i = (c-1)*Nsymbrow + r; + div_symb = rx_symb(r,c); + for d=1:Nd-1 + div_symb += rx_symb(r,c + Nc*d); + end + rx_bits((2*(i-1)+1):(2*i)) = qpsk_demod(div_symb); + end + end + + % Estimate noise power from demodulated symbols. One method is to + % calculate the distance of each symbol from the average symbol + % position. However this is complicated by fading, which means the + % amplitude of the symbols is constantly changing. + + % Now the scatter diagram in a fading channel is a X or cross + % shape. The noise can be resolved into two components at right + % angles to each other. The component along the the "thickness" + % of the arms is proportional to the noise power and not affected + % by fading. We only use points further along the real axis than + % the mean amplitude so we keep out of the central nosiey blob + + sig_rms = mean(abs(rx_symb_linear)); + + sum_x = 0; + sum_xx = 0; + n = 0; + for i=1:Nsymb*Nd + s = rx_symb_linear(i); + if abs(real(s)) > sig_rms + sum_x += imag(s); + sum_xx += imag(s)*imag(s); + n++; + end + end + + noise_var = 0; + if n > 1 + noise_var = (n*sum_xx - sum_x*sum_x)/(n*(n-1)); + end + noise_rms = sqrt(noise_var); +endfunction + +function [ch_symb rx_timing rx_filt rx_baseband afdmdv f_est] = rate_Fs_rx_processing(afdmdv, ch_fdm_frame, f_est, nsymb, nin, freq_track) + M = afdmdv.M; + + rx_baseband = []; + rx_filt = []; + rx_timing = []; + + ch_fdm_frame_index = 1; + + for r=1:nsymb + % shift signal to nominal baseband, this will put Nc/2 carriers either side of 0 Hz + + [rx_fdm_frame_bb afdmdv.fbb_phase_rx] = freq_shift(ch_fdm_frame(ch_fdm_frame_index:ch_fdm_frame_index + nin - 1), -f_est, afdmdv.Fs, afdmdv.fbb_phase_rx); + ch_fdm_frame_index += nin; + + % downconvert each FDM carrier to Nc separate baseband signals + + [arx_baseband afdmdv] = fdm_downconvert(afdmdv, rx_fdm_frame_bb, nin); + [arx_filt afdmdv] = rx_filter(afdmdv, arx_baseband, nin); + [rx_onesym arx_timing env afdmdv] = rx_est_timing(afdmdv, arx_filt, nin); + + rx_baseband = [rx_baseband arx_baseband]; + rx_filt = [rx_filt arx_filt]; + rx_timing = [rx_timing arx_timing]; + + ch_symb(r,:) = rx_onesym; + + % we only allow a timing shift on one symbol per frame + + if nin != M + nin = M; + end + + % freq tracking, see test_ftrack.m for unit test. Placed in + % this function as it needs to work on a symbol by symbol basis + % rather than frame by frame. This means the control loop + % operates at a sample rate of Rs = 50Hz for say 1 Hz/s drift. + + if freq_track + beta = 0.005; + g = 0.2; + + % combine difference on phase from last symbol over Nc carriers + + mod_strip = 0; + for c=1:afdmdv.Nc+1 + adiff = rx_onesym(c) .* conj(afdmdv.prev_rx_symb(c)); + afdmdv.prev_rx_symb(c) = rx_onesym(c); + + % 4th power strips QPSK modulation, by multiplying phase by 4 + % Using the abs value of the real coord was found to help + % non-linear issues when noise power was large + + amod_strip = adiff.^4; + amod_strip = abs(real(amod_strip)) + j*imag(amod_strip); + mod_strip += amod_strip; + end + + % loop filter made up of 1st order IIR plus integrator. Integerator + % was found to be reqd + + afdmdv.filt = (1-beta)*afdmdv.filt + beta*angle(mod_strip); + f_est += g*afdmdv.filt; + end + end +endfunction + + +function ct_symb_buf = update_ct_symb_buf(ct_symb_buf, ch_symb, Nct_sym_buf, Nsymbrowpilot) + + % update memory in symbol buffer + + for r=1:Nct_sym_buf-Nsymbrowpilot + ct_symb_buf(r,:) = ct_symb_buf(r+Nsymbrowpilot,:); + end + i = 1; + for r=Nct_sym_buf-Nsymbrowpilot+1:Nct_sym_buf + ct_symb_buf(r,:) = ch_symb(i,:); + i++; + end +endfunction + + +% returns index of start of frame and fine freq offset + +function [next_sync cohpsk] = frame_sync_fine_freq_est(cohpsk, ch_symb, sync, next_sync) + ct_symb_buf = cohpsk.ct_symb_buf; + Nct_sym_buf = cohpsk.Nct_sym_buf; + Rs = cohpsk.Rs; + Nsymbrowpilot = cohpsk.Nsymbrowpilot; + Nc = cohpsk.Nc; + Nd = cohpsk.Nd; + + ct_symb_buf = update_ct_symb_buf(ct_symb_buf, ch_symb, Nct_sym_buf, Nsymbrowpilot); + cohpsk.ct_symb_buf = ct_symb_buf; + + % sample pilots at start of this frame and start of next frame + + sampling_points = [1 2 cohpsk.Nsymbrow+3 cohpsk.Nsymbrow+4]; + pilot2 = [ cohpsk.pilot(1,:); cohpsk.pilot(2,:); cohpsk.pilot(1,:); cohpsk.pilot(2,:);]; + + if sync == 0 + + % sample correlation over 2D grid of time and fine freq points + + max_corr = 0; + for f_fine=-20:0.25:20 + f_fine_rect = exp(-j*f_fine*2*pi*sampling_points/Rs)'; % note: this could be pre-computed at init or compile time + for t=0:cohpsk.Nsymbrowpilot-1 + corr = 0; mag = 0; + for c=1:Nc*Nd + f_corr_vec = f_fine_rect .* ct_symb_buf(t+sampling_points,c); % note: this could be pre-computed at init or compile time + acorr = 0.0; + for p=1:length(sampling_points) + acorr += pilot2(p,c-Nc*floor((c-1)/Nc)) * f_corr_vec(p); + mag += abs(f_corr_vec(p)); + end + corr += abs(acorr); + end + + if corr >= max_corr + max_corr = corr; + max_mag = mag; + cohpsk.ct = t; + cohpsk.f_fine_est = f_fine; + cohpsk.ff_rect = exp(-j*f_fine*2*pi/Rs); + end + end + end + + printf(" [%d] fine freq f: %f max_ratio: %f ct: %d\n", cohpsk.frame, cohpsk.f_fine_est, abs(max_corr)/max_mag, cohpsk.ct); + if abs(max_corr/max_mag) > 0.9 + printf(" [%d] encouraging sync word! ratio: %f\n", cohpsk.frame, abs(max_corr/max_mag)); + cohpsk.sync_timer = 0; + next_sync = 1; + else + next_sync = 0; + end + cohpsk.ratio = abs(max_corr/max_mag); + end + + % single point correlation just to see if we are still in sync + + if sync == 1 + corr = 0; mag = 0; + f_fine_rect = exp(-j*cohpsk.f_fine_est*2*pi*sampling_points/Rs)'; + for c=1:Nc*Nd + f_corr_vec = f_fine_rect .* ct_symb_buf(cohpsk.ct+sampling_points,c); + acorr = 0; + for p=1:length(sampling_points) + acorr += pilot2(p, c-Nc*floor((c-1)/Nc)) * f_corr_vec(p); + mag += abs(f_corr_vec(p)); + end + corr += abs(acorr); + end + cohpsk.ratio = abs(corr)/mag; + end + +endfunction + + +% misc sync state machine code, just wanted it in a function + +function [sync cohpsk] = sync_state_machine(cohpsk, sync, next_sync) + + if sync == 1 + + % check that sync is still good, fall out of sync on consecutive bad frames */ + + if cohpsk.ratio < 0.8 + cohpsk.sync_timer++; + else + cohpsk.sync_timer = 0; + end + + if cohpsk.sync_timer == 10 + printf(" [%d] lost sync ....\n", cohpsk.frame); + next_sync = 0; + end + end + + sync = next_sync; +endfunction + diff --git a/libcodec2-android/src/codec2/octave/cohpsk_plots.m b/libcodec2-android/src/codec2/octave/cohpsk_plots.m new file mode 100644 index 0000000..9fc9a11 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/cohpsk_plots.m @@ -0,0 +1,141 @@ +% cohpsk_plots.m +% David Rowe Feb 2017 +% +% Generate some plots for chps modem blog post + +rand("seed",1); + +% Multipath with simple unfiltered BPSK signal + +N = 100; % number of symbols +M = 4; % oversample rate + +tx_bits = rand(1,N) > 0.5; +tx_symbols = 2*tx_bits - 1; +tx = zeros(1,N*M); + +for i=1:N + tx((i-1)*M+1:i*M) = tx_symbols(i); +end + +h = [0 0 0 0 0.5]; % model of second path + +rx1 = tx; +rx2 = filter(h,1,tx); +rx = rx1 + rx2; + +% Multipath in time domain + +figure(1); clf; +subplot(311) +plot(rx1, "linewidth", 4) +axis([0 10*M+1 -2 2]); +subplot(312) +plot(rx2, "linewidth", 4) +axis([0 10*M+1 -2 2]); +subplot(313) +plot(rx, "linewidth", 4) +axis([0 10*M+1 -2 2]); +xlabel('Time'); +print("cohpsk_multipath_time.png", "-dpng", "-S600,440", "-F:8") + +% Multipath channel magnitude and phase response against frequency + +h = [1 0 0 0 0.5]; % model of two path multipath channel +H = freqz(h,1,100); + +figure(2); clf; +subplot(211) +plot(20*log10(abs(H)), "linewidth", 4) +title('Amplitude (dB)'); +subplot(212) +plot(angle(H), "linewidth", 4) +title('Phase (rads)'); +%axis([0 500 -2 2]); +xlabel('Frequency'); +print("cohpsk_multipath_channel.png", "-dpng", "-S600,440", "-F:8") + +% Effective of 1 sample multipath for different symbols lengths + +h = [1 0 0 0 0.5]; % model of two path multipath channel +M1 = 2; +M2 = 20; +tx1 = zeros(1,N*M1); +tx2 = zeros(1,N*M2); +for i=1:N + tx1((i-1)*M1+1:i*M1) = tx_symbols(i); + tx2((i-1)*M2+1:i*M2) = tx_symbols(i); +end + +rx1 = filter(h,1,tx1); +rx2 = filter(h,1,tx2); + +figure(3); clf; +subplot(211) +plot(rx1, "linewidth", 4) +axis([0 10*M1+1 -2 2]); +title('1ms multipath with 2ms symbols') +subplot(212) +plot(rx2, "linewidth", 4) +axis([0 10*M2+1 -2 2]); +title('1ms multipath with 20ms symbols') +xlabel('Time'); +print("cohpsk_multipath_symbol_length.png", "-dpng", "-S600,440", "-F:8") + +% DBPSK -------------------------------------------------- + +N = 10; +tx_bits = rand(1,N) > 0.5; +bpsk = 2*tx_bits - 1; +prev_bpsk = 1; +for i=1:N + + % BPSK -> DBPSK + + dbpsk(i) = bpsk(i) * (-prev_bpsk); + prev_bpsk = bpsk(i); + + % oversampling + + tx_bpsk((i-1)*M+1:i*M) = bpsk(i); + tx_dbpsk((i-1)*M+1:i*M) = dbpsk(i); +end + +figure(4); clf; +subplot(211); +plot(tx_bpsk, "linewidth", 4) +axis([0 10*M+1 -2 2]); +title('Tx BPSK'); +subplot(212); +plot(tx_dbpsk, "linewidth", 4) +axis([0 10*M+1 -2 2]); +title('Tx DBPSK'); +print("cohpsk_dbpsk1.png", "-dpng", "-S600,440", "-F:8") + +dbpsk *= -1; + +prev_rx = 1; +for i=1:N + + % rx DBPSK -> PSK + + bpsk(i) = dbpsk(i) * (prev_rx); + prev_rx = bpsk(i); + + % oversampling + + rx_bpsk((i-1)*M+1:i*M) = bpsk(i); + rx_dbpsk((i-1)*M+1:i*M) = dbpsk(i); +end + +figure(5); clf; +subplot(211); +plot(rx_dbpsk, "linewidth", 4) +axis([0 10*M+1 -2 2]); +title('Rx DBPSK with 180 deg phase shift'); +subplot(212); +plot(rx_bpsk, "linewidth", 4) +axis([0 10*M+1 -2 2]); +title('Rx BPSK'); +print("cohpsk_dbpsk2.png", "-dpng", "-S600,440", "-F:8") + diff --git a/libcodec2-android/src/codec2/octave/crc16.m b/libcodec2-android/src/codec2/octave/crc16.m new file mode 100644 index 0000000..aafc432 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/crc16.m @@ -0,0 +1,55 @@ +% crc16.m +% +%The CRC calculation is based on following generator polynomial: +%G(x) = x16 + x12 + x5 + 1 +% +%The register initial value of the implementation is: 0xFFFF +% +%used data = string -> 1 2 3 4 5 6 7 8 9 +% +% Online calculator to check the script: +%http://www.lammertbies.nl/comm/info/crc-calculation.html +% +% + +function crc = crc16(data) + + % crc look up table + + Crc_ui16LookupTable=[0,4129,8258,12387,16516,20645,24774,28903,33032,37161,41290,45419,49548,... + 53677,57806,61935,4657,528,12915,8786,21173,17044,29431,25302,37689,33560,45947,41818,54205,... + 50076,62463,58334,9314,13379,1056,5121,25830,29895,17572,21637,42346,46411,34088,38153,58862,... + 62927,50604,54669,13907,9842,5649,1584,30423,26358,22165,18100,46939,42874,38681,34616,63455,... + 59390,55197,51132,18628,22757,26758,30887,2112,6241,10242,14371,51660,55789,59790,63919,35144,... + 39273,43274,47403,23285,19156,31415,27286,6769,2640,14899,10770,56317,52188,64447,60318,39801,... + 35672,47931,43802,27814,31879,19684,23749,11298,15363,3168,7233,60846,64911,52716,56781,44330,... + 48395,36200,40265,32407,28342,24277,20212,15891,11826,7761,3696,65439,61374,57309,53244,48923,... + 44858,40793,36728,37256,33193,45514,41451,53516,49453,61774,57711,4224,161,12482,8419,20484,... + 16421,28742,24679,33721,37784,41979,46042,49981,54044,58239,62302,689,4752,8947,13010,16949,... + 21012,25207,29270,46570,42443,38312,34185,62830,58703,54572,50445,13538,9411,5280,1153,29798,... + 25671,21540,17413,42971,47098,34713,38840,59231,63358,50973,55100,9939,14066,1681,5808,26199,... + 30326,17941,22068,55628,51565,63758,59695,39368,35305,47498,43435,22596,18533,30726,26663,6336,... + 2273,14466,10403,52093,56156,60223,64286,35833,39896,43963,48026,19061,23124,27191,31254,2801,6864,... + 10931,14994,64814,60687,56684,52557,48554,44427,40424,36297,31782,27655,23652,19525,15522,11395,... + 7392,3265,61215,65342,53085,57212,44955,49082,36825,40952,28183,32310,20053,24180,11923,16050,3793,7920]; + + ui16RetCRC16 = hex2dec('FFFF'); + for I=1:length(data) + ui8LookupTableIndex = bitxor(data(I),uint8(bitshift(ui16RetCRC16,-8))); + ui16RetCRC16 = bitxor(Crc_ui16LookupTable(double(ui8LookupTableIndex)+1),mod(bitshift(ui16RetCRC16,8),65536)); + end + crc=dec2hex(ui16RetCRC16); + +endfunction + + + + + + + + + + + + diff --git a/libcodec2-android/src/codec2/octave/doppler_spread.m b/libcodec2-android/src/codec2/octave/doppler_spread.m new file mode 100644 index 0000000..b6fccf5 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/doppler_spread.m @@ -0,0 +1,38 @@ +% doppler_spread.m +% David Rowe Jan 2016 +% +% Returns gausssian filtered doppler spreading function samples for HF channel +% modelling. Used PathSim technical guide as a reference - thanks Moe! + +function [spread_FsHz states] = doppler_spread(dopplerSpreadHz, FsHz, Nsam) + + % start with low Fs so we can work with a reasonable filter length + + sigma = dopplerSpreadHz/2; + lowFs = ceil(10*dopplerSpreadHz); + Ntaps = 100; + Nsam_low = ceil(Nsam*lowFs/FsHz + Ntaps); % fill filter memory + + % generate gaussian freq response and design filter + + x = 0:lowFs/100:lowFs/2; + y = (1/(sigma*sqrt(2*pi)))*exp(-(x.^2)/(2*sigma*sigma)); + b = fir2(Ntaps-1, x/(lowFs/2), y); + + % generate the spreading samples + + spread_lowFs = filter(b,1,randn(1,Nsam_low) + j*randn(1,Nsam_low)); + + % resample to FsHz, scaling for desired spreadFreqHz + + spread_FsHz = resample(spread_lowFs(Ntaps+1:Nsam_low), FsHz, lowFs); + assert(length(spread_FsHz) >= Nsam); + + % return some states for optional unit testing + states.x = x; + states.y = y; + states.b = b; + +endfunction + + diff --git a/libcodec2-android/src/codec2/octave/doppler_spread_ut.m b/libcodec2-android/src/codec2/octave/doppler_spread_ut.m new file mode 100644 index 0000000..f7d96b0 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/doppler_spread_ut.m @@ -0,0 +1,51 @@ +% doppler_spread_ut.m +% David Rowe Jan 2016 +% +% Unit test script for doppler_spread + +f = 1; +Fs = 8000; +N = Fs*10; + +[spread states] = doppler_spread(f, Fs, N); + +% use spreading samples to modulate 1000Hz sine wave +% You can listen to this with: sine1k_1Hz.raw + +% $ play -t raw -r 8000 -s -2 +s = cos(2*pi*(1:N)*1000/Fs); +s = s .* spread; +s = real(s)*5000; +fs = fopen("sine1k_1Hz.raw","wb"); fwrite(fs,s,"short"); fclose(fs); + +% Some plots + +x = states.x; y = states.y; b = states.b; + +H = freqz(b,1,x); + +figure(1) +clf +subplot(211) +plot(x,y,';target;') +title('Gaussian Filter Freq Resp Lin'); +legend('boxoff'); +subplot(212) +plot(x,20*log10(y),';target;') +hold on; +plot(x,20*log10(y),'g+;actual;') +hold off; +axis([0 f*10/2 -60 0]) +title('Gaussian Filter Freq Resp dB'); +xlabel('Freq (Hz)'); +legend('boxoff'); + +figure(2); +subplot(211) +plot(abs(spread)) +title('Spreading Function Magnitude'); +subplot(212) +plot(s) +title('1000Hz Sine Wave'); +xlabel('Time (samples)') + diff --git a/libcodec2-android/src/codec2/octave/estsnr.m b/libcodec2-android/src/codec2/octave/estsnr.m new file mode 100644 index 0000000..5a00bd8 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/estsnr.m @@ -0,0 +1,65 @@ +% estsnr.m +% David Rowe May 2017 +% +% estimate SNR of a sinewave in noise + +function snr_dB = estsnr(x, Fs=8000, Nbw = 3000) + + [nr nc] = size(x); + if nr == 1 + x = x'; + end + + % find peak in +ve side of spectrum, ignoring DC + + L = length(x); + X = abs(fft(x)); + st = floor(0.05*L); en = floor(0.45*L); + [A mx_ind]= max(X(st:en)); + mx_ind += st; + + % signal energy might be spread by doppler, so sum energy + % in frequencies +/- 1% + + s_st = floor(mx_ind*0.99); s_en = floor(mx_ind*1.01); + S = sum(X(s_st:s_en).^2); + + % real signal, so -ve power is the same + + S = 2*S; + SdB = 10*log10(S); + + printf("Signal Power S: %3.2f dB\n", SdB); + + % locate a band of noise next to it and find power in band + + st = floor(mx_ind+0.05*(L/2)); + en = st + floor(0.1*(L/2)); + + N = sum(X(st:en).^2); + + % scale this to obtain total noise power across total bandwidth + + N *= L/(en-st); + NdB = 10*log10(N); + printf("Noise Power N: %3.2f dB\n", NdB); + + % scale noise to designed noise bandwidth /2 fudge factor as its a + % real signal, wish I had a better way to explain that! + + NodB = NdB - 10*log10(Fs/2); + NscaleddB = NodB + 10*log10(Nbw); + snr_dB = SdB - NscaleddB; + + figure(1); clf; + plot(20*log10(X(1:L/2)),'b'); + hold on; + plot([s_st s_en], [NdB NdB]- 10*log10(L), 'r'); + plot([st en], [NdB NdB]- 10*log10(L), 'r'); + hold off; + top = 10*ceil(SdB/10); + bot = NodB - 20; + axis([1 L/2 bot top]); + grid + grid("minor") +endfunction diff --git a/libcodec2-android/src/codec2/octave/fdmdv.m b/libcodec2-android/src/codec2/octave/fdmdv.m new file mode 100644 index 0000000..a3d1cdc --- /dev/null +++ b/libcodec2-android/src/codec2/octave/fdmdv.m @@ -0,0 +1,979 @@ +% fdmdv.m +% +% Functions that implement a Frequency Divison Multiplexed Modem for +% Digital Voice (FDMDV) over HF channels. +% +% Copyright David Rowe 2012 +% This program is distributed under the terms of the GNU General Public License +% Version 2 +% +% TODO: +% [X] refactor with states +% [X] remove commented out globals +% [X] tfdmdv works +% [X] fdmdv_demod works +% [ ] fdmdv_ut works + +% reqd to make sure we get same random bits at mod and demod + +fdmdv_common; + +rand('state',1); +randn('state',1); + +% Functions ---------------------------------------------------- + + +function f = fdmdv_init(Nc=14) + Fs = f.Fs = 8000; % sample rate in Hz + T = f.T = 1/Fs; % sample period in seconds + Rs = f.Rs = 50; % symbol rate in Hz + f.Nc = Nc; + Nb = f.Nb = 2; % Bits/symbol for PSK modulation + Rb = f.Rb = Nc*Rs*Nb; % bit rate + M = f.M = Fs/Rs; % oversampling factor + Nsym = f.Nsym = 6; % number of symbols to filter over + + Fsep = f.Fsep = 75; % Separation between carriers (Hz) + Fcenter = f.Fcentre = 1500; % Centre frequency, Nc/2 carriers below this, + % Nc/2 carriers above (Hz) + Nt = f.Nt = 5; % number of symbols we estimate timing over + P = f.P = 4; % oversample factor used for rx symbol filtering + Nfilter = f.Nfilter = Nsym*M; + + Nfiltertiming = f.Nfiltertiming = M+Nfilter+M; + + Nsync_mem = f.Nsync_mem = 6; + f.sync_uw = [1 -1 1 -1 1 -1]; + + alpha = 0.5; + f.gt_alpha5_root = gen_rn_coeffs(alpha, T, Rs, Nsym, M); + + f.pilot_bit = 0; % current value of pilot bit + + f.tx_filter_memory = zeros(Nc+1, Nfilter); + f.rx_filter_memory = zeros(Nc+1, Nfilter); + f.Nrx_fdm_mem = Nfilter+M+M/P; + f.rx_fdm_mem = zeros(1,f.Nrx_fdm_mem); + + f.snr_coeff = 0.9; % SNR est averaging filter coeff + + % phasors used for up and down converters + + f.freq = zeros(Nc+1,1); + f.freq_pol = zeros(Nc+1,1); + + for c=1:Nc/2 + carrier_freq = (-Nc/2 - 1 + c)*Fsep; + f.freq_pol(c) = 2*pi*carrier_freq/Fs; + f.freq(c) = exp(j*f.freq_pol(c)); + end + + for c=floor(Nc/2)+1:Nc + carrier_freq = (-Nc/2 + c)*Fsep; + f.freq_pol(c) = 2*pi*carrier_freq/Fs; + f.freq(c) = exp(j*f.freq_pol(c)); + end + + f.freq_pol(Nc+1) = 2*pi*0/Fs; + f.freq(Nc+1) = exp(j*f.freq_pol(Nc+1)); + + f.fbb_rect = exp(j*2*pi*f.Fcentre/Fs); + f.fbb_phase_tx = 1; + f.fbb_phase_rx = 1; + + % Spread initial FDM carrier phase out as far as possible. This + % helped PAPR for a few dB. We don't need to adjust rx phase as DQPSK + % takes care of that. + + f.phase_tx = ones(Nc+1,1); + f.phase_tx = exp(j*2*pi*(0:Nc)/(Nc+1)); + f.phase_rx = ones(Nc+1,1); + + % decimation filter + + f.Nrxdec = 31; + % fir1() output appears to have changed from when coeffs used in C port were used + %f.rxdec_coeff = fir1(f.Nrxdec-1, 0.25); + f.rxdec_coeff = [-0.00125472 -0.00204605 -0.0019897 0.000163906 0.00490937 0.00986375 ... + 0.0096718 -0.000480351 -0.019311 -0.0361822 -0.0341251 0.000827866 ... + 0.0690577 0.152812 0.222115 0.249004 0.222115 0.152812 ... + 0.0690577 0.000827866 -0.0341251 -0.0361822 -0.019311 -0.000480351 ... + 0.0096718 0.00986375 0.00490937 0.000163906 -0.0019897 -0.00204605 ... + -0.00125472]; + + % we need room for Nrdec + the max nin, as we may need to filter max_min samples + + f.Nrxdecmem = f.Nrxdec+M+M/P; + f.rxdec_lpf_mem = zeros(1,f.Nrxdecmem); + f.Q=M/4; + + % freq offset estimation + + f.Mpilotfft = 256; + f.Npilotcoeff = 30; + + % here's how to make this filter from scratch, however it appeared to change over different + % octave versions so have hard coded to version used for C port + %f.pilot_coeff = fir1(f.Npilotcoeff-1, 200/(Fs/2))'; % 200Hz LPF + f.pilot_coeff = [0.00223001 0.00301037 0.00471258 0.0075934 0.0118145 0.0174153 ... + 0.0242969 0.0322204 0.0408199 0.0496286 0.0581172 0.0657392 ... + 0.0719806 0.0764066 0.0787022 0.0787022 0.0764066 0.0719806 ... + 0.0657392 0.0581172 0.0496286 0.0408199 0.0322204 0.0242969 ... + 0.0174153 0.0118145 0.0075934 0.00471258 0.00301037 0.00223001]; + + f.Npilotbaseband = f.Npilotcoeff + M + M/P; % number of pilot baseband samples + f.Npilotlpf = 4*M; % reqd for pilot LPF + % number of symbols we DFT pilot over + % pilot est window + + % pilot LUT, used for copy of pilot at rx + + f.pilot_lut = generate_pilot_lut(f); + f.pilot_lut_index = 1; + f.prev_pilot_lut_index = 3*M+1; + + % Freq offset estimator states + + f.pilot_baseband1 = zeros(1, f.Npilotbaseband); % pilot baseband samples + f.pilot_baseband2 = zeros(1, f.Npilotbaseband); % pilot baseband samples + f.pilot_lpf1 = zeros(1, f.Npilotlpf); % LPF pilot samples + f.pilot_lpf2 = zeros(1, f.Npilotlpf); % LPF pilot samples + + % Timing estimator states + + f.rx_filter_mem_timing = zeros(Nc+1, Nt*P); + f.rx_baseband_mem_timing = zeros(Nc+1, f.Nfiltertiming); + + % Test bit stream state variables + + f = init_test_bits(f); +endfunction + + +% generate Nc+1 PSK symbols from vector of (1,Nc*Nb) input bits. The +% Nc+1 symbol is the +1 -1 +1 .... BPSK sync carrier + +function [tx_symbols f] = bits_to_psk(f, prev_tx_symbols, tx_bits) + Nc = f.Nc; Nb = f.Nb; + m4_gray_to_binary = [ + bin2dec("00") + bin2dec("01") + bin2dec("11") + bin2dec("10") + ]; + m8_gray_to_binary = [ + bin2dec("000") + bin2dec("001") + bin2dec("011") + bin2dec("010") + bin2dec("111") + bin2dec("110") + bin2dec("100") + bin2dec("101") + ]; + + assert(length(tx_bits) == Nc*Nb, "Incorrect number of bits"); + + m = 2 .^ Nb; + assert((m == 4) || (m == 8)); + + for c=1:Nc + + % extract bits for this symbol + + bits_binary = tx_bits((c-1)*Nb+1:c*Nb); + bits_decimal = sum(bits_binary .* 2.^(Nb-1:-1:0)); + + % determine phase shift using gray code mapping + + if m == 4 + phase_shift = (2*pi/m)*m4_gray_to_binary(bits_decimal+1); + else + phase_shift = (2*pi/m)*m8_gray_to_binary(bits_decimal+1); + end + + % apply phase shift from previous symbol + + tx_symbols(c) = exp(j*phase_shift) * prev_tx_symbols(c); + end + + % +1 -1 +1 -1 BPSK sync carrier, once filtered becomes two spectral + % lines at +/- Rs/2 + + if f.pilot_bit + tx_symbols(Nc+1) = -prev_tx_symbols(Nc+1); + else + tx_symbols(Nc+1) = prev_tx_symbols(Nc+1); + end + if f.pilot_bit + f.pilot_bit = 0; + else + f.pilot_bit = 1; + end + +endfunction + +% LP filter +/- 1000 Hz, allows us to perform rx filtering at a lower rate saving CPU + +function [rx_fdm_filter fdmdv] = rxdec_filter(fdmdv, rx_fdm, nin) + M = fdmdv.M; + Nrxdecmem = fdmdv.Nrxdecmem; + Nrxdec = fdmdv.Nrxdec; + rxdec_coeff = fdmdv.rxdec_coeff; + rxdec_lpf_mem = fdmdv.rxdec_lpf_mem; + + % place latest nin samples at end of buffer + + rxdec_lpf_mem(1:Nrxdecmem-nin) = rxdec_lpf_mem(nin+1:Nrxdecmem); + rxdec_lpf_mem(Nrxdecmem-nin+1:Nrxdecmem) = rx_fdm(1:nin); + + % init room for nin output samples + + rx_fdm_filter = zeros(1,nin); + + % Move starting point for filter dot product to filter newest samples + % in buffer. This stuff makes my head hurt. + + st = Nrxdecmem - nin - Nrxdec + 1; + for i=1:nin + a = st+1; b = st+i+Nrxdec-1; + %printf("nin: %d i: %d a: %d b: %d\n", nin, i, a, b); + rx_fdm_filter(i) = rxdec_lpf_mem(st+i:st+i+Nrxdec-1) * rxdec_coeff'; + end + + fdmdv.rxdec_lpf_mem = rxdec_lpf_mem; +end + + +% Combined down convert and rx filter, more memory efficient but less intuitive design +% TODO: Decimate mem update and downconversion, this will save some more CPU and memory +% note phase would have to advance 4 times as fast + +function [rx_filt fdmdv] = down_convert_and_rx_filter(fdmdv, rx_fdm, nin, dec_rate) + Nc = fdmdv.Nc; + M = fdmdv.M; + P = fdmdv.P; + rx_fdm_mem = fdmdv.rx_fdm_mem; + Nrx_fdm_mem = fdmdv.Nrx_fdm_mem; + phase_rx = fdmdv.phase_rx; + freq = fdmdv.freq; + freq_pol = fdmdv.freq_pol; + Nfilter = fdmdv.Nfilter; + gt_alpha5_root = fdmdv.gt_alpha5_root; + Q = fdmdv.Q; + + % update memory of rx_fdm_mem, newest nin sample ast end of buffer + + rx_fdm_mem(1:Nrx_fdm_mem-nin) = rx_fdm_mem(nin+1:Nrx_fdm_mem); + rx_fdm_mem(Nrx_fdm_mem-nin+1:Nrx_fdm_mem) = rx_fdm(1:nin); + + for c=1:Nc+1 + + #{ + So we have rx_fdm_mem, a baseband array of samples at + rate Fs Hz, including the last nin samples at the end. To + filter each symbol we require the baseband samples for all Nsym + symbols that we filter over. So we need to downconvert the + entire rx_fdm_mem array. To downconvert these we need the LO + phase referenced to the start of the rx_fdm_mem array. + + + <--------------- Nrx_filt_mem -------> + nin + |--------------------------|---------| + 1 | + phase_rx(c) + + This means winding phase(c) back from this point + to ensure phase continuity. + #} + + wind_back_phase = -freq_pol(c)*(Nfilter); + phase_rx(c) = phase_rx(c)*exp(j*wind_back_phase); + + % down convert all samples in buffer + + rx_baseband = zeros(1,Nrx_fdm_mem); + + st = Nrx_fdm_mem; % end of buffer + st -= nin-1; % first new sample + st -= Nfilter; % first sample used in filtering + + %printf("Nfilter: %d Nrx_fdm_mem: %d dec_rate: %d nin: %d st: %d\n", + % Nfilter, Nrx_fdm_mem, dec_rate, nin, st); + + f_rect = freq(c) .^ dec_rate; + + for i=st:dec_rate:Nrx_fdm_mem + phase_rx(c) = phase_rx(c) * f_rect; + rx_baseband(i) = rx_fdm_mem(i)*phase_rx(c)'; + end + + % now we can filter this carrier's P (+/-1) symbols. Due to + % filtering of rx_fdm we can filter at rate at rate M/Q + + N=M/P; k = 1; + for i=1:N:nin + rx_filt(c,k) = (M/Q)*rx_baseband(st+i-1:dec_rate:st+i-1+Nfilter-1) * gt_alpha5_root(1:dec_rate:length(gt_alpha5_root))'; + k+=1; + end + end + + fdmdv.phase_rx = phase_rx; + fdmdv.rx_fdm_mem = rx_fdm_mem; +endfunction + + +% LPF and peak pick part of freq est, put in a function as we call it twice + +function [foff imax pilot_lpf_out S] = lpf_peak_pick(f, pilot_baseband, pilot_lpf, nin, do_fft) + M = f.M; + Npilotlpf = f.Npilotlpf; + Npilotbaseband = f.Npilotbaseband; + Npilotcoeff = f.Npilotcoeff; + Fs = f.Fs; + Mpilotfft = f.Mpilotfft; + pilot_coeff = f.pilot_coeff; + + % LPF cutoff 200Hz, so we can handle max +/- 200 Hz freq offset + + pilot_lpf(1:Npilotlpf-nin) = pilot_lpf(nin+1:Npilotlpf); + k = Npilotbaseband-nin+1;; + for i = Npilotlpf-nin+1:Npilotlpf + pilot_lpf(i) = pilot_baseband(k-Npilotcoeff+1:k) * pilot_coeff'; + k++; + end + + imax = 0; + foff = 0; + S = zeros(1, Mpilotfft); + + if do_fft + % decimate to improve DFT resolution, window and DFT + + Mpilot = Fs/(2*200); % calc decimation rate given new sample rate is twice LPF freq + h = hanning(Npilotlpf); + s = pilot_lpf(1:Mpilot:Npilotlpf) .* h(1:Mpilot:Npilotlpf)'; + s = [s zeros(1,Mpilotfft-Npilotlpf/Mpilot)]; + S = fft(s, Mpilotfft); + + % peak pick and convert to Hz + + [imax ix] = max(abs(S)); + r = 2*200/Mpilotfft; % maps FFT bin to frequency in Hz + + if ix > Mpilotfft/2 + foff = (ix - Mpilotfft - 1)*r; + else + foff = (ix - 1)*r; + endif + end + + pilot_lpf_out = pilot_lpf; + +endfunction + + +% Estimate frequency offset of FDM signal using BPSK pilot. This is quite +% sensitive to pilot tone level wrt other carriers + +function [foff S1 S2 f] = rx_est_freq_offset(f, rx_fdm, pilot, pilot_prev, nin, do_fft) + M = f.M; + Npilotbaseband = f.Npilotbaseband; + pilot_baseband1 = f.pilot_baseband1; + pilot_baseband2 = f.pilot_baseband2; + pilot_lpf1 = f.pilot_lpf1; + pilot_lpf2 = f.pilot_lpf2; + + % down convert latest nin samples of pilot by multiplying by ideal + % BPSK pilot signal we have generated locally. The peak of the DFT + % of the resulting signal is sensitive to the time shift between the + % received and local version of the pilot, so we do it twice at + % different time shifts and choose the maximum. + + pilot_baseband1(1:Npilotbaseband-nin) = pilot_baseband1(nin+1:Npilotbaseband); + pilot_baseband2(1:Npilotbaseband-nin) = pilot_baseband2(nin+1:Npilotbaseband); + for i=1:nin + pilot_baseband1(Npilotbaseband-nin+i) = rx_fdm(i) * conj(pilot(i)); + pilot_baseband2(Npilotbaseband-nin+i) = rx_fdm(i) * conj(pilot_prev(i)); + end + + [foff1 max1 pilot_lpf1 S1] = lpf_peak_pick(f, pilot_baseband1, pilot_lpf1, nin, do_fft); + [foff2 max2 pilot_lpf2 S2] = lpf_peak_pick(f, pilot_baseband2, pilot_lpf2, nin, do_fft); + + if max1 > max2 + foff = foff1; + else + foff = foff2; + end + + f.pilot_baseband1 = pilot_baseband1; + f.pilot_baseband2 = pilot_baseband2; + f.pilot_lpf1 = pilot_lpf1; + f.pilot_lpf2 = pilot_lpf2; +endfunction + +% Experimental "feed forward" phase estimation function - estimates +% phase over a windows of Nph (e.g. Nph = 9) symbols. May not work +% well on HF channels but lets see. Has a phase ambiguity of m(pi/4) +% where m=0,1,2 which needs to be corrected outside of this function + +function [phase_offsets ferr f] = rx_est_phase(f, rx_symbols) + global rx_symbols_mem; + global prev_phase_offsets; + global phase_amb; + Nph = f.Nph; + Nc = f.Nc; + + % keep record of Nph symbols + + rx_symbols_mem(:,1:Nph-1) = rx_symbols_mem(:,2:Nph); + rx_symbols_mem(:,Nph) = rx_symbols; + + % estimate and correct phase offset based of modulation stripped samples + + phase_offsets = zeros(Nc+1,1); + for c=1:Nc+1 + + % rotate QPSK constellation to a single point + mod_stripped = abs(rx_symbols_mem(c,:)) .* exp(j*4*angle(rx_symbols_mem(c,:))); + + % find average phase offset, which will be on -pi/4 .. pi/4 + sum_real = sum(real(mod_stripped)); + sum_imag = sum(imag(mod_stripped)); + phase_offsets(c) = atan2(sum_imag, sum_real)/4; + + % determine if phase has jumped from - -> + + if (prev_phase_offsets(c) < -pi/8) && (phase_offsets(c) > pi/8) + phase_amb(c) -= pi/2; + if (phase_amb(c) < -pi) + phase_amb(c) += 2*pi; + end + end + + % determine if phase has jumped from + -> - + if (prev_phase_offsets(c) > pi/8) && (phase_offsets(c) < -pi/8) + phase_amb(c) += pi/2; + if (phase_amb(c) > pi) + phase_amb(c) -= 2*pi; + end + end + end + + ferr = mean(phase_offsets - prev_phase_offsets); + prev_phase_offsets = phase_offsets; + +endfunction + + +% convert symbols back to an array of bits + +function [rx_bits sync_bit f_err phase_difference] = psk_to_bits(f, prev_rx_symbols, rx_symbols, modulation) + Nc = f.Nc; + Nb = f.Nb; + + m4_binary_to_gray = [ + bin2dec("00") + bin2dec("01") + bin2dec("11") + bin2dec("10") + ]; + + m8_binary_to_gray = [ + bin2dec("000") + bin2dec("001") + bin2dec("011") + bin2dec("010") + bin2dec("110") + bin2dec("111") + bin2dec("101") + bin2dec("100") + ]; + + m = 2 .^ Nb; + assert((m == 4) || (m == 8)); + + phase_difference = zeros(Nc+1,1); + for c=1:Nc + norm = 1/(1E-6+abs(prev_rx_symbols(c))); + phase_difference(c) = rx_symbols(c) .* conj(prev_rx_symbols(c)) * norm; + end + + for c=1:Nc + phase_difference(c) *= exp(j*pi/4); + + if m == 4 + + % to get a good match between C and Octave during start up use same as C code + + d = phase_difference(c); + if (real(d) >= 0) && (imag(d) >= 0) + msb = 0; lsb = 0; + end + if (real(d) < 0) && (imag(d) >= 0) + msb = 0; lsb = 1; + end + if (real(d) < 0) && (imag(d) < 0) + msb = 1; lsb = 1; + end + if (real(d) >= 0) && (imag(d) < 0) + msb = 1; lsb = 0; + end + + rx_bits(2*(c-1)+1) = msb; + rx_bits(2*c) = lsb; + else + % determine index of constellation point received 0,1,...,m-1 + + index = floor(angle(phase_difference(c))*m/(2*pi) + 0.5); + + if index < 0 + index += m; + end + + % map to decimal version of bits encoded in symbol + + if m == 4 + bits_decimal = m4_binary_to_gray(index+1); + else + bits_decimal = m8_binary_to_gray(index+1); + end + + % convert back to an array of received bits + + for i=1:Nb + if bitand(bits_decimal, 2.^(Nb-i)) + rx_bits((c-1)*Nb+i) = 1; + else + rx_bits((c-1)*Nb+i) = 0; + end + end + end + end + + assert(length(rx_bits) == Nc*Nb); + + % Extract DBPSK encoded Sync bit + + norm = 1/(1E-6+abs(prev_rx_symbols(Nc+1))); + phase_difference(Nc+1) = rx_symbols(Nc+1) * conj(prev_rx_symbols(Nc+1)) * norm; + if (real(phase_difference(Nc+1)) < 0) + sync_bit = 1; + f_err = imag(phase_difference(Nc+1))*norm; % make f_err magnitude insensitive + else + sync_bit = 0; + f_err = -imag(phase_difference(Nc+1))*norm; + end + + % extra pi/4 rotation as we need for snr_update and scatter diagram + + phase_difference(Nc+1) *= exp(j*pi/4); + +endfunction + + +% given phase differences update estimates of signal and noise levels + +function [sig_est noise_est] = snr_update(f, sig_est, noise_est, phase_difference) + snr_coeff = f.snr_coeff; + Nc = f.Nc; + + % mag of each symbol is distance from origin, this gives us a + % vector of mags, one for each carrier. + + s = abs(phase_difference); + + % signal mag estimate for each carrier is a smoothed version + % of instantaneous magntitude, this gives us a vector of smoothed + % mag estimates, one for each carrier. + + sig_est = snr_coeff*sig_est + (1 - snr_coeff)*s; + + %printf("s: %f sig_est: %f snr_coeff: %f\n", s(1), sig_est(1), snr_coeff); + + % noise mag estimate is distance of current symbol from average + % location of that symbol. We reflect all symbols into the first + % quadrant for convenience. + + refl_symbols = abs(real(phase_difference)) + j*abs(imag(phase_difference)); + n = abs(exp(j*pi/4)*sig_est - refl_symbols); + + % noise mag estimate for each carrier is a smoothed version of + % instantaneous noise mag, this gives us a vector of smoothed + % noise power estimates, one for each carrier. + + noise_est = snr_coeff*noise_est + (1 - snr_coeff)*n; + +endfunction + + +% calculate current sig estimate for eeach carrier + +function snr_dB = calc_snr(f, sig_est, noise_est) + Rs = f.Rs; + + % find total signal power by summing power in all carriers + + S = sum(sig_est .^2); + SdB = 10*log10(S); + + % Average noise mag across all carriers and square to get an average + % noise power. This is an estimate of the noise power in Rs = 50Hz of + % BW (note for raised root cosine filters Rs is the noise BW of the + % filter) + + N50 = mean(noise_est).^2; + N50dB = 10*log10(N50); + + % Now multiply by (3000 Hz)/(50 Hz) to find the total noise power in + % 3000 Hz + + N3000dB = N50dB + 10*log10(3000/Rs); + + snr_dB = SdB - N3000dB; + +endfunction + + +% sets up test bits system. make sure rand('state', 1) has just beed called +% so we generate the right test_bits pattern! + +function f = init_test_bits(f) + f.Ntest_bits = f.Nc*f.Nb*4; % length of test sequence + f.test_bits = rand(1,f.Ntest_bits) > 0.5; % test pattern of bits + f.current_test_bit = 1; + f.rx_test_bits_mem = zeros(1,f.Ntest_bits); +endfunction + + +% returns nbits from a repeating sequence of random data + +function [bits f] = get_test_bits(f, nbits) + + for i=1:nbits + bits(i) = f.test_bits(f.current_test_bit++); + + if (f.current_test_bit > f.Ntest_bits) + f.current_test_bit = 1; + endif + end + +endfunction + + +% Accepts nbits from rx and attempts to sync with test_bits sequence. +% if sync OK measures bit errors + +function [sync bit_errors error_pattern f] = put_test_bits(f, test_bits, rx_bits) + Ntest_bits = f.Ntest_bits; + rx_test_bits_mem = f.rx_test_bits_mem; + + % Append to our memory + + [m n] = size(rx_bits); + f.rx_test_bits_mem(1:f.Ntest_bits-n) = f.rx_test_bits_mem(n+1:f.Ntest_bits); + f.rx_test_bits_mem(f.Ntest_bits-n+1:f.Ntest_bits) = rx_bits; + + % see how many bit errors we get when checked against test sequence + + error_pattern = xor(test_bits, f.rx_test_bits_mem); + bit_errors = sum(error_pattern); + + % if less than a thresh we are aligned and in sync with test sequence + + ber = bit_errors/f.Ntest_bits; + + sync = 0; + if (ber < 0.2) + sync = 1; + endif +endfunction + +% Generate M samples of DBPSK pilot signal for Freq offset estimation + +function [pilot_fdm bit symbol filter_mem phase] = generate_pilot_fdm(f, bit, symbol, filter_mem, phase, freq) + M = f.M; + Nfilter = f.Nfilter; + gt_alpha5_root = f.gt_alpha5_root; + + % +1 -1 +1 -1 DBPSK sync carrier, once filtered becomes two spectral + % lines at +/- Rs/2 + + if bit + symbol = -symbol; + else + symbol = symbol; + end + if bit + bit = 0; + else + bit = 1; + end + + % filter DPSK symbol to create M baseband samples + + filter_mem(Nfilter) = (sqrt(2)/2)*symbol; + for i=1:M + tx_baseband(i) = M*filter_mem(M:M:Nfilter) * gt_alpha5_root(M-i+1:M:Nfilter)'; + end + filter_mem(1:Nfilter-M) = filter_mem(M+1:Nfilter); + filter_mem(Nfilter-M+1:Nfilter) = zeros(1,M); + + % upconvert + + for i=1:M + phase = phase * freq; + pilot_fdm(i) = sqrt(2)*2*tx_baseband(i)*phase; + end + +endfunction + + +% Generate a 4M sample vector of DBPSK pilot signal. As the pilot signal +% is periodic in 4M samples we can then use this vector as a look up table +% for pilot signal generation in the demod. + +function pilot_lut = generate_pilot_lut(f) + Nc = f.Nc; + Nfilter = f.Nfilter; + M = f.M; + freq = f.freq; + + % pilot states + + pilot_rx_bit = 0; + pilot_symbol = sqrt(2); + pilot_freq = freq(Nc+1); + pilot_phase = 1; + pilot_filter_mem = zeros(1, Nfilter); + %prev_pilot = zeros(M,1); + + pilot_lut = []; + + F=8; + + for fr=1:F + [pilot pilot_rx_bit pilot_symbol pilot_filter_mem pilot_phase] = generate_pilot_fdm(f, pilot_rx_bit, pilot_symbol, pilot_filter_mem, pilot_phase, pilot_freq); + %prev_pilot = pilot; + pilot_lut = [pilot_lut pilot]; + end + + % discard first 4 symbols as filter memory is filling, just keep last + % four symbols + + pilot_lut = pilot_lut(4*M+1:M*F); + +endfunction + + +% grab next pilot samples for freq offset estimation at demod + +function [pilot prev_pilot pilot_lut_index prev_pilot_lut_index] = get_pilot(f, pilot_lut_index, prev_pilot_lut_index, nin) + M = f.M; + pilot_lut = f.pilot_lut; + + for i=1:nin + pilot(i) = pilot_lut(pilot_lut_index); + pilot_lut_index++; + if pilot_lut_index > 4*M + pilot_lut_index = 1; + end + prev_pilot(i) = pilot_lut(prev_pilot_lut_index); + prev_pilot_lut_index++; + if prev_pilot_lut_index > 4*M + prev_pilot_lut_index = 1; + end + end +endfunction + + +% freq offset state machine. Moves between acquire and track states based +% on BPSK pilot sequence. Freq offset estimator occasionally makes mistakes +% when used continuously. So we use it until we have acquired the BPSK pilot, +% then switch to a more robust tracking algorithm. If we lose sync we switch +% back to acquire mode for fast-requisition. + +function [sync reliable_sync_bit state timer sync_mem] = freq_state(f, sync_bit, state, timer, sync_mem) + Nsync_mem = f.Nsync_mem; + sync_uw = f.sync_uw; + + % look for 6 symbol (120ms) 010101 of sync sequence + + unique_word = 0; + for i=1:Nsync_mem-1 + sync_mem(i) = sync_mem(i+1); + end + sync_mem(Nsync_mem) = 1 - 2*sync_bit; + corr = 0; + for i=1:Nsync_mem + corr += sync_mem(i)*sync_uw(i); + end + if abs(corr) == Nsync_mem + unique_word = 1; + end + reliable_sync_bit = (corr == Nsync_mem); + + % iterate state machine + + next_state = state; + if state == 0 + if unique_word + next_state = 1; + timer = 0; + end + end + if state == 1 + if unique_word + timer++; + if timer == 25 % sync has been good for 500ms + next_state = 2; + end + else + next_state = 0; + end + end + if state == 2 % good sync state + if unique_word == 0 + timer = 0; + next_state = 3; + end + end + if state == 3 % tenative bad state, but could be a fade + if unique_word + next_state = 2; + else + timer++; + if timer == 50 % wait for 1000ms in case sync comes back + next_state = 0; + end + end + end + + %printf("corr: % -d state: %d next_state: %d uw: %d timer: %d\n", corr, state, next_state, unique_word, timer); + state = next_state; + + if state + sync = 1; + else + sync = 0; + end +endfunction + +% Save test bits to a text file in the form of a C array + +function test_bits_file(filename) + global test_bits; + global Ntest_bits; + + f=fopen(filename,"wt"); + fprintf(f,"/* Generated by test_bits_file() Octave function */\n\n"); + fprintf(f,"const int test_bits[]={\n"); + for m=1:Ntest_bits-1 + fprintf(f," %d,\n",test_bits(m)); + endfor + fprintf(f," %d\n};\n",test_bits(Ntest_bits)); + fclose(f); +endfunction + + +% Saves RN filter coeffs to a text file in the form of a C array + +function rn_file(gt_alpha5_root, filename) + Nfilter = length(gt_alpha5_root); + + f=fopen(filename,"wt"); + fprintf(f,"/* Generated by rn_file() Octave function */\n\n"); + fprintf(f,"const float gt_alpha5_root[]={\n"); + for m=1:Nfilter-1 + fprintf(f," %g,\n",gt_alpha5_root(m)); + endfor + fprintf(f," %g\n};\n",gt_alpha5_root(Nfilter)); + fclose(f); +endfunction + + +% Saves rx decimation filter coeffs to a text file in the form of a C array + +function rxdec_file(fdmdv, filename) + rxdec_coeff = fdmdv.rxdec_coeff; + Nrxdec = fdmdv.Nrxdec; + + f=fopen(filename,"wt"); + fprintf(f,"/* Generated by rxdec_file() Octave function */\n\n"); + fprintf(f,"const float rxdec_coeff[]={\n"); + for m=1:Nrxdec-1 + fprintf(f," %g,\n",rxdec_coeff(m)); + endfor + fprintf(f," %g\n};\n",rxdec_coeff(Nrxdec)); + fclose(f); +endfunction + + +function pilot_coeff_file(fdmdv, filename) + pilot_coeff = fdmdv.pilot_coeff; + Npilotcoeff = fdmdv.Npilotcoeff; + + f=fopen(filename,"wt"); + fprintf(f,"/* Generated by pilot_coeff_file() Octave function */\n\n"); + fprintf(f,"const float pilot_coeff[]={\n"); + for m=1:Npilotcoeff-1 + fprintf(f," %g,\n",pilot_coeff(m)); + endfor + fprintf(f," %g\n};\n",pilot_coeff(Npilotcoeff)); + fclose(f); +endfunction + + +% Saves hanning window coeffs to a text file in the form of a C array + +function hanning_file(fdmdv, filename) + Npilotlpf = fdmdv.Npilotlpf; + + h = hanning(Npilotlpf); + + f=fopen(filename,"wt"); + fprintf(f,"/* Generated by hanning_file() Octave function */\n\n"); + fprintf(f,"const float hanning[]={\n"); + for m=1:Npilotlpf-1 + fprintf(f," %g,\n", h(m)); + endfor + fprintf(f," %g\n};\n", h(Npilotlpf)); + fclose(f); +endfunction + + +function png_file(fig, pngfilename) + figure(fig); + + pngname = sprintf("%s.png",pngfilename); + print(pngname, '-dpng', "-S500,500") + pngname = sprintf("%s_large.png",pngfilename); + print(pngname, '-dpng', "-S800,600") +endfunction + + +% dump rx_bits in hex + +function dump_bits(rx_bits) + + % pack into bytes, MSB first + + packed = zeros(1,floor(length(rx_bits)+7)/8); + bit = 7; byte = 1; + for i=1:length(rx_bits) + packed(byte) = bitor(packed(byte), bitshift(rx_bits(i),bit)); + bit--; + if (bit < 0) + bit = 7; + byte++; + end + end + + for i=1:length(packed) + printf("0x%02x ", packed(i)); + end + printf("\n"); + +endfunction + diff --git a/libcodec2-android/src/codec2/octave/fdmdv_common.m b/libcodec2-android/src/codec2/octave/fdmdv_common.m new file mode 100644 index 0000000..80fbacb --- /dev/null +++ b/libcodec2-android/src/codec2/octave/fdmdv_common.m @@ -0,0 +1,221 @@ +% fdmdv_common.m +% +% Functions that implement a Frequency Divison Multiplexed Modem functions +% + +1; + +% Given Nc symbols construct M samples (1 symbol) of Nc filtered +% symbols streams + +function [tx_baseband fdmdv] = tx_filter(fdmdv, tx_symbols) + Nc = fdmdv.Nc; + M = fdmdv.M; + tx_filter_memory = fdmdv.tx_filter_memory; + Nfilter = fdmdv.Nfilter; + gt_alpha5_root = fdmdv.gt_alpha5_root; + + tx_baseband = zeros(Nc+1,M); + + % tx filter each symbol, generate M filtered output samples for each symbol. + % Efficient polyphase filter techniques used as tx_filter_memory is sparse + + tx_filter_memory(:,Nfilter) = sqrt(2)/2*tx_symbols; + + for i=1:M + tx_baseband(:,i) = M*tx_filter_memory(:,M:M:Nfilter) * gt_alpha5_root(M-i+1:M:Nfilter)'; + end + tx_filter_memory(:,1:Nfilter-M) = tx_filter_memory(:,M+1:Nfilter); + tx_filter_memory(:,Nfilter-M+1:Nfilter) = zeros(Nc+1,M); + + fdmdv.tx_filter_memory = tx_filter_memory; +endfunction + +% Construct FDM signal by frequency shifting each filtered symbol +% stream. Returns complex signal so we can apply frequency offsets +% easily. + +function [tx_fdm fdmdv] = fdm_upconvert(fdmdv, tx_filt) + Fs = fdmdv.Fs; + M = fdmdv.M; + Nc = fdmdv.Nc; + Fsep = fdmdv.Fsep; + phase_tx = fdmdv.phase_tx; + freq = fdmdv.freq; + fbb_rect = fdmdv.fbb_rect; + fbb_phase_tx = fdmdv.fbb_phase_tx; + + tx_fdm = zeros(1,M); + + % Nc+1 tones + + for c=1:Nc+1 + for i=1:M + phase_tx(c) = phase_tx(c) * freq(c); + tx_fdm(i) = tx_fdm(i) + tx_filt(c,i)*phase_tx(c); + end + end + + % shift up to carrier freq + + for i=1:M + fbb_phase_tx *= fbb_rect; + tx_fdm(i) = tx_fdm(i) * fbb_phase_tx; + end + + % Scale such that total Carrier power C of real(tx_fdm) = Nc. This + % excludes the power of the pilot tone. + % We return the complex (single sided) signal to make frequency + % shifting for the purpose of testing easier + + tx_fdm = 2*tx_fdm; + + % normalise digital oscillators as the magnitude can drift over time + + for c=1:Nc+1 + mag = abs(phase_tx(c)); + phase_tx(c) /= mag; + end + mag = abs(fbb_phase_tx); + fbb_phase_tx /= mag; + + fdmdv.fbb_phase_tx = fbb_phase_tx; + fdmdv.phase_tx = phase_tx; +endfunction + +% complex freq shifting helper function + +function [out phase] = freq_shift(in, freqHz, Fs, phase) + freq_rect = exp(j*2*pi*freqHz/Fs); + + out = zeros(1, length(in)); + for r=1:length(in) + phase *= freq_rect; + out(r) = in(r)*phase; + end + + mag = abs(phase); + phase /= mag; +endfunction + +% Frequency shift each modem carrier down to Nc+1 baseband signals + +function [rx_baseband fdmdv] = fdm_downconvert(fdmdv, rx_fdm, nin) + Fs = fdmdv.Fs; + M = fdmdv.M; + Nc = fdmdv.Nc; + phase_rx = fdmdv.phase_rx; + freq = fdmdv.freq; + + rx_baseband = zeros(Nc+1,nin); + + for c=1:Nc+1 + for i=1:nin + phase_rx(c) = phase_rx(c) * freq(c); + rx_baseband(c,i) = rx_fdm(i)*phase_rx(c)'; + end + end + + for c=1:Nc+1 + mag = abs(phase_rx(c)); + phase_rx(c) /= mag; + end + + fdmdv.phase_rx = phase_rx; +endfunction + +% Receive filter each baseband signal at oversample rate P + +function [rx_filt fdmdv] = rx_filter(fdmdv, rx_baseband, nin) + Nc = fdmdv.Nc; + M = fdmdv.M; + P = fdmdv.P; + rx_filter_memory = fdmdv.rx_filter_memory; + Nfilter = fdmdv.Nfilter; + gt_alpha5_root = fdmdv.gt_alpha5_root; + + rx_filt = zeros(Nc+1,nin*P/M); + + % rx filter each symbol, generate P filtered output samples for each symbol. + % Note we keep memory at rate M, it's just the filter output at rate P + + assert(mod(M,P)==0); + N=M/P; + j=1; + for i=1:N:nin + rx_filter_memory(:,Nfilter-N+1:Nfilter) = rx_baseband(:,i:i-1+N); + rx_filt(:,j) = rx_filter_memory * gt_alpha5_root'; + rx_filter_memory(:,1:Nfilter-N) = rx_filter_memory(:,1+N:Nfilter); + j+=1; + end + + fdmdv.rx_filter_memory = rx_filter_memory; +endfunction + +% Estimate optimum timing offset, re-filter receive symbols + +function [rx_symbols rx_timing_M env fdmdv] = rx_est_timing(fdmdv, rx_filt, nin) + M = fdmdv.M; + Nt = fdmdv.Nt; + Nc = fdmdv.Nc; + rx_filter_mem_timing = fdmdv.rx_filter_mem_timing; + P = fdmdv.P; + Nfilter = fdmdv.Nfilter; + Nfiltertiming = fdmdv.Nfiltertiming; + + % nin adjust + % -------------------------------- + % 120 -1 (one less rate P sample) + % 160 0 (nominal) + % 200 1 (one more rate P sample) + + adjust = P - nin*P/M; + + % update buffer of Nt rate P filtered symbols + + rx_filter_mem_timing(:,1:(Nt-1)*P+adjust) = rx_filter_mem_timing(:,P+1-adjust:Nt*P); + rx_filter_mem_timing(:,(Nt-1)*P+1+adjust:Nt*P) = rx_filt(:,:); + + % sum envelopes of all carriers + + env = sum(abs(rx_filter_mem_timing(:,:))); % use all Nc+1 carriers for timing + %env = abs(rx_filter_mem_timing(Nc+1,:)); % just use BPSK pilot + [n m] = size(env); + + % The envelope has a frequency component at the symbol rate. The + % phase of this frequency component indicates the timing. So work out + % single DFT at frequency 2*pi/P + + x = env * exp(-j*2*pi*(0:m-1)/P)'; + + norm_rx_timing = angle(x)/(2*pi); + rx_timing = norm_rx_timing*P + P/4; + if (rx_timing > P) + rx_timing -= P; + end + if (rx_timing < -P) + rx_timing += P; + end + + % rx_filter_mem_timing contains Nt*P samples (Nt symbols at rate P), + % where Nt is odd. Lets use linear interpolation to resample in the + % centre of the timing estimation window + + rx_timing += floor(Nt/2)*P; + low_sample = floor(rx_timing); + fract = rx_timing - low_sample; + high_sample = ceil(rx_timing); + %printf("rx_timing: %f low_sample: %f high_sample: %f fract: %f\n", rx_timing, low_sample, high_sample, fract); + + rx_symbols = rx_filter_mem_timing(:,low_sample)*(1-fract) + rx_filter_mem_timing(:,high_sample)*fract; + % rx_symbols = rx_filter_mem_timing(:,high_sample+1); + + % This value will be +/- half a symbol so will wrap around at +/- + % M/2 or +/- 80 samples with M=160 + + rx_timing_M = norm_rx_timing*M; + + fdmdv.rx_filter_mem_timing = rx_filter_mem_timing; +endfunction + + diff --git a/libcodec2-android/src/codec2/octave/fdmdv_demod.m b/libcodec2-android/src/codec2/octave/fdmdv_demod.m new file mode 100644 index 0000000..7f4e4cf --- /dev/null +++ b/libcodec2-android/src/codec2/octave/fdmdv_demod.m @@ -0,0 +1,365 @@ +% fdmdv_demod.m +% +% Demodulator function for FDMDV modem (Octave version). Requires +% 8kHz sample rate raw files as input +% +% Copyright David Rowe 2012 +% This program is distributed under the terms of the GNU General Public License +% Version 2 +% + +function fdmdv_demod(rawfilename, nbits, NumCarriers=14, errorpatternfilename, symbolfilename) + + fdmdv; % include modem code + f = fdmdv_init(NumCarriers); + Nc = f.Nc; Nb = f.Nb; Rs = f.Rs; M = f.M; Fs = f.Fs; Nsync_mem = f.Nsync_mem; + test_bits = f.test_bits; Q = f.Q; P = f.P; + + modulation = 'dqpsk'; + + fin = fopen(rawfilename, "rb"); + gain = 1000; + frames = nbits/(Nc*Nb); + + prev_rx_symbols = ones(Nc+1,1); + foff_phase_rect = 1; + + % BER stats + + total_bit_errors = 0; + total_bits = 0; + bit_errors_log = []; + sync_log = []; + test_frame_sync_log = []; + test_frame_sync_state = 0; + error_pattern_log = []; + + % SNR states + + sig_est = zeros(Nc+1,1); + noise_est = zeros(Nc+1,1); + + % logs of various states for plotting + + rx_symbols_log = []; + rx_timing_log = []; + foff_coarse_log = []; + foff_log = []; + rx_fdm_log = []; + snr_est_log = []; + + % misc states + + nin = M; % timing correction for sample rate differences + foff = 0; + + fest_state = 0; + fest_timer = 0; + sync_mem = zeros(1,Nsync_mem); + sync = 0; + sync_log = []; + + % spectrum states + + Nspec=1024; + spec_mem=zeros(1,Nspec); + SdB = zeros(1,Nspec); + + % optionally save output symbols + + if nargin == 5 + fm = fopen(symbolfilename,"wb"); + dual_rx_symbols = zeros(1, 2*Nc); + dual_rx_bits = zeros(1,2*Nc*Nb); + end + + atimer = 0; + + % Main loop ---------------------------------------------------- + + for fr=1:frames + + % obtain nin samples of the test input signal + + for i=1:nin + rx_fdm(i) = fread(fin, 1, "short")/gain; + end + + rx_fdm_log = [rx_fdm_log rx_fdm(1:nin)]; + + % update spectrum + + l=length(rx_fdm); + spec_mem(1:Nspec-l) = spec_mem(l+1:Nspec); + spec_mem(Nspec-l+1:Nspec) = rx_fdm; + S=fft(spec_mem.*hanning(Nspec)',Nspec); + SdB = 0.9*SdB + 0.1*20*log10(abs(S)); + + % shift down to complex baseband + + for i=1:nin + f.fbb_phase_rx = f.fbb_phase_rx*f.fbb_rect'; + rx_fdm(i) = rx_fdm(i)*f.fbb_phase_rx; + end + mag = abs(f.fbb_phase_rx); + f.fbb_phase_rx /= mag; + + % frequency offset estimation and correction + + [pilot prev_pilot f.pilot_lut_index f.prev_pilot_lut_index] = get_pilot(f, f.pilot_lut_index, f.prev_pilot_lut_index, nin); + [foff_coarse S1 S2 f] = rx_est_freq_offset(f, rx_fdm, pilot, prev_pilot, nin, !sync ); + + if sync == 0 + foff = foff_coarse; + end + foff_coarse_log = [foff_coarse_log foff_coarse]; + + foff_rect = exp(j*2*pi*foff/Fs); + + for i=1:nin + foff_phase_rect *= foff_rect'; + rx_fdm_fcorr(i) = rx_fdm(i)*foff_phase_rect; + end + + % baseband processing + + if 0 + % easier to understand, but more memory and CPU hungry filtering and down conversion + + [rx_baseband f] = fdm_downconvert(f, rx_fdm_fcorr, nin); + [rx_filt f] = rx_filter(f, rx_baseband, nin); + else + % more efficient filtering and down conversion + + [rx_fdm_filter f] = rxdec_filter(f, rx_fdm_fcorr, nin); + [rx_filt f] = down_convert_and_rx_filter(f, rx_fdm_filter, nin, M/Q); + end + + [rx_symbols rx_timing env f] = rx_est_timing(f, rx_filt, nin); + rx_timing_log = [rx_timing_log rx_timing]; + + nin = M; + if rx_timing > M/P + nin += M/P; + end + if rx_timing < -M/P; + nin -= M/P; + end + %printf("fr: %d rx_timing: %d nin = %d\n", fr, rx_timing, nin); + + rx_symbols_log = [rx_symbols_log rx_symbols.*conj(prev_rx_symbols./abs(prev_rx_symbols))*exp(j*pi/4)]; + [rx_bits sync_bit f_err pd] = psk_to_bits(f, prev_rx_symbols, rx_symbols, modulation); + + % optionally save output symbols + + if (nargin == 5) + + % this free runs, and is reset by an "entered sync" state + + if (sync_track == 0) + sync_track = 1; + else + sync_track = 0; + end + + if (track == 1) && (sync_track == 1) + dual_rx_symbols(Nc+1:2*Nc) = rx_symbols(1:Nc).*conj(prev_rx_symbols(1:Nc)./abs(prev_rx_symbols(1:Nc))); + dual_rx_symbols_float32 = []; k = 1; + for i=1:2*Nc + dual_rx_symbols_float32(k++) = real(dual_rx_symbols(i)); + dual_rx_symbols_float32(k++) = imag(dual_rx_symbols(i)); + end + fwrite(fm, dual_rx_symbols_float32, "float32"); + dual_rx_bits(Nc*Nb+1:2*Nc*Nb) = rx_bits; + %dump_bits(dual_rx_bits); + else + dual_rx_symbols(1:Nc) = rx_symbols(1:Nc).*conj(prev_rx_symbols(1:Nc)./abs(prev_rx_symbols(1:Nc))); + dual_rx_bits(1:Nc*Nb) = rx_bits; + end + end + + % update some states + + prev_rx_symbols = rx_symbols; + [sig_est noise_est] = snr_update(f, sig_est, noise_est, pd); + snr_est = calc_snr(f, sig_est, noise_est); + snr_est_log = [snr_est_log snr_est]; + foff -= 0.5*f_err; + foff_log = [foff_log foff]; + + % freq est state machine + + [sync reliable_sync_bit fest_state fest_timer sync_mem] = freq_state(f, sync_bit, fest_state, fest_timer, sync_mem); + sync_log = [sync_log sync]; + + % count bit errors if we find a test frame + + [test_frame_sync bit_errors error_pattern f] = put_test_bits(f, test_bits, rx_bits); + if (test_frame_sync == 1) + if (bit_errors) + printf("fr: %d bit_errors: %d\n", fr, bit_errors); + end + total_bit_errors = total_bit_errors + bit_errors; + total_bits = total_bits + f.Ntest_bits; + bit_errors_log = [bit_errors_log bit_errors/f.Ntest_bits]; + else + bit_errors_log = [bit_errors_log 0]; + end + + % test frame sync state machine, just for more informative plots + + next_test_frame_sync_state = test_frame_sync_state; + if (test_frame_sync_state == 0) + if (test_frame_sync == 1) + next_test_frame_sync_state = 1; + test_frame_count = 0; + end + end + + if (test_frame_sync_state == 1) + % we only expect another test_frame_sync pulse every 4 symbols + test_frame_count++; + if (test_frame_count == 4) + test_frame_count = 0; + if ((test_frame_sync == 0)) + next_test_frame_sync_state = 0; + else + error_pattern_log = [error_pattern_log error_pattern]; + end + end + end + + test_frame_sync_state = next_test_frame_sync_state; + test_frame_sync_log = [test_frame_sync_log test_frame_sync_state]; + end + + if nargin == 5 + fclose(fm); + etfilename = strcat(strtok(symbolfilename,"."),"_et.bin"); + fet = fopen(etfilename, "wb"); + fwrite(fet, entered_track_log, "short"); + fclose(fet); + end + + % --------------------------------------------------------------------- + % Print Stats + % --------------------------------------------------------------------- + + % Peak to Average Power Ratio calcs from http://www.dsplog.com + + papr = max(rx_fdm_log.*conj(rx_fdm_log)) / mean(rx_fdm_log.*conj(rx_fdm_log)); + papr_dB = 10*log10(papr); + + ber = total_bit_errors / total_bits; + printf("%d bits %d errors BER: %1.4f PAPR(rx): %1.2f dB\n",total_bits, total_bit_errors, ber, papr_dB); + + % --------------------------------------------------------------------- + % Plots + % --------------------------------------------------------------------- + + xt = (1:frames)/Rs; + secs = frames/Rs; + + figure(1); clf; + [n m] = size(rx_symbols_log); + plot(real(rx_symbols_log(1:Nc+1,15:m)),imag(rx_symbols_log(1:Nc+1,15:m)),'+') + axis([-2 2 -2 2]); + title('Scatter Diagram'); + + figure(2); clf; + plot(xt, rx_timing_log) + title('timing offset (samples)'); + + figure(3); + plot(xt, foff_log, '-;freq offset;') + %hold on; + %plot(xt, sync_log*75, 'r;course-fine;'); + %hold off; + title('Freq offset (Hz)'); + grid; + + figure(4); clf; + plot_specgram(rx_fdm_log, Fs); + + figure(5); clf; + subplot(311) + stem(xt, sync_log) + axis([0 secs 0 1.5]); + title('BPSK Sync') + subplot(312) + stem(xt, bit_errors_log); + title('Bit Errors for test frames') + subplot(313) + plot(xt, test_frame_sync_log); + axis([0 secs 0 1.5]); + title('Test Frame Sync') + + figure(6); clf; + subplot(211); + plot(xt, snr_est_log); + title('SNR Estimates') + subplot(212) + snrdB_pc = 20*log10(sig_est(1:Nc+1)) - 20*log10(noise_est(1:Nc+1)); + bar(snrdB_pc(1:Nc) - mean(snrdB_pc(1:Nc))) + axis([0 Nc+1 -3 3]); + + figure(7); clf; + hold on; + lep = length(error_pattern_log); + if lep != 0 + for p=1:Nc + plot(p + 0.25*error_pattern_log((p-1)*2+1:Nc*Nb:lep)); + plot(0.30 + p + 0.25*error_pattern_log(p*2:Nc*Nb:lep),'r') + end + hold off; + axis([1 lep/(Nc*Nb) 0 Nc]) + end + + figure(8); clf; + subplot(211) + [a b] = size(rx_fdm_log); + xt1 = (1:b)/Fs; + plot(xt1, rx_fdm_log); + title('Rx FDM Signal'); + subplot(212) + plot((0:Nspec/2-1)*Fs/Nspec, SdB(1:Nspec/2) - 20*log10(Nspec/2)) + axis([0 Fs/2 -40 0]) + grid + title('FDM Rx Spectrum'); + +if 0 + % interleaving tests + + load ../unittest/inter560.txt + lep = length(error_pattern_log); + lep = floor(lep/560)*560; + error_pattern_log_inter = zeros(1,lep); + for i=1:560:lep + for j=1:560 + %printf("i: %4d j: %4d inter560(j): %4d\n", i,j,inter560(j)); + index = inter560(j); + error_pattern_log_inter(i-1+index+1) = error_pattern_log(i-1+j); + end + end + + figure(8) + clf; + hold on; + for p=1:Nc + plot(p + 0.25*error_pattern_log_inter((p-1)*2+1:Nc*Nb:lep)); + plot(0.30 + p + 0.25*error_pattern_log_inter(p*2:Nc*Nb:lep),'r') + end + hold off; + axis([1 lep/(Nc*Nb) 0 Nc]) +end + + % optionally save error pattern file + + if nargin == 4 + fout = fopen(errorpatternfilename, "wb"); + fwrite(fout, error_pattern_log, "short"); + fclose(fout); + end + + +endfunction diff --git a/libcodec2-android/src/codec2/octave/fdmdv_demod_c.m b/libcodec2-android/src/codec2/octave/fdmdv_demod_c.m new file mode 100644 index 0000000..540ec1a --- /dev/null +++ b/libcodec2-android/src/codec2/octave/fdmdv_demod_c.m @@ -0,0 +1,135 @@ +% fdmdv_demod_c.m +% +% Plots Octave dump file information from C FDMDV demodulator program, +% to give a similar set of plots to fdmdv_demod.m. Useful for off +% line analysis of demod performance. +% +% Copyright David Rowe 2012 +% This program is distributed under the terms of the GNU General Public License +% Version 2 +% + +function fdmdv_demod_c(dumpfilename, bits) + + fdmdv; % include modem code + f = fdmdv_init; + Nc = f.Nc; Nb = f.Nb; Rs = f.Rs; M = f.M; Fs = f.Fs; + test_bits = f.test_bits; + + frames = bits/(Nc*Nb); + + load(dumpfilename); + + % BER stats + + total_bit_errors = 0; + total_bits = 0; + bit_errors_log = []; + sync_log = []; + test_frame_sync_log = []; + test_frame_sync_state = 0; + + % Run thru received bits to look for test pattern + + bits_per_frame = Nc*Nb; + + for fr=1:frames + + rx_bits = rx_bits_log_c((fr-1)*bits_per_frame+1:fr*bits_per_frame); + + % count bit errors if we find a test frame + + [test_frame_sync bit_errors error_pattern f] = put_test_bits(f, test_bits, rx_bits); + if (test_frame_sync == 1) + total_bit_errors = total_bit_errors + bit_errors; + total_bits = total_bits + f.Ntest_bits; + bit_errors_log = [bit_errors_log bit_errors/f.Ntest_bits]; + else + bit_errors_log = [bit_errors_log 0]; + end + + % test frame sync state machine, just for more informative plots + + next_test_frame_sync_state = test_frame_sync_state; + if (test_frame_sync_state == 0) + if (test_frame_sync == 1) + next_test_frame_sync_state = 1; + test_frame_count = 0; + end + end + + if (test_frame_sync_state == 1) + % we only expect another test_frame_sync pulse every 4 symbols + test_frame_count++; + if (test_frame_count == 4) + test_frame_count = 0; + if ((test_frame_sync == 0)) + next_test_frame_sync_state = 0; + end + end + end + test_frame_sync_state = next_test_frame_sync_state; + test_frame_sync_log = [test_frame_sync_log test_frame_sync_state]; + end + + ber = total_bit_errors / total_bits; + printf("%d bits %d errors BER: %1.4f\n",total_bits, total_bit_errors, ber); + + % --------------------------------------------------------------------- + % Plots + % --------------------------------------------------------------------- + + xt = (1:frames)/Rs; + secs = frames/Rs; + + figure(1) + clf; + plot(real(rx_symbols_log_c(1:Nc+1,15:frames)),imag(rx_symbols_log_c(1:Nc+1,15:frames)),'+') + %plot(real(rx_symbols_log_c(Nc+1,15:frames)),imag(rx_symbols_log_c(Nc+1,15:frames)),'+') + axis([-2 2 -2 2]); + title('Scatter Diagram'); + + figure(2) + clf; + subplot(211) + plot(xt, rx_timing_log_c(1:frames)) + title('timing offset (samples)'); + subplot(212) + plot(xt, foff_log_c(1:frames), '-;freq offset;') + hold on; + plot(xt, sync_log_c(1:frames)*75, 'r;course-fine;'); + hold off; + title('Freq offset (Hz)'); + grid + + figure(3) + clf; + subplot(211) + b = M*frames; + xt1 = (1:b)/Fs; + plot(xt1, rx_fdm_log_c(1:b)); + title('Rx FDM Signal'); + subplot(212); + plot_specgram(rx_fdm_log_c(1:b), 8000); + title('FDM Rx Spectrogram'); + + figure(4) + clf; + subplot(311) + stem(xt, sync_bit_log_c(1:frames)) + axis([0 secs 0 1.5]); + title('BPSK Sync') + subplot(312) + stem(xt, bit_errors_log); + title('Bit Errors for test frames') + subplot(313) + plot(xt, test_frame_sync_log); + axis([0 secs 0 1.5]); + title('Test Frame Sync') + + figure(5) + clf; + plot(xt, snr_est_log_c(1:frames)); + title('SNR Estimates') + +endfunction diff --git a/libcodec2-android/src/codec2/octave/fdmdv_demod_coh.m b/libcodec2-android/src/codec2/octave/fdmdv_demod_coh.m new file mode 100644 index 0000000..94b0880 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/fdmdv_demod_coh.m @@ -0,0 +1,253 @@ +% fdmdv_demod_coh.m +% +% Demodulator function for FDMDV modem (Octave version). Requires +% 8kHz sample rate raw files as input. This version uses experimental +% psuedo coherent demodulation. +% +% Copyright David Rowe 2013 +% This program is distributed under the terms of the GNU General Public License +% Version 2 +% + +function fdmdv_demod_coh(rawfilename, nbits, pngname) + + fdmdv; % include modem code + + modulation = 'dqpsk'; + + fin = fopen(rawfilename, "rb"); + gain = 1000; + frames = nbits/(Nc*Nb); + + prev_rx_symbols = ones(Nc+1,1); + foff_phase = 1; + + % BER stats + + total_bit_errors = 0; + total_bits = 0; + bit_errors_log = []; + sync_log = []; + test_frame_sync_log = []; + test_frame_sync_state = 0; + + % SNR states + + sig_est = zeros(Nc+1,1); + noise_est = zeros(Nc+1,1); + + % logs of various states for plotting + + rx_symbols_log = []; + rx_timing_log = []; + foff_log = []; + rx_fdm_log = []; + snr_est_log = []; + + % misc states + + nin = M; % timing correction for sample rate differences + foff = 0; + track_log = []; + track = 0; + fest_state = 0; + + % psuedo coherent demod states + + rx_symbols_ph_log = []; + prev_rx_symbols_ph = ones(Nc+1,1); + rx_phase_offsets_log = []; + phase_amb_log = []; + + % Main loop ---------------------------------------------------- + + for f=1:frames + + % obtain nin samples of the test input signal + + for i=1:nin + rx_fdm(i) = fread(fin, 1, "short")/gain; + end + + rx_fdm_log = [rx_fdm_log rx_fdm(1:nin)]; + + % frequency offset estimation and correction + + [pilot prev_pilot pilot_lut_index prev_pilot_lut_index] = get_pilot(pilot_lut_index, prev_pilot_lut_index, nin); + [foff_coarse S1 S2] = rx_est_freq_offset(rx_fdm, pilot, prev_pilot, nin); + + if track == 0 + foff = foff_coarse; + end + foff_log = [ foff_log foff ]; + foff_rect = exp(j*2*pi*foff/Fs); + + for i=1:nin + foff_phase *= foff_rect'; + rx_fdm(i) = rx_fdm(i)*foff_phase; + end + + % baseband processing + + rx_baseband = fdm_downconvert(rx_fdm, nin); + rx_filt = rx_filter(rx_baseband, nin); + + [rx_symbols rx_timing] = rx_est_timing(rx_filt, rx_baseband, nin); + rx_timing_log = [rx_timing_log rx_timing]; + + nin = M; + if rx_timing > 2*M/P + nin += M/P; + end + if rx_timing < 0; + nin -= M/P; + end + + rx_symbols_log = [rx_symbols_log rx_symbols.*(conj(prev_rx_symbols)./abs(prev_rx_symbols))*exp(j*pi/4)]; + + % coherent phase offset estimation ------------------------------------ + + [rx_phase_offsets ferr] = rx_est_phase(rx_symbols); + rx_phase_offsets_log = [rx_phase_offsets_log rx_phase_offsets]; + phase_amb_log = [phase_amb_log phase_amb]; + rx_symbols_ph = rx_symbols_mem(:,floor(Nph/2)+1) .* exp(-j*(rx_phase_offsets + phase_amb)); + rx_symbols_ph_log = [rx_symbols_ph_log rx_symbols_ph .* exp(j*pi/4)]; + rx_symbols_ph = -1 + 2*(real(rx_symbols_ph .* exp(j*pi/4)) > 0) + j*(-1 + 2*(imag(rx_symbols_ph .* exp(j*pi/4)) > 0)); + + % Std differential (used for freq offset est and BPSK sync) and psuedo coherent detection ----------------------- + + [rx_bits_unused sync f_err pd ] = qpsk_to_bits(prev_rx_symbols, rx_symbols, modulation); + [rx_bits sync_unused ferr_unused pd_unused] = qpsk_to_bits(prev_rx_symbols_ph, rx_symbols_ph, 'dqpsk'); + + foff -= 0.5*f_err; + prev_rx_symbols = rx_symbols; + prev_rx_symbols_ph = rx_symbols_ph; + sync_log = [sync_log sync]; + + [sig_est noise_est] = snr_update(sig_est, noise_est, pd); + snr_est = calc_snr(sig_est, noise_est); + snr_est_log = [snr_est_log snr_est]; + + % freq est state machine + + [track fest_state] = freq_state(sync, fest_state); + track_log = [track_log track]; + + % count bit errors if we find a test frame + + [test_frame_sync bit_errors] = put_test_bits(test_bits, rx_bits); + if (test_frame_sync == 1) + total_bit_errors = total_bit_errors + bit_errors; + total_bits = total_bits + Ntest_bits; + bit_errors_log = [bit_errors_log bit_errors/Ntest_bits]; + else + bit_errors_log = [bit_errors_log 0]; + end + + % test frame sync state machine, just for more informative plots + + next_test_frame_sync_state = test_frame_sync_state; + if (test_frame_sync_state == 0) + if (test_frame_sync == 1) + next_test_frame_sync_state = 1; + test_frame_count = 0; + end + end + + if (test_frame_sync_state == 1) + % we only expect another test_frame_sync pulse every 4 symbols + test_frame_count++; + if (test_frame_count == 4) + test_frame_count = 0; + if ((test_frame_sync == 0)) + next_test_frame_sync_state = 0; + end + end + end + test_frame_sync_state = next_test_frame_sync_state; + test_frame_sync_log = [test_frame_sync_log test_frame_sync_state]; + + end + + % --------------------------------------------------------------------- + % Print Stats + % --------------------------------------------------------------------- + + ber = total_bit_errors / total_bits; + + printf("%d bits %d errors BER: %1.4f\n",total_bits, total_bit_errors, ber); + + % --------------------------------------------------------------------- + % Plots + % --------------------------------------------------------------------- + + xt = (1:frames)/Rs; + secs = frames/Rs; + + figure(1) + clf; + [n m] = size(rx_symbols_log); + plot(real(rx_symbols_log(1:Nc+1,15:m)),imag(rx_symbols_log(1:Nc+1,15:m)),'+') + axis([-2 2 -2 2]); + title('Scatter Diagram'); + + figure(2) + clf; + subplot(211) + plot(xt, rx_timing_log) + title('timing offset (samples)'); + subplot(212) + plot(xt, foff_log, '-;freq offset;') + hold on; + plot(xt, track_log*75, 'r;course-fine;'); + hold off; + title('Freq offset (Hz)'); + grid + + figure(3) + clf; + subplot(211) + [a b] = size(rx_fdm_log); + xt1 = (1:b)/Fs; + plot(xt1, rx_fdm_log); + title('Rx FDM Signal'); + subplot(212) + spec(rx_fdm_log,8000); + title('FDM Rx Spectrogram'); + + figure(4) + clf; + subplot(311) + stem(xt, sync_log) + axis([0 secs 0 1.5]); + title('BPSK Sync') + subplot(312) + stem(xt, bit_errors_log); + title('Bit Errors for test frames') + subplot(313) + plot(xt, test_frame_sync_log); + axis([0 secs 0 1.5]); + title('Test Frame Sync') + + figure(5) + clf; + plot(xt, snr_est_log); + title('SNR Estimates') + + figure(6) + clf; + [n m] = size(rx_symbols_ph_log); + plot(real(rx_symbols_ph_log(1:Nc+1,15:m)),imag(rx_symbols_ph_log(1:Nc+1,15:m)),'+') + %plot(real(rx_symbols_ph_log(2,15:m)),imag(rx_symbols_ph_log(2,15:m)),'+') + axis([-2 2 -2 2]); + title('Scatter Diagram - after phase correction'); + + figure(7) + clf; + subplot(211) + plot(rx_phase_offsets_log(1,:)) + subplot(212) + plot(phase_amb_log(1,:)) + title('Rx Phase Offset Est') + +endfunction diff --git a/libcodec2-android/src/codec2/octave/fdmdv_mod.m b/libcodec2-android/src/codec2/octave/fdmdv_mod.m new file mode 100644 index 0000000..8d13226 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/fdmdv_mod.m @@ -0,0 +1,32 @@ +% fdmdv_mod.m +% +% Modulator function for FDMDV modem, uses test frames as input and +% outputs a raw file of 16 bit shorts at a sample rate of 8 kHz. +% +% Copyright David Rowe 2012 +% This program is distributed under the terms of the GNU General Public License +% Version 2 +% + +function tx_fdm = fdmdv_mod(rawfilename, nbits) + + fdmdv; % include modem code + + frames = floor(nbits/(Nc*Nb)) + tx_fdm = []; + gain = 1000; % Scale up to 16 bit shorts + prev_tx_symbols = ones(Nc+1,1); prev_tx_symbols(Nc+1) = 2; + + for i=1:frames + tx_bits = get_test_bits(Nc*Nb); + tx_symbols = bits_to_qpsk(prev_tx_symbols, tx_bits,'dqpsk'); + prev_tx_symbols = tx_symbols; + tx_baseband = tx_filter(tx_symbols); + tx_fdm = [tx_fdm real(fdm_upconvert(tx_baseband))]; + end + + tx_fdm *= gain; + fout = fopen(rawfilename,"wb"); + fwrite(fout, tx_fdm, "short"); + fclose(fout); +endfunction diff --git a/libcodec2-android/src/codec2/octave/fdmdv_ut.m b/libcodec2-android/src/codec2/octave/fdmdv_ut.m new file mode 100644 index 0000000..3ee5b4d --- /dev/null +++ b/libcodec2-android/src/codec2/octave/fdmdv_ut.m @@ -0,0 +1,352 @@ +% fdmdv_ut.m +% +% Unit Test program for FDMDV modem. Useful for general development as it has +% both tx and rx sides, and basic AWGN channel simulation. +% +% Copyright David Rowe 2012 +% This program is distributed under the terms of the GNU General Public License +% Version 2 +% + +fdmdv; % load modem code + +% Simulation Parameters -------------------------------------- + +frames = 100; +EbNo_dB = 6.3; +Foff_hz = -100; +modulation = 'dqpsk'; +hpa_clip = 150; + +% ------------------------------------------------------------ + +more off; +tx_filt = zeros(Nc,M); +rx_symbols_log = []; +rx_phase_log = 0; +rx_timing_log = 0; +tx_pwr = 0; +noise_pwr = 0; +rx_fdm_log = []; +rx_baseband_log = []; +rx_bits_offset = zeros(Nc*Nb*2); +prev_tx_symbols = ones(Nc+1,1); prev_tx_symbols(Nc+1) = 2; +prev_rx_symbols = ones(Nc+1,1); +ferr = 0; +foff = 0; +foff_log = []; +tx_baseband_log = []; +tx_fdm_log = []; + +% BER stats + +total_bit_errors = 0; +total_bits = 0; +bit_errors_log = []; +sync_bit_log = []; +test_frame_sync_log = []; +test_frame_sync_state = 0; + +% SNR estimation states + +sig_est = zeros(Nc+1,1); +noise_est = zeros(Nc+1,1); + +% fixed delay simuation + +Ndelay = M+20; +rx_fdm_delay = zeros(Ndelay,1); + +% --------------------------------------------------------------------- +% Eb/No calculations. We need to work out Eb/No for each FDM carrier. +% Total power is sum of power in all FDM carriers +% --------------------------------------------------------------------- + +C = 1; % power of each FDM carrier (energy/sample). Total Carrier power should = Nc*C = Nc +N = 1; % total noise power (energy/sample) of noise source across entire bandwidth + +% Eb = Carrier power * symbol time / (bits/symbol) +% = C *(1/Rs) / Nb +Eb_dB = 10*log10(C) - 10*log10(Rs) - 10*log10(Nb); + +No_dBHz = Eb_dB - EbNo_dB; + +% Noise power = Noise spectral density * bandwidth +% Noise power = Noise spectral density * Fs/2 for real signals +N_dB = No_dBHz + 10*log10(Fs/2); +Ngain_dB = N_dB - 10*log10(N); +Ngain = 10^(Ngain_dB/20); + +% C/No = Carrier Power/noise spectral density +% = power per carrier*number of carriers / noise spectral density +CNo_dB = 10*log10(C) + 10*log10(Nc) - No_dBHz; + +% SNR in equivalent 3000 Hz SSB channel + +B = 3000; +SNR = CNo_dB - 10*log10(B); + +% freq offset simulation states + +phase_offset = 1; +freq_offset = exp(j*2*pi*Foff_hz/Fs); +foff_phase = 1; +t = 0; +foff = 0; +fest_state = 0; +fest_timer = 0; +sync_mem = zeros(1,Nsync_mem); +sync = 0; +sync_log = []; + +snr_log = []; + +Nspec=1024; +spec_mem=zeros(1,Nspec); +SdB = zeros(1,Nspec); + +% --------------------------------------------------------------------- +% Main loop +% --------------------------------------------------------------------- + +for f=1:frames + + % ------------------- + % Modulator + % ------------------- + + tx_bits = get_test_bits(Nc*Nb); + tx_symbols = bits_to_psk(prev_tx_symbols, tx_bits, modulation); + prev_tx_symbols = tx_symbols; + tx_baseband = tx_filter(tx_symbols); + tx_baseband_log = [tx_baseband_log tx_baseband]; + tx_fdm = fdm_upconvert(tx_baseband); + tx_pwr = 0.9*tx_pwr + 0.1*real(tx_fdm)*real(tx_fdm)'/(M); + + % ------------------- + % Channel simulation + % ------------------- + + % frequency offset + + %Foff_hz += 1/Rs; + Foff = Foff_hz; + for i=1:M + % Time varying freq offset + %Foff = Foff_hz + 100*sin(t*2*pi/(300*Fs)); + %t++; + freq_offset = exp(j*2*pi*Foff/Fs); + phase_offset *= freq_offset; + tx_fdm(i) = phase_offset*tx_fdm(i); + end + + tx_fdm = real(tx_fdm); + + % HPA non-linearity + + tx_fdm(find(abs(tx_fdm) > hpa_clip)) = hpa_clip; + tx_fdm_log = [tx_fdm_log tx_fdm]; + + rx_fdm = tx_fdm; + + % AWGN noise + + noise = Ngain*randn(1,M); + noise_pwr = 0.9*noise_pwr + 0.1*noise*noise'/M; + rx_fdm += noise; + rx_fdm_log = [rx_fdm_log rx_fdm]; + + % update spectrum + + l=length(rx_fdm); + spec_mem(1:Nspec-l) = spec_mem(l+1:Nspec); + spec_mem(Nspec-l+1:Nspec) = rx_fdm; + S=fft(spec_mem.*hanning(Nspec)',Nspec); + SdB = 0.9*SdB + 0.1*20*log10(abs(S)); + + + % ------------------- + % Demodulator + % ------------------- + + % shift down to complex baseband + + for i=1:M + fbb_phase_rx = fbb_phase_rx*fbb_rect'; + rx_fdm(i) = rx_fdm(i)*fbb_phase_rx; + end + mag = abs(fbb_phase_rx); + fbb_phase_rx /= mag; + + % frequency offset estimation and correction, need to call rx_est_freq_offset even in sync + % mode to keep states updated + + [pilot prev_pilot pilot_lut_index prev_pilot_lut_index] = get_pilot(pilot_lut_index, prev_pilot_lut_index, M); + [foff_coarse S1 S2] = rx_est_freq_offset(rx_fdm, pilot, prev_pilot, M, !sync); + + if sync == 0 + foff = foff_coarse; + end + + foff_log = [ foff_log foff ]; + foff_rect = exp(j*2*pi*foff/Fs); + + for i=1:M + foff_phase *= foff_rect'; + rx_fdm(i) = rx_fdm(i)*foff_phase; + end + + rx_fdm_filter = rxdec_filter(rx_fdm, M); + rx_filt = down_convert_and_rx_filter(rx_fdm_filter, M, M/Q); + + [rx_symbols rx_timing] = rx_est_timing(rx_filt, M); + rx_timing_log = [rx_timing_log rx_timing]; + + %rx_phase = rx_est_phase(rx_symbols); + %rx_phase_log = [rx_phase_log rx_phase]; + %rx_symbols = rx_symbols*exp(j*rx_phase); + + [rx_bits sync_bit foff_fine pd] = psk_to_bits(prev_rx_symbols, rx_symbols, modulation); + if strcmp(modulation,'dqpsk') + rx_symbols_log = [rx_symbols_log pd]; + else + rx_symbols_log = [rx_symbols_log rx_symbols]; + endif + foff -= 0.5*foff_fine; + + prev_rx_symbols = rx_symbols; + sync_bit_log = [sync_bit_log sync_bit]; + + % freq est state machine + + [sync reliable_sync_bit fest_state fest_timer sync_mem] = freq_state(sync_bit, fest_state, fest_timer, sync_mem); + sync_log = [sync_log sync]; + + % Update SNR est + + [sig_est noise_est] = snr_update(sig_est, noise_est, pd); + snr_log = [snr_log calc_snr(sig_est, noise_est)]; + + % count bit errors if we find a test frame + % Allow 15 frames for filter memories to fill and time est to settle + + [test_frame_sync bit_errors] = put_test_bits(test_bits, rx_bits); + + if test_frame_sync == 1 + total_bit_errors = total_bit_errors + bit_errors; + total_bits = total_bits + Ntest_bits; + bit_errors_log = [bit_errors_log bit_errors]; + else + bit_errors_log = [bit_errors_log 0]; + end + + % test frame sync state machine, just for more informative plots + + next_test_frame_sync_state = test_frame_sync_state; + if (test_frame_sync_state == 0) + if (test_frame_sync == 1) + next_test_frame_sync_state = 1; + test_frame_count = 0; + end + end + + if (test_frame_sync_state == 1) + % we only expect another test_frame_sync pulse every 4 symbols + test_frame_count++; + if (test_frame_count == 4) + test_frame_count = 0; + if ((test_frame_sync == 0)) + next_test_frame_sync_state = 0; + end + end + end + test_frame_sync_state = next_test_frame_sync_state; + test_frame_sync_log = [test_frame_sync_log test_frame_sync_state]; +end + +% --------------------------------------------------------------------- +% Print Stats +% --------------------------------------------------------------------- + +ber = total_bit_errors / total_bits; + +% Peak to Average Power Ratio calcs from http://www.dsplog.com + +papr = max(tx_fdm_log.*conj(tx_fdm_log)) / mean(tx_fdm_log.*conj(tx_fdm_log)); +papr_dB = 10*log10(papr); + +% Note Eb/No set point is for Nc data carriers only, excluding pilot. +% This is convenient for testing BER versus Eb/No. Measured SNR & +% Eb/No includes power of pilot. Similar for SNR, first number is SNR +% excluding pilot pwr for Eb/No set point, 2nd value is measured SNR +% which will be a little higher as pilot power is included. Note current SNR +% est algorithm only works for QPSK, gives silly values for 8PSK. + +printf("Bits/symbol.: %d\n", Nb); +printf("Num carriers: %d\n", Nc); +printf("Bit Rate....: %d bits/s\n", Rb); +printf("Eb/No (meas): %2.2f (%2.2f) dB\n", EbNo_dB, 10*log10(0.25*tx_pwr*Fs/(Rs*Nc*noise_pwr))); +printf("bits........: %d\n", total_bits); +printf("errors......: %d\n", total_bit_errors); +printf("BER.........: %1.4f\n", ber); +printf("PAPR........: %1.2f dB\n", papr_dB); +printf("SNR...(meas): %2.2f (%2.2f) dB\n", SNR, calc_snr(sig_est, noise_est)); + +% --------------------------------------------------------------------- +% Plots +% --------------------------------------------------------------------- + +figure(1) +clf; +[n m] = size(rx_symbols_log); +plot(real(rx_symbols_log(1:Nc+1,15:m)),imag(rx_symbols_log(1:Nc+1,15:m)),'+') +axis([-3 3 -3 3]); +title('Scatter Diagram'); + +figure(2) +clf; +subplot(211) +plot(rx_timing_log) +title('timing offset'); +subplot(212) +plot(foff_log, '-;freq offset;') +hold on; +plot(sync_log*75, 'r;Sync State & course(0) fine(1) freq tracking;'); +hold off; +title('Freq offset (Hz)'); + +figure(3) +clf; +subplot(211) +plot(real(tx_fdm_log)); +title('FDM Tx Signal'); +subplot(212) +plot((0:Nspec/2-1)*Fs/Nspec, SdB(1:Nspec/2) - 20*log10(Nspec/2)) +axis([0 Fs/2 -40 0]) +grid +title('FDM Rx Spectrum'); + +figure(4) +clf; +subplot(311) +stem(sync_bit_log) +axis([0 frames 0 1.5]); +title('BPSK Sync') +subplot(312) +stem(bit_errors_log); +title('Bit Errors for test frames') +subplot(313) +plot(test_frame_sync_log); +axis([0 frames 0 1.5]); +title('Test Frame Sync') + +figure(5) +clf +subplot(211) +plot(snr_log) +subplot(212) +%plot(20*log10(sig_est(1:Nc))-20*log10(sig_est(Nc+1))+6) +%axis([1 Nc -6 6]); +sdB_pc = 20*log10(sig_est(1:Nc+1)); +bar(sdB_pc(1:Nc) - mean(sdB_pc(1:Nc))) +axis([0 Nc+1 -3 3]); diff --git a/libcodec2-android/src/codec2/octave/fdmdv_ut_freq_off.m b/libcodec2-android/src/codec2/octave/fdmdv_ut_freq_off.m new file mode 100644 index 0000000..395bcc5 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/fdmdv_ut_freq_off.m @@ -0,0 +1,489 @@ +% fdmdv_ut_freq_off.m +% David Rowe 17 June 2014 +% +% Unit Test program for freq offset estimation in FDMDV modem. +% +% Copyright David Rowe 2012 This program is +% distributed under the terms of the GNU General Public License +% Version 2 + +% [ ] sweep of different delays +% [ ] sweep of Eb/No +% [ ] sweep of freq offsets +% [ ] step change in foff +% + time to respond +% [ ] plot/print pass fail/relevant stats +% + variance +% + histogram of freq ests? + +fdmdv; % load modem code +hf_sim; % load hf sim code + +% --------------------------------------------------------------------- +% Eb/No calculations. We need to work out Eb/No for each FDM carrier. +% Total power is sum of power in all FDM carriers. These calcs set the +% Eb/No of the data carriers, Eb/No of pilot will be higher. +% --------------------------------------------------------------------- + +function [Nsd SNR] = calc_Nsd_from_EbNo(EbNo_dB) + global Rs; + global Nb; + global Nc; + global Fs; + + C = 1; % power of each FDM carrier (energy/sample). Total Carrier power should = Nc*C = Nc + N = 1; % total noise power (energy/sample) of noise source across entire bandwidth + + % Eb = Carrier power * symbol time / (bits/symbol) + % = C *(1/Rs) / Nb + Eb_dB = 10*log10(C) - 10*log10(Rs) - 10*log10(Nb); + + No_dBHz = Eb_dB - EbNo_dB; + + % Noise power = Noise spectral density * bandwidth + % Noise power = Noise spectral density * Fs/2 for real signals + N_dB = No_dBHz + 10*log10(Fs/2); + Ngain_dB = N_dB - 10*log10(N); + Nsd = 10^(Ngain_dB/20); + + % C/No = Carrier Power/noise spectral density + % = power per carrier*number of carriers / noise spectral density + CNo_dB = 10*log10(C) + 10*log10(Nc) - No_dBHz; + + % SNR in equivalent 3000 Hz SSB channel, adding extra power for pilot to get + % true SNR. + + B = 3000; + SNR = CNo_dB - 10*log10(B) + 10*log10((Nc+4)/Nc); +end + +% we keep a m sample buffer in sample_memory +% update sample_memory with n samples each time this function is called +% outputs one nfft2 slice of spectrogram in dB. Good idea to make nfft2 a power of 2 + +function [S, states_out] = spectrogram_update(samples, n, states_in) + sample_memory = states_in.sample_memory; + m = states_in.m; + nfft2 = states_in.nfft2; + lower_clip_dB = states_in.lower_clip_dB; + dec = states_in.dec; + + sample_memory(1:m-n) = sample_memory(n+1:m); + sample_memory(m-n+1:m) = samples; + + F = fft(sample_memory .* hanning(m)', 2*nfft2); + S = 20*log10(abs(F(1:dec:nfft2))/(nfft2)); + S(find(S < lower_clip_dB)) = lower_clip_dB; % clip lower limit + + states_out = states_in; + states_out.sample_memory = sample_memory; +end + +% ------------------------------------------------------------ + +function sim_out = freq_off_est_test(sim_in) + global Nc; + global Nb; + global M; + global Fs; + global pilot_lut_index; + global prev_pilot_lut_index; + global pilot_lpf1; + global Npilotlpf; + global spread; + global spread_2ms; + global hf_gain; + + EbNovec = sim_in.EbNovec; + Ndelay = sim_in.delay; + frames = sim_in.frames; + startup_delay = sim_in.startup_delay; + allowable_error = sim_in.allowable_error; + foff_hz = sim_in.foff_hz; + hf_sim = sim_in.hf_sim; + hf_delay = floor(sim_in.hf_delay_ms*Fs/1000); + plot_type = sim_in.plot_type; + + % work out gain for HF model + % e = sum((g*s)^2) = g*g*sum(s^2) = N, g = sqrt(N/sum(s^2)) + % compute so e=N + + s1 = spread(1:frames*M); + s2 = [zeros(hf_delay,1); spread_2ms(1:frames*M)]; + s2 = s2(1:frames*M); + + p = (s1+s2)'*(s1+s2); + hf_gain = sqrt(frames*M/p); + p2 = (hf_gain*(s1+s2))'*(hf_gain*(s1+s2)); + + if hf_sim + channel_model = "HF"; + else + channel_model = "AWGN"; + end + + % spectrogram states + + spec_states.m = 8*M; + spec_states.nfft2 = 2 ^ ceil(log2(spec_states.m/2)); + spec_states.dec = 4; + spec_states.sample_memory = zeros(1, spec_states.m); + spec_states.lower_clip_dB = -30; + + printf("\n%s\n", sim_in.test_name); + printf(" Channel EbNo SNR(calc) SNR(meas) SD(Hz) Hits Hits(%%) Result\n"); + + % --------------------------------------------------------------------- + % Main loop + % --------------------------------------------------------------------- + + for ne = 1:length(EbNovec) + EbNo_dB = EbNovec(ne); + [Nsd SNR] = calc_Nsd_from_EbNo(EbNo_dB); + hits = 0; + + tx_filt = zeros(Nc,M); + prev_tx_symbols = ones(Nc+1,1); + + tx_fdm_log = []; + rx_fdm_log = []; + pilot_lpf1_log = []; + S1_log = []; + rx_fdm_delay = zeros(M+Ndelay,1); + + % freq offset simulation states + + phase_offset = 1; + Nmedian = 20; + foff_median=zeros(1,Nmedian); + + % hf sim states + + path2 = zeros(1,hf_delay+M); + sum_sig = 0; + sum_noise = 0; + + % state machine + state = 0; + fest_current = 0; + fdelta = 5; + candidate_thresh = 10; + foff_est_thresh_prev = 0; + + for f=1:frames + + % ------------------- Modulator ------------------- + + tx_bits = get_test_bits(Nc*Nb); + tx_symbols = bits_to_psk(prev_tx_symbols, tx_bits, 'dqpsk'); + + % simulate BPF filtering of +/- 200 Hz + % tx_symbols(1:6) = 0; tx_symbols(9:Nc) = 0; + + prev_tx_symbols = tx_symbols; + tx_baseband = tx_filter(tx_symbols); + tx_fdm = fdm_upconvert(tx_baseband); + tx_fdm_log = [tx_fdm_log real(tx_fdm)]; + + % ------------------- Channel simulation ------------------- + + % frequency offset + + for i=1:M + freq_offset = exp(j*2*pi*foff_hz(f)/Fs); + phase_offset *= freq_offset; + tx_fdm(i) = phase_offset*tx_fdm(i); + end + + % optional HF channel sim + + if hf_sim + path1 = tx_fdm .* conj(spread(f*M+1:f*M+M)'); + + path2(1:hf_delay) = path2(M+1:hf_delay+M); + path2(hf_delay+1:hf_delay+M) = tx_fdm .* conj(spread_2ms(f*M+1:f*M+M)'); + + tx_fdm = hf_gain*(path1 + path2(1:M)); + end + sum_sig += tx_fdm * tx_fdm'; + + rx_fdm = real(tx_fdm); + + % AWGN noise + + noise = Nsd*randn(1,M); + sum_noise += noise * noise'; + rx_fdm += noise; + rx_fdm_log = [rx_fdm_log rx_fdm]; + + % Fixed Delay + + rx_fdm_delay(1:Ndelay) = rx_fdm_delay(M+1:M+Ndelay); + rx_fdm_delay(Ndelay+1:M+Ndelay) = rx_fdm; + + % ------------------- Freq Offset Est ------------------- + + % frequency offset estimation and correction, need to call + % rx_est_freq_offset even in track mode to keep states updated + + [pilot prev_pilot pilot_lut_index prev_pilot_lut_index] = ... + get_pilot(pilot_lut_index, prev_pilot_lut_index, M); + [foff_est S1 S2] = rx_est_freq_offset(rx_fdm_delay, pilot, prev_pilot, M); + pilot_lpf1_log = [pilot_lpf1_log pilot_lpf1(Npilotlpf-M+1:Npilotlpf)]; + S1_log(f,:) = fftshift(S1); + S2_log(f,:) = fftshift(S2); + + % raw estimate + + foff_log(ne,f) = foff_est; + maxS1_log(ne,f) = max(S1.*conj(S1)/(S1*S1')); + maxS2_log(ne,f) = max(S2.*conj(S2)/(S2*S2')); + + % median filter post-processed + + foff_median(1:Nmedian-1) = foff_median(2:Nmedian); + foff_median(Nmedian) = foff_est; + foff_median_log(ne,f) = foff_coarse = median(foff_median); + + % state machine post-processed + + next_state = state; + if state == 0 + if abs(foff_est - fest_current) > fdelta + fest_candidate = foff_est; + candidate_count = 0; + next_state = 1; + end + end + if state == 1 + if abs(foff_est - fest_candidate) > fdelta + next_state = 0; + end + candidate_count++; + if candidate_count > candidate_thresh + fest_current = fest_candidate; + next_state = 0; + end + end + state = next_state; + foff_statemach_log(ne,f) = fest_current; + + % threshold post processed + + if (maxS1_log(ne,f) > 0.06) || (maxS2_log(ne,f) > 0.06) + %if (maxS1_log(ne,f) > 0.08) + foff_thresh_log(ne,f) = foff_est; + else + foff_thresh_log(ne,f) = foff_est_thresh_prev; + end + foff_est_thresh_prev = foff_thresh_log(ne,f); + + % hit/miss stats + fest_current = foff_statemach_log(ne,f); + if (f > startup_delay) && (abs(fest_current - foff_hz(f)) < allowable_error) + hits++; + end + + if length(EbNovec) == 1 + [spectrogram(f,:) spec_states] = spectrogram_update(rx_fdm, M, spec_states); + end + end + + % results for this EbNo value + + sim_out.foff_sd(ne) = std(foff_log(ne,startup_delay:frames)); + sim_out.hits = hits; + sim_out.hits_percent = 100*sim_out.hits/(frames-startup_delay); + sim_out.SNRvec(ne) = SNR; + sim_out.tx_fdm_log = tx_fdm_log; + sim_out.rx_fdm_log = rx_fdm_log; + + % noise we have measures is 4000 Hz wide, we want noise in 3000 Hz BW + + snr_meas = 10*log10(sum_sig/(sum_noise*4000/3000)); + + printf(" %6s %5.2f % -5.2f % -5.2f %3.2f %d %3.2f ", ... + channel_model, EbNo_dB, SNR, snr_meas, sim_out.foff_sd(ne), sim_out.hits, sim_out.hits_percent); + + if sim_out.hits_percent == 100 + printf("PASS\n"); + else + printf("FAIL\n"); + figure(5) + clf + plot(abs(foff_statemach_log(ne,:) - foff_hz < allowable_error)); + end + + % plots if single dimension vector + + if length(EbNovec) == 1 + fmin = -200; fmax = 200; + figure(1) + clf; + subplot(411) + plot(foff_log(ne,:)) + axis([1 frames fmin fmax]); + ylabel("Foff raw") + subplot(412) + plot(foff_median_log(ne,:)) + axis([1 frames fmin fmax]); + ylabel("Foff median") + subplot(413) + plot(foff_statemach_log(ne,:),'g') + ylabel("Foff state") + axis([1 frames fmin fmax]); + subplot(414) + plot(foff_thresh_log(ne,:)) + ylabel("Foff thresh") + axis([1 frames fmin fmax]); + xlabel("Frames") + grid; + + figure(2) + clf; + plot(maxS1_log(ne,:)); + axis([1 frames 0 0.2]); + xlabel("Frames") + ylabel("max(abs(S1/S2))") + grid; + hold on; + plot(maxS2_log(ne,:),'g'); + hold off; + + figure(3) + [n m] = size(S1_log); + if strcmp(plot_type,"mesh") + mesh(-200+400*(0:m-1)/256,1:n,abs(S1_log(:,:))); + xlabel('Freq (Hz)'); ylabel('Frame num'); zlabel("max(abs(S1))") + else + imagesc(1:n,-200+400*(0:(m-1))/m,abs(S1_log(:,:))'); + set(gca,'YDir','normal') + ylabel('Freq (Hz)'); xlabel('Frame num'); + axis([1 n -200 200]) + end + + figure(4) + clf + [n m] = size(spectrogram); + if strcmp(plot_type,"mesh") + mesh((4000/m)*(1:m),1:n,spectrogram); + xlabel('Freq (Hz)'); ylabel('Frame num'); zlabel('Amplitude (dB)'); + else + imagesc(1:n,(4000/m)*(1:m),spectrogram') + set(gca,'YDir','normal') + ylabel('Freq (Hz)'); xlabel('Frame num'); + axis([1 n 500 2500]) + end + + sim_out.spec = spectrogram; + sim_out.tx_fdm_log = spectrogram; + end + end +end + +% --------------------------------------------------------------------- +% Run Automated Tests +% --------------------------------------------------------------------- + +more off; + +function test1 + global M; + global Rs; + + sim_in.test_name = "Test 1: range of Eb/No (SNRs) in AWGN channel"; + sim_in.EbNovec = [3:10 99]; + sim_in.delay = M/2; + sim_in.frames = Rs*3; + sim_in.foff_hz(1:sim_in.frames) = 50; + sim_in.startup_delay = 0.5*Rs; + sim_in.allowable_error = 5; + sim_in.hf_sim = 0; + sim_in.hf_delay_ms = 2; + sim_in.delay = M/2; + sim_in.plot_type = "waterfall"; + + sim_out = freq_off_est_test(sim_in); + + figure(5) + clf + subplot(211) + plot(sim_in.EbNovec, sim_out.foff_sd) + hold on; + plot(sim_in.EbNovec, sim_out.foff_sd,'+') + hold off; + xlabel("Eb/No (dB)") + ylabel("Std Dev (Hz)") + axis([(min(sim_in.EbNovec)-1) (max(sim_in.EbNovec)+1) -1 10]); + + subplot(212) + plot(sim_out.SNRvec,sim_out.foff_sd) + hold on; + plot(sim_out.SNRvec,sim_out.foff_sd,'+') + hold off; + xlabel("SNR (dB)") + ylabel("Std Dev (Hz)") + axis([(min(sim_out.SNRvec)-1) (max(sim_out.SNRvec)+1) -1 10]); +end + + +function test2 + sim_in.test_name = "Test 2: range of Eb/No (SNRs) in HF multipath channel" + sim_in.EbNovec = 0:10; + sim_in.delay = 2; + sim_in.hf_sim = 1; + sim_in.hf_delay_ms = 2; + sim_in.frames = Rs*2; + sim_in.foff_hz = 0; + sim_in.startup_delay = Rs/2; + sim_in.allowable_error = 5; + + sim_out = freq_off_est_test(sim_in); + + figure(5) + clf + subplot(211) + plot(sim_in.EbNovec,sim_out.foff_sd) + hold on; + plot(sim_in.EbNovec,sim_out.foff_sd,'+') + hold off; + xlabel("Eb/No (dB)") + ylabel("Std Dev") + axis([(min(sim_in.EbNovec)-1) (max(sim_in.EbNovec)+1) -1 10]); +end + +function test3 + global M; + global Rs; + + sim_in.test_name = "Test 3: 30 Seconds in HF multipath channel at 0dB-ish SNR"; + sim_in.EbNovec = 13; + sim_in.hf_sim = 0; + sim_in.hf_delay_ms = 2; + sim_in.delay = M/2; + sim_in.frames = Rs; + sim_in.foff_hz(1:sim_in.frames) = -50; + sim_in.startup_delay = Rs; % allow 1 second in heavily faded channels + sim_in.allowable_error = 5; + sim_in.plot_type = "mesh"; + sim_out = freq_off_est_test(sim_in); +endfunction + +function animated_gif + figure(4) + for i=5:5:360 + view(i,45) + filename=sprintf('fdmdv_fig%05d.png',i); + print(filename); + end + if 0 + for i=90:-5:-270 + view(45,i) + filename=sprintf('fdmdv_fig%05d.png',i); + print(filename); + end + end +endfunction + +test3; + diff --git a/libcodec2-android/src/codec2/octave/fm.m b/libcodec2-android/src/codec2/octave/fm.m new file mode 100644 index 0000000..92e8113 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/fm.m @@ -0,0 +1,484 @@ +% fm.m +% David Rowe Dec 2014 +% +% Analog FM Octave simulation functions. + +1; + +graphics_toolkit ("gnuplot"); + +function fm_states = analog_fm_init(fm_states) + + % FM modulator constants + + Fs = fm_states.Fs; FsOn2 = Fs/2; + fm_max = fm_states.fm_max; % max modulation freq + fd = fm_states.fd; % (max) deviation + fm_states.m = fd/fm_max; % modulation index + fm_states.Bfm = Bfm = 2*(fd+fm_max); % Carson's rule for FM signal bandwidth + fm_states.tc = tc = 50E-6; + fm_states.prede = [1 -(1 - 1/(tc*Fs))]; % pre/de emp filter coeffs + fm_states.ph_dont_limit = 0; % Limit rx delta-phase + + % Select length of filter to be an integer number of symbols to + % assist with "fine" timing offset estimation. Set Ts to 1 for + % analog modulation. + + Ts = fm_states.Ts; + desired_ncoeffs = 200; + ncoeffs = floor(desired_ncoeffs/Ts+1)*Ts; + + % "coarse" timing offset is half filter length, we have two filters. + % This is the delay the two filters introduce, so we need to adjust + % for this when comparing tx to trx bits for BER calcs. + + fm_states.nsym_delay = ncoeffs/Ts; + + % input filter gets rid of excess noise before demodulator, as too much + % noise causes atan2() to jump around, e.g. -pi to pi. However this + % filter can cause harmonic distortion at very high SNRs, as it knocks out + % some of the FM signal spectra. This filter isn't really required for high + % SNRs > 20dB. + + fc = (Bfm/2)/(FsOn2); + fm_states.bin = firls(ncoeffs,[0 fc*(1-0.05) fc*(1+0.05) 1],[1 1 0.01 0.01]); + + % demoduator output filter to limit us to fm_max (e.g. 3kHz) + + fc = fm_max/(FsOn2); + fm_states.bout = firls(ncoeffs,[0 0.95*fc 1.05*fc 1], [1 1 0.01 0.01]); +endfunction + + +function fm_fir_coeff_file(fm_states, filename) + global gt_alpha5_root; + global Nfilter; + + f=fopen(filename,"wt"); + + fprintf(f,"/* Generated by fm_fir_coeff_file() Octave function in fm.m */\n\n"); + fprintf(f,"const float bin[]={\n"); + for m=1:length(fm_states.bin)-1 + fprintf(f," %g,\n", fm_states.bin(m)); + endfor + fprintf(f," %g\n};\n\n", fm_states.bin(length(fm_states.bin))); + + fprintf(f,"const float bout[]={\n"); + for m=1:length(fm_states.bout)-1 + fprintf(f," %g,\n", fm_states.bout(m)); + endfor + fprintf(f," %g\n};\n", fm_states.bout(length(fm_states.bout))); + + fclose(f); +endfunction + + +function tx = analog_fm_mod(fm_states, mod) + Fs = fm_states.Fs; + fc = fm_states.fc; wc = 2*pi*fc/Fs; + fd = fm_states.fd; wd = 2*pi*fd/Fs; + nsam = length(mod); + + if fm_states.pre_emp + mod = filter(fm_states.prede,1,mod); + mod = mod/max(mod); % AGC to set deviation + end + + tx_phase = 0; + tx = zeros(1,nsam); + + for i=0:nsam-1 + w = wc + wd*mod(i+1); + tx_phase = tx_phase + w; + tx_phase = tx_phase - floor(tx_phase/(2*pi))*2*pi; + tx(i+1) = exp(j*tx_phase); + end +endfunction + + +function [rx_out rx_bb] = analog_fm_demod(fm_states, rx) + Fs = fm_states.Fs; + fc = fm_states.fc; wc = 2*pi*fc/Fs; + fd = fm_states.fd; wd = 2*pi*fd/Fs; + nsam = length(rx); + t = 0:(nsam-1); + + rx_bb = rx .* exp(-j*wc*t); % down to complex baseband + rx_bb = filter(fm_states.bin,1,rx_bb); + + % differentiate first, in rect domain, then find angle, this puts + % signal on the positive side of the real axis + + rx_bb_diff = [ 1 rx_bb(2:nsam) .* conj(rx_bb(1:nsam-1))]; + rx_out = atan2(imag(rx_bb_diff),real(rx_bb_diff)); + + % limit maximum phase jumps, to remove static type noise at low SNRs + if !fm_states.ph_dont_limit + rx_out(find(rx_out > wd)) = wd; + rx_out(find(rx_out < -wd)) = -wd; + end + rx_out *= (1/wd); + + if fm_states.output_filter + rx_out = filter(fm_states.bout,1,rx_out); + end + if fm_states.de_emp + rx_out = filter(1,fm_states.prede,rx_out); + end +endfunction + + +function sim_out = analog_fm_test(sim_in) + nsam = sim_in.nsam; + CNdB = sim_in.CNdB; + verbose = sim_in.verbose; + + Fs = fm_states.Fs = 96000; + fm_max = fm_states.fm_max = 3E3; + fd = fm_states.fd = 5E3; + fm_states.fc = 24E3; + + fm_states.pre_emp = pre_emp = sim_in.pre_emp; + fm_states.de_emp = de_emp = sim_in.de_emp; + fm_states.Ts = 1; + fm_states.output_filter = 1; + fm_states = analog_fm_init(fm_states); + sim_out.Bfm = fm_states.Bfm; + + Bfm = fm_states.Bfm; + m = fm_states.m; tc = fm_states.tc; + t = 0:(nsam-1); + + fm = 1000; wm = 2*pi*fm/fm_states.Fs; + + % start simulation + + for ne = 1:length(CNdB) + + % work out the variance we need to obtain our C/N in the bandwidth + % of the FM demod. The gaussian generator randn() generates noise + % with a bandwidth of Fs + + aCNdB = CNdB(ne); + CN = 10^(aCNdB/10); + variance = Fs/(CN*Bfm); + + % FM Modulator ------------------------------- + + mod = sin(wm*t); + tx = analog_fm_mod(fm_states, mod); + + % Channel --------------------------------- + + noise = sqrt(variance/2)*(randn(1,nsam) + j*randn(1,nsam)); + rx = tx + noise; + + % FM Demodulator + + [rx_out rx_bb] = analog_fm_demod(fm_states, rx); + + % notch out test tone + + w = 2*pi*fm/Fs; beta = 0.99; + rx_notch = filter([1 -2*cos(w) 1],[1 -2*beta*cos(w) beta*beta], rx_out); + + % measure power with and without test tone to determine S+N and N + + settle = 1000; % filter settling time, to avoid transients + nsettle = nsam - settle; + + sinad = (rx_out(settle:nsam) * rx_out(settle:nsam)')/nsettle; + nad = (rx_notch(settle:nsam) * rx_notch(settle:nsam)')/nsettle; + + snr = (sinad-nad)/nad; + sim_out.snrdB(ne) = 10*log10(snr); + + % Theory from FMTutorial.pdf, Lawrence Der, Silicon labs paper + + snr_theory_dB = aCNdB + 10*log10(3*m*m*(m+1)); + fx = 1/(2*pi*tc); W = fm_max; + I = (W/fx)^3/(3*((W/fx) - atan(W/fx))); + I_dB = 10*log10(I); + + sim_out.snr_theorydB(ne) = snr_theory_dB; + sim_out.snr_theory_pre_dedB(ne) = snr_theory_dB + I_dB; + + if verbose > 1 + printf("modn index: %2.1f Bfm: %.0f Hz\n", m, Bfm); + end + + if verbose > 0 + printf("C/N: %4.1f SNR: %4.1f dB THEORY: %4.1f dB or with pre/de: %4.1f dB\n", + aCNdB, 10*log10(snr), snr_theory_dB, snr_theory_dB+I_dB); + end + + if verbose > 1 + figure(1) + subplot(211) + plot(20*log10(abs(fft(rx)))) + title('FM Modulator Output Spectrum'); + axis([1 length(tx) 0 100]); + subplot(212) + Rx_bb = 20*log10(abs(fft(rx_bb))); + plot(Rx_bb) + axis([1 length(tx) 0 100]); + title('FM Demodulator (baseband) Input Spectrum'); + + figure(2) + subplot(211) + plot(rx_out(settle:nsam)) + axis([1 4000 -1 1]) + subplot(212) + Rx = 20*log10(abs(fft(rx_out(settle:nsam)))); + plot(Rx(1:10000)) + axis([1 10000 0 100]); + end + + end + +endfunction + + +function run_fm_curves + sim_in.nsam = 96000; + sim_in.verbose = 1; + sim_in.pre_emp = 0; + sim_in.de_emp = 0; + sim_in.CNdB = -4:2:20; + + sim_out = analog_fm_test(sim_in); + + figure(1) + clf + plot(sim_in.CNdB, sim_out.snrdB,"r;FM Simulated;"); + hold on; + plot(sim_in.CNdB, sim_out.snr_theorydB,"g;FM Theory;"); + plot(sim_in.CNdB, sim_in.CNdB,"b; SSB Theory;"); + hold off; + grid("minor"); + xlabel("FM demod input C/N (dB)"); + ylabel("FM demod output S/N (dB)"); + legend("boxoff"); + + % C/No curves + + Bfm_dB = 10*log10(sim_out.Bfm); + Bssb_dB = 10*log10(3000); + + figure(2) + clf + plot(sim_in.CNdB + Bfm_dB, sim_out.snrdB,"r;FM Simulated;"); + hold on; + plot(sim_in.CNdB + Bfm_dB, sim_out.snr_theorydB,"g;FM Theory;"); + plot(sim_in.CNdB + Bssb_dB, sim_in.CNdB,"b; SSB Theory;"); + hold off; + grid("minor"); + xlabel("FM demod input C/No (dB)"); + ylabel("FM demod output S/N (dB)"); + legend("boxoff"); + +endfunction + + +function run_fm_single + sim_in.nsam = 96000; + sim_in.verbose = 2; + sim_in.pre_emp = 0; + sim_in.de_emp = 0; + + sim_in.CNdB = 20; + sim_out = analog_fm_test(sim_in); +end + + +function fm_mod_file(file_name_out, file_name_in, CNdB) + fm_states.Fs = 48000; + fm_states.fm_max = 3E3; + fm_states.fd = 5E3; + fm_states.fc = fm_states.Fs/4; + fm_states.pre_emp = 0; + fm_states.de_emp = 0; + fm_states.Ts = 1; + fm_states.output_filter = 1; + fm_states = analog_fm_init(fm_states); + + if nargin == 1 + nsam = fm_states.Fs * 10; + t = 0:(nsam-1); + fm = 1000; wm = 2*pi*fm/fm_states.Fs; + mod = sin(wm*t); + else + fin = fopen(file_name_in,"rb"); + mod = fread(fin,"short")'; + mod /= 32767; + fclose(fin); + end + tx = analog_fm_mod(fm_states, mod); + + if (nargin == 3) + % Optionally add some noise + + CN = 10^(CNdB/10); + variance = fm_states.Fs/(CN*fm_states.Bfm); + tx += sqrt(variance)*randn(1,length(tx)); + end + + tx_out = tx*16384; + fout = fopen(file_name_out,"wb"); + fwrite(fout, tx_out, "short"); + fclose(fout); +endfunction + + +function fm_demod_file(file_name_out, file_name_in) + fin = fopen(file_name_in,"rb"); + rx = fread(fin,"short")'; + rx = rx(100000:length(rx)); % strip of wave header + fclose(fin); + + Fs = fm_states.Fs = 48000; + fm_max = fm_states.fm_max = 3E3; + fd = fm_states.fd = 5E3; + fm_states.fc = 12E3; + + fm_states.pre_emp = 0; + fm_states.de_emp = 1; + fm_states.Ts = 1; + fm_states.output_filter = 1; + fm_states = analog_fm_init(fm_states); + + [rx_out rx_bb] = analog_fm_demod(fm_states, rx); + + rx_out *= 20000; + fout = fopen(file_name_out,"wb"); + fwrite(fout, rx_out, "short"); + fclose(fout); + + figure(1) + subplot(211) + plot(rx) + subplot(212) + plot(20*log10(abs(fft(rx)))) + title('FM Dmodulator Intput Spectrum'); + + figure(2) + subplot(211) + Rx_bb = 20*log10(abs(fft(rx_bb))); + plot(Rx_bb) + title('FM Demodulator (baseband) Input Spectrum'); + + subplot(212) + plot(20*log10(abs(fft(rx_out)))) + title('FM Dmodulator Output Spectrum'); + + figure(3) + plot(rx_out) + title('FM Dmodulator Output'); + + % estimate SNR, C/No etc + + npower_window = 1024; + rx_power = conv(rx.^2,ones(1,npower_window))/(npower_window); + rx_power_dB = 10*log10(rx_power); + figure; + subplot(211) + plot(rx); + subplot(212) + plot(rx_power_dB); + axis([1 length(rx_power) max(rx_power_dB)-9 max(rx_power_dB)+1]) + grid("minor") + + % estimate FM demod output SNR if a 1000 Hz tone is present + + w = 2*pi*1000/Fs; beta = 0.99; + rx_notch = filter([1 -2*cos(w) 1],[1 -2*beta*cos(w) beta*beta], rx_out); + + rx_out_power = conv(rx_out.^2,ones(1,npower_window))/(npower_window); + rx_out_power_dB = 10*log10(rx_out_power); + rx_notch_power = conv(rx_notch.^2,ones(1,npower_window))/(npower_window); + rx_notch_power_dB = 10*log10(rx_notch_power); + figure; + plot(rx_out_power_dB,'r;FM demod output power;'); + hold on; + plot(rx_notch_power_dB,'b;1000 Hz notch filter output power;'); + plot(rx_out_power_dB-rx_notch_power_dB,'g;1000 Hz tone SNR;'); + hold off; + legend("boxoff"); + ylabel('dB'); + xlabel('Time (samples)'); + grid("minor") + +endfunction + + +% generate filter coeffs for C implementation of FM demod + +function make_coeff_file + fm_states.Fs = 44400; + fm_states.fm_max = 3E3; + fm_states.fd = 5E3; + fm_states.fc = fm_states.Fs/4; + + fm_states.pre_emp = 0; + fm_states.de_emp = 0; + fm_states.Ts = 1; + fm_states.output_filter = 1; + fm_states = analog_fm_init(fm_states); + + fm_fir_coeff_file(fm_states, "fm_fir_coeff.h") +endfunction + +function test_fm_modulator + fm_states.Fs = 48000; + fm_states.fm_max = 3E3; + fm_states.fd = 5E3; + %fm_states.fc = fm_states.Fs/4; + fm_states.fc = 0; + + fm_states.pre_emp = 0; + fm_states.de_emp = 0; + fm_states.Ts = 1; + fm_states.output_filter = 1; + fm_states = analog_fm_init(fm_states); + + test_t = [1:(fm_states.Fs*10)]; + test_freq1 = 2*pi*3000/fm_states.Fs; + test_freq2 = 2*pi*1000/fm_states.Fs; + + test_sig = .5*sin(test_t*test_freq1) + .5*sin(test_t*test_freq2); + %test_sig = zeros(1,length(test_t)); + %test_sig = ones(1,length(test_t)); + + ftsig = fopen("fm_test_sig.raw","wb"); + fwrite(ftsig,test_sig*16384,"short"); + fclose(ftsig); + + system("../fm_test fm_test_sig.raw fm_test_out.raw"); + ftmod = fopen("fm_test_out.raw","r"); + test_mod_p = rot90(fread(ftmod,"short"))/16384; + test_mod_r = test_mod_p(1:2:length(test_mod_p)); + test_mod_i = test_mod_p(2:2:length(test_mod_p)); + test_mod = test_mod_r .+ i*test_mod_i; + fclose(ftmod); + + comp_mod = analog_fm_mod(fm_states,test_sig); + + figure(1) + comp_mod_real = real(comp_mod); + size(comp_mod_real) + size(test_mod) + mod_diff = zeros(1,length(test_mod)); + mod_diff = test_mod .- comp_mod; + plot(test_t,real(test_mod .- comp_mod),test_t,imag(test_mod .- comp_mod)); + +endfunction + +more off; + +%run_fm_curves +%fm_demod_file("ssb_fm_out.raw","~/Desktop/ssb_fm.wav") +%fm_demod_file("ssb25_fm_de.raw", "~/Desktop/ssb25db.wav") +%run_fm_single +%make_coeff_file +%fm_mod_file("fm_1000.raw"); +%test_fm_modulator diff --git a/libcodec2-android/src/codec2/octave/fm_radio_filt_model.txt b/libcodec2-android/src/codec2/octave/fm_radio_filt_model.txt new file mode 100644 index 0000000..368f7e2 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/fm_radio_filt_model.txt @@ -0,0 +1,8 @@ +# Created by Octave 4.0.0, Wed Feb 10 20:14:16 2016 CST +# name: filt +# type: matrix +# rows: 1 +# columns: 1001 + 4.111934884608988e-05 4.529266752036107e-05 5.012294778018435e-05 5.387673663540811e-05 5.656595617636202e-05 5.754247327156636e-05 5.745029328387444e-05 5.810382275274602e-05 6.038440324493526e-05 6.151519405194188e-05 5.995001465356246e-05 5.965124091807071e-05 5.894036887788694e-05 5.282714911187688e-05 4.16286613756742e-05 2.733281113424976e-05 1.151301392357209e-05 -5.011952829637155e-06 -2.038060526743049e-05 -2.88950898384027e-05 -3.140205230802841e-05 -2.680377848432233e-05 -1.425766597021347e-05 2.754137907668088e-06 2.533067638032289e-05 5.098405707491412e-05 7.524935743597888e-05 9.490108720790089e-05 0.0001114408649087926 0.0001232907290105822 0.0001298558067129026 0.0001314146843973354 0.000126874153326206 0.0001211256678148737 0.0001128586850331393 0.0001021842594143064 9.340521285980458e-05 8.465588232787989e-05 7.602754602719386e-05 7.476083494605245e-05 7.795597606716329e-05 8.085052742218461e-05 8.855370570715267e-05 9.993747197784049e-05 0.0001100627878797455 0.0001157727179778551 0.0001211159686312227 0.0001276193402990368 0.0001274951568358215 0.0001237937282219144 0.0001199864757482567 0.0001145773485240607 0.0001078643622955885 9.949247921871633e-05 9.282321723585223e-05 8.670764514445847e-05 8.236867203976522e-05 8.178131856442866e-05 8.653490906422325e-05 9.474089964535933e-05 0.0001046664881685255 0.0001171407871684955 0.0001284375906324497 0.0001435371988464706 0.0001538019728144609 0.000157821986861445 0.0001617032194688335 0.000161139381508245 0.0001573044997290387 0.0001505912434581831 0.0001444545226667355 0.0001371895926370354 0.0001282916901414378 0.0001164777490003531 0.0001017868860228118 8.38857960955751e-05 6.397168698635467e-05 4.505424718694719e-05 2.609404178225459e-05 9.390120446350423e-06 -6.139147851498066e-06 -1.74535589572342e-05 -2.432568386408825e-05 -2.719609151945925e-05 -2.559556014458576e-05 -1.629614429158625e-05 -1.3631941893713e-06 1.383091083546116e-05 3.467670361993851e-05 6.180780852724694e-05 8.838658249276322e-05 0.0001119097915371812 0.0001372537482217498 0.0001573246833069575 0.0001685794934648446 0.0001736521706833196 0.0001743894362264053 0.000170440134727034 0.0001570034141396783 0.0001415291461137907 0.0001293030383250257 0.0001170129681552746 0.0001056747747162765 9.587608125739278e-05 8.209630166614193e-05 6.930393501059805e-05 6.085367944553192e-05 5.275816447026444e-05 4.194241650880381e-05 3.420239452264183e-05 3.304591574725996e-05 3.024288241806293e-05 3.012154305643325e-05 3.738917134601837e-05 4.770388200482866e-05 5.781977436721907e-05 7.420695272211161e-05 8.723833080263831e-05 9.505250826889752e-05 0.0001065158066456628 0.0001104312822684124 0.0001098275912662366 0.000107206024810334 0.0001025516069602837 9.894340278646091e-05 9.407503918864603e-05 8.7319365554045e-05 8.141197975598374e-05 8.422482885728253e-05 9.626406072217444e-05 0.0001047837385634293 0.0001197702730190546 0.0001441800101209614 0.000160456934552367 0.0001774138786603596 0.0001926926553236415 0.0001984206468214209 0.0001945597427125206 0.0001836754090288533 0.0001644147124457892 0.0001450923278130216 0.000131637876080013 0.0001194268883117051 0.0001142849115928036 0.0001090067194513346 0.0001167532618894625 0.0001293962113881341 0.0001304604164937581 0.0001310955784948294 0.0001353721674033472 0.0001341681487126995 0.0001198264422032539 0.0001012747411089002 7.153140827090248e-05 4.191084339680094e-05 2.303431628630918e-05 1.138159045954137e-05 1.214910078795732e-05 2.029103100753587e-05 3.914274819454478e-05 7.436668389413293e-05 0.0001131985409445768 0.0001541458098186209 0.0001981874567952984 0.0002293068332902554 0.0002574810386944711 0.0002797524248574673 0.000280098997160137 0.0002691199306180641 0.0002483396512410882 0.0002130987320308693 0.0001696438030090705 0.0001233684249499195 8.43926061428125e-05 5.198681974621152e-05 3.567320177887548e-05 4.949705291163776e-05 7.787515033943651e-05 0.0001300149878038 0.0002020713027294515 0.0002783857988869775 0.0003565185832637648 0.0004241895316775589 0.000479626912439881 0.0005159892932585141 0.0005326203262494115 0.0005366426137323655 0.0005240387399286967 0.0005041051313799223 0.0004864550530904512 0.0004727638664349475 0.0004645950604270155 0.0004548102499574072 0.000455527247961606 0.0004612992161328969 0.0004674556394527062 0.0004716258022734013 0.0004668087315020519 0.0004622641649603435 0.0004465585690774155 0.000425258701401412 0.00039751658715728 0.0003635800988525798 0.0003328960310700836 0.0003048849901663823 0.0002810007495450609 0.0002673721567286335 0.0002702604512501591 0.0002862572870604029 0.0003084406671027542 0.0003355248671444351 0.0003761847353904122 0.0004148377173810094 0.0004485558688712593 0.0004800892227209435 0.0005013700140284393 0.0005138034260364562 0.000523675449512398 0.0005317635475002124 0.0005322207128124348 0.0005292033760978139 0.0005269773541343302 0.0005175977188382754 0.0004993895797658196 0.0004858979454010794 0.0004684001252653537 0.0004587034220581103 0.0004638037190751786 0.0004761823498486873 0.0004885372867673723 0.0005043751480265481 0.0005446800229664075 0.0005890158012063288 0.0006231865628459465 0.0006616542116343469 0.0006972231165628774 0.0007040149509799145 0.000712178888077443 0.0007101214361108593 0.0006931453291674526 0.0006924927262763824 0.0006853703272953059 0.0007004172297637321 0.0007466476213180197 0.00080183074513318 0.0008653125079193471 0.000932413333045206 0.0009780458869915588 0.001000137248327646 0.0009991649016365171 0.0009565650123854935 0.0008785166874477056 0.0007712153995398795 0.0006440612144425213 0.0005014886072902373 0.0003647207877911045 0.0002314452035966864 0.0001215619643926978 5.102070582077005e-05 3.53881850929961e-06 5.024961716295417e-06 4.952203678213442e-05 0.0001260092656341149 0.0002274300947131321 0.0003513571295408856 0.0004918678731923972 0.0006212972022330388 0.0007279470267812717 0.0008134213275591345 0.000856084224659261 0.0008367582390177951 0.0007963231371937705 0.0007308920792511363 0.0006278320617335954 0.0005155411192978977 0.0004049366284488046 0.0003146483534597321 0.000232809201512697 0.0001611481391302676 0.0001276356087955276 0.0001258477694353633 0.000148410784426943 0.0001791264427517458 0.0002152831436118296 0.0002722059220446592 0.0003148588847685937 0.0003235563379009122 0.0003234961169067191 0.0003141523386480817 0.0002970986813756301 0.0002753731712067278 0.0002391073092942144 0.0002217724458095815 0.0002500563490184254 0.0002860821491880679 0.0003319979542964821 0.0004127132318400748 0.0005101781526047186 0.0006116301200159012 0.0007154307983328388 0.0008127224793692451 0.0008838704404048489 0.0009291650300966136 0.0009480193252716987 0.0009397344198433433 0.0009095689814133252 0.0008547924134192681 0.0007841007737282723 0.0007018037456432335 0.0006005948006725787 0.0005078784471340359 0.0004406418213749735 0.0003714124757418396 0.0003264057688551507 0.0003047322000871897 0.0002906911596356952 0.0002861738822980829 0.0002743316277907311 0.0002636405310368626 0.0002526665586205466 0.000226716276058895 0.0001875320324724495 0.0001636750239487869 0.0001372388125105794 0.0001222573562860838 0.0001269254248804013 0.0001139495649892648 0.0001106414381361491 0.0001196292706110303 0.0001189746129582091 0.0001112327955701268 0.0001296685790607515 0.0001643819608291414 0.0001878863422254414 0.0002344588678557017 0.0003203860709214426 0.0004064572654023451 0.0004940737860301076 0.000596014360602431 0.0006749848938371238 0.0007389096824511 0.0007792584703839535 0.0007965798134060041 0.0008056540909816971 0.0007849711152884964 0.000736062831596933 0.0006709962921592219 0.000603317655045247 0.0005383093164802969 0.0004900142937176716 0.0004551531490340078 0.000449534106387221 0.0004708650906301616 0.0004934795110626268 0.0005345974954791178 0.0006078660984573032 0.000702762715896311 0.0007775394691744047 0.0008818221619807017 0.001000679407785467 0.001092707546060794 0.001210613677564552 0.001312089019158298 0.001405270807169912 0.001490114661507714 0.001531394363834887 0.001555410794560944 0.001543704930528568 0.001470479573974331 0.001389350245308104 0.00128125012918577 0.001130987351527693 0.001007863016474597 0.0008564828937716682 0.0007074501288004987 0.0006213523466697201 0.0005713540643662852 0.0005583807693821872 0.0006196820100433617 0.0007361817663542591 0.0008554464717298295 0.0009758354537658702 0.001030406744297961 0.001035680319931336 0.001012121155964727 0.0009548313236383478 0.0008790095856581987 0.0008222269458738788 0.0007806888647762658 0.00070288663268893 0.0006454619358970265 0.0006054134743706602 0.000585536509799107 0.0005761856239940797 0.0005868746914752406 0.0006209602772533917 0.0006504193524742758 0.0006871616100603014 0.0007025287393104163 0.0007171995117985032 0.0007172937860848917 0.0006961439382863224 0.0006718024855287201 0.0006254758975065462 0.0005416137326971845 0.0004555547815183704 0.0003867779579310328 0.0003290178707355808 0.0002953031361596086 0.000255119760230264 0.0002488539502124204 0.0002677640501578254 0.0002652005008809371 0.0002906090024497945 0.0003166398471483209 0.0003089920401697223 0.0003114866028324989 0.0003133184110010134 0.0002840418132516435 0.0002386702280686958 0.0001892280180500572 0.0001115506030916713 1.983929251944428e-07 -0.0001282921891725907 -0.0002827272707108253 -0.0004368740799478221 -0.0005848618113809967 -0.0007194441046966012 -0.0008196524633909468 -0.0009048202133206396 -0.0009695404302984057 -0.00101680303425177 -0.00104331484535875 -0.001044670960196941 -0.001096308220052877 -0.001198928001528127 -0.001307622162194671 -0.001475710104821832 -0.001686034525628763 -0.001932017480014 -0.002224364121912755 -0.002509340882950428 -0.002795659773184621 -0.00309134921771924 -0.003339621248074061 -0.003527096039668997 -0.003713374797631359 -0.003865457109591278 -0.003984544055673171 -0.004135912398823348 -0.004315826807472575 -0.004496951439455919 -0.004688515788482826 -0.004898735004401356 -0.005110796780538788 -0.005339127441411028 -0.00553035210769078 -0.005705695069882694 -0.005870819376498557 -0.006004875496650137 -0.006110777442311181 -0.006164210930893388 -0.00618756905448379 -0.006096936349455484 -0.005939592020122337 -0.005693193052915928 -0.005354094079859258 -0.005027974684133828 -0.004692376525298168 -0.004435709093992968 -0.004274376328604747 -0.004208157300760209 -0.004223103959974963 -0.004327093561393999 -0.004497183833286816 -0.004613763151773346 -0.004718655531703288 -0.00476162995946275 -0.004733215833039038 -0.004717818557505252 -0.004685430263054647 -0.004754957289104762 -0.004977412914427918 -0.005345713165123564 -0.005956911360135976 -0.006682313612074329 -0.007507498625754038 -0.008207774465767762 -0.008390747806307929 -0.007774338884105022 -0.005813672313667084 -0.002020675163340676 0.003934699513891164 0.01218867179800687 0.0227189593674642 0.03474656425430857 0.0474559430852135 0.05969919927081149 0.06940044807963783 0.07690251527634465 0.08229165974889782 0.07690251527634465 0.06940044807963783 0.05969919927081149 0.04745594308521349 0.03474656425430857 0.02271895936746419 0.01218867179800687 0.003934699513891165 -0.002020675163340676 -0.005813672313667083 -0.007774338884105022 -0.008390747806307929 -0.008207774465767762 -0.007507498625754038 -0.006682313612074331 -0.005956911360135976 -0.005345713165123564 -0.004977412914427918 -0.004754957289104762 -0.004685430263054647 -0.004717818557505251 -0.004733215833039039 -0.00476162995946275 -0.004718655531703288 -0.004613763151773345 -0.004497183833286817 -0.004327093561393998 -0.004223103959974966 -0.004208157300760209 -0.004274376328604745 -0.00443570909399297 -0.004692376525298168 -0.005027974684133829 -0.00535409407985926 -0.005693193052915932 -0.005939592020122337 -0.006096936349455483 -0.006187569054483791 -0.006164210930893387 -0.006110777442311182 -0.006004875496650137 -0.005870819376498557 -0.005705695069882694 -0.00553035210769078 -0.005339127441411028 -0.005110796780538787 -0.004898735004401356 -0.004688515788482826 -0.004496951439455919 -0.004315826807472577 -0.004135912398823348 -0.003984544055673172 -0.003865457109591278 -0.00371337479763136 -0.003527096039668997 -0.003339621248074061 -0.00309134921771924 -0.00279565977318462 -0.002509340882950424 -0.002224364121912757 -0.001932017480014 -0.001686034525628767 -0.001475710104821831 -0.001307622162194672 -0.001198928001528127 -0.001096308220052873 -0.001044670960196942 -0.00104331484535875 -0.001016803034251772 -0.0009695404302984054 -0.00090482021332064 -0.0008196524633909476 -0.0007194441046966014 -0.0005848618113809963 -0.000436874079947822 -0.0002827272707108247 -0.0001282921891725906 1.9839292519393e-07 0.0001115506030916713 0.0001892280180500569 0.0002386702280686963 0.0002840418132516444 0.0003133184110010132 0.0003114866028324986 0.0003089920401697223 0.0003166398471483207 0.0002906090024497948 0.0002652005008809363 0.000267764050157825 0.0002488539502124205 0.0002551197602302644 0.000295303136159608 0.0003290178707355802 0.0003867779579310346 0.0004555547815183697 0.0005416137326971845 0.000625475897506546 0.0006718024855287199 0.0006961439382863226 0.0007172937860848909 0.0007171995117985036 0.0007025287393104162 0.0006871616100603015 0.000650419352474276 0.0006209602772533919 0.0005868746914752408 0.0005761856239940797 0.0005855365097991073 0.0006054134743706607 0.0006454619358970264 0.0007028866326889299 0.0007806888647762659 0.000822226945873879 0.0008790095856581987 0.0009548313236383482 0.001012121155964728 0.001035680319931336 0.001030406744297961 0.0009758354537658703 0.0008554464717298296 0.0007361817663542591 0.0006196820100433625 0.0005583807693821864 0.000571354064366285 0.0006213523466697193 0.0007074501288005006 0.0008564828937716656 0.001007863016474597 0.001130987351527696 0.001281250129185769 0.001389350245308103 0.001470479573974332 0.001543704930528569 0.001555410794560944 0.001531394363834887 0.001490114661507714 0.001405270807169912 0.001312089019158298 0.001210613677564552 0.001092707546060794 0.001000679407785467 0.0008818221619807018 0.0007775394691744045 0.0007027627158963109 0.0006078660984573031 0.000534597495479118 0.0004934795110626265 0.0004708650906301616 0.0004495341063872209 0.0004551531490340077 0.0004900142937176715 0.0005383093164802969 0.000603317655045247 0.0006709962921592213 0.0007360628315969327 0.0007849711152884964 0.0008056540909816968 0.0007965798134060039 0.000779258470383954 0.0007389096824511003 0.0006749848938371232 0.0005960143606024314 0.00049407378603011 0.0004064572654023451 0.000320386070921443 0.0002344588678557023 0.0001878863422254417 0.0001643819608291412 0.0001296685790607518 0.0001112327955701267 0.0001189746129582092 0.0001196292706110302 0.0001106414381361493 0.000113949564989265 0.0001269254248804011 0.000122257356286084 0.0001372388125105794 0.0001636750239487874 0.0001875320324724492 0.0002267162760588951 0.0002526665586205469 0.0002636405310368628 0.000274331627790731 0.0002861738822980834 0.0002906911596356955 0.0003047322000871902 0.0003264057688551512 0.0003714124757418389 0.0004406418213749726 0.0005078784471340354 0.000600594800672577 0.0007018037456432339 0.0007841007737282728 0.0008547924134192688 0.0009095689814133239 0.0009397344198433432 0.0009480193252716988 0.0009291650300966141 0.0008838704404048497 0.0008127224793692449 0.0007154307983328389 0.0006116301200159011 0.0005101781526047185 0.0004127132318400751 0.0003319979542964823 0.0002860821491880682 0.0002500563490184256 0.0002217724458095814 0.0002391073092942146 0.0002753731712067281 0.0002970986813756304 0.0003141523386480819 0.0003234961169067191 0.0003235563379009124 0.0003148588847685941 0.0002722059220446591 0.0002152831436118294 0.0001791264427517463 0.0001484107844269434 0.0001258477694353638 0.0001276356087955284 0.0001611481391302664 0.0002328092015126938 0.0003146483534597321 0.0004049366284488059 0.000515541119297898 0.0006278320617335942 0.0007308920792511362 0.0007963231371937704 0.0008367582390177949 0.000856084224659261 0.0008134213275591343 0.0007279470267812722 0.0006212972022330388 0.0004918678731923973 0.0003513571295408855 0.0002274300947131321 0.000126009265634115 4.952203678213429e-05 5.024961716295127e-06 3.538818509299518e-06 5.102070582076996e-05 0.0001215619643926977 0.0002314452035966865 0.0003647207877911044 0.0005014886072902379 0.0006440612144425216 0.0007712153995398789 0.0008785166874477058 0.0009565650123854939 0.0009991649016365179 0.001000137248327646 0.0009780458869915582 0.0009324133330452072 0.0008653125079193493 0.0008018307451331798 0.000746647621318018 0.0007004172297637317 0.0006853703272953076 0.0006924927262763831 0.0006931453291674521 0.0007101214361108594 0.0007121788880774427 0.000704014950979915 0.0006972231165628779 0.000661654211634347 0.0006231865628459464 0.0005890158012063288 0.0005446800229664074 0.0005043751480265481 0.0004885372867673724 0.0004761823498486873 0.0004638037190751788 0.0004587034220581102 0.0004684001252653539 0.0004858979454010797 0.0004993895797658201 0.0005175977188382752 0.0005269773541343305 0.0005292033760978143 0.0005322207128124349 0.0005317635475002128 0.000523675449512398 0.000513803426036456 0.0005013700140284385 0.0004800892227209432 0.0004485558688712597 0.0004148377173810098 0.0003761847353904126 0.0003355248671444355 0.0003084406671027549 0.0002862572870604022 0.000270260451250159 0.0002673721567286339 0.0002810007495450609 0.000304884990166382 0.0003328960310700833 0.00036358009885258 0.0003975165871572802 0.000425258701401412 0.0004465585690774157 0.0004622641649603433 0.0004668087315020517 0.0004716258022734012 0.0004674556394527063 0.0004612992161328973 0.0004555272479616062 0.000454810249957407 0.0004645950604270157 0.0004727638664349478 0.000486455053090451 0.0005041051313799224 0.0005240387399286972 0.0005366426137323651 0.0005326203262494113 0.0005159892932585147 0.0004796269124398812 0.0004241895316775592 0.0003565185832637645 0.0002783857988869775 0.0002020713027294521 0.0001300149878038001 7.787515033943645e-05 4.94970529116387e-05 3.567320177887565e-05 5.198681974621122e-05 8.439260614281255e-05 0.0001233684249499196 0.0001696438030090706 0.0002130987320308694 0.0002483396512410884 0.000269119930618064 0.0002800989971601369 0.0002797524248574673 0.0002574810386944714 0.0002293068332902553 0.0001981874567952985 0.0001541458098186209 0.0001131985409445768 7.436668389413293e-05 3.914274819454482e-05 2.02910310075359e-05 1.214910078795737e-05 1.138159045954142e-05 2.303431628630914e-05 4.191084339680085e-05 7.153140827090229e-05 0.0001012747411089004 0.0001198264422032543 0.0001341681487126989 0.0001353721674033473 0.0001310955784948295 0.0001304604164937583 0.0001293962113881343 0.0001167532618894624 0.0001090067194513343 0.0001142849115928038 0.0001194268883117053 0.0001316378760800131 0.0001450923278130218 0.0001644147124457893 0.0001836754090288532 0.0001945597427125205 0.000198420646821421 0.0001926926553236415 0.0001774138786603597 0.0001604569345523672 0.0001441800101209615 0.0001197702730190544 0.0001047837385634294 9.626406072217448e-05 8.422482885728265e-05 8.141197975598381e-05 8.7319365554045e-05 9.4075039188646e-05 9.894340278646086e-05 0.0001025516069602838 0.0001072060248103339 0.0001098275912662369 0.0001104312822684126 0.000106515806645663 9.505250826889828e-05 8.723833080263867e-05 7.420695272211161e-05 5.781977436721884e-05 4.770388200482809e-05 3.7389171346018e-05 3.012154305643296e-05 3.024288241806269e-05 3.30459157472601e-05 3.42023945226418e-05 4.194241650880383e-05 5.275816447026444e-05 6.085367944553199e-05 6.930393501059805e-05 8.209630166614197e-05 9.587608125739296e-05 0.0001056747747162764 0.0001170129681552745 0.0001293030383250257 0.0001415291461137908 0.0001570034141396783 0.0001704401347270341 0.0001743894362264053 0.0001736521706833197 0.0001685794934648447 0.0001573246833069577 0.00013725374822175 0.0001119097915371812 8.838658249276298e-05 6.180780852724682e-05 3.467670361993845e-05 1.383091083546099e-05 -1.363194189371131e-06 -1.629614429158657e-05 -2.559556014458577e-05 -2.719609151945906e-05 -2.432568386408844e-05 -1.745355895723421e-05 -6.139147851498011e-06 9.390120446350515e-06 2.609404178225465e-05 4.505424718694725e-05 6.397168698635465e-05 8.388579609557507e-05 0.0001017868860228118 0.0001164777490003533 0.0001282916901414377 0.0001371895926370353 0.0001444545226667357 0.0001505912434581831 0.0001573044997290388 0.0001611393815082451 0.0001617032194688336 0.0001578219868614449 0.000153801972814461 0.0001435371988464706 0.0001284375906324499 0.0001171407871684956 0.0001046664881685255 9.474089964535937e-05 8.653490906422336e-05 8.178131856442878e-05 8.236867203976517e-05 8.670764514445867e-05 9.282321723585233e-05 9.949247921871623e-05 0.0001078643622955885 0.0001145773485240607 0.0001199864757482572 0.0001237937282219144 0.0001274951568358209 0.0001276193402990368 0.0001211159686312227 0.0001157727179778552 0.0001100627878797457 9.993747197784049e-05 8.855370570715271e-05 8.085052742218457e-05 7.795597606716331e-05 7.47608349460523e-05 7.602754602719387e-05 8.465588232787989e-05 9.340521285980456e-05 0.0001021842594143064 0.0001128586850331394 0.0001211256678148737 0.0001268741533262061 0.0001314146843973354 0.0001298558067129026 0.0001232907290105823 0.0001114408649087925 9.490108720790098e-05 7.524935743597891e-05 5.098405707491407e-05 2.533067638032283e-05 2.754137907668097e-06 -1.425766597021359e-05 -2.680377848432208e-05 -3.140205230802843e-05 -2.889508983840295e-05 -2.038060526743043e-05 -5.011952829637147e-06 1.151301392357218e-05 2.733281113424968e-05 4.16286613756742e-05 5.28271491118769e-05 5.894036887788697e-05 5.965124091807064e-05 5.995001465356243e-05 6.151519405194192e-05 6.038440324493523e-05 5.810382275274606e-05 5.745029328387439e-05 5.754247327156637e-05 5.656595617636194e-05 5.387673663540817e-05 5.012294778018432e-05 4.529266752036116e-05 4.11193488460899e-05 + + diff --git a/libcodec2-android/src/codec2/octave/fmfsk.m b/libcodec2-android/src/codec2/octave/fmfsk.m new file mode 100644 index 0000000..4b3cc91 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/fmfsk.m @@ -0,0 +1,346 @@ +% +% fmfsk.m +% Author: Brady O'Brien 3 Feb 2016 +% Copyright 2016 David Rowe +% +% All rights reserved. +% +% This program is free software; you can redistribute it and/or modify +% it under the terms of the GNU Lesser General Public License veRbion 2, as +% published by the Free Software Foundation. This program is +% distributed in the hope that it will be useful, but WITHOUT ANY +% WARRANTY; without even the implied warranty of MERCHANTABILITY or +% FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public +% License for more details. +% +% You should have received a copy of the GNU Lesser General Public License +% along with this program; if not, see . + +% mancyfsk.m modem, extracted and made suitable for C implementation + +fm; +pkg load signal; +pkg load parallel; +1; + +% Init fmfsk modem +%Fs is sample frequency +%Rb is pre-manchester bit rate +function states = fmfsk_init(Fs,Rb) + assert(mod(Fs,Rb*2)==0); + + %Current fixed processing buffer size, in non-ME bits + nbit = 96; + + states.Rb = Rb; + states.Rs = Rb*2; % Manchester-encoded bitrate + states.Fs = Fs; + states.Ts = Fs/states.Rs; + states.N = nbit*2*states.Ts; + states.nin = states.N; % Samples in the next demod cycle + states.nstash = states.Ts*2; % How many samples to stash away between proc cycles for timing adjust + states.nmem = states.N+(4*states.Ts); + states.nsym = nbit*2; + states.nbit = nbit; + + %tates.nsym = floor(states.Rs*.080); + %states.nbit = floor(states.Rb*.080) + %Old sample memory + + states.oldsamps = zeros(1,states.nmem); + + %Last sampled-stream output, for odd bitstream generation + states.lastint = 0; + + %Some stats + states.norm_rx_timing = 0; + +endfunction + +%Generate a stream of manchester-coded bits to be sent +% to any ordinary FM modulator or VCO or something +function tx = fmfsk_mod(states,inbits) + Ts = states.Ts; + tx = zeros(1,length(inbits)*2); + for ii = 1:length(inbits) + st = 1 + (ii-1)*Ts*2; + md = st+Ts-1; + en = md+Ts; + if inbits(ii)==0 + tx(st:md) = -ones(1,Ts); + tx(md+1:en) = ones(1,Ts); + else + tx(st:md) = ones(1,Ts); + tx(md+1:en) = -ones(1,Ts); + end + end +endfunction + +%Demodulate a bag of bits from the output of an FM demodulator +% This function produces nbits output bits and takes states.nin samples +function [rx_bits states] = fmfsk_demod(states,rx) + Ts = states.Ts; + Fs = states.Fs; + Rs = states.Rs; + nin = states.nin; + N = states.N; + nsym = states.nsym; + nbits = states.nsym/2; + nmem = states.nmem; + nstash = states.nstash; + + nold = nmem-nin; + ssamps = states.oldsamps; + + + %Shift in nin samples + ssamps(1:nold) = ssamps(nmem-nold+1:nmem); + ssamps(nold+1:nmem) = rx; + states.oldsamps = ssamps; + + rx_filt = zeros(1,(nsym+1)*Ts); + %Integrate Ts input samples at every offset + %This is the same thing as filtering with a filter of all ones + % out to Ts. + % It's implemented like this for ease of C-porting + for ii=(1:(nsym+1)*Ts) + st = ii; + en = st+Ts-1; + rx_filt(ii) = sum(ssamps(st:en)); + end + states.rx_filt = rx_filt; + % Fine timing estimation ------------------------------------------------------ + + % Estimate fine timing using line at Rs/2 that Manchester encoding provides + % We need this to sync up to Manchester codewords. + Np = length(rx_filt); + w = 2*pi*(Rs)/Fs; + x = (rx_filt .^ 2) * exp(-j*w*(0:Np-1))'; + norm_rx_timing = angle(x)/(2*pi)-.42; + + rx_timing = round(norm_rx_timing*Ts); + + %If rx timing is too far out, ask for more or less sample the next time + % around to even it all out + next_nin = N; + if norm_rx_timing > -.2; + next_nin += Ts/2; + end + if norm_rx_timing < -.65; + next_nin -= Ts/2; + end + + states.nin = next_nin; + states.norm_rx_timing = norm_rx_timing; + %'Even' and 'Odd' manchester bitstream. + % We'll figure out which to produce later + rx_even = zeros(1,nbits); + rx_odd = zeros(1,nbits); + apeven = 0; + apodd = 0; + + sample_offset = (Ts/2)+Ts+rx_timing-1; + + symsamp = zeros(1,nsym); + + % Figure out the bits of the 'even' and 'odd' ME streams + % Also sample rx_filt offset by what fine timing determined along the way + % Note: ii is a zero-indexed array pointer, for less mind-breaking c portage + lastv = states.lastint; + for ii = (0:nsym-1) + currv = rx_filt(sample_offset+(ii*Ts)+1); + mdiff = lastv-currv; + lastv = currv; + mbit = mdiff>0; + symsamp(ii+1) = currv; + if mod(ii,2)==1 + apeven += abs(mdiff); + rx_even( floor(ii/2)+1 ) = mbit; + else + apodd += abs(mdiff); + rx_odd( floor(ii/2)+1 ) = mbit; + end + end + states.symsamp = symsamp; + % Decide on the correct ME alignment + if(apeven>apodd) + rx_bits = rx_even; + else + rx_bits = rx_odd; + end + + states.lastint = lastv; +endfunction + +% run_sim copypasted from fsk_horus.m +% simulation of tx and rx side, add noise, channel impairments ---------------------- + +function fmfsk_run_sim(EbNodB,timing_offset=0,de=0,of=0,hpf=0) + test_frame_mode = 2; + frames = 70; + %EbNodB = 3; + %timing_offset = 0.0; % see resample() for clock offset below + %fading = 0; % modulates tx power at 2Hz with 20dB fade depth, + % to simulate balloon rotating at end of mission + df = 0; % tx tone freq drift in Hz/s + dA = 1; % amplitude imbalance of tones (note this affects Eb so not a gd idea) + + more off + rand('state',1); + randn('state',1); + + Fs = 48000; + Rbit = 2400; + + % ---------------------------------------------------------------------- + + fm_states.pre_emp = 0; + fm_states.de_emp = de; + fm_states.Ts = Fs/(Rbit*2); + fm_states.Fs = Fs; + fm_states.fc = Fs/4; + fm_states.fm_max = 3E3; + fm_states.fd = 5E3; + fm_states.output_filter = of; + fm_states = analog_fm_init(fm_states); + + % ---------------------------------------------------------------------- + + states = fmfsk_init(Fs,Rbit); + + states.verbose = 0x1; + Rs = states.Rs; + nsym = states.nsym; + Fs = states.Fs; + nbit = states.nbit; + + EbNo = 10^(EbNodB/10); + variance = states.Fs/(states.Rb*EbNo); + + % set up tx signal with payload bits based on test mode + + if test_frame_mode == 1 + % test frame of bits, which we repeat for convenience when BER testing + test_frame = round(rand(1, states.nbit)); + tx_bits = []; + for i=1:frames+1 + tx_bits = [tx_bits test_frame]; + end + end + if test_frame_mode == 2 + % random bits, just to make sure sync algs work on random data + tx_bits = round(rand(1, states.nbit*(frames+1))); + end + if test_frame_mode == 3 + % repeating sequence of all symbols + % great for initial test of demod if nothing else works, + % look for this pattern in rx_bits + + % ...10101... + tx_bits = zeros(1, states.nbit*(frames+1)); + tx_bits(1:2:length(tx_bits)) = 1; + + end + + load fm_radio_filt_model.txt + + [b, a] = cheby1(4, 1, 300/Fs, 'high'); % 300Hz HPF to simulate FM radios + + tx_pmod = fmfsk_mod(states, tx_bits); + tx = analog_fm_mod(fm_states, tx_pmod); + + tx = tx(10:length(tx)); + + if(timing_offset>0) + tx = resample(tx, 1000,1001); % simulated 1000ppm sample clock offset + end + + + noise = sqrt(variance)*randn(length(tx),1); + rx = tx + noise'; + + %Demod by analog fm + rx = analog_fm_demod(fm_states, rx); + + %High-pass filter to simulate the FM radios + if hpf>0 + printf("high-pass filtering!\n") + rx = filter(b,a,rx); + end + rx = filter(filt,1,rx); + + figure(4) + title("Spectrum of rx-ed signal after FM demod and FM radio channel"); + plot(20*log10(abs(fft(rx)))) + figure(5) + title("Time domain of rx-ed signal after FM demod and FM radio channel"); + plot(rx) + %rx = real(rx); + %b1 = fir2(100, [0 4000 5200 48000]/48000, [1 1 0.5 0.5]); + %rx = filter(b1,1,rx); + %[b a] = cheby2(6,40,[3000 6000]/(Fs/2)); + %rx = filter(b,a,rx); + %rx = sign(rx); + %rx(find (rx > 1)) = 1; + %rx(find (rx < -1)) = -1; + + % dump simulated rx file + + timing_offset_samples = round(timing_offset*states.Ts); + st = 1 + timing_offset_samples; + rx_bits_buf = zeros(1,2*nbit); + x_log = []; + timing_nl_log = []; + norm_rx_timing_log = []; + f_int_resample_log = []; + f_log = []; + EbNodB_log = []; + rx_bits_log = []; + rx_bits_sd_log = []; + + for f=1:frames + + % extract nin samples from input stream + + nin = states.nin; + en = st + states.nin - 1; + sf = rx(st:en); + st += nin; + + % demodulate to stream of bits + + [rx_bits states] = fmfsk_demod(states, sf); + + rx_bits_buf(1:nbit) = rx_bits_buf(nbit+1:2*nbit); + rx_bits_buf(nbit+1:2*nbit) = rx_bits; + rx_bits_log = [rx_bits_log rx_bits]; + + end + + ber = 1; + ox = 1; + rx_bits = rx_bits_log; + bitcnt = length(tx_bits); + for offset = (1:100) + nerr = sum(xor(rx_bits(offset:length(rx_bits)),tx_bits(1:length(rx_bits)+1-offset))); + bern = nerr/(bitcnt-offset); + if(bern < ber) + ox = offset; + best_nerr = nerr; + end + ber = min([ber bern]); + end + offset = ox; + figure(3); + plot(xor(rx_bits(ox:length(rx_bits)),tx_bits(1:length(rx_bits)+1-ox))) + + printf("BER: %f Errors: %d Bits:%d\n",ber,best_nerr,bitcnt-offset); + + endfunction + + +% demodulate a file of 8kHz 16bit short samples -------------------------------- + + + + diff --git a/libcodec2-android/src/codec2/octave/fsk4_dmr.m b/libcodec2-android/src/codec2/octave/fsk4_dmr.m new file mode 100644 index 0000000..8891a45 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/fsk4_dmr.m @@ -0,0 +1,540 @@ +% fsk4.m +% +% Brady O'Brien October 2015 +% +% 4FSK modem attempt from the DMR spec + +graphics_toolkit("gnuplot"); + +fm; % analog FM modulator functions + +pkg load signal; + +% Init function for modem ------------------------------------------------------------ + +function fsk4_states = fsk4_init(fsk4_states,fsk4_info) + Fs = fsk4_states.Fs = 48000; %Sample rate + Rs = fsk4_states.Rs = fsk4_info.rs; %Symbol rate + M = fsk4_states.M = fsk4_states.Fs/fsk4_states.Rs; %Samples per symbol + + % Set up 4FSK raised cosine filter. This probably screws up perf if we were using + % optimal mod and dmeods but helps performance when using nasty old analog FM mods + % and demods + + empty_filter = [zeros(1,99) 1]; + + rf = (0:(Fs/2)); + %If there's no filter with this modem configuration, don't bother generating one + if fsk4_info.no_filter + fsk4_states.tx_filter = empty_filter; + fsk4_states.rx_filter = empty_filter; + else + fsk4_states.tx_filter = fir2(400 ,rf/(Fs/2),fsk4_info.tx_filt_resp(rf)); + fsk4_states.rx_filter = fir2(400 ,rf/(Fs/2),fsk4_info.rx_filt_resp(rf)); + endif + + %fsk4_states.tx_filter = fsk4_states.rx_filter = [zeros(1,99) 1]; + %Set up the 4FSK symbols + fsk4_states.symmap = fsk4_info.syms / fsk4_info.max_dev; + + fm_states.Ts = M; + fm_states.Fs = Fs; + fm_states.fc = 0; + fm_states.fm_max = fsk4_info.max_dev*2; + fm_states.fd = fsk4_info.max_dev; + fm_states.pre_emp = fm_states.de_emp = 0; + fm_states.output_filter = 0; + fm_states.ph_dont_limit = 1; + fsk4_states.fm_states = analog_fm_init(fm_states); + fsk4_states.modinfo = fsk4_info; + fsk4_states.verbose = 0; +endfunction + +%Integrate over data and dump every M samples +function d = idmp(data, M) + d = zeros(1,length(data)/M); + for i = 1:length(d) + d(i) = sum(data(1+(i-1)*M:i*M)); + end +endfunction + + +% DMR modulator ---------------------------------------------------------- + +function [tx, tx_filt, tx_stream] = fsk4_mod(fsk4_states, tx_bits) + verbose = fsk4_states.verbose + + hbits = tx_bits(1:2:length(tx_bits)); + lbits = tx_bits(2:2:length(tx_bits)); + %Pad odd bit lengths + if(length(hbits)!=length(lbits)) + lbits = [lbits 0]; + end + tx_symbols = lbits + hbits*2 + 1; + M = fsk4_states.M; + nsym = length(tx_symbols); + nsam = nsym*M; + + tx_stream = zeros(1,nsam); + for i=1:nsym + tx_stream(1+(i-1)*M:i*M) = fsk4_states.symmap(tx_symbols(i)); + end + tx_filt = filter(fsk4_states.tx_filter, 1, tx_stream); + tx = analog_fm_mod(fsk4_states.fm_states, tx_filt); + + if verbose + figure(10); + plot(20*log10(abs(fft(tx)))) + title("Spectrum of modulated 4FSK") + endif + +endfunction + + +% Integrate and Dump 4FSK demod ---------------------------------------------------- + +function bits = fsk4_demod_thing(fsk4_states, rx) + + M = fsk4_states.M; + Fs = fsk4_states.Fs; + verbose = fsk4_states.verbose; + t = (0:length(rx)-1); + symup = fsk4_states.modinfo.syms; + + % Integrator is like an FIR filter with rectangular window coeffs. + % This has some nasty side lobes so lets limit the overall amount + % of noise getting in. tx filter just happens to work, but I imagine + % other LPF would as well. + + Fs = fsk4_states.Fs; + rf = (0:(Fs/2)); + rx_filter_a = fir1(100 ,.2); + rx_filter_b = fsk4_states.rx_filter; + rx_filter_n = [zeros(1,99) 1]; + + rx = filter(rx_filter_b, 1, rx); + + sym1m = exp(-j*2*pi*(symup(1)/Fs)*t).*rx; + sym2m = exp(-j*2*pi*(symup(2)/Fs)*t).*rx; + sym3m = exp(-j*2*pi*(symup(3)/Fs)*t).*rx; + sym4m = exp(-j*2*pi*(symup(4)/Fs)*t).*rx; + + % this puppy found by experiment between 1 and M. Will vary with different + % filter impulse responses, as delay will vary. f you add M to it coarse + % timing will adjust by 1. + + fine_timing = 54; + + sym1m = idmp(sym1m(fine_timing:length(sym1m)),M); sym1m = (real(sym1m).^2+imag(sym1m).^2); + sym2m = idmp(sym2m(fine_timing:length(sym2m)),M); sym2m = (real(sym2m).^2+imag(sym2m).^2); + sym3m = idmp(sym3m(fine_timing:length(sym3m)),M); sym3m = (real(sym3m).^2+imag(sym3m).^2); + sym4m = idmp(sym4m(fine_timing:length(sym4m)),M); sym4m = (real(sym4m).^2+imag(sym4m).^2); + + + figure(2); + nsym = 500; + %subplot(411); plot(sym1m(1:nsym)) + %subplot(412); plot(sym2m(1:nsym)) + %subplot(413); plot(sym3m(1:nsym)) + %subplot(414); plot(sym4m(1:nsym)) + plot((1:nsym),sym1m(1:nsym),(1:nsym),sym2m(1:nsym),(1:nsym),sym3m(1:nsym),(1:nsym),sym4m(1:nsym)) + + [x iv] = max([sym1m; sym2m; sym3m; sym4m;]); + bits = zeros(1,length(iv*2)); + figure(3); + hist(iv); + for i=1:length(iv) + bits(1+(i-1)*2:i*2) = [[0 0];[0 1];[1 0];[1 1]](iv(i),(1:2)); + end +endfunction + +function dat = bitreps(in,M) + dat = zeros(1,length(in)*M); + for i=1:length(in) + dat(1+(i-1)*M:i*M) = in(i); + end +endfunction + +% Minimal Running Disparity, 4 symbol encoder +% This is a simple 1 bit to 1 symbol encoding for 4fsk modems built +% on old fashoned FM radios. +function syms = mrd4(bits) + syms = zeros(1,length(bits)); + rd=0; + lastsym=0; + for n = (1:length(bits)) + bit = bits(n); + sp = [1 3](bit+1); %Map a bit to a +1 or +3 + [x,v] = min(abs([rd+sp rd-sp])); %Select +n or -n, whichever minimizes disparity + ssel = [sp -sp](v); + if(ssel == lastsym)ssel = -ssel;endif %never run 2 of the same syms in a row + syms(n) = ssel; %emit the symbol + rd = rd + ssel; %update running disparity + lastsym = ssel; %remember this symbol for next time + end +endfunction + +% Minimal Running Disparity, 8 symbol encoder +% This is a simple 2 bit to 1 symbol encoding for 8fsk modems built +% on old fashoned FM radios. +function syms = mrd8(bits) + bitlen = length(bits); + if mod(bitlen,2) == 1 + bits = [bits 0] + endif + + syms = zeros(1,length(bits)*.5); + rd=0; + lastsym=0; + for n = (1:2:length(bits)) + bit = (bits(n)*2)+bits(n+1); + sp = [1 3 7 5](bit+1); %Map a bit to a +1 or +3 + [x,v] = min(abs([rd+sp rd-sp])); %Select +n or -n, whichever minimizes disparity + ssel = [sp -sp](v); + if(ssel == lastsym)ssel = -ssel;endif %never run 2 of the same syms in a row + syms((n+1)/2) = ssel; %emit the symbol + rd = rd + ssel; %update running disparity + lastsym = ssel; %remember this symbol for next time + end +endfunction + +% "Manchester 4" encoding +function syms = mane4(bits) + syms = zeros(1,floor(bits/2)*2); + for n = (1:2:length(bits)) + bit0 = bits(n); + bit1 = bits(n+1); + sel = 2*bit0+bit1+1; + syms(n:n+1) = [[3 -3];[-3 3];[1 -1];[-1 1]]( sel,(1:2) ); + end +endfunction + +function out = fold_sum(in,l) + sublen = floor(length(in)/l); + out = zeros(1,l); + for i=(1:sublen) + v = in(1+(i-1)*l:i*l); + out = out + v; + end +endfunction + +function [bits err rxphi] = fsk4_demod_fmrid(fsk4_states, rx, enable_fine_timing = 0) + %Demodulate fsk signal with an analog fm demod + rxd = analog_fm_demod(fsk4_states.fm_states,rx); + + M = fsk4_states.M; + verbose = fsk4_states.verbose; + %This is the ideal fine timing, assuming the same offset in nfbert + fine_timing = 61; + + %This is meant to be adjusted by the fine timing estimator. comment out for + %ideal timing + %fine_timing = 59; + + %RRC filter to get rid of some of the noise + rxd = filter(fsk4_states.rx_filter, 1, rxd); + + %Try and figure out where sampling should happen over 30 symbol periods + diffsel = fold_sum(abs(diff( rxd(3001:3001+(M*30)) )),10); + + if verbose + figure(11); + plot(diffsel); + title("Fine timing estimation"); + endif + + %adjust fine timing + [v iv] = min(diffsel); + if enable_fine_timing + fine_timing = 59 + iv; + endif + rxphi = iv; + + %sample symbols + sym = rxd(fine_timing:M:length(rxd)); + + if verbose + figure(4) + plot(sym(1:1000)); + title("Sampled symbols") + endif + %eyediagram(afsym,2); + % Demod symbol map. I should probably figure a better way to do this. + % After sampling, the furthest symbols tend to be distributed about .80 + + % A little cheating to demap the symbols + % Take a histogram of the sampled symbols, find the center of the largest distribution, + % and correct the symbol map to match it + [a b] = hist(abs(sym),50); + [a ii] = max(a); + %grmax = abs(b(ii)); + %grmax = (grmax<.65)*.65 + (grmax>=.65)*grmax; + grmax = .84; + dmsyms = rot90(fsk4_states.symmap*grmax) + (dmsyms(2)+dmsyms(1))/2 + + if verbose + figure(2) + hist(abs(sym),200); + title("Sampled symbol histogram") + endif + + %demap the symbols + [err, symout] = min(abs(sym-dmsyms)); + + if verbose + figure(3) + hist(symout); + title("De-mapped symbols") + endif + + bits = zeros(1,length(symout)*2); + %Translate symbols back into bits + + for i=1:length(symout) + bits(1+(i-1)*2:i*2) = [[1 1];[1 0];[0 1];[0 0]](symout(i),(1:2)); + end +endfunction + +% Frequency response of the DMR raised cosine filter +% from ETSI TS 102 361-1 V2.2.1 page 111 +dmr.tx_filt_resp = @(f) sqrt(1.0*(f<=1920) - cos((pi*f)/1920).*1.0.*(f>1920 & f<=2880)); +dmr.rx_filt_resp = dmr.tx_filt_resp; +dmr.max_dev = 1944; +dmr.syms = [-1944 -648 1944 648]; +dmr.rs = 4800; +dmr.no_filter = 0; +dmr.demod_fx = @fsk4_demod_fmrid; +global dmr_info = dmr; + + +% No-filter 4FSK 'ideal' parameters +nfl.tx_filt_resp = @(f) 1; +nfl.rx_filt_resp = nfl.tx_filt_resp; +nfl.max_dev = 7200; +%nfl.syms = [-3600 -1200 1200 3600]; +nfl.syms = [-7200,-2400,2400,7200]; +nfl.rs = 4800; +nfl.no_filter = 1; +nfl.demod_fx = @fsk4_demod_thing; +global nflt_info = nfl; + +%Some parameters for the NXDN filters +nxdn_al = .2; +nxdn_T = 416.7e-6; +nxdn_fl = ((1-nxdn_al)/(2*nxdn_T)); +nxdn_fh = ((1+nxdn_al)/(2*nxdn_T)); + +%Frequency response of the NXDN filters +% from NXDN TS 1-A V1.3 page 13 +% Please note : NXDN not fully implemented or tested +nxdn_H = @(f) 1.0*(fnxdn_fl); +nxdn_P = @(f) (f<=nxdn_fh & f>0).*((sin(pi*f*nxdn_T))./(.00001+(pi*f*nxdn_T))) + 1.0*(f==0); +nxdn_D = @(f) (f<=nxdn_fh & f>0).*((pi*f*nxdn_T)./(.00001+sin(pi*f*nxdn_T))) + 1.0*(f==0); + +nxdn.tx_filt_resp = @(f) nxdn_H(f).*nxdn_P(f); +nxdn.rx_filt_resp = @(f) nxdn_H(f).*nxdn_D(f); +nxdn.rs = 4800; +nxdn.max_dev = 1050; +nxdn.no_filter = 0; +nxdn.syms = [-1050,-350,350,1050]; +nxdn.demod_fx = @fsk4_demod_fmrid; +global nxdn_info = nxdn; + +% Bit error rate test ---------------------------------------------------------- +% Params - aEsNodB - EbNo in decibels +% - timing_offset - how far the fine timing is offset +% - bitcnt - how many bits to check +% - demod_fx - demodulator function +% Returns - ber - teh measured BER +% - thrcoh - theory BER of a coherent demod +% - thrncoh - theory BER of non-coherent demod +function [ber thrcoh thrncoh] = nfbert(aEsNodB,modem_config, bitcnt=100000, timing_offset = 10) + + rand('state',1); + randn('state',1); + + %How many bits should this test run? + bitcnt = 120000; + + test_bits = [zeros(1,100) rand(1,bitcnt)>.5]; %Random bits. Pad with zeros to prime the filters + fsk4_states.M = 1; + fsk4_states = fsk4_init(fsk4_states,modem_config); + + %Set this to 0 to cut down on the plotting + fsk4_states.verbose = 1; + Fs = fsk4_states.Fs; + Rb = fsk4_states.Rs * 2; % Multiply symbol rate by 2, since we have 2 bits per symbol + + tx = fsk4_mod(fsk4_states,test_bits); + + %add noise here + %shamelessly copied from gmsk.m + EsNo = 10^(aEsNodB/10); + EbNo = EsNo + variance = Fs/(Rb*EbNo); + nsam = length(tx); + noise = sqrt(variance/2)*(randn(1,nsam) + j*randn(1,nsam)); + rx = tx*exp(j*pi/2) + noise; + + rx = rx(timing_offset:length(rx)); + + rx_bits = modem_config.demod_fx(fsk4_states,rx); + ber = 1; + + %thing to account for offset from input data to output data + %No preamble detection yet + ox = 1; + for offset = (1:100) + nerr = sum(xor(rx_bits(offset:length(rx_bits)),test_bits(1:length(rx_bits)+1-offset))); + bern = nerr/(bitcnt-offset); + if(bern < ber) + ox = offset; + best_nerr = nerr; + end + ber = min([ber bern]); + end + offset = ox; + printf("\ncoarse timing: %d nerr: %d\n", offset, best_nerr); + + % Coherent BER theory + thrcoh = erfc(sqrt(EbNo)); + + % non-coherent BER theory calculation + % It was complicated, so I broke it up + + ms = 4; + ns = (1:ms-1); + as = (-1).^(ns+1); + bs = (as./(ns+1)); + + cs = ((ms-1)./ns); + + ds = ns.*log2(ms); + es = ns+1; + fs = exp( -(ds./es)*EbNo ); + + thrncoh = ((ms/2)/(ms-1)) * sum(bs.*((ms-1)./ns).*exp( -(ds./es)*EbNo )); + +endfunction + +% RX fine timing estimation playground +function rxphi = fine_ex(timing_offset = 1) + global dmr_info; + global nxdn_info; + global nflt_info; + + rand('state',1); + randn('state',1); + + bitcnt = 12051; + test_bits = [zeros(1,100) rand(1,bitcnt)>.5]; %Random bits. Pad with zeros to prime the filters + t_vec = [0 0 1 1]; + %test_bits = repmat(t_vec,1,ceil(24000/length(t_vec))); + + + fsk4_states.M = 1; + fsk4_states = fsk4_init(fsk4_states,dmr_info); + Fs = fsk4_states.Fs; + Rb = fsk4_states.Rs * 2; %Multiply symbol rate by 2, since we have 2 bits per symbol + + tx = fsk4_mod(fsk4_states,test_bits); + + %add noise here + %shamelessly copied from gmsk.m + %EsNo = 10^(aEsNodB/10); + %EbNo = EsNo + %variance = Fs/(Rb*EbNo); + %nsam = length(tx); + %noise = sqrt(variance/2)*(randn(1,nsam) + j*randn(1,nsam)); + %rx = tx*exp(j*pi/2) + noise; + rx = tx; + rx = rx(timing_offset:length(rx)); + + [rx_bits biterr rxphi] = fsk4_demod_fmrid(fsk4_states,rx); + ber = 1; + + %thing to account for offset from input data to output data + %No preamble detection yet + ox = 1; + for offset = (1:100) + nerr = sum(xor(rx_bits(offset:length(rx_bits)),test_bits(1:length(rx_bits)+1-offset))); + bern = nerr/(bitcnt-offset); + if(bern < ber) + ox = offset; + best_nerr = nerr; + end + ber = min([ber bern]); + end + offset = ox; + printf("\ncoarse timing: %d nerr: %d\n", offset, best_nerr); + +endfunction + +%Run over a wide range of offsets and make sure fine timing makes sense +function fsk4_rx_phi(socket) + %pkg load parallel + offrange = [100:200]; + [a b c phi] = pararrayfun(1.25*nproc(),@nfbert,10*length(offrange),offrange); + + close all; + figure(1); + clf; + plot(offrange,phi); +endfunction + + +% Run this function to compare the theoretical 4FSK modem performance +% with our DMR modem simulation + +function fsk4_ber_curves + global dmr_info; + global nxdn_info; + global nflt_info; + + EbNodB = 1:20; + bers_tco = bers_real = bers_tnco = bers_idealsim = ones(1,length(EbNodB)); + + %vectors of the same param to pass into pararrayfun + dmr_infos = repmat(dmr_info,1,length(EbNodB)); + nflt_infos = repmat(nflt_info,1,length(EbNodB)); + thing = @fsk4_demod_thing; + + % Lovely innovation by Brady to use all cores and really speed up the simulation + + %try + pkg load parallel + bers_idealsim = pararrayfun(floor(1.25*nproc()),@nfbert,EbNodB,nflt_infos); + [bers_real,bers_tco,bers_tnco] = pararrayfun(floor(1.25*nproc()),@nfbert,EbNodB,dmr_infos); + %catch + % printf("You should install package parallel. It'll make this run way faster\n"); + % for ii=(1:length(EbNodB)); + %[bers_real(ii),bers,tco(ii),bers_tnco(ii)] = nfbert(EbNodB(ii)); + % end + %end_try_catch + + close all + figure(1); + clf; + semilogy(EbNodB, bers_tnco,'r;4FSK non-coherent theory;') + hold on; + + semilogy(EbNodB, bers_tco,'b;4FSK coherent theory;') + semilogy(EbNodB, bers_real ,'g;4FSK DMR simulation;') + semilogy(EbNodB, bers_idealsim, 'v;FSK4 Ideal Non-coherent simulation;') + hold off; + grid("minor"); + axis([min(EbNodB) max(EbNodB) 1E-5 1]) + legend("boxoff"); + xlabel("Eb/No (dB)"); + ylabel("Bit Error Rate (BER)") + +endfunction + + + + + + + + diff --git a/libcodec2-android/src/codec2/octave/fsk_basic.m b/libcodec2-android/src/codec2/octave/fsk_basic.m new file mode 100644 index 0000000..753f4ae --- /dev/null +++ b/libcodec2-android/src/codec2/octave/fsk_basic.m @@ -0,0 +1,60 @@ +% fsk_basic.m +% David Rowe 30 sep 2016 +% +% Basic non-coherent FSK modem simulation to illustrate principles +% and compare to ideal + +rand('seed',1); +randn('seed',1); + +Fs = 9600; % sample rate +f1 = 1200; +f2 = 2400; +Rs = 1200; % symbol rate +Ts = Fs/Rs; % length of each symbol in samples +Nbits = 10000; +EbNodB = 9; + +tx_bits = round(rand(1,Nbits)); + +% continuous phase FSK modulator + +w1 = 2*pi*f1/Fs; +w2 = 2*pi*f2/Fs; +tx_phase = 0; +tx = zeros(1,Ts*Nbits); + +for i=1:Nbits + for k=1:Ts + if tx_bits(i) + tx_phase += w2; + else + tx_phase += w1; + end + tx((i-1)*Ts+k) = exp(j*tx_phase); + end +end + +% AWGN channel noise + +EbNo = 10^(EbNodB/10); +variance = Fs/(Rs*EbNo); +noise = sqrt(variance/2)*(randn(1,Nbits*Ts) + j*randn(1,Nbits*Ts)); +rx = tx + noise; + +% integrate and dump demodulator + +rx_bits = zeros(1,Nbits); +for i=1:Nbits + arx_symb = rx((i-1)*Ts + (1:Ts)); + filt1 = sum(exp(-j*w1*(1:Ts)) .* arx_symb); + filt2 = sum(exp(-j*w2*(1:Ts)) .* arx_symb); + rx_bits(i) = filt2 > filt1; +end + +Nerrors = sum(xor(tx_bits, rx_bits)); +ber = Nerrors/Nbits; +printf("EbNodB: %4.1f Nerrors: %d BER: %1.3f\n", EbNodB, Nerrors, ber); + + + diff --git a/libcodec2-android/src/codec2/octave/fsk_cml.m b/libcodec2-android/src/codec2/octave/fsk_cml.m new file mode 100644 index 0000000..b9288fc --- /dev/null +++ b/libcodec2-android/src/codec2/octave/fsk_cml.m @@ -0,0 +1,132 @@ +% Test MFSK at symbol level in CML using RA LDPC codes, Bill, June 2020 +% Simulate in AWGM and plot BERs. Assumes that CML is installed! +% +% If required setup numb of codewords (Ncw) and channel bits/sym (bps, 1 to 4) +% may also select FEC code with Ctype (1 to 3); use plt to for debug plots of LLR values + +% July 1 version allows M=8 and pads required vectors if required to makeup 3rd bit + +ldpc; + +%rand('seed',1); +%randn('seed',1); +format short g +more off +init_cml('~/cml/'); + +if exist('Ncw')==0, Ncw=100, end %setup defaults +if exist('plt')==0, plt=0; end +if exist('bps')==0, bps=4; end +if exist('Ctype')==0, Ctype=1, end + +if Ctype==1 + load H_256_768_22.txt; HRA = H_256_768_22; % rate 1/3 +elseif Ctype==2 + load H_256_512_4.mat; HRA=H; % K=256, rate 1/2 code + % above code might be improved -- but still works better than rate 1/3 +elseif Ctype==3 + load HRAa_1536_512.mat; % rate 3/4, N=2k code +else + error('bad Ctype'); +end + +M=2^bps; nos =0; clear res +modulation = 'FSK'; mod_order=M; mapping = 'gray'; +code_param = ldpc_init_user(HRA, modulation, mod_order, mapping); + +[Nr Nc] = size(HRA); +Nbits = Nc - Nr; +Krate = (Nc-Nr)/Nc +framesize = Nc; +%{ +[H_rows, H_cols] = Mat2Hrows(HRA); +code_param.H_rows = H_rows; +code_param.H_cols = H_cols; +code_param.P_matrix = []; +%} + + +S =CreateConstellation('FSK', M); +if M==2, Ebvec=[7:0.2: 8.7], end +if M==4, Ebvec=[4:0.25: 7], end +if M==8, Ebvec =[3.5: 0.25: 5.5]; end +if M==16, Ebvec=[2.5:0.25:4.8]; end + +disp(['Symbol-based ' num2str(M) 'FSK sim with K=' ... + num2str(Nbits) ', code rate=' num2str(Krate) ', #CWs=' num2str(Ncw)]) + + + +% if M=8, for 3 bits/symbol, may need to pad codeword with bits ... +if floor(Nc/bps)*bps ~= Nc + Npad = ceil(Nc/bps) *bps-Nc + disp('padding codeword') +else + Npad=0; +end + +for Eb = Ebvec + + Ec = Eb + 10*log10(Krate); + Es = Ec + 10*log10(bps); + Eslin = 10^(Es/10); %Es/N0 = 1/2k_n^2 + + Terrs =0; + for nn = 1:Ncw + + txbits = randi(2,1,Nbits) -1; + + codeword = LdpcEncode( txbits, code_param.H_rows, code_param.P_matrix ); + code_param.code_bits_per_frame = length( codeword ); + code_param.data_bits_per_frame = length(txbits); + Nsymb = (code_param.code_bits_per_frame+Npad)/bps; + + if Npad; codeword = [codeword zeros(1,Npad)]; end + Tx = Modulate(codeword, S); + + kn = sqrt(1/(2*Eslin)); + Rx = Tx + kn * (randn(size(Tx)) + j*randn(size(Tx))); + + SNRlin = Eslin; % Valenti calls this SNR, but seems to be Es/N0 + symL = DemodFSK(Rx, SNRlin, 2); %demod type is nonCOH, without estimate amplitudes + bitL = Somap(symL); + + if Npad, bitL(end-Npad+1:end)=[]; end + if plt>0, figure(110); hist(bitL); title('bit LLRs') + figure(111); hist(bitL); title('Sym Ls'), pause, + end + max_it =100; decoder_type =0; + + [x_hat, PCcnt] = MpDecode( -bitL, code_param.H_rows, code_param.H_cols, ... + max_it, decoder_type, 1, 1); + Niters = sum(PCcnt~=0); + detected_data = x_hat(Niters,:); + error_positions = xor( detected_data(1:code_param.data_bits_per_frame), txbits ); + + Nerrs = sum( error_positions); + if plt>1, figure(121); plot(error_positions); Nerrs, end + Terrs = Terrs + Nerrs; + end + + BER = Terrs/ (Ncw*Nbits); + + %HDs = (sign(bitL)+1)/2; + %NerrsHD = sum(codeword~=HDs); + %BER_HD = Nerrs/Nbits; + + nos = nos+1; + disp('Eb Nerrs BER') + res(nos, :) = [Eb, Terrs, BER] + +end +figure(91) +semilogy(res(:,1), res(:,3), '-x'); grid on; hold on; +%semilogy(res(:,1), berawgn(res(:,1), 'fsk', M, 'noncoherent'), 'g'); +title([num2str(M) 'FSK BER with LDPC FEC']) +xlabel('Eb/N0'); ylabel('BER') + + + + + + diff --git a/libcodec2-android/src/codec2/octave/fsk_cml_sam.m b/libcodec2-android/src/codec2/octave/fsk_cml_sam.m new file mode 100644 index 0000000..08c701d --- /dev/null +++ b/libcodec2-android/src/codec2/octave/fsk_cml_sam.m @@ -0,0 +1,376 @@ +%fsk_llr_sam Test MFSK using David's sample-based mod/demod with CML LLR routines +% using 2k rate 3/4 RA LDPC code. Bill, July 2020 +% +%LLR conversion options: (Ltype) +% 1 David's original M=2 SD to LLR routine +% 2 Bill's pdf-based M=2 or 4 SD to LLR +% 3 Some simple HD conversions +% 4 CML approach using symbol likelihoods, then converted to bit LLRs +% +% Results from this sim are stored in "res" -- use fsk_llr_plot to see BER figs +% Use "plt" to see some useful plots (for selected Ltypes) : +% eg 1 is SD pdf histograms; 2 is Rx PSD; 3 is bit LLR histograms +% +% Adjust Evec and Nbits as required before running. + +#{ + Example 1 2FSK: + octave:4> fsk_cml_sam + octave:5> fsk_llr_plot + + Example 2 4FSK: + octave:4> M=4; fsk_cml_sam + octave:4> fsk_llr_plot +#} + +ldpc; + +% define Rician pdf +% note that Valenti uses an approximation that avoids Bessel evaluation +function y = rice(x,v,s) + s2 = s*s; + y = (x / s2) .* exp(-0.5 * (x.^2 + v.^2)/s2) .* besseli(0, x*v/s2); +endfunction + +function plot_pdf(v,s) + x=(0:0.1:2*v); + y= rice(x, v, s); + figure(201); hold on + plot(x,y,'g'); + %title('Rician pdf: signal carrier') + y= rice(x, 0, s); + plot(x,y,'b'); + title('Rician pdf: signal and noise-only carriers') + pause(0.01); +endfunction + +% single Eb/No point simulation --------------- +function [raw_ber rx_filt rx_bits tx_symbols demapper sig_est SNRest v_est] = ... + run_single(tx_bits, M, EcNodB, plt) + % Ec/N0 is per channel bit + bps = log2(M); % bits per symbol + Ts = 16; % length of each symbol in samples + + if length(tx_bits)==1 + Nbits = tx_bits; + tx_bits = randi(2,1,Nbits)-1; % make random bits + end + + Nbits = length(tx_bits); + Nsymbols = Nbits/log2(M); + tx_symbols = zeros(1,Nsymbols); + + mapper = bps:-1:1; + % look up table demapper from symbols to bits (hard decision) + demapper=zeros(M,bps); + for m=1:M + for b=1:bps + if bitand(m-1,b) demapper(m,bps-b+1) = 1; end + end + end + + % continuous phase mFSK modulator + + w(1:M) = 2*pi*(1:M)/Ts; + tx_phase = 0; + tx = zeros(1,Ts*Nsymbols); + + for s=1:Nsymbols + bits_for_this_symbol = tx_bits(bps*(s-1)+1:bps*s); + symbol_index = bits_for_this_symbol * mapper' + 1; + tx_symbols(s) = symbol_index; + assert(demapper(symbol_index,:) == bits_for_this_symbol); + for k=1:Ts + tx_phase = tx_phase + w(symbol_index); + tx((s-1)*Ts+k) = exp(j*tx_phase); + end + end + + % AWGN channel noise + + EsNodB = EcNodB + 10*log10(bps); + EsNo = 10^(EsNodB/10); + variance = Ts/EsNo; + noise = sqrt(variance/2)*(randn(1,Nsymbols*Ts) + j*randn(1,Nsymbols*Ts)); + rx = tx + noise; + + if plt==2, % check the Spectrum + [psd,Fpsd] =pwelch(rx,128,0.5,128,Ts); + figure(110); plot(Fpsd,10*log10(psd)); + title('Rx Signal: PSD '); + xlabel('Freq/Rs'); + %figure(111);plot(unwrap(arg(tx))); + pause(0.01); + end + + + % integrate and dump demodulator + + rx_bits = zeros(1,Nbits); + rx_filt = zeros(Nsymbols,M); + rx_pows = zeros(1,M); + rx_nse_pow = 0.0; rx_sig_pow =0.0; + for s=1:Nsymbols + arx_symb = rx((s-1)*Ts + (1:Ts)); + for m=1:M + r= sum(exp(-j*w(m)*(1:Ts)) .* arx_symb); + rx_pows(m)= r * conj(r); + rx_filt(s,m) = abs(r); + end + [tmp symbol_index] = max(rx_filt(s,:)); + rx_sig_pow = rx_sig_pow + rx_pows(symbol_index); + rx_pows(symbol_index)=[]; + rx_nse_pow = rx_nse_pow + sum(rx_pows)/(M-1); + rx_bits(bps*(s-1)+1:bps*s) = demapper(symbol_index,:); + end + + % using Rxpower = v^2 + sigmal^2 + rx_sig_pow = rx_sig_pow/Nsymbols; + rx_nse_pow = rx_nse_pow/Nsymbols; + v_est = sqrt(rx_sig_pow-rx_nse_pow); + SNRest = rx_sig_pow/rx_nse_pow; + sig_est = sqrt(rx_nse_pow/2); % for Rayleigh: 2nd raw moment = 2 .sigma^2 + Kest = rx_sig_pow/(2.0*sig_est^2) -1.0; + + Nerrors = sum(xor(tx_bits, rx_bits)); + raw_ber = Nerrors/Nbits; + printf('Ec (dB): %4.1f M: %2d Total bits: %5d HD Errs: %6d (Raw) BER: %1.3f\n', ... + EcNodB, M, Nbits, Nerrors, raw_ber); + if plt==1, plot_hist(rx_filt,tx_symbols, M); end + +endfunction + +% simulate one codeword of 2 or 4 FSK -------------------------- +function [Nerrors raw_ber EcNodB] = run_single_ldpc(M, Ltype, Nbits,EbNodB, plt, HRA) + + disp([num2str(M) 'FSK coded test ... ']) + if M==2 + bps = 1; modulation = 'FSK'; mod_order=2; mapping = 'gray'; + elseif M==4 + bps = 2; modulation = 'FSK'; mod_order=4; mapping = 'gray'; + else + error('sorry - bad value of M!'); + end + decoder_type = 0; max_iterations = 100; + + Hsize=size(HRA); + Krate = (Hsize(2)-Hsize(1))/Hsize(2); % + EcNodB = EbNodB + 10*log10(Krate); + code_param = ldpc_init_user(HRA, modulation, mod_order, mapping); + Nframes = floor(Nbits/code_param.data_bits_per_frame); + Nbits = Nframes*code_param.data_bits_per_frame; + + % Encoder + data_bits = round(rand(1,code_param.data_bits_per_frame)); + tx_bits = []; + for f=1:Nframes; + codeword_bits = LdpcEncode(data_bits, code_param.H_rows, code_param.P_matrix); + tx_bits = [tx_bits codeword_bits]; + end + + % modem/channel simulation + [raw_ber rx_filt rx_bits tx_symbols demapper sig_est SNRlin v_est] = ... + run_single(tx_bits,M,EcNodB, plt ); + + % Decoder + Nerrors = 0; + for f=1:Nframes + st = (f-1)*code_param.coded_bits_per_frame/bps + 1; + en = st + code_param.coded_bits_per_frame/bps - 1; + if or(Ltype==1, Ltype==3) + if bps==1, + sd = rx_filt(st:en,1) - rx_filt(st:en,2); + % OR ind = rx_filt(st:en,1) > rx_filt(st:en,2); + % llr = ind'*2 -1; % this works but use SNR scaling + if Ltype==3, HD=1; else, HD = 0; end + llr = sd_to_llr(sd, HD)'; % David's orig 2FSK routine + end + if bps==2, + if Ltype==3, + llr = mfsk_hd_to_llrs(rx_filt(st:en,:), demapper); + else + error('Ltype =1 not provided for coded 4FSK'); + end + end + end + if Ltype==2, % SDs are converted to LLRs + % use the SD amp estimates, try Bill's new LLR routine + if plt==1, plot_pdf(v_est, sig_est); end + llr = mfsk_sd_to_llrs(rx_filt(st:en,:), demapper, v_est, sig_est); + end + if Ltype==4, + % use CML demod: non-coherent; still seems to need amplitude estimate + symL = DemodFSK(1/v_est*rx_filt(st:en,:)', SNRlin, 1); + llr = -Somap(symL); % now convert to bit LLRs + end + if plt==3, figure(204); hist(llr); + title('Histogram LLR for decoder inputs'); pause(0.01); end + + [x_hat, PCcnt] = MpDecode(llr, code_param.H_rows, code_param.H_cols, ... + max_iterations, decoder_type, 1, 1); + Niters = sum(PCcnt~=0); + detected_data = x_hat(Niters,:); + Nerrors = Nerrors + sum(xor(data_bits, detected_data(1:code_param.data_bits_per_frame))); + end + + ber = Nerrors/Nbits; + printf('Eb (dB): %4.1f Data Bits: %4d Num CWs: %5d Tot Errs: %5d (Cod) BER: %1.3f\n', ... + EbNodB,Nbits , Nframes, Nerrors, ber); +endfunction + +function plot_hist(rx_filt,tx_symbols, M) + % more general version of previous fn; - plots histograms for any Tx patterns + Smax = 36; + X = 0:Smax-1; + H = zeros(1,Smax); H2 = zeros(1,Smax); s2=0.0; + for m = 1:M + ind = tx_symbols==m; + ind2 = tx_symbols~=m; + H= H+ hist(rx_filt(ind,m),X); + H2= H2+ hist(rx_filt(ind2,m),X); + x=rx_filt(ind2,m); + s2 =s2 + sum(x(:).^2)/length(x); + end + disp('noise RMS is '); sqrt(s2/4) + figure(207); clf, plot(X,H); + title([num2str(M) 'FSK pdf for rx=tx symbol']) + hold on, plot(X,H2,'g'); + title([num2str(M) 'FSK pdf for rx!=tx symbol']) + pause(0.1); +endfunction + + +% 2FSK SD -> LLR mapping that we used for Wenet SSTV system +function llr = sd_to_llr(sd, HD=0) % original 2FSK + HD option + sd = sd / mean(abs(sd)); + x = sd - sign(sd); + sumsq = sum(x.^2); + summ = sum(x); + mn = summ/length(sd); + estvar = sumsq/length(sd) - mn*mn; + estEsN0 = 1/(2* estvar + 1E-3); + if HD==0, + llr = 4 * estEsN0 * sd; + else + llr = 8 * estEsN0 * sign(sd); %%%% *4 >> *8 + endif +endfunction + + + +function llrs = mfsk_sd_to_llrs(SD, map, v, sig) + % Array of MFSK SD is converted to bit LLR vector according to mapping 'map' + % SD is M elements wide; map is M by log2(M); v and sig are params of Rician pdf + % Bill (VK5DSP) for Codec2, version 24/6/20 + + Llim = 1e-7; + XX =1.0; % check LLR scaling? + Smap = size(map); + Ssd = size(SD); + if Smap(1) == 2 + llrs = zeros(1, Ssd(1)); + bps = 1; + assert(2^bps == Ssd(2), 'wrong SD length?') + % note that when v=0, the pdf reverts to Rayleigh + for kk = 1: Ssd(1) + Prx_1 = rice(SD(kk,2), v, sig) * rice(SD(kk,1),0,sig); + Prx_0 = rice(SD(kk,2), 0, sig) * rice(SD(kk,1),v,sig); + + if or(isnan(Prx_1), Prx_1> LLRs in 4FSK') + else + [Nerr raw_ber Ec] = run_single_ldpc(M, Ltype, Nbits, Eb, plt, HRA); + nrun = nrun+1; res(nrun,:) = [Eb Ec M Ltype Nbits Nerr raw_ber]; + endif + end +end +disp('results stored in array "res" - plot with fsk_cml_plot') +disp(' Eb Ec M Ltype #Bits #Errs Raw-BER') +for n = 1: nrun + printf(' %5.1f %5.1f %3d %3d %6d %6d %5.4f \n', res(n,:)) +end + + diff --git a/libcodec2-android/src/codec2/octave/fsk_demod_BER_test.py b/libcodec2-android/src/codec2/octave/fsk_demod_BER_test.py new file mode 100644 index 0000000..f770e4f --- /dev/null +++ b/libcodec2-android/src/codec2/octave/fsk_demod_BER_test.py @@ -0,0 +1,610 @@ +#!/usr/bin/env python +# +# Perform automated Eb/N0 testing of the C-implementation of fsk_mod / fsk_demod +# +# Based on the analysis performed here: https://github.com/projecthorus/radiosonde_auto_rx/blob/master/auto_rx/test/notes/2019-03-03_generate_lowsnr_validation.md +# +# Copyright (C) 2020 Mark Jessop +# Released under GNU GPL v3 or later +# +# Requirements: +# - csdr must be installed and available on the path. https://github.com/ha7ilm/csdr +# - The following utilities from codec2 need to be built: +# - fsk_get_test_bits, fsk_put_test_bits +# - fsk_mod, fsk_demod +# - Create the directories: 'samples' and 'generated' in this directory (octave) +# +import json +import logging +import os +import time +import traceback +import subprocess +import sys +import argparse + +import numpy as np +import matplotlib.pyplot as plt +import scipy.signal +import scipy.interpolate + + +# Variables you will want to adjust: + +# Eb/N0 Range to test: +# Default: 0 through 5 dB in 0.5 db steps, then up to 20 db in 1db steps. +EBNO_RANGE = np.append(np.arange(0, 5, 0.5), np.arange(5, 20.5, 1)) + +# Baud rates to test: +BAUD_RATES = [100, 50, 25] + +# Order of the FSK signal (2 or 4) +FSK_ORDER = 4 + +# Test Length (bits) +TEST_LENGTH = 2e4 + +# Pseudorandom sequence length to generate test frames. +# NOTE: BER results are quite dependent on the frame length and threshold parameters. +FRAME_LENGTH = 2000 + +# Frame threshold detection. This has the effect of setting an upper bound on the BER. +FRAME_THRESHOLD = 0.4 + +# Allow a reduction in 'expected' bits of this value, as we expect the modem to need +# some time to 'spin up' the estimators. +FRAME_IGNORE = FRAME_LENGTH + +# IF sample rate +SAMPLE_RATE = 48000 + +# Frequency estimator limits +ESTIMATOR_LOWER_LIMIT = 100 +ESTIMATOR_UPPER_LIMIT = int(SAMPLE_RATE/2 - 1000) + +# Frequency of the low tone (Hz) +LOW_TONE = 2000 + +# Tone spacing (Hz) +TONE_SPACING = 270 + +# Mask Estimator +MASK_ESTIMATOR = True + +# Switch to 'Low Bit-Rate' mode below this baud rate. +#LBR_BREAK_POINT = 600 # No more LBR mode + +# Halt simulation for a particular baud rate when the BER drops below this level. +BER_BREAK_POINT = 1e-4 + +# If enabled, calculate Frequency Estimator error +FEST_ERROR = True + +# Frequency estimator error calculation threshold (*Rs) +FEST_THRESHOLD = 0.2 + +# Enable doppler shift. +# NOTE: This will apply up to +/- 6kHz of doppler shift to the test signal, +# emulating transmission through a LEO linear transponder. +# You will need to set the modem centre frequency and parameters such that +# the modem signal will be contained within a 1-22 kHz modem RX passband. +# For 100 baud Horus Binary testing, I use: +# LOW_TONE = 10000 +# TONE_SPACING = 250 +# The TEST_LENGTH setting must also be long enough so that the test modem file +# is at least 780 seconds long. For 100 baud 4FSK, a TEST_LENGTH of 2e6 is enough. +DOPPLER_ENABLED = False +DOPPLER_FILE = "doppler.npz" # generate using sat_doppler.py + + +STATS_OUTPUT = True + +# Where to place the initial test samples. +SAMPLE_DIR = "./samples" + +# Where to place the generated low-SNR samples. +GENERATED_DIR = "./generated" + +# Location of the codec2 utils +CODEC2_UTILS = "../build/src" + + +THEORY_EBNO = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] +THEORY_BER_4 = [ + 0.22934, + 0.18475, + 0.13987, + 0.09772, + 0.06156, + 0.03395, + 0.01579, + 0.00591, + 0.00168, + 3.39e-4, + 4.44e-5, + # 3.38e-6, + # 1.30e-7, + # 2.16e-9, + # 1.23e-11, + # 1.85e-14, + # 5.13e-18, + # 1.71e-22 +] +THEORY_BER_2 = [ + 0.30327, + 0.26644, + 0.22637, + 0.18438, + 0.14240, + 0.10287, + 0.06831, + 0.04080, + 0.02132, + 0.00942, + 0.00337, +] + +# +# Functions to read files and add noise. +# + + +def load_sample(filename, loadreal=True): + # If loading real samples (which is what fsk_mod outputs), apply a hilbert transform to get an analytic signal. + if loadreal: + return scipy.signal.hilbert(np.fromfile(filename, dtype="f4")) + else: + return np.fromfile(filename, dtype="c8") + + +def save_sample(data, filename): + # We have to make sure to convert to complex64.. + data.astype(dtype="c8").tofile(filename) + + # TODO: Allow saving as complex s16 - see view solution here: https://stackoverflow.com/questions/47086134/how-to-convert-a-numpy-complex-array-to-a-two-element-float-array + + +def apply_doppler(data, dopplerfile, fs=48000): + """ Apply a doppler curve to an input data stream """ + + npzfile = np.load(dopplerfile) + + _time = npzfile["arr_0"] + _doppler = npzfile["arr_1"] + + if len(data) < _time[-1] * fs: + print("Input data length too short - use more bits!") + + # Clip data length if its too long for the input doppler data + if len(data) > _time[-1] * fs: + data = data[: int(_time[-1] * fs)] + + # Interpolate the doppler data + _interp = scipy.interpolate.interp1d(_time, _doppler, kind="cubic") + + _timesteps = np.arange(0, len(data)) / fs + _interp_doppler = _interp(_timesteps) + + # This isn't working properly. + phase = np.cumsum(_interp_doppler / fs) + mixed = data * np.exp(1.0j * 2.0 * np.pi * phase) + + return mixed + + +def calculate_variance(data, threshold=-100.0): + # Calculate the variance of a set of radiosonde samples. + # Optionally use a threshold to limit the sample the variance + # is calculated over to ones that actually have sonde packets in them. + + _data_log = 20 * np.log10(np.abs(data)) + + # MSE is better than variance as a power estimate, as it counts DC + data_thresh = data[_data_log > threshold] + return np.mean(data_thresh * np.conj(data_thresh)) + + +def add_noise( + data, + variance, + baud_rate, + ebno, + fs=96000, + bitspersymbol=1.0, + normalise=True, + real=False, +): + # Add calibrated noise to a sample. + + # Calculate Eb/No in linear units. + _ebno = 10.0 ** ((ebno) / 10.0) + + # Calculate the noise variance we need to add + _noise_variance = variance * fs / (baud_rate * _ebno * bitspersymbol) + + # If we are working with real samples, we need to halve the noise contribution. + if real: + _noise_variance = _noise_variance * 0.5 + + # Generate complex random samples + _rand_i = np.sqrt(_noise_variance / 2.0) * np.random.randn(len(data)) + _rand_q = np.sqrt(_noise_variance / 2.0) * np.random.randn(len(data)) + + _noisy = data + (_rand_i + 1j * _rand_q) + + if normalise: + # print("Normalised to 1.0") + return _noisy / np.max(np.abs(_noisy)) + else: + return _noisy + + +def generate_lowsnr(sample, outfile, fs, baud, ebno, order): + """ Generate a low SNR test file """ + + if order == 2: + _bits_per_symbol = 1 + else: + _bits_per_symbol = 2 + + _var = calculate_variance(sample) + + _noisy = add_noise(sample, _var, baud, ebno, fs, _bits_per_symbol) + + save_sample(_noisy, outfile) + + return outfile + + +# +# Functions to deal with codec2 utils +# + + +def generate_fsk(baud): + """ Generate a set of FSK data """ + + # Calculate the number of bits we need to generate to get out desired test length. + if FSK_ORDER == 2: + _num_bits = TEST_LENGTH * baud + else: + _num_bits = TEST_LENGTH * baud * 2 + + _num_bits = TEST_LENGTH + + _filename = "%s/fsk_%d_%d_%d_f.bin" % (SAMPLE_DIR, FSK_ORDER, SAMPLE_RATE, baud) + + # Generate the command we need to make: + _cmd = ( + "%s/fsk_get_test_bits - %d %d | %s/fsk_mod %d %d %d %d %d - - | csdr convert_s16_f > %s" + % ( + CODEC2_UTILS, + _num_bits, + FRAME_LENGTH, + CODEC2_UTILS, + FSK_ORDER, + SAMPLE_RATE, + baud, + LOW_TONE, + TONE_SPACING, + _filename, + ) + ) + + print(_cmd) + + print("Generating test signal: %d-FSK, %d baud" % (FSK_ORDER, baud)) + + # Run the command. + try: + _start = time.time() + _output = subprocess.check_output(_cmd, shell=True, stderr=None) + _output = _output.decode() + except: + # traceback.print_exc() + _output = "error" + + _runtime = time.time() - _start + + print("Finished generating test signal.") + + return _filename + + +def process_fsk( + filename, baud, complex_samples=True, override_bits=None, stats=False, statsfile="" +): + """ Run a fsk file through fsk_demod """ + + _estim_limits = "-b %d -u %d " % (ESTIMATOR_LOWER_LIMIT, ESTIMATOR_UPPER_LIMIT) + + if MASK_ESTIMATOR: + _mask = "--mask %d " % TONE_SPACING + else: + _mask = "" + + if complex_samples: + _cpx = "--cs16 " + else: + _cpx = "" + + if stats: + _stats_file = GENERATED_DIR + "/" + statsfile + ".stats" + _stats = "--stats=50 " + else: + _stats = "" + _stats_file = None + + _cmd = "cat %s | csdr convert_f_s16 | %s/fsk_demod %s%s%s%s%d %d %d - - " % ( + filename, + CODEC2_UTILS, + _mask, + _estim_limits, + _cpx, + _stats, + FSK_ORDER, + SAMPLE_RATE, + baud, + ) + + if stats: + _cmd += "2> %s" % _stats_file + + _cmd += "| %s/fsk_put_test_bits -f %d -t %.2f - 2>&1" % ( + CODEC2_UTILS, + FRAME_LENGTH, + FRAME_THRESHOLD, + ) + + # print("Processing %s" % filename) + + print(_cmd) + + # Run the command. + try: + _start = time.time() + _output = subprocess.check_output(_cmd, shell=True) + _output = _output.decode() + except subprocess.CalledProcessError as e: + _output = e.output.decode() + except: + traceback.print_exc() + _output = "error" + print("Run failed!") + return (-1, _stats_file) + + _runtime = time.time() - _start + + # Try to grab last line of the stderr outout + try: + _last_line = _output.split("\n")[-3] + except: + # Lack of a line indicates that we have decoded no data. return a BER of 1. + print("No bits decoded.") + return (1.0, _stats_file) + + # Detect no decoded bits when feeding in custom put_bits parameters. + if "Using" in _last_line: + print("No bits decoded.") + return (1.0, _stats_file) + + # Example line: + # [0009] BER 0.000, bits tested 18000, bit errors 0 errs: 0 + # [0009] BER 0.000, bits tested 18000, bit errors 0 + # PASS + # + + # split into fields + _fields = _last_line.split() + + # Extract number of bits and errors + _bits = float(_fields[5][:-1]) # remove the trailing comma + _errors = float(_fields[8]) + + print("Bits: %d, Errors: %d, Raw BER: %.8f" % (_bits, _errors, _errors / _bits)) + + if override_bits != None: + if _bits < override_bits: + print("Demod got %d bits, but we sent %d bits." % (_bits, override_bits)) + _errors += override_bits - _bits + + # Calculate and return BER + _ber = _errors / _bits + + if _ber > 1.0: + _ber = 1.0 + + return (_ber, _stats_file) + + +def read_stats(filename, sps = 50): + """ Read in a statistics file, and re-organise it for easier calculations """ + + _output = { + 'ebno': [], + 'f1_est': [], + 'f2_est': [], + 'f3_est': [], + 'f4_est': [], + 'ppm': [], + 'time': [] + } + + with open(filename, 'r') as _f: + for _line in _f: + if _line[0] != '{': + continue + + try: + _data = json.loads(_line) + except Exception as e: + #print("Line parsing error: %s" % str(e)) + continue + + _output['ebno'].append(_data['EbNodB']) + _output['f1_est'].append(_data['f1_est']) + _output['f2_est'].append(_data['f2_est']) + + if 'f3_est' in _data: + _output['f3_est'].append(_data['f3_est']) + _output['f4_est'].append(_data['f4_est']) + + _output['ppm'].append(_data['ppm']) + + if _output['time'] == []: + _output['time'] = [0] + else: + _output['time'].append(_output['time'][-1]+1.0/sps) + + return _output + + +def freq_est_error(data, Rs): + """ Calculate the frequency estimator error """ + + _threshold = FEST_THRESHOLD*Rs + + _total_points = len(data['f1_est'])*FSK_ORDER + + _errors = 0 + + _errors += np.sum(np.abs(np.array(data['f1_est'])-LOW_TONE) > _threshold) + _errors += np.sum(np.abs(np.array(data['f2_est'])-LOW_TONE-TONE_SPACING) > _threshold) + + if FSK_ORDER == 4: + _errors += np.sum(np.abs(np.array(data['f3_est'])-LOW_TONE-TONE_SPACING*2) > _threshold) + _errors += np.sum(np.abs(np.array(data['f4_est'])-LOW_TONE-TONE_SPACING*3) > _threshold) + + + return _errors/_total_points + + +if __name__ == "__main__": + + parser = argparse.ArgumentParser(description="FSK modem BER simulations") + parser.add_argument("--test", action="store_true", help="run automated test") + args = parser.parse_args() + + if args.test: + # test the AWGN channel simulation. We use BPSK that's phase shifted to exercise the + # complex maths a bit + + nb_bits = 100000 + EbNo = 4 + tx_bits = np.random.randint(2, size=nb_bits) + tx_bpsk_symbols = (2 * tx_bits - 1) * np.exp(1j * np.pi / 3) + tx_power = calculate_variance(tx_bpsk_symbols) + + # check calculate_variance() + assert tx_power < 1.1 and tx_power > 0.9 + + # BPSK modem simulation + rx_bpsk_symbols = add_noise(tx_bpsk_symbols, tx_power, 1, EbNo, 1, 1) + rx_bpsk_symbols = rx_bpsk_symbols * np.exp(-1j * np.pi / 3) + rx_bits = np.array([1 if np.real(s) > 0 else 0 for s in rx_bpsk_symbols]) + nb_errors = np.sum(np.bitwise_xor(tx_bits, rx_bits)) + ber = nb_errors / nb_bits + + # set limit of +/- 0.25dB on BER + EbNo_lin_upper = 10 ** ((EbNo - 0.25) / 10) + bpsk_ber_theory_upper = 0.5 * scipy.special.erfc(np.sqrt(EbNo_lin_upper)) + EbNo_lin_lower = 10 ** ((EbNo + 0.25) / 10) + bpsk_ber_theory_lower = 0.5 * scipy.special.erfc(np.sqrt(EbNo_lin_lower)) + print( + "nb_errors: %d ber: %4.3f ber_lower_limit: %4.3f ber_upper_limit: %4.3f" + % (nb_errors, ber, bpsk_ber_theory_lower, bpsk_ber_theory_upper) + ) + assert ber < bpsk_ber_theory_upper and ber > bpsk_ber_theory_lower + print("AWGN channel simulation test PASSED!") + exit() + + plot_data = {} + + for _baud in BAUD_RATES: + + _file = generate_fsk(_baud) + + print("Loading file and converting to complex.") + _sample = load_sample(_file) + + if DOPPLER_ENABLED: + print("Applying Doppler.") + _sample = apply_doppler(_sample, DOPPLER_FILE) + print("Done.") + _override_bits = _baud * (len(_sample) / SAMPLE_RATE) - FRAME_IGNORE + else: + _override_bits = TEST_LENGTH - FRAME_IGNORE + + _temp_file = "%s/temp.bin" % GENERATED_DIR + + _ebnos = [] + _bers = [] + _fest_err = [] + + for _ebno in EBNO_RANGE: + generate_lowsnr(_sample, _temp_file, SAMPLE_RATE, _baud, _ebno, FSK_ORDER) + + _ber, _stats_file = process_fsk( + _temp_file, + _baud, + override_bits=_override_bits, + stats=STATS_OUTPUT, + statsfile="fsk_%d_%.1f" % (_baud, _ebno), + ) + + print("%.1f, %.8f" % (_ebno, _ber)) + + _ebnos.append(_ebno) + _bers.append(_ber) + + if FEST_ERROR: + _stats = read_stats(_stats_file) + _fest_err.append(freq_est_error(_stats, _baud)) + + # Halt the simulation if the BER drops below our break point. + if _ber < BER_BREAK_POINT: + break + + plot_data[_baud] = {"baud": _baud, "ebno": _ebnos, "ber": _bers, "fest_err":_fest_err} + print(plot_data[_baud]) + + # plt.semilogy(plot_data[_baud]['ebno'], plot_data[_baud]['ber'], label="Simulated - %d bd" % _baud) + + plt.figure() + + print(plot_data) + + for _b in plot_data: + plt.semilogy( + plot_data[_b]["ebno"], plot_data[_b]["ber"], label="Simulated - %d bd" % _b + ) + + if FSK_ORDER == 2: + plt.semilogy(THEORY_EBNO, THEORY_BER_2, label="Theory") + else: + plt.semilogy(THEORY_EBNO, THEORY_BER_4, label="Theory") + + plt.xlabel("Eb/N0 (dB)") + plt.ylabel("BER") + + # Crop plot to reasonable limits + plt.ylim(1e-3, 1) + plt.xlim(0, 10) + + plt.title("fsk_demod %d-FSK BER performance" % FSK_ORDER) + plt.grid() + plt.legend() + + if FEST_ERROR: + plt.figure() + + for _b in plot_data: + plt.plot( + plot_data[_b]["ebno"], plot_data[_b]["fest_err"], label="Simulated - %d bd" % _b + ) + + plt.title("Frequency Estimator Error") + plt.grid() + plt.legend() + + plt.show() diff --git a/libcodec2-android/src/codec2/octave/fsk_demod_file.m b/libcodec2-android/src/codec2/octave/fsk_demod_file.m new file mode 100644 index 0000000..de2fbc7 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/fsk_demod_file.m @@ -0,0 +1,139 @@ +% fsk_demod_file.m +% David Rowe May 2020 +% +% Demodulate a file of off air samples and plot a bunch of internal +% states. Useful for debugging the FSK demod configuration + +#{ + Sample usage to explore demodulator operation with a 100 bits/s 2FSK signal: + + $ cd ~/codec2/build_linux/src + $ ./fsk_get_test_bits - 1000 | ./fsk_mod 2 8000 100 1000 1000 - ../../octave/fsk.s16 + $ octave --no-gui + octave:1> fsk_demod_file("fsk.s16",format="s16",8000,100,2) + + Same thing but complex (single sided): + + $ ./fsk_get_test_bits - 1000 | ./fsk_mod 2 8000 100 1000 1000 - - | ./cohpsk_ch - fsk.cs16 -100 --Fs 8000 --complexout + octave:2> fsk_demod_file("fsk.cs16",format="cs16",8000,100,2) +#} + +function fsk_demod_file(filename, format="s16", Fs=8000, Rs=50, M=2, P=8, avoid_dc = 1, max_secs=1E32) + more off; + fsk_lib; + plot_en = 1; + + states = fsk_init(Fs, Rs, M, P); + + if strcmp(format,"s16") + read_complex = 0; sample_size = 'int16'; shift_fs_on_4=0; + elseif strcmp(format,"cs16") || strcmp(format,"iq16") + read_complex = 1; sample_size = 'int16'; shift_fs_on_4=0; + if avoid_dc states.fest_fmin = states.Rs*0.5; else states.fest_fmin = -Fs/2; end; + states.fest_fmax = Fs/2; + elseif strcmp(format,"iqfloat") + read_complex = 1; sample_size = 'float32'; shift_fs_on_4=0; + if avoid_dc states.fest_fmin = states.Rs*0.5; else states.fest_fmin = -Fs/2; end; + states.fest_fmax = Fs/2; + else + printf("Error in format: %s\n", format); + return; + end + + fin = fopen(filename,"rb"); + if fin == -1 printf("Error opening file: %s\n",filename); return; end + + nbit = states.nbit; + + frames = 0; + rx = []; rx_bits_log = []; norm_rx_timing_log = []; + f_int_resample_log = []; EbNodB_log = []; ppm_log = []; + f_log = []; Sf_log = []; + + % Extract raw bits from samples ------------------------------------------------------ + + printf("demod of raw bits....\n"); + + finished = 0; ph = 1; secs = 0; + while (finished == 0) + + % read nin samples from input file + + nin = states.nin; + if read_complex + [sf count] = fread(fin, 2*nin, sample_size); + if strcmp(sample_size, "uint8") sf = (sf - 127)/128; end + sf = sf(1:2:end) + j*sf(2:2:end); + count /= 2; + if shift_fs_on_4 + % optional shift up in freq by Fs/4 to get into freq est range + for i=1:count + ph = ph*exp(j*pi/4); + sf(i) *= ph; + end + end + else + [sf count] = fread(fin, nin, sample_size); + end + rx = [rx; sf]; + + if count == nin + frames++; + + % demodulate to stream of bits + + states = est_freq(states, sf, states.M); + if states.freq_est_type == 'mask' states.f = states.f2; end + [rx_bits states] = fsk_demod(states, sf); + + rx_bits_log = [rx_bits_log rx_bits]; + norm_rx_timing_log = [norm_rx_timing_log states.norm_rx_timing]; + f_int_resample_log = [f_int_resample_log abs(states.f_int_resample)]; + EbNodB_log = [EbNodB_log states.EbNodB]; + ppm_log = [ppm_log states.ppm]; + f_log = [f_log; states.f]; + Sf_log = [Sf_log; states.Sf']; + else + finished = 1; + end + + secs += nin/Fs; + if secs > max_secs finished=1; end + + end + printf("frames: %d\n", frames); + fclose(fin); + + if plot_en + printf("plotting...\n"); + + figure(1); clf; + rx_nowave = rx(1000:length(rx)); % skip past wav header if it's a wave file + subplot(211) + plot(real(rx_nowave)); + title('input signal to demod (1 sec)') + xlabel('Time (samples)'); + subplot(212); + last = min(length(rx_nowave),Fs); + Nfft = 2^(ceil(log2(last))); + Rx = fft(rx_nowave(1:last).*hanning(last),Nfft); + RxdB = 20*log10(abs(fftshift(Rx))); + mx = 10*ceil(max(RxdB/10)); + f = -Nfft/2:Nfft/2-1; + plot(f*Fs/Nfft, RxdB); + axis([-Fs/2 Fs/2 mx-80 mx]) + xlabel('Frequency (Hz)'); + if length(rx) > Fs + figure(2); Ndft=2^ceil(log2(Fs/10)); specgram(rx,Ndft,Fs); + end + figure(3); clf; plot(f_log,'+-'); axis([1 length(f_log) -Fs/2 Fs/2]); title('Tone Freq Estimates'); + figure(4); clf; mesh(Sf_log(1:end,:)); title('Freq Est Sf over time'); + figure(5); clf; plot(f_int_resample_log','+'); title('Integrator outputs for each tone'); + figure(6); clf; plot(norm_rx_timing_log); axis([1 frames -0.5 0.5]); title('norm fine timing') + figure(7); clf; plot(EbNodB_log); title('Eb/No estimate') + figure(8); clf; plot(ppm_log); title('Sample clock (baud rate) offset in PPM'); + + end + +endfunction + diff --git a/libcodec2-android/src/codec2/octave/fsk_horus.m b/libcodec2-android/src/codec2/octave/fsk_horus.m new file mode 100644 index 0000000..a9dcb43 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/fsk_horus.m @@ -0,0 +1,876 @@ +% fsk_horus.m +% David Rowe 10 Oct 2015 +% +% Project Horus High Altitude Balloon (HAB) FSK demodulator +% See blog write up "All your modems are belong to us" +% http://www.rowetel.com/?p=4629 + + +fsk_lib; + + +% Basic modem set up for Horus + +function states = fsk_horus_init(Fs,Rs,M=2) + + states = fsk_init(Fs,Rs,M); + + % Freq. estimator limits - keep these narrow to stop errors with low SNR 4FSK + + states.fest_fmin = 300; + states.fest_fmax = 2800; +endfunction + + +% init rtty protocol specific states + +function rtty = fsk_horus_init_rtty + % Generate unque word that correlates against the ASCII "$$$$$" that + % is at the start of each frame. + % $ -> 36 decimal -> 0 1 0 0 1 0 0 binary + + dollar_bits = fliplr([0 1 0 0 1 0 0]); + mapped_db = 2*dollar_bits - 1; + sync_bits = [1 1 0]; + mapped_sb = 2*sync_bits - 1; + + mapped = [mapped_db mapped_sb]; + npad = rtty.npad = 3; % one start and two stop bits between 7 bit ascii chars + nfield = rtty.nfield = 7; % length of ascii character field + + rtty.uw = [mapped mapped mapped mapped mapped]; + rtty.uw_thresh = length(rtty.uw) - 2; % allow a few bit errors when looking for UW + rtty.max_packet_len = 1000; +endfunction + + +% I think this is the binary protocol work from Jan 2016 + +function binary = fsk_horus_init_binary + % Generate 16 bit "$$" unique word that is at the front of every horus binary + % packet + + dollar_bits = [0 0 1 0 0 1 0 0]; + mapped_db = 2*dollar_bits - 1; + + binary.uw = [mapped_db mapped_db]; + binary.uw_thresh = length(binary.uw)-2; % no bit errors when looking for UW + + binary.max_packet_len = 360; +endfunction + + +% Look for unique word and return index of first UW bit, or -1 if no +% UW found Sometimes there may be several matches, returns the +% position of the best match to UW. + +function [uw_start best_corr corr] = find_uw(states, start_bit, rx_bits) + uw = states.uw; + + mapped_rx_bits = 2*rx_bits - 1; + best_corr = 0; + uw_start = -1; + found_uw = 0; + + % first first UW in buffer that exceeds threshold + + for i=start_bit:length(rx_bits) - length(uw) + corr(i) = mapped_rx_bits(i:i+length(uw)-1) * uw'; + if (found_uw == 0) && (corr(i) >= states.uw_thresh) + uw_start = i; + best_corr = corr; + found_uw = 1; + end + end + +endfunction + + +% Extract ASCII string from a Horus frame of bits + +function [str crc_ok] = extract_ascii(states, rx_bits_buf, uw_loc) + nfield = states.nfield; + npad = states.npad; + + str = ""; str_dec = []; nstr = 0; ptx_crc = 1; rx_crc = ""; + endpacket = 0; + + st = uw_loc + length(states.uw); % first bit of first char + en = uw_loc + states.max_packet_len - nfield; + %printf("\nst: %d en: %d len: %d\n", st, en, length(rx_bits_buf)); + + for i=st:nfield+npad:en + field = rx_bits_buf(i:i+nfield-1); + ch_dec = field * (2.^(0:nfield-1))'; + + % filter out unlikely characters that bit errors may introduce, and ignore \n + + if (ch_dec > 31) && (ch_dec < 91) + str = [str char(ch_dec)]; + else + str = [str char(32)]; % space is "not sure" + end + nstr++; + + % build up array for CRC16 check + + if !endpacket && (ch_dec == 42) + endpacket = 1; + rx_crc = crc16(str_dec); % found a '*' so that's the end of the string for CRC calculations + ptx_crc = nstr+1; % this is where the transmit CRC starts + end + if !endpacket + str_dec = [str_dec ch_dec]; + end + end + + if (ptx_crc+3) <= length(str) + tx_crc = str(ptx_crc:ptx_crc+3); + crc_ok = strcmp(tx_crc, rx_crc); + else + crc_ok = 0; + end + + str = str(1:ptx_crc-2); + +endfunction + + +% Use soft decision information to find bits most likely in error. I think +% this is some form of maximum likelihood decoding. + +function [str crc_ok rx_bits_log_flipped] = sd_bit_flipping(states, rx_bits_log, rx_bits_sd_log, st, en); + + % force algorithm to ignore rs232 sync bits by marking them as "very likely", they have + % no input to crc algorithm + + nfield = states.nfield; + npad = states.npad; + for i=st:nfield+npad:en + rx_bits_sd_log(i+nfield:i+nfield+npad-1) = 1E6; + end + + % make a list of bits with smallest soft decn values + + [dodgy_bits_mag dodgy_bits_index] = sort(abs(rx_bits_sd_log(st+length(states.uw):en))); + dodgy_bits_index += length(states.uw) + st - 1; + nbits = 6; + ntries = 2^nbits; + str = ""; + crc_ok = 0; + + % try various combinations of these bits + + for i=1:ntries-1 + error_mask = zeros(1, length(rx_bits_log)); + for b=1:nbits + x = bitget(i,b); + bit_to_flip = dodgy_bits_index(b); + error_mask(bit_to_flip) = x; + %printf("st: %d i: %d b: %d x: %d index: %d\n", st, i,b,x,bit_to_flip); + end + rx_bits_log_flipped = xor(rx_bits_log, error_mask); + [str_flipped crc_ok_flipped] = extract_ascii(states, rx_bits_log_flipped, st); + if crc_ok_flipped + %printf("Yayy we fixed a packet by flipping with pattern %d\n", i); + str = str_flipped; + crc_ok = crc_ok_flipped; + end + end +endfunction + + +% Extract as many ASCII packets as we can from a great big buffer of bits + +function npackets = extract_and_print_rtty_packets(states, rtty, rx_bits_log, rx_bits_sd_log) + + % use UWs to delimit start and end of data packets + + bit = 1; + nbits = length(rx_bits_log); + nfield = rtty.nfield; + npad = rtty.npad; + npackets = 0; + + uw_loc = find_uw(rtty, bit, rx_bits_log, states.verbose); + + while (uw_loc != -1) + if bitand(states.verbose,0x8) + printf("nbits: %d max_packet_len: %d uw_loc: %d\n", nbits, rtty.max_packet_len, uw_loc); + end + + if (uw_loc + rtty.max_packet_len) < nbits + % Now start picking out 7 bit ascii chars from frame. It has some + % structure so we can guess where fields are. I hope we don't get + % RS232 idle bits stuck into it anywhere, ie "bit fields" don't + % change dynamically. + + % dump msg bits so we can use them as a test signal + %msg = rx_bits_log(st:uw_loc-1); + %save -ascii horus_msg.txt msg + + % simulate bit error for testing + %rx_bits_log(st+200) = xor(rx_bits_log(st+100),1); + %rx_bits_sd_log(st+100) = 0; + + [str crc_ok] = extract_ascii(rtty, rx_bits_log, uw_loc); + + if crc_ok == 0 + [str_flipped crc_flipped_ok rx_bits_log] = sd_bit_flipping(rtty, rx_bits_log, rx_bits_sd_log, uw_loc, uw_loc+rtty.max_packet_len); + end + + % update memory of previous packet, we use this to guess where errors may be + if crc_ok || crc_flipped_ok + states.prev_pkt = rx_bits_log(uw_loc+length(rtty.uw):uw_loc+rtty.max_packet_len); + end + + if crc_ok + str = sprintf("%s CRC OK", str); + npackets++; + else + if crc_flipped_ok + str = sprintf("%s fixed", str_flipped); + else + str = sprintf("%s CRC BAD", str); + end + end + printf("%s\n", str); + end + + % look for next packet + + bit = uw_loc + length(rtty.uw); + uw_loc = find_uw(rtty, bit, rx_bits_log, states.verbose); + + endwhile +endfunction + + +% Extract as many binary packets as we can from a great big buffer of bits, +% and send them to the C decoder for FEC decoding. +% horus_l2 can be compiled a bunch of different ways. You need to +% compile with: +% codec2-dev/src$ gcc horus_l2.c -o horus_l2 -Wall -DDEC_RX_BITS -DHORUS_L2_RX + +function corr_log = extract_and_decode_binary_packets(states, binary, rx_bits_log) + corr_log = []; + + % use UWs to delimit start and end of data packets + + bit = 1; + nbits = length(rx_bits_log); + + [uw_loc best_corr corr] = find_uw(binary, bit, rx_bits_log, states.verbose); + corr_log = [corr_log corr]; + + while (uw_loc != -1) + + if (uw_loc+binary.max_packet_len) < nbits + % printf("uw_loc: %d best_corr: %d\n", uw_loc, best_corr); + + % OK we have a packet delimited by two UWs. Lets convert the bit + % stream into bytes and save for decoding + + pin = uw_loc; + for i=1:45 + rx_bytes(i) = rx_bits_log(pin:pin+7) * (2.^(7:-1:0))'; + pin += 8; + %printf("%d 0x%02x\n", i, rx_bytes(i)); + end + + f=fopen("horus_rx_bits_binary.bin","wb"); + fwrite(f, rx_bytes, "uchar"); + fclose(f); + + % optionally write packet to disk to use as horus_tx_bits_binary.txt + f=fopen("horus_rx_bits_binary.txt","wt"); + for i=uw_loc:uw_loc+45*8-1 + fprintf(f, "%d ", rx_bits_log(i)); + end + fclose(f); + + system("../src/horus_l2"); % compile instructions above + end + + bit = uw_loc + length(binary.uw); + [uw_loc best_corr corr] = find_uw(binary, bit, rx_bits_log, states.verbose); + corr_log = [corr_log corr]; + + endwhile + +endfunction + + +% simulation of tx and rx side, add noise, channel impairments ---------------------- +% +% test_frame_mode Description +% 1 BER testing using known test frames +% 2 random bits +% 3 repeating sequence of all symbols +% 4 Horus RTTY +% 5 Horus Binary +% 6 Horus High Speed: A 8x oversampled modem, e.g. Fs=9600, Rs=1200 +% which is the same as Fs=921600 Rs=115200 +% Uses packet based BER counter + +function run_sim(test_frame_mode, M=2, frames = 10, EbNodB = 100, filename="fsk_horus.raw") + timing_offset = 0.0; % see resample() for clock offset below + fading = 0; % modulates tx power at 2Hz with 20dB fade depth, + % to simulate balloon rotating at end of mission + df = 0; % tx tone freq drift in Hz/s + dA = 1; % amplitude imbalance of tones (note this affects Eb so not a gd idea) + + more off + rand('state',1); + randn('state',1); + + % ---------------------------------------------------------------------- + + % sm2000 config ------------------------ + %states = fsk_horus_init(96000, 1200); + %states.f1_tx = 4000; + %states.f2_tx = 5200; + + if test_frame_mode < 4 + % horus rtty config --------------------- + states = fsk_horus_init(8000, 50, M); + end + + if test_frame_mode == 4 + % horus rtty config --------------------- + states = fsk_horus_init(8000, 100, 2); + states.tx_bits_file = "horus_payload_rtty.txt"; % Octave file of bits we FSK modulate + rtty = fsk_horus_init_rtty; + states.ntestframebits = rtty.max_packet_len; + end + + if test_frame_mode == 5 + % horus binary config --------------------- + states = fsk_horus_init(8000, 100, 4); + binary = fsk_horus_init_binary; + states.tx_bits_file = "horus_tx_bits_binary.txt"; % Octave file of bits we FSK modulate + states.ntestframebits = binary.max_packet_len; + end + + if test_frame_mode == 6 + % horus high speed --------------------- + states = fsk_horus_init(Fs=9600, Rs=1200, M=2, P=8, nsym=16); + states.tx_bits_file = "horus_high_speed.bin"; + end + + % Tones must be at least Rs apart for ideal non-coherent FSK + + states.ftx = 900 + 2*states.Rs*(1:states.M); + states.tx_tone_separation = states.ftx(2) - states.ftx(1); + + % ---------------------------------------------------------------------- + + states.verbose = 0x1; + M = states.M; + N = states.N; + P = states.P; + Rs = states.Rs; + nsym = states.nsym; + nbit = states.nbit; + Fs = states.Fs; + states.df(1:M) = df; + states.dA(1:M) = dA; + + % optional noise. Useful for testing performance of waveforms from real world modulators + + EbNo = 10^(EbNodB/10); + variance = states.Fs/(states.Rs*EbNo*states.bitspersymbol); + + % set up tx signal with payload bits based on test mode + + if (test_frame_mode == 1) + % test frame of bits, which we repeat for convenience when BER testing + states.ntestframebits = states.nbit; + test_frame = round(rand(1, states.ntestframebits)); + tx_bits = []; + for i=1:frames+1 + tx_bits = [tx_bits test_frame]; + end + end + + if test_frame_mode == 2 + % random bits, just to make sure sync algs work on random data + tx_bits = round(rand(1, states.nbit*(frames+1))); + end + + if test_frame_mode == 3 + % repeating sequence of all symbols + % great for initial test of demod if nothing else works, + % look for this pattern in rx_bits + if M == 2 + % ...10101... + tx_bits = zeros(1, states.nbit*(frames+1)); + tx_bits(1:2:length(tx_bits)) = 1; + else + % repeat each possible 4fsk symbol + pattern = [0 0 0 1 1 0 1 1]; + %pattern = [0 0 0 1 1 1 1 0]; + nrepeats = states.nbit*(frames+1)/length(pattern); + tx_bits = []; + for b=1:nrepeats + tx_bits = [tx_bits pattern]; + end + %tx_bits = zeros(1, states.nbit*(frames+1)); + end + end + + if (test_frame_mode == 4) || (test_frame_mode == 5) + + % load up a horus msg from disk and modulate that + + test_frame = load(states.tx_bits_file); + ltf = length(test_frame); + ntest_frames = ceil((frames+1)*nbit/ltf); + printf("Generating %d test packets\n", ntest_frames); + + % 1 second of random bits to let estimators lock on + + preamble = round(rand(1,states.Rs)); + + tx_bits = preamble; + for i=1:ntest_frames + tx_bits = [tx_bits test_frame]; + end + + % a packet len of random bits at end fill buffers to deocode final packet + + if test_frame_mode == 4 + postamble = round(rand(1,rtty.max_packet_len)); + else + postamble = round(rand(1,binary.max_packet_len)); + end + tx_bits = [tx_bits postamble]; + end + + if test_frame_mode == 6 + states.verbose += 0x4; + ftmp = fopen(states.tx_bits_file, "rb"); test_frame = fread(ftmp,Inf,"char")'; fclose(ftmp); + states.ntestframebits = length(test_frame); + printf("length test frame: %d\n", states.ntestframebits); + %test_frame = rand(1,states.ntestframebits) > 0.5; + + tx_bits = []; + for i=1:frames+1 + tx_bits = [tx_bits test_frame]; + end + end + + tx = fsk_mod(states, tx_bits); + + %tx = resample(tx, 1000, 1001); % simulated 1000ppm sample clock offset + + if fading + ltx = length(tx); + tx = tx .* (1.1 + cos(2*pi*2*(0:ltx-1)/Fs))'; % min amplitude 0.1, -20dB fade, max 3dB + end + + noise = sqrt(variance)*randn(length(tx),1); + rx = tx + noise; + printf("SNRdB meas: %4.1f\n", 10*log10(var(tx)/var(noise))); + + % dump simulated rx file + + ftx=fopen(filename,"wb"); rxg = rx*1000; fwrite(ftx, rxg, "short"); fclose(ftx); + + timing_offset_samples = round(timing_offset*states.Ts); + st = 1 + timing_offset_samples; + rx_bits_buf = zeros(1,nbit+states.ntestframebits); + x_log = []; + timing_nl_log = []; + norm_rx_timing_log = []; + f_int_resample_log = []; + f_log = []; + EbNodB_log = []; + rx_bits_log = []; + rx_bits_sd_log = []; + + % main loop --------------------------------------------------------------- + + run_frames = floor(length(rx)/N)-1; + for f=1:run_frames + + % extract nin samples from input stream + + nin = states.nin; + en = st + states.nin - 1; + + if en < length(rx) % due to nin variations its possible to overrun buffer + sf = rx(st:en); + st += nin; + + % demodulate to stream of bits + + states = est_freq(states, sf, states.M); + %states.f = 900 + 2*states.Rs*(1:states.M); + %states.f = [1200 1400 1600 1800]; + [rx_bits states] = fsk_demod(states, sf); + + rx_bits_buf(1:states.ntestframebits) = rx_bits_buf(nbit+1:states.ntestframebits+nbit); + rx_bits_buf(states.ntestframebits+1:states.ntestframebits+nbit) = rx_bits; + %rx_bits_buf(1:nbit) = rx_bits_buf(nbit+1:2*nbit); + %rx_bits_buf(nbit+1:2*nbit) = rx_bits; + + rx_bits_log = [rx_bits_log rx_bits]; + rx_bits_sd_log = [rx_bits_sd_log states.rx_bits_sd]; + + norm_rx_timing_log = [norm_rx_timing_log states.norm_rx_timing]; + x_log = [x_log states.x]; + timing_nl_log = [timing_nl_log states.timing_nl]; + f_int_resample_log = [f_int_resample_log abs(states.f_int_resample(:,:))]; + f_log = [f_log; states.f]; + EbNodB_log = [EbNodB_log states.EbNodB]; + + if test_frame_mode == 1 + states = ber_counter(states, test_frame, rx_bits_buf); + end + if test_frame_mode == 6 + states = ber_counter_packet(states, test_frame, rx_bits_buf); + end + end + end + + % print stats, count errors, decode packets ------------------------------------------ + + if (test_frame_mode == 1) || (test_frame_mode == 6) + printf("frames: %d EbNo: %3.2f Tbits: %d Terrs: %d BER %4.3f\n", frames, EbNodB, states.Tbits,states. Terrs, states.Terrs/states.Tbits); + end + + if test_frame_mode == 4 + npackets = extract_and_print_rtty_packets(states, rtty, rx_bits_log, rx_bits_sd_log); + printf("Received %d packets\n", npackets); + end + + if test_frame_mode == 5 + extract_and_decode_binary_packets(states, binary, rx_bits_log); + end + + figure(1); + plot(f_int_resample_log','+') + hold off; + + figure(2) + clf + m = max(abs(x_log)); + plot(x_log,'+') + axis([-m m -m m]) + title('fine timing metric') + + figure(3) + clf + subplot(211) + plot(norm_rx_timing_log); + axis([1 run_frames -1 1]) + title('norm fine timing') + subplot(212) + plot(states.nerr_log) + title('num bit errors each frame') + + figure(4) + clf + subplot(211) + one_sec_rx = rx(1:min(Fs,length(rx))); + plot(one_sec_rx) + title('rx signal at demod input') + subplot(212) + plot(abs(fft(one_sec_rx))) + + figure(5) + clf + plot(f_log,'+') + title('tone frequencies') + axis([1 run_frames 0 Fs/2]) + + figure(6) + clf + plot(EbNodB_log); + title('Eb/No estimate') + + figure(7) + clf + subplot(211) + X = abs(fft(timing_nl_log)); + plot(X(1:length(X)/2)) + subplot(212) + plot(abs(timing_nl_log(1:100))) + + endfunction + + +% --------------------------------------------------------------------- +% demodulate from a user-supplied file +% --------------------------------------------------------------------- + +function rx_bits_log = demod_file(filename, test_frame_mode=4, noplot=0, EbNodB=100, max_frames=1E32) + fin = fopen(filename,"rb"); + more off; + read_complex = 0; sample_size = 'int16'; shift_fs_on_4 = 0; + max_frames + + if test_frame_mode == 4 + % horus rtty config --------------------- + states = fsk_horus_init(8000, 100, 2); + rtty = fsk_horus_init_rtty; + states.ntestframebits = rtty.max_packet_len; + end + + if test_frame_mode == 5 + % horus binary config --------------------- + states = fsk_horus_init(8000, 100, 4); + binary = fsk_horus_init_binary; + states.ntestframebits = binary.max_packet_len; + end + + states.verbose = 0x1 + 0x8; + + if test_frame_mode == 6 + % Horus high speed config -------------- + states = fsk_horus_init(Fs=9600, Rs=1200, M=2, P=8, nsym=16); + states.tx_bits_file = "horus_high_speed.bin"; + states.verbose += 0x4; + ftmp = fopen(states.tx_bits_file, "rb"); test_frame = fread(ftmp,Inf,"char")'; fclose(ftmp); + states.ntestframebits = length(test_frame); + printf("length test frame: %d\n", states.ntestframebits); + end + + if test_frame_mode == 7 + % 800XA 4FSK modem -------------- + states = fsk_init(Fs=8000, Rs=400, M=4, P=10, nsym=256); + states.tx_bits_file = "horus_high_speed.bin"; + states.verbose += 0x4; + ftmp = fopen(states.tx_bits_file, "rb"); test_frame = fread(ftmp,Inf,"char")'; fclose(ftmp); + states.ntestframebits = length(test_frame); + printf("length test frame: %d\n", states.ntestframebits); + end + + if test_frame_mode == 8 + % test RS41 type balllon telemetry -------------- + states = fsk_init(96000, 4800, 2, 10, 16); + states.fest_fmin = 1000; + states.fest_fmax = 40000; + states.fest_min_spacing = 1000; + states.tx_bits_file = "../build_linux/src/tx_bit.bin"; + states.verbose += 0x4; + #ftmp = fopen(states.tx_bits_file, "rb"); test_frame = fread(ftmp,Inf,"char")'; fclose(ftmp); + #states.ntestframebits = length(test_frame); + #printf("length test frame: %d\n", states.ntestframebits); + states.ntestframebits = 1000; + read_complex = 1; + shift_fs_on_4 = 1; % get samples into range of current freq estimator + end + + if test_frame_mode == 9 + % Wenet high speed SSTV, we can just check raw demo here --------------------- + % despite the high sample rate the modem sees this as a 8:1 Fs/Rs configuration + states = fsk_init(8000, 1000, 2); + states.tx_tone_separation = 1000; + states.ntestframebits = (256+2+65)*8+40; % from src/drs232_lpc.c + states.freq_est_type = 'mask'; + read_complex=1; sample_size = 'uint8'; + printf("Wenet mode: ntestframebits: %d freq_est_type: %s\n", states.ntestframebits, states.freq_est_type); + %states.verbose = 0x8; + end + + N = states.N; + P = states.P; + Rs = states.Rs; + nsym = states.nsym; + nbit = states.nbit; + + frames = 0; + rx = []; + rx_bits_log = []; + rx_bits_sd_log = []; + norm_rx_timing_log = []; + f_int_resample_log = []; + EbNodB_log = []; + ppm_log = []; + f_log = []; Sf_log = []; + + rx_bits_buf = zeros(1,nbit + states.ntestframebits); + + % optional noise. Useful for testing performance of waveforms from real world modulators + % we need to pre-read the file to estimate the signal power + ftmp = fopen(filename,"rb"); s = fread(ftmp,Inf,sample_size); fclose(ftmp); + if sample_size == "uint8" s = (s - 127)/128; end + if read_complex s = s(1:2:end) + j*s(2:2:end); end + tx_pwr = var(s); + EbNo = 10^(EbNodB/10); + variance = (tx_pwr/2)*states.Fs/(states.Rs*EbNo*states.bitspersymbol); + + % First extract raw bits from samples ------------------------------------------------------ + + printf("demod of raw bits....\n"); + + finished = 0; ph = 1; + while (finished == 0) + + % extract nin samples from input stream + + nin = states.nin; + if read_complex + [sf count] = fread(fin, 2*nin, sample_size); + if sample_size == "uint8" sf = (sf - 127)/128; end + sf = sf(1:2:end) + j*sf(2:2:end); + count /= 2; + if shift_fs_on_4 + % optional shift up in freq by Fs/4 to get into freq est range + for i=1:count + ph = ph*exp(j*pi/4); + sf(i) *= ph; + end + end + else + [sf count] = fread(fin, nin, "short"); + end + rx = [rx; sf]; + + % add optional noise + + if count + noise = sqrt(variance)*randn(count,1); + sf += noise; + end + + if count == nin + frames++; + + % demodulate to stream of bits + + states = est_freq(states, sf, states.M); + if states.freq_est_type == 'mask' states.f = states.f2; end + [rx_bits states] = fsk_demod(states, sf); + + rx_bits_buf(1:states.ntestframebits) = rx_bits_buf(nbit+1:states.ntestframebits+nbit); + rx_bits_buf(states.ntestframebits+1:states.ntestframebits+nbit) = rx_bits; + + rx_bits_log = [rx_bits_log rx_bits]; + rx_bits_sd_log = [rx_bits_sd_log states.rx_bits_sd]; + norm_rx_timing_log = [norm_rx_timing_log states.norm_rx_timing]; + f_int_resample_log = [f_int_resample_log abs(states.f_int_resample)]; + EbNodB_log = [EbNodB_log states.EbNodB]; + ppm_log = [ppm_log states.ppm]; + f_log = [f_log; states.f]; + Sf_log = [Sf_log; states.Sf']; + + if (test_frame_mode == 1) + states = ber_counter(states, test_frame, rx_bits_buf); + if states.ber_state == 1 + states.verbose = 0; + end + end + if (test_frame_mode == 6) % || (test_frame_mode == 8) + states = ber_counter_packet(states, test_frame, rx_bits_buf); + end + else + finished = 1; + end + + if frames > max_frames finished=1; end + + end + printf("frames: %d\n", frames); + fclose(fin); + + if noplot == 0 + printf("plotting...\n"); + + figure(1); clf; + plot(f_log); + title('Tone Freq Estimates'); + + figure(2); + plot(f_int_resample_log','+') + title('Integrator outputs for each tone'); + + figure(3); clf + subplot(211) + plot(norm_rx_timing_log) + axis([1 frames -0.5 0.5]) + title('norm fine timing') + subplot(212) + plot(states.nerr_log) + title('num bit errors each frame') + + figure(4); clf + plot(EbNodB_log); + title('Eb/No estimate') + + figure(5); clf + rx_nowave = rx(1000:length(rx)); % skip past wav header if it's a wave file + subplot(211) + plot(real(rx_nowave)); + title('input signal to demod (1 sec)') + xlabel('Time (samples)'); + %axis([1 states.Fs -35000 35000]) + + % normalise spectrum to 0dB full scale with sine wave input + subplot(212); + if sample_size == "int16" max_value = 32767; end + if sample_size == "uint8" max_value = 127; end + RxdBFS = 20*log10(abs(fft(rx_nowave(1:states.Fs)))) - 20*log10((states.Fs/2)*max_value); + plot(RxdBFS) + axis([1 states.Fs/2 -80 0]) + xlabel('Frequency (Hz)'); + + figure(6); clf + plot(ppm_log) + title('Sample clock (baud rate) offset in PPM'); + + figure(7); clf; mesh(Sf_log(1:10,:)); + end + + if (test_frame_mode == 1) || (test_frame_mode == 6) + printf("frames: %d Tbits: %d Terrs: %d BER %4.3f EbNo: %3.2f\n", frames, states.Tbits,states. Terrs, states.Terrs/states.Tbits, mean(EbNodB_log)); + end + + % we can decode both protocols at the same time + + if (test_frame_mode == 4) + npackets = extract_and_print_rtty_packets(states, rtty, rx_bits_log, rx_bits_sd_log) + printf("Received %d packets\n", npackets); + end + + if (test_frame_mode == 5) + corr_log = extract_and_decode_binary_packets(states, binary, rx_bits_log); + + figure(8); + clf + plot(corr_log); + hold on; + plot([1 length(corr_log)],[binary.uw_thresh binary.uw_thresh],'g'); + hold off; + title('UW correlation'); + end + +endfunction + + +% Over the years this modem has been used for many different FSK signals ... + +if exist("fsk_horus_as_a_lib") == 0 + run_sim(test_frame_mode=4, M=2, frames=30, EbNodB = 20); + %run_sim(5, 4, 30, 100); + %rx_bits = demod_file("~/Desktop/115.wav",6,0,90); + %rx_bits = demod_file("~/Desktop/fsk_800xa_rx_hackrf.wav",7); + %rx_bits = demod_file("~/Desktop/2fsk_100_rx_rpi_rtlsdr_002_ledger.wav",4); + %rx_bits = demod_file("~/Desktop/phorus_binary_ascii.wav",4); + %rx_bits = demod_file("~/Desktop/binary/horus_160102_binary_rtty_2.wav",4); + %rx_bits = demod_file("~/Desktop/horus_160102_vk5ei_capture2.wav",4); + %rx_bits = demod_file("~/Desktop/horus_rtty_binary.wav",4); + %rx_bits = demod_file("~/Desktop/FSK_4FSK.wav",4); + %rx_bits = demod_file("t.raw",5); + %rx_bits = demod_file("~/Desktop/fsk_horus_10dB_1000ppm.wav",4); + %rx_bits = demod_file("~/Desktop/fsk_horus_6dB_0ppm.wav",4); + %rx_bits = demod_file("test.raw",1,1); + %rx_bits = .rawdemod_file("/dev/ttyACM0",1); + %rx_bits = demod_file("fsk_horus_rx_1200_96k.raw",1); + %rx_bits = demod_file("mp.raw",4); + %rx_bits = demod_file("~/Desktop/launchbox_v2_landing_8KHz_final.wav",4); + %rx_bits = demod_file("~/Desktop/fsk_800xa.wav",7); + %rx_bits = demod_file("~/Desktop/rs41_96k_10s.iq16",8); +end diff --git a/libcodec2-android/src/codec2/octave/fsk_lib.m b/libcodec2-android/src/codec2/octave/fsk_lib.m new file mode 100644 index 0000000..6d04660 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/fsk_lib.m @@ -0,0 +1,469 @@ +% fsk_lib.m +% David Rowe Oct 2015 - present +% +% mFSK modem, started out life as RTTY demodulator for Project +% Horus High Altitude Ballon (HAB) telemetry, also used for: +% +% FreeDV 2400A: 4FSK UHF/UHF digital voice +% Wenet.......: 100 kbit/s HAB High Def image telemetry +% +% Handles frequency offsets, performance right on ideal, C implementation +% in codec2/src + +1; + +function states = fsk_init(Fs, Rs, M=2, P=8, nsym=50) + states.M = M; + states.bitspersymbol = log2(M); + states.Fs = Fs; + states.Rs = Rs; + + states.nsym = nsym; % Number of symbols processed by demodulator in each call, also + % the timing estimator window + Ts = states.Ts = Fs/Rs; % number of samples per symbol + assert(Ts == floor(Ts), "Fs/Rs must be an integer"); + + N = states.N = Ts*states.nsym; % processing buffer size, nice big window for timing est + bin_width_Hz = 0.1*Rs; % we want enough DFT bins to get within 10% of the tones centre + Ndft = Fs/bin_width_Hz; + states.Ndft = 2.^ceil(log2(Ndft)); % round to nearest power of 2 for efficent FFT + states.Sf = zeros(states.Ndft,1); % current memory of dft mag samples + states.tc = 0.1; % average DFT over longtime window, accurate at low Eb/No, but slow + + states.nbit = states.nsym*states.bitspersymbol; % number of bits per processing frame + Nmem = states.Nmem = N+2*Ts; % two symbol memory in down converted signals to allow for timing adj + + states.f_dc = zeros(M,Nmem); + states.P = P; % oversample rate out of filter + assert(Ts/states.P == floor(Ts/states.P), "Ts/P must be an integer"); + + states.tx_tone_separation = 2*Rs; + states.nin = N; % can be N +/- Ts/P samples to adjust for sample clock offsets + states.verbose = 0; + states.phi = zeros(1, M); % keep down converter osc phase continuous + + % BER stats + + states.ber_state = 0; + states.ber_valid_thresh = 0.05; states.ber_invalid_thresh = 0.1; + states.Tbits = 0; + states.Terrs = 0; + states.nerr_log = 0; + + % extra simulation parameters + + states.tx_real = 1; + states.dA(1:M) = 1; + states.df(1:M) = 0; + states.f(1:M) = 0; + states.norm_rx_timing = 0; + states.ppm = 0; + states.prev_pkt = []; + + % Freq. estimator limits + states.fest_fmax = Fs; + states.fest_fmin = 0; + states.fest_min_spacing = 0.75*Rs; + states.freq_est_type = 'peak'; + + %printf("Octave: M: %d Fs: %d Rs: %d Ts: %d nsym: %d nbit: %d N: %d Ndft: %d fmin: %d fmax: %d\n", + % states.M, states.Fs, states.Rs, states.Ts, states.nsym, states.nbit, states.N, states.Ndft, states.fest_fmin, states.fest_fmax); + +endfunction + + +% modulator function + +function tx = fsk_mod(states, tx_bits) + + M = states.M; + Ts = states.Ts; + Fs = states.Fs; + ftx = states.ftx; + df = states.df; % tone freq change in Hz/s + dA = states.dA; % amplitude of each tone + + num_bits = length(tx_bits); + num_symbols = num_bits/states.bitspersymbol; + tx = zeros(states.Ts*num_symbols,1); + tx_phase = 0; + s = 1; + + for i=1:states.bitspersymbol:num_bits + + % map bits to FSK symbol (tone number) + + K = states.bitspersymbol; + tone = tx_bits(i:i+(K-1)) * (2.^(K-1:-1:0))' + 1; + + tx_phase_vec = tx_phase + (1:Ts)*2*pi*ftx(tone)/Fs; + tx_phase = tx_phase_vec(Ts) - floor(tx_phase_vec(Ts)/(2*pi))*2*pi; + if states.tx_real + tx((s-1)*Ts+1:s*Ts) = dA(tone)*2.0*cos(tx_phase_vec); + else + tx((s-1)*Ts+1:s*Ts) = dA(tone)*exp(j*tx_phase_vec); + end + s++; + + % freq drift + + ftx += df*Ts/Fs; + end + states.ftx = ftx; +endfunction + + +% Estimate the frequency of the FSK tones. In some applications (such +% as balloon telemetry) these may not be well controlled by the +% transmitter, so we have to try to estimate them. + +function states = est_freq(states, sf, ntones) + N = states.N; + Ndft = states.Ndft; + Fs = states.Fs; + + % This assumption is OK for balloon telemetry but may not be true in + % general + + min_tone_spacing = states.fest_min_spacing; + + % set some limits to search range, which will mean some manual re-tuning + + fmin = states.fest_fmin; + fmax = states.fest_fmax; + % note 0 Hz is mapped to Ndft/2+1 via fftshift + st = floor(fmin*Ndft/Fs) + Ndft/2; st = max(1,st); + en = floor(fmax*Ndft/Fs) + Ndft/2; en = min(Ndft,en); + + #printf("Fs: %f Ndft: %d fmin: %f fmax: %f st: %d en: %d\n",Fs, Ndft, fmin, fmax, st, en) + + % Update mag DFT --------------------------------------------- + + % we break up input buffer to a series of overlapping Ndft sequences + numffts = floor(length(sf)/(Ndft/2)) - 1; + h = hanning(Ndft); + for i=1:numffts + a = (i-1)*Ndft/2+1; b = a + Ndft - 1; + Sf = abs(fftshift(fft(sf(a:b) .* h, Ndft))); + + % Smooth DFT mag spectrum, slower to respond to changes but more + % accurate. Single order IIR filter is an exponentially weighted + % moving average. This means the freq est window is wider than + % timing est window + tc = states.tc; states.Sf = (1-tc)*states.Sf + tc*Sf; + end + + % Search for each tone method 1 - peak pick each tone location ---------------------------------- + + f = []; a = []; + Sf = states.Sf; + for m=1:ntones + [tone_amp tone_index] = max(Sf(st:en)); + tone_index += st - 1; + + f = [f (tone_index-1-Ndft/2)*Fs/Ndft]; + a = [a tone_amp]; + + % zero out region min_tone_spacing either side of max so we can find next highest peak + % closest spacing for non-coh mFSK is Rs + + stz = tone_index - floor((min_tone_spacing)*Ndft/Fs); + stz = max(1,stz); + enz = tone_index + floor((min_tone_spacing)*Ndft/Fs); + enz = min(Ndft,enz); + Sf(stz:enz) = 0; + end + + states.f = sort(f); + + % Search for each tone method 2 - correlate with mask with non-zero entries at tone spacings ----- + + % Create a mask with non-zero entries at tone spacing. Might be + % smarter to use the DFT of a hanning window as mask + + mask = zeros(1,Ndft); + mask(1:3) = 1; + for m=1:ntones-1 + bin = round(m*states.tx_tone_separation*Ndft/Fs); + mask(bin:bin+2) = 1; + end + mask = mask(1:bin+2); + states.mask = mask; + + % drag mask over Sf, looking for peak in correlation + b_max = st; corr_max = 0; + Sf = states.Sf; corr_log = []; + for b=st:en-length(mask) + corr = mask * Sf(b:b+length(mask)-1); + corr_log = [corr_log corr]; + if corr > corr_max + corr_max = corr; + b_max = b; + end + end + foff = ((b_max-1)-Ndft/2)*Fs/Ndft; + + if bitand(states.verbose, 0x8) + % enable this to single step through frames + figure(1); clf; subplot(211); plot(Sf,'b;sf;'); + hold on; plot(max(Sf)*[zeros(1,b_max) mask],'g;mask;'); hold off; + subplot(212); plot(corr_log); ylabel('corr against f'); + printf("foff: %4.0f\n", foff); + kbhit; + end + states.f2 = foff + (0:ntones-1)*states.tx_tone_separation; +end + + +% ------------------------------------------------------------------------------------ +% Given a buffer of nin input Rs baud FSK samples, returns nsym bits. +% +% nin is the number of input samples required by demodulator. This is +% time varying. It will nominally be N (8000), and occasionally N +/- +% Ts/2 (e.g. 8080 or 7920). This is how we compensate for differences between the +% remote tx sample clock and our sample clock. This function always returns +% N/Ts (e.g. 50) demodulated bits. Variable number of input samples, constant number +% of output bits. + +function [rx_bits states] = fsk_demod(states, sf) + M = states.M; + N = states.N; + Ndft = states.Ndft; + Fs = states.Fs; + Rs = states.Rs; + Ts = states.Ts; + nsym = states.nsym; + P = states.P; + nin = states.nin; + verbose = states.verbose; + Nmem = states.Nmem; + f = states.f; + + assert(length(sf) == nin); + + % down convert and filter at rate P ------------------------------ + + % update filter (integrator) memory by shifting in nin samples + + nold = Nmem-nin; % number of old samples we retain + + f_dc = states.f_dc; + f_dc(:,1:nold) = f_dc(:,Nmem-nold+1:Nmem); + + % freq shift down to around DC, ensuring continuous phase from last frame, as nin may vary + for m=1:M + phi_vec = states.phi(m) + (1:nin)*2*pi*f(m)/Fs; + f_dc(m,nold+1:Nmem) = sf .* exp(j*phi_vec)'; + states.phi(m) = phi_vec(nin); + states.phi(m) -= 2*pi*floor(states.phi(m)/(2*pi)); + end + % save filter (integrator) memory for next time + states.f_dc = f_dc; + + % integrate over symbol period, which is effectively a LPF, removing + % the -2Fc frequency image. Can also be interpreted as an ideal + % integrate and dump, non-coherent demod. We run the integrator at + % rate P*Rs (1/P symbol offsets) to get outputs at a range of + % different fine timing offsets. We calculate integrator output + % over nsym+1 symbols so we have extra samples for the fine timing + % re-sampler at either end of the array. + + f_int = zeros(M,(nsym+1)*P); + for i=1:(nsym+1)*P + st = 1 + (i-1)*Ts/P; + en = st+Ts-1; + for m=1:M + f_int(m,i) = sum(f_dc(m,st:en)); + end + end + states.f_int = f_int; + + % fine timing estimation ----------------------------------------------- + + % Non linearity has a spectral line at Rs, with a phase + % related to the fine timing offset. See: + % http://www.rowetel.com/blog/?p=3573 + % We have sampled the integrator output at Fs=P samples/symbol, so + % lets do a single point DFT at w = 2*pi*f/Fs = 2*pi*Rs/(P*Rs) + % + % Note timing non-linearity derived by experiment. Not quite sure what I'm doing here..... + % but it gives 0dB impl loss for 2FSK Eb/No=9dB, testmode 1: + % Fs: 8000 Rs: 50 Ts: 160 nsym: 50 + % frames: 200 Tbits: 9700 Terrs: 93 BER 0.010 + + Np = length(f_int(1,:)); + w = 2*pi*(Rs)/(P*Rs); + timing_nl = sum(abs(f_int(:,:)).^2); + x = timing_nl * exp(-j*w*(0:Np-1))'; + norm_rx_timing = angle(x)/(2*pi); + rx_timing = norm_rx_timing*P; + + states.x = x; + states.timing_nl = timing_nl; + states.rx_timing = rx_timing; + prev_norm_rx_timing = states.norm_rx_timing; + states.norm_rx_timing = norm_rx_timing; + + % estimate sample clock offset in ppm + % d_norm_timing is fraction of symbol period shift over nsym symbols + + d_norm_rx_timing = norm_rx_timing - prev_norm_rx_timing; + + % filter out big jumps due to nin changes + + if abs(d_norm_rx_timing) < 0.2 + appm = 1E6*d_norm_rx_timing/nsym; + states.ppm = 0.9*states.ppm + 0.1*appm; + end + + % work out how many input samples we need on the next call. The aim + % is to keep angle(x) away from the -pi/pi (+/- 0.5 fine timing + % offset) discontinuity. The side effect is to track sample clock + % offsets + + next_nin = N; + if norm_rx_timing > 0.25 + next_nin += Ts/4; + end + if norm_rx_timing < -0.25; + next_nin -= Ts/4; + end + states.nin = next_nin; + + % Now we know the correct fine timing offset, Re-sample integrator + % outputs using fine timing estimate and linear interpolation, then + % extract the demodulated bits + + low_sample = floor(rx_timing); + fract = rx_timing - low_sample; + high_sample = ceil(rx_timing); + + if bitand(verbose,0x2) + printf("rx_timing: %3.2f low_sample: %d high_sample: %d fract: %3.3f nin_next: %d\n", rx_timing, low_sample, high_sample, fract, next_nin); + end + + f_int_resample = zeros(M,nsym); + rx_bits = zeros(1,nsym*states.bitspersymbol); + tone_max = zeros(1,nsym); + rx_nse_pow = 1E-12; rx_sig_pow = 0.0; + + for i=1:nsym + st = i*P+1; + f_int_resample(:,i) = f_int(:,st+low_sample)*(1-fract) + f_int(:,st+high_sample)*fract; + + % Hard decision decoding, Largest amplitude tone is the winner. + % Map this FSK "symbol" back to bits, depending on M + + [tone_max(i) tone_index] = max(f_int_resample(:,i)); + st = (i-1)*states.bitspersymbol + 1; + en = st + states.bitspersymbol-1; + arx_bits = dec2bin(tone_index - 1, states.bitspersymbol) - '0'; + rx_bits(st:en) = arx_bits; + + % each filter is the DFT of a chunk of spectrum. If there is no tone in the + % filter it can be considered an estimate of noise in that bandwidth + rx_pows = f_int_resample(:,i) .* conj(f_int_resample(:,i)); + rx_sig_pow += rx_pows(tone_index); + rx_nse_pow += (sum(rx_pows) - rx_pows(tone_index))/(M-1); + end + + states.f_int_resample = f_int_resample; + + % Eb/No estimation (todo: this needs some work, like calibration, low Eb/No perf, work for all M) + tone_max = abs(tone_max); + states.EbNodB = -6 + 20*log10(1E-6+mean(tone_max)/(1E-6+std(tone_max))); + + % Estimators for LDPC decoder, might be a bit rough if nsym is small + rx_sig_pow = rx_sig_pow/nsym; + rx_nse_pow = rx_nse_pow/nsym; + states.v_est = sqrt(rx_sig_pow-rx_nse_pow); + states.SNRest = rx_sig_pow/rx_nse_pow; +endfunction + + +% BER counter and test frame sync logic ------------------------------------------- +% We look for test_frame in rx_bits_buf, rx_bits_buf must be twice as long as test_frame + +function states = ber_counter(states, test_frame, rx_bits_buf) + nbit = length(test_frame); + assert (length(rx_bits_buf) == 2*nbit); + state = states.ber_state; + next_state = state; + + if state == 0 + + % try to sync up with test frame + + nerrs_min = nbit; + for i=1:nbit + error_positions = xor(rx_bits_buf(i:nbit+i-1), test_frame); + nerrs = sum(error_positions); + if nerrs < nerrs_min + nerrs_min = nerrs; + states.coarse_offset = i; + end + end + if nerrs_min/nbit < states.ber_valid_thresh + next_state = 1; + end + if bitand(states.verbose,0x4) + printf("coarse offset: %d nerrs_min: %d next_state: %d\n", states.coarse_offset, nerrs_min, next_state); + end + states.nerr = nerrs_min; + end + + if state == 1 + + % we're synced up, lets measure bit errors + + error_positions = xor(rx_bits_buf(states.coarse_offset:states.coarse_offset+nbit-1), test_frame); + nerrs = sum(error_positions); + if nerrs/nbit > states.ber_invalid_thresh + next_state = 0; + if bitand(states.verbose,0x4) + printf("coarse offset: %d nerrs: %d next_state: %d\n", states.coarse_offset, nerrs, next_state); + end + else + states.Terrs += nerrs; + states.Tbits += nbit; + states.nerr_log = [states.nerr_log nerrs]; + end + states.nerr = nerrs; + end + + states.ber_state = next_state; +endfunction + + +% Alternative stateless BER counter that works on packets that may have gaps between them + +function states = ber_counter_packet(states, test_frame, rx_bits_buf) + ntestframebits = states.ntestframebits; + nbit = states.nbit; + + % look for offset with min errors + + nerrs_min = ntestframebits; coarse_offset = 1; + for i=1:nbit + error_positions = xor(rx_bits_buf(i:ntestframebits+i-1), test_frame); + nerrs = sum(error_positions); + %printf("i: %d nerrs: %d\n", i, nerrs); + if nerrs < nerrs_min + nerrs_min = nerrs; + coarse_offset = i; + end + end + + % if less than threshold count errors + + if nerrs_min/ntestframebits < 0.05 + states.Terrs += nerrs_min; + states.Tbits += ntestframebits; + states.nerr_log = [states.nerr_log nerrs_min]; + if bitand(states.verbose, 0x4) + printf("coarse_offset: %d nerrs_min: %d\n", coarse_offset, nerrs_min); + end + end +endfunction + + diff --git a/libcodec2-android/src/codec2/octave/fsk_lib_demo.m b/libcodec2-android/src/codec2/octave/fsk_lib_demo.m new file mode 100644 index 0000000..c6d83b6 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/fsk_lib_demo.m @@ -0,0 +1,101 @@ +% fsk_lib_demo.m +% Uncoded FSK modem demo + +fsk_lib; + +% set up waveform +function [states M bits_per_frame] = modem_init(Rs,Fs,df) + M = 4; + states = fsk_init(Fs,Rs,M,P=8,nsym=100); + bits_per_frame = 512; + states.tx_real = 0; % complex signal + states.tx_tone_separation = 250; + states.ftx = -2.5*states.tx_tone_separation + states.tx_tone_separation*(1:M); + states.fest_fmin = -Fs/2; + states.fest_fmax = +Fs/2; + states.fest_min_spacing = Rs/2; + states.df = df; + + states.ber_valid_thresh = 0.1; + states.ber_invalid_thresh = 0.2; +end + +% Run a complete modem (freq and timing estimators running) at a +% single Eb/No point. At low Eb/No the estimators occasionally fall +% over so we get complete junk, we consider that case a packet error +% and exclude it from the BER estimation. + +function [states ber per] = modem_run_test(EbNodB = 10, num_frames=10, Fs=8000, Rs=100, df=0, plots=0) + randn('state',1); rand('state',1); + [states M bits_per_frame] = modem_init(Rs, Fs, df); + N = states.N; + if plots; states.verbose = 0x4; end + EbNo = 10^(EbNodB/10); + variance = states.Fs/(states.Rs*EbNo*states.bitspersymbol); + + nbits = bits_per_frame*num_frames; + test_frame = round(rand(1,bits_per_frame)); tx_bits = []; + for f=1:num_frames + tx_bits = [tx_bits test_frame]; + end + + tx = fsk_mod(states, tx_bits); + noise = sqrt(variance/2)*randn(length(tx),1) + j*sqrt(variance/2)*randn(length(tx),1); + rx = tx + noise; + + run_frames = floor(length(rx)/N)-1; + st = 1; f_log = []; f_log2 = []; rx_bits = []; rx_bits2 = []; + for f=1:run_frames + + % extract nin samples from input stream + nin = states.nin; + en = st + states.nin - 1; + + % due to nin variations it's possible to overrun buffer + if en < length(rx) + sf = rx(st:en); + states = est_freq(states, sf, states.M); states.f = states.f2; + [arx_bits states] = fsk_demod(states, sf); + rx_bits = [rx_bits arx_bits]; + f_log = [f_log; states.f]; + st += nin; + end + end + + num_frames=floor(length(rx_bits)/bits_per_frame); + log_nerrs = []; num_frames_rx = 0; + for f=1:num_frames-1 + st = (f-1)*bits_per_frame + 1; en = (f+1)*bits_per_frame; + states = ber_counter(states, test_frame, rx_bits(st:en)); + log_nerrs = [log_nerrs states.nerr]; + if states.ber_state; num_frames_rx++; end + end + if states.Terrs + printf("Fs: %d Rs: %d df % 3.2f EbNo: %4.2f ftx: %3d frx: %3d nbits: %4d nerrs: %3d ber: %4.3f\n", + Fs, Rs, df, EbNodB, num_frames, num_frames_rx, states.Tbits, states.Terrs, states.Terrs/states.Tbits); + ber = states.Terrs/states.Tbits; + else + ber = 0.5; + end + + if plots + figure(1); clf; + ideal=ones(length(f_log),1)*states.ftx; + plot((1:length(f_log)),ideal(:,1),'bk;ideal;') + hold on; plot((1:length(f_log)),ideal(:,2:states.M),'bk'); hold off; + hold on; + plot(f_log(:,1), 'linewidth', 2, 'b;peak;'); + plot(f_log(:,2:states.M), 'linewidth', 2, 'b'); + hold off; + xlabel('Time (frames)'); ylabel('Frequency (Hz)'); + figure(2); clf; plot(log_nerrs); title('Errors per frame'); + end + + per = 1 - num_frames_rx/num_frames; +end + +[states ber per] = modem_run_test(EbNodB=6); +BER_theory=0.01579; % for Eb/No = 6dB +if ber < 1.5*BER_theory + printf("PASS\n"); +end diff --git a/libcodec2-android/src/codec2/octave/fsk_lib_ldpc.m b/libcodec2-android/src/codec2/octave/fsk_lib_ldpc.m new file mode 100644 index 0000000..9275636 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/fsk_lib_ldpc.m @@ -0,0 +1,45 @@ +% fsk_lib_ldpc.m +% +% Library of common functions used for LDPC coded 4FSK modem experiments + +fsk_lib; +ldpc; + +% set up modem waveform, real signal that an pass through a SSB radio +function [states M] = modem_init(Rs,Fs,df) + M = 4; + if Rs == 100 P=8; end + if Rs == 400 P=10; end; + states = fsk_init(Fs,Rs,M,P=10,nsym=100); + states.tx_real = 1; + states.tx_tone_separation = Rs; + if Rs == 100 + states.ftx = 1500 -2.5*states.tx_tone_separation + states.tx_tone_separation*(1:M); + elseif Rs == 400 + states.ftx = 600 + states.tx_tone_separation*(0:M-1); + else + disp("unknown symbol rate"); + end + states.fest_fmin = 500; + states.fest_fmax = 2500; + states.fest_min_spacing = Rs/2; + states.df = df; + + states.ber_valid_thresh = 0.1; + states.ber_invalid_thresh = 0.2; + + states.amp_scale = 1000; +end + +% set up modem waveform and LPC code +function [states code_param] = fsk_lib_ldpc_init (HRA, Rs, Fs, df=0, plots=0) + [states M] = modem_init(Rs, Fs, df); + N = states.N; + if plots; states.verbose = 0x4; end + + Hsize=size(HRA); + states.rate = (Hsize(2)-Hsize(1))/Hsize(2); + code_param = ldpc_init_user(HRA, modulation='FSK', mod_order=states.M, mapping='gray'); + states.coden = code_param.coded_bits_per_frame; + states.codek = code_param.data_bits_per_frame; +end diff --git a/libcodec2-android/src/codec2/octave/fsk_lib_ldpc_demo.m b/libcodec2-android/src/codec2/octave/fsk_lib_ldpc_demo.m new file mode 100644 index 0000000..31019df --- /dev/null +++ b/libcodec2-android/src/codec2/octave/fsk_lib_ldpc_demo.m @@ -0,0 +1,171 @@ +% fsk_lib_ldpc_demo.m +% +% LDPC coded 4FSK modem demo, demonstrating soft dec using CML library functions + +fsk_lib; +ldpc; + +% set up waveform +function [states M] = modem_init(Rs,Fs,df) + M = 4; + states = fsk_init(Fs,Rs,M,P=8,nsym=100); + states.tx_real = 0; + states.tx_tone_separation = 250; + states.ftx = -2.5*states.tx_tone_separation + states.tx_tone_separation*(1:M); + states.fest_fmin = -Fs/2; + states.fest_fmax = +Fs/2; + states.fest_min_spacing = Rs/2; + states.df = df; + + states.ber_valid_thresh = 0.1; + states.ber_invalid_thresh = 0.2; +end + +% Run a complete modem (freq and timing estimators running) at a +% single Eb/No point. At low Eb/No the estimators occasionally fall +% over so we get complete junk, we consider that case a packet error +% and exclude it from the BER estimation. + +function [states uber cber cper] = modem_run_test(HRA, EbNodB = 10, num_frames=10, Fs=8000, Rs=100, df=0, plots=0) + [states M] = modem_init(Rs, Fs, df); + N = states.N; + if plots; states.verbose = 0x4; end + + % set up LDPC code + Hsize=size(HRA); + Krate = (Hsize(2)-Hsize(1))/Hsize(2); states.rate = Krate; + code_param = ldpc_init_user(HRA, modulation='FSK', mod_order=states.M, mapping='gray'); + states.coden = code_param.coded_bits_per_frame; + states.codek = code_param.data_bits_per_frame; + + % set up AWGN noise + EcNodB = EbNodB + 10*log10(Krate); + EcNo = 10^(EcNodB/10); + variance = states.Fs/(states.Rs*EcNo*states.bitspersymbol); + + data_bits = round(rand(1,code_param.data_bits_per_frame)); tx_bits = []; + for f=1:num_frames + codeword_bits = LdpcEncode(data_bits, code_param.H_rows, code_param.P_matrix); + tx_bits = [tx_bits codeword_bits]; + end + + % modulator and AWGN channel + tx = fsk_mod(states, tx_bits); + noise = sqrt(variance/2)*randn(length(tx),1) + j*sqrt(variance/2)*randn(length(tx),1); + rx = tx + noise; + + % freq estimator and demod + run_frames = floor(length(rx)/N)-1; + st = 1; f_log = []; rx_bits = []; rx_filt = []; + for f=1:run_frames + + % extract nin samples from input stream + nin = states.nin; + en = st + states.nin - 1; + + % due to nin variations it's possible to overrun buffer + if en < length(rx) + sf = rx(st:en); + states = est_freq(states, sf, states.M); states.f = states.f2; + [arx_bits states] = fsk_demod(states, sf); + rx_bits = [rx_bits arx_bits]; + rx_filt = [rx_filt abs(states.f_int_resample)]; + f_log = [f_log; states.f]; + st += nin; + end + end + + % count bit errors in test frames + + num_frames=floor(length(rx_bits)/code_param.coded_bits_per_frame); + log_nerrs = []; num_frames_rx = 0; Tbits = Terrs = Tperr = Tpackets = 0; + uber = cber = 0.5; cper = 1; + for f=1:num_frames-1 + st = (f-1)*code_param.coded_bits_per_frame + 1; en = (f+1)*code_param.coded_bits_per_frame; + states = ber_counter(states, codeword_bits, rx_bits(st:en)); + log_nerrs = [log_nerrs states.nerr]; + if states.ber_state num_frames_rx++; end + + % Using sync provided by ber_counter() state machine for LDPC frame alignment + if states.ber_state + st_bit = (f-1)*code_param.coded_bits_per_frame + states.coarse_offset; + st_symbol = (st_bit-1)/states.bitspersymbol + 1; + en_symbol = st_symbol + code_param.coded_bits_per_frame/states.bitspersymbol - 1; + %printf("coded_bits: %d bps: %d st_bit: %d st_symbol: %d en_symbol: %d\n", + %code_param.coded_bits_per_frame, states.bitspersymbol, st_bit, st_symbol, en_symbol); + + % map FSK filter ouputs to LLRs, then LDPC decode (see also fsk_cml_sam.m) + symL = DemodFSK(1/states.v_est*rx_filt(:,st_symbol:en_symbol), states.SNRest, 1); + llr = -Somap(symL); + [x_hat, PCcnt] = MpDecode(llr, code_param.H_rows, code_param.H_cols, max_iterations=100, decoder_type=0, 1, 1); + Niters = sum(PCcnt~=0); + detected_data = x_hat(Niters,:); + Nerrs = sum(xor(data_bits, detected_data(1:code_param.data_bits_per_frame))); + Terrs += Nerrs; + Tbits += code_param.data_bits_per_frame; + if Nerrs Tperr++; end + Tpackets++; + end + end + + if states.Terrs + printf("Fs: %d Rs: %d df % 3.2f EbNo: %4.2f ftx: %3d frx: %3d\n",Fs, Rs, df, EbNodB, num_frames, num_frames_rx); + uber = states.Terrs/states.Tbits; cber = Terrs/Tbits; cper = Tperr/Tpackets; + printf(" Uncoded: nbits: %6d nerrs: %6d ber: %4.3f\n", states.Tbits, states.Terrs, uber); + printf(" Coded..: nbits: %6d nerrs: %6d ber: %4.3f\n", Tbits, Terrs, cber); + printf(" Coded..: npckt: %6d perrs: %6d per: %4.3f\n", Tpackets, Tperr, cper); + end + + if plots + figure(1); clf; + ideal=ones(length(f_log),1)*states.ftx; + plot((1:length(f_log)),ideal(:,1),'bk;ideal;') + hold on; plot((1:length(f_log)),ideal(:,2:states.M),'bk'); hold off; + hold on; + plot(f_log(:,1), 'linewidth', 2, 'b;peak;'); + plot(f_log(:,2:states.M), 'linewidth', 2, 'b'); + hold off; + xlabel('Time (frames)'); ylabel('Frequency (Hz)'); + figure(2); clf; plot(log_nerrs); title('Errors per frame'); + end + +end + + +function freq_run_curve_peak_mask(HRA, num_frames=100) + + EbNodB = 4:10; + m4fsk_ber_theory = [0.23 0.18 0.14 0.09772 0.06156 0.03395 0.01579 0.00591 0.00168 3.39E-4]; + uber_log = []; cber_log = []; cper_log = []; + for ne = 1:length(EbNodB) + [states uber cber cper] = modem_run_test(HRA, EbNodB(ne), num_frames); + uber_log = [uber_log uber]; cber_log = [cber_log cber]; cper_log = [cper_log cper]; + end + + figure(1); clf; + EbNodB_raw = EbNodB+10*log10(states.rate) + semilogy(EbNodB_raw, m4fsk_ber_theory(round(EbNodB_raw+1)), 'linewidth', 2, 'bk+-;uber theory;'); + grid; hold on; + semilogy(EbNodB_raw, uber_log+1E-12, 'linewidth', 2, '+-;uber;'); + semilogy(EbNodB, cber_log+1E-12, 'linewidth', 2, 'r+-;cber;'); + semilogy(EbNodB, cper_log+1E-12, 'linewidth', 2, 'c+-;cper;'); hold off; + xlabel('Eb/No (info bits, dB)'); ylabel('BER/PER'); axis([min(EbNodB_raw) max(EbNodB) 1E-4 1]); + title(sprintf("%dFSK rate %3.1f (%d,%d) Ncodewords=%d NCodewordBits=%d Fs=%d Rs=%d", + states.M, states.rate, states.coden, states.codek, num_frames, states.Tbits, states.Fs, states.Rs)); + print("fsk_lib_ldpc.png", "-dpng") +end + +% Choose simulation here --------------------------------------------------- + +init_cml('~/cml/'); +load H_256_512_4.mat; HRA=H; +more off; + +% single point +[states uber cber cper] = modem_run_test(HRA, EbNodB=8); +if cber == 0 + printf("PASS\n"); +end + +% curve +%freq_run_curve_peak_mask(HRA, 200) diff --git a/libcodec2-android/src/codec2/octave/fsk_lib_ldpc_rx.m b/libcodec2-android/src/codec2/octave/fsk_lib_ldpc_rx.m new file mode 100644 index 0000000..b78c065 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/fsk_lib_ldpc_rx.m @@ -0,0 +1,102 @@ +% fsk_lib_ldpc_rx.m +% +% LDPC coded 4FSK modem rx, reads 8 kHz 16 bit short raw file of real samples and demodulates + +function fsk_lib_ldpc_rx(filename, Rs=100, coderate=0.5) + fsk_lib_ldpc; + + % set up LDPC code + init_cml('~/cml/'); + if coderate == 0.5 + load H_256_512_4.mat; + elseif coderate == 0.75 + load HRAa_1536_512.mat; H=HRA; + else + disp("unknown code rate"); + end + [states code_param] = fsk_lib_ldpc_init (H, Rs, Fs=8000); + n = code_param.coded_bits_per_frame; k = code_param.data_bits_per_frame; + + % known transmitted bits for BER estimation + rand('seed',1); + data_bits = round(rand(1,code_param.data_bits_per_frame)); + codeword_bits = LdpcEncode(data_bits, code_param.H_rows, code_param.P_matrix); + + frx=fopen(filename,"rb"); rx = fread(frx, Inf, "short"); fclose(frx); + + % freq estimator and demod + run_frames = floor(length(rx)/states.N)-1; + st = 1; f_log = []; rx_bits = []; rx_filt = []; SNRest_log = []; rx_timing_log = []; + for f=1:run_frames + + % extract nin samples from input stream + nin = states.nin; + en = st + states.nin - 1; + + % due to nin variations it's possible to overrun buffer + if en < length(rx) + sf = rx(st:en); + states = est_freq(states, sf, states.M); states.f = states.f2; + [arx_bits states] = fsk_demod(states, sf); + rx_bits = [rx_bits arx_bits]; + rx_filt = [rx_filt abs(states.f_int_resample)]; + f_log = [f_log; states.f]; + SNRest_log = [SNRest_log states.SNRest]; + rx_timing_log = [rx_timing_log states.norm_rx_timing]; + st += nin; + end + end + + % count bit errors in test frames + + num_frames=floor(length(rx_bits)/code_param.coded_bits_per_frame); + log_nerrs = []; num_frames_rx = 0; Tbits = Terrs = Tperr = Tpackets = 0; + uber = cber = 0.5; cper = 1; + for f=1:num_frames-1 + st = (f-1)*code_param.coded_bits_per_frame + 1; en = (f+1)*code_param.coded_bits_per_frame; + states = ber_counter(states, codeword_bits, rx_bits(st:en)); + log_nerrs = [log_nerrs states.nerr]; + if states.ber_state num_frames_rx++; end + + % Using sync provided by ber_counter() state machine for LDPC frame alignment + if states.ber_state + st_bit = (f-1)*code_param.coded_bits_per_frame + states.coarse_offset; + st_symbol = (st_bit-1)/states.bitspersymbol + 1; + en_symbol = st_symbol + code_param.coded_bits_per_frame/states.bitspersymbol - 1; + + % map FSK filter ouputs to LLRs, then LDPC decode (see also fsk_cml_sam.m) + symL = DemodFSK(1/states.v_est*rx_filt(:,st_symbol:en_symbol), states.SNRest, 1); + llr = -Somap(symL); + [x_hat, PCcnt] = MpDecode(llr, code_param.H_rows, code_param.H_cols, max_iterations=100, decoder_type=0, 1, 1); + Niters = sum(PCcnt~=0); + detected_data = x_hat(Niters,:); + Nerrs = sum(xor(data_bits, detected_data(1:code_param.data_bits_per_frame))); + Terrs += Nerrs; + Tbits += code_param.data_bits_per_frame; + if Nerrs Tperr++; end + Tpackets++; + end + end + + SNRestdB_log = 10*log10(SNRest_log); + if states.Tbits + printf("Fs: %d Rs: %d rate %4.2f (%d,%d) frames received: %3d SNRav: %4.2f\n", + Fs, Rs, coderate, n, k, num_frames_rx, mean(SNRestdB_log)); + uber = states.Terrs/states.Tbits; cber = Terrs/Tbits; cper = Tperr/Tpackets; + printf(" Uncoded: nbits: %6d nerrs: %6d ber: %4.3f\n", states.Tbits, states.Terrs, uber); + printf(" Coded..: nbits: %6d nerrs: %6d ber: %4.3f\n", Tbits, Terrs, cber); + printf(" Coded..: npckt: %6d perrs: %6d per: %4.3f\n", Tpackets, Tperr, cper); + else + printf("No frames detected....\n"); + end + + figure(1); clf; subplot(211); plot(rx); axis([1 length(rx) -32767 32767]); subplot(212); plot_specgram(rx); + figure(2); clf; + subplot(211); plot(f_log); axis([1 length(f_log) states.fest_fmin states.fest_fmax]); ylabel('Tone Freq (Hz)'); + subplot(212); plot(rx_timing_log); axis([1 length(rx_timing_log) -0.5 0.5]); ylabel('Timing'); + figure(3); clf; + mx_SNRestdB = 5*ceil(max(SNRestdB_log)/5); + subplot(211); plot(SNRestdB_log); axis([1 length(SNRestdB_log) 0 mx_SNRestdB]); ylabel('SNRest (dB)'); + subplot(212); stem(log_nerrs); ylabel('Uncoded errors'); +end + diff --git a/libcodec2-android/src/codec2/octave/fsk_lib_ldpc_tx.m b/libcodec2-android/src/codec2/octave/fsk_lib_ldpc_tx.m new file mode 100644 index 0000000..7858bd9 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/fsk_lib_ldpc_tx.m @@ -0,0 +1,44 @@ +% fsk_lib_ldpc_tx.m +% +% LDPC coded 4FSK modem tx, generates a 8 kHz 16 bit short real valued sample file + +function fsk_lib_ldpc_tx(filename, num_frames=10, Rs=100, coderate=0.5, EbNodB=100) + fsk_lib_ldpc; + + % set up LDPC code + init_cml('~/cml/'); + if coderate == 0.5 + load H_256_512_4.mat; + elseif coderate == 0.75 + load HRAa_1536_512.mat; H=HRA; + else + disp("unknown code rate"); + end + [states code_param] = fsk_lib_ldpc_init (H, Rs, Fs=8000); + n = code_param.coded_bits_per_frame; k = code_param.data_bits_per_frame; + + rand('seed',1); + data_bits = round(rand(1,code_param.data_bits_per_frame)); tx_bits = []; + for f=1:num_frames + codeword_bits = LdpcEncode(data_bits, code_param.H_rows, code_param.P_matrix); + tx_bits = [tx_bits codeword_bits]; + end + + tx = fsk_mod(states, tx_bits); + + % set up (optional) AWGN noise + EcNodB = EbNodB + 10*log10(states.rate); + EcNo = 10^(EcNodB/10); + variance = states.Fs/(states.Rs*EcNo*states.bitspersymbol); + + % note real noise + noise = sqrt(variance/2)*randn(length(tx),1); + rx = tx + noise; + + frx=fopen(filename,"wb"); fwrite(frx, states.amp_scale*rx, "short"); fclose(frx); + printf("Fs: %d Rs: %d rate %4.2f (%d,%d) EbNodB: %3.1f EcNodB: %3.1f frames transmitted: %3d\n", + Fs, Rs, coderate, n, k, EbNodB, EcNodB, num_frames); +end + + + diff --git a/libcodec2-android/src/codec2/octave/fsk_llr_plot.m b/libcodec2-android/src/codec2/octave/fsk_llr_plot.m new file mode 100644 index 0000000..f1b1a9f --- /dev/null +++ b/libcodec2-android/src/codec2/octave/fsk_llr_plot.m @@ -0,0 +1,51 @@ +% Plot some results from FSK LLR tests +% Assume array "res" contains rows of simulation results::: +% Eb Ec M Ltype Nbits Nerr BERraw +% (some uncoded rows might contain -1 to indicate val is not applicable) + +figure(102); clf; hold on; + +%uncoded results +sub = res(res(:,4)==-1 & res(:,3)==2, :) +semilogy(sub(:,1), sub(:,7), 'k+--') +sub = res(res(:,4)==-1 & res(:,3)==4, :) +semilogy(sub(:,1), sub(:,7), 'k--') + +leg=[]; +% coded results +for M = [2 4 ] + +if M==2, lt = '-+'; else lt='-x'; end + + sub = res(res(:,4)==1 & res(:,3)==M, :) + if length(sub)>0, + semilogy(sub(:,1), sub(:,6)./sub(:,5), ['k' lt]) + leg= [leg; 'Orig LLRs']; + end + + +sub = res(res(:,4)==2 & res(:,3)==M, :) +if length(sub)>0, + semilogy(sub(:,1), sub(:,6)./sub(:,5), ['g' lt]) + leg= [leg; ' PDF LLRs']; +end + +sub = res(res(:,4)==3 & res(:,3)==M, :) +if length(sub)>0 + semilogy(sub(:,1), sub(:,6)./sub(:,5), ['b' lt]) + leg= [leg; ' HD LLRs']; +end + +sub = res(res(:,4)==4 & res(:,3)==M, :) +semilogy(sub(:,1), sub(:,6)./sub(:,5), ['m' lt]) +leg= [leg; ' CML LLRs']; +endfor + +ylabel('BER') +xlabel('Eb/N0 (Info Bits; dB)') + title('MFSK LLR test (+is 2FSK, xis 4FSK') + legend(leg) + legend('boxoff'); + +if exist('plotname'), print -dpng plotname; disp('saved'); end + diff --git a/libcodec2-android/src/codec2/octave/fsk_llr_test.m b/libcodec2-android/src/codec2/octave/fsk_llr_test.m new file mode 100644 index 0000000..2b61ffc --- /dev/null +++ b/libcodec2-android/src/codec2/octave/fsk_llr_test.m @@ -0,0 +1,294 @@ +% fsk_llr_test.m +% +% 2/4FSK simulation to develop LLR estimation algorithms for 4FSK/LDPC modems +% Modified version of David's fsk_llr.m; Bill + +#{ + TODO + The 'v' param of the Ricean pdf is the signal-only amplitude: genie value=16 + In practice, given varying input levels, this value needs to be estimated. + + A small scaling factor seems to improve 2FSK performance -- probably the 'sig' + estimate can be improved. + + Only tested with short code -- try a longer one! + + Simulation should be updated to exit Eb after given Nerr reached + +#} + +ldpc; + +% define Rician pdf +function y = rice(x,v,s) + s2 = s*s; + y = (x / s2) .* exp(-0.5 * (x.^2 + v.^2)/s2) .* besseli(0, x*v/s2); +endfunction + +function plot_pdf(v,s) + x=(0:0.1:2*v); + y= rice(x, v, s); + figure(201); hold on + plot(x,y,'g'); + %title('Rician pdf: signal carrier') + y= rice(x, 0, s); + plot(x,y,'b'); + title('Rician pdf: signal and noise-only carriers') + pause(0.01); +endfunction + +% single Eb/No point simulation %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +function [raw_ber rx_filt rx_bits tx_symbols demapper sig_est ] = run_single(tx_bits, M, EcNodB, plt=0) + % Ec/N0 is per channel bit + bps = log2(M); % bits per symbol + Ts = 16; % length of each symbol in samples + + if length(tx_bits)==1 + Nbits = tx_bits; + tx_bits = randi(2,1,Nbits)-1; % make random bits + endif + + Nbits = length(tx_bits); + Nsymbols = Nbits/log2(M); + tx_symbols = zeros(1,Nsymbols); + + mapper = bps:-1:1; + % look up table demapper from symbols to bits (hard decision) + demapper=zeros(M,bps); + for m=1:M + for b=1:bps + if bitand(m-1,b) demapper(m,bps-b+1) = 1; end + end + end + + % continuous phase mFSK modulator + + w(1:M) = 2*pi*(1:M)/Ts; + tx_phase = 0; + tx = zeros(1,Ts*Nsymbols); + + for s=1:Nsymbols + bits_for_this_symbol = tx_bits(bps*(s-1)+1:bps*s); + symbol_index = bits_for_this_symbol * mapper' + 1; + tx_symbols(s) = symbol_index; + assert(demapper(symbol_index,:) == bits_for_this_symbol); + for k=1:Ts + tx_phase += w(symbol_index); + tx((s-1)*Ts+k) = exp(j*tx_phase); + end + end + + % AWGN channel noise + + + EsNodB = EcNodB + 10*log10(bps) + EsNo = 10^(EsNodB/10); + variance = Ts/EsNo; + noise = sqrt(variance/2)*(randn(1,Nsymbols*Ts) + j*randn(1,Nsymbols*Ts)); + rx = tx + noise; + + if plt==2, % check the Spectrum + [psd,Fpsd] =pwelch(rx,128,0.5,128,Ts); + figure(110); plot(Fpsd,10*log10(psd)); + title('Rx Signal: PSD '); + xlabel('Freq/Rs'); + %figure(111);plot(unwrap(arg(tx))); + pause(0.01); + endif + + + % integrate and dump demodulator + + rx_bits = zeros(1,Nbits); + rx_filt = zeros(Nsymbols,M); + rx_pows = zeros(1,M); + rx_nse_pow = 0.0; rx_sig_pow =0.0; + for s=1:Nsymbols + arx_symb = rx((s-1)*Ts + (1:Ts)); + for m=1:M + r= sum(exp(-j*w(m)*(1:Ts)) .* arx_symb); + rx_pows(m)= r * conj(r); + rx_filt(s,m) = abs(r); + end + [tmp symbol_index] = max(rx_filt(s,:)); + rx_sig_pow = rx_sig_pow + rx_pows(symbol_index); + rx_pows(symbol_index)=[]; + rx_nse_pow = rx_nse_pow + sum(rx_pows)/(M-1); + rx_bits(bps*(s-1)+1:bps*s) = demapper(symbol_index,:); + end + % using Rxpower = v^2 + sigmal^2 + + rx_sig_pow = rx_sig_pow/Nsymbols; + rx_nse_pow = rx_nse_pow/Nsymbols; + sig_est = sqrt(rx_nse_pow/2) % for Rayleigh: 2nd raw moment = 2 .sigma^2 + Kest = rx_sig_pow/(2.0*sig_est^2) -1.0 + + Nerrors = sum(xor(tx_bits, rx_bits)); + raw_ber = Nerrors/Nbits; + printf("EcNodB: %4.1f M: %2d Uncoded Nbits: %5d Nerrors: %4d (Raw) BER: %1.3f\n", ... + EcNodB, M, Nbits, Nerrors, raw_ber); + if plt==1, plot_hist(rx_filt,tx_symbols, M); end + +endfunction + + +% Plot histograms of Rx filter outputs +function plot_hist(rx_filt,tx_symbols, M) + % more general version of previous fn; - plots histograms for any Tx patterns + Smax = 36; + X = 0:Smax-1; + H = zeros(1,Smax); H2 = zeros(1,Smax); s2=0.0; + for m = 1:M + ind = tx_symbols==m; + ind2 = tx_symbols~=m; + H= H+ hist(rx_filt(ind,m),X); + H2= H2+ hist(rx_filt(ind2,m),X); + x=rx_filt(ind2,m); + s2 =s2 + sum(x(:).^2)/length(x); + end + disp('noise RMS is '); sqrt(s2/4) + figure(1); clf; plot(X,H); + title([num2str(M) 'FSK pdf for rx=tx symbol']) + figure(2); clf; plot(X,H2); + title([num2str(M) 'FSK pdf for rx!=tx symbol']) + pause(0.1); + +endfunction + +% 2FSK SD -> LLR mapping that we used for Wenet SSTV system +function llr = sd_to_llr(sd, HD=0) % original 2FSK + HD option + sd = sd / mean(abs(sd)); + x = sd - sign(sd); + sumsq = sum(x.^2); + summ = sum(x); + mn = summ/length(sd); + estvar = sumsq/length(sd) - mn*mn; + estEsN0 = 1/(2* estvar + 1E-3); + if HD==0, + llr = 4 * estEsN0 * sd; + else + llr = 4 * estEsN0 * sign(sd); + endif +endfunction + + +% single point LDPC encoded frame simulation, usin 2FSK as a tractable starting point +% Note: ~/cml/matCreateConstellation.m has some support for FSK - can it do 4FSK? + +%%%%%%%%%%%%%%%%%%%%%%%%% + function [Nerrors raw_ber EcNodB] = run_single_ldpc(M, Ltype, Nbits,EbNodB, plt=0) + + disp([num2str(M) 'FSK coded test ... ']) + if M==2 + bps = 1; modulation = 'FSK'; mod_order=2; mapping = 'gray'; + elseif M==4 + bps = 2; modulation = 'FSK'; mod_order=4; mapping = 'gray'; + else + error('sorry - bad value of M!'); + endif + decoder_type = 0; max_iterations = 100; + + load H_256_768_22.txt + Krate = 1/3; + EcNodB = EbNodB + 10*log10(Krate); + code_param = ldpc_init_user(H_256_768_22, modulation, mod_order, mapping); + Nframes = floor(Nbits/code_param.data_bits_per_frame) + Nbits = Nframes*code_param.data_bits_per_frame + + % Encoder + data_bits = round(rand(1,code_param.data_bits_per_frame)); + tx_bits = []; + for f=1:Nframes; + codeword_bits = LdpcEncode(data_bits, code_param.H_rows, code_param.P_matrix); + tx_bits = [tx_bits codeword_bits]; + end + %tx_bits = zeros(1,length(tx_bits)); + + % modem/channel simulation + [raw_ber rx_filt rx_bits tx_symbols demapper sig_est ] = run_single(tx_bits,M,EcNodB, 0 ); + + % Decoder + Nerrors = 0; + for f=1:Nframes + st = (f-1)*code_param.coded_bits_per_frame/bps + 1; + en = st + code_param.coded_bits_per_frame/bps - 1; + + if or(Ltype==1, Ltype==3) + if bps==1, + sd = rx_filt(st:en,1) - rx_filt(st:en,2); + % OR ind = rx_filt(st:en,1) > rx_filt(st:en,2); + % llr = ind'*2 -1; % this works but use SNR scaling + if Ltype==3, HD=1; else, HD = 0; endif + llr = sd_to_llr(sd, HD)'; + endif + if bps==2, + if Ltype==3, + llr = mfsk_hd_to_llrs(rx_filt(st:en,:), demapper); + else + error('Ltype =1 not provided for coded 4FSK'); + endif + endif + endif + if Ltype==2, % SDs are converted to LLRs + v=16; + if plt==1, plot_pdf(v, sig_est); endif + llr = mfsk_sd_to_llrs(rx_filt(st:en,:), demapper, v, sig_est); + endif + + [x_hat, PCcnt] = MpDecode(llr, code_param.H_rows, code_param.H_cols, ... + max_iterations, decoder_type, 1, 1); + Niters = sum(PCcnt!=0); + detected_data = x_hat(Niters,:); + Nerrors += sum(xor(data_bits, detected_data(1:code_param.data_bits_per_frame))); + endfor + ber = Nerrors/Nbits; + printf("EbNodB: %4.1f Coded Nbits: %5d Nerrors: %4d BER: %1.3f\n", EbNodB, Nbits, Nerrors, ber); +endfunction + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%rand('seed',1); +%randn('seed',1); +format short +more off +init_cml('~/cml/'); + +% store results in array "res" and plot afterwards +% comment the following line if you want to retain prev sims +nrun = 0; clear res; + +Nbits = 20000; plt=0; + +#{ +disp(' uncoded runs') +for M= [2 4] +for Eb = [6:10] + raw_ber = run_single(Nbits, M, Eb, plt) % 2fsk coded + nrun = nrun+1; res(nrun,:) = [Eb Eb M -1 Nbits -1 raw_ber] +endfor +endfor +#} + +disp(' coded runs '); + +M=2, +for Ltype = [1 2 3] +for Eb = [7: 0.5: 9] + [Nerr raw_ber Ec] = run_single_ldpc(M, Ltype, Nbits, Eb, plt) + nrun = nrun+1; res(nrun,:) = [Eb Ec M Ltype Nbits Nerr raw_ber] +endfor +endfor + +M=4, %v=16; +for Ltype = [2 3] +for Eb = [8.0 8.3 8.6 ] + [Nerr raw_ber Ec] = run_single_ldpc(M, Ltype, Nbits, Eb, plt) + nrun = nrun+1; res(nrun,:) = [Eb Ec M Ltype Nbits Nerr raw_ber] +endfor +endfor + + +date = datestr(now) +save 'mfsk_test_res.mat' res date + diff --git a/libcodec2-android/src/codec2/octave/fsk_lock_down.m b/libcodec2-android/src/codec2/octave/fsk_lock_down.m new file mode 100644 index 0000000..65129a7 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/fsk_lock_down.m @@ -0,0 +1,393 @@ +% fsk_lock_down.m +% David Rowe April 2020 +% +% tests for "Lock down" waveform, low Eb/No 4FSK + +fsk_lib; + +% "Genie" (ie perfect) timing estimate, we just want to see impact on BER from frequency est errors +function rx_bits = simple_fsk_demod(states, rx, f) + M = states.M; Ts = states.Ts; Fs = states.Fs; N = states.nin; + + nsymb = states.nin/states.Ts; + rx_filter = zeros(states.nin,M); + rx_symbols = zeros(nsymb,M); + + % Down convert each tone. We can use any time index for down + % conversion as it's non-coherent + for m=1:M + phase = exp(-j*2*pi*(1:N)'*f(m)/Fs); + rx_filter(:,m) = rx .* phase; + end + + % sum energy for each symbol + for s=1:nsymb + st_sym = (s-1)*Ts+1; en_sym = s*Ts; + for m=1:M + rx_symbols(s,m) = sum(rx_filter(st_sym:en_sym,m)); + end + end + + % map symbols back to bits + rx_bits = []; + for s=1:nsymb + [tone_max tone_index] = max(rx_symbols(s,:)); + arx_bits = dec2bin(tone_index - 1, states.bitspersymbol) - '0'; + rx_bits = [rx_bits arx_bits]; + end + +end + +% set up "lock down" waveform +function [states M bits_per_frame] = lock_down_init(Rs,Fs,df,tx_tone_separation=250) + M = 4; + states = fsk_init(Fs,Rs,M,P=8,nsym=100); + bits_per_frame = 512; + states.tx_real = 0; % complex signal + states.tx_tone_separation = tx_tone_separation; + states.ftx = -2.5*states.tx_tone_separation + states.tx_tone_separation*(1:M); + states.fest_fmin = -Fs/2; + states.fest_fmax = +Fs/2; + states.df = df; + + % cumulative PDF, cdf(x) probability of 0....x errors in frame + cdf = binocdf(1:bits_per_frame, bits_per_frame, 0.3); + % our valid frame threshold is 50% probability, so if we get this many errors + % we have a 50% chance it's a valid frame + nerrs_valid = find(cdf>=0.5)(1); + % our invalid frame threshold is 99% probability, so very unlikley to + % get this many errors + nerrs_invalid = find(cdf>=0.99)(1); + states.ber_valid_thresh = nerrs_valid/bits_per_frame; + states.ber_invalid_thresh = nerrs_invalid/bits_per_frame; +end + +% run a test at an Eb/No point, measure how many dud freq estimates using both algorithms +function [states f_log f_log2 num_dud1 num_dud2 ber ber2] = freq_run_test(EbNodB = 10, num_frames=10, Fs=8000, Rs=100, df=0) + [states M bits_per_frame] = lock_down_init(Rs,Fs,df); + N = states.N; + + EbNo = 10^(EbNodB/10); + variance = states.Fs/(states.Rs*EbNo*states.bitspersymbol); + + nbits = bits_per_frame*num_frames; + tx_bits = round(rand(1,nbits)); + tx = fsk_mod(states, tx_bits); + noise = sqrt(variance/2)*randn(length(tx),1) + j*sqrt(variance/2)*randn(length(tx),1); + rx = tx + noise; + run_frames = floor(length(rx)/N)-1; + st = 1; f_log = []; f_log2 = []; rx_bits = []; rx_bits2 = []; + for f=1:run_frames + + % extract nin samples from input stream + nin = states.nin; + en = st + states.nin - 1; + + % due to nin variations it's possible to overrun buffer + if en < length(rx) + sf = rx(st:en); + states = est_freq(states, sf, states.M); + arx_bits = simple_fsk_demod(states, sf, states.f); + rx_bits = [rx_bits arx_bits]; + arx_bits = simple_fsk_demod(states, sf, states.f2); + rx_bits2 = [rx_bits2 arx_bits]; + f_log = [f_log; states.f]; f_log2 = [f_log2; states.f2]; + st += nin; + end + end + + % ignore start up transient + startup = 1; % TODO make this sensible/proportional so its scales across Rs + if num_frames > startup + tx_bits = tx_bits(startup*bits_per_frame:end); + rx_bits = rx_bits(startup*bits_per_frame:end); + rx_bits2 = rx_bits2(startup*bits_per_frame:end); + end + + % measure BER + nerrors = sum(xor(tx_bits(1:length(rx_bits)),rx_bits)); ber = nerrors/nbits; + nerrors2 = sum(xor(tx_bits(1:length(rx_bits2)),rx_bits2)); ber2 = nerrors2/nbits; + + % Lets say that for a valid freq estimate, all four tones must be within 0.1*Rs of their tx freqeuncy + num_dud1 = 0; num_dud2 = 0; + for i=1:length(f_log) + if sum(abs(f_log(i,:)-states.ftx) > 0.1*states.Rs) + num_dud1++; + end + if sum(abs(f_log2(i,:)-states.ftx) > 0.1*states.Rs) + num_dud2++; + end + end +end + +function freq_run_single(EbNodB = 3, num_frames = 10) + [states f_log f_log2 num_dud1 num_dud2 ber ber2] = freq_run_test(EbNodB, num_frames); + + percent_dud1 = 100*num_dud1/length(f_log); + percent_dud2 = 100*num_dud2/length(f_log); + printf("EbNodB: %4.2f dB tests: %3d duds1: %3d %5.2f %% duds2: %3d %5.2f %% ber1: %4.3f ber2: %4.3f\n", + EbNodB, length(f_log), num_dud1, percent_dud1, num_dud2, percent_dud2, ber, ber2) + + figure(1); clf; + ideal=ones(length(f_log),1)*states.ftx; + plot((1:length(f_log)),ideal(:,1),'bk;ideal;') + hold on; plot((1:length(f_log)),ideal(:,2:states.M),'bk'); hold off; + hold on; + plot(f_log(:,1), 'linewidth', 2, 'b;peak;'); + plot(f_log(:,2:states.M), 'linewidth', 2, 'b'); + plot(f_log2(:,1),'linewidth', 2, 'r;mask;'); + plot(f_log2(:,2:states.M),'linewidth', 2, 'r'); + hold off; + xlabel('Time (frames)'); ylabel('Frequency (Hz)'); + title(sprintf("EbNo = %4.2f dB", EbNodB)); + print("fsk_freq_est_single.png", "-dpng") + + figure(2); clf; + errors = (f_log - states.ftx)(:); + ind = find(abs(errors) < 100); + errors2 = (f_log2 - states.ftx)(:); + ind2 = find(abs(errors2) < 100); + if length(ind) + subplot(211); hist(errors(ind),50) + end + if length(ind2) + subplot(212); hist(errors2(ind2),50) + end +end + + +% test peak and mask algorthms side by side +function freq_run_curve_peak_mask + + EbNodB = 0:9; + m4fsk_ber_theory = [0.23 0.18 0.14 0.09772 0.06156 0.03395 0.01579 0.00591 0.00168 3.39E-4]; + percent_log = []; ber_log = []; + for ne = 1:length(EbNodB) + [states f_log f_log2 num_dud1 num_dud2 ber ber2] = freq_run_test(EbNodB(ne), 10); + percent_dud1 = 100*num_dud1/length(f_log); + percent_dud2 = 100*num_dud2/length(f_log); + percent_log = [percent_log; [percent_dud1 percent_dud2]]; + ber_log = [ber_log; [ber ber2]]; + printf("EbNodB: %4.2f dB tests: %3d duds1: %3d %5.2f %% duds2: %3d %5.2f %% ber1: %4.3f ber2: %4.3f\n", + EbNodB(ne), length(f_log), num_dud1, percent_dud1, num_dud2, percent_dud2, ber, ber2) + end + + figure(1); clf; plot(EbNodB, percent_log(:,1), 'linewidth', 2, '+-;peak;'); grid; + hold on; plot(EbNodB, percent_log(:,2), 'linewidth', 2, 'r+-;mask;'); hold off; + xlabel('Eb/No (dB)'); ylabel('% Errors'); + title(sprintf("Fs = %d Rs = %d df = %3.2f", states.Fs, states.Rs, states.df)); + print("fsk_freq_est_errors.png", "-dpng") + + figure(2); clf; semilogy(EbNodB, m4fsk_ber_theory, 'linewidth', 2, 'bk+-;theory;'); grid; + hold on; semilogy(EbNodB, ber_log(:,1), 'linewidth', 2, '+-;peak;'); + semilogy(EbNodB, ber_log(:,2), 'linewidth', 2, 'r+-;mask;'); hold off; + xlabel('Eb/No (dB)'); ylabel('BER'); + title(sprintf("Fs = %d Rs = %d df = %3.2f", states.Fs, states.Rs, states.df)); + print("fsk_freq_est_ber.png", "-dpng") +end + + +function freq_run_curve_mask(Fs,Rs) + EbNodB = 0:9; + m4fsk_ber_theory = [0.23 0.18 0.14 0.09772 0.06156 0.03395 0.01579 0.00591 0.00168 3.39E-4]; + figure(1); clf; semilogy(EbNodB, m4fsk_ber_theory, 'linewidth', 2, 'bk+-;theory;'); grid; + xlabel('Eb/No (dB)'); ylabel('BER'); + title(sprintf("Mask: Fs = %d Hz Rs = %d Hz", Fs, Rs)); + hold on; + + for df=-0.01:0.01:0.01 + ber_log = []; + for ne = 1:length(EbNodB) + [states f_log f_log2 num_dud1 num_dud2 ber ber2] = freq_run_test(EbNodB(ne), 100, Fs, Rs, df*Rs); + ber_log = [ber_log; [ber ber2]]; + printf("Fs: %d Rs: %d df %3.2f EbNodB: %4.2f dB tests: %3d ber: %4.3f\n", + Fs, Rs, df, EbNodB(ne), length(f_log), ber2) + end + semilogy(EbNodB, ber_log(:,2), 'linewidth', 2, sprintf("+-;df=% 3.2f Hz/s;",df*Rs)); + end + hold off; + print(sprintf("fsk_freq_est_ber_%d_%d.png",Fs,Rs), "-dpng") +end + + +% Run a complete modem (freq and timing estimators running) at a +% single Eb/No point. At low Eb/No the estimators occasionally fall +% over so we get complete junk, we consider that case a packet error +% and exclude it from the BER estimation. + +function [states ber per] = modem_run_test(EbNodB = 10, num_frames=10, Fs=8000, Rs=100, df=0, plots=0, spreadHz=0,tx_tone_separation=250) + [states M bits_per_frame] = lock_down_init(Rs, Fs, df, tx_tone_separation); + N = states.N; + if plots; states.verbose = 0x4; end + EbNo = 10^(EbNodB/10); + variance = states.Fs/(states.Rs*EbNo*states.bitspersymbol); + + nbits = bits_per_frame*num_frames; + test_frame = round(rand(1,bits_per_frame)); tx_bits = []; + for f=1:num_frames + tx_bits = [tx_bits test_frame]; + end + + tx = fsk_mod(states, tx_bits); + noise = sqrt(variance/2)*randn(length(tx),1) + j*sqrt(variance/2)*randn(length(tx),1); + if spreadHz + % just use phase part of doppler spread, not interested in amplitude fading + spread = doppler_spread(spreadHz, Fs, round(1.1*length(tx))); + spread = exp(j*arg(spread(1:length(tx)))); + rx = tx.*rot90(spread) + noise; + else + rx = tx + noise; + end + run_frames = floor(length(rx)/N)-1; + st = 1; f_log = []; f_log2 = []; rx_bits = []; rx_bits2 = []; + for f=1:run_frames + + % extract nin samples from input stream + nin = states.nin; + en = st + states.nin - 1; + + % due to nin variations it's possible to overrun buffer + if en < length(rx) + sf = rx(st:en); + states = est_freq(states, sf, states.M); states.f = states.f2; + [arx_bits states] = fsk_demod(states, sf); + rx_bits = [rx_bits arx_bits]; + f_log = [f_log; states.f]; + st += nin; + end + end + + num_frames=floor(length(rx_bits)/bits_per_frame); + log_nerrs = []; num_frames_rx = 0; + for f=1:num_frames-1 + st = (f-1)*bits_per_frame + 1; en = (f+1)*bits_per_frame; + states = ber_counter(states, test_frame, rx_bits(st:en)); + log_nerrs = [log_nerrs states.nerr]; + if states.ber_state; num_frames_rx++; end + end + if states.Terrs + printf("Fs: %d Rs: %d df % 3.2f sp: %2.1f EbNo: %4.2f ftx: %3d frx: %3d nbits: %4d nerrs: %3d ber: %4.3f\n", + Fs, Rs, df, spreadHz, EbNodB, num_frames, num_frames_rx, states.Tbits, states.Terrs, states.Terrs/states.Tbits); + ber = states.Terrs/states.Tbits; + else + ber = 0.5; + end + + if plots + figure(1); clf; + ideal=ones(length(f_log),1)*states.ftx; + plot((1:length(f_log)),ideal(:,1),'bk;ideal;') + hold on; plot((1:length(f_log)),ideal(:,2:states.M),'bk'); hold off; + hold on; + plot(f_log(:,1), 'linewidth', 2, 'b;peak;'); + plot(f_log(:,2:states.M), 'linewidth', 2, 'b'); + hold off; + xlabel('Time (frames)'); ylabel('Frequency (Hz)'); + figure(2); clf; plot(log_nerrs); title('Errors per frame'); + end + + per = 1 - num_frames_rx/num_frames; +end + + +% run BER v Eb/No curves over a range of frequency rate/change +function modem_run_curve(Fs, Rs, num_frames=100, dfmax=0.01) + EbNodB = 0:9; + m4fsk_ber_theory = [0.23 0.18 0.14 0.09772 0.06156 0.03395 0.01579 0.00591 0.00168 3.39E-4]; + figure(1); clf; semilogy(EbNodB, m4fsk_ber_theory, 'linewidth', 2, 'bk+-;theory;'); grid; + xlabel('Eb/No (dB)'); ylabel('BER'); + title(sprintf("Mask: Fs = %d Hz Rs = %d Hz", Fs, Rs)); hold on; + figure(2); clf; + xlabel('Eb/No (dB)'); ylabel('PER'); title(sprintf("Mask: Fs = %d Hz Rs = %d Hz", Fs, Rs)); + grid; axis([min(EbNodB) max(EbNodB) 0 1]); hold on; + + for df=-dfmax:dfmax:dfmax + ber_log = []; per_log = []; + for ne = 1:length(EbNodB) + [states ber per] = modem_run_test(EbNodB(ne), num_frames, Fs, Rs, df*Rs); + ber_log = [ber_log; ber]; per_log = [per_log; per]; + end + figure(1); semilogy(EbNodB, ber_log, 'linewidth', 2, sprintf("+-;df=% 3.2f Hz/s;",df*Rs)); + figure(2); plot(EbNodB, per_log, 'linewidth', 2, sprintf("+-;df=% 3.2f Hz/s;",df*Rs)); + end + + figure(1); hold off; print(sprintf("fsk_modem_ber_%d_%d.png",Fs,Rs), "-dpng") + figure(2); hold off; print(sprintf("fsk_modem_per_%d_%d.png",Fs,Rs), "-dpng") +end + +% run BER v Eb/No curve with some phase noise spreading the energy of the tones in frequency +function modem_run_curve_spread(Fs, Rs, num_frames=100) + EbNodB = 0:9; + m4fsk_ber_theory = [0.23 0.18 0.14 0.09772 0.06156 0.03395 0.01579 0.00591 0.00168 3.39E-4]; + figure(1); clf; semilogy(EbNodB, m4fsk_ber_theory, 'linewidth', 2, 'bk+-;theory;'); grid; + xlabel('Eb/No (dB)'); ylabel('BER'); + title(sprintf("Spread: Fs = %d Hz Rs = %d Hz", Fs, Rs)); hold on; + figure(2); clf; + xlabel('Eb/No (dB)'); ylabel('PER'); + title(sprintf("Spread: Fs = %d Hz Rs = %d Hz", Fs, Rs)); + grid; axis([min(EbNodB) max(EbNodB) 0 1]); hold on; + + spreadHz = [0.0 1 2 5]; + for ns = 1:length(spreadHz) + ber_log = []; per_log = []; + for ne = 1:length(EbNodB) + [states ber per] = modem_run_test(EbNodB(ne), num_frames, Fs, Rs, 0, 0, spreadHz(ns)); + ber_log = [ber_log; ber]; per_log = [per_log; per]; + end + figure(1); semilogy(EbNodB, ber_log, 'linewidth', 2, sprintf("+-;spread=% 3.2f Hz;",spreadHz(ns))); + figure(2); plot(EbNodB, per_log, 'linewidth', 2, sprintf("+-;spread=% 3.2f Hz;",spreadHz(ns))); + end + + figure(1); hold off; print(sprintf("fsk_modem_ber_spread_%d_%d.png",Fs,Rs), "-dpng") + figure(2); hold off; print(sprintf("fsk_modem_per_spread_%d_%d.png",Fs,Rs), "-dpng") +end + +% study code rate versus Rs and MDS +function code_rate_table + packet_duration_sec = 20; + k = 256; + noise_figure = 1; + bits_per_symbol = 2; + noise_bandwidth = 3000; + + code_rate=[1 0.8 0.5 1/3]; + raw_ber=[2E-3 0.04 0.08 0.16]; + EbNodB_4fsk=[8 4.5 3.5 1.5]; + + printf("Code Rate | Raw BER | 4FSK Eb/No | n,k | Rs | SNR | MDS |\n"); + printf("| --- | --- | --- | --- | --- | --- | --- |\n"); + for i=1:length(code_rate) + n = k/code_rate(i); + Rb = n/packet_duration_sec; + Rs = Rb/bits_per_symbol; + snr = EbNodB_4fsk(i) + 10*log10(Rb/noise_bandwidth); + mds = EbNodB_4fsk(i) + 10*log10(Rb) + noise_figure - 174; + printf("%3.2f | %4.3f | %2.1f | %d,%d | %4.1f | %4.1f | %5.1f |\n", + code_rate(i), raw_ber(i), EbNodB_4fsk(i), n, k, Rs, snr, mds); + end +end + +graphics_toolkit("gnuplot"); +more off; + +% same results every time +rand('state',1); +randn('state',1); + +% freq estimator tests (choose one) +#freq_run_single(3,10) +#freq_run_curve_peak_mask +#freq_run_curve_mask(8000,100) +#freq_run_curve_mask(24000,25) +#freq_run_curve_mask(8000,25) + +% complete modem tests (choose one) +#modem_run_curve(24000,25,100) +#modem_run_curve(8000,100,50,0.05) +#modem_run_curve_spread(8000,25,50) +#modem_run_curve(8000,100,20) +modem_run_test(2, 20, 8000, 25, 0, 1, 0, 270); + +% just print a table of code rates +#code_rate_table + diff --git a/libcodec2-android/src/codec2/octave/fsk_v_afsk.m b/libcodec2-android/src/codec2/octave/fsk_v_afsk.m new file mode 100644 index 0000000..a692c18 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/fsk_v_afsk.m @@ -0,0 +1,232 @@ +% fsk.m +% David Rowe Nov 2014 + +% Ideal non-coherent FSK and AFSK-over-analog-FM simulation. Can draw +% Eb/No curves or run single point simulations + +rand('state',1); +randn('state',1); +graphics_toolkit ("gnuplot"); + +fm; + +function sim_out = fsk_ber_test(sim_in) + Fs = 96000; + fmark = sim_in.fmark; + fspace = sim_in.fspace; + Rs = sim_in.Rs; + Ts = Fs/Rs; + emphasis = 50E-6; + verbose = sim_in.verbose; + + nsym = sim_in.nsym; + nsam = nsym*Ts; + EbNodB = sim_in.EbNodB; + + fm = sim_in.fm; + + if fm + fm_states.pre_emp = 0; + fm_states.de_emp = 0; + fm_states.Ts = Ts; + fm_states.Fs = Fs; + fm_states.fc = Fs/4; + fm_states.fm_max = 3E3; + fm_states.fd = 5E3; + fm_states.output_filter = 1; + fm_states = analog_fm_init(fm_states); + end + + % simulate over a range of Eb/No values + + for ne = 1:length(EbNodB) + Nerrs = Terrs = Tbits = 0; + + % randn() generates noise spread across the entire Fs bandwidth. + % The power (aka variance) of this noise is N = NoFs, or No = + % N/Fs. The power of each bit is C=1, so the energy of each bit + % is Eb=1/Rs. We want to find N as a function of Eb/No, so: + + % Eb/No = (1/Rs)/(N/Fs) = Fs/(RsN) + % N = Fs/(Rs(Eb/No)) + + aEbNodB = EbNodB(ne); + EbNo = 10^(aEbNodB/10); + variance = Fs/(Rs*EbNo); + + % Modulator ------------------------------- + + tx_bits = round(rand(1, nsym)); + tx = zeros(1,nsam); + tx_phase = 0; + + for i=1:nsym + for k=1:Ts + if tx_bits(i) == 1 + tx_phase += 2*pi*fmark/Fs; + else + tx_phase += 2*pi*fspace/Fs; + end + tx_phase = tx_phase - floor(tx_phase/(2*pi))*2*pi; + tx((i-1)*Ts+k) = exp(j*tx_phase); + end + end + + % Optional AFSK over FM modulator + + if sim_in.fm + % FM mod takes real input; +/- 1 for correct deviation + tx = analog_fm_mod(fm_states, real(tx)); + end + + % Channel --------------------------------- + + % We use complex (single sided) channel simulation, as it's convenient + % for the FM simulation. + + noise = sqrt(variance/2)*(randn(1,nsam) + j*randn(1,nsam)); + rx = tx + noise; + if verbose > 1 + printf("EbNo: %f Eb: %f var No: %f EbNo (meas): %f\n", + EbNo, var(tx)*Ts/Fs, var(noise)/Fs, (var(tx)*Ts/Fs)/(var(noise)/Fs)); + end + save fsk tx_bits rx + + % Optional AFSK over FM demodulator + + if sim_in.fm + % scaling factor for convenience to match pure FSK + rx_bb = 2*analog_fm_demod(fm_states, rx); + else + rx_bb = rx; + end + + % Demodulator ----------------------------- + + % non-coherent FSK demod + + mark_dc = rx_bb .* exp(-j*(0:nsam-1)*2*pi*fmark/Fs); + space_dc = rx_bb .* exp(-j*(0:nsam-1)*2*pi*fspace/Fs); + + rx_bits = zeros(1, nsym); + for i=1:nsym + st = (i-1)*Ts+1; + en = st+Ts-1; + mark_int(i) = sum(mark_dc(st:en)); + space_int(i) = sum(space_dc(st:en)); + rx_bits(i) = abs(mark_int(i)) > abs(space_int(i)); + end + + if fm + d = fm_states.nsym_delay; + error_positions = xor(rx_bits(1+d:nsym), tx_bits(1:(nsym-d))); + else + error_positions = xor(rx_bits, tx_bits); + end + Nerrs = sum(error_positions); + Terrs += Nerrs; + Tbits += length(error_positions); + + TERvec(ne) = Terrs; + BERvec(ne) = Terrs/Tbits; + + if verbose > 1 + figure(2) + clf + Rx = 10*log10(abs(fft(rx))); + plot(Rx(1:Fs/2)); + axis([1 Fs/2 0 50]); + + figure(3) + clf; + subplot(211) + plot(real(rx_bb(1:Ts*20))) + subplot(212) + Rx_bb = 10*log10(abs(fft(rx_bb))); + plot(Rx_bb(1:3000)); + axis([1 3000 0 50]); + + figure(4); + subplot(211) + stem(abs(mark_int(1:100))); + subplot(212) + stem(abs(space_int(1:100))); + end + + if verbose + printf("EbNo (db): %3.2f Terrs: %d BER: %3.2f \n", aEbNodB, Terrs, Terrs/Tbits); + end + end + + sim_out.TERvec = TERvec; + sim_out.BERvec = BERvec; +endfunction + + +function run_fsk_curves + sim_in.fmark = 1200; + sim_in.fspace = 2200; + sim_in.Rs = 1200; + sim_in.nsym = 12000; + sim_in.EbNodB = 0:2:20; + sim_in.fm = 0; + sim_in.verbose = 1; + + EbNo = 10 .^ (sim_in.EbNodB/10); + fsk_theory.BERvec = 0.5*exp(-EbNo/2); % non-coherent BFSK demod + fsk_sim = fsk_ber_test(sim_in); + + sim_in.fm = 1; + fsk_fm_sim = fsk_ber_test(sim_in); + + % BER v Eb/No curves + + figure(1); + clf; + semilogy(sim_in.EbNodB, fsk_theory.BERvec,'r;FSK theory;') + hold on; + semilogy(sim_in.EbNodB, fsk_sim.BERvec,'g;FSK sim;') + semilogy(sim_in.EbNodB, fsk_fm_sim.BERvec,'b;FSK over FM sim;') + hold off; + grid("minor"); + axis([min(sim_in.EbNodB) max(sim_in.EbNodB) 1E-4 1]) + legend("boxoff"); + xlabel("Eb/No (dB)"); + ylabel("Bit Error Rate (BER)") + + % BER v C/No (1 Hz noise BW and Eb=C/Rs=1/Rs) + % Eb/No = (C/Rs)/(1/(N/B)) + % C/N = (Eb/No)*(Rs/B) + + RsOnB_dB = 10*log10(sim_in.Rs/1); + figure(2); + clf; + semilogy(sim_in.EbNodB+RsOnB_dB, fsk_theory.BERvec,'r;FSK theory;') + hold on; + semilogy(sim_in.EbNodB+RsOnB_dB, fsk_sim.BERvec,'g;FSK sim;') + semilogy(sim_in.EbNodB+RsOnB_dB, fsk_fm_sim.BERvec,'b;FSK over FM sim;') + hold off; + grid("minor"); + axis([min(sim_in.EbNodB+RsOnB_dB) max(sim_in.EbNodB+RsOnB_dB) 1E-4 1]) + legend("boxoff"); + xlabel("C/No for Rs=1200 bit/s and 1 Hz noise bandwidth (dB)"); + ylabel("Bit Error Rate (BER)") +end + +function run_fsk_single + sim_in.fmark = 1000; + sim_in.fspace = 2000; + sim_in.Rs = 1000; + sim_in.nsym = 2000; + sim_in.EbNodB = 7; + sim_in.fm = 0; + sim_in.verbose = 1; + + fsk_sim = fsk_ber_test(sim_in); +endfunction + +# choose one of these functions below + +run_fsk_curves +#run_fsk_single + diff --git a/libcodec2-android/src/codec2/octave/fskdemodgui.py b/libcodec2-android/src/codec2/octave/fskdemodgui.py new file mode 100644 index 0000000..139cfa2 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/fskdemodgui.py @@ -0,0 +1,220 @@ +#!/usr/bin/env python +# +# fsk_demod Statistics GUI +# Accepts the stats output from fsk_demod on stdin, and plots it. +# +# Mark Jessop 2016-03-13 +# +# NOTE: This is intended to be run on a 'live' stream of samples, and hence expects +# updates at about 10Hz. Anything faster will fill up the input queue and be discarded. +# +# Call using: +# | ./fsk_demod --cu8 -s --stats=100 2 $SDR_RATE $BAUD_RATE - - 2> >(python fskdemodgui.py --wide) | +# +# Dependencies: +# * Python (written for 2.7, only tested recently on 3+) +# * numpy +# * pyqtgraph +# * PyQt5 (Or some Qt5 backend compatible with pyqtgraph) +# +# +import sys, time, json, argparse +from threading import Thread +try: + from pyqtgraph.Qt import QtGui, QtCore +except ImportError: + print("Could not import PyQt5 - is it installed?") + sys.exit(1) + +try: + import numpy as np +except ImportError: + print("Could not import numpy - is it installed?") + sys.exit(1) + +try: + import pyqtgraph as pg +except ImportError: + print("Could not import pyqtgraph - is it installed?") + sys.exit(1) + +try: + # Python 2 + from Queue import Queue +except ImportError: + # Python 3 + from queue import Queue + +parser = argparse.ArgumentParser() +parser.add_argument("--wide", action="store_true", default=False, help="Alternate wide arrangement of widgets, for placement at bottom of 4:3 screen.") +args = parser.parse_args() + +# Some settings... +update_rate = 2 # Hz +history_size = 100 # 10 seconds at 10Hz... +history_scale = np.linspace((-1*history_size+1)/float(update_rate),0,history_size) + +# Input queue +in_queue = Queue(1) # 1-element FIFO... + +win = pg.GraphicsWindow() +win.setWindowTitle('FSK Demodulator Modem Statistics') + + +# Plot objects +ebno_plot = win.addPlot(title="Eb/No") +ppm_plot = win.addPlot(title="Sample Clock Offset") +if args.wide == False: + win.nextRow() +else: + win.resize(1024,200) +fest_plot =pg.PlotItem() # win.addPlot(title="Tone Frequency Estimation") +eye_plot = win.addPlot(title="Eye Diagram") +# Disable auto-ranging on eye plot and fix axes for a big speedup... +spec_plot = win.addPlot(title="Spectrum") +spec_plot.setYRange(0,40) +spec_plot.setLabel('left','SNR (dB)') +spec_plot.setLabel('bottom','FFT Bin') +# Configure plot labels and scales. +ebno_plot.setLabel('left','Eb/No (dB)') +ebno_plot.setLabel('bottom','Time (seconds)') +ebno_plot.setYRange(0,30) +ppm_plot.setLabel('left','Clock Offset (ppm)') +ppm_plot.setLabel('bottom','Time (seconds)') +fest_plot.setLabel('left','Frequency (Hz)') +fest_plot.setLabel('bottom','Time (seconds)') +eye_plot.disableAutoRange() +eye_plot.setYRange(0,1) +eye_plot.setXRange(0,15) +eye_xr = 15 + +# Data arrays... +ebno_data = np.zeros(history_size) +ppm_data = np.zeros(history_size) +fest_data = np.zeros((4,history_size)) + +# Curve objects, so we can update them... +spec_curve = spec_plot.plot([0]) +ebno_curve = ebno_plot.plot(x=history_scale,y=ebno_data) +ppm_curve = ppm_plot.plot(x=history_scale,y=ppm_data) +fest1_curve = fest_plot.plot(x=history_scale,y=fest_data[0,:],pen='r') # f1 = Red +fest2_curve = fest_plot.plot(x=history_scale,y=fest_data[1,:],pen='g') # f2 = Blue +fest3_curve = fest_plot.plot(x=history_scale,y=fest_data[2,:],pen='b') # f3 = Greem +fest4_curve = fest_plot.plot(x=history_scale,y=fest_data[3,:],pen='m') # f4 = Magenta + +# Plot update function. Reads from queue, processes and updates plots. +def update_plots(): + global timeout,timeout_counter,eye_plot,ebno_curve, ppm_curve, fest1_curve, fest2_curve, ebno_data, ppm_data, fest_data, in_queue, eye_xr, spec_curve + + try: + if in_queue.empty(): + return + in_data = in_queue.get_nowait() + in_data = json.loads(in_data) + except Exception as e: + + sys.stderr.write(str(e)) + return + + # Roll data arrays + ebno_data[:-1] = ebno_data[1:] + ppm_data[:-1] = ppm_data[1:] + fest_data = np.roll(fest_data,-1,axis=1) + + + # Try reading in the new data points from the dictionary. + try: + new_ebno = in_data['EbNodB'] + new_ppm = in_data['ppm'] + new_fest1 = in_data['f1_est'] + new_fest2 = in_data['f2_est'] + new_spec = in_data['samp_fft'] + except Exception as e: + print("ERROR reading dict: %s" % e) + + # Try reading in the other 2 tones. + try: + new_fest3 = in_data['f3_est'] + new_fest4 = in_data['f4_est'] + fest_data[2,-1] = new_fest3 + fest_data[3,-1] = new_fest4 + except: + # If we can't read these tones out of the dict, fill with NaN + fest_data[2,-1] = np.nan + fest_data[3,-1] = np.nan + + # Add in new data points + ebno_data[-1] = new_ebno + ppm_data[-1] = new_ppm + fest_data[0,-1] = new_fest1 + fest_data[1,-1] = new_fest2 + + + # Update plots + spec_data_log = 20*np.log10(np.array(new_spec)+0.01) + spec_curve.setData(spec_data_log) + spec_plot.setYRange(spec_data_log.max()-50,spec_data_log.max()+10) + ebno_curve.setData(x=history_scale,y=ebno_data) + ppm_curve.setData(x=history_scale,y=ppm_data) + fest1_curve.setData(x=history_scale,y=fest_data[0,:],pen='r') # f1 = Red + fest2_curve.setData(x=history_scale,y=fest_data[1,:],pen='g') # f2 = Blue + fest3_curve.setData(x=history_scale,y=fest_data[2,:],pen='b') # f3 = Green + fest4_curve.setData(x=history_scale,y=fest_data[3,:],pen='m') # f4 = Magenta + + #Now try reading in and plotting the eye diagram + try: + eye_data = np.array(in_data['eye_diagram']) + + #eye_plot.disableAutoRange() + eye_plot.clear() + col_index = 0 + for line in eye_data: + eye_plot.plot(line,pen=(col_index,eye_data.shape[0])) + col_index += 1 + #eye_plot.autoRange() + + #Quick autoranging for x-axis to allow for differing P and Ts values + if eye_xr != len(eye_data[0]) - 1: + eye_xr = len(eye_data[0]) - 1 + eye_plot.setXRange(0,len(eye_data[0])-1) + + except Exception as e: + pass + + +timer = pg.QtCore.QTimer() +timer.timeout.connect(update_plots) +timer.start(1000/update_rate) + + +# Thread to read from stdin and push into a queue to be processed. +def read_input(): + global in_queue + + while True: + in_line = sys.stdin.readline() + if type(in_line) == bytes: + in_line = in_line.decode() + + # Only push actual data into the queue... + # This stops sending heaps of empty strings into the queue when fsk_demod closes. + if in_line == "": + time.sleep(0.1) + continue + + if not in_queue.full(): + in_queue.put_nowait(in_line) + + +read_thread = Thread(target=read_input) +read_thread.daemon = True # Set as daemon, so when all other threads die, this one gets killed too. +read_thread.start() + +## Start Qt event loop unless running in interactive mode or using pyside. +if __name__ == '__main__': + import sys + if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'): + try: + QtGui.QApplication.instance().exec_() + except KeyboardInterrupt: + sys.exit(0) diff --git a/libcodec2-android/src/codec2/octave/gen_rn_coeffs.m b/libcodec2-android/src/codec2/octave/gen_rn_coeffs.m new file mode 100644 index 0000000..bfc214e --- /dev/null +++ b/libcodec2-android/src/codec2/octave/gen_rn_coeffs.m @@ -0,0 +1,40 @@ +% gen_rn_coeffs.m +% David Rowe 13 april 2012 +% +% Generate root raised cosine (Root Nyquist) filter coefficients +% thanks http://www.dsplog.com/db-install/wp-content/uploads/2008/05/raised_cosine_filter.m + +function coeffs = gen_rn_coeffs(alpha, T, Rs, Nsym, M) + + Ts = 1/Rs; + + n = -Nsym*Ts/2:T:Nsym*Ts/2; + Nfilter = Nsym*M; + Nfiltertiming = M+Nfilter+M; + + sincNum = sin(pi*n/Ts); % numerator of the sinc function + sincDen = (pi*n/Ts); % denominator of the sinc function + sincDenZero = find(abs(sincDen) < 10^-10); + sincOp = sincNum./sincDen; + sincOp(sincDenZero) = 1; % sin(pix/(pix) =1 for x =0 + + cosNum = cos(alpha*pi*n/Ts); + cosDen = (1-(2*alpha*n/Ts).^2); + cosDenZero = find(abs(cosDen)<10^-10); + cosOp = cosNum./cosDen; + cosOp(cosDenZero) = pi/4; + gt_alpha5 = sincOp.*cosOp; + Nfft = 4096; + GF_alpha5 = fft(gt_alpha5,Nfft)/M; + + % sqrt causes stop band to be amplified, this hack pushes it down again + + for i=1:Nfft + if (abs(GF_alpha5(i)) < 0.02) + GF_alpha5(i) *= 0.001; + endif + end + GF_alpha5_root = sqrt(abs(GF_alpha5)) .* exp(j*angle(GF_alpha5)); + ifft_GF_alpha5_root = ifft(GF_alpha5_root); + coeffs = real((ifft_GF_alpha5_root(1:Nfilter))); +endfunction diff --git a/libcodec2-android/src/codec2/octave/gmsk.m b/libcodec2-android/src/codec2/octave/gmsk.m new file mode 100644 index 0000000..5f07d44 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/gmsk.m @@ -0,0 +1,1021 @@ +% gmsk.m +% David Rowe Dec 2014 +% +% GMSK modem implementation and simulations to test + +% +% [X] plot eye diagram +% [X] BER curves with reas match to theoretical +% [X] fine timing estimator +% [X] test with fine timing error by resampling +% [X] phase/freq estimator +% + need initial acquisition and tracking +% [X] test with different freq offsets +% [X] coarse timing estimator (sync up to known test frames) +% [X] test with different coarse timing offsets +% [ ] file read/write interface +% [ ] refactor into tx/rx functions +% [X] modify for 1200 (or any) bit/s operation +% + ie GMSK filter coeff generation +% + or just re-sampling? e.g. ratio of Fs to Rs? +% [ ] way to measure input SNR to demod +% + Maybe based on test tone/carrier from the other side? +% + think about process ... total signal plus noise power? Increase power until S+N doubles? +% [X] generate curves for baseline modem and with sync algorithms +% [X] used coarse sync code to remove need for knowing delays +% [X] demod level indep +% + scaled OK +/- 20dB same BER +% [X] effect of DC signals from SDRs +% + simulated effect of general interferer at -1500Hz, at an amplitude of 4 +% (12 dB above GMSK signal), it started to affect BER e.g. 0.007 to 0.009 +% Line appeared about 30dB above top of GMSK signal. +% [ ] effect of quantisation noise + +% Filter coeffs From: +% https://github.com/on1arf/gmsk/blob/master/gmskmodem_codec2/API/a_dspstuff.h, +% which is in turn from Jonathan G4KLX. The demod coeffs low pass filter noise + +global gmsk_mod_coeff = [... + 6.455906007234699e-014, 1.037067381285011e-012, 1.444835156335346e-011,... +1.745786683011439e-010, 1.829471305298363e-009, 1.662729407135958e-008,... +1.310626978701910e-007, 8.959797186410516e-007, 5.312253663302771e-006,... +2.731624380156465e-005, 1.218217140199093e-004, 4.711833994209542e-004,... +1.580581180127418e-003, 4.598383433830095e-003, 1.160259430889949e-002,... +2.539022692626253e-002, 4.818807833062393e-002, 7.931844341164322e-002,... +1.132322945270602e-001, 1.401935338024111e-001, 1.505383695578516e-001,... +1.401935338024111e-001, 1.132322945270601e-001, 7.931844341164328e-002,... +4.818807833062393e-002, 2.539022692626253e-002, 1.160259430889949e-002,... +4.598383433830090e-003, 1.580581180127420e-003, 4.711833994209542e-004,... +1.218217140199093e-004, 2.731624380156465e-005, 5.312253663302753e-006,... +8.959797186410563e-007, 1.310626978701910e-007, 1.662729407135958e-008,... +1.829471305298363e-009, 1.745786683011426e-010, 1.444835156335356e-011,... +1.037067381285011e-012, 6.455906007234699e-014]; + +global gmsk_demod_coeff = [... +-0.000153959924563, 0.000000000000000, 0.000167227768379, 0.000341615513437,... +0.000513334449696, 0.000667493753523, 0.000783901543032, 0.000838293462576,... +0.000805143268199, 0.000661865814384, 0.000393913058926, -0.000000000000000,... +-0.000503471198655, -0.001079755887508, -0.001671728086040, -0.002205032425392,... +-0.002594597675000, -0.002754194565297, -0.002608210441859, -0.002104352817854,... +-0.001225654870420, 0.000000000000000, 0.001494548041184, 0.003130012785731,... +0.004735238379172, 0.006109242742194, 0.007040527007323, 0.007330850462455,... +0.006821247169795, 0.005417521811131, 0.003112202160626, -0.000000000000000,... +-0.003715739376345, -0.007727358782391, -0.011638713107503, -0.014992029537478,... +-0.017304097563429, -0.018108937286588, -0.017003180218569, -0.013689829477969,... +-0.008015928769710, 0.000000000000000, 0.010154104792614, 0.022059114281395,... +0.035162729807337, 0.048781621388364, 0.062148583345584, 0.074469032280094,... +0.084982001723750, 0.093020219991183, 0.098063819576269, 0.099782731268437,... +0.098063819576269, 0.093020219991183, 0.084982001723750, 0.074469032280094,... +0.062148583345584, 0.048781621388364, 0.035162729807337, 0.022059114281395,... +0.010154104792614, 0.000000000000000, -0.008015928769710, -0.013689829477969,... +-0.017003180218569, -0.018108937286588, -0.017304097563429, -0.014992029537478,... +-0.011638713107503, -0.007727358782391, -0.003715739376345, -0.000000000000000,... +0.003112202160626, 0.005417521811131, 0.006821247169795, 0.007330850462455,... +0.007040527007323, 0.006109242742194, 0.004735238379172, 0.003130012785731,... +0.001494548041184, 0.000000000000000, -0.001225654870420, -0.002104352817854,... +-0.002608210441859, -0.002754194565297, -0.002594597675000, -0.002205032425392,... +-0.001671728086040, -0.001079755887508, -0.000503471198655, -0.000000000000000,... +0.000393913058926, 0.000661865814384, 0.000805143268199, 0.000838293462576,... +0.000783901543032, 0.000667493753523, 0.000513334449696, 0.000341615513437,... +0.000167227768379, 0.000000000000000, -0.000153959924563]; + +rand('state',1); +randn('state',1); +graphics_toolkit ("gnuplot"); +fm; +close all; + +% +% Functions that implement the GMSK modem ------------------------------------------------------ +% + +function gmsk_states = gmsk_init(gmsk_states, Rs) + + % general + + verbose = gmsk_states.verbose; + gmsk_states.Fs = 48000; + gmsk_states.Rs = Rs; + M = gmsk_states.M = gmsk_states.Fs/gmsk_states.Rs; + global gmsk_mod_coeff; + global gmsk_demod_coeff; + gmsk_states.mod_coeff = (Rs/4800)*resample(gmsk_mod_coeff, 4800, Rs); + + if verbose > 1 + figure; + plot(gmsk_mod_coeff,'r;original 4800;') + hold on; + plot(gmsk_states.mod_coeff,'g;interpolated;') + hold off; + title('GMSK pulse shaping filter') + end + + % set up FM modulator + + fm_states.Fs = gmsk_states.Fs; + fm_states.fc = 0; + fm_max = fm_states.fm_max = Rs/2; + fd = fm_states.fd = Rs/4; + fm_states.Ts = gmsk_states.M; + fm_states.pre_emp = fm_states.de_emp = 0; + fm_states.output_filter = 1; + gmsk_states.fm_states = analog_fm_init(fm_states); + +endfunction + + +function [tx tx_filt tx_symbols] = gmsk_mod(gmsk_states, tx_bits) + M = gmsk_states.M; + nsym = length(tx_bits); + nsam = nsym*M; + verbose = gmsk_states.verbose; + + % NRZ sequence of symbols + + tx_symbols = zeros(1,nsam); + for i=1:nsym + tx_symbols(1+(i-1)*M:i*M) = -1 + 2*tx_bits(i); + end + + tx_filt = filter(gmsk_states.mod_coeff, 1, tx_symbols); + + if verbose > 1 + figure; + clf + plot(tx_filt(1:M*10)) + title('tx signal after filtering, before FM mod') + end + + tx = analog_fm_mod(gmsk_states.fm_states, tx_filt); +endfunction + + +function [rx_bits rx_int rx_filt] = gmsk_demod(gmsk_states, rx) + M = gmsk_states.M; + Rs = gmsk_states.Rs; + Fs = gmsk_states.Fs; + nsam = length(rx); + nsym = floor(nsam/M); + global gmsk_demod_coeff; + wd = 2*pi*gmsk_states.fm_states.fd/gmsk_states.Fs; + timing_angle_log = zeros(1,length(rx)); + rx_int = zeros(1,length(rx)); + + if gmsk_states.coherent_demod + + % See IEEE Trans on Comms, Muroyta et al, 1981, "GSM Modulation + % for Digital Radio Telephony" Fig 8: + + % matched filter + + rx_filt = filter(gmsk_states.mod_coeff, 1, rx); + + % Property of MSK that re and im arms are sequences of 2T + % long symbols, can be demodulated like QPSK with matched filter + % and integrate and dump. + + % integrate energy in symbols 2T long in re and im arms + % note this could be combined with matched filter + + rx_int = conv(rx_filt,ones(1,2*M)); + + % phase and fine frequency tracking and correction ------------------------ + + if gmsk_states.phase_track + + % DCO design from "Introduction To Phase-Lock Loop System Modeling", Wen Li + % http://www.ece.ualberta.ca/~ee401/parts/data/PLLIntro.pdf + + eta = 0.707; + wn = 2*pi*10*(Rs/4800); % (Rs/4800) -> found reducing the BW benifical with falling Rs + Ts = 1/Fs; + g1 = 1 - exp(-2*eta*wn*Ts); + g2 = 1 + exp(-2*eta*wn*Ts) - 2*exp(-eta*wn*Ts)*cos(wn*Ts*sqrt(1-eta*eta)); + Gpd = 2/pi; + Gvco = 1; + G1 = g1/(Gpd*Gvco); G2 = g2/(Gpd*Gvco); + %printf("g1: %e g2: %e G1: %e G2: %e\n", g1, g2, G1, G2); + + filt_prev = dco = lower = ph_err_filt = ph_err = 0; + dco_log = filt_log = zeros(1,nsam); + + % w is the ref sine wave at the timing clock frequency + % tw is the length of the window used to estimate timing + + k = 1; + tw = 200*M; + xr_log = []; xi_log = []; + w_log = []; + timing_clock_phase = 0; + timing_angle = 0; + timing_angle_log = zeros(1,nsam); + + for i=1:nsam + + % update sample timing estimate every tw samples + + if mod(i,tw) == 0 + l = i - tw+1; + xr = abs(real(rx_int(l:l+tw-1))); + xi = abs(imag(rx_int(l:l+tw-1))); + w = exp(j*(l:l+tw-1)*2*pi*(Rs/2)/Fs); + X = xr * w'; + timing_clock_phase = timing_angle = angle(X); + k++; + xr_log = [xr_log xr]; + xi_log = [xi_log xi]; + w_log = [w_log w]; + else + timing_clock_phase += (2*pi)/(2*M); + end + timing_angle_log(i) = timing_angle; + + rx_int(i) *= exp(-j*dco); + ph_err = sign(real(rx_int(i))*imag(rx_int(i)))*cos(timing_clock_phase); + lower = ph_err*G2 + lower; + filt = ph_err*G1 + lower; + dco = dco + filt; + filt_log(i) = filt; + dco_log(i) = dco; + end + + figure; + clf + subplot(211); + plot(filt_log); + title('PLL filter') + subplot(212); + plot(dco_log/pi); + title('PLL DCO phase'); + %axis([1 nsam -0.5 0.5]) + end + + % sample integrator output at correct timing instant + + timing_adj = timing_angle_log*2*M/(2*pi); + timing_adj_uw = unwrap(timing_angle_log)*2*M/(2*pi); + % Toff = floor(2*M+timing_adj); + Toff = floor(timing_adj_uw+0.5); + k = 1; + re_syms = im_syms = zeros(1,nsym/2); + + for i=2*M:2*M:nsam + if (i-Toff(i)+M) < nsam + re_syms(k) = real(rx_int(i-Toff(i))); + im_syms(k) = imag(rx_int(i-Toff(i)+M)); + end + %re_syms(k) = real(rx_int(i-10)); + %im_syms(k) = imag(rx_int(i+M-10)); + k++; + end + + figure + subplot(211) + stem(re_syms) + subplot(211) + stem(im_syms) + + figure; + clf + subplot(211) + plot(timing_adj); + title('Timing est'); + subplot(212) + plot(Toff); + title('Timing est unwrap'); + + % XORs/adders on the RHS of Muroyta et al Fig 8 (a) and (b). We + % simulate digital logic bit stream at clock rate Rs, even though + % we sample integrators at rate Rs/2. I can't explain how and why + % this logic works/is required. I think it can be worked out from + % comparing to MSK/OQPSK demod designs. + + l = length(re_syms); + l2 = 2*l; + re_bits = zeros(1,l2); + im_bits = zeros(1,l2); + clk_bits = zeros(1,l2); + for i=1:l-1 + re_bits(2*(i-1)+1) = re_syms(i) > 0; + re_bits(2*(i-1)+2) = re_syms(i) > 0; + im_bits(2*(i-1)+2) = im_syms(i) > 0; + im_bits(2*(i-1)+3) = im_syms(i) > 0; + clk_bits(2*(i-1)+1) = 0; + clk_bits(2*(i-1)+2) = 1; + end + + rx_bits = bitxor(bitxor(re_bits,im_bits), clk_bits); + rx_bits = rx_bits(2:length(rx_bits)-1); + else + % non-coherent demod + + % filter to get rid of most of noise before FM demod, but doesnt + % introduce any ISI + + fc = Rs/(Fs/2); + bin = firls(200,[0 fc*(1-0.05) fc*(1+0.05) 1],[1 1 0.01 0.01]); + rx_filt = filter(bin, 1, rx); + + % FM demod + + rx_diff = [ 1 rx_filt(2:nsam) .* conj(rx_filt(1:nsam-1))]; + rx_filt = (1/wd)*atan2(imag(rx_diff),real(rx_diff)); + + % low pass filter, trade off betwen ISI and removing noise + + rx_filt = filter(gmsk_demod_coeff, 1, rx_filt); + Toff = 7; + rx_bits = real(rx_filt(1+Toff:M:length(rx_filt)) > 0); + + end + +endfunction + + +% Initial frequency offset estimation. Look for line a centre +% frequency, which is the strongest component when ...101010... is +% used to modulate the GMSK signal. Note just searching for a single +% line will get false lock on random sine waves but that's OK for a +% PoC. It could be improved by checking for other lines, or +% demodulating the preamble and checking for bit errors. + +function [freq_offset_est ratio] = gmsk_est_freq_offset(gmsk_states, rx, verbose) + Fs = gmsk_states.Fs; + Rs = gmsk_states.Rs; + + % Suggest Rs/10 symbols of preamble (100ms), this works OK at + % Rs=4800 and Es/No = 6dB. The large, Fs sample FFT size is used + % for convenience (the bin resolution is 1 Hz), for real time we + % would decimate and use smaller FFT to save CPU and memory. + + ndft = Fs; + f = fft(rx .* hanning(length(rx))', ndft); + f = fftshift(f); + + start_bin = 1 + Fs/2-Rs/4; + stop_bin = start_bin + Rs/2; + [max_val max_bin] = max(abs(f(start_bin:stop_bin))); + + max_bin -= Rs/4 + 1; + if verbose > 1 + printf("ndft: %d start_bin: %d stop_bin: %d max_bin: %d\n", ndft, start_bin, stop_bin, max_bin); + end + + % calc ratio of line energy to total energy. For a valid preamble + % this was measured as about 0.20 to 0.25 depending on noise. + + sum_sq = sum(abs(f(start_bin:stop_bin)) .^ 2); + ratio = sqrt(max_val*max_val/sum_sq); + + % map max_bin to frequency offset + + freq_offset_est = max_bin; + + if verbose > 1 + printf("freq_offset_est: %f pk/rms ratio: %f \n", freq_offset_est, ratio); + figure; + clf + subplot(211) + plot(rx,'+') + title('rx signal on complex plane') + subplot(212) + plot(-Rs/4:Rs/4, 20*log10(abs(f(start_bin:stop_bin)))); + axis([-Rs/4 Rs/4 0 80]); + title('spectrum of rx signal'); + end + +endfunction + +% +% Functions for Testing the GMSK modem -------------------------------------------------------- +% + +function sim_out = gmsk_test(sim_in) + nsym = sim_in.nsym; + EbNodB = sim_in.EbNodB; + verbose = sim_in.verbose; + Rs = 4800; + + gmsk_states.verbose = verbose; + gmsk_states.coherent_demod = sim_in.coherent_demod; + gmsk_states.phase_track = 0; + gmsk_states = gmsk_init(gmsk_states, Rs); + M = gmsk_states.M; + Fs = gmsk_states.Fs; + Rs = gmsk_states.Rs; + Bfm = gmsk_states.fm_states.Bfm; + + for ne = 1:length(EbNodB) + aEbNodB = EbNodB(ne); + EbNo = 10^(aEbNodB/10); + variance = Fs/(Rs*EbNo); + + tx_bits = round(rand(1, nsym)); + %tx_bits = ones(1, nsym); + %tx_bits = zeros(1, nsym); + %tx_bits(1:2:nsym) = 0; + [tx tx_filt tx_symbols] = gmsk_mod(gmsk_states, tx_bits); + nsam = length(tx); + + noise = sqrt(variance/2)*(randn(1,nsam) + j*randn(1,nsam)); + rx = tx*exp(j*pi/2) + noise; + + [rx_bits rx_out rx_filt] = gmsk_demod(gmsk_states, rx(1:length(rx))); + + % search for frame location over a range + + Nerrs_min = nsym; Nbits_min = nsym; l = length(rx_bits); + for i=1:100; + Nerrs = sum(xor(rx_bits(i:l), tx_bits(1:l-i+1))); + if Nerrs < Nerrs_min + Nerrs_min = Nerrs; + Nbits_min = l; + end + end + + TERvec(ne) = Nerrs_min; + BERvec(ne) = Nerrs_min/Nbits_min; + + if verbose > 0 + printf("EbNo dB: %3.1f Nerrs: %d BER: %f BER Theory: %f\n", aEbNodB, Nerrs_min, BERvec(ne), 0.5*erfc(sqrt(0.75*EbNo))); + end + + if verbose > 1 + + if gmsk_states.coherent_demod == 0 + Toff = 0; dsam = M*30; + figure; + clf + eyesyms = 2; + plot(rx_filt(dsam+1+Toff:dsam+eyesyms*M+Toff)) + hold on; + for i=1:10 + st = dsam+1+Toff+i*eyesyms*M; + en = st + eyesyms*M; + plot(rx_filt(st:en)) + end + hold off; + %axis([dsam dsam+eyesyms*M -2 2]); + title('Eye Diagram'); + else + figure; + nplot = 16; + clf; + subplot(211) + plot(real(rx_filt(1:nplot*M))) + axis([1 nplot*M -1 1]) + title('Matched Filter'); + subplot(212) + plot(imag(rx_filt(1:nplot*M))) + axis([1 nplot*M -1 1]) + + figure; + nplot = 16; + clf; + subplot(211) + plot(real(rx_out(1:nplot*M))/(2*M)) + title('Integrator'); + axis([1 nplot*M -1 1]) + subplot(212) + plot(imag(rx_out(1:nplot*M)/(2*M))) + axis([1 nplot*M -1 1]) + end + + figure; + clf + subplot(211) + stem(tx_bits(1:20)) + title('Tx Bits') + subplot(212) + stem(rx_bits(1:20)) + title('Rx Bits') + + figure; + clf + subplot(211); + f = fft(rx); + Tx = 20*log10(abs(f)); + plot(Tx) + grid; + title('GMSK Demodulator Input Spectrum'); + axis([1 5000 0 80]) + + subplot(212) + f = fft(tx); + f = f(1:length(f)/2); + cs = cumsum(abs(f).^2); + plot(cs) + hold on; + x = 0.99; + tots = x*sum(abs(f).^2); + xpercent_pwr = find(cs > tots); + bw = 2*xpercent_pwr(1); + plot([1 Fs/2],[tots tots],'r') + plot([bw/2 bw/2],[0 tots],'r') + hold off; + title("Cumulative Power"); + grid; + axis([1 5000 0 max(cs)]) + + printf("Bfm: %4.0fHz %3.0f%% power bandwidth %4.0fHz = %3.2f*Rb\n", Bfm, x*100, bw, bw/Rs); + + end + end + + sim_out.TERvec = TERvec; + sim_out.BERvec = BERvec; + sim_out.Rs = gmsk_states.Rs; +endfunction + + +function run_gmsk_single + sim_in.coherent_demod = 0; + sim_in.nsym = 4800; + sim_in.EbNodB = 10; + sim_in.verbose = 2; + + sim_out = gmsk_test(sim_in); +endfunction + + +% Generate a bunch of BER versus Eb/No curves for various demods + +function run_gmsk_curves + sim_in.coherent_demod = 1; + sim_in.nsym = 48000; + sim_in.EbNodB = 2:10; + sim_in.verbose = 1; + + gmsk_coh = gmsk_test(sim_in); + + sim_in.coherent_demod = 0; + gmsk_noncoh = gmsk_test(sim_in); + + Rs = gmsk_coh.Rs; + EbNo = 10 .^ (sim_in.EbNodB/10); + alpha = 0.75; % guess for BT=0.5 GMSK + gmsk_theory.BERvec = 0.5*erfc(sqrt(alpha*EbNo)); + + % BER v Eb/No curves + + figure; + clf; + semilogy(sim_in.EbNodB, gmsk_theory.BERvec,'r;GMSK theory;') + hold on; + semilogy(sim_in.EbNodB, gmsk_coh.BERvec,'g;GMSK sim coherent;') + semilogy(sim_in.EbNodB, gmsk_noncoh.BERvec,'b;GMSK sim non-coherent;') + hold off; + grid("minor"); + axis([min(sim_in.EbNodB) max(sim_in.EbNodB) 1E-4 1]) + legend("boxoff"); + xlabel("Eb/No (dB)"); + ylabel("Bit Error Rate (BER)") + + % BER v C/No (1 Hz noise BW and Eb=C/Rs=1/Rs) + % Eb/No = (C/Rs)/(1/(N/B)) + % C/N = (Eb/No)*(Rs/B) + + RsOnB_dB = 10*log10(Rs/1); + figure; + clf; + semilogy(sim_in.EbNodB+RsOnB_dB, gmsk_theory.BERvec,'r;GMSK theory;') + hold on; + semilogy(sim_in.EbNodB+RsOnB_dB, gmsk_coh.BERvec,'g;GMSK sim coherent;') + semilogy(sim_in.EbNodB+RsOnB_dB, gmsk_noncoh.BERvec,'b;GMSK sim non-coherent;') + hold off; + grid("minor"); + axis([min(sim_in.EbNodB+RsOnB_dB) max(sim_in.EbNodB+RsOnB_dB) 1E-4 1]) + legend("boxoff"); + xlabel("C/No for Rs=4800 bit/s and 1 Hz noise bandwidth (dB)"); + ylabel("Bit Error Rate (BER)") + +endfunction + + +function [preamble_location freq_offset_est] = find_preamble(gmsk_states, M, npreamble, rx) + verbose = gmsk_states.verbose; + + % look through rx buffer and determine if there is a valid preamble. Use steps of half the + % preamble size in samples to try to bracket the pre-amble. + + preamble_step = npreamble*M/2; + ratio = 0; freq_offset_est = 0; preamble_location = 0; + ratio_log = []; + for i=1:preamble_step:length(rx)-preamble_step + [afreq_offset_est aratio] = gmsk_est_freq_offset(gmsk_states, rx(i:i+preamble_step-1), verbose); + ratio_log = [ratio_log aratio]; + if aratio > ratio + preamble_location = i; + ratio = aratio; + freq_offset_est = afreq_offset_est; + end + end + if verbose + printf("preamble location: %2.1f seconds est f_off: %5.1f Hz ratio: %3.2f\n", + preamble_location/gmsk_states.Fs, freq_offset_est, ratio); + figure; + plot(ratio_log); + title('Preamble ratio'); + end +endfunction + + +% attempt to perform "coarse sync" sync with the received frames, we +% check each frame for the best coarse sync position. Brute force +% approach, that would be changed for a real demod which has some +% sort of unique word. Start looking for valid frames 1 frame +% after start of pre-amble to give PLL time to lock + +function [total_errors total_bits Nerrs_log Nerrs_all_log errors_log] = coarse_sync_ber(nframes_rx, tx_frame, rx_bits) + + Nerrs_log = zeros(1, nframes_rx); + Nerrs_all_log = zeros(1, nframes_rx); + total_errors = 0; + total_bits = 0; + framesize = length(tx_frame); + errors_log = []; + + for f=2:nframes_rx-1 + Nerrs_min = framesize; + for i=1:framesize; + st = (f-1)*framesize+i; en = st+framesize-1; + errors = xor(rx_bits(st:en), tx_frame); + Nerrs = sum(errors); + if Nerrs < Nerrs_min + Nerrs_min = Nerrs; + errors_min = errors; + end + end + Nerrs_all_log(f) = Nerrs_min; + if Nerrs_min/framesize < 0.1 + errors_log = [errors_log errors_min]; + Nerrs_log(f) = Nerrs_min; + total_errors += Nerrs_min; + total_bits += framesize; + end + end +endfunction + +function plot_spectrum(gmsk_states, rx, preamble_location, title_str) + Fs = gmsk_states.Fs; + st = preamble_location + gmsk_states.npreamble*gmsk_states.M; + sig = rx(st:st+Fs*0.5); + h = hanning(length(sig))'; + Rx=20*log10(abs(fftshift(fft(sig .* h, Fs)))); + figure; + plot(-Fs/2:Fs/2-1,Rx); + grid("minor"); + xlabel('Hz'); + ylabel('dB'); + topy = ceil(max(Rx)/10)*10; + axis([-4000 4000 topy-50 topy+10]) + title(title_str); +endfunction + +% Give the demod a hard time: frequency, phase, time offsets, sample clock difference + +function run_test_channel_impairments + Rs = 1200; + verbose = 1; + aEbNodB = 6; + phase_offset = pi/2; + freq_offset = -104; + timing_offset = 100E3; + sample_clock_offset_ppm = -500; + interferer_freq = -1500; + interferer_amp = 0; + nsym = 4800*2; + npreamble = 480; + + gmsk_states.npreamble = npreamble; + gmsk_states.verbose = verbose; + gmsk_states.coherent_demod = 1; + gmsk_states.phase_track = 1; + gmsk_states = gmsk_init(gmsk_states, Rs); + Fs = gmsk_states.Fs; + Rs = gmsk_states.Rs; + M = gmsk_states.M; + + % A frame consists of nsym random data bits. Some experimentation + % has shown they must be random-ish data (not say 11001100...) for + % timing estimator to work. However initial freq offset estimation + % is a lot easier with a 01010 type sequence, so we construct a + % frame with a pre-amble followed by frames of random data. + + framesize = 480; + nframes = floor(nsym/framesize); + tx_frame = round(rand(1, framesize)); + tx_bits = zeros(1,npreamble); + tx_bits(1:2:npreamble) = 1; + for i=1:nframes + tx_bits = [tx_bits tx_frame]; + end + + [tx tx_filt tx_symbols] = gmsk_mod(gmsk_states, tx_bits); + + tx = resample(tx, 1E6, 1E6-sample_clock_offset_ppm); + tx = [zeros(1,timing_offset) tx]; + nsam = length(tx); + + if verbose > 1 + figure; + subplot(211) + st = timing_offset; en = st+M*10; + plot(real(tx(st:en))) + title('Real part of tx'); + subplot(212) + plot(imag(tx(st:en))) + title('Imag part of tx'); + end + + EbNo = 10^(aEbNodB/10); + variance = Fs/(Rs*EbNo); + noise = sqrt(variance/2)*(randn(1,nsam) + j*randn(1,nsam)); + w = (0:nsam-1)*2*pi*freq_offset/Fs + phase_offset; + interferer = interferer_amp*exp(j*interferer_freq*(2*pi/Fs)*(0:nsam-1)); + + rx = sqrt(2)*tx.*exp(j*w) + noise + interferer; + + % optional dump to file + + if 1 + fc = 1500; gain = 10000; + wc = 2*pi*fc/Fs; + w1 = exp(j*wc*(1:nsam)); + rx1 = gain*real(rx .* w1); + fout = fopen("rx_6dB.raw","wb"); + fwrite(fout, rx1, "short"); + fclose(fout); + end + + rx = rx1 .* conj(w1); + + [preamble_location freq_offset_est] = find_preamble(gmsk_states, M, npreamble, rx); + w_est = (0:nsam-1)*2*pi*freq_offset_est/Fs; + rx = rx.*exp(-j*w_est); + + plot_spectrum(gmsk_states, rx, preamble_location, "GMSK rx just after preamble"); + + % printf("ntx: %d nrx: %d ntx_bits: %d\n", length(tx), length(rx), length(tx_bits)); + + [rx_bits rx_out rx_filt] = gmsk_demod(gmsk_states, rx(preamble_location+framesize:nsam)); + nframes_rx = length(rx_bits)/framesize; + + % printf("ntx: %d nrx: %d ntx_bits: %d nrx_bits: %d\n", length(tx), length(rx), length(tx_bits), length(rx_bits)); + + [total_errors total_bits Nerrs_log Nerrs_all_log] = coarse_sync_ber(nframes_rx, tx_frame, rx_bits); + + ber = total_errors/total_bits; + + printf("Eb/No: %3.1f f_off: %4.1f ph_off: %4.3f Nframes: %d Nbits: %d Nerrs: %d BER: %f\n", + aEbNodB, freq_offset, phase_offset, nframes_rx, total_bits, total_errors, ber); + + figure; + clf + subplot(211) + plot(Nerrs_log,'r;errors/frame counted for BER;'); + hold on; + plot(Nerrs_all_log,'g;all errors/frame;'); + hold off; + legend("boxoff"); + title('Bit Errors') + subplot(212) + stem(real(cumsum(Nerrs_log))) + title('Cumulative Bit Errors') + +endfunction + + +% Generates a Fs=48kHz raw file of 16 bit samples centred on 1500Hz, +% Suitable for transmitting with a SSB tx + +function gmsk_tx(tx_file_name) + rand('state',1); + Rs = 1200; + nsym = Rs*4; + framesize = 480; + npreamble = 480; + gain = 10000; + fc = 1500; + + gmsk_states.verbose = 0; + gmsk_states.coherent_demod = 1; + gmsk_states.phase_track = 1; + gmsk_states = gmsk_init(gmsk_states, Rs); + Fs = gmsk_states.Fs; + Rs = gmsk_states.Rs; + M = gmsk_states.M; + + % generate frame with preamble + + nframes = floor(nsym/framesize) + tx_frame = round(rand(1, framesize)); + tx_bits = zeros(1,npreamble); + tx_bits(1:2:npreamble) = 1; + for i=1:nframes + tx_bits = [tx_bits tx_frame]; + end + + [tx tx_filt tx_symbols] = gmsk_mod(gmsk_states, tx_bits); + nsam = length(tx); + + wc = 2*pi*fc/Fs; + w = exp(j*wc*(1:nsam)); + tx = gain*real(tx .* w); + figure; + plot(tx(1:4000)) + fout = fopen(tx_file_name,"wb"); + fwrite(fout, tx, "short"); + fclose(fout); + +endfunction + + +% Reads a file of Fs=48kHz 16 bit samples centred on 1500Hz, and +% measures the BER. + +function gmsk_rx(rx_file_name, err_file_name) + rand('state',1); + + Rs = 1200; + framesize = 480; + npreamble = 480; + fc = 1500; + + gmsk_states.npreamble = npreamble; + gmsk_states.verbose = 1; + gmsk_states.coherent_demod = 1; + gmsk_states.phase_track = 1; + gmsk_states = gmsk_init(gmsk_states, Rs); + Fs = gmsk_states.Fs; + Rs = gmsk_states.Rs; + M = gmsk_states.M; + + tx_frame = round(rand(1, framesize)); + + % get real signal at fc offset and convert to baseband complex + % signal + + fin = fopen(rx_file_name,"rb"); + rx = fread(fin,"short")'; + fclose(fin); + rx = filter([1 -0.999],[1 -0.99],rx); + nsam = length(rx); + wc = 2*pi*fc/Fs; + w = exp(-j*wc*(1:nsam)); + rxbb = rx .* w; + + figure; + plot(rx); + + % find preamble + + [preamble_location freq_offset_est] = find_preamble(gmsk_states, M, npreamble, rxbb); + + % power of signal, averaged over window + % TODO: remove wave file header, scale of actual level + % filter so we measure only energy in our passband + % work out noise BW of filter. Use GMSK filter? + + [b a] = cheby2(6,40,[200 3000]/(Fs/2)); + %bpwr_lp = fir2([200,4000/(Fs/2)); + noise_bw = var(filter(b,a,randn(1,1E6))); + + rx_filt = filter(b, a, rx(1000:length(rx))); + npower_window = 200*M; + rx_power = conv(rx_filt.^2,ones(1,npower_window))/(npower_window); + rx_power_dB = 10*log10(rx_power); + figure; + subplot(211) + plot(rx_filt(1000:length(rx_filt))); + title('GMSK Power (narrow filter)'); + subplot(212) + plot(rx_power_dB); + axis([1 length(rx_power) max(rx_power_dB)-29 max(rx_power_dB)+1]) + grid("minor") + + % Work out where to sample N, and S+N + + noise_end = preamble_location - 2*npreamble*M; + noise_start = noise_end - Fs; + if noise_start < 1 + printf("Hmm, we really need >1 second of noise only before preamble to measure noise!\n"); + else + noise = mean(rx_power_dB(noise_start:noise_end)); + signal_noise_start = preamble_location + 2*npreamble*M; + signal_noise_end = signal_noise_start + Fs; + signal_noise = mean(rx_power_dB(signal_noise_start:signal_noise_end)); + hold on; + plot([noise_start noise_end],[noise noise],'color','r','linewidth',5); + plot([signal_noise_start signal_noise_end],[signal_noise signal_noise],'color','r','linewidth',5); + + % determine SNR + + noise_lin = 10 ^ (noise/10); + signal_noise_lin = 10 ^ (signal_noise/10); + signal_lin = signal_noise_lin - noise_lin; + signal = 10*log10(signal_lin); + snr = signal - noise; + fudge_factor = 3; % 3dB for single/double sided noise adjustment? Just a guess + CNo = snr + 10*log10(Fs*noise_bw) - fudge_factor; + EbNo = CNo - 10*log10(Rs); + + EbNo_lin = 10 .^ (EbNo/10); + alpha = 0.75; % guess for BT=0.5 GMSK + ber_theory = 0.5*erfc(sqrt(alpha*EbNo_lin)); + + printf("Estimated S: %3.1f N: %3.1f Nbw: %4.0f Hz SNR: %3.1f CNo: %3.1f EbNo: %3.1f BER theory: %f\n", + signal, noise, Fs*noise_bw, snr, CNo, EbNo, ber_theory); + + % FM signal is centred on 12 kHz and 16 kHz wide so lets also work out noise there + + [b a] = cheby2(6,40,[12000-8000 12000+8000]/(Fs/2)); + noise_bw_fm = var(filter(b,a,randn(1,1E6))); + + rx_filt_fm = filter(b, a, rx(1000:length(rx))); + rx_power_fm = conv(rx_filt_fm.^2,ones(1,npower_window))/(npower_window); + rx_power_dB_fm = 10*log10(rx_power_fm); + + noise = mean(rx_power_dB_fm(noise_start:noise_end))*ones(1, length(rx_power_fm)); + noise_lin = 10 .^ (noise/10); + + signal_lin = rx_power_fm - noise_lin; + signal = 10*log10(abs(signal_lin) + 1E-6); + snr = signal - noise; + + CNo = snr + 10*log10(Fs*noise_bw_fm) - fudge_factor; + + figure + plot(rx_power_dB_fm,'r;signal plus noise;'); + hold on; + plot(CNo,'g;C/No;'); + hold off; + top_fm = ceil(max(CNo)/10)*10; + axis([1 length(rx_power_dB_fm) 20 top_fm]) + grid("minor") + legend("boxoff"); + title('FM C/No'); + end + + % spectrum of a chunk of GMSK signal just after preamble + + plot_spectrum(gmsk_states, rx, preamble_location, "GMSK rx just after preamble"); + + % correct freq offset and demodulate + + w_est = (0:nsam-1)*2*pi*freq_offset_est/Fs; + rxbb = rxbb.*exp(-j*w_est); + st = preamble_location+npreamble*M; + %en = min(nsam,st + 4*framesize*M); + en = nsam; + gmsk_statres.verbose = 2; + [rx_bits rx_out rx_filt] = gmsk_demod(gmsk_states, rxbb(st:en)); + nframes_rx = length(rx_bits)/framesize; + + % count errors + + [total_errors total_bits Nerrs_log Nerrs_all_log errors_log] = coarse_sync_ber(nframes_rx, tx_frame, rx_bits); + + ber = total_errors/total_bits; + + printf("Nframes: %d Nbits: %d Nerrs: %d BER: %f\n", + nframes_rx, total_bits, total_errors, ber); + + % Optionally save a file of bit errors so we can simulate the effect on Codec 2 + + if nargin == 2 + + % To simulate effects of these errors on Codec 2: + % $ ~/codec2-dev/octave$ ../build_linux/src/c2enc 1300 ../raw/hts1raw - | ../build_linux/src/insert_errors - - ssb7dbSNR.err 52 | ../build_linux/src/c2dec 1300 - - | play -t raw -r 8000 -s -2 - + % Note in this example I'm using the 1300 bit/s codec, it's sig more robust that 1200 bit/s, + % if we ran the GMSK modem at 1300 bit/s there would be a 10*log10(1300/1200) = 0.35dB SNR penalty + + fep=fopen(err_file_name,"wb"); fwrite(fep, errors_log, "short"); fclose(fep); + end + + figure; + clf + subplot(211) + plot(Nerrs_log,'r;errors/frame counted for BER;'); + hold on; + plot(Nerrs_all_log,'g;all errors/frame;'); + hold on; + title('Bit Errors') + legend("boxoff"); + subplot(212) + stem(real(cumsum(Nerrs_log))) + title('Cumulative Bit Errors') +endfunction + + +%run_gmsk_single +%run_gmsk_curves +%run_gmsk_init +%run_test_channel_impairments +gmsk_tx("test_gmsk.raw") +gmsk_rx("test_gmsk.raw") +%gmsk_rx("ssb25db.wav") +%gmsk_rx("~/Desktop/ssb_fm_gmsk_high.wav") +%gmsk_rx("~/Desktop/test_gmsk_28BER.raw") +%gmsk_rx("~/Desktop/gmsk_rec_reverse.wav") + diff --git a/libcodec2-android/src/codec2/octave/gp_interleaver.m b/libcodec2-android/src/codec2/octave/gp_interleaver.m new file mode 100644 index 0000000..1ee0ee3 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/gp_interleaver.m @@ -0,0 +1,46 @@ +% gp_interleaver.m +% +% David Rowe May 2017 +% +% Golden Prime Interleaver. My interprestation of "On the Analysis and +% Design of Good Algebraic Interleavers", Xie et al,eq (5). + +1; + +% Choose b for Golden Prime Interleaver. b is chosen to be the +% closest integer, which is relatively prime to N, to the Golden +% section of N. + +function b = choose_interleaver_b(Nbits) + + p = primes(Nbits); + i = 1; + while(p(i) < Nbits/1.62) + i++; + end + b = p(i); + assert(gcd(b,Nbits) == 1, "b and Nbits must be co-prime"); +end + + +function interleaved_frame = gp_interleave(frame) + Nbits = length(frame); + b = choose_interleaver_b(Nbits); + interleaved_frame = zeros(1,Nbits); + for i=1:Nbits + j = mod((b*(i-1)), Nbits); + interleaved_frame(j+1) = frame(i); + end +endfunction + + +function frame = gp_deinterleave(interleaved_frame) + Nbits = length(interleaved_frame); + b = choose_interleaver_b(Nbits); + frame = zeros(1,Nbits); + for i=1:Nbits + j = mod((b*(i-1)), Nbits); + frame(i) = interleaved_frame(j+1); + end +endfunction + diff --git a/libcodec2-android/src/codec2/octave/h0p25d.mat b/libcodec2-android/src/codec2/octave/h0p25d.mat new file mode 100644 index 0000000..485b693 Binary files /dev/null and b/libcodec2-android/src/codec2/octave/h0p25d.mat differ diff --git a/libcodec2-android/src/codec2/octave/hackrf_dc.m b/libcodec2-android/src/codec2/octave/hackrf_dc.m new file mode 100644 index 0000000..a204e70 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/hackrf_dc.m @@ -0,0 +1,26 @@ +% hackrf_dc.m +% +% David Rowe Nov 2015 +% +% Downconverts a HackRF IQ sample file to a lower sample rate +% +% To sample a -60dB signal: +% $ hackrf_transfer -r df1.iq -f 439200000 -n 10000000 -l 20 -g 40play file at 10.7MHz used: +% octave:25> d = hackrf_dc("df1.iq") + +function d = hackrf_dc(infilename) + Fs1 = 10E6; % input sample rate to HackRF + Fs2 = 96E3; % output sample rate + fc = 700E3; % offset to shift input by, HackRF doesn't like signals in the centre + + s1 = load_hackrf(infilename); + ls1 = length(s1); + ls1 = 20*Fs1; + t = 0:ls1-1; + + % shift down to baseband from Fc, not sure of rot90 rather than trasnpose operator ' + % to avoid unwanted complex conj + + s2 = rot90(s1(1:ls1)) .* exp(-j*2*pi*t*fc/Fs1); + d = resample(s2, Fs2, Fs1); +end diff --git a/libcodec2-android/src/codec2/octave/hackrf_twotone.m b/libcodec2-android/src/codec2/octave/hackrf_twotone.m new file mode 100644 index 0000000..1d5aa02 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/hackrf_twotone.m @@ -0,0 +1,24 @@ +% hackrf_twotone.m +% +% David Rowe Nov 2015 +% +% Generates a two tone test signal that can be played out of HackRF +% +% To play file at 10.7MHz used: +% $ hackrf_transfer -t ../octave/twotone.iq -f 10000000 -a 0 -x 47 +% +% However 2nd harmonic at 21.4 was only -32dBC so not really useful for my application +% in testing an ADC + +Fs = 8E6; +fc = 2E6; +f1 = fc; +f2 = fc+1E3; +A = 127; +T = 2; + +N = T*Fs; +t = 0:N-1; +%s = A*exp(j*2*pi*t*f1/Fs) + A*exp(j*2*pi*t*f2/Fs); +s = A*exp(j*2*pi*t*f2/Fs); +save_hackrf("twotone.iq",s); diff --git a/libcodec2-android/src/codec2/octave/hackrf_uc.m b/libcodec2-android/src/codec2/octave/hackrf_uc.m new file mode 100644 index 0000000..0f55bd1 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/hackrf_uc.m @@ -0,0 +1,47 @@ +% hackrf_uc.m +% +% David Rowe Nov 2015 +% +% Upconverts a real baseband sample file to a file suitable for input into a HackRF +% +% To play file at 10.7MHz used: +% octave:25> hackrf_uc("fsk_10M.iq","fsk_horus_rx_1200_96k.raw") +% $ hackrf_transfer -t ../octave/fsk_10M.iq -f 10000000 -a 1 -x 40 + +function hackrf_uc(outfilename, infilename) + pkg load signal; + Fs1 = 48E3; % input sample rate + Fs2 = 10E6; % output sample rate to HackRF + fc = 700E3-24E3; % offset to shift to, HackRF doesn't like signals in the centre + A = 100; % amplitude of signal after upc-nversion (max 127) + N = Fs1*20; + + fin = fopen(infilename,"rb"); + printf("1\n"); + s1 = fread(fin,"short"); + printf("1\n"); + fclose(fin); + printf("1\n"); + ls1 = length(s1); + printf("1\n"); + N = ls1; + % single sided freq shifts, we don't want DSB + printf("1\n"); + s1 = hilbert(s1(1:N)); + + % upsample to Fs2 + + M = Fs2/Fs1; + s2 = resample(s1(1:N),Fs2,Fs1); + ls2 = length(s2); + mx = max(abs(s2)); + t = 0:ls2-1; + printf("2\n"); + % shift up to Fc, note use of rot90 rather than trasnpose operator ' + % as we don't want complex conj, that would shift down in freq + + sout = rot90((A/mx)*s2) .* exp(j*2*pi*t*fc/Fs2); + + save_hackrf(outfilename,sout); + +end diff --git a/libcodec2-android/src/codec2/octave/hf_modem_curves.m b/libcodec2-android/src/codec2/octave/hf_modem_curves.m new file mode 100644 index 0000000..d98d40e --- /dev/null +++ b/libcodec2-android/src/codec2/octave/hf_modem_curves.m @@ -0,0 +1,272 @@ +% hf_modem_curves +% David Rowe Feb 2017 +% +% Ideal implementations of a bunch of different HF modems, used to +% generate plots for a blog post. + +#{ + [X] ideal AWGN/HF curves + [X] exp AWGN QPSK curves + [X] exp AWGN DQPSK curves + [X] exp HF channel model + [ ] diversity + [ ] COHPSK frames + + would require multiple carriers + + filtering or OFDM +#} + +1; + +% Gray coded QPSK modulation function + +function symbol = qpsk_mod(two_bits) + two_bits_decimal = sum(two_bits .* [2 1]); + switch(two_bits_decimal) + case (0) symbol = 1; + case (1) symbol = j; + case (2) symbol = -j; + case (3) symbol = -1; + endswitch +endfunction + + +% Gray coded QPSK demodulation function + +function two_bits = qpsk_demod(symbol) + bit0 = real(symbol*exp(j*pi/4)) < 0; + bit1 = imag(symbol*exp(j*pi/4)) < 0; + two_bits = [bit1 bit0]; +endfunction + + +% Rate Rs modem simulation model ------------------------------------------------------- + +function sim_out = ber_test(sim_in) + bps = 2; % two bits/symbol for QPSK + Rs = 50; % symbol rate (needed for HF model) + + verbose = sim_in.verbose; + EbNovec = sim_in.EbNovec; + hf_en = sim_in.hf_en; + + % user can supply number of bits per point to get good results + % at high Eb/No + + if length(sim_in.nbits) > 1 + nbitsvec = sim_in.nbits; + nbitsvec += 100 - mod(nbitsvec,100); % round up to nearest 100 + else + nbitsvec(1:length(EbNovec)) = sim_in.nbits; + end + + % init HF model + + if hf_en + + % some typical values + + dopplerSpreadHz = 1.0; path_delay = 1E-3*Rs; + + nsymb = max(nbitsvec)/2; + spread1 = doppler_spread(dopplerSpreadHz, Rs, nsymb); + spread2 = doppler_spread(dopplerSpreadHz, Rs, nsymb); + hf_gain = 1.0/sqrt(var(spread1)+var(spread2)); + % printf("nsymb: %d lspread1: %d\n", nsymb, length(spread1)); + end + + for ne = 1:length(EbNovec) + + % work out noise power ------------- + + EbNodB = EbNovec(ne); + EsNodB = EbNodB + 10*log10(bps); + EsNo = 10^(EsNodB/10); + variance = 1/EsNo; + nbits = nbitsvec(ne); + nsymb = nbits/bps; + + % modulator ------------------------ + + tx_bits = rand(1,nbits) > 0.5; + tx_symb = []; + prev_tx_symb = 1; + for s=1:nsymb + atx_symb = qpsk_mod(tx_bits(2*s-1:2*s)); + if sim_in.dqpsk + atx_symb *= prev_tx_symb; + prev_tx_symb = atx_symb; + end + tx_symb = [tx_symb atx_symb]; + end + + % channel --------------------------- + + rx_symb = tx_symb; + + if hf_en + + % simplified rate Rs simulation model that doesn't include + % ISI, just freq filtering. We assume perfect phase estimation + % so it's just amplitude distortion. + + hf_model1 = hf_model2 = zeros(1, nsymb); + for s=1:nsymb + hf_model1(s) = hf_gain*(spread1(s) + exp(-j*path_delay)*spread2(s)); + hf_model = abs(hf_model1(s)); + + if sim_in.diversity + % include amplitude information from another frequency in channel model + w1 = 7*2*pi; + hf_model2(s) = hf_gain*(spread1(s) + exp(-j*w1*path_delay)*spread2(s)); + hf_model = 0.5*abs(hf_model1(s)) + 0.5*abs(hf_model2(s)); + end + + rx_symb(s) = rx_symb(s).*hf_model; + end + end + + % variance is noise power, which is divided equally between real and + % imag components of noise + + noise = sqrt(variance*0.5)*(randn(1,nsymb) + j*randn(1,nsymb)); + rx_symb += noise; + + % demodulator ------------------------------------------ + + % demodulate rx symbols to bits + + rx_bits = []; + prev_rx_symb = 1; + for s=1:nsymb + arx_symb = rx_symb(s); + if sim_in.dqpsk + tmp = arx_symb; + arx_symb *= prev_rx_symb'; + prev_rx_symb = tmp; + end + two_bits = qpsk_demod(arx_symb); + rx_bits = [rx_bits two_bits]; + end + + % count errors ----------------------------------------- + + error_pattern = xor(tx_bits, rx_bits); + nerrors = sum(error_pattern); + bervec(ne) = nerrors/nbits; + if verbose + printf("EbNodB: % 3.1f nbits: %5d nerrors: %5d ber: %4.3f\n", EbNodB, nbits, nerrors, bervec(ne)); + if verbose == 2 + figure(2); clf; + plot(rx_symb*exp(j*pi/4),'+','markersize', 10); + mx = max(abs(rx_symb)); + axis([-mx mx -mx mx]); + if sim_in.diversity && sim_in.hf_en + figure(3); + plot(1:nsymb, abs(hf_model1), 1:nsymb, abs(hf_model2), 'linewidth', 2); + end + end + end + end + + sim_out.bervec = bervec; +endfunction + + +% ------------------------------------------------------------- + + +function run_single + sim_in.verbose = 2; + sim_in.nbits = 1000; + sim_in.EbNovec = 4; + sim_in.dqpsk = 0; + sim_in.hf_en = 0; + sim_in.diversity = 0; + + sim_qpsk = ber_test(sim_in); +endfunction + + +function run_curves + max_nbits = 1E5; + sim_in.verbose = 1; + sim_in.EbNovec = 0:10; + sim_in.dqpsk = 0; + sim_in.hf_en = 0; + sim_in.diversity = 0; + + % AWGN ----------------------------- + + ber_awgn_theory = 0.5*erfc(sqrt(10.^(sim_in.EbNovec/10))); + sim_in.nbits = min(max_nbits, floor(500 ./ ber_awgn_theory)); + + sim_qpsk = ber_test(sim_in); + sim_in.dqpsk = 1; + sim_dqpsk = ber_test(sim_in); + + % HF ----------------------------- + + hf_sim_in = sim_in; hf_sim_in.dqpsk = 0; hf_sim_in.hf_en = 1; + hf_sim_in.EbNovec = 0:16; + + EbNoLin = 10.^(hf_sim_in.EbNovec/10); + ber_hf_theory = 0.5.*(1-sqrt(EbNoLin./(EbNoLin+1))); + + hf_sim_in.nbits = min(max_nbits, floor(500 ./ ber_hf_theory)); + sim_qpsk_hf = ber_test(hf_sim_in); + + hf_sim_in.dqpsk = 1; + sim_dqpsk_hf = ber_test(hf_sim_in); + + hf_sim_in.dqpsk = 0; + hf_sim_in.diversity = 1; + sim_qpsk_hf_div = ber_test(hf_sim_in); + + % Plot results -------------------- + + close all; + figure (1, 'position', [100, 10, 600, 400]); clf; + + semilogy(sim_in.EbNovec, ber_awgn_theory,'r+-;QPSK AWGN theory;', 'linewidth', 2) + xlabel('Eb/No (dB)') + ylabel('BER') + grid("minor") + axis([min(sim_in.EbNovec) max(sim_in.EbNovec) 1E-3 1]) + hold on; + + semilogy([0 4 4], [ber_awgn_theory(5) ber_awgn_theory(5) 1E-3],'k--', 'linewidth', 2); + hold off; + + figure (2, 'position', [300, 10, 600, 400]); clf; + semilogy(sim_in.EbNovec, ber_awgn_theory,'r+-;QPSK AWGN theory;','markersize', 10, 'linewidth', 2) + hold on; + semilogy(sim_in.EbNovec, sim_qpsk.bervec,'g+-;QPSK AWGN simulated;','markersize', 10, 'linewidth', 2) + semilogy(sim_in.EbNovec, sim_dqpsk.bervec,'b+-;DQPSK AWGN simulated;','markersize', 10, 'linewidth', 2) + xlabel('Eb/No (dB)') + ylabel('BER') + grid("minor") + axis([min(sim_in.EbNovec) max(sim_in.EbNovec) 1E-3 1]) + + figure (3, 'position', [400, 10, 600, 400]); clf; + semilogy(sim_in.EbNovec, ber_awgn_theory,'r+-;QPSK AWGN theory;','markersize', 10, 'linewidth', 2) + hold on; + semilogy(sim_in.EbNovec, sim_qpsk.bervec,'g+-;QPSK AWGN simulated;','markersize', 10, 'linewidth', 2) + semilogy(sim_in.EbNovec, sim_dqpsk.bervec,'b+-;DQPSK AWGN simulated;','markersize', 10, 'linewidth', 2) + semilogy(hf_sim_in.EbNovec, ber_hf_theory,'r+-;QPSK HF theory;','markersize', 10, 'linewidth', 2) + semilogy(hf_sim_in.EbNovec, sim_dqpsk_hf.bervec,'b+-;DQPSK HF simulated;','markersize', 10, 'linewidth', 2) + semilogy(hf_sim_in.EbNovec, sim_qpsk_hf.bervec,'g+-;QPSK HF simulated;','markersize', 10, 'linewidth', 2) + semilogy(hf_sim_in.EbNovec, sim_qpsk_hf_div.bervec,'c+-;QPSK Diversity HF simulated;','markersize', 10, 'linewidth', 2) + hold off; + xlabel('Eb/No (dB)') + ylabel('BER') + grid("minor") + axis([min(hf_sim_in.EbNovec) max(hf_sim_in.EbNovec) 1E-3 1]) + +endfunction + +% ------------------------------------------------------------- + +more off; +rand('seed',1); randn('seed', 1); +run_curves +#run_single diff --git a/libcodec2-android/src/codec2/octave/hf_sim.m b/libcodec2-android/src/codec2/octave/hf_sim.m new file mode 100644 index 0000000..c9105c0 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/hf_sim.m @@ -0,0 +1,78 @@ +% hf_sim.m +% David Rowe March 2014 +% +% Two path CCIR poor HF channel simulation, with apaologies to PathSim + +% Init HF channel model from stored sample files of spreading signal ---------------------------------- + +global spread; +global spread_2ms; +global hf_gain; + +% convert "spreading" samples from 1kHz carrier at Fs to complex +% baseband, generated by passing a 1kHz sine wave through PathSim with +% the ccir-poor model, enabling one path at a time. Because I'm too +% lazy to generate my own spreading signals + +Fc = 1000; Fs=8000; +fspread = fopen("../raw/sine1k_2Hz_spread.raw","rb"); +spread1k = fread(fspread, "int16")/10000; +fclose(fspread); +fspread = fopen("../raw/sine1k_2ms_delay_2Hz_spread.raw","rb"); +spread1k_2ms = fread(fspread, "int16")/10000; +fclose(fspread); + +% down convert to complex baseband + +spreadbb = spread1k.*exp(-j*(2*pi*Fc/Fs)*(1:length(spread1k))'); +spreadbb_2ms = spread1k_2ms.*exp(-j*(2*pi*Fc/Fs)*(1:length(spread1k_2ms))'); + +% remove -2000 Hz image + +b = fir1(50, 5/Fs); +spread = filter(b,1,spreadbb); +spread_2ms = filter(b,1,spreadbb_2ms); + +% discard first 1000 samples as these were near 0, probably as +% PathSim states were ramping up + +spread = spread(1000:length(spread)); +spread_2ms = spread_2ms(1000:length(spread_2ms)); + +hf_gain = 1.0/sqrt(var(spread)+var(spread_2ms)); + +% This function simulates the HF channel at 8kHz for real signals. A +% good use case is passing a vector of speech samples through it to +% simulate SSB over HF. There's a really good reason for the 300 - +% 3000 Hz filter that escapes me right now :-) + +function [sim_out snr3kHz_measured ] = hf_sim_real(sim_in, snr3kHz) + + % 300 - 3000 Hz filter + + b = fir1(100,[300/4000, 3000/4000], 'pass'); + + % det power of unit variance noise passed through this filter + + filter_var = var(filter(b,1,randn(1000,1))); + + % Start simulation + + s = hilbert(filter(b,1,sim_in)); + n1 = length(s); n2 = length(spread); + n = min(n1,n2); + path1 = s(1:n) .* spread(1:n); + path2 = s(1:n) .* spread_2ms(1:n); + delay = floor(0.002*Fs); + + combined = path1(delay+1:n) + path2(1:n-delay); + + snr = 10 .^ (snr3kHz/10); + variance = (combined'*combined)/(snr*n); + noise = sqrt(variance*0.5/filter_var)*(randn(n-delay,1) + j*randn(n-delay,1)); + filtered_noise = filter(b,1,noise); + + sim_out = real(combined+filtered_noise); + snr3kHz_measured = 10*log10(var(real(combined))/var(real(filtered_noise))); +endfunction + diff --git a/libcodec2-android/src/codec2/octave/horus_high_speed.bin b/libcodec2-android/src/codec2/octave/horus_high_speed.bin new file mode 100644 index 0000000..8d5b1f3 Binary files /dev/null and b/libcodec2-android/src/codec2/octave/horus_high_speed.bin differ diff --git a/libcodec2-android/src/codec2/octave/horus_msg.txt b/libcodec2-android/src/codec2/octave/horus_msg.txt new file mode 100644 index 0000000..882a9b3 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/horus_msg.txt @@ -0,0 +1 @@ + 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 diff --git a/libcodec2-android/src/codec2/octave/horus_payload_rtty.txt b/libcodec2-android/src/codec2/octave/horus_payload_rtty.txt new file mode 100644 index 0000000..882a9b3 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/horus_payload_rtty.txt @@ -0,0 +1 @@ + 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 diff --git a/libcodec2-android/src/codec2/octave/horus_tx_bits_binary.txt b/libcodec2-android/src/codec2/octave/horus_tx_bits_binary.txt new file mode 100644 index 0000000..2a688b0 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/horus_tx_bits_binary.txt @@ -0,0 +1 @@ +0 0 1 0 0 1 0 0 0 0 1 0 0 1 0 0 1 1 0 0 0 0 0 0 0 1 1 0 1 1 1 1 0 0 0 1 0 0 0 0 0 0 1 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 1 1 1 0 1 1 1 0 0 0 1 0 1 1 1 0 0 1 0 0 1 1 0 0 1 0 0 1 1 0 0 0 1 0 1 1 0 1 1 1 0 1 1 0 1 1 1 0 0 1 1 1 0 1 1 0 0 1 1 0 1 1 0 0 1 0 1 0 0 0 1 0 1 0 1 0 1 1 0 1 0 1 1 1 1 0 1 1 1 1 1 1 1 0 0 1 1 1 1 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 1 0 1 1 0 0 0 0 0 1 1 1 1 1 0 1 0 0 1 0 1 1 0 1 0 1 0 0 0 0 1 0 1 1 1 1 1 1 0 1 1 0 0 1 0 0 0 1 1 0 0 0 0 0 0 1 1 0 1 0 1 1 0 0 1 1 1 0 0 0 0 0 1 1 1 1 1 1 0 1 0 1 1 0 1 0 0 0 0 0 1 0 0 0 0 1 1 0 0 0 1 1 1 0 0 0 0 1 1 0 0 0 1 1 1 0 0 1 0 0 1 1 1 0 1 0 1 0 0 0 1 0 1 0 1 1 0 1 1 0 1 1 1 1 1 0 1 1 1 1 1 1 0 1 1 0 1 1 0 0 1 0 1 0 1 0 1 1 0 1 0 1 1 1 0 1 1 0 0 1 1 0 0 0 0 \ No newline at end of file diff --git a/libcodec2-android/src/codec2/octave/hp_filt.m b/libcodec2-android/src/codec2/octave/hp_filt.m new file mode 100644 index 0000000..1087bb9 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/hp_filt.m @@ -0,0 +1,12 @@ +% hp_filt.m +% David Rowe 20 Feb 2012 + +function hp_filt(in_file, out_file) + fin = fopen(in_file,"rb"); + s = fread(fin,Inf,"short"); + b = fir1(256, 300/4000, "high"); + freqz(b); + s_hpf = filter(b,1,s); + fout = fopen(out_file,"wb"); + fwrite(fout, s_hpf, "short"); +endfunction diff --git a/libcodec2-android/src/codec2/octave/impulse_noise.m b/libcodec2-android/src/codec2/octave/impulse_noise.m new file mode 100644 index 0000000..dee5c5d --- /dev/null +++ b/libcodec2-android/src/codec2/octave/impulse_noise.m @@ -0,0 +1,122 @@ +% impulse_noise +% David Rowe May 2017 +% +% Experiments with impulsive noise and HF radio + +format; +more off; +rand('seed',1) + +% DFT function ------------------------------------------------ +% note k is on 0..K-1 format, unlike Octave fft() which is 1..K + +function H = calc_H(k, K, a, d) + L = length(d); + H = 0; + for i=1:L + H += a(i)*exp(-j*2*pi*k*d(i)/K); + end +endfunction + +% ----------------------------------------- +% PWM noise simulation +% ----------------------------------------- + +function pwm_noise + + Fs = 10E6; % sample rate of simulation + Fsig = 1E6; % frequency of our wanted signal + Fpwm = 255E3; % switcher PWM frequency + T = 1; % length of simulations in seconds + Nsam = T*Fs; + Nsamplot = 200; + Apwm = 0.1; + Asig = -40; % attenuation of wanted signal in dB + + % generate an impulse train with jitter to simulate switcher noise + + pwm = zeros(1,Fs); + Tpwm = floor(Fs/Fpwm); + pulse_positions_pwm = Tpwm*(1:T*Fpwm) + round(rand(1,T*Fpwm)); + + h_pwm = zeros(1,Nsam); + h_pwm(pulse_positions_pwm) = Apwm; + h_pwm = h_pwm(1:Nsam); + + % add in wanted signal and computer amplitude spectrum + + s = 10^(Asig/20)*cos(2*pi*Fsig*(1:Nsam)/Fs); + + h = h_pwm+s; + H = fft(h); + Hdb = 20*log10(abs(H)) - 20*log10(Nsam/2); + + figure(1); clf; + subplot(211) + plot(h(1:Nsamplot)); + subplot(212) + plot(Hdb(1:Nsam/2)); + axis([0 T*2E6 -120 0]); xlabel('Frequency Hz'); ylabel('Amplityude dBV'); grid; + + printf("pwm rms: %f signal rms: %f noise rms\n", std(h_pwm), std(s)); +endfunction + +% ----------------------------------------- +% Single pulse noise simulation +% ----------------------------------------- + +function pulse_noise + + % set up short pulse in wide window, consisting of two samples next + % to each other + + K = 1024; + a(1) = a(2) = 1; d(1) = 10; d(2) = d(1)+1; + h = zeros(1,K); + h(d(1)) = a(1); + h(d(2)) = a(2); + + % mag and phase spectrum, mag spectrum changes slowly + + figure(2); clf; + Hfft = fft(h); + subplot(311) + stem(h(1:100)); + axis([1 100 -0.2 1.2]); + subplot(312) + plot(abs(Hfft(1:K/2)),'+'); + title('Magnitude'); + subplot(313) + plot(angle(Hfft(1:K/2)),'+'); + title('Phase'); + + % simple test to estimate H(k+1) from H(k) -------------------- + + % brute force calculation + + k = 300; + H = zeros(1,K); + H(k-1) = calc_H(k-1, K, a, d); + H(k) = calc_H(k, K, a, d); + H(k+1) = calc_H(k+1, K, a, d); + + % calculation of k+1 from k using approximation that {d(i)} are + % close together compared to M, i.e it's a narrow pulse (assumes we + % can estimate d using other means) + + Hk1_ = exp(-j*2*pi*d(1)/K)*H(k); + + % plot zoomed in version around k to compare + + figure(3); clf; + plot(H(k-1:k+1),'b+','markersize', 10, 'linewidth', 2); + hold on; plot(Hk1_,'g+','markersize', 10, 'linewidth', 2); hold off; + title('H(k-1) .... H(k+1)'); + printf("H(k+1) match: %f dB\n", 20*log10(abs(H(k+1) - Hk1_))); +endfunction + +% Run various simulations here --------------------------------------------- + +%pwm_noise +pulse_noise + diff --git a/libcodec2-android/src/codec2/octave/ldpc.m b/libcodec2-android/src/codec2/octave/ldpc.m new file mode 100644 index 0000000..b79a27f --- /dev/null +++ b/libcodec2-android/src/codec2/octave/ldpc.m @@ -0,0 +1,155 @@ +% ldpc.m +% +% David Rowe 2013 +% Octave functions to help us use the CML LDPC code. +% +% Installing CML library +% ---------------------- +% +% $ sudo apt-get install liboctave-dev +% $ wget http://www.iterativesolutions.com/user/image/cml.1.10.zip +% $ unzip cml.1.10.zip +% $ patch -p0 < ~/codec2/octave/cml.patch +% $ cd cml/source +% $ octave --no-gui +% octave:> make +% (you'll see a few warnings but hopefully no errors) + +1; + +function init_cml(path_to_cml) + currentdir = pwd; + + if exist(path_to_cml, 'dir') == 7 + cd(path_to_cml) + CmlStartup + cd(currentdir); + else + printf("\n---------------------------------------------------\n"); + printf("Can't start CML in path: %s\n", path_to_cml); + printf("See CML path instructions at top of this script (ldpc.m)\n"); + printf("-----------------------------------------------------\n\n"); + assert(0); + end +end + +% init using built in WiMax code + +function code_param = ldpc_init_wimax(rate, framesize, modulation, mod_order, mapping) + [code_param.H_rows, code_param.H_cols, code_param.P_matrix] = InitializeWiMaxLDPC( rate, framesize, 0 ); + code_param.S_matrix = CreateConstellation( modulation, mod_order, mapping ); + code_param.bits_per_symbol = log2(mod_order); + + code_param.ldpc_data_bits_per_frame = length(code_param.H_cols) - length(code_param.P_matrix); + code_param.ldpc_parity_bits_per_frame = framesize - code_param.ldpc_data_bits_per_frame; + code_param.ldpc_coded_bits_per_frame = framesize; + + code_param.data_bits_per_frame = code_param.ldpc_data_bits_per_frame; + code_param.coded_bits_per_frame = code_param.ldpc_coded_bits_per_frame; + code_param.coded_syms_per_frame = code_param.coded_bits_per_frame/code_param.bits_per_symbol; +endfunction + + +% init using user supplied code + +function [code_param framesize rate] = ldpc_init_user(HRA, modulation, mod_order, mapping, constellation) + [Nr Nc] = size(HRA); + rate = (Nc-Nr)/Nc; + framesize = Nc; + [H_rows, H_cols] = Mat2Hrows(HRA); + code_param.H_rows = H_rows; + code_param.H_cols = H_cols; + code_param.P_matrix = []; + if nargin == 5 + code_param.S_matrix = constellation; + else + if length(mapping) == 0 + code_param.S_matrix = CreateConstellation( modulation, mod_order); + else + code_param.S_matrix = CreateConstellation( modulation, mod_order, mapping ); + end + end + code_param.bits_per_symbol = log2(mod_order); + + code_param.ldpc_data_bits_per_frame = length(code_param.H_cols) - length(code_param.P_matrix); + code_param.ldpc_parity_bits_per_frame = framesize - code_param.ldpc_data_bits_per_frame; + code_param.ldpc_coded_bits_per_frame = framesize; + + % these variables support underfilling frame + code_param.data_bits_per_frame = code_param.ldpc_data_bits_per_frame; + code_param.coded_bits_per_frame = code_param.ldpc_coded_bits_per_frame; + code_param.coded_syms_per_frame = code_param.coded_bits_per_frame/code_param.bits_per_symbol; +endfunction + + +function [codeword s] = ldpc_enc(data, code_param) + codeword = LdpcEncode( data, code_param.H_rows, code_param.P_matrix ); + s = Modulate( codeword, code_param.S_matrix ); +endfunction + + +function [detected_data paritychecks] = ldpc_dec(code_param, max_iterations, demod_type, decoder_type, r, EsNo, fading) + symbol_likelihood = Demod2D( r, code_param.S_matrix, EsNo, fading); + + % initialize the extrinsic decoder input + + input_somap_c = zeros(1, code_param.ldpc_coded_bits_per_frame ); + bit_likelihood = Somap( symbol_likelihood, demod_type, input_somap_c ); + + input_decoder_c = bit_likelihood(1:code_param.ldpc_coded_bits_per_frame); + + [x_hat paritychecks] = MpDecode( -input_decoder_c, code_param.H_rows, code_param.H_cols, ... + max_iterations, decoder_type, 1, 1); + [mx mx_ind] = max(paritychecks); + detected_data = x_hat(mx_ind,:); +endfunction + + +% Packs a binary array into an array of 8 bit bytes, MSB first + +function packed = packmsb(unpacked) + packed = zeros(1,floor(length(unpacked)+7)/8); + bit = 7; byte = 1; + for i=1:length(unpacked) + packed(byte) = bitor(packed(byte), bitshift(unpacked(i),bit)); + bit--; + if (bit < 0) + bit = 7; + byte++; + end + end +endfunction + + +% unpacks an array of 8 bit bytes into a binary array of unpacked bits, MSB first + +function unpacked = unpackmsb(packed) + bit = 7; byte = 1; + for i=1:length(packed)*8 + unpacked(i) = bitand(bitshift(packed(byte), -bit), 1); + bit--; + if (bit < 0) + bit = 7; + byte++; + end + end +endfunction + + +% symbol interleaver that acts on bits 2 at a time + +function y = interleave_bits(interleaver, x) + y = zeros(1,length(x)); + for i = 1:length(interleaver) + dst = interleaver(i); + y(2*(dst-1)+1:2*dst) = x(2*(i-1)+1:2*(i)); + end +endfunction + +% symbol de-interleaver + +function x = deinterleave_symbols(interleaver, y) + for i = 1:length(interleaver) + x(i) = y(interleaver(i)); + end +endfunction diff --git a/libcodec2-android/src/codec2/octave/ldpc_fsk_lib.m b/libcodec2-android/src/codec2/octave/ldpc_fsk_lib.m new file mode 100644 index 0000000..661758d --- /dev/null +++ b/libcodec2-android/src/codec2/octave/ldpc_fsk_lib.m @@ -0,0 +1,269 @@ +% lpdc_fsk_lib.m +% April 2015 +% +% Library version of ldpc4.m written by vk5dsp. Application is high bit rate +% balloon telemtry +% +% LDPC demo +% Call the CML routines and simulate one set of SNRs. +% This fucntion is an updated version of ldpc3() which uses less +% of the CML functions +% +% sim_in the input parameter structure +% sim_out contains BERs and other stats for each value of SNR +% resfile is the result file +% + +1; + +function sim_out = ldpc5(sim_in, resfile, testmode, genie_Es, logging=0); + + if nargin<4, testmode = 0; end + estEsN0 = 0; + + HRA = sim_in.HRA; + framesize = sim_in.framesize; + rate = sim_in.rate; + mod_order = sim_in.mod_order; + + Lim_Ferrs = sim_in.Lim_Ferrs; + Ntrials = sim_in.Ntrials; + Esvec = sim_in.Esvec; + + demod_type = 0; + decoder_type = 0; + max_iterations = 100; + code_param = ldpc_init(HRA, mod_order); + bps = code_param.bits_per_symbol; + + + if (logging) + fod = fopen('decode.log', 'w'); + fwrite(fod, 'Es estEs Its secs \n'); + end + + + for ne = 1:length(Esvec) + Es = Esvec(ne); + EsNo = 10^(Es/10); + + + Terrs = 0; Tbits =0; Ferrs =0; + for nn = 1: Ntrials + + data = round( rand( 1, code_param.data_bits_per_frame ) ); + codeword = ldpc_encode(code_param, data); + + code_param.code_bits_per_frame = length( codeword ); + Nsymb = code_param.code_bits_per_frame/bps; + + if testmode==1 + f1 = fopen("dat_in2064.txt", "w"); + for k=1:length(data); fprintf(f1, "%u\n", data(k)); end + fclose(f1); + system("./ra_enc"); + + load("dat_op2064.txt"); + pbits = codeword(length(data)+1:end); % print these to compare with C code + dat_op2064(1:16)', pbits(1:16) + differences_in_parity = sum(abs(pbits - dat_op2064')) + pause; + end + + + % modulate + % s = Modulate( codeword, code_param.S_matrix ); + s= 1 - 2 * codeword; + code_param.symbols_per_frame = length( s ); + + variance = 1/(2*EsNo); + noise = sqrt(variance)* randn(1,code_param.symbols_per_frame); + % + j*randn(1,code_param.symbols_per_frame) ); + r = s + noise; + Nr = length(r); + + [detected_data Niters] = ldpc_decode(r, code_param, max_iterations, decoder_type); + + error_positions = xor( detected_data(1:code_param.data_bits_per_frame), data ); + Nerrs = sum( error_positions); + + t = clock; t = fix(t(5)*60+t(6)); + if (logging) + fprintf(fod, ' %3d %4d\n', Niters, t); + end + + if Nerrs>0, fprintf(1,'x'), else fprintf(1,'.'), end + if (rem(nn, 50)==0), fprintf(1,'\n'), end + + if Nerrs>0, Ferrs = Ferrs +1; end + Terrs = Terrs + Nerrs; + Tbits = Tbits + code_param.data_bits_per_frame; + + if Ferrs > Lim_Ferrs, disp(['exit loop with #cw errors = ' ... + num2str(Ferrs)]); break, end + end + + TERvec(ne) = Terrs; + FERvec(ne) = Ferrs; + BERvec(ne) = Terrs/ Tbits; + Ebvec = Esvec - 10*log10(code_param.bits_per_symbol * rate); + + cparams= [code_param.data_bits_per_frame code_param.symbols_per_frame ... + code_param.code_bits_per_frame]; + + sim_out.BERvec = BERvec; + sim_out.Ebvec = Ebvec; + sim_out.FERvec = FERvec; + sim_out.TERvec = TERvec; + sim_out.cpumins = cputime/60; + + if nargin > 2 + save(resfile, 'sim_in', 'sim_out', 'cparams'); + disp(['Saved results to ' resfile ' at Es =' num2str(Es) 'dB']); + end + end +end + + +function code_param = ldpc_init(HRA, mod_order) + code_param.bits_per_symbol = log2(mod_order); + [H_rows, H_cols] = Mat2Hrows(HRA); + code_param.H_rows = H_rows; + code_param.H_cols = H_cols; + code_param.P_matrix = []; + code_param.data_bits_per_frame = length(code_param.H_cols) - length( code_param.P_matrix ); + code_param.symbols_per_frame = length(HRA); +end + + +function codeword = ldpc_encode(code_param, data) + codeword = LdpcEncode( data, code_param.H_rows, code_param.P_matrix ); +endfunction + + +% Takes soft decision symbols (e.g. output of 2fsk demod) and converts +% them to LLRs. Note we calculate mean and var manually instead of +% using internal functions. This was required to get a bit exact +% results against the C code. + +function llr = sd_to_llr(sd) + sd = sd / mean(abs(sd)); + x = sd - sign(sd); + sumsq = sum(x.^2); + summ = sum(x); + mn = summ/length(sd); + estvar = sumsq/length(sd) - mn*mn; + estEsN0 = 1/(2* estvar + 1E-3); + llr = 4 * estEsN0 * sd; +endfunction + + +% LDPC decoder - note it estimates EsNo from received symbols + +function [detected_data Niters] = ldpc_decode(r, code_param, max_iterations, decoder_type) + % in the binary case the LLRs are just a scaled version of the rx samples .. + + #{ + r = r / mean(abs(r)); % scale for signal unity signal + estvar = var(r-sign(r)); + estEsN0 = 1/(2* estvar + 1E-3); + input_decoder_c = 4 * estEsN0 * r; + #} + llr = sd_to_llr(r); + + [x_hat, PCcnt] = MpDecode(llr, code_param.H_rows, code_param.H_cols, ... + max_iterations, decoder_type, 1, 1); + Niters = sum(PCcnt!=0); + detected_data = x_hat(Niters,:); + + if isfield(code_param, "c_include_file") + ldpc_gen_h_file(code_param, max_iterations, decoder_type, llr, x_hat, detected_data); + end +end + + +% One application of FSK LDPC work is SSTV. This function generates a +% simulated frame for testing + +function frame_rs232 = gen_sstv_frame + load('H2064_516_sparse.mat'); + HRA = full(HRA); + mod_order = 2; + code_param = ldpc_init(HRA, mod_order); + + % generate payload data bytes and checksum + + data = floor(rand(1,256)*256); + %data = zeros(1,256); + checksum = crc16(data); + data = [data hex2dec(checksum(3:4)) hex2dec(checksum(1:2))]; + + % unpack bytes to bits and LPDC encode + + mask = 2.^(7:-1:0); % MSB to LSB unpacking to match python tx code. + unpacked_data = []; + for b=1:length(data) + unpacked_data = [unpacked_data bitand(data(b), mask) > 0]; + end + codeword = [ldpc_encode(code_param, unpacked_data) 0 0 0 0]; % pad with 0s to get integer number of bytes + + % pack back into bytes to match python code + + lpacked_codeword = length(codeword)/8; + packed_codeword = zeros(1,lpacked_codeword); + for b=1:lpacked_codeword + st = (b-1)*8 + 1; + packed_codeword(b) = sum(codeword(st:st+7) .* mask); + end + + % generate header bits + + header = [hex2dec('55')*ones(1,16) hex2dec('ab') hex2dec('cd') hex2dec('ef') hex2dec('01')]; + + % now construct entire unpacked frame + + packed_frame = [header packed_codeword]; + mask = 2.^(0:7); % LSB to MSB packing for header + lpacked_frame = length(packed_frame); + frame = []; + for b=1:lpacked_frame + frame = [frame bitand(packed_frame(b), mask) > 0]; + end + + % insert rs232 framing bits + + frame_rs232 = []; + for b=1:8:length(frame) + frame_rs232 = [frame_rs232 0 frame(b:b+7) 1]; + end + + %printf("codeword: %d unpacked_header: %d frame: %d frame_rs232: %d \n", length(codeword), length(unpacked_header), length(frame), length(frame_rs232)); +endfunction + + +% calculates and compares the checksum of a SSTV frame, that has RS232 +% start and stop bits + +function checksum_ok = sstv_checksum(frame_rs232) + l = length(frame_rs232); + expected_l = (256+2)*10; + assert(l == expected_l); + + % extract rx bytes + + rx_data = zeros(1,256); + mask = 2.^(0:7); % LSB to MSB + k = 1; + for i=1:10:expected_l + rx_bits = frame_rs232(i+1:i+8); + rx_data(k) = sum(rx_bits .* mask); + k++; + end + + % calc rx checksum and extract tx checksum + + rx_checksum = crc16(rx_data(1:256)); + tx_checksum = sprintf("%02X%02X", rx_data(258), rx_data(257)); + %printf("tx_checksum: %s rx_checksum: %s\n", tx_checksum, rx_checksum); + checksum_ok = strcmp(tx_checksum, rx_checksum); +endfunction diff --git a/libcodec2-android/src/codec2/octave/ldpc_gen_c_h_file.m b/libcodec2-android/src/codec2/octave/ldpc_gen_c_h_file.m new file mode 100644 index 0000000..979c5b6 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/ldpc_gen_c_h_file.m @@ -0,0 +1,191 @@ +% ldpc_gen_c_h_file.m +% David Rowe Sep 2015, B. Van Slyke 2019 +% +% Create .c and h files for use in LDPC decoders +% +% NOTE: You'll need to install the CML library as a number of functions involved +% in LDPC use it. See ldpc.m for instructions in installing the CML +% library. +% +% Inputs: +% First parameter - name of file with LDPC codes +% Second parameter - defaults to 100 +% Third parameter - decoder_type, defaults to 0 +% +% Output: Two files with the same filename as the LDPC input, but with .c and .h +% extensions. + +function ldpc_gen_c_h_file(varargin) + + ldpc % load ldpc functions + ldpc_fsk_lib % for ldpc_encode + + % Assuming cml has been installed in the users' home folder, which is the + % default install location + init_cml('~/cml/'); + + if nargin == 0 + printf("Error - you must specify a file containing the LDPC codes (e.g. HRA_112_112.txt).\n"); + return; + end + loadStr = varargin{1}; + + + % The ldpc variable name may not be what we want for a file/variable names, but + % the load filename will be, so use it. + [~,ldpcArrayName,ext] = fileparts(loadStr); + includeFileName = strcat(ldpcArrayName, '.h'); + sourceFileName = strcat(ldpcArrayName, '.c'); + + % Get the ext of the file first. If it's a txt, then do what we + % are doing. If .mat, then just load, knowing the variable is HRA + if strcmp(ext, '.mat') == 1 + load(loadStr); + if exist("H") & !exist("HRA") + printf("renaming H to HRA...\n"); + HRA=H; + end + else + % When calling 'load' this way, it returns a struct. The code assumes the + % struct has one element, and the one/first element is the array + % to process + tempStruct = load(loadStr); + b = fieldnames(tempStruct); + ldpcArrayName = b{1,1}; + % extract the array from the struct + HRA = tempStruct.(ldpcArrayName); + endif + + + max_iterations = 100; + decoder_type = 0; + + % user overloads + if nargin == 2 + max_iterations = varargin{2}; + end + + if nargin == 3 + decoder_type = varargin{3}; + end + + + % the tests are performed using BPSK modulation, but in practice codes can be used + % with other modulation, e.g. QPSK + mod_order = 2; modulation = 'BPSK'; mapping = 'gray'; + + [code_param framesize rate] = ldpc_init_user(HRA, modulation, mod_order, mapping); + + code_length = code_param.coded_syms_per_frame; + code_length + + % ********************* test for enc/dec + [input_decoder_c, detected_data] = genInputOutputData(code_param, max_iterations, decoder_type); + + + % First, create the H file + f = fopen(includeFileName, "wt"); + printHeader(f, includeFileName, ldpcArrayName, mfilename()); + + fprintf(f,"#define %s_NUMBERPARITYBITS %d\n", ldpcArrayName, rows(code_param.H_rows)); + fprintf(f,"#define %s_MAX_ROW_WEIGHT %d\n", ldpcArrayName, columns(code_param.H_rows)); + fprintf(f,"#define %s_CODELENGTH %d\n", ldpcArrayName, code_param.coded_syms_per_frame); + fprintf(f,"#define %s_NUMBERROWSHCOLS %d\n", ldpcArrayName, rows(code_param.H_cols)); + fprintf(f,"#define %s_MAX_COL_WEIGHT %d\n", ldpcArrayName, columns(code_param.H_cols)); + fprintf(f,"#define %s_DEC_TYPE %d\n", ldpcArrayName, decoder_type); + fprintf(f,"#define %s_MAX_ITER %d\n", ldpcArrayName, max_iterations); + fprintf(f,"\n"); + fprintf(f,"extern const uint16_t %s_H_rows[];\n", ldpcArrayName); + fprintf(f,"extern const uint16_t %s_H_cols[];\n", ldpcArrayName); + + fprintf(f,"extern const float %s_input[];\n", ldpcArrayName); + fprintf(f,"extern const char %s_detected_data[];\n\n", ldpcArrayName); + + fclose(f); + + + % Then, the C file + f = fopen(sourceFileName, "wt"); + printHeader(f, sourceFileName, ldpcArrayName, mfilename()); + fprintf(f, "#include \n"); + fprintf(f, "#include \"%s\"\n", includeFileName); + + % clock out 2D array to linear C array in row order .... + fprintf(f,"\nconst uint16_t %s_H_rows[] = {\n", ldpcArrayName); + [r c] = size(code_param.H_rows); + for j=1:c + for i=1:r + fprintf(f, "%d", code_param.H_rows(i,j)); + if (i == r) && (j ==c) % weird, this does nothing + fprintf(f,"\n};\n"); + else + fprintf(f,", "); + end + end + end + + fprintf(f,"\nconst uint16_t %s_H_cols[] = {\n", ldpcArrayName); + [r c] = size(code_param.H_cols); + for j=1:c + for i=1:r + fprintf(f, "%d", code_param.H_cols(i,j)); + if (i == r) && (j == c) + fprintf(f,"\n};\n"); + else + fprintf(f,", "); + end + end + end + + % input and detected_data arrays + fprintf(f,"const float %s_input[] = {\n", ldpcArrayName); + for i=1:length(input_decoder_c) + fprintf(f, "%.17g", input_decoder_c(i)); + if i == length(input_decoder_c) + fprintf(f,"\n};\n"); + else + fprintf(f,", "); + end + end + fprintf(f,"const char %s_detected_data[] = {\n", ldpcArrayName); + for i=1:length(detected_data) + fprintf(f, "%d", detected_data(i)); + if i == length(detected_data) + fprintf(f,"\n};\n"); + else + fprintf(f,", "); + end + end + + fclose(f); +endfunction + +function printHeader(f, includeFileName, ldpcArrayName, mFilename) + fprintf(f, "/*\n FILE....: %s\n\n", includeFileName); + fprintf(f, " Static arrays for LDPC codec %s, generated by %s.m.\n*/\n\n", ldpcArrayName, mFilename); +endfunction + +function [input_decoder_c, detected_data] = genInputOutputData(code_param, max_iterations, decoder_type) + + % borrowed from test_ldpc_fsk_lib.m, simple_ut + EsNodB = 3; + data = round( rand( 1, code_param.data_bits_per_frame ) ); + codeword = ldpc_encode(code_param, data); %defined in ldps_fsk_lib. + + s = 1 - 2 * codeword; + + EsNo = 10^(EsNodB/10); + variance = 1/(2*EsNo); + noise = sqrt(variance)* randn(1,code_param.coded_syms_per_frame); + r = s + noise; + + % borrowed from ldpc_fsk_lib.m, ldpc_decode + llr = sd_to_llr(r); + + [x_hat, PCcnt] = MpDecode(llr, code_param.H_rows, code_param.H_cols, ... + max_iterations, decoder_type, 1, 1); + Niters = sum(PCcnt!=0); + detected_data = x_hat(Niters,:); + + input_decoder_c = llr; +endfunction diff --git a/libcodec2-android/src/codec2/octave/ldpc_gen_h_file.m b/libcodec2-android/src/codec2/octave/ldpc_gen_h_file.m new file mode 100644 index 0000000..edda815 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/ldpc_gen_h_file.m @@ -0,0 +1,72 @@ +% ldpc_gen_h_file.m +% David Rowe Sep 2015 +% +% Create a C include file for use in mpdecode.c C cmd line LDPC decoder + +function ldpc_gen_h_file(code_param, max_iterations, decoder_type, input_decoder_c, x_hat, detected_data) + + f = fopen(code_param.c_include_file, "wt"); + + fprintf(f, "/*\n FILE....: %s\n\n Static arrays for LDPC codec, generated", code_param.c_include_file); + fprintf(f, "\n ldpc_gen_h_file.m.\n\n*/\n\n"); + + fprintf(f,"#define NUMBERPARITYBITS %d\n", rows(code_param.H_rows)); + fprintf(f,"#define MAX_ROW_WEIGHT %d\n", columns(code_param.H_rows)); + fprintf(f,"#define CODELENGTH %d\n", code_param.symbols_per_frame); + fprintf(f,"#define NUMBERROWSHCOLS %d\n", rows(code_param.H_cols)); + fprintf(f,"#define MAX_COL_WEIGHT %d\n", columns(code_param.H_cols)); + fprintf(f,"#define DEC_TYPE %d\n", decoder_type); + fprintf(f,"#define MAX_ITER %d\n", max_iterations); + + fprintf(f,"\ndouble H_rows[] = {\n"); + + % clock out 2D array to linear C array in row order .... + + [r c] = size(code_param.H_rows); + for j=1:c + for i=1:r + fprintf(f, "%d", code_param.H_rows(i,j)); + if (i == r) && (j ==c) + fprintf(f,"\n};\n"); + else + fprintf(f,", "); + end + end + end + + fprintf(f,"\ndouble H_cols[] = {\n"); + [r c] = size(code_param.H_cols); + for j=1:c + for i=1:r + fprintf(f, "%d", code_param.H_cols(i,j)); + if (i == r) && (j == c) + fprintf(f,"\n};\n"); + else + fprintf(f,", "); + end + end + end + + fprintf(f,"\ndouble input[] = {\n"); + for i=1:length(input_decoder_c) + fprintf(f, "%.17g", input_decoder_c(i)); + if i == length(input_decoder_c) + fprintf(f,"\n};\n"); + else + fprintf(f,", "); + end + end + + fprintf(f,"\nchar detected_data[] = {\n"); + for i=1:length(detected_data) + fprintf(f, "%d", detected_data(i)); + if i == length(detected_data) + fprintf(f,"\n};\n"); + else + fprintf(f,", "); + end + end + + fclose(f); +end + diff --git a/libcodec2-android/src/codec2/octave/ldpcut.m b/libcodec2-android/src/codec2/octave/ldpcut.m new file mode 100644 index 0000000..87b94aa --- /dev/null +++ b/libcodec2-android/src/codec2/octave/ldpcut.m @@ -0,0 +1,247 @@ +% ldpcut.m +% +% David Rowe 18 Dec 2013 +% +% Octave LDPC unit test script using CML library, based on simulation +% by Bill Cowley VK5DSP + +% Libraries we need + +ldpc; +qpsk; + +function sim_out = run_simulation(sim_in) + + % Note this is effective Eb/No of payload data bits, sorta thing we + % plot on BER versus Eb/No graphs of decoded data. So if we have a + % rate 1/2 code, each codeword bit will have Eb/No - 3dB. + + EbNodBvec = sim_in.EbNodBvec; + + Ntrials = sim_in.Ntrials; + verbose = sim_in.verbose; + + % Init LDPC code ------------------------------------ + + mod_order = 4; bps = 2; + modulation = 'QPSK'; + mapping = 'gray'; + + demod_type = 0; + decoder_type = 0; + max_iterations = 100; + + if strcmp(sim_in.code,'wimax') + rate = 0.5; framesize = 576*4; + code_param = ldpc_init_wimax(rate, framesize, modulation, mod_order, mapping); + else + tempStruct = load(sim_in.code); + b = fieldnames(tempStruct); + ldpcArrayName = b{1,1}; + % extract the array from the struct + HRA = tempStruct.(ldpcArrayName); + [code_param framesize rate] = ldpc_init_user(HRA, modulation, mod_order, mapping); + end + + % ---------------------------------- + % run simulation at each Eb/No point + % ---------------------------------- + + for ne = 1:length(EbNodBvec) + randn('seed',1); + rand('seed',1); + + % Given Eb/No of payload data bits, work out Es/No we need to + % apply to each channel symbol: + % + % i) Each codeword bit gets noise: Eb/No - 3 (for a rate 1/2 code) + % ii) QPSK means two bits/symbol.: Es/No = Eb/No + 3 + % + % -> which neatly cancel out ...... (at least for rate 1/2) + + EsNodB = EbNodBvec(ne) + 10*log10(rate) + 10*log10(bps); + EsNo = 10^(EsNodB/10); + variance = 1/EsNo; + + Tbits = Terrs = Ferrs = Terrs_raw = Tbits_raw = 0; + + tx_bits = []; + tx_symbols = []; + rx_symbols = []; + + % Encode a bunch of frames + + for nn=1:Ntrials + atx_bits = round(rand( 1, code_param.data_bits_per_frame)); + tx_bits = [tx_bits atx_bits]; + [tx_codeword atx_symbols] = ldpc_enc(atx_bits, code_param); + tx_symbols = [tx_symbols atx_symbols]; + end + + rx_symbols = tx_symbols; + + % Add AWGN noise, 0.5 factor splits power evenly between Re & Im + + noise = sqrt(variance*0.5)*(randn(1,length(tx_symbols)) + j*randn(1,length(tx_symbols))); + rx_symbols += noise; + + % Decode a bunch of frames + + rx_bits_log = []; + + for nn = 1: Ntrials + st = (nn-1)*code_param.coded_syms_per_frame + 1; + en = (nn)*code_param.coded_syms_per_frame; + + % coded + + arx_codeword = ldpc_dec(code_param, max_iterations, demod_type, decoder_type, rx_symbols(st:en), EsNo, ones(1,code_param.coded_syms_per_frame)); + st = (nn-1)*code_param.data_bits_per_frame + 1; + en = (nn)*code_param.data_bits_per_frame; + error_positions = xor(arx_codeword(1:code_param.data_bits_per_frame), tx_bits(st:en)); + Nerrs = sum(error_positions); + rx_bits_log = [rx_bits_log arx_codeword(1:code_param.data_bits_per_frame)]; + + % uncoded - to est raw BER compare data symbols as code is systematic + + raw_rx_bits = []; + for s=1:code_param.coded_syms_per_frame*rate + sym_st = (nn-1)*code_param.coded_syms_per_frame + 1; + raw_rx_bits = [raw_rx_bits qpsk_demod(rx_symbols(sym_st+s-1))]; + end + Nerrs_raw = sum(xor(raw_rx_bits, tx_bits(st:en))); + Nbits_raw = code_param.data_bits_per_frame; + + if verbose == 2 + % print "." if frame decoded without errors, 'x' if we can't decode + + if Nerrs > 0, printf('x'), else printf('.'), end + end + + if Nerrs > 0, Ferrs = Ferrs + 1; end + Terrs += Nerrs; + Tbits += code_param.ldpc_data_bits_per_frame; + Terrs_raw += Nerrs_raw; + Tbits_raw += Nbits_raw; + end + + if verbose + printf("\nCoded EbNodB: % 5.2f BER: %4.3f Tbits: %6d Terrs: %6d FER: %4.3f Tframes: %d Ferrs: %d\n", + EbNodBvec(ne), Terrs/Tbits, Tbits, Terrs, Ferrs/Ntrials, Ntrials, Ferrs); + EbNodB_raw = EbNodBvec(ne) + 10*log10(rate); + printf("Raw EbNodB..: % 5.2f BER: %4.3f Tbits: %6d Terrs: %6d\n", + EbNodB_raw, Terrs_raw/Tbits_raw, Tbits_raw, Terrs_raw); + end + + sim_out.rate = rate; + sim_out.BER(ne) = Terrs/Tbits; + sim_out.PER(ne) = Ferrs/Ntrials; + end + +endfunction + + +% --------------------------------------------------------------------------------- +% 1/ Simplest possible one frame simulation +% --------------------------------------------------------------------------------- + +function test1_single + printf("\nTest 1:Single -----------------------------------\n"); + + mod_order = 4; + modulation = 'QPSK'; + mapping = 'gray'; + demod_type = 0; + decoder_type = 0; + max_iterations = 100; + + framesize = 576*2; % CML library has a bunch of different framesizes available + rate = 1/2; + code_param = ldpc_init_wimax(rate, framesize, modulation, mod_order, mapping); + + EsNo = 10; % decoder needs an estimated channel EsNo (linear ratio, not dB) + + tx_bits = round(rand(1, code_param.ldpc_data_bits_per_frame)); + [tx_codeword, qpsk_symbols] = ldpc_enc(tx_bits, code_param); + rx_codeword = ldpc_dec(code_param, max_iterations, demod_type, decoder_type, qpsk_symbols, EsNo, ones(1,length(qpsk_symbols))); + + errors_positions = xor(tx_bits, rx_codeword(1:framesize*rate)); + Nerr = sum(errors_positions); + printf("Nerr: %d\n", Nerr); +endfunction + + +% --------------------------------------------------------------------------------- +% 2/ Run a bunch of trials at just one EsNo point +% --------------------------------------------------------------------------------- + +function test2_multiple(code) + printf("\nTest 2: Multiple: %s ----------------------------\n", code); + + % these are inputs for Wimax mode, e.g. framesize defines code used + + sim_in.code = code; + sim_in.verbose = 2; + sim_in.Ntrials = 100; + sim_in.EbNodBvec = 3; + run_simulation(sim_in); +end + + +% --------------------------------------------------------------------------------- +% 3/ Lets draw some Eb/No versus BER curves +% --------------------------------------------------------------------------------- + +function test3_curves(code,fg=1) + printf("\nTest 3: Curves: %s -------------------------------------\n", code); + + sim_in.code = code; + sim_in.verbose = 2; + sim_in.Ntrials = 100; + sim_in.EbNodBvec = -2:10; + sim_out = run_simulation(sim_in); + + EbNodB = sim_in.EbNodBvec; + uncoded_awgn_ber_theory = 0.5*erfc(sqrt(10.^(EbNodB/10))); + + figure(fg); clf; title(code); + semilogy(EbNodB, uncoded_awgn_ber_theory,'r-+;AWGN;') + hold on; + semilogy(EbNodB, sim_out.BER+1E-10,'g-+;AWGN LDPC;'); + hold off; + grid('minor') + xlabel('Eb/No (dB)') + ylabel('BER') + axis([min(EbNodB) max(EbNodB) 1E-3 1]) + legend('boxoff'); +end + + +% -------------------------------------------------------------------------------- +% START SIMULATIONS +% -------------------------------------------------------------------------------- + +more off; +format; + +% --------------------------------------------------------------------------------- +% Start CML library (see CML set up instructions in ldpc.m) +% --------------------------------------------------------------------------------- + +init_cml('~/cml/'); + +if getenv("SHORT_VERSION_FOR_CTEST") + test1_single + return; +end +if exist("qam16") + test4_qam16; + return; +end + +test1_single +test2_multiple("wimax") +test2_multiple("H2064_516_sparse.mat") +%test3_curves("wimax",1) +%test3_curves("H2064_516_sparse.mat",2) +test3_curves("H_256_768_22.txt",2) diff --git a/libcodec2-android/src/codec2/octave/linreg.m b/libcodec2-android/src/codec2/octave/linreg.m new file mode 100644 index 0000000..666b65c --- /dev/null +++ b/libcodec2-android/src/codec2/octave/linreg.m @@ -0,0 +1,35 @@ +% linreg.m +% David Rowe April 2015 +% +% Based on: +% http://stackoverflow.com/questions/5083465/fast-efficient-least-squares-fit-algorithm-in-c +% +% finds y = mx + b to best fit n points x and y + +function [m b] = linreg(x,y,n) + sumx = 0.0; % sum of x + sumx2 = 0.0; % sum of x^2 + sumxy = 0.0; % sum of x * y + sumy = 0.0; % sum of y + sumy2 = 0.0; % sum of y**2 + + for i=1:n + sumx += x(i); + sumx2 += x(i)^2; + sumxy += x(i) * y(i); + sumy += y(i); + sumy2 += y(i)^2; + end + + denom = (n * sumx2 - sumx*sumx); + + if denom == 0 + % singular matrix. can't solve the problem. + m = 0; + b = 0; + else + m = (n * sumxy - sumx * sumy) / denom; + b = (sumy * sumx2 - sumx * sumxy) / denom; + end + +endfunction diff --git a/libcodec2-android/src/codec2/octave/load_comp.m b/libcodec2-android/src/codec2/octave/load_comp.m new file mode 100644 index 0000000..b9fa686 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/load_comp.m @@ -0,0 +1,9 @@ +% load_comp.m +% David Rowe Sep 2015 + +function s = load_comp(fn) + fs=fopen(fn,"rb"); + s = fread(fs,Inf,"float32"); + ls = length(s); + s = s(1:2:ls) + j*s(2:2:ls); +endfunction diff --git a/libcodec2-android/src/codec2/octave/load_f32.m b/libcodec2-android/src/codec2/octave/load_f32.m new file mode 100644 index 0000000..df76c8b --- /dev/null +++ b/libcodec2-android/src/codec2/octave/load_f32.m @@ -0,0 +1,14 @@ +% load_f32.m +% David Rowe Jan 2019 +% +% load up .f32 binary files from dump_data + +function features = load_f32(fn, ncols) + f=fopen(fn,"rb"); + features_lin=fread(f, 'float32'); + fclose(f); + + nrows = length(features_lin)/ncols; + features = reshape(features_lin, ncols, nrows); + features = features'; +endfunction diff --git a/libcodec2-android/src/codec2/octave/load_hackrf.m b/libcodec2-android/src/codec2/octave/load_hackrf.m new file mode 100644 index 0000000..85bfb73 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/load_hackrf.m @@ -0,0 +1,11 @@ +% load_hackrf.m +% +% David Rowe Oct 2015 + +function s = load_hackrf(fn) + fs = fopen(fn,"rb"); + iq = fread(fs,Inf,"schar"); + fclose(fs); + l = length(iq); + s = iq(1:2:l) + j*iq(2:2:l); +endfunction diff --git a/libcodec2-android/src/codec2/octave/load_raw.m b/libcodec2-android/src/codec2/octave/load_raw.m new file mode 100644 index 0000000..68fe155 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/load_raw.m @@ -0,0 +1,8 @@ +% load_raw.m +% David Rowe 7 Oct 2009 + +function s = load_raw(fn, len=Inf) + fs=fopen(fn,"rb"); + s = fread(fs,len,"short"); + fclose(fs); +endfunction diff --git a/libcodec2-android/src/codec2/octave/load_rtlsdr.m b/libcodec2-android/src/codec2/octave/load_rtlsdr.m new file mode 100644 index 0000000..946cfb2 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/load_rtlsdr.m @@ -0,0 +1,11 @@ +% load_rtlsdr.m +% +% David Rowe Oct 2015 + +function s = load_rtlsdr(fn) + fs = fopen(fn,"rb"); + iq = fread(fs,Inf,"uchar"); + fclose(fs); + l = length(iq); + s = iq(1:2:l) + j*iq(2:2:l); +endfunction diff --git a/libcodec2-android/src/codec2/octave/mag_to_phase.m b/libcodec2-android/src/codec2/octave/mag_to_phase.m new file mode 100644 index 0000000..c81ed08 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/mag_to_phase.m @@ -0,0 +1,62 @@ +% mag_to_phase.m +% +% David Rowe Sep 2015 +% +% Slighly modified version of http://www.dsprelated.com/showcode/20.php +% +% Given a magnitude spectrum in dB, returns a minimum-phase phase +% spectra. Both must be sampled at a Nfft. My understanding of this +% is rather dim, but a working example is good place to start! + + +function [phase s] = mag_to_phase(Gdbfk, Nfft = 512, verbose_en = 0) + + Ns = length(Gdbfk); if Ns~=Nfft/2+1, error("confusion"); end + Sdb = [Gdbfk,Gdbfk(Ns-1:-1:2)]; % install negative-frequencies + + S = 10 .^ (Sdb/20); % convert to linear magnitude + s = ifft(S); % desired impulse response + s = real(s); % any imaginary part is quantization noise + tlerr = 100*norm(s(round(0.9*Ns:1.1*Ns)))/norm(s); + if verbose_en + disp(sprintf([' Time-limitedness check: Outer 20%% of impulse ' ... + 'response is %0.2f %% of total rms'],tlerr)); + end + % = 0.02 percent + + if verbose_en + if tlerr>1.0 % arbitrarily set 1% as the upper limit allowed + disp(' Increase Nfft and/or smooth Sdb\n'); + end + end + + c = ifft(Sdb); % compute real cepstrum from log magnitude spectrum + + % Check aliasing of cepstrum (in theory there is always some): + + caliaserr = 100*norm(c(round(Ns*0.9:Ns*1.1)))/norm(c); + if verbose_en + disp(sprintf([' Cepstral time-aliasing check: Outer 20%% of ' ... + 'cepstrum holds %0.2f %% of total rms\n'],caliaserr)); + end + + if verbose_en + if caliaserr>1.0 % arbitrary limit + disp(' Increase Nfft and/or smooth Sdb to shorten cepstrum\n'); + end + end + + % Fold cepstrum to reflect non-min-phase zeros inside unit circle: + + cf = [c(1), c(2:Ns-1)+c(Nfft:-1:Ns+1), c(Ns), zeros(1,Nfft-Ns)]; + + Cf = fft(cf); % = dB_magnitude + j * minimum_phase + + % The maths says we are meant to be using log(x), not 20*log10(x), + % so we need to scale the phase to account for this: + % log(x) = 20*log10(x)/scale; + + scale = (20/log(10)); + phase = imag(Cf)/scale; +endfunction + diff --git a/libcodec2-android/src/codec2/octave/make_hilb.m b/libcodec2-android/src/codec2/octave/make_hilb.m new file mode 100644 index 0000000..35d4e55 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/make_hilb.m @@ -0,0 +1,51 @@ +% make_hilb.m +% David Rowe May 2015 +% +% creates Hilber Transformer FIR coeffs + +graphics_toolkit ("gnuplot"); + +ht_n = 100; +imp = [1 zeros(1,ht_n-1)]; +ht_coeff = fftshift(hilbert(imp)) .* hanning(ht_n)'; + +figure(1) +subplot(211) +plot(real(ht_coeff)) +subplot(212) +plot(imag(ht_coeff)) + +figure(2) +plot(20*log10(abs(fft(ht_coeff)))) + +% test it + +n=1:8000; +w = 2*pi/4; +x = cos(n*w); +figure(3) +y = filter(ht_coeff,1,x); +figure(3) +subplot(211) +plot(y(800:8000)) +subplot(212) +plot(20*log10(abs(fft(y(800:8000))))) + +% save coeffs to a C header file + +f=fopen("../src/ht_coeff.h","wt"); +fprintf(f,"/* Hilbert Transform FIR filter coeffs */\n"); +fprintf(f,"/* Generated by make_hilb Octave script */\n"); + +fprintf(f,"\n#define HT_N %d\n\n", ht_n); + +fprintf(f,"COMP ht_coeff[]={\n"); +for r=1:ht_n + if r < ht_n + fprintf(f, " {%f,%f},\n", real(ht_coeff(r)), imag(ht_coeff(r))); + else + fprintf(f, " {%f,%f}\n};", real(ht_coeff(r)), imag(ht_coeff(r))); + end +end + +fclose(f); diff --git a/libcodec2-android/src/codec2/octave/make_ssbfilt.m b/libcodec2-android/src/codec2/octave/make_ssbfilt.m new file mode 100644 index 0000000..b1bb347 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/make_ssbfilt.m @@ -0,0 +1,36 @@ +% make_ssbfilt.m +% David Rowe May 2015 +% +% creates SSB filter FIR coeffs + +graphics_toolkit ("gnuplot"); + +ssbfilt_n = 100; +Fs = 8000; + +ssbfilt_coeff = fir2(ssbfilt_n,[0 400 600 2200 2600 4000]/(Fs/2),[0.001 0.001 1 1 0.001 0.001]); + +figure(1) +clf; +h = freqz(ssbfilt_coeff,1,Fs/2); +plot(20*log10(abs(h))) +grid minor + +% save coeffs to a C header file + +f=fopen("../src/ssbfilt_coeff.h","wt"); +fprintf(f,"/* 600 - 2600 Hz FIR filter coeffs */\n"); +fprintf(f,"/* Generated by make_ssbfilt Octave script */\n"); + +fprintf(f,"\n#define SSBFILT_N %d\n\n", ssbfilt_n); + +fprintf(f,"float ssbfilt_coeff[]={\n"); +for r=1:ssbfilt_n + if r < ssbfilt_n + fprintf(f, " %f,\n", ssbfilt_coeff(r)); + else + fprintf(f, " %f\n};", ssbfilt_coeff(r)); + end +end + +fclose(f); diff --git a/libcodec2-android/src/codec2/octave/mancyfsk.m b/libcodec2-android/src/codec2/octave/mancyfsk.m new file mode 100644 index 0000000..a5ac8cc --- /dev/null +++ b/libcodec2-android/src/codec2/octave/mancyfsk.m @@ -0,0 +1,500 @@ +% mancyfsk.m +% David Rowe October 2015 +% +% Manchester encoded 2FSK & 4FSK simulation. +% +% Attempt to design a FSK waveform that can pass through legacy FM +% radios but still be optimally demodulated by SDRs. It doesn't have +% to be optimally demodulated by legacy radios. Trick is getting it +% to pass through 300-3000Hz audio filters in legacy radios. +% +% [X] code up modulator +% [X] manchester two bit symbols +% [X] plot spectrum +% [X] demodulate using analog FM and ideal demods +% [X] measure BER compared to ideal coherent FSK + +1; + +fm; % analog FM library + + +function states = legacyfsk_init(M,Rs) + Fs = states.Fs = 96000; + states.Rs = Rs; % symbol rate over channel + Ts = states.Ts = Fs/Rs; % symbol period in samples + states.M = M; % mFSK, either 2 or 4 + bpsym = state.Rb = log2(M); % bits per symbol over channel + rate = states.rate = 0.5; % Manchester code rate + nbits = 100; + nbits = states.nbits = 100; % number of payload data symbols/frame + nbits2 = states.nbits2 = nbits/rate; % number of symbols/frame over channel after manchester encoding + nsym = states.nsym = nbits2/log2(M); % number of symbols per frame + nsam = states.nsam = nsym*Ts; + + %printf(" Rs: %d M: %d bpsym: %d nbits: %d nbits2: %d nsym: %d nsam: %d\n", Rs, M, bpsym, nbits, nbits2, nsym, nsam); + + states.fc = states.Fs/4; + if states.M == 2 + states.f(1) = states.fc - Rs/2; + states.f(2) = states.fc + Rs/2; + else + states.f(1) = states.fc - 3*Rs/2; + states.f(2) = states.fc - Rs/2; + states.f(3) = states.fc + Rs/2; + states.f(4) = states.fc + 3*Rs/2; + end +endfunction + + +% test modulator function + +function tx = legacyfsk_mod(states, tx_bits) + Fs = states.Fs; + Ts = states.Ts; + Rs = states.Rs; + f = states.f; + M = states.M; + nsym = states.nsym; + + tx = zeros(Ts*length(tx_bits)/log2(M),1); + tx_phase = 0; + + step = log2(M); + k = 1; + for i=1:step:length(tx_bits) + if M == 2 + tone = tx_bits(i) + 1; + else + tone = (tx_bits(i:i+1) * [2 1]') + 1; + end + tx_phase_vec = tx_phase + (1:Ts)*2*pi*f(tone)/Fs; + tx((k-1)*Ts+1:k*Ts) = 2.0*cos(tx_phase_vec); k++; + tx_phase = tx_phase_vec(Ts) - floor(tx_phase_vec(Ts)/(2*pi))*2*pi; + end + +endfunction + + +function run_sim(sim_in) + + frames = sim_in.frames; + test_frame_mode = sim_in.test_frame_mode; + M = sim_in.M; + Rs = sim_in.Rs; + demod = sim_in.demod; + EbNodB = sim_in.EbNodB; + timing_offset = sim_in.timing_offset; + + % rx timing has been adjusted experimentally + + if Rs == 4800 + if demod == 1 + rx_timing = 4; + else + rx_timing = 0; + end + end + if Rs == 2400 + if demod == 1 + rx_timing = 40; + else + rx_timing = 0; + end + end + + % init fsk modem + + more off + rand('state',1); + randn('state',1); + states = legacyfsk_init(M,Rs); + Fs = states.Fs; + nbits = states.nbits; + nbits2 = states.nbits2; + Ts = states.Ts; + nsam = states.nsam; + rate = states.rate; + + % init analog FM modem + + fm_states.Fs = Fs; + fm_max = fm_states.fm_max = 3E3; + fd = fm_states.fd = 5E3; + fm_states.fc = states.fc; + + fm_states.pre_emp = 0; + fm_states.de_emp = 1; + fm_states.Ts = 1; + fm_states.output_filter = 1; + fm_states = analog_fm_init(fm_states); + [b, a] = cheby1(4, 1, 300/Fs, 'high'); % 300Hz HPF to simulate FM radios + + % init sim states + + rx_bits_buf = zeros(1,2*nbits2); + Terrs = Tbits = 0; + state = 0; + nerr_log = []; + + % set up the channel noise. We have log(M)*rate payload bits/symbol + % we have log2(M) bits/symbol, and rate bits per payload symbol + % TODO: explain this better as Im confused! + + EbNo = 10^(EbNodB/10); + EsNo = EbNo*rate*log2(M); + variance = states.Fs/((states.Rs)*EsNo); + %printf("EbNodB: %3.1f EbNo: %3.2f EsNo: %3.2f\n", EbNodB, EbNo, EsNo); + + % set up the input bits + + if test_frame_mode == 1 + % test frame of bits, which we repeat for convenience when BER testing + test_frame = round(rand(1, nbits)); + tx_bits = []; + for i=1:frames+1 + tx_bits = [tx_bits test_frame]; + end + end + if test_frame_mode == 2 + % random bits, just to make sure sync algs work on random data + tx_bits = round(rand(1, nbits*(frames+1))); + end + if test_frame_mode == 3 + % ...10101... sequence + tx_bits = zeros(1, nbits*(frames+1)); + tx_bits(1:2:length(tx_bits)) = 1; + end + + % Manchester Encoding ----------------------------------------------------------- + + % Manchester encoding, which removes DC term in baseband signal, + % making the waveform friendly to old-school legacy FM radios with + % voiceband filtering. The "code rate" is 0.5, which means we have + % encode one input bit into 2 output bits. The 2FSK encoder takes + % one input bit, the 4FSK encoder two input bits. + + tx_bits_encoded = zeros(1,length(tx_bits)*2); + fsk2_enc = [[1 0]; [0 1]]; + % -1.5 1.5 1.5 -1.5 -0.5 0.5 0.5 -0.5 + % 0 3 3 0 1 2 2 1 + fsk4_enc = [[0 0 1 1]; [1 1 0 0]; [0 1 1 0]; [1 0 0 1]]; + k=1; + if M == 2 + for i=1:2:length(tx_bits_encoded) + input_bit = tx_bits(k); k++; + tx_bits_encoded(i:i+1) = fsk2_enc(input_bit+1,:); + end + else + for i=1:4:length(tx_bits_encoded) + input_bits = tx_bits(k:k+1) * [2 1]'; k+=2; + tx_bits_encoded(i:i+3) = fsk4_enc(input_bits+1,:); + end + end + + % FSK Modulator -------------------------------------------------------------- + + % use ideal FSK modulator (note: need to try using analog FM modulator) + + tx = legacyfsk_mod(states, tx_bits_encoded); + noise = sqrt(variance)*randn(length(tx),1); + rx = tx + noise; + timing_offset_samples = round(timing_offset*Ts); + rx = [zeros(timing_offset_samples,1); rx]; + + % Demodulator ---------------------------------------------------------------------------- + + if demod == 1 + % use analog FM demodulator, aka a $40 Baofeng + + [rx_out rx_bb] = analog_fm_demod(fm_states, rx'); + if sim_in.hpf + rx_out_hp = filter(b,a,rx_out); + else + rx_out_hp = rx_out; + end + rx_filt = filter(ones(1,Ts),1,rx_out_hp); + rx_timing_sig = rx_filt; + + % TODO: for 4FSK determine amplitude/decn boundaries, choose closest to demod each symbol + + end + + if demod == 2 + + % optimal non-coherent demod at Rs + + rx_timing_sig = zeros(1,length(rx)); + for m=1:M + phi_vec = (1:length(rx))*2*pi*states.f(m)/Fs; + dc = rx' .* exp(-j*phi_vec); + rx_filt(m,:) = abs(filter(ones(1,Ts),1,dc)); + rx_timing_sig = rx_timing_sig + rx_filt(m,1:length(rx)); + end + end + + % Fine timing estimation ------------------------------------------------------ + + % Estimate fine timing using line at Rs/2 that Manchester encoding provides + % We need this to sync up to Manchester codewords. TODO plot signal and + % timing "line" we extract + + Np = length(rx_timing_sig); + w = 2*pi*(Rs)/Fs; + x = (rx_timing_sig .^ 2) * exp(-j*w*(0:Np-1))'; + norm_rx_timing = angle(x)/(2*pi) - 0.42; + %rx_timing = round(norm_rx_timing*Ts); + %printf("norm_rx_timing: %4.4f rx_timing: %d\n", norm_rx_timing, rx_timing); + + % Max likelihood decoding of Manchester encoded symbols. Search + % through all ML possibilities to extract bits. Use energy (filter + % output sq) + + % Manchester Decoding -------------------------------------------------------- + + if M == 2 + if demod == 1 + + % sample at optimum instant + + [tmp l] = size(rx_filt); + rx_filt_dec = rx_filt(:, Ts+rx_timing:Ts:l); + + [tmp l] = size(rx_filt_dec); + rx_bits = zeros(1,l); + k = 1; + for i=1:2:l-1 + ml = [rx_filt_dec(i)-rx_filt_dec(i+1) -rx_filt_dec(i)+rx_filt_dec(i+1)]; + [mx mx_ind] = max(ml); + rx_bits(k) = mx_ind-1; k++; + end + end + + if demod == 2 + + % sample at optimum instant + + [tmp l] = size(rx_filt); + rx_filt_dec = rx_filt(:, Ts+rx_timing:Ts:l); + + [tmp l] = size(rx_filt_dec); + rx_bits = zeros(1,l); + k = 1; + for i=1:2:l-1 + %ml = [rx_filt_dec(2,i)*rx_filt_dec(1,i+1) rx_filt_dec(1,i)*rx_filt_dec(2,i+1)]; + ml = [rx_filt_dec(2,i)+rx_filt_dec(1,i+1) rx_filt_dec(1,i)+rx_filt_dec(2,i+1)]; + [mx mx_ind] = max(ml); + rx_bits(k) = mx_ind-1; k++; + end + end + else % M == 4 + if demod == 1 + % TODO: 4FSK version of demod + rx_bits=tx_bits; + end + if demod == 2 + % sample at optimal instant + + [tmp l] = size(rx_filt); + rx_filt_dec = rx_filt(:, Ts+rx_timing:Ts:l); + [tmp l] = size(rx_filt_dec); + rx_bits = zeros(1,l); + + k = 1; + fsk4_dec = [[0 0]; [0 1]; [1 0]; [1 1]]; + for i=1:2:l-1 + %ml = [rx_filt_dec(1,i)*rx_filt_dec(4,i+1) rx_filt_dec(4,i)*rx_filt_dec(1,i+1) rx_filt_dec(2,i)*rx_filt_dec(3,i+1) rx_filt_dec(3,i)*rx_filt_dec(2,i+1)]; + ml = [(rx_filt_dec(1,i)+rx_filt_dec(4,i+1)) (rx_filt_dec(4,i)+rx_filt_dec(1,i+1)) (rx_filt_dec(2,i)+rx_filt_dec(3,i+1)) (rx_filt_dec(3,i)+rx_filt_dec(2,i+1))]; + [mx mx_ind] = max(ml); + rx_bits(k:k+1) = fsk4_dec(mx_ind,:); k+=2; + end + end + end + + % useful for getting decoding right + %tx_bits(1:20) + %rx_bits(1:20) + + % Frame sync and BER logic ------------------------------------------------------------- + + st = 1; + for f=1:frames + + % extract nin bits + + nin = nbits; + en = st + nin - 1; + + rx_bits_buf(1:nbits) = rx_bits_buf(nbits+1:2*nbits); + rx_bits_buf(nbits+1:2*nbits) = rx_bits(st:en); + + st += nin; + + % frame sync based on min BER + + if test_frame_mode == 1 + nerrs_min = nbits; + next_state = state; + if state == 0 + for i=1:nbits + error_positions = xor(rx_bits_buf(i:nbits+i-1), test_frame); + nerrs = sum(error_positions); + %printf("i: %d nerrs: %d nerrs_min: %d \n", i, nerrs, nerrs_min); + if nerrs < nerrs_min + nerrs_min = nerrs; + coarse_offset = i; + end + end + if nerrs_min < 3 + next_state = 1; + %printf("%d %d\n", coarse_offset, nerrs_min); + end + end + + if state == 1 + error_positions = xor(rx_bits_buf(coarse_offset:coarse_offset+nbits-1), test_frame); + nerrs = sum(error_positions); + Terrs += nerrs; + Tbits += nbits; + nerr_log = [nerr_log nerrs]; + end + + state = next_state; + + end + end + + if test_frame_mode == 1 + if sim_in.verbose + printf(" demod: %d frames: %d EbNodB: %3.1f Tbits: %d Terrs: %d BER %4.3f\n", demod, frames, EbNodB, Tbits, Terrs, Terrs/Tbits); + else + printf(" EbNodB: %3.1f BER %4.3f\n", EbNodB, Terrs/Tbits); + end + end + + % Bunch O'plots -------------------------------------------------------------- + + close all; + + st = 1; en=20; + + Tx=fft(tx, Fs); + TxdB = 20*log10(abs(Tx(1:Fs/2))); + figure(1) + clf; + plot(TxdB) + axis([1 Fs/2 (max(TxdB)-100) max(TxdB)]) + title('Tx Spectrum'); + + figure(2) + clf + if demod == 1 + subplot(211) + plot(rx_filt(st*Ts:en*Ts)); + title('After integrator'); + subplot(212) + plot(rx_filt_dec(st:en),'+'); + title('Decimated output'); + end + if demod == 2 + subplot(211); + plot(rx_filt(1,st*Ts:en*Ts)); + hold on; + plot(rx_filt(2,st*Ts:en*Ts),'g'); + if M == 4 + plot(rx_filt(3,st*Ts:en*Ts),'c'); + plot(rx_filt(4,st*Ts:en*Ts),'r'); + end + hold off; + title('Output of each filter'); + subplot(212); + plot(rx_filt_dec(1,st:en),'+'); + hold on; + plot(rx_filt_dec(2,st:en),'g+'); + if M == 4 + plot(rx_filt_dec(3,st:en),'c+'); + plot(rx_filt_dec(4,st:en),'r+'); + end + hold off; + title('Decimated output of each filter'); + end + + figure(3) + clf; + subplot(211) + plot(rx_timing_sig(st*Ts:en*Ts).^2) + title('rx-timing-sig') + subplot(212) + F = abs(fft(rx_timing_sig(1:Fs))); + plot(F(100:8000)) + title('FFT of rx-timing-sig') + + if demod == 1 + figure(4); + clf; + h = fft(rx_out, Fs); + hdB = 20*log10(abs(h)); + plot(hdB(1:4000)) + title('Spectrum of baseband modem signal after analog FM demod'); + axis([1 4000 (max(hdB)-40) max(hdB)]) + end + + if demod == 1 + figure(5) + clf; + subplot(211) + plot(rx_out(st*Ts:en*Ts)); + title('baseband modem signal after analog FM demod'); + subplot(212) + plot(rx_out_hp(st*Ts:en*Ts)); + title('baseband modem signal after 300Hz filter'); + end +end + + +% Run various permutations of simulation here --------------------------------------- + +function run_single + + sim_in.frames = 100; + sim_in.test_frame_mode = 1; + sim_in.M = 2; + sim_in.Rs = 2400; + sim_in.demod = 1; + sim_in.EbNodB = 15; + sim_in.timing_offset = 0.0; + sim_in.hpf = 1; + sim_in.verbose = 1; + + run_sim(sim_in); +endfunction + + +function run_lots + + % adjusted a few scenarios for about 2% BER so we can compare + + sim_in.frames = 100; + sim_in.test_frame_mode = 1; + sim_in.M = 2; + sim_in.Rs = 4800; + sim_in.demod = 1; + sim_in.EbNodB = 12; + sim_in.timing_offset = 0.0; + sim_in.hpf = 1; + sim_in.verbose = 0; + + printf("Rs=4800 2FSK ideal demod\n"); + sim_in.EbNodB = 8.5; sim_in.demod = 2; run_sim(sim_in); + printf("Rs=4800 2FSK analog FM demod, not too shabby and pushes 2400bit/s thru a $40 HT!\n"); + sim_in.EbNodB = 12; sim_in.demod = 1; run_sim(sim_in); + printf("Rs=2400 2FSK analog FM demod, needs more power for same BER! Che?\n"); + sim_in.Rs = 2400; sim_in.EbNodB = 15; run_sim(sim_in); + printf("Hmm, doesnt improve with no 300Hz HPF, maybe due to less deviation?\n"); + sim_in.hpf = 0; run_sim(sim_in); + printf("Rs=2400 4FSK ideal demod, nice low Eb/No!\n"); + sim_in.demod = 2; sim_in.M = 4; sim_in.Rs = 2400; sim_in.EbNodB = 6; run_sim(sim_in); +endfunction + +%run_single; +run_lots; diff --git a/libcodec2-android/src/codec2/octave/melvq.m b/libcodec2-android/src/codec2/octave/melvq.m new file mode 100644 index 0000000..bbadb91 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/melvq.m @@ -0,0 +1,165 @@ +% melvq.m +% David Rowe Aug 2015 +% +% Experimenting with VQ design for mel LSPs, also handy VQ searching routines + +1; + +% train up multi-stage VQ +% ~/codec2-dev/build_linux/src$ sox -r 8000 -s -2 ../../wav/all.wav -t raw -r 8000 -s -2 - sinc 300 sinc -2600 | ./c2sim - --lpc 6 --lpcpf --lspmel --dump all -o - | play -t raw -r 8000 -s -2 - vol 3 +% +% octave:> load ../build_linux/src/all_mel.txt +% octave:> melvq; vq = trainvq(all_mel, 64, 3); +% octave:> save vq + +function vq = trainvq(training_data, Nvec, stages, city_en=0) + + vq = []; + for i=1:stages + if city_en + [idx centers] = kmeans(training_data, Nvec, 'DISTANCE', 'cityblock'); + else + [idx centers] = kmeans(training_data, Nvec); + end + quant_error = centers(idx,:) - training_data; + printf("mse stage %d: %f\n", i, mean(std(quant_error))); + training_data = quant_error; + vq(:,:,i) = centers; + end + +end + +function [mse_list index_list] = search_vq(vq, target, m) + + [Nvec order] = size(vq); + + mse = zeros(1, Nvec); + + % find mse for each vector + + for i=1:Nvec + mse(i) = sum((target - vq(i,:)) .^2); + end + + % sort and keep top m matches + + [mse_list index_list ] = sort(mse); + + mse_list = mse_list(1:m); + index_list = index_list(1:m); + +endfunction + + +% Search multi-stage VQ, retaining m best candidates at each stage + +function [res output_vecs ind] = mbest(vqset, input_vecs, m) + + [Nvec order stages] = size(vqset); + [Ninput tmp] = size(input_vecs); + + res = []; % residual error after VQ + output_vecs = []; % quantised ouput vectors + ind = []; % index of vqs + + for i=1:Ninput + + % first stage, find mbest candidates + + [mse_list index_list] = search_vq(vqset(:,:,1), input_vecs(i,:), m); + cand_list = [mse_list' index_list']; + cand_list = sortrows(cand_list,1); + + % subsequent stages ........... + + for s=2:stages + + % compute m targets for next stage, and update path + + prev_indexes = zeros(m,s-1); + for t=1:m + target(t,:) = input_vecs(i,:); + for v=1:s-1 + target(t,:) -= vqset(cand_list(t,v+1),:,v); + end + prev_indexes(t,:) = cand_list(t,2:s); + end + + % search stage s using m targets from stage s-1 + % with m targets, we do m searches which return the m best possibilities + % so we get a matrix with one row per candidate, m*m rows total + % prev_indexes provides us with the path through the VQs for each candidate row + + avq = vqset(:,:,s); + cand_list = []; + for t=1:m + [mse_list index_list] = search_vq(avq, target(t,:), m); + x = ones(m,1)*prev_indexes(t,:); + cand_row = [mse_list' x index_list']; + cand_list = [cand_list; cand_row]; + end + + % sort into m best rows + + cand_list = sortrows(cand_list,1); + cand_list = cand_list(1:m,:); + + end + + % final residual + target(1,:) = input_vecs(i,:); + out = zeros(1,order); + for v=1:stages + target(1,:) -= vqset(cand_list(1,v+1),:,v); + out += vqset(cand_list(1,v+1),:,v); + end + res = [res; target(1,:)]; + output_vecs = [output_vecs; out]; + ind = [ind; cand_list(1,2:1+stages)]; + end + +endfunction + + +% Quantises a set of mel-lsps and saves back to disk so they can be read in by c2sim +% assumes we have a vq saved to disk called vq +% +% ~/codec2-dev/build_linux/src$ sox -r 8000 -s -2 ../../wav/vk5qi.wav -t raw -r 8000 -s -2 - sinc 300 sinc -2600 | ./c2sim - --lpc 6 --lpcpf --lspmel --dump vk5qi -o - | play -t raw -r 8000 -s -2 - vol 3 +% +% octave:> test_run("vk5qi") +% +% ~/codec2-dev/build_linux/src$ sox -r 8000 -s -2 ../../wav/vk5qi.wav -t raw -r 8000 -s -2 - sinc 300 sinc -2600 | ./c2sim - --lpc 6 --lpcpf --phase0 --dec 4 --postfilter --lspmel --lspmelread ../../octave/vk5qi_mel_.out -o - | play -t raw -r 8000 -s -2 - vol 3 + +function ind = test_run(samplename) + + more off; + input_vecs_name = sprintf("../build_linux/src/%s_mel.txt", samplename); + input_vecs_name + mel = load(input_vecs_name); + load vq; + [res mel_ ind] = mbest(vq, mel, 5); + mean(std(res)) + + output_vecs_name = sprintf("%s_mel_.out", samplename); + fmel_ = fopen(output_vecs_name,"wb"); + [r c] = size(mel_); + for i=1:r + fwrite(fmel_, mel_(i,:), "float32"); + end + fclose(fmel_); +end + +%ind = test_run("hts1a"); + +%load "../build_linux/src/all_mel.txt" +%vq = trainvq(all_mel, 64, 3); +%save vq; + +% [X] save text file of "vq quantised mels" +% [X] load back into c2sim at run time +% [X] train on continuous mels +% [X] sorting/stability +% [X] see how it sounds +% [X] Goal is to get VQ sounding OK, similar to UQ at 20 or 40ms dec, +% [X] sig better than current 700 +% [X] check all indexes used with hist diff --git a/libcodec2-android/src/codec2/octave/mfsk.m b/libcodec2-android/src/codec2/octave/mfsk.m new file mode 100644 index 0000000..0414b5e --- /dev/null +++ b/libcodec2-android/src/codec2/octave/mfsk.m @@ -0,0 +1,199 @@ +% mfsk.m +% David Rowe Nov 2015 + +% Simulation to test m=2 and m=4 FSK demod + + +1; + +function sim_out = fsk_ber_test(sim_in) + Fs = 96000; + M = sim_in.M; + Rs = sim_in.Rs; + Ts = Fs/Rs; + verbose = sim_in.verbose; + + nbits = sim_in.nbits; + nsym = sim_in.nbits*2/M; + nsam = nsym*Ts; + EsNodB = sim_in.EbNodB + 10*log10(M/2); + + % printf("M: %d nbits: %d nsym: %d\n", M, nbits, nsym); + + if M == 2 + f(1) = -Rs/2; + f(2) = Rs/2; + end + if M == 4 + f(1) = -3*Rs/2; + f(2) = -Rs/2; + f(3) = Rs/2; + f(4) = 3*Rs/2; + end + + % simulate over a range of Eb/No values + + for ne = 1:length(EsNodB) + Nerrs = Terrs = Tbits = 0; + + aEsNodB = EsNodB(ne); + EsNo = 10^(aEsNodB/10); + variance = Fs/(Rs*EsNo); + + % Modulator ------------------------------- + + tx_bits = round(rand(1, nbits)); + tx = zeros(1,nsam); + tx_phase = 0; + + for i=1:nsym + if M == 2 + tone = tx_bits(i) + 1; + else + tone = (tx_bits(2*(i-1)+1:2*i) * [2 1]') + 1; + end + + tx_phase_vec = tx_phase + (1:Ts)*2*pi*f(tone)/Fs; + tx((i-1)*Ts+1:i*Ts) = exp(j*tx_phase_vec); + tx_phase = tx_phase_vec(Ts) - floor(tx_phase_vec(Ts)/(2*pi))*2*pi; + end + + % Channel --------------------------------- + + % We use complex (single sided) channel simulation, as it's convenient + % for the FM simulation. + + noise = sqrt(variance/2)*(randn(1,nsam) + j*randn(1,nsam)); + rx = tx + noise; + if verbose > 1 + printf("EbNo: %f Eb: %f var No: %f EbNo (meas): %f\n", + EbNo, var(tx)*Ts/Fs, var(noise)/Fs, (var(tx)*Ts/Fs)/(var(noise)/Fs)); + end + + % Demodulator ----------------------------- + + % non-coherent FSK demod + + rx_bb = rx; + dc = zeros(M,nsam); + for m=1:M + dc(m,:) = rx_bb .* exp(-j*(0:nsam-1)*2*pi*f(m)/Fs); + end + + rx_bits = zeros(1, nsym); + for i=1:nsym + st = (i-1)*Ts+1; + en = st+Ts-1; + for m=1:M + int(m,i) = abs(sum(dc(m,st:en))); + end + if m == 2 + rx_bits(i) = int(1,i) < int(2,i); + else + [max_amp tone] = max([int(1,i) int(2,i) int(3,i) int(4,i)]); + if tone == 1 + rx_bits(2*(i-1)+1:2*i) = [0 0]; + end + if tone == 2 + rx_bits(2*(i-1)+1:2*i) = [0 1]; + end + if tone == 3 + rx_bits(2*(i-1)+1:2*i) = [1 0]; + end + if tone == 4 + rx_bits(2*(i-1)+1:2*i) = [1 1]; + end + end + end + + error_positions = xor(rx_bits, tx_bits); + Nerrs = sum(error_positions); + Terrs += Nerrs; + Tbits += length(error_positions); + + TERvec(ne) = Terrs; + BERvec(ne) = Terrs/Tbits; + + if verbose > 1 + figure(2) + clf + Rx = 10*log10(abs(fft(rx))); + plot(Rx(1:Fs/2)); + axis([1 Fs/2 0 50]); + + figure(3) + clf; + subplot(211) + plot(real(rx_bb(1:Ts*20))) + subplot(212) + Rx_bb = 10*log10(abs(fft(rx_bb))); + plot(Rx_bb(1:3000)); + axis([1 3000 0 50]); + + figure(4); + subplot(211) + stem(abs(mark_int(1:100))); + subplot(212) + stem(abs(space_int(1:100))); + end + + if verbose + printf("EbNo (db): %3.2f Terrs: %d BER: %4.3f \n", aEsNodB - 10*log10(M/2), Terrs, Terrs/Tbits); + end + end + + sim_out.TERvec = TERvec; + sim_out.BERvec = BERvec; +endfunction + + +function run_fsk_curves + sim_in.M = 2; + sim_in.Rs = 1200; + sim_in.nbits = 12000; + sim_in.EbNodB = 0:2:20; + sim_in.verbose = 1; + + EbNo = 10 .^ (sim_in.EbNodB/10); + fsk_theory.BERvec = 0.5*exp(-EbNo/2); % non-coherent BFSK demod + fsk2_sim = fsk_ber_test(sim_in); + + sim_in.M = 4; + fsk4_sim = fsk_ber_test(sim_in); + + % BER v Eb/No curves + + figure(1); + clf; + semilogy(sim_in.EbNodB, fsk_theory.BERvec,'r;2FSK theory;') + hold on; + semilogy(sim_in.EbNodB, fsk2_sim.BERvec,'g;2FSK sim;') + semilogy(sim_in.EbNodB, fsk4_sim.BERvec,'b;4FSK sim;') + hold off; + grid("minor"); + axis([min(sim_in.EbNodB) max(sim_in.EbNodB) 1E-4 1]) + legend("boxoff"); + xlabel("Eb/No (dB)"); + ylabel("Bit Error Rate (BER)") + +end + + +function run_fsk_single + sim_in.M = 4; + sim_in.Rs = 1200; + sim_in.nbits = 5000; + sim_in.EbNodB = 8; + sim_in.verbose = 1; + + fsk_sim = fsk_ber_test(sim_in); +endfunction + + +rand('state',1); +randn('state',1); +graphics_toolkit ("gnuplot"); + +run_fsk_curves +%run_fsk_single + diff --git a/libcodec2-android/src/codec2/octave/newamp.m b/libcodec2-android/src/codec2/octave/newamp.m new file mode 100644 index 0000000..be19809 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/newamp.m @@ -0,0 +1,1751 @@ +% newamp.m +% +% Copyright David Rowe 2015 +% This program is distributed under the terms of the GNU General Public License +% Version 2 +% +% Library of Octave functions to explore new ideas in amplitude +% (spectral envelope) modelling. See newamp_fby (frame by frame +% analysis) and newamp_batch (batch processing for listening tests) +% +% Code here to support a bunch of experimental ideas, many that didn't work out. + +1; +melvq; % mbest VQ functions + +% -------------------------------------------------------------------------------- +% Functions used by rate K mel work +% -------------------------------------------------------------------------------- + +function y = lanczos2(x) + y = sinc(x).*sinc(x/2); +endfunction + +function y = interp_lanczos(xp, yp, xp_max, x) + + y = zeros(1,length(x)); + k = 1; + for i=1:length(x) + % find closest sample in xp just greater than xi + xi = x(i); + while (xp(k) <= xi) && (k < length(xp)-2) + k++; + end + + % we'd like to use k-2 .. k+2, but we need to stay inside limits of xp + + k_st = k - 2; k_st = max(1,k_st); + k_en = k + 2; k_en = min(length(xp),k_en); + % printf("i: %d xi: %f k: %d k_st: %d k_en: %d\n", i, xi, k, k_st, k_en); + + % map frequencies to x in -2 ... + 2 + + delta = xp(2) - xp(1); + xl = (xp(k_st:k_en) - xi)/delta; + + y(i) = lanczos2(xl) * yp(k_st:k_en)'; + + end + +endfunction + + +% General 2nd order parabolic interpolator. Used splines orginally, +% but this is much simpler and we don't need much accuracy. Given two +% vectors of points xp and yp, find interpolated values y at points x +% + +% If a point in x is less than the smallest point in xp, we linearly +% interpolate down to (0,0). If a point in x is greater than the +% greatest value in xp, we linearly interpolate down to (xp_max, 0) + +function y = interp_para(xp, yp, xp_max, x) + assert( (length(xp) >=3) && (length(yp) >= 3) ); + + y = zeros(1,length(x)); + k = 1; + for i=1:length(x) + xi = x(i); + + % k is index into xp of where we start 3 points used to form parabola + + while (xp(k) < xi) && (k < length(xp)) + k++; + end + + %printf("xi: %f k = %d\n", xi, k); + if k == 1 + % linear interpolation at low end + x1 = 0; y1 = 0; + x2 = xp(k); y2 = yp(k); + b = (y2-y1)/(x2-x1); + y(i) = b*(xi-x2) + y2; + %printf("lin1 k: %d i: %d xi: %f x1: %f y1: %f\n", k, i, xi, x1, y1); + elseif k < length(xp) + % parabolic interpolation + x1 = xp(k-1); y1 = yp(k-1); + x2 = xp(k); y2 = yp(k); + x3 = xp(k+1); y3 = yp(k+1); + a = ((y3-y2)/(x3-x2)-(y2-y1)/(x2-x1))/(x3-x1); + b = ((y3-y2)/(x3-x2)*(x2-x1)+(y2-y1)/(x2-x1)*(x3-x2))/(x3-x1); + y(i) = a*(xi-x2)^2 + b*(xi-x2) + y2; + %printf("para1 k: %d i: %d xi: %f x1: %f y1: %f\n", k, i, xi, x1, y1); + elseif (k == length(xp)) && (xi < xp(k)) + % parabolic interpolation, but shift xp points back by 1 + x1 = xp(k-2); y1 = yp(k-2); + x2 = xp(k-1); y2 = yp(k-1); + x3 = xp(k); y3 = yp(k); + a = ((y3-y2)/(x3-x2)-(y2-y1)/(x2-x1))/(x3-x1); + b = ((y3-y2)/(x3-x2)*(x2-x1)+(y2-y1)/(x2-x1)*(x3-x2))/(x3-x1); + y(i) = a*(xi-x2)^2 + b*(xi-x2) + y2; + %printf("para2 k: %d i: %d xi: %f x1: %f y1: %f\n", k, i, xi, x1, y1); + elseif k == length(xp) + % linear interpolation at high end + x1 = xp(k); y1 = yp(k); + x2 = xp_max; y2 = 0; + b = (y2-y1)/(x2-x1); + y(i) = b*(xi-x1) + y1; + %printf("lin2 k: %d i: %d xi: %f x1: %f y1: %f\n", k, i, xi, x1, y1); + end + + end +endfunction + + +% choose largest sample in band, idea is we care more about finding +% peaks, can handle some error in frequency. x are non linear +% (arbitrary) sampling points in kHz + +function y = interp_largest(f0_Hz, AmdB, x_kHz) + L = length(AmdB); + x = x_kHz*1000; + y = zeros(1,length(x)); + bw = x(2) - x(1); + k = 1; + + for i=1:length(x) + + % determine limits of this band + + if i>1 + bw = x(i) - x(i-1); + end + band_low = x(i) - bw/2; band_high = x(i) + bw/2; + + % map band limits to harmonics + + if x(i) < f0_Hz + m_low = m_high = 1; + else + m_low = round(band_low/f0_Hz); m_high = round(band_high/f0_Hz)-1; + m_low = max(1, m_low); m_high = min(L, m_high); m_high = max(m_low, m_high); + end + + printf("L: %d f0: %f i: %d band_low: %f band_high: %f m_low: %d m_high: %d\n",L, f0_Hz, i, band_low, band_high, m_low, m_high); + % find max in band + + y(i) = max(AmdB(m_low:m_high)); + end + +endfunction + +% simple linear interpolator + +function y = interp_linear(xp, yp, x) + assert( (length(xp) == 2) && (length(yp) == 2) ); + + m = (yp(2) - yp(1))/(xp(2) - xp(1)); + c = yp(1) - m*xp(1); + + y = zeros(1,length(x)); + for i=1:length(x) + y(i) = m*x(i) + c; + end +endfunction + + +% quantise input sample to nearest value in table, optionally return binary code + +function [quant_out best_i bits] = quantise(levels, quant_in) + + % find closest quantiser level + + best_se = 1E32; + for i=1:length(levels) + se = (levels(i) - quant_in)^2; + if se < best_se + quant_out = levels(i); + best_se = se; + best_i = i; + end + end + + % convert index to binary bits + + numbits = ceil(log2(length(levels))); + bits = zeros(1, numbits); + for b=1:numbits + bits(b) = bitand(best_i-1,2^(numbits-b)) != 0; + end + +endfunction + + +% Quantisation functions for Wo in log freq domain + +function index = encode_log_Wo(Wo, bits) + Wo_levels = 2.^bits; + Wo_min = 2*pi/160; + Wo_max = 2*pi/20; + + norm = (log10(Wo) - log10(Wo_min))/(log10(Wo_max) - log10(Wo_min)); + index = floor(Wo_levels * norm + 0.5); + index = max(index, 0); + index = min(index, Wo_levels-1); +endfunction + + +function Wo = decode_log_Wo(index, bits) + Wo_levels = 2.^bits; + Wo_min = 2*pi/160; + Wo_max = 2*pi/20; + + step = (log10(Wo_max) - log10(Wo_min))/Wo_levels; + Wo = log10(Wo_min) + step*index; + + Wo = 10 .^ Wo; +endfunction + + +% convert index to binary bits + +function bits = index_to_bits(value, numbits) + levels = 2.^numbits; + bits = zeros(1, numbits); + for b=1:numbits + bits(b) = bitand(value,2^(numbits-b)) != 0; + end +end + + +function value = bits_to_index(bits, numbits) + value = 2.^(numbits-1:-1:0) * bits; +endfunction + + +% helper function to find polynomial coeffs for a parabola + +function b = parabola_coeffs(x, y) + A = [(x.^2)' x' [1 1 1]'] + b = inv(A)*y'; +endfunction + + +% generate a zig-zag linear to square mapping matrix + +function map = create_zigzag_map(nr,nc) + map = zeros(nr, nc); + + state = 'zig'; + r = c = 1; + + for i=1:nr*nc + + printf("%s r: %d c: %d i %d\n", state, r, c, i); + map(r,c) = i; + + next_state = state; + if state == 'zig' + % move SE + c -= 1; r += 1; + if r > nr + r = nr; c+=2; + next_state = 'zag'; + end + if c < 1 + c = 1; + next_state = 'zag'; + end + end + + if state == 'zag' + % move SE + r -= 1; c +=1; + if c > nc + c = nc; r+=2; + next_state = 'zig'; + end + if r < 1 + r = 1; + next_state = 'zig'; + end + end + state = next_state; + end +endfunction + + +% reshape matrix m as a vector v by reading out elements in zig-zag pattern + +function v = mtov_zigzag(m) + [nr nc] = size(m); + map = zigzag(nr,nc) + v = zeros(1,nr*nc); + for r=1:nr + for c=1:nc + v(map(r,c)) = m(r,c); + end + end +endfunction + + +% extracts DCT information for rate K surface + +function unwrapped_dcts = dct_blocks(surf, Nt=16) + [frames K] = size(surf); + + % break into 160ms blocks, 2D DCT, truncate, IDCT + + Nblocks = floor(frames/Nt); + unwrapped_dcts = zeros(Nblocks,Nt*K); + + for n=1:Nblocks + st = (n-1)*Nt+1; en = st + Nt - 1; + D = dct2(surf(st:en,:)); + unwrapped_dcts(n,:) = reshape(D',1,Nt*K); + end +endfunction + + +% Determines a map for quantising 2D DCT coeffs in order of rms value +% (ie std dev) of each coeff. Those coeffs with the greatest change +% need the most bits to quantise + +function [map rms_map mx mx_ind unwrapped_dcts] = create_map_rms(rate_K_surface, nr, nc) + unwrapped_dcts = dct_blocks(rate_K_surface, nr); + [mx mx_ind] = sort(std(unwrapped_dcts)); + mx_ind = fliplr(mx_ind); mx = fliplr(mx); + map = rms_map = zeros(nr,nc); + for i=1:nr*nc + r = floor((mx_ind(i)-1)/nc) + 1; + c = mx_ind(i) - (r-1)*nc; + %printf("%d %d %d\n", i, r, c); + map(r,c) = i; + rms_map(r,c) = mx(i); + end +endfunction + + +% plot histogram of each 2D DCT coeff, so we can get a feel for +% quantiser design + +function plot_dct2_hists(rate_K_surface, nr, nc) + [map rms_map mx mx_ind unwrapped_dcts] = create_map_rms(rate_K_surface, nr, nc); + Ncoeff = nr*nc; + fign = 1; subplotn = 1; + close all; figure(fign); clf; + Nplot = 60; + for i=1:Nplot + subplot(5,4,subplotn); + d = unwrapped_dcts(:,mx_ind(i)); + d = round(d/4); + hist(d); + subplotn++; + if (subplotn > 20) && (i != Nplot) + subplotn = 1; + fign++; + figure(fign); clf; + end + end +endfunction + + +% Gather run length data for each 2D DCT coeff, to see if run length encoding +% can help + +function [run_length d]= plot_run_length(rate_K_surface, nr, nc) + [map rms_map mx mx_ind unwrapped_dcts] = create_map_rms(rate_K_surface, nr, nc); + Ncoeff = nr*nc; + [Nblocks tmp] = size(unwrapped_dcts); + + % first get histogram of DCT values ----------------------------------- + + % some mild quantisation + + unwrapped_dcts = round(unwrapped_dcts/4); + + % note we only consider first half of DCT coeffs, unlikely to use all + + d = []; + for i=1:Nblocks + d = [d unwrapped_dcts(i,mx_ind(1:Ncoeff/2))]; + end + + % note we remove outliers from plot as very low prob symbols + + d = d(find(abs(d)<10)); + figure(1); clf; [Wi, ii] = hist(d,-10:10,1); plot(ii,Wi); + length(d) + Wi = Wi(find(Wi > 0)); + %sum(Wi) + %-log2(Wi) + %-Wi .* log2(Wi) + printf("bits/symbol: %2.2f\n", sum(-Wi .* log2(Wi))); + + % now measure run lengths -------------------------------------------- + + run_length = zeros(21,Ncoeff); + state = 'idle'; + + for i=2:length(d) + + next_state = state; + + if state == 'idle' + if d(i-1) == d(i) + next_state = 'trac'; + arun_length = 2; + else + run_length(d(i)+10, 1)++; + end + end + + if state == 'trac' + if d(i-1) == d(i) + arun_length++; + else + next_state = 'idle'; + run_length(d(i-1)+10, arun_length)++; + end + end + + state = next_state; + + end + + figure(2); clf; mesh(run_length(:,1:10)); +endfunction + + +% Design kmeans quantisers for each DCT coeff. This didn't work very well. + +function [quantisers nbits] = design_quantisters_kmeans(rate_K_surface, nr, nc, nbits_max) + [map rms_map mx unwrapped_dcts] = create_map_rms(rate_K_surface, nr, nc); + nq = nr*nc; + quantisers = zeros(nq, 2^nbits_max); nbits = zeros(nq,1); + for i=1:nq + + % work out number of levels for this quantiser such that it is a + % power of 2 for integer number of bits + + nlevels = (2^nbits_max); + nbits(i) = round(log2(nlevels)); + nlevels = 2 .^ nbits(i); + + if i <= 100 + printf("%d %d\n", i, nlevels); + [idx, centers] = kmeans(unwrapped_dcts(:,i), nlevels); + quantisers(i,1:nlevels) = sort(centers); + end + end +endfunction + + +% Uniform quantisers designed to fit limits of each DCT coeff + +function [quantisers nlevels] = design_quantisters_uniform(rate_K_surface, nr, nc, nlevels_max) + [map rms_map mx mx_ind unwrapped_dcts] = create_map_rms(rate_K_surface, nr, nc); + + nq = nr*nc; + quantisers = zeros(nq, nlevels_max); nlevels = zeros(nq, 1); + + for i=1:nq + d = unwrapped_dcts(:,mx_ind(i)); + d = floor(d/16); + q_min = floor(min(d)); + q_max = ceil(max(d)); + nlevels(i) = q_max-q_min+1; + quantisers(i,1:nlevels(i)) = 16*(q_min:q_max); + end +endfunction + + +% Determine a phase spectra from a magnitude spectra +% from http://www.dsprelated.com/showcode/20.php +% Haven't _quite_ figured out how this works but have to start somewhere .... +% +% TODO: we may be able to sample at a lower rate, like mWo +% but start with something that works +function [phase Gdbfk s Aw] = determine_phase(model, f, Nfft=512, ak) + Fs = 8000; + max_amp = 80; + L = min([model(f,2) max_amp-1]); + Wo = model(f,1); + + sample_freqs_kHz = (Fs/1000)*[0:Nfft/2]/Nfft; % fft frequency grid (nonneg freqs) + Am = model(f,3:(L+2)); + AmdB = 20*log10(Am); + rate_L_sample_freqs_kHz = (1:L)*Wo*4/pi; + Gdbfk = interp_lanczos(rate_L_sample_freqs_kHz, AmdB, Fs/(2*1000), sample_freqs_kHz); + + % Gdbfk = resample_mask(model, f, mask_sample_freqs_kHz); + + % optional input of aks for testing + + if nargin == 4 + Aw = 1 ./ fft(ak,Nfft); + Gdbfk = 20*log10(abs(Aw(1:Nfft/2+1))); + end + + [phase s] = mag_to_phase(Gdbfk, Nfft); + +endfunction + + +% Non linear sampling of frequency axis, reducing the "rate" is a +% first step before VQ + +function mel = ftomel(fHz) + mel = floor(2595*log10(1+fHz/700)+0.5); +endfunction + + +function rate_K_sample_freqs_kHz = mel_sample_freqs_kHz(K, fstart_hz=100, fend_hz=0.95*4000) + mel_start = ftomel(fstart_hz); mel_end = ftomel(fend_hz); + step = (mel_end-mel_start)/(K-1); + mel = mel_start:step:mel_end; + rate_K_sample_freqs_Hz = 700*((10 .^ (mel/2595)) - 1); + rate_K_sample_freqs_kHz = rate_K_sample_freqs_Hz/1000; +endfunction + + +function plot_mel_sample_freqs(K, f_start_hz, f_end_hz) + rate_K_sample_freqs_kHz = mel_sample_freqs_kHz(K, f_start_hz, f_end_hz); + figure(1); clf; + plot(rate_K_sample_freqs_kHz,'+'); +endfunction + +function [rate_K_surface rate_K_sample_freqs_kHz] = resample_const_rate_f_mel(model, K, Fs=8000, interp_alg='lanc') + rate_K_sample_freqs_kHz = mel_sample_freqs_kHz(K, 100, 0.95*Fs/2); + rate_K_surface = resample_const_rate_f(model, rate_K_sample_freqs_kHz, Fs, interp_alg); +endfunction + + +% Resample Am from time-varying rate L=floor(pi/Wo) to fixed rate K. This can be viewed +% as a 3D surface with time, freq, and ampitude axis. + +function [rate_K_surface rate_K_sample_freqs_kHz] = resample_const_rate_f(model, rate_K_sample_freqs_kHz, Fs, interp_alg='lanc') + + % convert rate L=pi/Wo amplitude samples to fixed rate K + + max_amp = 160; + [frames col] = size(model); + K = length(rate_K_sample_freqs_kHz); + rate_K_surface = zeros(frames, K); + + for f=1:frames + Wo = model(f,1); + L = min([model(f,2) max_amp-1]); + Am = model(f,3:(L+2)); + AmdB = 20*log10(Am); + + clip_en = 0; + if clip_en + % clip between peak and peak -50dB, to reduce dynamic range + + AmdB_peak = max(AmdB); + AmdB(find(AmdB < (AmdB_peak-50))) = AmdB_peak-50; + end + + rate_L_sample_freqs_kHz = (1:L)*Wo*Fs/(2000*pi); + + %rate_K_surface(f,:) = interp1([0 rate_L_sample_freqs_kHz (Fs/2000)], [AmdB(1) AmdB AmdB(L)], rate_K_sample_freqs_kHz, "spline"); + if strcmp(interp_alg, 'para') + rate_K_surface(f,:) = interp_para(rate_L_sample_freqs_kHz, AmdB, Fs/(2*1000), rate_K_sample_freqs_kHz); + end + if strcmp(interp_alg, 'lanc') + rate_K_surface(f,:) = interp_lanczos(rate_L_sample_freqs_kHz, AmdB, Fs/(2*1000), rate_K_sample_freqs_kHz); + end + + %printf("%d\n", f); + end + %printf("\n"); +endfunction + + +function [rate_K_vec_corrected orig_error error nasty_error_log nasty_error_m_log] = correct_rate_K_vec(rate_K_vec, rate_K_sample_freqs_kHz, AmdB, AmdB_, K, Wo, L, Fs) + + % aliasing correction -------------------------------------- + + % The mel sample rate decreases as frequency increases. Look for + % any regions above 1000Hz where we have missed definition of a + % spectral peak (formant) due to aliasing. Adjust the rate K + % sample levels to restore peaks. Theory is that correct + % definition of a formant is less important than the frequency of + % the formant. As long as we define a formant in that general + % frequency area it will sound OK. + + Am_freqs_kHz = (1:L)*Wo*Fs/(2000*pi); + + % Lets see where we have made an error + + error = orig_error = AmdB(1:L) - AmdB_(1:L); + + Ncorrections = 3; % maximum number of rate K samples to correct + error_thresh = 3; % only worry about errors larger than thresh + + start_m = floor(L*1000/(Fs/2)); + error(1:start_m) = 0; % first 1000Hz is densly sampled so ignore + nasty_error_m_log = []; nasty_error_log = []; + + + rate_K_vec_corrected = rate_K_vec; + for i=1:Ncorrections + [mx mx_m] = max(error); + + if mx > error_thresh + nasty_error_log = [nasty_error_log mx]; + nasty_error_m_log = [nasty_error_m_log mx_m]; + + % find closest rate K sample to nasty error + + nasty_error_freq = mx_m*Wo*Fs/(2*pi*1000); + [tmp closest_k] = min(abs(rate_K_sample_freqs_kHz - nasty_error_freq)); + rate_K_vec_corrected(closest_k) = AmdB(mx_m); + + % zero out error in this region and look for another large error region + + k = max(1, closest_k-1); + rate_K_prev_sample_kHz = rate_K_sample_freqs_kHz(k); + k = min(K, closest_k+1); + rate_K_next_sample_kHz = rate_K_sample_freqs_kHz(k); + + [tmp st_m] = min(abs(Am_freqs_kHz - rate_K_prev_sample_kHz)); + [tmp en_m] = min(abs(Am_freqs_kHz - rate_K_next_sample_kHz)); + if closest_k == K + en_m = L; + end + error(st_m:en_m) = 0; + end + end +endfunction + + +% Take a rate K surface and convert back to time varying rate L + +function [model_ AmdB_] = resample_rate_L(model, rate_K_surface, rate_K_sample_freqs_kHz, Fs=8000, interp_alg='lanc') + max_amp = 160; K = columns(rate_K_surface); + [frames col] = size(model); + + AmdB_ = zeros(frames, max_amp); + model_ = zeros(frames, max_amp+2); + for f=1:frames + Wo = model(f,1); + L = model(f,2); + rate_L_sample_freqs_kHz = (1:L)*Wo*Fs/(2000*pi); + + % back down to rate L + + % dealing with end effects is an ongoing issue.....need a better solution + + if strcmp(interp_alg, 'para') + AmdB_(f,1:L) = interp_para(rate_K_sample_freqs_kHz, rate_K_surface(f,:), Fs/(2*1000), rate_L_sample_freqs_kHz); + end + if strcmp(interp_alg, 'lanc') + AmdB_(f,1:L) = interp_lanczos(rate_K_sample_freqs_kHz, rate_K_surface(f,:), Fs/(2*1000), rate_L_sample_freqs_kHz); + end + if strcmp(interp_alg, 'lancmel') + rate_K_sample_freqs_mel = ftomel(rate_K_sample_freqs_kHz*1000); + rate_L_sample_freqs_mel = ftomel(rate_L_sample_freqs_kHz*1000); + AmdB_(f,1:L) = interp_lanczos(rate_K_sample_freqs_mel, rate_K_surface(f,:), Fs/(2*1000), rate_L_sample_freqs_mel); + end + +#{ + if pad_end + AmdB_(f,1:L) = interp1([0 rate_K_sample_freqs_kHz Fs/2000], + [rate_K_surface(f,1) rate_K_surface(f,:) rate_K_surface(f,K)], + rate_L_sample_freqs_kHz, + "spline"); + else + AmdB_(f,1:L) = interp1([0 rate_K_sample_freqs_kHz], + [rate_K_surface(f,1) rate_K_surface(f,:)], + rate_L_sample_freqs_kHz, + "spline"); + end +#} + + %AmdB_(f,1:L) = interp_para(rate_K_sample_freqs_kHz, rate_K_surface(f,:), Fs/(2*1000), rate_L_sample_freqs_kHz); + %printf("f: %d %f %f %f\n", f, rate_K_sample_freqs_kHz(1), rate_L_sample_freqs_kHz(1), AmdB_(1)); + model_(f,1) = Wo; model_(f,2) = L; model_(f,3:(L+2)) = 10 .^ (AmdB_(f, 1:L)/20); + end +endfunction + + +% PostFilter, has a big impact on speech quality after VQ. When used +% on a mean removed rate K vector, it raises formants, and supresses +% anti-formants. As it manipulates amplitudes, we normalise energy to +% prevent clipping or large level variations. pf_gain of 1.2 to 1.5 +% (dB) seems to work OK. Good area for further investigations and +% improvements in speech quality. + +function vec = post_filter(vec, sample_freq_kHz, pf_gain = 1.5, voicing) + % vec is rate K vector describing spectrum of current frame + % lets pre-emp before applying PF. 20dB/dec over 300Hz + + pre = 20*log10(sample_freq_kHz/0.3); + vec += pre; + + levels_before_linear = 10 .^ (vec/20); + e_before = sum(levels_before_linear .^2); + + vec *= pf_gain; + + levels_after_linear = 10 .^ (vec/20); + e_after = sum(levels_after_linear .^2); + gain = e_after/e_before; + gaindB = 10*log10(gain); + vec -= gaindB; + + vec -= pre; +endfunction + + +% construct energy quantiser table, and save to text file to include in C + +function energy_q = create_energy_q + energy_q = 10 + 40/16*(0:15); +endfunction + +function save_energy_q(fn) + energy_q = create_energy_q; + f = fopen(fn, "wt"); + fprintf(f, "1 %d\n", length(energy_q)); + for n=1:length(energy_q) + fprintf(f, "%f\n", energy_q(n)); + end + fclose(f); +endfunction + + +% save's VQ in format that can be compiled by Codec 2 build system + +function save_vq(vqset, filenameprefix) + [Nvec order stages] = size(vqset); + for s=1:stages + fn = sprintf("%s_%d.txt", filenameprefix, s); + f = fopen(fn, "wt"); + fprintf(f, "%d %d\n", order, Nvec); + for n=1:Nvec + for k=1:order + fprintf(f, "% 8.4f ", vqset(n,k,s)); + end + fprintf(f, "\n"); + end + fclose(f); + end +endfunction + + +% Decoder side interpolation of Wo and voicing, to go from 25 Hz +% sample rate used over channel to 100Hz internal sample rate of Codec +% 2. + +function [Wo_ voicing_] = interp_Wo_v(Wo1, Wo2, voicing1, voicing2) + M = 4; + max_amp = 80; + + Wo_ = zeros(1,M); + voicing_ = zeros(1,M); + if !voicing1 && !voicing2 + Wo_(1:M) = 2*pi/100; + end + + if voicing1 && !voicing2 + Wo_(1:M/2) = Wo1; + Wo_(M/2+1:M) = 2*pi/100; + voicing_(1:M/2) = 1; + end + + if !voicing1 && voicing2 + Wo_(1:M/2) = 2*pi/100; + Wo_(M/2+1:M) = Wo2; + voicing_(M/2+1:M) = 1; + end + + if voicing1 && voicing2 + Wo_samples = [Wo1 Wo2]; + Wo_(1:M) = interp_linear([1 M+1], Wo_samples, 1:M); + voicing_(1:M) = 1; + end + + #{ + printf("f: %d f+M/2: %d Wo: %f %f (%f %%) v: %d %d \n", f, f+M/2, model(f,1), model(f+M/2,1), 100*abs(model(f,1) - model(f+M/2,1))/model(f,1), voicing(f), voicing(f+M/2)); + for i=f:f+M/2-1 + printf(" f: %d v: %d v_: %d Wo: %f Wo_: %f\n", i, voicing(i), voicing_(i), model(i,1), model_(i,1)); + end + #} +endfunction + + +function [diff_weighted weights error g min_ind] = search_vq_weighted(target, vq, weight_gain) + [vq_rows vq_cols] = size(vq); + + weight_gain = 0.1; % I like this vairable name as it is funny + + % find mse for each vector + + error = g = zeros(1, vq_rows); + diff = weights = diff_weighted = zeros(vq_rows, vq_cols); + + weights = max(0.1, weight_gain .* (target + 20)); + + for i=1:vq_rows + + % work out gain for best match + + g(i) = sum((target - vq(i,:)).*weights)/vq_cols; + + % Find weighted difference. This allocated more importance + % (error) to samples with higher energy, and stops really low + % level harmonics from having any impact. Note addition in dB + % is multiplication in linear + + diff(i,:) = target - vq(i,:) - g(i); + + diff_weighted(i,:) = diff(i,:) .* weights; + + % abs in dB is MSE in linear + + error(i) = mean(abs(diff_weighted(i,:))); + end + + [mn min_ind] = min(error); + +endfunction + + +% -------------------------------------------------------------------------------- +% Experimental functions used for masking, piecewise models, not part of newamp1 +% -------------------------------------------------------------------------------- + + +function [maskdB_ maskdB_cyclic Dabs dk_ D1_ ind] = decimate_in_freq(maskdB, cyclic=1, k=7, vq) + + % Lets try to come up with a smoothed, cyclic model. Replace + % points from 3500 Hz to 4000Hz with a sequence that joins without + % a step to points at the 0Hz end of the spectrum. This will make + % it more cyclical and make the DFT happier, less high freq + % energy. Yes, happier is an extremely technical term. + + L = length(maskdB); + anchor = floor(7*L/8); + xpts = [ anchor-1 anchor L+1 L+2]; + ypts = [ maskdB(anchor-1) maskdB(anchor) maskdB(1) maskdB(2)]; + mask_pp = splinefit(xpts, ypts, 1); + maskdB_cyclic = [maskdB(1:anchor) ppval(mask_pp, anchor+1:L)]; + + % Now DFT, truncating DFT coeffs to undersample + + if cyclic + D = fft(maskdB_cyclic)/L; + else + D = fft(maskdB)/L; + end + Dabs = abs(D); % this returned for plotting + + % truncate D to rate k, convert to 2k length real vector for quantisation and transmission + + Dk = [0 D(2:k-1) real(D(k)) D(L-k+1:L)]; + dk = real(ifft(Dk)); + D1 = D(1); + + % quantisation + + if nargin == 4 + [res tmp vq_ind] = mbest(vq, dk, 4); + D1_tab = 0:(60/15):60; + assert(length(D1_tab) == 16); + [tmp D1_ind] = quantise(D1_tab, D1); + ind = [vq_ind D1_ind]; + [dk_ D1_] = index_to_params(ind, vq); + %std(dk_ - dk) + else + dk_ = dk; + D1_ = D1; + end + + maskdB_ = params_to_mask(L, k, dk_, D1_); +endfunction + + + +function [dk_ D1_] = index_to_params(ind, vq) + [Nvec order stages] = size(vq); + dk_ = zeros(1,order); + for s=1:stages + dk_ = dk_ + vq(ind(s),:,s); + end + D1_tab = 0:(60/15):60; + D1_ = D1_tab(ind(stages+1)); +endfunction + + +% decoder side + +function maskdB_ = params_to_mask(L, k, dk_, D1_) + + anchor = floor(7*L/8); + + % convert quantised dk back to rate L magnitude spectrum + + Dk_ = fft(dk_); + D_ = zeros(1,L); + D_(1) = D1_; % energy seperately quantised + D_(2:k-1) = Dk_(2:k-1); + D_(L-k+1:L) = Dk_(k+1:2*k); + d_ = L*ifft(D_); % back to spectrum at rate L + maskdB_ = real(d_); + + % Finally fix up last 500Hz, taper down 10dB at 4000Hz + + xpts = [ anchor-1 anchor L]; + ypts = [ maskdB_(anchor-1) maskdB_(anchor) (maskdB_(anchor)-10)]; + mask_pp = splinefit(xpts, ypts, 1); + maskdB_ = [maskdB_(1:anchor) ppval(mask_pp, anchor+1:L)]; +endfunction + + + +% determine cumulative mask, using amplitude of each harmonic. Mask is +% sampled across L points in the linear domain + +function maskdB = determine_mask(masker_amps_dB, masker_freqs_kHz, mask_sample_freqs_kHz, bark_model=1) + + % calculate and plot masking curve + + maskdB = -20*ones(1,length(mask_sample_freqs_kHz)); + for m=1:length(masker_freqs_kHz) + maskdB = max(maskdB, schroeder(masker_freqs_kHz(m), mask_sample_freqs_kHz, bark_model) + masker_amps_dB(m)); + %maskdB = max(maskdB, parabolic_resonator(masker_freqs_kHz(m), mask_sample_freqs_kHz) + masker_amps_dB(m)); + end +end + + +% Sample mask as model for Am + +function [maskdB Am_freqs_kHz] = mask_model(AmdB, Wo, L, bark_model=1) + + Am_freqs_kHz = (1:L)*Wo*4/pi; + maskdB = determine_mask(AmdB, Am_freqs_kHz, Am_freqs_kHz, bark_model); +endfunction + + +% +% Masking functions from http://www.perceptualentropy.com/coder.html#C +% Thanks Jon Boley! +% + +% Calculate the Schroeder masking spectrum for a given frequency and SPL + +function maskdB = schroeder(freq_tone_kHz, mask_sample_freqs_kHz, bark_model=1) + f_kHz = mask_sample_freqs_kHz; + f_Hz = f_kHz*1000; + + % Schroeder Spreading Function + + if bark_model == 0 + dz = bark(freq_tone_kHz*1000)-bark(f_Hz); + end + + if bark_model == 1 + + % Modification by DR: Piecewise linear model that makes bands + % beneath 1.5kHz wider to match the width of F1 and + % "fill in" the spectra better for UV sounds. + + %x1 = 0.5; x2 = 2; + %y1 = 0.5; y2 = 1; + x1 = 0.5; x2 = 3; + y1 = 1; y2 = 3; + + grad = (y2 - y1)/(x2 - x1); + y_int = y1 - grad*x1; + + if freq_tone_kHz <= x1 + y = y1; + end + if (freq_tone_kHz > x1) && (freq_tone_kHz < x2) + y = grad*freq_tone_kHz + y_int; + end + if freq_tone_kHz >= x2 + y = y2; + end + dz = y*(bark(freq_tone_kHz*1000) - bark(f_Hz)); + end + + if bark_model == 2 + + % constant bandwidth model, useful for bg noise and UV + + %dz = bark(freq_tone_kHz*1000) - bark(f_Hz); + dz = 0.2*bark(freq_tone_kHz*1000-f_Hz); + end + + maskdB = 15.81 + 7.5*(dz+0.474) - 17.5*sqrt(1 + (dz+0.474).^2); +endfunction + + +% Converts frequency to bark scale +% Frequency should be specified in Hertz + +function b=bark(f) + b = 13*atan(0.76*f/1000) + 3.5*atan((f/7500).^2); +endfunction + + +% Alternative mask function that has a gentler slope than schroeder. +% Idea is to get sharp formant definition, but also fill in gaps so we +% dont get chunks of spectrum coming and going + +function [maskdB pp] = resonator(freq_tone_kHz, mask_sample_freqs_kHz) + % note all frequencies in kHz + + f1 = 0.1; f2 = 3; + bw1 = 0.1; bw2 = 0.1; + m = (bw2-bw1)/(log10(f2)-log10(f1)); + c = bw1 - m*log10(f1); + + Fs = 8; + slope = -12; % filter falls off by this slope/octave + + maskdB = zeros(1, length(mask_sample_freqs_kHz)); + + % frequency dependant bandwidth + + bw = m*log10(freq_tone_kHz) + c; + printf("freq_tone_kHz: %f bw: %f\n", freq_tone_kHz, bw); + + % Design spline to set shape based on current bandwidth + + x = [-Fs/2 -bw/2 0 +bw/2 +Fs/2]; + delta = slope*log2(Fs/bw); % gain is delta down from -3dB to Fs/2 + y = [-3 + delta, -3, 0, -3, -3 + delta]; + pp = splinefit(x, y, 4); + maskdB = ppval(pp, mask_sample_freqs_kHz - freq_tone_kHz); +endfunction + + +function maskdB = resonator_fast(freq_tone_kHz, mask_sample_freqs_kHz) + + % note all frequencies on kHz + + #{ + max_ind = length(pp_bw); + ind = round(freq_tone_kHz/0.1); + ind = min(ind, max_ind); + ind = max(ind, 1); + #} + %printf("freq_tone_kHz: %f ind: %d\n", freq_tone_kHz, ind); + [maskdB_res1 pp] = resonator(0.5, mask_sample_freqs_kHz); + + maskdB = ppval(pp, mask_sample_freqs_kHz - freq_tone_kHz); + %maskdB = ppval(pp_bw(ind), mask_sample_freqs_kHz - freq_tone_kHz); +endfunction + + +% Alternative mask function that uses parabolas for fast computation + +function maskdB = parabolic_resonator(freq_tone_kHz, mask_sample_freqs_kHz) + + % note all frequencies in kHz + + % bandwidth as a function of log(f) + + f1 = 0.5; f2 = 3; + bw1 = 0.1; bw2 = 0.3; + m = (bw2-bw1)/(log10(f2)-log10(f1)); + c = bw1 - m*log10(f1); + + Fs = 8; + slope = -18; + + % frequency dependant bandwidth + + if freq_tone_kHz < f1 + bw = bw1; + else + bw = m*log10(freq_tone_kHz) + c; + end + %printf("freq_tone_kHz: %f bw: %f\n", freq_tone_kHz, bw); + + % Design parabola to fit bandwidth + + a = -3/((bw/2)^2); + %printf("freq_tone_kHz: %f bw: %f a: %f\n", freq_tone_kHz, bw, a); + + % Design straight line to fit slope + + delta = slope*log2(Fs/bw); % gain is delta down from -3dB to Fs/2 + m1 = 2*delta/Fs; + + maskdB_par = a*((mask_sample_freqs_kHz - freq_tone_kHz).^2); + maskdB_line = m1*abs(mask_sample_freqs_kHz - freq_tone_kHz) - 10; + %indx = find(mask_sample_freqs_kHz < freq_tone_kHz); + %maskdB_line(indx) = -50; + + maskdB = max(maskdB_par, maskdB_line); +endfunction + + +% sampling the mask in one frame using an arbitrary set of samplng frequencies + +function maskdB = resample_mask(model, f, mask_sample_freqs_kHz) + max_amp = 80; + + Wo = model(f,1); + L = min([model(f,2) max_amp-1]); + Am = model(f,3:(L+2)); + AmdB = 20*log10(Am); + masker_freqs_kHz = (1:L)*Wo*4/pi; + maskdB = determine_mask(AmdB, masker_freqs_kHz, mask_sample_freqs_kHz); +endfunction + + +% decimate frame rate of mask, use linear interpolation in the log domain + +function maskdB_ = decimate_frame_rate(model, decimate, f, frames) + max_amp = 80; + + Wo = model(f,1); + L = min([model(f,2) max_amp]); + + % determine frames that bracket the one we need to interp + + left_f = decimate*floor((f-1)/decimate)+1; + right_f = left_f + decimate; + if right_f > frames + right_f = left_f; + end + + % determine fraction of each frame to use + + left_fraction = 1 - mod((f-1),decimate)/decimate; + right_fraction = 1 - left_fraction; + + printf("f: %d left_f: %d right_f: %d left_fraction: %3.2f right_fraction: %3.2f \n", f, left_f, right_f, left_fraction, right_fraction) + + % fit splines to left and right masks + + left_Wo = model(left_f,1); + left_L = min([model(left_f,2) max_amp]); + left_AmdB = 20*log10(model(left_f,3:(left_L+2))); + left_sample_freqs_kHz = (1:left_L)*left_Wo*4/pi; + + right_Wo = model(right_f,1); + right_L = min([model(right_f,2) max_amp]); + right_AmdB = 20*log10(model(right_f,3:(right_L+2))); + right_sample_freqs_kHz = (1:right_L)*right_Wo*4/pi; + + % determine mask for left and right frames, sampling at Wo for this frame + + sample_freqs_kHz = (1:L)*Wo*4/pi; + maskdB_left = interp1(left_sample_freqs_kHz, left_AmdB, sample_freqs_kHz, "extrap"); + maskdB_right = interp1(right_sample_freqs_kHz, right_AmdB, sample_freqs_kHz, "extrap"); + + maskdB_ = left_fraction*maskdB_left + right_fraction*maskdB_right; +endfunction + + +% plot some masking curves, used for working on masking filter changes + +function plot_masking(bark_model=0); + Fs = 8000; + + figure(1) + mask_sample_freqs_kHz = 0.1:0.025:(Fs/1000)/2; + %maskdB_s0 = schroeder(0.5, mask_sample_freqs_kHz, 0); + %plot(mask_sample_freqs_kHz, maskdB_s0,';schroeder 0;'); + maskdB_s1 = schroeder(0.5, mask_sample_freqs_kHz, bark_model); + plot(mask_sample_freqs_kHz, maskdB_s1,'g;schroeder 1;'); + #{ + maskdB_res = parabolic_resonator(0.5, mask_sample_freqs_kHz); + plot(mask_sample_freqs_kHz, maskdB_res,'r;resonator;'); + #} + hold on; + + for f=0.5:0.5:3 + %maskdB_s0 = schroeder(f, mask_sample_freqs_kHz, 0); + %plot(mask_sample_freqs_kHz, maskdB_s0); + maskdB_s1 = schroeder(f, mask_sample_freqs_kHz, bark_model); + plot(mask_sample_freqs_kHz, maskdB_s1,'g'); + #{ + maskdB_res = parabolic_resonator(f, mask_sample_freqs_kHz); + plot(mask_sample_freqs_kHz, maskdB_res,'r;resonator;'); + #} + end + hold off; + + axis([0.1 4 -30 0]) + grid + + #{ + %pp_bw = gen_pp_bw; + figure(2) + clf; + maskdB_res = resonator(0.5, mask_sample_freqs_kHz); + plot(mask_sample_freqs_kHz, maskdB_res); + hold on; + maskdB_res_fast = resonator_fast(0.5, mask_sample_freqs_kHz); + plot(mask_sample_freqs_kHz, maskdB_res_fast, "g"); + maskdB_par = parabolic_resonator(0.5, mask_sample_freqs_kHz); + plot(mask_sample_freqs_kHz, maskdB_par, "r"); + hold off; + axis([0 4 -80 0]); + grid + #} +endfunction + + +% produce a scatter diagram of amplitudes + +function amp_scatter(samname) + + model_name = strcat(samname,"_model.txt"); + model = load(model_name); + [frames nc] = size(model); + max_amp = 80; + + Am_out_name = sprintf("%s_am.out", samname); + freqs = []; + ampsdB = []; + + for f=1:frames + + L = min([model(f,2) max_amp-1]); + Wo = model(f,1); + Am = model(f,3:(L+2)); + AmdB = 20*log10(Am); + + maskdB = mask_model(AmdB, Wo, L); + mask_sample_freqs_kHz = (1:L)*Wo*4/pi; + [newmaskdB local_maxima] = make_newmask(maskdB, AmdB, Wo, L, mask_sample_freqs_kHz); + + [nlm tmp] = size(local_maxima); + freqs = [freqs (local_maxima(1:min(4,nlm),2)*Wo*4000/pi)']; + an_ampsdB = local_maxima(1:min(4,nlm),1)'; + ampsdB = [ampsdB an_ampsdB-mean(an_ampsdB)]; + end + + figure(1) + plot(freqs, ampsdB,'+'); + figure(2) + subplot(211) + hist(freqs,20) + subplot(212) + hist(ampsdB,20) +endfunction + + + +% AbyS returns f & a, this function plots values so we can consider quantisation + +function plot_f_a_stats(f,a) + + % freq pdfs + + [fsrt fsrt_ind] = sort(f,2); + fsrt /= 1000; + figure(1) + for i=1:4 + subplot(2,2,i) + hist(fsrt(:,i),50) + printf("%d min: %d max: %d\n", i, min(fsrt(:,i)), max(fsrt(:,i))) + an_axis = axis; + axis([0 4 an_axis(3) an_axis(4)]) + end + + % freq diff pdfs + + figure(2) + for i=1:4 + subplot(2,2,i) + if i == 1 + hist(fsrt(:,i),50) + else + hist(fsrt(:,i) - fsrt(:,i-1),50) + end + an_axis = axis; + axis([0 4 an_axis(3) an_axis(4)]) + end + + % amplitude PDFs + + l = length(a); + for i=1:l + asrt(i,:) = a(i, fsrt_ind(i,:)); + end + + figure(3) + for i=1:4 + subplot(2,2,i) + hist(asrt(:,i) - mean(asrt(:,:),2)) + an_axis = axis; + axis([-40 40 an_axis(3) an_axis(4)]) + end + + % find straight line fit + + for i=1:l + [gradient intercept] = linreg(1000*fsrt(i,:), asrt(i,:), 4); + alinreg(i,:) = gradient*1000*fsrt(i,:) + intercept; + alinregres(i,:) = asrt(i,:) - alinreg(i,:); + m(i) = gradient; c(i) = intercept; + end + + figure(4) + for i=1:4 + subplot(2,2,i) + hist(alinregres(:,i)) + an_axis = axis; + axis([-40 40 an_axis(3) an_axis(4)]) + end + + figure(5) + subplot(211) + m = m(find(m>-0.05)); + m = m(find(m<0.03)); + hist(m,50) + title('gradient'); + subplot(212) + c = c(find(c>0)); + hist(c,50) + title('y-int'); + +endfunction + +function D1_log = decode_from_bit_stream(samname, ber = 0, bit_error_mask = ones(28,1)) + max_amp = 80; + bits_per_param = [6 1 8 8 4 1]; + assert(sum(bits_per_param) == 28); + load vq; + k = 10; + dec_in_time = 1; + train = 0; + decimate = 4; + synth_phase = 1; + + Am_out_name = sprintf("%s_am.out", samname); + Aw_out_name = sprintf("%s_aw.out", samname); + bit_stream_name = strcat(samname,".bit"); + faw = fopen(Aw_out_name,"wb"); + fam = fopen(Am_out_name,"wb"); + faw = fopen(Aw_out_name,"wb"); + + Wo_out_name = sprintf("%s_Wo.out", samname); + fWo = fopen(Wo_out_name,"wb"); + + % read in bit stream and convert to ind_log[] + + ind_log = []; + fbit = fopen(bit_stream_name, "rb"); + bits_per_frame = sum(bits_per_param); + nind = length(bits_per_param); + nerr = 0; nbits = 0; + [frame nread] = fread(fbit, sum(bits_per_param), "uchar"); + while (nread == bits_per_frame) + + % optionally introduce bit errors + + error_bits = rand(sum(bits_per_param), 1) < ber; + error_bits_masked = bitand(error_bits, bit_error_mask); + frame = bitxor(frame, error_bits_masked); + nerr += sum(error_bits_masked); + nbits += sum(bits_per_param); + + % read a frame, convert to indexes + + nbit = 1; + ind = []; + for i=1:nind + field = frame(nbit:nbit+bits_per_param(i)-1); + nbit += bits_per_param(i); + ind = [ind bits_to_index(field, bits_per_param(i))]; + end + ind_log = [ind_log; ind]; + [frame nread] = fread(fbit, sum(bits_per_param), "uchar"); + endwhile + fclose(fbit); + printf("nerr: %d nbits: %d %f\n", nerr, nbits, nerr/nbits); + + % convert ind_log to modem params + + frames = 4*length(ind_log); + model_ = zeros(frames, max_amp+2); + v = zeros(frames,1); + D1_log = []; + + fdec = 1; + for f=1:4:frames + ind_Wo = ind_log(fdec,1); + + Wo = decode_log_Wo(ind_Wo, 6); + L = floor(pi/Wo); + L = min([L max_amp-1]); + model_(f,1) = Wo; + model_(f,2) = L; + + v1 = ind_log(fdec,2); + if (fdec+1) < length(ind_log) + v5 = ind_log(fdec+1,2); + else + v5 = 0; + end + v(f:f+3) = est_voicing_bits(v1, v5); + + ind_vq = ind_log(fdec,3:5) + 1; + [dk_ D1_] = index_to_params(ind_vq, vq); + D1_log = [D1_log; D1_]; + maskdB_ = params_to_mask(L, k, dk_, D1_); + Am_ = zeros(1,max_amp); + Am_ = 10 .^ (maskdB_(1:L)/20); + model_(f,3:(L+2)) = Am_; + + fdec += 1; + end + + % decoder loop ----------------------------------------------------- + + if train + % short circuit decoder + frames = 0; + end + + % run post filter ahead of time so dec in time has post filtered frames to work with + + for f=1:frames + model_(f,:) = post_filter(model_(f,:)); + end + + for f=1:frames + %printf("frame: %d\n", f); + L = min([model_(f,2) max_amp-1]); + Wo = model_(f,1); + Am_ = model_(f,3:(L+2)); + + maskdB_ = 20*log10(Am_); + + if dec_in_time + % decimate mask samples in time + + [maskdB_ Wo L] = decimate_frame_rate2(model_, decimate, f, frames); + model_(f,1) = Wo; + model_(f,2) = L; + end + + Am_ = zeros(1,max_amp); + Am_(2:L) = 10 .^ (maskdB_(1:L-1)/20); % C array doesnt use A[0] + fwrite(fam, Am_, "float32"); + fwrite(fWo, Wo, "float32"); + + if synth_phase + + % synthesis phase spectra from magnitiude spectra using minimum phase techniques + + fft_enc = 512; + model_(f,3:(L+2)) = 10 .^ (maskdB_(1:L)/20); + phase = determine_phase(model_, f); + assert(length(phase) == fft_enc); + Aw = zeros(1, fft_enc*2); + Aw(1:2:fft_enc*2) = cos(phase); + Aw(2:2:fft_enc*2) = -sin(phase); + fwrite(faw, Aw, "float32"); + end + end + + fclose(fam); + fclose(fWo); + if synth_phase + fclose(faw); + end + + % save voicing file + + v_out_name = sprintf("%s_v.txt", samname); + fv = fopen(v_out_name,"wt"); + for f=1:length(v) + fprintf(fv,"%d\n", v(f)); + end + fclose(fv); + +endfunction + + + +% decimate frame rate of mask, use linear interpolation in the log domain + +function [maskdB_ Wo L] = decimate_frame_rate2(model, decimate, f, frames) + max_amp = 80; + + % determine frames that bracket the one we need to interp + + left_f = decimate*floor((f-1)/decimate)+1; + right_f = left_f + decimate; + if right_f > frames + right_f = left_f; + end + + % determine fraction of each frame to use + + left_fraction = 1 - mod((f-1),decimate)/decimate; + right_fraction = 1 - left_fraction; + + % printf("f: %d left_f: %d right_f: %d left_fraction: %3.2f right_fraction: %3.2f \n", f, left_f, right_f, left_fraction, right_fraction) + + % fit splines to left and right masks + + left_Wo = model(left_f,1); + left_L = min([model(left_f,2) max_amp]); + left_AmdB = 20*log10(model(left_f,3:(left_L+2))); + left_mask_sample_freqs_kHz = (1:left_L)*left_Wo*4/pi; + + right_Wo = model(right_f,1); + right_L = min([model(right_f,2) max_amp]); + right_AmdB = 20*log10(model(right_f,3:(right_L+2))); + right_mask_sample_freqs_kHz = (1:right_L)*right_Wo*4/pi; + + % printf(" right_Wo: %f left_Wo: %f right_L: %d left_L %d\n",right_Wo,left_Wo,right_L,left_L); + printf("%f %f\n", left_AmdB(left_L), right_AmdB(right_L)); + + maskdB_left_pp = splinefit(left_mask_sample_freqs_kHz, left_AmdB, left_L); + maskdB_right_pp = splinefit(right_mask_sample_freqs_kHz, right_AmdB, right_L); + + % determine mask for left and right frames, sampling at Wo for this frame + + Wo = left_fraction*left_Wo + right_fraction*right_Wo; + L = floor(pi/Wo); + %Wo = model(f,1); L = model(f,2); + + mask_sample_freqs_kHz = (1:L)*Wo*4/pi; + maskdB_left = ppval(maskdB_left_pp, mask_sample_freqs_kHz); + maskdB_right = ppval(maskdB_right_pp, mask_sample_freqs_kHz); + + maskdB_ = left_fraction*maskdB_left + right_fraction*maskdB_right; +endfunction + +#{ +function amodel = post_filter(amodel) + max_amp = 80; + + % post filter + + L = min([amodel(2) max_amp-1]); + Wo = amodel(1); + Am_ = amodel(3:(L+2)); + AmdB_ = 20*log10(Am_); + AmdB_pf = AmdB_*1.5; + AmdB_pf += max(AmdB_) - max(AmdB_pf); + amodel(3:(L+2)) = 10 .^ (AmdB_pf(1:L)/20); +endfunction +#} + + +% Given a matrix with indexes on each row, convert to a bit stream and +% write to file. We only write every 4th frame due to DIT + +function write_bit_stream_file(fn, ind_log, bits_per_param) + fbit = fopen(fn,"wb"); + decimate = 4; + + % take a row of quantiser indexes, convert to bits, save to file + + [frames nind] = size(ind_log); + for f=1:decimate:frames + frame_of_bits = []; + arow = ind_log(f,:); + for i=1:nind + %printf("i: %d bits_per_param: %d\n", i, bits_per_param(i)); + some_bits = index_to_bits(arow(i), bits_per_param(i)); + frame_of_bits = [frame_of_bits some_bits]; + end + fwrite(fbit, frame_of_bits, "uchar"); + end + fclose(fbit); +endfunction + + + +% determine 4 voicing bits based on 2 decimated voicing bits + +function [v] = est_voicing_bits(v1, v5) + if v1 == v5 + v(1:4) = v1; + else + v(1:2) = v1; + v(3:4) = v5; + end +endfunction + + +function [AmdB_ residual fvec fvec_ amps] = piecewise_model(AmdB, Wo, vq, vq_m) + L = length(AmdB); + l1000 = floor(L/4); + AmdB_ = ones(1,L); + mask_sample_freqs_kHz = (1:L)*Wo*4/pi; + + % fit a resonator to max of first 300 - 1000 Hz + + fmin = 0.150; + lmin = floor(L*fmin/4); + [mx mx_ind] = max(AmdB(lmin+1:l1000)); + amp(1) = mx; + mx_ind += lmin; + AmdB_ = parabolic_resonator(mx_ind*Wo*4/pi, mask_sample_freqs_kHz) + mx; + fr1 = mx_ind*Wo*4/pi; + + % fit a 2nd resonator, must be above 1000Hz + + fmin = 1; + lmin = round(fmin*L/4); + + [mx mx_ind] = max(AmdB(lmin+1:L)); + amp(2) = mx; + mx_ind += lmin; + AmdB_ = max(AmdB_, parabolic_resonator(mx_ind*Wo*4/pi, mask_sample_freqs_kHz) + mx); + fr2 = mx_ind*Wo*4/pi; + + % fit a third resonator, must be +/- 300 Hz after 2nd resonator + + residual = AmdB - AmdB_; + keep_out = [1:lmin]; + lmax = round(L*3500/4000); + keep_out = [1:lmin lmax:L]; + residual(keep_out) = -40; + + fr2 = mx_ind*Wo*4/pi; + fmin = fr2 - 0.300; + fmax = fr2 + 0.300; + lmin = max(1, round(L*fmin/4)); + lmax = min(L, round(L*fmax/4)); + keep_out = [keep_out lmin:lmax]; + + residual = AmdB; + residual(keep_out) = -40; + + if 0 + figure(3); clf; + subplot(211) + plot(mask_sample_freqs_kHz, residual); + end + + [mx mx_ind] = max(residual); + amp(3) = AmdB(mx_ind); + AmdB_ = max(AmdB_, parabolic_resonator(mx_ind*Wo*4/pi, mask_sample_freqs_kHz) + amp(3)); + fr3 = mx_ind*Wo*4/pi; + + % 4th resonator + + fmin = fr3 - 0.300; + fmax = fr3 + 0.300; + + lmin = max(1, round(L*fmin/4)); + lmax = min(L, round(L*fmax/4)); + keep_out = [keep_out lmin:lmax]; + + residual = AmdB - AmdB_; + residual(keep_out) = -40; + + [mx mx_ind] = max(residual); + amp(4) = AmdB(mx_ind); + AmdB_ = max(AmdB_, parabolic_resonator(mx_ind*Wo*4/pi, mask_sample_freqs_kHz) + amp(4)); + fr4 = mx_ind*Wo*4/pi; + + if 0 + subplot(212) + plot(mask_sample_freqs_kHz, residual); + end + + printf("\nfr1: %f fr2: %f fr3: %f fr4: %f\n", fr1, fr2, fr3, fr4); + [fvec fvec_ind] = sort([fr1 fr2 fr3 fr4]); + amps = amp(fvec_ind(1:4)); + + fvec_ = zeros(1, 4); + + #{ + % optional VQ of frequencies + + if nargin == 4 + AmdB_ = ones(1,L); + [mes fvec_ ind] = mbest(vq, fvec, vq_m); + for i=1:4 + an_amp = amp(fvec_ind(i)); + AmdB_ = max(AmdB_, parabolic_resonator(fvec_(i), mask_sample_freqs_kHz) + an_amp); + end + end + #} + + % optional VQ of amplitudes + + if nargin == 4 + AmdB_ = ones(1,L); + %amps_(1) = amps(1); + %[mes tmp ind] = mbest(vq, amps(2:4) - amps_(1), vq_m); + %amps_(2:4) = amps_(1) + tmp; + [mes amps_ ind] = mbest(vq, amps, vq_m); + amps-amps_ + for i=1:4 + AmdB_ = max(AmdB_, parabolic_resonator(fvec(i), mask_sample_freqs_kHz) + amps_(i)); + end + end + + %amps = amps(2:4) - amps(1); +endfunction + + +% find best place for resonator by closed loop min MSE search + +function lmin = abys(AmdB_, AmdB, Wo, L, mask_sample_freqs_kHz) + lstart = round(L/4); + lmin = lstart; + emin = 1E6; + + printf("lstart: %d L: %d\n", lstart, L); + + figure(3); + subplot(211) + plot(mask_sample_freqs_kHz*1000, AmdB,'r+-'); + + e = zeros(1,L); + for l=lstart:L + + % calc mse + + f_l = l*Wo*4/pi; + AmdB_l = max(AmdB_, parabolic_resonator(f_l, mask_sample_freqs_kHz) + AmdB(l)); + hold on; + if l == 23 + plot(mask_sample_freqs_kHz*1000, AmdB_l,'c'); + end + hold off; + e(l) = sum((AmdB_l - AmdB) .^ 2); + %printf("l: %5d f_l: %4.3f e: %4.0f emin: %4.0f lmin: %5d\n", l, f_l, emin, lmin); + printf("l: %5d f_l: %4.3f e: %4.0f emin: %4.0f lmin: %5d\n", l, f_l, e(l), emin, lmin); + if e(l) < emin + emin = e(l); + lmin = l; + end + end + + subplot(212) + plot(mask_sample_freqs_kHz*1000, e) +endfunction + + +function rate_K_surface_no_slope = remove_slope(rate_K_surface) + [frames K] = size(rate_K_surface); + rate_K_surface_no_slope = zeros(frames,K); + for f=1:frames + [gradient intercept] = linreg(1:K, rate_K_surface(f,:), K); + printf("f: %d gradient: %f intercept: %f\n", f, gradient, intercept); + rate_K_surface_no_slope(f,:) = rate_K_surface(f,:) - (intercept + gradient*(1:K)); + end +endfunction diff --git a/libcodec2-android/src/codec2/octave/newamp1_batch.m b/libcodec2-android/src/codec2/octave/newamp1_batch.m new file mode 100644 index 0000000..90e24a6 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/newamp1_batch.m @@ -0,0 +1,1821 @@ +% newamp1_batch.m +% +% Copyright David Rowe 2016 +% This program is distributed under the terms of the GNU General Public License +% Version 2 + +#{ + + Octave script to batch process model parameters using the new + amplitude model, version 1. Outputs another set of model parameters + that can be fed to c2sim for listening tests. The companion + newamp1_fbf.m script is used to visualise the processing frame by frame + + c2sim -> dump files -> newamp1_batch.m -> output model params -> c2sim -> play + + The newamp1_xxx scripts have evolved to (i) resample {Am} using a + mel frequency axis, (ii) 2 stage VQ the mean removed vector. Seems to work + OK at 700 bit/s, comparable to 1300. + + Usage: + + build codec2 with -DDUMP - see codec2-dev/README, then: + + ~/codec2-dev/build_linux/src$ ./c2sim ../../raw/hts1a.raw --dump hts1a + $ cd ~/codec2-dev/octave + octave:14> newamp1_batch("../build_linux/src/hts1a") + ~/codec2-dev/build_linux/src$ ./c2sim ../../raw/hts1a.raw --amread hts1a_am.out -o - | play -t raw -r 8000 -s -2 - + + Or with a little more processing, first dump energy and voicing, the + import Wo, voicing, phase spectra which simulates all the decoder + DSP. We switch on lpc 10 just to dump voicing. + + $ ./c2sim ../../raw/vk5qi.raw --phase0 --postfilter --dump vk5qi --lpc 10 --dump_pitch_e vk5qi_pitche.txt + octave:14> newamp1_batch("../build_linux/src/vk5qi", "../build_linux/src/vk5qi.out"); + $ ./c2sim ../../raw/vk5qi.raw --phase0 --postfilter --amread vk5qi_am.out --hmread vk5qi_hm.out --Woread vk5qi_Wo.out --hand_voicing vk5qi_v.txt -o - | play -q -t raw -r 8000 -s -2 - + +#} + + +% In general, this function processes a bunch of amplitudes, we then +% use c2sim to hear the results. Bunch of different experiments below + +function [surface_no_mean surface] = newamp1_batch(input_prefix, varargin) + newamp; + more off; + + max_amp = 160; + mean_f = []; + + % defaults + + synth_phase = output = 1; + output_prefix = input_prefix; + vq_type = ""; + vq_filename = ""; + vq_search = "mse"; + mode = "const"; + fit_order = 0; + mean_remove = 1; + + % parse variable argument list + + if (length (varargin) > 0) + + % check for the "output_prefix" option + + ind = arg_exists(varargin, "output_prefix"); + if ind + output_prefix = varargin{ind+1}; + end + ind = arg_exists(varargin, "mode"); + if ind + mode = varargin{ind+1}; + end + + ind = arg_exists(varargin, "no_output"); + if ind + output = 0; + synth_phase = 0; + end + end + + printf("output: %d\n", output); + if (output) + printf("output_prefix: %s\n", output_prefix); + end + + model_name = strcat(input_prefix,"_model.txt"); + model = load(model_name); + [frames nc] = size(model); + + voicing_name = strcat(input_prefix,"_pitche.txt"); + voicing = zeros(1,frames); + + if exist(voicing_name, "file") == 2 + pitche = load(voicing_name); + voicing = pitche(:, 3); + end + + % Choose experiment to run test here ----------------------- + + if strcmp(mode, 'dct2') + [model_ surface] = experiment_rate_K_dct2(model, 0, 1, voicing); + end + if strcmp(mode, 'mel') + [model_ surface sd_log] = experiment_mel_freq(model, 0, 1, voicing); + + end + if strcmp(mode, 'const') + [model_ surface b_log] = experiment_const_freq(model, varargin{:}); + ind = arg_exists(varargin, "vq_search"); + if ind + if strcmp(varargin{ind+1},"para") || strcmp(varargin{ind+1},"cubic") || strcmp(varargin{ind+1},"sg") + fn = sprintf("%s_b_log.txt", output_prefix); + save(fn,"b_log"); + end + end + end + if strcmp(mode, 'pred') + [model_ surface b_log] = experiment_const_freq_pred(model, varargin{:}); + mean_remove = 0; + end + if strcmp(mode, 'piecewise') + model_ = experiment_piecewise(model); + end + if strcmp(mode, 'dct') + model_ = experiment_dct(model); + end + + % ---------------------------------------------------- + + if output + Am_out_name = sprintf("%s_am.out", output_prefix); + fam = fopen(Am_out_name,"wb"); + + Wo_out_name = sprintf("%s_Wo.out", output_prefix); + fWo = fopen(Wo_out_name,"wb"); + + if synth_phase + Hm_out_name = sprintf("%s_hm.out", output_prefix); + fhm = fopen(Hm_out_name,"wb"); + end + + for f=1:frames + %printf("%d ", f); + Wo = model_(f,1); L = min([model_(f,2) max_amp-1]); Am = model_(f,3:(L+2)); + if Wo*L > pi + printf("Problem: %d Wo*L > pi\n", f); + end + + Am_ = zeros(1,max_amp); Am_(2:L) = Am(1:L-1); fwrite(fam, Am_, "float32"); + fwrite(fWo, Wo, "float32"); + + if synth_phase + + % synthesis phase spectra from magnitiude spectra using minimum phase techniques + + fft_enc = 512; + phase = determine_phase(model_, f, fft_enc); + assert(length(phase) == fft_enc); + + % sample phase at centre of each harmonic, not 1st entry Hm(1:2) in octave Hm[0] in C + % is not used + + Hm = zeros(1, 2*max_amp); + for m=1:L + b = round(m*Wo*fft_enc/(2*pi)); + Hm(2*m+1) = cos(phase(b)); + Hm(2*m+2) = sin(phase(b)); + end + fwrite(fhm, Hm, "float32"); + end + end + + fclose(fam); + fclose(fWo); + if synth_phase + fclose(fhm); + end + + % save voicing file + + if exist("voicing_", "var") + v_out_name = sprintf("%s_v.txt", output_prefix); + fv = fopen(v_out_name,"wt"); + for f=1:length(voicing_) + fprintf(fv,"%d\n", voicing_(f)); + end + fclose(fv); + end + end + + if mean_remove + for f=1:frames + surface_no_mean(f,:) = surface(f,:) - mean(surface(f,:)); + end + else + surface_no_mean = surface; + end + + printf("\n") + +endfunction + + +function surface = slope_and_mean_removal(surface) + [frames K] = size(surface); + for f=1:frames + v = surface(f,:); + [m b] = linreg(1:K, v, K); + v -= m*(1:K) + b; + surface(f,:) = v; + end +endfunction + + +function ind = arg_exists(v, str) + ind = 0; + for i=1:length(v) + if !ind && strcmp(v{i}, str) + ind = i; + end + end +endfunction + + +% Basic unquantised rate K linear sampling then back to rate L. Used for generating +% training vectors and testing vector quntisers. + +function [model_ rate_K_surface b_log] = experiment_const_freq(model, varargin) + melvq; + [frames nc] = size(model); + Fs = 8000; + fg = 1; + mask_en = 0; + vq_search = "gain"; % default to gain search method as it's our favourite atm + nvq = 0; % number of vector quantisers + vq_start = []; + quant_en = 0; + b_log = []; + decimate = 0; decimate_var = 0; + + rate_K_sample_freqs_kHz = [0.1:0.1:4]; + K = length(rate_K_sample_freqs_kHz); + + % parse command line options + + % specify one of more vqs, start index, vq file name, and search method + + ind = anind = arg_exists(varargin, "vq"); + while anind + nvq++; + vq_start = [vq_start varargin{ind+1}]; + avq_filename = varargin{ind+2}; + if nvq < 2; vq_filename = avq_filename; else; vq_filename = [vq_filename; avq_filename]; end; + avq_search = varargin{ind+3}; + if nvq < 2; vq_search = avq_search; else; vq_search = [vq_search; avq_search]; end; + printf("nvq %d vq_start: %d vq_filename: %s vq_search: %s\n", nvq, vq_start(nvq), avq_filename, avq_search); + anind = arg_exists(varargin(ind+1:length(varargin)), "vq"); + if anind + ind += anind; + end + end + + ind = arg_exists(varargin, "vq_gain"); + if ind + avq_filename = varargin{ind+1}; + x = load(avq_filename); vq_gain = x.vq; + quant_en = 1 + end + + quant_en = arg_exists(varargin, "quant"); + + ind = arg_exists(varargin, "decimate"); + if ind + decimate = varargin{ind+1}; + end + + % read in optional vector that defines sampling points for + % decimation, each entry is the frame number of a sample e.g. + % [1 8 10 12 .... + + ind = arg_exists(varargin, "decsamfile"); + if ind + dec_filename = varargin{ind+1}; + decvec = load(dec_filename); Ndv = length(decvec); + decimate_var = 1; + end + + % OK start processing ............................................ + + energy = zeros(1,frames); + for f=1:frames + L = model(f,2); + energy(f) = 10*log10(sum( model(f,3:(L+2)) .^ 2 )); + end + + rate_K_surface = resample_const_rate_f(model, rate_K_sample_freqs_kHz, Fs); + + #{ + % optional target modification using masking - this didn't help VQ + + if mask_en + for f=1:frames + rate_K_vec = rate_K_surface(f,:); + maskdB = determine_mask(rate_K_vec, rate_K_sample_freqs_kHz, rate_K_sample_freqs_kHz, bark_model=1); + target = rate_K_vec; + mask_thresh = 6; + ind = find (maskdB - target > mask_thresh); + target(ind) = maskdB(ind) - mask_thresh; + rate_K_surface(f,:) = target; + end + end + #} + + % remove mean ie global "gain" term + + rate_K_surface_no_mean = zeros(frames,K); + meanf = zeros(1,frames); + for f=1:frames + meanf(f) = mean(rate_K_surface(f,:)); + rate_K_surface_no_mean(f,:) = rate_K_surface(f,:) - meanf(f); + end + + % optional vector quantise + + if nvq + + % note we init with target (ideal) to fill in values not covered by this VQ + + rate_K_surface_no_mean_ = rate_K_surface_no_mean; + res = zeros(frames, K); ind = zeros(frames, nvq); + + gains = zeros(frames, nvq); + + % quantise using split VQs + + for i=1:nvq + avq_filename = char(cellstr(vq_filename)(i)); + avq_search = char(cellstr(vq_search)(i)); + x = load(avq_filename); vq = x.vq; [vq_rows vq_cols] = size(vq); + vq_st = vq_start(i); vq_en = vq_st + vq_cols - 1; + printf("split VQ: %d vq_filename: %s vq_search: %s vq_st: %d vq_en: %d nVec: %d\n", i, avq_filename, avq_search, vq_st, vq_en, vq_rows); + + if strcmp(avq_search, "mse") + [idx contrib errors test_ g mg sl] = vq_search_mse(vq, rate_K_surface_no_mean(:,vq_st:vq_en)); + end + + if strcmp(avq_search, "gain") + [idx contrib errors b_log] = vq_search_gain(vq, rate_K_surface_no_mean(:,vq_st:vq_en), weights); + end + + if strcmp(avq_search, "max") + [idx contrib errors b_log] = vq_search_max(vq, rate_K_surface_no_mean(:,vq_st:vq_en), weights); + end + + if strcmp(avq_search, "mg") + [idx contrib errors b_log] = vq_search_mg(vq, rate_K_surface_no_mean(:,vq_st:vq_en)); + gains(:, i) = b_log(:, 2); + end + + if strcmp(avq_search, "sg") + [idx contrib errors b_log] = vq_search_sg(vq, rate_K_surface_no_mean(:,vq_st:vq_en)); + b_log = [b_log energy' idx']; + end + + if strcmp(avq_search, "slope") + [idx contrib errors b_log] = vq_search_slope(vq, rate_K_surface_no_mean(:,vq_st:vq_en), + "closed_quant_slope", "open_quant_slope"); + b_log = [b_log energy' idx']; + gains(:, i) = b_log(:, 3); + end + + if strcmp(avq_search, "para") + [idx contrib errors b_log] = vq_search_para(vq, rate_K_surface_no_mean(:,vq_st:vq_en)); + b_log = [b_log energy' idx']; + + if quant_en + k = 1:vq_cols; k2 = k.^2; +#{ + [nr nc] = size(vq_gain); + for f=1:frames + v = vq(idx(f),:); + b = b_log(f,:); + + para_target = k2*b(2) + k*b(3) + b(4); + + % search vq_gain for best match to gain coefficients + + d = g = zeros(nr,1); + for r=1:nr + g(r) = (sum(para_target) - sum(vq_gain(r,:)))/vq_cols; + diff = para_target - (vq_gain(r,:) + g(r)); + d(r) = diff*diff'; + end + [dmin imin] = min(d); + + % recalc contrib + + printf("f: %d imin: %d g: %f\n", f, imin, g(imin)); + contrib(f,:) = b(1)*vq(idx(f),:) + vq_gain(imin,:) + g(imin); +#} + for f=1:frames + target = rate_K_surface_no_mean(f,vq_st:vq_en); + b = b_log(f,:); + para_target = k2*b(2) + k*b(3) + b(4); + para_target(1) = quantise([-20 -10 0 10], para_target(1)); + para_target(10) = quantise([-3 +3], para_target(10)); + b_ = polyfit([k(1) k(10) k(25)], + [para_target(1) para_target(10) -10], + 2); + v = vq(idx(f),:); + contrib(f,:) = b(1)*v + b_(1)*k2 + b_(2)*k + b_(3); + printf("f: %d pt1: %f pt10: %f b_(1): %f b_(2): %f b_(3): %f \n", f, para_target(1), para_target(10), b_(1), b_(2), b_(3)); + end + end + end + + if strcmp(avq_search, "cubic") + [idx contrib errors b_log] = vq_search_cubic(rate_K_surface_no_mean(:,vq_st:vq_en)); + b_log = [b_log energy' idx']; + end + + rate_K_surface_no_mean_(:, vq_st:vq_en) = contrib; + res(:, vq_st:vq_en) = rate_K_surface_no_mean(:, vq_st:vq_en) - contrib; + ind(:,i) = idx; + + % histograms of higher order gain/shape params + + if strcmp(avq_search, "gain") + figure(fg++); clf; hist(b_log, 30); title('gain') + end + + if strcmp(avq_search, "mg") + figure(fg++); clf; hist(b_log(:,1),30); title('mag') + end + + if strcmp(avq_search, "slope") + + hmg = hsl = zeros(1,frames); + for f=1:frames + hmg(f) = b_log(f, 1); + hsl(f) = b_log(f, 2); + end + figure(fg++); clf; hist(hmg, 30); title('mag') + figure(fg++); clf; hist(hsl, 30); title('slope') + end + + sd_per_frame = std(res(:,vq_st:vq_en)'); + t=sprintf("VQ %d", i); + figure(fg++); subplot(211); plot(energy); title(t); subplot(212); plot(sd_per_frame); + figure(fg++); subplot(211); hist(sd_per_frame); title(t); subplot(212); hist(ind(:,i),100); + printf("VQ rms SD: %3.2f\n", mean(sd_per_frame)); + end + + figure(fg++); clf; mesh(res); + + else + rate_K_surface_no_mean_ = rate_K_surface_no_mean; + end + + for f=1:frames + rate_K_surface_(f,:) = rate_K_surface_no_mean_(f,:) + meanf(f); + end + + % optional decimation + + if decimate + %lf = [1.00 0.75 0.50 0.25]; + %lf = [1.00 1.00 0.50 0.00]; + %lf = [1.00 1.00 0.00 0.00]; + lf = [1.00 0.80 0.20 0.00]; + + for f=1:frames + + % determine frames that bracket the one we need to interp + + left_f = decimate*floor((f-1)/decimate)+1; + right_f = left_f + decimate; + if right_f > frames + right_f = left_f; + end + + % determine fraction of each frame to use + + left_fraction = lf(mod(f-1,decimate)+1); + right_fraction = 1 - left_fraction; + + rate_K_surface_(f,:) = left_fraction*rate_K_surface_(left_f,:) + right_fraction*rate_K_surface_(right_f,:); + printf("f: %d left_f: %d right_f: %d left_fraction: %3.2f right_fraction: %3.2f \n", f, left_f, right_f, left_fraction, right_fraction) + end + end + + if decimate_var + %decvec = 1:4:frames; + d = 1; Ndv = length(decvec); right_f = 1; + for f=1:frames + + % determine frames that bracket the one we need to interp + + if f == decvec(d) + left_f = right_f; + if d < Ndv + d++; + right_f = decvec(d); + decimate = decvec(d) - decvec(d-1); + end + end + + % determine fraction of each frame to use + + left_fraction = 1 - (f - left_f)/decimate; + right_fraction = 1 - left_fraction; + + rate_K_surface_(f,:) = left_fraction*rate_K_surface_(left_f,:) + right_fraction*rate_K_surface_(right_f,:); + printf("f: %d dec: %d lf: %d rf: %d lfrac: %3.2f rfrac: %3.2f \n", f, decimate, left_f, right_f, left_fraction, right_fraction) + end + end + + [model_ AmdB_] = resample_rate_L(model, rate_K_surface_, rate_K_sample_freqs_kHz, Fs); + + % Measure distortion between AmdB and AmdB_, ths includes distortion + % in the rate K <-> L transition. Can optionally plot distorted + % frames + + plot_sd_thresh = 5; + sd = zeros(1,frames); + for f=1:frames + Wo = model(f,1); + L = model(f,2); + AmdB = 20*log10(model(f,3:(L+2))); + sd(f) = std(AmdB(1:L) - AmdB_(f,1:L)); + if (sd(f) > plot_sd_thresh) && (fg < 10) + printf("fg: %d f: %d\n", fg, f); + figure(fg++); clf; plot((1:L)*Wo*4/pi, AmdB(1:L),'b+-'); hold on; plot((1:L)*Wo*4/pi, AmdB_(f,1:L),'r+-'); + plot(rate_K_sample_freqs_kHz, rate_K_surface_(f,:), 'c+-'); hold off; + end + end + printf("rate K resampling SD: %3.2f\n", mean(sd)); + figure(fg++); clf; subplot(211); plot(energy); subplot(212); plot(sd); title('sdL'); + figure(fg++); clf; hist(sd); + + %figure(fg++); clf; plot(gains); + %figure(fg++); clf; plot(gains(:,1), gains(:,2), '+'); +endfunction + +function model_ = experiment_dct(model) + + [frames tmp] = size(model); max_amp = 160; + + for f=1:frames + printf("%d ", f); + Wo = model(f,1); + L = min([model(f,2) max_amp-1]); + Am = model(f,3:(L+2)); + AmdB = 20*log10(Am); + + % fit model + + D = dct(AmdB); + E = zeros(1,L); + E(1:min(20,L)) = D(1:min(20,L)); + AmdB_ = idct(D); + + model_(f,1) = Wo; model_(f,2) = L; model_(f,3:(L+2)) = 10 .^ (AmdB_(1:L)/20); + end + +endfunction + + +% Predictive VQ using rate K resampled vectors, and rate 2 decimation + +function [model_ rate_K_surface_pred_ b_log] = experiment_const_freq_pred(model, varargin) + melvq; + [frames nc] = size(model); + Fs = 8000; + fg = 1; + nvq = 0; % number of vector quantisers + vq_start = []; + quant_en = 0; + b_log = []; + decimate = 2; + frames2 = floor(frames/decimate); + + rate_K_sample_freqs_kHz = [0.1:0.1:4]; + K = length(rate_K_sample_freqs_kHz); + + % parse command line options + + % set vq search algorithm, e.g. mse, gain, mag, slope. We've settled on "gain" for now + % as slope required extra bits to quantise higher order parameters that offset advantages + + ind = arg_exists(varargin, "vq_search"); + if ind + vq_search = varargin{ind+1}; + end + + % specify one of more VQs + + ind = anind = arg_exists(varargin, "vq"); + while anind + nvq++; + vq_start = [vq_start varargin{ind+1}]; + avq_filename = varargin{ind+2}; + if nvq < 2 + vq_filename = avq_filename; + else + vq_filename = [vq_filename; avq_filename]; + end + printf("nvq %d vq_start: %d vq_filename: %s\n", nvq, vq_start(nvq), avq_filename); + anind = arg_exists(varargin(ind+1:length(varargin)), "vq"); + if anind + ind += anind; + end + end + + ind = arg_exists(varargin, "vq_gain"); + if ind + avq_filename = varargin{ind+1}; + x = load(avq_filename); vq_gain = x.vq; + quant_en = 1 + end + + ind = arg_exists(varargin, "decimate"); + if ind + decimate = varargin{ind+1}; + end + + % OK start processing ............................................ + + energy = zeros(1,frames/decimate); + for f=1:decimate:frames + L = model(f,2); + energy(f) = 10*log10(sum( model(f,3:(L+2)) .^ 2 )); + end + + rate_K_surface = resample_const_rate_f(model, rate_K_sample_freqs_kHz, Fs); + + % decimate and predict + + rate_K_surface_pred = zeros(frames2, K); + beta = 0.9; + g = 1; + for f=3:decimate:frames + rate_K_surface_pred(g,:) = rate_K_surface(f,:) - beta*rate_K_surface(f-2,:); + g++; + end + + rate_K_surface_ = zeros(frames,K); + rate_K_surface_(1,:) = rate_K_surface(1,:); + g = 1; + + % optional vector quantise + + if nvq + + % note we init with target (ideal) to fill in values not covered by this VQ + + rate_K_surface_pred_ = rate_K_surface_pred; + res = zeros(frames2, K); ind = zeros(frames2, nvq); + + % quantise using split VQs + + for i=1:nvq + avq_filename = char(cellstr(vq_filename)(i)); + x = load(avq_filename); vq = x.vq; [vq_rows vq_cols] = size(vq); + vq_st = vq_start(i); vq_en = vq_st + vq_cols - 1; + printf("split VQ: %d vq_filename: %s vq_st: %d vq_en: %d nVec: %d\n", i, avq_filename, vq_st, vq_en, vq_rows); + + for f=3:decimate:frames + rate_K_vec_pred = rate_K_surface(f,:) - beta*rate_K_surface_(f-2,:); + + if strcmp(vq_search, "mg") + [idx contrib errors b_log] = vq_search_mg(vq, rate_K_vec_pred(vq_st:vq_en)); + end + + rate_K_vec_pred_ = rate_K_vec_pred; + rate_K_vec_pred_(vq_st:vq_en) = contrib; + rate_K_surface_(f,:) = beta*rate_K_surface_(f-2,:) + rate_K_vec_pred_; + + res(:, vq_st:vq_en) = rate_K_surface_pred(:, vq_st:vq_en) - contrib; + ind(:,i) = idx; + end + + % histograms of higher order gain/shape params if we are in slope mode + + sd_per_frame = std(res(:,vq_st:vq_en)'); + t=sprintf("VQ %d", i); + figure(fg++); subplot(211); plot(energy); title(t); subplot(212); plot(sd_per_frame); + figure(fg++); subplot(211); hist(sd_per_frame); title(t); subplot(212); hist(ind(:,i),100); + printf("VQ rms SD: %3.2f\n", mean(sd_per_frame)); + end + + figure(fg++); clf; mesh(res); + + else + rate_K_surface_pred_ = rate_K_surface_pred; + for f=3:decimate:frames + rate_K_surface_(f,:) = beta*rate_K_surface_(f-2,:) + rate_K_surface_pred_(g,:); + g++; + end + end + + % re-interpolate back to 10ms rate + + if decimate + for f=1:frames + + % determine frames that bracket the one we need to interp + + left_f = decimate*floor((f-1)/decimate)+1; + right_f = left_f + decimate; + if right_f > frames + right_f = left_f; + end + + % determine fraction of each frame to use + + left_fraction = 1 - mod((f-1),decimate)/decimate; + right_fraction = 1 - left_fraction; + + rate_K_surface_(f,:) = left_fraction*rate_K_surface_(left_f,:) + right_fraction*rate_K_surface_(right_f,:); + %printf("f: %d left_f: %d right_f: %d left_fraction: %3.2f right_fraction: %3.2f \n", f, left_f, right_f, left_fraction, right_fraction) + end + end + + [model_ AmdB_] = resample_rate_L(model, rate_K_surface_, rate_K_sample_freqs_kHz, Fs); + + % Measure distortion between AmdB and AmdB_, ths includes distortion + % in the rate K <-> L transition. Can optionally plot distorted + % frames + + plot_sd_thresh = 5; + sd = zeros(1,frames2); g = 1; + for f=1:decimate:frames + Wo = model(f,1); + L = model(f,2); + AmdB = 20*log10(model(f,3:(L+2))); + sd(g) = std(AmdB(1:L) - AmdB_(f,1:L)); + if (sd(g) > plot_sd_thresh) && (fg < 10) + printf("fg: %d f: %d\n", fg, f); + figure(fg++); clf; plot((1:L)*Wo*4/pi, AmdB(1:L),'b+-'); hold on; plot((1:L)*Wo*4/pi, AmdB_(f,1:L),'r+-'); + plot(rate_K_sample_freqs_kHz, rate_K_surface_(f,:), 'c+-'); hold off; + end + g++; + end + printf("rate K resampling SD: %3.2f\n", mean(sd)); + figure(fg++); clf; subplot(211); plot(energy); subplot(212); plot(sd); title('sdL'); + figure(fg++); clf; hist(sd); + +endfunction + + +function model_ = experiment_dct(model) + + [frames tmp] = size(model); max_amp = 160; + + for f=1:frames + printf("%d ", f); + Wo = model(f,1); + L = min([model(f,2) max_amp-1]); + Am = model(f,3:(L+2)); + AmdB = 20*log10(Am); + + % fit model + + D = dct(AmdB); + E = zeros(1,L); + E(1:min(20,L)) = D(1:min(20,L)); + AmdB_ = idct(D); + + model_(f,1) = Wo; model_(f,2) = L; model_(f,3:(L+2)) = 10 .^ (AmdB_(1:L)/20); + end + +endfunction + + +% ----------------------------------------------------------------------------------------- +% Linear decimator/interpolator that operates at rate K, includes VQ, post filter, and Wo/E +% quantisation. Evolved from abys decimator below. Simulates the entire encoder/decoder. + +function [model_ voicing_ indexes] = experiment_rate_K_dec(model, voicing) + max_amp = 80; + [frames nc] = size(model); + model_ = zeros(frames, max_amp+3); + indexes = zeros(frames,4); + + M = 4; + + % create frames x K surface. TODO make all of this operate frame by + % frame, or at least M/2=4 frames rather than one big chunk + + K = 20; + [surface sample_freqs_kHz] = resample_const_rate_f_mel(model, K); + target_surface = surface; + + figure(1); + mesh(surface); + + % VQ rate K surface. TODO: If we are decimating by M/2=4 we really + % only need to do this every 4th frame. + + melvq; + load train_120_vq; m=5; + + for f=1:frames + mean_f(f) = mean(surface(f,:)); + surface_no_mean(f,:) = surface(f,:) - mean_f(f); + end + figure(2); + mesh(surface_no_mean); + + [res surface_no_mean_ ind] = mbest(train_120_vq, surface_no_mean, m); + indexes(:,1:2) = ind; + + for f=1:frames + surface_no_mean_(f,:) = post_filter(surface_no_mean_(f,:), sample_freqs_kHz, 1.5); + end + figure(3); + mesh(surface_no_mean_); + + surface_ = zeros(frames, K); + energy_q = create_energy_q; + for f=1:frames + [mean_f_ indx] = quantise(energy_q, mean_f(f)); + indexes(f,3) = indx - 1; + %mean_f_ = mean_f(f); + surface_(f,:) = surface_no_mean_(f,:) + mean_f_; + end + + figure(); + mesh(surface_); + + % break into segments of M frames. We have 3 samples in M frame + % segment spaced M/2 apart and interpolate the rest. This evolved + % from AbyS scheme below but could be simplified to simple linear + % interpolation, or using 3 or 4 points but shift of M/2=4 frames. + + interpolated_surface_ = zeros(frames, K); + for f=1:M:frames-M + left_vec = surface_(f,:); + right_vec = surface_(f+M,:); + sample_points = [f f+M]; + resample_points = f:f+M-1; + for k=1:K + interpolated_surface_(resample_points,k) = interp_linear(sample_points, [left_vec(k) right_vec(k)], resample_points); + end + end + + % break into segments for purposes of Wo interpolation + + for f=1:M:frames + % quantise Wo + + % UV/V flag is coded using a zero index for Wo, this means we need to + % adjust Wo index slightly for the lowest Wo V frames + + if voicing(f) + index = encode_log_Wo(model(f,1), 6); + if index == 0 + index = 1; + end + indexes(f,4) = index; + model_(f,1) = decode_log_Wo(indexes(f,4), 6); + else + indexes(f,4) = 0; + model_(f,1) = 2*pi/100; + end + end + + + voicing_ = zeros(1, frames); + for f=1:M:frames-M + + Wo1_ = model_(f,1); + Wo2_ = model_(f+M,1); + + % uncomment to use unquantised values + %Wo1_ = model(f,1); + %Wo2_ = model(f+M,1); + + if !voicing(f) && !voicing(f+M) + model_(f:f+M-1,1) = 2*pi/100; + end + + if voicing(f) && !voicing(f+M) + model_(f:f+M/2-1,1) = Wo1_; + model_(f+M/2:f+M-1,1) = 2*pi/100; + voicing_(f:f+M/2-1) = 1; + end + + if !voicing(f) && voicing(f+M) + model_(f:f+M/2-1,1) = 2*pi/100; + model_(f+M/2:f+M-1,1) = Wo2_; + voicing_(f+M/2:f+M-1) = 1; + end + + if voicing(f) && voicing(f+M) + Wo_samples = [Wo1_ Wo2_]; + model_(f:f+M-1,1) = interp1([f f+M], Wo_samples, f:f+M-1, "linear", 0); + voicing_(f:f+M-1) = 1; + end + + #{ + printf("f: %d f+M/2: %d Wo: %f %f (%f %%) v: %d %d \n", f, f+M/2, model(f,1), model(f+M/2,1), 100*abs(model(f,1) - model(f+M/2,1))/model(f,1), voicing(f), voicing(f+M/2)); + for i=f:f+M/2-1 + printf(" f: %d v: %d v_: %d Wo: %f Wo_: %f\n", i, voicing(i), voicing_(i), model(i,1), model_(i,1)); + end + #} + end + model_(frames-M:frames,1) = pi/100; % set end frames to something sensible + + % enable these to use original (non interpolated) voicing and Wo + %voicing_ = voicing; + %model_(:,1) = model(:,1); + + model_(:,2) = floor(pi ./ model_(:,1)); % calculate L for each interpolated Wo + model_ = resample_rate_L(model_, interpolated_surface_, sample_freqs_kHz); + +endfunction + + +% --------------------------------------------------------------------------------------- +% Stand alone decoder that takes indexes and creates model_, models +% decoder and an important step in proving everything works + +function [model_ voicing_] = model_from_indexes(indexes) + max_amp = 80; K = 20; M = 4; + + [frames nc] = size(indexes); + model = model_ = zeros(frames, max_amp+3); + sample_freqs_kHz = mel_sample_freqs_kHz(K); + energy_q = 10 + 40/16*(0:15); + + melvq; + load train_120_vq; + + % decode vector quantised surface + + surface_no_mean_ = zeros(frames,K); + surface_ = zeros(frames, K); + for f=1:M:frames + surface_no_mean_(f,:) = train_120_vq(indexes(f,1),:,1) + train_120_vq(indexes(f,2),:,2); + surface_no_mean_(f,:) = post_filter(surface_no_mean_(f,:), sample_freqs_kHz, 1.5); + mean_f_ = energy_q(indexes(f,3)+1); + surface_(f,:) = surface_no_mean_(f,:) + mean_f_; + end + + % break into segments of M frames. We have 2 samples spaced M apart + % and interpolate the rest. + + interpolated_surface_ = zeros(frames, K); + for f=1:M:frames-M + left_vec = surface_(f,:); + right_vec = surface_(f+M,:); + sample_points = [f f+M]; + resample_points = f:f+M-1; + for k=1:K + interpolated_surface_(resample_points,k) = interp_linear(sample_points, [left_vec(k) right_vec(k)], resample_points); + end + end + + % recover Wo and voicing + + voicing = zeros(1, frames); + for f=1:M:frames + if indexes(f,4) == 0 + voicing(f) = 0; + model(f,1) = 2*pi/100; + else + voicing(f) = 1; + model(f,1) = decode_log_Wo(indexes(f,4), 6); + end + end + + % break into M segments for purposes of Wo interpolation + + voicing_ = zeros(1, frames); + for f=1:M:frames-M + + Wo1_ = model(f,1); + Wo2_ = model(f+M,1); + + if !voicing(f) && !voicing(f+M) + model_(f:f+M-1,1) = 2*pi/100; + end + + if voicing(f) && !voicing(f+M) + model_(f:f+M/2-1,1) = Wo1_; + model_(f+M/2:f+M-1,1) = 2*pi/100; + voicing_(f:f+M/2-1) = 1; + end + + if !voicing(f) && voicing(f+M) + model_(f:f+M/2-1,1) = 2*pi/100; + model_(f+M/2:f+M-1,1) = Wo2_; + voicing_(f+M/2:f+M-1) = 1; + end + + if voicing(f) && voicing(f+M) + Wo_samples = [Wo1_ Wo2_]; + model_(f:f+M-1,1) = interp_linear([f f+M], Wo_samples, f:f+M-1); + voicing_(f:f+M-1) = 1; + end + + #{ + printf("f: %d f+M/2: %d Wo: %f %f (%f %%) v: %d %d \n", f, f+M/2, model(f,1), model(f+M/2,1), 100*abs(model(f,1) - model(f+M/2,1))/model(f,1), voicing(f), voicing(f+M/2)); + for i=f:f+M/2-1 + printf(" f: %d v: %d v_: %d Wo: %f Wo_: %f\n", i, voicing(i), voicing_(i), model(i,1), model_(i,1)); + end + #} + end + model_(frames-M:frames,1) = pi/100; % set end frames to something sensible + + % enable these to use original (non interpolated) voicing and Wo + %voicing_ = voicing; + %model_(:,1) = model(:,1); + + model_(:,2) = floor(pi ./ model_(:,1)); % calculate L for each interpolated Wo + model_ = resample_rate_L(model_, interpolated_surface_, sample_freqs_kHz); + +endfunction + + +% --------------------------------------------------------------------------------------- +% Stand alone decoder that takes indexes and creates model_, just like +% model_from_indexes above. This version is refactored to perform frame by frame +% processing, as a stepping stone to C. + +function [model_ voicing_] = model_from_indexes_fbf(indexes) + max_amp = 80; K = 20; M = 4; + + [frames nc] = size(indexes); + model = model_ = zeros(frames, max_amp+3); + sample_freqs_kHz = mel_sample_freqs_kHz(K); + energy_q = 10 + 40/16*(0:15); + + melvq; + load train_120_vq; + + surface_no_mean_ = zeros(frames,K); + surface_ = zeros(frames, K); + interpolated_surface_ = zeros(frames, K); + voicing = zeros(1, frames); + voicing_ = zeros(1, frames); + + for f=1:M:frames + % decode vector quantised surface + + surface_no_mean_(f,:) = train_120_vq(indexes(f,1),:,1) + train_120_vq(indexes(f,2),:,2); + surface_no_mean_(f,:) = post_filter(surface_no_mean_(f,:), sample_freqs_kHz, 1.5); + mean_f_ = energy_q(indexes(f,3)+1); + surface_(f,:) = surface_no_mean_(f,:) + mean_f_; + + % break into segments of M frames. We have 2 samples spaced M apart + % and interpolate the rest. + + if f > M + left_vec = surface_(f-M,:); + right_vec = surface_(f,:); + sample_points = [f-M f]; + resample_points = f-M:f-1; + for k=1:K + interpolated_surface_(resample_points,k) = interp_linear(sample_points, [left_vec(k) right_vec(k)], resample_points); + end + end + + % recover Wo and voicing + + if indexes(f,4) == 0 + voicing(f) = 0; + model(f,1) = 2*pi/100; + else + voicing(f) = 1; + model(f,1) = decode_log_Wo(indexes(f,4), 6); + end + + if f > M + Wo1 = model(f-M,1); + Wo2 = model(f,1); + + [Wo_ avoicing_] = interp_Wo_v(Wo1, Wo2, voicing(f-M), voicing(f)); + model_(f-M:f-1,1) = Wo_; + voicing_(f-M:f-1) = avoicing_; + model_(f-M:f-1,2) = floor(pi ./ model_(f-M:f-1,1)); % calculate L for each interpolated Wo + end + + end + + model_(frames-M:frames,1) = pi/100; % set end frames to something sensible + model_(frames-M:frames,2) = floor(pi ./ model_(frames-M:frames,1)); + + model_ = resample_rate_L(model_, interpolated_surface_, sample_freqs_kHz); + +endfunction + + + +% --------------------------------------------------------------------------------------- +% Various experiments tried during development + +% rate K mel-resampling, high end correction, and DCT experiment workhorse + +function [model_ rate_K_surface] = experiment_rate_K_dct2(model, vq_en=0, plots=1, voicing) + [frames nc] = size(model); + K = 20; Fs = 8000; correct_rate_K_en = 1; + + %quantisers = load("dct2quant.txt"); + %nlevels = load("dct2quantnlevels.txt"); + %map = load("dct2map.txt"); + + for f=1:frames + Wo = model(f,1); + L = model(f,2); + Am = model(f,3:(L+2)); + AmdB = 20*log10(Am); + Am_freqs_kHz = (1:L)*Wo*4/pi; + [rate_K_vec rate_K_sample_freqs_kHz] = resample_const_rate_f_mel(model(f,:), K); + if correct_rate_K_en + [tmp_ AmdB_] = resample_rate_L(model(f,:), rate_K_vec, rate_K_sample_freqs_kHz); + [rate_K_vec_corrected orig_error error nasty_error_log nasty_error_m_log] = correct_rate_K_vec(rate_K_vec, rate_K_sample_freqs_kHz, AmdB, AmdB_, K, Wo, L, Fs); + rate_K_surface(f,:) = rate_K_vec_corrected; + else + rate_K_surface(f,:) = rate_K_vec; + end + end + + % break into 160ms blocks, 2D DCT, truncate, IDCT + + Tf = 0.01; % frame period in seconds + Nt = 16; % number of 10ms frames blocks in time + dec = 2; % decimation factor + dist_dB = 2; % use enough coefficients to get this distortion ond DCT coeffs + + Nblocks = floor(frames/(Nt*dec)); + printf("frames: %d Nblocks: %d\n", frames, Nblocks); + + unwrapped_dcts = zeros(Nblocks,Nt*K); + rate_K_surface_ = zeros(frames, K); + + % create map on the fly from train database + + asurf = load("all_surf.txt"); [nr nc] = size(asurf); + asurf = asurf(1:dec:nr,:); + [map rms_map mx mx_ind unwrapped_dcts] = create_map_rms(asurf, Nt, K); + %map = create_zigzag_map(Nt,K); + + %printf("non zero coeffs: %d\n", sum(sum(map == 1))); + figure(2); clf; + mesh(map); + sumnz = zeros(1,Nblocks); + dct2_sd = zeros(1,Nblocks); + + % create quantiser_num to r,c Luts + + rmap = cmap = zeros(1,Nt*K); + for r=1:Nt + for c=1:K + quantiser_num = map(r,c); + rmap(quantiser_num) = r; + cmap(quantiser_num) = c; + end + end + + for n=1:Nblocks + st = (n-1)*dec*Nt+1; en = st + dec*Nt - 1; + %printf("st: %d en: %d\n", st, en); + D = dct2(rate_K_surface(st:dec:en,:)); + + % move over surface and work out quantiser + % quantise, replace on map + + E = mapped = zeros(Nt,K); + #{ + for r=1:Nt + for c=1:K + quantiser_num = map(r,c); + if quantiser_num <= 40 + %printf("r %d c %d quantiser_num %d nlevels %d ", r, c, quantiser_num, nlevels(quantiser_num)); + %levels = quantisers(quantiser_num, 1:nlevels(quantiser_num)); + %quant_out = quantise(levels, D(r,c)); + E(r,c) = D(r,c); + if E(r,c) + mapped(r,c) = 1; + sumnz(n)++; + end + end + end + end + #} + + qn = 0; + adct2_sd = mean(std(D-E)); + while adct2_sd > dist_dB + qn++; + E(rmap(qn), cmap(qn)) = 1*round(D(rmap(qn), cmap(qn))/1); + adct2_sd = mean(std(D-E)); + %printf("qn %d %f\n", qn, adct2_sd); + end + sumnz(n) = qn; + + % note neat trick to interpolate to 10ms frames despite dec + + #{ + energy = sum(sum(E)); + Edc = E(1,1); + E = E*1.2; + E(1,1) = Edc/1.2; + #} + %E *= energy/sum(sum(E)); + rate_K_surface_(st:en,:) = idct2([sqrt(dec)*E; zeros(Nt*(dec-1), K)]); + + dct2_sd(n) = mean(std(D-E)); + end + + % figure(3); clf; mesh(mapped); + figure(4); clf; plot(sumnz); hold on; plot([1 length(sumnz)],[mean(sumnz) mean(sumnz)]); hold off; title('Non Zero'); + figure(5); clf; plot(dct2_sd); title('DCT SD'); + printf("average dct spectral distortion: %3.2f dB\n", mean(dct2_sd)); + printf("mean number of coeffs/DCT: %3.2f/%d\n", mean(sumnz), Nt*K); + printf("coeffs/second: %3.2f\n", mean(sumnz)/(Nt*Tf*dec)); + printf("bits/s: %3.2f\n", 2.9*mean(sumnz)/(Nt*Tf*dec)); + + % optional 700C style post filter + + post_filter_en = 0; + if post_filter_en + for f=1:Nt*Nblocks + mn = mean(rate_K_surface_(f,:)); + rate_K_surface_no_mean_(f,:) = rate_K_surface_(f,:) - mn; + rate_K_surface_(f,:) = mn + post_filter(rate_K_surface_no_mean_(f,:), rate_K_sample_freqs_kHz); + end + end + + % prevent /0 errors at end of run + + rate_K_surface_(dec*Nt*Nblocks+1:frames,:) = rate_K_surface(dec*Nt*Nblocks+1:frames,:); + model_ = resample_rate_L(model, rate_K_surface_, rate_K_sample_freqs_kHz); + + dist = std((rate_K_surface_(1:dec:frames,:) - rate_K_surface(1:dec:frames,:))'); + figure(1); clf; plot(dist); title('Rate K SD'); + printf("Rate K spectral distortion mean: %3.2f dB var: %3.2f\n", mean(dist), var(dist)); +endfunction + + +% Basic unquantised rate K mel-sampling then back to rate L. Now with "high end correction" + +function [model_ rate_K_surface sd_log] = experiment_mel_freq(model, vq_en=0, plots=1, voicing) + [frames nc] = size(model); + K = 20; Fs = 8000; correct_rate_K_en = 0; + AmdB = zeros(frames, 160); + + for f=1:frames + Wo = model(f,1); + L = model(f,2); + Am = model(f,3:(L+2)); + AmdB(f,1:L) = 20*log10(Am); + Am_freqs_kHz = (1:L)*Wo*Fs/(2000*pi); + [rate_K_vec rate_K_sample_freqs_kHz] = resample_const_rate_f_mel(model(f,:), K, Fs, 'lanc'); + if correct_rate_K_en + [tmp_ AmdB_] = resample_rate_L(model(f,:), rate_K_vec, rate_K_sample_freqs_kHz, Fs); + [rate_K_vec_corrected orig_error error nasty_error_log nasty_error_m_log] = correct_rate_K_vec(rate_K_vec, rate_K_sample_freqs_kHz, AmdB, AmdB_, K, Wo, L, Fs); + rate_K_surface(f,:) = rate_K_vec_corrected; + else + rate_K_surface(f,:) = rate_K_vec; + end + end + + if plots + mesh(rate_K_surface); + end + + [model_ AmdB_ ] = resample_rate_L(model, rate_K_surface, rate_K_sample_freqs_kHz, Fs, 'lancmel'); + + % calculate SD + + sd_log = []; + for f=1:frames + L = model(f,2); + asd = std(AmdB(f,1:L) - AmdB_(f,1:L)); + + % this code useful to explore outliers, adjust threshold based on plo(sd_log) below + plot_outliers = 0; + if plot_outliers && (asd > 7) + figure; plot(AmdB(f,1:L), 'b+-'); hold on; plot(AmdB_(f,1:L), 'r+-'); hold off; + end + sd_log = [sd_log asd]; + end + + if plots + figure; plot(sd_log); title('SD againstframe'); + figure; plot(hist(sd_log)); + end + printf("mean SD %4.2f\n", mean(sd_log)); +endfunction + + + +% mel spaced sampling, differential in time VQ. Curiously, couldn't +% get very good results out of this, I suspect a bug + +function [model_ rate_K_surface_diff] = experiment_mel_diff_freq(model, vq_en=0) + [frames nc] = size(model); + K = 20; + [rate_K_surface rate_K_sample_freqs_kHz] = resample_const_rate_f_mel(model, K); + + if vq_en + melvq; + load surface_diff_vq; m=5; + end + + for f=1:frames + mean_f(f,:) = mean(rate_K_surface(f,:)); + rate_K_surface_no_mean(f,:) = rate_K_surface(f,:) - mean_f(f,:); + end + + rate_K_surface_no_mean_ = zeros(frames, K); + rate_K_surface_no_mean_diff = zeros(frames, K); + rate_K_surface_(1,:) = rate_K_surface_diff(1,:) = zeros(1, K); + + for f=2:frames + rate_K_surface_diff(f,:) = rate_K_surface_no_mean(f,:) - 0.8*rate_K_surface_no_mean_(f-1,:); + if vq_en + [res arate_K_surface_diff_ ind] = mbest(surface_diff_vq, rate_K_surface_diff(f,:), m); + rate_K_surface_diff_(f,:) = arate_K_surface_diff_; + else + rate_K_surface_diff_(f,:) = rate_K_surface_diff(f,:); + end + rate_K_surface_no_mean_(f,:) = 0.8*rate_K_surface_no_mean_(f-1,:) + rate_K_surface_diff_(f,:); + end + + for f=1:frames + rate_K_surface_(f,:) = rate_K_surface_no_mean_(f,:) + mean_f(f,:); + end + + model_ = resample_rate_L(model, rate_K_surface_, rate_K_sample_freqs_kHz); + +endfunction + + +% try vq with open and closed loop mean removal, turns out they give +% identical results lol + +function [model_ rate_K_surface] = experiment_closed_loop_mean(model) + [frames nc] = size(model); + K = 15; + mel_start = ftomel(300); mel_end = ftomel(3000); + step = (mel_end-mel_start)/(K-1); + mel = mel_start:step:mel_end; + rate_K_sample_freqs_Hz = 700*((10 .^ (mel/2595)) - 1); + rate_K_sample_freqs_kHz = rate_K_sample_freqs_Hz/1000; + + rate_K_surface = resample_const_rate_f(model, rate_K_sample_freqs_kHz); + + load surface_vq; m=1; + + for f=1:frames + amean = mean(rate_K_surface(f,:)); + rate_K_target_no_mean = rate_K_surface(f,:) - amean; + mse_open_loop(f) = search_vq2(surface_vq(:,:,1), rate_K_target_no_mean, m, 0); + mse_closed_loop(f) = search_vq2(surface_vq(:,:,1), rate_K_surface(f,:), m, 1); + end + + printf("rms open loop..: %f\nrms closed loop: %f\n", sqrt(mean(mse_open_loop)), sqrt(mean(mse_closed_loop))); + + % just return model_ as we have to so nothing breaks, it's not actually useful + + model_ = resample_rate_L(model, rate_K_surface, rate_K_sample_freqs_kHz); + +endfunction + + +% Experiment with 10ms update rate for energy but 40ms update for spectrum, +% using linear interpolation for spectrum. + +function model_c = experiment_energy_rate_linear(model, vq_en, plot_en) + max_amp = 80; + [frames nc] = size(model); + + % 10ms mel freq modelling and VQ + + model_ = experiment_mel_freq(model, vq_en, plot_en); + + % Remove energy. Hmmmm, this is done on Ams rather than surface but that's + % similar I guess + + e = zeros(1,frames); + model_a = zeros(frames,max_amp+3); + for f=1:frames + L = min([model_(f,2) max_amp-1]); + Am_ = model_(f,3:(L+2)); + AmdB_ = 20*log10(Am_); + mean_f(f) = mean(AmdB_); + AmdB_ -= mean_f(f); + model_a(f,1) = model_(f,1); model_a(f,2) = L; model_a(f,3:(L+2)) = 10 .^ (AmdB_(1:L)/20); + end + + % linear interp after removing energy (mean AmdB) + + model_b = experiment_dec_linear(model_a); + + % add back in energy + + model_c = zeros(frames,max_amp+3); + for f=1:frames + L = min([model_b(f,2) max_amp-1]); + Am_ = model_b(f,3:(L+2)); + AmdB_ = 20*log10(Am_); + AmdB_ += mean_f(f); + model_c(f,1) = model_b(f,1); model_c(f,2) = L; model_c(f,3:(L+2)) = 10 .^ (AmdB_(1:L)/20); + end + +endfunction + + +% conventional decimation in time without any filtering, then linear +% interpolation. Linear interpolation is a two-tap (weak) form of fir +% filtering that may have problems with signals with high freq +% components, for example after quantisation noise is added. Need to +% look into this some more. + +function model_ = experiment_dec_linear(model) + newamp; + max_amp = 80; + + [frames nc] = size(model); + model_ = zeros(frames, max_amp+3); + decimate = 4; + for f=1:frames + AmdB_ = decimate_frame_rate(model, decimate, f, frames); + L = length(AmdB_); + model_(f,1) = model(f,1); model_(f,2) = L; model_(f,3:(L+2)) = 10 .^ (AmdB_(1:L)/20); + end +endfunction + + + +% Experimental AbyS decimator that chooses best frames to match +% surface based on AbyS approach. Can apply post filter at different +% points, and optionally do fixed decimation, at rate K. Didn't +% produce anything spectacular in AbyS mode, suggest another look with +% some sort of fbf display to see what's going on internally. + +function model_ = experiment_dec_abys(model, M=8, vq_en=0, pf_en=1, fixed_dec=0, voicing) + max_amp = 80; + [frames nc] = size(model); + model_ = zeros(frames, max_amp+3); + + printf("M: %d vq_en: %d pf_en: %d fixed_dec: %d\n", M, vq_en, pf_en, fixed_dec) + + % create frames x K surface + + K = 20; + [surface sample_freqs_kHz] = resample_const_rate_f_mel(model, K); + target_surface = surface; + + % optionaly VQ surface + + if vq_en + melvq; + load train_120_vq; m=5; + + for f=1:frames + mean_f(f) = mean(surface(f,:)); + rate_K_surface_no_mean(f,:) = surface(f,:) - mean_f(f); + end + + [res rate_K_surface_ ind] = mbest(train_120_vq, rate_K_surface_no_mean, m); + + if pf_en == 1 + for f=1:frames + rate_K_surface_(f,:) = post_filter(rate_K_surface_(f,:), sample_freqs_kHz, 1.5, voicing(f)); + end + end + + for f=1:frames + rate_K_surface_(f,:) += mean_f(f); + end + + surface = rate_K_surface_; + end + + % break into segments of M frames. Fix end points, that two of the + % frames we sample. Then find best choice in between + + surface_ = zeros(frames, K); + best_surface_ = zeros(frames, K); + + for f=1:M:frames-M + + left_vec = surface(f,:); + right_vec = surface(f+M,:); + resample_points = f:f+M-1; + best_mse = 1E32; + best_m = f+1; + + + if fixed_dec + m = f+M/2; + printf("%d %d %d\n", f, m, M+f); + centre_vec = surface(m,:); + sample_points = [f m f+M]; + for k=1:K + best_surface_(resample_points,k) = interp1(sample_points, [left_vec(k) centre_vec(k) right_vec(k)], resample_points, "spline", 0); + end + else + printf("%d %d\n", f, M+f); + for m=f+1:M+f-2 + + % Use interpolation to construct candidate surface_ segment + % using just threee samples + + centre_vec = surface(m,:); + sample_points = [f m f+M]; + mse = 0; + for k=1:K + surface_(resample_points,k) = interp1(sample_points, [left_vec(k) centre_vec(k) right_vec(k)], resample_points, "spline", 0); + mse += sum((target_surface(resample_points,k) - surface_(resample_points,k)).^2); + end + + % compare synthesised candidate to orginal and chose min ased on MSE + + if mse < best_mse + best_mse = mse; + best_m = m; + best_surface_(resample_points,:) = surface_(resample_points,:); + end + + printf(" m: %d mse: %f best_mse: %f best_m: %d\n", m, mse, best_mse, best_m); + end + end + end + + if pf_en == 2 + + % Optionally apply pf after interpolation, theory is interpolation + % smooths spectrum in time so post filtering afterwards may be + % useful. Note we remove mean, this tends to move formats up and + % anti-formants down when we multiply by a constant + + for f=1:frames + mean_f = mean(best_surface_(f,:)); + rate_K_vec_no_mean = best_surface_(f,:) - mean_f; + rate_K_vec_no_mean *= 1.2; + best_surface_(f,:) = rate_K_vec_no_mean + mean_f; + end + end + + model_ = resample_rate_L(model, best_surface_, sample_freqs_kHz); + figure(5); + plot(mean_f,'+-') + figure(6) + hist(mean_f) +endfunction + + +#{ + Filtering time axis or surface, as a first step before decimation. + So given surface, lets look at spectral content and see if we can + reduce it while maintaining speech quality. First step is to dft + across time and plot. + + This just has one filtering step, which may help quantisation. In practice + we may need filtering before decimation and at the inerpolation stage +#} + +function model_ = experiment_filter(model) + [frames nc] = size(model); + K = 40; rate_K_sample_freqs_kHz = (1:K)*4/K; + [rate_K_surface rate_K_sample_freqs_kHz] = resample_const_rate_f(model, rate_K_sample_freqs_kHz); + + Nf = 4; Nf2 = 6; + [b a]= cheby1(4, 1, 0.20); + %Nf = 20; Nf2 = 10; + %b = fir1(Nf, 0.25); a = [1 zeros(1, Nf)]; + %Nf = 1; Nf2 = 1; + %b = 1; a = [1 zeros(1, Nf)]; + + %Nf = 2; Nf2 = 1; + %beta = 0.99; w = pi/4; + %b = [1 -2*beta*cos(w) beta*beta]; a = [1 zeros(1, Nf)]; + %Nf = 10; Nf2 = 10; + %b = fir2(10, [0 0.2 0.3 1], [1 1 0.1 0.1]); a = [1 zeros(1, Nf)]; + + %Nf = 1; Nf2 = 1; + dft_surface = zeros(frames,K); + rate_K_surface_filt = zeros(frames,K); + dft_surface_filt = zeros(frames,K); + for k=1:K + dft_surface(:,k) = fft(rate_K_surface(:,k).*hanning(frames)); + %rate_K_surface_filt(:,k) = filter(b, a, rate_K_surface(:,k)); + rate_K_surface_filt(:,k) = filter(b, a, rate_K_surface(:,k)); + dft_surface_filt(:,k) = fft(rate_K_surface_filt(:,k).*hanning(frames)); + end + figure(1); clf; + mesh(abs(dft_surface)) + figure(2); clf; + mesh(abs(dft_surface_filt)) + + Fs = 100; Ts = 1/Fs; + figure(3); + subplot(211); + h = freqz(b,a,Fs/2); + plot(1:Fs/2, 20*log10(abs(h))) + axis([1 Fs/2 -40 0]) + ylabel('Gain (dB)') + grid; + subplot(212) + [g w] = grpdelay(b,a); + plot(w*Fs/pi, 1000*g*Ts) + %axis([1 Fs/2 0 0.5]) + xlabel('Frequency (Hz)'); + ylabel('Delay (ms)') + grid + + figure(4); clf; stem(filter(b,a,[1 zeros(1,20)])) + + % adjust for time offset due to filtering + + rate_K_surface_filt = [rate_K_surface_filt(Nf2:frames,:); zeros(Nf2, K)]; + + % back down to rate L + + model_ = resample_rate_L(model, rate_K_surface_filt, rate_K_sample_freqs_kHz); +endfunction + + +% filter, decimate, zero insert, filter, simulates decimation and re-interpolation, as +% an alternative to simple linear interpolation. + +function model_ = experiment_filter_dec_filter(model) + [frames nc] = size(model); + + % rate K surface + + K = 40; rate_K_sample_freqs_kHz = (1:K)*4/K; + [rate_K_surface rate_K_sample_freqs_kHz] = resample_const_rate_f(model, rate_K_sample_freqs_kHz); + + % filter, not we run across each of the K bins, treating them as a 1-D sequence + + Nf = 4; filter_delay = 12; + [b a]= cheby1(4, 1, 0.20); + %Nf = 10; Nf2 = Nf/2; filter_delay = Nf2*2; + %b = fir1(Nf, 0.25); a = [1 zeros(1, Nf)]; + %Nf = 10; Nf2 = 2; filter_delay = 2*Nf2; + %b = fir2(10, [0 0.2 0.3 1], [1 1 0.1 0.1]); a = [1 zeros(1, Nf)]; + + rate_K_surface_filt = zeros(frames,K); + for k=1:K + rate_K_surface_filt(:,k) = filter(b, a, rate_K_surface(:,k)); + end + + % decimate from 100 to 25Hz, and zero pad, which we simulate by + % setting all K samples in 3 out of 4 time-samples to zero + + M = 4; + + for f=1:frames + if mod(f,M) + rate_K_surface_filt(f,:) = zeros(1,K); + end + end + + % filter to reconstruct 100 Hz frame rate + + rate_K_surface_filt_recon = zeros(frames,K); + for k=1:K + rate_K_surface_filt_recon(:,k) = filter(b, a, M*rate_K_surface_filt(:,k)); + end + + figure(1); clf; + mesh(rate_K_surface_filt) + figure(2); clf; + mesh(rate_K_surface_filt_recon) + + % adjust for time offset due to 2 lots of filtering + + rate_K_surface_filt_recon = [rate_K_surface_filt_recon(filter_delay:frames,:); zeros(filter_delay, K)]; + + % back down to rate L + + model_ = resample_rate_L(model, rate_K_surface_filt_recon, rate_K_sample_freqs_kHz); +endfunction + + +% smoothing using masking functions + +function model_ = experiment_smoothed(model, bark_model=1) + [frames nc] = size(model); + + model_ = model; + + for f=1:frames + Wo = model(f,1); + L = model(f,2); + Am = model(f,3:(L+2)); + AmdB = 20*log10(Am); + [AmdB_ Am_freqs_kHz] = mask_model(AmdB, Wo, L, bark_model); + model_(f,3:(L+2)) = 10 .^ ((AmdB_)/20); + end + +endfunction + +#{ + + My original idea was to used a 3-4 "resonators" to construct a + piecewise model of the spectrum. Kind of got distracted by the + surface and mel sampling that ended up working OK. This method was + working OK, soem issues with background noise but rather easy to + quantise. + + todo: get this working again +#} + +function model_ = experiment_piecewise(model) + + [frames tmp] = size(model); max_amp = 160; + + fvec_log = []; amps_log = []; + + for f=1:frames + printf("%d ", f); + Wo = model(f,1); + L = min([model(f,2) max_amp-1]); + Am = model(f,3:(L+2)); + AmdB = 20*log10(Am); + e(f) = sum(AmdB)/L; + + % fit model + + [AmdB_ res fvec fvec_ amps] = piecewise_model(AmdB, Wo); + fvec_log = [fvec_log; fvec]; + amps_log = [amps_log; amps]; + + model_(f,1) = Wo; model_(f,2) = L; model_(f,3:(L+2)) = 10 .^ (AmdB_(1:L)/20); + end + +endfunction + + +% early test, devised to test rate K<->L changes along frequency axis + +function model_ = resample_half_frame_offset(model, rate_K_surface, rate_K_sample_freqs_kHz) + max_amp = 80; + [frames col] = size(model); + + % Check distortion by shifting half a frame and returning model for + % synthesis Hmm how to handle Wo? Well lets assume it's OK and + % average it. If it sounds OK then it must be OK as well and Am + % interpolation. If not then will do some more thinking. + + model_ = zeros(frames, max_amp+3); + for f=1:frames-1 + Wo = (model(f,1) + model(f+1,1))/2; + L = min(pi/Wo, max_amp-1); + rate_L_sample_freqs_kHz = (1:L)*Wo*4/pi; + + % interpolate at half frame offset + + half = 0.5*rate_K_surface(f,:) + 0.5*rate_K_surface(f+1,:); + + % back down to rate L + + AmdB_ = interp1(rate_K_sample_freqs_kHz, half, rate_L_sample_freqs_kHz, "spline", "extrap"); + + % todo a way to save all model params ... Am, Wo, L, (v?) Start with current facility then + % make it better + + model_(f,1) = Wo; model_(f,2) = L; model_(f,3:(L+2)) = 10 .^ (AmdB_(1:L)/20); + end +endfunction + + +% vq search with optional closed loop mean estimation, turns out this gives +% identical results to extracting the mean externally + +function [mse_list index_list] = search_vq2(vq, target, m, closed_loop_dc = 0) + + [Nvec order] = size(vq); + + mse = zeros(1, Nvec); + + % find mse for each vector + + for i=1:Nvec + if closed_loop_dc + sum(target - vq(i,:)) + g = sum(target - vq(i,:))/order; + mse(i) = sum((target - vq(i,:) - g) .^2); + else + mse(i) = sum((target - vq(i,:)) .^2); + end + end + + % sort and keep top m matches + + [mse_list index_list ] = sort(mse); + + mse_list = mse_list(1:m); + index_list = index_list(1:m); + +endfunction + + +% helper function to plot surfaces + +function plot_dft_surface(surface) + [frames K] = size(surface); + + dft_surface = zeros(frames,K); + for k=1:K + dft_surface(:,k) = fft(surface(:,k).*hanning(frames)); + end + + % Set up a meaninful freq axis. We only need real side. Sample rate + % (frame rate) Fs=100Hz + + Fs = 100; dF = Fs/frames; + mesh(1:K, (1:frames/2)*dF, 20*log10(abs(dft_surface(1:frames/2,:,:)))); +endfunction + diff --git a/libcodec2-android/src/codec2/octave/newamp1_compare.m b/libcodec2-android/src/codec2/octave/newamp1_compare.m new file mode 100644 index 0000000..eac9ecd --- /dev/null +++ b/libcodec2-android/src/codec2/octave/newamp1_compare.m @@ -0,0 +1,56 @@ +% newamp1_compare.m +% +% Copyright David Rowe 2016 +% This program is distributed under the terms of the GNU General Public License +% Version 2 +% +% Compare model, Wo, and voicing files, used for checking refactoring and C port + + +function newamp1_compare(prefixa, prefixb) + autotest; + + frames = 100; + a = load_params(prefixa, frames); + b = load_params(prefixb, frames); + + check(a.Am, b.Am, 'Am'); + check(a.Hm, b.Hm, 'Hm'); + check(a.Wo, b.Wo, 'Wo'); + check(a.v, b.v, 'v'); + + figure(1); clf; plot(a.v); hold on; plot(a.v-b.v,'r'); hold off; +endfunction + + +function params = load_params(prefix, frames) + max_amp = 80; + fft_enc = 512; + + Am_out_name = sprintf("%s_am.out", prefix); + fam = fopen(Am_out_name,"rb"); + Wo_out_name = sprintf("%s_Wo.out", prefix); + fWo = fopen(Wo_out_name,"rb"); + Hm_out_name = sprintf("%s_hm.out", prefix); + fhm = fopen(Hm_out_name,"rb"); + + % load up values from binary files + + params.Am = zeros(frames, max_amp); + params.Wo = zeros(frames, 1); + params.v = zeros(frames, 1); + params.Hm = zeros(frames, max_amp); + for f=1:frames + params.Am(f,:) = fread(fam, max_amp, "float32"); + params.Wo(f) = fread(fWo, 1, "float32"); + params.Hm(f,:) = fread(fhm, max_amp, "float32"); + end + + fclose(fam); fclose(fWo); fclose(fhm); + + % voicing is a text file + + v_out_name = sprintf("%s_v.txt", prefix); + params.v = load(v_out_name); + +endfunction diff --git a/libcodec2-android/src/codec2/octave/newamp1_fbf.m b/libcodec2-android/src/codec2/octave/newamp1_fbf.m new file mode 100644 index 0000000..96c0c22 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/newamp1_fbf.m @@ -0,0 +1,317 @@ +% newamp1_fbf.m +% +% Copyright David Rowe 2016 +% This program is distributed under the terms of the GNU General Public License +% Version 2 +% +% Interactive Octave script to explore frame by frame operation of new amplitude +% modelling model. +% +% Usage: +% Make sure codec2-dev is compiled with the -DDUMP option - see README for +% instructions. +% ~/codec2-dev/build_linux/src$ ./c2sim ../../raw/hts1a.raw --dump hts1a +% $ cd ~/codec2-dev/octave +% octave:14> newamp1_fbf("../build_linux/src/hts1a",50) + + +function newamp1_fbf(samname, f=73, varargin) + more off; + + newamp; + melvq; + + Fs = 8000; + quant_en = 0; vq_search = "gain"; + mask_en = 0; + nvq = 0; vq_start = []; + quant_en = weight_en = 0; + mode = "const"; + + % specify one of more vqs, start index, vq file name, and search method + + ind = anind = arg_exists(varargin, "vq"); + while anind + nvq++; + vq_start = [vq_start varargin{ind+1}]; + avq_filename = varargin{ind+2}; + if nvq < 2; vq_filename = avq_filename; else; vq_filename = [vq_filename; avq_filename]; end; + avq_search = varargin{ind+3}; + if nvq < 2; vq_search = avq_search; else; vq_search = [vq_search; avq_search]; end; + printf("nvq %d vq_start: %d vq_filename: %s vq_search: %s\n", nvq, vq_start(nvq), avq_filename, avq_search); + anind = arg_exists(varargin(ind+1:length(varargin)), "vq"); + if anind + ind += anind; + end + end + + fit_order = 0; + + ind = arg_exists(varargin, "construct"); + if ind + vq_search = varargin{ind}; + end + ind = arg_exists(varargin, "construct_indep"); + if ind + vq_search = varargin{ind}; + end + + ind = arg_exists(varargin, "mode"); + if ind + mode = varargin{ind+1}; + end + + % optional exploration of phase + + ind = arg_exists(varargin, "phase"); + phase_en = 0; + if ind + phase_en = 1; + end + + if quant_en + printf("quant_en: %d vq_filename: %s vq_st: %d vq_en: %d vq_search: %s\n", + quant_en, vq_filename, vq_st, vq_en, vq_search); + end + + % load up text files dumped from c2sim --------------------------------------- + + sn_name = strcat(samname,"_sn.txt"); + Sn = load(sn_name); + sw_name = strcat(samname,"_sw.txt"); + Sw = load(sw_name); + model_name = strcat(samname,"_model.txt"); + model = load(model_name); + [frames tmp] = size(model); + + if phase_en + phase_name = strcat(samname,"_phase.txt"); + phase = load(phase_name); + end + + % Keyboard loop -------------------------------------------------------------- + + k = ' '; + do + fg = 1; + s = [ Sn(2*f-1,:) Sn(2*f,:) ]; + figure(fg++); clf; plot(s); axis([1 length(s) -20000 20000]); + + Wo = model(f,1); L = model(f,2); Am = model(f,3:(L+2)); AmdB = 20*log10(Am); + Am_freqs_kHz = (1:L)*Wo*4/pi; + + % remove constant gain term + + if strcmp(mode, 'const') + rate_K_sample_freqs_kHz = [0.1:0.1:4]; K = length(rate_K_sample_freqs_kHz); + rate_K_vec = resample_const_rate_f(model(f,:), rate_K_sample_freqs_kHz, Fs); + end + if strcmp(mode, 'mel') + K = 20; + [rate_K_vec rate_K_sample_freqs_kHz] = resample_const_rate_f_mel(model(f,:), K, Fs, 'lanc'); + end + if fit_order == 0 + slope = 0; meanf = mean(rate_K_vec); + rate_K_vec_fit = rate_K_vec - meanf; + end + + % plots ---------------------------------- + + figure(fg++); clf; + l = sprintf(";rate %d AmdB;g+-", L); + plot((1:L)*Wo*4000/pi, AmdB, l); + axis([1 4000 -20 80]); + hold on; + stem(rate_K_sample_freqs_kHz*1000, rate_K_vec, ";rate K;b+-"); + + % default to the ideal + + rate_K_vec_ = rate_K_vec_fit; + + if mask_en && nvq + % experimental masking stuff that I can't seem to get to work + maskdB = determine_mask(rate_K_vec, rate_K_sample_freqs_kHz, rate_K_sample_freqs_kHz, bark_model=1); + plot(rate_K_sample_freqs_kHz*1000, maskdB, ";mask dB;c+-"); + end + + if strcmp(vq_search, "construct") + [idx contrib errors b] = vq_construct_mg(rate_K_vec); + rate_K_vec_ = contrib; + end + + if strcmp(vq_search, "construct_indep") + [idx contrib errors b] = vq_construct_indep_mg(rate_K_vec); + rate_K_vec_ = contrib; + end + + if nvq + + for i=1:nvq + avq_filename = char(cellstr(vq_filename)(i)); + avq_search = char(cellstr(vq_search)(i)); + x = load(avq_filename); vq = x.vq; [vq_rows vq_cols] = size(vq); + vq_st = vq_start(i); vq_en = vq_st + vq_cols - 1; + printf("\nsplit VQ: %d vq_filename: %s vq_search: %s vq_st: %d vq_en: %d nVec: %d\n", i, avq_filename, avq_search, vq_st, vq_en, vq_rows); + target = rate_K_vec_fit(vq_st:vq_en); + + if strcmp(avq_search, "mse") + [idx contrib errors test_ g mg sl] = vq_search_mse(vq, target); + rate_K_surface_fit_(f, vq_st:vq_en) = contrib; + end + + if strcmp(avq_search, "gain") + [idx contrib errors b] = vq_search_gain(vq, target, weights); + end + + if strcmp(avq_search, "max") + [idx contrib errors b] = vq_search_max(vq, target); + end + + if strcmp(avq_search, "sg") + [idx contrib errors b] = vq_search_sg(vq, target); + end + + if strcmp(avq_search, "mg") + [idx contrib errors b] = vq_search_mg(vq, target); + end + + if strcmp(avq_search, "slope") + [idx contrib errors b_log] = vq_search_slope(vq, target, "closed_quant_slope"); + rate_K_surface_fit_(f, vq_st:vq_en) = contrib; + printf(" mg: %3.2f sl: %3.2f g: %3.2f \n", b_log(1), b_log(2), b_log(3)); + if quant_en + % set slope to 0 + contrib1 = contrib; + contrib = b_log(1)*vq(idx,:) + b_log(3); + rate_K_vec_(vq_en+1:K) -= b_log(2)*vq_cols; + end + end + + rate_K_vec_(vq_st:vq_en) = contrib; + end + + plot(rate_K_sample_freqs_kHz(vq_st:vq_en)*1000, contrib, 'm+-'); + if strcmp(vq_search, "para") + plot(rate_K_sample_freqs_kHz(vq_st:vq_en)*1000, para_target, 'c+-'); + if quant_en + plot(rate_K_sample_freqs_kHz(vq_st:vq_en)*1000, para, 'r+-'); + end + end + l = sprintf(";diff vq sd = %3.2f;k+-", std(target - contrib)); + plot(rate_K_sample_freqs_kHz(vq_st:vq_en)*1000, target - contrib, l); + end + + % And .... back to rate L + + if (strcmp(vq_search, "construct") == 0) && (strcmp(vq_search, "construct_indep") == 0) + rate_K_vec_ += meanf; + end + if strcmp(mode, "const") + [model_ AmdB_] = resample_rate_L(model(f,:), rate_K_vec_, rate_K_sample_freqs_kHz, Fs); + end + if strcmp(mode, "mel") + [model_ AmdB_] = resample_rate_L(model(f,:), rate_K_vec_, rate_K_sample_freqs_kHz, Fs, "lancmel"); + end + AmdB_ = AmdB_(1:L); + sdL = std(abs(AmdB - AmdB_)); + + plot((1:L)*Wo*4000/pi, AmdB_,";AmdB bar;r+-"); + if nvq == 0 + l = sprintf(";error sd %3.2f dB;bk+-", sdL); + plot((1:L)*Wo*4000/pi, (AmdB - AmdB_), l); + end + hold off; + + if phase_en + + % est phase using HT + + Am_ = model(f,3:(L+2)); + fft_enc = 512; + phase_est = determine_phase(model_, 1, fft_enc); + phase0 = zeros(1,L); + for m=1:L + b = round(m*Wo*fft_enc/(2*pi)); + phase0(m) = phase_est(b); + end + + % plot amplitudes and phase for first 1kHz + + figure(fg++); clf; + subplot(211); + plot((1:L)*Wo*4000/pi, AmdB_(1:L),'+-'); + subplot(212); + plot((1:L)*Wo*4000/pi, phase(f,1:L),'+-'); + hold on; + plot((1:L)*Wo*4000/pi, phase0(1:L),'r+-'); + hold off; + + % simple synthesis using sinusoidal parameters + + figure(fg++); clf; + N = 320; + s = s_phase0 = zeros(1,N); + for m=1:L + s = s + Am_(m)*cos(m*Wo*(1:N) + phase(f,m)); + s_phase0 = s_phase0 + Am_(m)*cos(m*Wo*(1:N) + phase0(m)); + end + subplot(211); plot(s); subplot(212); plot(s_phase0,'g'); + end + + if quant_en + figure(fg++); clf; + plot(contrib1, 'b+-'); + hold on; plot(contrib,'r+'); hold off; + end + + if weight_en + figure(fg++); clf; + subplot(211); + plot((1:L)*Wo*4000/pi, AmdB,";AmdB;g+-"); + axis([1 4000 -20 80]); + hold on; + plot(rate_K_sample_freqs_kHz*1000, rate_K_vec, ";rate K;b+-"); + hold off; + subplot(212); + plot(rate_K_sample_freqs_kHz(vq_st:vq_en)*1000, weights); + axis([1 4000 0 8]); + end + + % interactive menu ------------------------------------------ + + printf("\rframe: %d menu: n-next b-back q-quit w-quant[%d]", f, quant_en); + fflush(stdout); + k = kbhit(); + + if k == 'w' + quant_en++; + if quant_en == 2; quant_en = 0; end + endif + if k == 'n' + f = f + 1; + endif + if k == 'b' + f = f - 1; + endif + if k == 'o' + fit_order++; + if fit_order == 2 + fit_order = 0; + end + endif + until (k == 'q') + printf("\n"); + +endfunction + + +function ind = arg_exists(v, str) + ind = 0; + for i=1:length(v) + if !ind && strcmp(v{i}, str) + ind = i; + end + end +endfunction + + diff --git a/libcodec2-android/src/codec2/octave/newamp2.m b/libcodec2-android/src/codec2/octave/newamp2.m new file mode 100644 index 0000000..dce8178 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/newamp2.m @@ -0,0 +1,1420 @@ +% newamp2.m +% +% Copyright David Rowe 2018 +% This program is distributed under the terms of the GNU General Public License +% Version 2 +% +% Library of Octave functions to explore new ideas in amplitude +% (spectral envelope) modelling. See newamp2_fby (frame by frame +% analysis) and newamp2_batch (batch processing for listening tests) +% + +1; + +% -------------------------------------------------------------------------------- +% Functions used by rate K mel work +% -------------------------------------------------------------------------------- + +function y = lanczos2(x) + y = sinc(x).*sinc(x/2); +endfunction + +function y = interp_lanczos(xp, yp, xp_max, x) + + y = zeros(1,length(x)); + k = 1; + for i=1:length(x) + % find closest sample in xp just greater than xi + xi = x(i); + while (xp(k) <= xi) && (k < length(xp)-2) + k++; + end + + % we'd like to use k-2 .. k+2, but we need to stay inside limits of xp + + k_st = k - 2; k_st = max(1,k_st); + k_en = k + 2; k_en = min(length(xp),k_en); + % printf("i: %d xi: %f k: %d k_st: %d k_en: %d\n", i, xi, k, k_st, k_en); + + % map frequencies to x in -2 ... + 2 + + delta = xp(2) - xp(1); + xl = (xp(k_st:k_en) - xi)/delta; + + y(i) = lanczos2(xl) * yp(k_st:k_en)'; + + end + +endfunction + + +% General 2nd order parabolic interpolator. Used splines orginally, +% but this is much simpler and we don't need much accuracy. Given two +% vectors of points xp and yp, find interpolated values y at points x +% + +% If a point in x is less than the smallest point in xp, we linearly +% interpolate down to (0,0). If a point in x is greater than the +% greatest value in xp, we linearly interpolate down to (xp_max, 0) + +function y = interp_para(xp, yp, xp_max, x) + assert( (length(xp) >=3) && (length(yp) >= 3) ); + + y = zeros(1,length(x)); + k = 1; + for i=1:length(x) + xi = x(i); + + % k is index into xp of where we start 3 points used to form parabola + + while (xp(k) < xi) && (k < length(xp)) + k++; + end + + %printf("xi: %f k = %d\n", xi, k); + if k == 1 + % linear interpolation at low end + x1 = 0; y1 = 0; + x2 = xp(k); y2 = yp(k); + b = (y2-y1)/(x2-x1); + y(i) = b*(xi-x2) + y2; + %printf("lin1 k: %d i: %d xi: %f x1: %f y1: %f\n", k, i, xi, x1, y1); + elseif k < length(xp) + % parabolic interpolation + x1 = xp(k-1); y1 = yp(k-1); + x2 = xp(k); y2 = yp(k); + x3 = xp(k+1); y3 = yp(k+1); + a = ((y3-y2)/(x3-x2)-(y2-y1)/(x2-x1))/(x3-x1); + b = ((y3-y2)/(x3-x2)*(x2-x1)+(y2-y1)/(x2-x1)*(x3-x2))/(x3-x1); + y(i) = a*(xi-x2)^2 + b*(xi-x2) + y2; + %printf("para1 k: %d i: %d xi: %f x1: %f y1: %f\n", k, i, xi, x1, y1); + elseif (k == length(xp)) && (xi < xp(k)) + % parabolic interpolation, but shift xp points back by 1 + x1 = xp(k-2); y1 = yp(k-2); + x2 = xp(k-1); y2 = yp(k-1); + x3 = xp(k); y3 = yp(k); + a = ((y3-y2)/(x3-x2)-(y2-y1)/(x2-x1))/(x3-x1); + b = ((y3-y2)/(x3-x2)*(x2-x1)+(y2-y1)/(x2-x1)*(x3-x2))/(x3-x1); + y(i) = a*(xi-x2)^2 + b*(xi-x2) + y2; + %printf("para2 k: %d i: %d xi: %f x1: %f y1: %f\n", k, i, xi, x1, y1); + elseif k == length(xp) + % linear interpolation at high end + x1 = xp(k); y1 = yp(k); + x2 = xp_max; y2 = 0; + b = (y2-y1)/(x2-x1); + y(i) = b*(xi-x1) + y1; + %printf("lin2 k: %d i: %d xi: %f x1: %f y1: %f\n", k, i, xi, x1, y1); + end + + end +endfunction + + +#{ +% choose largest sample in band, idea is we care more about finding +% peaks, can handle some error in frequency. x are non linear +% (arbitrary) sampling points in kHz + +function y = interp_largest(f0_Hz, AmdB, x_kHz) + L = length(AmdB); + x = x_kHz*1000; + y = zeros(1,length(x)); + bw = x(2) - x(1); + k = 1; + + for i=1:length(x) + + % determine limits of this band + + if i>1 + bw = x(i) - x(i-1); + end + band_low = x(i) - bw/2; band_high = x(i) + bw/2; + + % map band limits to harmonics + + if x(i) < f0_Hz + m_low = m_high = 1; + else + m_low = round(band_low/f0_Hz); m_high = round(band_high/f0_Hz)-1; + m_low = max(1, m_low); m_high = min(L, m_high); m_high = max(m_low, m_high); + end + + printf("L: %d f0: %f i: %d band_low: %f band_high: %f m_low: %d m_high: %d\n",L, f0_Hz, i, band_low, band_high, m_low, m_high); + % find max in band + + y(i) = max(AmdB(m_low:m_high)); + end + +endfunction +#} + +% simple linear interpolator + +function y = interp_linear(xp, yp, x) + assert( (length(xp) == 2) && (length(yp) == 2) ); + + m = (yp(2) - yp(1))/(xp(2) - xp(1)); + c = yp(1) - m*xp(1); + + y = zeros(1,length(x)); + for i=1:length(x) + y(i) = m*x(i) + c; + end +endfunction + +% quantise input sample to nearest value in table, optionally return binary code +% should work with vectors and weights too + +function [quant_out best_i bits] = quantise(levels, quant_in, weights=1) + + % if a scaler quantiser make it a col vector + if rows(levels) == 1 + levels = levels'; + end + + % find closest quantiser level + + best_se = 1E32; + for i=1:length(levels) + se = sum( ((levels(i,:) - quant_in).^2) .* weights ); + if se < best_se + quant_out = levels(i,:); + best_se = se; + best_i = i; + end + end + + % convert index to binary bits + + bits = index_to_bits(best_i-1, ceil(log2(length(levels)))); + +endfunction + + +% Quantisation functions for Wo in log freq domain + +function index = encode_log_Wo(Wo, bits) + Wo_levels = 2.^bits; + Wo_min = 2*pi/160; + Wo_max = 2*pi/20; + + norm = (log10(Wo) - log10(Wo_min))/(log10(Wo_max) - log10(Wo_min)); + index = floor(Wo_levels * norm + 0.5); + index = max(index, 0); + index = min(index, Wo_levels-1); +endfunction + +function Wo = decode_log_Wo(index, bits) + Wo_levels = 2.^bits; + Wo_min = 2*pi/160; + Wo_max = 2*pi/20; + + step = (log10(Wo_max) - log10(Wo_min))/Wo_levels; + Wo = log10(Wo_min) + step*index; + + Wo = 10 .^ Wo; +endfunction + + +% convert index to binary bits + +function bits = index_to_bits(value, numbits) + levels = 2.^numbits; + bits = zeros(1, numbits); + for b=1:numbits + bits(b) = bitand(value,2^(numbits-b)) != 0; + end +end + +function value = bits_to_index(bits, numbits) + value = sum(2.^(numbits-1:-1:0) .* bits); +endfunction + + +% Determine a phase spectra from a magnitude spectra +% from http://www.dsprelated.com/showcode/20.php +% Haven't _quite_ figured out how this works but have to start somewhere .... +% +% TODO: we may be able to sample at a lower rate, like mWo +% but start with something that works +function [phase Gdbfk s Aw] = determine_phase(model, f, Nfft=512, ak) + Fs = 8000; + max_amp = 80; + L = min([model(f,2) max_amp-1]); + Wo = model(f,1); + + sample_freqs_kHz = (Fs/1000)*[0:Nfft/2]/Nfft; % fft frequency grid (nonneg freqs) + Am = model(f,3:(L+3)); + AmdB = 20*log10(Am); + rate_L_sample_freqs_kHz = (1:L)*Wo*4/pi; + Gdbfk = interp_lanczos(rate_L_sample_freqs_kHz, AmdB, Fs/(2*1000), sample_freqs_kHz); + + % Gdbfk = resample_mask(model, f, mask_sample_freqs_kHz); + + % optional input of aks for testing + + if nargin == 4 + Aw = 1 ./ fft(ak,Nfft); + Gdbfk = 20*log10(abs(Aw(1:Nfft/2+1))); + end + + [phase s] = mag_to_phase(Gdbfk, Nfft); + +endfunction + + +% Non linear sampling of frequency axis, reducing the "rate" is a +% first step before VQ + +function mel = ftomel(fHz) + mel = floor(2595*log10(1+fHz/700)+0.5); +endfunction + + +function rate_K_sample_freqs_kHz = mel_sample_freqs_kHz(K, fstart_hz=100, fend_hz=0.95*4000) + mel_start = ftomel(fstart_hz); mel_end = ftomel(fend_hz); + step = (mel_end-mel_start)/(K-1); + mel = mel_start:step:mel_end; + rate_K_sample_freqs_Hz = 700*((10 .^ (mel/2595)) - 1); + rate_K_sample_freqs_kHz = rate_K_sample_freqs_Hz/1000; +endfunction + + +function plot_mel_sample_freqs(K, f_start_hz, f_end_hz) + rate_K_sample_freqs_kHz = mel_sample_freqs_kHz(K, f_start_hz, f_end_hz); + figure(1); clf; + plot(rate_K_sample_freqs_kHz,'+'); +endfunction + + +function [rate_K_surface rate_K_sample_freqs_kHz] = resample_const_rate_f_mel(model, K, Fs=8000, interp_alg='lanc') + rate_K_sample_freqs_kHz = mel_sample_freqs_kHz(K, 100, 0.95*Fs/2); + rate_K_surface = resample_const_rate_f(model, rate_K_sample_freqs_kHz, Fs, interp_alg); +endfunction + + +% Resample Am from time-varying rate L=floor(pi/Wo) to fixed rate K. This can be viewed +% as a 3D surface with time, freq, and ampitude axis. + +function [rate_K_surface rate_K_sample_freqs_kHz] = resample_const_rate_f(model, rate_K_sample_freqs_kHz, Fs, interp_alg='lanc') + + % convert rate L=pi/Wo amplitude samples to fixed rate K + + max_amp = 160; + [frames col] = size(model); + K = length(rate_K_sample_freqs_kHz); + rate_K_surface = zeros(frames, K); + + for f=1:frames + Wo = model(f,1); + L = min([model(f,2) max_amp-1]); + Am = model(f,3:(L+2)); + AmdB = 20*log10(Am); + + clip_en = 0; + if clip_en + % clip between peak and peak -50dB, to reduce dynamic range + + AmdB_peak = max(AmdB); + AmdB(find(AmdB < (AmdB_peak-50))) = AmdB_peak-50; + end + + rate_L_sample_freqs_kHz = (1:L)*Wo*Fs/(2000*pi); + + %rate_K_surface(f,:) = interp1([0 rate_L_sample_freqs_kHz (Fs/2000)], [AmdB(1) AmdB AmdB(L)], rate_K_sample_freqs_kHz, "spline"); + if strcmp(interp_alg, 'para') + rate_K_surface(f,:) = interp_para(rate_L_sample_freqs_kHz, AmdB, Fs/(2*1000), rate_K_sample_freqs_kHz); + end + if strcmp(interp_alg, 'lanc') + rate_K_surface(f,:) = interp_lanczos(rate_L_sample_freqs_kHz, AmdB, Fs/(2*1000), rate_K_sample_freqs_kHz); + end + + % equalise energy betweerate L and rate K samples. This was required for interframe decimation/interpolation + % when Wo is jumping about, e.g. UV frames + + energy_L = sum(Am.^2); + rate_K_vec_lin = 10 .^ (rate_K_surface(f,:)/20); + energy_K = sum(rate_K_vec_lin .^ 2); + g = sqrt(energy_L/energy_K); + rate_K_surface(f,:) += 20*log10(g); + %printf("%d\n", f); + end + %printf("\n"); +endfunction + + +% Take a rate K surface and convert back to time varying rate L + +function [model_ AmdB_] = resample_rate_L(model, rate_K_surface, rate_K_sample_freqs_kHz, Fs=8000, interp_alg='lanc') + max_amp = 160; K = columns(rate_K_surface); + [frames col] = size(model); + + AmdB_ = zeros(frames, max_amp); + model_ = zeros(frames, max_amp+2); + for f=1:frames + Wo = model(f,1); + L = model(f,2); + rate_L_sample_freqs_kHz = (1:L)*Wo*Fs/(2000*pi); + + % back down to rate L + + % dealing with end effects is an ongoing issue.....need a better solution + + if strcmp(interp_alg, 'para') + AmdB_(f,1:L) = interp_para(rate_K_sample_freqs_kHz, rate_K_surface(f,:), Fs/(2*1000), rate_L_sample_freqs_kHz); + end + if strcmp(interp_alg, 'lanc') + AmdB_(f,1:L) = interp_lanczos(rate_K_sample_freqs_kHz, rate_K_surface(f,:), Fs/(2*1000), rate_L_sample_freqs_kHz); + end + if strcmp(interp_alg, 'lancmel') + rate_K_sample_freqs_mel = ftomel(rate_K_sample_freqs_kHz*1000); + rate_L_sample_freqs_mel = ftomel(rate_L_sample_freqs_kHz*1000); + AmdB_(f,1:L) = interp_lanczos(rate_K_sample_freqs_mel, rate_K_surface(f,:), Fs/(2*1000), rate_L_sample_freqs_mel); + end + + % equalise energy + + Am_ = 10 .^ (AmdB_(f, 1:L)/20); + energy_L = sum(Am_.^2); + rate_K_vec_lin = 10 .^ (rate_K_surface(f,:)/20); + energy_K = sum(rate_K_vec_lin .^ 2); + g = sqrt(energy_K/energy_L); + Am_ *= g; + + model_(f,1) = Wo; model_(f,2) = L; model_(f,3:(L+2)) = Am_; + end +endfunction + + +% Decoder side interpolation of Wo and voicing, to go from 25 Hz +% sample rate used over channel to 100Hz internal sample rate of Codec +% 2. + +function [Wo_ voicing_] = interp_Wo_v(Wo1, Wo2, voicing1, voicing2) + M = 4; + max_amp = 80; + + Wo_ = zeros(1,M); + voicing_ = zeros(1,M); + if !voicing1 && !voicing2 + Wo_(1:M) = 2*pi/100; + end + + if voicing1 && !voicing2 + Wo_(1:M/2) = Wo1; + Wo_(M/2+1:M) = 2*pi/100; + voicing_(1:M/2) = 1; + end + + if !voicing1 && voicing2 + Wo_(1:M/2) = 2*pi/100; + Wo_(M/2+1:M) = Wo2; + voicing_(M/2+1:M) = 1; + end + + if voicing1 && voicing2 + Wo_samples = [Wo1 Wo2]; + Wo_(1:M) = interp_linear([1 M+1], Wo_samples, 1:M); + voicing_(1:M) = 1; + end + + #{ + printf("f: %d f+M/2: %d Wo: %f %f (%f %%) v: %d %d \n", f, f+M/2, model(f,1), model(f+M/2,1), 100*abs(model(f,1) - model(f+M/2,1))/model(f,1), voicing(f), voicing(f+M/2)); + for i=f:f+M/2-1 + printf(" f: %d v: %d v_: %d Wo: %f Wo_: %f\n", i, voicing(i), voicing_(i), model(i,1), model_(i,1)); + end + #} +endfunction + + +function [rate_K_vec_corrected orig_error error nasty_error_log nasty_error_m_log] = correct_rate_K_vec(rate_K_vec, rate_K_sample_freqs_kHz, AmdB, AmdB_, K, Wo, L, Fs) + + % aliasing correction -------------------------------------- + + % The mel sample rate decreases as frequency increases. Look for + % any regions above 1000Hz where we have missed definition of a + % spectral peak (formant) due to aliasing. Adjust the rate K + % sample levels to restore peaks. Theory is that correct + % definition of a formant is less important than the frequency of + % the formant. As long as we define a formant in that general + % frequency area it will sound OK. + + Am_freqs_kHz = (1:L)*Wo*Fs/(2000*pi); + + % Lets see where we have made an error + + error = orig_error = AmdB(1:L) - AmdB_(1:L); + + Ncorrections = 3; % maximum number of rate K samples to correct + error_thresh = 3; % only worry about errors larger than thresh + + start_m = floor(L*1000/(Fs/2)); + error(1:start_m) = 0; % first 1000Hz is densly sampled so ignore + nasty_error_m_log = []; nasty_error_log = []; + + + rate_K_vec_corrected = rate_K_vec; + for i=1:Ncorrections + [mx mx_m] = max(error); + + if mx > error_thresh + nasty_error_log = [nasty_error_log mx]; + nasty_error_m_log = [nasty_error_m_log mx_m]; + + % find closest rate K sample to nasty error + + nasty_error_freq = mx_m*Wo*Fs/(2*pi*1000); + [tmp closest_k] = min(abs(rate_K_sample_freqs_kHz - nasty_error_freq)); + rate_K_vec_corrected(closest_k) = AmdB(mx_m); + + % zero out error in this region and look for another large error region + + k = max(1, closest_k-1); + rate_K_prev_sample_kHz = rate_K_sample_freqs_kHz(k); + k = min(K, closest_k+1); + rate_K_next_sample_kHz = rate_K_sample_freqs_kHz(k); + + [tmp st_m] = min(abs(Am_freqs_kHz - rate_K_prev_sample_kHz)); + [tmp en_m] = min(abs(Am_freqs_kHz - rate_K_next_sample_kHz)); + if closest_k == K + en_m = L; + end + error(st_m:en_m) = 0; + end + end +endfunction + + +% Given a vector of rate K samples, deltaf encodes/decodes delta +% amplitude using a huffman encoder, returning quantised samples and +% bit stream + +function [rate_K_vec_ bits] = deltaf_quantise_rate_K_huff(rate_K_vec, E, nbits_max) + K = length(rate_K_vec); + nbits_remaining = nbits_max; + + % start with k=3, around 250Hz, we assume that's quantised as the + % mean frame energy, as samples before that might be stuck in the + % HPF. + + rate_K_vec_ = zeros(1,K); + rate_K_vec_(3) = E; + + % encoding of differences + + levels = [0 6 -6 -12 12]; symbols = {[0 0],[1 0],[1 1],[0 1 0;],[0 1 1]}; + + % this is pretty coarse (note no 0dB level) but sounds OK + + %levels = [-6 +6 -12 +12]; symbols = {[0 0],[1 0],[1 1],[0 1]}; + + % move backwards to get target for first two samples + + bits = []; + for m=2:-1:1 + target = rate_K_vec(m) - rate_K_vec_(m+1); + [target_ best_i] = quantise(levels, target); + bits = [bits symbols{best_i}]; + nbits_remaining -= length(symbols{best_i}); + rate_K_vec_(m) = rate_K_vec_(m+1) + target_; + end + + % then forwards for rest of the target samples + + for m=4:K + target = rate_K_vec(m) - rate_K_vec_(m-1); + if nbits_remaining >= 3 + [target_ best_i] = quantise(levels, target); + bits = [bits symbols{best_i}]; + nbits_remaining -= length(symbols{best_i}); + elseif nbits_remaining == 2 + [target_ best_i] = quantise(levels(1:3), target); + bits = [bits symbols{best_i}]; + nbits_remaining = 0; + elseif nbits_remaining < 2 + target_ = -6; % if we've run out of bits just tail off + end + rate_K_vec_(m) = target_ + rate_K_vec_(m-1); + %printf("m: %d length: %d nbits_remaining: %d\n", m, length(bits), nbits_remaining); + end + + bits = [bits zeros(1,nbits_remaining)]; +endfunction + + +% Given a vector of bits, and the k=3 frame amplitude sample E, decode to a +% rate K vector of huffman encoded quantised spectral amplitude samples + +function rate_K_vec_ = deltaf_decode_rate_K_huff(bits, E, K) + + % start with k=3, around 250Hz, we assume that's quantised as the + % mean frame energy, as samples before that might be stuck in the + % HPF. + + rate_K_vec_ = zeros(1,K); + rate_K_vec_(3) = E; + + % move backwards to get target for first two samples + + for m=2:-1:1 + [target_ bits] = deltaf_dec_one_symbol(bits); + rate_K_vec_(m) = rate_K_vec_(m+1) + target_; + end + + % then forwards for rest of the target samples + + for m=4:K + if length(bits) >= 2 + [target_ bits] = deltaf_dec_one_symbol(bits); + else + target_ = -6; % if we've run out of bits just tail off + end + rate_K_vec_(m) = target_ + rate_K_vec_(m-1); + %printf("m: %d nbits_remaining: %d\n", m, length(bits)); + end +endfunction + + +% decode one symbol and truncate bits array + +function [target_ bits] = deltaf_dec_one_symbol(bits) + levels = [0 6 -6 -12 12]; symbols = {[0 0],[1 0],[1 1],[0 1 0;],[0 1 1]}; + + two_bits = bits(1:2); + + if two_bits == [0 1] + if length(bits) > 2 + % OK a three bit code + if bits(3) == 0 + target_ = levels(4); + else + target_ = levels(5); + end + bits = bits(4:end); + else + # we must have a bit error + target_ = levels(5); + bits = []; + end + else + if two_bits == [0 0] + target_ = levels(1); + end + if two_bits == [1 0] + target_ = levels(2); + end + if two_bits == [1 1] + target_ = levels(3); + end + bits = bits(3:end); + end +endfunction + + +function rate_K_vec_ = dct_quantise_rate_K(rate_K_vec) + K = length(rate_K_vec); + D = dct(rate_K_vec); + printf("\n"); + D_ = 8*round(D/8); + D_(1) = D(1); + for d=1:K + printf("%4d",round(D(d)/8)); + end + rate_K_vec_ = idct(D_); +endfunction + + +function un(sl) + U = unique(sl,"rows") + cnt = []; + for v=1:length(U) + sm = sum(ismember(sl,U(v,:),"rows")); + cnt = [cnt sm]; + end + s = sort(cnt, "descend"); + figure(1); clf; subplot(211); plot(s); subplot(212); plot(cumsum(s)); +endfunction + + +% Joint Wo and LPC energy vector quantiser developed by Jean-Marc Valin. +% Octave port of functions in quantise.c + +function w = compute_weights2(x, xp) + w(1) = 30; + w(2) = 1; + if x(2) < 0 + w(1) *= 0.6; + w(2) *= 0.3; + end + if x(2) < -10 + w(1) *= 0.3; + w(2) *= 0.3; + end + + % Higher weight if pitch is stable + + if abs(x(1)-xp(1)) < 0.2 + w(1) *= 2; + w(2) *= 1.5; + elseif abs(x(1)-xp(1)) > 0.5 + % Lower if not stable + w(1) *= 0.5; + end + + % Lower weight for low energy + + if x(2) < xp(2) - 10 + w(2) *= 0.5; + end + if x(2) < xp(2) - 20 + w(2) *= .5; + end + + % Square the weights because it's applied on the squared error + + w(1) *= w(1); + w(2) *= w(2); +endfunction + + +function [Wo_ E_ xq] = quantise_WoE(Wo, E, xq, vq) + ge_coeff = [0.8 0.9]; + + % VQ is only trained for Fs = 8000 Hz + + Fs = 8000; + Fo_min = 50; Fo_max = 400; + P_min = Fs/Fo_max; P_max = Fs/Fo_min; + Wo_min = 2*pi/P_max; + Wo_max = 2*pi/P_min; + + E = max(1,E); + + x(1) = log10(Wo/Wo_min)/log10(2); + x(2) = 10.0*log10(1e-4 + E); + + w = compute_weights2(x, xq); + w = [30 1]; + err = x - ge_coeff .* xq; + err_ = quantise(vq, err, w); + %err_ = err; + xq = ge_coeff .* xq + err_; + + #{ + x = log2(4000*Wo/(PI*50)); + 2^x = 4000*Wo/(PI*50) + Wo = (2^x)*(PI*50)/4000; + #} + + Wo_ = (2 ^ xq(1))*Wo_min; + + Wo_ = min(Wo_max,Wo_); + Wo_ = max(Wo_min,Wo_); + + E_ = 10.0 ^ (xq(2)/10.0); + E_ = max(1,E_); +endfunction + + +% Find distance of each vector in codebook using gain shape search +% Uses discrete values, in unit range + +function dist_gain_shape(codebook, target) + [entries K] = size(codebook); + dist = zeros(entries,1); + best = zeros(entries,K); + for i=1:entries + min_dist = 1000; + for g=-10:20 + adist = sum(abs(target - (codebook(i,:) + g))); + if adist < min_dist + min_dist = adist; + min_g = g; + end + end + dist(i) = min_dist; + best(i,:) = codebook(i,:) + min_g; + end + figure(1); clf; plot(dist); + axis([1 entries 0 K]) + target + [tmp min_i] = min(dist); + target - best(min_i,:) +endfunction + + +% As above but without the gain + +function dist_shape(codebook, target) + [entries K] = size(codebook); + dist = zeros(entries,1); + for i=1:entries + dist(i) = sum(abs(target - (codebook(i,:)))); + end + figure(1); clf; plot(dist); + axis([1 entries 0 K]) + target + [tmp min_i] = min(dist); + target - codebook(min_i,:) +endfunction + + +% Given a vector of rate K samples, deltaf encodes/decodes delta +% amplitude using a fixed bit/sample allocation, returning quantised +% samples and bit stream + +function [rate_K_vec_ bits] = deltaf_quantise_rate_K_fixed(rate_K_vec, E, nbits_max) + K = length(rate_K_vec); + + % start with k=3, around 250Hz, we assume that's quantised as the + % mean frame energy, as samples before that might be stuck in the + % HPF. + + rate_K_vec_ = zeros(1,K); + rate_K_vec_(3) = E; + + % encoding of differences + + levels_2bit = [-3 +3 -9 9]; + levels_3bit = [0 -6 +6 -12 +12 -18 +18 -24]; + + % move backwards to get target for first two samples + + bits = []; + for m=2:-1:1 + target = rate_K_vec(m) - rate_K_vec_(m+1); + [target_ best_i] = quantise(levels_2bit, target); + % printf("m: %d target_ %f best_i: %d\n", m, target_, best_i); + bits = [bits index_to_bits(best_i-1, 2)]; + rate_K_vec_(m) = rate_K_vec_(m+1) + target_; + end + + % then forwards for rest of the target samples + + for m=4:9 + target = rate_K_vec(m) - rate_K_vec_(m-1); + [target_ best_i] = quantise(levels_3bit, target); + bits = [bits index_to_bits(best_i-1, 3)]; + rate_K_vec_(m) = target_ + rate_K_vec_(m-1); + end + for m=10:K + target = rate_K_vec(m) - rate_K_vec_(m-1); + [target_ best_i] = quantise(levels_2bit, target); + bits = [bits index_to_bits(best_i-1, 2)]; + rate_K_vec_(m) = target_ + rate_K_vec_(m-1); + end + assert(length(bits) == nbits_max); +endfunction + + +% Given a vector of bits, and the k=3 frame amplitude sample E, decode +% to a rate K vector of encoded quantised spectral amplitude samples +% with fixed bit allocation + +function rate_K_vec_ = deltaf_decode_rate_K_fixed(bits, E, K) + + % start with k=3, around 250Hz, we assume that's quantised as the + % mean frame energy, as samples before that might be stuck in the + % HPF. + + rate_K_vec_ = zeros(1,K); + rate_K_vec_(3) = E; + + levels_2bit = [-3 +3 -9 9]; + levels_3bit = [0 -6 +6 -12 +12 -18 +18 -24]; + + % move backwards to get target for first two samples + + for m=2:-1:1 + index = bits_to_index(bits(1:2),2) + 1; + target_ = levels_2bit(index); + rate_K_vec_(m) = rate_K_vec_(m+1) + target_; + bits = bits(3:end); + end + + % then forwards for rest of the target samples + + for m=4:9 + index = bits_to_index(bits(1:3), 3) + 1; + target_ = levels_3bit(index); + rate_K_vec_(m) = rate_K_vec_(m-1) + target_; + bits = bits(4:end); + end + for m=10:K + index = bits_to_index(bits(1:2), 2) + 1; + target_ = levels_2bit(index); + rate_K_vec_(m) = rate_K_vec_(m-1) + target_; + if m != K + bits = bits(3:end); + end + end + +endfunction + + +#{ + DCT coeff scalar quantiser, analysis stage. Plots PDFs, returns a + vector of quantiser levels. + + Input is matrix of K columns row-vectors that represent one frame of + spectrum at rate K. +#} + +function quantiser_levels = build_dct_quantiser(train_surf, qstepdB=1) + [nr K] = size(train_surf); + + % remove low energy rows + + m = mean(train_surf'); + figure(4); plot(m); + ind = find(m>10); + train_surf = train_surf(ind,:); + nr2 = length(ind); + %nr2 = nr; + printf("K: %d nr: %d nr2: %d\n", K, nr, nr2); + + D = dct(train_surf')'; + + figure(1); clf; + plot(std(D)); + title('Std Dev of each DCT coeff'); + + figure(2); clf; + nr = ceil(sqrt(K)); nc = ceil(K/nr); + + Tbits = 0; quantiser_levels = []; + + for k=1:K + subplot(nr, nc, k) + v = D(:,k); + printf("k: %d mean %5.2f std: %5.2f min: %5.2f max: %5.2f\n", k, mean(v), std(v), min(v), max(v)); + q_max = mean(v)+2*std(v); q_min = mean(v)-2*std(v); + levels = q_min:qstepdB:q_max; + nlevels = length(levels); + Tbits += log2(nlevels); + printf(" quantiser: min: %4.2f max: %4.2f nlevels: %d bits: %2.1f\n", q_min, q_max, nlevels, log2(nlevels)); + + % limit for histogram + + v = min(v, q_max); + v = max(v, q_min); + [nn xx] = hist(v,50); + bar (xx, nn) + + v_ = zeros(nr2,1); + for r=1:nr2 + v_(r) = quantise(levels, v(r)); + end + + E(:,k) = v_; + + quantiser_levels = [quantiser_levels; q_min q_max]; + end + + train_surf_ = idct(E')'; + error = train_surf_ - train_surf; + mse = mean(mean(error .^ 2)); + figure(3) + mesh(error(1:1000,:)) + printf("mse: %4.2f Tbits: %d\n", mse, Tbits); +endfunction + + +function bits = bits_for_this_symbol(symbols, s) + % bits/sym for top 5, assume rest 5 bits + % 11 10 00 010 0110 0111 + bps = [ 2 2 2 3 4 4]; + + ind = find(symbols == s); + if ind <= length(bps) + bits = bps(ind); + else + bits = 5; + end +endfunction + + +function [surf_ D E] = dct_quantiser(surf, quantiser_levels, method=1, qstepdB=1, limit=0) + [nr K] = size(surf); + + printf("K: %d nr: %d\n", K, nr); + + % clamp lower limit of mean to 10dB + #{ + m = mean(surf')'; + surf -= m; + m = min(10,m); + surf += m; + #} + + D = dct(surf')'; + + Tbits = 0; + + if method == 1 + for k=1:K + q_min = quantiser_levels(k,1); q_max = quantiser_levels(k,2); + levels = q_min:qstepdB:q_max; + nlevels = length(levels); + if nlevels == 1 + levels = (q_max + q_min)/2; + end + if nlevels == 2 + m = (q_max + q_min)/2; + levels = [(m - qstepdB/2) (m + qstepdB/2)]; + end + if nlevels == 3 + m = (q_max + q_min)/2; + levels = [q_min m q_max]; + end + Tbits += log2(nlevels); + printf(" quantiser: min: %4.2f max: %4.2f nlevels: %d bits: %2.1f\n", q_min, q_max, nlevels, log2(nlevels)); + + v_ = zeros(nr,1); + v = D(:,k); + for r=1:nr + v_(r) = quantise(levels, v(r)); + end + + E(:,k) = v_; + end + end + + if method == 2 + % quantise + E = round(D/qstepdB); + % count symbols + symbols = []; count = []; + [nr nc]= size(E); + if limit + nc = limit-1; + end + for r=1:nr + for c=2:nc + s = E(r,c); + ind = find(symbols == s); + if length(ind) + count(ind)++; + else + symbols = [symbols s]; + count(length(symbols)) = 1; + end + end + end + + % sort into order + + [count ind] = sort(count, "descend"); + symbols = symbols(ind); + + % estimate bits/symbol by huffman coding direct and differences. Clever part is we + % choose method based on min bits, which I guess costs an extra bit. It's clever + % because we need direct for quick transitions, but during steady voiced parts the + % changes are small so coding differences does a good job. + + Tbits = 0; Nsyms = 0; + Nbits_direct_log = Nbits_diff_log = Nbits_log = zeros(1,nr); + + for r=3:nr + Nbits_direct = 0; Nbits_diff = 0; + for c=2:nc + s_direct = E(r,c); + s_diff = E(r,c) - E(r-2,c); + Nbits_direct += bits_for_this_symbol(symbols, s_direct); + Nbits_diff += bits_for_this_symbol(symbols, s_diff); + Nsyms++; + end + Nbits_direct_log(r) += Nbits_direct; + Nbits_diff_log(r) += Nbits_diff; + Nbits_log(r) += min(Nbits_direct, Nbits_diff); + + Tbits += min(Nbits_direct, Nbits_diff); + end + figure(5); clf; plot(Nbits_direct_log(3:end),'b'); + smooth4 = conv(Nbits_log(3:end),[1 0 1 0 1 0 1 0])/4; + hold on; plot(Nbits_diff_log(3:end),'g'); plot(Nbits_log(3:end),'r'); hold off; + figure(6); clf; plot(smooth4,'m'); + + ent = 0; + for i=1:length(symbols) + wi = count(i)/sum(count); + printf("%2d %4d %6d %4.3f %4.3f\n", i, symbols(i), count(i), wi, -wi*log2(wi)); + ent += -wi*log2(wi); + end + printf("mean bits/frame: %3.1f mean bits/sym: %3.2f entropy: %3.2f bits\n", mean(Nbits_log), Tbits/Nsyms, ent); + if limit + E(:, limit:end) = 0; + end + E *= qstepdB; + end + + surf_ = idct(E')'; + error = surf_ - surf; + mse = mean(mean(error .^ 2)); + figure(3) + [nr nc] = size(error); + nr = min(nr,100); + mesh(error(1:nr,:)) + figure(4) + mesh(D(25:50,1:10)) + printf("mse: %4.2f Tbits: %d\n", mse, Tbits); +endfunction + + +# Generate a huffman code from a matrix (surface) of spectral +# magnitudes. The Huffman code can be used for encoding the DCT of the +# rows of the surface (mag samples of each frame). +# +# Set qstepdB to the quanisation step size, e.g. 3 or 6dB is about where we can +# notice the effect of quantisation of the DCTs (and spectral magnitides) +# +# Set "max_dcts" to max number of dcts coeffs you will quantise, as this affects +# probabilities (we get many zeros in high order coeffs) +# +# octave:49> newamp2; p_table = design_huffman_enc(all_surf(:,2:35), 6, 18); + +function [symbols huff] = design_huffman_enc(surf, qstepdB=6, max_dcts=18) + [nr K] = size(surf); + + printf("K: %d nr: %d qstepdB: %3.2f\n", K, nr, qstepdB); + + D = dct(surf')'; + + % quantise to step size in dB + + E = round(D/qstepdB); + + % count symbols, ignoring first (DC) coeff which we will scalar quantise + + symbols = []; count = []; + [nr nc]= size(E); + if max_dcts + nc = max_dcts+1; + printf("cols 2 to %d (%d total)\n", nc, nc-2+1); + end + for r=1:nr + for c=2:nc + s = E(r,c); + ind = find(symbols == s); + if length(ind) + count(ind)++; + else + symbols = [symbols s]; + count(length(symbols)) = 1; + end + end + end + + % sort into order + + [count ind] = sort(count, "descend"); + symbols = symbols(ind); + + Nsymbols = sum(count); + printf("Nsymbols = %d\n", Nsymbols); + + % estimate entropy + + H = 0; + p_table = []; + printf(" i symb count prob wi\n"); + for i=1:length(symbols) + wi = count(i)/Nsymbols; p_table = [p_table wi]; + printf("%2d %4d %6d %4.3f %4.3f\n", i, symbols(i), count(i), wi, -wi*log2(wi)); + H += -wi*log2(wi); + end + + % design Huffman code + + huff = huffmandict (1, p_table, 1); + L = 0; + for i=1:length(huff) + L += p_table(i)*length(huff{i}); + end + + printf("Entropy: %3.2f bits/symbol Huffman code: %3.2f bits/symbol\n", H, L); +endfunction + + +# Huffman encodes (and decodes) a symbol, if input symbols is out of +# range of quantiser we choose nearest symbol + +function [s_ bits] = huffman_enc_symb(symbols, huff, s) + min_dist = 1E32; ind = 1; + for i=1:length(symbols) + dist = (symbols(i) - s) .^ 2; + if dist < min_dist + ind = i; + min_dist = dist; + end + end + + s_ = symbols(ind); + bits = huff{ind}; +endfunction + + +% Huffman decode a bit stream of symbols. Terminates list if we get a +% bit error in decode + +function [s_ error_flag] = huffman_decode_bitstream(symbols, huff, bits) + error_flag = 0; + min_cw_length = length(huff{1}); + match = 1; + s_ = []; + + while ((length(bits) >= min_cw_length) && match) + + % search through list of codes to find a match + + match = 0; + for i=1:length(symbols) + cw = huff{i}; lcw = length(cw); + if (length(bits) >= lcw) & !match + match = isequal(cw, bits(1:lcw)); + if match + s_ = [s_ symbols(i)]; + bits = bits(lcw+1:end); + end + end + end + + % if no match found, say due to bit error, we drop out of loop + end + + if (length(bits) > min_cw_length) && !match + error_flag = 1; + end +endfunction + + +% Huffman encodes (and decodes) the DCTS of a surface, except first (DCT) coeff + +function [surf_ dc bits_surf] = huffman_encode_surf(surf, qstepdB=6, max_dcts=18, max_bits=100, symbols, huff) + dec = 2; + [nr K] = size(surf); + + % allow room for direct/diff bit + + max_bits_huff = max_bits - 1; + + printf("K: %d nr: %d qstepdB: %3.2f max_dcts: %d\n", K, nr, qstepdB, max_dcts); + + % limit num DCTs we encode (nc) to less than K to save bits, high + % order DCTs tend to be small + + nc = K; + if max_dcts + nc = max_dcts+1; + printf("cols 2 to %d (%d total)\n", nc, nc-2+1); + end + + % DCT and initial quantisation to step size + + D = dct(surf')'; + E = D/qstepdB; + dc = E(:,1); + + % bit stream for each row (frame) is stored in a cell array + + bits_surf = cell(nr,1); + Nbits_log = Nbits_direct_log = Nbits_diff_log = zeros(1,nr); + E_ = zeros(nr,K); prev_row = zeros(1,nc); + Tbits = Nsyms = 0; + E_dec = zeros(nr,K); + + % encode each row + + for r=1:dec:nr + bits_direct_row = []; bits_diff_row = []; Nbits_direct = 0; Nbits_diff = 0; + + % DC just copied directly, quantised externally + + E_(r,1) = E(r,1); E_dec(r,1) = E(r,1); + + direct_row_ = diff_row_ = zeros(1,nc); + ndir_row = ndiff_row = 0; len_bits_direct_row = len_bits_diff_row = 0; + + for c=2:nc + + % try direct quantisation + + if len_bits_direct_row < max_bits_huff + s_direct = E(r,c); + [s_direct_ bits_direct] = huffman_enc_symb(symbols, huff, s_direct); + if len_bits_direct_row + length(bits_direct) <= max_bits_huff + % can we squeeze in bits for latest symbol? + bits_direct_row = [bits_direct_row bits_direct]; + direct_row_(c) = s_direct_; + ndir_row++; + len_bits_direct_row = len_bits_direct_row + length(bits_direct); + else + % can't fit any more symbols? Then signal we are finished + len_bits_direct_row = max_bits_huff; + end + end + + % try differential quantisation + + if len_bits_diff_row < max_bits + s_diff = E(r,c) - prev_row(c); + [s_diff_ bits_diff] = huffman_enc_symb(symbols, huff, s_diff); + if len_bits_diff_row + length(bits_diff) <= max_bits_huff + bits_diff_row = [bits_diff_row bits_diff]; + diff_row_(c) = s_diff_; + ndiff_row++; + len_bits_diff_row = len_bits_diff_row + length(bits_diff); + else + len_bits_diff_row = max_bits_huff; + end + end + + Nsyms++; + end + + % choose quant method with the least number of bits + + Nbits_direct = length(bits_direct_row); Nbits_diff = length(bits_diff_row); + Nbits_direct_log(r) = Nbits_direct; Nbits_diff_log(r) = Nbits_diff; + e_direct = sum((direct_row_(2:nc) - E(r,2:nc)) .^ 2); + e_diff = sum((diff_row_(2:nc) + prev_row(2:nc) - E(r,2:nc)) .^ 2); + + %if Nbits_direct < Nbits_diff + if e_direct <= e_diff + bits_surf{r} = [1 bits_direct_row]; + Tbits += Nbits_direct; + E_(r,2:nc) = direct_row_(2:nc); + Nbits_log(r) = Nbits_direct; diff_flag(r) = 0; + else + bits_surf{r} = [0 bits_diff_row]; + Tbits += Nbits_diff; + E_(r,2:nc) = diff_row_(2:nc) + prev_row(2:nc); + Nbits_log(r) = Nbits_diff; diff_flag(r) = 1; + end + + % pad out to max_bits + + bits_surf{r} = [bits_surf{r} zeros(1,max_bits - length(bits_surf{r}))]; + + % test huffman bitstream decoder + + bits_dec = bits_surf{r}; + [s_dec error_flag] = huffman_decode_bitstream(symbols, huff, bits_dec(2:end)); + % printf("r: %d bits_dec(1): %d l: %d error_flag: %d\n", r, bits_dec(1), length(s_dec), error_flag); + row_dec = zeros(1,nc); + row_dec(2:length(s_dec)+1) = s_dec; + if bits_dec(1) + E_dec(r,2:nc) = row_dec(2:nc); + else + E_dec(r,2:nc) = row_dec(2:nc) + prev_row(2:nc); + end + assert(E_dec(r,2:nc) == E_(r,2:nc)); + + % update memory - note we use quantised symbols as that's what we have at decoder + + if r >=3 + prev_row = E_(r,1:nc); + + % if we are decimating, interpolate DCTs to get original frame rate + + if dec == 2 + E_(r-1,:) = 0.5*E_(r-2,:) + 0.5*E_(r,:); + end + + end + + end + + % transform back to surface and calculate MSE + + E_ *= qstepdB; + surf_ = idct(E_')'; + + error = surf_ - surf; + mse = mean(mean(error(1:dec:end,:) .^ 2)); + + figure(1); clf; + [nr nc] = size(error); + nr = min(nr,300); + mesh(error(1:dec:nr,:)) + + figure(2); + subplot(122,"position",[0.7 0.05 0.25 0.85]) + hist(mean(error(1:dec:end,:).^2,2)); + subplot(121,"position",[0.1 0.05 0.5 0.85]) + plot(mean(error(1:dec:end,:).^2,2)); + title('Mean squared error per frame'); + + figure(3); + subplot(122,"position",[0.7 0.05 0.25 0.9]) + hist(Nbits_log(1:dec:end)); + subplot(121,"position",[0.1 0.05 0.5 0.9]) + plot(diff_flag(1:dec:end)*10,'b;diff flag;'); hold on; plot(Nbits_log(1:dec:end),'g;Nbits/fr;'); hold off; + + printf("mse: %4.2f dB^2 mean bits/frame: %3.1f mean bits/sym: %3.1f\n", mse, mean(Nbits_log(1:dec:end)), Tbits/Nsyms); +endfunction + + +% Returns a quantised surface from matrix of bist streams for each frame + +function surf_ = huffman_decode_surf(K=34, qstepdB=6, max_dcts=18, symbols, huff, bits_surf, dc) + dec = 2; + [nr tmp] = size(bits_surf); + + printf("K: %d nr: %d qstepdB: %3.2f max_dcts: %d\n", K, nr, qstepdB, max_dcts); + + % limit num DCTs we encode (nc) to less than K to save bits, high + % order DCTs tend to be small + + nc = K; + if max_dcts + nc = max_dcts+1; + printf("cols 2 to %d (%d total)\n", nc, nc-2+1); + end + + prev_row = zeros(1,nc); + Tbits = Nsyms = 0; + E_dec = zeros(nr,K); + + % decode each row + + for r=1:dec:nr + bits_direct_row = []; bits_diff_row = []; Nbits_direct = 0; Nbits_diff = 0; + + % DC is quantised externally + + E_dec(r,1) = dc(r); + + % huffman bitstream decoder + + bits_dec = bits_surf{r}; + [s_dec error_flag] = huffman_decode_bitstream(symbols, huff, bits_dec(2:end)); + row_dec = zeros(1,nc); + row_dec(2:length(s_dec)+1) = s_dec; + if bits_dec(1) + E_dec(r,2:nc) = row_dec(2:nc); + else + E_dec(r,2:nc) = row_dec(2:nc) + prev_row(2:nc); + end + + % update memory for diff decoder + + if r >=3 + prev_row = E_dec(r,1:nc); + + % if we are decimating, interpolate DCTs to get original frame rate + + if dec == 2 + E_dec(r-1,:) = 0.5*E_dec(r-2,:) + 0.5*E_dec(r,:); + end + end + + end + + % transform back to surface and calculate MSE + + E_dec *= qstepdB; + surf_ = idct(E_dec')'; +endfunction + diff --git a/libcodec2-android/src/codec2/octave/newamp2_batch.m b/libcodec2-android/src/codec2/octave/newamp2_batch.m new file mode 100644 index 0000000..8764099 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/newamp2_batch.m @@ -0,0 +1,990 @@ +% newamp2_batch.m +% +% Copyright David Rowe 2018 +% This program is distributed under the terms of the GNU General Public License +% Version 2 +% + +#{ + + Octave script to batch process model parameters using the new + amplitude model, version 2. Outputs another set of model parameters + that can be fed to c2sim for listening tests. The companion + newamp2_fbf.m script is used to visualise the processing frame by frame + + c2sim -> dump files -> newamp1_batch.m -> output model params -> c2sim -> play + + Usage: + + build codec2 with -DDUMP - see codec2-dev/README, then: + + ~/codec2-dev/build_linux/src$ ./c2sim ../../raw/hts1a.raw --dump hts1a + $ cd ~/codec2-dev/octave + octave:14> newamp2_batch("../build_linux/src/hts1a") + ~/codec2-dev/build_linux/src$ ./c2sim ../../raw/hts1a.raw --pahw hts1a -o - | aplay -f S16 + + 1/ Bit stream development: + + $ ./c2sim ../../raw/vk5qi.raw --framelength_s 0.0125 --dump vk5qi_l --phase0 --lpc 10 --dump_pitch_e vk5qi_l_pitche.txt + octave:526> newamp2_batch("../build_linux/src/vk5qi_l","output_prefix","../build_linux/src/vk5qi_l_dec", "mode", "encdec"); + $ ./c2sim ../../raw/vk5qi.raw --framelength_s 0.0125 --pahw vk5qi_l_dec --hand_voicing vk5qi_l_dec_v.txt -o - | play -t raw -r 8000 -s -2 - + + 2/ Generate a bit stream file: + + octave:101> newamp2_batch("../build_linux/src/vk5qi_l","no_output","mode", "enc", "bitstream", "vk5qi_2200_enc.c2"); + + 3/ Decode a bit stream file: + + octave:101> newamp2_batch("../build_linux/src/vk5qi_l","output_prefix","../build_linux/src/vk5qi_l_decbs", "mode", "dec", "bitstream", "vk5qi_2200_enc.c2"); + ./c2sim ../../raw/vk5qi.raw --framelength_s 0.0125 --pahw vk5qi_l_decbs --hand_voicing vk5qi_l_decbs_v.txt -o - | play -t raw -r 8000 -s -2 - + + DCT based HQ/200 Candidate D (Sep 2018): + + 1/ (h and s) trained: + + load train120_surf.mat + newamp2; [s h] = design_huffman_enc(train120_surf, qstepdB=6, max_dcts=18); + + 2/ Quantise all: + + all_surf_l = newamp2_batch("../build_linux/src/all_l", "output_prefix", "../build_linux/src/all_surf_l", "mode", "linear"); + newamp2; s_ = huffman_encode_surf(all_surf_l(:,2:35), qstepdB=6, max_dcts=20, max_bits=45, s, h); + all_surf_l_ = all_surf_l; all_surf_l_(:,:) = 0; all_surf_l_(:,2:35)=s_; + ewamp2_batch("../build_linux/src/all_l", "output_prefix", "../build_linux/src/all_surf_l_45a", "mode", "linear", "surf_in", all_surf_l_); + $ ./c2sim ../../wav/all.wav --framelength_s 0.0125 --pahw all_surf_l_45a -o - | aplay -f S16_LE + + 3/ Testing huffman encoder and decoder: + + newamp2; [s_ dc bits] = huffman_encode_surf(hts2a_surf_l(:,2:35), qstepdB=6, max_dcts=20, max_bits=45, s, h); + newamp2; s_dec = huffman_decode_surf(34, qstepdB=6, max_dcts=20, s, h, bits, dc); + +#} + + +function surface = newamp2_batch(input_prefix, varargin) + newamp2; + more off; + + max_amp = 160; Fs = 8000; + + % defaults + + synth_phase = output = 1; + output_prefix = input_prefix; + mode = "linear"; + correct_rate_K_en = 0; quant = ""; vq_en = 0; M = 1; mask_en = 0; + surface_in_en = 0; + + % parse variable argument list + + if (length (varargin) > 0) + + % check for the "output_prefix" option + + ind = arg_exists(varargin, "output_prefix"); + if ind + output_prefix = varargin{ind+1}; + end + + ind = arg_exists(varargin, "mode"); + if ind + mode = varargin{ind+1}; + end + + ind = arg_exists(varargin, "bitstream"); + if ind + bitsream_filename = varargin{ind+1}; + end + + ind = arg_exists(varargin, "no_output"); + if ind + output = 0; + synth_phase = 0; + end + + if arg_exists(varargin, "deltaf") + quant = "deltaf"; + end + if arg_exists(varargin, "dct") + quant = "dct"; + end + if arg_exists(varargin, "dtlimit") + quant = "dtlimit"; + end + if arg_exists(varargin, "step") + quant = "step"; + end + + ind = arg_exists(varargin, "vq"); + if ind + quant = "vq"; + vq_en = 1; vq_name = varargin{ind+1}; vq_st = varargin{ind+2}; vq_en = varargin{ind+3}; + end + + ind = arg_exists(varargin, "M"); + if ind + M = varargin{ind+1}; + end + + ind = arg_exists(varargin, "mask"); + if ind + mask_en = 1; + error_filename = varargin{ind+1}; + end + + correct_rate_K_en = arg_exists(varargin, "correct_rate_K"); + + ind = arg_exists(varargin, "surf_in"); + if ind + surface_in_en = 1; + surface_in = varargin{ind+1}; + end + + end + + printf("output: %d", output); + if (output) + printf(" output_prefix: %s", output_prefix); + end + printf(" mode: %s", mode); + printf(" correct_rate_K: %d quant: %s vq_en: %d M: %d\n", correct_rate_K_en, quant, vq_en, M); + if vq_en + printf("vq_name: %s vq_st: %d vq_en: %d\n", vq_name, vq_st, vq_en); + end + if surface_in_en + printf("surface_in_en: %d\n", surface_in_en); + end + + model_name = strcat(input_prefix,"_model.txt"); + model = load(model_name); + [frames nc] = size(model); + printf("frames: %d\n", frames); + + voicing_name = strcat(input_prefix,"_pitche.txt"); + voicing = zeros(1,frames); + + if exist(voicing_name, "file") == 2 + printf("loading: %s\n", voicing_name); + pitche = load(voicing_name); + voicing = pitche(:, 3); + end + + % Choose experiment to run test here ----------------------- + + if (strcmp(mode,"linear") || strcmp(mode,"mel")) && !surface_in_en + args.resampler = mode; + + vqs.en=vq_en; + if vq_en + load(vq_name); + vqs.st=vq_st;vqs.m=5; + vqs.table = avq; + end + args.vq = vqs; + args.quant = quant; + args.correct_rate_K_en = correct_rate_K_en; + args.M = M; + args.plots = 1; + [model_ surface sd_log] = experiment_resample(model, args); + end + + # resample a linear surface, used to test deep learning ideas + + if strcmp(mode,"linear") && surface_in_en + [model_ surface] = resample_surf(model, surface_in); + end + + # combined bitstream encoded and decoder for development + + if strcmp(mode,"encdec") + [bits rate_K_surface_] = candc_encoder(model, voicing); + [model_ voicing_ rate_K_surface_dec_] = candc_decoder(bits); + if exist("voicing_", "var") + printf("voicing_ exists!\n"); + end + % sanity check - should be a flat surface + figure(7); + en = 100; + X = rate_K_surface_(1:en,:) - rate_K_surface_dec_(1:en,:); + mesh(X(1:2:en,:)) + end + + # stand alone model file -> bit stream file cand C encoder + + if strcmp(mode,"enc") + [bits rate_K_surface_] = candc_encoder(model, voicing); + fbit = fopen(bitsream_filename,"wb"); + fwrite(fbit, bits, "uchar"); + fclose(fbit); + end + + # stand alone model file -> bit stream file cand D encoder + + if strcmp(mode,"encd") + [bits rate_K_surface_] = candd_encoder(model, voicing); + fbit = fopen(bitsream_filename,"wb"); + fwrite(fbit, bits, "uchar"); + fclose(fbit); + end + + # stand alone bit stream file -> model file decoder + + if strcmp(mode,"dec") + fbit = fopen(bitsream_filename,"rb"); + bits = fread(fbit, "uchar")'; + fclose(fbit); + if mask_en + % optional error masking, read in error file, count errors/frame + errors_per_codec_frame = count_errors(error_filename); + end + [model_ voicing_ rate_K_surface_dec_] = candc_decoder(bits, errors_per_codec_frame); + figure(1); mesh(rate_K_surface_dec_(1:240,:)) + end + + if strcmp(mode,"decd") + fbit = fopen(bitsream_filename,"rb"); + bits = fread(fbit, "uchar")'; + fclose(fbit); + errors_per_codec_frame = []; + if mask_en + % optional error masking, read in error file, count errors/frame + errors_per_codec_frame = count_errors(error_filename); + end + [model_ voicing_ rate_K_surface_dec_] = candd_decoder(bits, errors_per_codec_frame); + figure(1); mesh(rate_K_surface_dec_(1:240,:)) + end + + % ---------------------------------------------------- + + if output + Am_out_name = sprintf("%s_am.out", output_prefix); + fam = fopen(Am_out_name,"wb"); + + Wo_out_name = sprintf("%s_Wo.out", output_prefix); + fWo = fopen(Wo_out_name,"wb"); + + if synth_phase + Hm_out_name = sprintf("%s_hm.out", output_prefix); + fhm = fopen(Hm_out_name,"wb"); + end + + for f=1:frames + printf("%d\r", f); + Wo = model_(f,1); L = min([model_(f,2) max_amp-1]); Am = model_(f,3:(L+3)); + if Wo*L > pi + printf("Problem: %d Wo*L > pi Wo: %f F0: %f L: %d Wo*L: %f\n", f, Wo, Wo*Fs/(2*pi), L, Wo*L); + end + + Am_ = zeros(1,max_amp); Am_(2:L+1) = Am(1:L); fwrite(fam, Am_, "float32"); + fwrite(fWo, Wo, "float32"); + + if synth_phase + + % synthesis phase spectra from magnitiude spectra using minimum phase techniques + + fft_enc = 128; + phase = determine_phase(model_, f, fft_enc); + assert(length(phase) == fft_enc); + + % sample phase at centre of each harmonic, not 1st entry Hm(1:2) in octave Hm[0] in C + % is not used + + Hm = zeros(1, 2*max_amp); + for m=1:L + b = round(m*Wo*fft_enc/(2*pi)); + Hm(2*m+1) = cos(phase(b)); + Hm(2*m+2) = sin(phase(b)); + end + fwrite(fhm, Hm, "float32"); + end + end + + fclose(fam); + fclose(fWo); + if synth_phase + fclose(fhm); + end + + % save voicing file + + if exist("voicing_", "var") && output + v_out_name = sprintf("%s_v.txt", output_prefix); + printf("writing: %s\n", v_out_name); + fv = fopen(v_out_name,"wt"); + for f=1:length(voicing_) + fprintf(fv,"%d\n", voicing_(f)); + end + fclose(fv); + end + end + + printf("\n") + +endfunction + + +function ind = arg_exists(v, str) + ind = 0; + for i=1:length(v) + if !ind && strcmp(v{i}, str) + ind = i; + end + end +endfunction + + +% Basic unquantised rate K sampling (mel or linear) then back to rate L + +function [model_ rate_K_surface_ sd_log delta_K] = experiment_resample(model, args) + [frames nc] = size(model); + K = 20; Fs = 8000; + AmdB = zeros(frames, 160); + melvq; + + resampler = args.resampler; + quant = args.quant; + vq = args.vq; + plots = args.plots; + correct_rate_K_en = args.correct_rate_K_en; + M = args.M; + + if strcmp(resampler, "mel") + K = 20; + end + if strcmp(resampler, "linear") + K = 40; step = (Fs/2000)/K; + rate_K_sample_freqs_kHz = [0.1:step:4]; + K = length(rate_K_sample_freqs_kHz); + end + + rate_K_surface = rate_K_surface_ = zeros(frames, K); + + for f=1:frames + Wo = model(f,1); + L = model(f,2); + Am = model(f,3:(L+2)); + energy_L(f) = sum(Am.^2); + AmdB(f,1:L) = 20*log10(Am); + Am_freqs_kHz = (1:L)*Wo*Fs/(2000*pi); + if strcmp(resampler, "mel") + [rate_K_vec rate_K_sample_freqs_kHz] = resample_const_rate_f_mel(model(f,:), K, Fs, 'lanc'); + end + if strcmp(resampler, "linear") + rate_K_vec = resample_const_rate_f(model(f,:), rate_K_sample_freqs_kHz, Fs, 'lanc'); + end + rate_K_vec_lin = 10 .^ (rate_K_vec/20); + energy_K(f) = sum(rate_K_vec_lin .^ 2); + #g = sqrt(energy_L(f)./energy_K(f)); + #rate_K_vec_lin *= g; + energy_K(f) = sum(rate_K_vec_lin .^ 2); + + if correct_rate_K_en + [tmp_ AmdB_] = resample_rate_L(model(f,:), rate_K_vec, rate_K_sample_freqs_kHz, Fs, 'lancmel'); + [rate_K_vec_corrected orig_error error nasty_error_log nasty_error_m_log] = correct_rate_K_vec(rate_K_vec, rate_K_sample_freqs_kHz, AmdB, AmdB_, K, Wo, L, Fs); + rate_K_surface(f,:) = rate_K_vec_corrected; + else + rate_K_surface(f,:) = rate_K_vec; + end + end + + % Whole thing is quantised to 6dB steps, as that doesn't seem to + % introduce much distortion + + if strcmp(quant,"step"); + rate_K_surface_ = 6*round(rate_K_surface/6); + end + + % experiment to limit frame by frame changes, this will make quantisation easier + + if strcmp(quant,"dtlimit"); + rate_K_surface_prev_ = zeros(1,K); + delta_K_log = zeros(frames,K); + + for f=1:M:frames + + % find delta + + delta_K = rate_K_surface(f,:) - rate_K_surface_prev_; + + % limit to -6,0,+6 dB + + delta_K = 6*round(delta_K/6); + delta_K = min(delta_K, +12); + delta_K = max(delta_K, -12); + + % optional VQ + + if nargin == 5 + [res output_vec ind] = mbest(vq.table, delta_K(:,vq.st:vq.en), vq.m); + delta_K(:,vq.st:vq.en) = output_vec; + end + + rate_K_surface_prev_ += delta_K; + rate_K_surface_(f,:) = rate_K_surface_prev_; + delta_K_log(f,:) = delta_K; + end + end + + % encoding of delata_f, also limits delta_f changes, (hopefully) making quantisation easier + + E_log = []; + if strcmp(quant,"deltaf"); + for f=1:M:frames + + % used to gather stats for frame energy + + E = 6*round(rate_K_surface(f,3)/6); + E_log = [E_log E/6]; + + % Determine frame energy as k=3 sample and quantise From looking + % at values from all.wav it looks like 4 bits is enough + + levels = (0:15)*6; + [E_ E_index] = quantise(levels, rate_K_surface(f,3)); + + [rate_K_surface_(f,:) spec_mag_bits] = deltaf_quantise_rate_K_huff(rate_K_surface(f,:), E_, 44); + + # test of decoder + + dec_rate_K_surface_ = deltaf_decode_rate_K_huff(spec_mag_bits, E_, K, 44); + assert (rate_K_surface_(f,:) == dec_rate_K_surface_); + + # quantise pitch + + Wo = model(f,1); + Wo_index = encode_log_Wo(Wo, 7); + + #{ + TODO: + [ ] save to bits file + [ ] reconsruct frame here from indexes + [ ] compare results + [ ] then refactor into sep enc and dec functions,make sure identical results + #} + + % printf("length: %d\n", length(bits)); + + #{ + % add some experimental random noise of +/- one entry to simulate discrete gain-shape + % VQ errors. Make sure we choose a different position for each error. used during VQ + % development that didn't quite make it .... + + kmax=20; + krecord = zeros(1,kmax); + for i=1:4 + k = ceil(kmax*rand(1,1)); + while krecord(k) + k = ceil(kmax*rand(1,1)); + end + val = 6-12*floor(2*rand(1,1)); + krecord(k) = val; + rate_K_surface_(f,k) += val; + %printf("f: %d k: %d val: %d\n", f, k, val); + end + krecord + #} + end + end + + if strcmp(quant,"dct"); + for f=1:M:frames + rate_K_surface_(f,:) = dct_quantise_rate_K(rate_K_surface(f,:)); + end + end + if strcmp(quant,""); + rate_K_surface_ = rate_K_surface; + end + + if strcmp(quant,"vq") + % use orig for samples we don't quantise + rate_K_surface_ = rate_K_surface; + + size(vq.table) + target = rate_K_surface(:,vq.st:vq.en); + [res output_vecs ind] = mbest(vq.table, target, vq.m); + rate_K_surface_(:,vq.st:vq.en) = output_vecs; + end + + % optional interpolation, if decimation M > 1 + + if M > 1 + for f=1:M:frames-M + left_f = f; right_f = f+M; + %printf("%d %d\n", left_f, right_f); + left_vec = rate_K_surface_(left_f, :); right_vec = rate_K_surface_(right_f, :); + sample_points = [left_f right_f]; + resample_points = left_f+1:right_f-1; + for k=1:K + rate_K_surface_(resample_points, k) = interp_linear(sample_points, [left_vec(k) right_vec(k)], resample_points); + end + end + rate_K_surface_(frames-M+1:frames,:) = rate_K_surface_(frames-M,1); + end + + if plots + en = min(100, length(rate_K_surface_)); + st = en-49; + figure(1); clf; mesh(rate_K_surface_(st:en,:)); ylabel('time'); xlabel('Mel freq'); + end + + % back to rate L + + if strcmp(resampler, "mel") + [model_ AmdB_ ] = resample_rate_L(model, rate_K_surface_, rate_K_sample_freqs_kHz, Fs, 'lancmel'); + end + if strcmp(resampler, "linear") + [model_ AmdB_ ] = resample_rate_L(model, rate_K_surface_, rate_K_sample_freqs_kHz, Fs, 'lanc'); + end + for f=1:frames + Wo = model_(f,1); + L = model_(f,2); + Am_ = model_(f,3:(L+2)); + energy_L_(f) = sum(Am_.^2); + end + + % calculate SD + + sd_log = []; energy_log = []; + for f=1:frames + L = model(f,2); + asd = std(AmdB(f,1:L) - AmdB_(f,1:L)); + energy_log = [energy_log mean(AmdB(f,1:L))]; + sd_log = [sd_log asd]; + end + + if plots + figure(2); clf; l = length(sd_log); ax=plotyy((1:l),sd_log,(1:l),energy_log); + title('SD againstframe'); xlabel('Frame'); ylabel (ax(1), "SD"); ylabel (ax(2), "Energy"); + + figure(3); clf; plot(hist(sd_log)); title('SD histogram'); + figure(4); clf; plot(energy_log, sd_log, '+'); title('Scatter of SD against energy'); + xlabel('Energy'); ylabel('SD'); axis([-10 60 0 7]); + + figure(5); + plot(10*log10(energy_L)); hold on; + plot(10*log10(energy_K),"g"); plot(10*log10(energy_L_),"r+"); hold off; + end + + % return delta_K for training + + if strcmp(quant,"dtlimit") + rate_K_surface_ = delta_K_log; + l = min(100, length(rate_K_surface_)); + figure(5); clf; mesh(rate_K_surface_(1:l,:)); + end + + % this code useful to explore outliers, adjust threshold based on plot(sd_log) + + plot_outliers = 0; + if plot_outliers && (asd > 7) + for f=1:frames + L = model(f,2); + figure; plot(AmdB(f,1:L), 'b+-'); hold on; plot(AmdB_(f,1:L), 'r+-'); hold off; + end + end + printf("mean SD %4.2f\n", mean(sd_log)); + printf("Emin: %f Emax: %f\n", min(E_log), max(E_log)); + + #{ + % Plot E stats, by viewing these decided on 4 bit/frame for energy + + if length(E_log) + figure(5); + plot(E_log) + figure(6); + hist(E_log); + end + #} +endfunction + + +% Takes surface as input, back to model_, for deep learning experiments + +function [model_ rate_K_surface_ sd_log delta_K] = resample_surf(model, rate_K_surface_) + Fs = 8000; + + K = 40; step = (Fs/2000)/K; + rate_K_sample_freqs_kHz = [0.1:step:4]; + K = length(rate_K_sample_freqs_kHz); + + % back to rate L + + [model_ AmdB_ ] = resample_rate_L(model, rate_K_surface_, rate_K_sample_freqs_kHz, Fs, 'lanc'); +endfunction + + +% Candidate C, model to bit-stream encoder + +function [bits rate_K_surface_] = candc_encoder(model, voicing) + newamp2_const; + [frames nc] = size(model); + AmdB = zeros(frames, max_amp); + bits = []; + + rate_K_surface = rate_K_surface_ = zeros(frames, K); + + for f=1:M:frames + Wo = model(f,1); + L = model(f,2); + Am = model(f,3:(L+2)); + AmdB(f,1:L) = 20*log10(Am); + Am_freqs_kHz = (1:L)*Wo*Fs/(2000*pi); + [rate_K_vec rate_K_sample_freqs_kHz] = resample_const_rate_f_mel(model(f,:), K, Fs, 'lanc'); + rate_K_surface(f,:) = rate_K_vec; + end + + for f=1:M:frames + + % Determine frame energy as k=3 sample and quantise From looking + % at values from all.wav it looks like 4 bits is enough + + levels = (0:15)*6; + [E_ E_index] = quantise(levels, rate_K_surface(f,3)); + E_bits = index_to_bits(E_index-1, 4); + [rate_K_surface_(f,:) spec_mag_bits] = deltaf_quantise_rate_K_fixed(rate_K_surface(f,:), E_, 44); + + # quantise pitch + + Wo = model(f,1); + Wo_index = encode_log_Wo(Wo, 7); + Wo_bits = index_to_bits(Wo_index, 7); + + # pack bits + + bits_frame = [Wo_bits E_bits voicing(f) spec_mag_bits ]; + bits = [bits bits_frame]; + + if f < 10 + printf("f: %d Wo: %2d E: %d %2.0f v: %d\n", f, Wo_index, E_index, E_, voicing(f)); + end + end + +endfunction + + +% Candidate C, bit stream to model decoder + +function [model_ voicing rate_K_surface_] = candc_decoder(bits, errors_per_codec_frame=[], ber = 0.0) + newamp2_const; + rows = floor(length(bits)/Nbitspercodecframe); + frames = rows*M; + + rate_K_surface_ = zeros(frames, K); + model_ = zeros(frames, max_amp+2); + voicing = zeros(1,frames); + rate_K_sample_freqs_kHz = mel_sample_freqs_kHz(K, 100, 0.95*Fs/2); + Tbits = Terrs = 0; + abits = zeros(1, Nbitspercodecframe); + Nerrs = 0; av_level = 1; + + level_log = level_adj_log = []; + + error_thresh = 0; + + r = 1; + for f=1:M:frames + abits = bits(1:Nbitspercodecframe); + bits = bits(Nbitspercodecframe+1:end); + + % optional insertion of bit errors for testing + + if ber > 0.0 + [abits(13:56) nerr] = insert_bit_error(abits(13:56), 0.00); + Terrs += nerr; + Tbits += 45; + end + + % extract information from bit stream + + spec_mag_bits = abits(13:Nbitspercodecframe); + E_bits = abits(8:11); + Wo_bits = abits((1:7)); + voicing(f) = abits(12); + Wo_index = bits_to_index(Wo_bits, 7); + Wo_ = decode_log_Wo(Wo_index, 7); L_ = floor(pi/Wo_); + E_index = bits_to_index(E_bits, 4); + E_ = E_index*6; + + #{ + if f < 10 + printf("f: %d Wo: %2d E: %d %2.0f v: %d\n", f, Wo_index, E_index+1, E_, voicing(f)); + end + #} + + % decode into rate K vec + + rate_K_surface_(f,:) = deltaf_decode_rate_K_fixed(spec_mag_bits, E_, K, 44); + + level = max(rate_K_surface_(f,:)); + level_log = [level_log level]; + + if length(errors_per_codec_frame) >= r + Nerrs = errors_per_codec_frame(r); + end + + if Nerrs > error_thresh + % if errors, want to avoid loud cracks, but we also don't want to simply mute. So + % adjust level to match recent average, and let that decay if long stream of error + % frames to gradually mute. + + adjustment = av_level/level; + if adjustment < 1 + rate_K_surface_(f,:) *= adjustment; + printf("f: %3d r: %3d e: %2d level: %3.1f av_level: %3.1f adjust: %3.2f\n", f,r,Nerrs, level, av_level, adjustment); + end + av_level = av_level*0.9; + else + % update average level + av_level = av_level*0.9 + level*0.1; + printf("f: %3d r: %3d e: %2d level: %3.1f av_level: %3.1f\n", f,r,Nerrs, level, av_level); + end + + level = max(rate_K_surface_(f,:)); + level_adj_log = [level_adj_log level]; + + model_(f,1) = Wo_; model_(f,2) = L_; + r++; + end + + if length(errors_per_codec_frame) + figure(3); clf; nplot = 80*3; + subplot(211,"position",[0.1 0.8 0.8 0.15]); + plot(errors_per_codec_frame(1:nplot)) + subplot(212,"position",[0.1 0.05 0.8 0.7]); + plot(level_log(1:nplot),'b'); hold on; plot(level_adj_log(1:nplot),'g+'); hold off; + end + + if ber > 0.0 + printf("Tbits: %d Terrs: %d BER: %4.3f\n", Tbits, Terrs, Terrs/Tbits); + end + + % interpolation in time + + for f=1:M:frames-M + + % interpolate rate K ampl samples + + left_f = f; right_f = f+M; + left_vec = rate_K_surface_(left_f, :); right_vec = rate_K_surface_(right_f, :); + sample_points = [left_f right_f]; + assert(M==2); + resample_point = left_f+1; + for k=1:K + rate_K_surface_(resample_point, k) = interp_linear(sample_points, [left_vec(k) right_vec(k)], resample_point); + end + + % interpolate Wo and voicing + + Wo_ = 2*pi/160; v = 0; + if voicing(left_f) && voicing(right_f) + Wo_ = (model_(left_f,1) + model_(right_f,1))/2; + v = 1; + end + L_ = floor(pi/Wo_); + model_(resample_point,1) = Wo_; model_(resample_point,2) = L_; + voicing(resample_point) = v; + end + rate_K_surface_(frames-M+1:frames,:) = rate_K_surface_(frames-M,1); + model_(frames-M+1:frames,1) = model_(frames-M,1); + model_(frames-M+1:frames,2) = model_(frames-M,2); + + % back to rate L amplitude samples + + model_ = resample_rate_L(model_, rate_K_surface_, rate_K_sample_freqs_kHz, Fs, 'lancmel'); + +endfunction + + +function [bits nerrs] = insert_bit_error(bits, ber) + newamp2_const; + p = rand(1,length(bits)); + error_mask = p < ber; + bits = xor(bits, error_mask); + nerrs = sum(error_mask); +endfunction + + +% Counts errors in protected bits. Simulates failure of FEC to decode, which +% we can detect + +function errors_per_codec_frame = count_errors(error_filename) + newamp2_const; + ferr = fopen(error_filename,"rb"); + errors = fread(ferr, "uchar")'; + fclose(ferr); + frames = floor(length(errors)/Nbitspercodecframe) + errors_per_codec_frame = zeros(1,frames); + for f=1:frames + st = (f-1)*Nbitspercodecframe + 1; en = st + Nprotectedbitspercodecframe - 1; + errors_per_codec_frame(f) = sum(errors(st:en)); + end + figure(2); + plot(errors_per_codec_frame); +endfunction + + +% Candidate D (Huffman encoded DCTs), model to bit-stream encoder. Note rate_K_surface +% is returned without energy being quantised, so not quite the same as decoder output. + +function [bits rate_K_surface_] = candd_encoder(model, voicing) + newamp2_candd_const; + [frames nc] = size(model); + AmdB = zeros(frames, max_amp); + bits = []; + load huffman.mat; + + rate_K_surface = rate_K_surface_ = zeros(frames, K); + + % extract vectors from model file and convert rate L amplitude samples to fixed rate K + + step = (Fs/2000)/K; + rate_K_sample_freqs_kHz = [0.1:step:4]; + + for f=1:frames + Wo = model(f,1); + L = model(f,2); + Am = model(f,3:(L+2)); + AmdB(f,1:L) = 20*log10(Am); + Am_freqs_kHz = (1:L)*Wo*Fs/(2000*pi); + [rate_K_vec rate_K_sample_freqs_kHz] = resample_const_rate_f(model(f,:), rate_K_sample_freqs_kHz, Fs, 'lanc'); + rate_K_surface(f,:) = rate_K_vec; + end + + % huffman encode rate K amplitude samples + + [s_ dc spec_mag_bits] = huffman_encode_surf(rate_K_surface(:,2:35), qstepdB=6, max_dcts=20, max_bits=44, s, h); + rate_K_surface_(:, 2:35) = s_; + + for f=1:dec:frames + + % Determine frame energy from DCT DC value. Looking at values from + % all.wav it looks like 4 bits over 0 to 60dB is enough + + levels = (0:15)*4; + [E_ E_index] = quantise(levels, dc(f)); + E_bits = index_to_bits(E_index-1, 4); + + # quantise pitch + + Wo = model(f,1); + Wo_index = encode_log_Wo(Wo, 7); + Wo_bits = index_to_bits(Wo_index, 7); + + # pack bits + + bits_frame = [Wo_bits E_bits voicing(f) spec_mag_bits{f}]; + bits = [bits bits_frame]; + + if (f > 20) && (f < 30) + printf("f: %3d Wo: %2d E: %2d %2.0f v: %d\n", f, Wo_index, E_index, E_, voicing(f)); + end + end + + figure(1); clf; mesh(rate_K_surface_); +endfunction + + +% Candidate D, bit stream to model decoder + +function [model_ voicing rate_K_surface_] = candd_decoder(bits, errors_per_codec_frame=[], ber = 0.0) + newamp2_candd_const; + load huffman.mat; + rows = floor(length(bits)/Nbitspercodecframe); + frames = rows*dec; + + rate_K_surface_ = zeros(frames, K); + model_ = zeros(frames, max_amp+2); + voicing = zeros(1,frames); + step = (Fs/2000)/K; + rate_K_sample_freqs_kHz = [0.1:step:4]; + Tbits = Terrs = 0; + abits = zeros(1, Nbitspercodecframe); + Nerrs = 0; av_level = 1; + spec_mag_bits = cell(frames,1); + level_log = level_adj_log = []; + E = zeros(1,frames); + + error_thresh = 0; + + r = 1; + for f=1:dec:frames + abits = bits(1:Nbitspercodecframe); + bits = bits(Nbitspercodecframe+1:end); + + % optional insertion of bit errors for testing + + if ber > 0.0 + [abits(13:56) nerr] = insert_bit_error(abits(13:56), 0.00); + Terrs += nerr; + Tbits += 45; + end + + % extract information from bit stream + + spec_mag_bits{f} = abits(13:Nbitspercodecframe); + E_bits = abits(8:11); + Wo_bits = abits((1:7)); + voicing(f) = abits(12); + Wo_index = bits_to_index(Wo_bits, 7); + Wo_ = decode_log_Wo(Wo_index, 7); L_ = floor(pi/Wo_); + E_index = bits_to_index(E_bits, 4); + E_(f) = E_index*4; + + if (f > 20) && (f < 30) + printf("f: %d Wo: %2d E: %d %2.0f v: %d\n", f, Wo_index, E_index+1, E_(f), voicing(f)); + end + + model_(f,1) = Wo_; model_(f,2) = L_; + r++; + end + + % decode into rate K vec + % TODO: make this frame by frame and run in loop above + + s_ = huffman_decode_surf(K=34, qstepdB=6, max_dcts=20, s, h, spec_mag_bits, E_); + rate_K_surface_(:,2:35) = s_; + + if length(errors_per_codec_frame) + figure(3); clf; nplot = 80*3; + subplot(211,"position",[0.1 0.8 0.8 0.15]); + plot(errors_per_codec_frame(1:nplot)) + subplot(212,"position",[0.1 0.05 0.8 0.7]); + plot(level_log(1:nplot),'b'); hold on; plot(level_adj_log(1:nplot),'g+'); hold off; + end + + if ber > 0.0 + printf("Tbits: %d Terrs: %d BER: %4.3f\n", Tbits, Terrs, Terrs/Tbits); + end + + % interpolation in time + + for f=1:dec:frames-dec + + % interpolate rate K ampl samples + + left_f = f; right_f = f+dec; + sample_points = [left_f right_f]; + assert(dec==2); + resample_point = left_f+1; + + % interpolate Wo and voicing + + Wo_ = 2*pi/160; v = 0; + if voicing(left_f) && voicing(right_f) + Wo_ = (model_(left_f,1) + model_(right_f,1))/2; + v = 1; + end + L_ = floor(pi/Wo_); + model_(resample_point,1) = Wo_; model_(resample_point,2) = L_; + voicing(resample_point) = v; + end + rate_K_surface_(frames-dec+1:frames,:) = rate_K_surface_(frames-dec,1); + model_(frames-dec+1:frames,1) = model_(frames-dec,1); + model_(frames-dec+1:frames,2) = model_(frames-dec,2); + + % back to rate L amplitude samples + + model_ = resample_rate_L(model_, rate_K_surface_, rate_K_sample_freqs_kHz, Fs, 'lanc'); + + figure(2); clf; mesh(rate_K_surface_); +endfunction diff --git a/libcodec2-android/src/codec2/octave/newamp2_candd_const.m b/libcodec2-android/src/codec2/octave/newamp2_candd_const.m new file mode 100644 index 0000000..992b671 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/newamp2_candd_const.m @@ -0,0 +1,10 @@ +% newamp2_candd_const.m +% Constants for newamp2 candidate D prototype codec + +Fs = 8000; % sample rate +max_amp = 160; % maximum number of rate L samples (time varying basedon Wo) +K = 40; % number of samples after interpolation to fixed rate K +dec = 2; % decimation rate from codec processing frame rate + +Nbitspercodecframe = 56; + diff --git a/libcodec2-android/src/codec2/octave/newamp2_const.m b/libcodec2-android/src/codec2/octave/newamp2_const.m new file mode 100644 index 0000000..18e7fe3 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/newamp2_const.m @@ -0,0 +1,12 @@ +% newamp2_const.m +% Constants for newamp2 candidate C prototype codec + +Fs = 8000; % sample rate +max_amp = 160; % maximum number of rate L samples (time varying basedon Wo) +K = 20; % number of samples after interpolation to fixed rate K +M = 2; % decimation rate from codec processing frame rate + +Nbitspercodecframe = 56; +Nprotectedbitspercodecframe = 32; +Nunprotect = Nbitspercodecframe - Nprotectedbitspercodecframe; + diff --git a/libcodec2-android/src/codec2/octave/newamp2_fbf.m b/libcodec2-android/src/codec2/octave/newamp2_fbf.m new file mode 100644 index 0000000..af4a954 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/newamp2_fbf.m @@ -0,0 +1,186 @@ +% newamp2_fbf.m +% +% Copyright David Rowe 2018 +% This program is distributed under the terms of the GNU General Public License +% Version 2 +% +% Interactive Octave script to explore frame by frame operation of new amplitude +% modelling model version 2. +% +% Usage: +% Make sure codec2-dev is compiled with the -DDUMP option - see README for +% instructions. +% ~/codec2-dev/build_linux/src$ ./c2sim ../../raw/hts1a.raw --dump hts1a +% $ cd ~/codec2-dev/octave +% octave:14> newamp2_fbf("../build_linux/src/hts1a",50) + + +function newamp2_fbf(samname, f=73, varargin) + more off; + newamp2; + Fs = 8000; + mode = "mel"; K = 20; correct_rate_K_en = 0; + + % command line arguments + + ind = arg_exists(varargin, "phase"); + phase_en = 0; + if ind + phase_en = 1; + end + + % load up text files dumped from c2sim --------------------------------------- + + sn_name = strcat(samname,"_sn.txt"); + Sn = load(sn_name); + sw_name = strcat(samname,"_sw.txt"); + Sw = load(sw_name); + model_name = strcat(samname,"_model.txt"); + model = load(model_name); + [frames tmp] = size(model); + + if phase_en + phase_name = strcat(samname,"_phase.txt"); + phase = load(phase_name); + phase_source = 'Am'; + end + + % Keyboard loop -------------------------------------------------------------- + + quant_en = 0; + k = ' '; + do + fg = 1; + s = [ Sn(2*f-1,:) Sn(2*f,:) ]; + figure(fg++); clf; plot(s); axis([1 length(s) -20000 20000]); + + Wo = model(f,1); L = model(f,2); Am = model(f,3:(L+2)); AmdB = 20*log10(Am); + Am_freqs_kHz = (1:L)*Wo*4/pi; + + K = 20; + [rate_K_vec rate_K_sample_freqs_kHz] = resample_const_rate_f_mel(model(f,:), K, Fs, 'lanc'); + if correct_rate_K_en + [tmp_ AmdB_] = resample_rate_L(model(f,:), rate_K_vec, rate_K_sample_freqs_kHz, Fs, "lancmel"); + [rate_K_vec_corrected orig_error error nasty_error_log nasty_error_m_log] = correct_rate_K_vec(rate_K_vec, rate_K_sample_freqs_kHz, AmdB, AmdB_, K, Wo, L, Fs); + rate_K_vec = rate_K_vec_corrected; + end + + % plots ---------------------------------- + + figure(fg++); clf; + l = sprintf(";rate %d AmdB;g+-", L); + plot((1:L)*Wo*4000/pi, AmdB, l); + axis([1 4000 -20 80]); + hold on; + + rate_K_vec_ = rate_K_vec; + D = dct(rate_K_vec); + if quant_en + %rate_K_vec_ = huffman_quantise_rate_K(rate_K_vec); + D_ = 16*round(D/16); + rate_K_vec_ = idct(D_); + else + D_ = D; + end + stem(rate_K_sample_freqs_kHz*1000, rate_K_vec_); + + % And .... back to rate L + + [model_ AmdB_] = resample_rate_L(model(f,:), rate_K_vec_, rate_K_sample_freqs_kHz, Fs, "lancmel"); + + AmdB_ = AmdB_(1:L); + sdL = std(abs(AmdB - AmdB_)); + + plot((1:L)*Wo*4000/pi, AmdB_,";AmdB bar;r+-"); + l = sprintf(";error sd %3.2f dB;bk+-", sdL); + plot((1:L)*Wo*4000/pi, (AmdB - AmdB_), l); + hold off; + + if phase_en + + % est phase using HT + + fft_enc = 512; + if strcmp(phase_source,'Am') + Am_phase = model(f,3:(L+2)); + phase_est = determine_phase(model(f,:), 1, fft_enc); + else + Am_phase = model_(3:(L+2)); + phase_est = determine_phase(model_, 1, fft_enc); + end + Am_phase_dB = 20*log10(Am_phase); + phase0 = zeros(1,L); + for m=1:L + b = round(m*Wo*fft_enc/(2*pi)); + phase0(m) = phase_est(b); + end + + % plot amplitudes and phase for first 1kHz + + figure(fg++); clf; + subplot(211); + l = sprintf("+-;%s;",phase_source); + plot((1:L)*Wo*4000/pi, Am_phase_dB(1:L),l); + subplot(212); + plot((1:L)*Wo*4000/pi, phase(f,1:L),'+-;orig;'); + hold on; + plot((1:L)*Wo*4000/pi, phase0(1:L),'r+-;synth;'); + hold off; + + % simple synthesis using sinusoidal parameters + + figure(fg++); clf; + N = 320; + s = s_phase0 = zeros(1,N); + for m=1:L + s = s + Am_phase(m)*cos(m*Wo*(1:N) + phase(f,m)); + s_phase0 = s_phase0 + Am_phase(m)*cos(m*Wo*(1:N) + phase0(m)); + end + subplot(211); plot(s); subplot(212); plot(s_phase0,'g'); + end + + figure(fg++); + stem(D_) + axis([0 K -50 50]) + + % interactive menu ------------------------------------------ + + printf("\rframe: %d menu: n-next b-back u-qUant c-Correct s-phSrc q-quit", f); + fflush(stdout); + k = kbhit(); + + if k == 'n' + f = f + 1; + endif + if k == 'b' + f = f - 1; + endif + if k == 'u' + if quant_en==0, quant_en=1, else quant_en=0;,end; + end + if k == 's' + if strcmp(phase_source, 'Am') + phase_source = 'Am bar' + else + phase_source = 'Am'; + end + end + if k == 'c' + if correct_rate_K_en==0, correct_rate_K_en=1;, else correct_rate_K_en=0;,end; + end + until (k == 'q') + printf("\n"); + +endfunction + + +function ind = arg_exists(v, str) + ind = 0; + for i=1:length(v) + if !ind && strcmp(v{i}, str) + ind = i; + end + end +endfunction + + diff --git a/libcodec2-android/src/codec2/octave/newamp_700c.m b/libcodec2-android/src/codec2/octave/newamp_700c.m new file mode 100644 index 0000000..ff5c662 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/newamp_700c.m @@ -0,0 +1,359 @@ +% newamp_700c.m +% +% Copyright David Rowe 2017 +% This program is distributed under the terms of the GNU General Public License +% Version 2 +% +% Library of Octave functions to for rate K, mel spaced +% vector quantisation of spectral magntides used in Codec 2 700C mode. + +1; +melvq; % mbest VQ functions + +% -------------------------------------------------------------------------------- +% Functions used by rate K mel work +% -------------------------------------------------------------------------------- + +% General 2nd order parabolic interpolator. Used splines orginally, +% but this is much simpler and we don't need much accuracy. Given two +% vectors of points xp and yp, find interpolated values y at points x + +function y = interp_para(xp, yp, x) + assert( (length(xp) >=3) && (length(yp) >= 3) ); + + y = zeros(1,length(x)); + k = 1; + for i=1:length(x) + xi = x(i); + + % k is index into xp of where we start 3 points used to form parabola + + while ((xp(k+1) < xi) && (k < (length(xp)-2))) + k++; + end + + x1 = xp(k); y1 = yp(k); x2 = xp(k+1); y2 = yp(k+1); x3 = xp(k+2); y3 = yp(k+2); + %printf("k: %d i: %d xi: %f x1: %f y1: %f\n", k, i, xi, x1, y1); + + a = ((y3-y2)/(x3-x2)-(y2-y1)/(x2-x1))/(x3-x1); + b = ((y3-y2)/(x3-x2)*(x2-x1)+(y2-y1)/(x2-x1)*(x3-x2))/(x3-x1); + + y(i) = a*(xi-x2)^2 + b*(xi-x2) + y2; + end +endfunction + + +% simple linear interpolator + +function y = interp_linear(xp, yp, x) + assert( (length(xp) == 2) && (length(yp) == 2) ); + + m = (yp(2) - yp(1))/(xp(2) - xp(1)); + c = yp(1) - m*xp(1); + + y = zeros(1,length(x)); + for i=1:length(x) + y(i) = m*x(i) + c; + end +endfunction + + +% quantise input sample to nearest value in table, optionally return binary code + +function [quant_out best_i bits] = quantise(levels, quant_in) + + % find closest quantiser level + + best_se = 1E32; + for i=1:length(levels) + se = (levels(i) - quant_in)^2; + if se < best_se + quant_out = levels(i); + best_se = se; + best_i = i; + end + end + + % convert index to binary bits + + numbits = ceil(log2(length(levels))); + bits = zeros(1, numbits); + for b=1:numbits + bits(b) = bitand(best_i-1,2^(numbits-b)) != 0; + end + +endfunction + + +% Quantisation functions for Wo in log freq domain + +function index = encode_log_Wo(Wo, bits) + Wo_levels = 2.^bits; + Wo_min = 2*pi/160; + Wo_max = 2*pi/20; + + norm = (log10(Wo) - log10(Wo_min))/(log10(Wo_max) - log10(Wo_min)); + index = floor(Wo_levels * norm + 0.5); + index = max(index, 0); + index = min(index, Wo_levels-1); +endfunction + + +function Wo = decode_log_Wo(index, bits) + Wo_levels = 2.^bits; + Wo_min = 2*pi/160; + Wo_max = 2*pi/20; + + step = (log10(Wo_max) - log10(Wo_min))/Wo_levels; + Wo = log10(Wo_min) + step*index; + + Wo = 10 .^ Wo; +endfunction + + +% convert index to binary bits + +function bits = index_to_bits(value, numbits) + levels = 2.^numbits; + bits = zeros(1, numbits); + for b=1:numbits + bits(b) = bitand(value,2^(numbits-b)) != 0; + end +end + + +function value = bits_to_index(bits, numbits) + value = 2.^(numbits-1:-1:0) * bits; +endfunction + + +% Determine a phase spectra from a magnitude spectra +% from http://www.dsprelated.com/showcode/20.php +% Haven't _quite_ figured out how this works but have to start somewhere .... +% +% TODO: we may be able to sample at a lower rate, like mWo +% but start with something that works + +function [phase Gdbfk s Aw] = determine_phase(model, f, Nfft=512, ak) + Fs = 8000; + max_amp = 80; + L = min([model(f,2) max_amp-1]); + Wo = model(f,1); + + sample_freqs_kHz = (Fs/1000)*[0:Nfft/2]/Nfft; % fft frequency grid (nonneg freqs) + Am = model(f,3:(L+2)); + AmdB = 20*log10(Am); + rate_L_sample_freqs_kHz = (1:L)*Wo*4/pi; + + Gdbfk = interp_para(rate_L_sample_freqs_kHz, AmdB, sample_freqs_kHz); + + % optional input of aks for testing + + if nargin == 4 + Aw = 1 ./ fft(ak,Nfft); + Gdbfk = 20*log10(abs(Aw(1:Nfft/2+1))); + end + + [phase s] = mag_to_phase(Gdbfk, Nfft); + +endfunction + + +% Non linear sampling of frequency axis, reducing the "rate" is a +% first step before VQ + +function mel = ftomel(fHz) + mel = floor(2595*log10(1+fHz/700)+0.5); +endfunction + + +function rate_K_sample_freqs_kHz = mel_sample_freqs_kHz(K) + mel_start = ftomel(200); mel_end = ftomel(3700); + step = (mel_end-mel_start)/(K-1); + mel = mel_start:step:mel_end; + rate_K_sample_freqs_Hz = 700*((10 .^ (mel/2595)) - 1); + rate_K_sample_freqs_kHz = rate_K_sample_freqs_Hz/1000; +endfunction + + +function [rate_K_surface rate_K_sample_freqs_kHz] = resample_const_rate_f_mel(model, K) + rate_K_sample_freqs_kHz = mel_sample_freqs_kHz(K); + rate_K_surface = resample_const_rate_f(model, rate_K_sample_freqs_kHz); +endfunction + + +% Resample Am from time-varying rate L=floor(pi/Wo) to fixed rate K. This can be viewed +% as a 3D surface with time, freq, and ampitude axis. + +function [rate_K_surface rate_K_sample_freqs_kHz] = resample_const_rate_f(model, rate_K_sample_freqs_kHz) + + % convert rate L=pi/Wo amplitude samples to fixed rate K + + max_amp = 80; + [frames col] = size(model); + K = length(rate_K_sample_freqs_kHz); + rate_K_surface = zeros(frames, K); + + for f=1:frames + Wo = model(f,1); + L = min([model(f,2) max_amp-1]); + Am = model(f,3:(L+2)); + AmdB = 20*log10(Am); + %pre = 10*log10((1:L)*Wo*4/(pi*0.3)); + %AmdB += pre; + + % clip between peak and peak -50dB, to reduce dynamic range + + AmdB_peak = max(AmdB); + AmdB(find(AmdB < (AmdB_peak-50))) = AmdB_peak-50; + + rate_L_sample_freqs_kHz = (1:L)*Wo*4/pi; + + %rate_K_surface(f,:) = interp1(rate_L_sample_freqs_kHz, AmdB, rate_K_sample_freqs_kHz, "spline", "extrap"); + rate_K_surface(f,:) = interp_para(rate_L_sample_freqs_kHz, AmdB, rate_K_sample_freqs_kHz); + + %printf("\r%d/%d", f, frames); + end + %printf("\n"); +endfunction + + +% Take a rate K surface and convert back to time varying rate L + +function [model_ AmdB_] = resample_rate_L(model, rate_K_surface, rate_K_sample_freqs_kHz) + max_amp = 80; + [frames col] = size(model); + + model_ = zeros(frames, max_amp+2); + for f=1:frames + Wo = model(f,1); + L = model(f,2); + rate_L_sample_freqs_kHz = (1:L)*Wo*4/pi; + + % back down to rate L + + % AmdB_ = interp1(rate_K_sample_freqs_kHz, rate_K_surface(f,:), rate_L_sample_freqs_kHz, "spline", 0); + AmdB_ = interp_para([ 0 rate_K_sample_freqs_kHz 4], [0 rate_K_surface(f,:) 0], rate_L_sample_freqs_kHz); + + model_(f,1) = Wo; model_(f,2) = L; model_(f,3:(L+2)) = 10 .^ (AmdB_(1:L)/20); + end +endfunction + + +% Post Filter, has a big impact on speech quality after VQ. When used +% on a mean removed rate K vector, it raises formants, and supresses +% anti-formants. As it manipulates amplitudes, we normalise energy to +% prevent clipping or large level variations. pf_gain of 1.2 to 1.5 +% (dB) seems to work OK. Good area for further investigations and +% improvements in speech quality. + +function vec = post_filter(vec, sample_freq_kHz, pf_gain = 1.5, voicing) + % vec is rate K vector describing spectrum of current frame + % lets pre-emp before applying PF. 20dB/dec over 300Hz + + pre = 20*log10(sample_freq_kHz/0.3); + vec += pre; + + levels_before_linear = 10 .^ (vec/20); + e_before = sum(levels_before_linear .^2); + + vec *= pf_gain; + + levels_after_linear = 10 .^ (vec/20); + e_after = sum(levels_after_linear .^2); + gain = e_after/e_before; + gaindB = 10*log10(gain); + vec -= gaindB; + + vec -= pre; +endfunction + + +% construct energy quantiser table, and save to text file to include in C + +function energy_q = create_energy_q + energy_q = 10 + 40/16*(0:15); +endfunction + +function save_energy_q(fn) + energy_q = create_energy_q; + f = fopen(fn, "wt"); + fprintf(f, "1 %d\n", length(energy_q)); + for n=1:length(energy_q) + fprintf(f, "%f\n", energy_q(n)); + end + fclose(f); +endfunction + + +% save's VQ in format that can be compiled by Codec 2 build system + +function save_vq(vqset, filenameprefix) + [Nvec order stages] = size(vqset); + for s=1:stages + fn = sprintf("%s_%d.txt", filenameprefix, s); + f = fopen(fn, "wt"); + fprintf(f, "%d %d\n", order, Nvec); + for n=1:Nvec + for k=1:order + fprintf(f, "% 8.4f ", vqset(n,k,s)); + end + fprintf(f, "\n"); + end + fclose(f); + end +endfunction + + +% Decoder side interpolation of Wo and voicing, to go from 25 Hz +% sample rate used over channel to 100Hz internal sample rate of Codec +% 2. + +function [Wo_ voicing_] = interp_Wo_v(Wo1, Wo2, voicing1, voicing2) + M = 4; + max_amp = 80; + + Wo_ = zeros(1,M); + voicing_ = zeros(1,M); + if !voicing1 && !voicing2 + Wo_(1:M) = 2*pi/100; + end + + if voicing1 && !voicing2 + Wo_(1:M/2) = Wo1; + Wo_(M/2+1:M) = 2*pi/100; + voicing_(1:M/2) = 1; + end + + if !voicing1 && voicing2 + Wo_(1:M/2) = 2*pi/100; + Wo_(M/2+1:M) = Wo2; + voicing_(M/2+1:M) = 1; + end + + if voicing1 && voicing2 + Wo_samples = [Wo1 Wo2]; + Wo_(1:M) = interp_linear([1 M+1], Wo_samples, 1:M); + voicing_(1:M) = 1; + end + + #{ + printf("f: %d f+M/2: %d Wo: %f %f (%f %%) v: %d %d \n", f, f+M/2, model(f,1), model(f+M/2,1), 100*abs(model(f,1) - model(f+M/2,1))/model(f,1), voicing(f), voicing(f+M/2)); + for i=f:f+M/2-1 + printf(" f: %d v: %d v_: %d Wo: %f Wo_: %f\n", i, voicing(i), voicing_(i), model(i,1), model_(i,1)); + end + #} +endfunction + + +% Equaliser in front of EQ, see vq_70c_eq.m for development version + +function [rate_K_vec eq] = front_eq(rate_K_vec, eq) + [tmp K] = size(rate_K_vec); + ideal = [ 8 10 12 14 14*ones(1,K-1-4) -20]; + gain = 0.02; + update = rate_K_vec - ideal; + eq = (1-gain)*eq + gain*update; + eq(find(eq < 0)) = 0; +endfunction + diff --git a/libcodec2-android/src/codec2/octave/newamp_batch.m b/libcodec2-android/src/codec2/octave/newamp_batch.m new file mode 100644 index 0000000..72fd837 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/newamp_batch.m @@ -0,0 +1,112 @@ +% newamp_batch.m +% +% Copyright David Rowe 2015 +% This program is distributed under the terms of the GNU General Public License +% Version 2 +% +% Octave script to batch process model parameters using the new +% amplitude model. Used for generating samples we can listen to. +% +% Usage: +% ~/codec2-dev/build_linux/src$ ./c2sim ../../raw/hts1a.raw --dump hts1a +% $ cd ~/codec2-dev/octave +% octave:14> newamp_batch("../build_linux/src/hts1a") +% ~/codec2-dev/build_linux/src$ ./c2sim ../../raw/hts1a.raw --amread hts1a_am.out -o - | play -t raw -r 8000 -s -2 - +% Or with a little more processing: +% codec2-dev/build_linux/src$ ./c2sim ../../raw/hts2a.raw --amread hts2a_am.out --awread hts2a_aw.out --phase0 --postfilter --Woread hts2a_Wo.out -o - | play -q -t raw -r 8000 -s -2 - + + +% process a whole file and write results + +function [dk_log D1_log] = newamp_batch(samname, optional_Am_out_name, optional_Aw_out_name) + newamp; + more off; + + max_amp = 80; + k = 10; + decimate = 4; + dec_in_time = 1; + dec_in_freq = 1; + decimate = 4; + synth_phase = 1; + vq_en = 1; + dk_log = []; D1_log = []; + train = 0; + Wo_quant = 1; + ind_log = []; + + model_name = strcat(samname,"_model.txt"); + model = load(model_name); + [frames nc] = size(model); + model_ = zeros(frames, nc); + non_masked_m = zeros(frames,max_amp); + + voicing_name = strcat(samname,"_pitche.txt"); + voicing = zeros(1,frames); + if exist(voicing_name, "file") == 2 + pitche = load(voicing_name); + voicing = pitche(:, 3); + end + + if vq_en + load vq; + end + + % encoder loop ------------------------------------------------------ + + sd_sum = 0; + for f=1:frames + printf("%d ", f); + + Wo = model(f,1); + L = min([model(f,2) max_amp-1]); + + if Wo_quant + ind_Wo = encode_log_Wo(Wo, 6); + Wo = decode_log_Wo(ind_Wo, 6); + L = floor(pi/Wo); + L = min([L max_amp-1]); + end + + model_(f,1) = Wo; + model_(f,2) = L; + model_(f,3:(L+2)) = Am = model(f,3:(L+2)); + + AmdB = 20*log10(Am); + + % find mask + + mask_sample_freqs_kHz = (1:L)*Wo*4/pi; + maskdB = mask_model(AmdB, Wo, L); + + maskdB_ = maskdB; + if dec_in_freq + if vq_en + [maskdB_ tmp1 D dk_ D1_ ind_vq] = decimate_in_freq(maskdB, 1, k, vq); + else + [maskdB_ tmp1 D dk_ D1_] = decimate_in_freq(maskdB, 1, k); + end + dk_log = [dk_log; dk_]; + D1_log = [D1_log; D1_]; + end + %maskdB_pf = maskdB_*1.5; + %maskdB_pf += max(maskdB_) - max(maskdB_pf); + + % log info for bit stream + + ind_log = [ind_log; ind_Wo voicing(f) (ind_vq-1) 0]; + + %sd_sum += sum(maskdB_ - maskdB); + + Am_ = zeros(1,max_amp); + Am_ = 10 .^ (maskdB_(1:L)/20); + model_(f,3:(L+2)) = Am_; + end + + bit_stream_name = strcat(samname,".bit"); + bits_per_param = [6 1 8 8 4 1]; + write_bit_stream_file(bit_stream_name, ind_log, bits_per_param); + decode_from_bit_stream(samname); + +endfunction + diff --git a/libcodec2-android/src/codec2/octave/newamp_fbf.m b/libcodec2-android/src/codec2/octave/newamp_fbf.m new file mode 100644 index 0000000..c3d1bb6 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/newamp_fbf.m @@ -0,0 +1,207 @@ +% newamp_fbf.m +% +% Copyright David Rowe 2015 +% This program is distributed under the terms of the GNU General Public License +% Version 2 +% +% Interactive Octave script to explore frame by frame operation of new amplitude +% modelling model. +% +% Usage: +% Make sure codec2-dev is compiled with the -DDUMP option - see README for +% instructions. +% ~/codec2-dev/build_linux/src$ ./c2sim ../../raw/hts1a.raw --dump hts1a +% $ cd ~/codec2-dev/octave +% octave:14> newamp_fbf("../build_linux/src/hts1a",50) + + + +function newamp_fbf(samname, f=10) + newamp; + more off; + plot_spectrum = 1; + dec_in_freq = 1; + dec_in_time = 0; + vq_en = 0; + mask_en = 0; + + % load up text files dumped from c2sim --------------------------------------- + + sn_name = strcat(samname,"_sn.txt"); + Sn = load(sn_name); + sw_name = strcat(samname,"_sw.txt"); + Sw = load(sw_name); + model_name = strcat(samname,"_model.txt"); + model = load(model_name); + [frames tmp] = size(model); + + load vq; + + % Keyboard loop -------------------------------------------------------------- + + k = ' '; + do + figure(1); + clf; + s = [ Sn(2*f-1,:) Sn(2*f,:) ]; + size(s); + plot(s); + axis([1 length(s) -20000 20000]); + + figure(2); + clf; + Wo = model(f,1); + L = model(f,2); + Am = model(f,3:(L+2)); + AmdB = 20*log10(Am); + + axis([1 4000 -20 80]); + hold on; + if plot_spectrum + plot((1:L)*Wo*4000/pi, AmdB,";Am;r"); + plot((1:L)*Wo*4000/pi, AmdB,"r+"); + end + + [maskdB Am_freqs_kHz] = mask_model(AmdB, Wo, L); + %a_non_masked_m = find(AmdB > maskdB); + %maskdB = maskdB - 6; + %maskdB(a_non_masked_m) = maskdB(a_non_masked_m) + 6; + %plot(Am_freqs_kHz*1000, maskdB, ';mask;g'); + + if mask_en + AmdB_ = maskdB; + else + AmdB_ = AmdB; + end + if dec_in_freq + [tmp1 tmp2 D] = decimate_in_freq(AmdB, 0); + if vq_en + [AmdB_ AmdB_cyclic D_cyclic dk_] = decimate_in_freq(AmdB, 1, 10, vq); + else + [AmdB_ AmdB_cyclic D_cyclic dk_] = decimate_in_freq(AmdB_, 1, 10); + end + + plot(Am_freqs_kHz*1000, AmdB_cyclic, ';mask cyclic;b'); + plot(Am_freqs_kHz*1000, AmdB_, ';mask trunc;c'); + AmdB_pf = AmdB_*(1.5); + AmdB_pf += mean(AmdB) - mean(AmdB_pf); + %max(AmdB_pf)-max(AmdB_) + %AmdB_pf -= max(AmdB_pf)-max(AmdB_); + end + + %AmdB_pf = AmdB_*(1.5); + %AmdB_pf += mean(AmdB) - mean(AmdB_pf); + AmdB_pf = AmdB_; + plot(Am_freqs_kHz*1000, AmdB_pf, ';mask trunc pf;g'); + + % Optional decimated parameters + % need to general model_ parameters either side + + if dec_in_time + decimate = 4; + model_ = set_up_model_(model, f, decimate, vq_en, vq); + maskdB_dit = decimate_frame_rate(model_, decimate, f, frames, Am_freqs_kHz); + plot(Am_freqs_kHz*1000, maskdB_dit, ';mask dit;b'); + end + + hold off; + + if dec_in_freq + % lets get a feel for the "spectrum" of the smoothed spectral envelope + % this will give us a feel for how hard it is to code, ideally we would like + % just a few coefficents to be non-zero + + figure(3) + clf + + en = L/2+1; + stem(D(2:en),'g') + hold on; + stem(D_cyclic(2:en),'b') + hold off; + + % let plot the cumulative amount of energy in each DFT + + figure(4) + clf + plot(cumsum(D(2:en)/sum(D(2:en))),';cumsum;g'); + hold on; + plot(cumsum(D_cyclic(2:en)/sum(D_cyclic(2:en))),';cumsum cyclic;b'); + hold off; + axis([1 L 0 1]) + + figure(5) + clf + stem(dk_) + end + + % interactive menu ------------------------------------------ + + printf("\rframe: %d menu: n-next b-back q-quit m-mask_en", f); + fflush(stdout); + k = kbhit(); + + if (k == 'm') + if mask_en + mask_en = 0; + else + mask_en = 1; + end + endif + if (k == 'n') + f = f + 1; + endif + if (k == 'b') + f = f - 1; + endif + until (k == 'q') + printf("\n"); + +endfunction + + +function model_ = set_up_model_(model, f, decimate, vq_en, vq) + [frames nc] = size(model); + model_ = zeros(frames, nc); + left_f = decimate*floor((f-1)/decimate)+1; + right_f = left_f + decimate; + + model_(left_f,:) = set_up_maskdB_(model, left_f, vq_en, vq); + model_(right_f,:) = set_up_maskdB_(model, right_f, vq_en, vq); + + model_(f,1) = model(f,1); % Wo + model_(f,2) = model(f,2); % L +endfunction + + +function amodel_row = set_up_maskdB_(model, f, vq_en, vq) + [frames nc] = size(model); + max_amp = 80; + + Wo = model(f,1); + L = model(f,2); + Am = model(f,3:(L+2)); + AmdB = 20*log10(Am); + + [maskdB Am_freqs_kHz] = mask_model(AmdB, Wo, L); + a_non_masked_m = find(AmdB > maskdB); + maskdB = maskdB - 6; + maskdB(a_non_masked_m) = maskdB(a_non_masked_m) + 6; + + if 0 + if vq_en + maskdB_ = decimate_in_freq(maskdB, 1, 7, vq); + else + maskdB_ = decimate_in_freq(maskdB, 1); + end + end + + maskdB_ = maskdB; + + amodel_row = zeros(1,nc); + amodel_row(1) = Wo; + amodel_row(2) = L; + Am_ = zeros(1,max_amp); + Am_ = 10 .^ (maskdB_(1:L)/20); + amodel_row(3:(L+2)) = Am_; +endfunction diff --git a/libcodec2-android/src/codec2/octave/nf_from_gr.m b/libcodec2-android/src/codec2/octave/nf_from_gr.m new file mode 100644 index 0000000..bd36d02 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/nf_from_gr.m @@ -0,0 +1,129 @@ +% nf_from_gr.m +% David Rowe Mar 2016 + +#{ + Calculate NF from GNU Radio output samples in + ...IQIQ... (32 bit float) sample files + + 1/ Take one sample with a -100dBm input carrier + 2/ Take another sample with no signal (just rx noise) + 3/ Set Fs, adjust st and en to use a chunk of spectrum without too + many birdies. + + Gotchas: + + 1/ Inspect Figure(1), the time domain plots. + 2/ Make sure plenty of ADC bits are being used with the noise-only sample, + we don't want ADC quantisation noise to dominate. Aim for about half + full scale. + 3/ Also watch out for clipping on either sample. + +#} + +1; + +function det_nf(p_filename, n_filename, title, Fs, st, en, Pin_dB, real_file=0) + + if real_file + % real samples files of 16 bit shorts + fs=fopen(p_filename,"rb"); + p = fread(fs,Inf,"short"); + fclose(fs); + fs=fopen(n_filename,"rb"); + pn = fread(fs,Inf,"short"); + fclose(fs); + else + % GNU radio complex file input + p = load_comp(p_filename); + pn = load_comp(n_filename); + end + + % skip any start up transients + + tst = floor(0.1*Fs); ten = st + Fs - 1; + P = fft(p(tst:ten)); + N = fft(pn(tst:ten)); + + PdB = 20*log10(abs(P)); + NdB = 20*log10(abs(N)); + + figure(1); clf; + subplot(211); plot(real(p(tst:tst+floor(Fs*0.1)))); + subplot(212); plot(real(pn(tst:tst+floor(Fs*0.1)))); + + figure(2); clf; + subplot(211); plot(st:en, PdB(st:en)); + subplot(212); plot(st:en, NdB(st:en)); + + #{ + ------------------------------------------------------------------------ + + From Wikipedia: The Noise Figure is the difference in decibels + (dB) between the noise output of the actual receiver to the noise + output of an “ideal” receiver + + An ideal receiver would have an output noise power of: + + Nout_dB = 10log10(B) -174 + G_dB + + The -174 dBm/Hz figure is the thermal noise density at 25C, for + every 1Hz of bandwidth your will get -174dBm of noise power. It's + the lower limit set by the laws of physics. G_dB is the Rx gain. The + 10log10(B) term takes into account the bandwidth of the Rx. A wider + bandwidth means more total noise power. + + So if you have a 1Hz bandwidth, and a gain of 100dB, you would + expect Nout_NdB = 0 -174 + 100 = -74dBm at the rx output with no + signal. If you have a 1000Hz bandwidth receiver you would have NdB_out + = 20 -174 + 100 = -44dBm of noise power at the output. + + To determine Noise Figure: + 1) Sample the Rx output first with a test signal and then with noise only. + 2) Find the Rx gain using the test signal. + 3) Find the noise output power, then using the gain we can find the noise + input power. + 4) Normalise the noise input power to 1Hz noise bandwidth and + compare to the thermal noise floor. + + ---------------------------------------------------------------------------- + #} + + % variance is the power of a sampled signal + + Pout_dB = 10*log10(var(P(st:en))); % Rx output power with test signal + G_dB = Pout_dB - Pin_dB; % Gain of Rx + Nout_dB = 10*log10(var(N(st:en))); % Rx output power with noise + Nin_dB = Nout_dB - G_dB; % Rx input power with noise + No_dB = Nin_dB - 10*log10(en-st); % Rx input power with noise in 1Hz bandwidth + NF_dB = No_dB + 174; % compare to thermal noise to get NF + printf("%10s: Pin: %4.1f Pout: %4.1f G: %4.1f NF: %3.1f dB\n", title, Pin_dB, Pout_dB, G_dB, NF_dB); +endfunction + + +% HackRF -------------------------- + +%p_filename = "~/Desktop/blogs/nf/hackrf_100dbm_4MHz.bin"; +%n_filename = "~/Desktop/blogs/nf/hackrf_nosignal_4MHz.bin"; +p_filename = "~/codec2-dev/build_linux/unittest/hackrf_100dbm_4MHz.bin"; +n_filename = "~/codec2-dev/build_linux/unittest/hackrf_nosignal_4MHz.bin"; +det_nf(p_filename, n_filename, "HackRF", 4E6, 180E3, 600E3, -100); + +#{ +% RTL-SDR -------------------------- + +p_filename = "~/Desktop/nf/neg100dBm_2MHz.bin"; +n_filename = "~/Desktop/nf/nosignal_2MHz.bin"; +det_nf(p_filename, n_filename, "RTL-SDR", 2E6, 100E3, 300E3, -100); + +% AirSpy ------------------------- + +p_filename = "~/Desktop/nf/airspy_100dbm_2.5MSPS.bin"; +n_filename = "~/Desktop/nf/airspy_nosig_2.5MSPS.bin"; +det_nf(p_filename, n_filename, "AirSpy", 2.5E6, 100E3, 300E3, -100); + +% Fun Cube Dongle Pro Plus ------------------------- + +p_filename = "~/Desktop/nf/fcdpp_100dbm_192khz.bin"; +n_filename = "~/Desktop/nf/fcdpp_nosig_192khz.bin"; +det_nf(p_filename, n_filename, "FunCube PP", 192E3, 25E3, 125E3, -100); +#} diff --git a/libcodec2-android/src/codec2/octave/nf_from_stdio.m b/libcodec2-android/src/codec2/octave/nf_from_stdio.m new file mode 100644 index 0000000..e1d38f2 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/nf_from_stdio.m @@ -0,0 +1,133 @@ +% nf_from_gr.m +% David Rowe Mar 2018 + +#{ + + Calculate NF in real time from 16 bit real samples from stdin + + 1/ Using gqrx: + + gqrx setup: + Configure I/O devices: + To switch on LNA bias for HackRF, in Configure I/O devices menu set: + Device String: hackrf,bias=1 + To switch on LNA bias for airspy run for a few seconds this before starting gqrx: + $ airspy_rx -r /dev/null -f 435 -b 1 + I used a sample rate of 250000 for Airspy R2, 3000000 for Airspy Mini + Input options...: start with set all gain sliders set to maximum + FFT Setting.....: freq Zoom to max + Receiver Options: On spectrum display, drag filter width until it's about 12k + Filter Shape Normal + Mode USB + Tune until tone is between 2 and 4 k + Press UDP button + + Then in a Linux Term: + + $ nc -ul 7355 | octave --no-gui -qf nf_from_stdio.m 48000 + + 2/ Using command line tools. Compile airspy tools and csdr from source: + + a) Airspy: + + $ airspy_rx -a 6000000 -l 14 -m 15 -v 15 -r - -f 434.998 -b 1 | \ + csdr convert_s16_f | csdr fir_decimate_cc 50 | csdr convert_f_s16 | \ + octave --no-gui -qf ~/codec2-dev/octave/nf_from_stdio.m 120000 complex + + Note: we tuned a few kHz down to put the test tone in the 2000 to 4000 Hz range. + + b) HackRF: + + Term 1: + + $ ~/codec2-dev/octave$ nc -ul 7355 | octave --no-gui -qf nf_from_stdio.m 80000 complex + + Term 2: + + $ hackrf_transfer -r - -f 434995000 -s 4000000 -a 1 -p 1 -l 40 -g 32 | \ + csdr convert_s8_f | csdr fir_decimate_cc 50 | csdr convert_f_s16 | \ + nc localhost -u 7355 + + Note: HackRF needed a bit of tuning to get test tone in 2000 to 4000 Hz range. This + can be tricky with the command line method, easier with gqrx. + + c) rtlsdr (assuming sig gen set to 144.5MHz, -100dBm) + + Term 1: + + $ ./rtl_sdr -g 50 -s 2400000 -f 144.498E6 - | csdr convert_u8_f | csdr fir_decimate_cc 50 | \ + csdr convert_f_s16 | octave --no-gui -qf ~/codec2/octave/nf_from_stdio.m 48000 complex + + TODO: + [ ] work out why noise power st bounces around so much, signal power seems stable + [ ] reduce CPU load, in particular of plotting +#} + +graphics_toolkit ("gnuplot") + +% command line arguments + +arg_list = argv (); +if nargin == 0 + printf("\nusage: %s FsHz [real|complex] [testToneLeveldBm]\n\n", program_name()); + exit(0); +end + +Fs = str2num(arg_list{1}); +shorts_per_sample = 1; + +if nargin == 2 + if strcmp(arg_list{2}, "real") + shorts_per_sample = 1; + end + if strcmp(arg_list{2}, "complex") + shorts_per_sample = 2; + end +end + +Pin_dB = -100; % level of input test tone +if nargin == 3 + Pin_dB = str2num(arg_list{3}); +end + +printf("Fs: %d shorts_per_sample: %d Pin_dB: %f\n", Fs, shorts_per_sample, Pin_dB); + +[s,c] = fread(stdin, shorts_per_sample*Fs, "short"); + +while c + if shorts_per_sample == 2 + s = s(1:2:end)+j*s(2:2:end); + end + S = fft(s.*hanning(Fs)); + SdB = 20*log10(abs(S)); + figure(1); plot(real(s)); axis([0 Fs -4E4 4E4]); + figure(2); plot(SdB); axis([0 12000 40 180]); + + % assume sine wave is between 2000 and 4000 Hz, and dominates energy in that + % region. Noise is between 5000 - 10000 Hz + + sig_st = 2000; sig_en = 5000; + noise_st = 6000; noise_en = 10000; + + % find peak and sum power a few bins either side, this ensure we don't capture + % too much noise as well + + [pk pk_pos] = max(abs(S)); + if pk_pos > 5 + Pout_dB1 = 10*log10(sum(abs(S(pk_pos-5:pk_pos+5)).^2)); % Rx output power with test signal + else + Pout_dB1 = 0; + end + + Pout_dB = 10*log10(sum(abs(S(sig_st:sig_en)).^2)); % Rx output power with test signal + G_dB = Pout_dB - Pin_dB; % Gain of Rx + Nout_dB = 10*log10(sum(abs(S(noise_st:noise_en)).^2)/(noise_en-noise_st)); % Rx output power with noise + Nin_dB = Nout_dB - G_dB; % Rx input power with noise + No_dB = Nin_dB; %- 10*log10(noise_en-noise_st); % Rx input power with noise in 1Hz bandwidth + NF_dB = No_dB + 174; % compare to thermal noise to get NF + printf("Pout: %4.1f %d %4.1f Nout: %4.1f G: %4.1f No: %4.1f NF: %3.1f dB\n", Pout_dB, pk_pos, Pout_dB1, Nout_dB, G_dB, No_dB, NF_dB); + + pause(2); + [s,c] = fread(stdin, shorts_per_sample*Fs, "short"); +endwhile + diff --git a/libcodec2-android/src/codec2/octave/ofdm_demod_c.m b/libcodec2-android/src/codec2/octave/ofdm_demod_c.m new file mode 100644 index 0000000..4a39749 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/ofdm_demod_c.m @@ -0,0 +1,48 @@ +% ofdm_demod_c.m +% David Rowe April 2018 +% +% Plots data from The C OFDM demodulator ofdm_demod, in similar format to +% plots from Octave OFDM demodulator ofdm_rx.m +% +% Useful for of line analysis of a demod run + +function ofdm_demod_c(filename, mode="700D") + ofdm_lib; + more off; + + % init modem + + config = ofdm_init_mode(mode); + states = ofdm_init(config); + ofdm_load_const; + states.verbose = 0; + + load(filename); + + figure(1); clf; + plot(rx_np_log_c,'+'); + mx = 2*max(abs(rx_np_log_c)); + axis([-mx mx -mx mx]); + title('Scatter'); + + figure(2); clf; + plot(phase_est_pilot_log_c(:,2:Nc),'g+', 'markersize', 5); + title('Phase Est'); + axis([1 length(phase_est_pilot_log_c) -pi pi]); + + figure(3); clf; + stem(timing_est_log_c) + title('Timing Est'); + + figure(4); clf; + plot(foff_hz_log_c) + mx = max(abs(foff_hz_log_c))+1; + axis([1 max(length(foff_hz_log_c),2) -mx mx]); + title('Fine Freq'); + ylabel('Hz') + + figure(5); clf; + plot(snr_est_log_c); + ylabel('SNR (dB)') + title('SNR Estimates') +endfunction diff --git a/libcodec2-android/src/codec2/octave/ofdm_dev.m b/libcodec2-android/src/codec2/octave/ofdm_dev.m new file mode 100644 index 0000000..00319fb --- /dev/null +++ b/libcodec2-android/src/codec2/octave/ofdm_dev.m @@ -0,0 +1,1376 @@ +% ofdm_dev.m +% David Rowe April 2017 +% +% Simulations used for development and testing of Rate Fs BPSK/QPSK +% OFDM modem. + +ofdm_lib; +gp_interleaver; +ldpc; + +#{ + TODO: + [ ] run_sim neeeds to be refactored for coded operation at Nc=17 with UW +#} + +function [sim_out rx states] = run_sim(sim_in) + + % set up core modem constants + + states = ofdm_init(sim_in.bps, sim_in.Rs, sim_in.Tcp, sim_in.Ns, sim_in.Nc); + ofdm_load_const; + Nbitspervocframe = 28; + + % simulation parameters and flags + + woffset = 2*pi*sim_in.foff_hz/Fs; + dwoffset = 0; + if isfield(sim_in, "dfoff_hz_per_sec") + dwoffset = 2*pi*sim_in.dfoff_hz_per_sec/(Fs*Fs); + end + EbNodB = sim_in.EbNodB; + verbose = states.verbose = sim_in.verbose; + hf_en = sim_in.hf_en; + + timing_en = states.timing_en = sim_in.timing_en; + states.foff_est_en = foff_est_en = sim_in.foff_est_en; + states.phase_est_en = phase_est_en = sim_in.phase_est_en; + if hf_en + assert(phase_est_en == 1, "\nNo point running HF simulation without phase est!!\n"); + end + if isfield(sim_in, "high_doppler") + states.high_doppler = sim_in.high_doppler; + end + if isfield(sim_in, "diversity_en") + diversity_en = sim_in.diversity_en; + else + diversity_en = 0; + end + + if verbose == 2 + printf("Rs:..........: %4.2f\n", Rs); + printf("M:...........: %d\n", M); + printf("Ncp:.........: %d\n", Ncp); + printf("bps:.........: %d\n", bps); + printf("Nbitsperframe: %d\n", Nbitsperframe); + printf("Nsamperframe.: %d\n", Nsamperframe); + end + + % Important to define run time in seconds so HF model will evolve the same way + % for different pilot insertion rates. So lets work backwards from approx + % seconds in run to get Nbits, the total number of payload data bits + + Nrows = sim_in.Nsec*Rs; + Nframes = floor((Nrows-1)/Ns); + + % if we are interleaving over multiple frames, adjust Nframes so we have an integer number + % of interleaver frames in simulation + + interleave_en = 0; + if isfield(sim_in, "interleave_frames") + interleave_frames = sim_in.interleave_frames; + Nframes = interleave_frames*round(Nframes/interleave_frames); + interleave_en = 1; + end + + Nbits = Nframes * Nbitsperframe; % number of payload data bits + + Nr = Nbits/(Nc*bps); % Number of data rows to get Nbits total + + % double check if Nbits fit neatly into carriers + + assert(Nbits/(Nc*bps) == floor(Nbits/(Nc*bps)), "Nbits/(Nc*bps) must be an integer"); + + Nrp = Nr + Nframes + 1; % number of rows once pilots inserted + % extra row of pilots at end + + if verbose == 2 + printf("Nc...........: %d\n", Nc); + printf("Ns...........: %d (step size for pilots, Ns-1 data symbols between pilots)\n", Ns); + printf("Nr...........: %d\n", Nr); + printf("Nbits........: %d\n", Nbits); + printf("Nframes......: %d\n", Nframes); + if interleave_en + printf("Interleave fr: %d\n", interleave_frames); + end + printf("Nrp..........: %d (number of rows including pilots)\n", Nrp); + end + + % Optional LPDC code ----------------------------------------------- + + ldpc_en = states.ldpc_en = sim_in.ldpc_en; + if sim_in.ldpc_en + assert(bps == 2, "Only QPSK supported for LDPC so far....."); + HRA = sim_in.ldpc_code; + [aNr aNc] = size(HRA); + rate = states.rate = (aNc-aNr)/aNc; + Ndatabitsperframe = Nbitsperframe; + assert(aNc == Ndatabitsperframe, "Dude: Num cols of LDPC HRA must == Nbitsperframe"); + [H_rows, H_cols] = Mat2Hrows(HRA); + code_param.H_rows = H_rows; + code_param.H_cols = H_cols; + code_param.P_matrix = []; + code_param.data_bits_per_frame = length(code_param.H_cols) - length( code_param.P_matrix ); + code_param.code_bits_per_frame = aNc; + assert(aNr == Ndatabitsperframe*rate); + + modulation = states.ldpc_modulation = 'QPSK'; + mapping = states.ldpc_mapping = 'gray'; + demod_type = states.ldpc_demod_type = 0; + decoder_type = states.ldpc_decoder_type = 0; + max_iterations = states.ldpc_max_iterations = 100; + + code_param.S_matrix = CreateConstellation( modulation, 4, mapping ); + + states.code_param = code_param; + elseif diversity_en + rate = 0.5; + else + rate = 1; + end + + % set up HF model --------------------------------------------------------------- + + if hf_en + + % some typical values, or replace with user supplied + + dopplerSpreadHz = 1.0; path_delay_ms = 1; + + if isfield(sim_in, "dopplerSpreadHz") + dopplerSpreadHz = sim_in.dopplerSpreadHz; + end + if isfield(sim_in, "path_delay_ms") + path_delay_ms = sim_in.path_delay_ms; + end + path_delay_samples = path_delay_ms*Fs/1000; + printf("Doppler Spread: %3.2f Hz Path Delay: %3.2f ms %d samples\n", dopplerSpreadHz, path_delay_ms, path_delay_samples); + + % generate same fading pattern for every run + + randn('seed',1); + + spread1 = doppler_spread(dopplerSpreadHz, Fs, Nrp*(M+Ncp)*1.1); + spread2 = doppler_spread(dopplerSpreadHz, Fs, Nrp*(M+Ncp)*1.1); + + % sometimes doppler_spread() doesn't return exactly the number of samples we need + + assert(length(spread1) >= Nrp*(M+Ncp), "not enough doppler spreading samples"); + assert(length(spread2) >= Nrp*(M+Ncp), "not enough doppler spreading samples"); + end + + % ------------------------------------------------------------------ + % simulate for each Eb/No point + % ------------------------------------------------------------------ + + for nn=1:length(EbNodB) + rand('seed',1); + randn('seed',1); + + EsNo = rate * bps * (10 .^ (EbNodB(nn)/10)); + variance = 1/(M*EsNo/2); + + Nsam = Nrp*(M+Ncp); + + % generate tx bits, optionaly LDPC encode, and modulate as QPSK symbols + % note for reasons unknown LdpcEncode() returns garbage if we use > 0.5 rather than round() + + %tx_data_bits = round(rand(1,Nbits*rate)); + + % std test frame so we can x-check + + tx_data_bits = create_ldpc_test_frame(states, ldpc_en); + + tx_bits = []; tx_symbols = []; + for f=1:Nframes + st = (f-1)*Nbitsperframe*rate+1; en = st + Nbitsperframe*rate - 1; + if ldpc_en + codeword = LdpcEncode(tx_data_bits(st:en), code_param.H_rows, code_param.P_matrix); + elseif diversity_en + % Nc carriers, so Nc*bps bits/row coded, or Nc*bps*rate data bits that we repeat + codeword = []; + for rr=1:Ns-1 + st1 = st + (rr-1)*Nc*bps*rate; en1 = st1 + Nc*bps*rate - 1; + codeword = [codeword tx_data_bits(st1:en1) tx_data_bits(st1:en1)]; + end + assert(length(codeword) == Nbitsperframe); + else + % uncoded mode + codeword = tx_data_bits; + if isfield(sim_in, "uw_debug") + codeword(states.uw_ind) = states.tx_uw; + end + end + tx_bits = [tx_bits codeword]; + for b=1:2:Nbitsperframe + tx_symbols = [tx_symbols qpsk_mod(codeword(b:b+1))]; + end + end + + % optional interleaving over multiple frames + + if interleave_en + for f=1:interleave_frames:Nframes + st = (f-1)*Nbitsperframe/bps+1; en = st + Nbitsperframe*interleave_frames/bps - 1; + tx_symbols(st:en) = gp_interleave(tx_symbols(st:en)); + end + end + + % OFDM transmitter + + tx = []; + for f=1:Nframes + st = (f-1)*Nbitsperframe/bps+1; en = st + Nbitsperframe/bps - 1; + tx = [tx ofdm_txframe(states, tx_symbols(st:en))]; + end + + % add extra row of pilots at end, to allow one frame simulations, + % useful for development + + st = Nsamperframe*(Nframes-1)+1; en = st+Ncp+M-1; + tx = [tx tx(st:en)]; + assert(length(tx) == Nsam); + + % channel simulation --------------------------------------------------------------- + + if isfield(sim_in, "sample_clock_offset_ppm") + % todo: this only works for large ppm like 500, runs out of memory + % for small ppm + + if sim_in.sample_clock_offset_ppm + timebase = floor(abs(1E6/sim_in.sample_clock_offset_ppm)); + if sim_in.sample_clock_offset_ppm > 0 + tx = resample(tx, timebase+1, timebase); + else + tx = resample(tx, timebase, timebase+1); + end + + % make sure length is correct for rest of simulation + + tx = [tx zeros(1,Nsam-length(tx))]; + tx = tx(1:Nsam); + end + end + + rx = tx; + + if hf_en + + rx = tx(1:Nsam) .* spread1(1:Nsam); + rx += [zeros(1,path_delay_samples) tx(1:Nsam-path_delay_samples)] .* spread2(1:Nsam); + + % normalise rx power to same as tx + + nom_rx_pwr = 2/(Ns*(M*M)) + Nc/(M*M); + rx_pwr = var(rx); + rx *= sqrt(nom_rx_pwr/rx_pwr); + end + + phase_offset = woffset*(1:Nsam) + 0.5*dwoffset*((1:Nsam).^2); + rx = rx .* exp(j*phase_offset); + + if isfield(sim_in, "initial_noise_sams") + rx = [zeros(1, sim_in.initial_noise_sams) rx]; + Nsam = length(rx); + end + + noise = sqrt(variance)*(0.5*randn(1,Nsam) + j*0.5*randn(1,Nsam)); + snrdB = 10*log10(var(rx)/var(noise)) + 10*log10(8000) - 10*log10(3000); + rx += noise; + + % interfering carrier + + % rx += 0.04*cos((1:length(rx))*states.w(10)); + + % gain + + rx *= sim_in.gain; + + % some spare samples at end to avoid overflow as est windows may poke into the future a bit + + rx = [rx zeros(1,Nsamperframe)]; + + % optional save raw file + if 1 + sraw = real(rx*5000); + fraw = fopen("ofdm_dev.raw", "wb"); + fwrite(fraw, sraw, "short"); + fclose(fraw); + end + + % bunch of logs + + phase_est_pilot_log = []; + delta_t_log = []; + timing_est_log = []; + foff_est_hz_log = []; + Nerrs_log = []; Nerrs_coded_log = []; + rx_bits = []; rx_np = []; rx_amp = []; + sig_var_log = []; noise_var_log = []; + uw_errors_log = []; + + % reset some states for each EbNo simulation point + + states.sample_point = states.timing_est = 1; + if timing_en == 0 + states.sample_point = Ncp; + end + states.nin = Nsamperframe; + states.foff_est_hz = 0; + + % for this simulation we "prime" buffer to allow one frame runs during development + + prx = 1; + states.rxbuf(M+Ncp+2*Nsamperframe+1:Nrxbuf) = rx(prx:Nsamperframe+2*(M+Ncp)); + prx += Nsamperframe+2*(M+Ncp); + + for f=1:Nframes + + % insert samples at end of buffer, set to zero if no samples + % available to disable phase estimation on future pilots on last + % frame of simulation + + lnew = min(Nsam-prx,states.nin); + rxbuf_in = zeros(1,states.nin); + + if lnew + rxbuf_in(1:lnew) = rx(prx:prx+lnew-1); + end + prx += states.nin; + + [arx_bits states aphase_est_pilot_log arx_np arx_amp] = ofdm_demod(states, rxbuf_in); + + rx_bits = [rx_bits arx_bits]; rx_np = [rx_np arx_np]; rx_amp = [rx_amp arx_amp]; + + % note: only supported in ldpc_en = 0 Nc=17 atm, see debug_false_sync() + + if isfield(sim_in, "uw_debug") + rx_uw = arx_bits(states.uw_ind); + uw_errors = sum(xor(states.tx_uw,rx_uw)); + if verbose + printf("f: %d uw_errors: %d\n", f, uw_errors); + end + uw_errors_log = [uw_errors_log uw_errors]; + end + + timing_est_log = [timing_est_log states.timing_est]; + delta_t_log = [delta_t_log states.delta_t]; + foff_est_hz_log = [foff_est_hz_log states.foff_est_hz]; + phase_est_pilot_log = [phase_est_pilot_log; aphase_est_pilot_log]; + sig_var_log = [sig_var_log states.sig_var]; + noise_var_log = [noise_var_log states.noise_var]; + end + assert(length(rx_bits) == Nbits); + + % Optional de-interleave on rx QPSK symbols + + if interleave_en + for f=1:interleave_frames:Nframes + st = (f-1)*Nbitsperframe/bps+1; en = st + Nbitsperframe*interleave_frames/bps - 1; + rx_np(st:en) = gp_deinterleave(rx_np(st:en)); + rx_amp(st:en) = gp_deinterleave(rx_amp(st:en)); + end + end + + % Calculate raw BER/PER stats, after pilots extracted. As we may + % have used interleaving, we qpsk_demod() here rather than using + % rx_bits from ofdm_demod() + + rx_bits = zeros(1, Nbits); + for s=1:Nbits/bps + rx_bits(2*(s-1)+1:2*s) = qpsk_demod(rx_np(s)); + end + + errors = xor(tx_bits, rx_bits); + Terrs = sum(errors); + + Tpackets = Tpacketerrs = 0; + Nvocframes = floor(Nbits/Nbitspervocframe); + for fv=1:Nvocframes + st = (fv-1)*Nbitspervocframe + 1; + en = st + Nbitspervocframe - 1; + Nvocpacketerrs = sum(xor(tx_bits(st:en), rx_bits(st:en))); + if Nvocpacketerrs + Tpacketerrs++; + end + Tpackets++; + end + + % Per-modem frame error log and optional LDPC/diversity error stats + + Terrs_coded = 0; Tpackets_coded = 0; Tpacketerrs_coded = 0; sim_out.error_positions = []; + + for f=1:Nframes + st = (f-1)*Nbitsperframe+1; en = st + Nbitsperframe - 1; + Nerrs_log(f) = sum(xor(tx_bits(st:en), rx_bits(st:en))); + + st = (f-1)*Nbitsperframe/bps + 1; + en = st + Nbitsperframe/bps - 1; + r = rx_np(st:en); fade = rx_amp(st:en); + + % optional LDPC decode + + if ldpc_en + + % scale based on amplitude ests + + mean_amp = states.mean_amp; + rx_codeword = ldpc_dec(code_param, max_iterations, demod_type, decoder_type, r/mean_amp, min(EsNo,30), fade/mean_amp); + end + + % optional diversity demod + + if diversity_en + rx_codeword = []; + for rr=1:Ns-1 + for c=1:Nc/2 + s = (rr-1)*Nc + c; + rx_codeword = [rx_codeword qpsk_demod(r(s)+r(s+Nc/2))]; + end + end + assert(length(rx_codeword) == Nbitsperframe*rate); + end + + % running coded BER calcs + + if ldpc_en || diversity_en + + st = (f-1)*Nbitsperframe*rate + 1; + en = st + Nbitsperframe*rate - 1; + errors = xor(tx_data_bits(st:en), rx_codeword(1:Nbitsperframe*rate)); + Nerrs_coded = sum(errors); + Nerrs_coded_log(f) = Nerrs_coded; + Terrs_coded += Nerrs_coded; + sim_out.error_positions = [sim_out.error_positions errors]; + + % PER based on vocoder packet size, not sure it makes much + % difference compared to using all bits in LDPC code for + % packet + + atx_data_bits = tx_data_bits(st:en); + Nvocframes = Nbitsperframe*rate/Nbitspervocframe; + for fv=1:Nvocframes + st = (fv-1)*Nbitspervocframe + 1; + en = st + Nbitspervocframe - 1; + Nvocpacketerrs = sum(xor(atx_data_bits(st:en), rx_codeword(st:en))); + if Nvocpacketerrs + Tpacketerrs_coded++; + end + Tpackets_coded++; + end + end + end + + % print results of this simulation point to the console + + if verbose + if ldpc_en || diversity_en + printf("Coded EbNodB: % -4.1f BER: %5.4f Tbits: %5d Terrs: %5d PER: %5.4f Tpackets: %5d Tpacket_errs: %5d\n", + EbNodB(nn), Terrs_coded/(Nbits*rate), Nbits*rate, Terrs_coded, + Tpacketerrs_coded/Tpackets_coded, Tpackets_coded, Tpacketerrs_coded); + end + EbNodB_raw = EbNodB(nn) + 10*log10(rate); + printf("Raw EbNodB..: % -4.1f BER: %5.4f Tbits: %5d Terrs: %5d PER: %5.4f Tpackets: %5d Tpacket_errs: %5d\n", + EbNodB_raw, Terrs/Nbits, Nbits, Terrs, + Tpacketerrs/Tpackets, Tpackets, Tpacketerrs); + EsNo = mean(sig_var_log)/mean(noise_var_log); + %printf("Es/No est dB: % -4.1f\n", 10*log10(EsNo)); + sim_out.snrdB(nn) = snrdB; + sim_out.snr_estdB(nn) = 10*log10(EsNo) + 10*log10(Nc*Rs/3000); + + % returns results for plotting curves + + if ldpc_en || diversity_en + sim_out.ber(nn) = Terrs_coded/(Nbits*rate); + sim_out.per(nn) = Tpacketerrs_coded/Tpackets_coded; + else + sim_out.ber(nn) = Terrs/Nbits; + sim_out.per(nn) = Tpacketerrs/Tpackets; + end + end + + sim_out.uw_errors_log = uw_errors_log; + + % Optional plots, mostly used with run-single + + if verbose + + figure(1); clf; + plot(rx_np,'+'); + %axis([-2 2 -2 2]); + title('Scatter'); + + figure(2); clf; + plot(phase_est_pilot_log,'g+', 'markersize', 5); + title('Phase est'); + axis([1 Nrp -pi pi]); + + figure(3); clf; + subplot(211) + stem(delta_t_log) + title('delta t'); + subplot(212) + plot(timing_est_log); + title('timing est'); + + figure(4); clf; + plot(foff_est_hz_log) + axis([1 max(Nframes,2) -3 3]); + title('Fine Freq'); + + figure(5); clf; + if ldpc_en + subplot(211) + stem(Nerrs_log/Nbitsperframe); + title("Uncoded BER/frame"); + subplot(212) + stem(Nerrs_coded_log/(Nbitsperframe*rate)); + title("Coded BER/frame"); + else + title("BER/frame"); + stem(Nerrs_log/Nbitsperframe); + end + + figure(6) + Tx = abs(fft(rx(1:Nsam).*hanning(Nsam)')); + Tx_dB = 20*log10(Tx); + dF = Fs/Nsam; + plot((1:Nsam)*dF, Tx_dB); + mx = max(Tx_dB); + axis([0 Fs/2 mx-60 mx]) + + figure(7); clf; + plot(10*log10(sig_var_log),'b;Es;'); + hold on; + plot(10*log10(noise_var_log),'r;No;'); + snr_estdB = 10*log10(sig_var_log) - 10*log10(noise_var_log) + 10*log10(Nc*Rs/3000); + snr_est_smoothed_dB = filter(0.1,[1 -0.9],snr_estdB); + plot(snr_estdB,'g;SNR3k;'); + plot(snr_est_smoothed_dB,'c;SNR3k smooth;'); + + hold off; + title('Signal and Noise Power estimates'); + +#{ + if hf_en + figure(4); clf; + subplot(211) + plot(abs(spread1(1:Nsam))); + %hold on; plot(abs(spread2(1:Nsam)),'g'); hold off; + subplot(212) + plot(angle(spread1(1:Nsam))); + title('spread1 amp and phase'); + end +#} + +#{ + % todo, work out a way to plot rate Fs hf model phase + if sim_in.hf_en + plot(angle(hf_model(:,2:Nc+1))); + end +#} + end + + end +endfunction + + +function run_single(EbNodB = 100, error_pattern_filename); + Ts = 0.018; sim_in.Tcp = 0.002; + sim_in.Rs = 1/Ts; sim_in.bps = 2; sim_in.Nc = 16; sim_in.Ns = 8; + sim_in.high_doppler = 0; + + sim_in.Nsec = (sim_in.Ns+1)/sim_in.Rs; % one frame, make sure sim_in.interleave_frames = 1 + sim_in.Nsec = 120; + + sim_in.EbNodB = 20; + sim_in.verbose = 1; + sim_in.dopplerSpreadHz = 1; + sim_in.path_delay_ms = 1; + sim_in.hf_en = 1; + sim_in.foff_hz = 0; + sim_in.dfoff_hz_per_sec = 0.00; + sim_in.sample_clock_offset_ppm = 0; + sim_in.gain = 1; + + sim_in.timing_en = 0; + sim_in.foff_est_en = 0; + sim_in.phase_est_en = 1; + + load HRA_112_112.txt + sim_in.ldpc_code = HRA_112_112; + sim_in.ldpc_en = 0; + + sim_in.interleave_frames = 1; + %sim_in.diversity_en = 1; + + sim_out = run_sim(sim_in); + + if nargin == 2 + fep = fopen(error_pattern_filename, "wb"); + fwrite(fep, sim_out.error_positions, "short"); + fclose(fep); + end + +end + + +% Plot BER and PER curves for AWGN and HF: +% +% i) BER/PER against Eb/No for various coding schemes +% ii) BER/PER against Eb/No showing Pilot/CP overhead +% iii) BER/PER against SNR, with pilot/CP overhead, comparing 700C + +function run_curves + + % waveform + + Ts = 0.018; sim_in.Tcp = 0.002; + sim_in.Rs = 1/Ts; sim_in.bps = 2; sim_in.Nc = 16; sim_in.Ns = 8; + + pilot_overhead = (sim_in.Ns-1)/sim_in.Ns; + cp_overhead = Ts/(Ts+sim_in.Tcp); + overhead_dB = -10*log10(pilot_overhead*cp_overhead); + + % simulation parameters + + sim_in.verbose = 0; + sim_in.foff_hz = 0; + sim_in.gain = 1; + + sim_in.timing_en = 1; + sim_in.foff_est_en = 1; + sim_in.phase_est_en = 1; + load HRA_112_112.txt + sim_in.ldpc_code = HRA_112_112; + sim_in.ldpc_en = 0; + sim_in.hf_en = 0; + + sim_in.Nsec = 20; + sim_in.EbNodB = 0:8; + awgn_EbNodB = sim_in.EbNodB; + + awgn_theory = 0.5*erfc(sqrt(10.^(sim_in.EbNodB/10))); + awgn = run_sim(sim_in); + sim_in.ldpc_en = 1; awgn_ldpc = run_sim(sim_in); + + % Note for HF sim you really need >= 60 seconds (at Rs-50) to get sensible results c.f. theory + + sim_in.hf_en = 1; sim_in.ldpc_en = 0; + sim_in.Nsec = 60; + sim_in.EbNodB = 4:2:14; + + EbNoLin = 10.^(sim_in.EbNodB/10); + hf_theory = 0.5.*(1-sqrt(EbNoLin./(EbNoLin+1))); + + hf = run_sim(sim_in); + sim_in.diversity_en = 1; hf_diversity = run_sim(sim_in); sim_in.diversity_en = 0; + sim_in.ldpc_en = 1; hf_ldpc = run_sim(sim_in); + + % try a few interleavers + + sim_in.interleave_frames = 1; hf_ldpc_1 = run_sim(sim_in); + sim_in.interleave_frames = 8; hf_ldpc_8 = run_sim(sim_in); + sim_in.interleave_frames = 16; hf_ldpc_16 = run_sim(sim_in); + sim_in.interleave_frames = 32; hf_ldpc_32 = run_sim(sim_in); + + % Rate Fs modem BER curves of various coding schemes + + figure(1); clf; + semilogy(awgn_EbNodB, awgn_theory,'b+-;AWGN theory;'); + hold on; + semilogy(sim_in.EbNodB, hf_theory,'b+-;HF theory;'); + semilogy(awgn_EbNodB, awgn.ber,'r+-;AWGN;'); + semilogy(sim_in.EbNodB, hf.ber,'r+-;HF;'); + semilogy(sim_in.EbNodB, hf_diversity.ber,'ro-;HF diversity;'); + semilogy(awgn_EbNodB, awgn_ldpc.ber,'c+-;AWGN LDPC (224,112);'); + semilogy(sim_in.EbNodB, hf_ldpc.ber,'c+-;HF LDPC (224,112);'); + semilogy(sim_in.EbNodB, hf_ldpc_1.ber,'m+-;HF LDPC (224,112) interleave 1;'); + semilogy(sim_in.EbNodB, hf_ldpc_8.ber,'g+-;HF LDPC (224,112) interleave 8;'); + semilogy(sim_in.EbNodB, hf_ldpc_16.ber,'k+-;HF LDPC (224,112) interleave 16;'); + semilogy(sim_in.EbNodB, hf_ldpc_32.ber,'k+-;HF LDPC (224,112) interleave 32;'); + hold off; + axis([0 14 1E-3 2E-1]) + xlabel('Eb/No (dB)'); + ylabel('BER'); + grid; grid minor on; + legend('boxoff'); + legend("location", "southwest"); + title('Rate Fs modem BER for various FEC coding schemes'); + print('-deps', '-color', "ofdm_dev_ber_coding.eps") + + awgn_per_theory = 1 - (1-awgn_theory).^28; + hf_per_theory = 1 - (1-hf_theory).^28; + + % Rate Fs modem PER curves of various coding schemes + + figure(2); clf; + semilogy(awgn_EbNodB, awgn_per_theory,'b+-;AWGN theory;'); + hold on; + semilogy(sim_in.EbNodB, hf_per_theory,'b+-;HF theory;'); + semilogy(awgn_EbNodB, awgn.per,'r+-;AWGN;'); + semilogy(sim_in.EbNodB, hf.per,'r+-;HF sim;'); + semilogy(sim_in.EbNodB, hf_diversity.per,'ro-;HF diversity;'); + semilogy(awgn_EbNodB, awgn_ldpc.per,'c+-;AWGN LDPC (224,112);'); + semilogy(sim_in.EbNodB, hf_ldpc.per,'c+-;HF LDPC (224,112);'); + semilogy(sim_in.EbNodB, hf_ldpc_1.per,'m+-;HF LDPC (224,112) interleave 1;'); + semilogy(sim_in.EbNodB, hf_ldpc_8.per,'g+-;HF LDPC (224,112) interleave 8;'); + semilogy(sim_in.EbNodB, hf_ldpc_16.per,'ko-;HF LDPC (224,112) interleave 16;'); + semilogy(sim_in.EbNodB, hf_ldpc_32.per,'k+-;HF LDPC (224,112) interleave 32;'); + hold off; + axis([0 14 1E-2 1]) + xlabel('Eb/No (dB)'); + ylabel('PER'); + grid; grid minor on; + legend('boxoff'); + legend("location", "southwest"); + title('Rate Fs modem PER for various FEC coding schemes'); + print('-deps', '-color', "ofdm_dev_per_coding.eps") + + % Rate Fs modem pilot/CP overhead BER curves + + figure(3); clf; + semilogy(awgn_EbNodB, awgn_theory,'b+-;AWGN theory;'); + hold on; + semilogy(sim_in.EbNodB, hf_theory,'b+-;HF theory;'); + semilogy(awgn_EbNodB+overhead_dB, awgn_theory,'g+-;AWGN lower bound pilot + CP;'); + semilogy(sim_in.EbNodB+overhead_dB, hf_theory,'g+-;HF lower bound pilot + CP;'); + semilogy(awgn_EbNodB+overhead_dB, awgn.ber,'r+-;AWGN sim;'); + semilogy(sim_in.EbNodB+overhead_dB, hf.ber,'r+-;HF sim;'); + hold off; + axis([0 14 1E-3 2E-1]) + xlabel('Eb/No (dB)'); + ylabel('BER'); + grid; grid minor on; + legend('boxoff'); + legend("location", "southwest"); + title('Rate Fs modem BER Pilot/Cyclic Prefix overhead'); + print('-deps', '-color', "ofdm_dev_ber_overhead.eps") + + % Rate Fs modem pilot/CP overhead PER curves + + figure(4); clf; + semilogy(awgn_EbNodB, awgn_per_theory,'b+-;AWGN theory;','markersize', 10, 'linewidth', 2); + hold on; + semilogy(sim_in.EbNodB, hf_per_theory,'b+-;HF theory;','markersize', 10, 'linewidth', 2); + semilogy(awgn_EbNodB+overhead_dB, awgn_per_theory,'g+-;AWGN lower bound pilot + CP;','markersize', 10, 'linewidth', 2); + semilogy(sim_in.EbNodB+overhead_dB, hf_per_theory,'g+-;HF lower bound pilot + CP;','markersize', 10, 'linewidth', 2); + semilogy(awgn_EbNodB+overhead_dB, awgn.per,'r+-;AWGN sim;','markersize', 10, 'linewidth', 2); + semilogy(sim_in.EbNodB+overhead_dB, hf.per,'r+-;HF sim;','markersize', 10, 'linewidth', 2); + hold off; + axis([0 14 1E-2 1]) + xlabel('Eb/No (dB)'); + ylabel('PER'); + grid; grid minor on; + legend('boxoff'); + legend("location", "southwest"); + title('Rate Fs modem PER Pilot/Cyclic Prefix overhead'); + print('-deps', '-color', "ofdm_dev_per_overhead.eps") + + % SNR including pilots, CP, and 700C est + + snr_awgn_theory = awgn_EbNodB + 10*log10(700/3000); + snr_hf_theory = sim_in.EbNodB + 10*log10(700/3000); + snr_awgn = snr_awgn_theory + overhead_dB; + snr_hf = sim_in.EbNodB + 10*log10(700/3000) + overhead_dB; + + % est 700C: 2/6 symbols are pilots, 1dB implementation loss + + snr_awgn_700c = awgn_EbNodB + 10*log10(700/3000) + 10*log10(6/4) + 1; + snr_hf_700c = sim_in.EbNodB + 10*log10(700/3000) + 10*log10(6/4) + 1; + + figure(5); clf; + semilogy(snr_awgn_theory, awgn_theory,'b+-;AWGN theory;','markersize', 10, 'linewidth', 2); + hold on; + semilogy(snr_awgn_700c, awgn_theory,'g+-;AWGN 700C;','markersize', 10, 'linewidth', 2); + semilogy(snr_hf_700c, hf_diversity.ber,'go-;HF 700C;','markersize', 10, 'linewidth', 2); + semilogy(snr_hf_theory, hf_theory,'b+-;HF theory;','markersize', 10, 'linewidth', 2); + semilogy(snr_awgn, awgn_ldpc.ber,'c+-;AWGN LDPC (224,112);','markersize', 10, 'linewidth', 2); + semilogy(snr_hf, hf_ldpc.ber,'c+-;HF LDPC (224,112);','markersize', 10, 'linewidth', 2); + semilogy(snr_hf, hf_diversity.ber,'bo-;HF diversity;','markersize', 10, 'linewidth', 2); + semilogy(snr_hf, hf_ldpc_16.ber,'k+-;HF LDPC (224,112) interleave 16;','markersize', 10, 'linewidth', 2); + hold off; + axis([-5 8 1E-3 2E-1]) + xlabel('SNR (3000Hz noise BW) (dB)'); + ylabel('BER'); + grid; grid minor on; + legend('boxoff'); + legend("location", "southwest"); + title('Rate Fs modem BER versus SNR including pilot/CP overhead'); + print('-deps', '-color', "ofdm_dev_ber_snr.eps") + +end + + +% Plot BER and PER curves for AWGN and HF with various estimators + +function run_curves_estimators + + Nsec_awgn = 20; + Nsec_hf = 60; + + % waveform + + Ts = 0.018; sim_in.Tcp = 0.002; + sim_in.Rs = 1/Ts; sim_in.bps = 2; sim_in.Nc = 16; sim_in.Ns = 8; + + % simulation parameters + + sim_in.verbose = 0; sim_in.foff_hz = 0; sim_in.ldpc_en = 0; + + sim_in.phase_est_en = 1; + sim_in.timing_en = sim_in.foff_est_en = 0; + + % AWGN simulations + + sim_in.hf_en = 0; sim_in.Nsec = Nsec_awgn; sim_in.EbNodB = 0:2:6; + sim_in.timing_en = sim_in.foff_est_en = 0; + + awgn_EbNodB = sim_in.EbNodB; + awgn_theory = 0.5*erfc(sqrt(10.^(sim_in.EbNodB/10))); + awgn = run_sim(sim_in); + sim_in.timing_en = 1; awgn_timing = run_sim(sim_in); + sim_in.foff_est_en = 1; awgn_foff_est = run_sim(sim_in); + + sim_in.dfoff_hz_per_sec = 0.02; awgn_dfoff = run_sim(sim_in); + + % HF simulations + + sim_in.hf_en = 1; sim_in.Nsec = Nsec_hf; sim_in.EbNodB = 4:2:8; + sim_in.timing_en = sim_in.foff_est_en = 0; + + EbNoLin = 10.^(sim_in.EbNodB/10); + hf_theory = 0.5.*(1-sqrt(EbNoLin./(EbNoLin+1))); + + hf = run_sim(sim_in); + sim_in.timing_en = 1; hf_timing = run_sim(sim_in); + sim_in.timing_en = 0; sim_in.foff_est_en = 1; hf_foff_est = run_sim(sim_in); + sim_in.timing_en = 1; hf_timing_foff_est = run_sim(sim_in); + + sim_in.dfoff_hz_per_sec = 0.02; hf_dfoff = run_sim(sim_in); sim_in.dfoff_hz_per_sec = 0.0; + + figure(1); clf; + semilogy(awgn_EbNodB, awgn_theory,'b+-;AWGN theory;'); + hold on; + semilogy(awgn_EbNodB, awgn.ber,'r+-;AWGN phase;'); + semilogy(awgn_EbNodB, awgn_timing.ber,'go-;AWGN phase+timing;'); + semilogy(awgn_EbNodB, awgn_foff_est.ber,'d+-;AWGN phase+timing+foff_est;'); + semilogy(awgn_EbNodB, awgn_dfoff.ber,'m+-;AWGN all + 0.02Hz/s drift;'); + semilogy(sim_in.EbNodB, hf_theory,'b+-;HF theory;'); + semilogy(sim_in.EbNodB, hf.ber,'r+-;HF phase;'); + semilogy(sim_in.EbNodB, hf_timing.ber,'go-;HF phase+timing;'); + semilogy(sim_in.EbNodB, hf_timing_foff_est.ber,'kd-;HF phase+foff_est;'); + semilogy(sim_in.EbNodB, hf_foff_est.ber,'c+-;HF phase+timing+foff_est;'); + semilogy(sim_in.EbNodB, hf_dfoff.ber,'m+-;HF + 0.02Hz/s drift;'); + hold off; + axis([0 8 5E-3 1E-1]) + xlabel('Eb/No (dB)'); + ylabel('BER'); + grid; grid minor on; + legend('boxoff'); + legend("location", "southeast"); + title('Rate Fs modem BER with estimators'); + print('-deps', '-color', "ofdm_dev_estimators.eps") + + % Simulate different HF path delays + + sim_in.hf_en = 1; sim_in.Nsec = Nsec_hf; sim_in.EbNodB = 4:2:8; + sim_in.timing_en = sim_in.foff_est_en = 0; + + sim_in.path_delay_ms = 0; hf0 = run_sim(sim_in); + sim_in.path_delay_ms = 0.5; hf500us = run_sim(sim_in); + sim_in.path_delay_ms = 1; hf1ms = run_sim(sim_in); + sim_in.path_delay_ms = 2; hf2ms = run_sim(sim_in); + + figure(2); clf; + semilogy(sim_in.EbNodB, hf_theory,'b+-;HF theory;'); + hold on; + semilogy(sim_in.EbNodB, hf0.ber,'r+-;HF phase 0 ms;'); + semilogy(sim_in.EbNodB, hf500us.ber,'g+-;HF phase 0.5 ms;'); + semilogy(sim_in.EbNodB, hf1ms.ber,'c+-;HF phase 1 ms;'); + semilogy(sim_in.EbNodB, hf2ms.ber,'k+-;HF phase 2 ms;'); + hold off; + axis([3 9 1E-2 1E-1]) + xlabel('Eb/No (dB)'); + ylabel('BER'); + grid; grid minor on; + legend('boxoff'); + legend("location", "southeast"); + title('Rate Fs modem BER across HF path delay'); + print('-deps', '-color', "ofdm_dev_estimators.eps") +end + + +% Plot SNR actual and estimated for various channels +% Note no acquistion, as this can upset results, e.g. if +% sync is lost. We average SNR over entire run, in practice +% there will be some sort of IIR averager. + +function run_curves_snr + + Nsec_awgn = 30; + Nsec_hf = 60; + + % waveform + + Ts = 0.018; sim_in.Tcp = 0.002; + sim_in.Rs = 1/Ts; sim_in.bps = 2; sim_in.Nc = 16; sim_in.Ns = 8; + + % simulation parameters + + sim_in.verbose = 1; sim_in.foff_hz = 0; sim_in.ldpc_en = 0; sim_in.gain = 1; + sim_in.phase_est_en = sim_in.timing_en = sim_in.foff_est_en = 1; + + % AWGN simulation + + sim_in.EbNodB = 0:3:12; + sim_in.hf_en = 0; sim_in.Nsec = Nsec_awgn; + + awgn = run_sim(sim_in); + + % HF simulations + + sim_in.hf_en = 1; sim_in.Nsec = Nsec_hf; sim_in.dopplerSpreadHz = 1; hf_fast = run_sim(sim_in); + sim_in.dopplerSpreadHz = 0.5; hf_mid = run_sim(sim_in); + sim_in.dopplerSpreadHz = 0.2; hf_slow = run_sim(sim_in); + + figure(1); clf; + plot(sim_in.EbNodB, awgn.snrdB,'b+-;AWGN SNR;'); + hold on; + plot(sim_in.EbNodB, awgn.snr_estdB ,'g+-;AWGN SNR est;'); + plot(sim_in.EbNodB, hf_slow.snr_estdB,'k+-;HF 0.2 Hz SNR est;'); + plot(sim_in.EbNodB, hf_mid.snr_estdB ,'r+-;HF 0.5 Hz SNR est;'); + plot(sim_in.EbNodB, hf_fast.snr_estdB,'c+-;HF 1.0 Hz SNR est;'); + hold off; + xlabel('Eb/No (dB)'); + ylabel('SNR (dB)'); + grid; + legend('boxoff'); + title('SNR Actual and Estimated'); + legend("location", "northwest"); + print('-deps', '-color', "ofdm_dev_snr.eps") + +end + + +% Run an acquisition test, returning vectors of estimation errors. +% Generates a vector of noise followed by continous rx signal to +% simulate signal starting. We then measure how long it takes to +% get good timing and freq estimates. + +function [delta_ct delta_foff timing_mx_log] = acquisition_test(mode="700D", Ntests=10, EbNodB=100, foff_hz=0, hf_en=0, verbose=0) + + [bps Rs Tcp Ns Nc] = ofdm_init_mode(mode); + states = ofdm_init(bps, Rs, Tcp, Ns, Nc); + sim_in.Tcp = Tcp; + sim_in.Rs = Rs; sim_in.bps = bps; sim_in.Nc = Nc; sim_in.Ns = Ns; + + sim_in.Nsec = (Ntests+1)*(sim_in.Ns+1)/sim_in.Rs; + + #{ + Notes: + 1) uncoded modem operating point, e.g -1dB for AWGN + 2) run_sim adds complex noise, when we take the real() below, this relects + the -ve noise over to the +ve side, increasing the noise by 3dB. In + ofdm_tx.m and friends, we add real nosie that is correctly scaled so + no problemo. This means we need to increase the Eb/No below by 3dB + to ensure the correct level of noise at the input of the timing_est. + #} + + sim_in.EbNodB = EbNodB + 3; + sim_in.verbose = 0; + sim_in.hf_en = hf_en; + sim_in.foff_hz = foff_hz; + sim_in.gain = 1; + sim_in.timing_en = 1; + sim_in.foff_est_en = 1; + sim_in.phase_est_en = 1; + sim_in.ldpc_en = 0; + + % optionally stick a bunch of noise in front of signal to confuse things + + sim_in.initial_noise_sams = 0; + + [sim_out rx states] = run_sim(sim_in); + + states.verbose = verbose; + + % set up acquistion + + Nsamperframe = states.Nsamperframe; M = states.M; Ncp = states.Ncp; + rate_fs_pilot_samples = states.rate_fs_pilot_samples; + + % test fine or acquisition over test signal + + delta_ct = []; delta_foff = []; timing_mx_log = []; foff_metric_log = []; + + + % coarse acquiistion test. We have no idea of timing or freq + % offset for coarse we just use constant window shifts to simulate + % a bunch of trials, this allows averaging of freq est + % metric over time as we receive more and more frames + + st = 0.5*Nsamperframe; + en = 2.5*Nsamperframe - 1; % note this gives Nsamperframe possibilities for coarse timing + + % actual known position of correct coarse timing + + ct_target = mod(sim_in.initial_noise_sams + Nsamperframe/2, Nsamperframe); + + i = 1; + states.foff_metric = 0; + for w=1:Nsamperframe:length(rx)-4*Nsamperframe + [ct_est timing_valid timing_mx] = est_timing(states, real(rx(w+st:w+en)), rate_fs_pilot_samples, 1); + foff_est = est_freq_offset_pilot_corr(states, real(rx(w+st:w+en)), rate_fs_pilot_samples, ct_est); + if states.verbose + printf("i: %2d w: %5d ct_est: %4d foff_est: %5.1f timing_mx: %3.2f timing_vld: %d\n", i++, w, ct_est, foff_est, timing_mx, timing_valid); + end + + % valid coarse timing ests are modulo Nsamperframe + + delta_ct = [delta_ct ct_est-ct_target]; + delta_foff = [delta_foff (foff_est-foff_hz)]; + timing_mx_log = [timing_mx_log; timing_mx]; + foff_metric_log = [foff_metric_log states.foff_metric]; + end + + if states.verbose > 1 + %printf("mean: %f std: %f\n", mean(delta_foff), std(delta_foff)); + figure(1); clf; plot(timing_mx_log,'+-'); + figure(2); clf; plot(delta_ct,'+-'); + figure(3); clf; plot(delta_foff,'+-'); + figure(4); clf; plot(foff_metric_log,'+'); + figure(5); clf; plot(real(rx)) + end + +endfunction + + +#{ + + Generates aquisistion statistics for AWGN and HF channels for + continuous signals. Probability of acquistion is what matters, + e.g. if it's 50% we can expect sync within 2 frames. + +#} + +function res = acquisition_histograms(mode="700D", fine_en = 0, foff, EbNoAWGN=-1, EbNoHF=3, verbose=1) + Fs = 8000; + Ntests = 100; + + % allowable tolerance for acquistion + + ftol_hz = 1.5; % we can sync up on this + ttol_samples = 0.002*Fs; % 2ms, ie CP length + + % AWGN channel at uncoded Eb/No operating point + + [dct dfoff] = acquisition_test(mode, Ntests, EbNoAWGN, foff, 0, fine_en); + + % Probability of acquistion is what matters, e.g. if it's 50% we can + % expect sync within 2 frames + + PtAWGN = length(find (abs(dct) < ttol_samples))/length(dct); + printf("AWGN P(time offset acq) = %3.2f\n", PtAWGN); + if fine_en == 0 + PfAWGN = length(find (abs(dfoff) < ftol_hz))/length(dfoff); + printf("AWGN P(freq offset acq) = %3.2f\n", PfAWGN); + end + + if verbose + figure(1); clf; + hist(dct(find (abs(dct) < ttol_samples))) + t = sprintf("Coarse Timing Error AWGN EbNo = %3.2f foff = %3.1f", EbNoAWGN, foff); + title(t) + if fine_en == 0 + figure(2) + hist(dfoff(find(abs(dfoff) < 2*ftol_hz))) + t = sprintf("Coarse Freq Error AWGN EbNo = %3.2f foff = %3.1f", EbNoAWGN, foff); + title(t); + end + end + + % HF channel at uncoded operating point + + [dct dfoff] = acquisition_test(mode, Ntests, EbNoHF, foff, 1, fine_en); + + PtHF = length(find (abs(dct) < ttol_samples))/length(dct); + printf("HF P(time offset acq) = %3.2f\n", PtHF); + if fine_en == 0 + PfHF = length(find (abs(dfoff) < ftol_hz))/length(dfoff) + printf("HF P(freq offset acq) = %3.2f\n", PfHF); + end + + if verbose + figure(3); clf; + hist(dct(find (abs(dct) < ttol_samples))) + t = sprintf("Coarse Timing Error HF EbNo = %3.2f foff = %3.1f", EbNoHF, foff); + title(t) + if fine_en == 0 + figure(4) + hist(dfoff(find(abs(dfoff) < 2*ftol_hz))) + t = sprintf("Coarse Freq Error HF EbNo = %3.2f foff = %3.1f", EbNoHF, foff); + title(t); + end + end + + res = [PtAWGN PfAWGN PtHF PfHF]; +endfunction + + +% plot some curves of Acquisition probability against EbNo and freq offset + +function acquistion_curves(mode="700D") + + EbNo = [-1 2 5 8 20]; + %foff = [-20 -15 -10 -5 0 5 10 15 20]; + foff = [-15 -5 0 5 15]; + cc = ['b' 'g' 'k' 'c' 'm']; + + figure(1); clf; hold on; title('P(timing) AWGN'); xlabel('Eb/No dB'); legend('location', 'southeast'); + figure(2); clf; hold on; title('P(freq) AWGN'); xlabel('Eb/No dB'); legend('location', 'southeast'); + figure(3); clf; hold on; title('P(timing) HF'); xlabel('Eb/No dB'); legend('location', 'southeast'); + figure(4); clf; hold on; title('P(freq) HF'); xlabel('Eb/No dB'); legend('location', 'southeast'); + + for f=1:4 + ylim([0 1]); + end + + for f = 1:length(foff) + afoff = foff(f); + res_log = []; + for e = 1:length(EbNo) + aEbNo = EbNo(e); + res = zeros(1,4); + res = acquisition_histograms(mode, fine_en = 0, afoff, aEbNo, aEbNo+4, verbose = 0); + res_log = [res_log; res]; + end + figure(1); l = sprintf('%c+-;%3.1f Hz;', cc(f), afoff); plot(EbNo, res_log(:,1), l); + figure(2); l = sprintf('%c+-;%3.1f Hz;', cc(f), afoff); plot(EbNo, res_log(:,3), l); + figure(3); l = sprintf('%c+-;%3.1f Hz;', cc(f), afoff); plot(EbNo+4, res_log(:,2), l); + figure(4); l = sprintf('%c+-;%3.1f Hz;', cc(f), afoff); plot(EbNo+4, res_log(:,4), l); + end + + figure(1); print('-deps', '-color', sprintf("ofdm_dev_acq_curves_time_awgn_%s.eps", mode)) + figure(2); print('-deps', '-color', sprintf("ofdm_dev_acq_curves_freq_awgn_%s.eps", mode)) + figure(3); print('-deps', '-color', sprintf("ofdm_dev_acq_curves_time_hf_%s.eps", mode)) + figure(4); print('-deps', '-color', sprintf("ofdm_dev_acq_curves_freq_hf_%s.eps", mode)) +endfunction + + +% Used to develop sync state machine - in particular a metric to show +% we are out of sync, or have sync with a bad freq offset est, or have +% lost modem signal + +function sync_metrics(mode = "700D", x_axis = 'EbNo') + Fs = 8000; + Ntests = 4; + f_offHz = [-25:25]; + EbNodB = [-10 0 3 6 10 20]; + %f_offHz = [-5:5:5]; + %EbNodB = [-10 0 10]; + cc = ['b' 'g' 'k' 'c' 'm' 'b']; + pt = ['+' '+' '+' '+' '+' 'o']; + + mean_mx1_log = mean_dfoff_log = []; + for f = 1:length(f_offHz) + af_offHz = f_offHz(f); + mean_mx1_row = mean_dfoff_row = []; + for e = 1:length(EbNodB) + aEbNodB = EbNodB(e); + [dct dfoff timing_mx_log] = acquisition_test(mode, Ntests, aEbNodB, af_offHz); + mean_mx1 = mean(timing_mx_log(:,1)); + printf("f_offHz: %5.2f EbNodB: % 6.2f mx1: %3.2f\n", af_offHz, aEbNodB, mean_mx1); + mean_mx1_row = [mean_mx1_row mean_mx1]; + mean_dfoff_row = [mean_dfoff_row mean(dfoff)]; + end + mean_mx1_log = [mean_mx1_log; mean_mx1_row]; + mean_dfoff_log = [mean_dfoff_log; mean_dfoff_row]; + end + + figure(1); clf; hold on; grid; + if strcmp(x_axis,'EbNo') + for f = 1:length(f_offHz) + if f == 2, hold on, end; + leg1 = sprintf("b+-;mx1 %4.1f Hz;", f_offHz(f)); + plot(EbNodB, mean_mx1_log(f,:), leg1) + end + hold off; + xlabel('Eb/No (dB)'); + ylabel('Coefficient') + title('Pilot Correlation Metric against Eb/No for different Freq Offsets'); + legend("location", "northwest"); legend("boxoff"); + axis([min(EbNodB) max(EbNodB) 0 1.2]) + print('-deps', '-color', "ofdm_dev_pilot_correlation_ebno.eps") + end + + if strcmp(x_axis,'freq') + % x axis is freq + + for e = length(EbNodB):-1:1 + leg1 = sprintf("%c%c-;mx1 %3.0f dB;", cc(e), pt(e), EbNodB(e)); + plot(f_offHz, mean_mx1_log(:,e), leg1) + end + hold off; + xlabel('freq offset (Hz)'); + ylabel('Coefficient') + title('Pilot Correlation Metric against Freq Offset for different Eb/No dB'); + legend("location", "northwest"); legend("boxoff"); + axis([min(f_offHz) max(f_offHz) 0 1]) + print('-deps', '-color', "ofdm_dev_pilot_correlation_freq.eps") + + mean_dfoff_log + + figure(2); clf; + for e = 1:length(EbNodB) + if e == 2, hold on, end; + leg1 = sprintf("+-;mx1 %3.0f dB;", EbNodB(e)); + plot(f_offHz, mean_dfoff_log(:,e), leg1) + end + hold off; + xlabel('freq offset (Hz)'); + ylabel('Mean Freq Est Error') + title('Freq Est Error against Freq Offset for different Eb/No dB'); + axis([min(f_offHz) max(f_offHz) -5 5]) + end + +endfunction + + +% during development it was discovered demod could obtain a false sync with no UW +% errors at +/- 7Hz, approx the frame rate. This function is used to explore that + +function debug_false_sync(EbNodB = 100) + Ts = 0.018; + sim_in.Tcp = 0.002; + sim_in.Rs = 1/Ts; sim_in.bps = 2; sim_in.Nc = 17; sim_in.Ns = 8; + + sim_in.Nsec = (sim_in.Ns+1)/sim_in.Rs; % one frame, make sure sim_in.interleave_frames = 1 + sim_in.Nsec = 1; + + sim_in.EbNodB = 40; + sim_in.verbose = 0; + sim_in.hf_en = 0; + sim_in.foff_hz = 0; + sim_in.dfoff_hz_per_sec = 0.00; + sim_in.sample_clock_offset_ppm = 0; + sim_in.gain = 1; + + sim_in.timing_en = 0; + sim_in.foff_est_en = 0; + sim_in.phase_est_en = 1; + + load HRA_112_112.txt + sim_in.ldpc_code = HRA_112_112; + sim_in.ldpc_en = 0; + + %sim_in.interleave_frames = 1; + %sim_in.diversity_en = 1; + + sim_in.uw_debug = 1; + + foff = -25:0.5:25; + for f=1:length(foff) + sim_in.foff_hz = foff(f); + sim_out = run_sim(sim_in); + min_uw_errors(f) = min(sim_out.uw_errors_log(2:end-1)); + printf("f: %4.2f %2d\n", foff(f), min_uw_errors(f)); + end + figure(1); clf; + plot(foff, min_uw_errors); + title('UW errors versus freq offset'); + xlabel('Freq Offset (Hz)'); +end + +#{ +% Using an input raw file, plot frame by frame metric information, +% used to debug false syncs + +function metric_fbf(fn, Nsec) + Ts = 0.018; + states = ofdm_init(bps=2, Rs=1/Ts, Tcp=0.002, Ns=8, Nc=17); + ofdm_load_const; + states.verbose = 2; + + % factor of 2 as input is a real valued signal + + Ascale = states.amp_scale/2; + f = fopen(fn,"rb"); rx = fread(f,Inf,"short")'/Ascale; fclose(f); + if (nargin == 2) && (length(rx) > Nsec*Fs) + rx = rx(1:Nsec*Fs); + end + + Nsam = length(rx); Nframes = floor(Nsam/Nsamperframe) - 2; + + % main loop ---------------------------------------------------------------- + + ct_est_log = timing_mx_log = st_log = foff_est_log = foff_metric_log = []; + for f=1:Nframes + st = (f-1)*Nsamperframe+1; en = st + 2*Nsamperframe; + [ct_est timing_valid timing_mx] = est_timing(states, rx(st:en)', states.rate_fs_pilot_samples); + foff_est = est_freq_offset_pilot_corr(states, rx(st:en)', states.rate_fs_pilot_samples, ct_est); + + printf("i: %2d w: %5d ct_est: %4d foff_est: %5.1f timing_mx: %3.2f timing_vld: %d\n", f, st, ct_est, foff_est, timing_mx, timing_valid); + + i = 1; w_log = timing_mx_log = av_level_log = []; + states.foff_metric = 0; + for w=1:Nsamperframe:length(rx)-4*Nsamperframe + printf("%3d %5d", i,w); + #{ + if i == 30 + states.verbose = 3; + else + states.verbose = 2; + end + #} + [ct_est timing_valid timing_mx av_level] = est_timing(states, real(rx(w+st:w+en)), states.rate_fs_pilot_samples); + i++; + w_log = [w_log w]; + timing_mx_log = [timing_mx_log timing_mx]; + av_level_log = [av_level_log av_level]; + end + + figure(1); clf; plot(timing_mx_log,'+-'); title('mx'); + figure(2); clf; plot(ct_est_log,'+-'); title('ct'); + figure(3); clf; plot(foff_est_log,'+-'); title('foff est'); + figure(4); clf; hist(foff_est_log); title('foff est'); + figure(5); clf; plot(real(rx)); axis([1 length(rx) -max(abs(rx)) max(abs(rx))]); + figure(6); clf; plot_specgram(rx); axis([0 Nsec 500 2500]) + + figure(2); clf; + mx = max(abs(rx)); + subplot(211); plot(rx); axis([0 Nsam -mx mx]); + subplot(212); hold on; + plot(w_log,timing_mx_log,'b+-;timing mx;'); + plot(w_log,av_level_log,'g+-;av level;'); + hold off; +endfunction +#} + +% --------------------------------------------------------- +% choose simulation to run here +% --------------------------------------------------------- + +format; +more off; + +path_to_cml = '~/cml'; +addpath(strcat(path_to_cml, "/mex"), strcat(path_to_cml, "/mat")); +if exist("Somap") == 0 + printf("Can't find CML mex directory so we wont init CML...\n"); +else + printf("OK found CML mex directory so will init CML...\n"); + init_cml('~/cml/'); +end + +%run_single(100); +%run_curves +%run_curves_estimators +%acquisition_histograms("700D", fin_en=0, foff_hz=-15, EbNoAWGN=-1, EbNoHF=3) +%acquisition_test("700D", Ntests=10, EbNodB=-1, foff_hz=0, hf_en=0, verbose=1); +%sync_metrics('freq') +%run_curves_snr +%acquisition_dev(Ntests=10, EbNodB=100, foff_hz=0) +%acquistion_curves +%debug_false_sync +%metric_fbf("ofdm_test.raw") diff --git a/libcodec2-android/src/codec2/octave/ofdm_ldpc_rx.m b/libcodec2-android/src/codec2/octave/ofdm_ldpc_rx.m new file mode 100644 index 0000000..bca3da5 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/ofdm_ldpc_rx.m @@ -0,0 +1,270 @@ +% ofdm_ldpc_rx.m +% David Rowe April 2017 +% +% OFDM file based rx, with LDPC and interleaver, Octave version of src/ofdm_demod.c + +function time_to_sync = ofdm_ldpc_rx(filename, mode="700D", error_pattern_filename, start_secs, len_secs=0) + ofdm_lib; + ldpc; + gp_interleaver; + more off; + + % optional DPSK testing + dpsk = 0; + if strcmp(mode,"700D-DPSK") + mode = "700D"; dpsk = 1; + end + if strcmp(mode,"2020-DPSK") + mode = "2020"; dpsk = 1; + end + + % init modem + + config = ofdm_init_mode(mode); + states = ofdm_init(config); + ofdm_load_const; + states.verbose = 1; + states.dpsk = dpsk; + + % some constants used for assembling modem frames + + [code_param Nbitspercodecframe Ncodecframespermodemframe] = codec_to_frame_packing(states, mode); + + % load real samples from file + + Ascale= states.amp_scale/2.0; % /2 as real signal has half amplitude + frx=fopen(filename,"rb"); rx = fread(frx, Inf, "short")/Ascale; fclose(frx); + if (nargin >= 5) printf("start_secs: %d\n", start_secs); rx = rx(start_secs*Fs+1:end); end + if (nargin >= 6) printf("len_secs: %d\n", len_secs); rx = rx(1:len_secs*Fs); end + Nsam = length(rx); Nframes = floor(Nsam/Nsamperframe); + prx = 1; + + % Generate tx frame for BER calcs + + payload_bits = round(ofdm_rand(code_param.data_bits_per_frame)/32767); + tx_bits = fec_encode(states, code_param, mode, payload_bits, Ncodecframespermodemframe, Nbitspercodecframe); + + % Some handy constants + + Nsymsperframe = Nbitsperframe/bps; + Nsymsperpacket = Nbitsperpacket/bps; + Ncodedbitsperpacket = code_param.coded_bits_per_frame; + Ncodedsymsperpacket = code_param.coded_syms_per_frame; + + % init logs and BER stats + + rx_bits = []; rx_np_log = []; timing_est_log = []; delta_t_log = []; foff_est_hz_log = []; + phase_est_pilot_log = []; + sig_var_log = []; noise_var_log = []; + Terrs = Tbits = Terrs_coded = Tbits_coded = Perrs_coded = 0; + Nerrs_coded_log = Nerrs_log = []; + error_positions = []; + Nerrs_coded = Nerrs_raw = 0; + paritychecks = [0]; + time_to_sync = -1; + rx_uw = zeros(1,states.Nuwbits); + + rx_syms = zeros(1,Nsymsperpacket); rx_amps = zeros(1,Nsymsperpacket); + packet_count = frame_count = 0; + + #{ + % 'prime' rx buf to get correct coarse timing (for now) + + prx = 1; + nin = Nsamperframe+2*(M+Ncp); + states.rxbuf(Nrxbuf-nin+1:Nrxbuf) = rx(prx:nin); + prx += nin; + #} + + % main loop ---------------------------------------------------------------- + + for f=1:Nframes + + % insert samples at end of buffer, set to zero if no samples + % available to disable phase estimation on future pilots on last + % frame of simulation + + lnew = min(Nsam-prx,states.nin); + rxbuf_in = zeros(1,states.nin); + + if lnew + rxbuf_in(1:lnew) = rx(prx:prx+lnew-1); + end + prx += states.nin; + + if states.verbose + printf("f: %3d nin: %4d st: %-6s ", f, states.nin, states.sync_state); + end + + if strcmp(states.sync_state,'search') + [timing_valid states] = ofdm_sync_search(states, rxbuf_in); + end + + if strcmp(states.sync_state,'synced') || strcmp(states.sync_state,'trial') + % accumulate a buffer of data symbols for this packet + rx_syms(1:end-Nsymsperframe) = rx_syms(Nsymsperframe+1:end); + rx_amps(1:end-Nsymsperframe) = rx_amps(Nsymsperframe+1:end); + [states rx_bits aphase_est_pilot_log arx_np arx_amp] = ofdm_demod(states, rxbuf_in); + rx_syms(end-Nsymsperframe+1:end) = arx_np; + rx_amps(end-Nsymsperframe+1:end) = arx_amp; + + rx_uw = extract_uw(states, rx_syms(end-Nuwframes*Nsymsperframe+1:end)); + + % We need the full packet of symbols before disassembling and checking for bit errors + if (states.modem_frame == (states.Np-1)) + packet_count++; + + % unpack, de-interleave PSK symbols and symbol amplitudes + [rx_uw payload_syms payload_amps txt_bits] = disassemble_modem_packet(states, rx_syms, rx_amps); + payload_syms_de = gp_deinterleave(payload_syms); + payload_amps_de = gp_deinterleave(payload_amps); + + % Count uncoded (raw) errors + rx_bits = zeros(1,Ncodedbitsperpacket); + for s=1:Ncodedsymsperpacket + rx_bits(2*s-1:2*s) = qpsk_demod(payload_syms_de(s)); + end + errors = xor(tx_bits, rx_bits); + Nerrs = sum(errors); + Nerrs_log = [Nerrs_log Nerrs]; Nerrs_raw = Nerrs; + Terrs += Nerrs; + Tbits += Nbitsperpacket; + + % LDPC decode + + rx_bits = []; mean_amp = states.mean_amp; + if strcmp(mode, "700D") || strcmp(mode, "datac1") || strcmp(mode, "datac2") || strcmp(mode, "datac3") || strcmp(mode, "qam16") + if states.noise_var + EsNo = states.sig_var/states.noise_var; + else + EsNo = 3; + end + [rx_codeword paritychecks] = ldpc_dec(code_param, mx_iter=100, demod=0, dec=0, ... + payload_syms_de/mean_amp, min(EsNo,30), payload_amps_de/mean_amp); + arx_bits = rx_codeword(1:code_param.data_bits_per_frame); + errors = xor(payload_bits, arx_bits); + Nerrs_coded = sum(errors); + rx_bits = [rx_bits arx_bits]; + end + + if Nerrs_coded Perrs_coded++; end + Terrs_coded += Nerrs_coded; + Tbits_coded += code_param.data_bits_per_frame; + Nerrs_coded_log = [Nerrs_coded_log Nerrs_coded]; + end + + % we are in sync so log modem states + + rx_np_log = [rx_np_log arx_np]; + timing_est_log = [timing_est_log states.timing_est]; + delta_t_log = [delta_t_log states.delta_t]; + foff_est_hz_log = [foff_est_hz_log states.foff_est_hz]; + phase_est_pilot_log = [phase_est_pilot_log; aphase_est_pilot_log]; + sig_var_log = [sig_var_log states.sig_var]; + noise_var_log = [noise_var_log states.noise_var]; + frame_count++; + end + + if strcmp(mode,"datac1") || strcmp(mode,"datac2") || strcmp(mode,"datac3") || strcmp(mode,"qam16") + states = sync_state_machine2(states, rx_uw); + else + states = sync_state_machine(states, rx_uw); + end + + if states.verbose + if strcmp(states.last_sync_state,'synced') || strcmp(states.last_sync_state,'trial') + pcc = max(paritychecks); + iter = 0; + for i=1:length(paritychecks) + if paritychecks(i) iter=i; end + end + % complete logging line + printf("euw: %2d %d mf: %2d pbw: %s eraw: %3d ecod: %3d iter: %3d pcc: %3d foff: %4.1f", + states.uw_errors, states.sync_counter, states.modem_frame, states.phase_est_bandwidth(1), + Nerrs_raw, Nerrs_coded, iter, pcc, states.foff_est_hz); + % detect a sucessful sync (for tests calling this function) + if (time_to_sync < 0) && (strcmp(states.sync_state,'synced') || strcmp(states.sync_state,'trial')) + if (pcc > 80) && (iter != 100) + time_to_sync = f*Nsamperframe/Fs; + end + end + end + printf("\n"); + end + + % act on any events returned by modem sync state machine + + if states.sync_start + Nerrs_raw = Nerrs_coded = 0; + Nerrs_log = []; + Terrs = Tbits = 0; + Tpacketerrs = Tpackets = 0; + Terrs_coded = Tbits_coded = 0; + error_positions = Nerrs_coded_log = []; + end + end + + printf("Raw BER..: %5.4f Tbits: %5d Terrs: %5d\n", Terrs/(Tbits+1E-12), Tbits, Terrs); + printf("Coded BER: %5.4f Tbits: %5d Terrs: %5d\n", Terrs_coded/(Tbits_coded+1E-12), Tbits_coded, Terrs_coded); + printf("Coded PER: %5.4f Pckts: %5d Perrs: %5d\n", Perrs_coded/(packet_count+1E-12), packet_count, Perrs_coded); + + if length(rx_np_log) + figure(1); clf; + plot(rx_np_log,'+'); + mx = max(abs(rx_np_log)); + axis([-mx mx -mx mx]); + title('Scatter'); + + figure(2); clf; + plot(phase_est_pilot_log,'g+', 'markersize', 5); + title('Phase est'); + axis([1 length(phase_est_pilot_log) -pi pi]); + + figure(3); clf; + subplot(211) + stem(delta_t_log) + title('delta t'); + subplot(212) + plot(timing_est_log); + title('timing est'); + + figure(4); clf; + plot(foff_est_hz_log) + mx = max(abs(foff_est_hz_log)); + axis([1 max(Nframes,2) -mx mx]); + title('Fine Freq'); + ylabel('Hz') + end + + if length(Nerrs_log) > 1 + figure(5); clf; + subplot(211) + stem(Nerrs_log); + title('Uncoded errrors/modem frame') + axis([1 length(Nerrs_log) 0 Nbitsperpacket*0.2]); + if length(Nerrs_coded_log) + subplot(212) + stem(Nerrs_coded_log); + title('Coded errors/mode frame') + axis([1 length(Nerrs_coded_log) 0 Nbitsperpacket*0.2]); + end + end + + figure(6); clf; + snr_estdB = 10*log10(sig_var_log) - 10*log10(noise_var_log) + 10*log10(Nc*Rs/3000); + snr_smoothed_estdB = filter(0.1,[1 -0.9],snr_estdB); + plot(snr_smoothed_estdB); + title('Signal and Noise Power estimates'); + ylabel('SNR (dB)') + + figure(7); clf; plot_specgram(rx); + if len_secs + axis([0 len_secs 500 2500]) + end + + if (nargin == 4) && strlen(error_pattern_filename) + fep = fopen(error_pattern_filename, "wb"); + fwrite(fep, error_positions, "uchar"); + fclose(fep); + end +endfunction diff --git a/libcodec2-android/src/codec2/octave/ofdm_ldpc_tx.m b/libcodec2-android/src/codec2/octave/ofdm_ldpc_tx.m new file mode 100644 index 0000000..c98921d --- /dev/null +++ b/libcodec2-android/src/codec2/octave/ofdm_ldpc_tx.m @@ -0,0 +1,68 @@ +% ofdm_ldpc_tx.m +% David Rowe April 2017 +% +% File based ofdm tx with LDPC encoding and interleaver. Generates a +% file of ofdm samples, including optional channel simulation. + +function ofdm_ldpc_tx(filename, mode="700D", Nsec, SNR3kdB=100, channel='awgn', freq_offset_Hz=0) + ofdm_lib; + ldpc; + gp_interleaver; + channel_lib; + randn('seed',1); + more off; + + % init modem + + config = ofdm_init_mode(mode); + states = ofdm_init(config); + print_config(states); + ofdm_load_const; + + % some constants used for assembling modem frames + + [code_param Nbitspercodecframe Ncodecframespermodemframe] = codec_to_frame_packing(states, mode); + + % Generate fixed test frame of tx bits and run OFDM modulator + + Npackets = round(Nsec/states.Tpacket); + + % OK generate a modem frame using random payload bits + + if strcmp(mode, "700D") + payload_bits = round(ofdm_rand(code_param.data_bits_per_frame)/32767); + elseif strcmp(mode, "2020") + payload_bits = round(ofdm_rand(Ncodecframespermodemframe*Nbitspercodecframe)/32767); + elseif strcmp(mode, "datac1") || strcmp(mode, "datac2") || strcmp(mode, "datac3") || strcmp(mode, "qam16") + payload_bits = round(ofdm_rand(code_param.data_bits_per_frame)/32767); + end + [packet_bits bits_per_packet] = fec_encode(states, code_param, mode, payload_bits, Ncodecframespermodemframe, Nbitspercodecframe); + + % modulate to create symbols and interleave + tx_bits = tx_symbols = []; + tx_bits = [tx_bits payload_bits]; + for b=1:2:bits_per_packet + tx_symbols = [tx_symbols qpsk_mod(packet_bits(b:b+1))]; + end + assert(gp_deinterleave(gp_interleave(tx_symbols)) == tx_symbols); + tx_symbols = gp_interleave(tx_symbols); + + % generate txt (non FEC protected) symbols + txt_bits = zeros(1,Ntxtbits); + txt_symbols = []; + for b=1:2:length(txt_bits) + txt_symbols = [txt_symbols qpsk_mod(txt_bits(b:b+1))]; + end + + % assemble interleaved modem packet that include UW and txt symbols + modem_packet = assemble_modem_packet_symbols(states, tx_symbols, txt_symbols); + atx = ofdm_txframe(states, modem_packet); tx = []; + for f=1:Npackets + tx = [tx atx]; + end + Nsam = length(tx); + + printf("Packets: %3d SNR(3k): %3.1f dB foff: %3.1f Hz ", Npackets, SNR3kdB, freq_offset_Hz); + rx = channel_simulate(Fs, SNR3kdB, freq_offset_Hz, channel, tx); + frx=fopen(filename,"wb"); fwrite(frx, states.amp_scale*rx, "short"); fclose(frx); +endfunction diff --git a/libcodec2-android/src/codec2/octave/ofdm_lib.m b/libcodec2-android/src/codec2/octave/ofdm_lib.m new file mode 100644 index 0000000..1d5e97c --- /dev/null +++ b/libcodec2-android/src/codec2/octave/ofdm_lib.m @@ -0,0 +1,1432 @@ +% ofdm_lib.m +% David Rowe Mar 2017 + +#{ + Library of functions that implement a PSK OFDM modem. Rate Fs + verison of ofdm_rs.m with OFDM based up and down conversion, and all + those nasty real-world details like fine freq, timing. +#} + +1; +qam16; + +%------------------------------------------------------------- +% ofdm_init +%------------------------------------------------------------- + +#{ + + Modem frame has a pilot every Ns symbols. There are Ns-1 data + symbols between every pilot. + + e.g. for Ns=4, Nc=6: + + |-Nc-| Time + DDDDDD | + PPPPPPPP --- | + DDDDDD | | + DDDDDD Ns | + DDDDDD | | + PPPPPPPP --- \|/ + DDDDDD | | + + Freq------------------> + + In this figure, time flows down, freq across. +#} + +function states = ofdm_init(config) + if isfield(config,"bps") bps = config.bps; else bps=2; end + Rs = config.Rs; Tcp = config.Tcp; Ns = config.Ns; Nc = config.Nc; + if isfield(config,"Np") Np = config.Np; else Np = 1; end + if isfield(config,"Ntxtbits") Ntxtbits = config.Ntxtbits ; else Ntxtbits = 4; end + if isfield(config,"Nuwbits") Nuwbits = config.Nuwbits ; else Nuwbits = 5*bps; end + if isfield(config,"Nuwbits") Nuwbits = config.Nuwbits ; else Nuwbits = 5*bps; end + if isfield(config,"ftwindow_width") ftwindow_width = config.ftwindow_width; else ftwindow_width = 11; end + if isfield(config,"timing_mx_thresh") timing_mx_thresh = config.timing_mx_thresh; else timing_mx_thresh = 0.35; end + if isfield(config,"tx_uw") tx_uw = config.tx_uw; else tx_uw = zeros(1,Nuwbits); end + if isfield(config,"bad_uw_errors") bad_uw_errors = config.bad_uw_errors; else bad_uw_errors = 3; end + + states.Fs = 8000; + states.bps = bps; + states.Rs = Rs; + states.Tcp = Tcp; + states.Ns = Ns; % one pilot every Ns symbols, e.g. Ns=3, ...PDDDPDDDP... + states.Nc = Nc; % Number of carriers + states.M = states.Fs/Rs; % oversampling rate + states.Ncp = Tcp*states.Fs; + states.Nbitsperframe = (Ns-1)*Nc*bps; % total bits in all data symbols in modem frame + states.Nsampersymbol = states.M+states.Ncp; % number of samples in a single symbol + states.Nsamperframe = Ns*states.Nsampersymbol; % number of samples in a modem frame + states.qam16 = [ + 1 + j, 1 + j*3, 3 + j, 3 + j*3; + 1 - j, 1 - j*3, 3 - j, 3 - j*3; + -1 + j, -1 + j*3, -3 + j, -3 + j*3; + -1 - j, -1 - j*3, -3 - j, -3 - j*3]/3; + states.Np = Np; % number of modem frames per packet. In some modes we want + % the total packet of data to span multiple modem frames, e.g. HF data + % and/or when the FEC codeword is larger than the one + % modem frame. In other modes (e.g. 700D/2020) Np=1, ie the modem frame + % is the same length as the packet/FEC frame. + states.Nbitsperpacket = Np*states.Nbitsperframe; + states.Tpacket = Np*Ns*(Tcp+1/Rs); % time for one packet in ms + + states.Ntxtbits = Ntxtbits; % reserved bits/frame for auxillary text information. Uncoded/unprotected so may + % be of limited use going forward, consider setting to 0 + states.Nuwbits = Nuwbits; + + % some basic sanity checks + assert(floor(states.M) == states.M); + + % UW symbol placement. Use ofdm_dev.m, debug_false_sync() to test. + % Note we need to fill each UW symbols with bits. The LDPC decoder + % works on symbols so we can't break up any symbols into UW/FEC + % encoded bits. + + states.uw_ind = states.uw_ind_sym = []; + for i=1:states.Nuwbits/bps + ind_sym = floor(i*(Nc+1)/bps+1); + states.uw_ind_sym = [states.uw_ind_sym ind_sym]; % symbol index + for b=bps-1:-1:0 + states.uw_ind = [states.uw_ind bps*ind_sym-b]; % bit index + end + end + % how many of the first few frames have UW symbols in them + Nsymsperframe = states.Nbitsperframe/states.bps; + states.Nuwframes = ceil(states.uw_ind_sym(end)/Nsymsperframe); + + states.tx_uw = tx_uw; + assert(length(states.tx_uw) == states.Nuwbits); + tx_uw_syms = []; + for b=1:bps:states.Nuwbits + tx_uw_syms = [tx_uw_syms qpsk_mod(states.tx_uw(b:b+1))]; + end + states.tx_uw_syms = tx_uw_syms; + % if the UW has this many errors it is "bad", the binomal cdf can be used to set this: + % Nuw=12; plot(0:Nuw, binocdf(0:Nuw,Nuw,0.05)); hold on; plot(binocdf(0:Nuw,Nuw,0.5)); hold off; + states.bad_uw_errors = bad_uw_errors; + + % use this to scale tx output to 16 bit short. Adjusted by experiment + % to have same RMS power as other FreeDV waveforms + states.amp_scale = 2E5*1.1491/1.06; + + % this is used to scale inputs to LDPC decoder to make it amplitude indep + states.mean_amp = 0; + + % generate same pilots each time + rand('seed',1); + states.pilots = 1 - 2*(rand(1,Nc+2) > 0.5); + %printf("number of pilots total: %d\n", length(states.pilots)); + + % carrier tables for up and down conversion + fcentre = 1500; + alower = fcentre - Rs * (Nc/2); % approx frequency of lowest carrier + Nlower = round(alower / Rs) - 1; % round this to nearest integer multiple from 0Hz to keep DFT happy + %printf(" fcentre: %f alower: %f alower/Rs: %f Nlower: %d\n", fcentre, alower, alower/Rs, Nlower); + w = (Nlower:Nlower+Nc+1)*2*pi/(states.Fs/Rs); + W = zeros(Nc+2,states.M); + for c=1:Nc+2 + W(c,:) = exp(j*w(c)*(0:states.M-1)); + end + states.w = w; + states.W = W; + + % fine timing search +/- window_width/2 from current timing instant, + % adjust this to be roughly the maximum delay spread + states.ftwindow_width = ftwindow_width; + + % magic number we adjust by experiment (see ofdm_dev.m acquisition tests, blog post on 700D sync) + states.timing_mx_thresh = timing_mx_thresh; + + % Receive buffer: D P DDD P DDD P DDD P D + % ^ + % also see ofdm_demod() ... + + % D P DDD P DDD P DDD P D + states.Nrxbuf = states.Nsampersymbol + 3*states.Nsamperframe + states.Nsampersymbol + states.Nsampersymbol; + states.rxbuf = zeros(1, states.Nrxbuf); + + % default settings on a bunch of options and states + + states.verbose = 0; + states.timing_en = 1; + states.foff_est_en = 1; + states.phase_est_en = 1; + states.phase_est_bandwidth = "high"; + states.dpsk = 0; + + states.foff_est_gain = 0.1; + states.foff_est_hz = 0; + states.sample_point = states.timing_est = 1; + states.nin = states.Nsamperframe; + states.timing_valid = 0; + states.timing_mx = 0; + states.coarse_foff_est_hz = 0; + + states.foff_metric = 0; + + % generate OFDM pilot symbol, used for timing and freq offset est + + rate_fs_pilot_samples = states.pilots * W/states.M; + + % During tuning it was found that not including the cyc prefix in + % rate_fs_pilot_samples produced better fest results + + %states.rate_fs_pilot_samples = [rate_fs_pilot_samples(states.M-states.Ncp+1:states.M) rate_fs_pilot_samples]; + states.rate_fs_pilot_samples = [zeros(1,states.Ncp) rate_fs_pilot_samples]; + + % pre-compute a constant used to detect valid modem frames + + Npsam = length(states.rate_fs_pilot_samples); + states.timing_norm = Npsam*(states.rate_fs_pilot_samples * states.rate_fs_pilot_samples'); + % printf("timing_norm: %f\n", states.timing_norm) + + % sync state machine + + states.sync_state = states.last_sync_state = 'search'; + states.uw_errors = 0; + states.sync_counter = 0; + states.frame_count = 0; % number of frames we have been in sync + states.sync_start = 0; + states.sync_end = 0; + states.modem_frame = 0; % keep track of how many frames received in packet + + % LDPC code is optionally enabled + + states.rate = 1.0; + states.ldpc_en = 0; + + % init some output states for logging + + states.rx_sym = zeros(1+Ns+1+1, Nc+2); + + % Es/No (SNR) est states + + states.noise_var = 0; + states.sig_var = 0; + states.clock_offset_est = 0; + + % automated tests + test_qam16_mod_demod(states.qam16); + test_assemble_disassemble(states); +endfunction + + +%------------------------------------------------------------------------------ +% ofdm_init_mode - Helper function to set up modems for various FreeDV modes, +% and parse mode string. +%------------------------------------------------------------------------------ + +function config = ofdm_init_mode(mode="700D") + Tcp = 0.002; Ns=8; + + % some "canned" modes + if strcmp(mode,"700D") + Ts = 0.018; Nc = 17; + elseif strcmp(mode,"2020") + Ts = 0.0205; Nc = 31; + elseif strcmp(mode,"2200") + Tframe = 0.175; Ts = Tframe/Ns; Nc = 37; + elseif strcmp(mode,"qam16") + Ns=5; config.Np=5; Tcp = 0.004; Ts = 0.016; Nc = 33; + config.bps=4; config.Ntxtbits = 0; config.Nuwbits = 15*4; config.bad_uw_errors = 5; + config.ftwindow_width = 32; + elseif strcmp(mode,"datac1") + Ns=5; config.Np=18; Tcp = 0.006; Ts = 0.016; Nc = 18; + config.Ntxtbits = 0; config.Nuwbits = 12; config.bad_uw_errors = 2; + config.ftwindow_width = 32; + elseif strcmp(mode,"datac2") + Ns=5; config.Np=36; Tcp = 0.006; Ts = 0.016; Nc = 9; + config.Ntxtbits = 0; config.Nuwbits = 12; config.bad_uw_errors = 1; + config.ftwindow_width = 32; + elseif strcmp(mode,"datac3") + Ns=5; config.Np=11; Tcp = 0.006; Ts = 0.016; Nc = 9; + config.Ntxtbits = 0; config.Nuwbits = 24; config.bad_uw_errors = 5; + config.ftwindow_width = 32; config.timing_mx_thresh = 0.30; + config.tx_uw = [1 1 0 0 1 0 1 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0]; + elseif strcmp(mode,"1") + Ns=5; config.Np=10; Tcp=0; Tframe = 0.1; Ts = Tframe/Ns; Nc = 1; + else + % try to parse mode string for user defined mode + vec = sscanf(mode, "Ts=%f Nc=%d Ncp=%f"); + Ts=vec(1); Nc=vec(2); Ncp=vec(3); + end + Rs=1/Ts; + config.Rs = Rs; config.Tcp = Tcp; config.Ns = Ns; config.Nc = Nc; +end + + +%------------------------------------------------------------------------------ +% print_config - utility function to use ascsii-art to describe the modem frame +%------------------------------------------------------------------------------ + +function print_config(states) + ofdm_load_const; + printf("Nc=%d Ts=%4.3f Tcp=%4.3f Ns: %d Np: %d\n", Nc, 1/Rs, Tcp, Ns, Np); + printf("Nsymperframe: %d Nbitsperpacket: %d Nsamperframe: %d Ntxtbits: %d Nuwbits: %d Nuwframes: %d\n", + Ns*Nc, Nbitsperpacket, Nsamperframe, Ntxtbits, Nuwbits, Nuwframes); + printf("uncoded bits/s: %4.1f\n", Nbitsperpacket*Fs/(Np*Nsamperframe)); + s=1; u=1; Nuwsyms=length(uw_ind_sym); + for f=1:Np + for r=1:Ns + for c=1:Nc+2 + if r == 1 + sym="P"; + elseif c>1 && c <=(Nc+1) + sym="."; + if (u <= Nuwsyms) && (s == uw_ind_sym(u)) sym="U"; u++; end + s++; + else + sym=" "; + end + printf("%s",sym); + end + printf("\n"); + end + end +end + +% Gray coded QPSK modulation function +function symbol = qpsk_mod(two_bits) + two_bits_decimal = sum(two_bits .* [2 1]); + switch(two_bits_decimal) + case (0) symbol = 1; + case (1) symbol = j; + case (2) symbol = -j; + case (3) symbol = -1; + endswitch +endfunction + +% Gray coded QPSK demodulation function +function two_bits = qpsk_demod(symbol) + bit0 = real(symbol*exp(j*pi/4)) < 0; + bit1 = imag(symbol*exp(j*pi/4)) < 0; + two_bits = [bit1 bit0]; +endfunction + + +function out = freq_shift(in, foff, Fs) + foff_rect = exp(j*2*pi*foff/Fs); + foff_phase_rect = exp(j*0); + + for r=1:length(in) + foff_phase_rect *= foff_rect; + out(r) = in(r)*foff_phase_rect; + end +endfunction + + +% ----------------------------------------------------------------- +% ofdm_mod - modulates a complete packet (one or more modem frames) +% ---------------------------------------------------------------- + +function tx = ofdm_mod(states, tx_bits) + ofdm_load_const; + assert(length(tx_bits) == Nbitsperpacket); + + % map to symbols in linear array + + if bps == 1 + tx_sym_lin = 2*tx_bits - 1; + end + if bps == 2 + for s=1:Nbitsperpacket/bps + tx_sym_lin(s) = qpsk_mod(tx_bits(2*(s-1)+1:2*s)); + end + end + if bps == 4 + for s=1:Nbitsperpacket/bps + tx_sym_lin(s) = qam16_mod(states.qam16,tx_bits(4*(s-1)+1:4*s))*exp(-j*pi/4); + end + end + + tx = ofdm_txframe(states, tx_sym_lin); +endfunction + + +% ---------------------------------------------- +% ofdm_txframe - modulates one packet of symbols +% ---------------------------------------------- + +function tx = ofdm_txframe(states, tx_sym_lin) + ofdm_load_const; + assert(length(tx_sym_lin) == Nbitsperpacket/bps); + + % place data symbols in multi-carrier frame with pilots and boundary carriers + + s = 1; tx_frame = zeros(Np*Ns,Nc+2); + for r=1:Np*Ns + if mod(r-1,Ns) == 0 + % row of pilots + tx_frame(r,:) = pilots; + else + % row of data symbols + arowofsymbols = tx_sym_lin(s:s+Nc-1); + tx_frame(r,2:Nc+1) = arowofsymbols; + s += Nc; + if states.dpsk + tx_frame(r,2:Nc+1) = tx_frame(r,2:Nc+1) .* tx_frame(r-1,2:Nc+1); + end + end + end + % make sure we use all the symbols + assert((s-1) == length(tx_sym_lin)); + + % OFDM upconvert symbol by symbol so we can add CP + + tx = []; + for r=1:Ns*Np + asymbol = tx_frame(r,:) * W/M; + asymbol_cp = [asymbol(M-Ncp+1:M) asymbol]; + tx = [tx asymbol_cp]; + end +endfunction + + +% ----------------------------------------------------------- +% est_timing +% ----------------------------------------------------------- + +#{ + Correlates the OFDM pilot symbol samples with a window of received + samples to determine the most likely timing offset. Combines two + frames pilots so we need at least Nsamperframe+M+Ncp samples in rx. + + Can be used for acquisition (coarse timing), and fine timing. Tends + to break down when freq offset approaches +/- symbol rate (e.g +/- + 25 Hz for 700D). +#} + +function [t_est timing_valid timing_mx av_level] = est_timing(states, rx, rate_fs_pilot_samples, step) + ofdm_load_const; + Npsam = length(rate_fs_pilot_samples); + + Ncorr = length(rx) - (Nsamperframe+Npsam); + corr = zeros(1,Ncorr); + %printf("Npsam: %d M+Ncp: %d Ncorr: %d Nsamperframe: %d step: %d\n", Npsam, M+Ncp, Ncorr, Nsamperframe, step); + + % normalise correlation so we can compare to a threshold across varying input levels + + av_level = 2*sqrt(states.timing_norm*(rx*rx')/length(rx)) + 1E-12; + + % correlate with pilots at start and end of frame to determine timing offset + + for i=1:step:Ncorr + rx1 = rx(i:i+Npsam-1); rx2 = rx(i+Nsamperframe:i+Nsamperframe+Npsam-1); + corr_st = rx1 * rate_fs_pilot_samples'; corr_en = rx2 * rate_fs_pilot_samples'; + corr(i) = (abs(corr_st) + abs(corr_en))/av_level; + end + + [timing_mx t_est] = max(corr); + % only declare timing valid if there are enough samples in rxbuf to demodulate a frame + timing_valid = (abs(rx(t_est)) > 0) && (timing_mx > timing_mx_thresh); + + if verbose > 1 + printf(" av_level: %5.4f mx: %4.3f timing_est: %4d timing_valid: %d\n", av_level, timing_mx, t_est, timing_valid); + end + if verbose > 2 + figure(3); clf; + subplot(211); plot(rx) + subplot(212); plot(corr) + figure(4); clf; plot(real(rate_fs_pilot_samples)); + end + +endfunction + + +% ----------------------------------------------------------- +% est_freq_offset +% ----------------------------------------------------------- + +#{ + Determines frequency offset at current timing estimate, used for + coarse freq offset estimation during acquisition. + + This estimator works well for AWGN channels but has problems with + fading channels. With stationary/slow fading channels (say a notch + in the spectrum), ot exhibits bias which can delay sync for 10's of + seconds. +#} + +function [foff_est states] = est_freq_offset(states, rx, rate_fs_pilot_samples, t_est) + ofdm_load_const; + Npsam = length(rate_fs_pilot_samples); + + % Freq offset can be considered as change in phase over two halves + % of pilot symbols. We average this statistic over this and next + % frames pilots. + + Npsam2 = floor(Npsam/2); + p1 = rx(t_est:t_est+Npsam2-1) * rate_fs_pilot_samples(1:Npsam2)'; + p2 = rx(t_est+Npsam2:t_est+Npsam-1) * rate_fs_pilot_samples(Npsam2+1:Npsam)'; + p3 = rx(t_est+Nsamperframe:t_est+Nsamperframe+Npsam2-1) * rate_fs_pilot_samples(1:Npsam2)'; + p4 = rx(t_est+Nsamperframe+Npsam2:t_est+Nsamperframe+Npsam-1) * rate_fs_pilot_samples(Npsam2+1:Npsam)'; + + Fs1 = Fs/(Npsam/2); + + states.foff_metric = (conj(p1)*p2 + conj(p3)*p4); + foff_est = Fs1*angle(states.foff_metric)/(2*pi); + + if states.verbose > 1 + printf(" foff_metric: %f %f foff_est: %f\n", real(states.foff_metric), imag(states.foff_metric), foff_est); + end + +endfunction + + +% ----------------------------------------------------------- +% est_freq_offset_pilot_corr +% ----------------------------------------------------------- + +#{ + Determines frequency offset at current timing estimate, used for + coarse freq offset estimation during acquisition. + + This is an alternative algorithm to est_freq_offset() above that is less noisey + and performs better on HF channels using the acquistion tests in ofdm_dev.m +#} + +function foff_est = est_freq_offset_pilot_corr(states, rx, rate_fs_pilot_samples, t_est) + ofdm_load_const; + Npsam = length(rate_fs_pilot_samples); + + % extract pilot samples from either end of frame + rx1 = rx(t_est:t_est+Npsam-1); rx2 = rx(t_est+Nsamperframe:t_est+Nsamperframe+Npsam-1); + + % "mix" these down (correlate) with 0 Hz offset pilot samples + corr_st = rx1 .* conj(rate_fs_pilot_samples); + corr_en = rx2 .* conj(rate_fs_pilot_samples); + + % sample sum of DFT magnitude of correlated signals at each freq offset and look for peak + st = -20; en = 20; foff_est = 0; Cabs_max = 0; + + for f=st:en + w = 2*pi*f/Fs; + C_st = corr_st * exp(j*w*(0:Npsam-1))'; + C_en = corr_en * exp(j*w*(0:Npsam-1))'; + Cabs = abs(C_st) + abs(C_en); + if Cabs > Cabs_max + Cabs_max = Cabs; + foff_est = f; + end + end + + if states.verbose > 1 + printf(" foff_est: %f\n", foff_est); + end + if verbose > 2 + figure(10); clf; + plot(st:en,C(Fs/2+st:Fs/2+en)); grid; + end +endfunction + + +% ---------------------------------------------------------------------------------- +% ofdm_sync_search - attempts to find coarse sync parameters for modem initial sync +% ---------------------------------------------------------------------------------- + +function [timing_valid states] = ofdm_sync_search(states, rxbuf_in) + ofdm_load_const; + + % insert latest input samples into rxbuf so it is primed for when we have to call ofdm_demod() + + states.rxbuf(1:Nrxbuf-states.nin) = states.rxbuf(states.nin+1:Nrxbuf); + states.rxbuf(Nrxbuf-states.nin+1:Nrxbuf) = rxbuf_in; + + % Attempt coarse timing estimate (i.e. detect start of frame) at a range of frequency offsets + + st = M+Ncp + Nsamperframe + 1; en = st + 2*Nsamperframe + M+Ncp - 1; + timing_mx = 0; fcoarse = 0; timing_valid = 0; ct_est = 1; + for afcoarse=-40:40:40 + % vector of local oscillator samples to shift input vector + % these could be computed on the fly to save memory, or pre-computed in flash at tables as they are static + + if afcoarse != 0 + w = 2*pi*afcoarse/Fs; + wvec = exp(-j*w*(0:2*Nsamperframe+M+Ncp-1)); + + % choose best timing offset metric at this freq offset + [act_est atiming_valid atiming_mx] = est_timing(states, wvec .* states.rxbuf(st:en), states.rate_fs_pilot_samples, 2); + else + % exp(-j*0) is just 1 when afcoarse is 0 + [act_est atiming_valid atiming_mx] = est_timing(states, states.rxbuf(st:en), states.rate_fs_pilot_samples, 2); + end + + %printf("afcoarse: %f atiming_mx: %f\n", afcoarse, atiming_mx); + + if atiming_mx > timing_mx + ct_est = act_est; + timing_valid = atiming_valid; + timing_mx = atiming_mx; + fcoarse = afcoarse; + end + end + + % refine freq est within -/+ 20 Hz window + + if fcoarse != 0 + w = 2*pi*fcoarse/Fs; + wvec = exp(-j*w*(0:2*Nsamperframe+M+Ncp-1)); + foff_est = est_freq_offset_pilot_corr(states, wvec .* states.rxbuf(st:en), states.rate_fs_pilot_samples, ct_est); + foff_est += fcoarse; + else + % exp(-j*0) is just 1 when fcoarse is 0 + foff_est = est_freq_offset_pilot_corr(states, states.rxbuf(st:en), states.rate_fs_pilot_samples, ct_est); + end + + if verbose + printf(" ct_est: %4d mx: %3.2f coarse_foff: %5.1f timing_valid: %d", ct_est, timing_mx, foff_est, timing_valid); + end + + if timing_valid + % potential candidate found .... + + % calculate number of samples we need on next buffer to get into sync + + states.nin = ct_est - 1; + + % reset modem states + + states.sample_point = states.timing_est = 1; + states.foff_est_hz = foff_est; + else + states.nin = Nsamperframe; + end + + states.timing_valid = timing_valid; + states.timing_mx = timing_mx; + states.coarse_foff_est_hz = foff_est; +endfunction + + +% ------------------------------------------ +% ofdm_demod - Demodulates one frame of bits +% ------------------------------------------ + +#{ + + For phase estimation we need to maintain buffer of 3 frames plus + one pilot, so we have 4 pilots total. '^' is the start of current + frame that we are demodulating. + + P DDD P DDD P DDD P + ^ + + Then add one symbol either side to account for movement in + sampling instant due to sample clock differences: + + D P DDD P DDD P DDD P D + ^ + + Returns: + rx_bits - (hard decoded/raw/uncoded) demodulated data bits from packet + aphase_est - phase est for each data symbol + rx_np - output data symbols after phase correction + rx_amp - amplitude estimates for each symbol +#} + +function [states rx_bits aphase_est_pilot_log rx_np rx_amp] = ofdm_demod(states, rxbuf_in) + ofdm_load_const; + + % insert latest input samples into rxbuf + + rxbuf(1:Nrxbuf-states.nin) = rxbuf(states.nin+1:Nrxbuf); + rxbuf(Nrxbuf-states.nin+1:Nrxbuf) = rxbuf_in; + + % get latest freq offset estimate + + woff_est = 2*pi*foff_est_hz/Fs; + + % update timing estimate -------------------------------------------------- + + delta_t = coarse_foff_est_hz = timing_valid = timing_mx = 0; + if timing_en + % update timing at start of every frame + + st = M+Ncp + Nsamperframe + 1 - floor(ftwindow_width/2) + (timing_est-1); + en = st + Nsamperframe-1 + M+Ncp + ftwindow_width-1; + + [ft_est timing_valid timing_mx] = est_timing(states, rxbuf(st:en) .* exp(-j*woff_est*(st:en)), rate_fs_pilot_samples, 1); + % printf(" timing_est: %d ft_est: %d timing_valid: %d timing_mx: %d\n", timing_est, ft_est, timing_valid, timing_mx); + + if timing_valid + timing_est = timing_est + ft_est - ceil(ftwindow_width/2); + + % Black magic to keep sample_point inside cyclic prefix. Or something like that. + + delta_t = ft_est - ceil(ftwindow_width/2); + sample_point = max(timing_est+Ncp/4, sample_point); + sample_point = min(timing_est+Ncp, sample_point); + end + + if verbose > 1 + printf(" ft_est: %2d mx: %3.2f coarse_foff: %4.1f foff: %4.1f\n", ft_est, timing_mx, coarse_foff_est_hz, foff_est_hz); + end + + end + + % down convert at current timing instant---------------------------------- + + % todo: this cld be more efficent, as pilot r becomes r-Ns on next frame + + rx_sym = zeros(1+Ns+1+1, Nc+2); + + % previous pilot + + st = M+Ncp + Nsamperframe + (-Ns)*(M+Ncp) + 1 + sample_point; en = st + M - 1; + + for c=1:Nc+2 + acarrier = rxbuf(st:en) .* exp(-j*woff_est*(st:en)) .* conj(W(c,:)); + rx_sym(1,c) = sum(acarrier); + end + + % pilot - this frame - pilot + + for rr=1:Ns+1 + st = M+Ncp + Nsamperframe + (rr-1)*(M+Ncp) + 1 + sample_point; en = st + M - 1; + for c=1:Nc+2 + acarrier = rxbuf(st:en) .* exp(-j*woff_est*(st:en)) .* conj(W(c,:)); + rx_sym(rr+1,c) = sum(acarrier); + end + end + + % next pilot + + st = M+Ncp + Nsamperframe + (2*Ns)*(M+Ncp) + 1 + sample_point; en = st + M - 1; + for c=1:Nc+2 + acarrier = rxbuf(st:en) .* exp(-j*woff_est*(st:en)) .* conj(W(c,:)); + rx_sym(Ns+3,c) = sum(acarrier); + end + + % est freq err based on all carriers ------------------------------------ + + if foff_est_en + freq_err_rect = sum(rx_sym(2,:))' * sum(rx_sym(2+Ns,:)); + + % prevent instability in atan(im/re) when real part near 0 + + freq_err_rect += 1E-6; + + %printf("freq_err_rect: %f %f angle: %f\n", real(freq_err_rect), imag(freq_err_rect), angle(freq_err_rect)); + freq_err_hz = angle(freq_err_rect)*Rs/(2*pi*Ns); + foff_est_hz = foff_est_hz + foff_est_gain*freq_err_hz; + end + + % OK - now channel for each carrier and correct phase ---------------------------------- + + achannel_est_rect = zeros(1,Nc+2); + for c=2:Nc+1 + + % estimate channel for this carrier using an average of 12 pilots + % in a rect 2D window centred on this carrier + + % PPP <-- frame-1 + % --- + % PPP <-- you are here + % DDD + % DDD + % PPP <-- frame+1 + % --- + % PPP <-- frame+2 + + if isfield(states, "phase_est_bandwidth") + phase_est_bandwidth = states.phase_est_bandwidth; + else + phase_est_bandwidth = "low"; + end + + if strcmp(phase_est_bandwidth, "high") + % Only use pilots at start and end of this frame to track quickly changes in phase + % present. Useful for initial sync where freq offset est may be a bit off, and + % for high Doppler channels. As less pilots are averaged, low SNR performance + % will be poorer. + achannel_est_rect(c) = sum(rx_sym(2,c)*pilots(c)'); % frame + achannel_est_rect(c) += sum(rx_sym(2+Ns,c)*pilots(c)'); % frame+1 + else + % Average over a bunch of pilots in adjacent carriers, and past and future frames, good + % low SNR performance, but will fall over with high Doppler of freq offset. + cr = c-1:c+1; + achannel_est_rect(c) = sum(rx_sym(2,cr)*pilots(cr)'); % frame + achannel_est_rect(c) += sum(rx_sym(2+Ns,cr)*pilots(cr)'); % frame+1 + + % use next step of pilots in past and future + + achannel_est_rect(c) += sum(rx_sym(1,cr)*pilots(cr)'); % frame-1 + achannel_est_rect(c) += sum(rx_sym(2+Ns+1,cr)*pilots(cr)'); % frame+2 + end + end + + if strcmp(phase_est_bandwidth, "high") + achannel_est_rect /= 2; + else + achannel_est_rect /= 12; + end + + % pilots are estimated over 12 pilot symbols, so find average + + aphase_est_pilot = angle(achannel_est_rect); + aamp_est_pilot = abs(achannel_est_rect); + + % correct phase offset using phase estimate, and demodulate + % bits, separate loop as it runs across cols (carriers) to get + % frame bit ordering correct + + aphase_est_pilot_log = []; + rx_bits = []; rx_np = []; rx_amp = []; + for rr=1:Ns-1 + for c=2:Nc+1 + if phase_est_en + if states.dpsk + rx_corr = rx_sym(rr+2,c) * rx_sym(rr+1,c)'; + else + rx_corr = rx_sym(rr+2,c) * exp(-j*aphase_est_pilot(c)); + end + else + rx_corr = rx_sym(rr+2,c); + end + rx_np = [rx_np rx_corr]; + rx_amp = [rx_amp aamp_est_pilot(c)]; + if bps == 1 + abit = real(rx_corr) > 0; + end + if bps == 2 + abit = qpsk_demod(rx_corr); + end + if bps == 4 + abit = qam16_demod(states.qam16, rx_corr*exp(j*pi/4)); + end + rx_bits = [rx_bits abit]; + end % c=2:Nc+1 + aphase_est_pilot_log = [aphase_est_pilot_log; aphase_est_pilot(2:Nc+1)]; + end + + % Adjust nin to take care of sample clock offset + + nin = Nsamperframe; + if timing_en && timing_valid + states.clock_offset_est = 0.9*states.clock_offset_est + 0.1*abs(states.timing_est - timing_est)/Nsamperframe; + thresh = (M+Ncp)/8; + tshift = (M+Ncp)/4; + if timing_est > thresh + nin = Nsamperframe+tshift; + timing_est -= tshift; + sample_point -= tshift; + end + if timing_est < -thresh + nin = Nsamperframe-tshift; + timing_est += tshift; + sample_point += tshift; + end + end + + % estimates of signal and noise power (see cohpsk.m for further explanation) + % signal power is distance from axis on complex plane + % we just measure noise power on imag axis, as it isn't affected by fading + % using all symbols in frame worked better than just pilots + + sig_var = sum(abs(rx_np) .^ 2)/length(rx_np); + sig_rms = sqrt(sig_var); + + sum_x = 0; + sum_xx = 0; + n = 0; + for i=1:length(rx_np) + s = rx_np(i); + if abs(real(s)) > sig_rms + % select two constellation points on real axis + sum_x += imag(s); + sum_xx += imag(s)*imag(s); + n++; + end + end + + noise_var = 0; + if n > 1 + noise_var = (n*sum_xx - sum_x*sum_x)/(n*(n-1)); + end + + % Total noise power is twice estimate of imaginary-axis noise. This + % effectively gives us the an estimate of Es/No + + states.noise_var = 2*noise_var; + states.sig_var = sig_var; + + % maintain mean amp estimate for LDPC decoder + + states.mean_amp = 0.9*states.mean_amp + 0.1*mean(rx_amp); + + states.achannel_est_rect = achannel_est_rect; + states.rx_sym = rx_sym; + states.rxbuf = rxbuf; + states.nin = nin; + states.timing_valid = timing_valid; + states.timing_mx = timing_mx; + states.timing_est = timing_est; + states.sample_point = sample_point; + states.delta_t = delta_t; + states.foff_est_hz = foff_est_hz; + states.coarse_foff_est_hz = coarse_foff_est_hz; % just used for tofdm +endfunction + + +% ---------------------------------------------------------------------------------- +% assemble_modem_packet - assemble modem packet from UW, payload, and txt bits +% ---------------------------------------------------------------------------------- + +function modem_frame = assemble_modem_packet(states, payload_bits, txt_bits) + ofdm_load_const; + + # Due to the operation of the FEC encoder or interleaver, Tx data + # usually comes in "packet size" chunks, so assembly operates on an + # entire packet (multiple modem frames if Np>1) + + p = 1; u = 1; + modem_frame = zeros(1,Nbitsperpacket); + + for b=1:Nbitsperpacket-Ntxtbits; + if (u <= Nuwbits) && (b == uw_ind(u)) + modem_frame(b) = tx_uw(u++); + else + modem_frame(b) = payload_bits(p++); + end + end + t = 1; + for b=Nbitsperpacket-Ntxtbits+1:Nbitsperpacket + modem_frame(b) = txt_bits(t++); + end + assert(u == (Nuwbits+1)); + assert(p = (length(payload_bits)+1)); +endfunction + + +% ---------------------------------------------------------------------------------- +% assemble_modem_packet_symbols - assemble modem packet from UW, payload, and txt bits +% ---------------------------------------------------------------------------------- + +function modem_frame = assemble_modem_packet_symbols(states, payload_syms, txt_syms) + ofdm_load_const; + + Nsymsperpacket = Nbitsperpacket/bps; + Nuwsyms = Nuwbits/bps; + Ntxtsyms = Ntxtbits/bps; + modem_frame = zeros(1,Nsymsperpacket); + p = 1; u = 1; + + for s=1:Nsymsperpacket-Ntxtsyms; + if (u <= Nuwsyms) && (s == uw_ind_sym(u)) + modem_frame(s) = states.tx_uw_syms(u++); + else + modem_frame(s) = payload_syms(p++); + end + end + t = 1; + for s=Nsymsperpacket-Ntxtsyms+1:Nsymsperpacket + modem_frame(s) = txt_syms(t++); + end + assert(u == (Nuwsyms+1)); + assert(p = (length(payload_syms)+1)); +endfunction + + +% ------------------------------------------------------------------------------------------------ +% extract_uw - extract just the UW from the first few frames of a packet, to check UW +% during acquisition +% ------------------------------------------------------------------------------------------------- + +function rx_uw = extract_uw(states, rx_syms) + ofdm_load_const; + + Nsymsperframe = Nbitsperframe/bps; + assert(length(rx_syms) == Nuwframes*Nsymsperframe); + Nuwsyms = Nuwbits/bps; + rx_uw_syms = zeros(1,Nuwsyms); + u = 1; + + for s=1:Nuwframes*Nsymsperframe + if (u <= Nuwsyms) && (s == uw_ind_sym(u)) + rx_uw_syms(u++) = rx_syms(s); + end + end + assert(u == (Nuwsyms+1)); + + % now demodulate UW bits + rx_uw = zeros(1,Nuwbits); + + for s=1:Nuwsyms + if bps == 2 + rx_uw(bps*(s-1)+1:bps*s) = qpsk_demod(rx_uw_syms(s)); + elseif bps == 4 + rx_uw(bps*(s-1)+1:bps*s) = qam16_demod(states.qam16,rx_uw_syms(s)*exp(j*pi/4)); + end + end +endfunction + + +% ------------------------------------------------------------------------------------------------ +% disassemble_modem_packet - extract UW, txt bits, and payload symbols from a packet of symbols +% ------------------------------------------------------------------------------------------------- + +function [rx_uw payload_syms payload_amps txt_bits] = disassemble_modem_packet(states, modem_frame_syms, modem_frame_amps) + ofdm_load_const; + + Nsymsperpacket = Nbitsperpacket/bps; + Nuwsyms = Nuwbits/bps; + Ntxtsyms = Ntxtbits/bps; + payload_syms = zeros(1,Nsymsperpacket-Nuwsyms-Ntxtsyms); + payload_amps = zeros(1,Nsymsperpacket-Nuwsyms-Ntxtsyms); + rx_uw_syms = zeros(1,Nuwsyms); + txt_syms = zeros(1,Ntxtsyms); + p = 1; u = 1; + + for s=1:Nsymsperpacket-Ntxtsyms; + if (u <= Nuwsyms) && (s == uw_ind_sym(u)) + rx_uw_syms(u++) = modem_frame_syms(s); + else + payload_syms(p) = modem_frame_syms(s); + payload_amps(p++) = modem_frame_amps(s); + end + end + t = 1; + for s=Nsymsperpacket-Ntxtsyms+1:Nsymsperpacket + txt_syms(t++) = modem_frame_syms(s); + end + assert(u == (Nuwsyms+1)); + assert(p = (Nsymsperpacket+1)); + + % now demodulate UW and txt bits + + rx_uw = zeros(1,Nuwbits); + txt_bits = zeros(1,Ntxtbits); + + for s=1:Nuwsyms + if bps == 2 + rx_uw(bps*(s-1)+1:bps*s) = qpsk_demod(rx_uw_syms(s)); + elseif bps == 4 + rx_uw(bps*(s-1)+1:bps*s) = qam16_demod(states.qam16,rx_uw_syms(s)*exp(j*pi/4)); + end + end + for s=1:Ntxtsyms + txt_bits(2*s-1:2*s) = qpsk_demod(txt_syms(s)); + end + +endfunction + + +%----------------------------------------------------------------------- +% ofdm_rand - a psuedo-random number generator that we can implement +% in C with identical results to Octave. Returns an unsigned +% int between 0 and 32767 +%----------------------------------------------------------------------- + +function r = ofdm_rand(n) + r = zeros(1,n); seed = 1; + for i=1:n + seed = mod(1103515245 * seed + 12345, 32768); + r(i) = seed; + end +endfunction + + +%----------------------------------------------------------------------- +% create_ldpc_test_frame - generate a test frame of bits +%----------------------------------------------------------------------- + +function [tx_bits payload_data_bits codeword] = create_ldpc_test_frame(states, coded_frame=1) + ofdm_load_const; + ldpc; + gp_interleaver; + + if coded_frame + % Set up LDPC code + + mod_order = 4; bps = 2; modulation = 'QPSK'; mapping = 'gray'; + + init_cml('~/cml/'); % TODO: make this path sensible and portable + load HRA_112_112.txt + [code_param framesize rate] = ldpc_init_user(HRA_112_112, modulation, mod_order, mapping); + assert(Nbitsperframe == (code_param.coded_bits_per_frame + Nuwbits + Ntxtbits)); + + payload_data_bits = round(ofdm_rand(code_param.data_bits_per_frame)/32767); + codeword = LdpcEncode(payload_data_bits, code_param.H_rows, code_param.P_matrix); + Nsymbolsperframe = length(codeword)/bps; + + % need all these steps to get actual raw codeword bits at demod .. + + tx_symbols = []; + for s=1:Nsymbolsperframe + tx_symbols = [tx_symbols qpsk_mod( codeword(2*(s-1)+1:2*s) )]; + end + + tx_symbols = gp_interleave(tx_symbols); + + codeword_raw = []; + for s=1:Nsymbolsperframe + codeword_raw = [codeword_raw qpsk_demod(tx_symbols(s))]; + end + else + codeword_raw = round(ofdm_rand(Nbitsperpacket-(Nuwbits+Ntxtbits))/32767); + end + + % insert UW and txt bits + + tx_bits = assemble_modem_packet(states, codeword_raw, zeros(1,Ntxtbits)); + assert(Nbitsperpacket == length(tx_bits)); + +endfunction + +% automated test + +function test_assemble_disassemble(states) + ofdm_load_const; + + Nsymsperpacket = Nbitsperpacket/bps; + Ndatabitsperpacket = Nbitsperpacket-(Nuwbits+Ntxtbits); + Ndatasymsperpacket = Ndatabitsperpacket/bps; + codeword_bits = round(ofdm_rand(Ndatabitsperpacket)/32767); + tx_bits = assemble_modem_packet(states, codeword_bits, zeros(1,Ntxtbits)); + + tx_syms = zeros(1,Nsymsperpacket); + for s=1:Nsymsperpacket + if bps == 2 + tx_syms(s) = qpsk_mod(tx_bits(bps*(s-1)+1:bps*s)); + elseif bps == 4 + tx_syms(s) = qam16_mod(states.qam16,tx_bits(bps*(s-1)+1:bps*s)); + end + end + codeword_syms = zeros(1,Ndatasymsperpacket); + for s=1:Ndatasymsperpacket + if bps == 2 + codeword_syms(s) = qpsk_mod(codeword_bits(bps*(s-1)+1:bps*s)); + elseif bps == 4 + codeword_syms(s) = qam16_mod(states.qam16,codeword_bits(bps*(s-1)+1:bps*s)); + end + end + + [rx_uw rx_codeword_syms payload_amps txt_bits] = disassemble_modem_packet(states, tx_syms, ones(1,Nsymsperpacket)); + assert(rx_uw == states.tx_uw); + Ndatasymsperframe = (Nbitsperpacket-(Nuwbits+Ntxtbits))/bps; + assert(codeword_syms == rx_codeword_syms); +endfunction + +%------------------------------------------------------- +% sync_state_machine - determines sync state based on UW +% 700D/2020 version +%------------------------------------------------------- + +#{ + Due to the low pilot symbol insertion rate and acquisition issues + the earlier OFDM modem waveforms (700D and 2020) need a complex + state machine to help them avoid false sync. +#} + +function states = sync_state_machine(states, rx_uw) + ofdm_load_const; + next_state = states.sync_state; + states.sync_start = states.sync_end = 0; + + if strcmp(states.sync_state,'search') + + if states.timing_valid + states.frame_count = 0; + states.sync_counter = 0; + states.modem_frame = 0; + states.sync_start = 1; + next_state = 'trial'; + end + end + + if strcmp(states.sync_state,'synced') || strcmp(states.sync_state,'trial') + + states.frame_count++; + + % UW occurs at the start of a packet + if states.modem_frame == 0 + states.uw_errors = sum(xor(tx_uw,rx_uw)); + + if strcmp(states.sync_state,'trial') + if states.uw_errors >= states.bad_uw_errors + states.sync_counter++; + states.frame_count = 0; + end + if states.sync_counter == 2 + next_state = "search"; + states.phase_est_bandwidth = "high"; + end + if states.frame_count == 4 + next_state = "synced"; + % change to low bandwidth, but more accurate phase estimation + states.phase_est_bandwidth = "low"; + end + if states.uw_errors < 2 + next_state = "synced"; + % change to low bandwidth, but more accurate phase estimation + states.phase_est_bandwidth = "low"; + else + next_state = "search" + end + end + + if strcmp(states.sync_state,'synced') + if states.uw_errors > 2 + states.sync_counter++; + else + states.sync_counter = 0; + end + + if states.sync_counter == 6 + next_state = "search"; + states.phase_est_bandwidth = "high"; + end + end + end % if modem_frame == 0 .... + + % keep track of where we are up to in packet + states.modem_frame++; + if (states.modem_frame >= states.Np) states.modem_frame = 0; end + end + + states.last_sync_state = states.sync_state; + states.sync_state = next_state; +endfunction + + +%------------------------------------------------------- +% sync_state_machine_data - data waveform version +%------------------------------------------------------- + +function states = sync_state_machine2(states, rx_uw) + ofdm_load_const; + next_state = states.sync_state; + states.sync_start = states.sync_end = 0; + + if strcmp(states.sync_state,'search') + if states.timing_valid + states.sync_start = 1; states.sync_counter = 0; + next_state = 'trial'; + end + end + + states.uw_errors = sum(xor(tx_uw,rx_uw)); + + if strcmp(states.sync_state,'trial') + if strcmp(states.sync_state,'trial') + if states.uw_errors < states.bad_uw_errors; + next_state = "synced"; + states.frame_count = Nuwframes; + states.modem_frame = Nuwframes; + else + states.sync_counter++; + if states.sync_counter > Np + next_state = "search"; + end + end + end + end + + % Note we don't every lose sync, we assume there are a known number of frames being sent, + % or the packets contain an "end of stream" information. + if strcmp(states.sync_state,'synced') + states.frame_count++; + states.modem_frame++; + if (states.modem_frame >= states.Np) states.modem_frame = 0; end + end + + states.last_sync_state = states.sync_state; + states.sync_state = next_state; +endfunction + + +% ------------------------------------------------------------------------------ +% codec_to_frame_packing - Set up a bunch of constants to support modem frame +% construction from LDPC codewords and codec source bits +% ------------------------------------------------------------------------------ + +function [code_param Nbitspercodecframe Ncodecframespermodemframe] = codec_to_frame_packing(states, mode) + ofdm_load_const; + mod_order = 4; bps = 2; modulation = 'QPSK'; mapping = 'gray'; + + init_cml('~/cml/'); + if strcmp(mode, "700D") + load HRA_112_112.txt + code_param = ldpc_init_user(HRA_112_112, modulation, mod_order, mapping); + assert(Nbitsperframe == (code_param.coded_bits_per_frame + Nuwbits + Ntxtbits)); + % unused for this mode + Nbitspercodecframe = Ncodecframespermodemframe = 0; + end + if strcmp(mode, "2020") + load HRA_504_396.txt + code_param = ldpc_init_user(HRA_504_396, modulation, mod_order, mapping); + code_param.data_bits_per_frame = 312; + code_param.coded_bits_per_frame = code_param.data_bits_per_frame + code_param.ldpc_parity_bits_per_frame; + code_param.coded_syms_per_frame = code_param.coded_bits_per_frame/code_param.bits_per_symbol; + printf("2020 mode\n"); + printf("ldpc_data_bits_per_frame = %d\n", code_param.ldpc_data_bits_per_frame); + printf("ldpc_coded_bits_per_frame = %d\n", code_param.ldpc_coded_bits_per_frame); + printf("ldpc_parity_bits_per_frame = %d\n", code_param.ldpc_parity_bits_per_frame); + printf("data_bits_per_frame = %d\n", code_param.data_bits_per_frame); + printf("coded_bits_per_frame = %d\n", code_param.coded_bits_per_frame); + printf("coded_syms_per_frame = %d\n", code_param.coded_syms_per_frame); + printf("ofdm_bits_per_frame = %d\n", Nbitsperframe); + Nbitspercodecframe = 52; Ncodecframespermodemframe = 6; + printf(" Nuwbits: %d Ntxtbits: %d\n", Nuwbits, Ntxtbits); + Nparity = code_param.ldpc_parity_bits_per_frame; + totalbitsperframe = code_param.data_bits_per_frame + Nparity + Nuwbits + Ntxtbits; + printf("Total bits per frame: %d\n", totalbitsperframe); + assert(totalbitsperframe == Nbitsperframe); + end + if strcmp(mode, "datac1") || strcmp(mode, "datac2") || strcmp(mode, "qam16") + load H2064_516_sparse.mat + code_param = ldpc_init_user(HRA, modulation, mod_order, mapping); + end + if strcmp(mode, "datac3") + load H_256_768_22.txt + code_param = ldpc_init_user(H_256_768_22, modulation, mod_order, mapping); + Nbitspercodecframe = Ncodecframespermodemframe = -1; + end + if strcmp(mode, "datac1") || strcmp(mode, "datac2") || strcmp(mode, "datac3") || strcmp(mode, "qam16") + printf("ldpc_data_bits_per_frame = %d\n", code_param.ldpc_data_bits_per_frame); + printf("ldpc_coded_bits_per_frame = %d\n", code_param.ldpc_coded_bits_per_frame); + printf("ldpc_parity_bits_per_frame = %d\n", code_param.ldpc_parity_bits_per_frame); + printf("Nbitsperpacket = %d\n", Nbitsperpacket); + Nparity = code_param.ldpc_parity_bits_per_frame; + totalbitsperframe = code_param.data_bits_per_frame + Nparity + Nuwbits + Ntxtbits; + printf("totalbitsperframe = %d\n", totalbitsperframe); + assert(totalbitsperframe == Nbitsperpacket); + Nbitspercodecframe = Ncodecframespermodemframe = -1; + end +endfunction + + +% ------------------------------------------------------------------------------ +% fec_encode - Handle FEC encoding +% ------------------------------------------------------------------------------ + +function [frame_bits bits_per_frame] = fec_encode(states, code_param, mode, payload_bits, ... + Ncodecframespermodemframe, Nbitspercodecframe) + ofdm_load_const; + if strcmp(mode, "700D") || strcmp(mode, "datac1") || strcmp(mode, "datac2") || strcmp(mode, "datac3") || strcmp(mode, "qam16") + frame_bits = LdpcEncode(payload_bits, code_param.H_rows, code_param.P_matrix); + elseif strcmp(mode, "2020") + Nunused = code_param.ldpc_data_bits_per_frame - code_param.data_bits_per_frame; + frame_bits = LdpcEncode([payload_bits zeros(1,Nunused)], code_param.H_rows, code_param.P_matrix); + % remove unused data bits + frame_bits = [ frame_bits(1:code_param.data_bits_per_frame) frame_bits(code_param.ldpc_data_bits_per_frame+1:end) ]; + else + assert(0); + end + bits_per_frame = length(frame_bits); + +endfunction + + +% test function, kind of like a CRC for QPSK symbols, to compare two vectors + +function acc = test_acc(v) + sre = 0; sim = 0; + for i=1:length(v) + x = v(i); + re = round(real(x)); im = round(imag(x)); + sre += re; sim += im; + %printf("%d %10f %10f %10f %10f\n", i, re, im, sre, sim); + end + acc = sre + j*sim; +end + + +% Save test bits frame to a text file in the form of a C array +% +% usage: +% ofdm_lib; test_bits_ofdm_file +% + +function test_bits_ofdm_file + Ts = 0.018; Tcp = 0.002; Rs = 1/Ts; bps = 2; Nc = 17; Ns = 8; + states = ofdm_init(bps, Rs, Tcp, Ns, Nc); + [test_bits_ofdm payload_data_bits codeword] = create_ldpc_test_frame(states); + printf("%d test bits\n", length(test_bits_ofdm)); + + f=fopen("../src/test_bits_ofdm.h","wt"); + fprintf(f,"/* Generated by test_bits_ofdm_file() Octave function */\n\n"); + fprintf(f,"const int test_bits_ofdm[]={\n"); + for m=1:length(test_bits_ofdm)-1 + fprintf(f," %d,\n",test_bits_ofdm(m)); + endfor + fprintf(f," %d\n};\n",test_bits_ofdm(end)); + + fprintf(f,"\nconst int payload_data_bits[]={\n"); + for m=1:length(payload_data_bits)-1 + fprintf(f," %d,\n",payload_data_bits(m)); + endfor + fprintf(f," %d\n};\n",payload_data_bits(end)); + + fprintf(f,"\nconst int test_codeword[]={\n"); + for m=1:length(codeword)-1 + fprintf(f," %d,\n",codeword(m)); + endfor + fprintf(f," %d\n};\n",codeword(end)); + + fclose(f); + +endfunction + + +% Get rid of nasty unfiltered stuff either side of OFDM signal +% This may need to be tweaked, or better yet made a function of Nc, if Nc changes +% +% usage: +% ofdm_lib; make_ofdm_bpf(1); + +function bpf_coeff = make_ofdm_bpf(write_c_header_file) + filt_n = 100; + Fs = 8000; + + bpf_coeff = fir2(filt_n,[0 900 1000 2000 2100 4000]/(Fs/2),[0.001 0.001 1 1 0.001 0.001]); + + if write_c_header_file + figure(1) + clf; + h = freqz(bpf_coeff,1,Fs/2); + plot(20*log10(abs(h))) + grid minor + + % save coeffs to a C header file + + f=fopen("../src/ofdm_bpf_coeff.h","wt"); + fprintf(f,"/* 1000 - 2000 Hz FIR filter coeffs */\n"); + fprintf(f,"/* Generated by make_ofdm_bpf() in ofdm_lib.m */\n"); + + fprintf(f,"\n#define OFDM_BPF_N %d\n\n", filt_n); + + fprintf(f,"float ofdm_bpf_coeff[]={\n"); + for r=1:filt_n + if r < filt_n + fprintf(f, " %f,\n", bpf_coeff(r)); + else + fprintf(f, " %f\n};", bpf_coeff(r)); + end + end + fclose(f); + end + +endfunction + + +% returns level threshold such that threshold_cdf of the tx magnitudes are beneath that level +function threshold_level = ofdm_determine_clip_threshold(tx, threshold_cdf) + Nsteps = 25; + mx = max(abs(tx)); + cdf = empirical_cdf(mx*(1:Nsteps)/Nsteps,abs(tx)); + threshold_level = find(cdf >= threshold_cdf)(1)*mx/25; + printf("threshold_cdf: %f threshold_level: %f\n", threshold_cdf, threshold_level); + figure(1); clf; [hh nn] = hist(abs(tx),Nsteps,1); + plotyy(nn,hh,mx*(1:Nsteps)/Nsteps,cdf); title('PDF and CDF Estimates'); grid; +end + + +function tx = ofdm_clip(states, tx, threshold_level) + ofdm_load_const; + tx_ = tx; + ind = find(abs(tx) > threshold_level); + tx(ind) = threshold_level*exp(j*angle(tx(ind))); + figure(2); clf; plot(abs(tx_(1:5*M))); hold on; plot(abs(tx(1:5*M))); hold off; +end diff --git a/libcodec2-android/src/codec2/octave/ofdm_load_const.m b/libcodec2-android/src/codec2/octave/ofdm_load_const.m new file mode 100644 index 0000000..61d715c --- /dev/null +++ b/libcodec2-android/src/codec2/octave/ofdm_load_const.m @@ -0,0 +1,55 @@ +% make like C #define for ofdm modem + +Fs = states.Fs; +bps = states.bps; +Rs = states.Rs; +Tcp = states.Tcp; +Ns = states.Ns; +Np = states.Np; +Nc = states.Nc; +M = states.M; +Ncp = states.Ncp; +bps = states.bps; +Nbitsperframe = states.Nbitsperframe; +Nbitsperpacket = states.Nbitsperpacket; +Nsampersymbol = states.Nsampersymbol; +Nsamperframe = states.Nsamperframe; +timing_mx_thresh = states.timing_mx_thresh; +Nuwbits = states.Nuwbits; +Ntxtbits = states.Ntxtbits; +tx_uw = states.tx_uw; +uw_ind = states.uw_ind; +uw_ind_sym = states.uw_ind_sym; +Nuwframes=states.Nuwframes; + +W = states.W; +w = states.w; + +timing_est = states.timing_est; +sample_point = states.sample_point; +ftwindow_width = states.ftwindow_width; + +Nrxbuf = states.Nrxbuf; +rxbuf = states.rxbuf; + +pilots = states.pilots; +rate_fs_pilot_samples = states.rate_fs_pilot_samples; + +foff_est_gain = states.foff_est_gain; +foff_est_hz = states.foff_est_hz; + +timing_en = states.timing_en; +foff_est_en = states.foff_est_en; +phase_est_en = states.phase_est_en; + +rate = states.rate; +ldpc_en = states.ldpc_en; +if ldpc_en + code_param = states.code_param; + max_iterations = states.ldpc_max_iterations; + demod_type = states.ldpc_demod_type; + decoder_type = states.ldpc_decoder_type; +end + +verbose = states.verbose; + diff --git a/libcodec2-android/src/codec2/octave/ofdm_rx.m b/libcodec2-android/src/codec2/octave/ofdm_rx.m new file mode 100644 index 0000000..93b8c14 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/ofdm_rx.m @@ -0,0 +1,220 @@ +% ofdm_rx.m +% David Rowe May 2018 +% +% OFDM file based , uncoded rx to unit test core OFDM modem. See also +% ofdm_ldpc_rx which includes LDPC and interleaving, and ofdm_demod.c + + +function ofdm_rx(filename, mode="700D", error_pattern_filename) + ofdm_lib; + more off; + + dpsk = 0; + if strcmp(mode,"700D-DPSK") + mode = "700D"; dpsk = 1; + end + if strcmp(mode,"2020-DPSK") + mode = "2020"; dpsk = 1; + end + + % init modem + + config = ofdm_init_mode(mode); + states = ofdm_init(config); + print_config(states); + ofdm_load_const; + states.verbose = 0; + states.dpsk=dpsk; + + % load real samples from file + + Ascale = states.amp_scale/2; % as input is a real valued signal + frx=fopen(filename,"rb"); rx = fread(frx, Inf, "short")/Ascale; fclose(frx); + Nsam = length(rx); Nframes = floor(Nsam/Nsamperframe); + prx = 1; + + % OK re-generate tx frame for BER calcs + + tx_bits = create_ldpc_test_frame(states, coded_frame=0); + + % init logs and BER stats + + rx_np_log = []; timing_est_log = []; delta_t_log = []; foff_est_hz_log = []; + phase_est_pilot_log = []; sig_var_log = []; noise_var_log = []; channel_est_log = []; + Terrs = Tbits = Terrs_coded = Tbits_coded = Tpackets = Tpacketerrs = 0; + packet_count = frame_count = 0; + Nerrs_coded_log = Nerrs_log = []; + error_positions = []; + + % 'prime' rx buf to get correct coarse timing (for now) + + prx = 1; + nin = Nsamperframe+2*(M+Ncp); + %states.rxbuf(Nrxbuf-nin+1:Nrxbuf) = rx(prx:nin); + %prx += nin; + + states.verbose = 1; + + Nsymsperpacket = Nbitsperpacket/bps; Nsymsperframe = Nbitsperframe/bps; + rx_syms = zeros(1,Nsymsperpacket); rx_amps = zeros(1,Nsymsperpacket); + Nerrs = 0; rx_uw = zeros(1,states.Nuwbits); + + % main loop ---------------------------------------------------------------- + + for f=1:Nframes + + % insert samples at end of buffer, set to zero if no samples + % available to disable phase estimation on future pilots on last + % frame of simulation + + lnew = min(Nsam-prx,states.nin); + rxbuf_in = zeros(1,states.nin); + + if lnew + rxbuf_in(1:lnew) = rx(prx:prx+lnew-1); + end + prx += states.nin; + + if states.verbose + printf("f: %3d nin: %4d st: %-6s ", f, states.nin, states.sync_state); + end + + if strcmp(states.sync_state,'search') + [timing_valid states] = ofdm_sync_search(states, rxbuf_in); + end + + if strcmp(states.sync_state,'synced') || strcmp(states.sync_state,'trial') + + % accumulate a buffer of data symbols for this packet + rx_syms(1:end-Nsymsperframe) = rx_syms(Nsymsperframe+1:end); + rx_amps(1:end-Nsymsperframe) = rx_amps(Nsymsperframe+1:end); + [states rx_bits aphase_est_pilot_log arx_np arx_amp] = ofdm_demod(states, rxbuf_in); + rx_syms(end-Nsymsperframe+1:end) = arx_np; + rx_amps(end-Nsymsperframe+1:end) = arx_amp; + + rx_uw = extract_uw(states, rx_syms(end-Nuwframes*Nsymsperframe+1:end)); + + % We need the full packet of symbols before disassembling and checking for bit errors + if states.modem_frame == (states.Np-1) + rx_bits = zeros(1,Nbitsperpacket); + for s=1:Nsymsperpacket + if bps == 2 + rx_bits(bps*(s-1)+1:bps*s) = qpsk_demod(rx_syms(s)); + elseif bps == 4 + rx_bits(bps*(s-1)+1:bps*s) = qam16_demod(states.qam16,rx_syms(s)*exp(j*pi/4)); + end + end + + errors = xor(tx_bits, rx_bits); + Nerrs = sum(errors); + Nerrs_log = [Nerrs_log Nerrs]; + Terrs += Nerrs; + Tbits += Nbitsperpacket; + packet_count++; + end + + % we are in sync so log states + + rx_np_log = [rx_np_log arx_np]; + timing_est_log = [timing_est_log states.timing_est]; + delta_t_log = [delta_t_log states.delta_t]; + foff_est_hz_log = [foff_est_hz_log states.foff_est_hz]; + phase_est_pilot_log = [phase_est_pilot_log; aphase_est_pilot_log]; + sig_var_log = [sig_var_log states.sig_var]; + noise_var_log = [noise_var_log states.noise_var]; + channel_est_log = [channel_est_log; states.achannel_est_rect]; + + frame_count++; + end + + if strcmp(mode,"datac1") || strcmp(mode,"datac2") || strcmp(mode,"datac3") || strcmp(mode,"qam16") + states = sync_state_machine2(states, rx_uw); + else + states = sync_state_machine(states, rx_uw); + end + + if states.verbose + if strcmp(states.last_sync_state,'synced') || strcmp(states.last_sync_state,'trial') + printf("euw: %2d %d mf: %2d pbw: %s eraw: %3d foff: %4.1f", + states.uw_errors, states.sync_counter, states.modem_frame, states.phase_est_bandwidth(1), + Nerrs, states.foff_est_hz); + end + printf("\n"); + end + + % act on any events returned by state machine + + if states.sync_start + Nerrs_log = []; + Terrs = Tbits = frame_count = 0; + rx_np_log = []; + sig_var_log = []; noise_var_log = []; + end + end + + printf("\nBER..: %5.4f Tbits: %5d Terrs: %5d\n", Terrs/(Tbits+1E-12), Tbits, Terrs); + + % If we have enough frames, calc BER discarding first few frames where freq + % offset is adjusting + + Ndiscard = 20; + if packet_count > Ndiscard + Terrs -= sum(Nerrs_log(1:Ndiscard)); Tbits -= Ndiscard*Nbitsperframe; + printf("BER2.: %5.4f Tbits: %5d Terrs: %5d\n", Terrs/Tbits, Tbits, Terrs); + end + + %EsNo_est = mean(sig_var_log(floor(end/2):end))/mean(noise_var_log(floor(end/2):end)); + EsNo_est = mean(sig_var_log)/mean(noise_var_log); + EsNo_estdB = 10*log10(EsNo_est); + SNR_estdB = EsNo_estdB + 10*log10(Nc*Rs*bps/3000); + printf("Packets: %3d Es/No est dB: % -4.1f SNR3k: %3.2f %f %f\n", + packet_count, EsNo_estdB, SNR_estdB, mean(sig_var_log), mean(noise_var_log)); + + figure(1); clf; + %plot(rx_np_log,'+'); + plot(exp(j*pi/4)*rx_np_log(floor(end/2):end),'+'); + mx = 2*max(abs(rx_np_log)); + axis([-mx mx -mx mx]); + title('Scatter'); + + figure(2); clf; + plot(phase_est_pilot_log(:,2:Nc),'g+', 'markersize', 5); + title('Phase est'); + axis([1 length(phase_est_pilot_log) -pi pi]); + + figure(3); clf; + subplot(211) + stem(delta_t_log) + title('delta t'); + subplot(212) + plot(timing_est_log); + title('timing est'); + + figure(4); clf; + plot(foff_est_hz_log) + mx = max(abs(foff_est_hz_log))+1; + axis([1 max(Nframes,2) -mx mx]); + title('Fine Freq'); + ylabel('Hz') + + figure(5); clf; + stem(Nerrs_log); + title('Errors/modem frame') + axis([1 length(Nerrs_log) 0 Nbitsperframe*rate/2]); + + figure(6); clf; + plot(10*log10(sig_var_log),'b;Es;'); + hold on; + plot(10*log10(noise_var_log),'r;No;'); + snr_estdB = 10*log10(sig_var_log) - 10*log10(noise_var_log) + 10*log10(Nc*Rs/3000); + snr_smoothed_estdB = filter(0.1,[1 -0.9],snr_estdB); + plot(snr_smoothed_estdB,'g;SNR3k;'); + hold off; + title('Signal and Noise Power estimates'); + + if nargin == 3 + fep = fopen(error_pattern_filename, "wb"); + fwrite(fep, error_positions, "short"); + fclose(fep); + end +endfunction diff --git a/libcodec2-android/src/codec2/octave/ofdm_time_sync.m b/libcodec2-android/src/codec2/octave/ofdm_time_sync.m new file mode 100644 index 0000000..6c14627 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/ofdm_time_sync.m @@ -0,0 +1,22 @@ +% ofdm_time_sync.m +% David Rowe June 2019 +% +% Tests ofdm modem sync time, using real, off air files + +function ofdm_time_sync(filename, Ntrials=10) + + time_to_sync = []; passes = fails = 0; + for toffset=0:Ntrials-1 + atime = ofdm_ldpc_rx(filename, mode="700D", interleave_frames = 1, "", start_secs=toffset, len_secs=5); + if atime != -1 + passes++; + time_to_sync = [time_to_sync atime]; + else + fails++; + end + end + printf("pass: %d fails: %d mean: %3.2f var %3.2f\n", passes, fails, mean(time_to_sync), var(time_to_sync)); + figure(1); clf; plot(time_to_sync); +endfunction + + diff --git a/libcodec2-android/src/codec2/octave/ofdm_tx.m b/libcodec2-android/src/codec2/octave/ofdm_tx.m new file mode 100644 index 0000000..f9cbc86 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/ofdm_tx.m @@ -0,0 +1,74 @@ +% ofdm_tx.m +% David Rowe March 2018 +% +% File based, uncoded OFDM tx. Generates a file of ofdm samples, +% including optional channel simulation. See also ofdm_ldpc_tx.m, and +% ofdm_mod.c + +#{ + Examples: + + i) 10 seconds, AWGN channel at SNR3k=3dB + + octave:4> ofdm_tx("awgn_ebno_3dB_700d.raw", "700D", 10, 3); + + ii) 10 seconds, multipath poor channel at SNR=6dB + + ofdm_tx("hf_ebno_6dB_700d.raw", "700D", 10, 6, "mpp"); + + iii) 10 seconds, 2200 waveform, AWGN channel, SNR3k=100dB (noise free) + + ofdm_tx("hf_2020.raw", "2200", 10); +#} + +% Note EbNodB is for payload data bits, so will be 10log10(rate) higher than +% raw EbNodB used in ofdm_tx() at uncoded bit rate + +function ofdm_tx(filename, mode="700D", Nsec, SNR3kdB=100, channel='awgn', freq_offset_Hz=0, tx_clip=0) + ofdm_lib; + channel_lib; + randn('seed',1); + + dpsk = 0; + if strcmp(mode,"700D-DPSK") + mode = "700D"; dpsk = 1; + end + if strcmp(mode,"2020-DPSK") + mode = "2020"; dpsk = 1; + end + + % init modem + + config = ofdm_init_mode(mode); + states = ofdm_init(config); + print_config(states); + ofdm_load_const; + states.dpsk=dpsk; + + % Generate fixed test frame of tx bits and run OFDM modulator + + Npackets = round(Nsec/states.Tpacket); + tx_bits = create_ldpc_test_frame(states, coded_frame=0); + tx = []; + for f=1:Npackets + tx = [tx ofdm_mod(states, tx_bits)]; + end + Nsam = length(tx); + + % optional clipper to improve PAPR + + if tx_clip != 0 + threshold_level = ofdm_determine_clip_threshold(tx, tx_clip); + tx = ofdm_clip(states, tx, threshold_level); + end + % note this is PAPR of complex signal, PAPR of real signal will be 3dB larger + cpapr = 10*log10(max(abs(tx).^2)/mean(abs(tx).^2)); + + % channel simulation and save to disk + + printf("Packets: %3d CPAPR: %4.1f SNR(3k): %3.1f dB foff: %3.1f Hz ", Npackets, cpapr, SNR3kdB, freq_offset_Hz); + rx = channel_simulate(Fs, SNR3kdB, freq_offset_Hz, channel, tx); + rx *= 1E4/max(rx);; + printf("peak: %f\n", max(rx)); + frx=fopen(filename,"wb"); fwrite(frx, rx, "short"); fclose(frx); +endfunction diff --git a/libcodec2-android/src/codec2/octave/oqpsk.m b/libcodec2-android/src/codec2/octave/oqpsk.m new file mode 100644 index 0000000..49f54ce --- /dev/null +++ b/libcodec2-android/src/codec2/octave/oqpsk.m @@ -0,0 +1,521 @@ +% oqpsk.m +% David Rowe Jan 2017 +% +% Unfiltered OQPSK modem implementation and simulations to test, +% derived from GMSK modem in gmsk.m +% +% Usage: see "choose one of these to run" at the end of this file. + +rand('state',1); +randn('state',1); +graphics_toolkit ("gnuplot"); +format +more off; + +% init modem states + +function oqpsk_states = oqpsk_init(oqpsk_states, Rs) + + % general + + verbose = oqpsk_states.verbose; + oqpsk_states.Fs = 4*Rs; + oqpsk_states.Rs = Rs; + oqpsk_states.bps = 2; % two bit/symbol for QPSK + + M = oqpsk_states.M = oqpsk_states.Fs/oqpsk_states.Rs; + assert(floor(M) == M, "oversampling factor M must be an integer"); + assert(floor(M/2) == M/2, "(oversampling factor M)/2 must be an integer to offset QPSK"); +endfunction + + +% Gray coded QPSK modulation function + +function symbol = qpsk_mod(two_bits) + two_bits_decimal = sum(two_bits .* [2 1]); + switch(two_bits_decimal) + case (0) symbol = 1; + case (1) symbol = j; + case (2) symbol = -j; + case (3) symbol = -1; + endswitch +endfunction + + +% Gray coded QPSK demodulation function + +function two_bits = qpsk_demod(symbol) + if isscalar(symbol) == 0 + printf("only works with scalars\n"); + return; + end + bit0 = real(symbol*exp(j*pi/4)) < 0; + bit1 = imag(symbol*exp(j*pi/4)) < 0; + two_bits = [bit1 bit0]; +endfunction + + +% Unfiltered OQPSK modulator + +function [tx tx_symb] = oqpsk_mod(oqpsk_states, tx_bits) + M = oqpsk_states.M; + bps = oqpsk_states.bps; + nsym = length(tx_bits)/bps; + nsam = nsym*M; + verbose = oqpsk_states.verbose; + + % Map bits to Gray coded QPSK symbols + + tx_symb = zeros(1,nsym); + + for i=1:nsym + tx_symb(i) = qpsk_mod(tx_bits(2*i-1:2*i))*exp(j*pi/4); + end + + % Oversample by M (sample and hold) to create unfiltered QPSK + + tx = zeros(1, nsam); + for i=1:nsym + tx((i-1)*M+1:(i*M)) = tx_symb(i); + end + + % delay Q arm by half of a symbol to make OQPSK + + tx = [real(tx) zeros(1,M/2)] + j*[zeros(1,M/2) imag(tx)]; +endfunction + + +#{ + + Unfiltered OQPSK demodulator function, with (optional) phase and + timing estimation. Adapted from Fig 8 of [1]. See also gmsk.m and + [2]. + + Note demodulator returns phase corrected symbols sampled at ideal + timing instant. These symbols may have a m*pi/2 phase ambiguity due + to properties of phase tracking loop. The caller is responsible for + determining this ambiguity and recovering the actual bits. + + [1] GMSK demodulator in IEEE Trans on Comms, Muroyta et al, 1981, + "GSM Modulation for Digital Radio Telephony". + + [2] GMSK Modem Simulation, http://www.rowetel.com/?p=3824 + +#} + + +function [rx_symb rx_int filt_log dco_log timing_adj Toff] = oqpsk_demod(oqpsk_states, rx) + M = oqpsk_states.M; + Rs = oqpsk_states.Rs; + Fs = oqpsk_states.Fs; + nsam = length(rx); + nsym = floor(nsam/M); + verbose = oqpsk_states.verbose; + + timing_angle_log = zeros(1,length(rx)); + rx_int = zeros(1,length(rx)); + dco_log = filt_log = zeros(1,nsam); + + % Unfiltered PSK - integrate energy in symbols M long in re and im arms + + rx_int = conv(rx,ones(1,M))/M; + + % phase and fine frequency tracking and correction ------------------------ + + if oqpsk_states.phase_est + + % DCO design from "Introduction To Phase-Lock Loop System Modeling", Wen Li + % http://www.ece.ualberta.ca/~ee401/parts/data/PLLIntro.pdf + + eta = 0.707; + wn = 2*pi*10*(Rs/4800); % (Rs/4800) -> found reducing the BW benefical with falling Rs + Ts = 1/Fs; + g1 = 1 - exp(-2*eta*wn*Ts); + g2 = 1 + exp(-2*eta*wn*Ts) - 2*exp(-eta*wn*Ts)*cos(wn*Ts*sqrt(1-eta*eta)); + Gpd = 2/pi; + Gvco = 1; + G1 = g1/(Gpd*Gvco); G2 = g2/(Gpd*Gvco); + %printf("g1: %e g2: %e G1: %e G2: %e\n", g1, g2, G1, G2); + + filt_prev = dco = lower = ph_err_filt = ph_err = 0; + end + + if oqpsk_states.timing_est + % w is the ref sine wave at the timing clock frequency + % tw is the length of the window used to estimate timing + + tw = 200*M; + k = 1; + xr_log = []; xi_log = []; + w_log = []; + timing_clock_phase = 0; + timing_angle = 0; + timing_angle_log = zeros(1,nsam); + end + + % Sample by sample processing loop for timing and phase est. Note + % this operates at sample rate Fs, unlike many PSK modems that + % operate at the symbol rate Rs + + for i=1:nsam + + if oqpsk_states.timing_est + + % update sample timing estimate every tw samples, free wheel + % rest of the time + + if mod(i,tw) == 0 + l = i - tw+1; + xr = abs(real(rx_int(l:l+tw-1))); + xi = abs(imag(rx_int(l:l+tw-1))); + w = exp(j*(l:l+tw-1)*2*pi*Rs/Fs); + X = xr * w'; + timing_clock_phase = timing_angle = angle(X); + k++; + xr_log = [xr_log xr]; + xi_log = [xi_log xi]; + w_log = [w_log w]; + else + timing_clock_phase += (2*pi)/M; + end + timing_angle_log(i) = timing_angle; + end + + if oqpsk_states.phase_est + + % PLL per-sample processing + + rx_int(i) *= exp(-j*dco); + ph_err = sign(real(rx_int(i))*imag(rx_int(i)))*cos(timing_clock_phase); + lower = ph_err*G2 + lower; + filt = ph_err*G1 + lower; + dco_log(i) = dco; + dco = dco + filt; + filt_log(i) = filt; + + end + + end + + % final adjustment of timing output to take into account slowly + % moving estimates due to sample clock offset. Unwrap ensures that + % when timing angle jumps from -pi to pi we move to the next symbol + % and frame sync isn't broken + + timing_adj = timing_angle_log*M/(2*pi); + timing_adj_uw = unwrap(timing_angle_log)*M/(2*pi); + % Toff = floor(2*M+timing_adj); + Toff = floor(timing_adj_uw+0.5); + + % sample integrator output at correct timing instant + + k = 1; + re_syms = im_syms = zeros(1,nsym); + rx_symb = []; + for i=M:M:nsam + if i-Toff(i)+M/2 <= nsam + re_syms(k) = real(rx_int(i-Toff(i))); + im_syms(k) = imag(rx_int(i-Toff(i)+M/2)); + %re_syms(k) = real(rx_int(i)); + %im_syms(k) = imag(rx_int(i)); + rx_symb = [rx_symb re_syms(k) + j*im_syms(k)]; + k++; + end + end + +endfunction + + +% Test modem over a range Eb/No points in an AWGN channel. Can +% simulate a variety of channel impairments and performs ambiguity +% resolution. + +function sim_out = oqpsk_test(sim_in) + bitspertestframe = sim_in.bitspertestframe; + nbits = sim_in.nbits; + EbNodB = sim_in.EbNodB; + verbose = sim_in.verbose; + Rs = 4800; + + oqpsk_states.verbose = verbose; + oqpsk_states.coherent_demod = sim_in.coherent_demod; + oqpsk_states.phase_est = sim_in.phase_est; + oqpsk_states.timing_est = sim_in.timing_est; + oqpsk_states = oqpsk_init(oqpsk_states, Rs); + M = oqpsk_states.M; + Fs = oqpsk_states.Fs; + Rs = oqpsk_states.Rs; + sample_clock_offset_ppm = sim_in.sample_clock_offset_ppm; + + tx_testframe = round(rand(1, bitspertestframe)); + ntestframes = floor(nbits/bitspertestframe); + tx_bits = []; + for i=1:ntestframes + tx_bits = [tx_bits tx_testframe]; + end + + for ne = 1:length(EbNodB) + aEbNodB = EbNodB(ne); + EbNo = 10^(aEbNodB/10); + variance = Fs/(Rs*EbNo*oqpsk_states.bps); + + [tx tx_symb] = oqpsk_mod(oqpsk_states, tx_bits); + if sample_clock_offset_ppm + tx = resample(tx, 1E6, 1E6-sample_clock_offset_ppm); + end + nsam = length(tx); + + phi = sim_in.phase_offset + 2*pi*sim_in.freq_offset*(1:nsam)/M; + + noise = sqrt(variance/2)*(randn(1,nsam) + j*randn(1,nsam)); + st = 1+sim_in.timing_offset; en = length(tx); + rx = tx(st:en).*exp(j*phi(st:en)) + noise(st:en); + + [rx_symb rx_int filt_log dco_log timing_adj Toff] = oqpsk_demod(oqpsk_states, rx); + + % OK so the phase and timing estimators get us close (e.g. a good + % scatter diagram), but no banana just yet. One problem is the + % PLL can lock up on mulitples of pi/2. Combinations of phase + % offsets can confuse the timing estimator. One tricky example is a + % phase offset of pi/2 which swaps I & Q, and with OQPSK (unlike + % MSK and friends) we can't easily tell which is I and which is Q + % after a phase rotation, e.g. could be IQIQIQI or QIQIQIQ + + % So we need to determine the ambiguities: + % a) could be m*pi/2 rotations of phase + % b) could be I and Q swapped by timing est + % c) time alignment of test frame + + nsymb = bitspertestframe/oqpsk_states.bps; + nrx_symb = length(rx_symb); + rx_bits = zeros(1, bitspertestframe); + atx_symb = tx_symb(1:nsymb); + + % Treat I and Q as separate sequences, each with their own unique + % word. In our case the UW is the whole test frame. Correlate rx + % sequence with tx sequence at each possible offset through the + % received symbols to find the test frames. Note we also + % correlate I of tx with Q of rx to trap any IQ swaps. + + % The sign of the I and Q correlation lets us sort out the pi/2 + % phase rotation issue. + + nerrs_tot = 0; nbits_tot = 0; + + max_corr = real(atx_symb) * real(atx_symb)'; + for offset=2:nrx_symb-nsymb+1 + corr_ii(offset) = real(atx_symb) * real(rx_symb(offset:offset+nsymb-1))'/max_corr; + corr_qq(offset) = imag(atx_symb) * imag(rx_symb(offset:offset+nsymb-1))'/max_corr; + corr_iq(offset) = real(atx_symb) * imag(rx_symb(offset:offset+nsymb-1))'/max_corr; + corr_qi(offset) = imag(atx_symb) * real(rx_symb(offset:offset+nsymb-1))'/max_corr; + %printf("offset: %2d ii: % 5f qq: % 5f iq: % 5f qi: % 5f\n", + %offset, corr_ii(offset), corr_qq(offset), corr_iq(offset), corr_qi(offset)); + + if abs(corr_ii(offset)) > 0.8 + + % no IQ swap, or time offset + + i_sign = sign(corr_ii(offset)); + q_sign = sign(corr_qq(offset)); + arx_symb = i_sign*real(rx_symb(offset:offset+nsymb-1)) + j*q_sign*imag(rx_symb(offset:offset+nsymb-1)); + + for i=1:nsymb + rx_bits(2*i-1:2*i) = qpsk_demod(arx_symb(i)*exp(-j*pi/4)); + end + nerrs = sum(xor(tx_testframe, rx_bits)); + if verbose > 2 + printf("offset: %5d swap: %d i_sign: % 2.1f q_sign: % 2.1f nerr: %d\n", + offset, 0, i_sign, q_sign, nerrs); + end + nerrs_tot += nerrs; + nbits_tot += bitspertestframe; + end + + if abs(corr_qi(offset)) > 0.8 + + % IQ swap, I part in Q part of symbol before + + i_sign = sign(corr_iq(offset-1)); + q_sign = sign(corr_qi(offset)); + arx_symb = i_sign*imag(rx_symb(offset-1:offset+nsymb-2)) + j*q_sign*real(rx_symb(offset:offset+nsymb-1)); + + for i=1:nsymb + rx_bits(2*i-1:2*i) = qpsk_demod(arx_symb(i)*exp(-j*pi/4)); + end + nerrs = sum(xor(tx_testframe, rx_bits)); + if verbose > 1 + printf("offset: %5d swap: %d i_sign: % 2.1f q_sign: % 2.1f nerr: %d\n", + offset, 1, i_sign, q_sign, nerrs); + end + nerrs_tot += nerrs; + nbits_tot += bitspertestframe; + end + end + + TERvec(ne) = nerrs_tot; + BERvec(ne) = nerrs_tot/nbits_tot; + + if verbose > 0 + printf("EbNo dB: %3.1f Nbits: %d Nerrs: %d BER: %4.3f BER Theory: %4.3f\n", + aEbNodB, nbits_tot, nerrs_tot, BERvec(ne), 0.5*erfc(sqrt(EbNo))); + end + + if find(sim_in.plots == 1) + figure(1); clf; + subplot(211) + stem(real(tx)) + title('Tx samples'); + ylabel('Inphase'); + subplot(212) + stem(imag(tx)) + ylabel('Quadrature'); + end + + if find(sim_in.plots == 2) + figure(2); clf; + f = fftshift(fft(rx)); + Tx = 20*log10(abs(f)); + plot((1:length(f))*Fs/length(f) - Fs/2, Tx) + grid; + title('OQPSK Demodulator Input Spectrum'); + end + + if find(sim_in.plots == 3) + figure(3); clf; + nplot = min(16, nbits/oqpsk_states.bps); + title('Rx Integrator'); + subplot(211) + stem(real(rx_int(1:nplot*M))) + axis([1 nplot*M -1 1]) + subplot(212) + stem(imag(rx_int(1:nplot*M))) + axis([1 nplot*M -1 1]) + end + + if find(sim_in.plots == 4) + figure(4); clf; + subplot(211); + plot(filt_log); + title('PLL filter') + subplot(212); + plot(dco_log); + title('PLL DCO phase'); + end + + if find(sim_in.plots == 5) + figure(5); clf; + subplot(211) + plot(timing_adj); + title('Timing est'); + subplot(212) + plot(Toff); + title('Timing est unwrap'); + end + + if find(sim_in.plots == 6) + figure(6); clf; + st = floor(0.5*nrx_symb); + plot(rx_symb(st:nrx_symb), '+'); + title('Scatter Diagram'); + axis([-1.5 1.5 -1.5 1.5]) + end + + if find(sim_in.plots == 7) + figure(7); clf; + subplot(211) + plot(corr_ii); + axis([1 length(corr_ii) -1.2 1.2]); + title('corr ii'); + subplot(212) + plot(corr_qi); + axis([1 length(corr_ii) -1.2 1.2]); + title('corr qi'); + end + + if find(sim_in.plots == 8) + figure(8); clf; + subplot(211); + stem(real(arx_symb)); + title('Rx symbols') + subplot(212); + stem(imag(arx_symb)); + end + + if find(sim_in.plots == 9) + figure(9); clf; + subplot(211) + stem(tx_testframe(1:min(20,length(rx_bits)))) + title('Tx Bits') + subplot(212) + stem(rx_bits(1:min(20,length(rx_bits)))) + title('Rx Bits') + end + end + + sim_out.TERvec = TERvec; + sim_out.BERvec = BERvec; + sim_out.Rs = oqpsk_states.Rs; +endfunction + + +function run_oqpsk_single + sim_in.coherent_demod = 1; + sim_in.phase_est = 1; + sim_in.timing_est = 1; + sim_in.bitspertestframe = 100; + sim_in.nbits = 10000; + sim_in.EbNodB = 4; + sim_in.verbose = 1; + sim_in.phase_offset = 3*pi/4; % in radians + sim_in.timing_offset = 4; % in samples 0..M-1 + sim_in.freq_offset = 0.001; % fraction of Symbol Rate + sim_in.plots = [1 2 4 5 6 7]; + sim_in.sample_clock_offset_ppm = 100; + + sim_out = oqpsk_test(sim_in); +endfunction + + +% Generate a bunch of BER versus Eb/No curves for various demods + +function run_oqpsk_curves + sim_in.coherent_demod = 1; + sim_in.EbNodB = 2:8; + sim_in.verbose = 1; + sim_in.phase_est = 1; + sim_in.timing_est = 1; + sim_in.bitspertestframe = 100; + sim_in.nbits = 50000; + sim_in.phase_offset = 3*pi/4; % in radians + sim_in.timing_offset = 4; % in samples 0..M-1 + sim_in.freq_offset = 0.001; % fraction of Symbol Rate + sim_in.plots = []; + sim_in.sample_clock_offset_ppm = 0; + + oqpsk_coh = oqpsk_test(sim_in); + + Rs = oqpsk_coh.Rs; + EbNo = 10 .^ (sim_in.EbNodB/10); + oqpsk_theory.BERvec = 0.5*erfc(sqrt(EbNo)); + + % BER v Eb/No curves + + figure; + clf; + semilogy(sim_in.EbNodB, oqpsk_theory.BERvec,'r+-;OQPSK theory;') + hold on; + semilogy(sim_in.EbNodB, oqpsk_coh.BERvec,'g+-;OQPSK sim;') + hold off; + grid("minor"); + axis([min(sim_in.EbNodB) max(sim_in.EbNodB) 1E-4 1]) + legend("boxoff"); + xlabel("Eb/No (dB)"); + ylabel("Bit Error Rate (BER)") +endfunction + + +% Choose one of these to run ------------------------------------------ + +run_oqpsk_single +%run_oqpsk_curves + diff --git a/libcodec2-android/src/codec2/octave/papr_test.m b/libcodec2-android/src/codec2/octave/papr_test.m new file mode 100644 index 0000000..46c774a --- /dev/null +++ b/libcodec2-android/src/codec2/octave/papr_test.m @@ -0,0 +1,407 @@ +% papr_test.m +% +% Experiments with PAPR reduction using clipping/compression +% +% OFDM Tx -> compress -> filter -> normalise power -> channel -> OFDM Rx + +#{ + TODO: + [ ] option for normalised power after clipper + [ ] experiment to plot those curves +#} + +1; + +function symbol = qpsk_mod(two_bits) + two_bits_decimal = sum(two_bits .* [2 1]); + switch(two_bits_decimal) + case (0) symbol = 1; + case (1) symbol = j; + case (2) symbol = -j; + case (3) symbol = -1; + endswitch +endfunction + +function two_bits = qpsk_demod(symbol) + bit0 = real(symbol*exp(j*pi/4)) < 0; + bit1 = imag(symbol*exp(j*pi/4)) < 0; + two_bits = [bit1 bit0]; +endfunction + +function papr = calc_papr(tx) + papr = 10*log10(max(abs(tx).^2)/mean(abs(tx).^2)); +end + +% test PAPR calculation with a two tone signal of known PAPR (3dB) +function test_papr + f1=800; f2=1200; Fs=8000; n=(0:Fs-1); + tx=exp(j*2*pi*n*f1/Fs) + exp(j*2*pi*n*f2/Fs); + papr = calc_papr(tx); + assert(abs(papr-3.0) < 0.05, 'test_papr() failed!') +end + +% "Genie" OFDM modem simulation that assumes ideal sync + +function [ber papr] = run_sim(Nc, Nsym, EbNodB, channel='awgn', plot_en=0, filt_en=0, method="", threshold=1, norm_ebno=0) + rand('seed',1); + randn('seed',1); + + M = 160; % number of samples in each symbol + bps = 2; % two bits per symbol for QPSK + Ncp = 16; % cyclic prefix samples + Fs = 8000; + + phase_est = 1; % perform phase estimation/correction + timing = Ncp; + + if strcmp(method,"diversity") + % total power of tx symbol after combination the same. Scatter plot positions + % different but also twice as much noise (bandwidth) + Nd = 2; gain = 1/sqrt(2); + else + Nd = 1; gain = 1.0; + end + + if strcmp(channel,'multipath') + dopplerSpreadHz = 1; path_delay = Ncp/2; + Nsam = floor(Nsym*(M+Ncp)*1.1); + spread1 = doppler_spread(dopplerSpreadHz, Fs, Nsam); + spread2 = doppler_spread(dopplerSpreadHz, Fs, Nsam); + end + + papr_log = []; + for e=1:length(EbNodB) + % generate a 2D array of QPSK symbols + + Nphases = 2^bps; + tx_phases = pi/2*floor((rand(Nsym,Nc)*Nphases)); + if strcmp(method,"diversity") + % duplicate carriers but with opposite phase + tx_phases = [tx_phases (tx_phases-pi/2)]; + end + tx_sym = gain*exp(j*tx_phases); + + % carrier frequencies, centre about 0 + st = floor(Nc*Nd/2); + w = 2*pi/M*(-st:-st+Nc*Nd-1); + + % generate OFDM signal + + tx = []; + for s=1:Nsym + atx = zeros(1,M); + for c=1:Nc*Nd + atx += exp(j*(0:M-1)*w(c))*tx_sym(s,c); + end + % insert cyclic prefix and build up stream of time domain symbols + % note CP costs us 10*log10((Ncp+M)/M) in Eb, as energy in CP isn't used for demodulation + tx = [tx atx(end-Ncp+1:end) atx]; + end + Nsam = length(tx); + + if strcmp(channel,'multipath') + assert(length(spread1) >= Nsam); + assert(length(spread2) >= Nsam); + end + + % bunch of PAPR reduction options + tx_ = tx; + + % determine threshold based on CDF + cdf = empirical_cdf((1:Nc),abs(tx)); + if strcmp(method, "clip") || strcmp(method, "diversity") || strcmp(method, "compand") + if threshold < 1 + threshold_level = find(cdf >= threshold)(1); + else + threshold_level = 10*Nc; + end + + % printf("threshold: %f threshold_level: %f\n", threshold, threshold_level); + end + + if strcmp(method, "clip") || strcmp(method, "diversity") + ind = find(abs(tx) > threshold_level); + tx_(ind) = threshold_level*exp(j*angle(tx(ind))); + end + if strcmp(method, "compand") + # power law compander x = a*y^power, y = (x/a) ^ (1/power) + power=2; a=threshold_level/(threshold_level^power); + tx_mag = (abs(tx)/a) .^ (1/power); + tx_ = tx_mag.*exp(j*angle(tx)); + end + + if filt_en + Nfilt=80; + b = fir1(Nfilt,2*Nc*Nd/M); + tx_ = filter(b,1,[tx_ zeros(1,Nfilt/2)]); + tx_ = [tx_(Nfilt/2+1:end)]; + end + + rx = tx_; + + % multipath channel + + if phase_est + % estimate phase of each symbol before multipath simulation + + rx_phase1 = zeros(Nsym,Nc); + for s=1:Nsym + st = (s-1)*(M+Ncp)+1+timing; en = st+M-1; + for c=1:Nc*Nd + rx_phase1(s,c) = sum(exp(-j*(0:M-1)*w(c)) .* rx(st:en))/M; + end + end + end + + if strcmp(channel,'multipath') + rx = spread1(1:Nsam).*rx + spread2(1:Nsam).*[zeros(1,path_delay) rx(1:end-path_delay)]; + end + + % normalise power after multipath, so that Eb/No is set up + % correctly + + if norm_ebno == 0 + norm = sqrt(mean(abs(tx_).^2)/mean(abs(rx).^2)); + else + % normalise after clipper, this makes norm_pwr constant for all test + % conditions + norm = sqrt(mean(abs(tx).^2)/mean(abs(rx).^2)); + end + rx *= norm; + norm_pwr = 10*log10(mean(abs(rx).^2)); + + if phase_est + % auxillary rx to get ideal phase ests on signal after multipath but before AWGN noise is added + + rx_phase = zeros(Nsym,Nc); + for s=1:Nsym + st = (s-1)*(M+Ncp)+1+timing; en = st+M-1; + for c=1:Nc*Nd + arx_sym = sum(exp(-j*(0:M-1)*w(c)) .* rx(st:en))/M; + rx_phase(s,c) = arx_sym * conj(rx_phase1(s,c)); + end + end + rx_phase = exp(j*arg(rx_phase)); + end + + % AWGN channel + + EsNodB = EbNodB(e) + 10*log10(bps); + variance = M/(10^(EsNodB/10)); + noise = sqrt(variance/2)*randn(1,Nsam) + j*sqrt(variance/2)*randn(1,Nsam); + rx += noise; + + % demodulate + rx_sym = zeros(Nsym,Nc); + for s=1:Nsym + st = (s-1)*(M+Ncp)+1+timing; en = st+M-1; + for c=1:Nc*Nd + rx_sym(s,c) = sum(exp(-j*(0:M-1)*w(c)) .* rx(st:en))/M; + if phase_est rx_sym(s,c) *= conj(rx_phase(s,c)); end + end + + if strcmp(method,"diversity") + for c=1:Nc + rx_sym(s,c) += rx_sym(s,c+Nc)*exp(j*pi/2); + end + end + end + + % count bit errors + + Tbits = Terrs = 0; ErrPerSym = zeros(1,Nsym); + for s=1:Nsym + Nerrs = 0; + for c=1:Nc + tx_bits = qpsk_demod(tx_sym(s,c)); + rx_bits = qpsk_demod(rx_sym(s,c)); + Tbits += bps; + Nerrs += sum(xor(tx_bits,rx_bits)); + end + ErrPerSym(s) = Nerrs; + Terrs += Nerrs; + end + + if plot_en + figure(1); clf; + plot(abs(tx(1:5*M))); hold on; plot(abs(tx_(1:5*M))); hold off; + axis([0 5*M 0 max(abs(tx))]); + figure(2); clf; [hh nn] = hist(abs(tx),25,1); + plotyy(nn,hh,1:Nc,cdf); title('PDF and CDF'); grid; + figure(3); clf; plot(real(rx_sym(:,1:Nc)), imag(rx_sym(:,1:Nc)), '+'); axis([-2 2 -2 2]); + figure(4); clf; Tx_ = 10*log10(abs(fft(tx_))); plot(fftshift(Tx_)); + mx = 10*ceil(max(Tx_)/10); axis([1 length(Tx_) mx-60 mx]); + figure(5); plot_specgram(real(rx.*exp(j*2*pi*(0:Nsam-1)/4))); + figure(6); clf; stem(ErrPerSym); + end + + papr1 = calc_papr(tx); + papr2 = calc_papr(tx_); + papr_log = [papr_log papr2]; + ber(e) = Terrs/Tbits; + printf("EbNodB: %4.1f %3.1f %4.1f PAPR: %5.2f %5.2f Tbits: %6d Terrs: %6d BER: %5.3f\n", + EbNodB(e), norm, norm_pwr, papr1, papr2, Tbits, Terrs, ber(e)) + end + + papr = mean(papr_log); +end + +% BER versus Eb/No curves ------------------------------------- + +% first pass at trying out a few different schemes +function curves_experiment1(Nc=8, channel='awgn', Nsym=1000, EbNodB=2:8) + + [ber1 papr1] = run_sim(Nc, Nsym, EbNodB, channel, 0, filt_en=1); + [ber2 papr2] = run_sim(Nc, Nsym, EbNodB, channel, 0, filt_en=1, "clip", threshold=0.8); + [ber3 papr3] = run_sim(Nc, Nsym, EbNodB, channel, 0, filt_en=1, "clip", threshold=0.6); + [ber4 papr4] = run_sim(Nc, Nsym, EbNodB, channel, 0, filt_en=1, "compand", threshold=0.6); + [ber5 papr5] = run_sim(Nc, Nsym, EbNodB, channel, 0, filt_en=1, "diversity", threshold=0.6); + + figure(7); clf; + semilogy(EbNodB, ber1,sprintf('b+-;vanilla OFDM %3.1f;',papr1),'markersize', 10, 'linewidth', 2); hold on; + semilogy(EbNodB, ber2,sprintf('r+-;clip 0.8 %3.1f;',papr2),'markersize', 10, 'linewidth', 2); + semilogy(EbNodB, ber3,sprintf('g+-;clip 0.6 %3.1f;',papr3),'markersize', 10, 'linewidth', 2); + semilogy(EbNodB, ber4,sprintf('c+-;compand 0.6 %3.1f;',papr4),'markersize', 10, 'linewidth', 2); + semilogy(EbNodB, ber5,sprintf('bk+-;diversity 0.6 %3.1f;',papr5),'markersize', 10, 'linewidth', 2); + hold off; + axis([min(EbNodB) max(EbNodB) 1E-3 1E-1]); grid; + xlabel('Eb/No'); title(sprintf("%s Nc = %d", channel, Nc)) + fn = sprintf("papr_exp1_%s_BER_EbNo.png", channel); + print(fn,"-dpng"); + + figure(8); clf; + semilogy(EbNodB+papr1, ber1,sprintf('b+-;vanilla OFDM %3.1f;',papr1),'markersize', 10, 'linewidth', 2); hold on; + semilogy(EbNodB+papr2, ber2,sprintf('r+-;clip 0.8 %3.1f;',papr2),'markersize', 10, 'linewidth', 2); + semilogy(EbNodB+papr3, ber3,sprintf('g+-;clip 0.6 %3.1f;',papr3),'markersize', 10, 'linewidth', 2); + semilogy(EbNodB+papr4, ber4,sprintf('c+-;compand 0.6 %3.1f;',papr4),'markersize', 10, 'linewidth', 2); + semilogy(EbNodB+papr5, ber5,sprintf('bk+-;diversity 0.6 %3.1f;',papr5),'markersize', 10, 'linewidth', 2); + hold off; + xlabel('Peak Eb/No'); + axis([min(EbNodB)+papr2 max(EbNodB)+papr1 1E-3 1E-1]); grid; title(sprintf("%s Nc = %d", channel, Nc)) + fn = sprintf("papr_exp1_%s_BER_peakEbNo.png", channel); + print(fn,"-dpng"); +end + + +% vary threshold and plot BER v Eb/No curves +function curves_experiment2(Nc=8, channel='awgn', Nsym=1000, EbNodB=2:16) + + [ber1 papr1] = run_sim(Nc, Nsym, EbNodB, channel, 0, filt_en=1); + [ber2 papr2] = run_sim(Nc, Nsym, EbNodB, channel, 0, filt_en=1, "clip", threshold=0.8); + [ber3 papr3] = run_sim(Nc, Nsym, EbNodB, channel, 0, filt_en=1, "clip", threshold=0.6); + [ber4 papr4] = run_sim(Nc, Nsym, EbNodB, channel, 0, filt_en=1, "clip", threshold=0.4); + [ber5 papr5] = run_sim(Nc, Nsym, EbNodB, channel, 0, filt_en=1, "clip", threshold=0.2); + [ber6 papr6] = run_sim(Nc, Nsym, EbNodB, channel, 0, filt_en=1, "diversity", threshold=0.8); + + figure(7); clf; + semilogy(EbNodB, ber1,sprintf('b+-;vanilla OFDM %3.1f;',papr1),'markersize', 10, 'linewidth', 2); hold on; + semilogy(EbNodB, ber2,sprintf('r+-;clip 0.8 %3.1f;',papr2),'markersize', 10, 'linewidth', 2); + semilogy(EbNodB, ber3,sprintf('g+-;clip 0.6 %3.1f;',papr3),'markersize', 10, 'linewidth', 2); + semilogy(EbNodB, ber4,sprintf('c+-;clip 0.4 %3.1f;',papr4),'markersize', 10, 'linewidth', 2); + semilogy(EbNodB, ber5,sprintf('bk+-;clip 0.2 %3.1f;',papr5),'markersize', 10, 'linewidth', 2); + semilogy(EbNodB, ber6,sprintf('m+-;diversity 0.8 %3.1f;', papr6),'markersize', 10, 'linewidth', 2); + hold off; + axis([min(EbNodB) max(EbNodB) 1E-3 1E-1]); grid; + xlabel('Eb/No'); title(sprintf("%s Nc = %d", channel, Nc)) + fn = sprintf("papr_exp2_Nc%d_%s_BER_EbNo.png", Nc, channel); + print(fn,"-dpng"); + + figure(8); clf; + semilogy(EbNodB+papr1, ber1,sprintf('b+-;vanilla OFDM %3.1f;',papr1),'markersize', 10, 'linewidth', 2); hold on; + semilogy(EbNodB+papr2, ber2,sprintf('r+-;clip 0.8 %3.1f;',papr2),'markersize', 10, 'linewidth', 2); + semilogy(EbNodB+papr3, ber3,sprintf('g+-;clip 0.6 %3.1f;',papr3),'markersize', 10, 'linewidth', 2); + semilogy(EbNodB+papr4, ber4,sprintf('c+-;clip 0.4 %3.1f;',papr4),'markersize', 10, 'linewidth', 2); + semilogy(EbNodB+papr5, ber5,sprintf('bk+-;clip 0.2 %3.1f;',papr5),'markersize', 10, 'linewidth', 2); + semilogy(EbNodB+papr6, ber6,sprintf('m+-;diversity 0.8 %3.1f;', papr6),'markersize', 10, 'linewidth', 2); + hold off; + xlabel('Peak Eb/No'); + axis([min(EbNodB)+papr2 max(EbNodB)+papr1 1E-3 1E-1]); grid; title(sprintf("%s Nc = %d", channel, Nc)) + fn = sprintf("papr_exp2_Nc%d_%s_BER_peakEbNo.png", Nc, channel); + print(fn,"-dpng"); +end + +% PAPR against number of carriers Nc +function curves_experiment3(Nsym=3000) + + paper = zeros(1,32); + Nc = 2:2:32; + for i = 1:length(Nc) + aNc = Nc(i); + [aber apapr] = run_sim(aNc, Nsym, 100); + papr(aNc) = apapr; + end + + figure(9); clf; + plot(Nc, papr(Nc)); xlabel('Number of Carriers Nc'); ylabel('PAPR (dB)'); grid; + fn = sprintf("papr_exp3_Nc.png"); + print(fn,"-dpng"); +end + +% focus on diversity - vary threshold and plot BER v Eb/No curves +function curves_experiment4(Nc=8, channel='multipath', Nsym=3000, EbNodB=2:2:16) + + [ber1 papr1] = run_sim(Nc, Nsym, EbNodB, channel, 0, filt_en=1); + [ber2 papr2] = run_sim(Nc, Nsym, EbNodB, channel, 0, filt_en=1, "diversity", threshold=1); + [ber3 papr3] = run_sim(Nc, Nsym, EbNodB, channel, 0, filt_en=1, "diversity", threshold=0.8); + [ber4 papr4] = run_sim(Nc, Nsym, EbNodB, channel, 0, filt_en=1, "diversity", threshold=0.6); + + figure(7); clf; + semilogy(EbNodB, ber1,sprintf('b+-;vanilla OFDM %3.1f;',papr1),'markersize', 10, 'linewidth', 2); hold on; + semilogy(EbNodB, ber2,sprintf('r+-;diversity 1.0 %3.1f;',papr2),'markersize', 10, 'linewidth', 2); + semilogy(EbNodB, ber3,sprintf('g+-;diversity 0.8 %3.1f;',papr3),'markersize', 10, 'linewidth', 2); + semilogy(EbNodB, ber4,sprintf('c+-;diversity 0.6 %3.1f;',papr4),'markersize', 10, 'linewidth', 2); + hold off; + axis([min(EbNodB) max(EbNodB) 1E-3 1E-1]); grid; + xlabel('Eb/No'); title(sprintf("%s Nc = %d", channel, Nc)) + fn = sprintf("papr_exp4_Nc%d_%s_BER_EbNo.png", Nc, channel); + print(fn,"-dpng"); + + figure(8); clf; + semilogy(EbNodB+papr1, ber1,sprintf('b+-;vanilla OFDM %3.1f;',papr1),'markersize', 10, 'linewidth', 2); hold on; + semilogy(EbNodB+papr2, ber2,sprintf('r+-;diversity 1.0 %3.1f;',papr2),'markersize', 10, 'linewidth', 2); + semilogy(EbNodB+papr3, ber3,sprintf('g+-;diversity 0.8 %3.1f;',papr3),'markersize', 10, 'linewidth', 2); + semilogy(EbNodB+papr4, ber4,sprintf('c+-;diversity 0.6 %3.1f;',papr4),'markersize', 10, 'linewidth', 2); + hold off; + xlabel('Peak Eb/No'); + axis([min(EbNodB)+papr4 max(EbNodB)+papr1 1E-3 1E-1]); grid; title(sprintf("%s Nc = %d", channel, Nc)) + fn = sprintf("papr_exp4_Nc%d_%s_BER_peakEbNo.png", Nc, channel); + print(fn,"-dpng"); +end + +% plot BER v Eb/No curves for clipping with normalised Eb/No after clipping +function curves_experiment5(Nc=8, channel='awgn', Nsym=1000, EbNodB=2:10) + + [ber1 papr1] = run_sim(Nc, Nsym, EbNodB, channel, 0, filt_en=1, "", threshold=1, norm=1); + [ber2 papr2] = run_sim(Nc, Nsym, EbNodB, channel, 0, filt_en=1, "clip", threshold=0.8, norm=1); + [ber3 papr3] = run_sim(Nc, Nsym, EbNodB, channel, 0, filt_en=1, "clip", threshold=0.6, norm=1); + [ber4 papr4] = run_sim(Nc, Nsym, EbNodB, channel, 0, filt_en=1, "clip", threshold=0.4, norm=1); + [ber5 papr5] = run_sim(Nc, Nsym, EbNodB, channel, 0, filt_en=1, "clip", threshold=0.2, norm=1); + + figure(7); clf; + semilogy(EbNodB, ber1,sprintf('b+-;vanilla OFDM %3.1f;',papr1),'markersize', 10, 'linewidth', 2); hold on; + semilogy(EbNodB, ber2,sprintf('r+-;clip 0.8 %3.1f;',papr2),'markersize', 10, 'linewidth', 2); + semilogy(EbNodB, ber3,sprintf('g+-;clip 0.6 %3.1f;',papr3),'markersize', 10, 'linewidth', 2); + semilogy(EbNodB, ber4,sprintf('c+-;clip 0.4 %3.1f;',papr4),'markersize', 10, 'linewidth', 2); + semilogy(EbNodB, ber5,sprintf('bk+-;clip 0.2 %3.1f;',papr5),'markersize', 10, 'linewidth', 2); + hold off; + axis([min(EbNodB) max(EbNodB) 1E-3 1E-1]); grid; + xlabel('Eb/No'); title(sprintf("%s Nc = %d", channel, Nc)) + fn = sprintf("papr_exp5_Nc%d_%s_BER_EbNo.png", Nc, channel); + print(fn,"-dpng"); +end + +pkg load statistics; +more off; + +test_papr; + +% single point with lots of plots ----------- + +%run_sim(8, 1000, EbNo=100, channel='awgn', plot_en=1, filt_en=1); +%run_sim(8, 8, EbNo=100, channel='awgn', plot_en=1, filt_en=1, "diversity", threshold=0.8); +%run_sim(8, 1000, EbNo=10, channel='multipath', plot_en=1, filt_en=0, "diversity", threshold=5); +%curves_experiment2(Nc=16, 'awgn', Nsym=1000); +curves_experiment2(Nc=16,'multipath', Nsym=3000, EbNodB=2:2:16); +%curves_experiment3() +%curves_experiment4() +%curves_experiment5(Nc=16) diff --git a/libcodec2-android/src/codec2/octave/phase_noise.m b/libcodec2-android/src/codec2/octave/phase_noise.m new file mode 100644 index 0000000..2978574 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/phase_noise.m @@ -0,0 +1,72 @@ +% phase_noise.m +% David Nov 2019 + +% Close-in look at phase noise. Feed in a off-air sample file of a +% sine wave, extracts the phase noise countour and returns the Doppler +% spreading function that can be used to model the channel in +% simulations + +function spread_FsHz = phase_noise(file_name) + Fs = 8000; + s = load_raw(file_name); + % skip past wave header + s = [zeros(256,1); s(256:end)]; + S = abs(fft(s(1:Fs).*hanning(Fs))); + [mx mx_bin] = max(S); + ftone = mx_bin-1; + + figure(1); clf; + plot(20*log10(S(1:Fs/2))) + title('Input Spectrum'); + + % downshift to baseband and LPF. We just want the sinusoid with as little + % additive AWGN noise as possible + sbb = s' .* exp(-j*(1:length(s))*2*pi*ftone/Fs); + [b a] = cheby1(4, 1, 20/Fs); + sbb_lpf = filter(b,a,sbb); + + spread_fsHz = sbb_lpf; + + % estimate and remove fine freq offset, and HF phase noise + + st = Fs; en = 20*Fs; + phase = unwrap(angle(sbb_lpf(st:en))); + fine_freq = mean(phase(2:end) - phase(1:end-1)); + sbb_lpf_fine = sbb_lpf .* exp(-j*(1:length(sbb_lpf))*fine_freq); + phase = unwrap(angle(sbb_lpf_fine(st:en))); + + printf("length: %3.2fs freq: %5.1f\n", length(s)/Fs, ftone+fine_freq*Fs/(2*pi)); + + figure(2); clf; + plot3((st:en)/Fs, real(sbb_lpf_fine(st:en)),imag(sbb_lpf_fine(st:en))) + title('Polar phase trajectory'); + + figure(3); clf; + S2 = fftshift(fft(sbb_lpf_fine(Fs:Fs*11))); + [mx mx_bin] = max(abs(S2)); + S2dB = 20*log10(abs(S2)); + mxdB = 10*ceil(max(S2dB)/10); + x = -10:0.1:10; + plot(x,S2dB(mx_bin-100:mx_bin+100)); + axis([-10 10 mxdB-40 mxdB]) + title('Close in Phase Noise Spectrum'); + xlabel('Freq (Hz)'); + grid; + + figure(5); clf; + t = (st:en)/Fs; + plot(t, phase,'b;phase;'); + title('Unwrapped Phase'); + xlabel('Time (sec)') + ylabel('Phase (radians)') + + figure(6); clf; + beta = 0.00001; + rate_of_change_Hz = filter(beta, [1 -(1-beta)],phase(2:end) - phase(1:end-1))*Fs/pi; + plot(t(2:end), rate_of_change_Hz) + title('Rate of change of phase (Hz)'); + xlabel('Time (sec)') + ylabel('Freq (Hz)') + + spread_FsHz = sbb_lpf_fine/std(sbb_lpf_fine); +end diff --git a/libcodec2-android/src/codec2/octave/pitch_test.m b/libcodec2-android/src/codec2/octave/pitch_test.m new file mode 100644 index 0000000..3fe0d1a --- /dev/null +++ b/libcodec2-android/src/codec2/octave/pitch_test.m @@ -0,0 +1,39 @@ +% pitch_test.m +% David Rowe Sep 2009 +% Constructs a sequence to test the pitch estimator + +function pitch_test(samname) + M=320; + F=200; + + fs=fopen(samname,"wb"); + + f0 = 100; + for f=1:200 + Wo=2*pi*f0/8000; + P=2*pi/Wo; + L = floor(pi/Wo); + A = 10000/L; + phi = zeros(1,L); + s = zeros(1,M); + + for m=1:L + s = s + A*cos(m*Wo*(0:(M-1)) + phi(m)); + endfor + + figure(1); + clf; + plot(s); + + fwrite(fs,s,"short"); + + f0 = f0 + 5; + if (f0 > 400) + f0 = 100; + endif + endfor + + fclose(fs); + +endfunction + diff --git a/libcodec2-android/src/codec2/octave/pl.m b/libcodec2-android/src/codec2/octave/pl.m new file mode 100644 index 0000000..0d54788 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/pl.m @@ -0,0 +1,45 @@ +% Copyright David Rowe 2009 +% This program is distributed under the terms of the GNU General Public License +% Version 2 +% +% Plots a raw speech sample file, you can optionally specify the start and end +% samples and create a large and small PNGs + +function pl(samname1, start_sam, end_sam, pngname) + + fs=fopen(samname1,"rb"); + s=fread(fs,Inf,"short"); + + st = 1; + en = length(s); + if (nargin >= 2) + st = start_sam; + endif + if (nargin >= 3) + en = end_sam; + endif + + figure(1); + clf; + plot(s(st:en)); + axis([1 en-st 1.1*min(s) 1.1*max(s)]); + + if (nargin == 4) + + % small image + + __gnuplot_set__ terminal png size 420,300 + ss = sprintf("__gnuplot_set__ output \"%s.png\"", pngname); + eval(ss) + replot; + + % larger image + + __gnuplot_set__ terminal png size 800,600 + ss = sprintf("__gnuplot_set__ output \"%s_large.png\"", pngname); + eval(ss) + replot; + + endif + +endfunction diff --git a/libcodec2-android/src/codec2/octave/pl2.m b/libcodec2-android/src/codec2/octave/pl2.m new file mode 100644 index 0000000..c7af10c --- /dev/null +++ b/libcodec2-android/src/codec2/octave/pl2.m @@ -0,0 +1,44 @@ +% Copyright David Rowe 2009 +% This program is distributed under the terms of the GNU General Public License +% Version 2 + +function pl2(samname1, samname2, start_sam, end_sam, offset) + + fs1=fopen(samname1,"rb"); + s1=fread(fs1,Inf,"short"); + fs2=fopen(samname2,"rb"); + s2=fread(fs2,Inf,"short"); + + st1 = st2 = 1; + en1 = en2 = length(s1); + if (nargin >= 3) + st1 = st2 = start_sam; + endif + if (nargin >= 4) + en1 = en2 = end_sam; + endif + + if (nargin == 5) + st2 += offset + en2 += offset + endif + + figure(1); + clf; + subplot(211); + l1 = strcat("r;",samname1,";"); + plot(s1(st1:en1), l1); + axis([1 en1-st1 min(s1(st1:en1)) max(s1(st1:en1))]); + subplot(212); + l2 = strcat("r;",samname2,";"); + plot(s2(st2:en2),l2); + axis([1 en2-st2 min(s1(st2:en2)) max(s1(st2:en2))]); + + figure(2) + plot(s1(st1:en1)-s2(st2:en2)); + + f=fopen("diff.raw","wb"); + d = s1(st1:en1)-s2(st2:en2); + fwrite(f,d,"short"); + +endfunction diff --git a/libcodec2-android/src/codec2/octave/plamp.m b/libcodec2-android/src/codec2/octave/plamp.m new file mode 100644 index 0000000..62b6893 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/plamp.m @@ -0,0 +1,197 @@ +% Copyright David Rowe 2009 +% This program is distributed under the terms of the GNU General Public License +% Version 2 +% +% Plot ampltiude modelling information from dump files. + +function plamp(samname, f, samname2) + + % switch some stuff off to unclutter display + + plot_lsp = 0; + plot_snr = 0; + plot_vsnr = 0; + plot_sw = 0; + plot_pw = 0; + + sn_name = strcat(samname,"_sn.txt"); + Sn = load(sn_name); + + sw_name = strcat(samname,"_sw.txt"); + Sw = load(sw_name); + + sw__name = strcat(samname,"_sw_.txt"); + if (file_in_path(".",sw__name)) + Sw_ = load(sw__name); + endif + + ew_name = strcat(samname,"_ew.txt"); + if (file_in_path(".",ew_name)) + Ew = load(ew_name); + endif + + rk_name = strcat(samname,"_rk.txt"); + if (file_in_path(".",rk_name)) + Rk = load(rk_name); + endif + + model_name = strcat(samname,"_model.txt"); + model = load(model_name); + + modelq_name = strcat(samname,"_qmodel.txt"); + if (file_in_path(".",modelq_name)) + modelq = load(modelq_name); + endif + + pw_name = strcat(samname,"_pw.txt"); + if (file_in_path(".",pw_name)) + Pw = load(pw_name); + endif + + lsp_name = strcat(samname,"_lsp.txt"); + if (file_in_path(".",lsp_name)) + lsp = load(lsp_name); + endif + + phase_name = strcat(samname,"_phase.txt"); + if (file_in_path(".",phase_name)) + phase = load(phase_name); + endif + + phase_name_ = strcat(samname,"_phase_.txt"); + if (file_in_path(".",phase_name_)) + phase_ = load(phase_name_); + endif + + snr_name = strcat(samname,"_snr.txt"); + if (file_in_path(".",snr_name)) + snr = load(snr_name); + endif + + % optional second file, for exploring post filter + + model2q_name = " "; + if nargin == 3 + model2q_name = strcat(samname2,"_qmodel.txt"); + if file_in_path(".",modelq_name) + model2q = load(model2q_name); + end + end + + Ew_on = 1; + k = ' '; + do + figure(1); + clf; +% s = [ Sn(2*(f-2)-1,:) Sn(2*(f-2),:) ]; + s = [ Sn(2*f-1,:) Sn(2*f,:) ]; + size(s); + plot(s); + axis([1 length(s) -20000 20000]); + + figure(2); + Wo = model(f,1); + L = model(f,2); + Am = model(f,3:(L+2)); + plot((1:L)*Wo*4000/pi, 20*log10(Am),";Am;r"); + axis([1 4000 -10 80]); + hold on; + if plot_sw + plot((0:255)*4000/256, Sw(f,:),";Sw;"); + end + + if (file_in_path(".",modelq_name)) + Amq = modelq(f,3:(L+2)); + plot((1:L)*Wo*4000/pi, 20*log10(Amq),";Amq;g" ); + if (file_in_path(".",pw_name) && plot_pw) + plot((0:255)*4000/256, 10*log10(Pw(f,:)),";Pw;c"); + endif + signal = Am * Am'; + noise = (Am-Amq) * (Am-Amq)'; + snr1 = 10*log10(signal/noise); + Am_err_label = sprintf(";Am error SNR %4.2f dB;m",snr1); + plot((1:L)*Wo*4000/pi, 20*log10(Amq) - 20*log10(Am), Am_err_label); + endif + + if file_in_path(".",model2q_name) + Amq2 = model2q(f,3:(L+2)); + plot((1:L)*Wo*4000/pi, 20*log10(Amq2),";Amq2;m" ); + end + + if (file_in_path(".",snr_name) && plot_vsnr) + snr_label = sprintf(";Voicing SNR %4.2f dB;",snr(f)); + plot(1,1,snr_label); + endif + + % phase model - determine SNR and error spectrum for phase model 1 + + if (file_in_path(".",phase_name_)) + orig = Am.*exp(j*phase(f,1:L)); + synth = Am.*exp(j*phase_(f,1:L)); + signal = orig * orig'; + noise = (orig-synth) * (orig-synth)'; + snr_phase = 10*log10(signal/noise); + + %phase_err_label = sprintf(";phase_err SNR %4.2f dB;",snr_phase); + %plot((1:L)*Wo*4000/pi, 20*log10(orig-synth), phase_err_label); + endif + + if (file_in_path(".",lsp_name) && plot_lsp) + for l=1:10 + plot([lsp(f,l)*4000/pi lsp(f,l)*4000/pi], [60 80], 'r'); + endfor + endif + + hold off; + + %if (file_in_path(".",phase_name)) + %figure(3); + %plot((1:L)*Wo*4000/pi, phase(f,1:L), ";phase;"); + %axis; + %if (file_in_path(".",phase_name_)) + %hold on; + %plot((1:L)*Wo*4000/pi, phase_(f,1:L), ";phase_;"); + %hold off; + %endif + %figure(2); + %endif + + % interactive menu + + printf("\rframe: %d menu: n-next b-back p-png q-quit e-toggle Ew", f); + fflush(stdout); + k = kbhit(); + if (k == 'n') + f = f + 1; + endif + if (k == 'b') + f = f - 1; + endif + if (k == 'e') + if (Ew_on == 1) + Ew_on = 0; + else + Ew_on = 1; + endif + endif + + % optional print to PNG + + if (k == 'p') + figure(1); + pngname = sprintf("%s_%d_sn.png",samname,f); + print(pngname, '-dpng', "-S500,500") + pngname = sprintf("%s_%d_sn_large.png",samname,f); + print(pngname, '-dpng', "-S800,600") + + figure(2); + pngname = sprintf("%s_%d_sw.png",samname,f); + print(pngname, '-dpng', "-S500,500") + pngname = sprintf("%s_%d_sw_large.png",samname,f); + print(pngname, '-dpng', "-S1200,800") + endif + + until (k == 'q') + printf("\n"); + +endfunction diff --git a/libcodec2-android/src/codec2/octave/plinterp.m b/libcodec2-android/src/codec2/octave/plinterp.m new file mode 100644 index 0000000..794a085 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/plinterp.m @@ -0,0 +1,11 @@ +load ../unittest/tinterp_prev.txt; +load ../unittest/tinterp_interp.txt; +load ../unittest/tinterp_next.txt; + +clf; +plot(tinterp_prev(:,1), 20.0*log10(tinterp_prev(:,2)),";prev;") +hold on; +plot(tinterp_interp(:,1), 20.0*log10(tinterp_interp(:,2)),'g+-;interp;') +plot(tinterp_next(:,1), 20.0*log10(tinterp_next(:,2)),'ro-;next;') +hold off; +axis([0 pi 0 80]) diff --git a/libcodec2-android/src/codec2/octave/pllpcpf.m b/libcodec2-android/src/codec2/octave/pllpcpf.m new file mode 100644 index 0000000..924e045 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/pllpcpf.m @@ -0,0 +1,150 @@ +% Copyright David Rowe 2012 +% This program is distributed under the terms of the GNU General Public License +% Version 2 +% +% Plot amplitude modelling information from dump files to test and develop +% LPC post filter. + +function pllpcpf(samname, f) + + % switch some stuff off to unclutter display + + plot_Am = 0; + plot_Amq = 0; + plot_err = 0; + plot_lsp = 0; + plot_snr = 0; + plot_vsnr = 0; + plot_sw = 0; + plot_pw = 1; + plot_pwb = 1; + plot_rw = 1; + + sn_name = strcat(samname,"_sn.txt"); + Sn = load(sn_name); + + sw_name = strcat(samname,"_sw.txt"); + Sw = load(sw_name); + + sw__name = strcat(samname,"_sw_.txt"); + if (file_in_path(".",sw__name)) + Sw_ = load(sw__name); + endif + + model_name = strcat(samname,"_model.txt"); + model = load(model_name); + + modelq_name = strcat(samname,"_qmodel.txt"); + if (file_in_path(".",modelq_name)) + modelq = load(modelq_name); + endif + + % Pw (LPC synth filter spectrum) before post filter + + pwb_name = strcat(samname,"_pwb.txt"); + if (file_in_path(".",pwb_name)) + Pwb = load(pwb_name); + endif + + % Rw (Post filter spectrum) + + rw_name = strcat(samname,"_rw.txt"); + if (file_in_path(".",rw_name)) + Rw = load(rw_name); + endif + + % Pw (LPC synth filter spectrum) after post filter + + pw_name = strcat(samname,"_pw.txt"); + if (file_in_path(".",pw_name)) + Pw = load(pw_name); + endif + + + Ew_on = 1; + k = ' '; + do + figure(1); + clf; + s = [ Sn(2*f-1,:) Sn(2*f,:) ]; + size(s); + plot(s); + axis([1 length(s) -20000 20000]); + + figure(2); + clf; + Wo = model(f,1); + L = model(f,2); + Am = model(f,3:(L+2)); + if plot_Am + plot((1:L)*Wo*4000/pi, 20*log10(Am),";Am;r"); + end + axis([1 4000 -10 80]); + hold on; + if plot_sw + plot((0:255)*4000/256, Sw(f,:),";Sw;"); + end + + if (file_in_path(".",modelq_name)) + + Amq = modelq(f,3:(L+2)); + if plot_Amq + plot((1:L)*Wo*4000/pi, 20*log10(Amq),";Amq;g" ); + end + + if (file_in_path(".",pwb_name) && plot_pwb) + plot((0:255)*4000/256, 10*log10(Pwb(f,:)),";Pwb;r"); + endif + + if (file_in_path(".",rw_name) && plot_rw) + plot((0:255)*4000/256, 10*log10(Rw(f,:)),";Rw;b"); + endif + + if (file_in_path(".",pw_name) && plot_pw) + plot((0:255)*4000/256, 10*log10(Pw(f,:)),";Pw;g."); + endif + + signal = Am * Am'; + noise = (Am-Amq) * (Am-Amq)'; + snr1 = 10*log10(signal/noise); + Am_err_label = sprintf(";Am error SNR %4.2f dB;m",snr1); + if plot_err + plot((1:L)*Wo*4000/pi, 20*log10(Amq) - 20*log10(Am), Am_err_label); + end + endif + + + hold off; + + % interactive menu + + printf("\rframe: %d menu: n-next b-back p-png q-quit", f); + fflush(stdout); + k = kbhit(); + if (k == 'n') + f = f + 1; + endif + if (k == 'b') + f = f - 1; + endif + + % optional print to PNG + + if (k == 'p') + figure(1); + pngname = sprintf("%s_%d_sn.png",samname,f); + print(pngname, '-dpng', "-S500,500") + pngname = sprintf("%s_%d_sn_large.png",samname,f); + print(pngname, '-dpng', "-S800,600") + + figure(2); + pngname = sprintf("%s_%d_sw.png",samname,f); + print(pngname, '-dpng', "-S500,500") + pngname = sprintf("%s_%d_sw_large.png",samname,f); + print(pngname, '-dpng', "-S1200,800") + endif + + until (k == 'q') + printf("\n"); + +endfunction diff --git a/libcodec2-android/src/codec2/octave/pllsp.m b/libcodec2-android/src/codec2/octave/pllsp.m new file mode 100644 index 0000000..0606d3c --- /dev/null +++ b/libcodec2-android/src/codec2/octave/pllsp.m @@ -0,0 +1,46 @@ +% Copyright David Rowe 2010 +% This program is distributed under the terms of the GNU General Public License +% Version 2 +% +% Plots a bunch of information related to LSP quantisation: +% - speech file +% - LSPs before and after quantisation +% - SNR for each frame +% +% Note: there is a 160 sample (two frame delay) from the when a sample +% enters the input buffer until it is at the centre of the analysis window + +function pllsp(rawfile, + dumpfile_prefix_lpc_only, + dumpfile_prefix_lsp, + start_f, end_f) + + fs=fopen(rawfile,"rb"); + s=fread(fs,Inf,"short"); + + lpc_snr_name = strcat(dumpfile_prefix_lpc_only,"_lpc_snr.txt"); + lpc10_snr = load(lpc_snr_name); + lpc_snr_name = strcat(dumpfile_prefix_lsp,"_lpc_snr.txt"); + lsp_snr = load(lpc_snr_name); + + lsp_name = strcat(dumpfile_prefix_lsp,"_lsp.txt"); + lsps = load(lsp_name); + [m,n]=size(lsps); + lsp = lsps(1:2:m,:); + lsp_ = lsps(2:2:m,:); + + figure(1); + clf; + subplot(211); + sp = s((start_f-2)*80:(end_f-2)*80); + plot(sp); + + subplot(212); + plot(lpc10_snr((start_f+1):end_f)-lsp_snr((start_f+1):end_f)); + + figure(2); + plot((4000/pi)*lsp((start_f+1):end_f,:)); + hold on; + plot((4000/pi)*lsp_((start_f+1):end_f,:),'+-'); + hold off; +endfunction diff --git a/libcodec2-android/src/codec2/octave/pllspdt.m b/libcodec2-android/src/codec2/octave/pllspdt.m new file mode 100644 index 0000000..c711aa4 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/pllspdt.m @@ -0,0 +1,27 @@ +% pllspdt.m +% Copyright David Rowe 2010 +% This program is distributed under the terms of the GNU General Public License +% Version 2 +% +% Test script to plot differences in LSps between frames + +function pllspdt(rawfile,dumpfile_prefix_lsp,lspn, start_f, end_f) + + fs=fopen(rawfile,"rb"); + s=fread(fs,Inf,"short"); + + lsp_name = strcat(dumpfile_prefix_lsp,"_lsp.txt"); + lsps = load(lsp_name); + [m,n]=size(lsps); + lsp = lsps(1:2:m,:); + lsp_ = lsps(2:2:m,:); + lspdt = lsp(2:m/2,:) - lsp(1:m/2-1,:); + + figure(1); + clf; + sp = s((start_f-2)*80:(end_f-2)*80); + plot(sp); + + figure(2); + plot((4000/pi)*lspdt((start_f+1):end_f,lspn)); +endfunction diff --git a/libcodec2-android/src/codec2/octave/plnlp.m b/libcodec2-android/src/codec2/octave/plnlp.m new file mode 100644 index 0000000..01b4931 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/plnlp.m @@ -0,0 +1,134 @@ +% Copyright David Rowe 2009 +% This program is distributed under the terms of the GNU General Public License +% Version 2 +% +% Plot NLP states from dump files. + +function plnlp(samname, f) + + sn_name = strcat(samname,"_sn.txt"); + Sn = load(sn_name); + + sw_name = strcat(samname,"_sw.txt"); + Sw = load(sw_name); + + fw_name = strcat(samname,"_fw.txt"); + if (file_in_path(".",fw_name)) + fw = load(fw_name); + endif + + e_name = strcat(samname,"_e.txt"); + if (file_in_path(".",e_name)) + e = load(e_name); + endif + + p_name = strcat(samname,".p"); + if (file_in_path(".",p_name)) + p = load(p_name); + endif + + sq_name = strcat(samname,"_sq.txt"); + if (file_in_path(".",sq_name)) + sq = load(sq_name); + endif + + dec_name = strcat(samname,"_dec.txt"); + if (file_in_path(".",dec_name)) + dec = load(dec_name); + endif + + do + figure(1); + clf; + s = [ Sn(2*f-1,:) Sn(2*f,:) ]; + plot(s, ";Sn;"); + grid + axis([1 length(s) -20000 20000]); + + figure(2); + plot((0:255)*4000/256, Sw(f,:),";Sw;"); + grid + axis([1 4000 -10 80]); + hold on; + + f0 = 8000/p(f); + Wo = 2*pi/p(f); + L = floor(pi/Wo); + f0_label = sprintf("b;P=%3.1f F0=%3.0f;",p(f),f0); + for m=1:L-1 + plot([ m*Wo*4000/pi m*Wo*4000/pi], [10 60], 'b'); + endfor + plot([ L*Wo*4000/pi L*Wo*4000/pi], [10 60], f0_label); + + hold off; + + if (file_in_path(".",fw_name)) + figure(3); + if (file_in_path(".",e_name)) + subplot(211); + endif + plot((0:255)*800/256, fw(f,:)/max(fw(f,:)), ";Fw;"); + axis([1 400 0 1]); + if (file_in_path(".",e_name)) + subplot(212); + e_concat = [ e(2*f-1,:) e(2*f,:) ]; + plot(e_concat(1:400)/max(e_concat(1:400)), "+;MBE E(f);"); + axis([1 400 0 1]); + endif + endif + + if (file_in_path(".",sq_name)) + figure(4); + sq_concat = [ sq(2*f-1,:) sq(2*f,:) ]; + axis + plot(sq_concat, ";sq;"); + endif + + if (file_in_path(".",dec_name)) + figure(5); + plot(dec(f,:), ";dec;"); + endif + + figure(2); + + % interactive menu + + printf("\rframe: %d menu: n-next b-back p-png q-quit ", f); + fflush(stdout); + k = kbhit(); + if (k == 'n') + f = f + 1; + endif + if (k == 'b') + f = f - 1; + endif + + % optional print to PNG + + if (k == 'p') + + pngname = sprintf("%s_%d",samname,f); + + % small image + + __gnuplot_set__ terminal png size 420,300 + ss = sprintf("__gnuplot_set__ output \"%s.png\"", pngname); + eval(ss) + replot; + + % larger image + + __gnuplot_set__ terminal png size 800,600 + ss = sprintf("__gnuplot_set__ output \"%s_large.png\"", pngname); + eval(ss) + replot; + + % for some reason I need this to stop large plot getting wiped + __gnuplot_set__ output "/dev/null" + + endif + + until (k == 'q') + printf("\n"); + +endfunction diff --git a/libcodec2-android/src/codec2/octave/plot_fsk_demod_stats.py b/libcodec2-android/src/codec2/octave/plot_fsk_demod_stats.py new file mode 100644 index 0000000..a73287d --- /dev/null +++ b/libcodec2-android/src/codec2/octave/plot_fsk_demod_stats.py @@ -0,0 +1,95 @@ +#!/usr/bin/env python +# +# Plot fsk_demod statistic outputs. +# +# Copyright (C) 2018 Mark Jessop +# Released under GNU GPL v3 or later +# +import json +import os +import sys +import time +import subprocess +import numpy as np +import pandas as pd +import matplotlib.pyplot as plt + +_filename = sys.argv[1] + +if len(sys.argv)>2: + _sps = int(sys.argv[2]) + _x_label = "Seconds" +else: + _sps = 1 + _x_label = "Sample Number" + +_ebno = [] +_fest1 = [] +_fest2 = [] +_fest3 = [] +_fest4 = [] +_ppm = [] +_time = [] + + +_f = open(_filename,'r') + +for _line in _f: + + if _line[0] != '{': + continue + + try: + _data = json.loads(_line) + except Exception as e: + #print("Line parsing error: %s" % str(e)) + continue + + _ebno.append(_data['EbNodB']) + _fest1.append(_data['f1_est']) + _fest2.append(_data['f2_est']) + + if 'f3_est' in _data: + _fest3.append(_data['f3_est']) + _fest4.append(_data['f4_est']) + + _ppm.append(_data['ppm']) + + if _time == []: + _time = [0] + else: + _time.append(_time[-1]+1.0/_sps) + + +_ebno_max = pd.Series(_ebno).rolling(10).max().dropna().tolist() + + +plt.figure() + +plt.plot(_time[:len(_ebno_max)],_ebno_max) +plt.xlabel(_x_label) +plt.ylabel("Eb/N0 (dB)") +plt.title("Eb/N0") + +plt.figure() + +plt.plot(_time,_fest1, label="f1 est") +plt.plot(_time,_fest2, label="f2 est") + +if len(_fest3) > 0: + plt.plot(_time,_fest3, label="f3 est") + plt.plot(_time,_fest4, label="f4 est") + +plt.legend() +plt.xlabel(_x_label) +plt.ylabel("Frequency (Hz)") +plt.title("Frequency Estimator Outputs") + + +plt.figure() +plt.plot(_time,_ppm) +plt.xlabel(_x_label) +plt.ylabel("PPM") +plt.title("Demod PPM Estimate") + +plt.show() \ No newline at end of file diff --git a/libcodec2-android/src/codec2/octave/plot_specgram.m b/libcodec2-android/src/codec2/octave/plot_specgram.m new file mode 100644 index 0000000..fe9803c --- /dev/null +++ b/libcodec2-android/src/codec2/octave/plot_specgram.m @@ -0,0 +1,18 @@ +% plot_specgram.m +% David Rowe May 2017 +% +% As the name suggests..... + +function S = plot_specgram(x, Fs = 8000) + + step = fix(20*Fs/1000); # one spectral slice every 5 ms + window = fix(160*Fs/1000); # 40 ms data window + fftn = 2^nextpow2(window); # next highest power of 2 + [S, f, t] = specgram(x, fftn, Fs, window, window-step); + S = abs(S(2:fftn*4000/Fs,:)); # magnitude in range 0= 3) + st = start_fr; + endif + if (nargin >= 4) + en = end_fr; + endif + + figure(1); + clf; + l1 = strcat("r;",pitch1_name,";") + l1 + st + en + plot(pitch1(st:en), l1); + axis([1 en-st 20 160]); + l2 = strcat("g;",pitch2_name,";"); + hold on; + plot(pitch2(st:en),l2); + hold off; +endfunction + diff --git a/libcodec2-android/src/codec2/octave/plvoicing.m b/libcodec2-android/src/codec2/octave/plvoicing.m new file mode 100644 index 0000000..a531747 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/plvoicing.m @@ -0,0 +1,89 @@ +% Copyright David Rowe 2009 +% This program is distributed under the terms of the GNU General Public License +% Version 2 +% +% Plot voicing information from sample and dump files. +% +% samfilename is the raw source file, e.g. "../raw/hts1a.raw" +% samname is the dumpfile prefix, e.g. "../src/hts1a" +% +% There is a 160 sample (two frame delay) from the when a sample +% enters the input buffer until it is at the centre of the analysis window + +function plvoicing(samfilename, samname, start_f, end_f, pngname) + + fs=fopen(samfilename,"rb"); + s=fread(fs,Inf,"short"); + + snr_name = strcat(samname,"_snr.txt"); + snr = load(snr_name); + model_name = strcat(samname,"_model.txt"); + model = load(model_name); + + Wo = model((start_f+1):end_f,1); + F0 = Wo*4000/pi; + dF0 = F0(1:length(Wo)-1) - F0(2:length(Wo)); + + % work out LP and HP energy + + for f=(start_f+1):end_f + L = model(f,2); + Am = model(f,3:(L+2)); + L2 = floor(L/2); + elow = Am(1:L2) * Am(1:L2)'; + ehigh = Am(L2:L) * Am(L2:L)'; + erat(f-(start_f+1)+1) = 10*log10(elow/ehigh); + endfor + + figure(1); + clf; + sp = s((start_f-2)*80:(end_f-2)*80); + plot(sp); + hold on; + vhigh = snr((start_f+1):end_f) > 7; + vlow = snr((start_f+1):end_f) > 4; + + % test correction based on erat + + vlowadj = vlow; + + for f=1:length(erat)-1 + if (vlow(f) == 0) + if (erat(f) > 10) + vlowadj(f) = 1; + endif + endif + if (vlow(f) == 1) + if (erat(f) < -10) + vlowadj(f) = 0; + endif + if (abs(dF0(f)) > 15) + vlowadj(f) = 0; + endif + endif + endfor + + x = 1:(end_f-start_f); + plot(x*80,snr((start_f+1):end_f)*1000,';SNRdB x 1000;g+'); + plot(x*80,-8000 + vhigh*2000,';7dB thresh;g'); + plot(x*80,-11000 + vlowadj*2000,';vlow with corr;g'); + plot(x*80,erat*1000,';elow/ehigh in dB;r'); + plot(x*80,-14000 + vlow*2000,';4dB thresh;r'); + hold off; + grid + if (nargin == 5) + print(pngname, "-dpng", "-S500,500") + endif + + figure(2) + Wo = model((start_f+1):end_f,1); + F0 = Wo*4000/pi; + dF0 = F0(1:length(Wo)-1) - F0(2:length(Wo)); + %plot(dF0,'+--') + %hold on; + %plot([ 1 length(dF0) ], [10 10] ,'r') + %plot([ 1 length(dF0) ], [-10 -10] ,'r') + %axis([1 length(dF0) -50 50]) + %hold off; + plot(F0,'+--') +endfunction diff --git a/libcodec2-android/src/codec2/octave/png.m b/libcodec2-android/src/codec2/octave/png.m new file mode 100644 index 0000000..09a7996 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/png.m @@ -0,0 +1,25 @@ +% Copyright David Rowe 2009 +% This program is distributed under the terms of the GNU General Public License +% Version 2 +% +% Replot current plot as a png, generates small and large versions + +function png(pngname) + % small image + + __gnuplot_set__ terminal png size 420,300 + ss = sprintf("__gnuplot_set__ output \"%s.png\"", pngname); + eval(ss) + replot; + + % larger image + + __gnuplot_set__ terminal png size 800,600 + ss = sprintf("__gnuplot_set__ output \"%s_large.png\"", pngname); + eval(ss) + replot; + + % for some reason I need this to stop large plot getting wiped + __gnuplot_set__ output "/dev/null" + +endfunction diff --git a/libcodec2-android/src/codec2/octave/power_from_stdio.m b/libcodec2-android/src/codec2/octave/power_from_stdio.m new file mode 100644 index 0000000..a4dbddc --- /dev/null +++ b/libcodec2-android/src/codec2/octave/power_from_stdio.m @@ -0,0 +1,27 @@ +% power_from_gr.m +% David Rowe June 2018 +% +% Measure power of signal from stdio, used for SNR tests from analog radios + +#{ + $ rec -t raw -r 8000 -s -2 -c 1 - -q | octave --no-gui -qf power_from_stdio.m +#} + +graphics_toolkit ("gnuplot") + +Fs = 48000; % sample rate in Hz +shorts_per_sample = 1; % real samples + +[s,c] = fread(stdin, shorts_per_sample*Fs, "short"); + +while c + S = fft(s.*hanning(Fs)); + SdB = 20*log10(abs(S)); + figure(1); plot(real(s)); axis([0 Fs -3E4 3E4]); + figure(2); plot(SdB); axis([0 12000 40 160]); + + printf("power: %f dB\n", 10*log10(var(s))); + %pause(2); + [s,c] = fread(stdin, shorts_per_sample*Fs, "short"); +endwhile + diff --git a/libcodec2-android/src/codec2/octave/pulse.m b/libcodec2-android/src/codec2/octave/pulse.m new file mode 100644 index 0000000..223389e --- /dev/null +++ b/libcodec2-android/src/codec2/octave/pulse.m @@ -0,0 +1,37 @@ +% pulse.m +% David Rowe August 2009 +% +% Experiments with human pulse perception for sinusoidal codecs + +function pulse(samname) + + A = 1000; + K = 16000; + N = 80; + frames = K/N; + s = zeros(1,K); + + for f=1:frames + % lets try placing np random pulses in every frame + + P = 20 + (160-20)*rand(1,1); + Wo = 2*pi/P; + L = floor(pi/Wo); + sf = zeros(1,N); + for m=1:L/2:L + pos = floor(rand(1,1)*N)+1; + %pos = 50; + for l=m:m+L/2-1 + sf = sf + A*cos(l*Wo*((f-1)*N+1:f*N) - pos*l*Wo); + endfor + endfor + s((f-1)*N+1:f*N) = sf; + endfor + + plot(s(1:250)); + + fs=fopen(samname,"wb"); + fwrite(fs,s,"short"); + fclose(fs); +endfunction + diff --git a/libcodec2-android/src/codec2/octave/qam16.m b/libcodec2-android/src/codec2/octave/qam16.m new file mode 100644 index 0000000..0e66c4b --- /dev/null +++ b/libcodec2-android/src/codec2/octave/qam16.m @@ -0,0 +1,33 @@ +% qam16.m +% David Rowe May 2020 +% +% Octave QAM16 functions + +1; + +function symbol = qam16_mod(constellation, four_bits) + bits_decimal = sum(four_bits .* [8 4 2 1]); + symbol = constellation(bits_decimal+1); +endfunction + +function four_bits = qam16_demod(constellation, symbol) + dist = abs(symbol - constellation(1:16)); + [tmp decimal] = min(dist); + four_bits = zeros(1,4); + for i=1:4 + four_bits(1,5-i) = bitand(bitshift(decimal-1,1-i),1); + end +endfunction + +function test_qam16_mod_demod(constellation) + for decimal=0:15 + tx_bits = zeros(1,4); + for i=1:4 + tx_bits(1,5-i) = bitand(bitshift(decimal-1,1-i),1); + end + symbol = qam16_mod(constellation, tx_bits); + rx_bits = qam16_demod(constellation,symbol); + assert(tx_bits == rx_bits); + end +endfunction + diff --git a/libcodec2-android/src/codec2/octave/qam16_test.m b/libcodec2-android/src/codec2/octave/qam16_test.m new file mode 100644 index 0000000..c5b19b1 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/qam16_test.m @@ -0,0 +1,141 @@ +% qam16_test.m +% David Rowe May 2020 +% +% Octave symbol rate QAM16/LDPC experiments + +% Libraries we need + +1; +qam16; +ldpc; + +function test_qam16(fg=2) + printf("QAM16 ----------------------------------------\n"); + + mod_order = 16; bps = log2(mod_order); + modulation = 'QAM'; mapping = ""; demod_type = 0; decoder_type = 0; + max_iterations = 100; EsNo_dec = 10; + qam16_const = [ + 1 + j, 1 + j*3, 3 + j, 3 + j*3; + 1 - j, 1 - j*3, 3 - j, 3 - j*3; + -1 + j, -1 + j*3, -3 + j, -3 + j*3; + -1 - j, -1 - j*3, -3 - j, -3 - j*3]; + rms = sqrt(qam16_const(:)'*qam16_const(:)/16); + qam16_const = qam16_const/rms; + constellation_source = 'custom'; + test_qam16_mod_demod(qam16_const); + + load HRA_504_396.txt + if strcmp(constellation_source,'cml') + code_param = ldpc_init_user(HRA_504_396, modulation, mod_order, mapping); + else + code_param = ldpc_init_user(HRA_504_396, modulation, mod_order, mapping, reshape(qam16_const,1,16)); + end + rate = code_param.ldpc_data_bits_per_frame/code_param.ldpc_coded_bits_per_frame; + + printf("EbNodB Tbits Terrs BER Tcbits Tcerrs Perrs CBER CPER\n"); + EbNodBvec = 3:10; Ntrials = 1000; + for i=1:length(EbNodBvec) + EbNodB = EbNodBvec(i); + EsNodB = EbNodB + 10*log10(rate) + 10*log10(bps); EsNodBvec(i) = EsNodB; + EsNo = 10^(EsNodB/10); + variance = 1/EsNo; + Terrs = Tbits = 0; Tcerrs = 0; Tcbits = 0; Perrs = 0; rx_symbols_log = []; + for nn = 1:Ntrials + tx_bits = round(rand(1, code_param.ldpc_data_bits_per_frame)); + [tx_codeword, tx_symbols] = ldpc_enc(tx_bits, code_param); + noise = sqrt(variance*0.5)*(randn(1,length(tx_symbols)) + j*randn(1,length(tx_symbols))); + rx_symbols = tx_symbols + noise; + rx_symbols_log = [rx_symbols_log rx_symbols]; + + % uncoded decode/demod and count errors + rx_codeword = zeros(1,code_param.ldpc_coded_bits_per_frame); + for s=1:length(rx_symbols) + rx_codeword((s-1)*bps+1:s*bps) = qam16_demod(qam16_const,rx_symbols(s)); + end + Nerr = sum(xor(tx_codeword,rx_codeword)); + Terrs += Nerr; + Tbits += code_param.ldpc_coded_bits_per_frame; + + % LDPC demod/decode and count errors + dec_rx_codeword = ldpc_dec(code_param, max_iterations, demod_type, decoder_type, rx_symbols, EsNo_dec, ones(1,length(rx_symbols))); + errors_positions = xor(tx_bits, dec_rx_codeword(1:code_param.ldpc_data_bits_per_frame)); + Ncerr = sum(errors_positions); + Tcbits += code_param.ldpc_data_bits_per_frame; Tcerrs += Ncerr; + if Ncerr Perrs++; end + end + figure(fg); clf; plot(rx_symbols_log,"."); axis([-1.5 1.5 -1.5 1.5]); drawnow; + printf("%5.1f %6d %6d %5.2f %6d %6d %6d %5.2f %5.2f\n", + EbNodB, Tbits, Terrs, Terrs/Tbits, Tcbits, Tcerrs, Perrs, Tcerrs/Tcbits, Perrs/Ntrials); + ber(i) = Terrs/Tbits; cber(i) = Tcerrs/Tcbits; cper(i) = Perrs/Ntrials; + end + print("qam64_scatter.png","-dpng"); + + figure(fg+1); clf; title('QAM16 Uncoded'); + uncoded_EbNodBvec = EbNodBvec + 10*log10(rate); + ber_theory = ber_qam(uncoded_EbNodBvec); + semilogy(uncoded_EbNodBvec,ber_theory,'b+-;uncoded QAM16 BER theory;','markersize', 10, 'linewidth', 2); hold on; + semilogy(uncoded_EbNodBvec,ber+1E-10,'g+-;uncoded QAM16 BER;','markersize', 10, 'linewidth', 2); hold on; + grid; axis([min(uncoded_EbNodBvec) max(uncoded_EbNodBvec) 1E-5 1]); xlabel('Uncoded Eb/No (dB)'); + print("qam16_uncoded_ber.png","-dpng"); + + figure(fg+2); clf; title('QAM16 with LDPC (504,396)'); + semilogy(EbNodBvec,cber+1E-10,'b+-;QAM16 coded BER;','markersize', 10, 'linewidth', 2); hold on; + semilogy(EbNodBvec,cper+1E-10,'g+-;QAM16 coded PER;','markersize', 10, 'linewidth', 2); hold off; + grid; axis([min(EbNodBvec) max(EbNodBvec) 1E-5 1]); xlabel('Eb/No (dB)'); + + figure(fg+3); clf; title('QAM16 with LDPC (504,396)'); + semilogy(EsNodBvec,cber+1E-10,'b+-;QAM16 coded BER;','markersize', 10, 'linewidth', 2); hold on; + semilogy(EsNodBvec,cper+1E-10,'g+-;QAM16 coded PER;','markersize', 10, 'linewidth', 2); hold off; + grid; axis([min(EsNodBvec) max(EsNodBvec) 1E-5 1]); xlabel('Es/No (dB)'); + print("qam16_504_396.png","-dpng"); +endfunction + + +% Thanks Bill VK5DSP, for the QAM BER functions + +function p = ber_qam(ebn0) + % Calculate the bit error rate (BER) for square 16QAM in AWGN + % given the Eb/N0 in dB, ebn0 can be a scalar or vector + % (assuming coherent detection, uncoded) + % [section 5.3 Webb and Hanzo text] + + e = 4*10.^(ebn0/10); % Es/N0 vector in linear + b2 = qfn(sqrt(e/5)); + b1 = (qfn(sqrt(e/5)) + qfn(3*sqrt(e/5)))/2; + p = (b1+b2)/2; +endfunction + +function tail=qfn(a) + % Usage: tail=qfn(a) + % where: tail=area under the tail of the normal dist. from a to inf. + % for zero mean, unit variance distribution + % + % If no argument is given, plot Q(x) for x = 0 to 5 + + % use erfc instead of 1-erf to avoid truncation errors! April 2010 + + fact = 1 / sqrt(2); + if exist('a') + + % tail = 0.5 * ( 1 - erf(a * fact)); + tail = 0.5 * erfc(a * fact); + else + x=(0: 0.1: 6); semilogy(x, 0.5*( erfc(x * fact))); + title('Q function plot'); + xlabel('x'); ylabel('Q(x)'); + end +endfunction + + +% -------------------------------------------------------------------------------- +% START SIMULATIONS +% -------------------------------------------------------------------------------- + +more off; +format; + +% Start CML library (see CML set up instructions in ldpc.m) +init_cml('~/cml/'); + +test_qam16(1) diff --git a/libcodec2-android/src/codec2/octave/qpsk.m b/libcodec2-android/src/codec2/octave/qpsk.m new file mode 100644 index 0000000..b502e16 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/qpsk.m @@ -0,0 +1,140 @@ +% qpsk.m +% +% David Rowe Sep 2015 +% +% Octave functions to implement a QPSK modem + +1; + +% Gray coded QPSK modulation function + +function symbol = qpsk_mod(two_bits) + two_bits_decimal = sum(two_bits .* [2 1]); + switch(two_bits_decimal) + case (0) symbol = 1; + case (1) symbol = j; + case (2) symbol = -j; + case (3) symbol = -1; + endswitch +endfunction + + +% Gray coded QPSK demodulation function + +function two_bits = qpsk_demod(symbol) + bit0 = real(symbol*exp(j*pi/4)) < 0; + bit1 = imag(symbol*exp(j*pi/4)) < 0; + two_bits = [bit1 bit0]; +endfunction + + +% Inserts pilot symbols a frame of symbols. The pilot symbols are +% spread evenly throughout the input frame. + +function frameout = insert_pilots(framein, pilots, Npilotstep) + + lpilots = length(pilots); + lframein = length(framein); + frameout = zeros(1, lframein + lpilots); + + pin = 1; pout = 1; ppilots = 1; + while (lpilots) + %printf("pin %d pout %d ppilots %d lpilots %d\n", pin, pout, ppilots, lpilots); + frameout(pout:pout+Npilotstep-1) = framein(pin:pin+Npilotstep-1); + pin += Npilotstep; + pout += Npilotstep; + frameout(pout:pout) = pilots(ppilots); + ppilots++; + pout++; + lpilots--; + end +endfunction + + +% Removes the pilots symbols from a frame of symbols. + +function frameout = remove_pilots(framein, pilots, Npilotstep) + + frameout = []; + lpilots = length(pilots); + + pin = 1; pout = 1; + while (lpilots) + %printf("pin %d pout %d lpilots %d ", pin, pout, lpilots); + %printf("pin+spacing-1 %d lvd %d lframein: %d\n", pin+spacing-1, lvd, length(framein)); + frameout(pout:pout+Npilotstep-1) = framein(pin:pin+Npilotstep-1); + pin += Npilotstep+1; + pout += Npilotstep; + lpilots--; + end + +endfunction + + +% Estimate and correct phase offset using a window of Np pilots around +% current symbol + +function symbpilot_rx = correct_phase_offset(aqpsk, symbpilot_rx) + rx_pilot_buf = aqpsk.rx_pilot_buf; + Npilotstep = aqpsk.Npilotstep; + Nsymb = aqpsk.Nsymb; + + for ns=1:Npilotstep+1:Nsymb + + % update buffer of recent pilots, note we need past ones + + rx_pilot_buf(1) = rx_pilot_buf(2); + next_pilot_index = ceil(ns/(Npilotstep+1))*(Npilotstep+1); + rx_pilot_buf(2) = symbpilot_rx(next_pilot_index); + + % average pilot symbols to get estimate of phase + + phase_est = angle(sum(rx_pilot_buf)); + + %printf("next_pilot_index: %d phase_est: %f\n", next_pilot_index, phase_est); + + % now correct the phase of each symbol + + for s=ns:ns+Npilotstep + symbpilot_rx(s) *= exp(-j*phase_est); + end + end + + aqpsk.rx_pilot_buf = rx_pilot_buf; +endfunction + + +% builds up a sparse QPSK modulated version version of the UW for use +% in UW sync at the rx + +function mod_uw = build_mod_uw(uw, spacing) + luw = length(uw); + + mod_uw = []; + + pout = 1; puw = 1; + while (luw) + %printf("pin %d pout %d puw %d luw %d\n", pin, pout, puw, luw); + pout += spacing/2; + mod_uw(pout) = qpsk_mod(uw(puw:puw+1)); + puw += 2; + pout += 1; + luw -= 2; + end +endfunction + + +% Uses the UW to determine when we have a full codeword ready for decoding + +function [found_uw corr] = look_for_uw(mem_rx_symbols, mod_uw) + sparse_mem_rx_symbols = mem_rx_symbols(find(mod_uw)); + + % correlate with ref UW + + num = (mem_rx_symbols * mod_uw') .^ 2; + den = (sparse_mem_rx_symbols * sparse_mem_rx_symbols') * (mod_uw * mod_uw'); + + corr = abs(num/(den+1E-6)); + found_uw = corr > 0.8; +endfunction + diff --git a/libcodec2-android/src/codec2/octave/rf_bpf.m b/libcodec2-android/src/codec2/octave/rf_bpf.m new file mode 100644 index 0000000..db3a4d6 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/rf_bpf.m @@ -0,0 +1,37 @@ +% rtlsdr_bpf.m +% +% David Rowe 24 August 2018 +% +% Calculate component values for cascaded HP-LP 2-8 MHz Chebychev filter +% +% From "RF Circuit Design", Chris Bowick, Ch 3 + +1; + +function C = find_C(Cn, fc, R) + C = Cn/(2*pi*fc*R); +endfunction + +function L = find_L(Ln, fc, R) + L = R*Ln/(2*pi*fc); +endfunction + +% 3rd order HP filter, 1dB ripple Cheby, 3MHz cut off, >20dB down at +% 1MHz to nail stong AM broadcast signals, Table 3-7A. Use a Rs=50, +% Rl=50, so Rs/Rl = 1. Note we assume a or phantom load in between +% cascaded HP-LP sections of 50 ohms. + +L1 = find_L(1/2.216, 3E6, 50); +C1 = find_C(1/1.088, 3E6, 50); +L2 = find_L(1/2.216, 3E6, 50); + +printf("L1: %f uH C1: %f pF L2: %f uH\n", L1*1E6, C1*1E12, L2*1E6); + +% 3rd order LPF, 8MHz cut off so >30dB down at 21MHz, which aliases back to 7MHz +% with Fs=28MHz on RTLSDR (14 MHz Nyquist freq). Rs=50, Rl=50, Rs/Rl = 1 + +C2 = find_C(2.216, 9E6, 50); +L3 = find_L(1.088, 9E6, 50); +C3 = find_C(2.216, 9E6, 50); + +printf("C2: %f pF L3: %f uH C3: %f pF\n", C2*1E12, L3*1E6, C3*1E12); diff --git a/libcodec2-android/src/codec2/octave/rf_design.m b/libcodec2-android/src/codec2/octave/rf_design.m new file mode 100644 index 0000000..bc75b6e --- /dev/null +++ b/libcodec2-android/src/codec2/octave/rf_design.m @@ -0,0 +1,77 @@ +% rfdesign.m +% +% David Rowe Nov 2015 +% +% Helper functions for RF Design + +1; + + +% convert a parallel R/X to a series R/X + +function Zs = zp_to_zs(Zp) + Xp = j*imag(Zp); Rp = real(Zp); + Zs = Xp*Rp/(Xp+Rp); +endfunction + + +% convert a series R/X to a parallel R/X + +function Zp = zs_to_zp(Zs) + Xs = imag(Zs); Rs = real(Zs); + Q = Xs/Rs; + Rp = (Q*Q+1)*Rs; + Xp = Rp/Q; + Zp = Rp + j*Xp; +endfunction + + +% Design a Z match network with a parallel and series reactance +% to match between a low and high resistance. Note Xp and Xs +% must be implemented as opposite sign, ie one a inductor, one +% a capacitor (your choice). +% +% /--Xs--+---\ +% | | | +% Rlow Xp Rhigh +% | | | +% \------+---/ +% + +function [Xs Xp] = z_match(Rlow, Rhigh) + assert(Rlow < Rhigh, "Rlow must be < Rhigh"); + Q = sqrt(Rhigh/Rlow -1); + Xs = Q*Rlow; + Xp = Rhigh/Q; +endfunction + + +% Design an air core inductor, Example 1-5 "RF Circuit Design" + +function Nturns = design_inductor(L_uH, diameter_mm) + Nturns = sqrt(29*L_uH/(0.394*(diameter_mm*0.1/2))); +endfunction + + +% Work out series resistance Rl of series resonant inductor. Connect +% tracking generator to spec-an input, the series LC to ground. V is +% the ref TG level (e.g. with perfect 50 ohm term) in volts, Vmin is the +% minumum at series res freq. +% +% /-50-+---+ +% | | | +% TG C 50 spec-an +% | | | +% | L | +% | | | +% | Rl | +% | | | +% \----+---/ + +function Rl = find_rl(V,Vmin) + % at series resonance effect of C and L goes away and we are left with + % parallel combination of Ls and spec-an 50 ohm input impedance + + Rp = Vmin*50/(2*V*(1-Vmin/(2*V))); + Rl = 1/(1/Rp - 1/50) +endfunction diff --git a/libcodec2-android/src/codec2/octave/rf_vhf_amp.m b/libcodec2-android/src/codec2/octave/rf_vhf_amp.m new file mode 100644 index 0000000..8c5186a --- /dev/null +++ b/libcodec2-android/src/codec2/octave/rf_vhf_amp.m @@ -0,0 +1,206 @@ +% s_param_rf.m +% +% David Rowe Nov 2015 +% +% Working for small signal VHF amplifier design using +% S-param techniques from "RF Circuit Design" by Chris Bowick + +rfdesign; % library of helped functions + +more off; + +Ic = 0.014; + +% BRF92 VCE=5V Ic=5mA 100MHz + +if Ic == 0.005 + S11 = 0.727*exp(j*(-43)*pi/180); + S12 = 0.028*exp(j*(69.6)*pi/180); + S21 = 12.49*exp(j*(147)*pi/180); + S22 = 0.891*exp(j*(-16)*pi/180); +end + +% BRF92 VCE=10V Ic=14mA 100MHz + +if Ic == 0.02 + S11 = 0.548*exp(j*(-56.8)*pi/180); + S12 = 0.020*exp(j*(67.8)*pi/180); + S21 = 20.43*exp(j*(133.7)*pi/180); + S22 = 0.796*exp(j*(-18.5)*pi/180); +end + +% Stability + +Ds = S11*S22-S12*S21; +Knum = 1 + abs(Ds)^2 - abs(S11)^2 - abs(S22)^2; +Kden = 2*abs(S21)*abs(S12); +K = Knum/Kden % If > 1 unconditionally stable + % If < 1 panic +figure(1); +clf +scCreate; + +if K < 1 + C1 = S11 - Ds*conj(S22); + C2 = S22 - Ds*conj(S11); + rs1 = conj(C1)/(abs(S11)^2-abs(Ds)^2); % centre of input stability circle + ps1 = abs(S12*S21/(abs(S11)^2-abs(Ds)^2)); % radius of input stability circle + rs2 = conj(C2)/(abs(S22)^2-abs(Ds)^2); % centre of input stability circle + ps2 = abs(S12*S21/(abs(S22)^2-abs(Ds)^2)); % radius of input stability circle + + s(1,1)=S11; s(1,2)=S12; s(2,1)=S21; s(2,2)=S22; + plotStabilityCircles(s) +end + +% Gain circle + +D2 = abs(S22)^2-abs(Ds)^2; +C2 = S22 - Ds*conj(S11); +GdB = 20; Glin = 10^(GdB/10); % lets shoot for 20dB gain +G = Glin/(abs(S21)^2); +r0 = G*conj(C2)/(1+D2*G); % centre of gain circle +p0 = sqrt(1 - 2*K*abs(S12*S21)*G + (abs(S12*S21)^2)*(G^2))/(1+D2*G); % radius of gain circle + +scAddCircle(abs(r0),angle(r0)*180/pi,p0,'g') +printf("Green is the %3.1f dB constant gain circle for gammaL\n",GdB); + +% Note different design procedures for different operating points + +if Ic == 0.005 + % Choose a gammaL on the gain circle + + gammaL = 0.8 - 0.4*j; + + % Caclulate gammaS and make sure it's stable by visual inspection + % compared to stability circle. + + gammaS = conj(S11 + ((S12*S21*gammaL)/(1 - (gammaL*S22)))); +end + +if Ic == 0.014 + + % lets set zo (normalised Zo) based on Pout and get gammaL from that + + Pout = 0.01; + Irms = 0.002; + Zo = Pout/(Irms*Irms); + zo = Zo/50; + [magL,angleL] = ztog(zo); + gammaL = magL*exp(j*angleL*pi/180); + + % calculate gammaS + + gammaS = conj(S11 + ((S12*S21*gammaL)/(1 - (gammaL*S22)))); + +end + +[zo Zo] = gtoz(abs(gammaL), angle(gammaL)*180/pi,50); +[zi Zi] = gtoz(abs(gammaS), angle(gammaS)*180/pi,50); + +scAddPoint(zi); +scAddPoint(zo); + +% Transducer gain + +Gt_num = (abs(S21)^2)*(1-abs(gammaS)^2)*(1-abs(gammaL)^2); +Gt_den = abs((1-S11*gammaS)*(1-S22*gammaL) - S12*S21*gammaL*gammaS)^2; +Gt = Gt_num/Gt_den; + +if Ic == 0.005 + + % Lets design the z match for the input ------------------------------ + + % put input impedance in parallel form + + Zip = zs_to_zp(Zi); + + % first match real part of impedance + + Rs = 50; Rl = real(Zip); + [Xs Xp] = z_match(Rs,Rl); + + % Modify Xp so transistor input sees conjugate match to Zi + % Lets make Xp a capacitor, so negative sign + + Xp_match = -Xp - imag(Zip); + + % Now convert to real component values + + w = 2*pi*150E6; + Ls = Xs/w; diameter_mm = 6.25; + Ls_turns = design_inductor(Ls*1E6, diameter_mm); + Cp = 1/(w*(-Xp_match)); + + printf("Transducer gain: %3.1f dB\n", 10*log10(Gt)); + printf("Input: Zi = %3.1f + %3.1fj ohms\n", real(Zi), imag(Zi)); + printf(" In parallel form Rp = %3.1f Xp = %3.1fj ohms\n", real(Zip), imag(Zip)); + printf(" So for a conjugate match transistor input wants to see:\n Rp = %3.1f Xp = %3.1fj ohms\n", real(Zip), -imag(Zip)); + printf(" Rs = %3.1f to Rl = %3.1f ohm matching network Xs = %3.1fj Xp = %3.1fj\n", Rs, Rl, Xs, Xp); + printf(" with conj match to Zi Xs = %3.1fj Xp = %3.1fj\n", Xs, Xp_match); + printf(" matching components Ls = %5.3f uH Cp = %4.1f pF\n", Ls*1E6, Cp*1E12); + printf(" Ls can be made from %3.1f turns on a %4.2f mm diameter air core\n", Ls_turns, diameter_mm); + + % Now Z match for output ------------------------------------- + + Lo = -imag(Zo)/w; + Lo_turns = design_inductor(Lo*1E6, diameter_mm); + printf("Output: Zo = %3.1f + %3.1fj ohms\n", real(Zo), imag(Zo)); + printf(" So for a conjugate match transistor output wants to see:\n Rl = %3.1f Xl = %3.1fj ohms\n", real(Zo), -imag(Zo)); + printf(" Which is a series inductor Lo = %5.3f uH\n", Lo*1E6); + printf(" Lo can be made from %3.1f turns on a %4.2f mm diameter air core\n", Lo_turns, diameter_mm); +end + + +if Ic == 0.014 + printf("Transducer gain: %3.1f dB\n", 10*log10(Gt)); + + % Lets design the z match for the input ------------------------------ + + % put input impedance in parallel form + + Zip = zs_to_zp(Zi); + + % first match real part of impedance + + Rs = 50; Rl = real(Zip); + [Xs Xp] = z_match(Rl,Rs); + + % Lets make Xs a capacitir to block DC, so Xp is an inductor. + % Modify Xs so transistor input sees conjugate match to Zi. Xs is a + % capacitor, so reactance is negative + + Xs_match = -Xs - imag(Zip); + + % Now convert to real component values + + w = 2*pi*150E6; diameter_mm = 6.25; + Li = Xp/w; + Li_turns = design_inductor(Li*1E6, diameter_mm); + Ci = 1/(w*(-Xs_match)); + + printf("Input: Zi = %3.1f + %3.1fj ohms\n", real(Zi), imag(Zi)); + printf(" In parallel form Rp = %3.1f Xp = %3.1fj ohms\n", real(Zip), imag(Zip)); + printf(" So for a conjugate match transistor input wants to see:\n Rp = %3.1f Xp = %3.1fj ohms\n", real(Zip), -imag(Zip)); + printf(" Rs = %3.1f to Rl = %3.1f ohm matching network Xs = %3.1fj Xp = %3.1fj\n", Rs, Rl, Xs, Xp); + printf(" with Xs a capacitor, and Xp and inductor Xs = %3.1fj Xp = %3.1fj\n", -Xs, Xp); + printf(" With a conj match to Zi Xs = %3.1fj Xp = %3.1fj\n", Xs_match, Xp); + printf(" matching components Li = %5.3f uH Ci = %4.1f pF\n", Li*1E6, Ci*1E12); + printf(" Li can be made from %3.1f turns on a %4.2f mm diameter air core\n", Li_turns, diameter_mm); + + % Design output Z match ---------------------------------------------- + + Rs = real(Zo); Rl = 50; + [Xs Xp] = z_match(Rl,Rs); + + % Lets make XP an inductor so it can double as a RF choke, and Xp as + % a capacitor will give us a convenient DC block + + w = 2*pi*150E6; diameter_mm = 6.25; + Lo = Xp/w; Lo_turns = design_inductor(Lo*1E6, diameter_mm); + Co = 1/(w*Xs); + printf("Output: Zo = %3.1f + %3.1fj ohms\n", real(Zo), imag(Zo)); + printf(" matching network Xp = %3.1f X = %3.1f ohms\n", Xp, Xs); + printf(" which is parallel Lo = %5.3f uH and series Co = %4.1f pF\n", Lo*1E6, Co*1E12); + printf(" Lo can be made from %3.1f turns on a %4.2f mm diameter air core\n", Lo_turns, diameter_mm); +end + diff --git a/libcodec2-android/src/codec2/octave/rf_vhf_pa.m b/libcodec2-android/src/codec2/octave/rf_vhf_pa.m new file mode 100644 index 0000000..4b5486f --- /dev/null +++ b/libcodec2-android/src/codec2/octave/rf_vhf_pa.m @@ -0,0 +1,111 @@ +% vhf_pa.m +% +% David Rowe Dec 2015 +% +% Working for 0.5W VHF PA + +rfdesign; + +% BFQ19 Vce=5V Ic=50mA. These are small signal S-params, +% which (according to "RF Cicruit Design") are not valid. +% However I need to start somewhere. + +S11 = 0.324*exp(j*(-158.1)*pi/180); +S12 = 0.031*exp(j*(75.9)*pi/180); +S21 = 19.693*exp(j*(102.7)*pi/180); +S22 = 0.274*exp(j*(-74.6)*pi/180); + +% Lets check stability + +Ds = S11*S22-S12*S21; +Knum = 1 + abs(Ds)^2 - abs(S11)^2 - abs(S22)^2; +Kden = 2*abs(S21)*abs(S12); +K = Knum/Kden +figure(1); +clf +scCreate; + +if K < 1 + C1 = S11 - Ds*conj(S22); + C2 = S22 - Ds*conj(S11); + rs1 = conj(C1)/(abs(S11)^2-abs(Ds)^2); % centre of input stability circle + ps1 = abs(S12*S21/(abs(S11)^2-abs(Ds)^2)); % radius of input stability circle + rs2 = conj(C2)/(abs(S22)^2-abs(Ds)^2); % centre of input stability circle + ps2 = abs(S12*S21/(abs(S22)^2-abs(Ds)^2)); % radius of input stability circle + + s(1,1)=S11; s(1,2)=S12; s(2,1)=S21; s(2,2)=S22; + plotStabilityCircles(s) +end + + +% determine collector load Rl for our desired power output + +if 0 +P = 0.5; +Vcc = 5; +w = 2*pi*150E6; + +Rl = Vcc*Vcc/(2*P); +end +Rl = 10; + +% choose gammaL based on Rl + +zo = Rl/50; +[magL,angleL] = ztog(zo); +gammaL = magL*exp(j*angleL*pi/180); + +% calculate gammaS and Zi and plot + +gammaS = conj(S11 + ((S12*S21*gammaL)/(1 - (gammaL*S22)))); +[zi Zi] = gtoz(abs(gammaS), angle(gammaS)*180/pi,50); + +scAddPoint(zi); +scAddPoint(zo); + +% design Pi network for matching Rl to Ro, where Ro > Rl +% +% /---+-Xs1-Xs2-+---\ +% | | | | +% Rl Xp1 Xp2 Ro +% | | | | +% \---+---------+---/ +% +% highest impedance used to define Q of pi network and determine R, +% the "virtual" impedance at the centre of the network, whuch is smaller +% than Rl and Ro + +Ro = 50; +Q = 3; +R = Ro/(Q*Q+1); + +Xp2 = Ro/Q; +Xs2 = Q*R; + +Q1 = sqrt(Rl/R - 1); +Xp1 = Rl/Q1; +Xs1 = Q1*R; + +Cp1 = 1/(w*Xp1); +Cp2 = 1/(w*Xp2); +Ls = (Xs1+Xs2)/w; + +printf("Output Matching:\n"); +printf(" Rl = %3.1f Ro = %3.1f\n", Rl, Ro); +printf(" Q = %3.1f virtual R = %3.1f\n", Q, R); +printf(" Xp1 = %3.1f Xs1 = %3.1f Xs2 = %3.1f Xp2 = %3.1f\n", Xp1, Xs1, Xs2, Xp2); +printf(" Cp1 = %3.1f pF Ls = %3.1f nH Cp2 = %3.1f pF\n", Cp1*1E12, Ls*1E9, Cp2*1E12); + +% design input matching network between 50 ohms source and 10 ohms at base + +Rb = 10; Rs = 50; + +[Xs Xp] = z_match(Rb, Rs); + +Lp = Xp/w; +Cs = 1/(w*Xs); + +printf("Input Matching:\n"); +printf(" Xs = %3.1f Xp = %3.1f\n", Xs, Xp); +printf(" Lp = %3.1f nH Cs = %3.1f pF\n", Lp*1E9, Cs*1E12); + diff --git a/libcodec2-android/src/codec2/octave/sample_clock_offset.m b/libcodec2-android/src/codec2/octave/sample_clock_offset.m new file mode 100644 index 0000000..5169178 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/sample_clock_offset.m @@ -0,0 +1,21 @@ +% sample_clock_offset.m +% +% David Rowe June 2017 +% +% To simulate a sample clock offset we resample by a small amount +% using linear interpolation + +function rx = sample_clock_offset(tx, sample_clock_offset_ppm) + tin=1; + tout=1; + rx = zeros(1,length(tx)); + while tin < length(tx) + t1 = floor(tin); + t2 = ceil(tin); + f = tin - t1; + rx(tout) = (1-f)*tx(t1) + f*tx(t2); + tout += 1; + tin += 1+sample_clock_offset_ppm/1E6; + end +end + diff --git a/libcodec2-android/src/codec2/octave/save_array_c_header.m b/libcodec2-android/src/codec2/octave/save_array_c_header.m new file mode 100644 index 0000000..0a6800d --- /dev/null +++ b/libcodec2-android/src/codec2/octave/save_array_c_header.m @@ -0,0 +1,14 @@ +% save_array_c_header.m +% +% David Rowe Sep 2015 + +function save_array_c_header(array, array_name, filename) + f=fopen(filename,"wt"); + fprintf(f,"/* Generated by save_array_c_header.m Octave function */\n\n"); + fprintf(f,"const int %s[]={\n", array_name); + for m=1:length(array)-1 + fprintf(f," %f,\n",array(m)); + endfor + fprintf(f," %f\n};\n",array(length(array))); + fclose(f); +endfunction diff --git a/libcodec2-android/src/codec2/octave/save_comp.m b/libcodec2-android/src/codec2/octave/save_comp.m new file mode 100644 index 0000000..b8e663f --- /dev/null +++ b/libcodec2-android/src/codec2/octave/save_comp.m @@ -0,0 +1,12 @@ +% save_comp.m +% David Rowe Aug 2020 + +function save_comp(fn, iq) + l = length(iq); + s = zeros(1,2*l); + s(1:2:2*l) = real(iq); + s(2:2:2*l) = imag(iq); + fs=fopen(fn,"wb"); + s = fwrite(fs,s,"float32"); + fclose(fs); +endfunction diff --git a/libcodec2-android/src/codec2/octave/save_hackrf.m b/libcodec2-android/src/codec2/octave/save_hackrf.m new file mode 100644 index 0000000..5dda704 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/save_hackrf.m @@ -0,0 +1,13 @@ +% save_hackrf.m +% +% David Rowe Aug 2020 + +function save_hackrf(fn,iq) + l = length(iq); + s = zeros(1,2*l); + s(1:2:2*l) = real(iq); + s(2:2:2*l) = imag(iq); + fs = fopen(fn,"wb"); + fwrite(fs,s,"schar"); + fclose(fs); +endfunction diff --git a/libcodec2-android/src/codec2/octave/save_raw.m b/libcodec2-android/src/codec2/octave/save_raw.m new file mode 100644 index 0000000..7f17277 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/save_raw.m @@ -0,0 +1,7 @@ +% save_raw.m +% David Rowe 9 Feb 2015 + +function s = save_raw(fn,s) + fs=fopen(fn,"wb"); + fwrite(fs,s,"short"); +endfunction diff --git a/libcodec2-android/src/codec2/octave/spec.m b/libcodec2-android/src/codec2/octave/spec.m new file mode 100644 index 0000000..d556b90 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/spec.m @@ -0,0 +1,86 @@ +% spec.m +% Jean Marc Valin +% +% Spectrogram function for Octave +% +% Copyright (c) John-Marc Valin 2012 +% +% Redistribution and use in source and binary forms, with or without +% modification, are permitted provided that the following conditions +% are met: +% +% - Redistributions of source code must retain the above copyright +% notice, this list of conditions and the following disclaimer. +% +% - Redistributions in binary form must reproduce the above copyright +% notice, this list of conditions and the following disclaimer in the +% documentation and/or other materials provided with the distribution. +% +% - Neither the name of Jean Marc Valin nor the names of its +% contributors may be used to endorse or promote products derived from +% this software without specific prior written permission. +% +% THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +% ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +% LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +% A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR +% CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +% EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +% PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +% PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +% LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +% NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +% SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +function X = spec(x, Fs, framesize, start, stop) + + +gr=[zeros(1024,1),[0:1023]'/1023,.68*[0:1023]'/1023]; + +%gr=[.4*[0:1023]'/1023,[0:1023]'/1023,.68*[0:1023]'/1023]; + +%t=[0:1023]'/1023; +%t=(1+.25*t-cos(pi*t))/2.25; +%gr = [zeros(1024,1),t,.68*t]; + + +%colormap(gr); + +if nargin < 2 || isempty(Fs) + Fs = 44100; +end + +if nargin < 3 || isempty(framesize) + framesize = 2048; +endif + +offset = framesize/8; + +X = 20*log10(abs(specgram(x, framesize, 48000, blackmanharris(framesize)', framesize-offset))); + +XM=max(max(X)); +X = max(XM-30,X); +%size(X) +F = -[framesize/2-1:-1:0]/framesize*Fs; +%F = [0:127]/128*24000; +T=[1:size(X,2)]/Fs*offset; +%imagesc(X(end:-1:1,:)); + +if nargin < 4 || isempty(start) + istart=1; +else + istart = round(start*Fs/offset); +end + +if nargin < 5 || isempty(stop) + istop = size(X,2); +else + istop = round(stop*Fs/offset); +endif + +istart = max(1,istart); +istop = min(istop, size(X,2)); + +imagesc(T(1+istart:istop), F, X(end:-1:1,1+istart:istop)); + +X = X(:,1+istart:istop); diff --git a/libcodec2-android/src/codec2/octave/tcohpsk.m b/libcodec2-android/src/codec2/octave/tcohpsk.m new file mode 100644 index 0000000..8a42acd --- /dev/null +++ b/libcodec2-android/src/codec2/octave/tcohpsk.m @@ -0,0 +1,743 @@ +% tcohpsk.m +% David Rowe Oct 2014 +% +% Octave coherent PSK modem script that hs two modes: +% +% i) tests the C port of the coherent PSK modem. This script loads +% the output of unittest/tcohpsk.c and compares it to the output of +% the reference versions of the same modem written in Octave. +% + +% (ii) Runs the Octave version of the cohpsk modem to tune and develop +% it, including extensive channel simulations such as AWGN noise, +% fading/HF, frequency offset, frequency drift, and tx/rx sample +% rate differences. + +% TODO: +% +% [X] Test +% [X] AWGN channel +% [X] freq offset +% [X] fading channel +% [X] freq drift +% [X] timing drift +% [X] tune perf/impl loss to get closer to ideal +% [X] linear interp of phase for better fading perf +% [X] freq offset/drift feedback loop +% [X] PAPR measurement and reduction +% [X] false sync +% [X] doesn't sync up on noise (used EsNo = -12) +% [X] similar but invalid signal like huge f off +% [X] ability to "unsync" when signal dissapears +% [ ] some calibrated tests against FreeDV 1600 +% + compare sound quality at various Es/Nos +% [ ] sync +% + set some req & implement +% [ ] way to handle eom w/o nasties +% + like mute ouput when signal has gone or v low snr +% + instantaneous snr +% [X] ssb tx filter with 3dB passband ripple +% + diverisity helped for AWGN BER 0.024 down to 0.016 +% + Only a small change in fading perf with filter on/off +% + however other filters may have other effects, should test this, +% e.g. scatter plots, some sort of BER metric? +% [X] EsNo estimation +% [ ] filter reqd with compression? +% + make sure not too much noise passed into noise floor +% [X] different diversity combination +% + taking largest symbol didn't help +% [X] histogram of bit errors +% + lot of data +% + ssb filter +% + compression +% + make sure it's flat with many errors + +pkg load signal; +more off; + +global passes = 0; +global fails = 0; + +cohpsk_dev; +fdmdv_common; +autotest; + +rand('state',1); +randn('state',1); + +% select which test ---------------------------------------------------------- + +test = 'compare to c'; +%test = 'awgn'; +%test = 'fading'; + +% some parameters that can be over ridden, e.g. to disable parts of modem + +initial_sync = 0; % setting this to 1 put us straight into sync w/o freq offset est +ftrack_en = 1; % set to 1 to enable freq tracking +ssb_tx_filt = 0; % set to 1 to to simulate SSB tx filter with passband ripple +Fs = 7500; + +% predefined tests .... + +if strcmp(test, 'compare to c') + frames = 30; + foff = 58.7; + dfoff = -0.5/Fs; + EsNodB = 8; + fading_en = 0; + hf_delay_ms = 2; + compare_with_c = 1; + sample_rate_ppm = -1500; + ssb_tx_filt = 0; +end + +% should be BER around 0.015 to 0.02 + +if strcmp(test, 'awgn') + frames = 100; + foff = 58.7; + dfoff = -0.5/Fs; + EsNodB = 8; + fading_en = 0; + hf_delay_ms = 2; + compare_with_c = 0; + sample_rate_ppm = 0; +end + +% Similar to AWGN - should be BER around 0.015 to 0.02 + +if strcmp(test, 'fading'); + frames = 100; + foff = -25; + dfoff = 0.5/Fs; + EsNodB = 12; + fading_en = 1; + hf_delay_ms = 2; + compare_with_c = 0; + sample_rate_ppm = 0; +end + +EsNo = 10^(EsNodB/10); + +% modem constants ---------------------------------------------------------- + +Rs = 75; % symbol rate in Hz +Nc = 7; % number of carriers +Nd = 2; % diveristy factor +framesize = 56; % number of payload data bits in the frame + +Nsw = 4; % frames we demod for initial sync window +afdmdv.Nsym = 6; % size of tx/tx root nyquist filter in symbols +afdmdv.Nt = 5; % number of symbols we estimate timing over + +clip = 6.5; % Clipping of tx signal to reduce PAPR. Adjust by + % experiment as Nc and Nd change. Check out no noise + % scatter diagram and AWGN/fading BER perf + % at operating points + +% FDMDV init --------------------------------------------------------------- + +afdmdv.Fs = Fs; +afdmdv.Nc = Nd*Nc-1; +afdmdv.Rs = Rs; + +if Fs/afdmdv.Rs != floor(Fs/afdmdv.Rs) + printf("\n Oops, Fs/Rs must be an integer!\n\n"); + return +end + +M = afdmdv.M = afdmdv.Fs/afdmdv.Rs; +afdmdv.Nfilter = afdmdv.Nsym*M; +afdmdv.tx_filter_memory = zeros(afdmdv.Nc+1, afdmdv.Nfilter); +excess_bw = 0.5; +afdmdv.gt_alpha5_root = gen_rn_coeffs(excess_bw, 1/Fs, Rs, afdmdv.Nsym, afdmdv.M); + +Fcentre = afdmdv.Fcentre = 1500; +afdmdv.Fsep = afdmdv.Rs*(1+excess_bw); +afdmdv.phase_tx = ones(afdmdv.Nc+1,1); + +% non linear carrier spacing, combined with clip, helps PAPR a lot! + +freq_hz = afdmdv.Fsep*( -Nc*Nd/2 - 0.5 + (1:Nc*Nd).^0.98 ); +afdmdv.freq_pol = 2*pi*freq_hz/Fs; +afdmdv.freq = exp(j*afdmdv.freq_pol); +afdmdv.Fcentre = 1500; + +afdmdv.fbb_rect = exp(j*2*pi*Fcentre/Fs); +afdmdv.fbb_phase_tx = 1; +afdmdv.fbb_phase_rx = 1; + +afdmdv.Nrxdec = 31; +afdmdv.rxdec_coeff = fir1(afdmdv.Nrxdec-1, 0.25)'; +afdmdv.rxdec_lpf_mem = zeros(1,afdmdv.Nrxdec-1+afdmdv.M); + +P = afdmdv.P = 4; +afdmdv.phase_rx = ones(afdmdv.Nc+1,1); +afdmdv.Nfilter = afdmdv.Nsym*afdmdv.M; +afdmdv.rx_fdm_mem = zeros(1,afdmdv.Nfilter + afdmdv.M); +Q = afdmdv.Q = afdmdv.M/4; +if Q != floor(Q) + printf("\n Yeah .... if (Fs/Rs)/4 = M/4 isn't an integer we will just go and break things.\n\n"); +end + +afdmdv.rx_filter_mem_timing = zeros(afdmdv.Nc+1, afdmdv.Nt*afdmdv.P); +afdmdv.Nfiltertiming = afdmdv.M + afdmdv.Nfilter + afdmdv.M; + +afdmdv.rx_filter_memory = zeros(afdmdv.Nc+1, afdmdv.Nfilter); + +afdmdv.filt = 0; +afdmdv.prev_rx_symb = ones(1,afdmdv.Nc+1); + +% COHPSK Init -------------------------------------------------------- + +acohpsk = standard_init(); +acohpsk.framesize = framesize; +acohpsk.ldpc_code = 0; +acohpsk.ldpc_code_rate = 1; +acohpsk.Nc = Nc; +acohpsk.Rs = Rs; +acohpsk.Ns = 4; +acohpsk.coh_en = 1; +acohpsk.Nd = Nd; +acohpsk.modulation = 'qpsk'; +acohpsk.do_write_pilot_file = 1; % enable this to dump pilot symbols to C .h file, e.g. if frame params change +acohpsk = symbol_rate_init(acohpsk); +acohpsk.Ndft = 1024; +acohpsk.f_est = afdmdv.Fcentre; + +ch_fdm_frame_buf = zeros(1, Nsw*acohpsk.Nsymbrowpilot*afdmdv.M); + +% ----------------------------------------------------------- + +tx_bits_log = []; +tx_symb_log = []; +rx_amp_log = []; +rx_phi_log = []; +ch_symb_log = []; +rx_symb_log = []; +rx_bits_log = []; +tx_bits_prev_log = []; +uvnoise_log = []; +nerr_log = []; +tx_baseband_log = []; +tx_fdm_frame_log = []; +ch_fdm_frame_log = []; +rx_fdm_frame_bb_log = []; +rx_filt_log = []; +rx_fdm_filter_log = []; +rx_baseband_log = []; +rx_fdm_frame_log = []; +ct_symb_ff_log = []; +rx_timing_log = []; +ratio_log = []; +foff_log = []; +f_est_log = []; +sig_rms_log = []; +noise_rms_log = []; +noise_rms_filt_log = []; + +% Channel modeling and BER measurement ---------------------------------------- + +rand('state',1); +tx_bits_coh = round(rand(1,framesize*10)); +ptx_bits_coh = 1; + +Nerrs = Tbits = 0; +prev_tx_bits = prev_tx_bits2 = []; +error_positions_hist = zeros(1,framesize); + +phase_ch = 1; +sync = initial_sync; +acohpsk.f_est = Fcentre; +acohpsk.f_fine_est = 0; +acohpsk.ct = 4; +acohpsk.ftrack_en = ftrack_en; + +[spread spread_2ms hf_gain] = init_hf_model(Fs, frames*acohpsk.Nsymbrowpilot*afdmdv.M); +hf_n = 1; +nhfdelay = floor(hf_delay_ms*Fs/1000); +ch_fdm_delay = zeros(1, acohpsk.Nsymbrowpilot*M + nhfdelay); + +% simulated SSB tx filter + +[b, a] = cheby1(4, 3, [600, 2600]/(Fs/2)); +[y filt_states] = filter(b,a,0); +h = freqz(b,a,(600:2600)/(Fs/(2*pi))); +filt_gain = (2600-600)/sum(abs(h) .^ 2); % ensures power after filter == before filter + +noise_rms_filt = 0; + +% main loop -------------------------------------------------------------------- + +% run mod and channel as aseparate loop so we can resample to simulate sample rate differences + +for f=1:frames + tx_bits = tx_bits_coh(ptx_bits_coh:ptx_bits_coh+framesize-1); + ptx_bits_coh += framesize; + if ptx_bits_coh > length(tx_bits_coh) + ptx_bits_coh = 1; + end + + tx_bits_log = [tx_bits_log tx_bits]; + + [tx_symb tx_bits] = bits_to_qpsk_symbols(acohpsk, tx_bits, [], []); + tx_symb_log = [tx_symb_log; tx_symb]; + + tx_fdm_frame = []; + for r=1:acohpsk.Nsymbrowpilot + tx_onesymb = tx_symb(r,:); + [tx_baseband afdmdv] = tx_filter(afdmdv, tx_onesymb); + tx_baseband_log = [tx_baseband_log tx_baseband]; + [tx_fdm afdmdv] = fdm_upconvert(afdmdv, tx_baseband); + tx_fdm_frame = [tx_fdm_frame tx_fdm]; + end + + % clipping, which along with non-linear carrier spacing, improves PAPR + % The value of clip is a function of Nc and is adjusted experimentally + % such that the BER hit over no clipping at Es/No=8dB is small. + + ind = find(abs(tx_fdm_frame) > clip); + tx_fdm_frame(ind) = clip*exp(j*angle(tx_fdm_frame(ind))); + + tx_fdm_frame_log = [tx_fdm_frame_log tx_fdm_frame]; + + % + % Channel -------------------------------------------------------------------- + % + + % simulate tx SSB filter with ripple + + if ssb_tx_filt + [tx_fdm_frame filt_states] = filter(b,a,sqrt(filt_gain)*tx_fdm_frame, filt_states); + end + + % frequency offset and frequency drift + + ch_fdm_frame = zeros(1,acohpsk.Nsymbrowpilot*M); + for i=1:acohpsk.Nsymbrowpilot*M + foff_rect = exp(j*2*pi*foff/Fs); + foff += dfoff; + phase_ch *= foff_rect; + ch_fdm_frame(i) = tx_fdm_frame(i) * phase_ch; + end + foff_log = [foff_log foff]; + phase_ch /= abs(phase_ch); + + % optional fading + + if fading_en + ch_fdm_delay(1:nhfdelay) = ch_fdm_delay(acohpsk.Nsymbrowpilot*M+1:nhfdelay+acohpsk.Nsymbrowpilot*M); + ch_fdm_delay(nhfdelay+1:nhfdelay+acohpsk.Nsymbrowpilot*M) = ch_fdm_frame; + + for i=1:acohpsk.Nsymbrowpilot*M + ahf_model = hf_gain*(spread(hf_n)*ch_fdm_frame(i) + spread_2ms(hf_n)*ch_fdm_delay(i)); + ch_fdm_frame(i) = ahf_model; + hf_n++; + end + end + + % each carrier has power = 2, total power 2Nc, total symbol rate NcRs, noise BW B=Fs + % Es/No = (C/Rs)/(N/B), N = var = 2NcFs/NcRs(Es/No) = 2Fs/Rs(Es/No) + + variance = 2*Fs/(acohpsk.Rs*EsNo); + uvnoise = sqrt(0.5)*(randn(1,acohpsk.Nsymbrowpilot*M) + j*randn(1,acohpsk.Nsymbrowpilot*M)); + uvnoise_log = [uvnoise_log uvnoise]; + noise = sqrt(variance)*uvnoise; + + ch_fdm_frame += noise; + + ch_fdm_frame_log = [ch_fdm_frame_log ch_fdm_frame]; +end + +% simulate difference in sample clocks + +tin=1; +tout=1; +ch_fdm_frame_log_out = zeros(1,length(ch_fdm_frame_log)); +while tin < length(ch_fdm_frame_log) + t1 = floor(tin); + t2 = ceil(tin); + f = tin - t1; + ch_fdm_frame_log_out(tout) = (1-f)*ch_fdm_frame_log(t1) + f*ch_fdm_frame_log(t2); + tout += 1; + tin += 1+sample_rate_ppm/1E6; +end +ch_fdm_frame_log = ch_fdm_frame_log_out(1:tout-1); + +% Now run demod ---------------------------------------------------------------- + +ch_fdm_frame_log_index = 1; +nin = M; +f = 0; +nin_frame = acohpsk.Nsymbrowpilot*M; + +%while (ch_fdm_frame_log_index + acohpsk.Nsymbrowpilot*M+M/P) < length(ch_fdm_frame_log) +for f=1:frames; + acohpsk.frame = f; + + ch_fdm_frame = ch_fdm_frame_log(ch_fdm_frame_log_index:ch_fdm_frame_log_index + nin_frame - 1); + ch_fdm_frame_log_index += nin_frame; + + % + % Demod ---------------------------------------------------------------------- + % + + % store two frames of received samples so we can rewind if we get a good candidate + + ch_fdm_frame_buf(1:Nsw*acohpsk.Nsymbrowpilot*M-nin_frame) = ch_fdm_frame_buf(nin_frame+1:Nsw*acohpsk.Nsymbrowpilot*M); + ch_fdm_frame_buf(Nsw*acohpsk.Nsymbrowpilot*M-nin_frame+1:Nsw*acohpsk.Nsymbrowpilot*M) = ch_fdm_frame; + + next_sync = sync; + + % if out of sync do Initial Freq offset estimation over NSW frames to flush out memories + + if (sync == 0) + + % we can test +/- 20Hz, so we break this up into 3 tests to cover +/- 60Hz + + max_ratio = 0; + for acohpsk.f_est = Fcentre-40:40:Fcentre+40 + + printf(" [%d] acohpsk.f_est: %f +/- 20\n", f, acohpsk.f_est); + + % we are out of sync so reset f_est and process two frames to clean out memories + + [ch_symb rx_timing rx_filt rx_baseband afdmdv acohpsk.f_est] = rate_Fs_rx_processing(afdmdv, ch_fdm_frame_buf, acohpsk.f_est, Nsw*acohpsk.Nsymbrowpilot, nin, 0); + rx_baseband_log = [rx_baseband_log rx_baseband]; + + rx_filt_log = [rx_filt_log rx_filt]; + ch_symb_log = [ch_symb_log; ch_symb]; + rx_timing_log = [rx_timing_log rx_timing]; + + for i=1:Nsw-1 + acohpsk.ct_symb_buf = update_ct_symb_buf(acohpsk.ct_symb_buf, ch_symb((i-1)*acohpsk.Nsymbrowpilot+1:i*acohpsk.Nsymbrowpilot,:), acohpsk.Nct_sym_buf, acohpsk.Nsymbrowpilot); + end + [anext_sync acohpsk] = frame_sync_fine_freq_est(acohpsk, ch_symb((Nsw-1)*acohpsk.Nsymbrowpilot+1:Nsw*acohpsk.Nsymbrowpilot,:), sync, next_sync); + + if anext_sync == 1 + %printf(" [%d] acohpsk.ratio: %f\n", f, acohpsk.ratio); + if acohpsk.ratio > max_ratio + max_ratio = acohpsk.ratio; + f_est = acohpsk.f_est - acohpsk.f_fine_est; + next_sync = anext_sync; + end + end + end + + if next_sync == 1 + + % we've found a sync candidate! + % re-process last two frames with adjusted f_est then check again + + acohpsk.f_est = f_est; + + printf(" [%d] trying sync and f_est: %f\n", f, acohpsk.f_est); + + [ch_symb rx_timing rx_filt rx_baseband afdmdv f_est] = rate_Fs_rx_processing(afdmdv, ch_fdm_frame_buf, acohpsk.f_est, Nsw*acohpsk.Nsymbrowpilot, nin, 0); + rx_baseband_log = [rx_baseband_log rx_baseband]; + rx_filt_log = [rx_filt_log rx_filt]; + ch_symb_log = [ch_symb_log; ch_symb]; + rx_timing_log = [rx_timing_log rx_timing]; + + for i=1:Nsw-1 + acohpsk.ct_symb_buf = update_ct_symb_buf(acohpsk.ct_symb_buf, ch_symb((i-1)*acohpsk.Nsymbrowpilot+1:i*acohpsk.Nsymbrowpilot,:), acohpsk.Nct_sym_buf, acohpsk.Nsymbrowpilot); + end + [next_sync acohpsk] = frame_sync_fine_freq_est(acohpsk, ch_symb((Nsw-1)*acohpsk.Nsymbrowpilot+1:Nsw*acohpsk.Nsymbrowpilot,:), sync, next_sync); + if abs(acohpsk.f_fine_est) > 2 + printf(" [%d] Hmm %f is a bit big so back to coarse est ...\n", f, acohpsk.f_fine_est); + next_sync = 0; + end + + if acohpsk.ratio < 0.9 + next_sync = 0; + end + if next_sync == 1 + % OK we are in sync! + % demodulate first frame (demod completed below) + + printf(" [%d] in sync! f_est: %f ratio: %f \n", f, f_est, acohpsk.ratio); + acohpsk.ct_symb_ff_buf(1:acohpsk.Nsymbrowpilot+2,:) = acohpsk.ct_symb_buf(acohpsk.ct+1:acohpsk.ct+acohpsk.Nsymbrowpilot+2,:); + end + end + end + + % If in sync just do sample rate processing on latest frame + + if sync == 1 + [ch_symb rx_timing rx_filt rx_baseband afdmdv acohpsk.f_est] = rate_Fs_rx_processing(afdmdv, ch_fdm_frame, acohpsk.f_est, acohpsk.Nsymbrowpilot, nin, acohpsk.ftrack_en); + [next_sync acohpsk] = frame_sync_fine_freq_est(acohpsk, ch_symb, sync, next_sync); + + acohpsk.ct_symb_ff_buf(1:2,:) = acohpsk.ct_symb_ff_buf(acohpsk.Nsymbrowpilot+1:acohpsk.Nsymbrowpilot+2,:); + acohpsk.ct_symb_ff_buf(3:acohpsk.Nsymbrowpilot+2,:) = acohpsk.ct_symb_buf(acohpsk.ct+3:acohpsk.ct+acohpsk.Nsymbrowpilot+2,:); + + rx_baseband_log = [rx_baseband_log rx_baseband]; + rx_filt_log = [rx_filt_log rx_filt]; + ch_symb_log = [ch_symb_log; ch_symb]; + rx_timing_log = [rx_timing_log rx_timing]; + f_est_log = [f_est_log acohpsk.f_est]; + end + + % if we are in sync complete demodulation with symbol rate processing + + if (next_sync == 1) || (sync == 1) + [rx_symb rx_bits rx_symb_linear amp_ phi_ sig_rms noise_rms] = qpsk_symbols_to_bits(acohpsk, acohpsk.ct_symb_ff_buf); + rx_symb_log = [rx_symb_log; rx_symb]; + rx_amp_log = [rx_amp_log; amp_]; + rx_phi_log = [rx_phi_log; phi_]; + rx_bits_log = [rx_bits_log rx_bits]; + tx_bits_prev_log = [tx_bits_prev_log prev_tx_bits2]; + ratio_log = [ratio_log acohpsk.ratio]; + ct_symb_ff_log = [ct_symb_ff_log; acohpsk.ct_symb_ff_buf(1:acohpsk.Nsymbrowpilot,:)]; + sig_rms_log = [sig_rms_log sig_rms]; + noise_rms_log = [noise_rms_log noise_rms]; + noise_rms_filt = 0.9*noise_rms_filt + 0.1*noise_rms; + noise_rms_filt_log = [noise_rms_filt_log noise_rms_filt]; + + % BER stats + + if f > 2 + error_positions = xor(tx_bits_log((f-3)*framesize+1:(f-2)*framesize), rx_bits); + Nerrs += sum(error_positions); + nerr_log = [nerr_log sum(error_positions)]; + Tbits += length(error_positions); + error_positions_hist += error_positions; + end + printf("\r [%d]", f); + end + + % reset BER stats if we lose sync + + if sync == 1 + %Nerrs = 0; + %Tbits = 0; + %nerr_log = []; + end + + [sync acohpsk] = sync_state_machine(acohpsk, sync, next_sync); + + % work out how many samples we need for next time + + nin = M; + if sync == 1 + if rx_timing(length(rx_timing)) > M/P + nin = M + M/P; + end + if rx_timing(length(rx_timing)) < -M/P + nin = M - M/P; + end + end + nin_frame = (acohpsk.Nsymbrowpilot-1)*M + nin; + + prev_tx_bits2 = prev_tx_bits; + prev_tx_bits = tx_bits; + +end + +ber = Nerrs/Tbits; +printf("\nOctave EsNodB: %4.1f ber..: %4.3f Nerrs..: %d Tbits..: %d\n", EsNodB, ber, Nerrs, Tbits); + +if compare_with_c + + % Output vectors from C port --------------------------------------------------- + + load tcohpsk_out.txt + + % Determine bit error rate + + + sz = length(rx_bits_log_c); + Nerrs_c = sum(xor(tx_bits_log(1:sz-framesize), rx_bits_log_c(framesize+1:sz))); + Tbits_c = length(tx_bits_prev_log); + ber_c = Nerrs_c/Tbits_c; + printf("C EsNodB.....: %4.1f ber_c: %4.3f Nerrs_c: %d Tbits_c: %d\n", EsNodB, ber_c, Nerrs_c, Tbits_c); + + stem_sig_and_error(1, 111, tx_bits_log_c, tx_bits_log - tx_bits_log_c, 'tx bits', [1 length(tx_bits_log) -1.5 1.5]) + + stem_sig_and_error(2, 211, real(tx_symb_log_c), real(tx_symb_log - tx_symb_log_c), 'tx symb re', [1 length(tx_symb_log_c) -1.5 1.5]) + stem_sig_and_error(2, 212, imag(tx_symb_log_c), imag(tx_symb_log - tx_symb_log_c), 'tx symb im', [1 length(tx_symb_log_c) -1.5 1.5]) + + stem_sig_and_error(3, 211, real(tx_fdm_frame_log_c), real(tx_fdm_frame_log - tx_fdm_frame_log_c), 'tx fdm frame re', [1 length(tx_fdm_frame_log) -10 10]) + stem_sig_and_error(3, 212, imag(tx_fdm_frame_log_c), imag(tx_fdm_frame_log - tx_fdm_frame_log_c), 'tx fdm frame im', [1 length(tx_fdm_frame_log) -10 10]) + stem_sig_and_error(4, 211, real(ch_fdm_frame_log_c), real(ch_fdm_frame_log - ch_fdm_frame_log_c), 'ch fdm frame re', [1 length(ch_fdm_frame_log) -10 10]) + stem_sig_and_error(4, 212, imag(ch_fdm_frame_log_c), imag(ch_fdm_frame_log - ch_fdm_frame_log_c), 'ch fdm frame im', [1 length(ch_fdm_frame_log) -10 10]) + + c = 1; + stem_sig_and_error(5, 211, real(rx_baseband_log_c(c,:)), real(rx_baseband_log(c,:) - rx_baseband_log_c(c,:)), 'rx baseband re', [1 length(rx_baseband_log) -10 10]) + stem_sig_and_error(5, 212, imag(rx_baseband_log_c(c,:)), imag(rx_baseband_log(c,:) - rx_baseband_log_c(c,:)), 'rx baseband im', [1 length(rx_baseband_log) -10 10]) + stem_sig_and_error(6, 211, real(rx_filt_log_c(c,:)), real(rx_filt_log(c,:) - rx_filt_log_c(c,:)), 'rx filt re', [1 length(rx_filt_log) -1 1]) + stem_sig_and_error(6, 212, imag(rx_filt_log_c(c,:)), imag(rx_filt_log(c,:) - rx_filt_log_c(c,:)), 'rx filt im', [1 length(rx_filt_log) -1 1]) + + [n m] = size(ch_symb_log); + stem_sig_and_error(7, 211, real(ch_symb_log_c), real(ch_symb_log - ch_symb_log_c), 'ch symb re', [1 n -1.5 1.5]) + stem_sig_and_error(7, 212, imag(ch_symb_log_c), imag(ch_symb_log - ch_symb_log_c), 'ch symb im', [1 n -1.5 1.5]) + + [n m] = size(rx_symb_log); + stem_sig_and_error(8, 211, rx_amp_log_c, rx_amp_log - rx_amp_log_c, 'Amp Est', [1 n -1.5 1.5]) + phi_log_diff = rx_phi_log - rx_phi_log_c; + phi_log_diff(find(phi_log_diff > pi)) -= 2*pi; + phi_log_diff(find(phi_log_diff < -pi)) += 2*pi; + stem_sig_and_error(8, 212, rx_phi_log_c, phi_log_diff, 'Phase Est', [1 n -4 4]) + stem_sig_and_error(9, 211, real(rx_symb_log_c), real(rx_symb_log - rx_symb_log_c), 'rx symb re', [1 n -1.5 1.5]) + stem_sig_and_error(9, 212, imag(rx_symb_log_c), imag(rx_symb_log - rx_symb_log_c), 'rx symb im', [1 n -1.5 1.5]) + + stem_sig_and_error(10, 111, rx_bits_log_c, rx_bits_log - rx_bits_log_c, 'rx bits', [1 length(rx_bits_log) -1.5 1.5]) + stem_sig_and_error(11, 111, f_est_log_c - Fcentre - foff, f_est_log - f_est_log_c, 'f est', [1 length(f_est_log) -5 5]) + stem_sig_and_error(12, 111, rx_timing_log_c, rx_timing_log_c - rx_timing_log, 'rx timing', [1 length(rx_timing_log) -M M]) + + check(tx_bits_log, tx_bits_log_c, 'tx_bits'); + check(tx_symb_log, tx_symb_log_c, 'tx_symb'); + check(tx_fdm_frame_log, tx_fdm_frame_log_c, 'tx_fdm_frame',0.01); + check(ch_fdm_frame_log, ch_fdm_frame_log_c, 'ch_fdm_frame',0.01); + check(ch_symb_log, ch_symb_log_c, 'ch_symb',0.05); + check(rx_amp_log, rx_amp_log_c, 'rx_amp_log',0.01); + check(phi_log_diff, zeros(length(phi_log_diff), Nc*Nd), 'rx_phi_log',0.1); + check(rx_symb_log, rx_symb_log_c, 'rx_symb',0.01); + check(rx_timing_log, rx_timing_log_c, 'rx_timing',0.005); + check(rx_bits_log, rx_bits_log_c, 'rx_bits'); + check(f_est_log, f_est_log_c, 'f_est'); + check(sig_rms_log, sig_rms_log_c, 'sig_rms'); + check(noise_rms_log, noise_rms_log_c, 'noise_rms'); + + printf("\npasses: %d fails: %d\n", passes, fails); + +else + + papr = max(tx_fdm_frame_log.*conj(tx_fdm_frame_log)) / mean(tx_fdm_frame_log.*conj(tx_fdm_frame_log)); + papr_dB = 10*log10(papr); + printf("av tx pwr: %4.2f PAPR: %4.2f av rx pwr: %4.2f\n", var(tx_fdm_frame_log), papr_dB, var(ch_fdm_frame_log)); + + % some other useful plots + + f = figure(1) + clf + subplot(211) + plot(real(tx_fdm_frame_log)) + title('tx fdm real'); + subplot(212) + plot(imag(tx_fdm_frame_log)) + title('tx fdm imag'); + + f = figure(2) + clf + spec = 20*log10(abs(fft(tx_fdm_frame_log))); + l = length(spec); + plot((Fs/l)*(1:l), spec) + axis([1 Fs/2 0 max(spec)]); + title('tx spectrum'); + ylabel('Amplitude (dB)') + xlabel('Frequency (Hz)') + grid; + + f = figure(3) + clf; + % plot combined signals to show diversity gains + combined = rx_symb_log(:,1:Nc); + for d=2:Nd + combined += rx_symb_log(:, (d-1)*Nc+1:d*Nc); + end + plot(combined*exp(j*pi/4)/sqrt(Nd),'+') + title('Scatter'); + ymax = abs(max(max(combined))); + axis([-ymax ymax -ymax ymax]) + + f = figure(4) + clf; + subplot(211) + plot(rx_phi_log) + subplot(212) + plot(rx_amp_log) + + f = figure(5) + clf; + subplot(211) + plot(rx_timing_log) + title('rx timing'); + subplot(212) + stem(ratio_log) + title('Sync ratio'); + + f = figure(6) + clf; + subplot(211) + stem(nerr_log) + title('Bit Errors'); + subplot(212) + plot(noise_rms_filt_log,'r', sig_rms_log,'g'); + title('Est rms signal and noise') + + f = figure(7); + clf; + subplot(211) + plot(foff_log,';freq offset;'); + hold on; + plot(f_est_log - Fcentre,'g;freq offset est;'); + hold off; + title('freq offset'); + legend("boxoff"); + subplot(212) + plot(foff_log(1:length(f_est_log)) - f_est_log + Fcentre) + title('freq offset estimation error'); + + f = figure(8) + clf + h = freqz(b,a,Fs/2); + plot(20*log10(abs(h))) + axis([1 Fs/2 -20 0]) + grid + title('SSB tx filter') + + f = figure(9) + clf + plot(error_positions_hist) + title('histogram of bit errors') + + +end + + +% function to write C header file of noise samples so C version gives +% extactly the same results + +function write_noise_file(uvnoise_log) + + m = length(uvnoise_log); + + filename = sprintf("../unittest/noise_samples.h"); + f=fopen(filename,"wt"); + fprintf(f,"/* unit variance complex noise samples */\n\n"); + fprintf(f,"/* Generated by write_noise_file() Octave function */\n\n"); + fprintf(f,"COMP noise[]={\n"); + for r=1:m + if r < m + fprintf(f, " {%f,%f},\n", real(uvnoise_log(r)), imag(uvnoise_log(r))); + else + fprintf(f, " {%f,%f}\n};", real(uvnoise_log(r)), imag(uvnoise_log(r))); + end + end + + fclose(f); +endfunction + + +% function to write float fading samples for use by C programs + +%function write_noise_file(raw_file_name, Fs, dopplerSpreadHz, len_samples) +% spread = doppler_spread(dopplerSpreadHz, Fs, len_samples); +% spread_2ms = doppler_spread(dopplerSpreadHz, Fs, len_samples); +% hf_gain = 1.0/sqrt(var(spread)+var(spread_2ms)); +% +% % interleave real imag samples +% +% inter = zeros(1,len_samples*4); +% inter(1:4) = hf_gain; +% for i=1:len_samples +% inter(i*4+1) = real(spread(i)); +% inter(i*4+2) = imag(spread(i)); +% inter(i*4+3) = real(spread_2ms(i)); +% inter(i*4+4) = imag(spread_2ms(i)); +% end +% f = fopen(raw_file_name,"wb"); +% fwrite(f, inter, "float32"); +% fclose(f); +%endfunction diff --git a/libcodec2-android/src/codec2/octave/tdetphase.m b/libcodec2-android/src/codec2/octave/tdetphase.m new file mode 100644 index 0000000..8d7f96c --- /dev/null +++ b/libcodec2-android/src/codec2/octave/tdetphase.m @@ -0,0 +1,84 @@ +% tdetphase.m +% David Rowe August 2017 +% +% Testing Hilbert Transform recover of phase from magnitude spectra + +newamp; +Fs = 8000; + +w = 2*pi*500/Fs; gamma = 0.95 +ak = [1 -2*gamma*cos(w) gamma*gamma]; +Nfft = 512; + +% Test 1 - compare phase from freqz for 2nd order system (all pole filter) +% - uses internal test of determine_phase() + +h = freqz(1,ak,Nfft/2); + +% note dummy_model not used, as determine_phase() is used in test mode + +L = 20; Wo = pi/(L+1); +dummy_model = [Wo L ones(1,L)]; +phase = determine_phase(dummy_model, 1, Nfft, ak); + +fg = 1; +figure(fg++); clf; +subplot(211); plot(20*log10(abs(h))); title('test 1'); +subplot(212); plot(angle(h)); hold on; plot(phase(1:Nfft/2),'g'); hold off; + +% Test 2 - feed in harmonic magnitudes + +F0 = 100; Wo = 2*pi*F0/Fs; L = floor(pi/Wo); +Am = zeros(1,L); +for m=1:L + b = round(m*Wo*Nfft/(2*pi)); + Am(m) = abs(h(b)); +end +AmdB = 20*log10(Am); +model = [Wo L Am]; +[phase Gdbfk s] = determine_phase(model, 1, Nfft); + +fftx = (1:Nfft/2)*(Fs/Nfft); +harmx = (1:L)*Wo*Fs/(2*pi); + +figure(fg++); clf; +subplot(211); plot(fftx, Gdbfk(1:Nfft/2)); +subplot(212); plot(s(1:Nfft/2)) + +figure(fg++); clf; +subplot(211); plot(fftx, 20*log10(abs(h))); + hold on; plot(harmx, AmdB, 'g+'); plot(fftx, Gdbfk(1:Nfft/2), 'r'); hold off; +subplot(212); plot(fftx, angle(h)); hold on; plot(fftx, phase(1:Nfft/2),'g'); hold off; + +% Test 3 - Use real harmonic amplitudes + +model = load("../build_linux/src/hts1a_model.txt"); +phase_orig = load("../build_linux/src/hts1a_phase.txt"); + +f = 184; +Wo = model(f,1); L = model(f,2); Am = model(f,3:L+2); AmdB = 20*log10(Am); +[phase Gdbfk s] = determine_phase(model, f, Nfft); + +fftx = (1:Nfft/2)*(Fs/Nfft); +harmx = (1:L)*Wo*Fs/(2*pi); + +figure(fg++); clf; +subplot(211); plot(fftx, Gdbfk(1:Nfft/2)); +subplot(212); plot(s(1:Nfft/2)) + +figure(fg++); clf; +subplot(211); plot(harmx, AmdB, 'g+'); + hold on; plot(fftx, Gdbfk(1:Nfft/2), 'r'); hold off; +subplot(212); plot(fftx, phase(1:Nfft/2),'g'); + +% synthesise using phases + +N = 320; +s = s_phase = zeros(1,N); +for m=1:L/4 + s = s + Am(m)*cos(m*Wo*(1:N) + phase_orig(f,m)); + b = round(m*Wo*Nfft/(2*pi)); + s_phase = s_phase + Am(m)*cos(m*Wo*(1:N) + phase(b)); +end +figure(fg++); clf; +subplot(211); plot(s); subplot(212); plot(s_phase,'g'); diff --git a/libcodec2-android/src/codec2/octave/test_dqpsk2.m b/libcodec2-android/src/codec2/octave/test_dqpsk2.m new file mode 100644 index 0000000..d421d62 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/test_dqpsk2.m @@ -0,0 +1,465 @@ +% test_dqpsk2.m +% David Rowe April 2014 +% +% DQPSK modem simulation inclduing filtering to test modulating modem +% tx power based on speech energy. Unlike test_dpsk runs at sample +% rate Fs. + +1; + +% main test function + +function sim_out = ber_test(sim_in) + Fs = 8000; + + verbose = sim_in.verbose; + framesize = sim_in.framesize; + Ntrials = sim_in.Ntrials; + Esvec = sim_in.Esvec; + phase_offset = sim_in.phase_offset; + w_offset = sim_in.w_offset; + plot_scatter = sim_in.plot_scatter; + Rs = sim_in.Rs; + hf_sim = sim_in.hf_sim; + Nhfdelay = floor(sim_in.hf_delay_ms*Fs/1000); + Nc = sim_in.Nc; + symbol_amp = sim_in.symbol_amp; + + bps = 2; + Nsymb = framesize/bps; + for k=1:Nc + prev_sym_tx(k) = qpsk_mod([0 0]); + prev_sym_rx(k) = qpsk_mod([0 0]); + end + + % design root nyquist (root raised cosine) filter and init tx and rx filter states + + alpha = 0.5; T=1/Fs; Nfiltsym=7; M=Fs/Rs; + if floor(Fs/Rs) != Fs/Rs + printf("oversampling ratio must be an integer\n"); + return; + end + hrn = gen_rn_coeffs(alpha, T, Rs, Nfiltsym, M); + Nfilter = length(hrn); + + % convert "spreading" samples from 1kHz carrier at Fs to complex + % baseband, generated by passing a 1kHz sine wave through PathSim + % with the ccir-poor model, enabling one path at a time. + + Fc = 1000; + fspread = fopen("../raw/sine1k_2Hz_spread.raw","rb"); + spread1k = fread(fspread, "int16")/10000; + fclose(fspread); + fspread = fopen("../raw/sine1k_2ms_delay_2Hz_spread.raw","rb"); + spread1k_2ms = fread(fspread, "int16")/10000; + fclose(fspread); + + % down convert to complex baseband + spreadbb = spread1k.*exp(-j*(2*pi*Fc/Fs)*(1:length(spread1k))'); + spreadbb_2ms = spread1k_2ms.*exp(-j*(2*pi*Fc/Fs)*(1:length(spread1k_2ms))'); + + % remove -2000 Hz image + b = fir1(50, 5/Fs); + spread = filter(b,1,spreadbb); + spread_2ms = filter(b,1,spreadbb_2ms); + + % discard first 1000 samples as these were near 0, probably as + % PathSim states were ramping up. Transpose for convenience + + spread = transpose(spread(1000:length(spread))); + spread_2ms = transpose(spread_2ms(1000:length(spread_2ms))); + + % Determine "gain" of HF channel model, so we can normalise + % carrier power during HF channel sim to calibrate SNR. I imagine + % different implementations of ccir-poor would do this in + % different ways, leading to different BER results. Oh Well! + + hf_gain = 1.0/sqrt(var(spread)+var(spread_2ms)); + + % Start Simulation ---------------------------------------------------------------- + + for ne = 1:length(Esvec) + EsNodB = Esvec(ne); + EsNo = 10^(EsNodB/10); + + variance = Fs/(Rs*EsNo); + if verbose > 1 + printf("EsNo (dB): %f EsNo: %f variance: %f\n", EsNodB, EsNo, variance); + end + + Terrs = 0; Tbits = 0; + + tx_symb_log = []; + rx_symb_log = []; + noise_log = []; + sim_out.errors_log = []; + sim_out.tx_baseband_log = []; + sim_out.rx_filt_log = []; + symbol_amp_index = 1; + + % init filter memories and LOs + + tx_filter_memory = zeros(Nc, Nfilter); + rx_filter_memory = zeros(Nc, Nfilter); + s_delay_line_filt = zeros(Nc, Nfiltsym); + phase_tx = ones(1,Nc); + phase_rx = ones(1,Nc); + Fcentre = 1500; Fsep = (1+alpha)*Rs; + freq = Fcentre + Fsep*((-Nc/2+0.5):(Nc/2-0.5)); + freq = exp(j*freq*2*pi/Fs); + + % init HF channel + + sc = 1; hf_n = 1; + hf_sim_delay_line = zeros(1,M+Nhfdelay); + freq_sample_hz = Fcentre + ((Fsep*(-Nc/2)):50:(Fsep*(Nc/2))); + freq_sample_rads = (2*pi/Fs)*freq_sample_hz; + hf_model = ones(Ntrials*Nsymb/Nc, length(freq_sample_rads)); % defaults for plotting surface + + % bunch of outputs we log for graphing + + sim_out.errors_log = []; + sim_out.Nerrs = []; + sim_out.snr_log = []; + sim_out.hf_model_pwr = []; + sim_out.tx_fdm_log = []; + C_log = []; + + for nn = 1: Ntrials + + tx_bits = round( rand( 1, framesize ) ); + + % modulate -------------------------------------------- + + s = zeros(1, Nsymb); + for i=1:Nc:Nsymb + for k=1:Nc + tx_symb = qpsk_mod(tx_bits(2*(i-1+k-1)+1:2*(i+k-1))); + s_qpsk(i+k-1) = tx_symb; + tx_symb *= prev_sym_tx(k); + prev_sym_tx(k) = tx_symb; + s(i+k-1) = symbol_amp(symbol_amp_index)*tx_symb; + end + end + symbol_amp_index++; + s_ch = s; + + % Now we start processing frame Nc symbols at a time to model parallel carriers + + tx_fdm_sym_log = []; + for i=1:Nc:Nsymb + + % Delay tx symbols to match delay due to filters. qpsk + % (rather than dqpsk) symbols used for convenience as + % it's easy to shift symbols than pairs of bits + + s_delay_line_filt(:,1:Nfiltsym-1) = s_delay_line_filt(:,2:Nfiltsym); + s_delay_line_filt(:,Nfiltsym) = s_qpsk(i:i+Nc-1); + s_qpsk(i:i+Nc-1) = s_delay_line_filt(:,1); + for k=1:Nc + tx_bits(2*(i-1+k-1)+1:2*(i+k-1)) = qpsk_demod(s_qpsk(i+k-1)); + end + + % tx filter + + tx_baseband = zeros(Nc,M); + + % tx filter each symbol, generate M filtered output samples for each symbol. + % Efficient polyphase filter techniques used as tx_filter_memory is sparse + + tx_filter_memory(:,Nfilter) = s(i:i+Nc-1); + + for k=1:M + tx_baseband(:,k) = M*tx_filter_memory(:,M:M:Nfilter) * hrn(M-k+1:M:Nfilter)'; + end + tx_filter_memory(:,1:Nfilter-M) = tx_filter_memory(:,M+1:Nfilter); + tx_filter_memory(:,Nfilter-M+1:Nfilter) = zeros(Nc,M); + + sim_out.tx_baseband_log = [sim_out.tx_baseband_log tx_baseband]; + + % upconvert + + tx_fdm = zeros(1,M); + + for c=1:Nc + for k=1:M + phase_tx(c) = phase_tx(c) * freq(c); + tx_fdm(k) = tx_fdm(k) + tx_baseband(c,k)*phase_tx(c); + end + end + + sim_out.tx_fdm_log = [sim_out.tx_fdm_log tx_fdm]; + + % HF channel + + if hf_sim + hf_sim_delay_line(1:Nhfdelay) = hf_sim_delay_line(M+1:M+Nhfdelay); + hf_sim_delay_line(Nhfdelay+1:M+Nhfdelay) = tx_fdm; + + tx_fdm = tx_fdm.*spread(sc:sc+M-1) + hf_sim_delay_line(1:M).*spread_2ms(sc:sc+M-1); + tx_fdm *= hf_gain; + + % sample HF channel spectrum in middle of this symbol for plotting + + hf_model(hf_n,:) = hf_gain*(spread(sc+M/2) + exp(-j*freq_sample_rads*Nhfdelay)*spread_2ms(sc+M/2)); + + sc += M; + hf_n++; + end + + tx_fdm_sym_log = [tx_fdm_sym_log tx_fdm ]; + + % AWGN noise and phase/freq offset channel simulation + % 0.5 factor ensures var(noise) == variance , i.e. splits power between Re & Im + + noise = sqrt(variance*0.5)*(randn(1,M) + j*randn(1,M)); + noise_log = [noise_log noise]; + + % apply frequency and phase offset and noise + + for k=1:M + rx_fdm(k) = tx_fdm(k)*exp(j*phase_offset) + noise(k); + phase_offset += w_offset; + end + + % downconvert + + rx_baseband = zeros(Nc,M); + for c=1:Nc + for k=1:M + phase_rx(c) = phase_rx(c) * freq(c); + rx_baseband(c,k) = rx_fdm(k)*phase_rx(c)'; + end + end + + % rx filter + + rx_filter_memory(:,Nfilter-M+1:Nfilter) = rx_baseband; + rx_filt = rx_filter_memory * hrn'; + rx_filter_memory(:,1:Nfilter-M) = rx_filter_memory(:,1+M:Nfilter); + sim_out.rx_filt_log = [sim_out.rx_filt_log rx_filt]; + + s_ch(i:i+Nc-1) = rx_filt; + end + + % est HF model power for entire code frame (which could be several symbols) + + if hf_sim + frame_hf_model = reshape(hf_model(hf_n-Nsymb/Nc:hf_n-1,:),1,(Nsymb/Nc)*length(freq_sample_hz)); + sim_out.hf_model_pwr = [sim_out.hf_model_pwr mean(abs(frame_hf_model).^2)]; + else + sim_out.hf_model_pwr = [sim_out.hf_model_pwr 1]; + end + + % "genie" SNR estimate + + snr = (tx_fdm_sym_log*tx_fdm_sym_log')/(M*variance); + sim_out.snr_log = [sim_out.snr_log snr]; + + % de-modulate + + rx_bits = zeros(1, framesize); + for i=1:Nc:Nsymb + for k=1:Nc + rx_symb = s_ch(i+k-1); + tmp = rx_symb; + rx_symb *= conj(prev_sym_rx(k)/abs(prev_sym_rx(k))); + prev_sym_rx(k) = tmp; + rx_bits((2*(i-1+k-1)+1):(2*(i+k-1))) = qpsk_demod(rx_symb); + rx_symb_log = [rx_symb_log rx_symb]; + end + end + + % ignore data until we have enough frames to fill filter memory + % then count errors + + if nn > ceil(Nfiltsym/(Nsymb/Nc)) + error_positions = xor(rx_bits, tx_bits); + sim_out.errors_log = [sim_out.errors_log error_positions]; + Nerrs = sum(error_positions); + sim_out.Nerrs = [sim_out.Nerrs Nerrs]; + Terrs += Nerrs; + Tbits += length(tx_bits); + end + + end + + TERvec(ne) = Terrs; + BERvec(ne) = Terrs/Tbits; + + if verbose + printf("EsNo (dB): %f Terrs: %d BER %f ", EsNodB, Terrs, Terrs/Tbits); + printf("\n"); + end + if verbose > 1 + printf("Terrs: %d BER %f C %f N %f Es %f No %f Es/No %f\n\n", Terrs, + Terrs/Tbits, var(sim_out.tx_fdm_log), var(noise_log), + var(sim_out.tx_fdm_log)/(Nc*Rs), var(noise_log)/Fs, (var(sim_out.tx_fdm_log)/(Nc*Rs))/(var(noise_log)/Fs)); + end + end + + Ebvec = Esvec - 10*log10(bps); + + sim_out.BERvec = BERvec; + sim_out.Ebvec = Ebvec; + sim_out.TERvec = TERvec; + + if plot_scatter + figure(2); + clf; + scat = rx_symb_log(Nfiltsym*Nc:length(rx_symb_log)) .* exp(j*pi/4); + plot(real(scat), imag(scat),'+'); + title('Scatter plot'); + + figure(3); + clf; + y = 1:Rs*2; + EsNodBSurface = 20*log10(abs(hf_model(y,:))) + EsNodB; + mesh(1:length(freq_sample_hz),y,EsNodBSurface); + grid + title('HF Channel Es/No'); + end + +endfunction + +% Gray coded QPSK modulation function + +function symbol = qpsk_mod(two_bits) + two_bits_decimal = sum(two_bits .* [2 1]); + switch(two_bits_decimal) + case (0) symbol = 1; + case (1) symbol = j; + case (2) symbol = -j; + case (3) symbol = -1; + endswitch +endfunction + +% Gray coded QPSK demodulation function + +function two_bits = qpsk_demod(symbol) + if isscalar(symbol) == 0 + printf("only works with scalars\n"); + return; + end + bit0 = real(symbol*exp(j*pi/4)) < 0; + bit1 = imag(symbol*exp(j*pi/4)) < 0; + two_bits = [bit1 bit0]; +endfunction + +function sim_in = standard_init + sim_in.verbose = 1; + sim_in.plot_scatter = 0; + + sim_in.Esvec = 5:15; + sim_in.Ntrials = 100; + sim_in.framesize = 64; + sim_in.Rs = 100; + sim_in.Nc = 8; + + sim_in.phase_offset = 0; + sim_in.w_offset = 0; + sim_in.phase_noise_amp = 0; + + sim_in.hf_delay_ms = 2; + sim_in.hf_sim = 0; + sim_in.hf_phase_only = 0; + sim_in.hf_mag_only = 0; +endfunction + +function awgn_hf_ber_curves() + sim_in = standard_init(); + + Ebvec = sim_in.Esvec - 10*log10(2); + BER_theory = 0.5*erfc(sqrt(10.^(Ebvec/10))); + + dpsk_awgn = ber_test(sim_in); + sim_in.hf_sim = 1; + dpsk_hf = ber_test(sim_in); + + figure(1); + clf; + semilogy(Ebvec, BER_theory,'r;QPSK theory;') + hold on; + semilogy(dpsk_awgn.Ebvec, dpsk_awgn.BERvec,'g;DQPSK;') + semilogy(dpsk_hf.Ebvec, dpsk_hf.BERvec,'g;DQPSK HF;') + hold off; + xlabel('Eb/N0') + ylabel('BER') + grid("minor") + axis([min(Ebvec) max(Ebvec) 1E-3 1]) +end + +sim_in = standard_init(); + +% energy file sampled every 10ms + +load ../src/ve9qrp.txt +pdB=10*log10(ve9qrp); +for i=1:length(pdB) + if pdB(i) < 0 + pdB(i) = 0; + end +end + +% Down sample to 40ms rate used for 1300 bit/s codec, every 4th sample is transmitted + +pdB = pdB(4:4:length(pdB)); + +% Use linear mapping function in dB domain to map to symbol power + +%power_map_x = [ 0 20 24 40 50 ]; +%power_map_y = [--6 -6 0 6 6]; +power_map_x = [ 0 50 ]; +power_map_y = [ -15 12]; +mapped_pdB = interp1(power_map_x, power_map_y, pdB); + +sim_in.symbol_amp = 10 .^ (mapped_pdB/20); +%sim_in.symbol_amp = ones(1,length(pdB)); +sim_in.plot_scatter = 1; +sim_in.verbose = 2; +sim_in.hf_delay_ms = 2; +sim_in.hf_sim = 1; +sim_in.Esvec = 10; +sim_in.Ntrials = 400; + +dqpsk_pwr_hf = ber_test(sim_in); + +% note: need way to test that power is aligned with speech + +figure(4) +clf; +plot((1:sim_in.Ntrials)*80*4, pdB(1:sim_in.Ntrials)); +hold on; +plot((1:sim_in.Ntrials)*80*4, mapped_pdB(1:sim_in.Ntrials),'r'); +hold off; + +figure(5) +clf; +s = load_raw("../raw/ve9qrp.raw"); +M=320; M_on_2 = M/2; % processing delay between input speech and centre of analysis window +subplot(211) +plot(M_on_2:(M_on_2-1+sim_in.Ntrials*M),s(1:sim_in.Ntrials*M)) +hold on; +plot((1:sim_in.Ntrials)*M, 5000*sim_in.symbol_amp(1:sim_in.Ntrials),'r'); +hold off; +axis([1 sim_in.Ntrials*M -3E4 3E4]); +subplot(212) +plot(real(dqpsk_pwr_hf.tx_fdm_log)); + + +figure(6) +clf; +plot((1:sim_in.Ntrials)*M, 20*log10(sim_in.symbol_amp(1:sim_in.Ntrials)),'b;Es (dB);'); +hold on; +plot((1:sim_in.Ntrials)*M, 10*log10(dqpsk_pwr_hf.hf_model_pwr),'g;Fading (dB);'); +plot((1:sim_in.Ntrials)*M, 10*log10(dqpsk_pwr_hf.snr_log),'r;Es/No (dB);'); + +ber = dqpsk_pwr_hf.Nerrs/sim_in.framesize; +ber_clip = ber; +ber_clip(find(ber > 0.2)) = 0.2; +plot((1:length(ber_clip))*M, -20+100*ber_clip,'k;BER (0-20%);'); +hold off; +axis([1 sim_in.Ntrials*M -20 20]) + +fep=fopen("dqpsk_errors_pwr.bin","wb"); fwrite(fep, dqpsk_pwr_hf.errors_log, "short"); fclose(fep); +fber=fopen("ber.bin","wb"); fwrite(fber, ber, "float"); fclose(fber); diff --git a/libcodec2-android/src/codec2/octave/test_ldpc_fsk_lib.m b/libcodec2-android/src/codec2/octave/test_ldpc_fsk_lib.m new file mode 100644 index 0000000..4a6148a --- /dev/null +++ b/libcodec2-android/src/codec2/octave/test_ldpc_fsk_lib.m @@ -0,0 +1,851 @@ +% test_ldpc_fsk_lib +% David Rowe 16 April 2016 +% +% A series of tests for ldpc_fsk_lib, and C versions ldpc_enc and ldpc_dec. +% Gradually builds up complete C command line for SSTV balloon system, +% using Octave versions of LDPC and FSK modem as reference points. + +1; + +% encodes and decodes one frame, also writes codeword.bin for testing +% decode_from_file() below, and can optionally generate include file for +% C version of decoder. + +function [data code_param] = simple_ut(c_include_file) + load('H2064_516_sparse.mat'); + HRA = full(HRA); + max_iterations = 100; + decoder_type = 0; + EsNodB = 3; + mod_order = 2; + + code_param = ldpc_init(HRA, mod_order); + data = round( rand( 1, code_param.data_bits_per_frame ) ); + codeword = ldpc_encode(code_param, data); + f = fopen("codeword.bin","wt"); fwrite(f, codeword, "uint8"); fclose(f); + s = 1 - 2 * codeword; + code_param.symbols_per_frame = length( s ); + + EsNo = 10^(EsNodB/10); + variance = 1/(2*EsNo); + noise = sqrt(variance)* randn(1,code_param.symbols_per_frame); + rx = s + noise; + + if nargin == 1 + code_param.c_include_file = c_include_file; + end + [detected_data Niters] = ldpc_decode(rx, code_param, max_iterations, decoder_type); + + error_positions = xor(detected_data(1:code_param.data_bits_per_frame), data); + Nerrs = sum(error_positions); + + printf("Nerrs = %d\n", Nerrs); +end + + +% This version decodes from a file of bits + +function detected_data = decode_from_file(filename) + max_iterations = 100; + decoder_type = 0; + load('H2064_516_sparse.mat'); + HRA = full(HRA); + mod_order = 2; + + f = fopen(filename,"rb"); codeword = fread(f, "uint8")'; fclose(f); + r = 1 - 2 * codeword; + code_param = ldpc_init(HRA, mod_order); + [detected_data Niters] = ldpc_decode(r, code_param, max_iterations, decoder_type); +end + + +% plots a BER curve for the LDPC decoder. Takes a while to run, uses parallel cores + +function plot_curve + num_cores = 4; % set this to the number of cores you have + + load('H2064_516_sparse.mat'); + HRA = full(HRA); + [Nr Nc] = size(HRA); + sim_in.rate = (Nc-Nr)/Nc; + + sim_in.HRA = HRA; + sim_in.mod_order = 2; + sim_in.framesize = Nc; + sim_in.mod_order = 2; + sim_in.Lim_Ferrs = 100; + + % note we increase number of trials as BER goes down + + Esvec = [ 0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 ]; + Ntrials = [ 1E4 1E4 1E4 1E4 1E5 1E5 1E5 1E5 1E5 ]; + num_runs = length(Esvec) + + sim_in_vec(1:num_runs) = sim_in; + for i = 1:num_runs + sim_in_vec(i).Esvec = Esvec(i); + sim_in_vec(i).Ntrials = Ntrials(i); + end + + %sim_out = ldpc5(sim_in_vec(1)); + tstart = time(); + sim_out = pararrayfun(num_cores, @ldpc5, sim_in_vec); + tend = time(); + + total_bits = sum(Ntrials)*sim_in.framesize; + total_secs = tend - tstart; + printf("%d bits in %4.1f secs, or %5f bits/s\n", total_bits, total_secs, total_bits/total_secs); + + for i=1:num_runs + Ebvec(i) = sim_out(i).Ebvec; + BERvec(i) = sim_out(i).BERvec; + end + semilogy(Ebvec, BERvec, '+-') + xlabel('Eb/N0') + ylabel('BER') + title(['H2064 516 sparse.mat' ' ' date]) + +end + + +% Test C encoder + +function test_c_encoder + load('H2064_516_sparse.mat'); + HRA = full(HRA); + max_iterations = 100; + decoder_type = 0; + EsNodB = 3; + mod_order = 2; + frames = 100; + + EsNo = 10^(EsNodB/10); + variance = 1/(2*EsNo); + + code_param = ldpc_init(HRA, mod_order); + + data = round(rand(1,frames*code_param.data_bits_per_frame)); + f = fopen("data.bin","wt"); fwrite(f, data, "uint8"); fclose(f); + + % Outboard C encoder + + system("../src/ldpc_enc data.bin codewords.bin"); + + % Test with Octave decoder + + f = fopen("codewords.bin","rb"); codewords = fread(f, "uint8")'; fclose(f); + + Nerrs = 0; + for i=1:frames + st = (i-1)*code_param.symbols_per_frame+1; en = st+code_param.symbols_per_frame-1; + tx = 1 - 2 * codewords(st:en); + + noise = sqrt(variance)*randn(1,code_param.symbols_per_frame); + rx = tx + noise; + + [detected_data Niters] = ldpc_decode(rx, code_param, max_iterations, decoder_type); + + st = (i-1)*code_param.data_bits_per_frame+1; en = st+code_param.data_bits_per_frame-1; + error_positions = xor(detected_data(1:code_param.data_bits_per_frame), data(st:en)); + Nerrs += sum(error_positions); + end + + printf("Nerrs = %d\n", Nerrs); +end + + +function test_c_decoder + load('H2064_516_sparse.mat'); + HRA = full(HRA); + max_iterations = 100; + decoder_type = 0; + mod_order = 2; + frames = 10; + EsNodB = 2; + sdinput = 1; + + EsNo = 10^(EsNodB/10); + variance = 1/(2*EsNo); + + code_param = ldpc_init(HRA, mod_order); + data = round(rand(1,code_param.data_bits_per_frame*frames)); + + f = fopen("data.bin","wt"); fwrite(f, data, "uint8"); fclose(f); + system("../src/ldpc_enc data.bin codewords.bin"); + f = fopen("codewords.bin","rb"); codewords = fread(f, "uint8")'; fclose(f); + + s = 1 - 2 * codewords; + noise = sqrt(variance)*randn(1,code_param.symbols_per_frame*frames); + r = s + noise; + + % calc LLRs frame by frame + + for i=1:frames + st = (i-1)*code_param.symbols_per_frame+1; + en = st + code_param.symbols_per_frame-1; + llr(st:en) = sd_to_llr(r(st:en)); + end + + % Outboard C decoder + + if sdinput + f = fopen("sd.bin","wb"); fwrite(f, r, "double"); fclose(f); + system("../src/ldpc_dec sd.bin data_out.bin --sd"); + else + f = fopen("llr.bin","wb"); fwrite(f, llr, "double"); fclose(f); + system("../src/ldpc_dec llr.bin data_out.bin"); + end + + f = fopen("data_out.bin","rb"); data_out = fread(f, "uint8")'; fclose(f); + + Nerrs = Nerrs2 = zeros(1,frames); + for i=1:frames + + % Check C decoder + + data_st = (i-1)*code_param.data_bits_per_frame+1; + data_en = data_st+code_param.data_bits_per_frame-1; + st = (i-1)*code_param.symbols_per_frame+1; + en = st+code_param.data_bits_per_frame-1; + data_out_c = data_out(st:en); + error_positions = xor(data_out_c, data(data_st:data_en)); + Nerrs(i) = sum(error_positions); + + % Octave decoder + + st = (i-1)*code_param.symbols_per_frame+1; en = st+code_param.symbols_per_frame-1; + [detected_data Niters] = ldpc_decode(r(st:en), code_param, max_iterations, decoder_type); + st = (i-1)*code_param.data_bits_per_frame+1; en = st+code_param.data_bits_per_frame-1; + data_out_octave = detected_data(1:code_param.data_bits_per_frame); + error_positions = xor(data_out_octave, data(st:en)); + Nerrs2(i) = sum(error_positions); + %printf("%4d ", Niters); + end + printf("Errors per frame:\nC.....:"); + for i=1:frames + printf("%4d ", Nerrs(i)); + end + printf("\nOctave:"); + for i=1:frames + printf("%4d ", Nerrs2(i)); + end + printf("\n"); + +end + +% Saves a complex vector s to a file "filename" of IQ unsigned 8 bit +% chars, same as RTLSDR format. + +function save_rtlsdr(filename, s) + mx = max(abs(s)); + re = real(s); im = imag(s); + l = length(s); + iq = zeros(1,2*l); + %iq(1:2:2*l) = 127 + re*(127/mx); + %iq(2:2:2*l) = 127 + im*(127/mx); + iq(1:2:2*l) = 127 + 32*re; + iq(2:2:2*l) = 127 + 32*im; + figure(3); clf; plot(iq); title('simulated IQ signal from RTL SDR'); + fs = fopen(filename,"wb"); + fwrite(fs,iq,"uchar"); + fclose(fs); +endfunction + + +% Oversamples by a factor of 2 using Octaves resample() function then +% uses linear interpolation to achive fractional sample rate + +function rx_resample_fract = fractional_resample(rx, resample_rate); + assert(resample_rate < 2, "keep resample_rate between 0 and 2"); + rx_resample2 = resample(rx, 2, 1); + l = length(rx_resample2); + rx_resample_fract = zeros(1,l); + k = 1; + step = 2/resample_rate; + for i=1:step:l-1 + i_low = floor(i); + i_high = ceil(i); + f = i - i_low; + rx_resample_fract(k) = (1-f)*rx_resample2(i_low) + f*rx_resample2(i_high); + %printf("i: %f i_low: %d i_high: %d f: %f\n", i, i_low, i_high, f); + k++; + end + rx_resample_fract = rx_resample_fract(1:k-1); +endfunction + + +% Using simulated SSTV packet, generate complex fsk mod signals, 8-bit +% unsigned IQ for feeding into C demod chain. Can also be used to +% generate BER curves. Found bugs in UW size and our use of csdr +% re-sampler using this function, and by gradually and carefully +% building up the C command line. + +#{ +todo: [X] uncoded BER + [X] octave fsk demod + [X] use C demod + [X] compare uncoded BER to unsigned 8 bit IQ to regular 16-bit + [X] generate complex rx signal with noise + [X] used cmd line utils to drive demod + [X] test with resampler + [X] measure effect on PER with coding +#} + +function [n_uncoded_errs n_uncoded_bits] = run_sstv_sim(sim_in, EbNodB) + + frames = sim_in.frames; + demod_type = sim_in.demod_type; + + % init LDPC code + + load('H2064_516_sparse.mat'); + HRA = full(HRA); + max_iterations = 100; + decoder_type = 0; + mod_order = 2; + + code_param = ldpc_init(HRA, mod_order); + + % note fixed frame of bits used for BER testing + + tx_codeword = gen_sstv_frame; + + % init FSK modem + + fsk_horus_as_a_lib = 1; + fsk_horus; + states = fsk_horus_init_hbr(9600, 8, 1200, 2, length(tx_codeword)); + states.df(1:states.M) = 0; + states.dA(1:states.M) = 1; + states.tx_real = 0; % Octave fsk_mod generates complex valued output + % so we can simulate rtl_sdr complex ouput + + % Set up simulated tx tones to sit in the middle of cdsr passband + + filt_low_norm = 0.1; filt_high_norm = 0.4; + fc = states.Fs*(filt_low_norm + filt_high_norm)/2; + %fc = 1800; + f1 = fc - states.Rs/2; + f2 = fc + states.Rs/2; + states.ftx = [f1 f2]; + + % set up AWGN channel + + EbNo = 10^(EbNodB/10); + variance = states.Fs/(states.Rs*EbNo*states.bitspersymbol); + + % start simulation ---------------------------------------- + + tx_bit_stream = []; + for i=1:frames + % uncomment for different data on each frame + %tx_codeword = gen_sstv_frame; + tx_bit_stream = [tx_bit_stream tx_codeword]; + end + + printf("%d bits at %d bit/s is a %3.1f second run\n", length(tx_bit_stream), 115200,length(tx_bit_stream)/115200); + + % modulate and channel model + + tx = fsk_horus_mod(states, tx_bit_stream); + noise_real = sqrt(variance)*randn(length(tx),1); + noise_complex = sqrt(variance/2)*(randn(length(tx),1) + j*randn(length(tx),1)); + + % demodulate ----------------------------------------------------- + + if demod_type == 1 + + % Octave demod + + if states.tx_real + rx = tx + noise_real; + else + rx = tx + noise_complex; + end + SNRdB = 10*log10(var(tx)/var(noise_complex)); + + % demodulate frame by frame using Octave demod + + st = 1; + run_frames = floor(length(rx)/states.N); + rx_bit_stream = []; + rx_sd_stream = []; + for f=1:run_frames + + % extract nin samples from rx sample stream + + nin = states.nin; + en = st + states.nin - 1; + + if en <= length(rx) % due to nin variations its possible to overrun buffer + sf = rx(st:en); + st += nin; + + % demodulate to stream of bits + + states.f = [f1 f2]; % note that for Octave demod we cheat and use known tone frequencies + % allows us to determine if freq offset estimation in C demod is a problem + + [rx_bits states] = fsk_horus_demod(states, sf); + rx_bit_stream = [rx_bit_stream rx_bits]; + rx_sd_stream = [rx_sd_stream states.rx_bits_sd]; + end + end + end + + if demod_type == 2 + % baseline C demod + + if states.tx_real + rx = tx + noise_real; + else + rx = 2*real(tx) + noise_real; + end + SNRdB = 10*log10(var(tx)/var(noise_real)); + rx_scaled = 1000*real(rx); + f = fopen("fsk_demod.raw","wb"); fwrite(f, rx_scaled, "short"); fclose(f); + system("../build_linux/src/fsk_demod 2X 8 9600 1200 fsk_demod.raw fsk_demod.bin"); + f = fopen("fsk_demod.bin","rb"); rx_bit_stream = fread(f, "uint8")'; fclose(f); + end + + if demod_type == 3 + % C demod driven by csdr command line kung fu + + assert(states.tx_real == 0, "need complex signal for this test"); + rx = tx + noise_complex; + SNRdB = 10*log10(var(tx)/var(noise_real)); + save_rtlsdr("fsk_demod.iq", rx); + system("cat fsk_demod.iq | csdr convert_u8_f | csdr bandpass_fir_fft_cc 0.1 0.4 0.05 | csdr realpart_cf | csdr convert_f_s16 | ../build_linux/src/fsk_demod 2X 8 9600 1200 - fsk_demod.bin"); + f = fopen("fsk_demod.bin","rb"); rx_bit_stream = fread(f, "uint8")'; fclose(f); + end + + if demod_type == 4 + % C demod with resampler ....... getting closer to Mark's real time cmd line + + assert(states.tx_real == 0, "need complex signal for this test"); + rx = tx + noise_complex; + SNRdB = 10*log10(var(tx)/var(noise_real)); + + printf("resampling ...\n"); + rx_resample_fract = fractional_resample(rx, 1.08331); + %rx_resample_fract = fractional_resample(rx_resample_fract, 1/1.08331); + save_rtlsdr("fsk_demod_resample.iq", rx_resample_fract); + + printf("run C cmd line chain ...\n"); +% system("cat fsk_demod_resample.iq | csdr convert_u8_f | csdr bandpass_fir_fft_cc 0.1 0.4 0.05 | csdr realpart_cf | csdr convert_f_s16 | ../build_linux/src/fsk_demod 2X 8 9600 1200 - fsk_demod.bin"); + system("cat fsk_demod_resample.iq | csdr convert_u8_f | csdr bandpass_fir_fft_cc 0.1 0.4 0.05 | csdr realpart_cf | csdr convert_f_s16 | ../unittest/tsrc - - 0.9230968 | ../build_linux/src/fsk_demod 2X 8 9600 1200 - fsk_demod.bin"); +% system("cat fsk_demod_resample.iq | csdr convert_u8_f | csdr bandpass_fir_fft_cc 0.1 0.4 0.05 | csdr realpart_cf | csdr fractional_decimator_ff 1.08331 | csdr convert_f_s16 | ../build_linux/src/fsk_demod 2X 8 9600 1200 - fsk_demod.bin"); + f = fopen("fsk_demod.bin","rb"); rx_bit_stream = fread(f, "uint8")'; fclose(f); + end + + + if demod_type == 5 + + % C demod with resampler and use C code to measure PER, in this + % test we don't need to run state machine below as C code gives us + % the ouputs we need + + assert(states.tx_real == 0, "need complex signal for this test"); + rx = tx + noise_complex; + SNRdB = 10*log10(var(tx)/var(noise_real)); + + printf("fract resampling ...\n"); + rx_resample_fract = fractional_resample(rx, 1.08331); + save_rtlsdr("fsk_demod_resample.iq", rx_resample_fract); + + % useful for HackRF + %printf("10X resampling ...\n"); + %rx_resample_10M = resample(rx_resample_fract, 10, 1); + %save_rtlsdr("fsk_demod_10M.iq", rx_resample_10M); + + printf("run C cmd line chain - uncoded PER\n"); + system("cat fsk_demod_resample.iq | csdr convert_u8_f | csdr bandpass_fir_fft_cc 0.1 0.4 0.05 | csdr realpart_cf | csdr convert_f_s16 | ../unittest/tsrc - - 0.9230968 | ../build_linux/src/fsk_demod 2X 8 9600 1200 - - | ../src/drs232 - /dev/null -v"); + + printf("run C cmd line chain - LDPC coded PER\n"); + system("cat fsk_demod_resample.iq | csdr convert_u8_f | csdr bandpass_fir_fft_cc 0.1 0.4 0.05 | csdr realpart_cf | csdr convert_f_s16 | ../unittest/tsrc - - 0.9230968 | ../build_linux/src/fsk_demod 2XS 8 9600 1200 - - | ../src/drs232_ldpc - /dev/null -v"); + end + + if demod_type == 6 + % C demod with complex input driven simplfied csdr command line, just measure BER of demod + + assert(states.tx_real == 0, "need complex signal for this test"); + rx = tx + noise_complex; + SNRdB = 10*log10(var(tx)/var(noise_real)); + save_rtlsdr("fsk_demod.iq", rx); + system("cat fsk_demod.iq | csdr convert_u8_f | csdr convert_f_s16 | ../build_linux/src/fsk_demod 2X 8 9600 1200 - fsk_demod.bin C"); + + f = fopen("fsk_demod.bin","rb"); rx_bit_stream = fread(f, "uint8")'; fclose(f); + end + + if demod_type == 7 + % C demod with complex input, measure uncoded and uncoded PER + + assert(states.tx_real == 0, "need complex signal for this test"); + rx = tx + noise_complex; + SNRdB = 10*log10(var(tx)/var(noise_real)); + save_rtlsdr("fsk_demod.iq", rx); + + printf("run C cmd line chain - uncoded PER\n"); + system("cat fsk_demod.iq | csdr convert_u8_f | csdr convert_f_s16 | ../build_linux/src/fsk_demod 2X 8 9600 1200 - - C | ../src/drs232 - /dev/null -v"); + + printf("run C cmd line chain - LDPC coded PER\n"); + %system("cat fsk_demod.iq | csdr convert_u8_f | csdr convert_f_s16 | ../build_linux/src/fsk_demod 2XS 8 9600 1200 - - C | ../src/drs232_ldpc - /dev/null -v"); + system("cat fsk_demod.iq | ../build_linux/src/fsk_demod 2XS 8 9600 1200 - - CU8 | ../src/drs232_ldpc - /dev/null -v"); + end + + if (demod_type != 5) && (demod_type != 7) + % state machine. Look for SSTV UW. When found count bit errors over one frame of bits + + state = "wait for uw"; + start_uw_ind = 16*10+1; end_uw_ind = start_uw_ind + 5*10 - 1; + uw_rs232 = tx_codeword(start_uw_ind:end_uw_ind); luw = length(uw_rs232); + start_frame_ind = end_uw_ind + 1; + nbits = length(rx_bit_stream); + uw_thresh = 5; + n_uncoded_errs = 0; + n_uncoded_bits = 0; + n_packets_rx = 0; + last_i = 0; + + % might as well include RS232 framing bits in uncoded error count + + nbits_frame = code_param.data_bits_per_frame*10/8; + + uw_errs = zeros(1, nbits); + for i=luw:nbits + uw_errs(i) = sum(xor(rx_bit_stream(i-luw+1:i), uw_rs232)); + end + + for i=luw:nbits + next_state = state; + if strcmp(state, 'wait for uw') + if uw_errs(i) <= uw_thresh + next_state = 'count errors'; + tx_frame_ind = start_frame_ind; + rx_frame_ind = i + 1; + n_uncoded_errs_this_frame = 0; + %printf("%d %s %s\n", i, state, next_state); + if last_i + printf("i: %d i-last_i: %d ", i, i-last_i); + end + end + end + if strcmp(state, 'count errors') + n_uncoded_errs_this_frame += xor(rx_bit_stream(i), tx_codeword(tx_frame_ind)); + n_uncoded_bits++; + tx_frame_ind++; + if tx_frame_ind == (start_frame_ind+nbits_frame) + n_uncoded_errs += n_uncoded_errs_this_frame; + printf("n_uncoded_errs_this_frame: %d\n", n_uncoded_errs_this_frame); + frame_rx232_rx = rx_bit_stream(rx_frame_ind:rx_frame_ind+nbits_frame-1); + %tx_codeword(start_frame_ind+1:start_frame_ind+10) + %frame_rx232_rx(1:10) + sstv_checksum(frame_rx232_rx); + last_i = i; + n_packets_rx++; + next_state = 'wait for uw'; + end + end + state = next_state; + end + + uncoded_ber = n_uncoded_errs/n_uncoded_bits; + printf("EbNodB: %4.1f SNRdB: %4.1f pkts: %d bits: %d errs: %d BER: %4.3f\n", + EbNodB, SNRdB, n_packets_rx, n_uncoded_bits, n_uncoded_errs, uncoded_ber); + + figure(2); + plot(uw_errs); + title('Unique Word Hamming Distance') + end + +endfunction + + +% Function to test flight mode software. Takes a rx stream of +% demodulated bits, and locates frames using UW detection. Extracts +% data and parity bits. Uses data bits to generate parity bits here +% and compare. + +function compare_parity_bits(rx_bit_stream) + nframes = 500; + + % init LDPC code + + load('H2064_516_sparse.mat'); + HRA = full(HRA); + max_iterations = 100; + decoder_type = 0; + mod_order = 2; + + code_param = ldpc_init(HRA, mod_order); + + % generate frame, this will have random bits not related to + % rx_stream, however we just use it for the UW + + tx_codeword = gen_sstv_frame; + l = length(tx_codeword); + printf("expected rs232 frames codeword length: %d\n", l); + + % state machine. Look for SSTV UW. When found count bit errors over one frame of bits + + state = "wait for uw"; + start_uw_ind = 16*10+1; end_uw_ind = start_uw_ind + 4*10 - 1; + uw_rs232 = tx_codeword(start_uw_ind:end_uw_ind); luw = length(uw_rs232); + start_frame_ind = end_uw_ind + 1; + nbits = nframes*l; + uw_thresh = 5; + n_uncoded_errs = 0; + n_uncoded_bits = 0; + n_packets_rx = 0; + last_i = 0; + + % might as well include RS232 framing bits in uncoded error count + + uw_errs = luw*ones(1, nbits); + for i=luw:nbits + uw_errs(i) = sum(xor(rx_bit_stream(i-luw+1:i), uw_rs232)); + end + + frame_start = find(uw_errs < 2)+1; + nframes = length(frame_start) + for i=1:nframes + + % double check UW OK + + st_uw = frame_start(i) - luw; en_uw = frame_start(i) - 1; + uw_err_check = sum(xor(rx_bit_stream(st_uw:en_uw), uw_rs232)); + %printf("uw_err_check: %d\n", uw_err_check); + + % strip off rs232 start/stop bits + + nbits_rs232 = (256+2+65)*10; + nbits = (256+2+65)*8; + nbits_byte = 10; + rx_codeword = zeros(1,nbits); + pdb = 1; + + for k=1:nbits_byte:nbits_rs232 + for l=1:8 + rx_codeword(pdb) = rx_bit_stream(frame_start(i)-1+k+l); + pdb++; + end + end + assert(pdb == (nbits+1)); + + data_bits = rx_codeword(1:256*8); + checksum_bits = rx_codeword(256*8+1:258*8); + parity_bits = rx_codeword(258*8+1:258*8+516); + padding_bits = rx_codeword(258*8+516+1:258*8+516+1); + + % stopped here as we found bug lol! + end + + figure(1); clf; + plot(uw_errs); + title('Unique Word Hamming Distance') + figure(2); clf; + lframe_start = length(frame_start); + plot(frame_start(2:lframe_start)-frame_start(1:lframe_start-1)); + %title('Unique Word Hamming Distance') + +endfunction + + +% Start simulation -------------------------------------------------------- + +more off; +currentdir = pwd; +thiscomp = computer; + +if strcmpi(thiscomp, 'MACI64')==1 + if exist('CMLSimulate')==0 + cd '/Users/bill/Current/Projects/DLR_FSO/Visit2013_FSO_GEO/cml' + addpath '../' % assume the source files stored here + CmlStartup % note that this is not in the cml path! + disp('added MACI64 path and run CmlStartup') + end +end + +if strfind(thiscomp, 'pc-linux-gnu')==8 + if exist('LdpcEncode')==0, + cd '~/tmp/cml' + CmlStartup + disp('CmlStartup has been run') + % rmpath '/home/bill/cml/mexhelp' % why is this needed? + % maybe different path order in octave cf matlab ? + end +end + +cd(currentdir) + +ldpc_fsk_lib; +randn('state',1); +rand('state',1); + +% ------------------ select which demo/test to run here --------------- + +demo = 12; + +if demo == 1 + printf("simple_ut....\n"); + data = simple_ut; +end + +if demo == 2 + printf("generate C header file....\n"); + data = simple_ut("../src/H2064_516_sparse.h"); +end + +if demo == 3 + printf("decode_from_file ......\n"); + data = simple_ut; + detected_data = decode_from_file("codeword.bin"); + error_positions = xor( detected_data(1:length(data)), data ); + Nerrs = sum(error_positions); + printf(" Nerrs = %d\n", Nerrs); +end + +if demo == 4 + printf("plot a curve....\n"); + plot_curve; +end + +if demo == 5 + + % generate test data and save to disk + + [data code_param] = simple_ut; + f = fopen("dat_in2064.bin","wb"); fwrite(f, data, "uint8"); fclose(f); + + % Outboard C encoder + + system("../src/ldpc_enc dat_in2064.bin dat_op2064.bin"); + + % Test with Octave decoder + + detected_data = decode_from_file("dat_op2064.bin"); + error_positions = xor(detected_data(1:length(data)), data); + Nerrs = sum(error_positions); + printf("Nerrs = %d\n", Nerrs); +end + +if demo == 6 + test_c_encoder; +end + +if demo == 7 + test_c_decoder; +end + +% generates simulated demod soft decision symbols to drive C ldpc decoder with + +if demo == 8 + frames = 100; + EsNodB = 3; + EsNo = 10^(EsNodB/10); + variance = 1/(2*EsNo); + + frame_rs232 = []; + for i=1:frames + frame_rs232 = [frame_rs232 gen_sstv_frame]; + end + + % write hard decn version to disk file, useful for fsk_mod input + + f = fopen("sstv.bin","wb"); fwrite(f, frame_rs232, "char"); fclose(f); + + % soft decision version (with noise) + + s = 1 - 2*frame_rs232; + noise = sqrt(variance)*randn(1,length(frame_rs232)); + r = s + noise; + f = fopen("sstv_sd.bin","wb"); fwrite(f, r, "float32"); fclose(f); +end + + +if demo == 9 + frames = 100; + EbNodB = 11; + + frame_rs232 = []; + for i=1:frames + frame_rs232 = [frame_rs232 gen_sstv_frame]; + end + + % Use C FSK modulator to generate modulated signal + + f = fopen("sstv.bin","wb"); fwrite(f, frame_rs232, "char"); fclose(f); + system("../build_linux/src/fsk_mod 2 9600 1200 1200 2400 sstv.bin fsk_mod.raw"); + + % Add some channel noise here in Octave + + f = fopen("fsk_mod.raw","rb"); tx = fread(f, "short")'; fclose(f); tx_pwr = var(tx); + Fs = 9600; Rs=1200; EbNolin = 10 ^ (EbNodB/10); + variance = (tx_pwr/2)*states.Fs/(states.Rs*EbNolin*states.bitspersymbol); + noise = sqrt(variance)*randn(1,length(tx)); + SNRdB = 10*log10(var(tx)/var(noise)); + rx = tx + noise; + f = fopen("fsk_demod.raw","wb"); tx = fwrite(f, rx, "short"); fclose(f); + + % Demodulate using C modem and C de-framer/LDPC decoder + + system("../build_linux/src/fsk_demod 2XS 8 9600 1200 fsk_demod.raw - | ../src/drs232_ldpc - dummy_out.bin"); +end + + +% Plots uncoded BER curves for two different SSTV simulations. Used +% to compare results with different processing steps as we build up C +% command line. BER curves are powerful ways to confirm system is +% operating as expected, several bugs were found using this system. + +if demo == 10 + sim_in.frames = 10; + EbNodBvec = 7:10; + + sim_in.demod_type = 3; + ber_test1 = []; + for i = 1:length(EbNodBvec) + [n_uncoded_errs n_uncoded_bits] = run_sstv_sim(sim_in, EbNodBvec(i)); + ber_test1(i) = n_uncoded_errs/n_uncoded_bits; + end + + sim_in.demod_type = 4; + ber_c = []; + for i = 1:length(EbNodBvec) + [n_uncoded_errs n_uncoded_bits] = run_sstv_sim(sim_in, EbNodBvec(i)); + ber_test2(i) = n_uncoded_errs/n_uncoded_bits; + end + + figure(1); + clf; + semilogy(EbNodBvec, ber_test1, '+-;first test;') + grid; + xlabel('Eb/No (dB)') + ylabel('BER') + + hold on; + semilogy(EbNodBvec, ber_test2, 'g+-;second test;') + legend("boxoff"); + hold off; + +end + +% Measure PER of complete coded and uncoded system + +if demo == 11 + sim_in.frames = 10; + EbNodB = 9; + sim_in.demod_type = 7; + run_sstv_sim(sim_in, EbNodB); +end + + +% Compare parity bits from an off-air stream of demodulated bits +% Use something like: +% cat ~/Desktop/923096fs_wenet.iq | ../build_linux/src/fsk_demod 2X 8 9600 1200 - fsk_demod.bin CU8 +% (note not soft dec mode) +if demo == 12 + f = fopen("fsk_demod.bin","rb"); rx_bit_stream = fread(f, "uint8")'; fclose(f); + + compare_parity_bits(rx_bit_stream); +end diff --git a/libcodec2-android/src/codec2/octave/tfdmdv.m b/libcodec2-android/src/codec2/octave/tfdmdv.m new file mode 100644 index 0000000..5074d7f --- /dev/null +++ b/libcodec2-android/src/codec2/octave/tfdmdv.m @@ -0,0 +1,307 @@ +% tfdmdv.m +% +% Octave script that tests the C port of the FDMDV modem. This script loads +% the output of unittest/tfdmdv.c and compares it to the output of the +% reference versions of the same functions written in Octave. +% +% Usage: +% +% 1/ In codec2-dev/CMakeLists.txt, ensure set(CMAKE_BUILD_TYPE "Debug"), to +% enable building the C unittests. Build codec2-dev as per +% codec2-dev/README. +% +% 2/ Run the C side from the Octave directory: +% +% codec2-dev/octave$ ../build_linux/unittest/tfdmdv +% codec2-dev/octave$ ls -l tfdmdv_out.txt +% -rw-rw-r-- 1 david david 3419209 Aug 27 10:05 tfdmdv_out.txt +% +% 3/ Run the Octave side (this script): +% +% octave:1> tfdmdv +% + +% +% Copyright David Rowe 2012 +% This program is distributed under the terms of the GNU General Public License +% Version 2 +% + +more off +format + +fdmdv; % load modem code +autotest; % automatic testing library + + +% init fdmdv modem states and load up a few constants in this scope for convenience + +f = fdmdv_init; +Nc = f.Nc; +Nb = f.Nb; +M = f.M; +Fs = f.Fs; +P = f.P; +Q = f.Q; + +% Generate reference vectors using Octave implementation of FDMDV modem + +global passes = 0; +global fails = 0; +frames = 35; +prev_tx_symbols = ones(Nc+1,1); prev_tx_symbols(Nc+1) = 2; +prev_rx_symbols = ones(Nc+1,1); +foff_phase_rect = 1; +channel = []; +channel_count = 0; +next_nin = M; +sig_est = zeros(Nc+1,1); +noise_est = zeros(Nc+1,1); + +sync = 0; +fest_state = 0; +fest_timer = 0; +sync_mem = zeros(1,f.Nsync_mem); + +% Octave outputs we want to collect for comparison to C version + +tx_bits_log = []; +tx_symbols_log = []; +tx_baseband_log = []; +tx_fdm_log = []; +pilot_baseband1_log = []; +pilot_baseband2_log = []; +pilot_lpf1_log = []; +pilot_lpf2_log = []; +S1_log = []; +S2_log = []; +foff_coarse_log = []; +foff_fine_log = []; +foff_log = []; +rx_fdm_filter_log = []; +rx_filt_log = []; +env_log = []; +rx_timing_log = []; +phase_difference_log = []; +rx_symbols_log = []; +rx_bits_log = []; +sync_bit_log = []; +sync_log = []; +nin_log = []; +sig_est_log = []; +noise_est_log = []; + +% adjust this if the screen is getting a bit cluttered + +global no_plot_list = [1 2 3 4 5 6 7 8 12 13 14 15 16]; + +for fr=1:frames + + % modulator + + [tx_bits f] = get_test_bits(f, Nc*Nb); + tx_bits_log = [tx_bits_log tx_bits]; + [tx_symbols f] = bits_to_psk(f, prev_tx_symbols, tx_bits, 'dqpsk'); + prev_tx_symbols = tx_symbols; + tx_symbols_log = [tx_symbols_log tx_symbols]; + [tx_baseband f] = tx_filter(f, tx_symbols); + tx_baseband_log = [tx_baseband_log tx_baseband]; + [tx_fdm f] = fdm_upconvert(f, tx_baseband); + tx_fdm_log = [tx_fdm_log tx_fdm]; + + % channel + + nin = next_nin; + + % nin = M; % when debugging good idea to uncomment this to "open loop" + + channel = [channel real(tx_fdm)]; + channel_count += M; + rx_fdm = channel(1:nin); + channel = channel(nin+1:channel_count); + channel_count -= nin; + + % demodulator -------------------------------------------- + + % shift down to complex baseband + + for i=1:nin + f.fbb_phase_rx = f.fbb_phase_rx*f.fbb_rect'; + rx_fdm(i) = rx_fdm(i)*f.fbb_phase_rx; + end + mag = abs(f.fbb_phase_rx); + f.fbb_phase_rx /= mag; + + % sync = 0; % when debugging good idea to uncomment this to "open loop" + + [pilot prev_pilot f.pilot_lut_index f.prev_pilot_lut_index] = get_pilot(f, f.pilot_lut_index, f.prev_pilot_lut_index, nin); + [foff_coarse S1 S2 f] = rx_est_freq_offset(f, rx_fdm, pilot, prev_pilot, nin, !sync); + + if sync == 0 + foff = foff_coarse; + end + foff_coarse_log = [foff_coarse_log foff_coarse]; + + pilot_baseband1_log = [pilot_baseband1_log f.pilot_baseband1]; + pilot_baseband2_log = [pilot_baseband2_log f.pilot_baseband2]; + pilot_lpf1_log = [pilot_lpf1_log f.pilot_lpf1]; + pilot_lpf2_log = [pilot_lpf2_log f.pilot_lpf2]; + S1_log = [S1_log S1]; + S2_log = [S2_log S2]; + + foff_rect = exp(j*2*pi*foff/Fs); + + for i=1:nin + foff_phase_rect *= foff_rect'; + rx_fdm_fcorr(i) = rx_fdm(i)*foff_phase_rect; + end + + [rx_fdm_filter f] = rxdec_filter(f, rx_fdm_fcorr, nin); + [rx_filt f] = down_convert_and_rx_filter(f, rx_fdm_filter, nin, M/Q); + #{ + for i=1:5 + printf("[%d] rx_fdm_fcorr: %f %f rx_fdm_filter: %f %f\n", i, + real(rx_fdm_fcorr(i)), imag(rx_fdm_fcorr(i)), real(rx_fdm_filter(i)), imag(rx_fdm_filter(i))); + end + for i=1:5 + printf("[%d] rx_fdm_fcorr: %f %f rxdec_lpf_mem: %f %f\n", i, + real(rx_fdm_fcorr(i)), imag(rx_fdm_fcorr(i)), real(f.rxdec_lpf_mem(i)), imag(f.rxdec_lpf_mem(i))); + end + #} + rx_filt_log = [rx_filt_log rx_filt]; + rx_fdm_filter_log = [rx_fdm_filter_log rx_fdm_filter]; + + [rx_symbols rx_timing env f] = rx_est_timing(f, rx_filt, nin); + env_log = [env_log env]; + rx_timing_log = [rx_timing_log rx_timing]; + rx_symbols_log = [rx_symbols_log rx_symbols]; + + next_nin = M; + if rx_timing > 2*M/P + next_nin += M/P; + end + if rx_timing < 0; + next_nin -= M/P; + end + nin_log = [nin_log nin]; + + [rx_bits sync_bit foff_fine pd] = psk_to_bits(f, prev_rx_symbols, rx_symbols, 'dqpsk'); + phase_difference_log = [phase_difference_log pd]; + + foff_fine_log = [foff_fine_log foff_fine]; + foff -= 0.5*foff_fine; + foff_log = [foff_log foff]; + + [sig_est noise_est] = snr_update(f, sig_est, noise_est, pd); + sig_est_log = [sig_est_log sig_est]; + noise_est_log = [noise_est_log noise_est]; + + prev_rx_symbols = rx_symbols; + rx_bits_log = [rx_bits_log rx_bits]; + sync_bit_log = [sync_bit_log sync_bit]; + + % freq est state machine + + [sync reliable_sync_bit fest_state fest_timer sync_mem] = freq_state(f, sync_bit, fest_state, fest_timer, sync_mem); + sync_log = [sync_log sync]; +end + +% Compare to the output from the C version + +load tfdmdv_out.txt + + +% --------------------------------------------------------------------------------------- +% Plot output and test each C function +% --------------------------------------------------------------------------------------- + +% fdmdv_get_test_bits() & bits_to_dqpsk_symbols() + +n = 28; +stem_sig_and_error(1, 211, tx_bits_log_c(1:n), tx_bits_log(1:n) - tx_bits_log_c(1:n), 'tx bits', [1 n -1.5 1.5]) +stem_sig_and_error(1, 212, real(tx_symbols_log_c(1:n/2)), real(tx_symbols_log(1:n/2) - tx_symbols_log_c(1:n/2)), 'tx symbols real', [1 n/2 -1.5 1.5]) + +% fdm_upconvert() + +plot_sig_and_error(3, 211, real(tx_fdm_log_c), real(tx_fdm_log - tx_fdm_log_c), 'tx fdm real') +plot_sig_and_error(3, 212, imag(tx_fdm_log_c), imag(tx_fdm_log - tx_fdm_log_c), 'tx fdm imag') + +% generate_pilot_lut() + +plot_sig_and_error(4, 211, real(pilot_lut_c), real(f.pilot_lut - pilot_lut_c), 'pilot lut real') +plot_sig_and_error(4, 212, imag(pilot_lut_c), imag(f.pilot_lut - pilot_lut_c), 'pilot lut imag') + +% rx_est_freq_offset() + +st=1; en = 5*f.Npilotbaseband; +plot_sig_and_error(5, 211, real(pilot_baseband1_log(st:en)), real(pilot_baseband1_log(st:en) - pilot_baseband1_log_c(st:en)), 'pilot baseband1 real' ) +plot_sig_and_error(5, 212, real(pilot_baseband2_log(st:en)), real(pilot_baseband2_log(st:en) - pilot_baseband2_log_c(st:en)), 'pilot baseband2 real' ) + +st=1; en = 5*f.Npilotlpf; +plot_sig_and_error(6, 211, real(pilot_lpf1_log(st:en)), real(pilot_lpf1_log(st:en) - pilot_lpf1_log_c(st:en)), 'pilot lpf1 real' ) +plot_sig_and_error(6, 212, real(pilot_lpf2_log(st:en)), real(pilot_lpf2_log(st:en) - pilot_lpf2_log_c(st:en)), 'pilot lpf2 real' ) + +plot_sig_and_error(7, 211, real(S1_log), real(S1_log - S1_log_c), 'S1 real' ) +plot_sig_and_error(7, 212, imag(S1_log), imag(S1_log - S1_log_c), 'S1 imag' ) + +plot_sig_and_error(8, 211, real(S2_log), real(S2_log - S2_log_c), 'S2 real' ) +plot_sig_and_error(8, 212, imag(S2_log), imag(S2_log - S2_log_c), 'S2 imag' ) + +plot_sig_and_error(9, 211, foff_coarse_log, foff_coarse_log - foff_coarse_log_c, 'Coarse Freq Offset' ) +plot_sig_and_error(9, 212, foff_fine_log, foff_fine_log - foff_fine_log_c, 'Fine Freq Offset' ) + +plot_sig_and_error(10, 211, foff_log, foff_log - foff_log_c, 'Freq Offset' ) +plot_sig_and_error(10, 212, sync_log, sync_log - sync_log_c, 'Sync & Freq Est Coarse(0) Fine(1)', [1 frames -1.5 1.5] ) + +plot_sig_and_error(11, 211, real(rx_fdm_filter_log), real(rx_fdm_filter_log - rx_fdm_filter_log_c), 'Rx dec filter real' ) +plot_sig_and_error(11, 212, imag(rx_fdm_filter_log), imag(rx_fdm_filter_log - rx_fdm_filter_log_c), 'Rx dec filter imag' ) + +c=1; +plot_sig_and_error(12, 211, real(rx_filt_log(c,:)), real(rx_filt_log(c,:) - rx_filt_log_c(c,:)), 'Rx filt real' ) +plot_sig_and_error(12, 212, imag(rx_filt_log(c,:)), imag(rx_filt_log(c,:) - rx_filt_log_c(c,:)), 'Rx filt imag' ) + +st=1*28; +en = 3*28; +plot_sig_and_error(14, 211, rx_timing_log, rx_timing_log - rx_timing_log_c, 'Rx Timing' ) +stem_sig_and_error(14, 212, sync_bit_log_c, sync_bit_log - sync_bit_log_c, 'Sync bit', [1 n -1.5 1.5]) + +stem_sig_and_error(15, 211, rx_bits_log_c(st:en), rx_bits_log(st:en) - rx_bits_log_c(st:en), 'RX bits', [1 en-st -1.5 1.5]) +stem_sig_and_error(15, 212, nin_log_c, nin_log - nin_log_c, 'nin') + +c = 12; +plot_sig_and_error(16, 211, sig_est_log(c,:), sig_est_log(c,:) - sig_est_log_c(c,:), 'sig est for SNR' ) +plot_sig_and_error(16, 212, noise_est_log(c,:), noise_est_log(c,:) - noise_est_log_c(c,:), 'noise est for SNR' ) + +fr=12; + +stem_sig_and_error(13, 211, real(rx_symbols_log(:,fr)), real(rx_symbols_log(:,fr) - rx_symbols_log_c(:,fr)), 'rx symbols real' ) +stem_sig_and_error(13, 212, imag(rx_symbols_log(:,fr)), imag(rx_symbols_log(:,fr) - rx_symbols_log_c(:,fr)), 'rx symbols imag' ) + +stem_sig_and_error(17, 211, real(phase_difference_log(:,fr)), real(phase_difference_log(:,fr) - phase_difference_log_c(:,fr)), 'phase difference real' ) +stem_sig_and_error(17, 212, imag(phase_difference_log(:,fr)), imag(phase_difference_log(:,fr) - phase_difference_log_c(:,fr)), 'phase difference imag' ) + + +check(tx_bits_log, tx_bits_log_c, 'tx_bits'); +check(tx_symbols_log, tx_symbols_log_c, 'tx_symbols'); +check(tx_fdm_log, tx_fdm_log_c, 'tx_fdm'); +check(f.pilot_lut, pilot_lut_c, 'pilot_lut'); +check(f.pilot_coeff, pilot_coeff_c, 'pilot_coeff'); +check(pilot_baseband1_log, pilot_baseband1_log_c, 'pilot lpf1'); +check(pilot_baseband2_log, pilot_baseband2_log_c, 'pilot lpf2'); +check(S1_log, S1_log_c, 'S1'); +check(S2_log, S2_log_c, 'S2'); +check(foff_coarse_log, foff_coarse_log_c, 'foff_coarse'); +check(foff_fine_log, foff_fine_log_c, 'foff_fine'); +check(foff_log, foff_log_c, 'foff'); +check(rx_fdm_filter_log, rx_fdm_filter_log_c, 'rxdec filter'); +check(rx_filt_log, rx_filt_log_c, 'rx filt', 2E-3); +check(env_log, env_log_c, 'env'); +check(rx_timing_log, rx_timing_log_c, 'rx_timing'); +check(rx_symbols_log, rx_symbols_log_c, 'rx_symbols', 2E-3); +check(rx_bits_log, rx_bits_log_c, 'rx bits'); +check(sync_bit_log, sync_bit_log_c, 'sync bit'); +check(sync_log, sync_log_c, 'sync'); +check(nin_log, nin_log_c, 'nin'); +check(sig_est_log, sig_est_log_c, 'sig_est'); +check(noise_est_log, noise_est_log_c, 'noise_est'); +printf("\npasses: %d fails: %d\n", passes, fails); diff --git a/libcodec2-android/src/codec2/octave/tfmfsk.m b/libcodec2-android/src/codec2/octave/tfmfsk.m new file mode 100644 index 0000000..f2d096b --- /dev/null +++ b/libcodec2-android/src/codec2/octave/tfmfsk.m @@ -0,0 +1,497 @@ +% tfsk.m +% Author: Brady O'Brien 8 February 2016 + + + +% Copyright 2016 David Rowe +% +% All rights reserved. +% +% This program is free software; you can redistribute it and/or modify +% it under the terms of the GNU Lesser General Public License version 2.1, as +% published by the Free Software Foundation. This program is +% distributed in the hope that it will be useful, but WITHOUT ANY +% WARRANTY; without even the implied warranty of MERCHANTABILITY or +% FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public +% License for more details. +% +% You should have received a copy of the GNU Lesser General Public License +% along with this program; if not, see . + + +% Octave script to check c port of mancyfsk/fmfsk against the fmfsk.m +% +#{ + + FMFSK Modem automated test instructions: + + 1. Use cmake to build in debug mode to ensure unittest/tfsk is built: + + $ cd ~/codec2 + $ rm -Rf build_linux && mkdir build_linux + $ cd build_linux + $ cmake -DCMAKE_BUILD_TYPE=Debug .. + $ make + + 2 - Change tfsk_location below if required + 3 - Ensure Octave packages signal and parallel are installed + 4 - Start Octave and run tfsk.m. It will perform all tests automatically + +#} + +%tfsk executable path/file +global tfsk_location = '../build_linux/unittest/tfmfsk'; + +%Set to 1 for verbose printouts +global print_verbose = 0; + + + +fmfsk +pkg load signal; +pkg load parallel; +graphics_toolkit('gnuplot'); + + +global mod_pass_fail_maxdiff = 1e-3/5000; + +function mod = fmfsk_mod_c(Fs,Rs,bits) + global tfsk_location; + %command to be run by system to launch the modulator + command = sprintf('%s M %d %d fsk_mod_ut_bitvec fsk_mod_ut_modvec fmfsk_mod_ut_log.txt',tfsk_location,Fs,Rs); + %save input bits into a file + bitvecfile = fopen('fsk_mod_ut_bitvec','wb+'); + fwrite(bitvecfile,bits,'uint8'); + fclose(bitvecfile); + + %run the modulator + system(command); + + modvecfile = fopen('fsk_mod_ut_modvec','rb'); + mod = fread(modvecfile,'single'); + fclose(modvecfile); + +endfunction + + +%Compare 2 vectors, fail if they are not close enough +function pass = vcompare(vc,voct,vname,tname,tol,pnum) + global print_verbose; + + %Get delta of vectors + dvec = abs(abs(vc)-abs(voct)); + + %Normalize difference + dvec = dvec ./ abs(max(abs(voct))+1e-8); + + maxdvec = abs(max(dvec)); + pass = maxdvec=states.nin + ninold = states.nin; + [bitbuf,states] = fmfsk_demod(states, modin(1:states.nin)); + modin=modin(ninold+1:length(modin)); + obits = [obits bitbuf]; + + o_norm_rx_timing = [o_norm_rx_timing states.norm_rx_timing]; + o_symsamp = [o_symsamp states.symsamp]; + o_rx_filt = [o_rx_filt states.rx_filt]; + + end + + close all + pass = 1; + + % One part-per-thousand allowed on important parameters + + pass = vcompare(t_rx_filt,o_rx_filt,'rx filt',tname,.001,8) && pass; + pass = vcompare(t_norm_rx_timing,o_norm_rx_timing,'norm rx timing',tname,.001,9) && pass; + pass = vcompare(t_symsamp,o_symsamp,'symsamp',tname,.001,10) && pass; + + assert(pass); + diffpass = sum(xor(obits,bits'))<4; + diffbits = sum(xor(obits,bits')); + + + if diffpass==0 + printf('\n***bitcompare test failed test %s diff %d\n\n',tname,sum(xor(obits,bits'))) + figure(15) + plot(xor(obits,bits')) + title(sprintf('Bitcompare failure test %s',tname)) + end + + pass = pass && diffpass; + + + test_stats.pass = pass; + test_stats.diff = sum(xor(obits,bits')); + test_stats.cbits = bits'; + test_stats.obits = obits; + +endfunction + +function [dmod,cmod,omod,pass] = fmfsk_mod_test(Fs,Rs,bits,tname,M=2) + global mod_pass_fail_maxdiff; + %Run the C modulator + cmod = fmfsk_mod_c(Fs,Rs,bits); + %Set up and run the octave modulator + states.M = M; + states = fmfsk_init(Fs,Rs); + + + omod = fmfsk_mod(states,bits)'; + + dmod = cmod-omod; + pass = max(dmod)<(mod_pass_fail_maxdiff*length(dmod)); + if !pass + printf('Mod failed test %s!\n',tname); + end +endfunction + +% Random bit modulator test +% Pass random bits through the modulators and compare +function pass = test_mod_fdvbcfg_randbits + rand('state',1); + randn('state',1); + bits = rand(1,19200)>.5; + [dmod,cmod,omod,pass] = fmfsk_mod_test(48000,2400,bits,"mod fdvbcfg randbits"); + + if(!pass) + figure(1) + plot(dmod) + title("Difference between octave and C mod impl"); + end + +endfunction + +% run_sim copypasted from fsk_horus.m +% simulation of tx and rx side, add noise, channel impairments ---------------------- + +function stats = tfmfsk_run_sim(EbNodB,timing_offset=0,de=0,of=0,hpf=0,df=0,M=2) + global print_verbose; + test_frame_mode = 2; + frames = 70; + %EbNodB = 3; + %timing_offset = 0.0; % see resample() for clock offset below + %fading = 0; % modulates tx power at 2Hz with 20dB fade depth, + % to simulate balloon rotating at end of mission + + more off + rand('state',1); + randn('state',1); + + Fs = 48000; + Rbit = 2400; + + % ---------------------------------------------------------------------- + + fm_states.pre_emp = 0; + fm_states.de_emp = de; + fm_states.Ts = Fs/(Rbit*2); + fm_states.Fs = Fs; + fm_states.fc = Fs/4; + fm_states.fm_max = 3E3; + fm_states.fd = 5E3; + fm_states.output_filter = of; + fm_states = analog_fm_init(fm_states); + + % ---------------------------------------------------------------------- + + states = fmfsk_init(Fs,Rbit); + + states.verbose = 0x1; + Rs = states.Rs; + nsym = states.nsym; + Fs = states.Fs; + nbit = states.nbit; + + EbNo = 10^(EbNodB/10); + variance = states.Fs/(states.Rb*EbNo); + + % set up tx signal with payload bits based on test mode + + if test_frame_mode == 1 + % test frame of bits, which we repeat for convenience when BER testing + test_frame = round(rand(1, states.nbit)); + tx_bits = []; + for i=1:frames+1 + tx_bits = [tx_bits test_frame]; + end + end + if test_frame_mode == 2 + % random bits, just to make sure sync algs work on random data + tx_bits = round(rand(1, states.nbit*(frames+1))); + end + if test_frame_mode == 3 + % repeating sequence of all symbols + % great for initial test of demod if nothing else works, + % look for this pattern in rx_bits + + % ...10101... + tx_bits = zeros(1, states.nbit*(frames+1)); + tx_bits(1:2:length(tx_bits)) = 1; + + end + + [b, a] = cheby1(4, 1, 300/Fs, 'high'); % 300Hz HPF to simulate FM radios + + tx_pmod = fmfsk_mod(states, tx_bits); + + tx = analog_fm_mod(fm_states, tx_pmod); + + if(timing_offset>0) + tx = resample(tx, 2000, 1999); % simulated 1000ppm sample clock offset + end + + %Add frequency drift + fdrift = df/Fs; + fshift = 2*pi*fdrift*(1:length(tx)); + fshift = exp(j*(fshift.^2)); + tx = tx.*fshift; + noise = sqrt(variance)*randn(length(tx),1); + rx = tx + noise'; + + %Demod by analog fm + rx = analog_fm_demod(fm_states, rx); + + %High-pass filter to simulate the FM radios + if hpf>0 + rx = filter(b,a,rx); + end + + timing_offset_samples = round(timing_offset*states.Ts); + st = 1 + timing_offset_samples; + rx_bits_buf = zeros(1,2*nbit); + + test_name = sprintf("tfmfsk run sim EbNodB:%d frames:%d timing_offset:%d df:%d",EbNodB,frames,timing_offset,df); + tstats = fmfsk_demod_xt(Fs,Rbit,rx',test_name,M); + + pass = tstats.pass; + obits = tstats.obits; + cbits = tstats.cbits; + + % Figure out BER of octave and C modems + bitcnt = length(tx_bits); + rx_bits = obits; + ber = 1; + ox = 1; + for offset = (1:400) + nerr = sum(xor(rx_bits(offset:length(rx_bits)),tx_bits(1:length(rx_bits)+1-offset))); + bern = nerr/(bitcnt-offset); + if(bern < ber) + ox = offset; + best_nerr = nerr; + end + ber = min([ber bern]); + end + offset = ox; + bero = ber; + ber = 1; + rx_bits = cbits; + ox = 1; + for offset = (1:400) + nerr = sum(xor(rx_bits(offset:length(rx_bits)),tx_bits(1:length(rx_bits)+1-offset))); + bern = nerr/(bitcnt-offset); + if(bern < ber) + ox = offset; + best_nerr = nerr; + end + ber = min([ber bern]); + end + offset = ox; + berc = ber; + + if print_verbose == 1 + printf("C BER %f in test %s\n",berc,test_name); + printf("Oct BER %f in test %s\n",bero,test_name); + end + + stats.berc = berc; + stats.bero = bero; + stats.name = test_name; + % non-coherent BER theory calculation + % It was complicated, so I broke it up + + ms = 2; + ns = (1:ms-1); + as = (-1).^(ns+1); + bs = (as./(ns+1)); + + cs = ((ms-1)./ns); + + ds = ns.*log2(ms); + es = ns+1; + fs = exp( -(ds./es)*EbNo ); + + thrncoh = ((ms/2)/(ms-1)) * sum(bs.*((ms-1)./ns).*exp( -(ds./es)*EbNo )); + + stats.thrncoh = thrncoh; + stats.pass = pass; + endfunction + + +function pass = ebno_battery_test(timing_offset,drift,hpf,deemp,outfilt) + global print_verbose; + %Range of EbNodB over which to test + ebnodbrange = (8:2:20); + ebnodbs = length(ebnodbrange); + + %Replication of other parameters for parcellfun + timingv = repmat(timing_offset ,1,ebnodbs); + driftv = repmat(drift ,1,ebnodbs); + hpfv = repmat(hpf ,1,ebnodbs); + deempv = repmat(deemp ,1,ebnodbs); + outfv = repmat(outfilt ,1,ebnodbs); + + statv = pararrayfun(floor(.75*nproc()),@tfmfsk_run_sim,ebnodbrange,timingv,deempv,outfv,hpfv,driftv); + %statv = arrayfun(@tfsk_run_sim,modev,ebnodbrange,timingv,fadingv,dfv,dav,mv); + + passv = zeros(1,length(statv)); + for ii=(1:length(statv)) + passv(ii)=statv(ii).pass; + if statv(ii).pass + printf("Test %s passed\n",statv(ii).name); + else + printf("Test %s failed\n",statv(ii).name); + end + end + + %All pass flags are '1' + pass = sum(passv)>=length(passv); + %and no tests died + pass = pass && length(passv)==ebnodbs; + passv; + assert(pass) +endfunction + +%Test with and without sample clock offset +function pass = test_timing_var(drift,hpf,deemp,outfilt) + pass = ebno_battery_test(1,drift,hpf,deemp,outfilt) + assert(pass) + pass = ebno_battery_test(0,drift,hpf,deemp,outfilt) + assert(pass) +endfunction + +%Test with and without 1 Hz/S freq drift +function pass = test_drift_var(hpf,deemp,outfilt) + pass = test_timing_var(1,hpf,deemp,outfilt) + assert(pass) + pass = pass && test_timing_var(0,hpf,deemp,outfilt) + assert(pass) +endfunction + +function pass = test_fmfsk_battery() + pass = test_mod_fdvbcfg_randbits; + assert(pass) + pass = pass && test_drift_var(1,1,1); + assert(pass) + if pass + printf("***** All tests passed! *****\n"); + end +endfunction + +function plot_fmfsk_bers(M=2) + %Range of EbNodB over which to test + ebnodbrange = (8:14); + ebnodbs = length(ebnodbrange); + + %Replication of other parameters for parcellfun + %Turn on all of the impairments + timingv = repmat(1 ,1,ebnodbs); + driftv = repmat(1 ,1,ebnodbs); + hpfv = repmat(1 ,1,ebnodbs); + deempv = repmat(1 ,1,ebnodbs); + outfv = repmat(1 ,1,ebnodbs); + + statv = pararrayfun(nproc(),@tfmfsk_run_sim,ebnodbrange,timingv,deempv,outfv,hpfv,driftv); + %statv = arrayfun(@tfsk_run_sim,modev,ebnodbrange,timingv,fadingv,dfv,dav,Mv); + + for ii = (1:length(statv)) + stat = statv(ii); + berc(ii)=stat.berc; + bero(ii)=stat.bero; + berinc(ii)=stat.thrncoh; + end + clf; + figure(M) + + semilogy(ebnodbrange, berinc,sprintf('r;2FSK non-coherent theory;',M)) + hold on; + semilogy(ebnodbrange, bero ,sprintf('g;Octave ME-FM-FSK Demod;',M)) + semilogy(ebnodbrange, berc,sprintf('v;C ME-FM-FSK Demod;',M)) + hold off; + grid("minor"); + axis([min(ebnodbrange) max(ebnodbrange) 1E-5 1]) + legend("boxoff"); + xlabel("Eb/No (dB)"); + ylabel("Bit Error Rate (BER)") + +endfunction + +xpass = test_fmfsk_battery +plot_fmfsk_bers(2) + +if xpass + printf("***** All tests passed! *****\n"); +else + printf("***** Some test failed! Look back thorugh output to find failed test *****\n"); +end diff --git a/libcodec2-android/src/codec2/octave/tfsk.m b/libcodec2-android/src/codec2/octave/tfsk.m new file mode 100644 index 0000000..d729393 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/tfsk.m @@ -0,0 +1,611 @@ +% tfsk.m +% Brady O'Brien 8 January 2016 +% David Rowe May 2020 +% +% Automatic testing of C port of FSK modem by comparing to reference +% Octave version. Currently just a subset of tests enabled in order to +% run in a reasonable amount of time as ctests, but still trapping any +% bit-rot. + +#{ + + FSK Modem automated test instructions: + + 1. Use cmake to build in debug mode to ensure unittest/tfsk is built: + + $ cd ~/codec2 + $ rm -Rf build_linux && mkdir build_linux + $ cd build_linux + $ cmake -DCMAKE_BUILD_TYPE=Debug .. + $ make + + 2 - Change tfsk_location below if required + 3 - Ensure Octave packages are installed + 4 - Start Octave and run tfsk.m. It will perform all tests automatically + +#} + +% tfsk executable path/file +if getenv("PATH_TO_TFSK") + global tfsk_location = getenv("PATH_TO_TFSK") + printf("setting tfsk_location from env var: %s\n", getenv("PATH_TO_TFSK")); +else + global tfsk_location = '../build_linux/unittest/tfsk'; +end + +% Set to 1 for verbose printouts +global print_verbose = 0; +global mod_pass_fail_maxdiff = 1e-3/5000; + +fsk_horus_as_a_lib=1; +fsk_horus; +pkg load signal; +% not needed unless parallel tests running +%pkg load parallel; +graphics_toolkit('gnuplot'); + +function print_result(test_name, result) + printf("%s", test_name); + for i=1:(40-length(test_name)) + printf("."); + end + printf(": %s\n", result); +end + +function mod = fsk_mod_c(Fs,Rs,f1,fsp,bits,M) + global tfsk_location; + %command to be run by system to launch the modulator + command = sprintf('%s M %d %d %d %d %d 0 fsk_mod_ut_bitvec fsk_mod_ut_modvec fsk_mod_ut_log.txt',tfsk_location,M,f1,fsp,Fs,Rs); + %save input bits into a file + bitvecfile = fopen('fsk_mod_ut_bitvec','wb+'); + fwrite(bitvecfile,bits,'uint8'); + fclose(bitvecfile); + + %run the modulator + system(command); + + modvecfile = fopen('fsk_mod_ut_modvec','rb'); + mod = fread(modvecfile,'single'); + fclose(modvecfile); + +endfunction + + +%Compare 2 vectors, fail if they are not close enough +function pass = vcompare(vc,voct,vname,tname,tol,pnum) + global print_verbose; + %Get delta of vectors + dvec = abs(abs(vc - voct)); + + %Normalize difference + dvec = dvec ./ abs(max(abs(voct))+1e-8); + + maxdvec = abs(max(dvec)); + pass = maxdvec=states.nin + ninold = states.nin; + states = est_freq(states, modin(1:states.nin), states.M); + [bitbuf,states] = fsk_demod(states, modin(1:states.nin)); + if lock_nin states.nin = states.N; end + + modin=modin(ninold+1:length(modin)); + obits = [obits bitbuf]; + + %Save other parameters + o_f1_dc = [o_f1_dc states.f_dc(1,:)]; + o_f2_dc = [o_f2_dc states.f_dc(2,:)]; + o_f1_int = [o_f1_int states.f_int(1,:)]; + o_f2_int = [o_f2_int states.f_int(2,:)]; + o_EbNodB = [o_EbNodB states.EbNodB]; + o_ppm = [o_ppm states.ppm]; + o_rx_timing = [o_rx_timing states.rx_timing]; + o_norm_rx_timing = [o_norm_rx_timing states.norm_rx_timing]; + o_Sf = [o_Sf states.Sf']; + o_f1 = [o_f1 states.f(1)]; + o_f2 = [o_f1 states.f(2)]; + o_fest = [o_fest states.f]; + o_mask = [o_mask states.mask]; + o_fest2 = [o_fest2 states.f2]; + o_nin = [o_nin states.nin]; + if M==4 + o_f3_dc = [o_f3_dc states.f_dc(3,:)]; + o_f4_dc = [o_f4_dc states.f_dc(4,:)]; + o_f3_int = [o_f3_int states.f_int(3,:)]; + o_f4_int = [o_f4_int states.f_int(4,:)]; + o_f3 = [o_f1 states.f(3)]; + o_f4 = [o_f1 states.f(4)]; + end + end + + assert(vcompare(o_Sf, t_Sf,'fft est',tname,.001,1)); + assert(vcompare(o_fest, t_f_est,'f est',tname,.001,2)); + assert(vcompare(o_mask, t_mask,'f2 mask',tname,.001,3)); + assert(vcompare(o_fest2, t_f2_est,'f2 est',tname,.001,16)); + o_fest2(1:12) + t_f2_est(1:12) + assert(vcompare(o_f1_dc, t_f1_dc, 'f1 dc', tname,.01,8)); + assert(vcompare(o_f2_dc, t_f2_dc, 'f2 dc', tname,.01,9)); + assert(vcompare(o_f2_int, t_f2_int, 'f2 int', tname,.01,10)); + assert(vcompare(o_f1_int, t_f1_int, 'f1 int', tname,.01,11)); + if M==4 + assert(vcompare(o_f3_dc, t_f3_dc, 'f3 dc', tname,.01,4)) + assert(vcompare(o_f4_dc, t_f4_dc, 'f4 dc', tname,.01,5)); + assert(vcompare(o_f3_int, t_f3_int, 'f3 int', tname,.01,6)); + assert(vcompare(o_f4_int, t_f4_int, 'f4 int', tname,.01,7)); + end + + assert(vcompare(o_rx_timing, t_rx_timing,'rx timing',tname,.02,3)); + + % Much larger tolerances on unimportant statistics + assert(vcompare(o_ppm , t_ppm, 'ppm', tname,.02,12)); + assert(vcompare(o_EbNodB, t_EbNodB,'EbNodB', tname,.02,13)); + assert(vcompare(o_nin, t_nin, 'nin', tname,.0001,14)); + assert(vcompare(o_norm_rx_timing, t_norm_rx_timing,'norm rx timing',tname,.02,15)); + diffpass = sum(xor(obits,bits'))<4; + diffbits = sum(xor(obits,bits')); + + if diffpass==0 + printf('\n***bitcompare test failed test %s diff %d\n\n',tname,sum(xor(obits,bits'))) + figure(15) + plot(xor(obits,bits')) + title(sprintf('Bitcompare failure test %s',tname)) + end + + assert(diffpass); + + test_stats.pass = 1; + test_stats.diff = sum(xor(obits,bits')); + test_stats.cbits = bits'; + test_stats.obits = obits; +endfunction + + +function [dmod,cmod,omod,pass] = fsk_mod_test(Fs,Rs,f1,fsp,bits,tname,M=2) + global mod_pass_fail_maxdiff; + %Run the C modulator + cmod = fsk_mod_c(Fs,Rs,f1,fsp,bits,M); + %Set up and run the octave modulator + states.M = M; + states = fsk_horus_init(Fs,Rs,M); + + states.ftx(1) = f1; + states.ftx(2) = f1+fsp; + + if states.M == 4 + states.ftx(3) = f1+fsp*2; + states.ftx(4) = f1+fsp*3; + end + + states.dF = 0; + omod = fsk_mod(states,bits); + + dmod = cmod-omod; + pass = max(dmod)<(mod_pass_fail_maxdiff*length(dmod)); + if !pass + printf('Mod failed test %s!\n',tname); + end +endfunction + +% Random bit modulator test +% Pass random bits through the modulators and compare +function pass = test_mod_horuscfg_randbits + rand('state',1); + randn('state',1); + bits = rand(1,10000)>.5; + [dmod,cmod,omod,pass] = fsk_mod_test(8000,100,1200,1600,bits,"mod horuscfg randbits"); + + if(!pass) + figure(1) + plot(dmod) + title("Difference between octave and C mod impl"); + end + print_result("test_mod_horuscfg_randbits", "OK"); +endfunction + +% Random bit modulator test +% Pass random bits through the modulators and compare +function pass = test_mod_horuscfgm4_randbits + rand('state',1); + randn('state',1); + bits = rand(1,10000)>.5; + [dmod,cmod,omod,pass] = fsk_mod_test(8000,100,1200,1600,bits,"mod horuscfg randbits",4); + + if(!pass) + figure(1) + plot(dmod) + title("Difference between octave and C mod impl"); + end + print_result("test_mod_horuscfgm4_randbits", "OK"); + +endfunction + + +% A big ol' channel impairment tester shamelessly taken from fsk_horus +% This throws some channel imparment or another at the C and octave +% modem so they may be compared. +function stats = tfsk_run_sim(test_frame_mode,EbNodB,timing_offset,fading,df,M=2,frames=50,lock_nin=0) + #{ + timing_offset [0|1] enable a 1000ppm sample clock offset + fading [0|1] modulates tx power at 2Hz with 20dB fade depth, + e.g. to simulate balloon rotating at end of mission + df tx tone freq drift in Hz/s + lock_nin [0|1] locks nin to a constant which makes tests much simpler by breaking feeback loop + #} + global print_verbose; + + more off + rand('state',1); + randn('state',1); + + % ---------------------------------------------------------------------- + + % sm2000 config ------------------------ + %states = fsk_horus_init(96000, 1200); + %states.f1_tx = 4000; + %states.f2_tx = 5200; + + if test_frame_mode == 2 + % horus rtty config --------------------- + states = fsk_horus_init(8000, 100, M); + states.f1_tx = 1200; + states.f2_tx = 1600; + end + + if test_frame_mode == 4 + % horus rtty config --------------------- + states = fsk_horus_init(8000, 100, M); + states.f1_tx = 1200; + states.f2_tx = 1600; + states.tx_bits_file = "horus_tx_bits_rtty.txt"; % Octave file of bits we FSK modulate + + end + + if test_frame_mode == 5 + % horus binary config --------------------- + states = fsk_horus_init(8000, 100, M); + states.f1_tx = 1200; + states.f2_tx = 1600; + %%%states.tx_bits_file = "horus_tx_bits_binary.txt"; % Octave file of bits we FSK modulate + states.tx_bits_file = "horus_payload_rtty.txt"; + end + + % ---------------------------------------------------------------------- + + states.verbose = 0; + N = states.N; + P = states.P; + Rs = states.Rs; + nsym = states.nsym; + Fs = states.Fs; + states.df = df; + states.M = M; + + EbNo = 10^(EbNodB/10); + variance = states.Fs/(states.Rs*EbNo*states.bitspersymbol); + + % set up tx signal with payload bits based on test mode + + if test_frame_mode == 1 + % test frame of bits, which we repeat for convenience when BER testing + test_frame = round(rand(1, states.nsym)); + tx_bits = []; + for i=1:frames+1 + tx_bits = [tx_bits test_frame]; + end + end + if test_frame_mode == 2 + % random bits, just to make sure sync algs work on random data + tx_bits = round(rand(1, states.nbit*(frames+1))); + end + if test_frame_mode == 3 + % ...10101... sequence + tx_bits = zeros(1, states.nsym*(frames+1)); + tx_bits(1:2:length(tx_bits)) = 1; + end + + if (test_frame_mode == 4) || (test_frame_mode == 5) + + % load up a horus msg from disk and modulate that + + test_frame = load(states.tx_bits_file); + ltf = length(test_frame); + ntest_frames = ceil((frames+1)*nsym/ltf); + tx_bits = []; + for i=1:ntest_frames + tx_bits = [tx_bits test_frame]; + end + end + + f1 = states.f1_tx; + fsp = states.f2_tx-f1; + states.ftx(1) = f1; + states.ftx(2) = f1+fsp; + + if states.M == 4 + states.ftx(3) = f1+fsp*2; + states.ftx(4) = f1+fsp*3; + end + + tx = fsk_mod(states, tx_bits); + + if timing_offset + tx = resample(tx, 1000, 1001); % simulated 1000ppm sample clock offset + end + + if fading + ltx = length(tx); + tx = tx .* (1.1 + cos(2*pi*2*(0:ltx-1)/Fs))'; % min amplitude 0.1, -20dB fade, max 3dB + end + + noise = sqrt(variance)*randn(length(tx),1); + rx = tx + noise; + + test_name = sprintf("tfsk run sim EbNodB:%d frames:%d timing_offset:%d fading:%d df:%d",EbNodB,frames,timing_offset,fading,df); + tstats = fsk_demod_xt(Fs,Rs,states.f1_tx,fsp,rx,test_name,M,lock_nin); + + pass = tstats.pass; + obits = tstats.obits; + cbits = tstats.cbits; + + % Figure out BER of octave and C modems + bitcnt = length(tx_bits); + rx_bits = obits; + ber = 1; + ox = 1; + for offset = (1:100) + nerr = sum(xor(rx_bits(offset:length(rx_bits)),tx_bits(1:length(rx_bits)+1-offset))); + bern = nerr/(bitcnt-offset); + if(bern < ber) + ox = offset; + best_nerr = nerr; + end + ber = min([ber bern]); + end + offset = ox; + bero = ber; + ber = 1; + rx_bits = cbits; + ox = 1; + for offset = (1:100) + nerr = sum(xor(rx_bits(offset:length(rx_bits)),tx_bits(1:length(rx_bits)+1-offset))); + bern = nerr/(bitcnt-offset); + if(bern < ber) + ox = offset; + best_nerr = nerr; + end + ber = min([ber bern]); + end + offset = ox; + berc = ber; + stats.berc = berc; + stats.bero = bero; + stats.name = test_name; + % coherent BER theory calculation + + stats.thrcoh = .5*(M-1)*erfc(sqrt( (log2(M)/2) * EbNo )); + + % non-coherent BER theory calculation + % It was complicated, so I broke it up + + ms = M; + ns = (1:ms-1); + as = (-1).^(ns+1); + bs = (as./(ns+1)); + + cs = ((ms-1)./ns); + + ds = ns.*log2(ms); + es = ns+1; + fs = exp( -(ds./es)*EbNo ); + + thrncoh = ((ms/2)/(ms-1)) * sum(bs.*((ms-1)./ns).*exp( -(ds./es)*EbNo )); + + stats.thrncoh = thrncoh; + stats.pass = pass; +endfunction + +% run a bunch of tests at a range of EbNo's in parallel +function pass = ebno_battery_test(timing_offset,fading,df,M) + %Range of EbNodB over which to test + ebnodbrange = (5:2:13); + ebnodbs = length(ebnodbrange); + + mode = 2; + %Replication of other parameters for parcellfun + modev = repmat(mode,1,ebnodbs); + timingv = repmat(timing_offset,1,ebnodbs); + fadingv = repmat(fading,1,ebnodbs); + dfv = repmat(df,1,ebnodbs); + mv = repmat(M,1,ebnodbs); + + statv = pararrayfun(floor(1.25*nproc()),@tfsk_run_sim,modev,ebnodbrange,timingv,fadingv,dfv,mv); + passv = zeros(1,length(statv)); + for ii=(1:length(statv)) + passv(ii)=statv(ii).pass; + if statv(ii).pass + printf("Test %s passed\n",statv(ii).name); + else + printf("Test %s failed\n",statv(ii).name); + end + end + + %All pass flags are '1' + pass = sum(passv)>=length(passv); + %and no tests died + pass = pass && length(passv)==ebnodbs; + passv; + assert(pass) +endfunction + +%Test with and without sample clock offset +function pass = test_timing_var(df,M) + pass = ebno_battery_test(1,0,df,M) + assert(pass) + pass = pass && ebno_battery_test(0,0,df,M) + assert(pass) +endfunction + +%Test with and without 1 Hz/S freq drift +function pass = test_drift_var(M) + pass = test_timing_var(1,1,M) + pass = pass && test_timing_var(0,1,M) + assert(pass) +endfunction + +function pass = test_fsk_battery() + pass = test_mod_horuscfg_randbits; + pass = pass && test_mod_horuscfgm4_randbits; + pass = pass && test_drift_var(4); + assert(pass) + pass = pass && test_drift_var(2); + assert(pass) + if pass + printf("***** All tests passed! *****\n"); + end +endfunction + +function plot_fsk_bers(M=2) + %Range of EbNodB over which to plot + ebnodbrange = (4:13); + + berc = ones(1,length(ebnodbrange)); + bero = ones(1,length(ebnodbrange)); + berinc = ones(1,length(ebnodbrange)); + beric = ones(1,length(ebnodbrange)); + ebnodbs = length(ebnodbrange) + mode = 2; + %Replication of other parameters for parcellfun + modev = repmat(mode,1,ebnodbs); + timingv = repmat(1,1,ebnodbs); + fadingv = repmat(0,1,ebnodbs); + dfv = repmat(1,1,ebnodbs); + Mv = repmat(M,1,ebnodbs); + + statv = pararrayfun(floor(nproc()),@tfsk_run_sim,modev,ebnodbrange,timingv,fadingv,dfv,Mv); + %statv = arrayfun(@tfsk_run_sim,modev,ebnodbrange,timingv,fadingv,dfv,Mv); + + for ii = (1:length(statv)) + stat = statv(ii); + berc(ii)=stat.berc; + bero(ii)=stat.bero; + berinc(ii)=stat.thrncoh; + beric(ii) = stat.thrcoh; + end + clf; + figure(M) + + semilogy(ebnodbrange, berinc,sprintf('r;%dFSK non-coherent theory;',M)) + hold on; + semilogy(ebnodbrange, beric ,sprintf('g;%dFSK coherent theory;',M)) + semilogy(ebnodbrange, bero ,sprintf('b;Octave fsk horus %dFSK Demod;',M)) + semilogy(ebnodbrange, berc,sprintf('+;C fsk horus %dFSK Demod;',M)) + hold off; + grid("minor"); + axis([min(ebnodbrange) max(ebnodbrange) 1E-5 1]) + legend("boxoff"); + xlabel("Eb/No (dB)"); + ylabel("Bit Error Rate (BER)") + +endfunction + +% We kick off tests here ------------------------------------------------------ + +pass = 0; ntests = 0; +pass += test_mod_horuscfg_randbits; ntests++; +pass += test_mod_horuscfgm4_randbits; ntests++; +stats = tfsk_run_sim(test_frame_mode=2,EbNodB=5,timing_offset=0,fading=0,df=1,M=4,frames=10,lock_nin=1); ntests++; +if stats.pass + print_result("Demod 10 frames nin locked", "OK"); + pass += stats.pass; +end +stats = tfsk_run_sim(test_frame_mode=2,EbNodB=5,timing_offset=1,fading=0,df=1,M=4,frames=10,lock_nin=0); ntests++; +if stats.pass + print_result("Demod 10 frames", "OK"); + pass += stats.pass; +end +printf("tests: %d passed: %d ", ntests, pass); +if ntests == pass printf("PASS\n"); else printf("FAIL\n"); end diff --git a/libcodec2-android/src/codec2/octave/tfsk_2400a.m b/libcodec2-android/src/codec2/octave/tfsk_2400a.m new file mode 100644 index 0000000..ac7324a --- /dev/null +++ b/libcodec2-android/src/codec2/octave/tfsk_2400a.m @@ -0,0 +1,648 @@ +% tfsk.m +% Author: Brady O'Brien 8 January 2016 + + + +% Copyright 2016 David Rowe +% +% All rights reserved. +% +% This program is free software; you can redistribute it and/or modify +% it under the terms of the GNU Lesser General Public License version 2.1, as +% published by the Free Software Foundation. This program is +% distributed in the hope that it will be useful, but WITHOUT ANY +% WARRANTY; without even the implied warranty of MERCHANTABILITY or +% FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public +% License for more details. +% +% You should have received a copy of the GNU Lesser General Public License +% along with this program; if not, see . + + +% Octave script to check c port of fsk_horus against the fsk_horus.m +% +% [X] - Functions to wrap around fsk_mod and fsk_demod executables +% [X] - fsk_mod +% [X] - fsk_demod +% [X] - Functions to wrap around octave and c implementations, pass +% same dataset, compare outputs, and give clear go/no-go +% [X] - fsk_mod_test +% [X] - fsk_demod_test +% [X] - Port of run_sim and EbNodB curve test battery +% [X] - Extract and compare more parameters from demod +% [X] - Run some tests in parallel + +#{ + + FSK Modem automated test instructions: + + 1. Use cmake to build in debug mode to ensure unittest/tfsk is built: + + $ cd ~/codec2 + $ rm -Rf build_linux && mkdir build_linux + $ cd build_linux + $ cmake -DCMAKE_BUILD_TYPE=Debug .. + $ make + + 2 - Change tfsk_location below if required + 3 - Ensure Octave packages signal and parallel are installed + 4 - Start Octave and run tfsk_2400a.m. It will perform all tests automatically + +#} + + + +%tfsk executable path/file +global tfsk_location = '../build_linux/unittest/tfsk'; + +%Set to 1 for verbose printouts +global print_verbose = 0; + + +fsk_horus_as_a_lib = 1; % make sure calls to test functions at bottom are disabled +%fsk_horus_2fsk; +fsk_horus +pkg load signal; +pkg load parallel; +graphics_toolkit('gnuplot'); + + +global mod_pass_fail_maxdiff = 1e-3/5000; + +function mod = fsk_mod_c(Fs,Rs,f1,fsp,bits,M) + global tfsk_location; + %command to be run by system to launch the modulator + command = sprintf('%s MX %d %d %d %d %d fsk_mod_ut_bitvec fsk_mod_ut_modvec fsk_mod_ut_log.txt',tfsk_location,M,f1,fsp,Fs,Rs); + %save input bits into a file + bitvecfile = fopen('fsk_mod_ut_bitvec','wb+'); + fwrite(bitvecfile,bits,'uint8'); + fclose(bitvecfile); + + %run the modulator + system(command); + + modvecfile = fopen('fsk_mod_ut_modvec','rb'); + mod = fread(modvecfile,'single'); + fclose(modvecfile); + +endfunction + + +%Compare 2 vectors, fail if they are not close enough +function pass = vcompare(vc,voct,vname,tname,tol,pnum) + global print_verbose; + %Get delta of vectors + dvec = abs(abs(vc)-abs(voct)); + + %Normalize difference + dvec = dvec ./ abs(max(abs(voct))+1e-8); + + maxdvec = abs(max(dvec)); + pass = maxdvec=states.nin + ninold = states.nin; + states = est_freq(states, modin(1:states.nin), states.M); + [bitbuf,states] = fsk_horus_demod(states, modin(1:states.nin)); + modin=modin(ninold+1:length(modin)); + obits = [obits bitbuf]; + + %Save other parameters + o_f1_dc = [o_f1_dc states.f_dc(1,1:states.Nmem-Ts/P)]; + o_f2_dc = [o_f2_dc states.f_dc(2,1:states.Nmem-Ts/P)]; + o_f1_int = [o_f1_int states.f_int(1,:)]; + o_f2_int = [o_f2_int states.f_int(2,:)]; + o_EbNodB = [o_EbNodB states.EbNodB]; + o_ppm = [o_ppm states.ppm]; + o_rx_timing = [o_rx_timing states.rx_timing]; + o_norm_rx_timing = [o_norm_rx_timing states.norm_rx_timing]; + o_Sf = [o_Sf states.Sf']; + o_f1 = [o_f1 states.f(1)]; + o_f2 = [o_f1 states.f(2)]; + o_fest = [o_fest states.f]; + o_nin = [o_nin states.nin]; + if M==4 + o_f3_dc = [o_f3_dc states.f_dc(3,1:states.Nmem-Ts/P)]; + o_f4_dc = [o_f4_dc states.f_dc(4,1:states.Nmem-Ts/P)]; + o_f3_int = [o_f3_int states.f_int(3,:)]; + o_f4_int = [o_f4_int states.f_int(4,:)]; + o_f3 = [o_f1 states.f(3)]; + o_f4 = [o_f1 states.f(4)]; + end + end + + %close all + + pass = 1; + + pass = vcompare(o_Sf, t_fft_est(1:length(o_Sf)),'fft est',tname,1,1) && pass; + pass = vcompare(o_fest, t_f_est,'f est',tname,1,2) && pass; + pass = vcompare(o_rx_timing, t_rx_timing,'rx timing',tname,1,3) && pass; + + if M==4 + pass = vcompare(o_f3_dc, t_f3_dc, 'f3 dc', tname,1,4) && pass; + pass = vcompare(o_f4_dc, t_f4_dc, 'f4 dc', tname,1,5) && pass; + pass = vcompare(o_f3_int, t_f3_int, 'f3 int', tname,1,6) && pass; + pass = vcompare(o_f4_int, t_f4_int, 'f4 int', tname,1,7) && pass; + end + + pass = vcompare(o_f1_dc, t_f1_dc, 'f1 dc', tname,1,8) && pass; + pass = vcompare(o_f2_dc, t_f2_dc, 'f2 dc', tname,1,9) && pass; + pass = vcompare(o_f2_int, t_f2_int, 'f2 int', tname,1,10) && pass; + pass = vcompare(o_f1_int, t_f1_int, 'f1 int', tname,1,11) && pass; + + pass = vcompare(o_ppm , t_ppm, 'ppm', tname,1,12) && pass; + pass = vcompare(o_EbNodB, t_EbNodB,'EbNodB', tname,1,13) && pass; + pass = vcompare(o_nin, t_nin, 'nin', tname,1,14) && pass; + pass = vcompare(o_norm_rx_timing, t_norm_rx_timing,'norm rx timing',tname,1,15) && pass; + + + diffpass = sum(xor(obits,bits'))<5; + diffbits = sum(xor(obits,bits')); + + if print_verbose == 1 + printf('%d bit diff in test %s\n',diffbits,tname); + end + if diffpass==0 + printf('\n***bitcompare test failed test %s diff %d\n\n',tname,sum(xor(obits,bits'))) + figure(15) + plot(xor(obits,bits')) + title(sprintf('Bitcompare failure test %s',tname)) + end + + pass = pass && diffpass; + + assert(pass); + + test_stats.pass = pass; + test_stats.diff = sum(xor(obits,bits')); + test_stats.cbits = bits'; + test_stats.obits = obits; + +endfunction + +function [dmod,cmod,omod,pass] = fsk_mod_test(Fs,Rs,f1,fsp,bits,tname,M=2) + global mod_pass_fail_maxdiff; + %Run the C modulator + cmod = fsk_mod_c(Fs,Rs,f1,fsp,bits,M); + %Set up and run the octave modulator + states.M = M; + states = fsk_horus_init_hbr(Fs,10,Rs,M); + + states.ftx(1) = f1; + states.ftx(2) = f1+fsp; + + if states.M == 4 + states.ftx(3) = f1+fsp*2; + states.ftx(4) = f1+fsp*3; + end + + states.dA = [1 1 1 1]; + states.dF = 0; + omod = fsk_horus_mod(states,bits); + + dmod = cmod-omod; + pass = max(dmod)<(mod_pass_fail_maxdiff*length(dmod)); + if !pass + printf('Mod failed test %s!\n',tname); + end +endfunction + +% Random bit modulator test +% Pass random bits through the modulators and compare +function pass = test_mod_2400a_randbits + rand('state',1); + randn('state',1); + bits = rand(1,96000)>.5; + [dmod,cmod,omod,pass] = fsk_mod_test(48000,1200,1200,1200,bits,"mod 2400a randbits",4); + + if(!pass) + figure(1) + plot(dmod) + title("Difference between octave and C mod impl"); + end + +endfunction + + +% A big ol' channel impairment tester +% Shamlessly taken from fsk_horus +% This throws some channel imparment or another at the C and octave modem so they +% may be compared. +function stats = tfsk_run_sim(test_frame_mode,EbNodB,timing_offset,fading,df,dA,M=2) + global print_verbose; + frames = 190; + %EbNodB = 10; + %timing_offset = 2.0; % see resample() for clock offset below + %fading = 0; % modulates tx power at 2Hz with 20dB fade depth, + % to simulate balloon rotating at end of mission + %df = 0; % tx tone freq drift in Hz/s + %dA = 1; % amplitude imbalance of tones (note this affects Eb so not a gd idea) + + more off + rand('state',10); + randn('state',10); + + % ---------------------------------------------------------------------- + + % sm2000 config ------------------------ + %states = fsk_horus_init(96000, 1200); + %states.f1_tx = 4000; + %states.f2_tx = 5200; + + if test_frame_mode == 2 + % 2400A config + states = fsk_horus_init_hbr(48000,10, 1200, M); + states.f1_tx = 1200; + states.f2_tx = 2400; + states.f3_tx = 3600; + states.f4_tx = 4800; + states.ftx(1) = 1200; + states.ftx(2) = 2400; + states.ftx(3) = 3600; + states.ftx(4) = 4800; + + end + + if test_frame_mode == 4 + % horus rtty config --------------------- + states = fsk_horus_init_hbr(48000,10, 1200, M); + states.f1_tx = 1200; + states.f2_tx = 2400; + states.f3_tx = 3600; + states.f4_tx = 4800; + states.ftx(1) = 1200; + states.ftx(2) = 2400; + states.ftx(3) = 3600; + states.ftx(4) = 4800; + + states.tx_bits_file = "horus_tx_bits_rtty.txt"; % Octave file of bits we FSK modulate + + end + + if test_frame_mode == 5 + % horus binary config --------------------- + states = fsk_horus_init_hbr(48000,10, 1200, M); + states.f1_tx = 1200; + states.f2_tx = 2400; + states.f3_tx = 3600; + states.f4_tx = 4800; + states.ftx(1) = 1200; + states.ftx(2) = 2400; + states.ftx(3) = 3600; + states.ftx(4) = 4800; + %%%states.tx_bits_file = "horus_tx_bits_binary.txt"; % Octave file of bits we FSK modulate + states.tx_bits_file = "horus_payload_rtty.txt"; + end + + % ---------------------------------------------------------------------- + + states.verbose = 0;%x1; + N = states.N; + P = states.P; + Rs = states.Rs; + nsym = states.nsym; + Fs = states.Fs; + states.df = df; + states.dA = [dA dA dA dA]; + states.M = M; + + EbNo = 10^(EbNodB/10); + variance = states.Fs/(states.Rs*EbNo*states.bitspersymbol); + + % set up tx signal with payload bits based on test mode + + if test_frame_mode == 1 + % test frame of bits, which we repeat for convenience when BER testing + test_frame = round(rand(1, states.nsym)); + tx_bits = []; + for i=1:frames+1 + tx_bits = [tx_bits test_frame]; + end + end + if test_frame_mode == 2 + % random bits, just to make sure sync algs work on random data + tx_bits = round(rand(1, states.nbit*(frames+1))); + end + if test_frame_mode == 3 + % ...10101... sequence + tx_bits = zeros(1, states.nsym*(frames+1)); + tx_bits(1:2:length(tx_bits)) = 1; + end + + if (test_frame_mode == 4) || (test_frame_mode == 5) + + % load up a horus msg from disk and modulate that + + test_frame = load(states.tx_bits_file); + ltf = length(test_frame); + ntest_frames = ceil((frames+1)*nsym/ltf); + tx_bits = []; + for i=1:ntest_frames + tx_bits = [tx_bits test_frame]; + end + end + + + + f1 = states.f1_tx; + fsp = states.f2_tx-f1; + states.dA = [dA dA dA dA]; + states.ftx(1) = f1; + states.ftx(2) = f1+fsp; + + if states.M == 4 + states.ftx(3) = f1+fsp*2; + states.ftx(4) = f1+fsp*3; + end + + tx = fsk_horus_mod(states, tx_bits); + + if timing_offset + tx = resample(tx, 1000, 1001); % simulated 1000ppm sample clock offset + end + + if fading + ltx = length(tx); + tx = tx .* (1.1 + cos(2*pi*2*(0:ltx-1)/Fs))'; % min amplitude 0.1, -20dB fade, max 3dB + end + + noise = sqrt(variance)*randn(length(tx),1); + rx = tx + noise; + + test_name = sprintf("tfsk EbNodB:%d frames:%d timing_offset:%d fading:%d df:%d",EbNodB,frames,timing_offset,fading,df); + tstats = fsk_demod_xt(Fs,Rs,states.f1_tx,fsp,rx,test_name,M); + + pass = tstats.pass; + obits = tstats.obits; + cbits = tstats.cbits; + stats.name = test_name; + + if tstats.pass + printf("Test %s passed\n",test_name); + else + printf("Test %s failed\n",test_name); + end + + % Figure out BER of octave and C modems + bitcnt = length(tx_bits); + rx_bits = obits; + ber = 1; + ox = 1; + for offset = (1:100) + nerr = sum(xor(rx_bits(offset:length(rx_bits)),tx_bits(1:length(rx_bits)+1-offset))); + bern = nerr/(bitcnt-offset); + if(bern < ber) + ox = offset; + best_nerr = nerr; + end + ber = min([ber bern]); + end + offset = ox; + bero = ber; + ber = 1; + rx_bits = cbits; + ox = 1; + for offset = (1:100) + nerr = sum(xor(rx_bits(offset:length(rx_bits)),tx_bits(1:length(rx_bits)+1-offset))); + bern = nerr/(bitcnt-offset); + if(bern < ber) + ox = offset; + best_nerr = nerr; + end + ber = min([ber bern]); + end + offset = ox; + berc = ber; + stats.berc = berc; + stats.bero = bero; + % coherent BER theory calculation + + if print_verbose == 1 + printf("C BER: %f Oct BER: %f Test %s\n",berc,bero,test_name); + end + + stats.thrcoh = .5*(M-1)*erfc(sqrt( (log2(M)/2) * EbNo )); + + % non-coherent BER theory calculation + % It was complicated, so I broke it up + + ms = M; + ns = (1:ms-1); + as = (-1).^(ns+1); + bs = (as./(ns+1)); + + cs = ((ms-1)./ns); + + ds = ns.*log2(ms); + es = ns+1; + fs = exp( -(ds./es)*EbNo ); + + thrncoh = ((ms/2)/(ms-1)) * sum(bs.*((ms-1)./ns).*exp( -(ds./es)*EbNo )); + + stats.thrncoh = thrncoh; + stats.pass = pass; +endfunction + + +function pass = ebno_battery_test(timing_offset,fading,df,dA,M) + %Range of EbNodB over which to test + ebnodbrange = fliplr(5:2:13); + ebnodbs = length(ebnodbrange); + + mode = 2; + %Replication of other parameters for parcellfun + modev = repmat(mode,1,ebnodbs); + timingv = repmat(timing_offset,1,ebnodbs); + fadingv = repmat(fading,1,ebnodbs); + dfv = repmat(df,1,ebnodbs); + dav = repmat(dA,1,ebnodbs); + mv = repmat(M,1,ebnodbs); + statv = pararrayfun(floor(1.25*nproc()),@tfsk_run_sim,modev,ebnodbrange,timingv,fadingv,dfv,dav,mv); + %statv = arrayfun(@tfsk_run_sim,modev,ebnodbrange,timingv,fadingv,dfv,dav,mv); + + passv = zeros(1,length(statv)); + for ii=(1:length(statv)) + passv(ii)=statv(ii).pass; + if statv(ii).pass + printf("Test %s passed\n",statv(ii).name); + else + printf("Test %s failed\n",statv(ii).name); + end + + end + + %All pass flags are '1' + pass = sum(passv)>=length(passv); + %and no tests died + pass = pass && length(passv)==ebnodbs; + passv; + assert(pass) +endfunction + +%Test with and without sample clock offset +function pass = test_timing_var(df,dA,M) + pass = ebno_battery_test(1,0,df,dA,M) + assert(pass) + pass = pass && ebno_battery_test(0,0,df,dA,M) + assert(pass) +endfunction + +%Test with and without 1 Hz/S freq drift +function pass = test_drift_var(M) + pass = test_timing_var(1,1,M) + assert(pass) + pass = pass && test_timing_var(0,1,M) + assert(pass) +endfunction + +function pass = test_fsk_battery() + pass = 1; + pass = pass && test_mod_2400a_randbits; + assert(pass) + pass = pass && test_drift_var(4); + assert(pass) + if pass + printf("***** All tests passed! *****\n"); + end +endfunction + +function plot_fsk_bers(M=2) + %Range of EbNodB over which to plot + ebnodbrange = (4:13); + + berc = ones(1,length(ebnodbrange)); + bero = ones(1,length(ebnodbrange)); + berinc = ones(1,length(ebnodbrange)); + beric = ones(1,length(ebnodbrange)); + ebnodbs = length(ebnodbrange) + mode = 2; + %Replication of other parameters for parcellfun + modev = repmat(mode,1,ebnodbs); + timingv = repmat(1,1,ebnodbs); + fadingv = repmat(0,1,ebnodbs); + dfv = repmat(1,1,ebnodbs); + dav = repmat(1,1,ebnodbs); + Mv = repmat(M,1,ebnodbs); + + + statv = pararrayfun(floor(nproc()),@tfsk_run_sim,modev,ebnodbrange,timingv,fadingv,dfv,dav,Mv); + %statv = arrayfun(@tfsk_run_sim,modev,ebnodbrange,timingv,fadingv,dfv,dav,Mv); + + for ii = (1:length(statv)) + stat = statv(ii); + berc(ii)=stat.berc; + bero(ii)=stat.bero; + berinc(ii)=stat.thrncoh; + beric(ii) = stat.thrcoh; + end + clf; + figure(M) + + semilogy(ebnodbrange, berinc,sprintf('r;%dFSK non-coherent theory;',M)) + hold on; + semilogy(ebnodbrange, beric ,sprintf('g;%dFSK coherent theory;',M)) + semilogy(ebnodbrange, bero ,sprintf('b;Octave fsk horus %dFSK Demod;',M)) + semilogy(ebnodbrange, berc,sprintf('+;C fsk horus %dFSK Demod;',M)) + hold off; + grid("minor"); + axis([min(ebnodbrange) max(ebnodbrange) 1E-5 1]) + legend("boxoff"); + xlabel("Eb/No (dB)"); + ylabel("Bit Error Rate (BER)") + +endfunction + + +xpass = test_fsk_battery +%plot_fsk_bers(2) +plot_fsk_bers(4) + +if xpass + printf("***** All tests passed! *****\n"); +else + printf("***** Some test failed! Look back thorugh output to find failed test *****\n"); +end diff --git a/libcodec2-android/src/codec2/octave/tnewamp1.m b/libcodec2-android/src/codec2/octave/tnewamp1.m new file mode 100644 index 0000000..6454262 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/tnewamp1.m @@ -0,0 +1,256 @@ +% tnewamp1.m +% +% Copyright David Rowe 2017 +% This program is distributed under the terms of the GNU General Public License +% Version 2 + +#{ + + Octave script to compare Octave and C versions of newamp1 processing, in order to test C port. + + c2sim -> dump files -> $ ../build_linux/unittest/tnewamp1 -> octave:1> tnewamp1 + Usage: + + 1/ build codec2 with -DDUMP - see codec2-dev/README + + 2/ Generate dump files using c2sim (just need to do this once) + $ cd codec2-dev/build_linux/src + $ ./c2sim ../../raw/hts1a.raw --phase0 --postfilter --dump hts1a --lpc 10 --dump_pitch_e hts1a_pitche.txt + + 3/ Run C version which generates a file of Octave test vectors as output: + + $ cd codec2-dev/build_linux/unittest + $ ./tnewamp1 ../../raw/hts1a.raw + + 4/ Run Octave script to generate Octave test vectors and compare with C. + + octave:1> tnewamp1("../build_linux/src/hts1a") + + 5/ Optionally listen to output + + ~/codec2-dev/build_linux/src$ ./c2sim ../../raw/hts1a.raw --phase0 --postfilter \ + --amread hts1a_am.out --hmread hts1a_hm.out \ + --Woread hts1a_Wo.out --hand_voicing hts1a_v.txt -o - \ + | play -q -t raw -r 8000 -s -2 - +#} + +function tnewamp1(input_prefix, path_to_unittest="../build_linux/unittest/") + printf("starting tnewamp1.c input_prefix: %s\n", input_prefix); + + visible_flag = 'off'; + newamp_700c; + autotest; + more off; + + max_amp = 80; + postfilter = 0; % optional postfiler that runs on Am, not used atm + synth_phase = 1; + + if nargin == 1 + output_prefix = input_prefix; + end + model_name = strcat(input_prefix,"_model.txt"); + model = load(model_name); + [frames nc] = size(model); + + voicing_name = strcat(input_prefix,"_pitche.txt"); + voicing = zeros(1,frames); + + if exist(voicing_name, "file") == 2 + pitche = load(voicing_name); + voicing = pitche(:, 3); + end + + % Load in C vectors and compare ----------------------------------------- + + load(sprintf("%s/tnewamp1_out.txt", path_to_unittest)); + + K = 20; + [frames tmp] = size(rate_K_surface_c); + [rate_K_surface sample_freqs_kHz] = resample_const_rate_f_mel(model(1:frames,:), K); + + melvq; + load train_120_1.txt; load train_120_2.txt; + train_120_vq(:,:,1)= train_120_1; train_120_vq(:,:,2)= train_120_2; m=5; + m=5; + + eq = zeros(1,K); + for f=1:frames + mean_f(f) = mean(rate_K_surface(f,:)); + rate_K_surface_no_mean(f,:) = rate_K_surface(f,:) - mean_f(f); + [rate_K_vec eq] = front_eq(rate_K_surface_no_mean(f,:), eq); + rate_K_surface_no_mean(f,:) = rate_K_vec; + end + + [res rate_K_surface_no_mean_ ind] = mbest(train_120_vq, rate_K_surface_no_mean, m); + + for f=1:frames + rate_K_surface_no_mean_(f,:) = post_filter(rate_K_surface_no_mean_(f,:), sample_freqs_kHz, 1.5); + end + + rate_K_surface_ = zeros(frames, K); + interpolated_surface_ = zeros(frames, K); + energy_q = create_energy_q; + M = 4; + for f=1:frames + [mean_f_ indx] = quantise(energy_q, mean_f(f)); + indexes(f,3) = indx - 1; + rate_K_surface_(f,:) = rate_K_surface_no_mean_(f,:) + mean_f_; + end + + % simulated decoder + % break into segments of M frames. We have 2 samples spaced M apart + % and interpolate the rest. + + Nfft_phase = 128; % note this needs to be 512 (FFT_ENC in codec2 if using --awread) + % with --hmread 128 is preferred as less memory/CPU + model_ = zeros(frames, max_amp+2); + voicing_ = zeros(1,frames); + Aw = zeros(frames, Nfft_phase); + H = zeros(frames, max_amp); + model_(1,1) = Wo_left = 2*pi/100; + voicing_left = 0; + left_vec = zeros(1,K); + + % decoder runs on every M-th frame, 25Hz frame rate, offset at + % start is to minimise processing delay (thanks Jeroen!) + + for f=M:M:frames + + if voicing(f) + index = encode_log_Wo(model(f,1), 6); + if index == 0 + index = 1; + end + model_(f,1) = decode_log_Wo(index, 6); + else + model_(f,1) = 2*pi/100; + end + + Wo_right = model_(f,1); + voicing_right = voicing(f); + [Wo_ avoicing_] = interp_Wo_v(Wo_left, Wo_right, voicing_left, voicing_right); + + #{ + for i=1:4 + fprintf(stderr, " Wo: %4.3f L: %d v: %d\n", Wo_(i), floor(pi/Wo_(i)), avoicing_(i)); + end + fprintf(stderr," rate_K_vec: "); + for i=1:5 + fprintf(stderr,"%5.3f ", rate_K_surface_(f,i)); + end + fprintf(stderr,"\n"); + #} + + if f > M + model_(f-M:f-1,1) = Wo_; + voicing_(f-M:f-1) = avoicing_; + model_(f-M:f-1,2) = floor(pi ./ model_(f-M:f-1,1)); % calculate L for each interpolated Wo + end + + right_vec = rate_K_surface_(f,:); + + if f > M + sample_points = [f-M f]; + resample_points = f-M:f-1; + for k=1:K + interpolated_surface_(resample_points,k) = interp_linear(sample_points, [left_vec(k) right_vec(k)], resample_points); + end + + for k=f-M:f-1 + model_(k,:) = resample_rate_L(model_(k,:), interpolated_surface_(k,:), sample_freqs_kHz); + Aw(k,:) = determine_phase(model_, k, Nfft_phase); + for m=1:model_(k,2) + b = round(m*model_(k,1)*Nfft_phase/(2*pi)); % map harmonic centre to DFT bin + H(k,m) = exp(j*Aw(k, b+1)); + end + end + + end + + % update for next time + + Wo_left = Wo_right; + voicing_left = voicing_right; + left_vec = right_vec; + + end + + f = figure(1); clf; + mesh(angle(H)); + f = figure(2); clf; + mesh(angle(H_c(:,1:max_amp))); + f = figure(3); clf; + mesh(abs(H - H_c(:,1:max_amp))); + + passes = 0; tests = 0; + passes += check(eq, eq_c, 'Equaliser', 0.01); tests++; + passes += check(rate_K_surface, rate_K_surface_c, 'rate_K_surface', 0.01); tests++; + passes += check(mean_f, mean_c, 'mean', 0.01); tests++; + passes += check(rate_K_surface_, rate_K_surface__c, 'rate_K_surface_', 0.01); tests++; + passes += check(interpolated_surface_, interpolated_surface__c, 'interpolated_surface_', 0.01); tests++; + passes += check(model_(:,1), model__c(:,1), 'interpolated Wo_', 0.001); tests++; + passes += check(voicing_, voicing__c, 'interpolated voicing'); tests++; + passes += check(model_(:,3:max_amp+2), model__c(:,3:max_amp+2), 'rate L Am surface ', 0.1); tests++; + passes += check(H, H_c(:,1:max_amp), 'phase surface'); tests++; + printf("passes: %d fails: %d\n", passes, tests - passes); + + #{ + % Save to disk to check synthesis is OK with c2sim + + output_prefix = input_prefix; + Am_out_name = sprintf("%s_am.out", output_prefix); + fam = fopen(Am_out_name,"wb"); + + Wo_out_name = sprintf("%s_Wo.out", output_prefix); + fWo = fopen(Wo_out_name,"wb"); + + Aw_out_name = sprintf("%s_aw.out", output_prefix); + faw = fopen(Aw_out_name,"wb"); + + Hm_out_name = sprintf("%s_hm.out", output_prefix); + fhm = fopen(Hm_out_name,"wb"); + + printf("Generating files for c2sim: "); + for f=1:frames + printf(".", f); + Wo = model_(f,1); + L = min([model_(f,2) max_amp-1]); + Am = model_(f,3:(L+2)); + + Am_ = zeros(1,2*max_amp); + Am_(2:L) = Am(1:L-1); + + fwrite(fam, Am_, "float32"); + fwrite(fWo, Wo, "float32"); + + % Note we send opposite phase as c2sim expects phase of LPC + % analysis filter, just a convention based on historical + % development of Codec 2 + + Aw1 = zeros(1, Nfft_phase*2); + Aw1(1:2:Nfft_phase*2) = cos(Aw(f,:)); + Aw1(2:2:Nfft_phase*2) = -sin(Aw(f,:)); + fwrite(faw, Aw1, "float32"); + + Hm = zeros(1, 2*2*max_amp); + for m=1:L + Hm(2*m+1) = real(H(f,m)); + Hm(2*m+2) = imag(H(f,m)); + end + fwrite(fhm, Hm, "float32"); + end + + fclose(fam); fclose(fWo); fclose(faw); fclose(fhm); + + v_out_name = sprintf("%s_v.txt", output_prefix); + fv = fopen(v_out_name,"wt"); + for f=1:length(voicing__c) + fprintf(fv,"%d\n", voicing__c(f)); + end + fclose(fv); + #} + +endfunction + + diff --git a/libcodec2-android/src/codec2/octave/tofdm.m b/libcodec2-android/src/codec2/octave/tofdm.m new file mode 100644 index 0000000..e929108 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/tofdm.m @@ -0,0 +1,283 @@ +% tofdm.m +% David Rowe and Steve Sampson June 2017 +% +% Octave script for comparing Octave and C versions of OFDM modem +% +% If running from the Octave command line a good idea to clear globals before +% each run: +% +% octave> clear; tofdm; + +% ------------------------------------------------------------------ + +Nframes = 10; +sample_clock_offset_ppm = 100; +foff_hz = 0.5; + +more off; format; +ofdm_lib; +autotest; +ldpc +global passes = 0; +global fails = 0; + +% attempt to start up CML, path will be different on your machine + +path_to_cml = '~/cml'; +addpath(strcat(path_to_cml, "/mex"), strcat(path_to_cml, "/mat")); +cml_support = 0; +if exist("Somap") == 0 + printf("Can't find CML mex directory so we won't run those tests for now...\n"); +else + printf("OK found CML mex directory so will add those tests...\n"); + cml_support = 1; +end + +% --------------------------------------------------------------------- +% Run Octave version +% --------------------------------------------------------------------- + +Ts = 0.018; Tcp = 0.002; Rs = 1/Ts; bps = 2; + +% useful to test the modem at other Nc's, but if Nc != 17 we aren't set up for +% LDPC testing so disable +if getenv("NC") + Nc = str2num(getenv("NC")); + cml_support = 0; +else + Nc = 17; +end +printf("Nc = %d LDPC testing: %d\n", Nc, cml_support); + +Ns = 8; +config.Ns = Ns; config.Rs = Rs; config.Tcp = Tcp; config.Nc = Nc; +states = ofdm_init(config); +states.verbose = 0; +ofdm_load_const; + +printf("Nbitsperframe: %d\n", Nbitsperframe); + +if cml_support + Nuwtxtsymbolsperframe = (states.Nuwbits+states.Ntxtbits)/bps; + S_matrix = [1, j, -j, -1]; + EsNo = 10; + symbol_likelihood_log = bit_likelihood_log = detected_data_log = []; + + % Set up LDPC code + + mod_order = 4; bps = 2; modulation = 'QPSK'; mapping = 'gray'; + demod_type = 0; decoder_type = 0; max_iterations = 100; + + load HRA_112_112.txt + [code_param framesize rate] = ldpc_init_user(HRA_112_112, modulation, mod_order, mapping); + assert(Nbitsperframe == (code_param.coded_bits_per_frame + states.Nuwbits + states.Ntxtbits)); +end + +tx_bits = zeros(1,Nbitsperframe); +rand('seed',1); + +payload_data_bits = round(rand(1,(Nbitsperframe-Nuwbits-Ntxtbits)/2)); +states.mean_amp = 1; % start this with something sensible otherwise LDPC decode fails +if cml_support + ibits = payload_data_bits; + codeword = LdpcEncode(ibits, code_param.H_rows, code_param.P_matrix); + tx_bits(Nuwbits+Ntxtbits+1:end) = codeword; + tx_bits(1:Nuwbits+Ntxtbits) = [states.tx_uw zeros(1,Ntxtbits)]; +else + tx_bits = create_ldpc_test_frame(states, coded_frame=0); +end + +% Run tx loop + +tx_bits_log = []; tx_log = []; +for f=1:Nframes + tx_bits_log = [tx_bits_log tx_bits]; + tx_log = [tx_log ofdm_mod(states, tx_bits)]; +end + +% Channel simulation ---------------------------------------------- + +rx_log = sample_clock_offset(tx_log, sample_clock_offset_ppm); +rx_log = freq_shift(rx_log, foff_hz, Fs); + +% Rx --------------------------------------------------------------- + +% Init rx with ideal timing so we can test with timing estimation disabled + +Nsam = length(rx_log); +prx = 1; +nin = Nsamperframe+2*(M+Ncp); +states.rxbuf(Nrxbuf-nin+1:Nrxbuf) = rx_log(prx:nin); +prx += nin; + +rxbuf_log = []; rxbuf_in_log = []; rx_sym_log = []; foff_hz_log = []; +timing_est_log = timing_valid_log = timing_mx_log = []; +coarse_foff_est_hz_log = []; sample_point_log = []; +phase_est_pilot_log = []; rx_amp_log = []; +rx_np_log = []; rx_bits_log = []; +sig_var_log = noise_var_log = mean_amp_log = []; + +states.timing_en = 1; +states.foff_est_en = 1; +states.phase_est_en = 1; + +if states.timing_en == 0 + % manually set ideal timing instant + states.sample_point = Ncp; +end + + +for f=1:Nframes + + % insert samples at end of buffer, set to zero if no samples + % available to disable phase estimation on future pilots on last + % frame of simulation + + nin = states.nin; + lnew = min(Nsam-prx+1,nin); + rxbuf_in = zeros(1,nin); + %printf("nin: %d prx: %d lnew: %d\n", nin, prx, lnew); + if lnew + rxbuf_in(1:lnew) = rx_log(prx:prx+lnew-1); + end + prx += lnew; + + [states rx_bits aphase_est_pilot_log arx_np arx_amp] = ofdm_demod(states, rxbuf_in); + + % log some states for comparison to C + + rxbuf_in_log = [rxbuf_in_log rxbuf_in]; + rxbuf_log = [rxbuf_log states.rxbuf]; + rx_sym_log = [rx_sym_log; states.rx_sym]; + phase_est_pilot_log = [phase_est_pilot_log; aphase_est_pilot_log]; + rx_amp_log = [rx_amp_log arx_amp]; + foff_hz_log = [foff_hz_log; states.foff_est_hz]; + timing_est_log = [timing_est_log; states.timing_est]; + timing_valid_log = [timing_valid_log; states.timing_valid]; + timing_mx_log = [timing_mx_log; states.timing_mx]; + coarse_foff_est_hz_log = [coarse_foff_est_hz_log; states.coarse_foff_est_hz]; + sample_point_log = [sample_point_log; states.sample_point]; + rx_np_log = [rx_np_log arx_np]; + rx_bits_log = [rx_bits_log rx_bits]; + sig_var_log = [sig_var_log; states.sig_var]; + noise_var_log = [noise_var_log; states.noise_var]; + mean_amp_log = [mean_amp_log; states.mean_amp]; + + % Optional testing of LDPC functions + + if cml_support + mean_amp = states.mean_amp; + %mean_amp = 1; + symbol_likelihood = Demod2D(arx_np(Nuwtxtsymbolsperframe+1:end)/mean_amp, S_matrix, EsNo, arx_amp(Nuwtxtsymbolsperframe+1:end)/mean_amp); + bit_likelihood = Somap(symbol_likelihood); + + [x_hat paritychecks] = MpDecode(-bit_likelihood(1:code_param.coded_bits_per_frame), code_param.H_rows, code_param.H_cols, max_iterations, decoder_type, 1, 1); + [mx mx_ind] = max(paritychecks); + detected_data = x_hat(mx_ind,:); + + % make sure LDPC decoding is working OK + + % assert(codeword == detected_data); + + [m n] = size(symbol_likelihood); + symbol_likelihood_log = [symbol_likelihood_log; reshape(symbol_likelihood,m*n,1)]; + bit_likelihood_log = [bit_likelihood_log; bit_likelihood']; + detected_data_log = [detected_data_log detected_data]; + end + +end + +% --------------------------------------------------------------------- +% Run C version and plot Octave and C states and differences +% --------------------------------------------------------------------- + +printf("\nRunning C version....\n"); + +% Override default path by: +% 1. if running from octave CLI: setting path_to_tofdm = "/your/path/to/tofdm" +% 2. If running from shell....." set PATH_TO_OFDM = "/your/path/to/tofdm" + +if exist("path_to_tofdm", "var") == 0 + path_to_tofdm = "../build_linux/unittest/tofdm" +end + +if getenv("PATH_TO_TOFDM") + path_to_tofdm = getenv("PATH_TO_TOFDM") + printf("setting path from env var\n"); +end + +path_to_tofdm = sprintf("%s --nc %d", path_to_tofdm, Nc); % append Nc for variable Nc tests + +if cml_support == 0 + path_to_tofdm = sprintf("%s --noldpc", path_to_tofdm); +end + +system(path_to_tofdm); +load tofdm_out.txt; + +fg = 1; + +f = figure(fg++); clf; plot(rx_np_log,'+'); title('Octave Scatter Diagram'); axis([-1.5 1.5 -1.5 1.5]); +f = figure(fg++); clf; plot(rx_np_log_c,'+'); title('C Scatter Diagram'); axis([-1.5 1.5 -1.5 1.5]); + +stem_sig_and_error(fg++, 111, tx_bits_log_c, tx_bits_log - tx_bits_log_c, 'tx bits', [1 length(tx_bits_log) -1.5 1.5]) + +stem_sig_and_error(fg, 211, real(tx_log_c), real(tx_log - tx_log_c), 'tx re', [1 length(tx_log_c) -0.1 0.1]) +stem_sig_and_error(fg++, 212, imag(tx_log_c), imag(tx_log - tx_log_c), 'tx im', [1 length(tx_log_c) -0.1 0.1]) + +stem_sig_and_error(fg, 211, real(rx_log_c), real(rx_log - rx_log_c), 'rx re', [1 length(rx_log_c) -0.1 0.1]) +stem_sig_and_error(fg++, 212, imag(rx_log_c), imag(rx_log - rx_log_c), 'rx im', [1 length(rx_log_c) -0.1 0.1]) + +stem_sig_and_error(fg, 211, real(rxbuf_in_log_c), real(rxbuf_in_log - rxbuf_in_log_c), 'rxbuf in re', [1 length(rxbuf_in_log_c) -0.1 0.1]) +stem_sig_and_error(fg++, 212, imag(rxbuf_in_log_c), imag(rxbuf_in_log - rxbuf_in_log_c), 'rxbuf in im', [1 length(rxbuf_in_log_c) -0.1 0.1]) + +stem_sig_and_error(fg, 211, real(rxbuf_log_c), real(rxbuf_log - rxbuf_log_c), 'rxbuf re', [1 length(rxbuf_log_c) -0.1 0.1]) +stem_sig_and_error(fg++, 212, imag(rxbuf_log_c), imag(rxbuf_log - rxbuf_log_c), 'rxbuf im', [1 length(rxbuf_log_c) -0.1 0.1]) + +stem_sig_and_error(fg, 211, real(rx_sym_log_c), real(rx_sym_log - rx_sym_log_c), 'rx sym re', [1 length(rx_sym_log_c) -1.5 1.5]) +stem_sig_and_error(fg++, 212, imag(rx_sym_log_c), imag(rx_sym_log - rx_sym_log_c), 'rx sym im', [1 length(rx_sym_log_c) -1.5 1.5]) + +% for angles pi and -pi are the same + +d = phase_est_pilot_log - phase_est_pilot_log_c; d = angle(exp(j*d)); + +stem_sig_and_error(fg, 211, phase_est_pilot_log_c, d, 'phase est pilot', [1 length(phase_est_pilot_log_c) -1.5 1.5]) +stem_sig_and_error(fg++, 212, rx_amp_log_c, rx_amp_log - rx_amp_log_c, 'rx amp', [1 length(rx_amp_log_c) -1.5 1.5]) + +stem_sig_and_error(fg , 211, foff_hz_log_c, (foff_hz_log - foff_hz_log_c), 'foff hz', [1 length(foff_hz_log_c) -1.5 1.5]) + +stem_sig_and_error(fg++, 212, timing_mx_log_c, (timing_mx_log - timing_mx_log_c), 'timing mx', [1 length(timing_mx_log_c) 0 2]) + +stem_sig_and_error(fg, 211, timing_est_log_c, (timing_est_log - timing_est_log_c), 'timing est', [1 length(timing_est_log_c) -1.5 1.5]) +stem_sig_and_error(fg++, 212, sample_point_log_c, (sample_point_log - sample_point_log_c), 'sample point', [1 length(sample_point_log_c) -1.5 1.5]) + +stem_sig_and_error(fg++, 111, rx_bits_log_c, rx_bits_log - rx_bits_log_c, 'rx bits', [1 length(rx_bits_log) -1.5 1.5]) + +% Run through checklist ----------------------------- + +check(states.rate_fs_pilot_samples, pilot_samples_c, 'pilot_samples'); +check(tx_bits_log, tx_bits_log_c, 'tx_bits'); +check(tx_log, tx_log_c, 'tx'); +check(rx_log, rx_log_c, 'rx'); +check(rxbuf_in_log, rxbuf_in_log_c, 'rxbuf in'); +check(rxbuf_log, rxbuf_log_c, 'rxbuf'); +check(rx_sym_log, rx_sym_log_c, 'rx_sym', tol=10E-3); +check(phase_est_pilot_log, phase_est_pilot_log_c, 'phase_est_pilot', tol=1E-2, its_an_angle=1); +check(rx_amp_log, rx_amp_log_c, 'rx_amp'); +check(timing_est_log, timing_est_log_c, 'timing_est'); +check(timing_valid_log, timing_valid_log_c, 'timing_valid'); +check(timing_mx_log, timing_mx_log_c, 'timing_mx'); +check(coarse_foff_est_hz_log, coarse_foff_est_hz_log_c, 'coarse_foff_est_hz'); +check(sample_point_log, sample_point_log_c, 'sample_point'); +check(foff_hz_log, foff_hz_log_c, 'foff_est_hz'); +check(rx_bits_log, rx_bits_log_c, 'rx_bits'); +if cml_support + check(symbol_likelihood_log, symbol_likelihood_log_c, 'symbol_likelihood_log', tol=1E-2); + check(bit_likelihood_log, bit_likelihood_log_c, 'bit_likelihood_log'); + check(detected_data_log, detected_data_log_c, 'detected_data'); +end +check(sig_var_log, sig_var_log_c, 'sig_var_log'); +check(noise_var_log, noise_var_log_c, 'noise_var_log'); +check(mean_amp_log, mean_amp_log_c, 'mean_amp_log'); +printf("\npasses: %d fails: %d\n", passes, fails); + diff --git a/libcodec2-android/src/codec2/octave/train_120_1.txt b/libcodec2-android/src/codec2/octave/train_120_1.txt new file mode 100644 index 0000000..c26e1a0 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/train_120_1.txt @@ -0,0 +1,512 @@ + 6.7484 7.6125 6.0332 5.2789 1.5239 2.2353 2.0748 0.5289 0.8748 2.5432 -2.2863 -3.1910 -0.0434 -1.9857 -3.3605 0.7069 -5.9493 -0.5672 -0.6798 -18.0977 + 4.0503 3.9086 2.9225 2.3773 0.6580 -0.4363 -0.0644 2.4063 1.3428 2.4542 0.5275 0.9820 -1.3277 0.6811 0.0273 -0.1838 -0.0222 -0.6478 -2.2405 -17.4152 + 13.3284 12.1212 10.6531 9.8214 11.0388 15.8120 19.7110 16.5488 16.1068 15.8771 7.2553 4.2486 -6.0036 -12.5476 -20.1299 -28.2803 -25.3971 -21.7907 -11.5143 -26.8590 + 21.4405 18.4703 17.8693 14.9679 11.2994 6.4906 4.7717 0.1959 -0.8801 1.8991 1.9793 -4.9755 -7.7852 -10.0492 -8.5295 -8.2893 -4.1203 -12.4072 -16.1660 -26.1817 + 4.0023 3.8279 1.2681 1.0053 0.7002 -0.3886 3.4465 -1.4055 -6.7846 -2.3345 -2.9050 -0.1344 3.4192 2.4319 10.0096 3.9279 0.6807 0.3220 -3.8325 -17.2565 + 29.8276 21.1543 12.7853 13.0246 5.8164 3.7469 2.4198 0.1510 -4.5449 5.2695 11.7552 -4.8954 -6.0291 -8.9780 4.9650 -10.6540 -12.5363 -21.6056 -18.2985 -23.3739 + 4.8610 5.1207 6.5382 9.8638 15.4754 18.8192 14.8018 10.7685 12.4401 14.0392 2.9200 -3.7283 -9.7213 -13.5526 -16.0730 -13.7571 -5.4267 -12.2552 -14.5143 -26.6193 + 3.0429 3.0335 4.4785 5.6483 5.3476 5.7519 3.5651 4.9007 4.9672 -0.7330 -0.6458 6.5888 5.2957 -2.0068 -6.0189 -7.2145 2.5545 -5.8358 -7.4936 -25.2263 + 5.9384 7.0203 10.7433 15.2477 14.8437 8.0949 3.1384 -0.0014 -0.1756 2.1601 8.1029 0.4123 -6.8062 -9.6038 -6.2302 0.4409 -8.9878 -10.1638 -4.6903 -29.4840 + 7.1880 6.1134 5.4021 10.5427 17.0718 14.5658 6.8632 2.2257 0.4412 3.8257 9.0388 -1.1212 -6.7639 -9.2412 -8.6575 -2.9951 -8.6659 -9.4220 -6.6046 -29.8068 + 9.8859 4.3889 3.6253 3.2033 4.6563 4.5967 1.8747 -0.0037 3.2114 3.8854 3.1501 0.8523 -5.2830 -8.4603 -5.1159 -3.9157 6.9800 -1.5270 -6.0421 -19.9624 + 7.6208 10.1888 12.8648 16.4838 14.9269 7.8064 3.5594 -2.8048 -3.6303 -10.8596 -7.1254 -2.8890 5.4295 -2.5015 -5.5359 -2.9934 -6.5980 -7.1493 -4.9387 -21.8545 + 12.7227 17.1387 21.7055 19.8068 12.1832 5.8645 -2.4103 -3.8445 -5.5496 -5.5608 -0.2010 5.1772 -1.4666 -6.6602 -1.2573 -3.1593 -10.7925 -14.3751 -12.0047 -27.3167 + 7.4465 7.8765 9.4912 12.2074 12.1631 11.4780 7.6294 2.6922 0.1566 -2.1903 -1.5699 -1.8031 2.2555 -1.5591 -7.9267 -10.3612 -5.5432 -5.5673 -10.0797 -26.7960 + 0.3749 1.9725 2.6868 6.3326 8.9635 12.8113 13.6523 14.0916 11.2443 1.2914 -1.9954 -2.9443 -4.6718 -4.3132 -3.4613 -8.1105 -7.9033 -7.0956 -6.5898 -26.3361 + 10.3072 10.6822 8.8253 4.8992 4.3627 8.8165 9.7824 3.7264 0.4265 0.6068 3.0934 2.9121 -0.6717 -5.8045 -1.7344 -9.1008 -8.8333 -6.0633 -11.2321 -25.0005 + 10.6992 14.8060 18.9665 22.4210 21.8710 15.6647 10.6160 12.1366 14.0479 7.0707 -3.8212 -12.1770 -16.1111 -19.3389 -18.8315 -17.5346 -7.9646 -9.4592 -17.5614 -25.5000 + 9.9592 11.7001 14.2704 14.1434 7.3322 4.2766 -0.0567 -2.7113 -5.7358 -6.7390 -5.9067 -0.1939 4.8177 -3.9810 -7.2528 -3.2695 -1.5685 -7.8940 -6.3355 -14.8548 + 17.6322 19.5153 22.4362 16.2943 10.4698 2.5066 -2.3936 -5.3770 -7.9766 -9.8004 -12.9640 -13.1015 -9.8076 -5.7565 1.8732 0.4843 3.3621 -1.0048 -4.8377 -21.5543 + 9.9491 17.4987 23.2236 17.3142 6.8072 6.6873 1.9421 1.1415 2.9409 6.8470 2.4633 -7.2869 -8.9792 -3.3155 -0.1918 -11.8037 -18.6298 -12.6475 -9.7620 -24.1984 + 9.2080 9.9971 12.5064 20.0609 20.9647 10.9574 7.4360 4.4943 4.8454 11.0636 1.8176 -7.3479 -12.5617 -15.3912 -11.5022 -5.0309 -14.7556 -15.4294 -6.4150 -24.9176 + 7.7917 9.3291 11.8185 15.3501 19.3235 20.6869 19.8160 14.6028 10.2893 9.9407 9.8534 3.6182 2.7695 -5.2735 -19.7962 -24.6834 -27.0316 -25.6805 -24.9149 -27.8096 + 0.1108 3.1261 6.8163 12.4528 16.9192 10.8153 2.6109 -0.2652 -4.8897 -6.1056 -7.3218 -4.4594 4.3004 3.7728 -2.8276 -0.0458 1.0104 -6.4884 -6.4860 -23.0456 + 12.9442 10.3059 3.1303 2.1611 1.4795 2.7580 6.9527 8.4487 7.1533 1.4465 -0.9113 -3.9971 -4.9090 -5.3881 -3.1011 -0.4922 -1.1819 -5.3279 -8.2374 -23.2345 + 25.0945 17.8572 8.9500 2.7040 0.2187 1.4115 0.7421 0.5831 -0.3096 0.9334 -2.9667 -4.0352 -2.8473 -4.8594 -4.5863 -4.4311 -2.8466 -4.4808 -5.1669 -21.9645 + 14.6124 19.7986 21.2066 15.7620 8.7509 3.7653 -0.5239 -3.8894 -6.8522 -8.4979 -8.1879 -5.8438 0.5485 6.7415 0.4745 2.6750 -10.3676 -15.0245 -12.2357 -22.9125 + 11.9959 12.9771 17.1177 21.5310 16.8892 10.8731 9.7276 8.5106 12.9569 2.2512 -6.9324 -13.2124 -16.5380 -18.0518 -16.6252 -9.7038 -6.1220 -8.7542 -6.8998 -21.9905 + 12.8107 14.5670 13.4289 7.1693 3.4265 3.1397 2.5457 -1.2214 -0.3887 2.4506 3.9777 0.9056 -6.9195 -7.3811 -3.2619 -0.3714 2.6266 -6.3479 -12.2319 -28.9244 + 2.6437 2.2575 3.8643 6.0625 10.9091 16.9554 21.5045 12.7233 9.3579 9.4439 12.8585 4.4528 -2.4283 -4.7330 -2.2502 -11.3098 -18.5273 -22.4570 -23.1304 -28.1976 + 10.5757 10.9392 14.0126 18.2101 14.3745 8.6896 4.9080 1.0411 2.3482 7.2221 4.5440 -5.0353 -11.2852 -13.0882 -10.9600 -3.0288 -9.5005 -10.2217 -6.6739 -27.0717 + 14.6172 4.5412 13.3824 9.2916 19.2818 13.6563 14.4089 10.1260 1.6926 3.9361 -0.6461 -5.1244 -9.3641 -13.9807 -11.4128 -11.8597 -0.8237 -20.3149 -12.3561 -19.0515 + 4.0591 4.6177 7.7662 6.8737 9.4052 10.1099 12.8714 8.1202 6.6015 7.9224 1.7548 -1.6325 -4.8379 -5.0955 -2.1947 -8.4220 -11.8799 -10.7107 -12.0066 -23.3222 + -3.3385 -1.1297 3.0554 4.9769 3.8625 8.6998 8.0974 -0.5519 -1.0699 -5.4771 -4.7235 -4.8192 7.1236 -0.4895 -2.0107 0.1838 3.5180 3.2804 3.1904 -22.3779 + 10.9362 15.2821 18.1297 12.4682 2.6895 -1.2007 -1.7676 -6.1681 -6.0524 -5.8064 -3.1002 4.3237 2.0263 -5.5109 1.0348 -0.4760 -4.6274 1.4107 -7.5329 -26.0586 + 27.0648 22.2199 14.8908 7.7845 2.8689 -0.0364 0.0683 -0.1186 -1.6323 -2.4217 -4.0112 -2.3476 -5.4442 -5.8509 -6.4386 -6.2558 -6.7739 -5.9348 -7.0916 -20.5398 + 4.3156 -0.2499 1.1824 2.8225 8.1910 5.2798 2.2597 -3.0043 -5.0382 -5.2727 -4.0013 2.6952 8.1245 -1.1517 -1.8957 2.4603 3.0897 -1.0817 -0.1353 -18.5898 + 17.5894 22.9315 26.4862 22.1620 13.7474 13.5177 15.2005 16.3224 4.9523 -4.2419 -8.3503 -12.4022 -12.6698 -6.7159 -16.2122 -20.1926 -20.5969 -16.0749 -12.5173 -22.9353 + 6.5871 8.0443 8.4339 11.3345 17.3665 13.4455 6.9211 2.0512 -0.7348 -1.2898 1.0076 8.4862 -0.3360 -6.4714 -5.9432 -4.1602 -12.1155 -12.4645 -10.9269 -29.2355 + 19.0066 20.3716 18.0417 9.4806 4.8058 0.3359 -4.1091 -8.1930 -8.9962 -9.7495 -13.2924 -8.6275 -4.9424 6.0502 -6.8142 -7.1166 -3.0922 8.8016 5.6937 -17.6547 + 4.7309 -6.5949 4.9914 7.3489 9.0188 4.1567 7.1949 0.4917 5.0462 7.5219 1.5314 -15.3803 5.3130 -0.0983 -7.0327 -1.2671 -0.4646 -1.6442 -0.7446 -24.1190 + 13.7639 5.1424 5.3193 3.8945 3.9574 1.4034 0.1896 -4.0608 -2.5264 -4.9434 2.8459 2.6311 -2.7915 -3.7842 -0.3711 0.5487 5.3766 -4.3496 -3.2801 -18.9656 + 12.6752 14.7799 16.2157 18.6944 14.1390 7.0937 3.8206 -2.4778 -3.9766 -4.4531 -2.8711 3.2148 0.6800 -9.1748 -10.1600 -6.0557 -0.8581 -9.2828 -14.0109 -27.9924 + 15.0025 18.2042 22.4086 21.6195 14.2308 10.5772 6.7291 6.0463 11.7877 8.4162 -3.4731 -11.2708 -15.6923 -17.5613 -14.5235 -4.5248 -17.8954 -18.3529 -10.3105 -21.4173 + 2.5368 2.8687 8.7229 5.2089 8.9671 2.8847 -1.3535 -4.4273 -4.9060 -7.8939 -15.4750 -10.4797 -4.4811 6.5892 9.9939 12.9078 3.2705 1.3246 3.7883 -20.0468 + 8.5207 11.8364 16.4466 19.9166 16.0662 8.4129 4.3290 -0.8928 -3.7592 -5.4071 -4.2870 0.4615 9.9611 5.8190 1.7969 -7.7765 -17.3073 -19.5235 -17.7924 -26.8211 + 3.0595 10.0158 11.1623 5.9413 3.1988 -2.1129 0.3528 -3.0158 -2.3599 -1.3347 -1.0479 3.9189 7.8019 3.0538 -1.6139 0.8043 -4.9290 -6.9959 -7.2918 -18.6077 + 17.8476 19.4332 25.4614 19.1508 12.2748 9.4543 6.1101 3.6929 2.9336 5.5407 -9.2238 -17.0071 -20.8856 -22.9308 -21.1711 -15.0234 4.8627 2.2867 -2.1943 -20.6125 + 9.6165 8.8018 11.1694 14.6183 18.4154 13.4481 7.1580 4.1650 1.8242 0.9521 5.1356 4.0270 -5.9523 -12.0202 -14.3055 -10.5893 -2.8308 -12.2805 -13.3723 -27.9806 + 13.4166 16.7617 20.6572 22.0976 15.9129 10.6410 5.4061 3.1570 -0.7256 1.2303 5.9463 5.1273 3.4864 1.6884 -10.9215 -19.5567 -22.8693 -20.4758 -24.0420 -26.9379 + 8.0404 15.9476 21.0441 15.0820 8.2842 3.1036 -0.2419 -4.2559 -6.0751 -7.4529 -5.5847 1.5520 8.3483 3.3751 -1.0503 -10.4691 -11.9360 -5.5738 -6.8713 -25.2662 + 19.9950 20.2102 18.7443 12.7220 5.8592 3.8088 0.4504 -1.5876 -0.0425 -3.0873 5.5382 -0.1499 -5.8500 -7.9372 -6.2374 -0.2643 -15.0702 -16.9914 -9.3644 -20.7458 + -2.6024 -7.4950 -1.2522 3.5119 3.9726 3.4991 2.4457 3.2158 -0.1830 -1.7087 -7.3996 -6.8962 -5.2421 -7.5762 -9.1433 6.6126 10.5297 10.4556 18.2991 -13.0433 + 0.8317 2.2343 3.6899 5.6335 5.8479 6.4330 6.0022 5.3630 2.3387 -0.5344 -1.0716 0.6509 -0.7175 -4.0229 -6.0631 -4.7546 -1.9700 -4.6226 0.0933 -15.3616 + -9.3660 -6.9175 -4.9307 -3.1828 -1.6587 -1.4971 -0.1586 0.6208 0.5169 2.4709 4.6017 5.3127 4.5449 3.2690 3.7590 3.4511 3.8260 3.9369 4.8805 -13.4790 + -1.1830 0.5095 1.1754 2.3109 2.2722 1.3243 1.6529 -0.1799 -0.2874 -1.2863 -2.2761 -1.5668 -1.2037 -2.4367 -3.9243 -2.1186 2.3502 1.4312 9.5827 -6.1467 + 9.2349 10.7650 18.1608 20.6655 13.5769 5.4902 3.0323 -1.0259 -0.5010 1.7689 10.3810 12.0253 9.1922 -4.9615 -15.0315 -19.9651 -21.4377 -17.6800 -6.4577 -27.2328 + 10.6391 10.7983 11.4949 16.5329 19.2664 13.6129 6.1846 2.4573 -3.1501 -7.1814 -7.9387 -2.6238 4.6419 -5.9113 -9.3510 -7.0591 -3.2275 -10.2820 -10.5308 -28.3726 + 18.6364 19.3874 19.5930 14.3075 9.4402 3.6045 -1.9801 -5.5352 -9.0094 -10.9308 -12.7345 -14.0779 -10.9593 -3.8674 6.3753 9.5959 -1.4018 -7.4988 -6.1435 -16.8015 + 9.4969 11.3591 11.5468 7.8918 4.7217 3.0266 4.2145 2.2878 1.2224 5.6903 10.6919 4.2718 0.7184 -3.7583 -6.7954 -8.0558 -7.9668 -10.2861 -12.5018 -27.7759 + 1.9805 4.9512 7.0160 7.8284 8.7891 8.0863 7.7994 7.9865 8.6027 13.1944 14.7771 11.0643 2.1716 -5.7171 -10.9834 -8.7615 -16.8907 -14.3039 -17.4732 -30.1175 + 7.4683 9.4924 11.1231 14.0490 15.3387 7.9538 5.2116 -0.0275 -3.0014 0.1050 0.6547 7.9660 -2.3476 -7.0894 -4.6113 -2.0949 -15.9720 -16.2041 -7.4758 -20.5386 + 4.8388 4.2032 3.5738 6.4994 10.8701 16.7006 14.8672 6.7149 3.1448 0.6167 2.5321 7.5899 1.6456 -3.0073 -4.4465 -2.3406 -11.2907 -15.6965 -17.0827 -29.9328 + 9.8208 5.5733 3.2835 2.3197 5.4502 9.1113 10.3794 8.6442 6.0107 6.4897 4.2548 1.1709 -4.1757 -9.6942 -10.5243 -11.8609 -10.0641 -3.4488 -2.2532 -20.4873 + 5.8783 5.8851 7.6595 5.2009 5.1000 1.9820 2.2615 1.4023 -1.1079 1.1247 3.7199 2.8362 -0.5182 1.4421 1.5607 -8.4521 -3.7106 -1.6008 -5.2750 -25.3888 + 13.8298 17.3228 17.9494 18.8765 12.6415 7.5326 5.2828 1.0300 -1.0231 -5.4994 -6.6194 -2.5155 4.6895 -3.4515 -7.2113 -4.1051 -13.7542 -14.3604 -11.8611 -28.7541 + -8.8559 -3.0649 2.2249 4.9828 6.4170 6.9906 9.9342 12.0149 12.2463 14.3103 18.4345 6.3234 4.2404 -2.7341 -6.9396 -10.7644 -10.1668 -12.3674 -16.3891 -26.8371 + 10.9983 13.5279 16.2801 19.6892 16.9475 11.0028 3.9633 1.1799 -2.0078 -0.9850 2.7247 -0.1311 -6.6215 -8.5890 -4.3971 -11.9543 -15.4358 -13.3278 -4.8427 -28.0217 + 7.2013 9.1028 13.1142 19.8377 22.5360 16.6528 11.8330 10.3141 12.9885 15.8372 9.0995 8.4627 1.1838 -14.4656 -21.4397 -23.6775 -22.5547 -24.8595 -24.4974 -26.6692 + -8.4073 -6.6779 -3.9580 -1.6241 -2.1470 -2.2867 -2.2534 -3.0205 -4.5931 -2.5545 -2.1350 -1.3098 1.1053 -1.1397 1.2170 6.2234 3.6093 9.8015 23.5766 -3.4260 + 9.6955 11.4467 15.0851 15.4765 9.8267 3.5490 -0.5777 -2.7726 -5.1878 -5.7225 -4.4558 0.4969 9.2914 5.8917 6.4235 -4.2514 -11.0149 -9.4893 -13.0444 -30.6665 + 2.9943 1.4307 0.8714 2.2925 2.1145 2.9148 2.4003 1.9382 1.6662 -2.3476 -2.0877 -1.9322 3.3342 1.7171 -0.9114 3.2785 1.7852 1.4651 -1.3549 -21.5695 + 7.7138 9.3400 11.7519 14.3217 14.9762 11.0903 9.9040 9.3599 10.4611 6.3795 -3.9927 -7.6734 -12.4888 -12.1729 -5.7999 -5.5417 -9.5690 -9.5926 -7.6846 -30.7825 + 4.4498 9.2290 15.0677 17.9679 11.2745 2.6730 -0.9888 -5.6255 -7.5349 -8.4589 -8.4510 -5.5027 1.7669 4.3143 -4.8629 -2.0721 4.6797 -5.0125 -4.4213 -18.4923 + 11.1829 12.4396 12.7925 12.6901 8.0150 3.4089 1.7847 -0.2306 -2.0077 -1.0178 2.2167 -0.4542 -8.4111 -8.9029 -8.0861 -3.9439 -6.2512 -2.2635 -2.1307 -20.8306 + -0.0237 3.5900 4.5144 3.8794 5.7527 11.0182 8.9091 7.1863 7.0702 7.1782 4.7799 0.6784 -4.3508 -5.3991 -6.5953 -5.6132 -9.5378 -5.6903 -1.3834 -25.9632 + -2.7117 -1.4799 1.2116 2.3262 3.7406 3.7668 1.2697 0.2086 0.7399 -1.3479 -2.2145 -3.7982 4.9747 -0.4583 -1.7465 -0.9161 7.2119 0.8965 -0.2723 -11.4012 + 7.6123 10.5335 16.3125 23.5319 21.6117 16.3290 18.2001 16.9715 0.9425 -7.0707 -12.7338 -16.0871 -18.4761 -17.8994 -14.8763 -4.8440 -8.9433 -6.8294 -0.8772 -23.4080 + 9.1763 3.0851 4.6724 8.0499 14.6517 16.8559 10.4532 11.9797 13.2732 7.6578 -1.4245 -7.0469 -11.9925 -15.0269 -14.7577 -15.9057 -2.4494 -8.2002 -4.4694 -18.5819 + -0.3793 0.7119 0.4558 1.7011 3.1548 7.4097 8.6888 7.5902 9.1020 7.3493 9.7346 15.2626 6.8726 -0.7975 0.8553 -9.6815 -9.3426 -14.3122 -13.9791 -30.3963 + 5.2988 6.3406 1.2009 3.3308 2.0290 2.8107 1.0030 0.4513 -1.4458 3.0391 1.2595 -9.2407 1.3164 1.9175 0.7738 1.8301 0.5948 -0.9497 -2.7482 -18.8117 + 23.5623 25.0580 25.0568 22.4174 16.4713 14.4026 11.1159 5.0250 -1.0266 -8.5971 -10.1924 -9.6120 -11.8638 -13.7028 -4.2000 -6.0100 -12.7481 -18.5497 -22.5946 -24.0120 + -5.0424 -4.2120 -3.2703 -0.4028 1.8335 3.2012 2.3768 2.0802 0.6396 0.2079 0.1418 -0.1844 2.5056 -0.2078 -1.3169 -0.2911 0.8140 1.7717 5.2809 -5.9255 + 7.6330 9.9835 15.1303 18.9128 13.0001 5.9224 1.3978 -3.1674 -6.4703 -8.3713 -7.7470 -5.2412 1.6661 5.3754 0.9111 2.2634 -7.6214 -11.2828 -5.6474 -26.6470 + 15.3965 19.4488 18.3928 11.4564 4.0261 0.4604 -4.6326 -9.8409 -11.0926 -12.7123 -13.1035 -12.3357 -8.4063 1.3638 7.8807 5.5655 3.4210 0.7205 5.4867 -21.4953 + 4.0267 4.8087 7.0895 9.6094 12.6372 17.6545 19.7244 17.4364 13.7517 13.9367 6.0059 -4.5448 -9.4075 -13.3403 -13.6620 -10.1856 -10.5214 -17.1512 -19.3146 -28.5537 + 26.5287 22.7007 21.6748 17.6005 11.9372 12.6653 5.4749 -6.1299 -8.9419 -6.9620 -5.7222 -5.6209 -8.6350 -10.0876 -8.1562 -7.7238 -5.4233 -10.0839 -13.1237 -21.9717 + 3.9740 4.1572 5.7242 12.4480 17.3522 11.6512 5.2405 1.2103 0.5569 2.7329 9.6369 -0.5073 -5.1263 -2.7956 -0.7621 -3.7186 -1.7764 -8.4788 -18.8985 -32.6208 + 6.8442 11.6517 15.0164 13.0383 3.5465 0.5949 -3.0134 -7.5262 -8.2082 -8.6101 -7.2813 -1.2345 9.2720 5.1011 6.0543 -0.9163 -4.5878 3.4588 -4.8078 -28.3926 + 7.8637 4.0004 -2.9380 2.0521 2.2442 -0.4633 1.8855 1.9277 -0.6295 1.3834 1.2896 1.0703 -0.4938 1.5669 0.0079 -1.5584 -2.0070 0.9263 -0.4846 -17.6435 + 5.8623 7.6023 7.9357 8.1933 9.8252 14.3094 18.5980 17.6310 14.1029 11.3791 8.9224 4.7903 -4.5730 -11.3683 -17.8078 -14.2065 -11.2294 -16.2936 -23.1509 -30.5225 + -1.7942 -0.0063 1.9950 3.6026 3.2262 0.8396 2.3621 2.3730 0.2704 0.4107 0.3605 1.3362 -2.3048 -2.1177 -2.8566 0.0808 -2.4432 2.0828 10.0173 -17.4341 + 16.0587 21.3030 20.2092 12.2290 4.0091 1.0523 -3.6402 -8.1002 -8.5006 -10.1681 -9.7303 -7.7995 -1.2107 8.9891 5.5157 1.2399 -8.3907 -7.4334 -1.1958 -24.4366 + 15.8248 21.2415 22.3705 19.6523 12.6511 4.9800 2.0524 1.2562 -2.0002 -7.0989 -8.4866 -8.1644 -3.6111 2.9801 -6.3159 -7.3905 -2.5939 -11.1587 -18.1433 -28.0453 + 11.4701 14.8919 19.2495 17.1766 9.1256 4.6224 0.3569 -3.6692 -6.2969 -8.7664 -7.4764 -1.7487 3.4354 -4.0219 -5.5797 1.1971 -7.0079 -5.6899 -4.9140 -26.3546 + 4.0502 6.3561 7.7528 13.2425 22.1071 16.8285 10.8539 9.9555 11.6373 14.4871 1.0686 -6.0140 -8.7291 -9.9474 -5.2420 -14.0196 -19.6200 -16.4317 -13.2116 -25.1241 + 14.0747 12.9823 14.7396 18.3580 20.8024 21.6686 20.4893 18.2777 14.8271 4.2101 -4.6228 -5.0852 -8.9555 -9.9704 -14.4886 -22.2364 -24.8924 -24.6202 -19.9776 -25.5806 + 6.5756 6.5342 9.0959 14.5314 20.6452 22.1123 17.0555 14.5823 18.4626 9.7441 0.1482 -4.4759 -4.9624 -0.2271 -12.9306 -21.6336 -23.8195 -22.7039 -21.8165 -26.9179 + -2.4130 -0.2375 2.8918 5.5011 6.7427 5.7418 5.0778 5.1858 4.3188 3.4462 4.3416 1.8899 2.3449 -0.9372 -1.2877 -2.8414 -4.0969 -5.4193 -7.2573 -22.9920 + 18.6934 11.3904 9.2311 9.3832 5.4199 3.6295 -0.1793 0.6487 -3.5589 -4.0062 -6.2031 0.6797 0.8497 -5.8255 -3.0197 -0.8407 3.4120 -4.6925 -10.2551 -24.7566 + -1.1447 1.5640 1.4686 1.7604 1.7234 2.3262 4.7312 2.6246 3.8383 6.5465 3.3830 1.7225 -1.7619 -1.0275 -1.1491 1.9434 -4.9663 -2.3871 -2.8449 -18.3507 + 14.1023 13.5650 10.1510 8.7911 7.7313 7.6480 9.2651 8.0399 4.9244 6.1141 5.5459 -0.9256 -6.1550 -7.0836 -8.6484 -9.0926 -9.2649 -13.5303 -12.0852 -29.0925 + 9.8451 13.4743 16.9269 13.4623 5.8133 1.7553 -0.7487 -3.9831 -8.1249 -9.5689 -8.7611 -6.3983 -0.6612 10.9895 12.8583 0.3283 -8.6023 -10.4136 -5.9048 -22.2865 + 19.2227 18.1307 15.9732 13.2757 8.9377 4.0318 2.7371 2.4204 4.8079 5.9436 -1.6587 -5.6682 -8.2354 -8.6156 -5.7373 -5.9194 -13.5825 -11.1928 -9.7272 -25.1435 + 9.7172 12.7596 17.7880 19.5982 13.1714 6.9756 4.2961 1.3629 -0.4383 4.9630 8.7840 0.9395 -2.9094 0.8700 -9.7739 -17.6442 -19.7626 -14.0983 -10.0576 -26.5411 + 19.7847 26.9921 27.0885 20.9467 13.4352 6.9927 3.8926 5.5073 6.3950 3.6410 -3.5260 -9.9366 -12.2833 -15.4366 -15.2739 -13.4030 -13.6697 -14.5223 -14.0162 -22.6082 + -4.7450 -2.3439 -1.2527 0.2681 2.5169 3.0271 3.2731 1.1854 -1.4898 -2.2085 0.9214 6.1154 5.0556 7.1405 5.3972 1.8235 -0.1874 -0.9732 -2.7856 -20.7382 + 2.7354 2.9846 4.5226 11.0075 16.9767 9.7039 5.0497 0.2367 -2.2382 -2.2319 3.3972 5.8953 -3.5572 -7.9222 -5.1006 4.0687 -6.7980 -6.9512 -1.5062 -30.2728 + 1.8923 1.9933 1.7272 1.4697 2.1029 2.7198 2.2271 0.4083 1.4890 2.3633 0.0136 -3.1335 -1.8351 -3.4645 -2.5082 0.1244 -0.6305 -0.2515 2.6670 -9.3744 + 7.3147 10.8559 16.3202 21.3322 15.5047 5.7917 2.0324 -0.5787 -3.8385 -3.1611 4.7722 6.9085 -0.8153 0.2585 0.5455 -11.9753 -19.4608 -19.4821 -11.0006 -21.3242 + -4.8271 -2.3317 -0.8263 -0.6913 0.0284 2.1785 4.8530 2.4866 0.5257 1.0973 0.9581 2.0508 -0.0850 -0.3240 -2.1544 -3.6769 8.2530 1.6818 2.7619 -11.9586 + 28.0344 21.3292 26.7011 15.9009 17.4755 11.8357 5.0600 6.5559 -4.3031 -3.5802 -8.7494 -8.4692 -7.5683 -2.5689 -10.7488 -16.5549 -18.6071 -16.7713 -13.4451 -21.5263 + 11.4465 12.5754 14.6510 12.0835 5.3520 1.6789 2.3021 -2.4719 -2.0905 -0.5169 -2.1754 -2.9241 -2.7917 2.0815 1.0635 -3.6587 -4.7680 -6.8125 -8.2348 -26.7899 + 11.1007 8.9165 11.8079 11.0313 1.9749 -0.9229 -2.4670 -6.7769 -9.1537 -10.4373 -8.8596 -6.3617 0.2425 8.3330 2.9722 9.5504 -3.2943 -3.1680 4.4488 -18.9367 + 12.7055 18.2073 17.6143 9.1957 1.5762 -1.0952 -4.9687 -6.1290 -7.3791 -7.2053 -4.3066 3.6014 9.8467 10.7313 -1.8676 -11.4282 -13.9225 -8.1802 2.6837 -19.6797 + 0.8368 -1.7610 0.4628 2.3612 5.1160 7.7374 9.4921 4.3865 6.1712 5.6238 6.3738 5.3491 2.7348 5.4859 4.6651 -8.4273 -10.9892 -8.6750 -10.7619 -26.1822 + 12.9582 16.0251 19.0637 18.9347 12.6765 7.8161 3.8112 0.9397 6.1611 7.4639 -2.5194 -7.1391 -10.2242 -10.1934 -4.1747 -5.7525 -14.4868 -8.2946 -13.9643 -29.1013 + 29.3165 26.9707 19.9517 12.4469 7.3647 2.8794 1.4068 -2.4963 -5.4012 -4.1083 -5.2153 -6.4891 -5.9548 -6.4872 -6.6510 -6.7351 -9.9422 -8.4833 -11.8558 -20.5171 + 7.6646 7.8496 5.3460 3.4574 6.3183 1.1408 3.1494 5.1045 0.2373 1.0847 -0.4320 -0.3662 -0.3503 -0.5473 -8.1949 -0.9695 -1.7599 -3.3828 -3.0248 -22.3253 + 7.0587 8.6157 9.7452 14.4294 20.8498 17.0788 7.0614 2.4228 -0.5017 -1.0215 3.1054 5.3564 -3.4904 -7.3987 -7.4398 -7.0656 -8.8032 -12.8630 -18.8666 -28.2731 + 5.7670 -2.6937 9.6459 -0.7839 10.7523 2.7960 -2.6113 -3.2915 -6.2928 -7.6167 -12.6729 -5.4796 5.0447 13.7582 10.3050 4.5191 -1.3433 5.4917 -1.7375 -23.5567 +-11.2311 -7.9712 -5.4028 -3.3542 -3.1975 -4.2245 -3.9952 -5.3576 -5.3493 -4.8108 -5.4962 -2.9288 2.5785 4.7736 13.8058 17.8731 9.8332 14.9500 11.0220 -11.5171 + 2.8142 1.3603 4.2714 4.8975 4.3374 -3.4231 3.1881 5.0714 3.9705 6.2234 3.7268 5.2790 1.3825 -7.6582 -2.9268 2.0075 -4.0570 -5.6086 1.2855 -26.1418 + 4.9776 6.4457 7.7463 9.3687 9.5559 9.1954 6.3666 4.9237 2.1719 1.7788 1.4634 -0.3859 -6.1409 -5.3778 -2.6336 -2.5068 -8.3667 -7.0441 -11.2867 -20.2514 + 10.0472 11.9967 16.4907 19.9334 16.2325 9.2915 4.3130 0.7097 -4.0959 -8.1186 -10.5064 -10.3134 -5.2102 1.0801 -1.5982 -3.8949 1.2501 -7.5248 -12.9333 -27.1495 + 17.0433 19.1713 22.6813 17.1064 8.7516 4.3917 -0.7236 -5.3026 -7.9288 -8.3773 -7.4784 -3.7859 -2.5186 0.0200 -1.5465 0.1954 -10.7830 -12.0301 -3.0579 -25.8283 + 18.6591 22.3501 23.5831 19.0252 13.9063 13.3289 9.0463 -3.2346 1.2718 1.4619 -4.3706 -7.4089 -10.7710 -11.8151 -0.8947 -8.7094 -22.3259 -8.0672 -18.5235 -26.5118 + 3.2886 3.8514 1.5062 4.9096 3.9001 3.8964 -0.6349 -1.5534 -1.3119 -2.3130 -1.8455 -3.5666 -2.6094 3.4411 -1.0089 -3.0556 4.5250 3.3979 1.1349 -15.9520 + -5.6652 -3.8931 -1.8885 1.6299 2.3371 2.0746 2.1285 0.4372 0.0031 4.2521 5.2010 3.3227 2.8933 1.9467 2.1449 0.9405 2.1680 2.3807 -1.3113 -21.1022 + 21.7270 24.2953 23.2112 13.4917 7.3423 1.4843 -3.1924 -4.8355 -10.3896 -11.3960 -12.8133 -11.6304 -9.9774 -2.6034 3.7943 3.5260 -4.2988 -6.0579 0.3494 -22.0269 + 7.1102 6.3521 11.6650 18.7864 16.7459 8.3216 5.8454 4.3436 9.4868 7.7601 -3.1382 -10.3196 -14.1642 -15.1634 -11.6972 -1.8200 -7.1959 -8.5258 -1.8553 -22.5374 + 14.2212 17.8028 21.4842 24.9383 24.9854 22.3982 21.3770 20.9687 13.4315 0.0683 -9.1695 -13.1215 -13.8982 -14.9798 -18.1636 -20.5802 -22.0396 -23.0260 -22.3178 -24.3795 + 8.9039 9.7955 9.3225 11.7206 17.8844 21.1802 19.2262 17.3421 13.9029 7.3860 -2.6995 -8.3297 -10.1319 -8.7756 -6.0590 -8.7597 -15.4747 -24.0243 -25.5723 -26.8375 + 3.8554 4.2234 6.2441 12.5445 18.1461 14.0699 5.9992 2.7220 1.0526 2.1813 9.5825 3.3502 -4.3618 -5.0291 0.5610 -10.3142 -15.3449 -12.7063 -7.6401 -29.1358 + -8.9085 -6.1917 -3.8341 0.0473 -0.3559 -1.0455 0.4343 0.7424 0.1788 -2.4081 -1.5815 0.7755 2.7896 -0.3538 0.5914 4.7530 5.3039 5.5717 8.4610 -4.9697 + 6.0177 9.1902 12.5400 17.6650 18.0833 11.1113 3.6376 -0.9348 -2.4340 -3.3221 -2.4870 5.4750 6.1443 -3.6923 -2.5169 -0.6902 -11.0083 -16.8129 -17.3554 -28.6106 + 12.6629 16.5188 17.0120 11.3763 2.7817 -0.7077 -5.5288 -8.1972 -9.1883 -10.5072 -9.3239 -6.2042 2.0877 8.3448 2.7802 8.4635 -5.0126 -9.0230 -5.5900 -12.7449 + 26.6077 25.1133 19.7421 13.7493 7.5294 4.8418 5.8235 5.9404 3.3399 4.8147 -1.6758 -4.4299 -7.1722 -6.5470 -9.6023 -9.9251 -17.0327 -19.5694 -18.7525 -22.7953 + 9.3391 15.4719 19.7226 13.6838 5.7655 2.9423 -0.2309 -3.0447 -5.0071 -3.6430 3.6089 8.1171 -1.0555 -2.5360 2.0952 -6.4482 -11.0547 -9.9411 -11.5931 -26.1921 + 6.7164 12.9088 8.1465 2.9974 -1.5306 3.7966 4.6355 0.1956 -4.4054 2.5643 -3.5126 -0.4027 0.5107 -1.6406 0.9829 -5.6846 -0.0083 -4.8894 -3.3272 -18.0535 + 1.8584 3.5453 10.7864 10.3313 8.8364 11.3153 12.6550 8.0839 10.2072 14.1247 0.1105 4.9955 5.9811 7.9709 7.5141 -6.0319 -21.0185 -23.4977 -32.6987 -35.0693 + 13.1044 15.4062 17.5958 18.0756 11.3524 4.3670 2.6428 0.8781 0.0399 6.6751 8.2361 -2.6757 -10.1776 -9.8299 -3.1506 -9.5151 -14.3971 -6.2859 -13.5883 -28.7532 + 0.0688 2.2921 6.5965 8.3598 8.2327 8.6486 7.1471 7.1631 4.4823 3.4067 11.3001 9.5567 0.6574 -2.5849 -6.7404 -8.6614 -8.6399 -12.0189 -13.1958 -26.0705 + 9.5134 11.1944 14.6379 21.3303 20.9351 12.8622 5.9234 3.0673 0.5662 2.8569 7.4992 -0.6339 -9.8527 -12.4761 -11.2573 -4.7464 -13.5940 -18.0638 -14.8928 -24.8691 + 5.5904 5.1588 4.7053 4.3271 5.8271 9.5093 8.4110 1.6453 -2.2667 -2.6767 -1.4248 -1.1260 2.4114 -1.8009 -4.8190 -8.2201 -2.9355 -0.2567 -0.3488 -21.7105 + 0.4175 1.2148 5.1829 9.3743 9.7458 5.9476 5.0377 2.5369 -2.7391 -8.8960 -11.0818 -7.0650 -7.4393 -1.4335 10.1963 9.6385 5.0133 -4.2894 -3.8725 -17.4890 + 8.8274 9.1037 13.6965 18.9331 20.4960 15.7102 9.1227 5.5813 1.7546 1.3849 6.9672 6.4807 5.2247 4.2668 -9.8256 -18.2374 -24.2455 -24.1902 -22.7864 -28.2649 +-10.4296 -11.2348 -7.6061 -8.6646 -7.9499 -6.1250 -4.3918 -6.8877 -5.4461 -2.2579 -1.3507 2.2980 4.8244 12.7426 12.4434 14.4927 14.8125 12.9871 9.6224 -11.8790 + 8.8890 12.0408 17.2338 23.3492 22.1801 17.3250 16.4611 18.6109 12.0359 -2.1102 -7.5218 -11.7288 -11.4854 -7.6790 -11.7033 -21.2349 -23.6258 -19.3358 -7.8566 -23.8442 + -7.7648 -7.6325 -5.9874 -5.7763 -5.5038 -4.9788 -3.5524 -3.9264 -4.7269 -2.6727 -1.6911 -0.4884 1.8633 1.5449 3.1375 9.0909 11.6855 13.4220 16.9117 -2.9544 + 17.5979 21.0040 20.3690 15.7264 13.3239 13.0722 13.4678 1.7577 -6.0904 -6.9925 -8.3415 -10.6335 -9.5482 -1.5234 3.9870 -6.9271 -17.4878 -18.4739 -8.9267 -25.3608 + 6.1805 4.1462 3.5010 2.7230 3.9708 8.1302 9.4910 3.6927 2.9790 2.0598 -0.6100 -1.6298 -2.5238 -2.5441 -3.9959 -2.7189 -3.9403 -3.9477 -4.9568 -20.0067 + 7.7322 4.4707 5.2320 7.8782 9.1005 5.4418 6.0577 3.7093 0.1939 -0.2785 1.1984 -2.6011 0.6595 2.7395 -0.9452 -4.5096 -8.4529 -6.4501 -6.8768 -24.2995 + -6.4169 -3.8203 -3.3676 -1.3384 0.0068 -0.0917 -0.6540 -1.1092 -2.2062 -2.8976 -3.0409 -2.6706 2.9750 6.3064 7.4779 12.0806 5.7715 5.5715 0.9432 -13.5194 + 7.6067 9.3813 13.4849 19.9139 22.7781 18.4350 15.9140 18.9134 10.1002 -4.3291 -8.2178 -13.6741 -15.7040 -16.5313 -14.1193 -3.7115 -13.7922 -12.8183 -7.7992 -25.8309 + 4.7167 3.8923 5.7519 8.0369 12.8563 16.7380 15.0698 9.7568 7.4623 7.4165 7.7550 1.1797 -6.3964 -6.5897 -1.5093 -9.7231 -17.0341 -15.7607 -12.6623 -30.9568 + 9.6098 13.4286 18.7280 18.1791 9.8536 3.5779 1.4841 0.4639 -0.5329 2.6536 9.8742 -3.2808 -8.9269 -11.0817 -6.3122 -2.5681 -15.3236 -12.3977 -1.9946 -25.4341 + 3.8990 7.6431 13.4623 16.8504 10.0821 3.4259 -0.1709 -4.7791 -8.1809 -9.2214 -8.3021 -5.9798 2.0125 6.9915 1.4712 6.5493 -3.7836 -4.9571 1.3613 -28.3737 + 13.9079 16.7984 20.6342 24.6533 24.3507 19.3643 17.9172 18.3920 11.7020 0.0010 -10.1043 -14.9084 -18.2285 -20.4094 -21.5267 -19.7383 -13.5385 -9.5045 -16.6159 -23.1465 + 7.1797 11.3922 15.7490 19.3949 17.3819 10.7478 7.3006 6.1472 9.1598 11.0073 4.7816 -2.4892 -3.7349 -3.7521 -1.7971 -9.8976 -22.2914 -25.7550 -23.0236 -27.5010 + 5.6600 8.4600 10.4652 12.1954 14.9914 18.5645 17.0459 10.3163 4.8130 2.3220 0.5889 4.1108 1.2082 -9.3950 -13.7061 -13.1090 -10.1060 -11.3113 -21.8744 -31.2396 + -1.8886 -0.7563 0.4909 4.9127 6.9239 5.1456 6.2254 6.4299 5.1768 9.1990 13.2223 5.4194 -3.0538 -4.7242 -5.1855 -3.7939 -7.3421 -6.1816 -4.3871 -25.8328 + 11.3455 9.9507 8.1659 6.0877 1.4526 0.9704 4.7975 4.0208 -0.5941 2.5357 1.5340 -4.3306 -1.6103 -4.4373 -0.0323 -2.6725 -2.0195 -3.5278 -6.3697 -25.2666 + -0.8009 5.6194 7.0974 6.1331 7.2063 7.4038 4.5741 8.4379 4.2968 7.9137 13.0725 2.3362 0.6963 -2.4917 -4.9374 -7.2728 -8.2160 -9.6329 -14.4558 -26.9800 + 9.4449 12.4990 15.8206 17.3018 10.9373 5.5366 0.8716 -1.2105 -2.4770 -3.4484 1.0611 6.1591 -1.7466 -7.5929 -6.9295 -2.1338 -8.9361 -10.3674 -6.3554 -28.4344 + 11.5326 10.9047 16.3163 21.0845 11.9757 7.0511 0.8356 -4.9870 -6.9450 -9.2309 -9.7748 -8.2038 -2.2957 5.5139 -5.4119 -2.7410 2.4166 -7.4497 -6.0628 -24.5286 + 9.3064 9.3678 11.2235 13.9991 14.4345 11.1982 6.3282 1.4131 -2.6884 -7.1825 -11.0075 -12.3749 -9.2573 -6.0414 2.3206 4.6097 3.5670 -3.2208 -9.5445 -26.4507 + -6.7163 -6.0323 -3.7943 0.8820 3.6629 4.3198 4.7402 4.0799 4.8854 5.8718 8.3927 9.6825 10.5717 3.8917 0.9125 -1.2807 -3.7018 -5.7570 -8.2525 -26.3582 + 10.2748 11.6455 16.3809 20.1490 18.2488 12.7899 10.3972 8.0106 -0.6794 -6.4024 -9.7054 -13.5667 -14.6497 -16.1902 -6.9531 0.2117 -0.7067 -1.2331 -10.6728 -27.3488 + 13.3782 16.3500 15.3612 8.9247 3.4890 -0.7729 -2.6106 -7.5432 -8.0129 -7.6140 -7.8535 -2.4356 6.5050 -4.5887 -3.2816 5.8982 -1.3889 0.3111 0.3606 -24.4762 + 10.0811 14.1057 20.3635 24.0314 20.3690 17.0236 16.4460 19.2548 6.0111 -3.4365 -9.9143 -13.0905 -15.0150 -11.4726 -6.6405 -10.0976 -14.6658 -19.9459 -19.4800 -23.9274 + -7.1817 -5.5458 -1.6137 0.8007 1.9284 2.5116 0.3432 3.3359 0.2833 -1.3305 -2.4960 -1.6366 -2.6968 3.6695 6.8225 4.4926 6.1940 6.7541 2.2072 -16.8418 + 9.6326 11.3478 14.3982 20.7665 19.7772 12.3406 6.1933 1.0438 -1.1521 -1.5860 1.8440 7.8419 -1.5328 -9.8703 -10.1973 -2.2440 -12.0413 -18.5948 -20.6014 -27.3660 + 1.5056 1.6880 4.2152 9.5291 17.0514 16.2096 8.5432 4.2111 4.4898 11.7231 5.5770 -4.8191 -7.5020 -5.9733 -0.7664 -10.2798 -14.8967 -9.8638 -3.1062 -27.5357 + 15.2115 17.9992 21.5012 24.9136 19.1760 15.8798 16.4094 17.8040 5.9025 -3.3769 -10.4408 -15.3738 -18.5882 -19.7882 -17.7007 -14.2386 -13.9566 -13.8247 -5.8162 -21.6922 + 12.1911 17.2966 17.4896 10.6943 3.5061 -0.1018 -2.5405 -6.3143 -7.6095 -8.5828 -7.4501 -2.2275 8.4004 0.0230 -1.6734 2.8727 -8.2243 -7.2548 -0.5950 -19.8998 + -0.4264 0.0708 1.9133 6.0904 12.7810 17.8469 12.0313 4.9753 4.2790 6.9401 10.3052 0.2003 -6.7328 -10.0168 -10.0292 -2.7869 -5.6536 -9.3242 -6.0818 -26.3818 + 7.8387 12.9821 20.1116 21.8527 15.0291 10.4182 9.9996 12.5177 11.6815 -0.1048 -5.5624 -6.4577 -2.0918 -6.3498 -17.7376 -20.9015 -21.1073 -13.6752 -3.7477 -24.6953 + 18.0184 21.7405 20.2020 16.4376 12.3859 12.2417 12.1975 6.3324 -4.4281 -11.4734 -5.9353 -8.8421 -10.3280 -4.7973 3.4477 1.4017 -15.9637 -17.1346 -16.9459 -28.5571 + 8.9922 8.4069 10.2569 10.5303 10.1285 4.9362 1.8698 -0.0537 -5.3906 -5.9983 -4.6797 1.6021 -1.9697 -5.3874 -2.3336 -0.9265 -2.7071 -2.3523 -3.3933 -21.5307 + 0.1643 -2.2100 -0.9888 -3.4801 -0.5275 -1.4680 -0.5683 -1.5514 -0.4216 0.5034 -0.8521 -2.7835 0.5014 -1.2182 -0.7495 5.2974 5.8643 8.2766 6.0259 -9.8143 + 7.6720 8.0788 9.1059 14.2217 21.6149 24.6272 15.4198 12.7487 14.5686 14.3925 0.6524 -7.7122 -12.3140 -13.4374 -8.0366 -14.9387 -21.7305 -22.0625 -19.3233 -23.5474 + 2.2815 1.7578 -0.6674 1.7705 0.4755 0.4978 -1.3799 -2.1107 -2.6075 -3.5652 -2.8715 -6.8295 -1.7109 2.8096 -0.7449 2.5543 8.6739 -0.5359 6.8846 -4.6821 + 18.2027 16.9209 12.1191 7.6862 3.0545 0.5751 -1.6156 -1.2378 -3.1289 -4.2377 -5.6464 -5.0994 -5.0515 -1.2417 1.1802 1.1938 0.3821 -6.3202 -6.4152 -21.3203 + 3.5023 4.9407 6.5095 8.9494 13.2647 15.1725 11.9431 6.2423 1.1652 -1.6313 -2.9929 -1.9072 3.4422 2.8306 -3.2309 -5.3351 -2.3238 -10.7536 -17.8375 -31.9502 + 4.7778 10.3180 13.9538 16.0868 9.1380 2.9991 -0.6627 -4.2067 -5.6625 -4.9839 -1.2287 7.7334 9.3244 7.4153 -4.1228 -11.6166 -8.7569 -5.6012 -5.8002 -29.1044 + -3.8341 -1.3838 -0.9472 -0.4209 1.7906 4.2155 2.2324 4.3091 1.1357 8.4456 9.7973 6.3722 2.6068 0.3293 0.1016 -0.3203 -4.2313 -3.6986 -3.9405 -22.5593 + 7.9933 10.9520 14.6109 19.7867 15.1983 6.5296 4.9056 0.7415 -0.5271 -0.1092 6.9036 12.3792 7.7901 2.0866 -9.1117 -12.3605 -5.7793 -23.1437 -29.0076 -29.8384 + 25.8990 23.1895 19.6721 15.4616 9.3167 5.4831 6.1546 7.4477 4.2279 -1.3757 -8.0309 -11.4646 -10.4795 -7.5543 -4.2227 -6.0439 -16.4547 -16.3865 -13.0397 -21.7998 + 5.9702 6.6918 8.5551 14.7594 15.5278 10.2403 6.0423 1.7099 -0.1415 0.4245 5.8906 10.2752 2.9571 1.0304 -7.5844 -15.4930 -16.0321 -8.3602 -12.0263 -30.4370 + 0.2377 1.2490 0.9118 1.8024 3.7548 4.8963 5.1515 4.2684 0.3786 0.5058 0.4839 -0.9914 1.4073 1.1727 -2.9065 -4.4307 -6.9456 -0.2385 0.3969 -11.1044 + 4.9017 3.2442 -1.2482 -1.2472 -2.0773 -5.4371 0.3708 4.1825 12.1289 1.2950 -2.3136 -3.1723 -0.4429 -1.6571 -9.7455 6.5626 13.4075 7.0987 -2.0865 -23.7642 + 26.5958 8.4474 11.9082 11.6976 1.4010 -0.2500 3.9848 3.6429 -6.0468 2.5341 -5.2699 -11.5085 3.8103 -6.3108 -2.4679 2.1530 -6.3876 -7.1780 -8.4060 -22.3496 + 2.2962 0.8041 0.8352 6.6150 14.5461 15.0856 3.2964 0.5549 -1.6557 -2.0236 2.8955 7.5016 -1.2031 -5.6899 -4.7833 1.2942 -7.3403 -8.3771 -4.0417 -20.6100 + -3.1520 -0.4969 6.6485 7.8768 5.5605 6.5283 5.6337 4.1543 13.9779 2.7762 6.1398 -3.7070 -1.7982 -2.8944 -6.0041 -6.5265 -11.4873 -1.5122 6.0580 -27.7754 + -8.0020 -4.6131 -0.7821 3.3160 4.4465 4.7754 2.8155 1.0612 4.8060 6.0492 5.9390 3.1446 2.8568 -0.6657 -2.6961 -2.1500 -0.9756 -0.2816 -1.9847 -17.0594 + 12.4378 17.8157 22.2857 21.4926 15.3987 11.6565 8.4610 -5.9608 -14.7466 -15.8101 -21.8850 -17.3295 -13.0545 -3.3503 5.7314 1.5346 1.1396 -7.5940 -1.8366 -16.3862 + 0.8964 0.1937 0.1104 1.6479 5.6517 12.1890 10.2771 4.4234 1.0502 -0.5311 1.2594 6.8796 5.2931 -3.9156 -6.0500 -0.9098 -4.2858 -6.9837 -7.0958 -20.1002 + 19.8439 13.4280 9.6622 10.6650 8.0950 5.5066 1.7572 -1.0429 -0.8012 -2.8142 -0.4934 1.3117 0.5243 -6.1730 -8.1290 -6.3324 -1.5063 -10.0417 -9.1390 -24.3207 + -2.7279 -1.7097 -1.1534 1.6639 5.7537 6.7942 10.6044 12.5105 10.6069 10.0936 6.6639 5.7680 -0.0784 -3.9348 -2.0808 -2.5423 -7.7730 -12.2311 -11.4054 -24.8224 + 10.1275 12.1619 16.2723 20.8127 20.9740 14.8019 10.1842 6.5306 4.4543 7.4531 12.2713 6.9620 6.8204 -5.0668 -18.1362 -24.0479 -25.9037 -25.4208 -24.3890 -26.8618 + -9.9466 -6.5695 -9.8093 -1.7391 0.0580 3.2073 7.0375 2.3619 -1.1764 -5.8692 0.3050 -4.2033 11.2777 -0.3904 7.8268 9.8649 4.7504 6.9825 7.6743 -21.6424 + 14.0137 16.9699 19.0697 15.0058 7.0268 5.9083 2.9474 2.1595 3.8159 7.2602 11.3975 7.5965 1.6600 -6.7074 -13.8401 -15.7435 -16.6488 -16.4066 -16.4466 -29.0384 + 6.2399 3.2858 -0.2213 -1.4923 1.3132 3.9330 3.5221 2.8631 1.3615 -0.0790 -1.0125 -1.0737 -0.3033 -0.8480 -0.4749 -1.1495 0.1031 -0.2090 -1.3002 -14.4580 + 14.6593 20.5101 23.6344 20.8409 12.5620 6.6891 3.7103 -0.8534 -3.6042 -5.9363 -7.0110 -3.7764 1.6775 -5.6072 -12.2281 -10.8044 -4.3275 -11.1148 -14.7836 -24.2367 + 17.5445 22.4817 15.1353 12.5880 5.1049 1.9643 5.3928 -3.5987 -0.4750 11.7373 12.9388 -3.8264 -3.5752 -8.3127 9.4226 -10.0441 -20.2747 -19.0638 -21.8010 -23.3385 + 11.5639 14.1176 19.1780 24.7909 18.2344 11.0457 8.2594 6.6617 7.5852 14.1840 12.1883 7.8148 -0.4947 -16.4472 -21.5615 -22.7378 -21.8493 -21.9703 -24.9810 -25.5820 + 7.3833 6.5793 5.7205 10.2722 16.6567 15.1599 9.5922 5.5668 5.0234 9.3817 5.3741 -5.1082 -9.8091 -12.3432 -12.5495 -6.2366 -5.9929 -8.3697 -6.8581 -29.4426 + 0.3726 -5.6285 -3.2253 2.1557 3.8332 12.1538 14.6059 12.3634 15.7294 17.0679 4.8054 -1.6834 -7.5585 -11.9417 -12.8749 -9.7037 -1.2933 -5.8852 -6.0304 -17.2623 + 12.4589 17.5375 23.1698 18.7129 9.0574 6.8369 3.3366 -0.7668 -3.5028 -5.8079 -2.0422 3.5413 -5.4920 -15.4559 -14.9601 -7.1860 -2.1139 -10.3945 -4.5301 -22.3991 + 7.7831 5.9803 3.3957 1.1363 0.6624 -0.3876 -1.2270 0.5350 0.3563 5.2276 9.1991 8.9238 2.6320 -1.9335 -4.2120 -2.5342 -1.0999 -4.9168 -4.9485 -24.5720 + 12.7865 11.7808 12.0132 12.7418 11.7725 11.2618 10.9064 7.0094 3.3808 -2.3233 -4.5714 -6.7413 -8.0255 -8.7048 -10.9950 -7.0616 -9.3710 -7.6597 -4.9100 -23.2897 + 7.4583 10.3954 16.3813 20.3810 16.5656 9.1371 4.5296 4.0559 6.8658 9.8043 0.1187 -6.6202 -8.4161 -2.4957 -9.4787 -16.3418 -17.6122 -13.1639 -7.5007 -24.0638 + 10.5778 12.5102 15.4500 16.2510 14.1076 12.4513 11.9259 10.4537 6.3771 1.6824 -3.8825 -5.5239 -8.8633 -8.0708 -4.6460 -3.2386 -13.9943 -17.4761 -15.8823 -30.2093 + 16.5450 21.4563 20.0130 10.5420 0.7521 -0.1817 -5.7313 -0.2690 -4.1817 -0.5968 6.2079 4.1626 -0.4622 5.1095 -10.2058 -16.0783 -19.9597 -11.6630 4.3789 -19.8380 + 0.6538 1.9228 2.2930 5.2351 12.5744 11.0394 7.4850 0.8228 -3.4564 -5.0324 -2.9456 4.4755 9.6050 1.6136 0.0025 -0.9954 -6.7769 -7.8860 -2.9330 -27.6973 + 14.1315 17.7109 22.9482 25.5022 19.8506 12.4355 10.8121 14.0608 12.2635 -2.6541 -11.3457 -15.5204 -18.0730 -18.7390 -15.7720 -7.2576 -9.9721 -9.7355 -17.1060 -23.5400 + -5.7314 -4.0590 1.0581 0.9805 1.3616 2.7093 6.3692 11.6381 12.0180 9.1818 6.8001 1.9409 3.0785 -2.5335 -5.7990 -0.6774 0.8325 -4.7436 -7.1073 -27.3175 + -1.0640 0.7851 2.7160 6.1021 12.1198 15.4431 10.3026 4.0089 1.9648 -0.0384 2.4993 9.2599 1.9572 -4.2838 -3.1953 -1.1928 -7.8283 -8.5999 -10.0789 -30.8773 + -5.6296 -4.3307 -2.3209 -0.8933 0.2894 -1.9304 -2.0575 -2.7780 -6.2185 -5.9192 -6.6197 -5.5076 1.7000 -2.2417 6.7340 9.7221 5.4135 15.4230 16.2356 -9.0706 + 21.8983 23.2393 21.5176 17.3026 15.6381 10.7095 -4.6739 -9.4131 -7.3736 -9.6360 -10.3893 -7.6173 -3.6940 2.4229 12.3234 -14.8401 -14.2133 -12.8790 -4.4302 -25.8921 + 11.8056 15.6560 20.2939 16.8416 9.1858 2.5617 2.6711 -1.0207 -1.4500 -0.2437 6.6714 6.5193 -0.4136 -1.1308 -3.7531 -13.8441 -14.3531 -10.4897 -18.0817 -27.4259 + 55.7273 39.9360 26.2526 15.0127 6.4718 0.7391 -2.3157 -3.1939 -2.9475 -3.3569 -5.3235 -7.9446 -10.6626 -13.1662 -14.2100 -14.4691 -14.4121 -13.8376 -15.6433 -22.6564 + 3.7665 2.9173 4.2496 1.8470 7.9023 14.8241 11.0448 3.4540 2.7173 -3.8368 2.5626 4.5604 2.9217 -9.5401 -8.3622 -8.8234 -1.4224 -0.0449 -2.7094 -28.0285 + -9.3983 -8.0419 -4.4832 1.9754 -0.3749 4.6985 6.4445 3.4462 1.2139 4.1530 -6.0488 0.4383 7.0647 3.8491 2.7818 -2.6890 2.0052 6.3893 4.3086 -17.7324 + 10.6303 13.7716 17.1718 20.1678 12.2486 3.3600 2.4058 -2.5934 -4.8765 -6.0115 -4.6562 -0.7932 8.0003 -2.2840 -3.8243 0.1863 -9.1648 -14.9839 -14.0940 -24.6607 + 16.6586 21.6444 20.8223 12.8954 8.1955 4.1214 1.5648 -2.8573 -5.5724 -6.5555 -5.8004 -2.3591 4.8330 -0.2831 0.7092 -9.8961 -15.4807 -12.0228 -6.1807 -24.4365 + 6.2715 7.1856 9.0377 12.3924 19.0793 22.2584 18.7678 12.6682 9.6569 13.2645 2.9549 -2.9501 -4.4734 -4.2440 -12.7065 -19.5653 -21.3156 -21.7041 -19.8037 -26.7746 + 6.6118 7.9766 9.5899 16.7112 22.8331 15.9736 8.1328 4.9522 3.0471 7.2666 11.8402 -1.4154 -4.2808 -5.2523 -8.9476 -17.0691 -18.3281 -12.6216 -21.0003 -26.0198 + 17.3127 17.4868 17.7344 12.4834 5.8856 4.6009 1.0730 -2.7678 -2.0723 -0.4628 -3.7999 -5.8370 -8.6148 -7.6108 -6.5104 -2.5688 -1.6184 -6.1466 -7.5013 -21.0659 + 3.4054 5.0769 7.0766 9.8006 20.0250 22.5645 11.5478 6.2329 4.4723 6.4844 10.6573 0.2331 -6.2477 -11.0870 -10.3507 -4.2484 -15.1989 -19.0756 -16.4193 -24.9492 + 4.7627 -2.1833 -2.2828 -3.7716 2.8453 7.5100 11.3439 6.1880 0.3611 -1.2837 -10.2990 -7.9318 -4.0985 1.3582 6.4088 6.3304 9.4372 -0.3781 -7.0962 -17.2205 + 0.0639 1.7461 3.2578 7.1373 14.2936 21.0383 16.8137 10.1108 14.3040 14.1399 0.3676 -6.3231 -10.5295 -12.7919 -9.1838 -2.4821 -12.1068 -13.6518 -9.1740 -27.0298 + 6.2012 6.2177 8.6617 15.7008 20.0807 16.3263 9.7644 7.6670 11.6809 8.6315 -2.6559 -7.4948 -10.0457 -10.1131 -6.9875 -12.9972 -15.7760 -10.0148 -6.4425 -28.4048 + 8.4071 5.8192 3.5662 1.9627 2.4472 1.8597 -0.7370 2.3814 0.1779 1.4958 2.9385 -6.0143 -2.3152 0.3049 -1.7145 0.7158 -1.3399 -5.1439 2.0438 -16.8555 + 7.4409 3.3788 6.5115 14.5248 13.0646 4.0268 -1.1894 -5.0999 -7.6910 -8.4282 -7.9356 -3.3516 6.9774 0.9806 -1.3988 5.5785 -3.1694 -5.2282 1.6484 -20.6401 + 11.6728 5.2904 7.2713 8.1521 8.6202 4.8390 1.9077 -2.7604 -4.5028 -8.9428 -12.4662 -11.0383 -4.7642 4.2903 3.3702 1.0547 5.8752 0.7203 -0.1952 -18.3942 + 1.7662 2.1132 0.6823 0.5069 -0.7694 -0.5730 -0.6749 0.4539 -2.3850 -0.8937 3.2905 1.9366 4.8907 8.8910 3.4773 1.6832 -0.3850 -1.0325 -5.4486 -17.5299 + 11.1327 8.1369 5.9398 7.2387 9.0755 13.7563 15.6715 10.9671 4.3603 6.5521 8.2784 8.2998 -3.5109 -8.8874 -13.5723 -11.9565 -11.2912 -14.9059 -15.3573 -29.9274 + 17.2359 18.8517 18.1626 16.5245 13.3466 10.8703 8.4673 4.7337 2.6350 0.0183 1.1954 4.7388 -2.9359 -6.0731 -7.4347 -16.3769 -19.9350 -20.0072 -15.2078 -28.8095 + 15.9881 16.1253 11.9372 8.7157 5.3883 4.3873 5.5095 5.6589 0.5361 -1.1208 -4.8170 -4.8077 -4.2337 -3.8897 -5.7866 -5.1486 -6.6937 -4.6271 -8.1104 -25.0113 + 10.5287 10.4645 11.0189 12.4921 10.2092 2.1803 0.6775 -1.9607 -7.8737 -8.5232 -10.8456 -10.0601 -9.5234 -5.7091 4.1283 1.9979 4.9082 2.3842 -1.6831 -14.8109 + 6.8712 7.1195 7.8478 9.0102 7.5469 4.9121 6.0618 3.0705 0.6628 1.7728 2.7140 6.3541 3.1029 -4.2377 -6.3687 -2.2545 -6.3865 -11.4164 -9.6711 -26.7119 + 16.6601 22.0460 20.3084 13.4923 8.0021 8.7024 10.1260 10.4026 4.1888 -3.7328 -6.1710 -10.8693 -16.0494 -7.8483 0.2833 3.3381 -13.0116 -16.9474 -14.2501 -28.6704 + -1.6472 -1.5329 -0.7265 -0.8590 1.5500 3.3445 6.0600 5.7678 2.9402 4.2316 1.8384 -2.4116 1.7488 -1.1846 0.2843 -0.4495 1.5215 -2.2191 -1.2847 -16.9723 + 5.4499 9.2168 13.6525 18.6245 21.2266 16.3225 10.2029 13.7648 16.3433 7.8345 -0.8506 -3.0654 0.8282 -4.7895 -14.3191 -13.6263 -16.5382 -25.7242 -26.3799 -28.1733 + 5.4928 7.2730 11.4735 16.9546 13.9651 4.9178 1.4991 -1.5005 -3.3689 -4.2367 1.4622 8.4912 0.6337 -0.2593 0.3732 -7.8143 -10.1871 -7.5615 -7.0778 -30.5301 + 6.6781 5.8903 6.7632 9.1810 8.8397 9.7239 8.7155 7.7970 6.3227 3.4228 0.2514 0.1110 -1.6716 -5.4364 -5.9387 -8.2352 -7.5149 -7.0855 -8.8552 -28.9591 + 11.8209 17.4970 19.5821 14.6674 8.7810 10.5929 17.1599 11.1304 -1.5934 -2.4291 -7.1040 -7.2023 -9.3009 -11.7782 -8.5498 -11.3872 -9.7560 -0.1211 -12.0128 -29.9970 + 10.1575 12.1948 14.9933 16.4447 14.1842 8.2787 4.1829 1.5996 -0.4007 2.6686 4.5920 3.8070 -0.5362 -2.8498 -6.0317 -8.0974 -11.2561 -15.9690 -16.7096 -31.2528 + 17.3728 16.5602 12.1580 2.2953 -0.7338 -2.2088 -3.0060 -3.4950 -5.7703 -1.8968 -4.1417 -2.2550 -0.4691 -0.6536 -2.4783 -1.3584 1.1130 -1.5486 -2.1800 -17.3041 + 10.9509 14.6912 20.9171 20.7445 13.3882 9.0276 8.4810 10.4480 11.1634 -1.3107 -8.8976 -12.4550 -14.1419 -12.2168 -8.1653 -9.1840 -14.6536 -10.7798 -3.3490 -24.6582 + -4.2511 -4.3180 -6.4235 -4.0719 -2.3887 -3.1485 -4.2032 -3.5194 -7.5010 -5.4107 -2.3368 0.6165 -2.5480 -6.5746 5.7100 1.8165 14.8553 24.3830 15.8024 -6.4884 + 6.8815 10.8626 15.3667 14.4704 2.5878 0.6962 -3.7687 -7.2033 -9.3334 -10.5308 -9.6190 -8.2135 -3.3921 8.1225 8.7748 9.4979 -0.1825 -3.9609 2.5378 -23.5939 + 10.7457 13.4613 16.3838 18.1633 11.9764 6.2322 2.2046 -1.6815 -5.4025 -5.3261 -1.9194 5.7850 7.0183 8.8506 -7.0398 -15.8090 -17.0181 -9.4482 -9.5562 -27.6203 + 4.4895 6.7459 11.3127 18.7251 18.1351 6.5502 1.1677 -1.0341 -3.9953 -2.3382 3.5745 11.8555 2.9192 6.0596 -4.8984 -13.0118 -16.2470 -15.0252 -10.6982 -24.2871 + 10.1449 10.3471 14.7490 16.1718 16.9528 11.3815 6.8749 1.4265 -2.7864 -6.1956 -8.0139 -7.8556 -2.8591 4.0596 5.4548 3.3633 -10.2166 -16.2406 -18.8135 -27.9450 + 9.5266 9.8619 11.6564 16.1435 22.5856 19.0228 9.5649 5.1013 3.9082 6.9523 9.4453 -4.8784 -10.6008 -16.0258 -16.6123 -14.7740 -6.6639 -13.8342 -16.3927 -23.9867 + -2.8166 -0.2578 2.8925 4.4555 5.6756 4.6914 3.4417 3.4041 1.8890 1.8575 -0.5242 1.9867 0.9536 -0.9744 -1.4010 -2.1961 -1.2827 -2.3186 -2.1481 -17.3281 + 6.5757 10.4876 15.8653 20.5177 18.3749 8.4114 4.7411 0.5009 -2.9659 -4.1461 -4.5681 -0.6566 5.8038 -2.3737 -8.5532 -6.5787 -2.8561 -13.7548 -17.8769 -26.9485 + 7.1295 8.3469 8.9916 14.7649 20.5000 15.5149 7.3359 0.6792 -1.5195 -5.0373 0.9468 7.0372 -4.0339 -9.7787 -8.9444 -0.8558 -12.0386 -13.0157 -7.1764 -28.8465 + -6.3643 -3.5600 -0.9853 1.3808 3.5164 4.4752 4.2783 4.1699 0.4058 -0.8097 -0.9913 3.1386 9.3653 -1.1057 -1.2662 0.7587 1.7985 -2.7481 1.1071 -16.5641 + 10.8441 6.1056 4.5464 11.5523 11.5304 4.8593 1.2036 0.6177 -6.5224 -11.5032 -13.3278 -7.1852 -1.6717 9.2735 6.7578 -0.9050 -7.2789 -6.0827 3.0089 -15.8228 + 2.4300 2.4475 8.1825 8.1925 2.2974 10.8311 15.5690 1.4027 0.3290 -0.4366 6.3648 1.0487 -0.9166 -8.1367 -8.1915 -9.5690 -3.4184 0.0616 -4.9205 -23.5675 + 18.5545 22.2390 21.2685 17.0100 9.6982 4.7320 4.3296 7.5541 8.1889 7.8498 0.4258 -3.7349 -6.3446 -8.3581 -11.0931 -16.2715 -16.4055 -15.8123 -17.4410 -26.3892 + 5.3049 3.9686 5.5462 12.1792 19.9309 17.0320 8.3644 7.8784 10.6383 15.3943 3.6647 -0.1421 3.0499 -3.2605 -15.9284 -20.0685 -19.5084 -15.1548 -11.4151 -27.4740 + -4.1173 -2.8993 -1.1226 2.7523 4.1168 4.2377 1.6192 1.4859 2.7141 0.4810 0.9555 -0.9423 1.2205 0.5970 0.3948 0.4670 2.1347 1.5199 1.6806 -17.2954 + 15.7137 20.9924 24.3419 24.5468 20.7453 18.1011 19.1224 15.9122 12.9399 8.1629 -8.2323 -12.3399 -17.0242 -22.3729 -23.1787 -23.2286 -17.6989 -10.8077 -20.3082 -25.3873 + -1.2634 1.8562 5.1481 8.6050 8.7868 9.5351 6.6634 3.8160 -0.1296 -4.6560 -0.5036 -0.2003 1.6621 -1.6607 -2.8913 -4.8208 0.3233 -5.1066 -6.1044 -19.0592 + 10.6986 11.8307 11.5659 12.4490 11.1880 6.9008 2.6629 3.0301 3.4569 5.3227 2.5092 -1.0853 -3.8118 -7.0840 -4.9747 -7.3629 -11.0099 -5.9887 -11.0008 -29.2965 + 13.6712 17.1821 19.2431 13.3261 5.9589 0.4984 0.3670 -2.3834 -3.2315 -2.1198 4.8356 0.4745 -8.1763 -11.1278 -9.8688 -0.1733 -8.1227 -9.3563 -5.3546 -15.6426 + -5.7735 -2.5076 -1.5044 -1.1663 0.0004 2.3285 2.2748 3.5509 0.5101 -3.3403 0.8431 1.7502 3.2945 -0.4888 1.3903 4.0779 1.6571 2.3564 6.2297 -15.4829 + 9.1796 11.0931 14.7746 19.7918 17.0503 10.0451 7.8355 5.3063 5.9805 11.7545 10.2992 6.2216 2.6489 -6.8542 -15.2068 -16.6927 -14.0990 -23.4163 -26.3767 -29.3354 + 4.4691 6.3690 7.7808 12.8470 20.5705 17.7665 9.4381 6.2778 2.4431 5.0549 9.9596 3.2883 -2.2059 2.0400 -4.0438 -15.0151 -19.7303 -18.2469 -20.2388 -28.8235 + 25.3208 24.3974 22.6154 19.5733 14.8131 10.5701 9.4361 4.3748 -1.5593 -4.3511 -14.7283 -17.6258 -0.9520 -8.5196 -7.3624 -3.2510 -9.9332 -17.3271 -21.4343 -24.0570 + 22.3042 16.1278 12.0077 14.7975 10.7206 8.3648 8.0610 10.1267 7.5498 1.8723 -3.9201 -8.2481 -10.1623 -11.3760 -12.7367 -5.0050 -3.3744 -11.9178 -17.4700 -27.7220 + 4.0018 3.5852 3.3315 5.3461 4.3656 2.8461 -0.0206 -2.5696 0.1895 5.1002 3.3534 0.2158 1.3297 -0.9671 -0.5937 -1.9855 -1.7054 -1.7064 -4.2453 -19.8713 + -0.1820 0.3377 2.3741 5.1705 4.8793 2.2995 4.3309 2.2662 0.4173 -0.8843 6.0098 9.0178 2.9640 -0.8977 -1.5385 -6.1656 -4.1289 -4.7989 -1.1105 -20.3607 + 7.6526 7.4466 4.8852 0.6442 1.5298 0.3141 2.6136 0.1768 0.3184 1.5717 0.2364 -0.4716 -4.0283 -1.7854 1.1771 -1.1242 0.5833 -0.2901 -4.6526 -16.7979 + 19.3739 25.1966 25.2676 19.4367 10.1976 2.4144 -1.1928 -4.0638 -8.7478 -10.5230 -11.0799 -12.5634 -10.0392 -5.3666 3.7592 3.3440 0.1212 -8.8586 -13.7562 -22.9202 + 9.6043 10.5410 12.3377 19.7574 26.3167 19.8022 16.1636 16.4176 17.5852 2.8061 -5.6826 -11.1198 -15.0897 -15.5002 -11.1047 -14.2676 -20.4525 -20.5783 -15.3843 -22.1521 + 12.9015 20.6704 27.9257 24.9274 19.2594 24.2150 19.1475 0.5334 -3.3152 -12.4822 -15.0498 -16.9033 -19.2802 -17.1972 -9.8015 -9.8416 -13.7988 -8.2071 -2.2124 -21.4912 + 14.4389 13.4012 16.1103 14.9288 9.7959 11.0171 12.0893 -1.4171 -9.8704 -8.5713 -15.4225 -18.6377 -16.5003 -13.9403 1.0172 8.7826 2.1557 -0.7217 -0.1613 -18.4945 + 3.2298 2.2245 4.4788 6.2407 6.6193 4.0854 3.5648 2.2977 2.4361 0.5689 -4.6553 -1.2701 -2.8888 -2.1474 -1.0212 -1.5878 -0.7381 0.5436 -4.6923 -17.2887 + 12.1886 11.0008 17.9358 24.3010 22.2969 15.0778 12.8771 17.0838 11.2261 -0.0847 -7.9648 -13.0993 -17.1559 -19.7583 -18.6302 -14.9903 -5.4184 -14.9564 -12.1370 -19.7926 + 18.1628 19.7982 21.7942 23.1496 22.2974 18.3029 13.8973 12.5987 14.0955 8.3018 -1.2018 -2.7097 -5.1243 -15.5625 -20.9814 -25.9011 -25.5502 -25.1062 -24.3739 -25.8874 + 5.1200 2.6682 2.7787 5.1220 7.7683 7.6609 0.3239 -0.5597 -2.1976 -4.2025 -2.3433 5.4581 3.3195 -4.6819 -7.7339 -5.9433 6.7709 -3.0093 -0.4617 -15.8570 + 3.1474 3.9068 4.6743 6.1980 3.9172 5.5703 3.7560 5.3815 6.4792 7.4263 4.0188 -0.9053 -2.9276 -4.2640 -3.8751 -2.5664 -3.8921 -5.7279 -7.3914 -22.9261 + 7.7606 7.9634 9.2590 13.4058 20.9130 19.2571 11.4285 9.1142 10.4227 12.6605 1.3940 -7.8667 -12.9049 -16.1586 -15.3321 -7.7158 -10.1835 -11.8246 -14.2319 -27.3607 + 9.9378 9.7046 10.1765 13.1670 9.5151 2.2155 -0.0456 0.0357 -0.3521 -1.2640 0.0667 3.9496 -0.7853 0.9935 1.7327 -2.1738 -2.4763 -8.9075 -14.5354 -30.9548 + 9.4566 14.4761 17.5184 16.5421 10.8319 4.8634 3.7958 1.0301 -0.7413 -4.7772 0.1278 10.6261 1.7256 -4.7562 -1.8151 -1.2979 -10.9708 -19.1139 -21.0656 -26.4558 + 4.1609 4.3674 5.1630 10.4393 19.9966 22.0365 15.0772 16.7404 13.2009 0.0579 -7.2967 -13.1855 -16.4671 -16.2778 -13.5417 -3.6468 -7.6575 -10.0591 -0.8708 -22.2374 + 9.2619 9.2850 10.6963 10.0411 5.3819 1.8030 1.0922 -0.3660 -0.8976 -3.1810 -0.6819 -3.8642 -8.4569 -8.9974 -5.5095 -1.9498 -5.7587 -2.8793 9.9987 -15.0177 + 16.0944 15.0736 17.4290 17.1266 16.3425 13.9152 -0.3124 -3.4633 -3.3349 -5.5676 1.0220 7.3152 5.0978 0.8308 -5.9027 -14.3898 -14.2461 -12.2320 -23.5828 -27.2154 + 2.0137 5.7764 10.2219 14.9245 16.5703 10.5235 3.0729 -1.4882 -7.2050 -6.2506 -5.1311 1.5065 6.9953 -1.4430 1.8240 -1.5831 -9.7701 -7.7954 -0.2269 -32.5358 + 0.8118 3.1428 4.1975 8.8492 17.1316 16.9999 8.6244 -0.0326 -4.9530 -5.2292 -0.1353 6.3691 -2.1837 -2.6835 3.8299 -6.3313 -4.7140 -0.2060 -11.6261 -31.8615 + 16.0656 15.8566 16.2660 14.0919 7.2745 1.1478 0.5592 -3.1884 -2.7528 -3.9872 -1.5200 -5.6031 -7.1936 -11.6082 -9.9024 -5.9648 -1.2652 -4.4434 -0.5317 -13.3008 + 6.0546 7.8172 12.5175 18.9740 18.6314 12.5099 8.6741 7.3229 9.6232 16.1584 9.3568 6.3688 5.3827 -10.1648 -19.1392 -25.0842 -25.6307 -21.0082 -12.2957 -26.0685 + 8.7645 5.7385 7.3877 9.4659 8.7034 6.7927 2.2815 1.6420 0.5587 -0.7987 1.2054 8.0228 11.5479 4.5805 -6.4932 -9.4841 -11.6576 -7.6077 -9.5897 -31.0604 + 13.5337 13.1762 15.6646 19.9549 24.3470 21.3479 19.5471 19.3675 13.3653 -0.5856 -8.6584 -13.2572 -16.9863 -17.9847 -20.7708 -15.4798 -11.0509 -15.4702 -16.1382 -23.9221 + 9.4656 10.0639 11.4433 14.6680 18.7771 15.2024 9.3195 5.1370 1.9578 0.3561 3.7670 8.6933 1.3200 -4.9956 -10.6736 -14.3320 -17.7829 -18.0592 -14.3140 -30.0137 + 1.5799 4.3053 2.3818 2.8910 -1.2059 -0.8300 -0.1903 -0.1292 1.0233 3.9206 3.9828 2.2978 3.2320 -2.5703 -2.6923 -1.3776 2.9213 0.1727 -0.5110 -19.2019 + 6.8519 4.8647 1.9844 2.2401 3.7555 1.5005 -1.3694 0.5704 2.1485 0.7600 0.6917 -1.0898 1.8295 -1.7615 0.1607 -2.4085 0.4928 -1.2003 -0.2145 -19.8066 + 26.8652 27.9313 22.2964 13.2728 4.9234 4.9750 10.5105 12.7213 4.9587 -6.5278 -2.0124 -3.4059 -5.9594 -7.3378 -10.2568 -18.1183 -18.7465 -15.1523 -18.6899 -22.2476 + 11.7015 12.5524 16.8036 20.5917 17.3325 11.6535 7.9132 3.4464 6.4909 8.4604 0.1120 -8.6770 -13.3036 -17.0534 -16.5775 -11.3553 -3.4540 -9.9071 -10.9540 -25.7760 + 20.0026 21.9415 20.1743 15.7692 9.6829 6.6171 12.1877 15.1379 6.9729 -2.6223 -11.9260 -8.0030 -5.4775 -7.9242 -14.3282 -6.4602 -11.9823 -18.5276 -14.5214 -26.7133 + 8.4727 10.3130 16.1554 22.5237 20.4885 15.1245 10.9192 10.3785 14.0959 8.6752 -2.6735 -8.1503 -8.9174 -2.4684 -9.1899 -21.2524 -22.7439 -18.1241 -17.6618 -25.9650 + 16.4001 11.0790 6.5408 3.9922 0.9638 0.6155 0.1321 -0.0033 -1.5205 -0.5347 0.0838 -0.8675 -0.2837 -1.6297 -1.6342 -2.7530 -2.7291 -3.0597 -3.9086 -20.8833 + 12.8347 13.9930 15.6832 15.4917 10.9362 11.4157 15.6476 4.3710 -10.8720 4.3584 -2.6363 -7.3238 -10.3423 -4.3725 0.4684 7.2994 -11.0045 -18.8176 -14.2499 -32.8805 + 12.3323 15.8058 21.8399 24.3008 14.4087 10.9930 7.8357 8.0265 12.8222 14.2335 5.8155 6.0731 -6.0593 -17.6762 -22.1263 -23.2555 -24.2165 -21.7123 -15.9183 -23.5226 + 5.7344 5.3389 3.8374 3.4190 2.8812 1.7219 0.1439 1.8580 -0.5349 2.0653 -5.3722 2.7017 1.0724 -0.8636 -1.4371 0.4192 -0.6553 -2.1126 -0.7370 -19.4805 + 8.7871 8.8914 10.5080 13.7939 18.1053 18.3809 13.6037 9.9123 6.2489 7.8891 6.4768 -2.8713 -8.9109 -11.1699 -11.8847 -5.8137 -11.8112 -19.3777 -21.5409 -29.2171 + 21.2487 22.5877 21.7624 19.0832 14.4498 8.3623 6.4664 3.1545 -0.2860 -1.9696 -3.9389 -1.8288 -3.7243 -9.6176 -13.7865 -15.0846 -11.3343 -12.9399 -16.9243 -25.6805 + 15.5067 16.3749 16.3110 12.8646 5.4498 2.4274 -1.0299 -3.2700 -3.2357 -0.0252 7.5399 -0.6948 -6.2588 -9.1664 -6.8883 0.7600 -11.6902 -9.9820 -1.1495 -23.8436 + 15.5548 17.3265 20.2482 21.9118 17.7825 12.4436 8.5947 8.3626 10.7582 6.8704 -2.6150 -7.1451 -11.7102 -15.2112 -16.7335 -10.8661 -12.1430 -16.7183 -19.7849 -26.9260 + 9.7348 18.6985 22.2000 9.7733 3.5414 -0.9890 -5.4561 -5.4928 -8.4760 -6.8757 -4.1569 6.8951 2.1633 -1.2892 3.0483 -7.4717 -12.0842 -7.7317 1.0735 -17.1050 + 6.6628 6.9628 9.2890 7.3292 2.0881 -0.1054 -1.5163 -4.7058 -4.4988 -5.4883 -6.5025 -2.6194 5.9468 -1.1287 -0.4851 5.3144 -1.6440 -1.6601 4.2795 -17.5182 + 11.7595 13.0074 13.6551 14.3417 13.9024 11.5890 9.9365 4.1950 -1.2916 -2.3847 -1.5414 -3.1381 -5.4213 -4.9864 0.0096 0.2286 -7.5940 -13.3606 -21.1287 -31.7780 + 16.5560 21.1528 18.2294 14.8217 11.7211 5.8948 0.1128 -5.7142 0.4819 3.4296 -7.6731 -15.2596 -14.0910 -4.3450 4.2359 -1.2610 -8.7829 -14.4366 -8.1323 -16.9402 + -9.6162 -5.8920 -0.4336 -0.0688 3.9825 0.7100 -1.9156 -3.0982 -4.8027 -4.2612 -2.6264 1.0431 5.5418 11.1806 9.5552 5.0905 3.5862 4.3463 5.8670 -18.1885 + 9.2493 12.5210 14.8487 20.3042 16.9267 10.5281 5.4085 -1.4152 -5.3054 -5.3250 -4.1371 2.4443 0.8006 -8.0900 -7.9314 -5.9206 -13.5877 -13.0043 -4.8031 -23.5116 + 5.9148 6.0122 7.7679 11.9347 14.3202 11.1880 5.7941 0.6362 -0.9006 -3.7616 -1.0465 6.3361 0.5894 -7.7629 -9.2778 -6.0898 -0.4740 -7.4253 -3.1780 -30.5771 + 9.0470 12.9059 18.1346 24.2631 23.6353 19.2579 20.8877 17.0355 3.1774 -5.2773 -10.0473 -14.9178 -17.5773 -16.4551 -11.9394 -9.6664 -11.9143 -7.0063 -19.2353 -24.3080 + 11.6229 13.7686 16.3077 18.9730 21.2077 21.1770 18.6717 15.5260 14.4577 10.9286 -2.0523 -9.7658 -14.1470 -18.3895 -20.2191 -19.9491 -14.1791 -17.4745 -18.9708 -27.4939 + -1.2854 -2.7859 2.0352 3.8729 2.5634 1.1875 2.9803 3.4105 0.6928 -0.5396 -6.4408 -2.1739 4.1284 -0.7168 -3.4324 -5.3047 2.1060 6.1169 6.1700 -12.5844 + 3.6719 5.1933 3.4330 2.0915 1.7090 4.9193 7.5225 11.4575 7.7921 1.1072 -1.3846 0.6720 -0.8916 -0.5196 -2.8857 -5.7085 -3.7344 -4.4707 -6.4364 -23.5377 + 5.0076 6.0603 5.6858 5.8716 4.9796 4.3510 3.2343 -0.0278 -1.6006 -3.6879 -3.6306 -0.3994 -2.7867 -5.8602 -4.3815 -4.1661 1.9375 0.0251 1.7605 -12.3723 + 1.5611 2.5677 6.9184 12.7642 12.9002 7.6294 1.5737 -0.4407 -4.6258 -3.3019 -0.3274 9.4821 8.3473 7.1185 0.9099 -4.2945 -2.0947 -5.5952 -16.6889 -34.4035 +-10.0770 -9.2074 -7.5499 -5.3349 -2.0639 0.7289 3.3239 5.0911 7.8838 10.9963 10.2149 9.1756 7.3923 3.8453 -0.9308 -1.4293 -1.7749 -2.4954 -0.6350 -17.1538 + 11.6964 15.7897 21.5631 25.0743 21.2867 19.0704 20.7015 14.1826 0.0839 -7.4606 -11.2687 -14.0743 -15.6804 -14.7951 -10.8010 -12.5161 -17.6133 -13.8075 -7.4286 -24.0031 + -6.9283 -6.6188 -5.8684 -5.5056 -3.6164 -2.5751 -3.3395 -0.3521 -3.7955 -8.6077 -6.1256 -4.7755 -5.6371 1.9017 5.4236 6.9088 17.0056 9.6477 17.8081 5.0500 + 1.0400 4.3584 5.7473 5.9965 7.1951 11.1543 16.3999 17.9219 13.7898 8.5105 6.6032 8.3888 3.1208 -8.4853 -12.1692 -10.3091 -9.4060 -16.3383 -22.0676 -31.4510 + 4.0785 3.7601 3.2477 4.5535 2.8617 2.8959 4.0341 3.3572 -6.7255 5.4042 2.4187 1.2230 0.1581 -3.0654 -1.9472 0.8423 -1.1312 1.2092 -3.2861 -23.8888 + 7.3239 6.9150 9.3764 18.0744 16.9415 9.6050 5.2932 1.9763 2.0297 6.2840 11.8379 10.9565 8.5711 -5.0433 -15.8094 -21.0356 -22.5868 -18.9436 -8.4281 -23.3379 + -1.7885 -4.8321 -3.3241 0.9574 -0.7694 -4.0018 -4.5674 -4.5260 -2.6221 4.0186 7.6808 10.9687 1.1618 6.5552 7.2914 5.9801 0.8194 -0.4241 1.0077 -19.5855 + 2.5382 2.7665 6.6332 9.6977 12.0223 5.6888 5.2502 -0.0648 0.1790 1.7261 3.6718 4.6019 -4.2546 -5.2838 -8.6175 -3.5030 -2.8900 -5.1451 -3.1562 -21.8607 + -1.7959 -1.6410 -1.3048 -1.9856 -1.1093 -0.5878 -1.7759 -0.7425 -2.7139 -3.3222 -3.9402 -1.9787 -4.1788 -1.9573 -0.0518 0.6181 5.7386 8.4544 14.2974 -0.0227 + 1.9227 3.4879 4.9261 5.1627 4.2257 4.6417 3.0455 -0.4550 -1.9330 -4.6665 -6.5225 -3.7829 -5.2713 -1.4162 3.7054 5.6573 7.0460 2.7847 -1.9201 -20.6381 + 5.4951 4.1184 5.0794 4.1307 2.3794 0.0327 -0.8237 -1.5895 -3.7505 -6.6385 -6.0766 -2.2466 -0.4080 -4.9327 -5.8400 -1.6035 0.3752 6.5602 12.3259 -6.5875 + 6.8048 2.6542 8.2117 4.3594 9.5824 4.9978 9.2805 5.4616 0.1801 2.8218 4.8979 8.0336 1.3602 -0.8584 3.0641 -6.3167 -11.4947 -13.9096 -9.3665 -29.7643 + 20.4394 23.8508 19.9523 13.4804 4.7063 -0.8810 2.3157 4.3508 4.6054 2.6117 -2.8160 -5.7052 -5.0189 -10.4846 -14.5942 -12.8055 -6.1098 -12.0585 -7.7055 -18.1337 + 9.9351 14.3502 19.5530 16.3727 7.0796 2.9949 -1.1604 -3.2246 -3.9592 -2.8637 3.6007 8.3194 1.5624 4.0080 -6.2282 -13.2960 -15.2078 -10.4525 -5.9946 -25.3891 + 5.5354 4.2644 3.4234 3.5650 3.9406 1.8276 0.2709 0.3493 -0.0020 -0.7304 1.8692 2.1692 -1.3779 -0.9234 -5.0911 0.1335 -1.1518 -0.8308 -1.2357 -16.0052 + 14.7180 8.4248 6.7389 6.9731 8.7963 12.7964 14.6589 10.3137 3.2909 -3.7235 -5.8542 -6.9864 -6.8348 -4.2701 -4.4326 -5.4747 0.7281 -9.3904 -11.2298 -29.2424 + 9.1842 9.7851 10.8472 12.9244 10.6955 6.8423 4.6037 0.7650 -2.0301 -2.7855 1.3686 5.5053 -1.4464 -8.6948 -6.8949 -4.4565 -9.3587 -11.9106 -7.0277 -17.9162 + 9.5187 11.0469 10.8992 10.5477 12.4336 17.9310 22.0092 22.1029 21.2249 17.7472 4.1368 -3.9142 -11.6583 -18.8125 -22.4708 -24.5855 -14.9292 -12.6855 -22.7109 -27.8313 + 12.0341 16.6419 15.8489 10.0396 3.3655 -1.8695 -5.2143 -9.4106 -10.9745 -12.0991 -12.0450 -11.1231 -7.2635 0.0306 12.4231 12.6061 4.1888 -1.9085 0.6831 -15.9537 + -1.3674 -0.5228 -4.0775 -3.8100 -1.0761 13.7500 19.2044 15.7231 9.5615 7.9996 6.5298 3.6199 0.5658 -1.3324 -7.5527 -6.3571 -7.0946 -6.2162 -8.1181 -29.4293 + 7.3145 11.1318 15.8219 21.2414 19.7326 13.4391 10.1286 13.1458 13.5220 4.5818 -4.9865 -10.4663 -12.4137 -8.4915 -7.5278 -14.5074 -14.9519 -10.6855 -18.9716 -27.0572 + -2.6938 -1.0116 0.5434 -0.5197 1.2510 2.7810 -3.1452 2.3461 1.3093 1.0916 0.2998 1.6109 9.4326 9.1761 -2.9635 -1.3175 -1.3459 -2.3687 -0.4622 -14.0137 + -0.6799 -0.1341 0.7366 1.5016 2.3553 1.9877 1.8684 -1.1687 -1.7388 -0.3259 3.2899 3.7096 2.8005 -0.4016 0.0798 0.8146 0.2490 -0.5574 0.0812 -14.4681 + -4.5962 -1.7335 2.2323 4.9758 4.1965 6.1120 6.3004 -0.2420 -0.4268 -3.4101 -1.9343 1.8578 -0.3352 -3.5061 -2.9167 0.7871 0.7063 -1.6356 3.3878 -9.8196 + 13.1227 13.7568 12.0750 11.2378 13.9543 15.7037 14.8582 9.5334 0.1292 -3.0889 -7.7565 -10.9896 -5.4579 -2.1373 0.1387 -11.7169 -13.0933 -7.4977 -12.3640 -30.4077 + 29.3087 22.8979 20.4744 14.9176 7.8398 2.3822 -3.7671 1.0563 -3.5131 2.1709 4.1060 -2.4865 -7.3802 -9.3667 -9.8213 -8.8247 -9.4073 -14.9259 -16.1530 -19.5079 + 8.2477 12.7093 19.4580 20.8257 15.6422 8.6762 4.5782 4.1335 5.6439 14.7051 12.4104 11.4909 -6.3291 -17.1032 -20.7835 -24.4558 -22.5241 -14.5649 -5.2278 -27.5328 + 0.7217 4.0954 5.2473 1.5270 1.7119 3.5822 -1.4614 0.8720 -1.3606 -1.4757 -0.4869 1.0336 -0.7433 2.0743 0.6152 -7.1442 0.5920 6.3583 2.8714 -18.6301 + 20.3582 21.7378 21.8475 15.5031 8.5323 5.5254 -0.6584 -4.0833 -5.5901 -5.8466 -2.2597 3.0499 -4.1864 -7.3615 -5.3521 -8.6549 -8.7165 -10.8646 -9.6599 -23.3202 + 7.9037 5.3843 2.5963 1.7924 -4.1648 1.1119 1.0025 0.4959 -1.4533 -3.0047 0.7379 1.8636 2.4329 0.9500 -0.1706 -0.3177 0.7889 1.1735 -0.4730 -18.6499 + -1.9942 -2.2404 1.0361 1.1275 2.4246 0.9687 -0.7731 -0.4350 2.7773 4.6081 2.2666 5.9874 1.4863 -4.3135 -1.0943 3.1059 -4.9201 3.6382 1.5522 -15.2082 + 15.5189 17.8940 20.2047 21.1613 16.5719 9.8830 6.2072 1.5961 -2.8649 -4.2350 -1.2109 1.6294 -0.3114 -6.2890 -6.6470 -6.6461 -16.7097 -18.4834 -19.5782 -27.6908 + 4.5707 9.9453 16.9194 16.3836 7.5074 1.7185 -1.6704 -4.6470 -7.1710 -7.5216 -6.2372 -1.4728 9.1990 4.5872 4.2446 -3.1203 -10.1462 -8.9093 -2.0237 -22.1562 + 10.2043 6.2265 8.0480 6.0822 2.9673 -0.2686 -0.4905 -3.3479 -4.2925 -4.0224 -2.6407 -3.8742 0.6899 3.7007 5.8631 8.8480 -1.0855 -6.5692 -4.1304 -21.9079 + 12.9155 18.0966 19.8262 14.0767 6.9947 1.6106 -0.8791 -6.2102 -7.3162 -10.2835 -10.9883 -8.3441 -1.6557 0.0080 -5.7847 1.4192 -5.5022 -4.2471 3.9784 -17.7147 + 5.1637 8.0679 12.5738 17.5701 14.9252 4.1592 0.9276 -0.3161 0.0005 3.6819 10.2605 3.1026 -2.7955 -2.8307 -1.1861 -9.2862 -11.7976 -5.3295 -15.7634 -31.1274 + 6.9673 6.7974 6.1367 10.4782 15.9809 13.2295 4.9742 0.4813 -4.1310 -5.6911 -5.9712 -1.2511 7.3306 2.6442 0.3224 -0.8372 -7.4799 -9.3018 -8.5882 -32.0913 + 13.1396 12.9563 12.3478 9.0857 2.3849 -0.8490 -1.4825 -4.2362 -7.2804 -7.4639 -6.8853 -6.4479 -4.2443 -8.2231 -3.9022 0.4289 0.1896 3.7001 6.9697 -10.1879 + 15.3330 18.1603 22.1112 21.6848 13.1886 10.5333 8.8464 9.6626 12.4137 13.9577 10.1420 -0.2864 -11.4409 -16.9791 -19.7494 -15.6645 -19.7643 -22.5000 -23.5283 -26.1208 + 6.8457 -6.8649 5.4271 5.2712 -1.3685 5.0072 1.5557 0.4655 -8.6121 0.8133 -3.3697 -1.5367 2.2231 2.7614 0.6905 -0.9517 3.9757 2.5271 6.8378 -21.6975 + 4.0198 5.3861 1.4690 -2.5892 -0.7717 2.5302 1.6444 0.6228 0.0646 3.2916 3.8112 -0.6089 2.1623 0.1459 0.1339 0.1325 -1.6768 -0.5331 -0.5013 -18.7335 + -7.1586 -2.6175 0.5796 4.1833 -1.3849 0.3608 -8.9238 -4.4835 -1.6026 -5.1856 -8.3891 -1.4730 9.5706 -8.3291 11.6042 11.1480 -0.2734 4.8182 12.1074 -4.5509 + 12.6166 14.8923 16.2633 17.1269 18.2744 19.2870 16.5858 10.4162 6.9131 6.3384 2.9142 -1.3754 -10.9051 -16.4865 -19.5016 -17.7616 -6.9047 -16.5161 -23.1066 -29.0706 + 10.8009 12.8094 14.6516 18.7246 16.6285 12.1161 8.7229 6.4887 7.8806 10.1330 4.1720 -4.3839 -6.8368 -8.8011 -8.4415 -14.6175 -16.9291 -13.3638 -20.2402 -29.5143 + 6.2190 6.4291 6.1608 8.0273 9.8018 9.8514 6.5431 7.0773 5.8326 5.6116 8.2150 7.4679 -0.2957 -6.5386 -7.9000 -7.1888 -10.2895 -12.2362 -14.0338 -28.7541 + 8.0266 9.6417 12.2059 15.4655 15.3945 10.4886 6.7757 2.3300 3.3664 6.5551 2.3159 -4.1967 -9.2962 -11.8145 -9.9788 0.0400 -6.7484 -6.4088 -11.3916 -32.7710 + -6.0361 -3.7035 -0.2831 1.4674 0.7756 0.3247 -0.7445 -0.5024 -2.1341 2.7813 -0.1459 -3.5635 -3.9893 -4.2930 -0.5948 5.6527 2.1314 14.0267 12.5554 -13.7247 +-14.2301 -11.8469 -5.4438 -2.2899 3.4911 0.4713 0.7187 -2.7114 -1.5588 -2.8210 -0.0887 1.5060 2.8286 9.3500 12.2742 8.0817 12.1298 7.7574 3.4239 -21.0423 + 10.2809 9.4545 10.3039 12.6386 19.4980 22.5798 19.2258 15.3342 18.1620 10.8305 -3.6184 -11.2472 -16.1533 -19.0561 -21.3742 -19.1215 -7.0133 -13.0322 -12.3255 -25.3663 + -7.1992 -4.0950 -0.4752 -0.0397 -1.2923 1.2680 2.1020 -2.0159 0.5678 -4.1475 -2.2860 1.2468 2.9160 3.7433 -3.5078 6.2645 5.1466 3.3947 11.0482 -12.6391 + -1.4558 2.6350 2.5261 -0.4261 7.9067 7.3761 10.5050 2.1413 -4.1382 -2.8818 6.9021 5.4317 4.9534 4.5363 -2.8372 -3.4508 -1.0165 -1.6706 -9.0235 -28.0132 + 5.4483 7.0338 8.8713 13.9617 19.3432 16.5740 12.5536 13.7232 15.1487 4.1979 -4.0767 -8.9863 -10.9482 -13.1722 -11.3412 -7.4945 -4.4916 -3.5707 -22.8865 -29.8879 + 12.0309 14.2862 17.8716 18.2606 13.3426 8.9006 1.3455 -9.4180 -11.1012 -15.4444 -17.4768 -17.9985 -12.4515 -5.2431 8.8612 5.5913 6.3114 -1.1018 0.2013 -16.7679 + 16.8689 16.8256 18.5632 14.4683 8.2457 2.7262 1.7491 0.4673 -4.4682 -6.2835 -4.3280 2.1966 -4.4856 -9.6447 -7.5807 2.0175 -9.6747 -9.7002 -3.6650 -24.2978 + 10.3443 9.5624 9.5859 9.3945 7.7097 5.9502 5.4955 7.0578 3.8970 1.8002 2.9026 0.8300 -0.8072 -3.4283 -8.7861 -9.4681 -7.6897 -10.0581 -8.5829 -25.7097 + 8.4589 13.9060 18.3570 21.8577 20.8363 13.5168 7.0018 3.5585 0.2984 -4.3657 -7.6435 -5.4526 -6.4991 -0.0823 -10.9834 -14.4890 -9.9873 -4.5713 -15.9935 -27.7237 + -2.7942 -1.0695 -0.1214 2.5877 1.5098 1.0893 1.5717 3.2131 6.2989 10.9335 9.8682 8.6743 4.8838 1.8707 -1.0579 -3.7852 -5.7917 -7.6708 -7.9578 -22.2525 + 25.1784 20.8581 17.0052 12.9557 7.7424 3.9815 6.0072 3.4663 -1.9041 -8.1079 -11.4077 -11.8642 -8.7727 4.7601 2.8284 -7.3135 -15.0133 -13.8178 -7.5999 -18.9821 + 13.6088 10.9215 11.1892 11.7633 13.2294 6.3264 1.9267 -1.7303 -3.3278 -4.4979 -7.2855 -3.9683 5.3311 -1.6679 -8.5378 -6.9275 2.8396 -8.2151 -5.8206 -25.1573 + 20.0774 19.5893 17.1250 15.9021 10.2327 5.8537 4.1551 8.7468 6.2824 -1.6643 -0.8142 -5.7458 -5.8553 -6.7971 -4.8129 0.1863 -14.4064 -22.1846 -19.7857 -26.0848 + 1.9579 3.5459 5.6047 9.8227 17.1510 16.9383 8.2371 2.3829 -0.9137 -2.6491 -2.1733 3.0262 6.5399 -2.8952 -2.9389 -0.9532 -9.2242 -11.9604 -12.7131 -28.7857 + 2.7147 5.0851 5.9010 8.2492 9.0379 12.5344 15.7585 7.9343 2.8699 -7.6515 -7.5935 -7.0792 -7.0329 -0.2973 -4.1153 0.8146 0.8342 -8.0293 -6.0641 -23.8708 + -1.8671 0.2021 1.1744 3.3514 3.8114 4.6535 6.4708 5.5903 4.6873 6.1200 7.1503 10.8820 10.1467 5.0564 -4.0471 -7.0223 -5.8028 -7.0328 -13.2761 -30.2485 + 14.4582 17.2732 16.2772 7.1332 0.6525 -4.4947 -7.7910 -9.8395 -12.5801 -10.7856 -8.8712 -4.2717 7.2719 0.7198 1.5521 3.5804 -2.9845 0.1717 6.3548 -13.8266 + 28.6852 25.8888 20.5479 11.1546 4.6177 1.8681 3.9247 1.2950 -2.9240 4.3050 4.3461 -5.4196 -7.8904 -10.2821 -8.2802 -13.9910 -11.2895 -12.5380 -13.7725 -20.2458 + 6.9489 8.2782 12.9177 18.1269 10.1196 2.5932 -1.2838 -5.9588 -9.0612 -10.7381 -10.6395 -8.4104 -4.0818 7.0965 0.3344 2.1418 2.2817 -3.7137 1.6102 -18.5618 + 6.2919 7.1483 7.7499 10.3266 12.7585 21.8234 21.7899 13.6697 7.2737 9.3185 13.4418 -0.1530 -6.4198 -9.4554 -7.4143 -12.4542 -21.2295 -24.5545 -24.4585 -25.4529 + 3.2078 1.1604 2.3820 7.1676 15.6309 19.6735 9.8897 7.8474 10.1305 10.4050 -1.8220 -9.0708 -12.7476 -14.2980 -11.7869 -3.2366 -4.1439 -6.6114 -0.0121 -23.7655 + 4.9484 5.9562 10.0092 16.2669 12.9260 3.9525 0.4920 -2.9838 -4.7825 -5.0706 -3.0972 4.4166 5.1484 -3.0885 -2.2935 1.8467 -6.6209 -8.5405 -3.2672 -26.2180 + 9.1190 11.7308 15.3181 20.5759 15.7183 7.6900 3.7341 -3.2723 -6.7161 -9.0437 -8.0703 -0.5930 6.4087 3.5269 3.0413 -8.4178 -14.7425 -12.7049 -6.9905 -26.3121 + 1.4852 -0.6829 -1.5690 -0.2848 5.5052 12.8631 6.4129 0.4626 -3.5500 -5.4162 -3.9006 -1.4888 7.5205 5.6490 1.1393 5.5204 -1.2344 -6.2194 -3.0728 -19.1390 + 11.9158 15.3244 18.2371 17.8689 12.9861 8.5734 2.6935 -0.4620 -0.3115 4.3187 1.8359 -6.5328 -11.3944 -12.3343 -10.2127 -3.2123 -10.7404 -11.6243 -6.0915 -20.8377 + -1.1406 4.4681 1.0243 1.7567 0.8452 1.0568 1.7113 1.4304 8.2151 0.5703 1.2053 -5.7909 -4.3638 0.9165 -4.5872 3.4354 6.9859 3.9875 -3.5121 -18.2142 + 18.8171 22.5033 16.7157 10.3549 3.9514 1.6962 -0.6346 -5.9992 -6.8816 -7.3001 -7.9076 -4.3326 4.9348 4.6458 0.9437 -3.5521 -9.3640 -2.4386 -11.4118 -24.7409 + -0.9409 0.5904 2.2794 4.9547 5.8743 8.7846 11.0088 11.1838 11.6958 14.1355 8.9116 2.5256 -1.8779 -5.6262 -5.5753 -9.1754 -9.0981 -12.4659 -11.4699 -25.7149 + 0.4141 2.8215 2.0838 3.1886 4.2216 1.7188 4.6179 2.9704 1.6545 -2.8460 -0.9511 2.6537 -1.8008 0.9825 1.2384 1.5282 -0.7271 -3.0940 -0.8090 -19.8659 + 6.0430 4.6516 4.3017 7.7179 6.7963 6.2910 8.7476 8.7592 7.7014 12.1586 8.0227 -1.3414 -6.0075 -8.1097 -6.8511 -6.6141 -5.8068 -8.7086 -9.3302 -28.4218 + 7.1395 6.4611 6.4770 6.5752 5.7360 5.6174 3.8338 -0.3402 -1.9803 -2.2319 -4.1316 -3.2411 -2.2252 4.1950 1.9636 -1.7425 0.5431 -3.5115 -6.8529 -22.2844 + 17.8843 21.4402 20.6904 15.9517 9.7051 2.5656 -1.5516 -7.4554 -8.8729 -10.2263 -8.6781 -5.1896 -0.7045 -6.7680 -8.2898 -6.9326 1.3954 -3.2208 -6.0504 -15.6928 + 10.6767 10.3544 18.1231 11.2879 6.1413 -0.3610 -2.4504 -5.1076 -4.9943 -4.9704 -2.3126 5.9757 0.9523 -4.2427 -2.5152 4.9197 -8.3019 -9.0057 0.3384 -24.5078 + 9.9161 11.8977 18.2327 24.4645 22.2618 14.5543 11.0874 11.6473 16.7269 16.7802 10.9221 4.3259 -12.8739 -20.0422 -22.5408 -24.1296 -20.9142 -22.6765 -24.3668 -25.2731 + 9.4023 7.3715 11.9062 12.5120 7.0268 13.6459 7.2747 2.8388 14.6515 22.1573 24.2647 6.5863 -1.1334 -12.1075 -18.8356 -21.0343 -18.7149 -21.3705 -23.1378 -23.3040 + 6.1154 6.8878 8.0486 2.0830 11.4555 24.4875 10.2548 8.5452 8.1934 -4.1865 11.8854 1.3485 1.9895 -14.5678 -11.0286 -3.4615 1.3428 -19.7548 -24.2069 -25.4313 + 10.3570 12.8522 17.3265 22.8368 16.6859 10.9743 8.2198 6.8557 9.3432 12.2609 5.1561 1.5410 1.3448 -11.6896 -19.8579 -22.4891 -19.3409 -16.0157 -19.9891 -26.3720 + -2.2958 -3.0198 2.5524 6.5326 5.0549 2.8939 1.6085 1.4431 -0.1701 -2.0055 1.1867 -1.3016 -2.2987 6.1240 3.0188 -0.9646 2.6135 4.0735 0.2584 -25.3041 + 3.3425 -4.9398 1.7857 0.9810 8.2974 13.8760 7.3422 4.3951 4.0317 8.9378 9.1371 -1.7588 -9.1168 -12.4667 -12.0238 -9.0772 4.3501 -0.6556 4.4305 -20.8684 + 2.6724 2.4627 -2.5441 -3.3045 -4.2917 -1.4508 1.5865 -1.0572 -2.1109 1.4870 -1.0006 3.5002 3.7107 1.3794 -1.6261 0.0378 2.0162 0.3261 3.2452 -5.0385 + 3.1268 4.8784 8.6218 13.5865 14.1019 7.2490 1.4764 0.4142 -1.4440 -0.1256 6.7242 13.6333 7.9001 5.1808 -8.7618 -15.9427 -17.5740 -13.2732 -3.9031 -25.8689 + 8.7515 17.2518 23.5164 15.7690 8.1574 4.9814 0.5026 -0.4621 -1.5217 2.4458 11.1982 12.8925 8.2107 -10.1894 -18.8969 -20.9839 -19.6436 -9.2705 -7.3159 -25.3934 + 11.7980 12.1448 14.6065 20.2682 20.5368 14.0544 8.9695 7.1447 9.3182 10.2279 -1.3945 -9.8630 -14.2310 -14.2600 -11.2940 -5.3186 -14.6453 -16.0278 -14.7441 -27.2906 + 8.3692 9.6882 12.8542 17.3005 21.1340 18.5917 11.2777 5.5517 0.5470 -2.3437 -2.3633 -0.2054 0.7833 -4.4844 -5.7547 -6.4185 -15.2118 -20.9890 -20.6002 -27.7265 + 3.2540 3.5495 5.6572 11.4443 18.6822 14.2818 7.9623 5.8581 7.6636 11.2380 10.4719 -0.3434 -0.9127 0.3323 -9.6682 -12.3368 -7.0303 -17.5040 -22.5944 -30.0053 + 10.5668 4.7765 4.8789 5.9385 13.1029 20.5979 14.5257 8.6496 2.4271 -1.1640 1.2029 9.4957 -0.0200 -12.5730 -14.8513 -9.4220 -4.4288 -12.9535 -14.3720 -26.3782 + 3.6092 2.1429 -0.2581 2.1516 6.0252 4.4742 4.3520 2.9527 3.6102 2.6901 -0.0942 2.2564 1.3309 -0.5758 -1.1090 0.1191 -0.1180 -0.1015 -5.5503 -27.9075 + 8.4206 12.6530 18.9633 23.9855 21.2540 9.7237 1.5121 -0.7361 0.7545 -1.5581 2.4158 9.9186 6.7278 3.6705 -12.4971 -19.8574 -23.2581 -23.7200 -10.9203 -27.4525 + 22.1951 16.4633 13.2055 7.4970 2.2280 -2.4528 8.7730 10.6870 4.9929 1.1178 -5.3802 -8.2471 -5.7256 -8.8078 -8.3540 1.5835 1.5054 -11.6521 -13.9564 -25.6726 + -7.9053 -6.5840 -6.0103 -4.8986 -4.2425 -4.7462 -6.7261 -8.5401 -8.6906 -8.8402 -5.6306 -0.7673 8.6501 5.0800 13.9798 11.4953 10.0314 17.4290 14.9683 -8.0522 + 11.9359 8.4098 2.8637 0.1621 4.2653 2.6990 1.2433 -1.9101 -2.5608 -4.4372 -0.7370 5.0345 2.4512 -1.2451 -4.6924 -2.0267 0.3932 -0.7445 -1.8229 -19.2813 + -1.3202 3.8184 7.4609 11.6391 16.2849 25.4929 15.8707 1.4126 12.3759 21.2527 8.1587 -3.8943 -14.7860 -10.6930 -17.9239 -16.3824 -1.7644 -13.0054 -19.3451 -24.6522 + 9.8443 9.9627 12.5201 13.7261 10.3992 6.6290 2.9281 -0.7644 -3.9695 -5.3737 -8.3704 -7.5382 -1.7207 5.7599 1.9410 -0.8146 0.5436 -5.6632 -12.2155 -27.8236 + 6.4290 4.7082 3.9317 3.1702 -1.6353 -3.6078 -6.3150 -9.1986 -10.3233 -9.8065 -5.8063 -1.3404 -0.7673 -2.2448 -1.2797 7.1795 3.2561 15.5273 14.8629 -6.7401 + 23.9506 22.1558 17.7456 14.4350 8.3329 3.1023 4.3134 8.6024 3.8015 -3.9642 -10.7800 -9.6229 -10.8860 -10.6376 -8.0083 4.7524 -6.4851 -13.7226 -12.4871 -24.5980 + 9.5760 11.4366 12.9012 14.4846 16.8425 19.5473 19.7042 15.2736 12.0272 11.0446 7.4677 1.1314 -9.0848 -18.3215 -23.8214 -23.1710 -19.9932 -10.2715 -17.3599 -29.4137 + -3.4431 -3.1613 -1.9102 -0.6935 1.3870 1.2966 -1.0892 -2.4642 -3.0407 -4.4927 -5.4209 -4.2773 -0.5358 0.4090 1.2794 5.8990 14.3402 3.7638 11.1512 -8.9972 + 15.2464 18.8014 25.3166 19.5775 11.0313 6.5896 5.6381 2.9552 5.1185 13.2540 13.6736 8.5584 -8.3365 -15.9401 -20.3756 -21.2859 -21.2275 -19.3217 -15.1325 -24.1407 + 3.1035 6.1792 5.0462 3.5926 7.0741 6.4046 9.9419 7.7684 4.2113 3.6277 6.5092 5.5900 -1.7178 -6.4492 -7.8871 -6.9582 -5.1379 -8.3058 -10.5436 -22.0490 + -0.7280 0.5704 3.9717 5.9469 6.0780 4.0770 1.2426 -1.3458 -3.2314 -4.6819 -6.2378 -5.0198 -1.2080 10.5808 2.6382 3.7712 3.8446 -1.7555 -1.1558 -17.3572 + 5.3326 5.4267 9.8240 16.2001 13.6887 6.9510 1.1917 -1.6723 -2.5788 -2.7648 2.6931 5.4843 -4.2095 -9.6143 -6.2919 3.6211 -3.8754 -6.5263 -5.2823 -27.5977 + 2.5771 3.4727 5.4467 8.8349 9.8870 12.1341 12.0826 7.7444 4.5255 0.7889 -2.0382 -4.7604 -5.7542 -4.6241 -2.4718 -4.0958 -6.2797 -4.6267 -9.5398 -23.3031 + 14.7846 16.0256 18.4400 18.7731 12.4129 9.2087 4.9463 5.2837 7.9434 9.1983 5.6775 1.0431 -7.1678 -12.3799 -13.9635 -9.4290 -13.5075 -18.2553 -21.2672 -27.7670 + 14.0860 12.6160 17.7362 22.8480 13.2766 7.4189 5.7487 1.8704 2.3287 6.7312 16.7040 13.9396 0.1199 -14.2720 -18.2397 -22.3862 -24.8172 -19.6941 -10.4326 -25.5823 + 1.2702 -1.2740 -3.7100 -0.5628 -4.5219 -4.4580 -7.7100 -8.3547 -7.0524 -3.3805 -3.0927 1.9780 6.7217 16.8392 12.2288 6.1018 4.3647 3.7046 7.0648 -16.1569 + -1.5691 -0.6625 0.8145 2.7114 4.5683 6.3808 5.3169 3.3697 3.7409 -1.1329 1.3502 1.4333 7.1092 8.0819 7.4140 -0.3489 -3.5222 -5.2023 -8.9373 -30.9159 + 8.8791 11.5486 17.4354 21.9590 18.7721 13.0614 12.3597 15.8383 7.9901 -4.7504 -11.1404 -17.0402 -20.1418 -20.5768 -16.8543 -10.2710 3.5082 1.5897 -6.0317 -26.1349 + 1.4924 2.3041 3.6995 3.9735 2.9478 1.4182 -0.1153 -0.7081 -1.6935 -4.7155 -3.8966 -1.0552 4.3924 3.5582 4.7903 3.4573 4.4498 3.7588 -4.9783 -23.0800 + 19.7104 23.5312 26.4663 21.1276 13.4352 11.0142 11.5216 12.6431 11.6620 1.8352 -2.6313 -2.1531 -10.9044 -16.4683 -19.1821 -21.4207 -21.6631 -20.6795 -14.5440 -23.3003 + -7.3825 -5.1236 -2.0803 -0.3985 -2.1515 -3.3191 -2.5398 -3.6553 -4.6673 0.2450 -1.1380 0.4163 -5.0235 -3.1123 1.6781 0.5456 9.2542 19.9831 16.2303 -7.7611 + 2.5108 2.1845 2.6268 3.2213 4.7277 4.9151 4.4068 2.5115 -1.2667 -1.0470 -0.5840 3.1980 11.3786 3.1343 -1.5396 -0.7790 -4.2909 -5.9553 -4.0558 -25.2973 + 1.3099 3.8149 5.9305 6.0290 6.2561 6.5634 6.5483 2.2558 2.8164 5.8479 6.7553 3.8567 2.7371 -0.0626 -3.8527 -5.1436 -5.5124 -7.3236 -9.2045 -29.6219 + 6.9414 7.8896 11.9174 19.4391 22.8159 17.5130 12.8967 11.7403 13.3801 0.6255 -8.6365 -13.1338 -15.0777 -14.1269 -8.2615 -12.9862 -16.1846 -10.2908 -1.8314 -24.6297 + 13.6675 18.7539 23.7644 23.5665 14.5584 8.2788 5.9566 3.8037 5.8231 9.3954 3.8096 -3.7071 -3.0809 -2.7965 -15.3910 -22.2338 -22.7083 -19.7578 -17.2327 -24.4698 + 6.8878 4.6215 4.0830 1.7534 6.3161 9.3030 9.1793 1.8539 -3.8953 -6.2684 -7.2830 -6.1167 0.8013 5.3564 -0.9241 -2.6976 1.7576 -1.1627 -4.9125 -18.6528 + 11.5366 9.1379 9.1023 13.3107 15.2931 8.4262 2.0019 -1.8545 -5.3470 -10.4980 -13.1650 -8.7617 -2.8037 6.5213 -2.9746 -1.1653 2.8950 -3.9002 -0.4074 -27.3478 + 8.1149 5.2054 4.7193 10.9119 14.2393 9.7159 2.7743 0.0628 -0.9042 2.5046 6.2675 4.5297 -1.7121 -2.7212 -6.4591 -8.2032 -12.1525 -9.7960 -4.5542 -22.5432 + 10.4270 10.1489 7.8411 6.9092 5.2675 3.1553 3.1860 0.3063 0.4719 -0.8710 -0.6868 -1.1505 -4.6137 -2.9984 -2.9661 -2.8540 -3.0302 -2.2057 -5.9823 -20.3547 + 16.5991 18.8180 20.4139 16.0812 15.2582 13.6000 9.7730 4.8200 7.2670 0.5444 -5.1929 -8.9752 -12.2178 -15.2451 -9.0857 -9.6324 -11.9042 -7.0554 -15.8485 -28.0175 + 6.9984 7.5807 9.7172 14.2935 21.1422 18.8026 13.0729 13.6068 15.6061 5.7873 -4.4176 -10.6630 -14.9625 -15.2760 -12.1485 -4.9859 -13.8661 -15.0801 -8.9505 -26.2577 + 4.8529 5.9107 5.9519 3.1046 -0.7986 -3.8000 -3.3218 -6.5949 -9.5964 -7.6925 -7.0336 -3.5031 2.4411 -0.1901 9.1699 13.0532 0.4243 10.9470 3.0406 -16.3654 + 2.3975 0.4924 3.8005 6.1460 0.9043 2.1381 -0.0106 2.9239 -11.7677 -3.8359 -3.4925 0.8716 3.4740 -2.8287 -3.8786 1.2858 6.8931 -2.1701 3.3894 -6.7326 + -3.5428 -1.3900 0.9285 2.4806 2.9675 0.7980 0.9612 0.2854 -2.0562 -1.3222 -1.9025 -0.0059 8.6474 4.6327 1.6964 0.3984 0.9512 1.7069 1.4812 -17.7159 + 17.4798 18.9995 21.9699 20.6967 14.4015 9.2408 9.2963 4.6834 -0.5765 -2.0466 -4.6870 -8.1340 -10.8400 -6.9387 -4.9129 -2.3346 -9.5282 -16.6374 -22.8620 -27.2700 + 30.2051 29.0816 22.7010 15.9702 13.2347 12.3034 7.9736 1.7110 -2.9050 -5.8220 -9.0457 -11.4933 -10.9824 -10.7128 -9.7198 -11.4470 -12.1083 -14.3720 -14.3489 -20.2236 + 4.3667 5.6948 7.6382 9.1345 7.9965 5.9946 4.8983 4.5838 1.3099 -1.1182 -2.4032 -2.5986 -0.3123 -3.8248 -3.3874 -4.6492 -2.5381 -4.1010 -4.4278 -22.2567 + 13.3799 15.9919 18.2801 18.5738 14.5051 15.0610 12.6361 1.8684 -4.4789 -7.5763 -7.3687 -5.7285 -8.7693 -10.0970 -1.0795 0.7696 -6.5956 -14.5402 -16.2583 -28.5735 + 1.2989 -0.2985 -0.1264 2.2528 6.1919 9.0850 11.5888 9.6084 6.4565 4.6999 3.8291 -3.1433 -2.0178 -5.4377 -3.5892 -2.4088 -3.4525 -6.5279 -6.8848 -21.1245 + 6.6990 6.9952 6.9900 10.6461 18.1760 23.4925 20.7738 19.3068 14.5258 4.1679 -5.0313 -10.5967 -15.7569 -18.7535 -19.3572 -18.4953 -9.1098 -8.3084 -3.5080 -22.8561 + 0.3614 -3.0919 -2.2049 0.2924 3.5194 12.3203 10.5339 6.5081 2.9888 3.7587 9.6208 6.5139 -3.3458 -8.5883 -8.7468 -4.7300 1.1707 -5.5824 -3.0982 -18.2001 + 3.6833 5.1669 7.0034 5.1138 6.2451 5.1324 2.9024 -0.2756 0.6913 0.7688 2.7471 -3.0081 -4.2841 -1.6790 0.6913 -2.2915 -1.1739 -2.5591 -2.7007 -22.1738 + 11.4726 11.0663 10.8078 10.4446 10.6033 12.3965 13.0646 7.6243 1.8855 -2.1733 -3.8981 -0.7658 2.9887 -2.4982 -10.2150 -14.2533 -12.1696 -5.4330 -8.3400 -32.6080 + -6.7179 -4.6131 -3.1636 0.0876 0.6888 1.0614 0.5541 -3.5030 -3.5922 -2.2597 -0.8136 6.0096 11.8925 2.9252 -1.1450 -0.4619 -0.0294 2.9522 6.4894 -6.3616 + 5.3482 3.7310 5.0957 3.1029 1.6780 3.1184 0.5161 -3.5018 -4.5034 -6.3519 -7.8639 -5.6580 -5.1767 -2.3928 0.1325 3.3098 7.8210 11.9881 4.4190 -14.8118 + 8.2697 5.8835 6.0215 10.4427 12.0342 7.5709 3.5443 -1.0166 -4.1313 -6.5619 -5.0660 -0.8575 7.1102 -0.6052 -4.0956 0.6756 0.8926 -4.2551 -6.4788 -29.3772 + 2.0192 3.9566 4.9448 8.0890 14.6263 15.3545 12.2775 10.3302 7.2993 12.5826 7.7803 -2.3944 -7.4949 -10.2984 -9.7837 -7.3581 -7.2692 -6.1954 -16.7366 -31.7295 + 12.8428 15.9200 16.2497 11.8540 3.8000 -1.0057 -2.5059 -6.5320 -8.3900 -9.9165 -9.6596 -6.0113 1.0447 13.8469 7.3566 -4.1906 -11.0801 -8.0052 3.2361 -18.8537 + 17.2020 18.6360 23.3502 20.5862 15.5823 12.7495 6.4445 -6.6661 -9.1710 -15.5663 -21.8272 -18.4838 -16.7082 -14.2582 2.8891 3.6115 -0.4823 -0.0577 2.5754 -20.4057 + 11.2405 16.2045 19.5245 19.0279 10.8160 4.2621 0.0074 -4.8018 -7.7494 -9.5065 -10.8518 -10.4718 -6.2617 1.5892 9.5055 4.0459 -4.2300 -9.8946 -9.4119 -23.0441 + 21.5981 16.6548 9.2131 4.2901 -2.7752 -6.0814 -5.7172 -6.8518 -5.3057 -3.6255 1.9348 7.8994 -1.3260 -8.0365 -10.6481 -6.5275 -3.0468 3.5257 5.6627 -10.8371 + 2.3529 1.9098 1.1705 -1.0129 0.2322 -2.1724 -2.7849 -0.3004 1.1108 2.9625 0.3261 -2.0946 1.0272 3.4696 1.9753 1.1513 2.4885 2.1442 0.7739 -14.7298 + -1.7003 -2.4848 -2.4346 4.7038 24.9669 27.0962 7.9463 4.7152 0.1920 -0.8991 -0.8489 9.9068 -2.4800 -9.4907 -11.9321 -1.8570 -6.2441 -11.0862 -11.2891 -16.7804 + 14.9206 17.9220 23.4494 28.4771 23.9338 22.5858 21.7793 9.3991 -3.6346 -10.2702 -14.3748 -16.3264 -19.3026 -18.4585 -17.3134 -12.2710 -10.5930 -10.9994 -7.9141 -21.0092 + 10.8472 9.9985 8.1012 5.6373 0.7372 0.0745 -0.8638 -1.7933 -2.9142 -3.0150 -2.2427 -0.7782 -2.5201 -6.2197 -5.1933 0.2777 -5.0155 0.2927 4.1108 -9.5213 + 11.2774 17.5024 20.7927 14.9512 8.8893 5.3831 1.1126 -0.5407 -1.8226 -0.7548 3.8991 14.1917 11.4189 -2.2812 -13.1711 -17.2396 -15.8893 -13.7806 -15.9376 -28.0009 + -1.8142 -1.3801 -0.2831 1.3820 1.7722 1.4623 -1.2023 -3.2113 -5.2345 -6.7523 -4.9565 -2.8637 4.0779 -2.6764 0.8821 14.4958 8.5614 4.5439 7.9060 -14.7091 + 10.5077 13.8832 19.5676 20.8530 17.7078 12.7109 11.5269 8.0218 2.2318 -5.7244 -10.1683 -12.8120 -14.9230 -10.7023 -2.0109 -8.3963 -10.2008 -5.4032 -10.7793 -25.8902 + -0.2509 1.3469 0.6421 2.6377 6.0659 4.3721 5.3520 3.9824 -1.7069 -2.0895 -5.2191 -1.5370 -3.3737 1.3384 4.0383 10.2321 1.6548 -3.2413 -5.1470 -19.0973 + 6.4953 9.3365 14.1057 20.6271 16.1168 7.3580 1.4929 -2.7587 -4.0681 -3.9748 1.3672 8.9105 -0.9200 -5.3133 0.3345 -6.1299 -12.7503 -9.3229 -13.4612 -27.4454 + 0.6201 2.4328 4.9760 9.2545 15.4025 12.2971 5.7680 5.0077 4.0499 4.2155 9.7060 7.7493 5.8274 0.3852 -5.9984 -11.5236 -7.3050 -10.3504 -20.7971 -31.7176 + -3.7294 -1.4413 -3.7524 -4.5904 -3.2743 0.7360 -3.2763 -4.8007 -0.6213 4.9030 10.4614 11.0474 17.3494 -0.7763 5.4732 0.7769 1.2498 -0.7639 -2.1070 -22.8638 + 6.7163 9.2255 12.3187 17.6924 17.6404 11.8940 7.0991 4.2645 4.3021 9.9874 5.8382 -3.4579 -6.9519 -4.8090 -2.1538 -14.0697 -18.7474 -17.3320 -11.2745 -28.1824 + 14.7156 19.4663 14.7897 6.5422 1.1728 -2.3524 -4.9286 -7.8168 -8.8525 -9.4747 -10.7274 -8.5129 -4.4565 7.8312 0.0283 4.0451 1.6338 -1.3894 4.4306 -16.1441 + 19.0680 22.0875 24.6110 22.0341 17.3706 15.8785 14.1658 11.9508 4.4308 -1.1373 -6.4223 -10.3244 -11.8572 -13.5064 -14.4779 -15.1004 -15.5216 -16.8251 -22.0101 -24.4145 + 9.0336 19.0176 24.4867 24.6758 18.9461 11.7838 7.6427 4.7750 1.2864 0.4513 1.8155 -1.2592 -9.2086 -14.2929 -15.7555 -13.6408 -7.7748 -14.5157 -21.5902 -25.8770 + 1.4827 0.2805 -0.3810 1.4732 8.2340 8.1707 10.0600 8.3087 4.1212 2.7249 3.5821 7.9718 3.7426 -2.6511 -5.3909 -4.4519 -4.5293 -6.7232 -8.9602 -27.0648 + 10.5705 10.6700 11.7791 12.1925 10.0236 6.6964 5.1163 2.6148 4.7648 2.5521 -3.9125 -7.4628 -9.6721 -9.3307 -9.9466 -8.0895 1.1968 -3.8200 -3.4846 -22.4580 + 7.5905 8.3863 11.5587 16.2565 22.0088 23.0422 17.8049 13.1018 17.1694 13.5769 -0.2381 -1.8062 1.5806 -10.3901 -20.8106 -24.7914 -25.0524 -24.3552 -19.3769 -25.2554 + 7.3275 11.6160 16.6781 15.5131 8.1538 4.8147 -1.7134 -2.9599 -6.5688 -7.0695 -0.9248 5.3367 -4.5080 -7.1758 -3.4270 -3.5021 -8.7907 -5.2842 1.7479 -19.2635 + 8.6994 13.7488 20.2706 15.6056 8.0300 2.7906 -2.4915 -6.3762 -9.0577 -10.4892 -11.7811 -10.7422 -7.7494 -0.3422 10.0858 3.8928 3.9680 -2.0796 -2.0561 -23.9265 + -1.8066 -1.3696 1.0493 1.3711 1.9691 1.1999 -1.8646 -1.9643 -1.7749 -1.3390 -3.3717 3.1526 1.2109 0.7990 0.4966 2.5531 3.3704 2.3429 4.9229 -10.9469 + 4.0689 7.4175 12.6940 18.0600 16.5869 9.3259 4.5282 2.8636 1.6428 4.7328 12.4121 9.1212 6.2302 0.0152 -12.5596 -17.7355 -18.6999 -12.7970 -17.6503 -30.2571 + 0.8292 2.6495 1.8804 4.1439 5.6667 5.7021 4.9475 6.8868 6.7950 8.0289 10.5666 8.6874 1.8534 -2.2297 -6.3646 -6.7900 -8.1505 -9.3082 -10.0423 -25.7522 + 7.1022 3.8236 1.8946 4.4230 4.7840 4.6315 5.8219 2.7914 1.6501 0.4344 2.2205 4.0071 0.0326 -2.6285 -2.5436 -3.5874 -3.6688 -4.2155 -7.0087 -19.9643 + 0.1242 12.2019 4.3084 4.2478 1.9093 0.6288 1.1102 1.5269 2.2918 5.1362 2.1955 -5.7687 1.1936 -1.4469 0.2971 -4.6605 0.8522 1.2017 -3.9848 -23.3647 + -5.1159 -1.2775 2.5260 4.1265 3.4097 -1.7194 -0.8844 -1.4795 -5.4958 -6.8537 -1.5398 0.9661 -2.3240 -4.8943 8.2925 3.4432 -1.7853 6.3100 13.4410 -9.1454 + 3.9898 4.3777 4.2357 3.0453 3.7447 2.5019 1.1011 -0.4780 -2.4003 -0.6497 0.8291 0.2117 0.0985 -0.2133 0.3830 -1.7850 -1.0322 -2.1328 -1.6069 -14.2203 + 11.3622 14.7416 16.8859 15.0883 9.9488 8.7692 4.3995 -2.0242 -2.6878 -1.0092 0.7764 -2.2298 -4.0840 -8.1165 -6.2525 -5.2064 -7.0092 -6.7164 -9.2528 -27.3833 + 3.6579 2.8996 4.0461 8.3701 17.0082 23.3625 16.2578 7.1955 17.3887 6.3999 -4.2883 -9.9015 -12.7556 -12.3388 -5.4680 -10.3674 -10.9476 -10.1432 -6.0175 -24.3585 + 7.5312 5.8939 4.3265 4.0014 2.9087 1.6542 2.9601 3.9087 1.3700 -2.9778 -0.8059 -0.8752 -0.9920 -0.8125 -0.8336 -0.0306 -2.6451 -2.7999 -4.2986 -17.4834 + 15.3876 20.0855 22.6771 20.6277 15.1509 8.8202 3.6289 -2.1904 -8.5688 -13.1818 -15.2549 -15.0083 -12.7233 -8.7307 0.5974 4.3829 -2.2770 -0.0304 -7.8902 -25.5026 + 23.6589 23.2539 20.3520 15.1761 11.4144 5.8059 5.4712 1.3160 0.0827 -2.4308 -7.0613 -6.1765 -1.8534 5.6004 -1.4387 -15.4564 -17.3870 -18.8680 -17.3832 -24.0763 + 11.6709 14.1123 21.1753 25.8068 20.7082 14.0630 14.1588 17.9220 14.6153 4.8179 3.3194 0.4690 -11.4997 -19.1991 -21.5666 -21.4213 -21.1902 -22.3547 -22.1566 -23.4508 + 4.6799 3.0606 1.6539 6.2007 -2.0201 3.0954 0.5569 3.2707 1.3312 0.0725 1.8286 -5.9667 2.6570 -0.0978 -1.2174 -2.2597 0.2234 1.4765 -4.2077 -14.3379 + 9.3104 11.8578 14.9832 13.1906 8.5578 4.2616 -0.4942 -3.0677 -3.2171 -5.1322 -1.7298 6.6384 -0.8475 -8.0712 -9.5863 -5.8386 2.6610 -8.3104 -6.0285 -19.1373 + 2.2896 3.8587 4.9224 8.6357 13.9236 17.8222 15.7427 11.5211 7.5272 9.1679 9.7247 5.7451 0.5275 0.3504 -6.2281 -12.9212 -14.0843 -20.5964 -26.6432 -31.2855 + 18.9039 18.0327 13.6297 9.7561 7.4319 5.3744 2.9646 1.7415 0.6716 0.6859 2.7446 0.5342 -4.3187 -6.1877 -6.9311 -9.8734 -11.9041 -9.1281 -8.9591 -25.1690 + 6.4513 6.7843 9.4438 12.9549 16.4801 14.9093 8.2954 1.6877 -2.5193 -4.4922 -6.7348 -6.9853 -4.6783 0.7181 1.0483 -5.1128 -1.1161 -7.5305 -12.3980 -27.2058 diff --git a/libcodec2-android/src/codec2/octave/train_120_2.txt b/libcodec2-android/src/codec2/octave/train_120_2.txt new file mode 100644 index 0000000..12eb9b1 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/train_120_2.txt @@ -0,0 +1,512 @@ + -1.2668 -1.2477 -0.0681 3.8419 -0.0693 -1.7919 -1.5943 0.8402 0.1550 -3.1526 -3.0204 0.7337 -0.2603 1.6590 0.0230 5.5893 -2.4959 1.9604 -0.6348 0.7999 + 2.6673 1.4923 1.1408 -0.7478 -1.0755 -1.3421 -0.4884 0.2535 0.2951 1.5088 1.9447 -2.6620 2.3751 1.5298 4.1357 -6.5630 -2.1766 -2.7535 -0.7706 1.2362 + -0.6415 -0.4348 -1.2178 -0.9870 -1.1057 -2.1421 -2.3594 -0.4977 -4.1484 -4.7120 5.5425 3.0695 3.6610 2.9729 2.4379 -1.6136 -1.3052 2.1342 1.9164 -0.5692 + 1.5930 -1.1175 -1.2476 1.6203 2.5315 2.3427 -0.5223 -3.1063 -2.1739 -1.4774 -2.6108 -3.5842 -0.3828 -0.1511 0.8929 2.5717 -1.7657 1.8954 6.0193 -1.3272 + -0.2102 -0.3681 -1.2724 -1.1520 -0.3715 -0.5633 -2.5238 -1.7680 4.7356 5.6452 0.8620 0.8750 -0.8932 -1.5918 -1.4047 -0.0720 -0.6080 -0.7876 1.3972 0.0717 + 5.1178 -1.5391 -4.2881 -1.9745 1.3515 2.4014 0.9329 3.4647 -2.4062 -0.4224 2.8708 -1.6053 -3.1492 -2.6783 -2.6937 -4.4645 1.8599 -0.5456 3.8910 3.8770 + -1.7119 -1.0101 -0.5002 -1.7849 -0.4884 0.2279 -0.8335 -1.0083 -1.2819 0.1129 -1.3674 -1.3338 0.9290 3.0765 2.6339 3.5627 -2.2713 0.6565 -1.2099 3.6022 + -1.5938 -1.3264 0.9856 2.8765 2.3700 1.2528 1.2586 -1.2453 -1.3974 -1.4988 -1.6309 -1.2183 -0.1625 -0.8690 0.0030 -2.0081 1.3580 2.9585 3.3396 -3.4520 + -1.3680 -0.6304 -2.5755 -1.2397 4.9487 2.7251 1.4675 -0.1832 -0.3932 1.4723 1.7410 0.6216 -1.0849 -0.7112 -0.3751 -1.7539 0.1222 1.9858 -0.5248 -4.2444 + -1.2786 -0.2384 0.6718 2.9763 -1.6959 6.4607 -3.9459 -2.0560 -2.7306 -0.2583 0.0389 -3.6271 -4.0721 0.8260 0.8112 2.8769 2.2400 0.5444 0.3571 2.0995 + 2.5196 2.3359 1.6620 0.6250 -1.0528 -0.9133 1.8668 1.2853 1.4368 1.4676 1.1301 1.3664 1.1076 -3.2853 -0.4530 0.4467 -4.7302 -3.8149 -3.9866 0.9865 + 0.1738 1.2940 1.3514 -0.3684 -0.7078 -0.2329 1.3467 -1.0678 -0.0262 0.2448 -0.8418 -0.3910 2.7415 2.9948 -4.5965 -0.1192 0.2496 0.4684 0.0669 -2.5805 + 0.2482 -1.3236 -1.4810 0.9433 3.4287 2.2233 8.9344 -1.1138 0.4585 -3.7470 3.0416 -2.7394 2.2880 1.6598 -3.6439 0.0633 -2.7363 -1.2617 -3.1924 -2.0500 + 1.4672 -1.3248 -0.5511 1.4512 -0.4710 -1.2381 2.9453 -2.3244 2.3249 -2.1969 0.9414 -1.9926 0.5254 0.0792 -3.2076 -2.4140 3.5291 3.5738 -0.0613 -1.0556 + 1.5560 0.0091 0.0770 2.8542 -1.4594 -2.0102 0.5440 2.8119 -0.2925 -0.7111 0.9589 -1.6923 -1.8606 1.1040 -1.6733 -0.0895 3.6894 2.7628 -6.9922 0.4138 + -1.5539 0.6820 1.4458 0.4297 -0.4115 -1.3266 0.5024 -0.6975 -0.3820 1.2840 0.9597 -1.0561 2.2198 0.1292 1.4343 3.0313 -3.9845 0.6776 0.3380 -3.7217 + -2.0283 -1.5216 1.0103 4.8788 3.7028 4.4000 -0.3076 2.4853 2.2296 -1.5213 0.4360 -5.9903 -2.6578 -2.3985 -2.0127 1.3737 -3.7950 2.3105 -0.2099 -0.3839 + -1.7339 -0.9861 -0.2078 -1.2579 2.5808 -0.9255 3.2388 1.0999 3.6754 4.6424 1.9111 1.4716 2.7531 -0.2725 -0.3573 -0.5392 -4.2109 -6.4662 -2.3713 -2.0442 + 0.7177 1.4094 0.7205 6.8683 1.7836 7.1562 -2.9368 3.4036 -0.6064 2.3377 2.8714 -7.0408 -9.7129 4.1278 -3.4444 -5.9919 5.5073 -0.8996 -7.5142 1.2434 + 0.8042 1.5886 0.8754 -0.4378 0.2336 0.0424 -0.1245 0.0847 0.6402 2.6508 1.6375 -3.2393 -2.2823 -2.1435 -1.5628 0.4271 2.2571 2.5048 -1.5933 -2.3629 + 0.6292 1.1956 0.8357 -0.8634 -0.1796 1.8589 0.6940 2.8309 2.5569 -0.4253 0.2913 0.7772 1.4180 3.4210 -1.9468 4.2236 -7.3361 -3.7802 -3.5980 -2.6029 + 1.9034 -0.7126 -2.3343 0.2344 3.6545 3.9405 3.0203 0.1937 -1.1906 -1.9012 -0.6667 -1.2590 -1.1021 -2.6650 0.1400 -1.4183 -1.2342 0.0547 0.1519 1.1906 + -3.6125 -2.2485 -1.0820 -1.9912 -1.1521 -2.2527 -2.5383 0.9320 1.1572 2.0230 1.6579 1.3763 6.4432 2.1652 -2.0259 1.9724 3.2824 -0.4615 -1.1909 -2.4539 + -1.1530 -2.1790 -0.7355 -2.0941 0.6246 1.7502 -3.3266 -3.4374 -2.6486 -2.2938 0.9286 1.3396 -2.1323 0.2739 1.2664 4.4111 1.3864 3.9050 2.8286 1.2861 + -1.9752 0.7423 2.4137 1.8854 -1.1393 -2.5802 -2.9355 -3.6740 -1.8244 0.3099 6.1403 4.6215 -2.0636 -3.7172 -0.9400 1.4240 -0.3669 2.0205 0.6217 1.0369 + -0.1561 3.9621 -1.3649 0.2912 3.5366 0.8537 -0.9376 -3.7333 -6.5447 -1.2107 3.3183 2.5758 1.9693 -4.8690 0.6212 0.0985 1.5746 0.2433 -2.6173 2.3890 + 0.6849 -1.1521 -2.0382 -0.8953 0.8771 1.1996 -0.9704 -1.3679 -1.1460 0.0582 0.2636 -1.9785 0.5235 1.6427 0.6362 0.7411 5.6052 -0.3533 0.6579 -2.9883 + 0.5989 -3.9928 -2.1937 3.8742 2.0056 2.3132 -0.4478 -2.0855 -4.3607 -2.1260 5.3544 1.9827 5.3407 -0.8346 -2.4624 1.1729 -4.3825 0.7623 -1.9429 1.4240 + -3.3103 0.0394 2.0113 2.6733 1.2484 -0.2186 0.1156 -0.4856 2.4501 0.8179 -1.1164 -2.1952 -0.9719 2.0728 0.4002 1.1891 1.7518 -1.2571 -3.3136 -1.9012 + 1.8860 6.9767 2.4311 -2.0414 3.9100 5.5378 -1.7478 -0.8304 2.8523 -1.4075 0.1309 1.8232 -2.8868 -7.5003 -3.4867 -3.2756 -2.8584 6.2611 -7.4682 1.6940 + 3.5074 1.3392 1.0862 2.9814 0.8158 -2.6160 -2.3837 -0.8255 -0.1595 2.0087 -2.8876 -2.4727 -1.3574 -1.2864 -1.5711 -1.0772 0.4648 2.7262 2.1044 -0.3970 + -0.1430 -0.9788 -2.1195 -0.7774 4.0804 3.7123 1.5082 0.2869 -2.5968 -2.0127 1.5147 3.7486 3.2447 0.6959 0.3308 -2.4516 -3.4598 -4.1669 -0.6870 0.2709 + 0.0724 0.3235 -1.9536 -2.7454 -3.3392 -1.9023 -1.0150 0.7511 -0.0539 -2.8386 5.2737 5.1053 1.4372 1.4046 1.4504 2.4912 -2.6526 -0.6188 -0.6530 -0.5369 + -6.9550 1.3233 4.3542 2.9502 0.9929 -0.1186 -0.8657 -2.3452 3.5061 2.8348 -4.1741 -4.1264 4.6970 3.0117 -0.2849 -8.0081 3.4452 0.7819 -2.7443 1.7251 + -4.0878 -0.8849 -4.7521 5.0067 -3.3510 -4.8233 -6.6328 4.8752 -0.7474 3.8614 2.6271 0.9119 1.0371 2.2968 4.3160 -3.7042 0.9900 0.4960 4.7952 -2.2300 + 0.5901 2.0654 1.7824 -0.5570 0.4874 2.7659 0.8232 -0.1306 -0.6795 -1.3143 -1.2480 0.9969 2.0563 0.1625 0.7346 0.0223 -1.6836 -2.9087 -4.1058 0.1406 + -0.5074 -0.8373 -0.8579 -0.0460 -0.0854 -1.4221 -0.6935 2.5302 2.2014 2.2225 0.5896 1.2715 -0.7624 -2.7997 -5.3296 4.0372 3.2176 -1.4146 -1.3705 0.0565 + -3.8190 -1.1051 1.5169 -0.5542 -1.5591 0.2921 -2.1144 1.6664 2.8275 0.7745 2.6977 4.4021 -0.2010 0.0685 1.3158 -0.8045 -5.9834 1.7874 -2.1592 0.9509 + 0.6749 -0.0635 0.3751 0.6561 0.4718 -2.3144 -4.9191 -3.0907 0.5499 -0.3498 1.2370 2.6699 1.5353 1.6809 1.2117 -1.3733 0.0977 1.3610 0.0102 -0.4207 + 0.8139 -2.9454 -1.1694 1.1826 3.5742 4.3331 1.4143 1.7017 -1.2428 4.8459 -4.4642 -0.0684 -1.7273 -0.1932 -2.6041 -1.4272 0.2873 -0.9676 -0.1422 -1.2013 + -1.8690 1.2475 -2.8884 -0.3842 -0.3588 2.7759 -2.0060 -2.2023 -2.6599 -2.5791 -3.1221 3.2645 1.8131 2.8630 6.3144 -4.2619 0.7589 -0.7608 4.8657 -0.8104 + 2.3449 0.3057 -2.2411 -1.3084 0.6572 -0.3790 0.2674 0.5337 0.4996 0.8832 2.3616 3.9339 4.7846 -2.7473 -0.5167 -0.0864 0.9288 -4.3018 -4.0903 -1.8294 + 2.9658 2.7467 -1.9276 -4.0009 -0.7257 -0.6616 -2.0255 -1.2898 0.3022 1.5810 3.0521 2.5790 -3.2369 -0.4791 0.4455 0.1138 1.1032 0.9003 -1.5708 0.1285 + 5.2204 -2.8190 0.8203 0.5992 -1.3205 -2.1549 5.0256 -1.6050 0.5506 -2.8092 -0.2831 -1.6376 -1.8233 -0.0177 2.5319 2.0586 0.9166 -1.5417 -0.3071 -1.4039 + 0.1090 -0.1359 -0.4821 -0.5060 -1.1903 -0.1205 1.3010 0.0989 0.2280 1.3298 1.4648 0.7280 0.0076 -1.4837 -0.1633 1.2525 0.9437 -0.0019 -3.9783 0.5988 + -4.0941 -3.4220 0.4966 -5.4678 6.0636 1.1749 -0.1830 3.3518 3.5480 1.4243 2.5791 -5.9065 -1.8723 -1.6703 1.3990 6.8845 1.8643 -1.2344 -3.7475 -1.1880 + 3.5819 1.2282 -0.2187 -0.8194 -0.0683 0.6784 0.9405 -0.1871 -1.0635 -2.3089 -1.7476 -2.3377 -1.8039 -0.2123 0.7402 0.8810 0.7063 -3.8015 4.2698 1.5426 + -0.7508 -2.5319 -1.4606 1.0638 -3.8848 1.2060 2.6878 -1.2315 -0.1629 -2.2730 -3.3361 -1.6208 1.9855 3.4308 -0.2120 -1.4559 -0.3738 2.3568 2.3629 4.2004 + 1.5564 1.6137 1.4225 1.6668 1.3266 0.0460 0.1831 -0.3664 -1.4348 2.5690 2.2918 1.6955 1.6680 -1.3807 -1.0884 -1.0980 -0.5844 -1.0295 -3.6955 -5.3616 + 1.7128 -1.8066 -4.0653 -3.8214 -0.9531 3.4797 0.7961 -2.4955 -2.7851 0.0025 0.7872 1.0652 1.5456 -0.4352 1.9173 4.6258 0.3691 -0.1501 -0.2351 0.4458 + -1.6777 -3.1299 -1.6947 -1.1535 -2.1999 -3.2226 -0.9846 -2.1533 -0.6467 2.0938 2.1307 2.9065 1.5181 3.0875 0.0486 -0.2157 1.3461 0.7741 2.7320 0.4413 + -2.0098 -0.0651 -1.1313 -3.1454 -1.8173 0.4664 2.3278 3.1806 -3.0726 -1.5969 3.6994 0.6478 -0.6833 1.0635 1.1405 6.7102 -4.8934 -4.2029 3.4752 -0.0933 + 3.0911 3.1320 3.6764 1.2247 2.0977 -0.4399 -3.9470 1.4276 -0.2596 0.5511 -6.4999 -0.9385 3.2215 1.7397 -2.0786 -2.6160 -3.0150 -2.0586 1.9218 -0.2304 + 0.5955 -0.9572 -3.8115 -1.2133 0.9600 3.0247 8.6360 5.7851 6.1244 0.7094 -2.4410 -1.1712 -1.7901 -3.5399 -2.8318 -2.5468 -4.9596 -0.6022 0.6141 -0.5845 + 12.5835 1.8094 0.1352 1.7718 0.9427 -1.3690 7.1277 0.0421 -2.3404 -4.6650 1.4653 -2.4880 2.6056 -10.3828 -8.1067 4.1108 -1.2481 -1.8330 -2.7827 2.6214 + 2.9658 -0.2617 0.2806 -0.2164 2.8550 1.9755 -3.5301 -1.2350 0.9311 0.8713 -2.2265 -0.6005 2.6386 2.7666 -2.3603 -2.5163 1.6854 1.0161 -7.8883 2.8489 + -0.9445 0.6006 -1.3214 -5.0651 -2.1702 -0.0289 0.1003 2.2883 0.0424 3.4686 2.0494 1.6327 -1.6152 0.1220 -2.8666 -2.2261 4.9579 -2.2581 -2.7323 5.9663 + -1.3666 -0.2364 -0.3999 -0.9988 -2.0227 -0.0610 -0.5411 -2.2113 -0.2283 -1.7150 1.0239 4.2760 1.9603 -3.0526 -2.5894 0.8611 5.2528 3.4951 -2.2336 0.7875 + 4.7609 3.7023 0.7955 -3.1291 -1.3671 0.8798 -0.9947 0.2668 0.5762 -0.9479 -4.5541 -0.6922 0.0699 -5.8412 4.2302 5.0652 1.3544 -2.4661 -0.6224 -1.0865 + -2.6815 -0.9958 1.6109 -1.7618 -2.5561 1.0357 -1.5863 -2.2811 3.4491 1.1806 -0.2855 -0.1380 -0.0202 5.6861 0.8289 -1.0913 0.5986 -1.1493 3.2455 -3.0884 + 1.7353 3.1908 5.0898 -0.4602 0.0751 -2.1427 -5.0910 -3.1667 -3.3291 1.9531 0.4802 -4.8101 2.2518 2.4380 0.6439 -7.3548 -0.0689 1.8997 5.7170 0.9491 + -1.1588 -3.1119 -3.4525 0.2538 1.3345 -1.0500 -0.3870 -0.0472 0.1522 4.0806 2.8886 3.8741 -1.9507 -2.9183 -0.3828 -0.0805 0.4136 1.1466 -3.1863 3.5818 + -4.1654 -5.7362 -5.0041 -0.9889 4.1884 4.8135 1.5658 -2.3781 0.8425 7.5151 7.3977 3.9243 0.6283 0.9194 -5.0741 -1.9566 0.2100 -4.9786 0.8760 -2.5989 + -5.3114 2.2992 -1.9803 1.2150 9.1545 -2.1960 -2.8749 9.6686 0.5512 -4.1700 -1.1338 -4.1549 1.6645 -3.1643 -1.7800 4.9896 0.3390 -0.0421 -1.0391 -2.0347 + 1.0740 2.1840 0.9247 2.0617 -2.1994 -4.0653 -1.5118 -0.9397 1.3781 2.9104 -0.8864 8.5382 0.5495 -3.5922 -0.2482 -0.5485 -0.9604 -1.8453 -3.1808 0.3575 + 3.5141 2.7621 1.2101 -0.3665 -1.1827 -0.5351 0.4822 0.7598 0.8241 1.4976 -0.8943 -2.8067 -2.3512 -2.0448 0.3706 -0.9201 -3.9192 1.1431 0.4761 1.9809 + -1.7817 1.1939 -1.2195 1.7524 -4.7374 1.1520 0.0973 1.5475 2.2848 -7.7870 2.0346 0.5213 2.8861 3.1077 1.1974 2.3936 -1.4248 -0.2888 -1.4706 -1.4588 + -0.7677 -2.0426 -2.9918 -1.8722 -1.4336 0.4207 1.4107 1.0509 -0.1714 0.2221 1.3054 0.5884 3.1454 1.8747 0.1510 -0.5701 0.5457 2.7058 -0.0854 -3.4859 + 1.6593 1.0024 0.3202 1.0267 -0.2368 0.1208 -0.7272 -1.0487 0.2686 -1.0197 -1.3131 4.1829 1.0297 1.7779 -3.0898 -0.7777 -4.5532 2.1765 -0.3100 -0.4886 + 2.9341 -0.2895 -2.4210 0.9438 2.9490 1.2447 -0.4279 -0.4133 -0.2487 0.6464 0.1859 -0.8613 0.0690 -2.0024 -3.5783 -0.9123 -2.3469 0.3089 5.3909 -1.1710 + 13.8818 0.6217 -0.6459 -3.4218 0.8331 0.8918 2.2009 4.0596 -3.0380 -7.3862 -3.2105 -2.2108 4.7972 -5.3735 3.8870 -1.8190 -0.5123 0.9752 -3.6921 -0.8383 + 0.2536 -11.0226 4.4625 -7.9396 8.6657 2.6088 -1.0215 0.4492 -5.0641 2.7194 1.1735 2.2070 3.3733 -0.2605 5.5319 3.5989 0.2759 -3.6185 -2.9338 -3.4591 + -0.2533 -1.2245 -1.1924 -0.1962 0.6099 -2.1289 -2.0002 -2.0390 -1.5592 0.7879 0.1165 -0.9325 -1.5485 0.4552 0.3883 1.9054 2.3495 3.9138 2.3594 0.1886 + 0.1750 3.7528 1.6899 -4.3270 -5.0437 -3.1410 -4.7768 -1.9628 -4.5893 5.9435 -9.6773 -0.4601 3.0571 1.2797 0.1161 3.5574 3.7157 -2.0222 5.9308 6.7823 + -0.6999 -2.9933 -3.6606 -0.6207 -1.4032 -1.1364 0.2530 -0.9004 -2.7685 -4.3142 -0.7561 0.8142 -0.4715 0.8444 2.0053 0.5983 3.3363 4.4913 6.9146 0.4673 + 1.0959 -0.0886 0.2379 3.2725 1.2016 -1.1581 -1.3640 -0.6268 -0.3678 0.9051 0.7593 -2.2902 -1.4578 0.6349 0.5115 -4.4984 2.2315 2.2535 -2.7867 1.5345 + 3.6055 3.8842 2.1794 -0.7568 -1.0500 -2.1686 -0.6731 -2.0718 0.8001 -0.6819 1.1112 0.5707 -2.4862 3.1489 2.6767 2.5134 -1.9147 -4.1519 -2.4548 -2.0802 + -1.9388 -0.7447 -0.8349 0.1123 0.1251 -1.3476 -2.6413 -0.4770 5.6864 -1.8563 -3.3514 -0.5309 -1.6295 -1.3453 -0.4664 4.5930 1.1909 2.9264 0.9356 1.5944 + 0.5951 -0.4177 -0.1304 0.5462 -1.3265 1.4534 1.6425 0.9730 0.8946 2.1586 4.2557 0.8968 -5.0524 -1.9576 2.6089 0.6571 0.7918 -2.2504 -4.5907 -1.7480 + -1.6456 -2.0706 -2.4462 -2.5983 -2.5056 2.0863 -0.9159 -0.8806 -0.8052 -0.7776 1.0285 0.4522 1.5131 3.4530 4.9330 -2.7752 1.7750 2.1982 -0.0181 -0.0006 + 2.2117 0.6658 -0.1647 -0.7769 -0.3291 -0.0686 3.1830 1.8603 1.0488 -0.7866 -1.0352 1.6465 0.2395 0.3989 -1.2496 -1.9498 -2.6996 -7.5216 1.3320 3.9951 + 1.0405 1.3681 2.7153 3.0279 2.8206 1.9933 -1.5434 -2.0223 -1.0490 -1.2756 -0.1434 0.2554 0.8858 1.3178 0.3714 3.5670 -3.1912 -1.0147 -3.0243 -6.0993 + -0.8348 -2.4017 -3.6731 -2.0399 -0.2474 -1.0640 -1.1488 1.3352 2.8367 5.1498 -0.0673 1.7148 2.0672 0.7800 -2.8302 2.8981 -0.7525 1.3119 -2.4119 -0.6222 + 3.0927 2.0509 2.4548 -1.3001 -3.9942 -0.7486 2.8523 0.1569 -4.3404 -10.5627 4.2087 4.2968 2.7013 -1.1646 0.2008 -2.4272 1.8708 0.5192 -2.3092 2.4416 + 0.6449 -3.5216 -3.8362 2.1329 -1.2999 0.6434 -2.5079 3.1409 -0.9430 2.1409 -0.9005 2.6639 5.8420 2.2508 -0.1834 -3.5407 -2.0329 -1.9827 -0.2675 1.5565 + 5.1512 4.1361 0.9497 -3.1897 -6.0608 -4.8346 -0.7128 -2.1849 -2.1809 0.1265 0.3295 0.2665 1.1233 -0.4722 2.7945 1.1909 0.4093 1.9529 0.6380 0.5674 + -2.0255 1.8944 3.2610 -0.6543 -0.1603 1.6419 1.8339 -4.1284 -1.6495 -7.4417 2.7611 3.0349 -5.4696 5.3754 0.2729 5.1700 0.7296 -0.1265 -1.6533 -2.6659 + -7.1882 -6.8851 -0.9549 2.6573 1.6288 -0.3149 -2.2361 1.6706 4.0565 3.2723 -2.0478 -0.6505 2.7769 4.9536 1.8310 -4.1026 -0.8540 2.2409 0.8671 -0.7209 + 0.8703 1.1461 2.9551 0.5102 0.4539 9.1307 -3.4339 -1.5513 -2.2902 -4.1038 -6.0580 -0.8757 3.5830 2.5081 -1.9449 0.3605 0.8645 0.6768 -0.2206 -2.5809 + -4.5091 -1.0618 1.6342 0.5890 1.0199 0.7070 -0.4636 -0.7393 -2.0902 -4.3948 -1.8491 2.8967 1.9263 0.6394 4.9955 3.9485 -0.2145 -1.3652 -1.4955 -0.1736 + -1.2527 -0.6868 0.0359 0.5854 0.7286 -0.5988 -1.0892 -1.2358 -0.5524 -1.8766 -4.8554 1.3154 3.0969 1.2141 0.4785 0.5435 0.9660 0.9526 2.5969 -0.3662 + -3.4429 -2.5359 -0.7902 1.6794 1.3950 0.9304 0.5281 2.0451 -0.2820 -0.7620 -2.3113 -2.5279 -1.2407 -4.6199 3.9276 -1.3637 2.0692 2.0266 2.4150 2.8601 + -0.0841 -1.4504 -2.5295 -2.1914 0.0160 -1.5806 -3.8581 -1.8751 1.2410 1.4792 -0.0268 -3.0304 1.1672 3.1034 -0.0043 -1.7750 1.0722 5.8103 3.7335 0.7830 + -1.2601 -0.9248 -0.9753 -1.1580 -0.4657 0.9286 0.4457 -0.7164 2.9298 6.0232 1.1288 -9.2201 -2.6002 1.0866 3.5907 -0.3994 -0.8783 -0.4493 3.0463 -0.1320 + -2.6865 -1.7683 0.5719 4.2697 0.4434 0.9403 -0.1787 -3.9995 -1.4954 -2.9666 0.5871 0.7458 -0.5643 -3.3758 2.4009 1.3630 3.2345 2.9305 0.6423 -1.0943 + 0.2605 -0.1269 0.1894 0.8801 5.6065 4.4842 -0.3360 1.6337 -1.0080 2.2349 -1.3371 -3.4195 -1.5849 3.4658 -2.7632 -2.8878 0.2535 -1.0857 -3.4858 -0.9736 + 0.5903 -1.1309 -3.8731 -2.8181 0.6957 -2.1930 -3.7976 -0.1684 0.3131 0.8609 0.0568 -0.1356 5.9915 2.3704 3.9840 0.5840 -1.9366 -2.6479 0.4937 2.7608 + -1.4917 0.6707 -1.8279 0.4736 -4.3226 7.6508 -0.6770 -1.0388 1.6577 3.4357 2.1210 -1.6783 -1.9394 -0.4857 0.0446 -2.1769 -1.5641 1.5895 1.4750 -1.9161 + -2.4617 -1.4865 0.9268 3.7356 1.9298 -1.0879 -0.9003 -0.6573 -0.4536 1.1463 2.5279 -0.9025 -2.1547 0.5579 -1.4546 -2.5618 -1.1020 1.7633 4.9058 -2.2707 + 3.2436 2.0698 1.3674 -1.4618 -0.4269 1.2764 0.3160 1.2237 0.7208 1.5117 1.4584 -0.5527 -0.7757 -2.7217 -4.0792 1.8261 2.7197 -3.9546 -1.7508 -2.0101 + 0.2659 1.9357 0.5705 -1.8509 -5.0017 -3.7512 -2.7574 0.2996 -1.1250 0.6895 2.7521 3.7090 3.4556 6.5334 -3.5389 -3.8970 -2.9436 0.7650 1.5177 2.3717 + -1.2532 -0.7651 -0.7634 -1.6900 -2.3167 -1.0574 0.9291 -0.7963 -1.4770 -1.6646 0.5558 0.7009 3.4059 9.2719 1.4172 2.4588 -0.7901 -3.7873 -1.0613 -1.3173 + 3.2264 0.6063 -2.4159 -3.8529 -1.9936 2.6889 2.5115 0.8341 0.8209 1.2008 0.7255 -2.1489 -1.1543 -0.6443 2.0479 -0.7011 -0.5619 -0.0820 0.5538 -1.6613 + 0.8900 0.2673 1.2328 -0.1459 2.5186 2.3429 -0.5461 -0.5497 1.9452 5.1637 1.5156 -3.9805 -1.5621 -1.5331 -2.7711 -2.2357 0.7958 -1.6083 -2.3152 0.5758 + 4.0233 3.7838 3.0862 2.4680 -0.8644 -2.4804 -0.9694 -1.9035 -3.4966 -3.9590 -3.9724 -1.2080 -1.6237 0.7915 0.4354 0.8419 1.1287 1.8538 2.3476 -0.2827 + -0.5315 1.6742 2.6296 -0.5391 -1.8812 2.7171 6.8646 3.9934 -2.0577 -0.8537 -4.3316 -2.4473 -2.8864 -0.3456 -1.9169 -1.4494 0.4578 1.9608 -0.1673 -0.8898 + -2.1559 -2.4800 -1.5001 1.3457 3.3362 2.6367 1.4331 2.3397 3.7557 3.4063 1.6588 1.2723 -0.3658 0.5614 -2.5827 -5.6096 -3.4952 -4.1966 -1.5564 2.1965 + 0.1567 -1.6324 -1.8735 -2.1011 0.8687 2.8596 1.0227 5.0782 -3.8186 -0.4012 -1.0627 -1.0858 2.3105 2.5822 -1.0014 -0.6915 1.2628 0.1273 -4.3120 1.7113 + 0.5493 0.1877 -0.3065 0.0805 0.1700 -0.4682 -0.7192 0.7521 1.1935 -1.2445 0.5061 3.0407 3.3122 2.9044 2.0613 -2.6946 -2.8479 -1.4855 -3.4536 -1.5377 + 1.2611 1.2112 -0.4954 1.5849 2.8817 0.5597 -3.2189 -1.8993 -2.3996 0.0235 -0.9270 -1.1263 -1.6443 -3.5163 -1.2543 1.8410 4.5628 1.0754 -0.1607 1.6406 + -0.8759 -1.6975 0.2532 6.4042 -3.4246 -2.9858 1.9661 -3.2513 -4.0109 -0.5134 2.5545 -3.0437 -2.1093 -3.6915 4.1398 6.0036 -1.3456 1.3628 -1.0285 5.2940 + 8.8405 -7.2360 2.8239 7.1563 -1.4248 -8.0410 -1.9196 1.8187 -0.9320 -3.1134 1.9133 4.5783 5.5866 -1.7440 -0.1615 -9.2039 4.4457 -2.5424 2.5822 -3.4268 + -1.9594 -0.1440 -0.0014 -0.5248 -1.2740 1.9184 0.2637 0.9658 3.9879 -1.7646 0.8739 3.6824 -1.4748 -0.5493 4.1940 -0.5892 0.9704 -2.3393 -5.2036 -1.0319 + -1.8153 -0.8777 -1.3975 -2.8688 -1.3150 0.6005 2.0795 2.0158 -0.0187 2.3273 5.2446 3.1910 0.5420 -1.0394 1.3294 -4.6550 -1.5318 -1.6999 0.2573 -0.3684 + 4.3069 1.2137 -1.8464 -3.0026 -0.9539 3.1554 3.4215 2.0922 0.4828 1.6102 1.1857 1.5577 -1.8593 -2.9907 -3.0640 -4.6355 -1.6614 1.3592 1.5116 -1.8833 + 0.6407 1.1519 1.5429 -0.7369 -1.7269 -1.6671 -0.1290 -0.7049 0.8116 -1.2198 -4.0157 -5.1437 -3.1965 2.3418 0.7111 2.6992 0.5585 1.9829 4.9644 1.1355 + 0.6364 2.1072 0.9870 -5.1572 -4.3363 -1.0839 -1.3521 1.8709 0.8132 -0.2938 -0.2079 -2.5242 -0.8999 2.3401 0.7392 3.1549 3.0568 -1.1375 0.0963 1.1908 + -0.0136 -2.4241 -0.4209 1.6339 3.4114 3.5889 -1.4100 -3.5651 3.1831 2.0426 0.5548 -2.0177 1.6429 -3.2634 1.5780 -4.1305 -0.9389 0.1651 0.4588 -0.0751 + 2.0687 0.8544 -0.3821 -0.1978 1.0057 2.3289 3.0174 -0.3330 2.0178 -0.6679 -0.1993 -1.9170 1.6018 -0.3834 0.6526 1.9588 0.3355 -2.0462 -4.1767 -5.5379 + 2.7809 0.2282 0.4820 1.9051 -1.7350 -3.4716 -3.3685 -1.3005 0.1251 -1.5366 -1.9516 -2.1469 1.2541 3.7123 3.0390 0.8154 2.3154 2.5014 0.0685 -3.7166 + -2.7442 -0.5589 1.8753 0.2528 -1.7122 -1.5279 0.3471 1.3429 -0.0809 -1.0979 -0.5556 2.8899 0.2864 2.1800 1.7006 -3.4442 -2.6681 2.9174 1.9107 -1.3132 + 1.1471 -0.3191 -2.5131 -2.6788 2.7236 4.0318 2.9420 3.1336 1.5351 0.4800 -0.0086 -1.0945 -1.1975 -0.4758 0.1588 -0.4970 -0.2437 -3.5219 -3.3061 -0.2958 + -0.6947 -3.5085 -2.7613 0.0475 0.2365 -2.4104 -0.4597 -0.9262 -0.2261 1.8983 0.9162 0.3544 -1.0767 2.3229 2.3748 -1.6417 3.4712 -3.6716 0.1472 5.6077 + -1.7531 -0.9915 -0.4352 0.4089 0.1890 -1.7111 -0.6401 -0.9353 -0.5743 0.3365 -0.6869 0.9392 0.8776 -0.2201 0.7815 -1.7487 -0.2509 3.0732 0.2971 3.0442 + -6.4696 -1.5332 1.3136 7.9582 4.7035 0.4178 -1.4784 -2.4577 -0.6662 -2.4183 -3.1348 -2.0591 -4.3423 -0.2080 1.5975 -2.6953 0.1211 4.7779 4.5315 2.0419 + 0.8642 3.0824 1.7461 -0.8529 0.9231 -0.3502 -2.7586 -2.7081 -1.4853 1.1577 2.4953 -2.0279 3.1643 -1.1352 0.2786 -0.1650 2.4230 -0.5282 -0.4006 -3.7227 + -3.9091 0.2639 -0.0395 -5.0339 1.4635 7.9381 -1.8279 -7.5321 1.8947 0.9696 -7.1991 7.7502 4.8838 -5.2722 5.2271 6.4012 -8.2785 -5.8271 0.4487 7.6786 + -0.4051 0.3015 -0.5211 -1.1563 -1.5548 -0.8506 -1.7742 -0.6679 0.3853 3.9695 3.1450 -3.5632 -0.3392 -3.3757 1.3514 4.4934 -1.2754 -0.4248 1.0022 1.2601 + -3.0667 3.2388 3.6288 -0.3263 -3.6989 -4.3941 -3.0073 -2.9882 -2.7834 -3.8873 2.3701 6.1068 1.0432 -2.8444 0.1460 -2.5272 1.8208 2.6818 7.7176 0.7699 + -0.8674 0.6588 -0.0766 1.9350 3.3452 2.7012 0.4707 -0.8282 -0.7703 -3.8252 -2.8814 -0.2389 -1.3895 -0.9376 0.2572 -3.4418 -2.3763 -1.8695 7.4789 2.6558 + 0.8567 1.9741 0.6363 2.1993 1.9072 2.2211 3.7376 -0.0455 1.3289 -1.0736 -4.8817 -4.0284 2.4624 1.0596 -3.8101 -3.8498 0.8895 -0.5176 -2.3743 1.3083 + 3.7465 3.5865 0.1979 0.4072 -1.1714 -1.4598 -2.1688 -1.4971 -1.1953 -2.8028 -1.8515 1.1483 3.7654 -2.6485 1.2635 -2.4929 -1.4965 0.6356 3.3756 0.6583 + -1.7286 -0.6675 0.3769 1.1159 0.0587 1.4828 1.2140 6.0165 1.2212 -3.4526 -2.4321 -0.8616 -2.2663 -0.0017 -0.0046 0.2615 0.0517 -0.8546 0.5801 -0.1095 + 3.4455 1.4668 -0.0851 -2.9245 0.0932 1.2861 1.1250 -0.6317 -4.0005 -4.4206 -1.5097 1.3643 -0.1238 -0.8046 -2.4500 4.2293 2.9297 3.2594 -3.0122 0.7633 + 2.2354 -0.6334 -2.7256 -1.7876 -1.8603 0.6549 0.1244 -1.8100 -1.7636 -2.7665 1.0419 3.6034 2.7187 -5.8124 -0.9848 2.8478 -0.3193 3.4835 2.5353 1.2184 + 3.0602 4.3425 2.4260 -0.5623 -0.8919 -0.2730 1.3901 0.4772 -0.5219 -1.3754 0.4815 2.4087 -5.0472 -5.6009 -2.8901 -2.4607 1.8809 3.5997 3.9232 -4.3669 + -0.0346 -0.2122 -0.2290 -0.9365 -0.4221 -1.9300 -2.3572 -2.9919 -2.2394 3.2115 2.4104 2.4249 -0.5682 1.5001 -1.3857 2.6140 -1.8866 -5.6180 7.3368 1.3135 + -0.4484 -1.1107 -1.9143 -1.2992 -0.5392 -1.0181 -0.6562 0.5186 -0.7919 -1.4379 -4.0959 2.4107 1.5417 0.0557 3.4844 1.7096 -0.8275 1.7994 2.0983 0.5209 + -0.4549 0.1830 0.2262 -2.2572 -1.5931 -0.7026 2.6431 2.6098 4.0381 -0.4805 -2.9134 -3.5443 -0.6536 -2.1551 2.0956 1.2393 0.2979 0.9155 -2.0621 2.5682 + -0.1092 -1.2889 -2.5682 -2.3378 -1.7259 -0.5628 -0.6114 -2.8295 -2.5690 -3.3678 -2.2669 0.6023 0.3823 5.9006 5.7607 1.9871 0.6942 1.2471 3.2445 0.4186 + 0.6515 1.8638 -0.3444 -2.0169 -0.6995 -2.9879 -2.4596 -1.0847 -0.8686 -2.3776 2.0331 4.8909 4.1694 1.2690 1.4079 1.9289 1.8820 -0.9986 -3.0198 -3.2390 + 1.7936 1.2201 -1.9231 -2.6761 1.6107 7.0585 8.8031 2.9894 -2.3291 -6.5825 -1.5641 3.0126 -4.0096 -4.0332 -0.6223 -0.5985 -0.8359 1.2689 0.3585 -2.9410 + -1.2384 -0.3295 2.3565 3.0657 3.2204 1.0890 -0.5456 0.1283 2.9904 -0.0970 -5.2104 -1.5801 -2.5751 -2.3243 -0.3014 2.6881 0.5623 -1.5424 -1.9388 1.5825 + -2.6631 -2.8705 -3.6445 -0.1511 1.0369 4.6018 2.7993 -0.5794 -0.1152 0.9196 4.1279 -0.7083 -3.1505 -2.1870 -2.5145 -0.8667 1.9629 3.7810 1.8562 -1.6347 + -3.7832 -0.9972 1.0298 0.8253 -2.4369 -3.3827 -2.6892 -0.8231 -1.0820 -0.0375 -0.7937 -1.8433 -0.5302 3.8146 2.3123 1.6122 4.1004 5.6672 -1.0450 0.0824 + -0.1000 -2.0200 -0.5383 2.2917 0.8366 -2.2105 -0.8495 2.1052 3.4989 -0.0827 -0.3031 -1.7154 1.3463 5.4572 -3.0939 -0.0935 -1.1704 -5.2410 2.4300 -0.5476 + -3.7789 -1.9485 1.8338 2.9833 0.6807 1.8337 5.1432 -0.4532 0.5973 -0.6042 0.8753 -1.5014 0.4292 -2.2709 -1.2993 -0.1667 -1.6955 1.1932 -6.0865 4.2353 + -0.4920 0.0568 -2.6837 -3.2294 -0.2920 -0.6790 2.7843 3.0219 1.7934 -2.2037 -3.0967 1.8829 0.5782 -1.6334 1.9235 4.5606 -4.2261 -0.0121 2.2982 -0.3517 + -0.6429 2.5139 2.3667 2.2000 -1.8905 -1.3195 -0.0575 -0.6720 2.8832 0.3828 0.9744 2.9334 -0.6053 3.2595 2.5269 0.0016 -5.8119 -0.9627 -4.8744 -3.2058 + 0.8584 0.9302 0.3630 -0.3058 -0.9190 -1.1142 -3.3748 -2.6210 0.9921 -0.0440 -0.2277 0.8060 1.7478 2.0581 0.3900 4.4187 5.8430 -6.6138 -3.1191 -0.0680 + 0.3281 -0.0986 -1.1173 -1.9481 -2.4515 -1.0863 -1.3545 1.1448 2.8412 3.7501 2.6741 2.7224 1.8554 1.4018 -3.7195 -2.9142 -1.2068 -4.2062 2.9680 0.4170 + 0.2181 -1.3017 -1.3715 -0.9326 -1.1639 -0.6082 2.2905 2.1838 3.1530 3.3746 2.0088 -0.8055 -1.0486 0.7007 -1.7960 -0.3898 -2.4327 -2.4057 -2.1793 2.5060 + -2.4912 -0.4925 1.9418 -0.6320 -1.0125 1.8048 -1.5360 -1.7457 -0.3001 0.5912 0.4548 -1.4661 -1.5177 -0.5917 5.6377 -3.6558 1.8798 3.7139 3.0715 -3.6543 + -1.0770 1.7774 3.6503 0.2492 -2.5625 -1.2989 0.3077 -1.4511 -0.7454 -1.0293 0.9281 -0.0970 -1.4180 0.5544 2.0070 3.1415 2.3666 -0.7117 -2.8143 -1.7770 + -1.8815 -2.2795 -1.1580 1.0865 -0.0453 1.6476 0.0859 -1.8231 -0.7599 -1.0013 0.0173 -0.6116 0.0110 0.6057 0.1048 0.3920 2.8241 -0.4223 -0.2920 3.4995 + 0.0544 2.8654 4.0202 1.6845 -1.8534 -2.9185 -1.4228 -3.6388 -2.0210 -2.4342 -3.4254 -1.7961 2.7218 6.6019 2.2780 -0.0758 -2.1727 1.0645 -0.3083 0.7762 + -4.2733 -4.7209 -2.5347 -4.1434 -2.3709 0.1195 0.9517 -1.8672 1.5567 3.4133 0.9511 6.1534 5.0591 3.3617 4.3448 -0.8335 0.0697 -1.2096 -2.2085 -1.8188 + 0.0539 1.0537 0.6965 0.7551 -2.3328 -4.4085 -1.7944 4.6582 -1.8228 -0.3800 0.4342 0.9079 1.1727 -0.2538 -0.9787 1.6403 0.3758 0.2889 -1.0679 1.0017 + 0.9075 0.5642 -0.6092 -2.8652 -3.3111 -1.2627 1.6981 0.5866 2.5675 2.8589 1.6024 2.0917 0.4354 1.0342 1.2054 -2.7817 -0.5893 0.0883 -2.8199 -1.4010 + 0.8980 -0.3869 -0.4833 2.6033 -0.0884 -0.3699 7.2953 1.6809 0.8531 1.6498 -4.4993 0.0072 -1.9421 -1.8001 -2.5825 -3.6475 -2.3221 0.6178 0.3128 2.2040 + -6.0307 -1.3653 -0.3786 0.0247 0.6616 0.7676 3.3234 3.0965 0.7765 -0.6097 1.0441 -0.9142 1.6186 -9.2158 -4.2017 2.5866 2.2875 2.0945 2.8697 1.5646 + -0.3542 -0.0280 4.1718 2.5282 6.0404 2.9659 -1.0269 -1.4497 -5.6815 -3.9178 -3.9280 -6.4467 -2.5804 -4.6703 -1.3963 3.1437 4.3980 -0.5477 2.7035 6.0758 + -1.5432 3.8376 1.4210 -1.1449 0.4892 1.3172 -2.0383 -2.2564 -2.1791 3.0272 -4.0284 -1.3615 -1.9716 -4.9880 3.8800 2.5715 -2.8049 5.2429 -2.0992 4.6290 + 1.9112 0.2401 1.2090 1.9221 -0.5051 2.0731 -0.8317 -1.4381 1.1319 0.2604 4.8570 -4.2486 -4.2343 -0.1445 2.6106 1.1135 -3.4590 -1.7688 1.2613 -1.9600 + -4.6396 -2.9689 0.9238 0.7657 0.5574 -0.3650 -3.7022 -4.0756 -5.0362 0.3243 3.1880 1.7270 -0.7319 2.9308 3.7592 2.6099 -0.3181 4.3233 1.9146 -1.1863 + 0.1980 -2.2883 0.9330 3.8033 -3.0797 0.0635 -1.8773 -1.7344 -1.0161 0.1560 -0.1661 -3.8927 -0.3658 0.3316 1.1226 1.9542 -1.0490 -2.2906 3.6658 5.5322 + -0.8058 -0.9870 1.9765 0.8081 -0.8891 1.6549 -1.7178 -0.2062 -0.6134 3.7968 2.8384 4.3753 1.2045 -6.0029 -1.5145 -3.5656 0.8785 -0.8278 0.9419 -1.3448 + -1.9513 2.4604 2.9573 3.3043 2.2986 1.0394 -0.4185 -0.0890 -0.2841 2.2073 1.6514 0.3367 -1.0792 -1.4676 -0.8850 1.7747 0.0695 -7.9932 -5.3486 1.4171 + -2.8766 -0.2007 0.3439 0.7801 -0.0362 -1.8832 1.2162 3.7611 1.5511 -0.2914 4.4891 2.4265 0.5170 1.2791 -3.0822 -4.3172 2.1550 -1.7349 -2.5924 -1.5044 + -1.3853 -0.5001 0.6365 -1.9167 -1.9693 -1.6932 -2.5123 -3.1209 -1.5363 3.8772 1.7176 4.5613 2.2969 -1.7507 -0.4549 2.7398 -2.2572 -0.1132 1.3625 2.0183 + -0.2587 0.7517 0.0083 -1.5665 -2.9108 -3.8211 -5.3272 -2.2879 -3.3006 3.2010 3.9688 4.6713 3.8047 3.4665 0.6502 0.9612 0.0958 -1.5002 1.1994 -1.8059 + -0.0767 -2.8888 -3.8572 -1.6523 2.8392 3.7128 0.7093 -0.0657 0.9823 -1.6073 -2.1810 -1.5064 -0.6392 2.2679 1.7322 -1.1001 1.0422 1.4078 2.4192 -1.5382 + 2.1069 1.6101 -0.6015 -1.1106 -0.0731 0.3657 2.1738 0.6411 -3.2826 -4.2217 0.0005 4.1333 2.9287 4.0221 -1.0117 -7.1186 -0.3700 1.5812 0.1654 -1.9391 + -3.3989 -5.4211 -3.3823 0.1417 -0.2090 -2.9282 3.8367 5.4395 2.1603 -1.6658 -0.0286 3.8151 -1.6236 -0.4057 -0.8473 2.3634 0.3434 0.0424 -0.3374 2.1055 + 3.8095 -5.8994 -4.2159 -2.8701 5.1790 -4.6791 -5.6257 0.4437 3.5907 6.0531 -2.4206 -0.6190 2.0474 3.5867 7.1475 -4.6633 4.1906 1.2868 -11.1492 4.8074 + -5.2857 -2.3511 1.8870 -1.8753 -2.8109 0.3363 -1.9008 -0.4090 0.8741 -0.4525 -6.3796 0.4485 2.7092 2.5765 4.4129 4.7975 -0.3228 3.7712 2.7353 -2.7608 + -3.9913 -5.9775 -2.6898 8.0565 3.5971 1.2374 3.4590 0.3338 0.6958 -1.1912 -2.2406 -2.0748 0.0857 3.9701 1.1276 1.2332 0.6559 -3.8152 0.9255 -3.3971 + -2.4876 -2.5150 -2.0296 -1.0642 1.0080 0.6973 -1.7376 -1.5703 1.5923 -0.7283 -0.1226 -1.7315 2.4167 -0.4425 -1.5075 3.8846 0.5544 0.8966 4.6270 0.2600 + 2.8767 0.9007 0.0796 -2.1662 -1.5086 1.0148 -1.3370 0.8661 0.0749 1.4614 3.1800 2.1743 -1.6449 -2.7523 -2.7644 2.2901 -1.9100 -4.8716 -2.0883 6.1248 + 3.6336 2.1044 0.4628 -0.6805 -0.0353 -2.3281 1.0902 3.0334 -1.9070 -2.0882 -2.9673 0.1514 0.3556 -1.0151 -5.4063 2.3884 2.5624 -3.2553 3.9458 -0.0449 + -1.3869 -1.5992 1.4579 1.4992 1.7691 0.8878 0.9518 0.7305 -1.5050 -1.6287 -1.6402 -0.3868 2.7983 -2.2046 -0.5051 0.1956 7.1623 2.4667 -5.9139 -3.1488 + -3.5734 -7.3577 -7.1566 -1.3669 4.3200 2.1415 0.4237 -0.1707 3.4434 2.6751 2.2337 0.4895 2.5968 1.0123 -0.9145 -1.1189 0.9048 2.1474 0.4312 -1.1607 + -5.2465 -1.6283 -2.7428 -3.2948 -2.2122 4.3049 4.7808 4.7619 0.2262 -0.6089 1.1643 3.3590 -2.1676 0.2134 -1.1502 1.4193 1.4168 0.3538 -2.8694 -0.0796 + -3.4905 1.2508 2.0451 0.4490 3.1300 4.3899 0.1675 -1.3519 -0.0668 0.4245 -1.7121 0.2301 -2.2070 0.3069 3.1491 -7.5721 2.7986 3.8554 -4.1493 -1.6472 + 1.5232 1.5300 -1.0621 -1.4488 -0.8044 -0.3900 1.3086 -2.5549 -4.3776 0.5264 2.2421 -0.5299 -2.7363 4.9582 1.0929 1.1601 2.8351 1.9896 -4.9813 -0.2808 + 6.5366 -2.5283 -5.5972 -3.4516 -0.2385 1.8382 -1.6024 0.2804 8.8284 4.4416 -6.1238 3.7728 3.4763 2.9323 -2.3678 -5.5110 -4.9901 -0.1283 0.0084 0.4242 + 1.9342 1.5660 2.2346 1.0331 -0.6035 -0.4461 0.0271 0.7571 1.1796 0.2963 -0.9807 -0.5607 -1.4711 -2.5426 -4.1871 2.4178 0.2030 -1.7949 -3.6655 4.6035 + 2.2188 0.9702 -1.9037 -2.3323 -0.9270 -0.7473 0.4463 4.0069 3.2380 1.6378 1.5850 -1.9473 -1.2130 -2.1935 -1.9102 -3.3249 2.6456 1.0820 -1.3884 0.0570 + 1.8633 1.2717 1.6148 0.3758 2.9711 -0.8914 -1.2864 1.1672 2.0355 1.2245 -3.7030 3.7200 -3.0675 -1.9250 2.2356 -0.7355 0.5128 -4.4528 -2.9595 0.0288 + -2.2984 -0.5209 0.3609 2.6675 -3.6910 -0.3519 6.3822 3.0237 -0.1277 -2.2553 1.0403 0.9970 -1.3107 -1.9745 -0.1646 4.8839 0.1333 -1.3256 -3.4240 -2.0441 + -2.3190 2.2812 1.2138 -1.1727 -3.3340 -5.2226 3.6390 2.5124 -1.5642 3.4166 0.5330 1.8016 -0.3986 -2.9233 -3.7394 0.9982 -0.0060 -1.6833 4.3443 1.6231 + -2.2576 -2.6516 -1.1317 -1.2013 0.7393 0.1827 -1.2343 -3.2192 2.3728 2.7817 1.6779 0.8901 0.5320 1.4647 3.7014 7.0412 -2.6912 -2.5104 -1.2474 -3.2389 + -1.7690 -1.9167 -2.8243 0.8559 1.6454 0.6817 0.5231 -1.2522 -2.6542 -3.2288 -0.2864 0.0091 0.5513 -0.6182 -3.9328 4.4973 6.4951 0.4313 1.6808 1.1116 + -0.2744 -1.5780 -1.8323 -1.2019 -0.3620 1.2906 -0.2832 -1.9105 -0.8966 0.8634 -0.4648 -2.3172 -1.9676 -1.7065 0.8232 -2.4736 3.5667 5.3037 4.3018 1.1191 + -0.4003 -1.4016 -2.6548 -3.2373 -2.1471 -0.9075 -1.1057 1.1084 0.0584 0.6994 -2.2697 0.1501 -0.0187 -0.2177 -1.1214 2.5501 5.4533 5.8815 -0.4561 0.0366 + 2.4755 2.6766 3.3810 2.8797 -1.3067 -1.2604 0.4792 -1.5575 -2.0569 -1.1560 -1.3594 -0.7176 0.2831 1.2557 -0.1965 -2.5773 0.8488 0.4905 -3.0053 0.4234 + -0.5334 -1.6405 -1.4903 -1.2901 -2.0368 -2.4054 -2.0422 -1.2649 -0.3204 2.3946 2.8987 2.5774 -1.9494 -5.6321 2.8212 3.6550 3.9850 1.2152 1.3991 -0.3406 + -1.8395 -0.9841 -0.1468 -2.7046 0.5709 -0.0486 2.3079 -3.1973 5.7249 -2.0537 -0.8947 -0.5513 -1.5588 -0.0660 1.7712 1.4939 0.7539 0.8995 0.7376 -0.2144 + -2.1136 -6.4960 4.0091 -2.7287 -2.8520 0.0889 4.2865 1.1559 1.4489 2.3747 -0.2811 -1.6675 -2.1043 2.4825 1.5983 3.0151 1.4924 1.4598 1.4466 -6.6156 + 0.3044 0.5145 0.8314 -0.5726 -1.4732 0.5522 1.0454 0.7132 -0.3595 0.4703 4.9451 2.9593 3.4319 -1.7835 -2.7963 -3.6604 -2.7125 1.2113 -5.0055 1.3846 + 2.3458 3.2640 1.8110 0.4827 -1.6195 1.9882 1.8256 3.5857 4.1301 1.6235 -5.1588 -3.8052 -1.7214 -1.0231 1.3522 -0.3858 -5.6155 -1.3895 -1.6421 -0.0480 + 3.7883 2.2512 0.5915 3.6595 3.6582 1.2917 -2.0747 3.0623 -4.8462 -9.6783 -4.7828 -4.1622 -5.2776 -1.2559 2.3471 0.9386 6.0401 4.8334 -1.7435 1.3593 + -0.5609 -1.1658 -2.4817 -6.5550 -4.6100 -0.2509 0.7628 -0.8368 3.8495 3.9220 3.0356 2.0951 1.5781 3.7313 2.8834 -1.2291 -3.4270 1.5639 1.6072 -3.9116 + -1.4268 0.2383 2.3216 0.1248 2.0796 1.5987 0.8138 -0.2165 -2.9254 -1.2364 4.4075 -3.3005 -5.5475 2.3771 2.6523 1.5551 2.5380 1.7514 -3.2529 -4.5520 + -0.7746 0.9904 0.2665 0.8152 1.7416 -1.7222 -3.8193 0.6115 3.8698 -1.5065 -1.1919 -1.2590 -0.9540 1.8722 -0.1520 -4.1283 -0.5510 0.1951 0.7420 4.9546 + -4.9471 -2.6326 -0.7296 -2.9661 3.2611 5.2949 1.3584 -0.3484 0.0238 -0.5367 1.0370 -2.4283 -1.4686 5.4446 2.1704 -0.2969 -1.9436 4.7301 0.0591 -5.0816 + 0.8281 -1.2416 -3.3762 -3.9320 -1.3993 -3.0591 -0.9292 2.5927 2.1047 2.4478 0.5704 1.2666 0.5289 -0.2372 1.2696 3.8278 3.1348 1.0903 -4.3525 -1.1346 + -0.7430 -0.7480 -1.2610 -0.7625 1.0816 1.6556 1.2019 2.2812 3.2082 1.5688 -1.3094 -2.0639 -2.5822 -2.2528 -1.3400 -1.6246 0.6375 2.8900 1.4778 -1.3150 + 0.8081 -1.3233 1.3342 -0.4629 2.2543 -1.7177 1.7285 2.2425 -4.4738 0.6367 1.5497 -1.2988 0.3335 -1.1590 0.1744 -4.2648 5.1183 0.3072 -2.6556 0.8684 + 4.0404 1.9094 -0.2474 -1.1600 -0.9167 -2.2516 3.9300 2.7965 0.9719 -0.3105 2.6858 -1.8089 -6.0898 -5.0707 2.0812 -0.0971 -1.5043 0.0458 -1.0273 2.0234 + 0.1375 0.2390 1.2366 1.5253 1.5536 1.1452 -3.3801 -3.1595 -2.7411 1.0175 6.4814 1.4661 -1.2521 -3.3744 -3.5432 -5.4270 -1.3071 4.3703 3.6696 1.3422 + -0.0191 0.4401 -0.0551 1.2610 4.9915 1.8859 4.2946 2.2533 1.2460 -0.3261 -1.8245 0.5397 -0.9620 -2.4208 -1.3984 1.3654 -2.3100 -4.0785 -1.5595 -3.3235 + -4.1713 -3.8609 -3.6233 -2.2953 0.4590 -0.2721 -0.1506 -1.7078 0.0356 1.5074 1.0712 0.7854 0.7858 0.0168 -0.8160 0.0810 0.5445 4.5197 7.1653 -0.0742 + -2.9674 -1.4650 1.0679 3.2208 3.0814 -0.6959 -0.9252 1.0871 0.1680 -0.9317 -0.6966 -1.1041 2.3656 1.0874 -0.7021 -0.5843 -5.9540 -1.0591 4.3651 0.6421 + -2.3881 -1.1722 -0.2878 -1.3100 0.1054 2.7187 3.1286 1.3950 2.5138 0.8551 -1.0485 -2.7991 -1.7081 -1.9009 -0.2092 -1.1297 5.4416 0.9634 -4.8359 1.6679 + 0.3475 0.6761 -0.9160 -3.3303 -2.5114 -1.3053 -2.4606 -1.5909 -0.1066 1.2867 0.1087 0.6627 -0.9380 -2.1561 -4.1442 0.5530 3.6775 4.3771 4.5604 3.2095 + 1.8172 1.9142 1.3748 -1.2576 -1.3958 0.4060 -0.4725 -1.2643 0.8079 -0.6725 -3.4257 -3.2969 2.8901 -0.0329 4.2131 0.8390 -2.3538 -2.2196 3.3371 -1.2078 + 1.9496 3.6573 4.2326 1.1863 1.8389 -0.7982 -0.8176 0.9762 -2.1796 -2.4082 0.4600 -2.1099 -0.1300 5.8933 -3.2271 1.4122 -3.0287 -5.0286 0.1022 -1.9807 + 0.7977 0.4131 0.7926 0.7439 -2.7150 -3.1860 -1.6061 -0.5456 3.5797 0.0724 -0.4993 0.4656 -0.7994 -0.5991 0.0862 3.6997 -0.5342 -0.3047 0.9064 -0.7678 + 1.0025 0.1292 1.8299 -0.2181 -0.3367 2.6298 -1.6812 -0.7903 1.0473 -0.5336 -4.1833 2.6382 0.9480 -0.3031 -1.3062 -0.6706 1.4954 1.1070 -3.9483 1.1443 + -2.8220 -2.9373 -1.7368 -1.1113 0.7976 1.0210 2.2881 1.7823 -1.6829 -2.1388 -0.0636 0.6047 1.3691 0.5354 -2.8472 1.9900 -0.2414 -1.8409 2.3664 4.6674 + 0.8100 0.5306 3.2216 2.7904 2.3222 -0.0940 -1.2977 0.6699 -0.3153 -2.0729 -0.4524 0.1611 0.0422 -0.9458 -1.6284 -1.0590 0.4113 -0.2203 -0.7025 -2.1711 + 0.6469 2.9521 -0.5269 -2.8396 -2.8290 -0.4167 -2.6035 -1.8694 -1.2710 -1.1950 -0.6111 -1.1719 -0.0843 4.1129 3.9912 -0.9572 -5.8704 3.6319 4.0418 2.8690 + -1.7675 0.6361 2.5132 2.0830 1.8929 -1.5061 -3.5844 -4.2969 -2.8299 -0.6870 0.8308 1.3968 0.3529 4.0998 -1.6161 1.3306 0.5600 -0.5129 -1.6573 2.7621 + -4.0964 -1.5173 1.2551 0.2978 1.5682 0.3497 -1.4315 -2.0554 -0.5756 2.5392 0.7900 3.4286 -2.9558 -1.7034 -0.8459 1.0513 5.1871 -2.5294 1.2695 -0.0257 + 0.0328 -1.2155 -1.2836 -0.9363 -1.2229 -1.6930 -1.8595 0.3399 -1.5276 -1.0107 6.4040 -1.9072 0.7733 0.6079 2.8719 3.0211 2.3070 -3.5448 0.3434 -0.5002 + -6.6638 -3.5679 2.7288 3.1465 -1.8044 -3.2026 0.3954 1.5738 0.6840 -0.5029 1.1915 -2.4277 -2.8920 -0.4612 0.5352 2.0495 4.9107 0.7993 0.1809 3.3270 + -7.7693 -2.7271 -0.5302 -1.6862 -2.6750 -4.1941 6.2224 4.1406 1.2187 -0.8566 3.2170 2.7593 3.3324 -2.3093 -1.4924 1.2643 -2.9807 2.3328 4.6730 -1.9398 + -0.3214 0.7654 1.4453 1.0347 0.7854 -0.0281 0.6653 2.1756 2.5539 2.4886 2.8291 -2.3264 -5.6113 -4.1472 -2.1955 -0.1794 -0.8897 -2.9162 2.0658 1.8062 + 0.0689 -0.0814 0.5156 -0.9104 1.9645 1.4890 -0.7622 -1.4287 1.4489 2.2731 1.0561 3.0605 2.5928 -3.3062 -2.8865 -3.6767 -3.9506 -2.1727 -0.4806 5.1867 + -2.7262 -0.4080 -7.2353 0.2532 -1.7494 4.8406 2.4161 -8.2402 -0.3311 1.0612 3.3760 -0.5373 3.2052 3.7144 -2.9286 10.7765 4.9188 -8.1638 -0.8809 -1.3612 + 3.8706 1.5102 0.3780 -7.4590 -0.9006 2.4899 2.4680 -2.4184 -1.4186 0.2908 2.1056 2.4328 4.2260 -3.9887 -6.7913 -1.0651 2.4289 0.5874 4.8024 -3.5488 + -1.2691 -4.1749 -2.7407 1.4930 1.4665 -0.9212 -1.4630 -5.1747 -2.2251 0.8474 0.8540 6.6525 0.1651 -0.5706 -0.3287 3.1547 -1.4600 0.8291 2.5923 2.2733 + 3.8347 2.4921 1.8361 2.4264 0.2839 -2.7167 0.2831 -0.5469 -0.6398 0.3108 1.0194 -2.1389 -0.8456 -4.7666 -2.5049 1.2075 -5.6326 1.3761 3.1197 1.6020 + -3.7739 -1.8529 0.6063 -0.8541 -1.6370 3.6233 0.8975 1.9643 3.5106 -0.3623 -2.4744 -0.7625 -0.7853 -1.5705 0.2237 -0.6207 0.0761 -0.4742 1.5632 2.7029 + 1.1570 0.8704 1.6827 1.2654 -0.5848 -2.6900 -2.6615 -0.9589 -1.6641 -2.7103 -1.4381 -0.4901 1.8045 -1.5216 -1.1394 5.0021 4.1235 1.5550 -3.7877 2.1859 + 2.5420 1.6423 0.7395 0.8846 0.9016 2.7752 3.3824 2.5574 0.4625 -2.0442 -1.8686 -0.1860 -1.7933 -5.0038 -3.5773 -1.2917 -2.0519 -1.8556 1.0146 2.7701 + -4.4081 -3.4569 -0.8021 0.2773 2.5574 2.3862 1.3118 0.1408 0.6688 1.9053 -1.5497 -0.5855 1.2457 -0.5521 0.9630 -2.2470 -2.8924 -3.7430 6.1844 2.5961 + 0.4138 -4.3685 -4.3743 3.3166 1.9814 -1.9703 -1.1246 -1.8788 1.8555 2.5293 -0.6354 0.3032 3.9855 0.4439 -1.3412 -2.6733 1.5434 2.8406 -1.3900 0.5430 + -0.9949 0.7752 0.5153 -0.3382 0.7590 -0.3806 0.6362 -0.0446 0.6992 -2.3407 -2.2180 -0.8794 1.9075 1.9883 2.6403 1.4665 1.1384 1.9497 -0.4373 -6.8420 + -0.3690 1.5979 3.6520 2.5947 0.9915 -0.4587 -1.5761 -1.3889 -0.8595 -0.0002 0.3336 2.0392 1.9215 -1.5962 -2.1409 -2.1868 -2.0225 -6.9604 4.1862 2.2427 + 0.7081 1.2472 1.2274 -0.7827 -1.3963 0.1531 1.0164 1.1220 1.4236 4.7449 4.1970 -1.6566 1.4602 -0.4324 -5.0812 -4.6776 -3.2034 0.2020 -0.8325 0.5609 + -0.8996 -1.1981 -0.4982 -3.3678 -3.1656 -0.4840 -1.6889 1.4162 1.8691 1.8944 0.6984 2.1971 0.7659 -0.3399 -1.0540 -1.9648 4.8986 2.2357 -0.4350 -0.8795 + -3.0303 -1.1024 -3.6351 1.8563 2.2581 0.9526 -1.3180 1.0520 0.9676 1.4472 -0.2536 1.6459 0.5539 2.7964 -2.3045 3.1405 -0.8848 -0.5008 -4.0553 0.4143 + -2.0566 0.3509 1.5804 -0.1468 -1.2009 -5.1236 -1.6316 -0.6083 -0.2262 -3.8727 -1.4106 4.1461 2.8353 5.5841 2.0344 -1.3445 -0.2669 1.6597 0.4425 -0.7448 + 0.4237 5.5027 3.4466 -0.9733 1.1101 0.3187 0.4016 -0.8934 -4.1773 1.2529 -1.0141 1.7716 -1.4207 2.0071 -6.7629 -1.4260 -0.8769 -1.9766 2.0620 1.2241 + 0.5250 0.4342 -1.3517 -2.8754 -3.0586 0.6098 2.2679 1.4929 1.4608 3.1011 1.5060 -4.8013 -7.5268 -0.6504 -0.5030 2.7780 2.8557 1.0462 3.4571 -0.7675 + 3.5730 1.8714 -0.1581 -1.7722 -0.3433 -2.7056 -3.0806 -1.9100 -3.1355 1.0548 -1.9906 0.4699 0.0873 2.5566 -0.1726 -0.8702 2.1464 4.3968 5.0995 -5.1171 + -0.6968 -1.4896 -0.0495 0.8149 1.4216 -0.0327 -1.7535 -2.2313 -0.3210 1.9568 4.8784 -1.9324 -1.8058 -2.6431 -3.7316 0.3685 1.1306 4.9893 -0.2577 1.3848 + -1.4341 -1.1497 -1.8056 0.1413 2.5710 2.9390 0.7055 -0.4196 -0.2614 0.1608 -0.6195 -0.3637 4.1643 0.3576 0.0984 2.2749 0.4728 -7.3150 -0.1921 -0.3248 + -4.2895 -7.0396 -4.8802 -1.5844 1.4442 1.8886 0.5829 0.1608 -2.6352 -1.0632 0.4985 3.2097 6.3270 9.0622 8.0546 -0.4311 2.1200 -2.0642 -2.9293 -6.4319 + -2.8918 -0.9105 -1.1049 -1.3358 0.0333 -0.4429 1.1140 3.2177 -0.2479 -0.9423 2.0518 -3.4204 -3.3752 -1.5080 4.5184 3.5104 0.8370 0.3279 4.1906 -3.6215 + 1.1012 2.8300 4.9338 4.9135 -1.4413 -4.6933 -2.9852 -2.2104 -2.0709 -0.2446 -1.7323 0.4460 -0.3491 0.7293 1.2549 1.5520 -1.6591 -0.0263 -1.3091 0.9607 + -3.8105 -2.2705 -0.4801 0.0030 -1.0835 -0.8967 -1.8480 4.3428 2.2775 1.1261 1.5948 4.4091 3.5564 -2.1928 -2.8051 -1.2385 -1.6399 -0.9968 0.5731 1.3796 + 4.5581 4.2833 0.3675 -0.5438 1.9400 3.0816 0.3261 -0.8096 -2.6679 -2.1086 -0.8131 -4.9186 -3.6340 5.7405 0.0185 0.6308 2.5276 -4.0355 -1.8846 -2.0583 + -1.2863 -0.2640 -0.1222 1.8197 -0.8215 -1.4173 6.3047 -1.3136 2.0735 -0.1627 3.0262 1.5599 -2.3044 -2.9292 -2.1284 -0.0060 -0.2974 -0.4468 0.2977 -1.5818 + -0.3043 -4.9833 -4.4641 1.6692 5.7638 4.6547 3.7525 -0.9610 -3.9550 -2.2488 0.7885 4.2621 3.6322 2.1375 -6.9698 1.9153 2.5541 -3.4886 -0.8469 -2.9081 + 1.6869 -2.2603 -5.3537 -1.9240 -2.3796 2.8412 5.8922 -3.3838 0.7866 3.3273 0.7220 4.1493 -2.8075 1.2195 -4.1220 2.7912 5.5751 -0.9361 -3.7960 -2.0281 + 1.8743 1.5687 0.9347 -0.0119 5.1974 -0.9505 -1.5819 -0.0387 -0.2355 2.4835 -2.7180 -2.1816 -1.0347 -1.5606 -1.4552 0.4355 -1.6713 -3.1551 -0.2146 4.3156 + -0.5064 0.6473 1.6157 0.4031 -0.7786 0.4664 2.3609 -0.8533 -2.7426 0.0584 3.6047 -1.3728 0.0256 -2.0089 0.7575 -3.1106 -1.7839 0.9710 1.5709 0.6757 + -0.1854 -0.4792 0.2327 0.5721 1.3762 0.9344 1.6367 0.2158 0.6455 0.9744 -3.1471 -5.2734 -4.3577 3.1646 3.1365 2.2803 1.2303 -1.9960 -1.5643 0.6037 + 1.5540 2.1016 2.3825 0.8004 -2.0847 -2.7548 -1.5073 0.1971 -0.2707 -0.7690 -1.8324 -0.6385 -4.5361 -6.8801 5.4599 2.6660 1.1252 2.2850 1.3862 1.3159 + -2.3092 8.5984 0.5061 -0.6741 -2.4670 3.2934 -0.6680 2.0327 0.6889 -1.8602 -0.9325 -1.2001 -4.3458 -2.5628 0.6948 -1.1889 0.4479 2.5950 1.2931 -1.9416 + 0.8421 1.5717 0.5751 0.5951 0.4783 -2.2142 0.3553 6.0828 3.0287 -2.3343 -3.2264 -0.7759 -2.0090 -0.3873 -2.4778 0.6768 -3.4990 -0.8957 4.2903 -0.6766 + -0.6942 8.6603 -5.4134 -0.8727 -0.3504 -3.3092 -0.5586 -0.2913 2.8905 -3.0583 -2.9724 -1.7470 3.3250 -1.1022 -4.4193 7.6704 0.5149 -0.7173 -3.6000 6.0453 + 0.6802 1.0947 1.2451 3.8611 4.5266 1.8951 0.7625 6.2260 2.5223 4.8966 1.8380 -0.3753 1.3861 -7.5361 -6.8810 -3.7307 -4.9193 -2.5727 -4.5778 -0.3414 + -1.4648 -1.9631 -1.4302 3.2813 2.7021 -1.3306 -3.5822 -3.4123 -2.6251 -2.5540 -2.9830 1.7868 1.1612 1.7944 0.6471 3.7619 3.5844 -0.4360 2.9666 0.0957 + -2.6065 -0.4815 3.7667 3.2609 1.4317 5.8806 0.0973 -3.3441 -3.2874 -4.9485 -1.6589 0.7537 0.3424 0.9215 3.8135 -4.2041 -1.8751 -0.8917 1.0067 2.0227 + 4.0705 -1.6316 -3.7042 -1.3612 1.3654 1.6949 -0.0461 -0.4280 2.9316 0.2615 -3.3312 0.4341 1.2323 -0.8543 -0.8620 -4.8579 -6.1758 3.1382 4.9340 3.1899 + -4.1097 -4.1313 -2.7947 -1.2657 -0.6757 0.0158 -0.2664 -0.7288 -2.8256 -1.9407 0.4965 2.0938 4.2596 1.7443 2.0920 3.1468 3.6217 1.9383 0.0884 -0.7586 + -0.5474 3.7117 4.4423 -1.1991 -3.2034 0.2008 -1.1999 -0.3645 -0.3658 -1.5068 4.3945 -0.5362 -1.4209 -0.9138 -0.0750 -0.9590 3.3133 2.7513 -7.0608 0.5385 + -0.2792 1.0180 0.1758 4.6409 0.9990 0.8572 -2.2212 -4.3593 1.0210 5.0992 3.1964 1.4429 -1.7425 -0.9214 -2.3245 -1.3975 -6.8773 2.8027 -1.1862 0.0560 + 1.7064 0.3215 -0.2518 0.0527 -2.5377 -4.4163 -3.0416 -0.1822 -1.1887 -2.9410 0.6761 3.4948 1.6101 1.2626 0.2612 5.6220 -3.9114 -1.0915 4.1888 0.3661 + -1.7866 -1.1389 -0.0309 -0.9349 0.3853 1.9195 0.2339 0.3886 0.9745 1.4208 2.5313 4.3943 -4.6360 -2.5445 -2.1898 -2.5330 -0.3527 4.7621 0.5928 -1.4558 + 7.8057 -3.8468 0.8827 0.8768 -4.7631 -5.1731 0.0664 5.3199 -1.7890 -4.3428 1.9966 2.9221 -4.5512 5.1760 0.5820 -0.2561 -0.2887 0.6505 -0.8654 -0.4024 + -2.5780 -0.0834 0.1440 -1.6096 -4.1370 -4.8240 -1.6968 2.0832 4.4015 2.3414 0.0326 -1.7738 3.0088 2.5338 2.2405 0.7822 -3.4270 2.3235 0.3274 -0.0892 + 2.1843 2.5930 1.3745 1.7373 2.8715 2.7285 -1.1274 -0.1783 0.9497 1.0004 -0.2974 -0.2919 0.6463 0.2228 -1.5085 -5.8708 -3.6910 -0.8536 -2.5539 0.0647 + -1.6643 -0.8616 0.2098 2.2486 4.6647 3.8540 2.3834 1.3656 -0.2611 -0.7523 -0.2703 2.8630 1.1570 -1.6263 -4.3844 -3.5346 -0.0484 -0.8649 -4.9645 0.4867 + 0.6824 1.0939 0.6691 0.3291 -0.2396 -0.9714 -0.9487 0.4056 -0.8422 -1.0662 -0.8121 -1.8756 1.8363 1.0681 3.7568 2.7493 -2.2790 1.4171 -4.9986 0.0258 + -2.0461 -1.9677 -1.8134 -2.6831 -3.0621 -1.6874 2.2873 0.6491 1.7878 1.1808 1.5028 -1.1540 -1.2923 -0.0603 -3.5107 6.4917 4.0814 1.4288 0.0396 -0.1721 + 1.7926 0.6400 0.0107 -3.4114 12.2384 -4.2391 -4.1672 -5.5139 -1.6966 5.3015 -0.9447 -4.0014 3.1093 5.2076 5.6201 2.3962 -5.3615 -1.8057 -0.2628 -4.9121 + 1.2301 -0.2653 0.0535 -2.1294 -3.7763 -2.5405 -1.3165 1.3892 1.1754 1.8095 2.3931 -0.5310 -0.8291 0.5926 -0.2725 -7.2218 1.8619 3.8534 3.4226 1.1011 + -4.1789 -3.5276 -0.8324 -0.4176 -2.4000 0.0369 0.9853 5.4189 -1.8625 4.5416 -0.0534 -2.2531 -1.8390 3.0263 1.3992 -0.9141 -0.2291 0.6856 2.4454 -0.0313 + -6.4975 -4.6128 -3.3675 -4.8986 -0.8354 2.3584 -0.6088 4.1352 0.6068 0.7211 0.2750 -2.0557 0.4476 2.7831 4.6078 -0.4014 5.9849 2.1061 1.2312 -1.9795 + 1.3230 1.1384 1.2773 1.7150 -0.7509 -3.8269 -1.1290 -0.1851 -3.0673 2.4551 -1.8006 -0.5768 2.5367 -0.4358 1.0236 2.8956 4.5161 -0.4242 -3.2309 -3.4534 + -0.3567 2.4123 4.0459 3.3988 2.0862 -2.1774 -5.1260 -1.0930 -2.2588 -0.1938 0.5021 -0.2723 1.0175 -2.6722 0.0196 -1.3546 -1.6702 0.8080 0.6509 2.2336 + -3.1316 -2.5501 -0.7668 1.9764 1.8647 -0.0801 0.9053 0.9563 -1.0947 0.3992 -1.9982 2.2428 2.0122 -5.4193 -2.6261 -0.7274 0.7121 1.7109 3.9486 1.6660 + -7.9949 4.0953 3.7255 -1.4546 8.0933 1.7853 -4.2627 4.4208 9.6075 -2.0281 -0.5418 -3.5660 -1.9219 -6.8006 -1.4426 -1.8720 6.0536 -6.8174 0.7937 0.1276 + -1.9787 -1.0115 0.4548 -0.6009 1.0489 -0.3883 -3.8168 3.5539 1.8044 -0.8020 2.2377 4.0130 2.5264 2.9341 2.9402 3.1940 -12.1756 -4.5827 0.7140 -0.0649 + -2.6937 -0.9969 0.6136 -0.2092 0.1112 0.1733 0.0276 0.6804 -4.1810 0.4835 3.1126 -0.8365 -1.6005 3.1133 -1.3297 -0.4657 2.8302 2.7130 -2.7204 1.1750 + -4.2305 -1.0868 0.5304 -0.1415 -1.2124 -0.8981 -0.8790 -0.8763 -0.9777 1.0148 4.1145 2.1714 1.2310 -1.6938 -1.4429 1.2355 6.6877 0.2382 -3.2655 -0.5189 + -2.1503 -3.4325 -3.4567 -1.0918 0.5993 0.3527 0.3437 0.2288 0.7821 1.0173 2.2607 -0.9887 -0.3595 4.4457 3.7070 1.5475 -3.7173 0.7682 -0.5101 -0.3462 + -3.7019 -3.2897 -0.3993 1.1225 4.7873 3.2500 -1.8347 -2.0699 0.0727 1.2966 -0.1512 1.4478 -2.4263 -0.3987 -2.4159 -3.3225 2.8445 0.7735 0.8954 3.5197 + 0.0807 -1.1966 -2.9464 0.8465 1.6234 1.1215 1.2824 3.7187 2.3234 -3.7329 -7.3924 -3.2192 -4.4371 -4.8564 3.1927 2.3654 4.5154 -1.0330 4.4531 3.2910 + 0.0329 2.1961 1.8627 0.5090 -2.3566 -3.1635 -1.4865 -3.4766 -3.4834 -4.5095 -2.4040 -5.5450 7.4389 3.1752 2.6905 4.3345 1.8695 -0.0444 -0.0458 2.4056 + -4.2525 -4.2615 -2.8448 -1.4174 -1.4188 -1.0941 0.0321 2.7304 1.6246 3.7714 3.6887 2.3979 1.9374 0.7696 -7.0469 0.1811 3.9202 4.8839 -3.2038 -0.3977 + -0.4109 -0.9615 -1.1887 -1.3425 -1.0669 -2.7829 -2.9395 1.2890 1.6984 -0.5601 1.6775 -0.5469 -0.8102 -0.2298 -0.7565 0.3451 3.1792 2.2226 4.5535 -1.3689 + -5.7264 -3.6531 -1.3521 0.1463 1.7110 3.1890 0.7838 -1.0176 -0.2195 1.4384 0.0207 -0.4968 -1.0491 0.1749 1.0739 2.0378 1.3580 1.2360 0.4429 -0.0980 + 0.7773 -0.8979 -1.2165 -1.9337 -2.9157 -4.0101 -0.3148 -4.6460 -4.2945 4.1770 5.5969 1.4549 3.5448 1.4079 -0.8343 -3.2017 5.5239 2.2268 -0.3838 -0.0607 + -0.6985 -0.6307 2.4635 -0.5381 -0.2883 3.4018 2.1088 2.9180 -0.5123 -0.9613 0.0579 -4.3385 -3.8027 1.0743 5.0578 -1.8280 -2.2439 -4.7171 0.9386 2.5388 + -4.5218 0.1558 2.8380 2.3948 -1.9436 0.6339 -0.7954 1.9788 1.5836 1.1696 -4.5526 -0.5640 1.4447 7.0584 -6.8023 -4.5393 -6.0449 -0.5031 6.1354 4.8739 + 0.3624 -1.2047 -2.0776 -1.5816 -0.7523 -0.4259 1.9866 -0.1702 -0.4710 -1.9514 -1.5113 -0.2099 2.7070 3.8409 4.1635 -1.6517 0.8031 3.1180 -4.9637 -0.0100 + 3.3248 2.1375 1.3785 0.2103 3.0519 1.4244 0.2968 -0.3016 -1.2728 0.9142 0.2763 0.9396 2.3345 -1.6742 -3.9431 -3.4421 -2.5066 -1.7463 1.1359 -2.5381 + 7.3832 7.8862 -6.4414 -8.9767 0.1372 -3.3099 3.3247 -2.2516 -2.6663 1.5419 7.2572 -0.6762 -1.4552 3.0048 6.9210 -8.5959 -2.6649 2.5301 -0.7893 -2.1588 + 1.3303 0.1631 -2.4438 -1.2379 0.9953 2.7203 1.9038 1.2786 0.3887 2.8669 0.3680 -0.1846 5.6338 2.1238 -1.0482 -5.2051 -1.0787 -7.2281 -1.5184 0.1722 + 0.1645 -0.9895 -2.0311 -3.1149 -3.2980 -2.1249 2.0221 2.1048 -0.3058 -1.0676 -2.5289 -1.4215 -1.7517 2.9140 4.1244 -0.6494 2.6877 3.2611 2.5839 -0.5792 + -0.4639 -1.9119 -0.6903 1.0816 1.7980 1.1866 0.4220 1.5316 0.8944 -2.9810 5.6782 3.5367 -0.9955 2.4778 -1.9477 -3.1693 -0.0340 -1.9442 -1.8186 -2.6506 + -3.9601 -3.1838 -1.3333 -0.9936 0.4708 1.8640 0.2776 -3.5639 -1.8523 3.8979 6.3274 1.9935 2.4867 -0.2835 -0.1329 -0.9778 1.4936 2.4315 0.5084 -5.4702 + -1.9007 -8.9624 0.7258 -2.6244 1.8683 0.7413 8.1690 -2.3570 -4.2143 -5.3821 5.3979 -0.3396 -0.0209 2.4866 -1.7903 8.5769 -2.6396 -4.5135 0.4288 6.3503 + 2.3682 1.2735 1.0581 0.7198 -1.3884 -1.1783 2.7862 -0.3150 -4.4216 1.0457 0.8020 0.2322 -1.8255 0.9933 1.5522 4.2681 -3.4105 -1.8681 -3.1691 0.4773 + 0.1022 3.5273 4.7298 1.5753 -3.6041 -2.4060 0.8414 1.2204 1.0785 1.4517 0.9533 1.0682 -0.0095 -1.2482 -3.7150 -1.4924 0.0586 0.2151 -3.5086 -0.8381 + 2.6097 1.3046 0.1797 -0.8433 -0.8002 -0.6737 -0.7817 -0.0181 -1.8564 -0.0021 1.7429 2.1363 2.4019 0.8520 -1.2013 -2.3776 0.1614 -1.6535 0.2922 -1.4730 + -1.1555 -1.9989 -3.7971 -3.5419 -1.7702 5.6208 1.6756 -3.4769 -2.2174 -0.5921 -2.9465 2.4449 3.2181 2.5732 0.5741 1.4008 -1.6104 2.6683 4.0017 -1.0706 + 2.6808 2.4971 2.2595 2.6039 2.5012 2.7248 0.3061 -0.5761 -0.0415 -2.4607 -1.2162 -0.0800 -2.7145 -3.3777 0.3468 1.3821 -2.9010 -0.5334 -2.3262 -1.0750 + -1.4573 -0.7869 0.2356 -0.1795 -1.7997 -2.4756 -0.7083 -1.2917 -0.2409 1.8121 2.3854 -0.0780 -2.6742 0.8926 3.1169 2.4329 -3.2335 1.5184 1.6752 0.8566 + 1.3578 1.5299 1.0786 -1.5960 -3.3648 -1.6673 1.3592 5.7139 -0.3364 -0.8154 -1.0911 0.3285 1.2167 -6.5169 3.5759 0.3841 -3.4189 2.2520 -0.3564 0.3665 + -3.9427 -4.1692 -3.9599 -2.7914 -2.7852 0.8501 2.1268 3.1929 2.9997 0.9798 3.7115 2.7044 0.8023 -1.3597 -0.1213 1.8505 0.8537 2.3570 0.4425 -3.7419 + 1.1259 1.7278 1.7181 1.0824 0.9378 2.2855 -0.4426 -2.0998 0.2868 -2.3258 -2.4774 -3.5030 -2.1920 -0.0403 0.0689 -2.1823 -1.7516 0.3348 2.6371 4.8097 + 2.6282 3.1949 1.4763 -1.8168 -2.3026 -0.1157 -0.0177 1.6877 0.8500 0.1002 -0.5211 1.2286 1.5164 -0.6411 -0.9348 -3.1872 0.1863 -3.1762 -3.7899 3.6345 + 0.6239 1.6179 1.2014 0.2608 -1.9920 4.7736 2.9884 -1.6687 -1.5700 -3.2904 2.3265 0.1217 -0.6529 1.1537 -1.3430 -3.2660 -0.7427 -0.3946 -0.8553 0.7078 + -2.5785 3.3274 0.7827 -1.1641 0.3099 2.0930 -3.8923 -2.1233 -0.2174 -1.0352 2.3827 3.2008 -1.3061 -1.3553 2.0138 -4.8137 2.2926 -0.4492 0.2262 2.3061 + 0.7030 -0.6796 0.6702 1.2330 0.3286 -1.1249 -0.2281 0.9008 -0.4257 1.5252 0.1413 3.8708 -2.7125 -0.1048 -1.3046 -2.6469 -1.7645 -0.4236 2.6448 -0.6022 + -2.0396 0.9147 3.7884 2.4844 -0.2561 -2.4529 1.8969 -0.1479 0.6950 -1.2549 -4.9008 -1.2459 0.9313 0.6906 5.2636 -1.1277 -0.2394 -2.2895 -2.5856 1.8753 + 1.6780 -1.6532 -2.7599 -2.2450 0.5197 -1.6003 4.4426 1.0934 -0.3109 0.9191 -3.4242 1.3304 -1.5208 -0.9853 -0.2434 3.9418 0.4425 -2.2543 4.6335 -2.0037 + 2.2658 -0.6139 -1.3935 -0.0563 -2.9550 -1.9056 3.4601 -0.3817 -1.6475 -0.2910 -0.5503 1.7727 0.0114 2.6384 2.8574 0.5346 -5.4829 -2.6161 0.9580 3.3952 + -2.9553 0.0039 3.9564 2.2087 -0.9348 -1.5953 -1.3780 0.1552 -2.1548 0.7917 1.8242 1.6997 -1.8826 -0.8677 -0.7876 -0.2152 2.3842 2.1467 1.7116 -4.1110 + 0.7023 1.9303 1.0064 0.0165 5.4286 -1.1464 -1.0459 -2.0088 -1.2634 -2.1806 -0.6159 0.3372 3.4050 -1.1188 -2.8596 -2.3910 -0.5550 5.4226 -1.0697 -1.9937 + -0.8683 0.0341 1.1306 -1.3868 -1.9833 2.9612 -0.7025 0.9705 -3.1777 4.1388 0.7353 0.3664 2.0843 0.2998 -0.4050 -1.1895 3.2137 -5.0324 1.1351 -2.3244 + -1.0092 0.5101 2.3070 2.1852 1.5304 -1.7001 1.6095 -1.4570 -3.9762 -1.6422 -0.2532 1.3474 0.8974 0.9819 -2.2295 4.7058 -2.0380 3.1038 -2.5420 -2.3311 + 1.9713 1.0803 -1.0686 -1.2321 0.3041 -0.5899 -1.6032 -0.6543 -2.1903 -2.1676 0.3844 0.2905 -0.5787 -1.1285 -3.3703 -0.5637 0.3705 2.2696 8.3763 0.1004 + -2.3313 3.6108 -3.7738 2.3534 -6.3897 3.9802 2.8098 6.2413 2.5170 5.1260 2.4541 -1.7202 -4.9921 -5.7179 -3.3204 5.3271 2.0124 -5.7657 0.7907 -3.2116 + 0.3230 1.0311 1.3660 0.9706 2.0785 2.0724 -0.0151 -0.8301 -1.1195 -2.8044 -0.9819 0.0417 0.0944 -1.2077 -2.2323 4.1593 1.4207 -2.7654 -0.5102 -1.0909 + 1.0182 0.5812 0.3232 1.7040 1.6371 0.0882 0.7883 2.0623 -2.4549 -1.7632 -0.0828 0.1245 -1.0882 -0.0487 -2.0254 -0.8118 -5.9132 2.5533 0.4880 2.8199 + -2.1755 -1.4110 0.7926 3.1903 3.2045 1.4005 2.2246 0.4995 1.4795 1.0003 1.4155 -1.8108 -1.7649 -2.0289 -4.9177 1.9399 0.4644 -0.6846 -2.6827 -0.1356 + -2.3372 -0.8774 1.8295 2.5713 0.4237 -1.6200 0.7250 1.2049 -2.5557 -1.7837 -2.0535 1.8608 2.0142 1.1559 0.4140 -2.2055 2.6316 -1.0207 -0.4407 0.0634 + -6.4760 2.3566 6.2881 1.1780 2.2768 0.5492 3.6691 1.5956 1.5393 0.8045 -2.4474 -1.1396 -3.0192 -2.8013 2.1788 0.9584 -4.0593 -1.3318 -0.6033 -1.5164 + -0.2224 3.1469 4.1918 -1.5853 -2.9401 2.4424 -2.0556 -1.6902 1.4657 -1.4987 -4.5783 -3.9175 1.8499 2.5001 -2.9926 -3.1367 4.3814 2.8761 -0.3135 2.0766 + 0.2838 0.7448 1.5373 1.7127 1.9184 1.9954 1.4552 0.6636 -0.0775 -1.4076 -2.7023 -2.4765 -6.0615 -4.2297 -2.8214 4.4402 0.5975 1.2302 2.2798 0.9178 + 0.1873 0.8058 1.4948 0.4584 -0.6762 -2.1053 -0.4098 -0.9510 -0.4347 -0.3909 -1.0508 -2.5837 -1.0389 -4.2899 -4.0647 3.8453 2.2675 2.8481 4.5950 1.4936 + 6.4165 4.7690 2.1643 -0.5306 -1.7418 -1.1821 0.4655 2.4797 -1.0005 -2.7835 0.6462 1.0540 0.1648 -0.2195 -1.2133 -1.6876 -0.2896 -1.1843 -4.2375 -2.0895 + 0.6591 -2.4247 -3.5305 -2.0684 0.7993 0.5286 -1.0223 -0.9537 0.6266 1.4075 1.4620 1.6652 1.3324 -0.3799 1.6047 -0.4030 -1.4183 -0.7574 3.5079 -0.6351 + -0.7402 -0.5022 -0.0104 -0.1501 0.0126 -0.8303 -0.6338 0.0643 0.7573 4.3586 2.2234 -0.7379 3.8453 0.8151 2.8221 -1.4249 -1.4011 -3.5524 -6.4818 1.5666 + 1.2970 2.6835 1.2613 -1.8292 -0.9390 -1.6773 -1.9287 1.2477 1.3854 -1.9138 -1.0744 1.6338 -4.8418 -0.5580 -1.2900 5.2745 -2.7458 2.6939 -0.9625 2.2835 + 1.8861 3.1363 4.0321 1.7435 0.5233 -0.7855 2.0137 0.8065 1.2174 -4.0074 0.5860 -1.0339 -6.4815 -6.1251 1.1641 -3.9644 -6.3895 7.8222 2.0846 1.7715 + 3.9399 2.2907 1.6049 0.7588 -0.5727 -0.4203 1.1669 0.6185 -0.3417 1.2484 1.5946 1.7091 -1.8086 -4.7596 -2.8399 -3.9325 -2.0296 -0.6780 -0.7509 3.2019 + -0.3222 0.6190 2.2698 6.3269 5.8198 2.6992 0.0601 -0.5335 -1.7361 -3.6667 0.2231 -2.3194 -2.0166 2.4960 0.1420 -3.4765 -2.9842 -0.3195 -1.1974 -2.0840 + 1.2403 -2.3646 -2.0313 0.7252 3.2474 2.8194 3.1981 0.9009 1.1286 -0.9170 -2.4531 -2.4020 1.6229 2.3317 -1.4971 0.7586 -3.2903 -2.1223 -1.2864 0.3911 + 2.1547 -0.4814 -1.6208 -0.2568 3.7660 2.5927 -0.5335 0.5221 2.1027 -1.7193 -2.1878 -1.5973 0.4487 -3.0208 -3.0695 -0.2839 1.2100 -4.2182 4.8800 1.3123 + -0.8216 0.0172 1.0117 1.8195 2.2767 0.0322 -4.7072 -3.7244 0.2876 1.2946 -1.1268 -2.0514 -0.3229 1.5642 2.8282 1.4525 -0.2405 0.3745 -0.8299 0.8658 + -0.5885 -0.7711 -0.1566 0.2456 -1.1305 -2.1400 -1.5832 -2.7023 2.6573 2.8982 -1.9439 -1.4435 3.2616 3.0544 -1.0646 -0.2393 0.2808 -0.6774 -3.3509 5.3938 + -2.1609 4.7541 2.6519 2.9104 -0.9771 -3.4464 1.3102 4.9024 3.0997 0.1198 -0.6878 -5.0516 -2.6241 -0.1390 0.3260 -3.7625 -4.6033 5.7644 -2.7192 0.3330 + -0.0774 0.0212 1.7356 2.6966 3.8703 -1.2640 -2.2040 -3.8688 -2.8745 -0.3830 -1.2433 2.7247 1.1808 0.5913 3.3839 -2.9426 0.1962 -0.6047 -3.1975 2.2593 + -1.7694 -0.8337 -1.4857 1.6357 3.0084 1.4757 0.7496 0.4982 -0.8638 1.0294 3.8151 2.5480 -0.4944 -5.1598 -4.1575 1.6819 -0.9028 -3.0629 2.9081 -0.6201 + -4.1737 -1.1372 0.4218 -0.3980 -0.2873 -2.0904 -1.4241 1.1799 4.8192 5.5695 2.1240 -1.9634 -0.1503 -0.2208 -2.6623 -1.2140 1.5287 0.1773 -0.4832 0.3844 + 1.1759 3.6352 3.0816 -1.1382 -0.8341 -1.2549 1.7627 -0.2610 -1.7582 -4.6767 -1.9887 0.8806 -0.2903 -2.9331 -3.3697 0.3291 -2.5313 6.3991 2.6926 1.0793 + 3.1054 0.5446 -2.7707 -3.1154 -2.4354 -2.1091 -1.9215 1.5263 -0.5089 -2.1954 -3.0602 -1.7502 2.0283 3.0940 3.1639 6.0315 0.1168 -2.3219 2.2755 0.3024 + 1.4017 0.2037 -0.1188 0.3630 -1.7809 1.2589 -0.0416 0.1426 -0.2900 -0.0669 -0.9365 -1.7637 -4.6543 4.5857 0.7173 -1.2893 0.7992 1.8632 0.4734 -0.8667 + -0.6645 0.3054 -0.1583 0.3900 0.1223 1.1996 4.2148 1.7843 2.7706 0.9297 -1.0663 1.2711 -0.1675 -0.5861 -2.5452 -2.9107 1.2640 0.2394 -4.6672 -1.7254 + 1.3908 0.5115 -0.8577 0.3878 0.7710 1.2838 -1.2112 -1.2930 -1.9359 -2.3893 -2.5796 1.2692 3.1933 -0.2748 0.2489 3.4206 -5.3967 -3.2312 2.6326 4.0600 + -3.1151 -2.4768 -1.4409 0.0820 -0.0650 0.8542 2.7545 0.8481 2.7775 3.2925 -1.1392 -0.5600 5.6459 -1.5505 0.7937 -0.2372 -3.8294 -1.7699 -1.1681 0.3038 + -1.4631 -1.5744 -1.0602 1.2727 5.2755 0.7411 2.6424 0.9111 -1.5443 -0.8217 -2.4580 -1.9627 -0.3229 -0.7005 -0.1842 1.4410 1.1190 -0.0388 -1.7254 0.4532 + 2.6735 -0.1320 -2.0731 -1.2667 -0.0059 0.4063 1.1045 -0.6500 0.2919 -0.2343 -0.1432 0.5161 -1.3203 -1.9223 -1.8439 -0.3541 2.5902 0.7807 0.9691 0.6136 + -2.5760 -2.1039 3.3039 7.5737 4.8510 -1.9280 1.3509 -0.0624 1.3149 2.3856 -2.8836 1.6777 1.6919 -0.2315 2.0672 -1.6292 -7.7877 -7.8864 -2.4230 3.2949 + 0.1825 1.4326 1.8802 -0.7600 -3.5028 -2.0654 -2.5905 -1.9780 -1.3931 -2.0377 2.0912 -0.7666 -1.6801 0.1901 1.3312 -0.8245 -0.8221 9.1933 2.6121 -0.4925 + 0.6596 0.5183 0.0656 0.6099 0.2170 -0.2483 0.3752 0.0528 -1.3550 -1.9590 -3.0746 -2.7901 1.7480 0.0667 -1.3253 1.8365 1.2016 0.6331 1.5502 1.2179 + 1.5180 -2.8697 -3.0225 1.1901 1.2949 1.2425 -0.2655 -1.0124 0.1504 0.9476 0.8294 0.4980 -4.6214 -0.4714 2.3140 0.5042 0.0042 0.6173 0.0250 1.1274 + 5.2946 0.9166 -1.6961 2.6183 3.7503 -0.5464 -0.4536 -2.5804 0.7239 -3.0443 -0.9745 -0.5296 -1.2153 0.2578 -4.9483 0.2574 1.6442 -1.7218 -1.0182 3.2654 + -0.3113 0.1627 0.2010 -0.6825 0.4894 0.3705 0.5406 -0.5307 2.3413 3.1334 -0.2531 0.7289 0.0127 0.8411 -0.5394 -1.5751 -4.4648 3.3442 -1.3619 -2.4473 + 0.7892 1.6007 2.2451 -0.0142 -1.8268 1.0211 1.1632 -0.4310 0.4809 0.7681 -0.3119 -3.1840 1.8621 0.7982 3.9396 5.5125 -9.0182 -7.2338 1.4720 0.3673 + 4.5691 3.1984 0.4848 -1.6299 -1.5279 -0.4613 -0.3940 -0.7641 -0.7740 -1.4705 -2.0718 -3.7739 -3.8204 -2.0882 0.9538 2.3794 3.3309 2.1292 0.9829 0.7475 + -1.7639 -2.1300 1.8133 5.4637 4.9096 0.4400 -0.2077 -3.2872 -2.8010 -3.3973 1.4612 -0.7884 -0.4468 0.3167 3.0330 3.6546 1.5554 -2.1172 -5.0158 -0.6924 + -0.9691 2.1549 0.9464 -1.8955 -2.4830 0.5229 1.0573 -0.1544 -2.7731 -1.7762 -1.2133 0.4997 -0.4040 0.0598 2.1564 0.9676 0.1749 -0.3066 1.3334 2.1020 + 0.1735 -0.6351 -2.2851 0.3979 2.1071 0.8723 -1.4327 2.7248 2.2122 -3.8366 -6.8693 2.9956 2.2340 0.2392 4.5854 0.8064 -0.4877 -1.9451 0.1604 -2.0173 + -3.0467 -2.6229 -0.6828 -1.5402 -4.5504 -0.6274 -1.5654 -1.1048 -5.0244 1.2208 4.3959 1.7152 0.8404 2.3104 3.9110 1.3725 3.6004 -1.5868 -0.0242 3.0095 + 4.6972 -2.0723 3.7478 -0.0539 -1.3604 -1.6975 -5.1051 4.5477 7.4910 0.8111 -1.5236 -2.0035 -2.3201 -1.9156 -1.8399 2.7039 1.1102 2.7618 0.1987 -8.1775 + 4.2697 2.1482 1.1807 -0.8188 -0.0158 -0.9415 -3.1934 -7.6652 -5.2761 -0.4096 0.8289 -0.6591 -0.1321 -2.2645 2.6890 3.5308 -0.1860 2.2844 2.1691 2.4613 + -2.6176 -1.9646 -0.3365 0.4490 1.7890 3.0096 1.2687 0.1913 0.7099 3.1055 2.4376 1.5156 0.2027 -3.2954 -0.8316 0.6250 2.5125 -1.9645 -4.7360 -2.0703 + 0.9801 -1.1590 -1.1869 -1.8206 -2.6697 -2.2474 -1.9247 1.3390 0.7955 3.2786 2.1796 1.2439 3.8310 0.9791 -3.7027 -2.0691 -3.3297 3.4700 4.0219 -2.0091 + -1.9305 1.1296 2.7892 3.5086 -0.4192 1.8621 -2.4767 -4.5620 -1.3151 -0.4855 0.2130 4.0896 -0.2763 2.9118 1.5789 -0.3477 -0.8200 5.6054 -7.8822 -3.1730 + 3.5183 4.1815 1.9981 -0.8261 -1.4369 -0.3881 1.0213 -3.8793 -3.6636 2.2621 1.1803 1.7727 -0.7985 -1.2902 -5.0777 -1.2307 0.3381 4.4122 -1.4815 -0.6120 + 4.0477 1.4256 -1.6604 -3.5999 -1.9136 -0.3445 0.3946 1.6694 1.2905 0.9828 0.5724 -0.1289 1.3498 1.3379 0.2067 0.3656 0.2492 -1.2128 -3.2905 -1.7416 + -2.0178 -2.6699 -1.3526 0.2496 0.4148 -0.8854 1.0823 -0.6203 1.2579 0.4148 -2.2346 -0.4015 1.4157 4.8809 6.6230 -3.5608 -1.8735 -4.5603 3.5038 0.3340 + 1.4937 -1.5420 -2.3850 3.1706 1.4707 0.1938 0.5057 3.8806 -0.0936 0.3334 0.4606 1.4472 -0.9030 -1.4318 3.5118 -5.2689 -1.4235 -1.2997 0.0053 -2.1257 + -3.6561 0.1855 0.3705 1.1645 0.2341 -0.8092 2.3980 -0.3274 -0.4576 -1.1851 -3.8496 2.0281 -3.3309 0.9466 -0.0780 1.0318 4.0737 2.6190 -0.3495 -1.0083 + -0.1238 -0.3756 -0.3626 -1.1974 -3.0280 -3.3983 -3.5184 -2.8303 -0.2464 -1.0525 0.7469 1.1667 1.9967 2.0536 5.8842 4.6720 0.6593 -0.2270 -1.2558 0.4368 + 1.4898 -0.0036 2.1872 4.7731 5.3388 2.1104 0.8610 -1.9286 -4.4764 -2.9139 -5.8875 0.1502 2.3687 -3.3444 1.8016 2.0118 0.3480 1.5855 -1.0664 -5.4053 + -0.2559 -0.0970 0.6606 -3.0637 -4.0503 -2.5522 0.2345 0.1786 -0.3244 -2.5706 1.7286 2.2086 1.6927 2.7400 1.9340 -0.1619 5.4140 3.6846 -5.1534 -2.2469 + 0.7337 0.6464 -0.7291 -0.8337 -0.3024 0.3377 1.5178 1.0116 2.5850 0.9759 -1.3970 -3.2182 -3.6906 -0.0798 3.4993 -1.9939 -5.3046 1.4115 4.7666 0.0639 + -2.9601 -0.9321 -1.3007 -4.5012 -0.6859 1.6271 0.8938 1.8188 2.7147 2.4868 2.4402 0.6577 1.2040 2.0247 0.2523 1.3499 1.0757 -5.3086 -0.2223 -2.6347 + 1.2887 2.2547 3.3766 1.8575 -1.7910 -1.7548 1.5265 2.7964 1.2240 1.9720 0.2687 1.8100 3.1328 -2.5860 -2.7821 -3.9778 -2.4086 -2.0066 -0.0746 -4.1265 + 0.8108 -0.0118 0.3510 0.2469 -0.3564 -0.0688 2.2772 2.9983 0.0220 -0.8672 -4.8310 -2.0824 0.0877 2.2501 0.0661 -8.6456 -1.6422 4.8643 2.3157 2.2152 + -2.3502 1.9923 1.6641 -2.2786 3.4633 2.6050 -3.0058 1.5172 -5.3190 -0.9994 -2.4221 0.2495 3.8898 -2.0580 1.1705 0.4058 -1.2798 2.5712 -0.5349 0.7192 + 5.2963 2.7580 0.0542 -1.8363 0.6217 3.1975 0.8761 0.6926 0.1889 -2.2049 -2.6639 -2.3949 -0.4550 0.9028 0.9417 -2.3200 -1.6049 2.2215 -3.0876 -1.1840 + 0.0332 0.6867 -0.5444 -2.6560 -2.3272 -1.9975 2.7492 3.4613 1.2531 2.2970 0.6826 1.6161 0.8081 -2.8567 -0.2510 3.1363 -4.7699 -0.8591 1.4746 -1.9362 + 0.1179 0.1304 -0.0905 -0.0885 0.5876 2.0857 -0.3875 -1.3306 -0.8957 -0.1982 0.8458 -0.0513 -2.2349 -5.5634 7.5385 3.9965 -1.0630 -1.5645 -2.1020 0.2680 + 1.5416 0.4773 -0.0338 0.6704 0.3091 -0.0982 -0.8312 -1.8586 -2.1668 -3.0698 -3.6621 -2.8717 -0.1465 2.9749 3.0473 2.3156 -0.0362 0.7605 1.1471 1.5312 + -1.4651 -1.1492 -0.6700 -0.6012 -0.1247 1.1550 -0.2106 -1.2695 -0.4411 1.1446 4.1491 2.6600 1.3124 1.6069 0.6316 -0.4851 -2.5715 -4.3867 -1.0040 1.7189 + 0.2437 0.6555 0.3411 0.8466 -1.7425 -0.1636 6.1311 0.6211 -2.7030 -1.5009 -0.1744 0.8660 1.3589 1.2490 1.1273 -2.7402 -0.0949 -1.5440 -1.8610 -0.9159 + 4.3927 3.3672 0.9009 -1.2521 0.6230 -0.5206 0.8245 -0.9087 -1.8374 0.0097 -3.1469 -2.4307 -3.0482 0.2541 1.9480 5.7092 -3.3716 -3.2953 2.6836 -0.9014 + 2.2171 0.1913 -1.6779 -0.9585 -1.3241 0.2292 1.4881 2.7969 0.2756 -3.8207 -2.4695 -0.3208 2.3024 2.5414 -0.1815 -0.2933 2.0837 0.9892 -1.0861 -2.9823 + 0.1186 0.1645 -0.3865 -0.8001 -0.3047 -2.3398 -0.6229 -0.0641 0.8491 1.7026 -1.1341 -2.0704 -0.3123 0.1814 3.8820 1.2943 0.4627 -0.5672 0.5181 -0.5712 + -0.1015 -2.3234 -2.3520 0.9949 2.2704 0.9946 0.3560 0.9113 0.1017 -0.4530 0.8520 -1.0302 0.8806 0.3674 -2.6615 -4.8900 -2.9475 1.9045 2.6392 4.4864 + 2.3941 1.7010 1.9067 0.4931 -1.4348 -2.6074 -1.1597 -1.0504 -3.0460 -2.8157 -0.6597 -0.5920 -0.3406 -1.1230 -0.8586 4.9381 2.8734 1.4518 2.5923 -2.6625 + -0.8669 1.9301 3.2551 6.1577 2.0399 2.6785 0.7380 -0.3115 4.7391 1.4868 -6.0175 -7.4317 -4.5623 -0.8590 3.8966 -0.1349 -2.5476 -0.0080 -1.4441 -2.7383 + -1.8064 0.5147 0.5800 -2.6271 -3.9359 -2.9321 -2.4785 0.6104 -1.7343 -0.3653 -0.3024 0.2350 2.3057 1.9998 2.2392 1.9124 3.0438 -0.2241 5.1672 -2.2020 + 1.8580 3.3342 3.0400 1.0670 0.2251 0.5480 1.7906 0.7871 1.2850 -0.3795 -2.0150 -2.3713 0.5611 0.5214 -0.8547 0.0171 -1.8463 -2.7006 -1.7828 -3.0844 + 1.4841 -0.8100 -2.4242 -1.8509 -0.9746 -1.0553 4.8924 1.3818 -1.8605 -4.3708 -2.0142 6.4457 0.9506 -0.5924 0.1104 2.4175 -0.6754 -0.8459 -0.1554 -0.0530 + -0.0877 -0.9877 -1.7358 0.3853 1.1022 1.2975 4.3189 -1.9877 -3.1833 1.0392 0.1796 4.1158 1.4650 -1.6177 1.6123 -4.1615 -3.2584 1.2187 -4.3136 4.5989 + 0.4487 -0.1107 -2.0381 -0.2337 2.5745 2.8339 -0.0417 1.4413 -1.4483 -1.1675 -6.2515 -6.9360 -3.2717 4.8492 0.9246 -0.9750 4.1724 1.7821 1.3820 2.0655 + 0.1081 -0.6949 0.1665 0.6685 0.8790 0.7273 0.1766 -0.0005 -0.2218 -0.4294 0.4489 -0.4843 0.2008 2.1975 4.5024 -1.0296 -1.2026 -2.5547 -1.0944 -2.3636 + 2.3396 2.1543 2.2429 4.7578 0.8390 -0.8895 4.6297 0.4985 -2.3653 2.1787 -1.0612 -0.8953 -6.2919 0.5546 -0.4272 -0.9670 -1.9781 -0.4692 -5.5295 0.6795 + 0.1530 -2.1926 2.1973 4.5005 -1.3453 1.3286 -2.0310 1.0783 -1.3510 -0.7983 0.6783 -3.4857 5.3977 -3.6561 -3.5986 6.0882 0.1428 -0.9697 3.0219 -5.1583 + -2.6086 -0.0766 2.7222 2.0552 2.4096 3.0319 1.0596 -0.1283 -0.8104 -0.2732 -1.4259 -4.0229 -1.4469 -1.6716 -1.1861 -0.9216 0.6780 -0.0004 2.0118 0.6041 + 1.8333 3.1078 -1.8097 1.1817 3.7643 0.5185 1.9828 -0.3454 1.2321 -1.0494 -6.2996 3.9399 -4.6043 2.7296 -2.2906 -1.7821 -0.5503 -0.1687 1.5615 -2.9514 + -1.9822 -1.7870 -2.0807 -0.6471 1.7376 -0.7108 -0.9897 0.1273 -1.5435 -3.4080 1.1979 3.2003 1.0189 -0.9731 -1.0790 -1.9655 3.5511 1.2692 3.4593 1.6049 + 1.8097 0.7952 2.3044 2.0422 0.0385 -1.4890 -2.6817 -2.4115 -2.0814 -4.7349 1.3168 5.2099 2.0691 0.2209 -0.3967 -1.3910 -0.0825 -1.3970 -1.3074 2.1664 + -0.6317 -0.6961 -1.7818 1.7212 1.8896 0.7627 6.4133 0.0239 -2.0812 -0.6340 -0.8745 -0.8436 -3.5167 -3.0992 -0.4403 -5.0217 5.7819 4.7221 -2.9383 1.2443 + -0.8542 -4.8873 -5.4381 -4.2630 -4.1290 0.7749 4.7768 0.2842 0.3115 -0.2820 0.2149 -0.1804 0.6193 5.7873 5.1866 -1.3257 -3.0389 -1.9693 8.9711 -0.5589 + -1.7203 0.3016 0.2697 0.0913 0.2499 2.9554 0.3320 0.0927 -3.0516 1.3578 -0.8456 1.2764 0.1248 3.9102 2.8147 -2.3847 -6.7532 -2.2614 1.9868 1.2535 + 2.3588 1.8978 1.0798 1.0217 0.8258 -0.3312 0.8967 -0.1754 -0.3981 1.0150 -0.3879 -0.8493 -1.2690 -1.1797 1.5079 -0.1598 -2.3607 1.1269 2.6480 -7.2674 + 1.1746 4.6165 5.4940 3.4461 -3.9021 -1.6050 -0.1323 -0.9380 -0.4156 -1.9000 -0.2856 -1.2349 -3.6515 -2.9147 0.0530 1.1469 0.2371 -1.3253 3.8834 -1.7466 + -2.2758 1.8844 4.6711 2.2076 -1.3597 -0.4741 0.4627 -0.0358 -0.0017 -1.0258 -0.6957 -1.0270 1.1372 -2.6040 -3.0616 -4.3523 1.6973 1.9314 1.1807 1.7410 + 1.9665 1.3206 -0.1069 0.8467 1.1209 2.6581 1.0313 -0.7646 -0.9327 -0.4666 1.3979 -1.1019 -2.4235 -8.2049 1.1737 4.9310 0.7484 0.2664 -6.0708 2.6104 + 1.1852 -1.5416 -3.6491 4.4048 -6.7437 4.6469 1.6802 1.2910 2.2789 2.7610 1.3944 -0.7732 -5.8136 4.4421 -2.2039 0.8414 -5.8722 -4.6747 -3.6578 10.0038 + -3.9689 -0.5502 1.1683 -2.1974 -1.9082 0.1416 1.6772 0.3260 3.7162 2.4168 2.6207 -1.7735 1.5236 0.3480 -0.3569 4.1471 1.4471 -0.6226 -8.1997 0.0448 + 0.6532 1.4910 1.2058 1.7096 2.3950 1.7319 -1.5483 -1.8447 -2.2888 0.7634 3.2796 1.6709 -4.9985 -3.0829 -1.1211 1.2229 -0.2209 -1.1940 1.9569 -1.7811 + -1.9523 -4.3005 -4.5837 1.0346 1.2567 1.0099 3.2344 2.8332 1.1895 -1.5164 -2.2052 -1.2334 -1.4331 2.1022 2.3179 5.6712 2.1958 -2.0504 -2.5243 -1.0460 + -1.1815 -1.5300 -0.6842 -0.5633 -2.6867 -1.4016 0.6359 -2.0170 -1.2970 -1.6432 -1.0489 -1.3764 -1.1731 -0.5962 3.5229 5.3595 3.1187 3.4061 0.3009 0.8550 + -3.1382 -0.6280 -0.8774 -0.9941 0.9435 0.9619 0.8520 -3.3796 -3.2423 -1.3758 3.3040 2.2194 1.0056 2.5348 -0.2996 0.9762 -3.7819 -0.3936 5.7234 -0.4105 + -3.2428 -5.3967 -1.5226 4.3711 2.0836 2.1112 0.7032 -4.0183 -12.6551 -15.4852 0.9361 9.2253 10.5424 3.4081 3.4337 -0.7556 1.6657 0.8127 4.5992 -0.8160 + 1.8248 0.0419 0.5248 1.8646 -1.2814 -2.6618 -0.0669 0.1817 2.2151 -0.8152 5.1179 2.3104 3.6555 -8.7128 -2.0790 1.0629 -0.0963 -1.5473 0.4756 -2.0146 + -0.1111 0.3482 -0.0235 -0.7175 -0.1449 -0.3857 -0.8724 0.4592 0.4980 0.2237 0.3924 0.2623 -0.5426 0.9370 -0.6701 0.1600 0.1978 1.4707 -0.4540 -1.0274 + -0.9442 -0.4989 -0.2375 -0.5991 -1.2414 -0.4327 -0.2055 -0.5191 2.6955 3.9938 -2.7275 1.8004 1.9744 1.7067 -0.5541 -5.7033 0.6046 -1.4009 -1.3782 3.6669 + -0.8575 0.6722 1.8197 2.2695 1.4265 -1.5445 -1.7430 -1.5937 2.0470 -0.1126 0.3473 1.4243 0.9317 -1.3895 -1.0640 0.4664 -0.0706 -3.0958 -1.0532 1.1198 + 0.9735 -3.1553 -4.9524 -1.8534 0.7715 2.4911 5.1271 0.4320 -4.1146 1.1236 2.7184 2.0135 1.9444 1.7813 1.8232 -2.6267 -5.6361 0.3774 1.0979 -0.3363 + 1.9497 1.0413 -1.2191 -0.8636 0.0511 -0.3375 -0.5315 -1.0284 2.1218 -5.0828 1.0827 -2.2172 -1.3936 0.4537 3.3006 0.9962 -1.2147 0.0930 -2.8723 5.6705 + -3.0064 -0.6690 1.9882 3.1451 0.5101 1.4897 6.0735 3.0322 0.7197 2.5823 0.9024 -1.3595 -0.6102 -4.4164 -5.2345 0.5038 -1.7243 -1.0135 0.3868 -3.2999 + -1.3127 -0.5603 -0.4395 -0.5779 -1.3273 -0.7737 1.1446 2.1363 0.5709 -0.9646 0.1742 -0.3429 0.7079 -1.3617 -0.1807 0.8278 4.5177 -3.6128 1.9484 -0.5738 + 4.9592 5.5662 -1.4308 2.4625 -1.3728 0.3179 2.5142 -3.1176 -3.0793 2.5866 -6.0767 -3.0209 -1.0428 3.7946 3.4423 -3.9407 3.8680 -5.8781 -3.2612 2.7097 + 1.8752 4.6096 2.6992 0.0622 1.9683 -1.5159 -0.2846 2.0429 5.1916 0.0415 0.4228 0.2499 -1.8859 -1.2282 -1.8414 -3.2239 -2.8594 -2.2718 -1.9470 -2.1050 + -0.4172 -0.0660 -0.7815 -1.3234 1.6425 1.5960 0.1952 2.8005 1.8348 -0.0556 -1.7528 -0.3330 2.5351 3.2175 -0.0237 -2.6102 -2.3993 -0.4569 0.2104 -3.8124 + 0.5340 -7.1325 7.3739 -7.1474 5.0035 4.0837 1.7481 0.6285 2.1470 3.3649 3.4871 -4.6213 5.3643 -0.8361 2.3067 -0.6517 -4.1528 -4.1599 -0.0969 -7.2432 + 6.4977 -1.8922 6.0123 2.6649 3.9019 -2.9401 -5.9544 6.5995 -3.7727 -1.3909 -4.1986 0.3151 1.1248 0.2299 1.4836 -7.4381 0.2549 4.7727 -2.9947 -3.2755 + 0.0546 0.0075 0.5596 0.2523 -2.3268 -4.5642 -3.6799 -0.8395 2.7336 3.7088 2.7486 2.6118 1.5065 0.0463 0.4170 -0.5592 1.5006 -0.4534 -1.6715 -2.0529 + 2.9815 2.4495 1.7545 3.2822 2.8844 2.5666 0.0398 1.6192 2.6128 3.3153 -4.7284 -2.6356 -1.7561 -4.3333 -3.6328 -2.9815 -0.9212 -0.8755 -0.3601 -1.2811 + -0.8024 1.2002 3.2220 -0.7626 -2.1102 -1.0525 -1.8044 0.6518 -0.3024 1.2038 0.2348 0.2257 -2.8991 -1.6610 1.3306 -0.9177 -2.5629 -0.6077 5.6868 1.7272 + -0.1833 -0.3751 0.5635 0.1503 -0.2949 -0.6821 1.4873 -1.2805 -1.3007 -0.6803 0.0098 0.9789 1.7868 3.5914 0.8184 1.0857 6.4677 -3.3457 -6.7060 -2.0913 + 4.2126 1.0339 -0.8906 0.9053 2.8206 3.1913 0.4808 1.7342 1.1617 0.7387 3.7928 -0.7288 -6.1883 -1.6937 -4.9005 -3.6291 -0.7611 -1.4035 -0.2407 0.3643 + -8.3754 -2.2519 1.3080 1.8062 0.8850 1.6497 2.0880 2.7261 0.2633 -0.5998 0.5979 0.7034 0.9960 2.9711 0.1650 0.8745 -0.1614 -0.6875 -1.3556 -3.6024 + 1.4188 1.0202 1.5256 1.6620 0.7476 -1.4390 -3.4051 -1.8780 0.4521 -3.9741 0.7867 -0.3719 -2.3721 -1.0437 0.6801 -0.2011 -3.0818 2.9062 4.2361 2.3315 + 0.1054 -2.6122 -4.3807 -5.3145 -0.2846 4.3842 3.0170 3.8061 0.7110 -1.0498 -0.2574 -0.9802 0.3402 1.2503 2.5457 -7.8042 -0.1469 2.8259 3.0062 0.8386 + 5.2058 7.1080 4.9534 -1.2430 -6.6855 -3.7117 -6.1961 -2.1515 -0.5576 -1.6169 5.7678 7.7780 -3.9195 1.0323 -4.8749 2.1979 -6.6948 5.7018 -1.1809 -0.9126 + 5.0054 3.2246 2.7220 2.5774 0.3515 -0.4988 -0.6659 -1.1531 -0.3512 -0.2899 -1.1677 0.8076 -0.0710 -1.3279 -1.8820 -2.0262 -1.5275 -2.2770 -2.2582 0.8080 + -0.3421 -2.1542 -1.9404 1.9715 2.0717 1.2690 -0.5900 2.8831 2.5295 -0.0718 1.0132 -2.1895 0.9449 0.2787 2.8471 3.2171 -2.0622 -4.9892 -4.8142 0.1278 + -3.5648 -4.5220 -3.8219 -0.0484 2.5590 3.3348 4.6892 3.0890 3.1738 2.4402 -0.3648 -2.0478 -1.8476 0.1171 -0.1749 -2.2364 0.1988 -2.2378 0.6726 0.5920 + -2.5566 -0.8410 -0.4280 -0.4406 -0.5726 -0.3279 -1.8710 -2.4830 2.8140 4.1548 -1.1877 -1.2228 1.1741 0.7041 -4.1128 0.8974 1.6460 2.7315 1.4956 0.4265 + 0.6395 0.6244 0.2175 0.2548 -0.6436 -1.4509 -1.2471 -1.8889 -1.6984 0.6300 -0.0902 -1.4274 1.6267 2.2897 -1.4907 -1.0863 -0.5990 -0.3234 4.5402 1.1229 + -3.0281 -3.4576 0.2465 1.1848 -0.3128 -1.4112 -1.7883 -2.4368 -3.6604 0.2309 4.1432 0.2306 3.9874 1.3414 -2.9661 0.2318 1.3943 2.8996 1.0512 2.1197 + -6.4523 -0.8108 3.0394 2.9265 1.7276 -0.6852 -1.3401 -1.2086 0.2339 0.6323 0.9584 -0.4322 -0.4865 1.1438 3.9792 -0.5978 -3.3409 -0.0134 0.1557 0.5712 + 0.8836 0.6632 -0.5682 1.0909 1.0200 0.2143 1.7898 0.4314 -1.2105 -1.6888 -2.8939 1.5904 1.4323 5.0287 -2.4090 -2.6282 -1.2927 -1.8499 -3.8726 4.2691 + 2.7571 0.5054 0.5914 -0.4593 -1.9535 -2.8534 -5.1043 -5.0146 0.3167 1.9210 1.9920 1.2596 1.2329 -1.0134 -2.2148 -0.9619 3.3405 0.4893 1.9185 3.2509 + -7.8257 -8.0514 -2.2922 4.6049 1.7841 0.2877 2.4600 0.2299 0.3961 0.7952 4.9841 0.5914 -3.3601 1.4043 5.5671 2.2508 0.0018 1.5100 -2.0511 -3.2867 + 1.5686 1.2169 -0.6391 -2.6751 -3.0325 -3.9104 -2.5516 -0.9763 6.3909 -1.3255 1.3817 1.7409 2.2064 2.8908 0.3118 0.3554 0.3092 -0.0695 -2.5566 -0.6363 + 1.1784 0.7886 1.7506 3.8841 0.1097 -3.4846 -1.1668 -0.2517 -0.3004 -0.0493 2.0270 0.2092 1.5440 3.4255 0.2943 -0.8517 -1.6072 -4.0976 -5.8976 2.4958 + 0.9988 2.8848 3.2891 3.3681 1.4676 3.2906 1.3735 1.1970 0.4611 -0.5875 1.7464 0.9583 0.5681 -1.4825 -4.2976 -3.2226 -2.3712 -7.0782 -2.8558 0.2917 + -0.2746 -0.1545 -0.1213 -1.7658 -0.9647 -0.8990 -2.2776 -1.6043 2.1487 5.2377 -7.3002 -1.2976 0.8951 2.6087 1.9104 0.8944 4.2107 2.4289 -0.6124 -3.0624 + 4.5993 2.8908 2.6348 2.5753 3.5423 -1.3467 -3.6340 -1.3719 -1.5896 -1.7807 0.4182 -0.4869 -0.0081 -1.7322 -5.0302 -4.0281 3.2297 0.1854 0.7317 0.2006 + -3.2143 -2.4079 2.3832 -1.4835 -2.9589 -4.3471 -9.4701 -8.6980 2.2131 11.9939 3.4222 5.6731 1.0493 0.9347 3.1770 3.6996 -0.0115 2.2951 -2.8928 -1.3571 + 2.2986 0.5686 -2.7234 0.0628 3.3595 3.0322 1.2528 0.1697 0.2877 -3.1109 -4.5198 4.2898 4.5477 -0.5365 -2.9437 -1.7760 -3.4896 -0.4971 0.5506 -0.8230 + 0.0226 -1.9088 -4.1034 -3.5139 1.8311 6.6465 1.9042 -0.2585 0.4811 -1.3603 -0.8669 -2.6469 -2.4021 -2.3699 -1.0708 1.8059 0.3697 0.3642 3.4726 3.6036 + 1.8666 0.3455 -0.4415 1.4530 2.1752 0.4141 0.9988 0.9339 2.0369 0.0808 -1.3138 -1.2683 0.1032 0.3074 0.3794 -2.2480 -4.4451 -2.7006 1.2456 0.0770 + -0.9714 0.8948 -0.5528 -1.5023 -2.1884 -1.6190 -2.6643 0.3765 5.2588 1.9474 4.7336 6.0668 0.9206 -6.1173 0.2687 4.2344 -2.7801 4.7836 -5.9468 -5.1428 + -3.5447 -2.6492 -1.1225 1.1104 -0.6763 -0.3734 0.7874 2.9348 3.7914 3.3802 -3.0687 -1.7645 -1.7552 0.4322 1.5566 3.1434 -2.9717 0.2913 0.3294 0.1693 + 2.3099 -0.6833 -2.4051 -0.8700 -0.1793 -0.7055 -1.1773 0.0766 -2.2742 -3.5734 -2.1986 0.6775 0.1605 0.0083 4.2284 1.3025 3.7892 -0.0746 -0.9582 2.5465 + 0.9486 0.1048 1.8316 3.4918 2.1758 1.1342 1.0848 2.4632 0.0993 -1.9453 -1.1703 -1.6274 -2.0353 0.8991 0.4736 -4.0911 -2.9565 -2.3552 -2.1133 3.5874 + 0.6208 3.4997 6.2697 4.2107 1.2652 2.1894 1.1355 -2.5271 -2.9525 0.0535 0.3829 -2.5199 -2.9063 -2.7287 -1.9607 1.4600 1.2748 0.4400 -4.8467 -2.3602 + 0.5243 2.9289 2.2684 0.4191 -2.1542 -0.2881 -0.2706 0.6758 5.4475 1.1883 -2.5477 -6.5024 -4.1506 0.6656 0.9576 -1.2352 1.0736 -4.8441 2.5699 3.2741 + -0.7794 1.1463 3.5016 1.1120 0.8485 -1.0628 -0.8132 3.8405 -0.3344 1.2653 0.4357 0.5494 -2.5741 -2.4964 -3.4166 -4.9706 4.8271 -4.7341 1.1838 2.4711 + 1.8447 1.0979 -1.7573 0.3863 -0.5133 -3.1578 0.0583 -0.5417 4.1974 -4.6030 0.1241 -3.2329 4.6242 -4.6647 -2.4610 0.5959 3.2183 -1.2626 5.6612 0.3859 + -2.3894 -1.0328 1.7896 5.5648 5.2220 1.8869 1.0956 -0.1977 3.2983 0.9466 -2.0813 -0.1679 -0.5816 -0.1714 -2.7510 1.1951 1.5496 1.6400 -5.0073 -9.8080 + 0.7738 -1.7298 -3.2257 -0.3183 1.9284 1.7227 0.8166 0.9095 0.5332 -0.5016 -1.2660 -1.9608 2.0035 -2.6922 3.7039 0.8905 -0.7247 2.7531 -3.0591 -0.5571 + -0.0748 -0.5070 -0.2516 1.7723 1.4041 4.3520 1.7022 1.0990 -1.4641 -2.3620 3.1174 0.5476 1.5192 -1.9294 -4.9678 0.2919 -3.1451 1.3976 -0.5997 -1.9017 + -0.3043 -4.5751 -6.4864 -2.8079 2.8553 1.4264 -0.6290 0.8259 1.1617 -0.8255 -1.1913 -0.9336 -0.8179 -0.6841 2.7254 1.9190 4.4832 2.4919 2.0452 -0.6788 + 2.9368 3.5644 3.7164 3.7726 0.3148 -2.5071 -1.0177 0.4365 0.4818 -2.1099 -3.0728 -1.1823 -1.8323 -2.5460 -3.2217 -2.5081 0.1068 -0.3340 2.0018 3.0001 + 2.0122 -0.8437 -0.0894 -3.5669 0.2151 1.3672 -1.1852 2.2748 0.2674 2.1266 -4.5961 -3.5181 1.6410 4.2095 -4.0873 0.0362 3.5548 -2.6567 1.8468 0.9915 + -2.9528 1.3693 1.3737 3.6447 4.6399 3.0004 -0.4081 -0.5069 -2.0885 -2.1563 0.7639 0.4790 -2.4821 1.6495 0.8280 -0.4457 -4.8607 3.5285 3.1896 -8.5655 + -4.4449 -2.6584 -0.3396 2.7055 3.1313 2.6691 -0.1405 -2.6920 1.1380 5.9263 0.1508 -2.5031 -2.5963 -2.2339 -0.4387 2.7348 0.1166 -2.0958 -0.1884 1.7591 + -0.4506 -2.2585 -2.0183 -1.2141 2.3804 5.1371 -0.1012 0.7185 -1.9558 -5.5843 1.7274 2.5676 1.3295 -2.3148 3.4722 0.9168 0.3809 -1.2468 -0.6805 -0.8055 + -0.5741 -1.3187 -1.6054 -1.8387 -3.0009 -2.2631 1.6411 1.0542 0.8630 1.3059 0.6660 0.5171 -0.9355 -1.8837 0.8703 0.3850 -0.0855 0.2754 4.4605 1.4674 + 4.0853 2.9178 0.0251 -1.7053 -2.9819 -2.0918 -1.9947 -0.8293 -0.6373 0.5052 2.1796 2.6733 -1.7046 -0.6344 1.3620 -0.4864 -2.0884 -1.6708 1.5012 1.5754 + -1.5635 2.8252 -0.9149 -3.0463 -4.7327 2.7084 1.1209 0.7968 0.7865 -1.2527 -0.1248 2.6941 2.7972 2.2336 -0.0652 -0.4532 -2.9265 -0.0560 -0.4324 -0.3945 + 2.4620 0.7164 -1.5674 -3.1513 -1.6402 2.4149 2.9010 2.5761 3.2262 0.0749 -4.5314 -3.4112 0.2922 1.0743 0.0408 -1.5976 -0.5032 0.6577 0.7598 -0.7940 + 1.9710 1.1730 -0.6838 -2.2094 -1.9356 1.4952 -2.0825 -0.2927 0.7657 -1.8337 4.4472 -3.8324 0.7557 0.0732 -3.6271 -1.9071 4.3140 2.4552 -0.0317 0.9857 + 3.7325 2.7934 1.0157 -1.7096 -2.8454 -1.8953 -0.7562 0.3146 -0.3781 -1.0020 -1.6158 -0.3984 -0.0573 0.9972 1.0112 -1.0599 0.0370 3.6124 1.1087 -2.9047 + -1.4832 -1.9899 -0.8731 -0.9330 -2.9066 2.3820 -0.1603 -0.7170 -1.1285 -0.9274 2.1578 6.4011 -1.6535 2.3099 -1.6654 3.7268 0.0883 -1.8527 -0.5184 -0.2568 + 0.6353 1.3687 1.8257 0.3226 -0.8766 1.0000 1.0853 1.2934 0.8779 1.7553 1.1543 -2.0442 -1.6763 -0.4593 0.9294 -1.2072 -2.2593 -0.6144 -2.8074 -0.3032 + -1.2070 -1.3475 -1.8312 -1.7806 -2.9611 -3.1818 2.9332 -0.1240 0.1906 2.9202 -1.8371 1.0525 -2.0319 2.7074 -2.1979 -1.3072 -0.5591 3.0013 2.6600 4.9011 + -5.1303 3.3870 -3.7967 -1.9466 -5.3864 -1.1368 -0.5684 3.7351 -0.5755 -3.2378 -4.4250 2.0350 3.9372 5.4701 -2.7768 5.9464 6.6849 -3.7875 1.9948 -0.4230 + -1.3037 -1.9678 -3.1520 -1.4018 0.2092 2.8010 2.0760 -0.3324 1.0911 0.9050 1.7187 3.4255 1.0022 3.5722 -3.5224 -4.7658 -1.0745 0.2766 1.2898 -0.8471 + 1.9772 -2.9635 -3.0240 -2.2547 0.1703 1.7771 -1.6073 -3.1859 1.5410 1.4356 0.9203 3.9297 4.2495 5.7007 -4.0193 -0.8612 1.6423 0.8844 -5.1605 -1.1517 + 2.9132 0.8992 -1.0688 -1.5448 -0.9185 0.4003 -1.7700 -2.7768 -1.4639 0.2261 0.7139 1.7997 3.0514 3.3204 0.6803 0.9792 -0.2717 -2.6450 -0.2252 -2.2988 + -2.9741 -2.4804 -3.0116 -3.1521 0.1074 1.3714 0.6662 2.0637 1.7849 -0.4611 -0.7720 -1.6172 0.8203 3.4203 0.8069 2.2581 3.2451 0.5915 -2.2429 -0.4245 + -0.8028 -0.2290 0.2137 -0.4319 0.5580 0.2543 0.9172 0.8892 -0.4807 -1.2827 0.9202 1.1454 -1.6931 -3.6479 0.4568 3.9049 1.2435 2.6145 0.7928 -5.3425 + 2.6190 1.9162 0.9769 -0.1078 -0.4290 -0.3650 -2.8284 -4.4494 -5.9910 -4.8405 0.7110 -0.4595 0.2195 3.3942 0.9527 -1.8867 3.8742 3.7699 1.2150 1.7087 + 1.8829 0.7201 0.6607 -0.0626 -1.1940 -1.4411 -0.0944 0.1172 -0.7491 -0.3712 -2.5287 -2.1899 -1.2280 -1.4906 -0.5689 -1.4885 2.7842 4.0586 -1.1367 4.3200 + 4.6710 0.9897 -0.6156 -0.6851 -1.4120 4.1532 4.4321 1.1339 -1.0985 0.5736 1.4085 -4.6356 -3.3117 -1.5968 -3.4345 -0.7293 -0.0528 -0.3096 -3.6684 4.1880 + -2.5398 -1.3830 0.0979 1.9654 3.5192 -0.0522 -3.2870 -3.8507 0.6356 -0.9850 -3.0198 -3.7269 -0.8310 1.9829 1.8339 -0.8073 0.2152 2.0459 6.1180 2.0688 + 0.4962 3.2227 3.5953 1.3395 -3.4218 -4.9933 -1.9981 0.9513 -1.0998 -2.7535 1.3298 -0.6976 0.0716 0.7392 5.8854 -4.3047 2.1890 1.9699 -2.4444 -0.0765 + -5.8327 1.1129 0.8081 5.6003 5.5684 4.7020 2.8089 0.4347 1.1649 -4.9188 -11.4465 -1.3196 0.4225 -2.4705 0.3286 -0.0113 8.7340 -2.1220 -2.1264 -1.4373 + -1.6231 -1.3969 -2.0111 -1.2620 4.3084 -1.2012 1.2341 0.1866 0.0635 -2.6548 2.3896 1.8088 0.0290 -4.3105 3.9166 -0.0331 -0.3748 -2.4710 1.0435 2.3583 + 0.6310 1.3989 1.5277 0.7608 1.0894 1.7235 2.0681 2.3537 0.9918 1.2164 -0.3325 -2.2666 0.1756 0.1615 0.5196 -2.6730 -7.1201 -2.9272 -5.4551 6.1563 + 7.8768 5.4153 -2.5369 0.0405 4.1259 -0.2108 -4.6599 -0.9803 -1.3472 -5.5873 0.0334 -6.0975 -0.7915 0.7551 -0.1575 2.8766 -3.5702 -0.2561 4.0100 1.0615 diff --git a/libcodec2-android/src/codec2/octave/train_all_speech_1.txt b/libcodec2-android/src/codec2/octave/train_all_speech_1.txt new file mode 100644 index 0000000..735c713 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/train_all_speech_1.txt @@ -0,0 +1,514 @@ + 3.503901481628418 3.791774749755859 5.251767158508301 6.508749961853027 5.127012252807617 3.361294507980347 0.243348091840744 -1.111059069633484 0.645551323890686 -0.5759052038192749 0.0442858524620533 -0.001516825286671519 0.3966041207313538 -2.835689306259155 -3.605791568756104 -7.889068126678467 -3.260931253433228 -0.1228795349597931 -5.004364490509033 -4.467086315155029 + 28.03043365478516 23.2732105255127 16.69843864440918 9.301326751708984 2.729286432266235 -2.458910465240479 -5.740657329559326 -6.68559741973877 -7.492500305175781 -7.85601806640625 -7.454850196838379 -5.931487083435059 -4.112403869628906 -2.233861207962036 -3.926839113235474 -5.844244956970215 -6.445382118225098 -5.252916812896729 -4.993747234344482 -3.603279590606689 + 32.56464004516602 28.81554794311523 23.21220970153809 17.26614570617676 12.75540542602539 9.964438438415527 6.646321296691895 1.243698716163635 -4.590430736541748 -7.218576908111572 -8.396566390991211 -8.751805305480957 -10.14919185638428 -11.93070697784424 -11.88467979431152 -12.72025680541992 -13.08411026000977 -13.18809127807617 -14.76470184326172 -15.78927612304688 + 5.975729942321777 4.555702209472656 2.87472939491272 2.512071371078491 0.9860721826553345 -0.8367324471473694 -0.6223300695419312 0.3663770854473114 0.7955335974693298 0.392966091632843 -2.49055814743042 -2.309305429458618 -2.556457042694092 -2.528177976608276 -3.023877620697021 -2.204056024551392 -2.405418157577515 -0.8756491541862488 1.105034351348877 0.288346916437149 + 7.673871040344238 7.434552669525146 7.830992698669434 10.15661811828613 13.83097839355469 15.30639362335205 11.42201519012451 8.932522773742676 10.37486934661865 12.57092475891113 4.56135082244873 -3.044244766235352 -6.334497928619385 -7.038057804107666 -4.782663822174072 -11.09237766265869 -17.77633285522461 -18.82984161376953 -15.95373916625977 -25.24331092834473 + -11.28521823883057 -9.271133422851562 -2.778221845626831 1.807992339134216 0.7304858565330505 -0.184556320309639 -1.86104941368103 -1.324167966842651 -1.543161273002625 -1.253548741340637 1.257227182388306 3.003896474838257 5.694759845733643 4.67047119140625 4.934287071228027 3.337021350860596 1.418267488479614 -1.865221738815308 0.6671320199966431 3.844735145568848 + 6.876662731170654 7.183174610137939 7.623923301696777 8.234439849853516 5.887650012969971 3.210459470748901 2.382892847061157 3.868316411972046 3.362746477127075 0.6627451181411743 -1.66800856590271 -1.858322024345398 -3.388047695159912 -3.685295581817627 -3.735403299331665 -5.712156295776367 -7.716336727142334 -6.992678165435791 -7.389943599700928 -7.146812915802002 + -6.053719520568848 -3.63427734375 0.2870153188705444 3.108088254928589 2.850396156311035 0.1260831952095032 -0.7389681339263916 0.5524262189865112 1.546064019203186 4.515695571899414 5.740691184997559 4.424627304077148 2.731694459915161 0.4941331148147583 -0.3833900392055511 -0.8107656240463257 -1.980955243110657 -3.035221338272095 -3.79147481918335 -5.948152542114258 + 25.5760440826416 27.94159889221191 24.34627342224121 14.69587993621826 3.129726648330688 -5.597395896911621 -8.945341110229492 -10.00861740112305 -10.91853427886963 -12.20146465301514 -10.84396553039551 -7.469461441040039 -1.659998059272766 4.689345359802246 2.184104204177856 -0.7359857559204102 -4.123245716094971 -4.153082370758057 -9.386194229125977 -16.51968383789062 + 2.083509922027588 2.018866539001465 1.961146473884583 3.584662914276123 6.372915267944336 8.050569534301758 6.806997776031494 4.416918754577637 1.979579329490662 -0.6982173919677734 -1.020430684089661 1.8607177734375 5.724912643432617 5.976870536804199 -0.4547030925750732 -7.373361110687256 -9.62476921081543 -7.055913925170898 -9.67552375793457 -14.93474006652832 + 9.900005340576172 11.11205959320068 12.69847106933594 15.64771842956543 18.72967338562012 17.63078880310059 12.23540306091309 7.59137487411499 6.715625286102295 8.484490394592285 8.800906181335449 1.508745670318604 -7.228737831115723 -14.38050556182861 -17.9872932434082 -18.65911674499512 -15.54321575164795 -13.96155548095703 -20.45906639099121 -22.83575630187988 + 33.31724548339844 31.22291564941406 26.2960033416748 20.17128753662109 12.19244766235352 5.185864448547363 3.246951103210449 5.006373882293701 2.141655445098877 -5.400078773498535 -10.55130100250244 -13.10519027709961 -13.06551074981689 -12.01528644561768 -12.90364456176758 -13.44828128814697 -13.26143646240234 -13.49717712402344 -15.32059669494629 -16.21224594116211 + 1.160675168037415 -0.3747923970222473 -2.663496017456055 -2.927655696868896 -0.3560551702976227 3.28938102722168 5.239902496337891 8.044262886047363 6.652604579925537 3.97779369354248 4.083271980285645 6.961338043212891 8.550065994262695 2.346344232559204 -2.809552192687988 -6.179857730865479 -7.585293292999268 -6.895844459533691 -9.640233993530273 -10.87286186218262 + 5.94452953338623 3.811221361160278 1.134124636650085 2.619336366653442 5.347626209259033 6.752548217773438 5.364405155181885 1.397107362747192 -1.545763611793518 -4.071928977966309 -2.443724393844604 -2.439105272293091 -3.489367246627808 -0.5402494668960571 1.537298321723938 -1.653804302215576 -3.502989053726196 -2.35117244720459 -4.944786548614502 -6.92530632019043 + 27.48577308654785 24.51284790039062 19.48355484008789 14.3996639251709 9.474723815917969 4.536386013031006 -0.5103690624237061 -3.632709503173828 -5.82119607925415 -7.263043880462646 -7.536733627319336 -7.448832035064697 -8.315095901489258 -7.85472297668457 -7.082536697387695 -7.529149055480957 -8.032625198364258 -8.674041748046875 -9.140567779541016 -11.05131435394287 + 6.75608491897583 6.328508853912354 5.419772148132324 5.890230655670166 7.777308940887451 10.29029655456543 10.68216705322266 7.286451816558838 2.889912843704224 -1.301931977272034 -4.434157848358154 -5.080985546112061 -2.961805105209351 2.305842876434326 -0.01768347434699535 -5.421481132507324 -6.190484523773193 -6.402289390563965 -13.91303730010986 -19.9027042388916 + 5.375237941741943 4.880783557891846 3.848113059997559 3.542019128799438 4.622683048248291 6.69300651550293 9.027632713317871 10.2619743347168 7.902902603149414 4.52606201171875 2.255825042724609 2.263393402099609 5.199076175689697 2.179580926895142 -5.786059856414795 -8.947177886962891 -9.236479759216309 -9.68709659576416 -16.95894050598145 -21.96252250671387 + 15.65207767486572 12.11825275421143 7.862476348876953 5.795327186584473 4.078181266784668 1.869440197944641 0.294452428817749 -1.144178748130798 -1.743003249168396 -2.345729112625122 -3.181504964828491 -3.503159284591675 -4.294906139373779 -4.03973913192749 -4.509326934814453 -5.331762790679932 -4.550152778625488 -3.840717077255249 -4.018199443817139 -5.167826175689697 + 18.86136245727539 22.2327938079834 24.68154144287109 25.0569019317627 19.81441307067871 12.41040420532227 7.601511001586914 6.082168579101562 8.023798942565918 8.556151390075684 0.7312884330749512 -7.768879890441895 -14.02567863464355 -17.86144828796387 -20.32940101623535 -21.05902671813965 -19.86882209777832 -17.11456871032715 -17.58621406555176 -18.43827438354492 + -6.099148273468018 -3.074884653091431 1.065669655799866 3.46605396270752 2.664950609207153 -0.1740235686302185 -1.065245866775513 -1.431956768035889 -0.8008455038070679 -0.4683205783367157 0.2586084306240082 1.447079658508301 3.035146713256836 5.815367221832275 8.046737670898438 5.779229640960693 0.8773371577262878 -4.074870109558105 -6.226751804351807 -9.040132522583008 + 17.96066093444824 21.18134307861328 23.09299087524414 21.8427677154541 14.64311599731445 5.688597202301025 -0.2130907475948334 -3.072567701339722 -5.391517162322998 -7.200598239898682 -8.211039543151855 -6.548444747924805 -1.767251491546631 1.299013376235962 -7.267916202545166 -12.67638683319092 -11.8170166015625 -5.908488750457764 -15.3381519317627 -20.29601287841797 + 26.30965232849121 26.33807754516602 25.27392578125 21.48009490966797 16.14387512207031 13.19803905487061 8.739408493041992 2.180922746658325 -3.75966477394104 -5.995718955993652 -8.005228996276855 -8.755231857299805 -9.549881935119629 -9.806296348571777 -7.275689125061035 -11.07846164703369 -16.52146530151367 -18.4779167175293 -19.93660545349121 -20.5018196105957 + -8.617772102355957 -8.945120811462402 -4.539582252502441 1.078097343444824 2.600668907165527 1.022749304771423 -0.5104072690010071 0.4009959101676941 0.08736521005630493 -0.4390178620815277 2.36236572265625 5.524200439453125 3.933060884475708 1.591420769691467 -1.926792025566101 -3.021800518035889 -1.699977517127991 -1.463400363922119 3.61325216293335 8.949700355529785 + 5.822198390960693 6.222359657287598 4.698714733123779 3.132632732391357 3.07255744934082 2.390854358673096 1.206083059310913 0.1907666325569153 -0.2577031850814819 0.3930277526378632 -1.284250378608704 0.04870199412107468 -1.276285171508789 -3.034269571304321 -3.365149259567261 -2.531657218933105 -1.984165072441101 -1.298876047134399 -8.775853157043457 -3.369685649871826 + 22.01222038269043 22.66417694091797 21.52972793579102 17.68148422241211 10.48514270782471 2.689077615737915 -2.264973402023315 -4.631338596343994 -6.71744966506958 -8.984005928039551 -9.821804046630859 -8.145534515380859 -2.854689836502075 -0.757327675819397 -7.845916271209717 -10.87128257751465 -9.10041332244873 -4.198158264160156 -10.38017272949219 -10.48876094818115 + 0.87721186876297 1.023530602455139 1.017704963684082 1.556210994720459 3.583067417144775 6.056449890136719 9.576187133789062 12.43352222442627 11.38518905639648 7.673481941223145 6.882114410400391 8.946038246154785 6.608055591583252 -1.276444554328918 -6.488674640655518 -6.960916519165039 -7.693408012390137 -13.73535442352295 -19.55771255493164 -21.90627288818359 + 4.583919048309326 5.54997444152832 6.632177352905273 8.406952857971191 11.17818737030029 13.65631580352783 12.20436096191406 6.401305675506592 1.154896140098572 -1.293386459350586 -1.867376804351807 0.8424116373062134 6.344460487365723 4.921483516693115 -2.225198268890381 -5.077576160430908 -9.220178604125977 -17.42711639404297 -22.00735473632812 -22.75824928283691 + -3.102021217346191 -4.934051990509033 -5.026371955871582 -3.679954767227173 1.594022154808044 3.571999788284302 5.714908599853516 8.114648818969727 6.035937309265137 6.302038669586182 1.37278425693512 -1.393239378929138 -4.985548496246338 -4.824649333953857 1.068022608757019 2.268578290939331 -2.253105163574219 -1.408431768417358 1.219765901565552 -5.655329704284668 + -3.316742181777954 -2.979648351669312 -1.643033266067505 0.2565309703350067 0.6060237884521484 -0.02428602613508701 -1.232267260551453 -1.93351674079895 -1.940996289253235 -2.524378776550293 -2.40356183052063 -1.856996655464172 -1.024620056152344 0.03681971505284309 0.01067735254764557 -0.2030823975801468 0.4532400071620941 1.599214792251587 5.77880334854126 12.34182167053223 + 15.8239278793335 16.16110801696777 16.57540702819824 17.84334754943848 16.66327667236328 12.71552467346191 7.510667324066162 3.022555351257324 0.6088733077049255 -1.061047077178955 1.844056129455566 5.594436168670654 1.795042634010315 -3.180304527282715 -7.426888465881348 -12.97753429412842 -18.76288986206055 -23.58376502990723 -24.8903694152832 -24.2754020690918 + -0.4329100549221039 -1.153759121894836 -2.361927509307861 -3.003302097320557 -3.672260046005249 -5.084637641906738 -6.65839672088623 -6.925933837890625 -6.42293119430542 -6.08603048324585 -5.84499454498291 -5.423248291015625 -4.065683364868164 -0.7888540029525757 1.539779901504517 3.364370107650757 7.599849700927734 12.73376750946045 14.96135997772217 17.72574996948242 + 18.3255786895752 20.44512748718262 20.71366691589355 16.62657928466797 8.420391082763672 1.511367797851562 -2.391377210617065 -1.262075424194336 -1.956893444061279 -9.352529525756836 -17.8893928527832 -20.79939079284668 -20.16166496276855 -15.59700202941895 -3.843715667724609 4.558215141296387 4.646618366241455 2.505266427993774 -0.9462172985076904 -3.552557229995728 + 33.96227264404297 30.3023681640625 23.93390464782715 17.46969413757324 10.30532073974609 1.410054087638855 -3.531162261962891 -1.113182902336121 3.273731708526611 0.6619448661804199 -6.759619235992432 -10.10671234130859 -11.61876678466797 -11.87101554870605 -11.30706596374512 -11.56081199645996 -12.20409202575684 -13.50289916992188 -14.10133457183838 -13.64265632629395 + 24.68064117431641 26.29081153869629 25.42455101013184 20.26850700378418 11.56712245941162 4.094350337982178 -1.698356628417969 -5.774074554443359 -9.001168251037598 -11.34935569763184 -12.74047374725342 -13.08970165252686 -11.50658798217773 -6.554616451263428 -1.450866460800171 -2.475327730178833 -4.598902225494385 -4.598552703857422 -12.65169525146484 -14.83629608154297 + 25.19855117797852 24.98921966552734 23.05159378051758 18.37245941162109 13.00849628448486 9.966771125793457 9.327069282531738 9.223878860473633 5.977185726165771 0.5773510336875916 -3.128563642501831 -5.36072301864624 -7.908251762390137 -12.29754734039307 -15.44667148590088 -17.00860595703125 -17.36274337768555 -19.40313339233398 -20.41622543334961 -21.36010360717773 + -9.144045829772949 -7.866376876831055 -4.516994476318359 0.04078018292784691 2.233412742614746 0.7148503661155701 -2.801738977432251 -4.78801155090332 -4.991693496704102 -2.994109630584717 0.4564718008041382 6.954310894012451 6.343183040618896 4.793509960174561 5.267282962799072 3.474374532699585 2.709347486495972 2.763020753860474 1.886340975761414 -0.5339090824127197 + 27.15909194946289 25.39476013183594 21.54992866516113 15.52098083496094 6.309974670410156 -1.627548575401306 -4.721316814422607 -5.576619625091553 -8.175256729125977 -11.3615026473999 -13.9495325088501 -14.59604358673096 -15.31496715545654 -15.50387001037598 -14.14670848846436 -8.48103141784668 1.818431496620178 6.948720455169678 6.240270614624023 2.512237787246704 + 15.26922607421875 18.09340858459473 20.5144214630127 20.9620475769043 15.71985816955566 8.584695816040039 4.213981628417969 2.376119375228882 3.310333490371704 6.336117267608643 4.72252893447876 -3.25541090965271 -10.24591636657715 -14.85652542114258 -16.80167198181152 -13.832350730896 -7.703041076660156 -16.83441734313965 -20.30658721923828 -16.26680946350098 + 4.907369613647461 4.265684604644775 3.083312034606934 3.738429307937622 3.159228801727295 2.312073469161987 1.725414276123047 1.140659689903259 -1.256341218948364 -5.75554370880127 -7.852888584136963 -6.981096267700195 -6.175336837768555 -3.354127168655396 2.111618757247925 3.207269668579102 2.460299491882324 4.880172729492188 -1.607948660850525 -4.008255481719971 + -2.825491428375244 -2.664080619812012 -3.556501388549805 -1.536420583724976 2.61185359954834 2.423787593841553 0.8607557415962219 0.0351119227707386 -1.387669086456299 -2.584674119949341 -2.979906558990479 -2.425863265991211 1.690563797950745 9.607510566711426 7.604969501495361 3.176784753799438 -1.457247972488403 -1.847179889678955 -2.844440698623657 -1.901864290237427 + 19.42486763000488 20.72030639648438 21.55156135559082 19.6943531036377 12.82256031036377 5.137216091156006 -0.7697764039039612 -5.058693408966064 -8.504769325256348 -9.637164115905762 -7.715685844421387 -2.976856231689453 2.599075317382812 -3.922131299972534 -10.11317348480225 -9.754851341247559 -4.615532875061035 -11.02495861053467 -14.72185897827148 -13.13448619842529 + 12.17941188812256 10.62963485717773 9.625134468078613 9.297036170959473 10.73871612548828 12.27712821960449 12.28466987609863 10.12379932403564 7.496825218200684 6.475470066070557 5.117063522338867 -0.1686364710330963 -8.273245811462402 -14.1778450012207 -16.94489288330078 -16.27918434143066 -11.97532844543457 -9.788707733154297 -13.57298755645752 -15.06404685974121 + 10.03407287597656 8.969793319702148 7.404208660125732 7.644266605377197 7.855467796325684 8.301459312438965 4.597716808319092 1.47676956653595 -0.2043584734201431 -2.676269054412842 -1.992263078689575 1.343597173690796 4.854265213012695 -0.3698329925537109 -3.6153883934021 -4.216947078704834 -6.633061408996582 -13.87497520446777 -14.84012126922607 -14.05840492248535 + 14.32112312316895 10.05139255523682 6.251046657562256 3.785530567169189 3.75807523727417 4.139776229858398 4.057256698608398 3.483638048171997 1.278795480728149 1.251617193222046 5.155167579650879 9.70378303527832 7.714277267456055 2.864827632904053 -5.078719615936279 -11.8890905380249 -14.22188663482666 -14.24189186096191 -14.2360143661499 -18.14870643615723 + 8.840707778930664 6.645888328552246 3.140192031860352 3.038378477096558 2.625264406204224 2.530407667160034 4.01621150970459 7.545373916625977 9.417645454406738 10.34425163269043 6.008065700531006 -0.1526446789503098 -3.714003086090088 -6.668576717376709 -6.876534461975098 -7.528736114501953 -8.436820030212402 -10.3456449508667 -10.8781795501709 -9.551239013671875 + -7.837013721466064 -6.67249584197998 -3.152433156967163 0.4392966628074646 -1.273952126502991 -4.348273277282715 -6.318003177642822 -7.018110752105713 -8.457772254943848 -7.514058589935303 -2.865795135498047 3.081298351287842 7.746901512145996 8.452938079833984 11.85788726806641 9.881362915039062 5.741739749908447 4.635182857513428 3.411952018737793 0.2093580216169357 + 27.54855155944824 28.77965354919434 26.33428382873535 19.14382743835449 10.77631759643555 3.271880149841309 -2.67638635635376 -5.800123691558838 -9.516213417053223 -13.1913013458252 -15.42091941833496 -15.93879985809326 -16.00874519348145 -16.0577220916748 -14.44884586334229 -7.193002700805664 3.788428544998169 3.703774929046631 0.8510863780975342 -7.945737838745117 + 24.19801139831543 25.59066963195801 25.80960083007812 23.84943389892578 19.97462844848633 17.20759582519531 14.6951847076416 9.667998313903809 3.539491891860962 -2.221262216567993 -6.48640251159668 -9.835855484008789 -13.20033264160156 -15.846848487854 -17.8895263671875 -18.48914337158203 -18.81632614135742 -20.02217674255371 -20.79559707641602 -20.92916297912598 + 12.59621429443359 16.68565940856934 19.45024681091309 20.43060493469238 13.84965038299561 4.59410285949707 -1.769034147262573 -4.940058708190918 -7.263986110687256 -9.646286964416504 -11.21702766418457 -11.4636812210083 -11.40165901184082 -9.891270637512207 -5.427464962005615 3.6655592918396 1.742243409156799 0.7706802487373352 -6.934028625488281 -13.83045291900635 + 18.06538963317871 17.25232887268066 15.33289909362793 13.93245792388916 12.52245616912842 9.988646507263184 5.418338775634766 0.6451141834259033 -3.238833427429199 -6.515908718109131 -7.432992458343506 -4.743278503417969 0.1820781975984573 -1.570407032966614 -9.396409034729004 -12.18791961669922 -9.19588565826416 -6.906168460845947 -14.42296600341797 -17.72895431518555 + 15.05443000793457 16.37663650512695 17.70572090148926 18.91182518005371 18.30153465270996 14.39801406860352 8.932284355163574 4.261475563049316 0.6362144947052002 -0.1248405501246452 2.191779136657715 2.687022924423218 -4.15589714050293 -13.19209861755371 -18.43183708190918 -18.98002433776855 -16.46874046325684 -11.46321296691895 -16.56308364868164 -20.07719802856445 + -5.537087917327881 -4.176273822784424 -0.5606800317764282 2.441699028015137 0.993984043598175 -1.350461721420288 -3.78162407875061 -4.757624626159668 -6.273262023925781 -6.783051490783691 -5.647544384002686 -3.607697248458862 -1.177781105041504 -1.170651194115635e-05 4.883847713470459 10.65908432006836 9.394406318664551 9.270697593688965 5.686070442199707 0.3233091235160828 + 21.52824783325195 24.1579532623291 26.22974586486816 22.04270362854004 13.27961444854736 8.41521167755127 8.569576263427734 11.17470741271973 5.902539253234863 -3.779788970947266 -10.78228282928467 -15.85575675964355 -18.57206535339355 -19.02480697631836 -17.4420051574707 -14.79302597045898 -11.79622364044189 -11.63099479675293 -7.382223129272461 -10.24111652374268 + 22.73174858093262 23.08975219726562 21.47014427185059 16.63557243347168 8.850260734558105 2.017651557922363 0.4573545157909393 3.762774467468262 6.82050085067749 3.410573720932007 -2.919714450836182 -7.515873908996582 -9.142491340637207 -10.26068115234375 -9.582749366760254 -10.09675216674805 -8.151313781738281 -10.46341419219971 -18.89085960388184 -22.22247695922852 + 18.12631034851074 15.45483207702637 11.53939437866211 8.04310131072998 3.53790020942688 0.2780878245830536 -0.9592297077178955 0.6267252564430237 4.941982746124268 6.307762145996094 4.390275001525879 0.8409125804901123 -1.036473155021667 -4.707476139068604 -7.088866233825684 -7.83818531036377 -9.28543758392334 -11.71403980255127 -14.83414459228516 -16.62343215942383 + -2.29499626159668 -2.961411952972412 -2.122499227523804 -0.6669596433639526 -1.868154406547546 -3.875410556793213 -4.91694164276123 -4.891730308532715 0.4568216800689697 8.197615623474121 9.696140289306641 6.704034328460693 4.585768699645996 2.476099014282227 1.091381192207336 0.4335243105888367 -0.5687254071235657 -1.496876835823059 -2.130787372589111 -5.846884727478027 + 24.05082511901855 25.09373474121094 24.21193504333496 20.36325073242188 13.02910614013672 6.454100131988525 1.52746319770813 -3.075709819793701 -6.728793144226074 -8.80589771270752 -9.460672378540039 -11.76644706726074 -14.25769233703613 -13.67530250549316 -10.29029750823975 -1.650750637054443 -0.208829939365387 -2.077195644378662 -14.20537853240967 -18.52744102478027 + 25.77254676818848 24.06040191650391 20.5677547454834 13.68278884887695 5.020671844482422 -2.12727427482605 -5.282031536102295 -6.440862655639648 -8.702506065368652 -11.12855434417725 -11.91766548156738 -11.47909927368164 -12.10610198974609 -11.86609935760498 -9.121820449829102 -1.812450408935547 5.107182502746582 4.920481204986572 -0.2710652351379395 -6.876292705535889 + 5.561813831329346 2.296516895294189 -0.6591858863830566 -3.080161571502686 -3.533051490783691 -4.745232582092285 -4.471720695495605 -3.686116218566895 -2.147258281707764 -0.5663018822669983 0.5162866711616516 0.5424752235412598 1.623911499977112 3.003451824188232 3.977317333221436 2.498654365539551 0.8724212646484375 1.875412940979004 0.8027309775352478 -0.6819630861282349 + 19.61917686462402 18.45609474182129 18.47799491882324 19.79827308654785 17.10689926147461 11.72068023681641 6.055995941162109 0.3120600879192352 -7.114355087280273 -10.52225017547607 -11.70136451721191 -8.293768882751465 -1.405723810195923 -0.828071117401123 -6.074288845062256 -8.731206893920898 -4.095196723937988 -12.754958152771 -20.17257690429688 -19.85340881347656 + 14.80952072143555 17.46819114685059 20.82170867919922 23.67953681945801 20.62967872619629 15.85824108123779 14.72475910186768 14.74053478240967 8.142818450927734 -1.516817450523376 -7.932543277740479 -13.25365257263184 -16.83670234680176 -18.73295783996582 -19.06973457336426 -14.8338737487793 -10.93320178985596 -19.29703712463379 -18.45751571655273 -10.01095199584961 + 7.482068538665771 2.326231241226196 0.8688164949417114 4.389250755310059 4.947178840637207 1.969788432121277 0.3478336930274963 -1.950579762458801 -0.6798459887504578 1.780028462409973 1.205663084983826 -1.826590538024902 -2.571975708007812 -0.3986675441265106 -0.9361929893493652 -4.171066761016846 -2.571427345275879 -1.413182735443115 -5.015262126922607 -3.782065391540527 + 16.95998382568359 19.05223655700684 20.96267890930176 20.32244682312012 14.70008850097656 7.190319061279297 2.223759651184082 -1.443077445030212 -3.278354644775391 -3.199059009552002 -0.04841838777065277 3.228098630905151 -2.527568340301514 -9.855935096740723 -13.36289215087891 -10.47643089294434 -5.752617835998535 -17.51169776916504 -21.04363632202148 -16.13993453979492 + 15.64274024963379 19.27226829528809 21.4488525390625 20.53884315490723 13.66665840148926 5.105432033538818 -0.7823804616928101 -4.142613887786865 -7.173386573791504 -9.41521167755127 -11.72210216522217 -11.10785388946533 -8.61270809173584 -3.044043064117432 3.076077938079834 1.689179301261902 0.3429312407970428 -9.090780258178711 -17.00619888305664 -18.68569564819336 + 19.27406120300293 21.01512718200684 20.60714340209961 18.0533504486084 12.44712829589844 7.032878398895264 1.493260860443115 -0.216831773519516 -0.8198972344398499 -5.150724411010742 -8.989385604858398 -14.3274507522583 -16.3749828338623 -13.28943920135498 -3.104153156280518 0.7044649720191956 -0.1911748647689819 -9.366016387939453 -14.67130661010742 -14.12605476379395 + 15.87197208404541 15.75725650787354 16.47409057617188 19.80266571044922 21.39151000976562 19.08158874511719 16.78145980834961 16.32483673095703 10.03868007659912 -0.9548486471176147 -9.011223793029785 -14.07724475860596 -17.37917518615723 -19.1207275390625 -17.84129524230957 -13.48428630828857 -12.33353710174561 -12.18802642822266 -12.13397884368896 -22.99972343444824 + 19.77115440368652 22.67024993896484 23.19706153869629 17.61261940002441 8.879744529724121 -0.4675633609294891 -8.805087089538574 -14.97460079193115 -15.98870277404785 -15.40387725830078 -15.30841827392578 -12.50540828704834 -9.714068412780762 -6.806031227111816 -0.3164576590061188 4.903091907501221 7.00535249710083 3.019530534744263 -1.439740896224976 -5.328848361968994 + 17.01533126831055 19.18019866943359 19.9151611328125 17.81879997253418 9.990311622619629 1.763305306434631 -3.084365606307983 -4.78412389755249 -5.365145206451416 -5.203848361968994 -3.580549240112305 1.362223386764526 1.751674771308899 -4.448344230651855 -10.60238933563232 -12.07896423339844 -7.70475959777832 -6.26707124710083 -12.03426933288574 -13.64316558837891 + 21.14457321166992 24.05511474609375 23.26415252685547 16.86582946777344 6.21747875213623 -5.369931221008301 -11.22651100158691 -10.98467063903809 -11.96151065826416 -14.12011528015137 -14.95305633544922 -13.99252319335938 -13.30426406860352 -11.91360473632812 -7.540650367736816 3.757909536361694 11.0077543258667 9.207610130310059 2.215277433395386 -2.368848562240601 + 29.00222396850586 28.48460388183594 25.93150901794434 21.4667797088623 15.26805686950684 8.907505989074707 3.094134569168091 -0.3704345226287842 -0.3725618124008179 1.128356575965881 -0.8198649883270264 -7.251070022583008 -11.8759126663208 -14.63476467132568 -14.83200454711914 -14.91627025604248 -15.43190670013428 -17.03767204284668 -18.12302780151367 -17.6176643371582 + -0.5229872465133667 -0.9333568811416626 -1.976774334907532 -0.825653076171875 0.7381709814071655 0.9048271179199219 1.387306094169617 1.699026107788086 -0.06231091171503067 -0.732931911945343 0.9243366122245789 3.672161340713501 6.35561990737915 4.802435398101807 1.277143716812134 -2.026589393615723 -3.49106240272522 -0.9316468834877014 -2.478273630142212 -7.779440879821777 + 12.37761497497559 8.500540733337402 3.963826179504395 2.993585586547852 2.330672740936279 0.9922259449958801 -0.5155994892120361 -2.419493913650513 -2.139281272888184 -1.493281006813049 -1.923130989074707 1.723258495330811 4.125826358795166 3.013142347335815 0.1448220759630203 -2.225801467895508 -4.866007804870605 -7.273083209991455 -8.250102996826172 -9.059732437133789 + 14.71333122253418 15.06742572784424 18.74950408935547 23.52798652648926 21.64268684387207 15.7910213470459 15.44819450378418 14.6940279006958 3.300268173217773 -6.043857574462891 -12.38335990905762 -15.97732639312744 -18.13620948791504 -18.5322151184082 -15.62265777587891 -7.273159980773926 -13.44136810302734 -15.2663459777832 -7.649264812469482 -12.60868167877197 + 48.95719146728516 38.51773071289062 28.26075172424316 18.50657081604004 9.553078651428223 2.031860828399658 -2.963486909866333 -5.224729537963867 -6.883813858032227 -8.123416900634766 -8.973358154296875 -10.01819801330566 -11.01023101806641 -11.78633785247803 -12.352614402771 -12.40237236022949 -12.7945384979248 -13.53164100646973 -14.37493133544922 -15.38752365112305 + 20.14043045043945 22.09770202636719 23.61984443664551 20.70815277099609 12.92933368682861 6.965699672698975 4.558826923370361 5.68310546875 10.17691421508789 10.27906608581543 2.949414253234863 0.4938775300979614 -1.449414491653442 -10.34737014770508 -17.76157188415527 -20.15271949768066 -20.61063957214355 -22.88518905639648 -23.28697395324707 -24.10848999023438 + 10.52316665649414 11.40132236480713 12.66412162780762 15.0340051651001 16.0078125 12.45312023162842 5.898415088653564 0.4244002997875214 -3.046837329864502 -5.709925174713135 -5.847077369689941 -1.937305450439453 3.21573805809021 0.1034991592168808 -7.329855918884277 -7.853392124176025 -4.880685806274414 -13.89130973815918 -19.94056129455566 -17.28865242004395 + 4.588668346405029 6.570792675018311 8.394368171691895 8.328991889953613 4.536696434020996 1.18450391292572 -0.8655908107757568 -2.701234340667725 -3.482176303863525 -4.731601715087891 -5.074623584747314 -6.095221042633057 -7.251790523529053 -8.958389282226562 -6.104052066802979 -1.21333634853363 2.024424076080322 4.289226531982422 5.466686248779297 1.093659996986389 + 29.94863700866699 29.49594879150391 27.16386604309082 21.51515960693359 15.09241390228271 8.721625328063965 4.970298767089844 0.9929517507553101 -5.966999530792236 -11.41642379760742 -14.27747249603271 -15.10451984405518 -12.94044017791748 -11.16920852661133 -10.04634094238281 -6.543850421905518 -5.894989490509033 -9.758112907409668 -16.5338191986084 -18.24871444702148 + 21.83877182006836 20.97796249389648 16.94112014770508 11.61819267272949 5.872594356536865 0.1224955543875694 -3.212450504302979 -4.082170963287354 -3.923421144485474 -6.459991455078125 -9.039790153503418 -8.42768383026123 -8.672144889831543 -8.221024513244629 -3.779259204864502 -0.2299136072397232 -1.772968769073486 -2.763445377349854 -6.812325000762939 -9.974555969238281 + 10.06608009338379 12.53314876556396 14.51608562469482 16.25030899047852 14.19843101501465 8.040790557861328 1.817384481430054 -3.18849515914917 -7.034405708312988 -9.931848526000977 -11.79605579376221 -11.61011695861816 -10.18306541442871 -6.639899253845215 1.248023509979248 2.217592000961304 -0.1409498453140259 -0.3832103908061981 -8.301152229309082 -11.67865180969238 + 11.47887706756592 13.86257266998291 16.45888519287109 20.15396881103516 21.92895698547363 17.73989295959473 11.87622833251953 9.149440765380859 11.01427841186523 11.71131134033203 3.032826662063599 -5.608216285705566 -12.16831302642822 -17.32048797607422 -19.42136192321777 -18.5024356842041 -13.43717670440674 -19.46553421020508 -22.80763053894043 -19.67611122131348 + -4.030637264251709 -2.885680913925171 0.1430564075708389 4.568660736083984 2.949539184570312 0.4165210425853729 1.256185054779053 5.05045223236084 11.17075157165527 12.37558078765869 7.851804256439209 4.096808910369873 -0.01647955365478992 -2.634834766387939 -3.817649126052856 -5.186172008514404 -6.909162521362305 -6.777373790740967 -7.978471279144287 -9.64290714263916 + -4.582842826843262 -4.938823699951172 -3.97158670425415 -1.191046833992004 0.4686195254325867 0.4696268439292908 0.7897435426712036 1.007123470306396 0.9759035110473633 0.7490917444229126 3.345463514328003 4.258479118347168 1.889129400253296 0.4904288053512573 -0.6166672706604004 1.178263664245605 1.760909795761108 -0.386031836271286 -0.5971260666847229 -1.098657608032227 + 18.16452407836914 15.93523979187012 12.69881439208984 9.163189888000488 5.68792200088501 3.221932411193848 1.378219723701477 0.7165012955665588 -0.04331810399889946 -2.390689849853516 -4.209126472473145 -3.840389013290405 -3.458535671234131 -5.032373428344727 -7.358416080474854 -7.793894290924072 -7.618057250976562 -7.4072265625 -8.241902351379395 -9.572412490844727 + 18.65714073181152 21.6392879486084 23.14701271057129 19.70701789855957 9.618742942810059 1.223453998565674 -3.562457084655762 -6.017216682434082 -7.231733798980713 -8.804216384887695 -9.193452835083008 -6.414642333984375 -0.6559333801269531 2.950440168380737 -1.541023850440979 -0.7578599452972412 -4.592584133148193 -11.68973445892334 -16.67496109008789 -19.80730628967285 + 25.89447593688965 28.08014678955078 28.30322265625 22.88685417175293 14.30008125305176 7.697629928588867 6.975630760192871 9.39089298248291 9.127365112304688 1.994027018547058 -6.20891284942627 -11.60031986236572 -15.35876560211182 -17.2491340637207 -17.58245086669922 -17.56136131286621 -16.83846473693848 -16.73702621459961 -17.42365837097168 -18.09022331237793 + 25.91289329528809 26.5307559967041 24.99502182006836 21.00735664367676 14.51052665710449 5.89196252822876 -2.764667510986328 -5.982351779937744 -5.862534999847412 -5.455358028411865 -5.616053581237793 -6.529488086700439 -7.304214477539062 -9.862467765808105 -9.469766616821289 -7.576248168945312 0.3342598080635071 -8.488096237182617 -21.4695873260498 -22.80195236206055 + -2.074811697006226 -1.379054188728333 0.01440542191267014 3.46073317527771 5.932763576507568 7.50106954574585 9.151447296142578 11.70153999328613 14.97406578063965 13.73254013061523 7.314203262329102 0.7578305602073669 -4.526126384735107 -7.792448997497559 -7.752913475036621 -7.687578678131104 -11.6464204788208 -12.75423908233643 -10.24080848693848 -8.686188697814941 + 5.395631790161133 6.458533763885498 7.563086032867432 10.97248458862305 14.47399044036865 13.63891887664795 6.956953525543213 0.587205708026886 -3.735230445861816 -6.338038444519043 -7.727948665618896 -5.995079517364502 -1.221249580383301 4.427247047424316 1.087075114250183 -3.115803003311157 -2.559682130813599 -8.986092567443848 -15.33430862426758 -16.54770088195801 + 7.409373760223389 7.695731163024902 8.154870986938477 9.880136489868164 12.9074592590332 14.7426643371582 13.79567050933838 12.06047344207764 12.62145519256592 11.72721862792969 2.965122938156128 -5.753271102905273 -11.96146774291992 -16.7459831237793 -18.08276176452637 -19.30992889404297 -17.38825416564941 -8.724355697631836 -7.540921211242676 -8.453221321105957 + 4.96336555480957 9.996636390686035 14.311842918396 17.83664894104004 13.37979030609131 4.466736793518066 -2.443968534469604 -6.613634586334229 -9.214696884155273 -10.84931945800781 -11.36781120300293 -10.56637287139893 -8.684598922729492 -5.701920032501221 1.975816130638123 3.872113704681396 2.062820672988892 2.185985326766968 -3.216341495513916 -6.393094539642334 + 9.937215805053711 9.546629905700684 8.942694664001465 9.494353294372559 11.37107372283936 13.71105003356934 13.10164356231689 10.91634368896484 9.760026931762695 10.16535091400146 6.406124114990234 -0.795256495475769 -5.633151531219482 -8.741108894348145 -8.804507255554199 -7.941834449768066 -17.37422943115234 -24.62496757507324 -23.34028816223145 -16.0971508026123 + 25.04638671875 28.31245040893555 30.09809112548828 25.19725608825684 17.16758918762207 13.95879936218262 14.62166595458984 11.47086238861084 2.385091066360474 -5.529094696044922 -11.06947898864746 -14.87096786499023 -17.54668045043945 -18.25679588317871 -17.60579490661621 -16.48863792419434 -16.82614517211914 -16.26765060424805 -17.22675895690918 -16.5701847076416 + 0.1861922889947891 0.9933821558952332 1.407365202903748 2.385457038879395 4.697247505187988 8.267799377441406 11.20168304443359 9.177871704101562 3.897504091262817 1.19879412651062 0.9696437120437622 3.811080932617188 6.218757152557373 2.046954393386841 -3.372447729110718 -4.264369964599609 -4.85486888885498 -12.49968338012695 -15.97949409484863 -15.48887729644775 + 10.04598236083984 10.85248279571533 12.00761985778809 14.89963817596436 17.79332160949707 16.17134666442871 10.49749565124512 6.242854118347168 4.67501974105835 6.522838115692139 8.398330688476562 3.183536529541016 -3.453681230545044 -8.892962455749512 -11.84520530700684 -12.1473217010498 -15.1132173538208 -24.09582710266113 -24.7960376739502 -20.94625663757324 + -3.491617918014526 -1.485655784606934 3.950692892074585 9.229430198669434 7.517223358154297 2.145496129989624 -1.415111064910889 -2.380982160568237 -2.882533550262451 -3.89798378944397 -1.201219081878662 4.009006500244141 3.563282012939453 -0.9534040093421936 -2.717098712921143 -2.829782247543335 -3.718904733657837 -4.624296188354492 -0.721588671207428 1.905048012733459 + 7.136748313903809 9.704776763916016 11.83459091186523 15.42144584655762 15.85572528839111 10.22522449493408 3.411412715911865 -1.60797131061554 -5.067855834960938 -6.342608451843262 -5.501177310943604 -1.083021879196167 6.475111484527588 8.123156547546387 4.048862457275391 -3.604238510131836 -14.79314231872559 -20.80034065246582 -18.90864753723145 -14.52805233001709 + 6.531763553619385 9.634510040283203 12.81524658203125 16.13408851623535 15.64743137359619 8.741541862487793 1.710421323776245 -5.35227108001709 -9.97281551361084 -10.95711803436279 -10.78933429718018 -8.797097206115723 -3.595824480056763 3.170336484909058 6.32103967666626 1.094992160797119 1.220337748527527 -7.576735496520996 -13.53053569793701 -12.44996643066406 + -7.363903522491455 -6.806900978088379 -2.836859226226807 1.175342679023743 1.479748368263245 -1.402959108352661 -3.674769163131714 -4.856005668640137 -4.591520309448242 -0.3723679482936859 8.325454711914062 10.33613681793213 6.669467926025391 3.046763181686401 1.662578225135803 0.1397121250629425 -1.543805599212646 -1.155826449394226 0.9786150455474854 0.791096568107605 + 29.80045127868652 28.91568756103516 26.60078239440918 21.97250556945801 16.60643005371094 11.04075717926025 2.602904081344604 -6.682921886444092 -10.14100074768066 -9.767416954040527 -8.65099048614502 -5.926705837249756 -5.210380077362061 -8.59261417388916 -8.445284843444824 -10.87628650665283 -13.19943046569824 -14.73625087738037 -17.3039665222168 -18.00626945495605 + -3.688560009002686 -2.818481922149658 -0.6802619099617004 2.270853519439697 1.879542589187622 0.940893292427063 0.6564497947692871 2.256100177764893 4.703661441802979 8.975269317626953 13.59372425079346 11.68512058258057 6.962771415710449 1.251905083656311 -2.763835191726685 -5.771818161010742 -7.884562015533447 -8.462206840515137 -10.35957622528076 -12.74699211120605 + 4.248004913330078 4.765432834625244 4.915815830230713 5.49687671661377 7.023930072784424 10.7000789642334 13.39191150665283 12.50377178192139 7.702636241912842 4.374923706054688 5.430500030517578 7.171112537384033 4.185420513153076 -1.677868843078613 -5.097870826721191 -5.405557155609131 -11.90072917938232 -21.51240158081055 -24.1170482635498 -22.19893264770508 + 15.75334930419922 17.19730758666992 20.7005672454834 18.72154808044434 8.951026916503906 0.6867164373397827 -3.716609954833984 -5.566258430480957 -6.311602115631104 -7.152885437011719 -5.432274341583252 1.117875218391418 6.214285850524902 -2.5494544506073 -5.128464698791504 -0.04915498197078705 -10.04692077636719 -16.14870834350586 -15.10398864746094 -12.13636016845703 + 17.97311401367188 19.76634979248047 21.39565658569336 21.74516868591309 16.75929641723633 9.467004776000977 2.849482774734497 -2.500046253204346 -5.042112350463867 -6.342464447021484 -5.623378753662109 -1.123852968215942 5.147496700286865 4.953648567199707 -2.517591714859009 -11.62445735931396 -17.46012115478516 -21.40938377380371 -22.94816970825195 -23.46565437316895 + 11.63461589813232 9.158080101013184 6.488457202911377 5.143817901611328 2.916905403137207 -0.1068479046225548 -3.112392425537109 -5.819238185882568 -7.164790630340576 -8.176109313964844 -7.564079284667969 -4.48690128326416 0.8956932425498962 7.570874214172363 1.312260150909424 -1.768796443939209 -2.289218664169312 -3.31137490272522 -3.028005123138428 1.707053899765015 + 2.926234483718872 29.14865112304688 21.47149467468262 2.439462184906006 5.501011371612549 1.643659591674805 -6.76292085647583 -2.409740924835205 -8.03907299041748 -5.249748706817627 -9.267143249511719 -5.653778553009033 -3.96656322479248 -3.667096853256226 -4.748202323913574 -1.549194693565369 -0.9463512301445007 -1.836906909942627 -3.314558506011963 -5.719235897064209 + 12.470947265625 15.11152458190918 18.02553176879883 21.29134178161621 19.52526092529297 12.10525226593018 6.312593936920166 3.845258474349976 4.148721218109131 8.307011604309082 6.77711820602417 -0.07827016711235046 -3.445091009140015 -3.363857984542847 -8.071511268615723 -18.60810089111328 -23.78367233276367 -24.94066429138184 -24.25318717956543 -21.3762035369873 + 7.031388759613037 6.56312894821167 5.011763572692871 4.739909172058105 3.760274887084961 1.649250745773315 0.7073513865470886 0.1368855834007263 0.6126673817634583 0.1664887070655823 0.4641624093055725 -1.579413890838623 -3.002885341644287 -1.619839429855347 -2.136864423751831 -2.416504621505737 -2.729471206665039 -2.035640239715576 -3.998173236846924 -11.3244743347168 + 26.10825538635254 27.87723541259766 27.57238388061523 22.53870582580566 13.55697631835938 4.377523899078369 -4.967516422271729 -9.398359298706055 -7.663876056671143 -2.978241443634033 2.235098361968994 0.4064364731311798 -5.980384349822998 -8.795235633850098 -6.909957408905029 -9.368417739868164 -15.10078525543213 -16.43280982971191 -18.18826675415039 -18.88875007629395 + -5.332527160644531 -4.412014007568359 -1.92000412940979 -0.9148799180984497 -1.788313031196594 -3.458236217498779 -4.219573497772217 -4.257562160491943 -4.52461051940918 -5.294120311737061 -4.055778026580811 -1.531636595726013 1.79312539100647 0.6853257417678833 -0.3957566916942596 1.670542120933533 2.707639455795288 5.126019954681396 11.65222549438477 18.47012901306152 + -5.89049768447876 -4.81791353225708 -1.081678628921509 5.210571765899658 8.489131927490234 6.439982891082764 1.294154167175293 -3.274646043777466 -5.840307235717773 -5.678736686706543 -4.992888927459717 -2.973397016525269 -1.036866664886475 6.145828723907471 2.573880434036255 0.356663316488266 1.453744173049927 -1.621693134307861 -1.165271759033203 6.409940719604492 + 17.66457748413086 19.16311454772949 20.8537654876709 19.46419525146484 11.7333345413208 3.940036773681641 -1.99169135093689 -6.299876689910889 -9.069355010986328 -10.85267543792725 -11.00132465362549 -8.994890213012695 -4.004629611968994 3.13444447517395 -2.397467374801636 -4.317055225372314 -2.567871570587158 -10.91507053375244 -13.57569408416748 -9.965864181518555 + 20.93514251708984 22.32027816772461 22.67409706115723 21.14582824707031 15.3944616317749 8.963449478149414 4.276293754577637 -1.209252595901489 -5.569623947143555 -9.04305362701416 -11.31122303009033 -11.90524959564209 -10.29675769805908 -5.414793491363525 -4.478218078613281 -9.073565483093262 -11.81995391845703 -9.795501708984375 -11.63317680358887 -14.15919971466064 + 12.1132755279541 12.60517501831055 13.1745548248291 14.86605358123779 17.28303146362305 18.20900917053223 16.71659660339355 15.193434715271 14.69535732269287 10.41833019256592 0.1862402707338333 -8.594590187072754 -15.08750343322754 -19.6607780456543 -21.82248306274414 -21.11617660522461 -16.99981498718262 -11.3578987121582 -14.72579193115234 -16.09602165222168 + -5.465966701507568 -3.264725685119629 0.9728610515594482 3.154532432556152 2.278740644454956 -0.3419993221759796 -2.567096471786499 -2.122959613800049 -1.745057702064514 -2.443787097930908 -2.750707864761353 -4.094523429870605 -3.222794532775879 8.81804370880127 2.149501800537109 -0.4293558299541473 1.450195908546448 3.500549793243408 1.755900740623474 4.368653297424316 + 19.10623359680176 18.27375030517578 16.36072731018066 14.52373695373535 12.06633377075195 9.84489917755127 8.277098655700684 5.320629596710205 1.419358968734741 -1.654242753982544 -3.454586982727051 -5.132024765014648 -8.012357711791992 -9.783267974853516 -9.893815040588379 -10.32134437561035 -12.21881580352783 -13.14967155456543 -14.13659381866455 -17.4360466003418 + 12.86025714874268 17.76287651062012 19.6215877532959 16.7944278717041 8.887890815734863 -0.07134453952312469 -5.687702655792236 -8.288370132446289 -9.721799850463867 -12.15043258666992 -12.64809513092041 -11.97291278839111 -11.12402820587158 -9.167056083679199 -2.822146415710449 6.055039405822754 5.621646404266357 5.278852462768555 -3.004235982894897 -6.224456310272217 + 15.44426250457764 17.72979354858398 19.69716835021973 20.67222785949707 17.2242259979248 9.833361625671387 3.39949369430542 -0.1992348283529282 -2.688804149627686 -4.334923267364502 -3.844566822052002 0.4062078297138214 2.857535600662231 -5.772940635681152 -13.67775058746338 -16.08181571960449 -13.63161659240723 -8.060153961181641 -17.29298400878906 -21.67949295043945 + 7.698844909667969 8.738471984863281 8.745844841003418 7.698896408081055 3.663897037506104 0.573648989200592 -0.3727831840515137 -2.538948535919189 -1.645619630813599 0.1504676342010498 1.366070985794067 -0.6653468012809753 -2.98711371421814 -2.646284341812134 -1.340891122817993 -6.458623886108398 -6.322549819946289 -2.637673616409302 -5.701182842254639 -5.319135189056396 + 4.066613674163818 -0.5547595024108887 -5.034553527832031 -5.277034759521484 -2.400102138519287 -0.3168928027153015 0.4989962875843048 3.530563592910767 5.426045417785645 2.565437316894531 2.01171875 1.435815572738647 2.939490079879761 4.050272464752197 1.313495516777039 0.5883401036262512 -0.6518515944480896 -1.240793347358704 -5.079005718231201 -7.871795177459717 + -1.448119401931763 0.6444759368896484 3.32461404800415 4.711866855621338 3.763662338256836 1.080332398414612 -1.286277413368225 -1.319438815116882 -1.532131552696228 -1.768378019332886 -3.707221269607544 -5.079774379730225 -3.48140549659729 -0.8008399605751038 -2.879961013793945 -3.931840181350708 0.275295615196228 -0.1360030919313431 3.79906702041626 9.772076606750488 + 12.1269359588623 11.27189159393311 10.59097862243652 10.46043586730957 10.2598237991333 10.81139469146729 9.668438911437988 6.660717487335205 4.573893547058105 3.467939138412476 5.238237857818604 5.803231716156006 -1.210148215293884 -7.493948459625244 -11.93519115447998 -14.7085428237915 -16.71599769592285 -16.05445671081543 -15.70364952087402 -17.11195945739746 + 13.12377738952637 14.76900291442871 16.54218292236328 18.39592933654785 17.37423896789551 11.19109058380127 4.846801280975342 -0.07917411625385284 -4.133964061737061 -6.860244750976562 -7.90886402130127 -7.139285087585449 -4.538718223571777 -3.392687797546387 -7.839596271514893 -11.61318588256836 -10.64090919494629 -8.868794441223145 -10.99363040924072 -12.23396301269531 + 26.81447792053223 27.96259498596191 25.43362045288086 17.52786445617676 7.419716358184814 -0.9599667191505432 -6.38667631149292 -9.264720916748047 -10.46603775024414 -12.98816680908203 -15.02329730987549 -13.95087242126465 -13.49857807159424 -11.75158309936523 -5.786628723144531 4.058955669403076 4.121197700500488 3.128490447998047 -6.040102005004883 -10.3502836227417 + 25.52299308776855 26.00387573242188 24.36669731140137 18.27095985412598 9.770153999328613 1.368101000785828 -4.337774753570557 -6.078232765197754 -7.139277458190918 -8.449238777160645 -6.285707473754883 0.8910611867904663 3.336474180221558 -2.790127038955688 -6.165754795074463 -7.770922183990479 -10.82155895233154 -14.25809097290039 -17.0772647857666 -18.35636711120605 + 17.56317329406738 19.77436637878418 20.96381187438965 20.10425567626953 15.16935634613037 8.723620414733887 2.202280759811401 -4.633536338806152 -9.062554359436035 -11.55770587921143 -13.7131872177124 -14.99067497253418 -15.49533748626709 -13.84534168243408 -7.838288307189941 -0.3781206607818604 -0.9606676697731018 0.2202225625514984 -3.724903106689453 -8.520763397216797 + 10.77509307861328 9.713216781616211 7.613139629364014 6.115299224853516 5.473390102386475 6.564493179321289 6.196128845214844 3.413422346115112 -0.02892985567450523 -3.367078304290771 -4.039168357849121 -0.102944016456604 4.495573997497559 -0.4807423651218414 -6.583694934844971 -9.843358993530273 -10.01949501037598 -5.279670238494873 -8.310620307922363 -12.30404376983643 + 16.25362396240234 18.52274513244629 20.42025947570801 20.34381103515625 15.32809066772461 7.423810958862305 1.014423608779907 -3.601566314697266 -7.054345607757568 -9.875856399536133 -11.27408123016357 -11.39995384216309 -10.55090522766113 -6.693789005279541 -0.8936566710472107 -3.154413223266602 -5.269351959228516 -2.610140323638916 -10.16194248199463 -16.7667293548584 + 3.905270099639893 4.179000377655029 5.603682041168213 8.862052917480469 10.36059665679932 8.620098114013672 6.471692562103271 7.155777454376221 9.086709976196289 10.42552947998047 2.746437788009644 -2.729669809341431 -6.542405605316162 -7.424158573150635 -6.387094497680664 -7.067750930786133 -9.778780937194824 -10.32910251617432 -11.56781959533691 -15.59007835388184 + -6.808318614959717 -7.090552806854248 -6.253806591033936 -3.689674377441406 1.446397304534912 4.566421508789062 5.933397769927979 7.514000415802002 7.479331970214844 7.777411937713623 8.614169120788574 6.021528720855713 1.703269243240356 -3.3706214427948 -6.088683128356934 -6.042318344116211 -3.703494071960449 -2.794055223464966 -2.483824014663696 -2.730587005615234 + -4.518355369567871 -2.309658050537109 -0.07686230540275574 2.702617883682251 2.256586313247681 -0.08113429695367813 -2.718752861022949 -4.201854705810547 -4.282203197479248 -5.620865821838379 -7.055092334747314 -7.958604335784912 -4.317380905151367 0.03007601946592331 -0.9952335357666016 1.324269413948059 7.6004958152771 10.07666778564453 9.924391746520996 10.22088718414307 + 5.193268299102783 18.71485900878906 7.907965183258057 1.701437592506409 2.314491033554077 0.03160341084003448 -0.7266870737075806 -1.575950860977173 -1.885913252830505 -1.634743571281433 -1.900933742523193 -2.700615644454956 -2.390077114105225 -1.362438559532166 -3.721405744552612 -2.861743450164795 -3.147173166275024 -2.292251825332642 -4.752890586853027 -4.910801410675049 + -5.400527477264404 -4.492744922637939 -1.888294458389282 1.232377529144287 2.88743257522583 1.315721392631531 -1.799540042877197 -2.02327561378479 -1.006501913070679 1.384703159332275 6.246706008911133 10.34042930603027 11.93471527099609 9.124555587768555 3.317849159240723 -1.930319786071777 -5.636334419250488 -7.022735118865967 -8.171489715576172 -8.412727355957031 + 10.08158874511719 13.33664798736572 15.84231090545654 17.82143592834473 13.8110179901123 5.529462337493896 -0.3985528945922852 -3.980654716491699 -6.574244022369385 -7.981208324432373 -7.879886627197266 -5.496023654937744 0.223065048456192 5.774120330810547 2.761629819869995 0.8614833950996399 -6.516460418701172 -15.14510059356689 -17.31759834289551 -14.75303840637207 + 22.60013008117676 24.54156684875488 23.84326362609863 19.09496688842773 10.35621643066406 0.1859720498323441 -6.529986381530762 -8.530640602111816 -9.13427734375 -12.85328769683838 -16.79564476013184 -16.80108261108398 -16.06009864807129 -15.23451805114746 -11.63305282592773 -2.050983667373657 9.135754585266113 6.994509220123291 2.099718570709229 -3.228525400161743 + 25.89415168762207 28.10893249511719 26.96290588378906 22.13865661621094 14.95983600616455 7.596179485321045 2.084829807281494 -3.544821500778198 -9.640351295471191 -13.9775915145874 -14.70730590820312 -16.57130813598633 -17.99108695983887 -18.67123031616211 -18.50144958496094 -13.6798677444458 -3.831031084060669 2.643254518508911 2.780942440032959 -2.053637504577637 + 22.93076515197754 22.75090026855469 22.0548038482666 20.26150512695312 15.51104259490967 9.472469329833984 7.012144088745117 5.358087062835693 -4.120922088623047 -14.14297580718994 -16.55397796630859 -18.74569702148438 -20.71169090270996 -19.25810241699219 -14.79666805267334 -5.918205261230469 -0.5904276967048645 1.12313711643219 -3.183269500732422 -8.452899932861328 + -5.418164253234863 -3.471637725830078 2.6681969165802 6.788909912109375 7.09466552734375 6.437314510345459 5.553920269012451 7.795188903808594 11.93319129943848 15.64833068847656 12.53702926635742 4.330926418304443 0.6339982748031616 -3.339206218719482 -3.792855262756348 -4.291908264160156 -8.324840545654297 -13.37173080444336 -16.93652725219727 -22.47480201721191 + -0.05879762768745422 0.6452949643135071 2.405997276306152 5.493192195892334 7.127470970153809 5.682305335998535 4.48931884765625 5.042030334472656 7.676459312438965 12.43595218658447 13.69847869873047 7.465067386627197 0.7681453824043274 -5.490077972412109 -8.937341690063477 -11.43538093566895 -12.79670524597168 -10.97546291351318 -11.29264831542969 -11.94329643249512 + 10.88403987884521 12.92324447631836 14.38540935516357 16.91743087768555 17.27330780029297 13.22148895263672 7.155322551727295 3.993715286254883 2.442624807357788 4.40928840637207 6.261072158813477 -0.6198334693908691 -9.670731544494629 -15.26863765716553 -17.71808242797852 -19.10515213012695 -16.69156074523926 -9.953075408935547 -8.27349853515625 -12.56636428833008 + 2.27680516242981 2.113321304321289 2.437686443328857 3.008768320083618 1.241589426994324 -1.387916803359985 -2.462588310241699 -2.975337028503418 -1.88559091091156 -0.2042010277509689 4.651990413665771 9.968090057373047 8.300644874572754 0.9605519771575928 -0.04896814003586769 -3.365617513656616 -5.978078365325928 -6.833310127258301 -5.090195178985596 -4.727645874023438 + 7.847574234008789 7.067167282104492 6.662248134613037 6.578348159790039 5.079869270324707 5.592251300811768 6.218988418579102 4.586808681488037 2.581440448760986 3.04776406288147 6.129241466522217 4.793115139007568 -1.531108379364014 -3.758066654205322 -3.071969032287598 -7.702095985412598 -11.62927913665771 -12.84663105010986 -12.25682735443115 -13.38883113861084 + 4.514105319976807 4.66682767868042 4.232834815979004 4.099987506866455 5.760811805725098 8.106185913085938 8.97283935546875 7.705116271972656 3.943045854568481 1.224737286567688 1.876956105232239 4.768482685089111 3.795475006103516 -4.402254581451416 -9.583163261413574 -11.04205894470215 -8.369756698608398 -7.266294002532959 -11.14993095397949 -11.85393905639648 + 20.3990650177002 23.50200271606445 26.11712646484375 27.20767021179199 24.64443588256836 21.54933738708496 20.01017951965332 15.03142261505127 4.738848686218262 -4.783853530883789 -10.73083591461182 -15.53164863586426 -18.9738712310791 -20.52020072937012 -20.84870910644531 -20.41202545166016 -18.743896484375 -17.63668441772461 -18.33848571777344 -16.67988014221191 + 9.542250633239746 8.481548309326172 5.684684753417969 1.996210336685181 -0.245926633477211 1.624283313751221 3.946237087249756 2.700109481811523 2.234994173049927 0.115024022758007 -0.6976653337478638 -0.5476781725883484 -1.046251058578491 -2.904873609542847 -2.946000099182129 -4.478445529937744 -4.57406759262085 -3.898633241653442 -6.183862686157227 -8.801935195922852 + 16.16145896911621 17.42645454406738 18.16004371643066 16.37112045288086 9.949515342712402 2.940956115722656 -1.942262172698975 -3.597460746765137 -4.915493965148926 -3.411347150802612 -2.519420862197876 -5.716957092285156 -10.15748882293701 -13.70100402832031 -14.29308319091797 -10.95629215240479 -1.597131013870239 -2.676204919815063 -1.170148372650146 -4.355268478393555 + 12.28768920898438 12.68321704864502 15.569580078125 19.4908447265625 16.91010856628418 8.692852020263672 2.517797946929932 -0.9263007640838623 -1.170295238494873 -0.06174460425972939 6.420377731323242 8.932571411132812 4.201237678527832 1.721729397773743 -9.224428176879883 -17.35285568237305 -19.26045417785645 -15.71762275695801 -19.16238212585449 -26.55192756652832 + 6.245744705200195 6.268002986907959 4.207524299621582 1.79872739315033 -1.229633688926697 0.7408354878425598 1.604185223579407 0.142693817615509 0.1075441762804985 -0.644679069519043 -0.08846840262413025 -1.768100142478943 -2.159897804260254 -1.129769682884216 0.2629894316196442 -2.082078456878662 -2.441042423248291 -1.899894237518311 -3.815143823623657 -4.119542121887207 + 20.05173110961914 20.88055038452148 17.51747512817383 10.19919300079346 0.5258507132530212 -7.500913143157959 -11.45216369628906 -11.26561164855957 -12.39236927032471 -13.94026947021484 -12.39535140991211 -10.40854358673096 -7.500237941741943 -0.08528272807598114 5.785986423492432 2.105387926101685 4.345167636871338 1.501741051673889 1.500825643539429 2.526839256286621 + 8.607571601867676 10.66682815551758 9.249236106872559 5.503625392913818 2.882188558578491 0.8992083668708801 -0.0635828971862793 2.035057067871094 0.9016298651695251 2.023458003997803 -1.298769593238831 -3.129651069641113 2.074720621109009 4.167274475097656 1.610644698143005 -1.834706664085388 -4.397714614868164 -9.282272338867188 -13.77460956573486 -16.84013748168945 + 17.72782897949219 13.35384750366211 9.865743637084961 8.380244255065918 7.216981410980225 4.388460636138916 0.8877004384994507 -1.852398037910461 -4.192076206207275 -8.631535530090332 -11.5961332321167 -11.11518955230713 -11.34392833709717 -12.33370208740234 -8.607263565063477 -0.6291151642799377 5.245619773864746 4.970704555511475 2.182846784591675 -3.918646335601807 + 8.837656021118164 8.571144104003906 8.405841827392578 9.54058837890625 12.27148914337158 14.57786083221436 14.13510322570801 10.99378108978271 7.196304798126221 5.435515403747559 6.295659065246582 4.651970386505127 -2.721877098083496 -10.37612533569336 -14.87836933135986 -13.88115406036377 -10.32938575744629 -14.44945526123047 -20.78187370300293 -23.49467086791992 + 23.84619140625 25.78300857543945 25.47788238525391 19.87122344970703 11.68521499633789 3.604460954666138 -5.03634786605835 -11.32021522521973 -12.02878570556641 -13.42320442199707 -13.94569301605225 -14.02375507354736 -12.19654178619385 -9.82501220703125 -5.048263549804688 -2.246386051177979 -3.514144659042358 -2.5782470703125 -1.633030891418457 -3.448371648788452 + 3.340758562088013 3.870378017425537 4.120713710784912 5.037959098815918 6.753860950469971 9.110489845275879 12.00573444366455 13.37793254852295 12.55318927764893 11.54603958129883 9.90861988067627 5.425647735595703 -2.18930196762085 -8.727770805358887 -13.10155391693115 -13.52284622192383 -11.65468502044678 -12.26611804962158 -16.727294921875 -18.86173439025879 + -9.828516006469727 -8.915326118469238 -8.974359512329102 -7.217646598815918 -2.282588720321655 2.893517971038818 4.239310741424561 7.093316078186035 6.604909420013428 2.865988254547119 1.83055579662323 3.2193443775177 5.518388271331787 7.064283847808838 3.67120885848999 0.8540105223655701 -0.3388596475124359 0.6132372617721558 -3.018272638320923 -5.892501354217529 + -2.874711275100708 -2.752830028533936 -2.014209508895874 -2.198307752609253 -2.533478498458862 -3.003878116607666 -3.114390134811401 -1.569741010665894 -0.112723134458065 0.5634764432907104 0.8838361501693726 0.2968892157077789 -0.07328982651233673 0.8557653427124023 1.598296284675598 2.840940713882446 1.994451642036438 3.354205369949341 3.775538682937622 4.084163188934326 + 15.98454570770264 15.1947603225708 14.83768558502197 15.3307991027832 15.14640808105469 12.90590858459473 9.047271728515625 4.183680534362793 -2.723320245742798 -8.632135391235352 -11.74036693572998 -12.76990604400635 -12.81839466094971 -9.959145545959473 -5.365267276763916 -5.420938968658447 -7.030534267425537 -4.051525592803955 -9.210529327392578 -12.90900325775146 + 5.808152198791504 5.720107078552246 6.113341331481934 7.924656391143799 10.49635887145996 13.1540412902832 13.37427043914795 9.870301246643066 5.203501224517822 0.6487607359886169 -1.668828845024109 -1.010637760162354 1.291379928588867 -1.743746638298035 -9.325093269348145 -12.29535293579102 -9.551430702209473 -8.369579315185547 -14.92904567718506 -20.71117210388184 + 16.51220321655273 16.43748092651367 15.49705600738525 15.38887596130371 13.89906311035156 9.833464622497559 5.09571647644043 0.7448903322219849 -3.773747205734253 -8.787490844726562 -12.47578144073486 -14.80143547058105 -15.03035926818848 -13.44840717315674 -8.022580146789551 0.2365774512290955 0.2807630300521851 0.296282947063446 -5.820065975189209 -12.06250762939453 + -9.217697143554688 -8.090685844421387 -4.641467571258545 -2.057780027389526 -1.992717146873474 -3.516020774841309 -2.843037843704224 -0.5224300026893616 -0.7823125123977661 2.480736017227173 4.146018028259277 2.472123384475708 1.546867370605469 -0.2983658909797668 -1.849201917648315 -1.127020835876465 -0.5901479125022888 3.693552732467651 9.157370567321777 14.0322151184082 + -1.976412534713745 -2.173535585403442 0.7694739103317261 3.23710298538208 0.8608817458152771 -1.77998149394989 -2.03187894821167 -1.642399668693542 1.260336756706238 7.953809261322021 9.447467803955078 5.30814266204834 0.04628446325659752 -5.822784900665283 -4.83160400390625 -4.831812381744385 -5.098841190338135 -1.812971591949463 2.025947093963623 1.092775464057922 + -6.570667266845703 -4.6805739402771 -1.852029085159302 0.08193914592266083 -0.2363552004098892 -1.678380131721497 -3.177366495132446 -3.337771654129028 -2.952064275741577 -2.232300519943237 -1.573031067848206 -1.594407320022583 -2.042798280715942 -2.983182191848755 0.3691272139549255 3.700782060623169 5.453786373138428 10.41572380065918 10.58175373077393 4.307811260223389 + 1.787362694740295 2.793349504470825 3.836597919464111 5.649247646331787 8.752525329589844 12.60365104675293 12.86293697357178 8.05153751373291 4.367712020874023 4.074845790863037 7.052967548370361 7.244086265563965 -0.05366810783743858 -7.330480575561523 -10.00409126281738 -8.005287170410156 -6.356993675231934 -15.1110372543335 -18.3768482208252 -13.83841419219971 + 2.341654539108276 2.388215780258179 2.863267183303833 4.648303031921387 8.122657775878906 11.42584133148193 12.51743698120117 11.02591419219971 8.554328918457031 8.951103210449219 7.793797969818115 0.411314457654953 -7.197686195373535 -12.37596797943115 -14.07142066955566 -13.0402364730835 -8.43012809753418 -7.47089147567749 -9.221945762634277 -9.23554515838623 + -2.109720230102539 -1.5848708152771 1.873279213905334 7.853331565856934 6.608457565307617 1.915987849235535 -1.072176456451416 -3.109765529632568 -5.152875900268555 -5.94966983795166 -5.459291934967041 -3.629111766815186 -2.284777402877808 0.5669218301773071 8.365090370178223 6.38809061050415 2.966304779052734 0.7316229343414307 -2.428706169128418 -4.488123893737793 + 18.11464691162109 17.04067039489746 15.46302890777588 13.02914142608643 8.66083812713623 4.241238117218018 0.1176207438111305 -2.475629091262817 -3.161414384841919 -5.331512451171875 -7.091492176055908 -5.272529125213623 -3.315841913223267 -2.177387475967407 -3.030715465545654 -5.545974731445312 -7.453866481781006 -9.154640197753906 -10.69330310821533 -11.96286869049072 + -7.152008056640625 -4.281537532806396 1.351773381233215 5.114845752716064 4.510157108306885 2.515305042266846 1.736945033073425 1.729850888252258 0.6823156476020813 -0.1912119686603546 -1.01634156703949 -2.340070724487305 0.7699002027511597 0.1453834772109985 0.02102604135870934 -0.6207496523857117 -1.611258149147034 -3.454113960266113 -0.8278251886367798 2.917616605758667 + 9.232468605041504 10.09817695617676 11.44250774383545 13.9641284942627 13.49008178710938 7.798350811004639 1.654053807258606 -3.256836414337158 -6.486809253692627 -8.684080123901367 -8.676959037780762 -5.96602201461792 0.1038316115736961 3.271592855453491 -2.433842420578003 -5.343145370483398 -2.0563805103302 -7.70362663269043 -11.05433559417725 -9.393156051635742 + 11.3211088180542 10.30084133148193 8.714303970336914 8.196332931518555 8.060892105102539 6.808402061462402 3.831996202468872 0.652700662612915 -2.153224945068359 -4.997282028198242 -6.756732940673828 -5.48879337310791 -2.711465358734131 1.958363890647888 -0.6092830300331116 -5.806711673736572 -7.736612319946289 -5.348489761352539 -6.235086441040039 -12.00126171112061 + 11.96300792694092 12.53170776367188 8.439566612243652 6.113806247711182 6.259037971496582 5.941214084625244 7.968895435333252 8.847665786743164 7.777585983276367 2.564042329788208 -1.488135576248169 -3.309003114700317 -5.532947540283203 -7.894922256469727 -7.109066963195801 -6.037189960479736 -6.409726619720459 -10.09978866577148 -14.47838592529297 -16.04736709594727 + -1.172796130180359 -0.1036691814661026 3.157508134841919 5.005873203277588 3.929879665374756 0.04579575732350349 -1.657067775726318 -2.327197313308716 -2.822494029998779 -3.302454471588135 -3.811484575271606 -3.67184042930603 -5.60439920425415 -3.971993923187256 -0.9259896278381348 1.074672222137451 2.243359565734863 5.628334999084473 5.614348411560059 2.671618938446045 + 3.512696743011475 1.096527457237244 -0.6281859874725342 -0.7485429644584656 0.5178734064102173 -0.3651645183563232 -0.7127798795700073 -2.345064878463745 -2.432967901229858 -2.26310658454895 -2.034166812896729 -2.083575248718262 -1.449461221694946 0.8295428156852722 -0.70797199010849 -1.382944107055664 1.025775074958801 3.812258243560791 3.899998426437378 2.459261178970337 + 2.429807424545288 3.187890529632568 5.378279209136963 6.000016212463379 4.466296195983887 2.91185998916626 0.9844428896903992 -1.477342844009399 -2.199348449707031 -2.298166513442993 -1.367229223251343 0.08722665905952454 -3.61474347114563 -6.213674545288086 -2.892201900482178 -1.260724186897278 -2.151336431503296 -1.416283965110779 -0.550739049911499 -0.00402315566316247 + 14.52378749847412 16.6730785369873 19.1119499206543 17.22778511047363 9.291229248046875 1.790346741676331 -3.118408203125 -3.548830032348633 -3.531383991241455 -1.608735203742981 4.218640804290771 7.31464147567749 3.481146574020386 1.081024765968323 -7.068146228790283 -16.28680038452148 -19.13638496398926 -16.59426689147949 -11.00821685791016 -12.81246280670166 + 3.692018508911133 5.628849506378174 7.832692623138428 11.53136348724365 13.04549980163574 8.675453186035156 2.028456687927246 -2.84373927116394 -5.490196704864502 -7.426167488098145 -8.206168174743652 -7.061071872711182 -4.723628520965576 -0.3768564462661743 3.87096118927002 -1.735897183418274 -2.740102529525757 0.1546860039234161 -5.976396560668945 -9.87975025177002 + 16.16242599487305 18.2116870880127 20.05804824829102 22.24453544616699 22.07296752929688 18.55509185791016 15.19608306884766 15.21150779724121 14.64852905273438 7.719002246856689 -1.769524931907654 -8.865024566650391 -15.03671550750732 -19.52850151062012 -21.77362823486328 -22.65321731567383 -20.66617584228516 -17.67313003540039 -20.46086311340332 -21.65310859680176 + 28.15493965148926 26.31645965576172 22.09249877929688 15.63876724243164 8.021668434143066 3.506574153900146 4.89709997177124 8.966142654418945 7.682575225830078 0.7692403793334961 -5.459128379821777 -10.63140773773193 -12.70171737670898 -14.02644157409668 -12.66135215759277 -12.88409805297852 -14.31961154937744 -14.34045124053955 -13.3057804107666 -15.71598052978516 + 20.48115348815918 23.84610366821289 23.25873565673828 17.72960090637207 8.124981880187988 -1.403685212135315 -6.072505950927734 -7.492461681365967 -9.476207733154297 -12.23296165466309 -13.57093715667725 -12.11631202697754 -10.83927917480469 -7.927901268005371 -0.5167157649993896 8.051298141479492 7.771177291870117 -2.611780643463135 -11.50110244750977 -13.50121021270752 + -9.201011657714844 -7.988215446472168 -5.149657726287842 -1.251887679100037 0.4118910431861877 -0.6776695847511292 -1.663016796112061 -2.084519624710083 -2.385931491851807 -1.912577152252197 -1.813396573066711 -2.126807451248169 2.982677459716797 6.587588310241699 8.439833641052246 6.018701076507568 5.55783224105835 3.078472852706909 2.011021137237549 1.166679859161377 + 0.08954151719808578 0.2202292382717133 3.421765804290771 6.276632308959961 4.703573703765869 2.273778915405273 -0.4053238928318024 -2.012648582458496 -3.465083122253418 -4.702807426452637 -2.802443265914917 -2.402425050735474 -2.552382707595825 -5.434629917144775 -5.399964332580566 -1.856257796287537 -4.965855598449707 1.25382399559021 7.27832555770874 10.48214626312256 + 11.18907260894775 11.73231315612793 11.04765605926514 12.22256374359131 15.83541488647461 18.46990585327148 19.01543426513672 18.75796508789062 18.2039794921875 12.02499866485596 0.6351144909858704 -7.118268966674805 -12.3120641708374 -16.5434627532959 -18.81189918518066 -16.49979400634766 -14.38820266723633 -19.86294937133789 -21.32654571533203 -22.27123069763184 + 13.02842807769775 10.86863994598389 7.294010162353516 5.918304920196533 5.722743511199951 5.950034141540527 5.150651454925537 3.129361391067505 -1.551511406898499 -7.276643753051758 -9.330766677856445 -9.050996780395508 -8.989059448242188 -5.652007102966309 3.008387565612793 1.174135446548462 -0.8717693090438843 -0.4941126704216003 -7.436751365661621 -10.59107112884521 + 10.80727195739746 11.62981033325195 13.01964092254639 15.56442642211914 16.35092544555664 11.84114265441895 5.384622573852539 0.1702777296304703 -3.451409816741943 -7.103994369506836 -8.973663330078125 -8.735379219055176 -7.914924144744873 -4.197132110595703 0.8146427273750305 -3.325746297836304 -5.976436614990234 -4.152822971343994 -12.45363903045654 -19.297607421875 + 14.72954273223877 16.08261108398438 14.17352676391602 11.88899421691895 7.473514080047607 1.529868960380554 -2.953817367553711 -5.173144817352295 -6.694506168365479 -8.938716888427734 -9.363166809082031 -8.236028671264648 -5.627835750579834 0.7493261098861694 -0.5223051905632019 -5.783594131469727 -3.531458139419556 1.223669767379761 -4.0694580078125 -6.957036018371582 + 16.72555541992188 15.26893901824951 11.5390625 8.025328636169434 1.746574878692627 -4.360284805297852 -7.747194290161133 -9.38283634185791 -9.792986869812012 -10.40388584136963 -10.06481838226318 -8.170990943908691 -5.678887844085693 -3.475198030471802 -3.164578676223755 0.7308672666549683 3.477402925491333 6.308117389678955 5.589455604553223 2.830361366271973 + 7.345042705535889 8.680426597595215 9.749619483947754 12.49200248718262 15.73318386077881 15.27023792266846 10.12906646728516 4.700282096862793 1.922553539276123 1.018091917037964 3.698895692825317 7.969869613647461 7.611150741577148 4.163828372955322 -2.567738056182861 -12.87359619140625 -21.41029930114746 -25.05918884277344 -22.71145629882812 -25.86196327209473 + 18.71936988830566 20.68647575378418 23.41899299621582 22.76237678527832 15.78819370269775 9.799668312072754 7.765241622924805 9.587062835693359 10.38189888000488 3.341527700424194 -4.944698333740234 -10.29120063781738 -14.14022159576416 -15.70387744903564 -13.80038070678711 -8.58829402923584 -16.18624687194824 -21.13409233093262 -20.62886810302734 -16.83290672302246 + 27.87442016601562 26.96112251281738 24.0582103729248 19.32543182373047 12.84800243377686 5.682741165161133 3.51162052154541 4.850452423095703 -1.909026265144348 -12.72551155090332 -15.08962535858154 -9.714102745056152 -3.31471586227417 -10.95889663696289 -11.41346836090088 -8.323419570922852 -7.359457015991211 -9.401535034179688 -15.79771423339844 -19.10453033447266 + 10.07621288299561 7.797087669372559 3.951492309570312 0.3331794142723083 -1.459578037261963 -5.277621746063232 -4.554242610931396 -3.164191961288452 1.188359260559082 2.639423847198486 3.018832921981812 2.21898365020752 1.448704242706299 -0.2560862004756927 -0.7721953988075256 -2.158268213272095 -3.343647003173828 -3.830219030380249 -4.08119535446167 -3.775028228759766 + 14.14085388183594 18.24298095703125 21.36625671386719 20.00353813171387 10.84364986419678 1.21229350566864 -4.475771427154541 -7.729876041412354 -9.343160629272461 -10.68409729003906 -11.19771862030029 -9.997315406799316 -7.551893711090088 -2.443511486053467 3.020612716674805 -0.6816856861114502 -1.046849370002747 -2.333725452423096 -9.136162757873535 -12.20838832855225 + 4.831536769866943 4.856345176696777 5.052229404449463 4.323375225067139 2.620728969573975 1.240252256393433 1.285614728927612 1.274769425392151 2.714488506317139 3.533999919891357 1.331077337265015 -1.702780246734619 -7.298985958099365 -2.362451791763306 -1.748149394989014 -2.798870086669922 -3.557214736938477 -3.920377492904663 -4.58315896987915 -5.092426776885986 + -8.770161628723145 -6.593889236450195 -2.424760103225708 2.594765424728394 5.37811803817749 2.913643598556519 0.1374624669551849 1.340630531311035 0.233826532959938 -0.5468482971191406 0.6904201507568359 4.214969635009766 6.88810396194458 5.09185266494751 0.9326309561729431 -0.2858251929283142 -1.985121726989746 -1.640618681907654 -3.88466477394104 -4.284529209136963 + 21.96732521057129 24.21925163269043 23.86867523193359 19.26315307617188 11.19740009307861 2.215265035629272 -3.387691259384155 -5.112757682800293 -7.165873050689697 -10.0352029800415 -11.95029830932617 -12.50530338287354 -13.10330200195312 -13.46958160400391 -11.35860157012939 -2.521730422973633 4.336183547973633 2.053223609924316 -5.4366135597229 -13.07352256774902 + 3.342934131622314 4.287295818328857 4.96614933013916 4.633366107940674 4.337628841400146 3.09008526802063 2.305321455001831 1.343788623809814 1.644765138626099 0.1375970840454102 -2.512146949768066 -7.56221866607666 -1.288949847221375 -2.610968828201294 -1.305450797080994 -0.7630775570869446 -2.601759910583496 -2.755043268203735 -4.275901794433594 -4.413410663604736 + 22.1788444519043 24.56454467773438 25.83176803588867 20.61639785766602 12.94971656799316 8.714364051818848 8.60114860534668 13.73898029327393 13.36184597015381 7.382289886474609 4.262598991394043 -3.105434656143188 -13.70510578155518 -19.30609130859375 -20.0294017791748 -19.6268482208252 -20.40436363220215 -21.70120429992676 -22.05267906188965 -22.2713737487793 + 17.08452606201172 18.63121795654297 17.28200340270996 10.18600940704346 0.9047264456748962 -5.769303321838379 -8.870579719543457 -9.263986587524414 -9.583680152893066 -9.771441459655762 -7.365384101867676 -2.126832962036133 4.993155479431152 4.14546537399292 3.043732881546021 0.4034484624862671 -4.596707820892334 -4.000100135803223 -4.001798152923584 -11.32447528839111 + 3.308281421661377 0.7628875374794006 -0.6617570519447327 -0.05335136130452156 2.597671747207642 6.354086399078369 8.23735523223877 8.332303047180176 6.223223209381104 5.031754493713379 8.093350410461426 9.925691604614258 2.418773174285889 -4.871974468231201 -9.15618896484375 -12.22183132171631 -11.66841697692871 -7.352973461151123 -6.765195369720459 -8.53369140625 + 13.52341556549072 14.92821788787842 16.83053779602051 19.57003211975098 19.61124801635742 14.55799102783203 9.966564178466797 8.374958992004395 9.971537590026855 12.65628528594971 9.050710678100586 4.956510066986084 2.693578958511353 -8.44794750213623 -19.81601333618164 -24.96413803100586 -25.53888130187988 -26.25833511352539 -25.2250804901123 -26.44122314453125 + 2.227933406829834 3.742212057113647 5.66429328918457 8.46546745300293 12.21207523345947 12.14280033111572 7.173071384429932 2.207161426544189 -0.3620262145996094 -0.1362887322902679 3.184273958206177 8.550507545471191 6.411488056182861 2.474506139755249 0.4528176784515381 -8.577210426330566 -15.63698959350586 -19.28199005126953 -16.41607284545898 -14.49803638458252 + 7.692607402801514 10.89262771606445 13.92684936523438 16.72857856750488 16.56256484985352 10.2755651473999 3.975806474685669 -0.8361673951148987 -3.162058591842651 -1.791858434677124 2.535933971405029 7.296338081359863 8.919187545776367 6.461850166320801 -4.072275638580322 -16.53657722473145 -22.56225204467773 -24.55673408508301 -20.20475006103516 -11.54522228240967 + 12.82986450195312 14.95521831512451 19.14453315734863 20.5372428894043 11.2462911605835 1.551305532455444 -5.443355560302734 -10.95425605773926 -15.02199935913086 -15.36999988555908 -15.22126388549805 -12.65652179718018 -7.642220020294189 0.1088813841342926 1.906976103782654 1.661651968955994 3.659494638442993 -1.161453127861023 0.3513465225696564 -4.481740951538086 + 2.498115301132202 2.269802093505859 5.42523717880249 8.504334449768066 5.693159580230713 1.334556221961975 -0.8337335586547852 0.5078381299972534 3.238528490066528 8.719211578369141 8.290030479431152 3.340613126754761 0.3521939814090729 -2.624809741973877 -3.853048801422119 -5.220168113708496 -7.487966060638428 -9.298221588134766 -9.22874641418457 -11.62692260742188 + 2.680857419967651 3.003198385238647 3.409420490264893 5.929980754852295 9.358918190002441 12.19396495819092 9.532551765441895 2.128130674362183 -4.209565162658691 -5.676620960235596 -5.773328304290771 -2.54345703125 6.447335720062256 8.718700408935547 3.022321462631226 -0.1908483952283859 -3.507422685623169 -13.78666210174561 -17.14689254760742 -13.590576171875 + -0.1238657087087631 -0.7467499971389771 -0.8606674075126648 0.9500460028648376 2.272556304931641 0.306546539068222 -1.757795810699463 -3.261495113372803 -5.63302755355835 -5.860240936279297 -1.687984704971313 5.435196399688721 5.633073806762695 2.441767454147339 3.242724180221558 2.501389026641846 0.7468942999839783 -2.209927558898926 -1.621481895446777 0.2330401837825775 + 22.27009773254395 20.58505058288574 19.32877922058105 19.19776725769043 16.04549217224121 11.43531513214111 8.545010566711426 5.04408597946167 0.08544245362281799 -3.480097770690918 -5.938987255096436 -8.133966445922852 -9.961761474609375 -13.2747974395752 -13.28524494171143 -11.297776222229 -5.769373893737793 -7.27945613861084 -20.25574493408203 -23.85982894897461 + 15.13276290893555 16.72235107421875 19.29923439025879 20.15243911743164 13.83577728271484 6.385299682617188 2.19368314743042 0.2870577275753021 -0.6039847731590271 0.6380589604377747 7.863599300384521 11.77124118804932 8.427032470703125 -0.9672374725341797 -14.1384916305542 -21.31941795349121 -23.57412338256836 -23.38068389892578 -19.86440086364746 -18.86019897460938 + 20.61358833312988 23.81437301635742 25.30980491638184 20.18338012695312 10.429856300354 1.001171350479126 -6.638706684112549 -12.31037044525146 -13.61087894439697 -14.84149646759033 -14.65114593505859 -12.03194427490234 -6.596310615539551 1.112412214279175 5.595176219940186 5.701927185058594 0.119323655962944 -9.245035171508789 -12.44776439666748 -11.50736236572266 + 20.02503967285156 22.21102714538574 26.78817176818848 28.51939010620117 22.7094554901123 19.15492057800293 19.01291084289551 10.40171527862549 -0.4550841450691223 -8.042952537536621 -13.44649314880371 -16.64340591430664 -18.4780158996582 -18.71750831604004 -18.29573631286621 -16.42117881774902 -13.69264221191406 -16.98819923400879 -12.51419353485107 -15.12720489501953 + 14.88516807556152 16.10471534729004 18.13610076904297 19.50263786315918 15.91295433044434 9.245290756225586 3.499725103378296 -1.481967806816101 -4.86527681350708 -6.488455772399902 -3.973629236221313 0.9033311009407043 1.895107626914978 -4.194590091705322 -7.035339832305908 -7.669322490692139 -13.8880672454834 -19.35153007507324 -17.51463890075684 -13.62220096588135 + 15.62930965423584 16.86459541320801 18.74105072021484 21.14679145812988 20.12394332885742 15.97838973999023 12.86601257324219 13.91710376739502 13.96356678009033 5.734773635864258 -2.778235673904419 -6.146415233612061 -6.230354785919189 -6.765965938568115 -14.22164535522461 -21.95081520080566 -25.08389282226562 -24.56394004821777 -23.0617790222168 -24.16248893737793 + 10.39857959747314 9.902873039245605 10.43587493896484 15.12217330932617 15.31923770904541 8.907997131347656 2.8302161693573 -0.4043548107147217 -3.749866724014282 -4.582551956176758 -0.7010706067085266 3.783650875091553 -2.94155740737915 -7.834283828735352 -6.707688331604004 -4.993249893188477 -13.40748691558838 -16.62495231628418 -8.052194595336914 -6.701350212097168 + 8.757573127746582 10.01415920257568 11.31327152252197 13.79831600189209 16.26449966430664 15.59647178649902 11.34064960479736 7.384111404418945 5.735970497131348 8.124849319458008 10.93261241912842 8.599547386169434 6.78111743927002 2.014044761657715 -11.55905818939209 -22.03640937805176 -27.67374420166016 -28.98818206787109 -25.71052360534668 -20.68927383422852 + 11.60599708557129 15.20479106903076 18.75311660766602 20.60714340209961 14.90422916412354 6.514626979827881 0.3688325881958008 -3.631831884384155 -5.889451503753662 -6.719012260437012 -5.461198329925537 -0.6609947085380554 4.922869682312012 -2.042565584182739 -9.40633487701416 -9.12317943572998 -3.453888654708862 -11.64505958557129 -17.42349052429199 -17.42458915710449 + 19.01464462280273 21.14679527282715 22.83805274963379 21.0030403137207 12.57469654083252 4.288835048675537 -3.159780263900757 -9.476808547973633 -11.30855751037598 -11.46416187286377 -9.432809829711914 -3.914461135864258 5.125019550323486 5.052341938018799 0.2600426375865936 -5.825098991394043 -7.427604198455811 -11.82730197906494 -18.64381980895996 -18.82307243347168 + 12.30899620056152 11.9555082321167 10.83330821990967 8.842498779296875 3.896013975143433 0.2282551527023315 -0.4788022935390472 -2.572926759719849 -3.632532835006714 -3.584671974182129 -3.35651683807373 -3.341462135314941 -3.818673849105835 -4.564336776733398 -0.5857362747192383 1.896973133087158 -2.874486446380615 -6.29917573928833 -7.014914512634277 -7.837318897247314 + 3.296769380569458 3.547193050384521 5.272069931030273 6.67866039276123 2.41662335395813 -2.836133003234863 -5.373547554016113 -6.121944427490234 -6.972627639770508 -7.586311817169189 -7.345023632049561 -6.884947776794434 -4.093441009521484 0.8166292905807495 0.9748799800872803 3.747726917266846 8.830391883850098 5.862343311309814 3.557900905609131 2.212787866592407 + -7.826388835906982 -7.62874174118042 -4.937259197235107 -0.8020728230476379 2.141714334487915 1.761100649833679 -0.7069389224052429 -3.700064659118652 -5.26003360748291 -4.515527725219727 -2.649164438247681 0.229227676987648 2.087120294570923 7.220807552337646 4.123185634613037 2.464181184768677 2.05262279510498 0.3679012060165405 3.867342948913574 11.7109842300415 + 10.97468948364258 10.96027565002441 12.10276317596436 14.61746311187744 15.65119647979736 11.7838306427002 6.285211563110352 3.373393774032593 3.948726892471313 6.970715045928955 5.968252658843994 -1.579415440559387 -7.268170833587646 -8.547689437866211 -5.455753326416016 -9.339248657226562 -17.88034057617188 -21.75579833984375 -16.23410034179688 -14.57599067687988 + -1.151786923408508 0.3562232255935669 4.105234622955322 4.6091628074646 1.121737599372864 -3.196008443832397 -4.702627658843994 -6.648385047912598 -7.236968040466309 -7.154190540313721 -6.574336051940918 -5.02200174331665 -1.13543164730072 -5.101800918579102 -2.871386528015137 2.9462571144104 3.081861972808838 7.378602981567383 15.5444860458374 11.65135955810547 + 11.34338188171387 11.19913387298584 12.50715827941895 15.84076881408691 17.10323143005371 12.29142570495605 6.988306522369385 4.413517951965332 5.027740478515625 8.428199768066406 8.23624324798584 1.152420997619629 -2.592719793319702 -3.07826042175293 -11.90985202789307 -20.47063827514648 -22.3043327331543 -18.75558471679688 -13.5499792098999 -21.8701286315918 + 9.078579902648926 9.186633110046387 9.339278221130371 10.55455684661865 12.47384452819824 12.83367919921875 9.073692321777344 3.734415054321289 -0.6726703643798828 -4.320102691650391 -6.029776096343994 -5.125953674316406 -1.246421217918396 1.966521739959717 -4.535735130310059 -9.616764068603516 -10.02407932281494 -6.061404228210449 -12.49483585357666 -18.11346244812012 + -2.280097246170044 -2.68834924697876 -3.311764240264893 3.520923376083374 10.89420032501221 4.839663028717041 -3.218804121017456 -3.714579820632935 0.2111168950796127 -0.06632798165082932 -1.835359334945679 1.055355668067932 4.26752758026123 4.854606151580811 0.6746150851249695 -1.810803651809692 -2.038526058197021 -2.780031204223633 -2.86063027381897 -3.712734699249268 + 15.6898775100708 14.25310516357422 12.00113677978516 8.265121459960938 2.769523859024048 -1.839638710021973 -4.366783618927002 -5.091458797454834 -5.524468898773193 -6.214487552642822 -6.849764823913574 -4.835565090179443 -1.781233191490173 -2.874162197113037 -5.832647800445557 -3.938868522644043 -2.314552545547485 -3.232621431350708 -1.063970565795898 2.781453609466553 + 20.71076965332031 17.25700569152832 13.16612339019775 8.311223030090332 2.24157977104187 -2.576900243759155 -5.553876876831055 -5.902385711669922 -5.546775341033936 -4.485719203948975 -2.10135293006897 -0.6028069853782654 -1.887004613876343 -2.969450950622559 -4.074849128723145 -5.083820819854736 -5.638541698455811 -3.910549879074097 -5.090580940246582 -6.262086868286133 + 31.8298454284668 28.44303131103516 22.73410987854004 17.41254043579102 11.26890087127686 3.803855180740356 -1.837916135787964 -5.268406391143799 -6.438517093658447 -3.545932769775391 0.05899094045162201 -4.288939952850342 -10.38533020019531 -11.67748832702637 -11.13669490814209 -10.58297443389893 -11.13157558441162 -12.50732326507568 -13.26161670684814 -13.48856925964355 + -4.754414081573486 -4.29445219039917 -3.168632984161377 0.1290164440870285 3.570644378662109 3.314040184020996 1.955246329307556 1.348280191421509 -0.8042680025100708 -2.629224300384521 -4.914752006530762 -2.001047611236572 5.124592781066895 6.069299697875977 0.1415419578552246 -3.626595497131348 1.771703362464905 3.683246374130249 -2.327579259872437 1.41335654258728 + 2.639788150787354 2.159015893936157 4.708622455596924 8.607648849487305 5.801329612731934 0.7648182511329651 -0.3380908071994781 -1.544275879859924 -4.542886257171631 -6.16004467010498 -2.698446750640869 0.9262956976890564 9.940608024597168 -0.7314932942390442 -2.589507102966309 2.756600618362427 -3.510427951812744 -5.458281993865967 -4.096356391906738 -6.634921550750732 + 16.85803985595703 17.09976005554199 17.47396850585938 18.36672401428223 17.34212684631348 13.70298385620117 9.851248741149902 7.641875743865967 8.03339672088623 7.617740631103516 2.199268817901611 -4.893833160400391 -11.72187900543213 -17.10725593566895 -18.81849098205566 -18.74653053283691 -15.40892887115479 -12.58003807067871 -16.79844856262207 -20.11173057556152 + 22.06707000732422 35.62493133544922 11.812819480896 6.424155712127686 7.10381031036377 -0.05969046056270599 -1.284817695617676 -2.963520526885986 -2.958014249801636 -4.077013969421387 -5.650639533996582 -6.130179405212402 -5.849739551544189 -5.752974987030029 -6.697713851928711 -7.910535335540771 -7.863702297210693 -8.072952270507812 -9.230849266052246 -8.530439376831055 + 11.97937107086182 12.09840774536133 12.05047702789307 13.27731323242188 14.60399723052979 13.96254253387451 9.541193008422852 4.33142614364624 0.5711573958396912 -2.765728235244751 -3.445377588272095 -0.4580845832824707 2.504267692565918 -3.52159857749939 -11.50433444976807 -14.44248008728027 -14.24422454833984 -9.923008918762207 -15.01983261108398 -19.59549331665039 + 14.88490581512451 14.43462181091309 13.64084434509277 13.18804931640625 13.96810245513916 15.41825389862061 14.65137481689453 14.75992298126221 14.53237533569336 8.346854209899902 -0.5528849363327026 -7.38205623626709 -12.75345230102539 -15.72228336334229 -17.83517646789551 -21.49028015136719 -24.21296119689941 -19.11733627319336 -11.10431289672852 -7.654553413391113 + 11.57993221282959 10.86910057067871 9.292579650878906 5.34028959274292 2.997883796691895 5.224020481109619 6.902576446533203 5.95371675491333 3.218202590942383 1.304577112197876 4.576533317565918 5.49297571182251 -1.158196091651917 -8.633240699768066 -11.69718551635742 -15.56486129760742 -11.68460178375244 -5.742196559906006 -8.887182235717773 -9.384926795959473 + -5.013375282287598 -1.957106828689575 3.936692714691162 7.770921230316162 7.280149459838867 4.715601921081543 1.489615082740784 0.7599493861198425 -0.2818634510040283 -0.6248555779457092 -1.59972870349884 -2.472980976104736 -4.103787899017334 0.1207979917526245 0.1578272730112076 -2.168327808380127 -2.566078424453735 0.3693423271179199 -1.567225098609924 -4.245570182800293 + 11.8250675201416 11.75462341308594 13.146484375 14.40010833740234 8.680706024169922 2.451049566268921 -2.276995182037354 -7.947771549224854 -10.78728294372559 -11.6722354888916 -10.47933006286621 -8.248405456542969 -2.564605236053467 4.413960456848145 1.477530360221863 2.645415782928467 0.5283230543136597 -4.487845897674561 -3.822267532348633 -9.036537170410156 + 8.18290901184082 8.990080833435059 10.58115482330322 15.59363746643066 18.85009002685547 11.41630840301514 3.00689435005188 -2.788646936416626 -4.043056488037109 -2.216956615447998 4.225522994995117 2.624749183654785 -6.408520221710205 -10.62216949462891 -10.82849788665771 -8.878623962402344 -5.606212615966797 -9.247514724731445 -9.171202659606934 -13.65995407104492 + 1.122125148773193 2.340639591217041 4.852828979492188 9.07249641418457 10.91962146759033 7.267090797424316 2.862101554870605 1.919704437255859 0.273803323507309 -2.294070482254028 -3.884986162185669 -5.235678672790527 -3.864643096923828 5.882376194000244 -1.578886032104492 -6.334455490112305 -5.514403343200684 -0.7279078364372253 -8.353438377380371 -8.724315643310547 + 17.14527130126953 20.26199722290039 23.17537879943848 24.0041675567627 18.14511871337891 11.01581954956055 8.574430465698242 10.4360818862915 12.49145889282227 5.829493999481201 -3.923637628555298 -10.94857788085938 -16.28080368041992 -18.94600868225098 -19.85500526428223 -17.23432922363281 -9.003313064575195 -16.8664608001709 -20.5401611328125 -17.48090934753418 + 10.55026245117188 9.129498481750488 6.626078128814697 4.33876371383667 4.654973030090332 8.004281044006348 10.71401214599609 10.78413486480713 10.3967866897583 11.53522109985352 8.377507209777832 0.4597346186637878 -7.171211719512939 -11.95686149597168 -14.46788787841797 -18.23646354675293 -19.71159172058105 -10.51286029815674 -6.559005260467529 -6.955362796783447 + 15.84598350524902 19.43674087524414 22.85293197631836 24.50748634338379 20.79323768615723 16.51449394226074 15.64095592498779 13.840989112854 5.013079643249512 -4.427651882171631 -10.018310546875 -14.97299289703369 -19.46054077148438 -21.31647872924805 -21.76855278015137 -20.36329650878906 -12.68413925170898 -10.14741516113281 -13.79270839691162 -5.493778228759766 + 13.94381904602051 16.43526268005371 18.66817283630371 21.15324783325195 20.96892738342285 16.19882202148438 11.53557300567627 11.19319820404053 11.63861274719238 5.517746925354004 -3.452783346176147 -10.59959888458252 -16.6658878326416 -20.53487396240234 -21.84101676940918 -23.30248641967773 -21.42453956604004 -13.75922393798828 -5.866023540496826 -9.806961059570312 + 5.420772075653076 3.181998491287231 0.9735147356987 0.5510501265525818 3.229780673980713 5.21458625793457 4.726947784423828 2.143694400787354 1.255003809928894 3.039951086044312 3.897990703582764 1.44657826423645 -1.896672368049622 -3.810643911361694 -4.312219619750977 -4.728193759918213 -5.456769466400146 -5.385796070098877 -4.902922630310059 -4.588656902313232 + 21.27044486999512 24.08491325378418 26.50861930847168 25.93334770202637 19.78920555114746 13.71450996398926 12.57365131378174 14.33030128479004 11.14276313781738 1.456703662872314 -7.919396877288818 -13.94567680358887 -17.9332389831543 -20.08360481262207 -20.28531074523926 -19.57321548461914 -19.44615745544434 -18.53407096862793 -16.06371307373047 -17.02007865905762 + -5.07229471206665 -2.673027276992798 0.1863208413124084 1.013860464096069 1.269213795661926 0.6856178045272827 -1.148736596107483 -1.975215315818787 -0.8282109498977661 0.2170413583517075 0.3902241885662079 1.803727626800537 1.366949439048767 1.99494194984436 1.425867795944214 -0.2583991587162018 -0.2421907484531403 -0.6433937549591064 2.033026218414307 0.4546787142753601 + 12.33667469024658 9.263205528259277 6.013627529144287 3.242619276046753 -2.04919958114624 -5.781479358673096 -7.16286039352417 -9.668787956237793 -9.240730285644531 -5.410822868347168 0.4398817718029022 4.0452561378479 5.102258682250977 5.437817573547363 4.034950256347656 1.557661890983582 -1.395820021629333 -1.710574626922607 -3.775616645812988 -5.278054237365723 + 4.00970458984375 4.243353366851807 4.418988704681396 5.687031269073486 2.622324466705322 -0.9186838269233704 -3.086290836334229 -4.4349684715271 -5.905517101287842 -6.297449111938477 -5.28984546661377 -3.434298753738403 1.549245238304138 8.161531448364258 6.771480083465576 3.789035320281982 0.8126276135444641 -2.69298243522644 -4.459996223449707 -5.545289516448975 + 16.34438896179199 18.4940299987793 20.55770683288574 21.24932479858398 16.44334411621094 9.492633819580078 4.141826152801514 0.9502881169319153 1.721351861953735 4.550103664398193 2.203536987304688 -5.914438247680664 -13.2753963470459 -17.82462692260742 -18.2209300994873 -16.58901596069336 -10.96980094909668 -8.35638427734375 -10.71623706817627 -14.2817211151123 + -1.768032431602478 0.1761233359575272 2.252463817596436 6.361618518829346 10.33906841278076 12.4231481552124 8.363289833068848 1.52364706993103 -2.29892373085022 -4.496731281280518 -4.185180187225342 -1.60689651966095 3.926949739456177 2.458340167999268 -2.319498538970947 -4.485013961791992 -5.137418270111084 -5.211325645446777 -7.696087837219238 -8.619550704956055 + 11.08488273620605 11.7852611541748 12.92747783660889 15.01494121551514 15.44369792938232 12.07398509979248 6.266739368438721 2.460949420928955 0.4702639281749725 1.07369339466095 4.758166313171387 4.984653472900391 -0.8855037689208984 -4.581241130828857 -4.824244499206543 -10.50354194641113 -17.17863082885742 -18.10089302062988 -13.49168872833252 -28.77894592285156 + 6.929741382598877 7.825069904327393 5.77735710144043 2.587711811065674 3.563386917114258 5.160883903503418 5.126599788665771 4.502707481384277 0.8351610898971558 -1.632234811782837 0.7420730590820312 0.12342369556427 3.517768383026123 3.057796478271484 1.368760228157043 -4.286410808563232 -10.46026706695557 -14.56558036804199 -12.81235122680664 -7.361606121063232 + 2.191778659820557 3.513268709182739 4.713126659393311 5.223500728607178 5.715236186981201 5.479634284973145 4.516466617584229 2.858439922332764 0.05186956375837326 -0.5694597363471985 -1.685080051422119 -2.039292573928833 -2.591443300247192 -2.490133047103882 -4.205042362213135 -4.566408157348633 -4.019378662109375 -2.816128969192505 -3.588330030441284 -5.692621231079102 + -2.097806930541992 -3.25182843208313 -3.114562511444092 -2.844318866729736 -3.859760999679565 -5.712578773498535 -5.040430545806885 -4.48835563659668 -3.653167009353638 -1.838237047195435 2.461645126342773 5.505383014678955 5.742931842803955 4.578234672546387 3.168388605117798 4.534303188323975 4.382081508636475 2.832297563552856 2.518158912658691 0.1776237934827805 + 17.4088077545166 18.31974411010742 18.854248046875 19.61898422241211 18.58040618896484 14.79512596130371 10.30733489990234 7.095895767211914 6.93044376373291 8.344578742980957 4.694713592529297 -2.594254493713379 -9.020417213439941 -12.33715724945068 -13.71531963348389 -17.76349449157715 -21.14961242675781 -23.54549789428711 -23.33137702941895 -21.49314498901367 + 8.481592178344727 10.91602802276611 12.62129783630371 14.31409645080566 13.91150188446045 9.004624366760254 1.920468211174011 -1.742034077644348 -4.080940723419189 -5.218583106994629 -4.190650939941406 0.4368254244327545 3.856915950775146 -2.976571083068848 -9.561041831970215 -11.80435657501221 -8.181826591491699 -4.906846523284912 -10.33259773254395 -12.46790504455566 + 25.5666389465332 23.68691635131836 18.78746032714844 14.111083984375 8.82848072052002 3.205553293228149 1.324411988258362 0.3318596482276917 -0.6595930457115173 -5.150588989257812 -9.499537467956543 -6.876737594604492 -1.765209674835205 -2.82733416557312 -5.068912982940674 -6.80744743347168 -8.437265396118164 -9.323757171630859 -17.57405662536621 -21.8519458770752 + 14.02389812469482 13.77211284637451 15.62245464324951 16.63031005859375 11.80296897888184 6.446163654327393 3.031527519226074 0.9142658114433289 1.641602277755737 4.214316368103027 5.046321392059326 0.665174663066864 -3.854398965835571 -4.954565048217773 -4.76600980758667 -6.274704933166504 -7.901957511901855 -14.74887180328369 -23.93405914306641 -27.37654113769531 + -6.13859224319458 -4.946783065795898 -4.029239654541016 -3.219005823135376 -3.006635189056396 -2.876469135284424 -2.764590978622437 -1.043931841850281 1.520820021629333 3.286266565322876 3.582094430923462 3.500922918319702 4.142548084259033 4.196081638336182 2.466428995132446 1.189210176467896 0.9860852956771851 1.069903969764709 1.366392016410828 0.7184919714927673 + -4.109463214874268 -2.632721424102783 0.5314706563949585 3.449937582015991 3.192186117172241 2.046949863433838 -0.009129852056503296 -0.1964436322450638 -0.8928117156028748 -1.009577989578247 -0.7628929018974304 0.2475123256444931 1.15898072719574 -3.243423461914062 -4.782504558563232 -4.64444637298584 0.468833863735199 3.766880989074707 4.878130912780762 2.542529344558716 + -1.647605180740356 0.2618206739425659 1.971102833747864 2.544361352920532 1.15186333656311 -0.515619695186615 -1.419001221656799 -1.687308788299561 -1.461441516876221 -1.687948703765869 -1.865533113479614 -1.773398280143738 -1.544569849967957 0.1818061619997025 1.935967922210693 4.564754962921143 5.86070442199707 3.613274812698364 -1.783733487129211 -6.699496746063232 + 8.218077659606934 8.36836051940918 8.590140342712402 10.91640377044678 15.26675605773926 18.74322509765625 15.39290714263916 13.29907131195068 14.50366878509521 6.068000793457031 -4.49066686630249 -11.37653541564941 -16.28762626647949 -18.28180313110352 -17.28350448608398 -15.40235328674316 -7.205194473266602 -8.288730621337891 -7.324810981750488 -13.42539215087891 + 11.73594188690186 13.70747852325439 15.48323154449463 17.94837760925293 15.59787464141846 8.011203765869141 1.407221436500549 -2.020777940750122 -4.604009628295898 -6.823038578033447 -7.378701210021973 -5.953355312347412 -1.263996362686157 3.535661458969116 -3.562870979309082 -9.09814453125 -8.555088043212891 -3.749105453491211 -12.97335243225098 -21.44452857971191 + 9.426523208618164 12.99773406982422 17.31319618225098 20.40255928039551 15.12877559661865 4.556667327880859 -2.404085159301758 -7.309301376342773 -8.954307556152344 -9.473834037780762 -8.94853687286377 -6.45704984664917 -1.346714019775391 2.424389839172363 -3.885556697845459 -7.15138578414917 -3.132001638412476 -3.133339166641235 -9.104418754577637 -10.94930267333984 + 6.961635112762451 9.523253440856934 16.73820114135742 17.71315002441406 7.020796775817871 1.930528044700623 -0.3522165417671204 -1.58617377281189 -0.9375661611557007 -1.061645269393921 -0.726159930229187 -3.672266960144043 -5.233458042144775 -4.923686981201172 -4.085436344146729 -5.767467975616455 -6.59648323059082 -5.657567024230957 -9.336575508117676 -9.950865745544434 + 0.4838113188743591 1.375690102577209 2.193771600723267 2.736467599868774 0.7269363403320312 -1.655763864517212 -3.619451761245728 -4.335795879364014 -3.308824777603149 0.1796272099018097 2.696713447570801 2.654937982559204 2.706673145294189 1.865849018096924 -0.1049886643886566 -0.4607899785041809 -0.8976724743843079 -0.124328076839447 -0.9268824458122253 -2.185978651046753 + -5.218797206878662 -4.889193534851074 -1.373051762580872 2.476942300796509 1.744365811347961 -1.049572944641113 -3.225939989089966 -4.171715259552002 -5.243880271911621 -5.251483917236328 -5.762197017669678 -6.042542457580566 -4.167647838592529 1.72130823135376 10.1200532913208 3.24189829826355 3.302833795547485 8.066161155700684 6.588317394256592 9.13414192199707 + 9.704636573791504 10.64715766906738 11.76275539398193 14.81031799316406 16.85883140563965 14.82177639007568 8.597762107849121 3.847447872161865 0.5471333265304565 -0.958280086517334 1.305961608886719 5.939559459686279 0.9206979274749756 -7.140867233276367 -11.61437606811523 -10.61985206604004 -9.407258033752441 -17.39714050292969 -22.14491081237793 -20.48134231567383 + 28.90131568908691 27.67374992370605 24.27939224243164 19.31695938110352 12.47010803222656 5.452095985412598 0.7062522172927856 -1.572138547897339 -4.616943359375 -6.630959987640381 -3.794699668884277 1.067591547966003 -3.109381914138794 -8.847738265991211 -11.87843418121338 -12.95088768005371 -14.31411266326904 -15.54751682281494 -17.58464431762695 -19.02000427246094 + 25.90213394165039 25.89734268188477 23.53892517089844 18.79122161865234 11.68747711181641 3.678178310394287 -3.660246610641479 -6.219344615936279 -5.166650295257568 -2.509670257568359 0.4824471473693848 -0.5207012891769409 -5.87305736541748 -7.691280841827393 -6.765379905700684 -5.783536434173584 -4.755335330963135 -19.76284599304199 -21.4870433807373 -19.78263664245605 + 5.902889728546143 5.59215784072876 6.002723693847656 7.333315372467041 10.82566165924072 13.96048450469971 12.58405113220215 8.752208709716797 6.233176708221436 6.918257236480713 9.634609222412109 5.873047828674316 0.4111865758895874 -1.698720812797546 -4.376388072967529 -13.30565643310547 -20.88594245910645 -22.87973976135254 -18.75935554504395 -18.11796951293945 + -6.514405727386475 -5.437079429626465 -3.264081001281738 1.27970564365387 3.962663412094116 2.271744728088379 1.02592146396637 1.945308685302734 1.613759875297546 -1.267844796180725 -1.518831253051758 -1.518889904022217 -4.672675132751465 0.8256152868270874 3.834310293197632 2.905214548110962 1.178243517875671 3.182616710662842 1.092018127441406 -0.9233121275901794 + 11.67148208618164 11.26891803741455 10.90925693511963 11.41635322570801 12.84046840667725 14.70354461669922 12.12472248077393 8.723217964172363 7.386577606201172 8.005328178405762 10.3506031036377 5.592259407043457 -1.296667814254761 -4.224706172943115 -7.555230140686035 -12.99310207366943 -20.50958251953125 -25.02577018737793 -25.92427062988281 -27.46341323852539 + 16.20952796936035 18.79202651977539 21.13847541809082 23.80237579345703 23.88206672668457 20.29559326171875 17.91850471496582 17.53240585327148 11.83515930175781 0.889728307723999 -8.05699634552002 -14.09476375579834 -18.38312339782715 -21.60922050476074 -22.66406440734863 -22.25393867492676 -20.40405082702637 -14.16322135925293 -15.660325050354 -15.00618553161621 + 1.332775831222534 4.540472030639648 5.744597434997559 5.158358573913574 5.250928401947021 3.684443473815918 -3.143379211425781 -2.028280258178711 -1.02878201007843 -0.3361429870128632 -1.116461873054504 -1.71676766872406 -4.126121520996094 0.8790532350540161 -0.7885099053382874 -2.913221836090088 -3.568353414535522 -2.063380718231201 -2.309557914733887 -1.451665759086609 + -1.293760061264038 -0.4718028008937836 1.60360324382782 4.362293720245361 3.793002605438232 1.713796615600586 0.8898845911026001 -0.3427882194519043 -1.766693472862244 -2.913138151168823 -4.84385871887207 -1.894249320030212 4.639877319335938 4.34099817276001 -1.607470631599426 -1.314101934432983 1.84531044960022 -0.4525135159492493 -2.935023069381714 -3.353369235992432 + -10.76155948638916 -9.117382049560547 -5.077114582061768 -1.805173516273499 -0.4236795008182526 -1.142552733421326 -1.660835027694702 -1.172795414924622 -0.1269660443067551 0.3222311437129974 1.678869962692261 0.8585785627365112 -0.96555095911026 4.772230625152588 4.167304515838623 1.308529019355774 2.200663089752197 5.060666084289551 6.064671516418457 5.819861888885498 + 22.57675933837891 22.41295623779297 21.89896965026855 20.12034034729004 14.67387199401855 7.715049266815186 2.484054803848267 -0.575508177280426 -4.107325077056885 -6.831031322479248 -6.633961200714111 -1.897298455238342 1.635537028312683 -4.862734794616699 -10.25027275085449 -10.8586483001709 -8.151853561401367 -14.33871650695801 -21.98727798461914 -23.02290916442871 + -9.34221076965332 -9.290777206420898 -7.660970687866211 -5.695330619812012 -4.999914646148682 -6.497367858886719 -7.056390285491943 -6.700881481170654 -5.362234115600586 -4.580047130584717 -3.109976530075073 -0.4361536800861359 2.412587642669678 5.234089374542236 6.659108638763428 5.803432941436768 7.357170581817627 10.88450813293457 14.32406616210938 18.05728530883789 + 20.44619560241699 22.33601951599121 22.63082504272461 19.35242652893066 11.46528911590576 3.117271184921265 -1.055151581764221 -1.79200267791748 -3.173611640930176 -4.100831985473633 -0.3322575390338898 4.949789047241211 -1.67628538608551 -9.806520462036133 -12.89304733276367 -11.95707416534424 -6.166247367858887 -10.784743309021 -19.66230201721191 -20.89774131774902 + 0.256197988986969 1.536613821983337 2.957437038421631 5.2234206199646 6.354453086853027 3.696042776107788 0.7037686109542847 -0.6300698518753052 -2.101612329483032 -4.444314002990723 -4.173471927642822 -1.491001605987549 5.151174068450928 9.585725784301758 5.665143966674805 -0.408844381570816 -3.492814302444458 -7.313898086547852 -8.801700592041016 -8.272249221801758 + 28.96685028076172 27.60278701782227 24.3299617767334 19.82255363464355 13.40191555023193 5.374635696411133 -0.2391291260719299 -1.643232464790344 -1.866767644882202 -6.27919864654541 -13.37139701843262 -11.61345100402832 -3.956285238265991 -2.976941108703613 -7.367682933807373 -9.043316841125488 -10.35547924041748 -12.04689884185791 -19.0933723449707 -19.64555740356445 + 7.8268141746521 7.661505699157715 7.500350475311279 8.078084945678711 9.425930023193359 11.5485782623291 12.26556968688965 9.966827392578125 6.851613998413086 4.498805522918701 4.676517486572266 7.766087055206299 5.541260719299316 -2.529203414916992 -8.679522514343262 -11.28592109680176 -13.17383480072021 -16.37701225280762 -23.27567672729492 -28.28676605224609 + 35.52833557128906 31.66068267822266 25.37701988220215 19.27362823486328 12.94277286529541 5.775343894958496 -0.7749545574188232 -5.389566421508789 -7.441998481750488 -8.394183158874512 -9.043607711791992 -9.8797607421875 -10.42886829376221 -10.22016716003418 -10.19195461273193 -10.66593074798584 -11.1938304901123 -11.67916965484619 -12.41997241973877 -12.83380603790283 + 22.54461669921875 23.32077026367188 21.75076866149902 18.91819000244141 13.03644943237305 6.55272102355957 1.854758501052856 -1.005697727203369 -3.922854423522949 -6.391634941101074 -9.368968963623047 -16.02129173278809 -20.49285507202148 -21.405029296875 -17.68970680236816 -6.272115707397461 3.27418327331543 2.227151155471802 -2.892533302307129 -8.016922950744629 + -1.016274571418762 1.836273312568665 4.510078430175781 6.521440505981445 5.49302864074707 1.954428195953369 -0.601430356502533 -2.199551105499268 -1.309728026390076 0.2738093733787537 0.4291742146015167 0.9877617359161377 4.564645290374756 4.814922332763672 0.9567139744758606 -4.246704578399658 -5.209033966064453 -4.465246677398682 -5.836385250091553 -7.457924842834473 + 19.69192504882812 22.09206962585449 23.80901336669922 21.19912910461426 12.23721408843994 4.72580623626709 -0.4148092567920685 -3.826264381408691 -3.63470196723938 -2.288662195205688 2.101486682891846 4.527408599853516 0.1444754898548126 -2.039730787277222 -2.929513931274414 -13.12440204620361 -19.56832885742188 -21.00856590270996 -20.53844261169434 -21.15511703491211 + 7.62865686416626 8.226352691650391 6.950485229492188 6.50428581237793 5.521165370941162 4.095008373260498 0.2109681814908981 -3.786160707473755 -0.3319760262966156 1.160059332847595 -1.997029066085815 -3.957691192626953 -1.659037828445435 -1.516908645629883 -3.160657167434692 -1.93512499332428 -4.271431922912598 -4.183150291442871 -6.317551612854004 -7.180263042449951 + 9.274513244628906 9.768712043762207 13.41430759429932 16.60546684265137 10.43594074249268 2.931338548660278 -2.13913369178772 -4.436796188354492 -4.64939546585083 -4.175276756286621 -0.09205605834722519 7.67596435546875 7.083322525024414 3.903372049331665 0.6201664805412292 -9.050173759460449 -12.46957492828369 -10.02309417724609 -13.13846302032471 -21.53913688659668 + 8.100369453430176 7.838342189788818 7.10407543182373 8.068931579589844 10.80666923522949 13.47452163696289 15.93661212921143 16.2795524597168 15.77183437347412 15.02822589874268 8.247328758239746 -1.597835183143616 -9.153887748718262 -15.06421279907227 -18.40178871154785 -18.89818572998047 -15.87324714660645 -11.77176666259766 -16.96852493286133 -18.9270133972168 + 15.89307117462158 13.94218635559082 11.84148120880127 8.804191589355469 3.204591035842896 -0.2878334522247314 -2.61271071434021 -4.027554035186768 -3.52007794380188 -3.780377864837646 -1.576756119728088 -4.247349262237549 -7.15900707244873 -8.766011238098145 -8.830037117004395 -7.552667617797852 -7.192822456359863 -4.331611156463623 1.414379119873047 8.784918785095215 + 13.37816429138184 14.83925342559814 19.17241096496582 21.42833518981934 16.64079475402832 9.404074668884277 5.096750259399414 5.844509124755859 10.50385761260986 14.80595207214355 11.81415271759033 7.29457950592041 -6.347949981689453 -17.87113380432129 -23.08801460266113 -24.85861587524414 -23.46842956542969 -18.6118106842041 -13.97248077392578 -22.00439262390137 + 5.809521675109863 4.499151706695557 1.726754665374756 1.496702432632446 3.043510437011719 2.410009860992432 2.647355318069458 4.942822933197021 3.320942878723145 0.1809196770191193 -3.598520040512085 -2.810449123382568 1.244809508323669 4.914441108703613 -1.919122815132141 -4.742350101470947 -2.798822402954102 -3.097017765045166 -8.562280654907227 -8.708371162414551 + -0.7433948516845703 0.6290790438652039 4.290616989135742 9.319417953491211 9.438047409057617 5.431394577026367 2.410978555679321 1.756274580955505 2.399199485778809 5.045031070709229 3.696019411087036 -0.5171908736228943 -4.493594646453857 -7.243680000305176 -7.094901084899902 -6.63560962677002 -8.511418342590332 -5.742341041564941 -1.905528664588928 -1.528403043746948 + 16.02640151977539 16.88601303100586 20.27311134338379 22.95177841186523 16.51199340820312 8.169997215270996 3.205844163894653 0.7203652858734131 2.32510232925415 6.823920249938965 3.088744878768921 -6.237605571746826 -12.3858585357666 -14.66896915435791 -11.41484642028809 -5.91987419128418 -13.8611364364624 -16.74186515808105 -16.20819854736328 -19.54491996765137 + 28.70901107788086 26.74901008605957 22.41019630432129 16.26782608032227 9.633708000183105 5.01160717010498 3.813749313354492 2.318852186203003 -1.775809526443481 -3.124970436096191 -4.951873302459717 -9.006095886230469 -10.96864891052246 -12.91622161865234 -11.37460136413574 -6.327468395233154 -3.874560117721558 -13.60419750213623 -18.35502052307129 -18.63449668884277 + 16.76492118835449 18.53962135314941 22.00734901428223 23.77195167541504 17.37566375732422 10.85693454742432 8.482762336730957 11.06650543212891 14.47068786621094 8.978681564331055 3.180291652679443 3.287941694259644 -4.277831554412842 -16.76885986328125 -22.19854736328125 -22.23225975036621 -22.40470123291016 -22.81134605407715 -23.5716381072998 -24.51812934875488 + 24.68488693237305 25.2512092590332 22.44723320007324 15.77536869049072 7.284281253814697 -0.3390955924987793 -5.155105590820312 -6.980916500091553 -8.144389152526855 -11.31495571136475 -11.14698791503906 -9.477306365966797 -6.634860992431641 1.133751630783081 5.708544731140137 0.7609378695487976 -7.239751815795898 -12.6716947555542 -12.63096141815186 -11.31018829345703 + 12.1938943862915 12.45997142791748 15.35780048370361 20.32815170288086 18.95355987548828 13.29246044158936 12.50092601776123 15.65379428863525 7.744460105895996 -2.879125833511353 -8.869330406188965 -11.96176815032959 -13.38275146484375 -12.10928630828857 -6.750946044921875 -9.434435844421387 -14.06286716461182 -9.809247970581055 -15.4976806640625 -23.72757911682129 + 18.14355087280273 19.00253677368164 19.98784637451172 15.79288959503174 6.609574317932129 -0.5279169082641602 -5.207690715789795 -5.706249237060547 -5.2888503074646 -3.929961204528809 0.2551923990249634 3.666478872299194 -1.617277145385742 -4.594314575195312 -0.8400980830192566 -7.191524505615234 -15.28251838684082 -13.91899013519287 -8.400474548339844 -10.95219898223877 + -1.209361672401428 1.382168173789978 5.119255542755127 6.187464714050293 4.921239852905273 4.045382976531982 3.307084083557129 3.897459268569946 3.699335813522339 2.850033283233643 3.133702516555786 3.574357748031616 0.3321199715137482 -1.261278033256531 -3.536951541900635 -5.573594093322754 -7.333509922027588 -6.612568378448486 -8.03129768371582 -8.891047477722168 + 21.25825500488281 23.65346336364746 24.47770881652832 21.03482437133789 12.90108871459961 4.998486042022705 2.169271469116211 2.674301147460938 5.845990180969238 5.495700359344482 -2.556919813156128 -9.905426979064941 -14.95088195800781 -17.64135932922363 -18.43180465698242 -17.7553825378418 -14.19757556915283 -11.65029335021973 -9.392925262451172 -8.026556968688965 + 10.57416915893555 6.940167427062988 3.377308368682861 0.1674692034721375 -4.456944465637207 -7.959919452667236 -9.466750144958496 -10.31172180175781 -10.32407283782959 -9.972018241882324 -8.43491268157959 -4.619442462921143 -1.032624959945679 0.3527268767356873 4.959675788879395 8.442365646362305 7.155454635620117 10.09233951568604 8.988237380981445 5.528491020202637 + -7.303966522216797 -6.072146892547607 0.03037638403475285 4.888665676116943 2.882314920425415 -0.3495607674121857 -1.423956632614136 -1.117535471916199 -3.287755012512207 -5.638257026672363 -1.321971535682678 4.593060493469238 0.6953179836273193 -4.267212390899658 -3.024996280670166 2.733240604400635 -1.291894435882568 0.7963177561759949 6.687963485717773 11.79199314117432 + 19.57700347900391 19.22323036193848 17.8361759185791 14.8910026550293 10.03314304351807 5.288291454315186 3.868746519088745 4.305737972259521 6.140094757080078 6.750828266143799 3.403490543365479 -0.7690652012825012 -4.462819576263428 -7.740454196929932 -12.09807968139648 -15.74795341491699 -16.49748039245605 -16.40741920471191 -16.36639785766602 -21.22806930541992 + -13.60956954956055 -13.43655014038086 -10.68354797363281 -7.816117763519287 -7.257256031036377 -8.560713768005371 -10.12047863006592 -9.742441177368164 -8.897125244140625 -8.331297874450684 -4.778324127197266 0.1313253492116928 4.923659324645996 8.689200401306152 10.71094989776611 15.27718544006348 16.82255744934082 16.99509239196777 16.23367691040039 13.44978141784668 + 2.998192071914673 5.060214996337891 9.128397941589355 11.72884654998779 7.501063346862793 3.049983501434326 -0.2290438711643219 -2.830741405487061 -4.030549049377441 -5.998746395111084 -6.492287635803223 -5.973284244537354 -1.747057318687439 -0.04092250764369965 -1.939504861831665 -4.568539142608643 -1.428504586219788 -3.250531911849976 -1.501166105270386 0.5641858577728271 + -9.875384330749512 -8.996847152709961 -7.259862422943115 -5.099687099456787 -4.747788429260254 -5.377129554748535 -4.533528327941895 -2.740194320678711 -1.019506692886353 0.2546121776103973 2.611207485198975 4.471316814422607 5.004693984985352 4.662132263183594 5.580606937408447 5.569987297058105 5.934168815612793 5.616549968719482 6.005987167358398 3.938658475875854 + 6.324036121368408 5.534636497497559 6.871768951416016 11.52741050720215 12.75160026550293 7.741029739379883 3.503966093063354 0.5145781636238098 -0.2266563773155212 0.4568825960159302 6.004167556762695 7.255617618560791 0.2812454402446747 -2.467282295227051 -2.955026865005493 -2.348532676696777 -7.746325016021729 -9.635989189147949 -15.20050239562988 -28.18662261962891 + 3.269198417663574 4.329102516174316 3.63520336151123 4.240509033203125 2.643314599990845 1.306932687759399 0.5871008038520813 0.01858275942504406 -3.445292234420776 0.2536954283714294 2.62947940826416 0.453508198261261 0.2572880387306213 -2.218570470809937 -2.030983448028564 -2.472489833831787 -1.544004678726196 -1.770274639129639 -3.215528964996338 -6.926770687103271 + 24.28678512573242 20.96181106567383 16.37893295288086 11.63182163238525 6.46122932434082 1.640398621559143 -0.6090925335884094 -0.8962091207504272 -0.9581948518753052 -0.6643978357315063 -0.7903278470039368 -2.765601634979248 -5.320699214935303 -7.348938465118408 -7.670615673065186 -8.164978981018066 -9.409834861755371 -11.03562641143799 -12.33566665649414 -13.39078426361084 + 17.44244956970215 12.6025390625 6.476651668548584 2.572973251342773 0.07880938798189163 -1.494240760803223 -1.026918292045593 0.05849277228116989 0.5748964548110962 2.224634647369385 0.9260033965110779 -0.9737981557846069 -2.529262065887451 -4.725411415100098 -5.308783531188965 -5.208952903747559 -5.336541175842285 -5.965589046478271 -5.326721668243408 -5.061234474182129 + 9.055865287780762 8.884231567382812 10.20116806030273 15.56664085388184 19.45423889160156 13.64838886260986 7.375551700592041 5.846075057983398 8.041905403137207 12.47882080078125 9.985394477844238 6.33833646774292 4.154695987701416 -9.475737571716309 -18.78720474243164 -22.48675346374512 -20.38532829284668 -14.83318042755127 -18.28673934936523 -26.77635955810547 + 19.13214874267578 15.08913326263428 6.245914459228516 1.684667944908142 -2.593921661376953 -3.631608963012695 -4.6460862159729 -4.676587104797363 -4.376307010650635 -3.846136331558228 -3.359805107116699 -1.947200417518616 -0.7491039037704468 -0.9314246773719788 -1.021931529045105 -1.608303189277649 -1.11945641040802 -1.422060251235962 -2.57276463508606 -3.649176836013794 + -0.8554011583328247 0.01535670552402735 2.490541458129883 3.42849326133728 1.061878800392151 -1.813973426818848 -2.927071809768677 -4.505068302154541 -5.312741756439209 -6.198869228363037 -6.950813770294189 -2.745384454727173 6.032547950744629 3.116117477416992 -1.126639127731323 3.105453968048096 2.409670114517212 0.641316294670105 4.751763820648193 5.38281774520874 + 12.43925189971924 12.14298343658447 13.70097923278809 17.80710220336914 17.88127326965332 11.7794303894043 7.265505790710449 6.8924241065979 10.65805530548096 8.542099952697754 -1.237858533859253 -6.518909931182861 -8.609734535217285 -7.908468723297119 -6.340353488922119 -11.20984840393066 -14.85240650177002 -14.19177913665771 -21.24096298217773 -26.99876594543457 + 23.45121192932129 22.68519020080566 22.15351676940918 16.3964786529541 9.885462760925293 9.428561210632324 7.929757118225098 -5.295900344848633 -7.287815093994141 -6.190315723419189 -2.851263999938965 -1.912238717079163 -4.807369232177734 -3.605723142623901 3.066253900527954 0.3395583927631378 -16.53752326965332 -21.54922294616699 -20.96185684204102 -24.33675384521484 + 33.77143478393555 28.77348709106445 22.14700317382812 16.84343338012695 10.51287364959717 3.082031488418579 -2.772854804992676 -6.841246128082275 -8.5224609375 -8.851617813110352 -8.034506797790527 -4.58641529083252 -3.406130075454712 -7.006688594818115 -9.190608978271484 -9.06142520904541 -9.784893035888672 -11.42448425292969 -12.47732830047607 -13.16959762573242 + 4.425622940063477 5.459275722503662 5.645858287811279 6.871219635009766 6.816186428070068 4.309556484222412 2.105921268463135 1.583795070648193 0.2403468489646912 -0.8186249732971191 -0.475554883480072 1.799342036247253 1.35185444355011 -1.574759602546692 -3.126091241836548 -2.931037425994873 -4.274541854858398 -7.028286457061768 -8.702722549438477 -11.67736625671387 + 12.38517475128174 14.56315517425537 18.42501640319824 18.26544189453125 8.050895690917969 0.3629726469516754 -4.455294132232666 -6.819499969482422 -8.02800178527832 -8.136819839477539 -5.520301342010498 1.332758903503418 6.101493835449219 -1.145743131637573 -1.988560676574707 0.2712494730949402 -7.173962593078613 -8.100958824157715 -8.120369911193848 -20.26863098144531 + 13.23258495330811 14.43017864227295 17.6368236541748 20.34798431396484 15.51551151275635 7.98248291015625 3.920857667922974 2.722862720489502 4.856165409088135 9.656986236572266 8.020086288452148 3.274206876754761 1.099612355232239 -7.756321430206299 -14.47027206420898 -16.03600883483887 -14.80824565887451 -17.98133277893066 -24.48733329772949 -27.15681838989258 + 10.00753974914551 9.453824996948242 9.669445991516113 10.54615497589111 11.17346286773682 12.14949893951416 10.9928503036499 7.247820854187012 1.246783375740051 -4.546037673950195 -6.751821994781494 -7.538656234741211 -7.913768768310547 -5.880470275878906 -3.478797197341919 -5.813286304473877 -8.640678405761719 -9.01876163482666 -10.51074314117432 -12.39435768127441 + 13.41866111755371 12.95781326293945 14.06664562225342 16.35210418701172 17.40312004089355 16.2164478302002 14.19972705841064 10.60995674133301 4.731914520263672 -0.9379525780677795 -5.641208171844482 -9.150605201721191 -10.46435642242432 -10.43190383911133 -8.466348648071289 -7.95847225189209 -13.20952796936035 -21.08566665649414 -18.33942604064941 -14.27093315124512 + 10.05934429168701 10.14851951599121 11.85326862335205 16.17757225036621 16.12358283996582 9.054707527160645 1.976132750511169 -1.013263702392578 -3.108107805252075 -4.151781558990479 -0.6483354568481445 7.060160636901855 3.349245309829712 -3.173089981079102 -3.364842176437378 -4.28009033203125 -13.98790836334229 -18.64199066162109 -16.24434661865234 -17.18877983093262 + 14.16552066802979 16.79090118408203 19.07204627990723 19.25079345703125 13.39351367950439 5.549007892608643 -0.1253228634595871 -5.0051589012146 -6.942836284637451 -7.847989082336426 -7.06005859375 -2.986793041229248 3.983493328094482 5.623464107513428 2.900903701782227 -6.678395748138428 -16.7363338470459 -19.5196704864502 -16.10754013061523 -11.7195405960083 + 10.13781261444092 7.938575744628906 6.437095165252686 4.467501640319824 0.5077049136161804 -2.692654371261597 -5.074657917022705 -5.295346736907959 -6.35460901260376 -4.61092472076416 -0.264788806438446 2.69492244720459 0.1478714197874069 -3.632023334503174 -4.382040023803711 -3.492551803588867 -3.24286937713623 -1.711934328079224 2.209748983383179 6.213161945343018 + 2.057488679885864 3.72131872177124 7.908454895019531 11.76238822937012 10.78023338317871 7.873641014099121 5.909515857696533 3.327877044677734 1.41585898399353 -1.367973566055298 -3.643851280212402 -2.785484552383423 -1.257898569107056 -4.318547248840332 -5.67584228515625 -6.277145862579346 -6.429201602935791 -7.490517616271973 -8.424822807312012 -7.085493087768555 + 7.820384502410889 10.26064205169678 12.71585273742676 15.51255893707275 16.45561218261719 12.41169452667236 6.263260364532471 2.430400609970093 1.652305245399475 3.500654220581055 7.109420299530029 1.926035761833191 -7.15310001373291 -12.63532257080078 -14.97638130187988 -11.57130146026611 -5.502624034881592 -13.57993698120117 -18.28493881225586 -14.35521697998047 + 1.54519259929657 0.6455914378166199 1.130767107009888 3.020956754684448 7.271472454071045 8.955120086669922 8.167258262634277 4.944859981536865 2.918270349502563 4.133959293365479 8.64280891418457 4.413627624511719 -3.077182769775391 -5.508891582489014 -2.826085805892944 -1.797946929931641 -7.302445411682129 -9.750840187072754 -9.437262535095215 -16.08923149108887 + 4.742734909057617 4.582306861877441 5.318164825439453 4.916128158569336 3.035914897918701 0.8362451791763306 0.644989013671875 0.6589030027389526 0.9749945998191833 0.6436808705329895 -0.7589300870895386 -0.07376500219106674 -0.6987859010696411 -1.686697721481323 -3.857694387435913 -3.223940134048462 -2.982022762298584 -5.557400226593018 -3.43154501914978 -4.083280086517334 + 17.28988647460938 19.64286422729492 23.01824951171875 25.35204887390137 21.07189750671387 15.74672794342041 14.5294075012207 11.94213485717773 3.267378091812134 -6.753466606140137 -12.9169750213623 -17.29338645935059 -20.19407653808594 -20.9992561340332 -20.75796699523926 -20.98210906982422 -17.32324028015137 -6.989824295043945 -0.938843846321106 -6.711450099945068 + -7.405002117156982 -6.63621711730957 -5.119040489196777 -1.162852644920349 0.4995702505111694 0.2100710719823837 -1.180066823959351 -1.163569569587708 -0.4376775920391083 -1.852619051933289 -0.4564747214317322 1.148225903511047 6.407271385192871 3.180431365966797 1.355106592178345 1.219310641288757 0.8625170588493347 3.981961965560913 4.656658172607422 1.892392635345459 + -3.590446710586548 -3.353392839431763 -3.226964235305786 -2.259954452514648 -2.231477975845337 -2.566890001296997 -3.83813214302063 -3.984575986862183 -2.819719076156616 -2.430130243301392 -2.946921586990356 -0.3914734125137329 2.281153678894043 4.415081024169922 4.060555458068848 5.467803955078125 7.041676998138428 6.639510631561279 3.931572437286377 -0.1972776055335999 + 22.25151252746582 22.33121871948242 19.61933517456055 14.41214084625244 6.373692035675049 -2.562642812728882 -8.079279899597168 -10.45693778991699 -11.46908855438232 -12.5139102935791 -12.6769962310791 -11.84523582458496 -11.13391017913818 -8.746359825134277 -6.000263690948486 -0.9988529682159424 1.019225597381592 1.755787253379822 4.937151908874512 3.783427476882935 + 12.95260810852051 14.53674030303955 15.61411285400391 17.62470817565918 16.29912567138672 10.77538204193115 4.80446195602417 -0.3277279138565063 -2.880457878112793 -3.404256820678711 -0.7713425159454346 2.83541464805603 -2.578746318817139 -10.90081691741943 -14.56606388092041 -13.50789356231689 -7.632486820220947 -11.03356838226318 -15.46594715118408 -12.37324047088623 + 22.99762153625488 22.39748191833496 20.37690162658691 14.76454162597656 7.125988483428955 3.390379667282104 3.458976745605469 5.378371715545654 0.7713942527770996 -5.258638381958008 -9.207550048828125 -10.89459133148193 -11.36552143096924 -11.22277641296387 -9.833528518676758 -9.501014709472656 -10.30780124664307 -8.845525741577148 -7.249639511108398 -6.975067615509033 + 13.84787750244141 15.7175931930542 17.50483894348145 19.84147453308105 18.8011531829834 13.04101657867432 7.530145168304443 3.875656366348267 2.221766471862793 3.678050518035889 8.451436996459961 9.786053657531738 7.524314403533936 0.2494767010211945 -14.43461513519287 -23.53226280212402 -26.45499992370605 -26.53988265991211 -25.81037521362305 -25.2987174987793 + 14.26181793212891 15.01669216156006 16.73629379272461 20.87573051452637 21.24555587768555 14.78086280822754 10.10431003570557 9.993119239807129 13.58131122589111 6.923305988311768 -4.2493896484375 -10.31592178344727 -14.37813472747803 -15.54409217834473 -12.65233135223389 -9.27055549621582 -17.35264015197754 -21.07265853881836 -16.86798858642578 -21.81527900695801 + -6.701730251312256 -6.423609733581543 -5.063463687896729 -3.075657367706299 -2.159016370773315 -3.141475677490234 -3.714672803878784 -2.327291965484619 -1.513632416725159 -2.370358943939209 -3.681196212768555 -3.985078096389771 -2.353027105331421 4.192892551422119 2.026463270187378 1.374962210655212 4.116894721984863 10.67783832550049 10.28569221496582 13.83546257019043 + 19.48781204223633 21.24834060668945 25.726318359375 26.79023933410645 19.5052661895752 14.94903659820557 16.14799499511719 12.56389713287354 1.256492614746094 -7.453189373016357 -13.13076496124268 -16.61943244934082 -18.1139087677002 -18.03603363037109 -13.4610595703125 -7.199068069458008 -13.86595821380615 -13.67895412445068 -16.15209007263184 -19.96494483947754 + 7.247554302215576 8.33905029296875 9.486268043518066 11.4226188659668 14.50669574737549 15.68746852874756 12.76148700714111 9.342776298522949 9.199343681335449 10.15981769561768 4.807382583618164 -3.574278593063354 -10.69182014465332 -15.21487140655518 -17.11676406860352 -13.65310859680176 -6.910757541656494 -16.70827293395996 -18.30534362792969 -10.78525257110596 + 19.14772033691406 21.59174728393555 24.05929374694824 21.3127269744873 12.89314746856689 4.167294025421143 -2.102882623672485 -6.323522567749023 -7.398536682128906 -6.703073024749756 -2.85664701461792 2.544823408126831 -4.055274486541748 -12.41448020935059 -15.04971790313721 -13.84373378753662 -6.27100133895874 -9.492775917053223 -9.887845993041992 -9.317259788513184 + 26.41968536376953 27.0235481262207 26.0343189239502 20.88638496398926 13.91330432891846 9.138555526733398 8.043726921081543 8.41940975189209 3.39354395866394 -5.950228214263916 -12.00013160705566 -15.41503620147705 -16.60493087768555 -16.50509834289551 -12.8128719329834 -7.158292770385742 -8.021406173706055 -11.21308612823486 -17.88352394104004 -19.70788764953613 + 10.56875133514404 9.655482292175293 4.223331928253174 0.7909567356109619 -0.4405189454555511 -2.849485874176025 -4.903106689453125 -5.652542114257812 -5.761168956756592 -7.115509033203125 -6.522299766540527 -6.316676616668701 -2.391098737716675 0.715168297290802 -1.13979434967041 -0.5824928879737854 0.7493327856063843 2.430058479309082 4.630113124847412 9.911500930786133 + 15.78400325775146 16.23406219482422 19.18672561645508 20.00784683227539 13.85215187072754 6.369851589202881 1.944249391555786 -2.078444242477417 -10.75318241119385 -16.79421043395996 -15.73612976074219 -11.85544490814209 -5.196184635162354 1.752044081687927 -2.497430562973022 -6.221963882446289 -4.478374004364014 -6.537206649780273 -4.950833797454834 -8.031515121459961 + 22.88135528564453 22.09592437744141 20.8078727722168 13.6090726852417 4.595454692840576 -0.72449791431427 3.414735555648804 7.479996681213379 7.168763637542725 0.1997841149568558 -6.418004035949707 -9.228799819946289 -9.804014205932617 -7.249096870422363 0.1684483736753464 -3.810968399047852 -17.22014427185059 -18.71464920043945 -16.33136558532715 -12.91985607147217 + 4.989173889160156 2.360268831253052 0.4501810073852539 -0.7491955161094666 -2.538476228713989 -3.425108194351196 -4.350328922271729 -4.323370933532715 -3.835586547851562 -3.945193529129028 -2.699645042419434 -0.9040977358818054 -1.544869422912598 -2.718829870223999 -2.965738534927368 -0.8955147266387939 0.4472894668579102 5.198237419128418 8.607419013977051 12.84339141845703 + 16.12025260925293 17.63321304321289 21.4428539276123 24.34177398681641 16.9606761932373 8.84307861328125 6.738799571990967 10.01789283752441 11.35753726959229 0.3357406854629517 -9.06071949005127 -14.43208312988281 -17.59659385681152 -18.28078079223633 -14.80839729309082 -7.358630180358887 -9.821417808532715 -9.654747009277344 -12.67974185943604 -20.09868431091309 + -9.211740493774414 -8.87540340423584 -6.297139167785645 -3.247445344924927 -4.456758499145508 -5.464083194732666 -4.820130348205566 -2.262447118759155 2.475754499435425 9.864048004150391 11.28189754486084 7.739889144897461 3.522980451583862 1.257933139801025 2.171902179718018 1.554603695869446 0.2394822686910629 1.348282098770142 2.236604928970337 0.9417739510536194 + 22.59792709350586 22.23996353149414 20.93175888061523 15.17020511627197 6.236386299133301 -0.8764825463294983 -5.056914329528809 -6.203244209289551 -6.453927993774414 -5.877345561981201 -1.569867014884949 1.154849648475647 -6.127275466918945 -10.36573314666748 -9.736984252929688 -5.781574726104736 -8.737113952636719 -9.527509689331055 -7.009016990661621 -5.008105278015137 + 16.95464324951172 16.0569953918457 17.12229156494141 15.73456573486328 10.31270503997803 5.433484077453613 3.938912153244019 5.185332775115967 7.57879114151001 2.28395676612854 -5.735975742340088 -9.219627380371094 -11.62969207763672 -10.39375686645508 -6.960520267486572 -7.592714309692383 -10.21255683898926 -13.8248405456543 -13.26231670379639 -11.76964664459229 + 12.28885078430176 13.31100368499756 17.00658416748047 18.69374465942383 10.71056365966797 2.877930402755737 -1.967705011367798 -4.204086780548096 -4.696738719940186 -3.976315021514893 1.850314974784851 5.742563724517822 -2.43388032913208 -5.893528938293457 -2.637853860855103 -3.53376293182373 -10.49744033813477 -9.290708541870117 -11.66168212890625 -21.6878604888916 + 16.32644462585449 17.39614677429199 20.53213310241699 19.96866989135742 11.49829483032227 4.482291221618652 0.3640915751457214 -1.303813815116882 -0.8305099010467529 2.432171106338501 7.311874389648438 0.5549811720848083 -6.532717227935791 -8.626335144042969 -5.209945678710938 -7.723212718963623 -15.12660789489746 -15.98785591125488 -16.77809715270996 -22.74800872802734 + 36.26478958129883 29.16506958007812 18.88672637939453 11.29608726501465 4.25379467010498 -0.445648580789566 -3.325072526931763 -3.86842155456543 -4.627791404724121 -5.308796405792236 -6.112049102783203 -6.154624462127686 -6.960426330566406 -7.687922954559326 -7.803619384765625 -8.489947319030762 -9.088846206665039 -9.471495628356934 -10.03959655761719 -10.48222541809082 + 5.780822277069092 4.729944705963135 5.420453071594238 9.377270698547363 11.10299682617188 7.595249652862549 2.372618436813354 -0.3598511219024658 -2.176183462142944 -3.469889163970947 1.770817637443542 8.367834091186523 0.2412943243980408 -4.547429084777832 -4.491291999816895 -3.55483865737915 -9.05653190612793 -10.83175468444824 -8.612157821655273 -9.659374237060547 + 16.41555023193359 14.10188293457031 11.62247753143311 9.257728576660156 4.841358661651611 1.543326258659363 -1.545565128326416 -3.703099250793457 -4.978522300720215 -4.204208374023438 -1.368051648139954 2.156086206436157 2.162181854248047 -0.8789411783218384 -2.9700608253479 -4.858625411987305 -6.423192024230957 -8.652698516845703 -11.15371227264404 -11.36390399932861 + 16.10409545898438 17.92288208007812 21.83524513244629 22.52743339538574 14.43243217468262 6.848017692565918 3.221755981445312 2.279388904571533 3.802780389785767 9.888998985290527 12.63655948638916 9.522839546203613 2.566931247711182 -11.69426918029785 -19.76411437988281 -22.3358097076416 -22.23702812194824 -21.64353942871094 -21.32683372497559 -24.58775901794434 + 10.72166538238525 10.90416812896729 10.53556442260742 12.80475902557373 14.52211761474609 11.32664489746094 5.512959003448486 2.059190988540649 -0.9984778165817261 -2.616565704345703 0.8497801423072815 5.827003002166748 -0.7128457427024841 -7.924247264862061 -11.35591983795166 -14.3775691986084 -15.52609634399414 -7.991408824920654 -8.317806243896484 -15.24291801452637 + 19.64011383056641 20.09951591491699 3.73078727722168 4.298727035522461 3.901035308837891 1.736476540565491 -0.1971252858638763 -1.806933879852295 -1.589736938476562 -1.590380311012268 -3.101474523544312 -4.023970603942871 -2.120734691619873 -3.070114850997925 -5.017482280731201 -4.891379356384277 -4.810243129730225 -5.123622417449951 -8.227829933166504 -7.835626125335693 + 8.733895301818848 7.966941356658936 8.619454383850098 12.11435413360596 17.36251449584961 16.79151916503906 12.56485176086426 13.53887844085693 11.6723051071167 0.9210886359214783 -7.735207557678223 -12.13870239257812 -15.31115818023682 -15.37791728973389 -11.02734851837158 -5.627762794494629 -8.130962371826172 -7.171896934509277 -8.675792694091797 -19.08905982971191 + 13.74830913543701 14.03474998474121 16.81496047973633 19.97044944763184 13.72278308868408 5.233769416809082 -0.4247041046619415 -5.009110450744629 -8.885136604309082 -10.67052936553955 -9.199058532714844 -4.386091709136963 3.549043416976929 -0.7413970828056335 -4.454002380371094 -2.738729238510132 -9.688662528991699 -14.24010944366455 -7.356659889221191 -9.279876708984375 + 20.83841705322266 23.37444305419922 21.96332168579102 14.0463285446167 4.707098007202148 -3.454752922058105 -7.031973361968994 -8.247625350952148 -8.021733283996582 -8.446310043334961 -6.74375581741333 -1.701759934425354 5.688807964324951 6.658039569854736 4.332261562347412 -5.951213836669922 -13.42262840270996 -12.22700500488281 -11.32407569885254 -15.0358829498291 + 7.207045555114746 6.176064968109131 5.345635414123535 7.618152618408203 10.25305652618408 11.62214756011963 8.760963439941406 5.212853908538818 2.73217248916626 2.664905309677124 5.942745208740234 4.149530410766602 -4.500996589660645 -10.13909816741943 -9.937795639038086 -9.813549041748047 -17.44272422790527 -11.63266563415527 -4.419963359832764 -9.798478126525879 + 16.05946159362793 17.4783821105957 21.23090553283691 23.64727210998535 19.62251663208008 16.5314826965332 16.1394214630127 8.627650260925293 -0.1975974142551422 -7.240071296691895 -12.49001026153564 -14.75961399078369 -15.51878929138184 -13.46572113037109 -7.01030158996582 -12.02378559112549 -13.263671875 -7.646562099456787 -15.89719390869141 -19.82374572753906 + 14.98097801208496 15.5669641494751 17.67537498474121 20.85232543945312 17.22256088256836 9.611412048339844 4.912789344787598 4.019162654876709 7.113863468170166 9.847255706787109 1.316589593887329 -6.184567928314209 -10.87567520141602 -11.27708911895752 -7.885459899902344 -13.08677673339844 -21.08088684082031 -20.78436470031738 -14.12562656402588 -17.81882095336914 + 24.70122909545898 21.52716827392578 20.18359756469727 15.67780303955078 8.116883277893066 5.965303421020508 7.824417591094971 8.531929016113281 -4.015629768371582 -9.77031421661377 -3.555948257446289 -4.037703037261963 -8.993593215942383 -8.89934253692627 -2.862210035324097 1.763970971107483 -15.08697319030762 -20.0122127532959 -20.03493309020996 -17.02342796325684 + 11.51157474517822 11.33275032043457 12.48272800445557 16.49664115905762 20.78080940246582 17.92484092712402 13.26130962371826 14.8084602355957 13.74868202209473 2.481383800506592 -6.05708122253418 -11.60165977478027 -15.57636070251465 -16.86976051330566 -14.53013515472412 -10.75713539123535 -16.85516548156738 -20.02822494506836 -12.50354862213135 -10.05010509490967 + 13.43461418151855 14.33900547027588 17.07033538818359 19.74283218383789 14.37437534332275 5.228202819824219 -0.7103554010391235 -4.28042459487915 -7.09163761138916 -7.408814907073975 -2.964175701141357 2.376692771911621 -3.480540990829468 -10.35213851928711 -9.717494010925293 -5.586410522460938 -6.802725791931152 -8.403306007385254 -6.616281032562256 -13.1517448425293 + 9.963135719299316 9.340554237365723 10.65275192260742 14.79289531707764 19.56935691833496 17.04957962036133 11.05484771728516 12.18426990509033 15.92981815338135 5.628086566925049 -3.488591194152832 -7.927986621856689 -10.63529014587402 -9.420705795288086 -7.041135311126709 -15.3204927444458 -19.33856964111328 -16.25669479370117 -12.8823938369751 -23.85343933105469 + 22.06594848632812 24.1613883972168 23.23174858093262 14.79627227783203 4.655078411102295 -0.9209227561950684 2.34649920463562 7.607211112976074 4.634677886962891 -4.511134624481201 -9.675531387329102 -13.88466930389404 -15.12217140197754 -12.5805721282959 -3.860899209976196 -2.127594470977783 -2.984724760055542 -7.038827419281006 -14.30890274047852 -16.48287200927734 + 9.838269233703613 7.411069869995117 5.207682609558105 4.320160388946533 3.407595872879028 2.323895931243896 1.179081916809082 0.3448304831981659 -1.869332432746887 -1.541472196578979 -1.186288595199585 -1.98955512046814 -2.880399942398071 -2.99422287940979 -2.861319303512573 -2.746136426925659 -3.60328197479248 -4.409862041473389 -4.106838226318359 -3.843872547149658 + 16.57100868225098 16.7503776550293 19.52754402160645 19.92691421508789 12.71861267089844 5.590298652648926 1.350907921791077 -1.353148341178894 -2.131840944290161 -0.2975033521652222 4.883733749389648 0.3517743945121765 -7.934087753295898 -11.32361793518066 -9.469447135925293 -5.700685024261475 -15.65244483947754 -19.0988597869873 -16.45174217224121 -8.257791519165039 + 10.3472375869751 9.582415580749512 13.51676559448242 13.12163162231445 3.850957870483398 -1.172455310821533 -0.9376927614212036 0.4330868721008301 5.778407573699951 5.62817907333374 1.32157027721405 -1.832874774932861 -4.590438842773438 -5.001556873321533 -0.2184758931398392 -3.016781091690063 -8.313580513000488 -9.928302764892578 -14.60472679138184 -13.96335887908936 + 10.6744556427002 9.223483085632324 7.286635875701904 6.623978614807129 7.8115553855896 9.858303070068359 10.06727981567383 8.143356323242188 4.965957641601562 1.093035340309143 2.540902376174927 5.567163467407227 1.563134908676147 -7.483416080474854 -12.57964515686035 -13.34443378448486 -10.27435111999512 -9.547389984130859 -15.1450834274292 -17.04491996765137 + 22.61507225036621 22.19220352172852 20.78857231140137 17.87928771972656 12.97425174713135 7.441983699798584 3.015723466873169 -0.7323780059814453 -3.833522319793701 -5.40011739730835 -5.188457489013672 -2.586252450942993 -3.092840671539307 -8.979012489318848 -12.45120716094971 -14.02441310882568 -14.09079933166504 -10.26203632354736 -12.12062644958496 -14.14542770385742 + 20.0369815826416 21.88425064086914 22.59913444519043 16.26919937133789 5.765384197235107 -2.596404552459717 -6.921975135803223 -7.7259202003479 -8.513130187988281 -9.156466484069824 -7.832399368286133 -2.006499767303467 4.400502681732178 -3.357564926147461 -7.072220325469971 -3.132044792175293 -5.308005809783936 -9.698538780212402 -8.158881187438965 -9.47538948059082 + 24.7900562286377 24.57070159912109 22.47764778137207 15.59422969818115 5.557416439056396 -0.8392100930213928 -3.255009174346924 -2.43094801902771 2.518007516860962 1.311827421188354 -4.551904678344727 -7.921079158782959 -9.127832412719727 -7.31419038772583 -4.248980522155762 -9.331894874572754 -10.90885066986084 -9.801833152770996 -12.27042675018311 -14.81773281097412 + 19.06133079528809 18.92216873168945 17.74175834655762 13.92116832733154 6.478623390197754 -0.1854871809482574 -4.166169166564941 -6.711711883544922 -8.350668907165527 -11.22728061676025 -12.57486915588379 -11.55605030059814 -10.069899559021 -4.730217456817627 1.977546453475952 1.628638982772827 0.5441478490829468 -1.782336592674255 -4.968446731567383 -3.952256441116333 + -8.781754493713379 -6.759359359741211 -2.638554811477661 1.034084558486938 1.047808289527893 -1.047583699226379 -1.839722275733948 -1.76888370513916 -1.470815420150757 -3.207891941070557 -3.524168729782104 -0.7099326848983765 6.27788257598877 1.46797239780426 -2.931539535522461 -0.8624012470245361 4.868256568908691 0.4229905307292938 7.099373817443848 13.32423877716064 + -5.042667865753174 -3.386234998703003 -0.7758886218070984 3.584923028945923 4.317422389984131 0.7304357290267944 -3.478339195251465 -5.022218227386475 -6.705511093139648 -5.960153102874756 -3.308512449264526 1.907798409461975 9.045369148254395 11.85012817382812 4.949860095977783 2.548784494400024 0.1815174371004105 -0.3121159374713898 -3.081512928009033 -2.043085336685181 + -10.00387477874756 -8.376090049743652 -5.489814281463623 -2.673295497894287 -2.706565618515015 -4.76490306854248 -6.262611389160156 -6.1615891456604 -6.334480285644531 -7.062235355377197 -5.906555652618408 -3.624308109283447 0.3987578749656677 2.333470821380615 5.59135913848877 11.14741516113281 13.07797622680664 14.15965270996094 12.96971893310547 9.687982559204102 + -8.870566368103027 -7.033083915710449 -3.011588096618652 -2.033329963684082 -4.182293891906738 -5.991842269897461 -7.221319198608398 -7.11468505859375 -6.198483467102051 -1.445847749710083 4.332780838012695 5.920451164245605 1.791638135910034 -0.9192991852760315 -0.6911481022834778 2.258736848831177 4.750698566436768 9.587289810180664 13.54182052612305 12.53007125854492 + 20.79511642456055 23.35627174377441 24.30972671508789 17.90277862548828 7.48461389541626 -1.146560668945312 -7.041982173919678 -9.264655113220215 -10.66538238525391 -11.62015533447266 -11.51129245758057 -9.146036148071289 -4.666460514068604 2.427054405212402 -4.869124412536621 -6.552189826965332 -2.362501859664917 -5.024530410766602 -5.366015911102295 -7.038678169250488 + 14.0546178817749 13.9150915145874 14.14274883270264 13.53974151611328 9.619218826293945 5.328763484954834 1.850947737693787 -0.3509775102138519 -1.30689525604248 -1.373533129692078 1.655947208404541 3.027402639389038 -1.076544284820557 -5.540617942810059 -8.736478805541992 -9.839535713195801 -10.05195426940918 -12.88014316558838 -14.11404037475586 -11.86374855041504 + 6.266130924224854 7.286652088165283 8.275715827941895 7.255132675170898 2.327090978622437 -1.601768732070923 -3.234281778335571 -3.222900390625 -2.022616863250732 1.56577479839325 6.710108280181885 7.885100841522217 3.162348508834839 -0.6525370478630066 -2.645117282867432 -4.06615686416626 -5.738631725311279 -6.695847034454346 -8.843130111694336 -12.01107025146484 + 6.828343868255615 4.459591388702393 1.198031544685364 0.7824835181236267 0.01672930084168911 -0.1440626829862595 0.5611345767974854 1.389024496078491 1.641718983650208 3.19788646697998 7.521622180938721 6.554508686065674 2.642773628234863 -2.729480504989624 -5.040643692016602 -5.397490978240967 -5.645934581756592 -3.751798868179321 -7.952482223510742 -6.131951332092285 + 17.15304946899414 19.70195388793945 22.30288124084473 21.63157653808594 14.24821472167969 6.653785228729248 2.391925811767578 1.300657868385315 3.07582950592041 7.480111598968506 7.815942287445068 1.615616321563721 -0.09025578945875168 -1.579151034355164 -13.20334815979004 -20.13413619995117 -22.47246360778809 -21.20928001403809 -21.59443473815918 -25.08847618103027 + -0.2766841053962708 0.7652203440666199 3.130171060562134 7.014883518218994 7.574380874633789 3.860817909240723 1.275616645812988 0.5127306580543518 1.21248996257782 3.044691562652588 7.53275203704834 11.51608180999756 8.558302879333496 2.306163549423218 -4.646841049194336 -8.152456283569336 -9.874943733215332 -10.85867118835449 -11.62216091156006 -12.87253570556641 + 14.58757877349854 13.4433126449585 12.19839763641357 12.26298236846924 10.49035739898682 8.284884452819824 4.338857173919678 0.5772092938423157 -0.6892585158348083 -1.634074330329895 -0.3921059668064117 4.99318265914917 6.218422889709473 2.682348251342773 -2.457679748535156 -10.93043041229248 -17.28855323791504 -20.13235282897949 -17.7656307220459 -18.78745079040527 + -10.75904750823975 -10.34540748596191 -8.902874946594238 -7.04743766784668 -6.985999584197998 -8.331351280212402 -9.549447059631348 -9.20896053314209 -8.697383880615234 -8.456084251403809 -6.940177440643311 -3.590844869613647 0.9863254427909851 4.681756019592285 6.73741340637207 9.360860824584961 15.0661153793335 18.28639030456543 22.07860374450684 21.61755752563477 + -1.287543177604675 20.19104194641113 27.22828483581543 11.4342565536499 3.150161266326904 8.620709419250488 0.8991665244102478 -4.53799295425415 -0.4792215824127197 -4.391318798065186 -2.672147989273071 -4.932036399841309 -1.928362369537354 -2.832908391952515 -5.563168525695801 -5.543959617614746 -7.598354339599609 -8.501565933227539 -10.36492729187012 -10.89010524749756 + 28.71035003662109 22.4637393951416 13.87556266784668 7.381300449371338 2.60440468788147 0.1322620958089828 -1.652303576469421 -2.636790752410889 -3.067835569381714 -3.635971784591675 -4.209535598754883 -4.394295215606689 -5.017501354217529 -5.634757995605469 -6.221107482910156 -6.841684818267822 -6.968877792358398 -7.241861343383789 -8.560672760009766 -9.084414482116699 + 16.99798393249512 17.5201587677002 19.34952163696289 22.57324409484863 23.11054229736328 20.02192115783691 18.4974365234375 17.20974731445312 8.773975372314453 -1.464429020881653 -8.23919677734375 -12.56816387176514 -15.0216588973999 -15.69274139404297 -13.91776084899902 -13.68856430053711 -19.48722267150879 -22.30436134338379 -20.97488975524902 -20.69553184509277 + 27.11906242370605 26.69607734680176 21.31425476074219 15.05877876281738 6.812201499938965 -2.963446140289307 -5.781047821044922 0.01076712924987078 5.3713059425354 0.1437889188528061 -7.663357257843018 -4.606181621551514 -2.860592365264893 -1.989763140678406 2.831855773925781 -0.9180324673652649 -15.58075714111328 -20.32701873779297 -20.75848579406738 -21.90942764282227 + 3.131580114364624 4.151116847991943 7.434891223907471 14.36890983581543 10.43841648101807 2.083693265914917 -1.160747885704041 -1.785005331039429 -1.059820532798767 -0.8607094883918762 -0.582769513130188 -1.723235487937927 -3.144015312194824 -3.714138031005859 -4.502712726593018 -4.210123538970947 -4.773705005645752 -1.485553860664368 -4.113268375396729 -8.492809295654297 + 1.142902374267578 0.2453206330537796 0.8132816553115845 1.077951431274414 0.2023733705282211 -0.2459586560726166 -0.9695939421653748 -0.2864019870758057 -0.4226151704788208 -1.076228737831116 -1.368513584136963 -0.8243883848190308 0.3282999694347382 -0.7071506977081299 2.188615798950195 0.8555563688278198 -0.2733390927314758 -0.6857246160507202 -2.218570232391357 2.224181652069092 + -4.687366008758545 -3.961490154266357 -2.036029577255249 -1.066571831703186 -1.939400196075439 -4.03884744644165 -5.074076652526855 -4.675766468048096 -3.516644716262817 -0.926347017288208 2.730309009552002 7.084615707397461 9.38873291015625 9.869900703430176 6.729549407958984 2.096508026123047 -0.7032226324081421 -0.9217782020568848 -2.307338714599609 -2.044742584228516 + 11.4772310256958 14.14109706878662 16.4000244140625 19.60442733764648 18.33625030517578 10.7554178237915 4.582533359527588 0.4301901161670685 -1.55649197101593 -1.721121788024902 0.7484422326087952 6.665191173553467 9.090088844299316 5.951194286346436 -3.117987155914307 -15.76199531555176 -23.76863288879395 -25.61515808105469 -22.60769271850586 -24.03303146362305 + -9.588109970092773 -7.642099380493164 -3.05499267578125 0.8280278444290161 1.806826829910278 0.3249257504940033 -1.142592549324036 1.319003462791443 3.241925239562988 2.882942676544189 2.059044361114502 1.878607869148254 1.825798511505127 3.239100933074951 1.754096031188965 -0.5881785750389099 -1.347134113311768 1.969451427459717 0.5703395009040833 -0.3369859158992767 + 12.66843318939209 10.89885520935059 8.914315223693848 8.688826560974121 7.515252113342285 6.08191967010498 3.942771434783936 0.8813322782516479 0.1250016242265701 2.141575574874878 1.048773884773254 -1.684188961982727 -4.577215194702148 -5.879157066345215 -5.310585498809814 -7.62126350402832 -8.172539710998535 -9.055081367492676 -9.540971755981445 -11.06605529785156 + 14.38044357299805 16.05905532836914 18.22954559326172 20.40789794921875 17.77795791625977 10.21966075897217 4.592190265655518 1.079554915428162 -0.6842128038406372 -0.04784240201115608 4.629171848297119 4.429327487945557 -3.822072744369507 -9.87629508972168 -12.38427352905273 -10.87876892089844 -13.48275279998779 -19.87479400634766 -20.19206809997559 -20.56173133850098 + 6.231515884399414 6.763469219207764 7.120380401611328 8.545663833618164 11.11819839477539 14.47330570220947 16.16985893249512 15.21030807495117 14.09131622314453 14.76974773406982 10.56958389282227 0.7008793950080872 -6.040367603302002 -11.09020519256592 -12.95589542388916 -11.16558742523193 -14.11951065063477 -21.47142028808594 -24.59536933898926 -24.32587623596191 + -1.399533629417419 -2.759334802627563 -1.206623673439026 2.628692150115967 6.057358264923096 5.514919757843018 4.017879009246826 3.717763900756836 1.340534090995789 0.4898809194564819 3.70012378692627 6.209922790527344 6.258806705474854 1.218298554420471 -0.7110701203346252 -0.6941475868225098 -7.32550573348999 -10.32217979431152 -8.729896545410156 -8.005890846252441 + -1.364186406135559 0.6892449259757996 2.111026048660278 2.881333351135254 2.59060263633728 1.091035604476929 0.8035702109336853 0.8664032816886902 1.760137796401978 2.011093378067017 1.090478301048279 0.6154927015304565 -0.3025144636631012 -0.01897144503891468 -0.5883193612098694 -1.117183089256287 -2.287424564361572 -2.428406238555908 -3.735827922821045 -4.667580127716064 + 20.36409759521484 17.32998275756836 11.80078315734863 5.576584815979004 0.8480595350265503 -1.597505927085876 -2.543995141983032 -1.69214129447937 -0.8085401654243469 -0.5264999270439148 -1.4205482006073 -3.235416650772095 -3.984282255172729 -3.856939554214478 -3.221519470214844 -4.666608810424805 -5.838024139404297 -5.908698081970215 -8.023261070251465 -8.595511436462402 + 16.18913459777832 17.06760025024414 20.63652610778809 22.2095890045166 16.08213233947754 9.59947681427002 6.996028900146484 10.29943943023682 10.80450630187988 1.22305703163147 -7.348905086517334 -11.50436687469482 -13.15321826934814 -12.35775375366211 -7.259929180145264 -13.12864780426025 -18.68785095214844 -16.23081398010254 -10.97327899932861 -20.46272468566895 + 21.30654335021973 19.6473388671875 16.74763488769531 10.71519088745117 1.520034909248352 -1.734574675559998 1.145763278007507 3.737959623336792 3.766458034515381 -0.1733606904745102 -3.032854557037354 -3.319661140441895 -4.079640865325928 -1.864676475524902 1.188229441642761 -1.161325573921204 -8.75430965423584 -13.42594337463379 -19.23901748657227 -22.98978805541992 + 11.30935382843018 11.17526054382324 11.35609149932861 13.02991199493408 15.93793869018555 17.72149658203125 14.10339260101318 11.81316184997559 13.56808185577393 14.03435325622559 5.160505294799805 -2.227959156036377 -4.986024379730225 -4.943968296051025 -9.246584892272949 -18.56520462036133 -24.83685111999512 -26.05096435546875 -22.70619201660156 -25.64580917358398 + 17.83202171325684 20.10625839233398 22.41818809509277 16.9942455291748 7.129134178161621 0.8414992690086365 -2.375513792037964 -2.780144214630127 -1.09681224822998 3.245035171508789 9.03863525390625 7.081283092498779 3.617681264877319 -1.524614214897156 -9.938373565673828 -11.42700386047363 -13.37421226501465 -18.84647560119629 -21.83783149719238 -25.1030158996582 + 18.22967720031738 16.94033622741699 16.67654609680176 15.64188575744629 12.75177764892578 9.681244850158691 6.748854637145996 2.111249446868896 -0.9165295958518982 -4.03234338760376 -6.80380916595459 -4.37997579574585 -2.689070701599121 -0.6527182459831238 -1.392222285270691 -6.700642108917236 -13.7589635848999 -16.76444053649902 -18.93343925476074 -21.75741958618164 + 10.93580722808838 10.86438083648682 11.08986282348633 12.94742012023926 14.59217834472656 13.39250564575195 9.137676239013672 4.842693328857422 0.5263168811798096 -3.264991760253906 -4.740993022918701 -2.70852255821228 0.8826950192451477 1.499852299690247 -4.863853931427002 -8.882965087890625 -8.598028182983398 -10.94161319732666 -19.99942588806152 -26.71098899841309 + 10.01206684112549 9.365582466125488 8.482909202575684 8.349141120910645 9.704506874084473 12.20029926300049 11.63984107971191 8.315208435058594 3.680938005447388 -0.0171410758048296 -1.145117163658142 2.165038108825684 4.500191211700439 -1.831978321075439 -7.96696949005127 -9.694586753845215 -10.75667762756348 -16.64505004882812 -21.10502815246582 -19.2531623840332 + -4.796628475189209 -4.921994209289551 -0.4119044244289398 4.893801689147949 7.154260635375977 5.382511138916016 1.61054003238678 0.1038698554039001 1.121608138084412 1.418224215507507 1.764253973960876 -0.561644971370697 0.3406071960926056 0.630460262298584 -3.516857862472534 -2.70116138458252 -5.228322505950928 1.573094367980957 -3.322217464447021 -0.5325049161911011 + 7.903432846069336 7.235350608825684 7.972126007080078 12.60205459594727 16.63029861450195 11.10814094543457 1.690403342247009 -3.981684446334839 -7.746416568756104 -8.574784278869629 -6.819003105163574 -0.5224794745445251 3.180744647979736 -4.070266723632812 -6.312726020812988 -5.026178359985352 -3.13036322593689 -6.768670558929443 -5.226391792297363 -10.14357852935791 + 21.68161773681641 22.41369438171387 22.62211990356445 16.99417495727539 8.209881782531738 3.175555229187012 4.759945392608643 9.09013557434082 7.943402290344238 -2.082306385040283 -8.931857109069824 -11.48226642608643 -12.59692096710205 -10.90591716766357 -4.027942180633545 -2.747084856033325 -6.435141563415527 -16.4090747833252 -21.74642181396484 -19.52561187744141 + -6.173064708709717 -5.96327543258667 -3.528045177459717 -0.3217867910861969 0.3633228242397308 -0.6122471690177917 -0.1745707094669342 1.680195212364197 1.112641215324402 0.3470962941646576 1.041796803474426 0.9683806896209717 0.7797499895095825 -1.420798778533936 -1.712903261184692 1.571486592292786 0.6065927743911743 0.701576292514801 2.839795112609863 7.894057750701904 + -8.597162246704102 -7.984790802001953 -5.985772609710693 -2.301552534103394 -0.8695802092552185 -2.926555156707764 -2.002375841140747 0.8874312043190002 4.681686401367188 9.215790748596191 10.62390995025635 10.0728120803833 7.823439121246338 4.98911190032959 1.718626737594604 1.186076521873474 -1.911845803260803 -5.02608585357666 -6.099943161010742 -7.49322509765625 + -11.03237056732178 -9.77393913269043 -6.086191177368164 -2.263701200485229 -1.132107377052307 -2.090561628341675 -3.159245014190674 -1.787237405776978 -2.234658241271973 -2.219777584075928 -0.3450060784816742 1.882188200950623 5.150389671325684 2.117553949356079 1.246603846549988 3.462316036224365 4.104862213134766 5.533912181854248 7.81689453125 10.81007194519043 + 20.06258392333984 20.52496910095215 19.70958709716797 13.23114490509033 3.873177289962769 -3.501782417297363 -7.625485420227051 -9.193585395812988 -9.619814872741699 -10.10238075256348 -8.03574275970459 -3.638236284255981 -1.561076641082764 -6.777949810028076 -8.744353294372559 -5.159697532653809 -4.548657894134521 -4.305416584014893 1.765290260314941 3.647428512573242 + -12.62337303161621 -10.77267169952393 -6.713631629943848 -2.356719493865967 -0.9545043706893921 -1.314618349075317 -1.204311609268188 0.9519127607345581 2.529060125350952 3.738895654678345 3.543590068817139 3.480704307556152 3.770825386047363 3.900096416473389 2.935614585876465 3.731853485107422 2.773390293121338 1.36874794960022 1.86901843547821 1.346112608909607 + 4.859148979187012 5.375709056854248 6.929606437683105 9.178874969482422 12.43757247924805 15.39855480194092 16.32788467407227 15.39450454711914 14.55756664276123 10.45544242858887 1.292600035667419 -6.265548706054688 -10.38967323303223 -13.38938808441162 -12.95211219787598 -8.890670776367188 -11.38747406005859 -18.68959045410156 -16.29861831665039 -13.9443883895874 + 15.77815341949463 18.25551414489746 22.3198356628418 21.42018890380859 11.7012882232666 3.024410963058472 -1.752663969993591 -3.756941318511963 -4.067193984985352 -3.439844846725464 1.261776924133301 9.334712028503418 6.984341144561768 4.010790824890137 -7.639993667602539 -16.15771102905273 -17.59549903869629 -14.57194137573242 -20.85239601135254 -24.25683212280273 + -11.05942916870117 -10.00147533416748 -7.447062492370605 -5.632204532623291 -5.473527908325195 -7.793481349945068 -8.01336669921875 -6.400827884674072 -4.194078922271729 0.3109219372272491 6.442381858825684 10.91819858551025 12.22136497497559 11.84522342681885 8.797990798950195 6.20741605758667 3.313423871994019 3.266344547271729 1.671919465065002 1.020260572433472 + 8.519640922546387 8.289227485656738 8.995603561401367 8.742317199707031 4.436429977416992 0.6413780450820923 -3.61502742767334 -6.392239093780518 -7.133174896240234 -4.442526817321777 0.1373001486063004 5.341552734375 7.185813903808594 0.8366307020187378 -0.4659213125705719 -4.405711650848389 -7.075875759124756 -7.335079193115234 -4.504730701446533 -7.755612373352051 + 18.84737586975098 20.82525444030762 25.05878639221191 27.53649711608887 21.91413116455078 18.37550354003906 16.05982971191406 7.565887928009033 -2.314254999160767 -9.414538383483887 -14.84871006011963 -17.89739799499512 -19.03853416442871 -19.49631309509277 -18.20376014709473 -14.88103485107422 -7.449466705322266 -5.842984676361084 -10.70525550842285 -16.09100914001465 + 11.17381763458252 11.73581600189209 12.76785087585449 16.95885848999023 22.25809288024902 22.01443481445312 17.35465240478516 15.91978549957275 9.558157920837402 -1.782183408737183 -10.19282150268555 -16.16479110717773 -19.70077705383301 -20.4652042388916 -19.63494682312012 -19.72922706604004 -13.54111289978027 -3.357020139694214 -3.942026138305664 -11.23134994506836 + 8.913291931152344 7.96657133102417 8.525087356567383 10.92004871368408 15.7230863571167 13.53544330596924 6.278426647186279 1.89404833316803 -0.3686396181583405 0.07206964492797852 5.371940135955811 6.633976936340332 -2.771955728530884 -7.922903537750244 -7.518352031707764 -4.765822410583496 -13.7933874130249 -18.73945236206055 -15.21298122406006 -14.74051380157471 + 3.402238130569458 4.38342809677124 7.372255325317383 7.728855609893799 4.227364063262939 1.61199414730072 1.424536466598511 -0.6806030869483948 -2.745299577713013 -1.67626166343689 0.005013336893171072 -1.363193154335022 -3.862785816192627 -1.437924742698669 1.139387011528015 -1.961188077926636 -1.780180692672729 -2.933499097824097 -8.27347469329834 -4.580662250518799 + 22.56399536132812 25.54781913757324 26.45932197570801 22.04913330078125 13.09465980529785 5.449113368988037 1.858722686767578 2.901705980300903 5.779496192932129 7.843489646911621 3.12408971786499 -4.477516174316406 -11.33000564575195 -15.72787952423096 -16.83627700805664 -15.65703010559082 -15.02642059326172 -18.16428375244141 -19.84463310241699 -19.60749816894531 + -7.236518383026123 -5.575801372528076 -1.055126547813416 1.858322262763977 1.063185453414917 -2.114048004150391 -2.252481460571289 -1.488677978515625 -1.624836921691895 0.3907175660133362 1.890889644622803 2.591307640075684 2.263744592666626 1.155809640884399 3.288020849227905 4.917746543884277 2.529228925704956 4.517363548278809 0.1589960306882858 -5.277845859527588 + 8.726991653442383 8.607576370239258 9.068562507629395 11.91340732574463 15.79548263549805 15.50794792175293 9.229578018188477 4.436100006103516 4.070641994476318 8.425225257873535 1.636174440383911 -7.47866678237915 -13.08150863647461 -15.89782428741455 -14.29007625579834 -10.30896472930908 -7.292512893676758 -9.358960151672363 -6.599284172058105 -13.10986042022705 + -10.07052516937256 -7.769840717315674 -2.410463809967041 1.763256192207336 2.371699571609497 1.300210952758789 0.0592716857790947 -0.186667874455452 -0.1993192136287689 -0.3643225729465485 -1.058914184570312 -1.794434189796448 0.04385639727115631 0.3285703659057617 -1.676158308982849 -1.613530516624451 0.935849666595459 4.837431907653809 6.64939546585083 8.854628562927246 + 11.29299831390381 10.70684146881104 10.77766036987305 12.926344871521 17.35233306884766 17.8224925994873 12.74110794067383 8.971072196960449 12.31371593475342 9.791772842407227 -1.521692991256714 -9.37180233001709 -13.68000888824463 -16.40431022644043 -13.32993125915527 -8.885443687438965 -14.15606212615967 -14.12332820892334 -11.32181930541992 -21.90194702148438 + 21.67450141906738 24.1998233795166 22.05311012268066 14.11573123931885 3.138538122177124 -7.095758438110352 -12.6709098815918 -14.25389575958252 -16.23056602478027 -16.95135307312012 -16.02666282653809 -14.85798835754395 -13.61117744445801 -6.993234157562256 3.848437309265137 5.176148414611816 6.376491546630859 8.201635360717773 8.481925964355469 1.425205826759338 + -4.474852085113525 -3.643330812454224 -2.98609447479248 -1.046510577201843 -0.6623164415359497 -2.156109809875488 -2.654155969619751 0.4314819276332855 0.6183124184608459 0.3206990361213684 -1.173453092575073 -1.984958529472351 6.207587242126465 4.192528247833252 1.175938129425049 -0.06426703929901123 -0.09673029184341431 1.695602059364319 0.2945472002029419 6.006087303161621 + 13.54265308380127 14.67825698852539 19.01576614379883 20.40329933166504 11.6596097946167 3.872746467590332 -0.1622317880392075 0.04457050934433937 3.785968780517578 8.226879119873047 1.124628901481628 -6.867735862731934 -9.734193801879883 -8.573418617248535 -3.713707685470581 -10.67591571807861 -13.52225685119629 -8.942417144775391 -13.65639305114746 -20.50613021850586 + 6.977321624755859 5.673982620239258 6.472606658935547 6.603614807128906 2.133017778396606 -1.350364208221436 -4.397219657897949 -4.135441303253174 -2.338057279586792 -2.390894174575806 -1.73834502696991 -0.1287206709384918 0.9391232132911682 -0.639868438243866 -1.114269733428955 -0.9667397737503052 -0.5924702882766724 -1.210771679878235 -2.727119445800781 -5.069387435913086 + 13.71279621124268 16.06346130371094 18.67594337463379 15.91226100921631 6.642357349395752 -1.123621463775635 -6.001998424530029 -8.210847854614258 -9.57009220123291 -10.36978054046631 -9.241696357727051 -6.490242958068848 -0.6061758995056152 6.642014503479004 2.946542263031006 1.705726623535156 -4.208385467529297 -11.19047355651855 -10.06715965270996 -5.22062349319458 + 13.87119483947754 13.60242462158203 14.81721782684326 18.39755249023438 20.40693092346191 18.47162246704102 16.14850425720215 16.64939308166504 11.51263618469238 1.507368922233582 -5.710821628570557 -9.225401878356934 -10.39441108703613 -9.04575252532959 -6.629664421081543 -14.44726371765137 -21.40112495422363 -21.92295837402344 -21.99299240112305 -24.61444854736328 + 18.04973602294922 20.38852310180664 23.28554534912109 19.01937675476074 8.903037071228027 1.795131683349609 -2.377401828765869 -3.543127298355103 -4.400113105773926 -4.381193161010742 0.9627353549003601 6.8584885597229 -3.112943172454834 -9.587831497192383 -8.428634643554688 -0.2614285349845886 -12.19017601013184 -16.7332592010498 -16.50801277160645 -17.73843383789062 + 2.935255527496338 2.494773864746094 5.048237800598145 6.060988903045654 1.051603078842163 -4.726632595062256 -6.469597816467285 -8.688765525817871 -9.144537925720215 -7.516429424285889 -3.910306215286255 3.390753269195557 7.961606502532959 0.7364627122879028 3.860669136047363 4.830472469329834 -0.413238525390625 2.586595058441162 2.328270673751831 -2.416172742843628 + 26.04530906677246 27.5455150604248 23.52222442626953 14.47762680053711 4.483986854553223 -5.616511821746826 -10.1148853302002 -11.20306301116943 -12.11391448974609 -13.48807144165039 -13.81072330474854 -11.41358947753906 -9.557857513427734 -2.865420341491699 4.820107460021973 -0.4135714471340179 1.190287351608276 -0.3344442248344421 -3.078560352325439 -8.074442863464355 + 28.64225387573242 30.34657669067383 30.42641067504883 24.92678070068359 19.48105049133301 16.29994583129883 10.3444766998291 2.106016635894775 -4.103388786315918 -8.274578094482422 -11.03090858459473 -13.73697662353516 -15.11685943603516 -15.48884677886963 -14.43652629852295 -15.05267143249512 -15.83790874481201 -15.75239944458008 -16.61796760559082 -17.1245002746582 + 10.48817825317383 10.52224540710449 11.68124771118164 15.42751312255859 17.92415237426758 13.7446985244751 7.455336093902588 4.198126316070557 4.725359916687012 9.119702339172363 5.170355319976807 -4.025290489196777 -9.422515869140625 -12.04949474334717 -10.01875972747803 -7.474428176879883 -13.6494607925415 -15.38888072967529 -12.71372413635254 -25.71435928344727 + -12.27659034729004 -11.32632350921631 -7.513252258300781 -4.939467430114746 -5.796271324157715 -8.138972282409668 -8.797755241394043 -8.534284591674805 -8.839288711547852 -6.626235961914062 -1.945817708969116 2.902139902114868 6.24564266204834 8.565464019775391 14.87910270690918 16.18206977844238 11.2841625213623 11.19836044311523 8.415910720825195 5.061402320861816 + 4.802523612976074 4.503732204437256 4.721674919128418 4.401204109191895 3.478729963302612 1.885169148445129 1.605275273323059 0.3432831168174744 0.2189076393842697 0.3075803816318512 -0.393260270357132 -0.4767297804355621 -1.419069886207581 -1.861791133880615 -0.1692178994417191 -2.115620136260986 -8.723348617553711 -3.536106109619141 -3.865071773529053 -3.707862138748169 + -9.692647933959961 -9.22626781463623 -6.351307392120361 -3.786615610122681 -3.759792566299438 -5.117617607116699 -6.414169788360596 -6.056954860687256 -5.489849090576172 -5.054973125457764 -4.297509670257568 -3.701982021331787 -1.902263283729553 0.6614897847175598 0.6646522283554077 4.08777379989624 8.500331878662109 14.32246971130371 19.52342224121094 23.0917854309082 + 9.605265617370605 7.917129039764404 5.450119972229004 4.660484313964844 4.718952655792236 2.371891975402832 0.5677677392959595 -0.2095966786146164 -0.03304304182529449 0.3723271191120148 1.293834447860718 1.160353064537048 -1.004828691482544 -1.290224671363831 -3.274217844009399 -9.903040885925293 -4.364231109619141 -5.654353141784668 -5.75820779800415 -6.626378059387207 + 10.65970611572266 9.201120376586914 7.679224967956543 8.658510208129883 6.842851161956787 5.400555610656738 5.745941638946533 6.045200824737549 4.292452335357666 -1.631278038024902 -4.247810363769531 -6.408622264862061 -9.948398590087891 -10.30978107452393 -8.69011116027832 -4.600172519683838 -4.262642860412598 -4.857944488525391 -4.076342582702637 -5.49245548248291 + 20.01477432250977 20.90167808532715 21.28337287902832 17.17258262634277 9.099832534790039 1.560136675834656 -2.533341646194458 -3.835709571838379 -3.838943958282471 -1.908662796020508 3.497523546218872 2.40043830871582 -6.495970726013184 -11.22317028045654 -12.49804592132568 -8.614226341247559 -6.507180690765381 -13.84256553649902 -14.25671768188477 -10.37580490112305 + 20.80282783508301 23.01670265197754 25.23017692565918 22.06847763061523 13.34460544586182 6.587434768676758 4.035947799682617 6.107962131500244 9.89378833770752 5.313068866729736 -3.524396657943726 -8.768362045288086 -10.99186611175537 -8.75698184967041 -7.31260347366333 -15.89384841918945 -20.20448684692383 -19.49742317199707 -20.49799346923828 -20.95304489135742 + 1.112135291099548 1.679536700248718 2.138391733169556 3.410985469818115 3.71178412437439 2.930932998657227 3.283352375030518 3.969638347625732 2.084598541259766 -1.426822900772095 -0.8856951594352722 1.016344308853149 5.128527641296387 0.4168203175067902 -2.394213676452637 -5.627807140350342 -6.498308181762695 -3.880506992340088 -3.405381679534912 -6.764309406280518 + 16.84527778625488 20.15522956848145 23.35427474975586 17.54995727539062 6.320985794067383 -1.148457288742065 -6.488667488098145 -9.401909828186035 -10.0902624130249 -10.98797225952148 -9.937409400939941 -6.472338199615479 -0.03792007267475128 5.83006763458252 0.3465135395526886 1.962833046913147 -5.747587203979492 -8.713689804077148 -6.595053672790527 -16.74385452270508 + -0.175922691822052 -0.3392089903354645 3.446411609649658 8.461982727050781 8.435442924499512 4.178000450134277 2.031186580657959 0.7055367827415466 -1.929324507713318 -1.186627388000488 3.413535594940186 6.633113861083984 1.712199330329895 -4.988245964050293 -5.607166290283203 -3.031121015548706 -3.457066297531128 -4.790519237518311 -4.364737510681152 -9.147473335266113 + 22.29063034057617 23.97075843811035 23.27596282958984 17.90572929382324 9.348537445068359 1.87749969959259 -2.474119186401367 -3.170991182327271 -0.9640589952468872 3.555204391479492 4.53749942779541 -2.077203035354614 -8.870077133178711 -10.92167282104492 -10.11583614349365 -8.117061614990234 -6.369678974151611 -12.51077938079834 -20.21393585205078 -20.9564323425293 + -3.057344198226929 -2.8087317943573 -1.093109250068665 0.469587653875351 -0.1794872730970383 -2.173644065856934 -4.259597301483154 -5.188438415527344 -4.757630348205566 -3.20599627494812 1.229697227478027 4.462307929992676 4.061110019683838 1.625710129737854 -0.1563905477523804 -0.552192211151123 -1.765473604202271 1.74962592124939 6.205678462982178 9.394316673278809 + 19.61542320251465 21.94364738464355 19.86596870422363 11.82929134368896 2.523934125900269 -6.111340045928955 -10.21962261199951 -10.33879566192627 -11.057861328125 -12.24213790893555 -11.36732196807861 -8.627589225769043 -3.538101673126221 6.064846992492676 4.739538669586182 3.149100780487061 -1.811686992645264 -6.242119312286377 -4.583901882171631 -3.591279745101929 + 29.43381309509277 32.87830352783203 29.73860168457031 20.80992889404297 16.40338325500488 16.22147178649902 6.522161483764648 -6.435578346252441 -10.2713737487793 -12.00178813934326 -12.49606037139893 -13.68628406524658 -14.64797782897949 -13.60736560821533 -4.027771472930908 -6.029695987701416 -10.59019088745117 -16.03215599060059 -16.22187995910645 -15.95952415466309 + -7.01591157913208 -5.715380668640137 -1.626675963401794 0.9221866726875305 0.4081452786922455 -1.005972504615784 -2.755638122558594 -2.554766178131104 -2.080392122268677 -1.745342969894409 -1.008216738700867 -2.322623014450073 -3.847446441650391 -5.072258949279785 -3.880792617797852 0.07016272842884064 1.717446208000183 7.208227157592773 12.95217037200928 17.35307312011719 + 5.477029323577881 8.173159599304199 6.422657012939453 5.341064453125 3.062849521636963 2.45807409286499 1.54998517036438 0.3937896192073822 -1.357647180557251 -3.189165353775024 -3.871724367141724 -3.134510040283203 -0.3495767116546631 2.917126178741455 -2.330762624740601 -6.090649127960205 -4.970141887664795 -0.4822643101215363 -5.075662136077881 -4.943630695343018 + 12.5955982208252 13.77890014648438 18.30307388305664 21.59243965148926 14.85214996337891 7.433459281921387 4.869880676269531 8.15217113494873 8.695764541625977 -1.678695559501648 -9.385774612426758 -13.83348846435547 -16.42182159423828 -15.39605617523193 -11.6067943572998 -6.948153495788574 -11.98177719116211 -11.80886459350586 -4.334839820861816 -6.877176284790039 + 1.419307231903076 1.524868726730347 1.362967014312744 2.714002132415771 3.082342386245728 1.285038352012634 0.648038923740387 -0.5841737985610962 -1.618401765823364 -1.045000791549683 3.433628559112549 5.883842468261719 5.38477897644043 2.516360521316528 2.645832300186157 2.330636024475098 -1.273251533508301 -4.437887668609619 -10.03049468994141 -15.24242782592773 + 21.17899703979492 21.63118171691895 16.4135684967041 9.217244148254395 0.1791206747293472 -7.232132911682129 -11.07520771026611 -11.30471801757812 -11.98587226867676 -12.85896110534668 -10.89315414428711 -8.924420356750488 -3.650354862213135 6.884785652160645 3.042017459869385 3.568992137908936 4.011132717132568 1.915784358978271 3.316825866699219 -13.43481922149658 + 20.54770851135254 22.19759368896484 23.21295928955078 18.93502616882324 11.36981678009033 6.030840873718262 3.26379132270813 -3.391864776611328 -12.71049308776855 -19.66250610351562 -20.27547454833984 -17.38802528381348 -14.33404541015625 -8.270648956298828 -0.3982932269573212 0.6727895736694336 2.271696805953979 -2.144125938415527 -3.110556364059448 -6.816196918487549 + 6.310121536254883 6.333037376403809 8.804222106933594 13.71268939971924 13.97992420196533 6.189701557159424 0.2391342967748642 -3.585678100585938 -5.816271305084229 -6.397223472595215 -4.444539546966553 0.8361324071884155 7.133593082427979 1.170412182807922 -2.234095573425293 -0.8191328048706055 -7.236052989959717 -11.23121070861816 -10.80379390716553 -12.14094734191895 + 7.451253414154053 6.149855613708496 7.256801605224609 10.89402389526367 15.34398365020752 12.79841899871826 8.768499374389648 8.579646110534668 11.06977462768555 6.04635763168335 -2.637142658233643 -7.933014869689941 -11.1741943359375 -10.79344844818115 -6.221822738647461 -9.319869041442871 -15.19604015350342 -13.38976001739502 -7.046983242034912 -10.64634418487549 + -0.2915470004081726 -0.7367169857025146 0.7309360504150391 5.500640869140625 8.343731880187988 8.284258842468262 9.765144348144531 10.31025981903076 9.563140869140625 5.090346336364746 -0.7062538266181946 -4.646887302398682 -6.757493495941162 -7.82038402557373 -6.03977632522583 -5.030092239379883 -6.922825336456299 -7.286518096923828 -4.939605712890625 -6.410363674163818 + 21.00883674621582 22.91725540161133 26.21879386901855 24.0670337677002 15.62715911865234 11.73959064483643 13.444091796875 13.58902359008789 3.867225170135498 -5.15926456451416 -10.71269702911377 -13.78102779388428 -14.35583972930908 -10.86686515808105 -8.147103309631348 -16.44315338134766 -18.02453994750977 -17.01098823547363 -17.99375343322754 -19.98375701904297 + 10.03453826904297 6.773412704467773 2.505077123641968 0.5299304127693176 -0.4764107167720795 -1.488977313041687 -1.522027969360352 -1.135879874229431 -2.537898302078247 -3.037395715713501 -2.972354173660278 -0.9401606321334839 2.725913524627686 2.007568597793579 -1.263015031814575 -2.720503091812134 -2.706114768981934 -1.326903939247131 -2.594584703445435 0.1457876712083817 + 10.30598449707031 9.680682182312012 12.30059432983398 16.63021087646484 15.71973133087158 9.227455139160156 4.790554046630859 5.183098793029785 9.694279670715332 7.656355381011963 -1.202949047088623 -6.134037494659424 -7.703773975372314 -6.95940113067627 -10.068359375 -15.56697845458984 -16.69293975830078 -10.67906761169434 -8.995759963989258 -17.18567848205566 + 10.33647441864014 11.13605403900146 14.50987720489502 19.55765533447266 15.32199859619141 5.841301441192627 0.2834679484367371 -1.302920937538147 -1.170873641967773 1.614076137542725 7.350321769714355 4.059854984283447 -3.76279091835022 -6.356240272521973 -5.494593620300293 -11.70594692230225 -16.66755294799805 -15.301513671875 -9.931950569152832 -18.31670570373535 + 6.665878772735596 5.287078380584717 6.604174613952637 11.24390697479248 15.73708820343018 10.88919353485107 3.615051031112671 1.545713543891907 1.317800402641296 5.003365993499756 9.209177017211914 0.2331276834011078 -5.380549907684326 -6.400966167449951 -3.573290348052979 -9.712291717529297 -15.60323524475098 -14.45553874969482 -8.61473560333252 -13.61093235015869 + 24.84246444702148 24.72958183288574 25.05094337463379 18.6519775390625 11.2672643661499 8.92552661895752 10.56259918212891 10.60634136199951 2.62476110458374 -5.334508895874023 -11.0812406539917 -13.20625686645508 -15.02491188049316 -13.65923976898193 -6.694888591766357 -2.787519216537476 -15.76016235351562 -19.30805969238281 -18.20397186279297 -16.20072174072266 + 19.58020210266113 22.63994979858398 24.85937690734863 23.73339080810547 16.40652084350586 8.655902862548828 2.692973136901855 -0.9732272624969482 -2.432784557342529 -1.183987140655518 2.202678918838501 2.898808002471924 -0.6551418900489807 -7.756970405578613 -15.51250839233398 -18.82013511657715 -18.30494499206543 -16.93642044067383 -20.15601921081543 -20.93766784667969 + -1.255172252655029 -0.3113114833831787 0.7072728872299194 4.946125030517578 19.29331970214844 20.6010856628418 3.340485334396362 -2.18834114074707 0.2548024952411652 5.804544448852539 -0.177555114030838 -3.612357378005981 -5.060549736022949 -5.611148357391357 -4.149014949798584 -6.123706817626953 -6.200331211090088 -7.116665840148926 -6.722080707550049 -6.419397830963135 + 21.05316352844238 23.36001014709473 24.36540222167969 21.45010948181152 12.48474502563477 4.082840919494629 -1.245608806610107 -3.183476448059082 -2.304561138153076 0.5786012411117554 3.783148288726807 -1.133320569992065 -8.830019950866699 -13.8347692489624 -15.2947244644165 -13.6972770690918 -10.44550800323486 -8.296177864074707 -14.21250057220459 -18.6800651550293 + 10.37947082519531 10.20931816101074 8.271500587463379 5.467775344848633 -0.09628541022539139 -4.205060482025146 -6.42449951171875 -7.845910549163818 -8.762962341308594 -9.111204147338867 -7.384249210357666 -4.592853546142578 -2.77894401550293 0.2429867386817932 6.057669639587402 8.652376174926758 3.84000301361084 2.198265075683594 -0.9337678551673889 -3.183626413345337 + -4.15082836151123 -2.855858087539673 -0.4716212451457977 3.780704736709595 6.066000938415527 4.922677040100098 4.493431568145752 3.659519672393799 0.2725513577461243 -1.047417759895325 2.58400297164917 5.217532634735107 2.720312118530273 -2.818809747695923 -4.440462112426758 -5.8205246925354 -3.548867702484131 -5.631536960601807 -5.468313694000244 2.537501811981201 + 14.4602108001709 14.94652462005615 15.6305685043335 14.41653633117676 8.741317749023438 2.195253372192383 -2.3428635597229 -5.394208431243896 -7.140635967254639 -8.232874870300293 -7.09685230255127 -2.729194641113281 0.4225172400474548 -4.406015396118164 -8.054690361022949 -8.433924674987793 -4.002011775970459 -4.787050724029541 -4.803210258483887 -3.389398813247681 + 13.61625576019287 12.93839550018311 11.99118518829346 11.97700977325439 12.76942539215088 13.99450397491455 11.76297855377197 9.01258373260498 8.550151824951172 9.896116256713867 8.040699005126953 0.7377694845199585 -7.386106967926025 -12.57392978668213 -16.43876647949219 -20.54883193969727 -23.81130409240723 -20.06807708740234 -11.72089576721191 -12.73915195465088 + 18.25611686706543 19.3969898223877 19.66707038879395 14.32180213928223 5.810091495513916 -0.9553779363632202 -4.524950981140137 -5.469868183135986 -5.026162147521973 -4.127743244171143 -0.8071671724319458 6.424685955047607 5.824182987213135 3.295158863067627 -0.7150189876556396 -6.60588264465332 -7.967678546905518 -13.18302345275879 -20.03922080993652 -23.57401275634766 + 23.75066947937012 23.80665588378906 22.9061279296875 19.15889549255371 12.9243803024292 7.81028938293457 3.232327938079834 0.7559596300125122 1.412768602371216 1.131664991378784 0.693674623966217 -3.000707864761353 -8.008969306945801 -9.435736656188965 -7.426898002624512 -8.683975219726562 -15.56129169464111 -21.17743873596191 -21.50063133239746 -22.78774833679199 + 22.20578575134277 19.86033058166504 15.79944515228271 12.16376686096191 5.56561803817749 0.7775504589080811 -1.959669709205627 -4.665484428405762 -6.331968307495117 -7.980122566223145 -8.627533912658691 -5.214047431945801 0.1038874909281731 0.7415638566017151 -1.392701983451843 -2.967875957489014 -2.681667327880859 -5.498506546020508 -12.87279891967773 -17.02556037902832 + 23.0167236328125 19.66872024536133 14.46619701385498 9.354114532470703 5.886606693267822 3.548409938812256 3.291259050369263 4.87733268737793 6.359760761260986 5.53524923324585 0.712098240852356 -3.141013145446777 -6.328586578369141 -8.716710090637207 -11.64977169036865 -13.01816940307617 -12.47462844848633 -14.29913139343262 -14.66958713531494 -12.41888427734375 + 22.78421592712402 22.54104423522949 19.36458969116211 11.89761066436768 3.813448905944824 -2.766532897949219 -5.860476016998291 -5.352670192718506 -3.241155385971069 0.3529499173164368 4.590380668640137 2.886757850646973 -2.476957321166992 -3.389545202255249 -3.355114936828613 -9.570169448852539 -11.17313098907471 -9.408451080322266 -13.1599645614624 -18.4768180847168 + 6.077428817749023 5.613298892974854 6.019557476043701 7.465881824493408 10.75988101959229 14.1450366973877 12.55710601806641 7.738298892974854 5.433481216430664 7.246567726135254 8.792430877685547 -0.2265758216381073 -6.745157718658447 -10.20847797393799 -9.725765228271484 -5.989837646484375 -11.59928035736084 -17.44060897827148 -13.94773387908936 -15.96553516387939 + 11.88570117950439 13.69797992706299 16.69544792175293 19.03876113891602 13.65995407104492 6.49862813949585 1.090433359146118 -3.448119401931763 -4.899106979370117 -5.979784488677979 -4.574348449707031 0.5459050536155701 5.65796947479248 1.046589732170105 -0.6061590909957886 -4.254570960998535 -12.42788791656494 -14.78377151489258 -13.16948413848877 -25.67412757873535 + 9.669761657714844 12.5869779586792 16.10577011108398 19.31002998352051 18.1252269744873 11.59854888916016 6.249930381774902 5.650259494781494 8.786742210388184 9.47613525390625 -0.03960930928587914 -7.283413410186768 -13.13479423522949 -16.41493606567383 -16.53716659545898 -11.61318016052246 -8.986817359924316 -15.86849880218506 -16.58048629760742 -11.10048007965088 + 12.46806049346924 14.88292789459229 17.79672622680664 20.63623428344727 18.84663581848145 12.54423046112061 8.294511795043945 8.013032913208008 10.10925483703613 4.546423435211182 -4.235581874847412 -11.07094764709473 -16.6797046661377 -19.73879814147949 -20.18843841552734 -18.86830902099609 -11.96073627471924 -6.344791889190674 -9.577949523925781 -9.472785949707031 + 20.53796005249023 21.90321922302246 22.28560829162598 18.10272979736328 8.989124298095703 2.176859140396118 -0.5817242860794067 -0.287967324256897 3.112398862838745 6.86476993560791 1.833616614341736 -6.179459571838379 -11.48313236236572 -13.64754009246826 -12.71519565582275 -8.516919136047363 -12.03660202026367 -16.91633987426758 -14.81015586853027 -8.631259918212891 + 11.60680103302002 11.85505199432373 12.85512161254883 15.10396003723145 17.35493850708008 16.72762107849121 12.64882564544678 10.93340587615967 13.10458564758301 11.36492443084717 0.9490270018577576 -6.092689990997314 -10.05137157440186 -11.87186336517334 -11.79834461212158 -14.41411876678467 -21.47661399841309 -23.51333808898926 -19.09796714782715 -16.18795013427734 + 24.52836799621582 26.2111873626709 25.33324241638184 18.9857292175293 9.584904670715332 2.018861532211304 -2.465427160263062 -1.767440319061279 0.7104041576385498 4.801408767700195 3.829744100570679 -4.493820667266846 -10.97359275817871 -12.1612377166748 -7.233429908752441 -11.12522602081299 -18.05344200134277 -17.28647994995117 -11.52244853973389 -18.92131614685059 + 23.12882995605469 26.05768203735352 29.93949699401855 29.64876174926758 24.47180938720703 21.93432807922363 15.3261890411377 3.769094467163086 -4.600830554962158 -10.20814228057861 -14.23781299591064 -16.46170997619629 -17.13750267028809 -16.26701354980469 -14.19005107879639 -14.87963199615479 -15.83047866821289 -16.57930564880371 -16.80863380432129 -17.07507705688477 + -0.5882477164268494 -1.531315445899963 -2.527407646179199 -2.305526971817017 -4.086747646331787 -5.959141254425049 -7.423610210418701 -8.374463081359863 -8.524413108825684 -8.100237846374512 -4.632142543792725 -1.661475300788879 2.979997158050537 6.70287036895752 7.188657283782959 8.806729316711426 8.659381866455078 7.952831745147705 7.556660175323486 5.867602348327637 + 24.30745506286621 22.4275951385498 20.73090553283691 15.5381326675415 8.56695556640625 5.672979831695557 0.8411679267883301 -8.708767890930176 -1.499181509017944 -0.1685007363557816 -4.014512538909912 -3.226223707199097 -5.55338716506958 -4.657928943634033 -0.351344496011734 -0.8989975452423096 -6.205326080322266 -16.60711860656738 -22.42523765563965 -23.76866340637207 + 5.180050849914551 6.041500568389893 6.860336303710938 8.956050872802734 13.32253074645996 14.6285514831543 9.409848213195801 1.849394202232361 -1.724948883056641 -3.098674535751343 -2.059240102767944 3.562844038009644 3.819305181503296 -4.527313709259033 -8.809619903564453 -8.658734321594238 -4.736572742462158 -10.68166732788086 -14.85742855072021 -14.47622585296631 + 15.80508041381836 15.63898086547852 15.88506317138672 16.13718795776367 13.47125720977783 8.73521900177002 3.636890649795532 -0.339383453130722 -5.560337066650391 -10.54215431213379 -13.62865257263184 -12.16235542297363 -8.602408409118652 -2.032558917999268 1.592831015586853 -1.978568077087402 -3.389095783233643 -8.284897804260254 -12.71383094787598 -11.66827297210693 + 26.18878746032715 26.02281951904297 23.38271331787109 17.19644927978516 8.949422836303711 2.020498752593994 -1.268647909164429 -0.2651183903217316 3.892852544784546 6.015614032745361 0.9221491813659668 -3.620756149291992 -5.481115818023682 -5.426047325134277 -10.27603435516357 -15.89168739318848 -16.77092552185059 -17.16012191772461 -18.59013938903809 -19.84072113037109 + 9.163393974304199 10.0832405090332 15.00693511962891 16.57118225097656 6.619165897369385 -1.479613900184631 -6.077719688415527 -7.751141548156738 -8.722336769104004 -9.041499137878418 -7.687320709228516 -2.570497751235962 6.751341342926025 1.899693846702576 -1.455192923545837 2.540307760238647 -4.263998985290527 -6.59299898147583 -3.977922677993774 -9.015023231506348 + 28.60880279541016 28.5955867767334 25.74451637268066 20.2282657623291 12.98462200164795 6.272964477539062 -1.270745754241943 -4.694289207458496 0.6216191053390503 -1.871351718902588 -7.325624465942383 -8.693500518798828 -10.72037982940674 -10.37525177001953 -5.04227352142334 -5.860230922698975 -11.15826511383057 -18.15434837341309 -19.03731918334961 -18.85279273986816 + 14.56285381317139 11.91119480133057 9.127939224243164 4.955471515655518 -1.859045147895813 -5.527246952056885 -7.291328430175781 -7.257721424102783 -7.936927318572998 -7.522019386291504 -5.699267387390137 -4.295718669891357 -6.046833038330078 -7.484413146972656 -5.929449558258057 -1.751848816871643 -0.4330388605594635 3.87393593788147 10.92901134490967 13.67445850372314 + 6.51925802230835 5.868056297302246 4.894417762756348 6.951455593109131 11.15463829040527 13.76603889465332 9.959395408630371 3.711484909057617 -0.4425097405910492 -0.1968532353639603 4.800868034362793 1.330580115318298 -8.130728721618652 -11.60699653625488 -9.227926254272461 -6.489060878753662 -3.754976272583008 -8.181388854980469 -8.191291809082031 -12.73445606231689 + -12.38740634918213 -10.21508312225342 -5.852412700653076 -2.136318445205688 -1.759829044342041 -2.811165571212769 -2.869603157043457 -1.037415146827698 -1.620659232139587 -1.65497887134552 0.01288516260683537 0.5949336886405945 0.08965931832790375 -1.801554560661316 -0.9082702994346619 1.798803925514221 4.207374572753906 7.146528720855713 13.32305431365967 17.88145065307617 + 4.987802982330322 7.1372389793396 8.835489273071289 8.994952201843262 6.126404762268066 3.864791870117188 1.343653082847595 -0.4084400236606598 -0.4445983171463013 0.6985169649124146 4.246108531951904 1.664074182510376 -3.283009767532349 -6.344760894775391 -7.022064208984375 -4.365979194641113 -6.104038238525391 -7.224530696868896 -7.507492542266846 -5.194108009338379 + 0.8742403388023376 -0.1953169703483582 0.01760067977011204 1.549441933631897 1.768524527549744 0.8429960012435913 0.06463783234357834 0.3984734416007996 0.9265114068984985 0.9952888488769531 1.865400314331055 0.4303093552589417 -1.977151989936829 -1.565799593925476 -3.158882856369019 -3.664788722991943 -4.126267433166504 -2.768099069595337 1.686561822891235 6.036318302154541 + 15.46885871887207 16.0085620880127 19.44907760620117 22.42435073852539 16.41948509216309 10.26043224334717 9.094603538513184 13.04658317565918 10.87363147735596 1.354310631752014 -5.934009552001953 -8.36617374420166 -7.111842155456543 -4.493043899536133 -11.16856670379639 -15.53051280975342 -14.68656444549561 -18.99347114562988 -23.50125503540039 -24.61445045471191 + 6.603334426879883 5.585556983947754 6.647547721862793 10.17383575439453 15.25801277160645 12.96533489227295 6.642523288726807 3.414900541305542 2.982682943344116 5.721572399139404 10.22160625457764 5.013276100158691 -0.3243998885154724 -2.390127420425415 -5.324588775634766 -9.820241928100586 -13.70053958892822 -14.69600105285645 -18.41834259033203 -26.55594253540039 + 12.37706851959229 13.17043399810791 15.49816226959229 14.22429656982422 5.17231273651123 -1.316939234733582 -4.672329902648926 -5.044862270355225 -5.592236995697021 -5.459487438201904 0.3524168431758881 3.863491773605347 -3.27344822883606 -8.139137268066406 -7.895611763000488 -0.9601824283599854 -5.682562351226807 -8.069439888000488 -3.529186248779297 -5.022748947143555 + 21.58291053771973 21.0160083770752 18.84441947937012 14.6915922164917 8.501016616821289 4.111413955688477 0.1588360965251923 -0.6771475076675415 4.226070404052734 4.271119117736816 -0.1932351142168045 -0.9946475625038147 -2.206359386444092 -1.129950642585754 0.6167441606521606 -5.536649227142334 -18.86670303344727 -21.06279563903809 -22.50994682312012 -24.84271049499512 + 29.1742115020752 27.73128890991211 23.78449630737305 16.20070838928223 7.804171085357666 4.62283992767334 6.618515968322754 2.002690553665161 -8.812130928039551 -9.347260475158691 -5.028340816497803 -9.039759635925293 -12.13632678985596 -12.18521022796631 -6.66544246673584 2.907634258270264 -8.947727203369141 -16.14755821228027 -15.8516321182251 -16.68515396118164 + 17.52192687988281 18.48198127746582 19.56446838378906 15.87956047058105 7.895845413208008 1.758221983909607 -2.161993503570557 -2.602938652038574 -0.3607065081596375 3.439788341522217 0.8002592921257019 -6.168744564056396 -10.9293737411499 -12.32912254333496 -10.55030059814453 -8.129195213317871 -11.04506683349609 -9.589564323425293 -5.572501182556152 -5.902548789978027 + 37.90076065063477 34.45671844482422 29.74997520446777 23.66351890563965 17.73532676696777 11.17491054534912 3.756527423858643 -3.225162744522095 -8.056818962097168 -10.30983257293701 -11.20657444000244 -11.58444786071777 -12.20452213287354 -13.10412120819092 -13.9846076965332 -13.87027835845947 -13.75427722930908 -15.14665794372559 -15.70295429229736 -16.2874870300293 + 11.63211250305176 11.50481033325195 14.76960277557373 18.55362892150879 12.47855758666992 3.995025396347046 0.09296571463346481 -1.110555291175842 -1.018493294715881 2.535382747650146 6.585675716400146 -1.587183475494385 -9.116602897644043 -12.02014255523682 -10.08510303497314 -2.456929922103882 -9.525175094604492 -12.43867683410645 -9.930220603942871 -12.85867786407471 + 10.88762187957764 11.41915130615234 15.72104454040527 19.24050331115723 12.93360996246338 5.175852298736572 1.189446210861206 0.06192104518413544 1.09056031703949 5.328004837036133 12.79714488983154 7.848507404327393 6.693451881408691 -2.518177270889282 -12.68602848052979 -15.10251522064209 -11.06857490539551 -17.80665397644043 -24.3961009979248 -26.80878829956055 + 12.04619407653809 12.54083728790283 16.10873794555664 18.44397926330566 10.75066661834717 2.74236273765564 -2.459700584411621 -5.040712356567383 -5.865875244140625 -5.228089809417725 -1.838192462921143 5.844863414764404 0.5670551657676697 -6.815145492553711 -6.905168056488037 -0.4683799147605896 -10.44375514984131 -14.27520751953125 -10.82914924621582 -8.87531566619873 + + diff --git a/libcodec2-android/src/codec2/octave/train_all_speech_2.txt b/libcodec2-android/src/codec2/octave/train_all_speech_2.txt new file mode 100644 index 0000000..bd6fd92 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/train_all_speech_2.txt @@ -0,0 +1,514 @@ + -1.753433346748352 0.0942588597536087 1.379803538322449 2.072990655899048 1.876945614814758 0.3252158463001251 -0.4604800045490265 1.392059564590454 2.51468825340271 2.726940870285034 1.346734285354614 -3.432505130767822 -4.508626937866211 -1.071884870529175 5.149267673492432 -1.864397406578064 -3.520386695861816 -0.987758994102478 -2.191234111785889 0.9117975831031799 + -2.740678787231445 -0.7557816505432129 1.221166849136353 2.429412603378296 1.121769070625305 -2.109005212783813 -3.207082986831665 -1.283277988433838 1.23898720741272 2.216673135757446 1.987575054168701 3.320088148117065 1.843206286430359 -0.6056810617446899 1.845213294029236 2.970349788665771 -4.477020740509033 -3.250196933746338 -0.660971462726593 -1.104741096496582 + 0.8637488484382629 -0.3699468970298767 -0.3692027628421783 1.025614023208618 1.526248335838318 -1.09520697593689 -4.278725624084473 -0.9699022769927979 5.088742256164551 2.842086315155029 -4.768896579742432 -1.872474551200867 2.118366479873657 -0.6976305246353149 1.185539484024048 3.40752124786377 -0.8052951693534851 -1.561945796012878 -1.542000651359558 0.2733546793460846 + -1.144956588745117 -0.1454758495092392 0.08790544420480728 -0.02088651992380619 -0.8916767239570618 -0.1761495471000671 1.68149209022522 1.516316413879395 -0.8769388198852539 -1.930211663246155 -0.9893726110458374 2.492476224899292 2.351692676544189 -0.6615152359008789 -1.857846736907959 4.520679473876953 4.450479030609131 -4.987422466278076 -0.3564645349979401 -3.062129020690918 + -3.01615047454834 -3.111889600753784 -2.866418600082397 -1.588913679122925 -1.588775634765625 -0.2449028044939041 0.9310630559921265 1.395220994949341 1.342057108879089 0.9993742108345032 1.242173075675964 1.108432412147522 1.414095878601074 1.482768416404724 1.385738372802734 5.528781890869141 -2.099417924880981 -2.41669774055481 4.861923217773438 -4.758462905883789 + 0.8427443504333496 1.215364336967468 0.09320242702960968 -0.2604077458381653 -0.5247545838356018 -1.967142343521118 -2.698567867279053 0.1313823461532593 3.205588102340698 1.998406291007996 -1.989334344863892 -2.173259258270264 -2.062813282012939 1.726672291755676 7.535818576812744 0.4266133308410645 2.029835939407349 -6.092190742492676 -2.910575151443481 1.473413348197937 + -1.032739520072937 -0.9894866347312927 -1.526102423667908 -1.59191882610321 -0.2723776400089264 0.64164799451828 -0.8059507608413696 -1.191702723503113 0.09020776301622391 -1.060420274734497 0.3806934654712677 4.184435367584229 2.431001424789429 -2.035251140594482 -2.090354919433594 2.199838399887085 -0.3658998608589172 0.09143834561109543 -0.3407558500766754 3.283697366714478 + 0.09579634666442871 -0.5799037218093872 0.3841956555843353 1.487872123718262 1.979267477989197 0.7764622569084167 0.6211426854133606 1.777725577354431 5.853362083435059 5.018080234527588 -1.464226603507996 -3.236551284790039 -2.264443635940552 -3.471408367156982 -3.092434406280518 0.1645918339490891 -2.626392602920532 -3.916962146759033 0.76935213804245 1.724476456642151 + -0.811269998550415 -1.995243072509766 -3.103911638259888 -2.199812650680542 0.8351114988327026 2.872645378112793 2.846061944961548 2.516482591629028 1.664498209953308 1.229272842407227 0.1869180500507355 -2.820144653320312 -3.284145832061768 -1.804192066192627 -0.4315302073955536 -1.891431331634521 -1.279873847961426 2.767906665802002 -2.973227739334106 7.675887107849121 + -0.8152815699577332 -0.3413392305374146 0.4037869870662689 0.315345972776413 -1.540551543235779 -3.120832920074463 -3.166280269622803 -0.5739026069641113 3.500081062316895 0.5491748452186584 -6.07478141784668 -3.788755416870117 1.034412980079651 1.376763343811035 1.135967493057251 0.4547922611236572 1.173577547073364 2.110079526901245 7.675674915313721 -0.3079297542572021 + -2.651316165924072 -1.908707976341248 -0.5694659948348999 1.551503539085388 3.206167697906494 2.564919948577881 -0.8488295674324036 -3.430304050445557 -2.325228214263916 -0.6848338842391968 1.187225103378296 0.8688910007476807 -0.08795472979545593 0.671331524848938 1.194888353347778 4.820491790771484 -0.899141788482666 -3.411194324493408 0.7041743993759155 0.04737823083996773 + -1.544002294540405 -0.7887297868728638 0.9314983487129211 1.087976574897766 -0.4193236231803894 -0.006955572403967381 0.9089468717575073 0.4165940582752228 -0.6243113875389099 -2.085224866867065 -3.36680269241333 -1.14743971824646 4.429374217987061 8.18505859375 2.526922464370728 -1.439463257789612 -2.911975622177124 -1.292481660842896 0.02361198514699936 -2.883274078369141 + 2.72967267036438 1.223486185073853 -0.4147254228591919 -1.102556824684143 0.03947576507925987 1.598259210586548 3.364975452423096 1.16395115852356 -3.654291391372681 -4.9219970703125 -2.223340749740601 -1.48681640625 -1.157513499259949 -2.681891202926636 -2.685308933258057 3.31487774848938 7.715513706207275 -0.2770547270774841 0.8034194707870483 -1.348137140274048 + -1.842585682868958 -1.539855480194092 -1.55155611038208 0.7617592215538025 2.24738073348999 1.404512166976929 -0.0482788160443306 0.2210453450679779 1.090998649597168 -3.461035966873169 1.544136762619019 -3.229188919067383 -2.070632934570312 3.600785732269287 -1.455200552940369 3.69648814201355 1.746862649917603 0.6004441380500793 0.08029398322105408 -1.796372890472412 + -2.415617942810059 -3.211170673370361 -4.819873809814453 -3.206589937210083 1.787257552146912 4.948456287384033 -0.1977581977844238 -3.283747673034668 -1.607443928718567 0.65901118516922 -0.03758396208286285 -1.439054727554321 -0.6943122148513794 -0.1511005163192749 1.362555384635925 6.210984706878662 -0.5453330278396606 -0.01679189503192902 1.862467169761658 4.795656681060791 + 0.856853723526001 0.8676319718360901 1.264796376228333 1.778098940849304 2.750473976135254 2.78684401512146 1.633050799369812 0.5312818884849548 -0.5235286951065063 -1.18840754032135 -1.003754019737244 0.4010737836360931 -1.194388151168823 -2.923749446868896 -2.785791158676147 0.01484451070427895 -1.729824185371399 -0.3013865947723389 7.437404155731201 -8.671523094177246 + -3.133574724197388 -2.42682409286499 -1.867851614952087 -1.267155647277832 -0.8527985215187073 -1.118702411651611 -0.0356421135365963 0.301592618227005 -1.012029647827148 -0.409947544336319 0.3539893329143524 1.103417873382568 3.380499601364136 5.894412994384766 3.340315341949463 1.212600350379944 3.397170066833496 1.995545506477356 -2.641837120056152 -6.213176727294922 + -2.355335235595703 -2.020031929016113 -1.706264615058899 -1.858449697494507 -3.014138221740723 -2.368912696838379 -0.3175995647907257 0.9534608721733093 1.996512293815613 2.713643312454224 2.526366710662842 1.092188835144043 1.637070775032043 1.919391751289368 -1.441635847091675 -0.2470939606428146 4.631109237670898 -0.2607018053531647 -1.011650443077087 -0.867921769618988 + -0.1634024679660797 0.7038992047309875 2.01164722442627 4.823482036590576 6.365779876708984 3.551002264022827 -0.9600869417190552 -0.7979612350463867 1.504276752471924 0.008344966918230057 -2.356373310089111 -1.682130813598633 0.8478856086730957 1.295838952064514 -0.7240107655525208 -1.516607999801636 -3.840235948562622 -3.183795928955078 -2.234462738037109 -3.653089284896851 + -4.10896635055542 -2.948151588439941 -1.846358299255371 -2.215651512145996 -2.276339769363403 -1.934123635292053 -1.9860680103302 -1.519635796546936 0.09298322349786758 1.52109158039093 2.943732261657715 2.536495447158813 1.460915684700012 1.980175018310547 2.281753540039062 2.428494930267334 -0.2390885055065155 -0.3986181616783142 0.5407825112342834 3.68657374382019 + 0.3376611173152924 -0.405711442232132 -0.7594498991966248 -0.6338635087013245 0.9688994884490967 2.71795129776001 2.178635358810425 -1.594286561012268 -3.96287989616394 -4.945488452911377 -2.866297721862793 0.9431570768356323 1.468511581420898 0.7158414721488953 1.673624277114868 1.029506087303162 -1.533793449401855 2.920562267303467 3.113263368606567 -1.365842700004578 + 2.899140596389771 0.9370946884155273 -0.6385203003883362 -0.2824523746967316 0.4858080148696899 0.653084397315979 1.642471432685852 2.847016572952271 3.041836500167847 0.260204017162323 -3.388786315917969 -1.993575930595398 0.01249594613909721 -3.636595487594604 -4.419864654541016 -0.5688806772232056 0.259507417678833 3.263191699981689 -0.7724171876907349 -0.6007593870162964 + 0.3602983951568604 -1.103044390678406 -2.610003232955933 1.862635135650635 4.10805606842041 -0.6760388612747192 -0.2770002782344818 0.8007866144180298 -1.50946056842804 -2.143035650253296 2.251482009887695 -3.210285425186157 -1.534357666969299 -2.806710243225098 -0.4910678565502167 6.850430011749268 0.04701343178749084 -2.011737108230591 3.84626293182373 -1.754221439361572 + -3.970570802688599 0.9034222960472107 1.601167321205139 -3.261712312698364 -1.454250574111938 2.371148347854614 -0.5763523578643799 -0.3183937072753906 -1.859842419624329 4.226692199707031 2.478902578353882 2.609435081481934 -3.968642473220825 -1.910259604454041 2.649215221405029 -0.3447525501251221 -0.3537707626819611 -0.1577663272619247 1.331998586654663 0.004331546369940042 + 0.9033505320549011 1.018759727478027 0.9994967579841614 0.1703789681196213 0.05728701502084732 0.7972038388252258 1.196253418922424 0.806815505027771 1.384194612503052 1.721873760223389 0.04775457829236984 -0.4318471550941467 1.117746472358704 -0.2524875104427338 -1.877697229385376 -0.3937424719333649 0.1000218093395233 -1.898982763290405 -2.84639310836792 -2.619985818862915 + 0.9135280251502991 1.203501224517822 1.668694376945496 2.154065847396851 2.527366399765015 2.730547189712524 1.689695358276367 -0.1636868715286255 -2.054582834243774 -1.985506534576416 0.1739869862794876 1.989100456237793 1.741321682929993 -0.1648613959550858 -1.175531029701233 -1.237800359725952 0.4519326388835907 -1.030008912086487 -3.706311941146851 -5.72545337677002 + -3.142806529998779 -3.919329166412354 -4.734344959259033 -4.40484094619751 -2.063961505889893 -1.018884420394897 0.8597702383995056 1.255039572715759 1.6310213804245 0.6763664484024048 -0.5272673964500427 0.9387079477310181 1.663054347038269 1.33214795589447 1.244482755661011 1.056186676025391 2.961543798446655 5.027171611785889 4.088237285614014 -2.922294855117798 + -0.9770626425743103 -0.4073547124862671 0.3676201403141022 1.642319798469543 3.005655288696289 2.641597747802734 1.796241283416748 -2.53751277923584 -6.613279819488525 -4.721647262573242 -2.995388746261597 -2.126639366149902 1.196971416473389 4.928654193878174 5.778659343719482 0.2262211591005325 -1.624743938446045 -3.515040397644043 -0.91311115026474 4.84783411026001 + 2.837055683135986 0.9031884670257568 -1.532898187637329 -2.502817392349243 -0.1501402705907822 3.225682258605957 3.147495031356812 -0.8131982088088989 -0.43022820353508 2.090200662612915 0.8426501750946045 -5.467745304107666 -5.644083976745605 -1.516536116600037 1.89213752746582 1.069879412651062 2.553152322769165 -0.253553569316864 -1.562990188598633 1.312758684158325 + -0.5927649736404419 -1.844843864440918 -2.575576305389404 -3.442096948623657 -2.571449995040894 -0.9164751172065735 0.02997413277626038 0.4077724516391754 -0.122354082763195 -2.290364503860474 -3.182424068450928 -1.360231876373291 2.503585577011108 2.873739957809448 2.53493857383728 3.836205959320068 3.836267471313477 2.364410877227783 -1.161432385444641 1.673118233680725 + 2.856972455978394 2.492480278015137 2.231014966964722 0.7411325573921204 -1.052316427230835 -0.8533980846405029 0.671392023563385 0.6464994549751282 0.9309341311454773 -1.040181040763855 -3.618435144424438 -2.053068161010742 3.62058162689209 1.61152446269989 -6.782958984375 -1.981187582015991 2.699594736099243 0.1594014912843704 0.08959367126226425 -1.369579911231995 + 1.078739285469055 1.074744462966919 0.6718518733978271 0.5085514783859253 -0.09625278413295746 0.0615365207195282 0.8627645373344421 -1.188016176223755 -3.092968463897705 -3.108200073242188 -2.471059560775757 1.775631666183472 6.050312995910645 3.529508113861084 -1.648690223693848 -2.167469501495361 1.695204734802246 3.226016283035278 -2.882296323776245 -3.879907131195068 + 0.9792439341545105 1.214890956878662 2.308911561965942 3.733537435531616 3.540550231933594 0.3062601089477539 -4.126937866210938 -3.654101133346558 -0.9159884452819824 1.832683086395264 1.80902099609375 0.4586995542049408 -0.6427890658378601 -0.8560721874237061 -2.392578363418579 -2.416328191757202 -2.383878946304321 -0.3694500625133514 1.286453366279602 0.2878735959529877 + 2.423818826675415 3.007327318191528 2.135926485061646 -2.034657955169678 -5.461593627929688 -2.561244010925293 -0.338556706905365 -0.5013476014137268 -0.1401437968015671 -0.3544419407844543 0.3951407074928284 1.008994817733765 0.7905126810073853 0.305091917514801 0.9002846479415894 -0.148711159825325 1.587835788726807 3.022983074188232 -4.334061145782471 0.2968471646308899 + -6.327876567840576 -4.028615951538086 -0.2255803793668747 1.545189738273621 -1.878235936164856 -3.734161138534546 -1.011298775672913 -0.5493985414505005 -2.806061983108521 -2.748118877410889 2.139888763427734 2.564397811889648 2.625416040420532 3.003743648529053 0.53402179479599 1.336577415466309 0.6078375577926636 4.079238891601562 2.18957781791687 2.68345832824707 + 2.581474304199219 2.36850380897522 1.43277370929718 0.2482245415449142 -0.1808166205883026 -0.8153743147850037 0.7429525852203369 2.223650455474854 1.142540693283081 -1.983848690986633 -2.907890558242798 0.9047016501426697 2.719773292541504 0.05290422588586807 -1.04272198677063 -1.639018297195435 -6.297164440155029 4.667632579803467 -2.044981002807617 -2.173316955566406 + 2.338831663131714 3.953107357025146 5.057451725006104 3.495959997177124 -0.01505088247358799 -2.239426851272583 -2.637377262115479 -4.052860260009766 -3.427762985229492 -2.303401470184326 -1.582272410392761 -0.2015602886676788 0.1802167594432831 0.9930737018585205 0.4057787954807281 -1.297936677932739 2.388148307800293 2.07930588722229 0.5604507923126221 -3.694672822952271 + -0.06280031055212021 0.1822905689477921 0.9343177676200867 1.633650898933411 1.086728930473328 -0.9122570157051086 -1.499099731445312 -0.4103981554508209 0.7165676951408386 2.630934000015259 4.361100196838379 2.107539653778076 -0.9250072836875916 -0.702198326587677 -1.436064839363098 -1.212265729904175 -1.790579915046692 -5.674106121063232 -3.231900215148926 4.203548431396484 + -0.9261225461959839 -2.652244806289673 -3.41820240020752 -1.213795065879822 2.22429633140564 2.756520748138428 0.2317240685224533 -1.048009157180786 1.010584354400635 -1.464856624603271 -1.315748929977417 -0.9065449833869934 -1.199864625930786 -0.5329930782318115 4.44901704788208 -3.004823446273804 -2.298711061477661 2.834484815597534 2.923709869384766 3.551576852798462 + 1.34647274017334 0.9438439607620239 0.707275390625 -1.848343014717102 -3.687234878540039 -2.206405401229858 -1.744781255722046 -3.352344751358032 -1.09133780002594 0.7478398680686951 0.4757425487041473 0.5614649057388306 1.034227967262268 0.8030547499656677 1.022857069969177 5.572185516357422 -2.217324495315552 -1.043362736701965 3.554798364639282 0.4213726222515106 + -0.2160917222499847 0.07304821908473969 0.02678781189024448 0.7684974670410156 0.8867902755737305 -0.07795398682355881 0.3844016790390015 0.6891030669212341 2.269387006759644 2.06947922706604 -1.088860154151917 -5.27960729598999 -1.748061895370483 6.508728504180908 -1.883930563926697 -5.512304782867432 1.636713266372681 2.368702411651611 -1.225628852844238 -0.6492009162902832 + -1.255194544792175 -1.302929759025574 -0.6579268574714661 -0.1076324284076691 1.711164236068726 3.384237051010132 2.538342952728271 1.231293678283691 -0.02371722273528576 -2.692868947982788 -5.822212696075439 -4.666101455688477 1.978023171424866 3.319245338439941 0.4231303930282593 -0.07671023160219193 -0.07308174669742584 1.972413301467896 0.9325659275054932 -0.8120441436767578 + -1.279676198959351 0.1432122439146042 1.453585743904114 2.485038280487061 2.522484064102173 1.274455070495605 -0.998775839805603 -4.58380126953125 -1.029544472694397 6.014295101165771 5.2723069190979 -1.385550260543823 -3.730100154876709 -2.692431211471558 -1.094702959060669 -0.6503020524978638 1.181514143943787 -0.8170534372329712 -1.225354075431824 -0.8596006631851196 + 8.950066566467285 2.162154197692871 -2.465624094009399 -3.813029289245605 -0.3172167241573334 1.989170789718628 1.339954972267151 1.143736004829407 -0.6551546454429626 -1.059598922729492 0.3803310394287109 3.058720111846924 2.601807594299316 -0.5292413234710693 -4.76899528503418 -3.650734186172485 -2.989776611328125 -2.203534126281738 -0.891753613948822 1.718718886375427 + 3.925971031188965 2.762718915939331 0.3577904105186462 0.07022497057914734 -0.2839126288890839 -3.654122114181519 -1.787204623222351 0.484510213136673 2.004240989685059 0.1203320100903511 3.055083036422729 -3.118391513824463 -0.4780527055263519 -4.470702648162842 3.524649143218994 -1.642618417739868 -1.789724946022034 -0.5149629712104797 -0.7095901966094971 2.143762826919556 + 1.680977463722229 2.680704832077026 2.953125 2.681848764419556 3.414096593856812 2.931484937667847 1.625633835792542 -1.982954502105713 -3.478357315063477 -1.464381337165833 0.04214123263955116 -0.2089722156524658 1.231490850448608 -0.5130674839019775 -5.040481090545654 -6.227958202362061 -2.312071800231934 1.129736423492432 1.778091430664062 -0.9210825562477112 + -2.685198783874512 -2.693038940429688 -3.197998523712158 -3.600865602493286 -1.876337885856628 2.737993478775024 4.938388824462891 1.53123950958252 -0.1327638030052185 1.480213761329651 1.392121434211731 0.1407555192708969 2.590087413787842 2.508197069168091 0.3467240631580353 -1.601864099502563 1.324195504188538 2.399215698242188 -2.399705648422241 -3.201367139816284 + 4.649632930755615 4.103415489196777 2.230583667755127 -1.208535075187683 -2.979002475738525 -2.531723976135254 -1.483600258827209 0.01598095707595348 1.992982506752014 4.341715335845947 3.270479440689087 1.567877054214478 -0.5994386076927185 -0.1800925731658936 -1.483845114707947 -1.11552369594574 -1.85425853729248 -2.021752119064331 -3.223924160003662 -3.490976572036743 + -2.587739229202271 -4.004673957824707 -0.1615901589393616 1.465993642807007 -0.8009586930274963 0.4228487014770508 1.01431405544281 3.661267757415771 3.130116701126099 -5.053112030029297 -4.402786254882812 0.9835018515586853 2.532066822052002 1.21819281578064 0.37729811668396 -3.090780258178711 3.366688966751099 -0.003572235116735101 0.4895821809768677 1.443337559700012 + 1.083445072174072 1.350360035896301 1.467774510383606 1.051374912261963 -0.5367999672889709 -1.734742879867554 -1.915510773658752 -2.681770324707031 -4.414272308349609 -3.800456762313843 -0.5848281979560852 0.8424116969108582 1.573248863220215 -0.3854655623435974 -0.7289639115333557 2.945659875869751 4.600401878356934 1.968300342559814 -0.7895047068595886 0.6893418431282043 + 2.117254734039307 1.794649720191956 1.76526951789856 1.228325486183167 0.853095531463623 1.049728155136108 0.7880261540412903 0.9458931088447571 1.611085176467896 1.895824313163757 2.173893690109253 3.566093921661377 1.621903657913208 -3.045209884643555 -4.809722900390625 -3.937893867492676 -3.790269613265991 -2.349242448806763 -1.712751150131226 -1.765950083732605 + -0.550390899181366 -0.1456060409545898 0.06831026822328568 0.06755679845809937 -0.3594590425491333 -0.6108787059783936 1.305925965309143 3.565895557403564 3.845162391662598 3.343498945236206 4.23656702041626 1.139753937721252 -4.096770763397217 -3.984713077545166 -2.574383974075317 -1.49754524230957 1.370550513267517 -1.396419048309326 -2.481056690216064 -1.245996832847595 + 2.539516925811768 3.312321424484253 3.472085475921631 1.80453085899353 -1.291619300842285 -2.945203304290771 -2.752407789230347 -0.7741461396217346 1.255736112594604 1.038846611976624 0.3887260854244232 0.2155319005250931 0.5921913981437683 -0.7804065942764282 -1.855653166770935 -1.52841317653656 1.821839094161987 3.595362186431885 -1.577325224876404 -6.531517028808594 + 1.448929667472839 0.9731826186180115 0.3772236108779907 0.4992556869983673 0.03069067560136318 0.2661497294902802 -0.6922726631164551 -1.757544279098511 -1.942002177238464 -0.2323834449052811 -0.1351326704025269 -1.141071438789368 -1.922140121459961 -0.5856561660766602 -0.4116664528846741 0.988368034362793 8.018025398254395 5.373849868774414 -4.720942974090576 -4.434868335723877 + -1.300205707550049 -1.283541560173035 -2.541507959365845 -1.363983392715454 1.581914305686951 1.192334413528442 -3.307676553726196 -6.183123588562012 -0.2655551731586456 5.10042667388916 1.284762382507324 0.6987558603286743 -0.1073669418692589 1.511645436286926 -0.2220783829689026 -1.443181872367859 0.4423579573631287 1.494206070899963 4.214337348937988 0.4974804818630219 + 3.982675313949585 2.500311851501465 0.9296759963035583 -0.2905532717704773 -0.9293051362037659 0.4707818627357483 1.093547105789185 1.030629634857178 -0.9216092824935913 -1.830772519111633 -3.620242834091187 -5.397396564483643 0.4524465501308441 2.335021734237671 -0.712591826915741 -0.5228031277656555 5.887351989746094 0.2700175642967224 -1.985262274742126 -2.741916179656982 + -1.743592143058777 -3.184886932373047 -4.194586277008057 -3.433204650878906 -1.825550436973572 0.4183304607868195 0.01079587917774916 -0.8160049915313721 1.921983361244202 1.985825896263123 1.164842963218689 -1.048493385314941 -1.276103138923645 1.516258358955383 4.86310338973999 4.435692310333252 3.67277717590332 -2.676289319992065 0.8816239237785339 -0.6725241541862488 + -1.183035373687744 -2.049641609191895 -2.717050313949585 -1.753745079040527 0.3172051012516022 2.691312789916992 2.903335571289062 2.621742010116577 1.172496676445007 -0.882566511631012 0.9131653904914856 2.198816299438477 1.515944004058838 -0.3016216158866882 -0.7288107872009277 1.069084405899048 3.881456613540649 -0.0991465300321579 -3.955688714981079 -5.613255023956299 + -2.34644889831543 -0.9500645399093628 2.081428050994873 2.734233617782593 1.797738671302795 -0.006271620281040668 -1.47850501537323 -0.89984130859375 -2.507781028747559 -4.745498657226562 3.516669273376465 1.686064839363098 0.09878169000148773 -1.788741588592529 -1.648031234741211 1.870131969451904 0.6805910468101501 3.269325494766235 0.9005476832389832 -2.264332294464111 + -3.011304616928101 -1.872262954711914 -0.5455194115638733 0.3007282018661499 0.6100534796714783 0.2692229747772217 -0.03983331099152565 -0.2470410317182541 1.529674887657166 4.210292339324951 3.105183362960815 -0.6378636956214905 -1.827103137969971 -1.803852558135986 -0.8596709966659546 5.830551624298096 -2.828168869018555 -3.047624111175537 -1.632792234420776 2.497328758239746 + -2.664051294326782 -0.2667175531387329 1.790863275527954 2.401898145675659 1.839009404182434 0.7107056975364685 -0.6093127131462097 -1.575464606285095 -3.61558198928833 -4.224365711212158 -1.074870109558105 1.991366028785706 2.224975109100342 1.857958793640137 1.306209564208984 -0.4488008618354797 -1.27746307849884 -1.346636533737183 -0.1418596357107162 3.122139453887939 + 3.413169145584106 2.538918256759644 0.3459382653236389 -0.9251654148101807 -1.021764039993286 -2.135052680969238 -3.619184494018555 -1.634521007537842 0.4082626700401306 0.3465279638767242 0.6109509468078613 2.378391981124878 -3.827320098876953 -0.9945292472839355 1.115954279899597 -2.059475660324097 5.303928852081299 0.9681726098060608 1.328379154205322 -2.541584014892578 + 1.499601602554321 1.000034093856812 0.2513402104377747 -0.1194327101111412 0.961767315864563 2.157263040542603 2.368011951446533 1.760470986366272 0.003814725670963526 -1.885188221931458 -1.488059639930725 1.969880819320679 0.01281854044646025 0.07247123867273331 -0.4742676317691803 -2.063200950622559 -2.894011974334717 -0.8292675018310547 -1.867210507392883 -0.436829149723053 + 7.415341854095459 4.679947376251221 -0.01050963532179594 -4.071547985076904 -3.97344708442688 -2.266092300415039 -0.7633808255195618 -0.04246245324611664 -0.203739657998085 -1.227560043334961 -1.35532009601593 1.050325751304626 2.07463526725769 0.9253273010253906 0.1675505042076111 1.64550518989563 3.207226514816284 -0.2274925410747528 -1.352173924446106 -5.672138690948486 + -1.898545145988464 -0.6441818475723267 0.3502191007137299 1.066592335700989 0.2693812251091003 -1.69586718082428 -3.87159538269043 -2.28667163848877 0.4059168696403503 2.196408987045288 1.898446559906006 1.779008626937866 0.9248983860015869 0.2051427960395813 1.24515974521637 3.303592681884766 6.128532886505127 -1.937797427177429 -3.950801134109497 -3.487842082977295 + 0.1516454070806503 2.215803146362305 4.908269882202148 2.082131624221802 -2.436846733093262 -3.718151092529297 -0.1713129431009293 -1.137084364891052 -3.646186590194702 -2.168651819229126 3.060532093048096 1.469862461090088 -1.273031115531921 -0.1882144659757614 -3.945636749267578 -0.8899976015090942 1.718190670013428 0.6414726376533508 1.18510377407074 2.142102241516113 + 0.2086958885192871 -0.6458078026771545 -0.1587435454130173 1.82531213760376 2.517449378967285 0.8300987482070923 -2.093193292617798 -2.139988660812378 1.725311875343323 1.53205668926239 -1.278612375259399 -1.996461272239685 -2.516732215881348 -4.302355766296387 -3.053000450134277 5.937968730926514 3.488107919692993 2.696087121963501 -1.575858235359192 -1.000340461730957 + 0.09748056530952454 1.122649192810059 0.6962146759033203 1.047524333000183 1.269667744636536 0.227587416768074 -0.4924246966838837 0.2546910643577576 2.253618240356445 1.903453588485718 -0.3235071301460266 0.6117635369300842 2.720096111297607 3.185922861099243 -4.25635290145874 -8.060596466064453 -3.68529486656189 -3.083024978637695 -0.4128779768943787 4.923409938812256 + 1.630689978599548 0.98050457239151 1.333264231681824 1.829413056373596 2.540329694747925 1.638649225234985 0.8695799708366394 1.013662576675415 1.412273168563843 -3.671929597854614 -5.960317134857178 -2.860669851303101 -1.072245955467224 -1.200642466545105 0.4062235951423645 2.335040330886841 2.680099487304688 0.2577986121177673 -0.592905580997467 -3.568818092346191 + 4.689018726348877 4.519196033477783 4.059896469116211 3.0339674949646 2.299744844436646 1.235875248908997 -0.1321182250976562 0.100344642996788 1.02567183971405 0.3347478210926056 -1.620137095451355 -2.011083602905273 -2.032325267791748 -2.117369174957275 -2.707364082336426 -2.422475337982178 -1.503098011016846 -2.15949559211731 -2.712530612945557 -1.880461692810059 + 2.306589126586914 -0.4024480581283569 -2.301783800125122 -2.135865688323975 0.5871487855911255 1.249439477920532 -2.285779714584351 0.3783716261386871 2.349616765975952 -0.3999252617359161 -2.693830251693726 1.106496930122375 -0.2962234020233154 -4.055545330047607 4.353967666625977 -2.374120950698853 1.936208486557007 2.02873420715332 0.7309495806694031 -0.08200207352638245 + 2.786206960678101 2.668025970458984 1.745712757110596 0.7529512047767639 0.5644647479057312 0.8536949157714844 1.513676881790161 1.202269554138184 0.9400677084922791 0.4857968091964722 0.6255044937133789 -0.8105387091636658 -3.529870510101318 -5.842987060546875 -4.407203197479248 -0.05232741311192513 1.46184504032135 -1.924028873443604 -3.01827335357666 3.985016107559204 + -0.008113428018987179 0.5660753846168518 0.9294919371604919 1.581533432006836 1.115763783454895 2.067715406417847 4.347882270812988 2.955169439315796 -6.827727794647217 -1.862815737724304 -2.504034280776978 -0.9208692908287048 0.1155669912695885 -1.236315250396729 1.07185161113739 3.006508588790894 -2.592896938323975 -1.709957122802734 1.049230813980103 -1.144058346748352 + 2.409350395202637 2.23582124710083 -0.3402231633663177 -2.433928251266479 -1.385465264320374 -0.5246292352676392 -2.478551387786865 -1.993001580238342 -0.865767776966095 -1.606540441513062 -1.063154578208923 -0.7123730182647705 1.660784840583801 7.742666244506836 -2.127227783203125 -1.822961568832397 -2.400290727615356 0.6258722543716431 2.222369432449341 2.857248067855835 + -4.636505126953125 -3.944947242736816 -1.174988627433777 1.544285297393799 2.648262500762939 1.770408868789673 0.08630818873643875 -2.455178260803223 -2.924627780914307 0.1822405755519867 3.947190761566162 3.241473197937012 0.5515185594558716 -0.7145354747772217 -0.8927555680274963 -0.1512598246335983 1.103008270263672 0.7411171793937683 0.9069061875343323 0.1720729023218155 + -1.00038480758667 0.6768290996551514 3.58110523223877 3.822054147720337 1.054018139839172 -1.22930371761322 -0.8793721199035645 -0.4868297576904297 0.1832262724637985 -0.6697851419448853 -1.872934818267822 0.139283612370491 6.782491683959961 -2.623489141464233 -5.121035099029541 -2.204014539718628 -2.21247935295105 2.219970941543579 -0.0395641140639782 -0.1197867766022682 + 5.36863899230957 2.320730447769165 -0.9496486783027649 -3.339934587478638 -2.172893524169922 -0.3047231733798981 -0.3569243848323822 1.084809064865112 1.083213329315186 0.0910109207034111 -0.1769344508647919 -1.477084517478943 -1.846298098564148 -1.744992733001709 -2.515811204910278 -2.416417121887207 -0.7893837094306946 -1.082106947898865 2.302924394607544 6.921826362609863 + 0.2962099313735962 1.402395248413086 2.869835138320923 4.363369464874268 4.366862773895264 2.365393400192261 -1.150591611862183 -4.272635936737061 -4.453513622283936 -2.193560838699341 -0.7572203874588013 -1.033759951591492 -0.5224516987800598 -0.3620997965335846 -0.5172574520111084 -2.661078691482544 0.06091374531388283 4.675126075744629 -2.05347204208374 -0.4224680364131927 + -0.4634552597999573 -0.7852734327316284 -0.3235795199871063 1.48763906955719 2.065875291824341 1.622999906539917 1.532273650169373 -0.02392737753689289 -1.683803915977478 -3.235286235809326 -2.824216842651367 -3.836560487747192 -2.768944263458252 -1.92069149017334 -0.4522866308689117 3.212500333786011 1.505879402160645 -1.039793610572815 0.8325814008712769 7.098064422607422 + -0.2492552399635315 1.817596554756165 3.026833057403564 1.543034195899963 0.698566198348999 -0.2403708249330521 -0.5762346386909485 -0.1735755205154419 0.6721184253692627 -0.01150834839791059 -1.593131422996521 -4.011972904205322 -4.170482158660889 -1.676751375198364 -1.095991611480713 -3.052336692810059 -1.732545256614685 2.67919397354126 2.718042373657227 5.428771495819092 + -5.781765460968018 -2.349586248397827 0.6335902810096741 2.558069705963135 0.6671069860458374 -2.355352878570557 -3.23147177696228 -2.631713390350342 -0.4098121225833893 1.325615406036377 1.105318903923035 -1.755217909812927 -1.130976915359497 2.656232833862305 2.981982231140137 3.440193653106689 3.753854990005493 2.051274538040161 -0.8867725133895874 -0.6405686736106873 + 4.928459644317627 -7.384880065917969 -2.831598043441772 2.505595207214355 -0.1236712262034416 0.9499881267547607 -1.34644889831543 0.7326071262359619 0.8114901781082153 -0.3090329170227051 -1.413174867630005 -0.2937881946563721 -0.8449950814247131 -1.185345768928528 1.056826829910278 1.341277241706848 1.592118501663208 0.9586052298545837 0.1298162192106247 0.7261488437652588 + -2.943997383117676 -2.495987176895142 -0.9931591749191284 0.4088180065155029 -0.05235563218593597 0.2732318043708801 2.618948459625244 2.107980966567993 -1.746818423271179 -1.972509503364563 -1.243218421936035 -1.533345937728882 -0.004780224524438381 -0.7466258406639099 -0.8186952471733093 -0.07976577430963516 -0.9385713338851929 0.3193176090717316 8.988508224487305 0.8530231118202209 + 0.6725184917449951 -0.7527700066566467 -2.619318008422852 -4.336596488952637 -4.078447818756104 -0.9098162055015564 1.987511992454529 2.89670991897583 1.877282500267029 1.066784143447876 -0.3056377768516541 -0.6793118715286255 2.670625448226929 4.677536964416504 1.789814472198486 -1.990837812423706 -0.4971506595611572 -1.528030633926392 -0.7574587464332581 0.8165900111198425 + 0.3461527526378632 -1.272879719734192 -0.9220470190048218 2.760842800140381 2.638737678527832 -2.523347854614258 0.0795324519276619 4.064794063568115 1.336477637290955 -3.260955333709717 0.5778152346611023 -3.985713005065918 1.516497850418091 0.6206018328666687 -2.55692195892334 0.4346851408481598 -3.904742240905762 0.1841141283512115 2.090150356292725 1.776205658912659 + -5.227280139923096 -1.209118366241455 2.191707372665405 2.639630317687988 0.6573095917701721 -1.028080463409424 0.3515641093254089 1.960708737373352 2.340264797210693 2.408000230789185 2.187431335449219 1.431820631027222 -2.120247602462769 -2.748018026351929 -2.418210506439209 -3.571943283081055 -1.392201900482178 4.845144271850586 -0.9770885109901428 -0.3213975727558136 + -2.043016910552979 -3.046781063079834 -3.842391014099121 -2.219273567199707 2.093014240264893 4.279487609863281 3.131388902664185 2.988543033599854 2.473475456237793 0.06153576821088791 -3.807759284973145 -2.551745176315308 -2.139024257659912 -1.267277240753174 0.2637574970722198 5.370180606842041 2.648119926452637 3.335795879364014 -2.156539678573608 -3.571489572525024 + 1.275663614273071 -0.1627533137798309 -2.799559593200684 -3.372941017150879 -2.410378932952881 -1.358693480491638 0.1089682951569557 0.5672398209571838 0.1229675635695457 1.788984060287476 5.03717041015625 4.388677597045898 1.879981160163879 -0.4258941113948822 -0.4019408822059631 4.588913440704346 1.558045744895935 -1.894327998161316 -4.425883769989014 -4.064239978790283 + 4.318189144134521 2.751234292984009 0.2829276025295258 -2.910548686981201 -1.979781270027161 2.966404676437378 4.263378143310547 -0.7366398572921753 -1.090137124061584 -0.01572997123003006 -1.269016146659851 -3.628020763397217 -2.645751237869263 0.5460577011108398 -0.7541292309761047 0.7128481864929199 -2.082374811172485 -0.70896315574646 2.64811372756958 -0.668062686920166 + -4.623716354370117 -2.302133083343506 -6.889860153198242 -6.005307674407959 -1.081237435340881 16.72801399230957 -2.088576078414917 -2.896540880203247 4.548826694488525 -6.325735569000244 0.5507532954216003 2.046671628952026 -4.968996047973633 -3.730587959289551 3.371580839157104 -2.611865043640137 -1.423172473907471 -1.252711296081543 16.52289772033691 2.431673526763916 + 3.2436683177948 1.653014421463013 -0.2329336106777191 -0.2412382215261459 1.389712929725647 2.610812664031982 1.040119647979736 1.056528329849243 2.587957143783569 0.02149972133338451 -2.710483074188232 -3.909730911254883 -3.513160228729248 1.472121119499207 4.622661113739014 -1.375612378120422 -5.545970916748047 0.6564407348632812 -0.6024191379547119 -2.222986221313477 + 2.791118621826172 2.096353530883789 0.8548614382743835 0.326848179101944 -1.355351567268372 -1.673450469970703 -1.079655528068542 0.7899753451347351 -0.7372048497200012 -2.989439010620117 -0.6738529205322266 7.742810249328613 3.953354597091675 -2.906037569046021 -3.507718324661255 0.3794279098510742 -1.802185297012329 -0.01503289397805929 0.4149118065834045 -2.609737157821655 + -1.306400656700134 -0.237811341881752 1.566078066825867 3.469221353530884 3.999252796173096 3.54664945602417 3.208535194396973 1.926640629768372 0.3310911953449249 -0.6113461852073669 -2.109458923339844 -3.80659818649292 -3.577003479003906 -1.582272291183472 -2.446916341781616 -2.507627725601196 2.779303312301636 1.469172477722168 -2.111587524414062 -1.998923182487488 + -3.847949743270874 -3.146463871002197 -1.405809998512268 -0.3051537871360779 -0.02258723601698875 -0.07752328366041183 -0.1886478960514069 1.321210145950317 2.052456140518188 0.4253513514995575 -0.4235289394855499 1.592959403991699 0.213726818561554 -2.012930154800415 -0.4827274978160858 2.060429573059082 2.793022632598877 -1.223517894744873 2.558805465698242 0.1188790947198868 + -2.764703512191772 -2.129357814788818 -0.917736828327179 1.197009801864624 2.688787937164307 1.59153139591217 0.3399880230426788 -1.711789488792419 -2.784286022186279 -1.924505233764648 0.50083988904953 0.3961921632289886 -0.216722697019577 -0.2049663066864014 -1.116783022880554 -1.271123290061951 -1.928176403045654 -0.9552882313728333 2.082529067993164 9.128556251525879 + -1.263115167617798 -1.12502133846283 -0.9244920015335083 -0.7616177797317505 -0.576793909072876 1.366979837417603 1.355091571807861 -0.3981406986713409 -0.9075824618339539 0.2151392996311188 -0.4842222630977631 -2.200862169265747 -0.6150520443916321 5.542587757110596 3.255381107330322 -0.6138777136802673 -4.638441562652588 -0.6119273900985718 2.378829956054688 1.00713837146759 + 0.7585794925689697 1.766006827354431 3.076374292373657 3.163918972015381 1.732400894165039 -0.9458684325218201 -2.86342453956604 -2.686741590499878 -1.84391176700592 -0.5596410036087036 1.793423533439636 2.157157897949219 0.7795391082763672 -2.654270172119141 -5.051540851593018 -0.2388036847114563 6.217349529266357 -0.2776187062263489 -2.700377464294434 -1.622559309005737 + 3.07083535194397 2.339120626449585 0.7922935485839844 -0.9941287040710449 0.02557752095162868 1.851992130279541 1.782932639122009 0.8367459177970886 0.8800138831138611 0.9838425517082214 0.8278151154518127 -0.2318043261766434 -2.380693912506104 -0.472337007522583 1.777923464775085 1.87605094909668 -2.56452488899231 -6.413066387176514 -5.116411209106445 1.127830147743225 + 2.200177907943726 -0.4993496239185333 -2.964590311050415 -3.342673063278198 -0.7716522216796875 2.789312124252319 3.970641613006592 1.75713062286377 -2.290652751922607 -4.041758060455322 -4.369264125823975 -1.357726335525513 2.769946813583374 4.553998470306396 5.197065353393555 0.8802440762519836 -1.01824414730072 -1.084168314933777 -1.525487661361694 -0.8529430031776428 + 0.04349595308303833 0.1950835138559341 1.874127984046936 2.7015540599823 2.463735580444336 2.446211814880371 2.101677179336548 -2.962379932403564 -5.301493167877197 -0.04583136737346649 0.1571594327688217 -3.10448145866394 0.848435640335083 4.860725402832031 0.9659931063652039 -0.2521164119243622 -0.3625280559062958 -2.142562389373779 -2.997592926025391 -1.489210844039917 + -0.8642691373825073 -1.195456147193909 -1.44449520111084 -1.735252499580383 0.5135400891304016 2.650077104568481 3.272169589996338 2.410286903381348 0.4308320879936218 -0.8395769000053406 -2.17469596862793 -2.507655620574951 -0.7924020886421204 3.629956007003784 6.422986030578613 5.569507598876953 -1.43520987033844 -4.916754722595215 -4.94819450378418 -2.045391082763672 + -3.335895299911499 -2.268898248672485 -0.4255673289299011 -0.03816553205251694 -0.9779834151268005 -1.186464190483093 -0.09549914300441742 1.313698291778564 2.275920152664185 3.081841707229614 2.744543552398682 2.47901177406311 2.760192632675171 0.10756865888834 -1.410292506217957 -2.568015336990356 -1.062770247459412 -2.096790552139282 -1.319215297698975 2.022785186767578 + 4.684600353240967 -1.844922780990601 -7.143537044525146 -0.8666052222251892 2.414668798446655 4.036345958709717 2.27144455909729 -0.7613409757614136 -2.608560085296631 -1.8277747631073 0.4198328256607056 1.451507687568665 -1.922782301902771 -0.8172503709793091 1.654939770698547 -2.306989431381226 1.448765277862549 0.6824448108673096 0.02111987583339214 1.01409375667572 + -1.692325711250305 -2.184553384780884 -2.10218358039856 -0.09578699618577957 2.228186130523682 2.623479604721069 1.959334850311279 -1.318089723587036 -3.829515218734741 -3.123764991760254 -2.339495182037354 -3.976166009902954 -1.471984148025513 1.780753374099731 4.01289701461792 2.922211647033691 4.360041618347168 0.1676905900239944 0.526846706867218 1.552429914474487 + 0.3344283103942871 -1.291541695594788 -0.9038380980491638 2.56584095954895 4.820815563201904 -3.57453179359436 -6.717348098754883 2.911172389984131 0.9218342304229736 -1.986038565635681 1.170289278030396 -0.06239826232194901 2.292547225952148 0.8090817332267761 0.2117560505867004 -2.891561508178711 2.988969326019287 0.4681760668754578 -1.144858241081238 -0.9227947592735291 + -1.826314210891724 -1.754594326019287 -3.01036262512207 -1.88750171661377 0.4161270260810852 -0.2800817489624023 -1.397851347923279 -1.395628213882446 0.673579216003418 -4.044177055358887 4.391806602478027 8.167318344116211 2.898618221282959 2.443790674209595 -2.162331819534302 -0.6609148979187012 -3.967863798141479 -2.03875732421875 -0.1461312472820282 5.581264495849609 + 2.812103033065796 3.123026847839355 3.066988706588745 2.961346864700317 2.027236700057983 -1.822220206260681 -5.147045135498047 -4.246560096740723 -2.486081838607788 -1.938552856445312 -0.89797043800354 0.3832512199878693 -0.5191247463226318 -1.538990259170532 -0.08232738077640533 4.152136325836182 0.2749515175819397 -1.449609518051147 0.34468013048172 0.9827666282653809 + -1.581940054893494 -1.883486866950989 -1.772028684616089 -0.7374373078346252 1.328734874725342 2.505082368850708 0.5012051463127136 -0.672995924949646 -0.6718342900276184 0.09070800989866257 -0.6943642497062683 0.3483452796936035 2.733851194381714 5.97962760925293 -1.683677434921265 -4.372589111328125 -1.37207567691803 5.466661930084229 -2.648414373397827 -0.8633710741996765 + -0.9156389832496643 -2.105777263641357 -3.224012851715088 -2.382087469100952 -1.20255172252655 -0.2402347326278687 -0.9952443838119507 -0.3743942677974701 1.612543225288391 1.500919699668884 1.206759691238403 0.5599402785301208 1.813851833343506 4.088022708892822 8.926924705505371 -1.459465980529785 -5.284323215484619 -2.292426109313965 1.966849446296692 -1.199653625488281 + -3.427816152572632 -1.816295385360718 0.3855145275592804 1.898669242858887 1.459931373596191 -0.5537392497062683 -3.864177942276001 -3.213627099990845 -0.85962975025177 0.4924800395965576 -1.049012541770935 0.2265847325325012 1.099317908287048 4.087194442749023 3.689862966537476 -3.625888347625732 -4.641784191131592 0.5120067596435547 6.034490585327148 3.165913581848145 + 1.776201248168945 -1.040261626243591 -3.40283203125 -3.492448568344116 1.270417094230652 4.74774169921875 2.008545398712158 -1.63007926940918 -2.207189798355103 -0.1419738233089447 0.4140065312385559 0.3830350339412689 1.075376868247986 -0.08395946770906448 1.632293105125427 0.3006181120872498 4.057515621185303 -0.9087996482849121 -4.641332626342773 -0.1168743669986725 + 0.9524889588356018 0.8946379423141479 0.4786113500595093 -0.2127174586057663 0.6955034732818604 2.565141439437866 0.4860809445381165 -4.122813701629639 -3.814164400100708 0.4842146039009094 4.104711532592773 2.191668748855591 0.7880504131317139 0.4310582280158997 0.8920984864234924 -3.510748624801636 -4.833930969238281 -1.136292815208435 0.7651386857032776 1.901268482208252 + -3.330813407897949 -0.9627285003662109 0.9309161305427551 2.322856903076172 2.965914964675903 2.384452342987061 0.4624191224575043 -1.312568545341492 0.2238638699054718 1.745165109634399 3.212472200393677 2.849147319793701 2.735619783401489 1.017621040344238 -2.363679885864258 -2.882908344268799 -3.7200026512146 -1.703224301338196 -3.15653395652771 -1.417991638183594 + -0.3557108938694 -1.237022280693054 -1.920073270797729 -2.884670495986938 -2.558191061019897 0.7829590439796448 3.617220878601074 2.728307008743286 -2.455113887786865 -3.805186748504639 -0.5509454607963562 0.8650372624397278 0.02325134165585041 -1.136043906211853 -0.6322678923606873 0.113565668463707 4.386733531951904 2.084975481033325 -0.7072232961654663 3.640396595001221 + 0.1652252823114395 0.07702844589948654 -0.8720242381095886 -1.352357149124146 -0.6620933413505554 -0.4443088471889496 -0.3202587962150574 1.057315945625305 -0.02818114683032036 -0.1994329988956451 -1.262977957725525 -3.990545511245728 -4.657601356506348 6.193367004394531 2.653747320175171 1.900214672088623 2.429477691650391 1.19290566444397 -0.5250349044799805 -1.354464530944824 + 3.180796146392822 1.684457898139954 -0.2434033453464508 -1.200877070426941 -1.66473388671875 -2.266343832015991 -2.248439073562622 -3.02873682975769 -3.200077533721924 -1.758388161659241 -0.6658428907394409 2.336386680603027 4.437602996826172 4.547305583953857 4.884922504425049 1.110220193862915 -1.93416166305542 -1.145631313323975 -1.287282586097717 -1.537776589393616 + -1.023317813873291 -0.3008571267127991 0.1561834961175919 -0.04655804112553596 -0.04335153102874756 0.9429492354393005 0.7884448766708374 -0.647585928440094 -0.8861508369445801 0.7611973881721497 1.418976545333862 1.455326557159424 1.97431755065918 1.780092477798462 2.955410718917847 1.46821141242981 0.3925897479057312 -4.102686405181885 -4.564184188842773 -2.479003667831421 + -8.218681335449219 -3.566868543624878 1.855102181434631 5.511859893798828 3.82102370262146 0.8773584961891174 -0.8684132099151611 -1.030125856399536 -1.468230724334717 -0.7591843605041504 0.4122280776500702 -0.1640418320894241 0.2173622101545334 1.351261019706726 0.6267194151878357 -2.048535346984863 -1.152574181556702 3.207647800445557 0.3885404765605927 1.007549405097961 + 0.7792531847953796 1.214251160621643 1.083475589752197 -0.6135390400886536 0.4538560509681702 -0.5160768032073975 -0.2662078738212585 0.7339430451393127 -0.2886902093887329 -0.3962529897689819 -2.030474185943604 1.155610322952271 2.607173442840576 -5.100152492523193 1.58341121673584 -1.342710494995117 2.77907919883728 -1.291707038879395 -1.110264897346497 0.5660248398780823 + 5.988917350769043 -0.6864361763000488 -5.233677864074707 -7.056098937988281 -3.686964750289917 0.7768621444702148 2.619722843170166 1.668745756149292 0.5527424216270447 0.1692372411489487 -0.2117762565612793 0.3596915304660797 1.092411041259766 0.05775297060608864 -1.302576541900635 -0.1835884153842926 1.042017221450806 1.108894228935242 1.618121147155762 1.305999875068665 + -4.684010982513428 3.766290664672852 0.8334711194038391 -2.450476169586182 -1.954184174537659 -1.545153021812439 1.202027678489685 1.001728296279907 -2.442356824874878 -1.823500514030457 3.688943862915039 3.680140972137451 2.7550048828125 0.1211226209998131 -0.381228119134903 -3.584646701812744 -1.515619993209839 -0.3526636064052582 -1.22882866859436 4.913937568664551 + -2.001219987869263 -1.722123146057129 -0.858845055103302 -0.2947234213352203 -0.8887907862663269 -2.042191982269287 -1.93724536895752 -1.555139183998108 -1.761178612709045 -2.061721086502075 0.5160256028175354 1.111323356628418 -0.7145267724990845 0.02064616791903973 2.140822649002075 2.812996625900269 6.732042789459229 -1.257380366325378 -1.508837699890137 5.270064830780029 + 2.813940763473511 3.818896532058716 3.220969915390015 1.746689677238464 1.28357994556427 0.6407355666160583 0.2140964865684509 -1.017700791358948 -1.486476540565491 0.3347507417201996 -0.2448190599679947 -2.55954909324646 -2.849544763565063 -2.146551609039307 -0.429468184709549 4.529891014099121 2.647419929504395 -1.019735813140869 -5.763925075531006 -3.733203649520874 + 0.5618757009506226 0.04183336719870567 0.2829039096832275 1.755828380584717 2.759276866912842 -1.981367230415344 -6.904044628143311 -5.071457862854004 -1.772143006324768 0.9665818214416504 1.231832265853882 -0.144504502415657 0.246131643652916 0.3566900491714478 1.000815629959106 0.7930272817611694 -0.3874965608119965 5.69962739944458 0.65835040807724 -0.09376088529825211 + 2.265027761459351 2.841084957122803 2.768940210342407 -0.02663189917802811 -3.286848783493042 -3.668768644332886 -3.423656940460205 -0.9613938927650452 0.6519028544425964 -0.4566704034805298 -2.342981815338135 -0.3570006489753723 -0.3128823041915894 -1.572396993637085 -2.763247013092041 -0.4568156599998474 6.773353576660156 2.199715852737427 0.1143937557935715 2.014874458312988 + -2.565356731414795 -1.186033964157104 0.1507374197244644 0.6904939413070679 1.036520481109619 1.232287645339966 1.026824235916138 1.231656312942505 2.084303140640259 0.1626958101987839 -2.308375120162964 -2.052404880523682 1.011566281318665 0.6293473839759827 -1.249484658241272 -2.045370578765869 -1.683743953704834 1.138691067695618 -0.006142654921859503 2.701789855957031 + -0.4824840724468231 -2.227495670318604 -1.840970158576965 0.5646653175354004 -1.578695058822632 -3.812900304794312 -0.9884511232376099 2.068039655685425 0.09224601089954376 0.6240044832229614 2.781502246856689 3.469705581665039 -0.3121247589588165 -5.635539531707764 3.481332540512085 2.701026916503906 -0.774756133556366 -3.047760248184204 3.20404577255249 1.714610695838928 + 1.244764685630798 1.447283148765564 1.27377188205719 0.3290298581123352 -0.1407239139080048 -0.249041959643364 0.1230414360761642 -0.7334665656089783 -2.358121156692505 -3.595139980316162 -5.01688289642334 -4.708362102508545 -1.644675254821777 -0.2702929973602295 0.7621994018554688 1.72296130657196 1.885928988456726 3.846893548965454 2.968327045440674 3.112507104873657 + 3.532830476760864 1.905431151390076 -0.1003651320934296 -0.6697112321853638 2.297243356704712 3.411514759063721 1.557764172554016 -0.5362000465393066 -0.3026747405529022 0.283659040927887 -1.61668586730957 -1.749811291694641 -2.597909927368164 -2.010987758636475 -1.559972047805786 -1.325504183769226 -0.8779592514038086 6.520644187927246 -2.194122076034546 -3.967176914215088 + -1.871952772140503 -1.243737578392029 -0.751727819442749 -0.5315722823143005 -0.2581925094127655 1.003674864768982 1.964991688728333 2.583043098449707 3.553110361099243 4.076921463012695 3.564288377761841 3.103835105895996 0.9899579882621765 -0.09774848073720932 -0.08414078503847122 -1.007092475891113 -3.116352558135986 -4.162136554718018 -4.007534503936768 -3.707638263702393 + -0.6110165119171143 0.995637834072113 1.962226867675781 1.615572810173035 1.375821709632874 0.4468392431735992 -0.8705726265907288 -0.61809241771698 0.5076802372932434 1.598168253898621 1.521427869796753 -0.3127596080303192 -1.852982759475708 -0.8769214153289795 2.478506565093994 1.253387570381165 -4.295887470245361 -5.120477676391602 5.904015064239502 -5.100572109222412 + -9.148601531982422 9.006413459777832 3.232460021972656 -6.388524055480957 1.422566771507263 1.869997978210449 -2.803926229476929 2.283159255981445 0.3277046084403992 -0.3104619085788727 -0.9541979432106018 -0.3242390751838684 -1.423137664794922 1.508536696434021 0.2883390486240387 0.3418907523155212 -0.5461450815200806 1.322430729866028 -0.01056482642889023 0.3063026070594788 + -2.036820411682129 -2.35016918182373 -1.044999957084656 1.692157983779907 0.6363020539283752 -1.67059850692749 -1.697255849838257 -1.810060739517212 -2.504842519760132 -2.310841083526611 -2.831440925598145 -1.403926730155945 6.042915344238281 4.38822078704834 -1.034969806671143 -3.507012844085693 6.382536888122559 0.5199052691459656 1.293260812759399 3.247636795043945 + 2.786171436309814 0.9289950132369995 -0.477313369512558 -0.1216153055429459 1.810048222541809 2.165903568267822 -0.1938784867525101 -3.109621286392212 -3.023420095443726 -1.099364399909973 -1.442540526390076 -1.844265222549438 -0.3933765292167664 1.494388580322266 0.03202163428068161 -0.3237376511096954 -2.27657675743103 0.5597753524780273 1.521786332130432 3.00661826133728 + -0.3459900319576263 -0.1308896243572235 0.2063546478748322 0.7647039294242859 0.8749287724494934 1.816063165664673 1.455613017082214 -1.414953112602234 -3.19898247718811 -3.521245956420898 -2.472352504730225 -1.387831926345825 1.206044435501099 1.163167357444763 2.788333415985107 6.192074775695801 3.191872119903564 0.6181160807609558 -4.339565753936768 -3.465464115142822 + -0.7849637269973755 -0.5405548810958862 -1.06424868106842 -0.8121200203895569 -0.7035602331161499 -1.312778949737549 -1.22839879989624 -0.6326525807380676 -0.3292334973812103 0.8223403692245483 5.024534225463867 6.962143421173096 2.079214334487915 -1.857627987861633 -3.68907618522644 -3.662513494491577 -2.655725240707397 -0.4090327322483063 3.263421058654785 1.530823588371277 + 1.035767674446106 1.408733129501343 1.22136402130127 0.9877231121063232 0.6859818696975708 0.04878819733858109 1.601135015487671 2.882477045059204 3.630971193313599 2.387482643127441 -0.8575460314750671 -2.247939109802246 -2.515256643295288 -2.397141456604004 -2.383872985839844 -0.7042079567909241 1.427923440933228 1.677761673927307 -0.304531067609787 -7.585615158081055 + -4.088444232940674 -3.461344242095947 -1.622636556625366 0.7055404186248779 0.8220340609550476 0.1018122285604477 0.9279172420501709 2.196024179458618 1.8846595287323 0.507500946521759 1.01116418838501 0.9111276865005493 1.065937876701355 0.2298617660999298 1.39046585559845 8.05463695526123 -0.04711972177028656 -3.437175273895264 -4.589169025421143 -2.562790393829346 + 2.06325364112854 1.841472268104553 1.701282858848572 0.8503978848457336 -0.3080076277256012 -0.6069350838661194 -0.4206934869289398 -1.103274941444397 -1.826452493667603 -0.6048267483711243 2.19294285774231 -0.9212049841880798 -3.243194580078125 -4.524242877960205 -4.685952663421631 5.110512256622314 -0.5957462191581726 0.004722327459603548 4.086636066436768 0.9893117547035217 + 0.6028595566749573 0.171802431344986 -0.6300531029701233 -2.012423276901245 -3.666726350784302 -4.261476993560791 -3.795412540435791 -2.51570463180542 -2.445616245269775 -1.444071888923645 1.057420134544373 3.681090593338013 2.008516550064087 -0.3316654562950134 0.3660877048969269 1.296679496765137 2.620066165924072 1.972467303276062 3.479217290878296 3.846937894821167 + -0.5176569819450378 -1.686132550239563 -0.4134161472320557 1.020720720291138 -1.139117002487183 -1.082967519760132 0.5987489819526672 -0.006351599469780922 -0.3174097239971161 -1.543566226959229 -1.950517177581787 -0.7656686305999756 8.736327171325684 -5.214029312133789 -0.8509284257888794 2.924906253814697 1.764193534851074 3.639477729797363 -1.721527457237244 -1.475088357925415 + -0.5623205900192261 -2.092078685760498 -2.85969066619873 -2.095769882202148 -1.344032287597656 -0.2237742096185684 -0.6231472492218018 -1.755012273788452 -1.209031462669373 1.201611638069153 0.7974305748939514 -1.893580079078674 -1.058013677597046 1.882786393165588 3.275384187698364 -6.240147113800049 -0.8862361311912537 7.359743595123291 5.482077121734619 2.843799829483032 + -0.2564646899700165 -0.3371598422527313 -0.1493592113256454 -1.688663959503174 -4.365056037902832 -0.7148441672325134 -0.6613509654998779 -3.395405769348145 0.808099627494812 5.394294261932373 4.59424352645874 1.3478764295578 0.7274182438850403 1.429787397384644 -0.6518324613571167 -1.097482681274414 -0.5886217951774597 -0.05440934002399445 2.177875280380249 -2.518951892852783 + -2.819216251373291 -3.008774757385254 -1.555320382118225 1.190289258956909 1.834352493286133 1.310477137565613 0.8972813487052917 4.513104438781738 7.782402992248535 2.564141750335693 -2.203880786895752 -1.451546788215637 -1.009198427200317 -0.7052731513977051 -2.2630455493927 -2.216995239257812 -0.09086468070745468 0.1729571372270584 1.377644300460815 -4.318534851074219 + -1.272941470146179 1.075538635253906 2.21186375617981 -1.190088391304016 -4.319554328918457 0.3843879997730255 1.483383893966675 -3.396879434585571 0.1718388944864273 -1.530780076980591 -3.050742626190186 0.9755308628082275 -1.958547115325928 -0.8114834427833557 2.608862161636353 -0.7799949049949646 2.737862348556519 3.287628412246704 2.493192195892334 0.8809213638305664 + -3.085702896118164 -2.998663902282715 -2.427502870559692 -1.528639435768127 0.04043152555823326 0.3126021027565002 0.05091485381126404 0.2221731692552567 1.043558120727539 1.541467547416687 1.850071668624878 0.2313484251499176 -0.2265582382678986 -1.644219279289246 -3.303746938705444 -3.645859479904175 1.185133457183838 1.201941967010498 6.472959518432617 4.708288669586182 + -4.726571083068848 -0.7783393859863281 2.063473224639893 1.84335458278656 0.3135126233100891 1.385035514831543 2.482676267623901 2.129348516464233 0.8677417039871216 -1.400456309318542 -2.071055173873901 -1.627567052841187 -0.9945804476737976 -2.918722152709961 0.6114040017127991 2.338141202926636 0.8794646859169006 0.4755713045597076 -0.8270531296730042 -0.04538047686219215 + 2.444886684417725 1.102450251579285 0.2861195802688599 -1.292391419410706 -1.836443066596985 -0.3798631727695465 1.2832190990448 0.2368119210004807 -1.57464873790741 -0.7134192585945129 1.278488516807556 2.105404853820801 0.6032810807228088 -0.7284773588180542 -0.2003483325242996 0.6041272878646851 0.0788845419883728 1.742262601852417 1.242832779884338 -6.283181667327881 + 2.150618076324463 0.7029879093170166 -0.9604247212409973 -1.483393311500549 -1.04889976978302 -0.3000126481056213 0.5119193196296692 0.3146196305751801 0.5565519332885742 1.142988443374634 1.793936729431152 2.006229877471924 0.1663385927677155 -1.700566291809082 -5.047182559967041 -4.356348514556885 -1.608909010887146 1.011662244796753 -4.056429862976074 10.20431900024414 + -1.278284907341003 -1.009564757347107 -0.2334626764059067 -0.4406247138977051 -1.620192527770996 -1.760385751724243 0.1417310833930969 1.568484306335449 2.280131816864014 1.174952030181885 -1.578830003738403 1.443419814109802 4.594386100769043 2.080986738204956 0.5982211232185364 1.694727301597595 -1.135469675064087 -0.4140327572822571 -2.972537279129028 -3.133656740188599 + -0.4942384958267212 -1.047592163085938 -1.241211771965027 -0.8996909856796265 0.5448033213615417 2.168879270553589 2.366272926330566 -0.2979503571987152 -2.927075386047363 -3.418108701705933 -2.72508692741394 -2.923410892486572 -0.06215564534068108 -1.519163131713867 -3.431677579879761 -1.978963017463684 3.920609474182129 2.033552169799805 4.080483436584473 7.851727962493896 + -1.821760296821594 -2.197330713272095 -1.59965717792511 0.4990229606628418 2.388712882995605 3.208804368972778 3.246670007705688 1.828473329544067 1.355918765068054 1.040343523025513 2.032708168029785 2.122942924499512 1.398778080940247 -0.6881999373435974 -1.933196902275085 1.30211341381073 -3.807019948959351 -5.178139209747314 0.4790957272052765 -3.678279876708984 + -0.4330079853534698 0.3131713271141052 0.2686564922332764 -0.3412981033325195 -0.7717618942260742 -1.051017642021179 -0.6576240658760071 -0.4307793378829956 -0.113796778023243 0.2721555829048157 1.018352031707764 0.06853417307138443 0.405571311712265 0.3216699063777924 -0.03916404768824577 0.04132213443517685 0.7627220749855042 -6.004536151885986 -3.539169549942017 9.909998893737793 + 0.9022256135940552 0.508641242980957 0.2081129252910614 -0.09129645675420761 -0.1006664633750916 0.2260296046733856 0.5970988869667053 0.1364035755395889 0.5811063647270203 0.3292680382728577 2.464056968688965 1.625600457191467 -3.129810333251953 -5.086357116699219 -4.918898105621338 -4.075864791870117 0.724645733833313 3.228858470916748 2.386183738708496 3.484659194946289 + -0.6537494659423828 0.7332283854484558 1.562767028808594 -0.5649407505989075 -4.517839908599854 -3.595715284347534 -1.468638896942139 -0.812872052192688 -0.2901796400547028 -0.2451590597629547 0.01795168220996857 -1.01013195514679 -0.3136384189128876 0.7114138007164001 -1.299245834350586 -2.566297769546509 1.260599732398987 4.591088771820068 2.982858180999756 5.478504180908203 + -1.595106840133667 0.004218399059027433 2.077651500701904 3.318827867507935 2.232555627822876 -0.380823165178299 -0.9523966908454895 0.06919809430837631 1.707433819770813 2.123703718185425 2.678765058517456 1.735341191291809 -0.9315985441207886 -2.459148168563843 -3.221009016036987 -0.3020234704017639 2.542954683303833 -0.3207231462001801 -5.347194194793701 -2.980633974075317 + 8.484978675842285 5.10798454284668 1.450596809387207 -1.522996187210083 -2.068831205368042 -0.1522108316421509 1.13636314868927 1.15285313129425 0.01831918209791183 -1.25509774684906 -2.944597005844116 -3.14495062828064 -2.174127101898193 -1.229882001876831 -0.5651668906211853 -0.4199739694595337 -0.4242381751537323 -0.6261632442474365 -1.126787066459656 0.3039223253726959 + -1.434911131858826 0.6733859181404114 1.792589664459229 1.162557125091553 1.539647459983826 1.975577831268311 0.682404100894928 0.694273054599762 0.6961225271224976 0.006177407223731279 -0.6502417325973511 -2.422773122787476 -1.186649680137634 0.4673312306404114 -0.3465060889720917 -1.266816735267639 -1.079667806625366 0.531513512134552 1.569873213768005 -3.403881072998047 + 0.6291220188140869 0.6591586470603943 0.9982244968414307 1.410849213600159 3.761451482772827 4.826357364654541 2.175938367843628 -3.528533458709717 -3.171208381652832 -0.9293313026428223 0.1063432395458221 0.5262072086334229 -3.376620054244995 -3.88848876953125 1.15589165687561 0.7638463973999023 -1.22597062587738 0.3000786602497101 0.1415395736694336 -1.334857583045959 + -1.404036402702332 -0.4949288964271545 1.792271614074707 1.202057957649231 -1.582002758979797 -3.053953170776367 -3.284349203109741 -2.185635328292847 0.4628176093101501 0.3635879158973694 0.01238901540637016 4.487257957458496 2.035299301147461 -1.195004343986511 1.315890550613403 -2.409059286117554 -2.982527017593384 5.838627815246582 -1.855497002601624 2.936793327331543 + 2.43900728225708 0.4375534057617188 -1.192231178283691 1.717099070549011 2.562806606292725 -1.777615904808044 -6.118545532226562 0.1555164307355881 2.028718233108521 -3.116269588470459 -3.906543254852295 -0.5758532881736755 -0.339824765920639 4.248504161834717 0.04541477560997009 0.727154552936554 2.151017189025879 0.4022883176803589 -0.2515895664691925 0.3633922040462494 + -1.113993287086487 -0.3403771221637726 0.0003118672757409513 2.0294189453125 2.832032203674316 0.8379266262054443 -0.06088848784565926 1.269313335418701 -2.030551433563232 -1.668656706809998 1.498933911323547 2.048534631729126 0.6556811332702637 0.6210088729858398 -1.33629322052002 -6.148656368255615 3.61490273475647 -3.757303476333618 3.423357009887695 -2.374702453613281 + -1.197287321090698 -0.7861245274543762 0.1269521415233612 1.787760734558105 2.190688610076904 0.7736960649490356 -0.7154728174209595 -1.249329447746277 -1.603448987007141 -0.6387233734130859 1.303261518478394 3.606222629547119 3.919223546981812 3.091882467269897 1.019997000694275 -3.168501853942871 -4.899145126342773 -1.413185596466064 2.948186159133911 -5.096660137176514 + -0.7864799499511719 -1.921873450279236 -2.762947797775269 -3.141228437423706 -2.706290006637573 -2.336817741394043 -1.735097408294678 -1.686154127120972 -0.6251711845397949 1.458673357963562 2.992332696914673 4.512560844421387 4.720959663391113 4.050472736358643 1.488114476203918 -0.9130719900131226 -0.6937777400016785 2.230068922042847 -1.346580862998962 -0.7976869344711304 + -0.8808369636535645 -2.949674844741821 -4.014623641967773 -2.822420835494995 1.083713293075562 4.127925872802734 4.515237331390381 3.390237092971802 -0.1287930458784103 -3.728860855102539 -0.7648059129714966 1.671968817710876 2.003270626068115 -1.16916286945343 -0.5852150321006775 2.172300577163696 -2.329458951950073 0.5499764680862427 0.358457624912262 -0.4992374777793884 + 3.336735010147095 1.498843789100647 -0.6374315619468689 -1.804556846618652 -1.113049387931824 -1.090686678886414 0.1789370179176331 -0.4513640403747559 -4.053735256195068 -3.143187046051025 -2.379745244979858 -1.398135304450989 0.4567070603370667 3.827675342559814 2.545870304107666 -2.650899887084961 4.961931705474854 0.4675460755825043 0.0318748876452446 1.416666984558105 + 0.6002232432365417 -2.059746503829956 -3.125505924224854 2.082553863525391 2.900876998901367 -2.082984924316406 -2.638264894485474 2.189123153686523 -1.826845288276672 0.3554781079292297 1.365400314331055 1.37950587272644 -0.20357546210289 1.446929454803467 0.9811457991600037 0.6315570473670959 -0.472800225019455 -0.4388346672058105 -0.2344044297933578 -0.849833071231842 + -3.345343589782715 -2.826060771942139 -1.520564198493958 0.7624252438545227 3.355126619338989 2.398891448974609 -1.882467985153198 -4.767358779907227 -4.065673828125 -2.004006147384644 -1.066236257553101 0.8513294458389282 3.839807271957397 5.058109283447266 1.91477632522583 -0.4093771278858185 1.870300769805908 2.393833875656128 -0.0564795695245266 -0.5010339617729187 + -0.5252552032470703 0.05419864878058434 0.263132631778717 -0.01849362067878246 -1.303780317306519 -3.378253936767578 -3.488091230392456 -1.333951592445374 1.430064678192139 5.151139736175537 3.816533327102661 -0.5493816137313843 -1.038339734077454 1.653360724449158 -0.5862375497817993 -0.9361066818237305 -4.34959602355957 -0.2458246648311615 0.7402305006980896 4.644649028778076 + -4.315028190612793 6.151956081390381 1.941355466842651 -5.948561668395996 0.797458291053772 -1.551777124404907 -1.525060534477234 2.004741668701172 -0.3898306787014008 2.803936958312988 -1.568340539932251 -2.95022988319397 4.539616584777832 1.824672818183899 -0.820562481880188 -1.380958914756775 0.6647427082061768 -1.843630194664001 -0.4889211356639862 2.054418325424194 + 1.768492937088013 1.282490730285645 -0.1037737801671028 -2.434236288070679 -2.364559650421143 -0.07177185267210007 1.032116889953613 1.099005222320557 1.554517388343811 1.176052927970886 1.283626675605774 0.3361565172672272 0.5653849840164185 -0.3139529824256897 -3.069697380065918 -3.800623655319214 -5.168447494506836 2.098379850387573 1.798455595970154 3.332380533218384 + 0.7680978178977966 2.751090526580811 -0.8489375710487366 -7.870937347412109 1.876347899436951 0.8816798329353333 -0.3352073132991791 -1.078357696533203 3.528999805450439 0.9242259860038757 -1.358763813972473 2.644371271133423 3.413114547729492 1.67173957824707 -1.363125920295715 -1.848823428153992 -0.3104478418827057 -1.353336334228516 -1.347145557403564 -0.7445839643478394 + 3.77938437461853 2.993147850036621 0.4129238426685333 -1.977230310440063 -2.109279870986938 0.3041840195655823 2.412634611129761 0.7223978042602539 -1.392147541046143 -4.622053146362305 2.280272483825684 0.9303337931632996 1.511996030807495 -2.436215400695801 2.20874285697937 3.72291374206543 -1.578287839889526 -3.270700216293335 -1.30840802192688 -2.584612131118774 + 7.199164390563965 5.639228820800781 3.882253408432007 0.7759840488433838 -2.359249591827393 -2.870411396026611 -1.954083442687988 -1.539823770523071 -0.4486651122570038 -0.3732754588127136 0.6135104894638062 0.2169491648674011 -1.946075677871704 -3.375437259674072 -1.79188859462738 0.6840245723724365 -1.269964814186096 -1.881776213645935 2.695850372314453 -1.896317362785339 + -0.8080898523330688 -0.2103544473648071 -0.06832022964954376 -1.123983144760132 -2.301493167877197 -2.940392732620239 -1.477601885795593 -0.8414900302886963 -0.7257471084594727 -0.3215399086475372 -0.4625894129276276 -1.10373318195343 -1.348937034606934 -0.9856061935424805 1.992084622383118 -0.128867506980896 -2.682020425796509 -0.7331782579421997 7.922133445739746 8.349717140197754 + 1.439423084259033 0.2572260797023773 0.3887234032154083 2.877299070358276 4.279431819915771 2.002367973327637 -0.7325559854507446 -2.497083425521851 1.455586552619934 0.7781453728675842 -6.164517402648926 -3.831222534179688 3.051114320755005 -0.6906889081001282 -2.347918748855591 -2.374441862106323 -0.929098904132843 2.193138360977173 0.7620028257369995 0.08306961506605148 + 1.624141573905945 -0.1278207898139954 -1.845260143280029 -0.3868854343891144 3.964265584945679 3.378515958786011 -1.694218039512634 -3.119768857955933 -1.609663128852844 2.311115503311157 3.874553918838501 0.1010498180985451 -1.383771300315857 2.460033416748047 3.20344614982605 0.9234535098075867 -4.31144380569458 -3.966475248336792 -1.715403437614441 -1.679863691329956 + -0.2207600623369217 -0.8121403455734253 -0.970670223236084 0.5701048970222473 0.09830325841903687 0.04112470895051956 3.362931966781616 4.0138840675354 1.806106925010681 1.044528961181641 1.34040379524231 -1.306107401847839 -3.775233030319214 -1.430840969085693 0.5711982846260071 0.4318476915359497 -8.243371963500977 0.9778024554252625 2.583982467651367 -0.0831008180975914 + -2.519084930419922 -2.462416410446167 -1.594884753227234 -1.199584126472473 -0.7757186889648438 -0.4026131629943848 0.8164576888084412 1.447077035903931 -0.5694954991340637 -1.416383266448975 -0.1281112432479858 0.5631314516067505 1.14222526550293 2.495215177536011 3.208263397216797 3.935092926025391 7.66112756729126 -2.455862760543823 -5.872114181518555 -1.8723224401474 + 0.6998337507247925 -0.9634463787078857 -2.811930894851685 -2.859386682510376 -0.7437832355499268 2.277597427368164 1.397117018699646 -0.9798871278762817 -3.738078594207764 -2.125317573547363 2.14862847328186 1.315360546112061 -1.314367532730103 1.248083829879761 2.618282794952393 0.05492019653320312 1.275793671607971 7.597745418548584 -2.158586025238037 -2.938581228256226 + -1.72258460521698 -0.8887978196144104 -0.0840914249420166 0.5052283406257629 1.195479512214661 2.106095790863037 3.074187278747559 3.045332908630371 -0.01851080171763897 -1.468672037124634 0.8962899446487427 0.5471946001052856 -3.104886770248413 -4.746195793151855 -5.080262184143066 1.067072868347168 2.571664094924927 2.306813716888428 1.648616313934326 -1.849972486495972 + 3.226638317108154 2.257411479949951 0.5219392776489258 -0.5989087224006653 0.06023003160953522 2.301773309707642 2.159093618392944 1.021427512168884 -0.6410099864006042 -2.220914840698242 -2.875962018966675 -1.784097194671631 1.057564973831177 2.121126651763916 1.330727219581604 -1.429377913475037 0.3601927757263184 3.401676177978516 1.464607119560242 -11.73413753509521 + -3.794840812683105 -3.448805332183838 -2.838809728622437 -0.8295835852622986 1.316970467567444 1.8645840883255 1.23262083530426 1.007864594459534 1.985741138458252 2.071584224700928 0.04022420942783356 -2.221260547637939 -2.083492517471313 -0.7302404642105103 1.9165118932724 1.965276837348938 2.633802175521851 2.14700984954834 4.949888706207275 -7.185054302215576 + 3.609154462814331 2.434276342391968 0.8928325176239014 -0.1498316824436188 0.2479646950960159 0.9367567300796509 1.024337768554688 0.5454397201538086 0.4587807953357697 -0.2356830835342407 -1.164620637893677 0.1006302237510681 1.72371506690979 3.173871278762817 -0.0009914684342220426 -2.387315511703491 -5.024709224700928 -5.499818325042725 3.367495775222778 -4.052287578582764 + -1.591322660446167 -1.825435280799866 -2.150434970855713 -2.621929407119751 -2.289903163909912 -0.7359009385108948 1.646371126174927 3.194739103317261 2.339303731918335 1.409732222557068 1.457520365715027 1.613039135932922 0.9518581628799438 0.8195027709007263 2.934353351593018 2.558130025863647 -3.247446537017822 -3.867941617965698 -2.675986289978027 2.08175253868103 + -0.3093160390853882 -0.835271418094635 -1.150156378746033 -1.678059577941895 -0.1613420397043228 2.913862228393555 3.739522457122803 1.982236385345459 -0.8735901713371277 -1.272524118423462 -0.3717261254787445 -0.5633774995803833 -0.9696149230003357 -2.141363859176636 -0.2537407875061035 5.180625438690186 -1.612857460975647 -4.855942726135254 -3.936721324920654 7.16935396194458 + -1.725458860397339 -1.186820864677429 -0.8205283880233765 -0.9186801910400391 0.1904848963022232 0.1453497111797333 -0.7094876170158386 1.533177852630615 3.181315898895264 2.600384473800659 1.814068078994751 2.555005073547363 3.669476270675659 1.493212938308716 -4.262375831604004 -4.213309288024902 3.217337846755981 0.9968889951705933 -1.720976233482361 -5.839066982269287 + 4.62887716293335 5.617956638336182 4.711224555969238 1.177598595619202 -1.25556492805481 -1.010066509246826 -0.9369958639144897 -0.7958201766014099 -1.143312454223633 -0.8345605134963989 -0.5754700303077698 -0.2699837684631348 1.35710871219635 -0.4121522605419159 -3.067024946212769 -5.772094249725342 -2.069222927093506 1.758733868598938 -1.231003761291504 0.1217701137065887 + -0.1159271895885468 0.821042001247406 2.314310789108276 -0.2236680388450623 -5.007972240447998 -6.288604736328125 -1.269732236862183 4.359742641448975 4.507987022399902 1.83780562877655 0.4881592392921448 0.5740888714790344 2.081774950027466 0.2648633420467377 -2.986263990402222 -5.330811023712158 -1.722606420516968 1.583829283714294 1.727774024009705 2.384208202362061 + -1.640856862068176 0.5256378054618835 1.528967499732971 0.6920586824417114 -3.754474639892578 -5.384864330291748 -2.662916421890259 1.895923376083374 3.657480955123901 1.952844142913818 1.246854662895203 0.806419312953949 -0.9099503755569458 0.3963871598243713 0.4317761659622192 1.582202076911926 2.902565479278564 4.316998958587646 -4.00571346282959 -3.577343463897705 + -2.014410018920898 -0.9699628353118896 0.1718983352184296 0.03949877247214317 0.09602415561676025 0.2394635379314423 -0.2785386741161346 -0.7722175121307373 -0.7962647676467896 -0.5732556581497192 0.2055183351039886 1.073575973510742 0.9582253694534302 1.094063758850098 0.7891679406166077 0.06506816297769547 -0.0804188996553421 1.733665347099304 0.1490028351545334 -1.130106210708618 + -1.613322257995605 -1.20709216594696 -0.9819656610488892 0.100926049053669 -2.193729400634766 -5.598783016204834 -2.340989589691162 1.721211075782776 1.787777304649353 1.075205564498901 1.045644760131836 0.4821473062038422 -1.17065703868866 -0.4248511791229248 0.5546662211418152 -0.6324701309204102 0.07814858853816986 5.055663585662842 3.287301540374756 0.9751696586608887 + -6.438221454620361 -3.034084796905518 1.181200861930847 3.426241159439087 -0.5531871318817139 -3.649101495742798 -2.274588108062744 1.345062971115112 3.962940692901611 2.461493253707886 0.1025941148400307 -1.561909794807434 -0.4186883866786957 -0.01728061772882938 -2.94070291519165 -0.2239212095737457 3.797638893127441 0.6755555868148804 0.9355751276016235 3.223381519317627 + 1.015803813934326 3.125324249267578 4.612008571624756 2.567328214645386 -0.5580847859382629 -0.4178664684295654 0.7826746106147766 -0.3516343235969543 -0.8355296850204468 -0.8597845435142517 -3.910168886184692 0.3256617188453674 1.142997622489929 -1.761329650878906 -1.273059964179993 -0.8701618909835815 -0.179423525929451 -4.112878799438477 1.007897019386292 0.5502256155014038 + -0.7150840163230896 0.3122595250606537 1.239510893821716 2.848442316055298 2.781967163085938 -1.105071306228638 -3.522068023681641 -1.587732791900635 1.626759767532349 3.770409822463989 -0.5641489028930664 -4.096752166748047 -2.618404626846313 -1.854638576507568 -2.300654411315918 -2.274564027786255 5.401237010955811 1.910033464431763 0.002572018653154373 0.745927631855011 + 0.3883191049098969 -1.707669377326965 -4.676046848297119 -4.609840869903564 -1.295810580253601 0.5089675188064575 2.365602970123291 5.770671844482422 6.889104843139648 1.647375345230103 -2.814334154129028 -1.24828827381134 -1.841241836547852 -0.1341859847307205 -0.8136023283004761 0.3114830851554871 1.987286806106567 0.874433696269989 -1.461726784706116 -0.1405019313097 + -1.159355282783508 -1.440540075302124 -1.440516233444214 -0.1136730536818504 2.31513500213623 1.81186044216156 1.859626650810242 1.779043674468994 2.028892517089844 1.276183366775513 1.467326760292053 2.654965400695801 2.68584156036377 0.5475837588310242 -1.131666898727417 -2.921167373657227 -2.759979248046875 3.215917587280273 -4.754122734069824 -5.921351909637451 + 4.984585285186768 4.229278087615967 1.579556107521057 -4.76039981842041 -6.580567359924316 -3.12081241607666 -0.4806137382984161 -0.0630495473742485 -0.127580314874649 0.01634879596531391 0.4631707072257996 -0.7536261677742004 -1.362088084220886 -1.607821941375732 -3.859269380569458 -1.472748160362244 2.388311147689819 5.192093372344971 3.759419441223145 1.575805306434631 + 3.950888395309448 3.574319839477539 1.551233768463135 -0.8778896331787109 -0.4673118591308594 0.4091207683086395 -1.292404294013977 -3.753393411636353 -4.600126266479492 -2.529347658157349 -0.6998153924942017 -1.750494599342346 -2.865834474563599 -0.3434666395187378 4.900280952453613 3.302380323410034 1.433253645896912 -0.5249667167663574 -0.7124294638633728 1.296011447906494 + 3.656460285186768 1.837764739990234 0.2115099728107452 -0.398909330368042 -1.372710108757019 -1.598230481147766 -0.8803108334541321 -4.105282783508301 -4.693819046020508 -2.690914630889893 -0.1923439204692841 2.184429883956909 3.295293807983398 0.1182713657617569 -0.9839699864387512 -3.676902770996094 -1.441415429115295 2.301230907440186 3.729691743850708 4.700153350830078 + 0.4671164751052856 -1.533605098724365 -1.407259225845337 -0.09667783975601196 2.304092407226562 3.068086624145508 2.850079298019409 1.122531533241272 -1.148253440856934 -1.593063354492188 -1.087430953979492 -0.9353883862495422 -0.03636074066162109 -1.442529439926147 3.378866672515869 4.119542598724365 -3.383687734603882 3.110209703445435 -3.451993227005005 -4.304284572601318 + 3.022115468978882 0.4212996959686279 -5.260384559631348 -5.03773021697998 -0.4252432286739349 1.659762024879456 -0.1280300617218018 -1.86340594291687 -0.9987885355949402 1.203965425491333 0.0792284682393074 -5.287661552429199 0.9158254265785217 4.318248748779297 0.9395741820335388 0.5360367298126221 0.5103887915611267 3.204955816268921 0.763538658618927 1.426300883293152 + 3.256726980209351 1.876342177391052 -1.375297427177429 -4.006753921508789 -4.833859443664551 -4.200634479522705 -3.27719259262085 -0.7353278994560242 1.157040476799011 1.48169732093811 2.35602855682373 2.06672477722168 2.287012577056885 3.781905174255371 -0.6356787085533142 -3.057964324951172 0.2314467579126358 -2.132731676101685 0.3676562607288361 5.392857074737549 + 3.048077821731567 2.725038528442383 1.58044159412384 -0.168928399682045 -0.4902862310409546 0.8290096521377563 0.5696977376937866 -0.4775168597698212 -2.923431873321533 -4.803501129150391 0.8080835342407227 4.603496074676514 0.5739788413047791 -1.04686439037323 -2.101531267166138 -0.03988733515143394 0.5580613017082214 -3.533805847167969 -3.287264347076416 3.577136278152466 + -0.4142954647541046 -1.66756010055542 -1.759037733078003 0.6831538081169128 1.534312009811401 2.140157699584961 0.9718847870826721 -2.687642812728882 -3.891808986663818 -2.556697368621826 -0.3312273621559143 1.470361709594727 2.495124101638794 2.153951168060303 -1.205095410346985 -0.6211956739425659 10.15773487091064 -0.6219488978385925 -3.337560415267944 -2.512618541717529 + 1.730190753936768 1.80750036239624 1.356786131858826 1.03377377986908 2.644163846969604 3.421843767166138 3.353516101837158 0.1886256188154221 -1.793168187141418 -2.514832019805908 -1.671969652175903 -2.081163167953491 -0.3478952348232269 0.5352653861045837 -0.6271575689315796 -4.642775058746338 -3.963194847106934 -4.043620586395264 -1.845553517341614 7.459671020507812 + 2.246662616729736 0.2016398459672928 -2.066519021987915 -2.167887210845947 -1.520911455154419 -0.9548236131668091 -3.787577867507935 -5.536649227142334 -0.0315396748483181 3.257961273193359 2.192927837371826 0.507627010345459 1.885614037513733 3.6100914478302 2.338510751724243 1.476654529571533 3.08937406539917 -2.046329975128174 -2.558128595352173 -0.1366939097642899 + 0.9409266114234924 0.1299967169761658 0.4150329530239105 1.657934427261353 3.4643394947052 2.971324682235718 1.26098108291626 -3.431446075439453 -3.467576265335083 -2.766378402709961 -1.298755288124084 2.578521251678467 2.456178665161133 -0.7263119220733643 -3.805424928665161 -4.849814891815186 4.408540725708008 -0.1302659809589386 -3.103549718856812 3.295742750167847 + -4.206661224365234 -3.093836307525635 -1.885167956352234 0.3432153761386871 1.920194029808044 3.301616191864014 3.043381690979004 0.693256676197052 -3.202852249145508 -3.460277557373047 -0.07581372559070587 4.513870716094971 5.212947845458984 0.01259410567581654 -1.202102303504944 -0.804783821105957 1.467697739601135 1.828694939613342 -0.5030103325843811 -3.902971267700195 + -0.08068391680717468 -0.8876106739044189 -2.114362478256226 -2.314155340194702 -0.8555014133453369 0.1941107660531998 -1.435997366905212 -4.036779403686523 -4.782611846923828 -1.647210240364075 0.6695964336395264 1.313233256340027 3.23312783241272 4.20278263092041 3.928963661193848 3.312346458435059 -1.261749148368835 -3.984436511993408 -1.144672989845276 7.691615581512451 + 0.1973518133163452 1.134447336196899 2.264684677124023 3.129763126373291 3.192946910858154 0.4772716462612152 -2.8204345703125 -5.624075412750244 -4.664904117584229 -1.667420268058777 1.273649454116821 3.002247095108032 4.387224674224854 2.545683860778809 -0.8016163110733032 -2.084271907806396 0.7862294316291809 -2.196537256240845 -1.952954530715942 -0.5792983174324036 + 0.5695887207984924 0.6340851187705994 1.423723578453064 1.273433566093445 1.780985593795776 0.4616143703460693 -3.98089861869812 -6.27265739440918 -4.35621976852417 -1.658235907554626 -1.609244108200073 -1.676583170890808 1.289169788360596 0.7930409908294678 -0.6181238889694214 -0.7524999380111694 4.227668285369873 1.216794610023499 4.233243465423584 3.021116256713867 + -0.9315301775932312 -0.693462610244751 0.9812681674957275 2.268364429473877 1.248473525047302 0.6391181945800781 2.592506408691406 2.078622579574585 -3.31908130645752 -1.000458717346191 4.82146692276001 5.076925754547119 -1.44421911239624 -2.212822675704956 0.8249605894088745 -1.255263328552246 -2.779444694519043 -1.482762455940247 -3.967663049697876 -1.445004224777222 + -4.247566223144531 -4.628451824188232 -5.143855094909668 -1.432929039001465 2.186558723449707 2.138543605804443 2.390938997268677 1.632461905479431 0.9359801411628723 0.7484003305435181 2.069157838821411 3.952538728713989 2.265897512435913 0.3787554800510406 -0.7099461555480957 2.280219316482544 2.796808481216431 -4.414876937866211 -3.899014949798584 0.7003780603408813 + 2.506306886672974 -0.4629577696323395 -2.654558181762695 -3.057210922241211 -1.589912056922913 0.6660507321357727 0.8343724012374878 -0.06786613911390305 0.2687220573425293 1.116681098937988 4.011116504669189 3.427970409393311 -0.07037731260061264 -1.994296669960022 0.6851036548614502 1.337218642234802 -6.063977241516113 1.615261435508728 0.551310658454895 -1.058965921401978 + 5.075595855712891 2.839337110519409 1.125145673751831 0.05325284227728844 1.526267886161804 3.579237461090088 3.655905723571777 -0.7969452142715454 -5.469647884368896 -4.784720420837402 -2.22431492805481 -0.04531000554561615 0.7196849584579468 0.7189165353775024 -1.134250044822693 -2.05254602432251 -0.7627865672111511 -0.01343510672450066 -1.984909296035767 -0.02447272278368473 + -1.973973870277405 -2.853821754455566 -4.159491539001465 -2.701791286468506 1.136979699134827 3.45562219619751 2.987138748168945 1.540666460990906 1.570943355560303 2.480554819107056 3.631794452667236 0.9033071994781494 0.19173464179039 1.192399859428406 0.3931145071983337 -2.101349115371704 -3.979198694229126 -4.028999805450439 -1.865604519844055 4.17998218536377 + 2.612542390823364 2.637369394302368 1.938381552696228 1.562232732772827 2.033096313476562 1.097117304801941 -0.7239171862602234 -1.550070405006409 -2.626423358917236 -3.72711181640625 -4.890734195709229 -2.117693185806274 4.722455501556396 3.587860345840454 -0.6683249473571777 -1.841630458831787 -0.09125998616218567 -1.731591701507568 -1.034153461456299 0.8118547201156616 + -1.86566698551178 -1.534289836883545 -0.2549380958080292 1.605711340904236 1.997530341148376 0.6981138586997986 -0.2005807459354401 -1.214897513389587 -1.97079610824585 -1.371358275413513 -2.205374240875244 -2.777385473251343 -2.003430604934692 1.749455094337463 3.131277084350586 -3.150391340255737 3.633936405181885 0.8237195014953613 -3.67561411857605 8.58498477935791 + -0.9080625176429749 -0.5643367171287537 -0.1798691153526306 0.3851201832294464 2.832698583602905 4.753808498382568 4.441968441009521 2.946808338165283 3.046150207519531 2.228733539581299 1.332873344421387 -0.803180992603302 -2.1224205493927 -2.686851501464844 -2.861533403396606 -1.780993461608887 -0.7767348289489746 -1.709251284599304 -3.636190891265869 -3.938740015029907 + -3.286377429962158 -2.94014835357666 -1.962908864021301 0.2306658327579498 1.673109769821167 1.795318484306335 1.700936913490295 1.911530256271362 2.253362417221069 1.707910060882568 0.1459473073482513 -2.16858983039856 -1.435630559921265 1.814271569252014 3.619447469711304 0.9067350625991821 0.7779750823974609 -0.3734017014503479 -3.564304828643799 -2.805852651596069 + 4.532641410827637 1.556758284568787 -5.955741405487061 -3.451792001724243 -1.025020599365234 -0.7284210324287415 -1.581573486328125 -1.020163536071777 2.192934989929199 -0.989959180355072 -1.528468489646912 -2.001089811325073 1.483138084411621 0.3208783864974976 -0.6298050284385681 4.813745975494385 3.783868551254272 -1.100683450698853 0.6418613791465759 0.6868882179260254 + -0.9921926856040955 -0.1352859884500504 2.291607141494751 2.5090651512146 -0.08225294202566147 -2.002672433853149 -1.56878650188446 0.8675857782363892 1.95181667804718 0.05126297101378441 -1.328660368919373 -1.25770115852356 -1.280509948730469 0.7901251316070557 2.449223041534424 -2.889055728912354 -1.136701822280884 -5.171831130981445 1.222669839859009 5.712295532226562 + 1.915411353111267 1.660171627998352 0.2547465264797211 -2.513649225234985 -3.243869304656982 -1.794315934181213 0.4055875837802887 2.701183795928955 2.845400810241699 -0.5983377695083618 -4.491726875305176 -3.158946514129639 0.2569545209407806 1.605349183082581 0.2164389491081238 -0.4218901097774506 2.315808296203613 -0.1155387312173843 2.845340013504028 -0.6841148138046265 + -0.8538243770599365 -0.07624401152133942 0.8141910433769226 0.6994466781616211 -0.2983684837818146 0.7337501645088196 0.997434139251709 0.8233739733695984 4.670567512512207 5.26185941696167 -5.157133102416992 -4.986374855041504 -1.486152172088623 0.5323930978775024 0.8082526326179504 -0.3009117245674133 0.1093277633190155 1.363349676132202 -2.639734029769897 -1.015202403068542 + 0.9368481040000916 0.7757503390312195 -0.5035182237625122 -3.261734008789062 -4.876591682434082 -3.212521553039551 -0.02773032709956169 2.458033323287964 2.474524736404419 1.163027405738831 1.029763460159302 1.897167086601257 -0.4114074110984802 -2.601962089538574 -2.087533473968506 1.40582287311554 2.001470565795898 0.006993690971285105 0.7180596590042114 2.115538597106934 + -2.183514833450317 -1.155147194862366 0.2214956134557724 0.7958913445472717 1.262578010559082 0.08206032961606979 -1.663285851478577 -3.088372230529785 -2.322583913803101 -0.7113370895385742 1.018126130104065 0.4799972772598267 -1.57696259021759 -0.1492600291967392 -1.367772221565247 -2.607873678207397 1.811965346336365 4.857338905334473 5.928305149078369 0.368346780538559 + -1.69674015045166 -1.277707934379578 -1.086201429367065 -0.8835206031799316 -0.5684354305267334 -1.010282635688782 0.633206844329834 2.393503189086914 1.857365489006042 -1.809373259544373 -2.73065710067749 -1.90215015411377 -0.3549813032150269 0.7240884900093079 1.660195350646973 1.469058632850647 4.3583083152771 7.525566577911377 -3.538461446762085 -3.762785196304321 + 5.7382493019104 -3.85563588142395 -5.315161228179932 5.921488285064697 -4.281460285186768 5.260439872741699 -9.275504112243652 1.76386547088623 1.221485733985901 -5.1672043800354 -2.833406448364258 4.669177532196045 2.562131643295288 3.457016706466675 1.666059613227844 1.092357039451599 -4.354482173919678 0.117755115032196 0.1451983600854874 1.467633128166199 + 1.738956570625305 1.276961803436279 0.6706709861755371 0.9255129098892212 1.672762036323547 2.881028652191162 3.253419160842896 0.3127984702587128 -2.325064659118652 -4.894453525543213 -1.702617883682251 -1.549631595611572 0.1964573562145233 1.112061738967896 1.874354362487793 0.939062774181366 -3.833739995956421 -6.543989181518555 4.608721256256104 -0.6132685542106628 + 3.30802845954895 3.743199825286865 3.949561357498169 3.241483211517334 1.122807621955872 -0.1012496575713158 -0.8875467777252197 -3.341885089874268 -4.868460655212402 -4.514423847198486 -3.085786104202271 -2.029554843902588 -1.811974763870239 1.623563051223755 3.215551137924194 -0.01514841802418232 -2.545238733291626 -0.3552898764610291 3.973867416381836 -0.6215028166770935 + -12.22462272644043 -6.464321613311768 5.936203956604004 10.26612567901611 0.3533716797828674 -5.842537403106689 6.700780391693115 3.567131280899048 -1.324599266052246 -1.190125465393066 -1.678467631340027 0.8134780526161194 0.6276314854621887 -0.3319787979125977 0.07532181590795517 0.7096930742263794 0.3629662692546844 -0.2506147921085358 -1.022657752037048 0.9172195792198181 + -3.405005693435669 -2.632751226425171 -1.104950308799744 -0.4617224931716919 -0.9894509315490723 -1.864806771278381 -1.15491771697998 0.2464453428983688 1.455269455909729 2.032581567764282 2.211673736572266 4.441634178161621 1.761250495910645 -3.639087915420532 -5.115172863006592 1.147759795188904 4.164153099060059 4.534347057342529 1.261209964752197 -2.888462066650391 + -2.444375514984131 -1.03214955329895 -0.6666702032089233 -0.8459668159484863 -0.2256809622049332 1.404442310333252 2.994933128356934 3.488863229751587 3.119350671768188 1.66137969493866 0.9976102113723755 1.134762644767761 -0.8957454562187195 -3.684870719909668 -4.358022212982178 -2.877231359481812 -1.611382246017456 -2.883767604827881 0.5206760168075562 6.203844547271729 + -1.351171255111694 0.08814587444067001 1.972174644470215 3.17270302772522 0.3024349212646484 -0.9654114246368408 -0.5868905782699585 0.7191372513771057 -0.08535508066415787 -3.633039236068726 -6.124952793121338 -4.659860134124756 1.063521146774292 2.28391695022583 2.131966829299927 4.141183376312256 4.395400047302246 -1.373229742050171 -2.471087694168091 0.9804191589355469 + -1.542289853096008 -0.9070443511009216 1.950586199760437 2.989598751068115 0.8862497806549072 -3.760587215423584 -3.477617502212524 0.9040294289588928 2.352634191513062 4.5486159324646 2.783955097198486 -0.8741428852081299 -1.712838292121887 -2.486133813858032 2.116595983505249 1.617660760879517 0.8580408692359924 0.4273018538951874 -1.75425922870636 -4.920356273651123 + -0.2104582786560059 1.539854288101196 2.947955846786499 3.108729362487793 -1.656308054924011 -4.609014987945557 -4.329689979553223 0.01759308204054832 2.197838544845581 0.1032348647713661 -2.490244388580322 -3.26110053062439 -3.24273681640625 -0.2256909161806107 1.429942727088928 1.03976035118103 2.869428157806396 3.413915395736694 0.3720668256282806 0.9849210977554321 + -2.468743085861206 -3.041579961776733 -3.417840957641602 -4.082282066345215 -2.656680583953857 -0.05570569261908531 1.917701482772827 3.339271068572998 3.247806310653687 3.444195985794067 3.534446716308594 2.249480009078979 -0.3618398904800415 -0.7035619020462036 -0.7965534329414368 -2.988089323043823 -1.385775566101074 2.730974912643433 1.12250292301178 0.3722683787345886 + -3.53771185874939 -3.864402770996094 -3.594928503036499 -2.26500129699707 -0.3527889549732208 0.02643513306975365 0.4437484741210938 2.315786838531494 1.980449676513672 -0.5039483308792114 -0.1344144493341446 -0.05589749664068222 -0.3053185641765594 -1.719434022903442 -1.045078039169312 0.5995876789093018 0.5909432172775269 4.78416109085083 2.644230842590332 3.993580341339111 + 2.135690450668335 2.470329284667969 2.287582874298096 0.6162289381027222 -0.3576080203056335 0.3570308089256287 2.526720285415649 2.971996307373047 0.3376413881778717 -2.737874984741211 -2.415783882141113 -2.369345188140869 -3.722419023513794 -2.282341241836548 -0.5268208980560303 -3.380814075469971 -0.7139467597007751 2.445013523101807 1.384738802909851 0.9739827513694763 + 0.6892144083976746 -0.7755703926086426 -0.9179646372795105 -1.104295015335083 -4.173151969909668 -1.825912475585938 2.335436820983887 1.37088680267334 -7.677338123321533 3.041042566299438 0.7694249749183655 -0.3475957214832306 -0.4376232922077179 -0.1537235230207443 2.025394201278687 2.20682168006897 0.1810460090637207 2.339884519577026 0.7899954319000244 1.664023041725159 + 0.9722591638565063 1.080639719963074 -0.6150646209716797 0.3913913667201996 5.73197078704834 -0.7731648087501526 3.10522985458374 -4.624513626098633 2.272378444671631 -3.130392551422119 1.771270632743835 0.741333544254303 -1.314170718193054 -0.2636646330356598 0.7419057488441467 -2.675032377243042 0.9024366140365601 -1.069159150123596 -2.469605445861816 -0.7760494947433472 + 0.5212695002555847 -2.132228136062622 2.612447261810303 5.015206813812256 -7.030396461486816 0.5633965134620667 2.181003093719482 -0.9754311442375183 1.057846426963806 1.888550639152527 -1.328085064888 -0.9201077222824097 -0.7608626484870911 1.413591384887695 -1.662752509117126 -0.1425493955612183 0.4111571609973907 -1.092167615890503 -0.6277540326118469 1.007864356040955 + 0.7876244187355042 -3.649866104125977 -5.050781726837158 -1.887533903121948 1.347736716270447 -0.492973804473877 -2.776907444000244 0.9731534123420715 1.778215169906616 -0.6990918517112732 -1.511082291603088 4.794960975646973 5.955360412597656 2.471929788589478 0.2214550226926804 -4.337646007537842 -1.260016560554504 0.2205745726823807 2.015838861465454 1.099048733711243 + -0.7874332070350647 6.530407905578613 -0.3863449096679688 -5.952509880065918 2.478557348251343 0.7585934996604919 -0.9226968288421631 -0.2257856279611588 -2.849920034408569 1.794929981231689 3.634504795074463 -0.8041509985923767 -1.332000851631165 -1.02665901184082 -0.5165682435035706 -0.7698636651039124 -0.07768085598945618 0.1644118130207062 0.4671123623847961 -0.1769070476293564 + 0.7433757781982422 -0.06600571423768997 -1.079881548881531 -2.933520078659058 -1.483096599578857 0.9383431673049927 -0.1625253409147263 -3.234504699707031 -2.970511436462402 0.2017260938882828 -0.3278959393501282 -1.339880704879761 1.211628198623657 4.394339084625244 1.822871208190918 0.6182709336280823 3.54756236076355 0.4751554727554321 4.778993606567383 -5.134444236755371 + -6.193244457244873 -3.176199436187744 0.6801114678382874 1.143396973609924 0.2180878669023514 0.8771732449531555 0.7413792014122009 -0.2389177829027176 0.1126995459198952 1.303455948829651 2.647835254669189 2.627485513687134 -2.618185043334961 -3.498697757720947 -2.876373291015625 1.47896945476532 -0.6928929090499878 0.3147088587284088 2.125945329666138 5.023263931274414 + -2.668442487716675 -1.650956511497498 0.2424901574850082 1.404856443405151 1.14376437664032 -0.6741237044334412 -2.145938873291016 -3.34625768661499 -2.49115252494812 -0.6849365830421448 -0.2060147672891617 -0.05462698638439178 -1.345702290534973 -1.338747262954712 3.761161088943481 1.588302373886108 1.295844674110413 2.464917182922363 1.572971701622009 3.132583141326904 + 0.1871038973331451 0.4954811334609985 0.04791008308529854 -0.6528371572494507 -0.3231654167175293 0.876278281211853 1.357858777046204 0.011256268247962 -1.015754461288452 0.1041342169046402 -1.264799118041992 0.7102871537208557 2.152963161468506 4.265294551849365 0.9986034631729126 -0.3931733071804047 4.33096981048584 -8.162398338317871 -4.569711208343506 0.8436927795410156 + 1.603586912155151 0.4870936274528503 -0.2213805764913559 -0.4609602689743042 0.4110568463802338 0.303532749414444 0.01096658688038588 0.06359908729791641 -1.705424070358276 0.9849494695663452 1.61255943775177 1.172182321548462 -0.9711759090423584 2.73061466217041 -6.156934261322021 1.810209393501282 -1.542398452758789 0.9320940971374512 0.1937434822320938 -1.257914066314697 + 1.579040169715881 -0.2433784157037735 -1.672214269638062 -0.6848471164703369 1.030548930168152 -0.2684314548969269 0.01845100708305836 4.338749408721924 5.995797157287598 -1.614572048187256 -7.091094970703125 -0.9613765478134155 0.6383325457572937 -0.02656086534261703 1.667960524559021 -0.216257631778717 -2.935107231140137 -2.810086488723755 0.5046302676200867 2.750415086746216 + 5.685893058776855 3.163216352462769 -0.4088685512542725 -3.265186548233032 -1.913361668586731 -0.3799533247947693 -0.4437901377677917 -0.6762396693229675 -0.7051770091056824 -1.418257236480713 -2.830198049545288 -0.6916139721870422 1.338987588882446 1.835981607437134 2.278292179107666 1.826688528060913 -0.9239478707313538 -3.342416524887085 -3.405107975006104 4.275057792663574 + -3.138552665710449 -1.094781637191772 1.529457449913025 2.972817182540894 3.732217073440552 2.33418607711792 0.5593523979187012 0.4908125698566437 0.3558463156223297 0.4672195315361023 0.2037717700004578 0.176104947924614 -1.133292317390442 -2.114072561264038 -0.3769603371620178 -1.45184338092804 -1.216614246368408 -1.393083095550537 -4.846780300140381 3.944191694259644 + -5.019831657409668 -3.771313190460205 -2.539316654205322 -1.398217558860779 -0.4494338035583496 1.081843852996826 1.422099232673645 1.314233183860779 1.041459321975708 -0.07761901617050171 0.04250325262546539 0.5065903067588806 1.527674794197083 0.4347424209117889 -0.7826052308082581 -2.61234450340271 3.288515329360962 0.3317862451076508 -0.69339919090271 6.35263729095459 + 2.251860380172729 4.04280948638916 3.865673303604126 0.8188772201538086 -3.078532457351685 -4.502622604370117 -4.583059787750244 -2.465086460113525 -0.9406352043151855 1.851559638977051 2.448692083358765 1.115672588348389 -0.2699349224567413 0.5184076428413391 2.866621971130371 1.54410457611084 -2.381492853164673 1.269447565078735 -1.434101581573486 -2.938257932662964 + -2.347013235092163 -2.001991510391235 -1.434831738471985 -0.8298280239105225 0.4620734453201294 1.875778436660767 1.253874063491821 0.7603420615196228 -0.5217772722244263 0.2630568742752075 0.01150889601558447 -1.841344118118286 -1.586396098136902 0.6315964460372925 -3.0359046459198 -3.549762487411499 6.989432334899902 3.879693746566772 0.7547399401664734 0.2667502164840698 + 2.59989333152771 1.274308085441589 -0.01152442954480648 -1.263461351394653 -1.295027494430542 -2.524879455566406 -1.609083294868469 3.557408571243286 2.483957767486572 -4.707064151763916 -1.482265949249268 4.238638877868652 1.865494966506958 -0.1574246138334274 -1.977993369102478 -1.023856043815613 3.222598075866699 -0.3063560724258423 -2.31501317024231 -0.5683553814888 + -1.708734631538391 -1.514800071716309 -1.129241108894348 -1.292758464813232 -1.690871477127075 -3.039062738418579 -4.668495178222656 -3.020464658737183 0.8907089829444885 3.335945606231689 2.574652433395386 0.2507872879505157 -0.02416657842695713 -1.391170382499695 -0.7406736612319946 0.9291949272155762 3.995064973831177 3.58231258392334 1.294066786766052 3.367705106735229 + -0.7308525443077087 0.5534930825233459 1.876127362251282 2.385608673095703 -1.369242072105408 -2.313159704208374 1.087968349456787 5.111093521118164 0.5589612722396851 -4.287982940673828 -1.545682072639465 2.03200101852417 -0.8129301071166992 -0.9434912800788879 -1.036221027374268 -1.846355438232422 0.5198851227760315 5.268942356109619 -3.66060733795166 -0.8475566506385803 + -1.151612520217896 -1.791241526603699 0.3302052021026611 -0.2721012532711029 -0.3806628584861755 -0.9549692869186401 -0.6866446733474731 -1.774772047996521 -1.472887873649597 -1.674550294876099 0.9231255650520325 1.066949248313904 0.8665286898612976 3.924666404724121 -6.023348808288574 4.330567359924316 3.760181665420532 -0.06783535331487656 4.309100151062012 -3.26069188117981 + -0.88199782371521 1.981577634811401 3.75695276260376 1.546116232872009 -2.148651123046875 -2.566235542297363 -1.9017333984375 -0.7683435678482056 0.8630893230438232 1.533197164535522 1.407054424285889 1.714533090591431 -1.641535401344299 -3.778181791305542 -1.345935344696045 -0.02263041399419308 -0.3932666480541229 0.608609676361084 1.132511258125305 0.9048671722412109 + 7.196781635284424 1.468628644943237 -2.52098274230957 1.786643266677856 1.94323205947876 -1.514943957328796 0.1491302847862244 0.6869137287139893 -3.366606712341309 -3.640038967132568 -0.2857992351055145 2.221171140670776 -3.165215492248535 1.668398380279541 -1.082773089408875 -0.1408033519983292 1.175822496414185 -1.392779588699341 -0.3199502527713776 -0.8668237328529358 + -3.947493553161621 0.03975019603967667 2.965737819671631 1.466609954833984 -3.87905216217041 -4.130489826202393 1.936582565307617 4.800464153289795 1.152953743934631 0.835141122341156 -0.1746273934841156 -0.8576342463493347 -0.9760010838508606 -0.2643941938877106 -1.002382040023804 0.8332653045654297 0.5182068943977356 0.6255298256874084 0.4843355417251587 -0.4265030920505524 + -3.640172004699707 -3.737707853317261 -2.923035144805908 0.3282618522644043 1.48232638835907 -0.441068023443222 0.7756396532058716 1.693741202354431 1.413447856903076 0.8937015533447266 1.847288370132446 -0.8475233316421509 -3.840097904205322 -3.062532424926758 3.513256311416626 2.630796670913696 1.897123336791992 1.093554258346558 -3.189511775970459 4.112508773803711 + -0.6489149928092957 0.5130596160888672 1.673443555831909 2.117481470108032 0.0827990397810936 -1.47014045715332 -1.104773283004761 -1.167572379112244 -1.090356588363647 -1.019984841346741 -1.115590929985046 -1.883090257644653 0.5330615639686584 2.586933135986328 2.465914487838745 4.256698131561279 0.5812928676605225 -5.436106204986572 -1.564060568809509 1.689914464950562 + 0.6048972010612488 0.8798101544380188 -0.2702876925468445 -1.161617517471313 -1.391723990440369 -1.502087354660034 -1.778924107551575 -0.7998572587966919 0.1514480412006378 -0.633873462677002 0.9010939598083496 3.499900102615356 3.461895942687988 3.49565052986145 5.038520812988281 6.190263271331787 -4.197624206542969 -6.022910594940186 -4.015003681182861 -2.449573516845703 + 0.9015991687774658 1.457147836685181 2.144871711730957 2.21974778175354 1.175731897354126 0.322929173707962 2.050617218017578 4.716849803924561 3.125296592712402 -0.01539208833128214 -0.2587837278842926 0.6095321178436279 -1.256268978118896 -1.625360727310181 -2.985262393951416 -1.15560519695282 -2.401651620864868 -5.022729396820068 -3.00604510307312 -0.9972224831581116 + 1.380930304527283 1.067306756973267 0.2246159017086029 0.365425318479538 2.081364631652832 3.191563844680786 3.615046977996826 1.521717667579651 -0.1809195280075073 -1.923221468925476 -3.112886905670166 -1.92116904258728 1.394784927368164 1.284379482269287 -2.220463275909424 -1.478888750076294 0.8971588015556335 -2.612983465194702 -6.165031909942627 2.591264247894287 + -0.272815614938736 -0.6798882484436035 -0.6335951685905457 -0.04987706989049911 1.403038382530212 -0.08515746891498566 -0.9812989234924316 -0.7015728354454041 -0.4563063979148865 0.5457165837287903 2.790622711181641 1.10162079334259 0.4895525574684143 3.30007529258728 2.073791980743408 -0.7823245525360107 -2.715193748474121 1.766475558280945 -8.859146118164062 2.746285200119019 + 2.103977680206299 0.5472617149353027 -2.602070569992065 -4.229795932769775 -3.166706085205078 -0.2284818589687347 1.825952768325806 2.842360973358154 3.158400058746338 3.215318202972412 0.7962328195571899 -1.601359248161316 0.08501449972391129 1.723167061805725 2.608096599578857 2.034399747848511 1.310831308364868 0.416411429643631 -4.472352981567383 -6.366658210754395 + -5.485379695892334 -4.297726631164551 -2.217624425888062 0.2768277823925018 0.9465814232826233 -0.8696280121803284 -1.632207155227661 -0.03004632517695427 1.303911805152893 1.784476041793823 2.256384611129761 2.824195623397827 2.50342845916748 1.330517888069153 0.7959917783737183 -0.193672776222229 1.446552276611328 4.229986190795898 0.2517535388469696 -5.224321365356445 + -2.005870819091797 -0.1439944356679916 -0.7407601475715637 -1.52299952507019 1.990339875221252 2.370657920837402 -6.703121185302734 1.059283852577209 2.654191732406616 0.6987029910087585 1.020458817481995 0.03746103867888451 1.287217497825623 1.982913851737976 0.7155669331550598 -0.9581405520439148 -0.567360520362854 -1.221967935562134 -1.37591826915741 1.423339366912842 + 0.3196007609367371 0.8668915033340454 1.01660430431366 0.1034482419490814 -1.281264901161194 -3.159471035003662 -3.684342384338379 -1.496236443519592 0.5283424854278564 0.7569391131401062 0.06740052998065948 2.390336751937866 3.822274208068848 -0.04812368005514145 -5.812849521636963 -2.595292806625366 0.7279472947120667 0.5582651495933533 4.936729907989502 1.982794642448425 + 2.170500993728638 -0.1483595818281174 -1.556460618972778 -2.396624565124512 -0.3265185654163361 1.396482944488525 1.125537157058716 -0.7775927782058716 -1.990305662155151 -1.264681696891785 1.09859824180603 3.085969686508179 2.28730845451355 2.327304840087891 -1.27954638004303 -0.111607514321804 -1.398654818534851 -5.230142593383789 2.969053506851196 0.01973943971097469 + 0.2485319674015045 1.270951747894287 0.8527784943580627 -0.5065891146659851 -1.079405069351196 -1.735257506370544 -1.137871980667114 1.475104093551636 4.318470001220703 4.439592361450195 2.234207153320312 -2.03368878364563 -2.031128644943237 -1.205292701721191 -2.716577768325806 -3.6485276222229 -1.695624470710754 2.759658098220825 0.820486307144165 -0.6298169493675232 + -3.21246600151062 -2.581574678421021 -1.3803551197052 0.68104088306427 1.19791853427887 1.027921199798584 -2.324929475784302 -2.265019178390503 -1.810427188873291 2.766178131103516 5.736523628234863 -0.03758067265152931 -0.7454152703285217 2.999567985534668 1.000487685203552 -2.319940567016602 2.99962592124939 -2.992578744888306 1.774289727210999 -0.5132672190666199 + -2.324465751647949 -2.494159698486328 -1.857834696769714 0.9909756183624268 3.729615688323975 4.034987449645996 2.637047290802002 1.430828809738159 0.5229517221450806 0.1707436889410019 0.6221446394920349 0.3805403709411621 -1.113720178604126 -2.124089002609253 -2.893681764602661 -2.391358613967896 -0.9509013891220093 1.584174871444702 0.8280807733535767 -0.7818822860717773 + -3.279093742370605 -2.522412061691284 -1.822725653648376 -1.5146564245224 -1.0070880651474 -0.8679795265197754 0.1694394499063492 1.498874306678772 1.507836222648621 0.3237001597881317 -1.602571725845337 -0.8729630708694458 1.063968896865845 2.431190490722656 1.298272371292114 -1.288565158843994 -3.286158323287964 -1.909510493278503 -0.01807212829589844 11.69851684570312 + 1.9761723279953 3.046615600585938 4.641309261322021 3.941258907318115 -1.744837284088135 -5.600364685058594 0.7032915949821472 2.552472829818726 -0.8877605795860291 -2.581939697265625 -2.959408521652222 -3.066996812820435 -1.791499495506287 0.2938017845153809 0.1250737309455872 0.8268405199050903 -0.3802095651626587 -0.3068093955516815 -1.443376183509827 2.656371831893921 + 3.672005891799927 2.591688394546509 0.19033382833004 -2.395688056945801 -2.132944107055664 -1.378620028495789 0.06012586131691933 2.014268398284912 2.738793134689331 1.87729287147522 1.618634462356567 1.746564149856567 3.592814207077026 2.198830366134644 0.4244254231452942 -2.973081827163696 -4.933310508728027 -4.118823528289795 -4.763049125671387 -0.03027168288826942 + -1.659799337387085 -0.03053028136491776 1.045113921165466 1.227718710899353 -0.1633797585964203 -0.9574674963951111 2.941096305847168 4.191059112548828 2.474253416061401 -0.8774530291557312 -1.305905222892761 -2.518466472625732 0.5843521952629089 3.87605357170105 0.8032591938972473 -0.5535963773727417 -0.1372668147087097 -2.293759346008301 -3.582501649856567 -3.062779426574707 + -0.9753477573394775 -0.6185209155082703 -0.6955870389938354 -1.719986200332642 -2.313568592071533 -2.046369552612305 -0.7299229502677917 -0.1431421786546707 -1.810551047325134 -1.519577145576477 3.551153898239136 5.033046245574951 4.033206939697266 0.2534317374229431 -2.178523063659668 -1.691487908363342 1.181924819946289 5.7584228515625 -1.256636500358582 -2.111962556838989 + 1.35952889919281 1.058261275291443 0.2898530662059784 -1.559389233589172 0.1257677227258682 1.414305686950684 0.3267423510551453 -4.892368793487549 0.7362755537033081 0.1806825399398804 0.4358586966991425 -1.968353033065796 -2.907437562942505 -1.4133380651474 0.4416031241416931 -1.642604231834412 1.369425058364868 4.703865528106689 -2.313536167144775 4.254855155944824 + 5.839766979217529 3.618801116943359 0.3395464718341827 -2.535825729370117 -3.016909837722778 -2.122210264205933 1.960120558738708 5.249429702758789 4.21408748626709 2.151787281036377 -0.1207830309867859 -0.8710322976112366 -1.64888870716095 -1.782386779785156 -2.057308197021484 -2.614068031311035 -2.066056489944458 -0.8994701504707336 -0.4921998381614685 -3.146404027938843 + 1.270758986473083 0.4981606304645538 -1.289483428001404 -2.575528621673584 -1.575491666793823 -2.203043222427368 -3.650526285171509 0.5493277311325073 4.23436450958252 0.8644081950187683 -0.8472791314125061 0.987879753112793 -1.540350079536438 1.819575667381287 1.702721476554871 0.1340120285749435 -3.420907258987427 1.067797422409058 5.456310272216797 -1.48271107673645 + -4.451383590698242 -3.755133628845215 -1.82866632938385 0.3984891176223755 -0.951784074306488 -3.135467052459717 -1.728514432907104 -0.04023090004920959 1.404926657676697 0.1494394689798355 -0.7724082469940186 -0.570627748966217 2.107621192932129 4.318464279174805 1.510631322860718 1.465327143669128 0.6502286791801453 -0.4973269402980804 4.060819149017334 1.665605545043945 + -1.05268120765686 -0.9534827470779419 -0.6732161641120911 0.5275088548660278 0.5511384010314941 -0.03755126520991325 0.07956549525260925 1.919205069541931 3.078785419464111 2.298753499984741 4.050081253051758 1.275439143180847 -4.113246440887451 -4.659193992614746 -3.202828407287598 -2.202170610427856 -1.878964781761169 -1.835919618606567 7.133494853973389 -0.3047038912773132 + 3.397567987442017 3.766955852508545 4.43159008026123 3.538892030715942 -0.3002689182758331 -2.479736566543579 -2.73085880279541 -2.692430257797241 -1.698422789573669 1.863077878952026 3.463094711303711 0.1606989502906799 -1.343940138816833 -2.06696081161499 -0.8699946999549866 -1.248955607414246 -3.672839164733887 -3.862622976303101 -0.6676210165023804 3.012771606445312 + -0.6110478043556213 -0.9072748422622681 -1.245896816253662 -2.864366054534912 -3.761975526809692 -3.233641862869263 -0.7312024831771851 0.7240825295448303 3.445564031600952 5.342422485351562 1.633359909057617 -4.056819915771484 -5.072022438049316 0.4060265719890594 1.812990069389343 1.78030788898468 1.815221071243286 0.530630350112915 3.593682050704956 1.399961113929749 + 2.163651466369629 0.8974334597587585 -2.989454984664917 1.252920031547546 2.619703531265259 -4.353257656097412 2.999261617660522 -2.945071220397949 -0.3621189892292023 0.9966713190078735 -1.617904782295227 1.541269421577454 0.1673654764890671 -0.6667944192886353 -1.567312955856323 0.4599047601222992 -1.898073434829712 1.29564893245697 1.391135573387146 0.6150220632553101 + 2.517238855361938 1.410249710083008 -0.3158705234527588 -2.062621831893921 -2.365298509597778 -0.4074690043926239 -1.450215101242065 -2.68840479850769 -0.05973474308848381 1.476058483123779 0.5065557360649109 -1.031965851783752 -0.9773908853530884 -3.933051347732544 1.317268013954163 0.1638581305742264 -2.734279632568359 2.314821243286133 3.650205373764038 4.670043468475342 + -2.282395839691162 -2.747188806533813 -1.730971574783325 0.4156885743141174 0.702764630317688 0.7957024574279785 2.072203397750854 1.297626972198486 -2.483386516571045 -5.123660564422607 0.2562307119369507 1.801027417182922 -1.060787320137024 1.335592865943909 6.180609226226807 1.921746015548706 -1.224457621574402 -1.187418460845947 4.501907348632812 -3.44082498550415 + -1.140081524848938 -2.814337968826294 -0.931449294090271 1.394097924232483 0.2153871059417725 2.28806734085083 1.976774096488953 -0.6914021372795105 -2.467367649078369 8.430156707763672 0.6897558569908142 -0.3542301058769226 -1.420809864997864 -1.110457420349121 1.173167943954468 -1.087818264961243 -3.823419570922852 -1.277307271957397 0.7987177968025208 0.1525568068027496 + 0.3685346245765686 -0.2521028518676758 -0.2922182977199554 -0.3171975910663605 -1.216607451438904 0.2239763587713242 1.916216611862183 2.473952770233154 0.3221211433410645 -1.675219058990479 4.132746696472168 3.914035320281982 -5.390508651733398 -5.243728160858154 0.8539519906044006 4.814949512481689 -2.84544038772583 -0.7398339509963989 0.8198337554931641 -1.867464780807495 + 0.7342661619186401 -0.01463430561125278 -1.29353141784668 -2.156312704086304 -1.126276731491089 1.267405271530151 1.906457185745239 1.130183935165405 -0.02080252952873707 -1.609390497207642 -1.994526624679565 0.3755637407302856 -2.643950223922729 -6.270133018493652 -0.3753513693809509 5.171947479248047 1.43317699432373 1.414733171463013 3.197651386260986 0.8735224604606628 + 1.245159029960632 1.81938624382019 3.887174367904663 4.402950286865234 1.393079280853271 -0.2933463752269745 -0.3961271941661835 0.1692074686288834 1.09541392326355 0.5334194302558899 -0.695104718208313 -2.069591283798218 -2.656838417053223 -1.380606293678284 3.67685079574585 -5.394083023071289 -5.489723205566406 -0.0689258798956871 1.622476577758789 -1.400772333145142 + 2.219863176345825 2.198966503143311 1.199610590934753 -0.6769376397132874 -0.9114306569099426 -1.44481635093689 -2.597196102142334 -1.850537538528442 -1.743741869926453 -1.699656963348389 -1.111023783683777 -0.8135321736335754 -1.509403586387634 -1.757909655570984 -0.9990682601928711 0.8946291208267212 1.652252316474915 0.5192946791648865 0.5508427619934082 7.879798889160156 + 0.08627790212631226 -0.352785587310791 -1.505839228630066 -2.173711776733398 -1.321738600730896 -0.3925156891345978 -0.1446467489004135 0.1024910137057304 0.3447778224945068 0.3017198741436005 -0.5197684764862061 -0.8500537872314453 0.1553759425878525 0.1786637455224991 0.2850920557975769 1.277270674705505 1.664149045944214 1.610536217689514 0.7945935726165771 0.4601131081581116 + -0.8324769139289856 0.004387835040688515 0.5643593668937683 0.346871018409729 -0.4143480658531189 0.4651801884174347 1.393947005271912 2.925382852554321 1.800491809844971 -0.222584143280983 -2.090665817260742 2.75069785118103 7.229732036590576 2.794186592102051 -3.316712379455566 -3.867590427398682 -1.585769772529602 -4.047162055969238 -3.213950872421265 -0.6839743852615356 + -1.053339123725891 -1.532515645027161 -1.272014141082764 -1.943403601646423 -3.084941625595093 -3.434366464614868 -2.110629081726074 0.3083342015743256 0.6609321236610413 0.7842252850532532 0.6473435163497925 0.8418018221855164 0.5776985883712769 0.4204946458339691 4.626517295837402 7.943256378173828 0.845883846282959 1.233871579170227 -2.174356460571289 -2.284794330596924 + 0.1832716166973114 -0.4268336594104767 -1.267805218696594 -1.709869384765625 -0.5305456519126892 0.3674589991569519 0.1298015564680099 0.7501029968261719 0.6456313729286194 -0.6937118172645569 -4.45004940032959 0.7561370134353638 5.738455295562744 -1.007960319519043 1.383902907371521 4.442962169647217 -1.60377311706543 -2.916305541992188 1.951486468315125 -1.74235987663269 + 5.478209018707275 2.763286352157593 0.1907121539115906 -2.010389804840088 -0.7422595024108887 0.5569106340408325 1.102149605751038 -2.372735977172852 -3.09471321105957 0.2367222756147385 1.444461703300476 0.753203809261322 3.167746305465698 6.109694480895996 -0.8254058361053467 -4.4361572265625 -2.733795166015625 -0.03519377857446671 -3.816632270812988 -1.735818266868591 + 2.145143270492554 2.902304410934448 1.735076069831848 -1.060021877288818 -2.352748870849609 -2.72128438949585 -2.147922515869141 -1.102774024009705 -2.313727855682373 -0.6042326092720032 -1.304415941238403 -2.456649780273438 -2.086045026779175 1.710857629776001 4.482873439788818 7.53724479675293 1.060777068138123 -0.1099622324109077 -1.375148296356201 -1.939335227012634 + 2.805823564529419 2.718520164489746 3.06906533241272 0.5964243412017822 -3.258936643600464 -3.670506954193115 -1.451389312744141 2.102123498916626 2.564121961593628 0.6076732277870178 -0.3388808071613312 -0.59478360414505 -0.8475059866905212 -0.386567622423172 3.662489652633667 4.471081733703613 -3.298681735992432 -6.766214370727539 -1.449633955955505 -0.5342206358909607 + 3.333135604858398 1.725234746932983 -0.05917806178331375 -1.200749635696411 0.3582500517368317 2.08272910118103 3.269086599349976 2.971601247787476 2.278128862380981 2.053563356399536 -0.4305766522884369 -2.679158926010132 -1.699803590774536 -1.725454211235046 -1.852011680603027 -3.52437424659729 -2.624058246612549 -1.370424628257751 -2.974032878875732 2.068089723587036 + 0.7300598621368408 0.9286527037620544 0.4690899848937988 -0.5915138125419617 -0.8803994059562683 -0.1646547317504883 0.2853293418884277 -0.06886313855648041 -0.3139051496982574 -1.092487812042236 -1.670052289962769 -1.559359192848206 -0.7439225316047668 -2.235743284225464 -3.587430953979492 2.322990894317627 5.273247241973877 3.622897624969482 5.463759899139404 -6.187698364257812 + 0.04920459911227226 -0.4138303995132446 0.243647038936615 0.4813270568847656 1.019590258598328 -0.4301485121250153 -4.3324294090271 -0.005256227217614651 -0.01158559508621693 0.9164841175079346 -0.5561929941177368 -7.103898525238037 4.332442283630371 2.241353511810303 1.801789283752441 1.014440059661865 -0.0771755576133728 1.381010770797729 0.1392876952886581 -0.6900590062141418 + 2.01094126701355 -8.840018272399902 1.069246411323547 -1.084383726119995 3.039701700210571 -1.371479988098145 2.82773494720459 -0.5893377661705017 0.9046841859817505 2.152605772018433 0.130592554807663 1.572691082954407 0.5286253094673157 -1.220544219017029 -0.7493510246276855 1.298364877700806 -0.52510666847229 -0.7555492520332336 0.5338075160980225 -0.9332287907600403 + -1.515900611877441 -0.5287664532661438 0.02138320542871952 -0.08847950398921967 1.179110050201416 1.166744112968445 0.3275284767150879 -0.3910714983940125 0.9981274604797363 1.566396355628967 0.9157280921936035 1.207241892814636 -2.162854433059692 -2.386226892471313 1.823522567749023 2.785845518112183 0.7005510330200195 -1.227026343345642 -0.7795233130455017 -3.612332344055176 + -0.8056474924087524 0.4130642414093018 1.030588626861572 1.208819389343262 2.569214582443237 1.563028693199158 -0.9008945822715759 -1.250939607620239 1.052812457084656 1.99735689163208 1.750177025794983 1.64970064163208 -0.3399961292743683 -2.263405799865723 -3.939839124679565 -4.848467826843262 1.288721561431885 4.373429775238037 -2.817300319671631 -1.730421185493469 + 4.398905754089355 0.919450581073761 -2.397307634353638 -1.48506760597229 -3.484066009521484 -6.312099456787109 1.232280373573303 4.541868209838867 -0.8619783520698547 -2.213992595672607 -0.8484045267105103 0.1358030885457993 2.767056941986084 -1.469879269599915 -0.7181640863418579 3.178452253341675 0.02406773902475834 -0.4922002255916595 1.136059045791626 1.949217677116394 + -0.2276657223701477 0.3830579519271851 -0.01230426970869303 -2.737083673477173 -1.741576313972473 3.928742647171021 6.60343599319458 1.933004260063171 -0.9754073619842529 -0.8301846981048584 1.279482960700989 1.46198570728302 1.675611615180969 -1.816817283630371 -1.406123638153076 -1.004090905189514 -0.321149080991745 -2.541867971420288 -3.164283275604248 -0.4867659211158752 + 0.7820807099342346 1.85450804233551 3.503858804702759 3.91967511177063 2.35407543182373 0.1486390233039856 -0.08479894697666168 1.305164098739624 0.2734384536743164 -2.229823350906372 -3.198352813720703 -3.515724420547485 -1.535397171974182 1.487228274345398 1.126807808876038 -1.526113986968994 -1.218683481216431 0.8017659783363342 -3.747550964355469 -0.5007978677749634 + 2.70096755027771 3.304495334625244 3.319874048233032 2.810394287109375 3.664436817169189 4.500162124633789 2.524105072021484 -0.1029922813177109 -2.29908561706543 -2.097378492355347 -2.607158660888672 -4.082388401031494 -3.850815534591675 -4.374883651733398 -3.658360004425049 -1.331148624420166 0.1287888288497925 0.03983134031295776 0.8927544951438904 0.5184105634689331 + 0.1324127465486526 -0.6631520390510559 -2.456928968429565 -2.840767860412598 -1.690516710281372 -0.7244755625724792 -0.9214229583740234 -0.08829448372125626 -0.1416297554969788 -1.490013837814331 -1.31697952747345 0.9013311266899109 4.279376029968262 4.518374919891357 -1.527072072029114 -3.905913114547729 -1.918677687644958 3.445153951644897 7.242285251617432 -0.8330909013748169 + -0.8547506332397461 -1.002581477165222 -0.4809522926807404 -0.2057351619005203 0.4169751107692719 1.259698510169983 0.4396704435348511 -0.4354678094387054 -0.4879927933216095 0.867415189743042 2.855930805206299 -0.6113927960395813 -3.349229097366333 -0.8049419522285461 0.587507963180542 -0.04810728877782822 -0.5467925667762756 -0.6772913932800293 1.111591577529907 1.966445446014404 + -0.6269298791885376 -0.6474055051803589 -0.03791651502251625 0.5507333874702454 1.005316853523254 -0.0245465561747551 -0.2395180761814117 -0.143607422709465 0.3078622221946716 0.7394601106643677 0.9445894360542297 0.345738559961319 1.348352193832397 1.33486795425415 1.541133522987366 3.652918100357056 0.1804796010255814 -0.1130997315049171 0.502081036567688 -10.62050437927246 + -1.79146671295166 -0.5602762699127197 1.142598986625671 0.1449309289455414 -1.743457555770874 -2.651652336120605 -3.003703355789185 -1.964361906051636 -1.917770028114319 -1.449868679046631 -0.9305822253227234 0.07521495223045349 2.259527444839478 3.324147701263428 1.903745174407959 -1.479177951812744 0.7492966055870056 9.940327644348145 1.314756512641907 -3.362226963043213 + -2.046612024307251 -1.482483506202698 -1.839763164520264 -4.346721649169922 -5.095214366912842 -0.8335946202278137 3.042556047439575 3.208396434783936 0.4192072749137878 -1.109411716461182 1.67880916595459 5.395397663116455 2.874510765075684 0.07067225128412247 0.2552483677864075 0.7535077929496765 -0.124852143228054 -2.720198392868042 2.542780637741089 -0.642231285572052 + -4.236565589904785 -3.702650308609009 -1.894917726516724 0.5285468101501465 2.99497389793396 2.933282852172852 0.5138083100318909 -1.26378071308136 -0.829133927822113 1.076542615890503 2.010394334793091 2.561738014221191 2.608696937561035 3.383423566818237 3.919377088546753 0.7894454002380371 -1.710481882095337 -0.983987033367157 -3.946410179138184 -4.752305507659912 + 4.310616016387939 2.705586433410645 0.7157266139984131 -1.442261934280396 -2.330213308334351 -0.9929413795471191 -0.3994666934013367 -0.9292001724243164 -0.8844471573829651 -0.06307733058929443 1.100482583045959 0.291367769241333 -0.9830474853515625 0.3469436168670654 -0.02115641348063946 -3.30620265007019 -4.880945205688477 4.386973857879639 4.807640075683594 -2.432382583618164 + 0.9424914717674255 0.2372087687253952 0.1085052713751793 0.7694780230522156 3.311416625976562 4.465609550476074 2.371778964996338 0.1124070584774017 0.2652880549430847 0.01393753010779619 -0.198256716132164 -1.825438380241394 -2.67084813117981 -2.56573224067688 -2.714336395263672 -3.069093704223633 -4.880091190338135 0.8437320590019226 6.009586811065674 -1.527645587921143 + 3.487513303756714 0.9369924664497375 -1.264194130897522 -1.65328848361969 -0.1827923208475113 -1.65233838558197 -3.020734310150146 -3.425989627838135 -1.239329099655151 4.524533271789551 7.945565223693848 5.376322746276855 1.932855486869812 -1.89636754989624 -2.872833967208862 -1.5417240858078 -1.544376492500305 -0.7161530256271362 -1.85902214050293 -1.334640502929688 + 3.575641870498657 -2.140479326248169 -4.728575229644775 4.778760433197021 -0.2178809344768524 -0.2643680572509766 -4.19535493850708 0.04190317541360855 -1.420573234558105 1.192662954330444 -0.1810762286186218 -1.406258106231689 1.751004099845886 1.175361514091492 -4.831809997558594 0.4343885779380798 0.5452494025230408 3.086219310760498 0.09999201446771622 2.705193996429443 + 1.488669633865356 0.6230473518371582 -0.3772713541984558 -0.88755202293396 0.7939217090606689 1.897245168685913 0.6011427640914917 -1.542657852172852 -1.903641700744629 0.9431750774383545 0.3882133364677429 -5.527318954467773 -5.419240951538086 -3.335561275482178 1.401542544364929 2.595142602920532 1.500421762466431 3.042678356170654 5.569425582885742 -1.851373195648193 + -4.457861423492432 -4.25111722946167 -1.899293780326843 1.10222601890564 1.046847939491272 -0.834941565990448 2.48631763458252 3.981426954269409 2.32318639755249 3.308381080627441 2.898470163345337 0.1306009739637375 -1.099928855895996 -2.279291391372681 -1.298146843910217 3.465991497039795 -1.450250625610352 1.229582548141479 -0.9725422859191895 -3.429654121398926 + 2.050058841705322 2.280264377593994 2.002211332321167 0.7293190956115723 0.00934708584100008 -0.07563371956348419 -0.3953499794006348 -0.6061539053916931 -1.032893657684326 0.1086416617035866 -0.448949009180069 -1.931215882301331 -2.465993881225586 0.2038096487522125 0.09919945150613785 -0.2735584080219269 0.470416933298111 0.4162492454051971 -0.2916281223297119 -0.848143458366394 + -1.393782019615173 -2.327441692352295 -2.157792568206787 1.973991394042969 6.027108669281006 5.338900566101074 3.331356287002563 0.3696639835834503 -2.185264110565186 -1.570574641227722 -1.800838708877563 -1.291267871856689 2.434555530548096 1.644800186157227 1.912709355354309 -2.250123500823975 -1.14780855178833 -2.065698385238647 -3.231765747070312 -1.610736131668091 + 2.840147256851196 -0.5065755844116211 -3.383320808410645 -2.846185684204102 1.314135670661926 1.626678109169006 -0.4990595281124115 -0.9715559482574463 1.905833005905151 4.507324695587158 1.312321543693542 -1.849607586860657 -0.06476990133523941 -0.461659163236618 -1.027477383613586 -1.192480206489563 -0.9565013647079468 -0.02667775005102158 1.805808901786804 -1.52638041973114 + 1.435736298561096 -0.5321202278137207 -2.50213623046875 -3.776311874389648 -3.163796424865723 -0.1304887682199478 2.73951530456543 3.51189923286438 2.445429086685181 1.391998529434204 -0.0461425743997097 0.6448684930801392 0.3274059593677521 -1.596135497093201 -2.801647424697876 -2.05764627456665 5.771510124206543 2.987147808074951 -1.713802218437195 -2.935284376144409 + -1.79314661026001 -0.4897537231445312 3.013928413391113 4.958909511566162 0.6519218683242798 -2.718425989151001 -3.920622825622559 -2.566118240356445 -1.129867792129517 -1.031805634498596 -1.119361996650696 0.2783998250961304 -0.08195604383945465 -1.059302687644958 -2.016788005828857 -0.4750585556030273 -1.108274817466736 0.05081822350621223 4.492834568023682 6.063666820526123 + -0.6767776012420654 -0.1957288682460785 -0.04472888261079788 0.1083610206842422 1.490352988243103 2.409213304519653 0.7489264607429504 -1.148550271987915 -3.208182573318481 -2.046503305435181 -1.4329833984375 0.6589847207069397 0.2104056477546692 -1.640016794204712 -2.836886882781982 -3.475991487503052 -1.430539846420288 7.495837688446045 3.220044612884521 1.794761061668396 + 1.186030149459839 1.849978446960449 1.639191508293152 0.6172394156455994 -0.09355918318033218 -1.050958156585693 -0.8904258012771606 0.6248625516891479 2.393120288848877 1.349990010261536 0.2049116790294647 0.6811513900756836 1.30882203578949 -1.003997802734375 -3.040266275405884 -4.450092315673828 -7.976119995117188 -3.844814777374268 8.824363708496094 1.670571327209473 + -1.843494057655334 -2.282655477523804 -0.9885742664337158 2.558804035186768 5.65041971206665 3.609754085540771 -0.6687325835227966 -3.365294694900513 -1.857032299041748 -1.164284110069275 -2.105275392532349 -0.7656622529029846 -0.7471562027931213 -1.385410070419312 -0.3040576875209808 2.156218290328979 5.392293930053711 0.9884688854217529 -0.6510481238365173 -2.22727632522583 + -2.182024955749512 0.02911118417978287 3.032117605209351 4.783159732818604 3.860750675201416 1.142744183540344 -2.06998348236084 -1.829299807548523 -0.2796923816204071 -0.2607273757457733 -1.079266428947449 -1.160606622695923 -1.738610982894897 -1.770478963851929 0.5134162306785583 3.140848875045776 2.047521829605103 -3.17074990272522 -3.470529079437256 0.4622991681098938 + 2.08658766746521 2.321782112121582 1.859747529029846 -1.249405026435852 -4.981188774108887 -4.812893390655518 -2.460597038269043 0.4683910310268402 2.628458976745605 1.839210391044617 -1.561433076858521 -1.339381456375122 1.409864664077759 4.562982082366943 2.748553514480591 0.6901256442070007 -1.172405004501343 -0.7502867579460144 -1.712900996208191 -0.5752169489860535 + 0.8184414505958557 -0.2962335348129272 -1.022157907485962 0.01561964675784111 0.6288811564445496 -0.7829751968383789 -2.530503273010254 -3.755099296569824 1.744163155555725 2.273992776870728 -1.020649671554565 -0.1963364481925964 1.319931626319885 1.892782807350159 0.7290130853652954 0.04840057343244553 4.038049697875977 2.872266292572021 -2.261462211608887 -4.51612377166748 + -1.446102738380432 -0.7167303562164307 0.2515703439712524 -1.23483407497406 -2.609738826751709 0.3079873621463776 1.690143704414368 -4.403445243835449 -2.799608707427979 1.409569263458252 1.280640840530396 1.462202548980713 2.593785047531128 1.137232065200806 -1.32743239402771 -1.1048264503479 2.930372953414917 -0.7692573070526123 -0.8502528667449951 4.198720455169678 + -3.718855619430542 -4.413382053375244 -2.711734533309937 2.262424468994141 5.887364864349365 2.504238128662109 -1.442863821983337 -2.787719964981079 -0.3718608915805817 -0.3677531778812408 0.3978939354419708 1.645890593528748 3.828397989273071 -0.7775834798812866 -4.310483932495117 -3.670040130615234 0.4069628417491913 4.75504207611084 2.082890748977661 0.8011701703071594 + 3.892307043075562 3.822668790817261 2.376802921295166 -1.261266589164734 -3.091756820678711 -2.18494725227356 -0.8012214303016663 -0.1136020794510841 0.2132180631160736 0.2839116454124451 -0.2682572603225708 -2.507866859436035 -1.160998582839966 2.282519817352295 -0.4657276570796967 1.579750418663025 3.038134813308716 -4.558950424194336 -2.232706546783447 1.157987356185913 + 0.79844731092453 0.8326568603515625 1.049015998840332 -0.4503269791603088 -2.355181217193604 -2.713284969329834 -1.367990851402283 -2.897423028945923 -4.049951553344727 2.635582685470581 6.964749336242676 -0.3327135741710663 -2.441974639892578 0.6748703122138977 3.510799169540405 -0.2816167175769806 0.4659367501735687 0.9373818039894104 1.330911874771118 -2.309890508651733 + 1.717276096343994 2.544231653213501 2.00365686416626 -1.235613584518433 -4.288255214691162 -2.787402868270874 1.9127436876297 1.894940972328186 -3.67094898223877 -5.479747772216797 -2.875224590301514 0.005169824231415987 1.559132933616638 0.08513864874839783 0.9387868046760559 -0.5025088787078857 0.1407343298196793 2.487510681152344 1.675570726394653 3.874813556671143 + 2.481478452682495 2.961296081542969 1.636443734169006 0.08288729935884476 -4.460241794586182 -5.584952831268311 -0.5584561228752136 1.288374781608582 1.671128749847412 2.791324853897095 1.298115491867065 0.1001590266823769 -1.22749924659729 -0.8381553292274475 -2.076330661773682 -2.292328834533691 -1.138233065605164 -2.386862277984619 7.480965614318848 -1.2291179895401 + -0.5527461767196655 1.595328807830811 3.48974084854126 2.548578500747681 -0.2684855461120605 -2.436187267303467 -2.238657236099243 -1.490797638893127 -0.2697281837463379 1.40843939781189 1.933435678482056 1.937822937965393 2.167401552200317 3.993409633636475 -1.02372407913208 -4.459651470184326 -2.665486097335815 1.027994275093079 -2.209256649017334 -2.487433195114136 + 1.648601651191711 -1.325186610221863 -2.59160304069519 -0.3897635638713837 1.937838435173035 2.864520788192749 1.853426694869995 1.096339344978333 0.09384593367576599 -0.3646806478500366 0.1689387112855911 1.249445796012878 1.954450130462646 1.038281321525574 -2.723332166671753 -4.213016986846924 3.640157222747803 -6.037474155426025 -1.899118661880493 1.998327016830444 + -5.695510864257812 -4.174426555633545 -0.04523338750004768 4.670047760009766 3.302312850952148 1.184760093688965 0.5913969874382019 0.790643036365509 1.841755390167236 1.575088500976562 -0.8008028864860535 -2.595237255096436 -2.689868450164795 -0.8327107429504395 3.241783857345581 0.4629069864749908 -3.158851146697998 -2.229681253433228 3.790990114212036 0.7706426382064819 + 0.2763624787330627 0.6423590183258057 1.892408013343811 3.692827701568604 1.536208868026733 -0.7880287170410156 0.04114867746829987 1.062060475349426 -3.543919324874878 -4.773282527923584 -0.2869487404823303 6.617877960205078 -1.308582544326782 -6.406513690948486 0.6333562731742859 1.39584743976593 1.096988797187805 0.668147087097168 -2.435470819473267 -0.01284445449709892 + -2.929668188095093 -1.463376879692078 1.638237595558167 2.475247383117676 -0.2191907614469528 -3.497880220413208 -0.04315080866217613 2.382368326187134 2.61348295211792 0.5396826267242432 2.710929870605469 3.412773370742798 -0.4170291125774384 0.9737174510955811 -1.636469602584839 -1.267998099327087 -0.9241710901260376 -4.652457714080811 1.215757250785828 -0.9108089208602905 + 0.6292325854301453 0.2062002867460251 0.3606775104999542 3.292857646942139 1.227551937103271 0.3687893450260162 1.943183660507202 1.933870911598206 0.7714879512786865 -0.8543561100959778 0.4368536472320557 3.532084465026855 0.4997440874576569 -4.950562477111816 -3.96056079864502 4.164540767669678 0.8672187924385071 -6.245272159576416 -2.85256552696228 -1.370973110198975 + 0.2077154964208603 1.360790848731995 3.011338472366333 1.448279023170471 0.8481842875480652 -1.371118664741516 -1.681269764900208 0.8414862751960754 -0.3629663586616516 -1.602252840995789 -0.1024579927325249 -0.1697578728199005 -4.928637981414795 -4.290009021759033 4.711252689361572 1.019842028617859 -1.718722224235535 5.252682209014893 -0.8344643115997314 -1.639922499656677 + -3.006164789199829 -4.607873439788818 -3.632050514221191 -0.08763166517019272 2.663437366485596 1.289820909500122 -2.095130443572998 -1.744541883468628 2.639355182647705 5.408267498016357 2.530782699584961 1.208352327346802 0.5823025107383728 -0.5013665556907654 -0.8788560032844543 -0.8186993002891541 1.320674777030945 0.2637715637683868 -2.344348669052124 1.809890627861023 + 1.760598182678223 1.771975874900818 2.057921886444092 1.416042923927307 -0.6168055534362793 -0.6877173781394958 -0.1423780769109726 -0.7616351842880249 -1.03268563747406 -2.153908729553223 0.7624067068099976 0.1311984807252884 -1.547802567481995 0.5320296883583069 -1.787500023841858 1.404358744621277 -2.131267547607422 1.601096034049988 -3.929259777069092 3.353332042694092 + -1.364639282226562 -1.170698761940002 -1.504715204238892 -2.492687940597534 -1.75039279460907 0.6238287687301636 1.288414239883423 0.1642747074365616 0.2112672328948975 -0.2258281707763672 -1.472754001617432 -2.122465133666992 -2.151413440704346 0.5189334154129028 0.2608343064785004 1.190940022468567 0.1028645634651184 1.10194194316864 3.27560830116272 5.516687870025635 + 1.959387540817261 1.831663966178894 1.935948848724365 2.653372764587402 2.022023916244507 0.8812538981437683 -1.058476686477661 0.3819854855537415 1.619094967842102 2.249097347259521 1.621755242347717 -2.288035869598389 -7.003807544708252 -5.247036457061768 -0.5048026442527771 -0.5523558259010315 -1.325468420982361 -0.751647412776947 0.3117852210998535 1.264256596565247 + 2.868587732315063 2.118951559066772 1.803818225860596 1.661841511726379 0.8628541827201843 -0.7095708250999451 -0.4536882340908051 -0.06366419047117233 -0.3320952951908112 -1.215360522270203 -3.138045310974121 -4.249349117279053 -2.03001856803894 -2.836879730224609 -0.4425094723701477 5.499884128570557 -5.265222549438477 0.5111331939697266 2.232098579406738 3.177235126495361 + 4.700842380523682 0.8226092457771301 -9.462460517883301 6.794791698455811 -3.043027400970459 5.066953659057617 -4.148794174194336 1.778123021125793 -3.303350210189819 0.5842142701148987 1.695544838905334 0.2344068735837936 -0.08452018350362778 -2.03486967086792 -0.6564037203788757 -1.005685567855835 0.2908599972724915 0.5953078866004944 0.4169158935546875 0.7585396766662598 + -1.197206974029541 -0.4662580490112305 -0.475071132183075 -2.406960964202881 -3.393859386444092 -3.422770977020264 -1.678554892539978 -0.003673851024359465 0.3097603917121887 0.08369193226099014 0.3067538440227509 -0.05054872110486031 0.7746817469596863 0.6275773048400879 0.5238117575645447 2.578717470169067 8.927600860595703 0.7547761201858521 1.309368371963501 -3.101839065551758 + -3.396648645401001 -3.006953954696655 -2.54184627532959 -0.669414758682251 1.274054646492004 0.7544602155685425 -0.5457019805908203 0.1150546222925186 0.3017935454845428 1.347033500671387 1.149272799491882 0.3716540634632111 2.079627990722656 0.5113272070884705 -0.1361311674118042 -0.2812511324882507 -3.894354581832886 -3.966667890548706 6.400481224060059 4.134207248687744 + 0.5280729532241821 1.041056871414185 1.940832614898682 1.553367018699646 -0.1882649660110474 -1.781635642051697 -1.203657627105713 0.3910945355892181 2.17659592628479 2.519144296646118 0.8655117154121399 -3.366393804550171 -4.6307692527771 -2.398255586624146 -0.3263684511184692 1.662757515907288 4.807094097137451 -2.749747037887573 -3.072910070419312 2.232465267181396 + -1.893018484115601 -1.217199563980103 -0.9682928919792175 0.3463273644447327 -2.676116228103638 -1.431546092033386 -0.8731400370597839 -0.1490593105554581 0.6183457970619202 0.6536892652511597 2.422162771224976 3.453183889389038 -4.791984081268311 -3.712500333786011 4.708353519439697 -0.1838409900665283 -2.173721551895142 2.417072296142578 0.2861114144325256 5.165168762207031 + -2.034722805023193 -0.9588102102279663 -0.01749689318239689 -0.2261103391647339 -0.1477866172790527 1.578912377357483 2.098614454269409 2.074756622314453 2.235087156295776 2.421241760253906 2.078609943389893 2.313151597976685 1.591197371482849 -0.5774418115615845 -2.152228593826294 -5.887124061584473 -5.430069923400879 -0.5863301753997803 3.938504219055176 -2.311954259872437 + 0.193042054772377 -0.8256046175956726 -0.2352310121059418 -0.8852900862693787 -1.467100620269775 -0.7054958939552307 0.7411825060844421 -0.2379120439291 -1.60500156879425 -0.5094668865203857 0.04227841272950172 -0.3478812873363495 -0.03992712497711182 0.07689163088798523 -1.774202823638916 2.528244256973267 3.533122062683105 -7.166943073272705 3.626859903335571 5.058434963226318 + 1.391436100006104 3.105663776397705 1.916596651077271 1.276423335075378 0.7894902229309082 -6.508738994598389 0.1832661181688309 2.675395488739014 -0.7023449540138245 0.1622187942266464 3.792406558990479 -1.421934485435486 1.120653510093689 1.952394604682922 -0.9856393933296204 -4.68065071105957 2.596538782119751 -2.330784797668457 -1.614585995674133 -2.717800855636597 + 1.033023715019226 -1.053178906440735 -2.684606313705444 -2.478799819946289 1.353747129440308 4.171833515167236 2.574680328369141 2.271486043930054 1.932726144790649 0.9706431031227112 0.2737517356872559 0.3402403891086578 0.5320044755935669 0.7378954887390137 2.057255983352661 -1.097760438919067 -3.932865381240845 -1.886742949485779 1.42937445640564 -6.544708251953125 + -2.669582843780518 -2.342683553695679 -1.537942409515381 -0.1841365993022919 0.9828346967697144 1.245828986167908 0.130805715918541 0.7215755581855774 1.161487698554993 0.1317613571882248 0.5843257904052734 2.470001220703125 1.020850539207458 -1.71483039855957 -1.117891311645508 -0.01830779202282429 -7.61931037902832 5.138027191162109 2.654516458511353 0.9626672267913818 + 2.701655626296997 1.582839846611023 0.58031165599823 0.7968406677246094 1.402288794517517 2.262923717498779 3.022931575775146 4.455127239227295 3.563494205474854 0.9642434120178223 -2.422784566879272 -3.648863792419434 -0.8347338438034058 1.796675682067871 -3.585479974746704 -4.955000877380371 -4.394599437713623 -0.2374833226203918 -0.8463470935821533 -2.204041957855225 + 1.177448868751526 -0.3372834622859955 -0.9290520548820496 -1.437718749046326 -0.6079438924789429 0.5688709616661072 0.1867759525775909 -1.220811247825623 -5.792614936828613 -3.623303890228271 3.93553352355957 1.617368459701538 -1.645743131637573 -1.735467314720154 1.705010175704956 1.853546500205994 0.08750929683446884 0.3738145232200623 2.375198841094971 3.448861598968506 + 0.3161343634128571 1.21888542175293 2.285951852798462 0.4127763211727142 -1.209391713142395 -0.689723789691925 -0.1063813045620918 0.1718097329139709 0.4380899965763092 -0.3762838244438171 -2.149899482727051 0.05767787992954254 3.16109037399292 -0.6023402214050293 -5.396179676055908 4.925402164459229 -3.090698957443237 -3.218554019927979 0.41961470246315 3.432022094726562 + -0.06093846634030342 -2.644865274429321 -3.666503190994263 -2.493161678314209 0.8069440722465515 2.970539093017578 3.370298624038696 3.010579347610474 1.728769421577454 0.1816002130508423 -1.673816680908203 -2.438737154006958 -1.930779457092285 -1.29712450504303 1.008697032928467 3.663813352584839 -2.023665189743042 -5.031120300292969 5.518422603607178 1.001044034957886 + 0.7320125102996826 -2.331653356552124 0.06877173483371735 -3.11285924911499 4.714087963104248 -2.631018161773682 -0.7590774297714233 1.989057183265686 -2.383845329284668 -0.004400276578962803 -0.114359512925148 -0.8074385523796082 -2.197742223739624 0.3523499965667725 4.072504997253418 2.771194696426392 -1.188065052032471 0.05695556849241257 -2.919783115386963 3.693297624588013 + -0.2235530316829681 -0.3803997337818146 0.5376530289649963 1.314172863960266 0.5564204454421997 -1.663768768310547 -3.225914478302002 -3.92216420173645 -2.979527950286865 -1.238452553749084 4.784476280212402 6.576930046081543 0.632330060005188 -1.143015623092651 1.977515935897827 0.7014617323875427 0.1038806661963463 -1.642755270004272 -1.711505174636841 0.946214497089386 + -0.9767561554908752 0.4133218824863434 1.059082865715027 -0.2017582207918167 -2.852156400680542 -3.881631374359131 -2.032818078994751 -0.3288829922676086 -0.4455679953098297 -4.300843715667725 -0.8296360373497009 5.500622272491455 2.456516742706299 2.854861974716187 3.263457536697388 0.5948963761329651 -1.720106482505798 0.904988706111908 2.089772701263428 -1.567367792129517 + -0.2208908349275589 0.8586509823799133 2.39211630821228 2.832198858261108 -1.346587061882019 -3.900247097015381 -1.02666711807251 0.7597519159317017 1.967016100883484 2.086107969284058 0.5408236384391785 -0.1459962576627731 2.725881338119507 0.3153025805950165 -0.2360152453184128 -3.780904531478882 2.741753578186035 0.1469841599464417 -6.705402374267578 -0.003874896327033639 + 1.713500380516052 0.4096760153770447 -1.079294085502625 -0.3439009189605713 3.244986772537231 2.8205885887146 -0.6904048919677734 -1.87639057636261 -1.600510954856873 -1.88703989982605 -2.456420183181763 3.79804515838623 0.567797064781189 3.282307147979736 -1.00359570980072 2.512642383575439 1.042544484138489 -1.489490389823914 -4.691313743591309 -2.273730039596558 + -1.378519296646118 -0.8361780643463135 1.404695153236389 3.355095386505127 2.68464207649231 0.03594308719038963 -1.053908824920654 0.4063661694526672 4.644443988800049 5.480449676513672 0.3615856468677521 -0.4425186812877655 0.556786060333252 1.532435417175293 -1.76366925239563 -2.338820457458496 -2.379199743270874 -3.042872428894043 -3.689615964889526 -3.537143707275391 + 1.428278565406799 1.988517761230469 2.031313180923462 -0.2583244740962982 -2.494675636291504 -0.9767099022865295 0.7532281279563904 -0.4732295274734497 -1.991236329078674 -0.6871415972709656 3.570252656936646 4.25687837600708 3.13536810874939 1.785650610923767 0.7124302983283997 -1.008084058761597 -2.389198303222656 -3.383609056472778 -2.553059577941895 -3.44665265083313 + -1.271450757980347 -1.360670447349548 -3.521802186965942 -2.896998643875122 -1.225138902664185 -0.3272210359573364 0.6326116323471069 1.836167097091675 1.862745761871338 2.403506517410278 1.325380444526672 -0.8812326192855835 3.45412540435791 0.2694416344165802 -5.485726356506348 2.291593790054321 0.07528118044137955 0.01971222460269928 1.875144720077515 0.9245322942733765 + -3.122657537460327 -3.139187574386597 -2.463742733001709 -1.985505938529968 -1.884193062782288 -0.8959736824035645 -2.033669948577881 -1.541178703308105 -1.450661063194275 -1.526492953300476 -0.7581529021263123 -0.4746161997318268 -0.9514655470848083 -0.08385688066482544 0.418423056602478 3.11402440071106 3.995398283004761 4.972164630889893 6.473308086395264 3.338037490844727 + 2.526722431182861 2.944838047027588 3.589931488037109 2.166812181472778 -0.2016685605049133 -1.106748104095459 -2.649778842926025 -2.223835945129395 -0.2176427990198135 1.269417643547058 -0.1558391600847244 -3.274273157119751 -1.262032151222229 1.749134182929993 -1.95890748500824 -4.578955173492432 2.265961647033691 -2.483431100845337 -2.283903837203979 5.884201049804688 + -0.272401362657547 -0.5664513111114502 -0.2859717309474945 -1.295641183853149 -0.6679728627204895 1.527059316635132 1.122546672821045 0.7962974309921265 2.370281219482422 2.617199420928955 1.142063736915588 -1.479499578475952 -3.65531849861145 -4.731695652008057 -1.698650479316711 7.573663234710693 3.952348709106445 -2.00234055519104 -1.818847298622131 -2.626665592193604 + -0.9978251457214355 -0.3445082008838654 2.350752115249634 0.7622905969619751 -0.5986901521682739 0.6137807369232178 -0.7229595184326172 -0.002284240443259478 3.534998178482056 2.122037887573242 -4.812726497650146 5.917830944061279 -0.03075867891311646 -2.566981077194214 0.8924157023429871 -0.3432605862617493 0.2862564921379089 -1.027161836624146 -3.182841539382935 -1.850368499755859 + -0.9495909214019775 0.465959757566452 1.764587759971619 1.546875238418579 -0.1255608648061752 -0.9421167373657227 -1.247283101081848 -1.233747243881226 -0.5313619375228882 0.6430454850196838 2.696417093276978 3.702658653259277 -0.1457497477531433 -4.60930871963501 -2.494087219238281 -2.895824432373047 -2.424416780471802 5.417782306671143 4.918808460235596 -3.557090044021606 + -1.030405521392822 -0.8023036122322083 -0.5904064774513245 -1.03156578540802 -2.082833290100098 -1.591696739196777 -0.4132141470909119 0.2687574625015259 0.2448409497737885 0.51706862449646 -0.9436204433441162 -2.442615032196045 -3.266153573989868 -2.20817494392395 -1.651225209236145 5.500433921813965 7.052728176116943 2.987900972366333 -0.7579793334007263 2.2404625415802 + 2.589227914810181 0.4400538206100464 -2.837404012680054 -3.329279184341431 -1.850268363952637 -1.149185299873352 -2.595610380172729 -0.000785681651905179 2.499572038650513 1.044571280479431 -1.909776329994202 -1.550613284111023 4.546487331390381 2.414699554443359 -2.182963132858276 -4.256907939910889 1.910601139068604 5.404051780700684 -1.057012319564819 1.870539426803589 + -4.199136257171631 -4.42754602432251 -5.7106032371521 10.08052539825439 16.78405570983887 -3.152700662612915 -4.857255458831787 -2.244782686233521 -4.164987087249756 1.451949000358582 5.444407939910889 -3.596778392791748 -1.800343990325928 2.870931386947632 -1.700112342834473 -2.7829430103302 -2.321566820144653 0.341965526342392 0.03859251365065575 3.946330308914185 + -0.7501673102378845 -0.9857423305511475 -0.6321393251419067 1.374637365341187 1.987499833106995 0.7196906805038452 -0.008339477702975273 1.317149996757507 1.30441677570343 -0.05784959346055984 -1.540507912635803 -0.1534523665904999 1.117976546287537 -2.726280927658081 -5.546449661254883 -1.069750308990479 6.8494553565979 -1.726668238639832 -2.909657001495361 3.436178207397461 + 3.583144187927246 3.198900461196899 3.065187215805054 1.722529053688049 0.5028476119041443 -0.699317991733551 -0.8333207368850708 -1.070127844810486 -1.687241792678833 -3.49016547203064 -3.354517221450806 0.7512331008911133 -0.706838846206665 -3.813214302062988 -3.857327938079834 -1.362147331237793 2.529687643051147 0.6258994936943054 2.515447854995728 2.379342794418335 + -5.442665100097656 3.68870997428894 3.871597528457642 -5.278135299682617 -4.490569591522217 1.083476543426514 0.051875039935112 -2.970682144165039 -1.011559844017029 -2.051226615905762 -0.0408315546810627 0.415074497461319 2.37037205696106 2.705331087112427 1.556277632713318 1.488031268119812 0.9928176403045654 1.952879190444946 0.3862295746803284 0.7229958772659302 + -1.059159159660339 -2.302575349807739 -3.73100209236145 -3.760766983032227 -2.211306095123291 0.0347541980445385 0.7744829654693604 0.02941202931106091 -1.236848831176758 1.852622985839844 4.099488258361816 1.1764976978302 -1.793488025665283 -2.237806081771851 -0.7126759886741638 3.949085474014282 -0.701549232006073 3.404113054275513 4.626301765441895 -0.1995829641819 + 0.2374536544084549 1.566378116607666 2.740406036376953 1.511246800422668 -3.239214658737183 -4.520734310150146 -2.577881813049316 -1.441423416137695 0.2196123450994492 1.74962055683136 3.309897661209106 2.983213901519775 -0.6901386380195618 -3.253738403320312 -1.596030116081238 5.582816123962402 1.050547122955322 -1.165971636772156 -3.4047691822052 0.9387071132659912 + -0.1036208942532539 0.1876322776079178 -0.2121543139219284 0.04690039902925491 0.4663183987140656 2.065295934677124 4.677820205688477 2.13742733001709 -3.941335439682007 -3.684225797653198 -0.9626390337944031 4.193143367767334 5.577122688293457 -0.8785200119018555 -4.359488964080811 -4.281440258026123 -2.982467889785767 -0.5754686594009399 0.801977276802063 1.827723503112793 + 0.1278781741857529 0.2687109112739563 -0.8236921429634094 2.660154581069946 4.420417308807373 -4.455633163452148 0.09870412200689316 -1.695899128913879 -0.5371567010879517 1.202093720436096 0.5301929116249084 -2.883213043212891 1.124411106109619 -0.9898179769515991 2.054413080215454 -3.078934669494629 -0.2278607785701752 1.39113712310791 1.534266948699951 -0.720173180103302 + 3.769246816635132 -1.01996898651123 -3.440073251724243 -0.3005786836147308 2.949532985687256 -0.3944534659385681 1.065977334976196 -1.836590170860291 0.4499357342720032 0.8188204169273376 0.7831099033355713 0.699485719203949 2.347730875015259 -4.580638885498047 1.993945717811584 0.6164001226425171 -0.7352221012115479 -1.576722502708435 -4.651494026184082 3.041560649871826 + -3.468271255493164 2.168287038803101 0.2562046349048615 -1.404000639915466 0.1332112699747086 -2.88915228843689 3.170912027359009 2.558159112930298 -4.005714893341064 5.003609180450439 -1.449915528297424 -1.879528522491455 -0.4359064400196075 -0.8183899521827698 1.755608916282654 -2.313157558441162 0.6026942729949951 0.5909388065338135 0.9147639870643616 1.509647846221924 + -2.483497142791748 -1.523133158683777 -0.7651989459991455 -1.005481958389282 -1.847957134246826 -1.803458094596863 -0.8597741723060608 -2.212020397186279 -0.2205722779035568 0.8671842813491821 4.120834827423096 3.554033041000366 -3.617197275161743 -5.094652652740479 3.083799362182617 5.246707916259766 3.602969408035278 4.011700630187988 -0.9498605728149414 -2.104419946670532 + -2.671776294708252 1.506115913391113 3.807487010955811 3.400156259536743 -0.9251390099525452 -1.94014310836792 -0.08978157490491867 2.175362110137939 2.308850765228271 -4.643712043762207 0.119082547724247 0.3501554131507874 1.781512975692749 0.6938214898109436 -0.2862620055675507 -1.404526352882385 -1.368448972702026 -1.153199791908264 1.755699038505554 -3.415257692337036 + 5.195250034332275 2.966614723205566 0.1351861953735352 -2.045390844345093 -2.874892473220825 -3.164917707443237 -2.473138809204102 -1.483839988708496 -0.2236808389425278 2.055234670639038 -0.7854546904563904 -3.138363599777222 -2.166174173355103 1.128945231437683 2.202524662017822 -0.1959279477596283 -0.5846036672592163 2.861791372299194 0.8885049223899841 1.702340006828308 + -0.4649189114570618 -2.498614072799683 -4.485294342041016 -3.801587820053101 -1.626065850257874 0.2282653599977493 0.1077531203627586 -0.9278391599655151 -1.735161662101746 -1.632193803787231 -0.2159860730171204 1.906472086906433 3.316807746887207 2.595955610275269 1.417796492576599 -0.2477727979421616 -1.129722237586975 0.5453447699546814 4.201554775238037 4.445203304290771 + 4.827155113220215 3.932016372680664 2.032240867614746 0.2925414144992828 -0.7519041895866394 0.3531821370124817 1.399823307991028 1.199200749397278 -1.139524102210999 -1.690314412117004 -2.305120468139648 -1.088095307350159 1.511814475059509 2.49120831489563 1.758594512939453 0.9801353812217712 -1.168035745620728 -3.380238771438599 -4.678845882415771 -4.575832843780518 + 1.66147780418396 0.9180510640144348 0.7631861567497253 0.8707747459411621 -0.4780696034431458 -1.580554604530334 -0.1080114841461182 2.067233324050903 0.3887670338153839 -4.675474166870117 -3.378207683563232 0.355591893196106 -1.57286536693573 -2.010226726531982 -1.878196954727173 -0.5066808462142944 -1.599499344825745 0.3597856462001801 7.981940269470215 2.420974254608154 + 2.872686386108398 1.147725939750671 -0.3624208867549896 -1.451219201087952 -1.205541133880615 -0.7444716691970825 -0.7388442754745483 -0.2350238561630249 0.3041113615036011 0.4739408493041992 0.7783424258232117 1.265362620353699 1.016754627227783 0.6340544819831848 -0.4100202023983002 -1.461962819099426 -0.726905345916748 -0.1058801487088203 -0.5112472772598267 -0.5394427180290222 + 2.279183387756348 1.438037991523743 -1.743365526199341 -4.283932685852051 -5.414597988128662 -4.454378128051758 -0.1296612173318863 3.23888111114502 2.967418193817139 -1.240531206130981 -1.265366911888123 -0.945634126663208 -0.9949120283126831 1.152771592140198 4.300113677978516 1.02858829498291 -1.484533190727234 2.210370779037476 -0.1285808682441711 3.470129489898682 + 0.3017450571060181 -0.1498636305332184 0.1029097437858582 -1.433868765830994 -1.915183305740356 -1.155570507049561 1.715258717536926 1.900405049324036 -2.217571020126343 -3.589828014373779 -2.157891988754272 -2.458143949508667 -0.3310191631317139 2.272882461547852 8.204835891723633 -0.1225843727588654 -1.385596871376038 2.375417947769165 1.737648010253906 -1.693982362747192 + 3.745594263076782 2.004984617233276 -2.245905637741089 -7.090678215026855 -8.159734725952148 -1.767064332962036 5.23501443862915 6.305153846740723 4.978433132171631 3.202115535736084 2.106504917144775 2.562182188034058 1.520685076713562 0.3888741433620453 -1.872121691703796 -0.9152169227600098 -3.041243553161621 -4.312341690063477 -3.511852264404297 0.8666195273399353 + -2.680328130722046 -2.553738594055176 -1.875401377677917 -1.490962028503418 -0.1114008203148842 0.4590074717998505 0.8290086388587952 1.161263346672058 2.043784618377686 2.759833097457886 1.701228737831116 1.104482412338257 2.558989524841309 5.695891380310059 0.3211452066898346 -3.596060276031494 -4.822910785675049 -1.150652766227722 1.174303531646729 -1.527485132217407 + -0.09116837382316589 0.4384465515613556 1.250977754592896 1.852476716041565 1.869683027267456 -0.04114127159118652 0.09432986378669739 -0.7332554459571838 -1.90261971950531 -2.870981454849243 -2.118256330490112 -3.636200189590454 -2.691668748855591 -2.417536020278931 -1.085556030273438 1.118744850158691 1.143314838409424 8.593686103820801 2.19420862197876 -0.967487633228302 + 1.519890785217285 1.444992542266846 1.16922664642334 0.9511992931365967 0.1843592524528503 -1.727593779563904 -5.366539001464844 -2.714352130889893 4.652383804321289 5.431854724884033 1.047267436981201 -1.795069932937622 -0.6797837018966675 1.121488332748413 0.5058336853981018 0.3877582848072052 -2.513861417770386 -2.15250301361084 -0.8991096019744873 -0.5674426555633545 + 3.231687784194946 2.224106311798096 0.5264853239059448 -0.1369419246912003 -1.487146496772766 -2.203551292419434 -3.225065469741821 -1.313546538352966 0.00570213096216321 1.709993600845337 1.64920699596405 1.912981033325195 4.045007228851318 -2.141630411148071 -2.495683193206787 -0.3145557940006256 1.217272758483887 -4.764912605285645 0.8985964059829712 0.6619864106178284 + 4.616347312927246 2.070970058441162 -0.2733224928379059 -1.727367877960205 1.802179932594299 3.314459323883057 -2.122619390487671 -5.179647922515869 -0.6722184419631958 1.200976133346558 -1.414963245391846 -0.02202126756310463 0.7474585175514221 -1.479194045066833 -1.104833245277405 1.7520432472229 0.4058637022972107 -0.6629653573036194 -0.6953992247581482 -0.5557476282119751 + 7.463465690612793 -6.408750534057617 2.956119060516357 0.4402835071086884 -0.02264184504747391 -3.327150106430054 0.7482340335845947 -0.131329670548439 -1.054370999336243 1.074682116508484 1.283100605010986 0.6829223036766052 -0.5991993546485901 1.811161756515503 0.1444214135408401 -1.876204967498779 -1.064442157745361 0.3508663475513458 -1.245215654373169 -1.225958108901978 + -0.2351352125406265 0.01811729185283184 -0.05697528272867203 -0.8668802976608276 -0.5024009943008423 -0.1121786385774612 1.133620858192444 2.566619634628296 4.086926937103271 3.822227239608765 0.3442915081977844 -1.099249124526978 0.1443336755037308 -0.2559133768081665 -1.268902659416199 0.6399479508399963 4.581653594970703 -6.307387828826904 -4.837281227111816 -1.795439600944519 + -0.4482209086418152 -0.05377323552966118 0.8197201490402222 1.117106199264526 0.816688060760498 2.291161298751831 3.060038328170776 3.125231981277466 0.8374813199043274 1.135741591453552 2.073976993560791 -1.905388236045837 -6.510054588317871 -1.254198551177979 3.41459584236145 1.127954125404358 -0.04054573178291321 -0.3543456792831421 -3.757726669311523 -5.495452880859375 + 1.790761590003967 1.299143552780151 1.433046221733093 1.226120829582214 -0.5729221105575562 -1.764503240585327 0.03072447888553143 2.54798412322998 2.313984632492065 0.7630730271339417 -0.1827373057603836 -0.40970379114151 -0.3339998722076416 -1.062450766563416 0.9253862500190735 4.49340295791626 -0.1233074590563774 -2.623739004135132 -6.091894149780273 -3.658363580703735 + -2.921163082122803 -2.645121097564697 1.023138523101807 1.237741112709045 -1.971966505050659 -1.205491065979004 0.3032820522785187 1.704661130905151 -1.473243117332458 -3.659762620925903 -2.563016414642334 -1.257284641265869 -0.706519603729248 -0.7819157242774963 2.317039966583252 6.856012344360352 0.3574521243572235 -0.1411291360855103 3.321772336959839 2.205508947372437 + 1.104993224143982 0.5250481963157654 -0.657941997051239 0.6948821544647217 2.570430755615234 3.373988389968872 -2.838412761688232 -0.1248543635010719 0.7351546287536621 -3.077698945999146 4.914359092712402 -1.436528563499451 1.116251826286316 -3.133138656616211 1.498485922813416 -0.116263747215271 -2.669975519180298 -0.6549662351608276 -0.1218395680189133 -1.701972842216492 + -4.769429683685303 -2.368108987808228 1.917902827262878 1.810898303985596 -1.195234298706055 1.014883399009705 1.441771030426025 0.7814999222755432 1.183945894241333 0.3900144696235657 -1.045584082603455 1.129734992980957 -1.167035460472107 -1.556897044181824 0.7664211988449097 -2.102808475494385 7.788211822509766 -1.190859198570251 -0.4986566603183746 -2.330669403076172 + 3.905627250671387 3.981068134307861 3.11693263053894 0.9327282309532166 -0.5940809845924377 -1.17639684677124 -0.7782648205757141 0.02980975992977619 0.6868348121643066 0.4711532890796661 -2.204205274581909 -3.686488628387451 0.143789991736412 1.39569103717804 1.092862129211426 -2.08640193939209 -5.464561462402344 -3.350888013839722 1.963101983070374 1.621684312820435 + -0.7140541672706604 0.06303763389587402 1.120216727256775 1.616607069969177 1.206099390983582 1.41834545135498 2.196152210235596 4.182565689086914 2.846391201019287 -0.9723392724990845 -2.398123741149902 -1.31235146522522 -0.4345399141311646 1.996130347251892 1.688552618026733 -0.7124021649360657 -6.036073207855225 -6.503729820251465 -4.440065860748291 5.189582347869873 + -3.82236909866333 -4.118223667144775 -4.63170862197876 -1.713215351104736 2.0875563621521 2.123144865036011 0.9285532236099243 -0.8457594513893127 -1.54129695892334 -1.217466592788696 0.1901047676801682 2.186631917953491 0.0766717866063118 -0.8707726001739502 0.3252776265144348 2.846697807312012 4.661111354827881 4.406574249267578 0.7708444595336914 -1.842356324195862 + -5.054139137268066 -4.235100269317627 -3.109839200973511 -2.504670858383179 -0.3832361996173859 1.673603892326355 1.623918890953064 -0.5048198103904724 -2.529747724533081 -1.929627537727356 0.9486346840858459 2.252139091491699 2.801390886306763 2.345565557479858 4.126954078674316 2.190564393997192 1.156854510307312 -1.195654511451721 -0.03771268948912621 2.364927053451538 + -1.395893096923828 -2.812762975692749 -4.74422550201416 -3.515018701553345 4.502767562866211 8.48429012298584 1.358663201332092 -3.101924419403076 -0.2496404945850372 0.5463494062423706 -0.5636650323867798 -0.5185211896896362 1.907350659370422 0.8056055307388306 -1.8412184715271 -1.63126277923584 1.91503632068634 0.125316396355629 2.43311882019043 -1.70436692237854 + 2.392595767974854 2.101143836975098 1.153611302375793 -0.07043066620826721 -0.3547010123729706 0.04476236552000046 -0.1367338299751282 -1.144255399703979 -1.07750678062439 -1.16557765007019 -0.6561461091041565 1.0876544713974 1.360438704490662 3.20914101600647 5.429684638977051 -7.407874584197998 -4.813741683959961 1.046329498291016 -0.8467155694961548 -0.1516827344894409 + -1.278135895729065 -1.003596305847168 -2.234717130661011 -2.428241729736328 -1.403702616691589 0.1303887218236923 0.8925742506980896 2.78271484375 2.651901483535767 1.180822253227234 -2.147993087768555 -3.759033918380737 -4.210339069366455 -1.085604548454285 3.666681051254272 1.694392561912537 -0.7788124680519104 5.618120193481445 2.924813985824585 -1.212228655815125 + -0.9826477766036987 -0.4078772962093353 -0.1547617465257645 0.3026951551437378 2.157851457595825 2.451629400253296 1.365828633308411 -0.7742500305175781 -1.859753608703613 -1.59996509552002 -2.589557647705078 -2.292937278747559 -0.8853583335876465 1.239197731018066 1.059711098670959 -4.13409423828125 1.911443591117859 0.8247614502906799 7.141946315765381 -2.773864269256592 + -1.026805996894836 -0.8450024724006653 0.5572199821472168 2.07533073425293 -1.462152481079102 -0.1032509729266167 2.116403102874756 0.6908389925956726 -1.540337681770325 1.8099125623703 2.435013294219971 -0.4527953863143921 -0.8811330795288086 -2.113967657089233 1.363522410392761 -5.869611740112305 0.9726383090019226 1.959186434745789 -0.4253981709480286 0.7403932213783264 + 1.123180389404297 2.423921346664429 2.011796236038208 -2.259575366973877 -4.282215118408203 0.1472185701131821 4.915524482727051 5.70862865447998 2.015475034713745 -3.493731737136841 -1.241144061088562 -0.2100538015365601 -0.7192803025245667 -0.8147674798965454 -0.07723068445920944 -1.486554026603699 -0.5631479024887085 -1.783346176147461 -0.9210835695266724 -0.4936171472072601 + 0.5895103216171265 0.9709528088569641 0.1735081374645233 -0.1970603913068771 -1.337148785591125 -0.06833704560995102 -0.4701314568519592 2.186729192733765 2.284431219100952 -2.787222862243652 2.051291704177856 0.9480997920036316 -6.012847423553467 3.844573259353638 0.7472637891769409 -1.91102659702301 0.2128291428089142 -0.7649785876274109 -0.03817859292030334 -0.4222567081451416 + -1.379981875419617 1.402148246765137 4.875002384185791 6.304775714874268 3.348557472229004 -1.464800834655762 -4.132672786712646 -1.724153518676758 0.5740823149681091 0.1912133097648621 -2.036574602127075 -2.316275835037231 -2.718025207519531 -2.366349458694458 -1.165546417236328 -0.2541355490684509 0.3527232110500336 0.8893675804138184 2.979902982711792 -1.359256863594055 + -0.444318950176239 -0.1581173092126846 1.410300254821777 2.026899576187134 -0.8528115153312683 -1.712621927261353 -1.290557980537415 -1.028133869171143 -1.316847324371338 -0.4018021821975708 1.542700529098511 1.603733420372009 0.6873594522476196 2.569429397583008 7.563037395477295 -1.413105249404907 -1.040423393249512 0.3264094591140747 -4.817464828491211 -3.253657817840576 + -2.221257925033569 -1.203308343887329 -0.841457724571228 -0.4839256405830383 0.234556645154953 0.9496363997459412 0.644877552986145 -1.157626390457153 -0.8406092524528503 1.938154816627502 3.560226678848267 3.708475351333618 1.709346175193787 0.9665330648422241 -2.635007858276367 1.413408994674683 3.170425891876221 -3.188573122024536 -5.548774242401123 -0.175101637840271 + -0.7359840273857117 -0.6846503615379333 -0.778592050075531 -0.8845138549804688 -0.5485366582870483 -0.1052070558071136 0.3515810370445251 1.483491063117981 4.341372966766357 4.646251678466797 0.828454315662384 -2.989817142486572 -5.206014633178711 -6.646724224090576 -4.708529949188232 -0.286090224981308 3.470548629760742 6.586966037750244 1.16373598575592 0.7022614479064941 + -2.709268093109131 2.286872863769531 1.916141986846924 1.569508075714111 -3.077790975570679 1.031215906143188 -1.078618884086609 -0.6200118064880371 -0.6181358695030212 1.336355686187744 1.802809834480286 -4.964313507080078 3.385557174682617 -0.9283789396286011 0.6122055649757385 0.2602559626102448 0.7491185069084167 -1.64072597026825 0.2687221467494965 0.4184781908988953 + 1.494965076446533 1.965440392494202 2.627892255783081 4.021340370178223 3.965642690658569 1.240720272064209 -3.086320877075195 -3.545190095901489 -1.87777304649353 -0.5816421508789062 -2.999452114105225 -3.642553329467773 -2.195728063583374 2.235869407653809 5.806941986083984 1.150704860687256 -1.994730830192566 -1.989902496337891 -2.647743225097656 0.0515185184776783 + -0.2264197915792465 -0.1971047967672348 -0.1741528362035751 0.4345186948776245 -1.870457649230957 -5.329024791717529 -6.270888805389404 -1.334821343421936 4.276025295257568 1.973252654075623 1.380060791969299 2.986200571060181 6.134986877441406 1.48797082901001 -1.369405150413513 -1.211462736129761 -0.1342415362596512 1.256632685661316 -0.263476699590683 -1.548185348510742 + -2.33762264251709 -1.631290435791016 -0.604299008846283 -0.3463553786277771 -0.2443800866603851 0.0713343620300293 1.376959443092346 2.319380044937134 2.301084041595459 1.945846199989319 1.862362265586853 0.02486804686486721 -1.430258989334106 1.809818863868713 2.350292682647705 -3.146598100662231 -4.824000835418701 5.913082122802734 -1.727676033973694 -3.682543039321899 + -2.758931636810303 -1.100733399391174 0.558655321598053 1.779149651527405 0.2744987308979034 -1.815987944602966 -3.108854532241821 -2.565789461135864 -1.339316129684448 -1.625769972801208 -0.9663746356964111 2.052451610565186 0.6209516525268555 -1.144605159759521 1.386128783226013 3.212734699249268 2.704270124435425 2.662636518478394 6.316751956939697 -5.141870021820068 + -0.5228580832481384 1.41612696647644 3.108437061309814 3.292774438858032 1.662018895149231 0.357271283864975 -1.057023048400879 -1.390819787979126 -0.09707825630903244 1.711698174476624 1.777765512466431 1.029929757118225 -0.7029690742492676 0.04578863829374313 0.9560613632202148 0.2011677622795105 -2.77204704284668 -0.3143361508846283 -1.954058527946472 -6.74785041809082 + -0.1732531785964966 -1.18536114692688 -0.9506043195724487 0.9022118449211121 1.933163046836853 0.5983042120933533 -1.068716764450073 -2.203985452651978 -0.2459413558244705 3.831197261810303 3.010987043380737 -0.7694485187530518 -1.875512003898621 -1.147825360298157 -2.322557926177979 -2.562115430831909 -0.8013483881950378 9.086957931518555 2.099645137786865 -6.155799865722656 + 2.037159442901611 0.7230191230773926 -0.9744407534599304 -2.687884330749512 -2.684824705123901 -0.5445084571838379 -0.02050095982849598 0.4776790142059326 0.1824893802404404 1.669981360435486 2.759214401245117 2.193583726882935 0.552003026008606 1.925677895545959 3.018617391586304 -1.828918099403381 -7.656185150146484 -6.222053050994873 2.739850997924805 4.340044498443604 + -4.383162021636963 -4.860086917877197 -4.678047180175781 -2.133308410644531 1.284398078918457 2.448622465133667 1.392604947090149 1.544065117835999 1.972741365432739 1.942896962165833 -0.3106227219104767 -0.6194444298744202 0.9533984065055847 2.888707876205444 0.3137526512145996 -1.084503173828125 0.558111310005188 0.4764999449253082 1.015757918357849 1.277619242668152 + -2.242287397384644 -1.207882642745972 2.833821058273315 4.377055644989014 -0.6073071956634521 -2.979512691497803 -0.1014730483293533 0.04415048658847809 -4.467023849487305 -0.743904173374176 5.245648384094238 -0.4027847051620483 0.6405357122421265 -1.703345656394958 3.047703504562378 3.318382263183594 -1.565080404281616 -4.426920890808105 2.85019326210022 -1.909968733787537 + 3.252065896987915 2.1204514503479 1.250069499015808 0.6572626829147339 1.570657849311829 2.687922716140747 1.796550273895264 -1.036808729171753 -0.8893373608589172 0.3325667381286621 1.140213012695312 0.6364154815673828 -2.7862708568573 -3.102370262145996 -2.317468166351318 -0.4858391880989075 3.238951683044434 -4.561693668365479 1.083260893821716 -4.586606025695801 + -1.126035213470459 -1.586501002311707 0.2156299203634262 2.529297828674316 1.891400337219238 -1.287881731987 -1.991743326187134 1.121294856071472 2.407986640930176 0.04552340134978294 -2.730382919311523 0.546550452709198 -3.518901348114014 -0.8904414772987366 -0.9814826846122742 3.967867851257324 -1.420720934867859 2.809509992599487 0.3843038380146027 -0.3852741718292236 + 1.990612268447876 0.2317107766866684 0.0957951545715332 2.515290975570679 4.182775497436523 2.778775453567505 -0.9705345630645752 -0.7873442769050598 0.5709816217422485 3.367680788040161 2.237672090530396 -2.498032093048096 -0.9660761952400208 -1.212912559509277 -5.316340923309326 -3.007562637329102 -1.235488653182983 -3.186823129653931 -0.9193791747093201 2.12919807434082 + 2.321329832077026 0.4444210231304169 -1.894779086112976 -1.849559187889099 -0.6142104864120483 1.346371412277222 0.2262534499168396 0.6071723103523254 0.09052518010139465 0.8353667855262756 -0.06246256828308105 0.835460901260376 1.094091415405273 -2.149107933044434 -4.070557117462158 -4.494726657867432 2.818042516708374 -0.1844979673624039 5.084220886230469 -0.3833515644073486 + 2.111615896224976 2.084982633590698 0.8322656750679016 -0.7473138570785522 0.01127674803137779 1.555516004562378 2.145292282104492 1.751661062240601 0.9654734134674072 -0.07680458575487137 -0.1746436059474945 0.8751113414764404 -1.952924609184265 -5.888501644134521 -0.7709777355194092 0.8082262873649597 -3.634444236755371 -3.715582132339478 2.486640214920044 1.333128333091736 + 0.3340907096862793 1.149330735206604 1.063872456550598 -2.485194444656372 -3.695894479751587 -1.686497569084167 -0.1920667886734009 0.3223410248756409 -0.1483930051326752 -0.1887768805027008 0.2029314786195755 1.385816335678101 0.2215270400047302 1.832212805747986 4.154302597045898 1.772417664527893 1.493994355201721 -2.763720273971558 0.7371487617492676 -3.509444713592529 + -3.761635780334473 0.453637421131134 3.294391870498657 2.316661357879639 0.2406443357467651 -0.4456931054592133 -0.8964108824729919 -1.637391686439514 -0.03136210143566132 -0.4426851570606232 -1.439038395881653 -0.2512814402580261 0.3208941519260406 0.272266298532486 -2.527072191238403 0.03374050930142403 2.481537342071533 1.195797443389893 0.7456631660461426 0.07733120769262314 + -2.36484169960022 -0.4539093375205994 1.924231290817261 2.149558544158936 -0.1917875409126282 -1.566577553749084 -0.7834290862083435 -0.7745492458343506 0.9264863729476929 1.55904221534729 -1.207550883293152 -2.934635639190674 -2.611535549163818 -1.275795340538025 -0.8221775889396667 3.985908508300781 0.7585724592208862 -0.1113175451755524 6.457903385162354 -2.663588285446167 + -4.540645599365234 -1.736595392227173 2.519779443740845 5.010525703430176 1.270471453666687 -1.774886250495911 -2.140958070755005 -2.173447370529175 -1.230325818061829 -0.6804889440536499 -1.603806734085083 1.32327139377594 5.124528408050537 1.615581154823303 1.199942231178284 1.739656209945679 0.9085417985916138 -0.4389427006244659 -1.427870035171509 -2.964331150054932 + 2.03402304649353 0.5242045521736145 -0.8046222329139709 -2.129473924636841 -2.195356369018555 -1.559438586235046 -0.5700394511222839 0.6354565024375916 2.001302719116211 1.547194957733154 1.711015701293945 1.543220520019531 1.294059753417969 0.1703027486801147 -0.6959021687507629 -1.722038388252258 0.1735468804836273 2.076246023178101 6.673828601837158 -10.70752811431885 + 0.3280434310436249 -0.8924556970596313 0.7687479853630066 2.465175628662109 1.299799561500549 -1.808864116668701 -1.84071683883667 -0.9749685525894165 -1.403514981269836 -1.463377952575684 0.7168353199958801 1.370628237724304 -1.108215570449829 -1.326982736587524 4.056696891784668 5.365180492401123 -4.341931343078613 4.742630958557129 -5.286323547363281 -0.6663839817047119 + -0.8401033282279968 1.243762016296387 0.541200578212738 -2.107916831970215 -1.707943439483643 2.479121446609497 2.508502960205078 -0.1202973127365112 0.07236047089099884 0.7121232748031616 -0.2494134902954102 -3.42930793762207 -2.631858348846436 0.3674730062484741 7.242950439453125 -0.6433866024017334 -2.203860998153687 -2.450813055038452 1.764704823493958 -0.5472996830940247 + -5.954978942871094 -4.654018402099609 -1.391068339347839 1.59299910068512 2.836308002471924 3.987026691436768 4.465559959411621 3.504318237304688 0.8801449537277222 -0.7890124917030334 -1.490849256515503 -2.140362024307251 -2.905712127685547 -1.345769166946411 -1.38212263584137 1.384067535400391 2.871713161468506 -2.750940322875977 -0.2874114811420441 3.570107936859131 + 0.9381494522094727 4.943887710571289 -6.980007648468018 3.712339162826538 -1.752593159675598 -0.5654335021972656 3.253010511398315 0.05434125661849976 -1.858324527740479 2.403076410293579 -1.087943196296692 -1.182916283607483 0.07188922911882401 1.164808750152588 -0.9529622793197632 0.07986257970333099 -0.7583127617835999 -0.7994028329849243 -0.6452192664146423 -0.03825145587325096 + 5.19520378112793 3.376176595687866 -0.07801643759012222 -2.392257690429688 -1.799867391586304 0.6603149175643921 1.291313290596008 0.9133610725402832 -1.585594296455383 -1.136907458305359 3.796416997909546 2.452640056610107 -1.141846895217896 -4.103722095489502 -3.622637271881104 -1.176715731620789 0.1949243992567062 3.097946882247925 -2.645885467529297 -1.29484748840332 + 2.186923265457153 1.436425566673279 -1.713910102844238 -1.67038893699646 1.285163879394531 0.4028415977954865 -0.325665295124054 2.058190584182739 -0.05910899117588997 2.754994869232178 0.5912014245986938 -0.8453603982925415 -3.793429374694824 1.205444931983948 2.730337858200073 -1.681332111358643 1.007359862327576 -7.277997016906738 1.353625655174255 0.3546784222126007 + -3.036164283752441 -1.298454523086548 -0.1832795888185501 -1.350492477416992 -2.121684789657593 -2.245599508285522 -2.300954341888428 -0.6700448989868164 1.859996199607849 2.081530809402466 1.12386167049408 0.6491095423698425 1.086628556251526 2.472708463668823 6.145779132843018 -3.029524803161621 -0.6260604858398438 2.065441131591797 1.915528059005737 -2.538328170776367 + 1.723827719688416 1.125535488128662 -0.1863810569047928 -1.769676208496094 -4.512877464294434 -3.16309928894043 -1.725188851356506 -0.9713910222053528 -0.3831331133842468 0.4452079236507416 0.8197721838951111 -0.3720356523990631 -2.485151529312134 -2.916470050811768 1.360888838768005 3.382392644882202 1.772484540939331 6.227567195892334 5.313973426818848 -3.686244010925293 + -1.044923067092896 -0.6204045414924622 0.4762036800384521 1.38463294506073 1.896140098571777 0.8442369103431702 -1.000043511390686 -1.628986954689026 -1.293834567070007 0.4870565533638 0.1893805116415024 0.2234033346176147 2.065907001495361 8.522867202758789 -6.470883369445801 -4.023353099822998 1.43738579750061 -1.611199975013733 2.192246913909912 -2.025832891464233 + 0.5273020267486572 -0.6774094104766846 -1.29461681842804 -1.574475884437561 -0.9886358976364136 1.996883153915405 6.080745220184326 5.987292766571045 -0.3999612033367157 -3.713287830352783 -3.684836149215698 -2.649953603744507 -0.6658831238746643 -0.06266254186630249 -0.5540755987167358 -3.395471334457397 -2.232511520385742 4.278748512268066 0.545662522315979 2.477146625518799 + -0.1050721555948257 0.2543626427650452 0.4843499660491943 1.372157454490662 1.879227757453918 1.241358757019043 -0.6687085628509521 -1.956961393356323 -1.595991969108582 -0.487903505563736 -0.01529598701745272 1.100984573364258 3.392524242401123 3.180742502212524 2.200745344161987 -2.317345857620239 -5.851405143737793 -5.270879745483398 -1.319336771965027 4.482447624206543 + 0.0861944854259491 1.627197742462158 3.119501113891602 2.88640284538269 -1.188022017478943 -4.920713424682617 -3.729239463806152 -1.751325368881226 -0.5010479688644409 0.124340333044529 -0.2716037034988403 1.384114503860474 3.488973140716553 5.251720428466797 0.2342787981033325 -0.630257248878479 -2.122978210449219 -4.461305618286133 -0.9762325286865234 2.350007057189941 + -1.578287482261658 -1.151609063148499 -0.7226881384849548 -0.3585452139377594 -1.416881680488586 -2.117095470428467 -1.243236064910889 -1.838885903358459 -2.377279043197632 -2.065260887145996 -1.012246131896973 0.1873133778572083 2.22126579284668 1.408414244651794 4.575538635253906 5.178004741668701 -3.079495906829834 5.061307430267334 3.801852941513062 -3.472188711166382 + 3.111293315887451 3.499862909317017 2.331948041915894 0.4638634324073792 2.347216844558716 3.522525310516357 0.3779596090316772 -4.296150207519531 -4.16926383972168 -1.525550961494446 0.626427948474884 -1.253017067909241 -2.947427988052368 -2.39054274559021 -0.02942688949406147 -1.402943134307861 -3.100247144699097 -4.577243328094482 3.587210655212402 5.823503494262695 + -1.179384589195251 -1.121111392974854 -0.9256934523582458 -1.168110489845276 -1.46504008769989 -0.6227954626083374 0.7835890054702759 1.578969240188599 1.548165440559387 1.72139048576355 0.4458664953708649 0.09952378273010254 0.4080110788345337 0.8219373226165771 0.6378029584884644 0.06796485930681229 2.590851783752441 -0.8319486379623413 -8.538399696350098 5.148406982421875 + -2.809927225112915 -1.541267991065979 -0.05660203844308853 0.2732137143611908 0.7314560413360596 -0.7509997487068176 -1.288371324539185 -0.7030578851699829 0.03508049249649048 -3.465934276580811 -2.587848424911499 -2.710115909576416 -0.9070274233818054 4.234298229217529 2.352331399917603 0.307625412940979 0.8923546075820923 7.137224674224854 -3.019083738327026 3.876649379730225 + -2.398871898651123 -2.430040121078491 -2.182124137878418 1.710171818733215 4.558404445648193 2.585255146026611 -0.1513275951147079 0.2480347156524658 -0.6019328832626343 -2.090327739715576 -3.856148719787598 2.461416721343994 2.211403369903564 0.2258319556713104 2.451232671737671 0.196534737944603 -2.86897087097168 -0.8819790482521057 1.970257043838501 -1.156824707984924 + 2.179726362228394 0.9464124441146851 1.234337568283081 2.913567543029785 4.491357803344727 2.805644273757935 -0.6168544888496399 -1.101556777954102 -2.003764867782593 -3.208517789840698 -0.3169008195400238 1.360198259353638 0.02002580650150776 -3.03547191619873 -3.313289880752563 -0.1966520696878433 -2.457667589187622 -1.742273688316345 1.50789749622345 0.533784806728363 + 2.292646884918213 0.4295259714126587 -1.309694051742554 -0.9024999737739563 -0.7171260714530945 -0.3549686968326569 3.02696704864502 4.821635246276855 3.106724739074707 0.530340850353241 -1.806814789772034 -5.306365489959717 -2.775550603866577 -1.666095733642578 0.8008070588111877 6.27994966506958 -2.28711986541748 -1.751072645187378 -1.300008893013 -1.111285328865051 + 1.828822731971741 1.924084305763245 2.210238456726074 1.150583624839783 -0.1303954869508743 -2.154010534286499 -2.40791916847229 -2.493299245834351 -1.046431660652161 -0.9707775712013245 -3.985835790634155 -3.150720119476318 0.06721735000610352 3.989891290664673 3.017390727996826 -2.933792114257812 -2.54486346244812 6.15129566192627 1.576316595077515 -0.0977918952703476 + -0.1405362188816071 -1.052835464477539 -1.937581658363342 -0.9822971820831299 1.244488835334778 2.789332628250122 -0.2322647124528885 -7.044950008392334 -4.668091297149658 0.3274454176425934 1.807197332382202 2.320538997650146 2.911417961120605 2.004117012023926 4.145725250244141 2.274838447570801 -1.673011183738708 0.4367547035217285 0.3939058780670166 -2.924193143844604 + -4.809693813323975 -3.094882726669312 -1.08229398727417 2.195174932479858 3.95325231552124 3.087880849838257 0.2461965978145599 0.3359392285346985 1.092726826667786 -0.07033021003007889 -2.383874416351318 -3.94788646697998 -3.19091796875 0.9326770305633545 6.279399871826172 -0.9659249186515808 -1.181946754455566 4.384064197540283 0.9626205563545227 -2.742186546325684 + -3.016356706619263 9.801516532897949 -3.363113403320312 -4.45392370223999 2.905460596084595 -6.254342555999756 3.317172288894653 -4.589588165283203 1.738738536834717 -1.200492858886719 0.4400055706501007 0.925441563129425 2.630321264266968 0.1618210673332214 -1.531188249588013 -0.3781534135341644 1.329635500907898 2.630168676376343 -0.6150040626525879 -0.4781222641468048 + 4.55604362487793 2.580373048782349 0.1762706488370895 -2.095387697219849 -2.392717123031616 -1.946521878242493 -2.249571561813354 -1.525928616523743 -1.484807014465332 -2.755709171295166 -2.578634738922119 -0.1556224524974823 1.710514426231384 0.3374819755554199 1.420053124427795 1.359533667564392 -0.3075164556503296 2.475363969802856 2.287737131118774 0.5890458226203918 + -7.977521896362305 -1.658228874206543 2.922909259796143 -2.1527099609375 -3.673208236694336 1.383365392684937 2.214821338653564 1.311644911766052 2.874455213546753 0.1955442279577255 1.306565046310425 2.689847230911255 -2.426669836044312 2.250471115112305 3.505016326904297 -2.891240358352661 1.488453507423401 0.7992474436759949 -2.107151985168457 -0.05561193823814392 + 0.1422393321990967 -0.7619351148605347 -0.9460119605064392 -0.3138290047645569 0.1281789690256119 1.315140843391418 1.855281233787537 -2.782629251480103 -4.401731491088867 -3.140527009963989 2.252847909927368 2.367610692977905 -1.058021664619446 -1.90732729434967 1.152185201644897 10.19630336761475 0.8858375549316406 -3.147515773773193 -1.1206374168396 -0.7154669761657715 + 0.8248384594917297 0.8526181578636169 1.315985918045044 2.502092838287354 4.36121940612793 5.271065711975098 3.694977283477783 0.6551068425178528 -0.6280556917190552 -0.7392285466194153 -2.101599216461182 -3.216418504714966 -3.044646739959717 -1.389599084854126 0.5011292099952698 1.630648016929626 -1.71641731262207 -5.533926963806152 -2.957022666931152 -0.2827623188495636 + 2.055291652679443 1.917427659034729 2.022477388381958 1.330519199371338 0.1396175622940063 -0.145114466547966 0.7287222146987915 0.9049378633499146 -2.827601671218872 -7.110092639923096 -3.722591876983643 4.693623542785645 3.313851833343506 -2.71045708656311 -1.027623891830444 4.011478900909424 -3.833123445510864 -2.273756980895996 1.183056116104126 1.349351406097412 + 0.3466275632381439 -0.811500608921051 -1.162166595458984 -0.97109454870224 1.014793992042542 2.412246465682983 2.660403490066528 1.828718900680542 0.966307520866394 -0.4084873497486115 -2.010743141174316 -1.884526491165161 -2.395977735519409 0.03519318625330925 -0.8708953857421875 0.1145875155925751 2.584129810333252 -1.97539496421814 -0.5613021850585938 1.08907949924469 + -1.263380885124207 -0.7822160124778748 0.5198600292205811 0.1983784884214401 -0.5348799824714661 -0.365075409412384 -0.8693314790725708 -0.8515676856040955 -0.2659909427165985 -1.334527254104614 -7.663465023040771 3.310134410858154 3.016531467437744 0.7068309783935547 -3.084003925323486 2.022332429885864 2.872159481048584 -0.4162555336952209 1.218373537063599 3.566088199615479 + -0.3216516971588135 3.221625804901123 3.870472192764282 0.2122312188148499 -3.657544136047363 0.7412871122360229 5.284444808959961 -2.531900644302368 -5.432384967803955 -0.97563636302948 -0.42440465092659 -0.4731929898262024 -1.393001914024353 -2.044685363769531 0.8389638066291809 2.077716827392578 0.8919699788093567 -0.207108274102211 -0.2953191995620728 0.6181174516677856 + 0.7108275890350342 0.3348914682865143 0.3416587114334106 0.6324843168258667 1.492210984230042 1.477305769920349 1.358806133270264 0.8752771019935608 -0.6455005407333374 -0.4927145540714264 -0.5016289353370667 -1.181386113166809 -1.327820181846619 -1.542193174362183 -0.7287373542785645 -4.591496467590332 -6.263872623443604 -1.872579216957092 5.095321655273438 6.829142093658447 + -2.133308172225952 -1.305227160453796 -0.8609516620635986 -1.00655996799469 -1.819628000259399 -1.892853379249573 -1.955222487449646 -2.512522459030151 -1.395277500152588 -1.057385206222534 -2.125317573547363 -2.107363939285278 0.9142829775810242 5.264134883880615 4.94709587097168 2.039867639541626 0.6937384605407715 0.9543434381484985 1.085071682929993 4.273086547851562 + -0.01218937523663044 -0.2104109972715378 -0.4952553808689117 -0.8956567645072937 -2.061127424240112 -1.503689050674438 -0.5898793339729309 -0.2332734316587448 -1.119745969772339 -0.7025426626205444 -1.698992013931274 -1.141206979751587 -1.269649147987366 0.9420334696769714 5.496718406677246 6.396792411804199 -5.525935173034668 -2.62508225440979 1.461837530136108 5.787248134613037 + -0.5800591111183167 -0.6420941352844238 0.7610563635826111 3.122416973114014 2.004901170730591 -0.9473462104797363 -2.701996088027954 1.207645297050476 -0.6979436874389648 -3.340005159378052 -2.477483987808228 -1.702896356582642 -0.07528796046972275 -1.053730487823486 0.2758727669715881 2.857306241989136 7.10299825668335 -3.54712438583374 3.055685997009277 -2.621918916702271 + -0.3279118239879608 -0.9622610211372375 -2.090043306350708 0.03295630216598511 1.90688681602478 0.6526901721954346 0.5049722790718079 0.8756893873214722 -1.947240948677063 0.9828313589096069 4.045522689819336 0.3910680413246155 1.593252301216125 -6.054596900939941 -2.835060358047485 0.8481953740119934 1.475954532623291 1.433577537536621 -2.576107025146484 2.049623489379883 + 2.475205898284912 2.29104208946228 0.9969691634178162 0.04573535174131393 -0.2792411148548126 0.5950846076011658 -0.3121286332607269 1.327158451080322 2.187009334564209 2.182214498519897 0.443950891494751 0.4745225310325623 -0.6979313492774963 1.297338008880615 0.3273941278457642 -5.592404842376709 -2.777544021606445 4.176718235015869 -4.712465286254883 -4.448632717132568 + 0.7547904253005981 -0.06769806891679764 -0.2861188054084778 -0.2048496603965759 -0.3728801906108856 -0.645748496055603 -2.420403957366943 -3.016635656356812 -3.133468866348267 -2.066494226455688 1.293098926544189 2.185741901397705 1.946314096450806 1.237818837165833 1.592957139015198 0.8078241348266602 -3.820257425308228 -2.739664077758789 10.02688407897949 -1.071196913719177 + 1.386120557785034 1.239166140556335 -0.5838223099708557 -2.502824544906616 -0.9563609957695007 2.376350879669189 4.298339366912842 2.312064170837402 -0.3481047451496124 2.647337436676025 4.624639987945557 -1.711463212966919 -1.910499453544617 -0.8152333498001099 -2.839919567108154 -3.772347450256348 0.1047441586852074 -1.079155683517456 -1.053714990615845 -1.41532027721405 + 0.04745131731033325 2.718222618103027 4.573976993560791 5.058319091796875 3.582614183425903 1.999575853347778 0.5326112508773804 -1.030566453933716 -1.437790751457214 0.0681239515542984 2.065274953842163 0.3729293346405029 -1.023535490036011 -1.70553982257843 -2.583095073699951 -2.701324462890625 -4.407942295074463 -3.705919027328491 -2.753569364547729 0.3301959037780762 + -2.809134483337402 -1.86467719078064 0.3480339348316193 2.714848756790161 3.440782070159912 2.50223970413208 3.02089786529541 4.725719451904297 2.68867826461792 -1.864084601402283 -0.9962918162345886 0.4556294977664948 -1.938915252685547 -1.354613542556763 1.140177369117737 -4.312443256378174 -3.830919981002808 -2.809704065322876 0.9063619375228882 -0.1625916361808777 + 3.127937316894531 3.475513219833374 2.674872875213623 1.849913120269775 -0.2330504208803177 -2.754216432571411 -2.436744928359985 -0.1260258406400681 0.06145073473453522 -0.7245709896087646 -2.101935386657715 -1.849913954734802 0.3675121665000916 1.200463175773621 0.9443950057029724 2.181560277938843 -2.85406494140625 0.4793441593647003 1.246674299240112 -4.529114723205566 + -2.243232727050781 -2.290646553039551 -1.393570184707642 -0.01825732551515102 0.2698008120059967 -3.317106008529663 -6.407065868377686 -1.995304942131042 1.540119767189026 1.784000039100647 0.5734401345252991 0.1995477676391602 0.3754545152187347 -0.3499642014503479 1.46204948425293 6.038210391998291 0.2639777660369873 -1.717935919761658 3.115074872970581 4.111408233642578 + 3.658582210540771 1.056252002716064 -1.640542984008789 -2.278313875198364 -0.6621015667915344 2.55027437210083 4.715645790100098 4.590397357940674 0.4363184869289398 -3.301156759262085 -2.539849519729614 -1.849626064300537 -2.316951274871826 -1.048295736312866 1.133107542991638 2.060016632080078 -0.3099344074726105 -0.8783843517303467 -1.142873764038086 -2.232572555541992 + 0.3676292896270752 0.2759748101234436 0.2392083704471588 1.035270929336548 2.386772394180298 2.178936243057251 1.983893752098083 1.707737565040588 1.321234226226807 1.086136341094971 0.5223771333694458 0.02120557241141796 1.792625069618225 3.298501491546631 3.448411703109741 -3.085736751556396 -5.119638442993164 -5.101778507232666 -4.716545104980469 -3.642220258712769 + 4.884219646453857 1.063145995140076 -3.544343233108521 -5.776185035705566 -5.772930145263672 -4.018037796020508 -1.721833229064941 -1.812821745872498 -1.741513729095459 -0.4040072858333588 1.838671326637268 1.469184637069702 0.7607325911521912 0.9303805828094482 3.222580671310425 2.851775646209717 3.461273670196533 1.40652596950531 1.713598489761353 1.1895831823349 + 0.1613136678934097 -1.264242172241211 -3.324083805084229 -4.26353120803833 -4.725387573242188 -4.818338394165039 -1.641623258590698 2.477029085159302 4.598411560058594 7.415260791778564 5.576790332794189 3.55778694152832 1.601449966430664 1.816928148269653 0.2265026420354843 -1.378551006317139 -2.014397621154785 -2.168810367584229 -0.6702194809913635 -1.162286043167114 + 0.5943188071250916 1.814015984535217 1.802202582359314 0.7965434193611145 0.1747429668903351 1.237513899803162 3.052348375320435 2.679614543914795 -0.4772282242774963 -0.1802288293838501 0.6013532876968384 -0.1617982089519501 -1.953948259353638 -3.968850374221802 -3.181699752807617 -0.01018625777214766 5.768858909606934 1.510913133621216 -5.867515087127686 -4.230972766876221 + 3.697107076644897 0.8225064873695374 -2.455718278884888 -4.100333213806152 -2.223346471786499 -0.5557944178581238 -0.5015264749526978 0.2601654529571533 2.774975061416626 3.813210010528564 2.954968214035034 -0.1322500854730606 -3.903019905090332 -1.906180620193481 1.655888676643372 2.595170736312866 -0.4601938724517822 -1.438645720481873 -1.855635046958923 0.9586510062217712 + 2.995631217956543 -0.002277234336361289 -3.014349699020386 -3.461998224258423 -0.9265079498291016 0.4599019885063171 -0.5558301210403442 -2.901886701583862 -2.364246606826782 -0.1564784497022629 0.5596774220466614 2.428518533706665 1.639878749847412 -2.539297103881836 -3.717720508575439 1.243941903114319 4.205615043640137 5.557441711425781 0.9545348882675171 -0.4045487344264984 + 1.493394255638123 -0.4669122695922852 -2.28948450088501 -2.45932674407959 -2.136809587478638 -0.3295146226882935 -0.2779994606971741 -0.577634871006012 -0.6169610619544983 0.6561386585235596 4.724327087402344 3.07610034942627 -1.658060193061829 -2.031235456466675 -2.215492248535156 -2.107334136962891 6.704012393951416 -1.129895687103271 -0.6797859072685242 2.322467565536499 + -1.297030210494995 -0.5794317722320557 -0.1081402152776718 2.54412579536438 4.775333404541016 1.514504432678223 -1.747814416885376 -1.956537365913391 0.07455040514469147 1.546693801879883 -5.200569152832031 -5.585100173950195 -4.08670711517334 0.9180998802185059 -0.1823501735925674 0.9893454313278198 1.162729144096375 -0.04664810374379158 2.218381881713867 5.04656457901001 + 1.532089948654175 2.323511123657227 2.362767696380615 0.5084763169288635 -1.581148386001587 -0.5399421453475952 0.5696616172790527 2.288986682891846 0.3461943566799164 -3.190247297286987 -3.13453221321106 -2.923089504241943 -4.691374778747559 -2.944085597991943 4.81080436706543 2.626655340194702 2.906660079956055 -0.6256694793701172 -0.8443707823753357 0.1986517906188965 + -3.910779237747192 -2.54503345489502 -1.068150281906128 0.03138452768325806 0.9545773267745972 0.6089075207710266 0.8500150442123413 1.553359389305115 0.7447646260261536 -0.6660216450691223 -1.251451134681702 0.9642975330352783 3.072862148284912 2.39927864074707 -0.3977593183517456 1.682255029678345 -0.9336167573928833 -2.297159433364868 -2.267054557800293 2.475322484970093 + -1.234686613082886 -1.618472337722778 -1.720277547836304 -0.9833378195762634 2.112728357315063 5.194481372833252 4.810319900512695 0.8448953032493591 -2.347816705703735 -0.3326122760772705 1.17035448551178 0.5326123833656311 -1.681164145469666 0.7134349942207336 -3.921677112579346 -2.740969181060791 -1.502994060516357 0.1494543105363846 -1.303657412528992 3.859384536743164 + -0.1974760890007019 -1.204159379005432 0.7870263457298279 1.20784318447113 -0.412180632352829 2.854308605194092 2.036135673522949 -7.896153450012207 1.96798038482666 0.6142703294754028 -1.04549241065979 0.7656822800636292 0.530646800994873 0.7491075992584229 2.27885913848877 -1.031242847442627 -0.5792055726051331 -0.1947787255048752 -0.2996771633625031 -0.9314987063407898 + -0.4684286415576935 -0.8086718320846558 -0.4803415238857269 -0.05642393231391907 -0.07137160003185272 -0.5396735072135925 -0.140896812081337 1.908030867576599 3.449936151504517 0.9632052183151245 -2.89526104927063 -3.726168155670166 -3.505832433700562 -3.098532438278198 -3.468913555145264 -0.6730149388313293 3.466864347457886 0.407550185918808 5.336441040039062 4.401493072509766 + -2.703024387359619 -0.1572434902191162 2.461108684539795 3.664478302001953 3.587172031402588 3.79566216468811 2.713443994522095 -1.633461594581604 -5.015755176544189 -4.550937652587891 -3.106352567672729 -2.323480606079102 -1.362185120582581 -0.8140701055526733 -0.7929184436798096 0.005429294891655445 1.243126511573792 1.093090772628784 2.23856520652771 1.657349467277527 + 0.03467286005616188 0.719140350818634 0.3970751166343689 -1.179105997085571 -3.582636117935181 -2.297462224960327 1.133430480957031 2.930241823196411 4.449448108673096 3.285587787628174 0.9356228709220886 -0.6920117735862732 -0.9163419008255005 -1.47978138923645 -0.1448333114385605 3.028470516204834 -3.840100526809692 -2.107812881469727 2.127859592437744 -2.801463842391968 + 0.1642050743103027 1.550507426261902 2.340445041656494 0.8584553599357605 -3.849125862121582 -6.730381488800049 -5.366515159606934 -2.990593910217285 -1.69432544708252 -0.3469432592391968 1.720078587532043 1.839707493782043 1.809596061706543 2.265991687774658 3.629663944244385 2.290788173675537 3.841415643692017 -0.8610998392105103 -1.324124097824097 0.8522539734840393 + -3.16595196723938 -2.74837589263916 -2.364439487457275 -2.732161045074463 -3.585515260696411 -3.129282236099243 -0.4480576515197754 2.710974216461182 3.149567127227783 0.229665219783783 -1.196038365364075 -0.4921483099460602 0.6224842667579651 0.377840667963028 1.882081866264343 3.848324537277222 2.575013637542725 -0.9573463201522827 -0.5414612293243408 5.964829921722412 + + diff --git a/libcodec2-android/src/codec2/octave/vq b/libcodec2-android/src/codec2/octave/vq new file mode 100644 index 0000000..d5ab591 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/vq @@ -0,0 +1,10247 @@ +# Created by Octave 3.8.1, Sat Apr 23 08:58:51 2016 AEST +# name: vq +# type: matrix +# ndims: 3 + 256 20 2 + 1.085205426985832 + -0.4260300009189197 + 0.833577745236378 + 1.798373960816606 + 0.9935936444607169 + 0.1239833582287509 + 1.575157273987481 + 0.9540245374175702 + 0.3562009016948172 + 1.585644452239723 + 1.506294746166876 + 0.2396183532805597 + 1.367446280732269 + 1.282223720216575 + 1.162423214604796 + 0.5244164469952718 + 1.128835884692779 + 1.058918853547902 + 1.963632826547209 + 0.5811484562442362 + 1.120960795023191 + 1.293247932196338 + 0.8421615329424976 + 1.327956700632984 + 1.150131602897049 + 1.32240186352708 + 1.151653785065956 + 0.4043141675059787 + -0.605854891571997 + 0.5664167394483143 + -0.7537298690327013 + 1.049449161804654 + 0.5218464074650003 + 1.494541250873327 + 0.8342264875867933 + 0.9206540524095941 + 0.06472922157937634 + 0.7198209111919989 + 1.38273463666622 + 1.369195704270166 + 0.7200435399985342 + 0.4728514924142588 + 1.338670575504253 + 0.901349771652351 + 0.7221823774481055 + 1.05531832867729 + 1.122264649509382 + 0.03480813187567571 + 0.8704977954705367 + 0.3118300343783649 + 1.345816954855809 + 0.9902369196859547 + 1.630250359910498 + 0.9962379680208187 + 0.7860178377708859 + 1.405072623711622 + 0.04215045540948043 + 1.100604952014984 + 1.801940417320714 + 1.672902158942722 + 0.9189112275890299 + 1.073606509430072 + 0.7077106102247487 + 1.351518501029729 + 0.8198628050578108 + 1.233747356047938 + 1.867879182176302 + 1.16871953438174 + 0.5619271296279016 + 1.377194835765386 + -0.06310946462056462 + 1.193115849982975 + 0.3302970529535515 + 1.128793026714063 + 0.9728683717267995 + 1.387587258338834 + 1.244021687351402 + 0.6683606936174704 + 1.199485416480435 + 0.5956899153219491 + 0.3013694867793058 + 0.8655341870443748 + 0.2088344957654923 + 1.1447496470614 + 1.084164446118127 + 1.003149200094682 + 1.191560192626183 + 0.07486858283563912 + 0.7661458586347402 + 0.4866127826256495 + -0.1089155940953209 + 1.23959659930226 + 1.054183144345908 + 0.2504451195646863 + 0.8956884207647202 + 1.119249454883628 + 1.116978748635182 + 0.9513183172426499 + 0.1089893432612581 + 0.6032927070356664 + 1.223982221591883 + 1.252308815173021 + 0.5827306571168442 + 1.421065953702404 + 0.162963901404173 + 1.196233511235407 + 1.84581856021695 + 0.9869956389787488 + 0.1646961461119581 + 0.9850201800243675 + 1.429250808608257 + 0.9923260772179757 + 0.9590272370201224 + 0.5825501483605714 + 1.070845967907089 + 1.175383240709347 + 0.6499779705541643 + 0.3320598410515813 + 1.592125364047756 + -0.3139251676378877 + 0.2941683771906135 + 1.678238614064441 + -0.4402253102695204 + 1.311626010101525 + 1.230368944293766 + 1.118969630404878 + 0.4699109361369931 + 0.5566459218624169 + 0.3996167544525743 + 1.063017424039592 + 0.9065738165115017 + 1.274194918558561 + 1.226051793207517 + 1.195335954727556 + 0.5219409661767341 + -0.3567210160579476 + 0.2030643648479605 + 1.385132588724635 + 0.9158832967346469 + 0.9322888042239789 + 1.298607308549179 + 0.6104336622079205 + 1.112243563345926 + 1.520623715949573 + 0.9317177714797874 + 0.7712367063105167 + 1.340499022391671 + 1.304764024159155 + 0.4735061357092801 + 0.9625427325458471 + 1.136775254002388 + 0.4261374335150909 + 0.3337168222499328 + 0.9646263375973135 + 0.1382418388350582 + 1.142845116548473 + 0.8905004958914902 + 0.6352197854178532 + 0.5315973388091748 + 0.2762672232170045 + 0.7323883053221711 + 1.069700009254771 + 0.5773447972180785 + 0.6265539300205094 + 1.208723096926154 + 1.373557618988817 + 1.396848139856655 + 1.22644909332404 + 0.747423382879117 + 0.1923928104579403 + 0.2317151183086048 + 1.195158636439779 + 1.235985355812018 + 0.9547800158843198 + 0.8904454757455824 + 1.143257875740302 + 0.908286803400884 + 0.1941688834036181 + 0.3158243056857314 + 0.6849987277815992 + 0.6445369483172818 + 1.05538088978711 + 0.6030235309635322 + 1.486202280215748 + 1.396804660772058 + 1.150704097309296 + 0.6920213957251961 + 1.582203495857851 + 1.202025792169117 + 1.374999251582953 + 0.2288168689728823 + 0.4329608518584964 + 0.8464391637680514 + 1.135844763204482 + -0.1545900194782768 + 0.9567819848531226 + 1.374372950241175 + 1.333415099532475 + 1.200028477439384 + -1.0208946912861 + 1.334019146241362 + 0.5691948095784971 + 1.250417957983486 + 0.1606069495457166 + 1.351838776281039 + 0.09518343481973855 + 0.3320891202043986 + 1.650452578645842 + 1.569148456097603 + -0.09071912653151751 + 0.3264988095922111 + 0.8375894641356687 + 0.6559955317907418 + 1.149364426104217 + 0.8062962854345533 + 0.9188276660142149 + 0.3028421810952253 + 1.566145006462622 + 0.5822774136794752 + 1.069120717715464 + 1.721561396547623 + 0.856831005984519 + 0.5564137080731699 + 0.7153678821180693 + 0.853234505158737 + 0.603185994785441 + 1.186506259153193 + 1.148948504058279 + 0.6177590034489259 + 0.5760949222380469 + 1.855034211463561 + 0.9121147355845477 + 1.010718439207553 + 1.549735365386854 + 1.069655184913645 + -0.7295454638452006 + 0.8476706126547495 + 1.045201963428327 + 1.876209304797508 + 1.100098125226684 + 0.5449377727755268 + 1.393285124315972 + 0.3558090786406779 + 0.9881025017683388 + 1.093368419306702 + 0.448706447264993 + 0.911083453512061 + 1.15800556561816 + -0.4846742001392422 + 0.5454789417356526 + -0.02763772693410249 + 0.7899662745198055 + 1.086855284902688 + 0.5083938014690804 + 1.784614071563062 + 0.4955810910707088 + 0.6307896832511808 + -0.34177101856323 + 1.407977101362635 + 0.01089753717535649 + 0.8109156423843644 + 0.02157571365906377 + 0.7974501480560753 + 1.161677104060995 + 0.7449135184865795 + 1.335922577995176 + 1.618074115184736 + 0.5036808860872769 + 1.281621536264201 + 1.496512222586918 + 0.5656867946695433 + 0.6635578371625578 + 0.7769267716943143 + 0.7863318705349102 + -1.780978883369023 + -0.0334354168623605 + 0.6636862687063216 + 1.31953372409462 + 0.7679335906405473 + 1.357765462325111 + 1.002678487287578 + 1.312437664849832 + 0.8924926344549168 + 0.4636383638860451 + -0.4070912248841624 + 0.3217800893580187 + -0.05480191063438398 + 0.5704105297752942 + 0.5671989228695588 + 1.265425897803026 + 0.9479718237857699 + 0.8777643997522284 + 0.1431302574000071 + 0.6515151863984949 + 1.173472222357272 + 1.362655064101474 + 0.5580298125429235 + 0.6418980270774041 + 1.03039668193185 + 0.3594537068522266 + -0.04147042419107318 + 1.455218010598134 + 1.227033289641574 + 0.06992318109090488 + 0.3180324711899842 + -0.1495786011244451 + 0.9918971182481525 + 0.8774198930235823 + 1.721649383997356 + 0.9281742007128928 + 1.640992165953183 + 1.269750130001307 + 0.03069266092696008 + 0.3789038439191283 + 0.593613546633564 + 1.111480012530088 + 0.8286979077983071 + 1.18404324241428 + 0.7819017133615419 + 1.184090438751563 + 0.7659782497915133 + 1.0270864532279 + 1.828429658014905 + 0.7901410673132826 + 0.7366673489477884 + 1.154988816261634 + -0.5471812039524085 + 0.934981740816867 + 0.2371332570247094 + 1.0250163450453 + 1.27266423448643 + 1.454333079552459 + 0.5727768922154086 + 0.9771845066546033 + 0.9172197471647986 + 1.075563145199177 + 0.4384292666482437 + 1.239092406693795 + 0.210285117767336 + 0.8733612055335693 + 1.053824328003951 + 1.140078195008836 + 0.7905272592630922 + 0.7828638574028199 + 0.3800700405357779 + 0.04386828899833825 + 0.4448709339379409 + 1.175831673476218 + 0.5101567242836115 + 0.09582478057635176 + 0.5917407640130367 + 1.188218565713065 + 0.9963122522605247 + 0.9296892601798483 + 0.2641176647599591 + 0.03959598133926203 + 0.9551648406598405 + 1.0764477050855 + 0.1378738153867933 + 1.23353768813546 + -0.4889616350026407 + 0.8333605392781226 + 1.077043592755524 + 0.4993903680346781 + -0.1139168084620633 + 0.7914997890435082 + 1.061615511701903 + 0.7068251156389007 + 0.8895360567176563 + 0.9221606578157804 + 0.8720105612358751 + 1.146999585796198 + 0.2380133501973453 + 0.5057686048644131 + 1.479930515236531 + 0.01015620544596672 + 0.2431628777000853 + 1.702530222152529 + -0.6796910843532397 + 1.032776572059292 + 1.301342297641337 + 0.8143336069861939 + 0.7635151712808649 + 0.6362377313700681 + 0.4339276521621836 + 0.4802842872208226 + 0.3001502607473731 + 1.106077237434545 + 1.008263870942845 + 1.365542441935153 + 0.6790855740186382 + -0.0837459219137099 + 0.8732339782103199 + 1.640876156222111 + 0.9177915661396188 + 1.104421107680557 + 0.8853913828852079 + 0.4571773916694294 + 0.9094059065244827 + 1.587617533587789 + 0.1524648649046425 + 0.3692382822458569 + 1.242632785428377 + 1.320666722021657 + 0.6910286390838315 + 0.8196657398334 + 1.094117543461184 + 1.050573062644234 + -0.095843175006164 + 0.8439478073229337 + 0.01388520142811661 + 0.8525313241450097 + 0.7560187534936887 + 0.7163589419339997 + 0.48172955945087 + 0.3191282594036909 + 0.5887849395958622 + 1.073048278856649 + 0.6298813075484302 + 0.8494144146160413 + 1.119108071145198 + 0.5041467048651576 + 0.753953116677396 + 1.415463825758381 + 0.7543289699956602 + 0.1886565605608594 + 0.337384574159233 + 0.997230623170282 + 0.9040472605249359 + 0.4907711273324722 + 0.9061210546528722 + 1.156437217107255 + 0.4695398632675316 + -0.00085808420372521 + 0.1361669439466877 + 0.789467312307312 + 0.5997423085983093 + 0.6901869245440042 + 0.6159422966653133 + 1.199854198628586 + 0.8079953503366223 + 0.468524121850383 + 0.5324545493188838 + 0.8344982497659503 + 1.370319814607772 + 1.44131066853247 + 0.7407415623265214 + 0.05393103628695976 + 1.079745668684748 + 0.5729519871321513 + -0.1851074752298328 + 0.992944720430734 + 0.9115450331591136 + 1.370626836759575 + 0.4751961017836588 + -0.6822887887799577 + 1.355603094738513 + 0.7582980444714997 + 1.287305989858565 + 0.3103196025488943 + 1.421172024185723 + -0.03865357392167217 + 0.7292790541459703 + 1.503226353587898 + 0.5882138571631963 + -0.6093718430332411 + 0.1767394375474176 + 1.276766057212127 + 0.2680255519434074 + 1.12370254387008 + 0.398854116141619 + 1.137373259085501 + -0.3490926629910003 + 1.624321880009409 + 0.5226169241649171 + 0.9044285339583492 + 1.521669667354217 + 0.7912102844944133 + 0.4799761729696941 + 0.007198768056136138 + 1.118146053519841 + 0.6123216140984202 + 1.326185872147739 + 0.9124790581806869 + 0.04998935374131432 + 0.197000146554438 + 0.891152524397205 + 0.5822353455552293 + 0.3891121700178945 + 1.593699066012701 + 0.9369187911763287 + -0.4173953205770336 + 0.02815662236665207 + 1.263074340857436 + -0.4156518344072447 + 0.9024061343598681 + 0.08377464923872469 + 1.738787817003506 + 0.5177228046119318 + 1.132147362693591 + 1.279158205976386 + 0.7202975064986489 + 1.083485371159031 + 1.243643218383548 + -0.252741128821911 + 0.7413435329819636 + 0.4777693296936473 + 0.8402990100436456 + 1.01127993141735 + 0.1533121344864636 + 1.467708403340319 + 0.491607387702562 + 0.2813488729981752 + -0.23309774437551 + 0.8385025128809915 + 0.3270048984513226 + 0.8551646087377082 + 0.0510931504452391 + 0.2765658079493324 + 1.19487687416751 + 0.7330927106990655 + 0.4039208562877936 + 0.7509115681262256 + 0.2929882944647805 + 0.6622594713526353 + 0.8716985336118284 + 0.256385689857605 + 0.5761648585763438 + 0.5135305910284679 + 0.7367357125025655 + 1.893284660668191 + -0.1812633458814429 + 0.5535296184930434 + 0.7110951260347793 + 0.1472364235480178 + 0.821249306261171 + 0.4425183187837054 + 1.099118632151938 + 0.5697552691995635 + 0.9103172272666007 + -0.3505623944219689 + 0.3038726147938779 + 0.2766268157752633 + 0.4633144824118865 + 0.421873437147429 + 1.403668123763734 + 0.885456979305717 + 0.4495998966673143 + 0.1751816133102695 + 0.1420572593236852 + 1.023012905853923 + 0.6073508208973148 + 0.698487833169068 + 0.6488088673841286 + 0.5915845287078585 + -0.05177700993234245 + -0.2162361772648918 + 1.095833420194178 + 1.280856218535019 + 0.1730234086711988 + 0.1005129723860903 + -0.2376144855255936 + 0.4483192343799798 + 1.104287886446522 + 1.05196798440898 + 1.422049575253155 + 1.537352663766892 + 0.7500419081327695 + 0.03991494652899544 + 0.1034867659806852 + 0.4224085207772535 + 0.3864210672817945 + 0.3735747180645465 + 0.7765915223589677 + 0.3315281950696041 + 0.5683741364769683 + 0.2019063044164997 + 1.034269555873555 + 1.233685691705767 + 0.09881214847988599 + 0.2720142723998445 + 0.6198100476916732 + -0.4401429185734267 + 0.2989412982646393 + 0.1531713813109536 + 0.6256149735005488 + 0.2905363579030045 + 1.397726502355438 + 0.2616648818407552 + 0.4490368449109646 + 0.9163917663722386 + 1.089257583951409 + 0.5203423966116525 + 0.8826668740057446 + 0.5417175045725473 + 1.090892214419326 + 0.7454410916412249 + 0.7525217841302803 + 0.1226292710741966 + 1.030237066837245 + 0.2089646577463286 + -0.06084684303132043 + 0.9846655017994531 + 0.5153646593337698 + 0.2205181808919031 + 0.2146525528107585 + 0.4538487033213079 + 0.3112177429774014 + 0.6401051461257636 + 0.2233938908298634 + 0.2471328569943696 + -0.3118132717953503 + 1.011259948671065 + 0.8180977557926039 + 0.01109870254488479 + 0.9295340611245301 + -0.4471511869338353 + 0.2186642118804684 + 0.3410503815535691 + 0.2961312366333129 + -0.143295880948191 + 0.6570058907728265 + 0.3374478790259653 + 0.7164972147498678 + 0.4728493928151949 + 0.6309390863530263 + 0.9192287990009655 + 0.5236244132628847 + -0.01669515537818698 + 0.7359536567719464 + 0.7633933826108308 + 0.1505084066165529 + 0.03028416277848445 + 1.085764033307612 + -0.5202265832878327 + 0.7875814498506806 + 0.3028976076028166 + 0.3041742281687709 + 0.6305983965683244 + 0.3863647299097199 + 0.6091800798116837 + 0.2766290594885096 + -0.04164046469769212 + 1.095085939499609 + 0.7520161873439619 + 0.6899692417334078 + 0.722569043292997 + 0.1692090038495222 + 1.082199154298006 + 1.581671334352642 + 0.689404983899905 + 0.6840779222017123 + 0.8436653279709823 + 0.2662908234016441 + 0.981892759284849 + 1.134640943038094 + -0.2345715436513772 + 0.6178212925489196 + 0.4036932487417162 + 0.7952702641381866 + 0.5639573896008447 + 0.5993645140406432 + 0.7141580513604615 + 1.014012316351468 + -0.08744981314008972 + 1.063873115437658 + 0.1099034874188993 + 0.9950519710874927 + 0.1534889007169 + 0.05631190168031441 + 0.1748263357959901 + 0.165560369417498 + 0.4633308759715956 + 1.188905400442834 + 0.7731024403484956 + 0.8423415798127308 + 0.9718508042477025 + 0.2297467466333339 + -0.01320786123883487 + 0.5873563449277251 + 0.5910935104098086 + 0.3635749528124803 + 0.3343544719801193 + 1.18648459924689 + 0.4451694598362241 + 0.1324333660623244 + 1.084951896740999 + 0.3960438506447841 + 0.1749869325737155 + 0.02208594803615767 + 0.09245561966466478 + 1.122532226331501 + 0.4393539525729408 + 0.4115588600754834 + 0.2702758540323703 + 1.011999371548518 + 0.4948376043376667 + 0.07072665059510284 + 0.3109519530391471 + 0.08833859645953668 + 1.42027802339303 + 0.9341542146532245 + 0.4553619567468035 + -0.1411301391868214 + 1.056999637245755 + 0.2473749868663636 + -0.1674778939937979 + 0.4949894843141263 + 0.3037014956998224 + 1.043405348612228 + -0.02690205634125676 + -0.4006218991582415 + 0.7880313750703598 + 0.8392053130898005 + 0.8938116092151039 + 0.4481197017943047 + 1.044980745627303 + 0.0633474328942642 + 0.3676187329050571 + 0.8260672972308953 + 0.09198051118011895 + -0.4135806176956385 + 0.3550021274498011 + 0.9113941029960042 + 0.1252852590239979 + 0.6630493499094094 + 0.3076774479505871 + 0.2015842344325611 + -0.346834457601448 + 0.8287973613110869 + 0.2967238340679168 + 1.249776900632627 + 0.8378302025923385 + 0.2601815719430856 + 0.2421592762135072 + -0.2792952167765571 + 1.016400334668337 + 0.0916798184791715 + 0.4392572064535232 + 0.4227332600248574 + -0.1001271299425782 + -0.001465314706970619 + 0.2560201957554942 + 0.3296530897657324 + 0.1565518292519268 + 1.261770984934702 + 0.3885726181860199 + -0.1954207667055181 + -0.2052101948457193 + 1.144868702233546 + 1.298048107673848 + 0.7249741552686874 + -0.08176434161962366 + 1.176339530411192 + 0.6407595791199964 + 0.8844590668365837 + 0.6642328057538459 + 0.848163608448612 + 0.6932933316219306 + 0.7959734189807569 + -0.1667762824316838 + 1.286512244363518 + 0.6279406083841168 + 0.8883628309026455 + 0.9414864655393888 + 0.2784164795536057 + 0.7809719251837841 + 0.3649021998185719 + 0.1617608439534715 + -0.1337007970435923 + 0.05357396878826291 + -0.4123475197060653 + 0.6793419169334679 + 0.0531435473951218 + 0.08546646719549002 + 0.8467171554056512 + 0.2006091551971668 + 0.02207625831547735 + -0.2065546538260196 + -0.1500903968350547 + -0.1780567295704319 + 0.1747860566134954 + 0.02125819010347606 + 0.2164826363626913 + 0.1443591827454877 + 0.9803964077859239 + -1.780599153696266 + 0.2055912305732803 + 0.6887745530042322 + -0.01050806541979735 + -0.2426710690444304 + 0.1410483568277712 + -0.2006929997681248 + 0.8833631850914567 + 0.162520794689835 + 0.5527779486354782 + -0.3978712960120283 + 0.3437758311462648 + -0.007205974613345725 + 0.1841357965531394 + 0.09152585081054528 + 1.286508701564548 + 0.3655186020172489 + 0.316716706042257 + -0.3127458919964299 + -0.2094498284541832 + 0.7904908777949718 + -0.01086593359251741 + 0.8864233108894075 + 0.4630987816902309 + 0.3434295920993696 + -0.2792796618186488 + -0.2016090751399555 + 0.4244685847407725 + 1.262064526376716 + -0.08544915908117247 + 0.07717200318988543 + -0.2904135750963075 + 0.1095873134471235 + 0.8385397295204448 + 0.318490257369696 + 1.235507037818786 + 1.259099473202747 + 0.3947007258433206 + -0.008180057120502274 + -0.0361143889651698 + 0.4164480523231656 + -0.02334847607833782 + 0.06517205255138779 + 0.1618198171183014 + -0.2659533632859265 + -0.01562677004495009 + -0.1206358109498548 + 1.002757776307379 + 0.4986699392847478 + -0.1371903112173145 + -0.00344358633489329 + -0.07996003153263954 + -0.3379485137288289 + -0.03806474899354377 + 0.2683029250821991 + 0.4100228415034203 + -0.5108165651107379 + 1.184539416771237 + 0.1978249632565801 + -0.09630232711143173 + 0.5430847989065629 + 0.4074670926797942 + 0.4631484926382279 + 0.1088129743911087 + 0.6248848760480203 + 1.335482560719826 + 0.5155308620325403 + 0.06752770884254551 + -0.1248334783810167 + 0.3963970410539291 + -0.04969096370578793 + -0.1216187484590646 + 0.8689318195651347 + 0.08578933212809549 + 0.08798208804502958 + 0.1239523977696128 + 0.7575757543842648 + -0.5595989732992216 + 0.0622867847444411 + -0.2926542381256442 + 0.1580875827841728 + -0.425556755299803 + 1.289880604134823 + 0.3535913221615343 + -0.09873744696346339 + 0.5035922557411745 + -0.3769750284854071 + -0.2740109377625299 + 0.08237750806349588 + 0.2263722622510267 + -0.2518950618988852 + 0.6067018699476547 + -0.08611878074779186 + 0.9899446712432615 + 0.56646645492197 + 0.1011353098063996 + 0.6347240555798442 + -0.195088801537368 + -0.1654943782773581 + 0.9426980842944602 + 0.5010721927420557 + -0.02065723337935632 + -0.1873567752539188 + 0.4389198390611936 + -0.5307174645776235 + 0.5103471895505917 + -0.5719078828410628 + 0.2149994092751085 + 0.06942256938950482 + -0.09480109603957031 + 0.7856110736017079 + 0.1262729905621497 + -0.1242442642087571 + 0.7375115728397422 + 0.7289571746152353 + -0.06700990897760298 + 0.5820134850756077 + 0.192612145157865 + 0.4557109964282625 + 1.51341697909097 + 0.7253998697830548 + 0.1460115103717501 + 0.5642719127158798 + 0.08625007759573282 + 0.8566197096352928 + 0.8364491248658364 + -0.3513666162487823 + 0.5432105555615571 + -0.4289085218375293 + 0.08484774382517647 + 0.1045245386515451 + 0.1566853648593213 + 0.2079149196894243 + 0.4077901486435228 + 0.006353698137078662 + 1.168997355279365 + 0.1597654442842663 + 1.237495342298039 + -0.1510923183128803 + -0.3458940525314884 + -0.07979655864943636 + -0.01560096750891377 + 0.3022630572884595 + 0.6470884583341112 + 0.5607465349171387 + 0.5874337534730686 + 0.5187410585951379 + 0.09923649517267127 + -0.3903120574808259 + -0.2248925641470509 + 0.5022861897824493 + 0.4374504749438747 + 0.3313371562970333 + 0.7814655560905704 + 0.01544256774635527 + -0.1346611555543178 + 0.9649205799373766 + -0.07399090242506197 + 0.00216705002061529 + 0.1458209566043037 + 0.05173860838852241 + 0.8507228862081294 + 0.3320570498962878 + 0.1655384932336358 + -0.02728734826639537 + 0.691336705496105 + 0.3150476389121989 + -0.03357036370806174 + 0.1898216245312712 + -0.1342540497391477 + 0.7772548085734329 + 0.03422543205667956 + -0.05226192976806608 + -0.1849123430625171 + 0.3275105501377845 + 0.04307605486698986 + -0.131123603083785 + 0.07487897523238661 + 0.1296086875090163 + 0.2501117652645889 + -0.2469752436259501 + -0.3544171354949975 + 0.08169347749847211 + 0.5339569458487908 + -0.09703519674586708 + 0.7488798079926938 + 0.08679629241041764 + -0.07072096977100872 + -0.2971862572087856 + 0.1263912615773313 + -0.05568275635783676 + -0.3822170484681757 + 0.6091905020006767 + 0.1930470707969421 + 0.08467963438116037 + 0.05249402872623965 + 0.2494332525911941 + -0.3320851228066722 + -0.2403789133443307 + 0.003345438942484604 + 0.3176445946245712 + 1.208968052226298 + 0.1203616024566635 + -0.1936304993502403 + 0.2018677424059998 + -0.3857096249615873 + 0.4468458397728436 + -0.2453648163093229 + -0.4256714755667666 + 0.1389267737056973 + -0.01545153071922624 + -0.1413233554768697 + 0.147789392764825 + 0.1156480357397888 + 0.0266055205360948 + 0.6561921889029468 + 0.7010147506182437 + -0.2516907836458909 + 0.05665772882715631 + 0.7190474056023438 + -0.403927684259865 + 0.6010008006167838 + -0.1350583498082975 + 0.4163660158163784 + 0.5782030959359387 + 0.3523975447901436 + -0.347734778161943 + 0.5127491719291808 + -0.3351261666665789 + 0.250711139193513 + 0.04821676249691886 + 0.9861395396684846 + 0.2187220948755276 + 0.3511444826916622 + 0.4410497755064916 + 0.4556123632934783 + 0.1785487993615588 + 0.2588746056146861 + 0.2492336745272817 + -0.1150533905185065 + -0.4450561816044189 + -0.06993355636454991 + 0.09253844510767809 + -0.1000610640420145 + -0.0698313843763893 + 0.937320563935966 + -0.0467781576047443 + -0.1681224604784059 + -0.6348904503155944 + -0.3255593080943681 + -0.4085209807394772 + -0.1973597162255788 + -0.1207550566380952 + 0.01052399285950291 + -0.1848780649545811 + 0.3931454951158443 + 1.708587401263964 + 0.1815742073568385 + 0.3432258558580351 + -0.3235036466031508 + 0.1002580442394274 + -0.1656183374822657 + -0.5108101149367126 + 0.7029226243217359 + -0.1502954479250325 + 0.05155446529395855 + -0.3022605283953436 + 0.5006594548808039 + -0.1540169005448221 + -0.0808246526473457 + -0.06080349728458864 + 1.237949063220778 + 0.457988933458353 + -0.1983797881327917 + -0.1453660564807468 + -0.3645458471204732 + 0.6623087958585292 + -0.5191638331056148 + 0.730676729677982 + 0.454354417807533 + 0.244905553179521 + -0.4545438372434316 + -0.1777129740215161 + -0.09666991424093212 + 0.8612857352244105 + -0.2867503905402772 + 0.01147565153030176 + -0.3327065762902315 + -0.04614795914575914 + 0.1769359982094564 + -0.07447234559883557 + 0.6946784329695896 + 0.8512323210306233 + 0.1273929508353219 + -0.03714283970900223 + -0.1163562140248569 + 0.07905646190407437 + -0.2586250581226313 + 0.3106167704848445 + -0.1873673582250238 + -0.5676658815811136 + -0.3809431196943583 + 0.06176087555426465 + 0.6575358337549088 + -0.006769186530244102 + -0.1203960737346448 + -0.1094544844648559 + 0.1531586841524122 + -0.3214904782015948 + -0.2921953670052535 + 0.326382780315558 + 0.2417348463238819 + -0.5516588351271658 + 1.066164073381822 + 0.14324349480137 + -0.2733021473763657 + 0.206060754119072 + -0.02257933747166856 + 0.2768576353874935 + -0.2579005608332602 + 0.1801217548083397 + 1.084353873711691 + 0.3582093678938069 + -0.2916869832915906 + -0.3537129759545287 + -0.09869695728672255 + -0.1342763217983003 + -0.1435248816361132 + 0.538588215431827 + -0.1648167859173915 + -0.06048176695018438 + 0.01708217866334022 + 0.5826225897182519 + -0.8955426379811293 + -0.2145654505127193 + -0.5702901567777114 + 0.06182340425302407 + -0.4727413815038695 + 0.8668513674103833 + -0.2782503430951879 + -0.1368352825144238 + 0.2666864101935165 + -0.3559992263173706 + -0.5413058149479931 + -0.1907750299241658 + 0.09113609665269655 + -0.3366637410284195 + 0.1974660169012988 + -0.310940985712738 + 0.7591977595514805 + 0.6462592979786056 + -0.1249380157468614 + 0.1349792499000788 + -0.40097352887511 + -0.2663907703264866 + 0.6431491233037089 + 0.5477259895917688 + -0.1387607052964635 + -0.2325564654979926 + -0.01989557145425267 + -0.5983963836613112 + 0.27513653485933 + -0.8452115138518678 + 0.05263917292841345 + -0.1531721592418351 + -0.2878930384944877 + 0.4625364395796986 + 0.02948229076842242 + -0.1863083386357931 + 0.5301844345548528 + 0.4299777175923086 + -0.357440209921069 + 0.4446768916936731 + 0.2061364228902275 + -0.008035266959642419 + 1.00567185628664 + 0.6234505133315437 + -0.1063755889918123 + 0.213775422530152 + 0.1716216539220448 + 0.5969951111180575 + 0.3515302459721952 + -0.4956136864952044 + 0.04742685940225402 + -0.7257486741103216 + -0.2310899485637471 + -0.1499868791407927 + -0.2112420300445047 + -0.00566803311686644 + 0.1889455471317475 + 0.02645800593250528 + 0.4402766676397445 + 0.2016486637184166 + 1.098692300417186 + -0.3895102758514091 + -0.5062551631617818 + -0.09603580353709633 + 0.148616169977114 + 0.100593758335289 + 0.1763413543551331 + 0.3274952942433564 + 0.8240464416796819 + 0.3176467522397424 + -0.03187377697036982 + -0.623889657664299 + -0.4860291478329514 + 0.5281204436024102 + 0.06702912108261062 + 0.2380243775316523 + 0.5437146177333005 + -0.04966703248674136 + -0.1810109555153837 + 0.5573015738350131 + -0.4083930320187065 + -0.04320482925074265 + 0.1645640721387698 + 0.06119533902414419 + 0.7425524922816565 + 0.1299360824582844 + -0.00884558853432627 + -0.1015165767888688 + 0.6068938884710866 + -0.09923176919218805 + -0.09297497927202424 + 0.03586137208023404 + -0.2786570728969295 + 0.6649177733162734 + -0.3535585321565478 + -0.3390062989598818 + -0.2086173775975975 + -0.09920688041443682 + -0.02341421167161965 + -0.1471803450154052 + -0.3161453029449265 + 0.02391801391446054 + -0.04373650519867519 + -0.3397983188119051 + -0.3666108066854937 + -0.2162670349776072 + 0.2132530233673774 + -0.5116313544736404 + 0.5354757508904081 + -0.2877069810675497 + -0.1315602000375319 + -0.5317429707262271 + 0.4238105116584094 + -0.2146127374578656 + -0.2904641996440634 + 0.6841309250228275 + -0.1734036669822675 + 0.005484918036074342 + -0.3094351754069787 + 0.1344267232447092 + -0.6602876216385007 + -0.1758653406754312 + -0.3571123654793031 + 0.1814137431085418 + 0.9650432304737308 + -0.2398079143340615 + -0.1022114709403531 + 0.03833987493886366 + -0.3376619943855572 + 0.1669260746161754 + -0.3955724827984012 + -0.7739629842886803 + -0.0266264690360493 + -0.06371473601428168 + -0.3384160982798863 + -0.05691570711822313 + 0.07058341334237343 + -0.01760983935993179 + 0.2081866155072211 + 0.2984905798906045 + -0.2593394298702862 + 0.01981180292951551 + 0.4216274320393357 + 0.3486590169606297 + -0.07631088265866229 + -0.2152207410893138 + 0.1740728055653103 + 0.351290202185461 + 0.04066787938431084 + -0.7437385732488911 + 0.6547699883537691 + -0.8451054495912956 + 0.2292264008553798 + -0.0910354805579545 + 1.087828336259904 + -0.0444661460746549 + -0.1193586278922212 + 0.00836495372866819 + 0.4149317943238018 + -0.1581694414855725 + 0.08022494337025025 + 0.3714328091574364 + -0.2005283438516713 + -0.542568868853561 + -0.6382264845260477 + 0.2456136959769961 + -0.1647019171280566 + -0.1592900284421765 + 0.9506598247249513 + -0.1207854405852313 + -0.2320709254975472 + -0.6554658409277617 + -0.588265612204362 + -0.5559580747465549 + -0.4149467836913759 + -0.1721699893401752 + -0.09271062009813449 + -0.3065949565790526 + 0.3610463992147586 + -1.78045410986781 + -0.3813604075130993 + 0.2611315918154911 + -0.207841246725757 + 0.3654741734387875 + -0.3644560512267753 + -0.6258362695359259 + -0.0945642246204438 + -0.3941104951709534 + -0.06527453859664278 + -0.3584363686709794 + 0.4315938791984615 + -0.1953073467988072 + -0.2190909953692586 + -0.115021973890395 + 0.5799855764499777 + 0.4499280518089379 + -0.5754623080981474 + 0.531975657300825 + -0.4917340256474008 + 0.5072275379282593 + -0.7153225605620414 + 0.4846294110052394 + 0.5671459824889488 + 0.03992505321172374 + -0.6354848713516034 + -0.1867426422707893 + -0.4303902770886434 + 0.05275823539234827 + -0.4461769419672343 + -0.1229379590513772 + -0.4236142668132394 + 0.01106239915900415 + -0.02154850438347221 + -0.03911587016610428 + 0.9569181342427248 + -0.1128324858156322 + -0.1695409319828666 + -0.05347345920787545 + -0.1795049898251221 + 0.3169830183710285 + -0.3858293237770161 + 0.2037783992187152 + -0.2794130633306701 + -0.6069808533956208 + -0.5405563985527269 + -0.04436903747447773 + -0.05993332426826255 + -0.04974037829521032 + -0.1947166630766153 + -0.2516635983236469 + 0.3346425156244562 + -0.3918183728316629 + -0.4036485461565948 + 0.105743687571403 + -0.07132399658671379 + -0.5961395921676819 + 0.4239921022177991 + 0.05750311417620047 + -0.5471088188113188 + 0.1308358818651182 + -0.3976010903399521 + 0.1146153207182655 + -0.4476997987535604 + 0.01426975284128053 + 1.003570984477288 + 0.1452193440987051 + -0.4920617589968798 + -0.5690524190500713 + -0.2134868635891582 + -0.206170501706324 + -0.04551872261921921 + 0.8430678829372334 + -0.3573183298914445 + -0.05962991053493866 + -0.1001963259200308 + 0.2847204138826752 + -1.067253762044989 + -0.4326873724552786 + -0.7130954442931835 + -0.2365857079833269 + -0.5591639722162693 + 1.026305220224091 + -0.5373489300732801 + -0.1441161885568221 + 0.3954713930918267 + -0.2624003777474603 + -0.6800973467876378 + -0.3813540502920702 + 0.02821904743041741 + -0.3865876884501602 + -0.08912517604637459 + -0.4377488653601013 + 0.7829160956965705 + 0.5113482797258616 + -0.285247669325678 + -0.04442222555388487 + -0.5576208874960122 + -0.3505112609552292 + 0.1994045086736325 + 0.07125286146978603 + -0.2208518845142651 + -0.3202505459560078 + -0.1275974934391475 + -0.5368283548484399 + -0.1480910631784682 + -0.975609212789403 + 0.01524830790131133 + -0.3797981234106209 + -0.5498579688739406 + 0.5070616356581784 + -0.001014036535875534 + -0.2136852815281384 + 0.5351705137754126 + 0.08279981590377991 + -0.4575661231955304 + 0.5586819570966582 + 0.1739043109215139 + -0.1407498560001399 + 0.04272868334967283 + 0.2589469168022305 + -0.138637126227741 + 0.3913490250444416 + 0.06068764895200751 + 0.2879950589451611 + -0.1776425990110019 + -0.5470553498576566 + -0.03406831478065626 + -0.8856640480589015 + -0.3461303344982883 + -0.4023461757591711 + -0.5967203343406117 + -0.04762961620743728 + 0.1634154696283311 + 0.05156478889768506 + 0.374891437163266 + 0.2299621020330013 + 1.01764078070525 + -0.5542537884397342 + -0.7868807188082098 + -0.1262971870208869 + 0.05216108980434844 + -0.0722023109936355 + 0.2268641079788984 + 0.126409343375917 + 0.3224594870190853 + 0.5492181841314215 + -0.1329315953862936 + -0.7962834558222827 + -0.6022961242698679 + 0.4057523933407385 + -0.1588419956916801 + -0.1271202814589718 + 0.580341660931135 + -0.1631469874510582 + -0.2844734846955352 + 0.3520853860280144 + -0.4708253576023849 + -0.1477759737373208 + 0.2000449434284807 + 0.02390515810455116 + 0.8398425001088277 + -0.1637045561289333 + -0.05200944806289531 + -0.14638327980134 + 0.3766178616028983 + -0.5126500931342141 + -0.2669373765010273 + 0.02493733031875291 + -0.2934717180120997 + 0.824756983242672 + -0.5509116165875499 + -0.3916611609328474 + -0.3230987657043287 + -0.2514784111222529 + -0.1763128799012259 + -0.1933217809645003 + -0.37408932417309 + -0.1586106281388953 + 0.133115414169056 + -0.38928854969928 + -0.3592629507256938 + -0.3747091378581611 + 0.004420574358069006 + -0.6735642918324432 + 0.4881412103038595 + -0.06094400134750316 + -0.1633112102906608 + -0.734951957008667 + 0.306838462713064 + -0.2605132937858697 + -0.3404126612988638 + 0.3516440964860457 + -0.4766602216916284 + -0.05426675370681971 + -0.4342439540358475 + 0.0905079479202041 + -0.752640192074215 + -0.2411232653901751 + -0.5183463379948153 + 0.2126155799223657 + 0.948355905720532 + -0.251404012937978 + -0.01864565836884751 + -0.152745167675961 + -0.3721405280381076 + 0.007573265391428359 + -0.6043799101486504 + -0.8691910425416818 + -0.165923299089091 + -0.1757896034347677 + -0.3015416522430929 + -0.1333719889512778 + 0.04745289842002288 + -0.222624961467681 + -0.1631402378169525 + 0.0739691720732934 + -0.1689965018755382 + 0.005539011694333889 + 0.6129557359718374 + -0.4440599719271117 + -0.3418145940577555 + -0.293785222543304 + 0.6078366804029476 + 0.1906107547366269 + 0.137547076884127 + -0.943828539188439 + 0.7542068635643424 + -1.015740738824357 + -0.2226812806909455 + 0.09622791925686651 + 0.6386974647154608 + -0.1553697927018379 + -0.2751948666931138 + -0.1178172406670678 + 0.1506741517475596 + -0.2192374339679856 + 0.0135607250263139 + -0.004752347692954299 + 0.005054603630500858 + -0.4789227097538492 + -0.3271859252645017 + -0.1580288546184008 + -0.08159157907690892 + -0.2166292514303432 + 0.5961321612150892 + 0.3707747287391505 + -0.2595670498573999 + -0.5778442850297116 + -0.6142482455949375 + -0.7786208651206313 + -0.5311628869128089 + -0.2070242437373837 + 0.2423429217005519 + -0.09245807969026332 + 0.02615242705254926 + 1.942214456604149 + 0.07208652198382035 + 0.1504526940669746 + -0.05671761665546045 + -0.06677154272410081 + -0.5413677077846294 + -0.6400015435233035 + -0.7474244708216383 + -0.5783654785183465 + 0.08554097884892409 + -0.3741144811529576 + 0.2892656903887446 + -0.1525561886731615 + -0.3020201241191387 + -0.1405210702236058 + -0.2410430005772214 + -0.124156588480938 + -0.4829678766533977 + 0.7552798920589129 + -0.5025719260091526 + 0.04839544960622997 + -0.7348360949421585 + 0.4634060934266534 + 0.1885051703879014 + -0.3369733760555384 + -0.6455485059546264 + -0.1281979342578744 + -0.4972877106215881 + -0.2173002860186208 + -0.4275808205441188 + -0.08610192215690848 + -0.4741005227561371 + 0.05390825452802709 + 0.02131214188614609 + -0.03694598086610448 + 0.4851014317380515 + -0.3749988873268422 + -0.2153080505518481 + 0.005454571033644709 + -0.06216789174860946 + -0.05298547864825581 + -0.3776317477238814 + -0.2033939365053905 + -0.2729618944782381 + -0.617892763468474 + -0.5639878821042957 + -0.300527489898864 + -0.6502440469005009 + -0.1661282163318294 + -0.1854846483129881 + -0.006825468443105815 + -0.1454399028385248 + -0.3735116269659869 + -0.5043072482481197 + -0.09373620565476463 + -0.3468495424275193 + -0.4970941831883467 + -0.1946564746342996 + -0.0128130086532128 + -0.5956489362061527 + 0.2880632110527631 + -0.339743804629175 + 0.2302477552400708 + -0.5155223897531509 + 0.3230057499453503 + 0.2443372096977281 + 0.1857369124026829 + -0.5216692991239195 + -0.5302076887443022 + -0.3336553073704617 + -0.1643661678253931 + 0.03181972875602657 + 0.5721384201397109 + -0.4072878610131206 + -0.06375422981163069 + -0.0662786403733346 + 0.3134737792595582 + -1.084549023715948 + -0.5955791155606697 + -0.8054529387630414 + -0.1051827144574285 + -0.6791187379527408 + 0.6462816413821661 + -0.5280350810192099 + -0.1648132542036891 + 0.526712757951232 + -0.09628546759534155 + -0.788958909796334 + -0.4110895253730163 + 0.02938766500826371 + -0.3816012990976516 + -0.2855459266116003 + -0.3498999592906448 + 0.7197165137063136 + 0.525578745117918 + -0.4399810046534121 + -0.1176780637657514 + -0.6574389741286525 + -0.4059997477136861 + -0.02724444073919859 + -0.2410073835946322 + -0.2825317206242124 + -0.2876586024759145 + -0.1298022304206394 + -0.2049024513723418 + -0.8038773122221586 + -0.9975979347616613 + -0.03281499261344051 + -0.1940293767501099 + -0.7860682768196964 + 0.4543715285779033 + -0.07209027658748152 + -0.1446449097416507 + -0.1868152497898727 + -0.5881902819879754 + -0.5321495288436316 + 0.6425934220835628 + 0.05838196677647711 + -0.06241466981931418 + -0.2258698606250561 + 0.1637755188302492 + -0.1268876669791284 + 0.06679710616576874 + -0.1745458432677706 + -0.4748157857742784 + -0.3874042266589584 + -0.4659903196160114 + 0.172659502462631 + -0.9203095010657294 + -0.4016074524432053 + -0.2846290115047411 + -0.688387086349787 + 0.09400168903740208 + 0.482718361588352 + 0.1907900932278317 + 0.6582303876744932 + 0.367157062330624 + 0.2690321364338947 + -0.5779947927492164 + -0.7309560554516883 + -0.128657432304649 + -0.09187162706370723 + -0.1882842217449678 + 0.40874401973777 + -0.03130755302113058 + -0.3412385797966293 + 0.234304443341925 + -0.2454741056646836 + -0.8174339501665628 + -0.4409480491605677 + -0.003423790669959458 + 0.03471918611582803 + -0.1751602049742589 + -0.0962699260609152 + -0.3575486518148243 + -0.2997772098928483 + 0.5528427675133079 + -0.4121011613286376 + 0.04238504407094401 + 0.2405879512685 + -0.1012576708106302 + 0.2279585778625073 + -0.2863998298406531 + -0.05219271166546807 + -0.305340545950068 + -0.1902978854849447 + -0.523803810243433 + -0.3461196904921145 + 0.05097977700431616 + -0.3051033284103351 + 0.1209534532016621 + -0.3118662592391754 + -0.2471677289165367 + -0.3125483853830653 + -0.3104062832576036 + -0.4092539943953493 + -0.241651308123654 + -0.379341148361141 + -0.2501425531983235 + -0.2518264578417332 + -0.3966071359905799 + -0.3240074369953281 + -0.5662052753132578 + -0.2093338097701624 + -0.3654291491401669 + 0.618226872646975 + 0.01197486512055113 + -0.3029674445530482 + -0.6831754900066797 + -0.2282876800713723 + -0.1867473527777132 + -0.1807807287112149 + 0.01182529324308042 + -0.5783718429461576 + -0.05890433736285863 + -0.4596359838036555 + 0.06885394425402475 + -0.6632254849218142 + -0.1119292966104332 + -0.3877424738160345 + 0.2503909100523899 + 0.1635842514715485 + -0.3359498325708253 + -0.1415028506256285 + -0.283024730305682 + -0.3154435107845465 + 0.1277001905978781 + -0.6027792371346498 + -0.8613851761163197 + -0.1716816907748511 + -0.02833239581533218 + 0.02422305156303762 + -0.228209148920771 + -0.07642839357270599 + -0.3370520799134479 + -0.5885763840417114 + 0.1216933565689515 + -0.08781274217183209 + 0.0678691506744504 + 0.8424386819484797 + 0.1373254746392774 + -0.01848687134635017 + -0.2380789556814966 + 0.3417536574220434 + 0.4341107023035369 + 0.3841811126078573 + -0.8935118834612313 + 0.01571764673947633 + -1.042059171744363 + -0.8365385347930292 + 0.3401309333656257 + -0.2915878882651581 + 0.1051927749202422 + -0.2901577020926721 + 0.0618613740823458 + 0.1533367066468448 + -0.2252632609392385 + -0.0003889279360040632 + -0.574137609203859 + 0.1966132976521402 + -0.4753077034071311 + -0.3572521744406706 + -0.7600784837680594 + 0.1047355703523071 + -0.2638850591568736 + 0.4206406658170802 + 0.7805677897879814 + -0.3590121499116142 + -0.6126076017729987 + -0.3302466011684718 + -0.8327453653806592 + -0.2046762646182836 + -0.2275626429313998 + 0.2320441691743063 + 0.1401799332325747 + -0.5970465754508761 + -1.780599153696266 + 0.07756987606041904 + -0.3081400852234309 + -0.4248968471027421 + -0.2693592531484564 + -0.5683078211876698 + -0.5945883095431329 + -0.8705911103661095 + -0.5075128735422443 + 0.4214597634040959 + -0.2486203285499218 + 0.1125025700369858 + 0.225057411613186 + -0.1430888696058143 + -0.1429968851306541 + -0.5604979110577604 + -0.5351480260750218 + 0.004678630466235922 + 0.4320858695144522 + -0.5161319662964049 + -0.3630488095515725 + -0.4527927889180065 + 0.2031393281035178 + -0.1607454270140085 + -0.4966602900840969 + -0.6582776894049744 + -0.04318015066022519 + -0.3635098083101613 + -0.471579012273411 + -0.1123145540876857 + 0.05589509485996638 + -0.4836089243064695 + -0.06424757629741631 + 0.3175334511103713 + 0.06938305935798574 + -0.3293119100959557 + -0.6367383000612401 + -0.2040734804354499 + 0.04266999162404084 + -0.04060325871850645 + -0.3757511228832247 + -0.3815103374201938 + 0.05287483712614335 + -0.09858223122449138 + -0.5837487434671705 + -0.4299966143237329 + -0.2148995151424994 + -0.8285804665265564 + -0.4165323504967136 + -0.1857809070418956 + 0.3446712216799147 + -0.4880118815776988 + -0.1894365459451416 + -0.4380478611667041 + -0.0763717173429115 + -0.4952954920935713 + -0.5693328535465947 + -0.4754685200172154 + -0.1007641264668812 + -0.3800576287270971 + 0.284635942408415 + -0.2709478490104187 + 0.2334849156425411 + -0.5605803775049333 + 0.3945194182158658 + -0.3357561736624433 + 0.2253190472079402 + -0.479571204852919 + -0.5695138081165433 + -0.3906093647055345 + -0.1365679338739176 + 0.05764066780159962 + 0.08603301501314856 + -0.2196888087093433 + -0.1234972996007928 + -0.0986833872951893 + 0.3237792379812792 + -0.8613525024878457 + -0.5615509348870983 + -0.7592446921472276 + 0.1699980362800157 + -0.4653118715861744 + -0.2158006747055174 + -0.2500944346872818 + -0.1287854137025125 + 0.128934571740776 + -0.003526488785242154 + -0.8399276712505523 + -0.330399341517634 + -0.01560115462140701 + -0.352187401170877 + -0.2560230975307909 + -0.1958792003549243 + 0.01514683254785584 + 0.1089498658005297 + -0.5585856462889451 + 0.1480583418170258 + -0.6789117454684233 + -0.3929536172126375 + 0.2071827027731075 + -0.3573211252942662 + -0.2629996235435352 + 0.001391320378811444 + -0.1169842512237953 + 0.1198736272528314 + -0.737587748318728 + -0.9270430400979962 + -0.3577244664949029 + 0.1776867345474032 + -0.6732144224554912 + 0.08819573140103359 + -0.06922081909004965 + -0.1024104914371722 + -0.6596795250648703 + -0.8987836492684684 + -0.6217412233252386 + 0.5988427651116034 + 0.1024886468185866 + 0.2814267734258853 + -0.440849302190123 + 0.2833800216072526 + -0.1857008106833104 + -0.4790854306347693 + -0.1410378587265264 + -0.8097925772780029 + -0.4025154663769632 + -0.5350615369579589 + 0.09176713893577661 + -0.7769137755094272 + -0.4436049473708966 + 0.2343623787993738 + -0.5701056042917206 + -0.01064426636932409 + 0.2954508823005327 + 0.2358216485226806 + 0.2181170324298531 + 0.3495023267527235 + -0.2927560280883714 + -0.4162973994033312 + -0.5906676988840915 + -0.1222333382354282 + 0.08664743597606636 + -0.2651065135750781 + 0.08935692622538703 + 0.1381891885489051 + -0.3560236805655786 + -0.3290535692413685 + -0.2352849906006602 + -0.5946768609244922 + -0.06981201403965386 + -0.1493741410658145 + 0.5328681676798306 + -0.1803987177453212 + -0.4656443892726355 + -0.2449153482117758 + -0.2656246175033493 + 0.4126557393360887 + -0.06970205768609888 + 0.1689991496794057 + 0.03521543088269639 + -0.1734343633323954 + -0.2564711009803666 + -0.1574609723597054 + 0.002429636388936149 + -0.3187242454451427 + -0.4410757545849738 + -0.2359101417730298 + -0.3100384590225302 + 0.03471939488113072 + -0.3296317688323425 + -0.5098149823851663 + 0.1115913721329731 + 0.05544012386448133 + -0.2966993802900029 + -0.1209047751876421 + -0.3866592490685754 + -0.1826766095340182 + -0.4171484883108832 + -0.2055397286381209 + -0.7338480244931559 + -0.283080680774467 + -0.2987096942708872 + -0.7017857700949461 + -0.250202168055706 + 0.08381076909182114 + 0.332480902185142 + -0.4351887355398816 + -0.3163994729811774 + -0.4724570727667632 + -0.4884225332146895 + -0.4150732055937091 + 0.07797318041408605 + -0.03151408728005083 + -0.6058452367039552 + -0.07677053496821562 + -0.1392373581209522 + 0.0006927963515423502 + -0.656714391695566 + 0.2670241507563403 + -0.2274640211730099 + 0.1341297488331412 + -0.3458294865065677 + -0.2721745884432445 + -0.1487729025880484 + -0.4218555509077397 + -0.2251641955182626 + 0.458214894576395 + -0.3824456598159615 + -0.6264304719445675 + -0.02818429183189752 + 0.2873914589498447 + -0.2338890229101601 + -0.4467807308459597 + -0.135648058213299 + -0.200936807542687 + -0.7314371257828245 + -0.449482767223645 + -0.1042173793885466 + -0.09641920731737179 + 0.6206538973634722 + -0.4435485103285841 + -0.003479203257694294 + -0.05194601433788879 + -0.1700149283501921 + 0.5020815222136729 + 0.0192417018483452 + -0.6057225242512514 + -0.2621997899297607 + -0.8682309385078543 + -1.043226215785034 + 0.5722085366169893 + -0.4789889334996213 + 0.4311134707884468 + -0.101731891758905 + 0.2487426248174195 + 0.01732784564969043 + -0.3846973076070464 + 0.06265948837716913 + -0.7293727917649786 + 0.3199024793730494 + -0.2831940560390996 + -0.198043463486127 + -0.9064857416764353 + 0.3022793558404221 + -0.3038014268564736 + 0.02765174351442887 + 0.7054582590677552 + -0.4053038671205914 + -0.5922230756584481 + 0.0907887262006568 + -0.7964267323984823 + 0.3489800291146762 + -0.1950297082350069 + -0.1181827315175544 + -0.04118604247545288 + -0.6400703568846832 + 1.590408800181046 + 0.1571280168753901 + -0.4780752919448401 + -0.6494939895635206 + -0.05350493158024193 + -0.329179308140593 + -0.257915126993325 + -0.8452967617689512 + -0.1919436667441916 + 0.08452274833016174 + -0.1506276388393554 + 0.01064368205982586 + 0.378029109083333 + -0.002957610086980191 + -0.1433967042786035 + -0.6681496213324567 + -0.6965558583695808 + 0.07571463971795134 + 0.02660778153957135 + -0.4866147033920999 + -0.4676101780756626 + -0.09402517136169601 + -0.1326465655751625 + -0.2803161262685953 + -0.485866789551306 + -0.6445031845162837 + -0.06321898795230017 + -0.1374206965699841 + -0.4298840398853365 + 0.3437860129195507 + 0.1592555937562658 + -0.2693761470584372 + -0.1425018237827043 + 0.3288224426709815 + 0.0195566626478075 + -0.654391449308484 + -0.6664374747216034 + -0.3510986932119884 + 0.03509224374305035 + -0.147292553679547 + -0.7057787800957498 + -0.4426942656955598 + 0.01710547508556669 + 0.3133941036713175 + -0.06798168256159805 + -0.07650107513124035 + -0.1655639353152909 + -0.9519765174331033 + -0.3779128940251456 + -0.2298855679561967 + 0.2021331965923949 + -0.4780967027784193 + -0.09950319619920876 + -0.4720304411565514 + -0.1112782900500317 + -0.3773567266591552 + -0.5667222274309959 + -0.5896218913169158 + -0.1510458944758229 + -0.04156115793996827 + -0.03681408002395202 + -0.4049332155526779 + -0.02564108070178676 + -0.6269657015590318 + -0.01375084422072832 + -0.7141367265552291 + 0.006402219572510645 + -0.1116813095085798 + -0.6351424844998569 + -0.3215358210264493 + -0.1453723291787659 + 0.05600993134507122 + 0.03509606520352065 + -0.2278840841918018 + -0.09522467680281629 + -0.228585377418122 + 0.08195281332895714 + -0.1842305797350325 + -0.4984737766499143 + -0.4774309346289708 + -0.008274983605111122 + -0.2823742909616017 + -0.5074415497056384 + -0.0601794615320619 + -0.07871156883960556 + -0.00377493693413423 + -0.09820926355559258 + -0.7688777294662257 + -0.1374337098313828 + -0.06543259074014873 + 0.02158491328776586 + 0.1396910922816859 + -0.2860301223920511 + -0.3672166937853523 + -0.2510587610670307 + -0.7060334798031539 + 0.2515814693383551 + -0.6614633043811741 + -0.2949217675439889 + 0.4303324168282956 + -0.3135406019711567 + -0.1993587358280154 + 0.06932898965958072 + 0.02217375067049907 + 0.3213100649691303 + -0.4335256262750316 + -0.4281642139585038 + -0.473963183933536 + 0.2133249927104609 + -0.4004653724469927 + -0.151378714167807 + -0.02945951951758842 + -0.142659286076651 + -0.7121306953654724 + -0.8445663015726538 + -0.2209021606614747 + 0.512200415597961 + 0.13769296313119 + 0.5519345468118018 + -0.5762499488813367 + 0.3555599434085788 + -0.305311940074022 + -0.6351470680682418 + -0.04196554042601083 + -0.8998594993504928 + -0.4535528189901826 + -0.6777603265344038 + -0.2887483673233799 + -0.2831278318562285 + -0.4127703587845231 + 0.4146056042245125 + -0.3064887161727025 + -0.1141271356089437 + -0.07834559455024592 + 0.1277111151789827 + -0.4689873231334128 + 0.2541968472283095 + -0.4181961051962566 + -0.453338303251671 + -0.497127561623368 + -0.1288193178658342 + 0.09946804927215061 + -0.12091369625438 + -0.396217561134134 + 0.3894409469451128 + -0.4567492349068292 + -0.4467548413341039 + -0.2729206784507691 + -0.3992577023411391 + -0.2573050411317117 + -0.2067353367913678 + 0.5553610595412475 + 0.04538662696329159 + -0.3803851835258086 + -0.00259323383371598 + -0.2350047786824387 + -0.1829308873898255 + 0.5419626222596291 + -0.03811420635925365 + -0.185960744657928 + -0.2164678225760939 + -0.4200307266349941 + 0.0002546722747690633 + -0.07481360739756698 + -0.1625080928643031 + -0.4125995043730831 + 0.1502347487002705 + -0.1108577175964447 + 0.03345724174870192 + -0.2647308458052282 + -0.584897453222202 + -0.2650084377370297 + 0.3530167565089282 + -0.1902048302092513 + 0.1541529182310633 + -0.1538034588366328 + -0.08610237613014243 + -0.4160826091813778 + -0.09220729602744239 + -0.8254781753596087 + -0.1683985710011476 + -0.1735331419808584 + -0.7272198112431602 + -0.2717276480951551 + -0.2211317713624017 + 0.05543300345384761 + -0.6889324090807434 + -0.1535171750177869 + -0.1836087058263277 + -0.3632190296038028 + -0.4846933554914004 + 0.2302330350816434 + -0.102657421229265 + -0.5803153691199542 + -0.04487682653247512 + 0.2462586672395643 + -0.01417572099124056 + -0.418053859829126 + 0.2724431659469464 + -0.4492959915335534 + 0.05943425868649164 + -0.5366000624281262 + 0.06590299731818172 + -0.1273034477604761 + -0.3070846767492227 + -0.197093048201637 + 0.7219881824524234 + -0.155631745676243 + -0.04563653298760457 + 0.09480141906801526 + 0.3893130988045581 + -0.4143033631645172 + -0.5812985885040769 + -0.1412033826050553 + -0.1309092407210991 + -0.7567019244018102 + -0.653214702445443 + -0.1231280865165363 + -0.1867860070024334 + 0.4687074101654123 + -0.07346352365363995 + -0.4513008291317256 + 0.1414997796645397 + -0.3930457399982226 + 0.1631704198669574 + -0.4001551301711788 + 0.01042299058816831 + -0.4046580574017991 + -0.2040063920270557 + -1.102677030407465 + 0.3518882150110856 + -0.6382891836101693 + 0.3346394949630933 + 0.3602337672832703 + -0.05594881120170617 + -0.1656607059035895 + -0.5210339696533037 + 0.1185495276223964 + -0.340517133351099 + 0.1902629384864901 + 0.1621509275941509 + -0.71835646970261 + -0.8127341619973234 + 0.4469372558920139 + -0.3512253696851279 + -0.457648781991237 + 0.3527961760445964 + -0.4035043205011868 + -0.1225143340455787 + 0.4983127024531727 + -0.7183171201401464 + 0.1876845817269912 + -0.2093057835543573 + -0.2019724687188628 + -0.1713789561376335 + -0.3952918491817058 + -1.780978883369023 + 0.2054842071086569 + -0.4635030503835605 + -0.2956284372493603 + -0.001774898250552024 + 0.1488280602474648 + 0.1264226549129192 + -0.8286877440999377 + 0.2245515245693221 + -0.3073731151894248 + -0.06460709917175121 + -0.07790419215112504 + 0.007877119553052977 + -0.09092231242175547 + -0.1686780185257491 + -0.765013763816823 + -0.6871377717234923 + -0.006594425772513775 + -0.04806563673352361 + -0.3037413570737171 + -0.4753764674771662 + -0.0379924271185581 + -0.2571618251627662 + -0.2459781214801 + -0.4163424599886744 + -0.4175941733527985 + 0.01312125107172365 + -0.02035363517690484 + -0.02847920176124768 + 0.5206458942302443 + 0.1079314780400711 + 0.0009521103246746602 + -0.1253918872207877 + -0.1693561910156049 + -0.1016467216058956 + -0.8184227805599097 + -0.7299448618632853 + -0.3707293502550358 + 0.001252315368334842 + -0.3326712945128822 + -0.5176513739044207 + -0.4375717545721807 + -0.5399760187668166 + 0.2186112767831467 + 0.5257085521262155 + -0.135808682835768 + 0.0579250191708186 + -0.5360367459179185 + -0.2452683086022597 + -0.2616003825821842 + 0.05008352235535284 + -0.1258846733544287 + -0.1190667804258561 + -0.660169922962523 + -0.1080773298518675 + -0.001930059900269921 + -0.2254690900251465 + -0.5199738071019793 + -0.15368605110091 + 0.382747030021245 + -0.3399709960143961 + -0.05185000718016074 + -0.1809122102596091 + -0.3344644883054311 + -0.1577847536637051 + -0.5534016355907267 + -0.1609953751694373 + 0.4180245105874469 + -0.7122580027821085 + 0.005350136450229161 + -0.2130573081651347 + 0.0547486758571803 + -0.09144499173330059 + -0.5043758693566643 + -0.08137944512578063 + -0.165721680075962 + -0.2147303372558582 + 0.1802639287302827 + -0.2503409246424228 + 0.008387856501332013 + -0.1343322075075337 + -0.1552770470090488 + -0.4236960286618235 + -0.1051338219795501 + -0.07967984352968752 + 0.06485908420979801 + 0.01619844664292754 + -0.6022687374535013 + -0.1064542089149937 + -0.1135033618750938 + 0.3748822295642341 + 0.3055917998483587 + -0.3332077235466904 + -0.5053144394121257 + -0.4181511486753801 + -0.5480040773026975 + -0.1093613562713298 + -0.5535666429787212 + -0.1495924073026777 + 0.3717905496599088 + -0.07874312291855366 + 0.0197351116593076 + -0.1857099985425998 + -0.04408574975722964 + 0.6265704341874341 + 0.0411248751029252 + 0.2177664529664201 + -0.463326466177071 + -0.1155788520119949 + 0.07627480780988947 + -0.1154392196611928 + -0.05354405147501572 + -0.09449540109562496 + -0.5771323721290285 + -0.5184918414810038 + 0.302546362799287 + 0.0418575769084128 + 0.134369023143456 + 0.272872593738047 + -0.451072112669163 + 0.2222601662559372 + -0.3671819292660506 + -0.6668562782762132 + 0.1268313211719089 + -0.8644601868357874 + -0.2605807864844837 + -0.6512543457612744 + -0.2815701835236822 + 0.03980362031234853 + -0.3384463768631267 + 0.1358336920104301 + 0.1764416948239552 + 0.07118155278932202 + -0.2955362599328757 + -0.0620030852375667 + -0.5535991388553626 + 0.2081219248241339 + -0.1849028896935379 + -0.730857270559144 + -0.06876572091017155 + -0.130106666752676 + 0.261837008192287 + -0.1167673382119821 + -0.3435751842616931 + 0.2185022598636893 + -0.2986719176606851 + -0.3476349706604125 + -0.3383069171226881 + -0.4943657876494036 + -0.3014395244202314 + -0.1512277644792329 + 0.2497477773393427 + 0.3684965157080135 + -0.03975557072904728 + 0.1156069179951857 + -0.07180650093159041 + -0.2438028687998155 + 0.4418684913637954 + -0.1536875051000218 + -0.05110101265443797 + 0.04262054514314754 + -0.5450020522064242 + 0.06382102010754576 + -0.2633338422159232 + 0.03428998973366581 + -0.3396396278171734 + 0.2218785662937951 + -0.1406035549058024 + 0.009704001788654788 + -0.2790755487712052 + -0.3025930785630245 + -0.5992507698826174 + 0.3179612276310023 + 0.003149844452743701 + -0.01660386451206627 + -0.03989765752844681 + -0.1471733429454518 + -0.3991178639965604 + -0.2310807981650578 + -0.6165195989948826 + -0.2443863922497242 + 0.1446641504619525 + -0.7581687113193498 + -0.1630934639146746 + -0.1864094203189325 + 0.007390622514341341 + -0.4222623583706733 + 0.06589276325146391 + 0.3931121254033183 + -0.05997993820942499 + -0.6096833499924588 + 0.2736455897344224 + -0.1761486303371735 + -0.5060751065354971 + -0.02909222922175481 + -0.01524255743558093 + -0.1839560200807636 + 0.04091625043667953 + 0.1315026676092598 + -0.4866903458965861 + 0.1711047202539764 + -0.4422489010456397 + 0.001511426167088095 + -0.04639869365802123 + -0.07198601017677353 + 0.01831033130226101 + 0.5726396179628991 + 0.1963252025856242 + 0.09560035596270883 + -0.07479006174482507 + 0.2383236076594711 + -0.6525137457339615 + -0.5733500639054371 + -0.09277279640447748 + 0.2135053197475681 + -0.5839706148374094 + -0.5772042349178457 + -0.02587418833276165 + -0.1758147521967876 + -0.02039002839069973 + -0.4584890671511103 + -0.3727776208085981 + 0.2161430387505507 + -0.33382871875445 + -0.1018758948934526 + -0.5155807499245789 + 0.2230774657853115 + -0.3842771617731814 + 0.2765709669076771 + -1.11437088776058 + 0.1370290419361331 + -0.6907121556971 + -0.04739560124816106 + 0.4945854676725926 + -0.2518511238092139 + -0.2090823881211713 + -0.5826711045003965 + 0.04548258606789699 + -0.1853294453073051 + 0.1542278754398604 + 0.4641990825116425 + -0.3355069922025304 + -0.3325706576622386 + 0.240999893509847 + -0.3739549587971491 + -0.7292391624211603 + -0.1778788290675548 + -0.32985631835857 + 0.1773685507675661 + 0.3143987682501025 + -0.4241186269008492 + -0.1196109874348598 + -0.2703331487635954 + 0.0646029191795594 + -0.09293151587895067 + 0.05867323189292146 + 1.572152959310365 + 0.0270851943823703 + -0.3201605719329901 + 0.03511290922165978 + 0.1842220640356778 + 0.4459288682235256 + 0.2279510038651417 + -0.6208225668217512 + 0.2033200440448049 + -0.4768920295949141 + 0.05635444804434454 + -0.1792207056397316 + -0.05082725323384989 + -0.116466160497955 + -0.1646789310506677 + -0.8546516345710713 + -0.6863333032159274 + 0.1251280715920445 + -0.1954916256772424 + -0.06330408849680744 + -0.3614178746908751 + 0.1110444058475385 + -0.4441635474921972 + 0.0421501215297819 + -0.3563461749842403 + -0.2847085013375505 + -0.01885466908589918 + -0.08714902937426544 + 0.1108528108141068 + 0.1868153364508421 + -0.0782948091852478 + -0.09368056609716874 + -0.06796896435348695 + -0.497680262528085 + -0.1496864352033443 + -0.7899711281536115 + -0.6025616651729295 + -0.3411802195266797 + -0.04670556170928879 + -0.3428166896726749 + -0.2845726199256554 + -0.4125870758047719 + -0.3383725144380084 + 0.04576291584876581 + 0.4867574895058831 + -0.1734111351515317 + 0.4046916923000636 + -0.0692196393810556 + -0.364205893770604 + -0.2551900009272337 + 0.05737247351539661 + 0.08039984007240546 + -0.11299788125515 + -0.4721938914488412 + 0.04841770947422069 + 0.2143597286200945 + 0.1183004551578102 + -0.363460031717068 + -0.1907615130706292 + 0.4028808348822922 + -0.3171712423084697 + 0.1974988994089932 + -0.242326408426382 + 0.06990657685043837 + 0.03283291026075733 + -0.4808273426038372 + -0.353546190225623 + 0.3814243035574654 + -0.6407503423680718 + 0.3096372846159585 + -0.2214550425447073 + -0.02287760645039265 + -0.1304712309055208 + -0.5079350855894919 + -0.09170209542267782 + -0.2564185760653225 + -0.4122184566482636 + 0.05779244757900356 + 0.1355589819676707 + 0.3286801707679867 + -0.2242603117821102 + 0.0335455361107912 + -0.5371454248562983 + 0.1317342409872321 + -0.08379994681574615 + -0.1375314996449098 + 0.1556617156194927 + -0.2608544997717424 + -0.2488335162112193 + -0.1214693826932154 + 0.1554129338795171 + -0.005680118626726197 + -0.1059142855277008 + -0.6238782668523944 + -0.5963151157794544 + -0.2148362270843856 + -0.3258183472222976 + -0.248606488482252 + -0.09849441598768362 + 0.1805113569718476 + -0.04418818805519761 + 0.3737371718874873 + -0.1530315749338608 + -0.2235354786574718 + 0.7630667232166822 + 0.2642022185562009 + 0.3208451718589377 + -0.4680450945273534 + -0.171291712100384 + 0.1519325249856672 + 0.0864344929490222 + -0.1192515192935129 + -0.05985311789830235 + -0.2929187491434199 + -0.3373089593719307 + 0.2738443816818401 + -0.4459312647860724 + 0.1019232205332759 + 0.0505340192312996 + -0.2868115385288292 + -0.1693873008287598 + -0.2983439658193252 + -0.5193256213739745 + 0.2007825339743431 + -0.677732951503412 + -0.09657284972081065 + -0.4774623379542781 + -0.01895688026804819 + 0.1338266916968649 + -0.1412708513186414 + 0.138190548765444 + 0.07912287981106435 + 0.1137545407236712 + -0.2905926167465767 + -0.1433534307405324 + -0.5789718450772364 + 0.06703335477883755 + -0.2909611390633863 + -0.4768384780853501 + 0.3468340324384735 + -0.1242840480300472 + 0.1628599665526195 + -0.2098058380705283 + -0.2650524620418804 + -0.04530575041494886 + 0.0742239161679762 + -0.2315164120681402 + -0.3974653743649324 + -0.3949615742671702 + 0.1431491502245915 + -0.06100188175408954 + 0.254619509251988 + 0.2385636964554492 + -0.0377979983973895 + -0.08510487825699684 + 0.07898195343477653 + -0.3157876622138711 + 0.3101460860926867 + -0.2513762463139826 + 0.02130796450574071 + 0.2262271679854062 + -0.5401435669147285 + -0.3928044928834363 + -0.2627404691172375 + 0.1127320496462008 + -0.3874823969145912 + 0.01510115021532389 + -0.2242313304610447 + -0.03784015856384065 + -0.231376614555029 + -0.08660512547898351 + -0.2163715339732224 + 0.2014987297473436 + 0.00183042504023886 + -0.3018592518870045 + -0.1481235804195503 + -0.1354999653037391 + -0.09485588183453179 + -0.3306772971591763 + -0.1183932030843847 + -0.2962642578543512 + 0.3651718826337273 + -0.3648497928756702 + -0.02235452262494591 + 0.281071647808349 + 0.1376248104624031 + 0.04071968038686895 + -0.0623331878745489 + 0.5235593914018143 + 0.1847146953260254 + -0.5898320982543569 + 0.07259131492753236 + -0.07542503649687438 + -0.3877343858715561 + -0.07180098022627282 + -0.2175881717960334 + -0.261557164031689 + 0.2491196222479528 + 0.04101563216656046 + -0.2394441282095503 + 0.2637079765764338 + -0.491673551927533 + -0.3199563992575 + 0.2237069053073689 + -0.1916615770179255 + 0.03207752718399837 + 0.1150203537322834 + 0.2999929701318548 + 0.1594169188046992 + -0.2518452325433932 + 0.1315469323585451 + -0.5568227828411216 + -0.4552940231107597 + -0.1225571536787343 + 0.3087794611803037 + -0.4073169324749234 + -0.4018687778918577 + 0.1001182006973928 + -0.1233661035052116 + -0.5311694950430884 + -0.06244269889225383 + -0.04191660189537352 + 0.1652929995941863 + -0.2685189742071611 + -0.2022708955035912 + -0.4994199663615731 + 0.2949704313847821 + -0.0413959778685745 + 0.1839277872468872 + -0.8877791188039712 + 0.124646207202205 + -0.5174491059310083 + -0.1741877905242727 + 0.2182184736194161 + -0.1985385581553671 + -0.1495612649704648 + -0.5022711929891177 + -0.03208153325427857 + -0.3229429888774093 + 0.1232233055373354 + 0.2090266598930229 + -0.565694282351267 + 0.004313344182687162 + -0.0508010608429796 + -0.3660963789208949 + -0.7893390105930082 + -0.6141821686914091 + -0.1735863843034059 + 0.153064126764466 + 0.2688441272796904 + 0.01891955490740877 + -0.03993908158052884 + -0.2345909675961855 + 0.0488287063273122 + -0.1771437205453895 + 0.07067450063965428 + -1.781448255057624 + 0.08491388308960003 + -0.03810905788179736 + -0.3085800186030186 + 0.1155403599852064 + 0.3749475045315057 + 0.1361256280495673 + -0.381924303711864 + -0.0602324042427213 + -0.4588384239011747 + 0.2167459982336198 + -0.3119731657244059 + 0.09338490336141297 + -0.00013580052025487 + -0.1582682259768826 + -0.8192320269381829 + -0.5635562527794323 + -0.1163258468853171 + -0.1849412934159787 + 0.2078265387141373 + -0.1693054398482254 + -0.1339753540407564 + -0.5926870633174385 + -0.2068659662318922 + -0.4028693742414952 + -0.1592433573791794 + -0.03298466862338994 + -0.2664711180239981 + -0.6223670831098527 + 0.2539463342474416 + -0.2112463899073392 + -0.06707021797068523 + -0.2540933845523378 + -0.5723527575894582 + -0.2663211757105155 + -0.559775271923221 + -0.1669748156094223 + -0.3391612146520647 + -0.007304739959241142 + -0.3714503942196212 + 0.1978289085127442 + -0.2994606800321042 + 0.07648124144600604 + 0.1120042552350718 + 0.2106307826577676 + 0.001842787583032354 + 0.3002279075694899 + -0.1444902776971541 + -0.5616957465792392 + -0.1711839811946715 + -0.1908787083942699 + -0.01413513841741283 + 0.01441352600904396 + -0.2493234142352183 + 0.07187192025363083 + 0.08250887000827953 + 0.4622517571621938 + -0.3484961403360574 + -0.2500344340875087 + 0.327055980519856 + 0.01861793533271652 + 0.1246782192478675 + -0.3286139189108901 + 0.3619715668980983 + 0.2289805073568801 + -0.7468191925568648 + -0.5389303871852547 + 0.14594117923781 + -0.4542946657875223 + 0.2432635170910493 + -0.2263087899597126 + -0.04143624459168473 + -0.2929049223777545 + -0.4249351946087646 + -0.1945125584822932 + -0.2787407752932843 + -0.3020247629591156 + 0.2550596994518242 + 0.1787026603248639 + 0.07429499669250805 + -0.1636903109796274 + 0.2187793428277464 + -0.6477365560999034 + 0.121753783403594 + -0.1053863531423386 + -0.439961013599136 + 0.07622327403616731 + -0.08556302169099331 + -0.0008746784338009017 + -0.1351544972756517 + 0.1271525507074459 + -0.2176602092416781 + -0.01554345296761483 + -0.5222439855642136 + -0.7316171375860131 + 0.2446548485233575 + -0.1467291582369216 + 0.1175902634457195 + -0.1681546882107498 + -0.04521157099650252 + -0.2043091023341305 + 0.4424845033373849 + -0.02996202084625425 + -0.4227659748562899 + 0.5910684140400475 + 0.1593138334345164 + 0.3361204425311022 + -0.1920805023816655 + 0.09822228634348028 + 0.09002368509893081 + -0.1322447170189405 + -0.2313654657212282 + -0.1137904372765817 + -0.1345582192042777 + -0.5916468699011971 + -0.1974399310317567 + -0.7310498207769246 + 0.0904490285916611 + 0.2617952826851531 + -0.6658800334079958 + -0.2136383312489579 + -0.2474050201719908 + -0.37313985201887 + -0.09261816710249975 + -0.2226843760738902 + -0.3276008787398033 + -0.2650874794759996 + 0.1107475747306679 + 0.2261150250691746 + 0.01410981678350486 + 0.08656220760912722 + -0.223291144823372 + -0.04653183679472674 + -0.0123189017563664 + -0.1241550945158221 + -0.5780305491792225 + -0.2051679551218057 + -0.6380321535686744 + -0.2217327200028662 + 0.1880702651678863 + -0.1374455798500671 + 0.07477579189264887 + -0.230654246917585 + -0.1460761228157335 + -0.351748140673035 + -0.009962655782386361 + -0.4829335787134655 + -0.4047193455733119 + -0.08748337483917695 + -0.03324537104327262 + -0.2107543464561359 + 0.04541561517782763 + -0.1206787589924748 + -0.3716068785062409 + -0.3374418396412748 + 0.1726760188136365 + -0.3308066332358634 + 0.255170315489397 + -0.2759676806557681 + -0.04273612238743313 + 0.1552226463334661 + -0.5278672766348809 + -0.5171652498932222 + -0.259448482300692 + 0.07732678154058592 + -0.5486383408282367 + 0.314303831825362 + -0.2208393588601793 + -0.04410650703985628 + -0.2222334863746301 + -0.4153149275231512 + 0.2285908136142874 + 0.2151545018434103 + 0.08146538307396635 + -0.1900672020132375 + -0.3466077795322671 + 0.03569483143576228 + 0.1384705152199227 + -0.3207737890095315 + -0.1944937775285996 + -0.2662333462037326 + 0.4404826946611061 + 0.08773299284947769 + -0.09194271179202586 + 0.1281029509325907 + -0.01978898548302627 + -0.00775196992546068 + -0.1741854317807355 + 0.3259848025224046 + 0.04401697403542181 + -0.4975007188752522 + 0.1436066122471584 + -0.2219367402569576 + -0.1000778091158833 + -0.1266845224851695 + -0.09121927167550367 + -0.3601844598365169 + 0.2486687523844783 + -0.03584302241113982 + -0.09127580032417015 + -0.02447346217466925 + -0.4224191129196516 + -0.4131361763939417 + 0.203067049236413 + -0.3012140924559434 + -0.01364892432756534 + -0.4814532324701255 + 0.3170718278420939 + 0.1587410603006361 + -0.216424363157273 + -0.06895458529347577 + -0.4016696264415105 + -0.3622807926391333 + -0.162427061007282 + 0.1434223168812234 + -0.3712616885015544 + -0.5024324778723644 + 0.2529794125252718 + -0.1779998772475726 + -0.7279837946956683 + -0.4446830120824465 + -0.1750441732422112 + 0.1146496243364256 + -0.4959298585253443 + -0.163924280908683 + -0.3573746569560586 + 0.3814031678509575 + 0.05951062074438399 + 0.2997662033054271 + -0.3855924523817795 + 0.1029731263097956 + -0.1208204919484131 + 0.08569036493936666 + -0.1509810931506685 + -0.2073591495323373 + -0.2151644795594506 + -0.2827638203076263 + -0.09764470321143262 + -0.6350097962454752 + 0.1677218152331212 + 0.03991765426500021 + -0.3740673754317914 + -0.3755793000001317 + -0.1420218531216212 + -0.3745804350769871 + -0.9402288793052358 + -0.7371490179018136 + -0.199320776234589 + -0.1086466664003375 + 0.2234300207129388 + 0.4520090418359478 + -0.1103738931205903 + -0.2241078313420341 + -0.3088597516010719 + -0.5642512091492026 + -0.4143577903162539 + 1.585769903461108 + -0.0928980419106312 + -0.1639243683643334 + -0.6609187513382873 + -0.03370139779658248 + 0.3998306293641981 + 0.008523386283980328 + -0.3397761104272032 + 0.1596395829533195 + -0.2321779744920058 + 0.3470263743593928 + -0.2987069271702892 + 0.3727308282033386 + -0.1411837021579574 + -0.1765649647109546 + -0.4840684675721143 + -0.5546491976224101 + -0.519672020666552 + -0.07326886758992969 + 0.2264171857621609 + -0.3077200915977026 + -0.5490934046857481 + -0.6020907699945578 + -0.6160437088271168 + -0.2187029258141679 + 0.1405764638862422 + -0.093012829466791 + -0.2969089595390227 + -0.7501222899942074 + 0.2866256906799098 + -0.2387046251713708 + 0.04525727454160814 + -0.2667324397508992 + -0.5717447658970759 + -0.1781952509044608 + -0.5443454325827244 + -0.3391144945543338 + -0.3844961989382008 + 0.01499988326006704 + -0.3258333496747647 + -0.2592405706859131 + -0.3504717802952628 + -0.02668263132768721 + -0.336942418143115 + -0.008899326508741834 + -0.4064724339785245 + -0.12176728147033 + -0.6585179601696123 + -0.4894753878178747 + -0.2442924820600981 + -0.3920391396714519 + -0.5221616690504185 + 0.08143575493923301 + -0.4243781097009219 + -0.0783176392163677 + -0.2195665841694698 + 0.1850063913193356 + -0.7196111874495446 + -0.3179532141429242 + -0.01565370585505655 + 0.005846773803302997 + 0.01335231182307772 + -0.2718325851744277 + 0.3462680224808091 + -0.1959387716606182 + -0.5438993329772722 + -0.4787343953438634 + -0.06678603417674459 + -0.499921571639358 + 0.09815744930648497 + -0.2129229731611965 + -0.07730212367128855 + -0.5485743205851044 + -0.5452923246924926 + -0.3020803622176061 + -0.1591960143215016 + -0.04956358398817994 + -0.0290568894388576 + -0.008253192309295925 + -0.1955745058619006 + -0.04618583863778489 + 0.1091612752012542 + -0.4619001610364459 + -0.3692202542164156 + -0.09988786470240667 + -0.4692197245166221 + 0.1914676051407242 + 0.2121749482849875 + -0.1149307010526159 + -0.1904478657477881 + 0.2462014858522821 + 0.001754223755763481 + -0.08480309741901883 + -0.2127612683438606 + -0.5118184167687053 + 0.382347513962762 + 0.03808150938029006 + 0.2518807181589469 + 0.02154858415273547 + -0.3893449322968922 + -0.2167216909410216 + 0.3860177129811224 + -0.08499909511413424 + -0.3887432617560126 + 0.3708619457636211 + -0.3120436016510948 + -0.05299917601938802 + -0.1099162929881584 + 0.3817873712974926 + 0.341076861738471 + -0.5291531398780812 + -0.3218978604160307 + -0.1569871545851364 + -0.3389052762012951 + -0.8543496902114009 + -0.4430601170393201 + -0.822917007835629 + 0.1578091180914681 + 0.02356555643550554 + -0.7311591075724099 + -0.02046745063084701 + -0.2556341900660989 + -0.4334977374873441 + -0.2172836075673819 + -0.1004610402281179 + -0.5995114010789439 + -0.1580215576663957 + -0.2700160753907077 + -0.1791718769204184 + 0.10433318172727 + -0.2628705816799846 + -0.1686570115607318 + -0.3068685281060631 + -0.09814630618918101 + -0.1497385025023432 + -0.4074351212448353 + -0.3334924678781389 + -0.6538958399570722 + -0.300561782996361 + 0.1822896782480434 + -0.1139468491097467 + 0.03539343147907053 + -0.1550662450716123 + -0.5397131238570544 + -0.372181867218021 + -0.4674203237608217 + -0.6545563178051702 + -0.4229395670115984 + -0.04113516245428499 + -0.5451085318148088 + -0.511592875468121 + -0.2840266659950414 + 0.0106744015890542 + -0.4554353508680534 + -0.3388074378591223 + 0.06221199312929226 + -0.2740359519549297 + -0.3067440885546456 + -0.2550129301256622 + -0.2390063345835033 + -0.0006035686096761179 + -0.605677444649717 + -0.119793771027347 + -0.2750243242962616 + -0.04642902449794497 + -0.6308490936483154 + -0.01242161786196535 + -0.07132997202448933 + -0.0887428962759793 + -0.2325238462713042 + -0.9047463541424298 + 0.01658182378927922 + -0.00757330869321584 + 0.1593916913105907 + -0.30865992061819 + -0.3331606028431572 + 0.1263895129933455 + 0.01961474297915897 + -0.3470257833748221 + -0.5424716805812152 + -0.2009709154582145 + 0.45758918922306 + 0.2787925860775491 + -0.2414443397955571 + -0.315930801341089 + -0.2764128272374969 + -0.3745237272689381 + -0.126159677981048 + 0.4191869601185408 + -0.6784266104832994 + -0.5163194826192089 + 0.05122030675741623 + -0.3439245695363883 + 0.1948868616089859 + -0.195621240269816 + -0.2138035569149919 + -0.347389993572753 + 0.339360043845781 + 0.01605039416612359 + -0.3309417321826002 + -0.3241029873528691 + -0.2576945702651006 + -0.3775080322103062 + 0.1443789467073577 + -0.2115000012605343 + -0.0632786938770744 + -0.8588933711020734 + 0.217274860245064 + -0.3226043112026534 + 0.01771453443535823 + -0.2761564016940267 + -0.3606438760377993 + -0.4118506441057463 + -0.2423832117304276 + -0.0887804850759015 + -0.5729156705116153 + -0.6925410607046041 + 0.5280927917298445 + -0.2823300145568775 + -0.9402331275720441 + -0.1997246501346932 + -0.6724763279724075 + 0.06182904160979734 + -0.708049809297232 + -0.259721293167383 + -0.3865451274527018 + -0.1284111529569806 + -0.3514575322321374 + 0.08207950137162345 + -0.09598541532096631 + 0.147289309646151 + -0.2497369372424541 + 0.2156248484000855 + -0.2658245768023106 + -0.572600223736922 + -0.2521990907983624 + -0.4295099510742876 + -0.04681170516341528 + -0.7328427675174419 + 0.1884437179260753 + -0.04673741402675256 + -0.7794252860778346 + -0.6598692557606886 + -0.1671782095543159 + -0.3821492234558344 + -0.9238147067806809 + -0.6916296008663123 + -0.3402834544006016 + -0.578286567452837 + -0.08526704879707259 + 0.4962274795435372 + -0.7861315151895858 + -0.2066634650164923 + -0.5337220378425992 + -0.718410100444599 + -0.504459492665439 + -1.781827984730382 + -0.009947068886489769 + -0.4232115708025747 + -0.5426458863517839 + -0.5264455047333106 + -0.02365578538253354 + -0.3068997345092218 + -0.5150887200116396 + 0.19076241356687 + -0.1554067325416549 + 0.3969325754490018 + -0.3676212471563032 + 0.5257695833701596 + -0.274742496467984 + -0.1857001610880882 + -0.1400976841123476 + -0.3617743663956622 + -0.6082153702179874 + -0.03632788515964308 + 0.02645797539322557 + -0.4161029360544639 + -0.7431684755220693 + -0.664251865974368 + -0.686806875659062 + -0.1496536443263377 + 0.190202432826203 + -0.1443255792224843 + -0.08102931935739026 + -0.72094662197717 + 0.004892581362082224 + -0.299705529614719 + -0.01696646447822541 + -0.3272883990347764 + -0.4905533145913219 + -0.1813396174116535 + -0.4071266089152618 + -0.5655314771866083 + -0.4955683794089641 + -0.006248670385064545 + -0.3033017414216436 + -0.5888400949273649 + -0.4074841816642161 + -0.5959435509593141 + -0.9107791944897182 + -0.3349167971705578 + -0.7373588861608363 + -0.6026594024957698 + -0.6107404965543706 + -0.5003765155757252 + -0.2098611070589861 + -0.4021373027965684 + -0.8970043375612039 + 0.08397910064022965 + -0.4382484290758023 + -0.3301399368071711 + -0.1242664808119831 + -0.2566178601993747 + -0.8580139120956334 + -0.3507095368583322 + -0.3811768675654083 + -0.399773831124957 + 0.1689071027451845 + -0.1953723184008203 + 0.3067860909489342 + -0.5295403789461324 + -0.462947842632857 + -0.309595415132518 + -0.4885207249855884 + -0.3616981532296132 + 0.1724954091130182 + -0.2242279567779056 + -0.1011815074360616 + -0.6491739385864949 + -0.586984527587308 + -0.3778323314108448 + -0.09455214175017755 + -0.1417058751390151 + -0.2992596095016197 + -0.03766037803092157 + -0.1127711321594186 + -0.148458127618688 + 0.2093510540750044 + -0.4264534725673995 + -0.5603598915878025 + -0.1225630439665603 + -0.4815789276416481 + 0.1703550775539186 + 0.08599999366535897 + -0.4500855357806468 + -0.299901613610683 + -0.006269558339009458 + 0.1243574071130169 + -0.2346236097390691 + -0.08636255906208028 + -0.2229581332903815 + 0.2823707262727844 + -0.2397291346814265 + 0.1680025127720532 + 0.3012079184576376 + -0.7086369232392157 + -0.6408726543683755 + 0.3433000709787449 + -0.1575065203138797 + -0.2867059557405419 + 0.2773035145438126 + -0.2150019370514253 + -0.4243012461071846 + -0.05769483473691139 + -0.07319840475241103 + 0.3170796895196715 + -0.5671667329225263 + -0.3613263866052935 + -0.1833799785322691 + -0.6008257845500781 + -0.6653095750697096 + -0.6002023243499531 + -0.6657416600414023 + 0.1797629486941266 + -0.3595463967012169 + -0.6608457903818953 + -0.1399092453423791 + -0.3320523822637252 + -0.6346831609524493 + -0.1126116635467497 + -0.4430829785354419 + -0.5485231708125181 + 0.03204657762249968 + -0.5301733635083953 + -0.5816943497436409 + 0.008806774026283262 + -0.5491988821134777 + 0.08435077825563157 + -0.4249142318330439 + -0.4528829190479355 + -0.1372350565664413 + -0.3979607906751999 + -0.2736356445295965 + -0.6591575170066557 + -0.2028113340747752 + 0.3093224396829657 + -0.1191120114081912 + -0.05310542061942999 + -0.07089508746778765 + -0.8108684520555332 + -0.1785032426837721 + -0.5999447934883962 + -0.6111411990278564 + -0.4186274799455245 + -0.1996346316510463 + -0.5072772867718675 + -0.5085715229962611 + -0.4783727689671217 + 0.3888878648421634 + -0.5018817073580097 + -0.1710123961143074 + -0.03440537061758202 + -0.6307201710364533 + -0.7624669294232587 + -0.1576758872803966 + -0.1730081850814273 + -0.02625730250783562 + -0.5651390390100943 + -0.2542031839819762 + -0.3311672194039363 + -0.07320000952316806 + -0.7051065686715809 + -0.5397917702212847 + -0.02024915602074184 + -0.1898657938494608 + -0.314988435251115 + -1.106120080454726 + -0.5480091149859121 + -0.09145879212478093 + 0.1440405642236308 + -0.5120847002837695 + -0.05440699605913334 + 0.2362600119337995 + -0.2498941318550015 + -0.3758131420797248 + -0.4106673983087781 + -0.3363085217087289 + 0.6044613757751727 + 0.1122602238867986 + -0.3170173832997 + -0.2052360563028308 + -0.3537423350446363 + -0.3191986995735654 + 0.01210117158462355 + 0.2407197443137293 + -1.131072648759672 + -0.6094826423122511 + 0.1481031201204994 + -0.2816758046960969 + 0.1752267227585191 + -0.2742201391037056 + -0.650284605760318 + -0.4139406904977087 + 0.3116073296461769 + 0.09366767815532326 + -0.6537020409696733 + -0.5264410585863214 + -0.6306669892186386 + -0.2142258307113107 + -0.2299817083155755 + 0.06915493757999686 + -0.1521691785608325 + -1.141583345649978 + -0.06592206427003312 + -0.3126744427081004 + 0.01693288377691876 + -0.3528965617401257 + -0.1314278329686176 + -0.5596825145110919 + -0.2598449364567456 + -0.3186944506137265 + -0.6657774294296043 + -0.6689401126733523 + 0.8424123812819385 + -0.3009561611668924 + -1.064671667809632 + -0.5656834873141398 + -0.7752133072999027 + -0.1241937641920823 + -0.6374480002381808 + -0.4316929876739758 + -0.5379254658864181 + -0.1328429314433819 + -0.5164809431613604 + -0.2962416807611852 + -0.1095985366281921 + 0.1207874243767804 + -0.6628900788488759 + -0.1351168325674617 + -0.2640325389261486 + -0.8452106536516678 + -0.3278363941281444 + -0.5382437306891634 + 0.0007679836840912218 + -0.4236868179998368 + 0.1319238561852083 + -0.2514732603231891 + 0.00682872503865941 + -0.2460237822275235 + -0.2149518213119463 + -0.3853157704397552 + -0.7518385681609683 + -0.5661407784010941 + -0.4055167927140272 + -0.5343414090579431 + -0.2868332194461589 + 0.2708073279502483 + -1.022867290643607 + -0.2684839686071238 + -0.4610225988546588 + -0.6772542738231266 + -0.3544382407374108 + 1.740030988687096 + -0.2402757352641925 + -0.5008001701776205 + -0.32203566623503 + -0.420424818079375 + -0.5527956962790427 + -0.4165025225562441 + -0.1934917831570036 + -0.2564252939818574 + -0.3979042505792373 + 0.569503383874053 + -0.3992567834737347 + 0.5897134182343675 + -0.4717142696950412 + -0.1879011738315803 + -0.3296751719897661 + -0.04853534424595358 + -0.3196629319664885 + 0.01616278646428472 + -0.02518437276958412 + -0.5159949290714172 + -0.4637381442910093 + -0.7480603122998082 + -0.593565034849613 + -0.3443225637849446 + 0.1915663217760353 + -0.2208231019276707 + -0.0229822183777675 + -0.9744571245769105 + -0.1626221200879218 + -0.3515559219094913 + 0.03383880333558515 + -0.4688044937671148 + -0.7618252549229642 + -0.62682769836385 + -0.5754922484276397 + -0.2888300568057754 + -0.572224317416559 + 0.01053109933068843 + -0.294445312607977 + -0.7097400471505686 + -0.3989451628754628 + -0.7911465174554497 + -0.8293220722254347 + -0.2840166022341136 + -0.5712601088393791 + -0.4600099221423827 + -0.28899931163757 + -0.3643181064797407 + -0.2225982521597181 + -0.2438786397524137 + -0.9357264224665949 + 0.228355580792485 + -0.1621760245473221 + -0.3049375648757576 + -0.02225913657565592 + -0.1694873664214451 + -0.7959264250443929 + -0.4139968176207957 + -0.4110033725326739 + -0.7852385808451339 + 0.1283921083206729 + -0.1463796515185316 + 0.2271431064471801 + -0.5617095218394167 + -0.7841145258499482 + -0.2560159493630336 + -0.5580690917179528 + -0.04531553057782736 + 0.3554651982974579 + -0.2229454527347418 + -0.1027446492423381 + -0.6148578968220384 + -0.3213478564924183 + -0.4648935364962582 + -0.1411256112089259 + -0.5837217247480977 + 0.147878190493986 + 0.2097076500532646 + -0.06846971738883641 + -0.247471001276119 + 0.5637195559861582 + -0.8643569774815417 + -0.5739224547249889 + -0.1211870337370245 + -0.6808082790534996 + 0.0666681877316912 + 0.06161818894203498 + -0.6313891561168232 + -0.4116426898980775 + -0.1467126937197818 + -0.2977466389072961 + -0.3153989022423644 + -0.5208853164006397 + -0.3845323102999652 + 0.280267202921041 + -0.6839282700139054 + 0.1757954743509033 + 0.2795987531029381 + -1.063435226925195 + -0.7635577498452711 + 0.4197159489910926 + -0.04269171867875766 + -0.1163816233067556 + 0.3169323876707662 + -0.3241239598066025 + 0.02207212575000063 + -0.02996874692232253 + -0.4523229984245173 + 0.01235470586480735 + -0.4904427974491405 + -0.3480502876861254 + -0.1594231677310244 + -0.6080547005840844 + -0.1753453575408354 + -0.4323488361306168 + -0.505339485231958 + 0.1550320090461448 + -0.4788857991812676 + -0.7416837536959027 + -0.526284161501043 + -0.3205144331745952 + -0.6799907880853793 + -0.0004602501180474434 + -0.3553702825004848 + -0.5628476691497847 + 0.1831584813954614 + -0.5833876316757762 + -0.2385667806020592 + -0.1435223220691675 + -0.5862099375816562 + -0.006706504552293172 + -0.4107388300348321 + -0.4971982875136436 + -0.197366562155806 + -0.7940342484313364 + -0.1969251071604586 + -0.9874351191383243 + 0.07926008935697504 + 0.1646474683723194 + -0.1233008039743702 + -0.02671002162957524 + -0.1444779380085388 + -0.8378694132281145 + -0.3031219709420606 + -0.4809574349308396 + -0.5928992192700092 + -0.4413021065317886 + -0.04918086472912069 + -0.1076738850473241 + -0.3879281706209609 + -0.5227018007203815 + 0.3082199540555409 + -0.8051717417915679 + -0.1150540598055636 + -0.1704053487569717 + -0.8442359408404969 + -0.7832043444645047 + -0.1760183397472159 + -0.03972588631436266 + 0.1985375297124761 + -0.3433438205288021 + -0.6022461326730766 + -0.3832753364025572 + 0.02496989821628015 + -0.7482856620325489 + -0.676472325144241 + -0.1995175329101491 + -0.3055061345658232 + -0.3525741657072834 + -1.041952251483809 + -0.4833379927283012 + -0.1631391027722319 + 0.08717001671536372 + -0.5758173054151819 + 0.2556821980832631 + 0.2893202308655086 + -0.3180363901873887 + -0.3543792204057355 + -0.1415516959141055 + -0.3925201797698654 + 0.8471840398193545 + -0.007706221773311706 + -0.1963279733293128 + -0.06959797801059125 + -0.3439763571075633 + -0.1369718553100855 + 0.08363263051704599 + -0.08420122646260238 + -0.9430659754739588 + -0.4837684467461363 + 0.108912306293059 + -0.3097210873343849 + 0.2073936141374547 + -0.2969534935970397 + -0.6893898771050506 + -0.3805016869987031 + -0.01829813528337139 + -0.03519004420106402 + -0.4904205191547068 + -0.5237925240566278 + -0.8873934736899731 + -0.1647033558058378 + -0.6895951797493588 + 0.1969087071731084 + -0.1431303983363662 + -1.199648901972244 + -0.2292936600652613 + 0.1048424274021737 + -0.211285411441128 + -0.3412345589704287 + 0.1421968005512652 + -0.5929397675682737 + -0.300151981810605 + -0.3521789047934598 + -0.512952562361777 + -0.3186910232639853 + 0.9687960781341542 + -0.3247884445108192 + -1.111584493802074 + -0.3401393556610821 + -0.4732730076001035 + -0.2112119737469602 + -0.6182892105283664 + -0.5317519963536463 + -0.5122297506852407 + 0.1991472282966215 + -0.3521110322185296 + 0.07007926399907323 + 0.1071993659132263 + 0.08979388021070796 + -0.6263631267375758 + -0.3159070728631599 + -0.621762198439926 + -0.8270000722327756 + -0.3211575912606422 + -0.4743296938417983 + -0.1040256616831242 + -0.1049837439919935 + 0.1657019051342271 + -0.3762664671296157 + -0.470896309465375 + 0.1131506048092131 + -0.2081354288090403 + -0.3751672573201461 + -0.7475183680699227 + -0.3429889606103283 + -0.3563272169382081 + -0.193391652912252 + -0.1531689089457126 + 0.01097693395417735 + -0.8701040648264207 + -0.3143213515089616 + -0.320219666872623 + -0.592222215133461 + -0.3119573320575327 + -1.781973028558838 + -0.5607983807665291 + -0.5284186051541483 + -0.2431205520419281 + -0.3293907359360963 + -0.844879692017794 + -0.3785271889603082 + -0.01566285948976559 + -0.6479386231714839 + -0.4968833348626299 + 0.7222550173615462 + -0.5314642510724801 + 0.4308429549802154 + -0.6232325490933887 + -0.182016847791158 + -0.8778392013648422 + -0.1639641219509562 + 0.03408601202469844 + -0.01649806840710853 + 0.08165899544008666 + -0.7182053520196864 + -0.0282191147370792 + -0.5870543552588785 + -0.3231940518303731 + -0.5771586795985312 + 0.3262405283444714 + -0.2528153413391997 + -0.4082394060139936 + -0.7741023157948116 + -0.1681944551198781 + -0.409362942909045 + 0.1675440584613964 + -0.5640719656890355 + -1.055730129940361 + -1.098571488379675 + -0.8975787973673068 + -0.03772469550847653 + -0.5642342418592303 + 0.008230844877315392 + -0.3339261354764625 + -0.5514432759140413 + -0.3581455261509393 + -0.4072398822900626 + -0.7505923501963231 + -0.4133824271519346 + -0.2502443089715727 + -0.1859781500659672 + -0.2507778584384046 + -0.5768442401927268 + -0.172494219696996 + -0.1370585867667568 + -0.7451345314503817 + 0.3863714854580726 + 0.08592667913501936 + -0.224872090415018 + -0.3867075059046672 + -0.01995574410190462 + -0.7792667864810917 + -0.5139905686401676 + -0.1542818303227253 + -0.9569043036713922 + -0.2697091330581493 + -0.1987512335898944 + -0.2010240181995746 + -0.3898078563984238 + -0.5728928421282474 + -0.4898382537117549 + -0.6661950745854164 + 0.2316645697315715 + 0.1451958537847786 + -0.285186100538286 + -0.1548825383639861 + -0.3606243712905282 + -0.04309501997003859 + -0.5252121926059879 + -0.08087819685630879 + -0.8435507862497488 + 0.4306854850221897 + -0.08238840393192921 + -0.05041650085296915 + -0.01158433575335821 + 0.6521341473703037 + -1.047237039308981 + -0.3746236902847343 + -0.1082794913183117 + -1.031700987750881 + 0.1391159630165882 + 0.1736528264501267 + -0.6512238773038403 + -0.4587991036038348 + -0.1340821280386915 + -0.7334583616678994 + -0.4458441551671066 + -0.837471432556554 + -0.6672799757736255 + 0.2448374172288726 + -0.9024474589734426 + 0.1023670755906258 + 0.0292058596005524 + -0.9520214971401303 + -0.8268143038010669 + 0.2972605217114852 + 0.1453064233583261 + -0.5232784383932808 + 0.2086008331921708 + -0.7627467577788207 + 0.3941662642328789 + -0.2286381155884264 + -0.5870456814615304 + 0.102084148967303 + -0.4329515063089142 + -0.3906233582382577 + -0.1731692891447 + -0.462936283622991 + 0.2186150787660332 + -0.5378741730398333 + -0.5513110470695967 + 0.08792702355002706 + -0.5160325021276126 + -0.8038774266202716 + -0.8673068591619917 + -0.2800402211052486 + -0.5071812287055846 + -0.245761552277381 + -0.1131894656146579 + -0.7111469043039585 + 0.2949153372857375 + -0.6125145957330751 + 0.1333191507641706 + -0.4143036664128203 + -0.3881311020441194 + -0.4536636134855772 + -0.6501534428375323 + -0.4587908045668875 + -0.2262689907292591 + -1.008930698162811 + -0.2858199286034775 + -1.097091975238689 + 0.3349940031359749 + -0.03397858581056419 + -0.1115325585421367 + -0.1536060218366431 + -0.2472757970660318 + -0.9552163802897028 + -0.6360437725640494 + -0.2415017541557331 + -0.587043818741025 + -0.4349002239176226 + 0.05466084891586871 + -0.08379992506168299 + -0.4337862151309793 + -0.3523864784159469 + -0.2180967687295187 + -0.8293383325079787 + -0.3981414008486881 + -0.3406100475235269 + -0.9146022384063078 + -0.4776784098582947 + -0.2444239310349579 + 0.02509980574020787 + 0.01141825131356056 + -0.4052794734982313 + -0.4729987232950348 + -0.4093980513685815 + -0.00873726058681297 + -0.7712260881429435 + -0.7848996302391045 + -0.4474293883176877 + -0.4323587577203974 + -0.3591563401798847 + -0.9546891379024977 + -0.4272933483664859 + -0.06972562127096517 + -0.02149647229712578 + -0.770948698054748 + -0.03291204158136948 + 0.3803140241482079 + -0.1873962583031693 + -0.347983988323403 + -0.1636512977496206 + -0.3091525419691572 + 0.8900416145331014 + -0.1743739584560785 + -0.2799925329935282 + -0.2953298210434973 + -0.450373929504557 + -0.1897727562191744 + 0.1512685793668392 + -0.2564901069991625 + -0.7598665348694464 + -0.4516988612050298 + 0.1068511089079621 + -0.2808640885633978 + 0.08429370500173265 + -0.3006954281227031 + -0.5940605997954104 + -0.4359973149611513 + -0.2442812926963645 + -0.0329967553759234 + -0.2558588863449351 + -0.5317364343041211 + -0.8531979377142996 + -0.6747777970265376 + -0.759844933067973 + 0.0006778703703523043 + -0.1294741974933304 + -1.106916969987646 + -0.1352047865966687 + 0.08682798495941844 + -0.5157487159470723 + -0.3502479771286062 + 0.3010730983680521 + -0.5465252622325496 + -0.3861814509901219 + -0.460932413329754 + -0.3924467851902882 + -0.003125988376217017 + 0.7091393647100384 + -0.3071080884322199 + -1.248602155389827 + -0.6026747990886756 + -0.151398152882901 + -0.2826794853998861 + -0.7794898241130669 + -0.5593715976627073 + -0.4852336979367511 + 0.008309981183236928 + -0.1021599316578544 + 0.3411885873017287 + 0.5081079556857369 + 0.03733243284709165 + -0.3308654045131658 + -0.2466537274174862 + -0.9377014554868648 + -0.8369771035990859 + -0.3451759856061667 + -0.4415002397679108 + -0.2260156389975992 + -0.09391867372990505 + 0.20536671518883 + -0.3820615019536124 + 0.8603809226716443 + 0.04649318982692087 + -0.158594619703022 + -0.3744326803384477 + -0.9125369928504006 + -0.2378369680554814 + -0.3006028796512427 + -0.08976209282829463 + 0.03878589158372698 + -0.2571253410084418 + -0.785713420861162 + -0.3177862219631656 + -0.2314554537666901 + -0.3843821789143249 + -0.4873158910290698 + 1.867504138689031 + -0.1400122810502813 + -0.6753642256336548 + -0.2131931662576885 + -0.4222201678406883 + -0.992839970337568 + -0.3564598873179906 + -0.1984565326015064 + -0.8003576707711179 + -0.4047668580826831 + 0.7674033625513189 + -0.5379221398723746 + 0.3200337625725557 + -0.6216122206835325 + -0.1813225694221128 + -1.087091976625574 + -0.261186702356849 + 0.01544308449351302 + -0.2500519919860956 + 0.1441280229092948 + -0.9619638588218969 + 0.1269707449510237 + -0.6043244873826396 + -0.1725858061112837 + -0.6338179309763565 + 0.3837868560834052 + -0.1949495842806335 + -0.758838935074038 + -0.6577446655062089 + -0.1066555349812738 + -0.4665885207142938 + 0.3969287809523685 + -0.692421554516083 + -0.8766299067088819 + -1.222737098832862 + -0.9412237269783912 + -0.1783534432115874 + -0.5793127719721858 + 0.00198151099599386 + -0.2914654072177844 + -0.9132033195906868 + -0.3403370434379572 + -0.1868548302155974 + -0.6710837117043588 + -0.2454886164132825 + -0.1241173018458294 + -0.2881038463860114 + -0.2303714358992366 + -1.015450790887978 + -0.103293216194567 + -0.2492892148066009 + -0.501306977223504 + 0.5467538639021241 + 0.2218582371860424 + -0.2512560586044336 + -0.7542107007949712 + -0.02320318421047902 + -0.8658572514826759 + -0.5559053392767729 + 0.02184836138294483 + -1.020389550090781 + -0.6871829233387893 + -0.3082731594064871 + -0.6241027114402874 + -0.2269937410753727 + -0.7018013596758071 + -0.7708968870449653 + -0.6888896844758244 + 0.4445543856629801 + -0.2511562352753987 + -0.1454995404220746 + -0.2401718120916491 + -0.1373932587443327 + 0.05750814917539201 + -0.5077294001027047 + 0.05337787197100174 + -0.9368218187167636 + 0.3094167643873372 + -0.5086778642578426 + 0.06744163899424491 + 0.1149160751543754 + 0.2772787764088001 + -1.131635194925813 + -0.24299331655764 + -0.1048965486925691 + -1.226254278840357 + 0.2029837279627382 + 0.1659767946555612 + -0.7132139376091509 + -0.4943209625346273 + 0.05117485812238402 + -0.9063858289101545 + -0.4820357410883333 + -0.9985494038759675 + -0.6582131227198482 + -0.1703380258281345 + -0.9928703297273094 + -0.114582736253507 + -0.09210900657241534 + -0.7078960436284223 + -0.9469585751118496 + 0.1005995272527878 + 0.2414918171114861 + -1.09964696711853 + 0.1575427776842223 + -0.8200464232382167 + 0.333162096363932 + -0.3821110116835941 + -0.5101465687146329 + 0.2144853276229104 + -0.512968358020117 + -0.488113300839539 + -0.2231572929378784 + -0.6201640114343301 + 0.2779820537987536 + -0.5104169196537974 + -0.6104312516002482 + -0.01020268160961942 + -0.5220419351288996 + -1.02325893573648 + -1.128840855457466 + -0.2799193428358276 + -0.4285771894615326 + -0.546634031813172 + -0.1516111067465357 + -0.8121415040333105 + 0.4884931648429183 + -0.6067981257056273 + 0.1552447809247549 + -0.559431567530568 + -0.1767958055953588 + -0.5082820086240474 + -0.8587536693663146 + -0.4448482480218933 + -0.190572533645124 + -0.9276026706789513 + -0.3727380520268397 + -1.022288134606446 + 0.5338402697560298 + 0.01606721260939164 + -0.1198185494852305 + -0.4219561200564114 + -0.3629507087479318 + -0.7933746066071081 + -0.839387868910383 + -0.2714587435270597 + -0.6183725771998323 + -0.4406180819036702 + 0.120792154047767 + -0.1751175420400254 + -0.5428664166010159 + -0.2268962176582445 + -0.509221779962194 + -0.8449037912845141 + -0.6846059682233914 + -0.3219151493929256 + -1.034332439008274 + -0.3900501572073875 + -0.2413581968510067 + -0.113597852135392 + -0.3351205767677078 + -0.6361979833288497 + -0.1928292306697757 + -0.43680298624963 + -0.1887923567377331 + -0.8025552691681482 + -0.8822249286684164 + -0.5173636867479294 + -0.5396821401592674 + -0.3784762859892659 + -0.8448706219451347 + -0.5234203882543 + -0.02523284708004396 + -0.03004488642002552 + -0.5911414799190232 + -0.5198729319281616 + 0.3793210414752821 + -0.04253283290772383 + -0.3466682916964748 + -0.2922567493223415 + -0.1092012753827762 + 0.7215290234431692 + -0.3998376566347607 + -0.3785129240010847 + -0.534849131920757 + -0.7159466788797467 + -0.5158517564827039 + 0.2191034254880796 + -0.1687253454842232 + -0.8006633752006649 + -0.04233864925094758 + 0.2140476332785622 + -0.2296165453694349 + -0.2915847379002629 + -0.2888886891570239 + -0.4784622980651279 + -0.4467145960481185 + -0.2256072700117347 + -0.04297332735554762 + -0.3004901990870193 + -0.5309290473258421 + -1.007158475659556 + -1.111196509017678 + -0.4529845320173796 + -0.1409433732378824 + 0.0222587276785431 + -0.820032995490547 + 0.007376701449273282 + -0.09344757451430596 + -0.6575287905493787 + -0.3359023295164944 + 0.5245680980769555 + -0.6068177056063478 + -0.4216118690137018 + -0.5725608766120418 + -0.4132240278745631 + 0.06853942621820504 + 0.3766986723601243 + -0.2236264198419682 + -1.155001748353813 + 0.3835755738205138 + -0.07269001608422644 + -0.2961927238014648 + -1.011602948583423 + -0.5476932202465833 + -0.4673703739609745 + -0.1149249823172179 + -0.3212341778145969 + 0.251035724468793 + 0.5090317567423607 + -0.2018856400356364 + -0.3026056454976902 + -0.1696618457657907 + -0.8511035584348059 + -0.6360251499027173 + -0.3479035685123237 + -0.5099340626202971 + -0.4260193709536283 + 0.01391765724150718 + 0.04716688284851223 + -0.5193920652906535 + 0.1336592645915052 + -0.1157910297988457 + -0.1209061571098737 + -0.3175436010167856 + -0.9144348098228305 + -0.3985852511791289 + -0.3255970899053792 + -0.2155615860397035 + 0.02576505316702601 + -0.4311139406371869 + -0.3922836136710843 + -0.2706420873581653 + -0.3149541713240933 + -0.1009102613588649 + -0.7589114696564203 + -1.781827984730382 + -0.3225388769638705 + -0.6477950476558042 + -0.1705397346900364 + -0.4016639554119894 + -0.9560729763139403 + -0.1062869424071198 + -0.3410653174718074 + -0.6938947223719386 + -0.2531015973304419 + 0.5154964732046285 + -0.4933817747571067 + -0.103099497056752 + -0.3720333613045235 + -0.123252982762294 + -1.055082572544018 + -0.1092166843215198 + -0.2198511401706685 + -0.4913473463108912 + 0.1099251875339939 + -1.123872395689639 + -0.02938743533917771 + -0.5059274709014567 + -0.2227055243212799 + -0.4690992425341026 + 0.3639924227658843 + -0.02027030350821564 + -0.7309819750094045 + -0.7262974959532765 + -0.06390253566339001 + -0.3340042434091533 + 0.597777278013657 + -0.6949221865942922 + -0.4493798828966502 + -1.160855418373404 + -0.7053072891484373 + -0.699276484447522 + -0.4376704852886505 + -0.05167241028317913 + -0.04077780340070988 + -0.599338006731406 + -0.1877316316037821 + -0.2386115078344901 + -0.3960026156101754 + 0.07314693730402491 + -0.0877385462508644 + -0.3490784660286306 + -0.3042342943000372 + -1.04485869334051 + -0.2133530210299411 + -0.3146573130592388 + -0.3321743102554562 + 0.6536809804245225 + 0.3356024170565902 + -0.1934155285213567 + -0.9308302814893227 + -0.03611906779631877 + -0.9231960135360759 + -0.5094190712281376 + -0.2368865955761142 + -1.039908483654012 + -0.8350780325527202 + -0.4063549237358346 + -0.7216287535653085 + -0.283549014328219 + -0.9303673883439546 + -0.9378338521796289 + -0.3743380151152271 + 0.6652621891428373 + -0.6261809288546966 + 0.04919270649906123 + -0.2000238336443852 + -0.3805201612720025 + 0.1070814407263242 + -0.2373341039643005 + 0.1680623173657377 + -0.8636506670044971 + 0.08496989766350729 + -0.5964578505190108 + 0.2616961079899485 + 0.08564325237143779 + -0.03076282855809052 + -1.006776302453722 + -0.4388848296833138 + -0.02522913690806778 + -1.237672975105699 + 0.2268815798631884 + 0.3284199476696821 + -0.6537825551034893 + -0.5222905782590661 + 0.2957512926294534 + -0.9733422277481359 + -0.3595601174139009 + -1.003688310960785 + -0.5937017251294097 + -0.4447872447259192 + -0.8495306072401683 + -0.2914004542718777 + -0.02520211595957169 + -0.5032552818223736 + -0.8935797977110612 + -0.1749640360389038 + 0.2067588852205771 + -1.361739084645942 + 0.01607068850026597 + -0.5986951376148295 + -0.006364519784491229 + -0.418312344602186 + -0.3255628138534578 + -0.05822691441876494 + -0.5470615402964608 + -0.4674344014256545 + -0.166972824355683 + -0.7266288134790206 + 0.003911148183964989 + -0.1107724574764601 + -0.6388237463609426 + -0.3195108977045384 + -0.7914273227694385 + -1.030707884301274 + -1.347581155474584 + -0.2335665650734107 + -0.282266159456554 + -0.6047644519379601 + -0.2647827722254275 + -0.7656455368948109 + 0.6925461994067584 + -0.3355196829331084 + 0.05457413196311294 + -0.6654809206432205 + -0.1716090184197709 + -0.1816043155841315 + -0.8710697445735216 + -0.655246440909579 + -0.1038510359864993 + -0.5753790585325803 + -0.388110581745044 + -0.7701068611951711 + 0.5265629438784175 + 0.1877246111858627 + -0.07274151601928062 + -0.5412953692036067 + -0.4119734917352358 + -0.5366763068137621 + -0.789734438665066 + -0.4938557305258537 + -0.632044272904425 + -0.05377693088462582 + 0.3993417959047834 + -0.2338366100911965 + -0.4892118216335631 + -0.4090155269574513 + -0.7430633627590832 + -0.8739827201153766 + -0.6241417643999819 + -0.3287665353236034 + -0.9053857928987108 + -0.5648028405516894 + -0.3831278412321464 + -0.2667834069307376 + -0.4260095140851397 + -0.5942808972698476 + 0.06590664074879116 + -0.399205686951896 + -0.3525046922510404 + -0.6482042707020442 + -0.6884904318529738 + -0.2322503571731199 + -0.5186819183156427 + -0.259992661918489 + -0.5319560685499135 + -0.5339174568628724 + -0.3743326975744048 + 0.01490145813696582 + -0.2211962027111431 + -0.5308552983355076 + 0.2582853853062619 + -0.04561453043301034 + -0.3664513725843536 + -0.431973756895839 + 0.2651925127001253 + 0.3946610267467467 + -0.4687043765476729 + -0.4124847689797652 + -0.7568303916281496 + -0.8018285259196836 + -0.826153435156299 + 0.2906615985251585 + -0.03724746981708974 + -0.8016310126139845 + 0.4818981906977681 + 0.2721103651715217 + -0.360637480659132 + -0.3872973663893723 + -0.1495220514798854 + -0.1864243586610831 + -0.2102292448691494 + -0.07317014262805463 + -0.09662769112699954 + -0.3378718456832781 + -0.4576579062142558 + -0.9075882353475503 + -0.9219014718538876 + -0.1920685081266685 + -0.116875762912306 + 0.2890653171322882 + -0.4893731464572967 + 0.03429173363179066 + -0.09668863893128976 + -0.7566245638496483 + -0.2809460853315527 + 0.516164339665746 + -0.1102249908103984 + -0.40935018207511 + -0.4571520457708725 + -0.3416521138433671 + -0.06327507390117715 + -0.09480691448373813 + -0.02804242689107814 + -0.8009299785593715 + -0.5118264582900479 + -0.2142006600809974 + -0.1384804766152002 + -0.8475682420452058 + -0.5735110982901541 + -0.3799754077955094 + -0.4477211045778108 + -0.6532779099630316 + -0.03162730375362215 + 0.1448841305296973 + -0.2120341453962263 + -0.4524362540144146 + -0.356780235568433 + -0.5381069203948087 + -0.3039616033589326 + -0.2984008579276916 + -0.4473431779410559 + -0.6485066001685057 + 0.4410917197120264 + -0.1458758574465191 + -0.3815449557405615 + 1.667218727796572 + 0.06210318337388328 + -0.02218373853791181 + 0.3143943544532836 + -0.3695653803667836 + -0.3176914477891388 + 0.05118959850659156 + 0.09008013501068504 + -0.006350069057788199 + -0.01232797267804324 + 0.203935684172132 + 0.2330687614757996 + -0.1624114630506737 + 0.4307269245467064 + -0.4004737420633673 + 1.948549556721081 + 0.3335890928151976 + -0.04192142481248118 + 0.2367004576456525 + -0.1409107966175674 + -0.3436863316219508 + 0.3816399232737833 + 0.007629740452386909 + -0.05620962790570525 + -0.009210520727384545 + 0.04312762633207708 + -0.1045037202332779 + -0.7291590733833684 + 0.275517453291411 + 0.1064432317573884 + -0.2697058202994626 + 0.2235728075947489 + -0.1292678701953861 + -0.3588164388952433 + 0.2089953707997088 + -0.4268770803072862 + 0.1658208426565521 + -0.05874670210612977 + -0.1252114055277611 + 0.2118547821865102 + 0.6627473287282948 + 0.4459429401917344 + -0.2771606877337046 + -0.1775338519619086 + -0.01473339359956204 + 0.1495908131907566 + 0.6746854718412869 + -0.0901262206339789 + 0.1370647022270746 + -0.4456022646206545 + -0.09722113324201812 + -0.6545926777777892 + 0.163677723514819 + -0.0587339326604285 + 0.5543693527837558 + 0.4353403263900784 + 0.5271708111732047 + 0.01003765855487058 + 0.1071942561920385 + 0.3096140164305524 + 0.3841871459387871 + -0.09583582922239864 + 0.01559603339907481 + -0.3155942273850432 + 0.09957052658816262 + -0.1328321173322763 + 0.3564622545695095 + 0.6085146381009029 + 0.5867399596143027 + -0.02250972884758025 + -0.4763015329738412 + 0.1363186111626235 + -0.2266561576288394 + 0.06372520143932857 + -0.2334396842365647 + -0.3265031596549025 + -0.5225730768617836 + -0.2794768981321148 + -0.3806046580723788 + -0.2709384658505899 + -0.3745368673442807 + -0.4919386695331785 + 0.1155843211204948 + 0.9277339631772524 + -0.8220383796531052 + 0.4677961095284494 + 0.1012249285417283 + -0.5689958029104534 + 0.3486579083308017 + 0.3536085222332953 + 0.327297536819787 + -0.3524532775029237 + 0.2478060497053853 + -0.167875376600675 + 0.4683052857569047 + 0.04845777005968554 + 0.151462095439388 + -0.2954444421277257 + -0.1202327210119957 + 0.2654746711195042 + -0.468234794883329 + 0.3119278052564229 + 0.6273311313018934 + 0.2530745559027924 + -0.06309058374995485 + 0.4189488387699707 + -0.4732279941849034 + 0.2094095552707933 + -0.4025186655027134 + -0.1659355510438331 + -0.3177972199941017 + -0.2481462321985213 + 0.006592088157052001 + 0.268780447633735 + -0.2073683427305351 + -0.2106105744749099 + -0.4509560351939277 + 0.1834184809985726 + -0.7661370276962249 + -0.07903346079921088 + 0.04676248215594855 + 0.1237008920290094 + -0.0126499125481814 + -0.05835220431205906 + -0.1588734042816966 + -0.3299073260347327 + 0.08167118119376097 + 0.2478343554039025 + -0.1452099065062266 + 0.1326568406926738 + 0.3491255078998559 + -0.3934174673339707 + -0.5960640115453083 + -0.7910878843462008 + -0.3020982053926454 + -0.8838714860757471 + 0.06568719607260053 + 0.3369431365777982 + -0.2198210057155472 + 0.02881191399440781 + -0.1501821522283808 + 0.9675637896490875 + 0.1967637389689453 + 0.3815388218291317 + -0.2548597206712573 + -0.0560737578407515 + 0.2869704311115486 + -0.2854761498665436 + -0.5950011402363669 + 0.1513743013486433 + -0.009470931824429152 + -0.1739807982033399 + -0.1466233207008622 + 0.5357347876397437 + 0.3074301522098216 + 0.1270808780145465 + -0.3704049340693402 + -0.07042455885511463 + 0.0405713279179636 + -0.3815384053212412 + -0.2997819510430044 + -0.1114667378498817 + 0.7258062829153872 + 0.8700940416597699 + 0.03826930388024562 + -0.1790194202449966 + -0.3616556505927438 + -0.6152504762514582 + -0.2677397580547463 + 0.01079977629521155 + 0.07883747390706719 + -0.3624426716699543 + -0.1527248418632322 + -0.03702200314495983 + -0.08732007815655742 + -0.2271404016758612 + -0.1883027115152028 + 0.3416053441977727 + 0.06418830949057062 + -0.1998428761163998 + 0.1306830477324872 + 0.1391202979596478 + 0.4529091731012134 + -0.1446157003666682 + 0.4358962341170605 + 0.08644203357368854 + -0.08867530401801563 + -0.5120811340035706 + 0.2381130654095968 + 0.182322993378588 + 0.05348965071702647 + 0.1170819346874089 + 0.08019216083419001 + 0.07552243569663072 + -0.0684438818084938 + 0.8236200014683633 + -0.1678402216367604 + -0.04058297968371218 + -0.2326005508457137 + -0.3000381837143903 + -0.6188481131311174 + -0.3212977529986542 + 0.3054848536615199 + 0.02003101442925876 + -0.003896575842105588 + 1.191761661333273 + 0.3339563486035031 + -0.2411313538627305 + -0.1368102385058602 + 0.2099639721724371 + 0.3302646100890316 + 0.279735322187841 + 0.1572125831554773 + 0.1621614227576263 + 0.1361991186281638 + -0.2350784094731422 + -0.2718929744151896 + -0.04033994923534494 + 0.1344402640829349 + 0.08336221947186542 + 0.632881462354837 + -0.008140666772563247 + 0.1272758672873934 + 0.196510462374386 + -0.298640402793001 + 0.1041277340782838 + 0.5678023283084099 + 0.8473197976328795 + 0.006957767088195686 + 0.09493592588800308 + 0.207316106352868 + 0.1114048869767513 + -0.562370393977032 + 0.4970552468469591 + -0.1555858172176586 + 1.338651333090117 + 0.003053498157229314 + 0.1928128576865458 + -0.2186155105026712 + -0.3556388494918716 + 0.02312630631403897 + -0.2670535650055857 + -0.5414662108847647 + 0.01424970636943131 + 0.2005908144610585 + -0.4205355698145358 + -0.1858662228644941 + -0.4665512175475525 + -0.03506163734660313 + 0.2307098331622904 + 0.004312729534306625 + 0.2707557794007244 + -0.4447926297528495 + 0.9127134278553473 + -0.2995522399174017 + 0.1735995315903607 + 0.4425718024777047 + 0.4639329917160108 + 0.08637960391492526 + 1.264868773671721 + 0.4464640301029854 + 0.007233381035124405 + 0.859917942528008 + 0.8262969742469247 + 0.04341658666399524 + 0.8330641227804799 + 0.909348690733269 + 0.9999538158809214 + 0.1665464753088647 + 0.9694422871445725 + 0.3922478417557296 + -1.781448255057624 + 0.03635886860908773 + 0.8076620929999465 + 0.8339334756445123 + 0.3860128823332295 + 0.6653047893610314 + 0.9185296346976854 + 0.6649787949751917 + 0.7825902558010049 + 0.2837037127269504 + -0.3747990077395175 + 0.4214443559395317 + -1.019361892775693 + 0.9171977008345442 + 0.4222361559174124 + 0.88407023912625 + 0.627550531980175 + 0.3566140855934134 + -0.03223197651486596 + 0.4444754817930365 + 0.7198529871401895 + 0.769543155492363 + 0.4522789066520774 + 0.1552051873408984 + 1.087046685118705 + 0.7110449593763254 + 0.8551578745013462 + 0.4445553463014242 + 0.6336985233194055 + -8.666585533623437e-05 + 0.7481389904150876 + 0.6099165356679989 + 0.8441275807205756 + 0.6746478056933407 + 0.7710196583450366 + 0.6015009959469434 + -0.02078264166128433 + 0.9139622734605635 + 0.03649114793601069 + 1.081362510467778 + 1.294925438224664 + 1.364399995326488 + 0.470971101873399 + 0.7400190105755877 + 0.5699287605581952 + 1.004010254105531 + 0.3370758327320168 + 0.6131293665130263 + 1.066506465129122 + 0.75007755748098 + 0.2092889950274849 + 1.188379584369206 + 0.3927020524332166 + 0.8976178226409594 + 0.253591376201034 + 0.4788474086715514 + 0.5846703904079941 + 0.7458621662241995 + 0.9803193405410499 + 0.1373088202715007 + 0.7124319998825741 + 0.001392091297370719 + 0.005439118590977577 + 0.262311652226433 + -0.1294387395986635 + 0.4247535343006393 + 0.4684777559177688 + 0.7152179782510809 + 1.122769290452707 + -0.556571539027084 + 0.7158780094478909 + 0.4802045073119096 + -0.4895153647051178 + 0.7811319855474181 + 0.9588152497290688 + 0.4196819710368834 + 0.4150388135584117 + 0.6482857515970342 + 0.6148584162460666 + 0.7321927360436169 + 0.06685955368278976 + 0.5237996850885736 + 0.5458979798565589 + 0.6853456078499774 + 0.6057305714252021 + 0.7063432420794981 + 0.4090613901948583 + 0.9384325755638672 + 1.422475224972518 + 0.7340220696204048 + 0.3974070122287193 + 0.4291073097870783 + 1.005825244363131 + 0.3983200619644611 + 0.5215660680357879 + 0.1392856995086938 + 0.5911512297254349 + 0.6914181916293677 + 0.6381864477415636 + 0.05556341432556314 + 0.7827245647227641 + -0.4785100388053652 + 0.2664119832167832 + 0.6996726492098401 + -0.1791803178514642 + 0.7268684014643656 + 0.6467564449413579 + 0.7068816095330724 + 0.2160304367590288 + 0.1248403590807845 + -0.01822133643607303 + 0.8960340501583953 + 0.8322632672202777 + 0.7877349704122448 + 0.6127608453581013 + 0.9125600228691853 + 0.06050065398089624 + -0.5814533023644182 + -0.3861156330785092 + 0.7708663019767132 + 0.1414340489287589 + 0.5450846421816883 + 1.038949892081503 + 0.4174288596040157 + 0.6038789998183522 + 0.8250064010704237 + 1.11633891363245 + 0.6408815696753317 + 0.9088580805829342 + 0.7197199404882286 + 0.1852800172254349 + 0.7500042345480682 + 0.6006719336512956 + -0.1501357023317271 + 0.394046806730308 + 0.5674422352507514 + 0.1304522816363141 + 0.5481581118181026 + 0.6648882198575188 + 0.4502490682344322 + 0.4188941087144956 + -0.008164313196871244 + 0.4794370562070326 + 0.7040197300011987 + 0.1877608974045845 + 0.1910932773547232 + 0.7258251041884094 + 1.338647325753172 + 1.3061328441664 + 0.6580938987572295 + 0.3064888139023139 + -0.1279381299652183 + -0.1440544070168745 + 0.6855176548603273 + 0.8451296607375113 + 0.6977692058261843 + 0.3177587836652486 + 0.6277976642860534 + 0.6384007278203387 + 0.1512017510970298 + 0.1909791050629819 + 0.3696613702906053 + 0.5423921235811779 + 0.8189746404472315 + 0.1927059080312683 + 1.122373108673155 + 1.100572668977905 + 1.091448881157351 + 0.3864913664206477 + 1.29530959251389 + 0.8166113995733907 + 0.7601671784301625 + -0.2943511055448276 + 0.4917982436421829 + 0.6232040439503094 + 0.8468610412307204 + -0.05076225304297343 + 0.4823821786251634 + 0.9086852725808422 + 0.7046377387435105 + 1.242050893449605 + -0.7175982302830722 + 0.7622778304151561 + 0.1487060867832971 + 0.6084926229448413 + -0.2617814820307586 + 0.6290740543293295 + 0.2531324541004852 + 0.09820565686203631 + 1.193013779567532 + 1.494944274248078 + 0.2742953038453484 + 0.1402216542798266 + 0.3435783831149599 + 0.618862358885921 + 0.9138941426379912 + 0.7181690558115195 + 0.4396937723365966 + 0.4221474844300872 + 0.9678478824954682 + 0.1621521255176283 + 0.5450861789392766 + 1.068244577362342 + 0.489124356812478 + 0.330030433503413 + 0.8970494954352911 + 0.5013533174532329 + 0.309797772279065 + 0.6738041032434924 + 0.6227668595077965 + 0.5713027065599533 + 0.684893885478556 + 1.668225806816082 + 0.6859151920623758 + 0.8158011224900357 + 1.024473169971108 + 0.5605174526484484 + -0.7576389300488497 + 0.9096875215211347 + 0.6175767372236864 + -0.4161537577909997 + 0.5088495346896563 + 0.5476722851792211 + 0.6339601342061658 + -0.006306045422751316 + 0.5799397740036482 + 0.4713993384867219 + -0.083403128637816 + 0.4313779446126474 + 0.6510757062085264 + -0.3388413420791607 + 0.2626113689451582 + -0.3569649977516132 + 0.50820676068601 + 0.8229394466911507 + 0.4958243200831756 + 1.234369408535352 + 0.09407623276619048 + 0.16842663485555 + 0.2002091519936368 + -0.07338891003129742 + 0.03331177114379679 + 0.06963817063415607 + -0.05666121342626853 + 0.08655782188589418 + -0.01629413987509927 + -0.0332371260118988 + -0.02941861722641498 + 0.01738958082197578 + 0.1508821012348263 + -0.051592030018763 + 0.2067810222519689 + 0.05302820677562026 + 0.01475648246371792 + 0.03010009527862536 + -0.1648663516653107 + 0.0986444033843535 + 0.02027653632157885 + -0.05078959067312729 + 0.04004260342727669 + -0.2910429917514142 + 0.009850227406214163 + 0.1586227363125275 + -0.08533163081359228 + 0.1673847065407495 + -0.0917935042165738 + 0.1496801847004745 + 0.05771147395976754 + 0.0631735402019261 + 0.02467558167012938 + 0.1587463118517278 + -0.03870559009042487 + 0.05765655119519951 + -0.05502951990483894 + -0.3012790946012868 + -0.1039280495160258 + 0.1063983049323238 + 0.1299338848245758 + -0.003281233343411412 + -0.06988172596811287 + 0.02815284661452942 + 0.0654020521108339 + 0.226333928109976 + -0.8343562552992259 + -0.0002100803877835796 + 0.02684384062962547 + -0.1219953203155064 + 0.06685253359104405 + 0.1429352102978557 + -0.005442904517195468 + -0.09786802994119191 + 0.1052384838435717 + -0.03206215886241107 + 0.2012229204149918 + 0.07186077200532717 + -0.05932874527873284 + -0.04265924879392123 + -0.005029992987120322 + 0.1776225785436245 + 0.03883419764649802 + 0.08355110602415086 + 0.05911197404941929 + 0.02744318552902593 + 0.03314821072530822 + -0.1156332194681546 + -0.07758888949702572 + -0.1623300604236726 + 0.0005639166436980795 + -0.09556544175099256 + 0.194410794896442 + 0.1358244714355086 + -0.01425257479015681 + 0.09425253927267592 + -0.07385767853002158 + -0.3628988036168848 + -0.2146645370879713 + -0.0401558831442899 + 0.2023585303653781 + -0.09606575710809313 + 0.04378813468096158 + -0.02788479011315963 + 0.3519728163930858 + -0.0001313508494149237 + 0.008423859760551206 + -0.268183675166824 + 0.2300554358278003 + 0.001880330496123822 + -0.1476457270882015 + 0.01403761966618388 + -0.0630537502894067 + -0.2041918066761578 + -0.04062467047844028 + -0.1682476818663452 + -0.1031124765729317 + 0.02918936363321958 + 0.05452945343404456 + -0.1460370674413418 + 0.01368646691490838 + -0.1899527644748964 + -0.01702910558237531 + -0.1713812863587018 + 0.07653604731612897 + -0.06494812002629886 + 0.01790638988306824 + -0.163161299634012 + 0.4186091936942767 + 0.03277851788802352 + -0.2322537030083748 + 0.1982227211646411 + -0.2272728848992447 + -0.03318808364409243 + 0.297722163180038 + 0.1312673666716315 + 0.02707837278671361 + -0.1045740404142386 + 0.06787272474274135 + -0.0177580833569292 + -0.05490839383191812 + 0.1308294886719442 + -0.2207755143605773 + -0.1089692820110456 + 0.04825438989315921 + 0.09779390536555653 + -0.159821320130119 + -0.1159093358272197 + 0.05504310471972555 + -0.04369590214089984 + 0.07073691346077766 + -0.2665016984645774 + 0.02388628555373233 + -0.1331219373728809 + -0.1315555893633195 + -0.06908019445383771 + 0.2312935793190567 + -0.08531872120563737 + 0.02223642415897086 + 0.001315907955975409 + -0.003219648225799025 + 0.1870041029706274 + 0.1245742096237773 + 0.007212315883091193 + 0.2933352247807992 + -0.1566204420992092 + -0.08010624272851696 + 0.1786967634108413 + -0.1574906964543311 + 0.1441132851146465 + -0.06408174708644622 + 0.0717139431529894 + 0.03420951895790216 + 0.1331460517005429 + 0.04490175496779899 + -0.1682940088864579 + -0.1606290462842259 + -0.1095605690760876 + 0.0703893083785119 + 0.1301886675064558 + -0.06285998139635339 + 0.1072014485263314 + 0.1864957025207911 + 0.1656476217731681 + -0.03771128064524416 + 0.05275133711277115 + -0.05914498255328498 + -0.2412207759451671 + -0.04341537955952204 + 0.09853843308378572 + 0.08483301958683054 + -0.02168065306972378 + -0.05806995455294194 + -0.1079272844064938 + -0.1402367825155833 + -0.2052195370357991 + -0.1461590008469454 + 0.1674809774632851 + -0.1171866023103899 + 0.1770773086824776 + 0.02092695476785725 + -0.09157510795679843 + 0.08314239556065293 + -0.01217193864140235 + 0.01153770504490583 + 0.3140648343578761 + 0.2396795677341494 + 0.2249844623340858 + -0.244831129540522 + 0.1053719321222459 + 0.09361168043526424 + -0.02266110585285825 + -0.06167914271045204 + -0.03705363258744244 + -0.005263490772896322 + -0.09384491064174344 + 0.03946683821921681 + 0.01845952648647741 + 0.06066962117487223 + -0.02945166347639823 + -0.004223972154107899 + -0.1428458864404036 + -0.08579148420848684 + -0.3255186696508054 + 0.04540112842836656 + -0.05576060017284517 + -0.01384273119247929 + -0.07305402602545237 + -0.100654644786767 + 0.005329844548711019 + 0.02934153184211075 + -0.06984474286547115 + -0.04122717181903108 + 0.03290419475050719 + -0.4133569367044335 + 0.06775182474313729 + 0.1772140735162707 + 0.003248483255291397 + 0.04296208909131485 + 0.3431333654275189 + -0.03871745538008486 + 0.1766783407641636 + 0.0460523110090707 + -0.07520341094887323 + 0.08284553027863532 + 0.1740913079788215 + 0.01809985546751373 + -0.1094076772147493 + -0.03925931024129927 + 0.1017545885000872 + 0.09301126508547274 + 0.01796674827291573 + -0.08422663634004003 + 0.1314579050325454 + 0.009934515128281765 + 0.04736214721307783 + 0.1611831029076925 + 0.07469134378121381 + -0.008688620866355658 + 0.04282709599317566 + 0.1323820885508907 + -0.1107229385527645 + -0.1133368256790011 + -0.0459486059883938 + 0.1114174586694786 + 0.26349350716653 + 0.09818252537678392 + 0.03504037872886116 + -0.1162312971726918 + -0.1591063880725286 + 0.1555748484065873 + -0.154247216803497 + 0.0490591323247089 + 0.0929430548766054 + 0.1178215250516526 + -0.1134350274363533 + 0.07244243910134429 + 0.03998721194228382 + 0.1052494456143171 + -0.04262946624192485 + -0.08725504193066186 + 0.06265232603509548 + -0.1557092102388964 + 0.1753979955966792 + -0.06733339913948581 + 0.08715931476376157 + 0.02948267836490326 + -0.008909144763984772 + 0.1563359655905267 + -0.05026344163091333 + -0.3099416532081774 + -0.02252695372927473 + -0.05322128241114864 + -0.2313971425581751 + -0.1376543196677307 + -0.08065248195315032 + -0.0335594557425421 + -0.1087889341658553 + 0.1941952195731843 + 0.27335991085888 + 0.03174973422505341 + 0.1087183032023318 + -0.07277191334214393 + 0.1455907995382223 + -0.2001838849645602 + 0.03320370387695018 + -0.06197912233764708 + 0.01410195340752804 + 0.01372864142911234 + 0.07664842345475986 + 0.03233615007575832 + 0.04381621891927816 + -0.09361364408696254 + 0.006565063126730873 + -0.02813253533513596 + -0.002449654378479011 + 0.2924301339635104 + 0.1279139857807472 + -0.1502568345185902 + -0.07645015982645979 + 0.09421012372930569 + 0.3553212819567743 + 0.2494348310081459 + 0.0275948225891571 + -0.1435876140693143 + -0.05424799028852052 + 0.2409457651046875 + -0.1426719295706738 + 0.1154469398619241 + -0.05369085059805818 + 0.01897320528268845 + 0.01275747864292193 + 0.003689019913332679 + 0.02827455430048977 + -0.07984699455104921 + -0.06797394061366296 + 0.1212564950450237 + -0.1960618137453715 + -0.09683425857490388 + 0.1625091151723048 + 0.05735260304386951 + 0.0649558780618292 + 0.05393729792221152 + 0.05771647975747233 + 0.112328277324155 + 0.2010842151124908 + 0.1299469560205206 + 0.04705999169372613 + -0.07344074375644771 + 0.1731101441377517 + -0.08521136720832667 + 0.03103926449628581 + -0.2369087256316569 + -0.4057361910769023 + -0.1802663568471768 + -0.06830016428428791 + 0.02065208732647386 + 0.1304358199585746 + 0.009291199244945198 + 0.03131300120451403 + 0.2614638361003256 + 0.05726215855315517 + 0.1008871314671699 + 0.0776934461461917 + 0.2411573591019756 + -0.108961076734261 + -0.03143384627224154 + -0.08869558332854235 + -0.02620386274025086 + -0.1944154308886958 + -0.1464571280866085 + -0.08211537452518618 + -0.04525100538866837 + -0.01480706021524014 + -0.02622405533125793 + -0.03222492058576161 + 0.05531493263417533 + -0.09536230584591553 + -0.2657933462823083 + 0.003511554192852637 + 0.1040045950633752 + -0.0643319807725756 + -0.02456055406858055 + -0.1527368084273734 + 0.2039156838377204 + -0.04614595459571332 + 0.1383953210780827 + 0.15335789427913 + -0.09469437658861783 + -0.06939368529485657 + 0.02259770448006768 + 0.09063562523011133 + -0.03506968044716959 + 0.004689551738990857 + 0.0701692225806361 + 0.1524524551345627 + -0.00887168264725475 + 0.0612795715519656 + -0.1880743639803473 + -0.03419202920347694 + -0.2205024044827757 + 0.04316044181250382 + -0.1860162859585104 + -0.2952115152104636 + -0.08086769540225973 + 0.1271400705169667 + 0.09997258260052364 + -0.1484255014522047 + -0.06001497231748486 + -0.2055772052697093 + -0.06461080274518102 + -0.1154168540652843 + 0.2450778606519572 + -0.09774093966489961 + 0.03361481812357046 + 0.1274484861655066 + 0.04658229224015976 + 0.1682097468429917 + 0.136374068518749 + -0.06650469470777762 + 0.1454777819236287 + -0.0157773352449335 + -0.09863551419750645 + 0.4622932525711828 + 0.04710157842102276 + -0.03443272187990695 + -0.2832439423713189 + 0.1638567961588143 + 0.09442389295231869 + -0.007576265363466159 + -0.2879655869659259 + -0.0743581323142373 + -0.05042343051430474 + -0.1172837493064219 + -0.02559801558175114 + -0.07067220311485925 + 0.1125519225973421 + 0.07585188970971808 + 0.2420419973543043 + 0.179652579607638 + -0.1280025305739423 + 0.06818308740058765 + 0.07556006179131504 + -0.1940808202141242 + 0.04345232351334239 + 0.112443249129403 + 0.0989908603263522 + 0.02088908872875778 + 0.05790370714827859 + -0.01796710156257132 + -0.2792180665172357 + -0.210693400008256 + 0.111017788230398 + -0.0298717163527407 + 0.003758143044481368 + 0.03771808997590925 + -0.07308416037773038 + 0.07385573875491853 + 0.2317103066600028 + 0.04775874399765781 + 0.0008162012429432146 + 0.1167119728324198 + 0.2494491214796501 + 0.03502285208264171 + -0.1993792192288653 + -0.02992864390518694 + -0.03988931355877789 + -0.04845462260168403 + -0.08525205846589816 + 0.06458784740877944 + -0.1457621300482446 + 0.2372288490763193 + 0.2315088860789077 + -0.02906439075567777 + 0.09043893831471891 + 0.06806004901408956 + 0.1773685381359586 + -0.1002895339525629 + -0.1030474940028186 + -0.06685135721556766 + -0.009494480748024404 + -0.08233077107660457 + -0.06795900382431448 + 0.01984187301448656 + 0.1879683707803882 + -0.03264058325964003 + -0.1029122265241363 + -0.02568932697075629 + -0.2521045791709349 + 0.04317657967759692 + -0.05645267796085152 + 0.2238174134328292 + 0.1057869088465305 + -0.1028237655007978 + 0.04697808684187352 + -0.02692511781227247 + 0.07514191727511906 + -0.0325372214288146 + -0.114105831706632 + -0.1332982644144468 + 0.143888682494877 + 0.1923741971777899 + -0.009441879578553006 + -0.05305916645584323 + 0.3655496397624907 + -0.1047726696649691 + 0.09839744252839218 + 0.146262029875463 + 0.04783809674776492 + -0.05961764261014981 + -0.2303543547302474 + 0.1239376438255468 + 0.0902998117749161 + 0.1882512706033346 + -0.06098355383884435 + 0.03492676899891604 + -0.1279398887896151 + 0.07494299689706893 + -0.06867091735070924 + -0.1011853585030417 + 0.002110145973569824 + 0.1122651892907851 + 0.2245176403570509 + -0.06151859448723768 + -0.1905807695250177 + -0.1042842346187136 + -0.06993332850885071 + 0.04984860043000781 + 0.04047400265423855 + -0.01068933422058112 + 0.04823808865646682 + -0.1243800732412288 + 0.2316511829482659 + -0.008037639587616455 + -0.1778516712913076 + -0.2052946682411498 + -0.1687083974501712 + 0.03459655001895804 + -0.006630064203240225 + 0.1006584019709 + -0.04244122159478375 + 0.08159497935877594 + -0.01266493479379308 + -0.0288792121905993 + 0.1682379198614404 + 0.008728001158971396 + -0.1555792526281528 + 0.1635304848911861 + 0.01630985404599713 + -0.05296878016437333 + -0.01537197781945606 + -0.1207389398644774 + 0.09168035008466739 + 0.2925462203322529 + -0.1598920960179509 + 0.1746087338012031 + -0.04144942997718663 + 0.02055106366848109 + -0.04187894692093149 + -0.1177700554574433 + -0.067864386769004 + 0.04982664374529477 + -0.03477383810396281 + -0.1026457900365856 + 0.02389394304207002 + 0.1574495591570526 + 0.09739512718297694 + 0.1106261083233014 + 0.00801404846251458 + 0.1613322442360942 + 0.08616735645223149 + 0.1859789764165273 + 0.2474742546739467 + 0.06291682520729272 + -0.2030437971549434 + -0.05382540471511167 + -0.03812255457064273 + -0.02457863077762059 + 0.1781307308649321 + -0.01237139654450955 + -0.00114844506680325 + -0.1298759640158143 + 0.05817115711263673 + -0.3530874584580207 + 0.1136046931567839 + 0.03309808390053976 + 0.08131867939377826 + 0.1831587802279089 + -0.2034076083246985 + 0.04731554699004937 + -0.02775319654121298 + -0.1410403927210198 + 0.06762738875729439 + -0.1061971942924593 + -0.05350723567508586 + 0.07649038651118326 + 0.08921996521851855 + 0.04791840793953057 + 0.2480402245018685 + 0.06247923214066559 + 0.1280832419886825 + 0.1330282338987272 + 0.06854235337126194 + -0.03975494973853664 + 0.02402641448972406 + 0.145413219878447 + -0.00350099405653656 + -0.09810997341003236 + -0.1500518919795678 + -0.275020134408748 + -0.07505396684635902 + -0.1457041606386233 + -0.3393187166056383 + 0.1331571973328037 + -0.110283055446299 + -0.02562766355709294 + -0.0558913701239514 + -0.0540756304549689 + 0.02139833868657917 + 0.2205169077130332 + -0.04415656578896279 + -0.1615604785746199 + 0.03657934722427986 + -0.09425250958089726 + -0.02845521308420071 + -0.08266720616518415 + -0.2489411019473962 + 0.01551150807894458 + -0.1277766426254786 + -0.1691337461890193 + -0.09273232958486907 + 0.0845434590416053 + -0.0817751520007895 + 0.04361955426464188 + -0.262435290409621 + 0.1442086180490096 + 0.07815467566285009 + -0.2562333574160348 + -0.2275846595756743 + 0.1486191045161695 + 0.2855672884338436 + -0.1398290720386017 + 0.1731883617890136 + 0.009957407779010814 + -0.09448514311850834 + -0.1593999127820855 + -0.03854423723202845 + 0.2118057062761691 + 0.01930063332334164 + 0.1506572182847392 + 0.2308755807189392 + 0.1442402790078226 + 0.0530624584100496 + 0.04252502304683763 + -0.1317695271211297 + -0.05924126515106762 + -0.1097744994715752 + 0.004630728843213914 + -0.106197543538807 + -0.0998591148670562 + -0.1604477184855824 + 0.2646560396434452 + 0.1480768751094904 + -0.05162166226015313 + 0.02309799163797649 + -0.2814022399810224 + -0.02969994659345677 + -0.1395323233630525 + -0.268298986889466 + 0.4146699577137405 + 0.1014612430879724 + 0.1821610284707323 + -0.03092092842970402 + 0.07234289713535821 + -0.01041232905007928 + -0.1474829460290751 + 0.03362189986808967 + 0.03201243006072946 + -0.06957364486403016 + 0.0899445395012064 + 0.1935554792783035 + -0.1199422743478855 + -0.06353686911752858 + 0.1364805514280732 + 0.05643413420523858 + 0.03690107874732951 + -0.3773551167868887 + 0.05649944329596363 + -0.07684561102210888 + 0.04350290182599659 + -0.07919882384150727 + -0.2039564331696269 + 0.05629593168269784 + -0.0298110525392648 + 0.1717338301460992 + -0.01785708941003036 + -0.2024444721638224 + -0.07202577012263808 + 0.07234709133240455 + 0.06584590085102029 + -0.1078776389011856 + 0.1029176823718753 + 0.06760606622634731 + 0.05016141636702857 + -0.00339974708292407 + -0.03646702814256569 + -0.04890538611847352 + -0.009125287635034774 + 0.05146855159228438 + -0.1333717654033707 + 0.08210873107533997 + 0.29076471220691 + -0.2153016200718147 + -0.0584331067687738 + 0.1027377358039736 + 0.05707947341335337 + 0.1667090660184277 + 0.1976291448841175 + 0.02705729925436348 + 0.01796950700497731 + 0.06239382005319734 + -0.05082587991023677 + 0.09761408457778654 + -0.08940644377316814 + -0.06202291503023948 + -0.07776493497605269 + -0.1336187903269319 + -0.3230132731727937 + 0.2026037072666919 + 0.06478741284224945 + -0.007670666588370619 + 0.02412129735770062 + 0.1549891824772819 + -0.02400206066288015 + -0.02870356578221772 + 0.2000413014906103 + 0.08609323070443986 + -0.1638678325480539 + 0.01214314996945172 + 0.07249614106737805 + 0.1439697415499205 + -0.01725091313445289 + -0.1469376673305392 + 0.02595477068778226 + 0.0656249719102938 + 0.08198805995748196 + 0.134772323868445 + 0.01101929296878628 + 0.002542188397544281 + -0.08349254207437565 + 0.1639297528158151 + -0.3768610749072907 + 0.1193802020527624 + -0.7697569130806157 + -0.2212924141519562 + -0.1681963510971431 + -0.3145464746558496 + 0.06697730222334126 + -0.03112173839743644 + 0.02307491489955696 + 0.1779478861056873 + -0.1247043537880247 + 0.1007967404580479 + 0.2357077424255827 + 0.06232940371195738 + -0.2778913971415855 + -0.2392497454953789 + 0.08819940141049225 + 0.03000924825976448 + 0.332884041643997 + -0.1303595676940465 + 0.03196268480698171 + -0.1167470328550719 + 0.1892232447370581 + -0.09112310014241388 + 0.1042936618050788 + -0.2723908567928376 + -0.007807977398082571 + 0.2543584458207669 + 0.04754557711456058 + -0.02702586450417269 + -0.11247871762982 + -0.09908603805634476 + 0.1788009668591205 + -0.1479500846715779 + -0.1273106699193646 + 0.01493238263591523 + 0.006088374554609633 + 0.20848851010708 + 0.02960787768672649 + -0.1871474654099734 + -0.09261442327916931 + 0.112615633171938 + -0.0477977622372065 + -0.06855526883756495 + 0.09516219703305855 + -0.03771138000669634 + 0.06536359649796689 + -0.213911711083961 + -0.0184447990250914 + -0.1661792336858582 + 0.02508859994982515 + 0.1692517069104558 + 0.2603517069755765 + -0.1611989560822039 + -0.1185667809432909 + 0.08500005984630972 + -0.1794990547496751 + 0.1082623427790162 + 0.2439491750351128 + 0.1222696381705514 + 0.1972043484281278 + -0.1028242609241676 + -0.01791131640789705 + 0.09985342344774374 + -0.2370203511062225 + 0.1084863755220742 + 0.1243641419869446 + 0.004428783435230674 + 0.1166853829263854 + 0.0006417599748490489 + 0.07671629582011849 + 0.3423576057170364 + -0.1286038917737745 + 0.01098050492101829 + 0.1378661619571264 + 0.03998660684459197 + -0.01005031263122967 + 0.1086828262986002 + -0.01727507920194267 + -0.06986219185448164 + -0.01427371425125049 + 0.0885045711825615 + 0.009883819379971704 + 0.1894430080463225 + 0.03484655823368423 + 0.214884581387276 + -0.07130934093027447 + -0.04340437887562161 + -0.2022571389717478 + -0.02501150279020167 + -0.01278745513540494 + 0.06716704213823628 + 0.1851014372250321 + -0.194051534415858 + 0.1788158973775606 + 0.03188963064137908 + -0.08253812956052718 + -0.06170568993328969 + -0.05737790184588787 + 0.03885178012826314 + -0.01354704450405351 + -0.05551526757755507 + 0.0007761519328859751 + 0.2757262930258098 + 0.1703222680758462 + 0.03583533982022052 + -0.1184735909773455 + -0.2484053745821439 + -0.08398857949189971 + 0.1018498084782536 + 0.06636905895411564 + 0.1124592143743815 + -0.1347358818391486 + 0.1518183767349677 + -0.03562442174682971 + 0.08418917643700233 + -0.02920869049669517 + -0.1745529973124222 + 0.1037633610308533 + -0.06235644863091044 + -0.01196390537163998 + 0.2731464249223822 + -0.03804965905807817 + -0.06399023174599729 + 0.03547330035402781 + -0.01804496861815282 + -0.1024977563933929 + -0.04501010768300148 + -0.04910453547920961 + -0.01728294054364678 + 0.1572386315096017 + -0.06734885497082059 + 0.1443934100694797 + -0.1436615543943069 + -0.09466828377217448 + -0.004330153042636131 + 0.1913010148017029 + -0.1368754415116969 + -0.00208609509175319 + -0.1312275937571549 + 0.07444739943629684 + -0.2329053404501217 + -0.2353707836953204 + -0.4670382295590909 + 0.1676718329911781 + 0.1256197734101599 + -0.1527130733158328 + 0.1394342797512396 + 0.005729875436846226 + 0.007173844000127672 + -0.03541315470374997 + 0.147206034049565 + 0.272633085022892 + 0.01253635783119945 + 0.08281616319501042 + 0.117315213179572 + 0.106769320571199 + 0.07978772367351653 + -0.05038937449415107 + 0.0364650804498464 + -0.03399044141345221 + 0.008989999415654336 + -0.06135875114513663 + 0.03701824757004867 + 0.08834510093795316 + -0.1278252370645362 + 0.1574450128407891 + 0.1655971666411339 + 0.01154446735174964 + 0.02891216529006158 + -0.1510320590519443 + 0.05204112594114344 + -0.07593744680166088 + -0.4138633883342974 + 0.2971610789853015 + 0.1032389457227845 + 0.042722708165842 + -0.07398693402250441 + 0.04680673326062725 + -0.1550704335285432 + -0.02835355382795042 + 0.001013562389351253 + -0.03415613998520712 + 0.1035506496875199 + 0.009702094458653499 + -0.03053279813549682 + 0.01911176807061997 + 0.2017057983970884 + 0.1156356413096757 + -0.1595455041757185 + 0.09890136233921518 + -0.1778554275110646 + -0.001807292015045894 + -0.1906967933769538 + -0.07257211703374573 + -0.06248519921819782 + -0.01249856873485695 + 0.09398110471902847 + -0.02160325627512833 + 0.1245407646495057 + -0.05232644551298546 + -0.1790765773523827 + -0.01897172327316724 + -0.01962115402213288 + 0.2119706354113583 + -0.151308906841208 + 0.03418825523820215 + 0.1537911475109066 + -0.03595210444858842 + -0.08491740445548025 + 0.0327406120855941 + 0.1256431957379078 + 0.08999861349306743 + 0.08760907484101546 + -0.1039145574117216 + 0.06398995044988803 + 0.4298587134553199 + -0.06102954219851842 + -0.1014616362107472 + 0.07713828412731696 + -0.1444581254181776 + 0.2307687752129999 + 0.2334921997037168 + -0.05998435740010866 + 0.07889161262700368 + 0.003578566114233683 + 0.06149617990064773 + 0.1811831206069739 + 0.08757078068453107 + 0.03400379089270179 + -0.131330229422718 + -0.1777631994598496 + -0.3290570890762421 + -0.02835966373002344 + 0.03524444326120029 + -0.1080349870804105 + -0.01195764247083099 + 0.04683810773614416 + -0.02230029202487139 + 0.1169618632296458 + -0.08851404824049508 + 0.04255511064689352 + -0.1562474583322839 + -0.08122905722240509 + -0.1704179301914067 + 0.08537830096966534 + -0.009797310754328685 + 0.1414731548451054 + 0.04627016369924405 + 0.1377370974472886 + 0.2636392257951558 + -0.2817031995233829 + 0.09831748910435606 + -0.06839020807394663 + 0.1280549372926579 + 0.148760866245911 + 0.01898582240542632 + 0.0933142153584746 + -0.05057622296644462 + -0.2832701052078901 + -0.1028754888172324 + 0.1403578542345698 + -0.1833699674137213 + 0.02141267876055514 + -0.2998055512704632 + -0.06539238256887613 + 0.02530649266748932 + 0.06850147636661247 + -0.001889913437682705 + -0.05283586200400071 + 0.008108253139624917 + 0.08240507879696403 + 0.04560331658201312 + -0.0699857999776398 + 0.1086942793177416 + -0.04494937655217514 + 0.009100631658522327 + -0.07290206367182554 + 0.1438805512608022 + -0.04704044584113247 + -0.1711495592485757 + -0.1122872098904535 + 0.01936821183861987 + 0.06438997344154014 + 0.04255883302612039 + 0.00973666537978766 + 0.04875120868678354 + 0.01188379936070664 + 0.1177921661224317 + 0.1475238640848043 + -0.1295175158050947 + -0.06133022169748133 + 0.2547427913807691 + 0.05325537204173097 + 0.05816878790942419 + 0.07433569920857755 + 0.140841277859727 + 0.08534630320085594 + -0.03993419415585034 + 0.07343852091749987 + 0.1447256254233307 + -0.05922094075484226 + 0.06351622340299432 + -0.2623012473648039 + 0.03452007042708084 + -0.1016908036134709 + -0.001857342774820718 + 0.08004858115146685 + 0.2262818666995441 + -0.06603100555720481 + -0.2053596158294931 + 0.05147830504666341 + -0.1911422727890306 + -0.09706700280155754 + 0.05689820173409721 + 0.4055416755968649 + -0.06045015747968319 + -0.07215582679990599 + 0.09047104314226406 + 0.08792909000318049 + -0.1384239188079479 + -0.07526870151890001 + 0.05430573940157028 + -0.03061862974998544 + 0.1920483112105993 + 0.01361571257424987 + -0.2022986330679549 + 0.08576621131137273 + -0.1006769503700991 + -0.04829909267755558 + 0.07445329021491819 + -0.05785914769218926 + -0.000288026838702963 + -0.06039200903907745 + 0.04740370916698566 + -0.09210572312764646 + -0.008982897615944547 + 0.2089714371613931 + 0.003802995174447648 + 0.1282832576030806 + 0.07085126629284354 + 0.2575779573336598 + -0.003245695368985666 + -0.04645043743831927 + -0.03592711768097116 + -0.01501835018022073 + 0.01222520233100322 + 0.05324069261113746 + -0.007630051770320241 + -0.06519217637440303 + 0.2772122564727599 + 0.05421092793840426 + -0.1795493423378846 + -0.1043030228048571 + -0.2096157493654643 + 0.03161970429654114 + -0.162957657579994 + -0.2029210829360478 + -0.07873777224210178 + 0.01549336902258435 + 0.1195119318163313 + 0.1628895010184224 + -0.2331677475272382 + -0.1179024507595966 + -0.06601264399183283 + 0.01218647724486012 + 0.1246464607113467 + 0.04651012132072902 + -0.09122572593482157 + 0.1304489894385491 + 0.02460312741297827 + 0.1498139448125036 + 0.1294024976467686 + 0.002203916297196569 + 0.01400735487612577 + -0.06904451846888261 + 0.02244753505164843 + -0.1572124025941077 + 0.1379598358264871 + -0.07694981373413404 + 0.001838132802904508 + 0.03666987814968007 + -0.0410467125186896 + 0.06264110288488313 + 0.04978779246132818 + 0.2266903342914401 + 0.1355720700670011 + 0.01580792019937535 + 0.3992858367294341 + -0.01517818093267168 + -0.05642782056978031 + 0.04389038142601238 + 0.2769661938885635 + -0.2094644741193975 + -0.01666146892767501 + -0.05902280139308708 + -0.03686782691408207 + -0.1997312222186776 + -0.09509481309887594 + -0.1845015267858572 + 0.06017821034235248 + 0.0803345684071237 + -0.2231198267850516 + 0.1196152587195683 + 0.0006534887741532187 + 0.0693280567312691 + -0.0999848616946544 + 0.04983856620229732 + 0.1166291413501656 + 0.01231080972420872 + -0.1553107478114333 + 0.05633787454245718 + 0.0131816237445624 + 0.1469588545322484 + 0.004650806424363286 + 0.08171864806490213 + 0.007667240734114789 + -0.2769519987192213 + -0.07068737420795315 + -0.01335151611115145 + 0.07934103151738113 + -0.05277150963284991 + -0.2204514564377206 + 0.06770385071557219 + 0.01349377337296595 + 0.06724870882152342 + -0.07321971693821221 + 0.0689815566096212 + -0.06556822853459073 + -0.3405769780780462 + -0.2079202715642693 + 0.06874620651005929 + 0.1014448664188468 + -0.0899575247326684 + -0.008633996238676197 + -0.1318760825377482 + 0.0537456516068722 + 0.04143429301499196 + 0.05769910880675788 + -0.02517423883738 + -0.0243614922091839 + -0.09878680065472323 + -0.1673317736328157 + 0.06266832909058168 + 0.1621691492551542 + -0.1143393628213833 + -0.05096783041597443 + -0.0329197429046467 + -0.0235137527585709 + -0.152886255965112 + 0.05093560464103159 + 0.0413186428856004 + -0.1118916283589024 + -0.1973663614814243 + -0.04348765532040831 + 0.06031361729075244 + -0.05149962671389304 + -0.1186287422520261 + 0.07882155850965274 + 0.05028301695623184 + 0.1805170097025446 + -0.03834334654557187 + 0.008261548203595932 + 0.1198297017706722 + -0.1208120540244246 + -0.06950348113101155 + 0.1907045386237932 + 0.08165601937573704 + -0.01614123998677435 + 0.117706334185299 + -0.1244341417566289 + 0.03239572909980223 + 0.2268711577146954 + 0.03526082219974716 + -0.05546513529591963 + 0.05958464319749743 + -0.1265909351671086 + 0.09675752816798573 + -0.1207550094341743 + 0.09779956939124441 + 0.08801758535309609 + 0.01280399571287237 + 0.1082388938336093 + 0.03515949888262818 + 0.04812613344167038 + -0.004193939645691374 + 0.08946323725090613 + -0.09631050033452093 + 0.3075350177834638 + -0.06634672135964825 + 0.07925227109529463 + -0.1409078912558518 + 0.05056851836101016 + -0.01700815625902306 + -0.06037943269559536 + 0.09892857925799212 + 0.08207875678191826 + 0.0401805078370504 + -0.04691411048033799 + -0.1662293308415775 + -0.2386409089095987 + 0.1586092106306007 + -0.0204356756327099 + 0.2627466381613962 + -0.1157412604526542 + -0.03923621018256393 + 0.3193006336495912 + -0.01181507447535234 + 0.1254963820836255 + -0.04696239711554804 + 0.2112234161247342 + 0.08163203374064897 + 0.3712691614291372 + 0.2283796358644019 + 0.2420889510666089 + -0.281673795428583 + -0.1389834210322841 + 0.2943637510606202 + -0.1975271758184561 + 0.1195817368993112 + -0.2066886502902928 + 0.1033015872255916 + 0.1029312706874491 + -0.02355045691314823 + -0.03711032362622817 + -0.049928013128906 + 0.0146609823226943 + 0.1068268367986153 + -0.005238915606817294 + -0.04449246861487063 + 0.0739165699188737 + 0.1175015099835593 + -0.0243198957171463 + 0.07690788118031312 + 0.1096078461382219 + 0.05853528842874703 + -0.1919779200916936 + -0.05562009028453184 + -0.03235072832237598 + -0.09081991578068289 + 0.1105893907789839 + 0.00280376974543959 + -0.07294169392772441 + 0.0593325025186879 + -0.0829750906869218 + 0.2424132404060261 + -0.04390007976447648 + -0.0873205133527018 + 0.1913256250076217 + -0.05789972447599219 + 0.1191838521977546 + 0.07900534964962966 + 0.1129964413566027 + 0.03845314612416371 + -0.01317128353652406 + -0.02754672704586516 + 0.04604311801172246 + -0.02687915964511522 + 0.1191444452592128 + -0.2392759431145069 + 0.01014355816765817 + 0.0580615715529177 + 0.0914704018910612 + -0.008884776013316038 + -0.04174903019054066 + 0.14955696141056 + 0.1336423278175688 + 0.02123406414716683 + -0.1375520801272396 + -0.1887516837003186 + 0.05191888771528524 + 0.2925449608997491 + 0.03245073533332654 + 0.02192667445428681 + 0.1404058648788435 + -0.02028972204692782 + -0.04913767326933603 + -0.002364782444934244 + 0.00965292158421107 + -0.04144962060783889 + 0.09228770761422608 + 0.04112390328947663 + -0.3967713971507376 + -0.03255896326177396 + -0.09554414475173044 + -0.05747590975060092 + -0.05546432616814327 + -0.000166187772064942 + 0.1062606880514689 + -0.01455756280987187 + 0.08262341961431828 + -0.219871104445319 + 0.03597020818609064 + 0.2315650637310843 + -0.03958668798802647 + 0.07855633440888411 + 0.1030849307433538 + 0.006127776655955027 + -0.03728892565704994 + -0.07241346010985282 + -0.08780590558102311 + -0.01740091800666538 + 0.06585768438947309 + -0.06094450606352605 + -0.09395148275873738 + 0.1026817079466833 + 0.1932802332254911 + 0.162764433792275 + -0.01324235558117182 + -0.2206420718282719 + 0.009920626486896266 + 0.006057614362890605 + -0.1411360490903299 + -0.2164550302726913 + -0.06939873057915501 + -0.498731101783119 + -0.00385814543924401 + 0.2153053789400234 + -0.1669108972524112 + -0.03539562399349915 + -0.1272513348545094 + -0.04215578131798401 + 0.2145207734956126 + 0.1331724101917932 + -0.1098188629910101 + -0.02168924754782288 + -0.1106534730987053 + 0.1085657570585296 + 0.1251350262479071 + 0.05778852887854908 + -0.04742373437661727 + 0.01797717897646522 + 0.01645073086220431 + 0.2664561481422336 + -0.008392111472630187 + -0.04528896930336532 + -0.00216995855390202 + -0.03916490066317626 + 0.02198220012055105 + 0.05555817935154898 + 0.07599306511099609 + 0.1362888427705322 + 0.1554237734967745 + -0.04551202934879932 + 0.1069293564908843 + 0.1180088398692217 + -0.1133149481407102 + 0.08121494920599147 + 0.2646036558026292 + -0.2680881726094901 + -0.1947311428580881 + 0.005697175228141779 + -0.024058085666542 + -0.09151138411650346 + 0.2790377689348492 + 0.00143556469283001 + -0.01545180402031711 + -0.1926163179636097 + -0.07773657840772526 + 0.03577573808018113 + -0.04838235032545117 + 0.03068462739239929 + -0.1387770103835139 + 0.01909701250847535 + 0.01736687926195046 + 0.01883761066448333 + -0.1129357845163832 + 0.09855311989182682 + 0.004589081249278285 + 0.18725128783944 + 0.01550393360272544 + 0.1093913651796013 + 0.02628663360875518 + -0.03829388673206289 + -0.105746267779198 + -0.142118170935968 + 0.05449591018541769 + -0.151018406625868 + -0.153723790640134 + -0.008451157597419039 + 0.08925480787582508 + 0.04699635773247333 + -0.07590012352052174 + 0.06014588467749803 + -0.03237137826702115 + -0.3183451703992329 + 0.0875859134231752 + 0.08964738038496677 + 0.2821280918359231 + 0.005662018097984336 + 0.03056095026899291 + -0.1882400506327246 + -0.08449772351404176 + 0.07991338212418417 + -0.07326873742972478 + -0.1863414254955279 + -0.01319297352559068 + -0.01449668152337194 + -0.1261539684963731 + -0.1883329468916585 + 0.1423233693263666 + -0.08255587111893474 + -0.1141101550114962 + 0.03695196019278594 + -0.04072939643458205 + -0.1816130657213404 + 0.08586036121206912 + 0.05124622044257115 + -0.2251892885789057 + -0.4797212360798791 + -0.05549447976051809 + -0.1733223006890926 + -0.02810359722888719 + 0.04877735500991873 + -0.191666458982011 + 0.05942958732370112 + 0.1671513379397107 + 0.1094287220875946 + 0.1247558320833959 + -0.06563015056961696 + -0.05701115550338574 + -0.03552623205876849 + 0.02987451744304551 + -0.171299712843539 + 0.1255319518586041 + 0.177864398040107 + -0.0907314208486666 + 0.07818614115408005 + -0.02216558399800002 + -0.1202248200307474 + -0.03927548598722567 + -0.06580683250926828 + 0.04584251582050356 + 0.2291711708987619 + -0.2292464328148839 + 0.005712488594544227 + 0.001411987182642534 + 0.1437168015077329 + 0.2207250968630461 + -0.03040152824312825 + -0.09163135049325133 + -0.05553346446533728 + 0.2893526675049227 + -0.04377551385726801 + 0.2571736983640531 + 0.0315288253194958 + 0.07015499073129612 + -0.05599623927470815 + 0.04752956918115923 + 0.1600765040849279 + -0.005855937437852521 + 0.1274030475061361 + 0.1664775049021864 + 0.01529660960014022 + -0.06400075394324004 + 0.02249443258044355 + 0.007313269269809203 + 0.06226120378549171 + -0.06515344424510049 + 0.1568628708771108 + -0.1460478268205407 + 0.003509720329546019 + 0.3147860634711218 + 0.1067427958971875 + -0.01232217623658509 + -0.117080571480174 + 0.1114377531566743 + 0.02986809717666046 + 0.2917139776371681 + 0.1488158375149453 + -0.1020770229650464 + -0.2724511974927713 + -0.06846503524543952 + -0.1216571076104225 + -0.1563323908332596 + 0.2482538139343893 + -0.05330376867448976 + 0.04077766875038313 + 0.1289781526280537 + -0.01950364386916388 + -0.03131871028591678 + -0.02393909763780365 + -0.04003190736139422 + 0.09177588796181167 + -0.03135089689512027 + 0.03817521828212919 + 0.1550290015856702 + 0.1491135104682224 + -0.05776170485294529 + -0.0606283708625731 + 0.02420577837027465 + 0.1096046698416483 + -0.06832501046485764 + -0.06025481187237652 + -0.05713198949008493 + -0.1115617925067333 + 0.01732638989195593 + -0.05138089165158981 + -0.1726948431105822 + 0.1561199121907351 + -0.09347701987379298 + 0.07120136997733857 + -0.04899064095725596 + 0.01018054910601599 + 0.1420625571236766 + -0.02194993127520828 + 0.165452099447372 + -0.01742395167695984 + -0.05992497363119213 + 0.1033815810803336 + -0.05653441988631364 + -0.0388155111464341 + -0.0166015167043805 + 0.0274138125074293 + 0.101805240598185 + -0.07729067099646124 + -0.06188927731361168 + -0.0100185248292066 + 0.03460900093152912 + 0.1226685406386579 + -0.001757099748671331 + -0.08839696288114754 + 0.1588837040266128 + 0.163601062828788 + -0.13826633220042 + -0.08152173912197842 + 0.008506746394785361 + 0.07042556131263193 + -0.1828657545808618 + -0.03848807844263183 + 0.2606417611079284 + -0.01265122240910012 + -0.09397630781127818 + -0.09748902091685237 + 0.105866264912152 + 0.01896539015218655 + 0.03727952419280388 + 0.1356579535941467 + -0.2376481909952 + -0.002655511764697968 + -0.1743034157769036 + -0.03230914849792802 + -0.04919283048200387 + 0.04992690302660464 + -0.1289717379605334 + 0.00102616320028599 + 0.03478821231647943 + -0.1769792199015237 + 0.05763456781085124 + -0.03671818539191991 + 0.1008802439141509 + 0.1136148027650005 + -0.002567505373993753 + -0.2756069303559292 + -0.158115294759348 + -0.1086499956201196 + 0.002846788351640035 + -0.1189305369308229 + 0.0311792838299531 + -0.2239770597758744 + -0.08231036079318614 + 0.08862385163541975 + 0.131008945252178 + 0.1907787404319429 + 0.2709292772826193 + -0.08307084287653484 + 0.03446911300784438 + 0.01750728010709182 + 0.05835275312271333 + -0.08604719696999655 + 0.05547809569775107 + -0.2553890780051052 + 0.02715648753903925 + 0.1507507653991545 + 0.0519486834894145 + -0.0210808836261286 + 0.03290650143910099 + -0.1270844254729972 + 0.1132300562737093 + 0.04159665516818557 + -0.1948375096323234 + 0.05739364360134825 + 0.04914049978626839 + -0.02422684163367515 + 0.2950433175222979 + 0.1519390042565463 + -0.06276568150556379 + -0.09561077032176436 + -0.0008378532471674976 + -0.1806188062236245 + -0.2420778639017236 + 0.06189512960544813 + -0.03872342988893834 + 0.2508174006510015 + 0.1248760017255552 + -0.1466699934890679 + 0.06194452024505161 + 0.07994076107156113 + 0.1541741990563387 + -0.008523247745018094 + -0.3862841820194676 + 0.06513823835110087 + 0.06359201764578154 + -0.0009936793314582546 + 0.2027632786253278 + -0.0827394422553194 + -0.3187135152576908 + 0.04662790662305236 + -0.01161450013403172 + -0.02961184580446037 + 0.2670706588229759 + 0.05214539555352883 + -0.1203018171547773 + -0.4478927277556519 + 0.1427811915174739 + -0.0009452916897276462 + -0.05958411841878353 + 0.03568905427264147 + 0.1088453123567649 + -0.0868523306888092 + -0.01843269790782425 + 0.02669644607712607 + 0.1368932942382582 + 0.03779970347539997 + 0.02211521663639291 + -0.08950440177402666 + -0.07478127170514788 + 0.07233690342985652 + 0.02634823503006173 + 0.1406981381324208 + -0.2896216362595403 + -0.1121983138388147 + 0.07196330086151316 + -0.1553042879140343 + 0.03637390451718276 + -0.05687159695765016 + 0.06919151073825189 + -0.01805904709167047 + -0.01148728056394477 + 0.1091348561167036 + 0.006320162599893106 + -0.2796085243257688 + 0.04739100273532246 + 0.09121740265040824 + 0.02640660763106167 + 0.1243318128016849 + 0.0678073515026652 + -0.01969988734011586 + -0.1169717251247893 + 0.09389876178033754 + -0.1723059167997276 + -0.03750938125555992 + -0.05872270975314106 + -0.06340521882151837 + -0.1344028859715276 + -0.1588560293136797 + -0.1688707989086347 + -0.1257175256489785 + -0.125088715520732 + 0.2054866846531306 + -0.01506271934864957 + -0.1193881940972365 + 0.006854672134935615 + 0.04752726548117205 + 0.1124313047487734 + -0.2345716043131754 + -0.0966784526190799 + -0.07068464232571015 + 0.01736857233411952 + 0.04488167006610325 + -0.2843837732643927 + 0.10716574280311 + 0.1666004751499099 + 0.2857988321304801 + 0.122947875889353 + -0.08663222981928188 + 0.0212658468879969 + -0.003613203808198238 + -0.09128479640783342 + -0.2531883278119825 + 0.1815634810104498 + 0.08845489272367121 + -0.05233137768136104 + 0.08031762182304369 + -0.2155777146411779 + -0.2564823595474058 + -0.03019130441808567 + -0.1797136818846594 + 0.05377877052887539 + 0.1096448138915206 + -0.1479548314371374 + -0.2690653689962727 + -0.04255533440371613 + 0.07790825620708147 + 0.3199944979618799 + -0.08049724751558474 + 0.139398263929424 + -0.03513301979550565 + 0.1557230323367141 + -0.1043800105403567 + -0.04915709973821722 + 0.1740392832053469 + 0.07850578662337659 + 0.06900135804453329 + 0.1543174396321019 + 0.1913021203470564 + 0.03248262135533719 + 0.1362352004509483 + 0.03820012662259802 + 0.02465376305200654 + -0.07973176671490013 + 0.06660671848250377 + 0.18871219108177 + -0.008093631404408198 + -0.1767246417538758 + 0.00990266015180156 + -0.07132583087173691 + 0.02628871489469766 + -0.01151204088869364 + 0.3209454112733626 + -0.01572949438450685 + -0.1179416333477361 + 0.02767486872290684 + -0.003196235972921697 + -0.2018400719502092 + -0.1443658218393715 + 0.1409700805900654 + -0.1374062844011678 + 0.1566387766450519 + -0.01464142325283152 + -0.09386910081568539 + 0.1940871551473544 + -0.0009229305722659523 + -0.1003453469074656 + 0.08707272424241898 + -0.04084866700580461 + -0.00835848653063914 + 0.1374031742323946 + -0.05941076295697365 + -0.05361274680393424 + 0.06005774690231313 + -0.08728264413619945 + -0.03182871408833136 + 0.07761623662150324 + -0.005465534469940489 + -0.1435986443157352 + 0.2229362210983785 + 0.165694452920798 + -0.09733483826165971 + -0.06192171203911068 + -0.01201138599168869 + -0.241464183207144 + 0.01447397517722392 + -0.1580508339638638 + 0.1239975988161607 + 0.01318763966961383 + -0.02318521075282481 + 0.1253227011275004 + -0.09051730063913441 + 0.1010992941034518 + 0.07236374335157782 + -0.06829558579670918 + 0.08802095769461238 + 0.02222150657255103 + -0.1240027586042427 + -0.1127318578300772 + 0.01058998788801809 + 0.09129799024348864 + 0.08406216402634781 + 0.01469513470310243 + -0.09377037590621057 + -0.02957921396339794 + -0.02224655259628815 + -0.1256856814296717 + 0.0327859115036057 + 0.01735739917724188 + 0.2321654126178073 + -0.05301387703579736 + 0.02086166570938919 + 0.1808990770867712 + -0.01100092518093565 + 0.1254107013013275 + 0.07712432562303929 + -0.1846333616553162 + 0.0354631792700261 + -0.1237949044698444 + 0.267900287597566 + 0.02569258517592024 + -0.04495669809550676 + -0.1168890230323697 + 0.0336975646046045 + 0.02125973110491677 + -0.02677683817964055 + 0.1197209867783265 + -0.0777858807226266 + -0.02425547448365667 + -0.08487292490805882 + 0.06291808994433309 + -0.02204340304934895 + 0.02377435051419018 + -0.1718773573170014 + -0.1011571579988193 + -0.1208029255107849 + -0.1441164927563105 + -0.04633424809550369 + -0.1422415093881239 + 0.2088533311413101 + -0.001853172596141906 + -0.1295936882431212 + -0.1282184353297419 + -0.1794144878161049 + -0.2040305688976426 + 0.1399649813297814 + -0.10764262620441 + 0.0616301297066474 + -0.1474197011387816 + -0.05050426102121119 + 0.1653477333539644 + 0.06068948659719262 + -0.05325459514810765 + 0.1373242105620577 + 0.03880137337106698 + 0.06017715543512947 + 0.06211813928644649 + -0.04191313812532114 + -0.04513341992023757 + 0.01914286643644276 + -0.04438971983871555 + 0.1387577841756764 + 0.05386357276079355 + 0.1042718732060936 + -0.07513626164669096 + 0.1786960028553379 + -0.05637216233733611 + -0.03720214170877462 + -0.1774340291717748 + -0.2549011743869734 + 0.186879844725118 + 0.2833063725183637 + -0.01880086739296004 + 0.1769374720509577 + 0.004564930889063233 + -0.05798972499647807 + -0.2747641741293661 + 0.027553184454707 + 0.2632412184052024 + -0.1095551353914822 + 0.06916048702527024 + 0.03080355376703287 + 0.2165981712802113 + 0.1890893856843088 + -0.08659995312896483 + 0.1069192157133039 + 0.0454950752455283 + 0.14187715557712 + 0.100672848815481 + -0.124773924250272 + -0.05335187514446071 + 0.1547592109188055 + 0.002641240342700039 + 0.1258711227814993 + 0.1206538733123445 + -0.135791533512724 + -0.130918815644207 + -0.05396861570570471 + -0.09140332872931331 + 0.09794058035021644 + 0.1588423831952299 + -0.1616346066767531 + -0.03167509234642521 + 0.2413978277122087 + 0.07297159339659552 + -0.003991980625359775 + -0.01341487228926374 + 0.1968283025420433 + -0.1106224029092038 + -0.02915201476535762 + 0.01299576259906967 + 0.1763479829281023 + 0.02034320445669416 + -0.007975760651902569 + -0.1878436437209434 + -0.0511284052070836 + -0.2054486303338899 + 0.08939311648359854 + 0.1069566349676425 + -0.3163184448636494 + 0.06701973428191561 + 0.01615250637797392 + 0.1795215061720997 + 0.02017711076221559 + -0.3561757064215255 + 0.03738435948083851 + -0.06283102722927891 + 0.1113950871495966 + 0.1520074264787128 + -0.05117322488552872 + -0.5240923053401126 + -0.04551984233766806 + 0.0596401451452126 + -0.2693136769181011 + 0.0703840776719498 + -0.09642522868000397 + 0.03163871728561705 + -0.04684419890810169 + 0.1078803552979049 + 0.01765144204601502 + 0.01842808628453179 + -0.2247013264156105 + -0.1572500241274349 + -0.1543378466013791 + 0.08844108358348482 + -0.2226388530497707 + -0.00802841258335605 + -0.1282277729831008 + 0.06727365881224892 + 0.01015621985250618 + -0.1004970234627534 + 0.102732150328305 + 0.1667404221737363 + 0.1832359281510589 + 0.1395964845806093 + -0.193799724903005 + 0.0191596749759875 + -0.0583700053589912 + -0.04116152622862413 + -0.08204498601953146 + 0.1714138796188239 + 0.1756244579872559 + 0.0390069765786883 + 0.08129445383792273 + -0.05658080254966814 + 0.04682762892287125 + -0.09957164218093659 + -0.05143646723972818 + -0.0480872450150412 + -0.01121554980364516 + -0.05096509640375396 + -0.01891053018629413 + 0.1746410924551564 + -0.1545065355810867 + -0.2141290021524509 + -0.04098056720418834 + -0.09707855006958718 + -0.01746835336172641 + -0.05827000757328446 + -0.06903569742387033 + -0.2576319419162038 + 0.0556139976498211 + 0.01293602538646877 + 0.3203057499851356 + 0.0727244748608836 + 0.2165980582221478 + -0.05750323110572632 + -0.06969582175803714 + -0.03590660607489582 + -0.2687061807209369 + 0.07258616839256866 + 0.2460848343887318 + 0.06489755354914239 + 0.08224910815883786 + 0.03288801465840412 + 0.01926730455644425 + 0.118500161428956 + 0.213596783357284 + -0.1274323690677871 + 0.04630213557499899 + -0.01416508956449309 + 0.1685802397578535 + 0.04117581547460621 + -0.1347008843688866 + -0.1925124798927196 + -0.02819143318336916 + -0.1353145214126829 + 0.01537443611510884 + 0.04182514849884943 + -0.02488285487230305 + -0.07523371621282608 + 0.0456453497418188 + 0.02320659688479692 + -0.09184485017807738 + -0.1021420570691875 + -0.09019704903516369 + -0.1115790792593659 + 0.06726113707953835 + -0.09485300922229126 + 0.08202262147375204 + -0.1951874480726342 + 0.01751795456052687 + -0.1731541700471953 + -0.04642163512287122 + -0.1274507602620129 + 0.02694469481270243 + 0.2510538147171613 + -0.1473392223633127 + -0.2314405061445512 + 0.1459719401193021 + -0.1136173010133768 + 0.006868532856616406 + 0.02400895591422874 + -0.00140889397098312 + 0.07962126481284934 + 0.2570673940922909 + 0.2279872117501605 + 0.01066635433307934 + -0.2524576715800825 + 0.04402546277869483 + -0.1891818569796238 + 0.02491066047065214 + -0.06917415231101073 + 0.05843516739505776 + -0.110344662084734 + -0.004722266458798184 + 0.1407029769762403 + -0.0681792501302895 + 0.0728679211868621 + -0.09338393260688856 + 0.08571355216912344 + -0.2519953195513743 + 0.04142534451424247 + 0.1759653276726652 + -0.1958231103718363 + 0.03723831697901804 + 0.2646310160443111 + 0.1403640832729521 + -0.1018280651378107 + -0.1731322699109423 + -0.05120455192347869 + -0.001620598747993561 + -0.216583888020244 + -0.05044656277776705 + 0.03362227898942541 + 0.256463105846393 + 0.1215738701026295 + -0.005237128515646541 + -0.01022664676506063 + 0.1004277789860339 + 0.07712816122879944 + 0.1078374290208138 + -0.007194865777990773 + 0.1876551699642019 + 0.001667350295852293 + 0.02867937541054041 + 0.04517293409604164 + 0.0937114515641464 + 0.04633236924123863 + -0.1006494697492672 + 0.0003997197461487522 + -0.1220211830864603 + -0.1356895851520392 + -0.08619539425047287 + -0.005520532485616399 + -0.1622350543024395 + 0.1329943913962352 + -0.05133839832939446 + 0.06049281304004884 + -0.1380009534292445 + -0.0307093703266272 + -0.08189895899890301 + -0.09582785752375117 + -0.0133575494018252 + 0.03102839653371089 + 0.1113109805250389 + 0.02820468239319545 + -0.0905428916681274 + -0.05018668575904902 + -0.04851622012133064 + -0.1322551094153764 + 0.03595758536261508 + 0.05241541823993601 + 0.09172724805967761 + -0.06604359102903488 + -0.07165658896802339 + 0.1102900466151579 + -0.04752197349369227 + -0.08734046422401183 + 0.05591510956639406 + 0.006237028274019086 + 0.0857669005057204 + 0.05031680710561896 + -0.1452009830004442 + -0.05728141241003363 + -0.1012379336542239 + -0.1854106056175622 + 0.04013411401239173 + -0.04897801504707037 + -0.0637802936013028 + 0.03357712506802858 + 0.09828752550925135 + -0.07136897380156022 + 0.08090884282108722 + -0.09502012443304242 + -0.01161741856411765 + 0.1226464776813545 + 0.4485759372466924 + -0.05015434808813306 + -0.1744905663010217 + -0.2358783567264802 + 0.1040871860255075 + -0.218228186542194 + 0.05162613366267214 + -0.5825444454694714 + -0.01614290196515434 + 0.07456015276006371 + 0.1418633731961386 + 0.1795583698412907 + 0.03381238488305453 + 0.0641206581459849 + 0.001235302052984547 + -0.006611515360967271 + 0.1564581816138022 + 0.141106710505395 + -0.08431365731908896 + -0.009499002919999685 + 0.04644193436697899 + 0.2307887457874641 + 0.06050815293330995 + 0.1143476769885243 + 0.2110614716643876 + -0.2520013744550498 + -0.1146434935033729 + -0.2128355272346812 + 0.2014480460676106 + 0.09181113139079973 + -0.1056804973878586 + 0.08361396201986253 + 0.2518627168471895 + 0.1044295499804132 + -0.0406760446165754 + -0.07860006405826045 + 0.2528533561426618 + -0.1517541335513065 + -0.1025524098656186 + 0.05673539907367186 + 0.07782671150468863 + 0.001871582368684291 + -0.04449885254367604 + -0.03126683895503429 + -0.1051607436456349 + -0.2244141685950463 + -0.008170682034190205 + 0.03879446505442504 + -0.1628287294733831 + 0.05642526266835852 + -0.06253827842498424 + 0.331488732904181 + 0.001724232810947692 + -0.3905681921687634 + 0.05895642348297336 + -0.1119125616668234 + 0.1662986332997487 + 0.1434946617819624 + -0.07435548186449015 + -0.743880033080766 + -0.02644796415833742 + 0.04367084422748885 + -0.1834752372963459 + -0.02560951051033576 + -0.07631670614634718 + -0.03255868057230467 + -0.1167436877537004 + -0.02272147536737479 + 0.06411591472749349 + -0.01711449495783932 + -0.3044626495788554 + -0.1025855568381658 + -0.006429097263303756 + 0.1276193682095619 + -0.04285743679608941 + 0.1192362093919868 + -0.03412323380836676 + -0.08479576892930732 + 0.05299622364885363 + -0.07586777001477925 + 0.1309517244008993 + 0.05149356145811348 + 0.007873673151187054 + 0.04735582667900365 + -0.1654823590931954 + 0.08008416420393097 + -0.01715419516027902 + -0.007799091890092146 + -0.05088691456518094 + 0.2452605269787489 + 0.1546863842593431 + -0.2897062969332454 + 0.1188305054507049 + -0.07850503665204994 + -0.1006540439965697 + -0.2558986811122662 + 0.01548507621356168 + 0.07329585410572076 + -0.1370082978264821 + 0.1387774740885949 + 0.02955181581980287 + 0.1444144371420732 + 0.001837120217595092 + -0.1578832986296675 + 0.07882715158627783 + 0.1928696950352308 + 0.03224946199772585 + 0.01341000025888617 + -0.09598925318276851 + -0.08435593451679063 + 0.1228162643816339 + 0.008015286774561025 + 0.0228881821998962 + 0.1570899536013809 + 0.1095158523606059 + 0.01446583578714654 + -0.08895128018728235 + -0.001236351104625074 + -0.09216526425223315 + -0.06910048027843081 + 0.1502827463066932 + -0.02645425706844879 + -0.1538238485937606 + -0.09373051983743103 + 0.02993235896387325 + 0.05922767058409489 + 0.1931404783602182 + -0.2580179446158961 + 0.1319803253620105 + -0.0610923011835895 + 0.1136388376870395 + 0.04235085121945019 + 0.02087704833914409 + -0.1097924577012104 + 0.07209542544760648 + -0.08731372091508521 + -0.063858737454594 + -0.1110311004225679 + -0.03257993814386672 + -0.09986316072865788 + -0.05838994288214209 + 0.06026660892265399 + 0.06659362531488025 + -0.03691176136829286 + 0.1723615161788895 + 0.09643056698971313 + 0.06167212184878227 + 0.06048632545906647 + 0.106561067003565 + -0.2359146628019494 + -0.0856503881291492 + -0.099643415633156 + -0.1299553527488587 + -0.1610609809668669 + -0.04330429826958397 + 0.07109263745939573 + 0.09291327612335114 + -0.1843812962021002 + 0.1013587594778311 + -0.03519803794281224 + -0.1078463848683327 + 0.0909954873993804 + 0.02351873163478438 + 0.08716975720936852 + 0.09728441875793437 + 0.1864120685550244 + 0.09595823902078447 + -0.1451589532866548 + 0.01640819868298184 + -0.0561591030940127 + 0.1338230159271746 + -0.01851799790476288 + 0.07011706705491963 + -0.01918525560968478 + -0.08029296938813098 + 0.07278078422728794 + -0.1135486288809505 + 0.02457002483323539 + -0.0596770669792222 + 0.2358769742082185 + -0.2400165177972425 + 0.08009438860952148 + 0.2424825159792996 + -0.008410432856421089 + 0.02011138695890911 + 0.1780224878404248 + 0.1424454598257794 + -0.05871314571253786 + -0.09512264323598589 + 0.1371897600998222 + -0.09056466252358075 + -0.1854181803259646 + -0.2109512305338813 + 0.09803982108185796 + 0.03598251874938754 + -0.04517478104099741 + -0.04854246064512729 + -0.06171789472616177 + 0.07192616766614239 + -0.03708658598751851 + -0.01567456113454775 + 0.03187402259986397 + 0.05677710270208582 + 0.08741110014562621 + -0.2753834455814234 + 0.0402215068984251 + 0.001435929594174574 + -0.03611589497412362 + 0.007823493431096024 + -0.003238811581184531 + -0.2068030895775749 + -0.2594894484833802 + 0.2144522619103169 + -0.1280545220519629 + -0.134423044690689 + 0.0913785824982643 + -0.06794205571613246 + 0.01436313583963213 + -0.06666843135356472 + 0.00838343184753052 + 0.06888419434911967 + 0.2325929290607184 + 0.08681794826751776 + 0.1593828431302552 + -0.0971809489452081 + -0.005808009595889368 + -0.06696428436631012 + 0.03116172093868571 + 0.1198006010171893 + 0.1584776439167764 + -0.03353484654982301 + 0.0926434116160393 + 0.1045065496719981 + 0.06503528577764309 + -0.05100480215807208 + 0.2010842588680187 + -0.0726139584172765 + 0.1975982144772545 + 0.02064828836619831 + 0.1142919992778068 + -0.0463195959649861 + 0.03451511108502742 + -0.08986324087716212 + -0.1767873512546086 + -0.1247911188277607 + -0.1398351533981865 + -0.2721859928562543 + -0.094640776176979 + -0.05921379350247209 + 0.2545959570106689 + -0.1106979387583882 + -0.180340863682782 + 0.1531141947425265 + -0.01814999583861644 + 0.1670941187078815 + -0.1504044341610136 + 0.368068076988876 + -0.1145625107919577 + -0.1011895529635533 + -0.1876994034146107 + 0.2110545262545824 + -0.06033059066490179 + 0.04113581812067183 + 0.2507545279143593 + 0.1255650058849573 + 0.1443145310492009 + 0.1252464690064321 + 0.1293592914089819 + 0.09720477364753313 + 0.1440814100814087 + -0.1511182191743992 + -0.0464273303555949 + -0.03428424282005958 + 0.1791273628939941 + -0.08208633904799664 + 0.04671543365037168 + -0.01056477561293342 + 0.3280100816934571 + 0.06032636234666212 + -0.01359310216640612 + 0.1919570464308755 + -0.0873620119777706 + -0.02203560019350116 + -0.09774582328771275 + 0.1148398538982248 + 0.07421430013508032 + 0.003495306017029558 + -0.2222163726228187 + 0.08997589458793422 + 0.1696783366534761 + -0.1255260657153987 + -0.007072320209895626 + 0.1276347303962281 + 0.1292982787448447 + -0.05208297537677408 + 0.1479841311882314 + 0.04822554642615769 + -0.131141197759718 + 0.03471180741801515 + -0.06440961118901059 + -0.08722003818511585 + -0.1441997814585887 + -0.2274125474961627 + -0.097169489440387 + 0.02773088947569199 + -0.1070466485408921 + 0.06902503587091795 + 0.1311954112343072 + -0.141284481173385 + -0.04546677580696161 + 0.1097978230835506 + -0.08057433169438499 + 0.06757099048783766 + 0.07174731709769074 + -0.02851849012567256 + -0.3757146075638175 + 0.2328719117865827 + -0.01005557396472817 + -0.1243003275634562 + -0.04595478016296822 + -0.044100267647423 + -0.138084140211752 + -0.15511164224655 + -0.2178613785661863 + -0.01691927442642227 + 0.07818793707265874 + -0.1341944968282519 + -0.05851098802706113 + 0.1045252256364899 + -0.0499496819284715 + -0.1902526701601442 + 0.07196166882139192 + 0.004072779842996579 + 0.0160270595289024 + 0.04695225902353219 + -0.04911191224655075 + 0.191892831327582 + -0.1444945058834267 + -0.2202853904366343 + 0.01006205721444285 + -0.09504504271660796 + 0.1401082316439268 + -0.05821947588738329 + 0.01428714349737697 + -0.04498780531374046 + 0.1007395382555364 + 0.09608177306795511 + -0.1427377335384288 + 0.03727287969905327 + -0.1777903785780568 + -0.09485022788467795 + -0.06500052025496814 + 0.09284764092538193 + 0.1299617494659396 + -0.03042087319097689 + 0.1796893932241038 + -0.01073288538730337 + -0.1049688058609258 + 0.02829700538848619 + -0.285330643098704 + 0.1050696416419029 + 0.1765518138946547 + 0.08420673001179661 + 0.06970816483959348 + -0.1530962034710843 + 0.01236764325505881 + 0.07420243094544632 + 0.08905349755618586 + -0.1293428263821592 + -0.0263365993699912 + 0.0004047189157212132 + 0.07588363274246439 + -0.008464820354582242 + 0.02020185026750284 + 0.1244787239784793 + 0.0159723831505977 + -0.1982292587525092 + -0.06697682688310315 + -0.03613463148953804 + -0.1652780548885115 + 0.01438819929671103 + 0.0436618379304702 + 0.02491627491504792 + 0.008404475967987952 + 0.1148907444943133 + 0.0311937852377651 + 0.1303962606770908 + 0.002384966791908356 + 0.02716251179498693 + 0.09946937530571996 + 0.1321520060976324 + -0.05438432657939025 + -0.08340889495867501 + 0.1640467519825544 + -0.09103333261515581 + -0.1638472616753343 + -0.2122019615013457 + 0.103203938253611 + 0.2671611132079018 + -0.01586821097307979 + -0.07537445417268018 + -0.1206608893246473 + 0.2694225111514082 + -0.2159889392117946 + 0.1132074492364467 + -0.1044352839100796 + -0.1527095029381632 + -0.0009496288578566223 + -0.06634437061701783 + -0.1224661849351588 + -0.02970341668303083 + -0.006863288596291386 + 0.1175260476012279 + 0.1070414474675595 + 0.03480914513317275 + 0.2048299438497757 + -0.405880839130927 + 0.06268356595061511 + 0.01874398055316319 + 0.04569425390720752 + 0.09017430723950665 + -0.02460268063576581 + 0.05359884760024468 + 0.1460005901313657 + 0.05197464448943807 + -0.03592257968612141 + 0.31299478823909 + -0.07515948363432123 + 0.121321084016924 + 0.01263599841656247 + -0.14858359150611 + 0.1195877374674842 + -0.198524701721824 + 0.1120248835720462 + -0.04162710216587762 + -0.05290302292867322 + -0.02598187473458077 + 0.07997285485503414 + 0.03011143126414827 + -0.06664724864047192 + 0.04072436580352223 + 0.2088715140920505 + 0.04210225486461003 + 0.07918849123899123 + -0.01107329084409914 + 0.131163883735306 + -0.1444678082212088 + -0.06088597297014842 + -0.0919600166476546 + 0.005007240825029527 + -0.2956838950306138 + -0.05916747318376518 + 0.03896048279150401 + -0.02436983603028851 + 0.001561980004824293 + -0.06762785302309214 + -0.07194296837988168 + -0.05202154642029872 + 0.04532706723082909 + 0.0473193172319981 + -0.3924823907934017 + 0.02590495826419959 + 0.05103234693170136 + -0.06220339572621125 + -0.1128683942228634 + 0.003621463285539008 + -0.125072068400005 + -0.2535233192296045 + 0.2237082094153318 + -0.1238662605915766 + 0.2542353893090576 + -0.1260957503641726 + -0.04981271181918571 + 0.04375474922843847 + 0.01519398152190367 + 0.0924876875703777 + 0.04965081377876439 + 0.3962923002924593 + -0.03785891536828403 + 0.09987244387398275 + -0.2329998276014797 + 0.06861596344868606 + -0.1040800953732826 + -0.003137478320763371 + 0.1707473857482956 + 0.1509218157310757 + -0.06206676290586881 + -0.05765075673333001 + 0.1572077571817325 + 0.01517142860401577 + 0.01466221116289312 + 0.3175028771696407 + -0.020441517847501 + 0.2053511851279294 + -0.09067396104122771 + 0.1236767207071872 + -0.1986350982481705 + 0.06298112666774777 + 0.09385591886792403 + -0.1223713511164094 + -0.1147382813740545 + -0.006883009107352202 + -0.2168789477452491 + 0.0524124558261823 + 0.122901070985294 + 0.3646057870511434 + -0.06174545711317331 + -0.2560780266664009 + 0.09921395672527523 + -0.04178700799421948 + 0.1014635597977281 + -0.1169927589196547 + 0.3439174515523335 + 0.01199432919263614 + 0.1304317568047994 + 0.07617103031021842 + 0.1044847840807115 + -0.03219950718320975 + 0.0233797466830066 + -0.5104169205393798 + 0.1534422146750405 + 0.05325027156780688 + 0.07233797786357865 + 0.03979979991638729 + -0.0605452521243781 + 0.2943625825384965 + -0.02289376076416253 + -0.1454518292546651 + -0.005984339002386861 + 0.2320380109932727 + 0.01385619917191731 + -0.05491483316000891 + 0.05316412751874714 + 0.1291916865339855 + -0.07783323568050116 + 0.01374474890451888 + 0.08150744205473696 + 0.03674178822386485 + 0.1262867643310211 + 0.08388804589784947 + 0.07542899814341333 + 0.05635966174022341 + 0.1209635540242566 + -0.2382066524199452 + 0.01826229900511447 + 0.1312058722121623 + 0.05683785886574295 + 0.03431733966086457 + -0.1660524153169268 + 0.2202586177883086 + 0.1049052258434569 + 0.1142853214472117 + -0.1032444775412538 + -0.0968140206878982 + 0.1508012553582358 + 0.002264266730459902 + -0.007063442686006598 + 0.0090916702830316 + -0.1163386870841841 + -0.07373009327495732 + 0.03975460612836063 + 0.009278149561383859 + 0.1248891694484603 + -0.006270014750222492 + -0.1475526597316988 + 0.09901729400060909 + 0.1341875483226759 + -0.1259743022982773 + 0.05049364963162846 + 0.03708603329314558 + 0.02189707412706336 + 0.2416443444012894 + 0.2759794105981593 + -0.02951365353365954 + -0.05623552805001195 + 0.1714076105551529 + -0.03377215056195945 + -0.179444129915509 + 0.006621483580500045 + -0.1737789320240277 + 0.05809024247178902 + 0.03678901531717126 + 0.2776064805277152 + -0.09322912720286203 + 0.01334347063384463 + -0.1053048191767229 + -0.1604358264324766 + -0.03182783823646951 + 0.2033195668781748 + 0.1951645181678192 + 0.03528997505236636 + 0.1158156322771727 + 0.1134184255768755 + -0.1202015647878645 + -0.1186797026720517 + 0.1227052012633174 + -0.1855643716978661 + 0.06526929159457916 + -0.03972420017418311 + 0.07309256877660195 + -0.02977125684102818 + -0.1960654571418668 + 0.05010541748169863 + -0.02077266288446909 + 0.06825575668544 + -0.1751993227568611 + -0.01174347455288575 + 0.1016835056137998 + -0.1499648279313467 + 0.07675604994186601 + 0.1001469772779631 + 0.01564105129620838 + -0.08274643898747935 + -0.08984432890622834 + -0.3080101233397119 + -0.2155884556106073 + 0.1027420961564515 + -0.0110173254277038 + 0.03635824356612569 + -0.1322111365643562 + -0.1998777470782329 + -0.06383138275761953 + -0.07453898800212505 + 0.1504701447139906 + -0.02809264172900187 + -0.126485832782059 + -0.1156208284452664 + -0.03486958474586161 + 0.004898922209548031 + 0.05571979584879586 + 0.03497499654142802 + -0.04493023236790567 + -0.1265547423786091 + 0.1024300437717925 + 0.01267618383161958 + -0.1192666895571647 + -0.06480075713995874 + -0.001726164340527923 + -0.1743831685117497 + 0.01053318863133042 + 0.04032888011964177 + 0.1266044601787064 + 0.06838639787049788 + -0.08669433632776707 + -0.07699315754319193 + 0.05121379958454336 + 0.177834146977162 + 0.1193533926516111 + -0.1111876785928262 + 0.07363127328126198 + -0.001135007801882461 + -0.2334147050506218 + -0.2859990369490872 + -0.04662617214043142 + 0.04719597246866998 + -0.06423162712809483 + 0.1023702529027177 + -0.05550149057601189 + 0.2693097317610041 + -0.2542442786389534 + 0.05427865635843668 + -0.02289077387644598 + -0.06025298323649893 + -0.1004826230504436 + 0.06629417709563243 + -0.03709967089572237 + -0.0169610744075567 + -0.002088483266166478 + 0.1617962286550673 + 0.2761238829078564 + -0.07327915726179524 + 0.1477834362060406 + -0.5167831382879509 + -0.050516045200913 + -0.01625669977431896 + -0.0659940405649726 + 0.1069896895166956 + -0.167874241219339 + -0.07923803197233062 + 0.1513999395028791 + -0.02893003262506223 + -0.02118220407176248 + 0.01372312043503925 + -0.1155447497524999 + 0.1803012487250286 + 0.0009191828994382826 + -0.07906659895908262 + 0.1529982630253779 + -0.2459700679275017 + 0.1745745175499034 + -0.03473127916378869 + -0.2494665077804605 + 0.0942063728583513 + -0.0212656179108913 + -0.08824629408065333 + -0.1727791494378021 + -0.06116186083051743 + 0.1092743183721836 + -0.2118908450576671 + 0.1091442326921763 + 0.01762757150041668 + 0.001492888773122969 + -0.04467862159484848 + 0.1945377072484118 + 0.04372383237405544 + -0.01633997278586273 + -0.5664696917374411 + 0.0900023222205014 + 0.1024327770795413 + 0.03174159051346814 + 0.08168036960112228 + -0.1044473530416468 + -0.03258097577883422 + 0.02656364864392141 + 0.03960718729651969 + -0.06902131912284072 + -0.1923338759869059 + 0.05724682232359244 + 0.1291613069190952 + 0.1402420313973408 + -0.1743034410713866 + -0.01142430155843352 + 0.05379025830105558 + -0.23426665939346 + 0.1518271841478148 + 0.08647099126854747 + 0.2644879890017845 + -0.1792884256069534 + 0.06120768740122252 + 0.03363621005698549 + 0.06779670853307425 + 0.1399725066900526 + 0.07300773670183608 + 0.1497455715168628 + -0.04494168517881443 + -0.1487789330622697 + -0.123329993681653 + 0.09304462616250117 + -0.06260615465801572 + -0.002204251665977467 + 0.2241764656684518 + -0.01380960288266653 + -0.07683569365374116 + -0.1830754405431468 + 0.106624628845378 + -0.2126703228672125 + -0.05020566970742592 + -0.1064108580225708 + -0.1635788154299146 + 0.04654217148564559 + -0.08711541560158394 + 0.06487354608901222 + -0.3541464113397586 + 0.08098879721239594 + 0.2741172343682602 + 0.2319837004703313 + 0.01334847173582528 + 0.3426867530573805 + 0.03286313012828165 + 0.1354787168702271 + 0.1840121160671404 + 0.2179747841712582 + 0.0334435043309843 + 0.04328905383699076 + -0.3506744502335525 + 0.1489702975138629 + 0.1792090461456065 + 0.06675010992872712 + 0.3315298440973751 + 0.07944857640654217 + 0.08142924988923757 + 0.1039971573427152 + 0.02675596677429646 + 0.0932807011511798 + 0.001721874120625488 + 0.2433885293844283 + 0.1179481264819988 + -0.01824308026406813 + 0.04932863627365439 + -0.01607871508351662 + -0.4097972803841568 + 0.1509001197272528 + 0.09915526557508715 + -0.1411358964162583 + 0.00174289224332619 + 0.1476208008607287 + -0.149080629262399 + -0.01223541789522891 + 0.04344856097747963 + -0.06739497831074694 + -0.2958751909125948 + 0.04468156708035222 + 0.01699193206050237 + 0.04294568184329499 + 0.09625891514180991 + -0.003331663309702944 + 0.0394891310617719 + 0.01484353007705631 + 0.1893838285010545 + -0.06588620690023483 + 0.1192407653988873 + -0.03377543229773004 + 0.08055604468975913 + -0.03876485921154274 + -0.1998876806315399 + 0.08351025978705078 + 0.109838030443253 + -0.08342925523216127 + -0.1644979985086071 + 0.03631522039718456 + 0.1652052123374243 + 0.06517262376922202 + 0.02401161081769404 + 0.2358921310858615 + 0.2409577987266139 + -0.0008723446223863749 + -0.1051821186320413 + 0.07279272083909501 + -0.01892806487892615 + -0.005655646006455291 + -0.09895204107660432 + 0.03993877776603263 + 0.02003688466597598 + -0.1455666492089054 + 0.1508200186086192 + 0.1066092633752345 + 0.1408413121989664 + 0.3237896257480205 + -0.01988463626128929 + 0.007512606264929994 + -0.001569961135358605 + 0.2901569209547472 + -0.08937826325723433 + 0.07575379524431722 + 0.05750677176640619 + -0.08419182154470206 + 0.1415199704162118 + -0.007489094542185645 + 0.2833125760955886 + -0.06330825782732212 + -0.08038437758557827 + 0.00335894671541253 + -0.1651660867404519 + 0.005274797456770841 + 0.1451928119028927 + 0.0112763569329058 + 0.04349476330791319 + 0.1755574189852512 + -0.1004799935416272 + -0.08857135678157048 + 0.1016336458639318 + 0.128089002707815 + -0.2033716433497825 + -0.06308347564939616 + -0.0374340770790013 + 0.1611866786641338 + 0.06284520137338571 + -0.1733160160414784 + -0.01277000452815422 + 0.05042123213034332 + -0.07605669574193785 + 0.1541596046567756 + 0.100129475465233 + 0.1502604053306998 + -0.1815341230182427 + 0.05781232623561872 + -0.1404702374844343 + 0.004316962777268882 + -0.1229997303048702 + -0.1008330870514547 + -0.3862619069515442 + 0.208386591312998 + 0.00705287407151345 + -0.1145430834370256 + 0.03117859179772877 + -0.1790100627788533 + -0.317114755779024 + -0.1465073188758438 + -0.05678938881741846 + -0.04631415161620381 + -0.2602796885870445 + -0.1609362113998376 + -0.1564632165577046 + -0.1888152536312644 + -0.03969244829851229 + 0.02612137771711488 + -0.09543246562696969 + -0.2183968199062007 + 0.05932022007254949 + 0.1119422932084073 + -0.05863555273270557 + -0.07311929300317055 + -0.185054570373021 + -0.08111145820914961 + -0.08229595889898869 + -0.08336248446315815 + -0.03355480185186703 + -0.0137739865574326 + 0.01578423759247887 + -0.134280858407766 + -0.05979114807592321 + -0.1359082924315047 + 0.2251368739066763 + 0.1284719551357331 + -0.008720901210605873 + -0.02170581118342002 + 0.03098058198636323 + -0.1516797189958598 + -0.1182644098776825 + -0.1585499139498735 + -0.4004687252549597 + -0.1083307051514876 + -0.02477912039670704 + -0.06401091446007764 + -0.00465289972803625 + -0.04593001902571633 + -0.1553585199910524 + -0.03401223036656075 + 0.02175754426725177 + 0.04032536711263271 + 0.02332800491697365 + -0.07758927803027214 + 0.01505334199605501 + 0.1159277332788187 + 0.2246696640606345 + 0.1821811913622563 + 0.03372106411337247 + 0.003076116559792473 + -0.2321034140537513 + -0.2014303771732046 + -0.005825533774552373 + 0.0003041051573775923 + 0.04380826758018026 + -0.06261541589566881 + 0.09123212191409814 + 0.03155889220687966 + -0.1051582789554929 + -0.019320322679914 + -0.4296919773018761 + -0.1267327090081997 + 0.2460451494795493 + -0.09815740987293466 + -0.112065326760333 + 0.04441953514823409 + -0.1038860449114877 + 0.0006600456433968109 + 0.06011012798096176 + -0.07961303018752405 + 0.06889443179937985 + -0.1722576091260162 + 0.1272105046165272 + -0.246875791317345 + -0.1391520490300331 + 0.1368616549424919 + -0.2561672078639782 + 0.101408160595333 + 0.0632683649049635 + 0.00183405543497394 + 0.01030663525930626 + 0.07710038204783168 + 0.04191756022354327 + -0.1945866467252047 + -0.1956579413332658 + 0.1495908114577365 + 0.02566416481134048 + 0.03281862995472427 + 0.1750041255896567 + -0.03072004489063606 + -0.1180937560974679 + 0.05465825796076283 + -0.1293249330045187 + -0.05106361463711692 + -0.2154063873615947 + -0.00929286894729823 + 0.26662799813664 + 0.2404808370652683 + -0.1074050002949689 + -0.0251094620755515 + 0.06267698473230983 + -0.04101375796257579 + 0.06834772494667074 + 0.08446323900121717 + 0.0007030897104779825 + -0.01788360140019017 + 0.1075996994286616 + 0.03829468072288923 + 0.06483195079665234 + 0.1428459774551653 + 0.03807425408719391 + 0.00172009335770463 + 0.0852300086246448 + -0.1436778649299378 + 0.1547867246446074 + 0.1686405197787893 + 0.02386955669903841 + -0.06969960445004166 + 0.2056324130053931 + 0.04415675901676435 + -0.02879603819070192 + -0.2174676885227549 + 0.02320494759177774 + -0.2064085939414105 + -0.1115869662551407 + -0.369623368937269 + -0.2438690336665204 + 0.01208375588372786 + -0.05335290497420438 + -0.08374412732522361 + -0.002591990189751939 + 0.06159414959258906 + 0.1348096777210641 + 0.2282425738739924 + 0.1991950462659057 + 0.1721361435316378 + 0.03823591687534759 + 0.04599802966822675 + 0.1691568621964841 + -0.08684860820319985 + 0.002458687877128006 + 0.1567772711376126 + -0.6061634130980867 + 0.08482804187365316 + 0.09301007245418171 + 0.02322821426035823 + 0.08833443865908727 + 0.1660776461897365 + 0.02882327432218191 + -0.01120870775886737 + 0.108747179892392 + 0.1909085004504499 + 0.006521111454003459 + -0.5798279730779259 + 0.08115144774162875 + 0.06379528850046974 + 0.06597844236811323 + -0.1150131081562423 + -0.2595789720827441 + -0.03921162143577954 + -0.1889725044114855 + -0.04946176534139222 + -0.1332932698562622 + -0.005483179351226585 + -0.09406593199267928 + 0.07027042011176331 + 0.04140933885974341 + -0.1220306059795954 + -0.1784630885326045 + -0.06183513688957735 + -0.04620779652230963 + 0.01208544382877731 + -0.07593065279451829 + 0.005310123626712982 + -0.0537404178712245 + 0.06509767254169235 + 0.3095656335403331 + 0.06644844505785756 + 0.1046541918591089 + -0.2943514782239701 + -0.07184880984078473 + -0.150286594575941 + -0.05118008547225355 + -0.02902023774849643 + -0.01404467375295322 + -0.2373670524378622 + -0.07702324621789179 + -0.04895588030861381 + 0.06930851900854594 + 0.06091788362428961 + -0.0487272679060729 + 0.1999840920560406 + 0.2847516221314755 + -0.006490807811043483 + -0.1177768050221116 + -0.003928377152762068 + -0.06807953367482994 + 0.00815797407149558 + -0.05876264057938538 + -0.002709513095030907 + -0.01544309942595336 + -0.1921996488157096 + 0.1845996938092963 + 0.08706799328370383 + 0.08714351889716213 + 0.1229346248358035 + -0.3809247883884744 + -0.02418657300916352 + 0.0269583373305321 + 0.1983369226201439 + -0.2709090627460813 + 0.1377633632128844 + -0.07477915185102726 + -0.1271397141138801 + -0.04480297917247535 + 0.003651388956419065 + -0.07738439626008101 + 0.02361201279791315 + 0.09225393181949118 + 0.05340439521830287 + -0.06664910747875021 + 0.07683235450873378 + 0.008829235914813105 + -0.1132187632823483 + 0.03651116945295849 + 0.0251097318352578 + -0.08889740286853948 + -0.1154001052002589 + 0.1594637821987131 + 0.03843906757654038 + 0.1126844002169019 + -0.02670792851573295 + -0.002936827904473006 + 0.1040632719247211 + 0.1279576088824421 + -0.08187550891668971 + 0.01448635428902653 + 0.07365691967003778 + -0.128381333959134 + 0.2507229622342359 + 0.1428853588807213 + 0.2112289983206825 + 0.1112981412679344 + 0.1236019560656137 + -0.1095517469213071 + -0.05610350103106206 + -0.1287765694240627 + -0.2204735393882981 + -0.1947620806931097 + 0.2661820493338552 + -0.05727346964422059 + -0.08777698515797741 + 0.146862217082062 + -0.1211727226851576 + -0.2596105058855678 + 0.03298028440934461 + 0.01695093509570031 + -0.1353865471488698 + -0.2853070334978341 + -0.1076480925415555 + -0.01868969867909531 + -0.2755694635705666 + 0.08654685680010697 + -0.06774074042738799 + -0.04503361833983752 + -0.2858509436932885 + -0.006312798140391423 + -0.1010457793245181 + -0.02194637148278473 + -0.1209844657919036 + -0.09542887781864266 + -0.1665141985613761 + -0.02747941032078098 + 0.06506225651289597 + 0.03138345843500882 + -0.08489390382410648 + -0.001164325447961441 + 0.003842815998187988 + 0.188216079875226 + -0.1172106582364393 + 0.1588972143009124 + 0.1376983275026621 + 0.03625728163813317 + -0.01756119064575194 + -0.07975850805512234 + -0.2525580915069717 + 0.1225771086631814 + -0.001084702257775424 + -0.1828422228590859 + -0.1557494369505046 + 0.07795329534776511 + 0.09472711027862084 + -0.001833963694330049 + -0.00898099402117189 + -0.09376805496078298 + -0.1661632022037644 + 0.1609761058075417 + 0.06938295032553456 + 0.01499141464340691 + -0.09033638416729012 + 0.002273262915752048 + 0.2752084675754887 + 0.03188948749777691 + -0.07466951045328889 + 0.058957066698073 + 0.007381213020779487 + 0.1336484465438573 + -0.1805294252205066 + 0.01016316826432791 + 0.02464567100390933 + 0.02375319672877546 + 0.09395357258690983 + 0.1367843113114702 + -0.09273687404562907 + -0.1147744683144654 + 0.004700225990019173 + -0.2844801236877633 + 0.02943023908257679 + -0.01598638200216662 + -0.141300900576971 + 0.04039618734261058 + -0.1639282340787453 + 0.0765906998646597 + -0.1713311368050122 + -0.01092396053232519 + 0.0114560370981295 + -0.004751009039853939 + -0.2087227424059737 + 0.184480184554378 + 0.001043298209004864 + -0.1037353952645325 + 0.05051265538013455 + -0.1312447302270093 + 0.1809881017891309 + 0.1294350311522487 + 0.07842999109776783 + -0.0164205485729848 + 0.0002513185691293265 + 0.06300828324358586 + -0.21952091989477 + 0.1282120730099955 + 0.09332454855351834 + -0.07347927914594297 + -0.05256809557858914 + 0.02692370545350153 + 0.01463401338307507 + -0.2200433742206598 + -0.1067900811897174 + -0.1218573152310595 + 0.1025261155401048 + -0.4035504024103722 + -0.1237795037065591 + 0.1484483461691831 + 0.2547497308795001 + 0.02793250367947491 + -0.03492943338759393 + -0.1034132879006144 + 0.05232615436444929 + -0.1010810155523437 + 0.03216142504305022 + -0.2088791441861932 + 0.1040330702029325 + 0.05014918700639624 + 0.07862518163601354 + 0.05927749034429172 + 0.02956841065647962 + -0.2012967975789961 + 0.003938353509400875 + 0.09159030727319518 + 0.09432302097877748 + 0.08680770183530477 + -0.04252292014899794 + 0.03696641305128692 + -0.1166550618014055 + 0.01748073416192691 + 0.04089595204065451 + 0.01137504179012836 + -0.05903219959174481 + -0.01818124940614758 + 0.04812882453035804 + 0.2362286934568873 + 0.02034513117836981 + -0.02285896151518186 + 0.005471949281347859 + -0.06798392521056063 + -0.1047102982122652 + 0.3688688592810885 + 0.03035280270697957 + -0.03417058483170611 + 0.0193786406183001 + 0.1661469777636171 + -0.07065347570250144 + 0.007467038833007271 + -0.1502546342421678 + 0.083877329161976 + -0.1661607003447915 + -0.1074311013553391 + 0.1661982342949016 + 0.1979321484652738 + -0.02043711751769698 + 0.03682639398821854 + 0.03644007402503712 + -0.1111992055960391 + 0.2790245162208053 + 0.005369490324460527 + -0.0314882128296991 + -0.01417981232737644 + 0.04828101676321944 + 0.008977275006716955 + 0.2043868592912931 + 0.04365301879191937 + 0.1305156044209719 + -0.01794485993614705 + -0.2384070578414621 + 0.05744150678398646 + -0.09762703357797536 + -0.2678785778945201 + 0.0346727597244921 + -0.2780084831563379 + -0.1499419512722171 + 0.1038933245569644 + 0.03440607454388061 + 0.000274370782536458 + 0.06111310170522111 + 0.08608971642796071 + 0.04987573262615801 + -0.04626504059303834 + 0.1698993704052897 + -0.06281041299806465 + 0.04528977818330598 + -0.123392654940005 + -0.0290676987885179 + 0.107881616484137 + -0.04178073164162893 + -0.03764153500148977 + -0.2824760561583472 + -0.001557878213629696 + -0.1640962383796669 + 0.06850449820069332 + 0.01804390116308751 + -0.105628013732652 + -0.1505808251628635 + -0.08082331342730152 + -0.2008307943952176 + -0.02991474972227747 + -0.04271818230162084 + -0.120879166950042 + 0.065444494307024 + 0.1856453759031841 + 0.04812894538925469 + 0.04440193799295528 + -0.007132304738937823 + 0.02234193396576895 + -0.09070804057526791 + 0.0249839423657245 + -0.01598184712240994 + -0.002039125476166264 + -0.2826860340094195 + 0.1237698069602635 + 0.005176355423163174 + -0.0676378204351348 + -0.102549818025726 + 0.07228683717461937 + -0.03231537860473729 + -0.06025380539328302 + -0.1067148913657218 + -0.1832348624262625 + -0.1186896551549737 + 0.06534932782785902 + -0.04148260038373607 + -0.3297449271049483 + 0.1638800049942212 + -0.1047269438797595 + 0.06573542409555815 + 0.1721605583437557 + -0.1604184367461875 + 0.03905030110637008 + 0.01086051951898515 + -0.01894004518831463 + 0.06860012102710784 + 0.02071178364009996 + -0.07564673142046621 + 0.01194018131385199 + -0.01809349589871487 + 0.06818136240553006 + -0.04702563798760495 + 0.060462037871139 + 0.005590683401130687 + 0.01791891579467166 + 0.05911651275922077 + 0.05864473705533306 + -0.02266784974209638 + -0.06675284352905796 + -0.2306891995624698 + -0.008914613841774933 + 0.08925315177057583 + -0.02838669816570877 + 0.1244219598355526 + 0.1306714961625057 + 0.1190050559289682 + 0.136603365054152 + -0.3123502047995758 + -0.06066587616933178 + -0.04621714114092183 + -0.3003727436883856 + 0.06131468434924262 + 0.08072593320910279 + 0.02622731489628235 + 0.1359507126697057 + -0.1439553612936746 + 0.1419399686336321 + 0.01657293197267144 + 0.05013144712041896 + -0.1174187439667581 + -0.1229456383384699 + -0.07021784461102953 + 0.1760995872620846 + -0.1398593474134106 + 0.2287227549937715 + -0.08096577250908631 + -0.004426402139883642 + -0.06228587044321769 + -0.004607207370818548 + -0.2171647049713261 + -0.0637788403807322 + -0.1596330784798335 + 0.1641262828017135 + -0.09976515128050771 + -0.03789548774364188 + 0.06395283979531464 + 0.1600188622367744 + 0.03074946009474685 + -0.06847802141332188 + 0.03237742488766973 + 0.2120874115856863 + 0.2028964080744353 + 0.04566064630909031 + -0.06389285204871999 + 0.1158669133379179 + -0.07485438195467638 + -0.07265337877706275 + -0.1705058405414504 + 0.07519232883401432 + 0.1138051560296518 + -0.1563016357246378 + -0.04385789255021381 + -0.1160164439433906 + -0.03769613232459991 + 0.1767705713716731 + -0.0563029003721063 + 0.06358569294818638 + -0.07699336081058232 + 0.2111513303382762 + -0.1106989508568593 + 0.02360204026244463 + -0.03494908146075507 + -0.04116963449027391 + 0.2216215630311471 + 0.02908444897091008 + -0.07156157776660475 + -0.2366968827800979 + -0.03163552380653103 + 0.06905817727794072 + -0.002536916526160523 + -0.01466988290168243 + 0.06242703809006644 + -0.06243224614138568 + 0.05271893755065048 + 0.03307773593364672 + -0.001177328042041443 + -0.09278396139545916 + 0.05035883368350171 + 0.029819047035332 + 0.1094461945652439 + -0.3241135950284725 + 0.004440857096820299 + 0.04345434653676448 + -0.2578424316428754 + 0.1058005119317326 + 0.01730233901439584 + -0.01975958618579435 + -0.07025976285183216 + -0.1274311117652878 + -0.09362778358797785 + 0.09640837063806885 + 0.2136431668073824 + 0.0437555628860183 + 0.06372522484508009 + -0.1388022151894868 + 0.1502159361592025 + 0.1066471896792283 + 0.1211316597583722 + -0.006932933763685157 + 0.0433171775255522 + 0.0373504282424748 + -0.10731333442803 + 0.1505106288169171 + -0.05859110059571048 + -0.1658760038288777 + -0.1434988650066946 + -0.07485656307655052 + -0.05611263479659877 + -0.03785225140850908 + -0.2146191449945687 + -0.3329667488273335 + -0.01473046367218078 + -0.2292276084334722 + -0.04867558711499703 + -0.01335061491191113 + -0.09277123822653682 + 0.008395681804528488 + -0.03271414188514318 + -0.1724157876155324 + 0.07512239612503882 + -0.1679458986795618 + 0.05823397020787569 + -0.001364809187555237 + 0.05736041145111728 + -0.003497481747117358 + 0.06560215237059054 + 0.06151686689615499 + -0.05588884299574574 + -0.1634717399528579 + 0.03258400693485732 + -0.06196460148182169 + 0.04743126116872873 + 0.02444569123824265 + 0.2544798947193593 + -0.1394049754197734 + -0.1468492562759236 + 0.1637587461340966 + -0.004307009767128407 + 0.1401029151418366 + -0.0351456964596356 + -0.05604348444296517 + 0.1874162088503692 + 0.3927244262910226 + 0.0290206574198427 + 0.1080021675088202 + -0.1162972538889056 + -0.0699340844992085 + -0.1194181050711391 + 0.2290374918247552 + -0.02681164614921138 + 0.02383497831161389 + 0.06831927803638151 + -0.008059702069016163 + 0.06104288327438496 + -0.04632576978061029 + -0.2150038743409605 + 0.06406761077878008 + -0.03298930021665651 + -0.0984231714940946 + 0.01546269795518636 + -0.3237124964334551 + 0.1349091243788539 + 0.05457026197896756 + 0.05992829615859915 + -0.1010785172308407 + 0.1369516495270364 + -0.01252664320393353 + 0.07598679622006517 + -0.1786265303893693 + -0.1419243011344121 + 0.01485387875768312 + -0.6192285232430708 + -0.04985276818828194 + 0.001997299065577684 + -0.02759831723738511 + -0.3096640531402383 + 0.01003320099005055 + -0.02979157180962045 + -0.1177246713736268 + 0.00709662118902067 + -0.2168238201105701 + -0.3026117749231387 + 0.02963810853696305 + 0.05494398422103806 + 0.02529345646419047 + -0.07776866290509794 + 0.07175586594468458 + 0.1165086935565908 + 0.06424004949363959 + 0.1902396429477159 + 0.02635292144992934 + 0.1245306728893237 + 0.08408404293418334 + -0.08548187456389662 + -0.04378426766670829 + -0.0954651786569372 + -0.08472911189901509 + -0.08527754766534512 + 0.1090545784365619 + 0.1076798762789478 + 0.04082367620288804 + -0.02901521821842885 + -0.1330813856199282 + -0.1030171681011061 + -0.0406970532176619 + -0.2796852145803527 + 0.06635538073306607 + -0.0625645705847102 + -0.09147119235794353 + 0.07438596014907495 + 0.1210580719073444 + 0.104745870946697 + 0.1702391451066284 + -0.1320146753106412 + 0.0299064147546777 + -0.0595403734608253 + -0.01278921150453554 + 0.06103256952223652 + 0.1882550587124597 + -0.1343668802104494 + 0.0631129991253106 + -0.07934019711958883 + 0.01201513672380478 + 0.1172233867072231 + -0.04947633196342413 + -0.07870281870516233 + -0.1435487549226015 + -0.2575348905012878 + -0.03798459066131626 + -0.2727538736801811 + 0.2484974938214449 + -0.05795337692219548 + -0.1999913651242681 + 0.2522798310967101 + 0.02698128233420108 + 0.0833028924986451 + 0.06649185480315546 + -0.2411451832821562 + 0.01633080520325001 + -0.07609859242188781 + -0.04247559909162969 + 0.07738309127212294 + 0.00338504944113374 + 0.02759211327553412 + -0.062832083534875 + 0.04143828656425674 + 0.009073018473040258 + 0.1419465999688319 + 0.07128105459692202 + -0.01848987171334482 + -0.02259148678743529 + 0.02491359839243191 + 0.01783047751925651 + -0.01442395569032092 + -0.2027928721149563 + -0.1598159994989173 + 0.03842714305757287 + -0.008384169377587621 + -0.08880299076422628 + 0.02079037965729929 + -0.03671362409174479 + 0.06973205315710705 + 0.1063069775346068 + 0.1007176612891763 + -0.002547602650709032 + -0.02700922622045116 + -0.09703937804374069 + 0.05950753545508661 + 0.0507485771781551 + 0.07985287074546485 + 0.1817836436376768 + -0.1725753188714505 + 0.2018124545346996 + -0.02125262992036267 + -0.1389955022111425 + -0.004821234830264484 + -0.08821775432205033 + -0.04411838609251255 + 0.2264100411622824 + 0.09577882771570714 + 0.04386820998539865 + -0.03487017916397868 + -0.04453788418018581 + 0.1268747270609243 + 0.07437212842587976 + -0.1334871846804367 + -0.0724059218444012 + -0.05608205535374374 + 0.2326132060190554 + 0.02994092587015976 + -0.2089556167044889 + 0.0307205569385052 + 0.2100329072099038 + 0.1470463822501148 + -0.1108473213221753 + 0.0180421233819202 + 0.1926915008233758 + 0.2834135240492412 + 0.03981386172756802 + -0.1353756782207221 + -0.1316357648682679 + 0.1251917445532366 + -0.07122199797343048 + -0.06843443883418815 + -0.06471799506842645 + 0.04920451919097584 + -0.04966553488209532 + 0.09030407907133559 + -0.009032101019832373 + 0.3329343599524694 + 0.1077140326181361 + 0.2116763535918749 + 0.09572090976537226 + 0.09690546083088047 + 0.2116609787799568 + -0.04686920855405804 + 0.0218607548581237 + 0.02399391243619535 + -0.04534593475778261 + 0.08112859651845519 + 0.2334446290891323 + -0.008582300947611097 + -0.2305722476263238 + -0.0413794517229276 + -0.1110155935673876 + 0.04846596644900134 + 0.009376670702189865 + 0.06371692643620697 + -0.1262177887372313 + 0.002243370830352344 + 0.07522925987672718 + 0.02981543502381082 + -0.09688900661116427 + 0.1187022634635514 + 0.2121937407941616 + 0.1160820564728878 + -0.09145826358985815 + 0.1265546134597996 + 0.1239288672234961 + -0.218873561315173 + 0.06010108458356655 + 0.09184133777890542 + -0.0497281833890348 + -0.0764646030507192 + -0.05102912514365521 + 0.02849400911861337 + -0.05162216662868902 + 0.1932424320654136 + 0.1384606059076061 + -0.08799270097847003 + -0.1878590814284045 + 0.04201339478566018 + -0.0006645564187006181 + 0.01683382078521371 + 0.01262715095198261 + -0.008313080897634438 + 0.009995652060245303 + -0.1694766390039859 + -0.1915939699332303 + -0.08648825821462656 + -0.01825769682471006 + -0.1798777902610145 + -0.09917221514651982 + -0.1076235449927981 + 0.006472931840932583 + -0.1167483437189565 + 0.3296695003306915 + -0.06228780364996593 + -0.002629600483244642 + -0.05191930452281279 + -0.08694977269772103 + -0.2010664198842678 + -0.05648442893616653 + -0.04522512093437937 + -0.03900233986908162 + 0.1111104382835447 + -0.2126954149231985 + 0.1129761193154164 + 0.1494508746293761 + -0.007458460909668881 + -0.01605879162423225 + 0.04782514952142372 + 0.04590636480733407 + -0.1875383910479731 + -0.009154183090342357 + 0.1349569418108101 + -0.2276526472382224 + -0.1071252008719458 + 0.06749302105374287 + 0.1622229300062252 + -0.2781852298265187 + -0.07887328124863414 + 0.2694692883777759 + 0.03607529710022215 + 0.1481183486481567 + -0.06184326053558836 + -0.1730417754804224 + 0.01525077970179209 + 0.1561405994597077 + 0.02678032513693529 + -0.0008197120477443001 + -0.1530898484847645 + -0.001847636302208441 + -0.05110614815450206 + -0.008266118435312478 + -0.02473667511525696 + 0.05569216297511022 + 0.08004609750215154 + -0.1350936797929578 + -0.03104008993202642 + 0.05254690529371065 + -0.07021698690263957 + 0.1619352579102685 + -0.04774013275971477 + 0.08923569540698978 + -0.1007475489639843 + 0.135776142630528 + 0.1150462916600388 + 0.0322451299040322 + -0.01112626971319132 + -0.1604373055729276 + 0.08640957224394968 + 0.007749845426388811 + 0.07092711464746372 + -0.2288341889598747 + -0.1111153620865373 + 0.01284950736467663 + 0.1917962362109962 + -0.121350989274593 + -0.1619193800434921 + 0.009766252230125208 + -0.2185447500102821 + 0.06787029563053804 + 0.05123133944641886 + 0.1560039184081432 + -0.008265993533776123 + 0.05753488765027924 + -0.08931515682119745 + 0.1305485552418335 + 0.08516739237231388 + 0.04417580277271685 + -0.2388817817062562 + 0.01106863756299767 + 0.05034403890828894 + 0.06090714841574685 + 0.07730723735143495 + 0.1005535179537418 + 0.04161994673567664 + 0.1245826338715556 + 0.02590296946129248 + -0.008911236072077382 + -0.1571295891427713 + -0.06433320918472896 + 0.06306623391009464 + 0.02540275442119966 + 0.3067717439195782 + -0.1233173904652815 + -0.2499425266245129 + -0.1910383963171172 + -0.06385514171998863 + 0.03927738558934807 + -0.2231381271681863 + 0.07228567902119459 + 0.04786253900927035 + -0.06429441538918575 + 0.1595981778299712 + 0.08173468092895905 + 0.09811294770320431 + 0.2426138303451038 + -0.05896816906302247 + 0.08631485452582394 + 0.1190720926354649 + 0.02216332510794881 + 0.08027285957578843 + 0.2699765960020123 + 0.1330179192577183 + -0.0129612182607308 + -0.06144857440814451 + 0.1766057604623763 + 0.3637656530206659 + -0.1979580496373715 + -0.1272743278008463 + -0.07403992269645622 + -0.1190820717998966 + -0.05256178829659498 + -0.01743017925042123 + 0.1652132477967278 + -0.08397210979863105 + 0.08678607625537327 + 0.2690269233578607 + 0.004725727569335508 + 0.03657725758925761 + 0.03782683317786107 + -0.01527115734314086 + -0.03748412659968398 + -0.05184529043462635 + -0.08125696378463768 + -0.2044036502827531 + -0.02259796832914181 + 0.2306125846856311 + -0.05166341912758832 + 0.1007686765701985 + 0.02807602496517032 + 0.195397975895692 + 0.2477849475429904 + -0.1578389390132202 + -0.06778967285660908 + -0.06310468894237677 + 0.001152317090581645 + -0.02847159285392959 + -0.1644965691415145 + -0.004422672654226657 + -0.04582338763658627 + -0.03368514007381852 + 0.1036676916041419 + 0.01633088436745846 + -0.11428974481109 + 0.06236689654186239 + 0.01749034359008914 + 0.02853137340479905 + -0.007962212607277726 + -0.07785215475867532 + 0.0838684611198631 + 0.1974969030295401 + 0.1069244217460556 + 0.02422108189175057 + 0.0980456720803683 + -0.03801602309734344 + -0.06111899634518623 + 0.02441623516867221 + -0.2054311974185093 + -0.08081305627872575 + -0.1198518817220182 + 0.04034362071064586 + 0.05207350174491301 + 0.1974377976085911 + -0.06059255574100417 + 0.04792259565886958 + 0.05189266619617966 + 0.06818538193969763 + 0.04047283318606913 + -0.1017936717913432 + -0.04701905901973118 + 0.1229816793201596 + 0.1488015984903939 + 0.09661098734906357 + -0.1003106650446885 + -0.01537647740384916 + 0.1618204180858531 + 0.1571893218096157 + 0.01468400068843958 + -0.04071898294540913 + 0.1132891253111955 + 0.07248743091201217 + 0.01764528037644025 + -0.0004762474921353839 + -0.01498907130076845 + 0.2068601544100429 + -0.09063308846716889 + 0.1941437247094625 + 0.04467296204639865 + -0.1302667460292818 + -0.002833859865354921 + 0.01285906215180063 + -0.1416392433865714 + 0.2047175011079203 + -0.09382372305655916 + -0.01313767646168318 + 0.03970433934773066 + 0.1328275751432367 + 0.2134388558663492 + 0.1225627402109581 + 0.003451648640815798 + 0.1401527089620881 + -0.04527300235533499 + -0.193054067465438 + 0.1054238331143912 + 0.01788711523261599 + -0.04529521126883883 + 0.06890198380905398 + -0.05543757523542746 + -0.0101991607043735 + 0.01275825083093947 + 0.02253753243187137 + -0.1753126479363099 + -0.1147822848040538 + 0.1309585843547272 + 0.1002556185812181 + -0.2081086787839297 + 0.2116069648173263 + 0.09956651148127987 + 0.1299743320765888 + 0.4110092952243196 + 0.07041684155765403 + 0.3398905815046785 + -0.1393176371776856 + -0.06242973752869357 + -0.1127541118411364 + -0.163822215153077 + -0.07486593810902091 + -0.08925537517653959 + -0.02519462318663325 + -0.1019412998506228 + 0.07656450942853596 + 0.1009556665985779 + -0.1472375712627065 + -0.1343660250137771 + -0.07228274980292933 + -0.04125346885099707 + 0.05371791686420851 + 0.03709004327875337 + -0.02518679780258256 + 0.01816502010510537 + -0.09333116525248154 + -0.1540520976940997 + -0.009677170015297052 + 0.1086850257371473 + -0.04767224853616402 + -0.07866697277646326 + -0.1026201482532858 + -0.1248426643213241 + -0.1058664708599378 + 0.004276668663918654 + 0.07863463576625816 + 0.1989887810091926 + -0.008590536044245594 + -0.1580125299978173 + 0.06894884671352351 + -0.06498647477155509 + -0.02366813942660665 + 0.01980482410685396 + 0.06270283885924051 + -0.2245783208372042 + 0.0368732303495489 + 0.112917125763922 + 0.02303314051507049 + 0.07390193209570638 + 0.01927270918394332 + 0.003167073258190915 + -0.2345794733410854 + 0.04019276021469956 + 0.1500701266292118 + -0.1738201281370745 + -0.1746023480455238 + -0.1668196981209678 + -0.3168850573353171 + -0.1396166745089382 + 0.02248267692289839 + 0.08597907809480189 + 0.07027696815144102 + 0.06889223773757996 + 0.08333731872108889 + -0.2542789485294152 + -0.1705164795265574 + -0.1979238045369191 + 0.0092751292395125 + -0.1320156071506114 + -0.08554660199135972 + 0.1188459370298688 + 0.09836029244114676 + -0.1638474906793758 + -0.04079028244245568 + -0.04407160144056942 + 0.05152213855672327 + -0.08458460684698087 + -0.0396813083410299 + 0.1486263767638222 + 0.01916837924119908 + 0.1336541667410552 + -0.05778739849011862 + 0.2143770028388072 + -0.05090937611490887 + 0.2051024723887984 + -0.06596109921606449 + -0.03671618418312173 + -0.009633899450427197 + -0.0502357420293016 + 0.03869518548670069 + -0.06588109165496844 + -0.0002372648040582653 + -0.1344838837015011 + 0.08824977120271739 + 0.02023380208044043 + -0.2607610166480336 + -0.1896671057558585 + -0.1161377337559699 + 0.1078116990834769 + -0.2539078495142086 + 0.1390611389845949 + 0.03025764989567766 + 0.2441343358593851 + -0.06075432376952496 + 0.1638714927798439 + 0.08333511621746084 + 0.139341251156238 + 0.08122900230200247 + 0.04010435527965214 + -0.1361093194232774 + -0.009581375246758578 + 0.05835068359510442 + -0.0167803727525226 + 0.1069419995219412 + 0.07813798279419711 + 0.00305496395478661 + -0.04170405359485424 + 0.04552324600228076 + -0.1193735070676641 + -0.04913753836685447 + -0.1279944407660601 + 0.08368520759372461 + -0.0870273964516674 + 0.2925564735493265 + -0.04436631411929799 + -0.4325624868472523 + -0.2779225986835941 + -0.006550820004269859 + 0.06060604527500229 + -0.07038280030614524 + -0.08319353480795386 + 0.07136178526293338 + -0.04339465701308659 + 0.204003248326082 + -0.0009487078232958978 + 0.01870845547751275 + 0.2031705378869401 + 0.2365902766993048 + 0.06877991216878743 + 0.1016398511557229 + 0.1673681644207744 + 0.04321705461509814 + 0.07449929082525482 + 0.1817454599348936 + -0.01135984112934396 + -0.03818437913488988 + 0.1582163858452817 + 0.3811016510116187 + -0.1252250014542289 + -0.09631212562334079 + 0.01818618526493161 + -0.05960662208571994 + 0.007359280136234205 + 0.1871558156783462 + 0.07312331044671525 + -0.1456346179766477 + 0.2446716360324289 + 0.1719708917792253 + 0.01491675286930497 + 0.07521955767763136 + 0.02916786150315786 + 0.1304426167592564 + 0.03797090938346386 + 0.01617510961590824 + -0.04975631310943084 + -0.1480946570044037 + -0.02668346659829236 + 0.381378370194814 + 0.0298177070073709 + 0.1179477222364818 + -0.04400525973844824 + 0.1085493338157537 + 0.2288621661170312 + -0.2757981230185004 + -0.01523755673373449 + -0.01431038207471042 + 0.04826549588643518 + 0.05453267363123064 + -0.04269700127556757 + 0.1229262179445883 + -0.1920533368192765 + -0.09461837022106229 + 0.1426896986666275 + 0.04224060119750231 + -0.09154617518831577 + 0.06779175164874031 + 0.06389501613452804 + -0.2202272341820416 + -0.03527323064879302 + 0.05008681334841851 + 0.03915929346556274 + 0.2466306441313898 + 0.2175487276657447 + -0.0702961195826572 + -0.1133769134507895 + 0.05712035664435332 + -0.1468854598240673 + -0.008127726597428714 + -0.2111387012471612 + -0.09534085316222254 + -0.1179715420183408 + 0.07478770331190493 + -0.09543178656365206 + 0.2573332836020102 + 0.005664329361901663 + 0.1970935773063416 + 0.2555708058051488 + 0.06714732326758449 + -0.1050173840930746 + -0.03910728643028964 + -0.002382239357700849 + 0.09196459553841493 + 0.110266208869817 + 0.02425982130926525 + 0.09972451984193673 + -0.05897572466172765 + 0.0409776957910722 + 0.01919657049756203 + 0.09647129033428344 + -0.04431197213438134 + -0.05762749156366653 + -0.1347091145517745 + -0.01787318326952005 + -0.1173107653450738 + 0.09166620389002314 + 0.2033492586980972 + -0.02659322882004272 + 0.3761971232577544 + 0.1593763850604364 + -0.2074397253590146 + -0.2513758703019408 + -0.06208733697230294 + 0.1916760986268075 + 0.4126562927340601 + -0.1561244013434285 + 0.02726361886418402 + -0.06725813452732007 + 0.1911862300418384 + 0.1700206863909895 + 0.1340245065273619 + -0.05010860352551059 + 0.1391517181263541 + -0.05930793627674803 + -0.306468854568941 + -0.1765689501858524 + 0.08174207562970164 + 0.06599160790298092 + -0.03493130193206551 + 0.01347445796216553 + -0.01652733799502618 + -0.001956852260735469 + -0.04080464255465879 + -0.2103585828885884 + -0.1368458087668891 + 0.1210339853543174 + 0.1849062331186146 + -0.1678208112269515 + 0.1336501455703188 + -0.09033119301686199 + 0.1588402005151534 + 0.343835781720269 + -0.08379391991734822 + 0.2569230676782887 + -0.07074417413607342 + -0.001564406531799668 + -0.2578841033850046 + -0.153105248388453 + -0.1124828554039798 + -0.1322401275981956 + -0.04426097420023839 + -0.09413123070888091 + 0.07107967680196152 + -0.02634619189135535 + -0.2643060713405422 + -0.01763331333686636 + -0.1270950852171641 + -0.1079467603432847 + 0.1783039333682823 + 0.1207543271149685 + -0.05059305161756707 + 0.0500077937142913 + 0.009541897202125463 + -0.124412542234951 + -0.01147436953372618 + 0.07693826272523507 + 0.1620249097734542 + 0.1157966001753865 + 0.1147717935299196 + -0.08408124390959763 + -0.1293298942019157 + -0.04242673082866534 + 0.1186902819058376 + 0.2224321368384126 + 0.07696883261632403 + -0.1631116558892264 + 0.1767479567279225 + -0.07840055361446482 + 0.02839505756422219 + 0.07383972715911882 + 0.08187559519447593 + 0.04680154185353474 + -0.1435376941711448 + 0.02382519901674786 + 0.07071963415796215 + 0.1762296701831234 + -0.09299753120355189 + -0.1322024888472295 + -0.2312114558839821 + 0.02016332922095946 + 0.1035458150369197 + 0.04342529042108233 + -0.1750804855071811 + -0.3194078612121694 + 0.1141719956452492 + 0.2464973389765306 + 0.1501184810740416 + -0.09359455906567821 + -0.02378597195736246 + 0.05800560093682273 + 0.2130382320837449 + -0.05056426146108154 + -0.00822209520044149 + -0.2433323752339017 + -0.2233756383058302 + -0.2122944943525225 + -0.0952959833859832 + 0.1597547938803872 + 0.1362445073546047 + -0.05701316985566506 + -0.1461995740541905 + -0.1376034373361993 + 0.008042496278329109 + 0.03077801915443431 + 0.01444762445200487 + 0.06989371293157333 + -0.1195582098625064 + -0.0539595424483456 + -0.09423675246358731 + 0.1698144528273044 + -0.02756024565984823 + -0.2882468999634955 + -0.1311759884758881 + -0.01558802061199863 + -0.0224457616778583 + 0.02907233030836371 + -0.05395799508370444 + -0.1899445332674467 + -0.02311089430760213 + 0.007302109219061837 + 0.2752915166647281 + -0.01532451475347351 + 0.217851116547316 + -0.02338133499366784 + -0.08171995479619482 + -0.0004791226349764893 + -0.2444101439153372 + 0.1714245499183974 + -0.008866540346702038 + 0.08737048415801803 + -0.02644242953561731 + 0.1111536904065472 + 0.08042910659688406 + 0.156509008945293 + 0.09430289405471341 + -0.0173655864171539 + -0.09619637023909541 + -0.1687358810229567 + 0.104454167400238 + 0.1452731087699001 + 0.1753857178410687 + 0.04304210489835793 + 0.09367395935134991 + -0.1097771960461433 + 0.09160458976252094 + -0.1088914195400841 + -0.01385401475268408 + -0.08524650642317869 + 0.08987358524852788 + -0.155116293477577 + 0.2141486159536096 + 0.1492092829071457 + -0.2873869227907061 + -0.1694073747984203 + 0.04449343078728286 + 0.103115286333767 + 0.06288168172684462 + -0.2747744061605801 + -0.02297056591049465 + 0.08720444249778733 + 0.08394416890633438 + -0.1327623592578852 + 0.04173458743571703 + 0.152458237731526 + 0.3461122323005446 + -0.002875408825254615 + -0.03282945612781632 + 0.1320450754672017 + 0.02048398137088825 + -0.09582707087929924 + 0.2512733449041238 + 0.05158883104957444 + -0.1141932960377029 + 0.1042398783956235 + 0.4884623213804156 + -0.05533075061414328 + -0.1117222866153927 + 0.005044432789297027 + -0.05612379379222953 + 0.06294914832230025 + 0.1941755675201401 + 0.07906049237207202 + -0.1258082157852301 + 0.2708717596042585 + -0.09760234025734112 + -0.03242665155538724 + 0.1879415201850468 + 0.002820569798620299 + 0.2518511716332236 + 0.0803275582998389 + 0.03773020974465757 + -0.06680397033984264 + 0.1283608406198464 + 0.04153117115381175 + 0.2979617105798933 + -0.03793178634832229 + -0.003891166632917274 + -0.04639749128298016 + 0.1002283441790767 + 0.1168483832261361 + -0.2667430533768174 + -0.01367085281071653 + 0.1019833281797639 + 0.1039271660117523 + -0.03527621991795535 + -0.04624998419492884 + 0.2980837918314331 + -0.2854868315281638 + -0.1598720881523751 + 0.0387280564053207 + 0.03636386449609316 + 0.1232919644120742 + 0.02436843026096497 + 0.105029920398094 + -0.04958909666485345 + 0.1571536440104042 + 0.09413394319090297 + 0.02778480497282315 + 0.242970079969737 + 0.05254355219572528 + -0.1491449572648123 + -0.2470931260985709 + -0.01228434964796932 + 0.06355811607304208 + -0.01801595088186521 + -0.1910898859593492 + 0.1710955844748312 + -0.04559702767684875 + -0.0575111478414921 + -0.1488699793011382 + 0.2160837867296408 + -0.09833048311603559 + 0.2740762243973532 + 0.196460202462964 + -0.04266482443068737 + -0.2423002631251164 + 0.1866997313613146 + 0.05979064644694732 + -0.01414401353868161 + 0.08321797256258102 + -0.06857585315923068 + 0.1715112604644914 + -0.0189034493966019 + -0.07612876755441057 + -0.04571124698200564 + -0.02707626665785414 + -0.06726814877846153 + -0.07933713540823693 + -0.2232363880387216 + -0.1225110647427899 + -0.07901557311162304 + -0.2434038726792088 + 0.04182391231946075 + 0.02040372413535894 + 0.2642931236104718 + 0.065054883743249 + -0.1934153114319666 + -0.1062764570509464 + 0.01285726935331507 + -0.06215941491929874 + 0.1678446925262784 + -0.09865782692429458 + 0.07530151382627132 + -0.1013625340775283 + 0.009583628919469565 + 0.08935997037860935 + 0.001550289089127295 + -0.07335378231021988 + 0.02747888374533144 + -0.05307225774444272 + -0.225229891765628 + -0.2466469657963566 + 0.0622060053526241 + -0.01521296570200277 + -0.1970300499474153 + 0.1215176040584392 + 0.03322006227892838 + -0.04844281483073029 + -0.08415868964479693 + -0.2851960309152597 + -0.02841991724320317 + 0.004328912759733721 + 0.1294844674217196 + 0.02323963952147449 + -0.08702828184693133 + -0.1455058609075093 + 0.1995832547453136 + -0.0963625077337103 + -0.1375888779685707 + -0.005097603978441743 + -0.0871715942930449 + 0.2948677723918121 + -0.1961953557700017 + 0.05063085134576723 + -0.05485224718210201 + -0.02511095975751573 + 0.0738554145551166 + -0.09901626591372396 + 0.06946042014560544 + -0.07429564005875608 + -0.2455272837770868 + 0.03372532696013532 + -0.08439936125553943 + -0.1572832469890588 + 0.1421293893193454 + 0.1350828196257556 + 0.01284495548336082 + 0.02401257811824288 + 0.2376645902786213 + -0.04768422021523566 + 0.008506985254358865 + 0.09221586488938285 + 0.1594568175859658 + 0.2398227844303611 + 0.2217887753200039 + -0.01367038094914552 + -0.06609246442513816 + -0.2536997173938265 + 0.08045561624986598 + 0.1193326939600289 + 0.04853212560949158 + -0.04788513564622857 + 0.09820725089378556 + 0.01490145766813217 + 0.09373763915343922 + 0.0897072289251121 + 0.09499907894080312 + 0.272505682209672 + -0.2857589771181943 + 0.005304615118724173 + 0.05316934366000153 + 0.01670147793074279 + -0.1685523439260301 + -0.1047253643943811 + -0.2014958780552916 + -0.01753126891589298 + 0.04638300742964078 + 0.1865532167008373 + -0.1041550692098078 + -0.2857638552509695 + -0.8394358504816395 + 0.3330390755443413 + 0.173604750818609 + -0.1949895278003864 + -0.11034922746134 + 0.08305215006310965 + 0.1910586669010612 + 0.0624507135870807 + 0.2033769226006744 + -0.1332893388753211 + -0.1665040500810019 + -0.1583995945363945 + -0.0928760555111864 + 0.1046645926228185 + 0.08948613255992462 + 0.1390079420677361 + -0.1168928404998971 + -0.1222877571044974 + 0.02071735304784578 + 0.06101889198176324 + 0.04341097822694753 + -0.1040487411973801 + -0.1930880413023381 + -0.2651315941018598 + -0.06857898767141712 + 0.04354947542368268 + 0.06072415507640783 + -0.2081057198639228 + -0.1170660072676494 + 0.06315832519668199 + -0.01618372455765315 + -0.06229440929331015 + -0.1567795831060125 + -0.139993917471725 + 0.06967841651494464 + -0.01157645040402994 + 0.2714731163939807 + -0.09094984260662788 + 0.1715229016506518 + 0.1123678629388844 + -0.0953055252276355 + -0.2378751782795372 + 0.01218028128948376 + 0.1417061355775053 + -0.09060031938931913 + 0.03143406610038076 + 0.06406970945828171 + 0.00789120192992214 + 0.08503060820804119 + 0.06586642608064781 + 0.01501737721700442 + -0.05287204124357602 + -0.04459814410608586 + -0.2643918429045177 + 0.08606248389917648 + 0.2163985425078364 + 0.2084730316286358 + -0.009923413481752378 + 0.1376473206377184 + -0.1256474104629678 + 0.1797438248182083 + -0.0528458399648412 + 0.06226020372455229 + 0.007729067427583284 + -0.08258941472058653 + -0.1016452553720866 + -0.003163777303716113 + 0.1406984451120088 + 0.06031349150870733 + -0.03691463724772255 + 0.105088024901643 + 0.02358620124652299 + 0.1201299972636165 + -0.3475476490803814 + -0.0742841930401084 + 0.198497449725175 + -0.0633362323960646 + -0.1966852856580519 + 0.08521942360899989 + 0.1506537818464838 + 0.2114699598939301 + -0.01776267690472441 + -0.04440858070327856 + 0.003079306746925076 + 0.007120375745703148 + -0.217518055554508 + 0.2750843488415229 + 0.03434634955464149 + -0.1756095706398672 + 0.03544462957076241 + 0.4709577299861736 + -0.02746333873121611 + -0.08733991476199504 + 0.04348846502484977 + -0.02695563459697091 + 0.1007257842131707 + 0.2036253770829468 + 0.05487190823942002 + 0.05536619806041074 + 0.131265496918509 + -0.2545897950563981 + -0.1813137866248553 + 0.1644956298879932 + 0.03406397304977367 + 0.2742647458265721 + 0.03612786816975609 + 0.05366755624078459 + -0.002242693382883745 + 0.3077909261259039 + 0.07480294633403545 + 0.1038367356579036 + -0.05317065623529878 + -0.03449087402103904 + 0.06688730844735781 + -0.02575597697681738 + 0.03044747743062777 + -0.1353819500594901 + 0.002417498432139633 + 0.1101825131866615 + 0.0919828128933208 + -0.1439948250968756 + -0.1047273023889282 + 0.166282388944002 + -0.2020929261190566 + -0.107451519642646 + -0.05634226151267367 + -0.01853034273477917 + 0.1817293184379292 + -0.003283480805546549 + 0.03667594122847624 + -0.06916593471154825 + 0.307169001970326 + 0.02469560769794513 + 0.09469772985034791 + 0.1867527749713585 + -0.1230908802114091 + -0.1909553472482549 + -0.2204450052591909 + -0.07092543100988956 + 0.2294652216754263 + 0.03816382623221562 + -0.009400920012224982 + 0.1915875431217992 + 0.01820930314708271 + -0.0619969906367219 + -0.1565322933149482 + 0.1157588638822702 + -0.1751806538241918 + 0.2295575250339776 + -0.05884628955432975 + -0.1097375186682496 + -0.1781749429765534 + 0.2162688496726471 + 0.0225355614780918 + -0.07849648776723586 + -0.01547965292772258 + -0.1153197350031277 + 0.07895824076700365 + 0.05065324858367866 + -0.1085494286285821 + -0.0379692199225021 + -0.09879446437686498 + -0.1253687360897433 + -0.04399958723243259 + -0.1327717233439862 + -0.1891844271346936 + 0.1365897278433574 + -0.4072177659113166 + -0.1423190421710968 + 0.002569210771690537 + 0.2874981836456109 + -0.0451481065719694 + -0.1254153236881238 + 0.1173968851598019 + 0.02373553294657881 + 0.3662965379428074 + 0.3346136570276884 + -0.05717662342641277 + 0.03293252356079885 + -0.02784304467878897 + -0.09214284097721631 + -0.002668431416544305 + -0.1347840225293861 + -0.03883720970638058 + 0.0002532185932718686 + -0.04818120634933561 + -0.2334561183354495 + -0.1592639424552839 + 0.02857859370708266 + -0.1001967303563061 + -0.1363043656655723 + 0.1162742307337141 + 0.06110858262281978 + -0.04375289436171732 + 0.0002603326247158308 + -0.2556094979182465 + 0.001616731568954928 + -0.04893769491895026 + 0.0963305594616868 + 0.1536209272985045 + -0.1935464003918078 + -0.09095698386345863 + 0.1534695823746832 + -0.2571331879374995 + -0.03247827224784545 + -0.2176747306769753 + -0.08464400767846247 + 0.369657359737719 + -0.02603595411742499 + 0.1063412520548481 + 0.004150612307143683 + 0.1239008337604071 + 0.1628892741047316 + -0.07768359672987041 + 0.06108909165579486 + 0.003405857181209642 + -0.07765376042059041 + 0.003320485950160026 + -0.01086861632902177 + -0.122078218606576 + 0.02393691286549908 + 0.06713997366639572 + 0.08898611607835161 + -0.02379243913273671 + 0.2949912814331299 + 0.1350614374648974 + 0.04881340104260548 + 0.1313005175892898 + -0.05043049072684099 + 0.1997599225730803 + 0.1331853724035849 + 0.03310678334263119 + -0.09492731892301552 + 0.03823474521755243 + -0.004415351525256783 + 0.112180980330195 + -0.03234104256631049 + 0.1472018282967266 + -0.09018514576631975 + 0.07544746126523917 + 0.1166113632468761 + 0.08275494188757555 + 0.07278778610114685 + 0.2597969514123001 + -0.1841205434537519 + 0.06788021895957397 + 0.002852335989421522 + -0.2493773200438772 + -0.1500862029925856 + 0.03890592159244441 + -0.07527513568205077 + -0.0309070538452651 + -0.0298841983279069 + 0.1440875574115637 + -0.05018906262328114 + -0.06025221539547261 + 0.21401768860684 + 0.1493930142401384 + 0.1333652585828323 + -0.1644513860689316 + -0.1073181293398727 + 0.1917320319030454 + 0.04211720043513827 + -0.03325617410057424 + 0.2358847962085744 + -0.05531576552570384 + 0.05270157556976172 + -0.02204619127250945 + -0.05606127005459256 + 0.02982912792683756 + -0.02712518468388254 + 0.2952018668094087 + -0.009964997687088591 + -0.03046183918404762 + 0.04857529176171757 + 0.03043983288723968 + 0.01194376398546001 + -0.2067805618562731 + -0.1427842314855997 + -0.2869698997130766 + -0.01754440457903484 + -0.1189582216535462 + 0.2111332403638705 + -0.03105682135869399 + -0.04749585051152591 + 0.0946820396112875 + -0.02623963438519194 + -0.2913698748998487 + -0.2527033466974923 + -0.01292672680845454 + 0.167227040710764 + -0.1118497216760054 + 0.1373157790798296 + -0.1064750291744089 + 0.25052084295729 + 0.02332718041178225 + -0.07064340503825219 + -0.3456836491069989 + 0.1611961252647666 + 0.08760562437004332 + -0.1662756750750775 + 0.0526247766559812 + 0.02529274647444501 + -0.09326957765490271 + 0.03959060965422974 + -0.1348052647751649 + -0.1002186676596551 + -0.01269827705926385 + -0.02411956016849976 + -0.262654857829906 + 0.02634585573229658 + 0.03059574017434615 + 0.1334453440583568 + -0.1095658904969446 + 0.1653660058320955 + -0.1136809261605006 + 0.1428038840878058 + -0.05498598280404418 + 0.2294913039841647 + 0.03080683617387336 + -0.3096504146489982 + 0.05558356921026913 + -0.2264985011241068 + 0.03556299064781845 + 0.3678144671983024 + 0.0751761179683321 + 0.08152764270123794 + -0.06493472510581649 + 0.1304829098615351 + -0.1963527938965993 + -0.07529733889630785 + 0.1800076492009783 + -0.1542377218219825 + -0.1451314883212949 + 0.08344166652972178 + 0.05291208484804868 + -0.007913258494954755 + -0.03039124200121655 + 0.04152829385599959 + -0.07994400191575796 + -0.02694551195409341 + -0.2792023304016716 + 0.182922872568378 + -0.04793443758820662 + -0.1988501180364287 + -0.02313241602466044 + 0.3806790349750098 + -0.1087354764359422 + -0.0235633636573383 + 0.05543209692211608 + -0.01119442471601603 + 0.1495509220089313 + 0.1731985277075746 + 0.02608732062190484 + 0.2286027832429134 + -0.06109695995265021 + -0.2236285563540323 + -0.1926920427073123 + -0.03794520281908435 + 0.1075356138273536 + 0.1363843578238267 + 0.05236801337224944 + 0.07315242602667636 + 0.09120667067391078 + 0.2673917413667651 + -0.04928426751819683 + -0.1242584633656258 + -0.07351478269641104 + 0.003555001656605677 + 0.1865312501760474 + -0.2478980546448966 + 0.03891423303705837 + 0.09271232658029689 + 0.09990992167686555 + 0.04975465166628711 + 0.06237688864617102 + -0.1618745567144718 + -0.2072815728074243 + 3.24320887345834e-05 + -0.009324489084374568 + 0.02516269431032846 + -0.05100859800583433 + -0.0671930965950919 + -0.02951213277188766 + -0.06777233683864496 + -0.09339641768732099 + -0.1972348870531456 + 0.3439146165567926 + -0.04434332484378644 + 0.2407616698867662 + 0.07362486219683421 + -0.2782920205084793 + -0.0877032592308811 + -0.06949037920661379 + -0.05722336869839895 + 0.3020109799810665 + 0.1845736443705813 + 0.1639268362941793 + 0.0007454141494778137 + 0.1011307220756484 + 0.05352505760522216 + -0.1124356121406138 + -0.006314398380578822 + -0.1817709975861904 + 0.07690033839008623 + -0.06109448276466303 + -0.1022404490233799 + -0.02667620582706734 + 0.09629110625137843 + -0.02431260261297468 + -0.07644195566754071 + -0.1186587514424158 + -0.1011749903692891 + -0.1564408651720882 + 0.08805601365843475 + -0.07064913600645135 + -0.02635840998600408 + -0.1078314746964917 + -0.1709695145951056 + 0.01479845069411982 + -0.01381638575244491 + -0.1550512932185826 + 0.2503777385827729 + -0.2390248644176812 + -0.2883893597409654 + -0.06181291307901987 + 0.1582364175796699 + -0.02312071621553637 + 0.00217638563547544 + 0.3237854977363662 + -0.03252544620611295 + 0.003750133894739771 + 0.009671642707881114 + -0.009497472747113498 + 0.07116666910192301 + 0.08816537960315252 + -0.06363471414932657 + -0.09448929109059846 + -0.1838435758631711 + 0.03492670834095708 + 0.04311774220442871 + 0.01678837491608537 + -0.08551317416391886 + 0.01579603526355288 + 0.04714940819834743 + -0.06812683188087337 + 0.04021687008946623 + 0.06658770294854371 + 0.04200650408334704 + 0.02648272347175153 + 0.1171065218544724 + -0.1580241793274017 + -0.04345466645506941 + -0.05306499481440482 + 0.07072616774249532 + 0.2393715380477287 + -0.1142803782761256 + 0.007919304164271446 + 0.03903245447045534 + -0.1972537874679361 + 0.1808024692666788 + -0.1496471578524902 + -0.03601188242560322 + 0.2450678955523587 + 0.1267384878365154 + -0.01909164755778832 + 0.01601852906118508 + + diff --git a/libcodec2-android/src/codec2/octave/vq_700c_eq.m b/libcodec2-android/src/codec2/octave/vq_700c_eq.m new file mode 100644 index 0000000..2334f50 --- /dev/null +++ b/libcodec2-android/src/codec2/octave/vq_700c_eq.m @@ -0,0 +1,342 @@ +% vq_700c.m +% David Rowe May 2019 +% +% Researching Codec 2 700C VQ equaliser ideas +% See also scripts/train_700c_quant.sh, tnewamp1.m + +melvq; + +% general purpose plot function for looking at averages of K-band +% sequences in scripts dir and VQs: +% vq_700c_plots({"hts2a.f32" "vk5qi.f32" "train_120_1.txt"}) + +function vq_700c_plots(fn_array) + nb_features = 41 + K = 20 + figure(1); clf; hold on; axis([1 20 -20 40]); title('Max Hold'); + figure(2); clf; hold on; axis([1 20 -20 30]); title('Average'); + for i=1:length(fn_array) + [dir name ext] = fileparts(fn_array{i}); + if strcmp(ext, ".f32") + % f32 feature file + fn = sprintf("../script/%s_feat%s", name, ext) + feat = load_f32(fn , nb_features); + bands = feat(:,2:K+1); + else + % text file (e.g. existing VQ) + bands = load(fn_array{i}); + end + figure(1); plot(max(bands),'linewidth', 5); + figure(2); plot(mean(bands),'linewidth', 5); + end + figure(1); legend(fn_array); + figure(2); legend(fn_array); +endfunction + + +% single stage vq a target matrix + +function errors = vq_targets(vq, targets) + errors = []; + for i=1:length(targets) + [mse_list index_list] = search_vq(vq, targets(i,:), 1); + error = targets(i,:) - vq(index_list(1),:); + errors = [errors; error]; + end +endfunction + + +% single stage vq a target matrix with adaptive EQ, this didn't work + +function [errors eqs] = vq_targets_adap_eq(vq, targets, eqs) + errors = []; gain=0.02; + eq = eqs(end,:); + for i=1:length(targets) + t = targets(i,:) - eq; + mean(t) + %t -= mean(t); + [mse_list index_list] = search_vq(vq, t, 1); + error = t - vq(index_list(1),:); + eq = (1-gain)*eq + gain*error; + errors = [errors; error]; eqs = [eqs; eq]; + end +endfunction + + +% single stage vq a target matrix with block adaptive EQ, this works +% well with nblock == 10 + +function [errors eq] = vq_targets_block_eq(vq, targets, eq, nblock) + errors = []; n = 0; [tmp K] = size(vq); error_eq = zeros(1,K); gain=0.20; + for i=1:length(targets) + t = targets(i,:) - eq; + [mse_list index_list] = search_vq(vq, t, 1); + error = t - vq(index_list(1),:); + error_eq += error; + errors = [errors; error]; + n++; + if n == nblock + eq = 0.99*eq + gain*error_eq/nblock; + n = 0; error_eq = zeros(1,K); + end + end +endfunction + + +% two stage mbest VQ a target matrix + +function [errors targets_] = vq_targets2(vq1, vq2, targets) + vqset(:,:,1)= vq1; vqset(:,:,2)=vq2; m=5; + [errors targets_] = mbest(vqset, targets, m); +endfunction + + +% two stage mbest VQ a target matrix, with adap_eq + +function [errors targets_ eq] = vq_targets2_adap_eq(vq1, vq2, targets, eq) + vqset(:,:,1)= vq1; vqset(:,:,2)=vq2; m=5; gain=0.02; + errors = []; targets_ = []; + for i=1:length(targets) + t = targets(i,:)-eq; + t -= mean(t')'; + [error target_ indexes] = mbest(vqset, t, m); + % use first stage VQ as error driving adaptive EQ + eq_error = t - vq1(indexes(1),:); + eq = (1-gain)*eq + gain*eq_error; + errors = [errors; error]; targets_ = [targets_; target_]; + end +endfunction + + +% Given target and vq matrices, estimate eq via two metrics. First +% metric seems to work best. Both uses first stage VQ error for EQ + +function [eq1 eq2] = est_eq(vq, targets) + [ntargets K] = size(targets); + [nvq K] = size(vq); + + eq1 = zeros(1,K); eq2 = zeros(1,K); + for i=1:length(targets) + [mse_list index_list] = search_vq(vq, targets(i,:), 1); + + % eq metric 1: average of error for best VQ entry + eq1 += targets(i,:) - vq(index_list(1),:); + + % eq metric 2: average of error across all VQ entries + for j=1:nvq + eq2 += targets(i,:) - vq(j,:); + end + end + + eq1 /= ntargets; + eq2 /= (ntargets*nvq); +endfunction + +function save_f32(fn, m) + f=fopen(fn,"wb"); + [r c] = size(m); + mlinear = reshape(m', 1, r*c); + fwrite(f, mlinear, 'float32'); + fclose(f); +endfunction + +function [targets e] = load_targets(fn_target_f32) + nb_features = 41; + K = 20; + + % .f32 files are in scripts directory, first K values rate_K_no_mean vectors + [dir name ext] = fileparts(fn_target_f32); + fn = sprintf("../script/%s_feat.f32", name); + feat = load_f32(fn, nb_features); + e = feat(:,1); + targets = feat(:,2:K+1); +endfunction + +% rather simple EQ in front of VQ + +function [eqs ideal] = est_eq_front(targets) + [tmp K] = size(targets); + ideal = [ 8 10 12 14 14*ones(1,K-1-4) -20]; + eq = zeros(1,K); gain = 0.02; + eqs = []; + for i=1:length(targets) + update = targets(i,:) - ideal; + eq = (1-gain)*eq + gain*update; + eq(find(eq < 0)) = 0; + eqs = [eqs; eq]; + end +endfunction + +function table_across_samples + K = 20; + + % VQ is in .txt file in this directory, we have two to choose from. train_120 is the Codec 2 700C VQ, + % train_all_speech was trained up from a different, longer database, as a later exercise + vq_name = "train_120"; + #vq_name = "train_all_speech"; + vq1 = load(sprintf("%s_1.txt", vq_name)); + vq2 = load(sprintf("%s_2.txt", vq_name)); + + printf("----------------------------------------------------------------------------------\n"); + printf("Sample Initial vq1 vq1_eq2 vq1_eq2 vq2 vq2_eq1 vq2_eq2 \n"); + printf("----------------------------------------------------------------------------------\n"); + + fn_targets = { "cq_freedv_8k_lfboost" "cq_freedv_8k_hfcut" "cq_freedv_8k" "hts1a" "hts2a" "cq_ref" "ve9qrp_10s" "vk5qi" "c01_01_8k" "ma01_01"}; + #fn_targets = {"cq_freedv_8k_lfboost"}; + figs=1; + for i=1:length(fn_targets) + + % load target and estimate eq + [targets e] = load_targets(fn_targets{i}); + eq1 = est_eq(vq1, targets); + eq2s = est_eq_front(targets); + % for these simulation uses fixed EQ sample, rather than letting it vary frame by frame + eq2 = eq2s(end,:); + + % first stage VQ ----------------- + + errors1 = vq_targets(vq1, targets); + errors1_eq1 = vq_targets(vq1, targets-eq1); + errors1_eq2 = vq_targets(vq1, targets-eq2); + + % two stage mbest VQ -------------- + + [errors2 targets_] = vq_targets2(vq1, vq2, targets); + [errors2_eq1 targets_eq1_] = vq_targets2(vq1, vq2, targets-eq1); + [errors2_eq2 targets_eq2_] = vq_targets2(vq1, vq2, targets-eq2); + + % save to .f32 files for listening tests + if strcmp(vq_name,"train_120") + save_f32(sprintf("../script/%s_vq2.f32", fn_targets{i}), targets_); + save_f32(sprintf("../script/%s_vq2_eq1.f32", fn_targets{i}), targets_eq1_); + save_f32(sprintf("../script/%s_vq2_eq2.f32", fn_targets{i}), targets_eq2_); + else + save_f32(sprintf("../script/%s_vq2_as.f32", fn_targets{i}), targets_); + save_f32(sprintf("../script/%s_vq2_as_eq.f32", fn_targets{i}), targets_eq_); + end + printf("%-21s %6.2f %6.2f %6.2f %6.2f %6.2f %6.2f %6.2f\n", fn_targets{i}, + var(targets(:)), var(errors1(:)), var(errors1_eq1(:)), var(errors1_eq2(:)), + var(errors2(:)), var(errors2_eq1(:)), var(errors2_eq2(:))); + + figure(figs++); clf; + %plot(var(errors2'),'b;vq2;'); hold on; plot(var(errors2_eq1'),'g;vq2_eq1;'); plot(var(errors2_eq2'),'r;vq2_eq2;'); hold off; + plot(mean(targets),'g;mean(targets);'); hold on; plot(mean(vq1),'g;mean(vq1);'); plot(eq2,'r;eq2;'); hold off; + title(fn_targets{i}); axis([1 K -20 30]); + end +endfunction + + +% interactve, menu driven frame by frame plots + +function interactive(fn_vq_txt, fn_target_f32) + K = 20; + vq = load("train_120_1.txt"); + [targets e] = load_targets(fn_target_f32); + eq1 = est_eq(vq, targets); + + [errors1_eq2 eqs2] = vq_targets_adap_eq(vq, targets, zeros(1,K)); + [errors1_eq2 eqs2] = vq_targets_adap_eq(vq, targets, eqs2(end,:)); + eq2 = eqs2(end,:); + + figure(1); clf; + mesh(e+targets) + figure(2); clf; + plot(eq1,'b;eq1;') + hold on; + plot(mean(targets),'c;mean(targets);'); plot(eq2,'g;eq2;'); + hold off; + figure(3); clf; mesh(eqs2); title('eq2 evolving') + + % enter single step loop + f = 20; neq = 0; eq=zeros(1,K); + do + figure(4); clf; + t = targets(f,:) - eq; + [mse_list index_list] = search_vq(vq, t, 1); + error = t - vq(index_list(1),:); + plot(e(f)+t,'b;target;'); + hold on; + plot(e(f)+vq(index_list,:),'g;vq;'); + plot(error,'r;error;'); + plot(eq,'c;eq;'); + plot([1 K],[e(f) e(f)],'--') + hold off; + axis([1 K -20 80]) + % interactive menu + + printf("\r f: %2d eq: %d ind: %3d var: %3.1f menu: n-next b-back e-eq q-quit", f, neq, index_list(1), var(error)); + fflush(stdout); + k = kbhit(); + + if k == 'n' f+=1; end + if k == 'e' + neq++; + end + if neq == 3 neq = 0; end + if neq == 0 eq = zeros(1,K); end + if neq == 1 eq = eq1; end + if neq == 2 eq = eqs2(f,:); end + if k == 'b' f-=1; end + until (k == 'q') + printf("\n"); +endfunction + + +% Experiment to test iterative approach of block update and remove +% mean (ie frame energy), shows some promise at reducing HF energy +% over several iterations while not affecting already good samples + +function experiment_iterate_block(fn_vq_txt, fn_target_f32) + K = 20; + vq = load("train_120_1.txt"); + [targets e] = load_targets(fn_target_f32); + + figure(1); clf; + plot(mean(targets),'b;mean(targets);'); + hold on; + plot(mean(vq), 'g;mean(vq);'); + figure(2); clf; hold on; + eq = zeros(1,K); + for i=1:3 + [errors eq] = vq_targets_block_eq(vq, targets, eq, 10); + figure(1); plot(mean(targets-eq)); + figure(2); plot(eq); + printf("i: %d %6.2f\n", i, var(errors(:))) + end +endfunction + +% Experiment to test EQ of input (before) VQ. We set a threshold on +% when to equalise, so we don't upset already flat-ish samples. This +% is the algorithm used for C at the time of writing (newamp1.c, newamp_700c.m) + +function experiment_front_eq(fn_vq_txt, fn_target_f32) + K = 20; + vq = load("train_120_1.txt"); + [targets e] = load_targets(fn_target_f32); + + [eqs ideal] = est_eq_front(targets); + + figure(1); clf; + plot(mean(targets),'b;mean(targets);'); + hold on; + plot(ideal, 'g;ideal;'); + plot(eqs(end,:), 'r;eq;'); + plot(mean(targets)-eqs(end,:), 'c;equalised;'); + plot(mean(vq),'b--;mean(vq);'); + hold off; + figure(2); clf; mesh(eqs(1:100,:)); title('EQ weights over time'); + ylabel('Time (frames'); xlabel('Freq (mel)'); +endfunction + +more off + +% choose one of these to run first +% You'll need to run scripts/train_700C_quant.sh first to generate the .f32 files + +%interactive("train_120_1.txt", "cq_freedv_8k_lfboost.f32") +%table_across_samples; +%vq_700c_plots({"hts1a.f32" "hts2a.f32" "ve9qrp_10s.f32" "ma01_01.f32" "train_120_1.txt"}) +%vq_700c_plots({"ve9qrp_10s.f32" "cq_freedv_8k_lfboost.f32" "cq_ref.f32" "hts1a.f32" "vk5qi.f32"}) +%experiment_iterate_block("train_120_1.txt", "ve9qrp_10s.f32") +%experiment_iterate_block("train_120_1.txt", "cq_freedv_8k_lfboost.f32") +experiment_front_eq("train_120_1.txt", "cq_freedv_8k_lfboost.f32") diff --git a/libcodec2-android/src/codec2/octave/vq_nm_xx_11_40_hpf150 b/libcodec2-android/src/codec2/octave/vq_nm_xx_11_40_hpf150 new file mode 100644 index 0000000..bc11f3c --- /dev/null +++ b/libcodec2-android/src/codec2/octave/vq_nm_xx_11_40_hpf150 @@ -0,0 +1,1615 @@ +# Created by Octave 4.0.0, Wed Jul 26 19:10:53 2017 ACST +# name: vq +# type: matrix +# rows: 1608 +# columns: 30 + 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 + 12 18 12 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 12 18 12 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 12 18 12 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 12 18 12 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 12 18 12 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 12 18 12 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 12 18 12 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 12 18 12 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 + 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 + 0 12 18 12 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 12 18 12 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 12 18 12 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 12 18 12 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 12 18 12 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 12 18 12 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 12 18 12 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 + 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 + 0 0 12 18 12 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 12 18 12 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 12 18 12 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 12 18 12 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 12 18 12 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 12 18 12 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 + 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 + 0 0 0 12 18 12 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 12 18 12 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 12 18 12 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 12 18 12 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 12 18 12 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 + 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 + 0 0 0 0 12 18 12 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 12 18 12 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 12 18 12 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 12 18 12 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 + 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 + 0 0 0 0 0 12 18 12 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 12 18 12 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 12 18 12 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 + 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 + 0 0 0 0 0 0 12 18 12 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 12 18 12 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 + 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 + 0 0 0 0 0 0 0 12 18 12 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 12 18 12 0 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 12 18 12 0 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 0 12 18 12 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 12 18 12 0 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 0 12 18 12 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 12 18 12 0 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 0 12 18 12 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 12 18 12 0 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 0 12 18 12 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 12 18 12 0 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 0 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 0 12 18 12 12 18 12 0 0 0 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 18 12 12 18 12 12 18 12 0 0 0 + + diff --git a/libcodec2-android/src/codec2/raw/700d_end_over.raw b/libcodec2-android/src/codec2/raw/700d_end_over.raw new file mode 100644 index 0000000..2fe5e77 Binary files /dev/null and b/libcodec2-android/src/codec2/raw/700d_end_over.raw differ diff --git a/libcodec2-android/src/codec2/raw/cq_ref.raw b/libcodec2-android/src/codec2/raw/cq_ref.raw new file mode 100644 index 0000000..485703d Binary files /dev/null and b/libcodec2-android/src/codec2/raw/cq_ref.raw differ diff --git a/libcodec2-android/src/codec2/raw/cross.raw b/libcodec2-android/src/codec2/raw/cross.raw new file mode 100644 index 0000000..1b2af6a Binary files /dev/null and b/libcodec2-android/src/codec2/raw/cross.raw differ diff --git a/libcodec2-android/src/codec2/raw/f2400.raw b/libcodec2-android/src/codec2/raw/f2400.raw new file mode 100644 index 0000000..5f4427f Binary files /dev/null and b/libcodec2-android/src/codec2/raw/f2400.raw differ diff --git a/libcodec2-android/src/codec2/raw/forig.raw b/libcodec2-android/src/codec2/raw/forig.raw new file mode 100644 index 0000000..4ba294d Binary files /dev/null and b/libcodec2-android/src/codec2/raw/forig.raw differ diff --git a/libcodec2-android/src/codec2/raw/g3plx.raw b/libcodec2-android/src/codec2/raw/g3plx.raw new file mode 100644 index 0000000..9970c3f Binary files /dev/null and b/libcodec2-android/src/codec2/raw/g3plx.raw differ diff --git a/libcodec2-android/src/codec2/raw/hts.raw b/libcodec2-android/src/codec2/raw/hts.raw new file mode 100644 index 0000000..79f869a Binary files /dev/null and b/libcodec2-android/src/codec2/raw/hts.raw differ diff --git a/libcodec2-android/src/codec2/raw/hts1.raw b/libcodec2-android/src/codec2/raw/hts1.raw new file mode 100644 index 0000000..3369387 Binary files /dev/null and b/libcodec2-android/src/codec2/raw/hts1.raw differ diff --git a/libcodec2-android/src/codec2/raw/hts1a.raw b/libcodec2-android/src/codec2/raw/hts1a.raw new file mode 100644 index 0000000..7332f93 Binary files /dev/null and b/libcodec2-android/src/codec2/raw/hts1a.raw differ diff --git a/libcodec2-android/src/codec2/raw/hts2.raw b/libcodec2-android/src/codec2/raw/hts2.raw new file mode 100644 index 0000000..0bb9df1 Binary files /dev/null and b/libcodec2-android/src/codec2/raw/hts2.raw differ diff --git a/libcodec2-android/src/codec2/raw/hts2a.raw b/libcodec2-android/src/codec2/raw/hts2a.raw new file mode 100644 index 0000000..6d9cf17 Binary files /dev/null and b/libcodec2-android/src/codec2/raw/hts2a.raw differ diff --git a/libcodec2-android/src/codec2/raw/kristoff.raw b/libcodec2-android/src/codec2/raw/kristoff.raw new file mode 100644 index 0000000..9b0b465 Binary files /dev/null and b/libcodec2-android/src/codec2/raw/kristoff.raw differ diff --git a/libcodec2-android/src/codec2/raw/m2400.raw b/libcodec2-android/src/codec2/raw/m2400.raw new file mode 100644 index 0000000..1c0956d Binary files /dev/null and b/libcodec2-android/src/codec2/raw/m2400.raw differ diff --git a/libcodec2-android/src/codec2/raw/mmt1.raw b/libcodec2-android/src/codec2/raw/mmt1.raw new file mode 100644 index 0000000..40638a5 Binary files /dev/null and b/libcodec2-android/src/codec2/raw/mmt1.raw differ diff --git a/libcodec2-android/src/codec2/raw/morig.raw b/libcodec2-android/src/codec2/raw/morig.raw new file mode 100644 index 0000000..4af0e8f Binary files /dev/null and b/libcodec2-android/src/codec2/raw/morig.raw differ diff --git a/libcodec2-android/src/codec2/raw/sine1k_2Hz_spread.raw b/libcodec2-android/src/codec2/raw/sine1k_2Hz_spread.raw new file mode 100644 index 0000000..1b8ad9c Binary files /dev/null and b/libcodec2-android/src/codec2/raw/sine1k_2Hz_spread.raw differ diff --git a/libcodec2-android/src/codec2/raw/sine1k_2ms_delay_2Hz_spread.raw b/libcodec2-android/src/codec2/raw/sine1k_2ms_delay_2Hz_spread.raw new file mode 100644 index 0000000..4d3e09e Binary files /dev/null and b/libcodec2-android/src/codec2/raw/sine1k_2ms_delay_2Hz_spread.raw differ diff --git a/libcodec2-android/src/codec2/raw/speech_orig_16k.wav b/libcodec2-android/src/codec2/raw/speech_orig_16k.wav new file mode 100644 index 0000000..737d9a5 Binary files /dev/null and b/libcodec2-android/src/codec2/raw/speech_orig_16k.wav differ diff --git a/libcodec2-android/src/codec2/raw/testframes_700d.raw b/libcodec2-android/src/codec2/raw/testframes_700d.raw new file mode 100644 index 0000000..a22fed9 Binary files /dev/null and b/libcodec2-android/src/codec2/raw/testframes_700d.raw differ diff --git a/libcodec2-android/src/codec2/raw/ve9qrp.raw b/libcodec2-android/src/codec2/raw/ve9qrp.raw new file mode 100644 index 0000000..489e942 Binary files /dev/null and b/libcodec2-android/src/codec2/raw/ve9qrp.raw differ diff --git a/libcodec2-android/src/codec2/raw/ve9qrp_10s.raw b/libcodec2-android/src/codec2/raw/ve9qrp_10s.raw new file mode 100644 index 0000000..0d3bd3b Binary files /dev/null and b/libcodec2-android/src/codec2/raw/ve9qrp_10s.raw differ diff --git a/libcodec2-android/src/codec2/raw/vk5qi.raw b/libcodec2-android/src/codec2/raw/vk5qi.raw new file mode 100644 index 0000000..fdfcd5d Binary files /dev/null and b/libcodec2-android/src/codec2/raw/vk5qi.raw differ diff --git a/libcodec2-android/src/codec2/script/fsk_results.py b/libcodec2-android/src/codec2/script/fsk_results.py new file mode 100644 index 0000000..f20e6b4 --- /dev/null +++ b/libcodec2-android/src/codec2/script/fsk_results.py @@ -0,0 +1,27 @@ +# fsk_results.py +# David Rowe Sep 2018 +# +# Reads JSON files from HF data system and prints some summary results + +import json +import time +import sys + +if len(sys.argv) == 1: + print("\nusage: %s filename.json\n" % (sys.argv[0])) + sys.exit(0) + +filepath = sys.argv[1] +EbNodB_sum = 0.0 + +with open(filepath) as fp: + line = fp.readline() + cnt = 1 + while line: + data = json.loads(line) + time_str = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(data['secs'])) + print((time_str, data['EbNodB'],data['frames'])) + EbNodB_sum += float(data['EbNodB']) + line = fp.readline() + cnt += 1 + print("Average EbNodB: %4.2f\n" % (EbNodB_sum/cnt)) diff --git a/libcodec2-android/src/codec2/script/fskrx.sh b/libcodec2-android/src/codec2/script/fskrx.sh new file mode 100755 index 0000000..abbedcf --- /dev/null +++ b/libcodec2-android/src/codec2/script/fskrx.sh @@ -0,0 +1,17 @@ +#!/bin/bash +# fskrx.sh +# David Rowe Sep 2018 +# +# Receive 100 baud 2FSK test frames using RTL-SDR V3 dongle and nanosdr +# +# usage: $ sudo ./fskrx.sh FreqHz logFileName.json +# $ sudo ./fskrx.sh 7177000 20180912-1800.json +# +# To stop: +# +# $ sudo killall nanorx + +CODEC2_BIN=/home/david/codec2-dev/build_linux/src +NANORX_BIN=/home/david/nanosdr-0.75/build/nanorx + +sudo $NANORX_BIN/nanorx -i rtlsdr -f $1 -m USB --output-rate=48k | $CODEC2_BIN/fsk_demod -f -t 2 48000 100 - /dev/null 2> >(tee -a $2) diff --git a/libcodec2-android/src/codec2/script/fskrxcots.sh b/libcodec2-android/src/codec2/script/fskrxcots.sh new file mode 100755 index 0000000..44cbd33 --- /dev/null +++ b/libcodec2-android/src/codec2/script/fskrxcots.sh @@ -0,0 +1,17 @@ +#!/bin/bash +# fskrxcots.sh +# David Rowe Sep 2018 +# +# Receive 100 baud 2FSK test frames using COTS HF radio connected via sound card +# +# usage: $ fskrxcots.sh logFileName.json +# $ fskrxcots.sh 20180912-1800.json +# +# To stop: +# +# $ sudo killall arecord + +CODEC2_BIN=/home/david/codec2-dev/build_linux/src + +arecord -D hw:1,0 -f S16_LE -r 48000 - | $CODEC2_BIN/fsk_demod -f -t 2 48000 100 - /dev/null 2> >(tee -a $1) + diff --git a/libcodec2-android/src/codec2/script/fsktx.sh b/libcodec2-android/src/codec2/script/fsktx.sh new file mode 100755 index 0000000..7a25009 --- /dev/null +++ b/libcodec2-android/src/codec2/script/fsktx.sh @@ -0,0 +1,14 @@ +#!/bin/sh +# fsktx.sh +# David Rowe Sep 2018 +# +# Transmit 100 baud 2FSK test frames using Rpitx +# +# usage: $ sudo /fsktx.sh FreqHz Bits +# $ sudo ./fsktx.sh 7177000 6000 + +CODEC2_BIN=/home/david/codec2-dev/build_linux/src +RPITX_BIN=/home/david/rpitx2 + +$CODEC2_BIN/fsk_get_test_bits - $2 | $CODEC2_BIN/fsk_mod_ext_vco - $RPITX_BIN/2fsk.f 2 --rpitx 800 100 +sudo $RPITX_BIN/freedv $RPITX_BIN/2fsk.f $1 100 diff --git a/libcodec2-android/src/codec2/script/fsktxcots.sh b/libcodec2-android/src/codec2/script/fsktxcots.sh new file mode 100755 index 0000000..ce126e7 --- /dev/null +++ b/libcodec2-android/src/codec2/script/fsktxcots.sh @@ -0,0 +1,15 @@ +#!/bin/sh +# fsktxcots.sh +# David Rowe Sep 2018 +# +# Transmit 100 baud 2FSK test frames using COTS radio connected via USB +# +# usage: $ ./fsktxcots.sh Bits +# $ ./fsktxcots.sh 6000 + +CODEC2_BIN=/home/david/codec2-dev/build_linux/src + +echo 'T 1' | rigctl -m 361 -r /dev/ttyUSB0 +$CODEC2_BIN/fsk_get_test_bits - $1 | $CODEC2_BIN/fsk_mod 2 8000 100 1200 100 - - | aplay -f S16_LE +echo 'T 0' | rigctl -m 361 -r /dev/ttyUSB0 + diff --git a/libcodec2-android/src/codec2/script/gen_phi0 b/libcodec2-android/src/codec2/script/gen_phi0 new file mode 100755 index 0000000..eeb4b2d --- /dev/null +++ b/libcodec2-android/src/codec2/script/gen_phi0 @@ -0,0 +1,136 @@ +#!/usr/bin/python3 + +import math + +# Save the points in separate lists +points_t1 = [] # A list of tuples (x, r) +points_t2 = [] # A list of tuples (x, r) +points_t3 = [] # A list of tuples (x, r) + +###################################################### +# Generate +###################################################### + +adj = 0.50 # Offset ratio for step of 1, estimate + +def loop_even(upper, lower, step, ary): + result = [] + for i in range((int)(upper * step), (int)(lower * step), -1): + x = i / step + z = math.exp(x + (adj / step)) + r = math.log((z+1)/(z-1)) + ary.append( (x, r) ) + +##### +# Create initial list which will be sorted desending + +# Tbl-1 9:5 in linear steps of 0.5 +loop_even(9.999, 4.999, 2, points_t1) + +# Tbl-2 5:1 in linear steps of 1/16 +loop_even(4.999, 0.999, 16, points_t2) + +# Tbl-3 log steps: 1/(2^0.5), 1/(2^1), 1/(2^1.5), ... +for i in range(1, 28): + e = (2 ** (i/2)) + x = 1.0 / e + z = math.exp(x+ (.19 / e)) + r = math.log((z+1)/(z-1)) + points_t3.append( (x, r) ) + + +###################################################### +# Output +###################################################### + +print(""" +// phi0.c +// +// An approximation of the function +// +// This file is generated by the gen_phi0 scritps +// Any changes should be made to that file, not this one + +#include + +#define SI16(f) ((int32_t)(f * (1<<16))) + +float phi0( float xf ) { + + int32_t x = SI16(xf); + + if (x >= SI16(10.0f)) return(0.0f); +""", end="") + + +################################## +# Tbl-1 9:5 in linear steps of 0.5 (9.5, 9.0, 8.5, 8.0, .., 5.0) +print(""" else { + if (x >= SI16(5.0f)) { + int i = 19 - (x >> 15); + switch (i) { +""", end="") +for i in range(len(points_t1)): + #assert(points_t1[i][0] == ((18 - i) / 2)) + print("{}case {}: return({:.9f}f); // ({:.1f})".format( + (10*" "), i, points_t1[i][1], points_t1[i][0])) +print("{}}}".format(( 8*" "))) +print("{}}}".format(( 6*" "))) + + +################################## +# Tbl-2 5:1 in linear steps of 1/16 (4-15/16, 4-7/7, ... 1) +print(""" else { + if (x >= SI16(1.0f)) { + int i = 79 - (x >> 12); + switch (i) { +""", end="") +for i in range(len(points_t2)): + #assert(points_t2[i][0] == ((18 - i) / 2)) + print("{}case {}: return({:.9f}f); // ({:.4f})".format( + (12*" "), i, points_t2[i][1], points_t2[i][0])) +print("{}}}".format((10*" "))) +print("{}}}".format(( 8*" "))) + + +################################## +# Tbl-3 log steps: 1/(2^0.5), 1/(2^1), 1/(2^1.5), ... +# Output as a balanced search + +def prnt_cmp(x, ind): + print("{}if (x > SI16({:.6f}f)) {{".format((" "*ind), x)) + +def prnt_rtn(r, ind): + print("{}return({:.9f}f);".format((" "*ind), r)) + +def one_level(pts, ind, dft): + #print("# One_Level({})".format(pts)) + mid = (int)(len(pts)/2) + lft = pts[:mid] + rgt = pts[mid+1:] + x = pts[mid][0] + r = pts[mid][1] + #print("## {}, {}, {}".format(lft, x, rgt)) + prnt_cmp(x, ind) + if (len(lft)): + one_level(lft, ind+2, r) + else: + prnt_rtn(r, (ind+2)) + print("{}}} else {{".format((" "*(ind)))) + if (len(rgt)): + one_level(rgt, ind+2, dft) + else: + prnt_rtn(dft, (ind+2)) + print("{}}}".format((" "*(ind)))) + + +# Start recursive process +print("{}else {{".format((8*" "))) +indent = 10 +one_level(points_t3, indent, 10) +print("{}}}".format((8*" "))) # End of tb1_1 +print("{}}}".format((6*" "))) # End of tb1_2 +print("{}}}".format((4*" "))) # End of tb1_3 +print("{}return(10.0f);".format((4*" "))) +print("}") + diff --git a/libcodec2-android/src/codec2/script/menu.sh b/libcodec2-android/src/codec2/script/menu.sh new file mode 100755 index 0000000..c0335d2 --- /dev/null +++ b/libcodec2-android/src/codec2/script/menu.sh @@ -0,0 +1,80 @@ +#!/bin/bash +# ./menu.sh +# +# David Rowe +# Created August 2009 +# +# Presents a menu of sound files, press 1 to play file1, 2 to play file2 etc +# +# The aim is to make comparing files with different processing easier than +# using up-arrow on the command line. Based on cdialog. +# +# usage: +# menu.sh file1.raw file2.raw ........ [-d playbackdevice] +# +# for example: +# +# ../script/menu.sh hts1a.raw hts1a_uq.raw +# +# or: +# +# ../script/menu.sh hts1a.raw hts1a_uq.raw -d /dev/dsp1 +# + +# Copyright (C) 2007 David Rowe +# +# All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2, as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, see . + +files=0 +items="Q-Quit\n" +while [ ! -z "$1" ] +do + case "$1" in + -d) dsp="${1} ${2}"; shift;; + *) files=`expr 1 + $files`; + new_file=$1; + file[$files]=$new_file; + items="${items} ${files}-${new_file}\n";; + esac + shift +done + +echo -n -e "\r" $items"- " +while true ; do + echo -n -e "\r -" + stty cbreak # or stty raw. Stty uses file descriptor 0, not /dev/tty. + readchar=`dd bs=1 count=1 2>/dev/null` + stty -cbreak + if [ -n "$readchar" ] ; then + if [ x$readchar == 'xq' -o x$readchar == 'xQ' ] ; then + echo + exit 0 + fi + if [ -z ${file[$readchar]} ] ; then + echo -n -e "\nUnknown input\n" $items"- " + continue + fi + if ( play --version ) >/dev/null 2>&1; then + play -r 8000 -s -2 ${file[$readchar]} $dsp 2> /dev/null + elif ( aplay --version ) > /dev/null 2>&1; then + aplay -r 8000 -f S16_LE ${file[$readchar]} 2> /dev/null + elif ( ossplay -f? ) > /dev/null 2>&1; then + ossplay -s8000 -fS16_LE ${file[$readchar]} 2> /dev/null + else + echo "could not find play, aplay or ossplay program" + fi + fi +done +echo diff --git a/libcodec2-android/src/codec2/script/ofdm_stack_use.py b/libcodec2-android/src/codec2/script/ofdm_stack_use.py new file mode 100755 index 0000000..9356cf1 --- /dev/null +++ b/libcodec2-android/src/codec2/script/ofdm_stack_use.py @@ -0,0 +1,150 @@ +#! /usr/bin/python3 + +""" Find stack usage using + - compiler generated tables of stack use per function, *.c.su + - run time trace output from compiler added enter/exit calls. + +Just for ofdm_stack at this point + +This script expects to be run in the .../build_linux/unittest directory! +""" + +COMP_DIR = 'CMakeFiles/ofdm_stack.dir' +EXE_FILE = './ofdm_stack' + +import sys +import os +import argparse +import pathlib +import subprocess + +########################## +# Options + +## Trace file (name) or default +## Use existing trace file or run command +argparser = argparse.ArgumentParser() +argparser.add_argument('-f', '--trace_file', action='store', default='function_trace.out', + help='Name of trace file, (default is "function_trace.out"') +argparser.add_argument('-x', '--exec', action='store_true', default=False, + help='Execute program') + +args = argparser.parse_args() + + +########################## +# Checking +cwd_path = pathlib.Path.cwd() +# One simple thing we can handle is running from above unittest (in build_linux) +if ((cwd_path.name != 'unittest') and + (pathlib.Path('unittest').exists())): + os.chdir('unittest') + +# Required files +assert(pathlib.Path(COMP_DIR).exists()) +assert(pathlib.Path(COMP_DIR + '/ofdm_stack.c.su').exists()) +assert(pathlib.Path(COMP_DIR + '/__/src/ofdm.c.su').exists()) + + +########################## +# If trace file not found, or option set, run command +if ( not (pathlib.Path(args.trace_file).exists())): + print('Trace file "{}" not found, running program'.format(args.trace_file)) + args.exec = True + +if (args.exec): + print('Running program: "{}"'.format(EXE_FILE)) + assert(pathlib.Path(EXE_FILE)) + result = subprocess.run([EXE_FILE], + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT) + if (result.returncode != 0): + print('Error: traced program failed! Output:\n{}'.format(result.stdout)) +assert(pathlib.Path(args.trace_file).exists()) + + +########################## +# Data Structures +su_data = {} # : +funcs_used = {} # : count + +########################## +# Read compiler generated tables of stack use per function, *.c.su +# +# ofdm_stack.c:184:6:dummy_code 16 static +# + +p = pathlib.Path(COMP_DIR) +for fpath in p.rglob('*.c.su'): + with fpath.open() as f: + for line in f.readlines(): + try: + words = line.split() + size = int(words[1]) + words = words[0].split(':') + su_data[words[3]] = size + except: pass # skip this line if there are errors + +########################## +# Read trace file, convert addresses to names, track stack + +max_stack_depth = 0 +cur_stack_depth = 0 +stack = [] # List of tuples of (function names, cur_stack_depth) +last_func = 'start' + +def walk_stack(): + trace = '' + for entry in stack: + trace += entry[0] + ' ' + return(trace) + +# Open trace +with open(args.trace_file, "r") as tf: + for line in tf.readlines(): + #print('Line: "{}"'.format(line.strip())) + words = line.split() + # Note addr2line needs addr in hex! + addr = words[1] + if (words[0] == 'e'): + # Note: This could be run once with a pipe if needed for faster operation. + result = subprocess.run(['addr2line', '-f', addr, '-e', EXE_FILE], + stdout=subprocess.PIPE) + result.check_returncode() + # function name is first line of stdout + if (result.stdout): + lines = result.stdout.decode().split('\n') + func = lines[0].strip() + else: sys.error('unknown function at address {}'.format(addr)) + + if (func != "??"): + + # Push last info + stack.append((last_func, cur_stack_depth)) + last_func = func + + # Update + cur_stack_depth += su_data[func] + #print('func: "{}" = {}'.format(func, cur_stack_depth)) + if (cur_stack_depth > max_stack_depth): + max_stack_depth = cur_stack_depth + max_stack_trace = walk_stack() + + # Save info + if (func in funcs_used): + funcs_used[func] += 1 + else: + funcs_used[func] = 1 + + # end if (func != "??") + + # end if ('e') + elif (words[0] == 'x'): + # Only pop functions we pushed + if (func in funcs_used): + # Pop + (last_func, cur_stack_depth) = stack.pop() + #print('pop: "{}" = {}'.format(last_func, cur_stack_depth)) + +print('Max Stack Depth = {}'.format(max_stack_depth)) +print('Max Stack at: {}'.format(max_stack_trace)) diff --git a/libcodec2-android/src/codec2/script/phi0_plot.py b/libcodec2-android/src/codec2/script/phi0_plot.py new file mode 100755 index 0000000..34a436b --- /dev/null +++ b/libcodec2-android/src/codec2/script/phi0_plot.py @@ -0,0 +1,80 @@ +#!/usr/bin/python3 + +""" Plot phi0, and (later) anaylze approximations + +""" + +import numpy as np +import matplotlib.pyplot as plt + +import math +import itertools +import sys + +def impl_reference(x): + if (x< 9.08e-5 ): r = 10 + else: + z = math.exp(x) + r = math.log( (z+1) / (z-1) ) + return(r) + +#### +# Table T1 + +t1_tbl = [] # A list of tuples (x, r) +t1_adj = 0.50 # Offset ratio for step of 1, estimate + +def t1_loop(upper, lower, step): + for i in range((int)(upper * step), (int)(lower * step), -1): + x = i / step + z = math.exp(x + (t1_adj / step)) + r = math.log((z+1)/(z-1)) + t1_tbl.append( (x, r) ) + print(x, r) + +# 9:5 step 1 +t1_loop(9, 4.999, 2) + +# 5:1 step 1/16 +t1_loop(4.999, 0.999, 16) + +# 1/(2^0.5), 1/(2^1), 1/(2^1.5), ... +for i in range(1, 28): + e = (2 ** (i/2)) + x = 1.0 / e + z = math.exp(x + (0.19 / e)) + r = math.log((z+1)/(z-1)) + t1_tbl.append( (x, r) ) + +def impl_t1(x): + if (x > 10): return(0) + else: + for t in t1_tbl: + if (x > t[0]): return(t[1]) + return(10) + + + +########################## +# Plot, scanning from 10 to 0 +x_vals = np.logspace(1, -4, 2000, endpoint=False) +ref_vals = [] +t1_vals = [] +for x in x_vals: + ref_vals.append(impl_reference(x)) + t1_vals.append(impl_t1(x)) + +# Sum errors +errsum = errsum2 = 0 +for i in range(len(ref_vals)): + error = t1_vals[i] - ref_vals[i] + errsum += error + errsum2 += error * error +print("Net error {}".format(errsum)) +print("avg error {}".format(errsum/len(ref_vals))) +print("rms error {}".format(math.sqrt(errsum2/len(ref_vals)))) + +plt.xscale('log') +plt.plot(x_vals, ref_vals, 'g', x_vals, t1_vals, 'r') +plt.show() + diff --git a/libcodec2-android/src/codec2/script/playraw.sh b/libcodec2-android/src/codec2/script/playraw.sh new file mode 100755 index 0000000..683cbaa --- /dev/null +++ b/libcodec2-android/src/codec2/script/playraw.sh @@ -0,0 +1,6 @@ +#!/bin/sh +# Plays a raw file +# usage: +# playraw file.raw +# playraw file.raw -d /dev/dsp1 (e.g. for USB headphones) +play -r 8000 -s -2 $1 $2 $3 diff --git a/libcodec2-android/src/codec2/script/raw2wav.sh b/libcodec2-android/src/codec2/script/raw2wav.sh new file mode 100755 index 0000000..a05efb7 --- /dev/null +++ b/libcodec2-android/src/codec2/script/raw2wav.sh @@ -0,0 +1,3 @@ +#!/bin/sh +# Converts 16 bit signed short 8 kHz raw (headerless) files to wave +sox -r 8000 -s -2 $1 $2 diff --git a/libcodec2-android/src/codec2/script/separate_all.sh b/libcodec2-android/src/codec2/script/separate_all.sh new file mode 100755 index 0000000..5fe6d9d --- /dev/null +++ b/libcodec2-android/src/codec2/script/separate_all.sh @@ -0,0 +1,11 @@ +#!/bin/sh +sox $1.wav hts1_$1.wav trim 0 3 +sox $1.wav hts2_$1.wav trim 3 3 +sox $1.wav morig_$1.wav trim 6 2 +sox $1.wav forig_$1.wav trim 8 2 +sox $1.wav ve9qrp_$1.wav trim 10 9.5 +sox $1.wav cq_ref_$1.wav trim 20 9 +sox $1.wav kristoff_$1.wav trim 29.5 4 +sox $1.wav vk5qi_$1.wav trim 33.5 13.5 +sox $1.wav vk5dgr_$1.wav trim 47 10 + diff --git a/libcodec2-android/src/codec2/script/train_700c_quant.sh b/libcodec2-android/src/codec2/script/train_700c_quant.sh new file mode 100755 index 0000000..4fd0c72 --- /dev/null +++ b/libcodec2-android/src/codec2/script/train_700c_quant.sh @@ -0,0 +1,107 @@ +#!/bin/bash -x +# train_700C_quant.sh +# David Rowe May 2019 +# +# Training a Vector Quantiser (VQ) for Codec 2 700C +# This is a two stage VQ with 512 entries (9 bits) per stage +# Also used to support other VQ experiments, such as the effect of the +# post filter and an experimental equaliser, see octave/vq_700c_eq.m + +SRC=~/Downloads/all_speech_8k.sw +CODEC2_BUILD=/home/david/codec2/build_linux +K=20 +SAMPLES=~/tmp/c2vec_pass2 + +# train a new VQ +function train() { + # c2enc can dump "feature vectors" that contain the current VQ input + $CODEC2_BUILD/src/c2enc 700C $SRC /dev/null --mlfeat feat.f32 + # extract VQ input as training data, then train two stage VQ + $CODEC2_BUILD/misc/extract -s 1 -e $K -t 41 feat.f32 stage0_in.f32 + $CODEC2_BUILD/misc/vqtrain stage0_in.f32 $K 512 vq_stage1.f32 -s 1e-3 -r stage1_in.f32 + $CODEC2_BUILD/misc/vqtrain stage1_in.f32 $K 512 vq_stage2.f32 -s 1e-3 +} + +# encode/decode a file with the stock codec2 700C VQ +function test_a() { + b=$(basename "$1" .raw) + $CODEC2_BUILD/src/c2enc 700C $1'.raw' - --var | $CODEC2_BUILD/src/c2dec 700C - - | sox -q -t .s16 -c 1 -r 8000 -b 16 - $SAMPLES/$b'_a.wav' +} + +# stock 700C VQ like test_a, but no postfilter +function test_a_nopf() { + b=$(basename "$1" .raw) + $CODEC2_BUILD/src/c2enc 700C $1'.raw' - --var | $CODEC2_BUILD/src/c2dec 700C - - --nopf | \ + sox -q -t .s16 -c 1 -r 8000 -b 16 - $SAMPLES/$b'_a_nopf.wav' +} + +# encode/decode a file with the new VQ we just trained above +function test_b() { + b=$(basename "$1" .raw) + $CODEC2_BUILD/src/c2enc 700C $1'.raw' - --loadcb 1 vq_stage1.f32 --loadcb 2 vq_stage2.f32 --var | \ + $CODEC2_BUILD/src/c2dec 700C - - --loadcb 1 vq_stage1.f32 --loadcb 2 vq_stage2.f32 | sox -q -t .s16 -c 1 -r 8000 -b 16 - $SAMPLES/$b'_b.wav' +} + +# just like b but no postfilter +function test_b_nopf() { + b=$(basename "$1" .raw) + $CODEC2_BUILD/src/c2enc 700C $1'.raw' - --loadcb 1 vq_stage1.f32 --loadcb 2 vq_stage2.f32 --var | \ + $CODEC2_BUILD/src/c2dec 700C - - --loadcb 1 vq_stage1.f32 --loadcb 2 vq_stage2.f32 $2 --nopf | \ + sox -q -t .s16 -c 1 -r 8000 -b 16 - $SAMPLES/$b'_b_nopf.wav' +} + +# pass an unquantised rate K vector through to the decoder as a control +function test_uq() { + b=$(basename "$1" .raw) + $CODEC2_BUILD/src/c2enc 700C $1'.raw' $b'.bin' --mlfeat $b'_feat.f32' + $CODEC2_BUILD/misc/extract -s 1 -e 20 -t 41 $b'_feat.f32' $b'_ratek.f32' + $CODEC2_BUILD/src/c2dec 700C $b'.bin' - --loadratek $b'_ratek.f32' | sox -q -t .s16 -c 1 -r 8000 -b 16 - $SAMPLES/$b'_uq.wav' +} + +# extract features for use in octave octave/vq_700c_eq.m +function feat() { + RAW_FILES="../raw/hts1a ../raw/hts2a ../raw/vk5qi ../raw/cq_ref ../raw/ve9qrp_10s $HOME/Downloads/ma01_01 $HOME/Downloads/c01_01_8k $HOME/Downloads/cq_freedv_8k $HOME/Downloads/cq_freedv_8k_lfboost $HOME/Downloads/cq_freedv_8k_hfcut " + for f in $RAW_FILES + do + b=$(basename "$f" .raw) + $CODEC2_BUILD/src/c2enc 700C $f'.raw' $b'.bin' --mlfeat $b'_feat.f32' + done +} + +# generate a bunch of test samples for a listening test +function listen() { + RAW_FILES="../raw/hts1a ../raw/hts2a ../raw/vk5qi ../raw/cq_ref ../raw/ve9qrp_10s $HOME/Downloads/ma01_01 $HOME/Downloads/c01_01_8k $HOME/Downloads/cq_freedv_8k" + for f in $RAW_FILES + do + test_a $f + test_a_nopf $f + test_b $f + test_b_nopf $f + test_uq $f + done +} + +# Generate a bunch of test samples for VQ equalisation listening tests. Assumes +# Octave has generated rate K quantised .f32 files +function listen_vq_eq() { + FILES="hts1a hts2a vk5qi cq_ref ve9qrp_10s ma01_01 c01_01_8k cq_freedv_8k cq_freedv_8k_lfboost cq_freedv_8k_hfcut" + for f in $FILES + do + # try equaliser wth train_120 VQ + $CODEC2_BUILD/src/c2dec 700C $f'.bin' - --loadratek $f'_vq2.f32' | sox -q -t .s16 -c 1 -r 8000 -b 16 - $SAMPLES/$f'_vq2.wav' + $CODEC2_BUILD/src/c2dec 700C $f'.bin' - --loadratek $f'_vq2_eq1.f32' | sox -q -t .s16 -c 1 -r 8000 -b 16 - $SAMPLES/$f'_vq2_eq1.wav' + $CODEC2_BUILD/src/c2dec 700C $f'.bin' - --loadratek $f'_vq2_eq2.f32' | sox -q -t .s16 -c 1 -r 8000 -b 16 - $SAMPLES/$f'_vq2_eq2.wav' + # try equaliser wth train_all_speech VQ + #$CODEC2_BUILD/src/c2dec 700C $f'.bin' - --loadratek $f'_vq2_as.f32' | sox -q -t .s16 -c 1 -r 8000 -b 16 - $SAMPLES/$f'_vq2_as.wav' + #$CODEC2_BUILD/src/c2dec 700C $f'.bin' - --loadratek $f'_vq2_as_eq.f32' | sox -q -t .s16 -c 1 -r 8000 -b 16 - $SAMPLES/$f'_vq2_as_eq.wav' + done +} + +mkdir -p $SAMPLES + +# choose which function to run here +#train +#listen +#feat +listen_vq_eq + diff --git a/libcodec2-android/src/codec2/script/wav2raw.sh b/libcodec2-android/src/codec2/script/wav2raw.sh new file mode 100755 index 0000000..39c0f1a --- /dev/null +++ b/libcodec2-android/src/codec2/script/wav2raw.sh @@ -0,0 +1,3 @@ +#!/bin/sh +# Converts wave files to raw (headerless) files +sox $1 -t raw $2 diff --git a/libcodec2-android/src/codec2/src/CMakeLists.txt b/libcodec2-android/src/codec2/src/CMakeLists.txt new file mode 100644 index 0000000..816e9a7 --- /dev/null +++ b/libcodec2-android/src/codec2/src/CMakeLists.txt @@ -0,0 +1,393 @@ +# +# Generated sources +# + +set(D ${CMAKE_CURRENT_SOURCE_DIR}/codebook) + +# lsp quantisers (2400/1400/1300 modes) +set(CODEBOOKS + ${D}/lsp1.txt + ${D}/lsp2.txt + ${D}/lsp3.txt + ${D}/lsp4.txt + ${D}/lsp5.txt + ${D}/lsp6.txt + ${D}/lsp7.txt + ${D}/lsp8.txt + ${D}/lsp9.txt + ${D}/lsp10.txt +) + +# lspd quantisers (3200 mode) +set(CODEBOOKSD + ${D}/dlsp1.txt + ${D}/dlsp2.txt + ${D}/dlsp3.txt + ${D}/dlsp4.txt + ${D}/dlsp5.txt + ${D}/dlsp6.txt + ${D}/dlsp7.txt + ${D}/dlsp8.txt + ${D}/dlsp9.txt + ${D}/dlsp10.txt +) + +# LSP VQ (1200 mode) +set(CODEBOOKSJVM + ${D}/lspjvm1.txt + ${D}/lspjvm2.txt + ${D}/lspjvm3.txt +) + +# Joint Wo-energy VQ (1200 mode) +set(CODEBOOKSGE ${D}/gecb.txt) + +# 700C two stage VQ +set(CODEBOOKSNEWAMP1 + ${D}/train_120_1.txt + ${D}/train_120_2.txt +) + +set(CODEBOOKSNEWAMP1_ENERGY + ${D}/newamp1_energy_q.txt +) + +# 450 mode two stage VQ +set(CODEBOOKSNEWAMP2 + ${D}/codes_450.txt +) + +set(CODEBOOKSNEWAMP2_ENERGY + ${D}/newamp2_energy_q.txt +) + +# when crosscompiling we need a native executable +if(CMAKE_CROSSCOMPILING) + include(ExternalProject) + ExternalProject_Add(codec2_native + SOURCE_DIR ${CMAKE_SOURCE_DIR} + BUILD_COMMAND $(MAKE) generate_codebook + INSTALL_COMMAND ${CMAKE_COMMAND} -E copy src/generate_codebook ${CMAKE_CURRENT_BINARY_DIR} + ) + add_executable(generate_codebook IMPORTED) + set_target_properties(generate_codebook PROPERTIES + IMPORTED_LOCATION ${CMAKE_CURRENT_BINARY_DIR}/generate_codebook) + add_dependencies(generate_codebook codec2_native) +else(CMAKE_CROSSCOMPILING) +# Build code generator binaries. These do not get installed. + # generate_codebook + add_executable(generate_codebook generate_codebook.c) + target_link_libraries(generate_codebook m ${CMAKE_REQUIRED_LIBRARIES}) + # Make native builds available for cross-compiling. + export(TARGETS generate_codebook + FILE ${CMAKE_BINARY_DIR}/ImportExecutables.cmake) +endif(CMAKE_CROSSCOMPILING) + + +# codebook.c +add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/codebook.c + COMMAND generate_codebook lsp_cb ${CODEBOOKS} > ${CMAKE_CURRENT_BINARY_DIR}/codebook.c + DEPENDS generate_codebook ${CODEBOOKS} +) + +# codebookd.c +add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/codebookd.c + COMMAND generate_codebook lsp_cbd ${CODEBOOKSD} > ${CMAKE_CURRENT_BINARY_DIR}/codebookd.c + DEPENDS generate_codebook ${CODEBOOKSD} +) + +# codebookjvm.c +add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/codebookjvm.c + COMMAND generate_codebook lsp_cbjvm ${CODEBOOKSJVM} > ${CMAKE_CURRENT_BINARY_DIR}/codebookjvm.c + DEPENDS generate_codebook ${CODEBOOKSJVM} +) + +# codebookge.c +add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/codebookge.c + COMMAND generate_codebook ge_cb ${CODEBOOKSGE} > ${CMAKE_CURRENT_BINARY_DIR}/codebookge.c + DEPENDS generate_codebook ${CODEBOOKSGE} +) + +# codebooknewamp1.c +add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/codebooknewamp1.c + COMMAND generate_codebook newamp1vq_cb ${CODEBOOKSNEWAMP1} > ${CMAKE_CURRENT_BINARY_DIR}/codebooknewamp1.c + DEPENDS generate_codebook ${CODEBOOKSNEWAMP1} +) + +# codebooknewamp1_energy.c +add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/codebooknewamp1_energy.c + COMMAND generate_codebook newamp1_energy_cb ${CODEBOOKSNEWAMP1_ENERGY} > ${CMAKE_CURRENT_BINARY_DIR}/codebooknewamp1_energy.c + DEPENDS generate_codebook ${CODEBOOKSNEWAMP1_ENERGY} +) + +# codebooknewamp2.c +add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/codebooknewamp2.c + COMMAND generate_codebook newamp2vq_cb ${CODEBOOKSNEWAMP2} > ${CMAKE_CURRENT_BINARY_DIR}/codebooknewamp2.c + DEPENDS generate_codebook ${CODEBOOKSNEWAMP2} +) + +# codebooknewamp2_energy.c +add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/codebooknewamp2_energy.c + COMMAND generate_codebook newamp2_energy_cb ${CODEBOOKSNEWAMP2_ENERGY} > ${CMAKE_CURRENT_BINARY_DIR}/codebooknewamp2_energy.c + DEPENDS generate_codebook ${CODEBOOKSNEWAMP2_ENERGY} +) + +# +# codec2 library sources +# + +set(CODEC2_SRCS + dump.c + lpc.c + nlp.c + postfilter.c + sine.c + codec2.c + codec2_fft.c + cohpsk.c + codec2_fifo.c + fdmdv.c + fm.c + fsk.c + fmfsk.c + kiss_fft.c + kiss_fftr.c + linreg.c + interp.c + lsp.c + mbest.c + newamp1.c + newamp2.c + ofdm.c + ofdm_mode.c + phase.c + quantise.c + pack.c + codebook.c + codebookd.c + codebookjvm.c + codebookge.c + codebooknewamp1.c + codebooknewamp1_energy.c + codebooknewamp2.c + codebooknewamp2_energy.c + golay23.c + freedv_api.c + freedv_1600.c + freedv_700.c + freedv_2020.c + freedv_fsk.c + freedv_vhf_framing.c + freedv_data_channel.c + varicode.c + modem_stats.c + ofdm.c + mpdecode_core.c + phi0.c + gp_interleaver.c + interldpc.c + filter.c + HRA_112_112.c + HRAb_396_504.c + H_256_768_22.c + H_256_512_4.c + HRAa_1536_512.c + H_128_256_5.c + ldpc_codes.c + lpcnet_freq.c +) + +set(CODEC2_PUBLIC_HEADERS + codec2.h + codec2_fdmdv.h + codec2_cohpsk.h + codec2_fm.h + codec2_ofdm.h + fsk.h + codec2_fifo.h + comp.h + modem_stats.h + freedv_api.h + ${CODEC2_VERSION_PATH}/version.h +) + +# +# Debug options +# +#add_definitions(-DDEBUG_ALLOC) + +# +# Setup the codec2 library +# +add_library(codec2 ${CODEC2_SRCS}) +if(UNIX) + target_link_libraries(codec2 m) +endif(UNIX) +if(LPCNET AND lpcnetfreedv_FOUND) + target_link_libraries(codec2 lpcnetfreedv) +endif() +include_directories(${CMAKE_CURRENT_SOURCE_DIR}) +set_target_properties(codec2 PROPERTIES + SOVERSION ${SOVERSION} + PUBLIC_HEADER "${CODEC2_PUBLIC_HEADERS}" +) + +# Required include directories for export +target_include_directories(codec2 INTERFACE + $ + $ + $ +) + +# Export config for import from full install +install(EXPORT codec2-config + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/codec2 +) + +# Export config for import from build tree. +export(TARGETS codec2 + FILE ${CMAKE_BINARY_DIR}/codec2.cmake +) + +add_executable(c2demo c2demo.c) +target_link_libraries(c2demo ${CMAKE_REQUIRED_LIBRARIES} codec2) + +add_executable(c2enc c2enc.c) +target_link_libraries(c2enc ${CMAKE_REQUIRED_LIBRARIES} codec2) + +add_executable(c2dec c2dec.c) +target_link_libraries(c2dec ${CMAKE_REQUIRED_LIBRARIES} codec2) + +add_executable(c2sim c2sim.c) +target_link_libraries(c2sim ${CMAKE_REQUIRED_LIBRARIES} codec2) + +add_executable(fdmdv_get_test_bits fdmdv_get_test_bits.c fdmdv.c kiss_fft.c codec2_fft.c kiss_fftr.c) +target_link_libraries(fdmdv_get_test_bits m ${CMAKE_REQUIRED_LIBRARIES}) + +add_executable(fdmdv_mod fdmdv_mod.c fdmdv.c kiss_fft.c codec2_fft.c kiss_fftr.c) +target_link_libraries(fdmdv_mod m ${CMAKE_REQUIRED_LIBRARIES}) + +add_executable(fdmdv_demod fdmdv_demod.c fdmdv.c kiss_fft.c octave.c modem_stats.c codec2_fft.c kiss_fftr.c) +target_link_libraries(fdmdv_demod m ${CMAKE_REQUIRED_LIBRARIES}) + +add_executable(fdmdv_put_test_bits fdmdv_put_test_bits.c fdmdv.c kiss_fft.c codec2_fft.c kiss_fftr.c) +target_link_libraries(fdmdv_put_test_bits m ${CMAKE_REQUIRED_LIBRARIES}) + +add_executable(fdmdv_channel fdmdv_channel.c) +target_link_libraries(fdmdv_channel ${CMAKE_REQUIRED_LIBRARIES} codec2) + +add_executable(insert_errors insert_errors.c) +target_link_libraries(insert_errors ${CMAKE_REQUIRED_LIBRARIES}) + +add_executable(freedv_tx freedv_tx.c) +target_link_libraries(freedv_tx ${CMAKE_REQUIRED_LIBRARIES} codec2) + +add_executable(freedv_rx freedv_rx.c) +target_link_libraries(freedv_rx ${CMAKE_REQUIRED_LIBRARIES} codec2) + +add_executable(freedv_data_raw_tx freedv_data_raw_tx.c) +target_link_libraries(freedv_data_raw_tx ${CMAKE_REQUIRED_LIBRARIES} codec2) + +add_executable(freedv_data_raw_rx freedv_data_raw_rx.c) +target_link_libraries(freedv_data_raw_rx ${CMAKE_REQUIRED_LIBRARIES} codec2) + +add_executable(freedv_data_tx freedv_data_tx.c) +target_link_libraries(freedv_data_tx ${CMAKE_REQUIRED_LIBRARIES} codec2) + +add_executable(freedv_data_rx freedv_data_rx.c) +target_link_libraries(freedv_data_rx ${CMAKE_REQUIRED_LIBRARIES} codec2) + +add_executable(freedv_mixed_tx freedv_mixed_tx.c) +target_link_libraries(freedv_mixed_tx ${CMAKE_REQUIRED_LIBRARIES} codec2) + +add_executable(freedv_mixed_rx freedv_mixed_rx.c) +target_link_libraries(freedv_mixed_rx ${CMAKE_REQUIRED_LIBRARIES} codec2) + +add_executable(fsk_mod fsk_mod.c) +target_link_libraries(fsk_mod ${CMAKE_REQUIRED_LIBRARIES} codec2) + +add_executable(fsk_mod_ext_vco fsk_mod_ext_vco.c) +target_link_libraries(fsk_mod_ext_vco m ${CMAKE_REQUIRED_LIBRARIES}) + +add_executable(fsk_demod fsk_demod.c modem_probe.c octave.c) +target_link_libraries(fsk_demod ${CMAKE_REQUIRED_LIBRARIES} codec2) + +add_executable(fsk_get_test_bits fsk_get_test_bits.c) +target_link_libraries(fsk_get_test_bits) + +add_executable(fsk_put_test_bits fsk_put_test_bits.c) +target_link_libraries(fsk_put_test_bits ${CMAKE_REQUIRED_LIBRARIES} codec2) + +add_executable(framer framer.c) +target_link_libraries(framer) + +add_executable(deframer deframer.c) +target_link_libraries(deframer) + +add_executable(fm_demod fm_demod.c fm.c) +target_link_libraries(fm_demod m ${CMAKE_REQUIRED_LIBRARIES}) + +add_executable(cohpsk_mod cohpsk_mod.c) +target_link_libraries(cohpsk_mod ${CMAKE_REQUIRED_LIBRARIES} codec2) + +add_executable(ofdm_get_test_bits ofdm_get_test_bits.c) +target_link_libraries(ofdm_get_test_bits ${CMAKE_REQUIRED_LIBRARIES} codec2) + +add_executable(ofdm_put_test_bits ofdm_put_test_bits.c) +target_link_libraries(ofdm_put_test_bits ${CMAKE_REQUIRED_LIBRARIES} codec2) + +add_executable(ofdm_mod ofdm_mod.c) +target_link_libraries(ofdm_mod ${CMAKE_REQUIRED_LIBRARIES} codec2) + +add_executable(ofdm_demod ofdm_demod.c octave.c) +target_link_libraries(ofdm_demod ${CMAKE_REQUIRED_LIBRARIES} codec2) + +add_executable(fmfsk_mod fmfsk_mod.c) +target_link_libraries(fmfsk_mod ${CMAKE_REQUIRED_LIBRARIES} codec2) + +add_executable(fmfsk_demod fmfsk_demod.c modem_probe.c octave.c) +target_link_libraries(fmfsk_demod ${CMAKE_REQUIRED_LIBRARIES} codec2) + +add_executable(vhf_deframe_c2 vhf_deframe_c2.c) +target_link_libraries(vhf_deframe_c2 ${CMAKE_REQUIRED_LIBRARIES} codec2) + +add_executable(vhf_frame_c2 vhf_frame_c2.c) +target_link_libraries(vhf_frame_c2 ${CMAKE_REQUIRED_LIBRARIES} codec2) + +add_executable(cohpsk_demod cohpsk_demod.c octave.c) +target_link_libraries(cohpsk_demod ${CMAKE_REQUIRED_LIBRARIES} codec2) + +add_executable(cohpsk_get_test_bits cohpsk_get_test_bits.c) +target_link_libraries(cohpsk_get_test_bits ${CMAKE_REQUIRED_LIBRARIES} codec2) + +add_executable(cohpsk_put_test_bits cohpsk_put_test_bits.c octave.c) +target_link_libraries(cohpsk_put_test_bits ${CMAKE_REQUIRED_LIBRARIES} codec2) + +add_executable(cohpsk_ch cohpsk_ch.c) +target_link_libraries(cohpsk_ch ${CMAKE_REQUIRED_LIBRARIES} codec2) + +add_executable(tollr tollr.c) + +add_executable(ldpc_noise ldpc_noise.c) +target_link_libraries(ldpc_noise m) + +add_executable(ldpc_enc ldpc_enc.c) +target_link_libraries(ldpc_enc ${CMAKE_REQUIRED_LIBRARIES} codec2) + +add_executable(ldpc_dec ldpc_dec.c) +target_link_libraries(ldpc_dec ${CMAKE_REQUIRED_LIBRARIES} codec2) + +install(TARGETS codec2 EXPORT codec2-config + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/codec2 +) diff --git a/libcodec2-android/src/codec2/src/H2064_516_sparse.h b/libcodec2-android/src/codec2/src/H2064_516_sparse.h new file mode 100644 index 0000000..d3d4797 --- /dev/null +++ b/libcodec2-android/src/codec2/src/H2064_516_sparse.h @@ -0,0 +1,33 @@ +/* + FILE....: ../src/H2064_516_sparse.h + + Static arrays for CML LDPC codec, generated + by test_ldpc_fsk.m:simple_ut(). + +*/ + +#define NUMBERPARITYBITS 516 +#define MAX_ROW_WEIGHT 12 +#define CODELENGTH 2580 +#define NUMBERROWSHCOLS 2064 +#define MAX_COL_WEIGHT 3 +#define DEC_TYPE 0 +#define MAX_ITER 10 + +#include + +uint16_t H_rows[] = { +870, 276, 110, 54, 226, 85, 59, 153, 31, 60, 46, 75, 139, 239, 56, 13, 30, 45, 63, 34, 54, 21, 77, 204, 441, 11, 297, 126, 148, 104, 269, 57, 369, 213, 117, 479, 53, 124, 405, 97, 42, 132, 67, 103, 389, 156, 237, 105, 418, 11, 60, 12, 195, 32, 11, 21, 10, 191, 176, 237, 140, 376, 115, 9, 149, 304, 129, 308, 234, 129, 453, 215, 176, 213, 151, 169, 41, 106, 421, 103, 83, 62, 124, 3, 574, 39, 31, 472, 69, 8, 40, 352, 62, 275, 74, 121, 125, 35, 83, 52, 21, 422, 229, 233, 62, 125, 181, 175, 28, 43, 113, 340, 71, 4, 40, 249, 134, 168, 97, 15, 26, 135, 104, 80, 206, 108, 307, 494, 358, 82, 159, 137, 19, 210, 6, 19, 65, 285, 45, 154, 276, 14, 137, 79, 241, 235, 116, 129, 84, 3, 122, 370, 132, 451, 77, 89, 262, 79, 170, 469, 24, 163, 128, 18, 120, 244, 8, 153, 151, 441, 95, 327, 284, 96, 84, 35, 61, 286, 20, 22, 68, 131, 106, 30, 280, 343, 99, 124, 262, 208, 277, 44, 349, 41, 10, 761, 39, 445, 165, 81, 393, 194, 18, 250, 589, 70, 307, 1, 365, 47, 4, 9, 283, 133, 90, 601, 117, 228, 212, 58, 420, 230, 142, 25, 57, 518, 88, 180, 24, 122, 379, 143, 33, 30, 140, 68, 150, 320, 55, 33, 132, 2, 22, 16, 272, 44, 264, 49, 174, 234, 86, 39, 10, 278, 177, 178, 20, 126, 18, 90, 6, 184, 158, 111, 246, 229, 221, 48, 267, 6, 172, 49, 291, 185, 67, 50, 157, 66, 32, 525, 257, 196, 260, 92, 72, 163, 144, 329, 134, 156, 47, 82, 49, 391, 26, 1, 88, 52, 56, 8, 111, 138, 219, 57, 447, 182, 263, 38, 98, 75, 36, 83, 245, 5, 419, 63, 12, 287, 603, 58, 507, 37, 2, 214, 539, 55, 53, 81, 186, 73, 85, 97, 91, 332, 123, 66, 188, 591, 158, 324, 88, 53, 214, 84, 389, 104, 271, 211, 7, 393, 281, 242, 119, 848, 705, 428, 50, 28, 52, 15, 5, 2, 230, 38, 76, 295, 217, 1, 56, 170, 145, 5, 72, 460, 203, 145, 211, 121, 68, 538, 44, 133, 87, 494, 325, 161, 781, 370, 51, 115, 262, 106, 614, 29, 220, 189, 224, 165, 17, 72, 46, 17, 64, 19, 447, 13, 9, 270, 4, 91, 471, 35, 23, 407, 34, 38, 82, 321, 112, 195, 651, 7, 43, 431, 249, 171, 196, 311, 15, 66, 16, 633, 37, 94, 102, 23, 3, 214, 252, 256, 173, 316, 125, 96, 341, 71, 73, 338, 256, 165, 140, 108, 471, 434, 137, 642, 172, 51, 113, 67, 172, 93, 23, 318, 514, 50, 118, 245, 169, 14, 64, 40, 859, 95, 308, 65, 93, 42, 339, 46, 7, 96, 142, 36, 131, 60, 13, 12, 25, 31, 183, 94, 43, 241, 162, 26, 232, 120, 128, 118, 89, 164, 51, 29, 127, 177, 180, 95, 332, 284, 32, 802, 452, 25, 382, 187, 892, 432, 162, 126, 587, 342, 205, 170, 255, 73, 605, 579, 398, 305, 58, 110, 178, 244, 306, 178, 166, 28, 368, 224, 582, 135, 420, 618, 264, 234, 346, 223, 439, 399, 150, 655, 242, 248, 750, 199, 242, 277, 112, 163, 545, 359, 487, 322, 570, 64, 402, 412, 252, 116, 147, 109, 27, 197, 204, 251, 282, 455, 118, 390, 225, 382, 215, 373, 554, 371, 568, 289, 225, 405, 160, 414, 290, 109, 524, 406, 344, 188, 385, 33, 791, 261, 171, 475, 100, 183, 156, 564, 78, 395, 144, 497, 334, 45, 167, 79, 27, 520, 239, 449, 138, 347, 667, 572, 61, 278, 136, 375, 231, 320, 167, 304, 389, 185, 171, 109, 468, 243, 206, 210, 305, 160, 682, 514, 433, 152, 375, 1064, 48, 522, 139, 98, 191, 557, 127, 189, 372, 54, 515, 406, 370, 950, 549, 352, 319, 27, 489, 440, 636, 941, 153, 102, 268, 120, 190, 719, 451, 175, 539, 477, 279, 474, 17, 232, 221, 476, 174, 415, 545, 357, 368, 149, 94, 409, 218, 76, 87, 136, 114, 245, 596, 408, 335, 246, 511, 560, 438, 298, 351, 91, 22, 813, 108, 546, 248, 218, 629, 212, 223, 569, 611, 93, 399, 185, 427, 260, 20, 111, 354, 187, 150, 702, 316, 666, 541, 227, 558, 486, 207, 450, 224, 568, 222, 341, 81, 222, 386, 441, 484, 159, 289, 142, 372, 534, 157, 78, 337, 522, 70, 293, 318, 161, 325, 74, 194, 797, 130, 128, 70, 386, 657, 611, 105, 456, 230, 100, 61, 274, 358, 135, 249, 236, 247, 264, 279, 123, 345, 59, 397, 645, 448, 80, 192, 149, 190, 564, 292, 508, 359, 202, 152, 459, 200, 446, 293, 512, 103, 154, 229, 492, 145, 256, 828, 55, 296, 133, 147, 314, 220, 190, 481, 208, 290, 198, 146, 100, 202, 259, 295, 16, 505, 251, 86, 375, 618, 266, 891, 166, 159, 269, 850, 127, 397, 759, 494, 141, 567, 339, 119, 336, 162, 98, 265, 770, 423, 380, 346, 116, 402, 101, 628, 623, 286, 309, 107, 453, 406, 496, 200, 865, 720, 429, 187, 107, 609, 439, 90, 48, 330, 59, 87, 632, 323, 219, 101, 865, 203, 14, 74, 466, 462, 160, 448, 168, 474, 980, 396, 148, 244, 904, 438, 198, 982, 601, 199, 119, 300, 240, 702, 241, 258, 192, 291, 227, 34, 698, 78, 107, 123, 89, 704, 114, 274, 461, 151, 115, 576, 323, 201, 468, 271, 231, 92, 592, 220, 909, 829, 243, 480, 466, 345, 763, 404, 356, 86, 110, 210, 688, 353, 271, 740, 226, 352, 247, 288, 758, 338, 426, 235, 405, 625, 155, 146, 475, 491, 189, 177, 216, 962, 503, 216, 726, 381, 219, 183, 102, 332, 113, 155, 440, 922, 450, 379, 294, 301, 36, 80, 75, 875, 462, 547, 69, 330, 186, 527, 92, 138, 157, 169, 69, 143, 401, 24, 283, 41, 37, 472, 309, 117, 747, 342, 251, 300, 182, 216, 202, 266, 192, 217, 302, 660, 360, 663, 130, 355, 367, 47, 1103, 519, 811, 586, 488, 983, 652, 303, 201, 759, 860, 416, 585, 268, 428, 928, 819, 821, 379, 340, 493, 260, 752, 599, 314, 182, 444, 612, 369, 692, 311, 523, 622, 335, 259, 499, 225, 526, 409, 188, 709, 356, 606, 777, 222, 541, 327, 201, 176, 551, 544, 1008, 372, 628, 181, 523, 549, 476, 464, 240, 593, 181, 254, 223, 305, 285, 595, 217, 887, 550, 552, 278, 381, 621, 517, 953, 538, 265, 581, 313, 540, 366, 626, 647, 511, 467, 508, 890, 63, 976, 275, 312, 885, 598, 254, 180, 687, 196, 398, 146, 675, 380, 101, 443, 122, 85, 531, 347, 463, 167, 536, 724, 710, 288, 351, 232, 387, 424, 650, 363, 544, 540, 248, 279, 121, 479, 267, 218, 445, 485, 240, 737, 692, 1017, 331, 716, 1130, 207, 602, 274, 750, 261, 572, 131, 435, 672, 253, 729, 542, 739, 1062, 731, 619, 328, 65, 769, 502, 898, 966, 158, 211, 289, 193, 314, 784, 533, 396, 567, 497, 280, 696, 348, 290, 383, 636, 526, 470, 622, 541, 411, 286, 378, 561, 374, 194, 349, 166, 143, 390, 697, 533, 570, 304, 615, 709, 476, 679, 454, 287, 114, 904, 535, 786, 270, 308, 828, 302, 506, 732, 626, 533, 584, 186, 456, 495, 350, 317, 672, 343, 315, 919, 367, 820, 548, 296, 614, 635, 209, 543, 350, 733, 239, 376, 287, 344, 470, 563, 607, 319, 323, 473, 428, 677, 212, 263, 386, 567, 435, 328, 616, 255, 729, 147, 320, 855, 267, 426, 261, 458, 977, 670, 173, 478, 366, 112, 71, 419, 968, 139, 606, 292, 275, 463, 344, 671, 810, 77, 465, 755, 579, 179, 353, 357, 442, 599, 354, 805, 453, 407, 193, 510, 285, 513, 583, 645, 325, 173, 621, 573, 423, 479, 912, 130, 300, 227, 184, 391, 293, 204, 673, 282, 371, 324, 313, 228, 334, 343, 655, 42, 532, 559, 658, 484, 921, 373, 944, 329, 184, 302, 861, 205, 414, 771, 606, 312, 652, 503, 413, 415, 238, 449, 781, 874, 586, 544, 402, 468, 525, 155, 845, 714, 295, 564, 197, 509, 863, 640, 209, 986, 808, 691, 317, 355, 789, 779, 281, 141, 594, 336, 105, 682, 360, 299, 559, 876, 608, 315, 401, 632, 480, 161, 577, 284, 657, 1012, 481, 330, 388, 1011, 524, 423, 1019, 812, 416, 168, 322, 258, 710, 703, 1027, 195, 447, 259, 633, 990, 710, 215, 410, 458, 760, 174, 312, 605, 269, 206, 617, 534, 554, 497, 296, 393, 236, 784, 483, 1189, 892, 602, 788, 709, 382, 831, 537, 695, 99, 563, 424, 759, 432, 281, 795, 319, 422, 684, 331, 866, 377, 638, 247, 501, 711, 463, 475, 631, 507, 310, 298, 252, 1059, 757, 364, 785, 410, 233, 411, 236, 487, 339, 341, 473, 1022, 527, 515, 700, 380, 388, 414, 253, 913, 466, 773, 238, 638, 335, 896, 298, 310, 658, 461, 207, 205, 550, 29, 425, 141, 76, 649, 442, 322, 832, 730, 307, 385, 401, 268, 301, 311, 306, 291, 364, 864, 560, 840, 199, 358, 385, 179, 1142, 520, 986, 600, 712, 1018, 661, 365, 237, 769, 953, 517, 605, 396, 459, 991, 867, 899, 415, 700, 556, 324, 788, 639, 778, 226, 743, 685, 706, 883, 362, 970, 785, 387, 376, 734, 392, 730, 448, 250, 731, 387, 665, 1015, 243, 812, 391, 795, 346, 588, 737, 1077, 874, 933, 412, 817, 585, 550, 491, 273, 640, 208, 542, 338, 436, 895, 694, 257, 899, 583, 629, 327, 815, 744, 573, 1226, 727, 272, 607, 331, 1050, 594, 754, 716, 515, 524, 695, 1086, 297, 1177, 400, 678, 1004, 648, 294, 555, 780, 316, 486, 689, 679, 430, 136, 717, 233, 400, 646, 383, 530, 263, 574, 749, 790, 336, 377, 409, 609, 499, 686, 518, 595, 601, 334, 531, 197, 485, 348, 424, 701, 579, 500, 1147, 797, 1085, 404, 738, 1200, 253, 714, 427, 756, 303, 610, 313, 1399, 770, 455, 732, 796, 824, 1230, 927, 929, 397, 276, 794, 741, 957, 1052, 1002, 213, 392, 566, 461, 832, 798, 433, 590, 723, 718, 755, 878, 446, 615, 669, 776, 608, 659, 565, 443, 457, 407, 577, 631, 255, 365, 399, 152, 766, 814, 556, 640, 1137, 1000, 767, 745, 733, 1194, 529, 238, 1034, 789, 1314, 436, 493, 853, 492, 654, 809, 885, 636, 596, 270, 848, 774, 364, 512, 832, 411, 516, 927, 700, 857, 588, 703, 756, 758, 315, 574, 810, 885, 416, 600, 690, 417, 501, 626, 707, 581, 377, 916, 660, 808, 587, 265, 395, 613, 906, 381, 661, 310, 799, 148, 632, 941, 750, 578, 277, 1065, 1242, 1018, 326, 551, 459, 134, 99, 510, 1097, 198, 673, 531, 450, 697, 394, 749, 948, 193, 664, 965, 818, 454, 419, 556, 721, 742, 473, 886, 647, 694, 209, 906, 433, 674, 620, 666, 464, 446, 634, 728, 430, 630, 990, 435, 371, 534, 394, 467, 928, 326, 723, 490, 816, 699, 490, 530, 384, 361, 772, 374, 554, 619, 672, 613, 924, 677, 1079, 404, 367, 337, 898, 228, 418, 844, 766, 317, 680, 690, 566, 680, 333, 726, 960, 942, 637, 607, 452, 664, 698, 235, 942, 736, 368, 584, 362, 650, 871, 683, 328, 1141, 988, 715, 915, 495, 1084, 919, 613, 179, 888, 355, 144, 1243, 655, 551, 582, 993, 730, 340, 548, 774, 643, 469, 651, 392, 843, 1196, 590, 573, 545, 1211, 593, 439, 1027, 869, 586, 442, 762, 502, 758, 822, 1048, 254, 628, 417, 683, 996, 752, 384, 725, 676, 842, 360, 374, 688, 353, 549, 661, 648, 584, 624, 348, 530, 250, 1135, 667, 1298, 1033, 623, 1102, 715, 594, 888, 871, 833, 321, 634, 491, 766, 505, 297, 1024, 388, 460, 707, 735, 1023, 444, 1098, 629, 505, 807, 581, 543, 687, 598, 337, 434, 806, 1111, 761, 521, 826, 547, 257, 434, 412, 688, 577, 363, 839, 1187, 1306, 648, 808, 504, 760, 429, 309, 916, 503, 777, 403, 1076, 512, 1127, 592, 351, 692, 711, 474, 587, 558, 487, 498, 326, 164, 902, 456, 471, 836, 748, 469, 480, 537, 553, 507, 347, 490, 498, 420, 1010, 598, 1022, 283, 362, 958, 553, 1156, 712, 1108, 718, 753, 1067, 681, 398, 483, 903, 956, 698, 612, 578, 489, 1294, 990, 920, 592, 1113, 862, 464, 1435, 835, 788, 280, 957, 795, 743, 1108, 425, 1026, 879, 488, 701, 931, 610, 741, 1061, 282, 830, 413, 983, 1159, 1067, 1071, 437, 843, 506, 610, 890, 1133, 1034, 954, 452, 925, 785, 836, 620, 597, 722, 258, 858, 342, 455, 927, 706, 299, 1104, 660, 811, 333, 1173, 878, 858, 1336, 816, 457, 948, 563, 1054, 678, 764, 733, 565, 555, 873, 1150, 485, 1303, 496, 796, 1218, 823, 634, 624, 878, 686, 684, 879, 1100, 454, 154, 1002, 357, 822, 676, 740, 578, 350, 1124, 834, 876, 500, 486, 426, 663, 529, 947, 656, 621, 823, 361, 615, 421, 585, 417, 538, 707, 656, 861, 1236, 831, 1087, 508, 768, 1269, 292, 786, 478, 1043, 593, 765, 408, 1439, 806, 528, 801, 912, 882, 1348, 1050, 1077, 528, 349, 996, 799, 976, 1265, 1100, 674, 470, 617, 540, 847, 862, 457, 757, 841, 973, 921, 969, 539, 646, 699, 959, 654, 670, 787, 872, 559, 744, 1276, 666, 273, 569, 833, 191, 775, 896, 576, 935, 1231, 1046, 923, 804, 949, 1201, 572, 303, 1162, 827, 1346, 897, 612, 937, 599, 675, 992, 930, 644, 1151, 301, 1103, 1086, 482, 831, 1130, 472, 753, 1007, 852, 1054, 635, 705, 955, 823, 425, 596, 962, 908, 445, 880, 867, 478, 509, 653, 775, 591, 510, 1055, 798, 1021, 740, 294, 427, 679, 973, 484, 686, 369, 836, 410, 802, 1245, 883, 649, 431, 1102, 1267, 1262, 557, 1092, 837, 164, 881, 726, 1120, 273, 697, 1097, 609, 708, 663, 838, 985, 552, 968, 1042, 1044, 483, 520, 691, 736, 756, 521, 895, 779, 914, 266, 1356, 548, 742, 964, 888, 481, 877, 685, 791, 437, 696, 991, 825, 643, 708, 969, 683, 1080, 1001, 1012, 617, 1030, 734, 792, 1069, 504, 394, 864, 595, 676, 782, 695, 837, 1154, 819, 1104, 437, 413, 383, 913, 627, 624, 987, 1394, 449, 839, 825, 1054, 1180, 378, 1211, 1090, 1114, 804, 897, 558, 1032, 746, 246, 1051, 870, 958, 725, 536, 702, 1035, 971, 356, 1195, 1061, 827, 1090, 526, 1092, 1250, 1025, 231, 947, 659, 272, 1284, 802, 826, 902, 1040, 870, 345, 658, 822, 715, 1012, 872, 575, 945, 1232, 805, 720, 580, 1215, 854, 603, 1074, 1056, 991, 528, 1218, 642, 1060, 1010, 1203, 288, 978, 884, 762, 1118, 763, 430, 786, 922, 928, 886, 529, 706, 403, 1104, 693, 868, 815, 670, 366, 546, 378, 1151, 901, 1522, 1107, 671, 1333, 745, 724, 1230, 1073, 911, 429, 646, 611, 889, 746, 403, 1032, 616, 637, 1382, 767, 1083, 451, 1212, 803, 1318, 849, 662, 955, 712, 971, 571, 496, 977, 1145, 1160, 931, 830, 580, 359, 805, 668, 770, 771, 390, 882, 1329, 1572, 851, 829, 535, 944, 535, 373, 930, 669, 828, 565, 1219, 620, 1308, 793, 361, 938, 859, 482, 946, 1186, 742, 591, 846, 221, 906, 641, 631, 1068, 780, 536, 517, 844, 652, 721, 552, 523, 627, 525, 1186, 944, 1039, 794, 498, 1076, 654, 1167, 856, 1264, 890, 768, 1225, 691, 729, 543, 936, 1016, 1210, 656, 604, 608, 1324, 1035, 1095, 639, 1311, 1281, 877, 1519, 923, 974, 431, 1057, 903, 809, 1137, 569, 1243, 1118, 880, 720, 1102, 1168, 821, 1193, 432, 999, 555, 1013, 1375, 1200, 1080, 495, 982, 519, 630, 1066, 1164, 1091, 1006, 1039, 943, 1195, 1103, 665, 894, 908, 329, 1081, 951, 641, 1060, 793, 719, 1232, 713, 847, 395, 1213, 1038, 1041, 1587, 984, 752, 1125, 929, 1095, 988, 940, 845, 603, 623, 875, 1158, 772, 1503, 506, 816, 1500, 1007, 638, 633, 936, 703, 704, 1173, 1171, 724, 175, 1051, 604, 1174, 682, 819, 854, 384, 1196, 1249, 1029, 509, 504, 537, 722, 571, 1121, 739, 838, 1027, 363, 743, 570, 818, 546, 721, 736, 842, 905, 1372, 932, 1178, 863, 840, 1334, 299, 855, 499, 1293, 1202, 1061, 689, 1516, 866, 614, 862, 955, 981, 1511, 1153, 1256, 768, 501, 1044, 1282, 985, 1455, 1235, 711, 1001, 627, 641, 889, 914, 644, 877, 913, 1149, 1138, 1188, 557, 871, 787, 1015, 727, 731, 868, 892, 560, 778, 1331, 1025, 318, 619, 864, 203, 911, 1052, 705, 1079, 1461, 1090, 994, 1023, 1050, 1535, 625, 999, 1344, 933, 1498, 1045, 939, 1249, 650, 910, 1294, 951, 649, 1163, 418, 1133, 1089, 493, 1116, 1309, 561, 857, 1073, 1112, 1223, 909, 807, 989, 1053, 997, 813, 976, 1074, 527, 1070, 966, 775, 511, 1004, 800, 717, 933, 1120, 900, 1389, 922, 684, 440, 704, 1106, 668, 767, 757, 847, 936, 835, 1293, 893, 895, 647, 1269, 1480, 1304, 782, 1166, 952, 566, 1124, 846, 1203, 354, 893, 1200, 952, 792, 667, 1164, 1003, 718, 1002, 1139, 1163, 1096, 685, 769, 1003, 977, 532, 1128, 905, 926, 443, 1405, 576, 835, 1116, 1145, 562, 1063, 737, 883, 639, 790, 1021, 967, 772, 995, 1165, 754, 1422, 1583, 1075, 997, 1082, 748, 827, 1197, 516, 465, 1451, 645, 879, 809, 739, 855, 1155, 948, 1117, 460, 465, 791, 1098, 693, 673, 1087, 1400, 532, 910, 829, 1171, 1214, 400, 1221, 1603, 1323, 834, 965, 787, 1045, 918, 589, 1074, 1171, 1116, 744, 905, 931, 1176, 1005, 589, 1238, 1107, 972, 1115, 600, 1181, 1609, 1105, 521, 1158, 1049, 306, 1389, 804, 963, 971, 1199, 917, 716, 668, 973, 998, 1174, 903, 590, 1130, 1472, 841, 811, 597, 1399, 956, 719, 1301, 1083, 1044, 622, 1446, 1097, 1206, 1119, 1345, 604, 1324, 920, 1129, 1340, 798, 444, 980, 997, 1232, 1087, 884, 1093, 422, 1135, 909, 1026, 1055, 824, 462, 678, 945, 1234, 1149, 1542, 1177, 675, 1421, 779, 1013, 1486, 1388, 1191, 514, 1219, 760, 974, 773, 477, 1190, 784, 674, 1428, 778, 1257, 477, 1252, 901, 1352, 1037, 1224, 970, 813, 1009, 1162, 519, 1088, 1157, 1409, 1182, 1089, 755, 438, 1076, 725, 869, 900, 436, 1148, 1421, 1588, 956, 978, 749, 950, 932, 516, 1046, 814, 865, 588, 1303, 713, 1614, 1024, 421, 959, 897, 518, 987, 1275, 765, 887, 893, 333, 925, 732, 635, 1169, 910, 1434, 575, 959, 653, 850, 728, 583, 1093, 542, 1316, 1031, 1059, 1122, 642, 1121, 891, 1209, 925, 1299, 896, 932, 1288, 934, 984, 580, 1113, 1413, 1224, 964, 643, 773, 1337, 1663, 1341, 657, 1357, 1473, 1292, 1551, 970, 1209, 792, 1339, 1141, 1140, 1320, 616, 1383, 1126, 980, 1014, 1146, 1245, 859, 1298, 513, 1182, 662, 1014, 1562, 1297, 1151, 502, 1139, 874, 1259, 1645, 1169, 1242, 1072, 1412, 1115, 1275, 1466, 1239, 1038, 1184, 458, 1094, 1440, 810, 1352, 1339, 830, 1354, 801, 848, 671, 1300, 1147, 1047, 1625, 1117, 1046, 1327, 1047, 1237, 1101, 1018, 1016, 745, 1066, 1132, 1221, 841, 1512, 522, 853, 1535, 1248, 975, 694, 1143, 824, 1009, 1185, 1288, 908, 200, 1308, 904, 1665, 687, 843, 943, 1199, 1198, 1379, 1168, 571, 789, 630, 846, 602, 1342, 1350, 995, 1114, 408, 1043, 1304, 945, 751, 793, 741, 1072, 1006, 1401, 1331, 1296, 1152, 856, 1337, 321, 881, 937, 1318, 1535, 1560, 806, 1696, 924, 625, 994, 1058, 996, 1649, 1183, 1442, 1118, 901, 1094, 1408, 1016, 1653, 1259, 800, 1317, 677, 815, 894, 1017, 1278, 957, 1109, 1284, 1321, 1220, 947, 1383, 860, 1220, 783, 873, 979, 1025, 1228, 1007, 1417, 1231, 735, 783, 872, 492, 1028, 1244, 852, 1144, 1645, 1172, 1088, 1110, 1204, 1622, 738, 1146, 1513, 1106, 1564, 1079, 1021, 1436, 776, 917, 1467, 1051, 814, 1217, 812, 1174, 1271, 863, 1187, 1461, 644, 1308, 1154, 1263, 1225, 1121, 867, 1110, 1157, 1139, 989, 1033, 1270, 1163, 1170, 1037, 880, 803, 1098, 807, 968, 1446, 1235, 1064, 1547, 979, 842, 500, 838, 1398, 939, 916, 953, 920, 946, 851, 1428, 1210, 960, 762, 1456, 1519, 1384, 898, 1361, 995, 1100, 1508, 856, 1284, 553, 1330, 1249, 1258, 1020, 764, 1165, 1179, 1047, 1056, 1285, 1266, 1286, 853, 1397, 1515, 987, 547, 1296, 1215, 965, 489, 1444, 800, 849, 1300, 1242, 662, 1085, 818, 918, 748, 954, 1024, 1022, 954, 1109, 1218, 821, 1431, 1587, 1315, 1081, 1140, 754, 943, 1371, 1003, 840, 1475, 722, 1081, 1033, 1216, 1254, 1175, 1122, 1203, 728, 488, 1189, 1377, 1136, 907, 1267, 1416, 751, 1169, 1101, 1289, 1241, 597, 1322, 1625, 1332, 961, 985, 915, 1128, 1069, 764, 1175, 1177, 1156, 889, 1075, 1088, 1251, 1031, 738, 1523, 1229, 994, 1489, 637, 1185, 1651, 1112, 680, 1608, 1197, 513, 1538, 978, 1040, 1000, 1432, 1030, 887, 833, 1057, 1094, 1565, 1190, 696, 1178, 1556, 1045, 1307, 1294, 1436, 1096, 747, 1485, 1128, 1430, 664, 1653, 1180, 1597, 1167, 1452, 776, 1341, 1305, 1142, 1418, 849, 562, 1247, 998, 1391, 1161, 941, 1387, 912, 1149, 1078, 1029, 1141, 1197, 582, 701, 961, 1423, 1195, 1674, 1205, 964, 1633, 929, 1127, 1571, 1581, 1291, 681, 1272, 781, 981, 783, 765, 1295, 974, 1015, 1516, 873, 1324, 482, 1262, 1371, 1648, 1101, 1240, 1115, 837, 1048, 1301, 763, 1260, 1229, 1426, 1316, 1208, 963, 1083, 1125, 992, 882, 1034, 467, 1176, 1429, 1610, 1452, 1376, 753, 1184, 1239, 777, 1291, 1264, 1223, 659, 1378, 797, 1632, 1071, 575, 1099, 926, 801, 1042, 1322, 1111, 1234, 1112, 979, 962, 993, 713, 1271, 1008, 1533, 653, 999, 746, 876, 751, 1123, 1319, 693, 1354, 1209, 1207, 1159, 1250, 1192, 1385, 1350, 952, 1543, 1020, 1067, 1632, 1119, 1635, 1165, 1161, 1483, 1347, 983, 669, 796, 1412, 1684, 1374, 886, 1468, 1479, 1594, 1781, 1113, 1274, 969, 1343, 1403, 1261, 1440, 681, 1424, 1216, 1207, 1210, 1172, 1325, 935, 1414, 1123, 1287, 1158, 1032, 1589, 1554, 1326, 562, 1313, 949, 1296, 1760, 1260, 1552, 1129, 1422, 1258, 1542, 1525, 1253, 1089, 1255, 1131, 1220, 1652, 869, 1410, 1351, 1266, 1518, 868, 884, 1302, 1486, 1362, 1185, 1652, 1172, 1205, 1388, 1479, 1270, 1224, 1297, 1138, 817, 1170, 1214, 1240, 1153, 1551, 817, 915, 1553, 1319, 1496, 717, 1194, 850, 1091, 1256, 1541, 1039, 561, 1358, 938, 1707, 1557, 1368, 1160, 1342, 1404, 1515, 1435, 727, 790, 1396, 854, 891, 1783, 1365, 1271, 1183, 1400, 1205, 1367, 1068, 794, 1006, 803, 1485, 1164, 1422, 1502, 1334, 1359, 1215, 1698, 1042, 1204, 1028, 1458, 1550, 1600, 1111, 1700, 1132, 992, 1134, 1430, 1049, 1731, 1323, 1555, 1228, 1456, 1099, 1545, 1091, 1685, 1445, 857, 1612, 735, 1126, 946, 1168, 1399, 1222, 1192, 1373, 1575, 1317, 1073, 1506, 1143, 1440, 1438, 1263, 1105, 1327, 1256, 1126, 1619, 1265, 924, 961, 1023, 866, 1070, 1437, 1132, 1487, 1675, 1333, 1423, 1182, 1295, 1683, 939, 1154, 1617, 1212, 1665, 1414, 1107, 1534, 1282, 1402, 1485, 1096, 1059, 1495, 981, 1235, 1381, 1017, 1240, 1534, 875, 1561, 1279, 1354, 1353, 1396, 1243, 1547, 1356, 1166, 1181, 1343, 1285, 1247, 1255, 1357, 975, 919, 1318, 988, 1477, 1521, 1358, 1206, 1549, 1146, 1117, 1305, 1019, 1406, 982, 942, 1014, 1075, 1004, 860, 1512, 1241, 1053, 858, 1620, 1527, 1415, 1251, 1497, 1108, 1166, 1667, 967, 1434, 665, 1335, 1313, 1406, 1283, 902, 1362, 1358, 1501, 1222, 1427, 1280, 1309, 984, 1647, 1573, 1449, 618, 1328, 1310, 1120, 844, 1739, 1424, 1246, 1474, 1561, 699, 1277, 826, 1386, 1257, 1227, 1056, 1189, 975, 1125, 1329, 917, 1464, 1784, 1405, 1152, 1153, 935, 1092, 1464, 1040, 907, 1592, 1428, 1136, 1063, 1420, 1390, 1251, 1217, 1268, 1143, 708, 1603, 1407, 1160, 1207, 1340, 1488, 998, 1315, 1344, 1300, 1365, 1134, 1401, 1629, 1366, 1008, 1013, 1211, 1179, 1188, 825, 1262, 1393, 1469, 1173, 1077, 1248, 1417, 1095, 907, 1654, 1320, 1065, 1598, 799, 1601, 1656, 1190, 714, 1754, 1595, 651, 1647, 1063, 1397, 1157, 1481, 1237, 1060, 1482, 1287, 1192, 1618, 1394, 1259, 1558, 1635, 1162, 1377, 1803, 1492, 1476, 774, 1626, 1420, 1504, 689, 1687, 1372, 1616, 1199, 1471, 934, 1342, 1351, 1261, 1442, 923, 723, 1361, 1084, 1450, 1233, 1011, 1389, 1338, 1186, 1340, 1110, 1327, 1225, 690, 1483, 1064, 1443, 1258, 1697, 1213, 966, 1687, 1161, 1314, 1605, 1877, 1477, 747, 1280, 1028, 1138, 820, 782, 1560, 1038, 1592, 1517, 894, 1586, 568, 1276, 1379, 1753, 1230, 1749, 1122, 1458, 1080, 1526, 1411, 1309, 1332, 1430, 1381, 1255, 1648, 1248, 1267, 1459, 914, 1085, 1184, 1180, 1459, 1629, 1463, 1378, 845, 1343, 1415, 1037, 1292, 1336, 1431, 734, 1426, 1193, 1688, 1279, 940, 1313, 1036, 1155, 1099, 1406, 1490, 1326, 1556, 1069, 1005, 1142, 1010, 1273, 1312, 1546, 761, 1624, 1065, 921, 1055, 1134, 1518, 839, 1435, 1234, 1244, 1238, 1297, 1254, 1494, 1484, 1145, 1604, 1404, 1289, 1645, 1131, 1658, 1198, 1392, 1557, 1667, 1082, 972, 918, 1432, 1701, 1637, 1312, 1579, 1680, 1864, 1825, 1194, 1457, 1370, 1411, 1479, 1398, 1510, 1049, 1447, 1576, 1252, 1290, 1360, 1679, 1070, 1506, 1699, 1359, 1204, 1222, 1818, 1596, 1363, 834, 1383, 1513, 1499, 1766, 1646, 1629, 1328, 1423, 1460, 1640, 1923, 1302, 1216, 1364, 1369, 1233, 1739, 1031, 1624, 1505, 1434, 1630, 1451, 1196, 1548, 1527, 1454, 1520, 1707, 1407, 1467, 1561, 1604, 1319, 1543, 1456, 1374, 881, 1453, 1323, 1735, 1246, 1660, 1381, 1188, 1709, 1391, 1532, 771, 1264, 851, 1219, 1322, 1639, 1144, 960, 1615, 1136, 1732, 1690, 1371, 1433, 1377, 1459, 1571, 1447, 1058, 1245, 1451, 1053, 949, 1894, 1531, 1305, 1253, 1493, 1303, 1380, 1581, 1330, 1082, 1036, 1541, 1520, 1437, 1585, 1359, 1425, 1410, 1857, 1465, 1239, 1208, 1585, 1642, 1807, 1743, 1710, 1167, 1135, 1465, 1513, 1175, 1759, 1524, 1655, 1348, 1471, 1150, 1581, 1917, 1694, 1545, 911, 1622, 852, 1348, 1191, 1261, 1410, 1491, 1237, 1401, 1822, 1325, 1457, 1668, 1236, 1449, 1698, 1270, 1392, 1418, 1486, 1133, 1797, 1503, 1041, 1198, 1392, 1041, 1632, 1621, 1311, 1638, 1832, 1364, 1452, 1499, 1472, 1913, 1295, 1208, 1766, 1369, 1780, 1541, 1462, 1545, 1336, 1569, 1693, 1385, 1276, 1547, 1266, 1338, 1505, 1029, 1493, 1670, 958, 1572, 1607, 1446, 1634, 1530, 1414, 1704, 1552, 1441, 1653, 1480, 1310, 1712, 1347, 1403, 1408, 951, 1360, 1213, 1562, 1710, 1419, 1528, 1589, 1443, 1345, 1636, 1071, 1637, 1026, 1644, 1030, 1638, 1221, 1119, 1570, 1712, 1253, 989, 1742, 1790, 1537, 1619, 1508, 1150, 1326, 1926, 1470, 1702, 940, 1733, 1362, 1429, 1299, 938, 1606, 1453, 1568, 1335, 1738, 1564, 1312, 1275, 1718, 1575, 1528, 937, 1491, 1415, 1179, 900, 1843, 1471, 1345, 1536, 1573, 930, 1301, 1020, 1482, 1412, 1274, 1105, 1347, 1344, 1764, 1729, 1062, 1563, 1843, 1532, 1228, 1302, 1273, 1397, 1591, 1391, 1052, 1662, 1470, 1181, 1425, 1427, 1578, 1263, 1395, 1292, 1317, 899, 1808, 1539, 1650, 1231, 1376, 1515, 1001, 1330, 1603, 1331, 1419, 1369, 1444, 1709, 1374, 1068, 1019, 1306, 1298, 1293, 1011, 1831, 1502, 1590, 1238, 1148, 1269, 1555, 1114, 1036, 1740, 1325, 1405, 1670, 1062, 1773, 1688, 1335, 1476, 1827, 1723, 820, 1748, 1072, 1536, 1398, 1732, 1587, 1400, 1529, 1355, 1304, 1651, 1722, 1268, 1673, 1800, 1178, 1503, 1847, 1656, 1497, 1595, 1689, 1576, 1740, 963, 1822, 1393, 1743, 1246, 1499, 1106, 1356, 1387, 1367, 1745, 1009, 780, 1458, 1206, 1673, 1250, 1662, 1611, 1555, 1193, 1353, 1597, 1559, 1445, 1187, 1677, 1155, 1464, 1497, 1713, 1357, 1450, 1696, 1257, 1339, 1685, 1894, 1615, 1733, 1315, 1364, 1363, 1418, 1123, 1738, 1445, 1620, 1660, 1156, 1599, 926, 1507, 1640, 1763, 1289, 1791, 1648, 1601, 1321, 1544, 1577, 1683, 1376, 1543, 1540, 1361, 1666, 1273, 1433, 1504, 993, 1265, 1288, 1454, 1482, 1736, 1481, 1439, 1286, 1467, 1461, 1474, 1510, 1489, 1681, 934, 1643, 1606, 1791, 1491, 1341, 1429, 1127, 1227, 1299, 1600, 1904, 1395, 1588, 1084, 1057, 1183, 1252, 1283, 1478, 1611, 1320, 1851, 1355, 1223, 1147, 1403, 1576, 1035, 1460, 1260, 1641, 1538, 1368, 1475, 1511, 1672, 1329, 1764, 1426, 1353, 1691, 1214, 1915, 1247, 1538, 1658, 1716, 1689, 1000, 986, 1884, 1975, 1730, 1899, 1623, 1834, 1981, 1952, 1473, 1490, 1529, 1557, 1748, 1544, 1617, 1720, 1690, 1667, 1630, 1641, 1678, 1750, 1367, 1525, 1786, 1447, 1395, 1390, 1826, 1598, 1427, 861, 1582, 1658, 1878, 1768, 1651, 1699, 1532, 1498, 1529, 1765, 1939, 1384, 1723, 1872, 1758, 1438, 1742, 1093, 1657, 1759, 1650, 1634, 1519, 1290, 1569, 1573, 1591, 1643, 1928, 1411, 1786, 1582, 1661, 1521, 1657, 1609, 1633, 972, 1468, 1644, 1776, 1388, 1692, 1409, 1278, 1812, 1631, 1873, 1310, 1272, 1109, 1333, 1522, 1722, 1612, 1048, 1741, 1674, 1755, 1711, 1568, 1437, 1484, 1567, 1746, 1583, 1148, 1307, 1570, 1314, 950, 1906, 1654, 1379, 1494, 1518, 1455, 1393, 1703, 1390, 1606, 1226, 1669, 1580, 1692, 1719, 1366, 1438, 1433, 1982, 1514, 1676, 1609, 1742, 1690, 1819, 1763, 1730, 1321, 1566, 2031, 1680, 1741, 1839, 1762, 1925, 1536, 1524, 1283, 1723, 1924, 1706, 1558, 1375, 1758, 1417, 1691, 1350, 1727, 1475, 1537, 1457, 1506, 1917, 1386, 1695, 1753, 1355, 1756, 1775, 1613, 1563, 1425, 1488, 1176, 1827, 1556, 1131, 1349, 1448, 1281, 1749, 1664, 1572, 1744, 1860, 1813, 1762, 1642, 1689, 1928, 1570, 1878, 1890, 1739, 1809, 1799, 1663, 1591, 1495, 1695, 1762, 1580, 1306, 1879, 1462, 1413, 1637, 1078, 1567, 1785, 1078, 1659, 1801, 1530, 1769, 1579, 1549, 1747, 1682, 1796, 1668, 1727, 1822, 1836, 1378, 1551, 1501, 1810, 1478, 1278, 1574, 1764, 1533, 1627, 1714, 1489, 1480, 1726, 1584, 1643, 1387, 1655, 1058, 1720, 1370, 1595, 1795, 1832, 1843, 1212, 1871, 1840, 1886, 1831, 1720, 1272, 1765, 1956, 1496, 1855, 1144, 1830, 1404, 1593, 1507, 967, 1768, 1671, 1842, 1469, 1829, 1593, 1621, 1516, 1763, 1612, 1982, 1124, 1613, 1715, 1375, 1311, 1844, 1509, 1448, 1542, 1660, 1005, 1490, 1408, 1620, 1707, 1277, 1568, 1373, 1887, 1827, 1778, 1510, 1782, 1886, 1537, 1424, 1402, 1282, 1496, 1681, 1649, 1286, 1858, 1566, 1622, 1972, 1562, 1868, 1316, 1754, 1725, 1559, 1086, 1873, 1594, 1792, 1351, 1579, 1889, 1043, 1380, 1789, 1588, 1481, 1487, 1650, 1717, 1602, 1413, 1226, 1370, 1368, 1346, 1493, 1902, 1554, 1713, 1564, 1244, 1432, 1597, 1328, 1285, 1828, 1484, 1466, 1719, 1550, 1909, 1854, 1582, 1596, 1903, 1751, 1530, 1905, 1227, 1771, 1605, 1807, 1777, 1738, 1592, 1460, 1507, 1708, 1745, 1385, 1686, 1869, 1277, 1517, 1867, 1776, 1846, 1809, 1803, 1674, 1748, 1191, 1837, 1420, 1754, 1274, 1644, 1201, 1366, 1450, 1402, 1757, 1140, 1500, 1465, 1509, 1793, 1352, 1804, 1702, 1560, 1431, 1549, 1679, 1769, 1615, 1229, 1740, 1775, 1534, 1498, 1757, 1416, 1567, 1711, 1360, 1472, 1705, 1923, 1782, 1746, 1767, 1575, 1531, 1628, 1772, 1868, 1771, 1628, 1719, 1287, 1623, 1900, 1709, 1703, 1840, 1382, 1841, 1808, 1860, 1788, 1652, 1687, 1810, 1488, 1661, 1867, 1476, 1785, 1646, 1468, 1611, 1159, 1492, 1291, 1463, 1716, 1778, 1669, 1448, 1539, 1633, 1511, 1523, 1672, 1821, 1718, 1349, 1875, 1659, 1835, 1558, 1520, 1670, 1639, 1540, 1885, 1779, 1972, 1531, 1874, 1627, 1202, 1639, 1553, 1540, 1539, 1646, 1439, 1856, 1444, 1279, 1241, 1952, 1701, 1280, 1616, 1332, 1692, 1664, 1373, 1781, 1733, 1995, 1571, 1777, 1593, 1578, 1869, 1233, 1916, 1504, 1849, 1704, 1729, 1896, 1953, 1449, 1899, 2007, 1744, 2003, 1875, 1935, 2016, 1993, 1527, 1788, 1734, 1726, 1823, 1636, 1619, 1734, 1755, 1829, 1773, 1799, 1700, 1947, 1938, 1647, 1789, 1550, 1396, 1590, 1964, 1951, 1634, 1066, 1856, 1717, 1988, 1791, 1664, 1977, 1544, 1715, 1563, 1801, 1988, 1725, 1815, 1921, 1897, 1442, 1831, 1217, 1752, 1866, 1861, 1659, 1706, 1724, 1678, 1714, 1724, 1958, 2036, 1487, 1978, 1657, 1997, 1800, 1895, 1708, 1811, 1678, 1705, 1962, 1927, 1699, 1694, 1625, 1501, 1844, 1686, 1958, 1614, 1307, 1129, 1407, 1683, 1835, 1800, 1152, 1793, 1879, 1820, 1747, 1598, 1922, 1553, 1768, 1811, 1838, 1290, 1953, 1781, 1610, 1626, 1936, 1751, 1665, 1584, 1823, 1816, 1758, 1932, 1454, 1793, 1436, 1817, 1675, 1697, 1927, 1655, 1546, 1677, 2003, 1666, 1735, 1811, 1808, 1813, 1834, 1850, 1821, 1565, 1975, 2045, 1816, 1809, 1951, 1862, 2048, 1911, 1686, 1441, 1878, 1976, 1865, 1906, 1608, 1871, 1469, 1803, 1932, 1798, 1862, 1881, 1577, 1802, 1979, 1455, 1977, 1820, 1495, 1816, 1907, 1784, 1774, 1789, 1743, 1533, 1830, 1684, 1201, 1548, 1566, 1334, 1776, 1724, 1752, 1880, 1908, 1863, 1898, 1925, 1693, 2033, 1799, 1910, 1893, 1928, 1833, 1841, 1706, 1801, 1599, 1737, 1934, 1688, 2035, 1885, 1796, 1807, 1881, 1419, 1901, 1948, 1137, 1685, 1848, 1624, 1829, 1868, 1630, 1819, 1772, 1946, 1787, 1805, 1941, 1854, 1554, 1722, 1729, 1877, 1863, 1736, 1626, 1918, 1631, 1628, 1986, 1616, 1679, 1820, 1869, 1756, 1662, 1876, 1380, 1815, 1914, 1680, 1956, 1870, 1947, 1421, 1886, 1936, 1911, 1918, 1728, 1346, 1769, 2021, 1601, 1912, 1548, 1835, 1502, 1605, 1927, 1372, 1865, 1673, 1891, 1494, 1882, 1779, 1814, 1940, 1806, 1759, 2011, 1441, 1623, 1846, 1514, 1663, 2033, 1552, 1819, 1574, 1850, 1671, 1702, 1757, 1756, 1836, 1384, 1980, 1640, 2038, 2006, 1794, 1805, 1785, 1955, 1580, 1930, 1583, 1526, 1523, 1833, 1725, 1462, 1883, 1682, 1794, 1995, 1892, 1874, 1349, 1818, 1730, 1604, 1170, 1890, 1777, 1806, 1701, 1589, 1911, 1254, 1526, 1942, 1825, 1514, 1966, 1780, 1864, 1671, 1817, 1677, 1443, 1855, 1569, 1922, 1934, 1712, 1931, 1765, 1888, 1463, 1627, 1505, 1492, 1870, 1590, 1565, 1922, 1698, 1956, 1985, 2006, 1635, 1931, 1899, 1600, 1973, 1268, 1823, 1710, 1867, 1916, 1804, 1642, 1466, 1767, 1832, 1996, 1672, 1824, 1921, 1924, 1838, 1904, 1908, 1861, 1960, 1998, 1728, 1760, 1394, 1993, 1546, 1974, 1525, 1847, 1202, 1613, 1453, 1602, 1826, 1875, 1594, 1596, 1753, 1970, 1478, 2055, 1853, 1713, 1474, 1797, 1682, 1943, 1745, 1830, 1814, 1897, 1621, 1817, 1802, 1617, 1649, 1978, 1500, 1483, 1804, 2040, 1983, 1775, 1893, 1636, 1896, 1774, 1784, 1903, 1782, 1783, 1852, 1894, 1770, 1924, 2020, 1926, 1929, 1714, 2009, 1989, 1865, 1898, 1737, 1945, 1847, 1696, 1767, 1907, 1715, 1849, 1967, 1694, 1747, 1337, 1608, 1363, 1676, 1734, 1859, 1755, 1470, 1584, 1957, 1919, 1528, 1788, 1900, 1741, 1508, 1971, 1749, 1937, 1970, 1941, 1794, 1693, 1721, 1991, 1915, 1997, 1824, 1942, 1996, 1236, 1669, 1887, 1654, 1982, 1898, 1761, 1883, 1700, 1521, 1681, 2011, 1751, 1281, 1684, 1607, 1845, 1860, 1524, 1844, 1901, 1999, 1760, 1940, 1705, 1736, 1987, 1721, 2033, 2024, 1990, 2047, 1965, 2018, 2044, 1473, 1920, 2030, 1968, 2045, 2025, 1995, 2054, 2017, 1559, 1876, 1891, 1871, 2013, 1949, 1821, 1892, 1834, 1946, 1778, 1880, 1864, 2042, 2016, 2026, 1945, 2031, 1574, 1853, 1980, 2034, 2056, 2012, 1912, 1812, 2031, 1836, 1992, 2058, 1941, 1814, 2007, 2051, 2048, 2044, 1880, 1926, 2047, 1761, 1839, 1365, 1772, 1986, 1985, 1905, 2060, 1909, 1857, 1944, 1826, 2000, 2050, 2023, 2020, 1931, 2023, 2043, 2005, 1967, 1872, 1907, 1944, 1981, 1965, 1999, 1711, 1916, 1517, 1958, 1954, 2023, 1961, 2064, 1798, 1577, 1930, 1896, 1859, 1382, 1987, 2039, 2037, 1787, 1666, 1984, 1602, 1933, 2008, 2057, 1338, 1976, 2038, 1971, 1950, 1954, 1991, 1828, 1695, 1845, 1873, 1889, 2037, 1641, 1961, 1731, 1884, 1881, 1914, 1978, 1783, 1925, 1882, 2010, 2062, 1846, 1921, 2029, 2046, 1910, 2026, 1953, 1607, 2063, 2059, 2000, 1884, 2008, 2014, 2052, 2015, 1848, 1716, 2003, 2036, 2006, 1932, 1973, 1976, 1522, 2028, 2059, 1917, 1947, 2027, 1954, 1964, 2059, 2035, 1999, 1910, 1893, 1877, 1933, 1934, 2019, 1858, 1990, 2037, 1876, 1903, 1792, 1966, 2025, 1509, 1853, 1908, 1837, 2044, 1914, 1938, 1913, 2004, 1824, 2047, 1856, 1938, 2032, 2022, 1870, 1912, 1779, 2039, 2049, 1761, 1983, 1950, 2054, 2002, 1959, 1848, 1919, 1790, 1993, 1967, 1900, 1718, 1897, 2019, 2051, 2053, 1838, 1930, 1918, 2015, 2036, 1904, 1962, 1890, 1852, 1845, 2009, 2050, 2004, 2032, 1883, 2057, 2028, 2040, 2056, 1851, 1737, 1939, 1872, 1939, 1975, 1988, 1676, 1919, 1994, 2019, 1984, 1885, 2005, 1812, 2008, 2040, 1957, 2028, 1842, 2032, 2039, 2062, 1828, 1992, 1746, 1841, 1980, 1940, 1994, 1416, 1937, 1866, 1996, 1866, 1929, 2013, 1815, 2064, 1959, 2012, 2022, 1735, 1727, 1950, 1981, 1991, 2043, 1929, 1920, 1578, 1859, 1960, 1949, 1852, 1955, 1966, 2018, 2063, 1656, 2055, 2041, 1969, 2046, 1905, 2017, 1726, 1943, 1717, 2009, 1802, 2062, 1750, 1675, 1990, 1963, 1795, 2061, 1998, 2042, 1770, 2049, 1862, 1668, 2056, 2000, 1987, 2002, 1797, 1882, 1963, 1512, 1708, 1949, 1901, 1935, 1997, 1971, 2017, 2054, 1920, 1691, 1585, 2001, 2005, 1963, 2015, 1933, 2026, 1909, 1913, 1704, 1798, 1962, 1610, 2024, 1969, 1810, 1994, 1703, 2055, 2021, 2030, 2024, 1986, 1906, 1825, 2002, 1770, 1855, 1837, 2014, 2010, 1849, 1697, 1661, 1863, 1935, 2052, 1957, 2058, 1937, 2061, 2035, 2045, 1984, 1888, 1965, 2058, 1854, 2007, 1842, 2060, 1888, 1989, 1599, 2014, 1638, 2027, 1731, 2012, 1891, 1936, 1614, 1618, 1806, 2030, 1586, 2057, 1968, 1974, 1477, 1959, 1840, 1973, 1970, 1955, 1951, 1998, 1985, 1892, 1818, 1874, 1961, 2046, 1989, 1960, 2041, 2049, 2001, 1948, 2048, 1983, 1944, 1790, 2042, 2051, 1992, 1923, 2041, 1952, 1972, 1945, 2029, 1948, 1974, 1943, 2038, 2050, 1942, 1968, 1805, 1977, 2004, 1752, 1787, 1915, 1732, 2063, 2021, 1766, 1946, 1618, 1858, 2025, 1857, 1773, 1895, 1833, 1887, 1744, 1979, 2010, 1850, 2061, 2016, 1780, 1586, 2027, 1969, 2034, 1979, 2018, 1813, 1839, 1902, 2013, 2011, 2052, 1851, 2029, 2064, 1386, 1750, 1902, 1771, 2034, 2001, 1795, 2053, 1792, 1631, 1964, 2053, 1796, 1409, 1774, 1721, 1889, 1879, 1728, 2020, 2043, 2060, 1895, 2022, 1861, 1786 +}; + +uint16_t H_cols[] = { +208, 242, 84, 114, 314, 135, 349, 90, 64, 57, 26, 52, 16, 142, 120, 244, 167, 164, 133, 179, 22, 180, 413, 161, 224, 121, 57, 22, 394, 17, 9, 54, 84, 20, 98, 311, 322, 308, 86, 91, 77, 41, 110, 192, 18, 11, 210, 133, 248, 276, 389, 100, 37, 4, 239, 15, 32, 15, 7, 10, 109, 82, 19, 50, 137, 278, 43, 181, 89, 206, 113, 285, 10, 95, 12, 180, 23, 93, 100, 124, 200, 130, 81, 149, 6, 251, 181, 227, 156, 215, 194, 284, 206, 177, 171, 174, 40, 136, 187, 89, 98, 156, 44, 30, 48, 78, 349, 126, 56, 3, 212, 43, 111, 183, 63, 54, 35, 63, 333, 158, 96, 100, 270, 38, 97, 4, 139, 163, 67, 251, 139, 42, 214, 117, 26, 98, 132, 105, 13, 61, 330, 223, 183, 95, 295, 95, 55, 29, 65, 35, 75, 130, 8, 98, 344, 46, 239, 155, 131, 75, 246, 3, 44, 260, 199, 21, 99, 118, 76, 8, 87, 271, 257, 171, 98, 44, 255, 17, 276, 91, 50, 21, 90, 262, 118, 208, 214, 35, 140, 159, 58, 277, 158, 180, 53, 93, 58, 264, 40, 98, 4, 284, 183, 24, 7, 123, 133, 57, 223, 124, 156, 202, 34, 324, 67, 452, 63, 123, 303, 303, 169, 40, 32, 24, 32, 5, 220, 218, 103, 222, 113, 111, 100, 30, 146, 266, 4, 195, 14, 55, 145, 37, 40, 18, 184, 188, 267, 38, 116, 35, 60, 53, 133, 58, 9, 296, 63, 57, 30, 17, 86, 157, 105, 29, 73, 285, 122, 9, 31, 199, 347, 73, 55, 135, 86, 2, 42, 67, 119, 21, 351, 35, 213, 173, 61, 176, 194, 109, 72, 77, 273, 133, 244, 90, 313, 220, 27, 192, 63, 299, 208, 202, 3, 66, 14, 19, 127, 68, 348, 246, 26, 87, 75, 20, 215, 93, 212, 180, 149, 114, 133, 48, 235, 17, 247, 257, 42, 149, 57, 363, 75, 334, 67, 97, 29, 109, 241, 59, 332, 15, 228, 6, 186, 81, 271, 31, 103, 122, 150, 105, 110, 92, 277, 213, 358, 37, 100, 129, 46, 367, 118, 26, 115, 211, 3, 77, 217, 23, 24, 145, 70, 48, 68, 179, 112, 30, 110, 177, 14, 97, 68, 66, 103, 105, 83, 231, 29, 383, 45, 64, 42, 32, 201, 269, 67, 9, 149, 3, 34, 86, 373, 51, 409, 130, 39, 80, 177, 118, 34, 248, 175, 50, 37, 76, 14, 7, 122, 49, 262, 27, 79, 102, 295, 113, 26, 111, 135, 10, 356, 97, 21, 2, 129, 451, 140, 60, 42, 191, 33, 152, 25, 279, 99, 22, 124, 168, 305, 34, 104, 224, 154, 50, 71, 97, 60, 209, 73, 57, 10, 322, 159, 375, 104, 17, 273, 374, 81, 121, 160, 157, 411, 88, 236, 166, 88, 53, 164, 135, 36, 375, 291, 211, 4, 233, 84, 94, 47, 29, 10, 306, 54, 183, 16, 128, 42, 86, 96, 488, 31, 109, 150, 42, 332, 110, 315, 44, 321, 82, 109, 235, 80, 212, 35, 128, 80, 215, 7, 115, 44, 102, 281, 86, 27, 79, 280, 33, 227, 142, 113, 104, 102, 281, 161, 238, 197, 106, 111, 72, 163, 76, 41, 58, 4, 46, 45, 122, 281, 219, 52, 53, 45, 66, 264, 69, 37, 16, 138, 221, 176, 176, 98, 42, 75, 92, 80, 158, 163, 71, 26, 49, 109, 108, 70, 85, 378, 186, 178, 9, 12, 4, 74, 25, 65, 207, 8, 339, 5, 45, 205, 163, 234, 14, 56, 77, 62, 185, 55, 89, 19, 228, 117, 113, 80, 9, 8, 38, 74, 10, 112, 32, 205, 8, 242, 142, 119, 26, 158, 28, 148, 54, 69, 28, 81, 91, 142, 78, 158, 49, 66, 45, 179, 249, 91, 90, 219, 153, 339, 90, 14, 56, 60, 392, 9, 162, 274, 102, 79, 89, 206, 114, 365, 2, 232, 172, 36, 8, 14, 317, 173, 65, 2, 37, 112, 273, 38, 179, 107, 244, 9, 173, 67, 141, 265, 156, 96, 102, 158, 77, 96, 331, 2, 102, 302, 94, 23, 93, 92, 408, 95, 229, 2, 25, 326, 62, 82, 166, 185, 7, 170, 15, 30, 216, 93, 94, 186, 24, 124, 268, 36, 108, 156, 448, 65, 134, 356, 79, 91, 165, 63, 30, 123, 56, 164, 97, 348, 262, 72, 294, 3, 33, 36, 143, 79, 31, 158, 124, 46, 131, 115, 103, 33, 280, 22, 69, 80, 343, 386, 295, 107, 39, 122, 18, 215, 78, 166, 136, 163, 222, 5, 405, 196, 253, 401, 78, 138, 184, 190, 131, 5, 141, 91, 84, 10, 210, 184, 171, 39, 20, 283, 92, 337, 257, 172, 160, 28, 134, 170, 18, 110, 108, 85, 21, 62, 122, 23, 10, 128, 161, 152, 156, 65, 249, 124, 191, 282, 139, 220, 238, 24, 60, 66, 41, 196, 185, 68, 72, 51, 121, 12, 218, 13, 101, 89, 93, 298, 293, 197, 201, 332, 36, 128, 160, 182, 42, 19, 53, 259, 116, 331, 131, 84, 125, 43, 285, 79, 112, 66, 66, 288, 93, 93, 158, 87, 104, 134, 131, 156, 58, 33, 6, 42, 16, 130, 182, 354, 141, 12, 65, 60, 1, 169, 175, 82, 44, 82, 108, 17, 69, 28, 29, 80, 145, 25, 66, 88, 14, 64, 290, 160, 46, 113, 1, 251, 55, 61, 185, 199, 153, 13, 237, 150, 269, 5, 100, 126, 243, 312, 56, 219, 203, 156, 144, 164, 161, 87, 236, 203, 10, 216, 13, 166, 239, 19, 141, 51, 284, 61, 11, 75, 205, 31, 128, 49, 2, 33, 5, 135, 100, 194, 78, 154, 245, 51, 321, 121, 160, 114, 74, 44, 113, 59, 259, 6, 49, 144, 6, 22, 214, 171, 98, 181, 225, 368, 8, 274, 154, 262, 234, 21, 19, 352, 9, 165, 20, 90, 85, 255, 367, 174, 29, 145, 43, 1, 3, 153, 10, 280, 77, 221, 12, 11, 142, 370, 143, 116, 145, 223, 330, 36, 9, 157, 99, 271, 88, 291, 49, 89, 47, 94, 394, 344, 305, 38, 30, 39, 6, 129, 1, 242, 268, 200, 298, 182, 297, 175, 27, 117, 135, 108, 246, 60, 38, 225, 48, 12, 124, 229, 55, 50, 311, 70, 133, 119, 151, 199, 73, 70, 98, 26, 76, 99, 154, 112, 76, 236, 273, 22, 109, 206, 61, 34, 146, 292, 132, 254, 42, 1, 121, 310, 33, 41, 49, 168, 226, 247, 459, 47, 211, 187, 41, 58, 8, 388, 359, 129, 83, 129, 190, 55, 189, 48, 258, 60, 58, 13, 205, 263, 232, 151, 96, 77, 31, 53, 64, 174, 197, 200, 25, 93, 191, 139, 217, 5, 117, 51, 212, 72, 28, 2, 236, 114, 320, 35, 106, 74, 28, 425, 282, 49, 132, 2, 82, 47, 143, 142, 100, 25, 79, 43, 24, 23, 399, 92, 97, 290, 31, 69, 109, 165, 83, 41, 98, 84, 195, 319, 347, 222, 37, 39, 104, 5, 196, 207, 47, 4, 223, 141, 32, 47, 81, 96, 31, 68, 101, 145, 177, 85, 129, 271, 334, 224, 36, 117, 56, 70, 410, 212, 87, 298, 361, 160, 164, 34, 19, 52, 66, 310, 4, 105, 40, 180, 137, 263, 37, 73, 237, 29, 135, 20, 7, 336, 197, 68, 2, 131, 28, 60, 88, 94, 58, 83, 38, 218, 7, 1, 71, 296, 149, 355, 146, 179, 64, 2, 418, 155, 127, 76, 348, 54, 83, 251, 48, 27, 185, 32, 84, 4, 89, 107, 360, 257, 29, 54, 318, 56, 95, 295, 51, 45, 47, 24, 256, 173, 92, 154, 63, 255, 321, 132, 76, 116, 92, 308, 20, 52, 178, 292, 87, 216, 275, 16, 152, 151, 165, 226, 276, 36, 1, 333, 30, 428, 17, 136, 11, 192, 45, 40, 34, 268, 68, 292, 54, 85, 120, 116, 206, 92, 99, 213, 91, 15, 14, 43, 112, 305, 319, 157, 136, 76, 25, 141, 95, 82, 11, 32, 41, 74, 49, 301, 122, 128, 338, 94, 129, 265, 71, 11, 109, 22, 328, 13, 105, 22, 196, 240, 198, 7, 146, 181, 115, 62, 61, 218, 64, 170, 222, 15, 99, 36, 31, 258, 69, 41, 56, 60, 129, 33, 103, 57, 21, 103, 127, 165, 13, 39, 328, 105, 228, 107, 120, 86, 98, 27, 54, 205, 167, 244, 74, 238, 38, 89, 5, 120, 329, 37, 37, 278, 24, 140, 118, 127, 203, 23, 106, 286, 243, 72, 152, 86, 61, 22, 11, 6, 34, 256, 269, 158, 175, 211, 317, 253, 50, 50, 27, 130, 454, 41, 250, 267, 144, 303, 11, 104, 63, 18, 124, 104, 58, 140, 25, 151, 58, 239, 286, 155, 217, 27, 182, 10, 398, 65, 190, 81, 69, 119, 78, 20, 136, 106, 51, 188, 200, 350, 303, 133, 53, 73, 15, 158, 262, 150, 192, 10, 289, 162, 362, 234, 232, 16, 225, 334, 294, 6, 105, 125, 68, 72, 176, 239, 20, 163, 353, 118, 117, 170, 90, 258, 50, 45, 88, 87, 128, 85, 4, 62, 34, 268, 258, 183, 25, 146, 85, 44, 133, 107, 140, 87, 64, 18, 70, 76, 95, 309, 147, 34, 308, 19, 237, 21, 217, 115, 49, 177, 201, 88, 149, 163, 5, 325, 455, 96, 52, 77, 24, 152, 130, 207, 67, 220, 36, 18, 48, 88, 40, 148, 179, 6, 155, 19, 138, 74, 39, 51, 198, 141, 142, 106, 103, 67, 111, 107, 186, 68, 37, 166, 28, 94, 289, 15, 126, 121, 43, 108, 117, 128, 406, 71, 333, 39, 38, 69, 313, 267, 17, 249, 40, 351, 40, 202, 138, 262, 105, 324, 75, 267, 123, 141, 156, 78, 112, 408, 97, 173, 91, 99, 239, 25, 376, 25, 254, 185, 157, 15, 61, 71, 113, 237, 237, 48, 29, 89, 1, 79, 41, 3, 24, 13, 187, 96, 52, 30, 137, 70, 82, 1, 47, 34, 444, 146, 63, 47, 59, 154, 115, 129, 298, 61, 3, 64, 85, 75, 244, 12, 47, 101, 103, 7, 169, 125, 213, 271, 378, 271, 100, 126, 134, 131, 31, 32, 16, 310, 222, 95, 12, 154, 89, 391, 205, 8, 27, 1, 85, 192, 85, 117, 140, 127, 132, 35, 31, 12, 263, 121, 6, 81, 65, 71, 78, 88, 140, 85, 227, 347, 68, 50, 7, 44, 215, 128, 26, 2, 96, 55, 66, 54, 22, 161, 258, 7, 13, 124, 101, 265, 21, 83, 233, 203, 274, 59, 354, 99, 59, 139, 13, 377, 107, 102, 23, 184, 32, 115, 61, 169, 320, 27, 171, 293, 57, 62, 46, 58, 147, 139, 235, 52, 46, 375, 46, 218, 319, 368, 61, 29, 174, 172, 83, 325, 29, 200, 198, 18, 303, 114, 173, 213, 35, 102, 20, 35, 211, 46, 180, 99, 301, 250, 208, 178, 93, 30, 76, 52, 165, 159, 372, 225, 278, 138, 136, 145, 231, 79, 44, 137, 50, 55, 119, 125, 39, 138, 101, 25, 166, 23, 192, 18, 39, 178, 116, 28, 178, 59, 188, 198, 16, 96, 46, 186, 108, 59, 255, 199, 258, 252, 88, 118, 134, 383, 150, 5, 139, 239, 228, 38, 227, 263, 43, 67, 175, 97, 188, 63, 147, 189, 17, 154, 62, 370, 219, 1, 198, 22, 56, 90, 318, 15, 20, 171, 45, 100, 30, 126, 131, 234, 11, 207, 254, 299, 349, 120, 196, 21, 26, 170, 114, 77, 8, 57, 190, 11, 214, 212, 345, 179, 225, 64, 114, 80, 185, 66, 138, 149, 43, 190, 127, 3, 3, 153, 222, 210, 11, 56, 104, 53, 153, 130, 56, 83, 71, 274, 95, 74, 121, 106, 173, 16, 114, 270, 33, 53, 267, 49, 332, 306, 68, 35, 28, 32, 213, 24, 113, 40, 18, 9, 89, 294, 250, 256, 70, 208, 291, 91, 82, 314, 39, 7, 181, 78, 13, 301, 405, 112, 316, 156, 393, 12, 110, 48, 73, 166, 39, 17, 132, 204, 104, 63, 62, 1, 45, 393, 5, 115, 47, 18, 248, 16, 272, 75, 317, 84, 70, 342, 207, 14, 191, 77, 154, 12, 107, 230, 132, 280, 42, 23, 147, 149, 17, 18, 8, 174, 73, 261, 197, 72, 4, 15, 34, 163, 159, 136, 12, 36, 196, 3, 40, 167, 71, 101, 111, 100, 237, 300, 32, 76, 9, 14, 137, 6, 53, 202, 71, 52, 148, 219, 17, 299, 41, 108, 48, 143, 65, 316, 133, 142, 92, 296, 323, 150, 211, 361, 261, 422, 167, 212, 195, 50, 317, 406, 372, 360, 314, 399, 203, 136, 211, 56, 195, 436, 229, 489, 295, 101, 109, 487, 184, 87, 279, 233, 399, 176, 470, 433, 364, 197, 115, 194, 314, 423, 246, 98, 401, 291, 268, 272, 357, 458, 298, 327, 21, 298, 299, 225, 220, 272, 51, 177, 93, 84, 403, 150, 336, 275, 236, 476, 243, 261, 373, 330, 248, 310, 365, 155, 240, 144, 276, 229, 292, 99, 175, 101, 317, 365, 297, 404, 260, 333, 417, 462, 434, 474, 444, 119, 309, 261, 260, 344, 435, 80, 123, 257, 183, 358, 197, 78, 16, 264, 260, 459, 195, 390, 147, 217, 467, 353, 165, 120, 151, 335, 83, 106, 28, 326, 252, 70, 298, 182, 153, 300, 260, 122, 111, 143, 302, 135, 235, 362, 236, 232, 287, 371, 309, 248, 248, 176, 215, 169, 183, 155, 140, 446, 91, 277, 263, 234, 126, 376, 335, 162, 490, 398, 182, 105, 378, 469, 159, 119, 457, 292, 249, 108, 59, 451, 20, 362, 228, 57, 306, 459, 301, 208, 329, 357, 82, 396, 279, 137, 396, 272, 202, 396, 282, 120, 308, 389, 287, 43, 311, 371, 59, 326, 125, 223, 190, 285, 134, 348, 219, 74, 343, 72, 455, 367, 179, 368, 395, 267, 227, 59, 225, 65, 21, 300, 310, 266, 259, 362, 168, 104, 69, 344, 417, 47, 335, 103, 126, 394, 41, 122, 166, 313, 265, 438, 118, 265, 204, 316, 439, 142, 90, 180, 440, 281, 392, 312, 210, 137, 189, 240, 247, 240, 320, 251, 157, 324, 208, 415, 245, 180, 262, 94, 141, 191, 110, 165, 165, 361, 61, 488, 378, 138, 178, 229, 396, 157, 168, 397, 266, 289, 240, 347, 299, 84, 451, 133, 391, 469, 324, 137, 116, 60, 365, 207, 200, 472, 450, 428, 330, 139, 159, 223, 217, 330, 245, 234, 238, 418, 391, 367, 308, 291, 304, 67, 244, 288, 382, 130, 461, 335, 118, 187, 334, 324, 441, 462, 112, 445, 59, 214, 230, 372, 44, 106, 167, 181, 211, 193, 148, 409, 264, 364, 353, 174, 263, 283, 406, 312, 349, 118, 455, 181, 259, 323, 175, 33, 152, 299, 141, 320, 314, 131, 62, 235, 335, 231, 340, 244, 425, 169, 311, 497, 241, 37, 436, 117, 184, 294, 157, 350, 301, 94, 162, 273, 13, 182, 101, 486, 341, 434, 322, 74, 144, 284, 139, 111, 403, 214, 52, 323, 327, 172, 227, 230, 208, 277, 221, 120, 409, 339, 123, 223, 252, 209, 237, 429, 295, 253, 35, 162, 454, 243, 199, 295, 385, 360, 241, 170, 390, 175, 402, 198, 288, 397, 275, 330, 267, 161, 341, 283, 193, 62, 258, 162, 254, 259, 374, 408, 415, 268, 54, 312, 424, 302, 342, 376, 172, 453, 214, 281, 379, 447, 170, 434, 230, 121, 423, 305, 441, 276, 244, 121, 110, 461, 323, 151, 309, 431, 202, 200, 329, 210, 352, 164, 503, 113, 126, 231, 152, 454, 311, 433, 86, 449, 130, 231, 262, 189, 290, 288, 429, 143, 311, 70, 226, 451, 277, 362, 134, 51, 81, 343, 171, 466, 149, 194, 310, 119, 315, 186, 300, 469, 349, 427, 123, 168, 117, 174, 144, 224, 116, 173, 198, 457, 287, 147, 65, 258, 272, 499, 315, 81, 186, 168, 341, 316, 190, 178, 291, 232, 280, 174, 260, 242, 226, 181, 120, 113, 138, 294, 106, 481, 287, 377, 104, 125, 383, 234, 369, 289, 348, 52, 389, 239, 219, 344, 378, 338, 418, 137, 363, 116, 207, 335, 449, 202, 358, 216, 134, 319, 100, 11, 265, 233, 172, 267, 45, 256, 23, 318, 221, 169, 245, 306, 281, 181, 289, 116, 173, 346, 327, 194, 205, 326, 345, 201, 111, 448, 366, 399, 293, 222, 170, 358, 442, 19, 187, 159, 456, 299, 206, 290, 169, 253, 412, 252, 202, 377, 331, 497, 203, 313, 115, 255, 373, 364, 237, 245, 291, 269, 342, 54, 218, 269, 373, 170, 256, 270, 213, 305, 288, 203, 315, 238, 87, 192, 334, 26, 127, 352, 240, 277, 114, 102, 432, 139, 332, 278, 128, 411, 91, 317, 296, 265, 343, 291, 217, 124, 350, 220, 242, 220, 62, 233, 300, 190, 393, 445, 513, 478, 346, 375, 131, 99, 272, 160, 355, 279, 112, 305, 107, 403, 336, 109, 322, 143, 371, 147, 204, 192, 308, 180, 279, 127, 194, 145, 239, 124, 288, 24, 177, 191, 433, 429, 308, 270, 136, 330, 73, 469, 302, 274, 221, 246, 393, 328, 431, 454, 391, 426, 269, 434, 329, 245, 149, 151, 338, 328, 299, 433, 374, 230, 202, 472, 177, 360, 402, 387, 316, 181, 418, 52, 198, 174, 20, 197, 110, 294, 268, 123, 151, 43, 87, 250, 237, 247, 233, 143, 367, 231, 339, 381, 141, 233, 355, 204, 225, 382, 208, 224, 206, 159, 87, 80, 275, 103, 365, 33, 374, 117, 145, 332, 368, 309, 297, 421, 63, 212, 213, 373, 107, 249, 247, 318, 242, 464, 312, 164, 240, 103, 328, 345, 262, 160, 209, 401, 325, 249, 186, 201, 112, 250, 262, 215, 70, 473, 170, 126, 143, 211, 313, 370, 183, 220, 174, 388, 346, 351, 182, 173, 48, 214, 370, 163, 92, 95, 228, 134, 461, 251, 398, 205, 282, 372, 363, 348, 83, 321, 175, 265, 160, 252, 479, 340, 257, 64, 285, 419, 369, 23, 196, 283, 286, 327, 97, 411, 331, 184, 297, 325, 284, 341, 245, 302, 294, 231, 247, 319, 404, 190, 180, 491, 441, 147, 303, 148, 291, 350, 471, 197, 396, 187, 92, 201, 269, 200, 264, 250, 338, 104, 470, 379, 248, 168, 271, 113, 146, 205, 267, 71, 296, 221, 385, 153, 347, 482, 252, 339, 453, 390, 289, 284, 229, 269, 263, 167, 27, 369, 80, 243, 432, 230, 153, 280, 397, 239, 380, 208, 244, 8, 72, 271, 354, 328, 233, 224, 297, 297, 204, 461, 190, 259, 151, 306, 375, 195, 189, 304, 155, 279, 232, 352, 123, 177, 339, 401, 493, 384, 376, 340, 38, 171, 79, 161, 78, 340, 293, 238, 465, 191, 435, 179, 244, 387, 184, 211, 307, 352, 342, 316, 196, 351, 353, 445, 69, 97, 368, 180, 274, 136, 275, 342, 189, 75, 395, 145, 147, 205, 185, 222, 218, 413, 297, 374, 144, 453, 372, 138, 302, 316, 237, 356, 46, 40, 339, 343, 184, 242, 125, 216, 345, 305, 477, 148, 214, 199, 303, 306, 123, 440, 404, 292, 210, 328, 350, 210, 337, 94, 309, 408, 151, 76, 276, 266, 325, 482, 155, 332, 254, 209, 321, 297, 243, 355, 259, 164, 221, 453, 361, 15, 338, 357, 289, 240, 149, 249, 263, 219, 447, 434, 261, 300, 159, 479, 342, 93, 213, 57, 141, 177, 335, 410, 315, 188, 166, 223, 307, 354, 492, 170, 187, 453, 195, 127, 349, 410, 151, 207, 130, 147, 216, 417, 439, 369, 83, 461, 326, 406, 381, 227, 126, 270, 258, 394, 108, 331, 228, 333, 72, 95, 209, 319, 351, 346, 379, 284, 392, 315, 191, 147, 463, 95, 486, 415, 167, 324, 377, 390, 375, 410, 92, 354, 106, 364, 106, 370, 132, 193, 396, 321, 134, 119, 393, 327, 195, 506, 30, 341, 253, 233, 82, 283, 55, 207, 301, 430, 167, 248, 163, 475, 77, 218, 124, 367, 176, 415, 426, 188, 380, 58, 488, 209, 170, 164, 354, 134, 212, 334, 255, 220, 349, 110, 288, 227, 350, 201, 406, 319, 442, 117, 330, 228, 148, 424, 267, 155, 452, 161, 345, 217, 474, 179, 208, 328, 367, 254, 173, 210, 259, 458, 296, 277, 206, 296, 162, 480, 430, 183, 202, 268, 263, 274, 312, 374, 96, 445, 66, 463, 321, 250, 204, 194, 129, 78, 342, 485, 289, 387, 67, 119, 256, 241, 341, 110, 215, 276, 226, 186, 276, 266, 198, 331, 455, 167, 232, 89, 355, 166, 336, 147, 397, 167, 260, 175, 282, 465, 265, 178, 453, 189, 132, 273, 202, 132, 209, 62, 400, 397, 114, 225, 299, 288, 259, 228, 149, 319, 160, 327, 406, 411, 217, 374, 286, 229, 236, 129, 232, 403, 266, 432, 189, 115, 338, 120, 342, 197, 248, 310, 269, 298, 79, 156, 453, 325, 468, 116, 246, 210, 438, 43, 256, 378, 294, 398, 84, 366, 122, 311, 174, 346, 377, 320, 111, 309, 243, 162, 329, 165, 307, 229, 266, 305, 267, 94, 230, 454, 131, 72, 50, 209, 199, 283, 329, 178, 400, 236, 388, 423, 127, 190, 287, 175, 477, 274, 314, 465, 389, 410, 350, 131, 263, 108, 201, 127, 130, 468, 59, 223, 148, 341, 336, 414, 235, 36, 288, 171, 405, 111, 395, 271, 122, 154, 150, 164, 403, 460, 374, 213, 208, 464, 310, 143, 356, 204, 81, 273, 314, 287, 380, 16, 410, 313, 385, 410, 406, 23, 240, 370, 373, 416, 355, 204, 176, 187, 329, 357, 292, 282, 384, 212, 273, 202, 262, 385, 198, 191, 402, 230, 266, 179, 389, 210, 165, 375, 261, 287, 302, 471, 250, 144, 284, 279, 277, 382, 118, 65, 126, 235, 158, 354, 150, 53, 331, 68, 280, 51, 219, 432, 90, 236, 213, 137, 289, 256, 366, 469, 484, 125, 289, 454, 49, 155, 392, 221, 181, 238, 137, 85, 222, 105, 228, 351, 380, 22, 379, 322, 409, 215, 234, 174, 275, 356, 182, 212, 272, 203, 194, 426, 215, 279, 234, 279, 388, 164, 318, 219, 205, 152, 74, 304, 242, 136, 440, 304, 466, 238, 347, 201, 373, 275, 325, 364, 362, 393, 103, 394, 365, 359, 338, 332, 322, 369, 270, 216, 363, 135, 353, 460, 157, 282, 402, 414, 393, 196, 403, 178, 294, 276, 193, 282, 217, 86, 234, 351, 433, 337, 64, 236, 184, 423, 64, 362, 241, 210, 247, 483, 298, 122, 191, 243, 245, 46, 458, 278, 447, 311, 326, 360, 71, 224, 354, 148, 360, 74, 6, 215, 290, 374, 313, 200, 185, 116, 133, 28, 224, 467, 357, 291, 473, 379, 388, 188, 246, 340, 67, 240, 144, 475, 314, 193, 179, 215, 150, 423, 360, 192, 102, 159, 127, 204, 154, 168, 423, 373, 172, 48, 140, 327, 292, 358, 221, 426, 154, 101, 331, 337, 235, 102, 251, 409, 238, 283, 151, 307, 278, 357, 247, 484, 229, 152, 69, 311, 241, 225, 388, 230, 140, 146, 370, 429, 26, 134, 466, 240, 372, 197, 389, 145, 136, 176, 187, 400, 264, 221, 366, 446, 311, 364, 186, 404, 363, 101, 243, 400, 120, 146, 389, 203, 190, 278, 300, 260, 196, 430, 106, 260, 367, 436, 222, 359, 433, 417, 184, 371, 301, 275, 336, 111, 428, 129, 304, 303, 73, 224, 449, 175, 255, 446, 326, 123, 315, 315, 223, 327, 161, 194, 97, 201, 309, 383, 407, 302, 326, 209, 324, 198, 356, 107, 88, 189, 276, 247, 144, 339, 320, 221, 169, 140, 226, 118, 379, 333, 69, 300, 262, 218, 265, 257, 251, 310, 27, 265, 227, 369, 220, 146, 412, 265, 272, 286, 286, 229, 283, 395, 209, 372, 290, 488, 293, 184, 360, 342, 194, 132, 313, 290, 448, 385, 162, 232, 31, 270, 271, 383, 318, 242, 251, 157, 79, 119, 421, 401, 178, 231, 152, 207, 55, 163, 274, 313, 125, 251, 256, 468, 385, 329, 227, 272, 317, 196, 427, 466, 96, 216, 449, 14, 441, 333, 484, 363, 383, 303, 155, 172, 188, 348, 169, 256, 199, 193, 188, 455, 86, 161, 235, 247, 288, 135, 344, 427, 381, 148, 261, 128, 193, 287, 221, 347, 155, 172, 204, 334, 255, 380, 189, 241, 277, 226, 448, 413, 81, 441, 223, 162, 429, 292, 205, 146, 439, 110, 114, 304, 261, 378, 88, 278, 386, 123, 226, 329, 165, 83, 295, 213, 408, 355, 414, 336, 440, 366, 409, 142, 153, 168, 128, 470, 266, 82, 280, 428, 250, 360, 238, 99, 53, 424, 176, 285, 263, 212, 268, 316, 377, 335, 387, 168, 144, 428, 326, 132, 232, 252, 300, 51, 146, 308, 371, 486, 279, 275, 370, 223, 33, 304, 296, 217, 442, 360, 280, 75, 354, 182, 139, 397, 236, 442, 361, 45, 233, 193, 479, 206, 153, 121, 299, 201, 255, 426, 318, 286, 54, 143, 302, 57, 148, 320, 231, 218, 377, 498, 206, 359, 238, 235, 379, 160, 391, 381, 261, 297, 277, 368, 362, 437, 409, 372, 270, 481, 300, 407, 253, 55, 488, 487, 470, 429, 431, 402, 259, 404, 257, 101, 243, 463, 487, 514, 496, 150, 358, 504, 234, 490, 511, 240, 415, 412, 484, 490, 416, 252, 472, 489, 478, 493, 381, 139, 480, 511, 362, 293, 466, 503, 359, 342, 142, 326, 369, 304, 320, 364, 486, 261, 105, 316, 471, 476, 430, 460, 379, 484, 253, 446, 400, 447, 373, 472, 490, 272, 401, 158, 471, 328, 417, 312, 344, 331, 429, 383, 341, 501, 361, 410, 480, 477, 492, 508, 482, 332, 336, 429, 310, 369, 460, 291, 346, 365, 392, 402, 452, 120, 430, 301, 419, 462, 406, 410, 342, 493, 500, 390, 498, 378, 230, 403, 188, 443, 258, 505, 499, 148, 508, 485, 241, 382, 289, 264, 182, 455, 481, 264, 451, 489, 483, 485, 365, 376, 447, 301, 382, 278, 237, 409, 285, 168, 292, 463, 290, 482, 339, 323, 376, 386, 495, 286, 502, 450, 322, 115, 390, 483, 370, 426, 461, 441, 406, 162, 73, 506, 256, 511, 507, 107, 498, 491, 323, 274, 478, 516, 337, 450, 304, 183, 502, 285, 249, 420, 427, 349, 386, 508, 353, 413, 500, 375, 304, 485, 410, 484, 306, 353, 431, 377, 239, 156, 438, 402, 499, 503, 200, 458, 419, 490, 230, 203, 397, 73, 436, 398, 326, 293, 363, 416, 497, 458, 250, 443, 460, 60, 476, 227, 392, 494, 352, 422, 383, 468, 344, 443, 199, 425, 417, 496, 452, 472, 396, 246, 449, 458, 395, 398, 283, 253, 391, 307, 268, 337, 501, 269, 499, 409, 408, 434, 365, 264, 407, 267, 150, 253, 254, 269, 185, 434, 306, 508, 510, 287, 347, 318, 439, 235, 307, 503, 281, 303, 468, 366, 415, 434, 480, 368, 497, 500, 504, 195, 188, 125, 502, 496, 475, 492, 481, 501, 407, 309, 302, 372, 442, 357, 464, 436, 249, 429, 493, 412, 340, 385, 489, 172, 353, 322, 477, 439, 509, 490, 311, 478, 364, 450, 448, 479, 372, 463, 495, 312, 269, 425, 341, 501, 415, 193, 225, 481, 437, 433, 281, 509, 428, 278, 509, 458, 506, 481, 509, 463, 504, 209, 415, 510, 347, 246, 388, 307, 237, 472, 407, 318, 228, 441, 417, 467, 469, 457, 515, 324, 402, 510, 254, 112, 470, 345, 463, 302, 378, 416, 312, 241, 381, 327, 94, 207, 335, 498, 343, 476, 427, 444, 351, 414, 186, 178, 457, 459, 460, 333, 471, 334, 389, 398, 327, 315, 504, 481, 437, 386, 431, 488, 442, 241, 356, 471, 402, 424, 433, 287, 459, 298, 463, 322, 458, 386, 464, 232, 492, 285, 441, 227, 292, 405, 377, 336, 466, 441, 513, 350, 276, 142, 492, 176, 404, 286, 437, 483, 474, 446, 291, 323, 474, 463, 414, 496, 231, 493, 491, 464, 484, 448, 191, 441, 258, 296, 497, 381, 484, 419, 318, 125, 222, 487, 516, 285, 502, 449, 294, 211, 384, 358, 451, 414, 509, 135, 241, 444, 392, 474, 469, 444, 203, 500, 282, 350, 286, 231, 478, 365, 465, 467, 472, 497, 484, 513, 513, 455, 242, 502, 385, 504, 358, 479, 390, 407, 416, 266, 330, 206, 412, 471, 496, 498, 380, 325, 159, 219, 504, 447, 340, 383, 416, 475, 373, 410, 486, 368, 501, 511, 413, 91, 278, 257, 486, 369, 506, 214, 402, 430, 348, 476, 333, 331, 441, 204, 187, 450, 194, 382, 224, 497, 411, 462, 252, 275, 457, 446, 415, 502, 413, 121, 515, 485, 476, 353, 381, 488, 480, 385, 425, 314, 224, 383, 506, 280, 515, 388, 422, 386, 396, 408, 329, 340, 371, 359, 138, 431, 200, 361, 393, 189, 436, 411, 319, 316, 478, 293, 390, 422, 414, 445, 232, 503, 397, 443, 296, 493, 374, 432, 430, 493, 206, 437, 477, 295, 352, 492, 509, 375, 214, 314, 430, 283, 467, 491, 350, 421, 499, 499, 511, 367, 125, 379, 482, 476, 505, 411, 446, 507, 390, 264, 290, 419, 460, 474, 414, 422, 317, 327, 437, 422, 404, 320, 416, 242, 362, 429, 366, 399, 438, 293, 245, 448, 461, 390, 415, 356, 482, 504, 284, 428, 378, 268, 400, 308, 468, 416, 393, 394, 405, 355, 408, 438, 323, 424, 401, 483, 516, 493, 362, 424, 372, 234, 515, 386, 382, 500, 314, 402, 425, 460, 456, 172, 501, 247, 495, 173, 492, 226, 476, 439, 346, 293, 353, 317, 435, 152, 487, 119, 348, 424, 499, 494, 495, 469, 251, 501, 401, 516, 308, 457, 280, 454, 440, 432, 470, 497, 399, 451, 344, 487, 432, 439, 516, 278, 461, 462, 313, 475, 386, 233, 396, 475, 439, 424, 495, 431, 434, 433, 436, 456, 403, 341, 423, 359, 296, 324, 309, 480, 508, 435, 144, 478, 401, 358, 287, 484, 512, 443, 367, 459, 452, 445, 468, 316, 271, 514, 388, 448, 474, 413, 307, 86, 293, 320, 433, 302, 394, 222, 414, 344, 456, 356, 475, 468, 456, 426, 494, 428, 339, 288, 494, 448, 270, 504, 507, 381, 405, 379, 498, 469, 489, 247, 354, 445, 500, 467, 217, 277, 385, 318, 513, 218, 253, 483, 249, 325, 161, 351, 505, 475, 440, 229, 412, 461, 371, 427, 377, 439, 338, 473, 500, 292, 167, 315, 230, 261, 464, 294, 407, 226, 406, 488, 426, 432, 515, 511, 421, 489, 439, 282, 515, 483, 325, 323, 462, 443, 491, 377, 384, 349, 491, 353, 226, 420, 495, 428, 409, 473, 461, 357, 473, 371, 343, 360, 398, 500, 465, 401, 319, 513, 483, 216, 405, 424, 473, 455, 516, 235, 476, 308, 248, 281, 482, 244, 481, 407, 345, 309, 506, 417, 485, 363, 320, 192, 470, 231, 513, 246, 299, 447, 467, 163, 510, 498, 337, 417, 491, 457, 422, 340, 422, 298, 273, 301, 447, 449, 356, 374, 436, 299, 225, 452, 468, 490, 403, 432, 387, 38, 277, 340, 514, 485, 355, 253, 400, 389, 460, 492, 356, 300, 400, 404, 404, 498, 369, 330, 273, 311, 248, 491, 126, 216, 495, 449, 505, 407, 380, 425, 246, 437, 153, 211, 256, 387, 515, 297, 507, 440, 480, 361, 412, 395, 431, 412, 371, 506, 435, 421, 462, 504, 483, 472, 436, 507, 370, 183, 485, 330, 389, 381, 473, 272, 449, 364, 192, 345, 312, 252, 333, 501, 388, 491, 246, 507, 393, 355, 358, 367, 417, 499, 81, 516, 494, 490, 228, 480, 367, 427, 387, 349, 510, 349, 411, 321, 449, 315, 307, 458, 490, 462, 323, 406, 452, 456, 357, 153, 359, 503, 375, 352, 385, 392, 442, 485, 260, 445, 423, 512, 410, 361, 396, 421, 514, 300, 412, 487, 489, 19, 352, 447, 347, 321, 400, 394, 284, 510, 508, 502, 281, 459, 177, 483, 388, 399, 379, 180, 186, 209, 502, 418, 326, 214, 432, 274, 401, 413, 512, 322, 264, 513, 239, 501, 464, 419, 259, 418, 306, 307, 319, 484, 512, 453, 363, 508, 454, 424, 450, 275, 270, 301, 260, 512, 161, 494, 323, 346, 189, 348, 376, 345, 464, 421, 381, 342, 464, 359, 455, 492, 470, 359, 505, 465, 343, 420, 435, 428, 510, 478, 193, 419, 380, 414, 181, 394, 266, 396, 491, 395, 192, 421, 404, 507, 456, 512, 251, 384, 442, 421, 334, 384, 317, 320, 391, 477, 171, 336, 273, 500, 446, 414, 340, 484, 306, 453, 445, 327, 405, 406, 506, 236, 491, 371, 508, 471, 446, 501, 290, 366, 507, 250, 394, 403, 458, 266, 509, 351, 493, 252, 510, 456, 176, 440, 419, 378, 506, 399, 442, 319, 514, 462, 275, 459, 378, 350, 226, 494, 430, 494, 394, 486, 442, 381, 233, 500, 504, 504, 308, 494, 366, 353, 469, 439, 463, 516, 109, 473, 473, 343, 383, 435, 282, 509, 420, 514, 333, 450, 307, 477, 375, 398, 466, 382, 479, 452, 283, 285, 495, 482, 425, 430, 505, 322, 444, 503, 497, 449, 486, 338, 440, 355, 488, 413, 352, 513, 331, 333, 506, 423, 183, 361, 474, 461, 409, 425, 411, 481, 397, 470, 332, 395, 343, 298, 159, 476, 512, 398, 444, 516, 505, 499, 397, 421, 271, 130, 424, 456, 270, 463, 431, 334, 397, 399, 509, 335, 341, 443, 392, 509, 338, 284, 468, 382, 477, 443, 331, 455, 445, 169, 296, 511, 491, 408, 427, 408, 318, 405, 182, 392, 390, 488, 219, 368, 369, 384, 372, 336, 399, 502, 515, 356, 486, 325, 293, 504, 162, 451, 295, 339, 220, 471, 421, 351, 433, 334, 392, 465, 303, 418, 306, 316, 515, 317, 438, 482, 454, 475, 370, 459, 496, 505, 384, 185, 172, 497, 171, 281, 400, 418, 499, 436, 391, 108, 468, 280, 422, 313, 467, 398, 464, 167, 254, 168, 448, 465, 505, 471, 312, 467, 418, 403, 374, 470, 459, 347, 468, 395, 425, 19, 472, 510, 456, 428, 495, 75, 255, 467, 465, 425, 512, 387, 426, 335, 453, 474, 487, 480, 462, 344, 511, 207, 309, 419, 419, 395, 424, 272, 346, 382, 460, 352, 169, 442, 476, 404, 473, 511, 330, 196, 334, 329, 438, 438, 503, 255, 481, 500, 420, 472, 509, 394, 450, 255, 472, 373, 365, 488, 305, 496, 418, 193, 368, 305, 508, 495, 494, 199, 420, 514, 450, 201, 496, 238, 264, 411, 358, 229, 287, 493, 346, 409, 489, 102, 480, 413, 435, 290, 317, 303, 348, 376, 314, 422, 297, 343, 250, 513, 466, 290, 289, 431, 503, 451, 516, 328, 305, 427, 361, 307, 469, 341, 476, 371, 489, 328, 355, 310, 437, 515, 402, 386, 403, 412, 357, 440, 486, 448, 399, 337, 514, 426, 478, 506, 462, 360, 466, 496, 279, 397, 479, 428, 505, 421, 461, 257, 437, 418, 315, 440, 498, 337, 387, 490, 437, 466, 220, 500, 479, 470, 218, 380, 431, 243, 396, 492, 443, 507, 373, 477, 395, 188, 496, 366, 457, 422, 336, 376, 450, 391, 494, 245, 384, 77, 44, 478, 438, 454, 407, 285, 508, 198, 457, 261, 322, 492, 482, 338, 512, 405, 420, 312, 464, 416, 80, 412, 249, 501, 412, 452, 505, 426, 379, 451, 479, 387, 137, 340, 507, 483, 459, 203, 453, 420, 358, 84, 499, 503, 408, 443, 350, 515, 200, 295, 376, 442, 369, 423, 346, 420, 445, 456, 465, 337, 475, 438, 258, 506, 377, 364, 185, 321, 305, 282, 509, 301, 321, 398, 456, 511, 465, 281, 516, 450, 435, 286, 416, 475, 254, 393, 469, 414, 429, 460, 389, 478, 492, 503, 453, 444, 393, 467, 294, 420, 157, 279, 513, 497, 204, 444, 514, 348, 459, 454, 270, 413, 440, 494, 434, 465, 505, 429, 384, 514, 466, 486, 475, 510, 436, 437, 434, 457, 516, 454, 473, 332, 433, 479, 499, 405, 482, 497, 503, 411, 351, 199, 380, 216, 420, 387, 426, 450, 404, 370, 447, 386, 452, 135, 253, 482, 416, 276, 171, 419, 420, 288, 241, 474, 391, 368, 488, 365, 400, 363, 354, 274, 415, 345, 376, 467, 138, 479, 295, 391, 382, 483, 444, 446, 390, 304, 510, 507, 385, 452, 216, 457, 472, 498, 438, 408, 388, 368, 498, 464, 462, 466, 508, 515, 321, 375, 337, 448, 273, 455, 435, 380, 354, 254, 242, 324, 489, 477, 245, 427, 195, 508, 187, 210, 328, 498, 145, 485, 304, 493, 392, 507, 324, 400, 419, 430, 439, 513, 432, 417, 496, 364, 474, 511, 493, 435, 487, 366, 364, 455, 384, 359, 195, 329, 263, 349, 248, 486, 371, 166, 257, 471, 339, 380, 357, 437, 441, 191, 443, 268, 197, 444, 306, 363, 160, 346, 345, 376, 401, 479, 195, 243, 514, 481, 489, 445, 432, 451, 460, 252, 443, 332, 283, 416, 502, 140, 164, 415, 359, 470, 90, 411, 425, 422, 352, 344, 501, 386, 335, 458, 449, 478, 480, 477, 487, 413, 444, 244, 157, 451, 423, 480, 297, 284, 495, 431, 384, 418, 363, 325, 245, 447, 313, 485, 436, 391, 357, 512, 490, 487, 417, 512, 324, 496, 366, 152, 452, 343, 361, 389, 254, 446, 471, 502, 399, 485, 395, 345, 474, 337, 481, 249, 510, 458, 514, 90, 362, 463, 347, 477, 257, 489, 405, 143, 259, 286, 495, 382, 224, 177, 446, 260, 427, 438, 434, 511, 187, 383, 423, 193, 430, 427, 447, 435, 487, 502, 338, 407, 323, 407, 387, 166, 512, 473, 310, 457, 490 +}; + +float input[] = { +-2.8588758611049867, -11.692946618257562, -2.0931111592429659, 11.110696212718175, 6.6118168080332342, 5.5228669775147967, -10.351976177615544, -6.2055936928533972, 15.766842028131405, 10.150684036103069, -8.459063190320423, 3.5621047687812557, -3.4741612771047636, 3.324748317571744, 8.996614205792751, -11.020291727957101, 12.081427681651697, -8.8928631203159583, -3.3519010114052263, 7.7902118547439443, 9.6608001848411806, -7.1066822779231593, -18.837368573809297, 6.7301895647238608, 6.7933629603091008, 5.9697810424393483, 8.344011991064086, 12.19791145343228, 9.4167774696594435, 7.423418316685729, 9.0291842080564226, 12.492983259925982, 7.1203329881309401, 9.8776999539720336, 7.3657220051725565, 5.4066464900536131, -12.553405951140983, -8.4918025628237199, -11.352365915823617, 14.756685666538061, -8.0938336502539876, -2.7071697789206022, -2.4795849849319289, 14.778716053676311, -12.149933491676437, -8.5931326392610909, -5.4147618905983697, 1.7095221079392837, -12.75286957597447, -6.560818125727109, 5.5288804134600262, -16.774264848727494, -10.397477377823613, -14.47470382199227, -12.095199384731899, -0.68504635593676977, 2.6623689185177528, 13.264791388391092, -15.654931986196731, 6.1276196890542334, 4.5068190091793028, -13.394637229913476, -6.9231832293793651, -12.113429033794846, 1.2142140703098925, 8.9363539352870394, -12.687063373304539, -3.3458614784673091, -3.4123481785186587, 17.559631253372945, 13.470764559481434, 5.3912902961422002, 8.0737946505557545, -12.755710856932868, -3.569697890412812, -6.2613535644882905, 0.068556269783912271, 6.2629797657916875, -9.2663011036090968, -4.4829975567184634, -9.6136989537403004, -8.7663852688801143, -13.974856274599134, 11.407302219619563, -10.302223327202944, -8.9771589068473983, -6.1388609170833384, 4.2370800072671333, 1.7760515525196516, -12.120232639630231, -12.958157445638765, 5.2985241644932541, -16.484657731002855, -6.3532421360393387, -9.0395804464700298, -7.2671128749847744, -12.616882711750195, -4.9350723080331012, -6.6905936282318637, 18.568407538602393, 12.530577696234687, -9.7889565176657243, -15.214958325061282, 7.215674131215513, -7.5394667988733808, 9.0137713371297465, 6.2553392643094785, 9.1953246360263154, -11.131787953429392, -5.4020937991353657, -4.0642543197135739, -0.44036236539366824, 8.0650609441874703, 0.85520780385748785, 7.2621337620159085, 0.29865166967486761, -9.2011814546979203, -10.330862011400864, -7.3191138151867943, -9.4852558149271111, 14.762260259194324, -5.0853268103463423, -11.2925794883785, 13.026909781206733, 7.9504343630905412, 10.148928930852414, -8.9032450603232327, 7.0914762951954913, 10.89340681888671, -12.705821222595254, 13.126012326275292, 9.4442919029362749, 5.0277440210736879, 0.21756213342494518, 12.710361373031621, 5.6453651213768019, -13.49634180382726, 6.4754225359227204, 9.6275804629486004, 5.8125840672452975, 9.7028326962213836, 6.1260130958734562, 3.3623596073706641, 10.736024757333299, 4.6569987032041826, -8.5021099021622799, -2.5832378575026125, 17.984880998940056, -13.974611077713172, -7.8550941092339874, -2.6917314432377575, 10.825283872831294, 11.217940706150642, 1.8301222470027103, 6.2062091666111812, -12.440863506480019, -19.955292055354317, -3.6699151522797462, 2.2154324244303956, -3.7363628672311142, -10.271027034445964, -9.2862432349117547, 9.7847963699436011, -5.9471830363214551, 11.139859339322513, -9.2599913694963618, 5.0422863933763367, -7.1141487133220043, 4.2177963601947308, 10.657785123505857, -5.7952000401674324, -6.826355874510365, 8.7268751949597245, -8.5906649209875745, 2.2758857640658201, -6.1665377492933358, -7.3104026599884433, -3.2424605164178031, 16.796591996286164, 15.671215006757382, -7.8445348658392806, 12.2589312976831, -2.5670307012079139, -11.537316744819945, -2.4858301794672331, 5.0542510171190438, -6.6860957990782133, -7.2619018024969462, -6.7329842279273242, -7.3146812058251234, 8.0821157274412183, 2.4005920765968378, 9.3157871935284753, -12.908851857280949, 5.2927115546650425, 9.9926730185778059, 3.9229860372333749, -5.5126846245121035, 12.313688019948762, 7.9681453222519041, 17.181368769149195, -8.962498225939207, -11.548950041024865, 12.014544817430894, 11.485639169870186, 11.939774664713912, -14.36069895314143, -11.812874687185857, 12.249194120883461, 4.8839501930831242, -10.540165871108648, -14.829380396239381, -6.4665012687326051, 4.7430459960995295, -7.1378949876943016, -15.357105375923917, 7.3351294975306445, -9.6095153441695373, 4.381145332149095, -9.2910048695861427, 4.894239034759102, 7.864879034656453, -8.3265429253416077, 10.497214061711553, -0.39338042557070996, -4.4611306847986816, 0.76940119561902198, 2.3535542193708272, 10.459438806533345, 9.4938186880252005, -6.4805717587307994, -13.457392617761585, -10.487085219177404, -9.8506932711478576, 11.274019685851906, -12.3031017274995, 8.3324030035106826, -2.3013116280481358, 8.3664075310158825, -10.402109920341072, -5.2924293563600742, -12.008098192077149, 10.992304106359162, -5.5591947469243506, -12.838234842015352, 8.1682577157065577, -6.4919177172949487, 13.568876091933316, 8.0352162745849594, 8.7834139460450125, -11.335870474093099, -10.790767171281415, -2.8875937626970223, 14.64505222675956, 11.436743007190451, -2.9337339836825955, -12.707240342338084, 16.661129912274529, -19.171798326126961, 12.280144746488103, 6.5975965145696174, -13.019719338217644, -3.4328503704209457, 4.822535491209953, -8.1340577921572415, 11.549182216506546, 9.6431724916100059, 5.5547407614902173, 15.019668995173307, -1.6514898426907461, 16.110709054474917, -10.9397931999944, 12.04576668183285, -8.4818868311872198, -6.103248438757908, 8.2975079067215702, 2.5480181038085412, 18.799878298920927, 16.231939791740228, -18.011602750805633, 3.7139764502467689, 12.751595841360283, -7.8718015936255812, -0.40802815212428428, -15.47812599016518, 3.2584854200798588, 14.976391986507007, 9.1367378814346782, 3.4155780056910059, -13.292285487599507, -12.855991908912157, 14.013291588644732, 9.6911017234399335, -5.8910196575740752, -2.2280612655108047, -11.219438047247786, -2.5955623953948517, -3.4460676112793136, 3.5682986120247073, -11.70300520092221, 11.99455548751415, 7.319096625369828, 8.400961847094683, 12.142806695044221, -3.6775894169196279, 8.3797255658565142, -12.156985373281584, -17.475193610019677, -14.228116929396922, 10.726007504360073, 15.267119384103992, 12.781072511062279, 8.0326533999697229, -17.51207194760946, -7.554034280962183, 10.066411068992132, 14.13799652436988, -6.7247334837075705, -11.112518294834185, -5.7326833292155523, 3.6877552031425131, 8.7105204152043516, 9.3857694378580963, 19.127569440965896, -3.8614826162666089, 7.9404471399280068, 6.3807591097483005, -6.8888859894612535, 10.317928637508684, 2.1736529765433783, 10.953222318849482, -7.6682531128958038, 5.0318286636058982, -6.9463690764775503, -3.0184853792276383, 9.6041512562391542, -0.88225262267439808, 6.4852292067129724, -2.3181001351577644, -13.197351056460056, -6.8047677874499586, 5.3843074707174692, 5.1196343577870644, -17.820822197855577, -12.257015718775355, 5.1913937352654651, -5.0162460867599536, 9.9461758050913041, -9.7414598652248081, 8.1378256819797858, 12.564281794378495, -5.6365288176451322, -9.1029468332924104, -5.6355130288814301, -13.719331548944416, -5.8613058178495017, -9.2573519867695815, 6.0620773131346706, 5.8947778726542905, 11.265652594812099, -11.760986024368906, -7.7447348268870124, 19.076436411627338, 14.505720191829832, -9.0750817120358054, -5.2025480400034789, -3.1960162333402482, -11.659437264119374, -7.9842387274926709, 8.5980388295231229, 14.858752059828165, 6.8639263237417376, 6.0631638589074024, 2.7093921939507379, -4.9581002755473795, 4.4179924464321392, -11.144868427484562, 12.546476704938177, 13.606433000436612, 4.0208619807458295, 6.2408832155761376, 3.0941528835943455, -11.347668662075096, 1.9313877794966201, 11.65105372954261, -14.681336156121709, 7.2969958167198605, 11.59264621157577, -8.831465763669156, -12.759130509205734, -9.0714254556796128, 8.9948895559776467, -8.3736028555285831, -13.115027308542444, -0.21628815052066303, 7.7132708674061705, 14.055053470061472, 13.370601410874029, 3.3283307501026052, -11.9653642849229, -5.6440590777489144, -4.2508984635752549, 13.005398229132568, -11.5296140873405, 11.286858942494266, 9.8110403874583074, -13.263569122014866, -6.4297799553106456, 7.9672918799786396, 2.1515462864377719, -8.490571668881163, 7.5548103934198929, -13.121628447449439, -5.7901204816768361, 7.5171762671769704, -5.4216710822831979, -0.95140907859749113, -5.6992105242986471, -0.91737830538166343, -8.2053563541920571, -4.9100295191078036, -8.650093905400162, 10.400080220873763, 7.2829351923330092, 5.3481291290736603, -9.5017802399357425, -9.8687523002255393, 11.82329840938681, -3.1919281246249707, -10.124868011353035, 6.8360355157042028, -14.032171223888698, 18.148403140529073, -9.5731633683674744, 4.0453611070899935, -4.114147796015585, -8.4912512496909898, -7.9968991599686872, 12.922672789580542, -6.7315939113482681, -16.414580925551139, 10.417406116722118, -9.5795995211441394, -7.974905790034116, -13.727944328842275, -15.024522822723423, 4.9026741637309703, -10.662764572620276, -19.122555879539242, 9.217115643469544, -2.9661166430929642, 13.154514394206242, 9.8788596316167272, 4.2669291411005252, 10.239868792823961, 0.50928446540137651, -6.9544644508051245, 2.9807945285095245, -8.2689690969205181, 3.5499295458600972, 12.732733620631645, 11.61935741986054, 8.4137329217700945, -13.703811206903364, 8.5347899814747166, 13.941804015126218, 11.213731601489895, 11.550008187296406, -10.885532785062049, -6.0320756476152395, -7.945602926688589, 18.178022024827495, 4.2378890109434684, -8.419937978328889, 14.273513193884424, -8.1801725060827586, 13.690183625733544, -17.518387733265431, -8.6392702216784656, -13.927446312699148, -8.651607062718659, -12.712917239643309, 15.009792996204254, 0.15853783962329626, -10.462310302523948, -12.535567399778486, 8.8192610919401329, 13.066656030822525, 18.005415525102343, -16.007576967175243, 11.052574245331391, -1.1810954342450888, -12.762633127175347, -11.427571726679494, -1.8068233566411038, -3.8651597939182674, 6.9028603232990591, -9.9188843352819767, -13.607089316301986, 5.8989769757503172, -10.266998033319117, 12.946619994251195, -7.3433271276853551, 13.594756446262442, -1.4802835189751626, 2.9459432512420887, 9.0127453411993006, 12.34274116102957, -0.99056567004691576, -1.0211228826859517, 10.87969885601588, -15.669877762479704, 16.01192464298973, 10.789218207135569, 6.1523737440350752, 10.844976713696601, -18.796538678004055, -7.3982730413954201, -6.5213519941388851, -18.571369340190397, -9.6913300045155282, 1.0175474995943568, -8.0705533615168754, 14.251221745808563, -14.054781652173469, -10.906074448438877, 9.9932114606110058, 9.2204934537976815, -11.102967677965665, -15.06146952578059, 11.282374133246716, -3.4111780254645643, 7.3857075662336609, 10.330601600777463, 5.6502615537426548, -7.2776853004382911, -12.041052757776699, -11.046289906579057, -2.8519140526114701, -14.358095698121817, 4.6207960341417813, -12.368837238636017, -7.2377430770905917, -7.1306536664479809, -10.374815173234571, 7.5287331560402384, -5.4660620697715716, -13.441122458297521, -6.5962962593129824, -8.4930653390556969, -5.473757203858737, -16.42318744504734, -7.678902139771755, -6.1724752873292612, 17.227224731420481, 2.7992443468423089, -11.010643413583562, -6.0460973993600238, -11.514094016830022, 7.2250024006000091, -7.8426213114387204, 10.647716150585898, 5.7539405508617296, 9.727218535739766, -10.217949794886991, -10.197658817694322, 1.4534950594678713, 12.10682632749001, -0.51088307163622715, 17.710760548825679, -7.7470194812395397, -24.372971692573486, -6.6052580469808717, 8.826482956514015, -6.7872955696686779, 3.6389619856040674, 9.9237321927880782, 12.100520790781362, -6.8842633676573595, 2.8844843405481937, 13.672108533544661, -5.6338295492883859, -7.1944131155704678, 6.9746870716875398, -8.2312590639291852, -10.25205738032861, 3.9564297173352139, -11.16342115946062, -8.4103856915642865, -3.86058459788803, 6.7693385059336668, -5.5093604081945458, 9.9112156966838256, -11.829917793796264, 12.06350448472004, -9.8908904770778552, -17.725516485129567, 5.0710728367340741, 2.3733785626266992, -12.373813495428958, -8.2010211819107539, -12.301300323962623, 10.576063861117305, -2.4429576335852246, -9.8126936984062763, 10.720987427999063, 5.3468144210345949, -7.436093608771988, -12.085562323273949, 9.616133130427178, -7.2337117418265358, 6.590012489497771, -12.933819456719151, 9.0992320680750058, -4.7115096872358144, -12.444448996962361, -9.2431835291508904, 8.9400870181220906, -14.84487535501597, 6.9572855730306786, 8.679259378600257, -11.728117564638417, 11.57774167266283, -11.089244669418909, 4.4545841055164113, -10.471036138424958, -7.9268850048012363, 10.006310688982033, 7.3307629546995496, -0.70086411051328346, 3.4399790497959652, 7.5780305602750353, 15.952535940468001, 1.1236075069228646, -10.56946563987197, -16.455271371728593, 14.943737550316991, 15.270538328279843, 1.8246123975329285, -11.861267836196021, -12.897409417413272, -8.0295182717849976, 2.5085092290718261, -2.997769928368061, 7.7106512520538253, -9.7986312114017196, 3.8597867083890951, 14.715042117673541, 3.6286772784703238, 4.6804229784596041, 10.468442660987332, 6.0309605373905297, -7.2836222700763322, 7.3372979832476464, -9.125874340732242, 12.431154776537063, -12.652059501141041, 8.520614267493885, -14.669291764198016, -5.4369263583494511, -6.9272239504642288, 14.411503339302335, -6.5090359387453871, -3.8249288367587844, 6.226877964919483, 5.4872378813688707, -12.071286274848809, -14.839631376528764, 14.929556186968613, -13.550466083272015, -17.79040452965922, 5.2176515285150078, -8.4073909354978511, 13.152357868676932, 11.880434179671278, -15.154722117187848, 3.3578570344364098, 3.7992951070371852, 12.544849221875657, 4.4664223998223864, -16.02563218730095, -16.858694781271584, 5.8423687431569373, 14.717494305248145, -6.3014233972716296, 7.8246512200173655, 0.2490959399462627, 10.09774947224876, 8.2302536611399972, -2.0230125836350608, -10.877543890130998, -10.315299910440396, -17.814418691884743, -4.7984509876179366, -10.569732541659832, 12.468245506360125, -8.1994351150315588, -8.4938440033843783, -15.646554844352739, 11.104862652426069, 5.4254710709054565, -7.075912451839514, -13.038488980503107, 8.6283602505517099, -0.1897762834069755, -15.926221800862628, -9.4620561439869952, 11.028601034997564, 6.2202218101379954, 13.01838761394424, 3.8814455959068872, -10.571348353520641, 9.3930545668475638, -7.4486485829571807, -15.896920034679038, -7.6634637506716583, -13.744383772875613, -16.289316553121051, 4.2240572521775093, -5.9728476753105495, 1.4435980912356212, -9.482201269588181, -7.1075995048298424, -8.4496788887326719, 5.5233585701859731, 8.8295065675835449, -6.8321409197770491, 14.622652588625614, 8.1030077299922656, -5.0997213512339847, 10.535820013561885, -11.687469584683409, 3.0547169868379771, 8.210959869395893, 10.201179428221021, -11.658463276051274, -13.563724058479169, 11.01039677555352, -7.1382476676607203, 14.955134349802455, -13.750666848543476, 10.162311270235616, 5.7884645703783697, 7.3371242692507819, -9.6841606635170585, 5.466449250298048, 8.4163518309029381, -7.1508542487337046, -6.6797959016182888, -4.7449989886325188, 2.4393509869405792, 8.654752655597532, 10.070879973393719, -13.17581052395726, 8.5470611298539545, 6.660259185215466, -6.0653871786400737, -6.5193717691612134, -12.615899043092323, 6.700881216282939, -4.8478946577189745, 5.1988868211607864, -12.549358461765644, -10.045744010088018, -12.380860324318006, -3.8616068170109248, -14.465705737907983, 0.4164829268257374, -17.143567612135136, 9.487366827722223, 12.652721901108753, 0.7645899772346989, -11.920812995054151, 5.348021509175628, 8.3879926788022008, -4.6246359904401313, 11.089899173175201, -3.8332542947304775, -13.36196018971258, 8.2464982273107097, 14.657515986404208, 10.904966172392774, 11.533578255944192, -13.982006985588614, -11.973821478795168, -16.592644946389242, 9.2836692767439004, -12.678645783087854, 10.730932446196368, 9.5849200107862327, 8.4498461340685918, -8.6907116625889529, 14.156816081594213, -2.5856081507256512, -9.2993749691896994, -3.6239666126178607, -1.8399557052395836, -9.9970546829752251, -11.017332480853435, -11.692178962270885, 6.3025733321249016, -16.175906955071767, -14.423994620868056, -14.689511946206805, -7.2353003125032167, -9.3660212630661839, -13.858073820033896, 4.7709918994882639, -6.7026088232668739, -10.527782639004828, 16.58828557927492, 15.050247187970289, -4.0564185563228934, -10.640020339068798, 5.0431846567205971, 10.934348304548614, 0.75988821460881439, -10.291366703091549, -13.942020188031572, 14.135017480152827, 11.151498767692816, -11.537353350061172, 10.343082453782436, 7.976541387752091, -3.5774431227145778, 6.7912849734238856, 1.8417106851238594, 8.8764923317563689, -14.359256236175909, -5.6171451890921933, 5.9817930874266256, 3.2031461221092781, -3.5231009274983971, -14.863876345356418, 13.612377512426715, -8.9030335281364348, 5.1285813990983709, 4.8771312118802621, -3.1813763041012044, -8.1658030154444532, 9.2635478384894121, -11.938316318486482, -10.581389864174858, -9.041740376889754, -11.289532586451648, 9.8541909326330934, -10.813754378648875, -10.992626098956032, -4.2128060145436059, -13.803513190675977, -3.4047166821717285, -14.699309096179331, -12.322199151029571, 1.9847013546589598, 3.443351936013523, -7.7412573332668169, -9.4014738152531816, -6.0936722951459252, 11.249057062872248, 5.3612317349290048, -6.0934505412619844, -10.329491262921293, -8.3782268065652321, 10.610705115588038, -7.7383153101209938, 8.5683043797354852, 9.5214421313463742, 9.4646448974772674, -15.945188235432587, 13.571842719150663, 9.1766386061343823, 3.9788060864638335, -16.400242920289237, -12.152955170027367, -11.743525499640301, -10.778431692576483, -9.560949750398839, -11.274506489189537, -10.497378072608422, -11.313774108583567, -8.6889440492171826, -16.999837953521492, 2.8463220500405759, -9.3414733746083147, 14.505309388696032, 7.2740770646355823, -15.216612609375215, -7.7754295642857443, -7.9668693810493751, -11.838336074962589, 9.3302243430363134, -6.1546909317578038, -11.643770269023584, -7.3067290482575826, -7.6586644572207598, 4.1554355791738411, 5.5784827988725025, -6.6788226812914591, -10.099712087346221, -6.812608788772855, -8.6942723276748133, -9.1414982497263626, -5.5404435688554674, 13.782301424897506, 6.4913332097552408, -14.843570407301076, 9.1090159582398744, -11.810479272023766, 10.734632284091132, 12.106233609286406, 1.2074129428018001, 9.05135706765188, 7.0513320487712221, 5.7063731455704252, 17.827025603920255, 8.2204534825947988, 6.859838386896449, -17.066087459633668, -10.546186910811119, 12.544407506754297, -10.501953033608231, 11.631217929282226, -7.3247345033456455, -0.30451282566541621, -8.8097804299616289, 12.580754884209387, -2.4535950387210703, 9.2528280654920945, -6.6762373246501507, 8.5487856314147361, -9.8862934311079176, -7.405954429775278, 11.460818356885351, 9.4241123506707218, -6.0650535086957591, 11.749931801221361, 13.45158323366806, 8.509266618399371, 3.0990921451133864, -11.845686618745093, 4.6809017476948664, -9.0788995203187035, -14.154172714949322, 11.436663871420148, -11.686823110591192, -10.466322347645878, -1.8093094588126659, -8.2842513297508678, 6.998530934794041, -2.8130875381789773, -4.7458503858358174, 14.892214325455083, -13.297630549395505, 14.137398522674463, -5.1741407656371132, 10.811880263388231, 7.6909240450423546, 1.2020066622797796, 8.3882554040760446, -13.296889605096078, -14.12122762385526, -0.86913405214011996, -1.7012640446050573, 12.135944269100591, 13.696947616128121, -4.5178290393967648, 11.379039879071998, -17.142332699109016, -6.2502893853176538, 14.551005043468933, -15.922443449630226, 7.9749887358427554, 7.5006183839537428, -10.731307185445075, 11.828405368248815, -11.242740313773945, 8.6857287401789396, -2.3357416563180076, -9.2522949403141723, 10.057172114119057, 4.2142804964077794, -7.25445812349398, -4.7859211707096279, 12.212717205630641, -0.68060465039856421, 8.3585750011161384, 9.4355684709667997, 5.8736217498953929, -10.357680904873, -15.182609723791906, -10.528438249903205, -10.728845332160351, 4.4271186570969041, -9.5459159618972773, 7.698786708464044, -5.7616256574906473, -6.74427916594568, 5.0713712230747952, 4.9757324493057258, -7.5822193975454732, 2.1521506074067127, 11.702619296651129, 2.475868836880037, -8.5152128927626887, -8.8176272081621523, -6.7396490012107382, -7.1103087325178862, -12.249044472908748, 5.7223187192045835, 6.0785970538718885, 13.311388408274434, -5.1967232459428514, 10.616058764924363, 4.1131834199366937, 9.1157637550044708, 5.0981827919094043, 3.9623438215809581, -5.1277684895200872, 10.717366089367347, -9.6119167010571456, -17.671933631733026, -0.93466484572541053, 9.4511618566836688, 0.51145591409598801, -7.4842698912260595, -12.965780155817985, -11.049283246505306, -9.4204398537725336, 14.713331608978752, 6.1294522089617445, 12.762571544243462, 4.2519976479727246, 11.581799865407062, 4.0540310044195316, 6.7583036711124178, -8.4596629969850596, -11.555561625120337, -13.223361797635503, -11.022881346403601, 7.820188150462851, 10.050313550691401, -2.8748772822692796, -3.975284267526737, 10.165011610963463, 8.361153496598952, 10.23454765876409, 6.9861352278001991, -14.063066120834387, 5.5703634980353156, 4.5720288674742182, -10.208336872812145, -3.8841964569917136, 15.871358616035476, -10.375333061106602, -17.028934392886523, 9.6095097993772214, 2.8612197492337277, 7.3984151374847418, 12.882442279479097, -3.8593872267618985, -3.3505651418910092, 9.1400352361857795, 3.4607159608677991, -11.802758101252648, 16.131696084668302, 4.3485520924992915, 4.9299693363247012, 10.20608409504235, 11.350181288635312, 0.71079817132091727, 7.1011529322063716, -9.9921413971440192, -5.8089676277937103, 21.431868331238753, -7.0747060210352215, 12.069527047899687, -9.4828998378865119, 10.122263948520756, -13.538606127789073, 9.6375976702501429, -4.4100604567201094, -11.99790766311845, -5.976372779813337, -8.272146596627568, -8.9450436886845743, 1.9542103075796229, -2.5876227697187235, -14.368094001362385, -2.985471188013614, -2.478307267502168, 2.7456040916726456, 12.581031236480218, -11.4758779722525, -15.599590155208737, -12.992869206559288, 9.953747866291776, -11.025999481843595, 9.7008748889831633, 9.4677048052865693, 6.0665148799454283, -11.021027787278838, 4.1148665510329865, 9.9715457939675805, -4.524015231428284, 18.833454602793879, 7.5018420072802252, 6.536477074456216, 10.39532612887518, -7.7192567198190574, -5.8633746049064728, -9.4739325485451946, -12.966876834521914, -4.8932353347242916, -7.50082678824488, 7.9240662467055403, 15.473285728117284, -7.874821177550495, 3.9913525758800343, -20.203393732375613, 13.177667766939793, -11.905585671112627, 8.76829420558043, -6.6904194950549218, -2.0990812946584643, 16.352167450942488, -8.6839871579774304, 0.65535704062993771, -9.0914298192610481, 6.226432112620512, 14.414606788199343, 5.3327990949329722, -9.2825422873145076, 5.2444348695624967, -13.52476436519694, -10.565017103537128, -7.9458267805510605, 6.2385267794539532, -10.620897086888419, -14.02491825647715, -17.249193736529822, 21.822546537373011, -14.525572761291961, -9.6352912168501117, 7.7923236942745477, -0.43905931375127905, -1.1677511335028592, 7.9195608711842009, -1.7261157613467151, 0.81574419315180335, -6.6258630940789853, 11.446710993602048, 10.423767215464459, 10.131515821910522, -4.0813762630157786, 5.3099875815632895, 15.005238483277349, 3.9458100113193013, 12.997541564501073, -13.401349640520106, 6.0898523220056484, 8.5430795315739463, -6.727566986421512, -6.0976964106078926, -1.5514248251358895, -6.9251342133096534, -5.0010498589221326, 19.36294632958224, -10.995748094036278, 6.8230876895289425, -8.9816761374312737, 19.252689002798032, 15.018231032342973, 0.75032883111291693, -10.512852145797988, 15.952636394768637, -13.876019658000088, 7.4282002133627536, -15.007337649734009, -20.867628639436518, -12.864466413292632, 12.282886216105501, 5.6117260976193588, 7.7243055425354985, 0.74537471606410499, -8.3753274103443793, 8.7297402808334041, -3.8752359373415373, -7.8660891683218042, -8.8027160564205786, 7.7988010166838881, -7.8129632889899385, -5.8353090570942738, 11.438552747844, -9.8854956847581263, 6.193488211617348, 5.7060858140643864, -5.8417400083956581, -7.1659403388854175, 8.8621684734697617, -13.828395956746165, 11.58722476958626, -8.7757625064865632, 9.7638601085689327, -13.63897121774294, 10.692146632523938, 9.1954815513953641, -9.7262358263602646, -3.0742135000084518, -11.831625275045802, 10.346151064081882, 13.860225574621548, 5.3434462647847401, -12.667486708061194, -7.6071393527596891, 10.497824234551809, 9.1398524858692305, -4.8312688599490299, -9.6866353191391568, -14.936854315955886, -4.5645292398393735, 10.306087472805107, 16.435616799434957, 9.7618939189542857, 7.3359442918945499, 5.4777235052650965, 12.827631906540597, -9.3557044067803972, -8.6207571310957753, -6.9067986860795303, 9.4266173165645881, 8.2700014055707438, -14.396299560527304, -9.1945433850102294, -5.0742673058143186, 5.9363570201246212, 9.1825801770474449, -14.26016478123667, -8.9647881473585791, -10.999991358949853, -5.2643587807317358, 17.966460043223208, 4.5038323715849113, -7.3643627119764705, -8.0021495622334466, -5.5012765171131761, -8.6385795076142866, 10.642859565399243, 16.418157809689014, -12.558310319227193, -5.6944436186565675, -16.620579134203229, 5.2993074909249556, -9.5535858720998252, -6.194850562303122, 7.9283758132069577, -4.3938243314441445, -16.08461551423154, -6.1053020627578558, -7.8156662613007883, -4.2010902685294225, -11.260598796472106, -17.361798229363732, 10.523477968271544, -9.2997205134904561, 4.7239785905440819, -16.55663724338849, 7.336212674126954, -6.9284736037251049, -5.9733477242286268, 16.958437027673817, -9.3688626284447736, 12.335069283139083, 4.4003768017589344, -9.6375650205771759, 4.3025216992304607, 8.1709809734149754, 6.0840979096543046, -1.7791701081822009, -9.7212268065403915, -6.3728373407996992, 9.4709301635928664, -9.8099415495718265, 10.216669472304444, -7.9089613940445638, 9.0133309428613888, 15.233159549099527, 14.443197589960937, 12.315849008505751, 15.22683390790605, -12.204208274855294, 8.0545420942912056, 11.261686524342778, -10.088714704911705, -14.758394330397744, -8.3506925495196622, -5.7190575904160488, -10.474095362096637, 6.7558531383042801, 10.839875782803038, 9.6223187492013871, 4.0011315315627671, 5.3452889051100145, 0.29628684358052387, 10.260560792716758, 10.010269925150098, 12.309818259037518, 8.3443036587520112, -5.4014577244395916, -12.309450717768483, 6.227119823086781, -0.90098300040336077, -5.9574142236058796, -6.5290358544134426, -7.443075641870017, 9.5718761708906559, 5.9045525168917088, -14.09287394192167, 8.537557668616758, -14.160598968888243, 5.8051719496039951, -6.239975019204187, 7.4524259174698209, -7.4731349725176219, -8.5239733925114809, 16.110254200184002, -10.257968713373153, 9.5898379203607735, 3.4675905258102322, 8.1300367938993361, 4.7762632339122959, -5.8974433337845085, -9.3140122423426206, 3.5847848816848376, -9.5355250106758724, 8.6839175133173008, -6.6948323819511488, 6.7933016290691377, -6.3800902026507824, 0.76093699061175468, 2.6435457529778015, 7.4138748481937027, 6.0247308500592567, 5.9280863177297123, -3.8920878288506016, -8.4621386416944677, -18.750651564949948, -7.6188990491921116, -2.1334205811758622, 8.7540093304816082, -9.8600851053842149, 16.342033110995256, -10.800872299968921, -13.998298573757474, -3.2934871871896396, 14.06180118603365, -9.271874228911658, -11.048285130582032, 6.1595626190926716, 8.0570216147192557, 0.66340001966893403, 6.5132884000227351, -5.4201122315987309, -9.7412562635013984, -7.0486139617141514, 16.981384687745692, -8.7022380510622721, 14.647877845477861, -8.0820055541788722, 7.2226523022245761, 5.3790569210687584, 13.728807132743302, 8.5317048523035623, -2.7316549253863927, 5.3846139594020226, 5.4103146460176523, -6.694268736004001, 8.7300406717059573, -13.347383859719848, -8.335174873152722, -10.945696086225201, -10.4875598953527, -6.2891459907155456, -9.3671321709341981, -11.585498988590738, 6.512870728010193, 6.33239714027453, 8.7682544573530521, -6.7439993019333704, 9.5026784978124166, -7.0246760343330656, 6.4372813340255446, 8.1945894173399711, 10.262887249545706, -7.5060931723177706, -14.674750300787338, -13.287289997793177, -8.4928309129257595, 7.4563888548291644, -4.5195874938690226, 8.5442291590063935, 9.7115273312730501, 15.092119744113154, -6.4263051953856785, 0.12831365323535676, 8.7640439297438597, -6.1460218943241305, -10.889755958467752, 13.67769695151666, 6.312988951937812, -13.227320725213115, -11.784825668882982, -7.6748667604861192, 7.7787450544407344, -9.3711259762266828, 13.023365017019263, -7.0200584128511876, 13.494925467734497, 4.2227722997626005, -13.760223253172747, 6.1777636365323456, 12.067306433588751, -9.9155428829691132, -6.5766064428842856, -15.151662906193899, 9.6988065214723864, -10.152731302282174, -8.5735676931961322, -9.9418795299730185, -6.2260760507460198, 9.447544122507308, -8.1319644337468215, -4.145324424570318, -3.5485961822808565, -13.467769122062073, -5.7514070303621585, 4.2372927865136871, 10.111694661148967, -7.4186471554037379, 11.430760000153063, 12.312843067890855, -12.810688665750249, -1.4448074235360808, 7.986361807585828, -1.7676683131382003, -14.521209725348982, -4.352705664193615, 18.914853195668275, -1.5113121651615482, -3.6397864185997131, -8.6196558356553385, 4.1199321080626019, -8.4888399293551817, 0.57614759104880209, -3.8170562650576274, 6.5118953364681147, 4.0953213386352472, -5.3421050165325257, -12.272356482934088, -3.0358640779517354, 4.2481637384966975, -2.7752337082527849, -8.0160326885318369, 9.5768553793879043, -1.8524775210440534, -11.009861394679287, 8.9742068648070266, 12.471334080830026, 9.9992644688047552, 8.0039800551702207, -8.7981872925635614, 6.6433407975833738, 6.5480704488332835, 7.2841246634294423, -6.3252439319780178, -6.0513426125451124, -6.3988334931556485, -17.469331458693546, -4.580254889517116, 8.9993454898016569, 3.2238207283793323, -7.7799510625287303, -13.803751678166556, 9.7121916487763045, -8.1746700971358059, -8.8126126733994941, -4.8155492973679186, -10.804453969532291, 7.0086143651800121, 3.1481410707654631, -12.810183673768677, 2.3362046780839187, 5.744619950986845, 3.8643342874084374, -13.249939418679734, 11.415744222471059, 12.554737671029878, 9.8333778447831257, 5.0957400772063437, -3.9991407502674661, 9.8345770583999279, -9.7368996360840274, -19.449417624721992, -7.5133274868764675, 6.0619042605430966, 7.197156700662827, -7.0063836107615485, -19.263860108465263, 13.028208109141358, 7.1331219897936977, 5.4720228485501652, -7.3579311406347925, 7.1801636071660138, 14.640572831964421, -3.8340913302192701, -3.3062445113231744, 17.400159670258972, -7.1681505547822413, -4.3542281808553351, -8.4546164816007607, 13.421193429578857, -14.905121149794782, 8.3143744117862095, 4.9730046756217972, 8.3532232015837344, -7.5969825424753346, 12.3177910080973, 8.7607875220531426, 8.5127047792303561, 3.5774587189097899, -9.6494548210828786, 7.5331539937229897, -7.4747114284701679, -8.6591660587053916, 7.3468316363038637, -3.622337543593344, 0.47384090625185044, -6.0463560480716252, 8.0499483448215017, 9.7022755442800293, -10.776004671468062, 8.3543427603924503, -5.5360568466131905, 6.0186808121336659, -7.3543970398820848, 9.2806086183805689, -12.230546104506987, 7.4673092848302733, 10.975472812952574, 6.7926415721593818, 4.8749321283736755, 9.5323516120815874, -3.0280886662753885, 5.5571898549900514, 10.226559964818154, -5.8034190385368811, 6.5444311969384019, -9.130374827280793, 15.819448485436817, 5.5538576215556326, 2.8637826501217618, 4.0706674231610558, 6.4597011042272623, -8.3735378854139135, -9.5667300995851061, -13.845901714228189, 12.714093428899416, -8.3628461969588557, 7.5987675327409425, 5.9272125723131186, 4.6950385206484189, -4.8195825770873233, -7.908711363482686, -6.0290697566338824, -8.6859336035752293, -4.5193059923378351, -4.5940077637319696, -4.3311584091869832, 5.3536488354562275, 1.9921280360174241, -9.4633153479117045, -6.6570051760469031, 14.208357863252012, 9.4845107231608647, -7.1832992233853066, -8.8475487049318655, -13.630287949249563, -6.0719107719352952, -14.274798405390152, -11.162105305503859, 13.054901490270078, 12.995371746588807, -13.146715820058548, 12.945646134893682, 3.0460739976722446, -12.155229015360904, 2.7412678887489506, 11.780611735174173, -5.3341954653614927, -10.032480770112713, -5.8447538785525053, 0.52725472542845364, 13.379456926012971, 9.6135830134952744, -1.944448284069229, 9.0502993001659355, -11.346127451101133, 4.2434870682337369, -9.5043367843183457, -2.9775157830606012, 5.4193649803215109, 5.9212605221007886, 6.8739591477125153, -9.3618138585411454, -11.34734301929147, -2.8580136600449677, 9.7314938797272301, 10.716957084696832, 2.261487615173849, -11.936472547545375, -11.596497065616539, 8.1683014049841454, -1.9741314291525349, -3.8079032870338203, -18.998387033650793, 14.785213606318443, -2.4675987407306512, -12.092457768834166, 8.3055089082183038, -9.8880041321383381, -12.17693749962149, -5.6119106856770609, 9.3346742365750952, 5.9978824704833622, 0.13754021975113387, -14.894732183908136, 14.747292229007831, -9.7097733323647439, 7.1041665937562009, 8.747982309638612, -1.1124715705618149, -1.3453533016361534, -7.2336827315963976, -3.3065754079116902, 10.610359888132521, 6.439770888743964, 11.42420401634142, 6.5388842458764689, -10.853598132676623, -15.353822721495742, -8.0675862924724751, 14.459019981256141, -12.566396596207603, 3.4205186262164231, 5.630487549883056, -8.073684341188935, 0.82126057392054652, 13.882060246971731, -11.094144048902541, -11.389801550560342, -10.3187260289045, 2.991571648758196, -6.4911734708363165, -11.245496138683489, 10.9851776336762, -13.130504876870628, 3.7733165504957942, 8.4076079303113911, 7.5529546967120051, 9.1048736341912768, 2.7287083950923141, -6.4019633593747214, -6.7703960792021753, -7.6283872602484184, -7.6359394699956251, -11.153289601654617, 4.0727793884727168, 8.3062884746691932, 15.72392064712384, 0.9811577968163786, -11.722310671012934, -11.342923130703641, 4.6538782013854689, -7.3739066993524025, -5.8947067956510093, 11.486762613574625, 12.413880145399126, 10.786268654735865, -14.830950842039924, -12.718664091764236, 11.838893611398694, 16.960744319691706, -0.90885433404131177, 11.805632469674961, 8.787147329142396, 7.4670599584679005, 13.783711428147573, 2.6889832573487715, 9.8277282208337393, -12.621979239155044, 11.900463485129047, 7.3974913674936378, 7.9790082301381764, -18.460977129782226, 9.6868989422260476, -7.4849707679692381, 2.791279213037106, 5.9072811103444005, 10.027746084723706, 5.481378194108391, 0.94657543605496242, 3.1638084348680802, -11.565804912112132, 8.1295825065418228, 6.2454385368905463, -8.7244225637155086, 9.2949740971114814, -15.413745662976126, -9.2767171742637053, 20.883637553321279, 2.1729042705598971, 5.2123425513190229, 11.260222333457566, 5.4759025599371576, 8.1537344500122764, -12.294121929916995, 8.802476739158374, -20.703918322925325, -9.4123075195898913, 14.838015503157582, 8.1809389421993437, -7.6381202529000944, 5.0731354695422288, -9.7523696522120105, -13.519239387616903, 7.7323479369959101, 12.148583040284464, 5.4807070910189717, 4.8696229713233139, 5.0087903276064836, 6.4402113569592467, 13.277426855835845, 9.6524651881369721, 10.826902095836219, 16.183489895274345, -9.6318043844967534, -1.373132442179763, -11.219593888898418, -15.004319828107285, 18.258393722812315, 3.7354456310459385, 8.0651749744359105, -6.5164044554554748, -12.565266643553137, -12.030885912645394, -8.5404810535779507, 12.314165209697041, 7.2947873166397219, -10.819275536058335, -8.0129408622894012, -3.8121662128657552, -7.6091124585846721, -8.4798365873122474, -3.9868453977970675, 11.38629202057937, 3.5714802941824, 2.9518831049273677, 6.3322250488086071, 11.580034774188221, 13.479927163429085, 2.0786137569475098, 7.9330224326080057, -3.6943001859225055, -3.2256160391289095, -12.811450358156192, 13.541505165687818, 2.6411149013180362, -6.3489619114245244, 13.373338952003571, 12.628299743258562, 1.0027687748564038, 9.2077227922659706, -13.768254699816865, 6.8324600540916247, -14.524379303203943, 9.2715316925285709, 8.7678396133255916, -7.7000840765938703, -7.6752994649649313, -6.9178464084480851, -2.824297046557938, -10.067962153214038, 9.8382780470022801, 9.8343360207768367, -10.442346656794413, -11.531825845771756, -5.6955603852302623, 7.9952115376447042, 7.2796481632297372, -3.9815702225402285, -13.888827599999129, -8.7028698626538308, -6.0635186121417952, -1.0917426165389645, -7.5444189349932813, -13.502585170286313, 5.3738984196649149, 5.1002418292985094, -2.2415640749653791, 8.3993581378656117, 17.872303247028064, -5.7930453662663712, -9.5610560588597515, 8.0594903059030294, 5.9955468570765671, -8.4016643820784811, 16.017479926774133, 12.457791465479348, 14.251050296430238, 13.550966058757862, -8.762120073439311, -19.568799520529904, 14.473633275887034, 4.7150108398434316, 17.622896812791758, 8.5532109821391256, -7.8861564007563967, 2.8018084587073706, 11.238281768369326, 19.036214400042667, -12.627994340787289, -3.229926146308185, -6.2106083456766665, -12.029815325633603, -12.732678066605525, 16.114114027765005, -8.8878875737603433, -9.1952288940063198, 2.9514348736209386, -14.875969949421576, 7.426537438524826, 4.0988218779588257, 5.1048469008081083, 8.3561664083509974, -7.1680838371486972, 0.079559302266173665, 7.234447616829998, 9.2153180384359938, 11.380502523658766, 3.7813665464468564, 9.3571471630839476, -5.6198950965916659, -2.6112846832626295, -13.074922193350705, 7.1458325396315745, -6.8553238201936848, 14.037347515845747, 6.1114574644258219, 2.6233447927944442, -6.6962191818230385, -15.054560815064955, -3.8509653059595634, 5.6193134186600444, 8.4632418525580135, 9.06084843255511, 8.7155312766304451, 14.146656363113056, 9.4485647712524159, -11.894790263269002, 6.3630883640874796, 6.0659222594215532, 9.3423771994935656, -11.56898779218068, -12.569317170483185, -3.1542401369229229, -14.317618053977442, -16.07713062656423, -13.866270731830225, 8.9731628045127234, -2.7568654754219311, 10.650056946180007, -0.38554919912492391, -19.636918428478758, -7.261084813408365, 18.261599502237281, 4.365909470450525, 9.4604701736004575, 9.3379768195852684, -5.9721332777841125, 1.8392337494849149, 12.236588220433115, 10.729755869202716, -5.0163355160529157, 7.8745146479874295, -12.210717308250283, 9.9053843786672573, 4.3176048616878999, -7.1321033170654076, 9.8376099896153644, 13.994875675654404, -11.800822210877568, -12.467732532409068, -4.8096053846346782, -15.806886200214143, -16.011053902031289, 3.3108259217896991, 9.3708906824355758, 4.9387906035182194, -7.2811664484622529, -7.2283659694812323, -4.3994107454794076, 13.986557692605393, 16.267589496305209, -12.5211237853249, -8.6162733581098614, 11.875897506788261, -5.7924040049014529, 9.60395357854315, -13.371234187638548, 7.4044876769030976, -9.9169764629346115, -11.960026798255779, -5.6929530819152605, -14.080996179546117, -4.9741440758010285, -7.2894457453898616, 1.7385165163304241, 10.659988023147882, -1.4616437274123262, -10.074637029156758, -17.086127613435742, 12.235716666711239, -7.9575522168496349, 5.807625236075423, -9.2779276010226894, -16.480345338445041, 9.5297786981975108, -12.287759229285887, -5.793455825490601, 11.046928184816098, 12.263531584491689, -15.868613864191206, 6.1089590101381299, 7.7043039642206841, 6.7725058819006509, 0.19765926454723443, -10.92190123421037, -8.6903416862217444, -3.604954070470813, 10.780882529813848, 7.6342821794581255, 1.819027960022801, 8.9622472070627612, -3.7731185676641705, 2.6511830669363676, -5.936256145443763, -3.5065708446633179, -1.6756694810431396, -9.4457045728120921, 5.1176087336867671, 9.0843869892318665, -4.9165468247185249, 9.6190501542416023, 5.7720688303614107, -8.8665231351704143, -16.776765049597191, 5.1935200585542409, -7.0317717992679913, 8.5952975711448651, 15.701379400382201, -5.1747900955843287, 6.644409479106538, -12.294043736596755, -15.483394542555223, -6.9161043885800755, -16.902160692468406, 13.140408586007654, 7.9585367038084494, -0.60142488467217781, -10.583573691246794, 7.6570812407643905, 10.488467203766263, -12.229594163883426, -12.105180821633089, -10.100333917660924, 10.582889173673999, -4.3524138084056574, 4.1598294177868027, -7.7208623056787218, 9.8373959423124191, -9.843437056863948, 9.2758547221503864, 13.917929858415311, 9.6348606573169207, 6.1603576344825903, 7.2761550553448275, -5.6132644264075031, 16.925921888188984, 13.099232943399601, -12.169951256692608, 8.0341465714582103, 9.5080586839310293, -8.9153040306547862, -6.2778930359354987, 0.65702865949253608, 6.1455975831103666, 3.4956736733487177, -13.101966614043903, -8.4917541060921486, -7.7703858331616402, 2.9540207920840338, -2.8250454453694225, 16.471572201031012, -8.3401753077338174, 8.5209392200398799, -8.4562622463700912, 5.3451445327350049, 8.3227551961577149, 9.5505384761710648, -9.6168853444985132, 7.8088619634040271, -10.010194534199005, 10.407541359870157, -12.730901681260953, 10.062237956980878, -8.301093581147164, -11.221782089013969, 5.0699226682185836, 6.8670809315755763, 9.5183305660198574, -12.477293633009369, -3.0829984725185011, 14.251075736126907, -0.50381312202666373, 1.3945668674871461, 4.4380349292124333, -8.4792849992484687, 15.740298722260704, 6.4916661990457039, 9.8781328856963952, 14.524311425947424, 8.623227064986775, 1.82594923740208, 8.1658888991281113, 19.519909829772214, -0.71626812905103776, 1.7182300090879543, -8.0056305624195137, 8.8667806307632393, -6.8903486607996696, 5.3931378831660304, -14.284745953661838, 11.800779205285183, 11.828892295047666, 11.579327959504184, 5.9644626407280574, -10.637566489206868, -6.3308930175168046, 10.362896991246821, -13.136681551103671, -10.69114929291889, -8.2804076555200332, -8.7620956793565572, -8.3349590113674843, 6.0390086996968186, -0.92206940007654714, 16.688147291793179, -7.7396944231238889, -10.556885976235911, -5.5034713893873217, 10.684323799177031, 10.164740010619706, -18.644906837500962, 7.8255279920941758, 7.1184183927575999, -8.5879829996361785, 10.058536284915368, -3.9577147638427337, -9.4390455070755355, -10.813502747434075, 3.1725069430189179, 14.646645070268773, -6.6958720302719321, 7.1891012020482057, 2.776770380964142, -5.3045752723276198, 11.024688310314966, -8.8716706651748609, -6.2182144207648875, 7.2174155723591822, 9.2363647659736916, -0.13811663085025644, -6.5095852199241193, 2.7850661520962201, 5.7288466875807895, 3.8404238060339386, -11.979694823507765, -8.1566218452888641, 8.4872181623141802, 4.0684730663558621, 9.433119896225687, 17.452359798566942, -9.1852211978356539, 3.7813711040017632, 13.687886395835575, 8.3110503099043083, -12.263855365231695, -0.29265821325473718, -5.7786710506977288, 0.32000221107421295, -13.152220176187292, -6.5995903240006717, -13.649334703564579, -7.5516513340805105, -15.16406327996164, -6.7664832291371457, 9.9511431024063146, -11.833825853245724, -11.726480937964023, -4.6960938337568416, 3.6909792826776235, -5.7241654435325771, 0.84009221550172219, 3.981445765587416, 8.3193977689219309, -14.855487044550641, -12.13768399449228, 8.2575189786919658, -12.482209307351347, 12.288265749008579, 12.92588605732125, -0.89651953932604156, -17.178851924529209, 13.465060130471429, -0.66179931634497746, -4.7361380949519907, -8.5915497494217874, 9.8633923545024036, -11.075503948766817, -11.521258634171812, -16.937563321814299, -8.4089961555477153, 10.316744468138424, 11.068755254870558, -12.812559137681774, -11.716000182253042, -10.794814834414403, -14.695829972179469, -5.7734367211811755, 19.281663549262714, -7.7079679114509911, 18.982133221850518, 6.7278265135517552, 9.4200950070653935, -5.0327780626629206, -1.1472749532062567, 8.9655615288611052, -10.289968622568939, -4.5317886320427014, -5.0717832150149214, -12.403158065152988, 16.054879478569319, 11.910769204629043, 8.8721630995550154, 12.946670225247273, -20.040326823281728, 15.061437997065909, 12.371159663686912, -5.2434241432319393, -6.539600733678907, 8.9759004731301122, 10.399696431036546, -9.7820158235043255, -1.8655127741351087, -7.2564512028104291, -9.2402317505484497, -15.743596514833451, 8.0518221334585913, 8.064389141916843, -5.1750464722524647, -1.2577099412771857, 11.088648050953193, 14.734664098438651, -8.7257834129372487, -4.9071340910761805, -7.2288497019818241, 11.368753439780507, 11.259515603467754, -0.9190234527098583, 10.508309728639846, 5.5014236641516137, -1.0062376510942861, 3.9510038373896794, -3.3772476520373296, -12.298064413396816, 1.1518807046710942, 9.8347990668982277, -9.6697877164226895, -5.1708006319540161, 10.90534178699129, 9.0780310964231923, -11.06717326378323, -10.193153698637712, 1.6370922062264599, -1.599701860652494, 7.4493340597532782, 10.079750519485344, 5.9817167134058051, -6.1883642950981734, -8.7859917448021054, 7.6925693496530796, -11.726693947959594, 1.5292664230077266, -3.7640503328337047, -9.2026303785959076, 8.3703384923817321, 9.2968574133785165, -9.0282964165522213, 14.082662142896044, 7.0391904432891064, -8.1892402659133481, -8.494960679412987, -8.3171594195215324, -4.1204583607408765, -12.464929795412097, -8.2800259108270922, 5.0158695467591343, 2.90504266938304, 5.5802620759772603, 9.6053945607379294, 7.4665086294967553, 7.2836197716168538, -6.0797636096551519, 5.9192672325212143, 4.3197502963078556, -2.5794586298505413, -8.3804827856018385, -5.7616389244014083, 7.5165636982133597, -3.7871806468757891, 2.6957388838195038, -3.0339814791522679, 7.7390014359139343, 1.0179611498135317, 0.57428282151728316, 9.2486809887277968, 8.9851820183067517, -12.322228892543235, 2.1846637256927366, -6.9268224211182101, -5.6465263096341207, -9.8609073169739414, -8.0437109222330996, -2.5924823061626299, 10.799267368908426, 9.5532367964485942, 2.1510949897407339, 0.72813586085734983, -7.6316236927774765, -6.6634161974825536, -7.6995131312161114, -2.6469146283491312, -7.8927242011683072, 7.9686594739655217, -8.0858268153723696, -11.113628935027652, -4.2312391545249435, 7.400536752330261, -15.878877108958942, 5.267992480772417, 11.16296673206628, -17.540164979801386, -14.801126830818111, -11.385201143366997, -14.508310090705075, 14.464207778841862, 11.215905228606482, 8.9532196390944634, 3.1058203222772014, 8.0753828772231113, 10.559485384240654, -8.2414912742823354, -11.714805939566189, 4.7281042573450431, 12.657353257890819, -6.3043093049399248, 5.067000914225444, -14.714628033981958, -7.7444814248447615, -2.5025562382741042, 13.564851064978582, -9.4328409951276662, 10.04126088038934, -10.570084081595921, 2.3444801610493466, 7.1831276221853866, 7.404162681313343, 1.1684082688282307, -8.8884680285241533, 1.9400943416397112, -13.196562462363692, -4.5705203572273359, 11.003636571194738, 11.468673888105736, -10.534610194739036, 4.4477979444487845, 7.3667611650061362, -12.044187016767467, -11.396051178941862, 3.9462512050906744, -12.988661501036244, 10.545881026800801, -8.0309289513402735, 9.9370741830104734, 13.654579804016825, 7.0469488853837321, -10.938942295813185, 5.1800344871423132, 10.882232153707738, 1.2710853105543087, -6.5661242949766816, 9.7776412282696459, 13.321850745505881, -8.1153422577009291, -2.2941713421233958, -8.7097542589155221, 2.2618606797252978, 3.1810406025700315, 4.829995467844082, -8.8230523342209999, -7.8350849175265527, -9.1156429568037076, -11.442019665347123, 2.2127249998070249, 18.018245968154236, 6.7919203279388967, 10.818120665998064, 15.957114328595093, 9.436472994391762, -15.0724442489973, 10.177531220212931, 8.7382348206500033, -7.4439716572652967, -10.135340539629416, -1.5478693068716267, -6.2520881203409369, 21.51870984833112, 6.7814496888686202, -5.4629593689724354, -1.0810664038442734, 11.680093350196586, -1.1684404824410481, -8.8192804660387161, 11.947180907432026, -11.865540708697406, -12.073158010228243, -9.3168616660647103, -10.855717378744718, 12.832277402471462, -15.233827235544979, 3.719489187613028, 12.974696537296685, -8.75959465422536, -2.4475947054420195, 11.313184053568827, 6.9182165488811229, 12.123675956468196, 9.6442923820443145, 10.799907622549545, 1.3696427348286129, 12.109212710737127, 2.6404947713803306, 9.5435762973738267, -5.4268755145327745, 10.974370356637689, 11.459181655827159, 10.228613791177938, -2.0376202581586202, 8.5519223504193267, -15.144108617549279, 10.208111627929036, -16.074632706297336, 9.535346082793712, 12.968894012265515, 4.2926497043948793, -7.6447760416419124, 7.3591604897068219, -6.294066487171917, 8.6661482650382133, 4.3524844886549072, -9.6284187314739373, -16.389868048898698, 14.370574991274481, -8.2963813089615268, 16.504114329831857, -8.4564658970066731, -6.3969858495492078, -7.0522130158545027, 16.328014713505098, 4.0676774938327931, -8.8805902890220576, -5.6438005548253818, 10.887856323753418, -13.497382772819085, -17.229682704447541, 10.177341730428909, -10.959196430060141, -15.892999214486872, -0.39312548358593402, 17.548662000796629, 8.138747505659067, -11.081466337015, 9.3549081143588229, -5.2668052531909293, 0.59145215464277101, 13.865804154173629, -6.7446135707105945, 10.591472647241186, -6.8775928522394087, 0.79035105716724385, -0.83434363179526505, 13.426811179256797, 13.480253964577903, 7.9579945693584886, 7.8687287842784803, -1.2711852125721312, -6.5831626138029433, -10.255988526378117, -9.3721646222445631, -4.5483019698635951, 12.654546996958775, -2.2845772848784054, -13.395748226685187, 10.227730333720137, -8.9275038607977386, 9.2096733075692399, -9.1994549499155589, -4.5768838702423018, 7.4336970353205523, 6.1990136188764922, 5.392562974045604, 6.8615159418299543, -9.9148725697134683, 10.272013543022926, -6.541146389868957, 6.1996539988491746, -8.5702789915391175, 6.0710850780527128, 0.41216255793753664, -6.8452494187073416, -7.3698306482120808, -4.3788198137924814, 5.254192997316685, 7.0651978737141468, -8.3496697717376325, -15.541186410630397, -13.361062248182593, 11.869712905857645, 8.8858662456220436, 2.315280646740792, 9.1370562156627635, 10.612212040886574, 15.723923545841364, 9.3000796832012966, -12.203790919241875, 9.5229433645020229, -11.332560886601259, -11.799762316157022, 8.6718707861873146, 3.4390494326490342, 10.948206478975262, 10.351083327208633, -2.3551385999606347, 3.6593868571158006, -10.912461508095474, 6.3601915796808566, 12.644105697007012, 8.0987317607631102, 6.8425116090817673, -7.8614337809266139, -16.777952262404956, -15.092829035089149, -10.867283176676434, 9.7617585972043095, 7.0699740006630494, -0.80345056050581032, 7.2341098943011026, -2.7901743760803868, -14.023920253719963, -8.6493250885626658, 12.119156062865828, -12.565363519164727, -6.6257256922764087, 9.9530063133378111, 6.2285641482405287, 8.5890710113124502, 10.901661163934543, 1.7011000225296526, 9.2328185698429888, -2.5151197107048353, -0.78814118951465995, -6.3782804075339934, 0.77016194990540299, 4.7860592575330942, -18.091131028655795, 6.6618347947308489, -4.5537746303503699, 12.906362988375243, 6.6637236513957019, 5.4194732758517778, -5.626683563346548, 4.8295291548347352, -11.904932030289029, 9.9944164460741938, -11.027348899069844, -0.014743410131345848, -7.3410368137184197, -12.558702052466645, -9.2966083471503538, -2.8582301845790048, 16.122229949617235, 6.0332133243788979, 9.4423884847579131, -6.7953848219405604, -8.640997496023326, 11.564755524473357, 7.7370575077503672, 11.178600690994582, 9.6609341268345741, -5.0924071871300569, 2.9472182219982841, 11.322674214116185, 17.636604816170465, -8.112421382991716, 5.7980976514734257, 10.587871354585735, -10.207529594090163, -13.012906685255201, 1.6439826301840548, 4.7959168408892552, -9.1817793609379343, 15.910744159295755, 11.988413488939839, 10.225499838967904, -2.1100999951643771, 7.7773391391119979, 4.2070274590049737, 3.1789918079199362, 11.389698381773869, -5.6797986359782069, -4.7261529062162424, -6.1926650154600731, 9.5097255166801595, -4.4005426737892748, 4.8284348550831577, -7.4035564503513553, -10.371755556185054, -11.138214834764621, -11.479591917367713, 7.3492465579271542, -8.6401023000535666, 2.4737379805053212, -8.4391176745455763, -3.5699286239866383, -8.1254703716775829, 11.948227614312263, 7.880462510583679, 1.8623842706739999, 7.3888689386136646, -1.2896033177393418, -8.2116493851785464, -9.0121076446113531, 2.6038276518722672, 7.9944375021940459, -4.3649859784435145, 5.1704186172538593, 7.7846827735959723, -0.51775021699396251, -13.814395914977867, 11.155615752700793, -4.0116122940272048 +}; + +char detected_data[] = { +0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1 +}; diff --git a/libcodec2-android/src/codec2/src/H2064_516_sparse_test.h b/libcodec2-android/src/codec2/src/H2064_516_sparse_test.h new file mode 100644 index 0000000..d3d4797 --- /dev/null +++ b/libcodec2-android/src/codec2/src/H2064_516_sparse_test.h @@ -0,0 +1,33 @@ +/* + FILE....: ../src/H2064_516_sparse.h + + Static arrays for CML LDPC codec, generated + by test_ldpc_fsk.m:simple_ut(). + +*/ + +#define NUMBERPARITYBITS 516 +#define MAX_ROW_WEIGHT 12 +#define CODELENGTH 2580 +#define NUMBERROWSHCOLS 2064 +#define MAX_COL_WEIGHT 3 +#define DEC_TYPE 0 +#define MAX_ITER 10 + +#include + +uint16_t H_rows[] = { +870, 276, 110, 54, 226, 85, 59, 153, 31, 60, 46, 75, 139, 239, 56, 13, 30, 45, 63, 34, 54, 21, 77, 204, 441, 11, 297, 126, 148, 104, 269, 57, 369, 213, 117, 479, 53, 124, 405, 97, 42, 132, 67, 103, 389, 156, 237, 105, 418, 11, 60, 12, 195, 32, 11, 21, 10, 191, 176, 237, 140, 376, 115, 9, 149, 304, 129, 308, 234, 129, 453, 215, 176, 213, 151, 169, 41, 106, 421, 103, 83, 62, 124, 3, 574, 39, 31, 472, 69, 8, 40, 352, 62, 275, 74, 121, 125, 35, 83, 52, 21, 422, 229, 233, 62, 125, 181, 175, 28, 43, 113, 340, 71, 4, 40, 249, 134, 168, 97, 15, 26, 135, 104, 80, 206, 108, 307, 494, 358, 82, 159, 137, 19, 210, 6, 19, 65, 285, 45, 154, 276, 14, 137, 79, 241, 235, 116, 129, 84, 3, 122, 370, 132, 451, 77, 89, 262, 79, 170, 469, 24, 163, 128, 18, 120, 244, 8, 153, 151, 441, 95, 327, 284, 96, 84, 35, 61, 286, 20, 22, 68, 131, 106, 30, 280, 343, 99, 124, 262, 208, 277, 44, 349, 41, 10, 761, 39, 445, 165, 81, 393, 194, 18, 250, 589, 70, 307, 1, 365, 47, 4, 9, 283, 133, 90, 601, 117, 228, 212, 58, 420, 230, 142, 25, 57, 518, 88, 180, 24, 122, 379, 143, 33, 30, 140, 68, 150, 320, 55, 33, 132, 2, 22, 16, 272, 44, 264, 49, 174, 234, 86, 39, 10, 278, 177, 178, 20, 126, 18, 90, 6, 184, 158, 111, 246, 229, 221, 48, 267, 6, 172, 49, 291, 185, 67, 50, 157, 66, 32, 525, 257, 196, 260, 92, 72, 163, 144, 329, 134, 156, 47, 82, 49, 391, 26, 1, 88, 52, 56, 8, 111, 138, 219, 57, 447, 182, 263, 38, 98, 75, 36, 83, 245, 5, 419, 63, 12, 287, 603, 58, 507, 37, 2, 214, 539, 55, 53, 81, 186, 73, 85, 97, 91, 332, 123, 66, 188, 591, 158, 324, 88, 53, 214, 84, 389, 104, 271, 211, 7, 393, 281, 242, 119, 848, 705, 428, 50, 28, 52, 15, 5, 2, 230, 38, 76, 295, 217, 1, 56, 170, 145, 5, 72, 460, 203, 145, 211, 121, 68, 538, 44, 133, 87, 494, 325, 161, 781, 370, 51, 115, 262, 106, 614, 29, 220, 189, 224, 165, 17, 72, 46, 17, 64, 19, 447, 13, 9, 270, 4, 91, 471, 35, 23, 407, 34, 38, 82, 321, 112, 195, 651, 7, 43, 431, 249, 171, 196, 311, 15, 66, 16, 633, 37, 94, 102, 23, 3, 214, 252, 256, 173, 316, 125, 96, 341, 71, 73, 338, 256, 165, 140, 108, 471, 434, 137, 642, 172, 51, 113, 67, 172, 93, 23, 318, 514, 50, 118, 245, 169, 14, 64, 40, 859, 95, 308, 65, 93, 42, 339, 46, 7, 96, 142, 36, 131, 60, 13, 12, 25, 31, 183, 94, 43, 241, 162, 26, 232, 120, 128, 118, 89, 164, 51, 29, 127, 177, 180, 95, 332, 284, 32, 802, 452, 25, 382, 187, 892, 432, 162, 126, 587, 342, 205, 170, 255, 73, 605, 579, 398, 305, 58, 110, 178, 244, 306, 178, 166, 28, 368, 224, 582, 135, 420, 618, 264, 234, 346, 223, 439, 399, 150, 655, 242, 248, 750, 199, 242, 277, 112, 163, 545, 359, 487, 322, 570, 64, 402, 412, 252, 116, 147, 109, 27, 197, 204, 251, 282, 455, 118, 390, 225, 382, 215, 373, 554, 371, 568, 289, 225, 405, 160, 414, 290, 109, 524, 406, 344, 188, 385, 33, 791, 261, 171, 475, 100, 183, 156, 564, 78, 395, 144, 497, 334, 45, 167, 79, 27, 520, 239, 449, 138, 347, 667, 572, 61, 278, 136, 375, 231, 320, 167, 304, 389, 185, 171, 109, 468, 243, 206, 210, 305, 160, 682, 514, 433, 152, 375, 1064, 48, 522, 139, 98, 191, 557, 127, 189, 372, 54, 515, 406, 370, 950, 549, 352, 319, 27, 489, 440, 636, 941, 153, 102, 268, 120, 190, 719, 451, 175, 539, 477, 279, 474, 17, 232, 221, 476, 174, 415, 545, 357, 368, 149, 94, 409, 218, 76, 87, 136, 114, 245, 596, 408, 335, 246, 511, 560, 438, 298, 351, 91, 22, 813, 108, 546, 248, 218, 629, 212, 223, 569, 611, 93, 399, 185, 427, 260, 20, 111, 354, 187, 150, 702, 316, 666, 541, 227, 558, 486, 207, 450, 224, 568, 222, 341, 81, 222, 386, 441, 484, 159, 289, 142, 372, 534, 157, 78, 337, 522, 70, 293, 318, 161, 325, 74, 194, 797, 130, 128, 70, 386, 657, 611, 105, 456, 230, 100, 61, 274, 358, 135, 249, 236, 247, 264, 279, 123, 345, 59, 397, 645, 448, 80, 192, 149, 190, 564, 292, 508, 359, 202, 152, 459, 200, 446, 293, 512, 103, 154, 229, 492, 145, 256, 828, 55, 296, 133, 147, 314, 220, 190, 481, 208, 290, 198, 146, 100, 202, 259, 295, 16, 505, 251, 86, 375, 618, 266, 891, 166, 159, 269, 850, 127, 397, 759, 494, 141, 567, 339, 119, 336, 162, 98, 265, 770, 423, 380, 346, 116, 402, 101, 628, 623, 286, 309, 107, 453, 406, 496, 200, 865, 720, 429, 187, 107, 609, 439, 90, 48, 330, 59, 87, 632, 323, 219, 101, 865, 203, 14, 74, 466, 462, 160, 448, 168, 474, 980, 396, 148, 244, 904, 438, 198, 982, 601, 199, 119, 300, 240, 702, 241, 258, 192, 291, 227, 34, 698, 78, 107, 123, 89, 704, 114, 274, 461, 151, 115, 576, 323, 201, 468, 271, 231, 92, 592, 220, 909, 829, 243, 480, 466, 345, 763, 404, 356, 86, 110, 210, 688, 353, 271, 740, 226, 352, 247, 288, 758, 338, 426, 235, 405, 625, 155, 146, 475, 491, 189, 177, 216, 962, 503, 216, 726, 381, 219, 183, 102, 332, 113, 155, 440, 922, 450, 379, 294, 301, 36, 80, 75, 875, 462, 547, 69, 330, 186, 527, 92, 138, 157, 169, 69, 143, 401, 24, 283, 41, 37, 472, 309, 117, 747, 342, 251, 300, 182, 216, 202, 266, 192, 217, 302, 660, 360, 663, 130, 355, 367, 47, 1103, 519, 811, 586, 488, 983, 652, 303, 201, 759, 860, 416, 585, 268, 428, 928, 819, 821, 379, 340, 493, 260, 752, 599, 314, 182, 444, 612, 369, 692, 311, 523, 622, 335, 259, 499, 225, 526, 409, 188, 709, 356, 606, 777, 222, 541, 327, 201, 176, 551, 544, 1008, 372, 628, 181, 523, 549, 476, 464, 240, 593, 181, 254, 223, 305, 285, 595, 217, 887, 550, 552, 278, 381, 621, 517, 953, 538, 265, 581, 313, 540, 366, 626, 647, 511, 467, 508, 890, 63, 976, 275, 312, 885, 598, 254, 180, 687, 196, 398, 146, 675, 380, 101, 443, 122, 85, 531, 347, 463, 167, 536, 724, 710, 288, 351, 232, 387, 424, 650, 363, 544, 540, 248, 279, 121, 479, 267, 218, 445, 485, 240, 737, 692, 1017, 331, 716, 1130, 207, 602, 274, 750, 261, 572, 131, 435, 672, 253, 729, 542, 739, 1062, 731, 619, 328, 65, 769, 502, 898, 966, 158, 211, 289, 193, 314, 784, 533, 396, 567, 497, 280, 696, 348, 290, 383, 636, 526, 470, 622, 541, 411, 286, 378, 561, 374, 194, 349, 166, 143, 390, 697, 533, 570, 304, 615, 709, 476, 679, 454, 287, 114, 904, 535, 786, 270, 308, 828, 302, 506, 732, 626, 533, 584, 186, 456, 495, 350, 317, 672, 343, 315, 919, 367, 820, 548, 296, 614, 635, 209, 543, 350, 733, 239, 376, 287, 344, 470, 563, 607, 319, 323, 473, 428, 677, 212, 263, 386, 567, 435, 328, 616, 255, 729, 147, 320, 855, 267, 426, 261, 458, 977, 670, 173, 478, 366, 112, 71, 419, 968, 139, 606, 292, 275, 463, 344, 671, 810, 77, 465, 755, 579, 179, 353, 357, 442, 599, 354, 805, 453, 407, 193, 510, 285, 513, 583, 645, 325, 173, 621, 573, 423, 479, 912, 130, 300, 227, 184, 391, 293, 204, 673, 282, 371, 324, 313, 228, 334, 343, 655, 42, 532, 559, 658, 484, 921, 373, 944, 329, 184, 302, 861, 205, 414, 771, 606, 312, 652, 503, 413, 415, 238, 449, 781, 874, 586, 544, 402, 468, 525, 155, 845, 714, 295, 564, 197, 509, 863, 640, 209, 986, 808, 691, 317, 355, 789, 779, 281, 141, 594, 336, 105, 682, 360, 299, 559, 876, 608, 315, 401, 632, 480, 161, 577, 284, 657, 1012, 481, 330, 388, 1011, 524, 423, 1019, 812, 416, 168, 322, 258, 710, 703, 1027, 195, 447, 259, 633, 990, 710, 215, 410, 458, 760, 174, 312, 605, 269, 206, 617, 534, 554, 497, 296, 393, 236, 784, 483, 1189, 892, 602, 788, 709, 382, 831, 537, 695, 99, 563, 424, 759, 432, 281, 795, 319, 422, 684, 331, 866, 377, 638, 247, 501, 711, 463, 475, 631, 507, 310, 298, 252, 1059, 757, 364, 785, 410, 233, 411, 236, 487, 339, 341, 473, 1022, 527, 515, 700, 380, 388, 414, 253, 913, 466, 773, 238, 638, 335, 896, 298, 310, 658, 461, 207, 205, 550, 29, 425, 141, 76, 649, 442, 322, 832, 730, 307, 385, 401, 268, 301, 311, 306, 291, 364, 864, 560, 840, 199, 358, 385, 179, 1142, 520, 986, 600, 712, 1018, 661, 365, 237, 769, 953, 517, 605, 396, 459, 991, 867, 899, 415, 700, 556, 324, 788, 639, 778, 226, 743, 685, 706, 883, 362, 970, 785, 387, 376, 734, 392, 730, 448, 250, 731, 387, 665, 1015, 243, 812, 391, 795, 346, 588, 737, 1077, 874, 933, 412, 817, 585, 550, 491, 273, 640, 208, 542, 338, 436, 895, 694, 257, 899, 583, 629, 327, 815, 744, 573, 1226, 727, 272, 607, 331, 1050, 594, 754, 716, 515, 524, 695, 1086, 297, 1177, 400, 678, 1004, 648, 294, 555, 780, 316, 486, 689, 679, 430, 136, 717, 233, 400, 646, 383, 530, 263, 574, 749, 790, 336, 377, 409, 609, 499, 686, 518, 595, 601, 334, 531, 197, 485, 348, 424, 701, 579, 500, 1147, 797, 1085, 404, 738, 1200, 253, 714, 427, 756, 303, 610, 313, 1399, 770, 455, 732, 796, 824, 1230, 927, 929, 397, 276, 794, 741, 957, 1052, 1002, 213, 392, 566, 461, 832, 798, 433, 590, 723, 718, 755, 878, 446, 615, 669, 776, 608, 659, 565, 443, 457, 407, 577, 631, 255, 365, 399, 152, 766, 814, 556, 640, 1137, 1000, 767, 745, 733, 1194, 529, 238, 1034, 789, 1314, 436, 493, 853, 492, 654, 809, 885, 636, 596, 270, 848, 774, 364, 512, 832, 411, 516, 927, 700, 857, 588, 703, 756, 758, 315, 574, 810, 885, 416, 600, 690, 417, 501, 626, 707, 581, 377, 916, 660, 808, 587, 265, 395, 613, 906, 381, 661, 310, 799, 148, 632, 941, 750, 578, 277, 1065, 1242, 1018, 326, 551, 459, 134, 99, 510, 1097, 198, 673, 531, 450, 697, 394, 749, 948, 193, 664, 965, 818, 454, 419, 556, 721, 742, 473, 886, 647, 694, 209, 906, 433, 674, 620, 666, 464, 446, 634, 728, 430, 630, 990, 435, 371, 534, 394, 467, 928, 326, 723, 490, 816, 699, 490, 530, 384, 361, 772, 374, 554, 619, 672, 613, 924, 677, 1079, 404, 367, 337, 898, 228, 418, 844, 766, 317, 680, 690, 566, 680, 333, 726, 960, 942, 637, 607, 452, 664, 698, 235, 942, 736, 368, 584, 362, 650, 871, 683, 328, 1141, 988, 715, 915, 495, 1084, 919, 613, 179, 888, 355, 144, 1243, 655, 551, 582, 993, 730, 340, 548, 774, 643, 469, 651, 392, 843, 1196, 590, 573, 545, 1211, 593, 439, 1027, 869, 586, 442, 762, 502, 758, 822, 1048, 254, 628, 417, 683, 996, 752, 384, 725, 676, 842, 360, 374, 688, 353, 549, 661, 648, 584, 624, 348, 530, 250, 1135, 667, 1298, 1033, 623, 1102, 715, 594, 888, 871, 833, 321, 634, 491, 766, 505, 297, 1024, 388, 460, 707, 735, 1023, 444, 1098, 629, 505, 807, 581, 543, 687, 598, 337, 434, 806, 1111, 761, 521, 826, 547, 257, 434, 412, 688, 577, 363, 839, 1187, 1306, 648, 808, 504, 760, 429, 309, 916, 503, 777, 403, 1076, 512, 1127, 592, 351, 692, 711, 474, 587, 558, 487, 498, 326, 164, 902, 456, 471, 836, 748, 469, 480, 537, 553, 507, 347, 490, 498, 420, 1010, 598, 1022, 283, 362, 958, 553, 1156, 712, 1108, 718, 753, 1067, 681, 398, 483, 903, 956, 698, 612, 578, 489, 1294, 990, 920, 592, 1113, 862, 464, 1435, 835, 788, 280, 957, 795, 743, 1108, 425, 1026, 879, 488, 701, 931, 610, 741, 1061, 282, 830, 413, 983, 1159, 1067, 1071, 437, 843, 506, 610, 890, 1133, 1034, 954, 452, 925, 785, 836, 620, 597, 722, 258, 858, 342, 455, 927, 706, 299, 1104, 660, 811, 333, 1173, 878, 858, 1336, 816, 457, 948, 563, 1054, 678, 764, 733, 565, 555, 873, 1150, 485, 1303, 496, 796, 1218, 823, 634, 624, 878, 686, 684, 879, 1100, 454, 154, 1002, 357, 822, 676, 740, 578, 350, 1124, 834, 876, 500, 486, 426, 663, 529, 947, 656, 621, 823, 361, 615, 421, 585, 417, 538, 707, 656, 861, 1236, 831, 1087, 508, 768, 1269, 292, 786, 478, 1043, 593, 765, 408, 1439, 806, 528, 801, 912, 882, 1348, 1050, 1077, 528, 349, 996, 799, 976, 1265, 1100, 674, 470, 617, 540, 847, 862, 457, 757, 841, 973, 921, 969, 539, 646, 699, 959, 654, 670, 787, 872, 559, 744, 1276, 666, 273, 569, 833, 191, 775, 896, 576, 935, 1231, 1046, 923, 804, 949, 1201, 572, 303, 1162, 827, 1346, 897, 612, 937, 599, 675, 992, 930, 644, 1151, 301, 1103, 1086, 482, 831, 1130, 472, 753, 1007, 852, 1054, 635, 705, 955, 823, 425, 596, 962, 908, 445, 880, 867, 478, 509, 653, 775, 591, 510, 1055, 798, 1021, 740, 294, 427, 679, 973, 484, 686, 369, 836, 410, 802, 1245, 883, 649, 431, 1102, 1267, 1262, 557, 1092, 837, 164, 881, 726, 1120, 273, 697, 1097, 609, 708, 663, 838, 985, 552, 968, 1042, 1044, 483, 520, 691, 736, 756, 521, 895, 779, 914, 266, 1356, 548, 742, 964, 888, 481, 877, 685, 791, 437, 696, 991, 825, 643, 708, 969, 683, 1080, 1001, 1012, 617, 1030, 734, 792, 1069, 504, 394, 864, 595, 676, 782, 695, 837, 1154, 819, 1104, 437, 413, 383, 913, 627, 624, 987, 1394, 449, 839, 825, 1054, 1180, 378, 1211, 1090, 1114, 804, 897, 558, 1032, 746, 246, 1051, 870, 958, 725, 536, 702, 1035, 971, 356, 1195, 1061, 827, 1090, 526, 1092, 1250, 1025, 231, 947, 659, 272, 1284, 802, 826, 902, 1040, 870, 345, 658, 822, 715, 1012, 872, 575, 945, 1232, 805, 720, 580, 1215, 854, 603, 1074, 1056, 991, 528, 1218, 642, 1060, 1010, 1203, 288, 978, 884, 762, 1118, 763, 430, 786, 922, 928, 886, 529, 706, 403, 1104, 693, 868, 815, 670, 366, 546, 378, 1151, 901, 1522, 1107, 671, 1333, 745, 724, 1230, 1073, 911, 429, 646, 611, 889, 746, 403, 1032, 616, 637, 1382, 767, 1083, 451, 1212, 803, 1318, 849, 662, 955, 712, 971, 571, 496, 977, 1145, 1160, 931, 830, 580, 359, 805, 668, 770, 771, 390, 882, 1329, 1572, 851, 829, 535, 944, 535, 373, 930, 669, 828, 565, 1219, 620, 1308, 793, 361, 938, 859, 482, 946, 1186, 742, 591, 846, 221, 906, 641, 631, 1068, 780, 536, 517, 844, 652, 721, 552, 523, 627, 525, 1186, 944, 1039, 794, 498, 1076, 654, 1167, 856, 1264, 890, 768, 1225, 691, 729, 543, 936, 1016, 1210, 656, 604, 608, 1324, 1035, 1095, 639, 1311, 1281, 877, 1519, 923, 974, 431, 1057, 903, 809, 1137, 569, 1243, 1118, 880, 720, 1102, 1168, 821, 1193, 432, 999, 555, 1013, 1375, 1200, 1080, 495, 982, 519, 630, 1066, 1164, 1091, 1006, 1039, 943, 1195, 1103, 665, 894, 908, 329, 1081, 951, 641, 1060, 793, 719, 1232, 713, 847, 395, 1213, 1038, 1041, 1587, 984, 752, 1125, 929, 1095, 988, 940, 845, 603, 623, 875, 1158, 772, 1503, 506, 816, 1500, 1007, 638, 633, 936, 703, 704, 1173, 1171, 724, 175, 1051, 604, 1174, 682, 819, 854, 384, 1196, 1249, 1029, 509, 504, 537, 722, 571, 1121, 739, 838, 1027, 363, 743, 570, 818, 546, 721, 736, 842, 905, 1372, 932, 1178, 863, 840, 1334, 299, 855, 499, 1293, 1202, 1061, 689, 1516, 866, 614, 862, 955, 981, 1511, 1153, 1256, 768, 501, 1044, 1282, 985, 1455, 1235, 711, 1001, 627, 641, 889, 914, 644, 877, 913, 1149, 1138, 1188, 557, 871, 787, 1015, 727, 731, 868, 892, 560, 778, 1331, 1025, 318, 619, 864, 203, 911, 1052, 705, 1079, 1461, 1090, 994, 1023, 1050, 1535, 625, 999, 1344, 933, 1498, 1045, 939, 1249, 650, 910, 1294, 951, 649, 1163, 418, 1133, 1089, 493, 1116, 1309, 561, 857, 1073, 1112, 1223, 909, 807, 989, 1053, 997, 813, 976, 1074, 527, 1070, 966, 775, 511, 1004, 800, 717, 933, 1120, 900, 1389, 922, 684, 440, 704, 1106, 668, 767, 757, 847, 936, 835, 1293, 893, 895, 647, 1269, 1480, 1304, 782, 1166, 952, 566, 1124, 846, 1203, 354, 893, 1200, 952, 792, 667, 1164, 1003, 718, 1002, 1139, 1163, 1096, 685, 769, 1003, 977, 532, 1128, 905, 926, 443, 1405, 576, 835, 1116, 1145, 562, 1063, 737, 883, 639, 790, 1021, 967, 772, 995, 1165, 754, 1422, 1583, 1075, 997, 1082, 748, 827, 1197, 516, 465, 1451, 645, 879, 809, 739, 855, 1155, 948, 1117, 460, 465, 791, 1098, 693, 673, 1087, 1400, 532, 910, 829, 1171, 1214, 400, 1221, 1603, 1323, 834, 965, 787, 1045, 918, 589, 1074, 1171, 1116, 744, 905, 931, 1176, 1005, 589, 1238, 1107, 972, 1115, 600, 1181, 1609, 1105, 521, 1158, 1049, 306, 1389, 804, 963, 971, 1199, 917, 716, 668, 973, 998, 1174, 903, 590, 1130, 1472, 841, 811, 597, 1399, 956, 719, 1301, 1083, 1044, 622, 1446, 1097, 1206, 1119, 1345, 604, 1324, 920, 1129, 1340, 798, 444, 980, 997, 1232, 1087, 884, 1093, 422, 1135, 909, 1026, 1055, 824, 462, 678, 945, 1234, 1149, 1542, 1177, 675, 1421, 779, 1013, 1486, 1388, 1191, 514, 1219, 760, 974, 773, 477, 1190, 784, 674, 1428, 778, 1257, 477, 1252, 901, 1352, 1037, 1224, 970, 813, 1009, 1162, 519, 1088, 1157, 1409, 1182, 1089, 755, 438, 1076, 725, 869, 900, 436, 1148, 1421, 1588, 956, 978, 749, 950, 932, 516, 1046, 814, 865, 588, 1303, 713, 1614, 1024, 421, 959, 897, 518, 987, 1275, 765, 887, 893, 333, 925, 732, 635, 1169, 910, 1434, 575, 959, 653, 850, 728, 583, 1093, 542, 1316, 1031, 1059, 1122, 642, 1121, 891, 1209, 925, 1299, 896, 932, 1288, 934, 984, 580, 1113, 1413, 1224, 964, 643, 773, 1337, 1663, 1341, 657, 1357, 1473, 1292, 1551, 970, 1209, 792, 1339, 1141, 1140, 1320, 616, 1383, 1126, 980, 1014, 1146, 1245, 859, 1298, 513, 1182, 662, 1014, 1562, 1297, 1151, 502, 1139, 874, 1259, 1645, 1169, 1242, 1072, 1412, 1115, 1275, 1466, 1239, 1038, 1184, 458, 1094, 1440, 810, 1352, 1339, 830, 1354, 801, 848, 671, 1300, 1147, 1047, 1625, 1117, 1046, 1327, 1047, 1237, 1101, 1018, 1016, 745, 1066, 1132, 1221, 841, 1512, 522, 853, 1535, 1248, 975, 694, 1143, 824, 1009, 1185, 1288, 908, 200, 1308, 904, 1665, 687, 843, 943, 1199, 1198, 1379, 1168, 571, 789, 630, 846, 602, 1342, 1350, 995, 1114, 408, 1043, 1304, 945, 751, 793, 741, 1072, 1006, 1401, 1331, 1296, 1152, 856, 1337, 321, 881, 937, 1318, 1535, 1560, 806, 1696, 924, 625, 994, 1058, 996, 1649, 1183, 1442, 1118, 901, 1094, 1408, 1016, 1653, 1259, 800, 1317, 677, 815, 894, 1017, 1278, 957, 1109, 1284, 1321, 1220, 947, 1383, 860, 1220, 783, 873, 979, 1025, 1228, 1007, 1417, 1231, 735, 783, 872, 492, 1028, 1244, 852, 1144, 1645, 1172, 1088, 1110, 1204, 1622, 738, 1146, 1513, 1106, 1564, 1079, 1021, 1436, 776, 917, 1467, 1051, 814, 1217, 812, 1174, 1271, 863, 1187, 1461, 644, 1308, 1154, 1263, 1225, 1121, 867, 1110, 1157, 1139, 989, 1033, 1270, 1163, 1170, 1037, 880, 803, 1098, 807, 968, 1446, 1235, 1064, 1547, 979, 842, 500, 838, 1398, 939, 916, 953, 920, 946, 851, 1428, 1210, 960, 762, 1456, 1519, 1384, 898, 1361, 995, 1100, 1508, 856, 1284, 553, 1330, 1249, 1258, 1020, 764, 1165, 1179, 1047, 1056, 1285, 1266, 1286, 853, 1397, 1515, 987, 547, 1296, 1215, 965, 489, 1444, 800, 849, 1300, 1242, 662, 1085, 818, 918, 748, 954, 1024, 1022, 954, 1109, 1218, 821, 1431, 1587, 1315, 1081, 1140, 754, 943, 1371, 1003, 840, 1475, 722, 1081, 1033, 1216, 1254, 1175, 1122, 1203, 728, 488, 1189, 1377, 1136, 907, 1267, 1416, 751, 1169, 1101, 1289, 1241, 597, 1322, 1625, 1332, 961, 985, 915, 1128, 1069, 764, 1175, 1177, 1156, 889, 1075, 1088, 1251, 1031, 738, 1523, 1229, 994, 1489, 637, 1185, 1651, 1112, 680, 1608, 1197, 513, 1538, 978, 1040, 1000, 1432, 1030, 887, 833, 1057, 1094, 1565, 1190, 696, 1178, 1556, 1045, 1307, 1294, 1436, 1096, 747, 1485, 1128, 1430, 664, 1653, 1180, 1597, 1167, 1452, 776, 1341, 1305, 1142, 1418, 849, 562, 1247, 998, 1391, 1161, 941, 1387, 912, 1149, 1078, 1029, 1141, 1197, 582, 701, 961, 1423, 1195, 1674, 1205, 964, 1633, 929, 1127, 1571, 1581, 1291, 681, 1272, 781, 981, 783, 765, 1295, 974, 1015, 1516, 873, 1324, 482, 1262, 1371, 1648, 1101, 1240, 1115, 837, 1048, 1301, 763, 1260, 1229, 1426, 1316, 1208, 963, 1083, 1125, 992, 882, 1034, 467, 1176, 1429, 1610, 1452, 1376, 753, 1184, 1239, 777, 1291, 1264, 1223, 659, 1378, 797, 1632, 1071, 575, 1099, 926, 801, 1042, 1322, 1111, 1234, 1112, 979, 962, 993, 713, 1271, 1008, 1533, 653, 999, 746, 876, 751, 1123, 1319, 693, 1354, 1209, 1207, 1159, 1250, 1192, 1385, 1350, 952, 1543, 1020, 1067, 1632, 1119, 1635, 1165, 1161, 1483, 1347, 983, 669, 796, 1412, 1684, 1374, 886, 1468, 1479, 1594, 1781, 1113, 1274, 969, 1343, 1403, 1261, 1440, 681, 1424, 1216, 1207, 1210, 1172, 1325, 935, 1414, 1123, 1287, 1158, 1032, 1589, 1554, 1326, 562, 1313, 949, 1296, 1760, 1260, 1552, 1129, 1422, 1258, 1542, 1525, 1253, 1089, 1255, 1131, 1220, 1652, 869, 1410, 1351, 1266, 1518, 868, 884, 1302, 1486, 1362, 1185, 1652, 1172, 1205, 1388, 1479, 1270, 1224, 1297, 1138, 817, 1170, 1214, 1240, 1153, 1551, 817, 915, 1553, 1319, 1496, 717, 1194, 850, 1091, 1256, 1541, 1039, 561, 1358, 938, 1707, 1557, 1368, 1160, 1342, 1404, 1515, 1435, 727, 790, 1396, 854, 891, 1783, 1365, 1271, 1183, 1400, 1205, 1367, 1068, 794, 1006, 803, 1485, 1164, 1422, 1502, 1334, 1359, 1215, 1698, 1042, 1204, 1028, 1458, 1550, 1600, 1111, 1700, 1132, 992, 1134, 1430, 1049, 1731, 1323, 1555, 1228, 1456, 1099, 1545, 1091, 1685, 1445, 857, 1612, 735, 1126, 946, 1168, 1399, 1222, 1192, 1373, 1575, 1317, 1073, 1506, 1143, 1440, 1438, 1263, 1105, 1327, 1256, 1126, 1619, 1265, 924, 961, 1023, 866, 1070, 1437, 1132, 1487, 1675, 1333, 1423, 1182, 1295, 1683, 939, 1154, 1617, 1212, 1665, 1414, 1107, 1534, 1282, 1402, 1485, 1096, 1059, 1495, 981, 1235, 1381, 1017, 1240, 1534, 875, 1561, 1279, 1354, 1353, 1396, 1243, 1547, 1356, 1166, 1181, 1343, 1285, 1247, 1255, 1357, 975, 919, 1318, 988, 1477, 1521, 1358, 1206, 1549, 1146, 1117, 1305, 1019, 1406, 982, 942, 1014, 1075, 1004, 860, 1512, 1241, 1053, 858, 1620, 1527, 1415, 1251, 1497, 1108, 1166, 1667, 967, 1434, 665, 1335, 1313, 1406, 1283, 902, 1362, 1358, 1501, 1222, 1427, 1280, 1309, 984, 1647, 1573, 1449, 618, 1328, 1310, 1120, 844, 1739, 1424, 1246, 1474, 1561, 699, 1277, 826, 1386, 1257, 1227, 1056, 1189, 975, 1125, 1329, 917, 1464, 1784, 1405, 1152, 1153, 935, 1092, 1464, 1040, 907, 1592, 1428, 1136, 1063, 1420, 1390, 1251, 1217, 1268, 1143, 708, 1603, 1407, 1160, 1207, 1340, 1488, 998, 1315, 1344, 1300, 1365, 1134, 1401, 1629, 1366, 1008, 1013, 1211, 1179, 1188, 825, 1262, 1393, 1469, 1173, 1077, 1248, 1417, 1095, 907, 1654, 1320, 1065, 1598, 799, 1601, 1656, 1190, 714, 1754, 1595, 651, 1647, 1063, 1397, 1157, 1481, 1237, 1060, 1482, 1287, 1192, 1618, 1394, 1259, 1558, 1635, 1162, 1377, 1803, 1492, 1476, 774, 1626, 1420, 1504, 689, 1687, 1372, 1616, 1199, 1471, 934, 1342, 1351, 1261, 1442, 923, 723, 1361, 1084, 1450, 1233, 1011, 1389, 1338, 1186, 1340, 1110, 1327, 1225, 690, 1483, 1064, 1443, 1258, 1697, 1213, 966, 1687, 1161, 1314, 1605, 1877, 1477, 747, 1280, 1028, 1138, 820, 782, 1560, 1038, 1592, 1517, 894, 1586, 568, 1276, 1379, 1753, 1230, 1749, 1122, 1458, 1080, 1526, 1411, 1309, 1332, 1430, 1381, 1255, 1648, 1248, 1267, 1459, 914, 1085, 1184, 1180, 1459, 1629, 1463, 1378, 845, 1343, 1415, 1037, 1292, 1336, 1431, 734, 1426, 1193, 1688, 1279, 940, 1313, 1036, 1155, 1099, 1406, 1490, 1326, 1556, 1069, 1005, 1142, 1010, 1273, 1312, 1546, 761, 1624, 1065, 921, 1055, 1134, 1518, 839, 1435, 1234, 1244, 1238, 1297, 1254, 1494, 1484, 1145, 1604, 1404, 1289, 1645, 1131, 1658, 1198, 1392, 1557, 1667, 1082, 972, 918, 1432, 1701, 1637, 1312, 1579, 1680, 1864, 1825, 1194, 1457, 1370, 1411, 1479, 1398, 1510, 1049, 1447, 1576, 1252, 1290, 1360, 1679, 1070, 1506, 1699, 1359, 1204, 1222, 1818, 1596, 1363, 834, 1383, 1513, 1499, 1766, 1646, 1629, 1328, 1423, 1460, 1640, 1923, 1302, 1216, 1364, 1369, 1233, 1739, 1031, 1624, 1505, 1434, 1630, 1451, 1196, 1548, 1527, 1454, 1520, 1707, 1407, 1467, 1561, 1604, 1319, 1543, 1456, 1374, 881, 1453, 1323, 1735, 1246, 1660, 1381, 1188, 1709, 1391, 1532, 771, 1264, 851, 1219, 1322, 1639, 1144, 960, 1615, 1136, 1732, 1690, 1371, 1433, 1377, 1459, 1571, 1447, 1058, 1245, 1451, 1053, 949, 1894, 1531, 1305, 1253, 1493, 1303, 1380, 1581, 1330, 1082, 1036, 1541, 1520, 1437, 1585, 1359, 1425, 1410, 1857, 1465, 1239, 1208, 1585, 1642, 1807, 1743, 1710, 1167, 1135, 1465, 1513, 1175, 1759, 1524, 1655, 1348, 1471, 1150, 1581, 1917, 1694, 1545, 911, 1622, 852, 1348, 1191, 1261, 1410, 1491, 1237, 1401, 1822, 1325, 1457, 1668, 1236, 1449, 1698, 1270, 1392, 1418, 1486, 1133, 1797, 1503, 1041, 1198, 1392, 1041, 1632, 1621, 1311, 1638, 1832, 1364, 1452, 1499, 1472, 1913, 1295, 1208, 1766, 1369, 1780, 1541, 1462, 1545, 1336, 1569, 1693, 1385, 1276, 1547, 1266, 1338, 1505, 1029, 1493, 1670, 958, 1572, 1607, 1446, 1634, 1530, 1414, 1704, 1552, 1441, 1653, 1480, 1310, 1712, 1347, 1403, 1408, 951, 1360, 1213, 1562, 1710, 1419, 1528, 1589, 1443, 1345, 1636, 1071, 1637, 1026, 1644, 1030, 1638, 1221, 1119, 1570, 1712, 1253, 989, 1742, 1790, 1537, 1619, 1508, 1150, 1326, 1926, 1470, 1702, 940, 1733, 1362, 1429, 1299, 938, 1606, 1453, 1568, 1335, 1738, 1564, 1312, 1275, 1718, 1575, 1528, 937, 1491, 1415, 1179, 900, 1843, 1471, 1345, 1536, 1573, 930, 1301, 1020, 1482, 1412, 1274, 1105, 1347, 1344, 1764, 1729, 1062, 1563, 1843, 1532, 1228, 1302, 1273, 1397, 1591, 1391, 1052, 1662, 1470, 1181, 1425, 1427, 1578, 1263, 1395, 1292, 1317, 899, 1808, 1539, 1650, 1231, 1376, 1515, 1001, 1330, 1603, 1331, 1419, 1369, 1444, 1709, 1374, 1068, 1019, 1306, 1298, 1293, 1011, 1831, 1502, 1590, 1238, 1148, 1269, 1555, 1114, 1036, 1740, 1325, 1405, 1670, 1062, 1773, 1688, 1335, 1476, 1827, 1723, 820, 1748, 1072, 1536, 1398, 1732, 1587, 1400, 1529, 1355, 1304, 1651, 1722, 1268, 1673, 1800, 1178, 1503, 1847, 1656, 1497, 1595, 1689, 1576, 1740, 963, 1822, 1393, 1743, 1246, 1499, 1106, 1356, 1387, 1367, 1745, 1009, 780, 1458, 1206, 1673, 1250, 1662, 1611, 1555, 1193, 1353, 1597, 1559, 1445, 1187, 1677, 1155, 1464, 1497, 1713, 1357, 1450, 1696, 1257, 1339, 1685, 1894, 1615, 1733, 1315, 1364, 1363, 1418, 1123, 1738, 1445, 1620, 1660, 1156, 1599, 926, 1507, 1640, 1763, 1289, 1791, 1648, 1601, 1321, 1544, 1577, 1683, 1376, 1543, 1540, 1361, 1666, 1273, 1433, 1504, 993, 1265, 1288, 1454, 1482, 1736, 1481, 1439, 1286, 1467, 1461, 1474, 1510, 1489, 1681, 934, 1643, 1606, 1791, 1491, 1341, 1429, 1127, 1227, 1299, 1600, 1904, 1395, 1588, 1084, 1057, 1183, 1252, 1283, 1478, 1611, 1320, 1851, 1355, 1223, 1147, 1403, 1576, 1035, 1460, 1260, 1641, 1538, 1368, 1475, 1511, 1672, 1329, 1764, 1426, 1353, 1691, 1214, 1915, 1247, 1538, 1658, 1716, 1689, 1000, 986, 1884, 1975, 1730, 1899, 1623, 1834, 1981, 1952, 1473, 1490, 1529, 1557, 1748, 1544, 1617, 1720, 1690, 1667, 1630, 1641, 1678, 1750, 1367, 1525, 1786, 1447, 1395, 1390, 1826, 1598, 1427, 861, 1582, 1658, 1878, 1768, 1651, 1699, 1532, 1498, 1529, 1765, 1939, 1384, 1723, 1872, 1758, 1438, 1742, 1093, 1657, 1759, 1650, 1634, 1519, 1290, 1569, 1573, 1591, 1643, 1928, 1411, 1786, 1582, 1661, 1521, 1657, 1609, 1633, 972, 1468, 1644, 1776, 1388, 1692, 1409, 1278, 1812, 1631, 1873, 1310, 1272, 1109, 1333, 1522, 1722, 1612, 1048, 1741, 1674, 1755, 1711, 1568, 1437, 1484, 1567, 1746, 1583, 1148, 1307, 1570, 1314, 950, 1906, 1654, 1379, 1494, 1518, 1455, 1393, 1703, 1390, 1606, 1226, 1669, 1580, 1692, 1719, 1366, 1438, 1433, 1982, 1514, 1676, 1609, 1742, 1690, 1819, 1763, 1730, 1321, 1566, 2031, 1680, 1741, 1839, 1762, 1925, 1536, 1524, 1283, 1723, 1924, 1706, 1558, 1375, 1758, 1417, 1691, 1350, 1727, 1475, 1537, 1457, 1506, 1917, 1386, 1695, 1753, 1355, 1756, 1775, 1613, 1563, 1425, 1488, 1176, 1827, 1556, 1131, 1349, 1448, 1281, 1749, 1664, 1572, 1744, 1860, 1813, 1762, 1642, 1689, 1928, 1570, 1878, 1890, 1739, 1809, 1799, 1663, 1591, 1495, 1695, 1762, 1580, 1306, 1879, 1462, 1413, 1637, 1078, 1567, 1785, 1078, 1659, 1801, 1530, 1769, 1579, 1549, 1747, 1682, 1796, 1668, 1727, 1822, 1836, 1378, 1551, 1501, 1810, 1478, 1278, 1574, 1764, 1533, 1627, 1714, 1489, 1480, 1726, 1584, 1643, 1387, 1655, 1058, 1720, 1370, 1595, 1795, 1832, 1843, 1212, 1871, 1840, 1886, 1831, 1720, 1272, 1765, 1956, 1496, 1855, 1144, 1830, 1404, 1593, 1507, 967, 1768, 1671, 1842, 1469, 1829, 1593, 1621, 1516, 1763, 1612, 1982, 1124, 1613, 1715, 1375, 1311, 1844, 1509, 1448, 1542, 1660, 1005, 1490, 1408, 1620, 1707, 1277, 1568, 1373, 1887, 1827, 1778, 1510, 1782, 1886, 1537, 1424, 1402, 1282, 1496, 1681, 1649, 1286, 1858, 1566, 1622, 1972, 1562, 1868, 1316, 1754, 1725, 1559, 1086, 1873, 1594, 1792, 1351, 1579, 1889, 1043, 1380, 1789, 1588, 1481, 1487, 1650, 1717, 1602, 1413, 1226, 1370, 1368, 1346, 1493, 1902, 1554, 1713, 1564, 1244, 1432, 1597, 1328, 1285, 1828, 1484, 1466, 1719, 1550, 1909, 1854, 1582, 1596, 1903, 1751, 1530, 1905, 1227, 1771, 1605, 1807, 1777, 1738, 1592, 1460, 1507, 1708, 1745, 1385, 1686, 1869, 1277, 1517, 1867, 1776, 1846, 1809, 1803, 1674, 1748, 1191, 1837, 1420, 1754, 1274, 1644, 1201, 1366, 1450, 1402, 1757, 1140, 1500, 1465, 1509, 1793, 1352, 1804, 1702, 1560, 1431, 1549, 1679, 1769, 1615, 1229, 1740, 1775, 1534, 1498, 1757, 1416, 1567, 1711, 1360, 1472, 1705, 1923, 1782, 1746, 1767, 1575, 1531, 1628, 1772, 1868, 1771, 1628, 1719, 1287, 1623, 1900, 1709, 1703, 1840, 1382, 1841, 1808, 1860, 1788, 1652, 1687, 1810, 1488, 1661, 1867, 1476, 1785, 1646, 1468, 1611, 1159, 1492, 1291, 1463, 1716, 1778, 1669, 1448, 1539, 1633, 1511, 1523, 1672, 1821, 1718, 1349, 1875, 1659, 1835, 1558, 1520, 1670, 1639, 1540, 1885, 1779, 1972, 1531, 1874, 1627, 1202, 1639, 1553, 1540, 1539, 1646, 1439, 1856, 1444, 1279, 1241, 1952, 1701, 1280, 1616, 1332, 1692, 1664, 1373, 1781, 1733, 1995, 1571, 1777, 1593, 1578, 1869, 1233, 1916, 1504, 1849, 1704, 1729, 1896, 1953, 1449, 1899, 2007, 1744, 2003, 1875, 1935, 2016, 1993, 1527, 1788, 1734, 1726, 1823, 1636, 1619, 1734, 1755, 1829, 1773, 1799, 1700, 1947, 1938, 1647, 1789, 1550, 1396, 1590, 1964, 1951, 1634, 1066, 1856, 1717, 1988, 1791, 1664, 1977, 1544, 1715, 1563, 1801, 1988, 1725, 1815, 1921, 1897, 1442, 1831, 1217, 1752, 1866, 1861, 1659, 1706, 1724, 1678, 1714, 1724, 1958, 2036, 1487, 1978, 1657, 1997, 1800, 1895, 1708, 1811, 1678, 1705, 1962, 1927, 1699, 1694, 1625, 1501, 1844, 1686, 1958, 1614, 1307, 1129, 1407, 1683, 1835, 1800, 1152, 1793, 1879, 1820, 1747, 1598, 1922, 1553, 1768, 1811, 1838, 1290, 1953, 1781, 1610, 1626, 1936, 1751, 1665, 1584, 1823, 1816, 1758, 1932, 1454, 1793, 1436, 1817, 1675, 1697, 1927, 1655, 1546, 1677, 2003, 1666, 1735, 1811, 1808, 1813, 1834, 1850, 1821, 1565, 1975, 2045, 1816, 1809, 1951, 1862, 2048, 1911, 1686, 1441, 1878, 1976, 1865, 1906, 1608, 1871, 1469, 1803, 1932, 1798, 1862, 1881, 1577, 1802, 1979, 1455, 1977, 1820, 1495, 1816, 1907, 1784, 1774, 1789, 1743, 1533, 1830, 1684, 1201, 1548, 1566, 1334, 1776, 1724, 1752, 1880, 1908, 1863, 1898, 1925, 1693, 2033, 1799, 1910, 1893, 1928, 1833, 1841, 1706, 1801, 1599, 1737, 1934, 1688, 2035, 1885, 1796, 1807, 1881, 1419, 1901, 1948, 1137, 1685, 1848, 1624, 1829, 1868, 1630, 1819, 1772, 1946, 1787, 1805, 1941, 1854, 1554, 1722, 1729, 1877, 1863, 1736, 1626, 1918, 1631, 1628, 1986, 1616, 1679, 1820, 1869, 1756, 1662, 1876, 1380, 1815, 1914, 1680, 1956, 1870, 1947, 1421, 1886, 1936, 1911, 1918, 1728, 1346, 1769, 2021, 1601, 1912, 1548, 1835, 1502, 1605, 1927, 1372, 1865, 1673, 1891, 1494, 1882, 1779, 1814, 1940, 1806, 1759, 2011, 1441, 1623, 1846, 1514, 1663, 2033, 1552, 1819, 1574, 1850, 1671, 1702, 1757, 1756, 1836, 1384, 1980, 1640, 2038, 2006, 1794, 1805, 1785, 1955, 1580, 1930, 1583, 1526, 1523, 1833, 1725, 1462, 1883, 1682, 1794, 1995, 1892, 1874, 1349, 1818, 1730, 1604, 1170, 1890, 1777, 1806, 1701, 1589, 1911, 1254, 1526, 1942, 1825, 1514, 1966, 1780, 1864, 1671, 1817, 1677, 1443, 1855, 1569, 1922, 1934, 1712, 1931, 1765, 1888, 1463, 1627, 1505, 1492, 1870, 1590, 1565, 1922, 1698, 1956, 1985, 2006, 1635, 1931, 1899, 1600, 1973, 1268, 1823, 1710, 1867, 1916, 1804, 1642, 1466, 1767, 1832, 1996, 1672, 1824, 1921, 1924, 1838, 1904, 1908, 1861, 1960, 1998, 1728, 1760, 1394, 1993, 1546, 1974, 1525, 1847, 1202, 1613, 1453, 1602, 1826, 1875, 1594, 1596, 1753, 1970, 1478, 2055, 1853, 1713, 1474, 1797, 1682, 1943, 1745, 1830, 1814, 1897, 1621, 1817, 1802, 1617, 1649, 1978, 1500, 1483, 1804, 2040, 1983, 1775, 1893, 1636, 1896, 1774, 1784, 1903, 1782, 1783, 1852, 1894, 1770, 1924, 2020, 1926, 1929, 1714, 2009, 1989, 1865, 1898, 1737, 1945, 1847, 1696, 1767, 1907, 1715, 1849, 1967, 1694, 1747, 1337, 1608, 1363, 1676, 1734, 1859, 1755, 1470, 1584, 1957, 1919, 1528, 1788, 1900, 1741, 1508, 1971, 1749, 1937, 1970, 1941, 1794, 1693, 1721, 1991, 1915, 1997, 1824, 1942, 1996, 1236, 1669, 1887, 1654, 1982, 1898, 1761, 1883, 1700, 1521, 1681, 2011, 1751, 1281, 1684, 1607, 1845, 1860, 1524, 1844, 1901, 1999, 1760, 1940, 1705, 1736, 1987, 1721, 2033, 2024, 1990, 2047, 1965, 2018, 2044, 1473, 1920, 2030, 1968, 2045, 2025, 1995, 2054, 2017, 1559, 1876, 1891, 1871, 2013, 1949, 1821, 1892, 1834, 1946, 1778, 1880, 1864, 2042, 2016, 2026, 1945, 2031, 1574, 1853, 1980, 2034, 2056, 2012, 1912, 1812, 2031, 1836, 1992, 2058, 1941, 1814, 2007, 2051, 2048, 2044, 1880, 1926, 2047, 1761, 1839, 1365, 1772, 1986, 1985, 1905, 2060, 1909, 1857, 1944, 1826, 2000, 2050, 2023, 2020, 1931, 2023, 2043, 2005, 1967, 1872, 1907, 1944, 1981, 1965, 1999, 1711, 1916, 1517, 1958, 1954, 2023, 1961, 2064, 1798, 1577, 1930, 1896, 1859, 1382, 1987, 2039, 2037, 1787, 1666, 1984, 1602, 1933, 2008, 2057, 1338, 1976, 2038, 1971, 1950, 1954, 1991, 1828, 1695, 1845, 1873, 1889, 2037, 1641, 1961, 1731, 1884, 1881, 1914, 1978, 1783, 1925, 1882, 2010, 2062, 1846, 1921, 2029, 2046, 1910, 2026, 1953, 1607, 2063, 2059, 2000, 1884, 2008, 2014, 2052, 2015, 1848, 1716, 2003, 2036, 2006, 1932, 1973, 1976, 1522, 2028, 2059, 1917, 1947, 2027, 1954, 1964, 2059, 2035, 1999, 1910, 1893, 1877, 1933, 1934, 2019, 1858, 1990, 2037, 1876, 1903, 1792, 1966, 2025, 1509, 1853, 1908, 1837, 2044, 1914, 1938, 1913, 2004, 1824, 2047, 1856, 1938, 2032, 2022, 1870, 1912, 1779, 2039, 2049, 1761, 1983, 1950, 2054, 2002, 1959, 1848, 1919, 1790, 1993, 1967, 1900, 1718, 1897, 2019, 2051, 2053, 1838, 1930, 1918, 2015, 2036, 1904, 1962, 1890, 1852, 1845, 2009, 2050, 2004, 2032, 1883, 2057, 2028, 2040, 2056, 1851, 1737, 1939, 1872, 1939, 1975, 1988, 1676, 1919, 1994, 2019, 1984, 1885, 2005, 1812, 2008, 2040, 1957, 2028, 1842, 2032, 2039, 2062, 1828, 1992, 1746, 1841, 1980, 1940, 1994, 1416, 1937, 1866, 1996, 1866, 1929, 2013, 1815, 2064, 1959, 2012, 2022, 1735, 1727, 1950, 1981, 1991, 2043, 1929, 1920, 1578, 1859, 1960, 1949, 1852, 1955, 1966, 2018, 2063, 1656, 2055, 2041, 1969, 2046, 1905, 2017, 1726, 1943, 1717, 2009, 1802, 2062, 1750, 1675, 1990, 1963, 1795, 2061, 1998, 2042, 1770, 2049, 1862, 1668, 2056, 2000, 1987, 2002, 1797, 1882, 1963, 1512, 1708, 1949, 1901, 1935, 1997, 1971, 2017, 2054, 1920, 1691, 1585, 2001, 2005, 1963, 2015, 1933, 2026, 1909, 1913, 1704, 1798, 1962, 1610, 2024, 1969, 1810, 1994, 1703, 2055, 2021, 2030, 2024, 1986, 1906, 1825, 2002, 1770, 1855, 1837, 2014, 2010, 1849, 1697, 1661, 1863, 1935, 2052, 1957, 2058, 1937, 2061, 2035, 2045, 1984, 1888, 1965, 2058, 1854, 2007, 1842, 2060, 1888, 1989, 1599, 2014, 1638, 2027, 1731, 2012, 1891, 1936, 1614, 1618, 1806, 2030, 1586, 2057, 1968, 1974, 1477, 1959, 1840, 1973, 1970, 1955, 1951, 1998, 1985, 1892, 1818, 1874, 1961, 2046, 1989, 1960, 2041, 2049, 2001, 1948, 2048, 1983, 1944, 1790, 2042, 2051, 1992, 1923, 2041, 1952, 1972, 1945, 2029, 1948, 1974, 1943, 2038, 2050, 1942, 1968, 1805, 1977, 2004, 1752, 1787, 1915, 1732, 2063, 2021, 1766, 1946, 1618, 1858, 2025, 1857, 1773, 1895, 1833, 1887, 1744, 1979, 2010, 1850, 2061, 2016, 1780, 1586, 2027, 1969, 2034, 1979, 2018, 1813, 1839, 1902, 2013, 2011, 2052, 1851, 2029, 2064, 1386, 1750, 1902, 1771, 2034, 2001, 1795, 2053, 1792, 1631, 1964, 2053, 1796, 1409, 1774, 1721, 1889, 1879, 1728, 2020, 2043, 2060, 1895, 2022, 1861, 1786 +}; + +uint16_t H_cols[] = { +208, 242, 84, 114, 314, 135, 349, 90, 64, 57, 26, 52, 16, 142, 120, 244, 167, 164, 133, 179, 22, 180, 413, 161, 224, 121, 57, 22, 394, 17, 9, 54, 84, 20, 98, 311, 322, 308, 86, 91, 77, 41, 110, 192, 18, 11, 210, 133, 248, 276, 389, 100, 37, 4, 239, 15, 32, 15, 7, 10, 109, 82, 19, 50, 137, 278, 43, 181, 89, 206, 113, 285, 10, 95, 12, 180, 23, 93, 100, 124, 200, 130, 81, 149, 6, 251, 181, 227, 156, 215, 194, 284, 206, 177, 171, 174, 40, 136, 187, 89, 98, 156, 44, 30, 48, 78, 349, 126, 56, 3, 212, 43, 111, 183, 63, 54, 35, 63, 333, 158, 96, 100, 270, 38, 97, 4, 139, 163, 67, 251, 139, 42, 214, 117, 26, 98, 132, 105, 13, 61, 330, 223, 183, 95, 295, 95, 55, 29, 65, 35, 75, 130, 8, 98, 344, 46, 239, 155, 131, 75, 246, 3, 44, 260, 199, 21, 99, 118, 76, 8, 87, 271, 257, 171, 98, 44, 255, 17, 276, 91, 50, 21, 90, 262, 118, 208, 214, 35, 140, 159, 58, 277, 158, 180, 53, 93, 58, 264, 40, 98, 4, 284, 183, 24, 7, 123, 133, 57, 223, 124, 156, 202, 34, 324, 67, 452, 63, 123, 303, 303, 169, 40, 32, 24, 32, 5, 220, 218, 103, 222, 113, 111, 100, 30, 146, 266, 4, 195, 14, 55, 145, 37, 40, 18, 184, 188, 267, 38, 116, 35, 60, 53, 133, 58, 9, 296, 63, 57, 30, 17, 86, 157, 105, 29, 73, 285, 122, 9, 31, 199, 347, 73, 55, 135, 86, 2, 42, 67, 119, 21, 351, 35, 213, 173, 61, 176, 194, 109, 72, 77, 273, 133, 244, 90, 313, 220, 27, 192, 63, 299, 208, 202, 3, 66, 14, 19, 127, 68, 348, 246, 26, 87, 75, 20, 215, 93, 212, 180, 149, 114, 133, 48, 235, 17, 247, 257, 42, 149, 57, 363, 75, 334, 67, 97, 29, 109, 241, 59, 332, 15, 228, 6, 186, 81, 271, 31, 103, 122, 150, 105, 110, 92, 277, 213, 358, 37, 100, 129, 46, 367, 118, 26, 115, 211, 3, 77, 217, 23, 24, 145, 70, 48, 68, 179, 112, 30, 110, 177, 14, 97, 68, 66, 103, 105, 83, 231, 29, 383, 45, 64, 42, 32, 201, 269, 67, 9, 149, 3, 34, 86, 373, 51, 409, 130, 39, 80, 177, 118, 34, 248, 175, 50, 37, 76, 14, 7, 122, 49, 262, 27, 79, 102, 295, 113, 26, 111, 135, 10, 356, 97, 21, 2, 129, 451, 140, 60, 42, 191, 33, 152, 25, 279, 99, 22, 124, 168, 305, 34, 104, 224, 154, 50, 71, 97, 60, 209, 73, 57, 10, 322, 159, 375, 104, 17, 273, 374, 81, 121, 160, 157, 411, 88, 236, 166, 88, 53, 164, 135, 36, 375, 291, 211, 4, 233, 84, 94, 47, 29, 10, 306, 54, 183, 16, 128, 42, 86, 96, 488, 31, 109, 150, 42, 332, 110, 315, 44, 321, 82, 109, 235, 80, 212, 35, 128, 80, 215, 7, 115, 44, 102, 281, 86, 27, 79, 280, 33, 227, 142, 113, 104, 102, 281, 161, 238, 197, 106, 111, 72, 163, 76, 41, 58, 4, 46, 45, 122, 281, 219, 52, 53, 45, 66, 264, 69, 37, 16, 138, 221, 176, 176, 98, 42, 75, 92, 80, 158, 163, 71, 26, 49, 109, 108, 70, 85, 378, 186, 178, 9, 12, 4, 74, 25, 65, 207, 8, 339, 5, 45, 205, 163, 234, 14, 56, 77, 62, 185, 55, 89, 19, 228, 117, 113, 80, 9, 8, 38, 74, 10, 112, 32, 205, 8, 242, 142, 119, 26, 158, 28, 148, 54, 69, 28, 81, 91, 142, 78, 158, 49, 66, 45, 179, 249, 91, 90, 219, 153, 339, 90, 14, 56, 60, 392, 9, 162, 274, 102, 79, 89, 206, 114, 365, 2, 232, 172, 36, 8, 14, 317, 173, 65, 2, 37, 112, 273, 38, 179, 107, 244, 9, 173, 67, 141, 265, 156, 96, 102, 158, 77, 96, 331, 2, 102, 302, 94, 23, 93, 92, 408, 95, 229, 2, 25, 326, 62, 82, 166, 185, 7, 170, 15, 30, 216, 93, 94, 186, 24, 124, 268, 36, 108, 156, 448, 65, 134, 356, 79, 91, 165, 63, 30, 123, 56, 164, 97, 348, 262, 72, 294, 3, 33, 36, 143, 79, 31, 158, 124, 46, 131, 115, 103, 33, 280, 22, 69, 80, 343, 386, 295, 107, 39, 122, 18, 215, 78, 166, 136, 163, 222, 5, 405, 196, 253, 401, 78, 138, 184, 190, 131, 5, 141, 91, 84, 10, 210, 184, 171, 39, 20, 283, 92, 337, 257, 172, 160, 28, 134, 170, 18, 110, 108, 85, 21, 62, 122, 23, 10, 128, 161, 152, 156, 65, 249, 124, 191, 282, 139, 220, 238, 24, 60, 66, 41, 196, 185, 68, 72, 51, 121, 12, 218, 13, 101, 89, 93, 298, 293, 197, 201, 332, 36, 128, 160, 182, 42, 19, 53, 259, 116, 331, 131, 84, 125, 43, 285, 79, 112, 66, 66, 288, 93, 93, 158, 87, 104, 134, 131, 156, 58, 33, 6, 42, 16, 130, 182, 354, 141, 12, 65, 60, 1, 169, 175, 82, 44, 82, 108, 17, 69, 28, 29, 80, 145, 25, 66, 88, 14, 64, 290, 160, 46, 113, 1, 251, 55, 61, 185, 199, 153, 13, 237, 150, 269, 5, 100, 126, 243, 312, 56, 219, 203, 156, 144, 164, 161, 87, 236, 203, 10, 216, 13, 166, 239, 19, 141, 51, 284, 61, 11, 75, 205, 31, 128, 49, 2, 33, 5, 135, 100, 194, 78, 154, 245, 51, 321, 121, 160, 114, 74, 44, 113, 59, 259, 6, 49, 144, 6, 22, 214, 171, 98, 181, 225, 368, 8, 274, 154, 262, 234, 21, 19, 352, 9, 165, 20, 90, 85, 255, 367, 174, 29, 145, 43, 1, 3, 153, 10, 280, 77, 221, 12, 11, 142, 370, 143, 116, 145, 223, 330, 36, 9, 157, 99, 271, 88, 291, 49, 89, 47, 94, 394, 344, 305, 38, 30, 39, 6, 129, 1, 242, 268, 200, 298, 182, 297, 175, 27, 117, 135, 108, 246, 60, 38, 225, 48, 12, 124, 229, 55, 50, 311, 70, 133, 119, 151, 199, 73, 70, 98, 26, 76, 99, 154, 112, 76, 236, 273, 22, 109, 206, 61, 34, 146, 292, 132, 254, 42, 1, 121, 310, 33, 41, 49, 168, 226, 247, 459, 47, 211, 187, 41, 58, 8, 388, 359, 129, 83, 129, 190, 55, 189, 48, 258, 60, 58, 13, 205, 263, 232, 151, 96, 77, 31, 53, 64, 174, 197, 200, 25, 93, 191, 139, 217, 5, 117, 51, 212, 72, 28, 2, 236, 114, 320, 35, 106, 74, 28, 425, 282, 49, 132, 2, 82, 47, 143, 142, 100, 25, 79, 43, 24, 23, 399, 92, 97, 290, 31, 69, 109, 165, 83, 41, 98, 84, 195, 319, 347, 222, 37, 39, 104, 5, 196, 207, 47, 4, 223, 141, 32, 47, 81, 96, 31, 68, 101, 145, 177, 85, 129, 271, 334, 224, 36, 117, 56, 70, 410, 212, 87, 298, 361, 160, 164, 34, 19, 52, 66, 310, 4, 105, 40, 180, 137, 263, 37, 73, 237, 29, 135, 20, 7, 336, 197, 68, 2, 131, 28, 60, 88, 94, 58, 83, 38, 218, 7, 1, 71, 296, 149, 355, 146, 179, 64, 2, 418, 155, 127, 76, 348, 54, 83, 251, 48, 27, 185, 32, 84, 4, 89, 107, 360, 257, 29, 54, 318, 56, 95, 295, 51, 45, 47, 24, 256, 173, 92, 154, 63, 255, 321, 132, 76, 116, 92, 308, 20, 52, 178, 292, 87, 216, 275, 16, 152, 151, 165, 226, 276, 36, 1, 333, 30, 428, 17, 136, 11, 192, 45, 40, 34, 268, 68, 292, 54, 85, 120, 116, 206, 92, 99, 213, 91, 15, 14, 43, 112, 305, 319, 157, 136, 76, 25, 141, 95, 82, 11, 32, 41, 74, 49, 301, 122, 128, 338, 94, 129, 265, 71, 11, 109, 22, 328, 13, 105, 22, 196, 240, 198, 7, 146, 181, 115, 62, 61, 218, 64, 170, 222, 15, 99, 36, 31, 258, 69, 41, 56, 60, 129, 33, 103, 57, 21, 103, 127, 165, 13, 39, 328, 105, 228, 107, 120, 86, 98, 27, 54, 205, 167, 244, 74, 238, 38, 89, 5, 120, 329, 37, 37, 278, 24, 140, 118, 127, 203, 23, 106, 286, 243, 72, 152, 86, 61, 22, 11, 6, 34, 256, 269, 158, 175, 211, 317, 253, 50, 50, 27, 130, 454, 41, 250, 267, 144, 303, 11, 104, 63, 18, 124, 104, 58, 140, 25, 151, 58, 239, 286, 155, 217, 27, 182, 10, 398, 65, 190, 81, 69, 119, 78, 20, 136, 106, 51, 188, 200, 350, 303, 133, 53, 73, 15, 158, 262, 150, 192, 10, 289, 162, 362, 234, 232, 16, 225, 334, 294, 6, 105, 125, 68, 72, 176, 239, 20, 163, 353, 118, 117, 170, 90, 258, 50, 45, 88, 87, 128, 85, 4, 62, 34, 268, 258, 183, 25, 146, 85, 44, 133, 107, 140, 87, 64, 18, 70, 76, 95, 309, 147, 34, 308, 19, 237, 21, 217, 115, 49, 177, 201, 88, 149, 163, 5, 325, 455, 96, 52, 77, 24, 152, 130, 207, 67, 220, 36, 18, 48, 88, 40, 148, 179, 6, 155, 19, 138, 74, 39, 51, 198, 141, 142, 106, 103, 67, 111, 107, 186, 68, 37, 166, 28, 94, 289, 15, 126, 121, 43, 108, 117, 128, 406, 71, 333, 39, 38, 69, 313, 267, 17, 249, 40, 351, 40, 202, 138, 262, 105, 324, 75, 267, 123, 141, 156, 78, 112, 408, 97, 173, 91, 99, 239, 25, 376, 25, 254, 185, 157, 15, 61, 71, 113, 237, 237, 48, 29, 89, 1, 79, 41, 3, 24, 13, 187, 96, 52, 30, 137, 70, 82, 1, 47, 34, 444, 146, 63, 47, 59, 154, 115, 129, 298, 61, 3, 64, 85, 75, 244, 12, 47, 101, 103, 7, 169, 125, 213, 271, 378, 271, 100, 126, 134, 131, 31, 32, 16, 310, 222, 95, 12, 154, 89, 391, 205, 8, 27, 1, 85, 192, 85, 117, 140, 127, 132, 35, 31, 12, 263, 121, 6, 81, 65, 71, 78, 88, 140, 85, 227, 347, 68, 50, 7, 44, 215, 128, 26, 2, 96, 55, 66, 54, 22, 161, 258, 7, 13, 124, 101, 265, 21, 83, 233, 203, 274, 59, 354, 99, 59, 139, 13, 377, 107, 102, 23, 184, 32, 115, 61, 169, 320, 27, 171, 293, 57, 62, 46, 58, 147, 139, 235, 52, 46, 375, 46, 218, 319, 368, 61, 29, 174, 172, 83, 325, 29, 200, 198, 18, 303, 114, 173, 213, 35, 102, 20, 35, 211, 46, 180, 99, 301, 250, 208, 178, 93, 30, 76, 52, 165, 159, 372, 225, 278, 138, 136, 145, 231, 79, 44, 137, 50, 55, 119, 125, 39, 138, 101, 25, 166, 23, 192, 18, 39, 178, 116, 28, 178, 59, 188, 198, 16, 96, 46, 186, 108, 59, 255, 199, 258, 252, 88, 118, 134, 383, 150, 5, 139, 239, 228, 38, 227, 263, 43, 67, 175, 97, 188, 63, 147, 189, 17, 154, 62, 370, 219, 1, 198, 22, 56, 90, 318, 15, 20, 171, 45, 100, 30, 126, 131, 234, 11, 207, 254, 299, 349, 120, 196, 21, 26, 170, 114, 77, 8, 57, 190, 11, 214, 212, 345, 179, 225, 64, 114, 80, 185, 66, 138, 149, 43, 190, 127, 3, 3, 153, 222, 210, 11, 56, 104, 53, 153, 130, 56, 83, 71, 274, 95, 74, 121, 106, 173, 16, 114, 270, 33, 53, 267, 49, 332, 306, 68, 35, 28, 32, 213, 24, 113, 40, 18, 9, 89, 294, 250, 256, 70, 208, 291, 91, 82, 314, 39, 7, 181, 78, 13, 301, 405, 112, 316, 156, 393, 12, 110, 48, 73, 166, 39, 17, 132, 204, 104, 63, 62, 1, 45, 393, 5, 115, 47, 18, 248, 16, 272, 75, 317, 84, 70, 342, 207, 14, 191, 77, 154, 12, 107, 230, 132, 280, 42, 23, 147, 149, 17, 18, 8, 174, 73, 261, 197, 72, 4, 15, 34, 163, 159, 136, 12, 36, 196, 3, 40, 167, 71, 101, 111, 100, 237, 300, 32, 76, 9, 14, 137, 6, 53, 202, 71, 52, 148, 219, 17, 299, 41, 108, 48, 143, 65, 316, 133, 142, 92, 296, 323, 150, 211, 361, 261, 422, 167, 212, 195, 50, 317, 406, 372, 360, 314, 399, 203, 136, 211, 56, 195, 436, 229, 489, 295, 101, 109, 487, 184, 87, 279, 233, 399, 176, 470, 433, 364, 197, 115, 194, 314, 423, 246, 98, 401, 291, 268, 272, 357, 458, 298, 327, 21, 298, 299, 225, 220, 272, 51, 177, 93, 84, 403, 150, 336, 275, 236, 476, 243, 261, 373, 330, 248, 310, 365, 155, 240, 144, 276, 229, 292, 99, 175, 101, 317, 365, 297, 404, 260, 333, 417, 462, 434, 474, 444, 119, 309, 261, 260, 344, 435, 80, 123, 257, 183, 358, 197, 78, 16, 264, 260, 459, 195, 390, 147, 217, 467, 353, 165, 120, 151, 335, 83, 106, 28, 326, 252, 70, 298, 182, 153, 300, 260, 122, 111, 143, 302, 135, 235, 362, 236, 232, 287, 371, 309, 248, 248, 176, 215, 169, 183, 155, 140, 446, 91, 277, 263, 234, 126, 376, 335, 162, 490, 398, 182, 105, 378, 469, 159, 119, 457, 292, 249, 108, 59, 451, 20, 362, 228, 57, 306, 459, 301, 208, 329, 357, 82, 396, 279, 137, 396, 272, 202, 396, 282, 120, 308, 389, 287, 43, 311, 371, 59, 326, 125, 223, 190, 285, 134, 348, 219, 74, 343, 72, 455, 367, 179, 368, 395, 267, 227, 59, 225, 65, 21, 300, 310, 266, 259, 362, 168, 104, 69, 344, 417, 47, 335, 103, 126, 394, 41, 122, 166, 313, 265, 438, 118, 265, 204, 316, 439, 142, 90, 180, 440, 281, 392, 312, 210, 137, 189, 240, 247, 240, 320, 251, 157, 324, 208, 415, 245, 180, 262, 94, 141, 191, 110, 165, 165, 361, 61, 488, 378, 138, 178, 229, 396, 157, 168, 397, 266, 289, 240, 347, 299, 84, 451, 133, 391, 469, 324, 137, 116, 60, 365, 207, 200, 472, 450, 428, 330, 139, 159, 223, 217, 330, 245, 234, 238, 418, 391, 367, 308, 291, 304, 67, 244, 288, 382, 130, 461, 335, 118, 187, 334, 324, 441, 462, 112, 445, 59, 214, 230, 372, 44, 106, 167, 181, 211, 193, 148, 409, 264, 364, 353, 174, 263, 283, 406, 312, 349, 118, 455, 181, 259, 323, 175, 33, 152, 299, 141, 320, 314, 131, 62, 235, 335, 231, 340, 244, 425, 169, 311, 497, 241, 37, 436, 117, 184, 294, 157, 350, 301, 94, 162, 273, 13, 182, 101, 486, 341, 434, 322, 74, 144, 284, 139, 111, 403, 214, 52, 323, 327, 172, 227, 230, 208, 277, 221, 120, 409, 339, 123, 223, 252, 209, 237, 429, 295, 253, 35, 162, 454, 243, 199, 295, 385, 360, 241, 170, 390, 175, 402, 198, 288, 397, 275, 330, 267, 161, 341, 283, 193, 62, 258, 162, 254, 259, 374, 408, 415, 268, 54, 312, 424, 302, 342, 376, 172, 453, 214, 281, 379, 447, 170, 434, 230, 121, 423, 305, 441, 276, 244, 121, 110, 461, 323, 151, 309, 431, 202, 200, 329, 210, 352, 164, 503, 113, 126, 231, 152, 454, 311, 433, 86, 449, 130, 231, 262, 189, 290, 288, 429, 143, 311, 70, 226, 451, 277, 362, 134, 51, 81, 343, 171, 466, 149, 194, 310, 119, 315, 186, 300, 469, 349, 427, 123, 168, 117, 174, 144, 224, 116, 173, 198, 457, 287, 147, 65, 258, 272, 499, 315, 81, 186, 168, 341, 316, 190, 178, 291, 232, 280, 174, 260, 242, 226, 181, 120, 113, 138, 294, 106, 481, 287, 377, 104, 125, 383, 234, 369, 289, 348, 52, 389, 239, 219, 344, 378, 338, 418, 137, 363, 116, 207, 335, 449, 202, 358, 216, 134, 319, 100, 11, 265, 233, 172, 267, 45, 256, 23, 318, 221, 169, 245, 306, 281, 181, 289, 116, 173, 346, 327, 194, 205, 326, 345, 201, 111, 448, 366, 399, 293, 222, 170, 358, 442, 19, 187, 159, 456, 299, 206, 290, 169, 253, 412, 252, 202, 377, 331, 497, 203, 313, 115, 255, 373, 364, 237, 245, 291, 269, 342, 54, 218, 269, 373, 170, 256, 270, 213, 305, 288, 203, 315, 238, 87, 192, 334, 26, 127, 352, 240, 277, 114, 102, 432, 139, 332, 278, 128, 411, 91, 317, 296, 265, 343, 291, 217, 124, 350, 220, 242, 220, 62, 233, 300, 190, 393, 445, 513, 478, 346, 375, 131, 99, 272, 160, 355, 279, 112, 305, 107, 403, 336, 109, 322, 143, 371, 147, 204, 192, 308, 180, 279, 127, 194, 145, 239, 124, 288, 24, 177, 191, 433, 429, 308, 270, 136, 330, 73, 469, 302, 274, 221, 246, 393, 328, 431, 454, 391, 426, 269, 434, 329, 245, 149, 151, 338, 328, 299, 433, 374, 230, 202, 472, 177, 360, 402, 387, 316, 181, 418, 52, 198, 174, 20, 197, 110, 294, 268, 123, 151, 43, 87, 250, 237, 247, 233, 143, 367, 231, 339, 381, 141, 233, 355, 204, 225, 382, 208, 224, 206, 159, 87, 80, 275, 103, 365, 33, 374, 117, 145, 332, 368, 309, 297, 421, 63, 212, 213, 373, 107, 249, 247, 318, 242, 464, 312, 164, 240, 103, 328, 345, 262, 160, 209, 401, 325, 249, 186, 201, 112, 250, 262, 215, 70, 473, 170, 126, 143, 211, 313, 370, 183, 220, 174, 388, 346, 351, 182, 173, 48, 214, 370, 163, 92, 95, 228, 134, 461, 251, 398, 205, 282, 372, 363, 348, 83, 321, 175, 265, 160, 252, 479, 340, 257, 64, 285, 419, 369, 23, 196, 283, 286, 327, 97, 411, 331, 184, 297, 325, 284, 341, 245, 302, 294, 231, 247, 319, 404, 190, 180, 491, 441, 147, 303, 148, 291, 350, 471, 197, 396, 187, 92, 201, 269, 200, 264, 250, 338, 104, 470, 379, 248, 168, 271, 113, 146, 205, 267, 71, 296, 221, 385, 153, 347, 482, 252, 339, 453, 390, 289, 284, 229, 269, 263, 167, 27, 369, 80, 243, 432, 230, 153, 280, 397, 239, 380, 208, 244, 8, 72, 271, 354, 328, 233, 224, 297, 297, 204, 461, 190, 259, 151, 306, 375, 195, 189, 304, 155, 279, 232, 352, 123, 177, 339, 401, 493, 384, 376, 340, 38, 171, 79, 161, 78, 340, 293, 238, 465, 191, 435, 179, 244, 387, 184, 211, 307, 352, 342, 316, 196, 351, 353, 445, 69, 97, 368, 180, 274, 136, 275, 342, 189, 75, 395, 145, 147, 205, 185, 222, 218, 413, 297, 374, 144, 453, 372, 138, 302, 316, 237, 356, 46, 40, 339, 343, 184, 242, 125, 216, 345, 305, 477, 148, 214, 199, 303, 306, 123, 440, 404, 292, 210, 328, 350, 210, 337, 94, 309, 408, 151, 76, 276, 266, 325, 482, 155, 332, 254, 209, 321, 297, 243, 355, 259, 164, 221, 453, 361, 15, 338, 357, 289, 240, 149, 249, 263, 219, 447, 434, 261, 300, 159, 479, 342, 93, 213, 57, 141, 177, 335, 410, 315, 188, 166, 223, 307, 354, 492, 170, 187, 453, 195, 127, 349, 410, 151, 207, 130, 147, 216, 417, 439, 369, 83, 461, 326, 406, 381, 227, 126, 270, 258, 394, 108, 331, 228, 333, 72, 95, 209, 319, 351, 346, 379, 284, 392, 315, 191, 147, 463, 95, 486, 415, 167, 324, 377, 390, 375, 410, 92, 354, 106, 364, 106, 370, 132, 193, 396, 321, 134, 119, 393, 327, 195, 506, 30, 341, 253, 233, 82, 283, 55, 207, 301, 430, 167, 248, 163, 475, 77, 218, 124, 367, 176, 415, 426, 188, 380, 58, 488, 209, 170, 164, 354, 134, 212, 334, 255, 220, 349, 110, 288, 227, 350, 201, 406, 319, 442, 117, 330, 228, 148, 424, 267, 155, 452, 161, 345, 217, 474, 179, 208, 328, 367, 254, 173, 210, 259, 458, 296, 277, 206, 296, 162, 480, 430, 183, 202, 268, 263, 274, 312, 374, 96, 445, 66, 463, 321, 250, 204, 194, 129, 78, 342, 485, 289, 387, 67, 119, 256, 241, 341, 110, 215, 276, 226, 186, 276, 266, 198, 331, 455, 167, 232, 89, 355, 166, 336, 147, 397, 167, 260, 175, 282, 465, 265, 178, 453, 189, 132, 273, 202, 132, 209, 62, 400, 397, 114, 225, 299, 288, 259, 228, 149, 319, 160, 327, 406, 411, 217, 374, 286, 229, 236, 129, 232, 403, 266, 432, 189, 115, 338, 120, 342, 197, 248, 310, 269, 298, 79, 156, 453, 325, 468, 116, 246, 210, 438, 43, 256, 378, 294, 398, 84, 366, 122, 311, 174, 346, 377, 320, 111, 309, 243, 162, 329, 165, 307, 229, 266, 305, 267, 94, 230, 454, 131, 72, 50, 209, 199, 283, 329, 178, 400, 236, 388, 423, 127, 190, 287, 175, 477, 274, 314, 465, 389, 410, 350, 131, 263, 108, 201, 127, 130, 468, 59, 223, 148, 341, 336, 414, 235, 36, 288, 171, 405, 111, 395, 271, 122, 154, 150, 164, 403, 460, 374, 213, 208, 464, 310, 143, 356, 204, 81, 273, 314, 287, 380, 16, 410, 313, 385, 410, 406, 23, 240, 370, 373, 416, 355, 204, 176, 187, 329, 357, 292, 282, 384, 212, 273, 202, 262, 385, 198, 191, 402, 230, 266, 179, 389, 210, 165, 375, 261, 287, 302, 471, 250, 144, 284, 279, 277, 382, 118, 65, 126, 235, 158, 354, 150, 53, 331, 68, 280, 51, 219, 432, 90, 236, 213, 137, 289, 256, 366, 469, 484, 125, 289, 454, 49, 155, 392, 221, 181, 238, 137, 85, 222, 105, 228, 351, 380, 22, 379, 322, 409, 215, 234, 174, 275, 356, 182, 212, 272, 203, 194, 426, 215, 279, 234, 279, 388, 164, 318, 219, 205, 152, 74, 304, 242, 136, 440, 304, 466, 238, 347, 201, 373, 275, 325, 364, 362, 393, 103, 394, 365, 359, 338, 332, 322, 369, 270, 216, 363, 135, 353, 460, 157, 282, 402, 414, 393, 196, 403, 178, 294, 276, 193, 282, 217, 86, 234, 351, 433, 337, 64, 236, 184, 423, 64, 362, 241, 210, 247, 483, 298, 122, 191, 243, 245, 46, 458, 278, 447, 311, 326, 360, 71, 224, 354, 148, 360, 74, 6, 215, 290, 374, 313, 200, 185, 116, 133, 28, 224, 467, 357, 291, 473, 379, 388, 188, 246, 340, 67, 240, 144, 475, 314, 193, 179, 215, 150, 423, 360, 192, 102, 159, 127, 204, 154, 168, 423, 373, 172, 48, 140, 327, 292, 358, 221, 426, 154, 101, 331, 337, 235, 102, 251, 409, 238, 283, 151, 307, 278, 357, 247, 484, 229, 152, 69, 311, 241, 225, 388, 230, 140, 146, 370, 429, 26, 134, 466, 240, 372, 197, 389, 145, 136, 176, 187, 400, 264, 221, 366, 446, 311, 364, 186, 404, 363, 101, 243, 400, 120, 146, 389, 203, 190, 278, 300, 260, 196, 430, 106, 260, 367, 436, 222, 359, 433, 417, 184, 371, 301, 275, 336, 111, 428, 129, 304, 303, 73, 224, 449, 175, 255, 446, 326, 123, 315, 315, 223, 327, 161, 194, 97, 201, 309, 383, 407, 302, 326, 209, 324, 198, 356, 107, 88, 189, 276, 247, 144, 339, 320, 221, 169, 140, 226, 118, 379, 333, 69, 300, 262, 218, 265, 257, 251, 310, 27, 265, 227, 369, 220, 146, 412, 265, 272, 286, 286, 229, 283, 395, 209, 372, 290, 488, 293, 184, 360, 342, 194, 132, 313, 290, 448, 385, 162, 232, 31, 270, 271, 383, 318, 242, 251, 157, 79, 119, 421, 401, 178, 231, 152, 207, 55, 163, 274, 313, 125, 251, 256, 468, 385, 329, 227, 272, 317, 196, 427, 466, 96, 216, 449, 14, 441, 333, 484, 363, 383, 303, 155, 172, 188, 348, 169, 256, 199, 193, 188, 455, 86, 161, 235, 247, 288, 135, 344, 427, 381, 148, 261, 128, 193, 287, 221, 347, 155, 172, 204, 334, 255, 380, 189, 241, 277, 226, 448, 413, 81, 441, 223, 162, 429, 292, 205, 146, 439, 110, 114, 304, 261, 378, 88, 278, 386, 123, 226, 329, 165, 83, 295, 213, 408, 355, 414, 336, 440, 366, 409, 142, 153, 168, 128, 470, 266, 82, 280, 428, 250, 360, 238, 99, 53, 424, 176, 285, 263, 212, 268, 316, 377, 335, 387, 168, 144, 428, 326, 132, 232, 252, 300, 51, 146, 308, 371, 486, 279, 275, 370, 223, 33, 304, 296, 217, 442, 360, 280, 75, 354, 182, 139, 397, 236, 442, 361, 45, 233, 193, 479, 206, 153, 121, 299, 201, 255, 426, 318, 286, 54, 143, 302, 57, 148, 320, 231, 218, 377, 498, 206, 359, 238, 235, 379, 160, 391, 381, 261, 297, 277, 368, 362, 437, 409, 372, 270, 481, 300, 407, 253, 55, 488, 487, 470, 429, 431, 402, 259, 404, 257, 101, 243, 463, 487, 514, 496, 150, 358, 504, 234, 490, 511, 240, 415, 412, 484, 490, 416, 252, 472, 489, 478, 493, 381, 139, 480, 511, 362, 293, 466, 503, 359, 342, 142, 326, 369, 304, 320, 364, 486, 261, 105, 316, 471, 476, 430, 460, 379, 484, 253, 446, 400, 447, 373, 472, 490, 272, 401, 158, 471, 328, 417, 312, 344, 331, 429, 383, 341, 501, 361, 410, 480, 477, 492, 508, 482, 332, 336, 429, 310, 369, 460, 291, 346, 365, 392, 402, 452, 120, 430, 301, 419, 462, 406, 410, 342, 493, 500, 390, 498, 378, 230, 403, 188, 443, 258, 505, 499, 148, 508, 485, 241, 382, 289, 264, 182, 455, 481, 264, 451, 489, 483, 485, 365, 376, 447, 301, 382, 278, 237, 409, 285, 168, 292, 463, 290, 482, 339, 323, 376, 386, 495, 286, 502, 450, 322, 115, 390, 483, 370, 426, 461, 441, 406, 162, 73, 506, 256, 511, 507, 107, 498, 491, 323, 274, 478, 516, 337, 450, 304, 183, 502, 285, 249, 420, 427, 349, 386, 508, 353, 413, 500, 375, 304, 485, 410, 484, 306, 353, 431, 377, 239, 156, 438, 402, 499, 503, 200, 458, 419, 490, 230, 203, 397, 73, 436, 398, 326, 293, 363, 416, 497, 458, 250, 443, 460, 60, 476, 227, 392, 494, 352, 422, 383, 468, 344, 443, 199, 425, 417, 496, 452, 472, 396, 246, 449, 458, 395, 398, 283, 253, 391, 307, 268, 337, 501, 269, 499, 409, 408, 434, 365, 264, 407, 267, 150, 253, 254, 269, 185, 434, 306, 508, 510, 287, 347, 318, 439, 235, 307, 503, 281, 303, 468, 366, 415, 434, 480, 368, 497, 500, 504, 195, 188, 125, 502, 496, 475, 492, 481, 501, 407, 309, 302, 372, 442, 357, 464, 436, 249, 429, 493, 412, 340, 385, 489, 172, 353, 322, 477, 439, 509, 490, 311, 478, 364, 450, 448, 479, 372, 463, 495, 312, 269, 425, 341, 501, 415, 193, 225, 481, 437, 433, 281, 509, 428, 278, 509, 458, 506, 481, 509, 463, 504, 209, 415, 510, 347, 246, 388, 307, 237, 472, 407, 318, 228, 441, 417, 467, 469, 457, 515, 324, 402, 510, 254, 112, 470, 345, 463, 302, 378, 416, 312, 241, 381, 327, 94, 207, 335, 498, 343, 476, 427, 444, 351, 414, 186, 178, 457, 459, 460, 333, 471, 334, 389, 398, 327, 315, 504, 481, 437, 386, 431, 488, 442, 241, 356, 471, 402, 424, 433, 287, 459, 298, 463, 322, 458, 386, 464, 232, 492, 285, 441, 227, 292, 405, 377, 336, 466, 441, 513, 350, 276, 142, 492, 176, 404, 286, 437, 483, 474, 446, 291, 323, 474, 463, 414, 496, 231, 493, 491, 464, 484, 448, 191, 441, 258, 296, 497, 381, 484, 419, 318, 125, 222, 487, 516, 285, 502, 449, 294, 211, 384, 358, 451, 414, 509, 135, 241, 444, 392, 474, 469, 444, 203, 500, 282, 350, 286, 231, 478, 365, 465, 467, 472, 497, 484, 513, 513, 455, 242, 502, 385, 504, 358, 479, 390, 407, 416, 266, 330, 206, 412, 471, 496, 498, 380, 325, 159, 219, 504, 447, 340, 383, 416, 475, 373, 410, 486, 368, 501, 511, 413, 91, 278, 257, 486, 369, 506, 214, 402, 430, 348, 476, 333, 331, 441, 204, 187, 450, 194, 382, 224, 497, 411, 462, 252, 275, 457, 446, 415, 502, 413, 121, 515, 485, 476, 353, 381, 488, 480, 385, 425, 314, 224, 383, 506, 280, 515, 388, 422, 386, 396, 408, 329, 340, 371, 359, 138, 431, 200, 361, 393, 189, 436, 411, 319, 316, 478, 293, 390, 422, 414, 445, 232, 503, 397, 443, 296, 493, 374, 432, 430, 493, 206, 437, 477, 295, 352, 492, 509, 375, 214, 314, 430, 283, 467, 491, 350, 421, 499, 499, 511, 367, 125, 379, 482, 476, 505, 411, 446, 507, 390, 264, 290, 419, 460, 474, 414, 422, 317, 327, 437, 422, 404, 320, 416, 242, 362, 429, 366, 399, 438, 293, 245, 448, 461, 390, 415, 356, 482, 504, 284, 428, 378, 268, 400, 308, 468, 416, 393, 394, 405, 355, 408, 438, 323, 424, 401, 483, 516, 493, 362, 424, 372, 234, 515, 386, 382, 500, 314, 402, 425, 460, 456, 172, 501, 247, 495, 173, 492, 226, 476, 439, 346, 293, 353, 317, 435, 152, 487, 119, 348, 424, 499, 494, 495, 469, 251, 501, 401, 516, 308, 457, 280, 454, 440, 432, 470, 497, 399, 451, 344, 487, 432, 439, 516, 278, 461, 462, 313, 475, 386, 233, 396, 475, 439, 424, 495, 431, 434, 433, 436, 456, 403, 341, 423, 359, 296, 324, 309, 480, 508, 435, 144, 478, 401, 358, 287, 484, 512, 443, 367, 459, 452, 445, 468, 316, 271, 514, 388, 448, 474, 413, 307, 86, 293, 320, 433, 302, 394, 222, 414, 344, 456, 356, 475, 468, 456, 426, 494, 428, 339, 288, 494, 448, 270, 504, 507, 381, 405, 379, 498, 469, 489, 247, 354, 445, 500, 467, 217, 277, 385, 318, 513, 218, 253, 483, 249, 325, 161, 351, 505, 475, 440, 229, 412, 461, 371, 427, 377, 439, 338, 473, 500, 292, 167, 315, 230, 261, 464, 294, 407, 226, 406, 488, 426, 432, 515, 511, 421, 489, 439, 282, 515, 483, 325, 323, 462, 443, 491, 377, 384, 349, 491, 353, 226, 420, 495, 428, 409, 473, 461, 357, 473, 371, 343, 360, 398, 500, 465, 401, 319, 513, 483, 216, 405, 424, 473, 455, 516, 235, 476, 308, 248, 281, 482, 244, 481, 407, 345, 309, 506, 417, 485, 363, 320, 192, 470, 231, 513, 246, 299, 447, 467, 163, 510, 498, 337, 417, 491, 457, 422, 340, 422, 298, 273, 301, 447, 449, 356, 374, 436, 299, 225, 452, 468, 490, 403, 432, 387, 38, 277, 340, 514, 485, 355, 253, 400, 389, 460, 492, 356, 300, 400, 404, 404, 498, 369, 330, 273, 311, 248, 491, 126, 216, 495, 449, 505, 407, 380, 425, 246, 437, 153, 211, 256, 387, 515, 297, 507, 440, 480, 361, 412, 395, 431, 412, 371, 506, 435, 421, 462, 504, 483, 472, 436, 507, 370, 183, 485, 330, 389, 381, 473, 272, 449, 364, 192, 345, 312, 252, 333, 501, 388, 491, 246, 507, 393, 355, 358, 367, 417, 499, 81, 516, 494, 490, 228, 480, 367, 427, 387, 349, 510, 349, 411, 321, 449, 315, 307, 458, 490, 462, 323, 406, 452, 456, 357, 153, 359, 503, 375, 352, 385, 392, 442, 485, 260, 445, 423, 512, 410, 361, 396, 421, 514, 300, 412, 487, 489, 19, 352, 447, 347, 321, 400, 394, 284, 510, 508, 502, 281, 459, 177, 483, 388, 399, 379, 180, 186, 209, 502, 418, 326, 214, 432, 274, 401, 413, 512, 322, 264, 513, 239, 501, 464, 419, 259, 418, 306, 307, 319, 484, 512, 453, 363, 508, 454, 424, 450, 275, 270, 301, 260, 512, 161, 494, 323, 346, 189, 348, 376, 345, 464, 421, 381, 342, 464, 359, 455, 492, 470, 359, 505, 465, 343, 420, 435, 428, 510, 478, 193, 419, 380, 414, 181, 394, 266, 396, 491, 395, 192, 421, 404, 507, 456, 512, 251, 384, 442, 421, 334, 384, 317, 320, 391, 477, 171, 336, 273, 500, 446, 414, 340, 484, 306, 453, 445, 327, 405, 406, 506, 236, 491, 371, 508, 471, 446, 501, 290, 366, 507, 250, 394, 403, 458, 266, 509, 351, 493, 252, 510, 456, 176, 440, 419, 378, 506, 399, 442, 319, 514, 462, 275, 459, 378, 350, 226, 494, 430, 494, 394, 486, 442, 381, 233, 500, 504, 504, 308, 494, 366, 353, 469, 439, 463, 516, 109, 473, 473, 343, 383, 435, 282, 509, 420, 514, 333, 450, 307, 477, 375, 398, 466, 382, 479, 452, 283, 285, 495, 482, 425, 430, 505, 322, 444, 503, 497, 449, 486, 338, 440, 355, 488, 413, 352, 513, 331, 333, 506, 423, 183, 361, 474, 461, 409, 425, 411, 481, 397, 470, 332, 395, 343, 298, 159, 476, 512, 398, 444, 516, 505, 499, 397, 421, 271, 130, 424, 456, 270, 463, 431, 334, 397, 399, 509, 335, 341, 443, 392, 509, 338, 284, 468, 382, 477, 443, 331, 455, 445, 169, 296, 511, 491, 408, 427, 408, 318, 405, 182, 392, 390, 488, 219, 368, 369, 384, 372, 336, 399, 502, 515, 356, 486, 325, 293, 504, 162, 451, 295, 339, 220, 471, 421, 351, 433, 334, 392, 465, 303, 418, 306, 316, 515, 317, 438, 482, 454, 475, 370, 459, 496, 505, 384, 185, 172, 497, 171, 281, 400, 418, 499, 436, 391, 108, 468, 280, 422, 313, 467, 398, 464, 167, 254, 168, 448, 465, 505, 471, 312, 467, 418, 403, 374, 470, 459, 347, 468, 395, 425, 19, 472, 510, 456, 428, 495, 75, 255, 467, 465, 425, 512, 387, 426, 335, 453, 474, 487, 480, 462, 344, 511, 207, 309, 419, 419, 395, 424, 272, 346, 382, 460, 352, 169, 442, 476, 404, 473, 511, 330, 196, 334, 329, 438, 438, 503, 255, 481, 500, 420, 472, 509, 394, 450, 255, 472, 373, 365, 488, 305, 496, 418, 193, 368, 305, 508, 495, 494, 199, 420, 514, 450, 201, 496, 238, 264, 411, 358, 229, 287, 493, 346, 409, 489, 102, 480, 413, 435, 290, 317, 303, 348, 376, 314, 422, 297, 343, 250, 513, 466, 290, 289, 431, 503, 451, 516, 328, 305, 427, 361, 307, 469, 341, 476, 371, 489, 328, 355, 310, 437, 515, 402, 386, 403, 412, 357, 440, 486, 448, 399, 337, 514, 426, 478, 506, 462, 360, 466, 496, 279, 397, 479, 428, 505, 421, 461, 257, 437, 418, 315, 440, 498, 337, 387, 490, 437, 466, 220, 500, 479, 470, 218, 380, 431, 243, 396, 492, 443, 507, 373, 477, 395, 188, 496, 366, 457, 422, 336, 376, 450, 391, 494, 245, 384, 77, 44, 478, 438, 454, 407, 285, 508, 198, 457, 261, 322, 492, 482, 338, 512, 405, 420, 312, 464, 416, 80, 412, 249, 501, 412, 452, 505, 426, 379, 451, 479, 387, 137, 340, 507, 483, 459, 203, 453, 420, 358, 84, 499, 503, 408, 443, 350, 515, 200, 295, 376, 442, 369, 423, 346, 420, 445, 456, 465, 337, 475, 438, 258, 506, 377, 364, 185, 321, 305, 282, 509, 301, 321, 398, 456, 511, 465, 281, 516, 450, 435, 286, 416, 475, 254, 393, 469, 414, 429, 460, 389, 478, 492, 503, 453, 444, 393, 467, 294, 420, 157, 279, 513, 497, 204, 444, 514, 348, 459, 454, 270, 413, 440, 494, 434, 465, 505, 429, 384, 514, 466, 486, 475, 510, 436, 437, 434, 457, 516, 454, 473, 332, 433, 479, 499, 405, 482, 497, 503, 411, 351, 199, 380, 216, 420, 387, 426, 450, 404, 370, 447, 386, 452, 135, 253, 482, 416, 276, 171, 419, 420, 288, 241, 474, 391, 368, 488, 365, 400, 363, 354, 274, 415, 345, 376, 467, 138, 479, 295, 391, 382, 483, 444, 446, 390, 304, 510, 507, 385, 452, 216, 457, 472, 498, 438, 408, 388, 368, 498, 464, 462, 466, 508, 515, 321, 375, 337, 448, 273, 455, 435, 380, 354, 254, 242, 324, 489, 477, 245, 427, 195, 508, 187, 210, 328, 498, 145, 485, 304, 493, 392, 507, 324, 400, 419, 430, 439, 513, 432, 417, 496, 364, 474, 511, 493, 435, 487, 366, 364, 455, 384, 359, 195, 329, 263, 349, 248, 486, 371, 166, 257, 471, 339, 380, 357, 437, 441, 191, 443, 268, 197, 444, 306, 363, 160, 346, 345, 376, 401, 479, 195, 243, 514, 481, 489, 445, 432, 451, 460, 252, 443, 332, 283, 416, 502, 140, 164, 415, 359, 470, 90, 411, 425, 422, 352, 344, 501, 386, 335, 458, 449, 478, 480, 477, 487, 413, 444, 244, 157, 451, 423, 480, 297, 284, 495, 431, 384, 418, 363, 325, 245, 447, 313, 485, 436, 391, 357, 512, 490, 487, 417, 512, 324, 496, 366, 152, 452, 343, 361, 389, 254, 446, 471, 502, 399, 485, 395, 345, 474, 337, 481, 249, 510, 458, 514, 90, 362, 463, 347, 477, 257, 489, 405, 143, 259, 286, 495, 382, 224, 177, 446, 260, 427, 438, 434, 511, 187, 383, 423, 193, 430, 427, 447, 435, 487, 502, 338, 407, 323, 407, 387, 166, 512, 473, 310, 457, 490 +}; + +float input[] = { +-2.8588758611049867, -11.692946618257562, -2.0931111592429659, 11.110696212718175, 6.6118168080332342, 5.5228669775147967, -10.351976177615544, -6.2055936928533972, 15.766842028131405, 10.150684036103069, -8.459063190320423, 3.5621047687812557, -3.4741612771047636, 3.324748317571744, 8.996614205792751, -11.020291727957101, 12.081427681651697, -8.8928631203159583, -3.3519010114052263, 7.7902118547439443, 9.6608001848411806, -7.1066822779231593, -18.837368573809297, 6.7301895647238608, 6.7933629603091008, 5.9697810424393483, 8.344011991064086, 12.19791145343228, 9.4167774696594435, 7.423418316685729, 9.0291842080564226, 12.492983259925982, 7.1203329881309401, 9.8776999539720336, 7.3657220051725565, 5.4066464900536131, -12.553405951140983, -8.4918025628237199, -11.352365915823617, 14.756685666538061, -8.0938336502539876, -2.7071697789206022, -2.4795849849319289, 14.778716053676311, -12.149933491676437, -8.5931326392610909, -5.4147618905983697, 1.7095221079392837, -12.75286957597447, -6.560818125727109, 5.5288804134600262, -16.774264848727494, -10.397477377823613, -14.47470382199227, -12.095199384731899, -0.68504635593676977, 2.6623689185177528, 13.264791388391092, -15.654931986196731, 6.1276196890542334, 4.5068190091793028, -13.394637229913476, -6.9231832293793651, -12.113429033794846, 1.2142140703098925, 8.9363539352870394, -12.687063373304539, -3.3458614784673091, -3.4123481785186587, 17.559631253372945, 13.470764559481434, 5.3912902961422002, 8.0737946505557545, -12.755710856932868, -3.569697890412812, -6.2613535644882905, 0.068556269783912271, 6.2629797657916875, -9.2663011036090968, -4.4829975567184634, -9.6136989537403004, -8.7663852688801143, -13.974856274599134, 11.407302219619563, -10.302223327202944, -8.9771589068473983, -6.1388609170833384, 4.2370800072671333, 1.7760515525196516, -12.120232639630231, -12.958157445638765, 5.2985241644932541, -16.484657731002855, -6.3532421360393387, -9.0395804464700298, -7.2671128749847744, -12.616882711750195, -4.9350723080331012, -6.6905936282318637, 18.568407538602393, 12.530577696234687, -9.7889565176657243, -15.214958325061282, 7.215674131215513, -7.5394667988733808, 9.0137713371297465, 6.2553392643094785, 9.1953246360263154, -11.131787953429392, -5.4020937991353657, -4.0642543197135739, -0.44036236539366824, 8.0650609441874703, 0.85520780385748785, 7.2621337620159085, 0.29865166967486761, -9.2011814546979203, -10.330862011400864, -7.3191138151867943, -9.4852558149271111, 14.762260259194324, -5.0853268103463423, -11.2925794883785, 13.026909781206733, 7.9504343630905412, 10.148928930852414, -8.9032450603232327, 7.0914762951954913, 10.89340681888671, -12.705821222595254, 13.126012326275292, 9.4442919029362749, 5.0277440210736879, 0.21756213342494518, 12.710361373031621, 5.6453651213768019, -13.49634180382726, 6.4754225359227204, 9.6275804629486004, 5.8125840672452975, 9.7028326962213836, 6.1260130958734562, 3.3623596073706641, 10.736024757333299, 4.6569987032041826, -8.5021099021622799, -2.5832378575026125, 17.984880998940056, -13.974611077713172, -7.8550941092339874, -2.6917314432377575, 10.825283872831294, 11.217940706150642, 1.8301222470027103, 6.2062091666111812, -12.440863506480019, -19.955292055354317, -3.6699151522797462, 2.2154324244303956, -3.7363628672311142, -10.271027034445964, -9.2862432349117547, 9.7847963699436011, -5.9471830363214551, 11.139859339322513, -9.2599913694963618, 5.0422863933763367, -7.1141487133220043, 4.2177963601947308, 10.657785123505857, -5.7952000401674324, -6.826355874510365, 8.7268751949597245, -8.5906649209875745, 2.2758857640658201, -6.1665377492933358, -7.3104026599884433, -3.2424605164178031, 16.796591996286164, 15.671215006757382, -7.8445348658392806, 12.2589312976831, -2.5670307012079139, -11.537316744819945, -2.4858301794672331, 5.0542510171190438, -6.6860957990782133, -7.2619018024969462, -6.7329842279273242, -7.3146812058251234, 8.0821157274412183, 2.4005920765968378, 9.3157871935284753, -12.908851857280949, 5.2927115546650425, 9.9926730185778059, 3.9229860372333749, -5.5126846245121035, 12.313688019948762, 7.9681453222519041, 17.181368769149195, -8.962498225939207, -11.548950041024865, 12.014544817430894, 11.485639169870186, 11.939774664713912, -14.36069895314143, -11.812874687185857, 12.249194120883461, 4.8839501930831242, -10.540165871108648, -14.829380396239381, -6.4665012687326051, 4.7430459960995295, -7.1378949876943016, -15.357105375923917, 7.3351294975306445, -9.6095153441695373, 4.381145332149095, -9.2910048695861427, 4.894239034759102, 7.864879034656453, -8.3265429253416077, 10.497214061711553, -0.39338042557070996, -4.4611306847986816, 0.76940119561902198, 2.3535542193708272, 10.459438806533345, 9.4938186880252005, -6.4805717587307994, -13.457392617761585, -10.487085219177404, -9.8506932711478576, 11.274019685851906, -12.3031017274995, 8.3324030035106826, -2.3013116280481358, 8.3664075310158825, -10.402109920341072, -5.2924293563600742, -12.008098192077149, 10.992304106359162, -5.5591947469243506, -12.838234842015352, 8.1682577157065577, -6.4919177172949487, 13.568876091933316, 8.0352162745849594, 8.7834139460450125, -11.335870474093099, -10.790767171281415, -2.8875937626970223, 14.64505222675956, 11.436743007190451, -2.9337339836825955, -12.707240342338084, 16.661129912274529, -19.171798326126961, 12.280144746488103, 6.5975965145696174, -13.019719338217644, -3.4328503704209457, 4.822535491209953, -8.1340577921572415, 11.549182216506546, 9.6431724916100059, 5.5547407614902173, 15.019668995173307, -1.6514898426907461, 16.110709054474917, -10.9397931999944, 12.04576668183285, -8.4818868311872198, -6.103248438757908, 8.2975079067215702, 2.5480181038085412, 18.799878298920927, 16.231939791740228, -18.011602750805633, 3.7139764502467689, 12.751595841360283, -7.8718015936255812, -0.40802815212428428, -15.47812599016518, 3.2584854200798588, 14.976391986507007, 9.1367378814346782, 3.4155780056910059, -13.292285487599507, -12.855991908912157, 14.013291588644732, 9.6911017234399335, -5.8910196575740752, -2.2280612655108047, -11.219438047247786, -2.5955623953948517, -3.4460676112793136, 3.5682986120247073, -11.70300520092221, 11.99455548751415, 7.319096625369828, 8.400961847094683, 12.142806695044221, -3.6775894169196279, 8.3797255658565142, -12.156985373281584, -17.475193610019677, -14.228116929396922, 10.726007504360073, 15.267119384103992, 12.781072511062279, 8.0326533999697229, -17.51207194760946, -7.554034280962183, 10.066411068992132, 14.13799652436988, -6.7247334837075705, -11.112518294834185, -5.7326833292155523, 3.6877552031425131, 8.7105204152043516, 9.3857694378580963, 19.127569440965896, -3.8614826162666089, 7.9404471399280068, 6.3807591097483005, -6.8888859894612535, 10.317928637508684, 2.1736529765433783, 10.953222318849482, -7.6682531128958038, 5.0318286636058982, -6.9463690764775503, -3.0184853792276383, 9.6041512562391542, -0.88225262267439808, 6.4852292067129724, -2.3181001351577644, -13.197351056460056, -6.8047677874499586, 5.3843074707174692, 5.1196343577870644, -17.820822197855577, -12.257015718775355, 5.1913937352654651, -5.0162460867599536, 9.9461758050913041, -9.7414598652248081, 8.1378256819797858, 12.564281794378495, -5.6365288176451322, -9.1029468332924104, -5.6355130288814301, -13.719331548944416, -5.8613058178495017, -9.2573519867695815, 6.0620773131346706, 5.8947778726542905, 11.265652594812099, -11.760986024368906, -7.7447348268870124, 19.076436411627338, 14.505720191829832, -9.0750817120358054, -5.2025480400034789, -3.1960162333402482, -11.659437264119374, -7.9842387274926709, 8.5980388295231229, 14.858752059828165, 6.8639263237417376, 6.0631638589074024, 2.7093921939507379, -4.9581002755473795, 4.4179924464321392, -11.144868427484562, 12.546476704938177, 13.606433000436612, 4.0208619807458295, 6.2408832155761376, 3.0941528835943455, -11.347668662075096, 1.9313877794966201, 11.65105372954261, -14.681336156121709, 7.2969958167198605, 11.59264621157577, -8.831465763669156, -12.759130509205734, -9.0714254556796128, 8.9948895559776467, -8.3736028555285831, -13.115027308542444, -0.21628815052066303, 7.7132708674061705, 14.055053470061472, 13.370601410874029, 3.3283307501026052, -11.9653642849229, -5.6440590777489144, -4.2508984635752549, 13.005398229132568, -11.5296140873405, 11.286858942494266, 9.8110403874583074, -13.263569122014866, -6.4297799553106456, 7.9672918799786396, 2.1515462864377719, -8.490571668881163, 7.5548103934198929, -13.121628447449439, -5.7901204816768361, 7.5171762671769704, -5.4216710822831979, -0.95140907859749113, -5.6992105242986471, -0.91737830538166343, -8.2053563541920571, -4.9100295191078036, -8.650093905400162, 10.400080220873763, 7.2829351923330092, 5.3481291290736603, -9.5017802399357425, -9.8687523002255393, 11.82329840938681, -3.1919281246249707, -10.124868011353035, 6.8360355157042028, -14.032171223888698, 18.148403140529073, -9.5731633683674744, 4.0453611070899935, -4.114147796015585, -8.4912512496909898, -7.9968991599686872, 12.922672789580542, -6.7315939113482681, -16.414580925551139, 10.417406116722118, -9.5795995211441394, -7.974905790034116, -13.727944328842275, -15.024522822723423, 4.9026741637309703, -10.662764572620276, -19.122555879539242, 9.217115643469544, -2.9661166430929642, 13.154514394206242, 9.8788596316167272, 4.2669291411005252, 10.239868792823961, 0.50928446540137651, -6.9544644508051245, 2.9807945285095245, -8.2689690969205181, 3.5499295458600972, 12.732733620631645, 11.61935741986054, 8.4137329217700945, -13.703811206903364, 8.5347899814747166, 13.941804015126218, 11.213731601489895, 11.550008187296406, -10.885532785062049, -6.0320756476152395, -7.945602926688589, 18.178022024827495, 4.2378890109434684, -8.419937978328889, 14.273513193884424, -8.1801725060827586, 13.690183625733544, -17.518387733265431, -8.6392702216784656, -13.927446312699148, -8.651607062718659, -12.712917239643309, 15.009792996204254, 0.15853783962329626, -10.462310302523948, -12.535567399778486, 8.8192610919401329, 13.066656030822525, 18.005415525102343, -16.007576967175243, 11.052574245331391, -1.1810954342450888, -12.762633127175347, -11.427571726679494, -1.8068233566411038, -3.8651597939182674, 6.9028603232990591, -9.9188843352819767, -13.607089316301986, 5.8989769757503172, -10.266998033319117, 12.946619994251195, -7.3433271276853551, 13.594756446262442, -1.4802835189751626, 2.9459432512420887, 9.0127453411993006, 12.34274116102957, -0.99056567004691576, -1.0211228826859517, 10.87969885601588, -15.669877762479704, 16.01192464298973, 10.789218207135569, 6.1523737440350752, 10.844976713696601, -18.796538678004055, -7.3982730413954201, -6.5213519941388851, -18.571369340190397, -9.6913300045155282, 1.0175474995943568, -8.0705533615168754, 14.251221745808563, -14.054781652173469, -10.906074448438877, 9.9932114606110058, 9.2204934537976815, -11.102967677965665, -15.06146952578059, 11.282374133246716, -3.4111780254645643, 7.3857075662336609, 10.330601600777463, 5.6502615537426548, -7.2776853004382911, -12.041052757776699, -11.046289906579057, -2.8519140526114701, -14.358095698121817, 4.6207960341417813, -12.368837238636017, -7.2377430770905917, -7.1306536664479809, -10.374815173234571, 7.5287331560402384, -5.4660620697715716, -13.441122458297521, -6.5962962593129824, -8.4930653390556969, -5.473757203858737, -16.42318744504734, -7.678902139771755, -6.1724752873292612, 17.227224731420481, 2.7992443468423089, -11.010643413583562, -6.0460973993600238, -11.514094016830022, 7.2250024006000091, -7.8426213114387204, 10.647716150585898, 5.7539405508617296, 9.727218535739766, -10.217949794886991, -10.197658817694322, 1.4534950594678713, 12.10682632749001, -0.51088307163622715, 17.710760548825679, -7.7470194812395397, -24.372971692573486, -6.6052580469808717, 8.826482956514015, -6.7872955696686779, 3.6389619856040674, 9.9237321927880782, 12.100520790781362, -6.8842633676573595, 2.8844843405481937, 13.672108533544661, -5.6338295492883859, -7.1944131155704678, 6.9746870716875398, -8.2312590639291852, -10.25205738032861, 3.9564297173352139, -11.16342115946062, -8.4103856915642865, -3.86058459788803, 6.7693385059336668, -5.5093604081945458, 9.9112156966838256, -11.829917793796264, 12.06350448472004, -9.8908904770778552, -17.725516485129567, 5.0710728367340741, 2.3733785626266992, -12.373813495428958, -8.2010211819107539, -12.301300323962623, 10.576063861117305, -2.4429576335852246, -9.8126936984062763, 10.720987427999063, 5.3468144210345949, -7.436093608771988, -12.085562323273949, 9.616133130427178, -7.2337117418265358, 6.590012489497771, -12.933819456719151, 9.0992320680750058, -4.7115096872358144, -12.444448996962361, -9.2431835291508904, 8.9400870181220906, -14.84487535501597, 6.9572855730306786, 8.679259378600257, -11.728117564638417, 11.57774167266283, -11.089244669418909, 4.4545841055164113, -10.471036138424958, -7.9268850048012363, 10.006310688982033, 7.3307629546995496, -0.70086411051328346, 3.4399790497959652, 7.5780305602750353, 15.952535940468001, 1.1236075069228646, -10.56946563987197, -16.455271371728593, 14.943737550316991, 15.270538328279843, 1.8246123975329285, -11.861267836196021, -12.897409417413272, -8.0295182717849976, 2.5085092290718261, -2.997769928368061, 7.7106512520538253, -9.7986312114017196, 3.8597867083890951, 14.715042117673541, 3.6286772784703238, 4.6804229784596041, 10.468442660987332, 6.0309605373905297, -7.2836222700763322, 7.3372979832476464, -9.125874340732242, 12.431154776537063, -12.652059501141041, 8.520614267493885, -14.669291764198016, -5.4369263583494511, -6.9272239504642288, 14.411503339302335, -6.5090359387453871, -3.8249288367587844, 6.226877964919483, 5.4872378813688707, -12.071286274848809, -14.839631376528764, 14.929556186968613, -13.550466083272015, -17.79040452965922, 5.2176515285150078, -8.4073909354978511, 13.152357868676932, 11.880434179671278, -15.154722117187848, 3.3578570344364098, 3.7992951070371852, 12.544849221875657, 4.4664223998223864, -16.02563218730095, -16.858694781271584, 5.8423687431569373, 14.717494305248145, -6.3014233972716296, 7.8246512200173655, 0.2490959399462627, 10.09774947224876, 8.2302536611399972, -2.0230125836350608, -10.877543890130998, -10.315299910440396, -17.814418691884743, -4.7984509876179366, -10.569732541659832, 12.468245506360125, -8.1994351150315588, -8.4938440033843783, -15.646554844352739, 11.104862652426069, 5.4254710709054565, -7.075912451839514, -13.038488980503107, 8.6283602505517099, -0.1897762834069755, -15.926221800862628, -9.4620561439869952, 11.028601034997564, 6.2202218101379954, 13.01838761394424, 3.8814455959068872, -10.571348353520641, 9.3930545668475638, -7.4486485829571807, -15.896920034679038, -7.6634637506716583, -13.744383772875613, -16.289316553121051, 4.2240572521775093, -5.9728476753105495, 1.4435980912356212, -9.482201269588181, -7.1075995048298424, -8.4496788887326719, 5.5233585701859731, 8.8295065675835449, -6.8321409197770491, 14.622652588625614, 8.1030077299922656, -5.0997213512339847, 10.535820013561885, -11.687469584683409, 3.0547169868379771, 8.210959869395893, 10.201179428221021, -11.658463276051274, -13.563724058479169, 11.01039677555352, -7.1382476676607203, 14.955134349802455, -13.750666848543476, 10.162311270235616, 5.7884645703783697, 7.3371242692507819, -9.6841606635170585, 5.466449250298048, 8.4163518309029381, -7.1508542487337046, -6.6797959016182888, -4.7449989886325188, 2.4393509869405792, 8.654752655597532, 10.070879973393719, -13.17581052395726, 8.5470611298539545, 6.660259185215466, -6.0653871786400737, -6.5193717691612134, -12.615899043092323, 6.700881216282939, -4.8478946577189745, 5.1988868211607864, -12.549358461765644, -10.045744010088018, -12.380860324318006, -3.8616068170109248, -14.465705737907983, 0.4164829268257374, -17.143567612135136, 9.487366827722223, 12.652721901108753, 0.7645899772346989, -11.920812995054151, 5.348021509175628, 8.3879926788022008, -4.6246359904401313, 11.089899173175201, -3.8332542947304775, -13.36196018971258, 8.2464982273107097, 14.657515986404208, 10.904966172392774, 11.533578255944192, -13.982006985588614, -11.973821478795168, -16.592644946389242, 9.2836692767439004, -12.678645783087854, 10.730932446196368, 9.5849200107862327, 8.4498461340685918, -8.6907116625889529, 14.156816081594213, -2.5856081507256512, -9.2993749691896994, -3.6239666126178607, -1.8399557052395836, -9.9970546829752251, -11.017332480853435, -11.692178962270885, 6.3025733321249016, -16.175906955071767, -14.423994620868056, -14.689511946206805, -7.2353003125032167, -9.3660212630661839, -13.858073820033896, 4.7709918994882639, -6.7026088232668739, -10.527782639004828, 16.58828557927492, 15.050247187970289, -4.0564185563228934, -10.640020339068798, 5.0431846567205971, 10.934348304548614, 0.75988821460881439, -10.291366703091549, -13.942020188031572, 14.135017480152827, 11.151498767692816, -11.537353350061172, 10.343082453782436, 7.976541387752091, -3.5774431227145778, 6.7912849734238856, 1.8417106851238594, 8.8764923317563689, -14.359256236175909, -5.6171451890921933, 5.9817930874266256, 3.2031461221092781, -3.5231009274983971, -14.863876345356418, 13.612377512426715, -8.9030335281364348, 5.1285813990983709, 4.8771312118802621, -3.1813763041012044, -8.1658030154444532, 9.2635478384894121, -11.938316318486482, -10.581389864174858, -9.041740376889754, -11.289532586451648, 9.8541909326330934, -10.813754378648875, -10.992626098956032, -4.2128060145436059, -13.803513190675977, -3.4047166821717285, -14.699309096179331, -12.322199151029571, 1.9847013546589598, 3.443351936013523, -7.7412573332668169, -9.4014738152531816, -6.0936722951459252, 11.249057062872248, 5.3612317349290048, -6.0934505412619844, -10.329491262921293, -8.3782268065652321, 10.610705115588038, -7.7383153101209938, 8.5683043797354852, 9.5214421313463742, 9.4646448974772674, -15.945188235432587, 13.571842719150663, 9.1766386061343823, 3.9788060864638335, -16.400242920289237, -12.152955170027367, -11.743525499640301, -10.778431692576483, -9.560949750398839, -11.274506489189537, -10.497378072608422, -11.313774108583567, -8.6889440492171826, -16.999837953521492, 2.8463220500405759, -9.3414733746083147, 14.505309388696032, 7.2740770646355823, -15.216612609375215, -7.7754295642857443, -7.9668693810493751, -11.838336074962589, 9.3302243430363134, -6.1546909317578038, -11.643770269023584, -7.3067290482575826, -7.6586644572207598, 4.1554355791738411, 5.5784827988725025, -6.6788226812914591, -10.099712087346221, -6.812608788772855, -8.6942723276748133, -9.1414982497263626, -5.5404435688554674, 13.782301424897506, 6.4913332097552408, -14.843570407301076, 9.1090159582398744, -11.810479272023766, 10.734632284091132, 12.106233609286406, 1.2074129428018001, 9.05135706765188, 7.0513320487712221, 5.7063731455704252, 17.827025603920255, 8.2204534825947988, 6.859838386896449, -17.066087459633668, -10.546186910811119, 12.544407506754297, -10.501953033608231, 11.631217929282226, -7.3247345033456455, -0.30451282566541621, -8.8097804299616289, 12.580754884209387, -2.4535950387210703, 9.2528280654920945, -6.6762373246501507, 8.5487856314147361, -9.8862934311079176, -7.405954429775278, 11.460818356885351, 9.4241123506707218, -6.0650535086957591, 11.749931801221361, 13.45158323366806, 8.509266618399371, 3.0990921451133864, -11.845686618745093, 4.6809017476948664, -9.0788995203187035, -14.154172714949322, 11.436663871420148, -11.686823110591192, -10.466322347645878, -1.8093094588126659, -8.2842513297508678, 6.998530934794041, -2.8130875381789773, -4.7458503858358174, 14.892214325455083, -13.297630549395505, 14.137398522674463, -5.1741407656371132, 10.811880263388231, 7.6909240450423546, 1.2020066622797796, 8.3882554040760446, -13.296889605096078, -14.12122762385526, -0.86913405214011996, -1.7012640446050573, 12.135944269100591, 13.696947616128121, -4.5178290393967648, 11.379039879071998, -17.142332699109016, -6.2502893853176538, 14.551005043468933, -15.922443449630226, 7.9749887358427554, 7.5006183839537428, -10.731307185445075, 11.828405368248815, -11.242740313773945, 8.6857287401789396, -2.3357416563180076, -9.2522949403141723, 10.057172114119057, 4.2142804964077794, -7.25445812349398, -4.7859211707096279, 12.212717205630641, -0.68060465039856421, 8.3585750011161384, 9.4355684709667997, 5.8736217498953929, -10.357680904873, -15.182609723791906, -10.528438249903205, -10.728845332160351, 4.4271186570969041, -9.5459159618972773, 7.698786708464044, -5.7616256574906473, -6.74427916594568, 5.0713712230747952, 4.9757324493057258, -7.5822193975454732, 2.1521506074067127, 11.702619296651129, 2.475868836880037, -8.5152128927626887, -8.8176272081621523, -6.7396490012107382, -7.1103087325178862, -12.249044472908748, 5.7223187192045835, 6.0785970538718885, 13.311388408274434, -5.1967232459428514, 10.616058764924363, 4.1131834199366937, 9.1157637550044708, 5.0981827919094043, 3.9623438215809581, -5.1277684895200872, 10.717366089367347, -9.6119167010571456, -17.671933631733026, -0.93466484572541053, 9.4511618566836688, 0.51145591409598801, -7.4842698912260595, -12.965780155817985, -11.049283246505306, -9.4204398537725336, 14.713331608978752, 6.1294522089617445, 12.762571544243462, 4.2519976479727246, 11.581799865407062, 4.0540310044195316, 6.7583036711124178, -8.4596629969850596, -11.555561625120337, -13.223361797635503, -11.022881346403601, 7.820188150462851, 10.050313550691401, -2.8748772822692796, -3.975284267526737, 10.165011610963463, 8.361153496598952, 10.23454765876409, 6.9861352278001991, -14.063066120834387, 5.5703634980353156, 4.5720288674742182, -10.208336872812145, -3.8841964569917136, 15.871358616035476, -10.375333061106602, -17.028934392886523, 9.6095097993772214, 2.8612197492337277, 7.3984151374847418, 12.882442279479097, -3.8593872267618985, -3.3505651418910092, 9.1400352361857795, 3.4607159608677991, -11.802758101252648, 16.131696084668302, 4.3485520924992915, 4.9299693363247012, 10.20608409504235, 11.350181288635312, 0.71079817132091727, 7.1011529322063716, -9.9921413971440192, -5.8089676277937103, 21.431868331238753, -7.0747060210352215, 12.069527047899687, -9.4828998378865119, 10.122263948520756, -13.538606127789073, 9.6375976702501429, -4.4100604567201094, -11.99790766311845, -5.976372779813337, -8.272146596627568, -8.9450436886845743, 1.9542103075796229, -2.5876227697187235, -14.368094001362385, -2.985471188013614, -2.478307267502168, 2.7456040916726456, 12.581031236480218, -11.4758779722525, -15.599590155208737, -12.992869206559288, 9.953747866291776, -11.025999481843595, 9.7008748889831633, 9.4677048052865693, 6.0665148799454283, -11.021027787278838, 4.1148665510329865, 9.9715457939675805, -4.524015231428284, 18.833454602793879, 7.5018420072802252, 6.536477074456216, 10.39532612887518, -7.7192567198190574, -5.8633746049064728, -9.4739325485451946, -12.966876834521914, -4.8932353347242916, -7.50082678824488, 7.9240662467055403, 15.473285728117284, -7.874821177550495, 3.9913525758800343, -20.203393732375613, 13.177667766939793, -11.905585671112627, 8.76829420558043, -6.6904194950549218, -2.0990812946584643, 16.352167450942488, -8.6839871579774304, 0.65535704062993771, -9.0914298192610481, 6.226432112620512, 14.414606788199343, 5.3327990949329722, -9.2825422873145076, 5.2444348695624967, -13.52476436519694, -10.565017103537128, -7.9458267805510605, 6.2385267794539532, -10.620897086888419, -14.02491825647715, -17.249193736529822, 21.822546537373011, -14.525572761291961, -9.6352912168501117, 7.7923236942745477, -0.43905931375127905, -1.1677511335028592, 7.9195608711842009, -1.7261157613467151, 0.81574419315180335, -6.6258630940789853, 11.446710993602048, 10.423767215464459, 10.131515821910522, -4.0813762630157786, 5.3099875815632895, 15.005238483277349, 3.9458100113193013, 12.997541564501073, -13.401349640520106, 6.0898523220056484, 8.5430795315739463, -6.727566986421512, -6.0976964106078926, -1.5514248251358895, -6.9251342133096534, -5.0010498589221326, 19.36294632958224, -10.995748094036278, 6.8230876895289425, -8.9816761374312737, 19.252689002798032, 15.018231032342973, 0.75032883111291693, -10.512852145797988, 15.952636394768637, -13.876019658000088, 7.4282002133627536, -15.007337649734009, -20.867628639436518, -12.864466413292632, 12.282886216105501, 5.6117260976193588, 7.7243055425354985, 0.74537471606410499, -8.3753274103443793, 8.7297402808334041, -3.8752359373415373, -7.8660891683218042, -8.8027160564205786, 7.7988010166838881, -7.8129632889899385, -5.8353090570942738, 11.438552747844, -9.8854956847581263, 6.193488211617348, 5.7060858140643864, -5.8417400083956581, -7.1659403388854175, 8.8621684734697617, -13.828395956746165, 11.58722476958626, -8.7757625064865632, 9.7638601085689327, -13.63897121774294, 10.692146632523938, 9.1954815513953641, -9.7262358263602646, -3.0742135000084518, -11.831625275045802, 10.346151064081882, 13.860225574621548, 5.3434462647847401, -12.667486708061194, -7.6071393527596891, 10.497824234551809, 9.1398524858692305, -4.8312688599490299, -9.6866353191391568, -14.936854315955886, -4.5645292398393735, 10.306087472805107, 16.435616799434957, 9.7618939189542857, 7.3359442918945499, 5.4777235052650965, 12.827631906540597, -9.3557044067803972, -8.6207571310957753, -6.9067986860795303, 9.4266173165645881, 8.2700014055707438, -14.396299560527304, -9.1945433850102294, -5.0742673058143186, 5.9363570201246212, 9.1825801770474449, -14.26016478123667, -8.9647881473585791, -10.999991358949853, -5.2643587807317358, 17.966460043223208, 4.5038323715849113, -7.3643627119764705, -8.0021495622334466, -5.5012765171131761, -8.6385795076142866, 10.642859565399243, 16.418157809689014, -12.558310319227193, -5.6944436186565675, -16.620579134203229, 5.2993074909249556, -9.5535858720998252, -6.194850562303122, 7.9283758132069577, -4.3938243314441445, -16.08461551423154, -6.1053020627578558, -7.8156662613007883, -4.2010902685294225, -11.260598796472106, -17.361798229363732, 10.523477968271544, -9.2997205134904561, 4.7239785905440819, -16.55663724338849, 7.336212674126954, -6.9284736037251049, -5.9733477242286268, 16.958437027673817, -9.3688626284447736, 12.335069283139083, 4.4003768017589344, -9.6375650205771759, 4.3025216992304607, 8.1709809734149754, 6.0840979096543046, -1.7791701081822009, -9.7212268065403915, -6.3728373407996992, 9.4709301635928664, -9.8099415495718265, 10.216669472304444, -7.9089613940445638, 9.0133309428613888, 15.233159549099527, 14.443197589960937, 12.315849008505751, 15.22683390790605, -12.204208274855294, 8.0545420942912056, 11.261686524342778, -10.088714704911705, -14.758394330397744, -8.3506925495196622, -5.7190575904160488, -10.474095362096637, 6.7558531383042801, 10.839875782803038, 9.6223187492013871, 4.0011315315627671, 5.3452889051100145, 0.29628684358052387, 10.260560792716758, 10.010269925150098, 12.309818259037518, 8.3443036587520112, -5.4014577244395916, -12.309450717768483, 6.227119823086781, -0.90098300040336077, -5.9574142236058796, -6.5290358544134426, -7.443075641870017, 9.5718761708906559, 5.9045525168917088, -14.09287394192167, 8.537557668616758, -14.160598968888243, 5.8051719496039951, -6.239975019204187, 7.4524259174698209, -7.4731349725176219, -8.5239733925114809, 16.110254200184002, -10.257968713373153, 9.5898379203607735, 3.4675905258102322, 8.1300367938993361, 4.7762632339122959, -5.8974433337845085, -9.3140122423426206, 3.5847848816848376, -9.5355250106758724, 8.6839175133173008, -6.6948323819511488, 6.7933016290691377, -6.3800902026507824, 0.76093699061175468, 2.6435457529778015, 7.4138748481937027, 6.0247308500592567, 5.9280863177297123, -3.8920878288506016, -8.4621386416944677, -18.750651564949948, -7.6188990491921116, -2.1334205811758622, 8.7540093304816082, -9.8600851053842149, 16.342033110995256, -10.800872299968921, -13.998298573757474, -3.2934871871896396, 14.06180118603365, -9.271874228911658, -11.048285130582032, 6.1595626190926716, 8.0570216147192557, 0.66340001966893403, 6.5132884000227351, -5.4201122315987309, -9.7412562635013984, -7.0486139617141514, 16.981384687745692, -8.7022380510622721, 14.647877845477861, -8.0820055541788722, 7.2226523022245761, 5.3790569210687584, 13.728807132743302, 8.5317048523035623, -2.7316549253863927, 5.3846139594020226, 5.4103146460176523, -6.694268736004001, 8.7300406717059573, -13.347383859719848, -8.335174873152722, -10.945696086225201, -10.4875598953527, -6.2891459907155456, -9.3671321709341981, -11.585498988590738, 6.512870728010193, 6.33239714027453, 8.7682544573530521, -6.7439993019333704, 9.5026784978124166, -7.0246760343330656, 6.4372813340255446, 8.1945894173399711, 10.262887249545706, -7.5060931723177706, -14.674750300787338, -13.287289997793177, -8.4928309129257595, 7.4563888548291644, -4.5195874938690226, 8.5442291590063935, 9.7115273312730501, 15.092119744113154, -6.4263051953856785, 0.12831365323535676, 8.7640439297438597, -6.1460218943241305, -10.889755958467752, 13.67769695151666, 6.312988951937812, -13.227320725213115, -11.784825668882982, -7.6748667604861192, 7.7787450544407344, -9.3711259762266828, 13.023365017019263, -7.0200584128511876, 13.494925467734497, 4.2227722997626005, -13.760223253172747, 6.1777636365323456, 12.067306433588751, -9.9155428829691132, -6.5766064428842856, -15.151662906193899, 9.6988065214723864, -10.152731302282174, -8.5735676931961322, -9.9418795299730185, -6.2260760507460198, 9.447544122507308, -8.1319644337468215, -4.145324424570318, -3.5485961822808565, -13.467769122062073, -5.7514070303621585, 4.2372927865136871, 10.111694661148967, -7.4186471554037379, 11.430760000153063, 12.312843067890855, -12.810688665750249, -1.4448074235360808, 7.986361807585828, -1.7676683131382003, -14.521209725348982, -4.352705664193615, 18.914853195668275, -1.5113121651615482, -3.6397864185997131, -8.6196558356553385, 4.1199321080626019, -8.4888399293551817, 0.57614759104880209, -3.8170562650576274, 6.5118953364681147, 4.0953213386352472, -5.3421050165325257, -12.272356482934088, -3.0358640779517354, 4.2481637384966975, -2.7752337082527849, -8.0160326885318369, 9.5768553793879043, -1.8524775210440534, -11.009861394679287, 8.9742068648070266, 12.471334080830026, 9.9992644688047552, 8.0039800551702207, -8.7981872925635614, 6.6433407975833738, 6.5480704488332835, 7.2841246634294423, -6.3252439319780178, -6.0513426125451124, -6.3988334931556485, -17.469331458693546, -4.580254889517116, 8.9993454898016569, 3.2238207283793323, -7.7799510625287303, -13.803751678166556, 9.7121916487763045, -8.1746700971358059, -8.8126126733994941, -4.8155492973679186, -10.804453969532291, 7.0086143651800121, 3.1481410707654631, -12.810183673768677, 2.3362046780839187, 5.744619950986845, 3.8643342874084374, -13.249939418679734, 11.415744222471059, 12.554737671029878, 9.8333778447831257, 5.0957400772063437, -3.9991407502674661, 9.8345770583999279, -9.7368996360840274, -19.449417624721992, -7.5133274868764675, 6.0619042605430966, 7.197156700662827, -7.0063836107615485, -19.263860108465263, 13.028208109141358, 7.1331219897936977, 5.4720228485501652, -7.3579311406347925, 7.1801636071660138, 14.640572831964421, -3.8340913302192701, -3.3062445113231744, 17.400159670258972, -7.1681505547822413, -4.3542281808553351, -8.4546164816007607, 13.421193429578857, -14.905121149794782, 8.3143744117862095, 4.9730046756217972, 8.3532232015837344, -7.5969825424753346, 12.3177910080973, 8.7607875220531426, 8.5127047792303561, 3.5774587189097899, -9.6494548210828786, 7.5331539937229897, -7.4747114284701679, -8.6591660587053916, 7.3468316363038637, -3.622337543593344, 0.47384090625185044, -6.0463560480716252, 8.0499483448215017, 9.7022755442800293, -10.776004671468062, 8.3543427603924503, -5.5360568466131905, 6.0186808121336659, -7.3543970398820848, 9.2806086183805689, -12.230546104506987, 7.4673092848302733, 10.975472812952574, 6.7926415721593818, 4.8749321283736755, 9.5323516120815874, -3.0280886662753885, 5.5571898549900514, 10.226559964818154, -5.8034190385368811, 6.5444311969384019, -9.130374827280793, 15.819448485436817, 5.5538576215556326, 2.8637826501217618, 4.0706674231610558, 6.4597011042272623, -8.3735378854139135, -9.5667300995851061, -13.845901714228189, 12.714093428899416, -8.3628461969588557, 7.5987675327409425, 5.9272125723131186, 4.6950385206484189, -4.8195825770873233, -7.908711363482686, -6.0290697566338824, -8.6859336035752293, -4.5193059923378351, -4.5940077637319696, -4.3311584091869832, 5.3536488354562275, 1.9921280360174241, -9.4633153479117045, -6.6570051760469031, 14.208357863252012, 9.4845107231608647, -7.1832992233853066, -8.8475487049318655, -13.630287949249563, -6.0719107719352952, -14.274798405390152, -11.162105305503859, 13.054901490270078, 12.995371746588807, -13.146715820058548, 12.945646134893682, 3.0460739976722446, -12.155229015360904, 2.7412678887489506, 11.780611735174173, -5.3341954653614927, -10.032480770112713, -5.8447538785525053, 0.52725472542845364, 13.379456926012971, 9.6135830134952744, -1.944448284069229, 9.0502993001659355, -11.346127451101133, 4.2434870682337369, -9.5043367843183457, -2.9775157830606012, 5.4193649803215109, 5.9212605221007886, 6.8739591477125153, -9.3618138585411454, -11.34734301929147, -2.8580136600449677, 9.7314938797272301, 10.716957084696832, 2.261487615173849, -11.936472547545375, -11.596497065616539, 8.1683014049841454, -1.9741314291525349, -3.8079032870338203, -18.998387033650793, 14.785213606318443, -2.4675987407306512, -12.092457768834166, 8.3055089082183038, -9.8880041321383381, -12.17693749962149, -5.6119106856770609, 9.3346742365750952, 5.9978824704833622, 0.13754021975113387, -14.894732183908136, 14.747292229007831, -9.7097733323647439, 7.1041665937562009, 8.747982309638612, -1.1124715705618149, -1.3453533016361534, -7.2336827315963976, -3.3065754079116902, 10.610359888132521, 6.439770888743964, 11.42420401634142, 6.5388842458764689, -10.853598132676623, -15.353822721495742, -8.0675862924724751, 14.459019981256141, -12.566396596207603, 3.4205186262164231, 5.630487549883056, -8.073684341188935, 0.82126057392054652, 13.882060246971731, -11.094144048902541, -11.389801550560342, -10.3187260289045, 2.991571648758196, -6.4911734708363165, -11.245496138683489, 10.9851776336762, -13.130504876870628, 3.7733165504957942, 8.4076079303113911, 7.5529546967120051, 9.1048736341912768, 2.7287083950923141, -6.4019633593747214, -6.7703960792021753, -7.6283872602484184, -7.6359394699956251, -11.153289601654617, 4.0727793884727168, 8.3062884746691932, 15.72392064712384, 0.9811577968163786, -11.722310671012934, -11.342923130703641, 4.6538782013854689, -7.3739066993524025, -5.8947067956510093, 11.486762613574625, 12.413880145399126, 10.786268654735865, -14.830950842039924, -12.718664091764236, 11.838893611398694, 16.960744319691706, -0.90885433404131177, 11.805632469674961, 8.787147329142396, 7.4670599584679005, 13.783711428147573, 2.6889832573487715, 9.8277282208337393, -12.621979239155044, 11.900463485129047, 7.3974913674936378, 7.9790082301381764, -18.460977129782226, 9.6868989422260476, -7.4849707679692381, 2.791279213037106, 5.9072811103444005, 10.027746084723706, 5.481378194108391, 0.94657543605496242, 3.1638084348680802, -11.565804912112132, 8.1295825065418228, 6.2454385368905463, -8.7244225637155086, 9.2949740971114814, -15.413745662976126, -9.2767171742637053, 20.883637553321279, 2.1729042705598971, 5.2123425513190229, 11.260222333457566, 5.4759025599371576, 8.1537344500122764, -12.294121929916995, 8.802476739158374, -20.703918322925325, -9.4123075195898913, 14.838015503157582, 8.1809389421993437, -7.6381202529000944, 5.0731354695422288, -9.7523696522120105, -13.519239387616903, 7.7323479369959101, 12.148583040284464, 5.4807070910189717, 4.8696229713233139, 5.0087903276064836, 6.4402113569592467, 13.277426855835845, 9.6524651881369721, 10.826902095836219, 16.183489895274345, -9.6318043844967534, -1.373132442179763, -11.219593888898418, -15.004319828107285, 18.258393722812315, 3.7354456310459385, 8.0651749744359105, -6.5164044554554748, -12.565266643553137, -12.030885912645394, -8.5404810535779507, 12.314165209697041, 7.2947873166397219, -10.819275536058335, -8.0129408622894012, -3.8121662128657552, -7.6091124585846721, -8.4798365873122474, -3.9868453977970675, 11.38629202057937, 3.5714802941824, 2.9518831049273677, 6.3322250488086071, 11.580034774188221, 13.479927163429085, 2.0786137569475098, 7.9330224326080057, -3.6943001859225055, -3.2256160391289095, -12.811450358156192, 13.541505165687818, 2.6411149013180362, -6.3489619114245244, 13.373338952003571, 12.628299743258562, 1.0027687748564038, 9.2077227922659706, -13.768254699816865, 6.8324600540916247, -14.524379303203943, 9.2715316925285709, 8.7678396133255916, -7.7000840765938703, -7.6752994649649313, -6.9178464084480851, -2.824297046557938, -10.067962153214038, 9.8382780470022801, 9.8343360207768367, -10.442346656794413, -11.531825845771756, -5.6955603852302623, 7.9952115376447042, 7.2796481632297372, -3.9815702225402285, -13.888827599999129, -8.7028698626538308, -6.0635186121417952, -1.0917426165389645, -7.5444189349932813, -13.502585170286313, 5.3738984196649149, 5.1002418292985094, -2.2415640749653791, 8.3993581378656117, 17.872303247028064, -5.7930453662663712, -9.5610560588597515, 8.0594903059030294, 5.9955468570765671, -8.4016643820784811, 16.017479926774133, 12.457791465479348, 14.251050296430238, 13.550966058757862, -8.762120073439311, -19.568799520529904, 14.473633275887034, 4.7150108398434316, 17.622896812791758, 8.5532109821391256, -7.8861564007563967, 2.8018084587073706, 11.238281768369326, 19.036214400042667, -12.627994340787289, -3.229926146308185, -6.2106083456766665, -12.029815325633603, -12.732678066605525, 16.114114027765005, -8.8878875737603433, -9.1952288940063198, 2.9514348736209386, -14.875969949421576, 7.426537438524826, 4.0988218779588257, 5.1048469008081083, 8.3561664083509974, -7.1680838371486972, 0.079559302266173665, 7.234447616829998, 9.2153180384359938, 11.380502523658766, 3.7813665464468564, 9.3571471630839476, -5.6198950965916659, -2.6112846832626295, -13.074922193350705, 7.1458325396315745, -6.8553238201936848, 14.037347515845747, 6.1114574644258219, 2.6233447927944442, -6.6962191818230385, -15.054560815064955, -3.8509653059595634, 5.6193134186600444, 8.4632418525580135, 9.06084843255511, 8.7155312766304451, 14.146656363113056, 9.4485647712524159, -11.894790263269002, 6.3630883640874796, 6.0659222594215532, 9.3423771994935656, -11.56898779218068, -12.569317170483185, -3.1542401369229229, -14.317618053977442, -16.07713062656423, -13.866270731830225, 8.9731628045127234, -2.7568654754219311, 10.650056946180007, -0.38554919912492391, -19.636918428478758, -7.261084813408365, 18.261599502237281, 4.365909470450525, 9.4604701736004575, 9.3379768195852684, -5.9721332777841125, 1.8392337494849149, 12.236588220433115, 10.729755869202716, -5.0163355160529157, 7.8745146479874295, -12.210717308250283, 9.9053843786672573, 4.3176048616878999, -7.1321033170654076, 9.8376099896153644, 13.994875675654404, -11.800822210877568, -12.467732532409068, -4.8096053846346782, -15.806886200214143, -16.011053902031289, 3.3108259217896991, 9.3708906824355758, 4.9387906035182194, -7.2811664484622529, -7.2283659694812323, -4.3994107454794076, 13.986557692605393, 16.267589496305209, -12.5211237853249, -8.6162733581098614, 11.875897506788261, -5.7924040049014529, 9.60395357854315, -13.371234187638548, 7.4044876769030976, -9.9169764629346115, -11.960026798255779, -5.6929530819152605, -14.080996179546117, -4.9741440758010285, -7.2894457453898616, 1.7385165163304241, 10.659988023147882, -1.4616437274123262, -10.074637029156758, -17.086127613435742, 12.235716666711239, -7.9575522168496349, 5.807625236075423, -9.2779276010226894, -16.480345338445041, 9.5297786981975108, -12.287759229285887, -5.793455825490601, 11.046928184816098, 12.263531584491689, -15.868613864191206, 6.1089590101381299, 7.7043039642206841, 6.7725058819006509, 0.19765926454723443, -10.92190123421037, -8.6903416862217444, -3.604954070470813, 10.780882529813848, 7.6342821794581255, 1.819027960022801, 8.9622472070627612, -3.7731185676641705, 2.6511830669363676, -5.936256145443763, -3.5065708446633179, -1.6756694810431396, -9.4457045728120921, 5.1176087336867671, 9.0843869892318665, -4.9165468247185249, 9.6190501542416023, 5.7720688303614107, -8.8665231351704143, -16.776765049597191, 5.1935200585542409, -7.0317717992679913, 8.5952975711448651, 15.701379400382201, -5.1747900955843287, 6.644409479106538, -12.294043736596755, -15.483394542555223, -6.9161043885800755, -16.902160692468406, 13.140408586007654, 7.9585367038084494, -0.60142488467217781, -10.583573691246794, 7.6570812407643905, 10.488467203766263, -12.229594163883426, -12.105180821633089, -10.100333917660924, 10.582889173673999, -4.3524138084056574, 4.1598294177868027, -7.7208623056787218, 9.8373959423124191, -9.843437056863948, 9.2758547221503864, 13.917929858415311, 9.6348606573169207, 6.1603576344825903, 7.2761550553448275, -5.6132644264075031, 16.925921888188984, 13.099232943399601, -12.169951256692608, 8.0341465714582103, 9.5080586839310293, -8.9153040306547862, -6.2778930359354987, 0.65702865949253608, 6.1455975831103666, 3.4956736733487177, -13.101966614043903, -8.4917541060921486, -7.7703858331616402, 2.9540207920840338, -2.8250454453694225, 16.471572201031012, -8.3401753077338174, 8.5209392200398799, -8.4562622463700912, 5.3451445327350049, 8.3227551961577149, 9.5505384761710648, -9.6168853444985132, 7.8088619634040271, -10.010194534199005, 10.407541359870157, -12.730901681260953, 10.062237956980878, -8.301093581147164, -11.221782089013969, 5.0699226682185836, 6.8670809315755763, 9.5183305660198574, -12.477293633009369, -3.0829984725185011, 14.251075736126907, -0.50381312202666373, 1.3945668674871461, 4.4380349292124333, -8.4792849992484687, 15.740298722260704, 6.4916661990457039, 9.8781328856963952, 14.524311425947424, 8.623227064986775, 1.82594923740208, 8.1658888991281113, 19.519909829772214, -0.71626812905103776, 1.7182300090879543, -8.0056305624195137, 8.8667806307632393, -6.8903486607996696, 5.3931378831660304, -14.284745953661838, 11.800779205285183, 11.828892295047666, 11.579327959504184, 5.9644626407280574, -10.637566489206868, -6.3308930175168046, 10.362896991246821, -13.136681551103671, -10.69114929291889, -8.2804076555200332, -8.7620956793565572, -8.3349590113674843, 6.0390086996968186, -0.92206940007654714, 16.688147291793179, -7.7396944231238889, -10.556885976235911, -5.5034713893873217, 10.684323799177031, 10.164740010619706, -18.644906837500962, 7.8255279920941758, 7.1184183927575999, -8.5879829996361785, 10.058536284915368, -3.9577147638427337, -9.4390455070755355, -10.813502747434075, 3.1725069430189179, 14.646645070268773, -6.6958720302719321, 7.1891012020482057, 2.776770380964142, -5.3045752723276198, 11.024688310314966, -8.8716706651748609, -6.2182144207648875, 7.2174155723591822, 9.2363647659736916, -0.13811663085025644, -6.5095852199241193, 2.7850661520962201, 5.7288466875807895, 3.8404238060339386, -11.979694823507765, -8.1566218452888641, 8.4872181623141802, 4.0684730663558621, 9.433119896225687, 17.452359798566942, -9.1852211978356539, 3.7813711040017632, 13.687886395835575, 8.3110503099043083, -12.263855365231695, -0.29265821325473718, -5.7786710506977288, 0.32000221107421295, -13.152220176187292, -6.5995903240006717, -13.649334703564579, -7.5516513340805105, -15.16406327996164, -6.7664832291371457, 9.9511431024063146, -11.833825853245724, -11.726480937964023, -4.6960938337568416, 3.6909792826776235, -5.7241654435325771, 0.84009221550172219, 3.981445765587416, 8.3193977689219309, -14.855487044550641, -12.13768399449228, 8.2575189786919658, -12.482209307351347, 12.288265749008579, 12.92588605732125, -0.89651953932604156, -17.178851924529209, 13.465060130471429, -0.66179931634497746, -4.7361380949519907, -8.5915497494217874, 9.8633923545024036, -11.075503948766817, -11.521258634171812, -16.937563321814299, -8.4089961555477153, 10.316744468138424, 11.068755254870558, -12.812559137681774, -11.716000182253042, -10.794814834414403, -14.695829972179469, -5.7734367211811755, 19.281663549262714, -7.7079679114509911, 18.982133221850518, 6.7278265135517552, 9.4200950070653935, -5.0327780626629206, -1.1472749532062567, 8.9655615288611052, -10.289968622568939, -4.5317886320427014, -5.0717832150149214, -12.403158065152988, 16.054879478569319, 11.910769204629043, 8.8721630995550154, 12.946670225247273, -20.040326823281728, 15.061437997065909, 12.371159663686912, -5.2434241432319393, -6.539600733678907, 8.9759004731301122, 10.399696431036546, -9.7820158235043255, -1.8655127741351087, -7.2564512028104291, -9.2402317505484497, -15.743596514833451, 8.0518221334585913, 8.064389141916843, -5.1750464722524647, -1.2577099412771857, 11.088648050953193, 14.734664098438651, -8.7257834129372487, -4.9071340910761805, -7.2288497019818241, 11.368753439780507, 11.259515603467754, -0.9190234527098583, 10.508309728639846, 5.5014236641516137, -1.0062376510942861, 3.9510038373896794, -3.3772476520373296, -12.298064413396816, 1.1518807046710942, 9.8347990668982277, -9.6697877164226895, -5.1708006319540161, 10.90534178699129, 9.0780310964231923, -11.06717326378323, -10.193153698637712, 1.6370922062264599, -1.599701860652494, 7.4493340597532782, 10.079750519485344, 5.9817167134058051, -6.1883642950981734, -8.7859917448021054, 7.6925693496530796, -11.726693947959594, 1.5292664230077266, -3.7640503328337047, -9.2026303785959076, 8.3703384923817321, 9.2968574133785165, -9.0282964165522213, 14.082662142896044, 7.0391904432891064, -8.1892402659133481, -8.494960679412987, -8.3171594195215324, -4.1204583607408765, -12.464929795412097, -8.2800259108270922, 5.0158695467591343, 2.90504266938304, 5.5802620759772603, 9.6053945607379294, 7.4665086294967553, 7.2836197716168538, -6.0797636096551519, 5.9192672325212143, 4.3197502963078556, -2.5794586298505413, -8.3804827856018385, -5.7616389244014083, 7.5165636982133597, -3.7871806468757891, 2.6957388838195038, -3.0339814791522679, 7.7390014359139343, 1.0179611498135317, 0.57428282151728316, 9.2486809887277968, 8.9851820183067517, -12.322228892543235, 2.1846637256927366, -6.9268224211182101, -5.6465263096341207, -9.8609073169739414, -8.0437109222330996, -2.5924823061626299, 10.799267368908426, 9.5532367964485942, 2.1510949897407339, 0.72813586085734983, -7.6316236927774765, -6.6634161974825536, -7.6995131312161114, -2.6469146283491312, -7.8927242011683072, 7.9686594739655217, -8.0858268153723696, -11.113628935027652, -4.2312391545249435, 7.400536752330261, -15.878877108958942, 5.267992480772417, 11.16296673206628, -17.540164979801386, -14.801126830818111, -11.385201143366997, -14.508310090705075, 14.464207778841862, 11.215905228606482, 8.9532196390944634, 3.1058203222772014, 8.0753828772231113, 10.559485384240654, -8.2414912742823354, -11.714805939566189, 4.7281042573450431, 12.657353257890819, -6.3043093049399248, 5.067000914225444, -14.714628033981958, -7.7444814248447615, -2.5025562382741042, 13.564851064978582, -9.4328409951276662, 10.04126088038934, -10.570084081595921, 2.3444801610493466, 7.1831276221853866, 7.404162681313343, 1.1684082688282307, -8.8884680285241533, 1.9400943416397112, -13.196562462363692, -4.5705203572273359, 11.003636571194738, 11.468673888105736, -10.534610194739036, 4.4477979444487845, 7.3667611650061362, -12.044187016767467, -11.396051178941862, 3.9462512050906744, -12.988661501036244, 10.545881026800801, -8.0309289513402735, 9.9370741830104734, 13.654579804016825, 7.0469488853837321, -10.938942295813185, 5.1800344871423132, 10.882232153707738, 1.2710853105543087, -6.5661242949766816, 9.7776412282696459, 13.321850745505881, -8.1153422577009291, -2.2941713421233958, -8.7097542589155221, 2.2618606797252978, 3.1810406025700315, 4.829995467844082, -8.8230523342209999, -7.8350849175265527, -9.1156429568037076, -11.442019665347123, 2.2127249998070249, 18.018245968154236, 6.7919203279388967, 10.818120665998064, 15.957114328595093, 9.436472994391762, -15.0724442489973, 10.177531220212931, 8.7382348206500033, -7.4439716572652967, -10.135340539629416, -1.5478693068716267, -6.2520881203409369, 21.51870984833112, 6.7814496888686202, -5.4629593689724354, -1.0810664038442734, 11.680093350196586, -1.1684404824410481, -8.8192804660387161, 11.947180907432026, -11.865540708697406, -12.073158010228243, -9.3168616660647103, -10.855717378744718, 12.832277402471462, -15.233827235544979, 3.719489187613028, 12.974696537296685, -8.75959465422536, -2.4475947054420195, 11.313184053568827, 6.9182165488811229, 12.123675956468196, 9.6442923820443145, 10.799907622549545, 1.3696427348286129, 12.109212710737127, 2.6404947713803306, 9.5435762973738267, -5.4268755145327745, 10.974370356637689, 11.459181655827159, 10.228613791177938, -2.0376202581586202, 8.5519223504193267, -15.144108617549279, 10.208111627929036, -16.074632706297336, 9.535346082793712, 12.968894012265515, 4.2926497043948793, -7.6447760416419124, 7.3591604897068219, -6.294066487171917, 8.6661482650382133, 4.3524844886549072, -9.6284187314739373, -16.389868048898698, 14.370574991274481, -8.2963813089615268, 16.504114329831857, -8.4564658970066731, -6.3969858495492078, -7.0522130158545027, 16.328014713505098, 4.0676774938327931, -8.8805902890220576, -5.6438005548253818, 10.887856323753418, -13.497382772819085, -17.229682704447541, 10.177341730428909, -10.959196430060141, -15.892999214486872, -0.39312548358593402, 17.548662000796629, 8.138747505659067, -11.081466337015, 9.3549081143588229, -5.2668052531909293, 0.59145215464277101, 13.865804154173629, -6.7446135707105945, 10.591472647241186, -6.8775928522394087, 0.79035105716724385, -0.83434363179526505, 13.426811179256797, 13.480253964577903, 7.9579945693584886, 7.8687287842784803, -1.2711852125721312, -6.5831626138029433, -10.255988526378117, -9.3721646222445631, -4.5483019698635951, 12.654546996958775, -2.2845772848784054, -13.395748226685187, 10.227730333720137, -8.9275038607977386, 9.2096733075692399, -9.1994549499155589, -4.5768838702423018, 7.4336970353205523, 6.1990136188764922, 5.392562974045604, 6.8615159418299543, -9.9148725697134683, 10.272013543022926, -6.541146389868957, 6.1996539988491746, -8.5702789915391175, 6.0710850780527128, 0.41216255793753664, -6.8452494187073416, -7.3698306482120808, -4.3788198137924814, 5.254192997316685, 7.0651978737141468, -8.3496697717376325, -15.541186410630397, -13.361062248182593, 11.869712905857645, 8.8858662456220436, 2.315280646740792, 9.1370562156627635, 10.612212040886574, 15.723923545841364, 9.3000796832012966, -12.203790919241875, 9.5229433645020229, -11.332560886601259, -11.799762316157022, 8.6718707861873146, 3.4390494326490342, 10.948206478975262, 10.351083327208633, -2.3551385999606347, 3.6593868571158006, -10.912461508095474, 6.3601915796808566, 12.644105697007012, 8.0987317607631102, 6.8425116090817673, -7.8614337809266139, -16.777952262404956, -15.092829035089149, -10.867283176676434, 9.7617585972043095, 7.0699740006630494, -0.80345056050581032, 7.2341098943011026, -2.7901743760803868, -14.023920253719963, -8.6493250885626658, 12.119156062865828, -12.565363519164727, -6.6257256922764087, 9.9530063133378111, 6.2285641482405287, 8.5890710113124502, 10.901661163934543, 1.7011000225296526, 9.2328185698429888, -2.5151197107048353, -0.78814118951465995, -6.3782804075339934, 0.77016194990540299, 4.7860592575330942, -18.091131028655795, 6.6618347947308489, -4.5537746303503699, 12.906362988375243, 6.6637236513957019, 5.4194732758517778, -5.626683563346548, 4.8295291548347352, -11.904932030289029, 9.9944164460741938, -11.027348899069844, -0.014743410131345848, -7.3410368137184197, -12.558702052466645, -9.2966083471503538, -2.8582301845790048, 16.122229949617235, 6.0332133243788979, 9.4423884847579131, -6.7953848219405604, -8.640997496023326, 11.564755524473357, 7.7370575077503672, 11.178600690994582, 9.6609341268345741, -5.0924071871300569, 2.9472182219982841, 11.322674214116185, 17.636604816170465, -8.112421382991716, 5.7980976514734257, 10.587871354585735, -10.207529594090163, -13.012906685255201, 1.6439826301840548, 4.7959168408892552, -9.1817793609379343, 15.910744159295755, 11.988413488939839, 10.225499838967904, -2.1100999951643771, 7.7773391391119979, 4.2070274590049737, 3.1789918079199362, 11.389698381773869, -5.6797986359782069, -4.7261529062162424, -6.1926650154600731, 9.5097255166801595, -4.4005426737892748, 4.8284348550831577, -7.4035564503513553, -10.371755556185054, -11.138214834764621, -11.479591917367713, 7.3492465579271542, -8.6401023000535666, 2.4737379805053212, -8.4391176745455763, -3.5699286239866383, -8.1254703716775829, 11.948227614312263, 7.880462510583679, 1.8623842706739999, 7.3888689386136646, -1.2896033177393418, -8.2116493851785464, -9.0121076446113531, 2.6038276518722672, 7.9944375021940459, -4.3649859784435145, 5.1704186172538593, 7.7846827735959723, -0.51775021699396251, -13.814395914977867, 11.155615752700793, -4.0116122940272048 +}; + +char detected_data[] = { +0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1 +}; diff --git a/libcodec2-android/src/codec2/src/HRA_112_112.c b/libcodec2-android/src/codec2/src/HRA_112_112.c new file mode 100644 index 0000000..df4251b --- /dev/null +++ b/libcodec2-android/src/codec2/src/HRA_112_112.c @@ -0,0 +1,22 @@ +/* + FILE....: HRA_112_112.c + + Static arrays for LDPC codec HRA_112_112, generated by ldpc_gen_c_h_file.m. +*/ + +#include +#include "HRA_112_112.h" + +const uint16_t HRA_112_112_H_rows[] = { +22, 18, 15, 63, 16, 13, 1, 2, 29, 25, 28, 4, 36, 10, 38, 7, 60, 23, 11, 38, 28, 1, 12, 31, 57, 45, 57, 30, 23, 59, 67, 14, 16, 4, 14, 62, 15, 50, 7, 70, 64, 6, 42, 48, 9, 31, 19, 40, 49, 2, 25, 3, 41, 49, 36, 9, 29, 39, 31, 5, 17, 1, 29, 25, 11, 21, 18, 2, 8, 22, 39, 15, 8, 22, 13, 3, 19, 4, 21, 62, 34, 43, 6, 24, 17, 60, 8, 74, 6, 44, 60, 10, 33, 12, 26, 24, 45, 81, 69, 80, 41, 28, 23, 5, 10, 20, 52, 18, 13, 86, 3, 7, 59, 21, 65, 72, 34, 37, 26, 55, 47, 48, 34, 5, 44, 47, 68, 96, 82, 111, 61, 74, 30, 17, 55, 98, 81, 66, 89, 35, 74, 82, 91, 51, 55, 51, 30, 89, 61, 75, 40, 71, 73, 11, 56, 54, 19, 47, 94, 69, 64, 20, 64, 12, 54, 77, 42, 88, 36, 52, 90, 63, 70, 27, 32, 73, 91, 32, 56, 46, 9, 78, 51, 68, 88, 67, 20, 43, 40, 14, 66, 86, 39, 97, 38, 27, 50, 84, 54, 92, 61, 46, 67, 24, 58, 35, 58, 37, 98, 85, 73, 84, 48, 35, 57, 16, 26, 37, 65, 32, 72, 95, 107, 33, 77, 33, 85, 105, 106, 75, 56, 71, 79, 59, 52, 105, 79, 90, 93, 100, 88, 112, 86, 80, 65, 42, 106, 100, 93, 94, 99, 97, 93, 101, 111, 99, 83, 53, 85, 95, 108, 107, 41, 109, 84, 78, 104, 101, 69, 110, 98, 103, 80, 83, 77, 71, 76, 78, 87, 102, 104, 95, 96, 83, 87, 50, 110, 103, 112, 45, 58, 70, 94, 91, 89, 81, 101, 82, 63, 72, 100, 97, 76, 112, 53, 105, 49, 75, 109, 102, 66, 111, 68, 87, 92, 79, 96, 43, 90, 44, 110, 99, 102, 92, 103, 106, 62, 53, 27, 46, 108, 104, 107, 108, 109, 76 +}; + +const uint16_t HRA_112_112_H_cols[] = { +7, 8, 52, 12, 12, 42, 16, 69, 45, 14, 19, 23, 6, 32, 3, 5, 22, 2, 45, 50, 2, 1, 18, 84, 10, 7, 62, 11, 9, 21, 24, 63, 2, 5, 28, 13, 6, 15, 58, 39, 39, 22, 76, 13, 26, 68, 9, 10, 49, 38, 32, 11, 34, 44, 8, 7, 25, 67, 1, 17, 19, 36, 4, 41, 3, 26, 31, 15, 45, 40, 8, 4, 41, 20, 6, 53, 1, 42, 9, 20, 25, 17, 33, 41, 3, 19, 55, 17, 27, 14, 31, 88, 15, 26, 36, 16, 28, 24, 27, 16, 30, 56, 48, 43, 4, 5, 38, 37, 40, 46, 18, 18, 22, 50, 76, 34, 60, 83, 39, 73, 56, 92, 42, 52, 75, 35, 37, 33, 61, 67, 47, 75, 66, 70, 29, 92, 51, 95, 84, 21, 57, 28, 46, 66, 93, 11, 94, 55, 96, 20, 71, 48, 53, 43, 82, 90, 66, 90, 14, 44, 54, 62, 34, 58, 81, 53, 23, 43, 27, 93, 10, 86, 37, 80, 60, 49, 21, 79, 74, 72, 48, 61, 40, 76, 64, 29, 38, 79, 51, 54, 13, 49, 72, 30, 50, 86, 35, 80, 61, 56, 36, 59, 65, 91, 25, 47, 58, 59, 78, 47, 32, 24, 44, 86, 64, 57, 12, 23, 109, 107, 85, 63, 31, 65, 62, 68, 111, 78, 104, 89, 112, 87, 69, 105, 65, 94, 109, 78, 72, 104, 85, 108, 77, 106, 79, 74, 103, 96, 64, 105, 105, 102, 63, 35, 59, 108, 112, 81, 102, 57, 106, 83, 81, 77, 101, 55, 94, 96, 97, 106, 46, 101, 83, 85, 71, 107, 104, 87, 33, 67, 103, 95, 30, 91, 89, 103, 75, 51, 107, 87, 91, 89, 99, 68, 52, 109, 99, 88, 84, 112, 54, 70, 92, 100, 98, 74, 60, 100, 98, 110, 90, 73, 71, 95, 70, 100, 29, 69, 110, 93, 82, 97, 98, 77, 73, 99, 101, 108, 82, 102, 111, 110, 111, 97, 88, 80 +}; +const float HRA_112_112_input[] = { +-3.7496794787890972, 14.372112019392226, -7.5640452729302359, 6.9426063455159657, 5.3103644888713299, -6.9203550501252273, 8.4296575778653775, 13.495087143587781, 18.111520666852243, -9.9125748623510912, 10.601298534930972, -10.468591112149715, -9.0757329437720475, -14.471433733514324, 5.2048820572852641, -11.353785810284556, -9.4511008284496416, -9.5255219979484025, -2.0499245561876696, -9.8739646459388748, 22.03442141444015, -9.9745566449839878, -8.4276711655946226, -4.9811962116476307, -13.018434575859896, -5.3358535334627293, -5.6704294937789648, 14.243964608060018, -11.417925510314507, 9.1332657371467878, -14.380214782394296, 14.090409878618974, 6.5602278279998272, 15.53025696352436, -9.1752771765906616, -11.384503450560766, 12.240329442222599, -12.640059450058276, -11.824715154614376, -13.487656131954735, 15.38073452845444, -13.816294924566529, 6.3461114450644454, -2.5192445130977559, -11.916088712873863, 5.4360722876642518, 0.038031547223147381, -12.367220238860654, -2.747864039796549, -14.920508782249289, 16.487336720060863, -13.290002442259247, 19.142698450560925, -0.39443060583296108, 11.723442316413736, -3.6131702833965047, -4.6196487103817017, -11.794290650694531, -14.342351103186955, 2.8079943208330334, -15.290175151123936, 9.0801740558512414, 10.184385069676226, 8.400722260237572, 9.3504690108712936, -14.223531676384166, 11.752768386971752, 11.36995822251677, -15.285021241405444, -13.070613695054403, -11.869191325617697, 4.3191750845563401, 2.0836933404582791, -16.363829786416495, -5.7778094839806595, 11.06389861779129, 13.285433846434705, 9.2552396418849021, -11.065999403824057, -10.167040394420443, -7.0107225044503565, 2.3886881673282474, 5.0014484787306932, -9.2464083853314278, -12.043309174487364, -11.638411967211738, -16.302815497922911, 13.347129717938067, -4.1390259986125226, 0.7947480277507295, 11.538620744796759, -7.4410706619926028, 14.572449028311253, 12.392747919231169, -3.3027890746379289, -9.8431096813736687, 11.582657487369399, -7.85736442083219, -7.3780721969188443, -7.4006260265172212, -8.3937994980934327, -6.6804071011469555, 19.656301355404196, 1.1084340389939762, 3.6028635453146465, -4.5409495140900562, 7.3831459854578982, -5.5905999874445662, -13.852328482738232, 8.9999210644983041, 8.4742375282492315, 16.989947243749878, 7.5590035165610168, -6.154674423116183, 4.1119120658251855, 12.351217703790844, 11.070972687846792, 11.182587746846833, -4.9345619923565645, 9.0054892370887334, -10.841725474869696, 13.902796293412067, -6.7575171884905396, -5.8196703210757335, 1.9284357540668857, 9.9905382141440455, -13.983067199220674, -4.9130522479706453, -8.2369300184767908, 6.8953565265629644, 2.9285103862640871, -2.6303471135655325, -8.3563361642086047, 9.5712349244763715, 4.9728623009661161, -11.045088919587242, -5.7781337596219604, -17.732999074602972, 8.1353860976076646, -11.066240843831284, -1.7079574457159534, -16.411685365171998, -9.0471090651358299, -10.959376227315447, 8.5840398495674126, 6.6373658260736024, 11.422094029020409, 14.85785089306844, 13.185747281780415, 4.2063935223916191, -6.9166135608899282, 10.843153262137262, 5.3913075109409441, -10.744469667642237, -12.491640291445655, 14.141118162062066, 16.425476099516025, 9.8833761863476042, 2.8719064151687883, 14.982021915112442, 1.3588165304065343, -11.657839635726177, 11.066314862965077, -3.0565490195476204, 1.7820159270701772, -13.535333311782074, 4.4026933190218367, -11.097334550496313, -11.322820869044248, 16.418516996530371, 5.8239202459876136, 15.054905601216154, -9.3058742038490152, 8.48902767802557, -8.3853534273227748, -7.9255089736435176, -9.6156735881618811, 11.502594413898008, -6.0542015398269911, 7.1229229147355149, 0.31483632310264387, -11.482093481730768, -9.3225703551629309, 5.8001228713062831, -9.3515917458791051, 7.9778737065172969, 9.7095180444854847, -14.060064536791135, 4.9797253221020545, -6.9210799657794224, 6.6736460552213845, -7.7636429824024606, 10.233132490278882, 8.401747393605044, -10.861100567451366, 13.631509744686715, -15.723791754613185, -8.7931294115815923, -9.9520037489001609, -10.312792052906007, -8.0681893911111917, -15.411052087079765, 10.938779471602952, -8.751795633239853, -9.1302029882284419, -2.3357314769649777, -7.9130658335895596, 2.7508172894969509, -9.1666780515772324, 12.793063537524359, -13.39091818112591, 7.2827402370664842, -10.400778532411657, -1.90854156128735, -4.1272702472088971, 12.696932922959466, -4.0180403457213805, 10.828999052972396, 14.720617452742685, -8.3763729074389719, 3.955093172344033, 0.90932711822659873, -5.6696817865337819, -5.8822086115513805 +}; +const char HRA_112_112_detected_data[] = { +1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1 +}; diff --git a/libcodec2-android/src/codec2/src/HRA_112_112.h b/libcodec2-android/src/codec2/src/HRA_112_112.h new file mode 100644 index 0000000..1184cba --- /dev/null +++ b/libcodec2-android/src/codec2/src/HRA_112_112.h @@ -0,0 +1,19 @@ +/* + FILE....: HRA_112_112.h + + Static arrays for LDPC codec HRA_112_112, generated by ldpc_gen_c_h_file.m. +*/ + +#define HRA_112_112_NUMBERPARITYBITS 112 +#define HRA_112_112_MAX_ROW_WEIGHT 3 +#define HRA_112_112_CODELENGTH 224 +#define HRA_112_112_NUMBERROWSHCOLS 112 +#define HRA_112_112_MAX_COL_WEIGHT 3 +#define HRA_112_112_DEC_TYPE 0 +#define HRA_112_112_MAX_ITER 100 + +extern const uint16_t HRA_112_112_H_rows[]; +extern const uint16_t HRA_112_112_H_cols[]; +extern const float HRA_112_112_input[]; +extern const char HRA_112_112_detected_data[]; + diff --git a/libcodec2-android/src/codec2/src/HRA_112_112_test.h b/libcodec2-android/src/codec2/src/HRA_112_112_test.h new file mode 100644 index 0000000..06612bd --- /dev/null +++ b/libcodec2-android/src/codec2/src/HRA_112_112_test.h @@ -0,0 +1,31 @@ +/* + FILE....: ../src/HRA_112_112.h + + Static arrays for CML LDPC, generated by ldpc_gen_h_file.m. +*/ + +#define HRA_112_112_NUMBERPARITYBITS 112 +#define HRA_112_112_MAX_ROW_WEIGHT 3 +#define HRA_112_112_CODELENGTH 224 +#define HRA_112_112_NUMBERROWSHCOLS 112 +#define HRA_112_112_MAX_COL_WEIGHT 3 +#define HRA_112_112_DEC_TYPE 0 +#define HRA_112_112_MAX_ITER 100 + +#include + +uint16_t HRA_112_112_H_rows[] = { +22, 18, 15, 63, 16, 13, 1, 2, 29, 25, 28, 4, 36, 10, 38, 7, 60, 23, 11, 38, 28, 1, 12, 31, 57, 45, 57, 30, 23, 59, 67, 14, 16, 4, 14, 62, 15, 50, 7, 70, 64, 6, 42, 48, 9, 31, 19, 40, 49, 2, 25, 3, 41, 49, 36, 9, 29, 39, 31, 5, 17, 1, 29, 25, 11, 21, 18, 2, 8, 22, 39, 15, 8, 22, 13, 3, 19, 4, 21, 62, 34, 43, 6, 24, 17, 60, 8, 74, 6, 44, 60, 10, 33, 12, 26, 24, 45, 81, 69, 80, 41, 28, 23, 5, 10, 20, 52, 18, 13, 86, 3, 7, 59, 21, 65, 72, 34, 37, 26, 55, 47, 48, 34, 5, 44, 47, 68, 96, 82, 111, 61, 74, 30, 17, 55, 98, 81, 66, 89, 35, 74, 82, 91, 51, 55, 51, 30, 89, 61, 75, 40, 71, 73, 11, 56, 54, 19, 47, 94, 69, 64, 20, 64, 12, 54, 77, 42, 88, 36, 52, 90, 63, 70, 27, 32, 73, 91, 32, 56, 46, 9, 78, 51, 68, 88, 67, 20, 43, 40, 14, 66, 86, 39, 97, 38, 27, 50, 84, 54, 92, 61, 46, 67, 24, 58, 35, 58, 37, 98, 85, 73, 84, 48, 35, 57, 16, 26, 37, 65, 32, 72, 95, 107, 33, 77, 33, 85, 105, 106, 75, 56, 71, 79, 59, 52, 105, 79, 90, 93, 100, 88, 112, 86, 80, 65, 42, 106, 100, 93, 94, 99, 97, 93, 101, 111, 99, 83, 53, 85, 95, 108, 107, 41, 109, 84, 78, 104, 101, 69, 110, 98, 103, 80, 83, 77, 71, 76, 78, 87, 102, 104, 95, 96, 83, 87, 50, 110, 103, 112, 45, 58, 70, 94, 91, 89, 81, 101, 82, 63, 72, 100, 97, 76, 112, 53, 105, 49, 75, 109, 102, 66, 111, 68, 87, 92, 79, 96, 43, 90, 44, 110, 99, 102, 92, 103, 106, 62, 53, 27, 46, 108, 104, 107, 108, 109, 76 +}; + +uint16_t HRA_112_112_H_cols[] = { +7, 8, 52, 12, 12, 42, 16, 69, 45, 14, 19, 23, 6, 32, 3, 5, 22, 2, 45, 50, 2, 1, 18, 84, 10, 7, 62, 11, 9, 21, 24, 63, 2, 5, 28, 13, 6, 15, 58, 39, 39, 22, 76, 13, 26, 68, 9, 10, 49, 38, 32, 11, 34, 44, 8, 7, 25, 67, 1, 17, 19, 36, 4, 41, 3, 26, 31, 15, 45, 40, 8, 4, 41, 20, 6, 53, 1, 42, 9, 20, 25, 17, 33, 41, 3, 19, 55, 17, 27, 14, 31, 88, 15, 26, 36, 16, 28, 24, 27, 16, 30, 56, 48, 43, 4, 5, 38, 37, 40, 46, 18, 18, 22, 50, 76, 34, 60, 83, 39, 73, 56, 92, 42, 52, 75, 35, 37, 33, 61, 67, 47, 75, 66, 70, 29, 92, 51, 95, 84, 21, 57, 28, 46, 66, 93, 11, 94, 55, 96, 20, 71, 48, 53, 43, 82, 90, 66, 90, 14, 44, 54, 62, 34, 58, 81, 53, 23, 43, 27, 93, 10, 86, 37, 80, 60, 49, 21, 79, 74, 72, 48, 61, 40, 76, 64, 29, 38, 79, 51, 54, 13, 49, 72, 30, 50, 86, 35, 80, 61, 56, 36, 59, 65, 91, 25, 47, 58, 59, 78, 47, 32, 24, 44, 86, 64, 57, 12, 23, 109, 107, 85, 63, 31, 65, 62, 68, 111, 78, 104, 89, 112, 87, 69, 105, 65, 94, 109, 78, 72, 104, 85, 108, 77, 106, 79, 74, 103, 96, 64, 105, 105, 102, 63, 35, 59, 108, 112, 81, 102, 57, 106, 83, 81, 77, 101, 55, 94, 96, 97, 106, 46, 101, 83, 85, 71, 107, 104, 87, 33, 67, 103, 95, 30, 91, 89, 103, 75, 51, 107, 87, 91, 89, 99, 68, 52, 109, 99, 88, 84, 112, 54, 70, 92, 100, 98, 74, 60, 100, 98, 110, 90, 73, 71, 95, 70, 100, 29, 69, 110, 93, 82, 97, 98, 77, 73, 99, 101, 108, 82, 102, 111, 110, 111, 97, 88, 80 +}; + +float HRA_112_112_input[] = { +-5.7868467875518395, -6.340739523388657, 3.6654768375589399, 4.1452438183910827, -4.6746135252043111, -4.8353634065473701, -6.0729133999971285, 4.0335561282226271, -6.1114855315699135, 4.1029513876344916, -4.6481634503883624, 5.7650915278538646, 6.5567610490570312, 5.1810523550761207, 3.4789051916752669, 4.2678848515507122, 4.0314705275547089, 6.0297078342283799, 4.9101169653222163, -6.4577297598332324, -7.4273487270443095, 3.472130985267488, -6.5346233967202254, 7.5312028458762414, -5.2618748211985915, 6.4198074556254969, 3.7500207659511484, 5.4040878141701141, 5.7554260586578803, 3.3973620625026886, 7.1815269888532907, 5.0031747952824963, 5.1377243276145599, 5.385229914081755, -0.61384230253605643, 0.46954911161835722, 3.5182611493679663, 3.393698829567279, 6.147483866535171, 3.8374563885989228, 1.3663773773557015, -4.0917661778352352, -3.2968298202652835, -6.0371912041431148, -8.4279246895331781, -0.98556788606912304, -3.515442879601625, 4.2642476942514875, -5.5905016743156972, 3.6920101668161727, -4.035860013856472, 5.3290190966269995, -2.9729656070594057, -2.5054371041338537, 6.8683150013190115, -7.1109038108500098, 6.7301890172695158, 2.5782062882356374, 4.4161464916633282, 2.2692851122935322, -1.3682527221025034, 3.0794629981237631, -7.8655412763279973, 1.1479897597156494, 0.22370696314520414, 1.1222453403894148, -3.1335220808128219, -3.8352985265277089, -1.2463521619727009, 2.9511814015293218, -8.668811041413111, 3.0185610517830548, -6.9592962351476091, 3.9653416636625414, -3.9384322074229408, 1.6789027505247516, 2.9579632055145502, -2.1212672699995125, -3.8892168640945193, 7.516114544807583, -0.84285604179011253, 4.1295390817792512, 0.26093278495228162, -3.6071666499996047, -0.065323173773821908, -1.9146584862100915, 4.7951161310834367, 5.5440002982088803, 3.5917539980319364, -0.81416023563684481, -2.6588977758747721, -3.0404494660606227, 4.5389936536649662, 2.7870543501114082, 3.5622966707453889, 5.1982116994791161, 2.4775319712999302, 0.70541080068007755, 0.89622787904518464, 4.3789020039207758, -2.4976040580619445, -0.7201255450933205, 4.2071986295109394, -5.2418379271657001, -4.092365654835163, -4.3510198326542557, 3.7404138637596001, 1.2496890930262492, -7.1053909336149728, -4.8888279905256748, -6.3523901926735249, -1.8757980409249277, 3.6256343910366273, -3.6165398844758228, -0.38322352317510561, -0.84747550047769449, -1.2717892264620718, -2.3899810721111154, 4.1368500898628637, 3.0440159002314924, 3.4235543074310728, -2.146097053557551, -1.7537615307751735, -1.0280987119225686, 4.9009275359419204, 5.0046047156368116, -0.47700833783807428, -4.5989492891875567, 1.4154839158712684, 0.33410724822249849, -4.771937854508927, -1.1817007924012972, -2.5960865023249302, 0.30422629502493687, -2.2097849377516763, -4.343244940878872, 1.9464288912612249, -9.0976989032526809, -8.6454142547592685, -1.8164317522989997, 2.2780845702169961, -4.8775405042023356, -0.61834757216625769, -1.985554501661331, -0.87599558657596699, -8.0610201531782124, -5.9847574894882554, -10.365536404711067, 2.9782191161319376, -6.9443820217795169, 0.72935566343949876, -4.5326632961380664, 1.1307250622386897, -4.0853969692041314, 5.4926924507347596, 5.6722555096362042, -2.5069992226180222, 2.0460084066662092, 2.5375899018238197, -3.5264293517823679, 3.2103083878487557, 5.793713046583183, -2.7633653287377995, 6.482851815629938, -1.2471646528152021, 3.0010491047486085, 0.29072399293868856, -4.0686659405747738, -2.6253508133431289, -6.3896590677017171, 5.7054076607727886, 4.3053292399977092, 2.2372599539047151, -4.8975607398431897, 5.8124794005531406, -0.69648233429781359, 5.5509723605410004, 2.0900652762982923, -4.7944253330785118, -2.9224693872108287, 6.0218579796888303, 4.7027436964063387, -4.1564871824868659, -1.324779121305123, 0.38031612697724176, -0.69335927945709175, -0.4028295686263082, 2.0967669774299189, 2.7947186736855909, 2.1473880039026203, 6.368702510367898, -3.0691782325684049, 1.6125827087903837, 3.5925359669662518, 5.178224480471127, -2.5070763799556617, 4.4280512389456632, -6.5385259627250134, 2.8047951999607603, -3.0185715385981151, -0.33348983718789993, -4.3285127692183556, -7.9609407359365134, 7.064973172264966, 0.95714371675898213, -5.5481272272415545, -1.6024149180708045, -4.5740915350065992, -1.5117120929647263, 1.9996824689403947, 5.9527526663437724, 5.0239857792804967, 6.2677418491798784, -1.9758548902654505, 2.1709284879472324, 2.5054563138111572, 4.4483685492445115, 3.2098357106645676, -4.5306213859481099, 1.1291114493451548, 1.5827945023160555, -5.2733490015732292, 5.0664709821503457, 1.9652801880230106 +}; + +char HRA_112_112_detected_data[] = { +1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0 +}; diff --git a/libcodec2-android/src/codec2/src/HRAa_1536_512.c b/libcodec2-android/src/codec2/src/HRAa_1536_512.c new file mode 100644 index 0000000..10ce00b --- /dev/null +++ b/libcodec2-android/src/codec2/src/HRAa_1536_512.c @@ -0,0 +1,22 @@ +/* + FILE....: HRAa_1536_512.c + + Static arrays for LDPC codec HRAa_1536_512, generated by ldpc_gen_c_h_file.m. +*/ + +#include +#include "HRAa_1536_512.h" + +const uint16_t HRAa_1536_512_H_rows[] = { +122, 98, 31, 39, 21, 33, 91, 90, 118, 111, 126, 34, 5, 120, 54, 2, 95, 67, 15, 68, 114, 10, 100, 53, 104, 29, 44, 76, 59, 112, 73, 77, 71, 61, 69, 128, 106, 50, 32, 6, 85, 102, 37, 99, 57, 75, 80, 88, 41, 27, 127, 16, 40, 119, 46, 110, 97, 79, 13, 45, 55, 62, 103, 92, 116, 7, 66, 83, 89, 96, 82, 58, 105, 78, 4, 47, 107, 52, 28, 20, 24, 51, 108, 36, 63, 30, 48, 26, 109, 60, 87, 49, 86, 25, 42, 123, 93, 18, 101, 43, 14, 72, 124, 35, 115, 81, 70, 22, 125, 64, 1, 113, 3, 17, 84, 74, 23, 94, 38, 12, 8, 65, 19, 56, 121, 9, 11, 117, 45, 115, 46, 23, 41, 17, 61, 112, 36, 99, 31, 107, 19, 37, 7, 11, 6, 47, 89, 4, 57, 20, 95, 55, 87, 82, 106, 88, 90, 85, 125, 42, 120, 18, 21, 34, 100, 103, 113, 5, 53, 108, 83, 67, 92, 109, 28, 76, 14, 43, 58, 30, 73, 33, 16, 35, 101, 22, 110, 94, 2, 91, 65, 98, 66, 51, 121, 84, 64, 118, 126, 27, 26, 111, 68, 69, 15, 124, 75, 123, 52, 10, 79, 40, 119, 9, 81, 102, 104, 13, 80, 127, 59, 72, 50, 48, 128, 56, 105, 117, 49, 54, 63, 60, 32, 71, 1, 114, 74, 70, 44, 86, 12, 8, 78, 29, 24, 96, 3, 93, 116, 62, 77, 38, 25, 39, 122, 97, 76, 37, 24, 104, 4, 46, 86, 44, 68, 47, 62, 49, 8, 79, 14, 119, 101, 63, 12, 53, 112, 78, 39, 103, 64, 100, 34, 108, 116, 23, 81, 121, 35, 124, 9, 127, 88, 125, 74, 94, 21, 10, 83, 2, 109, 80, 115, 122, 65, 1, 69, 71, 92, 89, 117, 75, 60, 59, 110, 43, 27, 118, 82, 38, 16, 26, 42, 55, 48, 70, 97, 90, 105, 33, 123, 120, 29, 126, 30, 73, 114, 57, 15, 72, 54, 96, 99, 107, 11, 45, 98, 22, 95, 41, 18, 13, 52, 87, 25, 17, 7, 58, 67, 32, 51, 50, 128, 61, 66, 113, 31, 106, 5, 36, 20, 19, 28, 6, 85, 91, 84, 56, 40, 111, 93, 77, 3, 102, 67, 63, 11, 23, 75, 55, 24, 38, 90, 17, 34, 5, 121, 103, 79, 40, 14, 76, 15, 88, 82, 100, 57, 102, 50, 84, 56, 114, 9, 119, 39, 86, 41, 89, 52, 13, 120, 25, 72, 33, 80, 3, 60, 109, 65, 28, 111, 16, 37, 69, 12, 94, 42, 105, 44, 106, 70, 68, 19, 74, 78, 124, 46, 43, 26, 32, 117, 128, 126, 93, 91, 116, 4, 10, 18, 64, 104, 81, 35, 115, 98, 48, 22, 125, 95, 123, 127, 96, 27, 107, 110, 58, 53, 62, 51, 97, 92, 54, 20, 21, 101, 30, 77, 2, 83, 87, 71, 108, 36, 61, 73, 8, 29, 113, 112, 59, 118, 45, 7, 6, 66, 85, 122, 47, 99, 49, 31, 1, 223, 249, 170, 159, 214, 134, 239, 206, 146, 132, 133, 207, 250, 208, 144, 213, 156, 198, 192, 211, 143, 174, 199, 254, 184, 131, 230, 161, 237, 158, 173, 204, 187, 171, 155, 164, 137, 183, 178, 151, 166, 180, 135, 200, 172, 176, 189, 169, 162, 136, 228, 252, 150, 212, 210, 231, 195, 154, 129, 147, 227, 148, 205, 255, 216, 233, 248, 246, 219, 236, 157, 197, 225, 240, 139, 256, 241, 238, 188, 152, 209, 167, 163, 145, 218, 168, 242, 165, 235, 153, 201, 160, 182, 138, 191, 245, 179, 140, 203, 185, 229, 181, 220, 175, 202, 190, 253, 234, 215, 149, 193, 251, 224, 221, 196, 177, 243, 232, 247, 217, 141, 186, 142, 244, 222, 194, 226, 130, 232, 185, 178, 129, 139, 244, 132, 164, 230, 191, 209, 242, 168, 228, 249, 158, 248, 235, 206, 238, 218, 159, 253, 196, 135, 147, 177, 225, 160, 137, 161, 212, 192, 175, 207, 222, 138, 134, 234, 136, 156, 152, 213, 226, 229, 151, 141, 201, 256, 181, 241, 243, 224, 180, 236, 194, 240, 182, 211, 255, 189, 208, 131, 176, 202, 155, 231, 146, 190, 237, 203, 183, 216, 133, 148, 144, 245, 174, 210, 252, 145, 142, 198, 187, 221, 153, 163, 223, 130, 162, 247, 140, 154, 184, 193, 215, 143, 199, 166, 220, 167, 219, 246, 204, 250, 173, 205, 254, 186, 149, 188, 172, 169, 150, 227, 233, 195, 251, 214, 217, 165, 170, 179, 157, 171, 197, 239, 200, 230, 130, 218, 131, 154, 223, 142, 155, 252, 174, 182, 156, 196, 229, 239, 192, 147, 198, 235, 209, 162, 199, 163, 227, 237, 148, 228, 160, 238, 240, 190, 241, 250, 211, 242, 184, 181, 251, 245, 187, 170, 194, 246, 212, 217, 138, 201, 193, 256, 224, 244, 243, 165, 144, 175, 180, 176, 185, 216, 141, 197, 231, 220, 204, 207, 221, 189, 150, 214, 134, 195, 234, 149, 186, 249, 140, 255, 168, 178, 133, 202, 145, 222, 236, 164, 188, 166, 208, 232, 132, 219, 159, 177, 139, 205, 226, 248, 254, 136, 161, 233, 135, 153, 171, 169, 146, 129, 167, 206, 215, 183, 225, 143, 137, 191, 200, 179, 213, 157, 152, 173, 151, 247, 253, 210, 158, 203, 172, 201, 162, 239, 190, 256, 229, 213, 135, 253, 178, 174, 193, 161, 238, 186, 141, 143, 205, 181, 129, 132, 180, 247, 255, 199, 241, 177, 251, 234, 212, 169, 200, 210, 133, 249, 163, 148, 153, 221, 164, 195, 152, 146, 232, 156, 243, 252, 142, 237, 219, 134, 197, 139, 137, 198, 218, 240, 155, 159, 160, 209, 228, 154, 168, 176, 225, 184, 194, 149, 188, 196, 157, 246, 208, 151, 236, 140, 130, 231, 226, 254, 217, 235, 165, 203, 182, 215, 189, 175, 136, 147, 185, 216, 242, 245, 172, 158, 173, 192, 211, 144, 171, 170, 214, 223, 207, 191, 222, 220, 179, 150, 244, 224, 230, 145, 183, 206, 202, 250, 204, 167, 227, 187, 166, 248, 138, 131, 233, 332, 283, 261, 276, 293, 336, 357, 369, 281, 317, 278, 356, 352, 367, 294, 350, 384, 327, 376, 290, 346, 361, 292, 351, 354, 363, 326, 291, 340, 273, 345, 306, 271, 341, 270, 307, 328, 360, 304, 362, 382, 322, 257, 297, 320, 337, 266, 259, 377, 368, 298, 310, 325, 371, 272, 324, 343, 374, 353, 370, 364, 316, 309, 269, 286, 277, 314, 358, 268, 313, 315, 311, 295, 267, 381, 344, 289, 260, 366, 258, 305, 342, 301, 308, 284, 331, 338, 380, 318, 329, 339, 264, 312, 303, 348, 335, 359, 330, 285, 263, 279, 274, 373, 265, 347, 333, 287, 323, 375, 355, 288, 365, 262, 379, 334, 378, 349, 383, 282, 296, 300, 321, 299, 275, 302, 280, 319, 372, 317, 372, 279, 308, 343, 334, 288, 341, 349, 318, 331, 329, 323, 371, 296, 298, 365, 327, 310, 344, 283, 321, 291, 325, 324, 360, 282, 294, 352, 377, 374, 342, 364, 263, 275, 267, 326, 335, 328, 289, 305, 280, 269, 314, 367, 300, 260, 333, 322, 271, 357, 306, 290, 358, 366, 303, 272, 302, 362, 353, 338, 383, 266, 264, 373, 359, 348, 312, 299, 286, 380, 268, 315, 285, 258, 363, 320, 287, 281, 311, 370, 313, 339, 273, 284, 292, 355, 345, 346, 384, 257, 295, 336, 277, 361, 261, 270, 369, 368, 337, 351, 378, 301, 316, 259, 262, 297, 276, 356, 293, 304, 347, 381, 330, 340, 379, 350, 332, 375, 382, 278, 307, 274, 309, 319, 265, 376, 354, 346, 320, 258, 341, 362, 360, 273, 342, 348, 324, 302, 340, 349, 292, 343, 370, 378, 295, 271, 327, 286, 371, 304, 306, 299, 345, 344, 326, 315, 357, 328, 262, 266, 329, 284, 309, 365, 332, 333, 338, 274, 303, 280, 380, 358, 363, 323, 322, 259, 294, 379, 285, 316, 278, 359, 310, 374, 334, 356, 261, 377, 347, 330, 355, 290, 331, 353, 314, 257, 267, 373, 291, 313, 375, 366, 382, 350, 260, 272, 335, 301, 275, 270, 300, 321, 311, 383, 317, 305, 384, 319, 337, 279, 297, 287, 277, 325, 367, 376, 308, 364, 264, 339, 312, 265, 351, 283, 268, 298, 288, 318, 368, 361, 307, 372, 296, 293, 289, 369, 269, 276, 263, 336, 381, 281, 352, 282, 354, 362, 360, 308, 384, 283, 296, 379, 280, 293, 294, 376, 358, 285, 319, 348, 302, 315, 304, 276, 338, 353, 290, 367, 346, 364, 306, 295, 260, 322, 378, 366, 363, 288, 361, 371, 281, 334, 356, 350, 347, 375, 365, 314, 351, 340, 257, 266, 345, 333, 373, 268, 277, 344, 359, 341, 343, 337, 352, 263, 349, 271, 381, 297, 377, 325, 339, 328, 267, 279, 372, 354, 287, 313, 316, 321, 258, 305, 300, 374, 330, 331, 259, 307, 261, 289, 335, 317, 324, 278, 368, 292, 299, 327, 320, 286, 291, 332, 272, 262, 275, 355, 265, 270, 383, 318, 309, 269, 274, 357, 298, 342, 282, 264, 329, 310, 284, 301, 336, 369, 303, 311, 323, 370, 326, 273, 380, 382, 312, 426, 449, 487, 455, 404, 413, 459, 469, 493, 508, 485, 442, 468, 439, 483, 443, 480, 418, 507, 423, 407, 474, 409, 425, 475, 444, 388, 496, 390, 490, 503, 416, 417, 509, 448, 479, 415, 501, 451, 471, 432, 427, 395, 410, 400, 408, 476, 441, 424, 391, 466, 482, 478, 454, 481, 394, 411, 446, 484, 431, 402, 491, 460, 494, 433, 440, 500, 450, 405, 430, 412, 387, 414, 492, 488, 436, 467, 461, 399, 472, 506, 396, 486, 505, 429, 495, 386, 438, 464, 456, 445, 462, 447, 428, 512, 385, 406, 463, 465, 422, 502, 437, 434, 435, 389, 489, 421, 497, 457, 499, 401, 393, 510, 392, 403, 453, 398, 397, 511, 477, 420, 452, 419, 504, 473, 498, 458, 470, 508, 439, 475, 499, 440, 394, 420, 469, 452, 416, 391, 405, 404, 498, 431, 510, 435, 434, 479, 459, 424, 472, 461, 429, 386, 489, 415, 512, 456, 406, 422, 411, 500, 455, 410, 401, 430, 392, 449, 468, 445, 443, 426, 490, 486, 389, 454, 464, 505, 473, 425, 442, 402, 436, 511, 488, 480, 466, 393, 481, 407, 397, 502, 446, 496, 504, 506, 438, 396, 492, 478, 433, 387, 501, 421, 418, 453, 470, 414, 450, 432, 428, 485, 491, 409, 447, 507, 385, 395, 465, 474, 403, 493, 457, 477, 460, 400, 444, 509, 463, 441, 467, 388, 427, 423, 398, 417, 412, 483, 399, 448, 503, 437, 471, 413, 487, 476, 419, 484, 495, 497, 408, 451, 390, 462, 482, 458, 494, 424, 429, 421, 467, 425, 480, 435, 436, 498, 417, 437, 419, 469, 477, 465, 428, 484, 493, 504, 452, 387, 458, 395, 418, 489, 390, 389, 474, 426, 444, 445, 466, 439, 388, 483, 416, 391, 461, 407, 491, 448, 431, 473, 385, 400, 411, 457, 394, 397, 470, 492, 406, 455, 434, 433, 475, 427, 505, 449, 420, 403, 478, 393, 443, 500, 446, 415, 414, 472, 454, 510, 511, 438, 408, 468, 487, 399, 506, 460, 495, 459, 450, 423, 386, 485, 481, 410, 453, 430, 412, 496, 502, 490, 501, 447, 432, 402, 462, 497, 404, 494, 503, 508, 440, 398, 512, 479, 441, 401, 392, 471, 456, 509, 405, 488, 409, 486, 422, 451, 507, 499, 413, 476, 442, 396, 482, 464, 463, 434, 487, 456, 385, 388, 477, 469, 427, 401, 439, 454, 464, 391, 390, 471, 399, 473, 400, 506, 436, 478, 437, 497, 465, 481, 490, 418, 404, 425, 463, 509, 393, 416, 467, 501, 409, 410, 498, 402, 394, 412, 438, 496, 480, 443, 450, 466, 476, 448, 460, 420, 397, 479, 511, 395, 502, 396, 387, 433, 457, 485, 419, 510, 474, 411, 426, 421, 435, 442, 449, 445, 415, 494, 499, 470, 512, 429, 392, 398, 488, 504, 451, 508, 417, 483, 406, 458, 405, 461, 453, 389, 440, 441, 423, 428, 492, 403, 459, 495, 452, 489, 414, 455, 407, 493, 507, 408, 500, 413, 444, 472, 430, 503, 386, 462, 447, 468, 432, 491, 482, 486, 446, 484, 424, 431, 505, 422, 475, 586, 617, 576, 608, 627, 589, 634, 597, 531, 534, 513, 620, 575, 605, 593, 539, 550, 639, 544, 567, 637, 628, 595, 592, 612, 551, 583, 541, 598, 527, 599, 545, 594, 610, 591, 633, 547, 516, 553, 522, 568, 558, 570, 619, 638, 523, 517, 537, 601, 542, 616, 622, 632, 629, 621, 609, 546, 564, 532, 636, 618, 588, 533, 582, 585, 623, 561, 578, 518, 525, 613, 529, 615, 614, 603, 577, 540, 528, 611, 559, 565, 556, 596, 574, 571, 581, 587, 519, 625, 552, 563, 635, 520, 580, 640, 602, 521, 538, 604, 631, 548, 624, 514, 515, 543, 607, 526, 557, 626, 600, 536, 566, 590, 572, 535, 562, 524, 630, 579, 584, 530, 555, 554, 606, 560, 549, 569, 573, 523, 515, 619, 608, 610, 594, 617, 618, 532, 542, 527, 626, 625, 584, 550, 541, 629, 521, 632, 622, 640, 599, 580, 579, 601, 627, 582, 556, 525, 581, 551, 536, 560, 630, 631, 614, 577, 559, 572, 592, 566, 524, 555, 598, 561, 595, 638, 602, 612, 546, 597, 513, 569, 540, 570, 571, 588, 604, 637, 548, 609, 534, 591, 518, 537, 564, 565, 528, 615, 606, 583, 621, 605, 624, 517, 543, 529, 519, 636, 530, 589, 639, 573, 620, 578, 545, 535, 634, 607, 567, 538, 586, 520, 635, 576, 552, 554, 558, 628, 544, 623, 568, 533, 563, 585, 611, 516, 562, 613, 557, 633, 531, 522, 590, 603, 574, 575, 553, 600, 587, 526, 616, 514, 547, 549, 539, 596, 593, 572, 609, 514, 594, 576, 626, 536, 598, 617, 564, 568, 558, 547, 606, 517, 624, 578, 582, 513, 571, 634, 585, 623, 605, 557, 539, 588, 545, 638, 534, 530, 524, 533, 552, 570, 573, 520, 595, 566, 559, 537, 567, 639, 562, 636, 635, 619, 597, 600, 621, 630, 616, 560, 632, 565, 584, 528, 640, 593, 561, 523, 629, 633, 518, 591, 551, 542, 583, 555, 599, 611, 548, 589, 602, 531, 612, 574, 522, 586, 538, 569, 546, 587, 613, 540, 608, 543, 553, 519, 627, 563, 592, 527, 628, 618, 601, 525, 521, 614, 544, 541, 580, 596, 603, 604, 607, 622, 579, 549, 620, 615, 575, 625, 637, 610, 526, 577, 554, 581, 550, 535, 529, 532, 515, 516, 556, 631, 590, 588, 589, 555, 638, 592, 518, 559, 625, 568, 546, 516, 610, 624, 590, 549, 601, 632, 514, 554, 561, 537, 569, 551, 521, 542, 541, 623, 640, 627, 564, 533, 530, 591, 611, 597, 579, 598, 600, 594, 528, 540, 581, 604, 633, 536, 527, 558, 593, 574, 534, 544, 616, 612, 607, 517, 620, 532, 618, 615, 608, 637, 622, 529, 621, 573, 602, 543, 578, 563, 595, 553, 523, 525, 582, 539, 560, 613, 552, 575, 639, 606, 635, 577, 548, 522, 605, 571, 520, 535, 580, 513, 629, 562, 570, 545, 617, 519, 566, 557, 556, 572, 587, 584, 547, 524, 576, 538, 603, 550, 599, 619, 628, 515, 630, 614, 567, 583, 626, 636, 585, 526, 565, 596, 531, 631, 586, 609, 634, 654, 647, 718, 697, 752, 672, 705, 651, 683, 675, 742, 670, 717, 658, 650, 695, 701, 665, 656, 723, 730, 702, 731, 726, 750, 711, 667, 645, 653, 691, 743, 733, 720, 714, 684, 722, 690, 678, 754, 721, 708, 710, 659, 749, 751, 724, 758, 748, 716, 646, 729, 664, 644, 728, 693, 759, 753, 746, 686, 719, 762, 700, 676, 756, 734, 765, 689, 715, 661, 643, 660, 680, 642, 740, 648, 732, 709, 663, 668, 685, 727, 662, 737, 747, 725, 703, 736, 713, 641, 764, 688, 666, 706, 745, 739, 712, 681, 682, 679, 655, 694, 767, 760, 704, 673, 674, 757, 669, 696, 657, 652, 692, 698, 699, 763, 677, 735, 741, 707, 649, 738, 768, 766, 671, 687, 755, 744, 761, 706, 645, 725, 682, 649, 704, 739, 715, 713, 690, 727, 670, 714, 765, 652, 751, 721, 666, 717, 676, 677, 658, 738, 726, 646, 663, 756, 669, 710, 695, 752, 657, 680, 691, 654, 712, 764, 741, 705, 685, 724, 720, 709, 692, 642, 750, 767, 686, 759, 716, 674, 694, 653, 718, 729, 683, 737, 673, 647, 671, 643, 697, 747, 761, 748, 675, 746, 708, 760, 687, 744, 711, 648, 664, 659, 722, 732, 758, 696, 679, 656, 733, 641, 762, 743, 650, 735, 730, 742, 753, 731, 701, 740, 745, 684, 728, 702, 763, 757, 768, 689, 700, 766, 660, 707, 662, 672, 661, 754, 667, 693, 681, 678, 665, 723, 736, 734, 651, 688, 698, 719, 703, 668, 644, 699, 749, 755, 655, 692, 708, 659, 697, 701, 647, 683, 762, 652, 722, 725, 760, 642, 764, 698, 690, 729, 682, 734, 695, 737, 691, 751, 641, 673, 672, 680, 686, 704, 714, 767, 745, 723, 743, 718, 665, 746, 657, 731, 720, 660, 712, 709, 765, 756, 687, 693, 671, 656, 730, 670, 742, 663, 732, 694, 702, 664, 650, 678, 668, 752, 763, 676, 726, 648, 662, 679, 689, 655, 738, 744, 715, 733, 681, 759, 685, 753, 707, 688, 713, 736, 755, 696, 711, 719, 684, 741, 658, 675, 728, 757, 740, 749, 727, 724, 766, 706, 758, 677, 674, 705, 717, 703, 646, 651, 644, 768, 748, 710, 643, 735, 747, 754, 761, 661, 654, 750, 739, 666, 699, 700, 716, 667, 721, 653, 669, 649, 645, 703, 723, 739, 737, 646, 667, 728, 704, 687, 710, 699, 676, 735, 656, 671, 755, 696, 750, 700, 758, 705, 678, 658, 726, 665, 721, 684, 744, 766, 643, 644, 745, 652, 754, 713, 720, 712, 768, 762, 661, 675, 692, 660, 748, 716, 679, 734, 642, 691, 651, 685, 763, 695, 689, 752, 722, 730, 756, 759, 736, 655, 707, 715, 709, 702, 673, 743, 663, 682, 727, 659, 731, 708, 657, 732, 714, 751, 725, 674, 648, 719, 680, 698, 757, 760, 717, 666, 669, 733, 647, 686, 765, 641, 694, 662, 753, 697, 738, 741, 649, 688, 749, 746, 767, 645, 664, 668, 654, 690, 761, 677, 729, 724, 653, 764, 706, 711, 672, 742, 718, 670, 740, 650, 701, 693, 683, 747, 681, 819, 870, 769, 827, 887, 805, 856, 785, 885, 823, 852, 841, 799, 831, 845, 822, 801, 866, 864, 844, 789, 860, 877, 783, 850, 818, 811, 884, 812, 833, 774, 851, 890, 808, 792, 781, 869, 807, 773, 836, 772, 815, 798, 786, 859, 868, 840, 832, 802, 865, 770, 896, 891, 803, 777, 892, 771, 797, 886, 895, 888, 778, 847, 796, 809, 780, 872, 858, 855, 826, 873, 791, 878, 834, 779, 862, 793, 814, 880, 824, 825, 853, 835, 861, 788, 876, 828, 842, 820, 875, 810, 787, 863, 800, 854, 839, 838, 837, 871, 881, 849, 894, 893, 806, 867, 848, 776, 784, 821, 874, 830, 804, 883, 795, 817, 846, 794, 775, 829, 889, 790, 879, 816, 813, 882, 782, 857, 843, 810, 820, 814, 859, 829, 880, 890, 861, 864, 784, 792, 834, 831, 823, 798, 801, 817, 827, 782, 843, 816, 892, 841, 894, 806, 879, 832, 802, 849, 825, 877, 783, 884, 826, 786, 795, 787, 794, 815, 821, 785, 813, 777, 819, 893, 863, 840, 809, 781, 775, 887, 848, 875, 803, 857, 805, 812, 873, 773, 835, 842, 790, 780, 789, 807, 886, 862, 868, 808, 796, 870, 855, 866, 793, 845, 799, 833, 850, 811, 854, 891, 836, 865, 838, 771, 778, 770, 839, 881, 856, 828, 852, 791, 822, 867, 874, 774, 847, 885, 869, 818, 846, 788, 888, 876, 853, 882, 895, 844, 776, 797, 858, 872, 804, 800, 824, 883, 769, 837, 871, 772, 830, 889, 860, 878, 779, 851, 896, 810, 884, 895, 789, 844, 821, 791, 859, 894, 854, 831, 876, 877, 816, 853, 835, 857, 856, 858, 805, 829, 782, 849, 893, 889, 795, 872, 823, 871, 802, 786, 846, 878, 815, 804, 869, 824, 813, 887, 851, 822, 783, 801, 800, 806, 776, 778, 811, 774, 817, 883, 777, 880, 790, 836, 860, 797, 873, 779, 865, 847, 891, 785, 888, 780, 868, 837, 838, 842, 793, 892, 845, 826, 792, 773, 885, 784, 787, 796, 814, 850, 875, 874, 775, 769, 799, 861, 840, 848, 772, 809, 770, 808, 866, 864, 834, 833, 879, 807, 832, 886, 827, 794, 870, 863, 841, 818, 896, 881, 862, 828, 839, 798, 820, 788, 852, 812, 830, 781, 771, 882, 890, 803, 843, 867, 855, 819, 825, 884, 815, 775, 823, 781, 861, 894, 779, 891, 836, 870, 789, 807, 862, 854, 893, 808, 805, 824, 770, 841, 826, 834, 786, 838, 796, 822, 869, 792, 839, 820, 825, 878, 791, 819, 799, 852, 896, 890, 882, 887, 840, 809, 790, 788, 858, 871, 804, 844, 876, 848, 886, 865, 795, 864, 776, 889, 818, 821, 784, 777, 875, 872, 855, 842, 794, 883, 782, 873, 814, 895, 892, 811, 778, 845, 812, 827, 846, 817, 856, 800, 785, 793, 787, 837, 773, 780, 879, 881, 772, 857, 831, 783, 847, 859, 867, 851, 769, 801, 833, 806, 853, 830, 816, 829, 828, 810, 797, 849, 832, 798, 863, 885, 860, 771, 803, 850, 813, 888, 843, 802, 866, 880, 874, 868, 774, 835, 877, 949, 911, 950, 932, 956, 978, 968, 947, 944, 984, 980, 941, 927, 1020, 962, 999, 1021, 983, 1024, 902, 937, 921, 993, 965, 933, 1004, 1022, 916, 931, 910, 981, 924, 914, 917, 974, 986, 967, 961, 997, 899, 1002, 966, 934, 998, 1008, 953, 987, 973, 1009, 909, 922, 963, 991, 959, 1011, 912, 940, 943, 979, 1001, 954, 969, 915, 985, 1015, 930, 1012, 1017, 960, 996, 906, 904, 994, 926, 935, 946, 1016, 992, 913, 918, 929, 995, 990, 952, 975, 1013, 958, 907, 972, 897, 957, 908, 1023, 938, 955, 903, 1003, 988, 1000, 942, 1006, 928, 970, 989, 1005, 1007, 898, 920, 1010, 1019, 945, 976, 982, 939, 923, 919, 971, 948, 905, 964, 977, 1018, 901, 1014, 900, 925, 936, 951, 1017, 949, 913, 936, 963, 990, 1015, 969, 966, 940, 957, 919, 927, 999, 908, 1020, 930, 899, 905, 1019, 1021, 948, 911, 989, 1023, 970, 1013, 944, 934, 972, 951, 971, 946, 991, 947, 1024, 914, 916, 931, 983, 1004, 945, 918, 1002, 928, 1006, 968, 939, 938, 941, 961, 937, 995, 1000, 985, 950, 994, 1016, 1003, 1008, 909, 1001, 906, 926, 1011, 953, 915, 910, 975, 907, 976, 993, 904, 903, 982, 956, 959, 980, 986, 917, 962, 942, 912, 977, 979, 921, 965, 997, 998, 922, 923, 988, 1022, 967, 973, 898, 1007, 987, 1009, 924, 974, 996, 1005, 933, 1018, 929, 925, 900, 992, 952, 1014, 960, 1012, 981, 901, 920, 954, 964, 958, 1010, 984, 902, 932, 955, 897, 978, 943, 935, 907, 963, 943, 945, 998, 1024, 958, 1020, 900, 959, 926, 992, 1021, 955, 991, 970, 905, 1003, 911, 934, 940, 913, 924, 939, 972, 975, 985, 956, 922, 938, 951, 941, 1008, 995, 932, 937, 986, 1007, 979, 947, 906, 927, 912, 993, 978, 977, 1010, 990, 901, 1016, 1019, 982, 929, 1011, 960, 1015, 1001, 914, 898, 971, 1009, 948, 931, 964, 903, 902, 923, 928, 1013, 921, 916, 936, 918, 987, 997, 1023, 935, 952, 917, 933, 983, 919, 981, 1018, 969, 957, 910, 1004, 909, 897, 1017, 999, 996, 1022, 930, 988, 915, 904, 994, 973, 1006, 1002, 967, 961, 989, 920, 965, 949, 980, 968, 976, 950, 925, 966, 899, 1000, 1005, 974, 953, 984, 1014, 908, 942, 944, 946, 954, 1012, 962, 927, 930, 905, 959, 951, 966, 910, 917, 1020, 1018, 996, 915, 976, 990, 982, 994, 909, 941, 937, 899, 969, 1023, 1009, 902, 963, 957, 919, 907, 1019, 960, 949, 1016, 916, 955, 900, 943, 1000, 934, 947, 938, 999, 1013, 977, 995, 945, 1001, 986, 913, 954, 906, 1005, 1011, 1024, 975, 921, 1002, 918, 942, 985, 987, 961, 967, 958, 973, 997, 1004, 1015, 908, 925, 897, 978, 953, 974, 924, 992, 972, 984, 1010, 1008, 979, 971, 936, 952, 914, 983, 988, 1017, 965, 926, 1014, 898, 923, 964, 1003, 970, 950, 939, 932, 998, 928, 956, 991, 940, 901, 931, 962, 1022, 946, 948, 903, 1021, 1006, 993, 935, 944, 904, 929, 980, 911, 922, 989, 1007, 968, 912, 981, 1012, 920, 933, 1132, 1107, 1101, 1150, 1145, 1065, 1147, 1059, 1038, 1115, 1083, 1034, 1151, 1079, 1047, 1054, 1116, 1076, 1069, 1120, 1126, 1086, 1064, 1133, 1036, 1057, 1128, 1030, 1099, 1037, 1027, 1084, 1134, 1138, 1125, 1068, 1092, 1137, 1093, 1048, 1102, 1111, 1104, 1029, 1046, 1121, 1041, 1035, 1070, 1123, 1091, 1088, 1045, 1131, 1148, 1139, 1063, 1096, 1106, 1097, 1095, 1050, 1055, 1149, 1078, 1112, 1081, 1062, 1142, 1052, 1049, 1025, 1146, 1060, 1056, 1108, 1136, 1109, 1058, 1105, 1044, 1033, 1143, 1087, 1051, 1077, 1110, 1117, 1085, 1090, 1073, 1031, 1127, 1122, 1113, 1144, 1130, 1043, 1066, 1118, 1089, 1103, 1082, 1040, 1067, 1053, 1071, 1042, 1072, 1061, 1124, 1129, 1135, 1100, 1114, 1080, 1039, 1140, 1094, 1152, 1141, 1075, 1098, 1026, 1074, 1032, 1119, 1028, 1097, 1049, 1055, 1115, 1113, 1110, 1135, 1101, 1081, 1082, 1093, 1066, 1151, 1103, 1121, 1048, 1035, 1029, 1090, 1028, 1050, 1123, 1077, 1083, 1145, 1047, 1111, 1067, 1112, 1059, 1100, 1118, 1042, 1102, 1109, 1079, 1054, 1094, 1120, 1132, 1078, 1031, 1030, 1027, 1026, 1106, 1053, 1069, 1117, 1105, 1108, 1137, 1058, 1034, 1070, 1063, 1143, 1149, 1104, 1033, 1076, 1045, 1136, 1052, 1092, 1133, 1148, 1025, 1051, 1122, 1144, 1080, 1074, 1141, 1116, 1043, 1139, 1129, 1146, 1057, 1098, 1119, 1039, 1125, 1037, 1131, 1114, 1130, 1086, 1044, 1127, 1073, 1032, 1150, 1099, 1060, 1128, 1085, 1056, 1068, 1061, 1096, 1038, 1142, 1065, 1126, 1046, 1062, 1134, 1152, 1124, 1036, 1107, 1095, 1138, 1075, 1084, 1071, 1091, 1147, 1072, 1087, 1064, 1041, 1140, 1040, 1089, 1088, 1025, 1060, 1053, 1051, 1049, 1147, 1082, 1141, 1151, 1081, 1045, 1084, 1105, 1047, 1058, 1035, 1137, 1037, 1050, 1074, 1100, 1040, 1124, 1116, 1088, 1079, 1073, 1057, 1113, 1099, 1104, 1140, 1052, 1046, 1056, 1152, 1150, 1144, 1066, 1077, 1138, 1083, 1097, 1044, 1063, 1126, 1030, 1131, 1076, 1111, 1069, 1096, 1146, 1059, 1108, 1133, 1087, 1042, 1103, 1125, 1092, 1090, 1089, 1142, 1117, 1068, 1029, 1062, 1129, 1148, 1036, 1026, 1067, 1055, 1101, 1120, 1038, 1132, 1078, 1028, 1145, 1075, 1031, 1061, 1107, 1072, 1121, 1118, 1054, 1109, 1135, 1027, 1080, 1122, 1033, 1039, 1112, 1127, 1115, 1091, 1064, 1139, 1041, 1110, 1130, 1149, 1136, 1070, 1065, 1086, 1098, 1128, 1134, 1043, 1085, 1102, 1094, 1032, 1123, 1119, 1106, 1143, 1034, 1048, 1095, 1093, 1114, 1071, 1131, 1056, 1028, 1077, 1151, 1137, 1031, 1144, 1119, 1084, 1066, 1078, 1105, 1047, 1075, 1126, 1138, 1070, 1115, 1042, 1079, 1128, 1123, 1122, 1063, 1050, 1152, 1064, 1146, 1074, 1134, 1118, 1049, 1045, 1149, 1088, 1136, 1068, 1085, 1052, 1026, 1093, 1096, 1098, 1048, 1125, 1067, 1030, 1116, 1103, 1145, 1032, 1127, 1106, 1094, 1041, 1080, 1097, 1104, 1147, 1102, 1117, 1089, 1083, 1054, 1073, 1092, 1040, 1100, 1058, 1091, 1150, 1057, 1142, 1076, 1051, 1086, 1132, 1101, 1043, 1060, 1027, 1025, 1081, 1133, 1099, 1124, 1140, 1033, 1029, 1121, 1109, 1069, 1055, 1111, 1110, 1113, 1108, 1072, 1141, 1087, 1065, 1071, 1095, 1139, 1129, 1039, 1059, 1090, 1143, 1046, 1135, 1112, 1082, 1044, 1038, 1061, 1148, 1037, 1062, 1034, 1130, 1053, 1107, 1120, 1114, 1036, 1035, 1249, 1214, 1233, 1199, 1235, 1157, 1166, 1263, 1231, 1208, 1211, 1178, 1163, 1193, 1270, 1182, 1260, 1175, 1153, 1248, 1271, 1267, 1251, 1252, 1183, 1172, 1241, 1203, 1266, 1227, 1222, 1277, 1161, 1274, 1254, 1195, 1169, 1155, 1186, 1202, 1279, 1162, 1239, 1217, 1258, 1244, 1228, 1190, 1278, 1224, 1198, 1181, 1234, 1165, 1174, 1230, 1184, 1269, 1194, 1159, 1168, 1205, 1237, 1215, 1264, 1185, 1173, 1180, 1229, 1206, 1273, 1246, 1220, 1196, 1176, 1191, 1275, 1245, 1261, 1225, 1221, 1253, 1192, 1218, 1216, 1272, 1156, 1207, 1262, 1276, 1167, 1189, 1158, 1232, 1170, 1219, 1187, 1280, 1204, 1259, 1255, 1154, 1226, 1171, 1268, 1223, 1212, 1209, 1250, 1188, 1256, 1240, 1265, 1247, 1243, 1179, 1242, 1213, 1238, 1201, 1200, 1177, 1210, 1160, 1197, 1257, 1164, 1236, 1265, 1275, 1232, 1212, 1173, 1192, 1231, 1279, 1185, 1203, 1205, 1248, 1270, 1215, 1241, 1167, 1161, 1228, 1175, 1153, 1159, 1230, 1191, 1209, 1259, 1253, 1229, 1171, 1257, 1221, 1264, 1188, 1256, 1278, 1199, 1239, 1251, 1155, 1218, 1261, 1254, 1202, 1237, 1174, 1187, 1245, 1190, 1272, 1274, 1255, 1179, 1172, 1216, 1207, 1176, 1262, 1247, 1213, 1238, 1156, 1277, 1268, 1164, 1269, 1260, 1210, 1180, 1183, 1276, 1222, 1224, 1177, 1246, 1233, 1234, 1273, 1211, 1208, 1217, 1158, 1165, 1267, 1197, 1194, 1250, 1220, 1160, 1258, 1206, 1240, 1236, 1244, 1242, 1168, 1225, 1204, 1170, 1157, 1178, 1186, 1243, 1189, 1169, 1249, 1280, 1227, 1195, 1223, 1200, 1214, 1163, 1226, 1182, 1184, 1154, 1266, 1198, 1235, 1201, 1263, 1181, 1196, 1162, 1219, 1193, 1252, 1166, 1271, 1206, 1208, 1271, 1239, 1153, 1195, 1224, 1188, 1236, 1191, 1264, 1197, 1175, 1232, 1182, 1228, 1209, 1210, 1246, 1227, 1244, 1193, 1167, 1194, 1184, 1279, 1199, 1223, 1259, 1243, 1256, 1212, 1187, 1237, 1248, 1214, 1176, 1263, 1268, 1219, 1278, 1202, 1276, 1265, 1189, 1154, 1274, 1213, 1192, 1211, 1215, 1170, 1171, 1164, 1216, 1240, 1168, 1166, 1177, 1235, 1267, 1261, 1252, 1174, 1201, 1173, 1163, 1241, 1257, 1169, 1262, 1157, 1186, 1229, 1249, 1225, 1198, 1178, 1217, 1207, 1245, 1160, 1200, 1161, 1275, 1165, 1226, 1196, 1179, 1159, 1233, 1238, 1221, 1280, 1260, 1172, 1253, 1269, 1270, 1158, 1155, 1258, 1218, 1273, 1230, 1190, 1231, 1250, 1204, 1222, 1251, 1203, 1220, 1272, 1255, 1234, 1254, 1266, 1277, 1181, 1205, 1162, 1183, 1242, 1185, 1156, 1247, 1180, 1173, 1254, 1271, 1252, 1207, 1269, 1185, 1157, 1162, 1268, 1192, 1263, 1179, 1251, 1188, 1230, 1194, 1255, 1273, 1163, 1181, 1206, 1242, 1247, 1270, 1191, 1161, 1171, 1193, 1235, 1198, 1217, 1246, 1241, 1187, 1262, 1174, 1218, 1238, 1165, 1279, 1156, 1280, 1195, 1177, 1213, 1240, 1208, 1184, 1159, 1170, 1277, 1210, 1204, 1166, 1228, 1248, 1182, 1199, 1229, 1249, 1223, 1153, 1190, 1225, 1221, 1261, 1226, 1257, 1197, 1244, 1258, 1201, 1186, 1232, 1276, 1160, 1176, 1212, 1202, 1253, 1274, 1267, 1175, 1172, 1233, 1167, 1154, 1243, 1200, 1256, 1189, 1220, 1272, 1239, 1180, 1205, 1231, 1169, 1227, 1219, 1250, 1275, 1158, 1260, 1234, 1259, 1209, 1168, 1278, 1164, 1245, 1183, 1216, 1236, 1203, 1264, 1215, 1237, 1214, 1266, 1196, 1155, 1222, 1265, 1211, 1178, 1224, 1298, 1403, 1337, 1329, 1331, 1386, 1349, 1320, 1288, 1287, 1380, 1402, 1342, 1366, 1352, 1353, 1304, 1284, 1334, 1397, 1321, 1286, 1360, 1328, 1381, 1326, 1309, 1333, 1365, 1282, 1362, 1385, 1314, 1387, 1303, 1383, 1351, 1369, 1311, 1310, 1301, 1308, 1400, 1359, 1395, 1332, 1358, 1323, 1367, 1296, 1364, 1372, 1350, 1371, 1361, 1396, 1363, 1294, 1377, 1281, 1368, 1343, 1355, 1393, 1399, 1327, 1378, 1388, 1302, 1392, 1300, 1406, 1319, 1404, 1315, 1382, 1379, 1408, 1345, 1405, 1324, 1335, 1305, 1306, 1370, 1390, 1401, 1391, 1283, 1291, 1338, 1375, 1313, 1398, 1292, 1316, 1330, 1384, 1289, 1325, 1295, 1376, 1307, 1373, 1339, 1354, 1374, 1290, 1344, 1317, 1322, 1394, 1318, 1340, 1407, 1336, 1285, 1312, 1297, 1356, 1347, 1346, 1293, 1348, 1389, 1341, 1299, 1357, 1298, 1313, 1387, 1357, 1296, 1323, 1283, 1333, 1382, 1347, 1332, 1316, 1405, 1366, 1402, 1394, 1388, 1309, 1401, 1338, 1302, 1359, 1400, 1285, 1371, 1365, 1367, 1407, 1294, 1348, 1350, 1305, 1376, 1374, 1386, 1356, 1297, 1343, 1287, 1282, 1286, 1331, 1326, 1351, 1321, 1399, 1354, 1306, 1393, 1362, 1353, 1325, 1346, 1310, 1395, 1324, 1391, 1342, 1311, 1361, 1337, 1335, 1328, 1322, 1355, 1352, 1404, 1380, 1303, 1383, 1370, 1379, 1281, 1339, 1289, 1398, 1288, 1308, 1396, 1304, 1301, 1349, 1312, 1314, 1319, 1384, 1368, 1397, 1334, 1358, 1341, 1299, 1406, 1403, 1372, 1307, 1320, 1284, 1317, 1385, 1363, 1364, 1389, 1292, 1290, 1330, 1360, 1408, 1329, 1327, 1377, 1369, 1344, 1378, 1291, 1375, 1381, 1300, 1336, 1373, 1295, 1315, 1340, 1345, 1293, 1390, 1318, 1392, 1380, 1399, 1376, 1337, 1361, 1342, 1304, 1407, 1338, 1390, 1289, 1325, 1393, 1383, 1345, 1323, 1362, 1364, 1363, 1358, 1339, 1388, 1397, 1340, 1348, 1305, 1372, 1360, 1336, 1283, 1403, 1400, 1346, 1371, 1374, 1401, 1366, 1296, 1347, 1395, 1351, 1294, 1375, 1349, 1319, 1404, 1318, 1382, 1370, 1312, 1391, 1408, 1313, 1406, 1385, 1287, 1389, 1398, 1314, 1300, 1292, 1308, 1324, 1301, 1333, 1316, 1332, 1343, 1402, 1281, 1386, 1285, 1384, 1321, 1373, 1282, 1353, 1354, 1286, 1377, 1290, 1396, 1302, 1295, 1341, 1381, 1368, 1293, 1329, 1326, 1394, 1311, 1344, 1315, 1330, 1327, 1288, 1392, 1355, 1405, 1322, 1356, 1352, 1284, 1359, 1298, 1297, 1350, 1334, 1309, 1335, 1303, 1379, 1331, 1291, 1369, 1387, 1320, 1357, 1328, 1310, 1365, 1367, 1306, 1307, 1317, 1299, 1378, 1313, 1300, 1384, 1286, 1374, 1317, 1382, 1369, 1337, 1363, 1301, 1401, 1408, 1352, 1305, 1308, 1315, 1377, 1358, 1390, 1294, 1381, 1403, 1344, 1332, 1354, 1380, 1290, 1362, 1370, 1291, 1388, 1361, 1287, 1349, 1400, 1385, 1283, 1320, 1348, 1325, 1324, 1314, 1360, 1339, 1357, 1326, 1394, 1399, 1342, 1306, 1368, 1404, 1299, 1296, 1365, 1372, 1375, 1402, 1303, 1398, 1297, 1281, 1319, 1289, 1395, 1367, 1406, 1321, 1345, 1376, 1378, 1371, 1307, 1364, 1285, 1288, 1302, 1351, 1293, 1346, 1353, 1316, 1391, 1312, 1310, 1340, 1338, 1383, 1327, 1318, 1396, 1389, 1397, 1322, 1298, 1347, 1295, 1366, 1329, 1387, 1359, 1343, 1335, 1355, 1292, 1323, 1284, 1282, 1333, 1392, 1379, 1328, 1356, 1331, 1336, 1330, 1341, 1393, 1373, 1309, 1311, 1407, 1350, 1405, 1304, 1334, 1386, 1461, 1428, 1471, 1489, 1427, 1424, 1514, 1463, 1439, 1522, 1487, 1445, 1409, 1459, 1419, 1483, 1486, 1481, 1415, 1451, 1429, 1528, 1527, 1531, 1417, 1484, 1476, 1422, 1478, 1502, 1524, 1473, 1535, 1431, 1505, 1523, 1416, 1462, 1521, 1414, 1474, 1443, 1410, 1536, 1418, 1446, 1456, 1435, 1525, 1517, 1457, 1492, 1500, 1495, 1513, 1440, 1436, 1437, 1508, 1454, 1464, 1413, 1450, 1472, 1509, 1529, 1477, 1433, 1432, 1467, 1491, 1469, 1516, 1479, 1434, 1515, 1499, 1442, 1497, 1412, 1530, 1425, 1520, 1519, 1532, 1485, 1448, 1488, 1507, 1426, 1449, 1496, 1423, 1493, 1506, 1512, 1470, 1498, 1534, 1411, 1465, 1441, 1458, 1503, 1468, 1420, 1455, 1533, 1526, 1501, 1430, 1518, 1453, 1447, 1444, 1466, 1494, 1510, 1452, 1460, 1511, 1482, 1475, 1421, 1438, 1490, 1504, 1480, 1506, 1429, 1497, 1433, 1477, 1528, 1439, 1417, 1427, 1458, 1494, 1489, 1474, 1473, 1520, 1529, 1435, 1532, 1504, 1409, 1426, 1453, 1421, 1483, 1502, 1518, 1418, 1463, 1516, 1530, 1496, 1482, 1533, 1513, 1531, 1459, 1486, 1534, 1412, 1512, 1514, 1455, 1505, 1481, 1445, 1443, 1411, 1468, 1536, 1447, 1452, 1446, 1521, 1415, 1484, 1441, 1480, 1442, 1414, 1423, 1460, 1469, 1465, 1519, 1430, 1410, 1428, 1492, 1478, 1467, 1425, 1517, 1525, 1511, 1424, 1456, 1444, 1500, 1431, 1420, 1461, 1498, 1416, 1436, 1485, 1495, 1437, 1503, 1487, 1448, 1432, 1491, 1476, 1449, 1507, 1527, 1434, 1470, 1419, 1490, 1509, 1510, 1438, 1466, 1522, 1488, 1523, 1526, 1501, 1499, 1422, 1440, 1472, 1475, 1479, 1462, 1524, 1471, 1457, 1454, 1413, 1493, 1451, 1535, 1508, 1515, 1464, 1450, 1437, 1500, 1432, 1527, 1443, 1456, 1521, 1501, 1528, 1418, 1451, 1446, 1421, 1478, 1493, 1530, 1499, 1462, 1414, 1448, 1477, 1472, 1471, 1426, 1523, 1498, 1485, 1509, 1533, 1453, 1447, 1458, 1467, 1484, 1423, 1517, 1519, 1409, 1455, 1411, 1454, 1502, 1531, 1504, 1525, 1416, 1464, 1413, 1417, 1489, 1473, 1410, 1459, 1480, 1495, 1516, 1439, 1420, 1482, 1433, 1481, 1468, 1483, 1536, 1466, 1532, 1457, 1494, 1508, 1450, 1429, 1534, 1431, 1497, 1449, 1445, 1436, 1463, 1513, 1490, 1488, 1524, 1424, 1496, 1415, 1505, 1520, 1518, 1476, 1507, 1514, 1440, 1425, 1428, 1491, 1475, 1526, 1438, 1465, 1470, 1435, 1510, 1441, 1412, 1503, 1444, 1535, 1442, 1434, 1469, 1512, 1474, 1419, 1430, 1479, 1511, 1492, 1486, 1422, 1487, 1515, 1461, 1529, 1460, 1427, 1452, 1506, 1522, 1430, 1438, 1487, 1414, 1420, 1510, 1447, 1509, 1433, 1482, 1424, 1415, 1446, 1493, 1518, 1417, 1485, 1441, 1434, 1490, 1484, 1462, 1520, 1410, 1418, 1423, 1427, 1527, 1524, 1533, 1471, 1483, 1457, 1451, 1502, 1521, 1460, 1498, 1523, 1473, 1412, 1479, 1448, 1536, 1508, 1439, 1416, 1443, 1500, 1519, 1419, 1470, 1522, 1513, 1477, 1480, 1516, 1425, 1512, 1411, 1472, 1454, 1474, 1444, 1459, 1432, 1496, 1426, 1440, 1467, 1491, 1489, 1504, 1463, 1481, 1449, 1514, 1476, 1530, 1450, 1505, 1532, 1442, 1468, 1445, 1456, 1429, 1413, 1492, 1517, 1466, 1437, 1475, 1525, 1422, 1465, 1495, 1421, 1529, 1507, 1526, 1458, 1511, 1499, 1453, 1488, 1534, 1535, 1497, 1436, 1428, 1478, 1486, 1515, 1528, 1431, 1469, 1452, 1409, 1501, 1461, 1503, 1531, 1464, 1494, 1455, 1506, 1435 +}; + +const uint16_t HRAa_1536_512_H_cols[] = { +111, 16, 113, 75, 13, 40, 66, 121, 126, 22, 127, 120, 59, 101, 19, 52, 114, 98, 123, 80, 5, 108, 117, 81, 94, 88, 50, 79, 26, 86, 3, 39, 6, 12, 104, 84, 43, 119, 4, 53, 49, 95, 100, 27, 60, 55, 76, 87, 92, 38, 82, 78, 24, 15, 61, 124, 45, 72, 29, 90, 34, 62, 85, 110, 122, 67, 18, 20, 35, 107, 33, 102, 31, 116, 46, 28, 32, 74, 58, 47, 106, 71, 68, 115, 41, 93, 91, 48, 69, 8, 7, 64, 97, 118, 17, 70, 57, 2, 44, 23, 99, 42, 63, 25, 73, 37, 77, 83, 89, 56, 10, 30, 112, 21, 105, 65, 128, 9, 54, 14, 125, 1, 96, 103, 109, 11, 51, 36, 59, 128, 26, 10, 11, 6, 43, 50, 37, 94, 75, 98, 121, 123, 21, 15, 84, 9, 60, 62, 110, 53, 40, 80, 90, 58, 35, 17, 71, 30, 4, 92, 28, 49, 83, 36, 88, 41, 82, 86, 48, 3, 34, 45, 31, 22, 104, 46, 116, 39, 97, 42, 102, 93, 38, 25, 100, 122, 33, 79, 47, 106, 95, 19, 111, 126, 57, 115, 72, 18, 23, 44, 91, 105, 99, 32, 63, 8, 12, 14, 81, 55, 20, 54, 16, 5, 109, 65, 120, 85, 69, 103, 114, 125, 1, 113, 73, 127, 61, 51, 101, 27, 56, 118, 66, 108, 89, 70, 29, 78, 7, 74, 77, 87, 117, 124, 96, 68, 119, 67, 2, 13, 112, 52, 107, 24, 64, 76, 43, 80, 48, 78, 3, 113, 100, 92, 104, 47, 74, 69, 64, 35, 33, 55, 30, 102, 124, 4, 66, 11, 101, 126, 9, 119, 2, 85, 99, 65, 107, 111, 77, 20, 28, 23, 5, 15, 73, 120, 44, 51, 123, 121, 83, 125, 94, 39, 81, 32, 36, 84, 63, 52, 72, 93, 70, 67, 71, 62, 10, 89, 127, 45, 122, 42, 108, 56, 53, 27, 18, 37, 90, 98, 86, 1, 106, 115, 96, 6, 46, 87, 91, 29, 34, 82, 57, 76, 31, 21, 105, 95, 117, 16, 24, 13, 59, 25, 110, 12, 7, 68, 97, 38, 22, 40, 26, 61, 112, 79, 14, 50, 8, 60, 54, 128, 103, 58, 109, 19, 49, 116, 114, 88, 75, 41, 118, 17, 96, 87, 72, 27, 105, 29, 50, 114, 112, 56, 43, 82, 118, 117, 79, 45, 111, 61, 115, 5, 69, 97, 21, 46, 23, 44, 57, 71, 6, 73, 37, 32, 33, 18, 123, 121, 107, 100, 20, 49, 24, 1, 42, 94, 85, 70, 60, 41, 65, 103, 104, 76, 102, 88, 14, 66, 48, 12, 16, 26, 91, 58, 93, 35, 2, 68, 39, 122, 116, 54, 4, 90, 109, 127, 7, 63, 78, 92, 98, 89, 99, 51, 77, 13, 8, 128, 40, 80, 125, 22, 25, 47, 120, 53, 36, 17, 55, 52, 15, 59, 11, 83, 3, 75, 106, 30, 62, 74, 9, 64, 86, 28, 108, 126, 110, 67, 38, 101, 31, 124, 84, 81, 19, 10, 34, 113, 119, 95, 11, 103, 104, 38, 47, 69, 88, 93, 97, 40, 46, 117, 70, 107, 30, 78, 72, 121, 9, 59, 63, 10, 115, 111, 48, 98, 16, 77, 28, 50, 105, 19, 32, 57, 37, 101, 126, 17, 26, 90, 39, 123, 122, 82, 108, 42, 80, 125, 67, 116, 91, 58, 81, 112, 20, 41, 127, 43, 85, 114, 128, 84, 13, 3, 76, 68, 119, 94, 86, 64, 27, 120, 65, 1, 87, 62, 6, 113, 35, 24, 15, 33, 23, 83, 8, 29, 31, 110, 49, 96, 75, 99, 14, 124, 106, 4, 56, 34, 79, 25, 71, 74, 73, 51, 2, 61, 44, 12, 55, 52, 66, 102, 89, 109, 5, 22, 54, 118, 100, 53, 36, 7, 92, 60, 21, 45, 18, 95, 89, 73, 70, 53, 28, 50, 2, 75, 120, 15, 8, 111, 29, 1, 100, 19, 110, 14, 43, 71, 69, 82, 78, 52, 18, 92, 27, 79, 108, 12, 124, 6, 105, 106, 10, 63, 116, 38, 99, 72, 97, 98, 9, 35, 80, 59, 125, 91, 67, 37, 30, 112, 55, 101, 16, 109, 4, 113, 114, 62, 17, 22, 86, 104, 7, 93, 119, 41, 77, 42, 26, 96, 88, 34, 68, 49, 13, 3, 60, 33, 40, 36, 20, 46, 85, 24, 81, 54, 51, 21, 23, 76, 32, 65, 117, 87, 83, 121, 95, 74, 118, 11, 31, 127, 94, 58, 84, 48, 44, 25, 45, 5, 57, 39, 126, 64, 107, 47, 56, 103, 128, 61, 115, 90, 66, 123, 102, 122, 3, 51, 57, 41, 39, 31, 118, 107, 55, 62, 75, 66, 36, 126, 24, 108, 8, 44, 92, 85, 21, 121, 72, 35, 77, 117, 114, 64, 58, 43, 13, 94, 17, 49, 54, 112, 6, 104, 38, 34, 65, 91, 27, 29, 124, 78, 42, 123, 115, 26, 1, 89, 109, 16, 10, 80, 81, 70, 4, 87, 119, 111, 14, 48, 30, 74, 83, 40, 98, 97, 96, 47, 12, 88, 128, 20, 15, 116, 63, 106, 101, 25, 32, 11, 82, 95, 69, 7, 127, 68, 45, 22, 84, 76, 93, 19, 50, 18, 105, 46, 37, 2, 99, 67, 71, 110, 90, 86, 23, 73, 122, 79, 100, 125, 113, 28, 9, 59, 5, 61, 120, 33, 53, 56, 103, 102, 60, 52, 90, 107, 40, 125, 123, 20, 96, 72, 119, 71, 88, 92, 50, 30, 2, 56, 79, 33, 63, 28, 34, 80, 116, 108, 22, 51, 115, 32, 126, 74, 13, 102, 81, 66, 29, 4, 25, 43, 75, 127, 21, 94, 114, 57, 12, 100, 58, 9, 111, 76, 8, 118, 1, 3, 128, 84, 46, 61, 95, 5, 91, 87, 54, 69, 38, 15, 52, 120, 24, 42, 37, 7, 62, 103, 117, 89, 48, 35, 85, 112, 121, 6, 59, 11, 31, 113, 18, 10, 64, 36, 47, 98, 104, 83, 53, 78, 23, 73, 82, 70, 39, 44, 16, 99, 60, 41, 97, 26, 105, 101, 106, 45, 49, 109, 55, 67, 86, 124, 65, 77, 68, 122, 110, 14, 17, 27, 93, 19, 72, 124, 31, 128, 44, 28, 92, 126, 82, 12, 48, 25, 30, 9, 117, 104, 47, 108, 98, 81, 53, 45, 15, 40, 71, 62, 85, 70, 106, 16, 63, 75, 26, 79, 8, 74, 110, 68, 57, 23, 6, 99, 105, 36, 19, 49, 107, 109, 91, 125, 122, 18, 86, 65, 14, 116, 67, 103, 11, 32, 89, 22, 84, 52, 101, 90, 51, 37, 39, 119, 61, 58, 60, 123, 29, 114, 3, 41, 102, 43, 80, 59, 2, 76, 78, 87, 42, 66, 95, 115, 10, 17, 88, 100, 127, 20, 46, 94, 50, 111, 35, 21, 93, 27, 112, 97, 54, 1, 24, 33, 113, 77, 38, 34, 56, 118, 121, 69, 83, 96, 5, 73, 7, 55, 64, 4, 13, 120, 19, 102, 38, 87, 6, 93, 60, 124, 33, 42, 13, 127, 54, 7, 91, 61, 37, 95, 104, 26, 67, 55, 18, 75, 122, 12, 116, 68, 52, 16, 25, 57, 66, 39, 97, 110, 92, 48, 76, 83, 14, 59, 36, 74, 125, 51, 4, 121, 120, 40, 28, 99, 62, 70, 88, 10, 108, 123, 11, 107, 118, 2, 64, 85, 44, 84, 96, 73, 81, 31, 106, 50, 80, 103, 30, 47, 69, 56, 9, 94, 3, 53, 5, 128, 63, 119, 43, 112, 27, 117, 115, 46, 78, 72, 114, 20, 1, 109, 23, 24, 82, 35, 101, 111, 126, 45, 100, 17, 79, 89, 8, 65, 113, 29, 22, 105, 58, 15, 21, 86, 71, 34, 77, 90, 32, 49, 41, 98, 60, 30, 89, 18, 117, 22, 10, 9, 99, 108, 90, 95, 123, 58, 101, 50, 119, 1, 127, 71, 41, 69, 35, 17, 83, 84, 103, 42, 27, 40, 39, 118, 93, 33, 75, 96, 110, 113, 73, 8, 21, 111, 48, 81, 100, 26, 66, 24, 4, 97, 5, 46, 28, 19, 82, 116, 3, 91, 105, 114, 126, 13, 62, 109, 79, 122, 121, 124, 7, 53, 37, 15, 16, 106, 63, 120, 128, 47, 44, 23, 55, 31, 57, 51, 29, 14, 49, 61, 38, 85, 54, 52, 104, 107, 92, 102, 59, 67, 77, 11, 25, 76, 36, 98, 32, 6, 34, 68, 125, 86, 88, 70, 64, 112, 45, 56, 20, 94, 65, 43, 87, 12, 2, 74, 80, 72, 115, 78, 13, 43, 100, 80, 62, 40, 19, 37, 25, 45, 15, 106, 124, 28, 93, 6, 82, 90, 5, 2, 21, 111, 34, 69, 68, 75, 48, 57, 58, 125, 9, 56, 102, 78, 42, 115, 12, 46, 114, 87, 91, 63, 20, 119, 113, 60, 107, 47, 51, 103, 14, 120, 1, 38, 8, 61, 101, 116, 70, 105, 72, 97, 3, 64, 32, 41, 123, 27, 67, 29, 74, 128, 18, 122, 16, 26, 86, 17, 11, 88, 4, 126, 71, 52, 94, 117, 54, 92, 79, 98, 77, 53, 110, 30, 104, 127, 35, 95, 89, 59, 65, 118, 121, 96, 55, 7, 76, 73, 50, 112, 84, 83, 39, 10, 36, 31, 49, 109, 23, 22, 66, 81, 24, 85, 108, 99, 33, 44, 235, 189, 247, 148, 168, 145, 143, 242, 214, 210, 144, 241, 218, 177, 205, 183, 134, 162, 141, 150, 163, 186, 132, 245, 253, 201, 200, 175, 244, 180, 139, 233, 182, 164, 184, 137, 142, 252, 254, 212, 133, 160, 178, 239, 129, 131, 146, 224, 229, 223, 194, 209, 169, 230, 152, 226, 149, 179, 221, 232, 135, 250, 231, 197, 191, 193, 172, 203, 204, 238, 234, 222, 181, 237, 207, 176, 251, 243, 211, 219, 215, 154, 171, 196, 158, 240, 153, 156, 147, 157, 190, 173, 248, 188, 151, 246, 256, 192, 138, 165, 185, 216, 166, 217, 227, 155, 140, 170, 174, 187, 202, 136, 167, 236, 130, 249, 228, 198, 213, 161, 195, 255, 208, 206, 159, 199, 220, 225, 132, 217, 191, 135, 202, 166, 153, 168, 158, 165, 133, 220, 175, 210, 225, 204, 209, 196, 154, 203, 238, 242, 174, 170, 214, 221, 194, 169, 252, 144, 150, 157, 159, 218, 215, 136, 249, 227, 229, 141, 241, 250, 253, 240, 234, 206, 162, 192, 155, 131, 251, 182, 178, 186, 200, 222, 130, 237, 212, 239, 189, 197, 138, 161, 223, 184, 245, 152, 254, 211, 226, 256, 176, 193, 199, 232, 235, 147, 163, 190, 139, 207, 187, 160, 171, 247, 224, 201, 248, 149, 230, 228, 213, 164, 216, 181, 156, 172, 243, 142, 173, 137, 195, 129, 244, 167, 146, 183, 198, 148, 255, 185, 179, 140, 180, 134, 205, 231, 219, 145, 143, 233, 246, 208, 151, 236, 188, 177, 219, 203, 233, 175, 224, 234, 162, 192, 254, 191, 164, 200, 171, 225, 178, 185, 212, 251, 163, 236, 222, 249, 131, 170, 207, 155, 149, 213, 202, 198, 206, 135, 168, 181, 151, 214, 238, 156, 220, 143, 235, 144, 197, 174, 231, 186, 184, 239, 169, 180, 250, 132, 252, 147, 208, 196, 210, 172, 201, 232, 129, 138, 253, 205, 150, 177, 141, 153, 152, 165, 146, 167, 140, 242, 139, 246, 176, 134, 166, 221, 228, 189, 211, 243, 136, 160, 133, 148, 216, 217, 240, 195, 137, 245, 229, 157, 188, 256, 215, 237, 179, 182, 194, 154, 223, 187, 204, 161, 145, 183, 173, 227, 226, 209, 142, 130, 193, 159, 247, 255, 158, 230, 244, 199, 241, 248, 190, 218, 216, 153, 201, 231, 174, 252, 139, 166, 187, 134, 217, 197, 190, 234, 238, 225, 164, 181, 220, 141, 140, 158, 189, 250, 213, 163, 160, 236, 243, 207, 155, 138, 235, 204, 246, 135, 203, 159, 233, 149, 179, 171, 232, 210, 152, 165, 143, 209, 200, 146, 145, 182, 241, 196, 130, 133, 229, 180, 170, 226, 169, 192, 214, 239, 167, 208, 251, 137, 205, 175, 162, 157, 222, 255, 148, 224, 151, 253, 228, 176, 218, 186, 230, 168, 136, 206, 242, 150, 178, 219, 131, 245, 223, 199, 147, 185, 188, 254, 237, 247, 211, 173, 244, 184, 154, 172, 212, 198, 221, 256, 248, 193, 249, 142, 132, 161, 202, 191, 240, 194, 177, 195, 215, 129, 227, 144, 183, 156, 180, 251, 130, 235, 203, 192, 206, 221, 146, 241, 129, 170, 157, 249, 139, 196, 205, 208, 240, 137, 231, 190, 215, 160, 193, 219, 254, 182, 144, 138, 204, 228, 214, 178, 252, 188, 253, 143, 159, 224, 246, 225, 171, 156, 238, 226, 166, 161, 173, 236, 232, 194, 195, 169, 218, 230, 181, 183, 184, 167, 211, 244, 245, 223, 165, 213, 152, 151, 158, 155, 199, 142, 233, 220, 248, 185, 209, 242, 191, 168, 256, 134, 174, 255, 179, 172, 150, 247, 153, 176, 243, 186, 201, 198, 217, 132, 189, 133, 234, 177, 237, 164, 197, 250, 135, 136, 131, 212, 200, 148, 229, 202, 141, 140, 154, 227, 145, 162, 163, 147, 239, 216, 222, 207, 187, 175, 210, 149, 211, 173, 189, 252, 130, 153, 187, 201, 133, 214, 246, 143, 181, 163, 256, 209, 160, 150, 203, 232, 236, 234, 154, 202, 242, 146, 238, 251, 156, 140, 188, 235, 186, 179, 194, 148, 149, 241, 208, 161, 240, 132, 184, 223, 168, 176, 198, 247, 229, 138, 162, 172, 239, 180, 158, 207, 190, 248, 253, 230, 220, 225, 250, 134, 167, 129, 233, 196, 171, 157, 200, 164, 137, 141, 136, 178, 147, 182, 249, 170, 145, 204, 243, 169, 131, 152, 139, 224, 183, 216, 219, 205, 210, 245, 215, 244, 185, 151, 135, 221, 166, 217, 213, 199, 222, 195, 191, 193, 254, 174, 144, 159, 218, 237, 255, 155, 227, 206, 177, 197, 192, 212, 226, 165, 142, 231, 175, 228, 246, 215, 213, 249, 187, 225, 178, 238, 171, 214, 254, 191, 177, 147, 160, 138, 169, 163, 165, 231, 192, 190, 221, 139, 202, 166, 164, 198, 239, 143, 204, 243, 144, 156, 182, 242, 184, 153, 193, 197, 176, 129, 207, 185, 170, 131, 167, 149, 145, 229, 172, 130, 168, 222, 142, 244, 158, 162, 146, 219, 133, 250, 141, 155, 205, 140, 188, 210, 247, 212, 216, 175, 151, 189, 148, 237, 203, 230, 226, 180, 157, 206, 255, 220, 234, 208, 200, 218, 183, 240, 132, 252, 136, 195, 174, 137, 211, 201, 223, 196, 228, 199, 248, 241, 186, 224, 181, 233, 159, 253, 154, 134, 217, 235, 245, 161, 227, 194, 179, 232, 251, 135, 209, 150, 173, 152, 236, 256, 253, 224, 146, 236, 243, 250, 202, 201, 147, 191, 198, 143, 189, 196, 151, 211, 131, 165, 195, 166, 208, 171, 140, 244, 214, 218, 219, 228, 235, 192, 141, 173, 234, 145, 167, 251, 232, 157, 256, 132, 180, 177, 176, 138, 178, 210, 255, 156, 170, 161, 163, 150, 130, 184, 159, 238, 194, 245, 252, 204, 139, 247, 205, 240, 179, 209, 133, 246, 215, 137, 222, 175, 136, 154, 160, 158, 223, 229, 197, 199, 212, 254, 213, 206, 242, 203, 168, 249, 183, 207, 226, 220, 152, 134, 162, 237, 200, 185, 181, 230, 216, 217, 142, 182, 190, 172, 187, 169, 231, 174, 225, 188, 227, 248, 193, 241, 155, 239, 135, 186, 129, 233, 148, 144, 149, 221, 153, 164, 196, 173, 172, 148, 146, 171, 170, 221, 188, 182, 145, 240, 213, 231, 211, 254, 252, 161, 204, 218, 190, 235, 154, 144, 130, 149, 197, 192, 175, 165, 131, 227, 208, 181, 158, 224, 229, 236, 184, 251, 233, 140, 156, 228, 176, 183, 246, 249, 220, 201, 244, 189, 151, 169, 164, 200, 137, 138, 152, 245, 226, 217, 250, 256, 255, 147, 247, 193, 139, 166, 242, 230, 129, 209, 223, 159, 136, 162, 142, 187, 178, 174, 241, 179, 163, 134, 155, 157, 133, 215, 132, 203, 177, 160, 210, 167, 143, 198, 150, 239, 212, 234, 219, 225, 206, 216, 214, 168, 194, 237, 135, 191, 180, 243, 205, 253, 202, 232, 185, 199, 153, 207, 248, 195, 186, 222, 141, 238, 148, 243, 166, 188, 226, 208, 149, 215, 145, 251, 239, 191, 209, 255, 144, 222, 231, 225, 156, 180, 133, 172, 147, 183, 200, 227, 179, 195, 249, 241, 196, 242, 137, 228, 173, 160, 230, 175, 151, 134, 253, 212, 235, 250, 211, 245, 163, 237, 247, 170, 138, 224, 139, 217, 182, 206, 152, 194, 205, 132, 186, 238, 142, 181, 207, 167, 252, 214, 158, 198, 236, 199, 223, 240, 234, 146, 155, 150, 135, 131, 202, 203, 246, 219, 171, 187, 164, 218, 143, 221, 229, 220, 174, 201, 185, 140, 232, 213, 165, 254, 154, 169, 178, 161, 157, 216, 153, 193, 168, 184, 248, 159, 129, 244, 210, 190, 192, 141, 256, 176, 204, 177, 130, 197, 189, 162, 136, 233, 201, 168, 135, 226, 152, 169, 167, 205, 203, 233, 243, 232, 253, 157, 249, 133, 165, 129, 220, 246, 209, 149, 197, 208, 160, 176, 224, 206, 146, 182, 187, 211, 130, 212, 250, 140, 227, 255, 213, 225, 173, 192, 134, 184, 180, 171, 238, 191, 237, 234, 170, 139, 136, 217, 190, 247, 189, 148, 202, 251, 219, 186, 166, 241, 252, 181, 138, 158, 210, 159, 172, 194, 179, 175, 193, 164, 132, 218, 150, 235, 188, 178, 229, 230, 154, 142, 155, 215, 240, 199, 153, 223, 248, 162, 244, 161, 239, 242, 200, 196, 245, 137, 198, 214, 228, 163, 131, 145, 231, 254, 185, 256, 177, 144, 183, 207, 216, 204, 174, 151, 147, 143, 222, 195, 141, 221, 156, 236, 148, 194, 175, 167, 249, 187, 182, 211, 136, 155, 227, 208, 151, 239, 188, 203, 199, 149, 137, 195, 130, 193, 207, 219, 132, 225, 145, 212, 215, 231, 135, 240, 184, 186, 174, 205, 173, 180, 178, 218, 222, 256, 251, 179, 150, 248, 170, 204, 247, 138, 164, 189, 209, 244, 156, 255, 191, 232, 198, 176, 190, 226, 246, 241, 142, 141, 242, 221, 133, 197, 243, 185, 172, 160, 152, 183, 213, 165, 217, 234, 140, 228, 220, 196, 250, 139, 214, 159, 131, 210, 238, 206, 237, 153, 216, 147, 171, 129, 223, 253, 229, 230, 202, 168, 162, 169, 254, 157, 200, 154, 192, 143, 181, 233, 235, 245, 201, 236, 224, 134, 144, 158, 163, 146, 161, 166, 252, 177, 306, 300, 383, 261, 369, 374, 357, 269, 291, 298, 345, 275, 352, 271, 339, 321, 356, 351, 372, 371, 297, 348, 286, 259, 355, 322, 317, 373, 333, 335, 367, 360, 330, 283, 289, 370, 258, 320, 279, 379, 350, 323, 316, 264, 346, 262, 266, 325, 268, 362, 361, 353, 276, 341, 324, 378, 338, 358, 314, 313, 364, 267, 274, 281, 305, 365, 359, 265, 307, 326, 308, 340, 336, 295, 312, 257, 382, 278, 270, 302, 287, 319, 299, 377, 375, 263, 354, 293, 310, 328, 376, 309, 381, 296, 349, 342, 327, 347, 343, 282, 273, 384, 280, 260, 329, 368, 344, 284, 301, 315, 380, 277, 366, 337, 303, 285, 311, 318, 272, 332, 288, 304, 331, 290, 294, 334, 292, 363, 363, 258, 260, 346, 336, 326, 358, 355, 370, 302, 350, 332, 316, 263, 369, 310, 338, 362, 273, 282, 329, 324, 378, 376, 359, 261, 264, 268, 375, 382, 348, 284, 356, 277, 279, 341, 309, 343, 364, 334, 361, 297, 360, 384, 377, 266, 311, 313, 349, 335, 373, 312, 293, 267, 367, 292, 314, 330, 296, 342, 323, 287, 371, 272, 304, 298, 327, 269, 317, 274, 278, 372, 303, 337, 383, 320, 351, 365, 321, 344, 276, 381, 290, 300, 374, 325, 366, 315, 301, 259, 347, 319, 322, 339, 262, 306, 368, 352, 280, 283, 270, 257, 318, 345, 357, 328, 275, 340, 281, 285, 271, 286, 288, 291, 308, 307, 295, 299, 379, 353, 331, 289, 294, 265, 380, 354, 333, 305, 325, 259, 305, 334, 316, 288, 378, 358, 361, 289, 326, 364, 376, 339, 275, 335, 263, 297, 338, 377, 352, 310, 349, 299, 381, 383, 363, 291, 308, 277, 351, 366, 374, 321, 328, 270, 373, 306, 274, 372, 350, 365, 281, 340, 337, 267, 298, 279, 345, 280, 370, 356, 292, 312, 342, 360, 329, 324, 285, 309, 344, 367, 347, 258, 341, 304, 303, 266, 353, 284, 276, 287, 290, 319, 322, 294, 295, 314, 336, 379, 348, 296, 359, 268, 260, 264, 271, 283, 282, 257, 318, 265, 269, 333, 362, 382, 323, 384, 320, 315, 286, 301, 311, 262, 369, 261, 302, 357, 293, 331, 354, 368, 375, 272, 278, 371, 327, 313, 330, 355, 317, 273, 307, 300, 380, 332, 343, 346, 300, 340, 277, 290, 283, 282, 293, 366, 319, 304, 279, 381, 305, 361, 333, 301, 365, 353, 317, 356, 370, 308, 295, 330, 372, 343, 302, 346, 378, 324, 323, 292, 266, 280, 268, 316, 259, 374, 339, 257, 261, 285, 313, 272, 258, 345, 298, 352, 311, 310, 263, 264, 267, 329, 289, 360, 364, 380, 320, 286, 287, 322, 351, 297, 315, 338, 375, 276, 344, 326, 309, 368, 303, 278, 337, 335, 294, 354, 384, 383, 271, 288, 260, 331, 269, 306, 367, 325, 299, 284, 312, 379, 270, 318, 363, 262, 342, 382, 291, 273, 341, 373, 332, 371, 281, 349, 296, 307, 274, 357, 336, 347, 355, 265, 377, 321, 350, 348, 358, 275, 314, 334, 376, 359, 369, 327, 328, 362, 275, 259, 380, 381, 271, 320, 345, 293, 354, 334, 317, 288, 353, 372, 349, 313, 378, 287, 331, 379, 289, 286, 377, 263, 297, 336, 282, 341, 357, 323, 343, 356, 284, 338, 269, 328, 365, 376, 322, 290, 344, 374, 325, 382, 281, 268, 296, 309, 316, 300, 347, 266, 311, 295, 298, 267, 337, 291, 276, 257, 292, 333, 368, 261, 373, 273, 364, 358, 375, 274, 324, 312, 278, 335, 339, 283, 329, 384, 321, 348, 315, 260, 294, 359, 304, 264, 326, 305, 352, 330, 360, 361, 280, 270, 362, 342, 258, 371, 327, 332, 340, 355, 367, 308, 265, 351, 303, 366, 306, 363, 279, 272, 369, 262, 346, 350, 318, 307, 383, 310, 319, 277, 302, 301, 370, 285, 299, 314, 280, 269, 366, 362, 384, 360, 262, 321, 383, 314, 361, 265, 381, 372, 325, 305, 294, 344, 259, 297, 371, 322, 309, 313, 292, 375, 379, 316, 382, 307, 304, 282, 281, 356, 345, 319, 355, 315, 323, 283, 330, 274, 263, 342, 332, 284, 302, 335, 324, 272, 278, 257, 303, 311, 276, 339, 260, 271, 376, 377, 261, 312, 359, 285, 357, 353, 334, 258, 299, 365, 340, 298, 336, 286, 328, 378, 358, 291, 341, 296, 380, 266, 289, 351, 267, 320, 350, 346, 273, 306, 295, 310, 329, 275, 367, 337, 277, 326, 374, 348, 343, 308, 290, 327, 288, 293, 368, 364, 349, 373, 279, 317, 333, 369, 338, 301, 347, 354, 331, 268, 370, 264, 318, 270, 300, 352, 287, 363, 341, 348, 376, 346, 331, 305, 340, 302, 308, 303, 315, 321, 375, 278, 298, 333, 319, 287, 334, 371, 260, 310, 263, 330, 326, 359, 282, 335, 313, 369, 342, 300, 299, 286, 379, 291, 276, 301, 355, 349, 347, 257, 304, 373, 294, 336, 290, 270, 306, 363, 383, 370, 262, 297, 284, 293, 384, 329, 358, 367, 277, 374, 267, 356, 353, 352, 272, 311, 323, 324, 368, 344, 362, 325, 380, 261, 328, 288, 317, 345, 279, 337, 296, 372, 271, 266, 382, 274, 273, 275, 264, 312, 343, 366, 361, 351, 316, 350, 381, 322, 292, 360, 285, 283, 314, 339, 338, 268, 269, 289, 354, 309, 365, 377, 307, 258, 332, 357, 295, 320, 281, 378, 318, 327, 280, 265, 259, 364, 346, 315, 371, 265, 305, 322, 321, 354, 273, 297, 257, 378, 345, 343, 275, 299, 278, 314, 353, 327, 335, 329, 338, 362, 326, 285, 323, 279, 369, 267, 298, 324, 309, 351, 319, 291, 336, 276, 333, 328, 292, 286, 280, 277, 288, 379, 259, 380, 260, 381, 296, 318, 364, 368, 287, 334, 375, 382, 270, 284, 342, 263, 266, 311, 360, 384, 258, 320, 363, 370, 359, 366, 341, 272, 316, 281, 356, 374, 282, 367, 302, 301, 295, 365, 339, 308, 337, 376, 283, 293, 330, 352, 361, 304, 271, 268, 300, 355, 290, 349, 331, 261, 348, 372, 313, 358, 274, 344, 373, 357, 294, 289, 317, 303, 310, 383, 325, 377, 312, 306, 347, 340, 307, 264, 269, 350, 332, 262, 257, 328, 348, 336, 323, 303, 339, 374, 351, 379, 272, 327, 274, 333, 352, 278, 359, 314, 370, 300, 267, 290, 270, 380, 261, 275, 260, 289, 259, 345, 330, 291, 284, 271, 310, 258, 340, 324, 301, 357, 365, 295, 329, 322, 307, 364, 384, 342, 283, 276, 338, 305, 296, 335, 282, 349, 266, 263, 298, 268, 371, 366, 313, 281, 319, 318, 356, 317, 382, 373, 381, 308, 299, 367, 286, 277, 331, 372, 315, 287, 269, 377, 341, 311, 346, 360, 306, 353, 285, 383, 355, 280, 321, 344, 376, 332, 343, 350, 375, 279, 316, 302, 354, 368, 325, 361, 304, 334, 312, 369, 347, 363, 273, 297, 358, 288, 264, 320, 378, 294, 337, 309, 262, 326, 362, 293, 265, 292, 261, 302, 357, 382, 328, 356, 346, 338, 340, 378, 323, 310, 342, 314, 279, 313, 326, 308, 309, 352, 322, 320, 269, 293, 315, 334, 345, 384, 376, 271, 379, 281, 381, 329, 289, 264, 301, 362, 266, 305, 278, 280, 262, 344, 268, 333, 283, 339, 321, 298, 368, 365, 377, 257, 336, 258, 273, 274, 306, 288, 304, 292, 307, 311, 335, 359, 296, 369, 349, 366, 284, 263, 332, 343, 276, 272, 330, 361, 363, 270, 347, 372, 316, 265, 290, 348, 260, 312, 324, 380, 286, 277, 337, 275, 383, 291, 331, 364, 367, 319, 353, 373, 371, 287, 325, 358, 285, 351, 318, 327, 294, 267, 300, 374, 317, 295, 354, 355, 259, 370, 360, 303, 341, 299, 375, 297, 282, 350, 326, 332, 286, 360, 328, 335, 312, 353, 267, 337, 371, 317, 344, 298, 340, 294, 363, 362, 383, 316, 320, 339, 368, 263, 282, 380, 381, 318, 366, 377, 348, 306, 309, 315, 350, 322, 382, 303, 301, 374, 330, 357, 272, 319, 268, 346, 352, 376, 345, 351, 370, 323, 321, 365, 367, 285, 260, 265, 277, 280, 341, 262, 324, 349, 271, 289, 295, 281, 300, 364, 297, 359, 333, 334, 355, 358, 375, 276, 361, 284, 261, 273, 275, 274, 378, 293, 379, 343, 372, 305, 290, 283, 331, 291, 299, 259, 336, 384, 369, 257, 342, 304, 270, 329, 311, 327, 373, 278, 313, 266, 307, 354, 269, 347, 296, 338, 279, 314, 258, 288, 292, 325, 287, 302, 356, 310, 264, 308, 294, 308, 296, 360, 304, 275, 341, 302, 305, 266, 369, 314, 269, 375, 291, 339, 349, 280, 381, 350, 327, 370, 329, 259, 316, 365, 357, 333, 257, 354, 313, 348, 359, 364, 261, 362, 332, 268, 287, 276, 331, 326, 267, 382, 286, 297, 295, 262, 323, 288, 309, 380, 378, 274, 334, 303, 355, 321, 289, 318, 366, 356, 279, 278, 307, 368, 352, 345, 277, 270, 371, 310, 317, 315, 319, 290, 283, 374, 376, 337, 306, 336, 351, 373, 271, 324, 311, 340, 330, 282, 273, 258, 264, 298, 361, 300, 342, 383, 346, 325, 284, 358, 372, 367, 335, 347, 377, 312, 292, 344, 293, 343, 263, 384, 281, 338, 301, 353, 260, 265, 379, 272, 299, 322, 285, 328, 363, 320, 512, 488, 426, 457, 396, 504, 503, 496, 413, 458, 387, 435, 420, 401, 403, 432, 394, 459, 443, 483, 484, 467, 388, 391, 422, 449, 473, 430, 497, 486, 511, 450, 424, 395, 463, 493, 433, 392, 415, 400, 417, 437, 448, 439, 502, 447, 508, 466, 510, 409, 479, 419, 477, 482, 390, 411, 407, 476, 500, 427, 494, 478, 386, 460, 429, 505, 385, 442, 434, 441, 491, 423, 495, 444, 389, 402, 487, 445, 399, 425, 462, 405, 489, 410, 506, 416, 490, 404, 418, 393, 455, 481, 454, 436, 469, 472, 480, 465, 509, 406, 485, 408, 398, 461, 438, 440, 474, 492, 428, 475, 431, 499, 498, 412, 464, 456, 451, 501, 414, 421, 397, 507, 470, 446, 468, 453, 471, 452, 404, 462, 511, 405, 418, 435, 392, 474, 438, 510, 437, 461, 400, 432, 401, 485, 499, 427, 475, 421, 453, 495, 459, 426, 422, 447, 442, 429, 456, 481, 443, 444, 397, 386, 420, 424, 468, 508, 505, 448, 415, 487, 486, 480, 482, 395, 473, 449, 411, 394, 494, 406, 403, 470, 500, 451, 476, 399, 507, 454, 472, 388, 491, 483, 396, 452, 425, 455, 436, 439, 409, 416, 385, 502, 469, 504, 402, 501, 490, 458, 445, 417, 484, 414, 391, 488, 471, 477, 466, 440, 434, 493, 423, 492, 489, 497, 450, 464, 506, 446, 390, 498, 463, 428, 512, 413, 467, 460, 433, 398, 387, 441, 410, 478, 430, 496, 479, 457, 407, 509, 419, 503, 412, 431, 393, 465, 408, 389, 430, 460, 466, 412, 468, 483, 443, 497, 486, 431, 452, 435, 491, 487, 445, 482, 509, 492, 484, 403, 436, 473, 453, 392, 420, 496, 389, 500, 397, 479, 456, 417, 469, 406, 480, 475, 393, 394, 411, 390, 447, 494, 476, 462, 501, 400, 504, 402, 461, 410, 467, 387, 490, 499, 505, 512, 457, 427, 401, 458, 471, 489, 398, 478, 459, 413, 506, 472, 449, 508, 477, 451, 498, 464, 465, 481, 433, 421, 470, 502, 441, 404, 450, 429, 439, 495, 440, 437, 432, 408, 424, 399, 444, 423, 428, 442, 405, 455, 485, 422, 493, 396, 438, 386, 418, 385, 416, 409, 426, 415, 407, 474, 503, 507, 419, 454, 434, 463, 425, 395, 448, 414, 391, 510, 446, 511, 488, 388, 388, 498, 442, 389, 475, 398, 397, 462, 416, 424, 439, 441, 436, 463, 400, 402, 393, 423, 481, 412, 472, 470, 488, 491, 420, 421, 449, 425, 493, 486, 456, 417, 468, 411, 446, 435, 451, 511, 478, 508, 413, 450, 392, 479, 461, 496, 509, 502, 443, 385, 452, 404, 406, 426, 394, 476, 477, 453, 429, 494, 455, 506, 500, 433, 454, 430, 466, 484, 474, 395, 487, 387, 444, 471, 482, 434, 473, 499, 414, 396, 408, 431, 418, 501, 391, 459, 399, 495, 401, 448, 512, 432, 390, 405, 437, 428, 409, 504, 469, 507, 445, 505, 386, 464, 485, 410, 503, 480, 489, 457, 483, 427, 407, 422, 458, 492, 419, 440, 497, 465, 510, 403, 490, 467, 415, 447, 438, 460, 475, 402, 497, 395, 439, 390, 481, 472, 408, 469, 456, 489, 457, 505, 430, 424, 447, 416, 508, 441, 415, 434, 473, 429, 405, 491, 459, 425, 410, 409, 451, 435, 479, 394, 488, 468, 399, 493, 407, 462, 455, 403, 387, 484, 483, 431, 391, 460, 404, 477, 453, 414, 506, 482, 500, 393, 406, 478, 471, 485, 449, 433, 463, 490, 467, 452, 420, 474, 426, 458, 501, 487, 504, 510, 486, 385, 386, 398, 417, 389, 432, 423, 454, 507, 419, 421, 494, 422, 400, 450, 492, 427, 470, 465, 438, 444, 511, 396, 418, 437, 461, 499, 443, 436, 480, 442, 495, 440, 448, 446, 411, 397, 392, 502, 413, 496, 476, 498, 509, 401, 428, 512, 466, 503, 445, 388, 464, 412, 477, 432, 414, 415, 489, 389, 474, 464, 484, 507, 434, 417, 498, 492, 445, 398, 458, 407, 455, 427, 424, 479, 452, 490, 409, 471, 390, 491, 472, 505, 399, 502, 450, 463, 425, 396, 495, 406, 430, 466, 512, 453, 510, 411, 435, 475, 393, 485, 438, 493, 433, 426, 509, 478, 437, 401, 481, 467, 395, 403, 508, 449, 385, 392, 405, 500, 446, 457, 448, 394, 501, 421, 419, 460, 447, 429, 470, 504, 465, 420, 410, 440, 386, 497, 462, 408, 454, 391, 496, 441, 456, 459, 473, 431, 397, 444, 388, 482, 387, 506, 483, 503, 451, 412, 416, 487, 511, 428, 486, 402, 461, 439, 480, 418, 400, 442, 468, 404, 443, 469, 494, 423, 436, 499, 476, 413, 488, 422, 482, 404, 499, 474, 470, 510, 387, 440, 445, 458, 392, 471, 389, 452, 477, 444, 466, 408, 468, 429, 396, 428, 418, 413, 467, 450, 438, 410, 492, 495, 420, 465, 483, 505, 500, 432, 402, 485, 397, 401, 427, 491, 457, 460, 502, 454, 386, 488, 463, 442, 419, 415, 443, 411, 388, 403, 416, 406, 461, 490, 489, 487, 476, 494, 484, 407, 511, 394, 469, 409, 414, 426, 405, 449, 504, 433, 459, 462, 478, 435, 493, 501, 481, 421, 486, 399, 448, 464, 475, 430, 479, 498, 390, 398, 496, 439, 437, 506, 480, 509, 412, 395, 431, 447, 453, 508, 446, 434, 512, 417, 472, 507, 473, 424, 451, 385, 497, 436, 425, 503, 441, 423, 393, 456, 400, 391, 455, 422, 454, 475, 404, 419, 488, 408, 494, 500, 387, 434, 412, 452, 401, 391, 503, 508, 432, 468, 396, 417, 392, 441, 411, 511, 439, 504, 476, 458, 453, 473, 385, 484, 501, 386, 489, 482, 512, 422, 498, 466, 403, 424, 481, 487, 402, 442, 420, 499, 429, 492, 423, 493, 415, 480, 389, 467, 456, 433, 418, 485, 410, 447, 388, 414, 445, 490, 409, 477, 472, 390, 446, 507, 405, 479, 465, 460, 448, 457, 438, 397, 427, 455, 464, 502, 509, 399, 469, 461, 443, 431, 444, 470, 505, 398, 486, 459, 497, 400, 428, 395, 449, 483, 425, 421, 430, 440, 478, 450, 435, 496, 506, 463, 407, 462, 436, 510, 426, 474, 451, 416, 471, 394, 413, 393, 495, 491, 406, 437, 467, 425, 466, 387, 474, 432, 391, 436, 473, 505, 512, 511, 503, 500, 491, 452, 440, 404, 464, 499, 418, 495, 398, 429, 417, 410, 460, 424, 507, 449, 478, 386, 457, 454, 492, 465, 501, 504, 409, 412, 486, 395, 431, 422, 477, 402, 487, 483, 450, 414, 399, 459, 388, 396, 405, 441, 468, 498, 448, 394, 423, 461, 485, 420, 447, 493, 455, 451, 426, 439, 488, 427, 442, 428, 470, 453, 463, 445, 434, 443, 397, 438, 508, 482, 476, 480, 479, 497, 481, 510, 403, 433, 446, 416, 393, 509, 475, 408, 407, 471, 430, 400, 437, 406, 490, 506, 385, 462, 469, 415, 496, 421, 390, 401, 489, 472, 484, 458, 494, 392, 435, 413, 444, 502, 419, 456, 389, 411, 447, 472, 507, 426, 392, 488, 434, 461, 411, 393, 404, 495, 424, 439, 471, 493, 483, 435, 412, 469, 385, 421, 468, 462, 429, 511, 397, 480, 405, 442, 497, 433, 391, 458, 419, 399, 476, 448, 410, 395, 413, 401, 428, 506, 454, 415, 443, 474, 457, 464, 500, 438, 481, 406, 389, 432, 492, 437, 510, 463, 430, 504, 502, 498, 416, 422, 485, 477, 450, 508, 446, 512, 449, 452, 484, 440, 444, 400, 482, 459, 470, 490, 414, 499, 503, 423, 479, 431, 418, 407, 473, 455, 496, 417, 408, 441, 445, 486, 398, 388, 465, 386, 402, 475, 453, 456, 491, 489, 451, 420, 396, 501, 509, 505, 467, 394, 390, 409, 387, 478, 403, 466, 487, 460, 436, 494, 425, 427, 447, 493, 422, 492, 460, 388, 418, 461, 449, 412, 415, 490, 464, 405, 482, 439, 446, 480, 438, 386, 395, 462, 444, 510, 399, 435, 458, 400, 505, 470, 506, 469, 385, 427, 401, 467, 390, 475, 448, 423, 453, 479, 491, 426, 425, 431, 474, 497, 484, 501, 499, 409, 494, 511, 488, 500, 393, 472, 429, 471, 502, 434, 487, 408, 454, 465, 481, 424, 419, 508, 463, 398, 466, 410, 489, 498, 430, 403, 486, 428, 417, 413, 394, 459, 440, 483, 451, 436, 392, 414, 457, 441, 504, 389, 442, 455, 402, 456, 496, 411, 406, 391, 473, 387, 421, 512, 485, 416, 477, 404, 468, 495, 503, 432, 450, 476, 478, 445, 433, 420, 396, 443, 407, 437, 509, 452, 507, 397, 503, 408, 444, 425, 472, 388, 396, 431, 400, 409, 435, 389, 482, 479, 410, 395, 442, 452, 411, 495, 471, 385, 500, 450, 393, 403, 512, 494, 476, 386, 430, 453, 402, 467, 432, 448, 469, 397, 391, 427, 460, 464, 418, 502, 489, 446, 510, 470, 417, 486, 449, 421, 505, 406, 458, 508, 480, 475, 454, 468, 501, 436, 415, 445, 424, 447, 477, 462, 439, 496, 426, 440, 459, 394, 416, 405, 401, 497, 387, 490, 456, 404, 455, 473, 398, 509, 481, 451, 493, 422, 488, 433, 504, 419, 506, 457, 465, 511, 484, 429, 392, 390, 487, 443, 438, 461, 498, 441, 474, 399, 434, 407, 420, 437, 423, 413, 478, 485, 412, 499, 483, 463, 507, 466, 414, 491, 492, 428 +}; +const float HRAa_1536_512_input[] = { +13.386899925109432, -13.874621377458897, -16.780017007177882, -6.290312059289052, -12.12827186210024, -6.7215865007863869, -12.928496427823001, -9.5320512690650236, -7.743243384270599, 13.537963482938862, -2.7747305809320273, -12.582411711157423, -5.3802664401721669, -12.212445933608072, -7.6896834132998464, -13.886251758086326, 10.057357007368099, -0.54545642222569801, 8.205317948012846, 9.9587921963912223, 1.787839710999801, -1.8877909028033726, -5.4872655283312968, -8.062104638589874, 12.160461660371981, -15.667876557032479, 8.8975273390429983, -3.3765083480826616, 9.3816292204533749, -11.374049439344271, -10.36262436541605, 6.7202129273737032, 8.6272248519835983, 6.8202854789610363, -9.9864325836014913, -1.3405851953534818, -11.142776994932193, -1.9184371643698088, 9.7100901224681202, 8.0943424444060117, 10.207687208250547, -12.139932744539616, -8.6843097992891565, 11.103660696595387, 8.3959816215268113, -5.2149232726762502, -10.099642434219659, 8.4287998205932535, -8.1131273436353393, 11.077737095117719, 11.873290693127736, -8.3323685207242288, 8.306765838979139, -7.7344852728193692, -12.595270449431288, -11.151338526616161, 8.8518394477850517, -7.3707217826997509, -15.236586757477074, -16.861400843579382, -5.2451688100646434, -7.9139079697369601, 4.624265800939507, -3.8868901758034666, 5.149322447921163, -4.8408994988342702, -16.025567965427282, 8.9397007078167832, 11.615085927048078, 8.7522408607897013, 8.9362025413954598, -12.419911954640257, 1.3360373310499056, 5.8047604915295699, -11.499552394388353, -9.0848912468207565, -0.33403972984943742, 4.4543924597778224, 7.5516321347188526, -14.133335935201398, 5.0051740595271017, 16.889255448806885, 4.2732555534579513, 10.895662242985567, 12.023371162173557, -16.54177280794126, 16.47187146826094, -8.1320457770163532, 14.492657760424361, 5.1425318773536102, -12.674348565024257, -12.591971003025808, -11.419434896299183, -7.134364911729187, -14.456345736529295, 6.9801481308852464, 3.5178871967459839, -5.4222404575852448, 17.787168094008695, -6.2963736353761854, 6.0773417416842221, 12.129562430166006, -12.394762329795224, 10.349629378600094, 6.4331304797784803, 4.0178325470947502, -1.138956390083639, 8.1137355075137663, 13.895337237225856, 5.2871675790043309, -0.71033385965710749, -8.0604882356929117, 10.198012315557385, 11.576288688276565, 10.989989721011501, -1.8717320818182488, 10.123904063310743, 10.784665440661042, -4.3035609830061903, 9.6837773036405093, -14.835135985873862, -5.1478442440128811, -6.6505387088228947, 7.6760013089942545, 6.4660475793279915, -6.5596877295244536, -9.3116314056097949, 7.6328445056019074, 8.8548767929342613, 7.5197255274599808, -7.9120195042812034, -7.1323001875535148, 10.791556287617038, 10.084448901305496, -10.743240913473755, 12.353642192693162, -4.527053580524516, 7.3242837488860237, 11.840083930085372, -10.619537990011144, -7.6706979631015884, -10.372557115087139, -8.8632681653872467, -4.4224067975512833, 10.305320214477293, -13.718057823394824, 4.1964852185559138, -1.4362461161357318, -9.2144112590704665, 8.3877875072624768, -10.28487762491257, -9.1114457918206746, 5.9370140811870229, 14.470896650278901, 5.1658695784729174, -9.341067315095037, 13.898060872612461, -3.9942168173342556, -8.3744670385083744, 7.3185644061709123, -10.677918127800307, 8.7839855993602747, 5.9967809699512715, 7.3957884730189676, -3.2504312305872545, -9.6416522009408538, 5.8869284856565551, 6.8296803475321157, -8.8993273140276621, 6.4153892959374943, 10.71036283303145, 5.7650612619594863, 10.78849375974715, -1.4177006030538843, 1.5219866880330013, 7.6721747796307929, -5.4730436651294374, -9.5147711755665831, -15.201928353576326, 9.1070883523744062, -1.429613590187548, 10.993649358659018, 3.3503803060819508, -17.486331072327484, -10.477380738424001, -4.7161288387109055, 7.0041944951217889, -8.5563404605446678, -13.558221470146432, 1.9509536932085323, -2.1008828270020299, -6.0209650694579304, 7.2795925605768037, 6.4403696840313165, 9.6872136018234638, -10.083520911839761, 2.2569120937126366, -6.2731874949190027, -16.003233247997624, 2.6470504909477603, 1.9679136003343678, 1.084323481971722, -5.5869253766683347, 10.471030535111106, -10.141071326109691, 3.0103339932739437, -1.7669043857695677, -7.6573452029265354, -4.3258934638902158, -10.968459179578497, 15.741636049842855, -10.9522061668373, -9.4904695438104927, 10.385857264222551, 10.297120789438011, 6.5744952638429925, 5.8740095877629486, 10.799510515320124, -6.3545024936903296, -0.79879489541004711, -7.9890116216388165, -7.0895275092337746, -1.1693711835427318, -11.031571816277879, -2.7661989355564196, -12.648614251118801, 3.6890373669346022, -9.6492587977566604, 16.37751360979837, -11.834071942761344, -8.1856488251627724, -2.6452776364462234, -7.8494578072748498, -4.3583881632417762, 9.0567313787087418, -11.915674625575223, 6.3560722843437931, -12.459623655201984, 10.634887971076129, -16.922079821941349, 2.6306182284481716, -4.8306213551740491, -6.8938315321790871, -11.732112230175732, -14.980055011514212, 14.341141814607978, 9.3877580146603421, 10.212542439703331, 10.226413776118815, 1.4940604264129116, 7.7454328449595184, -17.063990479025335, 19.866966739493524, -10.140740571896508, -12.522044834618598, 7.0883420344447883, 8.639822911246295, 8.696282010555846, -4.6180581749529885, 15.128219796014116, 9.944475468031726, 3.9061050633893308, -0.44811804820690332, -9.8453458886200469, 11.310920421915538, -1.8877371033018449, -13.955810775304432, -9.3663850942658744, -13.7152384276622, 8.1778408387550972, -11.099226967110654, -0.40938224282111474, 7.407933602924528, 9.5946649739529732, 8.9692970855929381, -7.4260161983282993, -6.7127946668575396, -3.32421449686648, 11.949556138901517, 6.0724437348944251, -8.7144215382129016, -6.8610474000112394, 7.2567571883933359, -6.3499249476454329, 9.3590736715335225, -6.5503328955021827, -6.9702845680797187, -10.317890011660792, -3.6167068395322954, -4.8790397611256688, 16.56935536921031, 15.259301626496455, 4.095983810772946, -8.287550939084964, -9.9120810548007725, 9.9159918358704644, 7.7341221557626856, -6.968193796769385, 11.636066712371051, -11.761055820947789, 8.1630237309173719, 6.4488185954770767, 7.3664462176342393, 9.1231645572893783, 1.6141196499486792, -9.6504558418612536, -5.3306358019773254, -6.2121734777196425, 6.0886130638484497, -7.8160047985525329, -2.3620627464284909, -5.7089981216523924, 11.764939486817402, 6.9146263458573811, 5.4499539427791159, 9.0526658073376804, -6.4040202312779462, 1.9520703353601458, 8.8078015730086339, -2.6857890845936474, -7.4845378984175008, -10.998145344747881, 3.9650986691130394, 7.3045582654386916, 7.256277698095202, 8.8550148662006052, 4.4431559525918427, 13.61919949600221, -8.6465615710269912, 5.8013976504697808, 3.5026821856868993, -12.178296532701346, 6.9207418083416181, -4.1355644302631589, 5.5861383859524665, -14.116022346856981, 12.594015809448324, -13.393001860550452, 9.5607723957857971, -13.112365438653656, -1.6596837312771877, 8.7341819566011267, 7.4760433147262795, -8.1942077127202122, 8.3436147974653725, 9.8720061590436838, 8.0887096325543109, -17.197684682990683, -8.0196097887787907, -7.4638388448193353, 14.00243903909713, -6.2485104839226615, 11.356138541390258, 3.7545892163531427, 10.415941927557306, 12.692270186087136, 3.839016769003043, -15.395769427822605, 7.7315150527655616, 4.8016964440291581, 8.0132387260974589, -6.4415560341290687, 10.805285608742018, -5.5301352184454284, -13.224718660056825, 0.35302225692097389, 4.4748784871174934, 6.9443759354462857, 10.685073446441708, 3.1575051344879466, -13.665701610090288, -3.8015869558522541, -2.3038729510788531, -8.4060938979535429, 10.397495774699411, 0.63231003672718755, 16.426675593327936, 4.2757077959938554, -8.2297561064825651, -12.203313074476801, 3.5349123059031688, -4.6316910854005595, 12.149986519547449, 10.142561680716403, -12.910916534376218, -11.816001928564599, 12.752636976550916, 1.347868026050816, 4.4506235037217419, 12.700335499696024, -13.848139080070318, -11.355529001962223, -5.7806475282042058, 0.47750289555723269, 5.6986275269369804, -4.4271319538016316, 10.462558932858533, -5.0368487144176184, 12.348453770774848, -10.530489062751826, 11.889507884552419, 6.7066063456855165, 8.7257914990822734, -11.740906669754361, -13.198118848397669, 11.966809170645028, 7.5576572433307501, -12.95621542476918, 11.112615788951556, 5.4150193506065785, -2.4444668502999507, 0.1275326588141078, -9.3810637216464059, 15.15093868960655, 3.1627056768504778, 7.7005484449478576, -10.234073188504981, 7.1267840100223658, -15.91683465924223, -13.410169751101346, 0.13625266261370772, -7.5750837050990372, 14.960178685292997, -15.435015552646451, -3.7057206375618463, -8.8999095085111666, -2.5149139619650525, -8.3327199889755423, 18.941920607436636, 13.420695019369392, 4.9195046375982541, 11.016163952781909, 8.6733276067619194, 12.478765201964949, 2.3345020319649099, 3.1973706815381244, -10.28793250894482, 3.1017921163255822, 3.5809364261341075, -11.688627720005062, -7.4899768065790839, 6.3649946224780551, 9.1684116530245543, -1.0144208985424472, -1.7386901599600024, 10.812333055795435, 4.961817477568788, 3.1009645563657138, 6.6921808083279686, 7.3774978735208627, 1.7132043124694183, -10.362105107573687, -12.173493799440179, -12.57733865447233, 10.40684423079197, -7.1829220405500269, -5.8532485804854053, -3.3187986578272421, 0.91880136486449959, -13.398651042134368, -6.3155049249186339, -17.255588061305122, 2.9621721519641029, 10.684388373450155, 9.920602983772957, -4.9406423078278641, 7.1264826077512149, 11.66719925284613, 6.721261092111213, -12.730916302360351, 10.795526753678212, -20.573136588685408, -5.6958101011529605, 6.9909504456743186, 4.4715875360382364, 12.499170749494757, -7.20935215447878, 9.3520391463706591, -11.260904720544124, 3.9094591998581429, 10.542421309584265, 7.1626495100659087, -6.2979737327672325, -7.4797184772604108, -10.033365613109066, 13.639664860076691, 14.61768258823167, -9.349535102620095, -12.423145667667011, 4.9898271501817089, 3.0038807688543274, -12.714132646116139, -11.715303881774823, 4.1065631173690322, 5.8299911288456308, 16.075633106498326, -5.7905188465892081, -10.727791126474877, -6.8206190409645826, -8.9175871578683328, -4.6200146277545517, 11.079880503025457, 2.510233715234405, -10.392607673591197, 5.8668194165681014, -7.0114162376738856, -10.279106538719603, -15.528793255069509, -4.6085364768240247, 6.8605550379128051, -2.5800329268976743, -7.3532639311399244, 20.672825917556292, -10.439895472960126, -14.128598455261217, 11.328263527383783, -7.463336179396399, 16.130593577787007, 7.8647052993942861, -7.7266572437869527, -7.6739353389438616, -7.8625194662984832, -5.5481184597671502, 16.352149156645865, 1.5600738712852105, 7.0446715470996484, 3.4977667900587481, 9.1242274771866878, -14.864890247335271, 2.228477042485411, -11.636329210405362, -4.6796208227724287, -2.2933856931597671, -9.3965545946571059, 5.2166591092510801, -0.0061470351703269257, 11.008731035650001, -4.0684606352010775, 7.3388311965238815, 9.6110268205483553, -14.385784807623017, -12.022179732503762, 2.2591715836384325, -12.450692202777248, -6.4694864795479514, 2.4970669565811572, -14.438327468512828, -7.1490383062998024, 3.1980227285689566, -4.3545915469413083, 11.850371754353054, -9.6358004132594868, -5.5732823609496984, -11.570303232115274, -7.8799771256040403, 11.364050055127539, 2.8166429122264298, -7.7893594643305502, -2.3842480986276682, -7.3290075822986527, -5.5039959632731286, -2.9510245234322539, -6.0257131849615027, -6.3046667299320047, 9.6500486152400153, -13.674873390020878, 10.734758291088976, -12.103386933808761, 12.184692560628328, 10.655296522071822, 11.91880094629235, -7.4922050113367078, -5.1457408035516625, 9.4250278995611794, -8.1618059524881748, 9.3940146817732177, -11.555304660224397, -9.043867998939163, -8.451710191375323, -0.697115284938572, 2.3373700418213623, 13.692672613492128, -15.665014564786702, -3.2403867344672141, -8.7601644681864741, 13.019487514767658, -12.791506892288574, -13.625856289969327, -6.2209979515728566, 8.6521749698161123, 7.4180160442834548, 1.1105314934818471, 4.4766310382738519, 11.438161271145697, 13.894059012603345, 4.0767572471493434, 3.9865238865858319, 3.7602317997987846, 0.76151966999394338, -5.1810102801857445, 14.799158905790362, 2.4576241055193684, -13.01983807978049, 7.7789583949391536, -7.7989618839443171, 2.5737045662046305, -13.443327011814354, -10.710116060594849, -10.563787698873153, -9.0325237664249336, -8.9417451798718943, -19.333428943078317, 14.683782394656195, -8.0733543435216593, 10.754644346477024, 7.7063042336814984, 7.1186808374245931, -3.9617268249118553, -5.7198371921519167, 5.593318866773699, -7.2969156100159678, -14.048944381672497, -10.062946047657139, -1.0260982646529979, -14.827752195442853, -9.2383256700032188, 15.633286094075363, -16.297177435658352, -0.64090358918251356, 16.682478300485606, -11.380226570148189, -7.5596774165642087, -7.2154274871131481, -7.1481514505268233, 8.5862772252140598, -11.750005376776613, 12.960896281443684, 13.382912666258086, -1.5320372082264357, -11.480485768573448, 4.604919918163711, -10.250884016863665, 16.502161055342512, 10.03826905000834, -4.2314133540673815, 6.914838473777273, 3.033372723351186, 15.789653601786865, 7.7740184970045538, -13.16261088269184, 1.467484633609379, 12.139927777657451, 7.3565534414936771, -16.102142555887689, -6.7186090884258327, -5.0455349707069272, 11.98730746398549, 10.256496746996197, -5.7536379862838647, -5.4682997322585303, -8.6174488346296947, 4.9421612015014782, -3.6472328067701021, -10.170655866613714, -8.731587322200923, -12.200853136951736, -6.4324926421828801, 12.383600590018332, 4.7177953853422574, -5.9611450690323569, -4.8404699641555782, 3.4274708633282907, -15.369056504155758, -13.448819507894497, -6.9107211824606498, 8.0113449069161451, -3.8973949861351929, 13.021049717764123, -6.3796819058710641, 7.5454744658108392, -24.991261131460227, -11.306957669810698, 9.9244994493158156, -15.552007939376315, -11.499894592347063, 6.7321370932847282, -5.7172766786206735, 13.927111999325204, 14.791062203179369, -10.463383452760558, 10.636801153156807, -4.894683643621029, 8.4748218331335483, 6.714189223798841, 9.4375736465144318, 12.487559872903708, -6.0987096595648733, 8.3058734633496965, 4.1758106815531235, -0.92420186594595199, -9.7108492563481441, -11.032513923038188, 6.723487961222486, 6.6405389489355722, 11.70091305718748, 4.2393067109120421, 8.1348475294426805, 13.323378479075469, 8.7202362776180511, 4.4526705951643395, -9.5406850815782391, 10.724131989567914, 3.8203055939862751, 5.655044851128495, -16.307030842468919, -12.651665707248567, 10.335451776575519, -11.543998335115962, -4.5894875308948739, -9.8049275923942005, -3.1277981660548742, 10.521084419510812, 9.1581333155226226, 13.912555752813075, 7.6645359315240986, 7.4281718483850714, -12.884604059581001, -10.227449781754478, 6.6088359371651677, -8.390397410570122, 1.7389657861698138, -9.733674950830439, 5.6026920997089826, 8.6808454450852413, -6.0587915108669694, 10.402906304509559, 3.573187038527244, 10.559282882232578, -10.863413477205437, -4.7386233555213177, 9.4904722391068699, 10.157539704403206, 2.8851592670612307, -8.3696995987232565, 11.297835199084789, -1.8627636495095405, -7.1252169596821719, 5.4278621558211784, -10.438886769424213, 11.047071633619222, -6.5900981825814391, -10.337633941764059, 2.5282376470547079, -9.6591177209883146, 12.449719103332304, 1.55178436617159, 8.8699335446384353, 11.259696425771455, 6.7783986934617984, -3.1793426009237473, -13.884272717050646, 6.6177054099083383, 4.9754611216591851, -8.1416721021369884, 10.636889546477317, 9.381740326488913, -13.207174194145681, 5.641084536081391, 10.931097561358635, 2.6818980710602407, 6.6334459052688892, 9.3510527294752901, -13.223477811560901, -16.02051667550996, -5.7642227501143166, -7.8575844017704233, 8.5138065738662689, 4.7241317174003958, -10.096994042501567, 12.438227764558155, 2.7850508919916313, -7.2072251055036469, -2.6269452276287124, -10.858511776465122, -9.382631273358955, 8.3283966460812575, 9.2585435022023024, -7.4395391778349076, -15.083896521243371, 16.802375383935249, -5.9975534292925188, -9.4765112294400247, 12.157497196108473, 4.5160814688935869, -2.7728770210355993, 2.9059766323671488, -5.4101491583069929, 8.8988634463609699, -6.400827609041122, 5.3560360503868081, -8.7304511666720401, -3.0755739720628865, -13.966358226924728, -6.7649639759434601, -5.5456693899453127, 17.302274909990441, -7.4968096247971072, 8.744509603950064, -10.794741197131442, -11.913516149338431, -7.729522769816862, -7.4691133826775182, -6.5715478061064134, -11.907691856087185, -0.20263423791519211, 8.7885430265334428, -5.9130473048668284, -13.708290803401704, -13.78899848903613, -15.209798120169717, -7.7253595989171355, 10.377128863501158, 9.5577922484441498, -9.1170808303499999, -6.4012157193694925, 6.0123229297351415, -3.8082896556779615, 14.084538271217655, 7.736609816185922, -7.1200940445799343, -6.0420560567461363, 6.7749183889388505, -6.7423962541293223, 11.698461510951111, 12.488447340839436, -12.158335264443023, -11.337129599624449, 4.6676968705568491, -12.701834709382553, -10.475346061527553, 11.810486767960239, -9.6940285745916039, 2.4420600898797606, -7.1590802169457932, 7.4477382756083328, -12.84581185975534, 4.294724353933816, 4.7862471286393875, -5.1283227202624628, -12.462450772792648, 5.8462045895795738, -2.3252078492902015, 10.784106121114156, -8.9091597599913488, 7.8715048196179795, -11.724382426901904, -9.8819847622548878, 5.5179135967036945, 5.8170155199540101, 13.471313785889976, -15.525106358542637, -10.787512021482629, -12.926571949496676, 0.64019471142609763, 11.404282273170695, 9.9588402015625466, 12.047596212569777, -9.4553988787340977, 8.1934695042991272, -9.2978201862150662, -0.16338758265088724, -9.874707008213198, -15.74174394890615, -6.2188307585781839, 6.8874774293005903, 9.063007022226051, 12.224864329254553, 9.6788512147473025, 4.2394307617891345, -10.591549936022522, 6.6238089274322478, 7.5643367406337223, -8.9582742726253759, 12.967837079016467, 11.558303731051819, 0.66328001774643597, 0.061562459877513763, -9.8220366611970817, -8.6914608429229716, 2.0563987156423309, -12.681611400476225, 1.3200230993063025, 14.397044749313597, -11.646369582297655, 11.475601313196282, -9.6685410246039822, 13.178785331570431, 9.3156729399597396, -8.2280610740799105, -5.8512271809845346, -3.3513051394681299, -12.508309397943608, 4.3947576780553819, -4.2609352469664099, -3.9364029654735142, -7.1257677022599761, -4.749374408895342, -7.8617667438721872, -3.1064686101999062, -3.7432869366585888, -4.8561219977586756, -5.4462675545135282, -3.0540684154947613, -15.35711806555511, -11.536068537082535, -4.7779544806256276, 1.5198489129897315, 2.2249257607654318, -4.4269263183089862, 7.4355310535388179, 9.2780119576973981, -10.652417931125679, -4.1778682483229783, -2.1566547856994727, -11.795081921533383, 10.848372600114878, 10.325168705158157, 6.3921784987473096, -3.4419598984874038, -8.0823946821166821, -8.8829402292522772, -2.8818508823421793, 6.3006936576743202, -18.0845485513623, -6.1046031768124465, -8.3535486208206997, 9.9650967368521606, 16.34809005021857, -6.3719619154861631, 6.6492139253615576, -2.2462433383876483, 12.414615001238596, 9.9243080855013854, 6.5816151826391636, -15.916468641697799, 15.719302793672236, 12.597035667242659, 7.9314977205991974, -4.6176638133992505, 9.8340751357654508, -5.6666671493884282, 16.964399126342375, -10.174033224406887, -6.9445510397424979, -7.0003017483847918, -5.7816060099388684, -12.7380229338664, 2.3874629194778292, -4.3315690351541818, 6.402268747442819, -7.1986862442546862, 3.8230018987349692, -16.488657131909211, -9.4628948760922604, -4.4930989787395363, 0.20228101276884691, 7.9230990768569933, 4.0956585057697925, 2.935031122594181, -6.6661480000167179, 2.1833750370684917, -13.862136299430089, 7.2537537887085604, -9.7837110663390341, 8.6426502286738316, 10.933145886680956, -11.848044341163014, 1.9015758573080708, 7.8955654850233579, 14.087625811239143, 15.74368395360325, 14.915952043583991, 2.4289544447309912, 10.938797000780177, -0.48350975665915585, -6.0724283824951737, 12.43180188960436, -17.027449220255846, 10.457087806200649, 11.834161047678036, -11.574528168603067, -5.8443316647878172, -15.909297292636424, 2.8661614976693999, 0.94537037187104889, -6.1321675750261466, 3.5179605788203152, -13.650295745999149, -14.925340774935689, 5.8996315469200731, -4.742895776593735, -12.78647038316033, -8.7668312292356614, 3.2991120560668561, 16.649617394331742, 12.078195842545881, 8.3422604344231779, 6.3829490997837528, -16.259300428897792, -6.7370828126804438, -19.032060980450861, 10.534387246647906, 15.112739135038019, 9.0482362921064681, -10.686676579265459, 7.4266114954786726, 7.6415038124348245, 0.0092345294467927729, 7.3107957428418979, -9.2074521242051137, 13.337719418423028, 11.800206756300712, 6.4124926065359418, -8.6909900143815833, 11.316987754233748, 19.639736933434676, -3.484119576702398, 2.9928203525781334, -13.578916945190016, -8.2764973238514497, 4.471627662727232, 14.082619508506047, 12.174165038542485, -11.000581807612242, -16.079501874825326, 0.70642865016413037, 15.746012766226523, -7.6161295955099675, 8.117804816632642, 9.3568227935114798, -13.012224242904074, 10.980884709953941, -10.668687925966264, 8.3605232827699503, 19.58871502961652, 7.3537694624012788, 12.7200136615813, -2.7781976528461332, -13.043003975732004, 13.14556253978828, 11.936967872899929, 13.171819029461137, -7.9252087243269118, 7.7003280461862138, -6.5060087655108747, -18.442930781768371, 22.885163982319007, 6.583490491290247, -1.1514058151352935, 10.669101185812385, -10.081271922767652, 13.414113164816222, -10.06095242529296, 4.4368474047139586, -9.5133443219646434, 6.2669708529045183, -9.611863292437766, -15.876098782760467, 0.32220461814667717, -4.7036651574655473, 6.5207549195711563, 5.0860839263292528, -12.612352596775924, 9.9738419686921542, 0.9396778045330193, 10.651502808863189, -1.1105748484379481, -9.0667683952063296, -3.7634192509691813, 8.1968711400693568, 7.2005601582338032, 13.38536236818598, -7.2074952622871384, -10.89721410521263, 5.8944483624519881, 4.1900839916018509, 12.886068410456097, -7.6817739511773864, 6.2800076465595316, -8.0059063646010156, 15.344612453245135, -10.986292543222252, -7.7963115789804949, 15.616622818007777, 10.715195479472955, -9.9059332996558478, 14.531108551785385, 8.0871721404149799, 11.28807228436758, 7.2050553662162322, 1.8673686167182675, 5.6379835308774515, 6.0070995688159945, 3.6718419825892781, 10.273782222887936, -11.003276573222182, 10.86280826743919, 4.8625050304430539, -6.8883036392210499, 9.4110700217989329, 8.5907090738786351, -4.1816331667751721, -4.5065585714549732, -11.851914290939416, -0.82661956749219301, -4.2729352395319262, -12.00561858749291, 11.248537736997887, 5.9702468837958875, -2.8246526750650882, 8.7625453187814948, -7.1602571689933585, -12.354031243120836, 7.4186972352690956, -6.987904733680633, -4.7802427263213847, -8.4594669364587052, 9.9074303226742551, 3.806086639453103, 11.279747903383944, 17.081579765803436, -9.3400423712763221, 3.1993990305779496, -11.821616914733911, -13.221112615394405, -10.273658410670993, 11.172005145239616, 9.0661355630755569, 9.2282171885349893, -10.23315808490522, -8.7767507313040536, 11.658399522139373, 8.1253713837323716, -6.0161671309769886, 16.112984014276019, -10.526568304448215, 11.152848111157505, -8.924603008706157, 19.991244818943592, 1.7502482049131347, 10.380462477594111, -12.601277391046924, 2.2056591767324831, -11.208801676783557, -10.115502455925911, 4.637267012273572, -4.3901359184650799, 6.4876168985133287, -4.998151172316156, -10.216089377506956, 10.51595559197369, 9.860423081769472, 2.0714834687695323, -8.4943703055745399, 2.6716218493294384, -4.4936844031461796, 7.0630594165237257, 11.626244158543082, 12.185499704257312, 14.474700254831625, -8.0226618511897883, -7.0870692277314653, -1.1721939107905543, 9.7010116241387543, -3.9275566558414692, -9.75092296492865, -0.95638727648524069, 8.8537127253606389, -14.829180519689713, 9.9027033868976222, 8.2208221244483237, -10.01770451901422, -6.4871122747161722, 1.9748473784403351, -11.360816340237003, -4.1135134538497162, -8.9279661633195779, -14.855403366544149, 10.607559153322043, -11.932153415925857, 18.392309282429526, -7.2895436119104833, 7.3649578192591916, -11.824321717922503, 4.5048430891613203, -16.076657798411361, -10.123099989589955, 4.6541470838769436, 14.693948982580077, 9.4260360038265905, -6.5360788988808212, -12.279752881306212, 0.14329411518298504, 15.277760011935301, 12.94645800633524, 9.0076074533198192, 3.1698412352516221, 7.1781738715915795, 15.252388120172336, -8.6205841782080128, 5.2369980810204497, -9.433249016049194, 11.112523275262491, -5.6094286689251271, -5.0372463006239476, -6.3399450364534582, 8.9510280620290601, 4.9779353674772384, -12.848232188637104, -7.9494772442250223, 0.056481817566435569, -1.0990377463926844, -8.778197904426678, 12.556996955893457, -8.8110005063100054, -5.0471729352089545, -10.673361741004538, -6.938427941848941, 8.599594025334758, -8.1348225722413492, -13.541689542539737, -11.229036341770312, -22.614183167994018, 12.576253012660271, 15.118290082755436, -9.2870046826546524, 12.899455356719221, 13.243961159383248, 4.4575044249539246, -13.064373901252422, -14.393244974865604, -7.5706760405997384, 8.5444523394978518, 12.288833952178848, -2.5897476840629694, -6.9298386101193596, 12.539861043573865, 11.593898741650712, -7.3909737338763124, 4.2946927448293568, 7.508232545403895, 8.5884600404407188, -7.3302711120767166, -11.033859476165276, 7.3743897210913136, 12.286574554025389, -1.700095235673573, -6.9072546333240732, -12.728102558911758, 6.4176904367705383, 5.903830856246814, 9.2556056318797992, 11.125813908063282, -10.011979772526844, 2.9405966507503511, 10.009962336069428, -4.8607974702953536, 1.7471621272732738, 9.7439136565857378, -0.66822435460540275, 18.464597991608112, -10.547977913897311, -6.8357758325587907, 4.9415192092837481, -11.223685529550222, 5.0739368213705465, -8.1592201290566155, 9.4541189767136888, 6.856119326024217, -18.448536650094034, 11.582475715514898, -10.178303201195758, 4.6276063705681079, -11.553748539540541, 2.5523254456603865, 4.2384411617925624, 9.8680333748165499, 8.1917716819138136, -10.850753257867975, 10.241807976913078, 12.017255467195287, 7.7723650228628429, 5.9396282417311674, -15.066965171524886, 9.4060341572848429, -4.4910564383161384, -8.2147205547924216, 4.7023980767577918, 11.671098907901923, 8.4913841414387878, 7.6416710694567156, 11.664303236292549, -8.9493566205550099, -6.6393544707268033, 7.8628598936427894, -8.5326569294992858, -2.0472135566402336, -11.584529863049369, -13.765771105899878, -13.236687110141661, 7.7745678935906666, 4.0644071666046333, -5.1127185876504511, 11.09916237943035, -18.103923278917275, 2.5020372532682957, 8.1940521912528261, 9.2210533248542514, -8.2947343120838326, -10.150302885063565, -7.0933287260530955, 12.386066725557843, 9.4912773578087801, 3.3565256628259474, 9.513448873526654, -9.5772677988882489, -9.7173765268110159, -7.7871728659279844, -6.33770970174879, 8.7446348550882131, -5.3074344597323737, 11.315880628341713, -5.6257158464771564, 5.9792501423848678, -9.9591388238248939, 10.547073748158361, -11.945860349110731, 9.8107678957781204, 5.3625757170649493, -7.3961894867189759, 11.294547725442342, -4.3290304291788617, -4.4072888651694688, -5.9735063255412655, 6.3232368782780126, -10.734895281472282, -8.8246478451021009, 8.3174800733332432, 10.666958445791396, 9.5832549522929806, 9.6003700340562261, 13.330599293965252, -7.7659598115974093, -8.4068157954698712, 6.7155631645630169, 10.951065869771208, -9.843399692801551, 8.6950573645033593, -12.91546689382516, -6.8284290555266072, 6.9679513402290612, 8.7517402592974953, -9.7252558599188106, 4.4957279393577405, -3.0198719775413605, -12.528522673998944, 12.791874350523511, -11.987866488473575, -7.7731187084210358, 15.356748666493452, -7.4363704293344366, 11.554365751821972, -13.691156388740444, -13.639104069640238, 12.899745770415052, -12.477204336163956, -12.161571929011455, -11.273422005627573, 20.710850070106048, 11.743681239843617, 9.6151567581220565, 8.2992099468073608, 8.4619149441334685, 8.8404977904969346, -10.918349909014658, -5.6517458894209422, 8.6526147356508165, -14.290258838779266, 3.0318506448723244, 3.6389793712730598, 13.887411508481932, -8.8335154477770956, 6.1670460127122331, 13.208091864632017, 15.635505869782437, -17.556690461708161, 12.400331386163444, 3.9778500015058431, -8.2047500613887383, -5.2233512983007522, 4.0362277485067475, 8.4751794582169477, -5.5914076527615748, -5.4777738529828426, 11.821238725863337, -8.8900626961710341, -7.29974425683878, -7.4473770624143274, -8.0512707557556205, 1.6226698981742598, -15.433546932692904, -4.1071266269684763, -8.4263162579803996, 9.0736808802899116, 6.0439240655594269, -9.6449191691164273, 9.2360102991487718, 16.958973272151585, -11.584208891462776, -8.5316628771682268, -10.964476795840529, 14.434155388768026, -16.016018668782927, 12.499589449114831, 5.3431907633740403, -13.783231585179763, 16.195154330455487, -6.4307912934527964, 11.080799577011028, 6.5325130508365454, 12.802146321954664, -7.6814813666878257, 6.1271513194854581, -6.9538126536653362, -5.0690242209381475, -11.855544305317043, -5.1941087352434137, 4.8945739632537482, 9.4974588137719405, 8.8718463435014332, -0.47224465841085145, 3.9456702743066483, 12.491257904548593, 3.9592076310204338, -5.0217678779827253, 6.3597443173631385, -10.612846967410137, 14.31614300592712, 7.1411122329367416, -11.762271600506461, 4.331988913082836, -15.437501431534956, -4.6693242794521481, -12.698173054121195, 12.417434316925727, 21.062913663865295, -3.5142449580964197, 1.3700514528580063, 5.6243547407690206, -12.071365752103238, -1.1360048996995593, -11.347850339525309, 10.833731442380101, 0.46134954632024316, 10.720116067259271, 7.3904190673115604, 6.7696592500196058, 10.652736359476924, -7.8165483190849638, 9.3865130951890841, -0.34774522512587569, -4.0566753969719276, -4.3275806653874298, -6.8638440461424404, -4.682521888031431, -8.2920976977163718, -14.311445847621952, 13.976975120531808, -8.6098361017160663, -12.114294053104134, 5.1005213815339383, -11.049107710762476, -7.0863761770199494, -12.463614616712142, -9.7359303784027027, -13.418212569071059, 5.7610447890373235, 15.56161888307617, 7.0574421915141308, 7.1030986195714929, 11.300511268289812, -7.2344128515783446, -11.13562468318859, -1.5760076318579441, 1.2107880314559112, -8.7874657760578643, -8.8001022473565236, 12.247082051858888, -9.8565622276713381, -3.0179931003584515, -4.5978322515637293, -6.571180711121297, 2.500611207880274, 0.84457801315975856, 6.4714616812285382, -18.464904505652935, -4.3990010259668271, 4.1350410389687466, -10.462432926909633, 6.2042736110931846, -3.8394082311505735, 8.5618068576083974, -17.977066011411761, 11.022903239935964, -19.178990090912414, -8.0470231091434652, 10.79648317128396, -13.096061841695322, -5.6164196771432566, 0.78843332401436395, 13.7984392278555, 7.6547594193414454, 7.5442903307994644, 12.66336251543067, -9.9436379532267338, 8.3550537237332758, 10.82799568784589, 12.384885746776661, 5.2191347513552007, 9.9942871944245102, 12.958881973386022, 5.8450353998039759, 5.156985957036718, 13.5582570732471, 10.34554494007787, -6.037237777176359, -8.2731248141970166, -7.9895984943236309, -12.02375110577746, 9.3728051686457299, 9.3911820274244171, 4.9339039982877528, 12.302318980639923, -5.5266659866771741, -4.9613643934779441, -11.294072601106434, 10.376229630289247, -8.2965871864098535, 6.6836050094050048, 6.894916881498717, -15.288396395010784, 9.0886752966827142, 7.439432773214512, -4.0410572378226171, 8.9307473630506085, 9.0038835677978959, -10.459659023792348, 8.8378541314937387, 10.339786491210649, -9.9890662163533968, 7.9788596610503406, -10.765397845560441, 12.052911411023967, 6.1067152607562258, -5.6066198973015737, 10.952942399934605, 7.6432926714438914, 8.3014387807885619, -8.5639306175146341, 5.1234913528982382, -9.7662598194835457, 6.1322495355624156, -8.160368360432031, -15.309087302665159, -8.3419685644228121, -5.2861952387314828, 5.7536255267894676, -12.714725164584957, -16.125699441038968, -12.439064087815231, -9.1320304457996606, 3.8603060490391887, -6.1338073713204455, -1.7222012329044754, 8.5214199468265512, -8.9836162439198581, -11.816294225738464, 4.2214300165680347, 10.919410045065687, -12.940481826969718, 11.334503455702539, 1.0676110391325953, 7.0891161904485651, 6.9961528158293813, 11.113742549839397, -14.034363540155118, -2.534544404400672, 4.8188993072548705, -18.804376110412633, -13.059868091828172, 2.8229971724161289, -9.6989297510369017, 4.7326387912990509, 12.188026385951737, -11.467461248064906, -14.073562498971903, -9.2196347513311832, 10.038208885426119, -4.3813258723769009, -4.1241400929515137, 11.486725329451389, 4.8628878289290549, -8.8001952481419785, -6.5888239970497349, -9.7953285124389389, 4.2522039839409844, -13.459928721286854, 4.8164035354744943, -15.811464084480162, -15.167000919853482, 8.6050948989220277, 5.4097197830658672, -3.201067374137641, 5.7304935157850272, -0.50989151426446222, -10.147545800700401, 14.129098358281857, 6.7974337326702985, -11.157443424806557, 5.4202945677131122, 6.2589729732564718, -8.100004693609538, -8.7681862399603006, -8.6314112980872526, -3.9762886492900669, 6.9078974491617418, -7.3105786438044316, -12.86172440009309, -10.982888171052132, 11.138006586636338, -4.7087869570844818, 6.0689150921803634, 6.1958655520184891, 14.665790446061886, -21.756441569001307, -6.0112922694975106, -8.604883105861056, 15.140407588256764, -7.0631519145705521, -15.024190589242993, -23.18926715039116, 8.2311742508471983, -8.3904317018734034, -9.8859430286919867, 5.9777560262912424, 4.489704569613985, 9.9452514956755529, 9.5807589942228493, 9.5768073329005379, -13.191427051485375, 8.6226588561737731, 2.398176437043392, 8.3478860808676707, 16.691979667886184, 10.245192955959679, -8.5601611176100771, -8.6435755556304308, 11.536812168223609, -3.8011348079490959, -0.4154822840976809, 7.3530196404235948, -6.2070213990800998, -3.3664554862576601, 1.9501048246997952, 11.044948446517594, -9.1773178494438294, -9.8012555654706048, 12.731258282570259, 7.4006494098682252, 8.8054756517321113, -8.4864693790843759, -14.388354721820441, -3.2911084226653116, 7.3278629195734881, -3.3628879633743507, -2.0906070586159164, 8.7678659217554724, 1.2754529803697003, -10.171163782743935, -8.6401640914138174, -15.570426156008278, -4.7735987049156741, 6.2627274839799227, -8.902086558167035, 5.890113367738306, -16.19738850063483, 12.494158748994153, 7.4515972260992802, -11.368802405389724, 0.79949913059431887, 10.464954350908759, 12.045093842059636, -6.2632239899779618, 9.3946694855915709, 4.6796796423594591, 7.4573657480844915, -2.1730144122742283, -10.441568309083868, -3.128467240255199, 2.6674648941331709, -1.7628028131302032, -11.490305842901, -2.6052782471959244, 9.1378585089733217, -8.3182391512182594, -6.0353916735033906, -6.4946073399059889, 8.5262424287807921, 11.041008586867564, 18.792916305706246, -5.4400449872596122, 4.7763430246707763, 7.4793455477938471, -12.701581632451186, 7.3391248408947076, -11.164236112983559, 9.4704084335423353, -10.054506153225052, 14.297500013934522, -1.9132095626133094, 14.164236143735152, -18.514789351038115, -10.538326608827228, 8.5742137931431603, -18.159208758191326, 7.6116880222576011, 7.9413670120767224, 9.047676658736421, 12.221156662181444, 7.0843147886392952, 13.170456072797521, -10.632225390661356, -12.606230762028668, -13.968700939920279, 0.90435763497244315, -4.1863354464526514, -0.57860003934790516, -7.7068236480377168, -7.5458142157151684, -15.760391765099628, 3.148710788422199, -8.571589030098103, -6.1442268269653644, -5.5386008972836374, -13.583703624827324, 12.571370461611423, -5.0037658066132318, 6.6729776513218466, 6.2491302239836344, -13.868418916158106, 13.949814810808402, 4.1350925641742018, 14.220597569700558, 7.8377637620610052, 10.165620408810733, -6.7532907993950042, 4.3042646268926728, 1.4896778697382114, 8.3496556534811361, -8.8688217756106855, -4.1638250519443876, -10.45385832370283, -17.931254325719735, 13.701501053759536, -9.4565546768244069, 1.3427226397103338, -12.271188095378776, 10.368577567683388, 8.025638109861422, -6.2074049810183825, -2.0991088194951866, -7.6695567427956011, 11.150836440150584, -1.496263923503625, -18.494976331519254, -4.2881609912726928, 12.980292811570745, -0.92488991150790378, -4.6658341014288567, -2.8894649330160642, 4.254991528529442, 6.433665878257556, 5.6179185883054492, 3.9771596771133968, 15.121069471781597, 16.580045222011115, -9.566021123652547, 11.967303334090824, 15.8257683504883, -12.810889692425972, -3.458648034714614, 3.990823559676568, 4.9093618306644045, -3.4096503299487577, 2.8468287182096539, 8.9865457241125046, -6.6201701664235877, -14.013179729737548, 11.434571611598438, 5.767464644498955, 9.3360216341670927, -11.330333170538852, 2.9944289963307167, -11.076388371680537, -9.0625652353016406, -12.834505378246872, -5.1884256791028482, 7.8120310086321405, 10.177307965543681, -9.4195921379930319, 5.466041504061816, -8.3541043828300516, 9.9136918737238453, 8.1033458202759867, -6.7036770007249524, -8.1223318972882215, -8.2591262612141172, -9.1232651727813856, -11.669246063763795, -0.030697844939840527, 9.3789394813876008, -11.107031538341255, 7.288702786596331, -4.6967946059755157, -1.5987277913422755, 11.510267151110476, -15.34971763301391, 8.2159765211646274, 6.6883959862268858, 13.179857051577731, 7.6088514551549089, 7.4989231135409131, -1.7239395961308088, 1.4954887205231719, -9.8573207709532547, 4.9542123592468155, -10.367910840496483, 5.7226061395590309, 9.5446949280935716, -8.6942844135306796, 6.2929455305188577, -6.7169960771850326, 19.637781323792851, -12.129044785216932, -2.8881972324088676, 4.5724813224397796, -4.9563780171627787, -8.8290411230288512, 2.163546702306324, -6.7813228130077352, 4.7602245034138555, -8.4569684434378569, -2.6066149728226859, 14.465681780446152, -7.4053864105652734, -9.8766495392168174, -12.069651713077828, -11.042473697693975, 8.1529541863355082, -9.631792308049631, -3.6472475127982888, 12.36876532086672, 13.587811221658276, 6.0796488885118061, 1.1309707002276215, 9.8361035439712978, -12.782363514428749, 14.877109246506274, 8.9863394004114223, 3.7313973097701414, -8.8429365798088835, 10.783409906469574, 5.4309225673390031, -6.2038249324134984, -12.503772776539773, 5.2588713559908609, 8.0377625659349796, -11.433112718999636, -2.3606577081546209, -0.51422838799139303, 11.042048536456281, -8.9107584751200442, -11.636004759251062, 12.663937409329666, -10.014401209989058, -8.0569057100231696, -8.5006754476725348, -8.2061921877402746, 3.6065709585004733, 0.73647938533134194, 1.8183486110849676, 5.4805296348307078, -2.2813810755893615, -3.9153542826111902, 13.587948798210096, 1.8068496248064898, 9.0325044536184134, 10.124444543125891, 13.84809053563459, 15.565497107356785, 8.9751576152107209, 9.3516719607931797, 3.6327626866158558, 11.760943102597267, 5.0870266626202989, 5.674904060336968, 12.357086041091151, 13.951717235903738, -19.310077284104022, 8.0053082251775685, -4.297125648181531, -6.3260546204828696, 10.294877306501972, 13.93365235676599, 13.141707549171858, -1.5568066615629472, 8.2172142670253123, -7.8132836735117186, 8.8354487563578399, 16.707153362143629, 4.5855551987365208, 12.223929231669286, 14.863765072540376, -15.461542707954242, -2.3371697391419985, -10.024175159008536, -11.737459729645774, -3.7329473123372199, -3.0590377398467261, 13.143768419466609, 9.2038314945946311, 3.521511313043765, -2.2535815241524322, 5.4844876358740011, -10.004087991701629, 11.888560517692463, -4.6722624505292263, 3.7082244357698078, 6.3751558628158023, 11.627185499278614, 1.9289094882369002, -12.217802164142721, -7.6763956464968892, 5.6910150189702744, -5.6417449295552817, 4.9980919736488802, -9.0536429095706819, 9.6119351348702313, 2.4973962155691476, -14.910998981505347, 4.1843311003165047, 5.9103254703115775, -10.108868185667163, -10.968757232820812, -6.2351738311660236, -5.4115373442221397, -5.1847401075738944, -17.223563033246595, -13.214097072642032, -11.854105278464028, 12.414721845275727, -6.2778430500337503, -10.885676169950498, 2.4563316506705526, -8.7748279932902093, -5.7945746677684031, -5.8659162690750017, -10.185454736539469, -12.259036348321617, -11.345440149075966, 6.5815217034894982, -6.4191766201668736, -7.3487464338408746, -0.40842055433143365, 10.921577631841934, -21.476071540546794, -10.659396127407732, -9.7319013100865899, -12.054728330205412, -10.865345038797253, 6.0360205068991064, 6.3343994011226927, -7.1354597827181925, 3.1432134836509893, -2.4414855631776251, 8.0775343816376086, 3.972870247588534, 1.9692418169429344, 7.2828780139977134, -15.463562597421859, 10.173242967382789, 15.083747077552808, -9.276641467191272, 7.7773515313362411, 9.0385622964224765, 5.6887720196625535, -10.133807142620341, -1.6437588724330709, -8.158553801413559, 10.446525293735167, -11.433423238083284, 8.6648442034190918, 10.064106964518734, -8.7075993351272132, -6.3080890103035614, 9.3898484683747458, -4.3190925589260534, -19.328147731608361, -7.6126659646899917, -11.705773894239984, 7.4600825708549596, -8.1116458562206901, -16.039122843816592, -2.6608032342278891, -5.3302266349477829, 7.386051049643469, 6.9792999266885793, -4.5182426093483645, 15.20105997302613, 9.5925220650656087, -0.84758073759469377, 4.5185848028718691, 5.6852984237201536, 8.9738282076193592, -12.235502878115856, 6.6410806023610247, -8.5942670023877028, -10.537735925654538, 7.1077614149638526, -6.4914995246164899, 6.2433348879497554, -11.339739148237399, 17.070957256911349, 2.8503359840349143, -0.58556596880585032, -8.6111923383904436, -12.931731217434081, 6.4866696051548578 +}; +const char HRAa_1536_512_detected_data[] = { +0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0 +}; diff --git a/libcodec2-android/src/codec2/src/HRAa_1536_512.h b/libcodec2-android/src/codec2/src/HRAa_1536_512.h new file mode 100644 index 0000000..6296756 --- /dev/null +++ b/libcodec2-android/src/codec2/src/HRAa_1536_512.h @@ -0,0 +1,19 @@ +/* + FILE....: HRAa_1536_512.h + + Static arrays for LDPC codec HRAa_1536_512, generated by ldpc_gen_c_h_file.m. +*/ + +#define HRAa_1536_512_NUMBERPARITYBITS 512 +#define HRAa_1536_512_MAX_ROW_WEIGHT 12 +#define HRAa_1536_512_CODELENGTH 2048 +#define HRAa_1536_512_NUMBERROWSHCOLS 1536 +#define HRAa_1536_512_MAX_COL_WEIGHT 4 +#define HRAa_1536_512_DEC_TYPE 0 +#define HRAa_1536_512_MAX_ITER 100 + +extern const uint16_t HRAa_1536_512_H_rows[]; +extern const uint16_t HRAa_1536_512_H_cols[]; +extern const float HRAa_1536_512_input[]; +extern const char HRAa_1536_512_detected_data[]; + diff --git a/libcodec2-android/src/codec2/src/HRAb_396_504.c b/libcodec2-android/src/codec2/src/HRAb_396_504.c new file mode 100644 index 0000000..876d83e --- /dev/null +++ b/libcodec2-android/src/codec2/src/HRAb_396_504.c @@ -0,0 +1,22 @@ +/* + FILE....: HRAb_396_504.c + + Static arrays for LDPC codec HRAb_396_504, generated by ldpc_gen_c_h_file.m. +*/ + +#include +#include "HRAb_396_504.h" + +const uint16_t HRAb_396_504_H_rows[] = { +10, 53, 56, 11, 21, 4, 12, 33, 41, 2, 19, 10, 20, 14, 61, 31, 7, 24, 37, 5, 34, 13, 27, 59, 8, 26, 21, 5, 3, 26, 1, 28, 4, 18, 16, 6, 15, 7, 24, 30, 17, 25, 10, 35, 61, 6, 9, 64, 14, 2, 13, 28, 84, 1, 15, 20, 8, 64, 12, 27, 11, 18, 22, 33, 5, 29, 19, 4, 3, 31, 23, 21, 35, 9, 34, 6, 16, 28, 23, 14, 26, 10, 20, 8, 7, 17, 12, 24, 15, 18, 33, 36, 21, 31, 29, 3, 25, 32, 5, 2, 13, 1, 19, 30, 4, 27, 22, 11, 38, 129, 63, 46, 62, 19, 13, 44, 76, 117, 25, 75, 63, 29, 65, 54, 23, 47, 144, 15, 39, 41, 42, 82, 36, 70, 67, 58, 53, 89, 22, 72, 17, 45, 50, 9, 34, 41, 63, 40, 47, 55, 48, 44, 64, 72, 19, 67, 57, 66, 54, 42, 143, 36, 43, 46, 52, 108, 71, 49, 16, 39, 32, 38, 70, 62, 69, 26, 37, 55, 56, 50, 58, 65, 56, 61, 67, 52, 53, 50, 48, 39, 59, 37, 47, 51, 63, 70, 46, 60, 40, 71, 57, 72, 54, 68, 44, 42, 49, 45, 38, 64, 43, 62, 66, 69, 55, 41, 64, 138, 115, 107, 81, 30, 39, 55, 91, 155, 48, 87, 90, 49, 84, 98, 68, 64, 180, 32, 88, 108, 71, 111, 86, 112, 73, 126, 90, 114, 57, 134, 52, 51, 73, 40, 59, 87, 86, 90, 101, 68, 51, 102, 89, 85, 37, 124, 99, 75, 76, 95, 205, 48, 77, 97, 73, 114, 98, 94, 45, 53, 58, 92, 80, 103, 100, 65, 93, 105, 79, 91, 80, 79, 102, 75, 91, 96, 78, 90, 82, 97, 83, 108, 89, 119, 85, 95, 105, 99, 103, 100, 93, 92, 86, 88, 76, 81, 104, 94, 101, 87, 73, 106, 84, 74, 98, 77, 141, 149, 123, 214, 87, 64, 45, 60, 114, 173, 103, 115, 102, 95, 88, 101, 93, 71, 188, 66, 175, 136, 77, 170, 127, 126, 140, 135, 97, 117, 119, 149, 80, 96, 85, 110, 78, 122, 105, 111, 121, 160, 81, 125, 131, 107, 60, 170, 151, 120, 109, 133, 220, 96, 142, 98, 112, 123, 129, 157, 74, 85, 82, 113, 121, 144, 139, 83, 139, 130, 117, 141, 133, 120, 136, 141, 132, 114, 143, 107, 123, 131, 138, 122, 128, 147, 113, 111, 125, 126, 135, 134, 144, 140, 112, 109, 142, 124, 137, 139, 130, 127, 115, 118, 121, 129, 110, 117, 215, 185, 179, 261, 105, 94, 69, 158, 130, 210, 113, 132, 183, 148, 107, 133, 112, 74, 280, 67, 176, 172, 78, 193, 141, 153, 146, 160, 156, 147, 132, 150, 100, 168, 138, 161, 99, 176, 138, 192, 136, 186, 85, 167, 168, 118, 104, 200, 215, 147, 161, 177, 244, 116, 165, 119, 210, 156, 132, 191, 106, 135, 115, 180, 155, 163, 146, 178, 153, 166, 149, 175, 153, 155, 145, 169, 150, 179, 165, 116, 158, 167, 176, 168, 146, 158, 178, 149, 154, 138, 166, 145, 152, 161, 175, 148, 172, 156, 162, 177, 171, 157, 159, 164, 173, 203, 151, 180, 257, 191, 231, 262, 139, 130, 124, 178, 165, 234, 170, 185, 237, 164, 114, 143, 171, 80, 291, 122, 182, 204, 104, 242, 147, 154, 166, 183, 265, 187, 159, 212, 152, 175, 189, 164, 158, 187, 143, 223, 142, 217, 140, 208, 209, 154, 134, 252, 230, 196, 216, 182, 256, 150, 198, 137, 251, 166, 162, 197, 113, 174, 128, 196, 212, 193, 189, 185, 190, 201, 181, 203, 215, 184, 205, 189, 207, 196, 214, 174, 190, 199, 211, 201, 192, 181, 186, 210, 187, 163, 213, 200, 216, 198, 185, 212, 188, 191, 204, 206, 183, 193, 209, 197, 195, 224, 202, 208, 273, 218, 274, 294, 213, 163, 187, 248, 194, 235, 260, 200, 248, 224, 137, 254, 222, 85, 292, 145, 190, 212, 131, 245, 159, 199, 181, 258, 277, 206, 178, 219, 202, 184, 241, 205, 239, 260, 148, 271, 159, 263, 152, 242, 250, 183, 151, 259, 246, 214, 225, 237, 272, 206, 213, 145, 255, 199, 196, 228, 127, 188, 172, 222, 232, 226, 207, 238, 227, 224, 248, 233, 247, 223, 245, 239, 250, 232, 252, 194, 233, 249, 219, 225, 242, 238, 240, 226, 234, 170, 238, 210, 237, 230, 228, 243, 236, 231, 248, 221, 246, 218, 229, 227, 217, 235, 222, 251, 277, 262, 299, 338, 246, 208, 220, 289, 291, 276, 267, 233, 333, 307, 264, 288, 324, 92, 325, 169, 209, 233, 192, 275, 160, 257, 247, 317, 359, 308, 194, 228, 244, 236, 272, 248, 273, 295, 184, 315, 182, 339, 195, 268, 282, 243, 169, 300, 283, 265, 240, 258, 289, 245, 218, 173, 297, 240, 236, 257, 171, 219, 230, 288, 254, 264, 231, 281, 287, 277, 279, 303, 259, 286, 277, 279, 269, 261, 255, 220, 265, 283, 278, 276, 281, 285, 268, 266, 282, 182, 244, 241, 254, 274, 256, 258, 264, 253, 287, 270, 260, 267, 273, 262, 257, 288, 284, 275, 278, 276, 323, 347, 249, 266, 232, 331, 366, 332, 304, 280, 347, 355, 268, 297, 327, 311, 345, 186, 221, 279, 226, 283, 223, 310, 296, 348, 379, 316, 252, 229, 277, 273, 286, 319, 305, 329, 235, 343, 307, 376, 251, 306, 323, 276, 275, 358, 318, 328, 269, 319, 338, 274, 286, 280, 333, 262, 278, 314, 194, 256, 311, 302, 312, 327, 261, 293, 322, 308, 284, 325, 292, 322, 302, 297, 299, 306, 290, 263, 312, 311, 315, 317, 318, 304, 305, 289, 309, 280, 316, 271, 314, 313, 296, 303, 320, 307, 298, 300, 319, 294, 308, 321, 323, 301, 291, 324, 328, 337, 362, 385, 320, 310, 346, 344, 380, 349, 322, 369, 350, 367, 302, 358, 356, 316, 368, 211, 301, 282, 302, 309, 284, 341, 306, 365, 382, 325, 253, 285, 313, 281, 287, 351, 330, 364, 313, 368, 330, 377, 270, 334, 372, 331, 296, 365, 346, 345, 309, 324, 341, 317, 298, 320, 342, 345, 310, 336, 249, 304, 333, 352, 367, 349, 354, 294, 363, 335, 301, 340, 339, 327, 332, 350, 342, 344, 329, 310, 338, 331, 354, 328, 351, 364, 325, 348, 353, 293, 340, 295, 343, 355, 360, 326, 337, 341, 346, 352, 359, 335, 356, 357, 358, 334, 349, 330, 347, 372, 381, 0, 336, 326, 383, 367, 392, 374, 386, 376, 353, 387, 378, 0, 392, 342, 389, 255, 394, 314, 371, 361, 312, 377, 373, 384, 390, 339, 315, 290, 352, 324, 321, 360, 396, 371, 344, 388, 347, 378, 356, 392, 384, 389, 348, 390, 353, 387, 374, 337, 381, 350, 359, 362, 385, 375, 355, 361, 382, 351, 360, 383, 391, 379, 369, 375, 370, 395, 357, 386, 379, 333, 387, 390, 389, 377, 391, 365, 388, 386, 385, 396, 370, 382, 372, 376, 368, 336, 371, 345, 362, 361, 395, 366, 393, 378, 392, 384, 394, 363, 380, 369, 383, 381, 373, 375, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 389, 0, 393, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 391, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 366, 0, 366, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +}; + +const uint16_t HRAb_396_504_H_cols[] = { +31, 10, 29, 6, 20, 36, 17, 25, 36, 1, 4, 7, 7, 14, 20, 35, 33, 34, 6, 13, 5, 31, 17, 18, 11, 26, 23, 32, 14, 6, 16, 20, 8, 21, 44, 25, 19, 1, 7, 36, 9, 23, 55, 8, 7, 4, 18, 11, 14, 35, 34, 33, 2, 16, 8, 3, 31, 28, 24, 8, 15, 5, 3, 1, 15, 20, 20, 17, 7, 26, 18, 32, 27, 18, 12, 9, 23, 23, 71, 18, 5, 24, 68, 15, 18, 25, 5, 15, 30, 13, 9, 18, 17, 6, 14, 34, 29, 16, 37, 33, 16, 13, 11, 23, 5, 61, 4, 22, 51, 36, 24, 17, 11, 9, 3, 54, 10, 46, 31, 50, 41, 20, 3, 7, 44, 26, 25, 63, 2, 6, 23, 12, 16, 32, 28, 22, 15, 2, 5, 27, 1, 41, 16, 19, 20, 27, 25, 14, 2, 32, 47, 33, 26, 26, 10, 29, 60, 8, 25, 25, 36, 59, 6, 14, 9, 27, 44, 34, 20, 11, 17, 22, 10, 62, 21, 21, 52, 8, 3, 19, 27, 21, 13, 34, 2, 20, 7, 19, 35, 21, 2, 23, 24, 9, 43, 50, 60, 55, 26, 12, 70, 33, 72, 22, 36, 30, 67, 6, 21, 10, 20, 22, 5, 4, 1, 51, 42, 2, 32, 7, 21, 17, 25, 14, 51, 23, 69, 32, 32, 49, 3, 7, 12, 10, 10, 34, 13, 68, 37, 51, 35, 24, 46, 33, 24, 5, 27, 8, 5, 45, 43, 31, 31, 16, 20, 53, 1, 28, 48, 11, 4, 2, 42, 15, 29, 6, 11, 15, 51, 43, 40, 35, 1, 3, 24, 2, 1, 1, 22, 12, 34, 22, 24, 25, 32, 35, 35, 16, 8, 32, 9, 19, 68, 4, 38, 27, 16, 55, 3, 48, 21, 15, 72, 11, 37, 27, 14, 30, 24, 6, 18, 25, 33, 22, 31, 18, 28, 49, 36, 5, 35, 11, 3, 17, 19, 6, 17, 1, 38, 37, 8, 10, 13, 44, 70, 5, 2, 4, 30, 72, 26, 18, 40, 8, 19, 7, 1, 28, 10, 13, 36, 33, 13, 67, 14, 17, 71, 16, 29, 36, 24, 3, 69, 38, 28, 9, 8, 19, 12, 69, 23, 2, 27, 10, 58, 12, 26, 15, 29, 9, 3, 29, 7, 28, 4, 11, 14, 40, 11, 29, 27, 9, 13, 21, 70, 37, 54, 50, 69, 33, 28, 46, 38, 57, 47, 12, 61, 59, 22, 49, 37, 61, 41, 62, 11, 56, 27, 63, 71, 39, 42, 30, 60, 52, 66, 40, 70, 63, 64, 37, 73, 54, 47, 64, 21, 40, 22, 52, 103, 44, 34, 56, 41, 43, 60, 72, 43, 57, 29, 51, 42, 71, 49, 63, 37, 47, 45, 66, 13, 6, 68, 50, 27, 42, 67, 65, 23, 46, 35, 61, 50, 51, 55, 37, 74, 33, 43, 63, 83, 53, 35, 39, 12, 21, 45, 29, 72, 64, 69, 60, 52, 54, 56, 56, 49, 67, 41, 44, 66, 47, 39, 104, 15, 58, 96, 107, 40, 26, 61, 15, 12, 80, 30, 104, 56, 74, 65, 38, 58, 48, 89, 28, 61, 85, 59, 9, 45, 31, 52, 47, 62, 41, 56, 35, 67, 43, 25, 55, 39, 66, 56, 67, 30, 39, 32, 54, 49, 43, 69, 46, 65, 58, 102, 37, 31, 28, 51, 99, 66, 36, 55, 58, 82, 45, 47, 24, 61, 63, 56, 80, 34, 38, 100, 31, 78, 64, 71, 41, 28, 39, 12, 42, 30, 62, 67, 69, 60, 40, 66, 31, 105, 59, 104, 94, 58, 48, 84, 107, 106, 99, 53, 54, 77, 44, 45, 57, 83, 32, 55, 50, 49, 93, 105, 55, 62, 53, 100, 64, 40, 70, 84, 66, 104, 60, 103, 63, 67, 65, 22, 89, 39, 59, 52, 86, 76, 58, 92, 44, 96, 53, 54, 49, 73, 13, 61, 77, 57, 48, 98, 65, 57, 62, 26, 52, 73, 38, 67, 4, 80, 66, 50, 88, 102, 44, 77, 100, 92, 53, 34, 54, 47, 10, 29, 59, 71, 19, 68, 45, 49, 71, 86, 55, 69, 64, 53, 79, 19, 73, 90, 68, 92, 47, 57, 99, 77, 100, 71, 23, 96, 62, 87, 44, 41, 70, 51, 26, 63, 65, 39, 60, 40, 30, 54, 85, 52, 56, 104, 69, 45, 34, 30, 96, 66, 50, 79, 41, 46, 75, 57, 106, 102, 60, 52, 53, 42, 91, 53, 57, 93, 39, 50, 49, 4, 47, 66, 54, 62, 64, 49, 83, 59, 43, 104, 48, 55, 63, 60, 56, 102, 86, 48, 41, 14, 40, 67, 85, 38, 45, 107, 51, 68, 42, 42, 42, 66, 103, 53, 61, 64, 45, 57, 72, 50, 81, 19, 48, 65, 17, 97, 101, 95, 84, 102, 100, 96, 68, 65, 76, 85, 84, 74, 43, 108, 87, 51, 80, 55, 77, 86, 90, 47, 83, 72, 107, 79, 88, 97, 68, 106, 78, 95, 104, 94, 98, 91, 75, 0, 92, 69, 101, 62, 91, 38, 98, 0, 97, 61, 89, 85, 54, 99, 80, 86, 78, 62, 95, 70, 75, 93, 73, 83, 90, 76, 104, 39, 18, 74, 105, 48, 96, 106, 88, 59, 94, 57, 106, 76, 97, 108, 79, 0, 65, 98, 81, 0, 105, 43, 95, 38, 96, 85, 40, 77, 94, 93, 100, 88, 78, 82, 59, 90, 92, 101, 75, 91, 99, 70, 0, 46, 84, 0, 0, 88, 57, 64, 30, 63, 0, 71, 0, 86, 0, 105, 84, 81, 98, 0, 90, 102, 0, 106, 70, 82, 59, 73, 92, 91, 75, 99, 39, 69, 94, 72, 97, 53, 93, 75, 85, 50, 96, 71, 77, 107, 93, 73, 89, 74, 98, 0, 81, 41, 42, 94, 0, 90, 104, 79, 70, 0, 84, 76, 48, 101, 97, 105, 0, 72, 83, 0, 68, 0, 108, 86, 52, 46, 74, 68, 87, 38, 97, 76, 81, 98, 85, 102, 61, 0, 64, 0, 0, 82, 92, 0, 0, 0, 0, 75, 100, 0, 108, 103, 88, 0, 65, 91, 79, 73, 0, 0, 102, 83, 80, 0, 107, 74, 106, 0, 88, 0, 95, 0, 94, 98, 78, 72, 0, 106, 97, 93, 91, 0, 87, 0, 85, 0, 91, 75, 101, 0, 36, 82, 0, 108, 79, 0, 93, 79, 95, 60, 96, 0, 101, 78, 58, 0, 97, 81, 0, 0, 87, 0, 0, 0, 0, 37, 94, 108, 46, 33, 83, 76, 56, 85, 89, 82, 107, 0, 74, 99, 106, 88, 0, 107, 0, 0, 102, 0, 95, 76, 0, 0, 0, 106, 64, 0, 86, 0, 78, 98, 103, 89, 59, 82, 81, 94, 93, 83, 91, 84, 0, 101, 97, 0, 74, 105, 52, 72, 0, 74, 84, 0, 108, 82, 0, 63, 0, 0, 90, 97, 81, 73, 0, 98, 77, 0, 78, 58, 99, 13, 88, 107, 76, 85, 100, 89, 0, 94, 103, 0, 105, 101, 95, 94, 93, 0, 0, 80, 43, 65, 89, 104, 0, 91, 87, 0, 0, 108, 88, 78, 98, 73, 0, 106, 86, 105, 100, 83, 82, 75, 0, 46, 76, 79, 44, 0, 0, 0, 0, 0, 0, 0, 105, 99, 0, 0, 0, 0, 82, 0, 0, 101, 0, 89, 0, 0, 0, 67, 0, 93, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84, 0, 82, 0, 108, 0, 0, 0, 100, 0, 0, 81, 0, 0, 0, 0, 79, 0, 107, 0, 0, 0, 0, 0, 0, 0, 87, 45, 0, 0, 77, 0, 0, 0, 92, 0, 103, 0, 0, 0, 0, 0, 0, 73, 0, 0, 0, 0, 46, 0, 102, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 107, 0, 0, 0, 0, 0, 0, 89, 0, 80, 0, 0, 0, 0, 95, 87, 58, 103, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 101, 0, 77, 0, 0, 0, 0, 0, 83, 100, 0, 76, 0, 79, 0, 92, 0, 86, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 86, 103, 0, 0, 0, 0, 0, 0, 91, 0, 0, 0, 90, 0, 0, 0, 0, 95, 0, 0, 87, 0, 0, 0, 90, 101, 0, 95, 0, 89, 0, 0, 0, 0, 0, 0, 80, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, 0, 0, 84, 70, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 108, 87, 0, 0, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +}; +const float HRAb_396_504_input[] = { +-12.781911708775533, 7.551155800725204, -11.899607043049681, 17.477156604046595, -13.803361319809902, 6.2002990057867589, -15.169569280110601, -17.341522766496183, 9.7107774319996505, 16.641703452581407, 8.4284168541090221, -11.930717934789106, -4.4208828355542424, -1.139969227664315, 17.673081687318597, 16.121750517979301, 3.6219051813553182, -20.05687038213798, -6.5018436610168866, 10.791743071707945, -8.0445304197245111, -8.3324911789627567, 11.41120852689847, -11.282456703274443, -9.2866085578109647, 9.9469665371993603, 15.140667602380192, 3.4450775767841488, 0.64231692247845451, 8.0801244936842966, 5.4636814535382374, -5.0107553707349375, 7.864699294226007, -10.386130310145816, -12.37983397229897, -14.572379771221275, -16.054735647120321, -11.263149256634462, 14.219711467898444, -9.2719771070008434, 8.3099403015379476, -10.148895658714522, 14.726350071572289, -6.8215748913296936, -7.3601951789355757, -15.40290283113702, -11.244311800452268, -7.9961343172040795, 5.1368563973467962, 9.5164063035654909, 8.4155629108106549, 16.014525967886211, 1.699070391185594, 9.954286029615325, 7.6585573567939873, 7.9223054149290961, 7.9198517179714161, 10.631081381345467, 3.2596035260666651, -4.6015483371596497, -9.3597887942885531, 7.6740974245989673, -16.604278204111164, -9.8303898312522513, 1.1205811253439053, 8.119179250191868, 9.5880695910130243, 8.2874878418366773, 6.0797980497495772, -12.937113562007257, -3.1974528849557156, 13.246273287806673, 11.66494172835136, -12.103215889657571, 16.688894677207085, 2.257955028557403, -8.5424956390175151, 12.497318796297906, -9.0900910972806521, 8.2209514183928061, 5.7402258284777101, -20.747034176270887, 3.5631050854868058, 10.395770683064073, -9.868223944850401, -8.6550086233418142, 3.8407639306907768, 11.327546861735177, 13.015569340310336, 25.712163835177048, 13.268816328384831, 4.6584774592149962, -13.317349857427834, 9.5406654991490569, 17.049953586489877, -4.0111152401055641, -11.693122827989608, 7.5370223906338998, 11.277949854414416, -11.498659185019621, 9.549753443463084, -12.055250773523783, -10.739286977821905, 14.136269830595458, -7.782253905067039, 4.9092522955317381, -10.465638951656203, -8.0435611797655167, -6.8433147729593813, -9.0439724403972992, 4.3359408282633236, 11.715689661715617, 19.611494165878462, 7.9190285414926178, -3.4982694249277611, -12.338256249127136, 9.8421320440049662, 4.1138225682471781, 6.4942182289542236, 5.2066961739124622, -9.7070041876701811, -9.1496153713901478, -11.724529081464583, -9.3603341476943687, -5.2966983729936237, -13.015748591796211, -3.8567718830575424, 10.135559234020649, 8.7124846719285305, 15.56420640265349, 11.252060195029108, -5.0089167203318068, 4.8507161178807445, 18.024720595741002, 17.065315044907795, -7.1935844977610666, 4.4815982827009275, -11.880975891281834, -12.172241984932276, 1.5152035384857121, 17.946629562223141, 5.5052899404780824, -13.120278899383999, 10.648236401527056, -14.506377227430642, -10.143170277861179, 14.044470462529238, -9.2254356225576046, -8.8348967562869412, -4.9590358444858067, 9.0535343466316753, 10.897394405658892, 14.0281876034117, 11.255519350361872, -13.859106646040908, 6.4504642887424621, 11.777861578819222, -11.639709904108361, -14.642162922529135, -14.4258126604062, 13.682206617896547, 11.95057687459364, -8.3091459570180035, 10.93961990916042, -11.907964651381601, 12.516150502079761, -13.04991156095979, 14.145576472835312, 10.632785447350683, 12.081094158208353, -6.8485025555270633, -7.6927274273100101, 9.6552183508541098, -8.5591832251882316, 15.638135027982772, 11.926988474833571, -14.987130306515169, 14.812479105542307, -11.914804743109391, 15.824256001061817, -8.5851098252378435, -13.901610955497368, 14.188963140600226, 6.811888787586982, 1.6003053019945943, 19.325203560888092, -13.704678587213907, 0.31402694199929804, 15.989943699374408, 6.0088299172857802, -16.886144255198669, 10.998325725589428, -8.2882779267894371, 2.6453088627011274, 10.412577554382436, -14.426316461418969, 8.1138928008495217, -1.3343532339748365, -20.340051195431247, -8.147129300539568, -2.9761356060569728, -10.375141176280817, -3.492207168269704, 7.9187407777624479, 13.120922417727103, -13.038589243192815, -5.2220329986414589, -15.490400289338059, 17.189589889777995, -7.0721481714310892, 12.581795403076717, 13.235922100360186, -14.068623066472972, 10.590824537759135, -15.881395141726383, -10.457045553712261, -9.8661324776225801, 4.734922703000958, 15.360039696456523, -3.6427404709897195, 12.283954090395133, -10.580773927999571, 0.82767864919701561, -19.322191171106951, -2.4440165020607636, 7.3561450067817269, 8.734912251555226, -10.1437777971503, 11.586163919375755, -15.408234206400728, -13.870410556862536, -16.459582947709787, -6.3237526923701468, 11.608212905773328, 5.6613158220955073, -11.774245858420727, 3.9445738850991399, 11.580625563882155, 4.8206111058017749, 9.1501633745566071, -7.8619603245069358, -10.01135725687336, 13.093956991526415, -16.457925498763061, 8.7995448079979344, -6.8693123471950814, 2.7230849761708642, 14.798365672787927, 5.3137203364492533, 12.867351465034174, 15.542257577290705, 10.701888362195504, -12.387250136917784, -7.2295230408544304, 9.6964847959436913, -9.0249610457078298, -6.1083927724817624, 10.739040854096423, 10.841475540702188, -11.378611500586242, 15.703248605756047, 3.4356087856986508, 9.107640628528733, -10.389742419200251, -13.652754262528372, -8.7325864940958979, -4.1006685083845982, 12.419068901103934, 18.740969634501024, -7.2686574148980894, 15.57081866775636, 7.8740814697714061, -5.3846084718512941, 10.477115100800031, -18.872361222343329, 6.1039069136118798, 17.308178559392783, -7.4815794858402631, -8.6125141656077062, 8.9583151933398391, 15.414391681552324, 11.050241874455013, -12.807870031579375, 9.0363612736996224, 15.816822937315944, 7.8444181915777751, 9.1766300505397727, 14.827248874904317, 10.059358980544847, 8.1004443450218631, -9.9138353480289823, -12.69584064620971, -1.2480517929964754, 4.9462685565954452, -11.001361577099411, -14.645415102047146, -8.290528664203066, -6.5125802605593295, -9.2390284023464098, -9.6219279810207716, -2.4663308852408137, 7.9284843220778702, -10.739866570047806, 6.0027860732461509, 6.1871445421636109, -7.2396227218981295, -16.909239064069116, 8.0605318273056952, -13.18199180405694, 11.423481528527208, 6.103394660237238, 11.02891865005909, -9.0418767418601025, -12.498971584987439, 20.946414970644234, 24.362523031251186, 4.928071385179801, -9.8370658808205729, 14.539073682029368, 1.2645116781629737, 14.426946417515435, 10.026504861776269, 10.448998607938103, 10.006313240241793, 11.891150094820924, 8.8375576186697344, 8.5771389584190558, -15.536407780091233, 13.349864120336063, -11.927556110752052, 16.068268030243942, 18.193338642202377, -11.869068102320544, 13.808406661021646, 11.216260613445977, -15.515968362285809, -14.909791180531339, -10.071410710917538, -5.5399590746720264, -14.934775635718978, 14.30539374658337, 7.3819695117708113, 7.7868368821638674, 15.432743081832081, -2.5950994414982973, -12.476581448977271, -1.6564415840602271, -10.295779594978484, 4.7085935460142574, 12.24789018308865, 16.925819961116584, -18.384663719107415, -14.057276635303813, -5.8146990314358709, 6.5631719088139118, 12.127149794502795, -15.739169438478982, 7.8271230641312846, -5.9606533200021854, 9.8721062001112347, 10.486834679901543, 6.3494439660436246, 9.9429692254989686, 19.542594690444115, 4.5180797153308676, -19.1566652225201, 15.006372860965323, -15.300035248621157, 9.7589319143789801, -4.7363679865964263, 5.3999824517855961, 8.0578934432355496, -19.385015013376869, -14.161802280526608, -12.881654979775632, -12.049094820078055, -5.3829315859449007, -7.3537414475927241, 6.844714008315254, -10.931623197527411, -10.939763582880817, -13.62500540625687, 20.49307277175809, 10.365734953239752, 4.0663542658207543, 15.929076113588478, -10.288951069929114, 7.8742158721474977, -1.422979120612724, -14.104879669064141, -4.55280623980281, -8.1653075636365458, 14.147963542838651, -13.933332225643916, 14.226165096278136, -13.375191283046002, 9.2088912804672614, 10.933675274282887, -9.9392697991816448, -16.955582876153894, -11.85793097786863, 5.8569767257292948, 6.6660744272807806, -4.6888969930553994, 20.646624453011015, -1.2485466035357267, 6.7572930222337293, -11.830468070632643, 12.387424895419418, -18.508514302306494, -15.324824129201243, 5.0862404533417127, -5.2707864200417625, -14.224777968048254, 7.6291208613793344, 5.0046921384732324, 7.9969106436802599, -14.577995568165489, 8.1080228274897834, 12.603861058845251, 11.220434316666585, -5.7247050938128154, 11.912056122344682, 0.10886944478234604, 9.3619646262630898, -7.7302663627879742, 14.530248266518536, -15.658478259515816, -1.2907403171529221, -6.3207955318188116, 15.484693780278064, 12.036254202990973, 4.6560888684896602, 7.678255286975908, 9.4289524624102352, 11.319695981517606, -5.4092744871032599, 6.6896098743454493, 2.1792109184280051, -11.081376849744698, -10.411817839842012, 11.057139193661996, 10.674844657971892, -7.611917928843007, -7.7114315734656405, -10.25566388330579, -9.5816821583841509, -3.8229805246413409, -9.4360724513005252, 8.5081398584333474, 12.93470424207193, -12.400231194882618, -9.4258414862069788, 21.836201624323113, 9.6722027120607468, -11.684243881860825, 11.18326004371732, 9.8228033099036569, -1.6298761838573241, -14.006557406509664, 3.2619201008452663, 3.9694393534038981, -8.8928237386570181, 6.2844903665726015, -4.7494171442219395, 5.9437023484394249, 13.979025508842865, -14.044878091079713, -4.9661838171055548, 7.6707889728317591, -4.2457033821315688, -1.3421305197348499, 4.9933591178833261, 1.5425117319878872, -17.930315353239411, 12.197719685382262, -5.947358941151732, -12.904626563212007, 6.1763577253014788, 16.076852398625185, 8.2709163525181015, -15.422610935202506, 10.890948687642558, -9.9461592598413802, 6.34551493463914, -15.578427358705113, 15.918090853090177, 9.9516599357932982, -3.9346680898413688, 5.3410774271588748, 11.920077938590593, -2.4538357241090294, -11.163446342656663, -10.488287129167166, -12.749714598521885, 5.4035140611182522, -7.3998902697733975, 8.1911994226222173, -6.178143732667059, 7.1909081188653348, -16.467787621055525, 7.5865191569782464, 15.269036731801625, -8.469922589870114 +}; +const char HRAb_396_504_detected_data[] = { +1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1 +}; diff --git a/libcodec2-android/src/codec2/src/HRAb_396_504.h b/libcodec2-android/src/codec2/src/HRAb_396_504.h new file mode 100644 index 0000000..3ff3f94 --- /dev/null +++ b/libcodec2-android/src/codec2/src/HRAb_396_504.h @@ -0,0 +1,19 @@ +/* + FILE....: HRAb_396_504.h + + Static arrays for LDPC codec HRAb_396_504, generated by ldpc_gen_c_h_file.m. +*/ + +#define HRAb_396_504_NUMBERPARITYBITS 108 +#define HRAb_396_504_MAX_ROW_WEIGHT 12 +#define HRAb_396_504_CODELENGTH 504 +#define HRAb_396_504_NUMBERROWSHCOLS 396 +#define HRAb_396_504_MAX_COL_WEIGHT 7 +#define HRAb_396_504_DEC_TYPE 0 +#define HRAb_396_504_MAX_ITER 100 + +extern const uint16_t HRAb_396_504_H_rows[]; +extern const uint16_t HRAb_396_504_H_cols[]; +extern const float HRAb_396_504_input[]; +extern const char HRAb_396_504_detected_data[]; + diff --git a/libcodec2-android/src/codec2/src/H_128_256_5.c b/libcodec2-android/src/codec2/src/H_128_256_5.c new file mode 100644 index 0000000..75c6ccf --- /dev/null +++ b/libcodec2-android/src/codec2/src/H_128_256_5.c @@ -0,0 +1,22 @@ +/* + FILE....: H_128_256_5.c + + Static arrays for LDPC codec H_128_256_5, generated by ldpc_gen_c_h_file.m. +*/ + +#include +#include "H_128_256_5.h" + +const uint16_t H_128_256_5_H_rows[] = { +2, 44, 14, 2, 15, 36, 28, 19, 17, 7, 20, 11, 3, 9, 12, 13, 29, 7, 25, 11, 31, 13, 53, 15, 11, 6, 5, 61, 9, 13, 7, 22, 8, 10, 5, 11, 32, 9, 8, 35, 17, 13, 11, 33, 1, 33, 5, 14, 12, 21, 31, 1, 20, 2, 8, 7, 22, 4, 24, 31, 71, 20, 10, 51, 3, 65, 6, 41, 3, 40, 35, 10, 6, 16, 37, 24, 21, 4, 63, 8, 17, 9, 15, 5, 3, 7, 18, 33, 6, 36, 1, 5, 74, 27, 18, 24, 22, 8, 22, 26, 23, 14, 39, 4, 30, 24, 26, 29, 15, 2, 1, 3, 29, 23, 52, 56, 45, 12, 4, 28, 23, 53, 29, 14, 16, 1, 41, 18, 70, 66, 50, 19, 37, 46, 61, 21, 33, 32, 51, 21, 57, 28, 18, 37, 41, 23, 43, 47, 42, 16, 83, 64, 66, 19, 41, 62, 10, 44, 9, 24, 46, 30, 13, 16, 41, 17, 19, 39, 49, 54, 39, 43, 2, 55, 64, 26, 46, 45, 43, 12, 21, 6, 40, 52, 32, 20, 85, 34, 73, 25, 42, 57, 25, 83, 34, 53, 15, 61, 53, 46, 28, 36, 48, 51, 36, 25, 65, 44, 38, 72, 48, 68, 12, 16, 37, 35, 45, 39, 25, 40, 80, 38, 22, 32, 49, 34, 27, 57, 35, 34, 74, 19, 56, 38, 31, 32, 26, 82, 4, 18, 58, 56, 67, 77, 76, 60, 80, 44, 86, 68, 57, 27, 37, 20, 44, 29, 72, 71, 72, 42, 83, 50, 114, 48, 39, 67, 74, 30, 63, 51, 47, 68, 47, 36, 52, 95, 82, 38, 89, 70, 77, 53, 78, 76, 84, 78, 66, 64, 62, 55, 28, 17, 75, 27, 45, 68, 61, 67, 55, 49, 14, 73, 86, 42, 55, 71, 67, 23, 50, 10, 59, 74, 80, 57, 113, 50, 88, 30, 45, 90, 38, 105, 70, 66, 30, 86, 55, 59, 111, 89, 105, 63, 58, 31, 69, 48, 54, 82, 63, 85, 26, 27, 49, 85, 62, 52, 34, 70, 90, 59, 68, 74, 54, 60, 40, 60, 58, 40, 105, 87, 58, 75, 54, 35, 47, 84, 50, 56, 73, 78, 80, 97, 107, 62, 91, 49, 102, 71, 69, 33, 47, 46, 89, 103, 91, 83, 101, 97, 94, 65, 117, 66, 88, 73, 101, 42, 76, 88, 77, 90, 48, 105, 61, 104, 107, 52, 96, 100, 110, 60, 102, 92, 120, 79, 112, 87, 99, 81, 43, 93, 114, 101, 70, 80, 75, 93, 65, 79, 92, 77, 108, 59, 79, 81, 86, 95, 63, 51, 76, 86, 111, 81, 127, 98, 112, 100, 65, 91, 117, 110, 96, 73, 59, 100, 69, 92, 120, 98, 122, 72, 112, 84, 94, 103, 84, 85, 87, 88, 92, 77, 93, 116, 94, 79, 56, 111, 120, 64, 108, 107, 90, 89, 75, 87, 67, 43, 113, 107, 93, 76, 64, 105, 96, 88, 118, 94, 81, 89, 84, 98, 114, 78, 109, 115, 104, 78, 96, 54, 75, 58, 104, 115, 118, 113, 126, 110, 99, 95, 128, 119, 109, 82, 109, 98, 103, 113, 102, 113, 60, 119, 109, 106, 123, 128, 127, 117, 116, 81, 115, 124, 123, 99, 122, 91, 100, 97, 121, 112, 122, 116, 83, 125, 104, 108, 71, 102, 109, 93, 128, 95, 106, 103, 126, 110, 107, 69, 87, 123, 115, 120, 128, 100, 115, 123, 72, 121, 0, 118, 121, 85, 106, 101, 110, 101, 124, 99, 125, 117, 125, 97, 125, 106, 92, 114, 118, 91, 97, 108, 106, 126, 117, 104, 62, 114, 122, 123, 127, 126, 124, 95, 102, 124, 79, 124, 116, 111, 99, 90, 121, 127, 98, 111, 119, 96, 119, 108, 112, 119, 120, 103, 126, 122, 116, 94, 118, 82, 127, 69, 128, 125 +}; + +const uint16_t H_128_256_5_H_cols[] = { +45, 1, 13, 58, 27, 26, 10, 33, 14, 29, 12, 15, 16, 3, 5, 22, 9, 15, 4, 11, 8, 32, 18, 32, 19, 48, 38, 7, 17, 12, 21, 10, 9, 60, 40, 6, 5, 22, 9, 55, 17, 4, 19, 2, 39, 6, 15, 8, 41, 3, 11, 19, 23, 42, 34, 91, 13, 77, 48, 17, 7, 28, 13, 24, 6, 2, 10, 16, 54, 1, 2, 1, 10, 11, 37, 13, 15, 27, 30, 40, 26, 10, 2, 29, 59, 47, 32, 9, 23, 16, 1, 28, 36, 5, 6, 23, 4, 12, 5, 24, 3, 15, 13, 20, 18, 20, 21, 42, 9, 4, 57, 31, 2, 7, 27, 25, 7, 1, 8, 29, 35, 31, 21, 28, 40, 3, 23, 7, 52, 4, 65, 78, 35, 54, 18, 39, 29, 34, 20, 49, 22, 45, 24, 36, 36, 87, 8, 53, 12, 57, 52, 59, 62, 85, 86, 14, 108, 34, 51, 37, 44, 67, 71, 18, 16, 65, 40, 70, 27, 12, 35, 30, 50, 33, 17, 17, 44, 6, 14, 22, 26, 81, 43, 105, 58, 101, 55, 26, 19, 33, 53, 32, 43, 8, 42, 40, 71, 24, 43, 3, 46, 56, 41, 28, 25, 30, 44, 57, 34, 21, 5, 78, 68, 51, 55, 14, 74, 64, 32, 45, 42, 79, 20, 67, 34, 60, 30, 33, 11, 27, 50, 41, 66, 49, 53, 47, 11, 25, 73, 36, 14, 37, 57, 38, 24, 66, 18, 58, 64, 37, 29, 73, 75, 51, 59, 22, 91, 45, 69, 104, 47, 67, 31, 55, 31, 54, 25, 52, 30, 48, 69, 74, 38, 95, 26, 58, 50, 95, 101, 76, 65, 100, 94, 35, 113, 62, 60, 57, 46, 91, 88, 74, 75, 81, 43, 92, 37, 21, 44, 80, 63, 49, 20, 75, 87, 53, 54, 56, 68, 97, 46, 112, 64, 105, 69, 98, 28, 89, 76, 47, 63, 25, 51, 84, 79, 39, 50, 63, 61, 93, 99, 55, 46, 114, 49, 93, 50, 82, 23, 81, 82, 56, 83, 61, 98, 93, 64, 72, 46, 89, 48, 109, 78, 74, 33, 60, 38, 44, 80, 90, 75, 69, 96, 86, 19, 52, 92, 61, 16, 82, 61, 88, 65, 83, 111, 73, 67, 75, 56, 97, 77, 88, 95, 47, 111, 54, 85, 111, 84, 73, 56, 80, 38, 63, 36, 85, 35, 102, 83, 86, 41, 112, 39, 62, 53, 97, 114, 96, 78, 107, 99, 73, 123, 69, 78, 96, 88, 98, 101, 77, 87, 94, 90, 99, 68, 48, 51, 120, 89, 72, 109, 80, 97, 60, 64, 90, 71, 107, 49, 114, 100, 113, 72, 100, 41, 91, 79, 94, 66, 31, 101, 95, 123, 67, 61, 76, 68, 96, 106, 106, 86, 118, 90, 115, 58, 110, 39, 110, 84, 70, 100, 84, 114, 97, 84, 81, 87, 112, 52, 112, 85, 109, 74, 62, 70, 99, 118, 121, 103, 80, 104, 95, 45, 66, 104, 77, 59, 92, 120, 103, 76, 111, 113, 93, 107, 93, 62, 100, 79, 96, 108, 59, 126, 110, 112, 119, 92, 89, 86, 98, 82, 72, 43, 118, 42, 124, 109, 125, 81, 128, 104, 126, 77, 99, 121, 106, 91, 109, 124, 120, 128, 105, 107, 108, 124, 102, 108, 90, 125, 106, 103, 102, 127, 63, 102, 127, 117, 126, 125, 83, 120, 111, 76, 115, 122, 124, 71, 116, 123, 126, 94, 118, 70, 118, 83, 107, 79, 68, 115, 122, 126, 92, 122, 82, 113, 103, 125, 117, 116, 122, 101, 119, 113, 124, 66, 115, 88, 121, 104, 110, 127, 106, 119, 85, 105, 122, 98, 123, 116, 116, 105, 70, 72, 121, 128, 127, 108, 87, 117, 114, 119, 71, 110, 115, 103, 117, 128, 121, 89, 123, 116, 117, 0, 120, 94, 102, 128, 119, 125, 127 +}; +const float H_128_256_5_input[] = { +-8.8994349771084629, -2.2264881688239941, 15.221530002446757, -0.39525362027279998, 13.442727654278771, -10.000442582434765, 8.5404090461277598, 16.432027973130197, 14.246872691160114, 2.6448289703038665, 11.863343696232654, 4.174651054544948, 10.288062518986955, 12.085683283784871, 3.4121899888598004, 9.1115751924588562, -10.810079499566237, 1.3739160908287105, 10.193128819909694, 3.5997991319409715, 15.252939624442645, 7.8059185917026843, -1.141552617398524, -5.4585533732512204, -7.1985417950651627, -11.078712541348164, -3.7197747259098599, -6.9715544083806256, 4.8350467668286372, -8.4378844630126757, 9.2909631551985523, -13.264491023395877, 13.29420431281155, -16.107993796779667, -6.308916359108748, 11.90542068917763, -17.405334641933944, 6.4284228626032878, 3.0768153742069018, 11.853700717454576, 17.640154289991976, -5.2721404813136417, 20.584732959872778, -6.7125902650906779, 6.5978715835307131, -6.1735464272366514, 6.3164198345461697, -14.401260649632755, -14.487703458954298, -5.8513629748056406, 5.5729511574836881, -9.013132752980674, 8.9988683878222044, -11.263912700584942, 13.485110330806128, -4.8625805463887231, -8.9173751521280824, 10.960944349100908, -14.772741989217471, 1.1368460179590478, 10.533109114159828, -1.731122993192219, 6.0498682584846524, 13.360259295000249, -8.1132970979856438, 9.5693771119534112, -12.578014725946508, 7.0229599627046593, 4.3720950386342494, 14.366897307196593, -0.2595503946882991, -8.822187045424192, -17.794267274108481, -2.7237117577689975, 11.097280635523761, 9.7949231987861634, 15.294276496861425, 6.0841375010899243, 11.169445345055827, 11.904159075277251, 9.1840263923068974, -5.5011617203311012, 16.754980283161505, 7.5513624901915035, -12.170700227106005, -11.483103606370603, -12.025806209056533, 5.1085406001744822, 13.373965752403866, -13.93398032921742, -3.3375271260328137, -5.0546492889404364, 3.4021410284759925, 6.2487730438409157, -12.667072890747553, -10.733091469360994, -12.179180763062972, 11.176700470191063, -11.616901732983612, -10.119483446721208, -8.6850004796910767, -12.677334280090912, -4.3454670403804858, -9.6582743438569203, -9.4373477042683529, -5.0933688337275695, 14.946470562034275, -9.5827796114077728, -12.579787690724327, -5.1317618464667945, 9.7995335974617479, 3.935671855878343, -5.120219966909672, -1.0737815811081737, 12.262597164050909, 12.930462261713524, -10.002664845731484, 8.6911316894060171, 10.515367492600749, 17.842791232413518, 11.503068266000463, 0.7672764564891652, 14.793448459789646, 8.1945046885718504, -8.1324447231556771, 10.265204571293244, 10.433947332186976, -13.070884283907548, -8.3960998416231085, 4.9148913185470375, -10.422874683972211, -11.088739385454351, -5.2623788916708749, -9.4339832891969255, -1.6059826144931535, 11.258751578423034, 12.782380682326652, 10.796361068381742, 13.81940336087583, 6.0191480445312484, 5.0635927171792945, 8.8888332858691825, -5.8812839036685194, 13.782784721594529, 12.501681731989231, 11.315875387889772, -3.773961578229545, 10.665302965437366, 1.2443349889724857, 10.748108985336613, -10.647273973137242, -13.375772243768143, 10.778336161253916, 13.520253518547392, -0.31609537750065214, -2.475823983608934, -8.0419367447924746, -6.4823648863210481, -4.5798319665012235, 12.710284434647598, 11.140388782304239, 8.018507577316937, -12.549284695242829, 14.887316703670896, 15.010107967429951, -15.399171325118063, -8.0816667358175973, -6.6302855944401404, 10.566758114915686, -9.6712985774865867, -10.989892866088582, -2.9502229280575123, -7.8748744688277927, 13.391186021456775, -13.450214789026996, -6.4126752277302099, -11.16710059702414, -7.2444144765480658, -5.5672969972856778, -8.8773312015249726, 13.719522588578332, 11.07457454354517, 8.7479356580553347, 0.58609202162242569, -18.723523952614787, -1.9397327392511032, -8.6455901886153637, 9.2918044013476511, 4.8898010354938704, -6.9894142182003609, -0.1191884647878291, -13.44984965914426, -3.4596444772305261, 5.1319125752378314, -10.427093821749148, -8.5064597147739125, 14.736880938095643, -15.211136760645743, -10.38069323739759, 0.087732074612520833, -4.7977922493487748, 3.1108186580087001, 8.1492732382718991, -2.7096006449185972, 9.4614578695259421, -18.242468149470778, -10.800555835992892, -5.8325818881984466, 16.216906744162525, 16.028982056738251, 13.841633178111548, 3.301741016692473, -13.962273950825141, -12.080675707754205, 7.6736779018117174, 11.959683046750843, -9.8186269532308081, -6.8666083041682322, 10.854650842369852, -17.865310956014465, 13.342746302221908, 10.237148734886931, -9.5317378135033763, -3.3932680342422912, 11.135022697187321, -5.8464827434562983, -10.855498726923935, -10.389826062676315, 17.22405328987611, -8.6670566421031872, -4.4906061687679069, -13.926679140242809, 4.6527756761303296, 11.459319592377085, 16.469693825200174, -3.2267090796784621, -8.508420245307466, -14.014716857177133, 17.46825981866947, 8.7394092695610119, -10.559493481189753, 12.767938048701128, 15.138604949078795, 11.992106918420994, -4.1009466576601428, 10.895797683842719, -11.102485145032849, 9.2740371065936902, 5.0223781181934672, -13.009215931560048, -2.4537770130506042, 9.4538398738987919, -9.4463497897265984, -7.4868090201247508, 4.9784182834226272, 8.3854387393004792 +}; +const char H_128_256_5_detected_data[] = { +1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0 +}; diff --git a/libcodec2-android/src/codec2/src/H_128_256_5.h b/libcodec2-android/src/codec2/src/H_128_256_5.h new file mode 100644 index 0000000..899780c --- /dev/null +++ b/libcodec2-android/src/codec2/src/H_128_256_5.h @@ -0,0 +1,19 @@ +/* + FILE....: H_128_256_5.h + + Static arrays for LDPC codec H_128_256_5, generated by ldpc_gen_c_h_file.m. +*/ + +#define H_128_256_5_NUMBERPARITYBITS 128 +#define H_128_256_5_MAX_ROW_WEIGHT 5 +#define H_128_256_5_CODELENGTH 256 +#define H_128_256_5_NUMBERROWSHCOLS 128 +#define H_128_256_5_MAX_COL_WEIGHT 5 +#define H_128_256_5_DEC_TYPE 0 +#define H_128_256_5_MAX_ITER 100 + +extern const uint16_t H_128_256_5_H_rows[]; +extern const uint16_t H_128_256_5_H_cols[]; +extern const float H_128_256_5_input[]; +extern const char H_128_256_5_detected_data[]; + diff --git a/libcodec2-android/src/codec2/src/H_256_512_4.c b/libcodec2-android/src/codec2/src/H_256_512_4.c new file mode 100644 index 0000000..048f34e --- /dev/null +++ b/libcodec2-android/src/codec2/src/H_256_512_4.c @@ -0,0 +1,22 @@ +/* + FILE....: H_256_512_4.c + + Static arrays for LDPC codec H_256_512_4, generated by ldpc_gen_c_h_file.m. +*/ + +#include +#include "H_256_512_4.h" + +const uint16_t H_256_512_4_H_rows[] = { +31, 4, 119, 30, 148, 50, 53, 47, 6, 1, 91, 82, 20, 91, 180, 41, 42, 48, 97, 129, 5, 8, 162, 5, 55, 10, 100, 18, 111, 9, 71, 130, 26, 77, 29, 14, 9, 3, 170, 176, 18, 35, 21, 73, 80, 41, 62, 34, 72, 45, 141, 39, 121, 12, 46, 16, 91, 24, 84, 57, 16, 21, 2, 65, 44, 14, 32, 39, 143, 106, 53, 23, 31, 100, 24, 75, 27, 25, 13, 67, 23, 81, 99, 101, 28, 7, 153, 13, 43, 38, 64, 97, 7, 76, 22, 34, 35, 8, 19, 31, 40, 54, 43, 11, 52, 40, 7, 123, 21, 46, 10, 18, 98, 63, 48, 37, 25, 58, 33, 58, 84, 41, 16, 47, 185, 65, 58, 41, 8, 12, 63, 93, 60, 47, 23, 92, 4, 28, 52, 6, 74, 57, 43, 17, 148, 1, 11, 52, 12, 10, 109, 19, 74, 40, 3, 49, 69, 30, 20, 64, 31, 6, 82, 71, 89, 36, 17, 68, 67, 56, 110, 20, 172, 54, 36, 15, 56, 4, 26, 24, 14, 45, 158, 69, 5, 6, 2, 19, 16, 8, 72, 58, 108, 57, 125, 38, 24, 105, 56, 27, 73, 82, 63, 25, 22, 112, 44, 19, 14, 133, 50, 55, 3, 18, 34, 17, 42, 21, 1, 7, 26, 128, 75, 95, 111, 51, 15, 5, 3, 78, 79, 32, 1, 48, 108, 11, 32, 29, 72, 66, 15, 2, 66, 4, 2, 87, 113, 80, 84, 13, 9, 104, 23, 69, 29, 101, 54, 20, 136, 61, 203, 52, 93, 75, 9, 168, 142, 102, 140, 110, 194, 139, 160, 83, 145, 132, 62, 50, 198, 46, 94, 60, 130, 72, 192, 60, 76, 131, 50, 155, 179, 163, 12, 113, 197, 183, 120, 118, 70, 103, 120, 83, 208, 96, 172, 56, 174, 124, 161, 68, 140, 51, 139, 186, 143, 95, 93, 92, 98, 85, 107, 25, 123, 44, 155, 121, 96, 106, 133, 103, 125, 78, 59, 83, 66, 159, 112, 90, 133, 224, 131, 51, 157, 32, 49, 134, 79, 216, 11, 81, 33, 53, 128, 26, 28, 68, 85, 162, 67, 87, 68, 92, 87, 133, 40, 144, 45, 80, 187, 118, 131, 114, 35, 91, 135, 172, 98, 195, 17, 76, 213, 70, 141, 48, 70, 105, 79, 96, 149, 88, 99, 111, 38, 147, 86, 45, 77, 118, 61, 42, 161, 61, 73, 71, 44, 63, 216, 53, 117, 71, 60, 55, 81, 49, 33, 139, 134, 28, 188, 171, 176, 121, 119, 89, 70, 164, 151, 29, 195, 157, 135, 43, 59, 47, 36, 78, 35, 59, 179, 88, 13, 69, 22, 101, 119, 150, 80, 116, 171, 159, 172, 86, 122, 107, 66, 46, 100, 169, 159, 163, 101, 149, 105, 27, 54, 154, 86, 165, 170, 132, 93, 115, 142, 65, 106, 39, 150, 136, 90, 198, 124, 132, 82, 22, 183, 103, 118, 37, 30, 112, 190, 83, 98, 30, 120, 97, 39, 36, 109, 88, 33, 111, 156, 97, 94, 62, 74, 130, 34, 77, 51, 109, 175, 94, 208, 115, 217, 107, 164, 180, 10, 229, 184, 155, 158, 152, 204, 142, 187, 130, 209, 185, 110, 75, 219, 151, 95, 116, 200, 226, 194, 89, 162, 157, 78, 181, 240, 178, 77, 150, 217, 202, 179, 136, 163, 126, 204, 100, 236, 99, 183, 137, 236, 188, 217, 107, 204, 115, 218, 204, 145, 162, 241, 183, 121, 117, 160, 148, 143, 152, 169, 221, 166, 149, 153, 223, 127, 122, 144, 125, 138, 191, 146, 177, 146, 245, 153, 129, 231, 169, 73, 165, 112, 240, 15, 88, 158, 64, 163, 126, 59, 114, 137, 171, 126, 125, 176, 108, 124, 221, 202, 184, 65, 108, 230, 174, 146, 134, 87, 144, 189, 186, 106, 199, 109, 86, 219, 191, 205, 64, 173, 234, 141, 239, 168, 90, 123, 137, 76, 182, 114, 85, 102, 219, 74, 242, 215, 156, 122, 177, 156, 168, 228, 131, 173, 81, 205, 67, 85, 94, 38, 196, 161, 89, 201, 226, 206, 170, 139, 153, 178, 166, 184, 49, 203, 215, 233, 102, 62, 140, 42, 184, 57, 116, 189, 99, 37, 154, 37, 138, 196, 197, 92, 147, 243, 178, 210, 140, 180, 114, 190, 120, 104, 194, 220, 203, 200, 205, 110, 182, 161, 181, 151, 178, 225, 157, 196, 230, 152, 128, 187, 115, 160, 174, 102, 220, 207, 240, 124, 27, 197, 127, 196, 222, 84, 148, 239, 104, 228, 145, 147, 169, 61, 223, 164, 143, 134, 128, 160, 190, 229, 188, 156, 132, 79, 90, 104, 242, 252, 145, 253, 193, 238, 150, 224, 211, 117, 251, 199, 180, 254, 208, 209, 250, 248, 232, 254, 232, 144, 177, 246, 167, 159, 141, 245, 231, 210, 113, 175, 182, 227, 234, 254, 217, 154, 176, 233, 226, 182, 213, 197, 135, 254, 127, 255, 198, 206, 255, 253, 208, 247, 113, 211, 216, 253, 210, 228, 165, 243, 212, 222, 256, 227, 232, 181, 248, 209, 238, 214, 229, 215, 250, 199, 126, 147, 195, 244, 251, 221, 256, 214, 250, 214, 213, 252, 234, 193, 175, 218, 241, 193, 198, 167, 146, 235, 233, 166, 249, 239, 185, 173, 192, 252, 226, 136, 222, 256, 186, 174, 240, 242, 235, 215, 167, 129, 236, 223, 199, 123, 218, 224, 177, 243, 235, 218, 245, 256, 249, 149, 246, 225, 155, 237, 190, 95, 231, 175, 166, 201, 220, 251, 250, 221, 248, 127, 202, 201, 191, 230, 245, 191, 246, 206, 135, 96, 251, 55, 224, 222, 116, 234, 252, 231, 187, 152, 154, 233, 239, 227, 189, 205, 232, 247, 122, 138, 209, 103, 211, 185, 236, 200, 181, 105, 214, 244, 164, 213, 202, 210, 206, 246, 235, 212, 167, 192, 151, 207, 158, 189, 207, 229, 212, 223, 238, 188, 200, 165, 249, 211, 247, 238, 171, 219, 248, 227, 137, 225, 119, 170, 255, 173, 237, 255, 243, 192, 138, 203, 142, 253, 249, 230, 195, 241, 129, 244, 216, 186, 228, 201, 242, 241, 237, 247, 212, 225, 194, 237, 207, 168, 179, 220, 117, 193, 244 +}; + +const uint16_t H_256_512_4_H_cols[] = { +10, 63, 38, 2, 21, 9, 86, 22, 9, 9, 93, 37, 79, 36, 93, 56, 123, 28, 99, 2, 43, 95, 72, 58, 66, 33, 77, 85, 35, 4, 1, 67, 95, 48, 42, 166, 116, 90, 52, 101, 16, 17, 89, 65, 50, 24, 8, 18, 89, 6, 56, 6, 7, 1, 25, 50, 60, 118, 77, 26, 4, 21, 114, 91, 64, 79, 80, 54, 157, 43, 31, 28, 44, 141, 8, 31, 34, 33, 91, 45, 82, 12, 18, 59, 64, 124, 104, 94, 30, 82, 11, 62, 7, 2, 25, 48, 19, 63, 48, 27, 84, 12, 44, 201, 130, 70, 6, 106, 123, 14, 29, 81, 30, 100, 4, 26, 9, 42, 3, 41, 53, 76, 67, 52, 75, 44, 46, 97, 20, 18, 32, 20, 73, 90, 44, 3, 50, 79, 16, 13, 26, 11, 59, 21, 2, 81, 77, 5, 72, 6, 24, 14, 73, 37, 12, 146, 32, 13, 25, 17, 53, 23, 36, 7, 60, 71, 24, 10, 69, 39, 102, 49, 103, 51, 1, 38, 22, 36, 35, 8, 34, 32, 40, 11, 20, 58, 17, 52, 119, 136, 80, 29, 4, 15, 78, 160, 39, 23, 11, 27, 141, 40, 5, 15, 127, 49, 199, 3, 15, 29, 8, 62, 42, 71, 73, 56, 5, 57, 23, 142, 70, 63, 74, 7, 133, 28, 33, 59, 10, 113, 28, 18, 39, 34, 97, 47, 135, 5, 101, 35, 61, 113, 61, 79, 27, 23, 53, 17, 100, 16, 10, 1, 3, 13, 47, 64, 146, 187, 155, 137, 24, 140, 93, 98, 30, 26, 104, 54, 88, 66, 176, 61, 144, 41, 152, 13, 62, 187, 81, 75, 78, 98, 200, 99, 172, 158, 73, 88, 119, 96, 97, 175, 185, 137, 68, 106, 46, 144, 103, 68, 111, 55, 124, 115, 156, 22, 86, 105, 71, 102, 156, 170, 142, 120, 99, 30, 143, 47, 131, 96, 111, 199, 103, 100, 184, 126, 148, 49, 89, 143, 22, 94, 37, 76, 131, 112, 94, 163, 46, 121, 101, 139, 107, 134, 162, 134, 14, 106, 61, 25, 60, 71, 92, 113, 83, 46, 188, 141, 74, 236, 185, 72, 54, 112, 151, 21, 136, 91, 38, 116, 56, 162, 64, 114, 167, 45, 63, 147, 108, 107, 78, 76, 75, 218, 86, 27, 85, 214, 83, 116, 119, 42, 101, 177, 57, 55, 51, 16, 67, 77, 19, 83, 138, 66, 131, 38, 171, 68, 85, 168, 34, 149, 87, 95, 80, 65, 145, 31, 43, 170, 90, 99, 95, 133, 88, 166, 164, 120, 129, 111, 31, 40, 82, 169, 41, 12, 67, 41, 49, 110, 102, 110, 113, 163, 172, 199, 126, 104, 89, 29, 122, 189, 43, 48, 75, 183, 149, 109, 173, 45, 155, 155, 202, 14, 19, 58, 55, 195, 86, 83, 115, 92, 36, 91, 125, 203, 81, 108, 119, 84, 213, 40, 65, 151, 72, 151, 87, 20, 98, 88, 114, 51, 224, 70, 132, 92, 92, 144, 125, 187, 84, 132, 175, 68, 130, 74, 80, 87, 51, 19, 50, 82, 219, 242, 213, 178, 185, 162, 107, 129, 37, 111, 147, 130, 185, 181, 227, 123, 167, 112, 188, 159, 109, 205, 135, 180, 117, 179, 208, 138, 238, 233, 100, 232, 159, 215, 117, 179, 187, 159, 220, 109, 122, 179, 143, 149, 140, 110, 134, 128, 158, 33, 226, 139, 96, 174, 159, 177, 181, 127, 177, 133, 146, 177, 150, 128, 126, 240, 156, 105, 186, 129, 154, 191, 147, 153, 76, 124, 141, 180, 231, 191, 154, 202, 78, 233, 140, 196, 117, 184, 165, 223, 57, 136, 132, 158, 137, 132, 240, 121, 135, 74, 205, 176, 179, 252, 198, 121, 65, 193, 243, 171, 225, 206, 54, 139, 216, 182, 153, 142, 189, 200, 70, 176, 121, 225, 104, 98, 147, 222, 117, 32, 115, 226, 108, 161, 156, 107, 136, 188, 160, 178, 127, 217, 69, 110, 59, 96, 192, 145, 133, 190, 198, 167, 87, 186, 69, 247, 174, 183, 194, 221, 161, 60, 97, 188, 209, 140, 116, 150, 202, 213, 193, 173, 153, 114, 90, 105, 124, 194, 183, 15, 184, 138, 62, 171, 125, 120, 166, 207, 183, 235, 150, 197, 93, 202, 173, 215, 190, 94, 120, 205, 163, 148, 204, 55, 173, 165, 225, 47, 69, 191, 180, 204, 125, 85, 145, 151, 39, 122, 142, 224, 108, 161, 205, 123, 219, 106, 171, 237, 203, 216, 138, 66, 169, 130, 126, 118, 244, 206, 170, 112, 235, 242, 193, 237, 128, 154, 212, 146, 210, 84, 143, 105, 57, 35, 222, 109, 233, 245, 229, 244, 228, 186, 220, 190, 251, 150, 236, 149, 250, 209, 241, 189, 216, 214, 208, 172, 218, 228, 253, 197, 204, 221, 228, 162, 255, 238, 161, 237, 245, 253, 181, 242, 232, 196, 241, 154, 128, 217, 176, 207, 182, 200, 178, 234, 172, 211, 255, 148, 152, 209, 212, 199, 194, 192, 182, 155, 241, 250, 203, 160, 218, 243, 169, 168, 254, 169, 164, 239, 201, 251, 223, 137, 254, 230, 253, 248, 157, 227, 236, 249, 157, 211, 246, 244, 168, 254, 118, 191, 215, 249, 224, 157, 248, 237, 184, 201, 256, 223, 230, 255, 207, 219, 198, 235, 256, 207, 246, 234, 247, 198, 220, 192, 254, 231, 220, 239, 166, 197, 135, 227, 195, 103, 230, 246, 236, 252, 152, 252, 210, 245, 175, 222, 218, 228, 167, 196, 131, 230, 244, 118, 238, 115, 239, 234, 206, 221, 211, 217, 168, 210, 134, 251, 214, 200, 203, 247, 209, 102, 204, 243, 212, 170, 196, 251, 240, 221, 214, 195, 223, 222, 139, 165, 148, 212, 252, 197, 210, 208, 229, 180, 181, 239, 219, 250, 201, 248, 153, 227, 255, 248, 234, 231, 229, 224, 122, 208, 241, 190, 229, 58, 206, 192, 250, 52, 178, 195, 211, 246, 189, 186, 174, 238, 53, 127, 215, 253, 145, 232, 242, 160, 247, 164, 217, 240, 249, 233, 165, 174, 175, 163, 194, 182, 249, 213, 235, 226, 243, 256, 226, 256, 152, 193, 245, 216, 232, 144, 158, 164, 231, 45, 225, 129 +}; +const float H_256_512_4_input[] = { +0.51757034789149192, 3.6747768327751107, 7.7236521981742676, -4.7107278911943427, 7.7122230429603542, -14.946266731679888, -9.5567730710166714, -7.5877780009775071, -8.3629835471455127, 8.4844922006171419, 9.4734932311757394, -6.8841383473145763, -4.6284234216637214, -7.8669368046418358, 12.226645532420404, -7.3774603770015981, 7.7649435759022252, -12.127076055381709, 7.4012504229333951, 6.5535650029238361, -12.318540215486564, -15.835684442673877, 10.779009024429017, 11.841953278425423, 7.1804756215244456, 2.8408801132499808, -11.09563707808943, 7.1789245659484093, 10.24316438845271, 6.4838781564425041, 15.604657058526026, 17.695904359387381, 6.4313440196217382, 4.9488783865887793, 9.9527088015343548, -2.7205772402494488, 12.156344173793103, -11.205004871994769, -12.211802140176635, -5.4465825069640195, -10.152012956739171, -1.1179875067929763, -10.479027227263707, -8.5090340518598531, -7.5030586007744553, -4.9370617561264698, -0.78486455084153151, -9.9902064527523908, -7.1974696423785023, 15.904653930974046, -3.2958890233801612, 6.9052860853356819, -15.446573781345712, 8.2911853913447402, 0.40395028984397091, -1.5672283593714793, 11.262818645299314, 7.1710703603039994, 4.1597725238676002, -11.382339164684311, 14.132112287584638, 3.2925942129085506, -6.1011528087958027, 7.8516182070629279, 5.9768136552516342, 2.699484726705069, 5.2066829520768056, -0.7207484827070334, -8.2386610240355651, 6.0717182827619967, -8.5076501195080585, -13.703946410299512, 9.2623574093742604, -6.9682747118380446, -4.9023588860381846, 9.3084136203033694, 11.148851565040838, 9.1302433636417319, -6.9420186741739887, 7.9337725600954645, 15.582342768204805, 10.766162729242598, -4.9576813210420525, 6.6727325567460882, -12.196894026695226, 11.022208518924467, 1.6977876257198246, -8.9073010297491386, -3.4873714683714097, 10.267082736130799, -6.2704199741458089, -6.7409188535835654, 7.0799113259507331, 4.2517449421654421, 10.988809910933929, 8.3098010378717788, 0.65053609686067293, -9.8680908214463745, -0.13210703660490827, 10.569960823465198, 5.631834756326584, -17.599792146333385, -7.4505114988199814, 2.0876055933892643, -11.848744235597531, -6.370769553578242, 10.349368965148454, -11.054250547489133, 4.9685950633439182, 16.26542564640426, 8.9946743875150297, -6.9695225550874884, -12.491901775385568, 5.221170286398829, -14.57146740285134, -11.185574766943571, -1.4528792719442074, 16.807973653612009, -2.14773040667668, -6.5893455221648924, -10.366321204598048, 11.545810725289135, 11.526831005704754, 3.8156547809267578, -14.793195556950453, 10.727608736368884, 4.245416988419259, -14.823682249573251, -0.055849778718978338, 0.12268898147135411, -5.3423951302536539, 8.9810197259759086, 13.968989424307708, 10.292317467705674, 10.814835776145282, 7.8639985326787416, -15.489411581463163, -5.3160377506090404, 9.6739321724911669, 7.3738788431938094, -7.2089426352102386, 3.2896767517308105, 11.134312631894316, 6.8196648270250888, 11.696870111795384, 11.33636158982544, 7.6883282280715841, -8.5354168089995976, 5.5939282378823458, -9.6804348667718987, 10.27449691588806, -4.601540486911178, 11.476772689524227, 13.587705068864731, -5.4206086888829965, -8.2565155897262077, 11.240961601590284, 13.474564188433188, 2.9546569324344847, 6.7205439189069738, -13.857561305882877, -16.669935196013508, 7.7992349867934445, -9.1054167276310629, 13.234970834427072, 3.8904964584199755, -0.007103062296974271, -7.5226178742319778, 11.799567862083773, 10.306340656379247, -9.6031596648762214, 4.7873593091676456, -8.7508487803331807, -11.418105573040524, -8.9917029259865018, -4.8764541287524565, -13.141445425385772, 10.478907923003296, -15.62610293315559, 12.174935599981024, 14.110425042238267, -5.3351060433143189, -10.448529758835216, 7.1555832021079713, -3.7581044977756339, 4.9877839461702953, 6.4352605191478229, 6.2681705969506636, 1.0591230129022271, 4.6014572060908856, 3.630881166938468, 5.2610118858162744, -4.0406336475456959, 6.7089084012087339, -12.399263098594448, -8.6885785210631923, 10.200283753268543, -9.6711128555761476, 7.9523636179902066, -1.6194893091097409, 7.8100926558018475, 4.7308921409583666, 4.2870845092503842, -5.5113211353649589, 4.6632369877554547, 13.580052366571808, -13.989676528031513, 7.4788332322884292, -7.9055834172669863, -5.4521774799559077, -2.3832875853818489, 12.500172468473709, 4.4257047233124993, 8.6185463356078564, 1.6503341929121846, 9.3817571992318136, 14.707911493485314, -8.8168554234237906, 16.686275657629849, 8.0726217002484866, -5.7336803150162323, 11.199173436763308, 2.9624772806565214, 6.084008649398772, 13.651210034355321, -5.3568028597546125, -8.1131526120118433, 20.586630811135656, 3.2537667200472802, 2.4661860405319476, -12.302300974267494, 10.14496212813636, 12.013406576337029, 12.48076525937795, -7.7705021913306842, 4.4923244656818495, 3.9070226775151733, 5.2441749708856884, 5.3679526862494482, 13.94196173641695, 4.5296297811057684, -7.1127741954540973, -14.014901825754492, -5.4003616016916451, 11.30329597194279, 13.212639183152664, -6.7394206827710148, -9.3081209755867338, -2.8134083772289786, 12.362737057742141, -7.5816771419304487, -6.4823236067192118, 6.4368678007326325, 4.2139501741847152, -1.3015955505891499, -7.0693979078400888, 5.1567879937036976, -14.29429720815733, 7.0965274119499995, 14.335090253318402, -1.1060086481123688, 12.280127372295182, 15.355627698217484, 7.1118230503395736, 0.080951481678914361, 4.5275811277845772, -12.807880002244142, -7.9315604470260013, -10.460706930669154, -8.6438350740702976, -5.0714513528336349, 4.1875900660492, 8.7133453013769007, -9.8239011192052565, 6.2390365458120005, -8.4029965191052352, 4.984656567448889, -11.441087746951402, -2.8554666393879051, 8.7117720128765459, -10.315850818433494, 8.7178427912116181, 4.5674735423087416, 5.059245742630825, -6.9741413761506754, 6.8923077141725289, -7.3195029505868936, 7.0150611857028995, -13.57329609597363, 2.4003974632430873, -12.79534048621632, 14.073423100856756, 13.050627886243262, -9.9719834315477431, -8.9255382467931454, 6.4498466627026518, 7.9947952448158626, 7.2030719578630773, -13.912680862467084, 8.6608429906142881, 8.3632503895529862, 5.9305710042005879, -2.9130898919754795, -11.254118896275536, -13.798108618024084, 13.07950958186338, 14.355477267752258, 3.222947027333253, 5.9042659378475841, -8.1324540511219237, 7.1175191808602341, -6.585103539549686, -9.2836832446594695, -15.365446897780474, -10.994019011437626, 4.0590717801675913, 9.5109814268426955, -4.3279461184809049, -15.720038357484848, 11.951856945935143, 12.682014968828179, 16.336475563256471, 7.6649931256123782, 5.3001533728428951, 14.811865942579626, -7.1591674243249166, 6.9641361242422413, 2.2887071087144921, -7.4283680060564725, 9.8045942879168955, -6.4177702207017902, 10.47585866871807, -7.6078593665950418, 8.6728241961706676, -2.3844019549449365, -12.333348889567585, -8.0410508790992044, -15.319448351686553, 4.1439520121183158, 10.124921135545005, -2.719059876565721, -7.15172555283569, -13.928003800487966, 5.0190908596544332, -10.550763525222086, -9.6902455518808601, 3.4656033167131572, 5.7434253113056117, 2.2353462963087205, 8.2800699204033581, -9.5917816492257746, 6.604246872114893, 5.7926392372814988, -13.95249621884361, -6.3255003024458976, -9.0958782067905091, 6.6894074274331334, -16.305393183977255, -14.754831506925347, 9.9598275167453405, -2.2953313029712268, -9.9770589384486907, -1.2849873707603492, -11.674107434694577, 4.2308935045924834, -15.986216502652635, -12.496143349107586, -6.961301171448163, 7.173141034418097, -16.747323708994283, -6.1459334756956441, -7.6817564340549813, -2.9759502920998209, 4.4290936044370053, 15.85792699420073, 3.8733475037532075, 13.282888674545026, -8.8075790389214674, 15.756528771444074, -0.9172738378747668, -5.8878468427817152, 5.3239983067421415, 7.0650495320494038, 10.266937497463937, -6.4024274906880185, 5.7532733339731017, -16.811716029564213, -8.4435829388264345, -14.547150170272406, -8.5663296440687802, 7.9505572216380145, 6.6923964384181422, 5.1145018718318767, 6.7546204865730397, -5.7136099383940193, 6.5164149727652187, 8.5399580765014118, 11.118659305825421, -5.11256462073184, -7.4204131176081027, 2.4372467698010158, -11.332205684329931, -2.300944450055125, -7.5761485315412722, 7.9239226824179134, 15.148232300109672, -8.2866195088681511, -12.500886819111757, 5.8898233180615511, 6.0191326161618939, -9.571768060299096, 8.2993401574423782, 13.192810814495525, 9.2287810197171662, -6.3446655091317981, 4.6194007533037533, -12.299288931968976, -11.301088930234318, -12.748142414710747, -11.089177834341021, -11.952684158007653, -12.201173925517882, -7.8885413991638051, 6.162990209842949, 10.074139560291529, 0.33052151002636837, -13.233240567315669, 8.5041479968410876, -3.877731464378761, -8.4152150964636405, -4.416934778774996, -2.7605197724504817, 8.4248907474003509, 9.6866360704229582, -6.7860748062114764, 5.350251139963115, 8.0461693937601364, 5.4866837755943072, 8.2170770706027305, -4.9303099776579087, 0.19594956934783084, -3.0366818211786448, -0.89771548197359008, -9.2559494368024176, 13.057529669212126, 1.3182610405525714, -5.379813192370591, 7.0595292864637926, -8.0652416728279732, -10.017709623333209, -19.043167085088943, 4.2036836072934642, 7.2607959496260142, -20.579086044233659, -10.955745136261804, 2.8075247300020623, 6.158819317084113, -4.1432994280765003, -8.4759687111809825, -7.4063800738713441, -11.809011583528154, 3.7455788861378996, 11.055125561517878, -11.050002999845985, -12.641967828832232, 9.7182304238773387, -9.6040255370844871, 8.5406323003146039, 5.5370300264242678, 9.6390471518242808, -4.5175089872689815, 11.211130149275418, -7.0619345213828808, 9.0284753188655795, 6.5193504139524956, 5.9080653530360792, -6.9270802426346494, -7.5939041868540862, 11.483724465414687, -6.4198704940922147, 11.594197774773704, 9.8177782003472842, 7.8573132285189722, -14.764671284444628, 10.836352484846104, -5.1661833245215307, -2.2845730141844491, 1.4521554038891078, 14.07531661629624, 14.874495505085839, -10.926627051439677, 1.0207490010126001, -1.9216020879305911, 14.405401350119591, 11.010298478850032, 3.7506698273138919, -11.982303137905003, -6.2083663060173526, 6.2522765425768316, 7.7069832341275522, -18.065137191023226, 6.792106322469885, -0.93798035245625377, 7.8641939572750079, 10.30225964497456, -7.0018228039310735, -7.0742108654561564, 4.1031586655458723, 2.3748564555251002, -4.3322313906258154, 9.6230244300270638, 19.666940225626419 +}; +const char H_256_512_4_detected_data[] = { +1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0 +}; diff --git a/libcodec2-android/src/codec2/src/H_256_512_4.h b/libcodec2-android/src/codec2/src/H_256_512_4.h new file mode 100644 index 0000000..c872ebe --- /dev/null +++ b/libcodec2-android/src/codec2/src/H_256_512_4.h @@ -0,0 +1,19 @@ +/* + FILE....: H_256_512_4.h + + Static arrays for LDPC codec H_256_512_4, generated by ldpc_gen_c_h_file.m. +*/ + +#define H_256_512_4_NUMBERPARITYBITS 256 +#define H_256_512_4_MAX_ROW_WEIGHT 4 +#define H_256_512_4_CODELENGTH 512 +#define H_256_512_4_NUMBERROWSHCOLS 256 +#define H_256_512_4_MAX_COL_WEIGHT 4 +#define H_256_512_4_DEC_TYPE 0 +#define H_256_512_4_MAX_ITER 100 + +extern const uint16_t H_256_512_4_H_rows[]; +extern const uint16_t H_256_512_4_H_cols[]; +extern const float H_256_512_4_input[]; +extern const char H_256_512_4_detected_data[]; + diff --git a/libcodec2-android/src/codec2/src/H_256_768_22.c b/libcodec2-android/src/codec2/src/H_256_768_22.c new file mode 100644 index 0000000..5f3a3b9 --- /dev/null +++ b/libcodec2-android/src/codec2/src/H_256_768_22.c @@ -0,0 +1,22 @@ +/* + FILE....: H_256_768_22.c + + Static arrays for LDPC codec H_256_768_22, generated by ldpc_gen_c_h_file.m. +*/ + +#include +#include "H_256_768_22.h" + +const uint16_t H_256_768_22_H_rows[] = { +35, 7, 24, 203, 138, 29, 39, 28, 114, 79, 49, 43, 218, 92, 70, 192, 59, 1, 194, 129, 15, 5, 25, 62, 50, 28, 23, 119, 191, 112, 195, 18, 164, 117, 148, 82, 25, 120, 41, 100, 61, 4, 31, 7, 13, 135, 108, 128, 48, 45, 96, 201, 67, 17, 143, 42, 91, 44, 168, 49, 26, 38, 83, 169, 16, 86, 22, 25, 69, 42, 122, 94, 226, 145, 121, 242, 131, 165, 55, 81, 74, 5, 58, 46, 59, 32, 115, 139, 180, 6, 78, 20, 7, 135, 78, 88, 49, 28, 77, 158, 94, 125, 21, 152, 23, 7, 123, 160, 53, 11, 85, 82, 32, 60, 74, 65, 3, 13, 111, 143, 121, 46, 68, 121, 72, 177, 54, 166, 20, 130, 30, 139, 34, 151, 97, 47, 126, 1, 76, 72, 64, 32, 9, 125, 54, 114, 17, 82, 2, 30, 102, 29, 137, 2, 16, 206, 2, 27, 3, 13, 199, 123, 226, 20, 60, 221, 15, 53, 35, 93, 9, 124, 1, 109, 103, 73, 190, 51, 140, 90, 130, 57, 52, 225, 8, 47, 177, 66, 8, 112, 110, 62, 64, 104, 156, 33, 101, 26, 107, 60, 26, 196, 39, 34, 14, 54, 68, 17, 66, 5, 33, 104, 3, 214, 200, 35, 170, 51, 90, 113, 122, 8, 70, 65, 42, 80, 134, 157, 88, 19, 3, 98, 112, 19, 60, 119, 76, 18, 43, 232, 141, 175, 154, 118, 187, 182, 113, 37, 95, 169, 36, 17, 36, 64, 191, 51, 63, 24, 36, 21, 223, 27, 94, 142, 18, 22, 53, 45, 161, 81, 80, 68, 22, 169, 52, 109, 180, 61, 33, 121, 98, 118, 26, 96, 156, 101, 100, 73, 31, 87, 71, 20, 93, 132, 173, 1, 39, 151, 166, 106, 67, 87, 116, 196, 173, 56, 102, 120, 147, 30, 69, 137, 108, 21, 88, 84, 81, 48, 37, 102, 10, 86, 158, 78, 162, 39, 14, 144, 9, 91, 106, 96, 55, 6, 127, 135, 87, 163, 5, 25, 42, 56, 171, 225, 213, 99, 46, 133, 12, 194, 234, 159, 59, 55, 84, 10, 24, 40, 130, 228, 181, 186, 163, 72, 35, 115, 4, 149, 106, 19, 16, 67, 11, 8, 100, 144, 154, 27, 62, 37, 164, 2, 226, 11, 183, 48, 10, 176, 171, 197, 216, 155, 198, 44, 52, 75, 70, 74, 138, 184, 10, 96, 4, 99, 79, 208, 18, 62, 113, 167, 41, 38, 48, 40, 144, 97, 57, 134, 159, 211, 21, 146, 9, 83, 58, 51, 116, 32, 15, 50, 100, 6, 74, 31, 12, 19, 58, 78, 197, 162, 50, 11, 43, 89, 188, 132, 85, 94, 50, 65, 99, 66, 105, 69, 40, 157, 16, 97, 22, 63, 207, 72, 59, 142, 29, 76, 55, 206, 54, 136, 45, 40, 46, 41, 185, 6, 231, 13, 107, 208, 23, 173, 92, 145, 88, 144, 111, 119, 151, 68, 14, 129, 108, 89, 23, 36, 44, 47, 210, 4, 146, 89, 132, 111, 69, 57, 90, 117, 31, 14, 234, 183, 116, 214, 84, 249, 179, 209, 238, 47, 248, 227, 161, 125, 237, 220, 223, 237, 63, 200, 213, 240, 161, 212, 252, 250, 81, 214, 34, 159, 217, 184, 222, 240, 204, 147, 210, 211, 229, 133, 162, 185, 153, 249, 65, 15, 119, 204, 122, 161, 133, 138, 103, 204, 248, 38, 201, 173, 98, 181, 255, 73, 186, 73, 150, 189, 176, 128, 184, 101, 230, 56, 186, 160, 234, 205, 168, 243, 212, 205, 80, 147, 82, 93, 120, 214, 189, 195, 205, 141, 183, 152, 133, 255, 128, 174, 215, 229, 86, 160, 122, 206, 188, 165, 83, 246, 170, 85, 182, 219, 158, 118, 253, 104, 231, 220, 136, 191, 179, 79, 178, 166, 239, 116, 108, 167, 207, 221, 210, 207, 30, 158, 239, 209, 224, 199, 203, 142, 172, 67, 227, 75, 231, 34, 254, 145, 222, 240, 207, 107, 98, 168, 154, 233, 238, 33, 227, 236, 208, 241, 103, 141, 245, 190, 242, 128, 103, 232, 28, 159, 70, 197, 29, 155, 185, 218, 111, 188, 224, 252, 219, 164, 236, 163, 149, 241, 172, 219, 238, 216, 12, 156, 232, 217, 118, 136, 157, 247, 123, 230, 245, 202, 235, 217, 235, 64, 77, 95, 110, 140, 211, 254, 251, 235, 149, 253, 248, 226, 222, 256, 196, 170, 235, 152, 124, 168, 157, 127, 169, 184, 170, 71, 45, 247, 146, 120, 179, 176, 129, 249, 106, 251, 165, 199, 251, 220, 201, 224, 229, 194, 148, 220, 164, 193, 57, 183, 250, 52, 172, 180, 242, 175, 250, 91, 155, 187, 131, 61, 139, 252, 174, 107, 99, 77, 176, 179, 126, 192, 182, 125, 71, 124, 175, 202, 66, 178, 233, 105, 145, 140, 243, 135, 232, 85, 248, 153, 244, 115, 77, 216, 187, 139, 79, 171, 253, 204, 212, 156, 150, 218, 186, 86, 83, 198, 192, 151, 101, 127, 192, 58, 97, 208, 87, 188, 209, 137, 247, 136, 221, 154, 37, 199, 165, 126, 105, 12, 246, 187, 196, 242, 236, 256, 131, 213, 217, 230, 233, 105, 155, 198, 178, 203, 243, 228, 134, 123, 182, 49, 178, 222, 254, 244, 195, 225, 223, 193, 163, 141, 194, 252, 146, 237, 129, 76, 231, 92, 203, 177, 221, 117, 75, 197, 243, 27, 253, 92, 202, 215, 174, 228, 193, 254, 230, 239, 218, 80, 63, 223, 167, 109, 189, 228, 38, 149, 131, 210, 115, 241, 89, 193, 138, 250, 150, 171, 162, 113, 215, 185, 143, 172, 206, 245, 41, 209, 213, 216, 247, 148, 124, 44, 142, 117, 132, 127, 198, 255, 126, 110, 71, 177, 200, 175, 91, 152, 112, 212, 239, 249, 234, 140, 245, 167, 181, 104, 256, 241, 189, 244, 61, 200, 43, 148, 219, 143, 95, 174, 130, 114, 84, 244, 181, 137, 229, 95, 160, 215, 205, 24, 246, 53, 109, 251, 190, 236, 134, 153, 190, 150, 180, 227, 211, 237, 238, 153, 147, 93, 195, 201, 246, 166, 256, 56, 233, 114, 240, 202, 102, 75, 191, 225, 90, 110, 255, 224 +}; + +const uint16_t H_256_768_22_H_cols[] = { +18, 149, 117, 42, 22, 90, 2, 185, 143, 321, 110, 189, 45, 205, 21, 65, 54, 32, 230, 92, 103, 67, 27, 3, 23, 61, 158, 8, 6, 129, 43, 86, 154, 27, 1, 251, 248, 54, 7, 358, 39, 56, 12, 58, 50, 84, 8, 49, 11, 25, 178, 183, 109, 127, 79, 70, 182, 83, 17, 114, 41, 24, 17, 141, 43, 188, 53, 123, 69, 15, 230, 125, 60, 81, 140, 139, 99, 91, 10, 79, 25, 36, 63, 3, 106, 66, 290, 96, 407, 180, 57, 14, 82, 72, 206, 51, 135, 57, 271, 40, 68, 151, 51, 112, 286, 239, 148, 47, 174, 191, 119, 30, 220, 9, 87, 1, 34, 110, 28, 38, 75, 47, 107, 172, 12, 137, 226, 48, 20, 130, 77, 294, 38, 227, 46, 115, 153, 5, 88, 179, 88, 136, 55, 328, 74, 233, 34, 35, 183, 63, 134, 90, 41, 151, 172, 190, 195, 100, 28, 72, 11, 39, 182, 33, 78, 120, 124, 59, 64, 105, 302, 137, 56, 94, 242, 65, 126, 119, 5, 89, 58, 107, 89, 30, 40, 61, 245, 101, 64, 162, 29, 16, 252, 19, 31, 202, 170, 312, 134, 18, 52, 200, 4, 33, 74, 100, 125, 157, 6, 35, 36, 22, 19, 2, 95, 188, 29, 13, 108, 14, 126, 31, 15, 133, 184, 73, 10, 352, 37, 69, 113, 166, 152, 73, 201, 156, 13, 7, 121, 20, 158, 76, 76, 295, 161, 104, 196, 9, 4, 24, 211, 23, 111, 143, 59, 218, 138, 154, 159, 367, 82, 334, 44, 189, 171, 356, 373, 334, 118, 327, 44, 155, 147, 238, 234, 129, 260, 266, 105, 258, 37, 198, 262, 26, 152, 131, 289, 113, 196, 133, 169, 253, 319, 62, 203, 414, 411, 70, 239, 394, 231, 122, 136, 318, 60, 430, 218, 256, 168, 145, 333, 306, 253, 318, 85, 165, 266, 192, 257, 193, 116, 209, 138, 207, 311, 169, 279, 140, 62, 115, 379, 237, 205, 95, 118, 226, 80, 81, 103, 316, 111, 97, 302, 229, 444, 219, 262, 374, 170, 101, 249, 284, 319, 149, 346, 287, 197, 307, 159, 194, 333, 300, 199, 123, 276, 207, 175, 190, 247, 146, 296, 122, 378, 193, 45, 83, 121, 71, 162, 223, 102, 275, 316, 66, 237, 181, 265, 431, 49, 353, 94, 194, 312, 50, 132, 208, 160, 264, 120, 376, 144, 369, 80, 249, 213, 307, 298, 104, 294, 243, 263, 195, 225, 109, 168, 98, 21, 325, 338, 180, 102, 128, 397, 75, 227, 217, 343, 185, 295, 269, 260, 236, 187, 284, 117, 258, 361, 246, 254, 67, 173, 71, 264, 176, 85, 177, 116, 276, 364, 248, 86, 219, 380, 348, 161, 215, 55, 282, 135, 46, 78, 156, 128, 320, 132, 127, 209, 77, 342, 26, 386, 298, 192, 174, 179, 114, 166, 145, 261, 177, 344, 163, 139, 360, 96, 198, 141, 191, 285, 351, 203, 181, 16, 153, 131, 32, 184, 163, 289, 360, 199, 335, 232, 53, 42, 255, 240, 178, 214, 210, 92, 340, 173, 157, 213, 403, 210, 432, 93, 222, 329, 387, 384, 349, 160, 491, 167, 371, 208, 265, 370, 164, 314, 273, 481, 357, 68, 201, 378, 98, 171, 150, 434, 142, 211, 142, 216, 259, 329, 401, 297, 455, 421, 225, 443, 428, 268, 347, 186, 386, 97, 441, 256, 275, 267, 206, 354, 342, 417, 425, 353, 200, 278, 379, 395, 204, 224, 283, 301, 272, 454, 223, 291, 364, 176, 398, 396, 372, 272, 324, 301, 271, 270, 112, 311, 355, 292, 310, 321, 315, 494, 507, 330, 384, 293, 263, 463, 332, 416, 232, 404, 375, 286, 320, 165, 212, 346, 331, 270, 313, 398, 436, 487, 233, 409, 466, 366, 303, 430, 244, 236, 234, 124, 99, 197, 280, 144, 332, 335, 93, 371, 359, 341, 446, 91, 418, 290, 326, 324, 399, 267, 288, 241, 429, 417, 415, 287, 422, 309, 426, 368, 411, 314, 222, 484, 328, 347, 285, 228, 130, 352, 108, 48, 413, 363, 251, 241, 299, 410, 150, 250, 220, 389, 257, 305, 387, 281, 273, 376, 349, 235, 277, 451, 277, 385, 228, 416, 309, 299, 322, 399, 481, 255, 313, 389, 350, 361, 304, 390, 393, 242, 439, 245, 385, 350, 52, 87, 419, 147, 406, 323, 404, 420, 305, 345, 84, 415, 391, 202, 308, 186, 244, 327, 217, 363, 246, 362, 216, 155, 388, 247, 344, 373, 240, 345, 447, 212, 339, 370, 187, 392, 146, 406, 259, 351, 456, 420, 477, 325, 215, 238, 261, 243, 268, 303, 359, 434, 453, 296, 382, 231, 500, 339, 476, 106, 374, 423, 401, 442, 435, 478, 510, 429, 457, 252, 407, 436, 292, 421, 459, 495, 476, 340, 283, 382, 167, 465, 310, 509, 428, 279, 204, 365, 496, 380, 412, 326, 472, 474, 341, 459, 497, 471, 473, 498, 413, 356, 449, 426, 395, 478, 469, 467, 500, 506, 437, 463, 235, 457, 408, 460, 254, 450, 452, 372, 490, 505, 397, 437, 462, 288, 433, 506, 466, 297, 438, 405, 394, 317, 148, 424, 467, 447, 322, 337, 485, 502, 509, 441, 483, 494, 448, 472, 402, 458, 281, 451, 431, 315, 505, 175, 452, 453, 369, 479, 493, 479, 510, 504, 443, 414, 502, 405, 427, 508, 282, 488, 308, 280, 221, 354, 427, 278, 435, 432, 164, 492, 465, 403, 503, 348, 483, 336, 470, 470, 409, 300, 448, 366, 464, 462, 486, 484, 501, 493, 460, 402, 486, 489, 442, 492, 377, 392, 306, 456, 323, 419, 473, 269, 440, 365, 381, 331, 498, 450, 224, 274, 229, 412, 418, 482, 464, 440, 388, 438, 357, 274, 487, 469, 355, 512, 400, 475, 362, 336, 445, 455, 485, 507, 317, 408, 367, 495, 337, 439, 433, 330, 458, 496, 504, 375, 304, 475, 468, 461, 480, 422, 499, 489, 444, 423, 214, 474, 424, 343, 393, 461, 250, 377, 358, 396, 512, 508, 383, 488, 400, 471, 391, 477, 291, 501, 511, 221, 482, 490, 491, 445, 503, 454, 338, 381, 468, 449, 497, 425, 293, 446, 410, 480, 368, 383, 390, 511, 499 +}; +const float H_256_768_22_input[] = { +8.9323881489912722, -14.346922710565353, 7.9693390759559781, -5.575983146144643, -11.430007344507024, -11.797433382704103, -7.6498596597609545, -7.881023325143766, 4.7029642025464975, 5.490489593506263, 1.4577054829853482, 7.2204914066015347, -6.4495501165249394, 11.025143103007442, -9.6136273661905971, -1.6292633004367878, 20.082835454091001, -15.940623976141929, -2.9320120314706735, -4.3372895006030534, 5.8549869318024657, -7.8135927951559925, 4.4717025005955255, -7.1804626225242245, 8.8281745058367793, 3.457866082712139, -11.660964767047432, 15.344085170249253, -14.466810773633428, -10.293997562512834, -6.5294617860841004, 2.6337196833307024, -11.070543876657444, 5.7359108096272164, 9.0013294714941843, -9.1923366442599423, 8.3397116927192272, -7.3466443766727068, -7.0208885950279667, -9.8833064990274835, -11.070411858783441, 16.189201249627562, -6.6872549284064142, -11.752890503765991, 8.888774213749782, 6.0968391171951497, 4.6589995649358533, -13.575988817182116, 11.224485296177397, -10.220694397171258, -5.4572791361037458, 3.0379566142247696, -10.350052412180393, 10.682941155969285, -4.9736564167026174, 11.948298747287996, -9.0750233401887872, 8.9486285395989267, -8.0970017828965126, -6.5844009128903371, 8.5356201812866281, 6.8576026698255736, 3.5824292008949179, 6.386672876216724, -15.44333294899913, -14.723335707927411, -7.1535041654585925, 10.057507199075706, -6.9304518083413749, -13.454196499566493, -4.138927837975757, -9.8229530349333984, -4.7378733928678765, 9.7370721449903357, -11.850883212615898, 5.8425014756304456, -6.9027200123108363, 8.7507430345166597, -2.8432533600339798, 7.1365746925349614, -6.098608401582597, 10.486813349939659, -8.8989094853818393, 7.6668852841834365, 6.3748984557020911, -5.4320648642184377, 12.959555816131948, 6.6472990487222825, -4.5586715631096242, -10.121473995028611, 13.889214737960058, 7.8618812777297702, 0.65114006436468486, 5.6488480073158049, 5.572561535915213, 2.4203295039424271, 5.3724413783839795, 10.445189341740317, -15.231581540217265, 11.189031424930562, 13.490253048718506, -7.5847033262880901, 8.1341785315194368, 4.667483152501207, 10.057012188688605, -12.532915718955612, 17.831016306467532, -7.0233337748720057, -8.1477498232874108, 6.5993887776727203, -6.605350841986966, -7.0309413757967123, -0.87776810176011932, -7.9287494770117224, 5.1536577951126938, 0.56224938859050333, 7.7410604756629082, -10.567376193912894, -2.4437814999269047, -1.2455732716974919, -8.9878404597781163, -10.226284826932922, 4.5715929705982656, -1.3060897521729748, 9.6931031456180285, 6.3549868823010955, -7.6817147139176463, 8.4268904957327955, 0.72594931178019784, -4.9826196594501706, 8.5326984912532176, 2.0637319625971493, -4.2933223803232075, 8.0239298244286879, 1.7951957372413565, 0.084600427180267501, 9.4399601205840362, 10.396717221311645, 12.856923054222854, 3.3295462715836468, -7.6253580712992282, 4.4434471213207374, 6.3733997531278987, 5.4209913860102539, -5.9866755286453737, -7.0287078896424156, -9.2179437166191374, -11.790731307180192, 8.455859639343128, -8.3117274581248051, 13.838681948013669, 7.5475760198641648, -10.086023553300919, -11.224918245135393, -3.3058930832202531, -6.8195757099451129, 11.709166727746231, 11.710100491323546, -11.077873187765078, -10.227016885555694, -4.2941243793572408, 8.1424248467837987, 9.7722584940844754, 7.1104245309154912, 9.3804477382031415, -7.106685163129332, -7.2437598314289575, 11.947702093459393, -1.057260209023416, -6.765299028699161, 3.3425539547981304, 13.328906459054352, 4.4101064786390305, 1.8051901230395977, 11.535802590105595, 0.81386101415425482, -8.165348209826135, -8.5774987728328416, -6.0775939508580219, 2.5963421619843943, 6.3292406903055642, -8.4458269581431491, 8.7662642361276717, -5.819334215801403, -13.610981269704446, 5.0765800356900179, 8.6249353046138477, -4.9634433316247675, -3.9950013700332065, -7.6929117100191453, -6.3633253856519749, 0.83722518023775461, 10.425061034991041, 10.934194165601433, 10.580235622153944, -17.515337920449952, -1.537113005053216, 10.026745250979713, 18.991835102357538, -9.10384082546339, -13.768910919694958, 5.4796127108483343, -8.9244398152912101, -11.548649423930978, 15.611931291120561, -8.908049321272264, -11.715023369923955, -8.5067714993118528, 8.669606218924919, 8.6186685199527773, -0.30417248355831389, -14.992242521244618, -11.237143275747075, 15.47971006097473, 7.0259516978639338, 10.065037137491313, 7.8868287877920169, -12.78707872542274, 7.4550220422461217, -16.404346129675449, 13.30456637678888, 9.9512518647161254, 7.5942461140693247, 3.7624642178418926, 9.8925251212558027, 14.146774666880505, -6.8718384088583475, -3.9981741290451276, 9.4511470096099846, 11.953465594032014, -11.215529849347973, 15.45129835369298, -7.3274909872161418, -4.9654010419320853, 7.7259448497328904, 9.8641694370073871, 1.1150439872404596, -10.084099868296887, 12.049728969177872, 13.071957031320016, 6.9097309932538309, -0.39659296549442785, -2.9217410655323537, -9.5561149122145306, 4.3607269616443673, -7.3795521023764916, -11.702904880630188, -1.5433424172046679, 15.057989444533467, -1.2565455630730749, 8.9880357276703204, 6.1129770246307693, 11.328910534091127, -2.9309511311565144, 11.207912500256919, -5.7404867114420988, 5.9950024570017471, -5.7910643096127341, 5.4208744627397838, -4.5716714958282108, 8.1298949011896831, -11.711123662713085, -12.017719365072217, -9.7122748441533471, -6.6047630492267668, -14.567681472229127, 7.7859507737798745, -13.177213209080305, 1.409111307587259, -1.5011399595588764, 12.057098493693852, 6.4171185080762427, -11.634125892968456, 11.044794834453159, -14.65558507132892, 13.72196292983746, 11.040226522930523, 6.2584434572994629, 10.730689310638432, -4.618515034465152, -1.2143032307321182, -7.4189186448958875, -7.669206125358758, -9.1157167366336314, 4.9339345930796563, 8.3824960985509129, 9.5126664524245168, -4.4260649375190164, 3.6144449441325635, -10.893425304008998, 8.3182825177379076, 13.628768431834336, 7.1730917891722781, 10.087828497729179, -10.489116618742848, 3.8856613599836791, -15.602509765497121, 7.2487646720202497, 12.218582462579505, 0.49211467796430364, -0.066484718374747426, -8.4329617736870581, -3.0127430939186324, 5.8144883342823128, 8.6729115102941527, 6.121491141792947, 12.360054236262307, 13.543171514998027, 12.1058948920289, -12.808248849582228, 7.3365859144200227, 2.0678328559134647, -1.7234260199225477, -13.299836520520724, -14.789707963127125, 6.6006452928112296, -11.956138068501044, -8.8455623029732315, -2.9088913906661178, -9.2132364101435229, -5.8435384831621802, 5.8547803901805464, 8.8126231169253515, 5.5222906262970843, -10.39753464755324, -12.211638565038697, 17.292580458421533, -8.5876470036423616, 4.7678649428994673, -8.4226853315054129, 8.700249181036531, 12.952510035514349, -7.6833594373108234, -3.0202355585479235, 8.7526883579126586, 11.663176352140155, 11.981232949878732, 11.031377901823634, -9.9501241218952927, -15.089187715856323, -10.601089041749843, -6.388179627159027, -4.6793834219078603, 3.9045854726147744, 9.8861746042718845, 0.042855319175376341, 14.3414643477855, -10.407450105082846, 3.0336086321363265, 13.793872516546351, 8.0501940947932038, 4.5991785638040428, -7.9303874601996593, 14.049591025574657, 17.380262133125449, -7.8459793004203222, 8.705024309261562, 6.6262770303011473, -10.086319438204431, 11.047015628809582, -7.3582609209654937, 8.2545626149113698, -11.989564968227834, 2.5193529800955838, -13.244337020280915, 4.8502499826361731, 14.474602979942233, 6.9452935547158612, -7.0450024656821544, -10.212713949627561, 13.849620674538945, 9.6833988531870752, -5.9081325241866898, -10.018382284344064, -6.6229672412657683, 13.879028902842597, -14.33382686638503, 1.9643288191802857, 0.16885137143821174, 4.2277292060928415, 10.805548194765471, -2.4964830143581742, -13.101405042095365, -13.302619999785827, -5.9241726080344108, 14.467933324092012, -8.4591055199339298, -10.184465268318146, -19.503434376811896, -15.229997219469618, 4.8345001979789908, 8.0104662922364813, 4.4017092080658031, -10.231395640484859, 3.9727378370282236, 14.2026231360392, -8.4599285310056196, -12.215460236402727, 5.394330835754074, -7.3356861012337502, -3.6795675270857404, 8.0787223556775896, -9.3271996634056915, -7.4552893328088974, 6.4828043001554736, -5.9782833623900453, -1.9874116057406432, -7.5397619196439196, 6.0283880381663453, 7.1105241207440057, 10.966410901409223, -12.375355422502105, -13.997023100211885, 7.7681673568373251, 6.0215105845435861, -0.44409932549081066, 5.2745451861685329, -7.2390124351491778, 9.8045113653170404, -3.5483006663908347, 8.4455042050030151, 6.750717907091107, -9.4719350776568856, -10.118021370720959, 2.7210293880017544, 8.2387439951112835, -8.6980762983904132, -11.317194860133458, 14.906902369795306, 8.5196626788523204, -5.7269320734414473, -6.4873691363023527, 11.118139263369434, -5.131366585591298, -5.1884527453006095, 2.1617883533714988, -3.2189908119713868, 9.1103687701917888, 6.1325191653578388, 2.411217194453199, -3.9050656149976706, -7.7536941054127926, -11.37779012533324, 2.2663187424687767, -14.954242385161651, -11.78196073144464, -5.9162280171814157, -14.78759715146799, 4.6557410991557671, -5.9735521657583144, 6.6275285823558434, 3.1024480512797177, 10.06871404793227, -10.543486892529438, -4.7522704594310561, -0.61601641164246079, -7.6838548304456449, 15.87411724597454, -11.665450977940896, -4.4365872375343205, 3.8247335268174831, 6.5326004536991329, 12.435275476860919, 8.2570494940406931, -3.3808435906687064, -4.7552502897093776, 4.5050634114776189, 10.672688962977514, 12.075918776794476, 1.7986308060137437, 4.1923629883751303, 11.752733569678064, -10.339474897439999, -16.186126637379726, -10.796197122972746, -9.214305404692233, 13.497270712719919, -9.4453197440185637, -15.69391834232802, 12.700707467329744, 4.7024717561391816, -10.327031105585643, 3.8477541445369963, -5.4896217736139521, 8.0519776507030638, 5.0341370218785944, 6.0456145072449026, -10.710449576292405, -8.6533964520637863, -12.257979327405108, -12.078971121036197, -10.881473761466781, 14.147239535310518, -2.6328735032346162, -15.716779182806999, -9.4242407781207191, 8.1426142269915331, 8.1611227842517025, -3.6252335542783207, -9.8025397455364676, 12.763568770750853, -9.5331346940178729, 4.9974585644427902, 5.9879812547323237, -6.2951737225996656, -3.9498007698755808, 10.122100576790197, 6.6618355586974447, 4.6997313218613739, 8.1707413233409465, 12.216703169693357, -12.426888921432578, -11.146002828849364, 6.3741370321379085, 7.6566213756894941, 2.2128160251661328, -5.4585144064775051, 11.139007406371906, -0.057747253315553991, -5.7619887506088023, 11.559333388163129, -7.7967134901859065, 1.5414474492709742, 10.25242202166922, -2.4376317695445988, 2.4485328874029482, -5.2527291639016829, 6.6966144242231938, 10.1056403723797, 9.6715660466767641, 12.199837902638398, -9.9779918730035462, 7.0398600566727509, 13.235714186918685, 6.2264247221125624, 0.49429650260801106, 11.011555724458017, -10.232864614422217, 1.0779763774514628, 2.3155686395401807, 13.340589994791694, -1.4927270737348184, -6.3253956772331872, 11.17892183418669, 4.6804642104000935, 9.9681133942788716, -15.354347685766472, 12.132973558045073, 16.863099386593074, -16.254027114251262, 8.9259599464113109, 4.4137266569998239, 13.238368561676072, 7.7024856954025447, -14.55028063381018, 2.9997759568600673, 5.9324435315675945, 8.9709392409618971, 9.9626050864742304, 6.0433161763769014, -11.094500816935717, 5.0773121433888173, 8.8653918721034444, 13.358789208346618, -3.3614825528284049, -13.508375784100188, -9.738962524121586, -6.8429863842661831, 9.3377608423949319, 9.1681044258536648, 2.6799203842673007, -8.1054023029408491, 3.7516032358089029, -8.7628704110935036, -11.00085544248971, -5.7755226059613731, -0.22395652308977335, -6.5936781093194714, -10.208015637116542, -13.848721312194234, 9.876782398829647, 9.437177021184711, 13.967144290195598, -1.5603470410313784, -12.959548633651529, -13.772706675904137, 9.4983989705496406, 4.8575506841930132, -13.426339798518415, -6.8882549582242767, 10.020963852018646, 10.738289970141997, -3.5322181002015958, 8.9790411088584392, -4.3462795772567171, 18.871182150839772, 6.1273012327332719, -6.5695645965276261, -8.2641966395439947, 0.85103670621664851, -16.902729440065183, 8.2697379486332849, -13.872113727992556, 13.619190901125434, -12.016737280921415, 1.639362596352592, 7.9267314843757219, 9.5913300412571747, -7.091648374422606, 5.8969231337131776, -6.4726579518981842, -4.3486881710817249, -9.3821085024104374, 10.917473221565318, 2.0279974118340656, 11.063658410060127, 6.9102623370057179, 6.2072533209374354, 11.520596314303049, -1.5151713191609242, -6.5680763433887153, 16.444160798635387, -5.3791474454897958, -2.2789027240044306, -11.56354929134242, 12.427791285408714, 8.610090315178283, -4.0511067764443416, 7.8692225359304206, -6.7079554414922891, 5.3999766490636549, -8.3179099730168247, 3.6976737002905016, -17.552301172297032, 6.1364424779438496, -9.7751306565781455, 6.1931141049267051, 16.865997593208082, 3.7361395596034965, 3.8267814056050402, 10.269712544637359, -12.797853578296257, -11.480255281563355, -10.876303582685193, -5.4324292010775084, -6.498689183845423, -3.8053637987749771, 13.525521072484571, -9.0129342094166027, 12.475202758118572, 0.35156955969912357, -13.374269540997016, -10.783210983288953, 10.807251662994091, -12.38126506382245, -5.8440304046740765, 6.1261248782561006, 10.426389918103478, -10.251207974472264, 5.7090742604182871, -7.3918232768010466, 14.40018609866692, 10.516336495878081, 5.0907717527746268, -10.790845519857502, -10.344691466108914, -0.81606960094075376, 5.8009330688061373, -6.4523871686156467, -13.804096639962156, -3.8036780326942807, 4.4403995451427036, -6.0454707691007998, -4.457208611267375, -9.3857200039694799, -4.2448642066932596, 11.390356801037848, -11.880538676942361, 16.20974462472968, -8.1065692722381755, 0.10605368805162664, -4.0113679201569177, -3.6764938206674111, 7.1589548870717845, -14.894945704589089, 19.416913935254374, 10.455230095243721, 19.094980784068856, 12.749384013660427, -10.507945794429656, -8.6068528180875727, 6.4779699897920597, -7.4688822584989687, 11.422119526982375, 12.683635758259111, 6.9141103733570297, -3.4807019716082186, -1.0659446865294615, -5.5303642351312705, -8.4756723068747828, 6.5495058918879581, 17.01132173619504, -8.6901951713633352, 0.73205096704640338, 12.18517096248061, 9.6207253649723565, -0.11293013857241167, 14.416380598864535, -3.4842485223978721, 8.538043021108594, 7.9853181927735468, -0.17854963422944989, 15.297082129948347, -8.6558345268403372, -8.8359118745350518, 6.8797931777949346, -13.579058234606006, 5.6056971276091021, -4.7325737401807606, -10.043277228766703, -8.496193000774646, 13.208604057890039, -2.6125003977921626, -9.0028742948434246, -8.3466406676435714, 4.0100931584168364, 8.607156558507457, -9.0376712732526396, 11.431914424287775, -0.65772909230851129, 9.5881935247089132, 14.183768387632979, 1.0198498160186804, 12.12574599778624, -8.8946934403733184, 17.588496278735882, -1.8672309187831959, -10.261023592868218, -10.98895162511046, -2.7839860694432046, 8.6202133936627021, -2.9996428552260639, 12.935041261170362, 10.751931118319499, 9.6367189688985686, 10.40091951562113, -9.8677128130479659, -0.85076949696133808, -8.7094472775564959, -2.7363773372569646, -10.036127502962517, -3.494015934190208, -4.2404950010667983, 4.590562970442905, -11.458041901958747, 9.3378179645353931, 12.328201773184455, 4.9840870074452948, 12.800873263637309, -12.800832354798168, -8.3806105857214561, -7.1573424713736697, -3.454056906476644, -10.568266292992009, -3.1957929098569293, -12.197503600264985, 14.897621213566064, 4.3558337641415363 +}; +const char H_256_768_22_detected_data[] = { +0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0 +}; diff --git a/libcodec2-android/src/codec2/src/H_256_768_22.h b/libcodec2-android/src/codec2/src/H_256_768_22.h new file mode 100644 index 0000000..a92ce5c --- /dev/null +++ b/libcodec2-android/src/codec2/src/H_256_768_22.h @@ -0,0 +1,19 @@ +/* + FILE....: H_256_768_22.h + + Static arrays for LDPC codec H_256_768_22, generated by ldpc_gen_c_h_file.m. +*/ + +#define H_256_768_22_NUMBERPARITYBITS 512 +#define H_256_768_22_MAX_ROW_WEIGHT 2 +#define H_256_768_22_CODELENGTH 768 +#define H_256_768_22_NUMBERROWSHCOLS 256 +#define H_256_768_22_MAX_COL_WEIGHT 4 +#define H_256_768_22_DEC_TYPE 0 +#define H_256_768_22_MAX_ITER 100 + +extern const uint16_t H_256_768_22_H_rows[]; +extern const uint16_t H_256_768_22_H_cols[]; +extern const float H_256_768_22_input[]; +extern const char H_256_768_22_detected_data[]; + diff --git a/libcodec2-android/src/codec2/src/_kiss_fft_guts.h b/libcodec2-android/src/codec2/src/_kiss_fft_guts.h new file mode 100644 index 0000000..1c62a34 --- /dev/null +++ b/libcodec2-android/src/codec2/src/_kiss_fft_guts.h @@ -0,0 +1,164 @@ +/* +Copyright (c) 2003-2010, Mark Borgerding + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + * Neither the author nor the names of any contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/* kiss_fft.h + defines kiss_fft_scalar as either short or a float type + and defines + typedef struct { kiss_fft_scalar r; kiss_fft_scalar i; }kiss_fft_cpx; */ +#include "kiss_fft.h" +#include + +#define MAXFACTORS 32 +/* e.g. an fft of length 128 has 4 factors + as far as kissfft is concerned + 4*4*4*2 + */ + +struct kiss_fft_state{ + int nfft; + int inverse; + int factors[2*MAXFACTORS]; + kiss_fft_cpx twiddles[1]; +}; + +/* + Explanation of macros dealing with complex math: + + C_MUL(m,a,b) : m = a*b + C_FIXDIV( c , div ) : if a fixed point impl., c /= div. noop otherwise + C_SUB( res, a,b) : res = a - b + C_SUBFROM( res , a) : res -= a + C_ADDTO( res , a) : res += a + * */ +#ifdef FIXED_POINT +#if (FIXED_POINT==32) +# define FRACBITS 31 +# define SAMPPROD int64_t +#define SAMP_MAX 2147483647 +#else +# define FRACBITS 15 +# define SAMPPROD int32_t +#define SAMP_MAX 32767 +#endif + +#define SAMP_MIN -SAMP_MAX + +#if defined(CHECK_OVERFLOW) +# define CHECK_OVERFLOW_OP(a,op,b) \ + if ( (SAMPPROD)(a) op (SAMPPROD)(b) > SAMP_MAX || (SAMPPROD)(a) op (SAMPPROD)(b) < SAMP_MIN ) { \ + fprintf(stderr,"WARNING:overflow @ " __FILE__ "(%d): (%d " #op" %d) = %ld\n",__LINE__,(a),(b),(SAMPPROD)(a) op (SAMPPROD)(b) ); } +#endif + + +# define smul(a,b) ( (SAMPPROD)(a)*(b) ) +# define sround( x ) (kiss_fft_scalar)( ( (x) + (1<<(FRACBITS-1)) ) >> FRACBITS ) + +# define S_MUL(a,b) sround( smul(a,b) ) + +# define C_MUL(m,a,b) \ + do{ (m).r = sround( smul((a).r,(b).r) - smul((a).i,(b).i) ); \ + (m).i = sround( smul((a).r,(b).i) + smul((a).i,(b).r) ); }while(0) + +# define DIVSCALAR(x,k) \ + (x) = sround( smul( x, SAMP_MAX/k ) ) + +# define C_FIXDIV(c,div) \ + do { DIVSCALAR( (c).r , div); \ + DIVSCALAR( (c).i , div); }while (0) + +# define C_MULBYSCALAR( c, s ) \ + do{ (c).r = sround( smul( (c).r , s ) ) ;\ + (c).i = sround( smul( (c).i , s ) ) ; }while(0) + +#else /* not FIXED_POINT*/ + +# define S_MUL(a,b) ( (a)*(b) ) +#define C_MUL(m,a,b) \ + do{ (m).r = (a).r*(b).r - (a).i*(b).i;\ + (m).i = (a).r*(b).i + (a).i*(b).r; }while(0) +# define C_FIXDIV(c,div) /* NOOP */ +# define C_MULBYSCALAR( c, s ) \ + do{ (c).r *= (s);\ + (c).i *= (s); }while(0) +#endif + +#ifndef CHECK_OVERFLOW_OP +# define CHECK_OVERFLOW_OP(a,op,b) /* noop */ +#endif + +#define C_ADD( res, a,b)\ + do { \ + CHECK_OVERFLOW_OP((a).r,+,(b).r)\ + CHECK_OVERFLOW_OP((a).i,+,(b).i)\ + (res).r=(a).r+(b).r; (res).i=(a).i+(b).i; \ + }while(0) +#define C_SUB( res, a,b)\ + do { \ + CHECK_OVERFLOW_OP((a).r,-,(b).r)\ + CHECK_OVERFLOW_OP((a).i,-,(b).i)\ + (res).r=(a).r-(b).r; (res).i=(a).i-(b).i; \ + }while(0) +#define C_ADDTO( res , a)\ + do { \ + CHECK_OVERFLOW_OP((res).r,+,(a).r)\ + CHECK_OVERFLOW_OP((res).i,+,(a).i)\ + (res).r += (a).r; (res).i += (a).i;\ + }while(0) + +#define C_SUBFROM( res , a)\ + do {\ + CHECK_OVERFLOW_OP((res).r,-,(a).r)\ + CHECK_OVERFLOW_OP((res).i,-,(a).i)\ + (res).r -= (a).r; (res).i -= (a).i; \ + }while(0) + + +#ifdef FIXED_POINT +# define KISS_FFT_COS(phase) floorf(.5+SAMP_MAX * cosf (phase)) +# define KISS_FFT_SIN(phase) floorf(.5+SAMP_MAX * sinf (phase)) +# define HALF_OF(x) ((x)>>1) +#elif defined(USE_SIMD) +# define KISS_FFT_COS(phase) _mm_set1_ps( cosf(phase) ) +# define KISS_FFT_SIN(phase) _mm_set1_ps( sinf(phase) ) +# define HALF_OF(x) ((x)*_mm_set1_ps(.5)) +#else +# define KISS_FFT_COS(phase) (kiss_fft_scalar) cosf(phase) +# define KISS_FFT_SIN(phase) (kiss_fft_scalar) sinf(phase) +# define HALF_OF(x) ((x)*.5) +#endif + +#define kf_cexp(x,phase) \ + do{ \ + (x)->r = KISS_FFT_COS(phase);\ + (x)->i = KISS_FFT_SIN(phase);\ + }while(0) + + +/* a debugging function */ +#define pcpx(c)\ + fprintf(stderr,"%g + %gi\n",(double)((c)->r),(double)((c)->i) ) + + +#ifdef KISS_FFT_USE_ALLOCA +// define this to allow use of alloca instead of malloc for temporary buffers +// Temporary buffers are used in two case: +// 1. FFT sizes that have "bad" factors. i.e. not 2,3 and 5 +// 2. "in-place" FFTs. Notice the quotes, since kissfft does not really do an in-place transform. +#include +#define KISS_FFT_TMP_ALLOC(nbytes) alloca(nbytes) +#define KISS_FFT_TMP_FREE(ptr) +#else +#define KISS_FFT_TMP_ALLOC(nbytes) KISS_FFT_MALLOC(nbytes) +#define KISS_FFT_TMP_FREE(ptr) KISS_FFT_FREE(ptr) +#endif diff --git a/libcodec2-android/src/codec2/src/bpf.h b/libcodec2-android/src/codec2/src/bpf.h new file mode 100644 index 0000000..0b0a6e2 --- /dev/null +++ b/libcodec2-android/src/codec2/src/bpf.h @@ -0,0 +1,106 @@ +#define BPF_N 101 + +float bpf[]={ + 0.002174, + 0.003245, + 0.002147, + 0.001866, + 0.002764, + 0.000567, + -0.001641, + -0.000565, + -0.002415, + -0.005837, + -0.003620, + -0.002828, + -0.006268, + -0.002787, + 0.001963, + -0.001234, + 0.001446, + 0.009200, + 0.005331, + 0.003521, + 0.011821, + 0.006951, + -0.002015, + 0.005137, + 0.001828, + -0.013390, + -0.007058, + -0.003273, + -0.020458, + -0.014321, + 0.001751, + -0.012891, + -0.009730, + 0.018993, + 0.008544, + 0.000534, + 0.035755, + 0.029074, + -0.001192, + 0.030852, + 0.030983, + -0.029834, + -0.009550, + 0.011945, + -0.081971, + -0.082875, + 0.000423, + -0.133526, + -0.211778, + 0.182628, + 0.514906, + 0.182628, + -0.211778, + -0.133526, + 0.000423, + -0.082875, + -0.081971, + 0.011945, + -0.009550, + -0.029834, + 0.030983, + 0.030852, + -0.001192, + 0.029074, + 0.035755, + 0.000534, + 0.008544, + 0.018993, + -0.009730, + -0.012891, + 0.001751, + -0.014321, + -0.020458, + -0.003273, + -0.007058, + -0.013390, + 0.001828, + 0.005137, + -0.002015, + 0.006951, + 0.011821, + 0.003521, + 0.005331, + 0.009200, + 0.001446, + -0.001234, + 0.001963, + -0.002787, + -0.006268, + -0.002828, + -0.003620, + -0.005837, + -0.002415, + -0.000565, + -0.001641, + 0.000567, + 0.002764, + 0.001866, + 0.002147, + 0.003245, + 0.002174 +}; + diff --git a/libcodec2-android/src/codec2/src/bpfb.h b/libcodec2-android/src/codec2/src/bpfb.h new file mode 100644 index 0000000..73b1a69 --- /dev/null +++ b/libcodec2-android/src/codec2/src/bpfb.h @@ -0,0 +1,105 @@ +#define BPFB_N 101 + +float bpfb[]={ + 0.003795, + 0.006827, + 0.002261, + 0.002523, + 0.005758, + -0.000264, + -0.000674, + 0.003113, + -0.004144, + -0.004923, + 0.000043, + -0.008017, + -0.008711, + -0.001802, + -0.010210, + -0.010428, + -0.000899, + -0.009413, + -0.009072, + 0.003469, + -0.005335, + -0.004828, + 0.010724, + 0.000941, + 0.000708, + 0.018957, + 0.007084, + 0.004825, + 0.025418, + 0.010147, + 0.004452, + 0.027434, + 0.007550, + -0.002861, + 0.023483, + -0.001944, + -0.018138, + 0.014122, + -0.017583, + -0.040768, + 0.002598, + -0.036604, + -0.069541, + -0.004273, + -0.054876, + -0.107289, + 0.010068, + -0.068052, + -0.200119, + 0.207287, + 0.597150, + 0.207287, + -0.200119, + -0.068052, + 0.010068, + -0.107289, + -0.054876, + -0.004273, + -0.069541, + -0.036604, + 0.002598, + -0.040768, + -0.017583, + 0.014122, + -0.018138, + -0.001944, + 0.023483, + -0.002861, + 0.007550, + 0.027434, + 0.004452, + 0.010147, + 0.025418, + 0.004825, + 0.007084, + 0.018957, + 0.000708, + 0.000941, + 0.010724, + -0.004828, + -0.005335, + 0.003469, + -0.009072, + -0.009413, + -0.000899, + -0.010428, + -0.010210, + -0.001802, + -0.008711, + -0.008017, + 0.000043, + -0.004923, + -0.004144, + 0.003113, + -0.000674, + -0.000264, + 0.005758, + 0.002523, + 0.002261, + 0.006827, + 0.003795 +}; \ No newline at end of file diff --git a/libcodec2-android/src/codec2/src/c2dec.c b/libcodec2-android/src/codec2/src/c2dec.c new file mode 100644 index 0000000..96a4405 --- /dev/null +++ b/libcodec2-android/src/codec2/src/c2dec.c @@ -0,0 +1,432 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: c2dec.c + AUTHOR......: David Rowe + DATE CREATED: 23/8/2010 + + Decodes a file of bits to a file of raw speech samples using codec2. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2010 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include "codec2.h" +#include "dump.h" +#include "c2file.h" + +#include +#include +#include +#include +#include +#include + +#define NONE 0 /* no bit errors */ +#define UNIFORM 1 /* random bit errors */ +#define TWO_STATE 2 /* Two state error model */ +#define UNIFORM_RANGE 3 /* random bit errors over a certain range */ + +void print_help(const struct option *long_options, int num_opts, char* argv[]); + +int main(int argc, char *argv[]) +{ + int mode=0; + void *codec2; + FILE *fin; + FILE *fout; + FILE *fber = NULL; + short *buf; + unsigned char *bits; + float *softdec_bits; + char *bitperchar_bits; + int nsam, nbit, nbyte, i, byte, frames, bits_proc, bit_errors, error_mode; + int nstart_bit, nend_bit, bit_rate; + int state, next_state; + float ber, r, burst_length, burst_period, burst_timer, ber_est; + unsigned char mask; + int natural, softdec, bit, ret, bitperchar; +#ifdef DUMP + int dump; +#endif + int report_energy; + FILE *f_ratek = NULL; + float *user_ratek; + int K; + + char* opt_string = "h:"; + struct option long_options[] = { + { "ber", required_argument, NULL, 0 }, + { "startbit", required_argument, NULL, 0 }, + { "endbit", required_argument, NULL, 0 }, + { "berfile", required_argument, NULL, 0 }, + { "natural", no_argument, &natural, 1 }, + { "softdec", no_argument, &softdec, 1 }, + { "bitperchar", no_argument, &bitperchar, 1 }, + #ifdef DUMP + { "dump", required_argument, &dump, 1 }, + #endif + { "energy", no_argument, NULL, 0 }, + { "mlfeat", required_argument, NULL, 0 }, + { "loadcb", required_argument, NULL, 0 }, + { "loadratek", required_argument, NULL, 0 }, + { "nopf", no_argument, NULL, 0 }, + { "help", no_argument, NULL, 'h' }, + { NULL, no_argument, NULL, 0 } + }; + int num_opts=sizeof(long_options)/sizeof(struct option); + + if (argc < 4) + print_help(long_options, num_opts, argv); + + if (strcmp(argv[2], "-") == 0) fin = stdin; + else if ( (fin = fopen(argv[2],"rb")) == NULL ) { + fprintf(stderr, "Error opening input bit file: %s: %s.\n", + argv[2], strerror(errno)); + exit(1); + } + + if (strcmp(argv[3], "-") == 0) fout = stdout; + else if ( (fout = fopen(argv[3],"wb")) == NULL ) { + fprintf(stderr, "Error opening output speech file: %s: %s.\n", + argv[3], strerror(errno)); + exit(1); + } + + // Attempt to detect a .c2 file with a header + struct c2_header in_hdr; + char *ext = strrchr(argv[2], '.'); + if ((ext != NULL) && (strcmp(ext, ".c2") == 0)) { + int nread = fread(&in_hdr,sizeof(in_hdr),1,fin); + assert (nread == 1); + + if (memcmp(in_hdr.magic, c2_file_magic, sizeof(c2_file_magic)) == 0) { + fprintf(stderr, "Detected Codec2 file version %d.%d in mode %d\n", + in_hdr.version_major, + in_hdr.version_minor, + in_hdr.mode); + + mode = in_hdr.mode; + } else { + fprintf(stderr, "Codec2 file specified but no header detected\n"); + // Rewind the input file so we can try to decode + // based on command line mode selection + fseek(fin,0,SEEK_SET); + } /* end if - magic detection */ + } else { + // If we got here, we need to honor the command line mode + if (strcmp(argv[1],"3200") == 0) + mode = CODEC2_MODE_3200; + else if (strcmp(argv[1],"2400") == 0) + mode = CODEC2_MODE_2400; + else if (strcmp(argv[1],"1600") == 0) + mode = CODEC2_MODE_1600; + else if (strcmp(argv[1],"1400") == 0) + mode = CODEC2_MODE_1400; + else if (strcmp(argv[1],"1300") == 0) + mode = CODEC2_MODE_1300; + else if (strcmp(argv[1],"1200") == 0) + mode = CODEC2_MODE_1200; + else if (strcmp(argv[1],"700C") == 0) + mode = CODEC2_MODE_700C; + else if (strcmp(argv[1],"450") == 0) + mode = CODEC2_MODE_450; + else if (strcmp(argv[1],"450PWB") == 0) + mode = CODEC2_MODE_450PWB; + else { + fprintf(stderr, "Error in mode: %s. Must be 3200, 2400, 1600, 1400, 1300, 1200, 700C, 450, or 450PWB\n", argv[1]); + exit(1); + } + bit_rate = atoi(argv[1]); + }; /* end if - extension / header detection */ + + error_mode = NONE; + ber = 0.0; + burst_length = burst_period = 0.0; + burst_timer = 0.0; + natural = softdec = bitperchar = 0; + report_energy = 0; +#ifdef DUMP + dump = 0; +#endif + + codec2 = codec2_create(mode); + assert(codec2 != NULL); + nsam = codec2_samples_per_frame(codec2); + nbit = codec2_bits_per_frame(codec2); + buf = (short*)malloc(nsam*sizeof(short)); + nbyte = (nbit + 7) / 8; + bits = (unsigned char*)malloc(nbyte*sizeof(char)); + softdec_bits = (float*)malloc(nbit*sizeof(float)); + bitperchar_bits = (char*)malloc(nbit*sizeof(char)); + frames = bit_errors = bits_proc = 0; + nstart_bit = 0; + nend_bit = nbit-1; + + while(1) { + int option_index = 0; + int opt = getopt_long(argc, argv, opt_string, + long_options, &option_index); + if (opt == -1) + break; + + switch (opt) { + case 0: + if(strcmp(long_options[option_index].name, "ber") == 0) { + ber = atof(optarg); + error_mode = UNIFORM; + } else if(strcmp(long_options[option_index].name, "startbit") == 0) { + nstart_bit = atoi(optarg); + } else if(strcmp(long_options[option_index].name, "endbit") == 0) { + nend_bit = atoi(optarg); + } else if(strcmp(long_options[option_index].name, "berfile") == 0) { + if ((fber = fopen(optarg,"wt")) == NULL) { + fprintf(stderr, "Error opening BER file: %s %s.\n", + optarg, strerror(errno)); + exit(1); + } + + } + #ifdef DUMP + else if(strcmp(long_options[option_index].name, "dump") == 0) { + if (dump) + dump_on(optarg); + } + #endif + else if (strcmp(long_options[option_index].name, "energy") == 0) { + report_energy = 1; + } + else if (strcmp(long_options[option_index].name, "loadcb") == 0) { + /* load VQ stage (700C only) */ + //fprintf(stderr, "%s\n", optarg+1); + codec2_load_codebook(codec2, atoi(optarg)-1, argv[optind]); + } + else if (strcmp(long_options[option_index].name, "loadratek") == 0) { + /* load rate K vectors (by passing quantisation) for 700C VQ tests */ + fprintf(stderr, "%s\n", optarg); + f_ratek = fopen(optarg, "rb"); + assert(f_ratek != NULL); + user_ratek = codec2_enable_user_ratek(codec2, &K); + } + else if (strcmp(long_options[option_index].name, "nopf") == 0) { + codec2_700c_post_filter(codec2, 0); + } + else if (strcmp(long_options[option_index].name, "mlfeat") == 0) { + /* dump machine learning features (700C only) */ + codec2_open_mlfeat(codec2, optarg, NULL); + } + break; + + case 'h': + print_help(long_options, num_opts, argv); + break; + + default: + /* This will never be reached */ + break; + } + } + assert(nend_bit <= nbit); + codec2_set_natural_or_gray(codec2, !natural); + //printf("%d %d\n", nstart_bit, nend_bit); + + //fprintf(stderr, "softdec: %d natural: %d\n", softdec, natural); + if (softdec) { + ret = (fread(softdec_bits, sizeof(float), nbit, fin) == (size_t)nbit); + } + if (bitperchar) { + ret = (fread(bitperchar_bits, sizeof(char), nbit, fin) == (size_t)nbit); + } + if (!softdec && !bitperchar) { + ret = (fread(bits, sizeof(char), nbyte, fin) == (size_t)nbyte); + } + + while(ret) { + frames++; + + // apply bit errors, MSB of byte 0 is bit 0 in frame, only works in packed mode + + if ((error_mode == UNIFORM) || (error_mode == UNIFORM_RANGE)) { + assert(softdec == 0); + for(i=nstart_bit; i (burst_period - burst_length)) + next_state = 1; + break; + + case 1: + + /* burst error state - 50% bit error rate */ + + for(i=nstart_bit; i burst_period) { + burst_timer = 0.0; + next_state = 0; + } + break; + + } + + state = next_state; + } + + if (fber != NULL) { + if (fread(&ber_est, sizeof(float), 1, fber) != 1) { + fprintf(stderr, "ran out of BER estimates!\n"); + exit(1); + } + //fprintf(stderr, "ber_est: %f\n", ber_est); + } + else + ber_est = 0.0; + + if (softdec) { + /* pack bits, MSB received first */ + + bit = 7; byte = 0; + memset(bits, 0, nbyte); + for(i=0; i. +*/ + +#include "codec2.h" +#include "sine.h" +#include "dump.h" + +#include +#include +#include +#include + +int main(int argc, char *argv[]) +{ + struct CODEC2 *codec2; + FILE *fin; + FILE *fout; + short *buf; + unsigned char *bits; + int nsam, nbit; + + if (argc != 3) { + printf("usage: %s InputRawSpeechFile OutputRawSpeechFile\n", argv[0]); + exit(1); + } + + if ( (fin = fopen(argv[1],"rb")) == NULL ) { + fprintf(stderr, "Error opening input speech file: %s: %s.\n", + argv[1], strerror(errno)); + exit(1); + } + + if ( (fout = fopen(argv[2],"wb")) == NULL ) { + fprintf(stderr, "Error opening output speech file: %s: %s.\n", + argv[2], strerror(errno)); + exit(1); + } + + #ifdef DUMP + dump_on("c2demo"); + #endif + + /* Note only one set of Codec 2 states is required for an encoder + and decoder pair. */ + + codec2 = codec2_create(CODEC2_MODE_1300); + nsam = codec2_samples_per_frame(codec2); + buf = (short*)malloc(nsam*sizeof(short)); + nbit = codec2_bits_per_frame(codec2); + bits = (unsigned char*)malloc(nbit*sizeof(char)); + + while(fread(buf, sizeof(short), nsam, fin) == (size_t)nsam) { + codec2_encode(codec2, bits, buf); + codec2_decode(codec2, buf, bits); + fwrite(buf, sizeof(short), nsam, fout); + } + + free(buf); + free(bits); + codec2_destroy(codec2); + + fclose(fin); + fclose(fout); + + return 0; +} diff --git a/libcodec2-android/src/codec2/src/c2enc.c b/libcodec2-android/src/codec2/src/c2enc.c new file mode 100644 index 0000000..435484a --- /dev/null +++ b/libcodec2-android/src/codec2/src/c2enc.c @@ -0,0 +1,202 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: c2enc.c + AUTHOR......: David Rowe + DATE CREATED: 23/8/2010 + + Encodes a file of raw speech samples using codec2 and outputs a file + of bits. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2010 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include "codec2.h" +#include "c2file.h" + +#include +#include +#include +#include +#include + +int main(int argc, char *argv[]) +{ + int mode; + void *codec2; + FILE *fin; + FILE *fout; + short *buf; + unsigned char *bits; + int nsam, nbit, nbyte, gray, softdec, bitperchar; + float *unpacked_bits_float; + char *unpacked_bits_char; + int bit, byte,i; + int report_var = 0; + int eq = 0; + + if (argc < 4) { + printf("usage: c2enc 3200|2400|1600|1400|1300|1200|700C|450|450PWB InputRawspeechFile OutputBitFile [--natural] [--softdec] [--bitperchar] [--mlfeat f32File modelFile] [--loadcb stageNum Filename] [--var] [--eq]\n"); + printf("e.g. (headerless) c2enc 1300 ../raw/hts1a.raw hts1a.bin\n"); + printf("e.g. (with header to detect mode) c2enc 1300 ../raw/hts1a.raw hts1a.c2\n"); + exit(1); + } + + if (strcmp(argv[1],"3200") == 0) + mode = CODEC2_MODE_3200; + else if (strcmp(argv[1],"2400") == 0) + mode = CODEC2_MODE_2400; + else if (strcmp(argv[1],"1600") == 0) + mode = CODEC2_MODE_1600; + else if (strcmp(argv[1],"1400") == 0) + mode = CODEC2_MODE_1400; + else if (strcmp(argv[1],"1300") == 0) + mode = CODEC2_MODE_1300; + else if (strcmp(argv[1],"1200") == 0) + mode = CODEC2_MODE_1200; + else if (strcmp(argv[1],"700C") == 0) + mode = CODEC2_MODE_700C; + else if (strcmp(argv[1],"450") == 0) + mode = CODEC2_MODE_450; + else if (strcmp(argv[1],"450PWB") == 0) + mode = CODEC2_MODE_450; + else { + fprintf(stderr, "Error in mode: %s. Must be 3200, 2400, 1600, 1400, 1300, 1200, 700C, 450, 450PWB or WB\n", argv[1]); + exit(1); + } + + if (strcmp(argv[2], "-") == 0) fin = stdin; + else if ( (fin = fopen(argv[2],"rb")) == NULL ) { + fprintf(stderr, "Error opening input speech file: %s: %s.\n", + argv[2], strerror(errno)); + exit(1); + } + + if (strcmp(argv[3], "-") == 0) fout = stdout; + else if ( (fout = fopen(argv[3],"wb")) == NULL ) { + fprintf(stderr, "Error opening output compressed bit file: %s: %s.\n", + argv[3], strerror(errno)); + exit(1); + } + + // Write a header if we're writing to a .c2 file + char *ext = strrchr(argv[3], '.'); + if (ext != NULL) { + if (strcmp(ext, ".c2") == 0) { + struct c2_header out_hdr; + memcpy(out_hdr.magic,c2_file_magic,sizeof(c2_file_magic)); + out_hdr.mode = mode; + out_hdr.version_major = CODEC2_VERSION_MAJOR; + out_hdr.version_minor = CODEC2_VERSION_MINOR; + // TODO: Handle flags (this block needs to be moved down) + out_hdr.flags = 0; + fwrite(&out_hdr,sizeof(out_hdr),1,fout); + }; + }; + + codec2 = codec2_create(mode); + nsam = codec2_samples_per_frame(codec2); + nbit = codec2_bits_per_frame(codec2); + buf = (short*)malloc(nsam*sizeof(short)); + nbyte = (nbit + 7) / 8; + + bits = (unsigned char*)malloc(nbyte*sizeof(char)); + unpacked_bits_float = (float*)malloc(nbit*sizeof(float)); + unpacked_bits_char = (char*)malloc(nbit*sizeof(char)); + + gray = 1; softdec = 0; bitperchar = 0; + for (i=4; i> bit) & 0x1); + unpacked_bits_char[i] = (bits[byte] >> bit) & 0x1; + bit--; + if (bit < 0) { + bit = 7; + byte++; + } + } + if (softdec) { + fwrite(unpacked_bits_float, sizeof(float), nbit, fout); + } + if (bitperchar) { + fwrite(unpacked_bits_char, sizeof(char), nbit, fout); + } + } + else + fwrite(bits, sizeof(char), nbyte, fout); + + // if this is in a pipeline, we probably don't want the usual + // buffering to occur + + if (fout == stdout) fflush(stdout); + if (fin == stdin) fflush(stdin); + } + + if (report_var) { + float var = codec2_get_var(codec2); + fprintf(stderr, "%s var: %5.2f std: %5.2f\n", argv[2], var, sqrt(var)); + } + codec2_destroy(codec2); + + free(buf); + free(bits); + free(unpacked_bits_float); + free(unpacked_bits_char); + fclose(fin); + fclose(fout); + + return 0; +} diff --git a/libcodec2-android/src/codec2/src/c2file.h b/libcodec2-android/src/codec2/src/c2file.h new file mode 100644 index 0000000..fccf95f --- /dev/null +++ b/libcodec2-android/src/codec2/src/c2file.h @@ -0,0 +1,19 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: c2file.h + AUTHOR......: Kevin Otte + DATE CREATED: 2017-08-01 + + Header structures for Codec2 file storage + +\*---------------------------------------------------------------------------*/ + +const char c2_file_magic[3] = {0xc0, 0xde, 0xc2}; + +struct c2_header { + char magic[3]; + char version_major; + char version_minor; + char mode; + char flags; +}; diff --git a/libcodec2-android/src/codec2/src/c2sim.c b/libcodec2-android/src/codec2/src/c2sim.c new file mode 100644 index 0000000..23c8d08 --- /dev/null +++ b/libcodec2-android/src/codec2/src/c2sim.c @@ -0,0 +1,1124 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: c2sim.c + AUTHOR......: David Rowe + DATE CREATED: 20/8/2010 + + Codec2 simulation. Combines encoder and decoder and allows + switching in and out various algorithms and quantisation steps. Used + for algorithm development. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2009 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "defines.h" +#include "sine.h" +#include "nlp.h" +#include "dump.h" +#include "lpc.h" +#include "lsp.h" +#include "quantise.h" +#include "phase.h" +#include "postfilter.h" +#include "interp.h" +#include "bpf.h" +#include "bpfb.h" +#include "newamp1.h" +#include "lpcnet_freq.h" + +void synth_one_frame(int n_samp, codec2_fftr_cfg fftr_inv_cfg, short buf[], MODEL *model, float Sn_[], float Pn[], int prede, float *de_mem, float gain); +void print_help(const struct option *long_options, int num_opts, char* argv[]); + +#define N_SAMP n_samp /* quick fix for run time sample rate selection */ + +/*---------------------------------------------------------------------------*\ + + MAIN + +\*---------------------------------------------------------------------------*/ + +int main(int argc, char *argv[]) +{ + + int Fs = 8000; + int set_fs; + + int lpc_model = 0, order = LPC_ORD; + int lsp = 0, lspd = 0, lspvq = 0; + int lspjvm = 0; + int prede = 0; + int postfilt; + int hand_voicing = 0, hi = 0, simlpcpf = 0, modelin=0, modelout=0; + int lpcpf = 0; + FILE *fvoicing = 0; + int dec; + int decimate = 1; + int amread, Woread, pahw; + int awread; + int hmread; + int phase0 = 0; + int scalar_quant_Wo_e = 0; + int scalar_quant_Wo_e_low = 0; + int vector_quant_Wo_e = 0; + int dump_pitch_e = 0; + float gain = 1.0; + int bpf_en = 0; + int bpfb_en = 0; + FILE *fam = NULL, *fWo = NULL; + FILE *faw = NULL; + FILE *fhm = NULL; + FILE *fjvm = NULL; + FILE *flspEWov = NULL; + FILE *ften_ms_centre = NULL; + FILE *fmodelout = NULL; + FILE *fmodelin = NULL; + #ifdef DUMP + int dump; + #endif + char out_file[MAX_STR]; + FILE *fout = NULL; /* output speech file */ + int rateK = 0, newamp1vq = 0, rate_K_dec = 0, perframe=0; + int bands = 0, bands_lower_en; + float bands_lower = -1E32; + int K = 20; + float framelength_s = N_S; + int lspEWov = 0, rateKWov = 0, first = 0; + FILE *frateKWov = NULL; + int ten_ms_centre = 0; + FILE *fphasenn = NULL; + FILE *frateK = NULL; int rateKout; + FILE *fbands = NULL; + + char* opt_string = "ho:"; + struct option long_options[] = { + { "Fs", required_argument, &set_fs, 1 }, + { "rateK", no_argument, &rateK, 1 }, + { "perframe", no_argument, &perframe, 1 }, + { "newamp1vq", no_argument, &newamp1vq, 1 }, + { "rateKdec", required_argument, &rate_K_dec, 1 }, + { "rateKout", required_argument, &rateKout, 1 }, + { "bands",required_argument, &bands, 1 }, + { "bands_lower",required_argument, &bands_lower_en, 1 }, + { "lpc", required_argument, &lpc_model, 1 }, + { "lsp", no_argument, &lsp, 1 }, + { "lspd", no_argument, &lspd, 1 }, + { "lspvq", no_argument, &lspvq, 1 }, + { "lspjvm", no_argument, &lspjvm, 1 }, + { "phase0", no_argument, &phase0, 1 }, + { "postfilter", no_argument, &postfilt, 1 }, + { "hand_voicing", required_argument, &hand_voicing, 1 }, + { "dec", required_argument, &dec, 1 }, + { "hi", no_argument, &hi, 1 }, + { "simlpcpf", no_argument, &simlpcpf, 1 }, + { "lpcpf", no_argument, &lpcpf, 1 }, + { "prede", no_argument, &prede, 1 }, + { "dump_pitch_e", required_argument, &dump_pitch_e, 1 }, + { "sq_pitch_e", no_argument, &scalar_quant_Wo_e, 1 }, + { "sq_pitch_e_low", no_argument, &scalar_quant_Wo_e_low, 1 }, + { "vq_pitch_e", no_argument, &vector_quant_Wo_e, 1 }, + { "rate", required_argument, NULL, 0 }, + { "gain", required_argument, NULL, 0 }, + { "bpf", no_argument, &bpf_en, 1 }, + { "bpfb", no_argument, &bpfb_en, 1 }, + { "amread", required_argument, &amread, 1 }, + { "hmread", required_argument, &hmread, 1 }, + { "awread", required_argument, &awread, 1 }, + { "Woread", required_argument, &Woread, 1 }, + { "pahw", required_argument, &pahw, 1 }, + { "lspEWov", required_argument, &lspEWov, 1 }, + { "rateKWov", required_argument, &rateKWov, 1 }, + { "first", no_argument, &first, 1 }, + { "ten_ms_centre", required_argument, &ten_ms_centre, 1 }, + { "framelength_s", required_argument, NULL, 0 }, + { "modelout", required_argument, &modelout, 1 }, + { "modelin", required_argument, &modelin, 1 }, + #ifdef DUMP + { "dump", required_argument, &dump, 1 }, + #endif + { "help", no_argument, NULL, 'h' }, + { NULL, no_argument, NULL, 0 } + }; + int num_opts=sizeof(long_options)/sizeof(struct option); + + /*----------------------------------------------------------------*\ + + Interpret Command Line Arguments + + \*----------------------------------------------------------------*/ + + if (argc < 2) { + print_help(long_options, num_opts, argv); + } + + while(1) { + int option_index = 0; + int opt = getopt_long(argc, argv, opt_string, + long_options, &option_index); + if (opt == -1) + break; + switch (opt) { + case 0: + if(strcmp(long_options[option_index].name, "Fs") == 0) { + Fs= atoi(optarg); + if((Fs != 8000) && (Fs != 16000)) { + fprintf(stderr, "Error Fs must be 8000 or 16000\n"); + exit(1); + } + } else if(strcmp(long_options[option_index].name, "lpc") == 0) { + order = atoi(optarg); + #ifdef DUMP + } else if(strcmp(long_options[option_index].name, "dump") == 0) { + if (dump) + dump_on(optarg); + #endif + } else if(strcmp(long_options[option_index].name, "lsp") == 0 + || strcmp(long_options[option_index].name, "lspd") == 0 + || strcmp(long_options[option_index].name, "lspvq") == 0) { + assert(order == LPC_ORD); + } else if(strcmp(long_options[option_index].name, "rateKdec") == 0) { + rate_K_dec = atoi(optarg); + fprintf(stderr, "rate_K_dec: %d\n", rate_K_dec); + } else if(strcmp(long_options[option_index].name, "rateKout") == 0) { + /* read model records from file or stdin */ + if ((frateK = fopen(optarg,"wb")) == NULL) { + fprintf(stderr, "Error opening rateK file: %s: %s\n", + optarg, strerror(errno)); + exit(1); + } + fprintf(stderr, "each record is %d bytes\n", (int)(K*sizeof(float))); + } else if(strcmp(long_options[option_index].name, "bands") == 0) { + /* write mel spaced band energies to file or stdout */ + if ((fbands = fopen(optarg,"wb")) == NULL) { + fprintf(stderr, "Error opening bands file: %s: %s\n", + optarg, strerror(errno)); + exit(1); + } + } else if(strcmp(long_options[option_index].name, "bands_lower") == 0) { + bands_lower = atof(optarg); + fprintf(stderr, "bands_lower: %f\n", bands_lower); + } else if(strcmp(long_options[option_index].name, "dec") == 0) { + + decimate = atoi(optarg); + if ((decimate != 2) && (decimate != 3) && (decimate != 4)) { + fprintf(stderr, "Error in --dec, must be 2, 3, or 4\n"); + exit(1); + } + + if (!phase0) { + fprintf(stderr, "needs --phase0 to resample phase when using --dec\n"); + exit(1); + } + if (!lpc_model) { + fprintf(stderr, "needs --lpc [order] to resample amplitudes when using --dec\n"); + exit(1); + } + + } else if(strcmp(long_options[option_index].name, "hand_voicing") == 0) { + if ((fvoicing = fopen(optarg,"rt")) == NULL) { + fprintf(stderr, "Error opening voicing file: %s: %s.\n", + optarg, strerror(errno)); + exit(1); + } + } else if(strcmp(long_options[option_index].name, "Woread") == 0) { + if ((fWo = fopen(optarg,"rb")) == NULL) { + fprintf(stderr, "Error opening float Wo file: %s: %s.\n", + optarg, strerror(errno)); + exit(1); + } + } else if(strcmp(long_options[option_index].name, "amread") == 0) { + if ((fam = fopen(optarg,"rb")) == NULL) { + fprintf(stderr, "Error opening float Am file: %s: %s.\n", + optarg, strerror(errno)); + exit(1); + } + } else if(strcmp(long_options[option_index].name, "hmread") == 0) { + if ((fhm = fopen(optarg,"rb")) == NULL) { + fprintf(stderr, "Error opening float Hm file: %s: %s.\n", + optarg, strerror(errno)); + exit(1); + } + } else if(strcmp(long_options[option_index].name, "awread") == 0) { + if ((faw = fopen(optarg,"rb")) == NULL) { + fprintf(stderr, "Error opening float Aw file: %s: %s.\n", + optarg, strerror(errno)); + exit(1); + } + } else if(strcmp(long_options[option_index].name, "dump_pitch_e") == 0) { + if ((fjvm = fopen(optarg,"wt")) == NULL) { + fprintf(stderr, "Error opening pitch & energy dump file: %s: %s.\n", + optarg, strerror(errno)); + exit(1); + } + } else if(strcmp(long_options[option_index].name, "gain") == 0) { + gain = atof(optarg); + } else if(strcmp(long_options[option_index].name, "framelength_s") == 0) { + framelength_s = atof(optarg); + } else if(strcmp(long_options[option_index].name, "pahw") == 0) { + + /* set up a bunch of arguments instead of having to enter them on cmd line every time */ + + phase0 = postfilt = amread = hmread = Woread = 1; + char file_name[MAX_STR]; + sprintf(file_name, "%s_am.out", optarg); + fprintf(stderr, "reading %s", file_name); + if ((fam = fopen(file_name,"rb")) == NULL) { + fprintf(stderr, "Error opening float Am file: %s: %s.\n", + file_name, strerror(errno)); + exit(1); + } + sprintf(file_name, "%s_hm.out", optarg); + fprintf(stderr, " %s", file_name); + if ((fhm = fopen(file_name,"rb")) == NULL) { + fprintf(stderr, "Error opening float Hm file: %s: %s.\n", + file_name, strerror(errno)); + exit(1); + } + sprintf(file_name, "%s_Wo.out", optarg); + fprintf(stderr, " %s\n", file_name); + if ((fWo = fopen(file_name,"rb")) == NULL) { + fprintf(stderr, "Error opening float Wo file: %s: %s.\n", + file_name, strerror(errno)); + exit(1); + } + } else if(strcmp(long_options[option_index].name, "lspEWov") == 0) { + /* feature file for deep learning experiments */ + lpc_model = 1; phase0 = 1; + if ((flspEWov = fopen(optarg,"wb")) == NULL) { + fprintf(stderr, "Error opening lspEWov float file: %s: %s\n", + optarg, strerror(errno)); + exit(1); + } + } else if(strcmp(long_options[option_index].name, "rateKWov") == 0) { + /* feature file for deep learning experiments */ + rateK = 1; newamp1vq = 1; + if ((frateKWov = fopen(optarg,"wb")) == NULL) { + fprintf(stderr, "Error opening rateKWov float file: %s: %s\n", + optarg, strerror(errno)); + exit(1); + } + } else if(strcmp(long_options[option_index].name, "ten_ms_centre") == 0) { + /* dump 10ms of audio centred on analysis frame to check time alignment with + 16 kHz source audio */ + ten_ms_centre = 1; + if ((ften_ms_centre = fopen(optarg,"wb")) == NULL) { + fprintf(stderr, "Error opening ten_ms_centre short file: %s: %s\n", + optarg, strerror(errno)); + exit(1); + } + } else if(strcmp(long_options[option_index].name, "modelout") == 0) { + /* write model records to file or stdout */ + modelout = 1; + if (strcmp(optarg, "-") == 0) fmodelout = stdout; + else if ((fmodelout = fopen(optarg,"wb")) == NULL) { + fprintf(stderr, "Error opening modelout file: %s: %s\n", + optarg, strerror(errno)); + exit(1); + } + fprintf(stderr, "each model record is %d bytes\n", (int)sizeof(MODEL)); + } else if(strcmp(long_options[option_index].name, "modelin") == 0) { + /* read model records from file or stdin */ + modelin = 1; + if (strcmp(optarg, "-") == 0) fmodelin = stdin; + else if ((fmodelin = fopen(optarg,"rb")) == NULL) { + fprintf(stderr, "Error opening modelin file: %s: %s\n", + optarg, strerror(errno)); + exit(1); + } + fprintf(stderr, "each model record is %d bytes\n", (int)sizeof(MODEL)); + } else if(strcmp(long_options[option_index].name, "rate") == 0) { + if(strcmp(optarg,"3200") == 0) { + lpc_model = 1; + scalar_quant_Wo_e = 1; + lspd = 1; + phase0 = 1; + postfilt = 1; + decimate = 1; + lpcpf = 1; + } else if(strcmp(optarg,"2400") == 0) { + lpc_model = 1; + vector_quant_Wo_e = 1; + lsp = 1; + phase0 = 1; + postfilt = 1; + decimate = 2; + lpcpf = 1; + } else if(strcmp(optarg,"1400") == 0) { + lpc_model = 1; + vector_quant_Wo_e = 1; + lsp = 1; + phase0 = 1; + postfilt = 1; + decimate = 4; + lpcpf = 1; + } else if(strcmp(optarg,"1300") == 0) { + lpc_model = 1; + scalar_quant_Wo_e = 1; + lsp = 1; + phase0 = 1; + postfilt = 1; + decimate = 4; + lpcpf = 1; + } else if(strcmp(optarg,"1200") == 0) { + lpc_model = 1; + scalar_quant_Wo_e = 1; + lspjvm = 1; + phase0 = 1; + postfilt = 1; + decimate = 4; + lpcpf = 1; + } else { + fprintf(stderr, "Error: invalid output rate (3200|2400|1400|1200) %s\n", optarg); + exit(1); + } + } + break; + + case 'h': + print_help(long_options, num_opts, argv); + break; + + case 'o': + if (strcmp(optarg, "-") == 0) fout = stdout; + else if ((fout = fopen(optarg,"wb")) == NULL) { + fprintf(stderr, "Error opening output speech file: %s: %s.\n", + optarg, strerror(errno)); + exit(1); + } + strcpy(out_file,optarg); + break; + + default: + /* This will never be reached */ + break; + } + } + + /* Input file */ + + FILE *fin; /* input speech file */ + if (strcmp(argv[optind], "-") == 0) fin = stdin; + else if ((fin = fopen(argv[optind],"rb")) == NULL) { + fprintf(stderr, "Error opening input speech file: %s: %s.\n", + argv[optind], strerror(errno)); + exit(1); + } + + C2CONST c2const = c2const_create(Fs, framelength_s); + int n_samp = c2const.n_samp; + int m_pitch = c2const.m_pitch; + + short buf[N_SAMP]; /* input/output buffer */ + float buf_float[N_SAMP]; + float Sn[m_pitch]; /* float input speech samples */ + float Sn_pre[m_pitch]; /* pre-emphasised input speech samples */ + COMP Sw[FFT_ENC]; /* DFT of Sn[] */ + codec2_fft_cfg fft_fwd_cfg; + codec2_fftr_cfg fftr_fwd_cfg; + codec2_fftr_cfg fftr_inv_cfg; + float w[m_pitch]; /* time domain hamming window */ + float W[FFT_ENC]; /* DFT of w[] */ + MODEL model; + float Pn[2*N_SAMP]; /* trapezoidal synthesis window */ + float Sn_[2*N_SAMP]; /* synthesised speech */ + int i,m; /* loop variable */ + int frames; + float prev_f0; + float pitch; + float snr; + float sum_snr; + + float pre_mem = 0.0, de_mem = 0.0; + float ak[1+order]; + // COMP Sw_[FFT_ENC]; + // COMP Ew[FFT_ENC]; + + float ex_phase[MAX_AMP+1]; + + float bg_est = 0.0; + + + MODEL prev_model; + float lsps[order]; + float e, prev_e; + int lsp_indexes[order]; + float lsps_[order]; + float Woe_[2]; + + float lsps_dec[4][order], e_dec[4], weight, weight_inc, ak_dec[4][order]; + MODEL model_dec[4], prev_model_dec; + float prev_lsps_dec[order], prev_e_dec; + + void *nlp_states; + float hpf_states[2]; + #if 0 + struct PEXP *pexp = NULL; + struct AEXP *aexp = NULL; + #endif + float bpf_buf[BPF_N+N_SAMP]; + + COMP Aw[FFT_ENC]; + COMP H[MAX_AMP]; + + + for(i=0; i bands_lower) + assert(fwrite(bandE, sizeof(float), nbands, fbands) == nbands); + } + + /*------------------------------------------------------------*\ + + Optional newamp1 simulation, as used in 700C + + \*------------------------------------------------------------*/ + + if (rateK) { + float rate_K_vec[K]; + resample_const_rate_f(&c2const, &model, rate_K_vec, rate_K_sample_freqs_kHz, K); + + if (frateK != NULL) + assert(fwrite(rate_K_vec, sizeof(float), K, frateK) == K); + + float rate_K_vec_[K]; + if (newamp1vq) { + /* remove mean */ + float sum = 0.0; + for(int k=0; k bands_lower) + fwrite(&model_dec[i],sizeof(MODEL),1,fmodelout); + } + else + fwrite(&model_dec[i],sizeof(MODEL),1,fmodelout); + } + } + + /* update memories for next frame ----------------------------*/ + + prev_model_dec = model_dec[decimate-1]; + prev_e_dec = e_dec[decimate-1]; + for(i=0; i 32767.0) + buf[i] = 32767; + else if (Sn_[i] < -32767.0) + buf[i] = -32767; + else + buf[i] = Sn_[i]; + } + +} + +void print_help(const struct option* long_options, int num_opts, char* argv[]) +{ + int i; + char *option_parameters; + + fprintf(stderr, "\nCodec2 - low bit rate speech codec - Simulation Program\n" + "\thttp://rowetel.com/codec2.html\n\n" + "usage: %s [OPTIONS] \n\n" + "Options:\n" + "\t-o \n", argv[0]); + for(i=0; i. +*/ + +#include +#include +#include +#include +#include +#include + +#include "defines.h" +#include "codec2_fft.h" +#include "sine.h" +#include "nlp.h" +#include "dump.h" +#include "lpc.h" +#include "quantise.h" +#include "phase.h" +#include "interp.h" +#include "postfilter.h" +#include "codec2.h" +#include "lsp.h" +#include "newamp2.h" +#include "codec2_internal.h" +#include "machdep.h" +#include "bpf.h" +#include "bpfb.h" +#include "c2wideband.h" + +#include "debug_alloc.h" + +/*---------------------------------------------------------------------------* \ + + FUNCTION HEADERS + +\*---------------------------------------------------------------------------*/ + +void analyse_one_frame(struct CODEC2 *c2, MODEL *model, short speech[]); +void synthesise_one_frame(struct CODEC2 *c2, short speech[], MODEL *model, + COMP Aw[], float gain); +void codec2_encode_3200(struct CODEC2 *c2, unsigned char * bits, short speech[]); +void codec2_decode_3200(struct CODEC2 *c2, short speech[], const unsigned char * bits); +void codec2_encode_2400(struct CODEC2 *c2, unsigned char * bits, short speech[]); +void codec2_decode_2400(struct CODEC2 *c2, short speech[], const unsigned char * bits); +void codec2_encode_1600(struct CODEC2 *c2, unsigned char * bits, short speech[]); +void codec2_decode_1600(struct CODEC2 *c2, short speech[], const unsigned char * bits); +void codec2_encode_1400(struct CODEC2 *c2, unsigned char * bits, short speech[]); +void codec2_decode_1400(struct CODEC2 *c2, short speech[], const unsigned char * bits); +void codec2_encode_1300(struct CODEC2 *c2, unsigned char * bits, short speech[]); +void codec2_decode_1300(struct CODEC2 *c2, short speech[], const unsigned char * bits, float ber_est); +void codec2_encode_1200(struct CODEC2 *c2, unsigned char * bits, short speech[]); +void codec2_decode_1200(struct CODEC2 *c2, short speech[], const unsigned char * bits); +void codec2_encode_700c(struct CODEC2 *c2, unsigned char * bits, short speech[]); +void codec2_decode_700c(struct CODEC2 *c2, short speech[], const unsigned char * bits); +void codec2_encode_450(struct CODEC2 *c2, unsigned char * bits, short speech[]); +void codec2_decode_450(struct CODEC2 *c2, short speech[], const unsigned char * bits); +void codec2_decode_450pwb(struct CODEC2 *c2, short speech[], const unsigned char * bits); +static void ear_protection(float in_out[], int n); + + + +/*---------------------------------------------------------------------------*\ + + FUNCTIONS + +\*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: codec2_create + AUTHOR......: David Rowe + DATE CREATED: 21/8/2010 + + Create and initialise an instance of the codec. Returns a pointer + to the codec states or NULL on failure. One set of states is + sufficient for a full duuplex codec (i.e. an encoder and decoder). + You don't need separate states for encoders and decoders. See + c2enc.c and c2dec.c for examples. + +\*---------------------------------------------------------------------------*/ + + +//Don't create CODEC2_MODE_450PWB for Encoding as it has undefined behavior ! +struct CODEC2 * codec2_create(int mode) +{ + struct CODEC2 *c2; + int i,l; + + // ALL POSSIBLE MODES MUST BE CHECKED HERE! + // we test if the desired mode is enabled at compile time + // and return NULL if not + + if (false == ( CODEC2_MODE_ACTIVE(CODEC2_MODE_3200, mode) + || CODEC2_MODE_ACTIVE(CODEC2_MODE_2400, mode) + || CODEC2_MODE_ACTIVE(CODEC2_MODE_1600, mode) + || CODEC2_MODE_ACTIVE(CODEC2_MODE_1400, mode) + || CODEC2_MODE_ACTIVE(CODEC2_MODE_1300, mode) + || CODEC2_MODE_ACTIVE(CODEC2_MODE_1200, mode) + || CODEC2_MODE_ACTIVE(CODEC2_MODE_700C, mode) + || CODEC2_MODE_ACTIVE(CODEC2_MODE_450, mode) + || CODEC2_MODE_ACTIVE(CODEC2_MODE_450PWB, mode) + ) ) + { + return NULL; + } + + c2 = (struct CODEC2*)MALLOC(sizeof(struct CODEC2)); + if (c2 == NULL) + return NULL; + + c2->mode = mode; + + /* store constants in a few places for convenience */ + + if (CODEC2_MODE_ACTIVE(CODEC2_MODE_450PWB, mode) == 0) { + c2->c2const = c2const_create(8000, N_S); + }else{ + c2->c2const = c2const_create(16000, N_S); + } + c2->Fs = c2->c2const.Fs; + int n_samp = c2->n_samp = c2->c2const.n_samp; + int m_pitch = c2->m_pitch = c2->c2const.m_pitch; + + c2->Pn = (float*)MALLOC(2*n_samp*sizeof(float)); + if (c2->Pn == NULL) { + return NULL; + } + c2->Sn_ = (float*)MALLOC(2*n_samp*sizeof(float)); + if (c2->Sn_ == NULL) { + FREE(c2->Pn); + return NULL; + } + c2->w = (float*)MALLOC(m_pitch*sizeof(float)); + if (c2->w == NULL) { + FREE(c2->Pn); + FREE(c2->Sn_); + return NULL; + } + c2->Sn = (float*)MALLOC(m_pitch*sizeof(float)); + if (c2->Sn == NULL) { + FREE(c2->Pn); + FREE(c2->Sn_); + FREE(c2->w); + return NULL; + } + + for(i=0; iSn[i] = 1.0; + c2->hpf_states[0] = c2->hpf_states[1] = 0.0; + for(i=0; i<2*n_samp; i++) + c2->Sn_[i] = 0; + c2->fft_fwd_cfg = codec2_fft_alloc(FFT_ENC, 0, NULL, NULL); + c2->fftr_fwd_cfg = codec2_fftr_alloc(FFT_ENC, 0, NULL, NULL); + make_analysis_window(&c2->c2const, c2->fft_fwd_cfg, c2->w,c2->W); + make_synthesis_window(&c2->c2const, c2->Pn); + c2->fftr_inv_cfg = codec2_fftr_alloc(FFT_DEC, 1, NULL, NULL); + quantise_init(); + c2->prev_f0_enc = 1/P_MAX_S; + c2->bg_est = 0.0; + c2->ex_phase = 0.0; + + for(l=1; l<=MAX_AMP; l++) + c2->prev_model_dec.A[l] = 0.0; + c2->prev_model_dec.Wo = TWO_PI/c2->c2const.p_max; + c2->prev_model_dec.L = PI/c2->prev_model_dec.Wo; + c2->prev_model_dec.voiced = 0; + + for(i=0; iprev_lsps_dec[i] = i*PI/(LPC_ORD+1); + } + c2->prev_e_dec = 1; + + c2->nlp = nlp_create(&c2->c2const); + if (c2->nlp == NULL) { + return NULL; + } + + c2->lpc_pf = 1; c2->bass_boost = 1; c2->beta = LPCPF_BETA; c2->gamma = LPCPF_GAMMA; + + c2->xq_enc[0] = c2->xq_enc[1] = 0.0; + c2->xq_dec[0] = c2->xq_dec[1] = 0.0; + + c2->smoothing = 0; + c2->se = 0.0; c2->nse = 0; + c2->user_rate_K_vec_no_mean_ = NULL; + c2->post_filter_en = 1; + + c2->bpf_buf = (float*)MALLOC(sizeof(float)*(BPF_N+4*c2->n_samp)); + assert(c2->bpf_buf != NULL); + for(i=0; in_samp; i++) + c2->bpf_buf[i] = 0.0; + + c2->softdec = NULL; + c2->gray = 1; + + /* newamp1 initialisation */ + + if ( CODEC2_MODE_ACTIVE(CODEC2_MODE_700C, c2->mode)) { + mel_sample_freqs_kHz(c2->rate_K_sample_freqs_kHz, NEWAMP1_K, ftomel(200.0), ftomel(3700.0) ); + int k; + for(k=0; kprev_rate_K_vec_[k] = 0.0; + c2->eq[k] = 0.0; + } + c2->eq_en = 0; + c2->Wo_left = 0.0; + c2->voicing_left = 0;; + c2->phase_fft_fwd_cfg = codec2_fft_alloc(NEWAMP1_PHASE_NFFT, 0, NULL, NULL); + c2->phase_fft_inv_cfg = codec2_fft_alloc(NEWAMP1_PHASE_NFFT, 1, NULL, NULL); + } + + /* newamp2 initialisation */ + + if ( CODEC2_MODE_ACTIVE(CODEC2_MODE_450, c2->mode)) { + n2_mel_sample_freqs_kHz(c2->n2_rate_K_sample_freqs_kHz, NEWAMP2_K); + int k; + for(k=0; kn2_prev_rate_K_vec_[k] = 0.0; + } + c2->Wo_left = 0.0; + c2->voicing_left = 0;; + c2->phase_fft_fwd_cfg = codec2_fft_alloc(NEWAMP2_PHASE_NFFT, 0, NULL, NULL); + c2->phase_fft_inv_cfg = codec2_fft_alloc(NEWAMP2_PHASE_NFFT, 1, NULL, NULL); + } + /* newamp2 PWB initialisation */ + + if ( CODEC2_MODE_ACTIVE(CODEC2_MODE_450PWB, c2->mode)) { + n2_mel_sample_freqs_kHz(c2->n2_pwb_rate_K_sample_freqs_kHz, NEWAMP2_16K_K); + int k; + for(k=0; kn2_pwb_prev_rate_K_vec_[k] = 0.0; + } + c2->Wo_left = 0.0; + c2->voicing_left = 0;; + c2->phase_fft_fwd_cfg = codec2_fft_alloc(NEWAMP2_PHASE_NFFT, 0, NULL, NULL); + c2->phase_fft_inv_cfg = codec2_fft_alloc(NEWAMP2_PHASE_NFFT, 1, NULL, NULL); + } + + c2->fmlfeat = NULL; c2->fmlmodel = NULL; + + // make sure that one of the two decode function pointers is empty + // for the encode function pointer this is not required since we always set it + // to a meaningful value + + c2->decode = NULL; + c2->decode_ber = NULL; + + if ( CODEC2_MODE_ACTIVE(CODEC2_MODE_3200, c2->mode)) + { + c2->encode = codec2_encode_3200; + c2->decode = codec2_decode_3200; + } + + if ( CODEC2_MODE_ACTIVE(CODEC2_MODE_2400, c2->mode)) + { + c2->encode = codec2_encode_2400; + c2->decode = codec2_decode_2400; + } + + if ( CODEC2_MODE_ACTIVE(CODEC2_MODE_1600, c2->mode)) + { + c2->encode = codec2_encode_1600; + c2->decode = codec2_decode_1600; + } + + if ( CODEC2_MODE_ACTIVE(CODEC2_MODE_1400, c2->mode)) + { + c2->encode = codec2_encode_1400; + c2->decode = codec2_decode_1400; + } + + if ( CODEC2_MODE_ACTIVE(CODEC2_MODE_1300, c2->mode)) + { + c2->encode = codec2_encode_1300; + c2->decode_ber = codec2_decode_1300; + } + + if ( CODEC2_MODE_ACTIVE(CODEC2_MODE_1200, c2->mode)) + { + c2->encode = codec2_encode_1200; + c2->decode = codec2_decode_1200; + } + + if ( CODEC2_MODE_ACTIVE(CODEC2_MODE_700C, c2->mode)) + { + c2->encode = codec2_encode_700c; + c2->decode = codec2_decode_700c; + } + + if ( CODEC2_MODE_ACTIVE(CODEC2_MODE_450, c2->mode)) + { + c2->encode = codec2_encode_450; + c2->decode = codec2_decode_450; + } + + if ( CODEC2_MODE_ACTIVE(CODEC2_MODE_450PWB, c2->mode)) + { + //Encode PWB doesnt make sense + c2->encode = codec2_encode_450; + c2->decode = codec2_decode_450pwb; + } + + + return c2; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: codec2_destroy + AUTHOR......: David Rowe + DATE CREATED: 21/8/2010 + + Destroy an instance of the codec. + +\*---------------------------------------------------------------------------*/ + +void codec2_destroy(struct CODEC2 *c2) +{ + assert(c2 != NULL); + FREE(c2->bpf_buf); + nlp_destroy(c2->nlp); + codec2_fft_free(c2->fft_fwd_cfg); + codec2_fftr_free(c2->fftr_fwd_cfg); + codec2_fftr_free(c2->fftr_inv_cfg); + if ( CODEC2_MODE_ACTIVE(CODEC2_MODE_700C, c2->mode)) { + codec2_fft_free(c2->phase_fft_fwd_cfg); + codec2_fft_free(c2->phase_fft_inv_cfg); + } + if ( CODEC2_MODE_ACTIVE(CODEC2_MODE_450, c2->mode)) { + codec2_fft_free(c2->phase_fft_fwd_cfg); + codec2_fft_free(c2->phase_fft_inv_cfg); + } + if ( CODEC2_MODE_ACTIVE(CODEC2_MODE_450PWB, c2->mode)) { + codec2_fft_free(c2->phase_fft_fwd_cfg); + codec2_fft_free(c2->phase_fft_inv_cfg); + } + FREE(c2->Pn); + FREE(c2->Sn); + FREE(c2->w); + FREE(c2->Sn_); + FREE(c2); +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: codec2_bits_per_frame + AUTHOR......: David Rowe + DATE CREATED: Nov 14 2011 + + Returns the number of bits per frame. + +\*---------------------------------------------------------------------------*/ + +int codec2_bits_per_frame(struct CODEC2 *c2) { + if ( CODEC2_MODE_ACTIVE(CODEC2_MODE_3200, c2->mode)) + return 64; + if ( CODEC2_MODE_ACTIVE(CODEC2_MODE_2400, c2->mode)) + return 48; + if ( CODEC2_MODE_ACTIVE(CODEC2_MODE_1600, c2->mode)) + return 64; + if ( CODEC2_MODE_ACTIVE(CODEC2_MODE_1400, c2->mode)) + return 56; + if ( CODEC2_MODE_ACTIVE(CODEC2_MODE_1300, c2->mode)) + return 52; + if ( CODEC2_MODE_ACTIVE(CODEC2_MODE_1200, c2->mode)) + return 48; + if ( CODEC2_MODE_ACTIVE(CODEC2_MODE_700C, c2->mode)) + return 28; + if ( CODEC2_MODE_ACTIVE(CODEC2_MODE_450, c2->mode)) + return 18; + if ( CODEC2_MODE_ACTIVE(CODEC2_MODE_450PWB, c2->mode)) + return 18; + + return 0; /* shouldn't get here */ +} + + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: codec2_samples_per_frame + AUTHOR......: David Rowe + DATE CREATED: Nov 14 2011 + + Returns the number of speech samples per frame. + +\*---------------------------------------------------------------------------*/ + +int codec2_samples_per_frame(struct CODEC2 *c2) { + if ( CODEC2_MODE_ACTIVE(CODEC2_MODE_3200, c2->mode)) + return 160; + if ( CODEC2_MODE_ACTIVE(CODEC2_MODE_2400, c2->mode)) + return 160; + if ( CODEC2_MODE_ACTIVE(CODEC2_MODE_1600, c2->mode)) + return 320; + if ( CODEC2_MODE_ACTIVE(CODEC2_MODE_1400, c2->mode)) + return 320; + if ( CODEC2_MODE_ACTIVE(CODEC2_MODE_1300, c2->mode)) + return 320; + if ( CODEC2_MODE_ACTIVE(CODEC2_MODE_1200, c2->mode)) + return 320; + if ( CODEC2_MODE_ACTIVE(CODEC2_MODE_700C, c2->mode)) + return 320; + if ( CODEC2_MODE_ACTIVE(CODEC2_MODE_450, c2->mode)) + return 320; + if ( CODEC2_MODE_ACTIVE(CODEC2_MODE_450PWB, c2->mode)) + return 640; + return 0; /* shouldnt get here */ +} + +void codec2_encode(struct CODEC2 *c2, unsigned char *bits, short speech[]) +{ + assert(c2 != NULL); + assert(c2->encode != NULL); + + c2->encode(c2, bits, speech); + +} + +void codec2_decode(struct CODEC2 *c2, short speech[], const unsigned char *bits) +{ + codec2_decode_ber(c2, speech, bits, 0.0); +} + +void codec2_decode_ber(struct CODEC2 *c2, short speech[], const unsigned char *bits, float ber_est) +{ + assert(c2 != NULL); + assert(c2->decode != NULL || c2->decode_ber != NULL); + + if (c2->decode != NULL) + { + c2->decode(c2, speech, bits); + } + else + { + c2->decode_ber(c2, speech, bits, ber_est); + } +} + + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: codec2_encode_3200 + AUTHOR......: David Rowe + DATE CREATED: 13 Sep 2012 + + Encodes 160 speech samples (20ms of speech) into 64 bits. + + The codec2 algorithm actually operates internally on 10ms (80 + sample) frames, so we run the encoding algorithm twice. On the + first frame we just send the voicing bits. On the second frame we + send all model parameters. Compared to 2400 we use a larger number + of bits for the LSPs and non-VQ pitch and energy. + + The bit allocation is: + + Parameter bits/frame + -------------------------------------- + Harmonic magnitudes (LSPs) 50 + Pitch (Wo) 7 + Energy 5 + Voicing (10ms update) 2 + TOTAL 64 + +\*---------------------------------------------------------------------------*/ + +void codec2_encode_3200(struct CODEC2 *c2, unsigned char * bits, short speech[]) +{ + MODEL model; + float ak[LPC_ORD+1]; + float lsps[LPC_ORD]; + float e; + int Wo_index, e_index; + int lspd_indexes[LPC_ORD]; + int i; + unsigned int nbit = 0; + + assert(c2 != NULL); + + memset(bits, '\0', ((codec2_bits_per_frame(c2) + 7) / 8)); + + /* first 10ms analysis frame - we just want voicing */ + + analyse_one_frame(c2, &model, speech); + pack(bits, &nbit, model.voiced, 1); + + /* second 10ms analysis frame */ + + analyse_one_frame(c2, &model, &speech[c2->n_samp]); + pack(bits, &nbit, model.voiced, 1); + Wo_index = encode_Wo(&c2->c2const, model.Wo, WO_BITS); + pack(bits, &nbit, Wo_index, WO_BITS); + + e = speech_to_uq_lsps(lsps, ak, c2->Sn, c2->w, c2->m_pitch, LPC_ORD); + e_index = encode_energy(e, E_BITS); + pack(bits, &nbit, e_index, E_BITS); + + encode_lspds_scalar(lspd_indexes, lsps, LPC_ORD); + for(i=0; ic2const, Wo_index, WO_BITS); + model[1].L = PI/model[1].Wo; + + e_index = unpack(bits, &nbit, E_BITS); + e[1] = decode_energy(e_index, E_BITS); + + for(i=0; iprev_model_dec, &model[1], c2->c2const.Wo_min); + e[0] = interp_energy(c2->prev_e_dec, e[1]); + + /* LSPs are sampled every 20ms so we interpolate the frame in + between, then recover spectral amplitudes */ + + interpolate_lsp_ver2(&lsps[0][0], c2->prev_lsps_dec, &lsps[1][0], 0.5, LPC_ORD); + + for(i=0; i<2; i++) { + lsp_to_lpc(&lsps[i][0], &ak[i][0], LPC_ORD); + aks_to_M2(c2->fftr_fwd_cfg, &ak[i][0], LPC_ORD, &model[i], e[i], &snr, 0, 0, + c2->lpc_pf, c2->bass_boost, c2->beta, c2->gamma, Aw); + apply_lpc_correction(&model[i]); + synthesise_one_frame(c2, &speech[c2->n_samp*i], &model[i], Aw, 1.0); + } + + /* update memories for next frame ----------------------------*/ + + c2->prev_model_dec = model[1]; + c2->prev_e_dec = e[1]; + for(i=0; iprev_lsps_dec[i] = lsps[1][i]; +} + + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: codec2_encode_2400 + AUTHOR......: David Rowe + DATE CREATED: 21/8/2010 + + Encodes 160 speech samples (20ms of speech) into 48 bits. + + The codec2 algorithm actually operates internally on 10ms (80 + sample) frames, so we run the encoding algorithm twice. On the + first frame we just send the voicing bit. On the second frame we + send all model parameters. + + The bit allocation is: + + Parameter bits/frame + -------------------------------------- + Harmonic magnitudes (LSPs) 36 + Joint VQ of Energy and Wo 8 + Voicing (10ms update) 2 + Spare 2 + TOTAL 48 + +\*---------------------------------------------------------------------------*/ + +void codec2_encode_2400(struct CODEC2 *c2, unsigned char * bits, short speech[]) +{ + MODEL model; + float ak[LPC_ORD+1]; + float lsps[LPC_ORD]; + float e; + int WoE_index; + int lsp_indexes[LPC_ORD]; + int i; + int spare = 0; + unsigned int nbit = 0; + + assert(c2 != NULL); + + memset(bits, '\0', ((codec2_bits_per_frame(c2) + 7) / 8)); + + /* first 10ms analysis frame - we just want voicing */ + + analyse_one_frame(c2, &model, speech); + pack(bits, &nbit, model.voiced, 1); + + /* second 10ms analysis frame */ + + analyse_one_frame(c2, &model, &speech[c2->n_samp]); + pack(bits, &nbit, model.voiced, 1); + + e = speech_to_uq_lsps(lsps, ak, c2->Sn, c2->w, c2->m_pitch, LPC_ORD); + WoE_index = encode_WoE(&model, e, c2->xq_enc); + pack(bits, &nbit, WoE_index, WO_E_BITS); + + encode_lsps_scalar(lsp_indexes, lsps, LPC_ORD); + for(i=0; ic2const, &model[1], &e[1], c2->xq_dec, WoE_index); + + for(i=0; iprev_model_dec, &model[1], c2->c2const.Wo_min); + e[0] = interp_energy(c2->prev_e_dec, e[1]); + + /* LSPs are sampled every 20ms so we interpolate the frame in + between, then recover spectral amplitudes */ + + interpolate_lsp_ver2(&lsps[0][0], c2->prev_lsps_dec, &lsps[1][0], 0.5, LPC_ORD); + for(i=0; i<2; i++) { + lsp_to_lpc(&lsps[i][0], &ak[i][0], LPC_ORD); + aks_to_M2(c2->fftr_fwd_cfg, &ak[i][0], LPC_ORD, &model[i], e[i], &snr, 0, 0, + c2->lpc_pf, c2->bass_boost, c2->beta, c2->gamma, Aw); + apply_lpc_correction(&model[i]); + synthesise_one_frame(c2, &speech[c2->n_samp*i], &model[i], Aw, 1.0); + + /* dump parameters for deep learning experiments */ + + if (c2->fmlfeat != NULL) { + /* 10 LSPs - energy - Wo - voicing flag - 10 LPCs */ + fwrite(&lsps[i][0], LPC_ORD, sizeof(float), c2->fmlfeat); + fwrite(&e[i], 1, sizeof(float), c2->fmlfeat); + fwrite(&model[i].Wo, 1, sizeof(float), c2->fmlfeat); + float voiced_float = model[i].voiced; + fwrite(&voiced_float, 1, sizeof(float), c2->fmlfeat); + fwrite(&ak[i][1], LPC_ORD, sizeof(float), c2->fmlfeat); + } + } + + /* update memories for next frame ----------------------------*/ + + c2->prev_model_dec = model[1]; + c2->prev_e_dec = e[1]; + for(i=0; iprev_lsps_dec[i] = lsps[1][i]; +} + + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: codec2_encode_1600 + AUTHOR......: David Rowe + DATE CREATED: Feb 28 2013 + + Encodes 320 speech samples (40ms of speech) into 64 bits. + + The codec2 algorithm actually operates internally on 10ms (80 + sample) frames, so we run the encoding algorithm 4 times: + + frame 0: voicing bit + frame 1: voicing bit, Wo and E + frame 2: voicing bit + frame 3: voicing bit, Wo and E, scalar LSPs + + The bit allocation is: + + Parameter frame 2 frame 4 Total + ------------------------------------------------------- + Harmonic magnitudes (LSPs) 0 36 36 + Pitch (Wo) 7 7 14 + Energy 5 5 10 + Voicing (10ms update) 2 2 4 + TOTAL 14 50 64 + +\*---------------------------------------------------------------------------*/ + +void codec2_encode_1600(struct CODEC2 *c2, unsigned char * bits, short speech[]) +{ + MODEL model; + float lsps[LPC_ORD]; + float ak[LPC_ORD+1]; + float e; + int lsp_indexes[LPC_ORD]; + int Wo_index, e_index; + int i; + unsigned int nbit = 0; + + assert(c2 != NULL); + + memset(bits, '\0', ((codec2_bits_per_frame(c2) + 7) / 8)); + + /* frame 1: - voicing ---------------------------------------------*/ + + analyse_one_frame(c2, &model, speech); + pack(bits, &nbit, model.voiced, 1); + + /* frame 2: - voicing, scalar Wo & E -------------------------------*/ + + analyse_one_frame(c2, &model, &speech[c2->n_samp]); + pack(bits, &nbit, model.voiced, 1); + + Wo_index = encode_Wo(&c2->c2const, model.Wo, WO_BITS); + pack(bits, &nbit, Wo_index, WO_BITS); + + /* need to run this just to get LPC energy */ + e = speech_to_uq_lsps(lsps, ak, c2->Sn, c2->w, c2->m_pitch, LPC_ORD); + e_index = encode_energy(e, E_BITS); + pack(bits, &nbit, e_index, E_BITS); + + /* frame 3: - voicing ---------------------------------------------*/ + + analyse_one_frame(c2, &model, &speech[2*c2->n_samp]); + pack(bits, &nbit, model.voiced, 1); + + /* frame 4: - voicing, scalar Wo & E, scalar LSPs ------------------*/ + + analyse_one_frame(c2, &model, &speech[3*c2->n_samp]); + pack(bits, &nbit, model.voiced, 1); + + Wo_index = encode_Wo(&c2->c2const, model.Wo, WO_BITS); + pack(bits, &nbit, Wo_index, WO_BITS); + + e = speech_to_uq_lsps(lsps, ak, c2->Sn, c2->w, c2->m_pitch, LPC_ORD); + e_index = encode_energy(e, E_BITS); + pack(bits, &nbit, e_index, E_BITS); + + encode_lsps_scalar(lsp_indexes, lsps, LPC_ORD); + for(i=0; ic2const, Wo_index, WO_BITS); + model[1].L = PI/model[1].Wo; + + e_index = unpack(bits, &nbit, E_BITS); + e[1] = decode_energy(e_index, E_BITS); + + model[2].voiced = unpack(bits, &nbit, 1); + + model[3].voiced = unpack(bits, &nbit, 1); + Wo_index = unpack(bits, &nbit, WO_BITS); + model[3].Wo = decode_Wo(&c2->c2const, Wo_index, WO_BITS); + model[3].L = PI/model[3].Wo; + + e_index = unpack(bits, &nbit, E_BITS); + e[3] = decode_energy(e_index, E_BITS); + + for(i=0; iprev_model_dec, &model[1], c2->c2const.Wo_min); + e[0] = interp_energy(c2->prev_e_dec, e[1]); + interp_Wo(&model[2], &model[1], &model[3], c2->c2const.Wo_min); + e[2] = interp_energy(e[1], e[3]); + + /* LSPs are sampled every 40ms so we interpolate the 3 frames in + between, then recover spectral amplitudes */ + + for(i=0, weight=0.25; i<3; i++, weight += 0.25) { + interpolate_lsp_ver2(&lsps[i][0], c2->prev_lsps_dec, &lsps[3][0], weight, LPC_ORD); + } + for(i=0; i<4; i++) { + lsp_to_lpc(&lsps[i][0], &ak[i][0], LPC_ORD); + aks_to_M2(c2->fftr_fwd_cfg, &ak[i][0], LPC_ORD, &model[i], e[i], &snr, 0, 0, + c2->lpc_pf, c2->bass_boost, c2->beta, c2->gamma, Aw); + apply_lpc_correction(&model[i]); + synthesise_one_frame(c2, &speech[c2->n_samp*i], &model[i], Aw, 1.0); + } + + /* update memories for next frame ----------------------------*/ + + c2->prev_model_dec = model[3]; + c2->prev_e_dec = e[3]; + for(i=0; iprev_lsps_dec[i] = lsps[3][i]; + +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: codec2_encode_1400 + AUTHOR......: David Rowe + DATE CREATED: May 11 2012 + + Encodes 320 speech samples (40ms of speech) into 56 bits. + + The codec2 algorithm actually operates internally on 10ms (80 + sample) frames, so we run the encoding algorithm 4 times: + + frame 0: voicing bit + frame 1: voicing bit, joint VQ of Wo and E + frame 2: voicing bit + frame 3: voicing bit, joint VQ of Wo and E, scalar LSPs + + The bit allocation is: + + Parameter frame 2 frame 4 Total + ------------------------------------------------------- + Harmonic magnitudes (LSPs) 0 36 36 + Energy+Wo 8 8 16 + Voicing (10ms update) 2 2 4 + TOTAL 10 46 56 + +\*---------------------------------------------------------------------------*/ + +void codec2_encode_1400(struct CODEC2 *c2, unsigned char * bits, short speech[]) +{ + MODEL model; + float lsps[LPC_ORD]; + float ak[LPC_ORD+1]; + float e; + int lsp_indexes[LPC_ORD]; + int WoE_index; + int i; + unsigned int nbit = 0; + + assert(c2 != NULL); + + memset(bits, '\0', ((codec2_bits_per_frame(c2) + 7) / 8)); + + /* frame 1: - voicing ---------------------------------------------*/ + + analyse_one_frame(c2, &model, speech); + pack(bits, &nbit, model.voiced, 1); + + /* frame 2: - voicing, joint Wo & E -------------------------------*/ + + analyse_one_frame(c2, &model, &speech[c2->n_samp]); + pack(bits, &nbit, model.voiced, 1); + + /* need to run this just to get LPC energy */ + e = speech_to_uq_lsps(lsps, ak, c2->Sn, c2->w, c2->m_pitch, LPC_ORD); + + WoE_index = encode_WoE(&model, e, c2->xq_enc); + pack(bits, &nbit, WoE_index, WO_E_BITS); + + /* frame 3: - voicing ---------------------------------------------*/ + + analyse_one_frame(c2, &model, &speech[2*c2->n_samp]); + pack(bits, &nbit, model.voiced, 1); + + /* frame 4: - voicing, joint Wo & E, scalar LSPs ------------------*/ + + analyse_one_frame(c2, &model, &speech[3*c2->n_samp]); + pack(bits, &nbit, model.voiced, 1); + + e = speech_to_uq_lsps(lsps, ak, c2->Sn, c2->w, c2->m_pitch, LPC_ORD); + WoE_index = encode_WoE(&model, e, c2->xq_enc); + pack(bits, &nbit, WoE_index, WO_E_BITS); + + encode_lsps_scalar(lsp_indexes, lsps, LPC_ORD); + for(i=0; ic2const, &model[1], &e[1], c2->xq_dec, WoE_index); + + model[2].voiced = unpack(bits, &nbit, 1); + + model[3].voiced = unpack(bits, &nbit, 1); + WoE_index = unpack(bits, &nbit, WO_E_BITS); + decode_WoE(&c2->c2const, &model[3], &e[3], c2->xq_dec, WoE_index); + + for(i=0; iprev_model_dec, &model[1], c2->c2const.Wo_min); + e[0] = interp_energy(c2->prev_e_dec, e[1]); + interp_Wo(&model[2], &model[1], &model[3], c2->c2const.Wo_min); + e[2] = interp_energy(e[1], e[3]); + + /* LSPs are sampled every 40ms so we interpolate the 3 frames in + between, then recover spectral amplitudes */ + + for(i=0, weight=0.25; i<3; i++, weight += 0.25) { + interpolate_lsp_ver2(&lsps[i][0], c2->prev_lsps_dec, &lsps[3][0], weight, LPC_ORD); + } + for(i=0; i<4; i++) { + lsp_to_lpc(&lsps[i][0], &ak[i][0], LPC_ORD); + aks_to_M2(c2->fftr_fwd_cfg, &ak[i][0], LPC_ORD, &model[i], e[i], &snr, 0, 0, + c2->lpc_pf, c2->bass_boost, c2->beta, c2->gamma, Aw); + apply_lpc_correction(&model[i]); + synthesise_one_frame(c2, &speech[c2->n_samp*i], &model[i], Aw, 1.0); + } + + /* update memories for next frame ----------------------------*/ + + c2->prev_model_dec = model[3]; + c2->prev_e_dec = e[3]; + for(i=0; iprev_lsps_dec[i] = lsps[3][i]; + +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: codec2_encode_1300 + AUTHOR......: David Rowe + DATE CREATED: March 14 2013 + + Encodes 320 speech samples (40ms of speech) into 52 bits. + + The codec2 algorithm actually operates internally on 10ms (80 + sample) frames, so we run the encoding algorithm 4 times: + + frame 0: voicing bit + frame 1: voicing bit, + frame 2: voicing bit + frame 3: voicing bit, Wo and E, scalar LSPs + + The bit allocation is: + + Parameter frame 2 frame 4 Total + ------------------------------------------------------- + Harmonic magnitudes (LSPs) 0 36 36 + Pitch (Wo) 0 7 7 + Energy 0 5 5 + Voicing (10ms update) 2 2 4 + TOTAL 2 50 52 + +\*---------------------------------------------------------------------------*/ + +void codec2_encode_1300(struct CODEC2 *c2, unsigned char * bits, short speech[]) +{ + MODEL model; + float lsps[LPC_ORD]; + float ak[LPC_ORD+1]; + float e; + int lsp_indexes[LPC_ORD]; + int Wo_index, e_index; + int i; + unsigned int nbit = 0; + //#ifdef PROFILE + //unsigned int quant_start; + //#endif + + assert(c2 != NULL); + + memset(bits, '\0', ((codec2_bits_per_frame(c2) + 7) / 8)); + + /* frame 1: - voicing ---------------------------------------------*/ + + analyse_one_frame(c2, &model, speech); + pack_natural_or_gray(bits, &nbit, model.voiced, 1, c2->gray); + + /* frame 2: - voicing ---------------------------------------------*/ + + analyse_one_frame(c2, &model, &speech[c2->n_samp]); + pack_natural_or_gray(bits, &nbit, model.voiced, 1, c2->gray); + + /* frame 3: - voicing ---------------------------------------------*/ + + analyse_one_frame(c2, &model, &speech[2*c2->n_samp]); + pack_natural_or_gray(bits, &nbit, model.voiced, 1, c2->gray); + + /* frame 4: - voicing, scalar Wo & E, scalar LSPs ------------------*/ + + analyse_one_frame(c2, &model, &speech[3*c2->n_samp]); + pack_natural_or_gray(bits, &nbit, model.voiced, 1, c2->gray); + + Wo_index = encode_Wo(&c2->c2const, model.Wo, WO_BITS); + pack_natural_or_gray(bits, &nbit, Wo_index, WO_BITS, c2->gray); + + //#ifdef PROFILE + //quant_start = machdep_profile_sample(); + //#endif + e = speech_to_uq_lsps(lsps, ak, c2->Sn, c2->w, c2->m_pitch, LPC_ORD); + e_index = encode_energy(e, E_BITS); + pack_natural_or_gray(bits, &nbit, e_index, E_BITS, c2->gray); + + encode_lsps_scalar(lsp_indexes, lsps, LPC_ORD); + for(i=0; igray); + } + //#ifdef PROFILE + //machdep_profile_sample_and_log(quant_start, " quant/packing"); + //#endif + + assert(nbit == (unsigned)codec2_bits_per_frame(c2)); +} + + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: codec2_decode_1300 + AUTHOR......: David Rowe + DATE CREATED: 11 May 2012 + + Decodes frames of 52 bits into 320 samples (40ms) of speech. + +\*---------------------------------------------------------------------------*/ +static int frames; +void codec2_decode_1300(struct CODEC2 *c2, short speech[], const unsigned char * bits, float ber_est) +{ + MODEL model[4]; + int lsp_indexes[LPC_ORD]; + float lsps[4][LPC_ORD]; + int Wo_index, e_index; + float e[4]; + float snr; + float ak[4][LPC_ORD+1]; + int i,j; + unsigned int nbit = 0; + float weight; + COMP Aw[FFT_ENC]; + //PROFILE_VAR(recover_start); + + assert(c2 != NULL); + frames+= 4; + /* only need to zero these out due to (unused) snr calculation */ + + for(i=0; i<4; i++) + for(j=1; j<=MAX_AMP; j++) + model[i].A[j] = 0.0; + + /* unpack bits from channel ------------------------------------*/ + + /* this will partially fill the model params for the 4 x 10ms + frames */ + + model[0].voiced = unpack_natural_or_gray(bits, &nbit, 1, c2->gray); + model[1].voiced = unpack_natural_or_gray(bits, &nbit, 1, c2->gray); + model[2].voiced = unpack_natural_or_gray(bits, &nbit, 1, c2->gray); + model[3].voiced = unpack_natural_or_gray(bits, &nbit, 1, c2->gray); + + Wo_index = unpack_natural_or_gray(bits, &nbit, WO_BITS, c2->gray); + model[3].Wo = decode_Wo(&c2->c2const, Wo_index, WO_BITS); + model[3].L = PI/model[3].Wo; + + e_index = unpack_natural_or_gray(bits, &nbit, E_BITS, c2->gray); + e[3] = decode_energy(e_index, E_BITS); + //fprintf(stderr, "%d %f\n", e_index, e[3]); + + for(i=0; igray); + } + decode_lsps_scalar(&lsps[3][0], lsp_indexes, LPC_ORD); + check_lsp_order(&lsps[3][0], LPC_ORD); + bw_expand_lsps(&lsps[3][0], LPC_ORD, 50.0, 100.0); + + if (ber_est > 0.15) { + model[0].voiced = model[1].voiced = model[2].voiced = model[3].voiced = 0; + e[3] = decode_energy(10, E_BITS); + bw_expand_lsps(&lsps[3][0], LPC_ORD, 200.0, 200.0); + //fprintf(stderr, "soft mute\n"); + } + + /* interpolate ------------------------------------------------*/ + + /* Wo, energy, and LSPs are sampled every 40ms so we interpolate + the 3 frames in between */ + + //PROFILE_SAMPLE(recover_start); + for(i=0, weight=0.25; i<3; i++, weight += 0.25) { + interpolate_lsp_ver2(&lsps[i][0], c2->prev_lsps_dec, &lsps[3][0], weight, LPC_ORD); + interp_Wo2(&model[i], &c2->prev_model_dec, &model[3], weight, c2->c2const.Wo_min); + e[i] = interp_energy2(c2->prev_e_dec, e[3],weight); + } + + /* then recover spectral amplitudes */ + + for(i=0; i<4; i++) { + lsp_to_lpc(&lsps[i][0], &ak[i][0], LPC_ORD); + aks_to_M2(c2->fftr_fwd_cfg, &ak[i][0], LPC_ORD, &model[i], e[i], &snr, 0, 0, + c2->lpc_pf, c2->bass_boost, c2->beta, c2->gamma, Aw); + apply_lpc_correction(&model[i]); + synthesise_one_frame(c2, &speech[c2->n_samp*i], &model[i], Aw, 1.0); + + /* dump parameters for deep learning experiments */ + + if (c2->fmlfeat != NULL) { + /* 10 LSPs - energy - Wo - voicing flag - 10 LPCs */ + fwrite(&lsps[i][0], LPC_ORD, sizeof(float), c2->fmlfeat); + fwrite(&e[i], 1, sizeof(float), c2->fmlfeat); + fwrite(&model[i].Wo, 1, sizeof(float), c2->fmlfeat); + float voiced_float = model[i].voiced; + fwrite(&voiced_float, 1, sizeof(float), c2->fmlfeat); + fwrite(&ak[i][1], LPC_ORD, sizeof(float), c2->fmlfeat); + } + } + /* + for(i=0; i<4; i++) { + printf("%d Wo: %f L: %d v: %d\n", frames, model[i].Wo, model[i].L, model[i].voiced); + } + if (frames == 4*50) + exit(0); + */ + //PROFILE_SAMPLE_AND_LOG2(recover_start, " recover"); + #ifdef DUMP + dump_lsp_(&lsps[3][0]); + dump_ak_(&ak[3][0], LPC_ORD); + #endif + + /* update memories for next frame ----------------------------*/ + + c2->prev_model_dec = model[3]; + c2->prev_e_dec = e[3]; + for(i=0; iprev_lsps_dec[i] = lsps[3][i]; + +} + + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: codec2_encode_1200 + AUTHOR......: David Rowe + DATE CREATED: Nov 14 2011 + + Encodes 320 speech samples (40ms of speech) into 48 bits. + + The codec2 algorithm actually operates internally on 10ms (80 + sample) frames, so we run the encoding algorithm four times: + + frame 0: voicing bit + frame 1: voicing bit, joint VQ of Wo and E + frame 2: voicing bit + frame 3: voicing bit, joint VQ of Wo and E, VQ LSPs + + The bit allocation is: + + Parameter frame 2 frame 4 Total + ------------------------------------------------------- + Harmonic magnitudes (LSPs) 0 27 27 + Energy+Wo 8 8 16 + Voicing (10ms update) 2 2 4 + Spare 0 1 1 + TOTAL 10 38 48 + +\*---------------------------------------------------------------------------*/ + +void codec2_encode_1200(struct CODEC2 *c2, unsigned char * bits, short speech[]) +{ + MODEL model; + float lsps[LPC_ORD]; + float lsps_[LPC_ORD]; + float ak[LPC_ORD+1]; + float e; + int lsp_indexes[LPC_ORD]; + int WoE_index; + int i; + int spare = 0; + unsigned int nbit = 0; + + assert(c2 != NULL); + + memset(bits, '\0', ((codec2_bits_per_frame(c2) + 7) / 8)); + + /* frame 1: - voicing ---------------------------------------------*/ + + analyse_one_frame(c2, &model, speech); + pack(bits, &nbit, model.voiced, 1); + + /* frame 2: - voicing, joint Wo & E -------------------------------*/ + + analyse_one_frame(c2, &model, &speech[c2->n_samp]); + pack(bits, &nbit, model.voiced, 1); + + /* need to run this just to get LPC energy */ + e = speech_to_uq_lsps(lsps, ak, c2->Sn, c2->w, c2->m_pitch, LPC_ORD); + + WoE_index = encode_WoE(&model, e, c2->xq_enc); + pack(bits, &nbit, WoE_index, WO_E_BITS); + + /* frame 3: - voicing ---------------------------------------------*/ + + analyse_one_frame(c2, &model, &speech[2*c2->n_samp]); + pack(bits, &nbit, model.voiced, 1); + + /* frame 4: - voicing, joint Wo & E, scalar LSPs ------------------*/ + + analyse_one_frame(c2, &model, &speech[3*c2->n_samp]); + pack(bits, &nbit, model.voiced, 1); + + e = speech_to_uq_lsps(lsps, ak, c2->Sn, c2->w, c2->m_pitch, LPC_ORD); + WoE_index = encode_WoE(&model, e, c2->xq_enc); + pack(bits, &nbit, WoE_index, WO_E_BITS); + + encode_lsps_vq(lsp_indexes, lsps, lsps_, LPC_ORD); + for(i=0; ic2const, &model[1], &e[1], c2->xq_dec, WoE_index); + + model[2].voiced = unpack(bits, &nbit, 1); + + model[3].voiced = unpack(bits, &nbit, 1); + WoE_index = unpack(bits, &nbit, WO_E_BITS); + decode_WoE(&c2->c2const, &model[3], &e[3], c2->xq_dec, WoE_index); + + for(i=0; iprev_model_dec, &model[1], c2->c2const.Wo_min); + e[0] = interp_energy(c2->prev_e_dec, e[1]); + interp_Wo(&model[2], &model[1], &model[3], c2->c2const.Wo_min); + e[2] = interp_energy(e[1], e[3]); + + /* LSPs are sampled every 40ms so we interpolate the 3 frames in + between, then recover spectral amplitudes */ + + for(i=0, weight=0.25; i<3; i++, weight += 0.25) { + interpolate_lsp_ver2(&lsps[i][0], c2->prev_lsps_dec, &lsps[3][0], weight, LPC_ORD); + } + for(i=0; i<4; i++) { + lsp_to_lpc(&lsps[i][0], &ak[i][0], LPC_ORD); + aks_to_M2(c2->fftr_fwd_cfg, &ak[i][0], LPC_ORD, &model[i], e[i], &snr, 0, 0, + c2->lpc_pf, c2->bass_boost, c2->beta, c2->gamma, Aw); + apply_lpc_correction(&model[i]); + synthesise_one_frame(c2, &speech[c2->n_samp*i], &model[i], Aw, 1.0); + } + + /* update memories for next frame ----------------------------*/ + + c2->prev_model_dec = model[3]; + c2->prev_e_dec = e[3]; + for(i=0; iprev_lsps_dec[i] = lsps[3][i]; +} + + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: codec2_encode_700c + AUTHOR......: David Rowe + DATE CREATED: Jan 2017 + + Version c of 700 bit/s codec that uses newamp1 fixed rate VQ of amplitudes. + + Encodes 320 speech samples (40ms of speech) into 28 bits. + + The codec2 algorithm actually operates internally on 10ms (80 + sample) frames, so we run the encoding algorithm four times: + + frame 0: nothing + frame 1: nothing + frame 2: nothing + frame 3: 18 bit 2 stage VQ (9 bits/stage), 4 bits energy, + 6 bit scalar Wo/voicing. No spare bits. + + Voicing is encoded using the 0 index of the Wo quantiser. + + The bit allocation is: + + Parameter frames 1-3 frame 4 Total + ----------------------------------------------------------- + Harmonic magnitudes (rate k VQ) 0 18 18 + Energy 0 4 4 + log Wo/voicing 0 6 6 + TOTAL 0 28 28 + +\*---------------------------------------------------------------------------*/ + +void codec2_encode_700c(struct CODEC2 *c2, unsigned char * bits, short speech[]) +{ + MODEL model; + int indexes[4], i, M=4; + unsigned int nbit = 0; + + assert(c2 != NULL); + + memset(bits, '\0', ((codec2_bits_per_frame(c2) + 7) / 8)); + + for(i=0; in_samp]); + } + + int K = 20; + float rate_K_vec[K], mean; + float rate_K_vec_no_mean[K], rate_K_vec_no_mean_[K]; + + newamp1_model_to_indexes(&c2->c2const, + indexes, + &model, + rate_K_vec, + c2->rate_K_sample_freqs_kHz, + K, + &mean, + rate_K_vec_no_mean, + rate_K_vec_no_mean_, &c2->se, c2->eq, c2->eq_en); + c2->nse += K; + +#ifndef CORTEX_M4 + /* dump features for deep learning experiments */ + if (c2->fmlfeat != NULL) { + fwrite(&mean, 1, sizeof(float), c2->fmlfeat); + fwrite(rate_K_vec_no_mean, K, sizeof(float), c2->fmlfeat); + fwrite(rate_K_vec_no_mean_, K, sizeof(float), c2->fmlfeat); + MODEL model_; memcpy(&model_, &model, sizeof(model)); + float rate_K_vec_[K]; + for(int k=0; kc2const, &model_, rate_K_vec_, c2->rate_K_sample_freqs_kHz, K); + fwrite(&model_.A, MAX_AMP, sizeof(float), c2->fmlfeat); + } + if (c2->fmlmodel != NULL) + fwrite(&model,sizeof(MODEL),1,c2->fmlmodel); +#endif + + pack_natural_or_gray(bits, &nbit, indexes[0], 9, 0); + pack_natural_or_gray(bits, &nbit, indexes[1], 9, 0); + pack_natural_or_gray(bits, &nbit, indexes[2], 4, 0); + pack_natural_or_gray(bits, &nbit, indexes[3], 6, 0); + + assert(nbit == (unsigned)codec2_bits_per_frame(c2)); +} + + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: codec2_decode_700c + AUTHOR......: David Rowe + DATE CREATED: August 2015 + + Decodes frames of 28 bits into 320 samples (40ms) of speech. + +\*---------------------------------------------------------------------------*/ + +void codec2_decode_700c(struct CODEC2 *c2, short speech[], const unsigned char * bits) +{ + MODEL model[4]; + int indexes[4]; + int i; + unsigned int nbit = 0; + + assert(c2 != NULL); + + /* unpack bits from channel ------------------------------------*/ + + indexes[0] = unpack_natural_or_gray(bits, &nbit, 9, 0); + indexes[1] = unpack_natural_or_gray(bits, &nbit, 9, 0); + indexes[2] = unpack_natural_or_gray(bits, &nbit, 4, 0); + indexes[3] = unpack_natural_or_gray(bits, &nbit, 6, 0); + + int M = 4; + COMP HH[M][MAX_AMP+1]; + float interpolated_surface_[M][NEWAMP1_K]; + + newamp1_indexes_to_model(&c2->c2const, + model, + (COMP*)HH, + (float*)interpolated_surface_, + c2->prev_rate_K_vec_, + &c2->Wo_left, + &c2->voicing_left, + c2->rate_K_sample_freqs_kHz, + NEWAMP1_K, + c2->phase_fft_fwd_cfg, + c2->phase_fft_inv_cfg, + indexes, + c2->user_rate_K_vec_no_mean_, + c2->post_filter_en); + + + for(i=0; ifmlfeat != NULL) { + /* We use standard nb_features=55 feature records for compatability with train_lpcnet.py */ + float features[55] = {0}; + /* just using 18/20 for compatability with LPCNet, coarse scaling for NN imput */ + for(int j=0; j<18; j++) + features[j] = (interpolated_surface_[i][j]-30)/40; + int pitch_index = 21 + 2.0*M_PI/model[i].Wo; + features[36] = 0.02*(pitch_index-100); + features[37] = model[i].voiced; + fwrite(features, 55, sizeof(float), c2->fmlfeat); + } + + /* 700C is a little quieter so lets apply some experimentally derived audio gain */ + synthesise_one_frame(c2, &speech[c2->n_samp*i], &model[i], &HH[i][0], 1.5); + } +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: codec2_energy_700c + AUTHOR......: Jeroen Vreeken + DATE CREATED: Jan 2017 + + Decodes energy value from encoded bits. + +\*---------------------------------------------------------------------------*/ + +float codec2_energy_700c(struct CODEC2 *c2, const unsigned char * bits) +{ + int indexes[4]; + unsigned int nbit = 0; + + assert(c2 != NULL); + + /* unpack bits from channel ------------------------------------*/ + + indexes[0] = unpack_natural_or_gray(bits, &nbit, 9, 0); + indexes[1] = unpack_natural_or_gray(bits, &nbit, 9, 0); + indexes[2] = unpack_natural_or_gray(bits, &nbit, 4, 0); + indexes[3] = unpack_natural_or_gray(bits, &nbit, 6, 0); + + float mean = newamp1_energy_cb[0].cb[indexes[2]]; + mean -= 10; + if (indexes[3] == 0) + mean -= 10; + + return POW10F(mean/10.0); +} + +float codec2_energy_450(struct CODEC2 *c2, const unsigned char * bits) +{ + int indexes[4]; + unsigned int nbit = 0; + + assert(c2 != NULL); + + /* unpack bits from channel ------------------------------------*/ + + indexes[0] = unpack_natural_or_gray(bits, &nbit, 9, 0); + //indexes[1] = unpack_natural_or_gray(bits, &nbit, 9, 0); + indexes[2] = unpack_natural_or_gray(bits, &nbit, 3, 0); + indexes[3] = unpack_natural_or_gray(bits, &nbit, 6, 0); + + float mean = newamp2_energy_cb[0].cb[indexes[2]]; + mean -= 10; + if (indexes[3] == 0) + mean -= 10; + + return POW10F(mean/10.0); +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: codec2_get_energy() + AUTHOR......: Jeroen Vreeken + DATE CREATED: 08/03/2016 + + Extract energy value from an encoded frame. + +\*---------------------------------------------------------------------------*/ + +float codec2_get_energy(struct CODEC2 *c2, const unsigned char *bits) +{ + assert(c2 != NULL); + assert( + ( CODEC2_MODE_ACTIVE(CODEC2_MODE_3200, c2->mode)) || + ( CODEC2_MODE_ACTIVE(CODEC2_MODE_2400, c2->mode)) || + ( CODEC2_MODE_ACTIVE(CODEC2_MODE_1600, c2->mode)) || + ( CODEC2_MODE_ACTIVE(CODEC2_MODE_1400, c2->mode)) || + ( CODEC2_MODE_ACTIVE(CODEC2_MODE_1300, c2->mode)) || + ( CODEC2_MODE_ACTIVE(CODEC2_MODE_1200, c2->mode)) || + ( CODEC2_MODE_ACTIVE(CODEC2_MODE_700C, c2->mode)) || + ( CODEC2_MODE_ACTIVE(CODEC2_MODE_450, c2->mode)) || + ( CODEC2_MODE_ACTIVE(CODEC2_MODE_450PWB, c2->mode)) + ); + MODEL model; + float xq_dec[2] = {}; + int e_index, WoE_index; + float e; + unsigned int nbit; + + if ( CODEC2_MODE_ACTIVE(CODEC2_MODE_3200, c2->mode)) { + nbit = 1 + 1 + WO_BITS; + e_index = unpack(bits, &nbit, E_BITS); + e = decode_energy(e_index, E_BITS); + } + if ( CODEC2_MODE_ACTIVE(CODEC2_MODE_2400, c2->mode)) { + nbit = 1 + 1; + WoE_index = unpack(bits, &nbit, WO_E_BITS); + decode_WoE(&c2->c2const, &model, &e, xq_dec, WoE_index); + } + if ( CODEC2_MODE_ACTIVE(CODEC2_MODE_1600, c2->mode)) { + nbit = 1 + 1 + WO_BITS; + e_index = unpack(bits, &nbit, E_BITS); + e = decode_energy(e_index, E_BITS); + } + if ( CODEC2_MODE_ACTIVE(CODEC2_MODE_1400, c2->mode)) { + nbit = 1 + 1; + WoE_index = unpack(bits, &nbit, WO_E_BITS); + decode_WoE(&c2->c2const, &model, &e, xq_dec, WoE_index); + } + if ( CODEC2_MODE_ACTIVE(CODEC2_MODE_1300, c2->mode)) { + nbit = 1 + 1 + 1 + 1 + WO_BITS; + e_index = unpack_natural_or_gray(bits, &nbit, E_BITS, c2->gray); + e = decode_energy(e_index, E_BITS); + } + if ( CODEC2_MODE_ACTIVE(CODEC2_MODE_1200, c2->mode)) { + nbit = 1 + 1; + WoE_index = unpack(bits, &nbit, WO_E_BITS); + decode_WoE(&c2->c2const, &model, &e, xq_dec, WoE_index); + } + if ( CODEC2_MODE_ACTIVE(CODEC2_MODE_700C, c2->mode)) { + e = codec2_energy_700c(c2, bits); + } + if ( CODEC2_MODE_ACTIVE(CODEC2_MODE_450, c2->mode) || CODEC2_MODE_ACTIVE(CODEC2_MODE_450PWB, c2->mode)) { + e = codec2_energy_450(c2, bits); + } + + return e; +} + + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: codec2_encode_450 + AUTHOR......: Thomas Kurin and Stefan Erhardt + INSTITUTE...: Institute for Electronics Engineering, University of Erlangen-Nuremberg + DATE CREATED: July 2018 + + 450 bit/s codec that uses newamp2 fixed rate VQ of amplitudes. + + Encodes 320 speech samples (40ms of speech) into 28 bits. + + The codec2 algorithm actually operates internally on 10ms (80 + sample) frames, so we run the encoding algorithm four times: + + frame 0: nothing + frame 1: nothing + frame 2: nothing + frame 3: 9 bit 1 stage VQ, 3 bits energy, + 6 bit scalar Wo/voicing/plosive. No spare bits. + + If a plosive is detected the frame at the energy-step is encoded. + + Voicing is encoded using the 000000 index of the Wo quantiser. + Plosive is encoded using the 111111 index of the Wo quantiser. + + The bit allocation is: + + Parameter frames 1-3 frame 4 Total + ----------------------------------------------------------- + Harmonic magnitudes (rate k VQ) 0 9 9 + Energy 0 3 3 + log Wo/voicing/plosive 0 6 6 + TOTAL 0 18 18 + + +\*---------------------------------------------------------------------------*/ + +void codec2_encode_450(struct CODEC2 *c2, unsigned char * bits, short speech[]) +{ + MODEL model; + int indexes[4], i,h, M=4; + unsigned int nbit = 0; + int plosiv = 0; + float energydelta[M]; + int spectralCounter; + + assert(c2 != NULL); + + memset(bits, '\0', ((codec2_bits_per_frame(c2) + 7) / 8)); + for(i=0; in_samp]); + energydelta[i] = 0; + spectralCounter = 0; + for(h = 0;h<(model.L);h++){ + //only detect above 300 Hz + if(h*model.Wo*(c2->c2const.Fs/2000.0)/M_PI > 0.3){ + energydelta[i] = energydelta[i] + 20.0*log10(model.A[10]+1E-16); + spectralCounter = spectralCounter+1; + } + + } + energydelta[i] = energydelta[i] / spectralCounter ; + } + //Constants for plosive Detection tdB = threshold; minPwr = from below this level plosives have to rise + float tdB = 15; //not fixed can be changed + float minPwr = 15; //not fixed can be changed + if((c2->energy_prev)((c2->energy_prev)+tdB)){ + + plosiv = 1; + } + if(energydelta[0](energydelta[0]+tdB)){ + + plosiv = 2; + } + if(energydelta[1](energydelta[1]+tdB)){ + + plosiv = 3; + } + if(energydelta[2](energydelta[2]+tdB)){ + + plosiv = 4; + } + if(plosiv != 0 && plosiv != 4){ + analyse_one_frame(c2, &model, &speech[(plosiv-1)*c2->n_samp]); + } + + c2->energy_prev = energydelta[3]; + + + int K = 29; + float rate_K_vec[K], mean; + float rate_K_vec_no_mean[K], rate_K_vec_no_mean_[K]; + if(plosiv > 0){ + plosiv = 1; + } + newamp2_model_to_indexes(&c2->c2const, + indexes, + &model, + rate_K_vec, + c2->n2_rate_K_sample_freqs_kHz, + K, + &mean, + rate_K_vec_no_mean, + rate_K_vec_no_mean_, + plosiv); + + + pack_natural_or_gray(bits, &nbit, indexes[0], 9, 0); + //pack_natural_or_gray(bits, &nbit, indexes[1], 9, 0); + pack_natural_or_gray(bits, &nbit, indexes[2], 3, 0); + pack_natural_or_gray(bits, &nbit, indexes[3], 6, 0); + + assert(nbit == (unsigned)codec2_bits_per_frame(c2)); +} + + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: codec2_decode_450 + AUTHOR......: Thomas Kurin and Stefan Erhardt + INSTITUTE...: Institute for Electronics Engineering, University of Erlangen-Nuremberg + DATE CREATED: July 2018 + +\*---------------------------------------------------------------------------*/ + +void codec2_decode_450(struct CODEC2 *c2, short speech[], const unsigned char * bits) +{ + MODEL model[4]; + int indexes[4]; + int i; + unsigned int nbit = 0; + + assert(c2 != NULL); + + /* unpack bits from channel ------------------------------------*/ + + indexes[0] = unpack_natural_or_gray(bits, &nbit, 9, 0); + //indexes[1] = unpack_natural_or_gray(bits, &nbit, 9, 0); + indexes[2] = unpack_natural_or_gray(bits, &nbit, 3, 0); + indexes[3] = unpack_natural_or_gray(bits, &nbit, 6, 0); + + int M = 4; + COMP HH[M][MAX_AMP+1]; + float interpolated_surface_[M][NEWAMP2_K]; + int pwbFlag = 0; + + newamp2_indexes_to_model(&c2->c2const, + model, + (COMP*)HH, + (float*)interpolated_surface_, + c2->n2_prev_rate_K_vec_, + &c2->Wo_left, + &c2->voicing_left, + c2->n2_rate_K_sample_freqs_kHz, + NEWAMP2_K, + c2->phase_fft_fwd_cfg, + c2->phase_fft_inv_cfg, + indexes, + 1.5, + pwbFlag); + + + for(i=0; in_samp*i], &model[i], &HH[i][0], 1.5); + } +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: codec2_decode_450pwb + AUTHOR......: Thomas Kurin and Stefan Erhardt + INSTITUTE...: Institute for Electronics Engineering, University of Erlangen-Nuremberg + DATE CREATED: July 2018 + + Decodes the 450 codec data in pseudo wideband at 16kHz samplerate. + +\*---------------------------------------------------------------------------*/ + +void codec2_decode_450pwb(struct CODEC2 *c2, short speech[], const unsigned char * bits) +{ + MODEL model[4]; + int indexes[4]; + int i; + unsigned int nbit = 0; + + assert(c2 != NULL); + + /* unpack bits from channel ------------------------------------*/ + + indexes[0] = unpack_natural_or_gray(bits, &nbit, 9, 0); + //indexes[1] = unpack_natural_or_gray(bits, &nbit, 9, 0); + indexes[2] = unpack_natural_or_gray(bits, &nbit, 3, 0); + indexes[3] = unpack_natural_or_gray(bits, &nbit, 6, 0); + + int M = 4; + COMP HH[M][MAX_AMP+1]; + float interpolated_surface_[M][NEWAMP2_16K_K]; + int pwbFlag = 1; + + newamp2_indexes_to_model(&c2->c2const, + model, + (COMP*)HH, + (float*)interpolated_surface_, + c2->n2_pwb_prev_rate_K_vec_, + &c2->Wo_left, + &c2->voicing_left, + c2->n2_pwb_rate_K_sample_freqs_kHz, + NEWAMP2_16K_K, + c2->phase_fft_fwd_cfg, + c2->phase_fft_inv_cfg, + indexes, + 1.5, + pwbFlag); + + + for(i=0; in_samp*i], &model[i], &HH[i][0], 1.5); + } +} + + +/*---------------------------------------------------------------------------* \ + + FUNCTION....: synthesise_one_frame() + AUTHOR......: David Rowe + DATE CREATED: 23/8/2010 + + Synthesise 80 speech samples (10ms) from model parameters. + +\*---------------------------------------------------------------------------*/ + +void synthesise_one_frame(struct CODEC2 *c2, short speech[], MODEL *model, COMP Aw[], float gain) +{ + int i; + + if ( CODEC2_MODE_ACTIVE(CODEC2_MODE_700C, c2->mode) || CODEC2_MODE_ACTIVE(CODEC2_MODE_450, c2->mode) || CODEC2_MODE_ACTIVE(CODEC2_MODE_450PWB, c2->mode) ) { + /* newamp1/2, we've already worked out rate L phase */ + COMP *H = Aw; + phase_synth_zero_order(c2->n_samp, model, &c2->ex_phase, H); + } else { + /* LPC based phase synthesis */ + COMP H[MAX_AMP+1]; + sample_phase(model, H, Aw); + phase_synth_zero_order(c2->n_samp, model, &c2->ex_phase, H); + } + + postfilter(model, &c2->bg_est); + synthesise(c2->n_samp, c2->fftr_inv_cfg, c2->Sn_, model, c2->Pn, 1); + + for(i=0; in_samp; i++) { + c2->Sn_[i] *= gain; + } + + ear_protection(c2->Sn_, c2->n_samp); + + for(i=0; in_samp; i++) { + if (c2->Sn_[i] > 32767.0) + speech[i] = 32767; + else if (c2->Sn_[i] < -32767.0) + speech[i] = -32767; + else + speech[i] = c2->Sn_[i]; + } + +} + + +/*---------------------------------------------------------------------------* \ + + FUNCTION....: analyse_one_frame() + AUTHOR......: David Rowe + DATE CREATED: 23/8/2010 + + Extract sinusoidal model parameters from 80 speech samples (10ms of + speech). + +\*---------------------------------------------------------------------------*/ + +void analyse_one_frame(struct CODEC2 *c2, MODEL *model, short speech[]) +{ + COMP Sw[FFT_ENC]; + float pitch; + int i; + int n_samp = c2->n_samp; + int m_pitch = c2->m_pitch; + + /* Read input speech */ + + for(i=0; iSn[i] = c2->Sn[i+n_samp]; + for(i=0; iSn[i+m_pitch-n_samp] = speech[i]; + + dft_speech(&c2->c2const, c2->fft_fwd_cfg, Sw, c2->Sn, c2->w); + + /* Estimate pitch */ + nlp(c2->nlp, c2->Sn, n_samp, &pitch, Sw, c2->W, &c2->prev_f0_enc); + model->Wo = TWO_PI/pitch; + model->L = PI/model->Wo; + + /* estimate model parameters */ + two_stage_pitch_refinement(&c2->c2const, model, Sw); + + /* estimate phases when doing ML experiments */ + if (c2->fmlfeat != NULL) + estimate_amplitudes(model, Sw, c2->W, 1); + else + estimate_amplitudes(model, Sw, c2->W, 0); + est_voicing_mbe(&c2->c2const, model, Sw, c2->W); + #ifdef DUMP + dump_model(model); + #endif +} + + +/*---------------------------------------------------------------------------* \ + + FUNCTION....: ear_protection() + AUTHOR......: David Rowe + DATE CREATED: Nov 7 2012 + + Limits output level to protect ears when there are bit errors or the input + is overdriven. This doesn't correct or mask bit errors, just reduces the + worst of their damage. + +\*---------------------------------------------------------------------------*/ + +static void ear_protection(float in_out[], int n) { + float max_sample, over, gain; + int i; + + /* find maximum sample in frame */ + + max_sample = 0.0; + for(i=0; i max_sample) + max_sample = in_out[i]; + + /* determine how far above set point */ + + over = max_sample/30000.0; + + /* If we are x dB over set point we reduce level by 2x dB, this + attenuates major excursions in amplitude (likely to be caused + by bit errors) more than smaller ones */ + + if (over > 1.0) { + gain = 1.0/(over*over); + for(i=0; i= 0.0) && (beta <= 1.0)); + assert((gamma >= 0.0) && (gamma <= 1.0)); + c2->lpc_pf = enable; + c2->bass_boost = bass_boost; + c2->beta = beta; + c2->gamma = gamma; +} + + +/* + Allows optional stealing of one of the voicing bits for use as a + spare bit, only 1300 & 1400 & 1600 bit/s supported for now. + Experimental method of sending voice/data frames for FreeDV. +*/ + +int codec2_get_spare_bit_index(struct CODEC2 *c2) +{ + assert(c2 != NULL); + + switch(c2->mode) { + case CODEC2_MODE_1300: + return 2; // bit 2 (3th bit) is v2 (third voicing bit) + break; + case CODEC2_MODE_1400: + return 10; // bit 10 (11th bit) is v2 (third voicing bit) + break; + case CODEC2_MODE_1600: + return 15; // bit 15 (16th bit) is v2 (third voicing bit) + break; + } + + return -1; +} + +/* + Reconstructs the spare voicing bit. Note works on unpacked bits + for convenience. +*/ + +int codec2_rebuild_spare_bit(struct CODEC2 *c2, char unpacked_bits[]) +{ + int v1,v3; + + assert(c2 != NULL); + + v1 = unpacked_bits[1]; + + switch(c2->mode) { + case CODEC2_MODE_1300: + + v3 = unpacked_bits[1+1+1]; + + /* if either adjacent frame is voiced, make this one voiced */ + + unpacked_bits[2] = (v1 || v3); + + return 0; + + break; + + case CODEC2_MODE_1400: + + v3 = unpacked_bits[1+1+8+1]; + + /* if either adjacent frame is voiced, make this one voiced */ + + unpacked_bits[10] = (v1 || v3); + + return 0; + + break; + + case CODEC2_MODE_1600: + v3 = unpacked_bits[1+1+8+5+1]; + + /* if either adjacent frame is voiced, make this one voiced */ + + unpacked_bits[15] = (v1 || v3); + + return 0; + + break; + } + + return -1; +} + +void codec2_set_natural_or_gray(struct CODEC2 *c2, int gray) +{ + assert(c2 != NULL); + c2->gray = gray; +} + +void codec2_set_softdec(struct CODEC2 *c2, float *softdec) +{ + assert(c2 != NULL); + c2->softdec = softdec; +} + +void codec2_open_mlfeat(struct CODEC2 *codec2_state, char *feat_fn, char *model_fn) { + if ((codec2_state->fmlfeat = fopen(feat_fn, "wb")) == NULL) { + fprintf(stderr, "error opening machine learning feature file: %s\n", feat_fn); + exit(1); + } + if (model_fn) { + if ((codec2_state->fmlmodel = fopen(model_fn, "wb")) == NULL) { + fprintf(stderr, "error opening machine learning Codec 2 model file: %s\n", feat_fn); + exit(1); + } + } +} + +#ifndef __EMBEDDED__ +void codec2_load_codebook(struct CODEC2 *codec2_state, int num, char *filename) { + FILE *f; + + if ((f = fopen(filename, "rb")) == NULL) { + fprintf(stderr, "error opening codebook file: %s\n", filename); + exit(1); + } + //fprintf(stderr, "reading newamp1vq_cb[%d] k=%d m=%d\n", num, newamp1vq_cb[num].k, newamp1vq_cb[num].m); + float tmp[newamp1vq_cb[num].k*newamp1vq_cb[num].m]; + int nread = fread(tmp, sizeof(float), newamp1vq_cb[num].k*newamp1vq_cb[num].m, f); + float *p = (float*)newamp1vq_cb[num].cb; + for(int i=0; inse) + return codec2_state->se/codec2_state->nse; + else + return 0; +} + +float *codec2_enable_user_ratek(struct CODEC2 *codec2_state, int *K) { + codec2_state->user_rate_K_vec_no_mean_ = (float*)malloc(sizeof(float)*NEWAMP1_K); + *K = NEWAMP1_K; + return codec2_state->user_rate_K_vec_no_mean_; +} + +void codec2_700c_post_filter(struct CODEC2 *codec2_state, int en) { + codec2_state->post_filter_en = en; +} + +void codec2_700c_eq(struct CODEC2 *codec2_state, int en) { + codec2_state->eq_en = en; + codec2_state->se = 0.0; codec2_state->nse = 0; +} diff --git a/libcodec2-android/src/codec2/src/codec2.h b/libcodec2-android/src/codec2/src/codec2.h new file mode 100644 index 0000000..4477ec0 --- /dev/null +++ b/libcodec2-android/src/codec2/src/codec2.h @@ -0,0 +1,122 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: codec2.h + AUTHOR......: David Rowe + DATE CREATED: 21 August 2010 + + Codec 2 fully quantised encoder and decoder functions. If you want use + Codec 2, these are the functions you need to call. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2010 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#ifndef __CODEC2__ +#define __CODEC2__ + +#include + +#ifdef __cplusplus + extern "C" { +#endif + +#define CODEC2_MODE_3200 0 +#define CODEC2_MODE_2400 1 +#define CODEC2_MODE_1600 2 +#define CODEC2_MODE_1400 3 +#define CODEC2_MODE_1300 4 +#define CODEC2_MODE_1200 5 +#define CODEC2_MODE_700C 8 +#define CODEC2_MODE_450 10 +#define CODEC2_MODE_450PWB 11 + +#ifndef CODEC2_MODE_EN_DEFAULT +#define CODEC2_MODE_EN_DEFAULT 1 +#endif + +// by default we enable all modes +// disable during compile time with -DCODEC2_MODE_1600_EN=0 +// all but CODEC2 1600 are enabled then + +//or the other way round +// -DCODEC2_MODE_EN_DEFAULT=0 -DCODEC2_MODE_1600_EN=1 +// only CODEC2 Mode 1600 + +#if !defined(CODEC2_MODE_3200_EN) + #define CODEC2_MODE_3200_EN CODEC2_MODE_EN_DEFAULT +#endif +#if !defined(CODEC2_MODE_2400_EN) + #define CODEC2_MODE_2400_EN CODEC2_MODE_EN_DEFAULT +#endif +#if !defined(CODEC2_MODE_1600_EN) + #define CODEC2_MODE_1600_EN CODEC2_MODE_EN_DEFAULT +#endif +#if !defined(CODEC2_MODE_1400_EN) + #define CODEC2_MODE_1400_EN CODEC2_MODE_EN_DEFAULT +#endif +#if !defined(CODEC2_MODE_1300_EN) + #define CODEC2_MODE_1300_EN CODEC2_MODE_EN_DEFAULT +#endif +#if !defined(CODEC2_MODE_1200_EN) + #define CODEC2_MODE_1200_EN CODEC2_MODE_EN_DEFAULT +#endif +#if !defined(CODEC2_MODE_700C_EN) + #define CODEC2_MODE_700C_EN CODEC2_MODE_EN_DEFAULT +#endif +#if !defined(CODEC2_MODE_450_EN) + #define CODEC2_MODE_450_EN CODEC2_MODE_EN_DEFAULT +#endif +#if !defined(CODEC2_MODE_450PWB_EN) + #define CODEC2_MODE_450PWB_EN CODEC2_MODE_EN_DEFAULT +#endif + +#define CODEC2_MODE_ACTIVE(mode_name, var) ((mode_name##_EN) == 0 ? 0: (var) == mode_name) + +struct CODEC2; + +struct CODEC2 * codec2_create(int mode); +void codec2_destroy(struct CODEC2 *codec2_state); +void codec2_encode(struct CODEC2 *codec2_state, unsigned char * bits, short speech_in[]); +void codec2_decode(struct CODEC2 *codec2_state, short speech_out[], const unsigned char *bits); +void codec2_decode_ber(struct CODEC2 *codec2_state, short speech_out[], const unsigned char *bits, float ber_est); +int codec2_samples_per_frame(struct CODEC2 *codec2_state); +int codec2_bits_per_frame(struct CODEC2 *codec2_state); + +void codec2_set_lpc_post_filter(struct CODEC2 *codec2_state, int enable, int bass_boost, float beta, float gamma); +int codec2_get_spare_bit_index(struct CODEC2 *codec2_state); +int codec2_rebuild_spare_bit(struct CODEC2 *codec2_state, char unpacked_bits[]); +void codec2_set_natural_or_gray(struct CODEC2 *codec2_state, int gray); +void codec2_set_softdec(struct CODEC2 *c2, float *softdec); +float codec2_get_energy(struct CODEC2 *codec2_state, const unsigned char *bits); + +// support for ML and VQ experiments +void codec2_open_mlfeat(struct CODEC2 *codec2_state, char *feat_filename, char *model_filename); +void codec2_load_codebook(struct CODEC2 *codec2_state, int num, char *filename); +float codec2_get_var(struct CODEC2 *codec2_state); +float *codec2_enable_user_ratek(struct CODEC2 *codec2_state, int *K); + +// 700C post filter and equaliser +void codec2_700c_post_filter(struct CODEC2 *codec2_state, int en); +void codec2_700c_eq(struct CODEC2 *codec2_state, int en); + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/libcodec2-android/src/codec2/src/codec2_cohpsk.h b/libcodec2-android/src/codec2/src/codec2_cohpsk.h new file mode 100644 index 0000000..8a28b04 --- /dev/null +++ b/libcodec2-android/src/codec2/src/codec2_cohpsk.h @@ -0,0 +1,71 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: codec2_cohpsk.h + AUTHOR......: David Rowe + DATE CREATED: March 2015 + + Functions that implement a coherent PSK FDM modem. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2015 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#ifndef __CODEC2_COHPSK__ +#define __CODEC2_COHPSK__ + +#define COHPSK_BITS_PER_FRAME 56 /* hard coded for now */ +#define COHPSK_NC 7 /* hard coded for now */ +#define COHPSK_NOM_SAMPLES_PER_FRAME 600 +#define COHPSK_MAX_SAMPLES_PER_FRAME 625 +#define COHPSK_RS 75 +#define COHPSK_FS 7500 /* note this is a wierd + value to get an integer + oversampling rate */ +#define COHPSK_CLIP 6.5 /* hard clipping for Nc*Nc=14 to reduce PAPR */ + +#include "comp.h" +#include "modem_stats.h" + +struct COHPSK; + +extern const int test_bits_coh[]; + +struct COHPSK *cohpsk_create(void); +void cohpsk_destroy(struct COHPSK *coh); +void cohpsk_mod(struct COHPSK *cohpsk, COMP tx_fdm[], int tx_bits[], int nbits); +void cohpsk_clip(COMP tx_fdm[], float clip_thresh, int n); +void cohpsk_demod(struct COHPSK *cohpsk, float rx_bits[], int *sync, COMP rx_fdm[], int *nin_frame); +void cohpsk_get_demod_stats(struct COHPSK *cohpsk, struct MODEM_STATS *stats); +void cohpsk_set_verbose(struct COHPSK *coh, int verbose); +void cohpsk_get_test_bits(struct COHPSK *coh, int rx_bits[]); +void cohpsk_put_test_bits(struct COHPSK *coh, int *state, short error_pattern[], + int *bit_errors, char rx_bits[], int channel); +int cohpsk_error_pattern_size(void); +void cohpsk_set_frame(struct COHPSK *coh, int frame); +void fdmdv_freq_shift_coh(COMP rx_fdm_fcorr[], COMP rx_fdm[], float foff, float Fs, + COMP *foff_phase_rect, int nin); + +void cohpsk_set_freq_est_mode(struct COHPSK *coh, int used_simple_mode); + +/* used for accessing upper and lower bits before diversity combination */ + +float *cohpsk_get_rx_bits_lower(struct COHPSK *coh); +float *cohpsk_get_rx_bits_upper(struct COHPSK *coh); +void cohpsk_set_carrier_ampl(struct COHPSK *coh, int c, float ampl); + +#endif diff --git a/libcodec2-android/src/codec2/src/codec2_fdmdv.h b/libcodec2-android/src/codec2/src/codec2_fdmdv.h new file mode 100644 index 0000000..2b809d5 --- /dev/null +++ b/libcodec2-android/src/codec2/src/codec2_fdmdv.h @@ -0,0 +1,113 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: codec2_fdmdv.h + AUTHOR......: David Rowe + DATE CREATED: April 14 2012 + + A 1400 bit/s (nominal) Frequency Division Multiplexed Digital Voice + (FDMDV) modem. Used for digital audio over HF SSB. See + README_fdmdv.txt for more information, and fdmdv_mod.c and + fdmdv_demod.c for example usage. + + The name codec2_fdmdv.h is used to make it unique when "make + installed". + + References: + + [1] http://n1su.com/fdmdv/FDMDV_Docs_Rel_1_4b.pdf + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2012 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#ifndef __FDMDV__ +#define __FDMDV__ + +#include "comp.h" +#include "modem_stats.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* set up the calling convention for DLL function import/export for + WIN32 cross compiling */ + +#ifdef __CODEC2_WIN32__ +#ifdef __CODEC2_BUILDING_DLL__ +#define CODEC2_WIN32SUPPORT __declspec(dllexport) __stdcall +#else +#define CODEC2_WIN32SUPPORT __declspec(dllimport) __stdcall +#endif +#else +#define CODEC2_WIN32SUPPORT +#endif + +#define FDMDV_NC 14 /* default number of data carriers */ +#define FDMDV_NC_MAX 20 /* maximum number of data carriers */ +#define FDMDV_BITS_PER_FRAME 28 /* 20ms frames, for nominal 1400 bit/s */ +#define FDMDV_NOM_SAMPLES_PER_FRAME 160 /* modulator output samples/frame and nominal demod samples/frame */ + /* at 8000 Hz sample rate */ +#define FDMDV_MAX_SAMPLES_PER_FRAME 200 /* max demod samples/frame, use this to allocate storage */ +#define FDMDV_SCALE 1000 /* suggested scaling for 16 bit shorts */ +#define FDMDV_FCENTRE 1500 /* Centre frequency, Nc/2 carriers below this, Nc/2 carriers above (Hz) */ + +/* 8 to 48 kHz sample rate conversion */ + +#define FDMDV_OS 2 /* oversampling rate */ +#define FDMDV_OS_TAPS_16K 48 /* number of OS filter taps at 16kHz */ +#define FDMDV_OS_TAPS_8K (FDMDV_OS_TAPS_16K/FDMDV_OS) /* number of OS filter taps at 8kHz */ + +/* FDMDV states and stats structures */ + +struct FDMDV; + +struct FDMDV * fdmdv_create(int Nc); +void fdmdv_destroy(struct FDMDV *fdmdv_state); +void fdmdv_use_old_qpsk_mapping(struct FDMDV *fdmdv_state); +int fdmdv_bits_per_frame(struct FDMDV *fdmdv_state); +float fdmdv_get_fsep(struct FDMDV *fdmdv_state); +void fdmdv_set_fsep(struct FDMDV *fdmdv_state, float fsep); + +void fdmdv_mod(struct FDMDV *fdmdv_state, COMP tx_fdm[], int tx_bits[], int *sync_bit); +void fdmdv_demod(struct FDMDV *fdmdv_state, int rx_bits[], int *reliable_sync_bit, COMP rx_fdm[], int *nin); + +void fdmdv_get_test_bits(struct FDMDV *fdmdv_state, int tx_bits[]); +int fdmdv_error_pattern_size(struct FDMDV *fdmdv_state); +void fdmdv_put_test_bits(struct FDMDV *f, int *sync, short error_pattern[], int *bit_errors, int *ntest_bits, int rx_bits[]); + +void fdmdv_get_demod_stats(struct FDMDV *fdmdv_state, struct MODEM_STATS *stats); + +void fdmdv_8_to_16(float out16k[], float in8k[], int n); +void fdmdv_8_to_16_short(short out16k[], short in8k[], int n); +void fdmdv_16_to_8(float out8k[], float in16k[], int n); +void fdmdv_16_to_8_short(short out8k[], short in16k[], int n); + +void fdmdv_freq_shift(COMP rx_fdm_fcorr[], COMP rx_fdm[], float foff, COMP *foff_phase_rect, int nin); + +/* debug/development function(s) */ + +void fdmdv_dump_osc_mags(struct FDMDV *f); +void fdmdv_simulate_channel(float *sig_pwr_av, COMP samples[], int nin, float target_snr); + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/libcodec2-android/src/codec2/src/codec2_fft.c b/libcodec2-android/src/codec2/src/codec2_fft.c new file mode 100644 index 0000000..b72bd74 --- /dev/null +++ b/libcodec2-android/src/codec2/src/codec2_fft.c @@ -0,0 +1,158 @@ +/* + * codec2_fft.c + * + * Created on: 24.09.2016 + * Author: danilo + */ + +#include "codec2_fft.h" + +#include "debug_alloc.h" + +#ifdef USE_KISS_FFT +#include "_kiss_fft_guts.h" + +#else +#if 0 +// caching constants in RAM did not seem to have an effect on performance +// TODO: Decide what to with this code +#define FFT_INIT_CACHE_SIZE 4 +const arm_cfft_instance_f32* fft_init_cache[FFT_INIT_CACHE_SIZE]; + +static const arm_cfft_instance_f32* arm_fft_instance2ram(const arm_cfft_instance_f32* in) +{ + + arm_cfft_instance_f32* out = malloc(sizeof(arm_cfft_instance_f32)); + + if (out) { + memcpy(out,in,sizeof(arm_cfft_instance_f32)); + out->pBitRevTable = malloc(out->bitRevLength * sizeof(uint16_t)); + out->pTwiddle = malloc(out->fftLen * sizeof(float32_t)); + memcpy((void*)out->pBitRevTable,in->pBitRevTable,out->bitRevLength * sizeof(uint16_t)); + memcpy((void*)out->pTwiddle,in->pTwiddle,out->fftLen * sizeof(float32_t)); + } + return out; +} + + +static const arm_cfft_instance_f32* arm_fft_cache_get(const arm_cfft_instance_f32* romfft) +{ + const arm_cfft_instance_f32* retval = NULL; + static int used = 0; + for (int i = 0; fft_init_cache[i] != NULL && i < used; i++) + { + if (romfft->fftLen == fft_init_cache[i]->fftLen) + { + retval = fft_init_cache[i]; + break; + } + } + if (retval == NULL && used < FFT_INIT_CACHE_SIZE) + { + retval = arm_fft_instance2ram(romfft); + fft_init_cache[used++] = retval; + } + if (retval == NULL) + { + retval = romfft; + } + return retval; +} +#endif +#endif + +void codec2_fft_free(codec2_fft_cfg cfg) +{ +#ifdef USE_KISS_FFT + KISS_FFT_FREE(cfg); +#else + FREE(cfg); +#endif +} + +codec2_fft_cfg codec2_fft_alloc(int nfft, int inverse_fft, void* mem, size_t* lenmem) +{ + codec2_fft_cfg retval; +#ifdef USE_KISS_FFT + retval = kiss_fft_alloc(nfft, inverse_fft, mem, lenmem); +#else + retval = MALLOC(sizeof(codec2_fft_struct)); + retval->inverse = inverse_fft; + switch(nfft) + { + case 128: + retval->instance = &arm_cfft_sR_f32_len128; + break; + case 256: + retval->instance = &arm_cfft_sR_f32_len256; + break; + case 512: + retval->instance = &arm_cfft_sR_f32_len512; + break; +// case 1024: +// retval->instance = &arm_cfft_sR_f32_len1024; +// break; + default: + abort(); + } + // retval->instance = arm_fft_cache_get(retval->instance); +#endif + return retval; +} + +codec2_fftr_cfg codec2_fftr_alloc(int nfft, int inverse_fft, void* mem, size_t* lenmem) +{ + codec2_fftr_cfg retval; +#ifdef USE_KISS_FFT + retval = kiss_fftr_alloc(nfft, inverse_fft, mem, lenmem); +#else + retval = MALLOC(sizeof(codec2_fftr_struct)); + retval->inverse = inverse_fft; + retval->instance = MALLOC(sizeof(arm_rfft_fast_instance_f32)); + arm_rfft_fast_init_f32(retval->instance,nfft); + // memcpy(&retval->instance->Sint,arm_fft_cache_get(&retval->instance->Sint),sizeof(arm_cfft_instance_f32)); +#endif + return retval; +} +void codec2_fftr_free(codec2_fftr_cfg cfg) +{ +#ifdef USE_KISS_FFT + KISS_FFT_FREE(cfg); +#else + FREE(cfg->instance); + FREE(cfg); +#endif +} + +// there is a little overhead for inplace kiss_fft but this is +// on the powerful platforms like the Raspberry or even x86 PC based ones +// not noticeable +// the reduced usage of RAM and increased performance on STM32 platforms +// should be worth it. +void codec2_fft_inplace(codec2_fft_cfg cfg, codec2_fft_cpx* inout) +{ + +#ifdef USE_KISS_FFT + kiss_fft_cpx in[512]; + // decide whether to use the local stack based buffer for in + // or to allow kiss_fft to allocate RAM + // second part is just to play safe since first method + // is much faster and uses less RAM + if (cfg->nfft*sizeof(kiss_fft_cpx) <= 512) + { + memcpy(in,inout,cfg->nfft*sizeof(kiss_fft_cpx)); + kiss_fft(cfg, in, (kiss_fft_cpx*)inout); + } + else + { + kiss_fft(cfg, (kiss_fft_cpx*)inout, (kiss_fft_cpx*)inout); + } +#else + arm_cfft_f32(cfg->instance,(float*)inout,cfg->inverse,1); + if (cfg->inverse) + { + arm_scale_f32((float*)inout,cfg->instance->fftLen,(float*)inout,cfg->instance->fftLen*2); + } + +#endif +} diff --git a/libcodec2-android/src/codec2/src/codec2_fft.h b/libcodec2-android/src/codec2/src/codec2_fft.h new file mode 100644 index 0000000..c741202 --- /dev/null +++ b/libcodec2-android/src/codec2/src/codec2_fft.h @@ -0,0 +1,104 @@ +/* + * codec2_fft.h + * + * Created on: 17.09.2016 + * Author: danilo + */ + +#ifndef DRIVERS_FREEDV_CODEC2_FFT_H_ +#define DRIVERS_FREEDV_CODEC2_FFT_H_ + +#include +#include +#include +#include +#include + +#ifdef FDV_ARM_MATH + #include "fdv_arm_math.h" +#else + #define USE_KISS_FFT +#endif + +#include "defines.h" +#include "comp.h" + + +typedef COMP codec2_fft_cpx; +#include "kiss_fftr.h" + +#ifdef USE_KISS_FFT + #include "kiss_fft.h" + typedef kiss_fftr_cfg codec2_fftr_cfg; + typedef kiss_fft_cfg codec2_fft_cfg; + typedef kiss_fft_scalar codec2_fft_scalar; +#else + typedef float32_t codec2_fft_scalar; + typedef struct { + arm_rfft_fast_instance_f32* instance; + int inverse; + } codec2_fftr_struct; + + typedef codec2_fftr_struct* codec2_fftr_cfg; + + typedef struct { + const arm_cfft_instance_f32* instance; + int inverse; + } codec2_fft_struct; + typedef codec2_fft_struct* codec2_fft_cfg; +#endif + + + +static inline void codec2_fftr(codec2_fftr_cfg cfg, codec2_fft_scalar* in, codec2_fft_cpx* out) +{ + +#ifdef USE_KISS_FFT + kiss_fftr(cfg, in, (kiss_fft_cpx*)out); +#else + arm_rfft_fast_f32(cfg->instance,in,(float*)out,cfg->inverse); + out->imag = 0; // remove out[FFT_ENC/2]->real stored in out[0].imag +#endif +} + +static inline void codec2_fftri(codec2_fftr_cfg cfg, codec2_fft_cpx* in, codec2_fft_scalar* out) +{ +#ifdef USE_KISS_FFT + kiss_fftri(cfg, (kiss_fft_cpx*)in, out); +#else + arm_rfft_fast_f32(cfg->instance,(float*)in,out,cfg->inverse); + // arm_scale_f32(out,cfg->instance->fftLenRFFT,out,cfg->instance->fftLenRFFT); +#endif + +} + +codec2_fft_cfg codec2_fft_alloc(int nfft, int inverse_fft, void* mem, size_t* lenmem); +codec2_fftr_cfg codec2_fftr_alloc(int nfft, int inverse_fft, void* mem, size_t* lenmem); +void codec2_fft_free(codec2_fft_cfg cfg); +void codec2_fftr_free(codec2_fftr_cfg cfg); + + +static inline void codec2_fft(codec2_fft_cfg cfg, codec2_fft_cpx* in, codec2_fft_cpx* out) +{ + +#ifdef USE_KISS_FFT + kiss_fft(cfg, (kiss_fft_cpx*)in, (kiss_fft_cpx*)out); +#else + memcpy(out,in,cfg->instance->fftLen*2*sizeof(float)); + arm_cfft_f32(cfg->instance,(float*)out,cfg->inverse, 1); + // TODO: this is not nice, but for now required to keep changes minimal + // however, since main goal is to reduce the memory usage + // we should convert to an in place interface + // on PC like platforms the overhead of using the "inplace" kiss_fft calls + // is neglectable compared to the gain in memory usage on STM32 platforms + if (cfg->inverse) + { + arm_scale_f32((float*)out,cfg->instance->fftLen,(float*)out,cfg->instance->fftLen*2); + } +#endif +} + +void codec2_fft_inplace(codec2_fft_cfg cfg, codec2_fft_cpx* inout); + + +#endif diff --git a/libcodec2-android/src/codec2/src/codec2_fifo.c b/libcodec2-android/src/codec2/src/codec2_fifo.c new file mode 100644 index 0000000..a2d3c30 --- /dev/null +++ b/libcodec2-android/src/codec2/src/codec2_fifo.c @@ -0,0 +1,150 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: codec2_fifo.c + AUTHOR......: David Rowe + DATE CREATED: Oct 15 2012 + + A FIFO design useful in gluing the FDMDV modem and codec together in + integrated applications. The unittest/tfifo indicates these + routines are thread safe without the need for syncronisation + object, e.g. a different thread can read and write to a fifo at the + same time. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2012 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include +#include +#include "codec2_fifo.h" + +struct FIFO { + short *buf; + short *pin; + short *pout; + int nshort; +}; + +// standard create function +struct FIFO *codec2_fifo_create(int nshort) { + short *buf = (short*)malloc(sizeof(short)*nshort); + assert(buf != NULL); + return codec2_fifo_create_buf(nshort, buf); +} + +// alternate create function where buffer is externally supplied +struct FIFO *codec2_fifo_create_buf(int nshort, short* buf) { + struct FIFO *fifo; + assert(buf != NULL); + fifo = (struct FIFO *)malloc(sizeof(struct FIFO)); + assert(fifo != NULL); + + fifo->buf = buf; + fifo->pin = fifo->buf; + fifo->pout = fifo->buf; + fifo->nshort = nshort; + + return fifo; +} + +void codec2_fifo_destroy(struct FIFO *fifo) { + assert(fifo != NULL); + free(fifo->buf); + free(fifo); +} + +int codec2_fifo_write(struct FIFO *fifo, short data[], int n) { + int i; + short *pdata; + short *pin = fifo->pin; + + assert(fifo != NULL); + assert(data != NULL); + + if (n > codec2_fifo_free(fifo)) { + return -1; + } + else { + + /* This could be made more efficient with block copies + using memcpy */ + + pdata = data; + for(i=0; ibuf + fifo->nshort)) + pin = fifo->buf; + } + fifo->pin = pin; + } + + return 0; +} + +int codec2_fifo_read(struct FIFO *fifo, short data[], int n) +{ + int i; + short *pdata; + short *pout = fifo->pout; + + assert(fifo != NULL); + assert(data != NULL); + + if (n > codec2_fifo_used(fifo)) { + return -1; + } + else { + + /* This could be made more efficient with block copies + using memcpy */ + + pdata = data; + for(i=0; ibuf + fifo->nshort)) + pout = fifo->buf; + } + fifo->pout = pout; + } + + return 0; +} + +int codec2_fifo_used(const struct FIFO * const fifo) +{ + short *pin = fifo->pin; + short *pout = fifo->pout; + unsigned int used; + + assert(fifo != NULL); + if (pin >= pout) + used = pin - pout; + else + used = fifo->nshort + (unsigned int)(pin - pout); + + return used; +} + +int codec2_fifo_free(const struct FIFO * const fifo) +{ + // available storage is one less than nshort as prd == pwr + // is reserved for empty rather than full + + return fifo->nshort - codec2_fifo_used(fifo) - 1; +} diff --git a/libcodec2-android/src/codec2/src/codec2_fifo.h b/libcodec2-android/src/codec2/src/codec2_fifo.h new file mode 100644 index 0000000..57e3b96 --- /dev/null +++ b/libcodec2-android/src/codec2/src/codec2_fifo.h @@ -0,0 +1,57 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: codec2_fifo.h + AUTHOR......: David Rowe + DATE CREATED: Oct 15 2012 + + A FIFO design useful in gluing the FDMDV modem and codec together in + integrated applications. + + The name codec2_fifo.h is used to make it unique when "make + installed". + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2012 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#ifndef __FIFO__ +#define __FIFO__ + +#ifdef __cplusplus +extern "C" { +#endif + +struct FIFO; + +struct FIFO *codec2_fifo_create(int nshort); +struct FIFO *codec2_fifo_create_buf(int nshort, short* buf); +void codec2_fifo_destroy(struct FIFO *fifo); +int codec2_fifo_write(struct FIFO *fifo, short data[], int n); +int codec2_fifo_read(struct FIFO *fifo, short data[], int n); + +/* Return the number of bytes stored in the FIFO */ +int codec2_fifo_used(const struct FIFO * const fifo); + +/* Return the space available in the FIFO */ +int codec2_fifo_free(const struct FIFO * const fifo); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/libcodec2-android/src/codec2/src/codec2_fm.h b/libcodec2-android/src/codec2/src/codec2_fm.h new file mode 100644 index 0000000..36faece --- /dev/null +++ b/libcodec2-android/src/codec2/src/codec2_fm.h @@ -0,0 +1,53 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: codec2_fm.h + AUTHOR......: David Rowe + DATE CREATED: February 2015 + + Functions that implement analog FM, see also octave/fm.m. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2015 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#ifndef __CODEC2_FM__ +#define __CODEC2_FM__ + +#include "comp.h" + +struct FM { + float Fs; /* setme: sample rate */ + float fm_max; /* setme: maximum modulation frequency */ + float fd; /* setme: maximum deviation */ + float fc; /* setme: carrier frequency */ + COMP *rx_bb; + COMP rx_bb_filt_prev; + float *rx_dem_mem; + float tx_phase; + int nsam; + COMP lo_phase; +}; + +struct FM *fm_create(int nsam); +void fm_destroy(struct FM *fm_states); +void fm_demod(struct FM *fm, float rx_out[], float rx[]); +void fm_mod(struct FM *fm, float tx_in[], float tx_out[]); +void fm_mod_comp(struct FM *fm_states, float tx_in[], COMP tx_out[]); + +#endif + diff --git a/libcodec2-android/src/codec2/src/codec2_internal.h b/libcodec2-android/src/codec2/src/codec2_internal.h new file mode 100644 index 0000000..40edc92 --- /dev/null +++ b/libcodec2-android/src/codec2/src/codec2_internal.h @@ -0,0 +1,108 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: codec2_internal.h + AUTHOR......: David Rowe + DATE CREATED: April 16 2012 + + Header file for Codec2 internal states, exposed via this header + file to assist in testing. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2012 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#ifndef __CODEC2_INTERNAL__ +#define __CODEC2_INTERNAL__ + +#include "codec2_fft.h" +#include "newamp1.h" +#include "newamp2.h" + +struct CODEC2 { + int mode; + C2CONST c2const; + int Fs; + int n_samp; + int m_pitch; + codec2_fft_cfg fft_fwd_cfg; /* forward FFT config */ + codec2_fftr_cfg fftr_fwd_cfg; /* forward real FFT config */ + float *w; /* [m_pitch] time domain hamming window */ + float W[FFT_ENC]; /* DFT of w[] */ + float *Pn; /* [2*n_samp] trapezoidal synthesis window */ + float *bpf_buf; /* buffer for band pass filter */ + float *Sn; /* [m_pitch] input speech */ + float hpf_states[2]; /* high pass filter states */ + void *nlp; /* pitch predictor states */ + int gray; /* non-zero for gray encoding */ + + codec2_fftr_cfg fftr_inv_cfg; /* inverse FFT config */ + float *Sn_; /* [2*n_samp] synthesised output speech */ + float ex_phase; /* excitation model phase track */ + float bg_est; /* background noise estimate for post filter */ + float prev_f0_enc; /* previous frame's f0 estimate */ + MODEL prev_model_dec; /* previous frame's model parameters */ + float prev_lsps_dec[LPC_ORD]; /* previous frame's LSPs */ + float prev_e_dec; /* previous frame's LPC energy */ + + int lpc_pf; /* LPC post filter on */ + int bass_boost; /* LPC post filter bass boost */ + float beta; /* LPC post filter parameters */ + float gamma; + + float xq_enc[2]; /* joint pitch and energy VQ states */ + float xq_dec[2]; + + int smoothing; /* enable smoothing for channels with errors */ + float *softdec; /* optional soft decn bits from demod */ + + /* newamp1 states */ + + float rate_K_sample_freqs_kHz[NEWAMP1_K]; + float prev_rate_K_vec_[NEWAMP1_K]; + float Wo_left; + int voicing_left; + codec2_fft_cfg phase_fft_fwd_cfg; + codec2_fft_cfg phase_fft_inv_cfg; + float se; /* running sum of squared error */ + unsigned int nse; /* number of terms in sum */ + float *user_rate_K_vec_no_mean_; /* optional, user supplied vector for quantisation experiments */ + int post_filter_en; + float eq[NEWAMP1_K]; /* optional equaliser */ + int eq_en; + + /*newamp2 states (also uses newamp1 states )*/ + float energy_prev; + float n2_rate_K_sample_freqs_kHz[NEWAMP2_K]; + float n2_prev_rate_K_vec_[NEWAMP2_K]; + float n2_pwb_rate_K_sample_freqs_kHz[NEWAMP2_16K_K]; + float n2_pwb_prev_rate_K_vec_[NEWAMP2_16K_K]; + + /* used to dump features for deep learning experiments */ + FILE *fmlfeat, *fmlmodel; + + /* encode/decode function pointers for the selected mode */ + void (*encode)(struct CODEC2 *c2, unsigned char * bits, short speech[]); + void (*decode)(struct CODEC2 *c2, short speech[], const unsigned char * bits); + void (*decode_ber)(struct CODEC2 *c2, short speech[], const unsigned char * bits, float ber_est); +}; + +// test and debug +void analyse_one_frame(struct CODEC2 *c2, MODEL *model, short speech[]); +void synthesise_one_frame(struct CODEC2 *c2, short speech[], MODEL *model, + COMP Aw[], float gain); +#endif diff --git a/libcodec2-android/src/codec2/src/codec2_ofdm.h b/libcodec2-android/src/codec2/src/codec2_ofdm.h new file mode 100644 index 0000000..d9f23d2 --- /dev/null +++ b/libcodec2-android/src/codec2/src/codec2_ofdm.h @@ -0,0 +1,107 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: codec2_ofdm.h + AUTHORS.....: David Rowe & Steve Sampson + DATE CREATED: June 2017 + + External user references to the modem library. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2017 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#ifndef CODEC2_OFDM_H +#define CODEC2_OFDM_H + +/* Includes */ + +#include +#include + +#include "comp.h" +#include "modem_stats.h" + +/* Defines */ + +#ifdef __cplusplus +extern "C" { +#endif + +#define OFDM_AMP_SCALE (2E5*1.1491/1.06) /* use to scale to 16 bit short */ +#define OFDM_CLIP (32767*0.35) /* experimentally derived constant to reduce PAPR to about 8dB */ + +#define UN_SYNC 0 /* Used with the ofdm_set_sync() */ +#define AUTO_SYNC 1 +#define MANUAL_SYNC 2 + +#define AUTO_PHASE_EST 0 +#define LOCKED_PHASE_EST 1 + +#define LOW_BW 0 +#define HIGH_BW 1 + +struct OFDM_CONFIG; +struct OFDM; + +/* create and destroy modem states */ + +struct OFDM *ofdm_create(const struct OFDM_CONFIG * config); +void ofdm_destroy(struct OFDM *); + +/* signal processing */ + +void ofdm_mod(struct OFDM *, COMP *, const int *); +void ofdm_demod(struct OFDM *, int *, COMP *); +void ofdm_demod_shorts(struct OFDM *, int *, short *, float); +int ofdm_sync_search(struct OFDM *, COMP *); +int ofdm_sync_search_shorts(struct OFDM *, short *, float); +void ofdm_sync_state_machine(struct OFDM *, uint8_t *); +void ofdm_sync_state_machine2(struct OFDM *, uint8_t *); + +/* getters */ + +struct OFDM_CONFIG *ofdm_get_config_param(struct OFDM *ofdm); +int ofdm_get_nin(struct OFDM *); +int ofdm_get_samples_per_frame(struct OFDM *ofdm); +int ofdm_get_samples_per_packet(struct OFDM *ofdm); +int ofdm_get_max_samples_per_frame(struct OFDM *ofdm); +int ofdm_get_bits_per_frame(struct OFDM *ofdm); +int ofdm_get_bits_per_packet(struct OFDM *ofdm); +void ofdm_get_demod_stats(struct OFDM *ofdm, struct MODEM_STATS *stats); +int ofdm_get_phase_est_bandwidth_mode(struct OFDM *ofdm); + +/* option setters */ + +void ofdm_set_verbose(struct OFDM *, int); +void ofdm_set_timing_enable(struct OFDM *, bool); +void ofdm_set_foff_est_enable(struct OFDM *, bool); +void ofdm_set_phase_est_enable(struct OFDM *, bool); +void ofdm_set_phase_est_bandwidth_mode(struct OFDM *ofdm, int val); +void ofdm_set_off_est_hz(struct OFDM *, float); +void ofdm_set_sync(struct OFDM *, int); +void ofdm_set_tx_bpf(struct OFDM *, bool); +void ofdm_set_dpsk(struct OFDM *ofdm, bool val); + +void ofdm_print_info(struct OFDM *); + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/libcodec2-android/src/codec2/src/cohpsk.c b/libcodec2-android/src/codec2/src/cohpsk.c new file mode 100644 index 0000000..79b2fb2 --- /dev/null +++ b/libcodec2-android/src/codec2/src/cohpsk.c @@ -0,0 +1,1310 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: cohpsk.c + AUTHOR......: David Rowe + DATE CREATED: March 2015 + + Functions that implement a coherent PSK FDM modem. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2015 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +/*---------------------------------------------------------------------------*\ + + INCLUDES + +\*---------------------------------------------------------------------------*/ + +#include +#include +#include +#include +#include + +#include "codec2_cohpsk.h" +#include "cohpsk_defs.h" +#include "cohpsk_internal.h" +#include "fdmdv_internal.h" +#include "pilots_coh.h" +#include "comp_prim.h" +#include "kiss_fft.h" +#include "linreg.h" +#include "rn_coh.h" +#include "test_bits_coh.h" + +#include "debug_alloc.h" + +static COMP qpsk_mod[] = { + { 1.0, 0.0}, + { 0.0, 1.0}, + { 0.0,-1.0}, + {-1.0, 0.0} +}; + +static int sampling_points[] = {0, 1, 6, 7}; + +void corr_with_pilots(float *corr_out, float *mag_out, struct COHPSK *coh, int t, float f_fine); +void update_ct_symb_buf(COMP ct_symb_buf[][COHPSK_NC*ND], COMP ch_symb[][COHPSK_NC*ND]); + +/*---------------------------------------------------------------------------*\ + + FUNCTIONS + +\*---------------------------------------------------------------------------*/ + + +/*--------------------------------------------------------------------------* \ + + FUNCTION....: cohpsk_create + AUTHOR......: David Rowe + DATE CREATED: Marcg 2015 + + Create and initialise an instance of the modem. Returns a pointer + to the modem states or NULL on failure. One set of states is + sufficient for a full duplex modem. + +\*---------------------------------------------------------------------------*/ + +struct COHPSK *cohpsk_create(void) +{ + struct COHPSK *coh; + struct FDMDV *fdmdv; + int r,c,p,i; + float freq_hz; + + assert(COHPSK_NC == PILOTS_NC); + assert(COHPSK_NOM_SAMPLES_PER_FRAME == (COHPSK_M*NSYMROWPILOT)); + assert(COHPSK_MAX_SAMPLES_PER_FRAME == (COHPSK_M*NSYMROWPILOT+COHPSK_M/P)); + assert(COHPSK_ND == ND); + assert(COHPSK_NSYM == NSYM); /* as we want to use the tx sym mem on fdmdv */ + assert(COHPSK_NT == NT); + + coh = (struct COHPSK*)MALLOC(sizeof(struct COHPSK)); + if (coh == NULL) + return NULL; + + /* set up buffer of tx pilot symbols for coh demod on rx */ + + for(r=0; r<2*NPILOTSFRAME; ) { + for(p=0; ppilot2[r][c] = pilots_coh[p][c]; + } + } + } + + /* Clear symbol buffer memory */ + + for (r=0; rct_symb_buf[r][c].real = 0.0; + coh->ct_symb_buf[r][c].imag = 0.0; + } + } + + coh->ff_phase.real = 1.0; coh->ff_phase.imag = 0.0; + coh->sync = 0; + coh->frame = 0; + coh->ratio = 0.0; + coh->nin = COHPSK_M; + + /* clear sync window buffer */ + + for (i=0; ich_fdm_frame_buf[i].real = 0.0; + coh->ch_fdm_frame_buf[i].imag = 0.0; + } + + /* set up fdmdv states so we can use those modem functions */ + + fdmdv = fdmdv_create(COHPSK_NC*ND - 1); + fdmdv->fsep = COHPSK_RS*(1.0 + COHPSK_EXCESS_BW); + for(c=0; cphase_tx[c].real = 1.0; + fdmdv->phase_tx[c].imag = 0.0; + + /* note non-linear carrier spacing to help PAPR, works v well in conjunction with CLIP */ + + freq_hz = fdmdv->fsep*( -(COHPSK_NC*ND)/2 - 0.5 + pow(c + 1.0, 0.98) ); + + fdmdv->freq[c].real = cosf(2.0*M_PI*freq_hz/COHPSK_FS); + fdmdv->freq[c].imag = sinf(2.0*M_PI*freq_hz/COHPSK_FS); + fdmdv->freq_pol[c] = 2.0*M_PI*freq_hz/COHPSK_FS; + + //printf("c: %d %f %f\n",c,freq_hz,fdmdv->freq_pol[c]); + for(i=0; irx_filter_memory[c][i].real = 0.0; + coh->rx_filter_memory[c][i].imag = 0.0; + } + + /* optional per-carrier amplitude weighting for testing */ + + coh->carrier_ampl[c] = 1.0; + } + fdmdv->fbb_rect.real = cosf(2.0*PI*FDMDV_FCENTRE/COHPSK_FS); + fdmdv->fbb_rect.imag = sinf(2.0*PI*FDMDV_FCENTRE/COHPSK_FS); + fdmdv->fbb_pol = 2.0*PI*FDMDV_FCENTRE/COHPSK_FS; + + coh->fdmdv = fdmdv; + + coh->sig_rms = coh->noise_rms = 0.0; + + for(c=0; crx_symb[r][c].real = 0.0; + coh->rx_symb[r][c].imag = 0.0; + } + } + + coh->verbose = 0; + + /* disable optional logging by default */ + + coh->rx_baseband_log = NULL; + coh->rx_baseband_log_col_index = 0; + coh->rx_filt_log = NULL; + coh->rx_filt_log_col_index = 0; + coh->ch_symb_log = NULL; + coh->ch_symb_log_r = 0; + coh->rx_timing_log = NULL; + coh->rx_timing_log_index = 0; + + /* test frames */ + + coh->ptest_bits_coh_tx = coh->ptest_bits_coh_rx[0] = coh->ptest_bits_coh_rx[1] = (int*)test_bits_coh; + coh->ptest_bits_coh_end = (int*)test_bits_coh + sizeof(test_bits_coh)/sizeof(int); + + return coh; +} + + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: cohpsk_destroy + AUTHOR......: David Rowe + DATE CREATED: March 2015 + + Destroy an instance of the modem. + +\*---------------------------------------------------------------------------*/ + +void cohpsk_destroy(struct COHPSK *coh) +{ + fdmdv_destroy(coh->fdmdv); + assert(coh != NULL); + FREE(coh); +} + + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: bits_to_qpsk_symbols() + AUTHOR......: David Rowe + DATE CREATED: March 2015 + + Rate Rs modulator. Maps bits to parallel DQPSK symbols and inserts pilot symbols. + +\*---------------------------------------------------------------------------*/ + +void bits_to_qpsk_symbols(COMP tx_symb[][COHPSK_NC*ND], int tx_bits[], int nbits) +{ + int i, r, c, p_r, data_r, d, diversity; + short bits; + + /* check allowed number of bits supplied matches number of QPSK + symbols in the frame */ + + assert( (NSYMROW*COHPSK_NC*2 == nbits) || (NSYMROW*COHPSK_NC*2*ND == nbits)); + + /* if we input twice as many bits we don't do diversity */ + + if (NSYMROW*COHPSK_NC*2 == nbits) { + diversity = 1; /* diversity mode */ + } + else { + diversity = 2; /* twice as many bits, non diversity mode */ + } + + /* + Insert two rows of Nc pilots at beginning of data frame. + + Organise QPSK symbols into a NSYMBROWS rows by PILOTS_NC*ND cols matrix, + each column is a carrier, time flows down the cols...... + + Note: the "& 0x1" prevents and non binary tx_bits[] screwing up + our lives. Call me defensive. + + sqrtf(ND) term ensures the same energy/symbol for different + diversity factors. + */ + + r = 0; + for(p_r=0; p_r<2; p_r++) { + for(c=0; cpilot2[p][pc], ct_symb_buf[sampling_points[p]][c]); + } + + linreg(&m, &b, x, y, NPILOTSFRAME+2); + for(r=0; rphi_[r][c] = atan2(yfit.imag, yfit.real); + } + + /* amplitude estimation */ + + mag = 0.0; + for(p=0; pamp_[r][c] = amp_; + } + } + + /* now correct phase of data symbols */ + + for(c=0; cphi_[r][c]); phi_rect.imag = -sinf(coh->phi_[r][c]); + coh->rx_symb[r][c] = cmult(ct_symb_buf[NPILOTSFRAME + r][c], phi_rect); + i = c*NSYMROW + r; + rx_symb_linear[i] = coh->rx_symb[r][c]; + } + } + + /* and finally optional diversity combination, note output is soft decn a "1" is < 0 */ + + for(c=0; crx_symb[r][c]; + for (d=1; drx_symb[r][c + COHPSK_NC*d]); + } + rot = cmult(div_symb, pi_on_4); + i = c*NSYMROW + r; + rx_bits[2*i+1] = rot.real; + rx_bits[2*i] = rot.imag; + + /* demodulate bits from upper and lower carriers separately for test purposes */ + + assert(ND == 2); + + i = c*NSYMROW + r; + rot = cmult(coh->rx_symb[r][c], pi_on_4); + coh->rx_bits_lower[2*i+1] = rot.real; + coh->rx_bits_lower[2*i] = rot.imag; + rot = cmult(coh->rx_symb[r][c + COHPSK_NC], pi_on_4); + coh->rx_bits_upper[2*i+1] = rot.real; + coh->rx_bits_upper[2*i] = rot.imag; + } + } + + + /* estimate RMS signal and noise */ + + mag = 0.0; + for(i=0; isig_rms = mag/(NSYMROW*COHPSK_NC*ND); + + sum_x = 0; + sum_xx = 0; + n = 0; + for (i=0; i coh->sig_rms) { + sum_x += s.imag; + sum_xx += s.imag*s.imag; + n++; + } + } + + noise_var = 0; + if (n > 1) { + noise_var = (n*sum_xx - sum_x*sum_x)/(n*(n-1)); + } + coh->noise_rms = sqrtf(noise_var); + +} + + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: tx_filter_and_upconvert_coh() + AUTHOR......: David Rowe + DATE CREATED: May 2015 + + Given NC symbols construct M samples (1 symbol) of NC filtered + and upconverted symbols. + + TODO: work out a way to merge with fdmdv version, e.g. run time define M/NSYM, + and run unittests on fdmdv and cohpsk modem afterwards. + +\*---------------------------------------------------------------------------*/ + +void tx_filter_and_upconvert_coh(COMP tx_fdm[], int Nc, const COMP tx_symbols[], + COMP tx_filter_memory[COHPSK_NC*ND][COHPSK_NSYM], + COMP phase_tx[], COMP freq[], + COMP *fbb_phase, COMP fbb_rect) +{ + int c; + int i,j,k; + float acc; + COMP gain; + COMP tx_baseband; + COMP two = {2.0, 0.0}; + float mag; + + gain.real = sqrtf(2.0)/2.0; + gain.imag = 0.0; + + for(i=0; ireal /= mag; + fbb_phase->imag /= mag; + + /* shift memory, inserting zeros at end */ + + for(i=0; ict_symb_buf[t+sampling_points[p]][c]); + pc = c % COHPSK_NC; + acorr = cadd(acorr, fcmult(coh->pilot2[p][pc], f_corr)); + mag += cabsolute(f_corr); + } + corr += cabsolute(acorr); + } + + *corr_out = corr; + *mag_out = mag; +} + + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: frame_sync_fine_freq_est() + AUTHOR......: David Rowe + DATE CREATED: April 2015 + + Returns an estimate of frame sync (coarse timing) offset and fine + frequency offset, advances to next sync state if we have a reliable + match for frame sync. + +\*---------------------------------------------------------------------------*/ + +void frame_sync_fine_freq_est(struct COHPSK *coh, COMP ch_symb[][COHPSK_NC*ND], int sync, int *next_sync) +{ + int t; + float f_fine, mag, max_corr, max_mag, corr; + + update_ct_symb_buf(coh->ct_symb_buf, ch_symb); + + /* sample pilots at start of this frame and start of next frame */ + + if (sync == 0) { + + /* sample correlation over 2D grid of time and fine freq points */ + + max_corr = max_mag = 0; + for (f_fine=-20; f_fine<=20; f_fine+=0.25) { + for (t=0; t= max_corr) { + max_corr = corr; + max_mag = mag; + coh->ct = t; + coh->f_fine_est = f_fine; + } + } + } + + + coh->ff_rect.real = cosf(coh->f_fine_est*2.0*M_PI/COHPSK_RS); + coh->ff_rect.imag = -sinf(coh->f_fine_est*2.0*M_PI/COHPSK_RS); + if (coh->verbose) + fprintf(stderr, " [%d] fine freq f: %6.2f max_ratio: %f ct: %d\n", coh->frame, coh->f_fine_est, max_corr/max_mag, coh->ct); + + if (max_corr/max_mag > 0.9) { + if (coh->verbose) + fprintf(stderr, " [%d] encouraging sync word!\n", coh->frame); + coh->sync_timer = 0; + *next_sync = 1; + } + else { + *next_sync = 0; + } + coh->ratio = max_corr/max_mag; + } +} + + +void update_ct_symb_buf(COMP ct_symb_buf[][COHPSK_NC*ND], COMP ch_symb[][COHPSK_NC*ND]) +{ + int r, c, i; + + /* update memory in symbol buffer */ + + for(r=0; rct, coh->f_fine_est); + coh->ratio = fabsf(corr)/mag; + + // printf("%f\n", cabsolute(corr)/mag); + + if (fabsf(corr)/mag < 0.8) + coh->sync_timer++; + else + coh->sync_timer = 0; + + if (coh->sync_timer == 10) { + if (coh->verbose) + fprintf(stderr," [%d] lost sync ....\n", coh->frame); + next_sync = 0; + } + } + + sync = next_sync; + + return sync; +} + + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: cohpsk_mod() + AUTHOR......: David Rowe + DATE CREATED: 5/4/2015 + + COHPSK modulator, take a frame of COHPSK_BITS_PER_FRAME or + 2*COHPSK_BITS_PER_FRAME bits and generates a frame of + COHPSK_NOM_SAMPLES_PER_FRAME modulated symbols. + + if nbits == COHPSK_BITS_PER_FRAME, diveristy mode is used, if nbits + == 2*COHPSK_BITS_PER_FRAME diversity mode is not used. + + The output signal is complex to support single sided frequency + shifting, for example when testing frequency offsets in channel + simulation. + +\*---------------------------------------------------------------------------*/ + +void cohpsk_mod(struct COHPSK *coh, COMP tx_fdm[], int tx_bits[], int nbits) +{ + struct FDMDV *fdmdv = coh->fdmdv; + COMP tx_symb[NSYMROWPILOT][COHPSK_NC*ND]; + COMP tx_onesym[COHPSK_NC*ND]; + int r,c; + + bits_to_qpsk_symbols(tx_symb, tx_bits, nbits); + + for(r=0; rcarrier_ampl[c], tx_symb[r][c]); + tx_filter_and_upconvert_coh(&tx_fdm[r*COHPSK_M], COHPSK_NC*ND , tx_onesym, fdmdv->tx_filter_memory, + fdmdv->phase_tx, fdmdv->freq, &fdmdv->fbb_phase_tx, fdmdv->fbb_rect); + } +} + + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: cohpsk_clip() + AUTHOR......: David Rowe + DATE CREATED: May 2015 + + Hard clips a cohpsk modulator signal to improve PAPR, CLIP threshold + hard coded and will need to be changed if NC*ND does. + +\*---------------------------------------------------------------------------*/ + +void cohpsk_clip(COMP tx_fdm[], float clip_thresh, int n) +{ + COMP sam; + float mag; + int i; + + for(i=0; i clip_thresh) { + sam = fcmult(clip_thresh/mag, sam); + } + tx_fdm[i] = sam; + } + } + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: fdm_downconvert_coh + AUTHOR......: David Rowe + DATE CREATED: May 2015 + + Frequency shift each modem carrier down to NC baseband signals. + + TODO: try to combine with fdmdv version, carefully re-test fdmdv modem. + +\*---------------------------------------------------------------------------*/ + +void fdm_downconvert_coh(COMP rx_baseband[COHPSK_NC][COHPSK_M+COHPSK_M/P], int Nc, COMP rx_fdm[], COMP phase_rx[], COMP freq[], int nin) +{ + int i,c; + float mag; + + /* maximum number of input samples to demod */ + + assert(nin <= (COHPSK_M+COHPSK_M/P)); + + /* downconvert */ + + for (c=0; creal /= mag; + foff_phase_rect->imag /= mag; +} + + +void rate_Fs_rx_processing(struct COHPSK *coh, COMP ch_symb[][COHPSK_NC*ND], COMP ch_fdm_frame[], float *f_est, int nsymb, int nin, int freq_track) +{ + struct FDMDV *fdmdv = coh->fdmdv; + int r, c, i, ch_fdm_frame_index; + COMP rx_fdm_frame_bb[COHPSK_M+COHPSK_M/P]; + COMP rx_baseband[COHPSK_NC*ND][COHPSK_M+COHPSK_M/P]; + COMP rx_filt[COHPSK_NC*ND][P+1]; + float env[NT*P], rx_timing; + COMP rx_onesym[COHPSK_NC*ND]; + float beta, g; + COMP adiff, amod_strip, mod_strip; + + ch_fdm_frame_index = 0; + rx_timing = 0; + + for (r=0; rfbb_phase_rx, nin); + ch_fdm_frame_index += nin; + fdm_downconvert_coh(rx_baseband, COHPSK_NC*ND, rx_fdm_frame_bb, fdmdv->phase_rx, fdmdv->freq, nin); + rx_filter_coh(rx_filt, COHPSK_NC*ND, rx_baseband, coh->rx_filter_memory, nin); + rx_timing = rx_est_timing(rx_onesym, fdmdv->Nc, rx_filt, fdmdv->rx_filter_mem_timing, env, nin, COHPSK_M); + + for(c=0; cNc+1; c++) { + //printf("rx_onesym[%d] %f %f prev_rx_symbols[%d] %f %f\n", c, rx_onesym[c].real, rx_onesym[c].imag, + // fdmdv->prev_rx_symbols[c].real, fdmdv->prev_rx_symbols[c].imag); + adiff = cmult(rx_onesym[c], cconj(fdmdv->prev_rx_symbols[c])); + fdmdv->prev_rx_symbols[c] = rx_onesym[c]; + + /* 4th power strips QPSK modulation, by multiplying phase by 4 + Using the abs value of the real coord was found to help + non-linear issues when noise power was large. */ + + amod_strip = cmult(adiff, adiff); + amod_strip = cmult(amod_strip, amod_strip); + amod_strip.real = fabsf(amod_strip.real); + mod_strip = cadd(mod_strip, amod_strip); + } + //printf("modstrip: %f %f\n", mod_strip.real, mod_strip.imag); + + /* loop filter made up of 1st order IIR plus integrator. Integerator + was found to be reqd */ + + fdmdv->foff_filt = (1.0-beta)*fdmdv->foff_filt + beta*atan2(mod_strip.imag, mod_strip.real); + //printf("foff_filt: %f angle: %f\n", fdmdv->foff_filt, atan2(mod_strip.imag, mod_strip.real)); + *f_est += g*fdmdv->foff_filt; + } + + /* Optional logging used for testing against Octave version */ + + if (coh->rx_baseband_log) { + assert(nin <= (COHPSK_M+COHPSK_M/P)); + for(c=0; crx_baseband_log[c*coh->rx_baseband_log_col_sz + coh->rx_baseband_log_col_index + i] = rx_baseband[c][i]; + } + } + coh->rx_baseband_log_col_index += nin; + assert(coh->rx_baseband_log_col_index <= coh->rx_baseband_log_col_sz); + } + + if (coh->rx_filt_log) { + for(c=0; crx_filt_log[c*coh->rx_filt_log_col_sz + coh->rx_filt_log_col_index + i] = rx_filt[c][i]; + } + } + coh->rx_filt_log_col_index += nin/(COHPSK_M/P); + } + + if (coh->ch_symb_log) { + for(c=0; cch_symb_log[coh->ch_symb_log_r*COHPSK_NC*ND + c] = ch_symb[r][c]; + } + coh->ch_symb_log_r++; + } + + if (coh->rx_timing_log) { + coh->rx_timing_log[coh->rx_timing_log_index] = rx_timing; + coh->rx_timing_log_index++; + //printf("rx_timing_log_index: %d\n", coh->rx_timing_log_index); + } + + /* we only allow a timing shift on one symbol per frame */ + + if (nin != COHPSK_M) + nin = COHPSK_M; + } + + coh->rx_timing = rx_timing; +} + + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: cohpsk_demod() + AUTHOR......: David Rowe + DATE CREATED: 5/4/2015 + + COHPSK demodulator, takes an array of (nominally) nin_frame = + COHPSK_NOM_SAMPLES_PER_FRAME modulated samples, returns an array of + COHPSK_BITS_PER_FRAME bits. + + The input signal is complex to support single sided frequency shifting + before the demod input (e.g. click to tune feature). + +\*---------------------------------------------------------------------------*/ + +void cohpsk_demod(struct COHPSK *coh, float rx_bits[], int *sync_good, COMP rx_fdm[], int *nin_frame) +{ + COMP ch_symb[NSW*NSYMROWPILOT][COHPSK_NC*ND]; + int i, j, sync, anext_sync, next_sync, nin, r, c; + float max_ratio, f_est; + + assert(*nin_frame <= COHPSK_MAX_SAMPLES_PER_FRAME); + + next_sync = sync = coh->sync; + + for (i=0; ich_fdm_frame_buf[i] = coh->ch_fdm_frame_buf[i+*nin_frame]; + //printf("nin_frame: %d i: %d i+nin_frame: %d\n", *nin_frame, i, i+*nin_frame); + for (j=0; ich_fdm_frame_buf[i] = rx_fdm[j]; + //printf("i: %d j: %d rx_fdm[0]: %f %f\n", i,j, rx_fdm[0].real, rx_fdm[0].imag); + + /* if out of sync do Initial Freq offset estimation using NSW frames to flush out filter memories */ + + if (sync == 0) { + + /* we can test +/- 20Hz, so we break this up into 3 tests to cover +/- 60Hz */ + + max_ratio = 0.0; + f_est = 0.0; + for (coh->f_est = FDMDV_FCENTRE-40.0; coh->f_est <= FDMDV_FCENTRE+40.0; coh->f_est += 40.0) { + + if (coh->verbose) + fprintf(stderr, " [%d] acohpsk.f_est: %f +/- 20\n", coh->frame, coh->f_est); + + /* we are out of sync so reset f_est and process two frames to clean out memories */ + + rate_Fs_rx_processing(coh, ch_symb, coh->ch_fdm_frame_buf, &coh->f_est, NSW*NSYMROWPILOT, COHPSK_M, 0); + for (i=0; ict_symb_buf, &ch_symb[i*NSYMROWPILOT]); + } + frame_sync_fine_freq_est(coh, &ch_symb[(NSW-1)*NSYMROWPILOT], sync, &anext_sync); + + if (anext_sync == 1) { + //printf(" [%d] acohpsk.ratio: %f\n", f, coh->ratio); + if (coh->ratio > max_ratio) { + max_ratio = coh->ratio; + f_est = coh->f_est - coh->f_fine_est; + next_sync = anext_sync; + } + } + } + + if (next_sync == 1) { + + /* we've found a sync candidate! + re-process last NSW frames with adjusted f_est then check again */ + + coh->f_est = f_est; + + if (coh->verbose) + fprintf(stderr, " [%d] trying sync and f_est: %f\n", coh->frame, coh->f_est); + + rate_Fs_rx_processing(coh, ch_symb, coh->ch_fdm_frame_buf, &coh->f_est, NSW*NSYMROWPILOT, COHPSK_M, 0); + for (i=0; ict_symb_buf, &ch_symb[i*NSYMROWPILOT]); + } + /* + for(i=0; ict_symb_buf[i][0].real, coh->ct_symb_buf[i][0].imag); + } + */ + frame_sync_fine_freq_est(coh, &ch_symb[(NSW-1)*NSYMROWPILOT], sync, &next_sync); + + if (fabs(coh->f_fine_est) > 2.0) { + if (coh->verbose) + fprintf(stderr, " [%d] Hmm %f is a bit big :(\n", coh->frame, coh->f_fine_est); + next_sync = 0; + } + } + + if (next_sync == 1) { + /* OK we are in sync! + demodulate first frame (demod completed below) */ + + if (coh->verbose) + fprintf(stderr, " [%d] in sync! f_est: %f ratio: %f \n", coh->frame, coh->f_est, coh->ratio); + for(r=0; rct_symb_ff_buf[r][c] = coh->ct_symb_buf[coh->ct+r][c]; + } + } + + /* If in sync just do sample rate processing on latest frame */ + + if (sync == 1) { + rate_Fs_rx_processing(coh, ch_symb, rx_fdm, &coh->f_est, NSYMROWPILOT, coh->nin, 1); + frame_sync_fine_freq_est(coh, ch_symb, sync, &next_sync); + + for(r=0; r<2; r++) + for(c=0; cct_symb_ff_buf[r][c] = coh->ct_symb_ff_buf[r+NSYMROWPILOT][c]; + for(; rct_symb_ff_buf[r][c] = coh->ct_symb_buf[coh->ct+r][c]; + } + + /* if we are in sync complete demodulation with symbol rate processing */ + + *sync_good = 0; + if ((next_sync == 1) || (sync == 1)) { + qpsk_symbols_to_bits(coh, rx_bits, coh->ct_symb_ff_buf); + *sync_good = 1; + } + + sync = sync_state_machine(coh, sync, next_sync); + coh->sync = sync; + + /* work out how many samples we need for the next call to account + for differences in tx and rx sample clocks */ + + nin = COHPSK_M; + if (sync == 1) { + if (coh->rx_timing > COHPSK_M/P) + nin = COHPSK_M + COHPSK_M/P; + if (coh->rx_timing < -COHPSK_M/P) + nin = COHPSK_M - COHPSK_M/P; + } + coh->nin = nin; + *nin_frame = (NSYMROWPILOT-1)*COHPSK_M + nin; + //if (coh->verbose) + // fprintf(stderr, "%f %d %d\n", coh->rx_timing, nin, *nin_frame); +} + + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: cohpsk_fs_offset() + AUTHOR......: David Rowe + DATE CREATED: May 2015 + + Simulates small Fs offset between mod and demod. + +\*---------------------------------------------------------------------------*/ + +int cohpsk_fs_offset(COMP out[], COMP in[], int n, float sample_rate_ppm) +{ + double f; + double tin = 0.0; + double step = 1.0 + sample_rate_ppm/1E6; + int t1, t2; + int tout = 0; + + while (tin < (double) n) { + t1 = (int) floor(tin); + t2 = (int) ceil(tin); + f = tin - (double) t1; + + out[tout].real = ((double)1.0-f)*(double)in[t1].real + f*(double)in[t2].real; + out[tout].imag = ((double)1.0-f)*(double)in[t1].imag + f*(double)in[t2].imag; + + tin += step; + tout++; + //printf("tin: %f tout: %d f: %f\n", tin, tout, f); + } + + return tout; +} + + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: cohpsk_get_demod_stats() + AUTHOR......: David Rowe + DATE CREATED: 14 June 2015 + + Fills stats structure with a bunch of demod information. + +\*---------------------------------------------------------------------------*/ + +void cohpsk_get_demod_stats(struct COHPSK *coh, struct MODEM_STATS *stats) +{ + COMP pi_4; + float new_snr_est; + + pi_4.real = cosf(M_PI/4.0); + pi_4.imag = sinf(M_PI/4.0); + + stats->Nc = COHPSK_NC*ND; + assert(stats->Nc <= MODEM_STATS_NC_MAX); + new_snr_est = 20*log10((coh->sig_rms+1E-6)/(coh->noise_rms+1E-6)) - 10*log10(3000.0/700.0); + stats->snr_est = 0.9*stats->snr_est + 0.1*new_snr_est; + + //fprintf(stderr, "sig_rms: %f noise_rms: %f snr_est: %f\n", coh->sig_rms, coh->noise_rms, stats->snr_est); + stats->sync = coh->sync; + stats->foff = coh->f_est - FDMDV_FCENTRE; + stats->rx_timing = coh->rx_timing; + stats->clock_offset = 0.0; /* TODO - implement clock offset estimation */ + +#ifndef __EMBEDDED__ + assert(NSYMROW <= MODEM_STATS_NR_MAX); + stats->nr = NSYMROW; + for(int c=0; crx_symbols[r][c] = cmult(coh->rx_symb[r][c], pi_4); + } + } +#endif +} + + +void cohpsk_set_verbose(struct COHPSK *coh, int verbose) +{ + assert(coh != NULL); + coh->verbose = verbose; +} + + +void cohpsk_set_frame(struct COHPSK *coh, int frame) +{ + assert(coh != NULL); + coh->frame = frame; +} + + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: cohpsk_get_test_bits() + AUTHOR......: David Rowe + DATE CREATED: June 2015 + + Returns a frame of known test bits. + +\*---------------------------------------------------------------------------*/ + +void cohpsk_get_test_bits(struct COHPSK *coh, int rx_bits[]) +{ + memcpy(rx_bits, coh->ptest_bits_coh_tx, sizeof(int)*COHPSK_BITS_PER_FRAME); + coh->ptest_bits_coh_tx += COHPSK_BITS_PER_FRAME; + if (coh->ptest_bits_coh_tx >=coh->ptest_bits_coh_end) { + coh->ptest_bits_coh_tx = (int*)test_bits_coh; + } +} + + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: cohpsk_put_test_bits() + AUTHOR......: David Rowe + DATE CREATED: June 2015 + + Accepts bits from demod and attempts to sync with the known + test_bits sequence. When synced measures bit errors. + + Has states to track two separate received test sequences based on + channel 0 or 1. + +\*---------------------------------------------------------------------------*/ + +void cohpsk_put_test_bits(struct COHPSK *coh, int *state, short error_pattern[], + int *bit_errors, char rx_bits_char[], int channel) +{ + int i, next_state, anerror; + int rx_bits[COHPSK_BITS_PER_FRAME]; + + assert((channel == 0) || (channel == 1)); + int *ptest_bits_coh_rx = coh->ptest_bits_coh_rx[channel]; + + for(i=0; i 1)) { + fprintf(stderr, "i: %d rx_bits: %d ptest_bits_coh_rx: %d\n", i, rx_bits[i], ptest_bits_coh_rx[i]); + } + *bit_errors += anerror; + error_pattern[i] = anerror; + } + + /* state logic */ + + next_state = *state; + + if (*state == 0) { + if (*bit_errors < 4) { + next_state = 1; + ptest_bits_coh_rx += COHPSK_BITS_PER_FRAME; + if (ptest_bits_coh_rx >= coh->ptest_bits_coh_end) { + ptest_bits_coh_rx = (int*)test_bits_coh; + } + } + } + + /* if 5 frames with large BER reset test frame sync */ + + if (*state > 0) { + if (*bit_errors > 8) { + if (*state == 6) + next_state = 0; + else + next_state = *state+1; + } + else + next_state = 1; + } + + if (*state > 0) { + ptest_bits_coh_rx += COHPSK_BITS_PER_FRAME; + if (ptest_bits_coh_rx >= coh->ptest_bits_coh_end) { + ptest_bits_coh_rx = (int*)test_bits_coh; + } + } + + //fprintf(stderr, "state: %d next_state: %d bit_errors: %d\n", *state, next_state, *bit_errors); + + *state = next_state; + coh->ptest_bits_coh_rx[channel] = ptest_bits_coh_rx; +} + + +int cohpsk_error_pattern_size(void) { + return COHPSK_BITS_PER_FRAME; +} + + +float *cohpsk_get_rx_bits_lower(struct COHPSK *coh) { + return coh->rx_bits_lower; +} + +float *cohpsk_get_rx_bits_upper(struct COHPSK *coh) { + return coh->rx_bits_upper; +} + +void cohpsk_set_carrier_ampl(struct COHPSK *coh, int c, float ampl) { + assert(c < COHPSK_NC*ND); + coh->carrier_ampl[c] = ampl; + fprintf(stderr, "cohpsk_set_carrier_ampl: %d %f\n", c, ampl); +} + diff --git a/libcodec2-android/src/codec2/src/cohpsk_ch.c b/libcodec2-android/src/codec2/src/cohpsk_ch.c new file mode 100644 index 0000000..a096af5 --- /dev/null +++ b/libcodec2-android/src/codec2/src/cohpsk_ch.c @@ -0,0 +1,398 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: cohpsk_ch.c + AUTHOR......: David Rowe + DATE CREATED: May 2015 + + Channel impairment program for testing command line versions of + cohpsk (and other) modems. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2015 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include +#include +#include +#include +#include + +#include "codec2_fdmdv.h" +#include "codec2_cohpsk.h" +#include "comp_prim.h" +#include "noise_samples.h" +#include "ht_coeff.h" +#include "ssbfilt_coeff.h" + +#include "debug_alloc.h" + +#define BUF_N 160 +#define FAST_FADING_DELAY_MS 2.0 +#define SLOW_FADING_DELAY_MS 0.5 +#define PAPR_TARGET 7.0 + +/* + Use Octave to generate the fading channel models: + + octave:26> cohpsk_ch_fading("../raw/faster_fading_samples.float", 8000, 2.0, 8000*60) + octave:26> cohpsk_ch_fading("../raw/fast_fading_samples.float", 8000, 1.0, 8000*60) + octave:27> cohpsk_ch_fading("../raw/slow_fading_samples.float", 8000, 0.1, 8000*60) + + Note: for Fs=8000Hz operation 7500 Hz is OK - these are just the two path fading complex numbers, + a few % different in fading bandwidth won't matter. +*/ + +#define DEFAULT_RAW_DIR "../../raw" +#define SLOW_FADING_FILE_NAME "slow_fading_samples.float" +#define FAST_FADING_FILE_NAME "fast_fading_samples.float" +#define FASTER_FADING_FILE_NAME "faster_fading_samples.float" + +int opt_exists(char *argv[], int argc, char opt[]) { + int i; + for (i=0; i 3) { + if (strcmp(argv[1], "-") == 0) fin = stdin; + else if ( (fin = fopen(argv[1],"rb")) == NULL ) { + fprintf(stderr, "Error opening input modem raw file: %s: %s.\n", + argv[1], strerror(errno)); + exit(1); + } + + if (strcmp(argv[2], "-") == 0) fout = stdout; + else if ( (fout = fopen(argv[2],"wb")) == NULL ) { + fprintf(stderr, "Error opening output modem raw file: %s: %s.\n", + argv[2], strerror(errno)); + exit(1); + } + + NodB = atof(argv[3]); + Fs = COHPSK_FS; foff_hz = 0.0; fading_en = 0; inclip = 1.0; ssbfilt_en = 1; complex_out = 0; + raw_dir = strdup(DEFAULT_RAW_DIR); + + for(int i=4; iSee cohpsk_ch.c source for instructions on how to generate this file.\n"); + fprintf(stderr, "-----------------------------------------------------\n"); + exit(1); + } + nhfdelay = floor(SLOW_FADING_DELAY_MS*Fs/1000); + } + + if (fading_en == 2) { + sprintf(fname, "%s/%s", raw_dir, FAST_FADING_FILE_NAME); + ffading = fopen(fname, "rb"); + if (ffading == NULL) goto cant_load_fading_file; + nhfdelay = floor(FAST_FADING_DELAY_MS*Fs/1000); + } + + if (fading_en == 3) { + sprintf(fname, "%s/%s", raw_dir, FASTER_FADING_FILE_NAME); + ffading = fopen(fname, "rb"); + if (ffading == NULL) goto cant_load_fading_file; + nhfdelay = floor(FAST_FADING_DELAY_MS*Fs/1000); + } + + ch_fdm_delay = (COMP*)MALLOC((nhfdelay+COHPSK_NOM_SAMPLES_PER_FRAME)*sizeof(COMP)); + assert(ch_fdm_delay != NULL); + for(i=0; i inclip*32767.0) + sam = inclip*32767.0; + if (sam < -inclip*32767.0) + sam = -inclip*32767.0; + //printf("sam: %f\n", sam); + htbuf[j] = sam/FDMDV_SCALE; + + if (fabs(htbuf[j]) > peak) { + peak = fabs(htbuf[j]); + } + tx_pwr += pow(htbuf[j], 2.0); + + /* FIR filter with HT to get imag, just delay to get real */ + + ch_in[i].real = 0.0; + ch_in[i].imag = 0.0; + for(k=0; k noise_end) { + noise_r = 0; + //fprintf(stderr, " [%d] noise wrap\n", f); + } + } + + /* FIR filter to simulate (a rather flat) SSB filter. Might + be useful to have an option for a filter with a few dB + ripple too, to screw up the modem. This is mainly so analog + SSB sounds realistic. */ + + for(i=0, j=SSBFILT_N; i 32767.0) { clipped++; sam = 32767.0; } + if (sam < -32767.0) { clipped++; sam = -32767.0; } + *pout++ = sam; + if (complex_out) { + sam = FDMDV_SCALE * ssbfiltout[i].imag; + if (sam > 32767.0) { clipped++; sam = 32767.0; } + if (sam < -32767.0) { clipped++; sam = -32767.0; } + *pout++ = sam; + } + } + + fwrite(bufout, sizeof(short), nout, fout); + + /* if this is in a pipeline, we probably don't want the usual + buffering to occur */ + + if (fout == stdout) fflush(stdout); + if (fin == stdin) fflush(stdin); + } + + finish: + fclose(fin); + fclose(fout); + + fprintf(stderr, "cohpsk_ch -----------------------------------------------------------------------------\n"); + /* + fprintf(stderr, "peak pwr: %7.2f av input pwr.: %7.2f av fading pwr: %7.2f noise pwr....: %7.2f\n", + peak*peak, + tx_pwr/(frames*BUF_N), + tx_pwr_fade/(frames*BUF_N), + noise_pwr/(frames*BUF_N) + ); + */ + papr = 10*log10(peak*peak/(tx_pwr/(frames*BUF_N))); + CNo = 10*log10(tx_pwr/(noise_pwr/(Fs/2))); // single sided spectrum magic IDFK! + snr3k = CNo - 10*log10(3000); + fprintf(stderr, "SNR3k(dB): %5.2f C/No: %4.1f PAPR: %4.1f \n", snr3k, CNo, papr); + fprintf(stderr, "cohpsk_ch -----------------------------------------------------------------------------\n"); + + if (ffading != NULL) fclose(ffading); + if (ch_fdm_delay != NULL) FREE(ch_fdm_delay); + return 0; +} + diff --git a/libcodec2-android/src/codec2/src/cohpsk_defs.h b/libcodec2-android/src/codec2/src/cohpsk_defs.h new file mode 100644 index 0000000..a03bfe7 --- /dev/null +++ b/libcodec2-android/src/codec2/src/cohpsk_defs.h @@ -0,0 +1,9 @@ +/* Generated by write_pilot_file() Octave function */ + +#define NSYMROW 4 /* number of data symbols on each row (i.e. each carrier) */ +#define NS 4 /* number of data symbols between pilots */ +#define NPILOTSFRAME 2 /* number of pilot symbols on each row */ +#define PILOTS_NC 7 /* number of carriers */ + +#define NSYMROWPILOT 6 /* length of row after pilots inserted */ + diff --git a/libcodec2-android/src/codec2/src/cohpsk_demod.c b/libcodec2-android/src/codec2/src/cohpsk_demod.c new file mode 100644 index 0000000..f5a962d --- /dev/null +++ b/libcodec2-android/src/codec2/src/cohpsk_demod.c @@ -0,0 +1,259 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: cohpsk_demod.c + AUTHOR......: David Rowe + DATE CREATED: April 6 2015 + + Given an input file of raw file (8kHz, 16 bit shorts) of COHPSK modem samples, + outputs a file of bits (note one bit per int, not compressed). + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2015 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include +#include +#include +#include +#include +#include + +#include "codec2_cohpsk.h" +#include "cohpsk_defs.h" +#include "cohpsk_internal.h" +#include "codec2_fdmdv.h" +#include "octave.h" + +#include "debug_alloc.h" + +#define LOG_FRAMES 100 +#define SYNC_FRAMES 12 /* sync state uses up extra log storage as we reprocess several times */ + +int opt_exists(char *argv[], int argc, char opt[]) { + int i; + for (i=0; irx_timing_log = (float*)MALLOC(sizeof(float)*SYNC_FRAMES*logframes*NSYMROWPILOT); + assert(cohpsk->rx_timing_log != NULL); + } + + log_data_r = 0; + frames = 0; + + nin_frame = COHPSK_NOM_SAMPLES_PER_FRAME; + while(fread(rx_fdm_scaled, sizeof(short), nin_frame, fin) == nin_frame) { + frames++; + cohpsk_set_frame(cohpsk, frames); + + /* scale and demod */ + + for(i=0; irx_bits_lower[i] < 0.0; + fwrite(rx_bits_char, sizeof(char), COHPSK_BITS_PER_FRAME, fout); + for(i=0; irx_bits_upper[i] < 0.0; + fwrite(rx_bits_char, sizeof(char), COHPSK_BITS_PER_FRAME, fout); + } + else { + for(i=0; irx_bits_lower[i]; + fwrite(rx_bits_double, sizeof(double), COHPSK_BITS_PER_FRAME, fout); + for(i=0; irx_bits_upper[i]; + fwrite(rx_bits_double, sizeof(double), COHPSK_BITS_PER_FRAME, fout); + } + } + + if (oct) { + for(r=0; ramp_[r][c]; + rx_phi_log[log_data_r*COHPSK_NC*ND+c] = cohpsk->phi_[r][c]; + rx_symb_log[log_data_r*COHPSK_NC*ND+c] = cohpsk->rx_symb[r][c]; + } + } + + f_est_log[frames-1] = cohpsk->f_est; + ratio_log[frames-1] = cohpsk->ratio; + //fprintf(stderr,"ratio: %f\n", cohpsk->ratio); + + //printf("frames: %d log_data_r: %d\n", frames, log_data_r); + if (frames == logframes) + oct = 0; + } + } + + /* if this is in a pipeline, we probably don't want the usual + buffering to occur */ + + if (fout == stdout) fflush(stdout); + if (fin == stdin) fflush(stdin); + } + + fclose(fin); + fclose(fout); + + /* optionally dump Octave files */ + + if (foct != NULL) { + octave_save_float(foct, "rx_amp_log_c", (float*)rx_amp_log, log_data_r, COHPSK_NC*ND, COHPSK_NC*ND); + octave_save_float(foct, "rx_phi_log_c", (float*)rx_phi_log, log_data_r, COHPSK_NC*ND, COHPSK_NC*ND); + octave_save_complex(foct, "rx_symb_log_c", (COMP*)rx_symb_log, log_data_r, COHPSK_NC*ND, COHPSK_NC*ND); + octave_save_float(foct, "rx_timing_log_c", (float*)cohpsk->rx_timing_log, 1, cohpsk->rx_timing_log_index, cohpsk->rx_timing_log_index); + octave_save_float(foct, "f_est_log_c", f_est_log, 1, logframes, logframes); + octave_save_float(foct, "ratio_log_c", ratio_log, 1, logframes, logframes); + fclose(foct); + } + + cohpsk_destroy(cohpsk); + + + return 0; +} diff --git a/libcodec2-android/src/codec2/src/cohpsk_get_test_bits.c b/libcodec2-android/src/codec2/src/cohpsk_get_test_bits.c new file mode 100644 index 0000000..87ee380 --- /dev/null +++ b/libcodec2-android/src/codec2/src/cohpsk_get_test_bits.c @@ -0,0 +1,87 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: cohpsk_put_test_bits.c + AUTHOR......: David Rowe + DATE CREATED: April 2015 + + Generates a file of test bits, useful for input to cohpsk_mod. + +\*---------------------------------------------------------------------------*/ + + +/* + Copyright (C) 2015 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include +#include +#include +#include +#include + +#include "codec2_cohpsk.h" +#include "test_bits_coh.h" + +int main(int argc, char *argv[]) +{ + FILE *fout; + int tx_bits[COHPSK_BITS_PER_FRAME]; + char tx_bits_char[COHPSK_BITS_PER_FRAME]; + int numBits, nFrames, n; + int *ptest_bits_coh, *ptest_bits_coh_end, i; + + if (argc < 2) { + printf("usage: %s OutputOneCharPerBitFile numBits\n", argv[0]); + exit(1); + } + + if (strcmp(argv[1], "-") == 0) fout = stdout; + else if ( (fout = fopen(argv[1],"wb")) == NULL ) { + fprintf(stderr, "Error opening output file: %s: %s.\n", + argv[1], strerror(errno)); + exit(1); + } + + ptest_bits_coh = (int*)test_bits_coh; + ptest_bits_coh_end = (int*)test_bits_coh + sizeof(test_bits_coh)/sizeof(int); + numBits = atoi(argv[2]); + nFrames = numBits/COHPSK_BITS_PER_FRAME; + + for(n=0; n= ptest_bits_coh_end) { + ptest_bits_coh = (int*)test_bits_coh; + } + + for(i=0; i. +*/ + +#ifndef __COHPSK_INTERNAL__ +#define __COHPSK_INTERNAL__ + +#define NCT_SYMB_BUF (2*NSYMROWPILOT+2) +#define ND 2 /* diversity factor ND 1 is no diveristy, ND we have orginal plus + one copy */ +#define NSW 4 /* number of sync window frames */ +#define COHPSK_ND 2 /* diversity factor */ +#define COHPSK_M 100 /* oversampling rate */ +#define COHPSK_NSYM 6 +#define COHPSK_NFILTER (COHPSK_NSYM*COHPSK_M) +#define COHPSK_EXCESS_BW 0.5 /* excess BW factor of root nyq filter */ +#define COHPSK_NT 5 /* number of symbols we estimate timing over */ + +#include "fdmdv_internal.h" +#include "kiss_fft.h" + +struct COHPSK { + COMP ch_fdm_frame_buf[NSW*NSYMROWPILOT*COHPSK_M]; /* buffer of several frames of symbols from channel */ + float pilot2[2*NPILOTSFRAME][COHPSK_NC]; + float phi_[NSYMROWPILOT][COHPSK_NC*ND]; /* phase estimates for this frame of rx data symbols */ + float amp_[NSYMROW][COHPSK_NC*ND]; /* amplitude estimates for this frame of rx data symbols */ + COMP rx_symb[NSYMROWPILOT][COHPSK_NC*ND]; /* demodulated symbols */ + float f_est; + COMP rx_filter_memory[COHPSK_NC*ND][COHPSK_NFILTER]; + COMP ct_symb_buf[NCT_SYMB_BUF][COHPSK_NC*ND]; + int ct; /* coarse timing offset in symbols */ + float rx_timing; /* fine timing for last symbol in frame */ + int nin; /* number of samples to input for next symbol */ + float f_fine_est; + COMP ff_rect; + COMP ff_phase; + COMP ct_symb_ff_buf[NSYMROWPILOT+2][COHPSK_NC*ND]; + int sync; + int sync_timer; + + int frame; + float ratio; + + float sig_rms; + float noise_rms; + + struct FDMDV *fdmdv; + + int verbose; + + int *ptest_bits_coh_tx; + int *ptest_bits_coh_rx[2]; + int *ptest_bits_coh_end; + + /* counting bit errors using pilots */ + + int npilotbits; + int npilotbiterrors; + + /* optional log variables used for testing Octave to C port */ + + COMP *rx_baseband_log; + int rx_baseband_log_col_index; + int rx_baseband_log_col_sz; + + COMP *rx_filt_log; + int rx_filt_log_col_index; + int rx_filt_log_col_sz; + + COMP *ch_symb_log; + int ch_symb_log_r; + int ch_symb_log_col_sz; + + float *rx_timing_log; + int rx_timing_log_index; + + /* demodulated bits before diversity combination for test/instrumentation purposes */ + + float rx_bits_lower[COHPSK_BITS_PER_FRAME]; + float rx_bits_upper[COHPSK_BITS_PER_FRAME]; + + /* tx amplitude weights for each carrier for test/instrumentation */ + + float carrier_ampl[COHPSK_NC*ND]; + + /* Flag enabling simple freq est mode */ + int freq_est_mode_reduced; +}; + +void bits_to_qpsk_symbols(COMP tx_symb[][COHPSK_NC*COHPSK_ND], int tx_bits[], int nbits); +void qpsk_symbols_to_bits(struct COHPSK *coh, float rx_bits[], COMP ct_symb_buf[][COHPSK_NC*COHPSK_ND]); +void tx_filter_and_upconvert_coh(COMP tx_fdm[], int Nc, const COMP tx_symbols[], + COMP tx_filter_memory[COHPSK_NC][COHPSK_NSYM], + COMP phase_tx[], COMP freq[], + COMP *fbb_phase, COMP fbb_rect); +void fdm_downconvert_coh(COMP rx_baseband[COHPSK_NC][COHPSK_M+COHPSK_M/P], int Nc, COMP rx_fdm[], COMP phase_rx[], COMP freq[], int nin); +void rx_filter_coh(COMP rx_filt[COHPSK_NC+1][P+1], int Nc, COMP rx_baseband[COHPSK_NC+1][COHPSK_M+COHPSK_M/P], COMP rx_filter_memory[COHPSK_NC+1][COHPSK_NFILTER], int nin); +void frame_sync_fine_freq_est(struct COHPSK *coh, COMP ch_symb[][COHPSK_NC*COHPSK_ND], int sync, int *next_sync); +void fine_freq_correct(struct COHPSK *coh, int sync, int next_sync); +int sync_state_machine(struct COHPSK *coh, int sync, int next_sync); +int cohpsk_fs_offset(COMP out[], COMP in[], int n, float sample_rate_ppm); + +#endif diff --git a/libcodec2-android/src/codec2/src/cohpsk_mod.c b/libcodec2-android/src/codec2/src/cohpsk_mod.c new file mode 100644 index 0000000..4a1e2c5 --- /dev/null +++ b/libcodec2-android/src/codec2/src/cohpsk_mod.c @@ -0,0 +1,123 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: cohpsk_mod.c + AUTHOR......: David Rowe + DATE CREATED: April 5 2015 + + Given an input file of bits (note one bit per float, soft decision format), + outputs a raw file (8kHz, 16 bit shorts) of COHPSK modem samples + ready to send over a HF radio channel. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2015 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include +#include +#include +#include +#include + +#include "codec2_cohpsk.h" +#include "codec2_fdmdv.h" + +int opt_exists(char *argv[], int argc, char opt[]) { + int i; + for (i=0; i. +*/ + +#include +#include +#include +#include +#include +#include + +#include "codec2_cohpsk.h" +#include "octave.h" + +#define LOG_FRAMES 100 + +int main(int argc, char *argv[]) +{ + FILE *fin, *foct; + char rx_bits[COHPSK_BITS_PER_FRAME]; + int state, i, nbits, bit_errors, nerrors; + short error_pattern[COHPSK_BITS_PER_FRAME]; + int error_positions_hist[COHPSK_BITS_PER_FRAME], logframes; + int nerr_log[LOG_FRAMES]; + struct COHPSK *coh; + + for(i=0; i. +*/ + +#ifndef __COMP__ +#define __COMP__ + +/* Complex number */ + +typedef struct { + float real; + float imag; +} COMP; + +#endif diff --git a/libcodec2-android/src/codec2/src/comp_prim.h b/libcodec2-android/src/codec2/src/comp_prim.h new file mode 100644 index 0000000..d0f070a --- /dev/null +++ b/libcodec2-android/src/codec2/src/comp_prim.h @@ -0,0 +1,141 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: comp_prim.h + AUTHOR......: David Rowe + DATE CREATED: Marh 2015 + + Complex number maths primitives. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2015 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#ifndef __COMP_PRIM__ +#define __COMP_PRIM__ + +/*---------------------------------------------------------------------------*\ + + FUNCTIONS + +\*---------------------------------------------------------------------------*/ + +inline static COMP cneg(COMP a) +{ + COMP res; + + res.real = -a.real; + res.imag = -a.imag; + + return res; +} + +inline static COMP cconj(COMP a) +{ + COMP res; + + res.real = a.real; + res.imag = -a.imag; + + return res; +} + +inline static COMP cmult(COMP a, COMP b) +{ + COMP res; + + res.real = a.real*b.real - a.imag*b.imag; + res.imag = a.real*b.imag + a.imag*b.real; + + return res; +} + +inline static COMP fcmult(float a, COMP b) +{ + COMP res; + + res.real = a*b.real; + res.imag = a*b.imag; + + return res; +} + +inline static COMP cadd(COMP a, COMP b) +{ + COMP res; + + res.real = a.real + b.real; + res.imag = a.imag + b.imag; + + return res; +} + +inline static float cabsolute(COMP a) +{ + return sqrtf((a.real * a.real) + (a.imag * a.imag) ); +} + +/* + * Euler's formula in a new convenient function + */ +inline static COMP comp_exp_j(float phi){ + COMP res; + res.real = cosf(phi); + res.imag = sinf(phi); + return res; +} + +/* + * Quick and easy complex 0 + */ +inline static COMP comp0(){ + COMP res; + res.real = 0; + res.imag = 0; + return res; +} + +/* + * Quick and easy complex subtract + */ +inline static COMP csub(COMP a, COMP b){ + COMP res; + res.real = a.real-b.real; + res.imag = a.imag-b.imag; + return res; +} + +/* + * Compare the magnitude of a and b. if |a|>|b|, return true, otw false. + * This needs no square roots + */ +inline static int comp_mag_gt(COMP a,COMP b){ + return ((a.real*a.real)+(a.imag*a.imag)) > ((b.real*b.real)+(b.imag*b.imag)); +} + +/* + * Normalize a complex number's magnitude to 1 + */ +inline static COMP comp_normalize(COMP a){ + COMP b; + float av = cabsolute(a); + b.real = a.real/av; + b.imag = a.imag/av; + return b; +} + +#endif diff --git a/libcodec2-android/src/codec2/src/dct2.h b/libcodec2-android/src/codec2/src/dct2.h new file mode 100644 index 0000000..1ac566e --- /dev/null +++ b/libcodec2-android/src/codec2/src/dct2.h @@ -0,0 +1,47 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: dct2.h + AUTHOR......: Phil Ayres + DATE CREATED: July 2017 + + * DCT functions based on existing Codec 2 FFT + * +\*---------------------------------------------------------------------------*/ + +/* + Copyright David Rowe 2017 + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . + + */ + +#ifndef DCT2_H +#define DCT2_H + +#include "codec2_fft.h" +#include "comp.h" +#include "comp_prim.h" + +typedef codec2_fftr_cfg codec2_dct_cfg; + +void dct(codec2_dct_cfg cfg, const int N, float y[], float res[]); +void dct2(codec2_dct_cfg cfg_m, codec2_dct_cfg cfg_n, const int M, const int N, float y[M][N], float res[M][N]); +void idct(codec2_dct_cfg cfg, const int N, float a[N], float res[N]); +void idct2(codec2_dct_cfg cfg_m, codec2_dct_cfg cfg_n, int M, int N, float y[M][N], float res[M][N]); +codec2_dct_cfg dct_config(int P); +codec2_dct_cfg idct_config(int P); +void dct_cfg_free(codec2_dct_cfg cfg); + +#endif /* DCT2_H */ + diff --git a/libcodec2-android/src/codec2/src/debug_alloc.h b/libcodec2-android/src/codec2/src/debug_alloc.h new file mode 100644 index 0000000..62f0456 --- /dev/null +++ b/libcodec2-android/src/codec2/src/debug_alloc.h @@ -0,0 +1,61 @@ +/* debug_alloc.h + * + * Some macros which can report on malloc results. + * + * Enable with "-D DEBUG_ALLOC" + */ + +#ifndef DEBUG_ALLOC_H +#define DEBUG_ALLOC_H + +#include + +// Debug calls + +#ifdef CORTEX_M4 +extern char * __heap_end; +register char * sp asm ("sp"); +#endif + + static inline void * DEBUG_MALLOC(const char *func, size_t size) { + void *ptr = malloc(size); + fprintf(stderr, "MALLOC: %s %p %d", func, ptr, (int)size); +#ifdef CORTEX_M4 + + fprintf(stderr, " : sp %p ", sp); +#endif + if (!ptr) fprintf(stderr, " ** FAILED **"); + fprintf(stderr, "\n"); + return(ptr); + } + + static inline void * DEBUG_CALLOC(const char *func, size_t nmemb, size_t size) { + void *ptr = calloc(nmemb, size); + fprintf(stderr, "CALLOC: %s %p %d %d", func, ptr, (int)nmemb, (int)size); +#ifdef CORTEX_M4 + fprintf(stderr, " : sp %p ", sp); +#endif + if (!ptr) fprintf(stderr, " ** FAILED **"); + fprintf(stderr, "\n"); + return(ptr); + } + static inline void DEBUG_FREE(const char *func, void *ptr) { + free(ptr); + fprintf(stderr, "FREE: %s %p\n", func, ptr); + } + +#ifdef DEBUG_ALLOC + #define MALLOC(size) DEBUG_MALLOC(__func__, size) + #define CALLOC(nmemb, size) DEBUG_CALLOC(__func__, nmemb, size) + #define FREE(ptr) DEBUG_FREE(__func__, ptr) +#else //DEBUG_ALLOC +// Default to normal calls + #define MALLOC(size) malloc(size) + + #define CALLOC(nmemb, size) calloc(nmemb, size) + + #define FREE(ptr) free(ptr) + +#endif //DEBUG_ALLOC + +#endif //DEBUG_ALLOC_H diff --git a/libcodec2-android/src/codec2/src/defines.h b/libcodec2-android/src/codec2/src/defines.h new file mode 100644 index 0000000..dcd1841 --- /dev/null +++ b/libcodec2-android/src/codec2/src/defines.h @@ -0,0 +1,125 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: defines.h + AUTHOR......: David Rowe + DATE CREATED: 23/4/93 + + Defines and structures used throughout the codec. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2009 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#ifndef __DEFINES__ +#define __DEFINES__ + +/*---------------------------------------------------------------------------*\ + + DEFINES + +\*---------------------------------------------------------------------------*/ + +/* General defines */ + +#define N_S 0.01 /* internal proc frame length in secs */ +#define TW_S 0.005 /* trapezoidal synth window overlap */ +#define MAX_AMP 160 /* maximum number of harmonics */ +#ifndef PI +#define PI 3.141592654 /* mathematical constant */ +#endif +#define TWO_PI 6.283185307 /* mathematical constant */ +#define MAX_STR 2048 /* maximum string size */ + +#define FFT_ENC 512 /* size of FFT used for encoder */ +#define FFT_DEC 512 /* size of FFT used in decoder */ +#define V_THRESH 6.0 /* voicing threshold in dB */ +#define LPC_ORD 10 /* LPC order */ +#define LPC_ORD_LOW 6 /* LPC order for lower rates */ + +/* Pitch estimation defines */ + +#define M_PITCH_S 0.0400 /* pitch analysis window in s */ +#define P_MIN_S 0.0025 /* minimum pitch period in s */ +#define P_MAX_S 0.0200 /* maximum pitch period in s */ + +/*---------------------------------------------------------------------------*\ + + TYPEDEFS + +\*---------------------------------------------------------------------------*/ + +/* Structure to hold constants calculated at run time based on sample rate */ + +typedef struct { + int Fs; /* sample rate of this instance */ + int n_samp; /* number of samples per 10ms frame at Fs */ + int max_amp; /* maximum number of harmonics */ + int m_pitch; /* pitch estimation window size in samples */ + int p_min; /* minimum pitch period in samples */ + int p_max; /* maximum pitch period in samples */ + float Wo_min; + float Wo_max; + int nw; /* analysis window size in samples */ + int tw; /* trapezoidal synthesis window overlap */ +} C2CONST; + +/* Structure to hold model parameters for one frame */ + +typedef struct { + float Wo; /* fundamental frequency estimate in radians */ + int L; /* number of harmonics */ + float A[MAX_AMP+1]; /* amplitiude of each harmonic */ + float phi[MAX_AMP+1]; /* phase of each harmonic */ + int voiced; /* non-zero if this frame is voiced */ +} MODEL; + +/* describes each codebook */ + +struct lsp_codebook { + int k; /* dimension of vector */ + int log2m; /* number of bits in m */ + int m; /* elements in codebook */ +#ifdef __EMBEDDED /* make sure stored in flash */ + const float *cb; /* The elements */ +#else + float *cb; /* The elements */ +#endif +}; + +extern const struct lsp_codebook lsp_cb[]; +extern const struct lsp_codebook lsp_cbd[]; +extern const struct lsp_codebook lsp_cbvq[]; +extern const struct lsp_codebook lsp_cbjnd[]; +extern const struct lsp_codebook lsp_cbdt[]; +extern const struct lsp_codebook lsp_cbjvm[]; +extern const struct lsp_codebook lsp_cbvqanssi[]; +extern const struct lsp_codebook mel_cb[]; +extern const struct lsp_codebook ge_cb[]; +extern const struct lsp_codebook lspmelvq_cb[]; +extern const struct lsp_codebook newamp1vq_cb[]; +extern const struct lsp_codebook newamp1_energy_cb[]; +extern const struct lsp_codebook newamp2vq_cb[]; +extern const struct lsp_codebook newamp2_energy_cb[]; + +#ifdef _GNU_SOURCE + #define POW10F(x) exp10f((x)) +#else + #define POW10F(x) expf(2.302585092994046f*(x)) +#endif + +#endif diff --git a/libcodec2-android/src/codec2/src/deframer.c b/libcodec2-android/src/codec2/src/deframer.c new file mode 100644 index 0000000..4be874c --- /dev/null +++ b/libcodec2-android/src/codec2/src/deframer.c @@ -0,0 +1,165 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: deframer.c + AUTHOR......: David Rowe + DATE CREATED: July 2020 + + Command line deframer, obtains UW sync, then extracts frame of data bits. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2020 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include +#include +#include "fsk.h" + +unsigned int toInt(char c) +{ + if (c >= '0' && c <= '9') return c - '0'; + if (c >= 'A' && c <= 'F') return 10 + c - 'A'; + if (c >= 'a' && c <= 'f') return 10 + c - 'a'; + return -1; +} + +int main(int argc,char *argv[]){ + FILE *fin, *fout; + + if (argc < 5) { + fprintf(stderr,"usage: %s InOneFloatPerLLR OutOneFloatPerLLR frameSizeBits HexUW [--hard]\n",argv[0]); + fprintf(stderr," --hard Treat input and output files as OneBitPerByte hard decisions\n"); + exit(1); + } + + if (strcmp(argv[1],"-") == 0) { + fin = stdin; + } else { + if ((fin = fopen(argv[1],"rb")) == NULL) { + fprintf(stderr,"Couldn't open input file: %s\n", argv[1]); + exit(1); + } + } + + if (strcmp(argv[2],"-") == 0) { + fout = stdout; + } else { + if ((fout = fopen(argv[2],"wb")) == NULL) { + fprintf(stderr,"Couldn't open output file: %s\n", argv[2]); + exit(1); + } + } + + /* extract UW array from hex on command line */ + + size_t framesize = atoi(argv[3]); + char *uw_hex = argv[4]; + uint8_t uw[4*strlen(uw_hex)]; + int uwsize = 0; + for(int c=0; c> (3-i)) & 0x1; /* MSB first */ + assert(uwsize == 4*strlen(uw_hex)); + + fprintf(stderr, "uw_hex: %s uwsize: %d\n", uw_hex, uwsize); + for(int i=0; i= thresh2) { + baduw++; + if (baduw == 3) { + fprintf(stderr, "lost UW!\n"); next_state = 0; + } + } + else baduw = 0; + break; + } + state = next_state; + + if (state == 1) { + fwrite(&inbuf[(best_location+uwsize)*nelement], nelement, framesize, fout); + } + memmove(twoframes, &twoframes[framedsize], framedsize); + memmove(inbuf, &inbuf[nelement*framedsize], nelement*framedsize); + } + + free(inbuf); + fclose(fin); + fclose(fout); + + return 0; +} diff --git a/libcodec2-android/src/codec2/src/dump.c b/libcodec2-android/src/codec2/src/dump.c new file mode 100644 index 0000000..4fae3b6 --- /dev/null +++ b/libcodec2-android/src/codec2/src/dump.c @@ -0,0 +1,676 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: dump.c + AUTHOR......: David Rowe + DATE CREATED: 25/8/09 + + Routines to dump data to text files for Octave analysis. + +\*---------------------------------------------------------------------------*/ + +/* + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include "defines.h" +#include "comp.h" +#include "dump.h" +#include +#include +#include +#include +#include + +#ifdef __EMBEDDED__ +#include "gdb_stdio.h" +#define fprintf gdb_stdio_fprintf +#define fopen gdb_stdio_fopen +#define fclose gdb_stdio_fclose +#endif + +#ifdef DUMP +static int dumpon = 0; + +static FILE *fsn = NULL; +static FILE *fsw = NULL; +static FILE *few = NULL; +static FILE *fsw_ = NULL; +static FILE *fsoftdec = NULL; +static FILE *fmodel = NULL; +static FILE *fqmodel = NULL; +static FILE *fpwb = NULL; +static FILE *fpw = NULL; +static FILE *frw = NULL; +static FILE *flsp = NULL; +static FILE *fweights = NULL; +static FILE *flsp_ = NULL; +static FILE *fmel = NULL; +static FILE *fmel_indexes = NULL; +static FILE *fphase = NULL; +static FILE *fphase_ = NULL; +static FILE *ffw = NULL; +static FILE *fe = NULL; +static FILE *fsq = NULL; +static FILE *fdec = NULL; +static FILE *fsnr = NULL; +static FILE *flpcsnr = NULL; +static FILE *fak = NULL; +static FILE *fak_ = NULL; +static FILE *fbg = NULL; +static FILE *fE = NULL; +static FILE *frk = NULL; +static FILE *fhephase = NULL; + +static char prefix[MAX_STR]; + +void dump_on(char p[]) { + dumpon = 1; + strcpy(prefix, p); +} + +void dump_off(){ + if (fsn != NULL) + fclose(fsn); + if (fsw != NULL) + fclose(fsw); + if (fsw_ != NULL) + fclose(fsw_); + if (few != NULL) + fclose(few); + if (fmodel != NULL) + fclose(fmodel); + if (fsoftdec != NULL) + fclose(fsoftdec); + if (fqmodel != NULL) + fclose(fqmodel); + if (fpwb != NULL) + fclose(fpwb); + if (fpw != NULL) + fclose(fpw); + if (frw != NULL) + fclose(frw); + if (flsp != NULL) + fclose(flsp); + if (fweights != NULL) + fclose(fweights); + if (flsp_ != NULL) + fclose(flsp_); + if (fmel != NULL) + fclose(fmel); + if (fmel_indexes != NULL) + fclose(fmel_indexes); + if (fphase != NULL) + fclose(fphase); + if (fphase_ != NULL) + fclose(fphase_); + if (ffw != NULL) + fclose(ffw); + if (fe != NULL) + fclose(fe); + if (fsq != NULL) + fclose(fsq); + if (fdec != NULL) + fclose(fdec); + if (fsnr != NULL) + fclose(fsnr); + if (flpcsnr != NULL) + fclose(flpcsnr); + if (fak != NULL) + fclose(fak); + if (fak_ != NULL) + fclose(fak_); + if (fbg != NULL) + fclose(fbg); + if (fE != NULL) + fclose(fE); + if (frk != NULL) + fclose(frk); + if (fhephase != NULL) + fclose(fhephase); +} + +void dump_Sn(int m_pitch, float Sn[]) { + int i; + char s[MAX_STR + 7]; + + if (!dumpon) return; + + if (fsn == NULL) { + sprintf(s,"%s_sn.txt", prefix); + fsn = fopen(s, "wt"); + assert(fsn != NULL); + } + + /* split across two lines to avoid max line length problems */ + /* reconstruct in Octave */ + + for(i=0; iWo, model->L); + for(l=1; l<=model->L; l++) { + sprintf(s,"%12f ",model->A[l]); + strcat(line, s); + assert(strlen(line) < MAX_STR*10); + } + for(l=model->L+1; l<=MAX_AMP; l++) { + sprintf(s,"%12f ", 0.0); + strcat(line,s); + assert(strlen(line) < MAX_STR*10); + } + + sprintf(s,"%d\n",model->voiced); + strcat(line,s); + fprintf(fmodel,"%s",line); +} + +void dump_quantised_model(MODEL *model) { + int l; + char s[MAX_STR + 11]; + char line[4096]; + + if (!dumpon) return; + + if (fqmodel == NULL) { + sprintf(s,"%s_qmodel.txt", prefix); + fqmodel = fopen(s, "wt"); + assert(fqmodel != NULL); + } + + sprintf(line,"%12f %12d ", model->Wo, model->L); + for(l=1; l<=model->L; l++) { + sprintf(s,"%12f ",model->A[l]); + strcat(line, s); + assert(strlen(line) < 4096); + } + for(l=model->L+1; l<=MAX_AMP; l++) { + sprintf(s,"%12f ", 0.0); + strcat(line, s); + assert(strlen(line) < 4096); + } + + sprintf(s,"%d\n",model->voiced); + strcat(line, s); + fprintf(fqmodel, "%s", line); +} + +void dump_phase(float phase[], int L) { + int l; + char s[MAX_STR + 10]; + + if (!dumpon) return; + + if (fphase == NULL) { + sprintf(s,"%s_phase.txt", prefix); + fphase = fopen(s, "wt"); + assert(fphase != NULL); + } + + for(l=1; l<=L; l++) + fprintf(fphase,"%f\t",phase[l]); + for(l=L+1; l<=MAX_AMP; l++) + fprintf(fphase,"%f\t",0.0); + fprintf(fphase,"\n"); +} + +void dump_phase_(float phase_[], int L) { + int l; + char s[MAX_STR + 11]; + + if (!dumpon) return; + + if (fphase_ == NULL) { + sprintf(s,"%s_phase_.txt", prefix); + fphase_ = fopen(s, "wt"); + assert(fphase_ != NULL); + } + + for(l=1; l<=L; l++) + fprintf(fphase_,"%f\t",phase_[l]); + for(l=L+1; l. +*/ + +#ifndef __DUMP__ +#define __DUMP__ + +#include "defines.h" +#include "comp.h" +#include "codec2_fft.h" +#include "codec2_internal.h" + +void dump_on(char filename_prefix[]); +void dump_off(); + +void dump_Sn(int m_pitch, float Sn[]); +void dump_Sw(COMP Sw[]); +void dump_Sw_(COMP Sw_[]); +void dump_Ew(COMP Ew[]); +void dump_softdec(float *softdec, int n); + +/* amplitude modelling */ + +void dump_model(MODEL *m); +void dump_quantised_model(MODEL *m); +void dump_Pwn(COMP Pw[]); +void dump_Pw(float Pw[]); +void dump_Rw(float Rw[]); +void dump_lsp(float lsp[]); +void dump_weights(float w[], int ndim); +void dump_lsp_(float lsp_[]); +void dump_mel(float mel[], int order); +void dump_mel_indexes(int mel_indexes[], int order); +void dump_ak(float ak[], int order); +void dump_ak_(float ak[], int order); +void dump_E(float E); +void dump_lpc_snr(float snr); + +/* phase modelling */ + +void dump_snr(float snr); +void dump_phase(float phase[], int L); +void dump_phase_(float phase[], int L); +void dump_hephase(int ind[], int dim); + +/* NLP states */ + +void dump_sq(int m_pitch, float sq[]); +void dump_dec(COMP Fw[]); +void dump_Fw(COMP Fw[]); +void dump_e(float e_hz[]); +#if 0 +void dump_Rk(float Rk[]); +#endif + +/* post filter */ + +void dump_bg(float e, float bg_est, float percent_uv); +void dump_Pwb(float Pwb[]); + +#endif diff --git a/libcodec2-android/src/codec2/src/fdmdv.c b/libcodec2-android/src/codec2/src/fdmdv.c new file mode 100644 index 0000000..385b294 --- /dev/null +++ b/libcodec2-android/src/codec2/src/fdmdv.c @@ -0,0 +1,1987 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: fdmdv.c + AUTHOR......: David Rowe + DATE CREATED: April 14 2012 + + Functions that implement the FDMDV modem. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2012 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +/*---------------------------------------------------------------------------*\ + + INCLUDES + +\*---------------------------------------------------------------------------*/ + +#include +#include +#include +#include +#include + +#include "fdmdv_internal.h" +#include "codec2_fdmdv.h" +#include "comp_prim.h" +#include "rn.h" +#include "rxdec_coeff.h" +#include "test_bits.h" +#include "pilot_coeff.h" +#include "codec2_fft.h" +#include "hanning.h" +#include "os.h" +#include "machdep.h" + +#include "debug_alloc.h" + +static int sync_uw[] = {1,-1,1,-1,1,-1}; + +static const COMP pi_on_4 = { .70710678118654752439, .70710678118654752439 }; // cosf(PI/4) , sinf(PI/4) + + +/*--------------------------------------------------------------------------* \ + + FUNCTION....: fdmdv_create + AUTHOR......: David Rowe + DATE CREATED: 16/4/2012 + + Create and initialise an instance of the modem. Returns a pointer + to the modem states or NULL on failure. One set of states is + sufficient for a full duplex modem. + +\*---------------------------------------------------------------------------*/ + +struct FDMDV * fdmdv_create(int Nc) +{ + struct FDMDV *f; + int c, i, k; + + assert(NC == FDMDV_NC_MAX); /* check public and private #defines match */ + assert(Nc <= NC); + assert(FDMDV_NOM_SAMPLES_PER_FRAME == M_FAC); + assert(FDMDV_MAX_SAMPLES_PER_FRAME == (M_FAC+M_FAC/P)); + + f = (struct FDMDV*)MALLOC(sizeof(struct FDMDV)); + if (f == NULL) + return NULL; + + f->Nc = Nc; + + f->ntest_bits = Nc*NB*4; + f->current_test_bit = 0; + f->rx_test_bits_mem = (int*)MALLOC(sizeof(int)*f->ntest_bits); + assert(f->rx_test_bits_mem != NULL); + for(i=0; intest_bits; i++) + f->rx_test_bits_mem[i] = 0; + assert((sizeof(test_bits)/sizeof(int)) >= f->ntest_bits); + + f->old_qpsk_mapping = 0; + + f->tx_pilot_bit = 0; + + for(c=0; cprev_tx_symbols[c].real = 1.0; + f->prev_tx_symbols[c].imag = 0.0; + f->prev_rx_symbols[c].real = 1.0; + f->prev_rx_symbols[c].imag = 0.0; + + for(k=0; ktx_filter_memory[c][k].real = 0.0; + f->tx_filter_memory[c][k].imag = 0.0; + } + + /* Spread initial FDM carrier phase out as far as possible. + This helped PAPR for a few dB. We don't need to adjust rx + phase as DQPSK takes care of that. */ + + f->phase_tx[c].real = cosf(2.0*PI*c/(Nc+1)); + f->phase_tx[c].imag = sinf(2.0*PI*c/(Nc+1)); + + f->phase_rx[c].real = 1.0; + f->phase_rx[c].imag = 0.0; + + for(k=0; krx_filter_mem_timing[c][k].real = 0.0; + f->rx_filter_mem_timing[c][k].imag = 0.0; + } + } + f->prev_tx_symbols[Nc].real = 2.0; + + fdmdv_set_fsep(f, FSEP); + f->freq[Nc].real = cosf(2.0*PI*0.0/FS); + f->freq[Nc].imag = sinf(2.0*PI*0.0/FS); + f->freq_pol[Nc] = 2.0*PI*0.0/FS; + + f->fbb_rect.real = cosf(2.0*PI*FDMDV_FCENTRE/FS); + f->fbb_rect.imag = sinf(2.0*PI*FDMDV_FCENTRE/FS); + f->fbb_pol = 2.0*PI*FDMDV_FCENTRE/FS; + f->fbb_phase_tx.real = 1.0; + f->fbb_phase_tx.imag = 0.0; + f->fbb_phase_rx.real = 1.0; + f->fbb_phase_rx.imag = 0.0; + + /* Generate DBPSK pilot Look Up Table (LUT) */ + + generate_pilot_lut(f->pilot_lut, &f->freq[Nc]); + + /* freq Offset estimation states */ + + f->fft_pilot_cfg = codec2_fft_alloc (MPILOTFFT, 0, NULL, NULL); + assert(f->fft_pilot_cfg != NULL); + + for(i=0; ipilot_baseband1[i].real = f->pilot_baseband2[i].real = 0.0; + f->pilot_baseband1[i].imag = f->pilot_baseband2[i].imag = 0.0; + } + f->pilot_lut_index = 0; + f->prev_pilot_lut_index = 3*M_FAC; + + for(i=0; irxdec_lpf_mem[i].real = 0.0; + f->rxdec_lpf_mem[i].imag = 0.0; + } + + for(i=0; ipilot_lpf1[i].real = f->pilot_lpf2[i].real = 0.0; + f->pilot_lpf1[i].imag = f->pilot_lpf2[i].imag = 0.0; + } + + f->foff = 0.0; + f->foff_phase_rect.real = 1.0; + f->foff_phase_rect.imag = 0.0; + + for(i=0; irx_fdm_mem[i].real = 0.0; + f->rx_fdm_mem[i].imag = 0.0; + } + + f->fest_state = 0; + f->sync = 0; + f->timer = 0; + for(i=0; isync_mem[i] = 0; + + for(c=0; csig_est[c] = 0.0; + f->noise_est[c] = 0.0; + } + + f->sig_pwr_av = 0.0; + f->foff_filt = 0.0; + + return f; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: fdmdv_destroy + AUTHOR......: David Rowe + DATE CREATED: 16/4/2012 + + Destroy an instance of the modem. + +\*---------------------------------------------------------------------------*/ + +void fdmdv_destroy(struct FDMDV *fdmdv) +{ + assert(fdmdv != NULL); + codec2_fft_free(fdmdv->fft_pilot_cfg); + FREE(fdmdv->rx_test_bits_mem); + FREE(fdmdv); +} + + +void fdmdv_use_old_qpsk_mapping(struct FDMDV *fdmdv) { + fdmdv->old_qpsk_mapping = 1; +} + + +int fdmdv_bits_per_frame(struct FDMDV *fdmdv) +{ + return (fdmdv->Nc * NB); +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: fdmdv_get_test_bits() + AUTHOR......: David Rowe + DATE CREATED: 16/4/2012 + + Generate a frame of bits from a repeating sequence of random data. OK so + it's not very random if it repeats but it makes syncing at the demod easier + for test purposes. + +\*---------------------------------------------------------------------------*/ + +void fdmdv_get_test_bits(struct FDMDV *f, int tx_bits[]) +{ + int i; + int bits_per_frame = fdmdv_bits_per_frame(f); + + for(i=0; icurrent_test_bit]; + f->current_test_bit++; + if (f->current_test_bit > (f->ntest_bits-1)) + f->current_test_bit = 0; + } +} + +float fdmdv_get_fsep(struct FDMDV *f) +{ + return f->fsep; +} + +void fdmdv_set_fsep(struct FDMDV *f, float fsep) { + int c; + float carrier_freq; + + f->fsep = fsep; + + /* Set up frequency of each carrier */ + + for(c=0; cNc/2; c++) { + carrier_freq = (-f->Nc/2 + c)*f->fsep; + f->freq[c].real = cosf(2.0*PI*carrier_freq/FS); + f->freq[c].imag = sinf(2.0*PI*carrier_freq/FS); + f->freq_pol[c] = 2.0*PI*carrier_freq/FS; + } + + for(c=f->Nc/2; cNc; c++) { + carrier_freq = (-f->Nc/2 + c + 1)*f->fsep; + f->freq[c].real = cosf(2.0*PI*carrier_freq/FS); + f->freq[c].imag = sinf(2.0*PI*carrier_freq/FS); + f->freq_pol[c] = 2.0*PI*carrier_freq/FS; + } +} + + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: bits_to_dqpsk_symbols() + AUTHOR......: David Rowe + DATE CREATED: 16/4/2012 + + Maps bits to parallel DQPSK symbols. Generate Nc+1 QPSK symbols from + vector of (1,Nc*Nb) input tx_bits. The Nc+1 symbol is the +1 -1 +1 + .... BPSK sync carrier. + +\*---------------------------------------------------------------------------*/ + +void bits_to_dqpsk_symbols(COMP tx_symbols[], int Nc, COMP prev_tx_symbols[], int tx_bits[], int *pilot_bit, int old_qpsk_mapping) +{ + int c, msb, lsb; + COMP j = {0.0,1.0}; + + /* Map tx_bits to to Nc DQPSK symbols. Note legacy support for + old (suboptimal) V0.91 FreeDV mapping */ + + for(c=0; creal /= mag; + fbb_phase->imag /= mag; + + /* shift memory, inserting zeros at end */ + + for(i=0; ireal /= mag; + fbb_phase->imag /= mag; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: fdmdv_mod() + AUTHOR......: David Rowe + DATE CREATED: 26/4/2012 + + FDMDV modulator, take a frame of FDMDV_BITS_PER_FRAME bits and + generates a frame of FDMDV_SAMPLES_PER_FRAME modulated symbols. + Sync bit is returned to aid alignment of your next frame. + + The sync_bit value returned will be used for the _next_ frame. + + The output signal is complex to support single sided frequency + shifting, for example when testing frequency offsets in channel + simulation. + +\*---------------------------------------------------------------------------*/ + +void fdmdv_mod(struct FDMDV *fdmdv, COMP tx_fdm[], int tx_bits[], int *sync_bit) +{ + COMP tx_symbols[NC+1]; + PROFILE_VAR(mod_start, tx_filter_and_upconvert_start); + + PROFILE_SAMPLE(mod_start); + bits_to_dqpsk_symbols(tx_symbols, fdmdv->Nc, fdmdv->prev_tx_symbols, tx_bits, &fdmdv->tx_pilot_bit, fdmdv->old_qpsk_mapping); + memcpy(fdmdv->prev_tx_symbols, tx_symbols, sizeof(COMP)*(fdmdv->Nc+1)); + PROFILE_SAMPLE_AND_LOG(tx_filter_and_upconvert_start, mod_start, " bits_to_dqpsk_symbols"); + tx_filter_and_upconvert(tx_fdm, fdmdv->Nc, tx_symbols, fdmdv->tx_filter_memory, + fdmdv->phase_tx, fdmdv->freq, &fdmdv->fbb_phase_tx, fdmdv->fbb_rect); + PROFILE_SAMPLE_AND_LOG2(tx_filter_and_upconvert_start, " tx_filter_and_upconvert"); + + *sync_bit = fdmdv->tx_pilot_bit; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: generate_pilot_fdm() + AUTHOR......: David Rowe + DATE CREATED: 19/4/2012 + + Generate M_FAC samples of DBPSK pilot signal for Freq offset estimation. + +\*---------------------------------------------------------------------------*/ + +void generate_pilot_fdm(COMP *pilot_fdm, int *bit, float *symbol, + float *filter_mem, COMP *phase, COMP *freq) +{ + int i,j,k; + float tx_baseband[M_FAC]; + + /* +1 -1 +1 -1 DBPSK sync carrier, once filtered becomes (roughly) + two spectral lines at +/- RS/2 */ + + if (*bit) + *symbol = -*symbol; + + if (*bit) + *bit = 0; + else + *bit = 1; + + /* filter DPSK symbol to create M_FAC baseband samples */ + + filter_mem[NFILTER-1] = (sqrtf(2)/2) * *symbol; + for(i=0; ireal; + pilot_fdm[i].imag = sqrtf(2)*2*tx_baseband[i] * phase->imag; + } +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: generate_pilot_lut() + AUTHOR......: David Rowe + DATE CREATED: 19/4/2012 + + Generate a 4M sample vector of DBPSK pilot signal. As the pilot signal + is periodic in 4M samples we can then use this vector as a look up table + for pilot signal generation in the demod. + +\*---------------------------------------------------------------------------*/ + +void generate_pilot_lut(COMP pilot_lut[], COMP *pilot_freq) +{ + int pilot_rx_bit = 0; + float pilot_symbol = sqrtf(2.0); + COMP pilot_phase = {1.0, 0.0}; + float pilot_filter_mem[NFILTER]; + COMP pilot[M_FAC]; + int i,f; + + for(i=0; i= 4) + memcpy(&pilot_lut[M_FAC*(f-4)], pilot, M_FAC*sizeof(COMP)); + } + + // create complex conjugate since we need this and only this later on + for (f=0;f<4*M_FAC;f++) + { + pilot_lut[f] = cconj(pilot_lut[f]); + } + +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: lpf_peak_pick() + AUTHOR......: David Rowe + DATE CREATED: 20/4/2012 + + LPF and peak pick part of freq est, put in a function as we call it twice. + +\*---------------------------------------------------------------------------*/ + +void lpf_peak_pick(float *foff, float *max, COMP pilot_baseband[], + COMP pilot_lpf[], codec2_fft_cfg fft_pilot_cfg, COMP S[], int nin, + int do_fft) +{ + int i,j,k; + int mpilot; + float mag, imax; + int ix; + float r; + + /* LPF cutoff 200Hz, so we can handle max +/- 200 Hz freq offset */ + + for(i=0; i imax) { + imax = mag; + ix = i; + } + } + r = 2.0*200.0/MPILOTFFT; /* maps FFT bin to frequency in Hz */ + + if (ix >= MPILOTFFT/2) + *foff = (ix - MPILOTFFT)*r; + else + *foff = (ix)*r; + } + + *max = imax; + +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: rx_est_freq_offset() + AUTHOR......: David Rowe + DATE CREATED: 19/4/2012 + + Estimate frequency offset of FDM signal using BPSK pilot. Note that + this algorithm is quite sensitive to pilot tone level wrt other + carriers, so test variations to the pilot amplitude carefully. + +\*---------------------------------------------------------------------------*/ + +float rx_est_freq_offset(struct FDMDV *f, COMP rx_fdm[], int nin, int do_fft) +{ + int i; +#ifndef FDV_ARM_MATH + int j; +#endif + COMP pilot[M_FAC+M_FAC/P]; + COMP prev_pilot[M_FAC+M_FAC/P]; + float foff, foff1, foff2; + float max1, max2; + + assert(nin <= M_FAC+M_FAC/P); + + /* get pilot samples used for correlation/down conversion of rx signal */ + + for (i=0; ipilot_lut[f->pilot_lut_index]; + f->pilot_lut_index++; + if (f->pilot_lut_index >= 4*M_FAC) + f->pilot_lut_index = 0; + + prev_pilot[i] = f->pilot_lut[f->prev_pilot_lut_index]; + f->prev_pilot_lut_index++; + if (f->prev_pilot_lut_index >= 4*M_FAC) + f->prev_pilot_lut_index = 0; + } + + /* + Down convert latest M_FAC samples of pilot by multiplying by ideal + BPSK pilot signal we have generated locally. The peak of the + resulting signal is sensitive to the time shift between the + received and local version of the pilot, so we do it twice at + different time shifts and choose the maximum. + */ + + for(i=0; ipilot_baseband1[i] = f->pilot_baseband1[i+nin]; + f->pilot_baseband2[i] = f->pilot_baseband2[i+nin]; + } + +#ifndef FDV_ARM_MATH + for(i=0,j=NPILOTBASEBAND-nin; ipilot_baseband1[j] = cmult(rx_fdm[i], pilot[i]); + f->pilot_baseband2[j] = cmult(rx_fdm[i], prev_pilot[i]); + } +#else + // TODO: Maybe a handwritten mult taking advantage of rx_fdm[0] being + // used twice would be faster but this is for sure faster than + // the implementation above in any case. + arm_cmplx_mult_cmplx_f32(&rx_fdm[0].real,&pilot[0].real,&f->pilot_baseband1[NPILOTBASEBAND-nin].real,nin); + arm_cmplx_mult_cmplx_f32(&rx_fdm[0].real,&prev_pilot[0].real,&f->pilot_baseband2[NPILOTBASEBAND-nin].real,nin); +#endif + + lpf_peak_pick(&foff1, &max1, f->pilot_baseband1, f->pilot_lpf1, f->fft_pilot_cfg, f->S1, nin, do_fft); + lpf_peak_pick(&foff2, &max2, f->pilot_baseband2, f->pilot_lpf2, f->fft_pilot_cfg, f->S2, nin, do_fft); + + if (max1 > max2) + foff = foff1; + else + foff = foff2; + + return foff; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: fdmdv_freq_shift() + AUTHOR......: David Rowe + DATE CREATED: 26/4/2012 + + Frequency shift modem signal. The use of complex input and output allows + single sided frequency shifting (no images). + +\*---------------------------------------------------------------------------*/ + +void fdmdv_freq_shift(COMP rx_fdm_fcorr[], COMP rx_fdm[], float foff, + COMP *foff_phase_rect, int nin) +{ + COMP foff_rect; + float mag; + int i; + + foff_rect.real = cosf(2.0*PI*foff/FS); + foff_rect.imag = sinf(2.0*PI*foff/FS); + for(i=0; ireal /= mag; + foff_phase_rect->imag /= mag; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: fdm_downconvert + AUTHOR......: David Rowe + DATE CREATED: 22/4/2012 + + Frequency shift each modem carrier down to Nc+1 baseband signals. + +\*---------------------------------------------------------------------------*/ + +void fdm_downconvert(COMP rx_baseband[NC+1][M_FAC+M_FAC/P], int Nc, COMP rx_fdm[], COMP phase_rx[], COMP freq[], int nin) +{ + int i,c; + float mag; + + /* maximum number of input samples to demod */ + + assert(nin <= (M_FAC+M_FAC/P)); + + /* downconvert */ + + for (c=0; c + nin + |--------------------------|---------| + 1 | + phase_rx(c) + + This means winding phase(c) back from this point + to ensure phase continuity. + + */ + + //PROFILE_SAMPLE(windback_start); + windback_phase = -freq_pol[c]*NFILTER; + windback_phase_rect.real = cosf(windback_phase); + windback_phase_rect.imag = sinf(windback_phase); + phase_rx[c] = cmult(phase_rx[c],windback_phase_rect); + //PROFILE_SAMPLE_AND_LOG(downconvert_start, windback_start, " windback"); + + /* down convert all samples in buffer */ + + st = NRX_FDM_MEM-1; /* end of buffer */ + st -= nin-1; /* first new sample */ + st -= NFILTER; /* first sample used in filtering */ + + /* freq shift per dec_rate step is dec_rate times original shift */ + + f_rect = freq[c]; + for(i=0; i P) + rx_timing -= P; + if (rx_timing < -P) + rx_timing += P; + + /* rx_filter_mem_timing contains Nt*P samples (Nt symbols at rate + P), where Nt is odd. Lets use linear interpolation to resample + in the centre of the timing estimation window .*/ + + rx_timing += floorf(NT/2.0)*P; + low_sample = floorf(rx_timing); + fract = rx_timing - low_sample; + high_sample = ceilf(rx_timing); + + //printf("rx_timing: %f low_sample: %d high_sample: %d fract: %f\n", rx_timing, low_sample, high_sample, fract); + + for(c=0; c= 0) && (d.imag >= 0)) { + msb = 0; lsb = 0; + } + if ((d.real < 0) && (d.imag >= 0)) { + msb = 0; lsb = 1; + } + if ((d.real < 0) && (d.imag < 0)) { + if (old_qpsk_mapping) { + msb = 1; lsb = 0; + } else { + msb = 1; lsb = 1; + } + } + if ((d.real >= 0) && (d.imag < 0)) { + if (old_qpsk_mapping) { + msb = 1; lsb = 1; + } else { + msb = 1; lsb = 0; + } + } + rx_bits[2*c] = msb; + rx_bits[2*c+1] = lsb; + } + + /* Extract DBPSK encoded Sync bit and fine freq offset estimate */ + + norm = 1.0/(cabsolute(prev_rx_symbols[Nc])+1E-6); + phase_difference[Nc] = cmult(rx_symbols[Nc], fcmult(norm, cconj(prev_rx_symbols[Nc]))); + if (phase_difference[Nc].real < 0) { + *sync_bit = 1; + ferr = phase_difference[Nc].imag*norm; /* make f_err magnitude insensitive */ + } + else { + *sync_bit = 0; + ferr = -phase_difference[Nc].imag*norm; + } + + /* pilot carrier gets an extra pi/4 rotation to make it consistent + with other carriers, as we need it for snr_update and scatter + diagram */ + + phase_difference[Nc] = cmult(phase_difference[Nc], pi_on_4); + + return ferr; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: snr_update() + AUTHOR......: David Rowe + DATE CREATED: 17 May 2012 + + Given phase differences update estimates of signal and noise levels. + +\*---------------------------------------------------------------------------*/ + +void snr_update(float sig_est[], float noise_est[], int Nc, COMP phase_difference[]) +{ + float s[NC+1]; + COMP refl_symbols[NC+1]; + float n[NC+1]; + int c; + + + /* mag of each symbol is distance from origin, this gives us a + vector of mags, one for each carrier. */ + + for(c=0; cntest_bits; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: fdmdv_put_test_bits() + AUTHOR......: David Rowe + DATE CREATED: 24/4/2012 + + Accepts nbits from rx and attempts to sync with test_bits sequence. + If sync OK measures bit errors. + +\*---------------------------------------------------------------------------*/ + +void fdmdv_put_test_bits(struct FDMDV *f, int *sync, short error_pattern[], + int *bit_errors, int *ntest_bits, int rx_bits[]) +{ + int i,j; + float ber; + int bits_per_frame = fdmdv_bits_per_frame(f); + + /* Append to our memory */ + + for(i=0,j=bits_per_frame; intest_bits-bits_per_frame; i++,j++) + f->rx_test_bits_mem[i] = f->rx_test_bits_mem[j]; + for(i=f->ntest_bits-bits_per_frame,j=0; intest_bits; i++,j++) + f->rx_test_bits_mem[i] = rx_bits[j]; + + /* see how many bit errors we get when checked against test sequence */ + + *bit_errors = 0; + for(i=0; intest_bits; i++) { + error_pattern[i] = test_bits[i] ^ f->rx_test_bits_mem[i]; + *bit_errors += error_pattern[i]; + //printf("%d %d %d %d\n", i, test_bits[i], f->rx_test_bits_mem[i], test_bits[i] ^ f->rx_test_bits_mem[i]); + } + + /* if less than a thresh we are aligned and in sync with test sequence */ + + ber = (float)*bit_errors/f->ntest_bits; + + *sync = 0; + if (ber < 0.2) + *sync = 1; + + *ntest_bits = f->ntest_bits; + +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: freq_state(() + AUTHOR......: David Rowe + DATE CREATED: 24/4/2012 + + Freq offset state machine. Moves between coarse and fine states + based on BPSK pilot sequence. Freq offset estimator occasionally + makes mistakes when used continuously. So we use it until we have + acquired the BPSK pilot, then switch to a more robust "fine" + tracking algorithm. If we lose sync we switch back to coarse mode + for fast re-acquisition of large frequency offsets. + + The sync state is also useful for higher layers to determine when + there is valid FDMDV data for decoding. We want to reliably and + quickly get into sync, stay in sync even on fading channels, and + fall out of sync quickly if tx stops or it's a false sync. + + In multipath fading channels the BPSK sync carrier may be pushed + down in the noise, despite other carriers being at full strength. + We want to avoid loss of sync in these cases. + +\*---------------------------------------------------------------------------*/ + +int freq_state(int *reliable_sync_bit, int sync_bit, int *state, int *timer, int *sync_mem) +{ + int next_state, sync, unique_word, i, corr; + + /* look for 6 symbols (120ms) 101010 of sync sequence */ + + unique_word = 0; + for(i=0; ifbb_phase_rx, *nin); + + /* freq offset estimation and correction */ + + PROFILE_SAMPLE(demod_start); + foff_coarse = rx_est_freq_offset(fdmdv, rx_fdm_bb, *nin, !fdmdv->sync); + PROFILE_SAMPLE_AND_LOG(fdmdv_freq_shift_start, demod_start, " rx_est_freq_offset"); + + if (fdmdv->sync == 0) + fdmdv->foff = foff_coarse; + fdmdv_freq_shift(rx_fdm_fcorr, rx_fdm_bb, -fdmdv->foff, &fdmdv->foff_phase_rect, *nin); + PROFILE_SAMPLE_AND_LOG(down_convert_and_rx_filter_start, fdmdv_freq_shift_start, " fdmdv_freq_shift"); + + /* baseband processing */ + + rxdec_filter(rx_fdm_filter, rx_fdm_fcorr, fdmdv->rxdec_lpf_mem, *nin); + down_convert_and_rx_filter(rx_filt, fdmdv->Nc, rx_fdm_filter, fdmdv->rx_fdm_mem, fdmdv->phase_rx, fdmdv->freq, + fdmdv->freq_pol, *nin, M_FAC/Q); + PROFILE_SAMPLE_AND_LOG(rx_est_timing_start, down_convert_and_rx_filter_start, " down_convert_and_rx_filter"); + fdmdv->rx_timing = rx_est_timing(rx_symbols, fdmdv->Nc, rx_filt, fdmdv->rx_filter_mem_timing, env, *nin, M_FAC); + PROFILE_SAMPLE_AND_LOG(qpsk_to_bits_start, rx_est_timing_start, " rx_est_timing"); + + /* Adjust number of input samples to keep timing within bounds */ + + *nin = M_FAC; + + if (fdmdv->rx_timing > M_FAC/P) + *nin += M_FAC/P; + + if (fdmdv->rx_timing < -M_FAC/P) + *nin -= M_FAC/P; + + foff_fine = qpsk_to_bits(rx_bits, &sync_bit, fdmdv->Nc, fdmdv->phase_difference, fdmdv->prev_rx_symbols, rx_symbols, + fdmdv->old_qpsk_mapping); + memcpy(fdmdv->prev_rx_symbols, rx_symbols, sizeof(COMP)*(fdmdv->Nc+1)); + PROFILE_SAMPLE_AND_LOG(snr_update_start, qpsk_to_bits_start, " qpsk_to_bits"); + snr_update(fdmdv->sig_est, fdmdv->noise_est, fdmdv->Nc, fdmdv->phase_difference); + PROFILE_SAMPLE_AND_LOG(freq_state_start, snr_update_start, " snr_update"); + + /* freq offset estimation state machine */ + + fdmdv->sync = freq_state(reliable_sync_bit, sync_bit, &fdmdv->fest_state, &fdmdv->timer, fdmdv->sync_mem); + PROFILE_SAMPLE_AND_LOG2(freq_state_start, " freq_state"); + fdmdv->foff -= TRACK_COEFF*foff_fine; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: calc_snr() + AUTHOR......: David Rowe + DATE CREATED: 17 May 2012 + + Calculate current SNR estimate (3000Hz noise BW) + +\*---------------------------------------------------------------------------*/ + +float calc_snr(int Nc, float sig_est[], float noise_est[]) +{ + float S, SdB; + float mean, N50, N50dB, N3000dB; + float snr_dB; + int c; + + S = 0.0; + for(c=0; cNc <= MODEM_STATS_NC_MAX); + + stats->Nc = fdmdv->Nc; + stats->snr_est = calc_snr(fdmdv->Nc, fdmdv->sig_est, fdmdv->noise_est); + stats->sync = fdmdv->sync; + stats->foff = fdmdv->foff; + stats->rx_timing = fdmdv->rx_timing; + stats->clock_offset = 0.0; /* TODO - implement clock offset estimation */ + +#ifndef __EMBEDDED__ + stats->nr = 1; + for(int c=0; cNc+1; c++) { + stats->rx_symbols[0][c] = fdmdv->phase_difference[c]; + } +#endif +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: fdmdv_8_to_16() + AUTHOR......: David Rowe + DATE CREATED: 9 May 2012 + + Changes the sample rate of a signal from 8 to 16 kHz. Support function for + SM1000. + +\*---------------------------------------------------------------------------*/ + +void fdmdv_8_to_16(float out16k[], float in8k[], int n) +{ + int i,k,l; + float acc; + + /* make sure n is an integer multiple of the oversampling rate, ow + this function breaks */ + + assert((n % FDMDV_OS) == 0); + + /* this version unrolled for specific FDMDV_OS */ + + assert(FDMDV_OS == 2); + + for(i=0; iNc; i++) + fprintf(stderr," %1.3f", (double)cabsolute(f->phase_tx[i])); + fprintf(stderr,"\nfreq[]:\n"); + for(i=0; i<=f->Nc; i++) + fprintf(stderr," %1.3f", (double)cabsolute(f->freq[i])); + fprintf(stderr,"\nfoff_phase_rect: %1.3f", (double)cabsolute(f->foff_phase_rect)); + fprintf(stderr,"\nphase_rx[]:\n"); + for(i=0; i<=f->Nc; i++) + fprintf(stderr," %1.3f", (double)cabsolute(f->phase_rx[i])); + fprintf(stderr, "\n\n"); +} + + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: randn() + AUTHOR......: David Rowe + DATE CREATED: 2 August 2014 + + Simple approximation to normal (gaussian) random number generator + with 0 mean and unit variance. + +\*---------------------------------------------------------------------------*/ + +#define RANDN_IT 12 /* This magic number of iterations gives us a + unit variance. I think beacuse var = + (b-a)^2/12 for one uniform random variable, so + for a sum of n random variables it's + n(b-a)^2/12, or for b=1, a = 0, n=12, we get + var = 12(1-0)^2/12 = 1 */ + +static float randn() { + int i; + float rn = 0.0; + + for(i=0; isig_pwr_av: %e target_snr_linear: %f noise_pwr_4000Hz: %e noise_gain: %e\n", + sig_pwr, f->sig_pwr_av, target_snr_linear, noise_pwr_4000Hz, noise_gain); + */ +} diff --git a/libcodec2-android/src/codec2/src/fdmdv_channel.c b/libcodec2-android/src/codec2/src/fdmdv_channel.c new file mode 100644 index 0000000..fba70b0 --- /dev/null +++ b/libcodec2-android/src/codec2/src/fdmdv_channel.c @@ -0,0 +1,104 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: fdmdv_channel.c + AUTHOR......: David Rowe + DATE CREATED: 2 August 2014 + + Given an input raw file (8kHz, 16 bit shorts) of FDMDV modem + samples, adds channel impairments and outputs to another raw file. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2014 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include +#include +#include +#include +#include + +#include "codec2_fdmdv.h" +#include "fdmdv_internal.h" + +int main(int argc, char *argv[]) +{ + FILE *fin, *fout; + short rx_fdm_buf[FDMDV_NOM_SAMPLES_PER_FRAME]; + COMP rx_fdm[FDMDV_NOM_SAMPLES_PER_FRAME]; + struct FDMDV *fdmdv; + float snrdB, sam; + int i; + + if (argc < 3) { + printf("usage: %s InputModemRawFile OutputModemRawFile SNRdB\n", argv[0]); + printf("e.g %s test_in.raw test_out.raw 4\n", argv[0]); + exit(1); + } + + if (strcmp(argv[1], "-") == 0) fin = stdin; + else if ( (fin = fopen(argv[1],"rb")) == NULL ) { + fprintf(stderr, "Error opening input modem sample file: %s: %s.\n", + argv[1], strerror(errno)); + exit(1); + } + + if (strcmp(argv[2], "-") == 0) fout = stdout; + else if ( (fout = fopen(argv[2],"wb")) == NULL ) { + fprintf(stderr, "Error opening output modem sample file: %s: %s.\n", + argv[2], strerror(errno)); + exit(1); + } + + snrdB = atof(argv[3]); + fdmdv = fdmdv_create(FDMDV_NC); + + while(fread(rx_fdm_buf, sizeof(short), FDMDV_NOM_SAMPLES_PER_FRAME, fin) == FDMDV_NOM_SAMPLES_PER_FRAME) { + + for(i=0; isig_pwr_av, rx_fdm, FDMDV_NOM_SAMPLES_PER_FRAME, snrdB - 3.0); + + for(i=0; i 32767.0) sam = 32767.0; + if (sam < -32767.0) sam = -32767.0; + rx_fdm_buf[i] = sam; + } + + fwrite(rx_fdm_buf, sizeof(short), FDMDV_NOM_SAMPLES_PER_FRAME, fout); + + /* if this is in a pipeline, we probably don't want the usual + buffering to occur */ + + if (fout == stdout) fflush(stdout); + if (fin == stdin) fflush(stdin); + } + + fclose(fin); + fclose(fout); + fdmdv_destroy(fdmdv); + + return 0; +} + diff --git a/libcodec2-android/src/codec2/src/fdmdv_demod.c b/libcodec2-android/src/codec2/src/fdmdv_demod.c new file mode 100644 index 0000000..3233aba --- /dev/null +++ b/libcodec2-android/src/codec2/src/fdmdv_demod.c @@ -0,0 +1,250 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: fdmdv_demod.c + AUTHOR......: David Rowe + DATE CREATED: April 30 2012 + + Given an input raw file (8kHz, 16 bit shorts) of FDMDV modem samples + outputs a file of bits. The output file is assumed to be arranged + as codec frames of 56 bits (7 bytes) which are received as two 28 + bit modem frames. + + Demod states can be optionally logged to an Octave file for display + using the Octave script fdmdv_demod_c.m. This is useful for + checking demod performance. + +\*---------------------------------------------------------------------------*/ + + +/* + Copyright (C) 2012 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include +#include +#include +#include +#include + +#include "codec2_fdmdv.h" +#include "octave.h" +#include "freedv_api.h" + +#include "debug_alloc.h" + +/* lof of information we want to dump to Octave */ + +#define MAX_FRAMES 50*60 /* 1 minute at 50 symbols/s */ + +int main(int argc, char *argv[]) +{ + FILE *fin, *fout; + struct FDMDV *fdmdv; + char *packed_bits; + int *rx_bits; + int *codec_bits; + COMP rx_fdm[FDMDV_MAX_SAMPLES_PER_FRAME]; + short rx_fdm_scaled[FDMDV_MAX_SAMPLES_PER_FRAME]; + int i, bit, byte, c; + int nin, nin_prev; + int sync_bit = 0, reliable_sync_bit; + int sync = 0; + int f; + FILE *foct = NULL; + struct MODEM_STATS stats; + COMP *rx_fdm_log; + int rx_fdm_log_col_index; + COMP *rx_symbols_log; + int sync_log[MAX_FRAMES]; + float rx_timing_log[MAX_FRAMES]; + float foff_log[MAX_FRAMES]; + int sync_bit_log[MAX_FRAMES]; + int rx_bits_log[FDMDV_BITS_PER_FRAME*MAX_FRAMES]; + float snr_est_log[MAX_FRAMES]; + float *rx_spec_log; + int max_frames_reached; + int bits_per_fdmdv_frame; + int bits_per_codec_frame; + int bytes_per_codec_frame; + int Nc; + + if (argc < 2) { + printf("usage: %s InputModemRawFile OutputBitFile [Nc [OctaveDumpFile]]\n", argv[0]); + printf("e.g %s hts1a_fdmdv.raw hts1a.c2\n", argv[0]); + exit(1); + } + + if (strcmp(argv[1], "-") == 0) fin = stdin; + else if ( (fin = fopen(argv[1],"rb")) == NULL ) { + fprintf(stderr, "Error opening input modem sample file: %s: %s.\n", + argv[1], strerror(errno)); + exit(1); + } + + if (strcmp(argv[2], "-") == 0) fout = stdout; + else if ( (fout = fopen(argv[2],"wb")) == NULL ) { + fprintf(stderr, "Error opening output bit file: %s: %s.\n", + argv[2], strerror(errno)); + exit(1); + } + + if (argc >= 4) { + Nc = atoi(argv[3]); + + if ((Nc < 2) || (Nc > FDMDV_NC_MAX) ) { + fprintf(stderr, "Error number of carriers must be between 2 and %d\n", FDMDV_NC_MAX); + exit(1); + } + } + else + Nc = FDMDV_NC; + + fdmdv = fdmdv_create(Nc); + modem_stats_open(&stats); + + bits_per_fdmdv_frame = fdmdv_bits_per_frame(fdmdv); + bits_per_codec_frame = 2*fdmdv_bits_per_frame(fdmdv); + bytes_per_codec_frame = (bits_per_codec_frame+7)/8; + + /* malloc some buffers that are dependant on Nc */ + + packed_bits = (char*)MALLOC(bytes_per_codec_frame); assert(packed_bits != NULL); + rx_bits = (int*)MALLOC(sizeof(int)*bits_per_codec_frame); assert(rx_bits != NULL); + codec_bits = (int*)MALLOC(2*sizeof(int)*bits_per_fdmdv_frame); assert(codec_bits != NULL); + + /* malloc some of the larger variables to prevent out of stack problems */ + + rx_fdm_log = (COMP*)MALLOC(sizeof(COMP)*FDMDV_MAX_SAMPLES_PER_FRAME*MAX_FRAMES); + assert(rx_fdm_log != NULL); + rx_spec_log = (float*)MALLOC(sizeof(float)*MODEM_STATS_NSPEC*MAX_FRAMES); + assert(rx_spec_log != NULL); + rx_symbols_log = (COMP*)MALLOC(sizeof(COMP)*(Nc+1)*MAX_FRAMES); + assert(rx_fdm_log != NULL); + + f = 0; + nin = FDMDV_NOM_SAMPLES_PER_FRAME; + rx_fdm_log_col_index = 0; + max_frames_reached = 0; + + while(fread(rx_fdm_scaled, sizeof(short), nin, fin) == nin) + { + for(i=0; i. +*/ + +#include +#include +#include +#include +#include +#include + +#include "codec2_fdmdv.h" + +int main(int argc, char *argv[]) +{ + FILE *fout; + struct FDMDV *fdmdv; + char *packed_bits; + int *tx_bits; + int n, i, bit, byte; + int numBits, nCodecFrames; + int bits_per_fdmdv_frame; + int bits_per_codec_frame; + int bytes_per_codec_frame; + int Nc; + + if (argc < 3) { + printf("usage: %s OutputBitFile numBits [Nc]\n", argv[0]); + printf("e.g %s test.c2 1400\n", argv[0]); + exit(1); + } + + if (strcmp(argv[1], "-") == 0) fout = stdout; + else if ( (fout = fopen(argv[1],"wb")) == NULL ) { + fprintf(stderr, "Error opening output bit file: %s: %s.\n", + argv[1], strerror(errno)); + exit(1); + } + + numBits = atoi(argv[2]); + + if (argc == 4) { + Nc = atoi(argv[3]); + if ((Nc < 2) || (Nc > FDMDV_NC_MAX) ) { + fprintf(stderr, "Error number of carriers must be btween 2 and %d\n", FDMDV_NC_MAX); + exit(1); + } + } + else + Nc = FDMDV_NC; + + fdmdv = fdmdv_create(Nc); + + bits_per_fdmdv_frame = fdmdv_bits_per_frame(fdmdv); + bits_per_codec_frame = 2*fdmdv_bits_per_frame(fdmdv); + bytes_per_codec_frame = (bits_per_codec_frame+7)/8; + fprintf(stderr, "bits_per_fdmdv_frame: %d bits_per_codec_frame: %d bytes_per_codec_frame: %d\n", + bits_per_fdmdv_frame, bits_per_codec_frame, bytes_per_codec_frame); + + packed_bits = (char*)malloc(bytes_per_codec_frame); + assert(packed_bits != NULL); + tx_bits = (int*)malloc(sizeof(int)*bits_per_codec_frame); + assert(tx_bits != NULL); + + nCodecFrames = numBits/bits_per_codec_frame; + + for(n=0; n. +*/ + +#ifndef __FDMDV_INTERNAL__ +#define __FDMDV_INTERNAL__ + +#include "comp.h" +#include "codec2_fdmdv.h" +#include "codec2_fft.h" + +/*---------------------------------------------------------------------------*\ + + DEFINES + +\*---------------------------------------------------------------------------*/ + +#ifndef PI +#define PI 3.141592654 +#endif +#define FS 8000 /* sample rate in Hz */ +#define FS_VOICE_8K 8000 /* speech sample rate, 8000 Hz */ +#define FS_VOICE_16K 16000 /* speech sample rate, 16000 Hz */ +#define T (1.0/FS) /* sample period in seconds */ +#define RS 50 /* symbol rate in Hz */ +#define NC 20 /* max number of data carriers (plus one pilot in the centre) */ +#define NB 2 /* Bits/symbol for QPSK modulation */ +#define RB (NC*RS*NB) /* bit rate */ +#define M_FAC (FS/RS) /* oversampling factor */ +#define NSYM 6 /* number of symbols to filter over */ +#define NFILTER (NSYM*M_FAC) /* size of tx/rx filters at sample rate M */ + +#define FSEP 75 /* Default separation between carriers (Hz) */ + +#define NT 5 /* number of symbols we estimate timing over */ +#define P 4 /* oversample factor used for initial rx symbol filtering output */ +#define Q (M_FAC/4) /* oversample factor used for initial rx symbol filtering input */ +#define NRXDEC 31 /* number of taps in the rx decimation filter */ + +#define NPILOT_LUT (4*M_FAC) /* number of pilot look up table samples */ +#define NPILOTCOEFF 30 /* number of FIR filter coeffs in LP filter */ +#define NPILOTBASEBAND (NPILOTCOEFF+M_FAC+M_FAC/P) /* number of pilot baseband samples reqd for pilot LPF */ +#define NPILOTLPF (4*M_FAC) /* number of samples we DFT pilot over, pilot est window */ +#define MPILOTFFT 256 + +#define NSYNC_MEM 6 + +#define NRX_FDM_MEM (NFILTER+M_FAC+M_FAC/P) /* size of rx filter memory */ +#define NRXDECMEM (NRXDEC+M_FAC+M_FAC/P) /* size of rx decimation filter memory */ + +/* averaging filter coeffs */ + +#define TRACK_COEFF 0.5 +#define SNR_COEFF 0.9 /* SNR est averaging filter coeff */ + +/*---------------------------------------------------------------------------*\ + + STRUCT for States + +\*---------------------------------------------------------------------------*/ + +struct FDMDV { + + int Nc; + float fsep; + + /* test data (test frame) states */ + + int ntest_bits; + int current_test_bit; + int *rx_test_bits_mem; + + /* Modulator */ + + int old_qpsk_mapping; + int tx_pilot_bit; + COMP prev_tx_symbols[NC+1]; + COMP tx_filter_memory[NC+1][NSYM]; + COMP phase_tx[NC+1]; + COMP freq[NC+1]; + float freq_pol[NC+1]; + + /* Pilot generation at demodulator */ + + COMP pilot_lut[NPILOT_LUT]; + int pilot_lut_index; + int prev_pilot_lut_index; + + /* freq offset estimation states */ + + codec2_fft_cfg fft_pilot_cfg; + COMP pilot_baseband1[NPILOTBASEBAND]; + COMP pilot_baseband2[NPILOTBASEBAND]; + COMP pilot_lpf1[NPILOTLPF]; + COMP pilot_lpf2[NPILOTLPF]; + COMP S1[MPILOTFFT]; + COMP S2[MPILOTFFT]; + + /* baseband to low IF carrier states */ + + COMP fbb_rect; + float fbb_pol; + COMP fbb_phase_tx; + COMP fbb_phase_rx; + + /* freq offset correction states */ + + float foff; + COMP foff_phase_rect; + float foff_filt; + + /* Demodulator */ + + COMP rxdec_lpf_mem[NRXDECMEM]; + COMP rx_fdm_mem[NRX_FDM_MEM]; + COMP phase_rx[NC+1]; + COMP rx_filter_mem_timing[NC+1][NT*P]; + float rx_timing; + COMP phase_difference[NC+1]; + COMP prev_rx_symbols[NC+1]; + + /* sync state machine */ + + int sync_mem[NSYNC_MEM]; + int fest_state; + int sync; + int timer; + + /* SNR estimation states */ + + float sig_est[NC+1]; + float noise_est[NC+1]; + + /* channel simulation */ + + float sig_pwr_av; +}; + +/*---------------------------------------------------------------------------*\ + + FUNCTION PROTOTYPES + +\*---------------------------------------------------------------------------*/ + +void bits_to_dqpsk_symbols(COMP tx_symbols[], int Nc, COMP prev_tx_symbols[], int tx_bits[], int *pilot_bit, int old_qpsk_mapping); +void tx_filter(COMP tx_baseband[NC+1][M_FAC], int Nc, COMP tx_symbols[], COMP tx_filter_memory[NC+1][NSYM]); +void fdm_upconvert(COMP tx_fdm[], int Nc, COMP tx_baseband[NC+1][M_FAC], COMP phase_tx[], COMP freq_tx[], + COMP *fbb_phase, COMP fbb_rect); +void tx_filter_and_upconvert(COMP tx_fdm[], int Nc, COMP tx_symbols[], + COMP tx_filter_memory[NC+1][NSYM], + COMP phase_tx[], COMP freq[], COMP *fbb_phase, COMP fbb_rect); +void generate_pilot_fdm(COMP *pilot_fdm, int *bit, float *symbol, float *filter_mem, COMP *phase, COMP *freq); +void generate_pilot_lut(COMP pilot_lut[], COMP *pilot_freq); +float rx_est_freq_offset(struct FDMDV *f, COMP rx_fdm[], int nin, int do_fft); +void lpf_peak_pick(float *foff, float *max, COMP pilot_baseband[], COMP pilot_lpf[], codec2_fft_cfg fft_pilot_cfg, COMP S[], int nin, int do_fft); +void fdm_downconvert(COMP rx_baseband[NC+1][M_FAC+M_FAC/P], int Nc, COMP rx_fdm[], COMP phase_rx[], COMP freq[], int nin); +void rxdec_filter(COMP rx_fdm_filter[], COMP rx_fdm[], COMP rxdec_lpf_mem[], int nin); +void rx_filter(COMP rx_filt[NC+1][P+1], int Nc, COMP rx_baseband[NC+1][M_FAC+M_FAC/P], COMP rx_filter_memory[NC+1][NFILTER], int nin); +void down_convert_and_rx_filter(COMP rx_filt[NC+1][P+1], int Nc, COMP rx_fdm[], + COMP rx_fdm_mem[], COMP phase_rx[], COMP freq[], + float freq_pol[], int nin, int dec_rate); +float rx_est_timing(COMP rx_symbols[], int Nc, + COMP rx_filt[NC+1][P+1], + COMP rx_filter_mem_timing[NC+1][NT*P], + float env[], + int nin, + int m); +float qpsk_to_bits(int rx_bits[], int *sync_bit, int Nc, COMP phase_difference[], COMP prev_rx_symbols[], COMP rx_symbols[], int old_qpsk_mapping); +void snr_update(float sig_est[], float noise_est[], int Nc, COMP phase_difference[]); +int freq_state(int *reliable_sync_bit, int sync_bit, int *state, int *timer, int *sync_mem); +float calc_snr(int Nc, float sig_est[], float noise_est[]); + +#endif diff --git a/libcodec2-android/src/codec2/src/fdmdv_mod.c b/libcodec2-android/src/codec2/src/fdmdv_mod.c new file mode 100644 index 0000000..d148953 --- /dev/null +++ b/libcodec2-android/src/codec2/src/fdmdv_mod.c @@ -0,0 +1,163 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: fdmdv_mod.c + AUTHOR......: David Rowe + DATE CREATED: April 28 2012 + + Given an input file of bits outputs a raw file (8kHz, 16 bit shorts) + of FDMDV modem samples ready to send over a HF radio channel. The + input file is assumed to be arranged as codec frames of 56 bits (7 + bytes) which we send as two 28 bit modem frames. + +\*---------------------------------------------------------------------------*/ + + +/* + Copyright (C) 2012 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include +#include +#include +#include +#include + +#include "codec2_fdmdv.h" + +int main(int argc, char *argv[]) +{ + FILE *fin, *fout; + struct FDMDV *fdmdv; + char *packed_bits; + int *tx_bits; + COMP tx_fdm[2*FDMDV_NOM_SAMPLES_PER_FRAME]; + short tx_fdm_scaled[2*FDMDV_NOM_SAMPLES_PER_FRAME]; + int frames; + int i, bit, byte; + int sync_bit; + int bits_per_fdmdv_frame; + int bits_per_codec_frame; + int bytes_per_codec_frame; + int Nc; +#ifdef CHANNEL_SIM + COMP foff_phase_rect; + float foff; +#endif + + if (argc < 3) { + printf("usage: %s InputBitFile OutputModemRawFile [Nc]\n", argv[0]); + printf("e.g %s hts1a.c2 hts1a_fdmdv.raw\n", argv[0]); + exit(1); + } + + if (strcmp(argv[1], "-") == 0) fin = stdin; + else if ( (fin = fopen(argv[1],"rb")) == NULL ) { + fprintf(stderr, "Error opening input bit file: %s: %s.\n", + argv[1], strerror(errno)); + exit(1); + } + + if (strcmp(argv[2], "-") == 0) fout = stdout; + else if ( (fout = fopen(argv[2],"wb")) == NULL ) { + fprintf(stderr, "Error opening output modem sample file: %s: %s.\n", + argv[2], strerror(errno)); + exit(1); + } + + if (argc == 4) { + Nc = atoi(argv[3]); + + if ((Nc < 2) || (Nc > FDMDV_NC_MAX) ) { + fprintf(stderr, "Error number of carriers must be btween 2 and %d\n", FDMDV_NC_MAX); + exit(1); + } + } + else + Nc = FDMDV_NC; + + fdmdv = fdmdv_create(Nc); + + bits_per_fdmdv_frame = fdmdv_bits_per_frame(fdmdv); + bits_per_codec_frame = 2*fdmdv_bits_per_frame(fdmdv); + bytes_per_codec_frame = (bits_per_codec_frame+7)/8; + + packed_bits = (char*)malloc(bytes_per_codec_frame); + assert(packed_bits != NULL); + tx_bits = (int*)malloc(sizeof(int)*bits_per_codec_frame); + assert(tx_bits != NULL); + +#ifdef CHANNEL_SIM + foff = -100; + foff_phase_rect.real = 1.0; foff_phase_rect.imag = 0.0; +#endif + + frames = 0; + + while(fread(packed_bits, sizeof(char), bytes_per_codec_frame, fin) == bytes_per_codec_frame) { + frames++; + + /* unpack bits, MSB first */ + + bit = 7; byte = 0; + for(i=0; i> bit) & 0x1; + bit--; + if (bit < 0) { + bit = 7; + byte++; + } + } + + /* modulate even and odd frames */ + + fdmdv_mod(fdmdv, tx_fdm, tx_bits, &sync_bit); + assert(sync_bit == 1); + + fdmdv_mod(fdmdv, &tx_fdm[FDMDV_NOM_SAMPLES_PER_FRAME], &tx_bits[bits_per_fdmdv_frame], &sync_bit); + assert(sync_bit == 0); + + #ifdef CHANNEL_SIM + /* optional freq shift and channel simulation */ + + fdmdv_freq_shift(tx_fdm, tx_fdm, foff, &foff_phase_rect, 2*FDMDV_NOM_SAMPLES_PER_FRAME); + fdmdv_simulate_channel(&sig_pwr_av, tx_fdm, 2*FDMDV_NOM_SAMPLES_PER_FRAME, 10.0); + #endif + + /* scale and save to disk as shorts */ + + for(i=0; i<2*FDMDV_NOM_SAMPLES_PER_FRAME; i++) + tx_fdm_scaled[i] = FDMDV_SCALE * tx_fdm[i].real; + + fwrite(tx_fdm_scaled, sizeof(short), 2*FDMDV_NOM_SAMPLES_PER_FRAME, fout); + + /* if this is in a pipeline, we probably don't want the usual + buffering to occur */ + + if (fout == stdout) fflush(stdout); + if (fin == stdin) fflush(stdin); + } + + //fdmdv_dump_osc_mags(fdmdv); + + free(tx_bits); + free(packed_bits); + fclose(fin); + fclose(fout); + fdmdv_destroy(fdmdv); + + return 0; +} diff --git a/libcodec2-android/src/codec2/src/fdmdv_put_test_bits.c b/libcodec2-android/src/codec2/src/fdmdv_put_test_bits.c new file mode 100644 index 0000000..6d8c708 --- /dev/null +++ b/libcodec2-android/src/codec2/src/fdmdv_put_test_bits.c @@ -0,0 +1,172 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: fdmdv_put_test_bits.c + AUTHOR......: David Rowe + DATE CREATED: 1 May 2012 + + Using a file of packed test bits as input, determines bit error + rate. Useful for testing fdmdv_demod. + +\*---------------------------------------------------------------------------*/ + + +/* + Copyright (C) 2012 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include +#include +#include +#include +#include + +#include "codec2_fdmdv.h" + +int main(int argc, char *argv[]) +{ + FILE *fin; + struct FDMDV *fdmdv; + char *packed_bits; + int *rx_bits; + int i, bit, byte; + int test_frame_sync, bit_errors, total_bit_errors, total_bits, ntest_bits; + int test_frame_sync_state, test_frame_count; + int bits_per_fdmdv_frame; + int bits_per_codec_frame; + int bytes_per_codec_frame; + int Nc; + short *error_pattern; + + if (argc < 2) { + printf("usage: %s InputBitFile [Nc]\n", argv[0]); + printf("e.g %s test.c2\n", argv[0]); + exit(1); + } + + if (strcmp(argv[1], "-") == 0) fin = stdin; + else if ( (fin = fopen(argv[1],"rb")) == NULL ) { + fprintf(stderr, "Error opening input bit file: %s: %s.\n", + argv[1], strerror(errno)); + exit(1); + } + + if (argc == 3) { + Nc = atoi(argv[2]); + if ((Nc < 2) || (Nc > FDMDV_NC_MAX) ) { + fprintf(stderr, "Error number of carriers must be between 2 and %d\n", FDMDV_NC_MAX); + exit(1); + } + } + else + Nc = FDMDV_NC; + + fdmdv = fdmdv_create(Nc); + + bits_per_fdmdv_frame = fdmdv_bits_per_frame(fdmdv); + bits_per_codec_frame = 2*fdmdv_bits_per_frame(fdmdv); + bytes_per_codec_frame = (bits_per_codec_frame+7)/8; + fprintf(stderr, "bits_per_fdmdv_frame: %d bits_per_codec_frame: %d bytes_per_codec_frame: %d\n", + bits_per_fdmdv_frame, bits_per_codec_frame, bytes_per_codec_frame); + + packed_bits = (char*)malloc(bytes_per_codec_frame); + assert(packed_bits != NULL); + rx_bits = (int*)malloc(sizeof(int)*bits_per_codec_frame); + assert(rx_bits != NULL); + + error_pattern = (short*)malloc(fdmdv_error_pattern_size(fdmdv)*sizeof(int)); + assert(error_pattern != NULL); + + total_bit_errors = 0; + total_bits = 0; + test_frame_sync_state = 0; + test_frame_count = 0; + + while(fread(packed_bits, sizeof(char), bytes_per_codec_frame, fin) == bytes_per_codec_frame) { + /* unpack bits, MSB first */ + + bit = 7; byte = 0; + for(i=0; i> bit) & 0x1; + //printf("%d 0x%x %d\n", i, packed_bits[byte], rx_bits[i]); + bit--; + if (bit < 0) { + bit = 7; + byte++; + } + } + + fdmdv_put_test_bits(fdmdv, &test_frame_sync, error_pattern, &bit_errors, &ntest_bits, rx_bits); + + if (test_frame_sync == 1) { + test_frame_sync_state = 1; + test_frame_count = 0; + } + + if (test_frame_sync_state) { + if (test_frame_count == 0) { + total_bit_errors += bit_errors; + total_bits = total_bits + ntest_bits; + printf("+"); + } + else + printf("-"); + test_frame_count++; + if (test_frame_count == 4) + test_frame_count = 0; + } + else + printf("-"); + + fdmdv_put_test_bits(fdmdv, &test_frame_sync, error_pattern, &bit_errors, &ntest_bits, &rx_bits[bits_per_fdmdv_frame]); + + if (test_frame_sync == 1) { + test_frame_sync_state = 1; + test_frame_count = 0; + } + + if (test_frame_sync_state) { + if (test_frame_count == 0) { + total_bit_errors += bit_errors; + total_bits = total_bits + ntest_bits; + printf("+"); + } + else + printf("-"); + test_frame_count++; + if (test_frame_count == 4) + test_frame_count = 0; + } + else + printf("-"); + + /* if this is in a pipeline, we probably don't want the usual + buffering to occur */ + + if (fin == stdin) fflush(stdin); + } + + fclose(fin); + free(error_pattern); + fdmdv_destroy(fdmdv); + + printf("\nbits %d errors %d BER %1.4f\n", total_bits, total_bit_errors, (float)total_bit_errors/(1E-6+total_bits) ); + + if (packed_bits != NULL) free(packed_bits); + + return 0; +} + diff --git a/libcodec2-android/src/codec2/src/filter.c b/libcodec2-android/src/codec2/src/filter.c new file mode 100644 index 0000000..ccb58cd --- /dev/null +++ b/libcodec2-android/src/codec2/src/filter.c @@ -0,0 +1,281 @@ +/* + Copyright (C) 2018 James C. Ahlstrom + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include +#include +#include + +#include "filter.h" +#include "filter_coef.h" +#include "debug_alloc.h" + +#define cmplx(value) (cosf(value) + sinf(value) * I) + +/* + * This is a library of filter functions. They were copied from Quisk and converted to single precision. + */ + +/*---------------------------------------------------------------------------*\ + + FUNCTIONS...: quisk_filt_cfInit + AUTHOR......: Jim Ahlstrom + DATE CREATED: 27 August 2015 + MODIFIED: 4 June 2018 + + Initialize a FIR filter that has complex samples, and either real or complex coefficients. + +\*---------------------------------------------------------------------------*/ + +void quisk_filt_cfInit(struct quisk_cfFilter * filter, float * coefs, int taps) { + // Prepare a new filter using coefs and taps. Samples are complex. Coefficients can + // be real or complex. + filter->dCoefs = coefs; + filter->cpxCoefs = NULL; + filter->cSamples = (complex float *)MALLOC(taps * sizeof(complex float)); + memset(filter->cSamples, 0, taps * sizeof(complex float)); + filter->ptcSamp = filter->cSamples; + filter->nTaps = taps; + filter->cBuf = NULL; + filter->nBuf = 0; + filter->decim_index = 0; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTIONS...: quisk_filt_destroy + AUTHOR......: Jim Ahlstrom + DATE CREATED: 27 August 2015 + MODIFIED: 4 June 2018 + + Destroy the FIR filter and free all resources. + +\*---------------------------------------------------------------------------*/ + +void quisk_filt_destroy(struct quisk_cfFilter * filter) { + if (filter->cSamples) { + FREE(filter->cSamples); + filter->cSamples = NULL; + } + + if (filter->cBuf) { + FREE(filter->cBuf); + filter->cBuf = NULL; + } + + if (filter->cpxCoefs) { + FREE(filter->cpxCoefs); + filter->cpxCoefs = NULL; + } +} + +/*---------------------------------------------------------------------------*\ + + FUNCTIONS...: quisk_cfInterpDecim + AUTHOR......: Jim Ahlstrom + DATE CREATED: 27 August 2015 + MODIFIED: 4 June 2018 + + Take an array of samples cSamples of length count, multiply the sample rate + by interp, and then divide the sample rate by decim. Return the new number + of samples. Each specific interp and decim will require its own custom + low pass FIR filter with real coefficients. + +\*---------------------------------------------------------------------------*/ + +int quisk_cfInterpDecim(complex float * cSamples, int count, struct quisk_cfFilter * filter, int interp, int decim) { + // Interpolate by interp, and then decimate by decim. + // This uses the float coefficients of filter (not the complex). Samples are complex. + int i, k, nOut; + float * ptCoef; + complex float * ptSample; + complex float csample; + + if (count > filter->nBuf) { // increase size of sample buffer + filter->nBuf = count * 2; + + if (filter->cBuf) + FREE(filter->cBuf); + + filter->cBuf = (complex float *)MALLOC(filter->nBuf * sizeof(complex float)); + } + + memcpy(filter->cBuf, cSamples, count * sizeof(complex float)); + nOut = 0; + + for (i = 0; i < count; i++) { + // Put samples into buffer left to right. Use samples right to left. + *filter->ptcSamp = filter->cBuf[i]; + + while (filter->decim_index < interp) { + ptSample = filter->ptcSamp; + ptCoef = filter->dCoefs + filter->decim_index; + csample = 0; + + for (k = 0; k < filter->nTaps / interp; k++, ptCoef += interp) { + csample += *ptSample * *ptCoef; + + if (--ptSample < filter->cSamples) + ptSample = filter->cSamples + filter->nTaps - 1; + } + + cSamples[nOut] = csample * interp; + nOut++; + filter->decim_index += decim; + } + + if (++filter->ptcSamp >= filter->cSamples + filter->nTaps) + filter->ptcSamp = filter->cSamples; + + filter->decim_index = filter->decim_index - interp; + } + + return nOut; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTIONS...: quisk_ccfInterpDecim + AUTHOR......: Jim Ahlstrom + DATE CREATED: 7 June 2018 + + Take an array of samples cSamples of length count, multiply the sample rate + by interp, and then divide the sample rate by decim. Return the new number + of samples. Each specific interp and decim will require its own custom + low pass FIR filter with complex coefficients. This filter can be tuned. + + This filter is not currently used. + +\*---------------------------------------------------------------------------*/ +#if 0 +int quisk_ccfInterpDecim(complex float * cSamples, int count, struct quisk_cfFilter * filter, int interp, int decim) { + // Interpolate by interp, and then decimate by decim. + // This uses the complex coefficients of filter (not the real). Samples are complex. + int i, k, nOut; + complex float * ptCoef; + complex float * ptSample; + complex float csample; + + if (count > filter->nBuf) { // increase size of sample buffer + filter->nBuf = count * 2; + if (filter->cBuf) + FREE(filter->cBuf); + filter->cBuf = (complex float *)MALLOC(filter->nBuf * sizeof(complex float)); + } + + memcpy(filter->cBuf, cSamples, count * sizeof(complex float)); + nOut = 0; + + for (i = 0; i < count; i++) { + // Put samples into buffer left to right. Use samples right to left. + *filter->ptcSamp = filter->cBuf[i]; + + while (filter->decim_index < interp) { + ptSample = filter->ptcSamp; + ptCoef = filter->cpxCoefs + filter->decim_index; + csample = 0; + + for (k = 0; k < filter->nTaps / interp; k++, ptCoef += interp) { + csample += *ptSample * *ptCoef; + + if (--ptSample < filter->cSamples) + ptSample = filter->cSamples + filter->nTaps - 1; + } + + cSamples[nOut] = csample * interp; + nOut++; + filter->decim_index += decim; + } + + if (++filter->ptcSamp >= filter->cSamples + filter->nTaps) + filter->ptcSamp = filter->cSamples; + + filter->decim_index = filter->decim_index - interp; + } + + return nOut; +} +#endif + +/*---------------------------------------------------------------------------*\ + + FUNCTIONS...: quisk_cfTune + AUTHOR......: Jim Ahlstrom + DATE CREATED: 4 June 2018 + + Tune a low pass filter with float coefficients into an analytic I/Q bandpass filter + with complex coefficients. The "freq" is the center frequency / sample rate. + If the float coefs represent a low pass filter with bandwidth 1 kHz, the new bandpass + filter has width 2 kHz. The filter can be re-tuned repeatedly. + +\*---------------------------------------------------------------------------*/ + +void quisk_cfTune(struct quisk_cfFilter * filter, float freq) { + float D, tune; + int i; + + if ( ! filter->cpxCoefs) + filter->cpxCoefs = (complex float *)MALLOC(filter->nTaps * sizeof(complex float)); + + tune = 2.0 * M_PI * freq; + D = (filter->nTaps - 1.0) / 2.0; + + for (i = 0; i < filter->nTaps; i++) { + float tval = tune * (i - D); + filter->cpxCoefs[i] = cmplx(tval) * filter->dCoefs[i]; + } +} + +/*---------------------------------------------------------------------------*\ + + FUNCTIONS...: quisk_ccfFilter + AUTHOR......: Jim Ahlstrom + DATE CREATED: 4 June 2018 + + Filter complex samples using complex coefficients. The inSamples and outSamples may be + the same array. The loop runs forward over coefficients but backwards over samples. + Therefore, the coefficients must be reversed unless they are created by quisk_cfTune. + Low pass filter coefficients are symmetrical, so this does not usually matter. + +\*---------------------------------------------------------------------------*/ + +void quisk_ccfFilter(complex float * inSamples, complex float * outSamples, int count, struct quisk_cfFilter * filter) { + int i, k; + complex float * ptSample; + complex float * ptCoef; + complex float accum; + + for (i = 0; i < count; i++) { + *filter->ptcSamp = inSamples[i]; + accum = 0; + ptSample = filter->ptcSamp; + ptCoef = filter->cpxCoefs; + + for (k = 0; k < filter->nTaps; k++, ptCoef++) { + accum += *ptSample * *ptCoef; + + if (--ptSample < filter->cSamples) + ptSample = filter->cSamples + filter->nTaps - 1; + } + + outSamples[i] = accum; + + if (++filter->ptcSamp >= filter->cSamples + filter->nTaps) + filter->ptcSamp = filter->cSamples; + } +} + diff --git a/libcodec2-android/src/codec2/src/filter.h b/libcodec2-android/src/codec2/src/filter.h new file mode 100644 index 0000000..f21d211 --- /dev/null +++ b/libcodec2-android/src/codec2/src/filter.h @@ -0,0 +1,43 @@ +/* + Copyright (C) 2018 James C. Ahlstrom + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#ifndef __FILTER__ +#define __FILTER__ + +#include + +struct quisk_cfFilter { // Structure to hold the static data for FIR filters + float * dCoefs; // real filter coefficients + complex float * cpxCoefs; // complex filter coefficients + int nBuf; // dimension of cBuf + int nTaps; // dimension of dSamples, cSamples, dCoefs + int decim_index; // index of next sample for decimation + complex float * cSamples; // storage for old samples + complex float * ptcSamp; // next available position in cSamples + complex float * cBuf; // auxillary buffer for interpolation +} ; + +extern int quisk_cfInterpDecim(complex float *, int, struct quisk_cfFilter *, int, int); +extern void quisk_filt_cfInit(struct quisk_cfFilter *, float *, int); +extern void quisk_filt_destroy(struct quisk_cfFilter *); +extern void quisk_cfTune(struct quisk_cfFilter *, float); +extern void quisk_ccfFilter(complex float *, complex float *, int, struct quisk_cfFilter *); + +extern float quiskFilt120t480[480]; +extern float filtP550S750[160]; + +#endif diff --git a/libcodec2-android/src/codec2/src/filter_coef.h b/libcodec2-android/src/codec2/src/filter_coef.h new file mode 100644 index 0000000..e792306 --- /dev/null +++ b/libcodec2-android/src/codec2/src/filter_coef.h @@ -0,0 +1,162 @@ +/* + Copyright (C) 2018 James C. Ahlstrom + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +/* + These are the coefficients for various FIR filters. A declaration of these filter coefficients is in filter.h. + Multiple filters can use these coefficients because they are read-only. + + Although a sample rate is specified, the filters may be used at other sample rates. For example, if + filtP750S1040 is used at 48000 sps, the pass and stop frequencies are 4500 and 6240 hz. +*/ + +// Low pass filter, sample rate 8000 hz, 0.2 dB ripple, 100 dB atten, pass 550 hz, stop 750 hz. +float filtP550S750[160]={ + 0.000001500540125945, 0.000020553368071006, 0.000052842049763802, 0.000112071233638701, + 0.000202565299657164, 0.000325476960438197, 0.000474396686568771, 0.000633746562372497, 0.000778858561033731, + 0.000878592697224500, 0.000900611877226272, 0.000818750000130019, 0.000621157718914443, 0.000317269738067462, +-0.000058614729046822, -0.000448959090901751, -0.000780751290682747, -0.000978953969922609, -0.000983534965413392, +-0.000766540799920385, -0.000344938705664714, 0.000214927788687815, 0.000804118320944653, 0.001289527679116282, + 0.001541598437149897, 0.001466078039230554, 0.001032493743140772, 0.000291727467744814, -0.000623607913580581, +-0.001518948630011706, -0.002175907515711935, -0.002402252989524116, -0.002082876981631170, -0.001219318501019004, + 0.000053915753894017, 0.001483599323867600, 0.002743518309691092, 0.003504691193108974, 0.003515993126242027, + 0.002676486805582815, 0.001080325423865147, -0.000980649349095093, -0.003062866925046052, -0.004660487490214220, +-0.005321805637618908, -0.004767235761853469, -0.002979877569160189, -0.000242864453416682, 0.002892365745006815, + 0.005707645107750651, 0.007473145256589892, 0.007624527169837005, 0.005921569713871673, 0.002547381438730890, +-0.001883079571618079, -0.006418195698900790, -0.009958090016198632, -0.011502199858687428, -0.010403943660694560, +-0.006572745274759415, -0.000569370325758693, 0.006440667006225166, 0.012881777376768124, 0.017083918451421990, + 0.017661533458054445, 0.013877952730549446, 0.005912685575826365, -0.005037640104142052, -0.016864250576905999, +-0.026855876467499887, -0.032168177048912679, -0.030370760878632559, -0.019967289813872333, -0.000782327027950076, + 0.025871098651626040, 0.057290144048617792, 0.089743290905422241, 0.119038289777397190, 0.141198609990722840, + 0.153125933205703250, 0.153125933205703250, 0.141198609990722840, 0.119038289777397190, 0.089743290905422241, + 0.057290144048617792, 0.025871098651626040, -0.000782327027950076, -0.019967289813872333, -0.030370760878632559, +-0.032168177048912679, -0.026855876467499887, -0.016864250576905999, -0.005037640104142052, 0.005912685575826365, + 0.013877952730549446, 0.017661533458054445, 0.017083918451421990, 0.012881777376768124, 0.006440667006225166, +-0.000569370325758693, -0.006572745274759415, -0.010403943660694560, -0.011502199858687428, -0.009958090016198632, +-0.006418195698900790, -0.001883079571618079, 0.002547381438730890, 0.005921569713871673, 0.007624527169837005, + 0.007473145256589892, 0.005707645107750651, 0.002892365745006815, -0.000242864453416682, -0.002979877569160189, +-0.004767235761853469, -0.005321805637618908, -0.004660487490214220, -0.003062866925046052, -0.000980649349095093, + 0.001080325423865147, 0.002676486805582815, 0.003515993126242027, 0.003504691193108974, 0.002743518309691092, + 0.001483599323867600, 0.000053915753894017, -0.001219318501019004, -0.002082876981631170, -0.002402252989524116, +-0.002175907515711935, -0.001518948630011706, -0.000623607913580581, 0.000291727467744814, 0.001032493743140772, + 0.001466078039230554, 0.001541598437149897, 0.001289527679116282, 0.000804118320944653, 0.000214927788687815, +-0.000344938705664714, -0.000766540799920385, -0.000983534965413392, -0.000978953969922609, -0.000780751290682747, +-0.000448959090901751, -0.000058614729046822, 0.000317269738067462, 0.000621157718914443, 0.000818750000130019, + 0.000900611877226272, 0.000878592697224500, 0.000778858561033731, 0.000633746562372497, 0.000474396686568771, + 0.000325476960438197, 0.000202565299657164, 0.000112071233638701, 0.000052842049763802, 0.000020553368071006, + 0.000001500540125945 +}; + +// FIR filter suitable for changing rates 7500 to/from 8000 +// Sample 120000 Hz, pass 2700, stop 3730, ripple 0.1dB, atten 100 dB. Stop 0.03108. +float quiskFilt120t480[480] = { -0.000005050567303837, -0.000000267011791999, 0.000000197734700398, 0.000001038946634000, + 0.000002322193058869, 0.000004115682735322, 0.000006499942123311, 0.000009551098482930, 0.000013350669444763, + 0.000017966192635412, 0.000023463361155584, 0.000029885221425020, 0.000037271082107518, 0.000045630720487935, + 0.000054970017069384, 0.000065233162392019, 0.000076360900545177, 0.000088271373315159, 0.000100818605854714, + 0.000113853476544409, 0.000127174196746337, 0.000140558396336177, 0.000153744508371709, 0.000166450784469067, + 0.000178368313347299, 0.000189176709991702, 0.000198541881389953, 0.000206128795372885, 0.000211604878787747, + 0.000214655997661182, 0.000214994859281552, 0.000212358734245594, 0.000206539880117977, 0.000197379393194548, + 0.000184780318878738, 0.000168719942655099, 0.000149250512353807, 0.000126511346757621, 0.000100726393185629, + 0.000072210925236429, 0.000041365841965015, 0.000008680571408025, -0.000025277165852799, -0.000059865389594949, +-0.000094384355854646, -0.000128080670195777, -0.000160170174848483, -0.000189854272533545, -0.000216333899003825, +-0.000238836419299503, -0.000256632149501508, -0.000269058714331757, -0.000275541485292432, -0.000275614059005332, +-0.000268937472718753, -0.000255317038867589, -0.000234717772155001, -0.000207273956099563, -0.000173297342436372, +-0.000133280012107173, -0.000087895370243821, -0.000037986085678081, 0.000015440388211825, 0.000071232572821451, + 0.000128114399130489, 0.000184710477990398, 0.000239577162514028, 0.000291234779803098, 0.000338204791740229, + 0.000379047713684221, 0.000412403761615261, 0.000437031818051652, 0.000451848709179591, 0.000455966225408344, + 0.000448726371643413, 0.000429729020814434, 0.000398857326863837, 0.000356297600912998, 0.000302547334727027, + 0.000238422248479072, 0.000165048886226905, 0.000083853091464077, -0.000003462782744354, -0.000094949813106744, +-0.000188451833293202, -0.000281651282503015, -0.000372121907291206, -0.000457387566635848, -0.000534985542936898, +-0.000602532044011899, -0.000657788245032425, -0.000698728981427767, -0.000723604675185869, -0.000731002305621048, +-0.000719899536922384, -0.000689709694056092, -0.000640319946685634, -0.000572115873292030, -0.000485996080304965, +-0.000383371840261246, -0.000266155252511831, -0.000136731311264191, 0.000002082667095075, 0.000147092077716480, + 0.000294790953130229, 0.000441441918072383, 0.000583164190168290, 0.000716029226064227, 0.000836164238172957, + 0.000939856052624227, 0.001023657909064450, 0.001084492755093968, 0.001119751426837743, 0.001127383039339373, + 0.001105974243787613, 0.001054815583369999, 0.000973950761085690, 0.000864209315714227, 0.000727219011746881, + 0.000565398080608305, 0.000381924396468366, 0.000180685902835315, -0.000033793183292569, -0.000256444114966522, +-0.000481764526566339, -0.000703946352348464, -0.000917016099829735, -0.001114986581270253, -0.001292014799874503, +-0.001442563411804926, -0.001561559957317790, -0.001644551048567398, -0.001687846581475964, -0.001688649703502788, +-0.001645167889846890, -0.001556702802350076, -0.001423714708648073, -0.001247857669697092, -0.001031986722557201, +-0.000780131048444402, -0.000497436825078657, -0.000190077210351809, 0.000134868279325909, 0.000469563533327739, + 0.000805591531546815, 0.001134152328775355, 0.001446279849797673, 0.001733071409562941, 0.001985924997799762, + 0.002196778054604388, 0.002358342626407065, 0.002464328098407475, 0.002509648218888532, 0.002490604086803692, + 0.002405037734357425, 0.002252452724297770, 0.002034094661603120, 0.001752990365583534, 0.001413941154886139, + 0.001023470495638453, 0.000589723521647734, 0.000122320866350319, -0.000367832138027160, -0.000868777013398284, +-0.001367771151677059, -0.001851587344265625, -0.002306838088978190, -0.002720317947026380, -0.003079353614002113, +-0.003372155891804708, -0.003588162376578369, -0.003718362558663737, -0.003755596511143005, -0.003694818131674599, +-0.003533315298404129, -0.003270878754553819, -0.002909914962857412, -0.002455496391464944, -0.001915346645364514, +-0.001299757227227888, -0.000621437066532776, 0.000104706515738248, 0.000861849931067767, 0.001631595707499856, + 0.002394368911341672, 0.003129858565588139, 0.003817496679992245, 0.004436963307209760, 0.004968707287606522, + 0.005394469536085115, 0.005697797543539088, 0.005864537618023589, 0.005883292537600076, 0.005745832319314692, + 0.005447447099071761, 0.004987231255534477, 0.004368289529377007, 0.003597859022418248, 0.002687338851256991, + 0.001652226293162047, 0.000511956075882180, -0.000710356149138656, -0.001988263330091648, -0.003292424566049982, +-0.004591123342747130, -0.005850857852106148, -0.007036991266043732, -0.008114450164977267, -0.009048456200082230, +-0.009805276478965942, -0.010352975302354198, -0.010662152577592631, -0.010706650669328861, -0.010464214075017983, +-0.009917087295446811, -0.009052534679222271, -0.007863270920348924, -0.006347789704693751, -0.004510582323649121, +-0.002362238055733795, 0.000080576968834213, 0.002795265196543707, 0.005753566158586979, 0.008921944932552510, + 0.012262093950265378, 0.015731539846483594, 0.019284344624007944, 0.022871886384520687, 0.026443706729191677, + 0.029948406200633094, 0.033334570666910354, 0.036551709955124537, 0.039551189200810140, 0.042287133974308874, + 0.044717290029466283, 0.046803820535016104, 0.048514022996355009, 0.049820951883635139, 0.050703932928426454, + 0.051148959210315710, 0.051148959210315710, 0.050703932928426454, 0.049820951883635139, 0.048514022996355009, + 0.046803820535016104, 0.044717290029466283, 0.042287133974308874, 0.039551189200810140, 0.036551709955124537, + 0.033334570666910354, 0.029948406200633094, 0.026443706729191677, 0.022871886384520687, 0.019284344624007944, + 0.015731539846483594, 0.012262093950265378, 0.008921944932552510, 0.005753566158586979, 0.002795265196543707, + 0.000080576968834213, -0.002362238055733795, -0.004510582323649121, -0.006347789704693751, -0.007863270920348924, +-0.009052534679222271, -0.009917087295446811, -0.010464214075017983, -0.010706650669328861, -0.010662152577592631, +-0.010352975302354198, -0.009805276478965942, -0.009048456200082230, -0.008114450164977267, -0.007036991266043732, +-0.005850857852106148, -0.004591123342747130, -0.003292424566049982, -0.001988263330091648, -0.000710356149138656, + 0.000511956075882180, 0.001652226293162047, 0.002687338851256991, 0.003597859022418248, 0.004368289529377007, + 0.004987231255534477, 0.005447447099071761, 0.005745832319314692, 0.005883292537600076, 0.005864537618023589, + 0.005697797543539088, 0.005394469536085115, 0.004968707287606522, 0.004436963307209760, 0.003817496679992245, + 0.003129858565588139, 0.002394368911341672, 0.001631595707499856, 0.000861849931067767, 0.000104706515738248, +-0.000621437066532776, -0.001299757227227888, -0.001915346645364514, -0.002455496391464944, -0.002909914962857412, +-0.003270878754553819, -0.003533315298404129, -0.003694818131674599, -0.003755596511143005, -0.003718362558663737, +-0.003588162376578369, -0.003372155891804708, -0.003079353614002113, -0.002720317947026380, -0.002306838088978190, +-0.001851587344265625, -0.001367771151677059, -0.000868777013398284, -0.000367832138027160, 0.000122320866350319, + 0.000589723521647734, 0.001023470495638453, 0.001413941154886139, 0.001752990365583534, 0.002034094661603120, + 0.002252452724297770, 0.002405037734357425, 0.002490604086803692, 0.002509648218888532, 0.002464328098407475, + 0.002358342626407065, 0.002196778054604388, 0.001985924997799762, 0.001733071409562941, 0.001446279849797673, + 0.001134152328775355, 0.000805591531546815, 0.000469563533327739, 0.000134868279325909, -0.000190077210351809, +-0.000497436825078657, -0.000780131048444402, -0.001031986722557201, -0.001247857669697092, -0.001423714708648073, +-0.001556702802350076, -0.001645167889846890, -0.001688649703502788, -0.001687846581475964, -0.001644551048567398, +-0.001561559957317790, -0.001442563411804926, -0.001292014799874503, -0.001114986581270253, -0.000917016099829735, +-0.000703946352348464, -0.000481764526566339, -0.000256444114966522, -0.000033793183292569, 0.000180685902835315, + 0.000381924396468366, 0.000565398080608305, 0.000727219011746881, 0.000864209315714227, 0.000973950761085690, + 0.001054815583369999, 0.001105974243787613, 0.001127383039339373, 0.001119751426837743, 0.001084492755093968, + 0.001023657909064450, 0.000939856052624227, 0.000836164238172957, 0.000716029226064227, 0.000583164190168290, + 0.000441441918072383, 0.000294790953130229, 0.000147092077716480, 0.000002082667095075, -0.000136731311264191, +-0.000266155252511831, -0.000383371840261246, -0.000485996080304965, -0.000572115873292030, -0.000640319946685634, +-0.000689709694056092, -0.000719899536922384, -0.000731002305621048, -0.000723604675185869, -0.000698728981427767, +-0.000657788245032425, -0.000602532044011899, -0.000534985542936898, -0.000457387566635848, -0.000372121907291206, +-0.000281651282503015, -0.000188451833293202, -0.000094949813106744, -0.000003462782744354, 0.000083853091464077, + 0.000165048886226905, 0.000238422248479072, 0.000302547334727027, 0.000356297600912998, 0.000398857326863837, + 0.000429729020814434, 0.000448726371643413, 0.000455966225408344, 0.000451848709179591, 0.000437031818051652, + 0.000412403761615261, 0.000379047713684221, 0.000338204791740229, 0.000291234779803098, 0.000239577162514028, + 0.000184710477990398, 0.000128114399130489, 0.000071232572821451, 0.000015440388211825, -0.000037986085678081, +-0.000087895370243821, -0.000133280012107173, -0.000173297342436372, -0.000207273956099563, -0.000234717772155001, +-0.000255317038867589, -0.000268937472718753, -0.000275614059005332, -0.000275541485292432, -0.000269058714331757, +-0.000256632149501508, -0.000238836419299503, -0.000216333899003825, -0.000189854272533545, -0.000160170174848483, +-0.000128080670195777, -0.000094384355854646, -0.000059865389594949, -0.000025277165852799, 0.000008680571408025, + 0.000041365841965015, 0.000072210925236429, 0.000100726393185629, 0.000126511346757621, 0.000149250512353807, + 0.000168719942655099, 0.000184780318878738, 0.000197379393194548, 0.000206539880117977, 0.000212358734245594, + 0.000214994859281552, 0.000214655997661182, 0.000211604878787747, 0.000206128795372885, 0.000198541881389953, + 0.000189176709991702, 0.000178368313347299, 0.000166450784469067, 0.000153744508371709, 0.000140558396336177, + 0.000127174196746337, 0.000113853476544409, 0.000100818605854714, 0.000088271373315159, 0.000076360900545177, + 0.000065233162392019, 0.000054970017069384, 0.000045630720487935, 0.000037271082107518, 0.000029885221425020, + 0.000023463361155584, 0.000017966192635412, 0.000013350669444763, 0.000009551098482930, 0.000006499942123311, + 0.000004115682735322, 0.000002322193058869, 0.000001038946634000, 0.000000197734700398, -0.000000267011791999, +-0.000005050567303837 }; + diff --git a/libcodec2-android/src/codec2/src/fm.c b/libcodec2-android/src/codec2/src/fm.c new file mode 100644 index 0000000..e1fbe37 --- /dev/null +++ b/libcodec2-android/src/codec2/src/fm.c @@ -0,0 +1,290 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: fm.c + AUTHOR......: David Rowe + DATE CREATED: February 2015 + + Functions that implement analog FM modulation and demodulation, see + also octave/fm.m. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2015 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +/*---------------------------------------------------------------------------*\ + + DEFINES + +\*---------------------------------------------------------------------------*/ + +#define FILT_MEM 200 + +/*---------------------------------------------------------------------------*\ + + INCLUDES + +\*---------------------------------------------------------------------------*/ + +#include +#include +#include +#include +#include + +#include "codec2_fm.h" +#include "fm_fir_coeff.h" +#include "comp_prim.h" + +/*---------------------------------------------------------------------------*\ + + FUNCTIONS + +\*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: fm_create + AUTHOR......: David Rowe + DATE CREATED: 24 Feb 2015 + + Create and initialise an instance of the "modem". Returns a pointer + to the modem states or NULL on failure. One set of states is + sufficient for a full duplex modem. + +\*---------------------------------------------------------------------------*/ + +struct FM *fm_create(int nsam) +{ + struct FM *fm; + + fm = (struct FM*)malloc(sizeof(struct FM)); + if (fm == NULL) + return NULL; + fm->rx_bb = (COMP*)malloc(sizeof(COMP)*(FILT_MEM+nsam)); + assert(fm->rx_bb != NULL); + + fm->rx_bb_filt_prev.real = 0.0; + fm->rx_bb_filt_prev.imag = 0.0; + fm->lo_phase.real = 1.0; + fm->lo_phase.imag = 0.0; + + fm->tx_phase = 0; + + fm->rx_dem_mem = (float*)malloc(sizeof(float)*(FILT_MEM+nsam)); + assert(fm->rx_dem_mem != NULL); + + fm->nsam = nsam; + + return fm; +} + + +void fm_destroy(struct FM *fm_states) +{ + free(fm_states->rx_bb); + free(fm_states->rx_dem_mem); + free(fm_states); +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: fm_demod + AUTHOR......: David Rowe + DATE CREATED: 24 Feb 2015 + + Demodulate a FM signal to baseband audio. + +\*---------------------------------------------------------------------------*/ + +void fm_demod(struct FM *fm_states, float rx_out[], float rx[]) +{ + float Fs = fm_states->Fs; + float fc = fm_states->fc; + float wc = 2*M_PI*fc/Fs; + float fd = fm_states->fd; + float wd = 2*M_PI*fd/Fs; + COMP *rx_bb = fm_states->rx_bb + FILT_MEM; + COMP wc_rect, rx_bb_filt, rx_bb_diff; + float rx_dem; + /* + float acc; + */ + float *rx_dem_mem = fm_states->rx_dem_mem + FILT_MEM; + int nsam = fm_states->nsam; + float mag; + int i,k; + + wc_rect.real = cosf(wc); wc_rect.imag = -sinf(wc); + + for(i=0; ilo_phase = cmult(fm_states->lo_phase, wc_rect); + rx_bb[i] = fcmult(rx[i], fm_states->lo_phase); + + /* input FIR filter */ + + rx_bb_filt.real = 0.0; rx_bb_filt.imag = 0.0; + + for(k=0; klo_phase.real, fm_states->lo_phase.imag); + //printf("%f %f %f\n", rx[i], rx_bb[i].real, rx_bb[i].imag); + //printf("%f %f\n", rx_bb_filt.real, rx_bb_filt.imag); + /* + Differentiate first, in rect domain, then find angle, this + puts signal on the positive side of the real axis and helps + atan2() behaive. + */ + + rx_bb_diff = cmult(rx_bb_filt, cconj(fm_states->rx_bb_filt_prev)); + fm_states->rx_bb_filt_prev = rx_bb_filt; + + rx_dem = atan2f(rx_bb_diff.imag, rx_bb_diff.real); + + /* limit maximum phase jumps, to remove static type noise at low SNRs */ + + if (rx_dem > wd) + rx_dem = wd; + if (rx_dem < -wd) + rx_dem = -wd; + + rx_dem *= (1/wd); + //printf("%f %f\n", rx_bb_diff.real, rx_bb_diff.imag); + rx_dem_mem[i] = rx_dem; + /* + acc = 0; + for(k=0; klo_phase); + fm_states->lo_phase.real /= mag; + fm_states->lo_phase.imag /= mag; + +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: fm_mod + AUTHOR......: Brady O'Brien + DATE CREATED: Sept. 10 2015 + + Modulate an FM signal from a baseband modulating signal + + struct FM *fm - FM state structure. Can be reused from fm_demod. + float tx_in[] - nsam baseband samples to be modulated + float tx_out[] - nsam samples in which to place the modulated FM + +\*---------------------------------------------------------------------------*/ + +void fm_mod(struct FM *fm_states, float tx_in[], float tx_out[]) { + float Fs = fm_states->Fs; //Sampling freq + float fc = fm_states->fc; //Center freq + float wc = 2*M_PI*fc/Fs; //Center freq in rads/samp + float fd = fm_states->fd; //Max deviation in cycles/samp + float wd = 2*M_PI*fd/Fs; //Max deviation in rads/samp + int nsam = fm_states->nsam; //Samples per batch of modulation + float tx_phase = fm_states->tx_phase; //Transmit phase in rads + float w; //Temp variable for phase of VFO during loop + int i; + + //Go through the samples, spin the oscillator, and generate some FM + for(i=0; i 2*M_PI) + tx_phase -= 2*M_PI; + tx_out[i] = cosf(tx_phase); + } + //Save phase back into state struct + fm_states->tx_phase = tx_phase; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: fm_mod + AUTHOR......: Brady O'Brien + DATE CREATED: Sept. 10 2015 + + Modulate an FM signal from a baseband modulating signal. Output signal is + in complex domain + + struct FM *fm - FM state structure. Can be reused from fm_demod. + float tx_in[] - nsam baseband samples to be modulated + COMP tx_out[] - nsam samples in which to place the modulated FM + +\*---------------------------------------------------------------------------*/ + +void fm_mod_comp(struct FM *fm_states, float tx_in[], COMP tx_out[]){ + float Fs = fm_states->Fs; //Sampling freq + float fc = fm_states->fc; //Center freq + float wc = 2*M_PI*fc/Fs; //Center freq in rads/samp + float fd = fm_states->fd; //Max deviation in cycles/samp + float wd = 2*M_PI*fd/Fs; //Max deviation in rads/samp + int nsam = fm_states->nsam; //Samples per batch of modulation + float tx_phase = fm_states->tx_phase; //Transmit phase in rads + float w; //Temp variable for phase of VFO during loop + int i; + + //Go through the samples, spin the oscillator, and generate some FM + for(i=0; i 2*M_PI) + tx_phase -= 2*M_PI; + + tx_out[i].real = cosf(tx_phase); + tx_out[i].imag = sinf(tx_phase); + } + //Save phase back into state struct + fm_states->tx_phase = tx_phase; +} + diff --git a/libcodec2-android/src/codec2/src/fm_demod.c b/libcodec2-android/src/codec2/src/fm_demod.c new file mode 100644 index 0000000..bf667d1 --- /dev/null +++ b/libcodec2-android/src/codec2/src/fm_demod.c @@ -0,0 +1,115 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: fm_demod.c + AUTHOR......: David Rowe + DATE CREATED: Feb 24 2015 + + Given an input raw file (44.4 kHz, 16 bit shorts) with a FM signal centered + 11.1 kHz, outputs a file of demodulated audio samples. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2015 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include +#include +#include +#include +#include + +#include "codec2_fm.h" +#include "octave.h" + +#define N 160 + +#define TEST_MOD_COMP + +int main(int argc, char *argv[]) +{ + FILE *fin, *fout; + struct FM *fm; + short buf[N*2]; + float rx[N]; +#if defined(TEST_MODE) && !defined(TEST_MODE_COMP) + float rx_out[N]; +#endif + COMP out_comp[N]; + int i; + + if (argc < 2) { + printf("usage: %s InputFMRawFile OutputSpeechRawFile\n", argv[0]); + printf("e.g %s fm.raw fm_demodulated.raw\n", argv[0]); + exit(1); + } + + if (strcmp(argv[1], "-") == 0) fin = stdin; + else if ( (fin = fopen(argv[1],"rb")) == NULL ) { + fprintf(stderr, "Error opening input file: %s: %s.\n", + argv[1], strerror(errno)); + exit(1); + } + + if (strcmp(argv[2], "-") == 0) fout = stdout; + else if ( (fout = fopen(argv[2],"wb")) == NULL ) { + fprintf(stderr, "Error opening output file: %s: %s.\n", + argv[2], strerror(errno)); + exit(1); + } + + fm = fm_create(N); + fm->Fs = 48000.0; + fm->fm_max = 3000.0; + fm->fd = 5000.0; + fm->fc = 0; + + while(fread(buf, sizeof(short), N, fin) == N) { + for(i=0; i. +*/ + +#include +#include +#include +#include +#include +#include + + +#include "fmfsk.h" +#include "modem_probe.h" +#include "comp_prim.h" + +#define STD_PROC_BITS 96 + +/* + * Create a new fmfsk modem instance. + * + * int Fs - sample rate + * int Rb - non-manchester bitrate + * returns - new struct FMFSK on sucess, NULL on failure + */ +struct FMFSK * fmfsk_create(int Fs,int Rb){ + assert( Fs % (Rb*2) == 0 ); /* Sample freq must be divisible by symbol rate */ + + int nbits = STD_PROC_BITS; + + /* Allocate the struct */ + struct FMFSK *fmfsk = malloc(sizeof(struct FMFSK)); + if(fmfsk==NULL) return NULL; + + /* Set up static parameters */ + fmfsk->Rb = Rb; + fmfsk->Rs = Rb*2; + fmfsk->Fs = Fs; + fmfsk->Ts = Fs/fmfsk->Rs; + fmfsk->N = nbits*2*fmfsk->Ts; + fmfsk->nmem = fmfsk->N+(fmfsk->Ts*4); + fmfsk->nsym = nbits*2; + fmfsk->nbit = nbits; + + /* Set up demod state */ + fmfsk->lodd = 0; + fmfsk->nin = fmfsk->N; + fmfsk->snr_mean = 0; + + float *oldsamps = malloc(sizeof(float)*fmfsk->nmem); + if(oldsamps == NULL){ + free(fmfsk); + return NULL; + } + + fmfsk->oldsamps = oldsamps; + + fmfsk->stats = (struct MODEM_STATS*)malloc(sizeof(struct MODEM_STATS)); + if (fmfsk->stats == NULL) { + free(oldsamps); + free(fmfsk); + return NULL; + } + + return fmfsk; +} + +/* + * Destroys an fmfsk modem and deallocates memory + */ +void fmfsk_destroy(struct FMFSK *fmfsk){ + free(fmfsk->oldsamps); + free(fmfsk); +} + +/* + * Returns the number of samples that must be fed to fmfsk_demod the next + * cycle + */ +uint32_t fmfsk_nin(struct FMFSK *fmfsk){ + return (uint32_t)fmfsk->nin; +} + +void fmfsk_get_demod_stats(struct FMFSK *fmfsk,struct MODEM_STATS *stats){ + /* copy from internal stats, note we can't overwrite stats completely + as it has other states rqd by caller, also we want a consistent + interface across modem types for the freedv_api. + */ + + stats->clock_offset = fmfsk->stats->clock_offset; + stats->snr_est = fmfsk->stats->snr_est; // TODO: make this SNR not Eb/No + stats->rx_timing = fmfsk->stats->rx_timing; + stats->foff = fmfsk->stats->foff; + + stats->neyesamp = fmfsk->stats->neyesamp; + stats->neyetr = fmfsk->stats->neyetr; + memcpy(stats->rx_eye, fmfsk->stats->rx_eye, sizeof(stats->rx_eye)); + + /* these fields not used for FSK so set to something sensible */ + + stats->sync = 0; + stats->nr = fmfsk->stats->nr; + stats->Nc = fmfsk->stats->Nc; +} + +/* + * Modulates nbit bits into N samples to be sent through an FM radio + * + * struct FSK *fsk - FSK config/state struct, set up by fsk_create + * float mod_out[] - Buffer for N samples of modulated FMFSK + * uint8_t tx_bits[] - Buffer containing Nbits unpacked bits + */ + +void fmfsk_mod(struct FMFSK *fmfsk, float fmfsk_out[],uint8_t bits_in[]){ + int i,j; + int nbit = fmfsk->nbit; + int Ts = fmfsk->Ts; + + for(i=0; iTs; + int Fs = fmfsk->Fs; + int Rs = fmfsk->Rs; + int nin = fmfsk->nin; + int N = fmfsk->N; + int nsym = fmfsk->nsym; + int nbit = fmfsk->nbit; + int nmem = fmfsk->nmem; + float *oldsamps = fmfsk->oldsamps; + int nold = nmem-nin; + COMP phi_ft,dphi_ft; /* Phase and delta-phase for fine timing estimator */ + float t; + COMP x; /* Magic fine timing angle */ + float norm_rx_timing,old_norm_rx_timing,d_norm_rx_timing,appm; + int rx_timing,sample_offset; + int next_nin; + float apeven,apodd; /* Approx. prob of even or odd stream being correct */ + float currv,mdiff,lastv; + int neyesamp; + int neyeoffset; + float eye_max; + uint8_t mbit; + float var_signal = 0, var_noise = 0, lastFabsV; + + /* Shift in nin samples */ + memmove(&oldsamps[0] , &oldsamps[nmem-nold], sizeof(float)*nold); + memcpy (&oldsamps[nold], &fmfsk_in[0] , sizeof(float)*nin ); + + /* Allocate memory for filtering */ + float *rx_filt = alloca(sizeof(float)*(nsym+1)*Ts); + + /* Integrate over Ts input symbols at every offset */ + for(i=0; i<(nsym+1)*Ts; i++){ + t=0; + /* Integrate over some samples */ + for(j=i;jnorm_rx_timing; + fmfsk->norm_rx_timing = norm_rx_timing; + + /* Estimate sample clock offset */ + d_norm_rx_timing = norm_rx_timing - old_norm_rx_timing; + + /* Filter out big jumps in due to nin change */ + if(fabsf(d_norm_rx_timing) < .2){ + appm = 1e6*d_norm_rx_timing/(float)nsym; + fmfsk->ppm = .9*fmfsk->ppm + .1*appm; + } + + /* Figure out how far offset the sample points are */ + sample_offset = (Ts/2)+Ts+rx_timing-1; + + /* Request fewer or greater samples next time, if fine timing is far + * enough off. This also makes it possible to tolerate clock offsets */ + next_nin = N; + if(norm_rx_timing > -.2) + next_nin += Ts/2; + if(norm_rx_timing < -.65) + next_nin -= Ts/2; + fmfsk->nin = next_nin; + + /* Make first diff of this round the last sample of the last round, + * for the odd stream */ + lastv = fmfsk->lodd; + lastFabsV = fabs(lastv); + apeven = 0; + apodd = 0; + for(i=0; i0 ? 1 : 0; + lastv = currv; + + // Calculate the signal variance. Note that the mean is zero + var_signal += currv * currv; + + /* Calculate the variance of the noise between samples (symbols). A quick variance estimate + * without calculating mean can be done by differentiating (remove mean) and then + * dividing by 2. Fabs the samples as we are looking at how close the samples are to each + * other as if they were all the same polarity/symbol. */ + currv = fabs(currv); + var_noise += (currv - lastFabsV) * (currv - lastFabsV); + lastFabsV = currv; + + mdiff = mdiff>0 ? mdiff : 0-mdiff; + + /* Put bit in it's stream */ + if((i%2)==1){ + apeven += mdiff; + /* Even stream goes in LSB */ + rx_bits[i>>1] |= mbit ? 0x1 : 0x0; + }else{ + apodd += mdiff; + /* Odd in second-to-LSB */ + rx_bits[i>>1] = mbit ? 0x2 : 0x0; + } + } + + /* Div by 2 to correct variance when doing via differentiation.*/ + var_noise *= 0.5; + + if(apeven>apodd){ + /* Zero out odd bits from output bitstream */ + for(i=0;i>1; + } + + /* Save last sample of int stream for next demod round */ + fmfsk->lodd = lastv; + + /* Save demod statistics */ + fmfsk->stats->Nc = 0; + fmfsk->stats->nr = 0; + + /* Clock offset and RX timing are all we know here */ + fmfsk->stats->clock_offset = fmfsk->ppm; + fmfsk->stats->rx_timing = (float)rx_timing; + + /* Zero out all of the other things */ + fmfsk->stats->foff = 0; + + /* Use moving average to smooth SNR display */ + if(fmfsk->snr_mean < 0.1) + fmfsk->snr_mean = (10.0 * log10f(var_signal / var_noise)); + else + fmfsk->snr_mean = 0.9 * fmfsk->snr_mean + 0.1 * (10.0 * log10f(var_signal / var_noise)); + fmfsk->stats->snr_est = fmfsk->snr_mean; + + /* Collect an eye diagram */ + /* Take a sample for the eye diagrams */ + neyesamp = fmfsk->stats->neyesamp = Ts*4; + neyeoffset = sample_offset+(Ts*2*28); + + fmfsk->stats->neyetr = 8; + for(k=0; kstats->neyetr; k++) + for(j=0; jstats->rx_eye[k][j] = rx_filt[k*neyesamp+neyeoffset+j]; + //fmfsk->stats->rx_eye[k][j] = fmfsk_in[k*neyesamp+neyeoffset+j]; + eye_max = 0; + + /* Normalize eye to +/- 1 */ + for(i=0; istats->neyetr; i++) + for(j=0; jstats->rx_eye[i][j])>eye_max) + eye_max = fabsf(fmfsk->stats->rx_eye[i][j]); + + for(i=0; istats->neyetr; i++) + for(j=0; jstats->rx_eye[i][j] = (fmfsk->stats->rx_eye[i][j]/(2*eye_max))+.5; + + modem_probe_samp_f("t_norm_rx_timing",&norm_rx_timing,1); + modem_probe_samp_f("t_rx_filt",rx_filt,(nsym+1)*Ts); +} diff --git a/libcodec2-android/src/codec2/src/fmfsk.h b/libcodec2-android/src/codec2/src/fmfsk.h new file mode 100644 index 0000000..68db9d4 --- /dev/null +++ b/libcodec2-android/src/codec2/src/fmfsk.h @@ -0,0 +1,111 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: fmfsk.h + AUTHOR......: Brady O'Brien + DATE CREATED: 6 February 2016 + + C Implementation of 2FSK+Manchester over FM modulator/demodulator, based + on mancyfsk.m and fmfsk.m + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2016 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#ifndef __C2FMFSK_H +#define __C2FMFSK_H + +#include +#include "comp.h" +#include "modem_stats.h" + +#define FMFSK_SCALE 16383 + +/* + * fm-me-2fsk state + */ +struct FMFSK{ + /* Static fmfsk parameters */ + int Rb; /* Manchester-encoded bitrate */ + int Rs; /* Raw modem symbol rate */ + int Fs; /* Sample rate */ + int Ts; /* Samples-per-symbol */ + int N; /* Sample processing buffer size */ + int nsym; /* Number of raw modem symbols processed per demod call */ + int nbit; /* Number of bits spit out per demod call */ + int nmem; /* Number of samples kept around between demod calls */ + + /* State kept by demod */ + int nin; /* Number of samples to be demod-ed the next cycle */ + int lodd; /* Last integrated sample for odd bitstream generation */ + float * oldsamps; /* Memory of old samples to make clock-offset-tolerance possible */ + + /* Stats generated by demod */ + float norm_rx_timing; /* RX Timing, used to calculate clock offset */ + int ppm; /* Clock offset in parts-per-million */ + float snr_mean; + + /* Modem stat structure */ + struct MODEM_STATS * stats; +}; + +/* + * Create a new fmfsk modem instance. + * + * int Fs - sample rate + * int Rb - non-manchester bitrate + * returns - new struct FMFSK on sucess, NULL on failure + */ +struct FMFSK * fmfsk_create(int Fs,int Rb); + +/* + * Destroys an fmfsk modem and deallocates memory + */ +void fmfsk_destroy(struct FMFSK *fmfsk); + +/* + * Deposit demod statistics into a MODEM_STATS struct + */ +void fmfsk_get_demod_stats(struct FMFSK *fmfsk,struct MODEM_STATS *stats); + +/* + * Returns the number of samples that must be fed to fmfsk_demod the next + * cycle + */ +uint32_t fmfsk_nin(struct FMFSK *fmfsk); + +/* + * Modulates nbit bits into N samples to be sent through an FM radio + * + * struct FSK *fsk - FSK config/state struct, set up by fsk_create + * float mod_out[] - Buffer for N samples of modulated FMFSK + * uint8_t tx_bits[] - Buffer containing Nbits unpacked bits + */ +void fmfsk_mod(struct FMFSK *fmfsk, float fmfsk_out[],uint8_t bits_in[]); + + +/* + * Demodulate some number of FMFSK samples. The number of samples to be + * demodulated can be found by calling fmfsk_nin(). + * + * struct FMFSK *fsk - FMFSK config/state struct, set up by fsk_create + * uint8_t rx_bits[] - Buffer for nbit unpacked bits to be written + * float fsk_in[] - nin samples of modualted FMFSK from an FM radio + */ +void fmfsk_demod(struct FMFSK *fmfsk, uint8_t rx_bits[],float fmfsk_in[]); + +#endif diff --git a/libcodec2-android/src/codec2/src/fmfsk_demod.c b/libcodec2-android/src/codec2/src/fmfsk_demod.c new file mode 100644 index 0000000..1421c87 --- /dev/null +++ b/libcodec2-android/src/codec2/src/fmfsk_demod.c @@ -0,0 +1,144 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: fsk_demod.c + AUTHOR......: Brady O'Brien + DATE CREATED: 8 January 2016 + + C test driver for fsk_demod in fsk.c. Reads in a stream of 32 bit cpu endian + floats and writes out the detected bits + + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2016 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include "fmfsk.h" +#include "modem_stats.h" +#define MODEMPROBE_ENABLE +#include "modem_probe.h" +#include "codec2_fdmdv.h" + +int main(int argc,char *argv[]){ + struct FMFSK *fmfsk; + int Fs,Rb; + struct MODEM_STATS stats; + float loop_time; + int enable_stats = 0; + int stats_ctr = 0; + int stats_loop = 0; + FILE *fin,*fout; + uint8_t *bitbuf; + int16_t *rawbuf; + float *modbuf; + int i,j,t; + + if(argc<4){ + fprintf(stderr,"usage: %s SampleFreq BitRate InputModemRawFile OutputOneBitPerCharFile [S]\n",argv[0]); + exit(1); + } + + /* Extract parameters */ + Fs = atoi(argv[1]); + Rb = atoi(argv[2]); + + /* Open files */ + if(strcmp(argv[3],"-")==0){ + fin = stdin; + }else{ + fin = fopen(argv[3],"r"); + } + + if(strcmp(argv[4],"-")==0){ + fout = stdout; + }else{ + fout = fopen(argv[4],"w"); + } + + /* set up FSK */ + fmfsk = fmfsk_create(Fs,Rb); + + if(argc>5){ + if(strcmp(argv[5],"S")==0){ + enable_stats = 1; + loop_time = ((float)fmfsk_nin(fmfsk))/((float)Fs); + stats_loop = (int)(.125/loop_time); + stats_ctr = 0; + } + } + + if(fin==NULL || fout==NULL || fmfsk==NULL){ + fprintf(stderr,"Couldn't open test vector files\n"); + goto cleanup; + } + + /* allocate buffers for processing */ + bitbuf = (uint8_t*)alloca(sizeof(uint8_t)*fmfsk->nbit); + rawbuf = (int16_t*)alloca(sizeof(int16_t)*(fmfsk->N+fmfsk->Ts*2)); + modbuf = (float*)alloca(sizeof(float)*(fmfsk->N+fmfsk->Ts*2)); + + /* Demodulate! */ + while( fread(rawbuf,sizeof(int16_t),fmfsk_nin(fmfsk),fin) == fmfsk_nin(fmfsk) ){ + for(i=0;inbit;i++){ + t = (int)bitbuf[i]; + modem_probe_samp_i("t_d_bitout",&t,1); + } + + fwrite(bitbuf,sizeof(uint8_t),fmfsk->nbit,fout); + + if(enable_stats && stats_ctr <= 0){ + fmfsk_get_demod_stats(fmfsk,&stats); + fprintf(stderr,"{\"EbNodB\": %2.2f,\t\"ppm\": %d,",stats.snr_est,(int)stats.clock_offset); + fprintf(stderr,"\t\"f1_est\":%.1f,\t\"f2_est\":%.1f",0.0,0.0); + fprintf(stderr,",\t\"eye_diagram\":["); + for(i=0;i. +*/ + +#include +#include +#include "fmfsk.h" +#include "codec2_fdmdv.h" + +int main(int argc,char *argv[]){ + struct FMFSK *fmfsk; + int Fs,Rb; + int i; + FILE *fin,*fout; + uint8_t *bitbuf; + int16_t *rawbuf; + float *modbuf; + + if(argc<4){ + fprintf(stderr,"usage: %s SampleFreq BitRate InputOneBitPerCharFile OutputModRawFile\n",argv[0]); + exit(1); + } + + /* Extract parameters */ + Fs = atoi(argv[1]); + Rb = atoi(argv[2]); + + if(strcmp(argv[3],"-")==0){ + fin = stdin; + }else{ + fin = fopen(argv[3],"r"); + } + + if(strcmp(argv[4],"-")==0){ + fout = stdout; + }else{ + fout = fopen(argv[4],"w"); + } + + + /* set up FMFSK */ + fmfsk = fmfsk_create(Fs,Rb); + + if(fin==NULL || fout==NULL || fmfsk==NULL){ + fprintf(stderr,"Couldn't open test vector files\n"); + goto cleanup; + } + + /* allocate buffers for processing */ + bitbuf = (uint8_t*)alloca(sizeof(uint8_t)*fmfsk->nbit); + rawbuf = (int16_t*)alloca(sizeof(int16_t)*fmfsk->N); + modbuf = (float*)alloca(sizeof(float)*fmfsk->N); + + /* Modulate! */ + while( fread(bitbuf,sizeof(uint8_t),fmfsk->nbit,fin) == fmfsk->nbit ){ + fmfsk_mod(fmfsk,modbuf,bitbuf); + for(i=0; iN; i++){ + rawbuf[i] = (int16_t)(modbuf[i]*(float)FDMDV_SCALE); + } + fwrite(rawbuf,sizeof(int16_t),fmfsk->N,fout); + + if(fin == stdin || fout == stdin){ + fflush(fin); + fflush(fout); + } + } + + cleanup: + fclose(fin); + fclose(fout); + fmfsk_destroy(fmfsk); + exit(0); +} diff --git a/libcodec2-android/src/codec2/src/framer.c b/libcodec2-android/src/codec2/src/framer.c new file mode 100644 index 0000000..5f87f72 --- /dev/null +++ b/libcodec2-android/src/codec2/src/framer.c @@ -0,0 +1,97 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: framer.c + AUTHOR......: David Rowe + DATE CREATED: July 2020 + + Command line framer, inserts a Unique word into a sequence of + oneBitPerchar bits. + +\*---------------------------------------------------------------------------*/ + + +/* + Copyright (C) 2020 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include +#include +#include "fsk.h" + +unsigned int toInt(char c) +{ + if (c >= '0' && c <= '9') return c - '0'; + if (c >= 'A' && c <= 'F') return 10 + c - 'A'; + if (c >= 'a' && c <= 'f') return 10 + c - 'a'; + return -1; +} + +int main(int argc,char *argv[]){ + FILE *fin, *fout; + + if (argc != 5) { + fprintf(stderr,"usage: %s InputBitsOnePerByte OutputBitsOnePerByte frameSizeBits HexUW\n",argv[0]); + exit(1); + } + + if (strcmp(argv[1],"-") == 0) { + fin = stdin; + } else { + if ((fin = fopen(argv[1],"rb")) == NULL) { + fprintf(stderr,"Couldn't open input file: %s\n", argv[1]); + exit(1); + } + } + + if (strcmp(argv[2],"-") == 0) { + fout = stdout; + } else { + if ((fout = fopen(argv[2],"wb")) == NULL) { + fprintf(stderr,"Couldn't open output file: %s\n", argv[2]); + exit(1); + } + } + + /* extract UW array */ + + size_t framesize = atoi(argv[3]); + char *uw_hex = argv[4]; + uint8_t uw[4*strlen(uw_hex)]; + int uwsize = 0; + for(int c=0; c> (3-i)) & 0x1; /* MSB first */ + assert(uwsize == 4*strlen(uw_hex)); + + fprintf(stderr, "uw_hex: %s uwsize: %d\n", uw_hex, uwsize); + for(int i=0; i +#include +#include +#include +#include +#include +#include + +#include "codec2_fdmdv.h" +#include "golay23.h" +#include "codec2.h" +#include "varicode.h" +#include "freedv_api.h" +#include "freedv_api_internal.h" +#include "comp_prim.h" +#include "debug_alloc.h" +#include "fdmdv_internal.h" + +void freedv_1600_open(struct freedv *f) { + f->snr_squelch_thresh = 2.0; + f->squelch_en = 1; + f->tx_sync_bit = 0; + int Nc = 16; + f->fdmdv = fdmdv_create(Nc); + assert(f->fdmdv != NULL); + golay23_init(); + f->nin = f->nin_prev = FDMDV_NOM_SAMPLES_PER_FRAME; + f->n_nom_modem_samples = 2*FDMDV_NOM_SAMPLES_PER_FRAME; + f->n_nat_modem_samples = f->n_nom_modem_samples; + f->n_max_modem_samples = FDMDV_NOM_SAMPLES_PER_FRAME+FDMDV_MAX_SAMPLES_PER_FRAME; + f->modem_sample_rate = FREEDV_FS_8000; + int nbit = fdmdv_bits_per_frame(f->fdmdv); + f->fdmdv_bits = (int*)MALLOC(nbit*sizeof(int)); + assert(f->fdmdv_bits != NULL); + nbit = 2*fdmdv_bits_per_frame(f->fdmdv); + f->fdmdv_tx_bits = (int*)CALLOC(1, nbit*sizeof(int)); + f->fdmdv_rx_bits = (int*)CALLOC(1, nbit*sizeof(int)); + assert(f->fdmdv_tx_bits != NULL); assert(f->fdmdv_rx_bits != NULL); + f->evenframe = 0; + f->sz_error_pattern = fdmdv_error_pattern_size(f->fdmdv); + + f->speech_sample_rate = FREEDV_FS_8000; + f->codec2 = codec2_create(CODEC2_MODE_1300); assert(f->codec2 != NULL); + f->n_speech_samples = codec2_samples_per_frame(f->codec2); + + f->bits_per_modem_frame = fdmdv_bits_per_frame(f->fdmdv); + f->bits_per_codec_frame = codec2_bits_per_frame(f->codec2); + f->n_codec_frames = 1; + f->tx_payload_bits = MALLOC(f->bits_per_codec_frame); assert(f->tx_payload_bits != NULL); + f->rx_payload_bits = MALLOC(f->bits_per_codec_frame); assert(f->rx_payload_bits != NULL); +} + + +void freedv_comptx_fdmdv_1600(struct freedv *f, COMP mod_out[]) { + int i, j; + int data, codeword1, data_flag_index; + COMP tx_fdm[f->n_nat_modem_samples]; + + // spare bit in frame that codec defines. Use this 1 + // bit/frame to send txt messages + + data_flag_index = codec2_get_spare_bit_index(f->codec2); + + if (f->nvaricode_bits) { + f->fdmdv_tx_bits[data_flag_index] = f->tx_varicode_bits[f->varicode_bit_index++]; + f->nvaricode_bits--; + } + + if (f->nvaricode_bits == 0) { + /* get new char and encode */ + char s[2]; + if (f->freedv_get_next_tx_char != NULL) { + s[0] = (*f->freedv_get_next_tx_char)(f->callback_state); + f->nvaricode_bits = varicode_encode(f->tx_varicode_bits, s, VARICODE_MAX_BITS, 1, 1); + f->varicode_bit_index = 0; + } + } + + /* Protect first 12 out of first 16 excitation bits with (23,12) Golay Code: + + 0,1,2,3: v[0]..v[1] + 4,5,6,7: MSB of pitch + 11,12,13,14: MSB of energy + + */ + + data = 0; + for(i=0; i<8; i++) { + data <<= 1; + data |= f->tx_payload_bits[i]; + } + for(i=11; i<15; i++) { + data <<= 1; + data |= f->tx_payload_bits[i]; + } + codeword1 = golay23_encode(data); + + /* now pack output frame with parity bits at end to make them + as far apart as possible from the data they protect. Parity + bits are LSB of the Golay codeword */ + + for(i=0; ibits_per_codec_frame; i++) + f->fdmdv_tx_bits[i] = f->tx_payload_bits[i]; + for(j=0; ibits_per_codec_frame+11; i++,j++) { + f->fdmdv_tx_bits[i] = (codeword1 >> (10-j)) & 0x1; + } + f->fdmdv_tx_bits[i] = 0; /* spare bit */ + + /* optionally overwrite with test frames */ + + if (f->test_frames) { + fdmdv_get_test_bits(f->fdmdv, f->fdmdv_tx_bits); + fdmdv_get_test_bits(f->fdmdv, &f->fdmdv_tx_bits[f->bits_per_modem_frame]); + } + + /* modulate even and odd frames */ + + fdmdv_mod(f->fdmdv, tx_fdm, f->fdmdv_tx_bits, &f->tx_sync_bit); + assert(f->tx_sync_bit == 1); + + fdmdv_mod(f->fdmdv, &tx_fdm[FDMDV_NOM_SAMPLES_PER_FRAME], &f->fdmdv_tx_bits[f->bits_per_modem_frame], &f->tx_sync_bit); + assert(f->tx_sync_bit == 0); + + assert(2*FDMDV_NOM_SAMPLES_PER_FRAME == f->n_nom_modem_samples); + + for(i=0; in_nom_modem_samples; i++) + mod_out[i] = fcmult(FDMDV_SCALE, tx_fdm[i]); +} + + +int freedv_comprx_fdmdv_1600(struct freedv *f, COMP demod_in[]) { + int bits_per_fdmdv_frame; + int i, j; + int recd_codeword, codeword1, data_flag_index, n_ascii; + short abit[1]; + char ascii_out; + int reliable_sync_bit; + int rx_status = 0; + + COMP ademod_in[f->nin]; + for(i=0; inin; i++) + ademod_in[i] = fcmult(1.0/FDMDV_SCALE, demod_in[i]); + + bits_per_fdmdv_frame = fdmdv_bits_per_frame(f->fdmdv); + + fdmdv_demod(f->fdmdv, f->fdmdv_bits, &reliable_sync_bit, ademod_in, &f->nin); + fdmdv_get_demod_stats(f->fdmdv, &f->stats); + f->sync = f->fdmdv->sync; + f->snr_est = f->stats.snr_est; + + if (reliable_sync_bit == 1) { + f->evenframe = 1; + } + + if (f->sync) { + rx_status = RX_SYNC; + + if (f->evenframe == 0) { + memcpy(f->fdmdv_rx_bits, f->fdmdv_bits, bits_per_fdmdv_frame*sizeof(int)); + } + else { + memcpy(&f->fdmdv_rx_bits[bits_per_fdmdv_frame], f->fdmdv_bits, bits_per_fdmdv_frame*sizeof(int)); + + if (f->test_frames == 0) { + recd_codeword = 0; + for(i=0; i<8; i++) { + recd_codeword <<= 1; + recd_codeword |= (f->fdmdv_rx_bits[i] & 0x1); + } + for(i=11; i<15; i++) { + recd_codeword <<= 1; + recd_codeword |= (f->fdmdv_rx_bits[i] & 0x1); + } + for(i=f->bits_per_codec_frame; ibits_per_codec_frame+11; i++) { + recd_codeword <<= 1; + recd_codeword |= (f->fdmdv_rx_bits[i] & 0x1); + } + codeword1 = golay23_decode(recd_codeword); + f->total_bit_errors += golay23_count_errors(recd_codeword, codeword1); + f->total_bits += 23; + + for(i=0; ibits_per_codec_frame; i++) + f->rx_payload_bits[i] = f->fdmdv_rx_bits[i]; + + for(i=0; i<8; i++) { + f->rx_payload_bits[i] = (codeword1 >> (22-i)) & 0x1; + } + for(i=8,j=11; i<12; i++,j++) { + f->rx_payload_bits[j] = (codeword1 >> (22-i)) & 0x1; + } + + // extract txt msg data bit ------------------------------------------------------------ + + data_flag_index = codec2_get_spare_bit_index(f->codec2); + abit[0] = f->rx_payload_bits[data_flag_index]; + + n_ascii = varicode_decode(&f->varicode_dec_states, &ascii_out, abit, 1, 1); + if (n_ascii && (f->freedv_put_next_rx_char != NULL)) { + (*f->freedv_put_next_rx_char)(f->callback_state, ascii_out); + } + + // reconstruct missing bit we steal for data bit and decode + codec2_rebuild_spare_bit(f->codec2, (char*)f->rx_payload_bits); + + rx_status |= RX_BITS; + } + else { + int test_frame_sync, bit_errors, ntest_bits, k; + short error_pattern[fdmdv_error_pattern_size(f->fdmdv)]; + + for(k=0; k<2; k++) { + /* test frames, so lets sync up to the test frames and count any errors */ + + fdmdv_put_test_bits(f->fdmdv, &test_frame_sync, error_pattern, &bit_errors, &ntest_bits, &f->fdmdv_rx_bits[k*bits_per_fdmdv_frame]); + + if (test_frame_sync == 1) { + f->test_frame_sync_state = 1; + f->test_frame_count = 0; + } + + if (f->test_frame_sync_state) { + if (f->test_frame_count == 0) { + f->total_bit_errors += bit_errors; + f->total_bits += ntest_bits; + if (f->freedv_put_error_pattern != NULL) { + (*f->freedv_put_error_pattern)(f->error_pattern_callback_state, error_pattern, fdmdv_error_pattern_size(f->fdmdv)); + } + } + f->test_frame_count++; + if (f->test_frame_count == 4) + f->test_frame_count = 0; + } + + } + } /* if (test_frames == 0) .... */ + } + + /* note this freewheels if reliable sync dissapears on bad channels */ + + if (f->evenframe) + f->evenframe = 0; + else + f->evenframe = 1; + + } /* if (sync) .... */ + + return rx_status; +} + diff --git a/libcodec2-android/src/codec2/src/freedv_2020.c b/libcodec2-android/src/codec2/src/freedv_2020.c new file mode 100644 index 0000000..dc56952 --- /dev/null +++ b/libcodec2-android/src/codec2/src/freedv_2020.c @@ -0,0 +1,337 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: freedv_2020.c + AUTHOR......: David Rowe + DATE CREATED: May 2020 + + Functions that implement the FreeDV 2020 mode. + +\*---------------------------------------------------------------------------*/ + +#include +#include +#include +#include +#include +#include +#include + +#include "fsk.h" +#include "fmfsk.h" +#include "codec2.h" +#include "codec2_fdmdv.h" +#include "varicode.h" +#include "freedv_api.h" +#include "freedv_api_internal.h" +#include "comp_prim.h" + +#include "codec2_ofdm.h" +#include "ofdm_internal.h" +#include "mpdecode_core.h" +#include "gp_interleaver.h" +#include "ldpc_codes.h" +#include "interldpc.h" +#include "debug_alloc.h" + +extern char *ofdm_statemode[]; + +#ifdef __LPCNET__ +void freedv_2020_open(struct freedv *f) { + f->speech_sample_rate = FREEDV_FS_16000; + f->snr_squelch_thresh = 4.0; + f->squelch_en = 0; + + /* Get a copy of the 700D modem config as template then modify for 2020 */ + f->ofdm = ofdm_create(NULL); + struct OFDM_CONFIG ofdm_config; + memcpy(&ofdm_config, ofdm_get_config_param(f->ofdm), sizeof(ofdm_config)); + ofdm_destroy(f->ofdm); + + ofdm_config.nc = 31; int data_bits_per_frame = 312; + ofdm_config.ts = 0.0205; + f->ofdm = ofdm_create(&ofdm_config); + + f->ldpc = (struct LDPC*)MALLOC(sizeof(struct LDPC)); + assert(f->ldpc != NULL); + + ldpc_codes_setup(f->ldpc, "HRAb_396_504"); + set_data_bits_per_frame(f->ldpc, data_bits_per_frame); + int coded_syms_per_frame = f->ldpc->coded_bits_per_frame/f->ofdm->bps; + + f->ofdm_bitsperframe = ofdm_get_bits_per_frame(f->ofdm); + f->ofdm_nuwbits = (f->ofdm->config.ns - 1) * f->ofdm->config.bps - f->ofdm->config.txtbits; + f->ofdm_ntxtbits = f->ofdm->config.txtbits; + assert(f->ofdm_nuwbits == 10); + assert(f->ofdm_ntxtbits == 4); + + if (f->verbose) { + fprintf(stderr, "ldpc_data_bits_per_frame = %d\n", f->ldpc->ldpc_data_bits_per_frame); + fprintf(stderr, "ldpc_coded_bits_per_frame = %d\n", f->ldpc->ldpc_coded_bits_per_frame); + fprintf(stderr, "data_bits_per_frame = %d\n", data_bits_per_frame); + fprintf(stderr, "coded_bits_per_frame = %d\n", f->ldpc->coded_bits_per_frame); + fprintf(stderr, "coded_syms_per_frame = %d\n", f->ldpc->coded_bits_per_frame/f->ofdm->bps); + fprintf(stderr, "ofdm_bits_per_frame = %d\n", f->ofdm_bitsperframe); + } + + f->modem_frame_count_tx = f->modem_frame_count_rx = 0; + + f->codeword_symbols = (COMP*)MALLOC(sizeof(COMP) * coded_syms_per_frame); + assert(f->codeword_symbols != NULL); + + f->codeword_amps = (float*)MALLOC(sizeof(float) * coded_syms_per_frame); + assert(f->codeword_amps != NULL); + + for (int i=0; i< coded_syms_per_frame; i++) { + f->codeword_symbols[i].real = 0.0f; + f->codeword_symbols[i].imag = 0.0f; + f->codeword_amps[i] = 0.0f; + } + + f->nin = f->nin_prev = ofdm_get_samples_per_frame(f->ofdm); + f->n_nat_modem_samples = ofdm_get_samples_per_frame(f->ofdm); + f->n_nom_modem_samples = ofdm_get_samples_per_frame(f->ofdm); + f->n_max_modem_samples = ofdm_get_max_samples_per_frame(f->ofdm); + f->modem_sample_rate = f->ofdm->config.fs; + f->clip = 0; + f->sz_error_pattern = f->ofdm_bitsperframe; + + /* storage for pass through audio interpolating filter. These are + the rate FREEDV_FS_8000 modem input samples before interpolation */ + f->passthrough_2020 = CALLOC(1, sizeof(float)*(FDMDV_OS_TAPS_16K + freedv_get_n_max_modem_samples(f))); + assert(f->passthrough_2020 != NULL); + + /* TODO: tx BPF off by default, as we need new filter coeffs for FreeDV 2020 waveform */ + ofdm_set_tx_bpf(f->ofdm, 0); + + f->lpcnet = lpcnet_freedv_create(1); assert(f->lpcnet != NULL); + f->codec2 = NULL; + + /* should be exactly an integer number of Codec frames in a OFDM modem frame */ + assert((f->ldpc->data_bits_per_frame % lpcnet_bits_per_frame(f->lpcnet)) == 0); + + f->n_codec_frames = f->ldpc->data_bits_per_frame/lpcnet_bits_per_frame(f->lpcnet); + f->n_speech_samples = f->n_codec_frames*lpcnet_samples_per_frame(f->lpcnet); + f->bits_per_codec_frame = lpcnet_bits_per_frame(f->lpcnet); + f->bits_per_modem_frame = f->n_codec_frames*f->bits_per_codec_frame; + + f->tx_payload_bits = (unsigned char*)MALLOC(f->bits_per_modem_frame); + assert(f->tx_payload_bits != NULL); + f->rx_payload_bits = (unsigned char*)MALLOC(f->bits_per_modem_frame); + assert(f->rx_payload_bits != NULL); +} + +void freedv_comptx_2020(struct freedv *f, COMP mod_out[]) { + int i, k; + + int data_bits_per_frame = f->ldpc->data_bits_per_frame; + uint8_t tx_bits[data_bits_per_frame]; + + memcpy(tx_bits, f->tx_payload_bits, data_bits_per_frame); + + // Generate Varicode txt bits. Txt bits in OFDM frame come just + // after Unique Word (UW). Txt bits aren't protected by FEC, and need to be + // added to each frame after interleaver as done it's thing + + int nspare = f->ofdm_ntxtbits; + uint8_t txt_bits[nspare]; + + for(k=0; knvaricode_bits == 0) { + /* get new char and encode */ + char s[2]; + if (f->freedv_get_next_tx_char != NULL) { + s[0] = (*f->freedv_get_next_tx_char)(f->callback_state); + f->nvaricode_bits = varicode_encode(f->tx_varicode_bits, s, VARICODE_MAX_BITS, 1, 1); + f->varicode_bit_index = 0; + } + } + if (f->nvaricode_bits) { + txt_bits[k] = f->tx_varicode_bits[f->varicode_bit_index++]; + f->nvaricode_bits--; + } else txt_bits[k] = 0; + } + + /* optionally replace codec payload bits with test frames known to rx */ + + if (f->test_frames) { + uint8_t payload_data_bits[data_bits_per_frame]; + ofdm_generate_payload_data_bits(payload_data_bits, data_bits_per_frame); + + for (i = 0; i < data_bits_per_frame; i++) { + tx_bits[i] = payload_data_bits[i]; + } + } + + /* OK now ready to LDPC encode, interleave, and OFDM modulate */ + + complex float tx_sams[f->n_nat_modem_samples]; + COMP asam; + + ofdm_ldpc_interleave_tx(f->ofdm, f->ldpc, tx_sams, tx_bits, txt_bits); + + for(i=0; i< f->n_nat_modem_samples; i++) { + asam.real = crealf(tx_sams[i]); + asam.imag = cimagf(tx_sams[i]); + mod_out[i] = fcmult(OFDM_AMP_SCALE * NORM_PWR_OFDM, asam); + } + + if (f->clip) { + cohpsk_clip(mod_out, OFDM_CLIP, f->n_nat_modem_samples); + } +} + +int freedv_comprx_2020(struct freedv *f, COMP demod_in[]) { + int i, k; + int n_ascii; + char ascii_out; + struct OFDM *ofdm = f->ofdm; + struct LDPC *ldpc = f->ldpc; + + int data_bits_per_frame = ldpc->data_bits_per_frame; + int coded_bits_per_frame = ldpc->coded_bits_per_frame; + int coded_syms_per_frame = ldpc->coded_bits_per_frame/ofdm->bps; + COMP *codeword_symbols = f->codeword_symbols; + float *codeword_amps = f->codeword_amps; + int rx_bits[f->ofdm_bitsperframe]; + short txt_bits[f->ofdm_ntxtbits]; + COMP payload_syms[coded_syms_per_frame]; + float payload_amps[coded_syms_per_frame]; + + int rx_status = 0; + + int Nerrs_raw = 0; + int Nerrs_coded = 0; + int iter = 0; + int parityCheckCount = 0; + uint8_t rx_uw[f->ofdm_nuwbits]; + + f->sync = f->stats.sync = 0; + + // TODO: should be higher for 2020? + float EsNo = 3.0; + + /* looking for modem sync */ + + if (ofdm->sync_state == search) { + ofdm_sync_search(f->ofdm, demod_in); + } + + /* OK modem is in sync */ + + if ((ofdm->sync_state == synced) || (ofdm->sync_state == trial)) { + rx_status |= RX_SYNC; + if (ofdm->sync_state == trial) rx_status |= RX_TRIAL_SYNC; + + ofdm_demod(ofdm, rx_bits, demod_in); + ofdm_extract_uw(ofdm, ofdm->rx_np, ofdm->rx_amp, rx_uw); + ofdm_disassemble_qpsk_modem_packet(ofdm, ofdm->rx_np, ofdm->rx_amp, payload_syms, payload_amps, txt_bits); + + f->sync = 1; + ofdm_get_demod_stats(f->ofdm, &f->stats); + f->snr_est = f->stats.snr_est; + + assert((f->ofdm_nuwbits+f->ofdm_ntxtbits+coded_bits_per_frame) == f->ofdm_bitsperframe); + + /* newest symbols at end of buffer (uses final i from last loop), note we + change COMP formats from what modem uses internally */ + + for(i=0; i< coded_syms_per_frame; i++) { + codeword_symbols[i] = payload_syms[i]; + codeword_amps[i] = payload_amps[i]; + } + + /* run de-interleaver */ + + COMP codeword_symbols_de[coded_syms_per_frame]; + float codeword_amps_de[coded_syms_per_frame]; + + gp_deinterleave_comp (codeword_symbols_de, codeword_symbols, coded_syms_per_frame); + gp_deinterleave_float(codeword_amps_de , codeword_amps , coded_syms_per_frame); + + float llr[coded_bits_per_frame]; + uint8_t out_char[coded_bits_per_frame]; + + if (f->test_frames) { + int tmp; + Nerrs_raw = count_uncoded_errors(ldpc, &f->ofdm->config, &tmp, codeword_symbols_de); + f->total_bit_errors += Nerrs_raw; + f->total_bits += f->ofdm_bitsperframe; + } + + f->modem_frame_count_rx = 0; + + symbols_to_llrs(llr, codeword_symbols_de, codeword_amps_de, + EsNo, ofdm->mean_amp, coded_syms_per_frame); + /* LDPC decoder */ + if (ldpc->data_bits_per_frame == ldpc->ldpc_data_bits_per_frame) { + /* all data bits in code word used */ + iter = run_ldpc_decoder(ldpc, out_char, llr, &parityCheckCount); + } else { + /* some unused data bits, set these to known values to strengthen code */ + float llr_full_codeword[ldpc->ldpc_coded_bits_per_frame]; + int unused_data_bits = ldpc->ldpc_data_bits_per_frame - ldpc->data_bits_per_frame; + + // received data bits + for (i = 0; i < ldpc->data_bits_per_frame; i++) + llr_full_codeword[i] = llr[i]; + // known bits ... so really likely + for (i = ldpc->data_bits_per_frame; i < ldpc->ldpc_data_bits_per_frame; i++) + llr_full_codeword[i] = -100.0f; + // parity bits at end + for (i = ldpc->ldpc_data_bits_per_frame; i < ldpc->ldpc_coded_bits_per_frame; i++) + llr_full_codeword[i] = llr[i - unused_data_bits]; + iter = run_ldpc_decoder(ldpc, out_char, llr_full_codeword, &parityCheckCount); + } + + if (parityCheckCount != ldpc->NumberParityBits) rx_status |= RX_BIT_ERRORS; + + if (f->test_frames) { + uint8_t payload_data_bits[data_bits_per_frame]; + ofdm_generate_payload_data_bits(payload_data_bits, data_bits_per_frame); + Nerrs_coded = count_errors(payload_data_bits, out_char, data_bits_per_frame); + f->total_bit_errors_coded += Nerrs_coded; + f->total_bits_coded += data_bits_per_frame; + } else { + memcpy(f->rx_payload_bits, out_char, data_bits_per_frame); + } + + rx_status |= RX_BITS; + + /* If modem is synced we can decode txt bits */ + + for(k=0; kofdm_ntxtbits; k++) { + //fprintf(stderr, "txt_bits[%d] = %d\n", k, rx_bits[i]); + n_ascii = varicode_decode(&f->varicode_dec_states, &ascii_out, &txt_bits[k], 1, 1); + if (n_ascii && (f->freedv_put_next_rx_char != NULL)) { + (*f->freedv_put_next_rx_char)(f->callback_state, ascii_out); + } + } + + /* estimate uncoded BER from UW. Coded bit errors could + probably be estimated as half of all failed LDPC parity + checks */ + + for(i=0; iofdm_nuwbits; i++) { + if (rx_uw[i] != ofdm->tx_uw[i]) { + f->total_bit_errors++; + } + } + f->total_bits += f->ofdm_nuwbits; + } + + /* iterate state machine and update nin for next call */ + + f->nin = ofdm_get_nin(ofdm); + ofdm_sync_state_machine(ofdm, rx_uw); + + if ((f->verbose && (ofdm->last_sync_state == search)) || (f->verbose == 2)) { + assert(rx_status <= 15); + fprintf(stderr, "%3d st: %-6s euw: %2d %1d f: %5.1f pbw: %d snr: %4.1f eraw: %3d ecdd: %3d iter: %3d pcc: %3d rxst: %s\n", + f->frames++, ofdm_statemode[ofdm->last_sync_state], ofdm->uw_errors, ofdm->sync_counter, + (double)ofdm->foff_est_hz, ofdm->phase_est_bandwidth, + f->snr_est, Nerrs_raw, Nerrs_coded, iter, parityCheckCount, rx_sync_flags_to_text[rx_status]); + } + + return rx_status; +} +#endif diff --git a/libcodec2-android/src/codec2/src/freedv_700.c b/libcodec2-android/src/codec2/src/freedv_700.c new file mode 100644 index 0000000..158930f --- /dev/null +++ b/libcodec2-android/src/codec2/src/freedv_700.c @@ -0,0 +1,484 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: freedv_700.c + AUTHOR......: David Rowe + DATE CREATED: May 2020 + + Functions that implement the various FreeDV 700 modes. + +\*---------------------------------------------------------------------------*/ + +#include +#include +#include +#include +#include +#include +#include + +#include "fsk.h" +#include "fmfsk.h" +#include "codec2.h" +#include "codec2_fdmdv.h" +#include "varicode.h" +#include "freedv_api.h" +#include "freedv_api_internal.h" +#include "comp_prim.h" + +#include "codec2_ofdm.h" +#include "ofdm_internal.h" +#include "mpdecode_core.h" +#include "gp_interleaver.h" +#include "ldpc_codes.h" +#include "interldpc.h" +#include "debug_alloc.h" +#include "filter.h" + +extern char *ofdm_statemode[]; + +void freedv_700c_open(struct freedv *f) { + f->snr_squelch_thresh = 0.0; + f->squelch_en = 0; + + f->cohpsk = cohpsk_create(); + f->nin = f->nin_prev = COHPSK_NOM_SAMPLES_PER_FRAME; + f->n_nat_modem_samples = COHPSK_NOM_SAMPLES_PER_FRAME; // native modem samples as used by the modem + f->n_nom_modem_samples = f->n_nat_modem_samples * FREEDV_FS_8000 / COHPSK_FS;// number of samples after native samples are interpolated to 8000 sps + f->n_max_modem_samples = COHPSK_MAX_SAMPLES_PER_FRAME * FREEDV_FS_8000 / COHPSK_FS + 1; + f->modem_sample_rate = FREEDV_FS_8000; // note weird sample rate tamed by resampling + f->clip = 1; + f->sz_error_pattern = cohpsk_error_pattern_size(); + f->test_frames_diversity = 1; + + f->ptFilter7500to8000 = (struct quisk_cfFilter *)MALLOC(sizeof(struct quisk_cfFilter)); + f->ptFilter8000to7500 = (struct quisk_cfFilter *)MALLOC(sizeof(struct quisk_cfFilter)); + quisk_filt_cfInit(f->ptFilter8000to7500, quiskFilt120t480, sizeof(quiskFilt120t480)/sizeof(float)); + quisk_filt_cfInit(f->ptFilter7500to8000, quiskFilt120t480, sizeof(quiskFilt120t480)/sizeof(float)); + + f->speech_sample_rate = FREEDV_FS_8000; + f->codec2 = codec2_create(CODEC2_MODE_700C); assert(f->codec2 != NULL); + + f->n_codec_frames = 2; + f->n_speech_samples = f->n_codec_frames*codec2_samples_per_frame(f->codec2); + f->bits_per_codec_frame = codec2_bits_per_frame(f->codec2); + f->bits_per_modem_frame = f->n_codec_frames*codec2_bits_per_frame(f->codec2); + assert(f->bits_per_modem_frame == COHPSK_BITS_PER_FRAME); + + f->tx_payload_bits = (uint8_t*)MALLOC(f->bits_per_modem_frame*sizeof(char)); assert(f->tx_payload_bits != NULL); + f->rx_payload_bits = (uint8_t*)MALLOC(f->bits_per_modem_frame*sizeof(char)); assert(f->rx_payload_bits != NULL); +} + +void freedv_comptx_700c(struct freedv *f, COMP mod_out[]) { + int i; + COMP tx_fdm[f->n_nat_modem_samples]; + int tx_bits[COHPSK_BITS_PER_FRAME]; + + /* earlier modems used one bit per int for unpacked bits */ + for(i=0; itx_payload_bits[i]; + + /* optionally overwrite the codec bits with test frames */ + if (f->test_frames) { + cohpsk_get_test_bits(f->cohpsk, tx_bits); + } + + /* cohpsk modulator */ + cohpsk_mod(f->cohpsk, tx_fdm, tx_bits, COHPSK_BITS_PER_FRAME); + if (f->clip) + cohpsk_clip(tx_fdm, COHPSK_CLIP, COHPSK_NOM_SAMPLES_PER_FRAME); + for(i=0; in_nat_modem_samples; i++) + mod_out[i] = fcmult(FDMDV_SCALE*NORM_PWR_COHPSK, tx_fdm[i]); + i = quisk_cfInterpDecim((complex float *)mod_out, f->n_nat_modem_samples, f->ptFilter7500to8000, 16, 15); +} + +void freedv_700d_open(struct freedv *f) { + f->snr_squelch_thresh = 0.0; + f->squelch_en = 0; + + f->ofdm = ofdm_create(NULL); + assert(f->ofdm != NULL); + + struct OFDM_CONFIG *ofdm_config = ofdm_get_config_param(f->ofdm); + f->ofdm_bitsperframe = ofdm_get_bits_per_frame(f->ofdm); + f->ofdm_nuwbits = (ofdm_config->ns - 1) * ofdm_config->bps - ofdm_config->txtbits; + f->ofdm_ntxtbits = ofdm_config->txtbits; + + f->ldpc = (struct LDPC*)MALLOC(sizeof(struct LDPC)); + assert(f->ldpc != NULL); + + ldpc_codes_setup(f->ldpc, "HRA_112_112"); +#ifdef __EMBEDDED__ + f->ldpc->max_iter = 10; /* limit LDPC decoder iterations to limit CPU load */ +#endif + /* Code length 224 divided by 2 bits per symbol = 112 symbols per frame */ + int coded_syms_per_frame = f->ldpc->coded_bits_per_frame/f->ofdm->bps; + + f->modem_frame_count_tx = f->modem_frame_count_rx = 0; + + f->codeword_symbols = (COMP*)MALLOC(sizeof(COMP) * coded_syms_per_frame); + assert(f->codeword_symbols != NULL); + + f->codeword_amps = (float*)MALLOC(sizeof(float) * coded_syms_per_frame); + assert(f->codeword_amps != NULL); + + f->nin = f->nin_prev = ofdm_get_samples_per_frame(f->ofdm); + f->n_nat_modem_samples = ofdm_get_samples_per_frame(f->ofdm); + f->n_nom_modem_samples = ofdm_get_samples_per_frame(f->ofdm); + f->n_max_modem_samples = ofdm_get_max_samples_per_frame(f->ofdm); + f->modem_sample_rate = f->ofdm->config.fs; + f->clip = 0; + f->sz_error_pattern = f->ofdm_bitsperframe; + + f->tx_bits = NULL; /* not used for 700D */ + +#ifndef __EMBEDDED__ + /* tx BPF off on embedded platforms, as it consumes significant CPU */ + ofdm_set_tx_bpf(f->ofdm, 1); +#endif + + f->speech_sample_rate = FREEDV_FS_8000; + f->codec2 = codec2_create(CODEC2_MODE_700C); assert(f->codec2 != NULL); + /* should be exactly an integer number of Codec 2 frames in a OFDM modem frame */ + assert((f->ldpc->data_bits_per_frame % codec2_bits_per_frame(f->codec2)) == 0); + + f->n_codec_frames = f->ldpc->data_bits_per_frame/codec2_bits_per_frame(f->codec2); + f->n_speech_samples = f->n_codec_frames*codec2_samples_per_frame(f->codec2); + f->bits_per_codec_frame = codec2_bits_per_frame(f->codec2); + f->bits_per_modem_frame = f->n_codec_frames*f->bits_per_codec_frame; + + f->tx_payload_bits = (unsigned char*)MALLOC(f->bits_per_modem_frame); + assert(f->tx_payload_bits != NULL); + f->rx_payload_bits = (unsigned char*)MALLOC(f->bits_per_modem_frame); + assert(f->rx_payload_bits != NULL); +} + + +/* + Ok so when interleaved, we take the interleaver length of input samples, + and output that many modem samples, e.g. for interleaver of length 4: + + record input speech 1234 + freedv tx | + play modem sig 1234 + record modem sig 1234 + freedv_rx | + play output speech 1234 + time axis --------->123456789012----> + + So a sample of input speech at time 1 is ouput at time 9. We assume + the freedv_tx and freedv_rx and propogation time over channel (from + when a modem signal is played at the HF tx to when it is recorded at + the HF rx) is zero. + + The freedv tx interface ouputs n_nom_modem_samples, which a single + OFDM modem frame, 112 payload bits or 4 speech codec frames. So + this function must always have 1280 speech samples as input, and + 1280 modem samples as output. +*/ + +void freedv_comptx_700d(struct freedv *f, COMP mod_out[]) { + int i, k; + int nspare; + + // Generate Varicode txt bits. Txt bits in OFDM frame come just + // after Unique Word (UW). Txt bits aren't protected by FEC. + + nspare = f->ofdm_ntxtbits; + uint8_t txt_bits[nspare]; + + for(k=0; knvaricode_bits == 0) { + /* get new char and encode */ + char s[2]; + if (f->freedv_get_next_tx_char != NULL) { + s[0] = (*f->freedv_get_next_tx_char)(f->callback_state); + f->nvaricode_bits = varicode_encode(f->tx_varicode_bits, s, VARICODE_MAX_BITS, 1, 1); + f->varicode_bit_index = 0; + } + } + if (f->nvaricode_bits) { + txt_bits[k] = f->tx_varicode_bits[f->varicode_bit_index++]; + f->nvaricode_bits--; + } + else txt_bits[k] = 0; + } + + /* optionally replace codec payload bits with test frames known to rx */ + + if (f->test_frames) { + uint8_t payload_data_bits[f->bits_per_modem_frame]; + ofdm_generate_payload_data_bits(payload_data_bits, f->bits_per_modem_frame); + + for (i = 0; i < f->bits_per_modem_frame; i++) { + f->tx_payload_bits[i] = payload_data_bits[i]; + } + } + + /* OK now ready to LDPC encode, interleave, and OFDM modulate */ + + complex float tx_sams[f->n_nat_modem_samples]; + COMP asam; + + ofdm_ldpc_interleave_tx(f->ofdm, f->ldpc, tx_sams, f->tx_payload_bits, txt_bits); + + for(i=0; i< f->n_nat_modem_samples; i++) { + asam.real = crealf(tx_sams[i]); + asam.imag = cimagf(tx_sams[i]); + mod_out[i] = fcmult(OFDM_AMP_SCALE * NORM_PWR_OFDM, asam); + } + + if (f->clip) { + cohpsk_clip(mod_out, OFDM_CLIP, f->n_nat_modem_samples); + } +} + +int freedv_comprx_700c(struct freedv *f, COMP demod_in_8kHz[]) { + int i; + int sync; + + int rx_status = 0; + + // quisk_cfInterpDecim() modifies input data so lets make a copy just in case there + // is no sync and we need to echo inpout to output + + // freedv_nin(f): input samples at Fs=8000 Hz + // f->nin: input samples at Fs=7500 Hz + + COMP demod_in[freedv_nin(f)]; + + for(i=0; iptFilter8000to7500, 15, 16); + + for(i=0; inin; i++) + demod_in[i] = fcmult(1.0/FDMDV_SCALE, demod_in[i]); + + float rx_soft_bits[COHPSK_BITS_PER_FRAME]; + + cohpsk_demod(f->cohpsk, rx_soft_bits, &sync, demod_in, &f->nin); + + for(i=0; ibits_per_modem_frame; i++) + f->rx_payload_bits[i] = rx_soft_bits[i] < 0.0f; + + f->sync = sync; + cohpsk_get_demod_stats(f->cohpsk, &f->stats); + f->snr_est = f->stats.snr_est; + + if (sync) { + rx_status = RX_SYNC; + + if (f->test_frames == 0) { + rx_status |= RX_BITS; + } + else { + + if (f->test_frames_diversity) { + /* normal operation - error pattern on frame after diveristy combination */ + short error_pattern[COHPSK_BITS_PER_FRAME]; + int bit_errors; + + /* test data, lets see if we can sync to the test data sequence */ + + char rx_bits_char[COHPSK_BITS_PER_FRAME]; + for(i=0; icohpsk, &f->test_frame_sync_state, error_pattern, &bit_errors, rx_bits_char, 0); + if (f->test_frame_sync_state) { + f->total_bit_errors += bit_errors; + f->total_bits += COHPSK_BITS_PER_FRAME; + if (f->freedv_put_error_pattern != NULL) { + (*f->freedv_put_error_pattern)(f->error_pattern_callback_state, error_pattern, COHPSK_BITS_PER_FRAME); + } + } + } + else { + /* calculate error pattern on uncombined carriers - test mode to spot any carrier specific issues like + tx passband filtering */ + + short error_pattern[2*COHPSK_BITS_PER_FRAME]; + char rx_bits_char[COHPSK_BITS_PER_FRAME]; + int bit_errors_lower, bit_errors_upper; + + /* lower group of carriers */ + + float *rx_bits_lower = cohpsk_get_rx_bits_lower(f->cohpsk); + for(i=0; icohpsk, &f->test_frame_sync_state, error_pattern, &bit_errors_lower, rx_bits_char, 0); + + /* upper group of carriers */ + + float *rx_bits_upper = cohpsk_get_rx_bits_upper(f->cohpsk); + for(i=0; icohpsk, &f->test_frame_sync_state_upper, &error_pattern[COHPSK_BITS_PER_FRAME], &bit_errors_upper, rx_bits_char, 1); + + /* combine total errors and call callback */ + + if (f->test_frame_sync_state && f->test_frame_sync_state_upper) { + f->total_bit_errors += bit_errors_lower + bit_errors_upper; + f->total_bits += 2*COHPSK_BITS_PER_FRAME; + if (f->freedv_put_error_pattern != NULL) { + (*f->freedv_put_error_pattern)(f->error_pattern_callback_state, error_pattern, 2*COHPSK_BITS_PER_FRAME); + } + } + + } + } + + } + + return rx_status; +} + +/* + 700D demod function that can support complex (float) or real (short) + samples. The real short samples are useful for low memory overhead, + such at the SM1000. +*/ + +int freedv_comp_short_rx_700d(struct freedv *f, void *demod_in_8kHz, int demod_in_is_short, float gain) { + int i, k; + int n_ascii; + char ascii_out; + struct OFDM *ofdm = f->ofdm; + struct LDPC *ldpc = f->ldpc; + + int data_bits_per_frame = ldpc->data_bits_per_frame; + int coded_bits_per_frame = ldpc->coded_bits_per_frame; + int coded_syms_per_frame = ldpc->coded_bits_per_frame/ofdm->bps; + COMP *codeword_symbols = f->codeword_symbols; + float *codeword_amps = f->codeword_amps; + int rx_bits[f->ofdm_bitsperframe]; + short txt_bits[f->ofdm_ntxtbits]; + COMP payload_syms[coded_syms_per_frame]; + float payload_amps[coded_syms_per_frame]; + + int Nerrs_raw = 0; + int Nerrs_coded = 0; + int iter = 0; + int parityCheckCount = 0; + uint8_t rx_uw[f->ofdm_nuwbits]; + + float new_gain = gain / OFDM_AMP_SCALE; + + assert((demod_in_is_short == 0) || (demod_in_is_short == 1)); + + f->sync = f->stats.sync = 0; + int rx_status = 0; + + /* TODO estimate this properly from signal */ + float EsNo = 3.0; + + /* looking for modem sync */ + + if (ofdm->sync_state == search) { + if (demod_in_is_short) + ofdm_sync_search_shorts(f->ofdm, (short*)demod_in_8kHz, new_gain); + else + ofdm_sync_search(f->ofdm, (COMP*)demod_in_8kHz); + } + + /* OK modem is in sync */ + + if ((ofdm->sync_state == synced) || (ofdm->sync_state == trial)) { + rx_status |= RX_SYNC; + if (ofdm->sync_state == trial) rx_status |= RX_TRIAL_SYNC; + + if (demod_in_is_short) + ofdm_demod_shorts(ofdm, rx_bits, (short*)demod_in_8kHz, new_gain); + else + ofdm_demod(ofdm, rx_bits, (COMP*)demod_in_8kHz); + + ofdm_extract_uw(ofdm, ofdm->rx_np, ofdm->rx_amp, rx_uw); + ofdm_disassemble_qpsk_modem_packet(ofdm, ofdm->rx_np, ofdm->rx_amp, payload_syms, payload_amps, txt_bits); + + f->sync = 1; + ofdm_get_demod_stats(f->ofdm, &f->stats); + f->snr_est = f->stats.snr_est; + + assert((f->ofdm_nuwbits+f->ofdm_ntxtbits+coded_bits_per_frame) == f->ofdm_bitsperframe); + + /* newest symbols at end of buffer (uses final i from last loop), note we + change COMP formats from what modem uses internally */ + + for(i=0; i< coded_syms_per_frame; i++) { + codeword_symbols[i] = payload_syms[i]; + codeword_amps[i] = payload_amps[i]; + } + + /* run de-interleaver */ + + COMP codeword_symbols_de[coded_syms_per_frame]; + float codeword_amps_de[coded_syms_per_frame]; + gp_deinterleave_comp (codeword_symbols_de, codeword_symbols, coded_syms_per_frame); + gp_deinterleave_float(codeword_amps_de , codeword_amps , coded_syms_per_frame); + + float llr[coded_bits_per_frame]; + uint8_t out_char[coded_bits_per_frame]; + + if (f->test_frames) { + int tmp; + Nerrs_raw = count_uncoded_errors(ldpc, &f->ofdm->config, &tmp, codeword_symbols_de); + f->total_bit_errors += Nerrs_raw; + f->total_bits += f->ofdm_bitsperframe; + } + + f->modem_frame_count_rx = 0; + + symbols_to_llrs(llr, codeword_symbols_de, codeword_amps_de, + EsNo, ofdm->mean_amp, coded_syms_per_frame); + iter = run_ldpc_decoder(ldpc, out_char, llr, &parityCheckCount); + + if (parityCheckCount != ldpc->NumberParityBits) + rx_status |= RX_BIT_ERRORS; + + if (f->test_frames) { + uint8_t payload_data_bits[data_bits_per_frame]; + ofdm_generate_payload_data_bits(payload_data_bits, data_bits_per_frame); + Nerrs_coded = count_errors(payload_data_bits, out_char, data_bits_per_frame); + f->total_bit_errors_coded += Nerrs_coded; + f->total_bits_coded += data_bits_per_frame; + } else { + memcpy(f->rx_payload_bits, out_char, data_bits_per_frame); + } + + rx_status |= RX_BITS; + + /* If modem is synced we can decode txt bits */ + for(k=0; kofdm_ntxtbits; k++) { + //fprintf(stderr, "txt_bits[%d] = %d\n", k, rx_bits[i]); + n_ascii = varicode_decode(&f->varicode_dec_states, &ascii_out, &txt_bits[k], 1, 1); + if (n_ascii && (f->freedv_put_next_rx_char != NULL)) { + (*f->freedv_put_next_rx_char)(f->callback_state, ascii_out); + } + } + + /* estimate uncoded BER from UW */ + for(i=0; iofdm_nuwbits; i++) { + if (rx_uw[i] != ofdm->tx_uw[i]) { + f->total_bit_errors++; + } + } + + f->total_bits += f->ofdm_nuwbits; + } + + /* iterate state machine and update nin for next call */ + + f->nin = ofdm_get_nin(ofdm); + ofdm_sync_state_machine(ofdm, rx_uw); + + if ((f->verbose && (ofdm->last_sync_state == search)) || (f->verbose == 2)) { + fprintf(stderr, "%3d nin: %4d st: %-6s euw: %2d %1d f: %5.1f phbw: %d snr: %4.1f eraw: %3d ecdd: %3d iter: %3d " + "pcc: %3d rxst: %s\n", + f->frames++, ofdm->nin, ofdm_statemode[ofdm->last_sync_state], ofdm->uw_errors, ofdm->sync_counter, + (double)ofdm->foff_est_hz, ofdm->phase_est_bandwidth, + f->snr_est, Nerrs_raw, Nerrs_coded, iter, parityCheckCount, rx_sync_flags_to_text[rx_status]); + } + + return rx_status; +} + diff --git a/libcodec2-android/src/codec2/src/freedv_api.c b/libcodec2-android/src/codec2/src/freedv_api.c new file mode 100644 index 0000000..4cc2969 --- /dev/null +++ b/libcodec2-android/src/codec2/src/freedv_api.c @@ -0,0 +1,1295 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: freedv_api.c + AUTHOR......: David Rowe + DATE CREATED: August 2014 + + Library of API functions that implement FreeDV "modes", useful for + embedding FreeDV in other programs. Please see: + + 1. README_freedv.md + 2. Notes function use in freedv_api.c + 3. The sample freedv_tx.c and freedv_rx.c programs + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2014 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include +#include +#include +#include +#include +#include + +#include "fsk.h" +#include "fmfsk.h" +#include "codec2.h" +#include "codec2_fdmdv.h" +#include "fdmdv_internal.h" +#include "varicode.h" +#include "freedv_api.h" +#include "freedv_api_internal.h" +#include "freedv_vhf_framing.h" +#include "comp_prim.h" + +#include "codec2_ofdm.h" +#include "ofdm_internal.h" +#include "mpdecode_core.h" +#include "gp_interleaver.h" +#include "interldpc.h" + +#include "debug_alloc.h" + +#define VERSION 14 /* The API version number. The first version + is 10. Increment if the API changes in a + way that would require changes by the API + user. */ +/* + * Version 10 Initial version August 2, 2015. + * Version 11 September 2015 + * Added: freedv_zero_total_bit_errors(), freedv_get_sync() + * Changed all input and output sample rates to 8000 sps. Rates for FREEDV_MODE_700 and 700B were 7500. + * Version 12 August 2018 + * Added OFDM configuration switch structure + * Version 13 November 2019 + * Removed 700 and 700B modes + * Version 14 May 2020 + * Number of returned speech samples can vary, use freedv_get_n_max_speech_samples() to allocate + * buffers. + */ + +char *ofdm_statemode[] = {"search","trial","synced"}; + +char *rx_sync_flags_to_text[] = { + "----", + "---T", + "--S-", + "--ST", + "-B--", + "-B-T", + "-BS-", + "-BST", + "E---", + "E--T", + "E-S-", + "E-ST", + "EB--", + "EB-T", + "EBS-", + "EBST"}; + +/*---------------------------------------------------------------------------* \ + + FUNCTION....: freedv_open + AUTHOR......: David Rowe + DATE CREATED: 3 August 2014 + + Call this first to initialise. Returns NULL if initialisation + fails. If a malloc() or calloc() fails in general asserts() will + fire. + +\*---------------------------------------------------------------------------*/ + +struct freedv *freedv_open(int mode) { + struct freedv_advanced adv = {0,2,100,8000,1000,200, "H_256_512_4"}; + if (mode == FREEDV_MODE_FSK_LDPC) + return freedv_open_advanced(mode, &adv); + else + return freedv_open_advanced(mode, NULL); + +} + +struct freedv *freedv_open_advanced(int mode, struct freedv_advanced *adv) { + struct freedv *f; + + if (false == (FDV_MODE_ACTIVE(FREEDV_MODE_1600,mode) || FDV_MODE_ACTIVE(FREEDV_MODE_2400A,mode) || + FDV_MODE_ACTIVE(FREEDV_MODE_2400B,mode) || FDV_MODE_ACTIVE(FREEDV_MODE_800XA,mode) || + FDV_MODE_ACTIVE(FREEDV_MODE_700C,mode) || FDV_MODE_ACTIVE(FREEDV_MODE_700D,mode) || + FDV_MODE_ACTIVE(FREEDV_MODE_2020,mode) || FDV_MODE_ACTIVE(FREEDV_MODE_FSK_LDPC,mode) ) ) return NULL; + + /* set everything to zero just in case */ + f = (struct freedv*)CALLOC(1, sizeof(struct freedv)); + if (f == NULL) return NULL; + + f->mode = mode; + + if (FDV_MODE_ACTIVE( FREEDV_MODE_1600, mode)) freedv_1600_open(f); + if (FDV_MODE_ACTIVE( FREEDV_MODE_700C, mode)) freedv_700c_open(f); + if (FDV_MODE_ACTIVE( FREEDV_MODE_700D, mode)) freedv_700d_open(f); +#ifdef __LPCNET__ + if (FDV_MODE_ACTIVE( FREEDV_MODE_2020, mode)) freedv_2020_open(f); +#endif + if (FDV_MODE_ACTIVE( FREEDV_MODE_2400A, mode)) freedv_2400a_open(f); + if (FDV_MODE_ACTIVE( FREEDV_MODE_2400B, mode) ) freedv_2400b_open(f); + if (FDV_MODE_ACTIVE( FREEDV_MODE_800XA, mode)) freedv_800xa_open(f); + if (FDV_MODE_ACTIVE( FREEDV_MODE_FSK_LDPC, mode)) freedv_fsk_ldpc_open(f, adv); + + varicode_decode_init(&f->varicode_dec_states, 1); + + return f; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: freedv_close + AUTHOR......: David Rowe + DATE CREATED: 3 August 2014 + + Call to shut down a freedv instance and free memory. + +\*---------------------------------------------------------------------------*/ + +void freedv_close(struct freedv *freedv) { + assert(freedv != NULL); + + FREE(freedv->tx_payload_bits); + FREE(freedv->rx_payload_bits); + if (freedv->codec2) codec2_destroy(freedv->codec2); + + if (FDV_MODE_ACTIVE(FREEDV_MODE_1600, freedv->mode)) { + FREE(freedv->fdmdv_bits); + FREE(freedv->fdmdv_tx_bits); + FREE(freedv->fdmdv_rx_bits); + fdmdv_destroy(freedv->fdmdv); + } + + if (FDV_MODE_ACTIVE( FREEDV_MODE_700C, freedv->mode)) { + cohpsk_destroy(freedv->cohpsk); + quisk_filt_destroy(freedv->ptFilter8000to7500); + FREE(freedv->ptFilter8000to7500); + quisk_filt_destroy(freedv->ptFilter7500to8000); + FREE(freedv->ptFilter7500to8000); + } + + if (FDV_MODE_ACTIVE( FREEDV_MODE_700D, freedv->mode)) { + FREE(freedv->codeword_symbols); + FREE(freedv->codeword_amps); + FREE(freedv->ldpc); + ofdm_destroy(freedv->ofdm); + } + + if (FDV_MODE_ACTIVE( FREEDV_MODE_2020, freedv->mode)) { + FREE(freedv->codeword_symbols); + FREE(freedv->codeword_amps); + FREE(freedv->ldpc); + FREE(freedv->passthrough_2020); + ofdm_destroy(freedv->ofdm); +#ifdef __LPCNET__ + lpcnet_freedv_destroy(freedv->lpcnet); +#endif + } + + if (FDV_MODE_ACTIVE( FREEDV_MODE_2400A, freedv->mode) || FDV_MODE_ACTIVE( FREEDV_MODE_800XA, freedv->mode)){ + fsk_destroy(freedv->fsk); + fvhff_destroy_deframer(freedv->deframer); + } + + if (FDV_MODE_ACTIVE( FREEDV_MODE_2400B, freedv->mode)){ + fmfsk_destroy(freedv->fmfsk); + fvhff_destroy_deframer(freedv->deframer); + } + + if (FDV_MODE_ACTIVE( FREEDV_MODE_FSK_LDPC, freedv->mode)){ + fsk_destroy(freedv->fsk); + FREE(freedv->ldpc); + FREE(freedv->frame_llr); + FREE(freedv->twoframes_llr); + FREE(freedv->twoframes_hard); + } + + FREE(freedv); +} + + +/* helper function, unpacked bits are much easier to work with inside the modem */ + +static void codec2_encode_upacked(struct freedv *f, uint8_t unpacked_bits[], short speech_in[]) { + int n_packed = (f->bits_per_codec_frame + 7) / 8; + uint8_t packed_codec_bits[n_packed]; + + codec2_encode(f->codec2, packed_codec_bits, speech_in); + freedv_unpack(unpacked_bits, packed_codec_bits, f->bits_per_codec_frame); +} + + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: freedv_tx + AUTHOR......: David Rowe + DATE CREATED: 3 August 2014 + + Takes a frame of input speech samples, encodes and modulates them to + produce a frame of modem samples that can be sent to the + transmitter. See freedv_tx.c for an example. + + speech_in[] is sampled at freedv_get_speech_sample_rate() Hz, and the + user must supply a block of exactly + freedv_get_n_speech_samples(). The speech_in[] level should be such + that the peak speech level is between +/- 16384 and +/- 32767. + + The FDM modem signal mod_out[] is sampled at + freedv_get_modem_sample_rate() and is always exactly + freedv_get_n_nom_modem_samples() long. mod_out[] will be scaled + such that the peak level is just less than +/-32767. + + The FreeDV 1600/700C/700D/2020 waveforms have a crest factor of + around 10dB, similar to SSB. These modes are usually operated at a + "backoff" of 8dB. Adjust the power amplifier drive so that the + average power is 8dB less than the peak power of the PA. For + example, on a radio rated at 100W PEP for SSB, the average FreeDV + power is typically 20W. + + Caution - some PAs cannot handle a high continuous power. A + conservative level is 20W average for a 100W PEP rated PA. + + The FreeDV 2400A/800XA modes are constant amplitude, designed for + Class C PAs. They have a crest factor of 3dB. If using a SSB PA, + adjust the drive so you average power is within the limits of your PA + (e.g. 20W average for a 100W PA). + +\*---------------------------------------------------------------------------*/ + +/* real-valued short output */ + +void freedv_tx(struct freedv *f, short mod_out[], short speech_in[]) { + assert(f != NULL); + COMP tx_fdm[f->n_nom_modem_samples]; + int i; + assert((FDV_MODE_ACTIVE( FREEDV_MODE_1600, f->mode)) || (FDV_MODE_ACTIVE( FREEDV_MODE_700C, f->mode)) || + (FDV_MODE_ACTIVE( FREEDV_MODE_700D, f->mode)) || + (FDV_MODE_ACTIVE( FREEDV_MODE_2400A, f->mode)) || (FDV_MODE_ACTIVE( FREEDV_MODE_2400B, f->mode)) || + (FDV_MODE_ACTIVE( FREEDV_MODE_800XA, f->mode)) || (FDV_MODE_ACTIVE( FREEDV_MODE_2020, f->mode))); + + /* FSK and MEFSK/FMFSK modems work only on real samples. It's simpler to just + * stick them in the real sample tx/rx functions than to add a comp->real converter + * to comptx */ + + if ((FDV_MODE_ACTIVE( FREEDV_MODE_2400A, f->mode)) || (FDV_MODE_ACTIVE( FREEDV_MODE_2400B, f->mode)) || (FDV_MODE_ACTIVE( FREEDV_MODE_800XA, f->mode))){ + /* 800XA has two codec frames per modem frame */ + if(FDV_MODE_ACTIVE( FREEDV_MODE_800XA, f->mode)){ + codec2_encode(f->codec2, &f->tx_payload_bits[0], &speech_in[ 0]); + codec2_encode(f->codec2, &f->tx_payload_bits[4], &speech_in[320]); + }else{ + codec2_encode(f->codec2, f->tx_payload_bits, speech_in); + } + freedv_tx_fsk_voice(f, mod_out); + } else { + freedv_comptx(f, tx_fdm, speech_in); + for(i=0; in_nom_modem_samples; i++) + mod_out[i] = tx_fdm[i].real; + } +} + + +/* complex float output samples version */ + +void freedv_comptx(struct freedv *f, COMP mod_out[], short speech_in[]) { + assert(f != NULL); + + assert((FDV_MODE_ACTIVE( FREEDV_MODE_1600, f->mode)) || (FDV_MODE_ACTIVE( FREEDV_MODE_700C, f->mode)) || + (FDV_MODE_ACTIVE( FREEDV_MODE_2400A, f->mode)) || (FDV_MODE_ACTIVE( FREEDV_MODE_2400B, f->mode)) || + (FDV_MODE_ACTIVE( FREEDV_MODE_700D, f->mode)) || (FDV_MODE_ACTIVE( FREEDV_MODE_2020, f->mode))); + + if (FDV_MODE_ACTIVE( FREEDV_MODE_1600, f->mode)) { + codec2_encode_upacked(f, f->tx_payload_bits, speech_in); + freedv_comptx_fdmdv_1600(f, mod_out); + } + + /* all these modes need to pack a bunch of codec frames into one modem frame ... */ + + if (FDV_MODE_ACTIVE( FREEDV_MODE_700C, f->mode)) { + for (int j=0; jn_codec_frames; j++) { + codec2_encode_upacked(f, f->tx_payload_bits+j*f->bits_per_codec_frame, speech_in); + speech_in += codec2_samples_per_frame(f->codec2); + } + freedv_comptx_700c(f, mod_out); + } + + if (FDV_MODE_ACTIVE( FREEDV_MODE_700D, f->mode)) { + + /* buffer up bits until we get enough encoded bits for interleaver */ + + for (int j=0; jn_codec_frames; j++) { + int offset = (f->modem_frame_count_tx*f->n_codec_frames + j)*f->bits_per_codec_frame; + codec2_encode_upacked(f, f->tx_payload_bits + offset, speech_in); + speech_in += codec2_samples_per_frame(f->codec2); + } + + freedv_comptx_700d(f, mod_out); + } + +#ifdef __LPCNET__ + if (FDV_MODE_ACTIVE( FREEDV_MODE_2020, f->mode)) { + + /* buffer up bits until we get enough encoded bits for interleaver */ + + for (int j=0; jn_codec_frames; j++) { + int offset = (f->modem_frame_count_tx*f->n_codec_frames + j)*f->bits_per_codec_frame; + lpcnet_enc(f->lpcnet, speech_in, (char*)f->tx_payload_bits + offset); + speech_in += lpcnet_samples_per_frame(f->lpcnet); + } + + freedv_comptx_2020(f, mod_out); + } +#endif + + /* 2400 A and B are handled by the real-mode TX */ + if(FDV_MODE_ACTIVE( FREEDV_MODE_2400A, f->mode) || FDV_MODE_ACTIVE( FREEDV_MODE_2400B, f->mode)){ + codec2_encode(f->codec2, f->tx_payload_bits, speech_in); + freedv_comptx_fsk_voice(f, mod_out); + } +} + + +/* pack bits */ +void freedv_pack(uint8_t *bytes, uint8_t *bits, int nbits) { + memset(bytes, 0, (nbits+7)/8); + int bit = 7, byte = 0; + for(int i=0; i> bit) & 0x1; + bit--; + if (bit < 0) { + bit = 7; + byte++; + } + } +} + +/* send raw frames of bytes, or speech data that was compressed externally, complex float output */ +void freedv_rawdatacomptx(struct freedv *f, COMP mod_out[], unsigned char *packed_payload_bits) { + assert(f != NULL); + + freedv_unpack(f->tx_payload_bits, packed_payload_bits, f->bits_per_modem_frame); + + if (FDV_MODE_ACTIVE( FREEDV_MODE_1600, f->mode)) freedv_comptx_fdmdv_1600(f, mod_out); + if (FDV_MODE_ACTIVE( FREEDV_MODE_700C, f->mode)) freedv_comptx_700c(f, mod_out); + if (FDV_MODE_ACTIVE( FREEDV_MODE_700D, f->mode)) freedv_comptx_700d(f, mod_out); + + if (FDV_MODE_ACTIVE( FREEDV_MODE_FSK_LDPC, f->mode)) { + freedv_tx_fsk_ldpc_data(f, mod_out); + } +} + + +/* send raw frames of bytes, or speech data that was compressed externally, real short output */ +void freedv_rawdatatx(struct freedv *f, short mod_out[], unsigned char *packed_payload_bits) { + assert(f != NULL); + COMP mod_out_comp[f->n_nom_modem_samples]; + + /* Some FSK modes used packed bits, and coincidentally support real samples natively */ + if(FDV_MODE_ACTIVE( FREEDV_MODE_2400A, f->mode) || FDV_MODE_ACTIVE( FREEDV_MODE_2400B, f->mode) || + FDV_MODE_ACTIVE( FREEDV_MODE_800XA, f->mode) ) { + freedv_codec_frames_from_rawdata(f, f->tx_payload_bits, packed_payload_bits); + freedv_tx_fsk_voice(f, mod_out); + return; /* output is already real */ + } + + freedv_rawdatacomptx(f, mod_out_comp, packed_payload_bits); + + /* convert complex to real */ + for(int i=0; in_nom_modem_samples; i++) + mod_out[i] = mod_out_comp[i].real; +} + +int freedv_rawdatapreamblecomptx(struct freedv *f, COMP mod_out[]) { + assert(f != NULL); + assert(f->mode == FREEDV_MODE_FSK_LDPC); + struct FSK *fsk = f->fsk; + + int npreamble_symbols = 50*(fsk->mode>>1); + int npreamble_bits = npreamble_symbols*(fsk->mode>>1); + int npreamble_samples = fsk->Ts*npreamble_symbols; + //fprintf(stderr, "npreamble_symbols: %d npreamble_bits: %d npreamble_samples: %d Nbits: %d N: %d\n", + //npreamble_symbols, npreamble_bits, npreamble_samples, fsk->Nbits, fsk->N); + + assert(npreamble_samples < f->n_nom_modem_samples); /* caller probably using an array of this size */ + freedv_tx_fsk_ldpc_data_preamble(f, mod_out, npreamble_bits, npreamble_samples); + + return npreamble_samples; +} + +int freedv_rawdatapreambletx(struct freedv *f, short mod_out[]) { + assert(f != NULL); + COMP mod_out_comp[f->n_nom_modem_samples]; + + int npreamble_samples = freedv_rawdatapreamblecomptx(f, mod_out_comp); + + /* convert complex to real */ + for(int i=0; imode) || FDV_MODE_ACTIVE( FREEDV_MODE_2400B, f->mode) || FDV_MODE_ACTIVE( FREEDV_MODE_800XA, f->mode)) { + freedv_tx_fsk_data(f, mod_out); + } +} + + +/* VHF packet data: returns how many tx frames are queued up but not sent yet */ +int freedv_data_ntxframes (struct freedv *f) { + assert(f != NULL); + if (FDV_MODE_ACTIVE( FREEDV_MODE_2400A, f->mode) || FDV_MODE_ACTIVE( FREEDV_MODE_2400B, f->mode)) { + if (f->deframer->fdc) + return freedv_data_get_n_tx_frames(f->deframer->fdc, 8); + } else if (FDV_MODE_ACTIVE( FREEDV_MODE_800XA, f->mode)) { + if (f->deframer->fdc) + return freedv_data_get_n_tx_frames(f->deframer->fdc, 6); + } + return 0; +} + +int freedv_nin(struct freedv *f) { + if (FDV_MODE_ACTIVE( FREEDV_MODE_700C, f->mode)) + // For mode 700C, the input rate is 8000 sps, but the modem rate is 7500 sps + // For mode 700C, we request a larger number of Rx samples that will be decimated to f->nin samples + return (16 * f->nin + f->ptFilter8000to7500->decim_index) / 15; + else + return f->nin; +} + +int freedv_codec_frames_from_rawdata(struct freedv *f, unsigned char *codec_frames, unsigned char *rawdata) +{ + int cbit = 7; + int cbyte = 0; + int rbit = 7; + int rbyte = 0; + int modem_bits = freedv_get_bits_per_modem_frame(f); + int codec_bits = freedv_get_bits_per_codec_frame(f); + int nr_cbits = 0; + int i; + + codec_frames[0] = 0; + for (i = 0; i < modem_bits; i++) { + codec_frames[cbyte] |= ((rawdata[rbyte] >> rbit) & 1) << cbit; + + rbit--; + if (rbit < 0) { + rbit = 7; + rbyte++; + } + + cbit--; + if (cbit < 0) { + cbit = 7; + cbyte++; + codec_frames[cbyte] = 0; + } + nr_cbits++; + if (nr_cbits == codec_bits) { + if (cbit) { + cbyte++; + codec_frames[cbyte] = 0; + } + cbit = 7; + nr_cbits = 0; + } + } + return f->n_codec_frames; +} + +int freedv_rawdata_from_codec_frames(struct freedv *f, unsigned char *rawdata, unsigned char *codec_frames) +{ + int cbit = 7; + int cbyte = 0; + int rbit = 7; + int rbyte = 0; + int modem_bits = freedv_get_bits_per_modem_frame(f); + int codec_bits = freedv_get_bits_per_codec_frame(f); + int nr_cbits = 0; + int i; + + rawdata[rbyte] = 0; + for (i = 0; i < modem_bits; i++) { + rawdata[rbyte] |= ((codec_frames[cbyte] >> cbit) & 1) << rbit; + + rbit--; + if (rbit < 0) { + rbit = 7; + rbyte++; + rawdata[rbyte] = 0; + } + + cbit--; + if (cbit < 0) { + cbit = 7; + cbyte++; + } + + nr_cbits++; + if (nr_cbits == codec_bits) { + if (cbit) + cbyte++; + cbit = 7; + nr_cbits = 0; + } + } + return f->n_codec_frames; +} + + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: freedv_rx + AUTHOR......: David Rowe + DATE CREATED: 3 August 2014 + + Takes samples from the radio receiver, demodulates and FEC decodes + them, producing a frame of decoded speech samples. See freedv_rx.c + for an example. + + demod_in[] is a block of received samples sampled at + freedv_get_modem_sample_rate(). To account for difference in the + transmit and receive sample clock frequencies, the number of + demod_in[] samples is time varying. You MUST call freedv_nin() + BEFORE EACH call to freedv_rx() and pass exactly that many samples + to this function: + + short demod_in[freedv_get_n_max_modem_samples(f)]; + short speech_out[freedv_get_n_max_speech_samples(f)]; + + nin = freedv_nin(f); + while(fread(demod_in, sizeof(short), nin, fin) == nin) { + nout = freedv_rx(f, speech_out, demod_in); + fwrite(speech_out, sizeof(short), nout, fout); + nin = freedv_nin(f); + } + + To help set your buffer sizes, The maximum value of freedv_nin() is + freedv_get_n_max_modem_samples(). + + freedv_rx() returns the number of output speech samples available in + speech_out[], which is sampled at freedv_get_speech_sample_rate(f). + You should ALWAYS check the return value of freedv_rx(), and read + EXACTLY that number of speech samples from speech_out[]. + + Not every call to freedv_rx will return speech samples; in some + modes several modem frames are processed before speech samples are + returned. When squelch is active, zero samples may be returned. + + 1600 and 700D mode: When out of sync, the number of output speech + samples returned will be freedv_nin(). When in sync to a valid + FreeDV 1600 signal, the number of output speech samples will + alternate between freedv_get_n_speech_samples() and 0. + + The peak level of demod_in[] is not critical, as the demod works + well over a wide range of amplitude scaling. However avoid clipping + (overload, or samples pinned to +/- 32767). speech_out[] will peak + at just less than +/-32767. + + When squelch is disabled, this function echoes the demod_in[] + samples to speech_out[]. This allows the user to listen to the + channel, which is useful for tuning FreeDV signals or reception of + non-FreeDV signals. + +\*---------------------------------------------------------------------------*/ + +int freedv_rx(struct freedv *f, short speech_out[], short demod_in[]) { + assert(f != NULL); + int i; + int nin = freedv_nin(f); + f->nin_prev = nin; + + assert(nin <= f->n_max_modem_samples); + + /* FSK RX happens in real floats, so convert to those and call their demod here */ + if( (FDV_MODE_ACTIVE( FREEDV_MODE_2400A, f->mode)) || (FDV_MODE_ACTIVE( FREEDV_MODE_2400B, f->mode)) || (FDV_MODE_ACTIVE( FREEDV_MODE_800XA, f->mode)) ){ + float rx_float[f->n_max_modem_samples]; + for(i=0; imode)) || (FDV_MODE_ACTIVE( FREEDV_MODE_700C, f->mode)) + || (FDV_MODE_ACTIVE( FREEDV_MODE_2020, f->mode))) { + + float gain = 1.0f; + + assert(nin <= f->n_max_modem_samples); + COMP rx_fdm[f->n_max_modem_samples]; + + for(i=0; imode)) { + float gain = 2.0f; /* keep levels the same as Octave simulations and C unit tests for real signals */ + return freedv_shortrx(f, speech_out, demod_in, gain); + } + + assert(1); /* should never get here */ + return 0; +} + +/* complex sample input version from the radio */ + +int freedv_comprx(struct freedv *f, short speech_out[], COMP demod_in[]) { + assert(f != NULL); + assert(f->nin <= f->n_max_modem_samples); + int rx_status = 0; + f->nin_prev = freedv_nin(f); + + if (FDV_MODE_ACTIVE( FREEDV_MODE_1600, f->mode)) { + rx_status = freedv_comprx_fdmdv_1600(f, demod_in); + } + if (FDV_MODE_ACTIVE( FREEDV_MODE_700C, f->mode)) { + rx_status = freedv_comprx_700c(f, demod_in); + } + + if( (FDV_MODE_ACTIVE( FREEDV_MODE_2400A, f->mode)) || (FDV_MODE_ACTIVE( FREEDV_MODE_2400B, f->mode)) || (FDV_MODE_ACTIVE( FREEDV_MODE_800XA, f->mode))) { + rx_status = freedv_comprx_fsk(f, demod_in); + } + + if (FDV_MODE_ACTIVE( FREEDV_MODE_700D, f->mode)) { + rx_status = freedv_comp_short_rx_700d(f, (void*)demod_in, 0, 2.0f); // was 1.0 ?? + } + + if (FDV_MODE_ACTIVE( FREEDV_MODE_2020, f->mode)) { +#ifdef __LPCNET__ + rx_status = freedv_comprx_2020(f, demod_in); +#endif + } + + short demod_in_short[f->nin_prev]; + + for(int i=0; inin_prev; i++) + demod_in_short[i] = demod_in[i].real; + + return freedv_bits_to_speech(f, speech_out, demod_in_short, rx_status); +} + +/* memory efficient real short version - just for 700D on the SM1000 */ + +int freedv_shortrx(struct freedv *f, short speech_out[], short demod_in[], float gain) { + assert(f != NULL); + int rx_status; + f->nin_prev = f->nin; + + // At this stage short interface only supported for 700D, to help + // memory requirements on stm32 + assert(f->mode == FREEDV_MODE_700D); + assert(f->nin <= f->n_max_modem_samples); + + if (FDV_MODE_ACTIVE( FREEDV_MODE_700D, f->mode)) { + rx_status = freedv_comp_short_rx_700d(f, (void*)demod_in, 1, gain); + } + + return freedv_bits_to_speech(f, speech_out, demod_in, rx_status); +} + + +/* helper function, unpacked bits are much easier to work with inside the modem */ + +static void codec2_decode_upacked(struct freedv *f, short speech_out[], uint8_t unpacked_bits[]) { + int n_packed = (f->bits_per_codec_frame + 7) / 8; + uint8_t packed_codec_bits[n_packed]; + + freedv_pack(packed_codec_bits, unpacked_bits, f->bits_per_codec_frame); + codec2_decode(f->codec2, speech_out, packed_codec_bits); +} + + +/*---------------------------------------------------------------------------* \ + + FUNCTION....: freedv_rx_bits_to_speech + AUTHOR......: David Rowe + DATE CREATED: May 2020 + + The *_rx functions takes off air samples, demodulate and (for some + modes) FEC decode, giving us a frame of bits. + + This function captures a lot of tricky logic that has been distilled + through experience: + + There may not be a frame of bits returned on every call freedv_*rx* call. + When there are valid bits we need to run the speech decoder. + We may not have demod sync, so various pass through options may happen + with the input samples. + We may squelch based on SNR. + Need to handle various codecs, and varying number of codec frames per modem frame + Squelch audio if test frames are being sent + Determine how many speech samples to return, which will vary if in sync/out of sync + Work with real and complex inputs (complex wrapper) + Attenuate audio on pass through + Deal with 700D first frame burble, and different sync states from OFDM modes like 700D + Output no samples if squelched, we assume it's OK for the audio sink to run dry + A FIFO required on output to smooth sample flow to audio sink + Don't decode when we are sending test frames + +\*---------------------------------------------------------------------------*/ + +int freedv_bits_to_speech(struct freedv *f, short speech_out[], short demod_in[], int rx_status) { + int nout = 0; + int decode_speech = 0; + + if ((rx_status & RX_SYNC) == 0) { + + if (f->squelch_en == 0) { + + /* attenuate audio 12dB bit as channel noise isn't that pleasant */ + float passthrough_gain = 0.25; + + /* pass through received samples so we can hear what's going on, e.g. during tuning */ + + if (f->mode == FREEDV_MODE_2020) { + /* 8kHz modem sample rate but 16 kHz speech sample + rate, so we need to resample */ + nout = 2*f->nin_prev; + assert(nout <= freedv_get_n_max_speech_samples(f)); + float tmp[nout]; + for(int i=0; ipassthrough_2020[FDMDV_OS_TAPS_16K+i] = demod_in[i]; + fdmdv_8_to_16(tmp, &f->passthrough_2020[FDMDV_OS_TAPS_16K], nout/2); + for(int i=0; imodem_sample_rate / f-> speech_sample_rate; + nout = f->nin_prev / rate_factor; + for(int i=0; itest_frames) { + /* following logic is tricky so spell it out clearly, see table + in: https://github.com/drowe67/codec2/pull/111 */ + + if (f->squelch_en == 0) { + decode_speech = 1; + } else { + /* squelch is enabled */ + + /* anti-burble case - don't decode on trial sync unless the + frame has no bit errors. This prevents short lived trial + sync cases generating random bursts of audio */ + if (rx_status & RX_TRIAL_SYNC) { + if ((rx_status & RX_BIT_ERRORS) == 0) + decode_speech = 1; + } + else { + /* sync is solid - decode even through fades as there is still some speech info there */ + if (f->stats.snr_est > f->snr_squelch_thresh) + decode_speech = 1; + } + } + } + + if (decode_speech) { + if(FDV_MODE_ACTIVE( FREEDV_MODE_2020, f->mode)) { +#ifdef __LPCNET__ + /* LPCNet decoder */ + + int bits_per_codec_frame = lpcnet_bits_per_frame(f->lpcnet); + int data_bits_per_frame = f->ldpc->data_bits_per_frame; + int frames = data_bits_per_frame/bits_per_codec_frame; + + nout = f->n_speech_samples; + for (int i = 0; i < frames; i++) { + lpcnet_dec(f->lpcnet, (char*) f->rx_payload_bits + (i + frames * f->modem_frame_count_rx) * bits_per_codec_frame, speech_out); + speech_out += lpcnet_samples_per_frame(f->lpcnet); + } + f->modem_frame_count_rx++; +#endif + } else { + /* codec 2 decoder */ + + if(FDV_MODE_ACTIVE( FREEDV_MODE_700D, f->mode)) { + nout = f->n_speech_samples; + for (int i = 0; i < f->n_codec_frames; i++) { + codec2_decode_upacked(f, speech_out, f->rx_payload_bits + (i + f->n_codec_frames * f->modem_frame_count_rx) * f->bits_per_codec_frame); + speech_out += codec2_samples_per_frame(f->codec2); + } + f->modem_frame_count_rx++; + } else { + /* non-interleaved Codec 2 modes */ + + nout = f->n_speech_samples; + if ( (FDV_MODE_ACTIVE( FREEDV_MODE_2400A, f->mode)) || (FDV_MODE_ACTIVE( FREEDV_MODE_2400B, f->mode))) + codec2_decode(f->codec2, speech_out, f->rx_payload_bits); + else if (FDV_MODE_ACTIVE( FREEDV_MODE_800XA, f->mode)) { + codec2_decode(f->codec2, &speech_out[ 0], &f->rx_payload_bits[0]); + codec2_decode(f->codec2, &speech_out[320], &f->rx_payload_bits[4]); + } else { + for (int i = 0; i n_codec_frames; i++) { + codec2_decode_upacked(f, speech_out, f->rx_payload_bits + i*f->bits_per_codec_frame); + speech_out += codec2_samples_per_frame(f->codec2); + } + } + } + } + } + + if (f->verbose == 2) { + fprintf(stderr, " sqen: %d nout: %d decsp: %d\n", f->squelch_en, nout, decode_speech); + } + + f->rx_status= rx_status; + assert(nout <= freedv_get_n_max_speech_samples(f)); + return nout; +} + + +/* a way to receive raw frames of bytes, or speech data that will be decompressed externally */ +int freedv_rawdatarx(struct freedv *f, unsigned char *packed_payload_bits, short demod_in[]) +{ + assert(f != NULL); + int nin = freedv_nin(f); + assert(nin <= f->n_max_modem_samples); + COMP demod_in_comp[f->n_max_modem_samples]; + + for(int i=0; imode) || FDV_MODE_ACTIVE( FREEDV_MODE_2400B, f->mode) || FDV_MODE_ACTIVE( FREEDV_MODE_800XA, f->mode)){ + rx_status = freedv_comprx_fsk(f, demod_in); + f->rx_status = rx_status; + if (rx_status & RX_BITS) { + ret = (freedv_get_bits_per_modem_frame(f) + 7) / 8; + freedv_rawdata_from_codec_frames(f, packed_payload_bits, f->rx_payload_bits); + } + return ret; + } + + if (FDV_MODE_ACTIVE( FREEDV_MODE_1600, f->mode)) rx_status = freedv_comprx_fdmdv_1600(f, demod_in); + if (FDV_MODE_ACTIVE( FREEDV_MODE_700C, f->mode)) rx_status = freedv_comprx_700c(f, demod_in); + if (FDV_MODE_ACTIVE( FREEDV_MODE_700D, f->mode)) rx_status = freedv_comp_short_rx_700d(f, (void*)demod_in, 0, 1.0f); + if (FDV_MODE_ACTIVE( FREEDV_MODE_FSK_LDPC, f->mode)) { + rx_status = freedv_rx_fsk_ldpc_data(f, demod_in); + } + + if (rx_status & RX_BITS) { + ret = (f->bits_per_modem_frame+7)/8; + freedv_pack(packed_payload_bits, f->rx_payload_bits, f->bits_per_modem_frame); + } + + /* might want to check this for errors, e.g. if reliable data is important */ + f->rx_status= rx_status; + + return ret; +} + + +/*---------------------------------------------------------------------------* \ + + FUNCTION....: freedv_get_version + AUTHOR......: Jim Ahlstrom + DATE CREATED: 28 July 2015 + + Return the version of the FreeDV API. This is meant to help API + users determine when incompatible changes have occurred. + +\*---------------------------------------------------------------------------*/ + +int freedv_get_version(void) +{ + return VERSION; +} + +/*---------------------------------------------------------------------------* \ + + FUNCTION....: freedv_get_hash + AUTHOR......: David Rowe + DATE CREATED: July 2020 + + Return the a string with the Git hash of the repo used to build this code. + +\*---------------------------------------------------------------------------*/ + +static char git_hash[] = GIT_HASH; +char *freedv_get_hash(void) +{ + return git_hash; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: freedv_set_callback_txt + AUTHOR......: Jim Ahlstrom + DATE CREATED: 28 July 2015 + + Set the callback functions and the callback state pointer that will + be used for the aux txt channel. The freedv_callback_rx is a + function pointer that will be called to return received characters. + The freedv_callback_tx is a function pointer that will be called to + send transmitted characters. The callback state is a user-defined + void pointer that will be passed to the callback functions. Any or + all can be NULL, and the default is all NULL. + + The function signatures are: + void receive_char(void *callback_state, char c); + char transmit_char(void *callback_state); + +\*---------------------------------------------------------------------------*/ + +void freedv_set_callback_txt(struct freedv *f, freedv_callback_rx rx, freedv_callback_tx tx, void *state) +{ + if (FDV_MODE_ACTIVE( FREEDV_MODE_800XA, f->mode) == false) { + f->freedv_put_next_rx_char = rx; + f->freedv_get_next_tx_char = tx; + f->callback_state = state; + } +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: freedv_set_callback_protocol + AUTHOR......: Brady OBrien + DATE CREATED: 21 February 2016 + + VHF packet data function. + + Set the callback functions and callback pointer that will be used + for the protocol data channel. freedv_callback_protorx will be + called when a frame containing protocol data + arrives. freedv_callback_prototx will be called when a frame + containing protocol information is being generated. Protocol + information is intended to be used to develop protocols and fancy + features atop VHF freedv, much like those present in DMR. Protocol + bits are to be passed in an msb-first char array The number of + protocol bits are findable with freedv_get_protocol_bits + +\*---------------------------------------------------------------------------*/ + +void freedv_set_callback_protocol(struct freedv *f, freedv_callback_protorx rx, freedv_callback_prototx tx, void *callback_state){ + if (FDV_MODE_ACTIVE( FREEDV_MODE_800XA, f->mode) == false) { + f->freedv_put_next_proto = rx; + f->freedv_get_next_proto = tx; + f->proto_callback_state = callback_state; + } +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: freedv_set_callback_datarx / freedv_set_callback_datatx + AUTHOR......: Jeroen Vreeken + DATE CREATED: 04 March 2016 + + VHF packet data function. + + Set the callback functions and callback pointer that will be used + for the data channel. freedv_callback_datarx will be called when a + packet has been successfully received. freedv_callback_data_tx will + be called when transmission of a new packet can begin. If the + returned size of the datatx callback is zero the data frame is still + generated, but will contain only a header update. + +\*---------------------------------------------------------------------------*/ + +void freedv_set_callback_data(struct freedv *f, freedv_callback_datarx datarx, freedv_callback_datatx datatx, void *callback_state) { + if ((FDV_MODE_ACTIVE( FREEDV_MODE_2400A, f->mode)) || (FDV_MODE_ACTIVE( FREEDV_MODE_2400B, f->mode)) || (FDV_MODE_ACTIVE( FREEDV_MODE_800XA, f->mode))){ + if (!f->deframer->fdc) + f->deframer->fdc = freedv_data_channel_create(); + if (!f->deframer->fdc) + return; + + freedv_data_set_cb_rx(f->deframer->fdc, datarx, callback_state); + freedv_data_set_cb_tx(f->deframer->fdc, datatx, callback_state); + } +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: freedv_set_data_header + AUTHOR......: Jeroen Vreeken + DATE CREATED: 04 March 2016 + + VHF packet data function. + + Set the data header for the data channel. Header compression will + be used whenever packets from this header are sent. The header will + also be used for fill packets when a data frame is requested without + a packet available. + +\*---------------------------------------------------------------------------*/ + +void freedv_set_data_header(struct freedv *f, unsigned char *header) +{ + if ((FDV_MODE_ACTIVE( FREEDV_MODE_2400A, f->mode)) || (FDV_MODE_ACTIVE( FREEDV_MODE_2400B, f->mode)) || (FDV_MODE_ACTIVE( FREEDV_MODE_800XA, f->mode))){ + if (!f->deframer->fdc) + f->deframer->fdc = freedv_data_channel_create(); + if (!f->deframer->fdc) + return; + + freedv_data_set_header(f->deframer->fdc, header); + } +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: freedv_get_modem_stats + AUTHOR......: Jim Ahlstrom + DATE CREATED: 28 July 2015 + + Return data from the modem. The arguments are pointers to the data + items. The pointers can be NULL if the data item is not wanted. + +\*---------------------------------------------------------------------------*/ + +void freedv_get_modem_stats(struct freedv *f, int *sync, float *snr_est) +{ + if (FDV_MODE_ACTIVE( FREEDV_MODE_1600, f->mode)) + fdmdv_get_demod_stats(f->fdmdv, &f->stats); + if (FDV_MODE_ACTIVE( FREEDV_MODE_700C, f->mode)) + cohpsk_get_demod_stats(f->cohpsk, &f->stats); + if (FDV_MODE_ACTIVE( FREEDV_MODE_700D, f->mode) || FDV_MODE_ACTIVE( FREEDV_MODE_2020, f->mode)) { + ofdm_get_demod_stats(f->ofdm, &f->stats); + } + if (FDV_MODE_ACTIVE( FREEDV_MODE_2400B, f->mode)) { + fmfsk_get_demod_stats(f->fmfsk, &f->stats); + } + if (sync) *sync = f->stats.sync; + if (snr_est) *snr_est = f->stats.snr_est; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTIONS...: freedv_set_* + AUTHOR......: Jim Ahlstrom + DATE CREATED: 28 July 2015 + + Set some parameters used by FreeDV. It is possible to write a macro + using ## for this, but I wasn't sure it would be 100% portable. + +\*---------------------------------------------------------------------------*/ + +void freedv_set_test_frames (struct freedv *f, int val) {f->test_frames = val;} +void freedv_set_test_frames_diversity (struct freedv *f, int val) {f->test_frames_diversity = val;} +void freedv_set_squelch_en (struct freedv *f, int val) {f->squelch_en = val;} +void freedv_set_total_bit_errors (struct freedv *f, int val) {f->total_bit_errors = val;} +void freedv_set_total_bits (struct freedv *f, int val) {f->total_bits = val;} +void freedv_set_total_bit_errors_coded (struct freedv *f, int val) {f->total_bit_errors_coded = val;} +void freedv_set_total_bits_coded (struct freedv *f, int val) {f->total_bits_coded = val;} +void freedv_set_clip (struct freedv *f, int val) {f->clip = val;} +void freedv_set_varicode_code_num (struct freedv *f, int val) {varicode_set_code_num(&f->varicode_dec_states, val);} +void freedv_set_ext_vco (struct freedv *f, int val) {f->ext_vco = val;} +void freedv_set_snr_squelch_thresh (struct freedv *f, float val) {f->snr_squelch_thresh = val;} +void freedv_set_tx_amp (struct freedv *f, float amp) {f->tx_amp = amp;} + +/* Band Pass Filter to cleanup OFDM tx waveform, only supported by FreeDV 700D */ + +void freedv_set_tx_bpf(struct freedv *f, int val) { + if (FDV_MODE_ACTIVE( FREEDV_MODE_700D, f->mode)) { + ofdm_set_tx_bpf(f->ofdm, val); + } +} + +/* DPSK option for OFDM modem, useful for high SNR, fast fading */ + +void freedv_set_dpsk(struct freedv *f, int val) { + if (FDV_MODE_ACTIVE( FREEDV_MODE_700D, f->mode) || FDV_MODE_ACTIVE( FREEDV_MODE_2020, f->mode)) { + ofdm_set_dpsk(f->ofdm, val); + } +} + +void freedv_set_phase_est_bandwidth_mode(struct freedv *f, int val) { + if (FDV_MODE_ACTIVE( FREEDV_MODE_700D, f->mode) || FDV_MODE_ACTIVE( FREEDV_MODE_2020, f->mode)) { + ofdm_set_phase_est_bandwidth_mode(f->ofdm, val); + } +} + +void freedv_set_eq(struct freedv *f, int val) { + if (FDV_MODE_ACTIVE( FREEDV_MODE_700C, f->mode) || FDV_MODE_ACTIVE( FREEDV_MODE_700D, f->mode)) { + codec2_700c_eq(f->codec2, val); + } +} + +void freedv_set_verbose(struct freedv *f, int verbosity) { + f->verbose = verbosity; + if (FDV_MODE_ACTIVE( FREEDV_MODE_700C, f->mode)) { + cohpsk_set_verbose(f->cohpsk, f->verbose); + } + if (FDV_MODE_ACTIVE( FREEDV_MODE_700D, f->mode)) { + ofdm_set_verbose(f->ofdm, f->verbose); + } +} + +void freedv_set_callback_error_pattern(struct freedv *f, freedv_calback_error_pattern cb, void *state) +{ + f->freedv_put_error_pattern = cb; + f->error_pattern_callback_state = state; +} + +void freedv_set_carrier_ampl(struct freedv *f, int c, float ampl) { + assert(FDV_MODE_ACTIVE( FREEDV_MODE_700C, f->mode)); + cohpsk_set_carrier_ampl(f->cohpsk, c, ampl); +} + + +/*---------------------------------------------------------------------------* \ + + FUNCTIONS...: freedv_set_sync + AUTHOR......: David Rowe + DATE CREATED: May 2018 + + Extended control of sync state machines, especially for FreeDV 700D. + This mode is required to acquire sync up at very low SNRS. This is + difficult to implement, for example we may get a false sync, or the + state machine may fall out of sync by mistake during a long fade. + + So with this API call we allow some operator assistance. + + Ensure this is called in the same thread as freedv_rx(). + +\*---------------------------------------------------------------------------*/ + +void freedv_set_sync(struct freedv *freedv, int sync_cmd) { + assert (freedv != NULL); + + if (FDV_MODE_ACTIVE( FREEDV_MODE_700D, freedv->mode) || FDV_MODE_ACTIVE( FREEDV_MODE_2020, freedv->mode)) { + ofdm_set_sync(freedv->ofdm, sync_cmd); + } +} + +struct FSK * freedv_get_fsk(struct freedv *f){ + return f->fsk; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTIONS...: freedv_get_* + AUTHOR......: Jim Ahlstrom + DATE CREATED: 28 July 2015 + + Get some parameters from FreeDV. + +\*---------------------------------------------------------------------------*/ + +int freedv_get_protocol_bits (struct freedv *f) {return f->n_protocol_bits;} +int freedv_get_mode (struct freedv *f) {return f->mode;} +int freedv_get_test_frames (struct freedv *f) {return f->test_frames;} +int freedv_get_speech_sample_rate (struct freedv *f) {return f-> speech_sample_rate;} +int freedv_get_n_speech_samples (struct freedv *f) {return f->n_speech_samples;} +int freedv_get_modem_sample_rate (struct freedv *f) {return f->modem_sample_rate;} +int freedv_get_modem_symbol_rate (struct freedv *f) {return f->modem_symbol_rate;} +int freedv_get_n_max_modem_samples (struct freedv *f) {return f->n_max_modem_samples;} +int freedv_get_n_nom_modem_samples (struct freedv *f) {return f->n_nom_modem_samples;} +int freedv_get_total_bits (struct freedv *f) {return f->total_bits;} +int freedv_get_total_bit_errors (struct freedv *f) {return f->total_bit_errors;} +int freedv_get_total_bits_coded (struct freedv *f) {return f->total_bits_coded;} +int freedv_get_total_bit_errors_coded (struct freedv *f) {return f->total_bit_errors_coded;} +int freedv_get_sync (struct freedv *f) {return f->stats.sync;} +struct CODEC2 *freedv_get_codec2 (struct freedv *f){return f->codec2;} +int freedv_get_bits_per_codec_frame (struct freedv *f){return f->bits_per_codec_frame;} +int freedv_get_bits_per_modem_frame (struct freedv *f){return f->bits_per_modem_frame;} +int freedv_get_rx_bits (struct freedv *f) {return f->rx_status & RX_BITS;} + +int freedv_get_n_max_speech_samples(struct freedv *f) { + /* When "passing through" demod samples to the speech output + (e.g. no sync and squelch off) f->nin bounces around with + timing variations. So is is possible we may return + freedv_get_n_max_modem_samples() via the speech_output[] + array */ + if (freedv_get_n_max_modem_samples(f) > f->n_speech_samples) + return freedv_get_n_max_modem_samples(f); + else + return f->n_speech_samples; +} + +// Now dummy obsolete call +int freedv_get_sync_interleaver(struct freedv *f) { + return 1; +} + +int freedv_get_sz_error_pattern(struct freedv *f) +{ + if (FDV_MODE_ACTIVE( FREEDV_MODE_700C, f->mode)) { + /* if diversity disabled callback sends error pattern for upper and lower carriers */ + return f->sz_error_pattern * (2 - f->test_frames_diversity); + } else { + return f->sz_error_pattern; + } +} + +// Get modem status, scatter/eye diagram for plotting, other goodies +void freedv_get_modem_extended_stats(struct freedv *f, struct MODEM_STATS *stats) +{ + if (FDV_MODE_ACTIVE( FREEDV_MODE_1600, f->mode)) + fdmdv_get_demod_stats(f->fdmdv, stats); + + if (FDV_MODE_ACTIVE( FREEDV_MODE_2400A, f->mode) || FDV_MODE_ACTIVE( FREEDV_MODE_800XA, f->mode)) { + fsk_get_demod_stats(f->fsk, stats); + float EbNodB = stats->snr_est; /* fsk demod actually estimates Eb/No */ + stats->snr_est = EbNodB + 10.0f*log10f(800.0f/3000.0f); /* so convert to SNR Rb=800, noise B=3000 */ + } + + if (FDV_MODE_ACTIVE( FREEDV_MODE_2400B, f->mode)) { + fmfsk_get_demod_stats(f->fmfsk, stats); + } + + if (FDV_MODE_ACTIVE( FREEDV_MODE_700C, f->mode)) { + cohpsk_get_demod_stats(f->cohpsk, stats); + } + + if (FDV_MODE_ACTIVE( FREEDV_MODE_700D, f->mode) || FDV_MODE_ACTIVE( FREEDV_MODE_2020, f->mode)) { + ofdm_get_demod_stats(f->ofdm, stats); + } +} + +// from http://stackoverflow.com/questions/10564491/function-to-calculate-a-crc16-checksum + +unsigned short freedv_gen_crc16(unsigned char* data_p, int length) { + unsigned char x; + unsigned short crc = 0xFFFF; + + while (length--) { + x = crc >> 8 ^ *data_p++; + x ^= x>>4; + crc = (crc << 8) ^ ((unsigned short)(x << 12)) ^ ((unsigned short)(x <<5)) ^ ((unsigned short)x); + } + + return crc; +} diff --git a/libcodec2-android/src/codec2/src/freedv_api.h b/libcodec2-android/src/codec2/src/freedv_api.h new file mode 100644 index 0000000..153a763 --- /dev/null +++ b/libcodec2-android/src/codec2/src/freedv_api.h @@ -0,0 +1,250 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: freedv_api.h + AUTHOR......: David Rowe + DATE CREATED: August 2014 + + Library of API functions that implement FreeDV "modes", useful for + embedding FreeDV in other programs. Please see: + + 1. README_freedv.md + 2. Notes function use in freedv_api.c + 3. The sample freedv_tx.c and freedv_rx.c programs + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2014 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#ifndef __FREEDV_API__ +#define __FREEDV_API__ + +// This declares a single-precision (float) complex number +#include + +#include "comp.h" + +#ifdef __cplusplus + extern "C" { +#endif + +// available speech modes +#define FREEDV_MODE_1600 0 +#define FREEDV_MODE_2400A 3 +#define FREEDV_MODE_2400B 4 +#define FREEDV_MODE_800XA 5 +#define FREEDV_MODE_700C 6 +#define FREEDV_MODE_700D 7 +#define FREEDV_MODE_2020 8 + +// available data modes +#define FREEDV_MODE_FSK_LDPC 9 + +// Sample rates used +#define FREEDV_FS_8000 8000 +#define FREEDV_FS_16000 16000 + +#ifndef FREEDV_MODE_EN_DEFAULT +#define FREEDV_MODE_EN_DEFAULT 1 +#endif + +// By default we enable all modes. Disable during compile time e.g +// -DFREEDV_MODE_1600_EN=0 will enable all but FreeDV 1600. Or the +// other way round -DFREEDV_MODE_EN_DEFAULT=0 -DFREEDV_MODE_1600_EN=1 +// will enable only FreeDV 1600 + +#if !defined(FREEDV_MODE_1600_EN) + #define FREEDV_MODE_1600_EN FREEDV_MODE_EN_DEFAULT +#endif +#if !defined(FREEDV_MODE_700C_EN) + #define FREEDV_MODE_700C_EN FREEDV_MODE_EN_DEFAULT +#endif +#if !defined(FREEDV_MODE_700D_EN) + #define FREEDV_MODE_700D_EN FREEDV_MODE_EN_DEFAULT +#endif +#if !defined(FREEDV_MODE_2400A_EN) + #define FREEDV_MODE_2400A_EN FREEDV_MODE_EN_DEFAULT +#endif +#if !defined(FREEDV_MODE_2400B_EN) + #define FREEDV_MODE_2400B_EN FREEDV_MODE_EN_DEFAULT +#endif +#if !defined(FREEDV_MODE_800XA_EN) + #define FREEDV_MODE_800XA_EN FREEDV_MODE_EN_DEFAULT +#endif +#if !defined(FREEDV_MODE_2020_EN) + #define FREEDV_MODE_2020_EN FREEDV_MODE_EN_DEFAULT +#endif +#if !defined(FREEDV_MODE_FSK_LDPC_EN) + #define FREEDV_MODE_FSK_LDPC_EN FREEDV_MODE_EN_DEFAULT +#endif + +#define FDV_MODE_ACTIVE(mode_name, var) ((mode_name##_EN) == 0 ? 0: (var) == mode_name) + +// optional operator control of 700D state machine +#define FREEDV_SYNC_UNSYNC 0 // force sync state machine to lose sync, and search for new sync +#define FREEDV_SYNC_AUTO 1 // falls out of sync automatically +#define FREEDV_SYNC_MANUAL 2 // fall out of sync only under operator control + +// struct that hold state information for one freedv instance +struct freedv; + +// Some modes allow extra configuration parameters +struct freedv_advanced { + int interleave_frames; // currently ignored, was previously used to configure 700D interleaver + + // parameters for FREEDV_MODE_FSK_LDPC + int M; // 2 or 4 FSK + int Rs; // Symbol rate Hz + int Fs; // Sample rate Hz + int first_tone; // Freq of first tone Hz + int tone_spacing; // Spacing between tones Hz + char *codename; // LDPC codename, from codes listed in ldpc_codes.c +}; + +// Called when text message char is decoded +typedef void (*freedv_callback_rx)(void *, char); +// Called when new text message char is needed +typedef char (*freedv_callback_tx)(void *); +typedef void (*freedv_calback_error_pattern) + (void *error_pattern_callback_state, short error_pattern[], int sz_error_pattern); + +// Protocol bits are packed MSB-first +// Called when a frame containing protocol data is decoded +typedef void (*freedv_callback_protorx)(void *, char *); +// Called when a frame containing protocol data is to be sent +typedef void (*freedv_callback_prototx)(void *, char *); + +// Data packet callbacks +// Called when a packet has been received +typedef void (*freedv_callback_datarx)(void *, unsigned char *packet, size_t size); +// Called when a new packet can be send +typedef void (*freedv_callback_datatx)(void *, unsigned char *packet, size_t *size); + + +/*---------------------------------------------------------------------------*\ + + FreeDV API functions + +\*---------------------------------------------------------------------------*/ + +// open, close ---------------------------------------------------------------- + +struct freedv *freedv_open_advanced(int mode, struct freedv_advanced *adv); +struct freedv *freedv_open(int mode); +void freedv_close (struct freedv *freedv); + +// Transmit ------------------------------------------------------------------- + +void freedv_tx (struct freedv *freedv, short mod_out[], short speech_in[]); +void freedv_comptx (struct freedv *freedv, COMP mod_out[], short speech_in[]); +void freedv_datatx (struct freedv *f, short mod_out[]); +int freedv_data_ntxframes (struct freedv *freedv); +void freedv_rawdatatx (struct freedv *f, short mod_out[], unsigned char *packed_payload_bits); +void freedv_rawdatacomptx (struct freedv *f, COMP mod_out[], unsigned char *packed_payload_bits); +int freedv_rawdatapreambletx (struct freedv *f, short mod_out[]); +int freedv_rawdatapreamblecomptx (struct freedv *f, COMP mod_out[]); + +// Receive ------------------------------------------------------------------- + +int freedv_nin (struct freedv *freedv); +int freedv_rx (struct freedv *freedv, short speech_out[], short demod_in[]); +int freedv_shortrx (struct freedv *freedv, short speech_out[], short demod_in[], float gain); +int freedv_floatrx (struct freedv *freedv, short speech_out[], float demod_in[]); +int freedv_comprx (struct freedv *freedv, short speech_out[], COMP demod_in[]); +int freedv_rawdatarx (struct freedv *freedv, unsigned char *packed_payload_bits, short demod_in[]); +int freedv_rawdatacomprx (struct freedv *freedv, unsigned char *packed_payload_bits, COMP demod_in[]); + +// Helper functions ------------------------------------------------------------------- + +int freedv_codec_frames_from_rawdata(struct freedv *freedv, unsigned char *codec_frames, unsigned char *rawdata); +int freedv_rawdata_from_codec_frames(struct freedv *freedv, unsigned char *rawdata, unsigned char *codec_frames); +unsigned short freedv_gen_crc16(unsigned char* data_p, int length); +void freedv_pack(unsigned char *bytes, unsigned char *bits, int nbits); +void freedv_unpack(unsigned char *bits, unsigned char *bytes, int nbits); + +// Set parameters ------------------------------------------------------------ + +void freedv_set_callback_txt (struct freedv *freedv, freedv_callback_rx rx, freedv_callback_tx tx, void *callback_state); +void freedv_set_callback_protocol (struct freedv *freedv, freedv_callback_protorx rx, freedv_callback_prototx tx, void *callback_state); +void freedv_set_callback_data (struct freedv *freedv, freedv_callback_datarx datarx, freedv_callback_datatx datatx, void *callback_state); +void freedv_set_test_frames (struct freedv *freedv, int test_frames); +void freedv_set_test_frames_diversity (struct freedv *freedv, int test_frames_diversity); +void freedv_set_smooth_symbols (struct freedv *freedv, int smooth_symbols); +void freedv_set_squelch_en (struct freedv *freedv, int squelch_en); +void freedv_set_snr_squelch_thresh (struct freedv *freedv, float snr_squelch_thresh); +void freedv_set_clip (struct freedv *freedv, int val); +void freedv_set_total_bit_errors (struct freedv *freedv, int val); +void freedv_set_total_bits (struct freedv *freedv, int val); +void freedv_set_total_bit_errors_coded (struct freedv *freedv, int val); +void freedv_set_total_bits_coded (struct freedv *freedv, int val); +void freedv_set_callback_error_pattern (struct freedv *freedv, freedv_calback_error_pattern cb, void *state); +void freedv_set_varicode_code_num (struct freedv *freedv, int val); +void freedv_set_data_header (struct freedv *freedv, unsigned char *header); +void freedv_set_carrier_ampl (struct freedv *freedv, int c, float ampl); +void freedv_set_sync (struct freedv *freedv, int sync_cmd); +void freedv_set_verbose (struct freedv *freedv, int verbosity); +void freedv_set_tx_bpf (struct freedv *freedv, int val); +void freedv_set_tx_amp (struct freedv *freedv, float amp); +void freedv_set_dpsk (struct freedv *freedv, int val); +void freedv_set_ext_vco (struct freedv *f, int val); +void freedv_set_phase_est_bandwidth_mode(struct freedv *f, int val); +void freedv_set_eq (struct freedv *f, int val); + +// Get parameters ------------------------------------------------------------------------- + +struct MODEM_STATS; + +int freedv_get_version(void); +char *freedv_get_hash(void); +int freedv_get_mode (struct freedv *freedv); +void freedv_get_modem_stats (struct freedv *freedv, int *sync, float *snr_est); +void freedv_get_modem_extended_stats(struct freedv *freedv, struct MODEM_STATS *stats); +int freedv_get_test_frames (struct freedv *freedv); + +int freedv_get_speech_sample_rate (struct freedv *freedv); +int freedv_get_n_speech_samples (struct freedv *freedv); +int freedv_get_n_max_speech_samples (struct freedv *freedv); + +int freedv_get_modem_sample_rate (struct freedv *freedv); +int freedv_get_modem_symbol_rate (struct freedv *freedv); +int freedv_get_n_max_modem_samples (struct freedv *freedv); +int freedv_get_n_nom_modem_samples (struct freedv *freedv); + +// bit error rate stats +int freedv_get_total_bits (struct freedv *freedv); +int freedv_get_total_bit_errors (struct freedv *freedv); +int freedv_get_total_bits_coded (struct freedv *freedv); +int freedv_get_total_bit_errors_coded(struct freedv *freedv); +int freedv_get_rx_bits (struct freedv *freedv); + +int freedv_get_sync (struct freedv *freedv); +int freedv_get_sync_interleaver (struct freedv *freedv); + +// access to speech codec states +struct FSK * freedv_get_fsk (struct freedv *f); +struct CODEC2 *freedv_get_codec2 (struct freedv *freedv); + +int freedv_get_bits_per_codec_frame (struct freedv *freedv); +int freedv_get_bits_per_modem_frame (struct freedv *freedv); +int freedv_get_sz_error_pattern (struct freedv *freedv); +int freedv_get_protocol_bits (struct freedv *freedv); + +#ifdef __cplusplus +} +#endif + +#endif //__FREEDV_API__ diff --git a/libcodec2-android/src/codec2/src/freedv_api_internal.h b/libcodec2-android/src/codec2/src/freedv_api_internal.h new file mode 100644 index 0000000..8ca86d5 --- /dev/null +++ b/libcodec2-android/src/codec2/src/freedv_api_internal.h @@ -0,0 +1,234 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: freedv_api_internal.h + AUTHOR......: David Rowe + DATE CREATED: August 2014 + + This declares the structure freedv. A pointer to this structure is + returned by the FreeDV API freedv_open() function. The pointer is used + by the other FreeDV API functions declared in freedv_api.h. This + structure is intended to be internal to the FreeDV API. The public + functions are declared in freedv_api.h. Changes to this structure + are expected. Changes (except additions) to freedv_api.h are + discouraged. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2014 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#ifndef __FREEDV_API_INTERNAL__ +#define __FREEDV_API_INTERNAL__ + +#include "varicode.h" +#include "fsk.h" +#include "fmfsk.h" +#include "codec2_fdmdv.h" +#include "codec2_cohpsk.h" +#ifdef __LPCNET__ +#include "lpcnet_freedv.h" +#endif +#include "freedv_api.h" + +#ifdef __cplusplus + extern "C" { +#endif + +// Experimentally derived fudge factors to normalise Tx power across modes +#define NORM_PWR_COHPSK 1.74 +#define NORM_PWR_FSK 0.193 +#define NORM_PWR_OFDM 1.00 + +// identifiers for non Codec 2 Speech codecs, make sure no overlap with CODEC2_XXX modes +#define CODEC_MODE_LPCNET_1733 100 + +// Return code flags for freedv_*rx* functions +#define RX_TRIAL_SYNC 0x1 // demodulator has trial sync +#define RX_SYNC 0x2 // demodulator has sync +#define RX_BITS 0x4 // data bits have been returned +#define RX_BIT_ERRORS 0x8 // FEC may not have corrected all bit errors (not all parity checks OK) + +extern char *rx_sync_flags_to_text[]; // converts flags above to more meaningful text + +struct freedv { + int mode; + + // states for various modules we support + struct CODEC2 *codec2; + struct FDMDV *fdmdv; + struct COHPSK *cohpsk; + struct FSK *fsk; + struct FMFSK *fmfsk; + struct OFDM *ofdm; + struct LDPC *ldpc; + struct MODEM_STATS stats; +#ifdef __LPCNET__ + struct LPCNetFreeDV *lpcnet; +#endif + + struct freedv_vhf_deframer * deframer; // Extracts frames from VHF stream + + struct quisk_cfFilter * ptFilter7500to8000; // Filters to change to/from 7500 and 8000 sps for 700 .... 700C + struct quisk_cfFilter * ptFilter8000to7500; + + int n_speech_samples; // number of speech samples we need for each freedv_tx() call + // num of speech samples output by freedv_rx() call + int n_nom_modem_samples; // size of tx modem sample buffers + int n_max_modem_samples; // make your rx modem sample buffers this big + int n_nat_modem_samples; // tx modem sample block length as used by the modem before interpolation to output + // usually the same as n_nom_modem_samples, except for 700C + int modem_sample_rate; // Caller is responsible for meeting this + int modem_symbol_rate; // Useful for ext_vco operation on 2400A and 800XA + int speech_sample_rate; // 8 kHz or 16 kHz (high fidelity) + + int bits_per_codec_frame; // one of modem codec frames per modem frame + int bits_per_modem_frame; // number of modem payload bits in each modem frame (usually compressed speech) + int n_codec_frames; // number of codec frames in each modem frame + uint8_t *tx_payload_bits; // payload bits (usually compressed speech) for a modem frame ... + uint8_t *rx_payload_bits; // ... one bit per char for some modes, packed for others + + /* FDMDV buffers for FreeDV 1600 -------------------------------------------------------------*/ + + int *fdmdv_bits; + int *fdmdv_tx_bits; + int *fdmdv_rx_bits; + + /* test frame states -------------------------------------------------------------------------*/ + + int *ptest_bits_coh; + int *ptest_bits_coh_end; + + int test_frames; // set this baby for 1 to tx/rx test frames to look at bit error stats + int test_frames_diversity; // 1 -> used combined carriers for error counting on 700 waveforms + int test_frame_sync_state; + int test_frame_sync_state_upper; // when test_frames_diveristy==0 we need extra states for upper carriers + int test_frame_count; + int total_bits; + int total_bit_errors; + int total_bits_coded; + int total_bit_errors_coded; + int sz_error_pattern; + + /* optional user defined function to pass error pattern when a test frame is received */ + + void *error_pattern_callback_state; + void (*freedv_put_error_pattern)(void *error_pattern_callback_state, short error_pattern[], int sz_error_pattern); + + /* Misc ---------------------------------------------------------------------------------------------*/ + + int *tx_bits; /* FSK modem frame under construction */ + int tx_sync_bit; + int frames; + int clip; /* non-zero for cohpsk modem output clipping for low PAPR */ + int sync; + int evenframe; + float snr_est; + float snr_squelch_thresh; + int squelch_en; + int nin, nin_prev; + int verbose; + int ext_vco; /* 2400A/800XA use external VCO flag */ + float *passthrough_2020; /* 2020 interpolating filter */ + float tx_amp; /* amplitude of tx samples */ + + int ofdm_bitsperframe; + int ofdm_nuwbits; + int ofdm_ntxtbits; + int rx_status; + + /* Varicode txt channel states ----------------------------------------------------------------------*/ + + struct VARICODE_DEC varicode_dec_states; + short tx_varicode_bits[VARICODE_MAX_BITS]; + int nvaricode_bits; + int varicode_bit_index; + + /* interleaved LDPC OFDM states ---------------------------------------------------------------------*/ + + COMP *codeword_symbols; + float *codeword_amps; + int modem_frame_count_tx; // modem frame counter for tx side + int modem_frame_count_rx; // modem frame counter for rx side + COMP *mod_out; // output buffer of intereaved frames + + /* user defined function ptrs to produce and consume ASCII + characters using aux txt channel */ + + char (*freedv_get_next_tx_char)(void *callback_state); + void (*freedv_put_next_rx_char)(void *callback_state, char c); + void *callback_state; + + /* user defined functions to produce and consume protocol bits */ + /* Protocol bits are packed MSB-first */ + void (*freedv_put_next_proto)(void *callback_state, char *proto_bits_packed); + void (*freedv_get_next_proto)(void *callback_state, char *proto_bits_packed); + void *proto_callback_state; + int n_protocol_bits; + + /* states needed for FSK LDPC */ + float *frame_llr; + int frame_llr_size, frame_llr_nbits; + float *twoframes_llr; + uint8_t *twoframes_hard; + int fsk_ldpc_thresh1, fsk_ldpc_thresh2, fsk_ldpc_baduw_thresh; + int fsk_ldpc_state, fsk_ldpc_best_location, fsk_ldpc_baduw; + float fsk_ldpc_snr; +}; + +// open function for each mode + +void freedv_1600_open(struct freedv *f); +void freedv_700c_open(struct freedv *f); +void freedv_700d_open(struct freedv *f); +void freedv_2020_open(struct freedv *f); +void freedv_2400a_open(struct freedv *f); +void freedv_2400b_open(struct freedv *f); +void freedv_800xa_open(struct freedv *f); +void freedv_fsk_ldpc_open(struct freedv *f, struct freedv_advanced *adv); + +// each mode has tx and rx functions in various flavours for real and complex valued samples + +void freedv_comptx_fdmdv_1600(struct freedv *f, COMP mod_out[]); +int freedv_comprx_fdmdv_1600(struct freedv *f, COMP demod_in[]); + +void freedv_comptx_700c(struct freedv *f, COMP mod_out[]); +int freedv_comprx_700c(struct freedv *f, COMP demod_in_8kHz[]); + +void freedv_comptx_700d(struct freedv *f, COMP mod_out[]); +int freedv_comp_short_rx_700d(struct freedv *f, void *demod_in_8kHz, int demod_in_is_short, float gain); + +void freedv_comptx_2020(struct freedv *f, COMP mod_out[]); +int freedv_comprx_2020(struct freedv *f, COMP demod_in[]); + +void freedv_comptx_fsk_voice(struct freedv *f, COMP mod_out[]); +void freedv_tx_fsk_voice(struct freedv *f, short mod_out[]); +void freedv_tx_fsk_data(struct freedv *f, short mod_out[]); +int freedv_comprx_fsk(struct freedv *f, COMP demod_in[]); +int freedv_floatrx(struct freedv *f, short speech_out[], float demod_in[]); + +void freedv_tx_fsk_ldpc_data(struct freedv *f, COMP mod_out[]); +void freedv_tx_fsk_ldpc_data_preamble(struct freedv *f, COMP mod_out[], int npreamble_bits, int npreamble_samples); +int freedv_rx_fsk_ldpc_data(struct freedv *f, COMP demod_in[]); + +int freedv_bits_to_speech(struct freedv *f, short speech_out[], short demod_in[], int rx_status); + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/libcodec2-android/src/codec2/src/freedv_data_channel.c b/libcodec2-android/src/codec2/src/freedv_data_channel.c new file mode 100644 index 0000000..7d361a1 --- /dev/null +++ b/libcodec2-android/src/codec2/src/freedv_data_channel.c @@ -0,0 +1,314 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: freedv_data_channel.c + AUTHOR......: Jeroen Vreeken + DATE CREATED: 03 March 2016 + + Data channel for ethernet like packets in freedv VHF frames. + Currently designed for- + * 2 control bits per frame + * 4 byte counter bits per frame + * 64 bits of data per frame + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2016 Jeroen Vreeken + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include "freedv_data_channel.h" + +#include +#include + +static unsigned char fdc_header_bcast[6] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; + +/* CCIT CRC table (0x1201 polynomal) */ +static unsigned short fdc_crc_table[256] = { + 0x0000, 0x1189, 0x2312, 0x329b, 0x4624, 0x57ad, 0x6536, 0x74bf, + 0x8c48, 0x9dc1, 0xaf5a, 0xbed3, 0xca6c, 0xdbe5, 0xe97e, 0xf8f7, + 0x1081, 0x0108, 0x3393, 0x221a, 0x56a5, 0x472c, 0x75b7, 0x643e, + 0x9cc9, 0x8d40, 0xbfdb, 0xae52, 0xdaed, 0xcb64, 0xf9ff, 0xe876, + 0x2102, 0x308b, 0x0210, 0x1399, 0x6726, 0x76af, 0x4434, 0x55bd, + 0xad4a, 0xbcc3, 0x8e58, 0x9fd1, 0xeb6e, 0xfae7, 0xc87c, 0xd9f5, + 0x3183, 0x200a, 0x1291, 0x0318, 0x77a7, 0x662e, 0x54b5, 0x453c, + 0xbdcb, 0xac42, 0x9ed9, 0x8f50, 0xfbef, 0xea66, 0xd8fd, 0xc974, + 0x4204, 0x538d, 0x6116, 0x709f, 0x0420, 0x15a9, 0x2732, 0x36bb, + 0xce4c, 0xdfc5, 0xed5e, 0xfcd7, 0x8868, 0x99e1, 0xab7a, 0xbaf3, + 0x5285, 0x430c, 0x7197, 0x601e, 0x14a1, 0x0528, 0x37b3, 0x263a, + 0xdecd, 0xcf44, 0xfddf, 0xec56, 0x98e9, 0x8960, 0xbbfb, 0xaa72, + 0x6306, 0x728f, 0x4014, 0x519d, 0x2522, 0x34ab, 0x0630, 0x17b9, + 0xef4e, 0xfec7, 0xcc5c, 0xddd5, 0xa96a, 0xb8e3, 0x8a78, 0x9bf1, + 0x7387, 0x620e, 0x5095, 0x411c, 0x35a3, 0x242a, 0x16b1, 0x0738, + 0xffcf, 0xee46, 0xdcdd, 0xcd54, 0xb9eb, 0xa862, 0x9af9, 0x8b70, + 0x8408, 0x9581, 0xa71a, 0xb693, 0xc22c, 0xd3a5, 0xe13e, 0xf0b7, + 0x0840, 0x19c9, 0x2b52, 0x3adb, 0x4e64, 0x5fed, 0x6d76, 0x7cff, + 0x9489, 0x8500, 0xb79b, 0xa612, 0xd2ad, 0xc324, 0xf1bf, 0xe036, + 0x18c1, 0x0948, 0x3bd3, 0x2a5a, 0x5ee5, 0x4f6c, 0x7df7, 0x6c7e, + 0xa50a, 0xb483, 0x8618, 0x9791, 0xe32e, 0xf2a7, 0xc03c, 0xd1b5, + 0x2942, 0x38cb, 0x0a50, 0x1bd9, 0x6f66, 0x7eef, 0x4c74, 0x5dfd, + 0xb58b, 0xa402, 0x9699, 0x8710, 0xf3af, 0xe226, 0xd0bd, 0xc134, + 0x39c3, 0x284a, 0x1ad1, 0x0b58, 0x7fe7, 0x6e6e, 0x5cf5, 0x4d7c, + 0xc60c, 0xd785, 0xe51e, 0xf497, 0x8028, 0x91a1, 0xa33a, 0xb2b3, + 0x4a44, 0x5bcd, 0x6956, 0x78df, 0x0c60, 0x1de9, 0x2f72, 0x3efb, + 0xd68d, 0xc704, 0xf59f, 0xe416, 0x90a9, 0x8120, 0xb3bb, 0xa232, + 0x5ac5, 0x4b4c, 0x79d7, 0x685e, 0x1ce1, 0x0d68, 0x3ff3, 0x2e7a, + 0xe70e, 0xf687, 0xc41c, 0xd595, 0xa12a, 0xb0a3, 0x8238, 0x93b1, + 0x6b46, 0x7acf, 0x4854, 0x59dd, 0x2d62, 0x3ceb, 0x0e70, 0x1ff9, + 0xf78f, 0xe606, 0xd49d, 0xc514, 0xb1ab, 0xa022, 0x92b9, 0x8330, + 0x7bc7, 0x6a4e, 0x58d5, 0x495c, 0x3de3, 0x2c6a, 0x1ef1, 0x0f78 +}; + +static unsigned short fdc_crc(unsigned char *buffer, size_t len) +{ + unsigned short crc = 0xffff; + size_t i; + + for (i = 0; i < len; i++, buffer++) { + crc = (crc >> 8) ^ fdc_crc_table[(crc ^ *buffer) & 0xff]; + } + + return crc ^ 0xffff; +} + +/* CRC4 0x03 polynomal */ +static unsigned char fdc_crc4(unsigned char *buffer, size_t len) +{ + unsigned char crc = 0x0f; + size_t i; + + for (i = 0; i < len; i++, buffer++) { + int shift; + + for (shift = 7; shift <= 0; shift--) { + crc <<= 1; + if ((*buffer >> shift) & 0x1) + crc |= 1; + if (crc & 0x10) + crc ^= 0x03; + } + } + + return crc & 0x0f; +} + +struct freedv_data_channel *freedv_data_channel_create(void) +{ + struct freedv_data_channel *fdc; + + fdc = (struct freedv_data_channel *) calloc(1, sizeof(struct freedv_data_channel)); + if (fdc == NULL) + return NULL; + + freedv_data_set_header(fdc, fdc_header_bcast); + + memcpy(fdc->rx_header, fdc->tx_header, 8); + + return fdc; +} + +void freedv_data_channel_destroy(struct freedv_data_channel *fdc) +{ + free(fdc); +} + + +void freedv_data_set_cb_rx(struct freedv_data_channel *fdc, freedv_data_callback_rx cb, void *state) +{ + fdc->cb_rx = cb; + fdc->cb_rx_state = state; +} + +void freedv_data_set_cb_tx(struct freedv_data_channel *fdc, freedv_data_callback_tx cb, void *state) +{ + fdc->cb_tx = cb; + fdc->cb_tx_state = state; +} + +void freedv_data_channel_rx_frame(struct freedv_data_channel *fdc, unsigned char *data, size_t size, int from_bit, int bcast_bit, int crc_bit, int end_bits) +{ + int copy_bits; + if (end_bits) { + copy_bits = end_bits; + } else { + copy_bits = size; + } + + /* New packet? */ + if (fdc->packet_rx_cnt == 0) { + /* Does the packet have a compressed from field? */ + if (from_bit) { + /* Compressed from: take the previously received header */ + memcpy(fdc->packet_rx + fdc->packet_rx_cnt, fdc->rx_header, 6); + fdc->packet_rx_cnt += 6; + } + if (bcast_bit) { + if (!from_bit) { + /* Copy from header and modify size and end_bits accordingly */ + memcpy(fdc->packet_rx + fdc->packet_rx_cnt, data, 6); + fdc->packet_rx_cnt += 6; + copy_bits -= 6; + if (copy_bits < 0) + copy_bits = 0; + data += 6; + } + /* Compressed to: fill in broadcast address */ + memcpy(fdc->packet_rx + fdc->packet_rx_cnt, fdc_header_bcast, sizeof(fdc_header_bcast)); + fdc->packet_rx_cnt += 6; + } + if (crc_bit) { + unsigned char calc_crc = fdc_crc4(data, size); + if (calc_crc == end_bits) { + /* It is a single header field, remember it for later */ + memcpy(fdc->rx_header, data, 6); + memcpy(fdc->packet_rx + 6, data, 6); + memcpy(fdc->packet_rx, fdc_header_bcast, 6); + if (fdc->cb_rx) { + fdc->cb_rx(fdc->cb_rx_state, fdc->packet_rx, 12); + } + } + fdc->packet_rx_cnt = 0; + return; + } + } + + if (fdc->packet_rx_cnt + copy_bits >= FREEDV_DATA_CHANNEL_PACKET_MAX) { + /* Something went wrong... this can not be a real packet */ + fdc->packet_rx_cnt = 0; + return; + } + + memcpy(fdc->packet_rx + fdc->packet_rx_cnt, data, copy_bits); + fdc->packet_rx_cnt += copy_bits; + + if (end_bits != 0 && fdc->packet_rx_cnt >= 2) { + unsigned short calc_crc = fdc_crc(fdc->packet_rx, fdc->packet_rx_cnt - 2); + unsigned short rx_crc; + rx_crc = fdc->packet_rx[fdc->packet_rx_cnt - 1] << 8; + rx_crc |= fdc->packet_rx[fdc->packet_rx_cnt - 2]; + + if (rx_crc == calc_crc) { + if (fdc->packet_rx_cnt == size) { + /* It is a single header field, remember it for later */ + memcpy(fdc->rx_header, fdc->packet_rx, 6); + } + + /* callback */ + if (fdc->cb_rx) { + unsigned char tmp[6]; + memcpy(tmp, fdc->packet_rx, 6); + memcpy(fdc->packet_rx, fdc->packet_rx + 6, 6); + memcpy(fdc->packet_rx + 6, tmp, 6); + + size_t size = fdc->packet_rx_cnt - 2; + if (size < 12) { + size = 12; + memcpy(fdc->packet_rx, fdc_header_bcast, 6); + } + fdc->cb_rx(fdc->cb_rx_state, fdc->packet_rx, size); + } + } + fdc->packet_rx_cnt = 0; + } +} + +void freedv_data_channel_tx_frame(struct freedv_data_channel *fdc, unsigned char *data, size_t size, int *from_bit, int *bcast_bit, int *crc_bit, int *end_bits) +{ + *from_bit = 0; + *bcast_bit = 0; + *crc_bit = 0; + + if (!fdc->packet_tx_size) { + fdc->packet_tx_cnt = 0; + + if (fdc->cb_tx) { + fdc->packet_tx_size = FREEDV_DATA_CHANNEL_PACKET_MAX; + fdc->cb_tx(fdc->cb_tx_state, fdc->packet_tx, &fdc->packet_tx_size); + } + if (!fdc->packet_tx_size) { + /* Nothing to send, insert a header frame */ + memcpy(fdc->packet_tx, fdc->tx_header, size); + if (size < 8) { + *end_bits = fdc_crc4(fdc->tx_header, size); + *crc_bit = 1; + memcpy(data, fdc->tx_header, size); + + return; + } else { + fdc->packet_tx_size = size; + } + } else { + /* new packet */ + unsigned short crc; + unsigned char tmp[6]; + + *from_bit = !memcmp(fdc->packet_tx + 6, fdc->tx_header, 6); + *bcast_bit = !memcmp(fdc->packet_tx, fdc_header_bcast, 6); + + memcpy(tmp, fdc->packet_tx, 6); + memcpy(fdc->packet_tx, fdc->packet_tx + 6, 6); + memcpy(fdc->packet_tx + 6, tmp, 6); + + crc = fdc_crc(fdc->packet_tx, fdc->packet_tx_size); + + fdc->packet_tx[fdc->packet_tx_size] = crc & 0xff; + fdc->packet_tx_size++; + fdc->packet_tx[fdc->packet_tx_size] = (crc >> 8) & 0xff; + fdc->packet_tx_size++; + + if (*from_bit) { + fdc->packet_tx_cnt = 6; + } else { + if (*bcast_bit) { + memcpy(fdc->packet_tx + 6, fdc->packet_tx, 6); + } + } + if (*bcast_bit) { + fdc->packet_tx_cnt += 6; + } + } + } + if (fdc->packet_tx_size) { + int copy = fdc->packet_tx_size - fdc->packet_tx_cnt; + + if (copy > size) { + copy = size; + *end_bits = 0; + } else { + *end_bits = copy; + fdc->packet_tx_size = 0; + } + memcpy(data, fdc->packet_tx + fdc->packet_tx_cnt, copy); + fdc->packet_tx_cnt += copy; + } +} + +void freedv_data_set_header(struct freedv_data_channel *fdc, unsigned char *header) +{ + unsigned short crc = fdc_crc(header, 6); + + memcpy(fdc->tx_header, header, 6); + fdc->tx_header[6] = crc & 0xff; + fdc->tx_header[7] = (crc >> 8) & 0xff; +} + +int freedv_data_get_n_tx_frames(struct freedv_data_channel *fdc, size_t size) +{ + if (fdc->packet_tx_size == 0) + return 0; + /* packet will be send in 'size' byte frames */ + return (fdc->packet_tx_size - fdc->packet_tx_cnt + size-1) / size; +} diff --git a/libcodec2-android/src/codec2/src/freedv_data_channel.h b/libcodec2-android/src/codec2/src/freedv_data_channel.h new file mode 100644 index 0000000..f7fac4a --- /dev/null +++ b/libcodec2-android/src/codec2/src/freedv_data_channel.h @@ -0,0 +1,70 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: freedv_data_channel.h + AUTHOR......: Jeroen Vreeken + DATE CREATED: 03 March 2016 + + Data channel for ethernet like packets in freedv VHF frames. + Currently designed for- + * 2 control bits per frame + * 4 byte counter bits per frame + * 64 bits of data per frame +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2016 Jeroen Vreeken + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#ifndef _FREEDV_DATA_CHANNEL_H +#define _FREEDV_DATA_CHANNEL_H + +#include + +#define FREEDV_DATA_CHANNEL_PACKET_MAX 2048 + +typedef void (*freedv_data_callback_rx)(void *, unsigned char *packet, size_t size); +typedef void (*freedv_data_callback_tx)(void *, unsigned char *packet, size_t *size); + +struct freedv_data_channel { + freedv_data_callback_rx cb_rx; + void *cb_rx_state; + freedv_data_callback_tx cb_tx; + void *cb_tx_state; + + unsigned char rx_header[8]; + unsigned char packet_rx[FREEDV_DATA_CHANNEL_PACKET_MAX + 2]; + int packet_rx_cnt; + + unsigned char tx_header[8]; + unsigned char packet_tx[FREEDV_DATA_CHANNEL_PACKET_MAX + 2]; + int packet_tx_cnt; + size_t packet_tx_size; +}; + + +struct freedv_data_channel *freedv_data_channel_create(void); +void freedv_data_channel_destroy(struct freedv_data_channel *fdc); + +void freedv_data_set_cb_rx(struct freedv_data_channel *fdc, freedv_data_callback_rx cb, void *state); +void freedv_data_set_cb_tx(struct freedv_data_channel *fdc, freedv_data_callback_tx cb, void *state); + +void freedv_data_channel_rx_frame(struct freedv_data_channel *fdc, unsigned char *data, size_t size, int from_bit, int bcast_bit, int crc_bit, int end_bits); +void freedv_data_channel_tx_frame(struct freedv_data_channel *fdc, unsigned char *data, size_t size, int *from_bit, int *bcast_bit, int *crc_bit, int *end_bits); + +void freedv_data_set_header(struct freedv_data_channel *fdc, unsigned char *header); +int freedv_data_get_n_tx_frames(struct freedv_data_channel *fdc, size_t size); + +#endif /* _FREEDV_DATA_CHANNEL_H */ diff --git a/libcodec2-android/src/codec2/src/freedv_data_raw_rx.c b/libcodec2-android/src/codec2/src/freedv_data_raw_rx.c new file mode 100644 index 0000000..230e87e --- /dev/null +++ b/libcodec2-android/src/codec2/src/freedv_data_raw_rx.c @@ -0,0 +1,228 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: freedv_data_raw_rx.c + AUTHOR......: David Rowe + DATE CREATED: May 2020 + + Demonstrates receiving frames of raw data bytes (instead of + compressed speech) using the FreeDV API. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2020 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "freedv_api.h" +#include "fsk.h" + +int main(int argc, char *argv[]) { + FILE *fin, *fout; + struct freedv_advanced adv = {0,2,100,8000,1000,200, "H_256_512_4"}; + struct freedv *freedv; + int nin, nbytes, nbytes_total = 0, npackets_total = 0, frame = 0; + int mode; + int verbose = 0, use_testframes = 0; + int mask = 0; + + if (argc < 3) { + char f2020[80] = {0}; + helpmsg: + #ifdef __LPCNET__ + sprintf(f2020,"|2020"); + #endif + printf("usage: %s [options] 700C|700D|800XA|FSK_LDPC%s InputModemSpeechFile BinaryDataFile\n" + " -v or --vv verbose options\n" + " --testframes count raw and coded errors in testframes sent by tx\n" + "\n" + "For FSK_LDPC only:\n\n" + " -m 2|4 number of FSK tones\n" + " --Fs FreqHz sample rate (default 8000)\n" + " --Rs FreqHz symbol rate (default 100)\n" + " --mask shiftHz Use \"mask\" freq estimator (default is \"peak\" estimator)\n" + , argv[0],f2020); + printf("e.g %s 700D dataBytes_700d.raw dataBytes_rx.bin\n", argv[0]); + exit(1); + } + + int o = 0; + int opt_idx = 0; + while( o != -1 ){ + static struct option long_opts[] = { + {"testframes", no_argument, 0, 't'}, + {"help", no_argument, 0, 'h'}, + {"Fs", required_argument, 0, 'f'}, + {"Rs", required_argument, 0, 'r'}, + {"vv", no_argument, 0, 'x'}, + {"mask", required_argument, 0, 'k'}, + {0, 0, 0, 0} + }; + + o = getopt_long(argc,argv,"f:hm:r:tvx",long_opts,&opt_idx); + + switch(o) { + case 'f': + adv.Fs = atoi(optarg); + break; + case 'k': + mask = 1; + adv.tone_spacing = atoi(optarg); + break; + case 'm': + adv.M = atoi(optarg); + break; + case 'r': + adv.Rs = atoi(optarg); + break; + case 't': + use_testframes = 1; + break; + case 'v': + verbose = 1; + break; + case 'x': + verbose = 2; + break; + case 'h': + case '?': + goto helpmsg; + break; + } + } + int dx = optind; + + if( (argc - dx) < 3) { + fprintf(stderr, "too few arguments.\n"); + goto helpmsg; + } + + mode = -1; + if (!strcmp(argv[dx],"700C")) mode = FREEDV_MODE_700C; + if (!strcmp(argv[dx],"700D")) mode = FREEDV_MODE_700D; + #ifdef __LPCNET__ + if (!strcmp(argv[dx],"2020")) mode = FREEDV_MODE_2020; + #endif + if (!strcmp(argv[dx],"FSK_LDPC")) mode = FREEDV_MODE_FSK_LDPC; + if (mode == -1) { + fprintf(stderr, "Error in mode: %s\n", argv[dx]); + exit(1); + } + + if (strcmp(argv[dx+1], "-") == 0) fin = stdin; + else if ( (fin = fopen(argv[dx+1],"rb")) == NULL ) { + fprintf(stderr, "Error opening input raw modem sample file: %s: %s.\n", + argv[2], strerror(errno)); + exit(1); + } + + if (strcmp(argv[dx+2], "-") == 0) fout = stdout; + else if ( (fout = fopen(argv[dx+2],"wb")) == NULL ) { + fprintf(stderr, "Error opening output speech sample file: %s: %s.\n", + argv[3], strerror(errno)); + exit(1); + } + + if (mode != FREEDV_MODE_FSK_LDPC) + freedv = freedv_open(mode); + else { + freedv = freedv_open_advanced(mode, &adv); + struct FSK *fsk = freedv_get_fsk(freedv); + fsk_set_freq_est_alg(fsk, mask); + } + + assert(freedv != NULL); + freedv_set_verbose(freedv, verbose); + freedv_set_test_frames(freedv, use_testframes); + if (mode == FREEDV_MODE_FSK_LDPC) { + struct FSK *fsk = freedv_get_fsk(freedv); + fprintf(stderr, "Nbits: %d N: %d Ndft: %d\n", fsk->Nbits, fsk->N, fsk->Ndft); + } + + /* for streaming bytes it's much easier use the modes that have a multiple of 8 payload bits/frame */ + assert((freedv_get_bits_per_modem_frame(freedv) % 8) == 0); + int bytes_per_modem_frame = freedv_get_bits_per_modem_frame(freedv)/8; + fprintf(stderr, "bytes_per_modem_frame: %d\n", bytes_per_modem_frame); + uint8_t bytes_out[bytes_per_modem_frame]; + short demod_in[freedv_get_n_max_modem_samples(freedv)]; + + /* We need to work out how many samples the demod needs on each + call (nin). This is used to adjust for differences in the tx + and rx sample clock frequencies */ + + nin = freedv_nin(freedv); + while(fread(demod_in, sizeof(short), nin, fin) == nin) { + frame++; + + nbytes = freedv_rawdatarx(freedv, bytes_out, demod_in); + nin = freedv_nin(freedv); + + if (nbytes) { + fwrite(bytes_out, sizeof(uint8_t), nbytes, fout); + nbytes_total += nbytes; + npackets_total++; + } + + if (verbose == 3) { + fprintf(stderr, "frame: %d nin: %d sync: %d nbytes: %d bits: %d\n", + frame, nin, freedv_get_sync(freedv), nbytes, freedv_get_rx_bits(freedv)); + } + + /* if using pipes we probably don't want the usual buffering */ + if (fout == stdout) fflush(stdout); + if (fin == stdin) fflush(stdin); + } + + fclose(fin); + fclose(fout); + fprintf(stderr, "frames processed: %d output bytes: %d output_packets: %d \n", frame, nbytes_total, npackets_total); + + /* in testframe mode finish up with some stats */ + + if (freedv_get_test_frames(freedv)) { + int Tbits = freedv_get_total_bits(freedv); + int Terrs = freedv_get_total_bit_errors(freedv); + float uncoded_ber = (float)Terrs/Tbits; + fprintf(stderr, "BER......: %5.4f Tbits: %5d Terrs: %5d\n", + (double)uncoded_ber, Tbits, Terrs); + if ((mode == FREEDV_MODE_700D) || (mode == FREEDV_MODE_2020) || (mode == FREEDV_MODE_FSK_LDPC)) { + int Tbits_coded = freedv_get_total_bits_coded(freedv); + int Terrs_coded = freedv_get_total_bit_errors_coded(freedv); + float coded_ber = (float)Terrs_coded/Tbits_coded; + fprintf(stderr, "Coded BER: %5.4f Tbits: %5d Terrs: %5d\n", + (double)coded_ber, Tbits_coded, Terrs_coded); + + /* set return code for Ctest */ + if ((uncoded_ber < 0.1f) && (coded_ber < 0.01f)) + return 0; + else + return 1; + } + } + + freedv_close(freedv); + return 0; +} + diff --git a/libcodec2-android/src/codec2/src/freedv_data_raw_tx.c b/libcodec2-android/src/codec2/src/freedv_data_raw_tx.c new file mode 100644 index 0000000..f99cd5b --- /dev/null +++ b/libcodec2-android/src/codec2/src/freedv_data_raw_tx.c @@ -0,0 +1,296 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: freedv_data_raw_tx.c + AUTHOR......: David Rowe + DATE CREATED: May 2020 + + Demonstrates transmitting frames of raw data bytes (instead of + compressed speech) using the FreeDV API. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2020 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include +#include +#include +#include +#include +#include + +#include "freedv_api.h" +#include "fsk.h" +#include "ofdm_internal.h" + +void comp_to_short(short mod_out_short[], COMP mod_out_comp[], int n_mod_out) { + for(int i=0; i Rs: %d\n", adv.tone_spacing, adv.Rs); + exit(1); + } + } + + if ((Nbursts != 1) && (testframes == 0)) { + fprintf(stderr, "Error: --bursts can only be used with --testframes\n"); + exit(1); + } + + /* optionally set up a known testframe */ + uint8_t testframe_bytes[bytes_per_modem_frame]; + memset(testframe_bytes, 0, bytes_per_modem_frame); + if (testframes) { + int bits_per_frame = freedv_get_bits_per_modem_frame(freedv); + uint8_t testframe_bits[bits_per_frame]; + ofdm_generate_payload_data_bits(testframe_bits, bits_per_frame); + freedv_pack(testframe_bytes, testframe_bits, bits_per_frame); + } + fprintf(stderr, "\n"); + + short mod_out_short[2*n_mod_out]; + COMP mod_out_comp[n_mod_out]; + int frames; + + for(int b=0; b> 8; + bytes_in[bytes_per_modem_frame-1] = crc16 & 0xff; + } + + if (use_complex == 0) { + freedv_rawdatatx(freedv, mod_out_short, bytes_in); + } else { + freedv_rawdatacomptx(freedv, mod_out_comp, bytes_in); + comp_to_short(mod_out_short, mod_out_comp, n_mod_out); + } + fwrite(mod_out_short, sizeof(short), shorts_per_sample*n_mod_out, fout); + + /* if using pipes we don't want the usual buffering to occur */ + if (fout == stdout) fflush(stdout); + if (fin == stdin) fflush(stdin); + + frames++; + if (testframes && (frames >= Nframes)) break; + } + + /* some silence at the end to allow demod to complete processing */ + + for(int i=0; i. +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "freedv_api.h" + +/********************************************************** + Encoding an ITU callsign (and 4 bit secondary station ID to a valid MAC address. + http://dmlinking.net/eth_ar.html + */ + +// Lookup table for valid callsign characters +static char alnum2code[37] = { + '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', + 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', + 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', + 0 +}; + +// Decode the callsign in a MAC address +static int eth_ar_mac2call(char *callsign, int *ssid, bool *multicast, uint8_t mac[6]) +{ + uint64_t add; + int i; + + if (!memcmp(mac, (uint8_t[6]){ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}, 6)) { + *ssid = 0; + *multicast = true; + strcpy(callsign, "*"); + return 0; + } + *multicast = mac[0] & 0x01; + *ssid = (mac[0] & 0x3c) >> 2; + add = (uint64_t)(mac[0] & 0xc0) << (40 - 6); + add |= (uint64_t)mac[1] << 32; + add |= (uint64_t)mac[2] << 24; + add |= (uint64_t)mac[3] << 16; + add |= (uint64_t)mac[4] << 8; + add |= (uint64_t)mac[5]; + + for (i = 0; i < 8; i++) { + int c = add % 37; + callsign[i] = alnum2code[c]; + add /= 37; + } + callsign[i] = 0; + + return 0; +} + + + +/********************************************************** + Data channel callback functions + */ + + +struct my_callback_state { + FILE *fdataout; + int calls; +}; + +/* Called when a packet has been received */ +void my_datarx(void *callback_state, unsigned char *packet, size_t size) +{ + struct my_callback_state* pstate = (struct my_callback_state*)callback_state; + pstate->calls++; + fprintf(pstate->fdataout, "%-4d", pstate->calls); + + if (pstate->fdataout != NULL) { + size_t i; + + char callsign_to[9], callsign_from[9]; + int ssid_to, ssid_from; + bool multicast_to, multicast_from; + eth_ar_mac2call(callsign_to, &ssid_to, &multicast_to, packet); + eth_ar_mac2call(callsign_from, &ssid_from, &multicast_from, packet + 6); + + if (multicast_from) + fprintf(pstate->fdataout, "Multicast"); + else + fprintf(pstate->fdataout, "%s-%d", callsign_from, ssid_from); + + printf(" -> "); + + if (multicast_to) + fprintf(pstate->fdataout, "Multicast"); + else + fprintf(pstate->fdataout, "%s-%d", callsign_to, ssid_to); + + printf(" (%zd bytes)", size); + + /* It could be just an identification frame */ + if (size < 14) { + fprintf(pstate->fdataout, " Identification"); + } else { + unsigned short ethertype = packet[12] << 8 | packet[13]; + fprintf(pstate->fdataout, " EtherType 0x%04x", ethertype); + + if (ethertype == 0x7370) + fprintf(pstate->fdataout, " (FPRS)"); + } + + fprintf(pstate->fdataout, ":"); + + for (i = 0; i < size; i++) { + if (i % 0x10 == 0) + fprintf(pstate->fdataout, "\n0x%04zx: ", i); + fprintf(pstate->fdataout, "0x%02x ", packet[i]); + } + fprintf(pstate->fdataout, "\n"); + } +} + +/* Called when a new packet can be send */ +void my_datatx(void *callback_state, unsigned char *packet, size_t *size) { + /* This should not happen while receiving.. */ + fprintf(stderr, "datarx callback called, this should not happen!\n"); + *size = 0; +} + + +int main(int argc, char *argv[]) { + FILE *fin; + struct freedv *freedv; + int nin, frame = 0; + struct my_callback_state my_cb_state = {0}; + int mode; + int verbose; + int i; + + + if (argc < 3) { + printf("usage: %s 2400A|2400B|800XA InputModemSpeechFile\n" + " \n", argv[0]); + printf("e.g %s 2400A data_fdmdv.raw\n", argv[0]); + exit(1); + } + + my_cb_state.fdataout = stdout; + + mode = -1; + if (!strcmp(argv[1],"2400A")) + mode = FREEDV_MODE_2400A; + if (!strcmp(argv[1],"2400B")) + mode = FREEDV_MODE_2400B; + if (!strcmp(argv[1],"800XA")) + mode = FREEDV_MODE_800XA; + assert(mode != -1); + + if (strcmp(argv[2], "-") == 0) fin = stdin; + else if ( (fin = fopen(argv[2],"rb")) == NULL ) { + fprintf(stderr, "Error opening input raw modem sample file: %s: %s.\n", + argv[2], strerror(errno)); + exit(1); + } + + verbose = 0; + + if (argc > 3) { + for (i = 3; i < argc; i++) { + if (strcmp(argv[i], "-v") == 0) { + verbose = 1; + } + if (strcmp(argv[i], "-vv") == 0) { + verbose = 2; + } + } + } + + freedv = freedv_open(mode); + assert(freedv != NULL); + + freedv_set_verbose(freedv, verbose); + + short speech_out[freedv_get_n_max_speech_samples(freedv)]; + short demod_in[freedv_get_n_max_modem_samples(freedv)]; + + freedv_set_callback_data(freedv, my_datarx, my_datatx, &my_cb_state); + + /* Note we need to work out how many samples demod needs on each + call (nin). This is used to adjust for differences in the tx and rx + sample clock frequencies. Note also the number of output + speech samples is time varying. */ + + nin = freedv_nin(freedv); + while(fread(demod_in, sizeof(short), nin, fin) == nin) { + frame++; + + /* usual case: use the freedv_api to do everything: speech decoding, demodulating */ + // most common interface - real shorts in, real shorts out + freedv_rx(freedv, speech_out, demod_in); + + nin = freedv_nin(freedv); + + /* if this is in a pipeline, we probably don't want the usual + buffering to occur */ + + if (fin == stdin) fflush(stdin); + } + + fclose(fin); + fprintf(stderr, "frames decoded: %d\n", frame); + + freedv_close(freedv); + return 0; +} + diff --git a/libcodec2-android/src/codec2/src/freedv_data_tx.c b/libcodec2-android/src/codec2/src/freedv_data_tx.c new file mode 100644 index 0000000..9492619 --- /dev/null +++ b/libcodec2-android/src/codec2/src/freedv_data_tx.c @@ -0,0 +1,285 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: freedv_data_tx.c + AUTHOR......: Jeroen Vreeken + DATE CREATED: May 2020 + + Demo VHF packet data transmit program for FreeDV API functions. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2020 Jeroen Vreeken + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "freedv_api.h" +#include "codec2.h" + + +/********************************************************** + Encoding an ITU callsign (and 4 bit secondary station ID to a valid MAC address. + http://dmlinking.net/eth_ar.html + */ + +// Lookup table for valid callsign characters +static char alnum2code[37] = { + '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', + 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', + 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', + 0 +}; + +// Encode a callsign and ssid into a valid MAC address +static int eth_ar_call2mac(uint8_t mac[6], char *callsign, int ssid, bool multicast) +{ + uint64_t add = 0; + int i; + + if (ssid > 15 || ssid < 0) + return -1; + + for (i = 7; i >= 0; i--) { + char c; + + if (i >= strlen(callsign)) { + c = 0; + } else { + c = toupper(callsign[i]); + } + + int j; + + for (j = 0; j < sizeof(alnum2code); j++) { + if (alnum2code[j] == c) + break; + } + if (j == sizeof(alnum2code)) + return -1; + + add *= 37; + add += j; + } + + mac[0] = ((add >> (40 - 6)) & 0xc0) | (ssid << 2) | 0x02 | multicast; + mac[1] = (add >> 32) & 0xff; + mac[2] = (add >> 24) & 0xff; + mac[3] = (add >> 16) & 0xff; + mac[4] = (add >> 8) & 0xff; + mac[5] = add & 0xff; + + return 0; +} + + +/********************************************************** + Data channel callback functions + */ + + +struct my_callback_state { + int calls; + + unsigned char mac[6]; +}; + +/* + Called when a packet has been received + Should not be called in this tx-only test program + */ +void my_datarx(void *callback_state, unsigned char *packet, size_t size) +{ + /* This should not happen while sending... */ + fprintf(stderr, "datarx callback called, this should not happen!\n"); +} + + +/* + Called when a new packet can be send. + + callback_state Private state variable, not touched by freedv. + packet Data array where new packet data is expected + size Available size in packet. On return the actual size of the packet + */ +void my_datatx(void *callback_state, unsigned char *packet, size_t *size) +{ + static int data_type; + struct my_callback_state *my_cb_state = callback_state; + my_cb_state->calls++; + + /* Data could come from a network interface, here we just make up some */ + + if (data_type % 4 == 1) { + /* + Generate a packet with simple test pattern (counting + */ + + /* Send a packet with data */ + int i; + + /* Destination: broadcast */ + memset(packet, 0xff, 6); + /* Source: our eth_ar encoded callsign+ssid */ + memcpy(packet+6, my_cb_state->mac, 6); + /* Ether type: experimental (since this is just a test pattern) */ + packet[12] = 0x01; + packet[13] = 0x01; + + for (i = 0; i < 64; i++) + packet[i + 14] = i; + *size = i + 14; + } else if (data_type % 4 == 2) { + /* + Generate an FPRS position report + */ + + /* Destination: broadcast */ + memset(packet, 0xff, 6); + /* Source: our eth_ar encoded callsign+ssid */ + memcpy(packet+6, my_cb_state->mac, 6); + /* Ether type: FPRS */ + packet[12] = 0x73; + packet[13] = 0x70; + + packet[14] = 0x07; // Position element Lon 86.925026 Lat 27.987850 + packet[15] = 0x3d; // + packet[16] = 0xd0; + packet[17] = 0x37; + packet[18] = 0xd0 | 0x08 | 0x01; + packet[19] = 0x3e; + packet[20] = 0x70; + packet[21] = 0x85; + + *size = 22; + } else { + /* + Set size to zero, the freedv api will insert a header frame + This is usefull for identifying ourselves + */ + *size = 0; + } + + data_type++; +} + + +int main(int argc, char *argv[]) { + FILE *fout; + short *mod_out; + struct freedv *freedv; + struct my_callback_state my_cb_state; + int mode; + int n_nom_modem_samples; + int i; + int n_packets = 20; + char *callsign = "NOCALL"; + int ssid = 0; + bool multicast = false; + + if (argc < 3) { + printf("usage: %s 2400A|2400B|800XA OutputModemRawFile\n" + " [--frames nr] [--callsign callsign] [--ssid ssid] [--mac-multicast 0|1]\n", argv[0]); + printf("e.g %s 2400A data_fdmdv.raw\n", argv[0]); + exit(1); + } + + mode = -1; + if (!strcmp(argv[1],"2400A")) + mode = FREEDV_MODE_2400A; + if (!strcmp(argv[1],"2400B")) + mode = FREEDV_MODE_2400B; + if (!strcmp(argv[1],"800XA")) + mode = FREEDV_MODE_800XA; + if (mode == -1) { + fprintf(stderr, "Error in mode: %s\n", argv[1]); + exit(0); + } + + if (strcmp(argv[2], "-") == 0) fout = stdout; + else if ( (fout = fopen(argv[2],"wb")) == NULL ) { + fprintf(stderr, "Error opening output modem sample file: %s: %s.\n", argv[3], strerror(errno)); + exit(1); + } + + if (argc > 3) { + for (i = 3; i < argc; i++) { + if (strcmp(argv[i], "--packets") == 0) { + n_packets = atoi(argv[i+1]); + } + if (strcmp(argv[i], "--callsign") == 0) { + callsign = argv[i+1]; + } + if (strcmp(argv[i], "--ssid") == 0) { + ssid = atoi(argv[i+1]); + } + if (strcmp(argv[i], "--mac-multicast") == 0) { + multicast = atoi(argv[i+1]); + } + } + } + + freedv = freedv_open(mode); + assert(freedv != NULL); + + /* Generate our address */ + eth_ar_call2mac(my_cb_state.mac, callsign, ssid, multicast); + + freedv_set_data_header(freedv, my_cb_state.mac); + + freedv_set_verbose(freedv, 1); + + n_nom_modem_samples = freedv_get_n_nom_modem_samples(freedv); + mod_out = (short*)malloc(sizeof(short)*n_nom_modem_samples); + assert(mod_out != NULL); + + /* set up callback for data packets */ + freedv_set_callback_data(freedv, my_datarx, my_datatx, &my_cb_state); + + /* OK main loop */ + + /* We will loop untill the tx callback has been called n_packets times + After that we continue untill everything is transmitted, as a data + packet might be transmitted in multiple freedv frames. + */ + while (my_cb_state.calls <= n_packets || freedv_data_ntxframes(freedv)) { + freedv_datatx(freedv, mod_out); + + fwrite(mod_out, sizeof(short), n_nom_modem_samples, fout); + + + /* if this is in a pipeline, we probably don't want the usual + buffering to occur */ + if (fout == stdout) fflush(stdout); + } + + free(mod_out); + freedv_close(freedv); + fclose(fout); + + fclose(stdin); + fclose(stderr); + + return 0; +} + diff --git a/libcodec2-android/src/codec2/src/freedv_fsk.c b/libcodec2-android/src/codec2/src/freedv_fsk.c new file mode 100644 index 0000000..bc3437e --- /dev/null +++ b/libcodec2-android/src/codec2/src/freedv_fsk.c @@ -0,0 +1,625 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: freedv_fsk.c + AUTHOR......: David Rowe + DATE CREATED: May 2020 + + Functions that implement the FreeDV modes that use the FSK modem. + +\*---------------------------------------------------------------------------*/ + +#include +#include +#include +#include +#include +#include +#include + +#include "fsk.h" +#include "fmfsk.h" +#include "codec2.h" +#include "freedv_vhf_framing.h" +#include "varicode.h" +#include "freedv_api.h" +#include "freedv_api_internal.h" +#include "comp_prim.h" +#include "debug_alloc.h" +#include "ldpc_codes.h" +#include "interldpc.h" + +/* 32 bit 0x5186fe15 Unique word for fsk_ldpc modes */ +static uint8_t fsk_ldpc_uw[] = {0,1,0,1, 0,0,0,1, 1,0,0,0, 0,1,1,0, 1,1,1,1, 1,1,1,0, 0,0,0,1, 0,1,0,1}; + +void freedv_2400a_open(struct freedv *f) { + f->n_protocol_bits = 20; + f->deframer = fvhff_create_deframer(FREEDV_VHF_FRAME_A,0); + assert(f->deframer != NULL); + f->fsk = fsk_create_hbr(48000,1200,4,10,FSK_DEFAULT_NSYM,1200,1200); + assert(f->fsk != NULL); + + /* Note: fsk expects tx/rx bits as an array of uint8_ts, not ints */ + f->tx_bits = (int*)MALLOC(f->fsk->Nbits*sizeof(uint8_t)); + assert(f->tx_bits != NULL); + + f->n_nom_modem_samples = f->fsk->N; + f->n_max_modem_samples = f->fsk->N + (f->fsk->Ts); + f->n_nat_modem_samples = f->fsk->N; + f->nin = f->nin_prev = fsk_nin(f->fsk); + f->modem_sample_rate = 48000; + f->modem_symbol_rate = 1200; + + f->speech_sample_rate = FREEDV_FS_8000; + f->codec2 = codec2_create(CODEC2_MODE_1300); assert(f->codec2 != NULL); + f->n_speech_samples = codec2_samples_per_frame(f->codec2); + + f->n_codec_frames = 1; + f->bits_per_codec_frame = codec2_bits_per_frame(f->codec2); + f->bits_per_modem_frame = f->bits_per_codec_frame; + int n_packed_bytes = (f->bits_per_modem_frame + 7)/8; + f->tx_payload_bits = MALLOC(n_packed_bytes); assert(f->tx_payload_bits != NULL); + f->rx_payload_bits = MALLOC(n_packed_bytes); assert(f->rx_payload_bits != NULL); +} + +void freedv_2400b_open(struct freedv *f) { + f->n_protocol_bits = 20; + f->deframer = fvhff_create_deframer(FREEDV_VHF_FRAME_A,1); + assert(f->deframer != NULL); + + f->fmfsk = fmfsk_create(48000,2400); + assert (f->fmfsk != NULL); + + /* Note: fsk expects tx/rx bits as an array of uint8_ts, not ints */ + f->tx_bits = (int*)MALLOC(f->fmfsk->nbit*sizeof(uint8_t)); + assert(f->tx_bits != NULL); + f->n_nom_modem_samples = f->fmfsk->N; + f->n_max_modem_samples = f->fmfsk->N + (f->fmfsk->Ts); + f->n_nat_modem_samples = f->fmfsk->N; + f->nin = f->nin_prev = fmfsk_nin(f->fmfsk); + f->modem_sample_rate = 48000; + + f->speech_sample_rate = FREEDV_FS_8000; + f->codec2 = codec2_create(CODEC2_MODE_1300); assert(f->codec2 != NULL); + f->n_speech_samples = codec2_samples_per_frame(f->codec2); + + f->n_codec_frames = 1; + f->bits_per_codec_frame = codec2_bits_per_frame(f->codec2); + f->bits_per_modem_frame = f->bits_per_codec_frame; + int n_packed_bytes = (f->bits_per_modem_frame + 7)/8; + f->tx_payload_bits = MALLOC(n_packed_bytes); assert(f->tx_payload_bits != NULL); + f->rx_payload_bits = MALLOC(n_packed_bytes); assert(f->rx_payload_bits != NULL); +} + +void freedv_800xa_open(struct freedv *f) { + f->deframer = fvhff_create_deframer(FREEDV_HF_FRAME_B,0); + assert(f->deframer != NULL); + f->fsk = fsk_create_hbr(8000,400,4,10,32,800,400); + assert(f->fsk != NULL); + + f->tx_bits = (int*)MALLOC(f->fsk->Nbits*sizeof(uint8_t)); + assert(f->fsk != NULL); + + f->n_nom_modem_samples = f->fsk->N; + f->n_max_modem_samples = f->fsk->N + (f->fsk->Ts); + f->n_nat_modem_samples = f->fsk->N; + f->nin = f->nin_prev = fsk_nin(f->fsk); + f->modem_sample_rate = 8000; + f->modem_symbol_rate = 400; + fsk_stats_normalise_eye(f->fsk, 0); + + f->codec2 = codec2_create(CODEC2_MODE_700C); assert(f->codec2 != NULL); + f->speech_sample_rate = FREEDV_FS_8000; + f->n_codec_frames = 2; + f->n_speech_samples = f->n_codec_frames*codec2_samples_per_frame(f->codec2); + + f->bits_per_codec_frame = codec2_bits_per_frame(f->codec2); + f->bits_per_modem_frame = f->n_codec_frames*f->bits_per_codec_frame; + int n_packed_bytes = (f->bits_per_modem_frame + 7)/8; + f->tx_payload_bits = MALLOC(n_packed_bytes); assert(f->tx_payload_bits != NULL); + f->rx_payload_bits = MALLOC(n_packed_bytes); assert(f->rx_payload_bits != NULL); +} + + +void freedv_fsk_ldpc_open(struct freedv *f, struct freedv_advanced *adv) { + assert(adv != NULL); + + /* set up modem */ + assert((adv->Fs % adv->Rs) == 0); // Fs/Rs must be an integer + int P = adv->Fs/adv->Rs; + assert(P >= 8); // Good idea for P >= 8 + while ((P > 10) && ((P % 2) == 0)) // reduce internal oversampling rate P as far as we can, keep it an integer + P /= 2; + //fprintf(stderr, "Fs: %d Rs: %d M: %d P: %d\n", adv->Fs, adv->Rs, adv->M, P); + f->fsk = fsk_create_hbr(adv->Fs, adv->Rs, adv->M, P, FSK_DEFAULT_NSYM, adv->first_tone, adv->tone_spacing); + assert(f->fsk != NULL); + fsk_set_freq_est_limits(f->fsk, 0, adv->Fs/2); + fsk_stats_normalise_eye(f->fsk, 0); + + /* set up LDPC code */ + int code_index = ldpc_codes_find(adv->codename); + assert(code_index != -1); + f->ldpc = (struct LDPC*)MALLOC(sizeof(struct LDPC)); assert(f->ldpc != NULL); + ldpc_codes_setup(f->ldpc, adv->codename); + f->ldpc->max_iter = 15; + //fprintf(stderr, "Using: %s\n", f->ldpc->name); + + f->bits_per_modem_frame = f->ldpc->data_bits_per_frame; + int bits_per_frame = f->ldpc->coded_bits_per_frame + sizeof(fsk_ldpc_uw); + f->tx_payload_bits = malloc(f->bits_per_modem_frame); assert(f->tx_payload_bits != NULL); + f->rx_payload_bits = malloc(f->bits_per_modem_frame); assert(f->rx_payload_bits != NULL); + + /* sample buffer size for tx modem samples, we modulate a full frame */ + f->n_nom_modem_samples = f->fsk->Ts*(bits_per_frame/(f->fsk->mode>>1)); + f->n_nat_modem_samples = f->n_nom_modem_samples; + + /* maximum sample buffer size for rx modem samples, note we only + demodulate partial frames on each call to fsk_demod() */ + f->n_max_modem_samples = f->fsk->N + (f->fsk->Ts); + + f->nin = f->nin_prev = fsk_nin(f->fsk); + f->modem_sample_rate = adv->Fs; + f->modem_symbol_rate = adv->Rs; + f->tx_amp = FSK_SCALE; + + /* deframer set up */ + f->frame_llr_size = 2*bits_per_frame; + f->frame_llr = (float*)malloc(f->frame_llr_size*sizeof(float)); assert(f->frame_llr != NULL); + f->frame_llr_nbits = 0; + + f->twoframes_hard = malloc(2*bits_per_frame); assert(f->twoframes_hard != NULL); + memset(f->twoframes_hard, 0, 2*bits_per_frame); + f->twoframes_llr = (float*)malloc(2*bits_per_frame*sizeof(float)); assert(f->twoframes_llr != NULL); + for(int i=0; i<2*bits_per_frame; i++) f->twoframes_llr[i] = 0.0; + + /* currently configured a simple frame-frame approach */ + f->fsk_ldpc_thresh1 = 5; + f->fsk_ldpc_thresh2 = 6; + f->fsk_ldpc_baduw_thresh=1; + + //fprintf(stderr, "thresh1: %d thresh2: %d\n", f->fsk_ldpc_thresh1, f->fsk_ldpc_thresh2); + f->fsk_ldpc_baduw = 0; + f->fsk_ldpc_best_location = 0; f->fsk_ldpc_state = 0; + f->fsk_ldpc_snr = 1.0; +} + + +/* TX routines for 2400 FSK modes, after codec2 encoding */ +void freedv_tx_fsk_voice(struct freedv *f, short mod_out[]) { + int i; + float *tx_float; /* To hold on to modulated samps from fsk/fmfsk */ + uint8_t vc_bits[2]; /* Varicode bits for 2400 framing */ + uint8_t proto_bits[3]; /* Prococol bits for 2400 framing */ + + /* Frame for 2400A/B */ + if(FDV_MODE_ACTIVE( FREEDV_MODE_2400A, f->mode) || FDV_MODE_ACTIVE( FREEDV_MODE_2400B, f->mode)){ + /* Get varicode bits for TX and possibly ask for a new char */ + /* 2 bits per 2400A/B frame, so this has to be done twice */ + for(i=0;i<2;i++){ + if (f->nvaricode_bits) { + vc_bits[i] = f->tx_varicode_bits[f->varicode_bit_index++]; + f->nvaricode_bits--; + } + + if (f->nvaricode_bits == 0) { + /* get new char and encode */ + char s[2]; + if (f->freedv_get_next_tx_char != NULL) { + s[0] = (*f->freedv_get_next_tx_char)(f->callback_state); + f->nvaricode_bits = varicode_encode(f->tx_varicode_bits, s, VARICODE_MAX_BITS, 1, 1); + f->varicode_bit_index = 0; + } + } + } + + /* If the API user hasn't set up message callbacks, don't bother with varicode bits */ + if(f->freedv_get_next_proto != NULL){ + (*f->freedv_get_next_proto)(f->proto_callback_state,(char*)proto_bits); + fvhff_frame_bits(FREEDV_VHF_FRAME_A,(uint8_t*)(f->tx_bits),f->tx_payload_bits,proto_bits,vc_bits); + }else if(f->freedv_get_next_tx_char != NULL){ + fvhff_frame_bits(FREEDV_VHF_FRAME_A,(uint8_t*)(f->tx_bits),f->tx_payload_bits,NULL,vc_bits); + }else { + fvhff_frame_bits(FREEDV_VHF_FRAME_A,(uint8_t*)(f->tx_bits),f->tx_payload_bits,NULL,NULL); + } + /* Frame for 800XA */ + }else if(FDV_MODE_ACTIVE( FREEDV_MODE_800XA, f->mode)){ + fvhff_frame_bits(FREEDV_HF_FRAME_B,(uint8_t*)(f->tx_bits),f->tx_payload_bits,NULL,NULL); + } + + /* Allocate floating point buffer for FSK mod */ + tx_float = alloca(sizeof(float)*f->n_nom_modem_samples); + + /* do 4fsk mod */ + if(FDV_MODE_ACTIVE( FREEDV_MODE_2400A, f->mode) || FDV_MODE_ACTIVE( FREEDV_MODE_800XA, f->mode)){ + if (f->ext_vco) { + fsk_mod_ext_vco(f->fsk,tx_float,(uint8_t*)(f->tx_bits), f->fsk->Nbits); + for(i=0; in_nom_modem_samples; i++){ + mod_out[i] = (short)tx_float[i]; + } + } + else { + fsk_mod(f->fsk,tx_float,(uint8_t*)(f->tx_bits),f->fsk->Nbits); + /* Convert float samps to short */ + for(i=0; in_nom_modem_samples; i++){ + mod_out[i] = (short)(tx_float[i]*FSK_SCALE*NORM_PWR_FSK); + } + } + /* do me-fsk mod */ + }else if(FDV_MODE_ACTIVE( FREEDV_MODE_2400B, f->mode)){ + fmfsk_mod(f->fmfsk,tx_float,(uint8_t*)(f->tx_bits)); + /* Convert float samps to short */ + for(i=0; in_nom_modem_samples; i++){ + mod_out[i] = (short)(tx_float[i]*FMFSK_SCALE); + } + } +} + +/* TX routines for 2400 FSK modes, after codec2 encoding */ +void freedv_comptx_fsk_voice(struct freedv *f, COMP mod_out[]) { + int i; + float *tx_float; /* To hold on to modulated samps from fsk/fmfsk */ + uint8_t vc_bits[2]; /* Varicode bits for 2400 framing */ + uint8_t proto_bits[3]; /* Prococol bits for 2400 framing */ + + /* Frame for 2400A/B */ + if(FDV_MODE_ACTIVE( FREEDV_MODE_2400A, f->mode) || FDV_MODE_ACTIVE( FREEDV_MODE_2400B, f->mode)){ + /* Get varicode bits for TX and possibly ask for a new char */ + /* 2 bits per 2400A/B frame, so this has to be done twice */ + for(i=0;i<2;i++){ + if (f->nvaricode_bits) { + vc_bits[i] = f->tx_varicode_bits[f->varicode_bit_index++]; + f->nvaricode_bits--; + } + + if (f->nvaricode_bits == 0) { + /* get new char and encode */ + char s[2]; + if (f->freedv_get_next_tx_char != NULL) { + s[0] = (*f->freedv_get_next_tx_char)(f->callback_state); + f->nvaricode_bits = varicode_encode(f->tx_varicode_bits, s, VARICODE_MAX_BITS, 1, 1); + f->varicode_bit_index = 0; + } + } + } + + /* If the API user hasn't set up message callbacks, don't bother with varicode bits */ + if(f->freedv_get_next_proto != NULL){ + (*f->freedv_get_next_proto)(f->proto_callback_state,(char*)proto_bits); + fvhff_frame_bits(FREEDV_VHF_FRAME_A,(uint8_t*)(f->tx_bits),f->tx_payload_bits,proto_bits,vc_bits); + }else if(f->freedv_get_next_tx_char != NULL){ + fvhff_frame_bits(FREEDV_VHF_FRAME_A,(uint8_t*)(f->tx_bits),f->tx_payload_bits,NULL,vc_bits); + }else { + fvhff_frame_bits(FREEDV_VHF_FRAME_A,(uint8_t*)(f->tx_bits),f->tx_payload_bits,NULL,NULL); + } + /* Frame for 800XA */ + }else if(FDV_MODE_ACTIVE( FREEDV_MODE_800XA, f->mode)){ + fvhff_frame_bits(FREEDV_HF_FRAME_B,(uint8_t*)(f->tx_bits),f->tx_payload_bits,NULL,NULL); + } + + /* Allocate floating point buffer for FSK mod */ + tx_float = alloca(sizeof(float)*f->n_nom_modem_samples); + + /* do 4fsk mod */ + if(FDV_MODE_ACTIVE( FREEDV_MODE_2400A, f->mode) || FDV_MODE_ACTIVE( FREEDV_MODE_800XA, f->mode)){ + fsk_mod_c(f->fsk,mod_out,(uint8_t*)(f->tx_bits), f->fsk->Nbits); + /* Convert float samps to short */ + for(i=0; in_nom_modem_samples; i++){ + mod_out[i] = fcmult(NORM_PWR_FSK,mod_out[i]); + } + /* do me-fsk mod */ + }else if(FDV_MODE_ACTIVE( FREEDV_MODE_2400B, f->mode)){ + fmfsk_mod(f->fmfsk,tx_float,(uint8_t*)(f->tx_bits)); + /* Convert float samps to short */ + for(i=0; in_nom_modem_samples; i++){ + mod_out[i].real = (tx_float[i]); + } + } +} + +/* TX routines for 2400 FSK modes, data channel */ +void freedv_tx_fsk_data(struct freedv *f, short mod_out[]) { + int i; + float *tx_float; /* To hold on to modulated samps from fsk/fmfsk */ + + if (FDV_MODE_ACTIVE( FREEDV_MODE_800XA, f->mode)) + fvhff_frame_data_bits(f->deframer, FREEDV_HF_FRAME_B,(uint8_t*)(f->tx_bits)); + else + fvhff_frame_data_bits(f->deframer, FREEDV_VHF_FRAME_A,(uint8_t*)(f->tx_bits)); + + /* Allocate floating point buffer for FSK mod */ + tx_float = alloca(sizeof(float)*f->n_nom_modem_samples); + + /* do 4fsk mod */ + if (FDV_MODE_ACTIVE( FREEDV_MODE_2400A, f->mode) || FDV_MODE_ACTIVE( FREEDV_MODE_800XA, f->mode)){ + fsk_mod(f->fsk,tx_float,(uint8_t*)(f->tx_bits), f->fsk->Nbits); + /* Convert float samps to short */ + for(i=0; in_nom_modem_samples; i++){ + mod_out[i] = (short)(tx_float[i]*FSK_SCALE); + } + /* do me-fsk mod */ + } else if(FDV_MODE_ACTIVE( FREEDV_MODE_2400B, f->mode)){ + fmfsk_mod(f->fmfsk,tx_float,(uint8_t*)(f->tx_bits)); + /* Convert float samps to short */ + for(i=0; in_nom_modem_samples; i++){ + mod_out[i] = (short)(tx_float[i]*FMFSK_SCALE); + } + } +} + +int freedv_tx_fsk_ldpc_bits_per_frame(struct freedv *f) { + return f->ldpc->coded_bits_per_frame + sizeof(fsk_ldpc_uw); +} + +/* in a separate function so callable by other FSK Txs */ +void freedv_tx_fsk_ldpc_framer(struct freedv *f, uint8_t frame[], uint8_t payload_data[]) { + + /* lets build up the frame to Tx ............. */ + + /* insert UW */ + memcpy(frame, fsk_ldpc_uw, sizeof(fsk_ldpc_uw)); + /* insert data bits */ + memcpy(frame + sizeof(fsk_ldpc_uw), payload_data, f->bits_per_modem_frame); + /* insert parity bits */ + encode(f->ldpc, frame + sizeof(fsk_ldpc_uw), frame + sizeof(fsk_ldpc_uw) + f->bits_per_modem_frame); +} + +/* FreeDV FSK_LDPC mode tx */ +void freedv_tx_fsk_ldpc_data(struct freedv *f, COMP mod_out[]) { + int bits_per_frame = freedv_tx_fsk_ldpc_bits_per_frame(f); + uint8_t frame[bits_per_frame]; + + assert(f->mode == FREEDV_MODE_FSK_LDPC); + + freedv_tx_fsk_ldpc_framer(f, frame, f->tx_payload_bits); + fsk_mod_c(f->fsk, mod_out, frame, bits_per_frame); + + /* scale samples */ + for(int i=0; in_nom_modem_samples; i++) { + mod_out[i].real *= f->tx_amp; + mod_out[i].imag *= f->tx_amp; + } +} + +void freedv_tx_fsk_ldpc_data_preamble(struct freedv *f, COMP mod_out[], int npreamble_bits, int npreamble_samples) { + struct FSK *fsk = f->fsk; + uint8_t preamble[npreamble_bits]; + // cycle through all 2 and 4FSK symbols, not sure if this is better than random + int sym = 0; + for(int i=0; i>1) & 0x1; + preamble[i+1] = sym & 0x1; + sym += 1; + } + + fsk_mod_c(fsk, mod_out, preamble, npreamble_bits); + /* scale samples */ + for(int i=0; itx_amp; + mod_out[i].imag *= f->tx_amp; + } +} + + +/* FreeDV FSK_LDPC mode rx */ +int freedv_rx_fsk_ldpc_data(struct freedv *f, COMP demod_in[]) { + int bits_per_frame = freedv_tx_fsk_ldpc_bits_per_frame(f); + struct FSK *fsk = f->fsk; + float rx_filt[fsk->mode*fsk->Nsym]; + int rx_status = 0, seq = 0; + + /* Couple of layers of buffers to move chunks of fsk->Nbits into a + double buffer we can use for frame sync. There are other ways + of doing this, e.g. FIFOs */ + + /* demodulate to bit LLRs which are placed at end of buffer */ + fsk_demod_sd(fsk, rx_filt, demod_in); + fsk_rx_filt_to_llrs(&f->frame_llr[f->frame_llr_nbits], + rx_filt, fsk->v_est, fsk->SNRest, fsk->mode, fsk->Nsym); + f->nin = fsk_nin(fsk); + f->frame_llr_nbits += fsk->Nbits; + assert(f->frame_llr_nbits < f->frame_llr_size); + + if (f->frame_llr_nbits >= bits_per_frame) { + /* We have an entire frame of llrs, place them at the end of the double buffer */ + memmove(f->twoframes_llr, &f->twoframes_llr[bits_per_frame], bits_per_frame*sizeof(float)); + memcpy(&f->twoframes_llr[bits_per_frame], f->frame_llr, bits_per_frame*sizeof(float)); + + /* update new hard decisions buffer (used for UW search) */ + memmove(f->twoframes_hard, &f->twoframes_hard[bits_per_frame], bits_per_frame); + for(int i=0; iframe_llr[i] < 0) + f->twoframes_hard[bits_per_frame + i] = 1; + else + f->twoframes_hard[bits_per_frame + i] = 0; + } + + /* update single frame buffer */ + memmove(f->frame_llr, &f->frame_llr[bits_per_frame], (f->frame_llr_nbits-bits_per_frame)*sizeof(float)); + f->frame_llr_nbits -= bits_per_frame; + assert(f->frame_llr_nbits >= 0); + + /* Sample SNR which we report back to used in fsk->snr_est. + Note that fsk->SNRest is the SNR of the last fsk->Nbits + that were placed at the end of the buffer. We delay this + by one frame to report the SNR of the frame we are + currently decoding */ + f->snr_est = 10.0*log10(f->fsk_ldpc_snr); + f->fsk_ldpc_snr = fsk->SNRest; + + /* OK lets run frame based processing, starting with state machine */ + + int errors = 0; + int next_state = f->fsk_ldpc_state; + switch(f->fsk_ldpc_state) { + case 0: /* out of sync - look for UW */ + f->fsk_ldpc_best_location = 0; + int best_errors = sizeof(fsk_ldpc_uw); + for(int i=0; itwoframes_hard[i+u] ^ fsk_ldpc_uw[u]; + //fprintf(stderr, " errors: %d %d %d\n", i, errors, best_errors); + if (errors < best_errors) { best_errors = errors; f->fsk_ldpc_best_location = i; } + } + if (best_errors <= f->fsk_ldpc_thresh1) { + errors = best_errors; + next_state = 1; + f->fsk_ldpc_baduw = 0; + } + break; + case 1: /* in sync */ + assert(f->fsk_ldpc_best_location >= 0); + assert(f->fsk_ldpc_best_location < bits_per_frame); + + /* check UW still OK */ + for(int u=0; utwoframes_hard[f->fsk_ldpc_best_location+u] ^ fsk_ldpc_uw[u]; + if (errors > f->fsk_ldpc_thresh2) { + f->fsk_ldpc_baduw++; + if (f->fsk_ldpc_baduw >= f->fsk_ldpc_baduw_thresh) { + next_state = 0; + } + } + else f->fsk_ldpc_baduw = 0; + break; + } + + int Nerrs_raw=0, Nerrs_coded=0, iter=0, parityCheckCount=0; + if (next_state == 1) { + /* We may have a valid frame, based on the number on UW errors. Lets do a LDPC decode and check the CRC */ + + uint8_t decoded_codeword[f->ldpc->ldpc_coded_bits_per_frame]; + iter = run_ldpc_decoder(f->ldpc, decoded_codeword, + &f->twoframes_llr[f->fsk_ldpc_best_location+sizeof(fsk_ldpc_uw)], + &parityCheckCount); + memcpy(f->rx_payload_bits, decoded_codeword, f->bits_per_modem_frame); + + /* check CRC */ + assert((f->bits_per_modem_frame % 8) == 0); + int bytes_per_modem_frame = f->bits_per_modem_frame/8; + uint8_t rx_payload_bytes[bytes_per_modem_frame]; + freedv_pack(rx_payload_bytes, f->rx_payload_bits, f->bits_per_modem_frame); + uint16_t tx_crc16 = (rx_payload_bytes[bytes_per_modem_frame-2] << 8) | rx_payload_bytes[bytes_per_modem_frame-1]; + uint16_t rx_crc16 = freedv_gen_crc16(rx_payload_bytes, bytes_per_modem_frame - 2); + if (tx_crc16 == rx_crc16) + rx_status |= RX_BITS; + else { + /* if CRC failed on first frame in packet, this was probably a dud UW match, so go straight back to searching */ + if (f->fsk_ldpc_state == 0) next_state = 0; + rx_status |= RX_BIT_ERRORS; + } + } + f->fsk_ldpc_state = next_state; + + if (f->fsk_ldpc_state == 1) { + if (f->test_frames) { + /* regenerate tx test frame */ + uint8_t tx_frame[bits_per_frame]; + memcpy(tx_frame, fsk_ldpc_uw, sizeof(fsk_ldpc_uw)); + ofdm_generate_payload_data_bits(tx_frame + sizeof(fsk_ldpc_uw), f->bits_per_modem_frame); + int bytes_per_modem_frame = f->bits_per_modem_frame/8; + uint8_t tx_bytes[bytes_per_modem_frame]; + freedv_pack(tx_bytes, tx_frame + sizeof(fsk_ldpc_uw), f->bits_per_modem_frame); + uint16_t tx_crc16 = freedv_gen_crc16(tx_bytes, bytes_per_modem_frame - 2); + uint8_t tx_crc16_bytes[] = { tx_crc16 >> 8, tx_crc16 & 0xff }; + freedv_unpack(tx_frame + sizeof(fsk_ldpc_uw) + f->bits_per_modem_frame - 16, tx_crc16_bytes, 16); + encode(f->ldpc, tx_frame + sizeof(fsk_ldpc_uw), tx_frame + sizeof(fsk_ldpc_uw) + f->bits_per_modem_frame); + + /* count uncoded (raw) errors across UW, payload bits, parity bits */ + Nerrs_raw = count_errors(tx_frame, f->twoframes_hard + f->fsk_ldpc_best_location, bits_per_frame); + f->total_bit_errors += Nerrs_raw; + f->total_bits += bits_per_frame; + + /* count coded errors across just payload bits */ + Nerrs_coded = count_errors(tx_frame + sizeof(fsk_ldpc_uw), f->rx_payload_bits, f->bits_per_modem_frame); + f->total_bit_errors_coded += Nerrs_coded; + f->total_bits_coded += f->bits_per_modem_frame; + } + + /* extract packet sequnce numbers optionally placed in first 8 bits */ + seq = 0; + for(int i=0; i<8; i++) + seq |= f->rx_payload_bits[i] << (7-i); + } + + if (f->fsk_ldpc_state == 1) rx_status |= RX_SYNC; /* need this set before verbose logging fprintf() */ + if (((f->verbose == 1) && (rx_status & RX_BITS)) || (f->verbose == 2)) { + fprintf(stderr, "%3d nbits: %3d st: %d uwloc: %3d uwerr: %2d bad_uw: %d snrdB: %4.1f eraw: %3d ecdd: %3d " + "iter: %3d pcc: %3d seq: %3d rxst: %s\n", + ++(f->frames), f->frame_llr_nbits, f->fsk_ldpc_state, f->fsk_ldpc_best_location, errors, + f->fsk_ldpc_baduw, f->snr_est, Nerrs_raw, Nerrs_coded, iter, parityCheckCount, + seq, rx_sync_flags_to_text[rx_status]); + } + } + else { + /* set RX_SYNC flag even if we don't perform frame processing */ + if (f->fsk_ldpc_state == 1) rx_status |= RX_SYNC; + } + + return rx_status; +} + + +int freedv_comprx_fsk(struct freedv *f, COMP demod_in[]) { + /* Varicode and protocol bits */ + uint8_t vc_bits[2]; + uint8_t proto_bits[3]; + short vc_bit; + int i; + int n_ascii; + char ascii_out; + int rx_status = 0; + + if(FDV_MODE_ACTIVE( FREEDV_MODE_2400A, f->mode) || FDV_MODE_ACTIVE( FREEDV_MODE_800XA, f->mode)){ + fsk_demod(f->fsk,(uint8_t*)f->tx_bits,demod_in); + f->nin = fsk_nin(f->fsk); + float EbNodB = f->fsk->stats->snr_est; /* fsk demod actually estimates Eb/No */ + f->snr_est = EbNodB + 10.0*log10f(800.0/3000.0); /* so convert to SNR Rb=800, noise B=3000 */ + } else{ + /* 2400B needs real input samples */ + int n = fmfsk_nin(f->fmfsk); + float demod_in_float[n]; + for(i=0; ifmfsk,(uint8_t*)f->tx_bits,demod_in_float); + f->nin = fmfsk_nin(f->fmfsk); + } + + rx_status = fvhff_deframe_bits(f->deframer,f->rx_payload_bits,proto_bits,vc_bits,(uint8_t*)f->tx_bits); + if((rx_status & RX_SYNC) && (rx_status & RX_BITS)){ + /* Decode varicode text */ + for(i=0; i<2; i++){ + /* Note: deframe_bits spits out bits in uint8_ts while varicode_decode expects shorts */ + vc_bit = vc_bits[i]; + n_ascii = varicode_decode(&f->varicode_dec_states, &ascii_out, &vc_bit, 1, 1); + if (n_ascii && (f->freedv_put_next_rx_char != NULL)) { + (*f->freedv_put_next_rx_char)(f->callback_state, ascii_out); + } + } + /* Pass proto bits on down if callback is present */ + if( f->freedv_put_next_proto != NULL){ + (*f->freedv_put_next_proto)(f->proto_callback_state,(char*)proto_bits); + } + } + f->sync = f->deframer->state; + f->stats.sync = f->deframer->state; + + return rx_status; +} + + +int freedv_floatrx(struct freedv *f, short speech_out[], float demod_in[]) { + assert(f != NULL); + int i; + int nin = freedv_nin(f); + + assert(nin <= f->n_max_modem_samples); + + COMP rx_fdm[f->n_max_modem_samples]; + for(i=0; i. +*/ + +#include +#include +#include +#include +#include +#include +#include + +#include "freedv_api.h" +#include "modem_stats.h" + +#include "codec2.h" + + +struct my_callback_state { + int calls; + FILE *ftxt; +}; + +/* Called when a packet has been received */ +void my_datarx(void *callback_state, unsigned char *packet, size_t size) { + struct my_callback_state* pstate = (struct my_callback_state*)callback_state; + + pstate->calls++; + + if (pstate->ftxt != NULL) { + size_t i; + + fprintf(pstate->ftxt, "data (%zd bytes): ", size); + for (i = 0; i < size; i++) { + fprintf(pstate->ftxt, "0x%02x ", packet[i]); + } + fprintf(pstate->ftxt, "\n"); + } +} + +/* Called when a new packet can be send */ +void my_datatx(void *callback_state, unsigned char *packet, size_t *size) { + /* This should not happen while receiving.. */ + fprintf(stderr, "datarx callback called, this should not happen!\n"); + *size = 0; +} + +int main(int argc, char *argv[]) { + FILE *fin, *fout, *ftxt; + struct freedv *freedv; + int nin, nout, nout_total = 0, frame = 0; + struct my_callback_state my_cb_state = {0}; + int mode; + int use_codecrx, verbose; + struct CODEC2 *c2 = NULL; + int i; + + + if (argc < 4) { + printf("usage: %s 2400A|2400B|800XA InputModemSpeechFile OutputSpeechRawFile\n" + " [--codecrx] [-v]\n", argv[0]); + printf("e.g %s 2400A hts1a_fdmdv.raw hts1a_out.raw\n", argv[0]); + exit(1); + } + + mode = -1; + if (!strcmp(argv[1],"2400A")) + mode = FREEDV_MODE_2400A; + if (!strcmp(argv[1],"2400B")) + mode = FREEDV_MODE_2400B; + if (!strcmp(argv[1],"800XA")) + mode = FREEDV_MODE_800XA; + assert(mode != -1); + + if (strcmp(argv[2], "-") == 0) fin = stdin; + else if ( (fin = fopen(argv[2],"rb")) == NULL ) { + fprintf(stderr, "Error opening input raw modem sample file: %s: %s.\n", + argv[2], strerror(errno)); + exit(1); + } + + if (strcmp(argv[3], "-") == 0) fout = stdout; + else if ( (fout = fopen(argv[3],"wb")) == NULL ) { + fprintf(stderr, "Error opening output speech sample file: %s: %s.\n", + argv[3], strerror(errno)); + exit(1); + } + + use_codecrx = 0; verbose = 0; + + if (argc > 4) { + for (i = 4; i < argc; i++) { + if (strcmp(argv[i], "--codecrx") == 0) { + int c2_mode; + + if ((mode == FREEDV_MODE_700C) || (mode == FREEDV_MODE_700D) || (mode == FREEDV_MODE_800XA)) { + c2_mode = CODEC2_MODE_700C; + } else { + c2_mode = CODEC2_MODE_1300; + } + use_codecrx = 1; + + c2 = codec2_create(c2_mode); + assert(c2 != NULL); + } + + if (strcmp(argv[i], "-v") == 0) { + verbose = 1; + } + if (strcmp(argv[i], "-vv") == 0) { + verbose = 2; + } + } + } + + freedv = freedv_open(mode); + assert(freedv != NULL); + + freedv_set_verbose(freedv, verbose); + + short speech_out[freedv_get_n_max_speech_samples(freedv)]; + short demod_in[freedv_get_n_max_modem_samples(freedv)]; + + ftxt = fopen("freedv_rx_log.txt","wt"); + assert(ftxt != NULL); + my_cb_state.ftxt = ftxt; + freedv_set_callback_data(freedv, my_datarx, my_datatx, &my_cb_state); + + /* Note we need to work out how many samples demod needs on each + call (nin). This is used to adjust for differences in the tx and rx + sample clock frequencies. Note also the number of output + speech samples is time varying (nout). */ + + nin = freedv_nin(freedv); + while(fread(demod_in, sizeof(short), nin, fin) == nin) { + frame++; + + if (use_codecrx == 0) { + /* usual case: use the freedv_api to do everything: speech decoding, demodulating */ + nout = freedv_rx(freedv, speech_out, demod_in); + } else { + /* demo of codecrx mode - separate demodulation and speech decoding */ + int bits_per_codec_frame = freedv_get_bits_per_codec_frame(freedv); + int bits_per_modem_frame = freedv_get_bits_per_modem_frame(freedv); + int bytes_per_codec_frame = (bits_per_codec_frame + 7) / 8; + int bytes_per_modem_frame = (bits_per_modem_frame + 7) / 8; + int codec_frames = bits_per_modem_frame / bits_per_codec_frame; + int samples_per_frame = codec2_samples_per_frame(c2); + unsigned char encoded[bytes_per_codec_frame * codec_frames]; + unsigned char rawdata[bytes_per_modem_frame]; + + nout = 0; + + /* Use the freedv_api to demodulate only */ + int ncodec = freedv_rawdatarx(freedv, rawdata, demod_in); + freedv_codec_frames_from_rawdata(freedv, encoded, rawdata); + + /* decode the speech ourself (or send it to elsewhere, e.g. network) */ + if (ncodec) { + unsigned char *enc_frame = encoded; + short *speech_frame = speech_out; + + for (i = 0; i < codec_frames; i++) { + codec2_decode(c2, speech_frame, enc_frame); + enc_frame += bytes_per_codec_frame; + speech_frame += samples_per_frame; + nout += samples_per_frame; + } + } + } + fprintf(ftxt, "Demod of %d samples resulted %d speech samples\n", nin, nout); + + if (nout == 0) + { + /* We did not get any audio. + This means the modem is (probably) synced, but a data frame was received + Fill in the 'blanks' use by data frames with silence + */ + nout = freedv_get_n_speech_samples(freedv); + memset(speech_out, 0, nout * sizeof(short)); + } + + nin = freedv_nin(freedv); + + fwrite(speech_out, sizeof(short), nout, fout); + nout_total += nout; + + /* if this is in a pipeline, we probably don't want the usual + buffering to occur */ + + if (fout == stdout) fflush(stdout); + if (fin == stdin) fflush(stdin); + } + + fclose(ftxt); + fclose(fin); + fclose(fout); + fprintf(stderr, "frames decoded: %d output speech samples: %d, data packets: %d\n", frame, nout_total, my_cb_state.calls); + + freedv_close(freedv); + return 0; +} + diff --git a/libcodec2-android/src/codec2/src/freedv_mixed_tx.c b/libcodec2-android/src/codec2/src/freedv_mixed_tx.c new file mode 100644 index 0000000..6aacbab --- /dev/null +++ b/libcodec2-android/src/codec2/src/freedv_mixed_tx.c @@ -0,0 +1,377 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: freedv_mixed_tx.c + AUTHOR......: Jeroen Vreeken & David Rowe + DATE CREATED: May 2020 + + Demo transmit program for FreeDV API that demonstrates shows mixed + VHF packet data and speech frames. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2014 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "freedv_api.h" +#include "codec2.h" + +/********************************************************** + Encoding an ITU callsign (and 4 bit secondary station ID to a valid MAC address. + http://dmlinking.net/eth_ar.html + */ + +// Lookup table for valid callsign characters +static char alnum2code[37] = { + '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', + 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', + 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', + 0 +}; + +// Encode a callsign and ssid into a valid MAC address +static int eth_ar_call2mac(uint8_t mac[6], char *callsign, int ssid, bool multicast) +{ + uint64_t add = 0; + int i; + + if (ssid > 15 || ssid < 0) + return -1; + + for (i = 7; i >= 0; i--) { + char c; + + if (i >= strlen(callsign)) { + c = 0; + } else { + c = toupper(callsign[i]); + } + + int j; + + for (j = 0; j < sizeof(alnum2code); j++) { + if (alnum2code[j] == c) + break; + } + if (j == sizeof(alnum2code)) + return -1; + + add *= 37; + add += j; + } + + mac[0] = ((add >> (40 - 6)) & 0xc0) | (ssid << 2) | 0x02 | multicast; + mac[1] = (add >> 32) & 0xff; + mac[2] = (add >> 24) & 0xff; + mac[3] = (add >> 16) & 0xff; + mac[4] = (add >> 8) & 0xff; + mac[5] = add & 0xff; + + return 0; +} + + +/********************************************************** + Data channel callback functions + */ + + +struct my_callback_state { + int calls; + + unsigned char mac[6]; +}; + +/* + Called when a packet has been received + Should not be called in this tx-only test program + */ +void my_datarx(void *callback_state, unsigned char *packet, size_t size) +{ + /* This should not happen while sending... */ + fprintf(stderr, "datarx callback called, this should not happen!\n"); +} + + +/* + Called when a new packet can be send. + + callback_state Private state variable, not touched by freedv. + packet Data array where new packet data is expected + size Available size in packet. On return the actual size of the packet + */ +void my_datatx(void *callback_state, unsigned char *packet, size_t *size) +{ + static int data_type; + struct my_callback_state *my_cb_state = callback_state; + my_cb_state->calls++; + + /* Data could come from a network interface, here we just make up some */ + + if (data_type % 4 == 1) { + /* + Generate a packet with simple test pattern (counting + */ + + /* Send a packet with data */ + int i; + + /* Destination: broadcast */ + memset(packet, 0xff, 6); + /* Source: our eth_ar encoded callsign+ssid */ + memcpy(packet+6, my_cb_state->mac, 6); + /* Ether type: experimental (since this is just a test pattern) */ + packet[12] = 0x01; + packet[13] = 0x01; + + for (i = 0; i < 64; i++) + packet[i + 14] = i; + *size = i + 14; + } else if (data_type % 4 == 2) { + /* + Generate an FPRS position report + */ + + /* Destination: broadcast */ + memset(packet, 0xff, 6); + /* Source: our eth_ar encoded callsign+ssid */ + memcpy(packet+6, my_cb_state->mac, 6); + /* Ether type: FPRS */ + packet[12] = 0x73; + packet[13] = 0x70; + + packet[14] = 0x07; // Position element Lon 86.925026 Lat 27.987850 + packet[15] = 0x3d; // + packet[16] = 0xd0; + packet[17] = 0x37; + packet[18] = 0xd0 | 0x08 | 0x01; + packet[19] = 0x3e; + packet[20] = 0x70; + packet[21] = 0x85; + + *size = 22; + } else { + /* + Set size to zero, the freedv api will insert a header frame + This is usefull for identifying ourselves + */ + *size = 0; + } + + data_type++; +} + + +/* Determine the amount of 'energy' in the samples by squaring them + This is not a perfect VAD as noise may trigger it, but works well for demonstrations. + */ +static float samples_get_energy(short *samples, int nr) +{ + float e = 0; + int i; + + for (i = 0; i < nr; i++) { + e += (float)(samples[i] * samples[i]) / (8192); + } + e /= nr; + + return e; +} + +int main(int argc, char *argv[]) { + FILE *fin, *fout; + short *speech_in; + short *mod_out; + struct freedv *freedv; + struct my_callback_state my_cb_state; + int mode; + int n_speech_samples; + int n_nom_modem_samples; + char *callsign = "NOCALL"; + int ssid = 0; + bool multicast = false; + int use_codectx; + struct CODEC2 *c2; + int i; + float data_threshold = 15; + + if (argc < 4) { + printf("usage: %s 2400A|2400B|800XA InputRawSpeechFile OutputModemRawFile\n" + " [--codectx] [--callsign callsign] [--ssid ssid] [--mac-multicast 0|1] [--data-threshold val]\n", argv[0]); + printf("e.g %s 2400A hts1a.raw hts1a_fdmdv.raw\n", argv[0]); + exit(1); + } + + mode = -1; + if (!strcmp(argv[1],"2400A")) + mode = FREEDV_MODE_2400A; + if (!strcmp(argv[1],"2400B")) + mode = FREEDV_MODE_2400B; + if (!strcmp(argv[1],"800XA")) + mode = FREEDV_MODE_800XA; + if (mode == -1) { + fprintf(stderr, "Error in mode: %s\n", argv[1]); + exit(0); + } + + if (strcmp(argv[2], "-") == 0) fin = stdin; + else if ( (fin = fopen(argv[2],"rb")) == NULL ) { + fprintf(stderr, "Error opening input raw speech sample file: %s: %s.\n", argv[2], strerror(errno)); + exit(1); + } + + if (strcmp(argv[3], "-") == 0) fout = stdout; + else if ( (fout = fopen(argv[3],"wb")) == NULL ) { + fprintf(stderr, "Error opening output modem sample file: %s: %s.\n", argv[3], strerror(errno)); + exit(1); + } + + use_codectx = 0; + + if (argc > 4) { + for (i = 4; i < argc; i++) { + if (strcmp(argv[i], "--codectx") == 0) { + int c2_mode; + + if ((mode == FREEDV_MODE_700C) || (mode == FREEDV_MODE_700D) || (mode == FREEDV_MODE_800XA)) { + c2_mode = CODEC2_MODE_700C; + } else { + c2_mode = CODEC2_MODE_1300; + } + use_codectx = 1; + c2 = codec2_create(c2_mode); + assert(c2 != NULL); + } + if (strcmp(argv[i], "--callsign") == 0) { + callsign = argv[i+1]; + } + if (strcmp(argv[i], "--ssid") == 0) { + ssid = atoi(argv[i+1]); + } + if (strcmp(argv[i], "--mac-multicast") == 0) { + multicast = atoi(argv[i+1]); + } + if (strcmp(argv[i], "--data-threshold") == 0) { + data_threshold = atof(argv[i+1]); + } + } + } + + freedv = freedv_open(mode); + assert(freedv != NULL); + + /* Generate our address */ + eth_ar_call2mac(my_cb_state.mac, callsign, ssid, multicast); + + freedv_set_data_header(freedv, my_cb_state.mac); + + freedv_set_verbose(freedv, 1); + + n_speech_samples = freedv_get_n_speech_samples(freedv); + n_nom_modem_samples = freedv_get_n_nom_modem_samples(freedv); + speech_in = (short*)malloc(sizeof(short)*n_speech_samples); + assert(speech_in != NULL); + mod_out = (short*)malloc(sizeof(short)*n_nom_modem_samples); + assert(mod_out != NULL); + //fprintf(stderr, "n_speech_samples: %d n_nom_modem_samples: %d\n", n_speech_samples, n_nom_modem_samples); + + /* set up callback for data packets */ + freedv_set_callback_data(freedv, my_datarx, my_datatx, &my_cb_state); + + /* OK main loop */ + + while(fread(speech_in, sizeof(short), n_speech_samples, fin) == n_speech_samples) { + if (use_codectx == 0) { + /* Use the freedv_api to do everything: speech encoding, modulating + */ + float energy = samples_get_energy(speech_in, n_speech_samples); + + /* Is the audio fragment quiet? */ + if (energy < data_threshold) { + /* Insert a frame with data instead of speech */ + freedv_datatx(freedv, mod_out); + } else { + /* transmit voice frame */ + freedv_tx(freedv, mod_out, speech_in); + } + } else { + /* Use the freedv_api to do the modem part, encode ourselves + - First encode the frames + - Get activity from codec2 api + - Based on activity either send encoded voice or data + */ + int bits_per_codec_frame = freedv_get_bits_per_codec_frame(freedv); + int bits_per_modem_frame = freedv_get_bits_per_modem_frame(freedv); + int bytes_per_codec_frame = (bits_per_codec_frame + 7) / 8; + int bytes_per_modem_frame = (bits_per_modem_frame + 7) / 8; + int codec_frames = bits_per_modem_frame / bits_per_codec_frame; + int samples_per_frame = codec2_samples_per_frame(c2); + unsigned char encoded[bytes_per_codec_frame * codec_frames]; + unsigned char rawdata[bytes_per_modem_frame]; + unsigned char *enc_frame = encoded; + short *speech_frame = speech_in; + float energy = 0; + + /* Encode the speech ourself (or get it from elsewhere, e.g. network) */ + for (i = 0; i < codec_frames; i++) { + codec2_encode(c2, enc_frame, speech_frame); + energy += codec2_get_energy(c2, enc_frame); + enc_frame += bytes_per_codec_frame; + speech_frame += samples_per_frame; + } + energy /= codec_frames; + + /* Is the audio fragment quiet? */ + if (energy < data_threshold) { + /* Insert a frame with data instead of speech */ + freedv_datatx(freedv, mod_out); + } else { + /* Use the freedv_api to modulate already encoded frames */ + freedv_rawdata_from_codec_frames(freedv, rawdata, encoded); + freedv_rawdatatx(freedv, mod_out, rawdata); + } + } + + fwrite(mod_out, sizeof(short), n_nom_modem_samples, fout); + + /* if this is in a pipeline, we probably don't want the usual + buffering to occur */ + if (fout == stdout) fflush(stdout); + if (fin == stdin) fflush(stdin); + + } + + free(speech_in); + free(mod_out); + freedv_close(freedv); + fclose(fin); + fclose(fout); + + fclose(stdin); + fclose(stderr); + + return 0; +} + diff --git a/libcodec2-android/src/codec2/src/freedv_rx.c b/libcodec2-android/src/codec2/src/freedv_rx.c new file mode 100644 index 0000000..56888e8 --- /dev/null +++ b/libcodec2-android/src/codec2/src/freedv_rx.c @@ -0,0 +1,226 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: freedv_rx.c + AUTHOR......: David Rowe + DATE CREATED: August 2014 + + Demo/development receive program for FreeDV API functions: + + Example usage (all one line): + + $ cd codec2/build_linux/src + $ ./freedv_tx 1600 ../../raw/ve9qrp_10s.raw - | ./freedv_rx 1600 - - | aplay -f S16 + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2014 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include +#include +#include +#include +#include +#include + +#include "freedv_api.h" +#include "modem_stats.h" + +#define NDISCARD 5 /* BER measure optionally discards first few frames after sync */ + +int main(int argc, char *argv[]) { + FILE *fin, *fout; + struct freedv *freedv; + int nin, nout, nout_total = 0, frame = 0; + struct MODEM_STATS stats = {0}; + int mode; + int sync; + float snr_est; + float clock_offset; + int use_testframes, verbose, discard, use_complex, use_dpsk; + int use_squelch; + float squelch = 0; + int i; + + if (argc < 4) { + char f2020[80] = {0}; + #ifdef __LPCNET__ + sprintf(f2020,"|2020"); + #endif + printf("usage: %s 1600|700C|700D|2400A|2400B|800XA%s InputModemSpeechFile OutputSpeechRawFile\n" + " [--testframes] [-v] [--discard] [--usecomplex] [--dpsk] [--squelch leveldB]\n", argv[0],f2020); + printf("e.g %s 1600 hts1a_fdmdv.raw hts1a_out.raw\n", argv[0]); + exit(1); + } + + mode = -1; + if (!strcmp(argv[1],"1600")) mode = FREEDV_MODE_1600; + if (!strcmp(argv[1],"700C")) mode = FREEDV_MODE_700C; + if (!strcmp(argv[1],"700D")) mode = FREEDV_MODE_700D; + if (!strcmp(argv[1],"2400A")) mode = FREEDV_MODE_2400A; + if (!strcmp(argv[1],"2400B")) mode = FREEDV_MODE_2400B; + if (!strcmp(argv[1],"800XA")) mode = FREEDV_MODE_800XA; + #ifdef __LPCNET__ + if (!strcmp(argv[1],"2020")) mode = FREEDV_MODE_2020; + #endif + if (mode == -1) { + fprintf(stderr, "Error in mode: %s\n", argv[1]); + exit(1); + } + + if (strcmp(argv[2], "-") == 0) fin = stdin; + else if ( (fin = fopen(argv[2],"rb")) == NULL ) { + fprintf(stderr, "Error opening input raw modem sample file: %s: %s.\n", + argv[2], strerror(errno)); + exit(1); + } + + if (strcmp(argv[3], "-") == 0) fout = stdout; + else if ( (fout = fopen(argv[3],"wb")) == NULL ) { + fprintf(stderr, "Error opening output speech sample file: %s: %s.\n", + argv[3], strerror(errno)); + exit(1); + } + + use_testframes = verbose = discard = use_complex = use_dpsk = use_squelch = 0; + + if (argc > 4) { + for (i = 4; i < argc; i++) { + if (strcmp(argv[i], "--testframes") == 0) use_testframes = 1; + else if (strcmp(argv[i], "-v") == 0) verbose = 1; + else if (strcmp(argv[i], "-vv") == 0) verbose = 2; + else if (strcmp(argv[i], "--discard") == 0) discard = 1; + else if (strcmp(argv[i], "--usecomplex") == 0) use_complex = 1; + else if (strcmp(argv[i], "--squelch") == 0) { + squelch = atof(argv[i + 1]); + i++; + use_squelch = 1; + } else if (strcmp(argv[i], "--dpsk") == 0) use_dpsk = 1; + else { + fprintf(stderr, "unkown option: %s\n", argv[i]); + exit(1); + } + } + } + + freedv = freedv_open(mode); + assert(freedv != NULL); + + /* set up a few options, calling these is optional -------------------------*/ + + freedv_set_test_frames(freedv, use_testframes); + freedv_set_verbose(freedv, verbose); + + if (use_squelch) { + freedv_set_snr_squelch_thresh(freedv, squelch); + freedv_set_squelch_en(freedv, 1); + } + freedv_set_dpsk(freedv, use_dpsk); + + /* note use of API functions to tell us how big our buffers need to be -----*/ + + short speech_out[freedv_get_n_max_speech_samples(freedv)]; + short demod_in[freedv_get_n_max_modem_samples(freedv)]; + + /* We need to work out how many samples the demod needs on each + call (nin). This is used to adjust for differences in the tx + and rx sample clock frequencies. Note also the number of + output speech samples "nout" is time varying. */ + + nin = freedv_nin(freedv); + while(fread(demod_in, sizeof(short), nin, fin) == nin) { + frame++; + + if (use_complex) { + /* exercise the complex version of the API (useful + for testing 700D which has a different code path for + short samples) */ + COMP demod_in_complex[nin]; + + for(int i=0; i. +*/ + +#include +#include +#include +#include +#include + +#include "freedv_api.h" + +struct my_callback_state { + char tx_str[80]; + char *ptx_str; + int calls; +}; + +char my_get_next_tx_char(void *callback_state) { + struct my_callback_state* pstate = (struct my_callback_state*)callback_state; + char c = *pstate->ptx_str++; + + //fprintf(stderr, "my_get_next_tx_char: %c\n", c); + + if (*pstate->ptx_str == 0) { + pstate->ptx_str = pstate->tx_str; + } + + return c; +} + +int main(int argc, char *argv[]) { + FILE *fin, *fout; + struct freedv *freedv; + int mode; + int use_testframes, use_clip, use_txbpf, use_dpsk; + int i; + + if (argc < 4) { + char f2020[80] = {0}; + #ifdef __LPCNET__ + sprintf(f2020,"|2020"); + #endif + printf("usage: %s 1600|700C|700D|2400A|2400B|800XA%s InputRawSpeechFile OutputModemRawFile\n" + " [--testframes] [--clip 0|1] [--txbpf 0|1] [--dpsk]\n", argv[0], f2020); + printf("e.g %s 1600 hts1a.raw hts1a_fdmdv.raw\n", argv[0]); + exit(1); + } + + mode = -1; + if (!strcmp(argv[1],"1600")) mode = FREEDV_MODE_1600; + if (!strcmp(argv[1],"700C")) mode = FREEDV_MODE_700C; + if (!strcmp(argv[1],"700D")) mode = FREEDV_MODE_700D; + if (!strcmp(argv[1],"2400A")) mode = FREEDV_MODE_2400A; + if (!strcmp(argv[1],"2400B")) mode = FREEDV_MODE_2400B; + if (!strcmp(argv[1],"800XA")) mode = FREEDV_MODE_800XA; + #ifdef __LPCNET__ + if (!strcmp(argv[1],"2020")) mode = FREEDV_MODE_2020; + #endif + if (mode == -1) { + fprintf(stderr, "Error in mode: %s\n", argv[1]); + exit(1); + } + + if (strcmp(argv[2], "-") == 0) fin = stdin; + else if ( (fin = fopen(argv[2],"rb")) == NULL ) { + fprintf(stderr, "Error opening input raw speech sample file: %s: %s.\n", argv[2], strerror(errno)); + exit(1); + } + + if (strcmp(argv[3], "-") == 0) fout = stdout; + else if ( (fout = fopen(argv[3],"wb")) == NULL ) { + fprintf(stderr, "Error opening output modem sample file: %s: %s.\n", argv[3], strerror(errno)); + exit(1); + } + + use_testframes = 0; use_clip = 0; use_txbpf = 1; use_dpsk = 0; + + if (argc > 4) { + for (i = 4; i < argc; i++) { + if (strcmp(argv[i], "--testframes") == 0) use_testframes = 1; + else if (strcmp(argv[i], "--clip") == 0) { use_clip = atoi(argv[i+1]); i++; } + else if (strcmp(argv[i], "--txbpf") == 0) { use_txbpf = atoi(argv[i+1]); i++; } + else if (strcmp(argv[i], "--dpsk") == 0) use_dpsk = 1; + else { + fprintf(stderr, "unknown option: %s\n", argv[i]); + exit(1); + } + } + } + + freedv = freedv_open(mode); + assert(freedv != NULL); + + /* these are all optional ------------------ */ + freedv_set_test_frames(freedv, use_testframes); + freedv_set_clip(freedv, use_clip); + freedv_set_tx_bpf(freedv, use_txbpf); + freedv_set_dpsk(freedv, use_dpsk); + freedv_set_verbose(freedv, 1); + + /* set up callback for txt msg chars */ + struct my_callback_state my_cb_state; + sprintf(my_cb_state.tx_str, "cq cq cq hello world\r"); + my_cb_state.ptx_str = my_cb_state.tx_str; + my_cb_state.calls = 0; + freedv_set_callback_txt(freedv, NULL, &my_get_next_tx_char, &my_cb_state); + + /* handy functions to set buffer sizes, note tx/modulator always + returns freedv_get_n_nom_modem_samples() (unlike rx side) */ + int n_speech_samples = freedv_get_n_speech_samples(freedv); + short speech_in[n_speech_samples]; + int n_nom_modem_samples = freedv_get_n_nom_modem_samples(freedv); + short mod_out[n_nom_modem_samples]; + + /* OK main loop --------------------------------------- */ + + while(fread(speech_in, sizeof(short), n_speech_samples, fin) == n_speech_samples) { + freedv_tx(freedv, mod_out, speech_in); + fwrite(mod_out, sizeof(short), n_nom_modem_samples, fout); + + /* if using pipes we don't want the usual buffering to occur */ + if (fout == stdout) fflush(stdout); + if (fin == stdin) fflush(stdin); + } + + freedv_close(freedv); + fclose(fin); + fclose(fout); + + return 0; +} + diff --git a/libcodec2-android/src/codec2/src/freedv_vhf_framing.c b/libcodec2-android/src/codec2/src/freedv_vhf_framing.c new file mode 100644 index 0000000..23b71e2 --- /dev/null +++ b/libcodec2-android/src/codec2/src/freedv_vhf_framing.c @@ -0,0 +1,866 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: fsk.c + AUTHOR......: Brady O'Brien + DATE CREATED: 11 February 2016 + + Framer and deframer for VHF FreeDV modes 'A' and 'B' + Currently designed for- + * 40ms ota modem frames + * 40ms Codec2 1300 frames + * 52 bits of Codec2 per frame + * 16 bits of unique word per frame + * 28 'spare' bits per frame + * - 4 spare bits at front and end of frame (8 total) for padding + * - 20 'protocol' bits, either for higher layers of 'protocol' or + * - 18 'protocol' bits and 2 vericode sidechannel bits + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2016 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + + +#include +#include +#include +#include +#include +#include "freedv_vhf_framing.h" +#include "freedv_api_internal.h" + +/* The voice UW of the VHF type A frame */ +static const uint8_t A_uw_v[] = {0,1,1,0,0,1,1,1, + 1,0,1,0,1,1,0,1}; + +/* The data UW of the VHF type A frame */ +static const uint8_t A_uw_d[] = {1,1,1,1,0,0,0,1, + 1,1,1,1,1,1,0,0}; + +/* Blank VHF type A frame */ +static const uint8_t A_blank[] = {1,0,1,0,0,1,1,1, /* Padding[0:3] Proto[0:3] */ + 1,0,1,0,0,1,1,1, /* Proto[4:11] */ + 0,0,0,0,0,0,0,0, /* Voice[0:7] */ + 0,0,0,0,0,0,0,0, /* Voice[8:15] */ + 0,0,0,0,0,0,0,0, /* Voice[16:23] */ + 0,1,1,0,0,1,1,1, /* UW[0:7] */ + 1,0,1,0,1,1,0,1, /* UW[8:15] */ + 0,0,0,0,0,0,0,0, /* Voice[24:31] */ + 0,0,0,0,0,0,0,0, /* Voice[32:39] */ + 0,0,0,0,0,0,0,0, /* Voice[40:47] */ + 0,0,0,0,0,0,1,0, /* Voice[48:51] Proto[12:15] */ + 0,1,1,1,0,0,1,0};/* Proto[16:19] Padding[4:7] */ + +/* Blank VHF type AT (A for TDMA; padding bits not transmitted) frame */ +static const uint8_t AT_blank[] = { 0,1,1,1, /* Proto[0:3] */ + 1,0,1,0,0,1,1,1, /* Proto[4:11] */ + 0,0,0,0,0,0,0,0, /* Voice[0:7] */ + 0,0,0,0,0,0,0,0, /* Voice[8:15] */ + 0,0,0,0,0,0,0,0, /* Voice[16:23] */ + 0,1,1,0,0,1,1,1, /* UW[0:7] */ + 1,0,1,0,1,1,0,1, /* UW[8:15] */ + 0,0,0,0,0,0,0,0, /* Voice[24:31] */ + 0,0,0,0,0,0,0,0, /* Voice[32:39] */ + 0,0,0,0,0,0,0,0, /* Voice[40:47] */ + 0,0,0,0,0,0,1,0, /* Voice[48:51] Proto[12:15] */ + 0,1,1,1 };/* Proto[16:19] */ + +/* HF Type B voice UW */ +static const uint8_t B_uw_v[] = {0,1,1,0,0,1,1,1}; + +/* HF Type B data UW */ +static const uint8_t B_uw_d[] = {1,1,1,1,0,0,1,0}; + +/* Blank HF type B frame */ +static const uint8_t B_blank[] = {0,1,1,0,0,1,1,1, /* UW[0:7] */ + 0,0,0,0,0,0,0,0, /* Voice1[0:7] */ + 0,0,0,0,0,0,0,0, /* Voice1[8:15] */ + 0,0,0,0,0,0,0,0, /* Voice1[16:23] */ + 0,0,0,0,0,0,0,0, /* Voice1[24:28] Voice2[0:3] */ + 0,0,0,0,0,0,0,0, /* Voice2[4:11] */ + 0,0,0,0,0,0,0,0, /* Voice2[12:19] */ + 0,0,0,0,0,0,0,0};/* Voice2[20:28] */ + +/* States */ +#define ST_NOSYNC 0 /* Not synchronized */ +#define ST_SYNC 1 /* Synchronized */ + +/* Get a single bit out of an MSB-first packed byte array */ +#define UNPACK_BIT_MSBFIRST(bytes,bitidx) ((bytes)[(bitidx)>>3]>>(7-((bitidx)&0x7)))&0x1 + +enum frame_payload_type { + FRAME_PAYLOAD_TYPE_VOICE, + FRAME_PAYLOAD_TYPE_DATA, +}; + +/* Place codec and other bits into a frame */ +void fvhff_frame_bits( int frame_type, + uint8_t bits_out[], + uint8_t codec2_in[], + uint8_t proto_in[], + uint8_t vc_in[]){ + int i,ibit; + if(frame_type == FREEDV_VHF_FRAME_A){ + /* Fill out frame with blank frame prototype */ + for(i=0; i<96; i++) + bits_out[i] = A_blank[i]; + + /* Fill in protocol bits, if present */ + if(proto_in!=NULL){ + ibit = 0; + /* First half of protocol bits */ + /* Extract and place in frame, MSB first */ + for(i=4 ; i<16; i++){ + bits_out[i] = UNPACK_BIT_MSBFIRST(proto_in,ibit); + ibit++; + } + /* Last set of protocol bits */ + for(i=84; i<92; i++){ + bits_out[i] = UNPACK_BIT_MSBFIRST(proto_in,ibit); + ibit++; + } + } + + /* Fill in varicode bits, if present */ + if(vc_in!=NULL){ + bits_out[90] = vc_in[0]; + bits_out[91] = vc_in[1]; + } + + /* Fill in codec2 bits, present or not */ + ibit = 0; + for(i=16; i<40; i++){ /* First half */ + bits_out[i] = UNPACK_BIT_MSBFIRST(codec2_in,ibit); + ibit++; + } + for(i=56; i<84; i++){ /* Second half */ + bits_out[i] = UNPACK_BIT_MSBFIRST(codec2_in,ibit); + ibit++; + } + }else if(frame_type == FREEDV_HF_FRAME_B){ + /* Pointers to both c2 frames so the bit unpack macro works */ + uint8_t * codec2_in1 = &codec2_in[0]; + uint8_t * codec2_in2 = &codec2_in[4]; + /* Fill out frame with blank prototype */ + for(i=0; i<64; i++) + bits_out[i] = B_blank[i]; + + /* Fill out first codec2 block */ + ibit=0; + for(i=8; i<36; i++){ + bits_out[i] = UNPACK_BIT_MSBFIRST(codec2_in1,ibit); + ibit++; + } + /* Fill out second codec2 block */ + ibit=0; + for(i=36; i<64; i++){ + bits_out[i] = UNPACK_BIT_MSBFIRST(codec2_in2,ibit); + ibit++; + } + }else if(frame_type == FREEDV_VHF_FRAME_AT){ + /* Fill out frame with blank frame prototype */ + for(i=0; i<88; i++) + bits_out[i] = AT_blank[i]; + + /* Fill in protocol bits, if present */ + if(proto_in!=NULL){ + ibit = 0; + /* First half of protocol bits */ + /* Extract and place in frame, MSB first */ + for(i=0 ; i<12; i++){ + bits_out[i] = UNPACK_BIT_MSBFIRST(proto_in,ibit); + ibit++; + } + /* Last set of protocol bits */ + for(i=80; i<88; i++){ + bits_out[i] = UNPACK_BIT_MSBFIRST(proto_in,ibit); + ibit++; + } + } + + /* Fill in varicode bits, if present */ + if(vc_in!=NULL){ + bits_out[86] = vc_in[0]; + bits_out[87] = vc_in[1]; + } + + /* Fill in codec2 bits, present or not */ + ibit = 0; + for(i=12; i<36; i++){ /* First half */ + bits_out[i] = UNPACK_BIT_MSBFIRST(codec2_in,ibit); + ibit++; + } + for(i=52; i<80; i++){ /* Second half */ + bits_out[i] = UNPACK_BIT_MSBFIRST(codec2_in,ibit); + ibit++; + } + } +} + +/* Place data and other bits into a frame */ +void fvhff_frame_data_bits(struct freedv_vhf_deframer * def, int frame_type, + uint8_t bits_out[]){ + int i,ibit; + if(frame_type == FREEDV_VHF_FRAME_A){ + uint8_t data[8]; + int end_bits; + int from_bit; + int bcast_bit; + int crc_bit; + + /* Fill out frame with blank frame prototype */ + for(i=0; i<4; i++) + bits_out[i] = A_blank[i]; + for(i=92; i<96; i++) + bits_out[i] = A_blank[i]; + + /* UW data */ + for (i=0; i < 16; i++) + bits_out[40 + i] = A_uw_d[i]; + + if (def->fdc) + freedv_data_channel_tx_frame(def->fdc, data, 8, &from_bit, &bcast_bit, &crc_bit, &end_bits); + else + return; + + bits_out[4] = from_bit; + bits_out[5] = bcast_bit; + bits_out[6] = 0; /* unused */ + bits_out[7] = 0; /* unused */ + + /* Fill in data bits */ + ibit = 0; + for(i=8; i<40; i++){ /* First half */ + bits_out[i] = UNPACK_BIT_MSBFIRST(data,ibit); + ibit++; + } + for(i=56; i<88; i++){ /* Second half */ + bits_out[i] = UNPACK_BIT_MSBFIRST(data,ibit); + ibit++; + } + + for (i = 0; i < 4; i++) + bits_out[88 + i] = (end_bits >> (3-i)) & 0x1; + } else if (frame_type == FREEDV_HF_FRAME_B){ + uint8_t data[6]; + int end_bits; + int from_bit; + int bcast_bit; + int crc_bit; + + /* Fill out frame with blank prototype */ + for(i=0; i<64; i++) + bits_out[i] = B_blank[i]; + + /* UW data */ + for (i=0; i < 8; i++) + bits_out[0 + i] = B_uw_d[i]; + + if (def->fdc) + freedv_data_channel_tx_frame(def->fdc, data, 6, &from_bit, &bcast_bit, &crc_bit, &end_bits); + else + return; + + bits_out[56] = from_bit; + bits_out[57] = bcast_bit; + bits_out[58] = crc_bit; + bits_out[59] = 0; /* unused */ + + /* Fill in data bits */ + ibit = 0; + for(i=8; i<56; i++){ /* First half */ + bits_out[i] = UNPACK_BIT_MSBFIRST(data,ibit); + ibit++; + } + for (i = 0; i < 4; i++) + bits_out[60 + i] = (end_bits >> (3-i)) & 0x1; + } +} + +/* Init and allocate memory for a freedv-vhf framer/deframer */ +struct freedv_vhf_deframer * fvhff_create_deframer(uint8_t frame_type, int enable_bit_flip){ + struct freedv_vhf_deframer * deframer; + uint8_t *bits,*invbits; + int frame_size; + int uw_size; + + assert( (frame_type == FREEDV_VHF_FRAME_A) || (frame_type == FREEDV_HF_FRAME_B) ); + + /* It's a Type A frame */ + if(frame_type == FREEDV_VHF_FRAME_A){ + frame_size = 96; + uw_size = 16; + }else if(frame_type == FREEDV_HF_FRAME_B){ + frame_size = 64; + uw_size = 8; + }else{ + return NULL; + } + + /* Allocate memory for the thing */ + deframer = malloc(sizeof(struct freedv_vhf_deframer)); + if(deframer == NULL) + return NULL; + + /* Allocate the not-bit buffer */ + if(enable_bit_flip){ + invbits = malloc(sizeof(uint8_t)*frame_size); + if(invbits == NULL) { + free(deframer); + return NULL; + } + }else{ + invbits = NULL; + } + + /* Allocate the bit buffer */ + bits = malloc(sizeof(uint8_t)*frame_size); + if(bits == NULL) { + free(deframer); + return NULL; + } + + deframer->bits = bits; + deframer->invbits = invbits; + deframer->ftype = frame_type; + deframer->state = ST_NOSYNC; + deframer->bitptr = 0; + deframer->last_uw = 0; + deframer->miss_cnt = 0; + deframer->frame_size = frame_size; + deframer->uw_size = uw_size; + deframer->on_inv_bits = 0; + deframer->sym_size = 1; + + deframer->ber_est = 0; + deframer->total_uw_bits = 0; + deframer->total_uw_err = 0; + + deframer->fdc = NULL; + + return deframer; +} + +/* Get size of frame in bits */ +int fvhff_get_frame_size(struct freedv_vhf_deframer * def){ + return def->frame_size; +} + +/* Codec2 size in bytes */ +int fvhff_get_codec2_size(struct freedv_vhf_deframer * def){ + if(def->ftype == FREEDV_VHF_FRAME_A){ + return 7; + } else if(def->ftype == FREEDV_HF_FRAME_B){ + return 8; + } else{ + return 0; + } +} + +/* Protocol bits in bits */ +int fvhff_get_proto_size(struct freedv_vhf_deframer * def){ + if(def->ftype == FREEDV_VHF_FRAME_A){ + return 20; + } else if(def->ftype == FREEDV_HF_FRAME_B){ + return 0; + } else{ + return 0; + } +} + +/* Varicode bits in bits */ +int fvhff_get_varicode_size(struct freedv_vhf_deframer * def){ + if(def->ftype == FREEDV_VHF_FRAME_A){ + return 2; + } else if(def->ftype == FREEDV_HF_FRAME_B){ + return 0; + } else{ + return 0; + } +} + +void fvhff_destroy_deframer(struct freedv_vhf_deframer * def){ + freedv_data_channel_destroy(def->fdc); + free(def->bits); + free(def); +} + +int fvhff_synchronized(struct freedv_vhf_deframer * def){ + return (def->state) == ST_SYNC; +} + +/* Search for a complete UW in a buffer of bits */ +size_t fvhff_search_uw(const uint8_t bits[],size_t nbits, + const uint8_t uw[], size_t uw_len, + size_t * delta_out, size_t bits_per_sym){ + + size_t ibits,iuw; + size_t delta_min = uw_len; + size_t delta; + size_t offset_min = 0; + /* Walk through buffer bits */ + for(ibits = 0; ibits < nbits-uw_len; ibits+=bits_per_sym){ + delta = 0; + for(iuw = 0; iuw < uw_len; iuw++){ + if(bits[ibits+iuw] != uw[iuw]) delta++; + } + if( delta < delta_min ){ + delta_min = delta; + offset_min = ibits; + } + } + if(delta_out != NULL) *delta_out = delta_min; + return offset_min; +} + +/* See if the UW is where it should be, to within a tolerance, in a bit buffer */ +static int fvhff_match_uw(struct freedv_vhf_deframer * def,uint8_t bits[],int tol,int *rdiff, enum frame_payload_type *pt){ + int frame_type = def->ftype; + int bitptr = def->bitptr; + int frame_size = def->frame_size; + int uw_len = def->uw_size; + int iuw,ibit; + const uint8_t * uw[2]; + int uw_offset; + int diff[2] = { 0, 0 }; + int i; + int match[2]; + int r; + + /* defaults to make compiler happy on -O3 */ + + *pt = FRAME_PAYLOAD_TYPE_VOICE; + *rdiff = 0; + + /* Set up parameters for the standard type of frame */ + if(frame_type == FREEDV_VHF_FRAME_A){ + uw[0] = A_uw_v; + uw[1] = A_uw_d; + uw_len = 16; + uw_offset = 40; + } else if(frame_type == FREEDV_HF_FRAME_B){ + uw[0] = B_uw_v; + uw[1] = B_uw_d; + uw_len = 8; + uw_offset = 0; + } else { + return 0; + } + + /* Check both the voice and data UWs */ + for (i = 0; i < 2; i++) { + /* Start bit pointer where UW should be */ + ibit = bitptr + uw_offset; + if(ibit >= frame_size) ibit -= frame_size; + /* Walk through and match bits in frame with bits of UW */ + for(iuw=0; iuw= frame_size) ibit = 0; + } + match[i] = diff[i] <= tol; + //fprintf(stderr, "diff[%d]: %d tol: %d\n", i, diff[i], tol); + } + /* Pick the best matching UW */ + + if (diff[0] < diff[1]) { + r = match[0]; + *rdiff = diff[0]; + *pt = FRAME_PAYLOAD_TYPE_VOICE; + } else { + r = match[1]; + *rdiff = diff[1]; + *pt = FRAME_PAYLOAD_TYPE_DATA; + } + + return r; +} + +static void fvhff_extract_frame_voice(struct freedv_vhf_deframer * def,uint8_t bits[], + uint8_t codec2_out[],uint8_t proto_out[],uint8_t vc_out[]){ + int frame_type = def->ftype; + int bitptr = def->bitptr; + int frame_size = def->frame_size; + int iframe,ibit; + + if(frame_type == FREEDV_VHF_FRAME_A){ + /* Extract codec2 bits */ + memset(codec2_out,0,7); + ibit = 0; + /* Extract and pack first half, MSB first */ + iframe = bitptr+16; + if(iframe >= frame_size) iframe-=frame_size; + for(;ibit<24;ibit++){ + codec2_out[ibit>>3] |= (bits[iframe]&0x1)<<(7-(ibit&0x7)); + iframe++; + if(iframe >= frame_size) iframe=0; + } + + /* Extract and pack last half, MSB first */ + iframe = bitptr+56; + if(iframe >= frame_size) iframe-=frame_size; + for(;ibit<52;ibit++){ + codec2_out[ibit>>3] |= (bits[iframe]&0x1)<<(7-(ibit&0x7)); + iframe++; + if(iframe >= frame_size) iframe=0; + } + /* Extract varicode bits, if wanted */ + if(vc_out!=NULL){ + iframe = bitptr+90; + if(iframe >= frame_size) iframe-=frame_size; + vc_out[0] = bits[iframe]; + iframe++; + vc_out[1] = bits[iframe]; + } + /* Extract protocol bits, if proto is passed through */ + if(proto_out!=NULL){ + /* Clear protocol bit array */ + memset(proto_out,0,3); + ibit = 0; + /* Extract and pack first half, MSB first */ + iframe = bitptr+4; + if(iframe >= frame_size) iframe-=frame_size; + for(;ibit<12;ibit++){ + proto_out[ibit>>3] |= (bits[iframe]&0x1)<<(7-(ibit&0x7)); + iframe++; + if(iframe >= frame_size) iframe=0; + } + + /* Extract and pack last half, MSB first */ + iframe = bitptr+84; + if(iframe >= frame_size) iframe-=frame_size; + for(;ibit<20;ibit++){ + proto_out[ibit>>3] |= (bits[iframe]&0x1)<<(7-(ibit&0x7)); + iframe++; + if(iframe >= frame_size) iframe=0; + } + } + + }else if(frame_type == FREEDV_HF_FRAME_B){ + /* Pointers to both c2 frames */ + uint8_t * codec2_out1 = &codec2_out[0]; + uint8_t * codec2_out2 = &codec2_out[4]; + + /* Extract codec2 bits */ + memset(codec2_out,0,8); + ibit = 0; + + /* Extract and pack first c2 frame, MSB first */ + iframe = bitptr+8; + if(iframe >= frame_size) iframe-=frame_size; + for(;ibit<28;ibit++){ + codec2_out1[ibit>>3] |= (bits[iframe]&0x1)<<(7-(ibit&0x7)); + iframe++; + if(iframe >= frame_size) iframe=0; + } + + /* Extract and pack second c2 frame, MSB first */ + iframe = bitptr+36; + ibit = 0; + if(iframe >= frame_size) iframe-=frame_size; + for(;ibit<28;ibit++){ + codec2_out2[ibit>>3] |= (bits[iframe]&0x1)<<(7-(ibit&0x7)); + iframe++; + if(iframe >= frame_size) iframe=0; + } + }else if(frame_type == FREEDV_VHF_FRAME_AT){ + /* Extract codec2 bits */ + memset(codec2_out,0,7); + ibit = 0; + /* Extract and pack first half, MSB first */ + iframe = bitptr+12; + if(iframe >= frame_size) iframe-=frame_size; + for(;ibit<24;ibit++){ + codec2_out[ibit>>3] |= (bits[iframe]&0x1)<<(7-(ibit&0x7)); + iframe++; + if(iframe >= frame_size) iframe=0; + } + + /* Extract and pack last half, MSB first */ + iframe = bitptr+52; + if(iframe >= frame_size) iframe-=frame_size; + for(;ibit<52;ibit++){ + codec2_out[ibit>>3] |= (bits[iframe]&0x1)<<(7-(ibit&0x7)); + iframe++; + if(iframe >= frame_size) iframe=0; + } + /* Extract varicode bits, if wanted */ + if(vc_out!=NULL){ + iframe = bitptr+86; + if(iframe >= frame_size) iframe-=frame_size; + vc_out[0] = bits[iframe]; + iframe++; + vc_out[1] = bits[iframe]; + } + /* Extract protocol bits, if proto is passed through */ + if(proto_out!=NULL){ + /* Clear protocol bit array */ + memset(proto_out,0,3); + ibit = 0; + /* Extract and pack first half, MSB first */ + iframe = bitptr+4; + if(iframe >= frame_size) iframe-=frame_size; + for(;ibit<12;ibit++){ + proto_out[ibit>>3] |= (bits[iframe]&0x1)<<(7-(ibit&0x7)); + iframe++; + if(iframe >= frame_size) iframe=0; + } + + /* Extract and pack last half, MSB first */ + iframe = bitptr+84; + if(iframe >= frame_size) iframe-=frame_size; + for(;ibit<20;ibit++){ + proto_out[ibit>>3] |= (bits[iframe]&0x1)<<(7-(ibit&0x7)); + iframe++; + if(iframe >= frame_size) iframe=0; + } + } + + } +} + +static void fvhff_extract_frame_data(struct freedv_vhf_deframer * def,uint8_t bits[]){ + int frame_type = def->ftype; + int bitptr = def->bitptr; + int frame_size = def->frame_size; + int iframe,ibit; + + if(frame_type == FREEDV_VHF_FRAME_A){ + uint8_t data[8]; + int end_bits = 0; + int from_bit; + int bcast_bit; + + iframe = bitptr+4; + if(iframe >= frame_size) iframe-=frame_size; + from_bit = bits[iframe]; + iframe++; + if(iframe >= frame_size) iframe-=frame_size; + bcast_bit = bits[iframe]; + + /* Extract data bits */ + memset(data,0,8); + ibit = 0; + /* Extract and pack first half, MSB first */ + iframe = bitptr+8; + if(iframe >= frame_size) iframe-=frame_size; + for(;ibit<32;ibit++){ + data[ibit>>3] |= (bits[iframe]&0x1)<<(7-(ibit&0x7)); + iframe++; + if(iframe >= frame_size) iframe=0; + } + + /* Extract and pack last half, MSB first */ + iframe = bitptr+56; + if(iframe >= frame_size) iframe-=frame_size; + for(;ibit<64;ibit++){ + data[ibit>>3] |= (bits[iframe]&0x1)<<(7-(ibit&0x7)); + iframe++; + if(iframe >= frame_size) iframe=0; + } + + /* Extract endbits value, MSB first*/ + iframe = bitptr+88; + ibit = 0; + if(iframe >= frame_size) iframe-=frame_size; + for(;ibit<4;ibit++){ + end_bits |= (bits[iframe]&0x1)<<(3-(ibit)); + iframe++; + if(iframe >= frame_size) iframe=0; + } + + if (def->fdc) { + freedv_data_channel_rx_frame(def->fdc, data, 8, from_bit, bcast_bit, 0, end_bits); + } + } else if(frame_type == FREEDV_HF_FRAME_B){ + uint8_t data[6]; + int end_bits = 0; + int from_bit; + int bcast_bit; + int crc_bit; + + ibit = 0; + memset(data,0,6); + + /* Extract and pack first c2 frame, MSB first */ + iframe = bitptr+8; + if(iframe >= frame_size) iframe-=frame_size; + for(;ibit<48;ibit++){ + data[ibit>>3] |= (bits[iframe]&0x1)<<(7-(ibit&0x7)); + iframe++; + if(iframe >= frame_size) iframe=0; + } + + iframe = bitptr+56; + if(iframe >= frame_size) iframe-=frame_size; + from_bit = bits[iframe]; + iframe++; + if(iframe >= frame_size) iframe-=frame_size; + bcast_bit = bits[iframe]; + iframe++; + if(iframe >= frame_size) iframe-=frame_size; + crc_bit = bits[iframe]; + + /* Extract endbits value, MSB first*/ + iframe = bitptr+60; + ibit = 0; + if(iframe >= frame_size) iframe-=frame_size; + for(;ibit<4;ibit++){ + end_bits |= (bits[iframe]&0x1)<<(3-(ibit)); + iframe++; + if(iframe >= frame_size) iframe=0; + } + + if (def->fdc) { + freedv_data_channel_rx_frame(def->fdc, data, 6, from_bit, bcast_bit, crc_bit, end_bits); + } + } +} + +static void fvhff_extract_frame(struct freedv_vhf_deframer * def,uint8_t bits[],uint8_t codec2_out[], + uint8_t proto_out[],uint8_t vc_out[],enum frame_payload_type pt){ + switch (pt) { + case FRAME_PAYLOAD_TYPE_VOICE: + fvhff_extract_frame_voice(def, bits, codec2_out, proto_out, vc_out); + break; + case FRAME_PAYLOAD_TYPE_DATA: + fvhff_extract_frame_data(def, bits); + break; + } +} + +/* + * Try to find the UW and extract codec/proto/vc bits in def->frame_size bits + */ +int fvhff_deframe_bits(struct freedv_vhf_deframer * def,uint8_t codec2_out[],uint8_t proto_out[], + uint8_t vc_out[],uint8_t bits_in[]){ + uint8_t * strbits = def->bits; + uint8_t * invbits = def->invbits; + uint8_t * bits; + int on_inv_bits = def->on_inv_bits; + int frame_type = def->ftype; + int state = def->state; + int bitptr = def->bitptr; + int last_uw = def->last_uw; + int miss_cnt = def->miss_cnt; + int frame_size = def->frame_size; + int uw_size = def->uw_size; + int uw_diff; + int i; + int uw_first_tol; + int uw_sync_tol; + int miss_tol; + int extracted_frame = 0; + enum frame_payload_type pt = FRAME_PAYLOAD_TYPE_VOICE; + + /* Possibly set up frame-specific params here */ + if(frame_type == FREEDV_VHF_FRAME_A){ + uw_first_tol = 1; /* The UW bit-error tolerance for the first frame */ + uw_sync_tol = 3; /* The UW bit error tolerance for frames after sync */ + miss_tol = 4; /* How many UWs may be missed before going into the de-synced state */ + }else if(frame_type == FREEDV_HF_FRAME_B){ + uw_first_tol = 1; /* The UW bit-error tolerance for the first frame */ + uw_sync_tol = 2; /* The UW bit error tolerance for frames after sync */ + miss_tol = 3; /* How many UWs may be missed before going into the de-synced state */ + }else{ + return 0; + } + + /* Skip N bits for multi-bit symbol modems */ + for(i=0; i= frame_size) bitptr -= frame_size; + def->bitptr = bitptr; + /* Enter state machine */ + if(state==ST_SYNC){ + /* Already synchronized, just wait till UW is back where it should be */ + last_uw++; + if(invbits!=NULL){ + if(on_inv_bits) + bits = invbits; + else + bits = strbits; + }else{ + bits=strbits; + } + /* UW should be here. We're sunk, so deframe anyway */ + if(last_uw == frame_size){ + last_uw = 0; + + if(!fvhff_match_uw(def,bits,uw_sync_tol,&uw_diff, &pt)) + miss_cnt++; + else + miss_cnt=0; + + /* If we go over the miss tolerance, go into no-sync */ + if(miss_cnt>miss_tol){ + state = ST_NOSYNC; + } + /* Extract the bits */ + extracted_frame = 1; + fvhff_extract_frame(def,bits,codec2_out,proto_out,vc_out,pt); + + /* Update BER estimate */ + def->ber_est = (.995*def->ber_est) + (.005*((float)uw_diff)/((float)uw_size)); + def->total_uw_bits += uw_size; + def->total_uw_err += uw_diff; + } + /* Not yet sunk */ + }else{ + /* It's a sync!*/ + if(invbits!=NULL){ + if(fvhff_match_uw(def,invbits,uw_first_tol, &uw_diff, &pt)){ + state = ST_SYNC; + last_uw = 0; + miss_cnt = 0; + extracted_frame = 1; + on_inv_bits = 1; + fvhff_extract_frame(def,invbits,codec2_out,proto_out,vc_out,pt); + /* Update BER estimate */ + def->ber_est = (.995*def->ber_est) + (.005*((float)uw_diff)/((float)uw_size)); + def->total_uw_bits += uw_size; + def->total_uw_err += uw_diff; + } + } + if(fvhff_match_uw(def,strbits,uw_first_tol, &uw_diff, &pt)){ + state = ST_SYNC; + last_uw = 0; + miss_cnt = 0; + extracted_frame = 1; + on_inv_bits = 0; + fvhff_extract_frame(def,strbits,codec2_out,proto_out,vc_out,pt); + /* Update BER estimate */ + def->ber_est = (.995*def->ber_est) + (.005*((float)uw_diff)/((float)uw_size)); + def->total_uw_bits += uw_size; + def->total_uw_err += uw_diff; + } + } + } + def->state = state; + def->last_uw = last_uw; + def->miss_cnt = miss_cnt; + def->on_inv_bits = on_inv_bits; + /* return sync state and presence of extracted voice bits. + only sync for data frames, they are already handled by callback */ + return (extracted_frame ? RX_SYNC : 0) | (pt == FRAME_PAYLOAD_TYPE_VOICE ? RX_BITS : 0); +} diff --git a/libcodec2-android/src/codec2/src/freedv_vhf_framing.h b/libcodec2-android/src/codec2/src/freedv_vhf_framing.h new file mode 100644 index 0000000..53d02d4 --- /dev/null +++ b/libcodec2-android/src/codec2/src/freedv_vhf_framing.h @@ -0,0 +1,99 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: freedv_vhf_framing.h + AUTHOR......: Brady O'Brien + DATE CREATED: 11 February 2016 + + Framer and deframer for VHF FreeDV modes 'A' and 'B' + Currently designed for- + * 40ms ota modem frames + * 40ms Codec2 1300 frames + * 52 bits of Codec2 per frame + * 16 bits of unique word per frame + * 28 'spare' bits per frame + * - 4 spare bits at front and end of frame (8 total) for padding + * - 20 'protocol' bits, either for higher layers of 'protocol' or + * - 18 'protocol' bits and 2 vericode sidechannel bits + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2016 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#ifndef _FREEDV_VHF_FRAMING_H +#define _FREEDV_VHF_FRAMING_H + +#include "freedv_data_channel.h" + +/* Standard frame type */ +#define FREEDV_VHF_FRAME_A 1 /* 2400A/B Frame */ +#define FREEDV_HF_FRAME_B 2 /* 800XA Frame */ +#define FREEDV_VHF_FRAME_AT 3 /* 4800T Frame */ + +struct freedv_vhf_deframer { + int ftype; /* Type of frame to be looking for */ + int state; /* State of deframer */ + uint8_t * bits; /* Bits currently being decanted */ + uint8_t * invbits; /* Inversion of bits currently being decanted, for FMFSK */ + + int bitptr; /* Pointer into circular bit buffer */ + int miss_cnt; /* How many UWs have been missed */ + int last_uw; /* How many bits since the last UW? */ + int frame_size; /* How big is a frame? */ + int uw_size; /* How big is the UW */ + int on_inv_bits; /* Are we using the inverted bits? */ + int sym_size; /* How many bits in a modem symbol */ + + float ber_est; /* Bit error rate estimate */ + int total_uw_bits; /* Total RX-ed bits of UW */ + int total_uw_err; /* Total errors in UW bits */ + + struct freedv_data_channel *fdc; +}; + +/* Init and allocate memory for a freedv-vhf framer/deframer */ +struct freedv_vhf_deframer * fvhff_create_deframer(uint8_t frame_type,int enable_bit_flip); + +/* Get size of various frame parameters */ +/* Frame size in bits */ +int fvhff_get_frame_size(struct freedv_vhf_deframer * def); +/* Codec2 size in bytes */ +int fvhff_get_codec2_size(struct freedv_vhf_deframer * def); +/* Protocol bits in bits */ +int fvhff_get_proto_size(struct freedv_vhf_deframer * def); +/* Varicode bits in bits */ +int fvhff_get_varicode_size(struct freedv_vhf_deframer * def); + +/* Free the memory used by a freedv-vhf framer/deframer */ +void fvhff_destroy_deframer(struct freedv_vhf_deframer * def); + +/* Place codec and other bits into a frame */ +void fvhff_frame_bits(int frame_type,uint8_t bits_out[],uint8_t codec2_in[],uint8_t proto_in[],uint8_t vc_in[]); +void fvhff_frame_data_bits(struct freedv_vhf_deframer * def, int frame_type,uint8_t bits_out[]); + +/* Find and extract frames from a stream of bits */ +int fvhff_deframe_bits(struct freedv_vhf_deframer * def,uint8_t codec2_out[],uint8_t proto_out[],uint8_t vc_out[],uint8_t bits_in[]); + +/* Is the de-framer synchronized? */ +int fvhff_synchronized(struct freedv_vhf_deframer * def); + +/* Search for a complete UW in a buffer of bits */ +size_t fvhff_search_uw(const uint8_t bits[],size_t nbits, + const uint8_t uw[], size_t uw_len, + size_t * delta_out, size_t bits_per_sym); + +#endif //_FREEDV_VHF_FRAMING_H diff --git a/libcodec2-android/src/codec2/src/fsk.c b/libcodec2-android/src/codec2/src/fsk.c new file mode 100644 index 0000000..547b08d --- /dev/null +++ b/libcodec2-android/src/codec2/src/fsk.c @@ -0,0 +1,1059 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: fsk.c + AUTHOR......: Brady O'Brien & David Rowe + DATE CREATED: 7 January 2016 + + C Implementation of 2/4FSK modulator/demodulator, based on octave/fsk_lib.m + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2016-2020 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +/*---------------------------------------------------------------------------*\ + + DEFINES + +\*---------------------------------------------------------------------------*/ + +/* Define this to enable EbNodB estimate */ +/* This needs square roots, may take more cpu time than it's worth */ +#define EST_EBNO + +/* This is a flag to make the mod/demod allocate their memory on the stack instead of the heap */ +/* At large sample rates, there's not enough stack space to run the demod */ +#define DEMOD_ALLOC_STACK + +/* This is a flag for the freq. estimator to use a precomputed/rt computed hann window table + On platforms with slow cosf, this will produce a substantial speedup at the cost of a small + amount of memory +*/ +#define USE_HANN_TABLE + +/* This flag turns on run-time hann table generation. If USE_HANN_TABLE is unset, + this flag has no effect. If USE_HANN_TABLE is set and this flag is set, the + hann table will be allocated and generated when fsk_init or fsk_init_hbr is + called. If this flag is not set, a hann function table of size fsk->Ndft MUST + be provided. On small platforms, this can be used with a precomputed table to + save memory at the cost of flash space. +*/ +#define GENERATE_HANN_TABLE_RUNTIME + +/* Turn off table generation if on cortex M4 to save memory */ +#ifdef CORTEX_M4 +#undef USE_HANN_TABLE +#endif + +/*---------------------------------------------------------------------------*\ + + INCLUDES + +\*---------------------------------------------------------------------------*/ + +#include +#include +#include +#include + +#include "fsk.h" +#include "comp_prim.h" +#include "kiss_fftr.h" +#include "modem_probe.h" + +/*---------------------------------------------------------------------------*\ + + FUNCTIONS + +\*---------------------------------------------------------------------------*/ + +static void stats_init(struct FSK *fsk); + +#ifdef USE_HANN_TABLE +/* + This is used by fsk_create and fsk_create_hbr to generate a hann function + table +*/ +static void fsk_generate_hann_table(struct FSK* fsk){ + int Ndft = fsk->Ndft; + size_t i; + + for(i=0; ihann_table[i] = 0.5 - 0.5 * cosf(2.0 * M_PI * (float)i / (float) (Ndft-1)); + } +} +#endif + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: fsk_create_core + AUTHOR......: Brady O'Brien + DATE CREATED: 7 January 2016 + + In this version of the demod the standard/hbr modes have been + largely combined at they shared so much common code. The + fsk_create/fsk_create_hbr function interface has been retained to + maximise compatability with existing applications. + +\*---------------------------------------------------------------------------*/ + +struct FSK * fsk_create_core(int Fs, int Rs, int M, int P, int Nsym, int f1_tx, int tone_spacing) +{ + struct FSK *fsk; + int i; + + /* Check configuration validity */ + assert(Fs > 0); + assert(Rs > 0); + assert(P > 0); + assert(Nsym > 0); + /* Ts (Fs/Rs) must be an integer */ + assert( (Fs%Rs) == 0 ); + /* Ts/P (Fs/Rs/P) must be an integer */ + assert( ((Fs/Rs)%P) == 0 ); + /* If P is too low we don't have a good choice of timing offsets to choose from */ + assert( P >= 4 ); + assert( M==2 || M==4); + + fsk = (struct FSK*) calloc(1, sizeof(struct FSK)); assert(fsk != NULL); + + // Need enough bins to within 10% of tone centre + float bin_width_Hz = 0.1*Rs; + float Ndft = (float)Fs/bin_width_Hz; + Ndft = pow(2.0, ceil(log2(Ndft))); + + /* Set constant config parameters */ + fsk->Fs = Fs; + fsk->Rs = Rs; + fsk->Ts = Fs/Rs; + fsk->burst_mode = 0; + fsk->P = P; + fsk->Nsym = Nsym; + fsk->N = fsk->Ts*fsk->Nsym; + fsk->Ndft = Ndft; + fsk->tc = 0.1; + fsk->Nmem = fsk->N+(2*fsk->Ts); + fsk->f1_tx = f1_tx; + fsk->tone_spacing = tone_spacing; + fsk->nin = fsk->N; + fsk->lock_nin = 0; + fsk->mode = M==2 ? MODE_2FSK : MODE_4FSK; + fsk->Nbits = M==2 ? fsk->Nsym : fsk->Nsym*2; + fsk->est_min = 0; + fsk->est_max = Fs; + fsk->est_space = 0.75*Rs; + fsk->freq_est_type = 0; + + //printf("C.....: M: %d Fs: %d Rs: %d Ts: %d nsym: %d nbit: %d N: %d Ndft: %d fmin: %d fmax: %d\n", + // M, fsk->Fs, fsk->Rs, fsk->Ts, fsk->Nsym, fsk->Nbits, fsk->N, fsk->Ndft, fsk->est_min, fsk->est_max); + /* Set up rx state */ + for(i=0; iphi_c[i] = comp_exp_j(0); + fsk->f_dc = (COMP*)malloc(M*fsk->Nmem*sizeof(COMP)); assert(fsk->f_dc != NULL); + for(i=0; iNmem; i++) + fsk->f_dc[i] = comp0(); + + fsk->fft_cfg = kiss_fft_alloc(Ndft,0,NULL,NULL); assert(fsk->fft_cfg != NULL); + fsk->Sf = (float*)malloc(sizeof(float)*fsk->Ndft); assert(fsk->Sf != NULL); + for(i=0;iSf[i] = 0; + + #ifdef USE_HANN_TABLE + #ifdef GENERATE_HANN_TABLE_RUNTIME + fsk->hann_table = (float*)malloc(sizeof(float)*fsk->Ndft); assert(fsk->hann_table != NULL); + fsk_generate_hann_table(fsk); + #else + fsk->hann_table = NULL; + #endif + #endif + + + fsk->norm_rx_timing = 0; + + /* Set up tx state */ + fsk->tx_phase_c = comp_exp_j(0); + + /* Set up demod stats */ + fsk->EbNodB = 0; + + for( i=0; if_est[i] = 0; + + fsk->ppm = 0; + + fsk->stats = (struct MODEM_STATS*)malloc(sizeof(struct MODEM_STATS)); assert(fsk->stats != NULL); + stats_init(fsk); + fsk->normalise_eye = 1; + + return fsk; +} + +/*---------------------------------------------------------------------------* \ + + FUNCTION....: fsk_create + AUTHOR......: Brady O'Brien + DATE CREATED: 7 January 2016 + + Create and initialize an instance of the FSK modem. Returns a pointer + to the modem state/config struct. One modem config struct may be used + for both mod and demod. + + If you are not intending to use the modulation functions, you can + set f1_tx to FSK_NONE. + +\*---------------------------------------------------------------------------*/ + +struct FSK * fsk_create(int Fs, int Rs, int M, int tx_f1, int tx_fs) { + return fsk_create_core(Fs, Rs, M, FSK_DEFAULT_P, FSK_DEFAULT_NSYM, tx_f1, tx_fs); +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: fsk_create_hbr + AUTHOR......: Brady O'Brien + DATE CREATED: 11 February 2016 + + Alternate version of create allows user defined oversampling P and + averaging window Nsym. In the current version of the demod it's + simply an alias for the default core function. + + P is the oversampling rate of the internal demod processing, which + happens at Rs*P Hz. We filter the tones at P different timing + offsets, and choose the best one. P should be >=8, so we have a + choice of at least 8 timing offsets. This may require some + adjustment of Fs and Rs, as Fs/Rs/P must be an integer. + + Nsym is the number of symbols we average demod parameters like + symbol timing over. + +\*---------------------------------------------------------------------------*/ + +struct FSK * fsk_create_hbr(int Fs, int Rs, int M, int P, int Nsym, int f1_tx, int tone_spacing) { + return fsk_create_core(Fs, Rs, M, P, Nsym, f1_tx, tone_spacing); +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: fsk_destroy + AUTHOR......: Brady O'Brien + DATE CREATED: 11 February 2016 + + Call this to free all memory and shut down the modem. + +\*---------------------------------------------------------------------------*/ + +void fsk_destroy(struct FSK *fsk){ + free(fsk->Sf); + free(fsk->f_dc); + free(fsk->fft_cfg); + free(fsk->stats); + free(fsk->hann_table); + free(fsk); +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: fsk_mod + AUTHOR......: Brady O'Brien + DATE CREATED: 11 February 2016 + + FSK modulator function, real valued output samples with amplitude 2. + +\*---------------------------------------------------------------------------*/ + +void fsk_mod(struct FSK *fsk,float fsk_out[], uint8_t tx_bits[], int nbits) { + COMP tx_phase_c = fsk->tx_phase_c; /* Current complex TX phase */ + int f1_tx = fsk->f1_tx; /* '0' frequency */ + int tone_spacing = fsk->tone_spacing; /* space between frequencies */ + int Ts = fsk->Ts; /* samples-per-symbol */ + int Fs = fsk->Fs; /* sample freq */ + int M = fsk->mode; + COMP dosc_f[M]; /* phase shift per sample */ + COMP dph; /* phase shift of current bit */ + size_t i,j,m,bit_i,sym; + + /* trap these parametrs being set to FSK_UNUSED, then calling mod */ + assert(f1_tx > 0); + assert(tone_spacing > 0); + + /* Init the per sample phase shift complex numbers */ + for( m=0; m>1); + for(i=0; i>=1; ){ + uint8_t bit = tx_bits[bit_i]; + bit = (bit==1)?1:0; + sym = (sym<<1)|bit; + bit_i++; + } + /* Look up symbol phase shift */ + dph = dosc_f[sym]; + /* Spin the oscillator for a symbol period */ + for(j=0; jtx_phase_c = tx_phase_c; + +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: fsk_mod_c + AUTHOR......: Brady O'Brien + DATE CREATED: 11 February 2016 + + FSK modulator function, complex valued output samples with magnitude 1. + +\*---------------------------------------------------------------------------*/ + +void fsk_mod_c(struct FSK *fsk,COMP fsk_out[], uint8_t tx_bits[], int nbits) { + COMP tx_phase_c = fsk->tx_phase_c; /* Current complex TX phase */ + int f1_tx = fsk->f1_tx; /* '0' frequency */ + int tone_spacing = fsk->tone_spacing; /* space between frequencies */ + int Ts = fsk->Ts; /* samples-per-symbol */ + int Fs = fsk->Fs; /* sample freq */ + int M = fsk->mode; + COMP dosc_f[M]; /* phase shift per sample */ + COMP dph; /* phase shift of current bit */ + size_t i,j,bit_i,sym; + int m; + + /* trap these parametrs being set to FSK_UNUSED, then calling mod */ + assert(f1_tx > 0); + assert(tone_spacing > 0); + + /* Init the per sample phase shift complex numbers */ + for( m=0; m>1); + for(i=0; i>=1; ){ + uint8_t bit = tx_bits[bit_i]; + bit = (bit==1)?1:0; + sym = (sym<<1)|bit; + bit_i++; + } + /* Look up symbol phase shift */ + dph = dosc_f[sym]; + /* Spin the oscillator for a symbol period */ + for(j=0; jtx_phase_c = tx_phase_c; + +} + + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: fsk_mod_ext_vco + AUTHOR......: David Rowe + DATE CREATED: February 2018 + + Modulator that assume an external VCO. The output is a voltage + that changes for each symbol. + +\*---------------------------------------------------------------------------*/ + +void fsk_mod_ext_vco(struct FSK *fsk, float vco_out[], uint8_t tx_bits[], int nbits) { + int f1_tx = fsk->f1_tx; /* '0' frequency */ + int tone_spacing = fsk->tone_spacing; /* space between frequencies */ + int Ts = fsk->Ts; /* samples-per-symbol */ + int M = fsk->mode; + int i, j, m, sym, bit_i; + + /* trap these parametrs being set to FSK_UNUSED, then calling mod */ + assert(f1_tx > 0); + assert(tone_spacing > 0); + + bit_i = 0; + int nsym = nbits/(M>>1); + for(i=0; i>=1; ){ + uint8_t bit = tx_bits[bit_i]; + bit = (bit==1)?1:0; + sym = (sym<<1)|bit; + bit_i++; + } + + /* + Map 'sym' to VCO frequency + Note: drive is inverted, a higher tone drives VCO voltage lower + */ + + //fprintf(stderr, "i: %d sym: %d freq: %f\n", i, sym, f1_tx + tone_spacing*(float)sym); + for(j=0; jnin; +} + +/* + * Internal function to estimate the frequencies of the FSK tones. + * This is split off because it is fairly complicated, needs a bunch of memory, and probably + * takes more cycles than the rest of the demod. + * Parameters: + * fsk - FSK struct from demod containing FSK config + * fsk_in - block of samples in this demod cycles, must be nin long + * freqs - Array for the estimated frequencies + * M - number of frequency peaks to find + */ +void fsk_demod_freq_est(struct FSK *fsk, COMP fsk_in[], float *freqs, int M) { + int Ndft = fsk->Ndft; + int Fs = fsk->Fs; + int nin = fsk->nin; + size_t i,j; + float hann; + float max; + int imax; + kiss_fft_cfg fft_cfg = fsk->fft_cfg; + int freqi[M]; + int st,en,f_zero; + + /* Array to do complex FFT from using kiss_fft */ + #ifdef DEMOD_ALLOC_STACK + kiss_fft_cpx *fftin = (kiss_fft_cpx*)alloca(sizeof(kiss_fft_cpx)*Ndft); + kiss_fft_cpx *fftout = (kiss_fft_cpx*)alloca(sizeof(kiss_fft_cpx)*Ndft); + #else + kiss_fft_cpx *fftin = (kiss_fft_cpx*)malloc(sizeof(kiss_fft_cpx)*Ndft); + kiss_fft_cpx *fftout = (kiss_fft_cpx*)malloc(sizeof(kiss_fft_cpx)*Ndft); + #endif + + st = (fsk->est_min*Ndft)/Fs + Ndft/2; if (st < 0) st = 0; + en = (fsk->est_max*Ndft)/Fs + Ndft/2; if (en > Ndft) en = Ndft; + //fprintf(stderr, "min: %d max: %d st: %d en: %d\n", fsk->est_min, fsk->est_max, st, en); + + f_zero = (fsk->est_space*Ndft)/Fs; + //fprintf(stderr, "fsk->est_space: %d f_zero = %d\n", fsk->est_space, f_zero); + + int numffts = floor((float)nin/(Ndft/2)) - 1; + for(j=0; jhann_table[i]; + #else + hann = 0.5 - 0.5 * cosf(2.0 * M_PI * (float)i / (float) (fft_samps-1)); + #endif + fftin[i].r = hann*fsk_in[i+a].real; + fftin[i].i = hann*fsk_in[i+a].imag; + } + + /* Do the FFT */ + kiss_fft(fft_cfg,fftin,fftout); + + /* FFT shift to put DC bin at Ndft/2 */ + kiss_fft_cpx tmp; + for(i=0; itc; + for(i=0; iSf[i] = (fsk->Sf[i]*(1-tc)) + (sqrtf(fftout[i].r)*tc); + fftout[i].i = fsk->Sf[i]; + } + } + + modem_probe_samp_f("t_Sf",fsk->Sf,Ndft); + + max = 0; + /* Find the M frequency peaks here */ + for(i=0; i max){ + max = fftout[j].i; + imax = j; + } + } + /* Blank out FMax +/-Fspace/2 */ + int f_min, f_max; + f_min = imax - f_zero; + f_min = f_min < 0 ? 0 : f_min; + f_max = imax + f_zero; + f_max = f_max > Ndft ? Ndft : f_max; + for(j=f_min; j= freqi[i-1]) i++; + else{ + j = freqi[i]; + freqi[i] = freqi[i-1]; + freqi[i-1] = j; + if(i>1) i--; + } + } + + /* Convert freqs from indices to frequencies */ + for(i=0; itone_spacing*Ndft/Fs)-1; + for(i=bin; i<=bin+2; i++) mask[i] = 1.0; + } + int len_mask = bin+2+1; + + #ifdef MODEMPROBE_ENABLE + modem_probe_samp_f("t_mask",mask,len_mask); + #endif + + /* drag mask over Sf, looking for peak in correlation */ + int b_max = st; float corr_max = 0.0; + float *Sf = fsk->Sf; + for (int b=st; b corr_max) { + corr_max = corr; + b_max = b; + } + } + float foff = (b_max-Ndft/2)*Fs/Ndft; + //fprintf(stderr, "fsk->tone_spacing: %d\n",fsk->tone_spacing); + for (int m=0; mf2_est[m] = foff + m*fsk->tone_spacing; + #ifdef MODEMPROBE_ENABLE + modem_probe_samp_f("t_f2_est",fsk->f2_est,M); + #endif + + #ifndef DEMOD_ALLOC_STACK + free(fftin); + free(fftout); + #endif +} + +/* core demodulator function */ +void fsk_demod_core(struct FSK *fsk, uint8_t rx_bits[], float rx_filt[], COMP fsk_in[]){ + int N = fsk->N; + int Ts = fsk->Ts; + int Rs = fsk->Rs; + int Fs = fsk->Fs; + int nsym = fsk->Nsym; + int nin = fsk->nin; + int P = fsk->P; + int Nmem = fsk->Nmem; + int M = fsk->mode; + size_t i,j,m; + float ft1; + + COMP t[M]; /* complex number temps */ + COMP t_c; /* another complex temp */ + COMP *phi_c = fsk->phi_c; + COMP *f_dc = fsk->f_dc; + COMP phi_ft; + int nold = Nmem-nin; + + COMP dphift; + float rx_timing,norm_rx_timing,old_norm_rx_timing,d_norm_rx_timing,appm; + + float fc_avg,fc_tx; + float meanebno,stdebno,eye_max; + int neyesamp,neyeoffset; + + #ifdef MODEMPROBE_ENABLE + #define NMP_NAME 26 + char mp_name_tmp[NMP_NAME+1]; /* Temporary string for modem probe trace names */ + #endif + + /* Estimate tone frequencies */ + fsk_demod_freq_est(fsk,fsk_in,fsk->f_est,M); + #ifdef MODEMPROBE_ENABLE + modem_probe_samp_f("t_f_est",fsk->f_est,M); + #endif + float *f_est; + if (fsk->freq_est_type) + f_est = fsk->f2_est; + else + f_est = fsk->f_est; + + /* update filter (integrator) memory by shifting in nin samples */ + for(m=0; mnorm_rx_timing; + fsk->norm_rx_timing = norm_rx_timing; + + /* Estimate sample clock offset */ + d_norm_rx_timing = norm_rx_timing - old_norm_rx_timing; + + /* Filter out big jumps in due to nin change */ + if(fabsf(d_norm_rx_timing) < .2){ + appm = 1e6*d_norm_rx_timing/(float)nsym; + fsk->ppm = .9*fsk->ppm + .1*appm; + } + + /* Figure out how many samples are needed the next modem cycle */ + /* Unless we're in burst mode or nin locked */ + if(!fsk->burst_mode && !fsk->lock_nin) { + if(norm_rx_timing > 0.25) + fsk->nin = N+Ts/4; + else if(norm_rx_timing < -0.25) + fsk->nin = N-Ts/4; + else + fsk->nin = N; + } + + modem_probe_samp_f("t_norm_rx_timing",&(norm_rx_timing),1); + modem_probe_samp_i("t_nin",&(fsk->nin),1); + + /* Re-sample the integrators with linear interpolation magic */ + int low_sample = (int)floorf(rx_timing); + float fract = rx_timing - (float)low_sample; + int high_sample = (int)ceilf(rx_timing); + + /* Vars for finding the max-of-4 for each bit */ + float tmax[M]; + + #ifdef EST_EBNO + meanebno = 0; + stdebno = 0; + #endif + + float rx_nse_pow = 1E-12; float rx_sig_pow = 0.0; + for(i=0; imax){ + max = tmax[m]; + sym = m; + } + if(tmax[m]>1; + } + } + + /* Optionally output filter magnitudes for soft decision/LLR + calculation. Update SNRest always as this is a useful + alternative to the earlier EbNo estimator below */ + float sum = 0.0; + for(m=0; mv_est = sqrt(rx_sig_pow-rx_nse_pow); + fsk->SNRest = rx_sig_pow/rx_nse_pow; + + #ifdef EST_EBNO + /* Calculate mean for EbNodB estimation */ + meanebno = meanebno/(float)nsym; + + /* Calculate the std. dev for EbNodB estimate */ + stdebno = (stdebno/(float)nsym) - (meanebno*meanebno); + /* trap any negative numbers to avoid NANs flowing through */ + if (stdebno > 0.0) { + stdebno = sqrt(stdebno); + } else { + stdebno = 0.0; + } + + fsk->EbNodB = -6+(20*log10f((1e-6+meanebno)/(1e-6+stdebno))); + #else + fsk->EbNodB = 1; + #endif + + /* Write some statistics to the stats struct */ + + /* Save clock offset in ppm */ + fsk->stats->clock_offset = fsk->ppm; + + /* Calculate and save SNR from EbNodB estimate */ + + fsk->stats->snr_est = .5*fsk->stats->snr_est + .5*fsk->EbNodB;//+ 10*log10f(((float)Rs)/((float)Rs*M)); + + /* Save rx timing */ + fsk->stats->rx_timing = (float)rx_timing; + + /* Estimate and save frequency offset */ + fc_avg = fc_tx = 0.0; + for(int m=0; mf1_tx + m*fsk->tone_spacing)/M; + } + fsk->stats->foff = fc_tx-fc_avg; + + /* Take a sample for the eye diagrams ---------------------------------- */ + + /* due to oversample rate P, we have too many samples for eye + trace. So lets output a decimated version. We use 2P + as we want two symbols worth of samples in trace */ + + int neyesamp_dec = ceil(((float)P*2)/MODEM_STATS_EYE_IND_MAX); + neyesamp = (P*2)/neyesamp_dec; + assert(neyesamp <= MODEM_STATS_EYE_IND_MAX); + fsk->stats->neyesamp = neyesamp; + + neyeoffset = high_sample+1; + + int eye_traces = MODEM_STATS_ET_MAX/M; + int ind; + + fsk->stats->neyetr = fsk->mode*eye_traces; + for( i=0; iMODEM_STATS_EYE_IND_MAX advance through integrated + samples newamp_dec at a time so we dont overflow rx_eye[][] + */ + ind = 2*P*i + neyeoffset + j*neyesamp_dec; + assert((i*M+m) < MODEM_STATS_ET_MAX); + assert(ind < (nsym+1)*P); + fsk->stats->rx_eye[i*M+m][j] = cabsolute(f_int[m][ind]); + } + } + } + + if (fsk->normalise_eye) { + eye_max = 0; + /* Normalize eye to +/- 1 */ + for(i=0; istats->rx_eye[i][j])>eye_max) + eye_max = fabsf(fsk->stats->rx_eye[i][j]); + + for(i=0; istats->rx_eye[i][j] = fsk->stats->rx_eye[i][j]/eye_max; + } + + fsk->stats->nr = 0; + fsk->stats->Nc = 0; + + for(i=0; istats->f_est[i] = f_est[i]; + + /* Dump some internal samples */ + modem_probe_samp_f("t_EbNodB",&(fsk->EbNodB),1); + modem_probe_samp_f("t_ppm",&(fsk->ppm),1); + modem_probe_samp_f("t_rx_timing",&(rx_timing),1); +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: fsk_demod + AUTHOR......: Brady O'Brien + DATE CREATED: 11 February 2016 + + FSK demodulator functions: + + fsk_demod...: complex samples in, bits out + fsk_demos_sd: complex samples in, soft decision symbols out + +\*---------------------------------------------------------------------------*/ + +void fsk_demod(struct FSK *fsk, uint8_t rx_bits[], COMP fsk_in[]) { + fsk_demod_core(fsk,rx_bits,NULL,fsk_in); +} + +void fsk_demod_sd(struct FSK *fsk, float rx_filt[], COMP fsk_in[]){ + fsk_demod_core(fsk,NULL,rx_filt,fsk_in); +} + +/* make sure stats have known values in case monitoring process reads stats before they are set */ +static void stats_init(struct FSK *fsk) { + /* Take a sample for the eye diagrams */ + int i,j,m; + int P = fsk->P; + int M = fsk->mode; + + /* due to oversample rate P, we have too many samples for eye + trace. So lets output a decimated version */ + + /* asserts below as we found some problems over-running eye matrix */ + + /* TODO: refactor eye tracing code here and in fsk_demod */ + + int neyesamp_dec = ceil(((float)P*2)/MODEM_STATS_EYE_IND_MAX); + int neyesamp = (P*2)/neyesamp_dec; + assert(neyesamp <= MODEM_STATS_EYE_IND_MAX); + fsk->stats->neyesamp = neyesamp; + + int eye_traces = MODEM_STATS_ET_MAX/M; + + fsk->stats->neyetr = fsk->mode*eye_traces; + for(i=0; istats->rx_eye[i*M+m][j] = 0; + } + } + } + + fsk->stats->rx_timing = fsk->stats->snr_est = 0; + +} + + +/* Set the FSK modem into burst demod mode */ + +void fsk_enable_burst_mode(struct FSK *fsk){ + fsk->nin = fsk->N; + fsk->burst_mode = 1; +} + +void fsk_clear_estimators(struct FSK *fsk){ + int i; + /* Clear freq estimator state */ + for(i=0; i < (fsk->Ndft); i++){ + fsk->Sf[i] = 0; + } + /* Reset timing diff correction */ + fsk->nin = fsk->N; +} + +void fsk_get_demod_stats(struct FSK *fsk, struct MODEM_STATS *stats){ + /* copy from internal stats, note we can't overwrite stats completely + as it has other states rqd by caller, also we want a consistent + interface across modem types for the freedv_api. + */ + + stats->clock_offset = fsk->stats->clock_offset; + stats->snr_est = fsk->stats->snr_est; // TODO: make this SNR not Eb/No + stats->rx_timing = fsk->stats->rx_timing; + stats->foff = fsk->stats->foff; + + stats->neyesamp = fsk->stats->neyesamp; + stats->neyetr = fsk->stats->neyetr; + memcpy(stats->rx_eye, fsk->stats->rx_eye, sizeof(stats->rx_eye)); + memcpy(stats->f_est, fsk->stats->f_est, fsk->mode*sizeof(float)); + + /* these fields not used for FSK so set to something sensible */ + + stats->sync = 0; + stats->nr = fsk->stats->nr; + stats->Nc = fsk->stats->Nc; +} + +/* + * Set the minimum and maximum frequencies at which the freq. estimator can find tones + */ +void fsk_set_freq_est_limits(struct FSK *fsk, int est_min, int est_max){ + assert(fsk != NULL); + assert(est_min >= -fsk->Fs/2); + assert(est_max <= fsk->Fs/2); + assert(est_max > est_min); + fsk->est_min = est_min; + fsk->est_max = est_max; +} + +void fsk_stats_normalise_eye(struct FSK *fsk, int normalise_enable) { + assert(fsk != NULL); + fsk->normalise_eye = normalise_enable; +} + +void fsk_set_freq_est_alg(struct FSK *fsk, int est_type) { + assert(fsk != NULL); + fsk->freq_est_type = est_type; +} + + + + + + + diff --git a/libcodec2-android/src/codec2/src/fsk.h b/libcodec2-android/src/codec2/src/fsk.h new file mode 100644 index 0000000..e28c98a --- /dev/null +++ b/libcodec2-android/src/codec2/src/fsk.h @@ -0,0 +1,215 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: fsk.h + AUTHOR......: Brady O'Brien + DATE CREATED: 6 January 2016 + + C Implementation of 2FSK/4FSK modulator/demodulator, based on octave/fsk_horus.m + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2016 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + + +#ifndef __C2FSK_H +#define __C2FSK_H + +#include +#include "comp.h" +#include "kiss_fftr.h" +#include "modem_stats.h" + +#define MODE_2FSK 2 +#define MODE_4FSK 4 + +#define MODE_M_MAX 4 + +#define FSK_SCALE 16383 + +/* default internal parameters */ +#define FSK_DEFAULT_P 8 /* Number of timing offsets we have to choose from, try to keep P >= 8 */ +#define FSK_DEFAULT_NSYM 50 /* See Nsym below */ +#define FSK_NONE -1 /* unused parameter */ + +struct FSK { + /* Static parameters set up by fsk_init */ + int Ndft; /* freq offset est fft */ + int Fs; /* sample freq */ + int N; /* processing buffer size */ + int Rs; /* symbol rate */ + int Ts; /* samples per symbol */ + int Nmem; /* size of extra mem for timing adj */ + int P; /* oversample rate for timing est/adj */ + int Nsym; /* Number of symbols processed by demodulator in each call, also the timing estimator window */ + int Nbits; /* Number of bits spat out in a processing frame */ + int f1_tx; /* f1 for modulator */ + int tone_spacing; /* Space between TX freqs for modulator (and option mask freq estimator) */ + int mode; /* 2FSK or 4FSK */ + float tc; /* time constant for smoothing FFTs */ + int est_min; /* Minimum frequency for freq. estimator */ + int est_max; /* Maximum frequency for freq. estimator */ + int est_space; /* Minimum frequency spacing for freq. estimator */ + float* hann_table; /* Precomputed or runtime computed hann window table */ + + /* Parameters used by demod */ + float* Sf; /* Average of magnitude spectrum */ + COMP phi_c[MODE_M_MAX]; /* phase of each demod local oscillator */ + COMP *f_dc; /* down converted samples */ + + kiss_fft_cfg fft_cfg; /* Config for KISS FFT, used in freq est */ + float norm_rx_timing; /* Normalized RX timing */ + + /* Parameters used by mod */ + COMP tx_phase_c; /* TX phase, but complex */ + + /* Statistics generated by demod */ + float EbNodB; /* Estimated EbNo in dB */ + float f_est[MODE_M_MAX]; /* Estimated frequencies (peak method) */ + float f2_est[MODE_M_MAX];/* Estimated frequencies (mask method) */ + int freq_est_type; /* which estimator to use */ + float ppm; /* Estimated PPM clock offset */ + float SNRest; /* used for LLRs */ + float v_est; /* used for LLRs */ + + /* Parameters used by mod/demod and driving code */ + int nin; /* Number of samples to feed the next demod cycle */ + int burst_mode; /* enables/disables 'burst' mode */ + int lock_nin; /* locks nin during testing */ + + /* modem statistics struct */ + struct MODEM_STATS *stats; + int normalise_eye; /* enables/disables normalisation of eye diagram */ +}; + +/* + * Create a FSK modem + * + * int Fs - Sample frequency + * int Rs - Symbol rate + * int M - 2 for 2FSK, 4 for 4FSK + * int f1_tx - first tone frequency + * int tone_spacing - frequency spacing (for modulator and optional "mask" freq estimator) + */ +struct FSK * fsk_create(int Fs, int Rs, int M, int f1_tx, int tone_spacing); + +/* + * Create a FSK modem - advanced version + * + * int Fs - Sample frequency + * int Rs - Symbol rate + * int M - 2 for 2FSK, 4 for 4FSK + * int P - number of timing offsets to choose from (suggest >= 8) + * int Nsym - windows size for timing estimator + * int f1_tx - first tone frequency + * int tone_spacing - frequency spacing (for modulator and optional "mask" freq estimator) + */ +struct FSK * fsk_create_hbr(int Fs, int Rs, int M, int P, int Nsym, int f1_tx, int tone_spacing); + +/* + * Set the minimum and maximum frequencies at which the freq. estimator can find tones + */ +void fsk_set_freq_est_limits(struct FSK *fsk,int fmin, int fmax); + +/* + * Clear the estimator states + */ +void fsk_clear_estimators(struct FSK *fsk); + +/* + * Fills MODEM_STATS struct with demod statistics + */ +void fsk_get_demod_stats(struct FSK *fsk, struct MODEM_STATS *stats); + +/* + * Destroy an FSK state struct and free it's memory + * + * struct FSK *fsk - FSK config/state struct to be destroyed + */ +void fsk_destroy(struct FSK *fsk); + +/* + * Modulates Nsym bits into N samples + * + * struct FSK *fsk - FSK config/state struct, set up by fsk_create + * float fsk_out[] - Buffer for samples of modulated FSK, fsk->Ts*(nbits/(M>>1)) in length + * uint8_t tx_bits[] - Buffer containing Nbits unpacked bits + * int nbits - number of bits to transmit + */ +void fsk_mod(struct FSK *fsk, float fsk_out[], uint8_t tx_bits[], int nbits); + +/* + * Modulates Nsym bits into N samples + * + * struct FSK *fsk - FSK config/state struct, set up by fsk_create + * float fsk_out[] - Buffer for samples of "voltage" used to modulate an external VCO + * - fsk->Ts*(nbits/(M>>1)) in length + * uint8_t tx_bits[] - Buffer containing Nbits unpacked bits + * int nbits - number of bits to transmit + */ +void fsk_mod_ext_vco(struct FSK *fsk, float vco_out[], uint8_t tx_bits[], int nbits); + +/* + * Modulates Nsym bits into N complex samples + * + * struct FSK *fsk - FSK config/state struct, set up by fsk_create + * comp fsk_out[] - Buffer for samples of modulated FSK, fsk->Ts*(nbits/(M>>1)) in length + * uint8_t tx_bits[] - Buffer containing Nbits unpacked bits + * int nbits - number of bits to transmit + */ +void fsk_mod_c(struct FSK *fsk, COMP fsk_out[], uint8_t tx_bits[], int nbits); + +/* + * Returns the number of samples needed for the next fsk_demod() cycle + * + * struct FSK *fsk - FSK config/state struct, set up by fsk_create + * returns - number of samples to be fed into fsk_demod next cycle + */ +uint32_t fsk_nin(struct FSK *fsk); + + +/* + * Demodulate some number of FSK samples. The number of samples to be + * demodulated can be found by calling fsk_nin(). + * + * struct FSK *fsk - FSK config/state struct, set up by fsk_create + * uint8_t rx_bits[] - Buffer for fsk->Nbits unpacked bits to be written + * float fsk_in[] - nin samples of modulated FSK + */ +void fsk_demod(struct FSK *fsk, uint8_t rx_bits[], COMP fsk_in[]); + +/* + * Soft decision demodulation + * + * struct FSK *fsk - FSK config/state struct, set up by fsk_create + * float rx_flit[] - M x Nsym array of filtermagnitude outputs + * float fsk_in[] - nin samples of modualted FSK + */ +void fsk_demod_sd(struct FSK *fsk, float rx_filt[], COMP fsk_in[]); + +/* enables/disables normalisation of eye diagram samples */ + +void fsk_stats_normalise_eye(struct FSK *fsk, int normalise_enable); + +/* Set the FSK modem into burst demod mode */ + +void fsk_enable_burst_mode(struct FSK *fsk); + +/* Set freq est algorithm 0: peak 1:mask */ +void fsk_set_freq_est_alg(struct FSK *fsk, int est_type); + +#endif diff --git a/libcodec2-android/src/codec2/src/fsk_demod.c b/libcodec2-android/src/codec2/src/fsk_demod.c new file mode 100644 index 0000000..4b4a927 --- /dev/null +++ b/libcodec2-android/src/codec2/src/fsk_demod.c @@ -0,0 +1,449 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: fsk_demod.c + AUTHOR......: Brady O'Brien and David Rowe + DATE CREATED: 8 January 2016 + + Command line FSK demodulator. Reads in FSK samples, writes demodulated + output bits. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2016 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#define TEST_FRAME_SIZE 100 /* must match fsk_get_test_bits.c */ + +#include +#include +#include +#include +#include +#include +#include + +#include "fsk.h" +#include "codec2_fdmdv.h" +#include "mpdecode_core.h" +#include "modem_stats.h" + +/* cleanly exit when we get a SIGTERM */ + +void sig_handler(int signo) +{ + if (signo == SIGTERM) { + exit(0); + } +} + +int main(int argc,char *argv[]){ + struct FSK *fsk; + struct MODEM_STATS stats; + int Fs,Rs,M,P,stats_ctr,stats_loop; + float loop_time; + int enable_stats = 0; + FILE *fin,*fout; + uint8_t *bitbuf = NULL; + int16_t *rawbuf; + COMP *modbuf; + float *rx_filt = NULL; + float *llrs = NULL; + int i,j,Ndft; + int soft_dec_mode = 0; + stats_loop = 0; + int complex_input = 1, bytes_per_sample = 2; + int stats_rate = 8; + int testframe_mode = 0; + P = 8; /* default */ + M = 0; + int fsk_lower = 0; + int fsk_upper = 0; + int user_fsk_lower = 0; + int user_fsk_upper = 0; + int nsym = FSK_DEFAULT_NSYM; + int mask = 0; + int tone_separation = 100; + + int o = 0; + int opt_idx = 0; + while( o != -1 ){ + static struct option long_opts[] = { + {"help", no_argument, 0, 'h'}, + {"conv", required_argument, 0, 'p'}, + {"cs16", no_argument, 0, 'c'}, + {"cu8", no_argument, 0, 'd'}, + {"fsk_lower", required_argument, 0, 'b'}, + {"fsk_upper", required_argument, 0, 'u'}, + {"stats", optional_argument, 0, 't'}, + {"soft-dec", no_argument, 0, 's'}, + {"testframes",no_argument, 0, 'f'}, + {"nsym", required_argument, 0, 'n'}, + {"mask", required_argument, 0, 'm'}, + {0, 0, 0, 0} + }; + + o = getopt_long(argc,argv,"fhlp:cdt::sb:u:m",long_opts,&opt_idx); + + switch(o){ + case 'c': + complex_input = 2; + bytes_per_sample = 2; + break; + case 'd': + complex_input = 2; + bytes_per_sample = 1; + break; + case 'f': + testframe_mode = 1; + break; + case 't': + enable_stats = 1; + if(optarg != NULL){ + stats_rate = atoi(optarg); + if(stats_rate == 0){ + stats_rate = 8; + } + } + break; + case 's': + soft_dec_mode = 1; + break; + case 'p': + P = atoi(optarg); + break; + case 'b': + if (optarg != NULL) { + fsk_lower = atoi(optarg); + user_fsk_lower = 1; + } + break; + case 'u': + if (optarg != NULL){ + fsk_upper = atoi(optarg); + user_fsk_upper = 1; + } + break; + case 'n': + if (optarg != NULL) { + nsym = atoi(optarg); + } + break; + case 'm': + mask = 1; + tone_separation = atoi(optarg); + break; + case 'h': + case '?': + goto helpmsg; + break; + } + } + int dx = optind; + + if( (argc - dx) < 5) { + fprintf(stderr, "Too few arguments\n"); + goto helpmsg; + } + + if( (argc - dx) > 5) { + fprintf(stderr, "Too many arguments\n"); + helpmsg: + fprintf(stderr,"usage: %s [options] (2|4) SampleRate SymbolRate InputModemRawFile OutputFile\n",argv[0]); + fprintf(stderr," -c --cs16 The raw input file will be in complex signed 16 bit format.\n"); + fprintf(stderr," -d --cu8 The raw input file will be in complex unsigned 8 bit format.\n"); + fprintf(stderr," If neither -c nor -d are used, the input should be in signed 16 bit format.\n"); + fprintf(stderr," -f --testframes Testframe mode, prints stats to stderr when a testframe is detected, if -t (JSON) \n"); + fprintf(stderr," is enabled stats will be in JSON format\n"); + fprintf(stderr," -t[r] --stats=[r] Print out modem statistics to stderr in JSON.\n"); + fprintf(stderr," r, if provided, sets the number of modem frames between statistic printouts.\n"); + fprintf(stderr," -s --soft-dec The output file will be in a soft-decision format, with one 32-bit float per bit.\n"); + fprintf(stderr," If -s is not used, the output will be in a 1 byte-per-bit format.\n"); + fprintf(stderr," -p P Number of timing offsets we have to choose from, default %d.\n", FSK_DEFAULT_P); + fprintf(stderr," Fs/Rs/P must be an integer. Smaller values result in faster operation, but\n"); + fprintf(stderr," coarse sampling. Try to keep >= 8\n"); + fprintf(stderr," processing but lower demodulation performance. Default %d\n", FSK_DEFAULT_P); + fprintf(stderr," --fsk_lower freq lower limit of freq estimator (default 0 for real input, -Fs/2 for complex input)\n"); + fprintf(stderr," --fsk_upper freq upper limit of freq estimator (default Fs/2)\n"); + fprintf(stderr," --nsym Nsym number of symbols used for estimators. Default %d\n", FSK_DEFAULT_NSYM); + fprintf(stderr," --mask TxFreqSpace Use \"mask\" freq estimator (default is \"peak\" estimator)\n"); + exit(1); + } + + /* Extract parameters */ + M = atoi(argv[dx]); + Fs = atoi(argv[dx + 1]); + Rs = atoi(argv[dx + 2]); + + if( (M!=2) && (M!=4) ){ + fprintf(stderr,"Mode %d is not valid. Mode must be 2 or 4.\n",M); + goto helpmsg; + } + + /* Open files */ + if(strcmp(argv[dx + 3],"-")==0){ + fin = stdin; + }else{ + fin = fopen(argv[dx + 3],"r"); + } + + if(strcmp(argv[dx + 4],"-")==0){ + fout = stdout; + }else{ + fout = fopen(argv[dx + 4],"w"); + } + + /* set up FSK */ + fsk = fsk_create_hbr(Fs,Rs,M,P,nsym,FSK_NONE,tone_separation); + + /* set freq estimator limits */ + if (!user_fsk_lower) { + if (complex_input == 1) + fsk_lower = 0; + else + fsk_lower = -Fs/2; + } + if (!user_fsk_upper) { + fsk_upper = Fs/2; + } + fprintf(stderr,"Setting estimator limits to %d to %d Hz.\n", fsk_lower, fsk_upper); + fsk_set_freq_est_limits(fsk,fsk_lower,fsk_upper); + + fsk_set_freq_est_alg(fsk, mask); + + if(fin==NULL || fout==NULL || fsk==NULL){ + fprintf(stderr,"Couldn't open files\n"); + exit(1); + } + + /* set up testframe mode */ + + int testframecnt, bitcnt, biterr, testframe_detected; + uint8_t *bitbuf_tx = NULL, *bitbuf_rx = NULL; + if (testframe_mode) { + bitbuf_tx = (uint8_t*)malloc(sizeof(uint8_t)*TEST_FRAME_SIZE); assert(bitbuf_tx != NULL); + bitbuf_rx = (uint8_t*)malloc(sizeof(uint8_t)*TEST_FRAME_SIZE); assert(bitbuf_rx != NULL); + + /* Generate known tx frame from known seed */ + + srand(158324); + for(i=0; imode*fsk->Nsym); assert(rx_filt != NULL); + llrs = (float*)malloc(sizeof(float)*fsk->Nbits); assert(llrs != NULL); + } else { + bitbuf = (uint8_t*)malloc(sizeof(uint8_t)*fsk->Nbits); assert(bitbuf != NULL); + } + rawbuf = (int16_t*)malloc(bytes_per_sample*(fsk->N+fsk->Ts*2)*complex_input); + modbuf = (COMP*)malloc(sizeof(COMP)*(fsk->N+fsk->Ts*2)); + + /* set up signal handler so we can terminate gracefully */ + + if (signal(SIGTERM, sig_handler) == SIG_ERR) { + printf("\ncan't catch SIGTERM\n"); + } + + /* Demodulate! */ + + while( fread(rawbuf,bytes_per_sample*complex_input,fsk_nin(fsk),fin) == fsk_nin(fsk) ){ + /* convert input to a buffer of floats. Note scaling isn't really necessary for FSK */ + + if (complex_input == 1) { + /* S16 real input */ + for(i=0;imode); + assert(fsk->Nbits == bps*fsk->Nsym); + /* output bit LLRs */ + fsk_demod_sd(fsk, rx_filt, modbuf); + fsk_rx_filt_to_llrs(llrs, rx_filt, fsk->v_est, fsk->SNRest, fsk->mode, fsk->Nsym); + } else { + fsk_demod(fsk,bitbuf,modbuf); + } + + testframe_detected = 0; + if (testframe_mode) { + assert(soft_dec_mode == 0); + + /* attempt to find a testframe and update stats */ + /* update silding window of input bits */ + + int errs; + for(j=0; jNbits; j++) { + for(i=0; ippm); + float *f_est; + if (fsk->freq_est_type) + f_est = fsk->f2_est; + else + f_est = fsk->f_est; + fprintf(stderr," \"f1_est\":%.1f, \"f2_est\":%.1f",f_est[0],f_est[1]); + + /* Print 4FSK stats if in 4FSK mode */ + + if(fsk->mode == 4){ + fprintf(stderr,", \"f3_est\":%.1f, \"f4_est\":%.1f",f_est[2],f_est[3]); + } + + if (testframe_mode == 0) { + /* Print the eye diagram */ + + fprintf(stderr,",\t\"eye_diagram\":["); + for(i=0;iNdft/2; + for(i=0; iSf)[i]); + if(iNbits,fout); + } else{ + fwrite(bitbuf,sizeof(uint8_t),fsk->Nbits,fout); + } + + if(fin == stdin || fout == stdin){ + fflush(fin); + fflush(fout); + } + } /* while(fread ...... */ + + if (testframe_mode) { + free(bitbuf_tx); + free(bitbuf_rx); + } + + if (soft_dec_mode) { + free(rx_filt); + free(llrs); + } else{ + free(bitbuf); + } + + free(rawbuf); + free(modbuf); + + fclose(fin); + fclose(fout); + fsk_destroy(fsk); + + return 0; +} + diff --git a/libcodec2-android/src/codec2/src/fsk_get_test_bits.c b/libcodec2-android/src/codec2/src/fsk_get_test_bits.c new file mode 100644 index 0000000..54857cb --- /dev/null +++ b/libcodec2-android/src/codec2/src/fsk_get_test_bits.c @@ -0,0 +1,96 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: fsk_get_test_bits.c + AUTHOR......: Brady O'Brien + DATE CREATED: January 2016 + + Generates a pseudorandom sequence of bits for testing of fsk_mod and fsk_demod + +\*---------------------------------------------------------------------------*/ + + +/* + Copyright (C) 2016 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + + +#include +#include +#include "fsk.h" + +#define TEST_FRAME_SIZE 100 /* arbitrary choice, repeats after this + many bits, sets frame size for rx + processing */ + +int main(int argc,char *argv[]){ + int bitcnt, framecnt; + int framesize = TEST_FRAME_SIZE; + int i; + FILE *fout; + uint8_t *bitbuf; + + if(argc < 3){ + fprintf(stderr,"usage: %s OutputBitsOnePerByte numBits [framesize]\n",argv[0]); + exit(1); + } + + if (argc == 4){ + framesize = atoi(argv[3]); + fprintf(stderr, "Using custom frame size of %d bits\n", framesize); + } + + /* Extract parameters */ + bitcnt = atoi(argv[2]); + framecnt = bitcnt/framesize; + if (framecnt == 0) { + fprintf(stderr,"Need a minimum of %d bits\n", framesize); + exit(1); + } + + if(strcmp(argv[1],"-")==0){ + fout = stdout; + }else{ + fout = fopen(argv[1],"w"); + } + + if(fout==NULL){ + fprintf(stderr,"Couldn't open output file: %s\n", argv[1]); + goto cleanup; + } + + /* allocate buffers for processing */ + bitbuf = (uint8_t*)alloca(sizeof(uint8_t)*framesize); + + /* Generate buffer of test frame bits from known seed */ + srand(158324); + for(i=0; i. +*/ + +#include +#include +#include +#include "fsk.h" +#include "codec2_fdmdv.h" + +int main(int argc,char *argv[]){ + struct FSK *fsk; + int Fs,Rs,f1,fs,M; + int i; + int p, user_p = 0; + FILE *fin,*fout; + int complex = 0; + int bytes_per_sample = 2; + float amp = FDMDV_SCALE; + int test_mode = 0; + + char usage[] = "usage: %s [-p P] [-c] [-a Amplitude] [-t] Mode SampleFreq SymbolFreq TxFreq1 TxFreqSpace InputOneBitPerCharFile OutputModRawFile\n" + " -c complex signed 16 bit output format\n" + " -a Amplitude Amplitude of signal\n" + " -t test mode unmodulated carrier, useful for setting levels\n"; + + int opt; + while ((opt = getopt(argc, argv, "a:p:ct")) != -1) { + switch (opt) { + case 'a': + amp = atof(optarg)/2.0; /* fsk_mod amplitude is +/-2 */ + break; + case 'c': + complex = 1; bytes_per_sample = 4; + break; + case 't': + test_mode = 1; + break; + case 'p': + p = atoi(optarg); + user_p = 1; + break; + default: + fprintf(stderr, usage, argv[0]); + exit(1); + } + } + + if (argc<8){ + fprintf(stderr, usage, argv[0]); + exit(1); + } + + /* Extract parameters */ + M = atoi(argv[optind++]); + Fs = atoi(argv[optind++]); + Rs = atoi(argv[optind++]); + f1 = atoi(argv[optind++]); + fs = atoi(argv[optind++]); + + if(strcmp(argv[optind],"-")==0){ + fin = stdin; + }else{ + fin = fopen(argv[optind],"r"); + } + optind++; + + if(strcmp(argv[optind],"-")==0){ + fout = stdout; + }else{ + fout = fopen(argv[optind],"w"); + } + + /* p is not actually used for the modulator, but we need to set it for fsk_create() to be happy */ + if (!user_p) + p = Fs/Rs; + + /* set up FSK */ + fsk = fsk_create_hbr(Fs,Rs,M,p,FSK_DEFAULT_NSYM,f1,fs); + + if(fin==NULL || fout==NULL || fsk==NULL){ + fprintf(stderr,"Couldn't open files\n"); + exit(1); + } + + /* Mote we use the same buffer sizes as demod (fsk->Nbits, fsk->N) + for convenience, but other sizes are possible for the + FSK modulator. */ + uint8_t bitbuf[fsk->Nbits]; + + while( fread(bitbuf,sizeof(uint8_t),fsk->Nbits,fin) == fsk->Nbits ){ + if (test_mode) memset(bitbuf,0,fsk->Nbits); + if (complex == 0) { + float modbuf[fsk->N]; + int16_t rawbuf[fsk->N]; + /* 16 bit signed short real output */ + fsk_mod(fsk,modbuf,bitbuf,fsk->Nbits); + for(i=0; iN; i++) + rawbuf[i] = (int16_t)(modbuf[i]*amp); + fwrite(rawbuf,bytes_per_sample,fsk->N,fout); + } else { + /* 16 bit signed char complex output */ + COMP modbuf[fsk->N]; + int16_t rawbuf[2*fsk->N]; + fsk_mod_c(fsk,(COMP*)modbuf,bitbuf,fsk->Nbits); + for(i=0; iN; i++) { + rawbuf[2*i] = (int16_t)(modbuf[i].real*amp); + rawbuf[2*i+1] = (int16_t)(modbuf[i].imag*amp); + } + fwrite(rawbuf,bytes_per_sample,fsk->N,fout); + } + + if(fin == stdin || fout == stdin){ + fflush(fin); + fflush(fout); + } + } + + fsk_destroy(fsk); +} diff --git a/libcodec2-android/src/codec2/src/fsk_mod_ext_vco.c b/libcodec2-android/src/codec2/src/fsk_mod_ext_vco.c new file mode 100644 index 0000000..08a1c83 --- /dev/null +++ b/libcodec2-android/src/codec2/src/fsk_mod_ext_vco.c @@ -0,0 +1,144 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: fsk_mod_ext_vco.c + AUTHOR......: David Rowe + DATE CREATED: Feb 2018 + + Converts a stream of bits to mFSK raw file of "levels" suitable for + driving an external VCO, e.g. legacy FM transmitter in data mode. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2018 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include +#include +#include +#include +#include + +#define OVERSAMPLE 100 + +int main(int argc,char *argv[]){ + int os, m, log2m, i, bit_i, sym, legacy_mode, rpitx_mode; + float d; + double shiftHz, symbolRateHz; + uint32_t time_sample; + FILE *fin,*fout; + + if(argc<5){ + fprintf(stderr, "usage: %s InputOneBitPerCharFile OutputVcoRawFile MbitsPerFSKsymbol\n",argv[0]); + fprintf(stderr, "[--legacy OutputSamplesPerSymbol deviationPerlevel]\n"); + fprintf(stderr, "[--rpitx ShiftHz SymbolRateHz\n]"); + exit(1); + } + + /* Extract parameters */ + + if (strcmp(argv[1],"-")==0){ + fin = stdin; + } else { + fin = fopen(argv[1],"r"); + } + + if (strcmp(argv[2],"-")==0){ + fout = stdout; + } else { + fout = fopen(argv[2],"w"); + } + + m = atoi(argv[3]); log2m = log2(m); + printf("log2m: %d\n", log2m); + + legacy_mode = rpitx_mode = os = 0; + if (!strcmp(argv[4],"--legacy")) { + os = atoi(argv[5]); + d = atof(argv[6]); + legacy_mode = 1; + } + if (!strcmp(argv[4],"--rpitx")) { + shiftHz = atof(argv[5]); + symbolRateHz = atof(argv[6]); + rpitx_mode = 1; + time_sample = 1E9/symbolRateHz; + fprintf(stderr, "time_sample: %d\n", time_sample); + } + + assert(legacy_mode || rpitx_mode); + fprintf(stderr, "legacy_mode: %d rpitx_mode: %d\n", legacy_mode, rpitx_mode); + + uint8_t tx_bits[log2m]; + int16_t rawbuf[os]; + + /* Modulate m bits to levels to drive external VCO */ + + while( fread(tx_bits, sizeof(uint8_t), log2m, fin) == log2m ){ + + /* generate the symbol number from the bit stream, + e.g. 0,1 for 2FSK, 0,1,2,3 for 4FSK */ + + sym = bit_i = 0; + for( i=m; i>>=1; ){ + //fprintf(stderr, "tx_bits[%d] = %d\n", i, tx_bits[bit_i]); + uint8_t bit = tx_bits[bit_i]; + bit = (bit==1)?1:0; + sym = (sym<<1)|bit; + bit_i++; + } + //fprintf(stderr, "sym = %d\n", sym); + + if (legacy_mode) { + /* map 'sym' to VCO drive signal symmetrically about 0, + separate tones by constant "d" */ + /* 2 FSK -d/2, +d/2 */ + /* 4 FSK -3*d/2, -d/2, +d/2, 3*d/2 */ + + /* note: drive is inverted, a higher tone drives VCO voltage lower */ + + float symf = sym; + float level = d*(((float)m-1)*0.5 - symf); + assert(level <= 32767.0); + assert(level >= -32768.0); + short level_short = (short)level; + //fprintf(stderr, "level = %f level_short = %d\n\n", level, level_short); + for(i=0; i. +*/ + +#include +#include +#include +#include "fsk.h" + +#define TEST_FRAME_SIZE 100 /* must match fsk_get_test_bits.c */ + +#define VALID_PACKET_BER_THRESH 0.1 + +int main(int argc,char *argv[]){ + int bitcnt,biterr,i,errs,packetcnt; + int framesize = TEST_FRAME_SIZE; + float valid_packet_ber_thresh = VALID_PACKET_BER_THRESH; + int packet_pass_thresh = 0; + float ber_pass_thresh = 0; + FILE *fin; + uint8_t *bitbuf_tx, *bitbuf_rx, abyte, abit; + int verbose = 1; + int packed_in = 0; + + char usage[] = "usage: %s [-f frameSizeBits] [-t VaildFrameBERThreshold] [-b BERPass] [-p numPacketsPass] [-k] InputOneBitPerByte\n" + " [-k] packet byte input\n"; + + int opt; + while ((opt = getopt(argc, argv, "f:b:p:hqt:k")) != -1) { + switch (opt) { + case 't': + valid_packet_ber_thresh = atof(optarg); + break; + case 'b': + ber_pass_thresh = atof(optarg); + break; + case 'p': + packet_pass_thresh = atoi(optarg); + break; + case 'f': + framesize = atoi(optarg); + break; + case 'q': + verbose = 0; + break; + case 'k': + packed_in = 1; + break; + case 'h': + default: + fprintf(stderr, usage, argv[0]); + exit(1); + } + } + if (argc == 1) { + fprintf(stderr, usage, argv[0]); + exit(1); + } + + int bits_per_byte = 1; + if (packed_in) { + if (framesize % 8) { + fprintf(stderr, "framesize (-f) must be a multiple of 8 for packed byte input (-k)\n"); + exit(1); + } + bits_per_byte = 8; + } + + char *fname = argv[optind++]; + if ((strcmp(fname,"-")==0) || (argc<2)){ + fin = stdin; + } else { + fin = fopen(fname,"r"); + } + + if(fin==NULL){ + fprintf(stderr,"Couldn't open input file: %s\n", argv[1]); + exit(1); + } + + /* allocate buffers for processing */ + bitbuf_tx = (uint8_t*)alloca(sizeof(uint8_t)*framesize); + bitbuf_rx = (uint8_t*)alloca(sizeof(uint8_t)*framesize); + + /* Generate known tx frame from known seed */ + srand(158324); + for(i=0; i0){ + + for (int b=0; b> ((bits_per_byte-1)-b)) & 0x1; + + /* update sliding window of input bits */ + + for(i=0; i= packet_pass_thresh) && (ber <= ber_pass_thresh)) { + fprintf(stderr,"PASS\n"); + return 0; + } + else { + fprintf(stderr,"FAIL\n"); + return 1; + } +} diff --git a/libcodec2-android/src/codec2/src/generate_codebook.c b/libcodec2-android/src/codec2/src/generate_codebook.c new file mode 100644 index 0000000..8733635 --- /dev/null +++ b/libcodec2-android/src/codec2/src/generate_codebook.c @@ -0,0 +1,187 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: generate_codebook.c + AUTHOR......: Bruce Perens + DATE CREATED: 29 Sep 2010 + + Generate header files containing LSP quantisers, runs at compile time. + +\*---------------------------------------------------------------------------*/ + +/* + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include +#include +#include + +static const char usage[] = +"Usage: %s filename array_name [filename ...]\n" +"\tCreate C code for codebook tables.\n"; + +static const char format[] = +"The table format must be:\n" +"\tTwo integers describing the dimensions of the codebook.\n" +"\tThen, enough numbers to fill the specified dimensions.\n"; + +static const char header[] = +"/* THIS IS A GENERATED FILE. Edit generate_codebook.c and its input */\n\n" +"/*\n" +" * This intermediary file and the files that used to create it are under \n" +" * The LGPL. See the file COPYING.\n" +" */\n\n" +"#include \"defines.h\"\n\n"; + +struct codebook { + unsigned int k; + unsigned int log2m; + unsigned int m; + float * cb; +}; + +static void +dump_array(const struct codebook * b, int index) +{ + int limit = b->k * b->m; + int i; + + printf("#ifdef __EMBEDDED__\n"); + printf("static const float codes%d[] = {\n", index); + printf("#else\n"); + printf("static float codes%d[] = {\n", index); + printf("#endif\n"); + for ( i = 0; i < limit; i++ ) { + printf(" %g", b->cb[i]); + if ( i < limit - 1 ) + printf(","); + + /* organise VQs by rows, looks prettier */ + if ( ((i+1) % b->k) == 0 ) + printf("\n"); + } + printf("};\n"); +} + +static void +dump_structure(const struct codebook * b, int index) +{ + printf(" {\n"); + printf(" %d,\n", b->k); + printf(" %g,\n", log(b->m) / log(2)); + printf(" %d,\n", b->m); + printf(" codes%d\n", index); + printf(" }"); +} + +float +get_float(FILE * in, const char * name, char * * cursor, char * buffer, + int size) +{ + for ( ; ; ) { + char * s = *cursor; + char c; + + while ( (c = *s) != '\0' && !isdigit(c) && c != '-' && c != '.' ) + s++; + + /* Comments start with "#" and continue to the end of the line. */ + if ( c != '\0' && c != '#' ) { + char * end = 0; + float f = 0; + + f = strtod(s, &end); + + if ( end != s ) + *cursor = end; + return f; + } + + if ( fgets(buffer, size, in) == NULL ) { + fprintf(stderr, "%s: Format error. %s\n", name, format); + exit(1); + } + *cursor = buffer; + } +} + +static struct codebook * +load(FILE * file, const char * name) +{ + char line[1024]; + char * cursor = line; + struct codebook * b = malloc(sizeof(struct codebook)); + int i; + int size; + + *cursor = '\0'; + + b->k = (int)get_float(file, name, &cursor, line, sizeof(line)); + b->m = (int)get_float(file, name ,&cursor, line, sizeof(line)); + size = b->k * b->m; + + b->cb = (float *)malloc(size * sizeof(float)); + + for ( i = 0; i < size; i++ ) + b->cb[i] = get_float(file, name, &cursor, line, sizeof(line)); + + return b; +} + +int +main(int argc, char * * argv) +{ + struct codebook * * cb = malloc(argc * sizeof(struct codebook *)); + int i; + + if ( argc < 2 ) { + fprintf(stderr, usage, argv[0]); + fprintf(stderr, format); + exit(1); + } + + for ( i = 0; i < argc - 2; i++ ) { + FILE * in = fopen(argv[i + 2], "r"); + + if ( in == NULL ) { + perror(argv[i + 2]); + exit(1); + } + + cb[i] = load(in, argv[i + 2]); + + fclose(in); + } + + printf(header); + for ( i = 0; i < argc - 2; i++ ) { + printf(" /* %s */\n", argv[i + 2]); + dump_array(cb[i], i); + } + printf("\nconst struct lsp_codebook %s[] = {\n", argv[1]); + for ( i = 0; i < argc - 2; i++ ) { + printf(" /* %s */\n", argv[i + 2]); + dump_structure(cb[i], i); + printf(",\n"); + } + printf(" { 0, 0, 0, 0 }\n"); + printf("};\n"); + for( i = 0; i < argc - 2; i++ ){ + free(cb[i]->cb); + free(cb[i]); + } + free(cb); + return 0; +} diff --git a/libcodec2-android/src/codec2/src/golay23.c b/libcodec2-android/src/codec2/src/golay23.c new file mode 100644 index 0000000..158a099 --- /dev/null +++ b/libcodec2-android/src/codec2/src/golay23.c @@ -0,0 +1,311 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: golay23.c + AUTHOR......: Tomas Härdin & David Rowe + DATE CREATED: 3 March 2013 + + To test: + + src$ gcc golay23.c -o golay23 -Wall -O3 -DGOLAY23_UNITTEST && ./golay23 + src$ gcc golay23.c -o golay23 -Wall -O3 -DGOLAY23_UNITTEST -DRUN_TIME_TABLES && ./golay23 + src$ gcc golay23.c -o golay23 -Wall -O3 -DGOLAY23_UNITTEST -DNO_TABLES && ./golay23 + + To generate tables: + src$ gcc golay23.c -o golay23 -Wall -O3 -DGOLAY23_MAKETABLES && ./golay23 + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2016 Tomas Härdin & David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not,see . +*/ + +#include + +#ifdef GOLAY23_MAKETABLES +#define RUN_TIME_TABLES +#endif + +#ifndef NO_TABLES +#ifdef RUN_TIME_TABLES +int static encoding_table[4096]; +int static decoding_table[2048]; +static int inited = 0; +#else +//default is to use precomputed tables +#include "golayenctable.h" +#include "golaydectable.h" +#endif +#endif + +//since we want to avoid bit-reversing inside syndrome() we bit-reverse the polynomial instead +#define GOLAY_POLYNOMIAL 0xC75 //AE3 reversed + +int golay23_syndrome(int c) { + //could probably be done slightly smarter, but works + int x; + for (x = 11; x >= 0; x--) { + if (c & ((1<<11) << x)) { + c ^= GOLAY_POLYNOMIAL << x; + } + } + return c; +} + +#ifdef __GNUC__ +#define popcount __builtin_popcount +#elif defined(__MSC_VER) +#include +#define popcount __popcnt +#else +static int popcount(unsigned int c) { + int ret = 0; + while (c) { + if (c & 1) { + ret++; + } + c >>= 1; + } + return ret; +} +#endif + +#if defined(NO_TABLES) || defined(RUN_TIME_TABLES) +static int golay23_encode_no_tables(int c) { + c <<= 11; + return golay23_syndrome(c) | c; +} +#endif + +#ifdef NO_TABLES +static int unrotate(unsigned int c, int x) { + return ((c << x) & 0x7FFFFF) | (c >> (23 - x)); +} + +static int golay23_decode_no_tables(int c) { + //TODO: optimize? + int x; + c = unrotate(c, 12); + + for (x = 0; x < 23; x++) { + int t; + int s = golay23_syndrome(c); + + if (popcount(s) <= 3) { + return unrotate(c ^ s, x) & 0xFFF; + } + + for (t = 0; t < 23; t++) { + int c2 = c ^ (1 << t); + int s = golay23_syndrome(c2); + + if (popcount(s) <= 2) { + return unrotate(c2 ^ s, x) & 0xFFF; + } + } + + //rotate + c = (c >> 1) | ((c & 1) << 22); + } + + //shouldn't reach here.. + assert("Something is wrong with golay23_decode_no_tables().."); + return c & 0xFFF; +} +#endif + +void golay23_init(void) { +#ifdef RUN_TIME_TABLES + int x, y, z; + inited = 1; + for (x = 0; x < 4096; x++) { + encoding_table[x] = golay23_encode_no_tables(x); + } + + decoding_table[0] = 0; + //1-bit errors + for (x = 0; x < 23; x++) { + int d = 1<= 0 && c <= 0xFFF); +#ifdef RUN_TIME_TABLES + assert(inited); +#endif + +#ifdef NO_TABLES + return golay23_encode_no_tables(c); +#else + return encoding_table[c]; +#endif +} + +int golay23_decode(int c) { + assert(c >= 0 && c <= 0x7FFFFF); +#ifdef RUN_TIME_TABLES + assert(inited); +#endif + +#ifdef NO_TABLES + //duplicate old golay23_decode()'s shift + return unrotate(golay23_decode_no_tables(c), 11); +#else + //message is shifted 11 places left in the return value + return c ^ decoding_table[golay23_syndrome(c)]; +#endif +} + +int golay23_count_errors(int recd_codeword, int corrected_codeword) { + return popcount(recd_codeword ^ corrected_codeword); +} + +/** + * Table generation and testing code below + */ + +#ifdef GOLAY23_MAKETABLES +#include + +int main() { + int x; + //generate and dump + golay23_init(); + + FILE *enc = fopen("golayenctable.h", "w"); + FILE *dec = fopen("golaydectable.h", "w"); + + fprintf(enc, "/* Generated by golay23.c -DGOLAY23_MAKETABLE */\n\ +\n\ +const int static encoding_table[]={\n"); + for (x = 0; x < 4096; x++) { + fprintf(enc, x < 4095 ? " 0x%x,\n" : " 0x%x\n", encoding_table[x]); + } + fprintf(enc, "};\n"); + + fprintf(dec, "/* Generated by golay23.c -DGOLAY23_MAKETABLE */\n\ +\n\ +const int static decoding_table[]={\n"); + for (x = 0; x < 2048; x++) { + fprintf(dec, x < 2047 ? " 0x%x,\n" : " 0x%x\n", decoding_table[x]); + } + fprintf(dec, "};\n"); + + fclose(enc); + fclose(dec); + + return 0; +} + +#elif defined(GOLAY23_UNITTEST) +#include +#include +#include + +int main() { + int c; + + golay23_init(); + + //keep track of whether every single codeword has been checked + char *checkmask = malloc(1<<23); + memset(checkmask, 0, 1<<23); + + //step through all possible messages + for (c = 0; c < (1<<12); c++) { + int g23 = golay23_encode(c); + int x,y,z; + checkmask[g23] = 1; + int c2 = golay23_decode(g23) >> 11; + + printf("%03x -> %06x %03x\n", c, g23, c2); + + if (c != c2) { + printf("Bad!\n"); + exit(1); + } + + //test the code by flipping every combination of one, two and three bits + for (x = 0; x < 23; x++) { + int flipped = g23 ^ (1<> 11; + if (c != c2) { + printf("Bad!\n"); + + exit(1); + } + } + + for (x = 0; x < 22; x++) { + for (y = x+1; y < 23; y++) { + int flipped = g23 ^ (1<> 11; + if (c != c2) { + printf("Bad!\n"); + + exit(1); + } + } + } + + for (x = 0; x < 21; x++) { + for (y = x+1; y < 22; y++) { + for (z = y+1; z < 23; z++) { + int flipped = g23 ^ (1<> 11; + if (c != c2) { + printf("Bad!\n"); + exit(1); + } + } + } + } + } + + //did we check every codeword? + for (c = 0; c < (1<<23); c++) { + if (checkmask[c] != 1) { + printf("%06x unchecked!\n", c); + exit(1); + } + } + + printf("Everything checks out\n"); + free(checkmask); + return 0; +} +#endif diff --git a/libcodec2-android/src/codec2/src/golay23.h b/libcodec2-android/src/codec2/src/golay23.h new file mode 100644 index 0000000..25502c6 --- /dev/null +++ b/libcodec2-android/src/codec2/src/golay23.h @@ -0,0 +1,45 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: golay23.h + AUTHOR......: David Rowe + DATE CREATED: 3 March 2013 + + Header file for Golay FEC. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2013 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#ifndef __GOLAY23__ +#define __GOLAY23__ + +#ifdef __cplusplus +extern "C" { +#endif + +void golay23_init(void); +int golay23_encode(int data); +int golay23_decode(int received_codeword); +int golay23_count_errors(int recd_codeword, int corrected_codeword); +int golay23_syndrome(int c); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/libcodec2-android/src/codec2/src/golaydectable.h b/libcodec2-android/src/codec2/src/golaydectable.h new file mode 100644 index 0000000..b7dc4ff --- /dev/null +++ b/libcodec2-android/src/codec2/src/golaydectable.h @@ -0,0 +1,2052 @@ +/* Generated by golay23.c -DGOLAY23_MAKETABLE */ + +static const int decoding_table[]={ + 0x0, + 0x1, + 0x2, + 0x3, + 0x4, + 0x5, + 0x6, + 0x7, + 0x8, + 0x9, + 0xa, + 0xb, + 0xc, + 0xd, + 0xe, + 0x24020, + 0x10, + 0x11, + 0x12, + 0x13, + 0x14, + 0x15, + 0x16, + 0x412000, + 0x18, + 0x19, + 0x1a, + 0x180800, + 0x1c, + 0x200300, + 0x48040, + 0x1480, + 0x20, + 0x21, + 0x22, + 0x23, + 0x24, + 0x25, + 0x26, + 0x24008, + 0x28, + 0x29, + 0x2a, + 0x24004, + 0x2c, + 0x24002, + 0x24001, + 0x24000, + 0x30, + 0x31, + 0x32, + 0x8180, + 0x34, + 0xc40, + 0x301000, + 0xc0200, + 0x38, + 0x43000, + 0x400600, + 0x210040, + 0x90080, + 0x508000, + 0x2900, + 0x24010, + 0x40, + 0x41, + 0x42, + 0x43, + 0x44, + 0x45, + 0x46, + 0x280080, + 0x48, + 0x49, + 0x4a, + 0x2500, + 0x4c, + 0x111000, + 0x48010, + 0x400a00, + 0x50, + 0x51, + 0x52, + 0x21200, + 0x54, + 0xc20, + 0x48008, + 0x104100, + 0x58, + 0x404080, + 0x48004, + 0x210020, + 0x48002, + 0xa2000, + 0x48000, + 0x48001, + 0x60, + 0x61, + 0x62, + 0x540000, + 0x64, + 0xc10, + 0x10300, + 0xb000, + 0x68, + 0x88200, + 0x1880, + 0x210010, + 0x602000, + 0x40180, + 0x180400, + 0x24040, + 0x70, + 0xc04, + 0x86000, + 0x210008, + 0xc01, + 0xc00, + 0x420080, + 0xc02, + 0x120100, + 0x210002, + 0x210001, + 0x210000, + 0x5200, + 0xc08, + 0x48020, + 0x210004, + 0x80, + 0x81, + 0x82, + 0x83, + 0x84, + 0x85, + 0x86, + 0x280040, + 0x88, + 0x89, + 0x8a, + 0x50200, + 0x8c, + 0xa800, + 0x500100, + 0x1410, + 0x90, + 0x91, + 0x92, + 0x8120, + 0x94, + 0x160000, + 0x4a00, + 0x1408, + 0x98, + 0x404040, + 0x222000, + 0x1404, + 0x90020, + 0x1402, + 0x1401, + 0x1400, + 0xa0, + 0xa1, + 0xa2, + 0x8110, + 0xa4, + 0x401200, + 0x42400, + 0x110800, + 0xa8, + 0x300400, + 0x1840, + 0x482000, + 0x90010, + 0x40140, + 0x208200, + 0x24080, + 0xb0, + 0x8102, + 0x8101, + 0x8100, + 0x90008, + 0x206000, + 0x420040, + 0x8104, + 0x90004, + 0x20a00, + 0x144000, + 0x8108, + 0x90000, + 0x90001, + 0x90002, + 0x1420, + 0xc0, + 0xc1, + 0xc2, + 0x280004, + 0xc4, + 0x280002, + 0x280001, + 0x280000, + 0xc8, + 0x404010, + 0x1820, + 0x128000, + 0x20600, + 0x40120, + 0x16000, + 0x280008, + 0xd0, + 0x404008, + 0x110400, + 0x42800, + 0x3100, + 0x18200, + 0x420020, + 0x280010, + 0x404001, + 0x404000, + 0x80300, + 0x404002, + 0x300800, + 0x404004, + 0x48080, + 0x1440, + 0xe0, + 0x32000, + 0x1808, + 0x4600, + 0x10c000, + 0x40108, + 0x420010, + 0x280020, + 0x1802, + 0x40104, + 0x1800, + 0x1801, + 0x40101, + 0x40100, + 0x1804, + 0x40102, + 0x240200, + 0x181000, + 0x420004, + 0x8140, + 0x420002, + 0xc80, + 0x420000, + 0x420001, + 0xa400, + 0x404020, + 0x1810, + 0x210080, + 0x90040, + 0x40110, + 0x420008, + 0x102200, + 0x100, + 0x101, + 0x102, + 0x103, + 0x104, + 0x105, + 0x106, + 0x41800, + 0x108, + 0x109, + 0x10a, + 0x2440, + 0x10c, + 0x200210, + 0x500080, + 0x98000, + 0x110, + 0x111, + 0x112, + 0x80a0, + 0x114, + 0x200208, + 0xa0400, + 0x104040, + 0x118, + 0x200204, + 0x15000, + 0x460000, + 0x200201, + 0x200200, + 0x2820, + 0x200202, + 0x120, + 0x121, + 0x122, + 0x8090, + 0x124, + 0x182000, + 0x10240, + 0x600400, + 0x128, + 0x410800, + 0x2c0000, + 0x101200, + 0x9400, + 0x400c0, + 0x2810, + 0x24100, + 0x130, + 0x8082, + 0x8081, + 0x8080, + 0x444000, + 0x31000, + 0x2808, + 0x8084, + 0x120040, + 0x84400, + 0x2804, + 0x8088, + 0x2802, + 0x200220, + 0x2800, + 0x2801, + 0x140, + 0x141, + 0x142, + 0x2408, + 0x144, + 0x428000, + 0x10220, + 0x104010, + 0x148, + 0x2402, + 0x2401, + 0x2400, + 0x84800, + 0x400a0, + 0x221000, + 0x2404, + 0x150, + 0xd0000, + 0x600800, + 0x104004, + 0x3080, + 0x104002, + 0x104001, + 0x104000, + 0x120020, + 0x9800, + 0x80280, + 0x2410, + 0x410400, + 0x200240, + 0x48100, + 0x104008, + 0x160, + 0x205000, + 0x10204, + 0xa0800, + 0x10202, + 0x40088, + 0x10200, + 0x10201, + 0x120010, + 0x40084, + 0x40c000, + 0x2420, + 0x40081, + 0x40080, + 0x10208, + 0x40082, + 0x120008, + 0x402200, + 0x41400, + 0x80c0, + 0x288000, + 0xd00, + 0x10210, + 0x104020, + 0x120000, + 0x120001, + 0x120002, + 0x210100, + 0x120004, + 0x40090, + 0x2840, + 0x481000, + 0x180, + 0x181, + 0x182, + 0x8030, + 0x184, + 0x14400, + 0x500008, + 0x22200, + 0x188, + 0xa1000, + 0x500004, + 0x204800, + 0x500002, + 0x40060, + 0x500000, + 0x500001, + 0x190, + 0x8022, + 0x8021, + 0x8020, + 0x3040, + 0x480800, + 0x250000, + 0x8024, + 0x40c00, + 0x112000, + 0x80240, + 0x8028, + 0x2c000, + 0x200280, + 0x500010, + 0x1500, + 0x1a0, + 0x8012, + 0x8011, + 0x8010, + 0x220800, + 0x40048, + 0x85000, + 0x8014, + 0x6200, + 0x40044, + 0x30400, + 0x8018, + 0x40041, + 0x40040, + 0x500020, + 0x40042, + 0x8003, + 0x8002, + 0x8001, + 0x8000, + 0x100600, + 0x8006, + 0x8005, + 0x8004, + 0x601000, + 0x800a, + 0x8009, + 0x8008, + 0x90100, + 0x40050, + 0x2880, + 0x800c, + 0x1c0, + 0x100a00, + 0x64000, + 0x411000, + 0x3010, + 0x40028, + 0x8c00, + 0x280100, + 0x218000, + 0x40024, + 0x80210, + 0x2480, + 0x40021, + 0x40020, + 0x500040, + 0x40022, + 0x3004, + 0x220400, + 0x80208, + 0x8060, + 0x3000, + 0x3001, + 0x3002, + 0x104080, + 0x80202, + 0x404100, + 0x80200, + 0x80201, + 0x3008, + 0x40030, + 0x80204, + 0x30800, + 0x480400, + 0x4000c, + 0x302000, + 0x8050, + 0x40009, + 0x40008, + 0x10280, + 0x4000a, + 0x40005, + 0x40004, + 0x1900, + 0x40006, + 0x40001, + 0x40000, + 0x40003, + 0x40002, + 0x14800, + 0x8042, + 0x8041, + 0x8040, + 0x3020, + 0x40018, + 0x420100, + 0x8044, + 0x120080, + 0x40014, + 0x80220, + 0x8048, + 0x40011, + 0x40010, + 0x204400, + 0x40012, + 0x200, + 0x201, + 0x202, + 0x203, + 0x204, + 0x205, + 0x206, + 0x108400, + 0x208, + 0x209, + 0x20a, + 0x50080, + 0x20c, + 0x200110, + 0x83000, + 0x400840, + 0x210, + 0x211, + 0x212, + 0x21040, + 0x214, + 0x200108, + 0x4880, + 0xc0020, + 0x218, + 0x200104, + 0x400420, + 0xe000, + 0x200101, + 0x200100, + 0x130000, + 0x200102, + 0x220, + 0x221, + 0x222, + 0x202800, + 0x224, + 0x401080, + 0x10140, + 0xc0010, + 0x228, + 0x88040, + 0x400410, + 0x101100, + 0x140800, + 0x12400, + 0x208080, + 0x24200, + 0x230, + 0x114000, + 0x400408, + 0xc0004, + 0x2a000, + 0xc0002, + 0xc0001, + 0xc0000, + 0x400402, + 0x20880, + 0x400400, + 0x400401, + 0x5040, + 0x200120, + 0x400404, + 0xc0008, + 0x240, + 0x241, + 0x242, + 0x21010, + 0x244, + 0x46000, + 0x10120, + 0x400808, + 0x248, + 0x88020, + 0x304000, + 0x400804, + 0x20480, + 0x400802, + 0x400801, + 0x400800, + 0x250, + 0x21002, + 0x21001, + 0x21000, + 0x580000, + 0x18080, + 0x202400, + 0x21004, + 0x12800, + 0x140400, + 0x80180, + 0x21008, + 0x5020, + 0x200140, + 0x48200, + 0x400810, + 0x260, + 0x88008, + 0x10104, + 0x4480, + 0x10102, + 0x320000, + 0x10100, + 0x10101, + 0x88001, + 0x88000, + 0x62000, + 0x88002, + 0x5010, + 0x88004, + 0x10108, + 0x400820, + 0x240080, + 0x402100, + 0x108800, + 0x21020, + 0x5008, + 0xe00, + 0x10110, + 0xc0040, + 0x5004, + 0x88010, + 0x400440, + 0x210200, + 0x5000, + 0x5001, + 0x5002, + 0x102080, + 0x280, + 0x281, + 0x282, + 0x50008, + 0x284, + 0x401020, + 0x4810, + 0x22100, + 0x288, + 0x50002, + 0x50001, + 0x50000, + 0x20440, + 0x184000, + 0x208020, + 0x50004, + 0x290, + 0x82400, + 0x4804, + 0x700000, + 0x4802, + 0x18040, + 0x4800, + 0x4801, + 0x109000, + 0x20820, + 0x80140, + 0x50010, + 0x442000, + 0x200180, + 0x4808, + 0x1600, + 0x2a0, + 0x401004, + 0x1a0000, + 0x4440, + 0x401001, + 0x401000, + 0x208008, + 0x401002, + 0x6100, + 0x20810, + 0x208004, + 0x50020, + 0x208002, + 0x401008, + 0x208000, + 0x208001, + 0x240040, + 0x20808, + 0x13000, + 0x8300, + 0x100500, + 0x401010, + 0x4820, + 0xc0080, + 0x20801, + 0x20800, + 0x400480, + 0x20802, + 0x90200, + 0x20804, + 0x208010, + 0x102040, + 0x2c0, + 0x100900, + 0x40a000, + 0x4420, + 0x20408, + 0x18010, + 0x141000, + 0x280200, + 0x20404, + 0x203000, + 0x80110, + 0x50040, + 0x20400, + 0x20401, + 0x20402, + 0x400880, + 0x240020, + 0x18004, + 0x80108, + 0x21080, + 0x18001, + 0x18000, + 0x4840, + 0x18002, + 0x80102, + 0x404200, + 0x80100, + 0x80101, + 0x20410, + 0x18008, + 0x80104, + 0x102020, + 0x240010, + 0x4402, + 0x4401, + 0x4400, + 0x82800, + 0x401040, + 0x10180, + 0x4404, + 0x510000, + 0x88080, + 0x1a00, + 0x4408, + 0x20420, + 0x40300, + 0x208040, + 0x102010, + 0x240000, + 0x240001, + 0x240002, + 0x4410, + 0x240004, + 0x18020, + 0x420200, + 0x102008, + 0x240008, + 0x20840, + 0x80120, + 0x102004, + 0x5080, + 0x102002, + 0x102001, + 0x102000, + 0x300, + 0x301, + 0x302, + 0x484000, + 0x304, + 0x200018, + 0x10060, + 0x22080, + 0x308, + 0x200014, + 0x28800, + 0x101020, + 0x200011, + 0x200010, + 0x44400, + 0x200012, + 0x310, + 0x20000c, + 0x142000, + 0x10c00, + 0x200009, + 0x200008, + 0x409000, + 0x20000a, + 0x200005, + 0x200004, + 0x800c0, + 0x200006, + 0x200001, + 0x200000, + 0x200003, + 0x200002, + 0x320, + 0x60400, + 0x10044, + 0x101008, + 0x10042, + 0xc800, + 0x10040, + 0x10041, + 0x6080, + 0x101002, + 0x101001, + 0x101000, + 0x4a0000, + 0x200030, + 0x10048, + 0x101004, + 0x81800, + 0x402040, + 0x224000, + 0x8280, + 0x100480, + 0x200028, + 0x10050, + 0xc0100, + 0x58000, + 0x200024, + 0x400500, + 0x101010, + 0x200021, + 0x200020, + 0x2a00, + 0x200022, + 0x340, + 0x100880, + 0x10024, + 0x248000, + 0x10022, + 0x81400, + 0x10020, + 0x10021, + 0x441000, + 0x34000, + 0x80090, + 0x2600, + 0x10a000, + 0x200050, + 0x10028, + 0x400900, + 0xc400, + 0x402020, + 0x80088, + 0x21100, + 0x60800, + 0x200048, + 0x10030, + 0x104200, + 0x80082, + 0x200044, + 0x80080, + 0x80081, + 0x200041, + 0x200040, + 0x80084, + 0x200042, + 0x10006, + 0x402010, + 0x10004, + 0x10005, + 0x10002, + 0x10003, + 0x10000, + 0x10001, + 0x200c00, + 0x88100, + 0x1000c, + 0x101040, + 0x1000a, + 0x40280, + 0x10008, + 0x10009, + 0x402001, + 0x402000, + 0x10014, + 0x402002, + 0x10012, + 0x402004, + 0x10010, + 0x10011, + 0x120200, + 0x402008, + 0x800a0, + 0x44800, + 0x5100, + 0x200060, + 0x10018, + 0x28400, + 0x380, + 0x100840, + 0x201400, + 0x22004, + 0xc8000, + 0x22002, + 0x22001, + 0x22000, + 0x6020, + 0x408400, + 0x80050, + 0x50100, + 0x11800, + 0x200090, + 0x500200, + 0x22008, + 0x430000, + 0x45000, + 0x80048, + 0x8220, + 0x100420, + 0x200088, + 0x4900, + 0x22010, + 0x80042, + 0x200084, + 0x80040, + 0x80041, + 0x200081, + 0x200080, + 0x80044, + 0x200082, + 0x6008, + 0x290000, + 0x440800, + 0x8210, + 0x100410, + 0x401100, + 0x100c0, + 0x22020, + 0x6000, + 0x6001, + 0x6002, + 0x101080, + 0x6004, + 0x40240, + 0x208100, + 0x80c00, + 0x100404, + 0x8202, + 0x8201, + 0x8200, + 0x100400, + 0x100401, + 0x100402, + 0x8204, + 0x6010, + 0x20900, + 0x80060, + 0x8208, + 0x100408, + 0x2000a0, + 0x61000, + 0x414000, + 0x100801, + 0x100800, + 0x80018, + 0x100802, + 0x604000, + 0x100804, + 0x100a0, + 0x22040, + 0x80012, + 0x100808, + 0x80010, + 0x80011, + 0x20500, + 0x40220, + 0x80014, + 0xd000, + 0x8000a, + 0x100810, + 0x80008, + 0x80009, + 0x3200, + 0x18100, + 0x8000c, + 0x440400, + 0x80002, + 0x80003, + 0x80000, + 0x80001, + 0x80006, + 0x2000c0, + 0x80004, + 0x80005, + 0x29000, + 0x100820, + 0x10084, + 0x4500, + 0x10082, + 0x40208, + 0x10080, + 0x10081, + 0x6040, + 0x40204, + 0x80030, + 0x620000, + 0x40201, + 0x40200, + 0x10088, + 0x40202, + 0x240100, + 0x402080, + 0x80028, + 0x8240, + 0x100440, + 0xa4000, + 0x10090, + 0x201800, + 0x80022, + 0x11400, + 0x80020, + 0x80021, + 0x408800, + 0x40210, + 0x80024, + 0x102100, + 0x400, + 0x401, + 0x402, + 0x403, + 0x404, + 0x405, + 0x406, + 0x108200, + 0x408, + 0x409, + 0x40a, + 0x2140, + 0x40c, + 0x4c0000, + 0x210800, + 0x1090, + 0x410, + 0x411, + 0x412, + 0x244000, + 0x414, + 0x860, + 0xa0100, + 0x1088, + 0x418, + 0x38000, + 0x400220, + 0x1084, + 0x106000, + 0x1082, + 0x1081, + 0x1080, + 0x420, + 0x421, + 0x422, + 0x91000, + 0x424, + 0x850, + 0x42080, + 0x600100, + 0x428, + 0x300080, + 0x400210, + 0x48800, + 0x9100, + 0x12200, + 0x180040, + 0x24400, + 0x430, + 0x844, + 0x400208, + 0x122000, + 0x841, + 0x840, + 0x1c000, + 0x842, + 0x400202, + 0x84100, + 0x400200, + 0x400201, + 0x260000, + 0x848, + 0x400204, + 0x10a0, + 0x440, + 0x441, + 0x442, + 0x2108, + 0x444, + 0x830, + 0x405000, + 0x70000, + 0x448, + 0x2102, + 0x2101, + 0x2100, + 0x20280, + 0x20c000, + 0x180020, + 0x2104, + 0x450, + 0x824, + 0x110080, + 0x488000, + 0x821, + 0x820, + 0x202200, + 0x822, + 0x281000, + 0x140200, + 0x24800, + 0x2110, + 0x410100, + 0x828, + 0x48400, + 0x10c0, + 0x460, + 0x814, + 0x228000, + 0x4280, + 0x811, + 0x810, + 0x180008, + 0x812, + 0x54000, + 0x421000, + 0x180004, + 0x2120, + 0x180002, + 0x818, + 0x180000, + 0x180001, + 0x805, + 0x804, + 0x41100, + 0x806, + 0x801, + 0x800, + 0x803, + 0x802, + 0xa080, + 0x80c, + 0x400240, + 0x210400, + 0x809, + 0x808, + 0x180010, + 0x80a, + 0x480, + 0x481, + 0x482, + 0x420800, + 0x484, + 0x14100, + 0x42020, + 0x1018, + 0x488, + 0x300020, + 0x8c000, + 0x1014, + 0x20240, + 0x1012, + 0x1011, + 0x1010, + 0x490, + 0x82200, + 0x110040, + 0x100c, + 0x608000, + 0x100a, + 0x1009, + 0x1008, + 0x40900, + 0x1006, + 0x1005, + 0x1004, + 0x1003, + 0x1002, + 0x1001, + 0x1000, + 0x4a0, + 0x300008, + 0x42004, + 0x4240, + 0x42002, + 0xa8000, + 0x42000, + 0x42001, + 0x300001, + 0x300000, + 0x30100, + 0x300002, + 0x404800, + 0x300004, + 0x42008, + 0x1030, + 0x25000, + 0x450000, + 0x280800, + 0x8500, + 0x100300, + 0x8c0, + 0x42010, + 0x1028, + 0xa040, + 0x300010, + 0x400280, + 0x1024, + 0x90400, + 0x1022, + 0x1021, + 0x1020, + 0x4c0, + 0x49000, + 0x110010, + 0x4220, + 0x20208, + 0x502000, + 0x8900, + 0x280400, + 0x20204, + 0x90800, + 0x640000, + 0x2180, + 0x20200, + 0x20201, + 0x20202, + 0x1050, + 0x110002, + 0x220100, + 0x110000, + 0x110001, + 0xc4000, + 0x8a0, + 0x110004, + 0x1048, + 0xa020, + 0x404400, + 0x110008, + 0x1044, + 0x20210, + 0x1042, + 0x1041, + 0x1040, + 0x480100, + 0x4202, + 0x4201, + 0x4200, + 0x211000, + 0x890, + 0x42040, + 0x4204, + 0xa010, + 0x300040, + 0x1c00, + 0x4208, + 0x20220, + 0x40500, + 0x180080, + 0x418000, + 0xa008, + 0x884, + 0x110020, + 0x4210, + 0x881, + 0x880, + 0x420400, + 0x882, + 0xa000, + 0xa001, + 0xa002, + 0xe0000, + 0xa004, + 0x888, + 0x204100, + 0x1060, + 0x500, + 0x501, + 0x502, + 0x2048, + 0x504, + 0x14080, + 0xa0010, + 0x600020, + 0x508, + 0x2042, + 0x2041, + 0x2040, + 0x9020, + 0x120800, + 0x44200, + 0x2044, + 0x510, + 0x501000, + 0xa0004, + 0x10a00, + 0xa0002, + 0x4a000, + 0xa0000, + 0xa0001, + 0x40880, + 0x84020, + 0x308000, + 0x2050, + 0x410040, + 0x200600, + 0xa0008, + 0x1180, + 0x520, + 0x60200, + 0x104800, + 0x600004, + 0x9008, + 0x600002, + 0x600001, + 0x600000, + 0x9004, + 0x84010, + 0x30080, + 0x2060, + 0x9000, + 0x9001, + 0x9002, + 0x600008, + 0x212000, + 0x84008, + 0x41040, + 0x8480, + 0x100280, + 0x940, + 0xa0020, + 0x600010, + 0x84001, + 0x84000, + 0x400300, + 0x84002, + 0x9010, + 0x84004, + 0x2c00, + 0x150000, + 0x540, + 0x200a, + 0x2009, + 0x2008, + 0x340000, + 0x81200, + 0x8880, + 0x200c, + 0x2003, + 0x2002, + 0x2001, + 0x2000, + 0x410010, + 0x2006, + 0x2005, + 0x2004, + 0xc200, + 0x220080, + 0x41020, + 0x2018, + 0x410008, + 0x920, + 0xa0040, + 0x104400, + 0x410004, + 0x2012, + 0x2011, + 0x2010, + 0x410000, + 0x410001, + 0x410002, + 0x2014, + 0x480080, + 0x118000, + 0x41010, + 0x2028, + 0x26000, + 0x910, + 0x10600, + 0x600040, + 0x200a00, + 0x2022, + 0x2021, + 0x2020, + 0x9040, + 0x40480, + 0x180100, + 0x2024, + 0x41002, + 0x904, + 0x41000, + 0x41001, + 0x901, + 0x900, + 0x41004, + 0x902, + 0x120400, + 0x84040, + 0x41008, + 0x2030, + 0x410020, + 0x908, + 0x204080, + 0x28200, + 0x580, + 0x14004, + 0x201200, + 0x1c0000, + 0x14001, + 0x14000, + 0x8840, + 0x14002, + 0x40810, + 0x408200, + 0x30020, + 0x20c0, + 0x282000, + 0x14008, + 0x500400, + 0x1110, + 0x40808, + 0x220040, + 0x406000, + 0x8420, + 0x100220, + 0x14010, + 0xa0080, + 0x1108, + 0x40800, + 0x40801, + 0x40802, + 0x1104, + 0x40804, + 0x1102, + 0x1101, + 0x1100, + 0x480040, + 0x3800, + 0x30008, + 0x8410, + 0x100210, + 0x14020, + 0x42100, + 0x600080, + 0x30002, + 0x300100, + 0x30000, + 0x30001, + 0x9080, + 0x40440, + 0x30004, + 0x80a00, + 0x100204, + 0x8402, + 0x8401, + 0x8400, + 0x100200, + 0x100201, + 0x100202, + 0x8404, + 0x40820, + 0x84080, + 0x30010, + 0x8408, + 0x100208, + 0x422000, + 0x204040, + 0x1120, + 0x480020, + 0x220010, + 0x8804, + 0x2088, + 0x8802, + 0x14040, + 0x8800, + 0x8801, + 0x105000, + 0x2082, + 0x2081, + 0x2080, + 0x20300, + 0x40420, + 0x8808, + 0x2084, + 0x220001, + 0x220000, + 0x110100, + 0x220002, + 0x3400, + 0x220004, + 0x8810, + 0x440200, + 0x40840, + 0x220008, + 0x80600, + 0x2090, + 0x410080, + 0x188000, + 0x204020, + 0x1140, + 0x480000, + 0x480001, + 0x480002, + 0x4300, + 0x480004, + 0x40408, + 0x8820, + 0x121000, + 0x480008, + 0x40404, + 0x30040, + 0x20a0, + 0x40401, + 0x40400, + 0x204010, + 0x40402, + 0x480010, + 0x220020, + 0x41080, + 0x8440, + 0x100240, + 0x980, + 0x204008, + 0x92000, + 0xa100, + 0x11200, + 0x204004, + 0x500800, + 0x204002, + 0x40410, + 0x204000, + 0x204001, + 0x600, + 0x601, + 0x602, + 0x108004, + 0x604, + 0x108002, + 0x108001, + 0x108000, + 0x608, + 0x5800, + 0x400030, + 0x2a0000, + 0x200c0, + 0x12020, + 0x44100, + 0x108008, + 0x610, + 0x82080, + 0x400028, + 0x10900, + 0x51000, + 0x424000, + 0x202040, + 0x108010, + 0x400022, + 0x140040, + 0x400020, + 0x400021, + 0x88800, + 0x200500, + 0x400024, + 0x1280, + 0x620, + 0x60100, + 0x400018, + 0x40c0, + 0x284000, + 0x12008, + 0x21800, + 0x108020, + 0x400012, + 0x12004, + 0x400010, + 0x400011, + 0x12001, + 0x12000, + 0x400014, + 0x12002, + 0x40000a, + 0x209000, + 0x400008, + 0x400009, + 0x100180, + 0xa40, + 0x40000c, + 0xc0400, + 0x400002, + 0x400003, + 0x400000, + 0x400001, + 0x400006, + 0x12010, + 0x400004, + 0x400005, + 0x640, + 0x610000, + 0xc0800, + 0x40a0, + 0x20088, + 0x81100, + 0x202010, + 0x108040, + 0x20084, + 0x140010, + 0x19000, + 0x2300, + 0x20080, + 0x20081, + 0x20082, + 0x400c00, + 0xc100, + 0x140008, + 0x202004, + 0x21400, + 0x202002, + 0xa20, + 0x202000, + 0x202001, + 0x140001, + 0x140000, + 0x400060, + 0x140002, + 0x20090, + 0x140004, + 0x202008, + 0x94000, + 0x103000, + 0x4082, + 0x4081, + 0x4080, + 0x448000, + 0xa10, + 0x10500, + 0x4084, + 0x200900, + 0x88400, + 0x400050, + 0x4088, + 0x200a0, + 0x12040, + 0x180200, + 0x241000, + 0xb0000, + 0xa04, + 0x400048, + 0x4090, + 0xa01, + 0xa00, + 0x202020, + 0xa02, + 0x400042, + 0x140020, + 0x400040, + 0x400041, + 0x5400, + 0xa08, + 0x400044, + 0x28100, + 0x680, + 0x82010, + 0x201100, + 0x4060, + 0x20048, + 0x240800, + 0x490000, + 0x108080, + 0x20044, + 0x408100, + 0x102800, + 0x50400, + 0x20040, + 0x20041, + 0x20042, + 0x1210, + 0x82001, + 0x82000, + 0x68000, + 0x82002, + 0x100120, + 0x82004, + 0x4c00, + 0x1208, + 0x214000, + 0x82008, + 0x4000a0, + 0x1204, + 0x20050, + 0x1202, + 0x1201, + 0x1200, + 0x18800, + 0x4042, + 0x4041, + 0x4040, + 0x100110, + 0x401400, + 0x42200, + 0x4044, + 0xc1000, + 0x300200, + 0x400090, + 0x4048, + 0x20060, + 0x12080, + 0x208400, + 0x80900, + 0x100104, + 0x82020, + 0x400088, + 0x4050, + 0x100100, + 0x100101, + 0x100102, + 0x230000, + 0x400082, + 0x20c00, + 0x400080, + 0x400081, + 0x100108, + 0x4c000, + 0x400084, + 0x1220, + 0x2000c, + 0x4022, + 0x4021, + 0x4020, + 0x20008, + 0x20009, + 0x2000a, + 0x4024, + 0x20004, + 0x20005, + 0x20006, + 0x4028, + 0x20000, + 0x20001, + 0x20002, + 0x20003, + 0x401800, + 0x82040, + 0x110200, + 0x4030, + 0x20018, + 0x18400, + 0x202080, + 0x440100, + 0x20014, + 0x140080, + 0x80500, + 0x208800, + 0x20010, + 0x20011, + 0x20012, + 0x1240, + 0x4003, + 0x4002, + 0x4001, + 0x4000, + 0x20028, + 0x4006, + 0x4005, + 0x4004, + 0x20024, + 0x400a, + 0x4009, + 0x4008, + 0x20020, + 0x20021, + 0x20022, + 0x400c, + 0x240400, + 0x4012, + 0x4011, + 0x4010, + 0x100140, + 0xa80, + 0x89000, + 0x4014, + 0xa200, + 0x11100, + 0x4000c0, + 0x4018, + 0x20030, + 0x680000, + 0x50800, + 0x102400, + 0x700, + 0x60020, + 0x201080, + 0x10810, + 0x402800, + 0x81040, + 0x44008, + 0x108100, + 0x190000, + 0x408080, + 0x44004, + 0x2240, + 0x44002, + 0x200410, + 0x44000, + 0x44001, + 0xc040, + 0x10802, + 0x10801, + 0x10800, + 0x1000a0, + 0x200408, + 0xa0200, + 0x10804, + 0x23000, + 0x200404, + 0x400120, + 0x10808, + 0x200401, + 0x200400, + 0x44010, + 0x200402, + 0x60001, + 0x60000, + 0x8a000, + 0x60002, + 0x100090, + 0x60004, + 0x10440, + 0x600200, + 0x200840, + 0x60008, + 0x400110, + 0x101400, + 0x9200, + 0x12100, + 0x44020, + 0x80880, + 0x100084, + 0x60010, + 0x400108, + 0x10820, + 0x100080, + 0x100081, + 0x100082, + 0x7000, + 0x400102, + 0x84200, + 0x400100, + 0x400101, + 0x100088, + 0x200420, + 0x400104, + 0x28040, + 0xc010, + 0x81004, + 0x520000, + 0x2208, + 0x81001, + 0x81000, + 0x10420, + 0x81002, + 0x200820, + 0x2202, + 0x2201, + 0x2200, + 0x20180, + 0x81008, + 0x44040, + 0x2204, + 0xc000, + 0xc001, + 0xc002, + 0x10840, + 0xc004, + 0x81010, + 0x202100, + 0x440080, + 0xc008, + 0x140100, + 0x80480, + 0x2210, + 0x410200, + 0x200440, + 0x101800, + 0x28020, + 0x200808, + 0x60040, + 0x10404, + 0x4180, + 0x10402, + 0x81020, + 0x10400, + 0x10401, + 0x200800, + 0x200801, + 0x200802, + 0x2220, + 0x200804, + 0x504000, + 0x10408, + 0x28010, + 0xc020, + 0x402400, + 0x41200, + 0x380000, + 0x1000c0, + 0xb00, + 0x10410, + 0x28008, + 0x200810, + 0x11080, + 0x400140, + 0x28004, + 0xc2000, + 0x28002, + 0x28001, + 0x28000, + 0x201002, + 0x408008, + 0x201000, + 0x201001, + 0x100030, + 0x14200, + 0x201004, + 0x22400, + 0x408001, + 0x408000, + 0x201008, + 0x408002, + 0x20140, + 0x408004, + 0x44080, + 0x80820, + 0x100024, + 0x82100, + 0x201010, + 0x10880, + 0x100020, + 0x100021, + 0x100022, + 0x440040, + 0x40a00, + 0x408010, + 0x80440, + 0x124000, + 0x100028, + 0x200480, + 0x1a000, + 0x1300, + 0x100014, + 0x60080, + 0x201020, + 0x4140, + 0x100010, + 0x100011, + 0x100012, + 0x80808, + 0x6400, + 0x408020, + 0x30200, + 0x80804, + 0x100018, + 0x80802, + 0x80801, + 0x80800, + 0x100004, + 0x100005, + 0x100006, + 0x8600, + 0x100000, + 0x100001, + 0x100002, + 0x100003, + 0x10000c, + 0x11040, + 0x400180, + 0x242000, + 0x100008, + 0x100009, + 0x10000a, + 0x80810, + 0x52000, + 0x100c00, + 0x201040, + 0x4120, + 0x20108, + 0x81080, + 0x8a00, + 0x440010, + 0x20104, + 0x408040, + 0x80410, + 0x2280, + 0x20100, + 0x20101, + 0x20102, + 0x310000, + 0xc080, + 0x220200, + 0x80408, + 0x440004, + 0x100060, + 0x440002, + 0x440001, + 0x440000, + 0x80402, + 0x11020, + 0x80400, + 0x80401, + 0x20110, + 0x6800, + 0x80404, + 0x440008, + 0x480200, + 0x4102, + 0x4101, + 0x4100, + 0x100050, + 0x20a000, + 0x10480, + 0x4104, + 0x200880, + 0x11010, + 0x148000, + 0x4108, + 0x20120, + 0x40600, + 0x403000, + 0x80840, + 0x100044, + 0x11008, + 0x22800, + 0x4110, + 0x100040, + 0x100041, + 0x100042, + 0x440020, + 0x11001, + 0x11000, + 0x80420, + 0x11002, + 0x100048, + 0x11004, + 0x204200, + 0x28080 +}; diff --git a/libcodec2-android/src/codec2/src/golayenctable.h b/libcodec2-android/src/codec2/src/golayenctable.h new file mode 100644 index 0000000..1574652 --- /dev/null +++ b/libcodec2-android/src/codec2/src/golayenctable.h @@ -0,0 +1,4100 @@ +/* Generated by golay23.c -DGOLAY23_MAKETABLE */ + +static const int encoding_table[]={ + 0x0, + 0xc75, + 0x149f, + 0x18ea, + 0x254b, + 0x293e, + 0x31d4, + 0x3da1, + 0x46e3, + 0x4a96, + 0x527c, + 0x5e09, + 0x63a8, + 0x6fdd, + 0x7737, + 0x7b42, + 0x81b3, + 0x8dc6, + 0x952c, + 0x9959, + 0xa4f8, + 0xa88d, + 0xb067, + 0xbc12, + 0xc750, + 0xcb25, + 0xd3cf, + 0xdfba, + 0xe21b, + 0xee6e, + 0xf684, + 0xfaf1, + 0x10366, + 0x10f13, + 0x117f9, + 0x11b8c, + 0x1262d, + 0x12a58, + 0x132b2, + 0x13ec7, + 0x14585, + 0x149f0, + 0x1511a, + 0x15d6f, + 0x160ce, + 0x16cbb, + 0x17451, + 0x17824, + 0x182d5, + 0x18ea0, + 0x1964a, + 0x19a3f, + 0x1a79e, + 0x1abeb, + 0x1b301, + 0x1bf74, + 0x1c436, + 0x1c843, + 0x1d0a9, + 0x1dcdc, + 0x1e17d, + 0x1ed08, + 0x1f5e2, + 0x1f997, + 0x206cc, + 0x20ab9, + 0x21253, + 0x21e26, + 0x22387, + 0x22ff2, + 0x23718, + 0x23b6d, + 0x2402f, + 0x24c5a, + 0x254b0, + 0x258c5, + 0x26564, + 0x26911, + 0x271fb, + 0x27d8e, + 0x2877f, + 0x28b0a, + 0x293e0, + 0x29f95, + 0x2a234, + 0x2ae41, + 0x2b6ab, + 0x2bade, + 0x2c19c, + 0x2cde9, + 0x2d503, + 0x2d976, + 0x2e4d7, + 0x2e8a2, + 0x2f048, + 0x2fc3d, + 0x305aa, + 0x309df, + 0x31135, + 0x31d40, + 0x320e1, + 0x32c94, + 0x3347e, + 0x3380b, + 0x34349, + 0x34f3c, + 0x357d6, + 0x35ba3, + 0x36602, + 0x36a77, + 0x3729d, + 0x37ee8, + 0x38419, + 0x3886c, + 0x39086, + 0x39cf3, + 0x3a152, + 0x3ad27, + 0x3b5cd, + 0x3b9b8, + 0x3c2fa, + 0x3ce8f, + 0x3d665, + 0x3da10, + 0x3e7b1, + 0x3ebc4, + 0x3f32e, + 0x3ff5b, + 0x401ed, + 0x40d98, + 0x41572, + 0x41907, + 0x424a6, + 0x428d3, + 0x43039, + 0x43c4c, + 0x4470e, + 0x44b7b, + 0x45391, + 0x45fe4, + 0x46245, + 0x46e30, + 0x476da, + 0x47aaf, + 0x4805e, + 0x48c2b, + 0x494c1, + 0x498b4, + 0x4a515, + 0x4a960, + 0x4b18a, + 0x4bdff, + 0x4c6bd, + 0x4cac8, + 0x4d222, + 0x4de57, + 0x4e3f6, + 0x4ef83, + 0x4f769, + 0x4fb1c, + 0x5028b, + 0x50efe, + 0x51614, + 0x51a61, + 0x527c0, + 0x52bb5, + 0x5335f, + 0x53f2a, + 0x54468, + 0x5481d, + 0x550f7, + 0x55c82, + 0x56123, + 0x56d56, + 0x575bc, + 0x579c9, + 0x58338, + 0x58f4d, + 0x597a7, + 0x59bd2, + 0x5a673, + 0x5aa06, + 0x5b2ec, + 0x5be99, + 0x5c5db, + 0x5c9ae, + 0x5d144, + 0x5dd31, + 0x5e090, + 0x5ece5, + 0x5f40f, + 0x5f87a, + 0x60721, + 0x60b54, + 0x613be, + 0x61fcb, + 0x6226a, + 0x62e1f, + 0x636f5, + 0x63a80, + 0x641c2, + 0x64db7, + 0x6555d, + 0x65928, + 0x66489, + 0x668fc, + 0x67016, + 0x67c63, + 0x68692, + 0x68ae7, + 0x6920d, + 0x69e78, + 0x6a3d9, + 0x6afac, + 0x6b746, + 0x6bb33, + 0x6c071, + 0x6cc04, + 0x6d4ee, + 0x6d89b, + 0x6e53a, + 0x6e94f, + 0x6f1a5, + 0x6fdd0, + 0x70447, + 0x70832, + 0x710d8, + 0x71cad, + 0x7210c, + 0x72d79, + 0x73593, + 0x739e6, + 0x742a4, + 0x74ed1, + 0x7563b, + 0x75a4e, + 0x767ef, + 0x76b9a, + 0x77370, + 0x77f05, + 0x785f4, + 0x78981, + 0x7916b, + 0x79d1e, + 0x7a0bf, + 0x7acca, + 0x7b420, + 0x7b855, + 0x7c317, + 0x7cf62, + 0x7d788, + 0x7dbfd, + 0x7e65c, + 0x7ea29, + 0x7f2c3, + 0x7feb6, + 0x803da, + 0x80faf, + 0x81745, + 0x81b30, + 0x82691, + 0x82ae4, + 0x8320e, + 0x83e7b, + 0x84539, + 0x8494c, + 0x851a6, + 0x85dd3, + 0x86072, + 0x86c07, + 0x874ed, + 0x87898, + 0x88269, + 0x88e1c, + 0x896f6, + 0x89a83, + 0x8a722, + 0x8ab57, + 0x8b3bd, + 0x8bfc8, + 0x8c48a, + 0x8c8ff, + 0x8d015, + 0x8dc60, + 0x8e1c1, + 0x8edb4, + 0x8f55e, + 0x8f92b, + 0x900bc, + 0x90cc9, + 0x91423, + 0x91856, + 0x925f7, + 0x92982, + 0x93168, + 0x93d1d, + 0x9465f, + 0x94a2a, + 0x952c0, + 0x95eb5, + 0x96314, + 0x96f61, + 0x9778b, + 0x97bfe, + 0x9810f, + 0x98d7a, + 0x99590, + 0x999e5, + 0x9a444, + 0x9a831, + 0x9b0db, + 0x9bcae, + 0x9c7ec, + 0x9cb99, + 0x9d373, + 0x9df06, + 0x9e2a7, + 0x9eed2, + 0x9f638, + 0x9fa4d, + 0xa0516, + 0xa0963, + 0xa1189, + 0xa1dfc, + 0xa205d, + 0xa2c28, + 0xa34c2, + 0xa38b7, + 0xa43f5, + 0xa4f80, + 0xa576a, + 0xa5b1f, + 0xa66be, + 0xa6acb, + 0xa7221, + 0xa7e54, + 0xa84a5, + 0xa88d0, + 0xa903a, + 0xa9c4f, + 0xaa1ee, + 0xaad9b, + 0xab571, + 0xab904, + 0xac246, + 0xace33, + 0xad6d9, + 0xadaac, + 0xae70d, + 0xaeb78, + 0xaf392, + 0xaffe7, + 0xb0670, + 0xb0a05, + 0xb12ef, + 0xb1e9a, + 0xb233b, + 0xb2f4e, + 0xb37a4, + 0xb3bd1, + 0xb4093, + 0xb4ce6, + 0xb540c, + 0xb5879, + 0xb65d8, + 0xb69ad, + 0xb7147, + 0xb7d32, + 0xb87c3, + 0xb8bb6, + 0xb935c, + 0xb9f29, + 0xba288, + 0xbaefd, + 0xbb617, + 0xbba62, + 0xbc120, + 0xbcd55, + 0xbd5bf, + 0xbd9ca, + 0xbe46b, + 0xbe81e, + 0xbf0f4, + 0xbfc81, + 0xc0237, + 0xc0e42, + 0xc16a8, + 0xc1add, + 0xc277c, + 0xc2b09, + 0xc33e3, + 0xc3f96, + 0xc44d4, + 0xc48a1, + 0xc504b, + 0xc5c3e, + 0xc619f, + 0xc6dea, + 0xc7500, + 0xc7975, + 0xc8384, + 0xc8ff1, + 0xc971b, + 0xc9b6e, + 0xca6cf, + 0xcaaba, + 0xcb250, + 0xcbe25, + 0xcc567, + 0xcc912, + 0xcd1f8, + 0xcdd8d, + 0xce02c, + 0xcec59, + 0xcf4b3, + 0xcf8c6, + 0xd0151, + 0xd0d24, + 0xd15ce, + 0xd19bb, + 0xd241a, + 0xd286f, + 0xd3085, + 0xd3cf0, + 0xd47b2, + 0xd4bc7, + 0xd532d, + 0xd5f58, + 0xd62f9, + 0xd6e8c, + 0xd7666, + 0xd7a13, + 0xd80e2, + 0xd8c97, + 0xd947d, + 0xd9808, + 0xda5a9, + 0xda9dc, + 0xdb136, + 0xdbd43, + 0xdc601, + 0xdca74, + 0xdd29e, + 0xddeeb, + 0xde34a, + 0xdef3f, + 0xdf7d5, + 0xdfba0, + 0xe04fb, + 0xe088e, + 0xe1064, + 0xe1c11, + 0xe21b0, + 0xe2dc5, + 0xe352f, + 0xe395a, + 0xe4218, + 0xe4e6d, + 0xe5687, + 0xe5af2, + 0xe6753, + 0xe6b26, + 0xe73cc, + 0xe7fb9, + 0xe8548, + 0xe893d, + 0xe91d7, + 0xe9da2, + 0xea003, + 0xeac76, + 0xeb49c, + 0xeb8e9, + 0xec3ab, + 0xecfde, + 0xed734, + 0xedb41, + 0xee6e0, + 0xeea95, + 0xef27f, + 0xefe0a, + 0xf079d, + 0xf0be8, + 0xf1302, + 0xf1f77, + 0xf22d6, + 0xf2ea3, + 0xf3649, + 0xf3a3c, + 0xf417e, + 0xf4d0b, + 0xf55e1, + 0xf5994, + 0xf6435, + 0xf6840, + 0xf70aa, + 0xf7cdf, + 0xf862e, + 0xf8a5b, + 0xf92b1, + 0xf9ec4, + 0xfa365, + 0xfaf10, + 0xfb7fa, + 0xfbb8f, + 0xfc0cd, + 0xfccb8, + 0xfd452, + 0xfd827, + 0xfe586, + 0xfe9f3, + 0xff119, + 0xffd6c, + 0x1007b4, + 0x100bc1, + 0x10132b, + 0x101f5e, + 0x1022ff, + 0x102e8a, + 0x103660, + 0x103a15, + 0x104157, + 0x104d22, + 0x1055c8, + 0x1059bd, + 0x10641c, + 0x106869, + 0x107083, + 0x107cf6, + 0x108607, + 0x108a72, + 0x109298, + 0x109eed, + 0x10a34c, + 0x10af39, + 0x10b7d3, + 0x10bba6, + 0x10c0e4, + 0x10cc91, + 0x10d47b, + 0x10d80e, + 0x10e5af, + 0x10e9da, + 0x10f130, + 0x10fd45, + 0x1104d2, + 0x1108a7, + 0x11104d, + 0x111c38, + 0x112199, + 0x112dec, + 0x113506, + 0x113973, + 0x114231, + 0x114e44, + 0x1156ae, + 0x115adb, + 0x11677a, + 0x116b0f, + 0x1173e5, + 0x117f90, + 0x118561, + 0x118914, + 0x1191fe, + 0x119d8b, + 0x11a02a, + 0x11ac5f, + 0x11b4b5, + 0x11b8c0, + 0x11c382, + 0x11cff7, + 0x11d71d, + 0x11db68, + 0x11e6c9, + 0x11eabc, + 0x11f256, + 0x11fe23, + 0x120178, + 0x120d0d, + 0x1215e7, + 0x121992, + 0x122433, + 0x122846, + 0x1230ac, + 0x123cd9, + 0x12479b, + 0x124bee, + 0x125304, + 0x125f71, + 0x1262d0, + 0x126ea5, + 0x12764f, + 0x127a3a, + 0x1280cb, + 0x128cbe, + 0x129454, + 0x129821, + 0x12a580, + 0x12a9f5, + 0x12b11f, + 0x12bd6a, + 0x12c628, + 0x12ca5d, + 0x12d2b7, + 0x12dec2, + 0x12e363, + 0x12ef16, + 0x12f7fc, + 0x12fb89, + 0x13021e, + 0x130e6b, + 0x131681, + 0x131af4, + 0x132755, + 0x132b20, + 0x1333ca, + 0x133fbf, + 0x1344fd, + 0x134888, + 0x135062, + 0x135c17, + 0x1361b6, + 0x136dc3, + 0x137529, + 0x13795c, + 0x1383ad, + 0x138fd8, + 0x139732, + 0x139b47, + 0x13a6e6, + 0x13aa93, + 0x13b279, + 0x13be0c, + 0x13c54e, + 0x13c93b, + 0x13d1d1, + 0x13dda4, + 0x13e005, + 0x13ec70, + 0x13f49a, + 0x13f8ef, + 0x140659, + 0x140a2c, + 0x1412c6, + 0x141eb3, + 0x142312, + 0x142f67, + 0x14378d, + 0x143bf8, + 0x1440ba, + 0x144ccf, + 0x145425, + 0x145850, + 0x1465f1, + 0x146984, + 0x14716e, + 0x147d1b, + 0x1487ea, + 0x148b9f, + 0x149375, + 0x149f00, + 0x14a2a1, + 0x14aed4, + 0x14b63e, + 0x14ba4b, + 0x14c109, + 0x14cd7c, + 0x14d596, + 0x14d9e3, + 0x14e442, + 0x14e837, + 0x14f0dd, + 0x14fca8, + 0x15053f, + 0x15094a, + 0x1511a0, + 0x151dd5, + 0x152074, + 0x152c01, + 0x1534eb, + 0x15389e, + 0x1543dc, + 0x154fa9, + 0x155743, + 0x155b36, + 0x156697, + 0x156ae2, + 0x157208, + 0x157e7d, + 0x15848c, + 0x1588f9, + 0x159013, + 0x159c66, + 0x15a1c7, + 0x15adb2, + 0x15b558, + 0x15b92d, + 0x15c26f, + 0x15ce1a, + 0x15d6f0, + 0x15da85, + 0x15e724, + 0x15eb51, + 0x15f3bb, + 0x15ffce, + 0x160095, + 0x160ce0, + 0x16140a, + 0x16187f, + 0x1625de, + 0x1629ab, + 0x163141, + 0x163d34, + 0x164676, + 0x164a03, + 0x1652e9, + 0x165e9c, + 0x16633d, + 0x166f48, + 0x1677a2, + 0x167bd7, + 0x168126, + 0x168d53, + 0x1695b9, + 0x1699cc, + 0x16a46d, + 0x16a818, + 0x16b0f2, + 0x16bc87, + 0x16c7c5, + 0x16cbb0, + 0x16d35a, + 0x16df2f, + 0x16e28e, + 0x16eefb, + 0x16f611, + 0x16fa64, + 0x1703f3, + 0x170f86, + 0x17176c, + 0x171b19, + 0x1726b8, + 0x172acd, + 0x173227, + 0x173e52, + 0x174510, + 0x174965, + 0x17518f, + 0x175dfa, + 0x17605b, + 0x176c2e, + 0x1774c4, + 0x1778b1, + 0x178240, + 0x178e35, + 0x1796df, + 0x179aaa, + 0x17a70b, + 0x17ab7e, + 0x17b394, + 0x17bfe1, + 0x17c4a3, + 0x17c8d6, + 0x17d03c, + 0x17dc49, + 0x17e1e8, + 0x17ed9d, + 0x17f577, + 0x17f902, + 0x18046e, + 0x18081b, + 0x1810f1, + 0x181c84, + 0x182125, + 0x182d50, + 0x1835ba, + 0x1839cf, + 0x18428d, + 0x184ef8, + 0x185612, + 0x185a67, + 0x1867c6, + 0x186bb3, + 0x187359, + 0x187f2c, + 0x1885dd, + 0x1889a8, + 0x189142, + 0x189d37, + 0x18a096, + 0x18ace3, + 0x18b409, + 0x18b87c, + 0x18c33e, + 0x18cf4b, + 0x18d7a1, + 0x18dbd4, + 0x18e675, + 0x18ea00, + 0x18f2ea, + 0x18fe9f, + 0x190708, + 0x190b7d, + 0x191397, + 0x191fe2, + 0x192243, + 0x192e36, + 0x1936dc, + 0x193aa9, + 0x1941eb, + 0x194d9e, + 0x195574, + 0x195901, + 0x1964a0, + 0x1968d5, + 0x19703f, + 0x197c4a, + 0x1986bb, + 0x198ace, + 0x199224, + 0x199e51, + 0x19a3f0, + 0x19af85, + 0x19b76f, + 0x19bb1a, + 0x19c058, + 0x19cc2d, + 0x19d4c7, + 0x19d8b2, + 0x19e513, + 0x19e966, + 0x19f18c, + 0x19fdf9, + 0x1a02a2, + 0x1a0ed7, + 0x1a163d, + 0x1a1a48, + 0x1a27e9, + 0x1a2b9c, + 0x1a3376, + 0x1a3f03, + 0x1a4441, + 0x1a4834, + 0x1a50de, + 0x1a5cab, + 0x1a610a, + 0x1a6d7f, + 0x1a7595, + 0x1a79e0, + 0x1a8311, + 0x1a8f64, + 0x1a978e, + 0x1a9bfb, + 0x1aa65a, + 0x1aaa2f, + 0x1ab2c5, + 0x1abeb0, + 0x1ac5f2, + 0x1ac987, + 0x1ad16d, + 0x1add18, + 0x1ae0b9, + 0x1aeccc, + 0x1af426, + 0x1af853, + 0x1b01c4, + 0x1b0db1, + 0x1b155b, + 0x1b192e, + 0x1b248f, + 0x1b28fa, + 0x1b3010, + 0x1b3c65, + 0x1b4727, + 0x1b4b52, + 0x1b53b8, + 0x1b5fcd, + 0x1b626c, + 0x1b6e19, + 0x1b76f3, + 0x1b7a86, + 0x1b8077, + 0x1b8c02, + 0x1b94e8, + 0x1b989d, + 0x1ba53c, + 0x1ba949, + 0x1bb1a3, + 0x1bbdd6, + 0x1bc694, + 0x1bcae1, + 0x1bd20b, + 0x1bde7e, + 0x1be3df, + 0x1befaa, + 0x1bf740, + 0x1bfb35, + 0x1c0583, + 0x1c09f6, + 0x1c111c, + 0x1c1d69, + 0x1c20c8, + 0x1c2cbd, + 0x1c3457, + 0x1c3822, + 0x1c4360, + 0x1c4f15, + 0x1c57ff, + 0x1c5b8a, + 0x1c662b, + 0x1c6a5e, + 0x1c72b4, + 0x1c7ec1, + 0x1c8430, + 0x1c8845, + 0x1c90af, + 0x1c9cda, + 0x1ca17b, + 0x1cad0e, + 0x1cb5e4, + 0x1cb991, + 0x1cc2d3, + 0x1ccea6, + 0x1cd64c, + 0x1cda39, + 0x1ce798, + 0x1cebed, + 0x1cf307, + 0x1cff72, + 0x1d06e5, + 0x1d0a90, + 0x1d127a, + 0x1d1e0f, + 0x1d23ae, + 0x1d2fdb, + 0x1d3731, + 0x1d3b44, + 0x1d4006, + 0x1d4c73, + 0x1d5499, + 0x1d58ec, + 0x1d654d, + 0x1d6938, + 0x1d71d2, + 0x1d7da7, + 0x1d8756, + 0x1d8b23, + 0x1d93c9, + 0x1d9fbc, + 0x1da21d, + 0x1dae68, + 0x1db682, + 0x1dbaf7, + 0x1dc1b5, + 0x1dcdc0, + 0x1dd52a, + 0x1dd95f, + 0x1de4fe, + 0x1de88b, + 0x1df061, + 0x1dfc14, + 0x1e034f, + 0x1e0f3a, + 0x1e17d0, + 0x1e1ba5, + 0x1e2604, + 0x1e2a71, + 0x1e329b, + 0x1e3eee, + 0x1e45ac, + 0x1e49d9, + 0x1e5133, + 0x1e5d46, + 0x1e60e7, + 0x1e6c92, + 0x1e7478, + 0x1e780d, + 0x1e82fc, + 0x1e8e89, + 0x1e9663, + 0x1e9a16, + 0x1ea7b7, + 0x1eabc2, + 0x1eb328, + 0x1ebf5d, + 0x1ec41f, + 0x1ec86a, + 0x1ed080, + 0x1edcf5, + 0x1ee154, + 0x1eed21, + 0x1ef5cb, + 0x1ef9be, + 0x1f0029, + 0x1f0c5c, + 0x1f14b6, + 0x1f18c3, + 0x1f2562, + 0x1f2917, + 0x1f31fd, + 0x1f3d88, + 0x1f46ca, + 0x1f4abf, + 0x1f5255, + 0x1f5e20, + 0x1f6381, + 0x1f6ff4, + 0x1f771e, + 0x1f7b6b, + 0x1f819a, + 0x1f8def, + 0x1f9505, + 0x1f9970, + 0x1fa4d1, + 0x1fa8a4, + 0x1fb04e, + 0x1fbc3b, + 0x1fc779, + 0x1fcb0c, + 0x1fd3e6, + 0x1fdf93, + 0x1fe232, + 0x1fee47, + 0x1ff6ad, + 0x1ffad8, + 0x20031d, + 0x200f68, + 0x201782, + 0x201bf7, + 0x202656, + 0x202a23, + 0x2032c9, + 0x203ebc, + 0x2045fe, + 0x20498b, + 0x205161, + 0x205d14, + 0x2060b5, + 0x206cc0, + 0x20742a, + 0x20785f, + 0x2082ae, + 0x208edb, + 0x209631, + 0x209a44, + 0x20a7e5, + 0x20ab90, + 0x20b37a, + 0x20bf0f, + 0x20c44d, + 0x20c838, + 0x20d0d2, + 0x20dca7, + 0x20e106, + 0x20ed73, + 0x20f599, + 0x20f9ec, + 0x21007b, + 0x210c0e, + 0x2114e4, + 0x211891, + 0x212530, + 0x212945, + 0x2131af, + 0x213dda, + 0x214698, + 0x214aed, + 0x215207, + 0x215e72, + 0x2163d3, + 0x216fa6, + 0x21774c, + 0x217b39, + 0x2181c8, + 0x218dbd, + 0x219557, + 0x219922, + 0x21a483, + 0x21a8f6, + 0x21b01c, + 0x21bc69, + 0x21c72b, + 0x21cb5e, + 0x21d3b4, + 0x21dfc1, + 0x21e260, + 0x21ee15, + 0x21f6ff, + 0x21fa8a, + 0x2205d1, + 0x2209a4, + 0x22114e, + 0x221d3b, + 0x22209a, + 0x222cef, + 0x223405, + 0x223870, + 0x224332, + 0x224f47, + 0x2257ad, + 0x225bd8, + 0x226679, + 0x226a0c, + 0x2272e6, + 0x227e93, + 0x228462, + 0x228817, + 0x2290fd, + 0x229c88, + 0x22a129, + 0x22ad5c, + 0x22b5b6, + 0x22b9c3, + 0x22c281, + 0x22cef4, + 0x22d61e, + 0x22da6b, + 0x22e7ca, + 0x22ebbf, + 0x22f355, + 0x22ff20, + 0x2306b7, + 0x230ac2, + 0x231228, + 0x231e5d, + 0x2323fc, + 0x232f89, + 0x233763, + 0x233b16, + 0x234054, + 0x234c21, + 0x2354cb, + 0x2358be, + 0x23651f, + 0x23696a, + 0x237180, + 0x237df5, + 0x238704, + 0x238b71, + 0x23939b, + 0x239fee, + 0x23a24f, + 0x23ae3a, + 0x23b6d0, + 0x23baa5, + 0x23c1e7, + 0x23cd92, + 0x23d578, + 0x23d90d, + 0x23e4ac, + 0x23e8d9, + 0x23f033, + 0x23fc46, + 0x2402f0, + 0x240e85, + 0x24166f, + 0x241a1a, + 0x2427bb, + 0x242bce, + 0x243324, + 0x243f51, + 0x244413, + 0x244866, + 0x24508c, + 0x245cf9, + 0x246158, + 0x246d2d, + 0x2475c7, + 0x2479b2, + 0x248343, + 0x248f36, + 0x2497dc, + 0x249ba9, + 0x24a608, + 0x24aa7d, + 0x24b297, + 0x24bee2, + 0x24c5a0, + 0x24c9d5, + 0x24d13f, + 0x24dd4a, + 0x24e0eb, + 0x24ec9e, + 0x24f474, + 0x24f801, + 0x250196, + 0x250de3, + 0x251509, + 0x25197c, + 0x2524dd, + 0x2528a8, + 0x253042, + 0x253c37, + 0x254775, + 0x254b00, + 0x2553ea, + 0x255f9f, + 0x25623e, + 0x256e4b, + 0x2576a1, + 0x257ad4, + 0x258025, + 0x258c50, + 0x2594ba, + 0x2598cf, + 0x25a56e, + 0x25a91b, + 0x25b1f1, + 0x25bd84, + 0x25c6c6, + 0x25cab3, + 0x25d259, + 0x25de2c, + 0x25e38d, + 0x25eff8, + 0x25f712, + 0x25fb67, + 0x26043c, + 0x260849, + 0x2610a3, + 0x261cd6, + 0x262177, + 0x262d02, + 0x2635e8, + 0x26399d, + 0x2642df, + 0x264eaa, + 0x265640, + 0x265a35, + 0x266794, + 0x266be1, + 0x26730b, + 0x267f7e, + 0x26858f, + 0x2689fa, + 0x269110, + 0x269d65, + 0x26a0c4, + 0x26acb1, + 0x26b45b, + 0x26b82e, + 0x26c36c, + 0x26cf19, + 0x26d7f3, + 0x26db86, + 0x26e627, + 0x26ea52, + 0x26f2b8, + 0x26fecd, + 0x27075a, + 0x270b2f, + 0x2713c5, + 0x271fb0, + 0x272211, + 0x272e64, + 0x27368e, + 0x273afb, + 0x2741b9, + 0x274dcc, + 0x275526, + 0x275953, + 0x2764f2, + 0x276887, + 0x27706d, + 0x277c18, + 0x2786e9, + 0x278a9c, + 0x279276, + 0x279e03, + 0x27a3a2, + 0x27afd7, + 0x27b73d, + 0x27bb48, + 0x27c00a, + 0x27cc7f, + 0x27d495, + 0x27d8e0, + 0x27e541, + 0x27e934, + 0x27f1de, + 0x27fdab, + 0x2800c7, + 0x280cb2, + 0x281458, + 0x28182d, + 0x28258c, + 0x2829f9, + 0x283113, + 0x283d66, + 0x284624, + 0x284a51, + 0x2852bb, + 0x285ece, + 0x28636f, + 0x286f1a, + 0x2877f0, + 0x287b85, + 0x288174, + 0x288d01, + 0x2895eb, + 0x28999e, + 0x28a43f, + 0x28a84a, + 0x28b0a0, + 0x28bcd5, + 0x28c797, + 0x28cbe2, + 0x28d308, + 0x28df7d, + 0x28e2dc, + 0x28eea9, + 0x28f643, + 0x28fa36, + 0x2903a1, + 0x290fd4, + 0x29173e, + 0x291b4b, + 0x2926ea, + 0x292a9f, + 0x293275, + 0x293e00, + 0x294542, + 0x294937, + 0x2951dd, + 0x295da8, + 0x296009, + 0x296c7c, + 0x297496, + 0x2978e3, + 0x298212, + 0x298e67, + 0x29968d, + 0x299af8, + 0x29a759, + 0x29ab2c, + 0x29b3c6, + 0x29bfb3, + 0x29c4f1, + 0x29c884, + 0x29d06e, + 0x29dc1b, + 0x29e1ba, + 0x29edcf, + 0x29f525, + 0x29f950, + 0x2a060b, + 0x2a0a7e, + 0x2a1294, + 0x2a1ee1, + 0x2a2340, + 0x2a2f35, + 0x2a37df, + 0x2a3baa, + 0x2a40e8, + 0x2a4c9d, + 0x2a5477, + 0x2a5802, + 0x2a65a3, + 0x2a69d6, + 0x2a713c, + 0x2a7d49, + 0x2a87b8, + 0x2a8bcd, + 0x2a9327, + 0x2a9f52, + 0x2aa2f3, + 0x2aae86, + 0x2ab66c, + 0x2aba19, + 0x2ac15b, + 0x2acd2e, + 0x2ad5c4, + 0x2ad9b1, + 0x2ae410, + 0x2ae865, + 0x2af08f, + 0x2afcfa, + 0x2b056d, + 0x2b0918, + 0x2b11f2, + 0x2b1d87, + 0x2b2026, + 0x2b2c53, + 0x2b34b9, + 0x2b38cc, + 0x2b438e, + 0x2b4ffb, + 0x2b5711, + 0x2b5b64, + 0x2b66c5, + 0x2b6ab0, + 0x2b725a, + 0x2b7e2f, + 0x2b84de, + 0x2b88ab, + 0x2b9041, + 0x2b9c34, + 0x2ba195, + 0x2bade0, + 0x2bb50a, + 0x2bb97f, + 0x2bc23d, + 0x2bce48, + 0x2bd6a2, + 0x2bdad7, + 0x2be776, + 0x2beb03, + 0x2bf3e9, + 0x2bff9c, + 0x2c012a, + 0x2c0d5f, + 0x2c15b5, + 0x2c19c0, + 0x2c2461, + 0x2c2814, + 0x2c30fe, + 0x2c3c8b, + 0x2c47c9, + 0x2c4bbc, + 0x2c5356, + 0x2c5f23, + 0x2c6282, + 0x2c6ef7, + 0x2c761d, + 0x2c7a68, + 0x2c8099, + 0x2c8cec, + 0x2c9406, + 0x2c9873, + 0x2ca5d2, + 0x2ca9a7, + 0x2cb14d, + 0x2cbd38, + 0x2cc67a, + 0x2cca0f, + 0x2cd2e5, + 0x2cde90, + 0x2ce331, + 0x2cef44, + 0x2cf7ae, + 0x2cfbdb, + 0x2d024c, + 0x2d0e39, + 0x2d16d3, + 0x2d1aa6, + 0x2d2707, + 0x2d2b72, + 0x2d3398, + 0x2d3fed, + 0x2d44af, + 0x2d48da, + 0x2d5030, + 0x2d5c45, + 0x2d61e4, + 0x2d6d91, + 0x2d757b, + 0x2d790e, + 0x2d83ff, + 0x2d8f8a, + 0x2d9760, + 0x2d9b15, + 0x2da6b4, + 0x2daac1, + 0x2db22b, + 0x2dbe5e, + 0x2dc51c, + 0x2dc969, + 0x2dd183, + 0x2dddf6, + 0x2de057, + 0x2dec22, + 0x2df4c8, + 0x2df8bd, + 0x2e07e6, + 0x2e0b93, + 0x2e1379, + 0x2e1f0c, + 0x2e22ad, + 0x2e2ed8, + 0x2e3632, + 0x2e3a47, + 0x2e4105, + 0x2e4d70, + 0x2e559a, + 0x2e59ef, + 0x2e644e, + 0x2e683b, + 0x2e70d1, + 0x2e7ca4, + 0x2e8655, + 0x2e8a20, + 0x2e92ca, + 0x2e9ebf, + 0x2ea31e, + 0x2eaf6b, + 0x2eb781, + 0x2ebbf4, + 0x2ec0b6, + 0x2eccc3, + 0x2ed429, + 0x2ed85c, + 0x2ee5fd, + 0x2ee988, + 0x2ef162, + 0x2efd17, + 0x2f0480, + 0x2f08f5, + 0x2f101f, + 0x2f1c6a, + 0x2f21cb, + 0x2f2dbe, + 0x2f3554, + 0x2f3921, + 0x2f4263, + 0x2f4e16, + 0x2f56fc, + 0x2f5a89, + 0x2f6728, + 0x2f6b5d, + 0x2f73b7, + 0x2f7fc2, + 0x2f8533, + 0x2f8946, + 0x2f91ac, + 0x2f9dd9, + 0x2fa078, + 0x2fac0d, + 0x2fb4e7, + 0x2fb892, + 0x2fc3d0, + 0x2fcfa5, + 0x2fd74f, + 0x2fdb3a, + 0x2fe69b, + 0x2feaee, + 0x2ff204, + 0x2ffe71, + 0x3004a9, + 0x3008dc, + 0x301036, + 0x301c43, + 0x3021e2, + 0x302d97, + 0x30357d, + 0x303908, + 0x30424a, + 0x304e3f, + 0x3056d5, + 0x305aa0, + 0x306701, + 0x306b74, + 0x30739e, + 0x307feb, + 0x30851a, + 0x30896f, + 0x309185, + 0x309df0, + 0x30a051, + 0x30ac24, + 0x30b4ce, + 0x30b8bb, + 0x30c3f9, + 0x30cf8c, + 0x30d766, + 0x30db13, + 0x30e6b2, + 0x30eac7, + 0x30f22d, + 0x30fe58, + 0x3107cf, + 0x310bba, + 0x311350, + 0x311f25, + 0x312284, + 0x312ef1, + 0x31361b, + 0x313a6e, + 0x31412c, + 0x314d59, + 0x3155b3, + 0x3159c6, + 0x316467, + 0x316812, + 0x3170f8, + 0x317c8d, + 0x31867c, + 0x318a09, + 0x3192e3, + 0x319e96, + 0x31a337, + 0x31af42, + 0x31b7a8, + 0x31bbdd, + 0x31c09f, + 0x31ccea, + 0x31d400, + 0x31d875, + 0x31e5d4, + 0x31e9a1, + 0x31f14b, + 0x31fd3e, + 0x320265, + 0x320e10, + 0x3216fa, + 0x321a8f, + 0x32272e, + 0x322b5b, + 0x3233b1, + 0x323fc4, + 0x324486, + 0x3248f3, + 0x325019, + 0x325c6c, + 0x3261cd, + 0x326db8, + 0x327552, + 0x327927, + 0x3283d6, + 0x328fa3, + 0x329749, + 0x329b3c, + 0x32a69d, + 0x32aae8, + 0x32b202, + 0x32be77, + 0x32c535, + 0x32c940, + 0x32d1aa, + 0x32dddf, + 0x32e07e, + 0x32ec0b, + 0x32f4e1, + 0x32f894, + 0x330103, + 0x330d76, + 0x33159c, + 0x3319e9, + 0x332448, + 0x33283d, + 0x3330d7, + 0x333ca2, + 0x3347e0, + 0x334b95, + 0x33537f, + 0x335f0a, + 0x3362ab, + 0x336ede, + 0x337634, + 0x337a41, + 0x3380b0, + 0x338cc5, + 0x33942f, + 0x33985a, + 0x33a5fb, + 0x33a98e, + 0x33b164, + 0x33bd11, + 0x33c653, + 0x33ca26, + 0x33d2cc, + 0x33deb9, + 0x33e318, + 0x33ef6d, + 0x33f787, + 0x33fbf2, + 0x340544, + 0x340931, + 0x3411db, + 0x341dae, + 0x34200f, + 0x342c7a, + 0x343490, + 0x3438e5, + 0x3443a7, + 0x344fd2, + 0x345738, + 0x345b4d, + 0x3466ec, + 0x346a99, + 0x347273, + 0x347e06, + 0x3484f7, + 0x348882, + 0x349068, + 0x349c1d, + 0x34a1bc, + 0x34adc9, + 0x34b523, + 0x34b956, + 0x34c214, + 0x34ce61, + 0x34d68b, + 0x34dafe, + 0x34e75f, + 0x34eb2a, + 0x34f3c0, + 0x34ffb5, + 0x350622, + 0x350a57, + 0x3512bd, + 0x351ec8, + 0x352369, + 0x352f1c, + 0x3537f6, + 0x353b83, + 0x3540c1, + 0x354cb4, + 0x35545e, + 0x35582b, + 0x35658a, + 0x3569ff, + 0x357115, + 0x357d60, + 0x358791, + 0x358be4, + 0x35930e, + 0x359f7b, + 0x35a2da, + 0x35aeaf, + 0x35b645, + 0x35ba30, + 0x35c172, + 0x35cd07, + 0x35d5ed, + 0x35d998, + 0x35e439, + 0x35e84c, + 0x35f0a6, + 0x35fcd3, + 0x360388, + 0x360ffd, + 0x361717, + 0x361b62, + 0x3626c3, + 0x362ab6, + 0x36325c, + 0x363e29, + 0x36456b, + 0x36491e, + 0x3651f4, + 0x365d81, + 0x366020, + 0x366c55, + 0x3674bf, + 0x3678ca, + 0x36823b, + 0x368e4e, + 0x3696a4, + 0x369ad1, + 0x36a770, + 0x36ab05, + 0x36b3ef, + 0x36bf9a, + 0x36c4d8, + 0x36c8ad, + 0x36d047, + 0x36dc32, + 0x36e193, + 0x36ede6, + 0x36f50c, + 0x36f979, + 0x3700ee, + 0x370c9b, + 0x371471, + 0x371804, + 0x3725a5, + 0x3729d0, + 0x37313a, + 0x373d4f, + 0x37460d, + 0x374a78, + 0x375292, + 0x375ee7, + 0x376346, + 0x376f33, + 0x3777d9, + 0x377bac, + 0x37815d, + 0x378d28, + 0x3795c2, + 0x3799b7, + 0x37a416, + 0x37a863, + 0x37b089, + 0x37bcfc, + 0x37c7be, + 0x37cbcb, + 0x37d321, + 0x37df54, + 0x37e2f5, + 0x37ee80, + 0x37f66a, + 0x37fa1f, + 0x380773, + 0x380b06, + 0x3813ec, + 0x381f99, + 0x382238, + 0x382e4d, + 0x3836a7, + 0x383ad2, + 0x384190, + 0x384de5, + 0x38550f, + 0x38597a, + 0x3864db, + 0x3868ae, + 0x387044, + 0x387c31, + 0x3886c0, + 0x388ab5, + 0x38925f, + 0x389e2a, + 0x38a38b, + 0x38affe, + 0x38b714, + 0x38bb61, + 0x38c023, + 0x38cc56, + 0x38d4bc, + 0x38d8c9, + 0x38e568, + 0x38e91d, + 0x38f1f7, + 0x38fd82, + 0x390415, + 0x390860, + 0x39108a, + 0x391cff, + 0x39215e, + 0x392d2b, + 0x3935c1, + 0x3939b4, + 0x3942f6, + 0x394e83, + 0x395669, + 0x395a1c, + 0x3967bd, + 0x396bc8, + 0x397322, + 0x397f57, + 0x3985a6, + 0x3989d3, + 0x399139, + 0x399d4c, + 0x39a0ed, + 0x39ac98, + 0x39b472, + 0x39b807, + 0x39c345, + 0x39cf30, + 0x39d7da, + 0x39dbaf, + 0x39e60e, + 0x39ea7b, + 0x39f291, + 0x39fee4, + 0x3a01bf, + 0x3a0dca, + 0x3a1520, + 0x3a1955, + 0x3a24f4, + 0x3a2881, + 0x3a306b, + 0x3a3c1e, + 0x3a475c, + 0x3a4b29, + 0x3a53c3, + 0x3a5fb6, + 0x3a6217, + 0x3a6e62, + 0x3a7688, + 0x3a7afd, + 0x3a800c, + 0x3a8c79, + 0x3a9493, + 0x3a98e6, + 0x3aa547, + 0x3aa932, + 0x3ab1d8, + 0x3abdad, + 0x3ac6ef, + 0x3aca9a, + 0x3ad270, + 0x3ade05, + 0x3ae3a4, + 0x3aefd1, + 0x3af73b, + 0x3afb4e, + 0x3b02d9, + 0x3b0eac, + 0x3b1646, + 0x3b1a33, + 0x3b2792, + 0x3b2be7, + 0x3b330d, + 0x3b3f78, + 0x3b443a, + 0x3b484f, + 0x3b50a5, + 0x3b5cd0, + 0x3b6171, + 0x3b6d04, + 0x3b75ee, + 0x3b799b, + 0x3b836a, + 0x3b8f1f, + 0x3b97f5, + 0x3b9b80, + 0x3ba621, + 0x3baa54, + 0x3bb2be, + 0x3bbecb, + 0x3bc589, + 0x3bc9fc, + 0x3bd116, + 0x3bdd63, + 0x3be0c2, + 0x3becb7, + 0x3bf45d, + 0x3bf828, + 0x3c069e, + 0x3c0aeb, + 0x3c1201, + 0x3c1e74, + 0x3c23d5, + 0x3c2fa0, + 0x3c374a, + 0x3c3b3f, + 0x3c407d, + 0x3c4c08, + 0x3c54e2, + 0x3c5897, + 0x3c6536, + 0x3c6943, + 0x3c71a9, + 0x3c7ddc, + 0x3c872d, + 0x3c8b58, + 0x3c93b2, + 0x3c9fc7, + 0x3ca266, + 0x3cae13, + 0x3cb6f9, + 0x3cba8c, + 0x3cc1ce, + 0x3ccdbb, + 0x3cd551, + 0x3cd924, + 0x3ce485, + 0x3ce8f0, + 0x3cf01a, + 0x3cfc6f, + 0x3d05f8, + 0x3d098d, + 0x3d1167, + 0x3d1d12, + 0x3d20b3, + 0x3d2cc6, + 0x3d342c, + 0x3d3859, + 0x3d431b, + 0x3d4f6e, + 0x3d5784, + 0x3d5bf1, + 0x3d6650, + 0x3d6a25, + 0x3d72cf, + 0x3d7eba, + 0x3d844b, + 0x3d883e, + 0x3d90d4, + 0x3d9ca1, + 0x3da100, + 0x3dad75, + 0x3db59f, + 0x3db9ea, + 0x3dc2a8, + 0x3dcedd, + 0x3dd637, + 0x3dda42, + 0x3de7e3, + 0x3deb96, + 0x3df37c, + 0x3dff09, + 0x3e0052, + 0x3e0c27, + 0x3e14cd, + 0x3e18b8, + 0x3e2519, + 0x3e296c, + 0x3e3186, + 0x3e3df3, + 0x3e46b1, + 0x3e4ac4, + 0x3e522e, + 0x3e5e5b, + 0x3e63fa, + 0x3e6f8f, + 0x3e7765, + 0x3e7b10, + 0x3e81e1, + 0x3e8d94, + 0x3e957e, + 0x3e990b, + 0x3ea4aa, + 0x3ea8df, + 0x3eb035, + 0x3ebc40, + 0x3ec702, + 0x3ecb77, + 0x3ed39d, + 0x3edfe8, + 0x3ee249, + 0x3eee3c, + 0x3ef6d6, + 0x3efaa3, + 0x3f0334, + 0x3f0f41, + 0x3f17ab, + 0x3f1bde, + 0x3f267f, + 0x3f2a0a, + 0x3f32e0, + 0x3f3e95, + 0x3f45d7, + 0x3f49a2, + 0x3f5148, + 0x3f5d3d, + 0x3f609c, + 0x3f6ce9, + 0x3f7403, + 0x3f7876, + 0x3f8287, + 0x3f8ef2, + 0x3f9618, + 0x3f9a6d, + 0x3fa7cc, + 0x3fabb9, + 0x3fb353, + 0x3fbf26, + 0x3fc464, + 0x3fc811, + 0x3fd0fb, + 0x3fdc8e, + 0x3fe12f, + 0x3fed5a, + 0x3ff5b0, + 0x3ff9c5, + 0x40063a, + 0x400a4f, + 0x4012a5, + 0x401ed0, + 0x402371, + 0x402f04, + 0x4037ee, + 0x403b9b, + 0x4040d9, + 0x404cac, + 0x405446, + 0x405833, + 0x406592, + 0x4069e7, + 0x40710d, + 0x407d78, + 0x408789, + 0x408bfc, + 0x409316, + 0x409f63, + 0x40a2c2, + 0x40aeb7, + 0x40b65d, + 0x40ba28, + 0x40c16a, + 0x40cd1f, + 0x40d5f5, + 0x40d980, + 0x40e421, + 0x40e854, + 0x40f0be, + 0x40fccb, + 0x41055c, + 0x410929, + 0x4111c3, + 0x411db6, + 0x412017, + 0x412c62, + 0x413488, + 0x4138fd, + 0x4143bf, + 0x414fca, + 0x415720, + 0x415b55, + 0x4166f4, + 0x416a81, + 0x41726b, + 0x417e1e, + 0x4184ef, + 0x41889a, + 0x419070, + 0x419c05, + 0x41a1a4, + 0x41add1, + 0x41b53b, + 0x41b94e, + 0x41c20c, + 0x41ce79, + 0x41d693, + 0x41dae6, + 0x41e747, + 0x41eb32, + 0x41f3d8, + 0x41ffad, + 0x4200f6, + 0x420c83, + 0x421469, + 0x42181c, + 0x4225bd, + 0x4229c8, + 0x423122, + 0x423d57, + 0x424615, + 0x424a60, + 0x42528a, + 0x425eff, + 0x42635e, + 0x426f2b, + 0x4277c1, + 0x427bb4, + 0x428145, + 0x428d30, + 0x4295da, + 0x4299af, + 0x42a40e, + 0x42a87b, + 0x42b091, + 0x42bce4, + 0x42c7a6, + 0x42cbd3, + 0x42d339, + 0x42df4c, + 0x42e2ed, + 0x42ee98, + 0x42f672, + 0x42fa07, + 0x430390, + 0x430fe5, + 0x43170f, + 0x431b7a, + 0x4326db, + 0x432aae, + 0x433244, + 0x433e31, + 0x434573, + 0x434906, + 0x4351ec, + 0x435d99, + 0x436038, + 0x436c4d, + 0x4374a7, + 0x4378d2, + 0x438223, + 0x438e56, + 0x4396bc, + 0x439ac9, + 0x43a768, + 0x43ab1d, + 0x43b3f7, + 0x43bf82, + 0x43c4c0, + 0x43c8b5, + 0x43d05f, + 0x43dc2a, + 0x43e18b, + 0x43edfe, + 0x43f514, + 0x43f961, + 0x4407d7, + 0x440ba2, + 0x441348, + 0x441f3d, + 0x44229c, + 0x442ee9, + 0x443603, + 0x443a76, + 0x444134, + 0x444d41, + 0x4455ab, + 0x4459de, + 0x44647f, + 0x44680a, + 0x4470e0, + 0x447c95, + 0x448664, + 0x448a11, + 0x4492fb, + 0x449e8e, + 0x44a32f, + 0x44af5a, + 0x44b7b0, + 0x44bbc5, + 0x44c087, + 0x44ccf2, + 0x44d418, + 0x44d86d, + 0x44e5cc, + 0x44e9b9, + 0x44f153, + 0x44fd26, + 0x4504b1, + 0x4508c4, + 0x45102e, + 0x451c5b, + 0x4521fa, + 0x452d8f, + 0x453565, + 0x453910, + 0x454252, + 0x454e27, + 0x4556cd, + 0x455ab8, + 0x456719, + 0x456b6c, + 0x457386, + 0x457ff3, + 0x458502, + 0x458977, + 0x45919d, + 0x459de8, + 0x45a049, + 0x45ac3c, + 0x45b4d6, + 0x45b8a3, + 0x45c3e1, + 0x45cf94, + 0x45d77e, + 0x45db0b, + 0x45e6aa, + 0x45eadf, + 0x45f235, + 0x45fe40, + 0x46011b, + 0x460d6e, + 0x461584, + 0x4619f1, + 0x462450, + 0x462825, + 0x4630cf, + 0x463cba, + 0x4647f8, + 0x464b8d, + 0x465367, + 0x465f12, + 0x4662b3, + 0x466ec6, + 0x46762c, + 0x467a59, + 0x4680a8, + 0x468cdd, + 0x469437, + 0x469842, + 0x46a5e3, + 0x46a996, + 0x46b17c, + 0x46bd09, + 0x46c64b, + 0x46ca3e, + 0x46d2d4, + 0x46dea1, + 0x46e300, + 0x46ef75, + 0x46f79f, + 0x46fbea, + 0x47027d, + 0x470e08, + 0x4716e2, + 0x471a97, + 0x472736, + 0x472b43, + 0x4733a9, + 0x473fdc, + 0x47449e, + 0x4748eb, + 0x475001, + 0x475c74, + 0x4761d5, + 0x476da0, + 0x47754a, + 0x47793f, + 0x4783ce, + 0x478fbb, + 0x479751, + 0x479b24, + 0x47a685, + 0x47aaf0, + 0x47b21a, + 0x47be6f, + 0x47c52d, + 0x47c958, + 0x47d1b2, + 0x47ddc7, + 0x47e066, + 0x47ec13, + 0x47f4f9, + 0x47f88c, + 0x4805e0, + 0x480995, + 0x48117f, + 0x481d0a, + 0x4820ab, + 0x482cde, + 0x483434, + 0x483841, + 0x484303, + 0x484f76, + 0x48579c, + 0x485be9, + 0x486648, + 0x486a3d, + 0x4872d7, + 0x487ea2, + 0x488453, + 0x488826, + 0x4890cc, + 0x489cb9, + 0x48a118, + 0x48ad6d, + 0x48b587, + 0x48b9f2, + 0x48c2b0, + 0x48cec5, + 0x48d62f, + 0x48da5a, + 0x48e7fb, + 0x48eb8e, + 0x48f364, + 0x48ff11, + 0x490686, + 0x490af3, + 0x491219, + 0x491e6c, + 0x4923cd, + 0x492fb8, + 0x493752, + 0x493b27, + 0x494065, + 0x494c10, + 0x4954fa, + 0x49588f, + 0x49652e, + 0x49695b, + 0x4971b1, + 0x497dc4, + 0x498735, + 0x498b40, + 0x4993aa, + 0x499fdf, + 0x49a27e, + 0x49ae0b, + 0x49b6e1, + 0x49ba94, + 0x49c1d6, + 0x49cda3, + 0x49d549, + 0x49d93c, + 0x49e49d, + 0x49e8e8, + 0x49f002, + 0x49fc77, + 0x4a032c, + 0x4a0f59, + 0x4a17b3, + 0x4a1bc6, + 0x4a2667, + 0x4a2a12, + 0x4a32f8, + 0x4a3e8d, + 0x4a45cf, + 0x4a49ba, + 0x4a5150, + 0x4a5d25, + 0x4a6084, + 0x4a6cf1, + 0x4a741b, + 0x4a786e, + 0x4a829f, + 0x4a8eea, + 0x4a9600, + 0x4a9a75, + 0x4aa7d4, + 0x4aaba1, + 0x4ab34b, + 0x4abf3e, + 0x4ac47c, + 0x4ac809, + 0x4ad0e3, + 0x4adc96, + 0x4ae137, + 0x4aed42, + 0x4af5a8, + 0x4af9dd, + 0x4b004a, + 0x4b0c3f, + 0x4b14d5, + 0x4b18a0, + 0x4b2501, + 0x4b2974, + 0x4b319e, + 0x4b3deb, + 0x4b46a9, + 0x4b4adc, + 0x4b5236, + 0x4b5e43, + 0x4b63e2, + 0x4b6f97, + 0x4b777d, + 0x4b7b08, + 0x4b81f9, + 0x4b8d8c, + 0x4b9566, + 0x4b9913, + 0x4ba4b2, + 0x4ba8c7, + 0x4bb02d, + 0x4bbc58, + 0x4bc71a, + 0x4bcb6f, + 0x4bd385, + 0x4bdff0, + 0x4be251, + 0x4bee24, + 0x4bf6ce, + 0x4bfabb, + 0x4c040d, + 0x4c0878, + 0x4c1092, + 0x4c1ce7, + 0x4c2146, + 0x4c2d33, + 0x4c35d9, + 0x4c39ac, + 0x4c42ee, + 0x4c4e9b, + 0x4c5671, + 0x4c5a04, + 0x4c67a5, + 0x4c6bd0, + 0x4c733a, + 0x4c7f4f, + 0x4c85be, + 0x4c89cb, + 0x4c9121, + 0x4c9d54, + 0x4ca0f5, + 0x4cac80, + 0x4cb46a, + 0x4cb81f, + 0x4cc35d, + 0x4ccf28, + 0x4cd7c2, + 0x4cdbb7, + 0x4ce616, + 0x4cea63, + 0x4cf289, + 0x4cfefc, + 0x4d076b, + 0x4d0b1e, + 0x4d13f4, + 0x4d1f81, + 0x4d2220, + 0x4d2e55, + 0x4d36bf, + 0x4d3aca, + 0x4d4188, + 0x4d4dfd, + 0x4d5517, + 0x4d5962, + 0x4d64c3, + 0x4d68b6, + 0x4d705c, + 0x4d7c29, + 0x4d86d8, + 0x4d8aad, + 0x4d9247, + 0x4d9e32, + 0x4da393, + 0x4dafe6, + 0x4db70c, + 0x4dbb79, + 0x4dc03b, + 0x4dcc4e, + 0x4dd4a4, + 0x4dd8d1, + 0x4de570, + 0x4de905, + 0x4df1ef, + 0x4dfd9a, + 0x4e02c1, + 0x4e0eb4, + 0x4e165e, + 0x4e1a2b, + 0x4e278a, + 0x4e2bff, + 0x4e3315, + 0x4e3f60, + 0x4e4422, + 0x4e4857, + 0x4e50bd, + 0x4e5cc8, + 0x4e6169, + 0x4e6d1c, + 0x4e75f6, + 0x4e7983, + 0x4e8372, + 0x4e8f07, + 0x4e97ed, + 0x4e9b98, + 0x4ea639, + 0x4eaa4c, + 0x4eb2a6, + 0x4ebed3, + 0x4ec591, + 0x4ec9e4, + 0x4ed10e, + 0x4edd7b, + 0x4ee0da, + 0x4eecaf, + 0x4ef445, + 0x4ef830, + 0x4f01a7, + 0x4f0dd2, + 0x4f1538, + 0x4f194d, + 0x4f24ec, + 0x4f2899, + 0x4f3073, + 0x4f3c06, + 0x4f4744, + 0x4f4b31, + 0x4f53db, + 0x4f5fae, + 0x4f620f, + 0x4f6e7a, + 0x4f7690, + 0x4f7ae5, + 0x4f8014, + 0x4f8c61, + 0x4f948b, + 0x4f98fe, + 0x4fa55f, + 0x4fa92a, + 0x4fb1c0, + 0x4fbdb5, + 0x4fc6f7, + 0x4fca82, + 0x4fd268, + 0x4fde1d, + 0x4fe3bc, + 0x4fefc9, + 0x4ff723, + 0x4ffb56, + 0x50018e, + 0x500dfb, + 0x501511, + 0x501964, + 0x5024c5, + 0x5028b0, + 0x50305a, + 0x503c2f, + 0x50476d, + 0x504b18, + 0x5053f2, + 0x505f87, + 0x506226, + 0x506e53, + 0x5076b9, + 0x507acc, + 0x50803d, + 0x508c48, + 0x5094a2, + 0x5098d7, + 0x50a576, + 0x50a903, + 0x50b1e9, + 0x50bd9c, + 0x50c6de, + 0x50caab, + 0x50d241, + 0x50de34, + 0x50e395, + 0x50efe0, + 0x50f70a, + 0x50fb7f, + 0x5102e8, + 0x510e9d, + 0x511677, + 0x511a02, + 0x5127a3, + 0x512bd6, + 0x51333c, + 0x513f49, + 0x51440b, + 0x51487e, + 0x515094, + 0x515ce1, + 0x516140, + 0x516d35, + 0x5175df, + 0x5179aa, + 0x51835b, + 0x518f2e, + 0x5197c4, + 0x519bb1, + 0x51a610, + 0x51aa65, + 0x51b28f, + 0x51befa, + 0x51c5b8, + 0x51c9cd, + 0x51d127, + 0x51dd52, + 0x51e0f3, + 0x51ec86, + 0x51f46c, + 0x51f819, + 0x520742, + 0x520b37, + 0x5213dd, + 0x521fa8, + 0x522209, + 0x522e7c, + 0x523696, + 0x523ae3, + 0x5241a1, + 0x524dd4, + 0x52553e, + 0x52594b, + 0x5264ea, + 0x52689f, + 0x527075, + 0x527c00, + 0x5286f1, + 0x528a84, + 0x52926e, + 0x529e1b, + 0x52a3ba, + 0x52afcf, + 0x52b725, + 0x52bb50, + 0x52c012, + 0x52cc67, + 0x52d48d, + 0x52d8f8, + 0x52e559, + 0x52e92c, + 0x52f1c6, + 0x52fdb3, + 0x530424, + 0x530851, + 0x5310bb, + 0x531cce, + 0x53216f, + 0x532d1a, + 0x5335f0, + 0x533985, + 0x5342c7, + 0x534eb2, + 0x535658, + 0x535a2d, + 0x53678c, + 0x536bf9, + 0x537313, + 0x537f66, + 0x538597, + 0x5389e2, + 0x539108, + 0x539d7d, + 0x53a0dc, + 0x53aca9, + 0x53b443, + 0x53b836, + 0x53c374, + 0x53cf01, + 0x53d7eb, + 0x53db9e, + 0x53e63f, + 0x53ea4a, + 0x53f2a0, + 0x53fed5, + 0x540063, + 0x540c16, + 0x5414fc, + 0x541889, + 0x542528, + 0x54295d, + 0x5431b7, + 0x543dc2, + 0x544680, + 0x544af5, + 0x54521f, + 0x545e6a, + 0x5463cb, + 0x546fbe, + 0x547754, + 0x547b21, + 0x5481d0, + 0x548da5, + 0x54954f, + 0x54993a, + 0x54a49b, + 0x54a8ee, + 0x54b004, + 0x54bc71, + 0x54c733, + 0x54cb46, + 0x54d3ac, + 0x54dfd9, + 0x54e278, + 0x54ee0d, + 0x54f6e7, + 0x54fa92, + 0x550305, + 0x550f70, + 0x55179a, + 0x551bef, + 0x55264e, + 0x552a3b, + 0x5532d1, + 0x553ea4, + 0x5545e6, + 0x554993, + 0x555179, + 0x555d0c, + 0x5560ad, + 0x556cd8, + 0x557432, + 0x557847, + 0x5582b6, + 0x558ec3, + 0x559629, + 0x559a5c, + 0x55a7fd, + 0x55ab88, + 0x55b362, + 0x55bf17, + 0x55c455, + 0x55c820, + 0x55d0ca, + 0x55dcbf, + 0x55e11e, + 0x55ed6b, + 0x55f581, + 0x55f9f4, + 0x5606af, + 0x560ada, + 0x561230, + 0x561e45, + 0x5623e4, + 0x562f91, + 0x56377b, + 0x563b0e, + 0x56404c, + 0x564c39, + 0x5654d3, + 0x5658a6, + 0x566507, + 0x566972, + 0x567198, + 0x567ded, + 0x56871c, + 0x568b69, + 0x569383, + 0x569ff6, + 0x56a257, + 0x56ae22, + 0x56b6c8, + 0x56babd, + 0x56c1ff, + 0x56cd8a, + 0x56d560, + 0x56d915, + 0x56e4b4, + 0x56e8c1, + 0x56f02b, + 0x56fc5e, + 0x5705c9, + 0x5709bc, + 0x571156, + 0x571d23, + 0x572082, + 0x572cf7, + 0x57341d, + 0x573868, + 0x57432a, + 0x574f5f, + 0x5757b5, + 0x575bc0, + 0x576661, + 0x576a14, + 0x5772fe, + 0x577e8b, + 0x57847a, + 0x57880f, + 0x5790e5, + 0x579c90, + 0x57a131, + 0x57ad44, + 0x57b5ae, + 0x57b9db, + 0x57c299, + 0x57ceec, + 0x57d606, + 0x57da73, + 0x57e7d2, + 0x57eba7, + 0x57f34d, + 0x57ff38, + 0x580254, + 0x580e21, + 0x5816cb, + 0x581abe, + 0x58271f, + 0x582b6a, + 0x583380, + 0x583ff5, + 0x5844b7, + 0x5848c2, + 0x585028, + 0x585c5d, + 0x5861fc, + 0x586d89, + 0x587563, + 0x587916, + 0x5883e7, + 0x588f92, + 0x589778, + 0x589b0d, + 0x58a6ac, + 0x58aad9, + 0x58b233, + 0x58be46, + 0x58c504, + 0x58c971, + 0x58d19b, + 0x58ddee, + 0x58e04f, + 0x58ec3a, + 0x58f4d0, + 0x58f8a5, + 0x590132, + 0x590d47, + 0x5915ad, + 0x5919d8, + 0x592479, + 0x59280c, + 0x5930e6, + 0x593c93, + 0x5947d1, + 0x594ba4, + 0x59534e, + 0x595f3b, + 0x59629a, + 0x596eef, + 0x597605, + 0x597a70, + 0x598081, + 0x598cf4, + 0x59941e, + 0x59986b, + 0x59a5ca, + 0x59a9bf, + 0x59b155, + 0x59bd20, + 0x59c662, + 0x59ca17, + 0x59d2fd, + 0x59de88, + 0x59e329, + 0x59ef5c, + 0x59f7b6, + 0x59fbc3, + 0x5a0498, + 0x5a08ed, + 0x5a1007, + 0x5a1c72, + 0x5a21d3, + 0x5a2da6, + 0x5a354c, + 0x5a3939, + 0x5a427b, + 0x5a4e0e, + 0x5a56e4, + 0x5a5a91, + 0x5a6730, + 0x5a6b45, + 0x5a73af, + 0x5a7fda, + 0x5a852b, + 0x5a895e, + 0x5a91b4, + 0x5a9dc1, + 0x5aa060, + 0x5aac15, + 0x5ab4ff, + 0x5ab88a, + 0x5ac3c8, + 0x5acfbd, + 0x5ad757, + 0x5adb22, + 0x5ae683, + 0x5aeaf6, + 0x5af21c, + 0x5afe69, + 0x5b07fe, + 0x5b0b8b, + 0x5b1361, + 0x5b1f14, + 0x5b22b5, + 0x5b2ec0, + 0x5b362a, + 0x5b3a5f, + 0x5b411d, + 0x5b4d68, + 0x5b5582, + 0x5b59f7, + 0x5b6456, + 0x5b6823, + 0x5b70c9, + 0x5b7cbc, + 0x5b864d, + 0x5b8a38, + 0x5b92d2, + 0x5b9ea7, + 0x5ba306, + 0x5baf73, + 0x5bb799, + 0x5bbbec, + 0x5bc0ae, + 0x5bccdb, + 0x5bd431, + 0x5bd844, + 0x5be5e5, + 0x5be990, + 0x5bf17a, + 0x5bfd0f, + 0x5c03b9, + 0x5c0fcc, + 0x5c1726, + 0x5c1b53, + 0x5c26f2, + 0x5c2a87, + 0x5c326d, + 0x5c3e18, + 0x5c455a, + 0x5c492f, + 0x5c51c5, + 0x5c5db0, + 0x5c6011, + 0x5c6c64, + 0x5c748e, + 0x5c78fb, + 0x5c820a, + 0x5c8e7f, + 0x5c9695, + 0x5c9ae0, + 0x5ca741, + 0x5cab34, + 0x5cb3de, + 0x5cbfab, + 0x5cc4e9, + 0x5cc89c, + 0x5cd076, + 0x5cdc03, + 0x5ce1a2, + 0x5cedd7, + 0x5cf53d, + 0x5cf948, + 0x5d00df, + 0x5d0caa, + 0x5d1440, + 0x5d1835, + 0x5d2594, + 0x5d29e1, + 0x5d310b, + 0x5d3d7e, + 0x5d463c, + 0x5d4a49, + 0x5d52a3, + 0x5d5ed6, + 0x5d6377, + 0x5d6f02, + 0x5d77e8, + 0x5d7b9d, + 0x5d816c, + 0x5d8d19, + 0x5d95f3, + 0x5d9986, + 0x5da427, + 0x5da852, + 0x5db0b8, + 0x5dbccd, + 0x5dc78f, + 0x5dcbfa, + 0x5dd310, + 0x5ddf65, + 0x5de2c4, + 0x5deeb1, + 0x5df65b, + 0x5dfa2e, + 0x5e0575, + 0x5e0900, + 0x5e11ea, + 0x5e1d9f, + 0x5e203e, + 0x5e2c4b, + 0x5e34a1, + 0x5e38d4, + 0x5e4396, + 0x5e4fe3, + 0x5e5709, + 0x5e5b7c, + 0x5e66dd, + 0x5e6aa8, + 0x5e7242, + 0x5e7e37, + 0x5e84c6, + 0x5e88b3, + 0x5e9059, + 0x5e9c2c, + 0x5ea18d, + 0x5eadf8, + 0x5eb512, + 0x5eb967, + 0x5ec225, + 0x5ece50, + 0x5ed6ba, + 0x5edacf, + 0x5ee76e, + 0x5eeb1b, + 0x5ef3f1, + 0x5eff84, + 0x5f0613, + 0x5f0a66, + 0x5f128c, + 0x5f1ef9, + 0x5f2358, + 0x5f2f2d, + 0x5f37c7, + 0x5f3bb2, + 0x5f40f0, + 0x5f4c85, + 0x5f546f, + 0x5f581a, + 0x5f65bb, + 0x5f69ce, + 0x5f7124, + 0x5f7d51, + 0x5f87a0, + 0x5f8bd5, + 0x5f933f, + 0x5f9f4a, + 0x5fa2eb, + 0x5fae9e, + 0x5fb674, + 0x5fba01, + 0x5fc143, + 0x5fcd36, + 0x5fd5dc, + 0x5fd9a9, + 0x5fe408, + 0x5fe87d, + 0x5ff097, + 0x5ffce2, + 0x600527, + 0x600952, + 0x6011b8, + 0x601dcd, + 0x60206c, + 0x602c19, + 0x6034f3, + 0x603886, + 0x6043c4, + 0x604fb1, + 0x60575b, + 0x605b2e, + 0x60668f, + 0x606afa, + 0x607210, + 0x607e65, + 0x608494, + 0x6088e1, + 0x60900b, + 0x609c7e, + 0x60a1df, + 0x60adaa, + 0x60b540, + 0x60b935, + 0x60c277, + 0x60ce02, + 0x60d6e8, + 0x60da9d, + 0x60e73c, + 0x60eb49, + 0x60f3a3, + 0x60ffd6, + 0x610641, + 0x610a34, + 0x6112de, + 0x611eab, + 0x61230a, + 0x612f7f, + 0x613795, + 0x613be0, + 0x6140a2, + 0x614cd7, + 0x61543d, + 0x615848, + 0x6165e9, + 0x61699c, + 0x617176, + 0x617d03, + 0x6187f2, + 0x618b87, + 0x61936d, + 0x619f18, + 0x61a2b9, + 0x61aecc, + 0x61b626, + 0x61ba53, + 0x61c111, + 0x61cd64, + 0x61d58e, + 0x61d9fb, + 0x61e45a, + 0x61e82f, + 0x61f0c5, + 0x61fcb0, + 0x6203eb, + 0x620f9e, + 0x621774, + 0x621b01, + 0x6226a0, + 0x622ad5, + 0x62323f, + 0x623e4a, + 0x624508, + 0x62497d, + 0x625197, + 0x625de2, + 0x626043, + 0x626c36, + 0x6274dc, + 0x6278a9, + 0x628258, + 0x628e2d, + 0x6296c7, + 0x629ab2, + 0x62a713, + 0x62ab66, + 0x62b38c, + 0x62bff9, + 0x62c4bb, + 0x62c8ce, + 0x62d024, + 0x62dc51, + 0x62e1f0, + 0x62ed85, + 0x62f56f, + 0x62f91a, + 0x63008d, + 0x630cf8, + 0x631412, + 0x631867, + 0x6325c6, + 0x6329b3, + 0x633159, + 0x633d2c, + 0x63466e, + 0x634a1b, + 0x6352f1, + 0x635e84, + 0x636325, + 0x636f50, + 0x6377ba, + 0x637bcf, + 0x63813e, + 0x638d4b, + 0x6395a1, + 0x6399d4, + 0x63a475, + 0x63a800, + 0x63b0ea, + 0x63bc9f, + 0x63c7dd, + 0x63cba8, + 0x63d342, + 0x63df37, + 0x63e296, + 0x63eee3, + 0x63f609, + 0x63fa7c, + 0x6404ca, + 0x6408bf, + 0x641055, + 0x641c20, + 0x642181, + 0x642df4, + 0x64351e, + 0x64396b, + 0x644229, + 0x644e5c, + 0x6456b6, + 0x645ac3, + 0x646762, + 0x646b17, + 0x6473fd, + 0x647f88, + 0x648579, + 0x64890c, + 0x6491e6, + 0x649d93, + 0x64a032, + 0x64ac47, + 0x64b4ad, + 0x64b8d8, + 0x64c39a, + 0x64cfef, + 0x64d705, + 0x64db70, + 0x64e6d1, + 0x64eaa4, + 0x64f24e, + 0x64fe3b, + 0x6507ac, + 0x650bd9, + 0x651333, + 0x651f46, + 0x6522e7, + 0x652e92, + 0x653678, + 0x653a0d, + 0x65414f, + 0x654d3a, + 0x6555d0, + 0x6559a5, + 0x656404, + 0x656871, + 0x65709b, + 0x657cee, + 0x65861f, + 0x658a6a, + 0x659280, + 0x659ef5, + 0x65a354, + 0x65af21, + 0x65b7cb, + 0x65bbbe, + 0x65c0fc, + 0x65cc89, + 0x65d463, + 0x65d816, + 0x65e5b7, + 0x65e9c2, + 0x65f128, + 0x65fd5d, + 0x660206, + 0x660e73, + 0x661699, + 0x661aec, + 0x66274d, + 0x662b38, + 0x6633d2, + 0x663fa7, + 0x6644e5, + 0x664890, + 0x66507a, + 0x665c0f, + 0x6661ae, + 0x666ddb, + 0x667531, + 0x667944, + 0x6683b5, + 0x668fc0, + 0x66972a, + 0x669b5f, + 0x66a6fe, + 0x66aa8b, + 0x66b261, + 0x66be14, + 0x66c556, + 0x66c923, + 0x66d1c9, + 0x66ddbc, + 0x66e01d, + 0x66ec68, + 0x66f482, + 0x66f8f7, + 0x670160, + 0x670d15, + 0x6715ff, + 0x67198a, + 0x67242b, + 0x67285e, + 0x6730b4, + 0x673cc1, + 0x674783, + 0x674bf6, + 0x67531c, + 0x675f69, + 0x6762c8, + 0x676ebd, + 0x677657, + 0x677a22, + 0x6780d3, + 0x678ca6, + 0x67944c, + 0x679839, + 0x67a598, + 0x67a9ed, + 0x67b107, + 0x67bd72, + 0x67c630, + 0x67ca45, + 0x67d2af, + 0x67deda, + 0x67e37b, + 0x67ef0e, + 0x67f7e4, + 0x67fb91, + 0x6806fd, + 0x680a88, + 0x681262, + 0x681e17, + 0x6823b6, + 0x682fc3, + 0x683729, + 0x683b5c, + 0x68401e, + 0x684c6b, + 0x685481, + 0x6858f4, + 0x686555, + 0x686920, + 0x6871ca, + 0x687dbf, + 0x68874e, + 0x688b3b, + 0x6893d1, + 0x689fa4, + 0x68a205, + 0x68ae70, + 0x68b69a, + 0x68baef, + 0x68c1ad, + 0x68cdd8, + 0x68d532, + 0x68d947, + 0x68e4e6, + 0x68e893, + 0x68f079, + 0x68fc0c, + 0x69059b, + 0x6909ee, + 0x691104, + 0x691d71, + 0x6920d0, + 0x692ca5, + 0x69344f, + 0x69383a, + 0x694378, + 0x694f0d, + 0x6957e7, + 0x695b92, + 0x696633, + 0x696a46, + 0x6972ac, + 0x697ed9, + 0x698428, + 0x69885d, + 0x6990b7, + 0x699cc2, + 0x69a163, + 0x69ad16, + 0x69b5fc, + 0x69b989, + 0x69c2cb, + 0x69cebe, + 0x69d654, + 0x69da21, + 0x69e780, + 0x69ebf5, + 0x69f31f, + 0x69ff6a, + 0x6a0031, + 0x6a0c44, + 0x6a14ae, + 0x6a18db, + 0x6a257a, + 0x6a290f, + 0x6a31e5, + 0x6a3d90, + 0x6a46d2, + 0x6a4aa7, + 0x6a524d, + 0x6a5e38, + 0x6a6399, + 0x6a6fec, + 0x6a7706, + 0x6a7b73, + 0x6a8182, + 0x6a8df7, + 0x6a951d, + 0x6a9968, + 0x6aa4c9, + 0x6aa8bc, + 0x6ab056, + 0x6abc23, + 0x6ac761, + 0x6acb14, + 0x6ad3fe, + 0x6adf8b, + 0x6ae22a, + 0x6aee5f, + 0x6af6b5, + 0x6afac0, + 0x6b0357, + 0x6b0f22, + 0x6b17c8, + 0x6b1bbd, + 0x6b261c, + 0x6b2a69, + 0x6b3283, + 0x6b3ef6, + 0x6b45b4, + 0x6b49c1, + 0x6b512b, + 0x6b5d5e, + 0x6b60ff, + 0x6b6c8a, + 0x6b7460, + 0x6b7815, + 0x6b82e4, + 0x6b8e91, + 0x6b967b, + 0x6b9a0e, + 0x6ba7af, + 0x6babda, + 0x6bb330, + 0x6bbf45, + 0x6bc407, + 0x6bc872, + 0x6bd098, + 0x6bdced, + 0x6be14c, + 0x6bed39, + 0x6bf5d3, + 0x6bf9a6, + 0x6c0710, + 0x6c0b65, + 0x6c138f, + 0x6c1ffa, + 0x6c225b, + 0x6c2e2e, + 0x6c36c4, + 0x6c3ab1, + 0x6c41f3, + 0x6c4d86, + 0x6c556c, + 0x6c5919, + 0x6c64b8, + 0x6c68cd, + 0x6c7027, + 0x6c7c52, + 0x6c86a3, + 0x6c8ad6, + 0x6c923c, + 0x6c9e49, + 0x6ca3e8, + 0x6caf9d, + 0x6cb777, + 0x6cbb02, + 0x6cc040, + 0x6ccc35, + 0x6cd4df, + 0x6cd8aa, + 0x6ce50b, + 0x6ce97e, + 0x6cf194, + 0x6cfde1, + 0x6d0476, + 0x6d0803, + 0x6d10e9, + 0x6d1c9c, + 0x6d213d, + 0x6d2d48, + 0x6d35a2, + 0x6d39d7, + 0x6d4295, + 0x6d4ee0, + 0x6d560a, + 0x6d5a7f, + 0x6d67de, + 0x6d6bab, + 0x6d7341, + 0x6d7f34, + 0x6d85c5, + 0x6d89b0, + 0x6d915a, + 0x6d9d2f, + 0x6da08e, + 0x6dacfb, + 0x6db411, + 0x6db864, + 0x6dc326, + 0x6dcf53, + 0x6dd7b9, + 0x6ddbcc, + 0x6de66d, + 0x6dea18, + 0x6df2f2, + 0x6dfe87, + 0x6e01dc, + 0x6e0da9, + 0x6e1543, + 0x6e1936, + 0x6e2497, + 0x6e28e2, + 0x6e3008, + 0x6e3c7d, + 0x6e473f, + 0x6e4b4a, + 0x6e53a0, + 0x6e5fd5, + 0x6e6274, + 0x6e6e01, + 0x6e76eb, + 0x6e7a9e, + 0x6e806f, + 0x6e8c1a, + 0x6e94f0, + 0x6e9885, + 0x6ea524, + 0x6ea951, + 0x6eb1bb, + 0x6ebdce, + 0x6ec68c, + 0x6ecaf9, + 0x6ed213, + 0x6ede66, + 0x6ee3c7, + 0x6eefb2, + 0x6ef758, + 0x6efb2d, + 0x6f02ba, + 0x6f0ecf, + 0x6f1625, + 0x6f1a50, + 0x6f27f1, + 0x6f2b84, + 0x6f336e, + 0x6f3f1b, + 0x6f4459, + 0x6f482c, + 0x6f50c6, + 0x6f5cb3, + 0x6f6112, + 0x6f6d67, + 0x6f758d, + 0x6f79f8, + 0x6f8309, + 0x6f8f7c, + 0x6f9796, + 0x6f9be3, + 0x6fa642, + 0x6faa37, + 0x6fb2dd, + 0x6fbea8, + 0x6fc5ea, + 0x6fc99f, + 0x6fd175, + 0x6fdd00, + 0x6fe0a1, + 0x6fecd4, + 0x6ff43e, + 0x6ff84b, + 0x700293, + 0x700ee6, + 0x70160c, + 0x701a79, + 0x7027d8, + 0x702bad, + 0x703347, + 0x703f32, + 0x704470, + 0x704805, + 0x7050ef, + 0x705c9a, + 0x70613b, + 0x706d4e, + 0x7075a4, + 0x7079d1, + 0x708320, + 0x708f55, + 0x7097bf, + 0x709bca, + 0x70a66b, + 0x70aa1e, + 0x70b2f4, + 0x70be81, + 0x70c5c3, + 0x70c9b6, + 0x70d15c, + 0x70dd29, + 0x70e088, + 0x70ecfd, + 0x70f417, + 0x70f862, + 0x7101f5, + 0x710d80, + 0x71156a, + 0x71191f, + 0x7124be, + 0x7128cb, + 0x713021, + 0x713c54, + 0x714716, + 0x714b63, + 0x715389, + 0x715ffc, + 0x71625d, + 0x716e28, + 0x7176c2, + 0x717ab7, + 0x718046, + 0x718c33, + 0x7194d9, + 0x7198ac, + 0x71a50d, + 0x71a978, + 0x71b192, + 0x71bde7, + 0x71c6a5, + 0x71cad0, + 0x71d23a, + 0x71de4f, + 0x71e3ee, + 0x71ef9b, + 0x71f771, + 0x71fb04, + 0x72045f, + 0x72082a, + 0x7210c0, + 0x721cb5, + 0x722114, + 0x722d61, + 0x72358b, + 0x7239fe, + 0x7242bc, + 0x724ec9, + 0x725623, + 0x725a56, + 0x7267f7, + 0x726b82, + 0x727368, + 0x727f1d, + 0x7285ec, + 0x728999, + 0x729173, + 0x729d06, + 0x72a0a7, + 0x72acd2, + 0x72b438, + 0x72b84d, + 0x72c30f, + 0x72cf7a, + 0x72d790, + 0x72dbe5, + 0x72e644, + 0x72ea31, + 0x72f2db, + 0x72feae, + 0x730739, + 0x730b4c, + 0x7313a6, + 0x731fd3, + 0x732272, + 0x732e07, + 0x7336ed, + 0x733a98, + 0x7341da, + 0x734daf, + 0x735545, + 0x735930, + 0x736491, + 0x7368e4, + 0x73700e, + 0x737c7b, + 0x73868a, + 0x738aff, + 0x739215, + 0x739e60, + 0x73a3c1, + 0x73afb4, + 0x73b75e, + 0x73bb2b, + 0x73c069, + 0x73cc1c, + 0x73d4f6, + 0x73d883, + 0x73e522, + 0x73e957, + 0x73f1bd, + 0x73fdc8, + 0x74037e, + 0x740f0b, + 0x7417e1, + 0x741b94, + 0x742635, + 0x742a40, + 0x7432aa, + 0x743edf, + 0x74459d, + 0x7449e8, + 0x745102, + 0x745d77, + 0x7460d6, + 0x746ca3, + 0x747449, + 0x74783c, + 0x7482cd, + 0x748eb8, + 0x749652, + 0x749a27, + 0x74a786, + 0x74abf3, + 0x74b319, + 0x74bf6c, + 0x74c42e, + 0x74c85b, + 0x74d0b1, + 0x74dcc4, + 0x74e165, + 0x74ed10, + 0x74f5fa, + 0x74f98f, + 0x750018, + 0x750c6d, + 0x751487, + 0x7518f2, + 0x752553, + 0x752926, + 0x7531cc, + 0x753db9, + 0x7546fb, + 0x754a8e, + 0x755264, + 0x755e11, + 0x7563b0, + 0x756fc5, + 0x75772f, + 0x757b5a, + 0x7581ab, + 0x758dde, + 0x759534, + 0x759941, + 0x75a4e0, + 0x75a895, + 0x75b07f, + 0x75bc0a, + 0x75c748, + 0x75cb3d, + 0x75d3d7, + 0x75dfa2, + 0x75e203, + 0x75ee76, + 0x75f69c, + 0x75fae9, + 0x7605b2, + 0x7609c7, + 0x76112d, + 0x761d58, + 0x7620f9, + 0x762c8c, + 0x763466, + 0x763813, + 0x764351, + 0x764f24, + 0x7657ce, + 0x765bbb, + 0x76661a, + 0x766a6f, + 0x767285, + 0x767ef0, + 0x768401, + 0x768874, + 0x76909e, + 0x769ceb, + 0x76a14a, + 0x76ad3f, + 0x76b5d5, + 0x76b9a0, + 0x76c2e2, + 0x76ce97, + 0x76d67d, + 0x76da08, + 0x76e7a9, + 0x76ebdc, + 0x76f336, + 0x76ff43, + 0x7706d4, + 0x770aa1, + 0x77124b, + 0x771e3e, + 0x77239f, + 0x772fea, + 0x773700, + 0x773b75, + 0x774037, + 0x774c42, + 0x7754a8, + 0x7758dd, + 0x77657c, + 0x776909, + 0x7771e3, + 0x777d96, + 0x778767, + 0x778b12, + 0x7793f8, + 0x779f8d, + 0x77a22c, + 0x77ae59, + 0x77b6b3, + 0x77bac6, + 0x77c184, + 0x77cdf1, + 0x77d51b, + 0x77d96e, + 0x77e4cf, + 0x77e8ba, + 0x77f050, + 0x77fc25, + 0x780149, + 0x780d3c, + 0x7815d6, + 0x7819a3, + 0x782402, + 0x782877, + 0x78309d, + 0x783ce8, + 0x7847aa, + 0x784bdf, + 0x785335, + 0x785f40, + 0x7862e1, + 0x786e94, + 0x78767e, + 0x787a0b, + 0x7880fa, + 0x788c8f, + 0x789465, + 0x789810, + 0x78a5b1, + 0x78a9c4, + 0x78b12e, + 0x78bd5b, + 0x78c619, + 0x78ca6c, + 0x78d286, + 0x78def3, + 0x78e352, + 0x78ef27, + 0x78f7cd, + 0x78fbb8, + 0x79022f, + 0x790e5a, + 0x7916b0, + 0x791ac5, + 0x792764, + 0x792b11, + 0x7933fb, + 0x793f8e, + 0x7944cc, + 0x7948b9, + 0x795053, + 0x795c26, + 0x796187, + 0x796df2, + 0x797518, + 0x79796d, + 0x79839c, + 0x798fe9, + 0x799703, + 0x799b76, + 0x79a6d7, + 0x79aaa2, + 0x79b248, + 0x79be3d, + 0x79c57f, + 0x79c90a, + 0x79d1e0, + 0x79dd95, + 0x79e034, + 0x79ec41, + 0x79f4ab, + 0x79f8de, + 0x7a0785, + 0x7a0bf0, + 0x7a131a, + 0x7a1f6f, + 0x7a22ce, + 0x7a2ebb, + 0x7a3651, + 0x7a3a24, + 0x7a4166, + 0x7a4d13, + 0x7a55f9, + 0x7a598c, + 0x7a642d, + 0x7a6858, + 0x7a70b2, + 0x7a7cc7, + 0x7a8636, + 0x7a8a43, + 0x7a92a9, + 0x7a9edc, + 0x7aa37d, + 0x7aaf08, + 0x7ab7e2, + 0x7abb97, + 0x7ac0d5, + 0x7acca0, + 0x7ad44a, + 0x7ad83f, + 0x7ae59e, + 0x7ae9eb, + 0x7af101, + 0x7afd74, + 0x7b04e3, + 0x7b0896, + 0x7b107c, + 0x7b1c09, + 0x7b21a8, + 0x7b2ddd, + 0x7b3537, + 0x7b3942, + 0x7b4200, + 0x7b4e75, + 0x7b569f, + 0x7b5aea, + 0x7b674b, + 0x7b6b3e, + 0x7b73d4, + 0x7b7fa1, + 0x7b8550, + 0x7b8925, + 0x7b91cf, + 0x7b9dba, + 0x7ba01b, + 0x7bac6e, + 0x7bb484, + 0x7bb8f1, + 0x7bc3b3, + 0x7bcfc6, + 0x7bd72c, + 0x7bdb59, + 0x7be6f8, + 0x7bea8d, + 0x7bf267, + 0x7bfe12, + 0x7c00a4, + 0x7c0cd1, + 0x7c143b, + 0x7c184e, + 0x7c25ef, + 0x7c299a, + 0x7c3170, + 0x7c3d05, + 0x7c4647, + 0x7c4a32, + 0x7c52d8, + 0x7c5ead, + 0x7c630c, + 0x7c6f79, + 0x7c7793, + 0x7c7be6, + 0x7c8117, + 0x7c8d62, + 0x7c9588, + 0x7c99fd, + 0x7ca45c, + 0x7ca829, + 0x7cb0c3, + 0x7cbcb6, + 0x7cc7f4, + 0x7ccb81, + 0x7cd36b, + 0x7cdf1e, + 0x7ce2bf, + 0x7ceeca, + 0x7cf620, + 0x7cfa55, + 0x7d03c2, + 0x7d0fb7, + 0x7d175d, + 0x7d1b28, + 0x7d2689, + 0x7d2afc, + 0x7d3216, + 0x7d3e63, + 0x7d4521, + 0x7d4954, + 0x7d51be, + 0x7d5dcb, + 0x7d606a, + 0x7d6c1f, + 0x7d74f5, + 0x7d7880, + 0x7d8271, + 0x7d8e04, + 0x7d96ee, + 0x7d9a9b, + 0x7da73a, + 0x7dab4f, + 0x7db3a5, + 0x7dbfd0, + 0x7dc492, + 0x7dc8e7, + 0x7dd00d, + 0x7ddc78, + 0x7de1d9, + 0x7dedac, + 0x7df546, + 0x7df933, + 0x7e0668, + 0x7e0a1d, + 0x7e12f7, + 0x7e1e82, + 0x7e2323, + 0x7e2f56, + 0x7e37bc, + 0x7e3bc9, + 0x7e408b, + 0x7e4cfe, + 0x7e5414, + 0x7e5861, + 0x7e65c0, + 0x7e69b5, + 0x7e715f, + 0x7e7d2a, + 0x7e87db, + 0x7e8bae, + 0x7e9344, + 0x7e9f31, + 0x7ea290, + 0x7eaee5, + 0x7eb60f, + 0x7eba7a, + 0x7ec138, + 0x7ecd4d, + 0x7ed5a7, + 0x7ed9d2, + 0x7ee473, + 0x7ee806, + 0x7ef0ec, + 0x7efc99, + 0x7f050e, + 0x7f097b, + 0x7f1191, + 0x7f1de4, + 0x7f2045, + 0x7f2c30, + 0x7f34da, + 0x7f38af, + 0x7f43ed, + 0x7f4f98, + 0x7f5772, + 0x7f5b07, + 0x7f66a6, + 0x7f6ad3, + 0x7f7239, + 0x7f7e4c, + 0x7f84bd, + 0x7f88c8, + 0x7f9022, + 0x7f9c57, + 0x7fa1f6, + 0x7fad83, + 0x7fb569, + 0x7fb91c, + 0x7fc25e, + 0x7fce2b, + 0x7fd6c1, + 0x7fdab4, + 0x7fe715, + 0x7feb60, + 0x7ff38a, + 0x7fffff +}; diff --git a/libcodec2-android/src/codec2/src/gp_interleaver.c b/libcodec2-android/src/codec2/src/gp_interleaver.c new file mode 100644 index 0000000..257af17 --- /dev/null +++ b/libcodec2-android/src/codec2/src/gp_interleaver.c @@ -0,0 +1,105 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: gp_interleaver.c + AUTHOR......: David Rowe + DATE CREATED: April 2018 + + Golden Prime Interleaver. My interpretation of "On the Analysis and + Design of Good Algebraic Interleavers", Xie et al,eq (5). + + See also octave/gp_interleaver.m + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2018 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include +#include "gp_interleaver.h" + +/* + Choose b for Golden Prime Interleaver. b is chosen to be the + closest integer, which is relatively prime to N, to the Golden + section of N. + + Implemented with a LUT in C for convenience, Octave version + has a more complete implementation. If you find you need some more + numbers head back to the Octave choose_interleaver_b() function. +*/ + +static const int b_table[] = { + 112, 71, /* 700D: HRA_112_112 */ + 210, 131, /* 2020: HRAb_396_504 with 312 data bits used */ + 384, 239, /* datac3: H_256_768_22 */ + 1290, 797 /* datac1, datac2: H2064_516_sparse */ +}; + +int choose_interleaver_b(int Nbits) +{ + int i; + for(i=0; i. +*/ + +#ifndef __GP_INTERLEAVER__ +#define __GP_INTERLEAVER__ + +#include "comp.h" + +void gp_interleave_comp(COMP interleaved_frame[], COMP frame[], int Nbits); +void gp_deinterleave_comp(COMP frame[], COMP interleaved_frame[], int Nbits); +void gp_interleave_float(float frame[], float interleaved_frame[], int Nbits); +void gp_deinterleave_float(float interleaved_frame[], float frame[], int Nbits); + +#endif diff --git a/libcodec2-android/src/codec2/src/hanning.h b/libcodec2-android/src/codec2/src/hanning.h new file mode 100644 index 0000000..81d88dc --- /dev/null +++ b/libcodec2-android/src/codec2/src/hanning.h @@ -0,0 +1,644 @@ +/* Generated by hanning_file() Octave function */ + +const float hanning[]={ + 0, + 2.4171e-05, + 9.66816e-05, + 0.000217525, + 0.000386689, + 0.000604158, + 0.00086991, + 0.00118392, + 0.00154616, + 0.00195659, + 0.00241517, + 0.00292186, + 0.00347661, + 0.00407937, + 0.00473008, + 0.00542867, + 0.00617507, + 0.00696922, + 0.00781104, + 0.00870045, + 0.00963736, + 0.0106217, + 0.0116533, + 0.0127322, + 0.0138581, + 0.0150311, + 0.0162509, + 0.0175175, + 0.0188308, + 0.0201906, + 0.0215968, + 0.0230492, + 0.0245478, + 0.0260923, + 0.0276826, + 0.0293186, + 0.0310001, + 0.032727, + 0.034499, + 0.036316, + 0.0381779, + 0.0400844, + 0.0420354, + 0.0440307, + 0.04607, + 0.0481533, + 0.0502802, + 0.0524506, + 0.0546643, + 0.056921, + 0.0592206, + 0.0615627, + 0.0639473, + 0.0663741, + 0.0688427, + 0.0713531, + 0.0739048, + 0.0764978, + 0.0791318, + 0.0818064, + 0.0845214, + 0.0872767, + 0.0900718, + 0.0929066, + 0.0957807, + 0.0986939, + 0.101646, + 0.104636, + 0.107665, + 0.110732, + 0.113836, + 0.116978, + 0.120156, + 0.123372, + 0.126624, + 0.129912, + 0.133235, + 0.136594, + 0.139989, + 0.143418, + 0.146881, + 0.150379, + 0.153911, + 0.157476, + 0.161074, + 0.164705, + 0.168368, + 0.172063, + 0.17579, + 0.179549, + 0.183338, + 0.187158, + 0.191008, + 0.194888, + 0.198798, + 0.202737, + 0.206704, + 0.2107, + 0.214724, + 0.218775, + 0.222854, + 0.226959, + 0.231091, + 0.235249, + 0.239432, + 0.243641, + 0.247874, + 0.252132, + 0.256414, + 0.260719, + 0.265047, + 0.269398, + 0.273772, + 0.278167, + 0.282584, + 0.287021, + 0.29148, + 0.295958, + 0.300456, + 0.304974, + 0.30951, + 0.314065, + 0.318638, + 0.323228, + 0.327835, + 0.332459, + 0.3371, + 0.341756, + 0.346427, + 0.351113, + 0.355814, + 0.360528, + 0.365256, + 0.369997, + 0.374751, + 0.379516, + 0.384293, + 0.389082, + 0.393881, + 0.398691, + 0.40351, + 0.408338, + 0.413176, + 0.418022, + 0.422876, + 0.427737, + 0.432605, + 0.43748, + 0.44236, + 0.447247, + 0.452138, + 0.457034, + 0.461935, + 0.466839, + 0.471746, + 0.476655, + 0.481568, + 0.486481, + 0.491397, + 0.496313, + 0.501229, + 0.506145, + 0.511061, + 0.515976, + 0.520889, + 0.5258, + 0.530708, + 0.535614, + 0.540516, + 0.545414, + 0.550308, + 0.555197, + 0.560081, + 0.564958, + 0.56983, + 0.574695, + 0.579552, + 0.584402, + 0.589244, + 0.594077, + 0.598901, + 0.603715, + 0.60852, + 0.613314, + 0.618097, + 0.622868, + 0.627628, + 0.632375, + 0.63711, + 0.641831, + 0.646538, + 0.651232, + 0.655911, + 0.660574, + 0.665222, + 0.669855, + 0.67447, + 0.679069, + 0.683651, + 0.688215, + 0.69276, + 0.697287, + 0.701795, + 0.706284, + 0.710752, + 0.7152, + 0.719627, + 0.724033, + 0.728418, + 0.73278, + 0.73712, + 0.741437, + 0.74573, + 0.75, + 0.754246, + 0.758467, + 0.762663, + 0.766833, + 0.770978, + 0.775097, + 0.779189, + 0.783254, + 0.787291, + 0.791301, + 0.795283, + 0.799236, + 0.80316, + 0.807055, + 0.810921, + 0.814756, + 0.81856, + 0.822334, + 0.826077, + 0.829788, + 0.833468, + 0.837115, + 0.840729, + 0.844311, + 0.847859, + 0.851374, + 0.854855, + 0.858301, + 0.861713, + 0.86509, + 0.868431, + 0.871737, + 0.875007, + 0.87824, + 0.881437, + 0.884598, + 0.887721, + 0.890806, + 0.893854, + 0.896864, + 0.899835, + 0.902768, + 0.905661, + 0.908516, + 0.911331, + 0.914106, + 0.916841, + 0.919536, + 0.92219, + 0.924804, + 0.927376, + 0.929907, + 0.932397, + 0.934845, + 0.93725, + 0.939614, + 0.941935, + 0.944213, + 0.946448, + 0.94864, + 0.950789, + 0.952894, + 0.954955, + 0.956972, + 0.958946, + 0.960874, + 0.962759, + 0.964598, + 0.966393, + 0.968142, + 0.969846, + 0.971505, + 0.973118, + 0.974686, + 0.976207, + 0.977683, + 0.979112, + 0.980495, + 0.981832, + 0.983122, + 0.984365, + 0.985561, + 0.986711, + 0.987813, + 0.988868, + 0.989876, + 0.990837, + 0.99175, + 0.992616, + 0.993434, + 0.994204, + 0.994927, + 0.995601, + 0.996228, + 0.996807, + 0.997337, + 0.99782, + 0.998255, + 0.998641, + 0.998979, + 0.999269, + 0.999511, + 0.999704, + 0.999849, + 0.999946, + 0.999994, + 0.999994, + 0.999946, + 0.999849, + 0.999704, + 0.999511, + 0.999269, + 0.998979, + 0.998641, + 0.998255, + 0.99782, + 0.997337, + 0.996807, + 0.996228, + 0.995601, + 0.994927, + 0.994204, + 0.993434, + 0.992616, + 0.99175, + 0.990837, + 0.989876, + 0.988868, + 0.987813, + 0.986711, + 0.985561, + 0.984365, + 0.983122, + 0.981832, + 0.980495, + 0.979112, + 0.977683, + 0.976207, + 0.974686, + 0.973118, + 0.971505, + 0.969846, + 0.968142, + 0.966393, + 0.964598, + 0.962759, + 0.960874, + 0.958946, + 0.956972, + 0.954955, + 0.952894, + 0.950789, + 0.94864, + 0.946448, + 0.944213, + 0.941935, + 0.939614, + 0.93725, + 0.934845, + 0.932397, + 0.929907, + 0.927376, + 0.924804, + 0.92219, + 0.919536, + 0.916841, + 0.914106, + 0.911331, + 0.908516, + 0.905661, + 0.902768, + 0.899835, + 0.896864, + 0.893854, + 0.890806, + 0.887721, + 0.884598, + 0.881437, + 0.87824, + 0.875007, + 0.871737, + 0.868431, + 0.86509, + 0.861713, + 0.858301, + 0.854855, + 0.851374, + 0.847859, + 0.844311, + 0.840729, + 0.837115, + 0.833468, + 0.829788, + 0.826077, + 0.822334, + 0.81856, + 0.814756, + 0.810921, + 0.807055, + 0.80316, + 0.799236, + 0.795283, + 0.791301, + 0.787291, + 0.783254, + 0.779189, + 0.775097, + 0.770978, + 0.766833, + 0.762663, + 0.758467, + 0.754246, + 0.75, + 0.74573, + 0.741437, + 0.73712, + 0.73278, + 0.728418, + 0.724033, + 0.719627, + 0.7152, + 0.710752, + 0.706284, + 0.701795, + 0.697287, + 0.69276, + 0.688215, + 0.683651, + 0.679069, + 0.67447, + 0.669855, + 0.665222, + 0.660574, + 0.655911, + 0.651232, + 0.646538, + 0.641831, + 0.63711, + 0.632375, + 0.627628, + 0.622868, + 0.618097, + 0.613314, + 0.60852, + 0.603715, + 0.598901, + 0.594077, + 0.589244, + 0.584402, + 0.579552, + 0.574695, + 0.56983, + 0.564958, + 0.560081, + 0.555197, + 0.550308, + 0.545414, + 0.540516, + 0.535614, + 0.530708, + 0.5258, + 0.520889, + 0.515976, + 0.511061, + 0.506145, + 0.501229, + 0.496313, + 0.491397, + 0.486481, + 0.481568, + 0.476655, + 0.471746, + 0.466839, + 0.461935, + 0.457034, + 0.452138, + 0.447247, + 0.44236, + 0.43748, + 0.432605, + 0.427737, + 0.422876, + 0.418022, + 0.413176, + 0.408338, + 0.40351, + 0.398691, + 0.393881, + 0.389082, + 0.384293, + 0.379516, + 0.374751, + 0.369997, + 0.365256, + 0.360528, + 0.355814, + 0.351113, + 0.346427, + 0.341756, + 0.3371, + 0.332459, + 0.327835, + 0.323228, + 0.318638, + 0.314065, + 0.30951, + 0.304974, + 0.300456, + 0.295958, + 0.29148, + 0.287021, + 0.282584, + 0.278167, + 0.273772, + 0.269398, + 0.265047, + 0.260719, + 0.256414, + 0.252132, + 0.247874, + 0.243641, + 0.239432, + 0.235249, + 0.231091, + 0.226959, + 0.222854, + 0.218775, + 0.214724, + 0.2107, + 0.206704, + 0.202737, + 0.198798, + 0.194888, + 0.191008, + 0.187158, + 0.183338, + 0.179549, + 0.17579, + 0.172063, + 0.168368, + 0.164705, + 0.161074, + 0.157476, + 0.153911, + 0.150379, + 0.146881, + 0.143418, + 0.139989, + 0.136594, + 0.133235, + 0.129912, + 0.126624, + 0.123372, + 0.120156, + 0.116978, + 0.113836, + 0.110732, + 0.107665, + 0.104636, + 0.101646, + 0.0986939, + 0.0957807, + 0.0929066, + 0.0900718, + 0.0872767, + 0.0845214, + 0.0818064, + 0.0791318, + 0.0764978, + 0.0739048, + 0.0713531, + 0.0688427, + 0.0663741, + 0.0639473, + 0.0615627, + 0.0592206, + 0.056921, + 0.0546643, + 0.0524506, + 0.0502802, + 0.0481533, + 0.04607, + 0.0440307, + 0.0420354, + 0.0400844, + 0.0381779, + 0.036316, + 0.034499, + 0.032727, + 0.0310001, + 0.0293186, + 0.0276826, + 0.0260923, + 0.0245478, + 0.0230492, + 0.0215968, + 0.0201906, + 0.0188308, + 0.0175175, + 0.0162509, + 0.0150311, + 0.0138581, + 0.0127322, + 0.0116533, + 0.0106217, + 0.00963736, + 0.00870045, + 0.00781104, + 0.00696922, + 0.00617507, + 0.00542867, + 0.00473008, + 0.00407937, + 0.00347661, + 0.00292186, + 0.00241517, + 0.00195659, + 0.00154616, + 0.00118392, + 0.00086991, + 0.000604158, + 0.000386689, + 0.000217525, + 9.66816e-05, + 2.4171e-05, + 0 +}; diff --git a/libcodec2-android/src/codec2/src/ht_coeff.h b/libcodec2-android/src/codec2/src/ht_coeff.h new file mode 100644 index 0000000..98c5c6e --- /dev/null +++ b/libcodec2-android/src/codec2/src/ht_coeff.h @@ -0,0 +1,107 @@ +/* Hilbert Transform FIR filter coeffs */ +/* Generated by make_hilb Octave script */ + +#define HT_N 100 + +COMP ht_coeff[]={ + {0.000000,0.000000}, + {-0.000000,-0.000001}, + {0.000000,0.000000}, + {-0.000000,-0.000017}, + {0.000000,0.000000}, + {0.000000,-0.000079}, + {0.000000,0.000000}, + {0.000000,-0.000217}, + {0.000000,0.000000}, + {0.000000,-0.000461}, + {0.000000,0.000000}, + {-0.000000,-0.000842}, + {0.000000,0.000000}, + {-0.000000,-0.001391}, + {0.000000,0.000000}, + {-0.000000,-0.002140}, + {0.000000,0.000000}, + {-0.000000,-0.003121}, + {0.000000,0.000000}, + {0.000000,-0.004371}, + {0.000000,0.000000}, + {0.000000,-0.005928}, + {0.000000,0.000000}, + {-0.000000,-0.007839}, + {0.000000,0.000000}, + {-0.000000,-0.010159}, + {0.000000,0.000000}, + {-0.000000,-0.012957}, + {0.000000,0.000000}, + {-0.000000,-0.016327}, + {0.000000,0.000000}, + {0.000000,-0.020399}, + {0.000000,0.000000}, + {-0.000000,-0.025364}, + {0.000000,0.000000}, + {0.000000,-0.031512}, + {0.000000,0.000000}, + {0.000000,-0.039319}, + {0.000000,0.000000}, + {0.000000,-0.049610}, + {0.000000,0.000000}, + {-0.000000,-0.063952}, + {0.000000,0.000000}, + {-0.000000,-0.085722}, + {0.000000,0.000000}, + {0.000000,-0.123718}, + {0.000000,0.000000}, + {0.000000,-0.210249}, + {0.000000,0.000000}, + {-0.000000,-0.636250}, + {0.999748,0.000000}, + {0.000000,0.634969}, + {0.000000,0.000000}, + {0.000000,0.208979}, + {0.000000,0.000000}, + {0.000000,0.122467}, + {0.000000,0.000000}, + {-0.000000,0.084502}, + {0.000000,0.000000}, + {0.000000,0.062771}, + {0.000000,0.000000}, + {0.000000,0.048477}, + {0.000000,0.000000}, + {0.000000,0.038242}, + {0.000000,0.000000}, + {-0.000000,0.030497}, + {0.000000,0.000000}, + {0.000000,0.024418}, + {0.000000,0.000000}, + {0.000000,0.019527}, + {0.000000,0.000000}, + {-0.000000,0.015532}, + {0.000000,0.000000}, + {0.000000,0.012242}, + {0.000000,0.000000}, + {-0.000000,0.009524}, + {0.000000,0.000000}, + {-0.000000,0.007285}, + {0.000000,0.000000}, + {-0.000000,0.005454}, + {0.000000,0.000000}, + {-0.000000,0.003973}, + {0.000000,0.000000}, + {0.000000,0.002796}, + {0.000000,0.000000}, + {-0.000000,0.001882}, + {0.000000,0.000000}, + {-0.000000,0.001196}, + {0.000000,0.000000}, + {-0.000000,0.000701}, + {0.000000,0.000000}, + {0.000000,0.000367}, + {0.000000,0.000000}, + {0.000000,0.000160}, + {0.000000,0.000000}, + {0.000000,0.000051}, + {0.000000,0.000000}, + {-0.000000,0.000008}, + {0.000000,0.000000}, + {0.000000,0.000000} +}; \ No newline at end of file diff --git a/libcodec2-android/src/codec2/src/insert_errors.c b/libcodec2-android/src/codec2/src/insert_errors.c new file mode 100644 index 0000000..3861335 --- /dev/null +++ b/libcodec2-android/src/codec2/src/insert_errors.c @@ -0,0 +1,90 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: insert_errors.c + AUTHOR......: David Rowe + DATE CREATED: 20/2/2013 + + Inserts errors into a Codec 2 bit stream using error files. All files are + in one bit per char format. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2013 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include "codec2.h" + +#include +#include +#include +#include +#include + +int main(int argc, char *argv[]) +{ + FILE *fin; + FILE *fout; + FILE *ferror; + unsigned char abit, error_bit; + int errors, bits; + + if (argc < 3) { + printf("%s InputBitFile OutputBitFile ErrorFile\n", argv[0]); + exit(1); + } + + if (strcmp(argv[1], "-") == 0) fin = stdin; + else if ( (fin = fopen(argv[1],"rb")) == NULL ) { + fprintf(stderr, "Error opening input bit file: %s: %s.\n", + argv[1], strerror(errno)); + exit(1); + } + + if (strcmp(argv[2], "-") == 0) fout = stdout; + else if ( (fout = fopen(argv[2],"wb")) == NULL ) { + fprintf(stderr, "Error opening output speech file: %s: %s.\n", + argv[2], strerror(errno)); + exit(1); + } + + if ((ferror = fopen(argv[3],"rb")) == NULL ) { + fprintf(stderr, "Error opening error file: %s: %s.\n", + argv[3], strerror(errno)); + exit(1); + } + + bits = errors = 0; + + while(fread(&abit, sizeof(char), 1, fin) == 1) { + bits++; + if (fread(&error_bit, sizeof(char), 1, ferror)) { + abit ^= error_bit; + errors += error_bit; + } + fwrite(&abit, sizeof(char), 1, fout); + if (fout == stdout) fflush(stdout); + if (fin == stdin) fflush(stdin); + } + + fclose(fin); + fclose(fout); + fclose(ferror); + + fprintf(stderr,"bits: %d errors: %d ber: %4.3f\n", bits, errors, (float)errors/bits); + + return 0; +} diff --git a/libcodec2-android/src/codec2/src/interldpc.c b/libcodec2-android/src/codec2/src/interldpc.c new file mode 100644 index 0000000..cdbbb42 --- /dev/null +++ b/libcodec2-android/src/codec2/src/interldpc.c @@ -0,0 +1,183 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: interldpc.c + AUTHOR......: David Rowe + DATE CREATED: April 2018 + + Helper functions for LDPC waveforms. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2018 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . + */ + +#include +#include +#include +#include +#include +#include + +#include "interldpc.h" +#include "ofdm_internal.h" +#include "mpdecode_core.h" +#include "gp_interleaver.h" + +void set_up_ldpc_constants(struct LDPC *ldpc, int code_length, int parity_bits) { + /* following provided for convenience and to match Octave variable names */ + + /* these remain fixed */ + ldpc->ldpc_data_bits_per_frame = code_length - parity_bits; + ldpc->ldpc_coded_bits_per_frame = code_length; + + /* in the case there are some unused data bits, these may be + modified to be less that ldpc->ldpc_xxx versions above. We + place known bits in the unused data bit positions, which make + the code stronger, and allow us to mess with different speech + codec bit allocations without designing new LDPC codes. */ + + ldpc->data_bits_per_frame = ldpc->ldpc_data_bits_per_frame; + ldpc->coded_bits_per_frame = ldpc->ldpc_coded_bits_per_frame; +} + +void set_data_bits_per_frame(struct LDPC *ldpc, int new_data_bits_per_frame) { + ldpc->data_bits_per_frame = new_data_bits_per_frame; + ldpc->coded_bits_per_frame = ldpc->data_bits_per_frame + ldpc->NumberParityBits; +} + +void ldpc_encode_frame(struct LDPC *ldpc, int codeword[], unsigned char tx_bits_char[]) { + unsigned char pbits[ldpc->NumberParityBits]; + int i, j; + + if (ldpc->data_bits_per_frame == ldpc->ldpc_data_bits_per_frame) { + /* we have enough data bits to fill the codeword */ + encode(ldpc, tx_bits_char, pbits); + } else { + unsigned char tx_bits_char_padded[ldpc->ldpc_data_bits_per_frame]; + /* some unused data bits, set these to known values to strengthen code */ + memcpy(tx_bits_char_padded, tx_bits_char, ldpc->data_bits_per_frame); + for (i = ldpc->data_bits_per_frame; i < ldpc->ldpc_data_bits_per_frame; i++) + tx_bits_char_padded[i] = 1; + encode(ldpc, tx_bits_char_padded, pbits); + } + + /* output codeword is concatenation of (used) data bits and parity + bits, we don't bother sending unused (known) data bits */ + for (i = 0; i < ldpc->data_bits_per_frame; i++) { + codeword[i] = tx_bits_char[i]; + } + for (j = 0; j < ldpc->NumberParityBits; i++, j++) { + codeword[i] = pbits[j]; + } +} + +void qpsk_modulate_frame(COMP tx_symbols[], int codeword[], int n) { + int s, i; + int dibit[2]; + complex float qpsk_symb; + + for (s = 0, i = 0; i < n; s += 2, i++) { + dibit[0] = codeword[s + 1] & 0x1; + dibit[1] = codeword[s] & 0x1; + qpsk_symb = qpsk_mod(dibit); + tx_symbols[i].real = crealf(qpsk_symb); + tx_symbols[i].imag = cimagf(qpsk_symb); + } +} + +/* Count uncoded (raw) bit errors over frame, note we don't include UW + of txt bits as this is done after we dissassemmble the frame */ + +int count_uncoded_errors(struct LDPC *ldpc, struct OFDM_CONFIG *config, int *Nerrs_raw, COMP codeword_symbols_de[]) { + int i, Nerrs, Terrs; + + int coded_syms_per_frame = ldpc->coded_bits_per_frame/config->bps; + int coded_bits_per_frame = ldpc->coded_bits_per_frame; + int data_bits_per_frame = ldpc->data_bits_per_frame; + int rx_bits_raw[coded_bits_per_frame]; + + /* generate test codeword from known payload data bits */ + + int test_codeword[coded_bits_per_frame]; + uint16_t r[data_bits_per_frame]; + uint8_t tx_bits[data_bits_per_frame]; + + ofdm_rand(r, data_bits_per_frame); + + for (i = 0; i < data_bits_per_frame; i++) { + tx_bits[i] = r[i] > 16384; + } + + ldpc_encode_frame(ldpc, test_codeword, tx_bits); + + Terrs = 0; + + for (i = 0; i < coded_syms_per_frame; i++) { + int bits[2]; + complex float s = codeword_symbols_de[i].real + I * codeword_symbols_de[i].imag; + qpsk_demod(s, bits); + rx_bits_raw[config->bps * i] = bits[1]; + rx_bits_raw[config->bps * i + 1] = bits[0]; + } + + Nerrs = 0; + + for (i = 0; i < coded_bits_per_frame; i++) { + if (test_codeword[i] != rx_bits_raw[i]) { + Nerrs++; + } + } + + *Nerrs_raw = Nerrs; + Terrs += Nerrs; + + return Terrs; +} + +int count_errors(uint8_t tx_bits[], uint8_t rx_bits[], int n) { + int i; + int Nerrs = 0; + + for (i = 0; i < n; i++) { + if (tx_bits[i] != rx_bits[i]) { + Nerrs++; + } + } + + return Nerrs; +} + +/* + Given an array of tx_bits, LDPC encodes, interleaves, and OFDM modulates + */ + +void ofdm_ldpc_interleave_tx(struct OFDM *ofdm, struct LDPC *ldpc, complex float tx_sams[], uint8_t tx_bits[], uint8_t txt_bits[]) { + int Npayloadsymsperpacket = ldpc->coded_bits_per_frame/ofdm->bps; + int Npayloadbitsperpacket = ldpc->coded_bits_per_frame; + int Nbitsperpacket = ofdm_get_bits_per_packet(ofdm); + int codeword[Npayloadbitsperpacket]; + COMP payload_symbols[Npayloadsymsperpacket]; + COMP payload_symbols_inter[Npayloadsymsperpacket]; + complex float tx_symbols[Nbitsperpacket/ ofdm->bps]; + + ldpc_encode_frame(ldpc, codeword, tx_bits); + qpsk_modulate_frame(payload_symbols, codeword, Npayloadsymsperpacket); + gp_interleave_comp(payload_symbols_inter, payload_symbols, Npayloadsymsperpacket); + ofdm_assemble_qpsk_modem_packet_symbols(ofdm, tx_symbols, payload_symbols_inter, txt_bits); + ofdm_txframe(ofdm, tx_sams, tx_symbols); +} + diff --git a/libcodec2-android/src/codec2/src/interldpc.h b/libcodec2-android/src/codec2/src/interldpc.h new file mode 100644 index 0000000..441d42a --- /dev/null +++ b/libcodec2-android/src/codec2/src/interldpc.h @@ -0,0 +1,45 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: interldpc.h + AUTHOR......: David Rowe + DATE CREATED: April 2018 + + Helper functions for interleaved LDPC modems. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2018 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#ifndef __INTERLDPC__ +#define __INTERLDPC__ + +#include + +#include "comp.h" +#include "mpdecode_core.h" +#include "ofdm_internal.h" + +void set_up_ldpc_constants(struct LDPC *ldpc, int code_length, int parity_bits); +void set_data_bits_per_frame(struct LDPC *ldpc, int new_data_bits_per_frame); +void ldpc_encode_frame(struct LDPC *ldpc, int codeword[], unsigned char tx_bits_char[]); +void qpsk_modulate_frame(COMP tx_symbols[], int codeword[], int n); +int count_uncoded_errors(struct LDPC *ldpc, struct OFDM_CONFIG *config, int *Nerrs_raw, COMP codeword_symbols_de[]); +int count_errors(uint8_t tx_bits[], uint8_t rx_bits[], int n); +void ofdm_ldpc_interleave_tx(struct OFDM *ofdm, struct LDPC *ldpc, complex float tx_sams[], uint8_t tx_bits[], uint8_t txt_bits[]); + +#endif diff --git a/libcodec2-android/src/codec2/src/interp.c b/libcodec2-android/src/codec2/src/interp.c new file mode 100644 index 0000000..2109acb --- /dev/null +++ b/libcodec2-android/src/codec2/src/interp.c @@ -0,0 +1,331 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: interp.c + AUTHOR......: David Rowe + DATE CREATED: 9/10/09 + + Interpolation of 20ms frames to 10ms frames. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2009 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include +#include +#include + +#include "defines.h" +#include "interp.h" +#include "lsp.h" +#include "quantise.h" + +float sample_log_amp(MODEL *model, float w); + +#if 0 +/*---------------------------------------------------------------------------*\ + + FUNCTION....: interp() + AUTHOR......: David Rowe + DATE CREATED: 22/8/10 + + Given two frames decribed by model parameters 20ms apart, determines + the model parameters of the 10ms frame between them. Assumes + voicing is available for middle (interpolated) frame. Outputs are + amplitudes and Wo for the interpolated frame. + + This version can interpolate the amplitudes between two frames of + different Wo and L. + + This version works by log linear interpolation, but listening tests + showed it creates problems in background noise, e.g. hts2a and mmt1. + When this function is used (--dec mode) bg noise appears to be + amplitude modulated, and gets louder. The interp_lsp() function + below seems to do a better job. + +\*---------------------------------------------------------------------------*/ + +void interpolate( + MODEL *interp, /* interpolated model params */ + MODEL *prev, /* previous frames model params */ + MODEL *next, /* next frames model params */ + float Wo_min +) +{ + int l; + float w,log_amp; + + /* Wo depends on voicing of this and adjacent frames */ + + if (interp->voiced) { + if (prev->voiced && next->voiced) + interp->Wo = (prev->Wo + next->Wo)/2.0; + if (!prev->voiced && next->voiced) + interp->Wo = next->Wo; + if (prev->voiced && !next->voiced) + interp->Wo = prev->Wo; + } + else { + interp->Wo = Wo_min; + } + interp->L = PI/interp->Wo; + + /* Interpolate amplitudes using linear interpolation in log domain */ + + for(l=1; l<=interp->L; l++) { + w = l*interp->Wo; + log_amp = (sample_log_amp(prev, w) + sample_log_amp(next, w))/2.0; + interp->A[l] = powf(10.0, log_amp); + } +} +#endif + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: sample_log_amp() + AUTHOR......: David Rowe + DATE CREATED: 22/8/10 + + Samples the amplitude envelope at an arbitrary frequency w. Uses + linear interpolation in the log domain to sample between harmonic + amplitudes. + +\*---------------------------------------------------------------------------*/ + +float sample_log_amp(MODEL *model, float w) +{ + int m; + float f, log_amp; + + assert(w > 0.0); assert (w <= PI); + + m = floorf(w/model->Wo + 0.5); + f = (w - m*model->Wo)/w; + assert(f <= 1.0); + + if (m < 1) { + log_amp = f*log10f(model->A[1] + 1E-6); + } + else if ((m+1) > model->L) { + log_amp = (1.0-f)*log10f(model->A[model->L] + 1E-6); + } + else { + log_amp = (1.0-f)*log10f(model->A[m] + 1E-6) + + f*log10f(model->A[m+1] + 1E-6); + } + + return log_amp; +} + +#ifdef NOT_NEEDED + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: interp_lsp() + AUTHOR......: David Rowe + DATE CREATED: 10 Nov 2010 + + Given two frames decribed by model parameters 20ms apart, determines + the model parameters of the 10ms frame between them. Assumes + voicing is available for middle (interpolated) frame. Outputs are + amplitudes and Wo for the interpolated frame. + + This version uses interpolation of LSPs, seems to do a better job + with bg noise. + +\*---------------------------------------------------------------------------*/ + +void interpolate_lsp( + codec2_fft_cfg fft_fwd_cfg, + MODEL *interp, /* interpolated model params */ + MODEL *prev, /* previous frames model params */ + MODEL *next, /* next frames model params */ + float *prev_lsps, /* previous frames LSPs */ + float prev_e, /* previous frames LPC energy */ + float *next_lsps, /* next frames LSPs */ + float next_e, /* next frames LPC energy */ + float *ak_interp, /* interpolated aks for this frame */ + float *lsps_interp, /* interpolated lsps for this frame */ + float Wo_min +) +{ + int i; + float e; + float snr; + + /* trap corner case where V est is probably wrong */ + + if (interp->voiced && !prev->voiced && !next->voiced) { + interp->voiced = 0; + } + + /* Wo depends on voicing of this and adjacent frames */ + + if (interp->voiced) { + if (prev->voiced && next->voiced) + interp->Wo = (prev->Wo + next->Wo)/2.0; + if (!prev->voiced && next->voiced) + interp->Wo = next->Wo; + if (prev->voiced && !next->voiced) + interp->Wo = prev->Wo; + } + else { + interp->Wo = Wo_min; + } + interp->L = PI/interp->Wo; + + //printf(" interp: prev_v: %d next_v: %d prev_Wo: %f next_Wo: %f\n", + // prev->voiced, next->voiced, prev->Wo, next->Wo); + //printf(" interp: Wo: %1.5f L: %d\n", interp->Wo, interp->L); + + /* interpolate LSPs */ + + for(i=0; iA[1]); +} +#endif + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: interp_Wo() + AUTHOR......: David Rowe + DATE CREATED: 22 May 2012 + + Interpolates centre 10ms sample of Wo and L samples given two + samples 20ms apart. Assumes voicing is available for centre + (interpolated) frame. + +\*---------------------------------------------------------------------------*/ + +void interp_Wo( + MODEL *interp, /* interpolated model params */ + MODEL *prev, /* previous frames model params */ + MODEL *next, /* next frames model params */ + float Wo_min + ) +{ + interp_Wo2(interp, prev, next, 0.5, Wo_min); +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: interp_Wo2() + AUTHOR......: David Rowe + DATE CREATED: 22 May 2012 + + Weighted interpolation of two Wo samples. + +\*---------------------------------------------------------------------------*/ + +void interp_Wo2( + MODEL *interp, /* interpolated model params */ + MODEL *prev, /* previous frames model params */ + MODEL *next, /* next frames model params */ + float weight, + float Wo_min +) +{ + /* trap corner case where voicing est is probably wrong */ + + if (interp->voiced && !prev->voiced && !next->voiced) { + interp->voiced = 0; + } + + /* Wo depends on voicing of this and adjacent frames */ + + if (interp->voiced) { + if (prev->voiced && next->voiced) + interp->Wo = (1.0 - weight)*prev->Wo + weight*next->Wo; + if (!prev->voiced && next->voiced) + interp->Wo = next->Wo; + if (prev->voiced && !next->voiced) + interp->Wo = prev->Wo; + } + else { + interp->Wo = Wo_min; + } + interp->L = PI/interp->Wo; +} + + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: interp_energy() + AUTHOR......: David Rowe + DATE CREATED: 22 May 2012 + + Interpolates centre 10ms sample of energy given two samples 20ms + apart. + +\*---------------------------------------------------------------------------*/ + +float interp_energy(float prev_e, float next_e) +{ + //return powf(10.0, (log10f(prev_e) + log10f(next_e))/2.0); + return sqrtf(prev_e * next_e); //looks better is math. identical and faster math +} + + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: interp_energy2() + AUTHOR......: David Rowe + DATE CREATED: 22 May 2012 + + Interpolates centre 10ms sample of energy given two samples 20ms + apart. + +\*---------------------------------------------------------------------------*/ + +float interp_energy2(float prev_e, float next_e, float weight) +{ + return POW10F((1.0 - weight)*log10f(prev_e) + weight*log10f(next_e)); + +} + + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: interpolate_lsp_ver2() + AUTHOR......: David Rowe + DATE CREATED: 22 May 2012 + + Weighted interpolation of LSPs. + +\*---------------------------------------------------------------------------*/ + +void interpolate_lsp_ver2(float interp[], float prev[], float next[], float weight, int order) +{ + int i; + + for(i=0; i. +*/ + +#ifndef __INTERP__ +#define __INTERP__ + +#include "kiss_fft.h" + +void interpolate(MODEL *interp, MODEL *prev, MODEL *next); +void interpolate_lsp(kiss_fft_cfg fft_dec_cfg, + MODEL *interp, MODEL *prev, MODEL *next, + float *prev_lsps, float prev_e, + float *next_lsps, float next_e, + float *ak_interp, float *lsps_interp, float Wo_min); +void interp_Wo(MODEL *interp, MODEL *prev, MODEL *next, float Wo_min); +void interp_Wo2(MODEL *interp, MODEL *prev, MODEL *next, float weight, float Wo_min); +float interp_energy(float prev, float next); +float interp_energy2(float prev, float next, float weight); +void interpolate_lsp_ver2(float interp[], float prev[], float next[], float weight, int order); + +#endif diff --git a/libcodec2-android/src/codec2/src/kiss_fft.c b/libcodec2-android/src/codec2/src/kiss_fft.c new file mode 100644 index 0000000..05f7f27 --- /dev/null +++ b/libcodec2-android/src/codec2/src/kiss_fft.c @@ -0,0 +1,408 @@ +/* +Copyright (c) 2003-2010, Mark Borgerding + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + * Neither the author nor the names of any contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +#include "_kiss_fft_guts.h" +/* The guts header contains all the multiplication and addition macros that are defined for + fixed or floating point complex numbers. It also delares the kf_ internal functions. + */ + +static void kf_bfly2( + kiss_fft_cpx * Fout, + const size_t fstride, + const kiss_fft_cfg st, + int m + ) +{ + kiss_fft_cpx * Fout2; + kiss_fft_cpx * tw1 = st->twiddles; + kiss_fft_cpx t; + Fout2 = Fout + m; + do{ + C_FIXDIV(*Fout,2); C_FIXDIV(*Fout2,2); + + C_MUL (t, *Fout2 , *tw1); + tw1 += fstride; + C_SUB( *Fout2 , *Fout , t ); + C_ADDTO( *Fout , t ); + ++Fout2; + ++Fout; + }while (--m); +} + +static void kf_bfly4( + kiss_fft_cpx * Fout, + const size_t fstride, + const kiss_fft_cfg st, + const size_t m + ) +{ + kiss_fft_cpx *tw1,*tw2,*tw3; + kiss_fft_cpx scratch[6]; + size_t k=m; + const size_t m2=2*m; + const size_t m3=3*m; + + + tw3 = tw2 = tw1 = st->twiddles; + + do { + C_FIXDIV(*Fout,4); C_FIXDIV(Fout[m],4); C_FIXDIV(Fout[m2],4); C_FIXDIV(Fout[m3],4); + + C_MUL(scratch[0],Fout[m] , *tw1 ); + C_MUL(scratch[1],Fout[m2] , *tw2 ); + C_MUL(scratch[2],Fout[m3] , *tw3 ); + + C_SUB( scratch[5] , *Fout, scratch[1] ); + C_ADDTO(*Fout, scratch[1]); + C_ADD( scratch[3] , scratch[0] , scratch[2] ); + C_SUB( scratch[4] , scratch[0] , scratch[2] ); + C_SUB( Fout[m2], *Fout, scratch[3] ); + tw1 += fstride; + tw2 += fstride*2; + tw3 += fstride*3; + C_ADDTO( *Fout , scratch[3] ); + + if(st->inverse) { + Fout[m].r = scratch[5].r - scratch[4].i; + Fout[m].i = scratch[5].i + scratch[4].r; + Fout[m3].r = scratch[5].r + scratch[4].i; + Fout[m3].i = scratch[5].i - scratch[4].r; + }else{ + Fout[m].r = scratch[5].r + scratch[4].i; + Fout[m].i = scratch[5].i - scratch[4].r; + Fout[m3].r = scratch[5].r - scratch[4].i; + Fout[m3].i = scratch[5].i + scratch[4].r; + } + ++Fout; + }while(--k); +} + +static void kf_bfly3( + kiss_fft_cpx * Fout, + const size_t fstride, + const kiss_fft_cfg st, + size_t m + ) +{ + size_t k=m; + const size_t m2 = 2*m; + kiss_fft_cpx *tw1,*tw2; + kiss_fft_cpx scratch[5]; + kiss_fft_cpx epi3; + epi3 = st->twiddles[fstride*m]; + + tw1=tw2=st->twiddles; + + do{ + C_FIXDIV(*Fout,3); C_FIXDIV(Fout[m],3); C_FIXDIV(Fout[m2],3); + + C_MUL(scratch[1],Fout[m] , *tw1); + C_MUL(scratch[2],Fout[m2] , *tw2); + + C_ADD(scratch[3],scratch[1],scratch[2]); + C_SUB(scratch[0],scratch[1],scratch[2]); + tw1 += fstride; + tw2 += fstride*2; + + Fout[m].r = Fout->r - HALF_OF(scratch[3].r); + Fout[m].i = Fout->i - HALF_OF(scratch[3].i); + + C_MULBYSCALAR( scratch[0] , epi3.i ); + + C_ADDTO(*Fout,scratch[3]); + + Fout[m2].r = Fout[m].r + scratch[0].i; + Fout[m2].i = Fout[m].i - scratch[0].r; + + Fout[m].r -= scratch[0].i; + Fout[m].i += scratch[0].r; + + ++Fout; + }while(--k); +} + +static void kf_bfly5( + kiss_fft_cpx * Fout, + const size_t fstride, + const kiss_fft_cfg st, + int m + ) +{ + kiss_fft_cpx *Fout0,*Fout1,*Fout2,*Fout3,*Fout4; + int u; + kiss_fft_cpx scratch[13]; + kiss_fft_cpx * twiddles = st->twiddles; + kiss_fft_cpx *tw; + kiss_fft_cpx ya,yb; + ya = twiddles[fstride*m]; + yb = twiddles[fstride*2*m]; + + Fout0=Fout; + Fout1=Fout0+m; + Fout2=Fout0+2*m; + Fout3=Fout0+3*m; + Fout4=Fout0+4*m; + + tw=st->twiddles; + for ( u=0; ur += scratch[7].r + scratch[8].r; + Fout0->i += scratch[7].i + scratch[8].i; + + scratch[5].r = scratch[0].r + S_MUL(scratch[7].r,ya.r) + S_MUL(scratch[8].r,yb.r); + scratch[5].i = scratch[0].i + S_MUL(scratch[7].i,ya.r) + S_MUL(scratch[8].i,yb.r); + + scratch[6].r = S_MUL(scratch[10].i,ya.i) + S_MUL(scratch[9].i,yb.i); + scratch[6].i = -S_MUL(scratch[10].r,ya.i) - S_MUL(scratch[9].r,yb.i); + + C_SUB(*Fout1,scratch[5],scratch[6]); + C_ADD(*Fout4,scratch[5],scratch[6]); + + scratch[11].r = scratch[0].r + S_MUL(scratch[7].r,yb.r) + S_MUL(scratch[8].r,ya.r); + scratch[11].i = scratch[0].i + S_MUL(scratch[7].i,yb.r) + S_MUL(scratch[8].i,ya.r); + scratch[12].r = - S_MUL(scratch[10].i,yb.i) + S_MUL(scratch[9].i,ya.i); + scratch[12].i = S_MUL(scratch[10].r,yb.i) - S_MUL(scratch[9].r,ya.i); + + C_ADD(*Fout2,scratch[11],scratch[12]); + C_SUB(*Fout3,scratch[11],scratch[12]); + + ++Fout0;++Fout1;++Fout2;++Fout3;++Fout4; + } +} + +/* perform the butterfly for one stage of a mixed radix FFT */ +static void kf_bfly_generic( + kiss_fft_cpx * Fout, + const size_t fstride, + const kiss_fft_cfg st, + int m, + int p + ) +{ + int u,k,q1,q; + kiss_fft_cpx * twiddles = st->twiddles; + kiss_fft_cpx t; + int Norig = st->nfft; + + kiss_fft_cpx * scratch = (kiss_fft_cpx*)KISS_FFT_TMP_ALLOC(sizeof(kiss_fft_cpx)*p); + + for ( u=0; u=Norig) twidx-=Norig; + C_MUL(t,scratch[q] , twiddles[twidx] ); + C_ADDTO( Fout[ k ] ,t); + } + k += m; + } + } + KISS_FFT_TMP_FREE(scratch); +} + +static +void kf_work( + kiss_fft_cpx * Fout, + const kiss_fft_cpx * f, + const size_t fstride, + int in_stride, + int * factors, + const kiss_fft_cfg st + ) +{ + kiss_fft_cpx * Fout_beg=Fout; + const int p=*factors++; /* the radix */ + const int m=*factors++; /* stage's fft length/p */ + const kiss_fft_cpx * Fout_end = Fout + p*m; + +#ifdef _OPENMP + // use openmp extensions at the + // top-level (not recursive) + if (fstride==1 && p<=5) + { + int k; + + // execute the p different work units in different threads +# pragma omp parallel for + for (k=0;k floor_sqrt) + p = n; /* no more factors, skip to end */ + } + n /= p; + *facbuf++ = p; + *facbuf++ = n; + } while (n > 1); +} + +/* + * + * User-callable function to allocate all necessary storage space for the fft. + * + * The return value is a contiguous block of memory, allocated with malloc. As such, + * It can be freed with free(), rather than a kiss_fft-specific function. + * */ +kiss_fft_cfg kiss_fft_alloc(int nfft,int inverse_fft,void * mem,size_t * lenmem ) +{ + kiss_fft_cfg st=NULL; + size_t memneeded = sizeof(struct kiss_fft_state) + + sizeof(kiss_fft_cpx)*(nfft-1); /* twiddle factors*/ + + if ( lenmem==NULL ) { + st = ( kiss_fft_cfg)KISS_FFT_MALLOC( memneeded ); + }else{ + if (mem != NULL && *lenmem >= memneeded) + st = (kiss_fft_cfg)mem; + *lenmem = memneeded; + } + if (st) { + int i; + st->nfft=nfft; + st->inverse = inverse_fft; + + for (i=0;iinverse) + phase *= -1; + kf_cexp(st->twiddles+i, phase ); + } + + kf_factor(nfft,st->factors); + } + return st; +} + + +void kiss_fft_stride(kiss_fft_cfg st,const kiss_fft_cpx *fin,kiss_fft_cpx *fout,int in_stride) +{ + if (fin == fout) { + //NOTE: this is not really an in-place FFT algorithm. + //It just performs an out-of-place FFT into a temp buffer + kiss_fft_cpx * tmpbuf = (kiss_fft_cpx*)KISS_FFT_TMP_ALLOC( sizeof(kiss_fft_cpx)*st->nfft); + kf_work(tmpbuf,fin,1,in_stride, st->factors,st); + memcpy(fout,tmpbuf,sizeof(kiss_fft_cpx)*st->nfft); + KISS_FFT_TMP_FREE(tmpbuf); + }else{ + kf_work( fout, fin, 1,in_stride, st->factors,st ); + } +} + +void kiss_fft(kiss_fft_cfg cfg,const kiss_fft_cpx *fin,kiss_fft_cpx *fout) +{ + kiss_fft_stride(cfg,fin,fout,1); +} + + +void kiss_fft_cleanup(void) +{ + // nothing needed any more +} + +int kiss_fft_next_fast_size(int n) +{ + while(1) { + int m=n; + while ( (m%2) == 0 ) m/=2; + while ( (m%3) == 0 ) m/=3; + while ( (m%5) == 0 ) m/=5; + if (m<=1) + break; /* n is completely factorable by twos, threes, and fives */ + n++; + } + return n; +} diff --git a/libcodec2-android/src/codec2/src/kiss_fft.h b/libcodec2-android/src/codec2/src/kiss_fft.h new file mode 100644 index 0000000..c01722c --- /dev/null +++ b/libcodec2-android/src/codec2/src/kiss_fft.h @@ -0,0 +1,124 @@ +#ifndef KISS_FFT_H +#define KISS_FFT_H + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + ATTENTION! + If you would like a : + -- a utility that will handle the caching of fft objects + -- real-only (no imaginary time component ) FFT + -- a multi-dimensional FFT + -- a command-line utility to perform ffts + -- a command-line utility to perform fast-convolution filtering + + Then see kfc.h kiss_fftr.h kiss_fftnd.h fftutil.c kiss_fastfir.c + in the tools/ directory. +*/ + +#ifdef USE_SIMD +# include +# define kiss_fft_scalar __m128 +#define KISS_FFT_MALLOC(nbytes) _mm_malloc(nbytes,16) +#define KISS_FFT_FREE _mm_free +#else +#define KISS_FFT_MALLOC malloc +#define KISS_FFT_FREE free +#endif + + +#ifdef FIXED_POINT +#include +# if (FIXED_POINT == 32) +# define kiss_fft_scalar int32_t +# else +# define kiss_fft_scalar int16_t +# endif +#else +# ifndef kiss_fft_scalar +/* default is float */ +# define kiss_fft_scalar float +# endif +#endif + +typedef struct { + kiss_fft_scalar r; + kiss_fft_scalar i; +}kiss_fft_cpx; + +typedef struct kiss_fft_state* kiss_fft_cfg; + +/* + * kiss_fft_alloc + * + * Initialize a FFT (or IFFT) algorithm's cfg/state buffer. + * + * typical usage: kiss_fft_cfg mycfg=kiss_fft_alloc(1024,0,NULL,NULL); + * + * The return value from fft_alloc is a cfg buffer used internally + * by the fft routine or NULL. + * + * If lenmem is NULL, then kiss_fft_alloc will allocate a cfg buffer using malloc. + * The returned value should be free()d when done to avoid memory leaks. + * + * The state can be placed in a user supplied buffer 'mem': + * If lenmem is not NULL and mem is not NULL and *lenmem is large enough, + * then the function places the cfg in mem and the size used in *lenmem + * and returns mem. + * + * If lenmem is not NULL and ( mem is NULL or *lenmem is not large enough), + * then the function returns NULL and places the minimum cfg + * buffer size in *lenmem. + * */ + +kiss_fft_cfg kiss_fft_alloc(int nfft,int inverse_fft,void * mem,size_t * lenmem); + +/* + * kiss_fft(cfg,in_out_buf) + * + * Perform an FFT on a complex input buffer. + * for a forward FFT, + * fin should be f[0] , f[1] , ... ,f[nfft-1] + * fout will be F[0] , F[1] , ... ,F[nfft-1] + * Note that each element is complex and can be accessed like + f[k].r and f[k].i + * */ +void kiss_fft(kiss_fft_cfg cfg,const kiss_fft_cpx *fin,kiss_fft_cpx *fout); + +/* + A more generic version of the above function. It reads its input from every Nth sample. + * */ +void kiss_fft_stride(kiss_fft_cfg cfg,const kiss_fft_cpx *fin,kiss_fft_cpx *fout,int fin_stride); + +/* If kiss_fft_alloc allocated a buffer, it is one contiguous + buffer and can be simply free()d when no longer needed*/ +#define kiss_fft_free free + +/* + Cleans up some memory that gets managed internally. Not necessary to call, but it might clean up + your compiler output to call this before you exit. +*/ +void kiss_fft_cleanup(void); + + +/* + * Returns the smallest integer k, such that k>=n and k has only "fast" factors (2,3,5) + */ +int kiss_fft_next_fast_size(int n); + +/* for real ffts, we need an even size */ +#define kiss_fftr_next_fast_size_real(n) \ + (kiss_fft_next_fast_size( ((n)+1)>>1)<<1) + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/libcodec2-android/src/codec2/src/kiss_fftr.c b/libcodec2-android/src/codec2/src/kiss_fftr.c new file mode 100644 index 0000000..7cc0286 --- /dev/null +++ b/libcodec2-android/src/codec2/src/kiss_fftr.c @@ -0,0 +1,154 @@ +/* +Copyright (c) 2003-2004, Mark Borgerding + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + * Neither the author nor the names of any contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#include "kiss_fftr.h" +#include "_kiss_fft_guts.h" +#include "assert.h" + +struct kiss_fftr_state{ + kiss_fft_cfg substate; + kiss_fft_cpx * tmpbuf; + kiss_fft_cpx * super_twiddles; +#ifdef USE_SIMD + void * pad; +#endif +}; + +kiss_fftr_cfg kiss_fftr_alloc(int nfft,int inverse_fft,void * mem,size_t * lenmem) +{ + int i; + kiss_fftr_cfg st = NULL; + size_t subsize, memneeded; + + if (nfft & 1) { + fprintf(stderr,"Real FFT optimization must be even.\n"); + return NULL; + } + nfft >>= 1; + + kiss_fft_alloc (nfft, inverse_fft, NULL, &subsize); + memneeded = sizeof(struct kiss_fftr_state) + subsize + sizeof(kiss_fft_cpx) * ( nfft * 3 / 2); + + if (lenmem == NULL) { + st = (kiss_fftr_cfg) KISS_FFT_MALLOC (memneeded); + } else { + if (*lenmem >= memneeded) + st = (kiss_fftr_cfg) mem; + *lenmem = memneeded; + } + if (!st) + return NULL; + + st->substate = (kiss_fft_cfg) (st + 1); /*just beyond kiss_fftr_state struct */ + st->tmpbuf = (kiss_fft_cpx *) (((char *) st->substate) + subsize); + st->super_twiddles = st->tmpbuf + nfft; + kiss_fft_alloc(nfft, inverse_fft, st->substate, &subsize); + + for (i = 0; i < nfft/2; ++i) { + float phase = + -3.14159265358979323846264338327 * ((float) (i+1) / nfft + .5); + if (inverse_fft) + phase *= -1; + kf_cexp (st->super_twiddles+i,phase); + } + return st; +} + +void kiss_fftr(kiss_fftr_cfg st,const kiss_fft_scalar *timedata,kiss_fft_cpx *freqdata) +{ + /* input buffer timedata is stored row-wise */ + int k,ncfft; + kiss_fft_cpx fpnk,fpk,f1k,f2k,tw,tdc; + + assert(st->substate->inverse==0); + + ncfft = st->substate->nfft; + + /*perform the parallel fft of two real signals packed in real,imag*/ + kiss_fft( st->substate , (const kiss_fft_cpx*)timedata, st->tmpbuf ); + /* The real part of the DC element of the frequency spectrum in st->tmpbuf + * contains the sum of the even-numbered elements of the input time sequence + * The imag part is the sum of the odd-numbered elements + * + * The sum of tdc.r and tdc.i is the sum of the input time sequence. + * yielding DC of input time sequence + * The difference of tdc.r - tdc.i is the sum of the input (dot product) [1,-1,1,-1... + * yielding Nyquist bin of input time sequence + */ + + tdc.r = st->tmpbuf[0].r; + tdc.i = st->tmpbuf[0].i; + C_FIXDIV(tdc,2); + CHECK_OVERFLOW_OP(tdc.r ,+, tdc.i); + CHECK_OVERFLOW_OP(tdc.r ,-, tdc.i); + freqdata[0].r = tdc.r + tdc.i; + freqdata[ncfft].r = tdc.r - tdc.i; +#ifdef USE_SIMD + freqdata[ncfft].i = freqdata[0].i = _mm_set1_ps(0); +#else + freqdata[ncfft].i = freqdata[0].i = 0; +#endif + + for ( k=1;k <= ncfft/2 ; ++k ) { + fpk = st->tmpbuf[k]; + fpnk.r = st->tmpbuf[ncfft-k].r; + fpnk.i = - st->tmpbuf[ncfft-k].i; + C_FIXDIV(fpk,2); + C_FIXDIV(fpnk,2); + + C_ADD( f1k, fpk , fpnk ); + C_SUB( f2k, fpk , fpnk ); + C_MUL( tw , f2k , st->super_twiddles[k-1]); + + freqdata[k].r = HALF_OF(f1k.r + tw.r); + freqdata[k].i = HALF_OF(f1k.i + tw.i); + freqdata[ncfft-k].r = HALF_OF(f1k.r - tw.r); + freqdata[ncfft-k].i = HALF_OF(tw.i - f1k.i); + } +} + +void kiss_fftri(kiss_fftr_cfg st,const kiss_fft_cpx *freqdata,kiss_fft_scalar *timedata) +{ + /* input buffer timedata is stored row-wise */ + int k, ncfft; + + assert(st->substate->inverse == 1); + + ncfft = st->substate->nfft; + + st->tmpbuf[0].r = freqdata[0].r + freqdata[ncfft].r; + st->tmpbuf[0].i = freqdata[0].r - freqdata[ncfft].r; + C_FIXDIV(st->tmpbuf[0],2); + + for (k = 1; k <= ncfft / 2; ++k) { + kiss_fft_cpx fk, fnkc, fek, fok, tmp; + fk = freqdata[k]; + fnkc.r = freqdata[ncfft - k].r; + fnkc.i = -freqdata[ncfft - k].i; + C_FIXDIV( fk , 2 ); + C_FIXDIV( fnkc , 2 ); + + C_ADD (fek, fk, fnkc); + C_SUB (tmp, fk, fnkc); + C_MUL (fok, tmp, st->super_twiddles[k-1]); + C_ADD (st->tmpbuf[k], fek, fok); + C_SUB (st->tmpbuf[ncfft - k], fek, fok); +#ifdef USE_SIMD + st->tmpbuf[ncfft - k].i *= _mm_set1_ps(-1.0); +#else + st->tmpbuf[ncfft - k].i *= -1; +#endif + } + kiss_fft (st->substate, st->tmpbuf, (kiss_fft_cpx *) timedata); +} diff --git a/libcodec2-android/src/codec2/src/kiss_fftr.h b/libcodec2-android/src/codec2/src/kiss_fftr.h new file mode 100644 index 0000000..72e5a57 --- /dev/null +++ b/libcodec2-android/src/codec2/src/kiss_fftr.h @@ -0,0 +1,46 @@ +#ifndef KISS_FTR_H +#define KISS_FTR_H + +#include "kiss_fft.h" +#ifdef __cplusplus +extern "C" { +#endif + + +/* + + Real optimized version can save about 45% cpu time vs. complex fft of a real seq. + + + + */ + +typedef struct kiss_fftr_state *kiss_fftr_cfg; + + +kiss_fftr_cfg kiss_fftr_alloc(int nfft,int inverse_fft,void * mem, size_t * lenmem); +/* + nfft must be even + + If you don't care to allocate space, use mem = lenmem = NULL +*/ + + +void kiss_fftr(kiss_fftr_cfg cfg,const kiss_fft_scalar *timedata,kiss_fft_cpx *freqdata); +/* + input timedata has nfft scalar points + output freqdata has nfft/2+1 complex points +*/ + +void kiss_fftri(kiss_fftr_cfg cfg,const kiss_fft_cpx *freqdata,kiss_fft_scalar *timedata); +/* + input freqdata has nfft/2+1 complex points + output timedata has nfft scalar points +*/ + +#define kiss_fftr_free free + +#ifdef __cplusplus +} +#endif +#endif diff --git a/libcodec2-android/src/codec2/src/ldpc_codes.c b/libcodec2-android/src/codec2/src/ldpc_codes.c new file mode 100644 index 0000000..d123cd4 --- /dev/null +++ b/libcodec2-android/src/codec2/src/ldpc_codes.c @@ -0,0 +1,169 @@ +/* + FILE...: ldpc_codes.c + AUTHOR.: David Rowe + CREATED: July 2020 + + Array of LDPC codes used for various Codec2 waveforms. +*/ + +#include +#include +#include "assert.h" +#include "ldpc_codes.h" +#include "interldpc.h" +#include "H2064_516_sparse.h" +#include "HRA_112_112.h" +#include "HRAb_396_504.h" +#include "H_256_768_22.h" +#include "H_256_512_4.h" +#include "HRAa_1536_512.h" +#include "H_128_256_5.h" + +struct LDPC ldpc_codes[] = { + /* short rate 1/2 code for FreeDV 700D */ + { + "HRA_112_112", + HRA_112_112_MAX_ITER, + 0, + 1, + 1, + HRA_112_112_CODELENGTH, + HRA_112_112_NUMBERPARITYBITS, + HRA_112_112_NUMBERROWSHCOLS, + HRA_112_112_MAX_ROW_WEIGHT, + HRA_112_112_MAX_COL_WEIGHT, + (uint16_t *)HRA_112_112_H_rows, + (uint16_t *)HRA_112_112_H_cols +#ifdef __EMBEDDED__ + } +#else + }, + + /* default Wenet High Alitiude Balloon rate 0.8 code */ + { + "H2064_516_sparse", + MAX_ITER, + 0, + 1, + 1, + CODELENGTH, + NUMBERPARITYBITS, + NUMBERROWSHCOLS, + MAX_ROW_WEIGHT, + MAX_COL_WEIGHT, + H_rows, + H_cols + }, + + /* rate 0.8 code used for FreeDV 2020 */ + { + "HRAb_396_504", + HRAb_396_504_MAX_ITER, + 0, + 1, + 1, + HRAb_396_504_CODELENGTH, + HRAb_396_504_NUMBERPARITYBITS, + HRAb_396_504_NUMBERROWSHCOLS, + HRAb_396_504_MAX_ROW_WEIGHT, + HRAb_396_504_MAX_COL_WEIGHT, + (uint16_t *)HRAb_396_504_H_rows, + (uint16_t *)HRAb_396_504_H_cols + }, + + /* rate 1/3 code, works at raw BER of 14% */ + { + "H_256_768_22", + H_256_768_22_MAX_ITER, + 0, + 1, + 1, + H_256_768_22_CODELENGTH, + H_256_768_22_NUMBERPARITYBITS, + H_256_768_22_NUMBERROWSHCOLS, + H_256_768_22_MAX_ROW_WEIGHT, + H_256_768_22_MAX_COL_WEIGHT, + (uint16_t *)H_256_768_22_H_rows, + (uint16_t *)H_256_768_22_H_cols + }, + + /* used for 4FSK/LLR experiments */ + { + "H_256_512_4", + H_256_512_4_MAX_ITER, + 0, + 1, + 1, + H_256_512_4_CODELENGTH, + H_256_512_4_NUMBERPARITYBITS, + H_256_512_4_NUMBERROWSHCOLS, + H_256_512_4_MAX_ROW_WEIGHT, + H_256_512_4_MAX_COL_WEIGHT, + (uint16_t *)H_256_512_4_H_rows, + (uint16_t *)H_256_512_4_H_cols + }, + + /* used for 4FSK/LLR experiments */ + { + "HRAa_1536_512", + HRAa_1536_512_MAX_ITER, + 0, + 1, + 1, + HRAa_1536_512_CODELENGTH, + HRAa_1536_512_NUMBERPARITYBITS, + HRAa_1536_512_NUMBERROWSHCOLS, + HRAa_1536_512_MAX_ROW_WEIGHT, + HRAa_1536_512_MAX_COL_WEIGHT, + (uint16_t *)HRAa_1536_512_H_rows, + (uint16_t *)HRAa_1536_512_H_cols + }, + + /* used for 4FSK/LLR experiments */ + { + "H_128_256_5", + H_128_256_5_MAX_ITER, + 0, + 1, + 1, + H_128_256_5_CODELENGTH, + H_128_256_5_NUMBERPARITYBITS, + H_128_256_5_NUMBERROWSHCOLS, + H_128_256_5_MAX_ROW_WEIGHT, + H_128_256_5_MAX_COL_WEIGHT, + (uint16_t *)H_128_256_5_H_rows, + (uint16_t *)H_128_256_5_H_cols + } +#endif +}; + +int ldpc_codes_num(void) { return sizeof(ldpc_codes)/sizeof(struct LDPC); } + +void ldpc_codes_list() { + fprintf(stderr, "\n"); + for(int c=0; cCodeLength, ldpc->NumberParityBits); +} + diff --git a/libcodec2-android/src/codec2/src/ldpc_codes.h b/libcodec2-android/src/codec2/src/ldpc_codes.h new file mode 100644 index 0000000..8fc3966 --- /dev/null +++ b/libcodec2-android/src/codec2/src/ldpc_codes.h @@ -0,0 +1,27 @@ +/* + FILE...: ldpc_codes.h + AUTHOR.: David Rowe + CREATED: July 2020 + + Array of LDPC codes used for various Codec2 waveforms. +*/ + +#ifndef __LDPC_CODES__ + +#ifdef __cplusplus + extern "C" { +#endif + +#include "mpdecode_core.h" + +extern struct LDPC ldpc_codes[]; +int ldpc_codes_num(void); +void ldpc_codes_list(); +int ldpc_codes_find(char name[]); +void ldpc_codes_setup(struct LDPC *ldpc, char name[]); + +#ifdef __cplusplus + } +#endif + +#endif diff --git a/libcodec2-android/src/codec2/src/ldpc_dec.c b/libcodec2-android/src/codec2/src/ldpc_dec.c new file mode 100644 index 0000000..271b205 --- /dev/null +++ b/libcodec2-android/src/codec2/src/ldpc_dec.c @@ -0,0 +1,236 @@ +/* + FILE...: ldpc_dec.c + AUTHOR.: Matthew C. Valenti, Rohit Iyer Seshadri, David Rowe + CREATED: Sep 2016 + + Command line C LDPC decoder derived from MpDecode.c in the CML + library. Allows us to run the same decoder in Octave and C. +*/ + +#include +#include +#include +#include +#include +#include +#include + +#include "mpdecode_core.h" +#include "ldpc_codes.h" +#include "ofdm_internal.h" + +int opt_exists(char *argv[], int argc, char opt[]) { + int i; + for (i=0; i 16384; + } + for(i=data_bits_per_frame-unused_data_bits; i +#include +#include +#include +#include +#include +#include "mpdecode_core_test.h" +#include "ofdm_internal.h" + +/* Machine generated consts, H_rows, H_cols, test input/output data to + change LDPC code regenerate this file. */ + +/* TODO: Better octave/C support for multuple codes */ + +#include "H2064_516_sparse_test.h" +#include "HRA_112_112_test.h" + +int opt_exists(char *argv[], int argc, char opt[]) { + int i; + for (i=0; i 0) { + ldpc.max_iter = atoi(argv[i+1]); + fprintf(stderr, "max_iter: %d\n", ldpc.max_iter); + } + + CodeLength = ldpc.CodeLength; /* length of entire codeword */ + NumberParityBits = ldpc.NumberParityBits; + data_bits_per_frame = ldpc.NumberRowsHcols; + unsigned char ibits[data_bits_per_frame]; + unsigned char pbits[NumberParityBits]; + char out_char[CodeLength]; + + testframes = 0; + total_iters = 0; + Tbits = Terrs = Tbits_raw = Terrs_raw = 0; + + if (!strcmp(argv[1],"--test")) { + + /* test mode --------------------------------------------------------*/ + + fprintf(stderr, "Starting test using pre-compiled test data .....\n"); + fprintf(stderr, "Codeword length: %d\n", CodeLength); + fprintf(stderr, "Parity Bits....: %d\n", NumberParityBits); + + num_runs = 1; num_ok = 0; + + for(r=0; r 16384; + } + encode(&ldpc, ibits, pbits); + } + + double *input_double = calloc(CodeLength, sizeof(double)); + float *input_float = calloc(CodeLength, sizeof(float)); + + nread = CodeLength; + offset = 0; + if (readhalfframe) { + nread = CodeLength/2; + offset = CodeLength/2; + for(i=0; i +#include +#include +#include +#include + +#include "mpdecode_core.h" +#include "ldpc_codes.h" +#include "ofdm_internal.h" + +int opt_exists(char *argv[], int argc, char opt[]) { + int i; + for (i=0; i 16384; + } + for(i=data_bits_per_frame-unused_data_bits; i= Nframes)) { + goto finished; + } + } + + finished: + + fprintf(stderr, "written: %d\n", written); + fclose(fin); + fclose(fout); + + return 1; +} diff --git a/libcodec2-android/src/codec2/src/ldpc_enc_test.c b/libcodec2-android/src/codec2/src/ldpc_enc_test.c new file mode 100644 index 0000000..82c5003 --- /dev/null +++ b/libcodec2-android/src/codec2/src/ldpc_enc_test.c @@ -0,0 +1,161 @@ +/* + FILE...: ldpc_enc.c + AUTHOR.: Bill Cowley, David Rowe + CREATED: Sep 2016 + + RA LDPC encoder program. Using the elegant back substitution of RA + LDPC codes. + + building: gcc ldpc_enc.c -o ldpc_enc -Wall -g +*/ + +#include +#include +#include +#include +#include + +#include "mpdecode_core_test.h" +#include "ofdm_internal.h" + +/* generated by ldpc_fsk_lib.m:ldpc_decode() */ + +#include "H2064_516_sparse_test.h" +#include "HRA_112_112_test.h" + +int opt_exists(char *argv[], int argc, char opt[]) { + int i; + for (i=0; i 16384; + } + } + + encode(&ldpc, ibits, pbits); + + if (sd) { + /* map to BPSK symbols */ + for (i=0; i= Nframes)) { + goto finished; + } + } + + finished: + + fclose(fin); + fclose(fout); + + return 1; +} diff --git a/libcodec2-android/src/codec2/src/ldpc_noise.c b/libcodec2-android/src/codec2/src/ldpc_noise.c new file mode 100644 index 0000000..c641dac --- /dev/null +++ b/libcodec2-android/src/codec2/src/ldpc_noise.c @@ -0,0 +1,77 @@ +/* + FILE...: ldpc_enc.c + AUTHOR.: Don Reid + CREATED: Aug 2018 + + Add noise to LDPC soft decision samples for testing. Simulates use + of LDPC code with PSK modem. +*/ + +#include +#include +#include +#include +#include +#include + +int main(int argc, char *argv[]) { + FILE *fin, *fout; + float datain, dataout; + + if (argc < 3) { + fprintf(stderr, "\n"); + fprintf(stderr, "usage: %s InputFile OutputFile NodB\n", argv[0]); + fprintf(stderr, "\n"); + exit(1); + } + + if (strcmp(argv[1], "-") == 0) fin = stdin; + else if ( (fin = fopen(argv[1],"rb")) == NULL ) { + fprintf(stderr, "Error opening input bit file: %s: %s.\n", + argv[1], strerror(errno)); + exit(1); + } + + if (strcmp(argv[2], "-") == 0) fout = stdout; + else if ( (fout = fopen(argv[2],"wb")) == NULL ) { + fprintf(stderr, "Error opening output bit file: %s: %s.\n", + argv[2], strerror(errno)); + exit(1); + } + + double NodB = atof(argv[3]); + double No = pow(10.0, NodB/10.0); + double sum_xx = 0; double sum_x = 0.0; long n = 0; + + fprintf(stderr, "Uncoded PSK Eb/No simulation:\n"); + fprintf(stderr, "No = % 4.2f dB (%4.2f linear)\n", NodB, No); + fprintf(stderr, "Eb = % 4.2f dB (%4.2f linear)\n", 0.0, 1.0); + fprintf(stderr, "Eb/No = %4.2f dB (%4.2f linear)\n", -NodB, pow(10,-NodB/10.0)); + + while (fread(&datain, sizeof(float), 1, fin) == 1) { + + // Gaussian from uniform: + double x = (double)rand() / RAND_MAX; + double y = (double)rand() / RAND_MAX; + double z = sqrt(-2 * log(x)) * cos(2 * M_PI * y); + + double noise = sqrt(No/2) * z; + dataout = datain + noise; + + fwrite(&dataout, sizeof(float), 1, fout); + + // keep running stats to calculate actual noise variance (power) + + sum_xx += noise*noise; + sum_x += noise; + n++; + } + + fclose(fin); + fclose(fout); + + double noise_var = (n * sum_xx - sum_x * sum_x) / (n * (n - 1)); + fprintf(stderr, "measured double sided (real) noise power: %f\n", noise_var); + + return 0; +} diff --git a/libcodec2-android/src/codec2/src/linreg.c b/libcodec2-android/src/codec2/src/linreg.c new file mode 100644 index 0000000..f37634d --- /dev/null +++ b/libcodec2-android/src/codec2/src/linreg.c @@ -0,0 +1,106 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: linreg.c + AUTHOR......: David Rowe + DATE CREATED: April 2015 + + Linear regression C module based on: + + http://stackoverflow.com/questions/5083465/fast-efficient-least-squares-fit-algorithm-in-c + + Use: + + $ gcc linreg.c -o linreg -D__UNITTEST__ -Wall + $ ./linreg + + Then compare yfit results with octave/tlinreg.m + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2015 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include +#include + +#include "linreg.h" +#include "comp_prim.h" + + +void linreg(COMP *m, COMP *b, float x[], COMP y[], int n) +{ + float sumx = 0.0; /* sum of x */ + float sumx2 = 0.0; /* sum of x^2 */ + COMP sumxy = {0.0,0.0}; /* sum of x * y */ + COMP sumy = {0.0,0.0}; /* sum of y */ + COMP sumy2 = {0.0,0.0}; /* sum of y**2 */ + float denom; + COMP zero; + int i; + + for (i=0; i. +*/ + +#ifndef __LINREG__ +#define __LINREG__ + +#include "comp.h" + +void linreg(COMP *m, COMP *b, float x[], COMP y[], int n); + +#endif diff --git a/libcodec2-android/src/codec2/src/lpc.c b/libcodec2-android/src/codec2/src/lpc.c new file mode 100644 index 0000000..31442cd --- /dev/null +++ b/libcodec2-android/src/codec2/src/lpc.c @@ -0,0 +1,306 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: lpc.c + AUTHOR......: David Rowe + DATE CREATED: 30 Sep 1990 (!) + + Linear Prediction functions written in C. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2009-2012 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#define LPC_MAX_N 512 /* maximum no. of samples in frame */ +#define PI 3.141592654 /* mathematical constant */ + +#define ALPHA 1.0 +#define BETA 0.94 + +#include +#include +#include "defines.h" +#include "lpc.h" + +/*---------------------------------------------------------------------------*\ + + pre_emp() + + Pre-emphasise (high pass filter with zero close to 0 Hz) a frame of + speech samples. Helps reduce dynamic range of LPC spectrum, giving + greater weight and hense a better match to low energy formants. + + Should be balanced by de-emphasis of the output speech. + +\*---------------------------------------------------------------------------*/ + +void pre_emp( + float Sn_pre[], /* output frame of speech samples */ + float Sn[], /* input frame of speech samples */ + float *mem, /* Sn[-1]single sample memory */ + int Nsam /* number of speech samples to use */ +) +{ + int i; + + for(i=0; i 1.0) + k = 0.0; + + a[i][i] = k; + + for(j=1; j<=i-1; j++) + a[i][j] = a[i-1][j] + k*a[i-1][i-j]; /* Equation 38c, Makhoul */ + + e *= (1-k*k); /* Equation 38d, Makhoul */ + } + + for(i=1; i<=order; i++) + lpcs[i] = a[order][i]; + lpcs[0] = 1.0; +} + +/*---------------------------------------------------------------------------*\ + + inverse_filter() + + Inverse Filter, A(z). Produces an array of residual samples from an array + of input samples and linear prediction coefficients. + + The filter memory is stored in the first order samples of the input array. + +\*---------------------------------------------------------------------------*/ + +void inverse_filter( + float Sn[], /* Nsam input samples */ + float a[], /* LPCs for this frame of samples */ + int Nsam, /* number of samples */ + float res[], /* Nsam residual samples */ + int order /* order of LPC */ +) +{ + int i,j; /* loop variables */ + + for(i=0; i. +*/ + +#ifndef __LPC__ +#define __LPC__ + +#define LPC_MAX_ORDER 20 + +void pre_emp(float Sn_pre[], float Sn[], float *mem, int Nsam); +void de_emp(float Sn_se[], float Sn[], float *mem, int Nsam); +void hanning_window(float Sn[], float Wn[], int Nsam); +void autocorrelate(float Sn[], float Rn[], int Nsam, int order); +void levinson_durbin(float R[], float lpcs[], int order); +void inverse_filter(float Sn[], float a[], int Nsam, float res[], int order); +void synthesis_filter(float res[], float a[], int Nsam, int order, float Sn_[]); +void find_aks(float Sn[], float a[], int Nsam, int order, float *E); +void weight(float ak[], float gamma, int order, float akw[]); + +#endif diff --git a/libcodec2-android/src/codec2/src/lpcnet_freq.c b/libcodec2-android/src/codec2/src/lpcnet_freq.c new file mode 100644 index 0000000..be6dab9 --- /dev/null +++ b/libcodec2-android/src/codec2/src/lpcnet_freq.c @@ -0,0 +1,92 @@ +/* + lpcnet_freq.c + + freq.c from LPCnet project, I think this code originally came from + Opus. +*/ + +/* Copyright (c) 2017-2018 Mozilla */ +/* + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#include +#include +#include +#include +#include "comp.h" +#include "lpcnet_freq.h" + +#define SQUARE(x) ((x)*(x)) + +/* FFT bin index of centre of each band, assuming an 80 sample time + domain window (5ms at 16 kHz), which results in 40 samples in the + positive freq side of the FFT */ +static int eband5ms[] = { /*0 200 400 600 800 1k 1.2 1.4 1.6 2k 2.4 +2.8 3.2 4k 4.8 5.6 6.8 8k*/ + 0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 14, 16, 20, 24, 28, 34, 40 +}; + +/* bandE[i] is the sum of energy in a triangular window centred on + eband5ms[i], with adjustments for first and last band */ +int lpcnet_compute_band_energy(float *bandE, COMP *X, float Fs, int Nfft) { + float sum[LPCNET_FREQ_MAX_BANDS] = {0}; + int nb_bands; + float scale; + + assert((Fs == 8000) || (Fs == 16000)); + if (Fs == 8000) + nb_bands = 14; + else + nb_bands = 18; + + /* map eband5ms[] bins to our FFT size and Fs */ + scale = ((float)Nfft/2)/eband5ms[nb_bands-1]; + + /* sum energy from either side of band centre */ + for (int i=0;i. +*/ + +#include "defines.h" +#include "lsp.h" +#include +#include +#include + +/*---------------------------------------------------------------------------*\ + + Introduction to Line Spectrum Pairs (LSPs) + ------------------------------------------ + + LSPs are used to encode the LPC filter coefficients {ak} for + transmission over the channel. LSPs have several properties (like + less sensitivity to quantisation noise) that make them superior to + direct quantisation of {ak}. + + A(z) is a polynomial of order lpcrdr with {ak} as the coefficients. + + A(z) is transformed to P(z) and Q(z) (using a substitution and some + algebra), to obtain something like: + + A(z) = 0.5[P(z)(z+z^-1) + Q(z)(z-z^-1)] (1) + + As you can imagine A(z) has complex zeros all over the z-plane. P(z) + and Q(z) have the very neat property of only having zeros _on_ the + unit circle. So to find them we take a test point z=exp(jw) and + evaluate P (exp(jw)) and Q(exp(jw)) using a grid of points between 0 + and pi. + + The zeros (roots) of P(z) also happen to alternate, which is why we + swap coefficients as we find roots. So the process of finding the + LSP frequencies is basically finding the roots of 5th order + polynomials. + + The root so P(z) and Q(z) occur in symmetrical pairs at +/-w, hence + the name Line Spectrum Pairs (LSPs). + + To convert back to ak we just evaluate (1), "clocking" an impulse + thru it lpcrdr times gives us the impulse response of A(z) which is + {ak}. + +\*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: cheb_poly_eva() + AUTHOR......: David Rowe + DATE CREATED: 24/2/93 + + This function evalutes a series of chebyshev polynomials + + FIXME: performing memory allocation at run time is very inefficient, + replace with stack variables of MAX_P size. + +\*---------------------------------------------------------------------------*/ + + +static float +cheb_poly_eva(float *coef,float x,int order) +/* float coef[] coefficients of the polynomial to be evaluated */ +/* float x the point where polynomial is to be evaluated */ +/* int order order of the polynomial */ +{ + int i; + float *t,*u,*v,sum; + float T[(order / 2) + 1]; + + /* Initialise pointers */ + + t = T; /* T[i-2] */ + *t++ = 1.0; + u = t--; /* T[i-1] */ + *u++ = x; + v = u--; /* T[i] */ + + /* Evaluate chebyshev series formulation using iterative approach */ + + for(i=2;i<=order/2;i++) + *v++ = (2*x)*(*u++) - *t++; /* T[i] = 2*x*T[i-1] - T[i-2] */ + + sum=0.0; /* initialise sum to zero */ + t = T; /* reset pointer */ + + /* Evaluate polynomial and return value also free memory space */ + + for(i=0;i<=order/2;i++) + sum+=coef[(order/2)-i]**t++; + + return sum; +} + + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: lpc_to_lsp() + AUTHOR......: David Rowe + DATE CREATED: 24/2/93 + + This function converts LPC coefficients to LSP coefficients. + +\*---------------------------------------------------------------------------*/ + +int lpc_to_lsp (float *a, int order, float *freq, int nb, float delta) +/* float *a lpc coefficients */ +/* int order order of LPC coefficients (10) */ +/* float *freq LSP frequencies in radians */ +/* int nb number of sub-intervals (4) */ +/* float delta grid spacing interval (0.02) */ +{ + float psuml,psumr,psumm,temp_xr,xl,xr,xm = 0; + float temp_psumr; + int i,j,m,flag,k; + float *px; /* ptrs of respective P'(z) & Q'(z) */ + float *qx; + float *p; + float *q; + float *pt; /* ptr used for cheb_poly_eval() + whether P' or Q' */ + int roots=0; /* number of roots found */ + float Q[order + 1]; + float P[order + 1]; + + flag = 1; + m = order/2; /* order of P'(z) & Q'(z) polynimials */ + + /* Allocate memory space for polynomials */ + + /* determine P'(z)'s and Q'(z)'s coefficients where + P'(z) = P(z)/(1 + z^(-1)) and Q'(z) = Q(z)/(1-z^(-1)) */ + + px = P; /* initilaise ptrs */ + qx = Q; + p = px; + q = qx; + *px++ = 1.0; + *qx++ = 1.0; + for(i=1;i<=m;i++){ + *px++ = a[i]+a[order+1-i]-*p++; + *qx++ = a[i]-a[order+1-i]+*q++; + } + px = P; + qx = Q; + for(i=0;i= -1.0)){ + xr = xl - delta ; /* interval spacing */ + psumr = cheb_poly_eva(pt,xr,order);/* poly(xl-delta_x) */ + temp_psumr = psumr; + temp_xr = xr; + + /* if no sign change increment xr and re-evaluate + poly(xr). Repeat til sign change. if a sign change has + occurred the interval is bisected and then checked again + for a sign change which determines in which interval the + zero lies in. If there is no sign change between poly(xm) + and poly(xl) set interval between xm and xr else set + interval between xl and xr and repeat till root is located + within the specified limits */ + + if(((psumr*psuml)<0.0) || (psumr == 0.0)){ + roots++; + + psumm=psuml; + for(k=0;k<=nb;k++){ + xm = (xl+xr)/2; /* bisect the interval */ + psumm=cheb_poly_eva(pt,xm,order); + if(psumm*psuml>0.){ + psuml=psumm; + xl=xm; + } + else{ + psumr=psumm; + xr=xm; + } + } + + /* once zero is found, reset initial interval to xr */ + freq[j] = (xm); + xl = xm; + flag = 0; /* reset flag for next search */ + } + else{ + psuml=temp_psumr; + xl=temp_xr; + } + } + } + + /* convert from x domain to radians */ + + for(i=0; i. +*/ + +#ifndef __LSP__ +#define __LSP__ + +int lpc_to_lsp (float *a, int lpcrdr, float *freq, int nb, float delta); +void lsp_to_lpc(float *freq, float *ak, int lpcrdr); + +#endif diff --git a/libcodec2-android/src/codec2/src/machdep.h b/libcodec2-android/src/codec2/src/machdep.h new file mode 100644 index 0000000..4dff9ba --- /dev/null +++ b/libcodec2-android/src/codec2/src/machdep.h @@ -0,0 +1,52 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: machdep.h + AUTHOR......: David Rowe + DATE CREATED: May 2 2013 + + Machine dependant functions, e.g. profiling that requires access to a clock + counter register. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2013 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#ifndef __MACHDEP__ +#define __MACHDEP__ + +#ifdef PROFILE +#define PROFILE_VAR(...) unsigned int __VA_ARGS__ +#define PROFILE_SAMPLE(timestamp) timestamp = machdep_profile_sample() +#define PROFILE_SAMPLE_AND_LOG(timestamp, prev_timestamp, label) \ + timestamp = machdep_profile_sample_and_log(prev_timestamp, label) +#define PROFILE_SAMPLE_AND_LOG2(prev_timestamp, label) \ + machdep_profile_sample_and_log(prev_timestamp, label) +#else +#define PROFILE_VAR(...) +#define PROFILE_SAMPLE(timestamp) +#define PROFILE_SAMPLE_AND_LOG(timestamp, prev_timestamp, label) +#define PROFILE_SAMPLE_AND_LOG2(prev_timestamp, label) +#endif + +void machdep_profile_init(void); +void machdep_profile_reset(void); +unsigned int machdep_profile_sample(void); +unsigned int machdep_profile_sample_and_log(unsigned int start, char s[]); +void machdep_profile_print_logged_samples(void); + +#endif diff --git a/libcodec2-android/src/codec2/src/mbest.c b/libcodec2-android/src/codec2/src/mbest.c new file mode 100644 index 0000000..022daf9 --- /dev/null +++ b/libcodec2-android/src/codec2/src/mbest.c @@ -0,0 +1,171 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: mbest.c + AUTHOR......: David Rowe + DATE CREATED: Jan 2017 + + Multistage vector quantiser search algorithm that keeps multiple + candidates from each stage. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright David Rowe 2017 + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . + +*/ + +#include +#include +#include +#include +#include + +#include "mbest.h" + +struct MBEST *mbest_create(int entries) { + int i,j; + struct MBEST *mbest; + + assert(entries > 0); + mbest = (struct MBEST *)malloc(sizeof(struct MBEST)); + assert(mbest != NULL); + + mbest->entries = entries; + mbest->list = (struct MBEST_LIST *)malloc(entries*sizeof(struct MBEST_LIST)); + assert(mbest->list != NULL); + + for(i=0; ientries; i++) { + for(j=0; jlist[i].index[j] = 0; + mbest->list[i].error = 1E32; + } + + return mbest; +} + + +void mbest_destroy(struct MBEST *mbest) { + assert(mbest != NULL); + free(mbest->list); + free(mbest); +} + + +/*---------------------------------------------------------------------------*\ + + mbest_insert + + Insert the results of a vector to codebook entry comparison. The + list is ordered in order of error, so those entries with the + smallest error will be first on the list. + +\*---------------------------------------------------------------------------*/ + +void mbest_insert(struct MBEST *mbest, int index[], float error) { + int i, j, found; + struct MBEST_LIST *list = mbest->list; + int entries = mbest->entries; + + found = 0; + for(i=0; ii; j--) + list[j] = list[j-1]; + for(j=0; jentries; i++) { + for(j=0; jlist[i].index[j]); + fprintf(stderr, " %f\n", mbest->list[i].error); + } +} + + +/*---------------------------------------------------------------------------*\ + + mbest_search + + Searches vec[] to a codebbook of vectors, and maintains a list of the mbest + closest matches. + +\*---------------------------------------------------------------------------*/ + +void mbest_search( + const float *cb, /* VQ codebook to search */ + float vec[], /* target vector */ + float w[], /* weighting vector */ + int k, /* dimension of vector */ + int m, /* number on entries in codebook */ + struct MBEST *mbest, /* list of closest matches */ + int index[] /* indexes that lead us here */ +) +{ + float e; + int i,j; + float diff; + + for(j=0; j. + +*/ + +#ifndef __MBEST__ +#define __MBEST__ + +#define MBEST_STAGES 4 + +struct MBEST_LIST { + int index[MBEST_STAGES]; /* index of each stage that lead us to this error */ + float error; +}; + +struct MBEST { + int entries; /* number of entries in mbest list */ + struct MBEST_LIST *list; +}; + +struct MBEST *mbest_create(int entries); +void mbest_destroy(struct MBEST *mbest); +void mbest_insert(struct MBEST *mbest, int index[], float error); +void mbest_search(const float *cb, float vec[], float w[], int k, int m, struct MBEST *mbest, int index[]); +void mbest_search450(const float *cb, float vec[], float w[], int k,int shorterK, int m, struct MBEST *mbest, int index[]); + +void mbest_print(char title[], struct MBEST *mbest); + +#endif diff --git a/libcodec2-android/src/codec2/src/modem_probe.c b/libcodec2-android/src/codec2/src/modem_probe.c new file mode 100644 index 0000000..b4a6165 --- /dev/null +++ b/libcodec2-android/src/codec2/src/modem_probe.c @@ -0,0 +1,241 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: modem_probe.c + AUTHOR......: Brady O'Brien + DATE CREATED: 9 January 2016 + + Library to easily extract debug traces from modems during development and + verification + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2016 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include +#include +#include +#include "comp.h" +#include "octave.h" + +#define TRACE_I 1 +#define TRACE_F 2 +#define TRACE_C 3 + + +typedef struct probe_trace_info_s probe_trace_info; +typedef struct datlink_s datlink; + +struct datlink_s{ + void * data; + size_t len; + datlink * next; +}; + +struct probe_trace_info_s{ + int type; + char name[255]; + datlink * data; + datlink * last; + probe_trace_info *next; +}; + +static char *run = NULL; +static char *mod = NULL; +static probe_trace_info *first_trace = NULL; + +/* Init the probing library */ +void modem_probe_init_int(char *modname, char *runname){ + mod = malloc((strlen(modname)+1)*sizeof(char)); + run = malloc((strlen(runname)+1)*sizeof(char)); + strcpy(run,runname); + strcpy(mod,modname); +} + +/* + * Gather the data stored in the linked list into a single blob, + * freeing links and buffers as it goes + */ +void * gather_data(datlink * d,size_t * len){ + size_t size = 0; + datlink * cur = d; + datlink * next; + while(cur!=NULL){ + size += d->len; + cur = cur->next; + } + cur = d; + size_t i = 0; + void * newbuf = malloc(size); + + while(cur!=NULL){ + memcpy(newbuf+i,cur->data,cur->len); + i += cur->len; + free(cur->data); + next = cur->next; + free(cur); + cur = next; + } + *len = size; + return newbuf; +} + +/* Dump all of the traces into a nice octave-able dump file */ +void modem_probe_close_int(){ + if(run==NULL) + return; + + probe_trace_info *cur,*next; + cur = first_trace; + FILE * dumpfile = fopen(run,"w"); + void * dbuf; + size_t len; + + while(cur != NULL){ + dbuf = gather_data(cur->data,&len); + switch(cur->type){ + case TRACE_I: + octave_save_int(dumpfile,cur->name,(int32_t*)dbuf,1,len/sizeof(int32_t)); + break; + case TRACE_F: + octave_save_float(dumpfile,cur->name,(float*)dbuf,1,len/sizeof(float),10); + break; + case TRACE_C: + octave_save_complex(dumpfile,cur->name,(COMP*)dbuf,1,len/sizeof(COMP),10); + break; + } + next = cur->next; + free(cur); + free(dbuf); + cur = next; + } + + fclose(dumpfile); + free(run); + free(mod); +} + +/* Look up or create a trace by name */ +probe_trace_info * modem_probe_get_trace(char * tracename){ + probe_trace_info *cur,*npti; + + /* Make sure probe session is open */ + if(run==NULL) + return NULL; + + cur = first_trace; + /* Walk through list, find trace with matching name */ + while(cur != NULL){ + /* We got one! */ + if(strcmp( cur->name, tracename) == 0){ + return cur; + } + cur = cur->next; + } + /* None found, open a new trace */ + + npti = (probe_trace_info *) malloc(sizeof(probe_trace_info)); + npti->next = first_trace; + npti->data = NULL; + npti->last = NULL; + strcpy(npti->name,tracename); + first_trace = npti; + + return npti; + +} + + +void modem_probe_samp_i_int(char * tracename,int32_t samp[],size_t cnt){ + probe_trace_info *pti; + datlink *ndat; + + pti = modem_probe_get_trace(tracename); + if(pti == NULL) + return; + + pti->type = TRACE_I; + + ndat = (datlink*) malloc(sizeof(datlink)); + ndat->data = malloc(sizeof(int32_t)*cnt); + + ndat->len = cnt*sizeof(int32_t); + ndat->next = NULL; + memcpy(ndat->data,(void*)&(samp[0]),sizeof(int32_t)*cnt); + + if(pti->last!=NULL){ + pti->last->next = ndat; + pti->last = ndat; + } else { + pti->data = ndat; + pti->last = ndat; + } + +} + +void modem_probe_samp_f_int(char * tracename,float samp[],size_t cnt){ + probe_trace_info *pti; + datlink *ndat; + + pti = modem_probe_get_trace(tracename); + if(pti == NULL) + return; + + pti->type = TRACE_F; + + ndat = (datlink*) malloc(sizeof(datlink)); + ndat->data = malloc(sizeof(float)*cnt); + + ndat->len = cnt*sizeof(float); + ndat->next = NULL; + memcpy(ndat->data,(void*)&(samp[0]),sizeof(float)*cnt); + + if(pti->last!=NULL){ + pti->last->next = ndat; + pti->last = ndat; + } else { + pti->data = ndat; + pti->last = ndat; + } +} + +void modem_probe_samp_c_int(char * tracename,COMP samp[],size_t cnt){ + probe_trace_info *pti; + datlink *ndat; + + pti = modem_probe_get_trace(tracename); + if(pti == NULL) + return; + + pti->type = TRACE_C; + + ndat = (datlink*) malloc(sizeof(datlink)); + ndat->data = malloc(sizeof(COMP)*cnt); + + ndat->len = cnt*sizeof(COMP); + ndat->next = NULL; + memcpy(ndat->data,(void*)&(samp[0]),sizeof(COMP)*cnt); + + if(pti->last!=NULL){ + pti->last->next = ndat; + pti->last = ndat; + } else { + pti->data = ndat; + pti->last = ndat; + } +} diff --git a/libcodec2-android/src/codec2/src/modem_probe.h b/libcodec2-android/src/codec2/src/modem_probe.h new file mode 100644 index 0000000..e038603 --- /dev/null +++ b/libcodec2-android/src/codec2/src/modem_probe.h @@ -0,0 +1,130 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: modem_probe.h + AUTHOR......: Brady O'Brien + DATE CREATED: 9 January 2016 + + Library to easily extract debug traces from modems during development + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2016 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#ifndef __MODEMPROBE_H +#define __MODEMPROBE_H + +#include +#include +#include +#include "comp.h" + +#ifdef MODEMPROBE_ENABLE + +/* Internal functions */ +void modem_probe_init_int(char *modname, char *runname); +void modem_probe_close_int(); + +void modem_probe_samp_i_int(char * tracename,int samp[],size_t cnt); +void modem_probe_samp_f_int(char * tracename,float samp[],size_t cnt); +void modem_probe_samp_c_int(char * tracename,COMP samp[],size_t cnt); + +/* + * Init the probe library. + * char *modname - Name of the modem under test + * char *runname - Name/path of the file data is dumped to + */ +static inline void modem_probe_init(char *modname,char *runname){ + modem_probe_init_int(modname,runname); +} + +/* + * Dump traces to a file and clean up + */ +static inline void modem_probe_close(){ + modem_probe_close_int(); +} + +/* + * Save some number of int samples to a named trace + * char *tracename - name of trace being saved to + * int samp[] - int samples + * size_t cnt - how many samples to save + */ +static inline void modem_probe_samp_i(char *tracename,int samp[],size_t cnt){ + modem_probe_samp_i_int(tracename,samp,cnt); +} + +/* + * Save some number of float samples to a named trace + * char *tracename - name of trace being saved to + * float samp[] - int samples + * size_t cnt - how many samples to save + */ +static inline void modem_probe_samp_f(char *tracename,float samp[],size_t cnt){ + modem_probe_samp_f_int(tracename,samp,cnt); +} + +/* + * Save some number of complex samples to a named trace + * char *tracename - name of trace being saved to + * COMP samp[] - int samples + * size_t cnt - how many samples to save + */ +static inline void modem_probe_samp_c(char *tracename,COMP samp[],size_t cnt){ + modem_probe_samp_c_int(tracename,samp,cnt); +} + +/* + * Save some number of complex samples to a named trace + * char *tracename - name of trace being saved to + * float complex samp[] - int samples + * size_t cnt - how many samples to save + */ +static inline void modem_probe_samp_cft(char *tracename,complex float samp[],size_t cnt){ + modem_probe_samp_c_int(tracename,(COMP*)samp,cnt); +} + +#else + +static inline void modem_probe_init(char *modname,char *runname){ + return; +} + +static inline void modem_probe_close(){ + return; +} + +static inline void modem_probe_samp_i(char *name,int samp[],size_t sampcnt){ + return; +} + +static inline void modem_probe_samp_f(char *name,float samp[],size_t cnt){ + return; +} + +static inline void modem_probe_samp_c(char *name,COMP samp[],size_t cnt){ + return; +} + +static inline void modem_probe_samp_cft(char *name,complex float samp[],size_t cnt){ + return; +} + +#endif + +#endif diff --git a/libcodec2-android/src/codec2/src/modem_stats.c b/libcodec2-android/src/codec2/src/modem_stats.c new file mode 100644 index 0000000..d212e2b --- /dev/null +++ b/libcodec2-android/src/codec2/src/modem_stats.c @@ -0,0 +1,123 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: modem_stats.c + AUTHOR......: David Rowe + DATE CREATED: June 2015 + + Common functions for returning demod stats from fdmdv and cohpsk modems. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2015 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include +#include "modem_stats.h" +#include "codec2_fdmdv.h" + +void modem_stats_open(struct MODEM_STATS *f) +{ + int i; + + /* zero out all the stats */ + + memset(f, 0, sizeof(struct MODEM_STATS)); + + /* init the FFT */ + +#ifndef __EMBEDDED__ + for(i=0; i<2*MODEM_STATS_NSPEC; i++) + f->fft_buf[i] = 0.0; + f->fft_cfg = kiss_fft_alloc (2*MODEM_STATS_NSPEC, 0, NULL, NULL); + assert(f->fft_cfg != NULL); +#endif +} + +void modem_stats_close(struct MODEM_STATS *f) +{ +#ifndef __EMBEDDED__ + KISS_FFT_FREE(f->fft_cfg); +#endif +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: modem_stats_get_rx_spectrum() + AUTHOR......: David Rowe + DATE CREATED: 9 June 2012 + + Returns the MODEM_STATS_NSPEC point magnitude spectrum of the rx signal in + dB. The spectral samples are scaled so that 0dB is the peak, a good + range for plotting is 0 to -40dB. + + Note only the real part of the complex input signal is used at + present. A complex variable is used for input for compatability + with the other rx signal procesing. + + Successive calls can be used to build up a waterfall or spectrogram + plot, by mapping the received levels to colours. + + The time-frequency resolution of the spectrum can be adjusted by varying + MODEM_STATS_NSPEC. Note that a 2* MODEM_STATS_NSPEC size FFT is reqd to get + MODEM_STATS_NSPEC output points. MODEM_STATS_NSPEC must be a power of 2. + + See octave/tget_spec.m for a demo real time spectral display using + Octave. This demo averages the output over time to get a smoother + display: + + av = 0.9*av + 0.1*mag_dB + +\*---------------------------------------------------------------------------*/ + +#ifndef __EMBEDDED__ +void modem_stats_get_rx_spectrum(struct MODEM_STATS *f, float mag_spec_dB[], COMP rx_fdm[], int nin) +{ + int i,j; + COMP fft_in[2*MODEM_STATS_NSPEC]; + COMP fft_out[2*MODEM_STATS_NSPEC]; + float full_scale_dB; + + /* update buffer of input samples */ + + for(i=0; i<2*MODEM_STATS_NSPEC-nin; i++) + f->fft_buf[i] = f->fft_buf[i+nin]; + for(j=0; jfft_buf[i] = rx_fdm[j].real; + assert(i == 2*MODEM_STATS_NSPEC); + + /* window and FFT */ + + for(i=0; i<2*MODEM_STATS_NSPEC; i++) { + fft_in[i].real = f->fft_buf[i] * (0.5 - 0.5*cosf((float)i*2.0*M_PI/(2*MODEM_STATS_NSPEC))); + fft_in[i].imag = 0.0; + } + + kiss_fft(f->fft_cfg, (kiss_fft_cpx *)fft_in, (kiss_fft_cpx *)fft_out); + + /* FFT scales up a signal of level 1 FDMDV_NSPEC */ + + full_scale_dB = 20*log10(MODEM_STATS_NSPEC*FDMDV_SCALE); + + /* scale and convert to dB */ + + for(i=0; i. +*/ + +#ifndef __MODEM_STATS__ +#define __MODEM_STATS__ + +#include "comp.h" +#include "kiss_fft.h" + +#ifdef __cplusplus + extern "C" { +#endif + +#define MODEM_STATS_NC_MAX 50 +#define MODEM_STATS_NR_MAX 8 +#define MODEM_STATS_ET_MAX 8 +#define MODEM_STATS_EYE_IND_MAX 160 +#define MODEM_STATS_NSPEC 512 +#define MODEM_STATS_MAX_F_HZ 4000 +#define MODEM_STATS_MAX_F_EST 4 + +struct MODEM_STATS { + int Nc; + float snr_est; /* estimated SNR of rx signal in dB (3 kHz noise BW) */ +#ifndef __EMBEDDED__ + COMP rx_symbols[MODEM_STATS_NR_MAX][MODEM_STATS_NC_MAX+1]; + /* latest received symbols, for scatter plot */ +#endif + int nr; /* number of rows in rx_symbols */ + int sync; /* demod sync state */ + float foff; /* estimated freq offset in Hz */ + float rx_timing; /* estimated optimum timing offset in samples */ + float clock_offset; /* Estimated tx/rx sample clock offset in ppm */ + float sync_metric; /* number between 0 and 1 indicating quality of sync */ + + /* eye diagram traces */ + /* Eye diagram plot -- first dim is trace number, second is the trace idx */ +#ifndef __EMBEDDED__ + float rx_eye[MODEM_STATS_ET_MAX][MODEM_STATS_EYE_IND_MAX]; + int neyetr; /* How many eye traces are plotted */ + int neyesamp; /* How many samples in the eye diagram */ + + /* optional for FSK modems - est tone freqs */ + + float f_est[MODEM_STATS_MAX_F_EST]; +#endif + + /* Buf for FFT/waterfall */ + +#ifndef __EMBEDDED__ + float fft_buf[2*MODEM_STATS_NSPEC]; + kiss_fft_cfg fft_cfg; +#endif +}; + +void modem_stats_open(struct MODEM_STATS *f); +void modem_stats_close(struct MODEM_STATS *f); +void modem_stats_get_rx_spectrum(struct MODEM_STATS *f, float mag_spec_dB[], COMP rx_fdm[], int nin); + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/libcodec2-android/src/codec2/src/mpdecode_core.c b/libcodec2-android/src/codec2/src/mpdecode_core.c new file mode 100644 index 0000000..6a74f89 --- /dev/null +++ b/libcodec2-android/src/codec2/src/mpdecode_core.c @@ -0,0 +1,790 @@ +/* + FILE...: mpdecode_core.c + AUTHOR.: Matthew C. Valenti, Rohit Iyer Seshadri, David Rowe + CREATED: Sep 2016 + + C-callable core functions moved from MpDecode.c, so they can be used for + Octave and C programs. +*/ + +#include +#include +#include +#include +#include +#include "mpdecode_core.h" +#ifndef USE_ORIGINAL_PHI0 +#include "phi0.h" +#endif + +#include "debug_alloc.h" + +#ifdef __EMBEDDED__ +#include "machdep.h" +#endif + +#define QPSK_CONSTELLATION_SIZE 4 +#define QPSK_BITS_PER_SYMBOL 2 + + +/* QPSK constellation for symbol likelihood calculations */ + +static COMP S_matrix[] = { + { 1.0f, 0.0f}, + { 0.0f, 1.0f}, + { 0.0f, -1.0f}, + {-1.0f, 0.0f} +}; + +// c_nodes will be an array of NumberParityBits of struct c_node +// Each c_node contains an array of c_sub_node elements +// This structure reduces the indexing caluclations in SumProduct() + +struct c_sub_node { // Order is important here to keep total size small. + uint16_t index; // Values from H_rows (except last 2 entries) + uint16_t socket; // The socket number at the v_node + float message; // modified during operation! +}; + +struct c_node { + int degree; // A count of elements in the following arrays + struct c_sub_node *subs; +}; + +// v_nodes will be an array of CodeLength of struct v_node + +struct v_sub_node { + uint16_t index; // the index of a c_node it is connected to + // Filled with values from H_cols (except last 2 entries) + uint16_t socket; // socket number at the c_node + float message; // Loaded with input data + // modified during operation! + uint8_t sign; // 1 if input is negative + // modified during operation! +}; + +struct v_node { + int degree; // A count of ??? + float initial_value; + struct v_sub_node *subs; +}; + +void encode(struct LDPC *ldpc, unsigned char ibits[], unsigned char pbits[]) { + unsigned int p, i, tmp, par, prev=0; + int ind; + uint16_t *H_rows = ldpc->H_rows; + + for (p=0; pNumberParityBits; p++) { + par = 0; + + for (i=0; imax_row_weight; i++) { + ind = H_rows[p + i*ldpc->NumberParityBits]; + par = par + ibits[ind-1]; + } + + tmp = par + prev; + + tmp &= 1; // only retain the lsb + prev = tmp; + pbits[p] = tmp; + } +} + +#ifdef USE_ORIGINAL_PHI0 +/* Phi function */ +static float phi0( + float x ) +{ + float z; + + if (x>10) + return( 0 ); + else if (x< 9.08e-5 ) + return( 10 ); + else if (x > 9) + return( 1.6881e-4 ); + /* return( 1.4970e-004 ); */ + else if (x > 8) + return( 4.5887e-4 ); + /* return( 4.0694e-004 ); */ + else if (x > 7) + return( 1.2473e-3 ); + /* return( 1.1062e-003 ); */ + else if (x > 6) + return( 3.3906e-3 ); + /* return( 3.0069e-003 ); */ + else if (x > 5) + return( 9.2168e-3 ); + /* return( 8.1736e-003 ); */ + else { + z = (float) exp(x); + return( (float) log( (z+1)/(z-1) ) ); + } +} +#endif + + +/* Values for linear approximation (DecoderType=5) */ + +#define AJIAN -0.24904163195436 +#define TJIAN 2.50681740420944 + +/* The linear-log-MAP algorithm */ + +static float max_star0( + float delta1, + float delta2 ) +{ + register float diff; + + diff = delta2 - delta1; + + if ( diff > TJIAN ) + return( delta2 ); + else if ( diff < -TJIAN ) + return( delta1 ); + else if ( diff > 0 ) + return( delta2 + AJIAN*(diff-TJIAN) ); + else + return( delta1 - AJIAN*(diff+TJIAN) ); +} + +void init_c_v_nodes(struct c_node *c_nodes, + int shift, + int NumberParityBits, + int max_row_weight, + uint16_t *H_rows, + int H1, + int CodeLength, + struct v_node *v_nodes, + int NumberRowsHcols, + uint16_t *H_cols, + int max_col_weight, + int dec_type, + float *input) +{ + int i, j, k, count, cnt, c_index, v_index; + + /* first determine the degree of each c-node */ + + if (shift ==0){ + for (i=0;i 0 ) { + count++; + } + } + c_nodes[i].degree = count; + if (H1){ + if (i==0){ + c_nodes[i].degree=count+1; + } + else{ + c_nodes[i].degree=count+2; + } + } + } + } + else{ + cnt=0; + for (i=0;i<(NumberParityBits/shift);i++) { + for (k=0;k 0 ) { + count++; + } + } + c_nodes[cnt].degree = count; + if ((i==0)||(i==(NumberParityBits/shift)-1)){ + c_nodes[cnt].degree=count+1; + } + else{ + c_nodes[cnt].degree=count+2; + } + cnt++; + } + } + } + + if (H1){ + + if (shift ==0){ + for (i=0;i0){ + cnt=0; + for (i=0;i<(NumberParityBits/shift);i++){ + + for (k =0;k 0 ) { + count++; + } + } + v_nodes[i].degree = count; + } + + for(i=CodeLength-NumberParityBits+shift;i 0 ) { + count++; + } + } + v_nodes[i].degree = count; + } + } + + if (shift>0){ + v_nodes[CodeLength-1].degree =v_nodes[CodeLength-1].degree+1; + } + + + /* set up v_nodes */ + + for (i=0;i=CodeLength-NumberParityBits+shift)){ + v_nodes[i].subs[j].index=i-(CodeLength-NumberParityBits+shift)+count; + if (shift ==0){ + count=count+1; + } + else{ + count=count+shift; + } + } else { + v_nodes[i].subs[j].index = (H_cols[i+j*NumberRowsHcols] - 1); + } + + /* search the connected c-node for the proper message value */ + for (c_index=0;c_indexindex ].subs[ cp->socket ]; + phi_sum += vp->message; + sign ^= vp->sign; + } + + if (sign==0) ssum++; + + for (i=0;iindex ].subs[ cp->socket ]; + if ( sign ^ vp->sign ) { + cp->message = -phi0( phi_sum - vp->message ); // *r_scale_factor; + } else + cp->message = phi0( phi_sum - vp->message ); // *r_scale_factor; + } + } + + /* update q */ + for (i=0;iindex ].subs[ vp->socket ].message; + } + + /* make hard decision */ + if (Qi < 0) { + DecodedBits[i] = 1; + } + + /* now subtract to get the extrinsic information */ + for (j=0;jindex ].subs[ vp->socket ].message; + + vp->message = phi0( fabs( temp_sum ) ); // *q_scale_factor; + if (temp_sum > 0) + vp->sign = 0; + else + vp->sign = 1; + } + } + + /* count data bit errors, assuming that it is systematic */ + for (i=0;imax_iter; + dec_type = ldpc->dec_type; + q_scale_factor = ldpc->q_scale_factor; + r_scale_factor = ldpc->r_scale_factor; + + CodeLength = ldpc->CodeLength; /* length of entire codeword */ + NumberParityBits = ldpc->NumberParityBits; + NumberRowsHcols = ldpc->NumberRowsHcols; + + char *DecodedBits = CALLOC( CodeLength, sizeof( char ) ); + assert(DecodedBits); + + /* derive some parameters */ + + shift = (NumberParityBits + NumberRowsHcols) - CodeLength; + if (NumberRowsHcols == CodeLength) { + H1=0; + shift=0; + } else { + H1=1; + } + + max_row_weight = ldpc->max_row_weight; + max_col_weight = ldpc->max_col_weight; + + /* initialize c-node and v-node structures */ + + c_nodes = CALLOC( NumberParityBits, sizeof( struct c_node ) ); + assert(c_nodes); + v_nodes = CALLOC( CodeLength, sizeof( struct v_node)); + assert(v_nodes); + + init_c_v_nodes(c_nodes, shift, NumberParityBits, max_row_weight, ldpc->H_rows, H1, CodeLength, + v_nodes, NumberRowsHcols, ldpc->H_cols, max_col_weight, dec_type, input); + + int DataLength = CodeLength - NumberParityBits; + int *data_int = CALLOC( DataLength, sizeof(int) ); + + /* need to clear these on each call */ + + for(i=0; i 0.0L) - (sd[i] < 0.0L); + x = (sd[i]/mean - sign); + sum += x; + sumsq += x*x; + } + estvar = (n * sumsq - sum * sum) / (n * (n - 1)); + //fprintf(stderr, "mean: %f var: %f\n", mean, estvar); + + estEsN0 = 1.0/(2.0L * estvar + 1E-3); + for(i=0; i> 1; + } + mask = 1 << (bps - 1); + + for (k=0;k> 1; + } + } + for (k=0;kmax_iter = %d\n", ldpc->max_iter); + fprintf(stderr, "ldpc->dec_type = %d\n", ldpc->dec_type); + fprintf(stderr, "ldpc->q_scale_factor = %d\n", ldpc->q_scale_factor); + fprintf(stderr, "ldpc->r_scale_factor = %d\n", ldpc->r_scale_factor); + fprintf(stderr, "ldpc->CodeLength = %d\n", ldpc->CodeLength); + fprintf(stderr, "ldpc->NumberParityBits = %d\n", ldpc->NumberParityBits); + fprintf(stderr, "ldpc->NumberRowsHcols = %d\n", ldpc->NumberRowsHcols); + fprintf(stderr, "ldpc->max_row_weight = %d\n", ldpc->max_row_weight); + fprintf(stderr, "ldpc->max_col_weight = %d\n", ldpc->max_col_weight); + fprintf(stderr, "ldpc->data_bits_per_frame = %d\n", ldpc->data_bits_per_frame); + fprintf(stderr, "ldpc->coded_bits_per_frame = %d\n", ldpc->coded_bits_per_frame); +} + diff --git a/libcodec2-android/src/codec2/src/mpdecode_core.h b/libcodec2-android/src/codec2/src/mpdecode_core.h new file mode 100644 index 0000000..19ce0ef --- /dev/null +++ b/libcodec2-android/src/codec2/src/mpdecode_core.h @@ -0,0 +1,55 @@ +/* + FILE...: mpdecode_core.h + AUTHOR.: David Rowe + CREATED: Sep 2016 + + C-callable core functions for MpDecode, so they can be used for + Octave and C programs. Also some convenience functions to help use + the C-callable LDPC decoder in C programs. +*/ + +#ifndef __MPDECODE_CORE__ +#define __MPDECODE_CORE__ + +#include + +#include "comp.h" + +struct LDPC { + char name[32]; + int max_iter; + int dec_type; + int q_scale_factor; + int r_scale_factor; + int CodeLength; + int NumberParityBits; + int NumberRowsHcols; + int max_row_weight; + int max_col_weight; + + uint16_t *H_rows; + uint16_t *H_cols; + + /* these two are fixed to code params */ + int ldpc_data_bits_per_frame; + int ldpc_coded_bits_per_frame; + + /* these three may vary if we don't use all data bits in code */ + int data_bits_per_frame; + int coded_bits_per_frame; +}; + +void encode(struct LDPC *ldpc, unsigned char ibits[], unsigned char pbits[]); + +int run_ldpc_decoder(struct LDPC *ldpc, uint8_t out_char[], float input[], int *parityCheckCount); + +void sd_to_llr(float llr[], float sd[], int n); +void Demod2D(float symbol_likelihood[], COMP r[], COMP S_matrix[], float EsNo, float fading[], float mean_amp, int number_symbols); +void Somap(float bit_likelihood[], float symbol_likelihood[], int M, int bps, int number_symbols); +void symbols_to_llrs(float llr[], COMP rx_qpsk_symbols[], float rx_amps[], float EsNo, float mean_amp, int nsyms); +void fsk_rx_filt_to_llrs(float llr[], float rx_filt[], float v_est, float SNRest, int M, int nsyms); + +void ldpc_print_info(struct LDPC *ldpc); + + +#endif diff --git a/libcodec2-android/src/codec2/src/newamp1.c b/libcodec2-android/src/codec2/src/newamp1.c new file mode 100644 index 0000000..ba63ddb --- /dev/null +++ b/libcodec2-android/src/codec2/src/newamp1.c @@ -0,0 +1,683 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: newamp1.c + AUTHOR......: David Rowe + DATE CREATED: Jan 2017 + + Quantisation functions for the sinusoidal coder, using "newamp1" + algorithm that resamples variable rate L [Am} to a fixed rate K then + VQs. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright David Rowe 2017 + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . + +*/ + +#include +#include +#include +#include +#include + +#include "defines.h" +#include "phase.h" +#include "quantise.h" +#include "mbest.h" +#include "newamp1.h" + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: interp_para() + AUTHOR......: David Rowe + DATE CREATED: Jan 2017 + + General 2nd order parabolic interpolator. Used splines orginally, + but this is much simpler and we don't need much accuracy. Given two + vectors of points xp and yp, find interpolated values y at points x. + +\*---------------------------------------------------------------------------*/ + +void interp_para(float y[], float xp[], float yp[], int np, float x[], int n) +{ + assert(np >= 3); + + int k,i; + float xi, x1, y1, x2, y2, x3, y3, a, b; + + k = 0; + for (i=0; iL; m++) { + AmdB[m] = 20.0*log10f(model->A[m]+1E-16); + if (AmdB[m] > AmdB_peak) { + AmdB_peak = AmdB[m]; + } + rate_L_sample_freqs_kHz[m] = m*model->Wo*(c2const->Fs/2000.0)/M_PI; + //printf("m: %d AmdB: %f AmdB_peak: %f sf: %f\n", m, AmdB[m], AmdB_peak, rate_L_sample_freqs_kHz[m]); + } + + /* clip between peak and peak -50dB, to reduce dynamic range */ + + for(m=1; m<=model->L; m++) { + if (AmdB[m] < (AmdB_peak-50.0)) { + AmdB[m] = AmdB_peak-50.0; + } + } + + interp_para(rate_K_vec, &rate_L_sample_freqs_kHz[1], &AmdB[1], model->L, rate_K_sample_freqs_kHz, K); +} + + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: rate_K_mbest_encode + AUTHOR......: David Rowe + DATE CREATED: Jan 2017 + + Two stage rate K newamp1 VQ quantiser using mbest search. + +\*---------------------------------------------------------------------------*/ + +float rate_K_mbest_encode(int *indexes, float *x, float *xq, int ndim, int mbest_entries) +{ + int i, j, n1, n2; + const float *codebook1 = newamp1vq_cb[0].cb; + const float *codebook2 = newamp1vq_cb[1].cb; + struct MBEST *mbest_stage1, *mbest_stage2; + float target[ndim]; + float w[ndim]; + int index[MBEST_STAGES]; + float mse, tmp; + + /* codebook is compiled for a fixed K */ + + assert(ndim == newamp1vq_cb[0].k); + + /* equal weights, could be argued mel freq axis gives freq dep weighting */ + + for(i=0; ilist[j].index[0]; + for(i=0; ilist[0].index[1]; + n2 = mbest_stage2->list[0].index[0]; + mse = 0.0; + for (i=0;iL; m++) { + rate_L_sample_freqs_kHz[m] = m*model->Wo*(c2const->Fs/2000.0)/M_PI; + } + + interp_para(&AmdB[1], rate_K_sample_freqs_kHz_term, rate_K_vec_term, K+2, &rate_L_sample_freqs_kHz[1], model->L); + for(m=1; m<=model->L; m++) { + model->A[m] = POW10F(AmdB[m]/20.0); + // printf("m: %d f: %f AdB: %f A: %f\n", m, rate_L_sample_freqs_kHz[m], AmdB[m], model->A[m]); + } +} + + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: determine_phase + AUTHOR......: David Rowe + DATE CREATED: Jan 2017 + + Given a magnitude spectrum determine a phase spectrum, used for + phase synthesis with newamp1. + +\*---------------------------------------------------------------------------*/ + +void determine_phase(C2CONST *c2const, COMP H[], MODEL *model, int Nfft, codec2_fft_cfg fwd_cfg, codec2_fft_cfg inv_cfg) +{ + int i,m,b; + int Ns = Nfft/2+1; + float Gdbfk[Ns], sample_freqs_kHz[Ns], phase[Ns]; + float AmdB[MAX_AMP+1], rate_L_sample_freqs_kHz[MAX_AMP+1]; + + for(m=1; m<=model->L; m++) { + assert(model->A[m] != 0.0); + AmdB[m] = 20.0*log10f(model->A[m]); + rate_L_sample_freqs_kHz[m] = (float)m*model->Wo*(c2const->Fs/2000.0)/M_PI; + } + + for(i=0; iFs/1000.0)*(float)i/Nfft; + } + + interp_para(Gdbfk, &rate_L_sample_freqs_kHz[1], &AmdB[1], model->L, sample_freqs_kHz, Ns); + mag_to_phase(phase, Gdbfk, Nfft, fwd_cfg, inv_cfg); + + for(m=1; m<=model->L; m++) { + b = floorf(0.5+m*model->Wo*Nfft/(2.0*M_PI)); + H[m].real = cosf(phase[b]); H[m].imag = sinf(phase[b]); + } +} + +/*---------------------------------------------------------------------------* \ + + FUNCTION....: determine_autoc + AUTHOR......: David Rowe + DATE CREATED: April 2020 + + Determine autocorrelation coefficients from model params, for machine + learning experiments. + +\*---------------------------------------------------------------------------*/ + +void determine_autoc(C2CONST *c2const, float Rk[], int order, MODEL *model, int Nfft, codec2_fft_cfg fwd_cfg, codec2_fft_cfg inv_cfg) +{ + int i,m; + int Ns = Nfft/2+1; + float Gdbfk[Ns], sample_freqs_kHz[Ns]; + float AmdB[MAX_AMP+1], rate_L_sample_freqs_kHz[MAX_AMP+1]; + + /* interpolate in the log domain */ + for(m=1; m<=model->L; m++) { + assert(model->A[m] != 0.0); + AmdB[m] = 20.0*log10f(model->A[m]); + rate_L_sample_freqs_kHz[m] = (float)m*model->Wo*(c2const->Fs/2000.0)/M_PI; + } + + for(i=0; iFs/1000.0)*(float)i/Nfft; + } + + interp_para(Gdbfk, &rate_L_sample_freqs_kHz[1], &AmdB[1], model->L, sample_freqs_kHz, Ns); + + COMP S[Nfft], R[Nfft]; + + /* install negative frequency components, convert to mag squared of spectrum */ + S[0].real = pow(10.0, Gdbfk[0]/10.0); + S[0].imag = 0.0; + for(i=1; ivoiced) { + int index = encode_log_Wo(c2const, model->Wo, 6); + if (index == 0) { + index = 1; + } + indexes[3] = index; + } + else { + indexes[3] = 0; + } +} + + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: newamp1_interpolate + AUTHOR......: David Rowe + DATE CREATED: Jan 2017 + +\*---------------------------------------------------------------------------*/ + +void newamp1_interpolate(float interpolated_surface_[], float left_vec[], float right_vec[], int K) +{ + int i, k; + int M = 4; + float c; + + /* (linearly) interpolate 25Hz amplitude vectors back to 100Hz */ + + for(i=0,c=1.0; i. +*/ + +#ifndef __NEWAMP1__ +#define __NEWAMP1__ + +#define NEWAMP1_N_INDEXES 4 /* Number of indexes to pack: vq1, vq2, energy, Wo */ +#define NEWAMP1_PHASE_NFFT 128 /* size of FFT used for phase synthesis */ +#define NEWAMP1_K 20 /* rate K vector length */ +#define NEWAMP1_VQ_MBEST_DEPTH 5 /* how many candidates we keep for each stage of mbest search */ + + +#include "codec2_fft.h" +#include "comp.h" + +void interp_para(float y[], float xp[], float yp[], int np, float x[], int n); +float ftomel(float fHz); +void mel_sample_freqs_kHz(float rate_K_sample_freqs_kHz[], int K, float mel_start, float mel_end); +void resample_const_rate_f(C2CONST *c2const, MODEL *model, float rate_K_vec[], float rate_K_sample_freqs_kHz[], int K); +float rate_K_mbest_encode(int *indexes, float *x, float *xq, int ndim, int mbest_entries); +void post_filter_newamp1(float vec[], float sample_freq_kHz[], int K, float pf_gain); +void interp_Wo_v(float Wo_[], int L_[], int voicing_[], float Wo1, float Wo2, int voicing1, int voicing2); +void resample_rate_L(C2CONST *c2const, MODEL *model, float rate_K_vec[], float rate_K_sample_freqs_kHz[], int K); +void determine_phase(C2CONST *c2const, COMP H[], MODEL *model, int Nfft, codec2_fft_cfg fwd_cfg, codec2_fft_cfg inv_cfg); +void determine_autoc(C2CONST *c2const, float Rk[], int order, MODEL *model, int Nfft, codec2_fft_cfg fwd_cfg, codec2_fft_cfg inv_cfg); +void newamp1_model_to_indexes(C2CONST *c2const, + int indexes[], + MODEL *model, + float rate_K_vec[], + float rate_K_sample_freqs_kHz[], + int K, + float *mean, + float rate_K_vec_no_mean[], + float rate_K_vec_no_mean_[], + float *se, + float *eq, + int eq_en); +void newamp1_indexes_to_rate_K_vec(float rate_K_vec_[], + float rate_K_vec_no_mean_[], + float rate_K_sample_freqs_kHz[], + int K, + float *mean_, + int indexes[], + float user_rate_K_vec_no_mean_[], + int post_filter_en); +void newamp1_interpolate(float interpolated_surface_[], float left_vec[], float right_vec[], int K); +void newamp1_eq(float rate_K_vec_no_mean[], float eq[], int K, int eq_en); +void newamp1_indexes_to_model(C2CONST *c2const, + MODEL model_[], + COMP H[], + float interpolated_surface_[], + float prev_rate_K_vec_[], + float *Wo_left, + int *voicing_left, + float rate_K_sample_freqs_kHz[], + int K, + codec2_fft_cfg fwd_cfg, + codec2_fft_cfg inv_cfg, + int indexes[], + float user_rate_K_vec_no_mean_[], + int post_filter_en); + +#endif diff --git a/libcodec2-android/src/codec2/src/newamp2.c b/libcodec2-android/src/codec2/src/newamp2.c new file mode 100644 index 0000000..5e7571c --- /dev/null +++ b/libcodec2-android/src/codec2/src/newamp2.c @@ -0,0 +1,569 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: newamp2.c + AUTHOR......: Thomas Kurin and Stefan Erhardt + INSTITUTE...: Institute for Electronics Engineering, University of Erlangen-Nuremberg + DATE CREATED: July 2018 + BASED ON....: "newamp1" by David Rowe + + Quantisation functions for the sinusoidal coder, using "newamp1" + algorithm that resamples variable rate L [Am} to a fixed rate K then + VQs. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright David Rowe 2017 + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . + +*/ + +#include +#include +#include +#include +#include + +#include "defines.h" +#include "phase.h" +#include "quantise.h" +#include "mbest.h" +#include "newamp1.h" +#include "newamp2.h" + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: n2_mel_sample_freqs_kHz() + AUTHOR......: Thomas Kurin and Stefan Erhardt + INSTITUTE...: Institute for Electronics Engineering, University of Erlangen-Nuremberg + DATE CREATED: July 2018 + + Outputs fixed frequencies for the K-Vectors to be able to work with both 8k and 16k mode. + +\*---------------------------------------------------------------------------*/ + +void n2_mel_sample_freqs_kHz(float rate_K_sample_freqs_kHz[], int K) +{ + float freq[] = {0.199816, 0.252849, 0.309008, 0.368476, 0.431449, 0.498134, 0.568749, 0.643526, 0.722710, 0.806561, 0.895354, 0.989380, + 1.088948, 1.194384, 1.306034, 1.424264, 1.549463, 1.682041, 1.822432, 1.971098, 2.128525, 2.295232, 2.471763, 2.658699, + 2.856652, 3.066272, 3.288246, 3.523303, 3.772214, 4.035795, 4.314912, 4.610478, 4.923465, 5.254899, 5.605865, 5.977518, + 6.371075, 6.787827, 7.229141, 7.696465}; + int k; + //printf("\n\n"); + for (k=0; kL; m++) { + AmdB[m] = 20.0*log10(model->A[m]+1E-16); + if (AmdB[m] > AmdB_peak) { + AmdB_peak = AmdB[m]; + } + rate_L_sample_freqs_kHz[m] = m*model->Wo*(c2const->Fs/2000.0)/M_PI; + //printf("m: %d AmdB: %f AmdB_peak: %f sf: %f\n", m, AmdB[m], AmdB_peak, rate_L_sample_freqs_kHz[m]); + } + + /* clip between peak and peak -50dB, to reduce dynamic range */ + + for(m=1; m<=model->L; m++) { + if (AmdB[m] < (AmdB_peak-50.0)) { + AmdB[m] = AmdB_peak-50.0; + } + } + + interp_para(rate_K_vec, &rate_L_sample_freqs_kHz[1], &AmdB[1], model->L, rate_K_sample_freqs_kHz, K); +} + + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: n2_rate_K_mbest_encode + AUTHOR......: Thomas Kurin and Stefan Erhardt + INSTITUTE...: Institute for Electronics Engineering, University of Erlangen-Nuremberg + DATE CREATED: July 2018 + + One stage rate K newamp2 VQ quantiser using mbest search. + +\*---------------------------------------------------------------------------*/ + +void n2_rate_K_mbest_encode(int *indexes, float *x, float *xq, int ndim) +{ + int i, n1; + const float *codebook1 = newamp2vq_cb[0].cb; + struct MBEST *mbest_stage1; + float w[ndim]; + int index[1]; + + /* codebook is compiled for a fixed K */ + + //assert(ndim == newamp2vq_cb[0].k); + + /* equal weights, could be argued mel freq axis gives freq dep weighting */ + + for(i=0; ilist[0].index[0]; + + mbest_destroy(mbest_stage1); + + //indexes[1]: legacy from newamp1 + indexes[0] = n1; indexes[1] = n1; + +} + + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: n2_resample_rate_L + AUTHOR......: Thomas Kurin and Stefan Erhardt + INSTITUTE...: Institute for Electronics Engineering, University of Erlangen-Nuremberg + DATE CREATED: July 2018 + + Decoder side conversion of rate K vector back to rate L. + Plosives are set to zero for the first 2 of 4 frames. + +\*---------------------------------------------------------------------------*/ + +void n2_resample_rate_L(C2CONST *c2const, MODEL *model, float rate_K_vec[], float rate_K_sample_freqs_kHz[], int K,int plosive_flag) +{ + float rate_K_vec_term[K+2], rate_K_sample_freqs_kHz_term[K+2]; + float AmdB[MAX_AMP+1], rate_L_sample_freqs_kHz[MAX_AMP+1]; + int m,k; + + /* terminate either end of the rate K vecs with 0dB points */ + + rate_K_vec_term[0] = rate_K_vec_term[K+1] = 0.0; + rate_K_sample_freqs_kHz_term[0] = 0.0; + rate_K_sample_freqs_kHz_term[K+1] = 4.0; + + for(k=0; kL; m++) { + rate_L_sample_freqs_kHz[m] = m*model->Wo*(c2const->Fs/2000.0)/M_PI; + } + + interp_para(&AmdB[1], rate_K_sample_freqs_kHz_term, rate_K_vec_term, K+2, &rate_L_sample_freqs_kHz[1], model->L); + for(m=1; m<=model->L; m++) { + if(plosive_flag==0){ + model->A[m] = pow(10.0, AmdB[m]/20.0); + }else{ + model->A[m] = 0.1; + } + // printf("m: %d f: %f AdB: %f A: %f\n", m, rate_L_sample_freqs_kHz[m], AmdB[m], model->A[m]); + } +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: n2_post_filter_newamp2 + AUTHOR......: Thomas Kurin and Stefan Erhardt + INSTITUTE...: Institute for Electronics Engineering, University of Erlangen-Nuremberg + DATE CREATED: July 2018 + + Postfilter for the pseudo wideband mode. Still has to be adapted! + +\*---------------------------------------------------------------------------*/ + +void n2_post_filter_newamp2(float vec[], float sample_freq_kHz[], int K, float pf_gain) +{ + int k; + + /* + vec is rate K vector describing spectrum of current frame lets + pre-emp before applying PF. 20dB/dec over 300Hz. Postfilter + affects energy of frame so we measure energy before and after + and normalise. Plenty of room for experiment here as well. + */ + + float pre[K]; + float e_before = 0.0; + float e_after = 0.0; + for(k=0; kvoiced) { + int index = encode_log_Wo(c2const, model->Wo, 6); + if (index == 0) { + index = 1; + } + if (index == 63) { + index = 62; + } + indexes[3] = index; + } + else { + indexes[3] = 0; + } + if(plosive != 0){ + indexes[3] = 63; + } + } + + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: newamp2_indexes_to_rate_K_vec + AUTHOR......: Thomas Kurin and Stefan Erhardt + INSTITUTE...: Institute for Electronics Engineering, University of Erlangen-Nuremberg + DATE CREATED: July 2018 + + newamp2 decoder for amplitudes {Am}. Given the rate K VQ and energy + indexes, outputs rate K vector. Equal to newamp1 but using only one stage VQ. + +\*---------------------------------------------------------------------------*/ + +void newamp2_indexes_to_rate_K_vec(float rate_K_vec_[], + float rate_K_vec_no_mean_[], + float rate_K_sample_freqs_kHz[], + int K, + float *mean_, + int indexes[], + float pf_gain) +{ + int k; + const float *codebook1 = newamp2vq_cb[0].cb; + int n1 = indexes[0]; + + for(k=0; kmean2) + +\*---------------------------------------------------------------------------*/ + +void newamp2_16k_indexes_to_rate_K_vec(float rate_K_vec_[], + float rate_K_vec_no_mean_[], + float rate_K_sample_freqs_kHz[], + int K, + float *mean_, + int indexes[], + float pf_gain) +{ + int k; + const float *codebook1 = newamp2vq_cb[0].cb; + float mean2 = 0; + int n1 = indexes[0]; + + for(k=0; k50){ + mean2 = 50; + } + + for(k=0; k0 && indexes[3]<63) { + Wo_right = decode_log_Wo(c2const, indexes[3], 6); + voicing_right = 1; + } + //Unvoiced + else if(indexes[3] == 0){ + Wo_right = 2.0*M_PI/100.0; + voicing_right = 0; + } + //indexes[3]=63 (= Plosive) and unvoiced + else { + Wo_right = 2.0*M_PI/100.0; + voicing_right = 0; + plosive_flag = 1; + } + + /* interpolate 25Hz rate K vec back to 100Hz */ + + float *left_vec = prev_rate_K_vec_; + float *right_vec = rate_K_vec_; + newamp2_interpolate(interpolated_surface_, left_vec, right_vec, K,plosive_flag); + + /* interpolate 25Hz v and Wo back to 100Hz */ + + float aWo_[M]; + int avoicing_[M], aL_[M], i; + + interp_Wo_v(aWo_, aL_, avoicing_, *Wo_left, Wo_right, *voicing_left, voicing_right); + + /* back to rate L amplitudes, synthesis phase for each frame */ + + for(i=0; i0){ + //First two frames are set to zero + if (i<2){ + n2_resample_rate_L(c2const, &model_[i], &interpolated_surface_[K*i], rate_K_sample_freqs_kHz, K,1); + } + else{ + n2_resample_rate_L(c2const, &model_[i], &interpolated_surface_[K*i], rate_K_sample_freqs_kHz, K,0); + } + } + //No Plosive, standard resample + else{ + n2_resample_rate_L(c2const, &model_[i], &interpolated_surface_[K*i], rate_K_sample_freqs_kHz, K,0); + } + determine_phase(c2const, &H[(MAX_AMP+1)*i], &model_[i], NEWAMP2_PHASE_NFFT, fwd_cfg, inv_cfg); + } + + /* update memories for next time */ + + for(k=0; k. +*/ + +#ifndef __NEWAMP2__ +#define __NEWAMP2__ + +#define NEWAMP2_N_INDEXES 4 /* Number of indexes to pack: vq1, vq2, energy, Wo */ +#define NEWAMP2_PHASE_NFFT 128 /* size of FFT used for phase synthesis */ +#define NEWAMP2_K 29 /* rate K vector length */ +#define NEWAMP2_16K_K 40 /* rate K vector length for 16k Mode */ + +#include "codec2_fft.h" +#include "comp.h" + +void n2_mel_sample_freqs_kHz(float rate_K_sample_freqs_kHz[], int K); +void n2_resample_const_rate_f(C2CONST *c2const, MODEL *model, float rate_K_vec[], float rate_K_sample_freqs_kHz[], int K); +void n2_rate_K_mbest_encode(int *indexes, float *x, float *xq, int ndim); +void n2_resample_rate_L(C2CONST *c2const, MODEL *model, float rate_K_vec[], float rate_K_sample_freqs_kHz[], int K,int plosive_flag); +void n2_post_filter_newamp2(float vec[], float sample_freq_kHz[], int K, float pf_gain); +void newamp2_interpolate(float interpolated_surface_[], float left_vec[], float right_vec[], int K,int plosive_flag); +void newamp2_model_to_indexes(C2CONST *c2const, + int indexes[], + MODEL *model, + float rate_K_vec[], + float rate_K_sample_freqs_kHz[], + int K, + float *mean, + float rate_K_vec_no_mean[], + float rate_K_vec_no_mean_[], + int plosiv + ); +void newamp2_indexes_to_rate_K_vec(float rate_K_vec_[], + float rate_K_vec_no_mean_[], + float rate_K_sample_freqs_kHz[], + int K, + float *mean_, + int indexes[], + float pf_gain); +void newamp2_16k_indexes_to_rate_K_vec(float rate_K_vec_[], + float rate_K_vec_no_mean_[], + float rate_K_sample_freqs_kHz[], + int K, + float *mean_, + int indexes[], + float pf_gain); +void newamp2_indexes_to_model(C2CONST *c2const, + MODEL model_[], + COMP H[], + float interpolated_surface_[], + float prev_rate_K_vec_[], + float *Wo_left, + int *voicing_left, + float rate_K_sample_freqs_kHz[], + int K, + codec2_fft_cfg fwd_cfg, + codec2_fft_cfg inv_cfg, + int indexes[], + float pf_gain, + int flag16k); + +#endif diff --git a/libcodec2-android/src/codec2/src/nlp.c b/libcodec2-android/src/codec2/src/nlp.c new file mode 100644 index 0000000..036f6be --- /dev/null +++ b/libcodec2-android/src/codec2/src/nlp.c @@ -0,0 +1,521 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: nlp.c + AUTHOR......: David Rowe + DATE CREATED: 23/3/93 + + Non Linear Pitch (NLP) estimation functions. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2009 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include "defines.h" +#include "nlp.h" +#include "dump.h" +#include "codec2_fft.h" +#undef PROFILE +#include "machdep.h" +#include "os.h" + +#include +#include +#include + +/*---------------------------------------------------------------------------*\ + + DEFINES + +\*---------------------------------------------------------------------------*/ + +#define PMAX_M 320 /* maximum NLP analysis window size */ +#define COEFF 0.95 /* notch filter parameter */ +#define PE_FFT_SIZE 512 /* DFT size for pitch estimation */ +#define DEC 5 /* decimation factor */ +#define SAMPLE_RATE 8000 +#define PI 3.141592654 /* mathematical constant */ +#define T 0.1 /* threshold for local minima candidate */ +#define F0_MAX 500 +#define CNLP 0.3 /* post processor constant */ +#define NLP_NTAP 48 /* Decimation LPF order */ + +/* 8 to 16 kHz sample rate conversion */ + +#define FDMDV_OS 2 /* oversampling rate */ +#define FDMDV_OS_TAPS_16K 48 /* number of OS filter taps at 16kHz */ +#define FDMDV_OS_TAPS_8K (FDMDV_OS_TAPS_16K/FDMDV_OS) /* number of OS filter taps at 8kHz */ + +/*---------------------------------------------------------------------------*\ + + GLOBALS + +\*---------------------------------------------------------------------------*/ + +/* 48 tap 600Hz low pass FIR filter coefficients */ + +const float nlp_fir[] = { + -1.0818124e-03, + -1.1008344e-03, + -9.2768838e-04, + -4.2289438e-04, + 5.5034190e-04, + 2.0029849e-03, + 3.7058509e-03, + 5.1449415e-03, + 5.5924666e-03, + 4.3036754e-03, + 8.0284511e-04, + -4.8204610e-03, + -1.1705810e-02, + -1.8199275e-02, + -2.2065282e-02, + -2.0920610e-02, + -1.2808831e-02, + 3.2204775e-03, + 2.6683811e-02, + 5.5520624e-02, + 8.6305944e-02, + 1.1480192e-01, + 1.3674206e-01, + 1.4867556e-01, + 1.4867556e-01, + 1.3674206e-01, + 1.1480192e-01, + 8.6305944e-02, + 5.5520624e-02, + 2.6683811e-02, + 3.2204775e-03, + -1.2808831e-02, + -2.0920610e-02, + -2.2065282e-02, + -1.8199275e-02, + -1.1705810e-02, + -4.8204610e-03, + 8.0284511e-04, + 4.3036754e-03, + 5.5924666e-03, + 5.1449415e-03, + 3.7058509e-03, + 2.0029849e-03, + 5.5034190e-04, + -4.2289438e-04, + -9.2768838e-04, + -1.1008344e-03, + -1.0818124e-03 +}; + +typedef struct { + int Fs; /* sample rate in Hz */ + int m; + float w[PMAX_M/DEC]; /* DFT window */ + float sq[PMAX_M]; /* squared speech samples */ + float mem_x,mem_y; /* memory for notch filter */ + float mem_fir[NLP_NTAP]; /* decimation FIR filter memory */ + codec2_fft_cfg fft_cfg; /* kiss FFT config */ + float *Sn16k; /* Fs=16kHz input speech vector */ + FILE *f; +} NLP; + +float post_process_sub_multiples(COMP Fw[], + int pmin, int pmax, float gmax, int gmax_bin, + float *prev_f0); +static void fdmdv_16_to_8(float out8k[], float in16k[], int n); + +/*---------------------------------------------------------------------------*\ + + nlp_create() + + Initialisation function for NLP pitch estimator. + +\*---------------------------------------------------------------------------*/ + +void *nlp_create(C2CONST *c2const) +{ + NLP *nlp; + int i; + int m = c2const->m_pitch; + int Fs = c2const->Fs; + + nlp = (NLP*)malloc(sizeof(NLP)); + if (nlp == NULL) + return NULL; + + assert((Fs == 8000) || (Fs == 16000)); + nlp->Fs = Fs; + + nlp->m = m; + + /* if running at 16kHz allocate storage for decimating filter memory */ + + if (Fs == 16000) { + nlp->Sn16k = (float*)malloc(sizeof(float)*(FDMDV_OS_TAPS_16K + c2const->n_samp)); + for(i=0; iSn16k[i] = 0.0; + } + if (nlp->Sn16k == NULL) { + free(nlp); + return NULL; + } + + /* most processing occurs at 8 kHz sample rate so halve m */ + + m /= 2; + } + + assert(m <= PMAX_M); + + for(i=0; iw[i] = 0.5 - 0.5*cosf(2*PI*i/(m/DEC-1)); + } + + for(i=0; isq[i] = 0.0; + nlp->mem_x = 0.0; + nlp->mem_y = 0.0; + for(i=0; imem_fir[i] = 0.0; + + nlp->fft_cfg = codec2_fft_alloc (PE_FFT_SIZE, 0, NULL, NULL); + assert(nlp->fft_cfg != NULL); + + return (void*)nlp; +} + +/*---------------------------------------------------------------------------*\ + + nlp_destroy() + + Shut down function for NLP pitch estimator. + +\*---------------------------------------------------------------------------*/ + +void nlp_destroy(void *nlp_state) +{ + NLP *nlp; + assert(nlp_state != NULL); + nlp = (NLP*)nlp_state; + + codec2_fft_free(nlp->fft_cfg); + if (nlp->Fs == 16000) { + free(nlp->Sn16k); + } + free(nlp_state); +} + +/*---------------------------------------------------------------------------*\ + + nlp() + + Determines the pitch in samples using the Non Linear Pitch (NLP) + algorithm [1]. Returns the fundamental in Hz. Note that the actual + pitch estimate is for the centre of the M sample Sn[] vector, not + the current N sample input vector. This is (I think) a delay of 2.5 + frames with N=80 samples. You should align further analysis using + this pitch estimate to be centred on the middle of Sn[]. + + Two post processors have been tried, the MBE version (as discussed + in [1]), and a post processor that checks sub-multiples. Both + suffer occasional gross pitch errors (i.e. neither are perfect). In + the presence of background noise the sub-multiple algorithm tends + towards low F0 which leads to better sounding background noise than + the MBE post processor. + + A good way to test and develop the NLP pitch estimator is using the + tnlp (codec2/unittest) and the codec2/octave/plnlp.m Octave script. + + A pitch tracker searching a few frames forward and backward in time + would be a useful addition. + + References: + + [1] http://rowetel.com/downloads/1997_rowe_phd_thesis.pdf Chapter 4 + +\*---------------------------------------------------------------------------*/ + +float nlp( + void *nlp_state, + float Sn[], /* input speech vector */ + int n, /* frames shift (no. new samples in Sn[]) */ + float *pitch, /* estimated pitch period in samples at current Fs */ + COMP Sw[], /* Freq domain version of Sn[] */ + float W[], /* Freq domain window */ + float *prev_f0 /* previous pitch f0 in Hz, memory for pitch tracking */ +) +{ + NLP *nlp; + float notch; /* current notch filter output */ + COMP Fw[PE_FFT_SIZE]; /* DFT of squared signal (input/output) */ + float gmax; + int gmax_bin; + int m, i, j; + float best_f0; + PROFILE_VAR(start, tnotch, filter, peakpick, window, fft, magsq, shiftmem); + + assert(nlp_state != NULL); + nlp = (NLP*)nlp_state; + m = nlp->m; + + /* Square, notch filter at DC, and LP filter vector */ + + /* If running at 16 kHz decimate to 8 kHz, as NLP ws designed for + Fs = 8kHz. The decimating filter introduces about 3ms of delay, + that shouldn't be a problem as pitch changes slowly. */ + + if (nlp->Fs == 8000) { + /* Square latest input samples */ + + for(i=m-n; isq[i] = Sn[i]*Sn[i]; + } + } + else { + assert(nlp->Fs == 16000); + + /* re-sample at 8 KHz */ + + for(i=0; iSn16k[FDMDV_OS_TAPS_16K+i] = Sn[m-n+i]; + } + + m /= 2; n /= 2; + + float Sn8k[n]; + fdmdv_16_to_8(Sn8k, &nlp->Sn16k[FDMDV_OS_TAPS_16K], n); + + /* Square latest input samples */ + + for(i=m-n, j=0; isq[i] = Sn8k[j]*Sn8k[j]; + } + assert(j <= n); + } + //fprintf(stderr, "n: %d m: %d\n", n, m); + + PROFILE_SAMPLE(start); + + for(i=m-n; isq[i] - nlp->mem_x; + notch += COEFF*nlp->mem_y; + nlp->mem_x = nlp->sq[i]; + nlp->mem_y = notch; + nlp->sq[i] = notch + 1.0; /* With 0 input vectors to codec, + kiss_fft() would take a long + time to execute when running in + real time. Problem was traced + to kiss_fft function call in + this function. Adding this small + constant fixed problem. Not + exactly sure why. */ + } + + PROFILE_SAMPLE_AND_LOG(tnotch, start, " square and notch"); + + for(i=m-n; imem_fir[j] = nlp->mem_fir[j+1]; + nlp->mem_fir[NLP_NTAP-1] = nlp->sq[i]; + + nlp->sq[i] = 0.0; + for(j=0; jsq[i] += nlp->mem_fir[j]*nlp_fir[j]; + } + + PROFILE_SAMPLE_AND_LOG(filter, tnotch, " filter"); + + /* Decimate and DFT */ + + for(i=0; isq[i*DEC]*nlp->w[i]; + } + PROFILE_SAMPLE_AND_LOG(window, filter, " window"); + #ifdef DUMP + dump_dec(Fw); + #endif + + // FIXME: check if this can be converted to a real fft + // since all imag inputs are 0 + codec2_fft_inplace(nlp->fft_cfg, Fw); + PROFILE_SAMPLE_AND_LOG(fft, window, " fft"); + + for(i=0; isq); + dump_Fw(Fw); + #endif + + /* todo: express everything in f0, as pitch in samples is dep on Fs */ + + int pmin = floor(SAMPLE_RATE*P_MIN_S); + int pmax = floor(SAMPLE_RATE*P_MAX_S); + + /* find global peak */ + + gmax = 0.0; + gmax_bin = PE_FFT_SIZE*DEC/pmax; + for(i=PE_FFT_SIZE*DEC/pmax; i<=PE_FFT_SIZE*DEC/pmin; i++) { + if (Fw[i].real > gmax) { + gmax = Fw[i].real; + gmax_bin = i; + } + } + + PROFILE_SAMPLE_AND_LOG(peakpick, magsq, " peak pick"); + + best_f0 = post_process_sub_multiples(Fw, pmin, pmax, gmax, gmax_bin, prev_f0); + + PROFILE_SAMPLE_AND_LOG(shiftmem, peakpick, " post process"); + + /* Shift samples in buffer to make room for new samples */ + + for(i=0; isq[i] = nlp->sq[i+n]; + + /* return pitch period in samples and F0 estimate */ + + *pitch = (float)nlp->Fs/best_f0; + + PROFILE_SAMPLE_AND_LOG2(shiftmem, " shift mem"); + + PROFILE_SAMPLE_AND_LOG2(start, " nlp int"); + + *prev_f0 = best_f0; + + return(best_f0); +} + +/*---------------------------------------------------------------------------*\ + + post_process_sub_multiples() + + Given the global maximma of Fw[] we search integer submultiples for + local maxima. If local maxima exist and they are above an + experimentally derived threshold (OK a magic number I pulled out of + the air) we choose the submultiple as the F0 estimate. + + The rational for this is that the lowest frequency peak of Fw[] + should be F0, as Fw[] can be considered the autocorrelation function + of Sw[] (the speech spectrum). However sometimes due to phase + effects the lowest frequency maxima may not be the global maxima. + + This works OK in practice and favours low F0 values in the presence + of background noise which means the sinusoidal codec does an OK job + of synthesising the background noise. High F0 in background noise + tends to sound more periodic introducing annoying artifacts. + +\*---------------------------------------------------------------------------*/ + +float post_process_sub_multiples(COMP Fw[], + int pmin, int pmax, float gmax, int gmax_bin, + float *prev_f0) +{ + int min_bin, cmax_bin; + int mult; + float thresh, best_f0; + int b, bmin, bmax, lmax_bin; + float lmax; + int prev_f0_bin; + + /* post process estimate by searching submultiples */ + + mult = 2; + min_bin = PE_FFT_SIZE*DEC/pmax; + cmax_bin = gmax_bin; + prev_f0_bin = *prev_f0*(PE_FFT_SIZE*DEC)/SAMPLE_RATE; + + while(gmax_bin/mult >= min_bin) { + + b = gmax_bin/mult; /* determine search interval */ + bmin = 0.8*b; + bmax = 1.2*b; + if (bmin < min_bin) + bmin = min_bin; + + /* lower threshold to favour previous frames pitch estimate, + this is a form of pitch tracking */ + + if ((prev_f0_bin > bmin) && (prev_f0_bin < bmax)) + thresh = CNLP*0.5*gmax; + else + thresh = CNLP*gmax; + + lmax = 0; + lmax_bin = bmin; + for (b=bmin; b<=bmax; b++) /* look for maximum in interval */ + if (Fw[b].real > lmax) { + lmax = Fw[b].real; + lmax_bin = b; + } + + if (lmax > thresh) + if ((lmax > Fw[lmax_bin-1].real) && (lmax > Fw[lmax_bin+1].real)) { + cmax_bin = lmax_bin; + } + + mult++; + } + + best_f0 = (float)cmax_bin*SAMPLE_RATE/(PE_FFT_SIZE*DEC); + + return best_f0; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: fdmdv_16_to_8() + AUTHOR......: David Rowe + DATE CREATED: 9 May 2012 + + Changes the sample rate of a signal from 16 to 8 kHz. + + n is the number of samples at the 8 kHz rate, there are FDMDV_OS*n + samples at the 48 kHz rate. As above however a memory of + FDMDV_OS_TAPS samples is reqd for in16k[] (see t16_8.c unit test as example). + + Low pass filter the 16 kHz signal at 4 kHz using the same filter as + the upsampler, then just output every FDMDV_OS-th filtered sample. + + Note: this function copied from fdmdv.c, included in nlp.c as a convenience + to avoid linking with another source file. + +\*---------------------------------------------------------------------------*/ + +static void fdmdv_16_to_8(float out8k[], float in16k[], int n) +{ + float acc; + int i,j,k; + + for(i=0, k=0; k. +*/ + +#ifndef __NLP__ +#define __NLP__ + +#include "comp.h" + +void *nlp_create(C2CONST *c2const); +void nlp_destroy(void *nlp_state); +float nlp(void *nlp_state, float Sn[], int n, + float *pitch_samples, COMP Sw[], float W[], float *prev_f0); + +#endif diff --git a/libcodec2-android/src/codec2/src/noise_samples.h b/libcodec2-android/src/codec2/src/noise_samples.h new file mode 100644 index 0000000..1e271bc --- /dev/null +++ b/libcodec2-android/src/codec2/src/noise_samples.h @@ -0,0 +1,60006 @@ +/* unit variance complex noise samples */ + +/* Generated by write_noise_file() Octave function */ + +COMP noise[]={ + {-1.885516,0.055745}, + {-0.521966,-0.622614}, + {1.066249,0.337187}, + {0.425638,1.008370}, + {-0.318666,-0.210894}, + {-0.498824,0.361164}, + {-0.300114,-0.527950}, + {0.385872,0.182296}, + {1.195960,-0.586922}, + {0.266811,0.178374}, + {0.013054,0.215778}, + {-0.823216,-0.322273}, + {0.837766,-0.727259}, + {-0.862485,0.092857}, + {0.075880,0.633056}, + {-0.410681,-0.646296}, + {0.586237,-0.116673}, + {-0.058715,0.066528}, + {0.857992,-1.043428}, + {-0.123710,-0.261511}, + {0.185764,0.023376}, + {0.236794,-0.527785}, + {-1.703954,0.502907}, + {-0.299082,-0.422089}, + {-0.288630,-0.675562}, + {-0.424885,-0.319811}, + {-0.032088,0.101098}, + {0.605509,0.242926}, + {0.145393,-0.199722}, + {-0.184393,-1.528490}, + {0.081268,-0.843421}, + {0.654326,-0.158813}, + {-0.234536,1.226681}, + {0.221648,-1.226646}, + {-0.193938,-0.336096}, + {-0.518051,-1.309855}, + {-0.664323,1.059784}, + {0.007637,1.113850}, + {-0.465620,1.714405}, + {1.028837,-0.549814}, + {0.073478,-0.721235}, + {0.964658,0.084118}, + {-1.822765,-0.997525}, + {1.032482,0.916581}, + {-0.597571,-0.136872}, + {-0.009127,-0.208567}, + {0.516709,-0.773967}, + {-1.129711,1.021948}, + {-0.697322,-0.812202}, + {0.327103,-0.638199}, + {-0.497829,0.319382}, + {-1.362630,-0.414764}, + {-0.307641,0.207521}, + {-0.982186,-0.198641}, + {-0.588516,-0.097265}, + {1.299202,0.644097}, + {-0.972070,-0.680644}, + {0.782015,-0.002870}, + {-1.177445,-1.014379}, + {-0.398772,0.513042}, + {-0.666921,0.266484}, + {-0.803497,0.971730}, + {0.267153,0.335670}, + {-0.591532,0.779734}, + {-1.211656,-0.382351}, + {0.065910,-0.504718}, + {-0.686435,-0.584560}, + {0.858992,-1.042560}, + {0.847992,1.057437}, + {1.492562,-0.829278}, + {0.816092,-1.530742}, + {-0.520592,-0.549319}, + {-0.076793,0.021602}, + {-0.697792,0.763414}, + {0.821960,0.552985}, + {0.376647,-1.094689}, + {-1.401195,-0.857007}, + {-0.376378,-0.783975}, + {-0.120497,0.662907}, + {0.670862,-0.673604}, + {-0.177972,-1.238774}, + {-0.037790,-1.376598}, + {-0.899490,-0.445965}, + {0.474709,1.022354}, + {-0.291882,0.370018}, + {-0.072661,-0.118012}, + {0.396912,-1.371327}, + {-0.711547,0.258054}, + {-1.118704,-0.050908}, + {-0.592657,-1.747229}, + {-0.731285,-0.387065}, + {-0.535939,-0.294046}, + {-1.314716,-1.534715}, + {0.361445,0.618672}, + {-0.082988,-0.336140}, + {0.210252,0.650233}, + {-0.674824,0.056007}, + {0.596070,0.007299}, + {0.305633,-1.176059}, + {1.659456,0.424673}, + {0.660546,-0.514937}, + {-0.206967,0.241885}, + {-1.104655,-0.744576}, + {-0.218762,0.014955}, + {0.165193,1.381141}, + {0.078718,-1.222328}, + {-0.377642,-0.152884}, + {0.108755,0.412056}, + {-0.429127,-0.383452}, + {0.518805,0.741250}, + {0.740139,-0.770384}, + {-1.485392,-0.336407}, + {-0.078238,0.141468}, + {-1.271050,0.180219}, + {-0.211076,-1.217480}, + {1.461947,0.144679}, + {-0.109724,-0.861360}, + {-0.296620,-1.282399}, + {0.201649,-0.713701}, + {-0.156722,0.424378}, + {1.029760,-1.173706}, + {0.571211,-0.156216}, + {-0.455729,0.236642}, + {0.742660,0.014606}, + {-0.097202,-0.498742}, + {0.266521,0.048233}, + {-0.060433,0.282215}, + {-0.239310,1.006663}, + {0.389689,-0.071960}, + {-0.689538,0.568830}, + {0.759056,0.330529}, + {0.149945,-0.521060}, + {-0.580738,-0.907159}, + {1.448531,-0.054100}, + {0.690290,0.275166}, + {-0.478557,-0.516261}, + {-0.820324,-0.831472}, + {-0.341231,0.409044}, + {0.180268,0.231572}, + {-0.450892,1.061669}, + {0.192718,-0.862400}, + {-0.399038,0.268735}, + {-0.856262,-0.454883}, + {0.363651,-0.198669}, + {-0.642075,-0.189629}, + {0.005932,-0.508157}, + {0.985162,-0.020120}, + {1.562916,0.229486}, + {-0.899449,0.307419}, + {0.112975,0.627516}, + {-1.857863,-1.008967}, + {0.378419,0.019322}, + {0.443381,0.253609}, + {1.715317,-0.767294}, + {-0.385770,0.001505}, + {-0.645703,-0.310651}, + {-1.888905,0.409068}, + {0.805380,0.333960}, + {-1.046012,-0.674661}, + {0.794386,-0.303931}, + {-0.286721,0.610492}, + {-0.123797,-0.552424}, + {0.206278,-0.663653}, + {0.428624,-0.249450}, + {0.430463,-0.635776}, + {-0.119454,0.773666}, + {-0.578332,-0.980697}, + {0.235559,1.481441}, + {-0.714737,-1.423728}, + {0.350707,0.157071}, + {0.453768,0.680754}, + {0.283172,-1.286042}, + {0.031254,-0.559665}, + {-0.008719,-0.527750}, + {-1.036011,-0.024812}, + {0.392333,0.647429}, + {0.203090,0.422197}, + {-1.948977,0.778356}, + {1.366324,-0.798091}, + {1.180139,-0.048221}, + {0.114722,1.012431}, + {0.615604,0.391601}, + {0.987843,0.495600}, + {-0.496219,-0.900673}, + {1.001277,-0.568435}, + {-0.576352,-1.332582}, + {0.306377,0.123371}, + {0.211114,-0.685042}, + {0.298619,0.362809}, + {0.202382,0.173210}, + {-0.075417,-0.014578}, + {-1.015379,-0.025271}, + {0.128685,0.929594}, + {-0.723128,0.984769}, + {-0.536901,-0.125969}, + {0.240670,0.812981}, + {-0.763511,1.108132}, + {0.500508,-0.241395}, + {0.624663,-0.410191}, + {-0.094272,-0.521839}, + {1.429982,-0.369827}, + {-0.070236,-1.263636}, + {-0.498143,-0.973796}, + {0.575172,-1.017724}, + {0.487669,0.215515}, + {0.562802,-0.136995}, + {-0.963325,-0.880169}, + {-0.541808,-0.623215}, + {0.613993,0.303645}, + {-0.604527,-0.329199}, + {-0.331248,1.331861}, + {-1.040864,1.077405}, + {0.342707,0.741436}, + {-0.627839,-0.347768}, + {0.231630,-0.578183}, + {-1.128172,0.396462}, + {-0.198999,1.538255}, + {-0.177279,-0.290086}, + {-0.687712,-0.894058}, + {-0.124584,0.925987}, + {-0.602825,0.432388}, + {-0.111357,-0.496225}, + {0.034978,0.298642}, + {0.324142,-0.092883}, + {1.347456,0.820678}, + {0.674479,-0.288974}, + {1.539829,-1.107841}, + {-1.023161,0.056007}, + {0.317892,-0.963086}, + {0.158138,0.483226}, + {0.340379,-0.422898}, + {-0.813880,-0.882603}, + {-0.322466,0.829669}, + {-0.217180,-1.046571}, + {0.452658,0.839521}, + {-0.622912,-0.060398}, + {-0.034008,-0.564055}, + {-1.793271,-0.605655}, + {-0.028383,0.886204}, + {-0.308408,0.061571}, + {0.536948,0.120042}, + {-0.574106,-0.562561}, + {0.406051,-0.338068}, + {0.492813,-0.083346}, + {-0.711445,-0.455225}, + {-0.061165,0.217759}, + {0.338502,-0.376511}, + {0.832324,-0.406104}, + {-0.083176,0.715563}, + {0.040608,-0.871143}, + {-0.462891,0.849255}, + {-0.372708,-1.019345}, + {0.934808,-0.626071}, + {1.010369,-1.084185}, + {0.479580,-0.842863}, + {0.927175,0.131809}, + {-0.689773,-0.142861}, + {1.343912,0.404388}, + {-1.759282,0.448528}, + {0.619114,-0.525565}, + {-0.321018,0.404425}, + {-0.741470,-0.296394}, + {-1.980475,0.026427}, + {-0.614688,0.342918}, + {0.066823,0.132296}, + {0.498182,0.005019}, + {0.182848,0.162708}, + {-0.493550,0.153312}, + {1.072346,-1.225466}, + {1.139312,0.832815}, + {1.252850,0.105664}, + {-0.397363,-0.754276}, + {0.580338,-1.300751}, + {0.009278,-0.598071}, + {0.402804,-0.530334}, + {-0.039782,-0.370667}, + {-0.990988,-0.169245}, + {1.697751,-0.452739}, + {1.272906,-0.324169}, + {-1.567337,-0.459235}, + {-0.798090,-0.024978}, + {0.697111,-1.399949}, + {0.110211,-0.941636}, + {-1.480043,-0.132934}, + {-1.148194,0.987249}, + {-0.873447,-0.209100}, + {1.065186,-1.104929}, + {0.099062,0.126155}, + {1.977617,0.094483}, + {-0.786564,-0.546020}, + {-0.714383,0.131073}, + {0.905849,0.394293}, + {0.190777,-0.513831}, + {0.437916,0.203698}, + {1.043923,0.145473}, + {-0.443628,-0.725054}, + {0.983123,-0.489622}, + {0.842413,0.307580}, + {-0.822191,-0.258379}, + {-0.523631,0.285446}, + {0.571865,-0.025860}, + {-0.201652,-0.099850}, + {-0.022666,0.495916}, + {0.596392,0.867633}, + {0.804110,-0.338599}, + {-0.026179,-1.043212}, + {-0.598738,0.094476}, + {-1.478593,-0.541411}, + {-0.941390,0.363421}, + {0.361994,0.590341}, + {1.113285,-1.212781}, + {0.701988,0.084937}, + {-0.083600,-0.245951}, + {-1.484694,-0.468464}, + {0.162783,1.536800}, + {0.252869,-0.052530}, + {0.926480,-0.277632}, + {0.299984,-1.410909}, + {-0.425939,-0.332244}, + {0.464111,0.662834}, + {-0.802428,-0.324926}, + {0.028548,0.511754}, + {0.140263,0.200719}, + {1.751965,1.362158}, + {0.773686,-0.044970}, + {-0.098854,0.668847}, + {-0.356892,1.006610}, + {0.272827,0.118268}, + {0.294481,0.308008}, + {1.772151,0.001790}, + {0.399585,-0.223070}, + {0.143887,0.187282}, + {-0.580062,0.483563}, + {0.263317,0.146606}, + {0.913153,0.409123}, + {0.176392,0.531394}, + {1.266576,0.812919}, + {-0.339609,-0.004748}, + {1.029027,-0.899818}, + {-0.770858,-0.547236}, + {0.286743,-0.638120}, + {-0.521747,-0.089493}, + {-0.565535,-0.929156}, + {-1.535774,0.479567}, + {-0.615287,-0.520953}, + {-0.553663,-0.319031}, + {0.582640,1.113202}, + {0.232977,0.041975}, + {-0.199109,-0.254687}, + {-0.066200,0.947135}, + {0.666122,0.627375}, + {0.480019,1.051260}, + {-0.093472,-0.787448}, + {0.480187,0.926381}, + {-0.857216,0.556518}, + {0.442832,0.376201}, + {-0.119017,-0.140136}, + {-0.409616,-1.213675}, + {-0.437294,-0.024768}, + {0.451274,-0.787326}, + {-0.533223,-0.923706}, + {0.131233,1.268746}, + {1.743505,1.131077}, + {0.987317,0.595257}, + {-0.088862,0.853512}, + {0.551818,0.665099}, + {0.883782,0.470033}, + {-0.516423,-1.423524}, + {0.091609,0.378477}, + {0.009939,0.994809}, + {1.045723,-1.221703}, + {-0.276956,-0.093140}, + {-0.409436,-0.171621}, + {-0.964290,-0.362871}, + {0.592260,0.544377}, + {-0.681616,-0.447483}, + {-0.431291,0.024446}, + {0.663176,1.026108}, + {0.838537,-0.118180}, + {-0.747318,0.251341}, + {-0.380034,-0.715319}, + {-0.900635,0.212346}, + {-0.464843,0.620745}, + {-1.093005,0.607958}, + {0.515036,1.299937}, + {-1.016371,-0.029679}, + {-0.205308,0.148501}, + {0.505373,-0.440794}, + {-0.048557,-0.301057}, + {-0.698358,-1.099303}, + {-0.088257,-0.329308}, + {0.075595,-0.362464}, + {0.027192,-0.680106}, + {-0.757238,-0.166757}, + {-1.448321,-0.138835}, + {-0.136439,0.459323}, + {0.912758,0.296751}, + {0.799521,-0.573520}, + {-0.861892,-0.589343}, + {-0.567036,0.158120}, + {0.478773,-1.056482}, + {0.709261,0.523567}, + {0.739101,-1.002925}, + {-0.494944,0.003764}, + {0.454782,-0.046268}, + {0.210620,0.297517}, + {-0.781813,0.236194}, + {0.348782,-0.613968}, + {-0.094413,-0.465826}, + {1.768494,-0.406883}, + {0.007841,0.789725}, + {-0.162655,0.552781}, + {-0.758330,0.343804}, + {0.454609,-0.732044}, + {-0.168881,0.095592}, + {0.515566,-0.569084}, + {1.255135,-0.757000}, + {0.469649,0.564189}, + {1.260765,0.360564}, + {0.055027,-0.177677}, + {0.600213,-1.511142}, + {-0.018551,1.257905}, + {0.308072,0.151081}, + {-0.207634,-1.327921}, + {-0.527733,0.174325}, + {-0.159456,-0.732546}, + {-0.220168,-0.415477}, + {0.543532,-0.145998}, + {0.884459,1.021665}, + {-0.262540,-0.398469}, + {-0.281570,0.698927}, + {-0.908972,-0.709079}, + {1.589970,0.503578}, + {-0.171265,-0.741831}, + {-0.743265,-0.294431}, + {0.731885,0.012954}, + {0.007728,-0.499237}, + {0.089515,-0.775161}, + {0.725415,-0.411110}, + {0.298849,-0.118750}, + {-1.303123,0.250206}, + {0.310939,0.936912}, + {-0.172330,0.754859}, + {0.093154,0.269182}, + {-0.858640,-0.029252}, + {-1.073149,0.280686}, + {-0.601430,-0.256738}, + {-0.351531,-0.914084}, + {-1.751136,-0.490966}, + {0.112360,-0.656132}, + {0.921817,-0.276350}, + {0.763771,0.769928}, + {0.221840,1.213251}, + {-0.706608,-0.303978}, + {0.281566,-1.404763}, + {1.496795,0.177279}, + {0.261977,-0.939172}, + {-0.919389,-0.188529}, + {0.044503,0.718759}, + {-0.825230,0.774033}, + {0.693991,0.858213}, + {0.509792,0.099608}, + {-0.020553,-0.839990}, + {-0.854648,-0.540134}, + {-0.000525,1.256322}, + {0.894022,-0.693105}, + {0.442684,-0.596914}, + {0.498318,0.275977}, + {-0.388386,0.465259}, + {0.414579,-1.294942}, + {0.098001,-0.237709}, + {1.594870,-0.240582}, + {-0.711413,0.451491}, + {0.019527,2.133193}, + {0.948900,0.242084}, + {0.059194,0.584269}, + {0.852393,-0.156332}, + {-1.485739,0.262110}, + {-0.016760,-0.827316}, + {-0.891646,0.181925}, + {-0.018801,0.682929}, + {-0.690712,-0.572420}, + {1.070712,0.423795}, + {1.438766,0.043977}, + {-0.318368,-0.067348}, + {-0.661371,-1.089229}, + {0.046538,0.984436}, + {0.749236,-0.964548}, + {1.566314,0.918615}, + {-1.235787,1.002522}, + {0.416022,1.866776}, + {1.217135,0.668893}, + {-0.698937,-0.486054}, + {-0.478062,-1.168289}, + {1.113613,-0.737028}, + {0.773078,0.234230}, + {-0.270515,-0.411625}, + {-0.228462,0.192394}, + {-0.838646,0.153818}, + {-0.436599,-0.408881}, + {-0.286055,-0.410803}, + {0.729377,-0.731766}, + {0.197643,0.237175}, + {0.836606,0.664076}, + {-1.657439,1.703306}, + {-0.925155,-0.171418}, + {0.078549,-0.331130}, + {0.629470,0.307286}, + {1.248656,0.135449}, + {1.243601,0.442489}, + {0.387421,-0.154848}, + {-1.179918,-0.732728}, + {1.236507,0.602991}, + {0.372452,0.171586}, + {-0.394677,-0.101565}, + {0.381677,1.147393}, + {-1.697199,0.109712}, + {0.188553,-0.752200}, + {0.333632,-1.929951}, + {-1.659946,0.767602}, + {-0.190815,-0.557146}, + {-1.244192,0.038106}, + {0.077329,0.305661}, + {0.945212,1.065261}, + {-0.912713,1.292797}, + {-0.391785,-0.024158}, + {0.240759,-1.304114}, + {0.112919,-0.091566}, + {-0.424359,-0.382424}, + {-1.079261,0.972243}, + {0.454041,-0.530269}, + {-1.976890,-0.123184}, + {-0.190632,-0.544888}, + {0.296577,-0.825026}, + {-0.477747,-0.335360}, + {0.208503,0.097964}, + {-0.579558,-0.380423}, + {-0.414982,-0.344604}, + {0.940711,-0.907772}, + {-0.962894,-1.441203}, + {-0.648064,2.197827}, + {-0.633787,-0.990602}, + {0.215111,-0.181544}, + {0.232828,-0.123360}, + {-0.303892,1.339899}, + {-0.166969,1.219343}, + {0.508222,-0.102310}, + {-0.811188,1.126966}, + {0.321233,-1.277579}, + {0.007428,0.316342}, + {0.506948,0.481229}, + {-1.304547,0.311991}, + {0.142125,0.263640}, + {0.391351,0.737307}, + {1.437568,-0.534043}, + {-0.949425,1.069958}, + {-0.409085,-0.759735}, + {0.412259,0.737801}, + {-0.492377,-0.804608}, + {-0.217219,-0.405020}, + {0.115039,0.000846}, + {0.349041,0.299516}, + {-0.460594,0.403723}, + {0.196753,1.155867}, + {-0.277940,0.266830}, + {-0.274583,0.585154}, + {-1.172068,1.790906}, + {0.590439,-0.406621}, + {1.328016,-0.283713}, + {1.517565,-0.073409}, + {0.130855,1.772665}, + {-2.619775,1.072108}, + {0.319751,1.536673}, + {0.047733,-0.326729}, + {0.289634,1.226698}, + {2.014575,-0.883138}, + {0.229264,-0.183602}, + {0.589396,-1.070306}, + {0.273592,-2.039844}, + {-0.935323,-0.715785}, + {0.849403,0.619567}, + {0.480466,-0.484123}, + {0.222280,-0.134613}, + {-0.258632,-1.289221}, + {0.050742,0.026907}, + {-0.283583,0.031728}, + {-0.757978,0.771411}, + {-0.434361,0.111156}, + {0.021107,-0.043801}, + {0.773835,-0.122289}, + {-0.292605,0.119946}, + {0.501058,0.447133}, + {0.227193,0.479879}, + {-0.544627,-0.222938}, + {0.583272,-0.387875}, + {-0.223831,-0.468512}, + {-1.520007,0.446069}, + {-0.573569,0.226990}, + {-1.019881,0.053637}, + {-0.634610,-0.875259}, + {0.504476,-0.027282}, + {-0.039342,0.409377}, + {0.202815,1.231918}, + {-0.843921,0.164374}, + {0.356392,-0.821357}, + {0.108781,-0.523469}, + {-0.196590,-0.568744}, + {0.903934,1.041689}, + {-0.544910,-0.022931}, + {0.299150,1.544291}, + {0.880525,0.454125}, + {-0.528507,-0.169262}, + {-0.683196,-0.079160}, + {0.153998,-0.420623}, + {0.324243,0.022550}, + {0.099578,1.237426}, + {0.613243,0.648504}, + {-0.190038,0.945184}, + {-1.058645,0.829361}, + {0.657373,-0.037085}, + {0.292522,-1.824963}, + {1.306603,0.982009}, + {0.202489,-0.632477}, + {-0.198865,1.503029}, + {-0.506292,0.002522}, + {0.709691,0.107836}, + {-0.135288,-0.949001}, + {-0.013697,0.446746}, + {0.269863,1.736851}, + {0.147020,-0.676663}, + {-0.044332,0.878172}, + {-0.969214,0.385042}, + {-0.108626,-0.577699}, + {0.573041,-0.693982}, + {-0.430415,1.253413}, + {0.106646,-0.057892}, + {-0.946692,-0.108739}, + {-0.070615,-0.924246}, + {-0.407323,-1.048572}, + {0.541592,-0.183877}, + {1.559869,-0.734420}, + {-0.667415,-0.567982}, + {0.194163,-0.030077}, + {0.088646,0.226636}, + {0.502396,-1.399375}, + {-0.016646,-0.215656}, + {0.348238,0.112063}, + {1.303715,0.470275}, + {-0.665134,-0.786941}, + {0.470438,0.135527}, + {-1.337204,0.482771}, + {-0.535810,0.980521}, + {-0.168026,-0.750603}, + {0.387649,-0.230317}, + {-0.100852,0.278379}, + {0.685615,0.909829}, + {-1.248533,-0.401446}, + {0.402464,1.846549}, + {0.119498,0.304702}, + {0.717501,-1.078118}, + {-0.450438,0.775426}, + {-1.459832,-0.482867}, + {0.328487,-0.012362}, + {-0.126026,0.086507}, + {-0.630993,0.029377}, + {-1.326625,0.927913}, + {-0.198820,0.150652}, + {0.266277,-0.555360}, + {0.424295,-0.359816}, + {1.393099,-0.408979}, + {-0.137465,0.133084}, + {0.628200,-0.501458}, + {-0.684531,-0.666955}, + {-0.181920,0.890694}, + {-0.700720,-0.956197}, + {-0.060714,-1.247294}, + {-0.405972,-0.881525}, + {1.118188,0.072000}, + {-0.195761,-1.868639}, + {0.358203,0.349429}, + {0.154352,-1.476324}, + {-0.210438,-1.836233}, + {0.277728,0.211249}, + {0.104063,1.608697}, + {0.078646,-0.690233}, + {1.107666,0.152621}, + {0.976973,0.132356}, + {0.625021,0.424496}, + {1.106620,-1.108251}, + {-0.606551,0.611908}, + {-0.079978,0.362614}, + {0.450618,0.582625}, + {-0.256559,-0.109762}, + {-1.029120,-0.607627}, + {0.030983,0.226229}, + {0.466365,-0.698225}, + {-0.320317,0.232588}, + {-0.294836,0.215016}, + {0.380833,0.902802}, + {0.179398,-0.539814}, + {-0.750583,-0.650149}, + {-0.528202,0.616827}, + {-1.363519,-1.202585}, + {0.284990,-1.236363}, + {0.243581,-0.864788}, + {0.624023,0.137801}, + {-0.032040,-0.595454}, + {0.518910,0.207927}, + {-0.623962,0.216663}, + {-0.382311,0.684690}, + {-1.561598,0.901426}, + {0.426931,1.278804}, + {0.332361,-0.658982}, + {0.181141,-0.012956}, + {0.171052,0.552234}, + {-0.435677,0.454231}, + {-0.919015,0.176359}, + {-0.000067,-0.799626}, + {-0.930220,-0.187525}, + {-0.452119,-0.228146}, + {0.380184,-0.566153}, + {-0.179594,0.470684}, + {0.176167,-0.917050}, + {0.002315,0.589605}, + {1.252774,0.206557}, + {-0.284561,-1.124914}, + {0.174024,0.351072}, + {-0.838853,1.170720}, + {-0.067488,-0.254230}, + {-0.622343,-1.414225}, + {0.436853,0.611763}, + {-0.128391,0.096025}, + {-0.819464,-0.451713}, + {-0.165038,-0.122421}, + {0.024147,-1.314003}, + {0.304931,0.164088}, + {-0.288640,-0.620373}, + {0.357003,0.454057}, + {-1.286647,0.415088}, + {1.849891,0.616365}, + {-0.185972,-1.212797}, + {-0.415794,-0.401859}, + {-0.431783,-0.137922}, + {0.768623,-0.292081}, + {0.012545,1.445239}, + {-1.689607,-0.394403}, + {0.152052,-0.025210}, + {-1.765495,0.816127}, + {0.035743,0.371073}, + {-0.218734,-0.149507}, + {1.291120,-1.111594}, + {-0.374380,0.070194}, + {-0.903368,0.788305}, + {0.867657,-0.973921}, + {0.913874,0.430432}, + {-0.121419,0.832404}, + {-0.415312,1.135312}, + {-0.393487,-0.150178}, + {-0.079568,-0.565870}, + {1.522292,0.090401}, + {-0.334966,0.599134}, + {0.515824,0.178857}, + {-0.199075,-0.457595}, + {0.246401,-0.054357}, + {1.396896,-1.363043}, + {-0.027178,-0.553311}, + {1.010836,0.249187}, + {0.075435,0.009485}, + {-0.217608,1.185129}, + {-0.522616,0.556410}, + {0.858783,-0.313273}, + {-0.001036,-0.621413}, + {0.960607,-1.149066}, + {-0.521696,0.268324}, + {-0.517445,-1.383789}, + {0.305025,0.761437}, + {0.031777,-0.095862}, + {-0.795680,-1.512038}, + {0.033550,-0.338430}, + {-0.398340,-0.145735}, + {-0.322545,0.322695}, + {0.372049,-0.610750}, + {-0.137179,-0.590167}, + {-0.504190,-0.258481}, + {-0.335035,0.338316}, + {-0.364893,0.692466}, + {0.038100,-0.724327}, + {0.296797,0.135183}, + {0.159604,0.214980}, + {0.250361,-0.215980}, + {-0.347541,0.122078}, + {-0.056809,0.890072}, + {0.285375,0.181473}, + {0.170715,-0.393356}, + {-1.015282,-0.208756}, + {-0.785738,0.483868}, + {0.007467,1.387720}, + {-0.178938,0.754625}, + {0.664808,-0.600883}, + {0.001036,-0.083353}, + {0.194157,0.160494}, + {1.084332,-0.062428}, + {0.349357,0.373911}, + {1.433766,-1.303837}, + {0.037403,2.429277}, + {0.395728,-0.834206}, + {-0.389085,-0.755077}, + {0.850327,0.007645}, + {-0.368104,0.126990}, + {-0.775816,-0.923819}, + {-0.537167,0.945156}, + {0.142793,1.312552}, + {-0.125607,0.032723}, + {-0.137840,-0.002817}, + {0.742073,0.013517}, + {0.251125,-0.528226}, + {0.820089,-0.035605}, + {-0.713914,0.167522}, + {-0.863981,-0.178499}, + {-0.390476,-0.120624}, + {0.583901,-0.243569}, + {-0.227909,0.309306}, + {0.324491,-0.693688}, + {-1.094183,0.252179}, + {0.192052,0.039188}, + {-0.267150,-0.444016}, + {-0.005890,-0.573760}, + {-0.232266,-0.276434}, + {0.382483,0.162194}, + {0.150483,-0.651730}, + {0.067169,0.902480}, + {-2.098348,0.945188}, + {0.825451,1.329186}, + {-0.815597,-1.181818}, + {0.461014,-0.678300}, + {-0.711512,0.009708}, + {0.260361,1.191568}, + {0.185182,-0.338544}, + {0.478590,0.221720}, + {0.624523,0.990393}, + {-0.706888,0.014106}, + {1.173506,-1.110449}, + {-0.091258,-0.061557}, + {1.120091,1.816875}, + {-0.989880,-1.531038}, + {0.692417,-1.128270}, + {1.716773,0.088070}, + {1.162503,0.054400}, + {0.810364,0.272585}, + {-0.013515,-0.520286}, + {-0.730928,-0.950759}, + {0.008127,0.539806}, + {-1.317219,0.544458}, + {0.781036,0.503169}, + {-0.335197,-0.425765}, + {-0.735000,-0.347362}, + {0.528729,0.365142}, + {-0.617825,0.301920}, + {0.910278,-0.760821}, + {-0.709713,-0.356227}, + {0.953397,0.042611}, + {0.086349,-0.037081}, + {0.171876,0.033586}, + {1.106060,-0.413432}, + {-0.408955,1.259989}, + {0.072173,1.348382}, + {0.650744,0.132067}, + {0.241760,-0.334014}, + {-0.088343,0.502032}, + {-0.043052,0.355098}, + {-0.313450,0.269137}, + {-0.329212,-1.672112}, + {-0.207438,-0.117867}, + {0.366077,-0.234852}, + {0.411392,-0.008275}, + {0.353902,0.251566}, + {-1.477623,0.757765}, + {0.654771,-0.149077}, + {0.076332,-0.376470}, + {-0.879182,-0.887672}, + {0.125407,1.010632}, + {-0.871182,0.304759}, + {0.194266,-0.223159}, + {0.060104,-0.953143}, + {-0.045438,0.534938}, + {0.615844,0.411408}, + {-0.374972,-0.055209}, + {-0.253019,0.383784}, + {-0.891703,-0.218474}, + {-0.706804,0.115545}, + {-1.026031,1.389687}, + {-0.462136,0.335579}, + {-0.773215,-0.951771}, + {-0.779558,-0.464746}, + {0.476106,-0.777170}, + {0.664543,-0.569407}, + {0.214316,0.063090}, + {-0.569488,-0.008396}, + {0.750912,-0.739441}, + {0.214514,0.148096}, + {-0.198354,1.474815}, + {-1.805212,-0.107083}, + {0.169518,-0.786940}, + {-0.409644,0.852013}, + {-0.221826,-0.037541}, + {0.253388,-0.616419}, + {-1.774513,-1.460955}, + {0.742875,0.456503}, + {-0.232420,-1.359596}, + {-0.507235,-0.763391}, + {0.195227,0.320688}, + {-0.224637,-0.845635}, + {1.009627,0.163178}, + {0.778218,-1.096235}, + {0.865546,0.293077}, + {1.466179,0.233799}, + {0.226625,-0.545274}, + {0.692166,-0.527514}, + {0.013789,0.635607}, + {0.807891,-0.801895}, + {-1.053395,0.465520}, + {-0.036991,-1.273551}, + {-0.589794,-0.753839}, + {-0.030564,-0.036160}, + {0.155678,-1.045183}, + {0.625342,-0.595545}, + {0.036864,-0.046397}, + {-0.004179,-0.652544}, + {-0.820676,0.620457}, + {-0.183887,0.725946}, + {-0.166238,-1.560859}, + {0.175907,-1.429565}, + {-0.020052,0.815148}, + {-0.197063,-1.522027}, + {0.813251,-2.196093}, + {-1.334144,-0.008865}, + {0.412217,0.219281}, + {-0.080738,-0.419816}, + {0.192626,-0.493562}, + {-0.370266,-1.389646}, + {-0.030379,0.021337}, + {0.496641,0.294285}, + {-0.416795,0.418699}, + {0.195812,-0.707197}, + {0.122865,-0.525780}, + {-0.610908,-0.373378}, + {-0.177131,-1.018769}, + {0.403266,0.457369}, + {-0.288750,1.777459}, + {-0.606019,0.137316}, + {0.164513,1.727904}, + {0.911565,-0.299473}, + {-0.493145,0.145941}, + {0.279365,0.579905}, + {0.452409,1.222730}, + {-0.329814,0.070742}, + {-0.098010,-0.289855}, + {1.204663,0.662790}, + {-0.493696,0.573452}, + {-0.938748,-0.639465}, + {-0.739078,1.243613}, + {-0.343832,0.558003}, + {0.027203,0.055290}, + {-0.170201,0.729385}, + {-0.878156,-1.902973}, + {0.690907,1.079256}, + {0.028972,0.634171}, + {-0.155383,0.545055}, + {-0.431928,0.330613}, + {-0.635781,0.072453}, + {0.615176,0.308009}, + {0.104105,-0.205818}, + {0.415076,1.103903}, + {-0.024480,0.212016}, + {0.664855,-0.116184}, + {0.652496,-1.192114}, + {0.695982,-0.080428}, + {-0.526819,-0.078349}, + {1.742119,0.556368}, + {-0.153092,1.204460}, + {0.311190,0.421990}, + {0.938121,1.025194}, + {0.156598,-0.031073}, + {0.224118,0.600692}, + {-0.051218,0.216583}, + {-0.842484,0.468331}, + {0.407989,0.450259}, + {-0.949113,-1.564583}, + {-0.434143,0.325978}, + {0.747291,2.322704}, + {0.737442,1.246064}, + {-0.762481,-0.758876}, + {0.729215,0.853799}, + {-0.908589,-0.622078}, + {-0.598447,1.603107}, + {-0.959017,0.214551}, + {0.536470,-0.187251}, + {0.530038,0.557070}, + {-0.247256,0.391664}, + {0.445570,0.089350}, + {1.499768,-0.418437}, + {0.800986,-0.273838}, + {0.177952,-1.141694}, + {1.090844,1.147880}, + {0.084762,-0.180105}, + {-0.464588,0.255076}, + {-0.710487,-0.422911}, + {-0.159879,0.388722}, + {0.919932,-0.041034}, + {-0.515947,-0.139864}, + {-0.432913,-0.527550}, + {-0.275296,-1.159533}, + {-0.136299,0.789806}, + {-0.464789,-0.109964}, + {0.939702,-0.027732}, + {0.197460,0.125553}, + {0.360497,-0.081121}, + {-1.038393,0.917326}, + {-0.562256,-0.247960}, + {-0.506010,0.057694}, + {-0.061158,0.007115}, + {1.085933,0.036530}, + {0.782551,0.730841}, + {-1.730593,-0.649685}, + {1.033557,0.042674}, + {1.004293,-0.582702}, + {-0.588062,1.893153}, + {-0.038458,-0.489328}, + {-0.223353,0.176598}, + {-0.602039,-0.177264}, + {0.484092,-0.207521}, + {0.131809,0.406690}, + {-0.420236,2.391833}, + {-1.389783,-0.697870}, + {-1.051676,0.985787}, + {1.027283,0.026054}, + {-0.193866,0.459321}, + {-0.237210,-0.168983}, + {0.034746,0.785979}, + {1.228488,-0.966549}, + {1.189960,0.910590}, + {0.215783,-0.132182}, + {0.865491,1.580951}, + {0.342861,-1.317527}, + {-0.347129,0.117582}, + {0.477505,0.073989}, + {-0.330732,-0.626076}, + {-0.383103,-1.051103}, + {-1.127629,0.266550}, + {0.077820,0.478365}, + {0.979591,-0.218870}, + {-0.666472,0.081770}, + {-0.846640,0.983632}, + {-0.481019,0.374114}, + {0.076811,0.167969}, + {-1.276667,-1.056656}, + {0.884138,1.533002}, + {-0.422899,0.149947}, + {-0.471814,0.310129}, + {-0.294613,0.138715}, + {-0.917606,0.974627}, + {0.338625,0.106750}, + {-0.447939,-0.094187}, + {0.404872,0.074803}, + {-0.759799,-0.426123}, + {-0.788273,0.712513}, + {-0.021566,-0.188178}, + {-0.162962,-1.214495}, + {0.093791,-0.540991}, + {-0.961095,0.434286}, + {0.353384,-1.489342}, + {0.292430,-1.036190}, + {0.150482,-0.471052}, + {0.149233,-0.987746}, + {-0.432685,0.980449}, + {-0.738729,0.443044}, + {-0.038329,0.068701}, + {1.188859,-0.898705}, + {-1.250213,-0.076530}, + {-0.526824,0.334444}, + {-0.464058,0.049049}, + {-0.642591,-0.525583}, + {0.192584,-0.630311}, + {0.437306,0.681520}, + {0.487855,0.369540}, + {0.641239,-0.574243}, + {0.371964,-1.021879}, + {-1.041124,0.131275}, + {-0.691663,0.998510}, + {0.546112,0.831658}, + {1.393481,-0.148050}, + {1.262175,0.248708}, + {0.540609,-0.336198}, + {0.041225,-1.024662}, + {-0.177173,-0.224147}, + {0.867867,-0.187578}, + {-0.967667,-1.219234}, + {0.213381,-0.057988}, + {-0.675667,-1.091565}, + {0.556298,-0.770728}, + {-0.188682,0.656382}, + {-0.092475,0.407926}, + {-1.641683,0.484862}, + {0.190082,-0.330329}, + {0.174209,-0.676685}, + {-0.950743,-0.193766}, + {-0.435225,-0.580076}, + {0.246472,-0.472847}, + {-0.505688,-0.759662}, + {-1.255934,-0.736332}, + {1.935964,0.332194}, + {-0.500932,0.083885}, + {-0.067564,0.231471}, + {-0.379280,0.846503}, + {-0.030848,-0.246677}, + {0.125241,-0.397222}, + {-1.137543,-0.555543}, + {-0.122221,0.387840}, + {2.042492,-1.202247}, + {1.772027,0.326225}, + {-0.550197,0.205095}, + {0.450376,0.791456}, + {-0.506594,0.069919}, + {-0.063568,1.032985}, + {-0.621426,-0.028421}, + {0.043761,-1.038331}, + {-2.012759,-0.886260}, + {-0.144653,-0.613454}, + {1.042293,-0.047165}, + {-0.059067,0.116286}, + {0.148872,-0.095572}, + {-0.573228,-0.480453}, + {-0.200914,-1.046460}, + {-0.824112,1.568436}, + {-0.133283,-0.288869}, + {0.597348,0.377234}, + {-0.505799,1.227439}, + {-0.606898,0.148651}, + {-0.583873,-1.081077}, + {-0.347056,0.271253}, + {0.784106,0.033133}, + {0.184385,0.180992}, + {0.378686,-0.264273}, + {1.264891,1.156455}, + {-0.180967,0.378180}, + {1.185364,2.147560}, + {-0.443654,-0.290601}, + {-1.069806,0.508735}, + {1.608167,1.233684}, + {-0.794538,0.519840}, + {-0.078219,1.219228}, + {0.334451,-0.046541}, + {-0.666285,0.564027}, + {-0.577876,-0.550521}, + {-0.000416,-0.584869}, + {0.624742,-0.128862}, + {-0.205674,-0.383454}, + {-0.377425,0.710460}, + {0.086861,-1.107777}, + {0.781845,-0.797178}, + {0.153671,0.734022}, + {0.009617,-0.036667}, + {0.752946,1.007603}, + {0.471233,0.459138}, + {-0.821665,-0.267974}, + {-0.924172,0.593227}, + {-0.364922,0.183033}, + {0.503286,0.374220}, + {0.817608,-1.185941}, + {-1.068648,0.590834}, + {-0.100083,-0.975689}, + {0.801345,0.166370}, + {0.878885,0.514705}, + {-0.707014,0.403084}, + {0.827796,0.483292}, + {-0.975586,0.279704}, + {0.362153,1.075430}, + {0.799974,0.002309}, + {0.676713,-1.092933}, + {1.578438,0.276312}, + {0.110806,-1.246881}, + {-0.865309,0.165009}, + {-0.282162,0.733062}, + {-0.990404,-0.702353}, + {0.121363,0.147771}, + {0.038031,-0.195024}, + {0.138621,0.371235}, + {0.142721,0.021207}, + {0.268035,-0.692454}, + {0.945280,-0.180407}, + {-0.253126,-1.299034}, + {0.215126,0.964959}, + {0.214474,0.039968}, + {-0.315065,1.317935}, + {-0.495310,0.013483}, + {0.470253,0.354208}, + {-0.089794,0.245806}, + {-0.208178,1.288801}, + {0.753819,-0.739573}, + {-0.885257,-0.056685}, + {0.478816,0.673381}, + {0.388771,0.612329}, + {-0.820496,-1.297063}, + {-1.437975,0.521158}, + {0.271222,-0.170637}, + {-0.400573,-0.022383}, + {-1.216831,-0.194283}, + {1.347498,-0.865849}, + {1.490747,1.638422}, + {-0.066047,-0.399105}, + {-0.420802,1.133171}, + {0.135157,1.573802}, + {0.541187,0.894018}, + {1.510389,0.809415}, + {0.881448,-0.730401}, + {0.296695,-0.733757}, + {0.339736,-1.370242}, + {0.274695,0.252843}, + {-1.281780,0.313851}, + {1.274502,-0.466039}, + {0.808820,-0.486975}, + {0.817662,0.485549}, + {-0.095951,0.029602}, + {-0.110720,0.676979}, + {1.202230,0.782503}, + {0.323406,-0.119733}, + {-0.284233,0.460801}, + {-0.138012,-0.172029}, + {0.660058,-0.652850}, + {0.681055,0.587900}, + {1.034573,-1.401681}, + {-0.803681,0.663399}, + {0.279558,-1.726715}, + {-0.064446,-0.133818}, + {0.111129,-0.818469}, + {-0.109438,0.108017}, + {0.655329,-0.214051}, + {-0.182692,0.983672}, + {-0.386961,-0.148666}, + {-0.520381,0.408330}, + {-0.277355,0.529608}, + {-0.227798,1.212313}, + {0.286884,1.328657}, + {0.330357,0.676798}, + {-0.386855,-0.073008}, + {-0.005346,0.643306}, + {-0.408125,-0.611805}, + {-1.344349,1.214852}, + {0.280046,0.328383}, + {0.193258,0.841163}, + {0.688097,1.470022}, + {-0.543274,0.871549}, + {-0.243657,0.867887}, + {0.031152,0.192752}, + {-1.158627,-1.398383}, + {-0.797943,-0.620853}, + {0.551211,-1.681158}, + {0.057558,-1.031877}, + {-1.029493,0.639438}, + {0.099115,-0.246357}, + {0.343168,0.265658}, + {1.188859,1.031717}, + {0.126086,0.836314}, + {-0.606482,0.051107}, + {0.162957,-0.781010}, + {-0.462344,-0.438913}, + {-0.539638,0.657519}, + {0.022154,0.230604}, + {-0.843574,0.180764}, + {0.398755,-0.125898}, + {0.299966,-0.155337}, + {1.022899,-0.742968}, + {-0.807121,-0.640128}, + {-0.392841,-0.596371}, + {-0.360295,-1.003922}, + {0.679328,-0.665397}, + {-0.072668,1.290516}, + {-0.280499,-0.949490}, + {0.111927,0.581514}, + {-1.363240,-1.343656}, + {-1.084450,0.050768}, + {-0.385367,-0.565308}, + {0.202467,-1.237126}, + {-0.242867,0.417895}, + {-1.545462,-0.660856}, + {-0.215712,0.754475}, + {0.950926,0.189388}, + {-0.907607,-0.356709}, + {-0.018424,-0.492529}, + {0.592479,-0.228064}, + {-0.666301,-0.997495}, + {0.316365,2.371218}, + {0.234107,-0.170388}, + {-0.382072,-0.617266}, + {0.008455,0.054220}, + {0.391055,-0.070040}, + {-1.131104,0.097647}, + {0.114958,0.491805}, + {-1.828644,0.079717}, + {1.282146,0.110291}, + {0.357302,-0.071632}, + {-1.285120,-0.698425}, + {-0.620723,0.250825}, + {-1.580495,0.607744}, + {-0.310391,0.023209}, + {0.659152,-0.517724}, + {0.722716,0.407689}, + {-0.310078,0.307880}, + {-0.515929,-0.421393}, + {0.481648,-0.771808}, + {-0.613531,-0.311456}, + {-0.557038,0.487850}, + {0.240958,1.033137}, + {-0.411849,-0.652721}, + {-1.414977,1.570391}, + {0.198022,0.143388}, + {-0.665199,0.006710}, + {-0.125512,1.145256}, + {0.939666,-0.184737}, + {1.254756,0.210233}, + {-0.414391,-1.647095}, + {0.149630,0.144509}, + {0.288296,0.362648}, + {-0.017046,0.108292}, + {0.500758,1.194654}, + {-0.132504,0.838117}, + {0.436872,-1.259608}, + {0.185786,-0.150289}, + {0.570040,-0.268047}, + {-0.924944,0.709866}, + {0.460708,-0.753595}, + {1.505297,0.124422}, + {0.070403,0.380217}, + {-0.453289,-0.844383}, + {0.339141,0.421633}, + {-0.276216,0.254737}, + {-0.740343,0.477980}, + {-1.140554,0.373471}, + {-0.619092,-0.126768}, + {-0.106514,-0.394367}, + {1.219767,0.408088}, + {0.570849,0.749630}, + {0.279189,0.802048}, + {-1.761637,0.917490}, + {-0.125839,-0.480779}, + {-0.716519,-1.313543}, + {-0.886599,1.677483}, + {0.471796,0.455429}, + {0.472861,-0.700399}, + {0.630634,0.789490}, + {0.388011,0.023963}, + {0.160770,-0.328353}, + {0.684503,-0.912411}, + {-0.613712,-0.942848}, + {0.187679,-1.243436}, + {-0.303386,0.183180}, + {-0.430191,-0.919399}, + {-0.486669,0.017418}, + {-0.196664,-0.596788}, + {-0.016898,-0.305134}, + {-1.003277,0.875101}, + {0.016353,-0.323237}, + {0.821922,0.531172}, + {0.068244,-1.142754}, + {0.564201,-0.493468}, + {-0.108778,-0.451831}, + {-1.104421,-0.533559}, + {-0.190109,1.354647}, + {-1.625892,-0.106572}, + {0.053986,0.048085}, + {-0.078443,-0.504104}, + {-0.981755,0.138946}, + {-0.089922,0.305097}, + {-2.134689,-0.514083}, + {-0.557133,1.367571}, + {-0.124624,0.607339}, + {-1.498195,-1.186483}, + {-0.872943,-0.334031}, + {0.433069,0.253202}, + {0.748849,0.097565}, + {0.431413,-0.732537}, + {0.468929,0.578734}, + {-1.277818,0.672101}, + {0.471820,-0.460997}, + {0.494373,0.102286}, + {-0.141118,0.866229}, + {-0.347544,-0.467992}, + {-0.772585,0.634551}, + {-0.968830,-0.935472}, + {-0.019241,0.227594}, + {-0.813687,0.776289}, + {-0.124640,0.511015}, + {0.045039,0.998667}, + {0.160430,-0.284327}, + {-0.252488,-0.276808}, + {-1.446518,-0.593809}, + {0.444264,-0.215641}, + {-0.495694,1.313423}, + {0.233200,0.628049}, + {1.058397,-0.209975}, + {-0.631813,0.212791}, + {0.724289,0.730092}, + {0.766557,0.140992}, + {-0.422498,-0.065908}, + {0.759667,-0.394613}, + {-0.280825,-0.249983}, + {-0.334594,-0.099555}, + {-0.100845,-0.279454}, + {-0.631641,-0.001709}, + {-0.390891,0.591299}, + {-0.614147,-0.867562}, + {0.794232,0.262570}, + {-0.855585,-0.445803}, + {0.137634,-0.208739}, + {0.735539,-0.285394}, + {0.254964,-1.231606}, + {0.529011,0.143706}, + {1.430450,-0.392117}, + {0.441543,-0.753268}, + {-0.215594,0.692776}, + {0.235193,1.031127}, + {-0.658717,-0.573607}, + {-0.945679,-1.445653}, + {-0.416275,0.659500}, + {0.907194,0.304227}, + {-0.031342,0.374716}, + {0.005759,-0.770302}, + {-0.877440,-0.213883}, + {-0.710438,-0.089993}, + {-0.417193,-0.780149}, + {0.281753,-1.127371}, + {0.074096,0.751776}, + {-1.369300,-0.313873}, + {0.975236,-0.674780}, + {-0.395840,0.453994}, + {0.229087,-0.431998}, + {0.686648,-0.040472}, + {-1.932872,-2.114067}, + {-0.053147,0.889797}, + {1.557776,0.187376}, + {-0.177372,-0.372058}, + {-0.145758,-0.406644}, + {0.893661,-0.736872}, + {0.699794,-0.837986}, + {0.562408,-1.315862}, + {0.248331,0.796103}, + {-0.974681,-0.545749}, + {-0.633997,-0.920930}, + {-0.653344,-0.148806}, + {-0.278669,-1.016823}, + {0.990752,0.282628}, + {-0.002135,0.295268}, + {0.247889,-0.002233}, + {0.299683,0.464098}, + {-0.348562,0.234081}, + {-0.653547,1.042115}, + {1.427451,-0.211486}, + {-0.249740,0.299611}, + {0.236624,-0.236593}, + {0.361321,-0.011710}, + {0.225996,-0.116814}, + {0.665416,-0.154760}, + {-0.343271,0.309692}, + {0.214282,0.840876}, + {0.436174,0.465315}, + {0.491642,-0.396010}, + {-0.840432,0.546308}, + {-0.484284,-0.253952}, + {-0.674070,0.614429}, + {-1.132196,0.300718}, + {-0.686720,-0.668618}, + {-0.209752,-0.193816}, + {-0.864450,0.711636}, + {-0.704162,0.080921}, + {-0.281052,-0.711402}, + {0.476961,-0.296571}, + {-0.567590,0.120557}, + {1.206292,-0.739669}, + {0.073467,0.983447}, + {-0.761649,-0.205547}, + {-0.101813,-0.757212}, + {-0.036924,-1.095216}, + {-0.203280,0.087312}, + {0.419187,0.045301}, + {-0.128742,0.611231}, + {0.002422,-0.752412}, + {0.674792,0.880037}, + {-0.130573,-0.395283}, + {0.043261,0.842507}, + {0.744393,0.440538}, + {0.327633,0.077634}, + {-0.173323,1.100831}, + {-0.364820,0.190809}, + {-0.929120,0.340176}, + {0.083238,-0.252833}, + {-0.812169,1.206466}, + {-0.658568,0.595224}, + {-1.328600,0.526328}, + {-2.155765,1.269370}, + {-0.046160,-0.114023}, + {0.293193,-0.938083}, + {-0.254478,-1.169655}, + {0.586072,0.064899}, + {-0.826939,0.519365}, + {0.000194,-0.042804}, + {0.703387,0.425636}, + {-0.071028,0.344410}, + {-0.690411,-0.426178}, + {-0.305423,-0.957584}, + {0.565793,0.471864}, + {0.572453,-1.210154}, + {-0.176756,-0.543416}, + {-0.122719,0.142358}, + {0.041164,-0.689254}, + {0.488677,0.046068}, + {0.272934,-0.298194}, + {0.056580,-0.113747}, + {-0.586258,-0.393607}, + {0.449298,0.411649}, + {0.222406,0.339896}, + {-0.259049,0.537135}, + {-0.162509,1.788969}, + {0.261787,-1.022771}, + {0.342338,0.185518}, + {0.579314,-0.173051}, + {-0.141523,-0.044285}, + {0.193116,-0.235134}, + {-1.353094,-1.018692}, + {-0.436509,0.480147}, + {0.110273,0.018753}, + {-0.074405,0.256683}, + {-0.246641,-0.072741}, + {0.193535,0.110739}, + {0.236249,0.450123}, + {-1.328284,0.200608}, + {0.203875,0.971534}, + {0.140868,0.836049}, + {-1.180779,-0.571187}, + {0.352527,-0.941286}, + {-0.603336,1.499530}, + {-1.722024,-0.622489}, + {-0.665516,0.309695}, + {-0.196527,0.388266}, + {0.748597,0.328682}, + {-0.700676,-0.457945}, + {0.241755,0.916166}, + {-1.055948,0.612258}, + {-0.088514,-1.051597}, + {-0.666181,-0.503929}, + {-0.373979,0.896727}, + {-0.372882,-0.074176}, + {-0.109262,0.026398}, + {0.140324,0.378864}, + {-0.019849,-1.097344}, + {0.235596,-0.286668}, + {0.782230,-0.389778}, + {0.013781,-0.571368}, + {0.789306,0.647173}, + {0.630138,0.773210}, + {0.750400,-1.183298}, + {-0.682019,-1.609188}, + {0.896088,0.067930}, + {0.420614,-0.078741}, + {-1.496000,0.450049}, + {-0.863680,-0.475229}, + {-1.423561,-0.224888}, + {0.024832,-0.453597}, + {0.737548,0.300150}, + {-0.738513,0.671116}, + {0.789577,-0.557279}, + {0.667659,-0.837533}, + {0.440875,-1.043855}, + {-0.051215,-1.357721}, + {0.359163,-1.468140}, + {-0.336103,-0.186086}, + {-1.253254,0.917832}, + {-0.307426,0.767409}, + {-0.567196,0.228002}, + {-0.028435,0.944140}, + {0.222374,0.474538}, + {1.165054,-0.954027}, + {0.925421,0.519574}, + {-0.072758,-0.302302}, + {0.298489,0.526333}, + {0.559091,-0.004799}, + {0.661053,-0.291473}, + {0.589520,-0.043129}, + {0.486342,-0.102644}, + {0.399697,0.607928}, + {-1.591074,0.238188}, + {0.864441,0.826969}, + {-0.717594,0.995645}, + {0.335125,1.336621}, + {-0.374524,0.390990}, + {-0.010197,0.428746}, + {-0.061779,0.352761}, + {-1.529446,-0.080619}, + {0.588116,1.395893}, + {-0.455056,0.445153}, + {-0.217297,1.396009}, + {-0.657833,-1.016368}, + {-1.806291,0.038937}, + {0.002294,-0.394349}, + {-0.774411,1.119519}, + {-0.807535,0.342889}, + {-0.122509,0.143458}, + {-1.612262,0.133762}, + {-0.704500,-0.634429}, + {0.421355,1.477149}, + {-0.346425,1.488303}, + {-0.320905,1.385086}, + {0.517736,1.018882}, + {-0.698406,-0.561933}, + {0.455363,1.519318}, + {-1.529130,-0.417045}, + {1.090679,1.108610}, + {0.054188,0.538953}, + {0.034975,0.942247}, + {1.127053,-1.169750}, + {0.347556,0.169247}, + {-0.388350,-0.124856}, + {0.119545,0.172064}, + {0.335029,-0.074899}, + {-0.071492,0.385402}, + {0.701349,0.030827}, + {0.272265,0.385385}, + {-1.295989,-0.440285}, + {-0.016185,-0.292499}, + {-0.425862,0.192669}, + {-0.474981,1.023225}, + {0.378090,-0.085647}, + {-1.380673,-0.172079}, + {0.267498,-0.609266}, + {-0.174361,-0.720071}, + {-0.903868,0.497839}, + {-0.754455,0.498984}, + {0.333531,0.300701}, + {0.570416,0.121552}, + {-0.856487,1.273007}, + {0.864065,0.677483}, + {-0.359296,-0.764656}, + {0.373897,-0.165979}, + {0.004695,1.059938}, + {-0.205988,0.159122}, + {0.240554,-0.757747}, + {-2.731705,-1.090066}, + {0.196211,-0.214263}, + {-1.060994,0.303117}, + {0.065935,-1.370273}, + {0.147199,0.460440}, + {-1.434710,-0.211987}, + {0.506390,0.291023}, + {-0.385415,0.150877}, + {-0.058076,0.033607}, + {-0.040447,0.121214}, + {0.217183,0.381020}, + {0.008537,0.171304}, + {-0.793652,0.273910}, + {-0.113031,-0.165199}, + {-0.137888,-0.411958}, + {0.129773,1.543414}, + {0.026013,1.008311}, + {0.859350,0.590368}, + {0.137087,-0.138097}, + {0.273403,-0.938621}, + {0.365497,-0.156764}, + {0.670901,0.144948}, + {0.356986,-0.869288}, + {-0.882520,-0.440277}, + {0.462818,0.724776}, + {-0.573334,-0.513149}, + {-0.216443,-1.260162}, + {-0.037775,0.735246}, + {-0.374519,0.457316}, + {0.058640,-0.761478}, + {-0.440620,-0.890988}, + {-0.052313,-0.360096}, + {-0.537367,0.085238}, + {-0.894927,-0.267870}, + {-0.710221,-0.890203}, + {-1.603747,1.430830}, + {1.840006,1.279425}, + {0.449807,0.176538}, + {0.071127,-0.599730}, + {0.340974,0.830768}, + {0.167339,0.262566}, + {-0.519153,-0.781460}, + {-0.953526,-0.572926}, + {-0.718084,1.342914}, + {0.887380,-0.767601}, + {-0.500773,-1.256327}, + {-0.504054,-0.387444}, + {-0.423248,0.941044}, + {-0.075436,-0.011957}, + {0.778830,-0.741112}, + {0.527124,1.470712}, + {-0.061345,0.245175}, + {-0.108031,-0.165018}, + {0.089631,-0.062024}, + {-0.079677,-0.101521}, + {-0.396044,-0.025846}, + {0.849632,0.900182}, + {0.614655,-0.309219}, + {-0.168051,0.184285}, + {0.629810,-0.125703}, + {-0.626641,-0.299066}, + {-0.766331,0.668178}, + {1.026631,0.970999}, + {1.056465,0.385935}, + {0.034025,0.934794}, + {1.049357,-1.364552}, + {-0.307284,0.554048}, + {-0.124591,0.459456}, + {0.634236,0.196816}, + {0.846920,-0.870074}, + {0.377849,-0.151186}, + {0.010945,0.711493}, + {-0.143725,-0.331314}, + {-0.428652,0.812929}, + {-0.507231,0.476529}, + {0.822266,-0.169064}, + {-0.312591,0.878717}, + {0.126182,-0.185989}, + {1.011325,0.536978}, + {0.511545,1.633077}, + {-1.054305,0.395063}, + {1.824536,0.854489}, + {-1.843423,1.187168}, + {-0.260379,0.320860}, + {0.762158,0.289641}, + {0.273799,-0.015125}, + {0.406928,0.953909}, + {-0.053545,-0.024161}, + {-0.636427,-0.198150}, + {-0.601937,-0.004703}, + {0.117514,-0.399147}, + {0.147300,-0.182524}, + {0.117742,-0.391568}, + {0.598795,-0.217514}, + {-0.530160,-1.275872}, + {-0.448360,0.509787}, + {-0.231334,0.208376}, + {0.653553,-0.510494}, + {-0.469246,-0.599648}, + {0.223253,-0.260082}, + {0.425304,-1.320700}, + {-1.013285,-0.561188}, + {-0.649321,0.686967}, + {-1.283270,-0.227414}, + {-0.186007,0.368703}, + {-0.136933,-0.192889}, + {1.185159,0.545198}, + {1.216968,0.689015}, + {0.910311,-0.002513}, + {-0.253238,-0.334718}, + {-0.272165,0.329764}, + {0.419154,0.171196}, + {0.856108,-0.866033}, + {-0.363408,-1.279964}, + {-0.323154,1.229737}, + {0.515595,0.771904}, + {-0.113071,0.472993}, + {-1.090156,-0.702003}, + {-0.615317,0.258520}, + {-1.389988,0.090579}, + {0.227189,1.873838}, + {0.238943,1.189236}, + {0.997707,-0.750336}, + {-0.168988,1.198045}, + {-0.908115,-0.325316}, + {-0.276129,-0.887500}, + {-0.193721,0.061984}, + {0.372694,-1.067987}, + {-0.021077,-1.086837}, + {-0.355942,-0.129020}, + {0.601311,0.890568}, + {0.458201,0.949799}, + {0.477640,0.087344}, + {0.024384,0.268283}, + {-0.314620,0.511970}, + {0.208499,-0.010617}, + {1.054139,-0.793165}, + {0.712241,0.313028}, + {0.095001,0.032736}, + {-0.050507,-0.099467}, + {0.966046,-0.046950}, + {0.735177,-0.035276}, + {1.216582,-0.536102}, + {0.579388,0.044030}, + {-0.031001,-1.871012}, + {1.061978,-0.288872}, + {-0.504246,-0.401761}, + {-0.562567,-0.284664}, + {-0.275011,-0.021875}, + {-0.393798,0.931489}, + {0.006711,0.841041}, + {0.402936,0.199119}, + {0.107574,-1.388760}, + {-0.230410,0.022241}, + {-0.191842,-1.192988}, + {1.171249,0.021609}, + {0.716926,0.486816}, + {0.145686,0.517127}, + {-1.328921,0.377331}, + {0.851484,-1.077027}, + {-0.182252,-0.973016}, + {0.547530,0.307628}, + {0.752337,0.227463}, + {-0.943868,-1.105141}, + {0.051322,1.847229}, + {0.162891,1.662704}, + {0.215910,0.074535}, + {0.968104,-0.819955}, + {0.398545,0.106263}, + {0.311276,0.300695}, + {0.553913,1.407050}, + {-0.074835,-0.314706}, + {-0.756606,-0.249815}, + {-0.007184,0.241820}, + {-0.903521,-1.140063}, + {-0.347949,0.735517}, + {-1.520924,-0.054318}, + {-0.336836,-1.417745}, + {0.668140,-0.550144}, + {-0.813826,-0.378920}, + {-1.142460,-0.895100}, + {-0.464542,0.305670}, + {-0.803636,0.464800}, + {-0.519269,0.330770}, + {-0.744446,0.223551}, + {0.133873,0.641134}, + {-0.234319,-0.617046}, + {0.237105,0.190497}, + {-0.207124,0.186992}, + {-0.222716,-0.026379}, + {0.616382,0.940631}, + {-0.202311,0.380659}, + {0.365658,0.144009}, + {1.794867,-0.495343}, + {0.500606,-0.433379}, + {0.363196,-0.689170}, + {-0.025768,0.286324}, + {-0.868493,1.012894}, + {0.110665,-0.207569}, + {-0.041372,1.248633}, + {0.885087,-0.488457}, + {0.910808,0.069023}, + {0.693604,-0.067264}, + {0.566380,0.592366}, + {1.130313,-0.894986}, + {0.853269,1.224186}, + {0.451775,0.907155}, + {-0.899638,-0.755130}, + {0.009159,-0.715130}, + {0.725935,-0.067967}, + {-0.648557,-0.976766}, + {-0.215151,-0.130206}, + {-0.882912,1.101720}, + {0.549423,1.141824}, + {0.091037,-1.123045}, + {0.851998,-1.088543}, + {0.671949,-0.768697}, + {-0.026212,-0.142371}, + {0.188458,0.044498}, + {1.035851,0.732378}, + {0.496930,0.763086}, + {0.620814,-0.084441}, + {-0.816705,-1.005846}, + {0.129933,0.607144}, + {-0.335244,0.079260}, + {0.062206,0.842265}, + {0.342883,0.267645}, + {-0.570073,0.645440}, + {-0.179948,-0.386216}, + {-0.767378,0.206902}, + {0.759143,-0.306648}, + {0.482275,0.475103}, + {0.825030,-0.514951}, + {-1.028938,-0.819744}, + {1.732835,0.066877}, + {0.450762,-0.541033}, + {-0.616540,-0.408825}, + {0.089601,-0.831240}, + {-0.716228,-0.620456}, + {-0.045554,1.373536}, + {0.723475,0.165982}, + {0.238882,-0.391897}, + {1.879258,0.418675}, + {-0.908657,0.808384}, + {-0.286725,0.203416}, + {0.622622,1.988791}, + {-0.204689,0.503124}, + {-0.840514,-1.052989}, + {0.109104,-0.491465}, + {-0.458429,-0.890611}, + {-0.040308,0.387025}, + {0.334213,0.845817}, + {-0.485131,1.161892}, + {-0.154884,-0.021494}, + {0.901447,0.368832}, + {-0.577289,0.422688}, + {0.066667,0.480205}, + {0.497143,1.273457}, + {0.411773,-0.013752}, + {0.663922,0.240592}, + {0.147365,-0.939324}, + {0.265064,-0.679686}, + {0.080121,-0.490473}, + {0.405063,-0.141264}, + {1.250869,-1.013448}, + {-1.771650,-0.026840}, + {-0.214699,-0.238854}, + {0.153398,0.152295}, + {-0.332406,0.850663}, + {0.082405,0.034282}, + {-0.778027,1.776842}, + {1.119535,0.093578}, + {0.405343,0.144457}, + {0.318296,-1.045619}, + {0.894029,-0.789367}, + {-0.705205,-0.559302}, + {-0.583245,-0.587218}, + {-1.732809,0.502952}, + {-0.072216,-0.619449}, + {-1.005389,-1.337074}, + {-0.925036,-1.050076}, + {-0.849897,1.451525}, + {-0.640269,-0.536556}, + {0.280792,-0.596720}, + {-1.731763,-1.392341}, + {0.225837,-1.310780}, + {-0.855570,0.357171}, + {-0.596824,0.705603}, + {1.015263,-0.013845}, + {-1.378102,-0.871470}, + {-0.037446,-0.148328}, + {-1.100256,-0.404901}, + {0.618017,-0.193406}, + {-0.165397,0.385855}, + {1.048162,1.070281}, + {0.913836,0.796236}, + {-0.470200,-0.595482}, + {0.435984,0.550976}, + {0.991639,0.713741}, + {1.354705,0.236459}, + {-0.514888,0.034946}, + {0.447832,-0.324686}, + {-0.324818,0.064890}, + {0.512776,-1.010271}, + {0.644555,1.172259}, + {-0.884525,0.399588}, + {0.106287,-0.599133}, + {0.245535,0.597192}, + {-0.128277,0.432917}, + {0.307422,-0.650546}, + {0.870460,0.392310}, + {-0.236295,0.161812}, + {-0.905288,0.260416}, + {-0.288011,-0.014239}, + {-0.391415,-0.625783}, + {1.255478,-0.407403}, + {1.023093,0.311064}, + {0.059888,-2.054203}, + {0.200850,0.982033}, + {0.936100,0.701518}, + {-0.629761,0.267995}, + {1.891356,-0.312648}, + {0.084493,0.120200}, + {0.658455,0.408385}, + {0.401558,-0.236054}, + {0.213266,-0.339748}, + {0.249614,1.030643}, + {0.861996,-0.401135}, + {-0.645997,-0.919200}, + {0.345041,-0.019794}, + {0.422888,-1.570761}, + {-0.728576,-0.302344}, + {0.698979,0.162284}, + {0.432374,-0.278804}, + {0.288216,-0.280750}, + {0.692058,-0.788072}, + {-0.513736,0.160921}, + {-0.484442,0.091290}, + {0.217502,0.258031}, + {-0.564786,-0.078785}, + {0.773842,-0.205731}, + {0.496951,0.661244}, + {0.703862,0.256431}, + {0.417277,-0.643702}, + {0.030253,0.964357}, + {0.487751,-0.148838}, + {0.603282,0.729704}, + {0.623268,-1.087961}, + {0.673468,0.933167}, + {-0.456305,0.170897}, + {-0.397510,-0.674178}, + {-0.320248,0.681368}, + {0.138825,0.000576}, + {-0.706556,0.500306}, + {-0.180191,-0.216743}, + {-1.383253,0.599270}, + {-0.024074,0.774923}, + {0.117188,0.327920}, + {-0.897107,-0.217729}, + {0.780948,-1.488166}, + {-0.189833,-1.665574}, + {0.160742,0.396893}, + {0.132436,-0.269463}, + {-0.477604,0.319153}, + {-1.594824,-0.229696}, + {-1.033510,0.226079}, + {-0.375408,0.377189}, + {0.203341,-0.627341}, + {0.000475,-0.876883}, + {-0.354389,-0.692829}, + {0.902375,0.537518}, + {0.765544,1.350291}, + {0.617121,0.549060}, + {0.191055,-1.656615}, + {-0.637320,0.461113}, + {-0.139140,0.405568}, + {0.338228,0.190319}, + {-0.111718,0.427500}, + {-0.607051,-0.223998}, + {-0.256013,-0.126726}, + {-0.460717,0.657032}, + {-0.264035,0.642030}, + {-0.480224,-0.125524}, + {-1.104871,-1.244684}, + {0.794316,-0.618685}, + {-1.325048,0.625898}, + {-0.609105,-0.317561}, + {-0.110370,0.574926}, + {-0.079341,-0.941059}, + {1.123131,0.516150}, + {0.646988,-0.799697}, + {-0.528347,0.716934}, + {-1.297124,0.049700}, + {0.952649,-0.161405}, + {0.104493,-0.030703}, + {-1.168308,1.727449}, + {0.676470,0.693357}, + {-0.412443,0.253094}, + {-0.447798,0.038550}, + {-0.228133,0.125712}, + {0.274084,-0.664014}, + {-1.273383,-0.516870}, + {0.331193,-0.663290}, + {0.834921,-1.083132}, + {-0.016795,0.063665}, + {0.463293,0.100810}, + {-0.222092,-1.166433}, + {-0.045631,-0.035269}, + {-0.045329,-0.674897}, + {-0.784392,-1.057570}, + {-0.329826,0.339698}, + {1.178970,0.965670}, + {-0.300943,-0.650654}, + {0.152251,-0.474047}, + {-0.578936,-0.462915}, + {0.349399,-0.057776}, + {0.102065,-0.396655}, + {0.217686,0.393256}, + {-1.565998,-0.678150}, + {-0.317381,0.390873}, + {0.032866,0.637578}, + {-0.462473,-1.228468}, + {0.037433,-0.126953}, + {-0.219955,-0.079598}, + {0.986041,-0.242647}, + {0.981236,-0.308921}, + {-0.714607,0.747562}, + {0.878252,0.290233}, + {-0.013550,-0.801533}, + {-0.837193,-0.073407}, + {0.004598,-0.299227}, + {0.718243,-0.521436}, + {-1.411477,0.345819}, + {-0.185560,0.407726}, + {-0.645613,0.341977}, + {-0.144282,-0.130033}, + {0.170185,0.210823}, + {0.648260,0.522148}, + {0.163927,0.452781}, + {0.091997,-1.512229}, + {-0.925560,0.389415}, + {0.396382,-0.605291}, + {-0.206984,0.810648}, + {0.605544,-0.329259}, + {-0.496895,-0.433621}, + {0.821201,-0.159951}, + {-0.287604,-0.461316}, + {0.269550,-0.172898}, + {0.223504,-0.519438}, + {-1.219596,-1.509329}, + {-1.177703,0.106731}, + {-0.614510,-2.303451}, + {-0.508790,-0.814873}, + {-0.235748,-0.655716}, + {0.675918,0.241968}, + {0.848823,0.109502}, + {-0.339173,0.251667}, + {-0.907714,0.025476}, + {1.135073,-0.983344}, + {0.597885,0.092979}, + {0.775967,0.017399}, + {-2.228663,-0.026600}, + {0.991905,1.087891}, + {-1.345601,0.617191}, + {0.369217,-0.003157}, + {0.380365,-0.183456}, + {1.141741,-0.120062}, + {0.208724,0.917995}, + {-0.751646,1.025081}, + {-0.244497,-1.070647}, + {-0.426150,-0.441223}, + {-0.083133,0.600314}, + {-0.639394,-0.449710}, + {-0.227868,-0.052185}, + {0.039466,0.902238}, + {-0.228256,0.424697}, + {-1.264894,1.007502}, + {0.025662,-1.050856}, + {-0.853853,-0.077905}, + {-0.283073,0.020308}, + {0.102863,0.285404}, + {-0.729183,-0.883586}, + {0.488278,-0.537274}, + {-0.638371,0.705178}, + {0.257958,0.187060}, + {1.876355,-0.296744}, + {-0.029220,0.081046}, + {-1.202058,0.013792}, + {0.143679,-0.221348}, + {0.813612,1.334167}, + {-0.308881,0.009709}, + {0.744881,0.191344}, + {0.703735,0.479720}, + {0.916091,0.301598}, + {0.229351,0.527300}, + {0.608015,1.084639}, + {-0.028380,0.179041}, + {0.741942,0.210321}, + {-0.441117,2.019392}, + {0.287010,1.148982}, + {0.751560,-0.634404}, + {0.633605,-0.574008}, + {0.254998,0.117379}, + {1.321661,-0.738031}, + {-0.086967,-0.576727}, + {0.357126,0.432979}, + {-0.743290,0.811585}, + {-0.501911,0.783671}, + {-0.187481,0.444391}, + {0.175805,0.576845}, + {0.749123,0.582751}, + {-1.669288,-1.212711}, + {-0.024771,0.530228}, + {-0.600212,0.278748}, + {0.380659,0.552119}, + {-0.054384,-0.183081}, + {-0.577043,1.758637}, + {-1.290098,-0.034919}, + {-0.626743,-0.901914}, + {0.548593,0.563251}, + {-1.189395,-0.111436}, + {0.672192,0.884066}, + {0.490141,-0.258325}, + {1.522702,-0.355020}, + {0.280899,0.463460}, + {0.297340,-0.975150}, + {-0.783965,-0.193888}, + {0.116301,-0.696152}, + {-0.613030,0.111460}, + {-1.438732,-0.335699}, + {0.152343,0.580044}, + {0.174164,-0.175062}, + {-0.148853,-0.874012}, + {0.175072,0.017771}, + {0.358267,0.083250}, + {-1.047536,0.175354}, + {-0.048482,-0.104485}, + {0.180338,0.466878}, + {-0.062379,-0.997160}, + {-0.737199,-0.210693}, + {0.536667,0.012390}, + {0.013080,-0.896293}, + {-1.111020,0.036888}, + {-0.592474,-0.623239}, + {-0.587658,-1.419053}, + {0.481731,0.315493}, + {0.239846,0.451458}, + {-0.107999,-0.142484}, + {-0.238403,0.700594}, + {0.326648,0.295695}, + {0.709781,-0.414870}, + {-0.303296,-0.812312}, + {0.605543,-1.441576}, + {0.046576,0.392842}, + {0.391747,1.805781}, + {-0.610474,-0.502987}, + {-0.084417,-0.635316}, + {-0.117791,-0.511594}, + {1.263054,-0.152197}, + {0.036088,-1.413123}, + {-1.142865,0.441812}, + {0.670441,-1.734080}, + {-0.655343,-0.321802}, + {0.441931,-0.212622}, + {0.368448,-1.376489}, + {0.216562,-0.500590}, + {0.430320,0.433900}, + {0.910263,0.145197}, + {0.261373,-0.024356}, + {-0.931035,-1.031641}, + {0.071638,-0.030381}, + {1.047164,-0.390936}, + {0.786061,0.374129}, + {0.399636,-0.470714}, + {-0.828217,0.411402}, + {0.402586,0.304012}, + {0.173574,-0.061146}, + {0.718928,0.903788}, + {0.757697,-0.340347}, + {0.311022,-0.630422}, + {-0.320119,0.438468}, + {0.213126,0.315590}, + {-0.367474,-0.858977}, + {-0.364710,-0.211865}, + {-0.088531,-0.338955}, + {-0.426875,-1.259798}, + {0.017767,0.903531}, + {-1.317742,-0.291868}, + {-0.021616,-0.223357}, + {-0.466416,-0.982947}, + {-0.723046,-0.216801}, + {-0.506496,-1.256971}, + {-0.876586,-0.668156}, + {0.799653,0.883145}, + {-0.116016,-0.230735}, + {0.153892,0.245910}, + {-1.493473,-0.543369}, + {-0.104258,0.937885}, + {0.145870,-0.862457}, + {0.004280,0.091261}, + {-0.201859,0.062320}, + {1.434108,0.390146}, + {0.223945,-0.417881}, + {-1.429893,-0.221635}, + {-0.263642,-0.043051}, + {-0.301817,-0.656976}, + {-0.055533,-0.422469}, + {-0.170936,0.094114}, + {0.920585,-0.536474}, + {-0.244583,0.125218}, + {-0.398405,-0.673800}, + {-0.648268,-0.174215}, + {0.104402,-0.545924}, + {1.039966,-0.450643}, + {0.454026,-0.007051}, + {-1.348483,0.435892}, + {-1.154315,0.012219}, + {0.586239,-0.790228}, + {0.420334,-0.425579}, + {-0.695935,0.400174}, + {-0.324462,-0.569611}, + {-0.891715,1.286844}, + {-0.225809,-0.497207}, + {-0.877583,-0.401090}, + {-0.230709,-0.162162}, + {0.040464,0.348907}, + {-0.431771,0.340009}, + {0.045460,-0.714410}, + {-0.216520,-2.046873}, + {0.804486,0.379955}, + {0.107529,0.317036}, + {0.349638,-1.542756}, + {0.112593,0.633379}, + {0.245919,-1.442921}, + {1.226988,0.413531}, + {-0.216186,-1.098418}, + {-0.592056,-0.703833}, + {-0.461250,1.152356}, + {-0.451106,-1.041155}, + {0.758497,-0.026281}, + {0.580829,0.434704}, + {-0.244442,-1.287007}, + {0.871367,-0.668387}, + {-0.252397,-0.492179}, + {-0.105915,0.221225}, + {-0.396868,0.424444}, + {0.468587,-0.808788}, + {-0.332904,0.334434}, + {-0.300457,-0.004120}, + {0.200741,0.652505}, + {-0.290567,0.311535}, + {-0.596088,-0.685691}, + {0.383474,-0.564410}, + {0.365202,-0.520154}, + {0.303368,0.394516}, + {0.156166,0.414418}, + {-1.362271,-0.651302}, + {-0.565455,0.543162}, + {-0.528145,0.145123}, + {-1.176076,-1.178721}, + {0.086984,-0.105966}, + {-0.021746,-0.978670}, + {0.518625,0.155903}, + {-1.258329,0.223466}, + {0.130332,-0.419232}, + {0.563122,0.231711}, + {0.306401,-0.507524}, + {-1.053291,1.560204}, + {0.047668,0.546148}, + {0.948363,0.284353}, + {0.672895,0.507781}, + {-1.334744,-0.168633}, + {-1.208243,0.148212}, + {-0.848912,0.415874}, + {0.843947,0.736823}, + {-1.158485,0.210237}, + {-0.099862,1.120765}, + {0.337771,0.007164}, + {-0.469080,0.520155}, + {-0.100074,-1.349217}, + {-0.157844,0.287353}, + {-0.779996,0.294751}, + {0.073369,0.492718}, + {-0.464267,0.726453}, + {-0.462696,-0.741070}, + {0.023056,1.172214}, + {0.224251,0.025615}, + {-0.336091,-0.276409}, + {0.473509,-0.561504}, + {0.845649,-0.907685}, + {0.627133,-0.351774}, + {-0.990811,-0.590419}, + {-0.172712,-0.470133}, + {0.723323,-0.199676}, + {-0.307695,-0.713114}, + {-0.083497,0.329677}, + {-0.518250,0.421263}, + {0.084627,0.104033}, + {-0.333341,0.047107}, + {-1.401702,0.346693}, + {-1.554243,-0.861078}, + {0.326409,-0.263726}, + {-0.100557,-0.931537}, + {1.703162,0.946824}, + {-0.198882,-0.911880}, + {-0.506174,-0.771035}, + {-0.827505,0.609437}, + {0.673322,-0.205578}, + {-0.806857,-0.975934}, + {0.294299,0.863600}, + {-0.008905,0.140791}, + {-0.175659,-0.263704}, + {0.242597,-0.175465}, + {0.581556,-0.693348}, + {0.221080,-0.123343}, + {0.864177,1.380508}, + {-0.485638,-0.235111}, + {0.019145,-0.507227}, + {1.115591,1.035217}, + {-1.242264,-0.613672}, + {0.528370,0.525414}, + {-0.389619,-0.519511}, + {-0.156849,-0.205102}, + {-0.985984,-1.423871}, + {0.517087,-0.357108}, + {-0.199417,-0.794782}, + {0.201648,-0.957863}, + {0.127940,-0.981328}, + {-0.892293,-0.484381}, + {-0.246429,-0.134570}, + {-1.208455,1.697750}, + {0.005429,0.475156}, + {1.495576,-0.048856}, + {-0.532713,0.246399}, + {0.020822,0.397247}, + {-0.943340,0.215974}, + {0.091969,0.698433}, + {-0.605709,-0.662562}, + {-0.662931,0.331181}, + {0.510917,-0.498797}, + {-0.070321,-0.339604}, + {-0.828848,0.232796}, + {0.637634,0.622874}, + {-0.384873,0.201997}, + {0.762228,-0.732545}, + {-0.051603,-0.149058}, + {0.029130,0.529245}, + {0.834301,0.594478}, + {-0.261223,-0.069449}, + {-1.302920,-0.290366}, + {-0.609619,-0.588839}, + {0.497506,0.424783}, + {-0.187720,0.612541}, + {0.017128,0.698742}, + {-1.811540,-0.055316}, + {0.862133,-1.369530}, + {1.262000,-0.131324}, + {1.156433,0.484189}, + {-0.076493,-0.424579}, + {-0.130062,1.379691}, + {0.833397,0.567487}, + {0.078902,0.473863}, + {0.055890,-0.769505}, + {0.060725,-0.404843}, + {0.000445,0.737484}, + {-0.625014,-0.395060}, + {-0.753279,-0.276740}, + {1.520089,1.037106}, + {-0.319487,1.277601}, + {0.118810,1.297974}, + {-0.215298,-0.455871}, + {0.254708,0.218111}, + {0.418569,-0.707815}, + {-1.185689,0.006936}, + {0.123850,0.442040}, + {-0.408899,0.843042}, + {-0.086253,-0.322820}, + {-1.244809,-0.408063}, + {-0.152610,0.218428}, + {-0.304509,0.721444}, + {-0.223893,-0.198213}, + {0.161462,0.965719}, + {-0.016545,-0.046833}, + {0.014223,0.409396}, + {1.975500,-1.416411}, + {0.987470,-0.295333}, + {1.392536,-0.339042}, + {-1.772024,1.071792}, + {0.561628,0.260545}, + {-0.614207,0.253911}, + {0.255899,0.338669}, + {-0.545300,0.377977}, + {-0.781682,-0.308513}, + {-0.473559,0.115544}, + {0.970356,0.389522}, + {1.340998,0.204031}, + {0.636971,-0.691872}, + {1.087438,-0.703128}, + {0.335864,-0.678190}, + {-0.567828,-0.567210}, + {-0.650808,0.427866}, + {-0.267197,-0.819795}, + {-0.757122,-1.946263}, + {-0.479753,-0.686059}, + {-1.058098,-0.284788}, + {-0.601739,-1.515210}, + {0.613674,0.326730}, + {1.501791,-0.056387}, + {-0.990549,0.002105}, + {-0.865560,-0.308869}, + {0.464395,-0.231092}, + {-0.644999,0.444856}, + {0.545002,-0.193149}, + {0.447797,-0.492268}, + {-0.421009,-0.021117}, + {-0.190813,0.311118}, + {0.467296,0.294717}, + {0.154595,1.419043}, + {0.281873,0.405801}, + {-1.053144,0.367926}, + {0.048581,1.905063}, + {-0.637562,-0.469837}, + {0.650205,-1.538225}, + {-0.885319,-0.085329}, + {-0.052037,0.098850}, + {-1.205488,0.099386}, + {1.421300,-0.337389}, + {0.163746,1.595691}, + {0.316168,0.058669}, + {0.901451,-0.757891}, + {0.374950,0.220098}, + {0.289515,-0.754124}, + {-0.344068,-0.343308}, + {0.232374,0.263313}, + {2.246893,0.378554}, + {-0.376969,0.322563}, + {0.709981,-1.565807}, + {-0.784404,0.311436}, + {-0.414114,0.191005}, + {-0.912873,-1.111710}, + {0.022198,1.018839}, + {-1.388431,-0.029500}, + {1.318379,0.695939}, + {0.832088,-0.225946}, + {-0.685464,1.189551}, + {-1.724108,0.128743}, + {-0.267640,0.820472}, + {0.369300,1.266272}, + {-0.485413,-1.174063}, + {-1.258036,0.730961}, + {-1.037161,-0.806028}, + {-1.128983,-0.308337}, + {0.655767,-0.390841}, + {-0.343421,0.248034}, + {0.458703,-0.580272}, + {-0.309516,-0.875010}, + {0.612543,0.577868}, + {0.291884,0.221870}, + {0.556053,0.899818}, + {-0.155180,-0.104632}, + {0.342271,0.297307}, + {0.201082,0.328868}, + {1.519672,-1.255112}, + {-0.277044,0.809604}, + {-0.983866,-0.270883}, + {-0.252473,0.652332}, + {0.320750,0.253181}, + {0.439080,-1.174365}, + {0.577125,0.328839}, + {0.900496,0.913433}, + {0.217882,-0.002589}, + {-0.005437,-0.172455}, + {0.777052,-0.589731}, + {-0.319754,-0.552669}, + {0.663022,0.005191}, + {-0.444068,0.973952}, + {-0.284655,0.373087}, + {-0.653444,0.000541}, + {0.937499,-0.190486}, + {-0.353436,-0.421615}, + {-0.586946,1.251421}, + {-0.106296,-0.907972}, + {-0.133041,-1.699473}, + {-1.323406,1.678851}, + {0.297010,-1.495266}, + {-0.282727,-0.006885}, + {2.101317,-0.581565}, + {-0.386652,0.065565}, + {-0.086661,0.930770}, + {1.072493,-0.689899}, + {-1.072787,1.386659}, + {1.079130,0.126657}, + {-0.255408,-0.604117}, + {0.923296,0.431058}, + {0.884115,0.288090}, + {-0.783201,-0.804343}, + {-1.563031,0.029382}, + {-0.366755,0.047618}, + {0.931579,0.790832}, + {0.079395,-1.064498}, + {-0.576885,-1.423422}, + {1.061247,-0.359222}, + {-0.079346,-0.583210}, + {-0.513897,-1.038086}, + {-0.306731,-0.347102}, + {-0.303644,0.082931}, + {1.070749,0.846657}, + {0.596321,-0.863198}, + {-1.493087,0.752431}, + {-0.326493,-0.259466}, + {0.762672,0.637558}, + {0.470650,-0.475920}, + {1.217709,1.223485}, + {-0.105262,0.348860}, + {0.809125,0.110621}, + {0.705164,-0.451192}, + {0.256454,0.998392}, + {-0.182322,-1.808778}, + {0.132926,-0.046858}, + {-0.115529,-0.094157}, + {-0.386512,-0.427899}, + {1.703266,0.413302}, + {1.689060,0.300520}, + {-0.746970,-0.620105}, + {0.331307,1.166821}, + {-1.642881,-0.355440}, + {0.284702,-0.125837}, + {-0.942006,0.609114}, + {0.490133,-0.550940}, + {0.479289,0.712846}, + {-0.733015,1.085078}, + {1.342473,0.807258}, + {-0.139847,-0.210786}, + {-1.019707,-0.083367}, + {-0.515722,-0.667669}, + {-0.490205,0.536208}, + {1.137698,-2.187429}, + {0.689605,-0.279192}, + {-0.758482,-1.078222}, + {-0.062444,-1.440962}, + {-0.959758,-0.131322}, + {0.578693,1.089248}, + {-0.447809,0.153117}, + {-0.380639,0.131958}, + {0.663486,0.877594}, + {0.280871,-1.058013}, + {-0.699962,0.353879}, + {-0.162627,0.269167}, + {-0.204061,0.751909}, + {0.209289,-0.584008}, + {0.284208,0.331193}, + {0.885480,0.772389}, + {-0.252435,-0.861216}, + {1.302831,0.447444}, + {0.039083,-0.234160}, + {-0.935810,-0.162396}, + {0.125644,0.184471}, + {0.445812,-1.213550}, + {-1.380393,0.775430}, + {-0.188419,0.701213}, + {0.684211,-0.154271}, + {-0.182573,0.039267}, + {0.811469,-0.969950}, + {-0.778200,1.188098}, + {-0.049732,-0.445024}, + {-0.852271,-0.949873}, + {0.086241,-0.750884}, + {-0.096712,-1.624033}, + {-0.400723,0.228941}, + {1.049161,-2.253919}, + {-0.058805,-0.708923}, + {-1.286261,-1.145985}, + {-0.215680,0.977318}, + {-1.137437,0.643552}, + {0.648707,0.534293}, + {-0.097589,0.270605}, + {-0.536918,0.019383}, + {0.467302,0.109569}, + {-1.583003,-0.761356}, + {-0.935186,-0.891575}, + {-0.514207,0.428989}, + {0.765034,-0.341230}, + {0.067731,0.661021}, + {-0.145722,0.204315}, + {-0.062658,0.608009}, + {0.471454,0.095159}, + {-0.452387,1.030955}, + {0.553401,-0.726777}, + {0.622963,0.530085}, + {0.208907,1.294012}, + {-0.324651,1.366459}, + {-0.576267,-0.393594}, + {-1.011991,0.804189}, + {0.737499,0.822178}, + {0.481131,-0.143674}, + {-0.684440,0.644153}, + {0.794158,-0.398822}, + {0.568346,0.400063}, + {0.913021,-0.104825}, + {-0.181232,-0.575912}, + {-1.186140,0.417101}, + {0.311493,0.955016}, + {0.331007,1.201278}, + {0.208202,0.031411}, + {0.463080,0.501488}, + {0.482757,0.079090}, + {-0.880469,0.584826}, + {-0.159840,-0.023861}, + {0.845792,-0.498914}, + {1.200194,-0.998738}, + {-0.687638,0.627621}, + {0.834554,-0.044152}, + {-0.567932,0.022438}, + {0.649994,-0.451273}, + {1.550910,0.386612}, + {0.643220,-1.226031}, + {-0.084707,0.483131}, + {1.142138,-0.495484}, + {0.591518,0.600105}, + {0.909766,-0.968842}, + {-0.318164,-1.216190}, + {-0.002672,0.682111}, + {0.303462,-0.734521}, + {-1.328197,-0.512260}, + {0.142123,-0.446938}, + {-0.563399,-0.108576}, + {-0.595759,0.432539}, + {0.140978,-0.820013}, + {0.691118,-0.298545}, + {-0.892137,0.532776}, + {0.882700,-0.514615}, + {-1.126496,-0.553388}, + {-0.366223,0.264003}, + {1.216088,-0.643513}, + {0.144411,0.190855}, + {-0.513814,1.301282}, + {-0.139218,-1.666939}, + {-0.873328,1.087577}, + {0.368330,-0.436673}, + {-0.799562,0.387875}, + {1.105326,0.374214}, + {0.212973,0.611913}, + {-1.233469,-0.191584}, + {-0.678596,-0.747265}, + {-1.464750,0.891797}, + {-0.103633,0.529639}, + {0.946408,0.704495}, + {-0.247739,0.650610}, + {0.314285,-0.478465}, + {-0.801484,-1.330346}, + {-0.474770,0.029146}, + {0.156161,0.354246}, + {-0.514883,0.437114}, + {-0.723243,-0.302359}, + {-0.623393,-0.064006}, + {0.668911,0.512527}, + {-0.200754,0.270304}, + {1.274333,-1.593959}, + {-0.433487,-0.077630}, + {1.022869,-0.724708}, + {1.302765,-0.324157}, + {0.048530,0.524041}, + {0.580503,0.255952}, + {0.871851,-0.571890}, + {-1.320527,0.372024}, + {-0.837724,-1.330308}, + {-0.130319,1.947338}, + {-0.966811,-0.248498}, + {-0.980519,0.121219}, + {-0.928127,0.014107}, + {0.784902,-0.292815}, + {-0.001154,0.102495}, + {0.174204,-0.798143}, + {-0.616828,-1.187243}, + {0.901858,0.095972}, + {-0.036058,-0.624901}, + {-0.136308,0.048002}, + {0.724986,0.204018}, + {-0.290315,-0.226273}, + {-0.937261,0.310854}, + {1.350983,1.247481}, + {0.132400,-0.117268}, + {-0.433586,0.672210}, + {0.427985,1.263974}, + {0.053098,-0.134753}, + {0.145390,-1.579824}, + {-0.466987,-0.271971}, + {-0.452877,-0.054139}, + {-0.137701,-0.493978}, + {0.449226,0.123858}, + {0.641004,-1.580859}, + {0.732717,0.424758}, + {-1.191464,-0.668713}, + {-0.068454,-1.558817}, + {-1.255019,0.090546}, + {0.133334,-0.672320}, + {-0.357994,-0.062960}, + {-0.179648,-0.136934}, + {-1.405926,-0.152062}, + {-0.122649,-0.447278}, + {-0.956039,0.706032}, + {-0.577964,0.702715}, + {-1.092396,-0.224851}, + {-0.080453,0.539972}, + {0.941582,0.526443}, + {-0.245442,-0.421211}, + {-0.655510,0.175952}, + {0.090653,0.356258}, + {0.597282,0.245042}, + {-1.281953,1.174625}, + {0.246278,0.484865}, + {-2.421806,-0.626013}, + {-0.515321,0.348373}, + {0.100784,-0.155870}, + {-0.518027,-0.137351}, + {-1.091217,0.932436}, + {0.298705,0.215227}, + {-0.032357,0.318942}, + {-0.028669,0.835347}, + {-0.164235,-0.633671}, + {-0.978889,0.405411}, + {-0.366083,-0.163942}, + {-0.367713,0.709928}, + {-0.245638,-0.099905}, + {-0.171231,0.640628}, + {-0.531550,-0.252464}, + {-0.460142,1.860309}, + {-1.486483,-0.241096}, + {-1.050993,-0.330973}, + {0.877660,0.278261}, + {0.471375,0.863250}, + {0.815270,0.878291}, + {-1.064940,1.248690}, + {-0.069835,-0.017150}, + {1.102388,0.275357}, + {1.179494,0.240331}, + {-1.664730,-0.144800}, + {-0.236780,-0.450388}, + {0.727520,-0.630164}, + {-0.976490,-0.375161}, + {1.003983,-1.257875}, + {-0.358144,-0.688150}, + {0.425984,0.320394}, + {0.145065,-0.070437}, + {-0.791365,-0.328291}, + {0.251614,-0.243055}, + {-0.393163,0.191665}, + {-0.150863,-0.584294}, + {-0.673513,-0.686572}, + {-0.402621,-0.474615}, + {-1.157962,-0.033111}, + {0.452590,-1.526519}, + {0.021951,-0.726401}, + {-0.912745,0.826707}, + {-0.372052,0.412758}, + {0.777297,-0.106160}, + {-0.135258,0.030331}, + {-0.109689,-0.926576}, + {0.683335,-1.604886}, + {-0.421987,0.744210}, + {-0.557095,-0.775698}, + {0.454006,-0.044498}, + {0.177879,0.041843}, + {0.074312,0.324311}, + {-1.059395,0.620565}, + {-0.421680,0.527942}, + {-1.202068,1.160552}, + {-0.115764,-0.745636}, + {-1.541088,0.056196}, + {0.381186,0.008007}, + {-0.499599,0.141341}, + {0.013978,-0.125940}, + {0.090000,-1.187147}, + {1.160943,-0.631971}, + {-0.156704,0.697033}, + {-1.239590,-0.623728}, + {-0.792073,0.313426}, + {-0.731100,-0.549662}, + {-0.357447,1.054545}, + {-1.142243,-0.677072}, + {0.337990,0.046116}, + {0.530248,-1.446341}, + {0.636612,-0.662750}, + {-2.179262,0.191543}, + {-0.550411,0.747675}, + {-0.402629,0.988314}, + {-0.083953,0.479871}, + {0.124996,-0.359557}, + {0.421828,0.346338}, + {-0.171740,-1.735271}, + {1.095081,-0.775815}, + {-0.492503,0.267703}, + {-0.204414,0.545646}, + {0.385776,-0.276769}, + {0.183290,0.903289}, + {-0.084581,-0.121421}, + {-0.245414,-0.714739}, + {-0.576804,0.885006}, + {-1.119495,-0.231658}, + {1.164001,0.578247}, + {0.112226,0.129056}, + {-0.593079,-1.115176}, + {0.166237,-0.014866}, + {-0.444435,0.569202}, + {-1.420244,-0.532449}, + {-0.340449,-0.654735}, + {1.268462,-0.042484}, + {-0.553843,-0.819293}, + {0.303196,-0.769441}, + {0.388195,-0.520681}, + {-0.196868,-0.813691}, + {0.519316,-1.007083}, + {0.706958,0.112890}, + {-1.075358,-0.054663}, + {0.741997,0.785043}, + {0.052625,-0.121979}, + {0.253025,0.356385}, + {0.828369,-0.593061}, + {-0.384827,0.456143}, + {-0.140667,0.196871}, + {-1.966096,-0.083070}, + {-1.020553,-1.461990}, + {0.190510,-0.037306}, + {-0.625134,-0.080120}, + {-0.562010,-0.950249}, + {-0.230976,-0.527893}, + {-0.228677,-0.348693}, + {-0.332359,-0.311350}, + {-0.704024,-1.084836}, + {-0.434046,0.133438}, + {-0.318342,-0.053535}, + {-0.096872,0.012919}, + {-0.610696,-0.174108}, + {-0.252555,-0.509190}, + {1.061245,0.467663}, + {0.252635,-0.703320}, + {-0.212390,1.327738}, + {0.587415,0.199159}, + {-0.966466,-0.076941}, + {-0.829028,1.083157}, + {-0.505337,1.097833}, + {0.691992,0.091951}, + {0.564158,0.597321}, + {0.804210,0.592029}, + {-0.413688,0.496419}, + {-0.298775,0.196912}, + {-0.092485,-0.806745}, + {-1.159163,0.204774}, + {-0.794889,-0.067174}, + {-0.438785,-0.115991}, + {0.282720,-0.231078}, + {-1.228366,-0.260419}, + {-1.528740,-0.246528}, + {-0.246221,-0.580162}, + {0.114350,-1.968410}, + {-0.218031,-0.356657}, + {-0.948797,0.708502}, + {-0.805080,-0.480688}, + {-0.334364,0.785381}, + {0.070317,-0.128118}, + {0.470661,-0.323759}, + {-0.185075,0.483122}, + {-0.404439,0.149669}, + {0.074842,0.256006}, + {-1.013446,0.621396}, + {-0.134759,0.287886}, + {0.376520,1.192665}, + {-0.362520,-0.634418}, + {0.362985,-0.196815}, + {0.653376,0.725399}, + {1.234385,-0.520766}, + {0.281393,1.887825}, + {-0.506625,0.262909}, + {-1.755273,0.507609}, + {-0.321531,-0.128175}, + {0.301331,-0.922664}, + {-0.600594,-1.248979}, + {-0.314934,-0.073132}, + {-1.253293,-0.794391}, + {-0.119523,-0.106375}, + {-1.036734,-0.848670}, + {-0.204574,0.546471}, + {0.823228,0.262015}, + {1.082957,-0.114482}, + {-0.728824,0.148125}, + {-0.883430,0.785116}, + {0.641440,-0.078952}, + {-1.272558,0.134591}, + {0.505240,-0.602016}, + {-0.972164,1.092034}, + {0.612247,0.549404}, + {0.450208,0.493039}, + {-0.525409,0.940858}, + {-0.216053,0.053321}, + {-0.034777,0.076897}, + {-0.559997,-1.618377}, + {-0.739954,0.626905}, + {-0.033963,-0.233715}, + {0.672760,-0.049505}, + {-0.208845,-0.160882}, + {0.953452,-0.034831}, + {-0.376313,-0.779698}, + {-1.116935,0.789470}, + {1.852068,-0.400982}, + {0.337988,-0.001624}, + {0.591794,-0.223387}, + {-0.764729,-0.256717}, + {0.409644,-0.331827}, + {0.353446,0.986947}, + {0.013275,-0.074213}, + {0.197200,-0.544923}, + {-0.331489,0.568903}, + {0.432285,-0.929833}, + {0.600862,0.718698}, + {0.872893,-0.419268}, + {-0.200237,-0.718290}, + {0.242213,0.079084}, + {-1.577807,1.174048}, + {-0.379725,0.187433}, + {0.307646,1.344402}, + {1.215462,0.395933}, + {0.029692,0.606788}, + {0.892763,-0.031153}, + {0.685208,0.002816}, + {0.907146,0.248276}, + {0.328204,0.310385}, + {-0.450021,-0.534631}, + {2.075611,-0.976094}, + {0.337534,0.624849}, + {-0.375221,-0.715899}, + {-0.134676,-0.128634}, + {-0.654845,-0.951174}, + {-0.407146,-0.844925}, + {-1.268266,-0.592878}, + {-0.624101,-0.781781}, + {-0.162159,-0.785210}, + {-1.763260,0.357187}, + {-0.408447,0.565726}, + {-0.392385,-0.323932}, + {0.070956,-0.460428}, + {-0.053136,0.207713}, + {-0.164207,-1.296008}, + {-1.192106,-1.901697}, + {-0.431213,-1.017489}, + {-0.520848,1.407188}, + {0.145023,-0.336089}, + {0.856252,-0.968676}, + {0.695109,-1.115058}, + {0.942748,0.032814}, + {-0.442368,0.501998}, + {-1.339842,0.494702}, + {0.793722,0.683030}, + {-0.080036,-0.001120}, + {-0.124282,-0.176612}, + {-0.510859,-0.403349}, + {-0.013581,-0.068892}, + {-0.285268,0.123699}, + {0.681833,-0.376550}, + {0.665080,1.385498}, + {-1.217502,0.225975}, + {-0.594094,-0.361329}, + {0.640636,-1.635224}, + {0.440288,-0.173718}, + {-1.095971,0.028588}, + {-0.391012,0.536173}, + {-0.679180,-0.332060}, + {0.443795,0.206495}, + {0.102913,-0.012004}, + {-0.877523,-1.194485}, + {1.576267,-0.479076}, + {-1.125040,-0.707965}, + {-0.293637,-0.295395}, + {1.163673,0.261285}, + {-0.009871,1.620751}, + {0.420659,1.657904}, + {0.184678,0.360919}, + {-1.117315,-0.182509}, + {-1.805887,-0.737423}, + {1.715050,-0.359039}, + {0.548347,-0.711148}, + {0.819885,-0.536776}, + {0.038829,-0.046101}, + {-1.555754,1.115475}, + {0.059829,-0.900202}, + {0.215772,0.610962}, + {0.008583,-0.164357}, + {-0.394604,-0.266908}, + {-0.089186,0.115016}, + {0.879229,-1.099212}, + {0.666276,-1.094933}, + {-2.243026,0.931909}, + {1.069452,-0.301207}, + {1.192592,1.144332}, + {-0.546448,-0.404087}, + {1.042238,0.099649}, + {-1.150986,-0.352998}, + {1.671102,0.062038}, + {-0.292935,-0.142184}, + {0.912273,0.927933}, + {-0.610804,-0.790526}, + {-1.233318,0.582164}, + {0.362886,0.126435}, + {0.266818,0.880278}, + {0.334312,-0.851251}, + {-0.625542,0.254909}, + {0.730234,0.366879}, + {0.714704,0.004163}, + {1.194976,-0.023707}, + {0.326624,-0.471626}, + {-0.229043,-0.827678}, + {0.325709,-0.115376}, + {0.677117,-0.136203}, + {0.609055,-0.553231}, + {0.043072,-0.424984}, + {0.441790,0.828142}, + {-0.436910,-0.103521}, + {-0.626695,0.363246}, + {-1.091702,0.016860}, + {0.576059,0.141374}, + {-0.152014,-0.661996}, + {-0.774034,-0.052961}, + {0.523869,0.787151}, + {0.022872,0.624295}, + {2.371050,2.241895}, + {0.099188,-0.686992}, + {-0.026026,-0.171252}, + {0.675816,1.843051}, + {0.006666,0.000152}, + {1.021349,0.543076}, + {-0.602923,0.676056}, + {1.027891,-0.418795}, + {-1.759205,-1.102256}, + {1.116023,0.103083}, + {0.576224,-1.411952}, + {-0.156183,1.999043}, + {0.124434,-0.238939}, + {-0.938087,0.337435}, + {0.047635,0.159295}, + {0.217816,-0.807263}, + {-0.727492,0.439254}, + {0.245795,-1.372293}, + {1.078585,0.289308}, + {-0.746381,-0.190481}, + {0.461490,-0.156236}, + {0.279562,-0.141011}, + {0.800455,0.112162}, + {0.846632,-1.442145}, + {0.896583,-0.366371}, + {0.142449,0.555705}, + {0.443817,-0.165670}, + {-0.278247,1.893330}, + {-0.148235,0.209155}, + {0.819120,-0.340799}, + {0.110860,-0.461213}, + {-0.191900,-1.200356}, + {0.385260,0.158268}, + {0.179177,-0.338312}, + {0.286717,0.336873}, + {-0.596235,-0.074333}, + {0.311757,-1.159880}, + {-0.906439,0.587565}, + {0.837066,-0.107715}, + {-0.260451,-1.427325}, + {-0.216606,1.473217}, + {-1.717780,-0.058343}, + {-1.378627,0.891233}, + {-0.079320,0.532493}, + {-0.016687,0.630684}, + {0.240314,0.096040}, + {-0.331577,0.458243}, + {0.372299,-1.365709}, + {-0.741196,1.252891}, + {-0.264394,-0.346368}, + {0.174941,0.592150}, + {-0.182301,0.472894}, + {-1.078744,0.352627}, + {0.668825,-0.839549}, + {-0.794913,0.098837}, + {0.346916,0.827142}, + {-0.557851,-0.824683}, + {0.152571,-1.089133}, + {0.317379,-0.377552}, + {-0.310447,-0.798186}, + {1.416259,0.538289}, + {-0.139209,0.950880}, + {-0.671851,-0.023958}, + {-0.295455,0.491929}, + {-0.042358,-0.225679}, + {0.306427,-0.412672}, + {-0.096405,-0.210148}, + {1.661258,-0.451881}, + {0.887263,-0.441136}, + {1.303738,0.032488}, + {1.248415,-0.771581}, + {-0.521452,0.088019}, + {-1.103925,-1.154315}, + {0.257631,1.121379}, + {-0.262130,0.533858}, + {0.605826,-0.581051}, + {-0.188663,0.498607}, + {0.764838,0.473480}, + {0.860975,-1.159374}, + {0.452993,0.327307}, + {0.175875,1.009939}, + {0.281291,-0.479527}, + {0.434156,0.687246}, + {0.453294,0.558911}, + {0.191183,-0.316014}, + {0.214000,0.309648}, + {0.502847,0.327473}, + {-0.398865,-1.147691}, + {-0.952348,0.394180}, + {-0.349121,-0.235417}, + {-0.449837,0.044554}, + {-0.402914,-0.408737}, + {0.199668,0.760049}, + {0.010913,-0.831466}, + {0.090912,0.009287}, + {0.512837,-0.858424}, + {-0.283099,-0.240292}, + {-0.112692,-0.322550}, + {-0.417705,-0.353556}, + {-1.267119,0.235106}, + {-0.412714,-1.078769}, + {-1.068857,-0.020876}, + {0.735610,-0.698172}, + {0.097437,1.100995}, + {-0.824265,-0.625636}, + {-0.151463,0.035774}, + {-0.097028,-0.167782}, + {-0.354245,-0.055691}, + {0.360549,0.749328}, + {0.718972,-0.297089}, + {0.093750,-0.638153}, + {-0.247393,-0.297925}, + {-1.029741,-0.068838}, + {0.526758,0.786855}, + {-0.926147,0.224848}, + {0.558481,-0.057841}, + {-0.267158,-0.691253}, + {-1.247372,-0.770014}, + {-0.163633,-1.488970}, + {-0.501774,0.176045}, + {0.136177,-0.868078}, + {0.777970,0.447295}, + {0.460035,0.095623}, + {0.503416,-0.169723}, + {1.171534,-0.676447}, + {-0.713499,0.434530}, + {0.462648,0.066601}, + {-0.832730,-1.270562}, + {0.765136,0.913623}, + {0.417389,0.798048}, + {-1.426013,-0.274914}, + {-0.825985,-0.424720}, + {0.603344,-0.834278}, + {0.709370,0.850793}, + {0.003214,-0.250830}, + {-1.002978,-0.742748}, + {-0.936138,0.680271}, + {-0.053393,0.089266}, + {0.420002,-0.368487}, + {0.710330,-0.438794}, + {-1.087089,0.102425}, + {0.476970,-1.002341}, + {0.375935,0.399873}, + {-0.989189,0.653074}, + {0.872430,0.758053}, + {-0.890879,-0.312795}, + {-0.238132,-0.250050}, + {0.849829,-0.245135}, + {-0.306339,1.034213}, + {0.133859,-0.614994}, + {-0.556895,0.160389}, + {-0.042028,-1.154500}, + {-0.019949,-0.576390}, + {-1.028293,0.814275}, + {0.766851,0.887268}, + {0.044484,-0.512244}, + {0.795847,-0.238133}, + {-0.123321,1.153876}, + {1.732138,0.309731}, + {-0.429759,0.508320}, + {-0.700518,-0.577407}, + {0.586965,0.247099}, + {0.474665,-0.264909}, + {0.657846,0.682646}, + {1.683598,-0.181147}, + {0.481185,0.407061}, + {-0.867097,-0.307912}, + {-0.884851,0.803434}, + {0.248120,0.335810}, + {-0.766947,-0.015652}, + {0.138088,-0.540963}, + {0.483644,-0.292753}, + {0.434778,-0.933118}, + {0.969690,-0.575479}, + {0.033365,-0.110259}, + {0.045278,-0.657264}, + {-0.823623,0.516920}, + {-0.153628,-1.007980}, + {-0.500080,0.938031}, + {-0.332981,0.507900}, + {0.290413,0.159538}, + {-0.402051,0.813947}, + {0.464196,0.574152}, + {0.578220,-1.425212}, + {0.202852,-0.043236}, + {1.658922,0.205793}, + {-0.485749,-0.745853}, + {-0.446857,0.377168}, + {0.876179,1.074485}, + {-0.584951,0.013578}, + {-0.837915,-0.240871}, + {-1.524292,0.233789}, + {-0.825139,0.748604}, + {1.596491,0.933630}, + {-0.401496,-1.003424}, + {-0.258193,-0.695623}, + {-0.052062,-0.166794}, + {0.690957,0.351045}, + {0.493275,-0.920828}, + {-0.863543,1.297232}, + {-0.108419,0.062067}, + {1.378657,-1.208240}, + {0.085856,-1.104558}, + {-0.366961,0.245213}, + {0.832540,0.165383}, + {-0.584261,0.126903}, + {0.016941,0.536423}, + {-0.270773,1.502084}, + {-0.372237,-0.400977}, + {1.068030,-0.451306}, + {-0.621204,-0.546822}, + {1.960128,0.187646}, + {-0.280504,-0.872304}, + {0.683431,0.366819}, + {0.595984,-0.857526}, + {-0.631380,-0.386350}, + {0.020853,-0.369727}, + {-0.212579,0.923348}, + {0.683995,-0.323235}, + {0.805253,0.720984}, + {-0.198278,-0.751235}, + {-0.587794,1.028549}, + {0.082077,0.108813}, + {0.745455,-0.151971}, + {-0.976860,-1.417301}, + {-0.100352,0.301667}, + {0.452015,0.239125}, + {-1.198564,1.164572}, + {-0.347850,-0.780059}, + {1.005080,-0.098043}, + {-0.076527,0.140155}, + {0.822524,0.259489}, + {-0.484033,0.190539}, + {0.547659,0.465998}, + {0.402279,-0.058429}, + {-0.145342,0.125883}, + {-0.136622,1.065746}, + {0.408618,-0.650430}, + {0.015056,0.491154}, + {1.132468,-0.328837}, + {-0.012391,-0.686920}, + {0.053038,0.495824}, + {0.071729,-0.474581}, + {-0.440191,-0.561736}, + {-0.524869,0.365948}, + {0.556736,-0.017547}, + {0.292031,-0.097135}, + {1.006116,1.298618}, + {0.516901,0.626829}, + {0.630999,-0.413970}, + {0.774604,-1.207384}, + {-0.615805,0.565898}, + {0.364355,-0.950000}, + {0.530245,-1.069383}, + {1.242254,0.041582}, + {1.198631,-0.852988}, + {0.409406,-0.362121}, + {-0.051573,1.378894}, + {0.526354,0.639450}, + {-0.194904,-1.121370}, + {0.927330,1.050282}, + {-1.444789,0.271173}, + {-0.428099,0.664772}, + {-0.780386,0.717917}, + {-0.113324,-0.553108}, + {0.355862,-0.738216}, + {-0.099107,0.064152}, + {-0.154411,1.265266}, + {0.802506,-0.378603}, + {-0.254708,-0.134292}, + {0.098108,-0.759107}, + {-0.609531,-1.121607}, + {-0.421901,-0.211898}, + {0.711968,-0.180637}, + {-1.105167,1.156956}, + {-1.003797,0.694685}, + {0.049084,-0.230107}, + {-0.236223,1.025917}, + {0.404298,-0.017089}, + {-0.066885,0.931927}, + {-1.723563,-0.969529}, + {0.491575,-0.029033}, + {0.623884,-0.068448}, + {0.176416,-0.045140}, + {-0.898063,-0.441314}, + {0.054965,-0.105671}, + {0.099547,0.031943}, + {-0.136638,-0.641491}, + {-0.416031,0.788225}, + {0.421132,0.199360}, + {0.973337,-0.185653}, + {0.088055,0.466610}, + {0.175948,0.713615}, + {-0.186074,-0.718673}, + {-0.477278,0.873979}, + {0.439899,0.385747}, + {0.281673,1.501744}, + {-0.893871,0.167312}, + {-1.196201,0.511553}, + {-0.088248,1.523528}, + {-0.127180,0.047668}, + {-1.244524,1.220496}, + {-0.458583,0.408467}, + {-0.423980,-0.843592}, + {-0.680569,-0.034943}, + {0.025603,-0.219165}, + {-0.182524,-0.609754}, + {-0.540846,1.056731}, + {0.303247,1.820157}, + {0.180851,0.479806}, + {0.025760,-1.252858}, + {-0.747286,-0.234204}, + {-1.773173,0.069396}, + {0.370812,-0.513683}, + {-0.420497,-0.847213}, + {-0.820247,0.180888}, + {0.377636,-0.251796}, + {-0.084840,0.837256}, + {0.204533,-0.516983}, + {-0.579383,0.361949}, + {-0.079244,-0.997139}, + {0.763352,-0.920005}, + {0.991156,0.097808}, + {-0.207017,-0.379039}, + {-1.048663,0.392404}, + {-0.947993,-0.165707}, + {0.222565,-1.486800}, + {1.309369,0.187803}, + {0.083914,0.759151}, + {0.017533,-0.350594}, + {0.936769,-0.133694}, + {-0.542859,0.015576}, + {0.527186,1.057142}, + {0.576027,-1.107543}, + {-0.597828,0.116528}, + {-0.573770,-0.408299}, + {-0.564696,0.907437}, + {-0.843667,0.002832}, + {1.708716,-1.282816}, + {0.099415,-0.410289}, + {-1.175233,0.409935}, + {-0.505987,1.096503}, + {0.831878,-0.633435}, + {-0.036724,0.894208}, + {-1.009229,0.523294}, + {-0.206856,-0.518026}, + {-0.265399,0.734165}, + {-1.418101,-0.082190}, + {0.605095,0.372543}, + {-1.234487,1.112847}, + {-0.036487,0.136546}, + {-0.027486,-0.021950}, + {0.087476,0.308363}, + {0.380610,-0.770809}, + {-0.612494,0.395982}, + {-0.760804,0.774983}, + {1.865483,0.743280}, + {0.077926,0.679733}, + {-0.346491,-0.172862}, + {0.652737,-0.498038}, + {-0.306556,-0.127240}, + {1.422770,-0.788084}, + {0.727473,0.199273}, + {0.998929,0.906173}, + {-0.062778,-0.292218}, + {0.389584,-0.499927}, + {1.122804,0.323068}, + {-0.936607,0.116318}, + {0.080546,-1.053398}, + {-0.108415,0.262303}, + {0.675554,-0.771375}, + {0.697370,0.301939}, + {-0.516065,0.371745}, + {-1.958861,-0.787043}, + {1.816436,-0.421257}, + {0.580993,0.294074}, + {-0.218823,-0.831417}, + {-0.217031,-1.430616}, + {-0.483142,0.379944}, + {0.067187,-0.582305}, + {-0.697808,-0.168340}, + {1.293952,0.231077}, + {0.097290,-0.755162}, + {0.165245,0.091931}, + {-1.238996,0.033182}, + {0.094961,-0.517375}, + {-0.390291,0.240153}, + {0.023253,2.137456}, + {0.621424,-0.412412}, + {0.242280,-0.594768}, + {-0.765264,-0.423112}, + {-0.153731,0.730757}, + {0.419930,0.768227}, + {0.164315,0.199661}, + {-1.536602,0.855813}, + {0.226126,-0.357326}, + {0.350009,0.143890}, + {0.337303,0.843891}, + {-0.411561,-1.142193}, + {-0.701707,-0.241532}, + {-0.754151,-0.193665}, + {-0.371459,-0.379980}, + {-0.276399,-0.210742}, + {-1.074638,0.834850}, + {1.617356,-0.576681}, + {1.568916,-0.678719}, + {0.562247,0.287642}, + {0.631863,1.237075}, + {0.042284,-0.047805}, + {1.485053,-0.684224}, + {0.160235,-0.248368}, + {-0.389660,0.710686}, + {-0.050819,0.065209}, + {0.147388,0.158528}, + {0.327583,-1.242319}, + {-0.185792,-0.398783}, + {-0.880967,-0.168451}, + {0.561261,0.309319}, + {0.114879,0.834084}, + {-0.630472,0.320430}, + {0.435172,-0.147865}, + {0.138108,0.189852}, + {0.433189,0.538220}, + {-0.539843,-0.734402}, + {0.102453,1.548384}, + {-0.349662,-0.123426}, + {-0.497825,-0.681592}, + {-0.815304,0.920879}, + {0.264205,1.651104}, + {-0.360736,-0.822221}, + {-0.546373,-0.203813}, + {1.506398,0.351934}, + {1.271735,0.262145}, + {0.706702,0.382961}, + {0.063130,0.014527}, + {-0.198279,-0.082914}, + {0.756777,0.133322}, + {0.762393,0.070534}, + {-1.168252,0.042773}, + {-0.875856,0.058973}, + {-0.907179,1.363516}, + {0.003700,1.289862}, + {0.279690,-0.489829}, + {-0.952025,-0.016869}, + {-0.062242,0.118709}, + {0.335991,-0.262022}, + {-0.135763,0.124727}, + {0.827726,-0.460658}, + {0.070106,0.118099}, + {-0.594234,0.138962}, + {0.638866,1.436196}, + {0.038912,0.342362}, + {-0.409336,1.245498}, + {0.246502,-0.213165}, + {-0.522154,-0.329476}, + {-1.023245,-0.070043}, + {0.648593,-0.512078}, + {0.202472,-1.312851}, + {-1.306352,-0.890312}, + {1.086565,-0.802461}, + {0.842372,-1.343072}, + {-0.159571,-0.014023}, + {0.857682,-0.038734}, + {-1.088896,-0.345921}, + {0.822683,0.990156}, + {-0.329881,0.808677}, + {1.062717,1.498025}, + {-0.433379,-0.433149}, + {-1.122758,-0.127346}, + {0.542121,0.927791}, + {0.308221,0.175934}, + {-0.149790,-1.068382}, + {-0.616779,-0.744305}, + {0.839533,-0.157706}, + {0.303678,0.382350}, + {0.194006,-0.212379}, + {0.033246,-0.903250}, + {-0.338256,-0.678675}, + {-0.613313,-0.387690}, + {-1.010888,-0.461805}, + {0.256900,1.327843}, + {0.791153,0.371449}, + {0.412562,-0.756850}, + {0.065134,-0.322337}, + {0.083713,0.126607}, + {0.723780,1.256984}, + {-1.243036,-0.742905}, + {0.026896,0.353344}, + {-0.269050,0.745763}, + {1.149596,0.347420}, + {-0.774535,0.020295}, + {0.596979,0.015554}, + {-0.615475,-0.620565}, + {0.318177,0.396116}, + {0.421686,-0.052160}, + {-0.430877,-1.293244}, + {-0.155236,-0.215658}, + {-0.602139,0.532974}, + {-0.243152,-1.579031}, + {0.123780,-0.983632}, + {0.136269,-0.821246}, + {0.284418,0.304578}, + {-0.397824,0.300438}, + {-0.360441,0.227509}, + {0.046855,-0.171865}, + {-1.804252,-0.700048}, + {-0.924882,-0.556849}, + {0.134748,0.082988}, + {-0.132825,-0.916706}, + {0.786704,0.720149}, + {1.091863,0.641613}, + {0.881371,0.215342}, + {-0.096880,0.560482}, + {0.422486,-0.921443}, + {0.341221,-0.894846}, + {0.075976,1.064656}, + {-0.533020,-0.023005}, + {0.320752,0.244138}, + {-0.040666,0.065450}, + {1.450750,0.008950}, + {0.306952,-0.562488}, + {0.302953,0.123134}, + {0.798245,0.094443}, + {0.038655,-0.516631}, + {-0.252824,1.501311}, + {-0.356779,0.297983}, + {-0.180288,1.164347}, + {-1.407410,-0.435116}, + {-0.576522,-0.443552}, + {0.111603,-0.209512}, + {0.136332,1.190104}, + {-0.810554,0.693664}, + {0.308525,0.629498}, + {0.318195,-2.104560}, + {0.162520,-0.149801}, + {-1.142162,1.218633}, + {-0.351640,-0.468696}, + {-0.793111,-0.658338}, + {-0.575915,0.941180}, + {0.317133,0.669761}, + {0.985808,-0.707916}, + {0.260989,0.770580}, + {-0.078153,-0.123214}, + {0.053145,1.817637}, + {-0.628024,0.069947}, + {-0.777414,-0.126421}, + {-0.647336,0.166883}, + {2.207409,-0.473580}, + {-1.038409,0.398710}, + {-0.345503,0.161175}, + {0.081747,0.890997}, + {-0.308902,-0.075592}, + {-0.139376,-0.676387}, + {0.971584,-0.470253}, + {-0.162857,1.149113}, + {0.171516,0.587119}, + {-0.613744,-0.035450}, + {-0.580046,-0.329255}, + {0.100551,-1.085898}, + {-0.592872,-0.489665}, + {-0.941300,-0.498021}, + {0.156036,0.709273}, + {0.178233,-0.632015}, + {0.678891,0.228611}, + {0.492409,-0.005288}, + {-1.497998,-1.024431}, + {0.838897,-0.110250}, + {0.568010,-1.606525}, + {-0.432611,0.904418}, + {0.334915,1.309759}, + {-0.890282,1.529258}, + {-1.064858,-1.150747}, + {0.051353,0.433881}, + {-0.146728,-0.312565}, + {-1.063791,-0.097197}, + {-0.181281,0.331634}, + {1.723937,-0.176101}, + {0.569951,0.990671}, + {0.418655,-0.675772}, + {0.182521,-0.095608}, + {-1.007120,0.018916}, + {1.718394,1.198867}, + {-0.313048,0.068845}, + {-1.421110,-0.661129}, + {-1.370764,-0.150880}, + {0.358122,1.405506}, + {-2.015900,-0.734896}, + {0.605181,-0.924120}, + {-1.191318,0.682983}, + {-0.456857,-0.148538}, + {0.300737,-0.194614}, + {0.929323,0.927409}, + {-0.450904,0.410019}, + {0.838989,0.855354}, + {0.011216,0.148217}, + {1.790998,-0.435076}, + {0.979138,0.801324}, + {-0.434199,0.113647}, + {0.244367,-0.759697}, + {-0.866268,-0.172338}, + {0.185045,-0.400993}, + {-0.381384,-0.328469}, + {0.870050,-1.131930}, + {0.475579,-1.270791}, + {0.553011,-0.863202}, + {0.654535,0.866937}, + {0.636370,0.353826}, + {0.532848,-0.266808}, + {-0.305542,0.323175}, + {0.817581,-1.178811}, + {-1.196670,0.435729}, + {-0.879273,-0.080918}, + {-0.355981,0.831777}, + {-0.514107,-0.221697}, + {-0.173027,0.391314}, + {0.480640,-0.762188}, + {-1.365528,0.280669}, + {-1.190631,-0.468936}, + {0.865182,-1.193025}, + {0.501712,1.474804}, + {-0.256834,0.036278}, + {0.625077,-0.710525}, + {0.236352,1.463872}, + {1.622799,-0.836983}, + {-1.629799,-0.761636}, + {0.048897,1.161363}, + {-0.782579,1.512752}, + {0.305203,-0.203621}, + {0.078598,0.853412}, + {-0.590944,0.241544}, + {0.173496,-1.406007}, + {-0.999952,-0.051233}, + {0.671370,-0.805464}, + {-0.681366,0.306463}, + {0.562013,-1.218074}, + {-0.901352,0.429769}, + {-0.149506,0.266835}, + {0.214535,1.287188}, + {-0.169843,-0.687892}, + {-0.054779,1.567896}, + {0.240689,0.339854}, + {-0.874400,-0.867453}, + {0.412938,0.074314}, + {0.567298,-2.005843}, + {0.023167,0.258225}, + {-1.641902,0.893004}, + {-0.335666,-0.481124}, + {-0.406708,-0.010981}, + {0.658780,0.316174}, + {-0.955737,0.114306}, + {-0.015993,-1.537689}, + {1.424653,0.275514}, + {0.391517,-0.073148}, + {-0.745075,0.282317}, + {0.345172,0.271172}, + {0.481076,0.739154}, + {-0.356021,-0.874318}, + {-0.063438,0.390779}, + {-1.109843,-0.988009}, + {0.717374,0.051986}, + {-0.076888,0.729893}, + {1.231962,0.770958}, + {-0.473425,0.077225}, + {-0.541175,0.273609}, + {0.353179,-1.140094}, + {0.000531,0.335460}, + {-0.553490,-0.163401}, + {-0.267372,-0.190631}, + {-1.005119,0.844056}, + {-0.739355,-0.466000}, + {1.232900,-0.286890}, + {0.072653,0.156869}, + {0.766814,0.123674}, + {0.409127,0.391504}, + {-1.568030,0.076824}, + {0.312427,1.087632}, + {0.194971,0.012558}, + {-0.835118,-0.977949}, + {1.155426,0.060691}, + {-0.251222,0.836983}, + {0.405056,0.222589}, + {0.062390,-0.297580}, + {0.201353,-0.620657}, + {-0.057828,0.302448}, + {0.353545,-0.819051}, + {-1.077600,0.701107}, + {0.551567,-0.547460}, + {-0.206217,0.843281}, + {0.195007,-0.522554}, + {0.786147,0.742689}, + {-0.915141,-0.436052}, + {-1.052682,1.424224}, + {0.597211,-0.177125}, + {-0.226331,-0.785225}, + {-1.502941,0.305148}, + {0.211830,0.257461}, + {0.039781,0.621727}, + {1.764019,-0.364944}, + {-0.011250,0.080853}, + {-0.037767,-0.191529}, + {0.120387,0.320196}, + {1.215214,0.159849}, + {0.951333,-0.128658}, + {0.683926,0.291417}, + {0.465572,0.464227}, + {0.237083,-0.278794}, + {0.825346,1.939517}, + {-1.000650,0.397936}, + {-0.422528,0.457669}, + {-0.415993,-0.857881}, + {0.654893,0.925834}, + {0.702427,0.341379}, + {-0.992852,-0.485504}, + {0.468854,-0.558263}, + {1.051053,-1.438013}, + {-1.609177,-0.229971}, + {-0.338898,1.308837}, + {1.716121,-0.108408}, + {-1.842097,-0.281067}, + {0.180047,0.058089}, + {0.314948,-0.365466}, + {-0.598626,-1.149004}, + {0.282546,0.129074}, + {-0.297604,-0.102458}, + {-0.134736,0.128291}, + {1.822758,-0.192577}, + {0.071825,-0.011008}, + {0.497849,-0.199343}, + {-0.005720,-0.569142}, + {-0.765651,-0.543594}, + {-1.172104,-0.011979}, + {-0.242091,0.779012}, + {-0.028042,0.723704}, + {0.451185,-0.941516}, + {-0.613115,-0.114437}, + {-0.972157,0.133869}, + {-0.076452,-0.516053}, + {0.083782,0.204923}, + {0.784000,0.582870}, + {-0.183293,0.586900}, + {-0.219489,0.464479}, + {0.144135,1.149970}, + {0.288305,-0.029936}, + {1.159682,0.771728}, + {-0.068957,0.519200}, + {-0.352525,-0.019248}, + {-0.265696,-0.606806}, + {-0.369018,0.437127}, + {0.533511,-0.112122}, + {-0.720835,0.975622}, + {1.285089,-0.946088}, + {0.455252,0.289840}, + {-1.326309,-0.639170}, + {0.108470,-0.476583}, + {0.142548,0.079352}, + {-0.029694,0.643831}, + {-1.482084,-0.771038}, + {-0.465824,-1.087531}, + {0.707385,0.077513}, + {-0.076182,1.057646}, + {0.379631,0.409768}, + {0.188938,-0.425715}, + {-0.234099,-0.734066}, + {0.043174,0.676531}, + {-1.163066,-0.193611}, + {-0.159620,-0.673125}, + {0.127940,-1.817839}, + {-0.451725,0.015069}, + {0.235742,0.360075}, + {1.748806,-0.323556}, + {-1.276301,0.117820}, + {0.166940,0.213350}, + {0.355975,0.062672}, + {-0.320198,-1.132743}, + {-0.855608,-1.215465}, + {0.013539,0.799086}, + {0.828422,0.915972}, + {1.006847,0.215101}, + {0.595009,0.252831}, + {0.442370,0.482821}, + {-0.693609,0.417306}, + {0.288466,-1.005315}, + {-0.396817,0.004994}, + {-0.293724,-1.217092}, + {1.212464,0.943142}, + {-0.865108,0.242460}, + {0.390441,0.080091}, + {0.871808,-1.076529}, + {0.254390,-0.387861}, + {0.532100,-1.371890}, + {0.132686,-1.074121}, + {0.426648,0.209831}, + {1.146969,0.503369}, + {-0.668154,-0.483259}, + {0.259931,-0.150336}, + {0.082358,-0.893764}, + {0.840501,-0.011365}, + {-0.082053,0.647275}, + {0.266846,1.226206}, + {-0.140652,-0.516312}, + {0.643273,-0.881556}, + {-0.379870,1.065882}, + {0.680447,0.242642}, + {-1.571274,-0.140568}, + {-0.535686,0.628896}, + {-0.010813,-0.606330}, + {0.361251,1.002445}, + {1.065906,-0.068655}, + {-0.224415,1.117594}, + {0.218497,-0.668069}, + {-0.429568,0.891438}, + {-0.998373,-0.389920}, + {0.226733,-0.730284}, + {1.059704,-0.349823}, + {-0.625330,-0.250376}, + {0.007118,1.525240}, + {-0.162942,-0.147716}, + {-0.666501,1.257793}, + {-0.909984,-0.138492}, + {-1.032952,-0.006279}, + {-0.404583,-1.848097}, + {-1.225754,0.434826}, + {1.235797,-0.792226}, + {0.783316,-0.750591}, + {-0.975057,0.365633}, + {-1.894987,-0.971523}, + {-0.147116,0.722479}, + {0.279787,0.076446}, + {1.433566,0.223812}, + {0.878914,-0.054495}, + {0.011693,0.776712}, + {-0.558728,0.481371}, + {0.641182,0.167371}, + {-0.669665,-0.807005}, + {-0.791191,0.591605}, + {-0.461665,0.714639}, + {0.066197,-0.199694}, + {-1.124229,0.833225}, + {-1.295771,-0.025693}, + {-0.037691,-0.391047}, + {-0.847875,0.862880}, + {0.441229,0.830506}, + {-0.259800,-0.491246}, + {-0.240834,0.911920}, + {0.442518,-0.580840}, + {1.561534,1.501570}, + {0.280203,0.397246}, + {-0.194177,0.276828}, + {0.944982,-0.351264}, + {0.022922,0.275745}, + {-0.867058,-1.632255}, + {0.280170,-0.145873}, + {0.108578,-0.052305}, + {-0.745809,-0.673504}, + {-0.616121,-0.379739}, + {1.008981,-0.155303}, + {0.285808,-0.263033}, + {0.601160,-0.612923}, + {0.900771,0.463246}, + {-1.013394,-0.618011}, + {1.233695,-0.032871}, + {-0.521967,-0.979415}, + {0.273272,-0.433226}, + {-0.240057,0.465270}, + {-0.465325,0.770377}, + {0.988019,-1.088975}, + {0.592680,0.367929}, + {0.800055,-0.721733}, + {-0.737244,-1.452977}, + {-0.427059,0.281520}, + {0.866413,-0.643401}, + {-0.182692,0.588766}, + {0.273523,0.294392}, + {0.566235,0.542400}, + {0.129606,0.397222}, + {-0.579409,0.288147}, + {-0.238510,0.268652}, + {1.122152,0.526534}, + {-0.841624,1.691837}, + {0.833782,1.207890}, + {-0.924153,2.110262}, + {-0.474350,-0.238235}, + {-0.515517,0.124354}, + {-0.064715,-0.236171}, + {0.599675,1.079644}, + {1.849341,0.024192}, + {0.161045,-0.379662}, + {0.823915,0.389173}, + {-1.260631,-0.467304}, + {0.052479,-0.187389}, + {-0.036665,0.449072}, + {0.069593,-0.152828}, + {0.068830,-1.285841}, + {0.680442,0.401365}, + {-0.160834,-2.024653}, + {-0.929411,0.671114}, + {-0.421687,0.749814}, + {-0.065965,0.527096}, + {0.929475,-0.741284}, + {-0.077824,-0.442484}, + {0.193024,-0.911981}, + {-0.101269,0.845595}, + {0.165756,0.295690}, + {0.319546,0.593792}, + {-0.808930,0.153177}, + {1.124408,0.458110}, + {0.771971,0.222809}, + {-0.167902,0.238733}, + {-0.169285,1.231875}, + {-1.585493,0.216024}, + {-0.747700,0.098100}, + {0.340226,-0.192779}, + {-1.219417,-0.107218}, + {0.228007,0.456442}, + {-0.007155,-0.634464}, + {-1.875543,0.567589}, + {-0.519810,-2.179719}, + {-0.904975,-2.451302}, + {0.736883,-0.419567}, + {0.918135,-1.128765}, + {0.384645,0.353239}, + {0.434095,-0.284308}, + {-0.374883,-0.095262}, + {-0.304398,0.413076}, + {-0.748666,1.124787}, + {-0.701671,0.451972}, + {0.395372,0.412637}, + {0.588244,-0.145257}, + {0.405163,1.023715}, + {0.744314,0.958872}, + {-0.037084,-0.577777}, + {-0.628322,-1.456151}, + {0.762014,-0.483828}, + {-0.958353,-0.171473}, + {-0.113997,1.464166}, + {1.350982,-0.530942}, + {-0.172846,-0.004565}, + {0.233537,0.941079}, + {-0.200530,0.383425}, + {0.264278,0.095382}, + {0.725498,1.193517}, + {1.280922,-0.026653}, + {0.097571,-0.441089}, + {0.300984,0.414280}, + {-0.041914,-0.544705}, + {1.009088,0.188493}, + {0.866042,-0.355025}, + {-0.317615,-0.910565}, + {0.489751,-0.574142}, + {0.963424,-0.661532}, + {-0.318844,-0.517722}, + {-0.190129,0.036885}, + {0.186444,-0.158205}, + {0.078693,-2.586327}, + {-0.266931,0.725793}, + {-0.074349,0.454831}, + {-0.374770,0.697565}, + {-0.467025,-0.014349}, + {-0.260550,-0.127574}, + {0.666807,0.559806}, + {-0.271031,-0.063661}, + {0.095739,0.428225}, + {-0.115755,0.220370}, + {1.075172,-0.821800}, + {1.387517,-1.151660}, + {-1.516364,0.833318}, + {-0.347857,0.250917}, + {0.299464,0.749435}, + {0.154734,-1.501682}, + {-0.503228,1.050996}, + {0.327790,-0.112045}, + {0.987849,-0.260528}, + {0.449412,1.852591}, + {-0.526460,0.814047}, + {-0.451808,-0.480134}, + {0.678355,0.739133}, + {0.317312,-0.328581}, + {0.196623,0.404023}, + {0.324616,1.699530}, + {-0.776618,-0.269720}, + {0.162184,0.179116}, + {0.297846,-0.710724}, + {-0.169321,0.167991}, + {1.769393,1.076862}, + {-1.380745,-0.595286}, + {0.568804,0.534699}, + {-0.846191,-0.871218}, + {-0.110816,-0.141844}, + {0.285220,-0.612886}, + {-1.000946,-0.050010}, + {-0.101431,-0.938313}, + {0.162775,0.079309}, + {-0.582009,0.345429}, + {0.124885,0.247372}, + {-1.328240,0.510701}, + {0.442295,0.051789}, + {0.949722,0.676903}, + {-0.111284,0.899622}, + {-0.437720,-0.322130}, + {-0.258154,0.985684}, + {-0.758257,0.557973}, + {-0.421330,-0.073546}, + {1.197222,-0.621330}, + {-1.526086,0.768420}, + {0.144164,0.595554}, + {0.071158,0.831643}, + {0.121315,1.096341}, + {-0.442333,0.055718}, + {0.261819,-0.929387}, + {-0.335194,-0.703410}, + {-0.634767,-0.488540}, + {-0.152389,-0.588104}, + {0.153830,-0.655196}, + {-0.631695,0.677282}, + {1.746302,-0.602460}, + {0.338172,-0.699808}, + {0.901305,0.660470}, + {1.137559,-0.192002}, + {-0.332112,0.081961}, + {-0.379872,0.728106}, + {-0.433884,-1.073145}, + {-0.247557,0.726460}, + {-0.232024,-0.849128}, + {1.187650,-0.092062}, + {-0.392385,-0.780775}, + {0.413751,-0.559636}, + {-0.431597,-0.961824}, + {0.463489,0.645597}, + {-0.897957,-0.663863}, + {0.842534,-0.688768}, + {-0.834302,-0.540110}, + {0.174923,-0.886926}, + {0.256774,-0.733313}, + {-0.513784,-0.360074}, + {0.156928,0.710061}, + {-0.779415,-0.205818}, + {1.122295,-0.263072}, + {-0.067941,-0.241437}, + {0.775305,-1.499039}, + {-0.959691,-0.336725}, + {-0.557347,0.644162}, + {0.097356,0.117803}, + {0.085507,1.845262}, + {0.507571,-0.452847}, + {0.157979,0.584192}, + {0.534463,0.510878}, + {0.436897,-0.704341}, + {-0.598275,-1.183016}, + {-0.479736,1.993246}, + {-1.004427,-0.606627}, + {1.175857,-0.209354}, + {-0.555928,0.024468}, + {-0.519805,-0.867264}, + {0.391430,0.558873}, + {-0.640640,0.630178}, + {-1.513294,0.362170}, + {-0.096170,0.302206}, + {1.549390,0.176401}, + {-0.712729,0.480838}, + {0.400243,-0.498461}, + {0.050925,-0.342701}, + {0.365122,0.134136}, + {0.517262,1.140502}, + {0.650985,-0.879352}, + {0.791790,0.189469}, + {0.654234,0.497645}, + {0.384115,-0.034611}, + {-0.125724,0.640141}, + {-0.543262,-1.255624}, + {-0.220592,-0.656310}, + {-0.130609,-0.147886}, + {-0.441347,0.720036}, + {0.400598,-0.080680}, + {-0.199337,0.873405}, + {0.032691,1.536398}, + {-0.093394,-1.310056}, + {-0.854984,1.071773}, + {0.102072,-0.810930}, + {-0.477344,0.066698}, + {0.648895,0.026279}, + {-0.285891,1.400032}, + {-1.216298,-0.236778}, + {-0.549714,0.688796}, + {-0.062685,-0.343855}, + {-0.341088,0.238776}, + {0.105347,0.048365}, + {0.514533,-0.634733}, + {-0.571926,0.456588}, + {0.367809,-0.456143}, + {0.979090,-1.286519}, + {-1.218222,0.367350}, + {-0.590629,-1.532832}, + {-1.718226,0.242958}, + {1.096783,-0.711503}, + {0.588342,0.376010}, + {0.744463,0.371433}, + {0.003243,0.668123}, + {0.062086,0.809872}, + {-1.132122,-0.104988}, + {0.084982,0.995250}, + {-0.688752,0.216891}, + {0.215504,-0.061450}, + {0.452003,-0.690233}, + {-0.723135,-0.275493}, + {0.357621,-0.515781}, + {-0.890998,-0.479333}, + {0.498701,-0.923387}, + {0.936200,-2.091405}, + {-0.879032,1.485557}, + {0.332185,-0.128280}, + {0.550373,0.387625}, + {0.632224,0.633608}, + {-0.605378,1.048378}, + {-0.472907,0.472679}, + {-0.926621,0.312398}, + {-0.285207,-0.148072}, + {-0.160155,-0.599110}, + {0.743425,0.098568}, + {0.668188,1.079139}, + {1.112103,1.452457}, + {-0.727684,-0.625500}, + {0.582495,0.602978}, + {-0.533045,-0.290135}, + {-0.137783,-0.815375}, + {-0.423199,-0.027111}, + {-0.199832,0.858830}, + {-0.774598,-0.479101}, + {-0.808559,0.112108}, + {-0.095061,-0.376614}, + {-0.643351,1.359531}, + {0.932951,-1.417012}, + {-0.848382,-0.222414}, + {-1.002188,-1.075297}, + {-0.939211,-0.668392}, + {0.479471,-0.342248}, + {-0.651955,0.089450}, + {-0.529345,1.103163}, + {-0.297371,0.787987}, + {-0.692098,-0.212505}, + {0.441398,0.601694}, + {1.155338,0.506600}, + {0.806606,-0.500708}, + {-0.740199,-1.292330}, + {-0.301074,0.068852}, + {0.517610,0.645486}, + {-0.240596,0.629380}, + {0.078991,-0.446581}, + {0.463990,-0.548239}, + {0.076625,-0.265612}, + {0.100232,-0.929770}, + {0.066872,0.589058}, + {-0.187736,-0.658316}, + {-0.822249,0.309850}, + {-0.917348,0.269891}, + {-0.295888,0.149902}, + {0.910250,0.779854}, + {-0.763011,-0.047352}, + {-0.345678,-0.728869}, + {0.991317,-1.211605}, + {0.654773,-1.301914}, + {0.240193,0.127080}, + {0.683297,0.857939}, + {-1.056701,0.902413}, + {0.538899,-0.329668}, + {-0.212189,0.730930}, + {-1.240264,-0.481620}, + {-0.735395,-0.030127}, + {-0.024994,-0.142647}, + {0.112034,-0.735685}, + {0.427365,-0.104027}, + {-0.416424,-1.693984}, + {1.186313,0.507243}, + {-1.550728,0.625737}, + {-0.395223,1.280803}, + {0.117296,0.255594}, + {0.078576,-0.343091}, + {0.336925,-0.610704}, + {0.535086,-0.319883}, + {0.586244,0.858364}, + {0.792222,-0.425311}, + {-1.174751,-0.317509}, + {-0.296053,1.341013}, + {-0.761628,0.373641}, + {0.144214,-0.064574}, + {0.308336,-0.161496}, + {0.713510,0.549545}, + {0.561945,0.014662}, + {0.618634,0.376704}, + {0.566078,-0.488592}, + {0.749551,-0.008964}, + {-1.439229,-1.800224}, + {0.330291,0.691467}, + {-0.371258,1.717772}, + {0.264541,1.219097}, + {-0.449660,0.278444}, + {-0.925116,-0.622006}, + {1.810841,0.357436}, + {-0.361036,-0.568890}, + {-0.245604,-0.543745}, + {-0.809004,-0.297720}, + {0.673398,-1.349551}, + {0.320146,0.122381}, + {0.055778,0.645761}, + {-1.114450,0.141513}, + {0.191087,1.024756}, + {-0.230242,0.131826}, + {1.440529,-0.146838}, + {-0.309778,-0.905495}, + {0.038309,0.453297}, + {-0.322784,0.721147}, + {-0.358682,-0.408192}, + {-0.387312,-1.581744}, + {0.455011,0.089694}, + {-0.435709,0.434022}, + {1.121966,0.703677}, + {-0.000289,0.898656}, + {0.370298,0.569843}, + {-0.759395,0.155326}, + {0.264595,-0.758241}, + {-0.717438,-1.284560}, + {0.534397,0.044761}, + {-0.387217,-0.850411}, + {0.044635,-0.092650}, + {-0.372661,-0.068370}, + {0.066867,0.992163}, + {0.309686,-0.088930}, + {-0.551975,1.140835}, + {0.282269,-0.265153}, + {-0.385975,0.629002}, + {-0.588541,0.936380}, + {-0.450421,-0.312229}, + {-0.584466,0.390126}, + {-0.561504,0.846689}, + {-0.327959,1.138398}, + {0.772840,-1.154541}, + {0.109965,0.119873}, + {-1.041428,0.030014}, + {-1.054290,-0.520300}, + {-0.401694,-1.322928}, + {0.339501,-1.053816}, + {-1.483539,0.383590}, + {0.179033,-0.005078}, + {-0.449563,0.617536}, + {0.159361,-0.300597}, + {0.681503,0.425180}, + {0.075334,-0.054530}, + {1.127598,-0.722161}, + {0.830144,-0.411552}, + {0.130735,-0.537078}, + {-0.318294,0.279468}, + {1.329998,0.436047}, + {0.628394,0.202456}, + {0.452344,-1.322196}, + {-1.328185,1.430783}, + {-0.607721,-0.864380}, + {0.504693,-0.747412}, + {0.873797,0.066753}, + {-1.716981,-1.433918}, + {-1.009027,-0.760573}, + {-0.113434,0.171071}, + {-0.037380,0.247667}, + {0.522725,-0.251274}, + {0.372523,-0.578671}, + {0.363876,-0.147056}, + {0.646783,-0.450081}, + {1.137476,0.323571}, + {-0.780254,-0.368106}, + {1.146234,0.162286}, + {0.762737,0.417214}, + {-1.238331,0.742666}, + {-0.390029,-0.580793}, + {0.171207,0.920070}, + {0.371806,-0.258019}, + {-1.675454,0.112764}, + {0.314425,0.532884}, + {-0.212717,0.521552}, + {1.230658,0.602619}, + {0.024240,1.086085}, + {-0.753075,0.421991}, + {1.184260,0.288993}, + {-0.156075,-0.349412}, + {0.070528,-0.556874}, + {1.304863,0.059083}, + {0.075264,0.205343}, + {-0.115468,0.910225}, + {-0.086719,-0.359175}, + {0.580907,1.065438}, + {0.059108,-1.456124}, + {1.143980,-0.250649}, + {-0.532360,0.202426}, + {-1.306963,0.894754}, + {-0.004374,0.331473}, + {0.530959,1.017206}, + {0.896061,-0.486310}, + {0.124527,-0.835825}, + {0.401800,-0.694786}, + {0.131098,-0.507110}, + {-0.493495,-1.031719}, + {-0.380582,0.015232}, + {-1.773868,0.203092}, + {-0.243199,-0.939094}, + {-0.243723,-1.167272}, + {0.991581,0.396060}, + {-0.559749,0.941881}, + {0.942520,1.077600}, + {-0.572208,0.399250}, + {-1.198896,0.820616}, + {-0.733767,0.042879}, + {-1.020932,1.153919}, + {-1.048099,0.943322}, + {-0.354407,0.317066}, + {0.308045,0.211141}, + {0.831764,-1.378969}, + {-0.007062,-0.513552}, + {0.967642,0.641026}, + {-0.668442,0.316706}, + {-1.122864,-0.024464}, + {0.316990,0.362859}, + {-0.111627,0.744548}, + {0.185230,-0.636517}, + {1.227635,-0.165264}, + {-0.506497,0.297073}, + {-0.317230,-0.293662}, + {0.344244,0.550272}, + {0.086386,0.725618}, + {-0.374595,0.121906}, + {0.205497,1.783572}, + {0.647253,-0.895754}, + {0.162982,-0.022414}, + {-0.994075,-1.237339}, + {1.033565,-0.151604}, + {-0.280396,0.878138}, + {-0.264564,-0.165480}, + {0.301752,0.255018}, + {-0.615882,0.711428}, + {0.300740,0.246028}, + {1.845295,-0.214744}, + {1.080206,-0.092894}, + {0.015605,0.522865}, + {1.172807,-0.447869}, + {-0.821485,0.490399}, + {-0.306496,0.230408}, + {0.709987,-0.375342}, + {-0.355816,0.453023}, + {-0.212208,-0.678919}, + {0.091036,-0.565006}, + {0.116062,-0.416735}, + {1.050847,0.339220}, + {1.742643,-0.228713}, + {-0.434887,-0.201646}, + {-0.382463,-0.917137}, + {-0.598962,0.979455}, + {-0.678083,-0.074060}, + {1.074554,0.667668}, + {-0.175566,0.080397}, + {-0.746242,-0.837080}, + {0.569198,-0.288397}, + {-0.419237,0.814960}, + {1.110668,0.610994}, + {1.024729,-0.522782}, + {0.287071,0.129891}, + {1.059693,0.192434}, + {-0.500546,1.681387}, + {-0.352649,0.693367}, + {1.330871,0.878471}, + {1.452162,1.296531}, + {-0.561816,1.060767}, + {-0.024246,0.549463}, + {-0.558191,-0.475732}, + {0.579874,-0.378951}, + {-0.386188,0.616314}, + {1.904212,-0.081406}, + {0.056011,0.587343}, + {2.079102,-0.449990}, + {-0.585793,0.200955}, + {-0.148105,-0.720863}, + {-0.871106,1.178992}, + {-0.259457,0.018706}, + {-0.838352,-0.101366}, + {1.104726,-0.165176}, + {-0.376425,0.962019}, + {-0.383321,-0.621639}, + {0.185654,-0.673447}, + {0.088111,0.910684}, + {1.972742,1.066469}, + {0.343070,1.425779}, + {0.235284,-1.008437}, + {-0.232498,-0.780531}, + {-0.285426,0.387394}, + {0.570176,0.601760}, + {0.857470,0.042025}, + {0.823288,0.485621}, + {-0.161700,0.393089}, + {0.653084,-0.695477}, + {0.397400,1.144465}, + {0.330464,1.209299}, + {-0.905504,0.536976}, + {0.462790,0.056269}, + {0.181789,0.418193}, + {-0.442622,-0.997435}, + {-0.622074,-1.020432}, + {0.174594,-0.272027}, + {0.195162,0.424718}, + {-0.483125,-0.014181}, + {-0.333027,-0.666385}, + {-0.225218,-1.387923}, + {0.380830,-0.801521}, + {0.500795,0.083064}, + {-0.354031,0.562019}, + {-0.322369,0.355784}, + {-0.689934,1.420140}, + {0.505533,0.590711}, + {-0.258165,-0.519527}, + {0.484829,0.168475}, + {-0.887195,0.627565}, + {-0.569851,0.255714}, + {0.656937,1.030732}, + {0.253163,1.183688}, + {-0.090994,0.350419}, + {-0.621855,0.522503}, + {1.260944,-0.340844}, + {-0.328843,1.339729}, + {-0.187433,0.904883}, + {-0.091476,1.344383}, + {-0.398040,-0.259532}, + {0.059961,-0.952296}, + {-0.669200,-0.513899}, + {0.882696,-0.883357}, + {0.445337,0.858188}, + {-0.376645,0.216174}, + {0.251451,1.293422}, + {-0.343713,0.459366}, + {-0.790002,-1.400639}, + {-0.281481,0.156530}, + {-0.050578,-0.812539}, + {-0.069669,-0.942398}, + {0.206314,1.062811}, + {-0.862538,0.079873}, + {-0.142145,-0.179803}, + {-0.635656,0.187704}, + {-0.288690,-0.632587}, + {0.489273,-1.319410}, + {-0.113265,0.243749}, + {-0.547880,0.138515}, + {0.503130,-0.553393}, + {-1.042138,1.207500}, + {0.993756,1.771553}, + {0.945115,0.708578}, + {-0.755664,-0.227831}, + {2.114421,0.144923}, + {1.322935,0.007610}, + {0.668800,0.872877}, + {1.206511,1.284430}, + {0.119083,1.037143}, + {0.469420,-0.968104}, + {0.178111,-0.706050}, + {-0.093654,0.351570}, + {1.216869,-0.083921}, + {1.128239,-0.721634}, + {-0.603763,-1.222727}, + {-0.246507,0.765585}, + {-0.469168,-0.154943}, + {0.115194,-0.645646}, + {-0.628875,-0.134190}, + {-0.218869,1.072319}, + {-0.304600,-0.845963}, + {0.041486,0.312707}, + {-0.824256,0.026274}, + {-0.398291,0.206157}, + {0.865547,0.384018}, + {-0.518704,-0.244805}, + {0.770365,-0.244413}, + {-0.853040,1.803973}, + {-0.112336,0.330401}, + {0.389707,0.066202}, + {-1.206726,-0.931216}, + {0.890161,1.029948}, + {0.224077,-0.218359}, + {-0.835221,0.379948}, + {-0.576608,0.010603}, + {-0.046229,-0.651582}, + {0.149031,-0.006860}, + {-0.232445,-0.153048}, + {-0.361445,-0.624316}, + {-0.089316,-0.902206}, + {-0.677576,0.291582}, + {-0.694052,0.341786}, + {0.604152,0.954109}, + {-0.451568,-1.027999}, + {0.888470,0.246610}, + {1.378708,-0.162367}, + {0.807884,-0.154657}, + {-0.121010,0.723971}, + {0.756675,-0.287967}, + {-1.352302,0.460834}, + {-0.539413,-0.417247}, + {0.138693,0.716212}, + {-1.262669,0.189740}, + {-0.127893,0.098501}, + {-2.031114,-0.515120}, + {-0.566216,0.134760}, + {-0.894512,-1.013835}, + {0.545570,-0.785318}, + {0.314537,-0.541041}, + {-0.623232,-0.972520}, + {-0.239815,-0.060572}, + {-0.016385,0.088118}, + {0.233685,0.536110}, + {-0.701300,0.465990}, + {0.772176,-0.169732}, + {-0.111524,-0.101524}, + {0.058288,1.465041}, + {0.712798,-0.116610}, + {0.667813,0.354510}, + {-0.055343,-0.426603}, + {0.923450,-0.343740}, + {0.351264,-0.768122}, + {-0.881422,0.152680}, + {-0.929116,1.638255}, + {0.167936,-0.278059}, + {1.027618,0.529101}, + {-0.777487,-0.773029}, + {-0.171119,-0.587115}, + {-0.630818,0.969008}, + {0.561234,0.268168}, + {0.106045,-0.638529}, + {1.266788,-1.129971}, + {-0.995631,-0.558621}, + {0.188110,-0.702478}, + {0.335395,-0.240620}, + {-0.116215,0.260554}, + {0.680446,-0.603189}, + {0.904362,1.717741}, + {-0.015833,0.746788}, + {-0.148045,0.051645}, + {0.009869,0.846651}, + {0.298090,1.350605}, + {1.345340,-1.423719}, + {-0.754747,-1.335279}, + {0.419094,-0.864441}, + {-0.145479,-0.797688}, + {0.135712,0.991836}, + {0.225006,-0.060168}, + {0.355427,0.550726}, + {1.954229,0.656213}, + {-0.169736,0.311985}, + {0.939487,0.650424}, + {0.789964,-0.684274}, + {0.164532,0.093543}, + {0.060515,0.106031}, + {-0.024316,-0.913373}, + {-0.582858,0.242192}, + {-0.599441,0.706627}, + {-0.037631,-0.529508}, + {0.108102,0.029830}, + {-0.766994,0.601282}, + {-1.162212,-0.241856}, + {-0.283526,1.599770}, + {-1.549907,-0.505364}, + {0.722774,0.073483}, + {-1.024597,-0.392075}, + {0.858099,-0.287027}, + {0.327537,-1.007954}, + {0.667032,-0.025028}, + {0.975513,0.143732}, + {0.018982,0.474133}, + {-0.098149,1.106961}, + {-0.108187,-0.707083}, + {-0.219794,0.475886}, + {0.210508,-0.510677}, + {-0.416087,-0.900413}, + {-0.752409,-0.392688}, + {0.327123,-0.496539}, + {-0.879819,-1.010528}, + {-1.401704,-0.483436}, + {-1.566675,-0.015039}, + {-0.550926,-0.315944}, + {-0.711913,-0.986015}, + {0.408434,-0.200798}, + {-0.921718,0.340502}, + {-1.323506,-0.767555}, + {0.762208,-0.010204}, + {1.414222,-0.108579}, + {-1.279120,-0.115126}, + {-1.063315,-0.287798}, + {-0.612699,0.708367}, + {1.058841,-0.974767}, + {-0.887090,0.515838}, + {-0.169713,-0.586082}, + {0.468957,-1.057315}, + {-1.137185,-0.201351}, + {0.857001,0.506281}, + {-0.694478,1.116885}, + {-0.101536,0.252581}, + {-0.186678,0.121469}, + {0.237319,1.220649}, + {0.590731,0.106154}, + {-0.307152,-0.195058}, + {-0.534827,0.484876}, + {1.112901,0.239961}, + {0.050445,0.481539}, + {0.545830,0.854745}, + {-0.687006,-0.117939}, + {0.167796,0.067286}, + {-0.200961,-0.851043}, + {-0.029250,-0.070030}, + {0.571111,-0.402512}, + {-0.291893,-0.486622}, + {0.199427,-0.464909}, + {0.485504,0.196643}, + {-1.203786,1.305744}, + {-0.457443,2.058590}, + {-0.206683,-0.175040}, + {0.166361,0.461590}, + {-0.426843,-1.352936}, + {0.501698,0.238129}, + {-0.809285,-0.792133}, + {-0.655155,0.336089}, + {0.726113,-1.582158}, + {-0.150580,0.179097}, + {0.715039,-1.127365}, + {-0.012255,-1.422302}, + {-0.291115,-0.120922}, + {0.109163,0.722364}, + {0.653337,0.016132}, + {0.459079,-0.773381}, + {-1.171660,1.182249}, + {-0.102436,0.837007}, + {0.845445,0.528685}, + {-0.409713,0.406902}, + {0.830749,0.057450}, + {0.671611,0.782030}, + {0.200145,-1.167993}, + {-0.205830,-0.256860}, + {0.341035,0.280555}, + {-1.201147,-0.323218}, + {-0.212821,0.050460}, + {0.742152,-0.323082}, + {0.819270,0.195198}, + {0.669024,0.897072}, + {-0.501893,-0.365942}, + {-1.308934,0.089249}, + {-0.037597,-0.113499}, + {-1.004372,0.368385}, + {0.141077,-0.067610}, + {0.275376,-0.743583}, + {-0.191894,-1.129273}, + {-1.258964,-0.039886}, + {0.728804,-1.000285}, + {1.086578,-0.617149}, + {-0.855317,-0.310454}, + {-0.147711,0.408143}, + {-0.517206,0.043758}, + {0.719426,-1.283598}, + {-0.235939,0.668859}, + {-0.380010,-0.313257}, + {0.316778,-0.118759}, + {-0.262927,-1.567183}, + {-0.282733,0.420140}, + {0.818925,-0.012589}, + {0.357610,0.577911}, + {-0.190272,-0.414123}, + {0.625359,1.169565}, + {-0.917634,0.809205}, + {0.909000,-0.614465}, + {-0.273865,0.307313}, + {0.708742,1.146401}, + {-0.736018,1.297624}, + {-0.132588,-0.042389}, + {0.752216,-0.630562}, + {0.602787,-0.506396}, + {0.633488,0.200361}, + {0.862136,-0.559107}, + {0.745865,-1.328896}, + {-0.015377,-0.603058}, + {0.012261,0.207465}, + {-1.262966,0.309847}, + {-0.816732,-0.048421}, + {1.368862,-0.089376}, + {-0.950272,-0.966439}, + {0.201282,-0.088005}, + {-0.675286,0.791768}, + {0.857350,-0.330363}, + {0.297582,-0.494692}, + {-0.536755,0.002392}, + {-0.209953,0.732953}, + {-0.443116,-0.086068}, + {-1.175001,0.573199}, + {-0.515406,0.620601}, + {0.519220,0.365639}, + {0.179975,-0.360670}, + {-0.307683,0.106896}, + {0.132153,0.727465}, + {-0.280980,-0.228803}, + {0.239138,-0.878369}, + {-0.037641,0.340422}, + {0.908774,-1.101317}, + {0.049850,-0.299075}, + {0.019113,0.674994}, + {-0.015975,0.379414}, + {0.288954,-0.809359}, + {0.347018,-1.157598}, + {0.074732,-0.537650}, + {0.996135,-0.001765}, + {0.056827,-0.488387}, + {-0.833093,0.386931}, + {0.758476,0.872903}, + {-0.745092,-0.444934}, + {-0.224247,-0.116532}, + {-0.204749,0.261726}, + {0.404937,0.616612}, + {0.339130,0.532116}, + {0.321454,-0.851996}, + {0.318065,0.804013}, + {0.255111,-0.303607}, + {0.430730,0.409011}, + {0.336340,-0.608268}, + {0.689794,0.099887}, + {0.120092,0.052738}, + {-0.588516,-0.366448}, + {0.325651,-0.658579}, + {0.947989,-0.734417}, + {0.016734,-0.728917}, + {-0.841605,0.381322}, + {0.231804,0.206317}, + {1.051284,-0.490680}, + {-0.050906,-0.211480}, + {-0.105047,0.477795}, + {-0.252414,-0.626855}, + {-0.057217,-0.134807}, + {1.067822,-0.178322}, + {-0.086659,-1.147155}, + {-0.741801,0.582173}, + {0.803925,-1.119881}, + {0.543473,0.197205}, + {0.407991,-0.434675}, + {0.107264,-0.319198}, + {1.091457,0.760169}, + {-0.013718,0.000686}, + {-1.248275,0.208178}, + {-0.899392,0.261502}, + {-0.631148,-0.302873}, + {0.083128,0.705050}, + {-0.778608,-0.788078}, + {1.135346,-0.872922}, + {-1.157340,-0.867567}, + {-0.593543,-2.187029}, + {0.093469,0.234575}, + {0.443437,-0.304265}, + {1.551142,-1.422596}, + {0.442576,-1.577903}, + {0.192425,0.160683}, + {-0.902680,-0.431437}, + {-1.004525,-0.745898}, + {-0.483396,-0.192180}, + {1.080987,-0.266741}, + {-0.903296,1.170854}, + {-0.364402,0.684777}, + {0.309202,-0.017096}, + {-0.492831,-0.600043}, + {-1.612991,-0.804477}, + {-0.407146,-0.758813}, + {0.829137,-0.603992}, + {-0.251557,-0.383196}, + {-0.743938,0.109216}, + {1.011679,-0.340907}, + {0.241315,0.068707}, + {-1.006463,0.402521}, + {0.031220,-0.028792}, + {-0.417251,-1.398311}, + {0.775474,0.111723}, + {-1.223098,-0.658243}, + {2.340365,-0.265007}, + {0.301015,-0.206530}, + {-0.200633,-0.557171}, + {-0.202832,0.319060}, + {-0.010049,0.742861}, + {0.106082,0.811121}, + {0.055592,-0.191956}, + {0.355395,0.583195}, + {0.282830,-0.170406}, + {0.025638,1.918779}, + {0.944669,-0.058716}, + {1.264998,1.490664}, + {0.823037,0.092036}, + {1.217579,-0.491040}, + {0.037653,-0.782702}, + {0.149131,-0.656208}, + {0.410757,1.584757}, + {1.325665,0.028426}, + {0.971514,-0.170968}, + {0.142927,-0.349601}, + {-0.675615,1.239243}, + {1.118417,0.482521}, + {-0.525994,0.493175}, + {-1.053111,-0.390079}, + {0.030564,0.067288}, + {-0.074059,-0.899509}, + {-0.360663,0.382902}, + {0.550419,0.853873}, + {-0.544569,-0.824151}, + {0.568337,0.130398}, + {-0.604970,0.925242}, + {0.220753,-0.254279}, + {0.337711,0.557667}, + {-0.753422,-0.586669}, + {0.428708,-0.232984}, + {1.794279,0.483338}, + {1.304773,-0.365589}, + {-0.433436,-0.791504}, + {-0.214934,0.966716}, + {-0.305057,0.580224}, + {-0.106751,-0.822595}, + {1.028315,-0.877748}, + {0.852443,-0.409121}, + {0.625301,0.180248}, + {1.396398,0.143160}, + {1.108587,0.541150}, + {0.468621,-1.043421}, + {0.906804,0.715312}, + {-0.766680,0.905431}, + {-0.441257,0.668639}, + {0.284121,-0.043281}, + {-0.616953,0.794195}, + {0.163532,-0.395955}, + {-0.412360,-0.597153}, + {0.241518,-0.585513}, + {0.482960,0.567925}, + {-1.054434,-0.649045}, + {0.605650,-0.378689}, + {-0.609803,0.359699}, + {1.365516,0.646388}, + {-0.344219,0.120575}, + {-0.654285,-0.631225}, + {0.468870,0.618246}, + {-0.390055,0.556382}, + {-0.508965,0.454676}, + {0.116800,0.138547}, + {-1.168829,-0.304091}, + {-0.385664,-0.659049}, + {-0.639212,-1.396839}, + {1.224527,1.061921}, + {-0.712606,-0.081001}, + {0.120125,-0.300214}, + {0.179791,-0.636082}, + {-0.605018,-0.693630}, + {-0.678318,-0.318564}, + {-0.598472,-0.031708}, + {-0.520574,-0.296742}, + {0.067744,-0.796947}, + {0.696445,0.463145}, + {0.094760,-0.023756}, + {-1.028425,1.287291}, + {-0.669956,0.116063}, + {-0.209304,0.099915}, + {-1.108453,-0.002002}, + {-0.060206,-0.515472}, + {0.981295,0.380674}, + {0.263531,-0.667106}, + {0.250979,0.072504}, + {-0.096590,0.766292}, + {0.920231,-0.755035}, + {-0.505097,-1.091862}, + {-0.615787,0.117510}, + {0.368374,0.389098}, + {-0.126383,-0.430203}, + {0.164085,-0.529933}, + {0.599555,-0.034148}, + {1.102519,-0.438562}, + {0.085070,-0.251993}, + {0.865140,0.585431}, + {0.934833,-1.057558}, + {0.249809,-0.620187}, + {0.265592,1.080486}, + {-0.634548,-0.038819}, + {-0.150059,0.264938}, + {0.250318,1.521858}, + {-0.173384,-0.223300}, + {0.129138,0.492724}, + {1.592594,0.165069}, + {-0.331133,1.012240}, + {-0.697260,-0.195315}, + {-0.312506,-1.024730}, + {-0.234223,-0.824909}, + {-0.383885,0.106128}, + {-0.175865,0.392687}, + {-0.510849,-0.462690}, + {-1.018937,1.151529}, + {-0.038301,-0.066566}, + {0.530731,0.127405}, + {-0.208679,-0.107666}, + {0.120497,1.016165}, + {-0.052440,0.725401}, + {1.832884,-0.342007}, + {0.092143,0.258115}, + {-1.159934,-0.970688}, + {0.589430,-0.586012}, + {1.209632,1.986167}, + {-0.366520,0.055513}, + {0.384307,0.775611}, + {-0.877936,-2.193519}, + {-0.003713,1.002400}, + {-1.173911,0.755036}, + {-0.477599,0.075858}, + {0.388147,0.137404}, + {-0.270243,-0.165515}, + {-0.260462,1.171696}, + {-0.150456,-0.885312}, + {0.469399,-0.599552}, + {-0.597813,-0.750128}, + {0.095583,-0.274177}, + {-0.509728,1.587391}, + {0.972749,0.614814}, + {-0.752960,-0.189362}, + {1.062092,-0.210413}, + {-0.114508,0.325050}, + {1.881627,0.271021}, + {-1.128107,-0.567826}, + {0.014185,-0.695967}, + {0.338390,0.827812}, + {-0.274898,0.464329}, + {0.550296,0.200794}, + {-0.197346,-1.187593}, + {-0.155908,-0.802583}, + {-0.207092,-0.070371}, + {-0.486399,-1.113643}, + {-0.129494,-0.242884}, + {0.631126,0.237594}, + {0.772150,-1.293381}, + {-0.148225,1.069063}, + {-0.557726,0.180037}, + {-0.251261,0.420506}, + {-0.687525,-1.530252}, + {0.308271,-0.038557}, + {-1.212547,0.035603}, + {-0.060400,-0.303898}, + {1.425639,-0.355048}, + {0.144429,0.420649}, + {-0.688609,-0.997562}, + {0.259183,-0.891376}, + {0.275503,-0.114022}, + {-1.060990,-0.859264}, + {-1.590535,-0.179986}, + {-0.197122,-0.339152}, + {-1.741402,-1.241081}, + {-0.101596,-0.103421}, + {-0.576440,-0.998940}, + {-0.159847,-0.078504}, + {-0.598367,-0.701100}, + {0.454856,0.507896}, + {-1.739180,-0.913037}, + {1.341986,0.134193}, + {-0.290217,-0.535215}, + {0.783955,-0.574633}, + {-0.126710,-1.241383}, + {-1.693904,-0.209030}, + {0.500406,0.058675}, + {0.876139,-0.205673}, + {0.347464,1.353533}, + {-0.250533,-0.590198}, + {-0.049717,0.984800}, + {-1.667565,-0.013165}, + {0.328547,0.584034}, + {-0.578874,-0.321222}, + {0.607281,-0.663825}, + {-0.042807,-0.635103}, + {-0.198325,-0.054844}, + {-0.567400,-1.007322}, + {0.181597,-0.281650}, + {0.922825,0.237707}, + {-0.725941,0.008540}, + {0.146820,0.712341}, + {-2.004479,0.919673}, + {-0.437029,-0.158475}, + {0.009848,0.194884}, + {0.064501,0.515108}, + {0.966986,-0.106012}, + {0.431525,-0.640987}, + {0.226213,0.704404}, + {-0.389554,0.297250}, + {0.227194,-0.123749}, + {0.958163,0.684737}, + {-0.763641,-1.299124}, + {-0.519729,1.144937}, + {0.517323,0.380140}, + {0.358759,-0.376012}, + {0.485276,-1.189659}, + {-1.128039,0.154856}, + {0.012640,-0.800780}, + {-1.023062,0.541789}, + {-0.088985,1.220985}, + {-0.274541,0.330453}, + {-0.223176,0.277022}, + {-1.250833,0.859561}, + {0.166349,-1.059528}, + {0.706370,1.301363}, + {0.865846,-0.966971}, + {-0.746104,-0.181980}, + {-0.382071,-0.287606}, + {-0.696105,0.935651}, + {-0.754779,-0.608633}, + {1.558518,-0.068025}, + {-0.730162,-1.159437}, + {-1.243312,-0.025267}, + {0.538259,-0.151188}, + {0.755668,0.731049}, + {0.362774,-1.112199}, + {0.951361,-0.710292}, + {1.205493,0.703087}, + {-0.384461,-0.900938}, + {0.558954,0.738985}, + {0.534887,-0.264438}, + {0.451519,-0.094902}, + {0.271715,-0.849368}, + {-0.622068,-0.879637}, + {0.747059,0.748628}, + {-0.141696,-0.554025}, + {-0.162613,-0.058699}, + {-0.438999,-0.305623}, + {-0.974950,-0.030913}, + {-0.836826,-1.211227}, + {0.066026,-0.500706}, + {0.317875,0.639406}, + {1.768633,-1.108933}, + {-0.169267,-0.005666}, + {0.308455,0.547168}, + {-0.792556,-0.067929}, + {-1.053188,-0.742882}, + {-0.439344,1.796462}, + {0.928509,-1.153488}, + {-0.883353,0.292079}, + {1.150053,-0.757907}, + {0.159497,0.386146}, + {-0.575171,0.435701}, + {-0.104603,-0.597094}, + {-0.010359,-0.762375}, + {0.533096,-0.049087}, + {-0.622529,-0.504482}, + {-0.649558,-0.521691}, + {1.604563,-0.953022}, + {0.483842,0.422572}, + {0.604771,0.258910}, + {-0.420070,0.075085}, + {-0.670900,-0.537843}, + {-0.643097,-0.750436}, + {2.158761,-0.134695}, + {-0.699376,1.792557}, + {0.316584,0.159085}, + {-1.290301,0.659405}, + {-0.470062,0.491114}, + {-0.217911,0.097260}, + {-0.883950,0.411357}, + {-1.137233,-0.417558}, + {-0.060187,0.823960}, + {-0.527339,0.909397}, + {0.614027,-0.516774}, + {0.326730,-0.720490}, + {-0.732945,1.140511}, + {0.527214,-0.857791}, + {0.354728,0.527356}, + {-1.042879,-0.843408}, + {0.388951,-0.250227}, + {-0.760452,-0.272504}, + {0.670556,1.780283}, + {0.178493,-0.103607}, + {0.281239,0.573283}, + {-0.276774,-0.666889}, + {-0.369088,-0.515050}, + {-1.566099,-0.292304}, + {0.241018,0.111041}, + {-0.579810,-0.131634}, + {0.614676,-1.020588}, + {2.122965,-0.652456}, + {1.003513,-0.009904}, + {0.384063,-0.315227}, + {1.662325,-1.228987}, + {0.421827,-0.875429}, + {0.615807,-1.046427}, + {-0.369778,0.103087}, + {-1.400076,-1.351331}, + {0.243226,0.565874}, + {-0.190009,-1.569295}, + {0.431636,-0.614997}, + {0.640676,-0.202974}, + {0.723470,0.490124}, + {0.178854,0.920912}, + {0.291047,0.310138}, + {1.437523,-0.613064}, + {0.311316,1.098868}, + {0.064226,0.222299}, + {0.635425,0.681261}, + {-2.079335,-0.027042}, + {-1.620853,-0.434969}, + {-0.771540,-0.951936}, + {0.075813,-0.359065}, + {-0.196248,0.026575}, + {0.549859,-0.479033}, + {0.779249,-0.479395}, + {0.489763,0.682128}, + {0.779679,0.447111}, + {0.248959,-0.926465}, + {-0.978864,-0.625647}, + {0.487766,-0.729178}, + {0.488021,-0.395398}, + {-1.132487,-0.266249}, + {-0.946289,-0.121230}, + {-0.043873,-0.494146}, + {-1.797368,-0.163129}, + {0.604546,0.840547}, + {-0.100001,0.205591}, + {-0.704900,-0.745045}, + {0.141108,-0.367080}, + {0.714093,0.338304}, + {-0.211548,0.288865}, + {-0.139203,1.696446}, + {0.398683,-0.856051}, + {-1.399684,1.056120}, + {-0.172748,-0.560887}, + {-0.742047,-1.011942}, + {0.435281,-1.466353}, + {0.372200,0.312796}, + {-0.470258,0.052912}, + {-0.720672,-0.015639}, + {0.525673,0.064041}, + {0.322946,0.778343}, + {-0.715545,0.200291}, + {-0.638279,-0.376644}, + {0.318214,1.262688}, + {0.518733,-0.228811}, + {-0.587650,-1.462563}, + {0.669318,-0.231777}, + {0.771174,0.304270}, + {-0.186317,1.664676}, + {0.111617,-1.626430}, + {-0.574343,1.310556}, + {1.093523,1.010366}, + {-0.051229,0.373412}, + {-1.055527,-0.123199}, + {1.258413,-0.434222}, + {0.204129,0.827730}, + {-0.609029,0.323469}, + {1.834988,0.769506}, + {-0.473224,0.009616}, + {-0.936846,-1.464676}, + {0.419282,0.867511}, + {0.691505,-0.431348}, + {0.462740,-0.806883}, + {-0.077804,0.056353}, + {0.201756,0.460018}, + {-0.101533,-0.186722}, + {-0.683106,-0.812029}, + {0.393013,0.220783}, + {0.960070,0.016689}, + {-0.818561,0.072895}, + {-0.304093,0.221132}, + {0.432887,0.613225}, + {0.799350,1.722360}, + {-1.201054,0.101461}, + {-0.284951,-0.099726}, + {-0.284407,1.019124}, + {1.161096,-1.015084}, + {0.470649,0.547416}, + {0.910485,-0.148244}, + {0.903437,-0.639555}, + {0.414630,-0.744832}, + {-0.807047,0.328593}, + {0.546277,0.129403}, + {0.979881,1.317070}, + {0.815188,-1.157551}, + {0.652102,0.325572}, + {0.986148,-0.443291}, + {0.321192,-0.168401}, + {-0.095464,0.134572}, + {-0.644626,-0.367752}, + {1.186512,1.426639}, + {-1.268228,-1.212135}, + {0.329307,-0.048942}, + {-0.453068,0.181014}, + {-0.120221,1.319718}, + {0.203761,1.057543}, + {0.323603,-0.370886}, + {1.278257,0.506360}, + {-0.137128,-0.217014}, + {-0.123980,-0.196150}, + {0.969988,0.131635}, + {1.034595,0.043616}, + {0.051072,-0.038913}, + {0.475718,0.545762}, + {0.860966,-0.183492}, + {1.509751,0.139050}, + {0.183777,0.478787}, + {0.452950,0.262511}, + {1.193602,-0.473727}, + {1.279293,1.055423}, + {0.496909,0.719865}, + {1.540333,-0.346943}, + {-0.293427,-0.718329}, + {0.304463,1.034630}, + {0.081471,-1.789542}, + {-0.654413,0.275167}, + {-0.234365,0.326354}, + {-1.026665,0.836313}, + {1.740778,-0.446498}, + {1.571499,0.008159}, + {-1.551162,0.190736}, + {0.766180,-1.958868}, + {-0.246677,0.141081}, + {-1.245445,-1.767784}, + {0.338713,-0.398232}, + {-0.167049,0.337391}, + {1.670908,-0.878596}, + {-0.346210,0.066791}, + {-0.167848,-0.262351}, + {-0.838038,-0.908504}, + {0.665549,-0.241012}, + {0.507867,-1.133164}, + {0.083940,-0.788292}, + {0.689884,0.002313}, + {0.188896,0.230707}, + {-0.395535,0.585358}, + {0.759700,0.630998}, + {0.406334,0.692208}, + {-0.523691,0.244080}, + {-0.358877,-0.192886}, + {0.658757,-1.197811}, + {0.276591,-0.550659}, + {1.042222,-0.377038}, + {-0.519696,0.588037}, + {0.042507,0.893983}, + {-1.038433,-0.388424}, + {0.229740,0.097563}, + {0.050357,0.853214}, + {1.178250,0.666711}, + {1.119683,0.327372}, + {0.299392,0.581337}, + {-0.726023,0.958577}, + {-2.087364,-0.040116}, + {-0.733430,-0.365305}, + {-0.183230,0.747083}, + {0.195544,-0.669629}, + {0.096009,0.081064}, + {-0.158337,0.140540}, + {-0.141282,1.098426}, + {-0.200366,-0.260091}, + {0.179909,0.324990}, + {-0.177505,0.710188}, + {0.418389,0.656253}, + {0.201164,-0.480767}, + {-0.663206,-0.632061}, + {0.866354,0.298333}, + {0.580605,-0.186255}, + {1.573994,-0.905037}, + {-0.331628,-0.857198}, + {0.740416,0.061667}, + {-0.564123,-0.882095}, + {-0.015107,0.034831}, + {0.843711,0.918154}, + {-1.214840,0.950409}, + {-0.362231,0.026602}, + {-0.345554,0.438305}, + {-0.413601,0.471900}, + {-1.395099,-1.305808}, + {-0.405840,-0.326921}, + {0.411408,-0.368048}, + {0.883666,-0.358755}, + {-0.035198,0.003136}, + {0.954488,-0.213214}, + {0.332939,0.172640}, + {0.959216,0.688263}, + {0.018761,2.039100}, + {2.100315,0.051013}, + {-0.271325,-0.485585}, + {0.510974,-0.232181}, + {-0.510400,-0.715401}, + {0.026534,-0.521681}, + {0.089140,0.147550}, + {-0.756320,0.829660}, + {-0.500559,0.266032}, + {-0.082253,0.526760}, + {-0.317537,1.100217}, + {0.537659,0.004379}, + {-0.511521,-0.070164}, + {-0.950504,0.979454}, + {-0.434086,-0.894423}, + {-0.161771,0.383922}, + {0.169965,0.443431}, + {1.126951,0.313781}, + {-0.083320,0.064187}, + {1.105827,0.058595}, + {1.599304,1.457213}, + {0.097539,-0.136787}, + {0.050654,0.763772}, + {-0.815735,0.069732}, + {0.712392,0.340298}, + {-0.349751,1.663162}, + {-0.520406,0.437961}, + {-0.182619,-1.106802}, + {1.249108,0.082180}, + {-1.228325,-0.360564}, + {-1.231868,-0.419608}, + {-0.294485,0.226044}, + {-0.060826,0.702817}, + {-1.200765,0.467426}, + {-0.116198,0.278628}, + {1.214728,0.324470}, + {0.225038,0.563450}, + {-0.007607,-0.256299}, + {-1.010766,-0.953903}, + {-0.277060,0.812392}, + {0.707381,0.168940}, + {-0.918905,0.693847}, + {0.282631,-0.353127}, + {0.225166,1.501837}, + {-0.954247,-0.586650}, + {0.318076,-0.497355}, + {-0.418723,0.065298}, + {0.084946,0.228400}, + {0.307594,0.474237}, + {-0.107772,-0.421675}, + {-0.232476,0.576236}, + {0.586626,-0.859792}, + {0.283680,-1.605937}, + {0.065020,0.212051}, + {-0.474997,-0.555701}, + {0.353018,0.138387}, + {-1.107164,0.434415}, + {0.138023,1.048943}, + {0.390060,-0.475007}, + {0.216655,-1.005081}, + {-0.421095,0.760430}, + {0.827316,0.631502}, + {-0.349654,0.360977}, + {0.492383,1.430285}, + {-1.500687,0.296066}, + {-0.380852,-0.291811}, + {-0.484800,-0.267565}, + {-0.346712,0.186646}, + {-0.083542,0.405885}, + {-0.188996,1.142481}, + {1.320101,0.391448}, + {-0.146608,0.368600}, + {-1.163383,0.327332}, + {0.298202,-0.377332}, + {-0.805110,0.443164}, + {-0.871706,0.069784}, + {0.373116,-0.326406}, + {-0.607307,0.912847}, + {-0.607633,-0.101585}, + {1.970281,1.321946}, + {-0.148369,0.105401}, + {-0.282688,0.816048}, + {1.025746,0.483259}, + {-0.713131,0.610143}, + {0.300423,-0.665059}, + {-0.374302,0.666611}, + {-0.869616,0.119894}, + {1.018758,-0.715852}, + {-0.928172,-1.549172}, + {0.085113,0.833680}, + {1.108642,0.496890}, + {-1.549615,-1.217051}, + {0.266179,-0.905077}, + {-0.215376,0.513998}, + {1.069599,0.120225}, + {-0.307138,-0.329984}, + {-0.571582,-0.130708}, + {2.142098,-1.288388}, + {-0.420347,1.053044}, + {0.495939,-0.195319}, + {0.502492,0.785095}, + {0.766173,0.428730}, + {-0.099107,-0.093918}, + {0.729183,-0.195718}, + {0.426967,0.415027}, + {-0.895545,0.886429}, + {-0.968602,-1.162273}, + {0.416021,-0.046332}, + {-1.219170,0.166351}, + {0.586550,-0.244157}, + {0.838475,-0.615897}, + {-0.672975,-0.618807}, + {-0.360221,-0.009750}, + {-0.674237,-0.787390}, + {0.760231,-0.187308}, + {-0.812272,-0.645441}, + {0.790059,-0.221013}, + {-0.232809,-1.981273}, + {1.111118,0.087870}, + {0.404225,-1.245472}, + {0.461102,0.105999}, + {0.013247,1.296239}, + {-0.108755,0.536528}, + {-1.449621,0.250056}, + {-0.195004,-1.416802}, + {0.037800,-0.364457}, + {0.552454,-0.675048}, + {-0.065913,0.268582}, + {-0.831306,-0.075565}, + {0.515745,-0.533599}, + {-1.138916,-1.364227}, + {-0.070245,-0.567231}, + {0.128759,0.526600}, + {0.665589,0.326906}, + {-0.224787,0.432314}, + {-0.228078,-0.843603}, + {-0.031752,-0.495566}, + {0.022634,-0.591376}, + {-0.700905,1.335250}, + {-0.661231,0.287638}, + {0.023830,-0.433696}, + {-1.666931,-1.034963}, + {0.531734,-0.239730}, + {-0.827702,-1.580614}, + {-0.751258,0.940162}, + {-0.287944,-0.191240}, + {-0.907179,-0.244279}, + {0.709229,-0.938878}, + {0.900749,0.288377}, + {-0.676512,1.189215}, + {0.514203,0.472178}, + {0.721634,-0.583054}, + {1.061447,0.267226}, + {-1.211157,0.301310}, + {-0.167337,-0.373970}, + {0.028457,0.985726}, + {0.110579,-0.098623}, + {-0.172895,-0.801720}, + {1.208278,0.474267}, + {-0.384456,-1.699807}, + {-0.218454,-0.500844}, + {-0.106211,0.296750}, + {-1.006444,-0.168547}, + {0.382713,-0.009482}, + {0.331157,-0.878432}, + {0.031083,-0.458680}, + {-0.365436,-0.454964}, + {-0.398935,-0.993382}, + {-0.769671,0.501222}, + {-0.051267,-0.864739}, + {1.167413,0.251483}, + {-0.638681,-0.123305}, + {-0.903249,-1.315449}, + {1.127817,0.729152}, + {-1.489803,-0.197712}, + {0.258543,-0.400706}, + {-0.067041,-0.250410}, + {1.170671,0.585027}, + {-1.025814,-0.952182}, + {0.191594,-0.695594}, + {1.088652,0.211765}, + {-0.672739,0.157990}, + {0.594503,-0.652204}, + {0.621315,-1.149470}, + {-1.002667,-0.051699}, + {-0.548659,0.070243}, + {-0.256829,-0.297262}, + {0.978255,0.627959}, + {0.645651,0.839562}, + {0.851345,-0.772047}, + {0.605615,-1.084795}, + {-1.066617,0.157309}, + {-0.431485,-0.334219}, + {-0.065427,-1.128954}, + {-0.568002,-1.040160}, + {0.572203,-0.754751}, + {0.659738,-0.070165}, + {-0.381698,-0.328700}, + {-1.564251,0.477004}, + {0.088705,-1.206888}, + {0.054398,1.727333}, + {-0.225188,-0.242253}, + {0.166157,-0.688561}, + {-0.949477,0.963288}, + {0.412511,0.460764}, + {-0.156152,-0.188229}, + {1.155036,0.424556}, + {-0.490640,-0.278005}, + {-0.412096,0.287758}, + {1.863923,-0.062265}, + {-0.222627,0.474599}, + {1.395178,0.343841}, + {-0.147666,-1.077881}, + {-1.174875,0.087301}, + {0.690832,0.894002}, + {0.207429,-0.821849}, + {1.005274,1.609804}, + {0.371987,-0.429320}, + {-0.514226,-0.590668}, + {-0.026782,0.397409}, + {1.015714,0.810520}, + {0.927649,0.649634}, + {0.776910,-0.296798}, + {0.976134,0.656214}, + {0.003040,-0.262665}, + {0.315733,1.042726}, + {-0.596531,0.246790}, + {-0.402001,0.608359}, + {0.581907,0.501635}, + {1.279527,0.729790}, + {0.490545,0.881851}, + {1.094798,-1.607173}, + {0.965914,0.484647}, + {-0.960222,0.649783}, + {0.364875,-0.219241}, + {-0.077840,-0.737867}, + {0.774998,0.247243}, + {-0.119677,-0.232309}, + {-0.570180,-0.118825}, + {0.977602,1.283441}, + {0.831912,-0.804168}, + {-0.196479,-0.062512}, + {0.656737,0.855329}, + {0.528258,-0.285970}, + {-2.250344,0.084504}, + {0.546068,0.570570}, + {-0.858377,-0.909879}, + {-1.108219,0.488554}, + {-0.490006,-0.454847}, + {0.049783,-0.432571}, + {0.144726,1.065848}, + {-1.394773,0.611523}, + {0.082976,0.531777}, + {0.285337,-0.535880}, + {0.308235,-0.704091}, + {-0.234517,0.379574}, + {-0.039539,0.828459}, + {0.357857,-0.609556}, + {0.753604,-1.306881}, + {0.790172,0.034169}, + {0.056248,-0.121251}, + {0.186954,0.648174}, + {-0.995005,0.274405}, + {-1.001077,0.860050}, + {-0.057085,1.511382}, + {-1.206087,0.878339}, + {0.137995,1.844478}, + {-1.493125,-0.998766}, + {0.745860,-0.643919}, + {-2.238097,1.200986}, + {-1.456539,0.719147}, + {0.950348,0.805055}, + {-0.011920,1.722326}, + {1.586502,-0.601509}, + {-0.761579,-0.427211}, + {-0.442142,0.336680}, + {0.366955,-0.402493}, + {0.706776,1.396136}, + {-0.456781,0.836723}, + {1.000545,-0.568838}, + {0.385663,0.662292}, + {0.477626,0.829285}, + {-0.458256,-1.032467}, + {-0.359687,-0.822045}, + {-0.684604,0.498532}, + {-1.225389,0.177601}, + {0.432596,0.406977}, + {-0.151285,0.179645}, + {1.147279,-1.685706}, + {0.525030,0.020319}, + {-0.118010,-0.066492}, + {-0.080738,0.414352}, + {0.066255,0.637437}, + {0.213317,-0.937024}, + {0.349175,-0.783824}, + {-0.536209,0.153490}, + {-0.439903,-0.158521}, + {0.270046,0.415777}, + {0.680110,-0.429989}, + {0.868958,-0.394753}, + {-0.327469,-0.604439}, + {0.018249,0.086110}, + {0.863033,-0.847249}, + {0.819329,0.546402}, + {1.547121,-0.605341}, + {-0.742487,0.218372}, + {-0.531181,-0.785213}, + {-0.414961,-1.837414}, + {-0.697729,-0.105849}, + {0.562781,1.161757}, + {-0.252197,0.174986}, + {1.019893,-1.022593}, + {1.147283,-0.216186}, + {-0.192484,0.544878}, + {-0.288308,-1.126081}, + {-0.653159,1.145602}, + {0.356144,-0.300500}, + {-1.877840,-0.660298}, + {-0.888508,0.081546}, + {0.095668,-0.650209}, + {-0.996078,-0.377501}, + {-0.936371,-1.051814}, + {0.735572,0.371096}, + {0.667417,0.241111}, + {-1.166763,-0.795707}, + {-0.604337,-0.214551}, + {0.366715,-0.220244}, + {0.135127,-1.369202}, + {-1.280505,0.349096}, + {1.611228,0.383331}, + {0.010946,-0.325781}, + {0.156384,1.852116}, + {-0.937935,0.398887}, + {-0.149062,0.073763}, + {2.104644,1.227660}, + {-0.626178,-0.143603}, + {0.148232,0.324548}, + {0.172888,-0.311778}, + {-1.220482,-0.578080}, + {-0.817595,1.215959}, + {-0.071187,-0.946781}, + {-0.316114,-0.621434}, + {0.612704,-0.753227}, + {0.053054,-0.899090}, + {-0.548320,-0.228200}, + {0.163999,0.796821}, + {-0.245404,0.209061}, + {0.441967,1.234234}, + {-0.551563,0.044447}, + {0.658026,0.187557}, + {0.127459,-0.986518}, + {-1.929082,-1.281298}, + {-0.281742,-0.218021}, + {-0.024907,0.738612}, + {-0.576868,0.213936}, + {1.047293,1.199670}, + {-0.588133,0.536676}, + {-0.873318,-0.257263}, + {-0.173412,-0.363335}, + {-0.711159,-1.458770}, + {-0.627417,-0.146663}, + {0.734973,0.087137}, + {1.617436,-0.176356}, + {-0.695416,0.009464}, + {0.641452,0.164848}, + {-0.365163,-0.298145}, + {-0.040627,-0.594555}, + {-1.136559,0.782394}, + {0.889175,1.501206}, + {-0.505251,-0.965412}, + {-0.235839,0.215222}, + {-0.031725,0.742335}, + {0.298775,-0.150465}, + {-0.849287,0.112957}, + {1.179378,0.099546}, + {0.512879,0.770936}, + {-1.199297,-0.033108}, + {-0.539796,0.936294}, + {-0.205207,-1.051996}, + {-0.131672,0.924508}, + {-0.089858,0.043459}, + {-0.523057,0.636311}, + {-0.307674,1.349578}, + {0.036264,0.711152}, + {1.140221,-0.739087}, + {-0.755562,0.284111}, + {-0.724637,2.054996}, + {-0.342831,-0.691441}, + {-0.131512,-0.096478}, + {-0.257152,0.074351}, + {0.214615,1.055861}, + {1.802147,-0.650688}, + {0.494614,-0.618490}, + {0.345858,-0.425000}, + {-0.654990,0.633968}, + {1.944518,-0.824383}, + {0.027463,-1.406552}, + {-0.356381,1.000390}, + {-0.326255,-0.349790}, + {-1.301773,-0.173698}, + {1.209587,0.733830}, + {-0.415904,-0.973085}, + {-0.342312,0.036046}, + {-0.186381,0.151542}, + {-0.326625,0.939369}, + {0.462830,-0.373640}, + {0.606673,-0.179940}, + {-0.484880,0.561731}, + {-0.508378,-0.365497}, + {0.234596,-1.627686}, + {1.368364,-0.734676}, + {-0.795618,-1.015961}, + {-2.239029,-0.882143}, + {0.465919,-0.251305}, + {0.445335,-1.446642}, + {-0.265756,0.613863}, + {-0.452452,-0.137435}, + {0.431065,0.801259}, + {-0.152433,0.602319}, + {-0.540982,-0.360173}, + {0.631619,0.163229}, + {-0.006424,-0.396139}, + {-1.237030,0.367923}, + {-0.850830,-0.132116}, + {0.775877,-0.627868}, + {0.771979,-0.413618}, + {0.022536,0.168067}, + {1.196601,0.009715}, + {-0.617334,0.060062}, + {0.364119,-0.116998}, + {0.673689,0.458119}, + {0.149576,-0.055954}, + {-0.543521,0.313275}, + {-0.158121,0.340606}, + {-1.637515,0.192407}, + {-0.980130,-1.214198}, + {0.271889,-1.100195}, + {-0.043511,-0.011070}, + {1.944409,1.536861}, + {1.054500,-0.241073}, + {-0.266577,-1.534933}, + {-0.040460,-0.625212}, + {-0.459612,-1.252847}, + {0.965432,0.594862}, + {0.576392,-0.927788}, + {-0.551566,0.279525}, + {0.426353,0.063682}, + {0.612646,-1.516517}, + {-0.007228,-0.346205}, + {0.011120,0.115249}, + {0.472003,-0.089491}, + {0.714530,-0.399992}, + {-0.151271,-0.191677}, + {-0.775722,0.462697}, + {0.938747,-0.059595}, + {-0.019837,0.256951}, + {1.336979,-0.025192}, + {-0.897808,-0.356736}, + {-0.805198,0.998662}, + {-0.427256,0.460826}, + {0.649266,-0.173119}, + {0.712430,-0.425832}, + {-0.254883,0.091398}, + {-0.082338,-0.612070}, + {0.215579,-0.567451}, + {-1.144568,0.155085}, + {0.780083,-0.289786}, + {-0.695259,0.933670}, + {0.982418,-1.676289}, + {2.030334,1.321377}, + {0.038067,0.527490}, + {-0.875315,-0.009320}, + {0.068908,-1.082731}, + {-0.327867,0.493442}, + {-0.247380,0.306530}, + {-0.737028,0.122061}, + {0.989016,0.117014}, + {-0.043846,0.663677}, + {0.666528,-1.034380}, + {0.394277,0.951912}, + {-0.002676,0.539665}, + {1.144832,0.222148}, + {0.575492,0.698214}, + {-0.465967,0.644700}, + {0.135505,-0.027215}, + {0.971868,0.345926}, + {0.064156,-0.279836}, + {-0.379608,0.096507}, + {-0.122669,-0.207917}, + {0.579961,0.725394}, + {0.595409,-0.048807}, + {1.252596,-0.666008}, + {0.928256,0.648530}, + {-0.765453,0.753437}, + {-0.869056,-0.282207}, + {0.599402,1.136827}, + {-0.491976,1.257567}, + {-0.690075,0.095121}, + {0.114144,0.613636}, + {-0.016676,0.984432}, + {-0.038227,1.273482}, + {-0.273440,0.465032}, + {-0.042422,-0.082568}, + {0.293014,-0.062751}, + {0.091950,1.052528}, + {1.290355,0.079452}, + {-0.373801,-0.287744}, + {0.178010,0.153087}, + {-0.069493,-0.767951}, + {0.592277,-0.164846}, + {-0.624072,0.699601}, + {-0.164866,0.014304}, + {-0.989879,0.549690}, + {-0.390924,0.210302}, + {0.028281,1.109096}, + {0.200445,-0.121299}, + {-0.837043,-0.089108}, + {-0.330949,-0.683155}, + {-1.497096,-0.744454}, + {0.724696,1.325496}, + {1.093918,-0.158002}, + {-0.986055,0.252052}, + {0.738405,0.425232}, + {0.346898,-0.636832}, + {0.795577,-0.558523}, + {1.639357,0.539509}, + {-1.027171,-1.972701}, + {-0.526853,0.066382}, + {0.029728,0.371083}, + {0.493240,-0.618207}, + {-0.085066,0.157037}, + {-0.598327,0.875382}, + {0.473045,-0.683630}, + {-0.190108,0.531203}, + {0.755223,-0.445656}, + {-0.970831,-0.378947}, + {0.691900,-0.774742}, + {-0.566027,-1.971771}, + {0.221130,0.861383}, + {1.126111,-1.603044}, + {-0.238397,-0.723054}, + {-1.355820,0.134919}, + {0.901198,0.804579}, + {-0.152608,-0.056988}, + {-0.405939,0.133609}, + {-0.748368,-0.793250}, + {-1.127288,-0.628552}, + {-0.545445,-0.085877}, + {-0.731033,1.379358}, + {0.017076,0.460959}, + {0.860053,0.187958}, + {-0.398644,0.846772}, + {-0.136298,-0.593748}, + {-0.570386,-0.054041}, + {-0.208522,0.414807}, + {1.089348,0.418117}, + {0.071506,-0.234059}, + {0.803787,-0.420491}, + {0.379378,1.744838}, + {0.984846,-0.269280}, + {0.287580,1.777600}, + {-0.044561,0.393765}, + {1.037652,0.288589}, + {1.365033,1.028047}, + {-0.268731,0.214781}, + {-1.399734,-0.585635}, + {0.396474,-0.012739}, + {-0.310157,-0.572639}, + {-0.869280,-0.470035}, + {-0.767115,-0.147986}, + {-0.594210,-0.009435}, + {-0.259161,0.687769}, + {0.400244,0.052298}, + {-0.081466,1.100944}, + {-0.597903,-0.298039}, + {-0.112978,0.185533}, + {-1.188213,0.607802}, + {0.406532,0.557457}, + {0.053603,0.608809}, + {-0.909431,-1.412004}, + {0.092312,-0.308009}, + {-1.045767,-0.193634}, + {-0.655190,0.515159}, + {-0.979891,-0.064583}, + {-0.305666,2.135184}, + {0.263726,-1.169643}, + {0.138287,0.442218}, + {0.414382,-0.295128}, + {-1.223938,-0.394704}, + {-0.670657,-0.732705}, + {-0.130172,1.369600}, + {0.795171,0.769043}, + {-0.363984,0.127902}, + {-0.154541,-0.229581}, + {0.285194,1.725037}, + {-1.330522,0.314956}, + {-0.233268,-0.249791}, + {-0.867872,-0.116151}, + {0.528821,0.939245}, + {0.529436,-0.728938}, + {1.562335,-0.647528}, + {0.100798,0.930577}, + {-0.638534,-0.474881}, + {-0.985353,-0.905430}, + {-0.508469,-0.557904}, + {0.109266,-0.555654}, + {0.066719,-1.050199}, + {0.086614,0.288710}, + {-0.064293,0.794723}, + {0.211760,0.375610}, + {-0.388465,0.047865}, + {0.115226,0.666505}, + {0.090883,-1.307463}, + {-0.505210,-0.481163}, + {0.297328,0.181031}, + {-1.005686,-0.291049}, + {-0.384623,-0.349974}, + {-1.117550,-0.533047}, + {-0.273571,1.197142}, + {-0.355377,-0.791390}, + {-1.166707,0.219873}, + {-0.039557,0.571754}, + {-0.869280,0.219124}, + {-0.267389,0.851277}, + {-0.047552,-0.759693}, + {-1.247211,0.340410}, + {0.074985,-0.567950}, + {0.114898,-0.993669}, + {1.315018,1.236524}, + {0.490222,-1.122814}, + {-0.208569,0.122706}, + {0.811257,0.284157}, + {-1.535386,-0.961487}, + {-0.575903,-0.329705}, + {-0.440839,0.189689}, + {0.461173,0.106876}, + {-1.404882,-0.039592}, + {0.157627,-0.164670}, + {-0.143457,-0.082398}, + {0.137764,-1.405608}, + {1.138510,0.467085}, + {-0.569274,0.068115}, + {0.254692,-0.256963}, + {-0.200568,-0.105250}, + {0.649507,0.852508}, + {0.256781,0.075334}, + {-0.422662,0.827176}, + {0.453451,-0.274344}, + {-0.619070,-0.789528}, + {0.511156,-0.517215}, + {-0.746724,0.533320}, + {-0.266023,0.211951}, + {0.820569,-0.021797}, + {0.906967,-0.184995}, + {0.080283,-0.845286}, + {0.216563,-0.065165}, + {-1.069864,-0.627168}, + {-0.694919,-0.377147}, + {0.560266,0.723653}, + {-1.810003,0.936073}, + {0.401495,-0.323666}, + {0.279725,-0.512582}, + {0.115233,0.391509}, + {-0.049100,0.503527}, + {0.381476,-0.924580}, + {0.158435,-0.369579}, + {-1.724612,-0.082530}, + {0.146337,-0.627385}, + {-0.580628,-1.005474}, + {-1.283667,-0.367336}, + {1.671694,0.093866}, + {0.495123,0.338942}, + {1.386453,1.289725}, + {0.046473,-0.010269}, + {0.345976,0.217331}, + {-1.307691,0.901025}, + {0.011671,-0.051992}, + {0.446749,0.491618}, + {-0.798861,-1.715122}, + {0.459684,0.845517}, + {-0.619994,-0.080941}, + {0.726701,0.519006}, + {0.366870,-1.500535}, + {-0.695698,-0.307731}, + {0.383154,-0.604660}, + {-0.200421,-0.592773}, + {0.845962,0.202566}, + {-0.081811,-0.479720}, + {-0.162211,0.211402}, + {-0.508318,-0.515009}, + {-0.598247,-0.160839}, + {-0.361101,1.022331}, + {-0.593453,-0.828867}, + {-0.335951,-1.161512}, + {0.323913,0.171438}, + {0.880390,-0.900887}, + {0.961106,1.439049}, + {-0.145219,0.714873}, + {-0.035628,0.517433}, + {-1.289047,0.344996}, + {0.823198,-0.391606}, + {-0.666119,-0.158353}, + {-0.497984,-0.154500}, + {0.346989,1.546966}, + {0.708533,-0.966663}, + {0.374617,1.425507}, + {-0.337693,0.237900}, + {0.070178,-1.763557}, + {-0.029864,-0.502392}, + {1.018740,0.551282}, + {0.470196,0.024369}, + {-1.046625,0.923415}, + {-0.440020,0.376281}, + {0.735956,-1.156211}, + {-0.994301,0.170391}, + {0.092725,0.006086}, + {0.907493,-0.090784}, + {0.594763,0.737713}, + {0.906663,-0.107508}, + {-0.367296,-0.557330}, + {-2.018388,0.168510}, + {0.752505,0.463679}, + {0.078006,0.290962}, + {0.109202,1.088115}, + {-0.098741,2.088661}, + {0.628856,0.143489}, + {0.531659,-0.603075}, + {-0.792778,0.565173}, + {1.033181,0.091416}, + {-0.436632,1.313604}, + {-0.484757,-0.142273}, + {0.419226,-1.120024}, + {0.480503,1.065520}, + {-0.237411,-0.260825}, + {0.605263,-0.918341}, + {0.875513,-0.731113}, + {1.386509,1.669871}, + {-0.213429,0.316753}, + {0.131674,1.000488}, + {0.748148,-0.249815}, + {-0.533266,0.340614}, + {-0.869102,0.414872}, + {0.441595,-0.694290}, + {0.054900,1.807807}, + {-1.703986,-0.934117}, + {-1.249102,0.046980}, + {-0.221412,-0.687920}, + {0.448836,0.201658}, + {0.650497,1.040959}, + {0.177494,-0.799854}, + {-0.085265,0.556515}, + {-0.932668,-0.426775}, + {-0.062327,-1.158497}, + {-0.500424,-0.587836}, + {0.391493,-0.387043}, + {-0.617236,-0.317457}, + {-0.578667,0.512964}, + {-0.169709,-0.817154}, + {-0.110670,0.372632}, + {-0.222525,-0.793149}, + {-0.009570,0.182038}, + {-0.527806,0.463093}, + {-1.697382,-1.718132}, + {0.361860,0.075201}, + {0.089404,0.241598}, + {-0.946784,0.814996}, + {-0.613512,-0.255426}, + {-0.177349,-0.488484}, + {0.054348,-0.553629}, + {-0.194009,1.167781}, + {1.709740,0.267476}, + {-0.821832,-0.696939}, + {-0.200828,-0.430296}, + {1.069248,-0.373373}, + {-0.238442,-0.199476}, + {-0.180144,-0.025549}, + {-0.139817,-0.071419}, + {-0.173577,-0.475708}, + {0.304222,-0.368525}, + {-0.590842,-0.064255}, + {-1.185859,-1.155381}, + {-0.081806,-0.629742}, + {0.922781,0.144932}, + {0.942112,0.322870}, + {0.825791,1.003816}, + {0.826714,-0.826888}, + {0.213177,0.794777}, + {-0.099002,-0.002608}, + {-0.492385,0.451787}, + {0.128127,1.082202}, + {0.271635,-1.443648}, + {-0.178330,-1.243963}, + {-0.067726,0.414538}, + {-0.546234,0.480571}, + {-0.991696,-0.224893}, + {0.432404,-0.524750}, + {-0.501489,-0.744894}, + {0.103839,-1.138339}, + {-0.279854,-0.368705}, + {0.455291,0.602993}, + {-1.678218,0.178024}, + {-0.130112,0.138684}, + {-1.101287,0.579001}, + {-0.092947,-0.011740}, + {0.295525,0.118103}, + {0.785569,0.325779}, + {0.504792,-0.455453}, + {1.132796,0.017106}, + {0.033302,0.186834}, + {0.810809,-0.362816}, + {-0.474375,0.097647}, + {-1.062575,-0.732286}, + {0.342440,-0.680445}, + {-0.732904,-0.575352}, + {0.303712,-0.631739}, + {-0.319236,-1.030421}, + {-0.387937,-0.348376}, + {-1.079633,0.118041}, + {-0.602187,-0.491677}, + {0.423529,0.249166}, + {-0.952323,0.209902}, + {0.034247,0.375740}, + {-0.592018,-0.397569}, + {-0.163837,-0.427724}, + {0.382374,-0.150979}, + {0.555706,-0.725082}, + {-0.355857,0.158597}, + {0.761846,0.076153}, + {-0.634078,-0.304593}, + {0.471280,-0.916497}, + {0.242803,0.758195}, + {0.754191,1.510976}, + {1.548155,-0.494631}, + {0.691794,-0.562304}, + {0.668136,-0.981643}, + {-0.254217,-0.991335}, + {-0.318592,-0.794923}, + {-0.462833,-0.254355}, + {0.963190,-0.369654}, + {-0.006760,0.514227}, + {-0.029911,0.884285}, + {0.486003,-0.768507}, + {0.111313,-0.201531}, + {0.594695,-0.372400}, + {0.590731,-0.701254}, + {-0.563540,0.783977}, + {0.368562,-1.798989}, + {0.756754,0.099174}, + {-0.637641,-1.143978}, + {0.650260,-0.244381}, + {-0.691307,-1.071333}, + {0.861524,0.340780}, + {0.505066,0.009908}, + {1.474460,0.787023}, + {0.976164,0.140441}, + {-0.254395,-0.077743}, + {-0.607054,-0.319290}, + {0.265146,0.411305}, + {-1.013336,0.386584}, + {0.105899,0.018232}, + {0.563171,-0.016770}, + {-0.940128,-0.278832}, + {-0.221102,0.977281}, + {1.567826,0.261716}, + {0.196254,-1.341196}, + {-0.102125,0.328156}, + {-0.201069,-0.674704}, + {0.352926,-0.898702}, + {0.911536,0.859603}, + {-0.528193,0.953868}, + {1.140887,0.032021}, + {-0.020405,0.168142}, + {0.328295,-0.517896}, + {-0.337676,0.588593}, + {0.585343,0.249905}, + {-0.287053,-0.782415}, + {0.794615,0.416868}, + {-0.332534,1.181646}, + {0.674689,-0.239908}, + {-0.248407,0.137528}, + {-0.301989,0.114605}, + {-0.044851,0.768646}, + {0.542929,0.080812}, + {-0.071794,-0.299563}, + {-0.734715,0.382308}, + {-0.421130,0.911202}, + {-0.430273,0.472535}, + {-0.687487,-0.273706}, + {0.367111,-0.660188}, + {-0.918680,0.527015}, + {-0.341398,0.970202}, + {-0.107157,0.886225}, + {0.938713,-0.223450}, + {-0.671171,-0.152803}, + {-0.385831,0.640238}, + {-0.780561,-0.635265}, + {0.715185,0.185086}, + {-0.699200,0.606720}, + {-0.653360,0.102234}, + {0.131534,-1.084895}, + {0.261869,0.060136}, + {0.317683,-0.939159}, + {-0.840538,-0.043646}, + {-1.424293,0.084761}, + {1.215854,-0.694838}, + {0.062843,-0.337987}, + {0.563976,0.504785}, + {-0.080370,0.085930}, + {0.032035,-1.010920}, + {0.551369,0.494227}, + {-0.116020,0.300480}, + {0.331724,0.036285}, + {-0.382426,-0.529493}, + {1.077808,-0.458413}, + {0.331854,1.032253}, + {-0.535004,-0.323188}, + {-0.819970,0.052055}, + {0.719559,-0.602325}, + {0.915057,0.257542}, + {-0.428636,-0.009926}, + {-1.805475,0.369659}, + {-0.614094,-0.001800}, + {-1.235578,-0.052044}, + {0.097063,-0.732735}, + {-1.460257,1.469093}, + {1.278098,-0.169305}, + {-1.378817,0.540052}, + {0.493755,-0.307548}, + {0.218180,1.141994}, + {-0.221486,-0.292270}, + {0.287143,-0.163096}, + {0.703925,0.446666}, + {0.212925,0.082821}, + {0.484300,0.306027}, + {0.357386,-1.297873}, + {-0.738326,-0.241678}, + {-0.741457,-0.442234}, + {0.327873,0.656962}, + {-0.853324,0.049464}, + {0.311712,-0.772024}, + {0.492337,-0.224030}, + {-0.072145,-0.706020}, + {0.120789,-0.269756}, + {0.510265,-0.199574}, + {0.305081,1.339218}, + {-1.174933,-0.318689}, + {-0.310504,0.857660}, + {-0.260578,-0.738450}, + {0.840290,-0.412105}, + {0.978639,0.996309}, + {0.545701,-0.214489}, + {0.442492,0.140782}, + {0.134327,-0.614024}, + {0.152361,-0.415766}, + {0.402772,-0.590738}, + {-0.086536,0.126473}, + {0.212853,0.348347}, + {1.454511,0.690384}, + {-0.525360,0.196963}, + {0.096687,-0.682747}, + {0.001357,0.832025}, + {-0.426188,-0.466376}, + {0.206853,-0.152419}, + {0.687454,1.804000}, + {-1.322728,1.203989}, + {0.482003,-1.241984}, + {0.500789,-0.065064}, + {0.244065,0.269642}, + {-0.469472,-0.237159}, + {-0.066490,-0.163310}, + {-0.281095,-0.567134}, + {0.893307,0.612599}, + {-0.632126,-0.774347}, + {0.109283,0.368826}, + {0.148461,-0.404510}, + {-0.667521,1.577892}, + {0.218306,0.265584}, + {0.264606,-0.211250}, + {0.652372,-0.157857}, + {-0.577376,-0.888662}, + {-0.945390,0.153267}, + {0.375344,-1.667404}, + {-0.156601,-0.117106}, + {-1.462571,-0.718417}, + {-0.575509,-0.808437}, + {0.364817,0.078618}, + {-0.403867,0.323323}, + {0.157170,0.940718}, + {-0.905934,0.911193}, + {0.173700,1.333921}, + {0.056693,-0.033255}, + {-0.296912,-0.103485}, + {0.153056,-0.604195}, + {0.377705,0.504978}, + {-0.673747,0.286633}, + {0.034797,0.558569}, + {-0.710120,-0.480598}, + {-0.362652,-0.642279}, + {-0.284230,0.181896}, + {-0.426250,2.162377}, + {0.985906,-1.488951}, + {-0.458442,-0.456442}, + {0.553374,-0.612342}, + {-0.809457,-0.439975}, + {0.180812,0.353789}, + {-0.978222,0.464068}, + {-0.300099,0.132864}, + {1.487060,0.218514}, + {0.957071,0.801319}, + {-1.294117,0.020448}, + {0.445091,0.773514}, + {-0.199977,0.450449}, + {1.443591,0.429417}, + {-0.113708,0.610933}, + {0.137175,-0.859998}, + {-0.132513,-1.322847}, + {-1.005503,-0.177505}, + {0.000357,0.779256}, + {1.075366,0.024032}, + {0.459241,0.710256}, + {-0.305482,0.106401}, + {-0.276184,1.043264}, + {0.516417,-1.254294}, + {-0.131916,0.527997}, + {0.234204,-1.557823}, + {0.030533,-0.531908}, + {1.085678,-0.371773}, + {-0.221198,-0.710384}, + {-0.063287,0.159905}, + {0.444706,-0.383745}, + {-0.446182,-0.684475}, + {0.740908,0.413410}, + {0.167352,0.712524}, + {0.392175,0.355523}, + {0.129803,-0.137579}, + {-0.528156,-0.906438}, + {0.405284,-0.052276}, + {0.240957,-1.088857}, + {0.642791,-0.012554}, + {-0.439821,0.196588}, + {0.640984,0.397706}, + {-1.267697,-0.882481}, + {-0.129466,1.197844}, + {1.461545,-0.514695}, + {-0.664521,-0.084123}, + {-0.351623,1.236291}, + {0.412838,-0.694709}, + {0.414800,-0.181844}, + {-0.304968,-0.380719}, + {1.155782,-0.095914}, + {-0.071784,-1.320101}, + {-0.694458,0.795722}, + {0.810258,0.637455}, + {1.163340,-0.742524}, + {-0.963930,0.444600}, + {0.655143,0.089189}, + {-0.592677,-1.127872}, + {0.887550,-0.327055}, + {0.625412,-0.529684}, + {0.713678,-0.696201}, + {0.055567,-0.252346}, + {0.166431,0.153213}, + {0.441026,-1.378759}, + {0.559243,-0.537530}, + {0.202748,0.275560}, + {-0.840727,0.168231}, + {-0.064211,0.001891}, + {0.281684,0.135740}, + {-0.358316,-0.959788}, + {1.306011,0.464514}, + {-1.036941,-0.959162}, + {1.406593,0.632846}, + {-1.569454,-0.365218}, + {-0.346228,0.731728}, + {-1.295997,0.560615}, + {-0.959968,0.986496}, + {-0.585640,-0.657095}, + {-0.118904,-0.871209}, + {0.926150,-0.531476}, + {0.933032,0.480609}, + {0.263173,0.494663}, + {0.886100,-0.059677}, + {-0.369519,-0.535388}, + {0.421964,-0.910301}, + {-0.326652,-0.190231}, + {0.547934,0.631971}, + {0.710113,-0.411325}, + {0.693213,-0.929055}, + {0.018916,-0.458380}, + {-0.289372,-0.644681}, + {1.603608,-0.790238}, + {-0.870347,-0.519386}, + {-0.120219,-0.195792}, + {0.896996,0.754328}, + {-1.072971,0.660451}, + {-0.169902,0.618787}, + {1.392250,0.699588}, + {0.102127,-1.159976}, + {0.654802,-1.138594}, + {0.341693,0.533089}, + {0.622157,0.293998}, + {0.739470,-0.685871}, + {0.889143,-1.040852}, + {0.028575,1.018274}, + {1.349263,-0.463929}, + {0.455431,-0.360066}, + {-0.778939,1.099713}, + {-0.893473,0.754993}, + {0.004027,-0.390836}, + {-0.251340,0.012372}, + {-0.222768,-0.628511}, + {-0.106092,-1.338030}, + {-1.913003,0.816801}, + {0.249156,-0.479677}, + {-0.736923,1.666795}, + {1.082270,-0.175401}, + {-0.885157,0.570095}, + {-0.049028,0.558581}, + {-0.490770,0.519661}, + {-0.287551,-0.111662}, + {1.033980,0.682340}, + {0.087287,1.358185}, + {-0.050552,0.564941}, + {-0.303037,0.089188}, + {0.842740,0.611644}, + {0.467414,-0.006327}, + {0.466794,0.602077}, + {0.439659,-0.483228}, + {0.974723,-0.062053}, + {-0.260206,-1.049128}, + {-0.205828,0.295329}, + {-1.647119,0.441492}, + {-0.714502,0.081394}, + {-0.205006,-0.757855}, + {-1.960274,0.470666}, + {-0.533298,0.409415}, + {0.855841,1.096989}, + {0.358798,0.730984}, + {0.750960,-0.725304}, + {1.146306,1.834112}, + {-0.476547,0.068212}, + {-0.694398,-0.779186}, + {1.092268,-0.985842}, + {1.398056,-0.217714}, + {0.251666,0.911836}, + {0.110386,0.085893}, + {0.701887,0.259171}, + {0.516668,0.334310}, + {-0.003315,-0.918830}, + {-0.195731,0.013077}, + {0.430466,-0.277817}, + {1.030171,-0.394052}, + {-0.225629,-0.195349}, + {-0.027538,-0.056974}, + {0.031358,0.064035}, + {0.387717,0.243636}, + {0.317769,-0.582616}, + {0.940290,0.778192}, + {-0.490807,-0.763537}, + {0.207110,-0.045007}, + {1.971938,0.382367}, + {-0.727075,0.439464}, + {-0.077633,0.672896}, + {-1.460959,1.007622}, + {-0.025801,-0.096694}, + {-0.993988,-0.999907}, + {0.464187,0.789316}, + {0.256421,-1.363865}, + {0.159660,-0.277453}, + {-0.006103,0.852472}, + {0.060031,0.596424}, + {0.620580,0.715707}, + {0.276113,-0.545072}, + {-1.012081,-1.133049}, + {-0.097912,-0.474511}, + {1.319384,0.602481}, + {-0.031653,0.663256}, + {0.386930,0.752664}, + {-0.991397,-0.430424}, + {0.051973,-1.136431}, + {-1.149435,0.841670}, + {-0.186103,0.364773}, + {-0.412187,0.132497}, + {-0.775032,0.368945}, + {0.032215,0.521604}, + {1.015831,-0.411670}, + {0.726604,-0.273412}, + {-0.017691,0.358815}, + {-0.486292,-1.210999}, + {-0.099767,0.094482}, + {0.097904,0.233600}, + {-1.240408,0.247283}, + {0.721376,-1.415937}, + {0.561702,0.753190}, + {-0.214495,-0.390780}, + {-0.433983,-0.193696}, + {-0.539126,-0.635186}, + {0.334874,0.117167}, + {0.112738,-0.692831}, + {1.294694,1.248792}, + {-0.305773,0.353188}, + {1.021686,0.202287}, + {0.256958,-0.390091}, + {0.166097,0.454005}, + {-0.079576,-1.102067}, + {1.538520,-0.563688}, + {-1.731706,-1.126758}, + {-0.670402,0.414350}, + {0.514859,-0.033709}, + {0.457049,-0.953866}, + {-0.025339,-0.186967}, + {0.921516,-0.006589}, + {1.133250,0.762349}, + {-1.942749,-0.290318}, + {-1.006259,-1.719958}, + {0.583133,0.184458}, + {1.533676,0.565125}, + {1.678753,1.997106}, + {0.414856,0.635099}, + {0.248681,-0.371868}, + {-0.480461,0.508675}, + {0.128528,1.225431}, + {-1.035243,-0.326540}, + {-0.591735,-0.256529}, + {0.404609,0.115763}, + {-0.127455,-0.322196}, + {-1.377901,0.027817}, + {-0.419663,-0.117352}, + {0.100835,-0.416059}, + {0.112067,-0.455572}, + {-0.918836,-1.089230}, + {0.819424,-0.676223}, + {-1.262287,-0.710934}, + {-1.405267,-0.629728}, + {-0.245684,0.259446}, + {0.275126,0.743111}, + {-0.632728,0.059081}, + {-0.268444,1.149652}, + {0.262731,-0.503980}, + {-0.732316,1.865036}, + {0.546659,-0.355999}, + {1.055911,-0.387197}, + {0.493665,-0.753767}, + {-0.182871,0.659888}, + {0.622885,-1.309388}, + {-0.557757,-0.093695}, + {0.098147,0.439508}, + {0.803828,-0.887762}, + {-0.324194,-0.317906}, + {-1.732072,-0.835605}, + {-0.244274,0.535165}, + {0.459924,0.794849}, + {-0.678300,1.156888}, + {-0.492597,0.785141}, + {0.158968,0.435641}, + {-0.036905,0.358065}, + {0.110872,-0.689448}, + {0.880365,-1.190838}, + {0.796720,1.588231}, + {-1.706377,0.554221}, + {-0.358409,-0.529411}, + {-0.715658,0.777524}, + {-0.561075,-0.227583}, + {0.899021,-0.235572}, + {0.525853,-1.659359}, + {0.079290,0.113489}, + {0.113024,0.340952}, + {-0.139241,0.174221}, + {0.224799,0.763237}, + {-1.379719,0.258011}, + {-0.935142,-0.447336}, + {-0.784769,0.357662}, + {-0.232321,-1.397151}, + {-1.450584,0.943146}, + {-0.324962,-0.543177}, + {-1.282408,0.863020}, + {0.050112,0.898989}, + {-0.604191,-0.538101}, + {0.343664,-0.068146}, + {0.102684,-0.123663}, + {0.928256,0.360823}, + {-0.097289,0.462497}, + {-0.092053,0.034602}, + {0.440637,-0.296188}, + {1.149567,-0.825341}, + {0.260298,-0.546318}, + {0.369902,-0.765528}, + {-0.115122,-0.752161}, + {-0.134579,-0.097381}, + {-0.352925,-0.341836}, + {-0.133949,0.670338}, + {-1.133992,-0.211796}, + {-0.771100,0.093373}, + {-0.958877,0.269735}, + {-1.004989,-0.185393}, + {-0.095868,0.247778}, + {-2.586064,-0.157309}, + {0.225446,-0.204901}, + {0.848046,-0.114858}, + {0.944526,0.415761}, + {0.175256,0.081095}, + {-0.221988,0.520441}, + {0.101561,0.235463}, + {1.036973,0.143210}, + {1.226535,-0.837936}, + {0.071154,-0.334797}, + {0.002085,-1.605103}, + {-0.217532,-0.203431}, + {-0.020084,-0.177046}, + {1.594854,0.364505}, + {0.353434,0.078027}, + {-0.408512,0.470233}, + {1.312720,-0.497096}, + {-0.446915,1.180362}, + {0.576132,-0.033510}, + {0.987148,0.361694}, + {-0.741101,0.494390}, + {-0.147701,0.106470}, + {-0.122341,0.707589}, + {-0.828018,0.595488}, + {0.358592,0.384138}, + {1.122524,-0.548564}, + {0.865484,0.246095}, + {-0.347659,0.661972}, + {-0.629108,-0.078289}, + {0.435537,0.266599}, + {-0.290543,0.076388}, + {1.350286,-1.026417}, + {-0.279524,0.033803}, + {0.805857,-1.271171}, + {1.494965,-0.166193}, + {0.224108,-0.156611}, + {0.348711,0.043524}, + {0.486362,0.705632}, + {-0.135721,0.860144}, + {-0.419355,-0.933635}, + {0.585876,-0.739752}, + {0.348953,1.633115}, + {-0.716160,-0.030413}, + {-1.012214,0.928111}, + {1.274223,-1.604781}, + {0.986726,0.442809}, + {0.926012,-1.822679}, + {-0.976620,-0.129446}, + {-0.631693,-1.113716}, + {0.013938,-0.471054}, + {-0.337122,0.006422}, + {-0.075227,1.194378}, + {0.192303,0.005400}, + {0.482293,0.882435}, + {0.759362,-1.106292}, + {-0.178414,0.131685}, + {-0.109098,-0.738940}, + {0.076915,1.201590}, + {-0.065114,-0.913385}, + {0.258717,0.253192}, + {0.006675,0.474848}, + {-0.120236,0.074537}, + {-0.914876,-0.604674}, + {-0.239318,0.139784}, + {0.373102,-0.811346}, + {-0.112757,1.025991}, + {0.939548,0.465295}, + {-0.350290,-0.018134}, + {-0.562664,0.175504}, + {0.514850,-0.074323}, + {0.521176,0.137696}, + {0.194373,0.197405}, + {0.927279,1.181192}, + {-0.118453,-0.014140}, + {1.916604,-0.970558}, + {0.612289,-1.323595}, + {-0.046588,0.676538}, + {-0.361614,0.343330}, + {-0.072801,-0.258052}, + {-0.387405,-0.305871}, + {-0.953448,-0.183769}, + {0.528532,-0.434791}, + {-0.180672,-0.359667}, + {-0.599359,0.653634}, + {0.050363,-0.480589}, + {0.233107,0.154633}, + {-0.948858,0.182072}, + {0.456937,-0.516302}, + {0.303400,0.828243}, + {-0.675064,-0.986310}, + {-0.305059,0.166836}, + {1.464878,0.165149}, + {0.374637,-0.656082}, + {0.718124,-1.594720}, + {0.470116,-0.781559}, + {0.309853,-0.650064}, + {-1.133502,0.331558}, + {0.145630,-0.142324}, + {-0.157430,-0.301290}, + {1.777805,0.083103}, + {0.717511,0.394040}, + {-0.145187,0.174645}, + {-0.557239,0.572090}, + {0.191157,0.101788}, + {0.484733,0.137371}, + {0.285309,-0.047834}, + {0.197723,0.435201}, + {1.212389,1.074376}, + {1.174508,-1.056099}, + {-0.076020,-0.321082}, + {-1.196586,-0.557423}, + {-0.610224,-1.475905}, + {-0.009208,0.213072}, + {0.515729,-1.346302}, + {0.103609,-0.105880}, + {-1.120470,0.071781}, + {-0.777519,0.463790}, + {1.156226,-0.298195}, + {0.203968,0.760272}, + {-0.780637,-0.918900}, + {-0.769841,-0.775429}, + {0.935468,0.026705}, + {-0.241774,1.112869}, + {0.227628,0.184193}, + {-0.183832,0.409623}, + {1.130661,0.731075}, + {-0.555506,0.437555}, + {0.457972,-1.800335}, + {0.272675,0.660832}, + {-1.884673,0.050126}, + {-0.580737,-0.779387}, + {1.227434,0.547756}, + {0.053354,-0.616688}, + {0.478480,0.910639}, + {-0.333049,0.719330}, + {0.010465,-0.612533}, + {0.906478,0.818118}, + {-1.193153,-1.824502}, + {0.706058,0.615496}, + {-0.370577,-0.145762}, + {-0.902391,-0.628656}, + {-0.106987,-0.364320}, + {-0.084966,-1.302484}, + {0.849559,-0.758851}, + {-0.721184,0.072056}, + {0.445967,0.442923}, + {1.135449,1.092539}, + {0.250839,1.832846}, + {0.242031,-0.912937}, + {0.969083,-1.380916}, + {-0.854039,0.805446}, + {-0.063648,-0.529546}, + {-0.556826,0.358275}, + {0.502400,-0.419893}, + {1.121981,-0.341123}, + {0.146130,1.403614}, + {-1.507194,0.954692}, + {1.696664,1.704881}, + {-0.599841,-0.359776}, + {-0.044186,-0.459231}, + {-0.118475,-0.554999}, + {-0.833973,-0.512125}, + {-1.163373,-0.238938}, + {-0.208580,0.332700}, + {0.371481,-0.478670}, + {-0.607465,-1.178812}, + {-0.293391,0.125643}, + {-0.646705,0.940141}, + {0.189148,-1.350865}, + {0.342294,-1.580507}, + {-1.132454,-0.157761}, + {-0.019979,0.524966}, + {-0.169449,-0.519595}, + {1.065918,-0.985098}, + {-0.915971,-0.284780}, + {0.098857,-1.215288}, + {0.783253,0.635773}, + {0.449313,-0.510098}, + {0.689266,0.814086}, + {-0.144834,-0.612379}, + {-1.427958,0.199905}, + {-0.474064,-0.742974}, + {-0.337112,-0.137790}, + {-0.674899,-0.264672}, + {0.912269,1.104826}, + {0.831791,-0.341448}, + {-0.388669,0.672793}, + {1.087330,1.281850}, + {0.118528,0.631338}, + {-0.206049,-0.715623}, + {-0.781056,0.033644}, + {0.792916,0.295321}, + {-0.482422,-0.237909}, + {0.261478,-0.752447}, + {-0.754615,-0.516213}, + {0.192734,0.378640}, + {-0.439435,-0.431982}, + {-0.946669,0.479718}, + {-0.357092,-0.691345}, + {1.157752,0.666368}, + {-1.383208,0.311908}, + {0.409399,0.461214}, + {-0.698759,-0.607928}, + {-0.482476,1.416944}, + {-0.199183,0.371134}, + {-0.082352,0.429145}, + {0.432215,-1.285389}, + {-0.244029,-0.686566}, + {-1.015378,0.249656}, + {0.956609,0.256536}, + {-1.108435,-0.400837}, + {0.358475,0.626661}, + {0.376849,0.118413}, + {0.384957,-0.159492}, + {1.550985,0.318564}, + {-0.658378,0.829656}, + {0.070058,-1.867597}, + {-0.556355,0.877398}, + {-0.939162,-0.758821}, + {-0.975259,0.428551}, + {-0.465374,0.248586}, + {-0.647683,0.162461}, + {0.478579,-0.086328}, + {1.171809,-1.210333}, + {0.350605,-0.026423}, + {-1.535107,-0.289105}, + {0.569494,0.289004}, + {-0.842191,-0.535135}, + {-1.056587,-0.341966}, + {0.571423,-0.949688}, + {0.377006,0.223183}, + {0.895255,-1.194232}, + {0.407145,0.361737}, + {-0.133994,-1.212235}, + {-0.635602,0.102165}, + {-0.112363,0.370473}, + {0.088680,-0.934189}, + {0.189376,0.032527}, + {0.241638,0.015864}, + {0.926939,-0.360267}, + {0.633242,-0.199406}, + {-0.777074,0.718454}, + {1.263760,1.272871}, + {-0.887876,0.895443}, + {0.045161,-0.732052}, + {-0.500926,0.113907}, + {-0.126137,0.817229}, + {0.086923,-0.332814}, + {0.016727,0.325903}, + {-0.336638,-0.207087}, + {-0.613900,-0.550235}, + {1.069793,-0.208412}, + {0.077398,-1.607311}, + {-0.215649,0.115757}, + {-0.404151,-0.996211}, + {0.226156,-0.014279}, + {-1.177157,0.074822}, + {-0.140062,0.186657}, + {-0.409112,-0.330324}, + {1.309929,-0.332041}, + {0.821633,0.695834}, + {-0.938862,-1.552127}, + {0.075839,1.054654}, + {0.323977,-1.147671}, + {0.310022,0.038229}, + {-0.359029,-0.022630}, + {0.324017,0.387352}, + {-0.048052,0.500409}, + {-0.768604,-0.470784}, + {0.684604,0.201031}, + {0.736939,-1.300678}, + {-0.479045,-1.017034}, + {0.007828,-0.810752}, + {-0.304589,-0.420991}, + {0.655603,-0.376914}, + {-0.526926,-0.309443}, + {1.263186,0.124584}, + {-0.301892,0.095891}, + {0.329349,0.607629}, + {0.858170,0.481326}, + {0.863272,-1.044820}, + {-0.185530,0.990111}, + {-0.944209,0.851341}, + {-0.140130,1.176828}, + {0.656967,-0.249158}, + {0.831843,0.166278}, + {0.281441,1.026104}, + {0.815836,1.287209}, + {1.204176,-0.446447}, + {-0.824919,-0.004133}, + {-1.288957,0.000250}, + {0.202791,0.163948}, + {-0.652007,1.250650}, + {-0.940207,1.250555}, + {0.060222,-0.160424}, + {0.276591,-0.733905}, + {1.240840,-0.391642}, + {1.228907,0.734534}, + {0.183878,0.004227}, + {0.471755,-0.211169}, + {1.313163,1.109955}, + {0.040600,-1.427535}, + {-1.534644,0.502761}, + {-0.618235,0.755691}, + {0.075225,0.536254}, + {-0.464799,-0.526058}, + {-0.418575,-0.584390}, + {-0.394190,-1.816489}, + {0.225854,0.231993}, + {-0.635186,-0.053889}, + {-0.064877,-0.134776}, + {-0.030140,0.052716}, + {-0.548128,-0.690454}, + {0.386017,0.089867}, + {1.770913,0.146184}, + {-0.245883,1.392924}, + {-0.437879,0.537205}, + {-0.330323,0.467750}, + {0.586680,-1.393470}, + {-0.120830,-0.437540}, + {-0.963768,0.437445}, + {0.330936,-0.667993}, + {0.308680,-1.588304}, + {0.825726,0.482044}, + {0.226749,-0.379008}, + {0.713663,0.392264}, + {-0.364814,-1.242878}, + {-0.029851,-0.845113}, + {0.519322,-0.794357}, + {0.118346,-1.295004}, + {-0.992456,1.318909}, + {-0.072580,-0.019761}, + {-0.289738,1.767553}, + {-1.316428,0.126071}, + {1.683718,0.210909}, + {1.611788,0.725453}, + {0.165352,0.295910}, + {2.416738,0.700021}, + {0.526805,-0.148660}, + {0.937490,-0.086265}, + {0.818973,0.716807}, + {1.269264,0.610734}, + {0.966294,0.177897}, + {-0.865904,0.933524}, + {-0.204972,0.387884}, + {1.036139,-0.352334}, + {0.025383,0.301119}, + {1.257758,-0.315413}, + {0.678906,0.616848}, + {1.169668,-0.413489}, + {-0.307375,0.005018}, + {0.073738,-0.187008}, + {1.813125,-0.752193}, + {1.392039,-0.785845}, + {-0.643245,0.390684}, + {0.463355,0.238971}, + {-0.002376,-0.085880}, + {-0.838524,1.114617}, + {-0.367220,-0.351002}, + {0.266690,-0.777264}, + {0.192761,-0.720230}, + {-1.500903,0.695838}, + {0.493120,0.067029}, + {0.030118,1.236780}, + {0.034760,-0.819626}, + {0.293606,0.201533}, + {0.312385,1.481040}, + {0.644201,-0.675942}, + {-0.630559,0.140196}, + {0.752821,0.626086}, + {-0.310553,0.372922}, + {0.511409,1.005211}, + {-0.312640,1.205754}, + {0.047365,1.161801}, + {0.634709,0.848718}, + {-0.185228,0.068916}, + {0.710197,-0.424226}, + {-0.627263,0.410260}, + {-0.890694,1.019410}, + {-0.911236,-0.507543}, + {0.072052,-0.119403}, + {0.277360,0.255984}, + {0.011718,-0.365213}, + {-1.242291,-0.359709}, + {-0.266353,-0.290392}, + {-1.193119,-0.901162}, + {0.016134,-0.154263}, + {-0.392536,-1.082696}, + {0.997809,0.053994}, + {-1.230871,-0.639927}, + {0.753734,0.260376}, + {-0.177411,-0.654997}, + {-0.664207,-0.818289}, + {0.558704,-0.173549}, + {-0.456297,-0.523642}, + {0.437174,0.603725}, + {1.110922,0.929951}, + {-1.145341,0.606142}, + {0.762613,-0.534990}, + {1.123318,0.182479}, + {-0.924404,0.074693}, + {0.421870,-0.803706}, + {0.237068,-0.731789}, + {0.114878,0.715037}, + {-0.115797,0.490062}, + {0.613808,-0.057239}, + {-0.002727,0.385070}, + {0.118135,-0.066553}, + {-0.137414,-0.095722}, + {0.241358,-0.096421}, + {-0.514497,-0.904141}, + {-0.484342,1.537877}, + {-0.143724,0.510801}, + {0.761716,0.162944}, + {0.627842,-0.387618}, + {-0.263134,-0.631088}, + {0.435091,0.285372}, + {-0.506864,1.600501}, + {-0.514922,-0.416914}, + {-0.127203,0.976581}, + {-1.080020,-1.111665}, + {0.197020,0.354050}, + {1.494278,-0.024726}, + {-0.547009,0.483956}, + {-0.111064,-1.245961}, + {-0.654196,-0.610226}, + {0.233488,0.119793}, + {-0.816235,-0.666550}, + {-0.154340,0.061817}, + {-0.949530,0.341751}, + {0.045377,1.203108}, + {0.430596,1.308333}, + {-0.016732,-0.389215}, + {0.399432,0.672581}, + {0.459967,0.156065}, + {-0.095913,-1.398591}, + {-1.249649,-0.318145}, + {0.584487,0.046164}, + {0.523293,-0.263306}, + {0.928685,-0.941009}, + {-0.094772,1.143322}, + {-0.647698,0.255648}, + {-1.029936,0.187780}, + {0.514449,1.421299}, + {0.437990,-0.736063}, + {-0.148725,-1.226925}, + {0.735137,-0.988119}, + {1.047799,-0.121534}, + {-0.407426,0.264870}, + {-0.700435,-1.115746}, + {0.532253,0.835391}, + {-0.713866,-0.766539}, + {-0.594814,-1.583788}, + {-0.091316,0.186157}, + {-1.061280,0.790775}, + {1.196936,-0.655124}, + {0.138017,-0.110440}, + {-0.482455,-0.535907}, + {1.275872,-0.400182}, + {-0.064806,0.484727}, + {0.401664,-0.613058}, + {-0.700481,-0.936574}, + {0.532775,0.696085}, + {1.008801,0.749932}, + {-0.986396,-1.189219}, + {-0.913639,0.371736}, + {0.784265,-0.263053}, + {-0.408200,-1.066935}, + {-0.668052,-0.239838}, + {-1.178900,-1.241531}, + {-0.853686,0.295449}, + {0.166123,-1.515813}, + {-0.444517,0.062558}, + {0.332299,0.329983}, + {-1.982113,-0.485853}, + {1.132998,-1.205220}, + {-0.804666,0.302509}, + {-0.238308,-0.134546}, + {0.710908,-0.432452}, + {0.315154,1.398999}, + {-0.681044,0.872108}, + {0.606473,0.523653}, + {0.014945,0.278227}, + {-0.139660,0.507999}, + {0.589431,1.064057}, + {1.203018,-0.095737}, + {-0.706335,0.844312}, + {-0.457733,0.411376}, + {1.392476,0.615478}, + {0.503531,0.629748}, + {-1.868925,1.019854}, + {0.623614,-0.097751}, + {1.591276,-0.051853}, + {-0.113714,0.458968}, + {0.053809,-0.896137}, + {0.828523,-0.324982}, + {-0.897275,0.933097}, + {1.465266,0.219218}, + {-0.328468,-0.511827}, + {-0.269574,0.240325}, + {0.158350,-0.002023}, + {0.007904,0.374705}, + {-0.748152,-0.404403}, + {0.401461,1.023925}, + {-0.694375,0.165567}, + {-0.750854,-0.441250}, + {-0.732961,1.478016}, + {-1.351355,-0.403812}, + {1.015405,-0.641125}, + {-1.187931,0.516955}, + {0.356994,0.568579}, + {-0.980631,-1.747832}, + {0.841677,-0.390122}, + {-0.341402,-0.520199}, + {0.267459,0.114024}, + {-0.241603,-0.232871}, + {0.477839,0.132306}, + {-1.470251,0.729433}, + {0.041666,-1.683171}, + {0.476142,0.743715}, + {-0.601401,-0.980501}, + {0.652458,-0.252309}, + {0.456130,-0.278763}, + {1.118120,0.633555}, + {-0.749787,-0.239808}, + {-0.104785,0.184428}, + {0.669072,0.512814}, + {-0.766815,-0.611725}, + {0.264691,0.519192}, + {0.723239,0.197053}, + {0.208870,-1.040927}, + {0.225315,1.672246}, + {-0.292557,0.249723}, + {0.028916,0.585265}, + {0.095992,0.356909}, + {-0.555301,-0.057219}, + {-0.928637,-0.681245}, + {-0.528215,0.113653}, + {0.051210,-0.925710}, + {-0.488349,-1.072004}, + {0.388358,-0.829677}, + {-0.440984,0.402262}, + {-0.587779,0.415484}, + {-0.854813,-1.202757}, + {0.140449,0.615316}, + {-0.969118,0.625102}, + {0.723061,-0.023433}, + {-0.466547,-1.193377}, + {0.174382,-0.191844}, + {-0.069412,0.744591}, + {0.614304,0.878272}, + {1.039704,-0.498006}, + {-0.308974,0.145160}, + {1.014526,-0.374036}, + {0.252267,0.687180}, + {-0.162024,-0.879458}, + {-0.069318,-0.136461}, + {1.084086,-0.626762}, + {-0.337708,0.138883}, + {-0.614793,0.495342}, + {-0.313819,0.218629}, + {-0.355789,-0.208860}, + {1.264926,-0.581676}, + {0.995574,1.298469}, + {0.048826,1.154609}, + {0.853013,0.154451}, + {-0.288999,-0.321106}, + {-0.313594,-1.063780}, + {0.993070,0.561339}, + {0.227798,1.300257}, + {0.228511,1.096806}, + {-0.206126,-0.606261}, + {0.534751,1.086407}, + {0.990795,-0.239272}, + {-0.221983,-1.228456}, + {-0.853842,-0.354515}, + {-1.529191,-0.080374}, + {0.510801,0.916183}, + {-0.406386,0.535647}, + {-0.894904,-0.543193}, + {-0.238739,-0.062090}, + {-0.888515,-0.567698}, + {-0.480891,-0.205695}, + {0.174172,-0.275572}, + {-0.272541,0.816420}, + {-2.017061,-0.971229}, + {0.654095,-0.688792}, + {-1.521416,-0.151355}, + {-0.419304,-0.564373}, + {-0.683359,-0.964495}, + {0.191915,0.116535}, + {-0.122173,0.698014}, + {0.091031,0.996259}, + {0.807417,-0.307397}, + {0.503590,-0.560922}, + {-0.025515,-0.177932}, + {-1.471801,0.431103}, + {-0.274382,-1.436026}, + {0.410563,0.251427}, + {-0.688289,0.531037}, + {0.235751,-0.017373}, + {1.697625,0.330051}, + {1.296692,-0.008806}, + {-0.161821,-1.267515}, + {-0.157375,0.552060}, + {0.194818,-0.498418}, + {-0.803649,0.679683}, + {-0.085934,0.145656}, + {1.299868,-0.011962}, + {-0.912591,-0.421947}, + {1.145332,0.300821}, + {0.269805,0.306810}, + {-0.204528,-0.802886}, + {-0.467310,0.023213}, + {-0.143521,-0.064844}, + {-0.615181,-0.550979}, + {-1.849136,-0.009920}, + {0.171609,-0.665812}, + {-0.491934,0.882227}, + {-1.650295,0.114048}, + {-0.400294,0.424205}, + {-0.514118,-0.669073}, + {0.258922,0.794121}, + {0.049997,0.134089}, + {0.194488,-0.156671}, + {0.344593,-0.056610}, + {-0.065019,-0.791255}, + {-0.712143,-0.889316}, + {-0.037947,-0.410308}, + {-0.608536,0.363014}, + {-0.995931,0.748773}, + {-0.532246,1.524272}, + {-1.273984,-0.692641}, + {0.216458,-0.969723}, + {0.596969,1.207691}, + {0.630096,0.619046}, + {0.053170,0.680191}, + {-0.316325,2.215220}, + {-0.727683,0.614145}, + {-0.426250,-0.833144}, + {0.824881,-0.500053}, + {-0.529623,0.311797}, + {-0.178255,0.825478}, + {0.103841,-0.104707}, + {-0.031122,0.452810}, + {-1.102562,-0.565139}, + {0.562892,-1.009280}, + {-0.990678,0.532690}, + {0.780854,-0.558275}, + {-0.797341,-0.248667}, + {0.419113,0.984902}, + {-0.373388,-0.223312}, + {-0.219678,-0.502263}, + {0.073586,-0.923303}, + {0.462648,-0.208484}, + {0.402837,1.456425}, + {0.394849,0.801398}, + {-0.032908,-0.398294}, + {0.137910,0.005318}, + {-0.388445,0.932065}, + {-0.968678,0.568907}, + {-1.168897,0.713647}, + {-0.135803,0.675903}, + {-0.798947,0.409210}, + {-0.210345,0.474493}, + {-0.996924,-0.261361}, + {-0.376090,-0.169902}, + {-0.084624,-0.337132}, + {-0.149856,1.151486}, + {-0.334993,-0.025083}, + {0.014955,-0.281633}, + {-0.296591,1.360250}, + {-0.356625,-0.268706}, + {0.092831,-0.664457}, + {0.661417,1.101560}, + {0.818075,-0.436305}, + {0.257700,0.826407}, + {-0.876984,-0.265632}, + {-0.847009,0.983195}, + {0.533962,0.025176}, + {0.475236,-0.021672}, + {-0.408513,0.144330}, + {-0.054836,-0.056845}, + {-0.811997,-0.428748}, + {-0.041344,0.580983}, + {-0.403695,1.106749}, + {-0.782566,-0.126241}, + {-0.164866,0.115952}, + {-0.511490,-0.220781}, + {0.758437,1.045866}, + {1.585939,0.717827}, + {0.198230,-0.423196}, + {0.425990,0.760640}, + {0.349586,0.560766}, + {-0.394644,0.704755}, + {0.816262,0.894866}, + {0.669015,2.130989}, + {0.400988,0.020291}, + {0.271768,0.213246}, + {0.677947,-0.681183}, + {-1.418844,-0.062849}, + {0.154916,-0.318327}, + {-0.397071,2.104998}, + {0.775958,-0.897373}, + {-0.332711,0.107389}, + {0.120366,-0.286305}, + {0.329814,-0.271822}, + {0.103319,-1.265877}, + {-0.729148,1.209006}, + {0.782576,-1.122029}, + {-0.924092,-0.627575}, + {-0.804932,-0.421433}, + {0.344793,-0.265698}, + {0.408639,0.540421}, + {-0.154016,0.136751}, + {-1.289312,0.562553}, + {-0.541214,0.328546}, + {0.113700,0.137387}, + {-0.357670,0.284727}, + {0.870838,-0.493262}, + {-0.984308,-0.399538}, + {0.156173,0.616735}, + {0.558083,0.793972}, + {-0.041236,-0.886977}, + {-0.272831,-0.458041}, + {0.720271,-1.299717}, + {0.800746,-0.688169}, + {0.003356,-0.488594}, + {0.112341,1.180680}, + {-0.404111,-0.185403}, + {-1.132811,0.187327}, + {0.278689,0.563330}, + {-0.475478,0.253690}, + {0.822805,-1.018580}, + {-0.536317,-0.432998}, + {1.196511,0.646342}, + {0.248643,-0.351856}, + {0.023010,0.801504}, + {0.082477,0.227903}, + {-0.739984,1.409377}, + {-1.093346,0.284272}, + {0.014437,0.797834}, + {-0.231989,-0.756894}, + {-0.324308,-0.373406}, + {0.327255,0.165462}, + {0.077915,0.976373}, + {0.099804,-0.232398}, + {-0.188951,-1.848099}, + {-0.264076,0.299642}, + {-0.249151,0.531139}, + {-0.085369,0.191014}, + {0.418407,0.643442}, + {0.548592,-0.986217}, + {0.201831,-0.013044}, + {0.402804,0.414341}, + {0.672157,-1.203954}, + {0.095442,-0.174176}, + {0.841303,-0.015891}, + {-1.263681,-1.045229}, + {0.761722,0.884349}, + {-1.504885,-0.472921}, + {-0.346331,0.174952}, + {0.933591,0.149618}, + {0.730042,-0.463471}, + {-0.475737,1.006552}, + {0.759548,-0.283706}, + {0.157366,-1.489094}, + {0.523688,0.334166}, + {0.876784,0.002512}, + {-1.026722,0.090503}, + {-1.165607,0.169016}, + {0.359693,-0.053239}, + {0.215738,0.499053}, + {-0.350342,0.196230}, + {0.896169,0.062044}, + {2.042446,-1.127256}, + {-0.534803,-0.041073}, + {-0.164018,0.930955}, + {1.250713,0.249031}, + {-0.869230,0.749397}, + {0.340076,-0.429473}, + {0.156416,-0.607349}, + {-0.876436,0.247448}, + {0.631910,-0.711511}, + {-0.353926,0.595086}, + {-0.317500,0.152275}, + {0.016852,0.409049}, + {0.138180,-0.897995}, + {-1.043338,0.106864}, + {0.249097,0.765102}, + {-0.063449,-0.898102}, + {-0.009991,0.423051}, + {-2.479719,-0.472494}, + {0.089759,0.324779}, + {-0.425748,-0.136768}, + {-0.039432,0.113546}, + {0.378075,0.584178}, + {-0.116790,-0.340992}, + {1.409989,0.608333}, + {0.185191,0.854648}, + {0.148669,-0.916006}, + {0.243601,-0.578485}, + {0.534792,0.128748}, + {0.096589,-0.011526}, + {0.302454,-0.104072}, + {0.557113,-0.581964}, + {0.123224,0.084108}, + {-0.040691,1.241659}, + {-0.976656,-0.139564}, + {0.461107,0.951388}, + {-0.172467,-1.082873}, + {-1.153675,-0.385351}, + {-0.618565,0.103723}, + {0.584970,-0.576273}, + {-0.072267,0.632778}, + {-1.229002,-0.083644}, + {-0.398376,-0.960650}, + {-0.182248,0.182768}, + {0.047476,-0.416691}, + {-0.006784,0.265975}, + {0.197887,-0.503323}, + {1.187192,-0.302236}, + {-0.243130,-1.039109}, + {-0.062329,0.768271}, + {0.943091,0.735741}, + {-0.034137,0.599684}, + {-0.528197,-0.012226}, + {-1.206841,0.534777}, + {-0.136555,0.133648}, + {-0.026909,-0.925145}, + {0.545718,0.306186}, + {0.019155,0.114856}, + {0.108414,0.467932}, + {-0.690591,0.822777}, + {-0.784363,-0.578012}, + {-0.355875,0.224161}, + {1.082772,0.724638}, + {0.259778,-0.690524}, + {0.144948,-0.594185}, + {-0.569524,-0.553273}, + {0.951085,-1.238274}, + {-0.334362,0.954367}, + {0.270034,-0.455925}, + {0.135168,0.992027}, + {0.673968,-0.116692}, + {1.150927,-0.985755}, + {0.401896,-0.044726}, + {-0.404015,0.215494}, + {-0.874189,-0.310641}, + {-1.076193,-1.010944}, + {-1.077048,-0.032036}, + {-0.059354,-0.173463}, + {-0.218021,0.018288}, + {-0.196944,-0.747249}, + {0.734062,0.379284}, + {1.158500,0.450099}, + {-0.858797,0.229643}, + {1.308480,-0.146091}, + {-0.741501,0.254662}, + {1.000943,0.157585}, + {0.521755,-0.098708}, + {0.086764,0.359042}, + {-0.099892,0.739584}, + {0.340750,-1.523697}, + {-0.536943,1.085834}, + {0.570584,0.105172}, + {0.202618,-0.072868}, + {-0.636440,0.211023}, + {0.497984,0.587557}, + {-0.110149,-1.306920}, + {-0.679943,0.412284}, + {-0.316334,-0.908325}, + {-0.711702,1.541623}, + {1.257867,0.108194}, + {-0.642721,-0.461193}, + {-0.358721,-0.241200}, + {0.150649,-1.176602}, + {-1.319244,0.289257}, + {0.773558,0.096770}, + {-0.827512,-0.185106}, + {-0.040823,-1.803707}, + {0.649424,-0.745211}, + {1.254139,0.001556}, + {0.329440,-0.291886}, + {-0.640815,-0.162880}, + {0.091218,1.039846}, + {0.699821,-0.470335}, + {-0.583234,-0.635644}, + {0.819819,-1.751943}, + {-0.721584,0.787984}, + {-0.179237,0.328456}, + {-0.063781,0.429699}, + {1.631510,0.041000}, + {0.122645,-0.926669}, + {0.970309,-0.036087}, + {-0.204184,-0.045486}, + {-0.597965,0.889277}, + {-0.564184,-0.344697}, + {-1.064722,-1.138890}, + {-0.751389,-0.391462}, + {-0.024089,0.535480}, + {-0.265461,0.383199}, + {-0.504780,-1.007336}, + {-1.021076,0.831820}, + {0.141181,-0.805943}, + {0.451375,0.655968}, + {1.100952,0.897682}, + {0.205680,-1.447828}, + {-0.748725,0.229730}, + {0.886689,-0.042364}, + {-1.821520,-0.303140}, + {0.697765,-0.619635}, + {-0.046616,-0.261678}, + {-0.207704,-0.328292}, + {-0.534695,-0.547877}, + {-1.575192,0.622682}, + {0.469863,0.483822}, + {-0.215089,1.552073}, + {0.505524,-0.648942}, + {0.262484,0.623770}, + {0.427704,-0.562431}, + {-0.872769,0.672559}, + {-0.020422,-0.187349}, + {1.243445,-1.678458}, + {0.123213,-0.587475}, + {0.071629,-0.272299}, + {0.150438,0.166304}, + {-0.278067,-0.782556}, + {0.011738,-0.690190}, + {0.881321,-0.960599}, + {0.234258,-0.529572}, + {-1.583603,-1.199128}, + {0.394669,-0.930577}, + {-0.358556,1.527559}, + {-1.524935,-0.981286}, + {-1.283556,0.168284}, + {-0.071836,-0.156780}, + {1.300191,1.006321}, + {-1.238737,0.048229}, + {-0.377324,-0.229504}, + {1.099479,0.998962}, + {-0.298661,-1.195932}, + {-0.283137,-0.159995}, + {0.098216,1.750651}, + {-1.026856,0.639700}, + {0.770303,0.037554}, + {-0.190248,-0.145522}, + {-0.674866,0.016212}, + {-1.556569,1.310796}, + {-0.417356,1.000320}, + {1.292398,-0.862891}, + {-0.666403,1.999084}, + {0.359215,0.069716}, + {0.347212,-0.033478}, + {-0.378434,-0.364239}, + {-0.177074,0.536678}, + {0.665238,-0.817818}, + {-0.050101,0.086105}, + {0.402255,-0.348473}, + {-0.108418,-0.286375}, + {0.632875,-0.573563}, + {-0.401028,-1.098233}, + {-0.209670,-0.524291}, + {1.161718,-0.018141}, + {0.062103,0.583460}, + {0.477218,1.102610}, + {-0.467535,1.244971}, + {-0.375225,-0.086564}, + {0.628985,-0.808293}, + {1.769568,-0.074081}, + {-0.632422,0.452516}, + {-0.080602,0.904194}, + {-0.036578,0.987790}, + {-1.059879,-0.224910}, + {-0.942022,0.248616}, + {0.604268,0.203433}, + {0.511442,-0.200682}, + {-1.007013,0.355784}, + {-0.895393,-0.034260}, + {-1.057717,1.382638}, + {0.611742,0.856244}, + {0.703185,-0.058025}, + {-0.130182,-0.591155}, + {0.638317,-0.190395}, + {0.522978,-0.891479}, + {-0.002451,-0.012145}, + {-0.321576,0.154897}, + {-1.017726,0.839232}, + {0.275647,-0.836124}, + {-0.118267,-0.695792}, + {-2.185583,-0.392189}, + {0.732423,-0.118374}, + {0.884142,0.303615}, + {-1.341810,-0.498593}, + {-0.479942,-0.379985}, + {0.111066,-2.027992}, + {0.639038,-1.018160}, + {0.123944,0.497292}, + {-1.415298,-0.098769}, + {1.108608,-1.269705}, + {-1.101691,0.124200}, + {0.442822,-0.443518}, + {-1.122461,0.522937}, + {-0.142504,-0.305149}, + {-0.176067,-0.623792}, + {-0.196882,0.715774}, + {0.406265,0.244901}, + {1.161033,0.506478}, + {0.167092,-0.544898}, + {-0.008688,-0.682775}, + {-0.481234,-0.114580}, + {-0.301007,-0.278349}, + {0.839510,-0.084011}, + {0.523550,0.618197}, + {-1.485248,1.869149}, + {-0.385724,0.172770}, + {-0.388899,-0.581958}, + {0.615073,-0.767256}, + {0.695869,1.535576}, + {-1.500226,-0.888290}, + {-0.511725,0.657499}, + {-0.738649,-0.437450}, + {0.652296,-0.153666}, + {-0.169144,-0.366049}, + {-0.213299,0.312138}, + {-0.862391,-0.179164}, + {0.479733,1.023316}, + {-1.704103,-0.974490}, + {-0.348370,-1.488505}, + {-1.099062,0.282122}, + {-1.578280,-0.162824}, + {-1.091052,0.744575}, + {-0.515178,-0.044797}, + {0.065343,0.960922}, + {-0.051800,-0.142943}, + {-0.117723,-1.467680}, + {-0.643133,1.163677}, + {-0.034072,0.261251}, + {0.464990,-0.130008}, + {0.133313,-1.401987}, + {0.126248,0.450691}, + {-0.003664,-0.323720}, + {0.142170,-0.755157}, + {-1.656898,-0.020361}, + {-0.612778,0.036440}, + {0.353884,-0.743228}, + {-0.430287,-0.179029}, + {0.625341,0.171575}, + {1.016815,-0.257385}, + {0.324956,-0.714199}, + {-1.174736,-0.158217}, + {-0.274466,-0.771165}, + {-0.393455,-0.971745}, + {-0.298555,0.790057}, + {-0.646557,-1.558486}, + {0.758193,0.973426}, + {-0.512463,-0.785605}, + {0.980556,-0.044524}, + {0.453143,0.624350}, + {1.147269,0.020674}, + {-0.501269,-0.404065}, + {-0.244718,-0.507250}, + {0.770791,0.097876}, + {0.244499,-0.019047}, + {-0.727271,-1.001762}, + {-0.366096,-0.511113}, + {0.479774,0.574401}, + {0.917365,-0.129024}, + {-0.745295,-0.245488}, + {0.745051,1.034707}, + {0.810366,-0.847422}, + {0.235447,0.300914}, + {-0.708897,-0.941699}, + {0.309677,-1.041238}, + {-0.081649,0.128611}, + {0.844397,0.010619}, + {-1.009033,0.934418}, + {1.144116,0.074744}, + {-0.057235,-0.308853}, + {0.360603,0.036429}, + {0.830911,-0.450962}, + {-0.194946,-0.151025}, + {-0.211182,0.118259}, + {0.021337,0.332110}, + {0.129465,-0.225661}, + {-1.052171,-0.755217}, + {0.633623,-0.177776}, + {0.100743,-0.704954}, + {-0.818968,1.180590}, + {-0.535346,-0.545943}, + {-0.006770,0.316309}, + {0.775806,0.533149}, + {0.339163,0.050466}, + {0.318535,-0.074793}, + {-1.297398,-0.351562}, + {-0.772665,1.015512}, + {0.295548,-0.180960}, + {-0.044699,-0.203172}, + {0.724933,-1.023951}, + {-0.167979,-0.725819}, + {0.686506,0.268161}, + {-0.480277,-0.221435}, + {-0.056920,0.480959}, + {0.030116,-0.272789}, + {-0.302421,0.129490}, + {-1.671242,0.181529}, + {-0.281706,-0.333536}, + {0.016290,-0.028753}, + {-0.259901,-0.190484}, + {0.289524,-0.195349}, + {-1.337980,0.540319}, + {0.661628,-0.670418}, + {0.599796,0.557768}, + {0.580559,0.969807}, + {0.031230,0.964814}, + {0.198048,0.444485}, + {0.578456,-0.883133}, + {0.624222,1.329692}, + {-0.625168,-0.127331}, + {-0.017311,1.164091}, + {-0.621783,-0.446638}, + {0.701142,-0.309340}, + {-1.057874,-0.834624}, + {0.346678,-1.338687}, + {0.667874,-0.522838}, + {-1.028893,-0.504854}, + {-1.338328,-0.931585}, + {0.287635,0.120742}, + {0.230818,0.167010}, + {-0.328503,-0.748337}, + {-0.255351,0.964045}, + {0.510160,-1.611867}, + {0.223958,-0.860844}, + {0.239175,-0.837760}, + {1.266567,-0.125655}, + {0.582400,0.156299}, + {0.251579,-1.778354}, + {0.650474,0.028121}, + {0.993767,-0.090186}, + {0.441591,-0.361052}, + {-1.413507,0.317850}, + {0.334364,-0.332911}, + {-0.010362,-0.177608}, + {0.014458,-0.502127}, + {-0.919481,-1.160841}, + {-0.443414,0.552915}, + {-0.054788,-1.052794}, + {-0.561902,0.153077}, + {-0.677469,-0.159762}, + {0.650310,-0.922686}, + {0.296712,0.812605}, + {-0.294342,0.055605}, + {-0.535585,-1.384576}, + {-1.433487,-0.747544}, + {0.645626,-0.741622}, + {0.920579,-0.258878}, + {0.169646,0.529906}, + {0.674057,0.410030}, + {-0.351663,0.199608}, + {-0.339342,-0.416492}, + {-0.271758,1.138671}, + {0.224929,-1.327320}, + {0.601037,1.033542}, + {-0.193132,-0.768238}, + {0.364633,-0.653041}, + {0.783166,-0.809904}, + {0.559880,0.350413}, + {0.615788,-0.237848}, + {0.236813,-0.842202}, + {0.031135,-0.661401}, + {0.349296,-0.774153}, + {1.759036,-0.724450}, + {-0.116563,0.294276}, + {0.375200,-1.357901}, + {-1.029118,1.305234}, + {0.497985,-0.464184}, + {-0.295867,-0.349915}, + {0.221068,-0.835466}, + {-0.838100,0.275901}, + {-1.020066,0.277497}, + {1.091145,0.328918}, + {0.327124,0.702349}, + {-0.476125,0.304774}, + {0.520932,0.875467}, + {-1.726524,1.028699}, + {0.060615,0.113976}, + {0.297927,1.293605}, + {-0.405591,0.650445}, + {0.037677,-0.734049}, + {-0.565393,0.943537}, + {0.910424,-0.580765}, + {0.493416,-0.962297}, + {0.956024,0.716498}, + {0.474440,0.623715}, + {-0.922501,-0.564992}, + {-0.794655,0.719802}, + {0.596664,-0.091353}, + {-1.236730,0.412576}, + {-0.041676,0.394763}, + {0.786846,0.085198}, + {1.051734,-0.257630}, + {-0.906726,-1.590711}, + {0.362094,-1.386569}, + {0.148797,-0.901821}, + {-0.736306,0.417423}, + {0.329381,-0.221941}, + {0.009126,0.513875}, + {-1.192236,0.638637}, + {-0.317820,0.575279}, + {1.586186,-0.027898}, + {-0.025386,0.094059}, + {-0.315796,-0.838576}, + {0.030063,-0.320087}, + {0.534822,0.130995}, + {0.477222,-0.398652}, + {-0.913466,-0.563169}, + {-0.823684,-0.189615}, + {-0.213996,0.665743}, + {0.654202,0.146227}, + {-0.004974,0.257017}, + {-0.024927,-0.214095}, + {-1.045988,0.681355}, + {0.146436,0.294438}, + {1.089600,-0.127405}, + {0.798004,0.931002}, + {-0.505832,0.828742}, + {0.361348,-0.830710}, + {-0.305041,1.032923}, + {-0.728657,-0.579665}, + {0.517347,-0.452207}, + {0.879566,-0.278807}, + {-0.124969,-0.036169}, + {0.628951,-0.089218}, + {-0.603025,-0.528341}, + {0.019535,1.501341}, + {0.881593,0.143029}, + {-0.231925,-0.097508}, + {0.538676,0.300952}, + {-0.127155,0.296466}, + {-0.274248,0.005941}, + {1.500761,-0.345010}, + {-0.907824,1.044908}, + {0.414848,1.043371}, + {-0.867983,-0.304333}, + {0.044936,0.571416}, + {-0.266616,0.376188}, + {0.878846,0.549724}, + {-0.170746,0.362205}, + {0.160919,0.167739}, + {0.462195,0.540838}, + {-0.875388,-0.096774}, + {0.307478,-0.185363}, + {-0.181949,0.313114}, + {-0.085873,-0.399748}, + {-0.129085,1.140098}, + {-0.252383,0.086665}, + {0.189609,-1.301528}, + {0.382798,0.498417}, + {-0.506249,-0.317346}, + {-1.212357,0.230474}, + {0.474321,0.181404}, + {0.681870,-0.999781}, + {0.607469,-0.406532}, + {0.622035,-0.522596}, + {0.227928,0.106501}, + {-0.379127,-0.283975}, + {0.139899,-0.090042}, + {0.672276,-0.271219}, + {-0.234798,-0.982539}, + {0.475426,-0.896914}, + {-0.325514,0.546342}, + {0.437787,0.300656}, + {-0.625297,-0.525772}, + {-0.061169,0.198968}, + {-0.094667,0.112590}, + {0.786903,0.717350}, + {-0.109661,-0.225045}, + {0.186298,-1.271786}, + {-0.369875,0.986481}, + {0.689748,-0.439040}, + {-0.965116,-0.848020}, + {0.656998,-2.318079}, + {0.002981,0.218055}, + {-1.189818,0.355672}, + {0.584073,-1.050715}, + {-0.108002,-0.588069}, + {-0.313385,0.621555}, + {-0.889104,-0.082471}, + {-0.769348,1.617374}, + {-1.728674,1.396468}, + {-0.616521,1.370656}, + {-1.249198,0.309463}, + {0.189456,-0.979952}, + {-0.118186,1.507419}, + {0.747125,0.309914}, + {-0.614646,1.308353}, + {0.333443,-1.419442}, + {-1.700063,0.680655}, + {0.266295,0.063078}, + {-1.331327,0.169856}, + {0.242049,-1.531715}, + {0.960667,-0.302137}, + {-0.061825,0.429394}, + {-0.329970,0.278702}, + {0.410208,1.176057}, + {-0.789042,-0.174484}, + {-0.238696,-0.184614}, + {0.602804,0.051704}, + {-0.633642,0.103324}, + {0.065643,-0.546136}, + {-0.339235,-0.673524}, + {-0.315448,-0.300233}, + {-0.864395,0.215781}, + {0.254565,0.459681}, + {-0.723593,1.270257}, + {-0.583801,0.838345}, + {-0.808536,-0.416249}, + {-0.053534,0.820439}, + {0.798705,-0.418082}, + {1.776613,-1.110952}, + {0.366472,0.636865}, + {0.324757,0.701457}, + {-0.036684,0.112409}, + {-0.877729,0.003873}, + {-1.084160,-0.401799}, + {-0.008295,0.326360}, + {0.787213,-0.261947}, + {0.836987,-0.392854}, + {0.275954,0.382297}, + {-0.690174,0.027938}, + {-0.374934,0.437628}, + {-0.759869,0.360720}, + {-0.638815,0.093196}, + {0.189722,-0.218160}, + {-0.454777,-1.027413}, + {1.236142,0.310097}, + {0.477871,-0.594035}, + {-0.124788,-0.108431}, + {0.544631,0.996734}, + {-0.496622,-0.463029}, + {0.625047,0.069807}, + {0.557384,0.060492}, + {-0.265568,-1.409334}, + {0.239741,0.259396}, + {0.904890,-0.068242}, + {-0.744938,0.163030}, + {-0.471091,-0.345572}, + {-0.273164,0.370181}, + {0.729318,1.531839}, + {-0.726184,-0.223504}, + {0.242483,0.053784}, + {-0.205845,-0.562647}, + {-2.151637,-0.069466}, + {-0.846446,0.795935}, + {1.110915,-0.399958}, + {0.489046,-0.556660}, + {0.205667,0.176983}, + {0.328136,0.200920}, + {0.527322,0.191632}, + {1.546037,-0.657550}, + {-0.310488,0.301548}, + {0.585276,0.957516}, + {0.128524,0.840981}, + {0.018146,1.407488}, + {-1.516386,0.228783}, + {0.124218,-0.156492}, + {0.265637,0.315627}, + {-1.063782,-0.367510}, + {0.827797,0.276360}, + {1.960161,-1.227262}, + {0.806068,1.260862}, + {0.373849,-0.276127}, + {-0.498184,-0.462535}, + {-0.077592,0.327073}, + {0.588710,-0.430273}, + {-0.905723,-1.065033}, + {-0.016188,-0.290291}, + {-0.109620,0.477222}, + {0.565824,-0.470857}, + {0.705157,0.606991}, + {0.614145,-0.049931}, + {-0.031315,-0.632364}, + {0.072033,-0.559342}, + {0.458793,1.387290}, + {0.206636,0.224213}, + {-0.392240,-0.854508}, + {-0.839329,1.695036}, + {0.566507,-0.629087}, + {0.370644,-1.070375}, + {0.761916,-0.623349}, + {0.602129,0.418224}, + {0.790301,-0.310664}, + {1.481982,0.146058}, + {-1.573813,0.024454}, + {0.567915,-0.336681}, + {-0.639597,0.182668}, + {1.260436,2.207508}, + {0.696288,0.181341}, + {0.376110,0.431512}, + {-0.000551,0.056281}, + {0.402438,-0.361156}, + {0.072172,0.279490}, + {-0.885060,-0.641645}, + {1.385817,0.885361}, + {0.690711,-0.158455}, + {-0.960198,-0.182059}, + {0.321308,0.180684}, + {0.147669,-0.549752}, + {-0.107020,0.306074}, + {0.174252,0.899434}, + {0.061913,-0.189282}, + {1.102905,-1.250777}, + {0.223198,-0.637361}, + {-2.146420,0.173387}, + {-0.084436,-0.775938}, + {0.287327,0.446614}, + {1.090236,0.383949}, + {1.121181,0.127876}, + {0.103766,0.991675}, + {1.242702,0.272046}, + {1.008926,-0.211179}, + {-1.353983,-0.705201}, + {-1.661310,0.179906}, + {-0.572442,0.843940}, + {0.534838,-0.420940}, + {1.906158,1.102764}, + {-0.553360,-0.478077}, + {-0.636383,-1.315762}, + {-1.124395,0.081685}, + {0.220542,0.468091}, + {-1.229590,-0.659073}, + {-0.564517,0.239986}, + {-1.172267,-0.314597}, + {0.151538,0.149107}, + {0.242211,-0.821363}, + {0.254545,0.273831}, + {-0.534100,-0.226399}, + {1.163542,-0.942243}, + {1.041018,0.317274}, + {-0.401554,-0.096105}, + {-0.113999,-0.117513}, + {-0.010346,-0.748131}, + {0.354813,0.636504}, + {-0.681541,-0.112983}, + {-0.488145,0.464117}, + {-0.193164,0.061733}, + {-0.192093,-0.321730}, + {0.509883,0.382645}, + {-1.403973,-0.336215}, + {0.394349,-0.205158}, + {0.391611,-0.502082}, + {0.616434,-0.022915}, + {0.804218,-0.495715}, + {-0.079753,0.070374}, + {0.341990,-0.635143}, + {0.067861,-0.236447}, + {-1.101606,-0.120961}, + {0.442884,-0.438436}, + {0.212980,0.309736}, + {0.528495,-0.251375}, + {-0.692353,-0.169402}, + {0.562221,-0.028760}, + {0.590351,0.405250}, + {-0.717372,0.369161}, + {-0.806613,0.504272}, + {0.286954,1.111197}, + {-0.105423,-0.153474}, + {-0.346757,-1.116428}, + {0.226199,-0.504658}, + {0.004135,-0.101712}, + {-0.040985,-0.512184}, + {-0.022114,-0.025237}, + {-0.334621,-0.134380}, + {0.534726,-0.729250}, + {-0.282945,-0.576566}, + {-0.931037,0.047644}, + {1.365371,-0.644779}, + {0.168399,-1.211458}, + {2.486020,-1.456800}, + {-0.004467,-0.574279}, + {-0.401257,1.031333}, + {0.424854,0.679751}, + {-0.360869,-0.836076}, + {-0.349323,1.100520}, + {0.126475,0.711401}, + {-0.075597,1.820855}, + {-1.746648,1.113080}, + {-0.153525,-0.544782}, + {-0.533184,-0.693391}, + {-0.769927,-0.582211}, + {-0.680363,0.216778}, + {-0.004214,-1.526735}, + {-0.086907,-0.002847}, + {0.232166,-0.016912}, + {0.817197,0.482386}, + {-1.105532,0.491655}, + {-0.376338,0.410127}, + {1.042417,0.054103}, + {-0.241349,-0.748510}, + {-0.014625,-0.417149}, + {0.738367,0.443956}, + {-1.044035,0.497683}, + {0.292520,-0.751995}, + {-0.217407,0.722108}, + {0.918647,-0.718313}, + {-0.164316,0.409743}, + {1.309759,0.090394}, + {0.233709,-0.815158}, + {-0.239462,0.605397}, + {-0.039005,-0.027079}, + {-0.954133,-0.096347}, + {1.816169,0.521655}, + {0.153716,-0.328576}, + {0.835515,-0.359370}, + {-0.705611,-0.523065}, + {0.138570,-0.063344}, + {0.083846,-0.023266}, + {-0.562762,-0.812709}, + {0.365173,-0.859163}, + {0.578421,-0.182048}, + {-0.126089,1.117181}, + {0.617319,-1.086710}, + {0.769929,0.422361}, + {-1.309781,1.172984}, + {-0.596821,-0.251837}, + {0.212351,-0.811837}, + {-0.162098,-0.192380}, + {-0.813093,1.121627}, + {0.256762,0.936857}, + {-0.875631,1.008870}, + {0.247567,0.868075}, + {0.971357,-0.738473}, + {-0.226325,0.330532}, + {-0.162002,0.916161}, + {-0.400712,1.001422}, + {0.074112,1.112345}, + {0.860980,0.266196}, + {0.395444,-0.557019}, + {0.120734,-1.186860}, + {0.556697,0.066680}, + {0.854588,0.178589}, + {2.451387,-1.403948}, + {0.227316,0.024298}, + {0.591620,0.075444}, + {0.200034,0.061233}, + {0.482442,-0.836773}, + {1.044504,0.162091}, + {0.928003,-0.484096}, + {0.382501,-0.191498}, + {-0.375135,0.607373}, + {-0.736591,0.301910}, + {0.174839,-0.142515}, + {0.733383,0.997919}, + {-0.786136,-1.067298}, + {-0.206222,-0.113384}, + {-0.464171,0.094194}, + {-1.350080,-0.791223}, + {-1.126134,-0.116062}, + {-0.208917,-1.109539}, + {-0.370726,-0.057655}, + {-0.091744,-1.090501}, + {-0.208418,0.132989}, + {0.864632,-0.798601}, + {1.102361,1.368734}, + {-0.272215,-0.247604}, + {-1.023085,-0.986586}, + {-0.065967,0.605997}, + {0.063587,-0.976618}, + {-0.267152,-0.116898}, + {-0.461969,-0.203471}, + {-0.573852,0.570464}, + {-0.138348,0.534036}, + {-0.090592,0.936618}, + {0.850179,-0.537120}, + {-0.433713,-0.556356}, + {-0.537237,-0.713364}, + {0.426253,-0.478599}, + {1.133750,-0.964272}, + {-1.331896,0.116871}, + {0.191830,0.696149}, + {-0.109898,-1.447008}, + {0.959592,0.346543}, + {0.261532,-0.822086}, + {0.303775,-1.459434}, + {0.530404,0.421720}, + {-0.453037,-1.463699}, + {0.123500,0.017147}, + {0.172476,-0.507657}, + {-0.160135,1.263925}, + {0.030836,0.556500}, + {-0.185416,-0.025333}, + {0.637640,0.395256}, + {0.089760,-0.864083}, + {0.577483,1.581489}, + {0.979522,1.296548}, + {-0.497799,-0.045689}, + {-0.047660,1.066061}, + {0.048446,-1.060159}, + {-0.968548,-0.221439}, + {1.484060,0.378410}, + {-0.770293,-0.087204}, + {-0.764451,-0.554893}, + {0.348932,-0.676770}, + {-1.210537,0.339603}, + {0.924898,-0.536966}, + {-1.159727,-0.216140}, + {-0.625226,-0.977963}, + {0.640809,0.919168}, + {-0.239144,0.785286}, + {0.809998,0.679827}, + {0.397941,-0.337279}, + {1.158469,-0.284939}, + {0.740868,-0.632110}, + {0.246451,0.582746}, + {1.169569,-0.447871}, + {-0.206093,-0.436712}, + {1.593053,-0.562783}, + {-0.072116,-1.390822}, + {0.534517,-0.038637}, + {0.034689,0.141429}, + {0.474386,0.514105}, + {0.572791,-0.330251}, + {-0.548599,-0.594569}, + {-1.071301,-0.270923}, + {0.486895,0.652847}, + {-0.069770,1.249662}, + {-0.040552,-0.687992}, + {-0.284734,0.643650}, + {-0.808577,0.013167}, + {-0.452947,0.353593}, + {-0.729562,-2.012804}, + {1.237631,-1.264824}, + {0.110039,1.404809}, + {0.107938,-0.296577}, + {0.386214,-0.709940}, + {1.137573,0.606987}, + {0.412215,-0.555525}, + {-1.988232,-0.162112}, + {0.848561,0.408090}, + {-0.811612,0.394181}, + {0.485756,-0.746334}, + {0.049115,-0.087741}, + {-1.022135,-0.921590}, + {-0.633999,0.061617}, + {-0.090648,0.618570}, + {-1.247020,-0.001903}, + {-0.421031,-0.238286}, + {0.711286,-0.314523}, + {-0.147505,-0.383916}, + {-0.683990,0.445952}, + {0.432133,-0.119312}, + {-1.132072,-0.396738}, + {0.135841,0.222292}, + {-0.230532,0.331470}, + {0.254731,-0.376331}, + {-0.776682,0.039871}, + {-1.169703,-0.331153}, + {-0.873728,0.067719}, + {-0.207084,-0.835310}, + {0.037790,-0.362456}, + {0.583451,1.129280}, + {-0.558111,-0.573604}, + {0.856679,-0.022411}, + {0.164767,0.141428}, + {-0.009111,-0.317562}, + {1.150656,1.264776}, + {-0.789474,0.292994}, + {-0.466256,0.131396}, + {-0.773386,0.095435}, + {-0.310801,0.037979}, + {0.426976,0.983285}, + {0.477342,0.671231}, + {0.453581,0.460922}, + {-0.126415,0.223835}, + {-0.197906,-0.189931}, + {-0.526443,0.635295}, + {-0.729339,-0.271754}, + {-0.277572,-0.106432}, + {0.605958,0.268731}, + {0.697244,-0.324635}, + {-0.601406,0.750119}, + {2.020241,-0.455436}, + {-0.545556,-1.777371}, + {-0.106454,-0.323364}, + {0.730151,-0.521349}, + {-0.222232,-0.678729}, + {-0.822648,0.759164}, + {0.347482,0.318147}, + {0.320443,1.047896}, + {-0.007527,-0.099273}, + {-0.469680,0.811059}, + {-0.725923,0.045348}, + {-0.845127,0.408992}, + {-0.483176,-0.402357}, + {-0.244242,-0.138255}, + {0.777707,0.361076}, + {-0.284361,-1.213446}, + {-0.005269,1.151649}, + {-0.132040,-0.605975}, + {-0.614343,0.207020}, + {0.172750,1.326225}, + {-0.902838,0.195327}, + {0.343014,-0.865008}, + {0.125967,0.451258}, + {0.332072,0.614969}, + {-0.298182,0.490626}, + {1.424204,-0.479491}, + {-0.031385,0.164505}, + {0.233636,-1.315612}, + {-0.450889,0.377407}, + {0.029363,0.410567}, + {0.306058,0.200634}, + {-1.349288,0.431649}, + {0.358784,0.047745}, + {-0.557686,1.348221}, + {-0.061715,-0.056931}, + {-0.363172,0.195052}, + {-0.657930,-0.139592}, + {-0.228460,0.043261}, + {-0.400956,-0.445312}, + {-0.518420,0.120859}, + {-0.698407,-1.044712}, + {1.235472,1.348407}, + {0.487842,0.303364}, + {-0.723742,0.780963}, + {-0.593303,-0.225305}, + {-0.534609,0.308384}, + {0.517702,0.592656}, + {0.954708,0.946876}, + {0.138369,0.042618}, + {-0.011117,0.156468}, + {0.129045,-0.782424}, + {0.544442,-0.335302}, + {0.100454,0.021699}, + {-0.414913,-0.364941}, + {-1.446169,0.180437}, + {-0.104807,-1.198166}, + {-0.663552,0.253006}, + {-0.873757,0.653705}, + {0.913861,0.776582}, + {0.408304,-0.209211}, + {-0.292234,0.935191}, + {0.612411,0.506772}, + {0.052624,-0.170316}, + {-0.316935,0.099714}, + {-0.353097,0.013558}, + {1.233948,0.295996}, + {0.369796,0.587798}, + {-0.240517,-0.082754}, + {0.456761,1.042474}, + {-0.213108,0.167637}, + {0.399378,-1.139074}, + {0.884318,-0.559808}, + {1.445237,-0.362312}, + {0.116480,1.022887}, + {-1.064627,-0.325939}, + {0.517946,-0.548647}, + {0.415227,0.031714}, + {0.100481,-0.138348}, + {-0.809183,-0.296851}, + {0.780624,1.262479}, + {0.563065,-0.043795}, + {0.912444,-0.494706}, + {-0.734037,0.870375}, + {-0.318819,1.118381}, + {-0.000746,-0.287874}, + {-1.164864,-0.526955}, + {0.294943,0.563007}, + {-0.310269,0.305960}, + {-0.477327,-0.723869}, + {1.444745,0.187725}, + {1.871817,-0.263160}, + {-0.194735,0.555531}, + {-0.321051,-0.730174}, + {-0.190988,-0.402861}, + {-0.471553,-0.864754}, + {0.858125,-1.345250}, + {-0.616872,0.087958}, + {1.283791,0.027641}, + {0.256228,-1.305667}, + {0.135487,-0.829405}, + {-1.326564,0.237115}, + {-0.150936,0.123060}, + {0.525275,-1.201838}, + {0.345162,-0.254455}, + {-0.289832,-0.377094}, + {-0.152667,-0.439359}, + {-1.044104,-0.312180}, + {0.123564,0.909003}, + {0.092452,-0.627863}, + {-1.077986,0.652712}, + {0.546415,0.317801}, + {-0.327865,0.791680}, + {-0.742691,0.429484}, + {1.359870,0.653960}, + {0.618629,-0.810634}, + {-1.486101,-0.628531}, + {0.594045,-0.133495}, + {-0.470586,0.135156}, + {-0.143237,-0.465263}, + {-1.088628,0.943733}, + {0.198579,-0.639867}, + {-0.063074,-0.021058}, + {0.108028,0.446404}, + {1.189162,0.613968}, + {0.337471,-1.129207}, + {-0.455311,0.326954}, + {-0.570540,-1.907149}, + {-0.314445,0.220247}, + {-0.644406,0.871505}, + {-0.516263,0.822251}, + {-0.557629,-0.170696}, + {0.722273,-0.131339}, + {0.230421,0.790328}, + {-0.104488,-1.716517}, + {-1.241919,0.455016}, + {-0.692486,1.120817}, + {1.549314,-0.046370}, + {-0.106043,0.644970}, + {-0.074406,-0.804419}, + {0.548174,0.128521}, + {-0.595960,-0.462357}, + {0.142829,-0.219578}, + {-0.162097,-0.875243}, + {0.686753,0.775003}, + {0.873880,1.383881}, + {-0.653841,0.636136}, + {0.383632,-0.777116}, + {-1.108266,0.038942}, + {0.971520,0.211922}, + {-0.268643,0.730017}, + {0.855520,0.049969}, + {0.302034,-0.524310}, + {-0.852706,-0.537224}, + {-0.804297,-0.114715}, + {-1.478564,-0.084384}, + {-0.408535,0.423840}, + {-0.168721,-0.141810}, + {0.077383,0.243237}, + {-1.559434,1.191402}, + {1.022154,-0.100324}, + {0.323561,0.469589}, + {-0.663531,0.640213}, + {0.554019,1.763611}, + {1.013954,-0.099589}, + {-0.768361,0.429501}, + {-1.056947,-0.854475}, + {0.199817,-1.902227}, + {-0.070703,-0.504816}, + {-0.936270,0.009265}, + {0.151126,-0.507320}, + {-0.504326,0.276844}, + {-0.314265,1.314549}, + {0.326736,-0.579350}, + {0.592561,-0.964175}, + {-0.223907,-0.829707}, + {-0.401792,-0.560375}, + {0.302453,-0.641377}, + {0.179660,0.273186}, + {-0.093790,-1.403175}, + {-0.547478,-0.365566}, + {-1.082055,-0.079541}, + {0.493591,0.675680}, + {0.488427,0.562525}, + {0.214921,0.219073}, + {1.036597,-0.145378}, + {-0.027255,-0.113060}, + {0.673240,0.620677}, + {0.723878,-0.899601}, + {0.069137,-0.059731}, + {0.241888,0.932147}, + {0.990557,0.522072}, + {0.333210,-0.429499}, + {0.416918,0.495753}, + {-0.659767,-0.994323}, + {0.616175,0.547587}, + {1.096390,0.648779}, + {1.512614,1.140619}, + {-0.038962,-1.035122}, + {-1.083694,-0.279680}, + {0.614096,0.432151}, + {-0.347563,0.062973}, + {1.386988,-0.035997}, + {0.327510,-0.207868}, + {-1.183518,-1.737384}, + {-0.208895,1.406995}, + {0.663338,-0.017747}, + {-0.897272,-0.573788}, + {0.942633,-0.547325}, + {-0.099388,-0.254556}, + {-0.201353,0.644556}, + {0.866075,-0.228444}, + {0.946155,-0.216844}, + {-0.253558,0.114459}, + {0.715896,0.743102}, + {-0.359932,0.276616}, + {-0.210247,-0.083149}, + {0.802847,0.140860}, + {0.408994,0.029881}, + {0.377356,0.319152}, + {-0.372690,-0.245271}, + {0.676166,0.109436}, + {0.724096,0.333436}, + {0.221166,0.187551}, + {-0.391584,0.738071}, + {0.005351,0.778829}, + {-0.358326,0.932486}, + {0.490539,0.803589}, + {-1.940728,-0.191677}, + {0.344834,0.501654}, + {0.800213,0.523732}, + {0.582049,-0.075948}, + {-0.161980,0.485703}, + {-0.259158,-0.582118}, + {1.062836,0.273222}, + {-0.778178,0.190672}, + {0.714527,-1.538556}, + {-0.396795,0.449148}, + {-0.781750,0.953574}, + {-0.338389,-0.501176}, + {-0.641856,-0.054484}, + {0.563696,-0.904985}, + {-0.099391,1.184931}, + {-0.112808,0.108574}, + {0.646080,0.427004}, + {0.212517,0.155965}, + {0.535560,-0.571720}, + {0.553376,-0.294148}, + {-1.607834,-0.184165}, + {-1.547767,0.680574}, + {0.781165,0.154537}, + {0.560969,0.631483}, + {0.495580,1.820957}, + {0.007403,-0.213880}, + {-0.133441,0.263800}, + {-0.539947,-1.040542}, + {0.451911,-0.153928}, + {0.637194,0.419776}, + {1.273621,1.299122}, + {-0.212328,0.126958}, + {-0.797461,1.644603}, + {-0.122874,1.002433}, + {0.531739,1.435631}, + {-0.292445,0.088739}, + {0.116979,0.506073}, + {0.300921,-0.773498}, + {-0.001333,-0.556370}, + {-0.895409,0.437721}, + {0.917279,0.508782}, + {-0.491002,0.775053}, + {0.198360,-0.494544}, + {-0.466188,0.389353}, + {1.026724,0.378360}, + {0.554313,0.153011}, + {2.109013,0.702959}, + {-1.076990,-0.126220}, + {-0.628257,-0.250837}, + {-0.360120,-0.713433}, + {0.323767,-0.526853}, + {0.618992,0.232543}, + {0.680284,-0.239604}, + {-0.469444,0.121707}, + {-0.121518,-0.113712}, + {0.429205,-0.768057}, + {0.120817,-0.738954}, + {0.246917,-0.025595}, + {0.223685,0.828870}, + {0.558682,0.833145}, + {-0.226176,-1.141426}, + {0.592138,0.661966}, + {0.057983,-0.123112}, + {-0.277232,0.942800}, + {0.380806,-0.215897}, + {-1.027768,-0.692785}, + {1.629491,-1.099912}, + {-0.047831,-1.555090}, + {-0.577377,-0.165198}, + {0.708597,-0.250402}, + {-1.063587,-0.338164}, + {0.505373,0.385189}, + {0.072781,-0.658487}, + {0.542617,-0.198652}, + {1.367844,0.323822}, + {-0.727703,0.962762}, + {-0.393308,0.873045}, + {-0.950481,0.223532}, + {1.018389,0.884161}, + {-0.042519,0.854602}, + {-1.358413,-0.098257}, + {0.245351,-0.975102}, + {-0.055406,-1.219287}, + {1.325559,-0.297813}, + {-0.072107,-0.600966}, + {-0.045452,-0.636110}, + {1.196032,-0.569957}, + {0.455332,-1.319878}, + {-0.547178,-0.392150}, + {-1.296887,-0.758016}, + {0.862281,0.903182}, + {-0.538526,-0.948723}, + {0.065158,0.398744}, + {-0.565977,-0.745461}, + {-0.050462,0.869712}, + {0.205620,-0.219247}, + {0.093927,-0.270377}, + {1.113685,-1.069443}, + {-0.718055,0.556379}, + {0.050929,0.307347}, + {-1.222501,0.207457}, + {0.951141,-1.438969}, + {-0.003803,-0.125003}, + {-1.267607,0.411439}, + {-0.857943,-1.588554}, + {0.596604,-0.286897}, + {-0.872539,-0.101087}, + {-0.658556,0.189207}, + {-0.387868,-0.070786}, + {-0.462842,0.344476}, + {1.085369,-0.860640}, + {1.581858,1.043663}, + {-0.972570,0.171239}, + {-0.075607,-0.486479}, + {1.421958,-1.399106}, + {-0.589684,0.410053}, + {0.377491,0.034375}, + {0.428788,0.365635}, + {-0.528193,-1.238089}, + {0.262891,0.578832}, + {0.066590,0.188433}, + {-0.745635,-0.018847}, + {-0.116912,-0.514034}, + {0.597006,0.677949}, + {0.107517,-0.406065}, + {1.015423,0.001044}, + {-0.197476,0.574557}, + {-0.248416,-0.193462}, + {0.473342,-1.017108}, + {0.137976,1.024174}, + {-0.210346,0.751566}, + {-1.015057,-0.473646}, + {-0.595567,0.801209}, + {0.796281,0.545814}, + {-0.856927,-0.309617}, + {0.591179,1.361440}, + {0.157283,-0.776932}, + {0.393443,1.025215}, + {0.537778,0.697904}, + {2.219707,0.499801}, + {1.273309,-0.828332}, + {-0.982928,0.949413}, + {-1.153902,0.670467}, + {-0.156032,-0.994523}, + {0.821935,-0.378448}, + {0.260809,0.087339}, + {0.216860,-0.601138}, + {-0.882410,-0.227433}, + {-0.440866,-0.094405}, + {-0.074585,0.039917}, + {-0.737009,1.217088}, + {-0.268090,0.493822}, + {-0.066510,-0.570724}, + {-0.203579,0.757423}, + {0.062591,-0.452128}, + {0.507822,1.130258}, + {-1.135255,-0.393007}, + {0.740321,0.411285}, + {-0.402801,-0.390182}, + {0.794407,0.970310}, + {0.566977,0.605520}, + {-0.537209,0.639380}, + {-0.426697,0.138911}, + {-0.087417,0.452920}, + {-1.152861,-0.321958}, + {-0.284884,0.639191}, + {0.145500,0.907847}, + {0.982621,0.367939}, + {-0.195191,1.137989}, + {0.211046,-1.239543}, + {0.562427,-0.534005}, + {0.830928,-0.588515}, + {0.651664,-0.531934}, + {-0.056867,0.384091}, + {-0.589129,1.364900}, + {-0.141771,-0.114847}, + {-0.411185,0.073030}, + {-0.265763,0.272064}, + {0.882316,0.793624}, + {-0.160386,0.002500}, + {-0.235607,-0.567823}, + {-1.210585,0.206751}, + {0.817503,0.330202}, + {-0.162811,-1.417884}, + {0.592217,0.010516}, + {1.662363,-0.402841}, + {-0.446189,0.501595}, + {-0.729150,-0.238869}, + {-0.452834,0.078506}, + {-1.518996,-0.427439}, + {-0.266874,0.101362}, + {0.531735,-0.547254}, + {-0.965587,0.011378}, + {-0.298296,-0.096297}, + {-0.149287,0.531172}, + {0.448779,-0.448307}, + {1.047356,-0.315960}, + {1.247794,0.506753}, + {0.590511,0.472349}, + {0.121279,-0.433674}, + {-0.114362,0.767422}, + {1.581429,0.955828}, + {1.476868,-0.288333}, + {-0.556583,-1.164155}, + {-0.059431,-1.160055}, + {0.634128,1.002689}, + {-0.575933,0.033633}, + {1.081099,1.385344}, + {-1.422736,0.075505}, + {1.046288,0.401673}, + {0.435929,-0.472107}, + {-0.206122,0.348224}, + {-0.412777,-0.109916}, + {0.121895,-0.581462}, + {-0.133105,0.264961}, + {-0.850482,-0.072401}, + {-0.577871,0.376519}, + {-1.388756,-0.023759}, + {0.779804,-0.186311}, + {-0.620828,-0.118957}, + {0.932679,0.434943}, + {0.633370,0.592508}, + {1.134259,0.028486}, + {0.799487,0.223794}, + {-0.347314,-0.170474}, + {0.539087,-0.221093}, + {-0.820533,0.307851}, + {-0.717160,0.017505}, + {0.542587,-1.162436}, + {-0.624600,0.801725}, + {1.352536,-0.143812}, + {-0.796545,-0.900611}, + {-0.356700,-0.350123}, + {0.038018,0.541666}, + {0.289386,0.401983}, + {-0.137301,1.430812}, + {1.503273,0.402538}, + {-0.492407,-0.424006}, + {0.932498,-0.226829}, + {0.093021,0.081391}, + {-0.093971,-0.658882}, + {-0.284706,-0.026044}, + {-0.226983,0.526229}, + {0.029324,0.041975}, + {0.873120,0.151935}, + {-0.393476,-0.848702}, + {1.838695,-0.084288}, + {-0.074042,1.079671}, + {0.039939,-1.111425}, + {0.669271,2.216002}, + {-0.589368,-0.446797}, + {-0.465512,0.085837}, + {0.651261,0.403519}, + {0.218905,-0.766309}, + {-0.128001,0.073902}, + {-0.272830,-0.432066}, + {0.519152,-0.589446}, + {-0.311524,0.233018}, + {-0.545692,-0.664651}, + {-1.380502,0.757145}, + {-0.000180,-0.339163}, + {0.446891,0.438011}, + {0.454009,-0.094370}, + {-1.035878,0.187205}, + {-0.896572,0.237276}, + {0.382598,0.442667}, + {-2.504186,-0.537285}, + {0.099216,0.970556}, + {-0.381212,-0.168048}, + {0.554364,-0.100494}, + {-0.269872,-1.498621}, + {-0.494833,-0.343613}, + {0.449499,0.124923}, + {0.027846,-0.151862}, + {-0.115574,-0.391918}, + {0.431950,-0.632974}, + {-0.223079,0.433815}, + {-0.360470,0.230335}, + {-0.351935,-0.652477}, + {-0.699202,-0.709860}, + {0.165994,1.156386}, + {0.946215,-0.422976}, + {-0.694515,0.460667}, + {0.163665,-0.096615}, + {-0.011231,0.132682}, + {1.105695,0.245389}, + {1.070530,0.039658}, + {-0.393505,-0.942814}, + {0.695178,-0.279964}, + {0.373143,-0.153469}, + {0.068343,-0.246175}, + {0.255959,0.802372}, + {-0.561208,0.096934}, + {-0.520615,-0.044160}, + {0.829240,-0.282919}, + {0.617384,-0.417490}, + {1.900495,1.234182}, + {-1.341464,1.226474}, + {-0.168441,-0.813023}, + {1.015085,-0.464638}, + {0.369413,-0.066272}, + {-0.239524,0.683590}, + {0.357866,-0.112409}, + {1.009900,1.254497}, + {0.068589,0.356761}, + {-0.438932,-0.304929}, + {-0.012575,-0.341361}, + {0.299906,-0.036658}, + {0.404167,-0.128515}, + {0.366136,-1.307424}, + {-0.598692,-1.008058}, + {0.110613,-0.159653}, + {1.201734,0.376235}, + {-0.704852,0.106275}, + {0.007635,0.082348}, + {-0.767279,0.145814}, + {-2.046550,1.123715}, + {-0.006254,-0.772897}, + {1.860613,0.657821}, + {-1.010233,0.378664}, + {0.049775,0.410985}, + {-1.426361,0.659661}, + {0.362923,0.949449}, + {0.169229,-0.433502}, + {1.588609,-1.429715}, + {1.714049,1.762603}, + {0.280914,0.315189}, + {-0.366100,0.687960}, + {-0.017839,0.001341}, + {-0.011156,-0.946371}, + {0.605485,-0.901263}, + {1.083968,-1.642610}, + {0.689493,1.137977}, + {-1.346342,-1.228991}, + {0.441885,0.428678}, + {-0.300121,-0.242661}, + {0.151982,0.516324}, + {1.165886,0.321775}, + {-0.428105,0.187019}, + {-1.004687,0.294742}, + {0.338772,1.213508}, + {0.988679,-0.037867}, + {-0.224368,0.155973}, + {0.141559,0.186316}, + {-0.644438,0.395989}, + {-0.199866,-0.523264}, + {-0.107300,-0.461294}, + {0.358698,-0.649953}, + {-0.634770,-0.312915}, + {-0.564734,-0.715844}, + {0.255026,-1.108371}, + {-0.086293,0.312637}, + {0.814938,-0.283814}, + {1.229763,0.128464}, + {0.227974,-0.418647}, + {-0.120043,-0.684067}, + {0.077666,-0.085758}, + {-0.050780,-0.670323}, + {0.136626,0.813804}, + {0.594956,-0.407936}, + {0.955985,-0.191253}, + {0.489552,-1.486926}, + {0.577579,-0.486322}, + {0.562717,-0.751664}, + {0.002459,0.263571}, + {0.288905,-0.878478}, + {-0.464409,-0.538675}, + {0.286060,0.412672}, + {-0.181148,0.381556}, + {0.151361,0.358454}, + {-0.078488,0.251609}, + {0.773414,-0.739208}, + {0.691577,-0.694201}, + {-1.293390,-0.509235}, + {1.146156,-0.653543}, + {-0.242636,-0.801005}, + {0.353931,-0.135868}, + {-0.243086,-0.439001}, + {0.354013,-0.233653}, + {-0.277764,-0.677296}, + {0.473043,0.038362}, + {-0.176500,0.264359}, + {-0.625575,0.366112}, + {0.202867,0.941900}, + {-0.326032,0.671700}, + {-1.046037,-0.687290}, + {-0.868275,-0.007581}, + {-0.570060,0.286439}, + {0.713059,0.210833}, + {-1.294165,-0.028527}, + {0.071361,0.847772}, + {0.508287,0.046283}, + {0.058998,-0.528609}, + {-0.568115,1.051018}, + {0.922293,-0.377449}, + {0.202094,0.031911}, + {-0.114554,-0.415825}, + {-0.776175,-0.804922}, + {-0.057279,-0.584848}, + {0.412935,0.618731}, + {-1.092835,0.486985}, + {-0.678552,0.788882}, + {-0.968375,0.329940}, + {-0.714789,-0.149820}, + {-0.384156,0.175588}, + {0.730323,-0.459545}, + {-0.374056,-0.030715}, + {-0.530865,1.744913}, + {0.317942,0.712183}, + {0.514842,-1.521713}, + {-1.982352,0.917451}, + {0.533069,-0.184669}, + {-0.047735,-0.546721}, + {-0.084978,0.164704}, + {-0.713723,0.221991}, + {0.082505,-0.468486}, + {-0.100827,0.472135}, + {-0.666553,0.018597}, + {0.287429,-0.329748}, + {-1.436239,1.330035}, + {0.290806,-0.769263}, + {-0.048715,0.566687}, + {-0.968640,-0.211849}, + {0.088714,-1.498366}, + {-0.081821,-1.526247}, + {-0.569582,0.589569}, + {-0.581721,-0.848599}, + {-0.006144,-0.254501}, + {-0.374622,1.266927}, + {-0.426722,0.039232}, + {-0.613330,0.408639}, + {0.242699,-0.420023}, + {-0.511846,-0.344112}, + {0.055041,-0.785869}, + {0.817784,0.414807}, + {0.327502,-0.140078}, + {-0.177410,0.254219}, + {-0.697158,1.041201}, + {0.443662,0.437433}, + {0.255286,1.735288}, + {-0.986974,0.995444}, + {-0.170297,0.934111}, + {0.016505,-0.449689}, + {0.074375,0.925671}, + {-0.264038,-0.993178}, + {0.394263,0.428509}, + {0.275369,-0.148148}, + {-0.026461,0.786728}, + {0.219694,-0.715724}, + {-0.198181,-0.337653}, + {-0.046106,1.077969}, + {-0.427274,-1.648299}, + {0.916379,0.354817}, + {-0.495159,0.025080}, + {0.900671,-0.716446}, + {-0.255983,0.933249}, + {0.849832,-0.023818}, + {0.848812,1.222279}, + {0.762640,-0.407851}, + {-1.113535,-0.693755}, + {0.853063,-0.222685}, + {0.182071,-0.562988}, + {0.452813,-0.071797}, + {-1.401647,0.298240}, + {-1.096633,-0.276216}, + {-0.470637,-1.218317}, + {0.061808,0.397691}, + {0.600333,-0.767871}, + {1.008250,0.000708}, + {-0.647290,0.306240}, + {-0.398649,0.249797}, + {-1.305586,-0.172789}, + {0.385940,-1.320990}, + {0.758806,0.901173}, + {-0.002028,-0.687838}, + {-0.619773,-0.519246}, + {0.850480,-0.003780}, + {-0.327611,1.357023}, + {0.407292,0.562773}, + {-0.053213,-0.769666}, + {1.106032,1.282982}, + {-0.673619,1.289760}, + {0.476732,-0.611785}, + {0.152022,-1.680944}, + {-0.649479,-0.291411}, + {-0.012972,-0.162121}, + {-0.691724,0.407729}, + {0.236190,-1.267413}, + {0.533790,0.419325}, + {-0.018652,0.266647}, + {0.229770,0.165313}, + {-0.558823,-0.887105}, + {-0.764080,0.628785}, + {0.355465,0.190894}, + {-1.031620,0.424156}, + {0.210209,-0.511032}, + {2.231847,-1.271046}, + {0.495758,-0.561719}, + {-0.007179,-0.289322}, + {0.208132,1.637787}, + {-0.761436,-0.158279}, + {-1.584498,-0.324741}, + {0.085113,0.686596}, + {-0.430017,0.361140}, + {0.205829,-0.606992}, + {0.307451,0.417509}, + {-0.305665,0.631657}, + {-0.401597,-0.758367}, + {-0.231825,-0.733147}, + {0.413582,0.999199}, + {-0.017343,-0.416519}, + {-0.165102,-1.228027}, + {1.079916,0.834003}, + {-0.032758,1.090964}, + {0.682886,0.223947}, + {-0.125567,0.406849}, + {-0.291070,0.319598}, + {-0.433261,1.411476}, + {-0.521844,0.077749}, + {-1.622536,0.199245}, + {-1.152493,-1.236599}, + {0.010262,-1.143242}, + {0.590426,0.129957}, + {0.710855,-0.106919}, + {0.453857,-0.988619}, + {-0.904005,-0.503640}, + {0.589253,-0.486321}, + {-0.430470,-0.027916}, + {-0.820770,-0.751695}, + {-0.282278,-0.038594}, + {0.864998,0.097233}, + {0.111612,-0.288777}, + {-0.028031,-0.269425}, + {0.431845,0.101275}, + {-0.339818,-0.152321}, + {0.921835,0.289830}, + {-0.671086,-0.501673}, + {0.247329,0.183999}, + {0.567859,-0.307398}, + {0.116284,0.435589}, + {0.203286,0.041931}, + {0.492580,-1.168513}, + {0.661239,0.504958}, + {0.626179,0.315147}, + {1.241463,-0.126592}, + {-0.242149,0.706826}, + {0.022340,-1.150953}, + {-0.121594,0.286725}, + {-0.759044,0.336943}, + {1.203657,-0.225805}, + {-0.307556,-0.613049}, + {0.760114,-0.923164}, + {-1.293027,0.195280}, + {1.015077,0.098072}, + {-2.074471,-0.189545}, + {0.841240,0.955406}, + {-0.178337,0.721980}, + {1.160489,0.003816}, + {-0.384566,2.620896}, + {0.704705,0.063137}, + {0.548336,0.066192}, + {0.190808,-0.012015}, + {0.553649,0.329412}, + {-0.320558,0.795527}, + {-0.615417,0.909293}, + {-1.246752,-0.698925}, + {0.549175,0.281020}, + {-0.778784,-1.430814}, + {0.806743,0.036949}, + {0.477405,-0.736326}, + {-0.702940,-0.929653}, + {0.151960,0.582314}, + {0.865540,-0.423882}, + {0.491950,0.963153}, + {0.330508,0.053934}, + {0.464252,0.827913}, + {0.192361,-0.235847}, + {0.816402,-0.115001}, + {0.092131,-0.660784}, + {0.174107,0.285417}, + {-0.755223,0.514173}, + {0.364767,-0.792043}, + {-0.562086,-0.217651}, + {0.353453,0.348443}, + {0.585457,1.370006}, + {0.984197,-0.178664}, + {-0.366706,-0.786270}, + {1.414700,-0.134770}, + {0.941644,0.284337}, + {-0.455753,1.036933}, + {1.382049,0.541054}, + {0.575756,-0.046144}, + {-0.051649,0.048517}, + {-1.119540,0.541357}, + {0.273349,1.070178}, + {-0.456227,-0.374803}, + {-0.426392,-0.882598}, + {-0.085007,1.118462}, + {-0.265127,0.515600}, + {0.769586,-0.251247}, + {-0.458924,1.727463}, + {0.661363,0.210307}, + {0.953185,0.310892}, + {0.165745,-0.249229}, + {0.003256,-1.461112}, + {-1.295068,0.895661}, + {0.505398,-0.514159}, + {-0.794349,-0.483016}, + {-0.156867,-1.192899}, + {0.540678,0.515770}, + {-0.124202,-0.030591}, + {-0.391160,1.843647}, + {0.495854,0.368012}, + {0.973258,-0.316386}, + {-0.194668,-0.132074}, + {-0.155372,-0.897061}, + {0.231087,-0.105997}, + {-0.153340,-0.294455}, + {0.796845,0.174109}, + {0.603647,0.542966}, + {0.254563,0.674866}, + {-0.956172,-0.048158}, + {-0.530818,-0.801843}, + {-1.026113,-0.351077}, + {0.523780,0.415202}, + {-0.948912,-1.572310}, + {0.410020,0.659503}, + {-0.701486,-0.147504}, + {2.688922,0.358403}, + {1.560465,-0.433628}, + {-0.496547,-0.211502}, + {-0.124965,-0.391226}, + {-0.533224,0.503166}, + {-0.321520,-0.572785}, + {1.258924,0.163907}, + {0.151190,-0.084062}, + {0.226057,-0.056905}, + {0.587172,-0.471113}, + {-0.695980,-0.163141}, + {-1.237538,-0.208643}, + {0.998500,0.955563}, + {-0.179606,0.559009}, + {0.137764,-0.393149}, + {0.502345,-0.054011}, + {-0.904479,0.141850}, + {-0.350247,-0.211378}, + {0.404017,-0.839708}, + {1.263962,0.630874}, + {-0.135289,-2.442988}, + {0.442130,-0.830587}, + {0.122658,0.023062}, + {0.883724,0.665128}, + {-0.178230,0.306886}, + {-0.468211,0.071836}, + {0.246586,0.267636}, + {-0.557471,-0.275384}, + {0.580532,-0.339634}, + {0.229230,0.098588}, + {-0.037226,0.048941}, + {0.429143,-0.409864}, + {-0.994136,0.254552}, + {1.166575,0.976509}, + {0.851270,-0.625880}, + {-0.345877,0.458113}, + {1.414551,-0.046154}, + {-0.380014,0.085284}, + {-0.464670,0.922754}, + {0.372413,-0.292998}, + {0.047303,-0.678625}, + {0.754110,-0.077518}, + {-0.818388,-0.489265}, + {0.374833,0.280108}, + {0.074119,-1.470670}, + {-0.635899,-0.637640}, + {0.921722,0.985314}, + {-1.420950,0.022021}, + {0.627703,0.569002}, + {0.340334,0.147938}, + {0.400352,0.190057}, + {-1.088817,0.050628}, + {0.137021,0.484178}, + {0.078217,0.350442}, + {0.294682,0.070688}, + {-0.085588,0.602284}, + {0.673964,-0.173427}, + {-0.235137,-0.583674}, + {-0.707102,0.052630}, + {0.474050,-1.693641}, + {1.003813,0.543324}, + {0.628591,-0.050070}, + {-0.249527,0.767586}, + {-1.879195,-0.452537}, + {0.396132,-0.415229}, + {-0.028199,0.551825}, + {0.385329,-0.220834}, + {1.324679,-0.312798}, + {-0.642863,-0.825135}, + {-0.004710,-0.058157}, + {-0.847162,0.856134}, + {-0.740614,-0.863084}, + {-1.158400,0.973958}, + {-1.671737,-0.563632}, + {-0.650321,-0.235563}, + {0.598594,-0.545525}, + {0.526469,0.149947}, + {-0.237268,0.583359}, + {0.423311,-0.217139}, + {0.379071,1.034865}, + {-1.758812,0.686033}, + {-0.185959,0.643266}, + {0.032531,0.661944}, + {-0.298139,-0.817098}, + {-1.599706,-0.313605}, + {0.426141,-0.444764}, + {-1.006136,-0.819221}, + {-0.706618,-0.317805}, + {0.141126,1.084697}, + {0.623824,0.023016}, + {-1.046610,0.015300}, + {0.745230,0.751430}, + {-1.319946,-0.564289}, + {-0.604642,0.954636}, + {-0.483640,1.126604}, + {-0.757284,-0.011440}, + {-0.387955,-0.304309}, + {0.153010,2.368292}, + {0.914144,-1.029997}, + {-0.299668,-0.611878}, + {0.525482,-0.659581}, + {0.420515,0.491139}, + {-0.366100,0.268333}, + {0.341777,-1.103398}, + {-0.323677,0.907073}, + {-1.121212,0.392582}, + {0.633364,0.164803}, + {0.338245,-0.443073}, + {-0.135408,-0.702552}, + {-1.008789,-0.011260}, + {-0.781123,-0.685846}, + {0.776429,-0.662386}, + {1.057167,0.352887}, + {-0.597591,0.229540}, + {0.084232,1.119583}, + {-0.285929,0.236433}, + {0.186841,0.460782}, + {-0.172005,-0.130474}, + {0.310647,0.559606}, + {-0.119430,0.878673}, + {-1.612776,0.477573}, + {-0.154730,-0.506361}, + {-0.083025,-1.341480}, + {-0.590808,-0.873065}, + {0.237921,0.451140}, + {-1.029581,-0.416044}, + {-0.719467,-1.896297}, + {-0.051499,0.067354}, + {0.889375,-0.684079}, + {-0.718765,0.727295}, + {-0.536690,-0.605252}, + {-0.739059,-0.585248}, + {0.344357,0.106056}, + {-0.829777,0.728094}, + {-0.283713,0.261390}, + {0.152151,0.078054}, + {0.567021,0.126294}, + {0.291900,0.562743}, + {1.059085,0.084687}, + {-0.551331,-1.234712}, + {-0.588794,-1.091670}, + {-1.691073,-0.118561}, + {1.420551,-1.631329}, + {0.205528,-0.641568}, + {0.162794,0.566978}, + {0.766135,-0.410851}, + {-0.798597,0.988584}, + {-0.718769,-0.992680}, + {0.344092,0.608391}, + {0.292893,0.732026}, + {0.056027,-0.138066}, + {0.429755,0.079029}, + {0.187873,0.660457}, + {-0.517005,0.344139}, + {-0.147412,-0.311869}, + {-0.426811,-0.332282}, + {1.157440,-0.638019}, + {0.183905,-0.237103}, + {-0.779848,0.107454}, + {-0.451815,-0.023654}, + {-0.631830,0.052062}, + {-0.010302,0.265023}, + {-0.740212,0.667259}, + {-0.327306,-0.562585}, + {-0.036460,-0.926800}, + {-0.695698,0.585635}, + {0.506878,0.691465}, + {0.758726,0.102093}, + {0.084728,0.503180}, + {1.401625,0.519015}, + {-0.631581,-0.606695}, + {0.803128,-0.862507}, + {0.940896,0.866730}, + {0.194009,1.652032}, + {0.144810,-0.487873}, + {-0.461080,-0.403805}, + {0.002382,0.136163}, + {0.075381,-0.322951}, + {-0.966995,0.269808}, + {-0.030479,-0.126750}, + {-0.149463,0.291122}, + {1.059634,-0.087343}, + {-0.579570,0.637704}, + {-0.747178,-0.468939}, + {0.647099,-0.724797}, + {-0.223191,0.924383}, + {-0.337221,-0.601146}, + {-0.515588,0.209382}, + {-0.439052,-0.285641}, + {-0.461382,0.405431}, + {-0.342314,-0.077113}, + {-0.631056,-0.415190}, + {0.238351,-0.386171}, + {-0.862323,0.642213}, + {0.023490,1.420643}, + {-0.875054,-0.335857}, + {-0.501911,0.198525}, + {-0.610229,-0.615875}, + {-0.798574,0.715166}, + {0.822130,-1.270475}, + {-1.244082,0.455988}, + {1.012773,-0.052447}, + {1.371291,0.428342}, + {0.352000,-0.742200}, + {-0.239479,-0.204546}, + {-0.894340,-0.160308}, + {0.011754,-0.047223}, + {-0.665009,-1.202901}, + {-0.774045,-1.477797}, + {0.298235,0.642437}, + {0.281567,-0.363596}, + {-0.359115,0.641628}, + {0.457527,0.395590}, + {-0.613016,0.686037}, + {0.366476,-1.001394}, + {-1.256980,-0.267237}, + {-0.929750,0.866740}, + {0.450983,-0.179572}, + {-0.783167,0.315364}, + {0.373729,-0.263585}, + {-0.829264,1.092197}, + {-0.294844,-1.307715}, + {-0.382714,0.271065}, + {0.432171,1.321070}, + {1.193662,-0.601561}, + {0.441481,1.078067}, + {0.816584,0.272961}, + {0.550523,-0.150661}, + {0.184214,-0.219220}, + {-0.009063,-0.442284}, + {1.646675,-0.741609}, + {1.016200,0.837222}, + {-0.793906,-0.222885}, + {0.919271,0.064883}, + {-1.356202,0.423254}, + {0.049124,-0.191414}, + {-0.195965,0.184440}, + {1.121060,1.056448}, + {-1.033376,-0.124441}, + {0.347735,1.195392}, + {0.503386,0.384467}, + {0.000622,0.057254}, + {0.170387,-0.558950}, + {0.128132,0.079457}, + {1.004037,-0.526779}, + {0.385914,0.909700}, + {1.335021,-1.678956}, + {-0.288577,-0.895513}, + {0.565198,-0.882130}, + {0.225851,0.962253}, + {0.879317,-0.347095}, + {0.176626,0.994786}, + {-0.866639,-0.349720}, + {-0.671101,-0.515104}, + {-0.485501,0.483706}, + {-0.618060,0.335038}, + {0.041503,-0.588110}, + {0.111759,0.143271}, + {0.462091,-1.215689}, + {-0.745533,0.359722}, + {-0.258587,-0.704901}, + {0.274778,0.923238}, + {-0.004584,-0.433904}, + {-0.110584,0.522650}, + {0.310410,-0.005530}, + {-0.937176,-1.562305}, + {-0.827198,0.289808}, + {-0.698794,-2.184667}, + {-0.330698,-0.129384}, + {1.282239,0.020580}, + {0.367543,0.233161}, + {0.065772,0.245385}, + {-1.368919,-0.232512}, + {-0.022110,-0.434683}, + {0.989342,2.850177}, + {0.301916,-0.504838}, + {-0.199269,0.274472}, + {0.050557,-0.762571}, + {-0.439144,-1.131543}, + {-1.080251,-0.382884}, + {0.966876,-2.108684}, + {-0.843520,-0.663706}, + {0.898827,0.695593}, + {1.141696,1.743007}, + {-1.209097,0.920291}, + {-0.133004,-0.591750}, + {0.230189,-0.024491}, + {0.267833,-0.097969}, + {0.945771,-0.620059}, + {-1.927322,0.029121}, + {0.624278,-1.539738}, + {0.038578,0.956436}, + {-0.340126,0.630304}, + {0.615450,0.090583}, + {0.546216,-0.444248}, + {1.103206,-0.220818}, + {0.249552,-1.338686}, + {0.137988,-0.524542}, + {0.535324,-0.053403}, + {-0.312144,0.754749}, + {-0.305128,-0.570806}, + {-0.270710,-0.431734}, + {1.075527,-0.517887}, + {0.925849,-0.402164}, + {0.780606,-0.094631}, + {0.304430,-0.321345}, + {-2.161699,0.828282}, + {-0.074158,-0.677161}, + {-0.063345,-1.326582}, + {-0.309826,0.355096}, + {-0.276573,-0.413940}, + {0.647672,0.302474}, + {-0.232098,-1.147781}, + {0.120684,-1.621992}, + {0.955412,0.475249}, + {-1.220155,-0.114060}, + {1.336061,0.110965}, + {-0.643678,-0.340022}, + {-0.275077,-0.365716}, + {0.534379,-0.975696}, + {-1.015498,-0.567058}, + {-0.064751,-0.046544}, + {1.134877,-0.470992}, + {-1.008269,0.759255}, + {-0.144860,0.949311}, + {-0.732892,1.047155}, + {-1.535131,-0.961362}, + {-0.269558,0.444843}, + {0.059658,-0.187720}, + {0.035190,-0.221091}, + {-0.281704,-0.358197}, + {1.022722,0.075790}, + {-1.083448,-0.575743}, + {-1.302319,0.027091}, + {0.650458,1.349900}, + {-1.899117,1.012783}, + {0.181135,0.688259}, + {-0.202816,0.372898}, + {0.022705,1.006927}, + {0.407585,-0.837289}, + {0.002035,0.352033}, + {-0.356021,0.346572}, + {-0.617595,0.786143}, + {0.239147,-0.279550}, + {-0.088149,0.102956}, + {-0.145992,0.070007}, + {0.061313,-0.731353}, + {-0.584911,-0.334126}, + {-1.203326,0.593685}, + {-0.269043,-0.369218}, + {0.521335,-0.180848}, + {0.144528,0.438304}, + {0.735844,-0.087415}, + {0.843519,0.404185}, + {0.253477,0.233027}, + {0.286579,-0.892798}, + {0.017010,1.496329}, + {-0.282048,-0.432474}, + {-0.831781,-0.766073}, + {-0.339801,0.157388}, + {0.117625,-0.661367}, + {-0.133374,-0.349166}, + {-0.700496,-0.598886}, + {1.062019,-0.225486}, + {-0.844149,1.129804}, + {0.879032,0.843744}, + {-0.329666,0.330986}, + {0.186070,-0.855283}, + {-0.324321,-1.583881}, + {1.541431,-0.622636}, + {0.819195,-0.182278}, + {0.449811,-0.132524}, + {-0.888292,-1.515782}, + {-1.001516,-0.830254}, + {0.250502,-0.344122}, + {-0.187613,1.197694}, + {-0.529563,1.498822}, + {-0.076462,-0.133383}, + {0.650433,0.946105}, + {-0.483935,0.181802}, + {-0.723391,-0.925543}, + {-0.431870,-0.262836}, + {-0.422439,0.651529}, + {-0.782266,0.681568}, + {0.562754,-0.374426}, + {0.519622,0.043415}, + {-0.801116,1.075381}, + {-0.799244,-1.077313}, + {0.540276,1.027038}, + {-0.894727,-0.874882}, + {-0.749377,1.018981}, + {0.184097,-0.111914}, + {0.042289,-0.830370}, + {1.791222,-0.588920}, + {-0.047891,0.031348}, + {0.043701,-0.440535}, + {-0.840151,-0.568261}, + {0.323255,0.787932}, + {1.107241,0.054776}, + {0.060801,-0.856247}, + {-0.813509,0.705567}, + {-0.791245,1.459674}, + {-0.014035,-0.216140}, + {0.387915,0.037240}, + {0.642452,-0.129442}, + {-1.843821,-0.114364}, + {-0.035832,0.415178}, + {0.767540,0.263665}, + {-0.652285,-0.081054}, + {-1.285872,0.969226}, + {0.618911,0.255848}, + {-0.807479,0.457430}, + {1.064158,0.201941}, + {0.880563,0.083746}, + {-0.305545,1.351159}, + {0.904389,-0.245280}, + {-0.217445,0.025212}, + {-0.836006,-0.776473}, + {0.738829,1.044716}, + {0.284688,-0.270552}, + {1.085086,-0.533687}, + {0.671634,1.461351}, + {0.644988,-0.881924}, + {-0.894529,0.426442}, + {0.562243,0.029641}, + {0.404564,0.410895}, + {0.425106,-0.487737}, + {-0.640461,-0.176507}, + {-0.113150,-0.170049}, + {0.212635,-0.218543}, + {0.269008,1.255394}, + {0.432785,0.488759}, + {0.513129,0.005448}, + {0.099545,0.578849}, + {0.086904,-0.186066}, + {-1.555150,0.851275}, + {-0.032900,0.503340}, + {1.149826,0.331512}, + {0.073811,0.159585}, + {-0.223626,0.427643}, + {1.261585,0.418598}, + {0.601685,-0.525800}, + {-0.486987,-0.199185}, + {-0.059233,0.227470}, + {0.226861,0.459247}, + {-0.341422,-1.927231}, + {-0.171239,0.113076}, + {0.078549,1.096510}, + {-0.338355,-1.369953}, + {0.159905,-0.691937}, + {-0.307114,0.783536}, + {-0.566867,0.107976}, + {0.511947,-0.433910}, + {0.691441,-0.214146}, + {-0.603745,0.410150}, + {0.628406,1.315388}, + {0.785402,-0.016113}, + {0.897580,1.142371}, + {-0.523238,0.503762}, + {-1.709664,-0.720023}, + {0.458547,-0.008885}, + {-0.334689,-0.277679}, + {0.489018,-0.845080}, + {0.523348,0.669807}, + {-0.078580,0.679453}, + {0.434669,1.223368}, + {-0.046575,1.365787}, + {-0.280968,-0.687172}, + {-1.099810,0.666500}, + {-0.860152,-0.227991}, + {-0.330220,0.063645}, + {-0.469986,-0.845073}, + {-0.674068,1.048877}, + {0.455515,0.818142}, + {0.849858,-0.564687}, + {0.059095,-0.035666}, + {-0.223894,0.001953}, + {-0.067447,-1.792125}, + {1.605312,0.096682}, + {-1.475052,-0.104396}, + {-0.360386,-0.579824}, + {0.955123,1.157321}, + {-1.251963,0.038931}, + {0.370436,-0.992312}, + {1.371997,-0.487094}, + {0.015502,-0.447989}, + {-0.022840,-0.149928}, + {-0.664625,0.831535}, + {0.757109,0.066880}, + {-0.632931,-0.921457}, + {-0.231963,-0.193233}, + {0.777090,0.166369}, + {0.609395,-0.027552}, + {0.139106,0.541898}, + {0.942118,0.587904}, + {0.251157,-0.133831}, + {0.487019,0.189802}, + {0.457665,0.362136}, + {-0.424465,-1.249760}, + {0.581103,-0.376516}, + {0.510419,-0.590129}, + {1.037473,0.371550}, + {-0.466737,-1.004333}, + {-0.011938,0.537880}, + {0.547161,1.035422}, + {0.606423,-0.516887}, + {0.056961,1.039645}, + {0.477078,-0.559180}, + {-0.254626,-1.547132}, + {-1.133833,0.334869}, + {0.822161,0.621644}, + {-0.062360,-1.517223}, + {-0.703293,-0.420242}, + {0.317995,-0.825593}, + {0.736898,-0.336708}, + {0.771707,-0.083937}, + {-0.213908,0.357054}, + {1.824059,0.566277}, + {-0.196467,1.192675}, + {0.798056,0.142119}, + {-1.061991,0.018563}, + {-0.560025,0.370005}, + {0.454753,-0.180904}, + {-0.998511,0.325013}, + {-0.821580,-0.926141}, + {0.234012,-1.400391}, + {-0.674742,-0.704986}, + {-0.291769,1.030446}, + {-0.034057,0.722172}, + {0.696109,-0.239704}, + {0.209895,-1.576507}, + {-0.157850,0.127201}, + {0.466905,0.165965}, + {0.723092,-0.550305}, + {0.061567,0.078169}, + {-0.065939,0.569606}, + {-0.133807,0.770113}, + {0.393001,0.504942}, + {0.938111,-0.161913}, + {-0.597112,0.176459}, + {-0.258463,0.179758}, + {1.377765,-0.886022}, + {0.438264,0.736861}, + {-1.525573,0.999277}, + {-0.620013,0.193526}, + {0.575873,-1.214428}, + {-0.126903,0.386866}, + {0.530483,0.213737}, + {0.088473,-0.115534}, + {-0.212839,0.385450}, + {-1.321082,0.296746}, + {0.250801,0.116243}, + {-0.419752,0.580050}, + {0.941619,-1.096349}, + {0.016156,-0.012206}, + {0.223729,-0.513092}, + {0.431069,-0.090005}, + {-0.564370,0.121675}, + {0.207579,0.543705}, + {-0.569522,0.970283}, + {0.817061,0.419924}, + {-0.249714,0.263547}, + {0.715514,0.375579}, + {0.601764,0.078943}, + {0.912619,-0.785623}, + {-0.761932,0.233378}, + {0.345236,-0.083941}, + {0.256879,0.092192}, + {1.596566,0.978531}, + {0.233048,0.142618}, + {0.613216,-0.032437}, + {0.829523,-0.330173}, + {0.230123,-0.145399}, + {1.458398,1.026591}, + {0.430070,0.208748}, + {0.266168,0.118494}, + {0.539393,-0.277606}, + {-0.413476,-0.313748}, + {-0.369556,0.091205}, + {-0.326428,-0.843489}, + {0.876747,0.200702}, + {-0.649832,0.677572}, + {-0.132473,-0.408711}, + {-0.189154,-1.243630}, + {0.300237,-0.606909}, + {-0.727253,-1.333235}, + {0.491897,0.548159}, + {0.129355,1.663229}, + {-0.845514,-0.240228}, + {-0.375039,-0.919784}, + {0.911949,-0.218323}, + {0.235257,0.391849}, + {-0.246544,0.164098}, + {-0.231634,0.840406}, + {0.469351,-0.182122}, + {-1.743900,0.992432}, + {0.852607,-0.539289}, + {0.795267,-0.387124}, + {-0.185710,1.359292}, + {0.094303,0.079949}, + {0.642032,0.393244}, + {-0.155963,0.192307}, + {-0.348090,-0.970893}, + {0.392175,0.779526}, + {0.325050,-1.394403}, + {-0.089091,-0.577495}, + {-0.483524,0.167122}, + {-0.942847,0.788769}, + {-0.766730,-0.156880}, + {0.105378,0.028165}, + {-0.514349,0.215037}, + {0.561907,-0.681160}, + {0.734924,0.641628}, + {-0.145145,-0.683320}, + {0.393664,0.363491}, + {-0.681003,0.495072}, + {0.548521,-0.587928}, + {-0.058075,0.565056}, + {-0.107237,1.111712}, + {0.172436,-0.254398}, + {0.227540,-0.704157}, + {0.265045,-0.730209}, + {-0.869922,-0.474264}, + {-0.424165,0.721119}, + {-1.396401,-0.989424}, + {0.221913,-0.297296}, + {0.286758,-1.498876}, + {0.359150,0.152013}, + {0.112532,0.792481}, + {-0.518915,0.573917}, + {0.223169,-0.581940}, + {0.093260,-0.638841}, + {0.366104,0.042771}, + {0.417517,0.376103}, + {0.991679,-0.041029}, + {-0.060651,-0.884169}, + {-1.391370,0.124718}, + {1.114556,1.972558}, + {1.020741,-0.667193}, + {-0.025144,0.571881}, + {0.669084,-0.756397}, + {0.439585,-0.056732}, + {0.015199,0.202094}, + {0.566927,-0.613071}, + {-0.253624,0.616822}, + {-1.725917,0.187096}, + {-0.845198,1.593293}, + {-0.490629,-0.100485}, + {0.571619,-0.604498}, + {-0.018727,-0.145532}, + {-0.003540,0.086011}, + {-0.606243,-0.821588}, + {0.783794,0.540017}, + {1.102898,-0.136964}, + {0.216892,1.340393}, + {0.342599,-1.539241}, + {-0.575259,0.204180}, + {-1.488872,0.715385}, + {-0.221673,-0.742431}, + {-0.113355,0.020189}, + {0.213762,-0.406233}, + {-0.170202,-1.176525}, + {-0.131939,-0.115900}, + {0.612452,0.453876}, + {-0.743530,-0.455021}, + {0.466304,0.328039}, + {-0.258516,0.475259}, + {-0.516879,-0.380717}, + {-1.270884,-0.082694}, + {0.501087,-0.200590}, + {-1.445308,-0.484118}, + {0.650660,-0.526876}, + {-0.229810,-0.738966}, + {-0.802840,0.194996}, + {0.829044,-0.227303}, + {-0.054933,-0.287901}, + {0.285078,0.281370}, + {-0.363464,0.182841}, + {0.075010,-1.057872}, + {-0.589787,-0.269938}, + {1.178426,0.146037}, + {-0.073736,1.967197}, + {0.910865,0.370300}, + {-0.153322,0.395913}, + {1.123574,0.170210}, + {-0.882067,0.376414}, + {0.111788,0.783705}, + {-0.791890,0.455797}, + {0.724860,0.924557}, + {-1.174621,1.356142}, + {-1.081595,-0.106305}, + {-0.006296,-0.172133}, + {-0.122594,-1.407199}, + {-0.404103,0.582921}, + {-0.882765,0.122557}, + {0.094063,-0.110042}, + {1.335416,-0.733367}, + {0.464591,-0.575710}, + {-0.121591,-0.127096}, + {-0.062471,1.097518}, + {0.159503,1.027292}, + {-1.093872,-0.247750}, + {0.529288,-0.443974}, + {-0.136074,-0.048432}, + {0.556999,0.495463}, + {0.588577,0.128776}, + {0.462049,-0.451937}, + {0.353590,-0.723830}, + {0.204804,-1.625933}, + {0.092930,1.161258}, + {-1.224485,0.628751}, + {0.229420,-0.877564}, + {0.739953,-0.878338}, + {-0.892648,0.514262}, + {-0.544203,0.616829}, + {1.134951,-1.505910}, + {0.708691,0.176345}, + {-0.292243,0.137628}, + {-0.337737,-0.596135}, + {1.471883,0.535997}, + {-0.850951,0.121347}, + {0.243537,-0.589604}, + {-0.059771,1.176776}, + {-0.454490,0.804287}, + {0.070382,0.030761}, + {0.242788,0.176748}, + {-0.126759,0.129941}, + {0.030666,-0.850073}, + {1.875655,0.587808}, + {-0.161780,-1.784124}, + {-0.569807,0.916039}, + {-0.569185,0.072547}, + {-1.127872,0.026428}, + {-1.150343,1.487388}, + {0.720566,0.922631}, + {0.383465,-1.084402}, + {-1.237511,0.762091}, + {-0.099930,-0.928349}, + {-0.601861,-0.484212}, + {0.014186,0.985724}, + {0.396531,-0.374346}, + {0.370483,0.478921}, + {0.417636,0.285218}, + {0.144493,0.855940}, + {1.513194,-0.430838}, + {-0.286139,-0.974602}, + {-1.347122,-1.183399}, + {-0.109208,-0.834271}, + {-0.070154,-1.123663}, + {0.980670,0.398785}, + {1.504316,-1.491271}, + {0.365317,0.703937}, + {0.327227,-1.471393}, + {0.779325,-0.291336}, + {-0.813175,-0.633449}, + {0.201307,-1.315156}, + {-0.157624,0.806373}, + {1.101852,0.306818}, + {0.548022,0.618568}, + {0.914485,-1.093983}, + {-0.788237,1.330140}, + {0.204645,-1.260284}, + {0.708261,-0.487650}, + {0.831419,0.494045}, + {-0.479281,-0.174932}, + {0.274606,0.031707}, + {0.511466,1.479375}, + {-0.749887,0.138556}, + {0.094436,-1.604624}, + {1.701213,-0.021478}, + {1.273051,0.873564}, + {-0.564715,-0.604606}, + {0.576919,-0.577415}, + {0.854536,0.069007}, + {2.004698,-0.186701}, + {-1.020772,0.648632}, + {-0.474304,-0.256917}, + {0.280593,-0.442013}, + {0.609646,-0.099227}, + {-0.587909,-1.324509}, + {-0.478677,-0.380842}, + {0.992419,-0.833282}, + {-0.207837,0.203639}, + {0.504914,0.234515}, + {-0.266033,0.132612}, + {-0.242541,-0.095664}, + {-0.167233,-0.590706}, + {-1.276869,0.288847}, + {-0.312084,-0.687477}, + {0.271583,-0.587164}, + {0.515093,0.888483}, + {-0.886180,1.600277}, + {0.761687,1.283905}, + {-0.917327,-0.468507}, + {-0.255153,0.234853}, + {-0.698140,0.280238}, + {-0.173308,-0.549159}, + {1.163074,-0.136380}, + {-0.522856,-1.545376}, + {-0.250713,-0.577033}, + {0.127714,0.573650}, + {-0.619459,0.761195}, + {0.854662,-0.335280}, + {1.288629,-1.596849}, + {-0.259143,0.994771}, + {-0.089218,0.323881}, + {1.037082,-0.027840}, + {0.020579,1.366726}, + {-0.158254,0.495453}, + {0.551658,0.631316}, + {0.038543,-0.710163}, + {0.702737,-1.985090}, + {1.398746,-0.143418}, + {0.084599,-0.676724}, + {-0.015678,1.464065}, + {-0.034517,-1.102207}, + {-0.094801,-0.520467}, + {-0.203622,0.612699}, + {-1.132184,-0.715451}, + {-0.130513,0.631629}, + {-0.340655,0.517577}, + {-1.132617,-0.041877}, + {-0.913628,0.061052}, + {1.393766,-0.805041}, + {0.243021,-0.275513}, + {0.592899,0.812328}, + {-0.181057,0.511301}, + {-0.230935,0.289646}, + {-0.253628,1.248452}, + {-0.375765,-0.450903}, + {0.175142,-0.879180}, + {0.632521,0.051703}, + {0.714207,1.053456}, + {-0.848408,1.064349}, + {-0.233667,-0.270396}, + {0.383107,-0.240141}, + {0.507137,-0.249806}, + {-0.030230,-0.356838}, + {-0.578340,0.125787}, + {-1.095438,-1.281125}, + {0.471165,-1.473161}, + {-0.176499,-0.292983}, + {0.283998,-0.579375}, + {-1.456174,0.442805}, + {-1.091059,-0.554400}, + {0.325498,1.215230}, + {0.374914,-0.970670}, + {1.014939,0.866143}, + {-0.947639,0.514860}, + {0.945109,-0.393500}, + {-1.063523,-0.388257}, + {0.026398,-0.066196}, + {-0.485485,0.511262}, + {0.171215,-0.511392}, + {-1.389303,-0.782160}, + {0.119798,-0.872876}, + {-0.380890,-0.950004}, + {-0.454074,0.379206}, + {-0.150043,-0.133012}, + {0.209178,0.071162}, + {0.194253,-0.916240}, + {-0.696335,-1.251679}, + {-0.227848,0.695565}, + {-0.243941,-0.084309}, + {-0.950502,-0.635794}, + {-0.290364,0.216578}, + {-0.751428,-1.213585}, + {0.460577,-0.149599}, + {0.324715,0.166467}, + {-0.614041,-1.173885}, + {-0.142238,-0.336419}, + {-1.471493,-0.936717}, + {1.646690,0.184204}, + {0.225939,0.300060}, + {-0.128450,0.389350}, + {0.727421,-0.454894}, + {-0.435942,0.105538}, + {1.205978,0.100260}, + {-1.315567,0.308342}, + {0.754698,1.164033}, + {-0.107954,-0.172451}, + {-1.047203,1.015069}, + {-1.389840,-0.266683}, + {0.547945,0.616535}, + {-0.434114,0.849453}, + {0.071122,-0.277037}, + {-0.050800,0.284288}, + {-0.165278,0.009121}, + {-0.219966,-0.098418}, + {0.198508,0.353809}, + {-0.581533,0.448088}, + {-1.784726,-1.161621}, + {-0.604861,-0.274908}, + {0.183057,0.051142}, + {-0.317797,0.278299}, + {-0.850828,-0.630589}, + {0.104573,0.285301}, + {0.105866,0.698211}, + {-0.180861,-0.862928}, + {0.475285,-0.838884}, + {0.532029,-1.353946}, + {-0.605465,1.385299}, + {0.218651,-1.214866}, + {2.160576,-0.144045}, + {0.168189,1.107664}, + {0.299490,-0.176740}, + {-0.396194,0.210866}, + {-0.125884,-0.224011}, + {0.853672,0.228498}, + {-1.748178,-1.154824}, + {0.367379,0.232790}, + {-0.181073,-0.618603}, + {-0.789253,-0.907517}, + {0.589666,0.083053}, + {0.205531,-0.292960}, + {-1.755342,-0.647660}, + {1.320671,0.483386}, + {0.751741,-0.776958}, + {0.895885,0.848563}, + {0.581838,-0.625789}, + {-0.172855,-0.093791}, + {1.730868,-0.185926}, + {-0.859963,-0.199970}, + {0.619064,-1.075834}, + {-0.751592,-0.307590}, + {0.383126,0.058031}, + {0.532780,-0.855648}, + {-0.809753,0.598019}, + {0.523282,-0.210299}, + {0.092903,0.620162}, + {-0.841020,-0.066447}, + {-0.888254,0.244874}, + {-0.225321,-0.358074}, + {-0.523697,0.142496}, + {-0.211782,0.560938}, + {0.850574,-0.508918}, + {-0.016610,0.930612}, + {-0.170152,-0.661760}, + {0.379929,0.104789}, + {-0.781353,0.502040}, + {1.259342,-0.010921}, + {-0.135465,0.122281}, + {0.166991,-0.732114}, + {0.955615,-0.124115}, + {1.109480,-1.575200}, + {0.054263,-0.253799}, + {0.862238,-1.307799}, + {0.016864,0.606661}, + {0.483294,-0.230111}, + {1.663652,0.729566}, + {-0.611224,-0.653048}, + {-1.924986,-0.524554}, + {-0.603593,-0.245722}, + {0.878295,0.316568}, + {0.052504,-1.019809}, + {0.512341,0.171092}, + {0.774275,-0.490241}, + {-1.055341,0.751595}, + {-1.688396,1.987387}, + {-0.902226,-0.336708}, + {-0.433191,-0.099476}, + {-0.920050,1.128085}, + {-1.100896,0.374304}, + {0.388182,1.245751}, + {0.280377,0.511610}, + {-0.344954,-0.349710}, + {0.567448,-0.222402}, + {-0.230275,0.053800}, + {-1.450383,-0.655175}, + {-0.140144,0.256758}, + {-1.291789,0.096818}, + {-0.626539,-1.194533}, + {0.550245,-0.702534}, + {0.445211,0.411623}, + {0.860433,-0.689320}, + {0.660554,-0.055735}, + {0.924256,-0.222386}, + {1.467143,-0.039871}, + {0.423189,-0.130886}, + {-0.157257,-0.253543}, + {0.054858,0.012374}, + {0.004722,-0.181412}, + {1.204185,-0.360653}, + {0.683748,-1.078223}, + {0.114180,0.204924}, + {-0.209641,0.052979}, + {0.590545,-0.623896}, + {0.855198,0.077004}, + {-0.183976,0.390004}, + {0.562404,-0.634269}, + {0.638455,0.770984}, + {0.539077,0.058849}, + {1.143837,-0.619012}, + {0.379303,0.131913}, + {0.694961,-0.856962}, + {1.031972,-0.095841}, + {-0.414443,-0.130743}, + {-0.530670,-1.027409}, + {0.532992,0.593755}, + {-0.302745,0.408516}, + {-0.163969,-0.009049}, + {-0.937897,0.569411}, + {0.236075,-0.118090}, + {0.367388,0.920104}, + {-0.228411,-0.020714}, + {0.450075,-1.376905}, + {0.672742,0.878365}, + {0.272849,0.717775}, + {0.332603,-0.084299}, + {-0.123209,0.546980}, + {1.599618,-0.734019}, + {-1.207434,-1.476439}, + {0.126576,0.023655}, + {1.085747,0.148754}, + {-1.156599,-0.185243}, + {1.100054,-0.369996}, + {-0.075626,-0.451481}, + {-0.905205,-0.526888}, + {-0.401543,-0.591241}, + {-0.114917,-0.419392}, + {0.538569,-0.347340}, + {0.301107,-0.265479}, + {-1.341466,-0.843870}, + {-1.296856,-0.888799}, + {0.498068,-0.039892}, + {-0.390159,0.729649}, + {1.171404,1.213731}, + {-0.539536,-0.533475}, + {-0.471922,-0.364102}, + {0.204217,-0.768619}, + {0.692290,-0.199941}, + {0.682400,2.105154}, + {-0.663000,0.094841}, + {1.190975,1.491593}, + {-0.756086,0.111941}, + {0.061172,0.566461}, + {-0.048715,0.143162}, + {0.311618,-0.313990}, + {0.310462,0.386462}, + {0.466845,0.225448}, + {0.572650,-1.340082}, + {-0.824610,0.849502}, + {0.746589,-0.306592}, + {1.392851,0.308872}, + {0.506791,0.509163}, + {-1.012017,0.338057}, + {-0.425655,0.744355}, + {-0.177273,-1.268582}, + {1.931480,-0.463406}, + {-1.005768,-0.526282}, + {-0.554007,0.732979}, + {0.203002,1.016918}, + {-0.343580,0.392522}, + {0.671733,0.125681}, + {-1.033077,-0.210715}, + {-0.047144,-1.546564}, + {0.263303,-0.350745}, + {-0.790377,-0.556737}, + {0.347599,-0.244305}, + {-0.267536,-0.557566}, + {-0.914996,-0.772484}, + {-1.415204,0.476464}, + {0.636720,0.271362}, + {-0.160421,-0.202122}, + {0.256900,-0.971435}, + {-1.341629,-1.340080}, + {-0.996941,-0.175151}, + {-0.275634,-0.620064}, + {0.277806,1.181420}, + {0.257685,-0.644443}, + {0.972835,0.904661}, + {-0.069391,0.979036}, + {0.033424,1.180349}, + {1.601465,-0.899762}, + {-1.159530,-0.513358}, + {0.659085,-0.351394}, + {-0.778353,0.391627}, + {-0.732485,-0.817011}, + {0.160577,-0.745746}, + {-1.425300,0.587289}, + {0.466481,0.028874}, + {0.257711,-0.211149}, + {0.360215,0.446898}, + {0.160066,-0.290423}, + {-0.826929,0.104860}, + {-1.006527,1.418773}, + {0.086332,-0.509908}, + {-0.775915,-0.277061}, + {-0.568888,-1.679972}, + {-0.636057,0.987827}, + {-0.308029,0.307089}, + {0.717339,-0.888667}, + {-0.398455,0.051524}, + {1.624831,-0.428584}, + {-0.995265,-0.949414}, + {-0.574018,-0.660601}, + {0.821218,0.649943}, + {-0.066875,-0.742312}, + {-1.042409,-0.345767}, + {-0.694825,-0.086997}, + {0.892671,0.304710}, + {1.463746,1.347942}, + {-0.794659,-1.465119}, + {0.093978,-1.391761}, + {-0.289519,0.622867}, + {-0.038301,-0.287028}, + {0.225742,-0.501018}, + {-0.619576,1.728619}, + {-0.078345,0.521977}, + {0.410487,0.768793}, + {0.898314,-1.505122}, + {0.982556,-0.321653}, + {-0.156688,0.426663}, + {0.914887,0.476645}, + {-0.661801,-1.162848}, + {-0.834380,-0.187532}, + {-1.033042,-0.657361}, + {-0.258103,-0.279691}, + {-0.077377,-0.617789}, + {-0.067528,-0.795636}, + {0.697166,1.250363}, + {0.612638,0.426930}, + {0.414738,0.159230}, + {0.012610,1.110968}, + {0.088986,0.174993}, + {-0.701699,-0.585427}, + {0.005547,-1.001461}, + {-0.499370,-0.219090}, + {-0.409379,-1.410114}, + {0.678592,1.914758}, + {-0.333608,0.094601}, + {1.473032,-0.764558}, + {0.234098,0.682258}, + {-0.764432,0.203001}, + {-0.286558,-0.776227}, + {0.015636,-0.427128}, + {-0.829637,-0.587309}, + {0.126426,-0.046741}, + {-0.999990,-0.782663}, + {-1.231364,-0.812437}, + {-0.064503,-0.714886}, + {-0.917891,0.770603}, + {-0.586602,0.007693}, + {0.403223,0.712644}, + {-0.008010,-0.902316}, + {0.357368,0.403032}, + {0.138081,-0.123957}, + {-0.283588,0.063573}, + {-0.309539,0.658890}, + {-0.406599,0.958829}, + {-0.708649,-0.300691}, + {-0.292065,0.281290}, + {0.654537,0.474224}, + {-0.708419,-2.474893}, + {-0.285932,0.822338}, + {-1.107321,-0.186473}, + {-0.369601,-0.659469}, + {0.617200,-0.315311}, + {0.185574,-1.073683}, + {-1.332198,0.646972}, + {1.358647,-0.343407}, + {0.423292,0.187194}, + {-1.766024,0.026657}, + {-0.511465,-0.056579}, + {-0.202844,-0.666845}, + {-0.061273,0.149654}, + {-0.160488,0.253664}, + {-0.336715,0.856404}, + {-0.211530,0.286960}, + {-0.096027,-0.438433}, + {-0.123255,0.410071}, + {-0.588208,0.110857}, + {-0.160651,-0.237762}, + {0.178849,-0.486365}, + {0.523072,-0.604543}, + {-0.481635,0.822471}, + {-1.427760,1.475099}, + {-0.015193,0.056991}, + {-0.020920,-0.628689}, + {-0.662725,-0.334047}, + {-0.029955,0.271499}, + {-0.549856,0.193420}, + {-0.591084,-0.460397}, + {-0.847475,0.176087}, + {0.134666,1.535474}, + {-0.404517,1.774605}, + {-0.012591,-0.025081}, + {0.304635,0.349055}, + {1.032524,-1.067513}, + {-0.654717,-0.443237}, + {0.354067,-0.906890}, + {0.645732,-0.808004}, + {0.708526,0.422639}, + {0.251741,-0.199950}, + {-0.343301,-0.372559}, + {0.521966,0.293809}, + {0.596219,1.459711}, + {-0.911900,1.090172}, + {-0.180459,-0.242334}, + {0.043777,-0.308086}, + {0.892502,-0.297267}, + {0.069414,0.548758}, + {0.106618,0.638483}, + {0.075271,0.328460}, + {-0.453758,0.763184}, + {0.873083,-0.518432}, + {-0.165817,-0.466517}, + {-0.777957,0.195349}, + {-1.045421,-0.135624}, + {1.085889,0.201413}, + {0.045273,0.861950}, + {-0.380225,-0.540513}, + {1.234628,-0.061586}, + {0.388294,0.042646}, + {-1.184967,-0.334204}, + {-0.431482,0.137044}, + {-0.260536,-0.255510}, + {0.676812,-1.129665}, + {0.060250,-0.101155}, + {0.177268,0.504934}, + {0.447116,0.913391}, + {-0.188139,0.308266}, + {-0.461521,-0.562924}, + {0.803880,-0.403873}, + {-0.719793,0.283642}, + {-0.274215,-1.343825}, + {-0.176226,-0.931566}, + {-0.456589,0.988810}, + {0.069589,-0.085009}, + {0.498388,0.661623}, + {1.764237,-1.921451}, + {-0.520769,-0.283433}, + {-0.863480,-0.545718}, + {0.164524,-1.140960}, + {0.391842,1.388107}, + {-0.211966,-0.760097}, + {0.882238,0.726142}, + {-0.494735,-0.147398}, + {-2.130035,-0.271010}, + {-0.091024,-0.085686}, + {-1.139421,0.482023}, + {-1.313630,0.069675}, + {-1.013372,-0.030979}, + {-0.010000,-0.309232}, + {0.015798,-0.454868}, + {-0.021211,1.170452}, + {0.733800,0.657433}, + {-0.564449,-1.202041}, + {-1.438305,-0.225477}, + {0.737473,0.034093}, + {-0.124011,0.017096}, + {-1.054430,-0.490369}, + {0.735048,-0.170665}, + {-0.603735,-0.398150}, + {-0.291035,-1.773649}, + {-0.230866,0.024045}, + {0.565597,-0.230533}, + {0.341789,1.338716}, + {-0.174622,-0.278944}, + {-0.235408,-1.074645}, + {0.457028,0.409652}, + {0.792267,0.082481}, + {0.739603,-0.207675}, + {-0.446134,0.728303}, + {0.271171,0.646737}, + {-0.080809,-0.597354}, + {-0.333713,0.650210}, + {-0.058765,-0.037884}, + {0.313115,0.179699}, + {1.061631,0.029643}, + {-0.718130,-0.867332}, + {0.161520,-0.373053}, + {0.115240,1.018624}, + {-1.401570,-1.811324}, + {-0.389145,1.565653}, + {0.275466,0.553665}, + {1.366925,-0.550564}, + {-0.653708,-0.492507}, + {0.639135,0.108763}, + {0.502588,1.583952}, + {-0.959099,1.271320}, + {-1.233735,0.101634}, + {-0.740340,-0.248321}, + {-0.892102,0.109857}, + {-0.345742,0.073819}, + {0.031049,-0.115825}, + {0.366890,1.202980}, + {-0.555795,0.858266}, + {-0.789748,-0.582250}, + {-0.684044,-0.073831}, + {0.431366,-0.264677}, + {-0.251106,-1.079765}, + {-0.048445,-0.527598}, + {-0.257022,0.807331}, + {0.604370,0.108487}, + {1.193560,-0.504331}, + {0.887205,0.223083}, + {0.165226,0.181709}, + {-0.694678,0.305534}, + {-0.539173,-0.699254}, + {-0.962349,-2.031904}, + {0.437054,0.981274}, + {0.472644,0.330887}, + {0.577628,0.332816}, + {-0.547620,-0.333722}, + {-0.651263,2.080435}, + {-0.084852,0.079156}, + {-0.760344,0.805795}, + {0.499899,-1.470379}, + {0.351524,0.328809}, + {0.080884,-0.587359}, + {-0.553406,-0.169034}, + {0.039425,-0.538786}, + {0.858310,-0.140728}, + {0.472670,-2.246532}, + {-0.368775,-0.323302}, + {0.090378,-1.378154}, + {-0.550284,0.507064}, + {0.539224,0.603538}, + {-0.000691,-1.727633}, + {-2.003468,-0.661973}, + {0.337784,0.651070}, + {0.162028,0.567114}, + {-0.067531,0.050097}, + {0.182332,-0.719324}, + {-1.474951,0.685114}, + {0.860035,0.235277}, + {0.673692,-0.745029}, + {0.163864,0.823959}, + {0.712323,-0.579740}, + {0.133995,-0.852349}, + {-0.093329,-0.759119}, + {0.285367,1.120202}, + {0.187071,-0.415625}, + {0.522904,0.451246}, + {0.757153,0.243609}, + {0.184169,1.090276}, + {1.479287,-1.344383}, + {1.487636,0.349166}, + {-0.095602,0.755634}, + {-0.112605,0.207789}, + {-0.441569,-0.286210}, + {-0.409203,1.547667}, + {-0.546806,-1.646303}, + {1.074615,1.044879}, + {-0.434627,-0.525903}, + {-0.242109,1.227347}, + {-1.319122,0.275312}, + {-0.545729,0.662611}, + {0.343853,0.157724}, + {0.475258,0.149229}, + {0.253291,1.076345}, + {-0.570123,-1.272515}, + {-0.186610,0.269897}, + {-0.189057,1.120619}, + {-0.383515,0.226731}, + {0.924259,-0.098409}, + {-0.080234,-0.649794}, + {-0.726238,-1.386272}, + {0.806442,-0.219207}, + {0.024879,0.089845}, + {0.913936,-0.796274}, + {2.617004,-0.280960}, + {-0.718628,-0.178037}, + {-0.428151,0.215331}, + {-0.073535,-0.606667}, + {0.254862,0.639116}, + {1.488909,0.267331}, + {-0.583632,-0.698212}, + {1.157905,0.856185}, + {0.267413,0.309240}, + {-0.460028,0.787779}, + {0.527296,0.364704}, + {0.341824,-1.132002}, + {0.758196,0.233237}, + {0.556152,0.517602}, + {0.066575,-0.831919}, + {0.517617,-1.003521}, + {-0.448421,0.717349}, + {0.254943,0.001274}, + {-0.525383,-0.477606}, + {1.091618,0.208053}, + {-0.123831,-0.791330}, + {0.334160,0.226185}, + {-0.698222,0.706486}, + {-0.032881,0.242425}, + {-0.281343,0.751205}, + {0.632088,-1.214175}, + {0.073367,-1.174985}, + {-0.324776,-0.120150}, + {0.164874,0.111320}, + {0.609620,-0.439175}, + {0.031007,0.000219}, + {1.028218,-0.287004}, + {1.158747,0.853374}, + {-1.199486,-0.275183}, + {-1.283849,1.091030}, + {0.561488,-0.120327}, + {-0.287822,-0.044037}, + {-0.968829,-0.687665}, + {1.352591,-0.243109}, + {-1.373144,0.694374}, + {-0.378153,0.037286}, + {-0.802495,0.406625}, + {-0.041211,-0.643437}, + {0.185728,-0.003745}, + {-0.305742,-0.281991}, + {0.387514,-1.518495}, + {-0.242799,0.206669}, + {-0.669666,-0.599745}, + {-0.141009,-2.414735}, + {-0.003491,-0.033090}, + {-0.289344,-0.418806}, + {0.520367,0.013915}, + {0.555563,-1.274973}, + {-0.324143,0.296732}, + {-1.457603,0.238373}, + {0.410639,0.101798}, + {-1.012753,-0.935328}, + {0.899841,0.309905}, + {0.127096,-0.954350}, + {0.106654,1.147259}, + {-0.355125,-0.287927}, + {-1.547840,-0.332855}, + {-0.733110,0.032549}, + {-0.271676,0.273160}, + {-0.415254,-1.088883}, + {0.067924,-1.032075}, + {0.476029,-0.014800}, + {-0.003191,-0.439740}, + {-0.798743,0.822659}, + {0.883440,0.479619}, + {-1.455205,-0.328712}, + {0.775377,0.211114}, + {1.220351,0.695741}, + {0.452471,1.035777}, + {0.341504,-1.320770}, + {-0.611155,0.468035}, + {0.908185,0.273328}, + {0.292692,-1.200411}, + {-0.033289,-1.174946}, + {0.994273,-0.733959}, + {0.214130,0.413516}, + {0.274615,-0.372335}, + {1.346686,-1.437341}, + {-0.197733,-0.578892}, + {0.149638,-0.107375}, + {-0.339736,0.034751}, + {-0.338912,0.066107}, + {0.750437,0.078081}, + {-1.049538,0.591718}, + {-0.041805,0.895005}, + {-1.095430,0.700039}, + {-0.235200,0.094713}, + {0.065897,0.602921}, + {0.755398,-0.108273}, + {1.091147,0.071925}, + {0.228578,-0.294732}, + {-0.584694,-0.554632}, + {-0.078499,0.146121}, + {-0.915751,-0.799416}, + {-0.365473,0.373294}, + {-0.531644,-0.071814}, + {0.721813,0.581123}, + {-0.110709,0.244037}, + {0.199982,1.816332}, + {0.564345,1.371369}, + {0.467000,1.041223}, + {-0.686056,0.372524}, + {0.104741,-0.231289}, + {0.409822,-0.375921}, + {0.031726,-0.309260}, + {1.183292,0.898475}, + {-0.493938,-0.680656}, + {0.890296,0.420048}, + {0.070555,-0.613145}, + {-0.022719,0.779646}, + {1.421551,-0.488215}, + {-1.226503,1.639620}, + {-0.306046,0.416864}, + {-0.696823,0.344132}, + {-0.143656,1.441148}, + {-0.689809,-0.700984}, + {0.463316,0.449139}, + {-1.364012,0.198649}, + {0.449165,0.742472}, + {-0.486011,-1.473443}, + {0.500896,0.833914}, + {-0.622554,-0.239606}, + {1.189831,-1.242437}, + {1.151693,-0.330836}, + {0.920582,-0.666624}, + {-1.224090,-1.875929}, + {-1.092502,-0.769761}, + {-0.262561,-0.202329}, + {0.431854,1.719011}, + {-0.428703,-0.207687}, + {0.564636,0.288137}, + {-0.667355,0.277334}, + {0.180266,0.623707}, + {-0.315467,-0.069400}, + {-0.601639,-0.462335}, + {-0.948292,-0.538306}, + {-1.253119,-0.336230}, + {-0.049082,0.253962}, + {-0.451911,0.428742}, + {0.736800,0.882449}, + {-0.412044,0.366809}, + {-0.467545,-1.006095}, + {1.008279,1.350596}, + {-0.359243,1.473972}, + {0.331398,-0.803076}, + {-0.297361,-0.463851}, + {0.201236,-0.107912}, + {0.239863,0.923164}, + {-0.353475,0.650233}, + {0.384891,0.803903}, + {0.302545,1.670567}, + {0.799741,0.176856}, + {-0.024317,0.120099}, + {0.008041,-0.350004}, + {0.230942,0.570515}, + {-0.132010,0.455897}, + {-0.263291,-0.539349}, + {-0.645935,0.218008}, + {-0.463458,0.613702}, + {0.243487,1.705323}, + {-0.868175,1.548390}, + {-0.227668,1.410199}, + {0.658615,0.988933}, + {-1.447789,0.664133}, + {0.798315,0.707355}, + {0.425196,-1.360819}, + {-0.135508,-1.272751}, + {0.647140,0.224335}, + {1.161476,0.319277}, + {-0.480896,0.374320}, + {1.878285,0.118100}, + {-0.211065,2.614610}, + {0.436903,-0.128683}, + {1.200507,-0.109365}, + {-0.119335,-0.098252}, + {0.589978,0.683516}, + {-0.940828,1.101724}, + {-1.549157,0.580937}, + {-0.045247,1.021449}, + {0.032804,-0.767668}, + {0.999415,-0.176564}, + {-0.273115,-1.412497}, + {0.167989,-0.295090}, + {-0.036130,-0.505037}, + {0.340076,-0.586571}, + {-0.911702,0.260780}, + {-0.738639,-1.333492}, + {0.734417,-1.151579}, + {-1.217327,-0.926407}, + {0.231592,0.190441}, + {0.737205,-0.440307}, + {0.438334,-0.481113}, + {0.415552,0.334575}, + {0.720010,0.454014}, + {-0.802826,-0.345235}, + {-1.888756,0.673207}, + {-0.545520,-0.182574}, + {1.213482,0.417727}, + {-1.244954,0.421645}, + {-0.259205,-0.972422}, + {-0.804418,0.298643}, + {-0.497450,-1.013039}, + {-0.363112,-0.066604}, + {-0.295601,0.914620}, + {1.021939,-0.017453}, + {0.680981,0.298866}, + {1.107544,0.912255}, + {0.209341,0.491702}, + {1.108210,0.582607}, + {-1.014248,-0.037100}, + {0.258361,0.684969}, + {1.045870,-0.304365}, + {-0.871056,0.100909}, + {0.823420,-0.126928}, + {-1.214117,0.314406}, + {0.871430,0.118769}, + {-0.231277,0.241207}, + {0.035972,0.285960}, + {-0.742023,0.505129}, + {0.254087,0.341223}, + {0.454655,-0.525507}, + {0.755748,-0.462112}, + {0.587311,0.633949}, + {-1.442459,0.796037}, + {-0.318407,-0.290317}, + {-0.527692,-0.825944}, + {0.971368,-0.736664}, + {0.229420,1.203638}, + {-0.736167,-1.347227}, + {1.412800,0.828552}, + {0.740372,-0.240037}, + {0.876093,-1.017553}, + {-1.210328,0.107513}, + {1.137077,0.416858}, + {-0.750964,-0.268489}, + {-0.489146,-0.819406}, + {0.703970,-0.019085}, + {-0.301573,0.768771}, + {-0.280863,-0.923373}, + {-0.372715,0.726574}, + {0.399350,1.779629}, + {-0.254864,-0.001700}, + {0.357948,1.923558}, + {0.853556,-0.006690}, + {0.509726,0.496630}, + {-0.858094,-1.471612}, + {-1.728564,1.392049}, + {0.623779,-0.300334}, + {-0.675676,-0.167689}, + {-0.849742,-0.641322}, + {0.697436,-0.283774}, + {-0.275413,-0.855216}, + {0.109529,-1.411846}, + {-0.609845,1.742109}, + {0.172157,0.641408}, + {0.021837,0.465026}, + {-0.022089,-1.116902}, + {0.964458,0.032398}, + {0.532234,0.444177}, + {1.296815,-0.784017}, + {0.749398,0.180579}, + {0.574044,-0.467364}, + {-0.838701,-1.398614}, + {0.129156,0.516463}, + {-1.055356,-1.190214}, + {0.528734,-0.367550}, + {0.797226,0.908928}, + {-0.050036,0.414600}, + {-1.125256,-0.572235}, + {0.346222,0.074931}, + {-0.538717,-0.265686}, + {-0.056401,0.092578}, + {-0.207907,-0.019935}, + {1.012684,0.194750}, + {-0.367511,-0.884469}, + {0.107956,0.421098}, + {-0.130369,-0.206243}, + {-0.422989,0.053730}, + {0.242778,0.306604}, + {1.008636,-1.384316}, + {0.333947,0.589110}, + {-0.676884,0.681691}, + {0.948866,0.105958}, + {0.426000,0.672980}, + {-1.064013,0.336557}, + {-0.240377,0.553604}, + {-1.066478,-0.727211}, + {-0.640961,-0.431194}, + {-0.047056,0.430286}, + {1.455127,0.086339}, + {1.044019,0.478455}, + {-0.476166,0.241834}, + {0.380861,-1.272487}, + {-0.346503,-0.477271}, + {0.130709,0.817365}, + {-0.985777,-1.207054}, + {-0.046189,-1.202671}, + {-0.330047,0.026048}, + {-0.239273,1.694012}, + {-0.003318,-0.758511}, + {0.329162,-0.169705}, + {-0.474235,-0.351765}, + {0.503979,1.428228}, + {0.554457,0.574828}, + {-1.434442,-0.919440}, + {-0.451345,0.194554}, + {0.521378,-0.954107}, + {0.200849,0.335852}, + {-0.124435,0.284194}, + {-0.895518,-0.304695}, + {0.301791,0.348402}, + {0.093200,-1.526336}, + {0.633977,0.922629}, + {0.135976,-0.420617}, + {0.232458,-0.359167}, + {0.716139,0.072091}, + {0.254796,-0.013268}, + {-0.379655,-0.585246}, + {-0.022477,0.395561}, + {-1.191544,-0.383859}, + {1.447703,-0.326901}, + {1.032686,1.916231}, + {-0.883760,0.132351}, + {0.797983,0.389918}, + {0.690284,0.427680}, + {-0.500221,-0.126779}, + {-0.347322,1.756772}, + {0.199207,0.321965}, + {1.155876,-0.872054}, + {0.930258,-0.737929}, + {0.355776,0.125540}, + {0.111132,-0.084686}, + {-1.765447,-0.399887}, + {-0.484057,-0.693399}, + {0.164002,1.979783}, + {0.861997,0.458612}, + {1.264516,0.761647}, + {-0.265837,0.631914}, + {1.055233,0.348404}, + {-1.092578,-1.237799}, + {0.095743,-1.847219}, + {-0.335968,-0.005423}, + {-0.404703,0.532334}, + {-0.681848,-0.884532}, + {-1.117062,-1.755286}, + {-0.757974,-0.504821}, + {-0.349785,0.132151}, + {0.770082,0.883966}, + {-0.583158,-0.064996}, + {-1.505933,0.375539}, + {0.417048,0.888212}, + {0.276252,-0.045163}, + {-0.424762,-0.615027}, + {-0.365226,-0.268774}, + {0.618845,-0.605848}, + {0.164242,-0.422652}, + {0.645703,0.576558}, + {0.709919,0.591569}, + {0.666594,-0.737500}, + {0.026753,0.073156}, + {-0.021352,-0.729128}, + {0.909815,-0.255206}, + {-0.589314,-0.428360}, + {0.632534,-0.568628}, + {0.261934,-1.385056}, + {0.119414,0.325016}, + {0.805002,-1.770542}, + {0.277957,-0.422711}, + {0.741012,-1.257607}, + {1.212983,1.441817}, + {-0.765914,0.535380}, + {0.317519,-0.080034}, + {-0.338720,0.031978}, + {0.437849,0.750522}, + {0.047748,-0.215083}, + {-0.962192,-0.546992}, + {-0.645064,0.921583}, + {-0.551719,0.389382}, + {0.105114,-0.340749}, + {-0.310464,-1.039947}, + {0.161271,0.002407}, + {-0.846793,-0.332475}, + {0.085515,-0.070405}, + {0.516329,0.565764}, + {-0.035842,-1.577365}, + {-0.663475,-0.556161}, + {0.282857,0.891555}, + {-1.157957,0.323517}, + {0.468238,0.244984}, + {-0.001649,-1.302923}, + {-0.138291,0.749416}, + {0.078580,1.089354}, + {0.049946,-0.266946}, + {0.138307,-0.213026}, + {-0.398241,0.031845}, + {-1.097927,0.485306}, + {-0.228563,0.686991}, + {1.497539,0.916258}, + {0.779815,-0.813548}, + {-0.470301,-0.251974}, + {0.471512,1.453454}, + {-0.334489,-0.584985}, + {-0.471259,-1.117006}, + {0.399544,-0.900880}, + {0.372172,0.255576}, + {-0.107049,-0.126052}, + {0.408528,-0.020332}, + {0.284764,0.268221}, + {-0.298182,-0.221228}, + {-1.686760,0.052717}, + {-0.036532,0.036560}, + {-0.523159,-0.734161}, + {-1.978600,-0.302538}, + {-0.584814,-0.405386}, + {-0.741486,0.753370}, + {-0.040990,-0.509271}, + {-0.541529,-0.386237}, + {0.566418,0.037714}, + {0.151225,0.807270}, + {0.189559,-0.703980}, + {-0.079181,-0.363765}, + {-0.031324,-1.081530}, + {0.083723,-0.843167}, + {0.221127,0.064046}, + {-0.427889,0.022969}, + {0.139107,0.082158}, + {-0.086705,1.011836}, + {0.342143,0.246917}, + {0.207554,0.133077}, + {-0.080966,1.046769}, + {-1.059233,-1.085633}, + {-0.356010,0.718178}, + {-0.577859,-0.109375}, + {0.542744,1.108480}, + {-0.876346,-0.752113}, + {1.300557,-0.250276}, + {-1.010939,1.119039}, + {0.250270,-0.805066}, + {-0.711292,-0.052695}, + {-0.272900,0.801570}, + {-0.129894,-1.472325}, + {-0.059291,0.042281}, + {0.343083,0.256834}, + {0.652360,1.649133}, + {-0.441827,0.270447}, + {-0.338878,0.306703}, + {-0.533263,-0.367020}, + {-0.251497,-0.091588}, + {-0.288078,-0.953882}, + {-0.687001,1.500250}, + {-0.145605,-0.885543}, + {-0.295624,0.364480}, + {-0.773724,0.838420}, + {-0.755309,-0.637771}, + {0.140479,0.139850}, + {0.164407,-0.946375}, + {0.334796,0.474215}, + {-0.108846,0.443189}, + {-0.315848,-0.562709}, + {1.146425,-0.086577}, + {1.422925,1.452282}, + {0.528118,1.090295}, + {0.142858,-1.517183}, + {0.089292,-1.030106}, + {1.868715,-0.729473}, + {-0.847120,1.530669}, + {-0.619504,-0.077095}, + {0.013841,0.239227}, + {0.358968,-0.495570}, + {0.529144,-0.319802}, + {-0.237481,0.008175}, + {-0.949545,-1.524610}, + {-0.764478,1.202526}, + {-0.754071,0.211168}, + {0.726948,-0.350558}, + {-0.383736,-0.722571}, + {-0.531464,0.251220}, + {-0.215829,0.489119}, + {-0.673253,0.780101}, + {-0.425690,0.571457}, + {-0.591886,-0.066992}, + {-1.591411,-0.156612}, + {0.832392,-2.183463}, + {0.089291,0.262270}, + {0.334040,0.864206}, + {1.070955,-0.017792}, + {-0.209751,-0.368139}, + {0.320312,0.611719}, + {0.299755,-0.675094}, + {0.945826,0.192595}, + {0.160973,-0.236396}, + {-0.930557,-0.137053}, + {0.824962,-0.452584}, + {-0.781090,0.259436}, + {0.499810,-0.342312}, + {-0.976936,-0.295870}, + {-1.864960,-1.380520}, + {-0.343277,1.189033}, + {0.354532,0.766793}, + {-0.539951,0.213865}, + {-0.755910,0.577450}, + {-1.051209,-1.337479}, + {-0.047104,0.329372}, + {0.415117,-0.259529}, + {0.118073,0.808609}, + {1.623840,-0.219009}, + {-0.092132,1.145445}, + {-0.289294,0.153253}, + {-0.118908,0.241607}, + {-1.524828,-0.280118}, + {0.532567,-0.648456}, + {-0.104690,-0.952993}, + {0.096358,0.341141}, + {0.577925,-1.416989}, + {-0.472131,0.005166}, + {0.441558,0.684743}, + {-1.075276,0.458788}, + {-0.542887,-2.145492}, + {0.982289,-0.712595}, + {0.376656,-0.133513}, + {-0.495061,-0.153725}, + {-0.843701,-0.590876}, + {0.189824,-1.026949}, + {0.271507,0.450949}, + {-1.214261,1.019265}, + {-0.192929,0.809120}, + {0.580104,-0.580059}, + {-1.008693,0.258822}, + {-0.686540,-0.150929}, + {-0.806180,0.585680}, + {0.382421,0.681665}, + {0.993495,0.326671}, + {-0.011094,0.137639}, + {0.230903,1.353307}, + {0.321925,-0.530779}, + {0.445268,-0.218635}, + {-0.248939,-0.811110}, + {-0.438773,0.174895}, + {0.092849,-0.786051}, + {0.672213,0.282743}, + {0.310022,0.016750}, + {-0.554465,-1.296100}, + {1.167694,0.289020}, + {-1.008050,-1.267211}, + {1.337627,-0.727579}, + {1.107920,-0.800503}, + {1.580887,-0.434263}, + {0.534123,-0.023207}, + {-0.672041,-1.190008}, + {-0.623945,-1.000304}, + {-0.339638,-0.090139}, + {-0.247150,-0.090013}, + {-0.248865,-0.373625}, + {-1.008469,-0.345410}, + {0.219290,-0.748377}, + {-1.110240,0.109012}, + {-1.315957,-0.132981}, + {0.328799,0.407528}, + {0.992340,0.695968}, + {0.540487,0.100143}, + {-0.101748,1.200990}, + {1.372902,-0.484321}, + {0.182478,0.930679}, + {1.286810,-0.092169}, + {0.361417,-0.430697}, + {0.059600,0.508897}, + {0.957065,0.231615}, + {0.315519,0.910029}, + {-0.259820,-1.108543}, + {1.139876,1.306830}, + {0.111378,0.598970}, + {-1.158463,0.057921}, + {0.732254,0.269129}, + {-0.422410,0.384354}, + {0.434930,0.258197}, + {-0.135920,-0.584475}, + {-0.525475,0.266487}, + {0.479545,-1.317436}, + {-0.588906,-1.032770}, + {0.421416,-0.456796}, + {-1.112158,0.197872}, + {0.427474,-1.371221}, + {1.169989,0.066283}, + {-0.285752,0.682510}, + {-1.103367,-0.081644}, + {-0.492414,-0.508673}, + {-0.603259,0.274685}, + {0.453820,-0.705243}, + {0.451449,-0.286640}, + {-0.890995,1.493104}, + {-0.269448,-0.111697}, + {-0.284481,0.892255}, + {-0.156936,1.178820}, + {-0.026075,-0.288447}, + {0.192773,-0.689622}, + {0.408094,0.221306}, + {-0.077789,0.462070}, + {-0.763512,0.374190}, + {1.372160,-0.387671}, + {-0.961063,0.123053}, + {-0.563208,-1.176171}, + {-0.681526,0.053875}, + {0.246027,0.916420}, + {0.074971,0.397053}, + {-0.509338,-0.467579}, + {-0.028080,-0.246218}, + {-0.778298,-1.008908}, + {-0.688193,-0.856779}, + {2.135919,-0.463805}, + {-0.151521,-0.435434}, + {0.286563,-1.399753}, + {-0.238350,0.812805}, + {-0.637019,0.391566}, + {-0.930719,-0.753007}, + {-0.130401,-0.095141}, + {-2.022008,1.588912}, + {0.465128,-0.736271}, + {0.259710,0.008248}, + {-0.670376,0.573592}, + {-0.759845,-0.245010}, + {1.199012,1.484925}, + {0.117486,-1.283839}, + {0.823713,0.601557}, + {0.430107,1.305288}, + {-0.857913,-0.086698}, + {-0.240219,1.178419}, + {0.106586,-0.727451}, + {-0.013468,-0.553821}, + {0.331834,-0.839487}, + {-0.314308,-0.236823}, + {-1.020583,-0.465144}, + {-1.183478,-0.838031}, + {-0.688226,-0.504797}, + {-0.659946,0.110839}, + {-0.317790,-0.888356}, + {0.070495,-0.690989}, + {-0.215137,-0.280878}, + {-0.523957,-1.084659}, + {-1.625006,-0.827692}, + {-1.254357,-0.098812}, + {-0.037334,-0.320405}, + {-1.032500,-1.006692}, + {1.085823,-0.464633}, + {-0.424815,-0.295596}, + {-0.359488,-1.184184}, + {-0.081069,-0.021767}, + {0.194173,-1.145768}, + {-0.408176,-0.113861}, + {-0.210713,0.116032}, + {0.153323,-0.278102}, + {-0.824116,-0.348393}, + {1.711024,-0.546763}, + {0.732380,0.343069}, + {-0.031038,-0.890522}, + {0.333504,-0.385973}, + {0.838976,0.266577}, + {-0.957789,-0.709820}, + {0.084819,-0.404493}, + {0.086928,0.312046}, + {0.263436,0.677942}, + {-0.878981,-0.061526}, + {1.171282,-0.158491}, + {1.014568,-0.534002}, + {-0.414913,-0.218960}, + {1.441376,-0.016469}, + {-1.076862,0.575999}, + {-0.508823,-0.139239}, + {0.558421,0.010286}, + {0.950772,-0.758483}, + {-0.041742,0.060954}, + {-0.951736,-0.703192}, + {1.175201,0.090376}, + {-0.088403,0.175440}, + {1.137298,0.338050}, + {0.202901,-0.780958}, + {0.061536,1.037387}, + {0.163756,0.146354}, + {-1.082413,-0.656845}, + {-0.663994,-0.554342}, + {0.921438,0.127520}, + {-1.683027,-0.494672}, + {-1.207142,0.324501}, + {-1.591428,-0.689670}, + {0.380479,-0.276296}, + {-1.370787,-0.457896}, + {0.311180,0.865492}, + {0.329667,-0.284122}, + {0.764384,-0.263737}, + {0.388595,0.581989}, + {0.530794,0.089158}, + {-0.194579,-0.160770}, + {-0.497197,0.237652}, + {-0.969043,0.476531}, + {0.638742,0.543269}, + {-0.246685,-0.490291}, + {-0.504714,0.519112}, + {-0.275926,0.004395}, + {-0.679165,0.801614}, + {-1.013769,0.245981}, + {-1.048180,0.133878}, + {-0.347843,-0.709411}, + {-0.382321,0.205123}, + {-0.289524,0.058317}, + {0.779829,-0.108258}, + {-0.607607,-0.504919}, + {-0.313592,-0.887478}, + {-1.599302,0.151143}, + {-0.235541,0.112637}, + {0.193417,0.135649}, + {0.160499,-0.467862}, + {-0.417821,0.508193}, + {-0.371340,-0.797004}, + {-1.218597,-0.463920}, + {-0.329584,-0.832050}, + {0.403735,-0.347268}, + {0.312113,-0.544869}, + {-0.885796,-0.033127}, + {0.757105,0.871085}, + {-0.135961,0.870860}, + {-0.428802,-1.184347}, + {0.290754,0.685975}, + {0.025818,-0.815321}, + {0.241907,0.375104}, + {1.038442,0.255637}, + {0.196660,-0.681084}, + {-1.074595,-0.105662}, + {-1.073237,0.535047}, + {-1.330165,-0.216306}, + {0.568918,-1.460499}, + {0.046209,-1.528571}, + {0.044727,0.488519}, + {-0.583277,-0.315108}, + {-1.471177,-0.727805}, + {-0.046036,-0.582608}, + {-0.295384,0.529362}, + {0.361797,-0.922655}, + {0.397070,-0.019993}, + {-0.492521,-0.117990}, + {0.782889,1.170999}, + {0.662184,0.636561}, + {-1.735288,0.395381}, + {0.079380,-0.052730}, + {0.709996,0.654113}, + {-0.376010,-0.821716}, + {0.920385,-1.393132}, + {-0.322399,0.137951}, + {0.319344,-0.513440}, + {1.985403,-1.230494}, + {-0.254706,0.778217}, + {-0.381202,0.578765}, + {-0.175651,0.459589}, + {0.364902,-0.349097}, + {-0.521217,0.377102}, + {-0.696214,0.237524}, + {-1.428330,0.264137}, + {1.113969,-0.075405}, + {-1.211818,0.228307}, + {-0.100941,0.790198}, + {0.189215,-0.790792}, + {0.363891,-1.198473}, + {-0.964005,0.251669}, + {0.801589,-0.261038}, + {-1.090147,0.402919}, + {-0.227480,-0.351480}, + {-0.406823,0.119514}, + {-0.814855,1.243446}, + {0.516934,-1.114966}, + {0.026047,0.248718}, + {-0.378437,0.509858}, + {0.312049,0.311611}, + {-0.891748,0.177292}, + {0.608950,0.028471}, + {-0.495443,-0.650332}, + {-0.032869,0.579244}, + {1.360294,-1.192193}, + {-0.391750,0.494781}, + {-0.337458,0.448717}, + {0.363825,-0.229340}, + {-1.236290,0.427883}, + {0.399168,0.082217}, + {0.280208,-0.644907}, + {-0.759483,-1.003514}, + {1.269082,-0.253776}, + {0.442041,1.322204}, + {1.329775,-0.544052}, + {0.399145,0.137237}, + {0.772111,0.321600}, + {-0.588199,-0.243919}, + {-0.658466,-0.868454}, + {0.146449,-0.936439}, + {0.021534,-0.658851}, + {0.764039,0.391941}, + {0.200860,-0.212653}, + {0.159180,-0.042023}, + {-0.537129,-0.147575}, + {0.702245,-1.015617}, + {1.790915,0.570027}, + {0.766059,-1.875739}, + {-0.182925,-0.787800}, + {0.315391,0.206610}, + {0.710280,-0.029793}, + {0.798824,0.611930}, + {0.082498,-0.122377}, + {-0.441196,-0.130910}, + {0.361502,0.019255}, + {-0.494324,1.258054}, + {-0.658917,0.549865}, + {1.452774,0.133686}, + {-0.454627,-0.589725}, + {-0.880561,0.736115}, + {-0.035445,0.327460}, + {0.642400,0.698314}, + {0.196188,0.488357}, + {-1.092548,-0.378542}, + {1.012368,0.219866}, + {0.136436,1.050915}, + {0.450533,-0.095960}, + {-1.079073,0.205764}, + {0.129783,-0.607319}, + {0.304598,-0.028435}, + {1.256490,-0.636622}, + {0.251786,-0.305137}, + {-0.501987,0.211074}, + {-0.906736,-0.486202}, + {-0.082131,0.034965}, + {-0.584390,0.499364}, + {0.129603,-0.644452}, + {-0.480831,0.196367}, + {0.349143,1.779059}, + {0.431185,1.141092}, + {-0.747513,0.731564}, + {-0.786213,0.604126}, + {1.290785,0.708430}, + {-1.621136,0.607945}, + {-1.515636,0.414725}, + {-1.243614,0.535769}, + {-0.468547,0.431251}, + {-0.710815,-1.121571}, + {-1.329742,-0.444443}, + {-0.399959,0.076529}, + {-0.261205,-0.551109}, + {-0.712130,-1.339364}, + {-1.672925,1.158768}, + {0.511278,0.494824}, + {1.221284,-0.403334}, + {-0.689758,0.135193}, + {-0.266714,-1.264919}, + {-0.186901,-1.052718}, + {0.711819,1.601651}, + {-0.004976,-1.134699}, + {0.264689,0.143991}, + {-0.485013,0.240249}, + {-0.430138,-0.180132}, + {-0.448256,0.065344}, + {-0.313909,0.042542}, + {-1.788176,-1.003737}, + {-0.430691,0.515782}, + {-0.552024,0.033933}, + {-0.511113,-0.396641}, + {-0.667628,1.324609}, + {1.536055,-0.176847}, + {-0.371362,-0.780574}, + {-0.604459,-0.180242}, + {0.127890,-0.724469}, + {-0.546043,1.055909}, + {-1.160424,0.296830}, + {0.851429,-0.834491}, + {-0.653446,-0.319744}, + {-0.281928,0.036064}, + {0.152684,0.887427}, + {-0.584216,-1.129730}, + {-0.301487,-0.448074}, + {-0.644999,-0.062434}, + {-1.064140,-0.877770}, + {-0.025358,0.318626}, + {-0.169102,-1.656778}, + {-0.410128,1.517397}, + {0.908370,0.349006}, + {-1.017744,-0.256003}, + {-0.115645,0.371458}, + {-1.286410,-1.036681}, + {0.668494,-0.174631}, + {0.543753,-0.269535}, + {0.520788,-0.045167}, + {-0.348305,0.919992}, + {0.371761,0.757065}, + {0.314541,-0.679578}, + {0.365607,0.778578}, + {-0.119374,0.153537}, + {-0.266104,-1.198807}, + {0.480855,0.786074}, + {-0.032335,-0.840292}, + {0.610415,0.164635}, + {-0.644738,-0.147418}, + {0.544935,0.824594}, + {0.702994,-1.244186}, + {0.383204,1.467042}, + {0.264960,-0.885661}, + {0.500914,-0.588794}, + {0.070323,0.125276}, + {-1.166675,-1.286120}, + {2.429481,-0.059230}, + {0.764725,-0.984194}, + {1.319205,0.802877}, + {0.667521,-1.156544}, + {-0.490046,-1.778711}, + {0.006985,0.759426}, + {-0.060767,0.767774}, + {-0.536098,-0.574244}, + {-0.438429,-1.187924}, + {-0.482447,-1.117342}, + {-0.450270,-0.012118}, + {-0.862294,0.414935}, + {0.111836,-0.764191}, + {0.176201,-0.840321}, + {0.003283,0.329039}, + {-1.081580,-0.831850}, + {-0.757816,-0.792817}, + {1.390379,0.527990}, + {-0.423941,-0.375055}, + {1.019446,0.722048}, + {-1.226189,-0.806075}, + {-0.767485,-0.457873}, + {0.492217,-0.548094}, + {0.691643,-0.508868}, + {0.141146,-0.799097}, + {-0.090612,0.367936}, + {-1.588061,-0.270815}, + {-0.235590,-0.137989}, + {-0.055501,0.515153}, + {0.710591,-0.228057}, + {-0.499118,0.081473}, + {0.605634,-0.712194}, + {-1.465126,-0.300375}, + {-1.525912,0.646441}, + {-0.143056,0.092698}, + {-1.615522,0.655455}, + {-0.920867,0.776885}, + {1.293398,0.375770}, + {-0.367088,0.290023}, + {0.060016,-1.396905}, + {-0.564301,-0.163519}, + {0.765264,0.454371}, + {0.251582,-0.413469}, + {-0.202361,-0.426122}, + {-0.059972,0.009915}, + {-0.818937,0.409182}, + {0.019321,1.223693}, + {-0.308784,-0.106641}, + {-0.245638,-1.287715}, + {-1.559027,0.473275}, + {-0.523531,0.009086}, + {-0.815917,0.794331}, + {1.557748,0.201257}, + {-1.003834,0.532228}, + {-0.108970,-0.321004}, + {0.324720,-1.294292}, + {-0.526747,1.138428}, + {-0.648496,0.837288}, + {0.145426,0.003744}, + {0.995406,-0.617984}, + {0.658038,-0.080149}, + {0.680441,-0.468064}, + {1.360485,0.405642}, + {-0.648630,0.199765}, + {1.421996,0.120768}, + {-1.160572,0.425829}, + {-0.534584,0.437195}, + {0.263973,1.083009}, + {0.084184,-0.731033}, + {-0.583261,-0.202720}, + {-0.567244,-0.031166}, + {-0.393410,0.011082}, + {0.471308,0.529559}, + {0.817988,0.803892}, + {-0.436848,0.012289}, + {0.134056,-0.016346}, + {-0.510996,-0.160355}, + {0.301328,0.155798}, + {0.135075,-0.240089}, + {-2.111101,-0.043898}, + {0.492706,-1.075578}, + {0.331122,-0.193177}, + {-0.337675,-0.385101}, + {0.600488,-0.607441}, + {-0.482480,0.488866}, + {0.510644,-1.348219}, + {-0.900080,-0.246883}, + {0.054556,-0.043343}, + {-2.185732,-0.132914}, + {-1.179464,-0.506427}, + {0.060865,0.023893}, + {0.465712,-0.293140}, + {0.600472,-0.542588}, + {0.339465,-0.734740}, + {0.066566,-0.329599}, + {-0.182971,-0.834260}, + {-0.759862,-0.649675}, + {0.503928,0.562654}, + {0.180099,-0.072681}, + {-0.298720,0.091572}, + {0.414829,0.685094}, + {-0.178731,1.490621}, + {-0.764312,-0.940243}, + {-0.609986,0.139467}, + {0.620076,-0.882397}, + {-0.662503,-0.243036}, + {0.756788,0.492556}, + {-0.192028,-0.450766}, + {0.351446,0.122595}, + {0.312300,-0.348844}, + {-0.844268,0.241385}, + {-0.245266,-0.747779}, + {-1.043476,-2.173372}, + {0.689560,0.287984}, + {-0.604039,1.340161}, + {-0.186566,-1.016223}, + {-1.636023,-1.237069}, + {-0.183189,0.475359}, + {0.632049,-0.473980}, + {-0.105737,0.324525}, + {-0.734339,-0.411750}, + {-0.959041,-0.918415}, + {0.467121,-0.942991}, + {0.819873,0.146195}, + {0.528463,-0.981180}, + {0.144697,0.795032}, + {0.104364,0.648283}, + {0.183268,0.614067}, + {-1.164645,0.810951}, + {0.009496,0.610751}, + {-1.300113,-0.583004}, + {-1.015675,0.243285}, + {0.097064,0.342813}, + {-0.245720,0.670790}, + {0.205629,0.159022}, + {-0.262508,-0.028034}, + {-0.035008,0.785832}, + {0.565660,0.072977}, + {0.857016,-0.270113}, + {0.136789,-0.121418}, + {-0.656906,0.866977}, + {0.154962,1.086797}, + {1.053022,-1.172792}, + {0.226542,0.180113}, + {0.245718,-0.555295}, + {-0.232891,0.136740}, + {-0.930222,0.234981}, + {-0.486962,-0.336185}, + {0.350798,0.599626}, + {0.574125,0.169891}, + {0.614118,-0.392546}, + {-1.180994,0.390905}, + {0.683221,0.485573}, + {-0.841497,0.916893}, + {0.493882,0.242793}, + {1.254721,-0.271983}, + {-0.534063,0.438921}, + {0.575408,-0.133856}, + {0.312608,-0.033845}, + {0.580808,-0.613817}, + {-0.784972,-0.028488}, + {0.021831,-0.097100}, + {1.458365,-0.869399}, + {-1.300065,0.760049}, + {0.248812,-0.160696}, + {0.577725,0.443818}, + {-0.187965,1.600714}, + {0.318288,-0.795075}, + {-0.721696,-0.233585}, + {0.273242,0.614688}, + {0.681000,-0.554330}, + {-1.334662,-0.151226}, + {0.090395,0.928536}, + {0.810563,0.579363}, + {-1.128333,0.111594}, + {1.434974,0.769472}, + {-1.029423,0.004195}, + {-0.400590,0.108051}, + {-0.108363,-0.294703}, + {2.176060,-0.435633}, + {0.755020,0.883148}, + {-0.455663,-0.243404}, + {0.367326,-1.926805}, + {-0.455835,-0.070141}, + {1.081696,0.103537}, + {0.413618,-0.241936}, + {-0.155372,-0.490682}, + {-0.621036,0.039829}, + {0.890303,-0.313264}, + {-0.023574,-0.297114}, + {0.149197,0.434404}, + {-0.685611,-0.688437}, + {0.206938,0.778492}, + {-0.031417,0.174300}, + {-0.246155,-0.983701}, + {0.342626,1.369090}, + {-0.431405,0.516606}, + {-0.058886,-0.776391}, + {1.360163,0.224372}, + {1.125009,0.009836}, + {0.803894,0.584153}, + {-1.066450,-0.134171}, + {0.881308,-0.764883}, + {0.171104,0.260482}, + {0.114729,-0.114913}, + {0.883607,1.086200}, + {0.699362,-0.659063}, + {-0.164816,-0.175345}, + {0.387135,-0.085228}, + {-0.572309,0.619865}, + {-0.012015,-0.860950}, + {-0.342715,0.692370}, + {-0.024062,-0.039234}, + {0.292654,0.782865}, + {0.060171,0.442951}, + {0.160037,-0.381519}, + {0.408238,-0.320343}, + {-0.342973,-0.880725}, + {0.737359,0.306119}, + {-0.536555,-0.356491}, + {0.838071,-0.060380}, + {0.019197,-0.215087}, + {0.281771,0.139607}, + {-0.133836,-0.948025}, + {0.064779,-0.167417}, + {-0.325938,0.106840}, + {0.447499,0.335119}, + {0.025073,0.284159}, + {-0.052734,0.106778}, + {-0.701789,-1.485622}, + {0.518739,-0.597975}, + {-1.716639,0.510981}, + {-0.148489,0.188995}, + {0.199804,0.565255}, + {0.503694,-0.249207}, + {0.351417,0.318152}, + {-0.004846,0.498401}, + {-0.527585,0.429634}, + {2.230256,0.657682}, + {1.005492,0.534070}, + {0.335269,-0.396652}, + {-0.245966,0.173556}, + {1.145575,0.588938}, + {0.250537,0.473746}, + {0.273775,-0.223929}, + {0.015710,-0.244761}, + {-0.725572,0.598468}, + {0.272714,0.218757}, + {-1.388789,1.100565}, + {0.552103,-0.509940}, + {-1.061048,-0.439544}, + {0.192437,0.828632}, + {-0.847671,1.023359}, + {0.366431,-0.588009}, + {0.237764,0.442998}, + {-0.676158,-0.309010}, + {-0.610452,-0.659422}, + {-0.259924,0.412575}, + {0.388464,0.697350}, + {0.043340,0.184411}, + {-0.572546,-0.447644}, + {-0.330020,0.540548}, + {-0.476494,0.090675}, + {0.428011,0.507960}, + {-0.296043,-0.255790}, + {1.215630,-0.318831}, + {-1.154660,-0.477923}, + {-0.262266,1.238092}, + {-0.608603,0.453266}, + {-0.032630,-0.939531}, + {-1.660462,-0.153632}, + {1.705682,-0.866847}, + {0.429987,-0.912308}, + {0.416998,0.929955}, + {1.043259,0.307132}, + {-0.982368,0.014721}, + {0.123933,1.132765}, + {-0.203176,-0.346598}, + {0.070922,-0.385330}, + {0.144019,0.165251}, + {0.096086,-0.226780}, + {0.793344,0.135213}, + {-0.393406,-0.119594}, + {1.126684,-1.053134}, + {-0.132630,0.517421}, + {0.300448,-1.340154}, + {-0.834868,0.378596}, + {-0.132590,-0.127355}, + {-0.544568,1.427218}, + {-0.443372,0.521400}, + {-1.030830,1.124109}, + {-1.434174,0.036345}, + {-0.448801,-0.849006}, + {1.295485,1.176937}, + {0.612869,-0.763780}, + {-0.369440,-1.146724}, + {-0.183304,-0.234196}, + {0.228224,-0.830902}, + {1.022613,0.744120}, + {0.025729,0.401274}, + {-0.291958,0.275394}, + {-0.232227,-0.344890}, + {-0.372023,-0.748359}, + {0.399097,-0.026262}, + {-0.980706,0.557794}, + {-1.242178,-0.160578}, + {0.807544,0.089148}, + {-0.313827,-0.935789}, + {0.877743,0.053390}, + {-0.471764,-1.392615}, + {0.816500,1.445653}, + {-0.016996,-0.915960}, + {-0.919171,-0.825732}, + {0.536946,0.833119}, + {-1.361314,-0.838853}, + {-0.180351,-0.307114}, + {0.720178,1.060531}, + {0.168912,1.130233}, + {1.082306,0.407076}, + {0.193384,0.074239}, + {0.505658,-0.337304}, + {-0.059033,-0.040496}, + {-0.238771,-0.195282}, + {-0.160034,1.174256}, + {1.572109,-0.122569}, + {0.170932,-0.122646}, + {0.407778,0.454863}, + {-0.016869,-0.027842}, + {0.533907,-0.455801}, + {1.171133,1.451143}, + {-0.221926,0.445829}, + {-0.343024,-1.134887}, + {-0.084294,-0.803381}, + {1.762508,0.510097}, + {0.422538,-1.828873}, + {-0.272140,-0.351999}, + {-0.432142,1.296591}, + {-0.804792,1.207034}, + {-0.903372,0.071198}, + {0.221699,-0.548004}, + {0.296788,-0.487708}, + {-0.892082,0.116939}, + {0.118529,-0.058040}, + {0.889249,0.038813}, + {-1.435339,0.345064}, + {0.196684,0.414290}, + {-1.174361,-0.538056}, + {-0.655841,0.448240}, + {0.472673,-0.022418}, + {0.940362,0.311382}, + {-0.835209,-0.613456}, + {1.186347,0.367963}, + {-0.745946,-1.281948}, + {0.614204,-0.405224}, + {0.981560,0.711532}, + {-0.869991,0.308124}, + {-0.141029,-0.054972}, + {-0.145974,0.432189}, + {0.451887,-0.259041}, + {-0.784348,-0.033713}, + {0.793608,0.102305}, + {-0.744519,0.342470}, + {0.486741,0.105299}, + {0.347823,-0.107864}, + {-0.331637,0.717920}, + {-0.508501,1.192128}, + {1.490978,0.162327}, + {0.736492,-0.127445}, + {-0.085074,-0.474562}, + {0.599451,-0.167800}, + {0.674386,0.323677}, + {-0.412837,-0.758638}, + {0.609945,-0.786243}, + {0.606302,0.662258}, + {0.070750,0.124316}, + {0.362489,0.853723}, + {-0.421579,-0.217535}, + {-0.769619,2.120710}, + {-0.686205,-1.002458}, + {0.847970,0.499804}, + {-0.240487,-1.200173}, + {-0.787843,-0.870082}, + {0.134999,-0.037935}, + {1.418077,1.020690}, + {0.255585,-0.903872}, + {0.517503,1.018629}, + {0.222738,-0.956358}, + {-1.235963,0.716474}, + {0.896358,1.292193}, + {0.622993,0.939205}, + {0.032065,0.164409}, + {-0.779169,0.659748}, + {-0.738374,0.133285}, + {-0.620870,-0.855214}, + {0.342903,0.804248}, + {0.339164,-0.133036}, + {-1.661026,-0.210091}, + {0.245305,-0.675406}, + {-0.984197,0.390112}, + {-0.061474,-1.162560}, + {-0.723975,0.336075}, + {0.796753,-0.371630}, + {-0.548010,-0.761000}, + {-0.603116,-0.658810}, + {0.990442,0.351586}, + {-0.086890,-0.036006}, + {0.092425,-0.586906}, + {-0.925900,0.593131}, + {-0.763373,-0.389790}, + {-0.938653,-0.603703}, + {1.319069,0.867869}, + {0.485223,0.597602}, + {0.488264,-0.833841}, + {0.550617,-0.599518}, + {-0.329951,0.815395}, + {0.408096,-0.163820}, + {0.427087,-0.036759}, + {0.177247,0.112508}, + {0.674777,-0.049031}, + {-0.068546,1.438730}, + {0.238263,-1.518472}, + {0.883496,0.410851}, + {-0.306168,-0.121973}, + {0.119223,0.124116}, + {-0.458455,0.205762}, + {0.819118,-0.420270}, + {-0.502089,0.258248}, + {-0.168138,0.489351}, + {0.807982,-0.264625}, + {0.084262,-0.505577}, + {-0.559426,0.054462}, + {0.257622,-0.205514}, + {0.063041,-0.447553}, + {0.373281,0.067113}, + {-0.407206,-0.939355}, + {0.143221,-0.451897}, + {0.706256,0.478611}, + {0.537206,0.751956}, + {0.186734,-0.620411}, + {0.745475,-1.471416}, + {0.698281,0.256863}, + {0.042234,-0.046608}, + {0.099521,-0.430961}, + {0.236487,0.680732}, + {0.928581,0.289094}, + {-0.110851,0.188157}, + {-0.222611,-0.812705}, + {-0.633681,0.426959}, + {1.240335,-1.514135}, + {0.889274,-0.903866}, + {0.435835,0.552663}, + {0.713055,0.641659}, + {-0.042562,-0.629798}, + {-0.218147,-0.486607}, + {0.534103,-0.801708}, + {0.241010,0.206161}, + {0.572140,-0.082834}, + {-1.509288,-0.142938}, + {0.613317,-1.136810}, + {-0.196998,-0.273118}, + {-0.692536,-1.013502}, + {-0.524362,-0.353001}, + {-1.413574,-0.317148}, + {-0.184674,-1.254237}, + {0.212553,-0.393970}, + {0.115187,-0.497395}, + {-1.156764,0.217090}, + {-0.424303,-0.518804}, + {0.414805,0.157648}, + {0.213679,-0.158910}, + {-0.174193,0.696145}, + {0.085286,0.143396}, + {-1.850393,0.435779}, + {-0.015959,-0.039908}, + {-1.196652,-0.512413}, + {0.461147,1.083615}, + {1.188726,-1.253006}, + {0.191977,0.248884}, + {-0.633004,0.193534}, + {0.030327,0.447737}, + {-0.264705,0.787837}, + {0.010620,0.245484}, + {-0.824799,-0.704581}, + {-0.850004,0.204610}, + {0.381113,-0.610533}, + {0.471917,1.571607}, + {1.071030,-0.224993}, + {-0.384820,-0.304042}, + {0.283926,-0.337624}, + {-0.030392,-0.446234}, + {0.380697,1.115396}, + {-0.572464,0.561788}, + {0.625570,0.831812}, + {0.385308,0.863936}, + {-0.754364,0.169919}, + {0.019587,-0.256785}, + {0.572060,0.074947}, + {-0.701087,-0.235522}, + {-0.048703,0.055669}, + {1.222353,0.777241}, + {0.332950,0.082754}, + {-0.367895,-0.645924}, + {0.770417,0.554187}, + {-0.458786,-1.031422}, + {0.314500,-0.322402}, + {-0.683719,-0.429777}, + {-1.553851,-0.570942}, + {-0.067857,-0.160216}, + {2.145920,0.854215}, + {0.213836,-0.315033}, + {-0.513806,-0.416544}, + {-1.457721,-1.141119}, + {0.886807,-0.392147}, + {-0.193698,-0.206875}, + {0.548596,-0.465798}, + {0.215522,0.180953}, + {-0.391465,-0.142202}, + {0.902257,0.158063}, + {0.408777,-0.224758}, + {0.446692,0.091443}, + {-0.094655,0.081225}, + {0.499235,0.958718}, + {0.761380,-0.531675}, + {0.276579,1.203927}, + {0.276615,0.189762}, + {-0.100258,-0.732587}, + {-0.027769,1.596871}, + {0.462540,0.379880}, + {-0.341576,1.767737}, + {0.394437,-0.167993}, + {-0.105307,-0.509844}, + {0.334850,-2.520104}, + {0.845128,-0.104068}, + {-0.740984,-0.026126}, + {-0.974643,-0.280273}, + {-0.134239,-0.078789}, + {-0.299124,-0.863529}, + {0.106515,0.170939}, + {-0.927394,0.870161}, + {-0.491114,-1.917638}, + {-0.529767,-0.057114}, + {0.786100,-0.565618}, + {0.176072,-0.842280}, + {0.326239,-0.605491}, + {0.116318,1.170250}, + {0.644626,0.571773}, + {0.232028,-1.300912}, + {0.588283,0.271257}, + {-0.906647,-1.277791}, + {0.521843,-0.527216}, + {1.442306,0.379763}, + {0.236952,1.052319}, + {-0.295295,-0.568414}, + {0.242369,-0.208334}, + {-0.513807,-0.995215}, + {0.709065,0.862066}, + {-0.881110,-0.392734}, + {-0.341385,-0.818876}, + {-0.562235,-0.774610}, + {-0.383367,-0.394595}, + {0.193563,0.074610}, + {1.080435,0.606053}, + {0.541249,1.153279}, + {-0.507145,-0.367372}, + {-0.179289,0.029067}, + {0.098487,-0.117080}, + {-0.648908,1.440715}, + {0.227369,0.898461}, + {0.080062,-0.499544}, + {0.644433,-0.375275}, + {1.389011,0.012401}, + {-0.264708,-0.741045}, + {0.537436,-0.075225}, + {1.106610,-0.549125}, + {1.258275,-0.013265}, + {0.728976,0.175113}, + {-1.886547,-0.858978}, + {-0.781953,-0.791226}, + {0.122237,-0.660890}, + {-1.264703,-0.283197}, + {0.103200,-0.239052}, + {-0.243478,0.149221}, + {-0.144997,-0.203846}, + {-1.067080,-1.526123}, + {-0.976317,0.443019}, + {-1.106013,0.024286}, + {-0.311371,0.312037}, + {0.122867,-0.212564}, + {-1.891145,0.276717}, + {-0.898165,-0.258266}, + {0.160126,-1.155622}, + {0.322655,-0.124973}, + {0.709720,-0.446937}, + {0.646654,-0.041224}, + {-0.212961,0.280510}, + {0.377353,0.020557}, + {-0.559193,0.356275}, + {-0.304649,0.801474}, + {0.039679,-1.071028}, + {0.201060,0.268840}, + {0.060299,0.506095}, + {0.468796,0.933767}, + {-0.161046,0.352827}, + {0.444057,-0.026569}, + {-0.686397,0.188762}, + {-0.335728,0.854376}, + {1.571248,-0.778097}, + {-0.297224,-1.112280}, + {-0.298702,0.212694}, + {0.753050,-0.774688}, + {0.772973,0.801142}, + {1.006190,0.195367}, + {0.333846,-0.480112}, + {-0.391853,1.243410}, + {-0.695698,-0.290131}, + {-0.739155,-0.888427}, + {-0.332246,-1.694342}, + {-0.872134,-0.491913}, + {-1.196152,-0.951224}, + {0.677412,0.228122}, + {0.078804,0.855733}, + {0.835586,0.425326}, + {-0.229803,-0.248342}, + {-0.718329,-0.707283}, + {-0.509813,-1.200162}, + {0.225505,-1.007218}, + {-0.328166,-0.713028}, + {0.464166,0.043179}, + {0.309117,1.116584}, + {0.123684,0.813080}, + {-0.557566,0.056690}, + {0.771158,0.111089}, + {-0.102040,0.365176}, + {0.283581,-0.304576}, + {0.965047,0.603779}, + {-0.888726,0.478438}, + {0.477779,1.650476}, + {-1.743258,-0.545295}, + {1.377725,-0.340541}, + {-0.086465,0.288027}, + {0.172055,-1.416793}, + {-0.156652,-1.552419}, + {1.449604,-0.803632}, + {0.172637,0.621346}, + {0.793824,1.127283}, + {-0.470779,0.819345}, + {0.854335,-0.217494}, + {1.238408,-0.227297}, + {-0.446910,-0.251604}, + {-0.124721,0.631903}, + {1.355742,-0.253180}, + {0.521698,-0.380554}, + {0.610522,-0.644701}, + {-0.081964,0.075793}, + {-0.023329,1.079615}, + {0.035329,0.305532}, + {0.833652,0.329381}, + {1.248972,-0.520503}, + {1.090623,-0.312108}, + {-0.298609,0.072040}, + {-1.133040,-1.182362}, + {0.439116,0.599685}, + {-0.255228,-0.318038}, + {-0.027322,0.405769}, + {-0.892907,1.076022}, + {-0.262922,0.302096}, + {-0.920155,-0.097186}, + {-0.540438,1.415810}, + {0.272013,-1.071177}, + {-1.292397,-0.727006}, + {-0.061905,-0.763598}, + {-0.941549,0.110682}, + {-0.295776,0.793431}, + {-0.169404,2.201666}, + {-0.222637,-0.543007}, + {-0.231419,1.018982}, + {0.431675,-0.674150}, + {0.647789,1.313624}, + {-0.264086,-1.589729}, + {-0.501708,1.108352}, + {-0.208768,-0.310074}, + {-0.597616,0.571167}, + {0.001134,-0.028259}, + {1.776513,0.322038}, + {0.000932,0.887187}, + {-0.308110,-0.292049}, + {-0.532540,-0.401817}, + {0.489140,-0.274389}, + {2.617062,0.127502}, + {0.147567,1.240201}, + {0.663675,0.555925}, + {-0.074294,-0.891471}, + {-0.052708,1.536838}, + {0.022298,-0.206741}, + {0.479854,0.468749}, + {-0.554820,1.208232}, + {0.082508,0.244005}, + {0.308910,0.266430}, + {-0.474058,0.730188}, + {-0.234200,-0.862644}, + {0.952488,0.374155}, + {-1.407313,0.324058}, + {0.255768,0.333183}, + {-1.409944,0.885110}, + {-0.133868,0.923739}, + {0.365945,-0.286467}, + {-0.173753,-0.130918}, + {-0.127021,-0.366972}, + {0.038457,0.743113}, + {-0.478880,-0.722286}, + {-0.422107,-0.391745}, + {1.431973,1.075899}, + {0.065443,0.277849}, + {-1.101839,-0.748236}, + {0.291738,0.774096}, + {-0.408096,0.206278}, + {-1.180762,0.039864}, + {0.986053,-0.063561}, + {0.898749,0.024366}, + {0.206499,0.151574}, + {0.542112,0.681856}, + {0.773880,0.684502}, + {-0.241328,-0.031931}, + {-0.382695,-0.326442}, + {-0.849252,-0.163569}, + {-0.224038,0.104381}, + {-0.271735,0.180993}, + {-0.297649,1.141589}, + {-0.707010,-0.959005}, + {0.401963,-0.582866}, + {-0.715231,-0.495908}, + {0.530290,-1.238800}, + {-0.754427,0.394484}, + {0.419279,-1.220995}, + {0.230175,0.787427}, + {0.371875,-0.606294}, + {0.450371,-0.675309}, + {0.171612,-0.392663}, + {0.044028,0.193995}, + {0.390951,0.897858}, + {0.462471,-1.607671}, + {1.295156,0.465999}, + {0.793000,-0.411269}, + {0.521132,-0.780113}, + {0.533996,-0.337154}, + {0.465286,0.327814}, + {0.575773,0.419234}, + {-0.030753,-0.501412}, + {-0.575181,-1.392250}, + {0.464516,0.592014}, + {-1.051143,0.268391}, + {0.131935,0.110597}, + {0.074115,0.640275}, + {1.141666,-0.715042}, + {0.981527,0.398484}, + {-0.318100,-0.014155}, + {0.180788,-2.372129}, + {-0.228512,-1.445935}, + {0.604143,0.511910}, + {0.061448,0.220588}, + {1.285856,0.755178}, + {-0.007362,0.382650}, + {-0.121693,-1.355384}, + {0.384877,1.724619}, + {0.501171,0.169846}, + {0.072657,1.420837}, + {-0.653957,-1.801468}, + {1.157954,-0.653464}, + {-0.086409,0.466198}, + {-0.284619,-1.509457}, + {0.250620,0.007603}, + {-0.493596,-0.521283}, + {0.052350,0.242415}, + {-0.662703,0.329744}, + {0.270573,0.839284}, + {1.071362,-1.329600}, + {1.398703,-0.282566}, + {-0.731533,1.666659}, + {1.288748,0.120392}, + {-0.275091,-0.249067}, + {0.385583,0.034420}, + {-0.019935,-0.619918}, + {0.126886,0.241649}, + {-0.634954,-0.683893}, + {-0.689498,-0.555893}, + {0.355284,-0.081731}, + {-1.040687,-0.136149}, + {-0.539910,-1.308056}, + {-0.577548,0.394734}, + {-1.345688,0.532236}, + {-0.139622,0.230896}, + {0.266085,-0.109778}, + {0.720346,1.119455}, + {0.079954,0.124289}, + {0.511923,-1.657132}, + {-2.248034,0.251991}, + {1.364589,0.688028}, + {0.888909,-0.151714}, + {-0.569128,0.357256}, + {-0.771377,1.271462}, + {-0.737187,-0.032195}, + {-0.719654,0.068332}, + {-0.741507,-0.004577}, + {-0.437575,0.452222}, + {0.046679,0.449842}, + {-0.220268,-0.231133}, + {0.487091,-0.782256}, + {-0.588303,-0.523988}, + {0.078759,0.662810}, + {1.248130,-0.793583}, + {0.508679,0.242683}, + {0.870960,-0.005896}, + {0.322792,-0.772706}, + {-0.837291,-0.424434}, + {-0.273942,-0.068730}, + {-0.996061,0.634835}, + {-0.325385,0.366167}, + {-1.601558,-0.215569}, + {0.865809,-0.026148}, + {1.361558,-0.115469}, + {-0.588242,-0.102336}, + {-0.387966,0.323272}, + {0.289584,-0.504165}, + {-0.754503,-1.114553}, + {-0.353904,-0.014974}, + {-0.948798,0.383592}, + {-0.060121,-1.007894}, + {-0.209254,0.035108}, + {-0.191868,-0.327112}, + {-0.872958,1.449912}, + {1.215036,0.727058}, + {-0.851767,0.775217}, + {0.370956,-0.452360}, + {-0.325553,-0.956322}, + {-0.341459,1.281000}, + {-0.094430,-0.289030}, + {0.272220,0.131684}, + {-0.490177,-0.806252}, + {-0.099482,0.801627}, + {0.660006,-0.111388}, + {-0.412095,0.392647}, + {-0.019833,0.332668}, + {-0.076947,1.499139}, + {-0.243294,1.683990}, + {-0.671076,-0.433132}, + {0.167768,-0.058623}, + {1.324849,0.390514}, + {-0.069259,-1.476604}, + {-0.201312,-0.076595}, + {0.817829,-0.669267}, + {0.271931,0.149985}, + {-0.209551,-0.803738}, + {0.823791,-0.880931}, + {0.945366,-0.396813}, + {-0.636227,0.164765}, + {-0.560128,1.371587}, + {-0.210411,-0.871558}, + {0.049073,0.899454}, + {-0.426285,0.802485}, + {0.481298,0.695859}, + {-1.158734,0.585655}, + {0.344093,-0.512270}, + {0.837968,0.186502}, + {0.446366,-0.555741}, + {0.389203,-0.792521}, + {-1.165375,-1.629469}, + {-1.254712,0.471550}, + {0.689930,1.197958}, + {-1.004811,0.105754}, + {0.841131,0.147341}, + {0.154420,-0.297913}, + {-0.796042,-0.454021}, + {-1.231614,-1.187511}, + {-1.109815,-0.141912}, + {-0.566546,-0.288210}, + {-0.661025,0.127627}, + {-1.017198,-1.001861}, + {1.186309,0.060379}, + {-0.220627,1.019218}, + {-1.293678,-0.087054}, + {-0.025609,0.418478}, + {0.771157,-0.681107}, + {0.539560,0.233353}, + {-0.378370,0.264538}, + {1.893478,-0.101454}, + {0.248258,-0.000550}, + {-0.031156,-0.785691}, + {1.781812,-1.292306}, + {1.084657,0.507894}, + {-0.699208,0.885340}, + {1.285794,-0.619386}, + {0.955586,-0.121447}, + {-0.914452,-1.178647}, + {-0.242399,-0.427685}, + {-0.000717,0.064139}, + {0.574391,-0.693162}, + {0.485580,-0.614569}, + {-0.408661,-0.616323}, + {-0.464543,0.219753}, + {0.765718,0.874867}, + {1.166937,-0.037645}, + {-0.387840,0.839810}, + {-0.522687,1.260869}, + {0.079230,0.752776}, + {-1.317984,1.303184}, + {1.280048,0.412472}, + {1.609177,-1.354228}, + {1.037420,0.014540}, + {0.221589,0.058322}, + {-0.629552,0.832290}, + {-1.314747,0.685569}, + {0.279436,-0.743734}, + {-1.036796,0.905691}, + {0.495922,0.253242}, + {-0.916021,0.154075}, + {0.864485,0.140135}, + {-0.350216,-0.107206}, + {-0.536267,0.213086}, + {1.398571,-0.305908}, + {-1.517443,-0.348266}, + {0.316594,0.475011}, + {-0.682424,0.439457}, + {-0.443305,1.044724}, + {-0.515239,-0.514528}, + {-1.187287,0.148757}, + {0.286934,-0.102590}, + {0.258621,-0.932940}, + {1.392701,-0.258996}, + {-0.247044,0.662986}, + {-0.039077,-0.511042}, + {0.844728,-0.217617}, + {0.655759,-0.440128}, + {-0.413628,-0.925661}, + {-0.488104,-1.044892}, + {-0.543050,0.155919}, + {0.817307,0.193785}, + {0.341966,0.009039}, + {0.574199,0.718193}, + {-0.179957,-0.492905}, + {0.487152,0.524160}, + {0.329158,-0.281555}, + {-0.816659,-1.487422}, + {0.535622,0.409912}, + {0.252481,-0.624546}, + {-0.108432,-0.823732}, + {0.302554,-1.011194}, + {-0.425776,-1.472152}, + {-0.398910,-0.198658}, + {-0.068758,-1.227234}, + {0.126371,-0.758421}, + {0.343071,-0.216133}, + {0.001535,1.505001}, + {0.112153,0.738745}, + {-1.513525,-1.478555}, + {0.939067,1.193568}, + {0.382158,-0.305531}, + {-0.777582,-1.155642}, + {-0.672354,-0.312022}, + {-0.374348,-1.352798}, + {-0.418581,0.634617}, + {0.217850,-0.116165}, + {0.432181,0.426225}, + {-0.889372,0.893485}, + {0.855687,-0.582910}, + {-0.438450,-0.263930}, + {-0.466874,-0.869459}, + {0.040757,-0.535451}, + {-0.140064,0.789127}, + {-0.027951,0.105940}, + {-0.437942,-0.211395}, + {-0.040889,-0.017258}, + {0.338753,0.833301}, + {0.111661,-0.175934}, + {0.984011,0.077959}, + {-0.244420,0.211986}, + {-1.269522,0.063911}, + {0.409668,-0.303990}, + {0.462926,1.021879}, + {0.011614,-0.284044}, + {1.020808,0.476647}, + {0.196290,0.617474}, + {-1.098523,0.371501}, + {0.161323,-0.313071}, + {-0.002902,0.397897}, + {-0.356512,0.045680}, + {0.279592,-0.533235}, + {-0.475045,0.692805}, + {-0.089288,-0.703191}, + {-0.405232,-0.892280}, + {1.186783,0.798136}, + {-1.149640,-0.304031}, + {-0.243771,-0.696568}, + {-1.109856,0.231693}, + {0.587465,-0.480350}, + {0.184300,0.622183}, + {0.153163,0.512540}, + {1.675888,0.477305}, + {0.698217,0.670234}, + {0.860644,1.171471}, + {-0.330617,0.580491}, + {-0.058262,-0.788790}, + {-0.358326,-0.426058}, + {0.905134,-0.409635}, + {-0.008586,0.990271}, + {0.929488,-0.596337}, + {-1.358305,0.391919}, + {0.902404,0.342821}, + {-0.063962,0.618381}, + {-0.053813,0.301008}, + {0.297584,-0.666505}, + {0.556545,0.163475}, + {-0.105724,0.005318}, + {0.756775,0.828292}, + {-0.274629,-0.880320}, + {-0.476757,-1.149811}, + {1.127103,-0.294822}, + {-1.437952,0.298334}, + {0.907496,0.739951}, + {0.482075,0.004954}, + {0.157887,-0.816916}, + {-1.104784,0.063870}, + {-0.724938,-0.327697}, + {-0.487298,0.975783}, + {-0.065203,0.869972}, + {-0.211487,-0.462389}, + {1.094010,0.177366}, + {0.291395,-1.629667}, + {0.319282,0.785872}, + {1.229602,0.954910}, + {-0.342436,-0.978418}, + {0.352808,-0.930560}, + {0.347757,-0.981736}, + {0.298532,-0.077863}, + {-0.714535,-0.393789}, + {-0.333766,-0.139255}, + {-0.418941,0.359123}, + {-0.645184,0.861929}, + {-0.722475,0.301444}, + {-0.583318,1.352369}, + {-0.712937,0.243635}, + {0.440878,-0.827122}, + {0.327224,-0.062067}, + {0.186287,1.258463}, + {-0.729241,0.868902}, + {0.541857,-0.200516}, + {1.156841,-0.049354}, + {1.070085,-0.139319}, + {0.275765,0.779653}, + {0.355802,-0.444176}, + {-0.215164,1.591130}, + {0.410285,-0.761158}, + {-0.921834,-0.002490}, + {-0.552404,-0.660768}, + {0.405438,0.139289}, + {-0.275428,-0.582028}, + {0.727740,-0.766058}, + {-0.306953,-0.280078}, + {0.816312,-0.261072}, + {-0.199058,0.147132}, + {-0.360431,1.125081}, + {1.191538,-0.047433}, + {0.305817,-0.633319}, + {-0.494003,0.488029}, + {0.212671,0.098168}, + {0.210869,-0.461609}, + {-0.134279,0.437562}, + {0.343639,-0.292114}, + {-0.041375,-0.808615}, + {-1.049076,0.685913}, + {-0.665760,-1.010501}, + {-0.316509,-0.003953}, + {0.009980,0.599501}, + {0.638152,-0.300940}, + {-1.337720,-1.392983}, + {-0.275772,0.226258}, + {-0.550300,0.251820}, + {-0.584194,0.093470}, + {0.610120,1.230993}, + {-0.976958,0.361009}, + {-0.875544,1.373339}, + {0.287035,-0.431066}, + {-0.467716,0.616202}, + {-0.521935,-1.111703}, + {-0.098289,-0.170971}, + {-0.189521,-0.430798}, + {0.994687,-0.127269}, + {0.197679,0.364513}, + {-0.553761,-1.362114}, + {-1.599143,0.283164}, + {0.343200,0.241993}, + {0.950041,0.135606}, + {-0.496251,0.947582}, + {0.112208,-0.474788}, + {-0.043567,-0.201243}, + {-0.152120,0.819050}, + {-0.698148,-0.987049}, + {0.472844,0.167428}, + {0.805574,0.137483}, + {0.993595,0.361435}, + {-0.755927,0.329879}, + {-0.477493,0.425378}, + {0.513390,0.862967}, + {-0.370640,-1.203726}, + {0.303774,0.888996}, + {-0.531538,-0.061148}, + {0.292513,1.123151}, + {-1.375406,0.912479}, + {0.874095,0.312105}, + {0.285703,1.070449}, + {-0.327598,0.204123}, + {0.514364,-0.591838}, + {0.187292,0.151885}, + {-0.305341,0.797145}, + {0.512371,-0.430627}, + {-0.263249,1.117044}, + {1.457063,0.655659}, + {0.400834,-0.687060}, + {-0.534341,0.199095}, + {-0.670479,-0.049629}, + {0.170424,0.355076}, + {-0.089197,-0.199899}, + {-0.516640,-0.098609}, + {-1.415132,-0.986232}, + {-0.543245,-0.612453}, + {1.700407,-0.111663}, + {-0.333996,0.941663}, + {-0.558882,0.628745}, + {-0.189070,-0.269156}, + {-0.092103,0.289742}, + {1.721874,-0.613049}, + {0.400596,-1.689893}, + {0.029330,0.780505}, + {0.702801,-1.886583}, + {0.527904,1.344383}, + {-1.532567,-0.282722}, + {-0.187656,1.032522}, + {-0.563567,0.352977}, + {1.552724,1.036609}, + {-0.362367,0.884433}, + {0.907224,-0.245049}, + {0.968850,0.022296}, + {0.991932,-0.528220}, + {-0.574841,-0.667893}, + {-1.285195,-0.410222}, + {0.961984,0.592525}, + {0.851798,-0.802477}, + {-1.049946,-0.207182}, + {0.797470,-0.161487}, + {-0.749814,0.644751}, + {1.147914,0.191578}, + {1.094925,-0.009702}, + {-0.016473,-0.192798}, + {-0.479182,-0.608849}, + {-0.521973,0.822191}, + {-0.532269,0.303592}, + {1.239154,0.041944}, + {0.389138,0.091142}, + {-0.663000,0.328936}, + {0.342085,-0.836875}, + {-1.076007,-0.660702}, + {-0.134030,0.851663}, + {0.024222,0.084575}, + {-1.902667,-0.772045}, + {-0.584827,-0.179968}, + {0.072428,0.119199}, + {-0.342968,0.700217}, + {-0.467256,-0.216460}, + {0.245841,0.459667}, + {-0.569716,-0.968906}, + {-0.425136,-0.329992}, + {-0.290409,0.687952}, + {0.225955,0.172615}, + {1.003682,-0.248519}, + {-0.114798,1.216756}, + {1.860231,-0.053088}, + {0.106746,-0.618765}, + {0.288442,-0.650337}, + {0.718256,-0.694432}, + {-0.331457,-0.719543}, + {1.068076,0.148336}, + {-0.096353,-0.028651}, + {0.897863,-0.741848}, + {0.412489,1.038703}, + {-0.114692,-0.055749}, + {0.139043,-0.040275}, + {0.638080,-0.220795}, + {-0.633578,1.226884}, + {-0.251365,1.662993}, + {0.225500,0.307234}, + {-0.602385,-1.321478}, + {0.034489,-0.600173}, + {-0.758390,-0.563067}, + {-0.284530,-0.408226}, + {-0.579724,1.090416}, + {0.564264,-0.546693}, + {1.299442,-0.259779}, + {0.540747,0.139655}, + {0.950786,0.132223}, + {-0.293267,-0.682357}, + {-0.926701,1.267867}, + {-0.861209,-0.469813}, + {0.266995,0.266466}, + {-0.336500,0.231023}, + {-0.345643,0.297993}, + {-1.065829,-0.717767}, + {0.337612,-0.915230}, + {0.091474,0.162675}, + {0.308361,-0.094296}, + {0.577293,-1.348639}, + {-0.284413,0.283653}, + {0.357282,0.494051}, + {1.245152,0.281545}, + {-1.431170,-0.390320}, + {0.181289,0.594357}, + {0.532038,-1.703506}, + {-0.080299,-0.145390}, + {0.706124,0.883663}, + {-0.383556,-0.058734}, + {-0.778841,-0.343133}, + {0.466969,-0.233412}, + {0.438538,-0.476148}, + {0.583980,-0.010636}, + {-0.877575,0.042320}, + {0.360100,-1.169871}, + {-0.088032,-0.398826}, + {-0.476665,-0.290729}, + {0.290340,0.526910}, + {0.348399,-0.419803}, + {0.846750,0.362483}, + {1.325840,0.694740}, + {-0.345673,-0.490818}, + {-0.280731,-0.855840}, + {1.003652,0.167563}, + {0.046835,0.199770}, + {-0.137995,0.109839}, + {1.236355,0.414718}, + {0.076375,0.187022}, + {0.540177,1.332342}, + {-0.536548,0.170836}, + {-0.538823,-0.787885}, + {-0.030721,-0.152529}, + {-0.197468,-0.453547}, + {-0.860949,-0.359616}, + {-0.076259,-0.168284}, + {0.128913,0.374510}, + {0.491855,0.338274}, + {0.841089,0.539245}, + {-0.918791,-0.642914}, + {0.722143,0.109400}, + {-1.613346,0.192994}, + {0.138179,0.384452}, + {0.217286,0.484391}, + {-0.617670,0.552131}, + {-0.314759,1.396384}, + {0.680449,0.920245}, + {-0.776923,0.591054}, + {0.357123,0.348420}, + {-0.552000,-0.959852}, + {-0.457786,-0.012405}, + {0.194398,0.372935}, + {-1.158776,-0.739099}, + {-0.119856,0.695673}, + {-1.044994,0.542655}, + {-0.057589,0.663487}, + {-0.637497,1.383641}, + {0.841195,1.016650}, + {-0.227216,0.350548}, + {-0.666675,0.297665}, + {-0.837852,0.428705}, + {-1.515275,-0.555662}, + {-0.151261,-0.712636}, + {-0.221931,-0.513521}, + {-1.443995,0.844288}, + {0.313953,0.097811}, + {-0.204681,-0.430877}, + {0.980967,-0.423177}, + {0.232925,-0.543011}, + {0.306555,-0.317551}, + {-1.105006,-0.200727}, + {-0.491818,-0.043239}, + {-0.024608,-0.174225}, + {0.033530,2.148918}, + {-0.623382,-0.443777}, + {-1.073524,0.750841}, + {-0.120307,1.009256}, + {0.383676,-0.259419}, + {-0.313467,-1.256964}, + {-0.422919,-0.188656}, + {1.284099,0.681505}, + {0.223126,-0.031646}, + {0.306322,-0.620767}, + {0.442285,0.769126}, + {-0.724718,-0.051262}, + {0.239249,-0.361381}, + {0.330321,-0.151744}, + {-0.732583,0.357697}, + {1.352363,0.469735}, + {-0.520244,-1.172771}, + {-0.830415,0.617391}, + {-0.345373,-0.338332}, + {-0.195310,1.495399}, + {-0.303452,-0.330434}, + {-0.858515,0.736562}, + {-0.299252,0.080389}, + {1.345959,-0.872637}, + {0.074448,-0.237625}, + {1.059866,-0.609576}, + {-0.575313,0.866044}, + {-0.077763,1.006470}, + {-1.001055,0.181480}, + {0.602403,-0.828705}, + {0.704641,-0.635900}, + {0.125989,0.812281}, + {-0.020565,-0.376771}, + {0.086654,0.473210}, + {-0.807156,-0.842660}, + {1.800373,0.552391}, + {-0.130840,0.401600}, + {1.213215,0.407588}, + {0.032867,0.902099}, + {-0.647827,-0.660410}, + {0.139245,0.572428}, + {0.503025,-0.013337}, + {-0.345741,-0.790109}, + {1.992791,-0.453862}, + {-1.025935,0.141881}, + {1.284579,-0.440883}, + {-0.079254,0.984268}, + {0.774126,0.771004}, + {0.446898,0.009177}, + {-0.145382,0.156029}, + {0.640419,1.548422}, + {0.417477,-0.537218}, + {-0.166369,-1.168204}, + {-1.576589,-0.006857}, + {-0.568257,0.799393}, + {-0.097194,0.950091}, + {0.517471,-1.411220}, + {0.238796,-0.516115}, + {0.520339,0.649062}, + {0.066756,-0.377378}, + {-0.337598,0.506655}, + {0.082550,-0.452063}, + {0.348994,0.931952}, + {-0.986407,-0.704322}, + {-0.127239,0.598529}, + {0.326580,-0.100612}, + {-0.479889,-0.405277}, + {-1.261540,0.389325}, + {-0.326830,-0.479964}, + {0.362882,0.916080}, + {0.351699,0.236263}, + {0.339159,-0.569330}, + {0.193999,0.722854}, + {-0.383134,-0.307248}, + {0.983325,-0.083201}, + {0.134546,1.185024}, + {0.453730,0.055284}, + {0.699766,-0.295923}, + {-1.300227,2.106761}, + {1.649077,0.568909}, + {1.754100,-0.494836}, + {1.533405,0.734520}, + {1.171021,0.482031}, + {1.401353,0.104870}, + {0.365542,-1.022673}, + {-0.297745,0.086303}, + {0.811492,0.413641}, + {-0.006258,0.257878}, + {0.025602,0.267244}, + {0.302591,0.729528}, + {1.143575,0.702035}, + {0.878501,0.429343}, + {-0.568291,1.009797}, + {0.475038,-0.837439}, + {0.463692,0.574354}, + {-0.262200,-0.340073}, + {-0.092665,0.807504}, + {0.502834,-0.559747}, + {-0.405528,0.310426}, + {0.892265,0.595287}, + {1.606894,-1.747076}, + {-0.552482,0.153944}, + {-1.140951,0.420524}, + {-0.002796,0.745166}, + {1.856330,-0.471658}, + {-0.278099,0.079846}, + {-0.859602,0.915874}, + {-0.131552,-0.316820}, + {-0.384475,-0.141175}, + {1.036717,-0.801126}, + {-0.243963,-0.971380}, + {-0.096054,0.106090}, + {-1.006589,0.633260}, + {1.195284,0.049783}, + {1.377535,0.570432}, + {0.727388,0.842091}, + {-0.591521,-0.187649}, + {0.435684,-0.688750}, + {-0.294460,0.716584}, + {1.215540,-0.474825}, + {-0.696852,-1.070607}, + {-0.396589,0.554698}, + {0.089609,-0.423692}, + {-1.348885,-0.346625}, + {0.203519,0.440114}, + {0.743717,-0.894146}, + {-0.159810,-0.334923}, + {0.682591,-0.546565}, + {-0.712575,0.476973}, + {-1.104661,-0.456355}, + {-0.479537,0.251457}, + {-1.174705,-0.052909}, + {-0.352342,0.708805}, + {0.131579,-0.078383}, + {0.418601,0.558629}, + {-0.035404,-0.244368}, + {0.264606,-1.039640}, + {-0.949351,0.500103}, + {0.788048,0.890085}, + {-0.089676,0.665759}, + {-0.926300,0.785008}, + {0.511916,0.407786}, + {0.421369,-0.501708}, + {0.673039,-0.920122}, + {-1.286538,-0.354717}, + {0.248195,0.038161}, + {-0.205990,1.080045}, + {-0.217009,0.702000}, + {-0.276423,0.807365}, + {-0.426657,0.829259}, + {1.389469,-0.172937}, + {0.242023,0.337750}, + {0.111603,-1.317547}, + {-0.474308,-0.557545}, + {-0.943573,0.433703}, + {0.637707,-0.325782}, + {0.288693,0.683452}, + {0.404386,0.934451}, + {0.280019,0.234267}, + {0.235777,-0.732291}, + {0.679205,-0.897298}, + {-0.633602,1.471122}, + {0.135238,0.129816}, + {-0.615491,-0.198805}, + {-0.064142,-0.264310}, + {-0.386053,-0.523291}, + {0.905432,-0.812653}, + {-0.251535,0.119324}, + {0.544902,-1.468042}, + {0.940112,-1.020098}, + {0.261122,0.539496}, + {-1.028811,-1.062924}, + {-0.961214,1.210793}, + {0.440965,-0.383521}, + {-0.471681,-0.646258}, + {-0.640999,0.630283}, + {-0.593379,0.907085}, + {-0.559648,-0.906520}, + {0.131252,0.190629}, + {-1.155937,0.469075}, + {-0.774295,0.491694}, + {-0.391053,0.660751}, + {0.248040,0.038323}, + {-0.603211,0.265228}, + {-1.222478,-0.223261}, + {1.022423,0.355851}, + {0.285110,0.398718}, + {1.496522,-0.815689}, + {0.651223,-0.214058}, + {1.483784,-0.345858}, + {0.338015,-0.489712}, + {-0.046722,-0.437334}, + {0.159075,-1.718044}, + {-0.190740,-0.099638}, + {0.061885,0.049811}, + {0.679428,-0.232491}, + {0.435870,-0.001996}, + {1.027309,-0.975858}, + {-0.014691,-0.487557}, + {-0.295080,0.752236}, + {-0.274321,0.469497}, + {-0.517557,1.067698}, + {0.064585,0.127431}, + {-1.046478,-0.199519}, + {0.243379,0.939476}, + {0.061894,-0.918354}, + {0.182123,0.572483}, + {0.530045,0.686889}, + {-0.039721,-0.301593}, + {1.310340,-1.022175}, + {0.167251,-0.342483}, + {-0.873160,0.739288}, + {1.084948,-1.081913}, + {0.987790,-0.737875}, + {1.115765,0.832754}, + {0.710369,0.565371}, + {1.222391,-0.328709}, + {0.981649,-0.055245}, + {-0.777509,-1.846205}, + {0.368035,0.488807}, + {-1.365216,0.569074}, + {1.124465,0.671338}, + {0.992709,0.751788}, + {-0.470874,0.278596}, + {0.636061,-0.169493}, + {0.359905,0.085555}, + {0.222456,0.382605}, + {-1.173254,0.201384}, + {0.279053,-1.466444}, + {-0.551690,1.345065}, + {-0.510876,-0.198530}, + {0.495703,-0.623988}, + {0.084364,0.323890}, + {-1.999895,-0.270420}, + {-0.076837,1.042714}, + {-0.752037,0.184538}, + {0.788181,-0.585590}, + {-0.331946,0.352529}, + {-0.573372,0.687863}, + {0.138512,-0.567696}, + {-0.295121,-0.726297}, + {-0.543169,0.137349}, + {-1.715495,-1.038332}, + {-0.792709,1.829956}, + {-0.512584,-0.042359}, + {0.314335,0.342696}, + {0.301736,0.685331}, + {0.538495,1.567646}, + {0.619975,0.078173}, + {-0.498993,-0.523364}, + {-0.772238,0.214198}, + {-0.098512,-0.182276}, + {0.454210,-0.534136}, + {-1.022817,-1.137971}, + {0.073646,1.100400}, + {-1.024269,-1.297541}, + {0.102126,-0.936219}, + {-0.656945,0.838675}, + {-0.883419,-0.256136}, + {-0.187742,-0.020857}, + {0.277194,-0.076560}, + {0.664217,-0.799587}, + {-0.150595,-0.678707}, + {1.282330,-0.650995}, + {0.230992,-0.615056}, + {1.240003,-0.672353}, + {-0.277618,-0.291440}, + {0.819647,0.226890}, + {0.150397,-0.913147}, + {-0.416220,0.946438}, + {-0.076384,1.536212}, + {1.392241,-1.502352}, + {1.326505,-0.499578}, + {-0.091994,-0.153227}, + {-0.961196,0.689524}, + {0.781255,-0.480439}, + {0.928013,0.550042}, + {-0.232140,0.627398}, + {-0.954812,-0.337019}, + {0.310334,1.994616}, + {0.437513,-0.248398}, + {0.219854,0.604570}, + {-0.986371,0.508113}, + {0.338285,-1.014958}, + {0.109864,0.456381}, + {0.279878,-0.662212}, + {0.837898,0.324217}, + {0.556637,0.129244}, + {0.274982,0.417030}, + {-0.610253,-0.031767}, + {0.087246,-0.527219}, + {-0.003924,-0.518842}, + {-1.162910,0.023406}, + {-0.748007,-0.086280}, + {-1.473481,0.519776}, + {0.227004,-0.462845}, + {-1.082161,0.747261}, + {-0.506904,0.368379}, + {-0.400566,-0.884841}, + {0.601519,0.983189}, + {-0.166960,0.343570}, + {-1.095310,0.099506}, + {1.360160,0.674208}, + {-0.147483,0.107427}, + {0.281204,-0.417472}, + {0.661175,-0.414379}, + {-1.448734,1.031802}, + {-0.755926,0.045997}, + {-0.411609,0.573619}, + {0.557744,0.825309}, + {-0.849476,-0.220213}, + {0.491201,0.095585}, + {0.495856,-0.624079}, + {0.271922,-0.075840}, + {-1.176081,0.131668}, + {0.199308,0.838635}, + {1.157825,-0.261944}, + {0.499849,0.118281}, + {0.977981,0.048878}, + {1.199673,-0.964225}, + {0.858596,-0.581090}, + {-0.452553,-0.218746}, + {0.299985,0.111416}, + {0.658092,0.162666}, + {-1.038127,-1.509123}, + {-0.476839,-0.238866}, + {-0.825964,-0.083540}, + {-0.311650,0.915382}, + {-0.346397,0.095597}, + {1.291551,-0.057599}, + {-0.180325,1.013067}, + {-0.377176,-0.025424}, + {-0.170279,-0.752118}, + {-1.045206,-0.436628}, + {1.077868,0.598796}, + {-1.083213,-1.758250}, + {-0.312935,0.179621}, + {0.255198,-0.202909}, + {0.713268,-1.475905}, + {-0.464259,0.230728}, + {-0.089435,0.405254}, + {0.475353,-0.424938}, + {-0.867856,-0.104100}, + {-0.636819,-0.246586}, + {-0.172386,0.532258}, + {-0.100517,-0.057939}, + {-0.090309,-0.013900}, + {-0.012730,-0.418781}, + {-0.323899,-0.112924}, + {0.548806,-0.078950}, + {0.011270,-0.804839}, + {-1.476368,0.179108}, + {0.820229,-0.630583}, + {1.295267,-0.443406}, + {0.544548,0.943069}, + {1.785252,-0.261154}, + {2.075199,-0.129452}, + {0.294332,0.738836}, + {-0.488866,1.007274}, + {-0.503534,-1.208814}, + {-0.422143,0.460624}, + {-0.695711,1.140055}, + {-0.298145,0.028151}, + {-0.530038,0.012494}, + {1.063207,0.272223}, + {0.307094,-0.925566}, + {-0.396384,-0.079196}, + {-0.264129,-0.690633}, + {0.342815,1.176028}, + {0.208513,0.031339}, + {1.092949,-1.279019}, + {-0.182367,1.458113}, + {0.459643,0.537035}, + {-1.422746,-0.199628}, + {0.120842,0.431555}, + {0.120487,0.860370}, + {0.880075,-1.318327}, + {-0.918494,-0.508262}, + {1.039805,-0.397278}, + {-1.116948,-0.764242}, + {-0.648588,0.086831}, + {-0.310475,0.435516}, + {0.627558,-0.763336}, + {-0.357348,1.121826}, + {-0.261118,-0.210469}, + {0.566079,0.338734}, + {0.732632,-0.864559}, + {-0.031237,-0.416613}, + {-0.486114,0.440274}, + {1.080200,0.451333}, + {0.411008,-0.914379}, + {1.630417,-0.573224}, + {1.789973,-0.128818}, + {-1.282816,-0.068424}, + {0.649218,-0.044922}, + {0.219130,0.525529}, + {-0.370677,-0.053050}, + {1.003421,-0.883361}, + {-0.342108,-0.405991}, + {0.559990,0.090486}, + {-0.819193,1.397662}, + {-0.712352,0.014975}, + {0.372887,0.809808}, + {0.368211,0.098352}, + {0.107715,0.035441}, + {-1.024098,0.171511}, + {-1.378939,-0.282636}, + {-0.515788,0.376429}, + {0.019939,0.105386}, + {-0.458813,-0.083868}, + {-0.496787,0.049241}, + {0.463699,0.772761}, + {-0.261173,1.395466}, + {-0.700428,-0.454140}, + {0.203633,0.129327}, + {0.688547,-0.064068}, + {-0.286357,-0.615908}, + {1.006754,-0.251008}, + {0.233480,0.634520}, + {0.098067,-0.799585}, + {0.531663,1.047693}, + {-0.357639,0.643432}, + {-0.454815,-1.314132}, + {0.024120,0.533402}, + {-0.411249,-1.147575}, + {-0.478917,0.650582}, + {0.527923,-0.220407}, + {0.760079,-0.003595}, + {-1.436180,1.015680}, + {0.226704,0.663645}, + {-0.045143,-0.061152}, + {-0.302953,0.503048}, + {-1.017092,-0.028102}, + {-0.437520,-0.181724}, + {0.691820,0.557386}, + {0.481078,0.854929}, + {0.210535,-0.105821}, + {0.309759,1.545655}, + {-0.118720,-0.106134}, + {-0.491147,0.073132}, + {-0.315558,1.304714}, + {-0.069603,-0.566994}, + {-1.420324,-0.302228}, + {-0.001001,-0.159619}, + {0.538514,-0.717943}, + {-0.023256,0.486612}, + {0.961986,-0.094342}, + {1.390177,1.690547}, + {0.060921,-0.573038}, + {1.227780,-1.614966}, + {0.860354,0.141537}, + {-0.673537,-0.182732}, + {-0.394389,0.486924}, + {0.189958,-0.299760}, + {-0.187816,0.758961}, + {0.930850,0.838789}, + {0.532089,0.052800}, + {1.183978,0.043238}, + {0.000885,1.006165}, + {0.652237,-0.033242}, + {-0.062365,0.853989}, + {0.074019,1.062932}, + {0.548674,1.299869}, + {0.635525,0.892433}, + {1.040413,-0.904244}, + {-0.637131,-1.220854}, + {-0.178723,0.705191}, + {0.679517,-1.054694}, + {0.050417,0.463792}, + {-0.432476,-0.705006}, + {0.479097,-1.050954}, + {0.759427,-0.851752}, + {1.022693,-0.592958}, + {-1.062087,0.416080}, + {0.240269,-0.546121}, + {0.721674,0.787447}, + {0.390897,0.893822}, + {-1.344788,-0.366112}, + {-0.388957,1.529754}, + {-0.410491,-0.551688}, + {0.059600,0.157555}, + {0.589211,0.635496}, + {1.524161,-0.681505}, + {0.382074,0.694384}, + {0.184238,-1.242472}, + {-1.872358,0.314061}, + {0.197887,-0.051333}, + {0.134921,1.052766}, + {0.262707,0.571038}, + {0.217454,1.533922}, + {-0.473612,1.565367}, + {-0.430548,-0.327960}, + {2.456992,0.326251}, + {-0.249071,-1.096478}, + {1.629764,0.016947}, + {-0.311299,-0.966789}, + {-0.271977,0.129707}, + {0.570742,0.441806}, + {-0.663392,-0.189752}, + {-0.657755,-0.378028}, + {-0.289619,0.178035}, + {-1.547191,-1.379442}, + {0.318863,0.097885}, + {-0.133141,-0.867632}, + {1.709726,-0.325249}, + {-0.859378,-1.097579}, + {-0.824774,-1.066003}, + {0.667650,-0.896375}, + {0.771396,0.193745}, + {0.187997,0.834902}, + {0.264365,-0.077232}, + {-0.205345,-0.363629}, + {0.785119,0.128526}, + {-0.691053,-0.612586}, + {0.013257,-0.052083}, + {0.825087,0.514926}, + {-0.296533,0.266757}, + {0.172197,-1.001242}, + {-0.096571,0.384834}, + {0.009580,-0.143642}, + {-0.430595,0.227296}, + {0.246564,-0.054633}, + {-0.094468,-0.110370}, + {-0.692380,0.378773}, + {-0.199042,-1.555449}, + {0.505427,0.687997}, + {0.449979,0.039450}, + {0.393759,-0.881240}, + {1.174371,0.587504}, + {-0.022562,-0.094548}, + {0.799280,-1.480472}, + {0.041460,-1.331186}, + {-0.092273,-0.056904}, + {1.089637,1.394368}, + {0.377098,-0.286844}, + {-1.518074,0.303598}, + {-0.424125,-0.919862}, + {0.735314,0.790515}, + {-0.419136,-0.537595}, + {-0.224393,-1.089326}, + {-0.932735,0.204017}, + {-1.046173,-0.492433}, + {0.530493,-0.892328}, + {-1.605953,-0.056949}, + {-0.082756,-0.072003}, + {-0.273932,-0.025963}, + {-0.800355,0.314344}, + {0.072312,0.478394}, + {0.398293,0.285516}, + {-0.548830,0.122373}, + {-0.168767,0.843687}, + {-0.270897,1.661998}, + {-1.170453,-0.201107}, + {-0.475110,-0.145280}, + {1.305465,-0.282810}, + {-0.315642,0.100244}, + {-0.086178,1.029969}, + {0.615427,0.779651}, + {-0.207107,0.112033}, + {1.324170,-0.301879}, + {0.970426,-0.300709}, + {-0.051026,-1.504892}, + {-0.710653,0.471644}, + {-0.246991,0.815189}, + {0.603725,0.395888}, + {0.287185,-0.903460}, + {0.542505,-0.034145}, + {0.491362,0.846853}, + {-0.795065,-0.413406}, + {-0.094830,-1.353670}, + {0.848408,-0.279441}, + {0.423856,-0.773367}, + {0.223410,-0.744911}, + {-0.290439,0.138562}, + {0.179655,-0.293731}, + {0.963360,1.602055}, + {-0.162586,-0.561803}, + {0.690172,-0.162130}, + {-0.056525,-0.217605}, + {0.406531,-1.570055}, + {-0.214027,1.317937}, + {-1.324464,0.041843}, + {0.524061,0.463133}, + {-0.308113,-0.660500}, + {-0.045374,0.866035}, + {-1.375194,-0.346669}, + {-0.241115,-1.057360}, + {1.046871,1.007542}, + {-1.538573,-0.349429}, + {-1.296515,0.500255}, + {-0.319061,1.182597}, + {0.822835,1.088292}, + {-0.242570,0.808708}, + {-0.741186,-0.287133}, + {-0.043203,-0.170825}, + {0.086436,1.296764}, + {0.039347,0.444439}, + {-0.452934,0.019311}, + {0.165106,0.678114}, + {0.077917,0.386698}, + {-0.827517,0.531529}, + {0.008533,0.559169}, + {0.779173,-1.106132}, + {-0.141012,-1.305121}, + {-0.017937,0.457808}, + {1.289752,0.160765}, + {0.540358,1.399083}, + {-0.512611,0.568784}, + {-0.648622,-0.300842}, + {-0.293245,1.682090}, + {0.675206,0.479373}, + {-0.247437,0.127139}, + {0.385699,-1.137733}, + {0.734392,0.440471}, + {-1.045057,-0.228324}, + {0.556728,-0.598054}, + {-0.283752,-0.097712}, + {-0.555117,0.220327}, + {0.850535,0.713509}, + {-0.187237,-0.137412}, + {-0.069355,-0.705473}, + {0.514740,-0.842808}, + {-0.680879,-0.366539}, + {0.249006,-0.335864}, + {-0.098391,0.639156}, + {0.171737,-0.709357}, + {-0.443634,-0.636049}, + {1.088524,0.709373}, + {1.223219,-0.602659}, + {1.372139,-0.120711}, + {0.934723,0.998017}, + {-0.627598,0.214279}, + {1.030711,-0.173404}, + {0.136914,0.142240}, + {-0.703009,-1.393580}, + {0.296772,-0.271707}, + {-0.650348,0.475265}, + {0.681210,-0.614719}, + {-0.063976,0.173702}, + {0.927263,-0.034156}, + {0.436673,0.433596}, + {-0.011766,0.233163}, + {-0.461304,-2.176818}, + {-0.555505,-0.395928}, + {-0.121968,-0.515902}, + {-0.078036,-0.661705}, + {0.922070,-1.399317}, + {0.438197,-0.410533}, + {0.889117,2.238643}, + {-0.109874,-1.599532}, + {-0.122962,-0.682850}, + {-1.305958,-0.154182}, + {0.431402,1.018367}, + {-0.143377,-0.893054}, + {0.560765,-0.446487}, + {0.753484,-0.241121}, + {-0.967923,0.257292}, + {-0.119665,-1.032914}, + {-0.991815,0.479675}, + {-0.629275,0.847630}, + {0.721789,0.636400}, + {0.977668,-0.039434}, + {0.187379,-0.387067}, + {-0.314152,0.141318}, + {-0.817531,0.628117}, + {-0.923341,-0.167044}, + {-0.155868,-0.084994}, + {-0.686082,-0.206933}, + {0.021763,-1.069100}, + {0.091063,-0.184178}, + {-0.307996,-0.942727}, + {0.036592,0.643156}, + {-0.299491,1.314708}, + {-0.149338,-0.041127}, + {-0.365165,0.727747}, + {-0.591302,-0.009641}, + {-0.511106,0.790851}, + {-0.008839,-0.298441}, + {0.450988,-0.963904}, + {-0.043228,-0.140045}, + {0.622787,-0.480381}, + {1.330465,-0.430632}, + {0.237069,0.372814}, + {0.013612,0.660065}, + {-0.005838,0.638106}, + {0.099138,0.487362}, + {-0.462270,0.760901}, + {-0.039276,-0.367186}, + {-0.849389,0.963066}, + {0.260960,-0.760724}, + {-0.017266,-0.504135}, + {0.468009,0.090059}, + {1.015524,0.512994}, + {0.320663,-0.586802}, + {1.320691,-0.542734}, + {-0.662519,-0.014055}, + {-0.297684,-0.044484}, + {-0.799770,-0.356844}, + {-0.382747,0.640791}, + {-0.656885,0.305997}, + {0.114703,-0.966648}, + {0.136089,-0.769987}, + {0.032134,-0.482388}, + {0.164098,-0.131159}, + {0.378416,0.078075}, + {-0.221686,1.091587}, + {-0.103693,0.709294}, + {-0.345252,-0.305954}, + {1.203122,-0.260458}, + {0.793078,-1.844025}, + {0.052521,0.691232}, + {0.327413,1.180506}, + {0.000942,-0.045549}, + {0.500746,-0.800283}, + {-0.118962,-0.269397}, + {0.302711,-0.955327}, + {-0.451537,-0.663640}, + {-0.783589,-0.143810}, + {0.777130,0.550576}, + {-1.296793,-0.096188}, + {0.156387,1.318119}, + {-0.441793,0.789109}, + {0.098510,-0.721234}, + {1.144887,0.174284}, + {-0.628743,1.542204}, + {-0.746915,-1.002669}, + {0.640209,1.564354}, + {-0.042800,0.694716}, + {-1.546423,0.892586}, + {-0.302209,1.431112}, + {-0.691142,0.333508}, + {-0.429388,-1.099203}, + {1.047799,-0.141377}, + {-0.835629,-0.419429}, + {-0.395704,0.291504}, + {1.169077,-0.006899}, + {-0.000406,-1.023570}, + {-0.005843,0.363119}, + {-0.830499,-0.161589}, + {-0.049930,0.150634}, + {0.110034,0.489642}, + {0.229673,-0.090654}, + {0.628243,1.472188}, + {-0.426285,-0.014405}, + {0.704156,-0.031663}, + {1.408712,-0.223024}, + {-0.310124,0.322176}, + {1.341750,-0.011950}, + {-0.475503,-0.217211}, + {-0.322988,0.045987}, + {-0.293056,0.205099}, + {-0.120599,-0.231858}, + {-0.145756,-1.419736}, + {0.586338,0.525593}, + {-0.107314,0.053626}, + {-0.592978,-0.037145}, + {-1.158385,-1.045554}, + {0.119389,0.728346}, + {1.574950,-0.490199}, + {-0.282055,-0.229629}, + {0.168220,0.641829}, + {0.215137,0.436435}, + {-1.469822,-1.022768}, + {0.122827,-0.355324}, + {0.340368,0.460545}, + {-0.133655,-0.013018}, + {-0.214706,-0.229367}, + {1.137280,-0.600999}, + {-0.774999,-1.178053}, + {1.518943,1.058591}, + {0.407081,-0.502228}, + {-1.241990,0.417551}, + {0.014212,0.382705}, + {1.079171,0.037512}, + {1.449532,-0.035599}, + {-0.342860,0.119856}, + {-0.203089,1.758978}, + {0.892215,-0.343795}, + {-0.742509,-0.990385}, + {0.467033,-0.033716}, + {0.478131,-0.642241}, + {1.344997,-0.160438}, + {-0.420145,0.331979}, + {-0.652954,0.592996}, + {-0.495241,0.174791}, + {0.187080,-0.257417}, + {-0.382043,-0.147167}, + {0.529967,0.430835}, + {0.479963,-0.054450}, + {-0.878576,0.171068}, + {0.128695,-0.437802}, + {-0.715424,-0.054429}, + {-0.735767,1.208460}, + {0.913745,0.145152}, + {-0.901428,0.263530}, + {-0.108728,1.211707}, + {0.869162,1.245237}, + {1.346936,0.981211}, + {0.064847,-0.378967}, + {0.076235,1.113281}, + {-0.158075,-0.350806}, + {-0.830559,0.718345}, + {0.165189,0.659124}, + {0.566927,-0.057358}, + {-0.256642,0.501692}, + {-0.496891,0.558987}, + {0.314791,1.531419}, + {-0.105210,-0.967250}, + {0.340576,0.711382}, + {-1.141627,-1.066447}, + {-0.110436,-0.387441}, + {0.079143,-0.720602}, + {0.166833,0.239506}, + {-0.442205,-0.338438}, + {0.483370,0.156757}, + {0.693114,0.276451}, + {-0.183391,0.020851}, + {0.204206,-0.677262}, + {0.689076,0.309579}, + {-0.481239,-0.584827}, + {-0.933420,-0.491870}, + {-0.520784,-0.281925}, + {1.692787,-0.862935}, + {0.974295,-0.065542}, + {0.013460,-0.253194}, + {-0.484361,0.487765}, + {1.102883,-0.797744}, + {1.017178,-0.706175}, + {-0.306430,0.465774}, + {0.652186,0.377622}, + {-0.509788,-0.117614}, + {-0.182832,0.281499}, + {-0.243806,-0.608884}, + {-0.812188,1.031517}, + {-0.318785,-1.096473}, + {-0.753378,0.448524}, + {0.190946,0.805434}, + {1.315679,0.386423}, + {0.517649,-0.029638}, + {0.005505,0.303030}, + {0.245582,-0.056264}, + {-1.003810,0.352134}, + {0.145024,0.704185}, + {0.462317,0.143256}, + {0.942234,0.897553}, + {-0.215521,-0.331736}, + {-0.486441,-0.282984}, + {-0.132013,-0.653772}, + {0.703166,-0.978950}, + {1.265242,-0.730936}, + {0.541313,-1.092878}, + {-0.426889,-0.709462}, + {0.358945,-0.092949}, + {1.287703,-0.466656}, + {-0.029177,-0.528144}, + {-1.262047,-0.156719}, + {1.119061,-0.140010}, + {0.744231,1.364940}, + {-1.477712,0.677879}, + {1.394701,0.568561}, + {-0.709296,1.089103}, + {-1.084068,1.032923}, + {0.692925,-1.436255}, + {-0.583488,0.006146}, + {-0.096832,0.481081}, + {0.065004,-0.486029}, + {0.870241,-0.777612}, + {-0.485691,1.334895}, + {1.654056,-0.558402}, + {-0.123607,-0.634878}, + {-0.327436,-0.483555}, + {-0.308836,0.238801}, + {0.997275,0.372461}, + {1.298622,-0.350636}, + {0.054553,-0.251766}, + {-0.663848,0.096227}, + {-0.414783,-0.476282}, + {0.017994,-0.596242}, + {0.073553,0.224045}, + {-0.017235,-0.787626}, + {-0.513162,-0.883175}, + {0.296796,-0.667669}, + {0.609890,0.396096}, + {-0.429109,0.719473}, + {1.004360,-0.399219}, + {-0.729476,-0.121898}, + {0.495306,0.262692}, + {-0.113961,-0.354866}, + {-0.397658,0.111103}, + {0.772712,0.034410}, + {1.351640,-0.201355}, + {-0.632191,-0.828298}, + {-1.263127,-0.771645}, + {0.439372,-1.090465}, + {0.360964,-0.050497}, + {0.347296,-0.241183}, + {0.779991,1.223795}, + {-0.304319,0.532105}, + {0.438098,0.404655}, + {-0.851470,-0.274463}, + {-0.456542,0.692725}, + {-0.246019,0.385583}, + {0.191244,0.619761}, + {-1.086195,0.003533}, + {0.904869,0.542475}, + {0.998638,0.170402}, + {-0.706807,-0.315809}, + {0.166527,-0.172701}, + {-1.000581,-0.025441}, + {-0.835619,1.640966}, + {0.465558,-0.261938}, + {-0.312499,1.039515}, + {0.963936,0.325342}, + {-0.691905,-1.644457}, + {0.352920,-1.072839}, + {0.628098,0.001310}, + {0.081833,0.343911}, + {0.014168,0.756927}, + {-0.973338,-0.558293}, + {-0.871959,-0.104032}, + {-0.002001,-0.006319}, + {1.286904,-0.201689}, + {0.244030,1.578598}, + {-0.616804,0.274645}, + {-0.318141,0.335599}, + {-0.697360,-0.095197}, + {0.011818,-0.863732}, + {-0.138582,-0.019176}, + {-0.725250,-0.217377}, + {-0.875897,0.417330}, + {-0.319059,0.539565}, + {-0.482789,-0.312334}, + {0.409422,1.158154}, + {-0.015202,0.405469}, + {0.566499,-0.239419}, + {-0.048926,-0.333125}, + {0.123632,-0.575811}, + {-0.737014,1.050065}, + {-0.498796,-0.462582}, + {1.103683,-1.514551}, + {-0.494598,-0.326410}, + {-0.197300,0.386700}, + {0.062856,0.241676}, + {1.540076,0.134030}, + {0.167199,0.718623}, + {1.460202,0.168436}, + {-0.151115,1.190752}, + {-1.605562,-0.849851}, + {-0.182316,0.843664}, + {0.063442,-0.632068}, + {0.600120,-1.467388}, + {-0.214057,0.008288}, + {-0.591725,0.015858}, + {0.426621,-0.467059}, + {0.308007,-0.521593}, + {0.187186,0.432812}, + {0.771873,-0.797405}, + {-1.666113,-0.612908}, + {0.662923,-0.640449}, + {0.418502,0.839952}, + {0.567399,1.411843}, + {1.409143,0.943162}, + {0.272974,0.334327}, + {-0.194930,-0.042914}, + {-0.656420,0.632150}, + {-1.041831,0.166806}, + {0.747201,0.813639}, + {0.281704,0.944374}, + {1.358369,0.491507}, + {0.367469,-0.875805}, + {-0.422513,0.169091}, + {1.285167,0.685694}, + {0.330428,-0.193560}, + {0.299608,0.675410}, + {-0.270314,-0.081031}, + {0.064389,1.581159}, + {-0.222432,-0.019499}, + {0.426707,0.157563}, + {0.722662,-0.647789}, + {0.242988,0.714443}, + {0.748898,-0.308079}, + {-0.016544,0.354901}, + {-0.997099,-0.209123}, + {-0.235030,-0.400691}, + {-0.203206,1.099828}, + {0.142727,0.095450}, + {-0.341516,0.326233}, + {0.095229,0.019195}, + {-0.660175,0.112390}, + {0.905233,-0.514587}, + {0.319161,-0.949665}, + {-0.405405,-2.149487}, + {0.208820,0.999381}, + {-0.315606,1.516585}, + {-0.641859,-1.688719}, + {0.964642,-0.657701}, + {0.065903,-0.060402}, + {-0.026539,-0.681936}, + {-0.614921,-0.563590}, + {0.246976,-0.939397}, + {0.385899,0.281023}, + {-0.094005,0.848061}, + {-0.169226,0.774612}, + {-0.724207,0.299136}, + {-1.194411,-0.024786}, + {0.882686,-0.287766}, + {-0.483190,-0.806528}, + {-0.483338,0.922785}, + {0.041603,0.257413}, + {0.498249,0.308889}, + {0.634894,-0.438796}, + {0.295743,-0.624397}, + {0.071996,0.006979}, + {-0.372322,-0.699701}, + {-0.914731,1.474448}, + {-0.027933,-0.761139}, + {-0.295425,-0.913413}, + {1.158772,-0.605934}, + {-1.099764,1.238334}, + {0.225717,-0.107705}, + {-0.060501,-0.133608}, + {-1.004261,-0.846772}, + {1.353121,0.234258}, + {0.115511,-0.813911}, + {-2.526341,-0.552748}, + {0.628997,0.483053}, + {-0.185551,0.719097}, + {1.038135,-1.267809}, + {-0.807875,-0.433980}, + {-0.095644,0.352912}, + {-0.401847,0.180421}, + {0.326983,-0.414106}, + {-0.700716,-0.454423}, + {1.753344,0.341367}, + {-0.495613,0.589827}, + {0.795817,-0.022842}, + {-0.921182,-0.686602}, + {-1.692668,-0.029685}, + {-1.122250,-0.221354}, + {-0.588052,1.370316}, + {0.988746,-0.162050}, + {-0.653970,-0.824491}, + {0.362938,-0.445459}, + {1.171398,-0.033829}, + {-0.128480,0.441175}, + {-0.102669,-0.405796}, + {1.815588,-0.843343}, + {-0.009833,-0.493984}, + {-0.949789,1.129682}, + {0.396000,0.520610}, + {0.793786,-1.116647}, + {0.245421,-0.634161}, + {-1.542438,0.723155}, + {-0.983627,-0.634587}, + {0.325658,0.423862}, + {0.686591,0.678101}, + {0.840170,1.189774}, + {-0.124161,0.328021}, + {-0.670110,0.306719}, + {-0.647672,-0.390379}, + {-0.799760,-0.896996}, + {0.791386,0.183740}, + {-0.999459,0.290365}, + {0.108208,0.682826}, + {0.722602,-0.063568}, + {0.675050,-0.417068}, + {0.049737,-0.626277}, + {-0.091161,-0.152698}, + {-0.169368,-0.424080}, + {0.965155,1.073006}, + {0.875146,0.371974}, + {0.027511,-0.094845}, + {0.046664,-0.034023}, + {0.088000,0.191606}, + {-0.292866,0.357606}, + {0.486410,-0.150151}, + {0.758034,0.769236}, + {0.373728,0.795101}, + {-0.271229,-0.284477}, + {1.579846,-0.350881}, + {-0.201557,0.028050}, + {-0.509997,0.955817}, + {0.452960,0.647232}, + {-0.406892,0.567143}, + {-1.706461,1.360423}, + {0.953890,-0.875465}, + {0.657629,0.021581}, + {-0.129957,-1.226930}, + {-0.302970,-0.942701}, + {0.048147,-0.690086}, + {-0.477384,0.846820}, + {0.024795,1.669001}, + {1.201373,0.130037}, + {0.028444,-0.954818}, + {0.597766,-0.157195}, + {1.257619,-0.713805}, + {-0.793364,0.384184}, + {-1.448279,0.244332}, + {-0.241725,0.023413}, + {-0.834162,-1.002103}, + {-0.092808,-0.130621}, + {0.251400,0.563136}, + {0.142776,-0.576081}, + {0.082036,-0.836429}, + {0.477424,-0.233922}, + {0.592498,-0.708705}, + {-0.092424,-0.165077}, + {0.961011,-0.437526}, + {-0.040373,-0.007315}, + {0.151106,0.495559}, + {-0.791185,-0.172713}, + {0.532989,-0.116812}, + {0.323417,-0.257345}, + {-1.564697,1.408229}, + {-0.721557,1.018666}, + {0.590124,-0.231628}, + {0.771734,-0.400268}, + {-0.051036,0.575551}, + {-0.045053,-0.822877}, + {0.870412,0.425655}, + {-0.252330,-0.444619}, + {-0.101144,-0.403048}, + {-0.027262,1.535667}, + {-0.641673,-0.519516}, + {0.738704,0.547992}, + {0.168648,-0.151548}, + {-1.710591,0.257789}, + {-0.092677,0.346082}, + {-0.338101,0.082259}, + {-0.050333,-0.211235}, + {-0.699288,-0.374695}, + {-0.591992,1.089774}, + {0.627032,-0.226781}, + {-0.162334,0.632005}, + {1.473994,-0.687098}, + {-0.034147,-0.046207}, + {1.689347,0.546087}, + {-0.064003,0.303521}, + {0.024821,-0.361900}, + {0.625408,0.536032}, + {0.859899,-0.542843}, + {-0.768487,0.655731}, + {0.156214,0.442436}, + {-0.920403,-0.423091}, + {0.288070,-0.057672}, + {0.835439,-0.025869}, + {0.486492,-0.403805}, + {-0.670555,-0.015233}, + {0.202429,-0.231184}, + {0.368462,0.045512}, + {-0.759523,-0.656840}, + {-0.306825,-1.845469}, + {-1.126798,0.416730}, + {0.253965,-0.048144}, + {0.573909,0.256679}, + {-0.077506,0.902226}, + {0.106140,-0.161830}, + {0.944351,-0.103539}, + {0.996280,0.024614}, + {-0.437475,-0.095610}, + {1.605320,0.269590}, + {-0.030932,0.428579}, + {0.298472,-0.901861}, + {-0.459703,-1.415808}, + {-1.427354,-0.827994}, + {-0.668940,-0.453174}, + {0.081398,-0.075764}, + {0.449178,0.115437}, + {1.319972,0.180253}, + {0.214731,-0.518376}, + {0.401389,-0.697856}, + {-0.966804,-0.086393}, + {0.091583,0.256263}, + {0.121284,-0.390260}, + {0.682460,0.337722}, + {-0.528372,-0.012843}, + {0.535463,0.220828}, + {-0.207327,-0.002275}, + {0.032177,-1.481349}, + {-1.046740,0.503154}, + {0.990748,-1.593273}, + {-0.395646,0.419805}, + {0.309283,-0.466387}, + {1.107873,0.046100}, + {0.557575,0.602810}, + {-0.973449,-0.826520}, + {1.174536,-0.115438}, + {0.270087,-0.056070}, + {0.301369,-1.259042}, + {0.176198,0.039041}, + {0.685912,-1.168439}, + {0.868333,0.870309}, + {0.428619,-0.314340}, + {-0.605176,-0.019613}, + {0.551734,0.028005}, + {0.967593,-0.636688}, + {0.282477,0.393573}, + {0.681596,-0.537855}, + {0.080952,0.362344}, + {1.080137,-1.004045}, + {-0.121193,-0.497869}, + {0.873317,-0.001814}, + {-0.626031,-0.544039}, + {0.108145,-0.684680}, + {-0.563032,-0.925852}, + {0.979941,-0.514612}, + {-0.608938,0.633467}, + {-0.053909,0.182506}, + {-0.043155,1.357664}, + {-0.258396,0.276981}, + {-0.273572,-0.131251}, + {-0.146091,-0.601641}, + {-0.285407,-0.362421}, + {-0.145943,-0.085332}, + {1.246647,-0.702939}, + {0.000929,-0.146198}, + {0.426066,0.520638}, + {-0.385219,-1.726361}, + {0.895211,0.932719}, + {1.007455,-1.259203}, + {-0.192862,0.700090}, + {-0.229940,0.047657}, + {-0.530813,-0.440148}, + {-0.611116,-0.509634}, + {-0.580100,0.142553}, + {0.614953,0.098769}, + {1.398503,0.775546}, + {-0.541719,-1.671509}, + {-0.241597,1.020908}, + {-1.077532,-0.515526}, + {0.655762,0.775059}, + {-0.765450,-1.239293}, + {0.962747,-0.806323}, + {-0.609721,0.251087}, + {0.050378,-0.384786}, + {0.848758,0.698701}, + {2.116104,1.231120}, + {0.111879,-0.017177}, + {-0.687465,-0.181288}, + {-0.675059,-0.418819}, + {0.279545,-0.339861}, + {-0.599722,0.492495}, + {0.684005,-0.397453}, + {0.147776,-0.639692}, + {0.097598,-0.641184}, + {0.081977,0.034408}, + {-1.362164,0.108665}, + {0.163552,-1.671503}, + {0.040631,-1.212350}, + {0.291558,0.657082}, + {-0.295903,-1.140027}, + {-0.376469,1.434394}, + {0.423132,1.500112}, + {0.939533,0.706458}, + {-0.723371,0.467943}, + {0.734789,-1.367821}, + {-0.286426,-0.430950}, + {0.741645,0.202610}, + {-0.474269,-0.383443}, + {-0.111238,-1.258131}, + {0.660971,-0.293692}, + {-1.682554,0.395094}, + {-0.315600,1.396362}, + {-0.537842,0.199873}, + {-0.495910,1.133647}, + {-0.202967,0.311606}, + {0.956309,1.302041}, + {0.014266,1.520439}, + {-0.219412,0.174062}, + {-0.681151,-0.951635}, + {0.404607,1.513381}, + {0.416153,0.210891}, + {0.142163,0.694091}, + {0.076219,0.460826}, + {-1.083648,1.037683}, + {0.270994,0.354254}, + {0.986873,2.149951}, + {0.393861,0.989633}, + {0.688971,0.339303}, + {0.071278,0.056799}, + {-1.016039,-0.020912}, + {-1.334468,-0.536643}, + {0.734131,-0.538999}, + {0.610162,-0.467191}, + {0.178098,0.248881}, + {1.107075,0.903290}, + {0.067019,0.376517}, + {0.063519,0.307756}, + {0.222092,0.047481}, + {-0.642008,1.339605}, + {-1.434671,0.390346}, + {-0.286363,-1.096375}, + {0.528233,-0.114303}, + {0.002839,-0.363739}, + {0.081966,0.477424}, + {-0.745078,-0.212704}, + {0.262151,-0.629614}, + {0.650702,0.297788}, + {-0.360384,0.654797}, + {-1.210552,0.346825}, + {-1.123528,0.141074}, + {0.254125,0.134089}, + {-0.854449,-1.272994}, + {0.503444,0.407784}, + {-0.063343,0.002590}, + {-1.217891,0.297324}, + {1.362821,-0.092500}, + {-0.620024,-0.181695}, + {-0.583878,-0.087572}, + {-0.077708,-0.591811}, + {0.407316,0.210572}, + {0.370971,-1.195471}, + {-0.299583,1.320451}, + {0.203216,0.646346}, + {0.366164,0.909438}, + {0.203023,0.338926}, + {0.886110,-0.616392}, + {0.123373,-0.265751}, + {1.002188,-0.721736}, + {-0.087786,-0.162014}, + {-0.147706,-0.257366}, + {0.138837,0.156403}, + {-0.935765,-0.897313}, + {0.145589,0.934317}, + {-1.257050,0.339883}, + {-0.640691,-0.497094}, + {0.249565,0.324230}, + {0.429013,-0.807024}, + {0.951042,-0.750363}, + {-0.233908,0.322168}, + {-0.155345,-0.058620}, + {-0.923954,1.122193}, + {0.575643,0.585440}, + {0.020598,1.436937}, + {-0.091407,-0.699294}, + {0.578322,1.106103}, + {-0.103452,-0.119980}, + {1.023561,0.237926}, + {-0.294089,-0.806202}, + {0.353528,-0.555679}, + {-0.047433,-0.322646}, + {1.165529,0.140760}, + {-0.792405,-0.115971}, + {-1.054716,-1.248429}, + {-0.445960,-0.522722}, + {-0.535668,-0.623538}, + {1.871897,0.379341}, + {-0.602944,0.291409}, + {0.163383,-0.302622}, + {-0.434323,-0.137421}, + {-0.350281,0.083213}, + {0.871609,-0.841751}, + {0.975364,-0.601977}, + {0.494758,0.224624}, + {0.242478,0.421058}, + {0.232225,-1.453569}, + {0.414761,0.849492}, + {0.604876,0.053472}, + {0.281405,-0.468279}, + {-0.722334,-0.651553}, + {0.212448,0.783791}, + {0.338838,0.566970}, + {0.968908,0.412173}, + {-0.818738,1.184692}, + {-0.942716,1.063357}, + {0.156179,-0.884947}, + {0.275563,-0.824764}, + {0.161075,0.512591}, + {-0.063483,-0.132659}, + {0.244437,0.539625}, + {-1.022381,0.103652}, + {-0.191213,0.245448}, + {1.202137,-0.341605}, + {-0.830870,0.088173}, + {-0.376038,-1.505356}, + {-0.132499,-0.483134}, + {1.405172,-0.388605}, + {-0.731394,-0.474684}, + {0.424459,1.084378}, + {0.569630,-0.465403}, + {0.342360,0.588034}, + {0.530620,0.584731}, + {0.465075,0.367666}, + {0.476078,-0.835102}, + {0.325328,0.098233}, + {-0.588893,0.045396}, + {0.190879,0.254040}, + {0.743863,1.485769}, + {0.092567,0.772116}, + {-0.316621,0.345606}, + {-0.782686,-0.306573}, + {-0.034863,-0.764078}, + {0.087823,1.095970}, + {0.006421,0.475137}, + {-0.539624,1.058665}, + {-0.112003,-0.421538}, + {0.814427,-2.240315}, + {0.297667,0.029955}, + {0.387983,0.365167}, + {-0.512255,0.697944}, + {-1.002389,-1.053748}, + {0.785925,-0.982717}, + {0.513858,-0.382507}, + {-0.739047,0.720458}, + {0.563904,-0.592574}, + {0.269190,-0.290482}, + {-0.443868,1.120572}, + {-1.130339,0.430364}, + {0.653121,-1.146882}, + {-0.143795,-0.395516}, + {-0.601965,0.136010}, + {0.108440,-1.108889}, + {-0.633592,-0.202239}, + {-0.057448,0.917590}, + {-0.339216,0.038929}, + {-0.236586,0.236913}, + {0.250535,0.573183}, + {-1.205567,-0.151059}, + {0.435760,0.422565}, + {0.195745,-0.511377}, + {1.127967,-0.973948}, + {0.989271,-1.392772}, + {0.135742,0.374199}, + {-0.344161,0.674263}, + {-0.011739,-0.360829}, + {-1.431782,0.085627}, + {-0.120657,0.501635}, + {0.750871,0.035088}, + {-0.415468,-0.782156}, + {0.295173,0.275036}, + {-0.601768,0.944578}, + {-0.818800,-0.499709}, + {0.750934,0.255211}, + {0.011539,-0.207586}, + {-0.059063,0.577347}, + {0.027127,0.182079}, + {0.058243,0.931415}, + {-0.671812,0.744172}, + {0.645644,0.221537}, + {-0.870574,-0.487558}, + {1.078105,0.615241}, + {-0.212722,-0.339828}, + {1.044228,-0.140719}, + {0.507397,-0.046622}, + {-0.034885,-0.440408}, + {0.752870,2.271021}, + {-0.581907,-0.235032}, + {-0.322662,-0.221511}, + {0.415694,1.662084}, + {0.145703,-0.397409}, + {0.254030,0.000521}, + {-0.087437,-0.980333}, + {0.227735,-0.592052}, + {-1.659078,1.444394}, + {0.165351,0.893154}, + {0.143596,-1.051117}, + {-0.150326,-0.227989}, + {-0.176142,-2.753715}, + {-0.304719,-1.679630}, + {0.142689,1.087978}, + {-0.017008,-1.616949}, + {-1.541590,0.163136}, + {-0.310240,-0.896758}, + {-1.275426,0.756192}, + {1.243312,-0.449887}, + {1.116768,0.875750}, + {-0.707965,0.070670}, + {0.913211,-0.140092}, + {-0.979090,0.451250}, + {-0.864155,-1.828690}, + {0.921171,0.476562}, + {0.355440,0.234661}, + {-0.524266,0.329766}, + {-0.358736,-1.603375}, + {-0.648495,0.757445}, + {0.418951,0.216528}, + {-0.427809,-0.403671}, + {0.337321,-1.387978}, + {1.655019,-0.215407}, + {0.451075,-0.095607}, + {-0.244406,0.146289}, + {-0.137790,0.167550}, + {0.630097,0.525331}, + {1.207748,0.306192}, + {0.281222,2.135639}, + {1.263418,-0.404728}, + {-0.462965,-0.321707}, + {-0.502160,-0.109373}, + {0.267206,0.604009}, + {-0.095540,-0.133320}, + {-0.518950,-0.011799}, + {0.882133,-0.870423}, + {-0.273993,-0.871520}, + {-0.369624,-0.376413}, + {-0.426616,-1.054248}, + {0.605760,-0.041916}, + {-1.076826,-0.702786}, + {0.262593,0.312531}, + {-0.247497,0.678962}, + {0.286441,-0.227566}, + {-0.090176,-0.850555}, + {-0.613904,-0.323067}, + {-0.479344,0.855193}, + {0.812688,0.259328}, + {-0.397216,-0.922578}, + {0.056809,-0.180688}, + {-1.371158,0.243855}, + {-1.014261,0.371907}, + {0.033020,0.410626}, + {-0.916478,1.112751}, + {0.669737,1.082816}, + {0.431280,-0.142717}, + {0.497122,-0.690756}, + {-0.119205,-0.540953}, + {0.181345,0.682248}, + {0.031749,-0.632391}, + {-0.426867,0.192814}, + {-0.081193,0.403163}, + {0.211498,1.119102}, + {-0.832741,-0.389058}, + {0.687365,0.355030}, + {0.635475,-0.427351}, + {-0.546154,-0.025184}, + {-0.489334,0.302793}, + {-0.652276,-0.513544}, + {1.042010,-0.712245}, + {-1.620305,0.506514}, + {-0.862786,0.428432}, + {0.604738,-0.408423}, + {-0.521311,-0.121360}, + {0.541474,-1.269409}, + {-0.497038,0.414833}, + {-0.241790,-0.086959}, + {-0.152804,-0.480866}, + {-0.370062,1.004085}, + {0.669046,0.066165}, + {-0.781561,0.108622}, + {-0.559473,0.168401}, + {-0.453866,0.541715}, + {-0.674082,0.794643}, + {-1.933105,-0.147404}, + {1.300205,0.575127}, + {0.347053,1.234056}, + {0.029991,1.224125}, + {0.468447,0.084716}, + {0.172597,-0.493143}, + {0.474934,0.314407}, + {-0.641944,-1.460289}, + {-0.397220,1.519256}, + {-0.434311,0.720815}, + {0.309265,0.342057}, + {-1.198355,-0.052924}, + {-0.707677,0.641043}, + {-0.961501,-0.105753}, + {0.041026,-0.219741}, + {0.296451,-0.155747}, + {-0.041502,0.329670}, + {-0.175649,-1.146940}, + {0.291242,-0.629172}, + {0.201876,0.521308}, + {-1.249795,1.396366}, + {0.721736,-0.901069}, + {-0.279288,0.146240}, + {0.057212,-0.542932}, + {0.895544,0.168533}, + {1.243546,0.419985}, + {1.443173,0.998921}, + {1.178023,-0.424663}, + {0.944378,0.694314}, + {0.077267,-0.557875}, + {-0.100770,-0.061053}, + {0.091123,0.783914}, + {0.627541,-0.406884}, + {0.300425,0.129705}, + {1.588361,1.060950}, + {-0.737907,-0.102440}, + {-0.408529,-0.967258}, + {0.409326,-0.583521}, + {-0.252992,0.274365}, + {0.467400,0.293939}, + {0.616506,0.083653}, + {0.069252,0.630033}, + {1.261570,-0.161448}, + {0.980182,0.016625}, + {-0.967191,0.426424}, + {0.974353,0.373262}, + {0.465758,0.406121}, + {0.049765,0.155789}, + {1.019360,1.113022}, + {1.482616,-1.082850}, + {-0.370055,1.170347}, + {-0.914180,-0.076800}, + {0.711749,0.443053}, + {1.000344,-0.911585}, + {-0.685291,-0.007084}, + {0.003534,-1.342957}, + {-0.224481,-0.897010}, + {1.435450,1.058341}, + {0.901816,-1.078478}, + {0.440206,0.310660}, + {-0.440452,1.055084}, + {-0.481999,0.510978}, + {-0.425880,-0.638269}, + {-0.887044,0.737327}, + {0.766324,0.831116}, + {0.474519,0.013742}, + {0.719499,0.072296}, + {0.128751,0.551124}, + {-0.346348,-0.115964}, + {-0.027651,-0.597646}, + {0.459124,0.203102}, + {0.076236,0.050293}, + {-1.070625,1.089285}, + {0.946162,0.643590}, + {0.493112,-0.908918}, + {-0.530798,0.636518}, + {-0.775397,0.649794}, + {0.666540,-0.670376}, + {-0.051724,-1.176117}, + {0.734299,-0.049687}, + {-0.366040,0.690415}, + {-0.363912,-0.763731}, + {0.809317,-0.192377}, + {-0.584942,-0.575854}, + {0.212895,0.318501}, + {-0.229536,-0.564216}, + {0.325465,-0.148910}, + {-1.208239,0.149334}, + {-0.854608,-0.061222}, + {-1.275009,1.356758}, + {0.005121,0.384686}, + {0.540351,-0.968782}, + {0.522470,0.505677}, + {1.606856,0.455340}, + {0.390568,0.183534}, + {-0.517696,0.031122}, + {0.301117,2.578628}, + {-0.301510,-1.216527}, + {-0.342228,-0.046947}, + {-0.348194,0.992603}, + {-0.067880,-0.448626}, + {1.327164,0.245718}, + {-0.452255,-1.409662}, + {0.439151,1.195320}, + {-1.258445,1.550755}, + {-0.487881,1.205291}, + {-0.539438,-0.040513}, + {0.112800,0.659260}, + {0.163991,-0.512811}, + {-0.598902,0.260073}, + {-0.759021,1.076704}, + {-0.850034,-0.410968}, + {0.017091,-0.374513}, + {-1.673326,0.068799}, + {0.965866,-0.779812}, + {-0.058769,-0.720178}, + {-0.055818,-0.470524}, + {-1.050913,0.161955}, + {1.117855,0.191514}, + {1.104705,0.175696}, + {0.367485,-0.458936}, + {0.138570,0.060696}, + {-0.646029,0.418187}, + {0.562371,-0.098041}, + {0.132342,0.156962}, + {0.616000,0.247797}, + {-0.849396,-0.017041}, + {-1.265605,-0.174037}, + {0.263149,0.173862}, + {-0.947393,-0.548476}, + {-0.781072,-1.083780}, + {0.283519,-1.581446}, + {-0.649758,0.090980}, + {0.080903,-0.435490}, + {-0.546066,-0.445276}, + {0.883145,0.033681}, + {-1.438228,-1.592795}, + {-0.929637,0.644398}, + {-0.843645,1.001079}, + {-0.103938,0.314698}, + {-0.882742,0.603233}, + {0.560060,0.672982}, + {0.265318,-0.520901}, + {0.037542,-0.468269}, + {-0.614846,-0.896426}, + {-0.811132,-0.075196}, + {-0.701491,-0.278436}, + {-0.169226,0.555609}, + {0.152666,0.988791}, + {0.155918,-1.638999}, + {-0.029867,-0.008556}, + {0.789905,-0.447722}, + {0.369189,0.638383}, + {0.224741,-0.857948}, + {1.360289,-0.368943}, + {1.012567,-1.472297}, + {0.750105,-0.167508}, + {0.543334,-0.115844}, + {0.551806,-1.337525}, + {1.881674,0.384950}, + {-0.334593,-0.392176}, + {0.568056,0.658811}, + {0.826330,-0.070998}, + {-0.837258,-0.838016}, + {-0.559858,-1.022418}, + {0.141410,-0.739586}, + {-0.910228,-1.581966}, + {-0.196767,-0.383060}, + {-1.084272,-0.459566}, + {-0.639058,0.491458}, + {0.003765,0.880280}, + {1.188473,-0.151647}, + {0.210026,-1.324828}, + {-0.100415,0.512765}, + {0.513964,-0.254631}, + {-0.644200,0.342062}, + {0.783293,0.003817}, + {0.641491,0.529011}, + {0.382460,-0.793553}, + {-0.168696,0.881504}, + {-0.665068,-0.411740}, + {-0.422928,-0.392841}, + {-0.293466,-0.490343}, + {0.174657,0.011203}, + {0.371092,0.692387}, + {0.221498,0.094331}, + {1.040101,-0.724797}, + {-0.594782,-0.235973}, + {0.067611,-1.262378}, + {0.159732,-0.070026}, + {0.643780,-0.804505}, + {0.537444,0.286446}, + {0.032259,-0.725526}, + {-0.348096,1.322484}, + {-0.412691,-0.682603}, + {0.064050,-0.147144}, + {-1.125518,-0.730751}, + {0.100103,-0.336546}, + {0.011121,-1.408579}, + {-0.435174,0.184880}, + {0.216681,0.145450}, + {0.160929,-0.027522}, + {-0.094411,0.775505}, + {0.917143,-0.930427}, + {0.346981,0.563719}, + {-1.570088,-0.176042}, + {-0.151329,-1.215049}, + {-0.517596,-0.556149}, + {1.388624,0.121150}, + {-1.346197,-0.331584}, + {-1.014897,-0.904715}, + {-0.370488,0.625232}, + {0.234481,-0.599066}, + {-0.838492,0.445635}, + {0.570000,0.510314}, + {-0.117676,0.285231}, + {1.428193,0.287780}, + {0.846940,0.133845}, + {1.197855,0.607831}, + {-0.882803,-1.383388}, + {0.034651,-0.574273}, + {0.081993,-1.106833}, + {-0.415176,-0.051580}, + {-0.142726,0.131354}, + {0.705295,0.285068}, + {0.616462,0.274167}, + {0.542851,-0.557143}, + {-0.453895,1.480666}, + {0.389829,0.139984}, + {0.729928,0.418423}, + {0.199777,0.543327}, + {-0.777423,-0.121813}, + {0.544161,1.047456}, + {0.144618,0.189402}, + {-0.330806,-0.839508}, + {-0.386112,0.095356}, + {0.334664,-0.570556}, + {0.688800,0.258836}, + {-0.375194,0.976342}, + {-0.979181,0.389248}, + {0.352754,0.182541}, + {-0.557678,0.183718}, + {0.059676,-0.515850}, + {0.889687,0.384437}, + {0.326761,-0.569045}, + {-0.356064,0.960982}, + {-0.015646,0.537468}, + {0.070428,-0.848307}, + {-0.986289,0.860168}, + {-0.141119,0.141116}, + {0.387450,1.352744}, + {0.898063,0.207277}, + {0.307952,0.280249}, + {-1.091253,-0.645560}, + {1.079365,0.448420}, + {0.318470,-0.047758}, + {-0.664574,0.564786}, + {-0.568208,0.492372}, + {0.143767,0.051228}, + {-0.416511,0.722973}, + {-0.892012,-0.308575}, + {0.361998,-0.008642}, + {-0.497223,-0.648014}, + {0.249791,-0.081327}, + {0.207192,0.128874}, + {-1.025766,-0.510293}, + {0.098964,0.621213}, + {-0.490461,0.631713}, + {-0.448633,1.805053}, + {-0.321075,-0.425673}, + {0.109959,0.748809}, + {-0.636473,0.818729}, + {-0.323787,-0.565485}, + {-0.031436,0.886588}, + {-1.100856,-0.295367}, + {0.013026,1.275442}, + {1.243183,-0.863036}, + {-0.016862,-1.104960}, + {-0.503751,0.059092}, + {-0.428264,-1.092108}, + {0.240446,0.733125}, + {-0.924166,-0.286675}, + {0.081255,0.268827}, + {0.578614,0.267076}, + {0.855698,0.686772}, + {0.694556,0.169285}, + {0.065727,-1.138257}, + {-1.326172,-0.634456}, + {-0.290709,0.244074}, + {0.184962,-0.684550}, + {-0.484932,-0.874069}, + {0.683665,-1.045173}, + {-0.583586,0.853352}, + {-0.817727,-1.045137}, + {-0.661010,-1.251055}, + {-0.369424,0.527159}, + {-1.301217,0.246717}, + {0.143446,0.006156}, + {-0.073755,0.534466}, + {-1.136401,-0.589760}, + {-0.607309,-0.316112}, + {0.335294,-0.448585}, + {-0.574601,0.205810}, + {-0.239630,0.283724}, + {-0.697449,-0.307286}, + {0.071816,0.155103}, + {1.367617,-1.141154}, + {-0.396951,-0.248389}, + {-1.092599,-0.617174}, + {-1.294691,-0.226609}, + {-0.380847,-0.089574}, + {-0.743203,0.637321}, + {0.235272,-0.819851}, + {-1.195970,0.512104}, + {-1.679973,-0.738527}, + {0.575380,-0.899765}, + {-1.649001,-0.199959}, + {0.213428,1.358885}, + {0.943931,-0.471162}, + {0.432717,0.866101}, + {0.145445,0.133728}, + {-0.555018,0.149227}, + {-0.914787,0.598720}, + {-0.653930,-0.654901}, + {-1.346925,0.329945}, + {-0.171424,-0.565344}, + {-0.301527,0.240508}, + {1.273836,-0.145758}, + {-0.675821,-1.095405}, + {-0.413545,-0.143713}, + {-0.106844,0.824615}, + {0.131452,-1.038036}, + {-0.326685,1.463916}, + {-0.584519,-0.458745}, + {-0.543369,-1.094143}, + {0.143483,-0.846585}, + {0.272163,0.167407}, + {0.401943,-0.563082}, + {1.212306,0.087879}, + {0.504145,-0.648031}, + {-0.462351,-0.159423}, + {-0.319523,0.179709}, + {1.357242,0.045627}, + {1.074160,0.840235}, + {0.790452,0.720079}, + {-0.705431,0.410349}, + {0.416680,-0.002549}, + {-0.884954,-0.146867}, + {-0.808279,-0.171336}, + {-1.018281,0.721639}, + {0.822228,1.039615}, + {1.037790,0.060549}, + {-0.074556,-0.200271}, + {-0.880853,-0.366553}, + {-0.343761,0.333341}, + {-0.313231,-0.586011}, + {0.283823,0.573617}, + {1.143016,0.089887}, + {0.410687,1.083689}, + {0.277861,-0.083366}, + {0.021606,-0.194773}, + {-0.750214,1.458612}, + {0.917402,-0.016748}, + {-0.339684,-0.337568}, + {1.005284,-0.645882}, + {-0.519209,0.899330}, + {0.826162,-0.741211}, + {1.300132,-1.109551}, + {-0.374995,-0.317730}, + {0.785101,0.228184}, + {0.415868,0.737788}, + {0.527210,-0.188643}, + {0.376705,0.413658}, + {0.989599,0.805633}, + {-0.137061,-0.915614}, + {-1.702346,-0.057933}, + {-1.956591,0.046432}, + {-0.416960,0.338240}, + {-0.658461,-1.216968}, + {0.365795,0.659371}, + {0.252050,-0.558653}, + {-0.454467,0.004934}, + {0.504714,0.229244}, + {-0.278911,-0.228103}, + {-0.127623,-0.114296}, + {-0.014266,-0.342689}, + {-0.604625,0.121864}, + {-0.387685,-0.068082}, + {-0.091712,0.800537}, + {0.485931,-0.161304}, + {-0.016110,0.493620}, + {-0.653134,-0.353877}, + {-1.046778,0.196967}, + {-0.263242,-0.289129}, + {0.336474,-0.180203}, + {0.298396,-0.644825}, + {-0.427587,0.572250}, + {-0.208223,0.053185}, + {0.533386,-1.227956}, + {-0.725350,0.128195}, + {0.672904,0.530250}, + {-0.061316,-0.194678}, + {-0.709433,-0.046001}, + {-0.588879,0.353459}, + {0.123260,0.618527}, + {-0.549665,0.060101}, + {0.890191,-0.845135}, + {-0.454263,-1.313850}, + {0.783957,-0.491876}, + {1.361276,0.023611}, + {-0.458428,0.042147}, + {-0.143219,-0.073745}, + {0.074903,-0.017429}, + {-0.067903,-0.816547}, + {-0.380387,-0.772921}, + {-0.240030,1.420491}, + {-0.003621,0.010600}, + {-0.444036,0.409901}, + {0.277409,0.726745}, + {0.119726,1.707099}, + {-0.621712,-0.457125}, + {-0.214421,1.545744}, + {0.278621,-0.735467}, + {-0.099482,0.119682}, + {0.952647,-1.013460}, + {-0.290825,-0.041022}, + {0.368084,-0.002760}, + {-0.689006,-0.068005}, + {0.015785,0.505867}, + {1.306051,0.203435}, + {-0.263603,-0.214893}, + {0.292584,-0.248845}, + {-0.344389,-1.191472}, + {0.096606,-0.045469}, + {0.147219,0.465939}, + {-0.579923,-1.133735}, + {-0.918253,-0.931145}, + {0.557217,0.127417}, + {0.614199,0.613104}, + {0.412233,0.943510}, + {-0.471662,-0.514960}, + {-0.817375,-0.836164}, + {-0.264718,-0.546935}, + {0.508435,0.771316}, + {0.031847,-1.856060}, + {-0.443846,-0.260004}, + {-0.716667,-1.374211}, + {0.501604,0.548927}, + {0.314912,1.032581}, + {-0.781109,0.916868}, + {-0.869837,-1.039860}, + {0.630546,0.674600}, + {0.272632,0.214175}, + {0.531070,0.330978}, + {0.675056,-0.653400}, + {0.573720,0.836919}, + {-0.611225,0.014075}, + {-0.257263,-0.391545}, + {-0.759020,-0.312859}, + {0.264351,0.791373}, + {-0.438730,-0.456151}, + {-0.103243,-0.632429}, + {0.482892,0.141475}, + {-1.072978,0.148871}, + {-0.939209,-0.558985}, + {0.464793,-0.984782}, + {0.344131,0.564869}, + {1.005227,-0.360487}, + {-0.225080,0.071180}, + {0.208733,-0.458590}, + {0.680123,-1.202615}, + {-0.308920,0.517768}, + {0.980274,0.589646}, + {0.902236,-0.040233}, + {-1.138100,0.039754}, + {0.169840,0.120056}, + {-0.733937,0.211810}, + {0.623660,-0.836100}, + {-0.173754,0.076214}, + {-0.541470,0.864952}, + {-0.080678,-0.163713}, + {-0.044093,0.109390}, + {-0.028695,-0.639742}, + {0.643003,0.482195}, + {-0.364304,-0.293403}, + {-0.231682,-0.410161}, + {-0.467438,-0.345931}, + {-0.390529,0.236207}, + {-0.175126,0.380258}, + {0.978393,0.640634}, + {0.257795,-0.903357}, + {0.641261,0.315085}, + {-0.098354,0.511919}, + {-0.717823,-0.919712}, + {0.709709,-0.590981}, + {0.997767,0.207366}, + {0.588275,-0.122289}, + {-0.222499,0.042538}, + {0.394217,0.054417}, + {0.214881,0.114854}, + {0.596482,0.581786}, + {0.477025,-0.157396}, + {-0.633506,-1.318668}, + {-0.037122,0.440028}, + {0.968742,-0.275315}, + {-0.513770,0.381195}, + {1.098776,0.728930}, + {0.150417,-0.421163}, + {-0.902237,1.142415}, + {-0.729498,0.499136}, + {0.418742,0.861949}, + {0.267916,-0.737845}, + {0.024422,0.770033}, + {0.566193,0.531592}, + {0.166300,-0.113780}, + {-0.275348,-0.044917}, + {0.629763,-0.044562}, + {0.108581,-0.580329}, + {0.247883,-0.494344}, + {-1.462176,0.531806}, + {0.324773,-1.258865}, + {-0.406431,0.059552}, + {0.113265,0.337107}, + {-0.506166,1.040579}, + {-0.703153,0.839870}, + {-0.260571,-1.535683}, + {-0.454874,-0.041822}, + {-0.199992,-0.302883}, + {-0.743083,-0.906848}, + {-0.675013,-0.597745}, + {-0.338081,-1.521178}, + {0.931345,-1.090509}, + {0.651153,-1.330153}, + {-1.079088,0.315838}, + {0.246740,0.044863}, + {0.202616,1.446147}, + {-0.433066,0.284324}, + {-0.609858,0.344346}, + {1.142330,-0.944550}, + {-0.350428,-0.881955}, + {-0.451507,-1.605877}, + {-0.400012,-0.239471}, + {-0.136838,-0.775874}, + {0.282265,-0.413392}, + {-0.988833,1.529659}, + {0.719835,0.005099}, + {0.052020,-0.477086}, + {-1.283307,0.058599}, + {0.165701,0.649111}, + {1.021960,-1.416111}, + {0.940476,0.062629}, + {-0.751199,0.038566}, + {0.243450,-0.762697}, + {-0.649152,0.044560}, + {0.908395,0.209002}, + {0.325158,0.216998}, + {0.396454,0.138658}, + {-0.763522,-0.025907}, + {-0.762589,-0.137472}, + {-0.327529,-1.036809}, + {-0.632504,0.676907}, + {0.183574,0.389227}, + {-0.859700,-0.703806}, + {-1.154826,-0.991693}, + {0.449444,0.396030}, + {0.441770,0.491508}, + {-1.205186,0.299378}, + {1.050428,-0.456205}, + {0.096725,0.154959}, + {0.584349,-0.864514}, + {-1.679030,1.143489}, + {0.008505,0.228789}, + {-0.661763,0.775812}, + {0.142798,-0.623065}, + {-0.241421,-0.526502}, + {1.106520,0.156370}, + {0.365753,-0.256303}, + {-0.977046,1.118332}, + {0.884009,0.203437}, + {-0.353712,0.852741}, + {1.135822,-0.309740}, + {-0.439555,-0.067368}, + {0.554689,-0.288402}, + {1.734416,1.344531}, + {-1.349819,0.759427}, + {0.102799,-0.495112}, + {0.063102,0.722775}, + {-1.222947,-0.080150}, + {-0.340332,1.061612}, + {-0.228259,-1.903851}, + {-0.090773,0.687378}, + {0.203348,0.507128}, + {-0.577364,-0.212706}, + {-0.857515,-0.853969}, + {-0.562304,0.383151}, + {-0.918214,-1.478510}, + {1.026666,0.071216}, + {-0.012886,-0.308529}, + {0.022988,-0.145717}, + {0.234582,1.146633}, + {1.975283,-0.173765}, + {-1.487083,0.919537}, + {-1.203767,1.128685}, + {-1.355804,-0.425852}, + {-0.102354,-1.008553}, + {-0.436827,0.374401}, + {-1.741085,0.223597}, + {-0.898223,0.399684}, + {0.002133,-0.652951}, + {0.333743,0.185220}, + {-0.163247,1.355073}, + {-0.198911,-0.789921}, + {0.240101,0.133008}, + {-0.149245,-0.404471}, + {1.281203,-0.360689}, + {-0.172603,-0.635725}, + {0.286292,-0.148272}, + {-0.989616,0.037128}, + {-0.811488,1.305276}, + {0.736930,-1.009141}, + {1.069361,-0.737178}, + {0.752787,-0.592366}, + {-0.668359,0.755571}, + {0.005078,-0.395512}, + {0.006600,0.636287}, + {-0.619231,-0.611731}, + {0.333470,-0.919963}, + {-0.492449,-1.419036}, + {-0.622632,0.194757}, + {0.676292,1.819990}, + {-0.328240,0.542470}, + {0.345128,-0.019528}, + {-0.616645,0.691087}, + {-0.507449,-0.432094}, + {-0.204852,-0.217874}, + {0.834005,-0.099980}, + {1.199202,-0.293367}, + {0.449203,-0.521362}, + {0.226780,-0.171567}, + {0.523436,0.775392}, + {-0.711218,-0.421231}, + {0.151391,-1.096606}, + {-0.249307,0.995733}, + {0.245582,-0.339674}, + {0.412624,-0.060258}, + {-0.300827,0.023954}, + {-0.265459,0.720401}, + {-0.496526,-2.099281}, + {-0.605097,-0.001741}, + {-1.378320,-0.341276}, + {-0.994346,0.085029}, + {1.632400,0.360458}, + {-0.491899,-0.396243}, + {-0.010321,-1.021544}, + {-1.316304,0.895828}, + {-0.198830,-0.208983}, + {0.916044,0.314340}, + {0.562103,-0.885413}, + {0.878424,-0.092960}, + {-1.045844,-0.687749}, + {-1.295066,-0.226382}, + {-0.359215,0.110638}, + {0.540396,-0.456394}, + {1.030585,0.127512}, + {-0.085532,0.952881}, + {0.106917,0.478915}, + {-0.664272,-0.344642}, + {0.788052,1.409984}, + {-0.673592,1.430835}, + {-0.718720,-0.290875}, + {-0.721900,0.085461}, + {0.476120,-0.538352}, + {0.554070,0.581590}, + {-0.576287,-0.853427}, + {-0.431295,-0.014809}, + {-2.353094,1.312785}, + {1.022447,1.017332}, + {0.418273,2.001674}, + {-0.898325,0.139499}, + {0.235885,0.080549}, + {0.183877,0.730680}, + {1.009956,0.519400}, + {-0.689154,0.060848}, + {-0.683728,-0.649710}, + {0.079095,0.516578}, + {-1.386436,-0.530334}, + {0.302774,-0.053089}, + {-0.248980,0.192447}, + {-0.680767,0.423570}, + {-0.043439,0.510224}, + {-1.016935,0.183362}, + {0.076796,-1.333739}, + {-0.313256,-1.452270}, + {-0.850463,0.112410}, + {0.244360,-0.084178}, + {0.067792,-0.882987}, + {-0.569372,-0.399011}, + {-0.189225,0.729525}, + {-0.588975,-0.077969}, + {1.010968,-0.489609}, + {-0.395063,0.239897}, + {0.025387,0.354833}, + {0.725579,0.805842}, + {-1.146500,-0.264508}, + {-0.222810,-1.814964}, + {0.507912,-1.443934}, + {0.296149,0.880303}, + {-0.439268,1.606203}, + {0.334727,0.325640}, + {-0.869431,-0.847762}, + {-0.407707,0.153088}, + {0.348556,0.542411}, + {-0.082133,0.838110}, + {-0.377740,0.348750}, + {-0.523685,0.000306}, + {0.451224,1.080533}, + {0.864641,0.961894}, + {-0.464419,-0.075393}, + {0.247437,-0.100790}, + {0.677059,-0.034906}, + {0.977166,0.730818}, + {0.276546,-0.403567}, + {-0.380227,-0.745522}, + {-0.300027,0.125790}, + {0.454573,0.006509}, + {-0.771309,0.081517}, + {-0.311846,-0.412134}, + {-0.014595,0.090009}, + {0.707382,-0.074778}, + {-1.353019,-0.753631}, + {-0.100071,0.822131}, + {0.954790,-0.432571}, + {-0.078897,-0.647015}, + {0.386041,-0.035061}, + {0.448108,0.197019}, + {-0.270952,0.887823}, + {0.648405,-1.073664}, + {0.044912,-0.754380}, + {-0.455401,-1.209139}, + {-1.242109,0.132042}, + {0.391696,-0.419274}, + {-0.160193,-1.086374}, + {0.193327,0.720599}, + {1.178831,-0.759304}, + {-0.564605,1.076430}, + {-0.643302,-0.416708}, + {-0.962134,-0.990827}, + {0.368858,-0.144279}, + {0.036509,-0.440959}, + {0.179113,0.270476}, + {0.049637,-0.799549}, + {0.618109,-0.582336}, + {-1.394815,0.395536}, + {0.810724,-0.184896}, + {-0.176056,-0.058013}, + {-0.488312,-0.368066}, + {-0.080337,-0.440737}, + {0.116364,0.953468}, + {-0.307639,-0.302137}, + {0.341945,0.164106}, + {-0.466698,-1.158425}, + {0.052765,-0.344994}, + {-0.107626,-0.229995}, + {0.080011,0.653158}, + {-0.438442,0.465432}, + {1.422075,-0.608592}, + {0.108080,-1.057456}, + {-0.484339,-0.907178}, + {-0.746907,-1.978396}, + {-0.177762,0.203051}, + {0.386845,-1.106388}, + {0.611978,-1.018232}, + {0.520887,-0.361754}, + {-0.360101,-0.064618}, + {0.794305,0.526908}, + {0.619432,-0.126033}, + {-0.340265,-1.373028}, + {0.847319,1.149398}, + {-0.270491,-0.369213}, + {-1.409881,0.523044}, + {-0.402942,0.347133}, + {0.100939,-0.350152}, + {-0.107951,-0.680471}, + {0.436856,-0.753223}, + {-0.874005,0.762825}, + {1.008767,-0.929545}, + {0.927536,-0.502055}, + {1.498450,-0.602521}, + {0.762959,-0.278194}, + {-1.522717,-0.649417}, + {0.994833,-0.186581}, + {0.216919,0.567066}, + {0.850492,-0.682931}, + {-0.777097,-0.903028}, + {-0.850634,-0.188701}, + {0.044620,1.541080}, + {-0.307342,-0.202304}, + {-1.090498,-0.818833}, + {-0.004279,0.647200}, + {-0.290596,0.500608}, + {-0.009800,-0.272120}, + {-1.731344,-0.849070}, + {-0.389416,-0.540169}, + {1.177543,0.747062}, + {-0.858150,-0.456143}, + {0.973307,1.377374}, + {1.032589,0.695827}, + {0.015056,0.450971}, + {-0.934915,-0.677001}, + {0.342935,0.069114}, + {0.145474,-0.791543}, + {1.997462,-0.362196}, + {-0.993218,-0.020078}, + {1.123258,-0.113204}, + {0.125841,1.008802}, + {0.727876,1.066038}, + {-0.224529,0.890501}, + {0.213441,1.187995}, + {0.239012,-0.848701}, + {-0.519815,-0.475935}, + {0.113620,-0.506924}, + {0.203290,-0.296634}, + {-0.290231,-0.514121}, + {0.218741,1.021963}, + {-1.315299,0.334324}, + {-0.936988,0.419998}, + {0.886813,0.145840}, + {-0.188194,-1.261272}, + {0.949296,0.646163}, + {-0.826651,-0.432253}, + {0.061005,0.573649}, + {0.922200,-1.334003}, + {-0.006091,0.134091}, + {1.024516,0.063476}, + {-0.089739,-0.290697}, + {0.339610,0.989953}, + {0.555781,-1.426528}, + {-0.025669,-0.189457}, + {-0.710042,0.953935}, + {-1.262187,0.132588}, + {0.658343,-0.530960}, + {0.676713,-0.669361}, + {0.834718,-2.007914}, + {0.833518,0.359230}, + {0.649170,-0.687822}, + {-0.001830,-0.386894}, + {0.994915,-0.229340}, + {0.092444,0.399221}, + {0.536323,-0.782432}, + {0.262010,1.204889}, + {-0.208387,0.425622}, + {-1.100914,1.683131}, + {-1.658393,-0.775979}, + {-0.078725,-0.220114}, + {-0.303566,0.923927}, + {-0.225885,0.033406}, + {-0.837593,0.349616}, + {-0.560227,0.714755}, + {0.551992,-0.393791}, + {0.541405,-0.530435}, + {-1.165526,0.078792}, + {-1.026038,0.387096}, + {-0.517090,-0.484350}, + {0.136127,0.124638}, + {0.698761,0.346848}, + {-0.783071,0.074379}, + {0.158195,1.117125}, + {0.712435,-0.286792}, + {-0.362540,-1.001977}, + {-0.261314,1.161940}, + {1.007828,0.544864}, + {0.141605,0.538099}, + {-0.536036,-0.744530}, + {-0.056455,1.157725}, + {0.270982,-0.362836}, + {1.263497,0.040674}, + {0.146764,-0.753269}, + {0.364839,0.210494}, + {0.142940,0.490340}, + {0.272361,0.068047}, + {-1.040589,1.260799}, + {1.008508,0.670697}, + {-1.014574,2.123840}, + {-0.791800,-1.531609}, + {-1.780964,0.224965}, + {1.573411,0.802257}, + {-0.041381,0.109724}, + {-1.138676,0.501035}, + {-0.552511,0.754384}, + {0.074825,-0.740712}, + {0.310992,-0.947818}, + {-0.161513,1.611466}, + {0.351436,-0.213846}, + {-0.232344,0.926067}, + {-0.712473,0.154074}, + {0.531308,0.239847}, + {0.530134,0.456501}, + {-0.297722,-0.791948}, + {-0.072871,-1.399393}, + {0.183656,0.497474}, + {-0.279718,-0.393118}, + {0.648989,-0.820860}, + {0.372595,-1.044493}, + {1.032547,0.849237}, + {1.174671,-0.618382}, + {-1.652857,-1.472496}, + {0.158852,0.191819}, + {0.298620,0.279073}, + {-0.234746,-0.135384}, + {-0.875820,0.319486}, + {-0.426039,0.843713}, + {-0.496797,-0.192881}, + {-0.578836,0.257663}, + {-0.238402,0.900325}, + {-0.204088,-1.191861}, + {0.736090,1.052130}, + {-0.052316,-0.025508}, + {-0.213198,-0.936710}, + {-0.491398,0.410943}, + {0.177843,0.351607}, + {0.413028,-0.384109}, + {-0.296570,0.034297}, + {-0.222102,0.514522}, + {0.347397,-0.839739}, + {0.755191,0.119118}, + {-1.317696,1.106367}, + {0.012111,0.796336}, + {0.227983,0.378704}, + {-0.182946,0.270691}, + {-0.133785,0.099382}, + {-0.266511,0.038997}, + {-0.821681,0.553035}, + {0.389307,-1.106532}, + {0.135254,-0.883464}, + {1.870178,-0.286558}, + {-0.437784,-0.288228}, + {0.390194,0.094215}, + {0.606508,-1.296029}, + {-0.093019,-0.614305}, + {1.233362,1.207790}, + {0.161323,-0.765341}, + {-0.350088,1.001790}, + {-0.502004,-0.037202}, + {-0.067642,-0.030906}, + {-0.579459,-0.835251}, + {-0.327448,-1.330617}, + {-0.822818,-0.500291}, + {1.616254,-0.161664}, + {0.523254,0.304197}, + {0.874754,0.727626}, + {-0.625833,0.211643}, + {-0.295817,-0.417120}, + {-0.533891,0.548556}, + {-0.558758,0.571516}, + {0.822203,0.414686}, + {1.369430,0.325986}, + {1.064004,0.174272}, + {-0.985833,0.875381}, + {-0.345980,0.354199}, + {0.100855,1.346421}, + {1.413487,-0.299202}, + {-0.121055,-1.168458}, + {0.501534,-0.001734}, + {-0.099610,0.124655}, + {-0.014849,-0.560165}, + {1.152084,0.973772}, + {-0.517379,-0.823509}, + {0.020539,-0.675177}, + {-0.039182,0.878191}, + {0.067950,0.560550}, + {-1.394269,0.829335}, + {-0.441627,-0.010153}, + {0.385140,0.222085}, + {0.653992,-0.840685}, + {0.554082,-0.687828}, + {0.754380,-0.171576}, + {0.690489,-0.152949}, + {0.000351,-0.549264}, + {0.634582,-0.004171}, + {-0.818523,1.190795}, + {-0.877491,-0.566566}, + {-1.770940,-0.640230}, + {-0.681648,0.896819}, + {0.714653,-1.455870}, + {0.904495,-1.333302}, + {0.574457,-0.384864}, + {-0.758292,-0.483590}, + {0.187676,0.405114}, + {0.994700,-0.071836}, + {0.104159,0.532615}, + {-0.044879,-0.582247}, + {0.088417,0.343948}, + {-0.123630,-0.413369}, + {-0.520220,1.012739}, + {-0.210080,-0.180696}, + {1.090599,-0.559357}, + {0.684438,0.378806}, + {-0.026784,0.937192}, + {1.281961,0.075214}, + {0.730268,-0.520097}, + {0.937449,-1.019487}, + {-0.061509,-0.176202}, + {-0.421825,0.313385}, + {-0.367561,0.463862}, + {-0.121494,-0.479397}, + {0.550684,-0.312000}, + {-0.047790,-0.598700}, + {-0.759626,-0.857538}, + {0.464120,-0.230825}, + {0.787116,-0.630031}, + {-0.508880,0.581898}, + {-0.454863,0.576846}, + {-0.207468,1.946940}, + {-0.913960,-0.235153}, + {1.143211,0.111025}, + {-0.137003,0.162749}, + {-1.146435,1.853002}, + {-0.318815,-0.421180}, + {-0.260398,-0.035725}, + {0.175171,-0.048527}, + {-0.261859,0.350284}, + {0.162278,-0.033220}, + {-0.592133,-0.719742}, + {1.618602,0.334038}, + {-0.096548,-0.880363}, + {-0.348537,0.448118}, + {-0.662260,0.179356}, + {1.039235,0.256463}, + {-0.996895,0.746454}, + {-0.834224,-0.090841}, + {-0.647685,-0.812629}, + {-1.308253,0.412350}, + {-0.125295,-0.126640}, + {0.576406,-0.583028}, + {-0.374377,-0.094747}, + {0.533871,-0.080927}, + {0.515122,-1.155921}, + {-0.507165,0.282523}, + {-0.699975,1.619406}, + {0.182354,-0.753123}, + {0.710919,-0.243223}, + {1.477830,-0.025138}, + {1.782881,0.259661}, + {-0.521191,0.411698}, + {-0.166741,0.852319}, + {0.207224,-0.159255}, + {-0.487196,1.583805}, + {0.420298,-0.587703}, + {-0.287136,0.347728}, + {-0.058681,-1.279535}, + {-0.213399,-0.886647}, + {-1.030968,0.343184}, + {0.028405,-0.952633}, + {0.464603,0.442204}, + {0.931560,0.453043}, + {0.284575,0.967136}, + {0.138022,0.059599}, + {-0.451299,-1.015639}, + {1.003979,1.068919}, + {-0.655263,-0.663366}, + {-0.019621,-0.138225}, + {0.156525,-0.341867}, + {0.381232,0.059268}, + {-0.023279,-0.077880}, + {-0.156909,0.250573}, + {-0.169278,-0.914286}, + {0.305569,-0.291525}, + {0.731565,0.454905}, + {1.160261,0.085413}, + {-0.402037,-0.336640}, + {-0.086852,1.607379}, + {1.032812,0.761434}, + {-1.011438,0.206404}, + {-0.152752,0.593129}, + {0.239131,-0.087052}, + {0.808812,-0.541022}, + {-0.140430,-1.364158}, + {0.194295,0.880644}, + {0.118366,0.064148}, + {-0.536040,0.778541}, + {-0.720747,0.002512}, + {0.088296,-1.191485}, + {0.644848,-0.444607}, + {0.485903,0.409511}, + {1.460176,-0.876221}, + {-0.339190,-0.439055}, + {0.447675,0.418898}, + {-1.175829,-0.902773}, + {0.534399,0.539156}, + {-0.365101,-0.459903}, + {-0.889603,-0.728754}, + {-0.720091,0.356776}, + {0.152954,0.223066}, + {1.507327,0.739365}, + {0.310249,-0.006371}, + {-0.112344,-0.419108}, + {0.843904,-0.314723}, + {0.087930,0.313616}, + {0.844712,0.196815}, + {0.375568,0.356237}, + {0.204981,-0.400083}, + {0.361654,-0.270180}, + {-0.424588,-0.363919}, + {-0.302380,0.390982}, + {0.538019,-0.362291}, + {-0.287025,0.105711}, + {-0.592141,-0.264936}, + {-0.265425,0.583077}, + {-0.152032,0.522918}, + {-0.189186,-0.250399}, + {-1.096465,0.469056}, + {-0.888549,-1.140952}, + {-0.501972,-0.339613}, + {-0.203446,0.426474}, + {-0.039456,-0.535356}, + {0.070475,0.484328}, + {0.924276,-0.396241}, + {-0.106967,0.012352}, + {-0.367264,0.819153}, + {0.456802,0.237844}, + {0.563188,-1.024814}, + {0.009682,-0.064482}, + {-0.764852,0.219713}, + {-0.414932,-0.531342}, + {-0.088775,-0.892699}, + {-0.473699,0.186136}, + {-0.776648,-0.582610}, + {0.175734,-1.058049}, + {1.285690,-0.391957}, + {-0.091057,-1.011907}, + {-0.162767,0.561617}, + {0.031953,-0.540131}, + {0.534081,0.664403}, + {-0.360770,0.122694}, + {-0.178962,0.466559}, + {-0.004184,-0.337578}, + {-0.757067,0.029093}, + {-1.101300,0.209913}, + {0.465322,-0.086027}, + {-0.168690,1.115947}, + {0.263414,-0.000775}, + {0.159567,0.853760}, + {0.094110,-0.060344}, + {-0.421000,-1.195796}, + {0.441781,0.242496}, + {-0.021002,-0.381271}, + {-0.481126,-0.563097}, + {-0.798248,-0.508280}, + {-0.268196,0.934724}, + {1.292721,-0.335166}, + {0.226534,0.445048}, + {1.184933,0.558462}, + {0.375495,-1.145480}, + {0.748214,-0.745104}, + {0.688162,1.047310}, + {0.637883,0.949140}, + {-0.578133,-0.371881}, + {-0.506057,0.137040}, + {-0.392437,-1.031430}, + {-1.250713,-1.946813}, + {-0.206704,1.462894}, + {0.398430,-0.219612}, + {0.730672,-0.702692}, + {-0.698928,-0.450961}, + {0.584867,-0.708127}, + {0.590944,-0.109226}, + {-0.542510,0.253958}, + {-0.268875,1.111628}, + {0.649546,-0.696286}, + {-1.149829,-0.309965}, + {-0.154368,-1.500089}, + {0.822416,0.353288}, + {0.501110,-0.318761}, + {-0.212429,-0.008096}, + {-0.006164,-0.123611}, + {0.288868,0.048345}, + {-0.574713,-0.524916}, + {0.018293,-1.030497}, + {-0.005055,-0.072736}, + {0.723568,-0.635163}, + {0.237863,-0.875191}, + {-1.247980,-0.863139}, + {-0.302079,-0.212290}, + {-0.421802,-0.759025}, + {-0.589974,-0.507471}, + {-0.334862,0.003375}, + {0.401797,0.706722}, + {-0.461749,0.283630}, + {-0.841187,-0.665548}, + {-0.626371,0.618334}, + {-0.020821,0.503040}, + {0.116914,-0.093341}, + {-0.151675,-0.528033}, + {-0.193343,-1.099319}, + {0.274029,0.445690}, + {-0.021446,-1.220103}, + {0.513206,-0.740022}, + {1.777028,0.407704}, + {0.786759,0.109353}, + {-1.004914,0.876901}, + {0.464743,1.170006}, + {-0.002439,0.125068}, + {0.962875,-0.407956}, + {0.530559,-0.756573}, + {-0.389738,0.110620}, + {-0.556624,0.014509}, + {-0.132983,0.247574}, + {0.587943,-0.342146}, + {1.296368,0.197680}, + {-0.733120,-0.623643}, + {-0.011093,0.978888}, + {0.039641,-0.978184}, + {-0.443314,-0.153156}, + {0.588043,0.490341}, + {0.218709,0.363791}, + {-0.914626,0.826702}, + {1.411108,-0.816719}, + {-0.490262,-0.144227}, + {-1.206037,1.156620}, + {-0.662082,0.479091}, + {0.615883,-0.149877}, + {1.177829,-0.036366}, + {0.394260,-1.578483}, + {0.383648,0.485998}, + {-0.028002,0.334074}, + {0.722762,0.190366}, + {0.475814,0.082245}, + {0.439991,-0.022567}, + {0.014753,0.128088}, + {-1.144640,-0.335474}, + {0.470690,0.257257}, + {-0.751319,-1.107300}, + {0.531539,0.456327}, + {0.464679,0.083408}, + {0.077604,-2.053833}, + {-0.031526,-0.401000}, + {-0.741780,-0.921745}, + {-0.504616,-1.015580}, + {0.999344,-0.252633}, + {0.199592,-0.614304}, + {-1.630268,-0.100880}, + {-0.754618,-0.275004}, + {-1.115735,-0.519031}, + {-0.156714,-0.646913}, + {-0.315061,0.123277}, + {-0.414084,-0.655534}, + {0.469319,-0.330941}, + {0.647004,-0.163404}, + {-0.255922,1.618105}, + {-1.376396,-0.535470}, + {1.334960,-0.249415}, + {-0.920735,-0.189727}, + {2.380895,-0.939174}, + {-0.661720,0.252740}, + {1.948294,-0.096848}, + {-1.518951,-0.774151}, + {0.370676,-0.131442}, + {0.135880,0.077151}, + {-0.793921,0.407360}, + {0.434706,0.909590}, + {-0.892096,0.523341}, + {-0.077199,0.691331}, + {-0.703000,0.726934}, + {-0.793375,-0.399673}, + {0.170385,-0.177280}, + {0.497139,0.034646}, + {-0.972295,1.093025}, + {-0.260981,-0.434597}, + {0.295369,0.422417}, + {0.508523,0.711213}, + {-0.589540,0.610066}, + {0.089695,0.577849}, + {-1.169455,0.371278}, + {0.097553,-0.508773}, + {-1.427358,-0.450822}, + {0.764169,-0.321795}, + {0.281425,1.167852}, + {-0.513064,-0.109472}, + {1.086924,0.792903}, + {-0.003835,0.815400}, + {-0.876442,-0.231937}, + {0.483821,-0.227180}, + {0.779304,0.300537}, + {-1.021341,-1.075650}, + {-0.042599,1.217835}, + {-0.124324,1.154569}, + {0.983924,0.128325}, + {-0.262283,-0.571139}, + {0.163939,0.036503}, + {0.502541,-0.457276}, + {0.027506,0.551723}, + {-0.759208,-0.190703}, + {-0.532469,1.757544}, + {-0.097832,1.793890}, + {-0.233310,0.236538}, + {-0.296963,-0.245692}, + {0.331985,0.497470}, + {1.077897,-0.029477}, + {0.485004,-1.550032}, + {0.829323,-1.208018}, + {-0.417397,-0.885481}, + {-0.910960,0.333680}, + {0.505911,0.222267}, + {-0.779049,-0.648859}, + {0.024723,-0.506963}, + {-1.044112,0.858742}, + {0.349329,0.199761}, + {0.426148,0.579699}, + {1.397881,-0.625570}, + {-0.999539,0.150193}, + {-0.506555,-0.493017}, + {0.815503,-1.014094}, + {-0.309845,0.860823}, + {0.636101,0.034581}, + {0.383700,0.629026}, + {0.046350,-0.409060}, + {0.382661,0.192436}, + {1.578886,0.214420}, + {-0.287174,0.113654}, + {-0.567400,0.209722}, + {0.432908,-0.738713}, + {-0.114021,1.023082}, + {-0.087467,-0.003324}, + {1.628689,0.382128}, + {0.930859,-0.955031}, + {0.365787,-0.587545}, + {-0.566131,0.401941}, + {1.205574,-0.693033}, + {1.041772,-0.318306}, + {0.520455,-0.180903}, + {1.313961,0.417802}, + {-0.785333,-0.826391}, + {-0.003165,0.987190}, + {0.202221,-1.499396}, + {-0.156205,0.234217}, + {-0.034555,-0.710464}, + {0.578915,0.025341}, + {-0.967250,0.482964}, + {-0.125553,0.645679}, + {0.121600,0.282214}, + {-0.467374,-0.523647}, + {0.801851,0.110140}, + {-0.202959,0.245792}, + {0.964451,-0.823875}, + {-0.720574,-0.733981}, + {-1.552269,0.726240}, + {0.240196,0.208363}, + {-1.020113,0.453542}, + {0.835032,0.546624}, + {-0.427770,0.890482}, + {0.244842,-0.570207}, + {0.187974,-0.525677}, + {-0.033276,-0.603446}, + {0.681630,0.069452}, + {-0.076943,1.444004}, + {-0.466249,-1.483352}, + {-0.333822,-0.553728}, + {-0.464640,1.570671}, + {0.247143,-0.404809}, + {0.217763,-1.913662}, + {0.569612,0.403222}, + {-0.950478,0.269484}, + {1.296281,-0.340172}, + {0.248056,-0.421869}, + {0.333895,1.464495}, + {-0.974868,0.646046}, + {0.432670,-1.031978}, + {1.128838,0.295748}, + {-0.460823,0.493682}, + {-0.717489,1.188427}, + {1.258650,-0.377973}, + {-0.828146,0.064178}, + {0.641771,-0.060587}, + {0.245022,0.356199}, + {0.154221,-0.400658}, + {0.570724,0.989517}, + {-0.412180,0.972591}, + {0.350613,0.545597}, + {1.122365,-1.975271}, + {0.160367,0.137915}, + {0.352691,-0.878584}, + {0.423026,0.373635}, + {-0.726179,0.179411}, + {-0.338326,-1.788241}, + {1.947859,1.575207}, + {-0.951344,0.536022}, + {0.247396,-0.497166}, + {0.724586,-0.403144}, + {-0.061126,-0.153871}, + {0.528230,-0.103315}, + {-0.022290,-0.672390}, + {-0.000978,-0.182703}, + {-0.241614,-0.359854}, + {0.220241,0.428535}, + {0.798476,-0.295902}, + {-0.146218,0.143398}, + {-0.619417,0.438462}, + {-0.308855,0.331077}, + {-1.361136,1.024312}, + {-0.647613,0.907512}, + {0.233092,-1.078341}, + {1.052241,-0.621467}, + {-0.198725,1.172681}, + {-0.081506,0.023033}, + {-0.547092,0.137317}, + {0.637615,1.859723}, + {-0.623497,-0.596191}, + {0.149195,-0.605881}, + {0.093756,0.630550}, + {0.213268,-0.787503}, + {0.426453,-0.185747}, + {-1.548568,0.881788}, + {0.051195,0.231489}, + {0.209291,-0.593744}, + {0.628475,0.857678}, + {-1.089235,-0.641101}, + {0.594605,-0.576514}, + {0.252215,-0.021007}, + {1.067553,0.471123}, + {0.321541,-0.402181}, + {0.284533,-0.960188}, + {0.541105,-0.082863}, + {0.565337,1.026278}, + {0.317525,-1.185003}, + {0.530922,-0.175306}, + {-0.946283,1.216512}, + {-0.462192,0.124213}, + {-0.067219,0.018689}, + {-0.295595,0.227283}, + {-1.116823,0.278792}, + {0.252187,-0.143898}, + {-1.275510,0.009213}, + {-0.097323,-1.128635}, + {-0.292395,-0.146099}, + {0.287647,0.343419}, + {-0.297120,1.037639}, + {-1.152909,-1.062561}, + {0.117167,0.480675}, + {0.542487,0.344975}, + {-0.269590,0.071787}, + {0.351416,1.336789}, + {-0.679649,1.205267}, + {0.158638,0.405538}, + {0.690315,-0.580242}, + {-0.528184,0.321935}, + {-0.275456,0.434026}, + {1.047915,-0.868060}, + {-0.268058,0.433124}, + {0.395739,0.168345}, + {-0.706243,0.261628}, + {-1.686516,0.100118}, + {1.210646,0.205449}, + {-0.403912,1.149188}, + {0.218345,-0.059565}, + {0.666191,-1.686280}, + {-1.080821,0.264224}, + {0.133752,-0.095685}, + {-0.765833,-0.042006}, + {-0.851086,-0.571563}, + {-0.431850,-0.146573}, + {-0.083487,0.324847}, + {-0.458226,0.266507}, + {-1.653483,0.274261}, + {-0.892105,0.192638}, + {0.325240,0.618814}, + {0.839860,-0.650172}, + {0.586121,0.493141}, + {0.424046,-0.596069}, + {0.579320,-0.426532}, + {-0.860414,-0.096015}, + {1.231735,-0.063091}, + {0.667487,0.509589}, + {-0.244143,-0.241915}, + {0.392425,-0.336987}, + {-0.577080,0.077028}, + {-0.243798,0.518442}, + {-0.186535,-0.514620}, + {-0.350824,0.893193}, + {-1.068767,-0.852674}, + {0.256260,-0.692879}, + {0.700920,-0.234622}, + {-1.148149,0.242284}, + {0.140398,-0.995881}, + {-1.137315,-0.101466}, + {0.642480,1.006613}, + {-0.539053,-0.106642}, + {0.894393,-0.576259}, + {0.055949,-0.805028}, + {-0.346054,-0.817483}, + {-0.401898,0.351013}, + {0.959261,-0.648991}, + {-0.653608,1.002869}, + {0.844153,0.220495}, + {-0.631592,-0.347616}, + {-0.725926,1.047737}, + {0.236023,0.283730}, + {0.123264,0.320307}, + {1.048852,-0.451049}, + {-0.411348,-0.986237}, + {-0.003611,-1.217079}, + {-0.178690,0.757153}, + {-0.913871,0.555166}, + {0.359649,-0.092164}, + {-0.762808,-1.868481}, + {-0.459054,-0.002625}, + {-0.409244,-0.658257}, + {0.538408,-0.336349}, + {-0.748231,-0.660716}, + {-0.250560,-0.025371}, + {0.456996,-0.231112}, + {0.299549,-1.219953}, + {1.172228,-0.394426}, + {-0.378361,0.665830}, + {0.415112,0.418938}, + {-0.548112,0.102843}, + {-0.133962,-0.903369}, + {-0.468702,0.681193}, + {1.222459,1.556622}, + {0.578721,0.124503}, + {-0.465609,-1.236596}, + {0.344855,0.485644}, + {-0.769591,0.360454}, + {-0.285111,-0.421824}, + {0.383924,-0.612774}, + {-0.340934,-0.217555}, + {1.033859,-0.961846}, + {-0.638277,-0.124713}, + {0.713854,-1.025591}, + {0.641113,0.723899}, + {-0.714185,0.025297}, + {-0.243242,-0.632974}, + {0.004698,-0.561759}, + {0.826869,1.173450}, + {0.966164,-0.707247}, + {-0.542635,1.049767}, + {-0.518506,-0.302156}, + {0.545221,-0.705138}, + {-0.102193,-0.186358}, + {0.365136,0.095347}, + {0.201770,-0.480568}, + {0.016332,0.581984}, + {-0.200321,-0.337498}, + {0.655831,0.299526}, + {-0.638049,0.233237}, + {1.424052,-0.333001}, + {0.052369,-0.134042}, + {-0.288253,1.232961}, + {0.183916,-0.245885}, + {0.477995,-1.296021}, + {-0.386385,-0.681627}, + {-0.871080,0.846105}, + {0.995819,-0.009435}, + {0.296135,0.463088}, + {0.504048,0.026186}, + {0.829560,-1.492906}, + {0.848924,-0.979175}, + {-0.656607,-0.872808}, + {0.063178,-0.565062}, + {-0.543978,0.668214}, + {-0.282821,-0.442039}, + {0.348789,0.133412}, + {-0.108280,-0.389999}, + {0.463560,-0.296653}, + {0.762565,-0.939430}, + {0.562681,0.745310}, + {-0.475544,-0.766254}, + {-0.140575,0.199589}, + {-0.681751,-0.057548}, + {-1.695019,-0.254700}, + {-0.534453,-1.252818}, + {-0.097463,-0.033164}, + {0.013134,0.327568}, + {0.838379,0.372423}, + {0.665435,-1.323001}, + {-0.545902,1.244126}, + {-0.272644,0.828079}, + {-0.246118,0.092456}, + {1.201818,0.219538}, + {0.298446,0.028810}, + {0.130586,-1.150124}, + {-0.189182,0.693609}, + {-0.220031,0.117008}, + {0.553178,-1.375086}, + {0.699370,0.127016}, + {0.961901,0.570180}, + {-0.251472,-0.425322}, + {0.846566,0.693479}, + {-0.078834,-0.799604}, + {-0.174930,-0.493040}, + {-1.328997,-0.114349}, + {0.127677,0.719281}, + {-1.121602,-1.078388}, + {-0.664228,1.733879}, + {1.383895,-0.064893}, + {0.539674,-2.059210}, + {-1.022668,0.526521}, + {0.733573,-0.308119}, + {-0.188367,1.132020}, + {0.610091,-0.282697}, + {0.423397,0.009993}, + {0.393636,-0.644193}, + {0.128715,-0.357517}, + {0.517623,-0.447918}, + {0.158965,1.067064}, + {0.371601,-0.581261}, + {-0.927113,-0.619224}, + {1.303716,-1.165499}, + {0.322206,0.200896}, + {-0.825444,0.595176}, + {0.762828,-1.494917}, + {1.295692,-1.470736}, + {0.013767,-0.200418}, + {-0.238785,-0.631234}, + {-0.022044,-0.446997}, + {0.407923,-0.215020}, + {-0.523749,-0.371120}, + {0.713283,0.184292}, + {-0.268406,-0.526939}, + {0.138893,-1.775308}, + {-0.937942,1.003578}, + {-0.063107,0.546195}, + {-0.317434,0.743692}, + {0.750336,0.359023}, + {-0.674060,-1.184966}, + {2.118200,0.150908}, + {0.312808,0.577403}, + {-0.115615,-0.380405}, + {0.093313,0.277709}, + {0.781873,-0.614278}, + {0.868257,-0.087240}, + {0.696852,-0.037947}, + {0.418258,-0.615206}, + {-0.502346,-0.363948}, + {0.607748,1.486425}, + {-0.564759,0.351200}, + {-0.583354,-1.006512}, + {0.270122,-0.440737}, + {0.779603,-0.084426}, + {-0.007898,-0.106035}, + {0.320554,0.214694}, + {-0.177764,-1.660508}, + {0.364537,-0.190366}, + {0.239589,-0.553225}, + {-0.383177,0.604839}, + {0.055061,0.152930}, + {0.224963,0.592680}, + {0.196291,-0.213862}, + {-0.145762,0.712477}, + {0.968561,0.056109}, + {0.598746,0.380951}, + {0.702798,0.468182}, + {-0.052676,-0.835553}, + {0.586200,-0.290487}, + {-0.725037,-0.556427}, + {0.267490,-0.645407}, + {-0.859603,0.256510}, + {-1.167129,-0.483687}, + {-0.249517,-0.840456}, + {-0.081174,-0.251055}, + {-0.107692,1.266167}, + {0.924662,-0.992418}, + {0.178689,0.182523}, + {-0.559303,-0.632352}, + {-0.754172,-0.225666}, + {0.422639,-0.820600}, + {0.948590,1.657351}, + {-0.281405,-0.169279}, + {0.057540,0.103383}, + {0.965329,-0.888955}, + {-0.568440,1.343059}, + {-0.186236,-0.018155}, + {-0.110761,-0.791860}, + {-0.525465,-0.172692}, + {-0.820201,-0.368637}, + {0.488156,-0.537817}, + {-0.115891,-0.625948}, + {-0.244424,-0.566245}, + {-0.034738,-0.193282}, + {0.995996,1.175802}, + {0.633444,1.030137}, + {0.651915,0.959199}, + {1.923756,-0.905022}, + {-1.312415,0.148790}, + {-0.096677,-0.026953}, + {0.390501,0.602404}, + {0.867561,-0.780886}, + {-0.248516,0.609102}, + {0.754966,-0.110229}, + {0.193581,-1.306164}, + {-0.006005,-0.435352}, + {-0.309464,0.845346}, + {-1.119399,-0.660584}, + {1.827421,-0.534782}, + {1.365352,-0.177950}, + {-0.386234,-0.795813}, + {-0.468086,-0.003789}, + {0.881840,0.036744}, + {-0.514770,-0.810572}, + {0.151684,0.110164}, + {0.458389,0.323786}, + {-0.120473,-1.314917}, + {0.204646,1.100970}, + {0.020544,0.284023}, + {-1.429218,1.177050}, + {0.905353,0.885557}, + {-1.160315,1.849909}, + {-1.424230,-1.176559}, + {-0.905514,0.530293}, + {0.395918,0.575079}, + {-0.420402,0.728284}, + {-0.068162,-0.727264}, + {-1.231408,0.352116}, + {-0.629367,0.024142}, + {-0.776077,0.835663}, + {1.388639,1.024976}, + {0.079304,0.123010}, + {-0.742089,-0.595562}, + {0.413633,0.178427}, + {1.148139,0.310845}, + {-1.223023,-0.107151}, + {0.893529,-0.158779}, + {0.455295,0.570938}, + {0.361370,0.154722}, + {0.452221,0.207669}, + {0.342056,0.533909}, + {1.139659,0.955398}, + {0.954993,0.826294}, + {0.436891,0.869010}, + {0.229994,-0.244482}, + {0.099847,-0.476888}, + {-0.522935,0.503299}, + {-0.406360,0.610955}, + {0.944435,-0.128204}, + {0.065770,-1.670135}, + {0.740768,-0.036056}, + {-0.584472,-2.391807}, + {-0.818919,0.704807}, + {-0.164141,0.180842}, + {-0.896661,0.450317}, + {0.871090,0.180263}, + {0.135365,1.111712}, + {-0.834453,-0.341845}, + {-0.257690,-0.035587}, + {-0.462253,0.690694}, + {-0.658742,-0.564799}, + {-0.424196,2.228747}, + {0.041939,-0.154539}, + {-0.403634,0.374377}, + {-1.213989,-0.071425}, + {-1.333255,0.641658}, + {0.544231,0.130374}, + {-0.285297,-0.101088}, + {0.409156,0.353600}, + {-0.616579,-0.490166}, + {0.138329,1.149111}, + {-0.089856,-0.208823}, + {0.269195,0.727445}, + {-0.532599,0.947341}, + {1.064642,0.518264}, + {-0.160568,0.127441}, + {-0.982412,0.428601}, + {0.671490,-0.105111}, + {-0.544419,0.539514}, + {0.650748,0.073317}, + {1.383643,0.790720}, + {0.254461,-1.150863}, + {-1.104232,0.797452}, + {-0.254246,-0.008363}, + {-0.300772,-0.103863}, + {0.576015,0.396718}, + {1.176581,0.732102}, + {0.153447,0.054295}, + {0.000016,-0.797409}, + {0.700654,0.049420}, + {-0.194685,-0.862644}, + {-0.478585,-0.200502}, + {-1.569114,-0.100896}, + {-0.099857,1.359227}, + {0.499119,0.183329}, + {-0.594711,0.176504}, + {0.329206,1.105346}, + {0.247398,-0.273746}, + {-0.345935,-0.650667}, + {-0.038984,-0.023328}, + {-0.333903,-0.697988}, + {-1.651307,-0.010374}, + {0.135007,-0.017740}, + {-0.899312,0.155947}, + {-0.464175,-0.248264}, + {0.009996,0.360149}, + {-0.695577,-0.382261}, + {-0.402334,-0.007657}, + {0.620490,0.453809}, + {0.091440,0.758711}, + {0.343166,1.541721}, + {0.429339,-0.421495}, + {-1.151836,0.034463}, + {-0.085981,0.906358}, + {-0.026440,1.303161}, + {0.193819,0.354018}, + {0.562069,-0.395005}, + {-0.439914,-0.948032}, + {-0.334438,0.562737}, + {-0.864347,0.208509}, + {-0.643184,-0.135769}, + {0.053163,0.285246}, + {1.646151,-0.432861}, + {1.132792,-0.101623}, + {-0.698541,0.212543}, + {-0.600253,-0.394334}, + {-1.414120,-0.017888}, + {-0.368393,-0.718877}, + {-0.680915,0.363811}, + {-0.319313,0.322213}, + {-0.244923,0.003331}, + {1.157367,-0.139673}, + {0.607064,-0.324347}, + {-0.644671,-0.765634}, + {0.089788,-0.064507}, + {-0.720007,-0.670351}, + {0.360654,0.469579}, + {-0.309126,-0.364294}, + {0.500641,-0.866124}, + {-0.320571,-0.281417}, + {-0.224328,1.348302}, + {0.115238,0.182192}, + {-0.936327,-0.335628}, + {0.137544,0.668139}, + {0.100546,-0.022904}, + {-0.024822,-0.108423}, + {0.011225,0.990800}, + {-0.279834,-0.438608}, + {-0.275984,0.874441}, + {-0.823737,0.963043}, + {-0.768202,1.310865}, + {-0.066729,1.666242}, + {0.907228,0.372265}, + {-0.319255,0.457291}, + {-0.671123,0.800845}, + {-0.077611,0.279797}, + {-0.194283,-0.608156}, + {-0.041376,-0.876926}, + {-0.020332,-0.458281}, + {-0.440460,0.163008}, + {0.454897,0.330234}, + {-0.331951,-1.540866}, + {-0.633680,-0.034518}, + {0.757495,0.101301}, + {-0.833573,-0.786251}, + {0.965374,-1.392252}, + {-1.562416,-0.203946}, + {0.170349,0.102477}, + {-0.297897,0.362400}, + {-0.231639,-0.158231}, + {0.959721,0.665986}, + {1.098533,0.573646}, + {-0.091776,0.472902}, + {0.533416,-1.030881}, + {0.526210,1.060061}, + {-0.223194,0.188243}, + {-0.611879,-1.854657}, + {0.428365,0.538233}, + {-1.044283,-0.338610}, + {0.027523,0.049873}, + {-0.049738,0.893777}, + {-0.579892,-0.756394}, + {-0.740191,0.748805}, + {-0.542898,-1.202564}, + {0.825741,-0.048525}, + {0.539443,-1.170783}, + {1.033500,0.348025}, + {0.715562,0.128228}, + {0.108775,0.269008}, + {0.955005,0.864143}, + {-0.207915,0.674605}, + {1.403034,0.313231}, + {0.296529,-1.450481}, + {0.548132,1.537754}, + {-0.021173,-0.057581}, + {0.936941,0.628264}, + {-0.628539,0.130955}, + {0.068526,0.421100}, + {-0.403953,-1.199911}, + {1.453961,-0.456943}, + {-0.201087,0.108304}, + {0.271445,0.783038}, + {0.520304,0.921613}, + {-1.395021,-0.780013}, + {0.131228,-0.186797}, + {-0.855353,0.537660}, + {-0.337268,-0.724038}, + {-0.432516,0.344531}, + {-0.767389,0.464180}, + {-1.035498,0.530026}, + {0.441212,0.883714}, + {1.105195,-0.408422}, + {-1.103082,-0.169069}, + {-0.295896,0.969360}, + {-0.478854,-0.782398}, + {0.416756,0.605709}, + {0.733967,0.544675}, + {0.971172,0.356416}, + {0.599161,-1.120536}, + {-0.248181,0.556249}, + {0.887368,-0.641314}, + {0.673646,-0.843245}, + {-0.312341,0.397320}, + {0.729720,1.731690}, + {-0.801968,0.323223}, + {-0.536627,0.327754}, + {1.622578,-0.105935}, + {-1.750543,-0.207221}, + {-1.908934,-0.520022}, + {-1.469000,0.309230}, + {-0.115261,0.192568}, + {-0.122709,0.084334}, + {0.189000,0.696045}, + {0.493215,-1.328955}, + {-0.721492,-0.333963}, + {1.161054,-0.002184}, + {0.512723,1.972711}, + {-0.444754,-0.130414}, + {-0.868852,-0.249870}, + {-0.816170,0.515289}, + {1.022070,-0.030086}, + {-0.638999,-1.338192}, + {0.242959,0.271414}, + {-0.602075,-0.601963}, + {0.423126,0.633321}, + {0.223533,0.010055}, + {0.646706,1.390161}, + {-0.357542,0.682465}, + {-2.009524,-0.830636}, + {-0.778937,-0.933904}, + {0.175269,-1.002111}, + {-0.634257,0.665399}, + {-0.657813,0.290878}, + {0.747272,-0.428248}, + {0.007320,-0.768663}, + {1.248404,-0.212529}, + {-0.270378,0.342898}, + {-0.666666,-1.140755}, + {0.196211,1.501705}, + {0.302202,0.083526}, + {0.991868,-0.189178}, + {0.155298,-1.253545}, + {-0.466703,-0.348936}, + {0.716118,0.723010}, + {-1.105804,-0.353013}, + {0.555094,0.469380}, + {-0.287244,1.500390}, + {-0.246485,0.237558}, + {-0.510462,-0.763731}, + {-0.561608,-0.551817}, + {-0.069471,0.227096}, + {1.137497,0.948345}, + {0.172721,-0.065489}, + {0.748416,0.831896}, + {-0.155555,-0.792121}, + {-0.477453,0.763809}, + {0.124495,0.775665}, + {-0.615673,0.574783}, + {0.204540,0.358135}, + {-0.903123,-0.381671}, + {0.487242,0.995473}, + {-0.926024,0.064502}, + {0.929931,0.258942}, + {0.312395,-0.341280}, + {0.549625,-0.936615}, + {-0.861195,0.434874}, + {1.386344,1.002935}, + {0.150581,1.440757}, + {-0.223814,0.226411}, + {-1.239970,0.911429}, + {0.525911,-0.294822}, + {0.774677,-0.033484}, + {-0.481076,-0.140935}, + {0.097171,0.602864}, + {0.273227,1.072022}, + {0.309890,0.473631}, + {-0.466034,0.111893}, + {-0.691036,0.030113}, + {-0.821156,-0.280252}, + {-0.526502,-0.289481}, + {0.720837,0.871377}, + {0.790615,0.875528}, + {0.797253,0.484843}, + {0.111852,-1.055992}, + {0.169400,0.295747}, + {1.171135,-0.137264}, + {0.290213,0.662161}, + {-0.393626,-0.143884}, + {-0.749653,-0.256666}, + {0.260497,0.439210}, + {1.135854,-0.431511}, + {0.258906,0.670444}, + {-1.066888,-0.119150}, + {0.453981,0.837529}, + {0.411804,0.845536}, + {-1.059449,0.036210}, + {0.764611,0.473083}, + {-0.027347,0.346493}, + {0.339275,-1.308645}, + {-0.110170,-0.533479}, + {-0.509505,0.121273}, + {0.007601,0.222193}, + {0.245116,1.845521}, + {-0.063218,0.106742}, + {0.947333,0.014644}, + {0.082611,-0.363300}, + {0.686892,-0.186853}, + {1.235221,0.021879}, + {-0.257780,0.017378}, + {0.015664,0.281120}, + {0.190295,0.897504}, + {0.379354,0.120590}, + {0.427338,-0.164006}, + {1.172924,0.915224}, + {0.721570,-1.247163}, + {0.084550,0.312004}, + {-1.286085,0.190192}, + {0.284174,-0.119200}, + {-0.010789,-1.373622}, + {-0.185711,-0.418035}, + {0.505770,0.363854}, + {0.061188,0.700576}, + {-0.462928,0.573874}, + {0.740084,-0.629523}, + {0.528961,1.652541}, + {0.623314,0.190869}, + {-0.597870,-0.927126}, + {0.533533,0.251731}, + {0.277124,1.153433}, + {0.851106,-0.786252}, + {-1.330171,1.147345}, + {-0.464697,0.070864}, + {0.212042,-0.145618}, + {-0.687571,1.186801}, + {0.481482,0.178028}, + {-0.149879,0.044565}, + {-0.223578,0.104703}, + {0.574649,-0.285176}, + {-1.833740,0.013517}, + {-1.725660,-0.234990}, + {-0.463536,0.588847}, + {0.902710,0.788674}, + {-0.254637,-0.532033}, + {0.572229,1.349808}, + {-0.063305,-0.215431}, + {0.516429,0.299522}, + {-1.130246,0.308680}, + {-0.900674,-0.507683}, + {-0.583496,0.223002}, + {-0.592279,-0.950809}, + {-0.100426,-0.586777}, + {-0.028076,0.677118}, + {-1.803788,-0.573550}, + {-1.088822,1.183910}, + {0.596317,-1.549580}, + {0.668189,-0.306555}, + {-0.020441,0.607971}, + {0.853888,0.246148}, + {0.879904,1.225752}, + {1.614124,0.830021}, + {-0.291743,-0.135559}, + {0.458523,-0.480775}, + {0.275255,0.138678}, + {0.883940,0.525436}, + {-0.542455,-0.182128}, + {0.999170,-0.332015}, + {0.099745,0.792268}, + {0.708489,0.722752}, + {-1.050482,-0.202141}, + {-1.139348,0.223888}, + {-0.165198,-0.429917}, + {0.319484,0.084528}, + {0.047179,0.526009}, + {-1.274314,-0.347434}, + {-0.377124,0.028014}, + {-0.360881,0.915426}, + {-0.725553,-1.003947}, + {0.135016,0.821066}, + {0.748460,0.802817}, + {0.130105,0.256667}, + {-0.269583,0.719719}, + {0.649401,0.873793}, + {0.987143,0.161186}, + {-0.240362,0.789136}, + {-0.121450,0.924916}, + {-0.259843,0.404871}, + {0.016597,-0.851491}, + {-0.042926,-0.009539}, + {-0.196370,-0.423108}, + {-1.535905,0.622120}, + {-0.853325,0.069428}, + {-0.713308,0.493254}, + {0.023896,0.016209}, + {-1.230161,0.130732}, + {0.290839,-1.217903}, + {-0.256162,-0.539416}, + {0.629392,0.257101}, + {0.982458,-0.309371}, + {1.120927,1.254970}, + {2.080817,-0.873252}, + {-0.419871,0.427512}, + {-0.008634,0.589147}, + {-1.033991,-0.181336}, + {0.243382,-0.186332}, + {0.333660,-0.327366}, + {0.221360,0.080553}, + {0.704698,0.309089}, + {-0.450895,0.130395}, + {0.168094,-0.573576}, + {1.018659,0.358155}, + {0.418952,-0.622499}, + {-0.997778,0.362820}, + {0.222152,-0.219744}, + {-0.166802,0.480155}, + {-0.919339,-0.890832}, + {-0.286039,0.292035}, + {0.448303,-0.301572}, + {-0.449567,1.207951}, + {0.897655,-0.477985}, + {0.503965,-0.545751}, + {0.401514,-1.644501}, + {0.271308,0.286347}, + {-0.284592,0.577983}, + {-0.009884,0.478410}, + {1.517272,-1.524143}, + {-1.437806,0.700884}, + {-0.275556,-1.439763}, + {1.893314,-0.130608}, + {-0.166340,0.557318}, + {-0.691321,0.091720}, + {-0.106616,0.561819}, + {-0.383283,-0.766395}, + {0.775944,0.312252}, + {0.208777,-0.783645}, + {-0.680476,0.061669}, + {0.183494,-1.161476}, + {-0.392678,-0.523162}, + {-0.073376,0.398882}, + {1.160349,-0.807825}, + {-0.986883,0.472541}, + {-0.034247,-0.317474}, + {0.352450,-0.542563}, + {0.578726,0.400276}, + {-0.141064,-0.541357}, + {-0.202180,0.303236}, + {-0.873698,-0.388820}, + {-1.241604,-0.714657}, + {0.264090,-1.498626}, + {0.602075,0.227838}, + {-0.154430,0.667914}, + {-1.462996,0.458992}, + {-0.822634,0.424372}, + {-0.658739,0.865879}, + {-0.422218,0.182616}, + {0.053181,-0.072330}, + {-0.062806,0.762247}, + {0.835446,-1.311912}, + {0.087703,0.026320}, + {0.542328,-0.151886}, + {-1.828505,0.593531}, + {-1.080520,1.086271}, + {0.849256,0.525323}, + {0.497942,0.697413}, + {-0.244531,1.043887}, + {-1.458797,-0.216500}, + {-1.214738,-1.022308}, + {0.159061,-0.098262}, + {0.727952,1.271393}, + {-0.754485,0.954004}, + {-0.176632,0.615747}, + {0.028411,-0.767032}, + {-0.748180,-0.441965}, + {0.242074,-0.788659}, + {0.670060,1.096734}, + {0.154009,-1.243446}, + {0.850586,-1.501833}, + {1.150581,0.774110}, + {-0.989572,0.879881}, + {-0.575178,0.294339}, + {0.003447,0.489239}, + {1.145287,0.324623}, + {0.184091,-1.062771}, + {0.158889,0.215402}, + {0.201577,0.011042}, + {-0.181512,-0.504270}, + {-0.055374,0.590276}, + {-0.531721,-0.884568}, + {-0.209470,-0.372283}, + {-1.255795,-0.759923}, + {0.366333,-0.922058}, + {1.322717,-0.181335}, + {-0.678275,1.164669}, + {-0.750670,-0.137794}, + {0.112897,0.410423}, + {0.191286,0.113733}, + {-0.452766,0.723349}, + {-0.736083,-0.170689}, + {0.692416,0.132405}, + {1.018870,-1.559833}, + {-1.443120,-0.229399}, + {0.716224,0.947647}, + {0.279685,0.653005}, + {0.710520,0.177459}, + {-0.557518,-1.425511}, + {-0.256127,0.315232}, + {-0.082281,0.579783}, + {-0.857951,-0.531888}, + {-0.747733,1.197090}, + {-0.006789,-0.966185}, + {-0.612837,-0.621645}, + {1.132351,0.561013}, + {0.365387,0.280771}, + {0.819015,0.005642}, + {0.077710,-0.275083}, + {-0.589305,0.053577}, + {0.746235,0.106363}, + {0.483010,-0.756925}, + {0.555464,-1.006915}, + {1.083126,-0.706053}, + {-0.114394,-0.110508}, + {1.101602,-1.451006}, + {0.482109,0.584615}, + {0.242472,-1.768441}, + {2.096101,0.679566}, + {-0.527421,-0.071384}, + {1.001152,0.540874}, + {1.515730,-0.408948}, + {-1.081754,-0.587317}, + {-1.534001,-0.908835}, + {0.161009,0.022969}, + {-0.555147,0.084544}, + {-0.049147,0.004229}, + {-0.281130,1.140545}, + {1.877216,0.501126}, + {0.834883,0.052106}, + {0.108568,-1.416109}, + {-0.496393,-0.851726}, + {-0.546421,-0.850434}, + {-0.100497,0.366563}, + {-0.505233,-0.181871}, + {0.003181,-0.257644}, + {-0.427184,0.802357}, + {2.175829,0.214003}, + {-1.470833,-0.859757}, + {0.177123,-0.005589}, + {-0.155512,-0.028954}, + {-0.576782,-0.183170}, + {0.659928,0.889550}, + {0.547329,-0.667458}, + {1.543267,-0.883763}, + {-0.027341,-0.587168}, + {-0.767299,0.181322}, + {-0.058809,0.621716}, + {-0.136666,0.112151}, + {1.320616,-0.923620}, + {-0.758136,0.563569}, + {-0.896224,0.826225}, + {0.415972,1.835909}, + {-0.226084,0.573171}, + {0.648683,0.868590}, + {0.148597,0.095773}, + {-0.923255,-0.006413}, + {0.008498,0.345011}, + {-0.438936,-0.177137}, + {-0.220799,0.289912}, + {0.374629,-1.246758}, + {-0.405352,-0.920192}, + {0.267008,0.274742}, + {-0.976383,-0.137177}, + {0.688771,1.380999}, + {-0.478994,-0.518246}, + {0.005349,0.286922}, + {-0.296630,0.203362}, + {-0.543880,-0.873593}, + {1.511098,-0.907825}, + {0.433183,-1.112696}, + {0.716750,-0.497192}, + {0.545947,0.471261}, + {1.624519,-0.037766}, + {-0.383763,-0.364185}, + {-0.361717,0.471989}, + {-0.997984,1.419701}, + {0.816524,-0.299520}, + {-0.245384,0.189731}, + {0.065447,-0.059209}, + {0.779328,0.204790}, + {0.731539,-0.345297}, + {0.404574,0.248687}, + {1.043347,2.307089}, + {0.334605,-0.253063}, + {-0.216840,-0.098456}, + {0.350238,-0.382642}, + {0.349119,-0.532957}, + {-1.859158,-0.233730}, + {0.862392,-0.445325}, + {-0.101752,-0.036104}, + {-0.378956,-0.338704}, + {-0.994805,0.464318}, + {-0.996382,0.208659}, + {0.808323,0.455032}, + {-2.112046,0.061540}, + {0.819598,0.624593}, + {0.878981,1.053073}, + {-0.341489,-0.442258}, + {-0.496671,-0.854729}, + {0.065132,0.231571}, + {-0.246478,0.530029}, + {-0.284105,0.054951}, + {0.376465,-0.172238}, + {0.299234,0.652101}, + {-0.627995,1.886543}, + {-0.482888,-0.856058}, + {-0.830026,-0.832774}, + {0.779929,0.337171}, + {-0.369851,-0.412797}, + {-0.432700,0.692209}, + {-0.065776,1.142133}, + {1.054275,-0.392488}, + {-0.718737,-0.644947}, + {-0.076992,-0.542669}, + {-0.175216,0.328426}, + {-1.591234,-0.008631}, + {-0.369091,-0.575943}, + {-0.664370,0.357384}, + {-0.223916,-0.159983}, + {-0.524674,0.109124}, + {0.980964,0.285221}, + {1.085013,0.302149}, + {0.239054,-1.200352}, + {-1.131626,0.880129}, + {0.611328,0.462691}, + {0.109595,-0.038623}, + {0.137486,0.811529}, + {0.196871,-0.418142}, + {0.699526,-0.181672}, + {-0.998589,0.332045}, + {-0.339367,-0.358573}, + {-0.870253,0.811889}, + {0.424311,2.218276}, + {0.122027,0.056903}, + {-0.485555,-0.599874}, + {-0.023325,0.457989}, + {-0.257390,0.531017}, + {-0.594800,-0.363526}, + {1.037002,0.461854}, + {0.667577,0.489237}, + {0.025804,0.603610}, + {-0.453581,-0.162107}, + {0.230955,-0.243543}, + {-0.669782,0.966822}, + {-0.624782,-0.044558}, + {-0.787855,0.834564}, + {-0.309755,-0.555690}, + {0.895544,0.561778}, + {-0.081447,-0.146939}, + {0.741198,-0.128052}, + {0.669056,0.986545}, + {-0.747874,0.482845}, + {0.073550,-0.909752}, + {-0.872751,-0.413878}, + {-0.863929,-0.294266}, + {1.093727,-0.577195}, + {-0.161357,0.324918}, + {0.125704,0.723239}, + {-0.766171,-0.998274}, + {-0.023512,0.626686}, + {-0.790729,-0.296770}, + {2.140339,0.378394}, + {-0.262331,0.246625}, + {-0.856882,-0.281878}, + {0.997209,0.093078}, + {1.148219,-0.546145}, + {-0.030454,0.592030}, + {0.076696,0.233782}, + {-0.141260,-0.777390}, + {-0.589189,-0.483685}, + {0.289672,0.386135}, + {-1.264861,-0.995417}, + {-0.042752,-0.532604}, + {-0.134781,0.365284}, + {-0.340780,1.472232}, + {-1.483415,0.914143}, + {-0.283508,0.156881}, + {-0.736152,-1.343692}, + {-0.096745,0.290601}, + {0.091744,0.223455}, + {-0.353464,0.284825}, + {-2.136104,-0.528703}, + {0.494303,0.010275}, + {0.096905,-0.401126}, + {0.727808,0.185508}, + {-0.613681,0.534158}, + {1.044872,0.971303}, + {0.717104,0.100286}, + {-1.419618,-0.604448}, + {-0.410767,-0.231726}, + {0.848536,0.951917}, + {0.746859,-0.161283}, + {-1.056914,-0.626140}, + {-0.302984,0.411916}, + {-0.391683,0.373145}, + {-0.314457,0.491804}, + {1.239795,-0.694703}, + {-0.168077,-0.742324}, + {0.053671,0.573151}, + {1.116908,-0.547143}, + {-0.580176,1.202944}, + {0.088589,-0.455011}, + {0.779909,0.947051}, + {-0.559228,-0.818329}, + {-0.112108,-0.428851}, + {0.483455,0.814911}, + {1.219918,-1.265525}, + {-0.808586,0.580155}, + {-0.538486,-0.056154}, + {0.696324,0.122801}, + {-0.312645,-0.640077}, + {0.504048,-1.031634}, + {0.178747,0.494393}, + {1.744485,1.430984}, + {-0.106728,0.085838}, + {-0.572292,0.236523}, + {0.052278,0.163252}, + {0.083152,-0.214327}, + {0.114333,0.425771}, + {0.359542,-0.296919}, + {-0.935315,0.054319}, + {0.076361,-0.824908}, + {-0.081657,0.104635}, + {-0.267140,-0.395640}, + {0.426262,-1.206860}, + {0.257655,0.559848}, + {0.244592,1.151796}, + {0.897633,-0.515393}, + {0.418324,0.647156}, + {-0.741549,0.112829}, + {0.988401,-0.625204}, + {0.369894,-0.802808}, + {0.658272,-2.303792}, + {-0.215105,1.646744}, + {0.519888,1.012419}, + {-0.238965,-0.324462}, + {-0.112710,0.191850}, + {-0.066331,-1.146826}, + {-0.038528,-0.023964}, + {0.373568,0.001974}, + {-0.864264,-0.906543}, + {0.679871,0.421732}, + {-0.043741,1.101931}, + {-0.552452,-0.138525}, + {-0.095636,-0.883681}, + {-0.072871,0.876045}, + {-0.238791,0.132820}, + {0.244078,-0.390211}, + {-0.082340,0.487018}, + {0.796116,0.096262}, + {0.408338,0.230686}, + {-0.441585,-0.626388}, + {0.365510,0.719968}, + {0.126699,-0.388437}, + {0.110592,-0.075274}, + {2.264902,-1.563334}, + {-0.272466,-0.015424}, + {0.608222,1.351945}, + {-1.147737,1.113406}, + {0.284979,-0.205787}, + {-0.450449,0.238860}, + {1.027885,-0.840673}, + {-0.455186,-0.221859}, + {-0.938632,-2.082159}, + {1.391911,0.802204}, + {0.975475,-0.276338}, + {-0.243330,-0.064295}, + {0.138971,0.536216}, + {0.691166,0.177819}, + {1.026026,-1.879955}, + {-0.187583,0.063026}, + {-0.074402,-0.288843}, + {-0.243687,0.652614}, + {-1.212718,-0.767727}, + {0.251387,0.506600}, + {-0.660165,0.422242}, + {0.679188,1.371130}, + {-0.170699,-0.614176}, + {0.520129,-0.476992}, + {0.848435,-0.401178}, + {0.405024,-0.093561}, + {0.626143,0.076985}, + {0.295405,-0.762852}, + {0.549177,0.725065}, + {0.526664,0.156528}, + {0.977468,-0.889557}, + {-0.501570,-0.343316}, + {-2.000729,-1.623071}, + {-1.946962,0.328553}, + {0.777598,-0.856117}, + {-0.326491,0.100360}, + {0.198779,-0.141495}, + {-0.995361,-1.077920}, + {0.047623,-0.345042}, + {1.887429,-0.220347}, + {-0.157694,0.558083}, + {0.462495,-0.577463}, + {-0.215078,-0.858704}, + {1.253739,0.253756}, + {-0.169634,-1.005008}, + {-0.047497,0.740879}, + {-0.581666,0.040685}, + {-0.201745,1.662973}, + {0.317519,-1.047738}, + {0.967803,0.032915}, + {0.212464,0.089187}, + {0.718780,0.944362}, + {-1.948257,-0.331151}, + {0.922229,-0.646998}, + {-0.627500,0.378164}, + {-0.222201,-1.313254}, + {-0.266142,0.014479}, + {-0.424176,-0.993625}, + {-0.059820,0.319289}, + {-0.843761,-0.433096}, + {0.087394,-0.412266}, + {0.305914,-1.210798}, + {0.471462,0.643052}, + {1.252232,0.000904}, + {0.216403,-0.122659}, + {1.216662,0.381311}, + {1.296341,-0.140316}, + {-0.022925,0.194975}, + {0.862409,0.620792}, + {0.064807,1.351515}, + {-0.565969,-0.236810}, + {-0.155437,0.605360}, + {0.051996,0.325921}, + {0.150445,0.429124}, + {0.459964,0.511976}, + {0.428904,0.323586}, + {0.188316,-0.513317}, + {0.939000,1.371945}, + {0.649626,-0.024783}, + {1.376851,0.200015}, + {-0.048111,-1.183880}, + {-0.786435,-0.777301}, + {-0.241709,1.388115}, + {-0.109006,0.946566}, + {1.156840,1.561297}, + {-0.127523,1.700414}, + {0.761736,-0.883463}, + {-1.099255,-0.579362}, + {1.338325,0.799131}, + {-1.021709,0.379151}, + {-0.994399,0.063684}, + {0.818383,-0.273057}, + {0.668366,-0.297543}, + {-1.015779,0.889539}, + {0.913941,-0.629156}, + {-1.700678,0.079532}, + {0.256160,-0.369452}, + {0.150019,0.098158}, + {-0.119020,-1.045646}, + {0.741243,-0.716726}, + {-1.108436,0.863056}, + {0.307252,0.506812}, + {-0.171352,-0.503576}, + {1.261155,0.176500}, + {0.174007,-0.712686}, + {-0.141806,0.330990}, + {-0.109117,-0.228317}, + {0.203634,0.606610}, + {-0.712412,0.250541}, + {-0.137947,0.768827}, + {-0.744735,0.914129}, + {-1.167755,0.152721}, + {0.327150,-0.113608}, + {0.177006,-0.387882}, + {0.848800,0.884244}, + {-0.111614,-0.152304}, + {-0.300267,0.243189}, + {0.093467,0.290017}, + {1.352682,0.983666}, + {0.299551,0.490373}, + {-0.353636,0.504747}, + {0.613392,-0.069319}, + {1.054224,-0.871011}, + {2.339625,-0.344715}, + {-1.010481,0.230538}, + {-0.539544,-0.583309}, + {0.499012,0.102340}, + {-0.575380,0.783295}, + {0.805940,0.307558}, + {0.417599,-0.060720}, + {-0.177191,-0.033481}, + {0.109710,-0.280558}, + {0.446148,-0.888981}, + {0.195612,-0.768271}, + {0.039506,0.628468}, + {-0.492624,-0.504992}, + {-1.396420,-0.011736}, + {-0.046356,0.570300}, + {1.085142,-1.294011}, + {0.752542,-0.090279}, + {-1.473829,0.875925}, + {0.761430,-0.161165}, + {0.959718,0.258992}, + {0.460259,0.467090}, + {0.108088,-0.414908}, + {0.842820,0.796490}, + {0.248226,0.228333}, + {-0.166433,-2.038801}, + {-1.326628,-0.722473}, + {-0.475355,0.696458}, + {0.138056,0.500725}, + {0.168092,-0.866839}, + {0.019798,-0.447601}, + {-0.724926,0.046180}, + {-0.276801,1.054389}, + {0.003609,-0.044388}, + {-0.692568,0.378780}, + {-0.950437,-0.173717}, + {0.251268,-0.282029}, + {-0.439649,0.031710}, + {-1.080425,-0.215370}, + {0.719048,-0.338402}, + {-0.687926,-0.765291}, + {-0.401951,-1.098793}, + {-0.568740,-0.550765}, + {-1.100182,-1.817952}, + {0.427277,0.515781}, + {-0.227288,0.535524}, + {0.311561,-0.427903}, + {0.531886,0.638625}, + {-1.225598,-0.291583}, + {-0.123388,-0.705261}, + {0.958207,0.537159}, + {0.328784,-0.348955}, + {0.027395,-0.081869}, + {0.067524,0.032020}, + {0.528416,-0.759115}, + {0.941596,-0.896593}, + {-0.219845,-0.026498}, + {-0.032095,1.010285}, + {-0.610792,0.633952}, + {0.108644,0.649716}, + {0.552711,0.848451}, + {0.201063,0.583580}, + {-1.261548,0.388021}, + {0.890668,-0.175176}, + {0.607208,-0.307948}, + {-0.205981,0.041344}, + {-0.776250,0.177243}, + {0.337239,0.161071}, + {-0.037705,-0.120282}, + {-0.014045,-1.241609}, + {-0.555803,0.188605}, + {0.241814,-0.987252}, + {-0.463139,0.874492}, + {-0.070504,0.160308}, + {-0.178391,0.972757}, + {-0.366224,-1.177044}, + {0.971867,0.479103}, + {0.125259,0.461216}, + {0.694764,-1.494325}, + {-0.277845,0.320865}, + {0.616292,-0.626879}, + {-0.030863,0.874982}, + {-0.766846,-0.016767}, + {-0.369774,0.258101}, + {-0.149097,0.291851}, + {-0.493542,-0.295266}, + {1.146361,-0.267924}, + {-0.934380,-0.011444}, + {0.415305,0.183752}, + {-0.491891,-0.357477}, + {-0.560602,-0.794771}, + {0.317386,0.323920}, + {-0.500328,-0.562780}, + {0.041451,-0.181370}, + {-0.529525,-0.497591}, + {0.648109,0.580791}, + {-0.582613,-0.249940}, + {-0.051540,-0.826063}, + {1.646775,0.986751}, + {0.481024,-0.258589}, + {-0.789469,-0.719895}, + {0.638624,-0.406398}, + {-0.281974,-0.250588}, + {-0.619277,-0.458814}, + {1.953618,-0.616999}, + {1.097286,0.692794}, + {-0.079763,1.146230}, + {-0.662413,-0.114838}, + {-0.710125,-0.561579}, + {0.652582,-1.218519}, + {-1.107519,-1.568995}, + {-0.128567,-0.868703}, + {1.148380,-0.401765}, + {0.275385,0.300600}, + {0.619924,0.435204}, + {0.536274,-1.285634}, + {-0.410239,-0.168935}, + {0.305748,0.032075}, + {-0.278987,-0.244613}, + {0.272564,-0.215397}, + {0.442925,0.284863}, + {0.343083,-0.985089}, + {0.243655,-0.535491}, + {-0.058256,-0.138061}, + {1.469464,0.252023}, + {0.457389,0.293408}, + {-0.401809,0.313757}, + {0.756131,-0.077182}, + {-0.785143,0.185929}, + {0.335933,0.863780}, + {-0.386318,-0.435270}, + {0.083281,-0.052628}, + {0.228627,-0.248970}, + {0.607702,-0.139063}, + {-0.640376,-1.314560}, + {-0.128571,-0.846763}, + {0.614100,-0.123165}, + {0.129793,-0.321393}, + {-0.266171,-0.648007}, + {0.416713,-0.029613}, + {0.225510,0.728644}, + {0.393598,0.429328}, + {1.597007,-0.340253}, + {0.768635,0.000382}, + {0.010930,0.047671}, + {-0.193073,0.323188}, + {-1.230056,0.049060}, + {-0.445542,-0.226577}, + {-1.104063,-0.513824}, + {0.799375,0.141533}, + {0.706937,0.178929}, + {0.236867,0.128337}, + {-0.097298,-1.042810}, + {-0.735652,0.420616}, + {-0.588963,-0.623118}, + {-1.635909,0.027266}, + {-0.945824,1.046139}, + {-0.697924,-0.368466}, + {0.335071,-0.324357}, + {0.418055,-0.170021}, + {-0.243762,0.064872}, + {0.400947,-0.261076}, + {-0.356738,-0.672932}, + {1.059406,0.747656}, + {0.122394,-0.472220}, + {0.295724,0.705496}, + {-0.593362,0.561189}, + {0.827451,-0.913072}, + {0.575753,-0.582888}, + {-0.449487,-1.203258}, + {0.002070,-0.209496}, + {-0.819372,1.013107}, + {-0.223983,0.409793}, + {-0.105117,-0.240320}, + {0.505813,0.544863}, + {-0.062506,0.840417}, + {-0.074185,-1.498686}, + {-0.050561,-0.531679}, + {-0.407497,0.036355}, + {-0.640938,-0.667689}, + {0.015491,0.043753}, + {0.687209,-1.632878}, + {0.618242,-1.063427}, + {-0.241815,-0.839270}, + {0.602280,0.346705}, + {-0.701291,0.105225}, + {-0.407340,-0.339801}, + {-0.345298,-1.047087}, + {-0.134469,-0.783420}, + {-0.543787,1.086768}, + {-0.222433,-0.012544}, + {0.760408,-0.125045}, + {-0.585757,-1.015366}, + {-0.622145,-0.507983}, + {-0.105669,-0.357043}, + {-0.255007,0.058948}, + {-0.925739,0.274361}, + {-0.375779,-0.555844}, + {0.432849,0.596696}, + {0.057883,-0.368657}, + {-0.451532,-0.509855}, + {-0.756553,-1.048769}, + {-0.348112,-0.540951}, + {-0.831728,-0.598372}, + {0.332533,0.729092}, + {-0.135877,0.565378}, + {0.062568,-0.041090}, + {-0.367750,-0.509901}, + {-0.553719,-0.111947}, + {-1.021522,0.275873}, + {-0.050085,0.315809}, + {-0.928466,0.206772}, + {-1.191365,1.451377}, + {0.920724,1.063243}, + {-0.063332,-0.406468}, + {-0.515630,-1.279352}, + {0.487661,-0.818408}, + {-0.027072,-0.002359}, + {0.227643,0.002201}, + {1.084393,0.067814}, + {0.552847,0.362214}, + {0.199879,0.680228}, + {0.372569,0.685069}, + {0.292540,0.321147}, + {0.363653,0.247260}, + {-0.588959,-0.794473}, + {0.352148,0.263375}, + {0.524180,-1.109269}, + {-0.285997,-0.110195}, + {-1.179159,-0.952197}, + {0.573545,0.373895}, + {-0.224947,0.447142}, + {0.137062,-0.810396}, + {0.027311,-0.504226}, + {1.193193,0.163454}, + {0.554125,0.651387}, + {0.650385,0.140576}, + {-0.818715,-0.166574}, + {0.098850,0.910239}, + {-0.364286,1.396334}, + {-0.209655,-0.775914}, + {-0.370780,-1.208692}, + {-0.047578,0.440463}, + {1.233010,-0.648612}, + {-0.140918,0.321229}, + {0.196838,0.020064}, + {0.376956,0.417526}, + {0.185651,0.879134}, + {0.640523,-0.156284}, + {0.743281,-0.154083}, + {-0.360541,-0.915597}, + {-0.177171,-0.588081}, + {0.960627,-0.156028}, + {0.537350,-0.452252}, + {-0.235733,-0.027291}, + {-0.746237,-0.017686}, + {-0.406613,0.579063}, + {-0.994922,-1.060790}, + {-0.669324,0.430821}, + {-0.398869,-0.634411}, + {0.762944,-0.143725}, + {0.283899,0.878354}, + {-0.070692,-1.069885}, + {1.509989,-0.562410}, + {0.612479,-0.758589}, + {-0.176361,-0.743195}, + {-1.116313,-0.446980}, + {-0.007589,0.391379}, + {0.102751,0.106416}, + {0.704608,-0.302822}, + {0.013309,-0.343502}, + {1.258582,-0.751478}, + {-0.768097,-1.864140}, + {-1.428795,0.401529}, + {-0.620903,-1.088542}, + {-0.328758,-0.244061}, + {-0.351989,-0.302104}, + {0.040004,0.117331}, + {-0.116617,-0.037641}, + {-0.271723,0.244152}, + {0.359241,-0.171465}, + {-0.586401,-0.121233}, + {0.604605,1.161484}, + {-0.403794,1.518033}, + {-0.320099,-1.946147}, + {1.265835,-1.070397}, + {1.028280,0.157896}, + {0.070852,0.788980}, + {-0.628415,-0.602539}, + {-0.452347,0.152041}, + {0.078811,0.062621}, + {0.343871,1.592619}, + {-0.148877,0.159315}, + {-0.000463,-0.181856}, + {-1.639889,-0.376867}, + {0.521937,1.142912}, + {0.935462,-0.231012}, + {0.779969,-0.218677}, + {-0.354689,-0.476571}, + {-0.904562,0.034987}, + {0.125173,0.573088}, + {-0.495766,-1.612758}, + {-2.062263,0.055393}, + {-0.580883,0.751677}, + {0.616167,-0.770758}, + {0.926324,-0.141294}, + {1.046484,-0.562055}, + {0.375710,-0.089429}, + {-1.166185,-0.487809}, + {-0.707975,-0.729558}, + {-0.118322,-0.402670}, + {0.272092,0.594689}, + {0.240115,-0.224296}, + {0.244773,-0.446577}, + {-0.046161,0.215951}, + {1.385255,-0.292633}, + {0.161275,-0.089966}, + {-0.145126,-0.954704}, + {-0.061937,0.085533}, + {-0.448217,-0.232410}, + {-0.295303,0.406249}, + {-0.273240,-0.980753}, + {-0.413078,0.765020}, + {0.565840,-0.524401}, + {0.554666,-0.284595}, + {0.114768,0.187983}, + {-0.890592,-0.266010}, + {0.650560,0.103151}, + {0.586884,-0.342944}, + {0.626604,-1.021207}, + {-1.554120,-0.024893}, + {1.869185,0.210050}, + {-0.012275,0.388102}, + {-0.462074,-0.605148}, + {0.255341,-0.179884}, + {-0.340660,-1.397953}, + {0.187923,0.360639}, + {0.484712,-0.181846}, + {-0.177458,0.360760}, + {-0.482337,-0.081107}, + {-0.253224,0.661932}, + {-0.724755,0.316380}, + {-0.028731,-0.097583}, + {-0.090675,0.918420}, + {-0.288796,-0.874214}, + {-1.281843,-1.346400}, + {-1.975214,0.339394}, + {-0.613541,0.515236}, + {0.250206,0.074632}, + {0.996936,0.863932}, + {-0.782503,-0.162518}, + {-0.086359,-1.378544}, + {0.721407,-0.891762}, + {0.240897,0.580625}, + {-0.133187,1.084532}, + {1.435339,-0.476021}, + {0.283575,0.906435}, + {-0.470645,-0.523456}, + {-0.939491,-0.042648}, + {-0.949484,-0.012379}, + {-0.083733,-0.312338}, + {-0.885689,-0.387254}, + {0.644921,-1.190076}, + {-1.121036,-0.485559}, + {-0.356930,-0.523413}, + {-0.479120,-0.096518}, + {0.952204,-0.417529}, + {0.557766,-1.049478}, + {1.135059,-0.173027}, + {-0.302560,-0.322420}, + {-0.183123,-0.081440}, + {0.074167,-0.077368}, + {-1.407874,0.624530}, + {-0.230311,-0.298617}, + {0.770821,0.424980}, + {-1.662785,-0.094771}, + {-0.287911,0.475809}, + {-0.048476,-0.203032}, + {0.553445,-1.016724}, + {-0.376555,-0.217766}, + {0.114631,-0.345042}, + {-0.593877,0.872006}, + {0.276043,0.101842}, + {0.882983,0.102907}, + {0.001158,-0.755667}, + {0.047028,-0.324113}, + {-0.646981,0.918540}, + {0.291671,0.556886}, + {-0.137889,-1.529846}, + {0.298642,-0.279176}, + {1.768655,-0.293840}, + {-0.235337,-0.109834}, + {0.114141,-1.468380}, + {0.478717,0.202262}, + {-0.370501,-1.198972}, + {-0.151985,0.917563}, + {-0.053941,0.940994}, + {1.249975,-0.625239}, + {0.398662,0.117818}, + {-0.205314,-0.918815}, + {-0.419043,-0.126397}, + {-1.290054,0.482208}, + {0.604014,-0.941747}, + {0.399735,0.820368}, + {-0.249355,1.154546}, + {0.359412,-1.303754}, + {-0.016680,-1.368714}, + {0.248771,-0.238636}, + {-0.263899,0.869256}, + {-0.369987,-0.283830}, + {-0.466650,-0.208697}, + {-1.657492,-0.255177}, + {0.933283,0.293801}, + {2.525568,-0.350252}, + {-0.106274,-0.303690}, + {-0.411917,1.078396}, + {-0.386613,-1.306253}, + {0.971809,-0.252645}, + {0.155680,0.462985}, + {-0.520441,-0.015665}, + {0.566224,-0.363200}, + {0.858518,-0.442505}, + {-0.176691,0.428155}, + {-0.006586,-0.742642}, + {-0.224886,-0.229415}, + {1.261164,-0.739608}, + {-0.669418,-0.283427}, + {1.069320,-0.425814}, + {-1.009479,0.708147}, + {-0.473014,-0.106836}, + {0.283953,-0.549942}, + {-0.853421,-0.329629}, + {-0.464193,0.622219}, + {-0.087188,-0.801405}, + {0.500055,0.318167}, + {1.123225,0.074764}, + {-0.235380,-0.485006}, + {-0.714091,0.030128}, + {-0.239461,-1.534452}, + {1.116795,-0.824399}, + {-0.825487,-0.207473}, + {-0.051835,-0.448793}, + {0.164883,0.984871}, + {0.253362,-0.188939}, + {-0.372140,-0.968723}, + {0.119889,0.519344}, + {1.497227,-0.331945}, + {-1.279538,-0.084243}, + {1.188019,-0.265337}, + {0.213106,-1.016021}, + {0.100412,0.388037}, + {-0.512935,-0.810146}, + {-0.598912,-0.689186}, + {-0.567116,-1.257426}, + {0.086859,-0.193039}, + {-0.940346,0.374944}, + {-0.034308,0.275811}, + {-0.545470,0.096491}, + {-0.093181,0.866228}, + {-1.219487,0.113771}, + {1.206312,0.106241}, + {0.892992,-0.849006}, + {-1.354809,0.769571}, + {0.735957,0.424012}, + {-0.565301,0.510339}, + {-0.899932,0.461990}, + {1.103376,0.451826}, + {0.132011,-0.842416}, + {-0.638797,0.144869}, + {-0.642707,0.416796}, + {-0.427401,0.363543}, + {0.168475,-0.766367}, + {-0.751506,0.061892}, + {0.574152,-0.505695}, + {-0.335072,-0.286006}, + {-0.834026,0.619608}, + {0.547215,0.287132}, + {0.298914,-0.179478}, + {-0.561363,0.759409}, + {0.745341,0.945481}, + {-0.902903,-0.037729}, + {-0.390261,-0.658194}, + {0.279026,0.870289}, + {-0.157925,0.902163}, + {0.536656,1.220876}, + {0.488578,0.348556}, + {-0.531355,0.421049}, + {0.117253,0.950821}, + {0.718010,-0.541365}, + {-0.837644,0.805630}, + {0.181802,-0.456620}, + {-1.144830,-0.841213}, + {0.996041,0.509847}, + {-0.317890,1.355479}, + {0.444140,0.143680}, + {-0.301898,0.640867}, + {0.655019,0.121403}, + {-0.515694,1.185059}, + {0.107950,0.148497}, + {-0.134465,0.366955}, + {-0.413694,-0.651129}, + {-1.609086,-0.006717}, + {1.545435,0.251703}, + {-0.413004,-0.506535}, + {1.058658,-0.827896}, + {-0.625554,-1.151844}, + {0.662481,0.578591}, + {-0.053525,0.667165}, + {-1.458461,0.403909}, + {1.438034,1.671089}, + {0.449605,-0.144770}, + {-0.211705,0.239155}, + {0.737903,-0.691716}, + {-0.892143,-0.156775}, + {1.022161,0.568443}, + {-0.895021,-1.159661}, + {-0.129957,-1.015277}, + {0.025829,0.618146}, + {-0.725841,1.354559}, + {-0.404110,0.239310}, + {-0.381553,-1.030973}, + {0.661700,0.726828}, + {-0.871968,-0.873774}, + {-0.634683,-1.073318}, + {-0.190002,0.527019}, + {0.450145,0.068487}, + {-0.493345,-0.565194}, + {-0.067292,-1.089015}, + {0.311426,-0.162816}, + {0.696492,-1.081337}, + {-0.079561,0.192018}, + {-1.038164,0.001589}, + {-1.209152,0.260031}, + {0.517225,0.673063}, + {-1.070390,0.051018}, + {-0.172812,-0.518776}, + {0.246896,0.360236}, + {1.261445,-1.363637}, + {-0.249520,0.115168}, + {-1.039049,1.002534}, + {0.995219,-0.530594}, + {0.158186,-0.370508}, + {0.269083,-0.100298}, + {0.446531,0.134572}, + {0.163460,-0.234424}, + {0.655361,-0.266745}, + {1.368913,-1.221585}, + {-0.037131,0.339951}, + {-0.094642,0.057267}, + {1.801376,1.555417}, + {-0.674158,-0.035333}, + {1.133275,-0.083941}, + {-0.528994,0.797127}, + {-0.613801,-0.039986}, + {0.326418,0.552173}, + {0.961590,0.195621}, + {0.164999,-0.415260}, + {1.123196,-0.173849}, + {-1.028232,-0.935003}, + {-0.006582,-0.860200}, + {0.017667,0.604943}, + {-0.069771,-0.320669}, + {0.410253,-0.394301}, + {-0.464009,-1.065665}, + {-0.388085,-0.714962}, + {-0.379551,-0.026035}, + {-0.465111,0.046714}, + {0.329026,1.072201}, + {-0.204617,0.340843}, + {0.353240,-0.991605}, + {0.276096,0.606240}, + {0.180433,0.509623}, + {0.603712,-1.428401}, + {-0.288965,0.170324}, + {0.199499,-0.953213}, + {0.555000,-0.156563}, + {-0.332052,-0.212173}, + {-0.551909,-1.110573}, + {-0.701355,-0.256082}, + {0.052215,-0.905251}, + {0.154667,0.287735}, + {-0.375212,0.075292}, + {0.831316,-0.327454}, + {-0.544062,-0.324524}, + {0.375690,0.435796}, + {1.420773,-1.694466}, + {-0.472987,-0.933482}, + {-0.295863,1.125223}, + {1.051997,-0.065696}, + {-0.318684,-0.268566}, + {-0.407761,0.906795}, + {0.611763,-0.834517}, + {-0.577473,-0.618957}, + {-0.056931,1.173181}, + {1.188827,-0.751072}, + {-0.395580,-0.277524}, + {-0.286643,-0.821660}, + {-0.243831,-0.902510}, + {-0.859681,0.635123}, + {0.132016,0.648423}, + {0.176409,-0.202077}, + {0.916956,-0.416387}, + {-0.387859,0.270335}, + {-0.470603,-1.118427}, + {-0.082099,0.536118}, + {-0.319736,0.623595}, + {0.105603,-1.227178}, + {-0.246468,-0.676755}, + {-0.137842,-0.198255}, + {-0.612401,0.267072}, + {0.140070,0.928564}, + {-0.276867,-0.692713}, + {0.330789,0.082247}, + {-0.310965,0.471960}, + {-0.638029,-0.130571}, + {-0.227627,0.371444}, + {1.447594,-0.579724}, + {1.434342,1.967624}, + {-0.533127,-0.360049}, + {0.090985,0.865811}, + {1.621069,-0.655068}, + {-0.107101,0.602642}, + {-0.678090,-0.200194}, + {0.631410,0.856782}, + {0.026655,-0.682962}, + {1.024181,-2.110779}, + {-0.329181,-0.015544}, + {-0.869617,0.964415}, + {-0.574403,0.639381}, + {-0.200844,-0.526831}, + {-0.254985,-0.692828}, + {-0.627544,0.386942}, + {-0.594953,0.059818}, + {-0.728173,0.322703}, + {-0.125809,-0.264083}, + {-0.862048,-0.024952}, + {-0.305275,0.632945}, + {0.503292,0.276135}, + {-1.035994,-0.815081}, + {0.004263,-0.952890}, + {0.188009,-0.695292}, + {-0.490270,-0.076733}, + {-0.847985,1.389987}, + {0.757101,0.356868}, + {-0.744715,0.614691}, + {-1.179587,-1.951262}, + {0.406179,-0.501517}, + {-0.567337,0.303614}, + {-0.351789,1.342365}, + {1.001646,-0.588464}, + {-0.751630,-0.865141}, + {-0.336056,0.681107}, + {0.181667,-0.648438}, + {0.661723,-0.599597}, + {-0.843666,0.930312}, + {0.610179,0.011804}, + {0.637391,0.730488}, + {0.887057,-0.039574}, + {-0.596744,0.306742}, + {0.693533,-0.788946}, + {0.358266,-0.635755}, + {-0.103668,1.012763}, + {-0.409437,0.643533}, + {0.623653,-0.403418}, + {0.974759,-0.268196}, + {0.726314,0.552070}, + {-0.209079,-0.180960}, + {-0.253123,0.174441}, + {-0.343619,-0.120766}, + {0.153239,-1.407465}, + {0.003501,-0.301579}, + {-0.565188,1.263652}, + {0.256238,0.366026}, + {-0.196671,0.887337}, + {-0.842150,1.461294}, + {-0.109778,-0.496130}, + {0.715528,-0.835101}, + {-0.091186,1.525347}, + {1.127749,0.614371}, + {0.816348,0.223844}, + {0.088529,0.545457}, + {0.681807,-0.374392}, + {0.497116,0.065098}, + {1.063631,0.330052}, + {-0.473036,0.034874}, + {-0.157862,-0.001305}, + {0.434218,0.197264}, + {-0.550799,0.054486}, + {0.973037,0.002784}, + {0.493822,1.160678}, + {0.413581,1.777586}, + {0.337161,0.056664}, + {-0.209438,-0.856569}, + {0.312104,-0.137281}, + {-0.812145,-1.333425}, + {-0.687317,1.281605}, + {0.245950,0.130437}, + {-1.137658,-1.119996}, + {-0.321589,-0.976619}, + {1.042918,0.688281}, + {0.126441,-0.281123}, + {-0.690719,0.538968}, + {0.814742,0.984337}, + {0.800806,1.660842}, + {0.253362,0.679494}, + {0.289842,0.084567}, + {0.065649,-1.313600}, + {1.285205,0.734431}, + {0.200443,-0.037244}, + {1.168457,0.074900}, + {0.726807,-0.504987}, + {-0.246237,-0.309694}, + {-0.030608,0.807033}, + {-0.040489,-0.022902}, + {-0.102770,-0.193521}, + {0.760273,-0.024193}, + {0.153393,0.638818}, + {-0.049047,0.072808}, + {-0.751583,0.168734}, + {-0.163908,-0.509905}, + {0.673933,-0.014424}, + {-0.833475,-1.008629}, + {-0.590986,-0.105231}, + {0.643961,0.628600}, + {0.438267,0.052614}, + {0.110321,0.046113}, + {-0.517915,1.355916}, + {0.868033,-0.159152}, + {0.371602,-0.857592}, + {-0.419888,-0.337480}, + {0.558052,0.219982}, + {-1.131058,-1.257138}, + {0.733544,0.933340}, + {-0.646570,-0.253332}, + {-0.419020,0.398702}, + {1.839728,-0.458298}, + {0.357707,-1.077159}, + {0.104771,0.546341}, + {-1.056007,-0.099425}, + {-0.111075,-2.042791}, + {0.053667,1.959269}, + {0.389828,-0.320662}, + {1.618109,0.681527}, + {0.103634,-1.050246}, + {0.915626,0.011762}, + {1.378525,0.843142}, + {-0.180366,-1.548472}, + {0.582354,0.761079}, + {-0.022354,-0.375777}, + {-0.465816,-0.153786}, + {0.803733,1.015041}, + {-0.844731,-0.505638}, + {0.629193,-0.387865}, + {-0.170733,0.143273}, + {-0.240827,0.231065}, + {-1.250344,-0.026121}, + {-0.388932,0.564174}, + {0.216054,-0.002170}, + {0.232108,1.522422}, + {0.519424,-0.502575}, + {-0.052313,0.444903}, + {-0.705677,-0.812735}, + {-1.176015,-1.380785}, + {-1.723397,-0.849389}, + {-0.225763,-0.831275}, + {-0.102199,-0.389384}, + {0.320482,-0.065426}, + {0.050518,-0.353202}, + {0.095464,0.245600}, + {0.610228,-1.495030}, + {0.499674,0.301388}, + {0.079124,-0.689882}, + {-0.176226,0.270693}, + {0.591074,-0.395837}, + {0.962485,1.108556}, + {-0.376415,1.325772}, + {1.593700,-1.306007}, + {-0.669529,0.727318}, + {0.730542,-0.798588}, + {-1.006559,-1.222182}, + {0.105828,-0.657938}, + {-0.965177,-0.739113}, + {-0.235450,0.413555}, + {0.384625,-0.100571}, + {1.362594,-1.289672}, + {1.236262,0.729084}, + {0.648425,-0.684215}, + {0.986055,-0.194520}, + {-1.152769,-0.783978}, + {0.576223,0.548201}, + {0.097504,-0.259566}, + {-0.360024,0.723081}, + {0.607059,-1.003423}, + {-0.227951,-0.734850}, + {-0.294650,-1.235194}, + {0.193334,-1.675714}, + {-0.767385,0.618813}, + {0.098473,-1.515022}, + {0.358150,-0.135228}, + {1.113325,1.368268}, + {-0.151595,-0.246173}, + {-1.570232,-0.023322}, + {-1.226877,-0.155807}, + {1.879898,0.177321}, + {1.050730,-0.192028}, + {0.075023,0.738806}, + {0.439378,0.159967}, + {-0.870739,-0.053774}, + {-0.613293,1.773483}, + {1.022477,0.589100}, + {-1.903232,-0.116118}, + {0.130492,0.364978}, + {-0.889512,0.294264}, + {-0.898750,0.561895}, + {0.251006,0.804611}, + {-0.113566,-0.941961}, + {-0.234088,-0.917563}, + {-0.250283,-0.288450}, + {-0.907878,-0.094818}, + {-0.881149,0.528179}, + {-1.303454,-0.223259}, + {0.206582,0.221846}, + {-1.571029,1.443146}, + {-0.706678,-0.390482}, + {0.141913,0.510894}, + {0.182936,0.421928}, + {-0.119593,0.561059}, + {-0.744027,0.428400}, + {-0.152375,-0.959526}, + {1.160939,-0.069288}, + {-0.076280,0.162181}, + {0.327619,0.155115}, + {-0.530834,0.574725}, + {-0.430831,-0.101593}, + {0.920280,-0.279728}, + {0.031487,-0.263205}, + {-0.576176,-0.109081}, + {0.808516,-0.116405}, + {1.125426,-0.338095}, + {-0.908021,-0.070953}, + {0.115823,0.531403}, + {0.848018,-0.378923}, + {-0.380277,-0.804293}, + {-0.373310,0.893974}, + {-0.330087,0.948002}, + {-0.086096,-0.437250}, + {-0.469167,0.454149}, + {0.970617,0.231241}, + {-0.817633,0.825176}, + {-0.435250,0.430634}, + {1.683802,0.853621}, + {1.351207,0.235931}, + {-0.050678,-0.032962}, + {-0.355436,0.398207}, + {-0.678845,-0.389077}, + {-0.273377,-0.710650}, + {-1.210956,0.678632}, + {-0.755085,-0.086894}, + {-1.100352,0.299255}, + {-0.035763,0.330123}, + {0.322939,1.101242}, + {0.595764,-1.157084}, + {-1.243325,-0.664861}, + {-1.663768,-0.505836}, + {-1.267451,0.873669}, + {-0.455003,-0.043938}, + {0.470999,0.538119}, + {0.579555,-0.717479}, + {-0.802576,0.421240}, + {-0.237682,0.488393}, + {0.862354,0.812298}, + {0.230856,0.213576}, + {0.141439,0.509505}, + {0.206889,0.858483}, + {0.026078,-0.546219}, + {0.781592,-0.388893}, + {-0.123377,-0.794665}, + {0.068495,1.214323}, + {-0.714881,-1.054803}, + {-0.461472,-0.106502}, + {0.562470,-0.529948}, + {-0.709943,-1.806260}, + {0.774827,0.627849}, + {-0.082874,0.781436}, + {-0.301659,-0.219263}, + {0.608640,-0.139735}, + {-0.786892,-1.283778}, + {-0.366386,-1.194705}, + {1.061684,-0.463841}, + {-0.559144,0.542831}, + {-0.177584,1.693041}, + {-0.677950,0.092316}, + {0.408613,-0.701200}, + {0.245716,-0.034669}, + {0.997366,-0.451955}, + {-0.206925,0.136163}, + {0.352996,1.213371}, + {0.148059,0.397297}, + {1.053839,0.169786}, + {0.573741,-0.636227}, + {0.612745,-0.530977}, + {0.516292,0.150499}, + {-0.036636,1.234072}, + {-0.283012,0.155921}, + {-0.487859,0.275921}, + {-0.763096,1.543259}, + {-1.012146,0.104486}, + {0.648292,0.052648}, + {1.113207,-1.334106}, + {1.621335,-0.326147}, + {0.044245,1.144835}, + {-0.604862,-0.428931}, + {0.208504,0.480038}, + {0.621283,-0.263113}, + {-0.268506,-1.286471}, + {-1.190871,-0.981942}, + {-0.343443,-0.970982}, + {-0.443971,0.172888}, + {-0.529676,0.789394}, + {-0.747990,-0.355262}, + {0.260979,-0.616260}, + {-0.364506,0.875792}, + {0.230262,-0.650448}, + {-0.157869,-0.224029}, + {-0.138491,0.273796}, + {-0.337906,0.142918}, + {-1.126425,1.012362}, + {-0.045829,-1.204217}, + {-0.040201,0.072991}, + {0.095082,-0.512595}, + {0.391243,-0.697281}, + {0.028836,0.470680}, + {-0.254693,0.317709}, + {0.527280,0.185890}, + {0.679726,-0.539661}, + {0.536096,0.202399}, + {0.636754,-0.073378}, + {-1.635579,0.303301}, + {-0.055276,-0.309005}, + {-0.377681,-0.618366}, + {-0.570992,0.899069}, + {0.318571,-1.082007}, + {-0.501136,-0.050577}, + {0.463349,-0.492909}, + {-0.586518,1.437252}, + {-1.498805,0.669497}, + {-0.668884,0.501976}, + {0.849874,-0.274321}, + {1.503969,0.089087}, + {0.495296,-0.282796}, + {0.643539,-0.319368}, + {-0.003123,0.503895}, + {0.448926,0.415716}, + {1.300971,1.185440}, + {0.666304,-1.011385}, + {-0.501095,-0.437884}, + {0.126722,-0.628526}, + {0.602820,0.306907}, + {-1.052462,1.759648}, + {0.804709,-0.383309}, + {-0.783674,0.703607}, + {0.555353,-0.894576}, + {0.367530,-1.251446}, + {-0.379656,1.053925}, + {-0.368063,1.523577}, + {-0.512766,1.220449}, + {0.310470,1.126447}, + {-0.668240,-0.719845}, + {1.311328,-0.273581}, + {1.193026,0.758730}, + {0.011468,0.411093}, + {0.679916,0.227215}, + {0.200297,-0.461842}, + {0.203994,-0.360266}, + {-1.711995,-0.791191}, + {-0.587169,-0.795622}, + {-0.126559,0.539690}, + {-0.311544,0.215622}, + {0.624084,-0.939499}, + {0.451027,0.963659}, + {0.053951,0.473962}, + {-0.378173,-0.754404}, + {-0.483375,0.169867}, + {0.327772,0.443014}, + {0.438977,-0.918669}, + {0.272163,0.913450}, + {-1.148166,-1.651656}, + {0.678756,0.022641}, + {-0.162722,1.419714}, + {-0.442976,-0.324650}, + {-0.101127,-0.176612}, + {-0.257379,-0.900592}, + {-0.692997,-0.167735}, + {-0.576470,-1.033809}, + {0.129483,-0.795888}, + {-0.091165,-0.991940}, + {-1.546060,0.754515}, + {-1.955953,0.823558}, + {-0.507420,-0.342439}, + {0.839643,0.549449}, + {1.041734,-0.351442}, + {-0.099299,0.427514}, + {0.396409,0.685967}, + {1.582812,1.019917}, + {0.095047,-1.033650}, + {1.097222,0.232333}, + {0.235403,0.744469}, + {-0.956056,-0.248764}, + {-0.007542,1.351857}, + {0.829327,0.165330}, + {1.934778,0.740345}, + {-0.042057,-0.505659}, + {0.029940,0.584136}, + {-0.660522,0.974654}, + {0.550707,0.625208}, + {-0.736240,-0.090338}, + {-0.773422,1.383895}, + {0.164752,0.971219}, + {-0.078130,-0.016604}, + {1.174557,-0.671066}, + {0.709217,-0.447833}, + {1.173960,0.447247}, + {-0.452182,-0.283778}, + {0.221362,0.238256}, + {0.438321,1.115051}, + {0.385345,-0.134963}, + {-0.116907,-0.452026}, + {1.326754,-0.143928}, + {0.377629,0.647795}, + {0.706637,0.054253}, + {0.484648,0.233001}, + {0.559643,-0.014661}, + {0.442585,0.019897}, + {-0.481860,0.319169}, + {-1.873430,-0.373696}, + {-1.468880,-0.338588}, + {-0.564341,0.015573}, + {0.135980,-1.308351}, + {-0.209918,0.409567}, + {0.134787,0.555218}, + {-0.280328,0.229205}, + {0.356642,0.145734}, + {1.209981,-0.768739}, + {0.323467,0.471938}, + {-0.538486,0.833259}, + {0.377447,1.471453}, + {-1.542076,0.534062}, + {0.308006,-0.915789}, + {0.667877,0.838388}, + {-1.325876,-0.147813}, + {0.049283,-0.409670}, + {0.822751,-0.324401}, + {-0.248490,0.044080}, + {0.397286,-0.527903}, + {0.267321,0.173917}, + {0.097825,-0.258165}, + {0.156112,-0.403906}, + {-1.493610,-0.584519}, + {1.035700,-0.624181}, + {0.193366,0.367275}, + {-0.591444,-0.918827}, + {-0.031241,1.199647}, + {-0.635795,-0.401301}, + {0.292380,-1.257504}, + {0.790531,0.283300}, + {-0.612248,-0.856913}, + {-0.003711,0.557474}, + {0.046168,0.504684}, + {-0.258980,-0.145285}, + {-0.700174,0.664606}, + {-1.044332,0.112828}, + {-1.203219,-0.050509}, + {-0.098679,0.681808}, + {0.117978,1.020073}, + {-0.138431,-0.213658}, + {-0.373621,0.314261}, + {-1.125660,0.217905}, + {0.579220,0.315413}, + {0.819870,-0.421409}, + {0.215607,0.366435}, + {-0.391899,-0.353763}, + {0.031600,0.391145}, + {0.779146,-0.001210}, + {-0.371743,0.236842}, + {0.044205,0.077276}, + {-0.029682,0.564854}, + {-0.803910,0.609822}, + {0.083413,-0.621601}, + {-0.569837,-0.201887}, + {-1.037479,0.198802}, + {0.870755,-0.457554}, + {-0.644685,0.562159}, + {-0.368567,-0.571753}, + {-0.908622,0.593380}, + {-0.022836,-0.725834}, + {-0.212127,0.760100}, + {0.182831,-0.768164}, + {1.377295,0.894573}, + {-0.388203,-1.179584}, + {-0.366572,0.592177}, + {-1.357572,1.221986}, + {-1.467493,1.254612}, + {0.728275,1.398245}, + {0.270538,-0.980435}, + {-0.109704,0.391466}, + {-0.819701,-0.282182}, + {-1.576902,-0.264228}, + {-0.293211,-0.354652}, + {0.932537,0.499530}, + {0.124587,0.187973}, + {-1.182933,0.450079}, + {0.045172,0.295898}, + {-0.952133,-0.026615}, + {-1.077399,1.492134}, + {2.165598,-0.025851}, + {0.615697,-0.448814}, + {0.371116,0.104843}, + {-0.637342,0.743420}, + {-0.339935,1.886651}, + {-0.118879,-0.518939}, + {-1.136926,0.479470}, + {0.151684,0.264658}, + {-0.017438,0.081592}, + {0.013367,-0.432744}, + {0.818175,-0.660425}, + {0.169977,1.246542}, + {0.046875,-0.572609}, + {0.971265,1.007843}, + {0.552874,-0.763970}, + {0.402362,0.688291}, + {-0.177514,0.862440}, + {0.727237,0.600365}, + {-0.123267,-0.320214}, + {-0.973245,-1.093332}, + {-0.622050,0.480692}, + {0.850534,0.250697}, + {1.435793,-1.334161}, + {-0.297031,-1.179966}, + {0.304224,0.432995}, + {-0.319411,0.044257}, + {-0.130799,-0.801940}, + {0.073259,-0.088438}, + {-0.115683,0.651869}, + {-1.284032,0.744815}, + {-0.572874,1.298015}, + {0.284922,-0.246805}, + {0.516957,0.398332}, + {-0.407991,-0.949022}, + {0.136622,0.969059}, + {0.040189,-0.190255}, + {-0.287121,-0.074766}, + {-0.610242,-0.365421}, + {-0.695631,0.472487}, + {-0.761210,-1.011743}, + {-0.159401,0.335151}, + {-0.127480,-2.513513}, + {-0.621617,-0.001532}, + {-0.233636,0.540107}, + {-0.615082,0.740370}, + {0.728082,-0.745504}, + {0.755201,-0.364350}, + {1.455688,0.113219}, + {-0.384111,1.799205}, + {-0.060414,0.594761}, + {-0.645534,-1.282521}, + {1.354648,-0.365049}, + {0.700581,-0.261592}, + {-0.420933,0.412919}, + {-0.118914,-0.126970}, + {-0.369305,-0.651979}, + {0.833302,-0.776442}, + {-0.889951,0.333417}, + {0.717829,0.832634}, + {-0.780598,-0.353698}, + {-0.126353,0.156872}, + {-0.870306,-0.186695}, + {0.188068,-0.272942}, + {-0.853431,-0.099724}, + {-0.972554,-0.599254}, + {-1.109184,-0.599650}, + {0.911559,0.240889}, + {-0.351639,-0.044241}, + {0.189684,-1.491880}, + {0.667445,-0.069260}, + {0.369786,-0.124370}, + {0.521743,-0.479616}, + {-1.023666,0.709321}, + {-0.009410,-1.304473}, + {0.457866,-0.753617}, + {0.514681,-1.122756}, + {0.052715,0.047106}, + {-0.308785,-0.058814}, + {-0.543798,0.853832}, + {0.057451,0.111738}, + {0.023706,0.449120}, + {0.854094,-2.321072}, + {-1.288841,0.610626}, + {1.070943,0.900281}, + {-0.314136,0.986491}, + {-0.484965,-0.906231}, + {-0.534703,-0.786444}, + {0.529497,0.880418}, + {-0.594563,-0.523274}, + {-0.714857,-0.819102}, + {0.846788,-0.989649}, + {-0.535982,0.146718}, + {-0.205090,-1.063691}, + {0.080422,-1.044347}, + {0.026911,0.228324}, + {1.491431,0.321161}, + {0.661557,-0.309540}, + {0.438783,-0.302408}, + {0.264915,1.176531}, + {0.410967,-0.019055}, + {0.147043,-0.649251}, + {0.492513,-0.013112}, + {0.332999,-0.478951}, + {0.068906,0.560099}, + {-0.486798,-0.215182}, + {-0.415900,0.858515}, + {0.705293,1.097754}, + {-0.154359,0.384802}, + {-0.221449,-0.178315}, + {-0.575917,0.074498}, + {0.146447,0.313370}, + {0.126790,0.398399}, + {0.289635,-0.126919}, + {-0.074227,-0.213796}, + {-0.065885,0.678123}, + {0.656923,0.499602}, + {-0.564350,-0.575801}, + {-0.629272,1.852769}, + {-0.652193,-1.012536}, + {0.935159,0.505553}, + {0.010577,0.401854}, + {0.400071,0.797892}, + {-0.638037,0.362640}, + {-1.348614,-0.440950}, + {0.377069,-0.621824}, + {0.782456,0.777046}, + {0.279392,-0.409277}, + {-0.093743,-0.882047}, + {0.432319,-0.202289}, + {-0.854399,0.269268}, + {-0.569395,-0.550870}, + {-1.305619,-0.766131}, + {0.399734,0.356151}, + {-0.587518,0.990603}, + {-0.461472,-0.854095}, + {-0.776429,1.123592}, + {-2.094551,0.016854}, + {-0.852694,-0.164675}, + {-0.752425,-1.146923}, + {0.235446,0.097446}, + {-0.191573,0.584031}, + {0.036355,0.837690}, + {0.950405,-0.468673}, + {0.022319,0.946512}, + {-0.666949,0.540367}, + {-0.517209,-0.408994}, + {-1.497582,1.429821}, + {-1.424709,-0.265863}, + {1.067800,-0.018164}, + {-0.403612,0.521463}, + {0.520736,0.179845}, + {1.558446,2.297753}, + {-0.611957,0.341035}, + {0.574676,0.189530}, + {0.258192,-0.367458}, + {-0.515869,-0.068053}, + {0.320528,0.981756}, + {0.756459,0.855889}, + {-0.436195,0.505209}, + {-0.197706,-0.042505}, + {0.570348,-0.442366}, + {0.618202,-1.234316}, + {-0.246493,0.145392}, + {0.249191,0.204177}, + {-0.504036,-0.337933}, + {0.265983,0.156993}, + {1.010411,-0.820082}, + {0.967946,-1.061406}, + {-0.994254,0.516854}, + {0.246911,-1.559882}, + {-0.224508,-1.563141}, + {-0.420039,-0.552007}, + {0.078066,-0.074774}, + {-0.203336,-0.297024}, + {-0.109335,0.225023}, + {1.250758,-0.808705}, + {-1.025240,0.921113}, + {0.077180,1.828942}, + {-0.881796,-0.755137}, + {-0.091333,-1.279348}, + {-0.062119,0.378901}, + {-1.499594,0.831770}, + {-1.371222,0.612782}, + {0.282594,0.759345}, + {0.601033,-0.540685}, + {0.873884,-2.107622}, + {-0.413409,1.183102}, + {0.035613,0.033901}, + {-0.371701,-0.512521}, + {-0.390149,0.589897}, + {-0.421352,-0.052553}, + {0.213716,-0.657424}, + {-0.090430,-0.071487}, + {0.058196,-0.653575}, + {-0.705436,0.067998}, + {-0.053729,-0.957150}, + {-0.271140,0.371048}, + {1.052676,1.059416}, + {1.043681,0.143528}, + {1.356857,0.687629}, + {0.091930,1.509739}, + {0.339513,0.792737}, + {-0.055242,1.281981}, + {0.029510,0.013582}, + {-0.120412,0.188881}, + {-1.249855,-0.851677}, + {-1.079515,-0.452445}, + {0.393657,-1.150160}, + {-0.008601,-0.141600}, + {0.225137,0.963209}, + {-0.201913,0.770309}, + {-0.791302,-0.165032}, + {0.517454,-1.029753}, + {-0.607919,-0.209344}, + {0.527461,-0.735633}, + {-0.266679,-0.286525}, + {-1.703636,-1.176549}, + {-0.200180,0.435851}, + {0.269835,0.613393}, + {0.745864,-0.434237}, + {0.471439,1.529898}, + {0.363553,-0.002981}, + {-0.338163,0.906062}, + {0.883375,-0.307422}, + {-1.120693,-0.268472}, + {1.221899,2.130810}, + {0.141656,0.031991}, + {-1.233096,0.667534}, + {0.624299,0.425867}, + {-0.170222,0.592248}, + {1.076470,1.444681}, + {-0.183938,0.142772}, + {-0.821524,-1.008571}, + {-0.146813,0.404454}, + {0.684416,-1.073105}, + {1.117901,-0.560429}, + {0.530161,-0.027038}, + {-0.253069,-1.639337}, + {-0.717668,-1.081437}, + {0.653127,0.114892}, + {0.095271,0.140140}, + {-0.053616,0.987509}, + {-0.122837,0.191773}, + {-0.706302,0.420038}, + {1.186340,1.028863}, + {-0.117144,-0.018757}, + {1.239061,-0.216330}, + {0.295645,0.318719}, + {-0.287663,0.752288}, + {1.436414,1.607598}, + {-1.174806,0.781807}, + {0.919130,0.760221}, + {-1.465950,-0.301338}, + {-0.028985,0.532472}, + {0.108693,0.221737}, + {-0.679071,-0.035699}, + {0.046814,-1.058415}, + {0.343905,0.344772}, + {0.570854,0.524909}, + {0.315360,0.196929}, + {-0.434684,1.005404}, + {-0.404268,0.684464}, + {-0.747997,-0.269495}, + {-0.358844,0.247169}, + {-0.714708,-0.157657}, + {1.004165,0.448171}, + {-1.235014,-0.550712}, + {0.442388,-0.935624}, + {0.702100,-0.807752}, + {0.358939,-0.783201}, + {-1.133754,-0.837761}, + {-0.467297,-0.165956}, + {1.008790,0.066224}, + {-0.272849,0.330043}, + {-1.966277,1.246796}, + {-0.917265,-1.017836}, + {-0.027061,-0.299158}, + {1.124767,-0.984969}, + {0.146385,1.049555}, + {0.558241,0.085019}, + {-0.158555,-1.463400}, + {-0.133509,-0.671532}, + {0.666487,-0.563999}, + {0.656119,0.119249}, + {1.041716,0.447584}, + {-0.025932,0.527085}, + {-1.593675,-0.940512}, + {0.218719,0.224522}, + {0.858700,-0.400714}, + {-1.323566,-1.320280}, + {-1.019153,-0.525948}, + {1.737703,0.326414}, + {-0.638443,0.055007}, + {0.086753,0.243740}, + {-0.885970,0.377519}, + {1.184245,0.505174}, + {0.202493,-0.306676}, + {1.189207,-0.823331}, + {0.398937,0.120145}, + {-0.646384,0.314075}, + {-1.137885,-0.095339}, + {0.948864,-0.716966}, + {0.463843,-0.358252}, + {0.980654,-0.901849}, + {-1.215558,-0.298514}, + {0.270095,0.365947}, + {0.140718,-0.306677}, + {0.587339,-0.550040}, + {0.855364,-0.692435}, + {-0.456061,-0.045239}, + {0.462259,-0.725169}, + {0.724895,0.455988}, + {-1.028200,-0.257751}, + {-1.072973,-1.142716}, + {-0.576397,-1.548709}, + {-0.284426,0.134787}, + {-1.039392,0.502217}, + {-0.217312,-0.180047}, + {0.694919,0.186815}, + {-0.847320,-1.048344}, + {-1.022385,-0.565583}, + {-0.660343,0.410869}, + {-0.718115,-0.544506}, + {-0.182651,0.469230}, + {-0.231679,-0.362006}, + {-0.015608,0.083363}, + {1.222271,-0.723882}, + {-0.508861,-0.822197}, + {-0.902930,0.636436}, + {0.112424,-0.324648}, + {0.315799,-0.188587}, + {1.024169,-0.474601}, + {-1.152947,0.595031}, + {0.902782,-0.236906}, + {-0.241519,0.977620}, + {-1.518523,-0.585001}, + {-0.000930,0.727162}, + {0.877585,1.068244}, + {-1.638870,-0.206063}, + {1.408922,-0.130538}, + {-0.523389,-0.811424}, + {0.101777,0.366629}, + {1.289354,-0.426427}, + {0.604590,-1.337170}, + {-0.058429,1.861749}, + {-0.561091,-0.637419}, + {0.424127,-0.323688}, + {-0.081614,-1.449043}, + {0.968017,0.267704}, + {0.108011,0.499381}, + {0.170847,-0.487345}, + {-0.458183,-0.767461}, + {-0.039893,0.250217}, + {0.131645,-1.086087}, + {0.161841,0.342612}, + {-1.600553,0.342165}, + {0.541176,0.414102}, + {0.409636,0.349951}, + {1.204189,-1.086040}, + {0.350477,0.682488}, + {-0.721238,0.208825}, + {0.428534,-0.790265}, + {0.121097,-0.359704}, + {1.361358,1.230809}, + {-0.384294,0.472650}, + {0.145290,-0.174952}, + {-0.046377,-0.107608}, + {-0.383656,0.796097}, + {1.031273,0.264224}, + {1.167621,-0.300218}, + {-0.292386,-0.318581}, + {-0.335417,-1.144967}, + {-0.648088,-0.289108}, + {-0.068185,-0.682794}, + {0.894230,0.285057}, + {-1.260050,0.086270}, + {0.247349,0.104827}, + {0.007993,0.124410}, + {-0.089590,-0.563814}, + {1.509332,-1.875702}, + {-0.076540,1.065093}, + {0.316001,-0.172131}, + {0.102151,-0.953328}, + {-0.190367,0.254101}, + {0.255213,1.104178}, + {0.291825,-0.052904}, + {-1.058847,-0.004168}, + {-0.293184,-0.372100}, + {-0.420888,0.496658}, + {0.646020,0.472691}, + {-0.568856,-0.424865}, + {-0.822198,0.342074}, + {0.566707,-0.906916}, + {0.880532,-1.481777}, + {-0.158097,0.395299}, + {-0.169400,-0.308643}, + {-0.420999,-0.995964}, + {-0.134220,-0.451067}, + {-0.560854,-0.358684}, + {0.533672,0.609505}, + {0.225296,-0.259670}, + {0.136387,1.320238}, + {-0.143082,-0.656944}, + {-0.039519,-0.440310}, + {0.064516,-0.216104}, + {0.327496,-1.720161}, + {1.222967,0.133978}, + {0.344704,-0.992218}, + {-0.298720,1.336461}, + {0.910618,0.343415}, + {0.792131,-0.077562}, + {-0.078523,0.161363}, + {0.419388,0.354756}, + {-1.022862,-0.528513}, + {0.024169,0.636111}, + {-0.121226,0.869259}, + {0.269960,0.147618}, + {-0.173962,-0.286819}, + {-0.610308,-0.112641}, + {1.516570,0.220792}, + {0.067268,-0.929080}, + {0.140334,1.330344}, + {0.126366,-1.081471}, + {-0.243734,-0.118978}, + {-0.277617,-1.194380}, + {-0.682716,0.298833}, + {-1.288838,1.513837}, + {-1.077710,-0.288363}, + {0.353844,0.331654}, + {-0.496007,-0.449799}, + {0.674501,-0.901818}, + {-0.425209,-0.743499}, + {-0.493533,-0.014724}, + {-0.126484,-0.166360}, + {0.321523,-1.190012}, + {-0.243319,0.253336}, + {-0.324947,-0.463787}, + {0.224061,-0.778740}, + {-0.022366,-0.614416}, + {-0.104315,-0.614804}, + {0.416559,0.514345}, + {-0.380783,-0.071819}, + {1.224245,-0.170595}, + {0.668510,0.088242}, + {0.011928,-0.606299}, + {-1.276925,-0.185928}, + {1.427795,0.603522}, + {-0.687761,-0.603504}, + {-0.132693,-0.457303}, + {-0.680173,-0.865798}, + {-0.251745,-0.935759}, + {0.444854,-0.248104}, + {0.068890,0.189164}, + {-0.218620,-1.194219}, + {0.102438,0.748316}, + {0.626796,-0.085816}, + {0.382283,0.477754}, + {-0.055020,-0.453327}, + {-0.629663,-0.255501}, + {-0.314275,-0.853495}, + {0.153019,0.700717}, + {0.819287,0.714535}, + {0.078689,-0.639930}, + {-0.470512,-0.225320}, + {0.479791,0.944982}, + {1.631216,1.256571}, + {-0.936889,0.646269}, + {-0.494894,0.683656}, + {0.921918,0.268295}, + {0.561338,0.520386}, + {0.414373,1.463005}, + {0.760467,0.214625}, + {0.964109,-0.139284}, + {-0.587657,-0.930694}, + {0.299208,0.117574}, + {-0.452623,1.080372}, + {-0.206742,-0.027465}, + {-0.995999,0.131516}, + {-0.409115,-1.251451}, + {0.286588,0.339968}, + {0.248896,0.976740}, + {-0.600229,-1.037789}, + {1.217989,-0.829786}, + {-0.533772,-0.390166}, + {-0.252891,0.090843}, + {0.830241,-0.674900}, + {-0.305120,-0.830369}, + {-0.491488,0.649178}, + {0.438337,-0.155879}, + {-0.355961,0.587665}, + {0.504438,0.139915}, + {0.729127,-0.183104}, + {0.107723,-0.278060}, + {0.688445,0.756468}, + {0.393728,-1.411304}, + {0.536781,1.086957}, + {-0.520090,-0.203326}, + {0.533082,-0.846444}, + {-0.394528,0.670604}, + {-0.382789,-0.861758}, + {0.250303,0.478741}, + {-0.327998,0.777437}, + {0.733849,-0.765777}, + {-0.089826,-1.110802}, + {-0.206186,-0.678356}, + {0.386616,0.326163}, + {0.525415,-1.219435}, + {0.133794,0.344521}, + {0.004897,-0.582482}, + {-0.750436,-0.832588}, + {1.048079,-0.016272}, + {1.705627,0.415836}, + {1.430775,0.468125}, + {0.131126,-0.137068}, + {0.835151,-0.271749}, + {-0.298794,0.661111}, + {-1.031776,-0.466190}, + {0.920307,0.012391}, + {0.714790,0.765926}, + {0.049065,1.311591}, + {-0.718093,-0.406004}, + {0.398720,-1.039662}, + {-0.246073,0.103843}, + {-0.710795,0.507890}, + {0.091547,-0.294237}, + {1.265596,0.506513}, + {0.247169,-0.808032}, + {0.329468,-0.429356}, + {0.401651,-1.497002}, + {-0.915131,0.517771}, + {-0.158804,-1.010671}, + {0.337866,0.270349}, + {-0.334280,-0.437324}, + {0.587549,-0.839959}, + {0.609462,0.218756}, + {0.663163,0.295161}, + {0.199296,-0.011211}, + {0.336088,-0.804984}, + {-0.689722,0.139018}, + {1.805106,0.071002}, + {0.012271,-0.185305}, + {-0.242626,1.069228}, + {-0.001816,-0.770260}, + {1.082567,-0.538776}, + {-0.300932,0.408739}, + {0.673658,-0.546763}, + {-0.522996,-0.593263}, + {0.783541,0.018982}, + {0.129059,1.126919}, + {0.089440,0.382453}, + {-0.027288,0.112335}, + {0.207647,-0.722367}, + {-0.570810,0.360483}, + {0.285651,-0.252501}, + {0.723943,0.093512}, + {0.112908,0.175056}, + {-0.488045,0.285721}, + {-0.059020,-0.037746}, + {-0.512124,-0.099456}, + {-0.349365,-0.609648}, + {0.107796,-0.112698}, + {-1.477146,0.619852}, + {0.417878,1.275517}, + {0.029314,-0.196885}, + {0.570071,-0.086919}, + {0.249916,0.287204}, + {0.383593,0.201145}, + {0.114623,0.900762}, + {0.682162,-0.223562}, + {0.322560,0.917578}, + {0.750428,0.353774}, + {-0.948208,0.123629}, + {0.768450,0.085982}, + {1.272772,0.309070}, + {-0.439142,-0.382147}, + {-0.008128,-1.247159}, + {0.009078,-0.697620}, + {0.007060,0.961034}, + {0.129413,0.505956}, + {-1.910256,-0.665300}, + {0.069935,-1.173748}, + {-0.120057,0.181999}, + {0.399439,-0.688444}, + {0.284874,0.541595}, + {0.285854,0.693654}, + {-0.001666,-0.103849}, + {-1.224582,1.329128}, + {-0.648986,0.890249}, + {-0.388631,-0.337343}, + {-0.610412,0.675449}, + {0.271354,-0.522851}, + {-0.469737,0.289745}, + {-0.135145,0.094711}, + {0.391914,0.360719}, + {-1.432849,-0.395919}, + {0.718524,0.095473}, + {0.971875,0.020463}, + {0.321075,1.646243}, + {-0.198847,-0.236427}, + {1.874800,-0.097315}, + {-0.243075,-0.495529}, + {0.920510,0.609915}, + {0.471311,-2.079300}, + {-0.581785,-1.219514}, + {-0.280604,0.335288}, + {0.744908,1.156712}, + {1.065821,1.187737}, + {0.063306,0.219678}, + {0.149226,0.523140}, + {-0.223783,-0.203258}, + {-0.453659,-0.055288}, + {-0.577265,0.580418}, + {-0.394131,0.807998}, + {-0.805989,0.389628}, + {0.497947,0.244122}, + {0.156364,0.586017}, + {-0.824797,1.008399}, + {0.152007,-1.426285}, + {0.515238,0.477685}, + {-0.477381,0.117855}, + {-0.950519,-1.318016}, + {0.420935,0.940154}, + {-1.026912,-0.466710}, + {-0.582401,0.139818}, + {-0.549374,-0.236186}, + {0.644767,-0.465686}, + {0.830889,-0.265762}, + {-0.144430,-0.761845}, + {-0.128806,-1.521828}, + {-0.372228,-0.069244}, + {-0.492768,0.219460}, + {-0.490296,0.354823}, + {-0.848195,0.898729}, + {0.865969,-0.571089}, + {-0.454317,0.699749}, + {0.042831,-0.315084}, + {-0.285471,-0.292725}, + {-0.534360,0.172237}, + {0.689555,0.264977}, + {0.815292,-1.505314}, + {0.497006,-0.098925}, + {0.298728,0.364288}, + {0.136240,0.303815}, + {0.283923,0.596503}, + {0.114502,-0.238589}, + {-0.297723,0.385486}, + {-0.316969,0.430939}, + {0.040942,-0.313941}, + {-0.289333,0.351903}, + {0.896973,0.079274}, + {-0.268520,0.041966}, + {1.030958,-0.635246}, + {-1.875177,0.592061}, + {-0.430594,-0.653622}, + {0.267462,0.655383}, + {-0.514834,1.076798}, + {-0.097106,0.538920}, + {0.013117,0.662483}, + {0.644666,0.595031}, + {-0.117338,0.439290}, + {-0.357636,-0.677673}, + {-0.088865,-0.231393}, + {0.965777,-0.113227}, + {0.220975,0.768523}, + {-0.828622,0.050192}, + {-0.240097,-0.029707}, + {-1.058309,1.038959}, + {-0.570250,-0.924301}, + {-0.262456,-1.462101}, + {-1.228857,-0.142778}, + {0.469875,0.739288}, + {1.100930,0.341907}, + {0.672967,-0.393436}, + {0.518804,0.496781}, + {-0.142314,0.761519}, + {0.125922,-0.550510}, + {-0.348100,-0.273610}, + {-0.427612,0.061501}, + {0.256513,0.747116}, + {-0.059648,0.168510}, + {-0.913990,0.875762}, + {-0.802038,0.135093}, + {0.203664,-0.374754}, + {0.469188,-0.636419}, + {0.809588,0.460623}, + {0.113743,0.524456}, + {-0.272354,-0.854766}, + {0.022865,0.418124}, + {-0.133409,0.060661}, + {1.539998,-0.517456}, + {-0.645522,-0.426623}, + {-0.371401,-0.661202}, + {-0.122534,1.261750}, + {0.093323,-0.383381}, + {0.134252,0.902849}, + {0.511477,1.313929}, + {0.099273,0.514895}, + {-0.058003,0.969434}, + {-0.141294,-0.471783}, + {-0.429620,-0.154513}, + {-0.287361,-0.442306}, + {-0.336878,-0.062789}, + {-0.605904,0.102936}, + {-0.142869,-0.443398}, + {1.535686,1.529627}, + {0.367539,0.095620}, + {0.212680,0.531485}, + {0.604709,-0.251699}, + {-0.161790,-0.242223}, + {-0.575133,0.475413}, + {0.007935,0.138656}, + {-0.156317,0.351535}, + {1.107248,1.232089}, + {-0.269558,0.504884}, + {0.074465,-0.942669}, + {0.141073,-0.429191}, + {-0.269876,0.330541}, + {-0.209983,0.505994}, + {0.562585,1.614445}, + {0.439637,-1.675931}, + {0.030853,-1.163880}, + {0.304423,1.022936}, + {-0.327022,-0.504994}, + {1.936745,-1.338733}, + {-0.351500,-0.385984}, + {-0.563641,-0.826557}, + {-0.380570,0.789590}, + {-0.148708,0.255027}, + {-0.888800,-1.395291}, + {0.632760,-0.463043}, + {0.234656,0.303244}, + {0.116743,-0.473395}, + {0.271851,0.175900}, + {-0.552514,-0.338339}, + {0.691982,0.143707}, + {-0.976338,0.662087}, + {-0.504830,0.685742}, + {-0.264117,-0.307242}, + {0.511863,0.356987}, + {0.055412,-1.049023}, + {0.191737,0.267756}, + {0.231510,-1.056609}, + {0.204476,-0.636612}, + {-0.133734,1.938848}, + {0.255605,-1.483930}, + {1.011052,1.161027}, + {0.898627,0.805878}, + {-0.213312,0.436263}, + {0.755626,0.187831}, + {-0.762523,0.657359}, + {0.036146,0.739059}, + {-0.116160,-0.417153}, + {-0.150632,-0.670163}, + {0.418430,-0.878027}, + {0.525073,-0.538173}, + {-0.370425,-1.117374}, + {-0.757346,0.213995}, + {-0.208166,-0.014412}, + {1.041135,-0.440021}, + {0.745159,-0.655492}, + {0.075926,-0.175046}, + {-0.667127,-1.402322}, + {-0.420118,-0.660770}, + {-0.911100,-0.316687}, + {-0.103679,0.220340}, + {-0.660715,-0.765549}, + {-1.825846,0.383159}, + {-0.802056,-0.280138}, + {-0.373981,0.538737}, + {-0.426700,0.773436}, + {-0.163357,0.074898}, + {1.227122,1.422060}, + {1.288474,-0.542456}, + {-1.032935,0.639189}, + {0.437950,-0.087142}, + {0.475027,-0.968816}, + {0.165371,0.564307}, + {-0.510503,-0.411686}, + {-1.231209,-0.637638}, + {1.256137,-0.449882}, + {-1.522424,-0.184787}, + {-1.028042,0.985088}, + {1.030749,-0.439651}, + {-0.387196,0.411551}, + {1.188856,0.408318}, + {-0.587327,-0.142216}, + {1.135026,-0.262557}, + {-0.508316,-0.762131}, + {-0.149100,0.280352}, + {-0.951866,0.279302}, + {-0.604205,-0.672315}, + {1.600248,-0.457873}, + {0.569092,0.161693}, + {-1.152617,0.488698}, + {0.409741,0.570698}, + {-0.507684,-0.112046}, + {-0.748483,1.030598}, + {-0.076532,-0.294944}, + {0.270334,-0.074069}, + {0.758352,0.152663}, + {-1.269700,0.914973}, + {-0.730966,0.274066}, + {-1.529546,-0.878928}, + {-1.992355,-0.301284}, + {-0.645659,0.223827}, + {-1.002499,0.318252}, + {0.165309,-0.639122}, + {-1.019766,0.307431}, + {0.679903,-1.055646}, + {-0.003741,0.179578}, + {0.256276,0.808911}, + {1.114403,-1.010407}, + {-1.146745,-0.331667}, + {0.404155,0.383710}, + {-0.237773,0.921262}, + {1.885775,0.430458}, + {-0.818223,0.346674}, + {-0.078311,0.863722}, + {-0.428592,0.254773}, + {0.534155,0.809113}, + {1.383017,0.888617}, + {-0.515986,-0.599548}, + {0.212821,-0.000715}, + {-1.206773,0.526967}, + {0.014093,0.006118}, + {0.158839,-1.216860}, + {-0.027659,0.926053}, + {0.019575,0.165710}, + {0.197453,-0.230582}, + {1.261566,0.802630}, + {0.197086,0.008144}, + {0.059366,-1.335864}, + {0.762630,0.316835}, + {0.094044,0.216878}, + {-0.061064,0.344751}, + {1.017651,-1.442284}, + {0.827257,0.377237}, + {-1.187013,-0.462500}, + {0.582280,-0.502331}, + {0.744537,-1.480232}, + {-0.629860,0.197390}, + {0.059392,-0.392031}, + {-0.574393,0.117983}, + {0.129667,-0.171614}, + {-0.108789,-0.144976}, + {-0.289720,0.028863}, + {-0.236768,0.375456}, + {-0.026387,-0.120244}, + {-0.494994,1.099108}, + {-0.243313,-0.271767}, + {0.887063,-0.199488}, + {-1.520577,0.158127}, + {1.002710,-0.502214}, + {-0.690706,-0.243567}, + {-1.318276,-0.321401}, + {-0.458306,-0.366136}, + {-0.120988,0.372985}, + {-0.278336,0.750513}, + {-0.430248,0.203486}, + {-0.431980,0.898660}, + {0.147149,0.183560}, + {-0.761892,-0.033976}, + {0.544541,0.195048}, + {-1.004320,0.048136}, + {0.445875,0.124557}, + {0.819350,0.116228}, + {-0.074228,-0.359250}, + {0.149207,0.639891}, + {0.338190,0.705314}, + {0.771753,0.452919}, + {0.713768,-0.325439}, + {0.792008,0.244063}, + {0.619732,-0.670480}, + {-0.192255,-0.539623}, + {-0.071555,0.106152}, + {-0.531400,0.439331}, + {0.858087,0.454744}, + {-0.324386,-0.432407}, + {-0.049221,-0.765374}, + {0.524452,0.531419}, + {0.003815,0.508387}, + {-0.841803,-0.132345}, + {-0.251592,0.174575}, + {0.134064,-0.846480}, + {-0.380022,-0.772825}, + {0.570028,0.455106}, + {0.685860,0.878152}, + {0.349189,-0.979386}, + {-0.870929,0.582146}, + {-0.970770,-0.902920}, + {1.432578,0.124514}, + {-1.833284,0.491911}, + {-0.632608,0.655085}, + {-0.587920,-0.340920}, + {-0.688839,-0.890105}, + {0.453233,-1.036321}, + {1.020132,0.523791}, + {0.951761,0.683777}, + {-1.376582,1.527485}, + {0.236742,-1.750241}, + {-0.460403,0.501992}, + {1.020721,0.229132}, + {1.051587,-0.362471}, + {-0.259974,0.863537}, + {0.429171,1.050911}, + {0.191844,0.578415}, + {-0.231841,0.432569}, + {-0.984387,-0.084837}, + {-0.358412,0.102102}, + {0.878619,0.582503}, + {-0.205932,0.835352}, + {-0.103196,-0.742711}, + {1.284650,-0.553309}, + {-0.438278,-0.845167}, + {-0.180808,-0.562684}, + {-1.415280,0.309014}, + {1.032654,1.546299}, + {-0.578971,0.502129}, + {-0.372922,0.342322}, + {-0.601495,-0.396972}, + {0.449218,1.693786}, + {-0.215480,-0.912576}, + {-0.305294,-0.068039}, + {1.234584,0.890927}, + {-0.133936,-0.401511}, + {-0.029240,-0.508774}, + {-0.446670,0.056391}, + {0.438196,0.121282}, + {-0.235203,-0.016227}, + {0.085158,0.853693}, + {0.589462,-0.003206}, + {-0.347001,1.098295}, + {-0.482088,0.276294}, + {1.115959,0.104063}, + {1.222275,-0.122048}, + {1.131900,-0.401884}, + {0.416713,0.972292}, + {0.268957,0.822470}, + {-0.378075,-0.239070}, + {0.678130,-0.622487}, + {0.001222,0.176722}, + {0.515715,0.556026}, + {-0.811341,-0.664363}, + {-0.066931,-0.106832}, + {0.259630,-0.482719}, + {-1.051136,0.675293}, + {-0.444388,-0.119788}, + {0.307477,-0.014828}, + {-0.184077,0.282394}, + {-0.719949,0.155395}, + {0.689853,0.466149}, + {0.254500,-1.065029}, + {-1.153940,1.026575}, + {-0.724639,0.811474}, + {0.280946,0.774506}, + {1.733286,0.702247}, + {0.057015,-0.144861}, + {1.201717,-0.620823}, + {-1.489848,-0.513420}, + {0.007687,0.478682}, + {0.217798,-0.381518}, + {0.395505,0.487883}, + {0.637114,0.738214}, + {-0.696254,-0.017240}, + {-0.601473,-0.310016}, + {-0.911395,-0.423135}, + {0.943762,0.871834}, + {0.712787,-0.214152}, + {-0.154493,0.356730}, + {0.439694,2.528324}, + {0.511167,-0.597179}, + {-1.077821,1.509451}, + {0.534645,-0.031730}, + {0.367335,-0.235827}, + {-1.523038,0.527418}, + {0.337825,-0.714982}, + {-0.447831,-0.426621}, + {-1.118101,-0.239219}, + {0.531552,0.943312}, + {-1.294295,-0.742653}, + {0.625772,0.643434}, + {-0.277690,-0.187306}, + {0.253799,-0.294410}, + {-0.613186,0.208064}, + {-0.188373,-0.612828}, + {0.217985,-0.165977}, + {0.588750,0.477662}, + {-0.901009,-0.304080}, + {-1.010997,0.557475}, + {-0.375059,-0.290759}, + {0.071666,-0.579673}, + {0.210535,0.735150}, + {-0.448087,-0.526083}, + {0.398716,0.065340}, + {0.485392,1.369999}, + {-0.299177,-1.126727}, + {-0.103942,0.680101}, + {0.328730,0.178544}, + {0.142174,0.134296}, + {0.204866,-0.912750}, + {-2.020140,0.645009}, + {0.177036,-0.288237}, + {-0.069950,1.225832}, + {-0.304805,0.134353}, + {-1.765184,-0.128221}, + {-0.393885,-0.444420}, + {-1.330829,0.743254}, + {0.830278,0.671366}, + {0.869670,-0.919906}, + {1.211946,-1.221721}, + {0.363820,0.389598}, + {-0.613657,-0.172961}, + {0.534523,-0.777950}, + {0.899525,0.837620}, + {0.229674,0.539808}, + {-0.588145,1.541271}, + {0.526527,0.218288}, + {0.108346,-0.146209}, + {0.256885,0.222342}, + {-0.471906,-0.622017}, + {-1.040667,-1.033413}, + {1.262585,0.812615}, + {-0.109457,1.184248}, + {-0.777400,-1.560435}, + {0.151619,-0.442552}, + {1.678563,0.504373}, + {-0.589008,-0.440073}, + {-0.173452,0.875637}, + {-0.330927,-0.861614}, + {0.529098,0.754519}, + {-0.530484,0.361856}, + {-0.340118,-0.014196}, + {-0.443443,-0.221920}, + {-0.295703,0.775663}, + {0.931839,0.391841}, + {1.227308,0.357324}, + {1.058906,-0.561328}, + {0.379099,0.857939}, + {0.379845,0.088003}, + {2.175076,0.202864}, + {0.100406,-0.297335}, + {0.240141,-0.401507}, + {0.578608,0.265995}, + {-0.515623,0.946173}, + {-0.587795,-0.555286}, + {0.383657,-0.195416}, + {0.759589,-0.774641}, + {-0.109808,-0.123684}, + {0.172620,1.054034}, + {0.231130,1.353771}, + {0.832332,-0.629704}, + {0.736182,-0.815986}, + {1.913341,-0.066831}, + {0.548944,0.930218}, + {1.187104,0.054595}, + {-0.065391,1.307484}, + {-1.032659,-0.304898}, + {0.770218,0.384590}, + {-0.461868,0.279681}, + {0.659794,1.167296}, + {-0.280067,1.596266}, + {-0.557632,-1.620087}, + {0.231064,0.159401}, + {-0.585902,-0.632748}, + {-1.008761,0.180220}, + {-2.136943,0.182556}, + {0.578714,-0.151526}, + {0.468830,-0.370074}, + {-0.124409,0.101686}, + {-0.623913,0.511890}, + {0.603725,-0.110424}, + {0.086402,0.305489}, + {0.397162,-0.844066}, + {0.287331,0.595819}, + {0.435615,-0.308301}, + {-1.631188,1.233723}, + {-0.099963,-0.568243}, + {-0.069033,-0.553885}, + {0.465490,1.705170}, + {-1.502903,0.051838}, + {0.202618,0.056840}, + {0.690444,0.625482}, + {0.529718,-0.327767}, + {-0.489490,-0.609651}, + {0.832393,1.453277}, + {1.712547,0.803720}, + {0.189576,-1.727333}, + {0.907285,-0.228063}, + {1.339552,-0.868890}, + {-1.166663,-1.224587}, + {-0.379674,0.609648}, + {-0.573722,-0.147682}, + {-0.268252,-0.294019}, + {-0.342327,0.622820}, + {-0.973481,1.055302}, + {0.765404,-0.814623}, + {-0.533027,-1.451319}, + {-0.272482,1.012991}, + {-0.542893,-1.562890}, + {-0.171077,0.717300}, + {0.308168,0.116356}, + {0.314240,-0.370956}, + {0.804733,-0.334112}, + {0.386616,-0.027912}, + {-0.099513,0.902143}, + {-0.123303,0.843877}, + {1.079426,-0.071035}, + {0.598008,-0.248097}, + {0.573794,0.625676}, + {0.290775,0.601791}, + {-0.846620,-0.609600}, + {0.441754,0.374976}, + {-0.292908,-0.310313}, + {0.389009,-1.122842}, + {-1.994184,-0.597685}, + {-0.288490,-0.137211}, + {0.826802,-0.414513}, + {0.440020,-0.030550}, + {-0.776099,-0.389480}, + {0.554564,0.554801}, + {1.224902,0.286133}, + {-0.979788,0.109225}, + {1.253196,0.209456}, + {0.251155,0.753947}, + {0.665114,-0.393747}, + {-0.564377,-0.513027}, + {1.288081,-2.157011}, + {0.235869,0.471166}, + {-0.406039,0.027257}, + {-0.294357,-0.382251}, + {0.119859,-0.100326}, + {-0.458593,0.981385}, + {1.025987,-0.633064}, + {0.615666,1.604773}, + {0.594899,-0.462359}, + {0.309323,0.834967}, + {1.020212,0.969725}, + {-0.195893,-0.386131}, + {-0.627758,0.223954}, + {-1.018009,0.285884}, + {-0.624008,0.485126}, + {0.160685,-0.253051}, + {-1.063582,1.681213}, + {-0.198088,-0.757754}, + {0.728279,0.034337}, + {0.762127,-0.032588}, + {0.221347,-0.818478}, + {0.269797,-1.110743}, + {-1.210268,-0.495728}, + {0.485286,-0.320922}, + {-0.155302,0.041326}, + {-0.402684,1.638042}, + {-0.478496,-0.696576}, + {0.857587,-0.932290}, + {-0.479103,-1.444577}, + {0.106673,0.771573}, + {0.174064,0.228316}, + {0.379493,0.761051}, + {-0.573243,-0.279958}, + {0.611776,0.691011}, + {0.437668,0.574424}, + {1.270251,0.249666}, + {0.164892,0.358455}, + {0.667730,1.155659}, + {0.466743,0.958982}, + {-0.728237,-0.561067}, + {-0.191912,0.053633}, + {-0.319731,-0.092707}, + {-0.675490,0.366198}, + {0.535741,-1.151621}, + {-0.343547,0.839867}, + {0.751048,-1.498414}, + {1.666151,-0.356844}, + {0.042997,0.353855}, + {0.599371,0.374659}, + {-0.030844,-0.467997}, + {0.527571,-0.170217}, + {1.039629,0.511229}, + {0.139445,-0.375293}, + {-0.643767,-0.579323}, + {-0.213417,0.056574}, + {0.868315,-0.291497}, + {1.312809,0.661863}, + {-0.239329,-0.350563}, + {0.055933,1.334509}, + {-0.896131,1.594030}, + {-0.843781,-1.287317}, + {0.346229,-0.350082}, + {-0.385374,-0.165116}, + {0.058133,-0.170327}, + {-0.302902,-0.091267}, + {-0.224982,-0.275217}, + {-0.639219,0.182658}, + {1.005439,0.970002}, + {0.302856,0.157512}, + {0.167572,0.392681}, + {-0.183465,-0.536818}, + {-0.276488,0.932653}, + {-0.698586,-0.291830}, + {-0.663474,0.073177}, + {-0.707151,0.843712}, + {0.813781,-0.237099}, + {-0.567100,-0.155201}, + {-0.695440,0.900429}, + {-0.507948,-0.238936}, + {0.813905,-1.435846}, + {-1.030962,0.416183}, + {0.010413,-0.077815}, + {-0.456217,0.939060}, + {-0.280898,0.860698}, + {-1.059189,-0.026381}, + {0.418985,0.103886}, + {0.243547,0.263705}, + {1.022534,-0.870284}, + {-0.319105,-0.830518}, + {0.309283,0.131609}, + {-0.366955,0.545398}, + {-1.091913,0.803764}, + {0.919995,-1.444688}, + {-0.514388,-0.892124}, + {0.046488,-0.043293}, + {-0.097040,-0.142277}, + {-0.621773,0.278483}, + {-0.238226,-0.303143}, + {-0.239201,-0.202993}, + {0.828891,-0.447296}, + {-0.814409,-0.762757}, + {0.317636,-0.775188}, + {-0.704665,-0.001095}, + {0.190795,-0.410853}, + {0.438536,0.007221}, + {-1.275473,1.581711}, + {-1.032641,0.427879}, + {0.043270,0.560571}, + {-0.310790,-0.295852}, + {-0.322617,-0.582956}, + {-0.823786,0.792678}, + {-0.825312,0.460310}, + {-0.142982,-0.231356}, + {-0.107885,0.006865}, + {-0.428315,-0.575707}, + {-0.451766,-1.312755}, + {-0.605263,0.052154}, + {-0.858527,0.472405}, + {-0.147632,0.851068}, + {-0.032356,-0.398183}, + {-0.601653,-0.044037}, + {0.037578,0.212620}, + {0.475474,0.577324}, + {-1.937575,-1.393675}, + {0.241383,-0.543812}, + {0.300632,-0.384921}, + {0.860763,0.252422}, + {0.040594,-0.371765}, + {0.552900,0.011664}, + {-0.353449,0.312965}, + {0.857064,1.235445}, + {-0.408279,-0.576770}, + {0.133850,-0.708734}, + {0.979223,1.697775}, + {-0.859229,-0.252335}, + {-1.136499,-0.537318}, + {-0.025246,0.178310}, + {1.169886,-0.131893}, + {0.491317,-0.071596}, + {1.485336,-0.526005}, + {1.948320,-0.173133}, + {0.359882,-0.593865}, + {0.784955,0.290084}, + {-0.367032,0.564664}, + {-0.053053,0.166978}, + {0.576522,-1.319649}, + {0.593626,-0.037716}, + {0.330368,0.727155}, + {0.248306,0.837877}, + {-0.596916,-0.440271}, + {-0.031691,0.753502}, + {-0.427416,1.496483}, + {0.024830,0.428486}, + {-0.251342,-1.094742}, + {0.345125,-0.553380}, + {-0.898429,-0.026258}, + {0.712027,0.447699}, + {-1.220289,-0.815846}, + {0.262894,0.251074}, + {-0.136647,0.183869}, + {0.404985,-0.461170}, + {0.431711,-1.281842}, + {0.163396,0.332593}, + {-0.552892,0.335223}, + {-0.672727,-0.000601}, + {0.044287,0.469885}, + {0.199923,0.345696}, + {0.723835,-0.177781}, + {-0.379719,0.397453}, + {-0.641487,1.511009}, + {0.061980,0.031751}, + {-0.844554,0.892103}, + {-0.715934,-1.294866}, + {0.173878,-1.451147}, + {0.564775,-0.224633}, + {-0.475705,0.218131}, + {1.368321,2.155638}, + {-0.559571,-0.151806}, + {0.367671,-1.069871}, + {-0.480085,-0.683981}, + {-0.968596,-0.196502}, + {0.088215,-0.398611}, + {0.089681,0.049280}, + {0.019565,0.640091}, + {0.804096,-0.312743}, + {-0.029222,-0.817238}, + {0.111560,0.026803}, + {1.124348,-0.247172}, + {0.828146,-1.297903}, + {0.584710,1.072408}, + {-1.079120,0.519528}, + {-0.559623,-2.083301}, + {-0.013739,0.168279}, + {0.094835,-0.001691}, + {-0.176566,-0.071756}, + {0.143178,0.023358}, + {-1.209996,-0.402923}, + {0.502949,-0.787258}, + {-0.439794,-0.826874}, + {0.037231,-0.182201}, + {0.559047,-0.316920}, + {1.353808,-0.063423}, + {-0.184105,-1.087707}, + {0.520159,0.016875}, + {0.408005,0.337109}, + {0.012034,-0.141686}, + {-0.116381,0.989265}, + {0.215828,-0.819388}, + {-0.175628,0.230390}, + {-0.392693,-0.773533}, + {0.019304,0.018939}, + {0.019620,1.129002}, + {-0.266461,0.476351}, + {-0.932192,-0.308265}, + {1.087973,0.187229}, + {0.878040,0.274679}, + {-0.967149,-1.149465}, + {0.110062,-0.288712}, + {0.410077,0.016828}, + {-1.137827,0.737936}, + {0.556373,0.712373}, + {-0.136341,-0.106141}, + {0.966315,0.131986}, + {-1.636164,0.243468}, + {1.058806,-0.648276}, + {0.211281,1.021837}, + {-0.200606,0.108194}, + {0.343630,0.685307}, + {0.492227,-0.038799}, + {0.033762,0.584277}, + {0.236607,0.567255}, + {0.680730,0.758640}, + {-1.029663,1.126743}, + {-1.572466,-0.113236}, + {-0.285795,0.080142}, + {-0.974205,-0.403896}, + {1.117339,-0.485668}, + {-0.600984,-1.054548}, + {0.893469,-0.995996}, + {1.668182,-0.272915}, + {-0.209205,0.453159}, + {0.256428,-0.019136}, + {0.333610,0.511375}, + {-1.232951,0.873284}, + {-0.761203,-0.368131}, + {-0.518450,-1.168993}, + {0.742393,-0.718962}, + {0.449123,0.250070}, + {0.014006,-0.412005}, + {-0.680747,-0.172112}, + {0.116133,-0.562759}, + {0.460738,-0.656872}, + {0.650550,0.619822}, + {0.131879,0.424197}, + {-0.553638,-1.742206}, + {0.312592,0.469697}, + {-0.531606,-0.391612}, + {1.380083,1.445451}, + {-0.921923,-0.915796}, + {-1.153275,0.556598}, + {-0.161191,0.501045}, + {-0.702263,-0.058096}, + {0.560614,0.671590}, + {0.036180,-0.376868}, + {-0.588677,0.721655}, + {0.621821,-0.164663}, + {0.794529,0.699955}, + {-0.719335,0.651360}, + {0.148510,0.760655}, + {-0.114731,0.951111}, + {0.895827,0.383900}, + {-0.746435,0.641606}, + {-0.421358,0.631822}, + {0.466984,-0.324033}, + {0.489916,-0.957898}, + {0.079711,0.062274}, + {1.246410,-0.778342}, + {-0.318010,0.318632}, + {0.510297,-0.392028}, + {1.251361,1.171531}, + {0.293846,0.756420}, + {-0.909834,-1.088653}, + {0.185629,-0.928923}, + {-0.192179,0.381852}, + {0.128132,-0.618807}, + {1.135265,1.096902}, + {1.130910,0.031333}, + {0.189199,-0.530720}, + {0.364752,0.516586}, + {-0.640494,-0.438013}, + {-0.554450,0.002218}, + {-1.568253,-0.283404}, + {0.597701,-0.124230}, + {1.153399,0.400638}, + {0.290154,-0.118022}, + {-0.394926,0.335760}, + {-0.046594,-1.272174}, + {0.520793,-0.596359}, + {0.684737,1.409372}, + {2.146829,-0.595201}, + {0.334683,0.150969}, + {0.037160,0.579834}, + {0.559788,-1.024755}, + {-0.268161,-1.685690}, + {-0.777837,0.327112}, + {-0.628273,-0.114822}, + {-2.163572,0.843763}, + {-0.523453,1.909596}, + {-0.390204,0.742400}, + {0.184483,-0.248507}, + {0.492118,0.308610}, + {0.809920,-0.427897}, + {0.210169,-0.601697}, + {0.065808,-0.422819}, + {-1.259986,0.023207}, + {-1.222129,0.568027}, + {-0.255664,-0.612253}, + {0.228229,0.962349}, + {-1.340872,1.427331}, + {-0.567869,-1.869379}, + {-0.763201,-0.271214}, + {-1.445104,0.226024}, + {-0.645348,0.310639}, + {-0.516378,0.457223}, + {0.261481,-0.723054}, + {0.698503,-0.491313}, + {0.002835,0.081625}, + {-1.025465,-0.176307}, + {-0.479908,0.644662}, + {-0.748698,-0.134649}, + {0.463082,-1.921004}, + {0.586063,-2.033114}, + {-0.458925,0.394895}, + {-0.509606,0.005512}, + {-0.447751,-1.910113}, + {-1.557059,-0.149125}, + {0.534921,-0.429562}, + {0.211883,0.620042}, + {-1.527148,0.587183}, + {0.401908,1.280822}, + {0.031060,0.420576}, + {-0.762789,-0.367085}, + {1.175118,-0.820434}, + {-0.478197,-0.370352}, + {-0.236025,0.061470}, + {0.686564,-0.585512}, + {-0.237052,0.253177}, + {-0.729385,-0.466642}, + {-0.662395,-0.391071}, + {0.273296,0.506813}, + {0.965051,-0.027263}, + {0.070026,1.046618}, + {0.092287,0.070415}, + {-0.908972,-0.539245}, + {-0.623800,1.413496}, + {0.325102,0.822477}, + {-0.518215,0.034588}, + {0.220737,0.705239}, + {-0.818519,-0.857503}, + {-1.388012,0.171706}, + {0.650287,1.022428}, + {2.412083,-0.776552}, + {-0.297618,1.080676}, + {0.467493,-0.420103}, + {-0.059584,-0.053936}, + {0.624517,-0.194404}, + {0.036811,1.302039}, + {0.842010,-0.194790}, + {0.215698,0.725725}, + {-0.272988,0.542958}, + {-0.298502,1.190862}, + {0.166648,0.297913}, + {-0.783560,-0.385328}, + {0.351894,-0.279022}, + {0.183874,0.243079}, + {0.134334,0.079331}, + {-0.383688,0.849714}, + {-0.227904,0.641252}, + {0.329318,0.943028}, + {0.936512,1.038576}, + {0.757479,0.393397}, + {1.478493,-0.037539}, + {-1.189804,0.402658}, + {0.292558,-1.779022}, + {-0.284935,-0.366083}, + {-0.386498,1.453383}, + {0.611253,0.499528}, + {-0.251683,0.181155}, + {0.804380,-0.388200}, + {-0.231037,0.258398}, + {0.623782,0.017725}, + {0.468501,0.540843}, + {0.054289,1.158843}, + {0.109397,0.089475}, + {0.057510,0.640870}, + {-1.007740,-1.110276}, + {0.732886,0.842128}, + {0.268033,-0.755497}, + {-0.031795,-0.214367}, + {-0.643266,-0.275480}, + {1.885364,-0.353332}, + {1.004060,-1.001434}, + {-0.017497,0.894947}, + {1.829552,0.069833}, + {-0.930362,-0.271928}, + {-0.374898,0.170401}, + {-0.104757,-0.184549}, + {1.479948,-0.472800}, + {-0.766489,-0.268751}, + {-0.188110,0.343063}, + {-0.068686,0.373199}, + {-0.335110,0.539789}, + {0.926700,-0.263069}, + {-0.060970,0.075089}, + {-0.047239,-2.343455}, + {-0.758616,-0.638756}, + {0.194242,0.628520}, + {-0.670422,-0.252502}, + {-0.586947,1.217569}, + {0.325827,0.180049}, + {-1.170374,-0.478935}, + {1.157467,0.136615}, + {0.553874,0.901300}, + {0.489163,0.191637}, + {0.233215,-0.282606}, + {1.394105,-0.595516}, + {-0.616522,0.715078}, + {-0.840391,-0.099596}, + {0.539287,-0.316566}, + {-0.384641,1.575414}, + {0.708599,0.923721}, + {-0.728650,0.399285}, + {-0.884493,-0.797352}, + {0.346664,0.439675}, + {-0.912444,-1.014233}, + {0.440793,1.115063}, + {-0.852873,-0.619209}, + {0.167686,-0.498302}, + {1.288179,0.409765}, + {1.402931,0.688458}, + {-0.515123,-0.824088}, + {0.192950,-0.248628}, + {-0.062076,0.319169}, + {0.488478,2.046597}, + {-0.279347,0.144513}, + {-0.425342,-0.162927}, + {0.794761,0.950190}, + {0.050606,-1.039568}, + {0.258260,0.371916}, + {0.299544,0.840263}, + {1.011669,1.277889}, + {-0.455175,0.008475}, + {0.006032,0.495940}, + {-0.564037,0.951911}, + {-0.739710,0.911333}, + {0.288278,0.246605}, + {-0.415489,0.418020}, + {0.214393,-0.216782}, + {-0.258230,0.012515}, + {0.085156,-1.067564}, + {-0.477948,-0.126020}, + {0.819553,0.227472}, + {0.218761,0.118708}, + {-1.147643,0.315880}, + {-0.227523,0.539005}, + {0.001495,0.428174}, + {1.833835,-0.253958}, + {0.094817,-0.427417}, + {0.304182,0.027684}, + {-0.448943,1.724177}, + {0.306482,-1.723176}, + {0.297892,0.566358}, + {0.070474,-0.408958}, + {-1.135178,0.616141}, + {1.174561,0.739951}, + {-0.427643,-0.076585}, + {-0.143676,-0.561043}, + {-0.575947,-0.963853}, + {0.287610,-0.416596}, + {1.053362,0.219671}, + {0.215916,-0.082404}, + {-0.004859,1.016390}, + {-0.304115,-1.250074}, + {-0.804160,1.414419}, + {0.435396,1.580271}, + {-0.540909,-0.386004}, + {0.391329,0.175570}, + {0.068666,-0.634001}, + {-0.924601,-1.223534}, + {-0.244715,-1.882378}, + {-0.005935,0.055254}, + {0.053374,-2.037105}, + {-0.222229,-0.314341}, + {1.683783,-0.136252}, + {-0.209519,0.319064}, + {0.128087,0.515904}, + {1.057809,0.518777}, + {1.302667,-0.667992}, + {0.711711,1.370832}, + {-0.425870,-0.921453}, + {-0.282099,-0.019978}, + {0.475885,0.778538}, + {-1.191533,0.734870}, + {-0.029950,0.617866}, + {-0.455740,-0.735148}, + {-1.482617,0.289506}, + {-0.281529,-1.036867}, + {-0.900051,-0.070463}, + {-0.281393,-0.018742}, + {-1.565083,0.033298}, + {-1.253289,0.604701}, + {-1.473103,0.505138}, + {-1.337558,-0.025304}, + {0.025156,0.114029}, + {1.186775,0.120767}, + {0.833490,-1.016311}, + {-0.566033,-1.332979}, + {-0.525104,-0.650364}, + {-0.791062,0.388240}, + {1.154731,1.317110}, + {-0.317317,-0.091369}, + {0.113614,0.044248}, + {-0.258272,-0.047712}, + {1.078975,0.638972}, + {-0.597647,0.741361}, + {-0.489840,-0.645206}, + {0.555416,0.241694}, + {-0.612925,-1.006549}, + {-1.021876,-0.178930}, + {-0.739651,0.372522}, + {0.602211,1.641040}, + {0.379708,-0.413169}, + {0.089748,-0.616324}, + {0.599494,-0.401401}, + {0.259038,1.039479}, + {0.006801,-0.534216}, + {-1.441283,-0.788294}, + {0.652339,-0.170895}, + {0.170934,0.389251}, + {0.369531,1.157200}, + {-1.009088,0.126682}, + {-0.315585,0.221797}, + {0.202527,1.134547}, + {-0.272163,-0.354116}, + {-0.278950,-0.284232}, + {-0.055980,-0.181156}, + {-0.432454,-0.002721}, + {-0.818628,-0.041833}, + {-0.544952,-0.105704}, + {0.552322,0.225571}, + {-0.429020,-0.426446}, + {0.450359,0.329922}, + {-0.420977,0.010542}, + {0.524081,0.061941}, + {-0.611116,-0.497061}, + {-0.185940,-1.029832}, + {-0.352210,0.272805}, + {-0.523549,0.577421}, + {0.484978,-0.655545}, + {0.426839,0.473204}, + {-0.694465,0.191582}, + {1.346640,-0.894402}, + {-0.108025,0.551475}, + {0.196850,0.014778}, + {0.461298,-0.661029}, + {1.183668,-0.482788}, + {0.451475,1.978741}, + {0.436252,-0.573917}, + {-0.793265,0.340729}, + {0.372344,0.278611}, + {-0.754183,0.302767}, + {-1.031154,-1.065581}, + {0.628203,-0.223986}, + {0.430165,-0.891388}, + {-0.015695,-0.279011}, + {0.048695,-1.308632}, + {-0.269414,-0.197042}, + {-0.795862,1.044719}, + {0.436994,-0.946302}, + {0.660415,0.069112}, + {-0.073069,-0.338405}, + {-1.016127,-0.176174}, + {0.603558,0.251424}, + {0.051546,-0.212910}, + {-0.297017,-1.927157}, + {-0.110347,-0.266009}, + {0.592700,-0.192662}, + {-0.562193,-0.059079}, + {-0.549655,1.273057}, + {0.063368,0.733878}, + {-0.221776,1.592995}, + {-0.742231,-1.023633}, + {-0.300987,1.027012}, + {0.819822,1.696182}, + {-0.391936,0.788524}, + {0.532161,-0.042235}, + {-0.366096,-0.206694}, + {-0.124892,-0.264484}, + {-0.704913,0.651417}, + {2.149216,-0.035024}, + {-0.208488,0.467413}, + {0.197927,-0.450251}, + {0.775973,0.707921}, + {-0.971095,0.934934}, + {-0.675312,-0.556623}, + {0.398423,2.014933}, + {1.314999,0.121784}, + {-0.149328,-0.548591}, + {0.624388,0.554257}, + {0.794465,-0.762318}, + {-0.342740,-0.044003}, + {0.664133,0.988572}, + {-0.591256,-0.550813}, + {0.004503,-0.209721}, + {-0.704415,1.115631}, + {0.499527,-0.865457}, + {-0.427010,-0.058056}, + {-0.442966,-0.801730}, + {-0.028645,-0.432707}, + {-0.520193,-0.477441}, + {0.693746,-0.591685}, + {-0.723356,-0.124885}, + {-0.271467,0.138230}, + {0.378694,-1.346075}, + {0.867608,-0.861081}, + {-0.030809,-0.637696}, + {1.547649,-0.433481}, + {0.281972,1.218074}, + {0.289769,-0.252994}, + {-0.547299,-1.114947}, + {0.281379,0.103827}, + {0.144241,0.141649}, + {0.882615,0.777328}, + {0.293825,-0.291434}, + {0.115586,0.642325}, + {-0.661045,-0.025898}, + {0.339237,0.790670}, + {-0.709378,0.173682}, + {-0.691671,0.227216}, + {-0.093392,0.390772}, + {-0.822655,1.661899}, + {0.470760,-0.539462}, + {0.883847,0.324028}, + {-0.816597,-0.501790}, + {-0.171583,-1.222645}, + {0.589553,0.087931}, + {0.352979,-0.325299}, + {-0.040087,0.573102}, + {-0.333396,0.702907}, + {0.678815,0.634352}, + {1.236381,-0.495768}, + {0.455672,1.242359}, + {-0.877502,-1.177867}, + {0.036368,0.084722}, + {-0.261535,1.262188}, + {-0.187800,0.138469}, + {0.075047,0.017116}, + {-0.553277,-0.427987}, + {0.203971,-0.219700}, + {-0.102810,0.727420}, + {-0.208146,0.641188}, + {0.505555,-1.229252}, + {-0.089677,-0.317869}, + {0.045298,0.553962}, + {0.682165,0.978041}, + {0.758240,1.062833}, + {-0.591609,-0.169416}, + {0.200002,-0.806496}, + {0.401893,-0.505467}, + {-0.049368,0.974221}, + {-1.338392,-1.052507}, + {-0.234168,-0.459732}, + {-0.049076,-0.787956}, + {-0.440995,0.824773}, + {-0.310494,0.155186}, + {0.629950,0.438434}, + {0.128082,-0.298934}, + {-0.889005,-0.700750}, + {0.725139,1.108872}, + {0.806530,0.172376}, + {1.274152,-1.109091}, + {0.361415,0.304318}, + {-0.770589,-1.690576}, + {-0.077050,-1.541958}, + {0.055098,0.140834}, + {-1.027384,-0.083170}, + {-0.387121,1.173074}, + {-0.511185,-0.640359}, + {0.970168,0.278280}, + {-0.399875,-0.215985}, + {0.578435,0.171387}, + {-0.143334,-0.387392}, + {1.048777,0.181700}, + {0.369934,0.608091}, + {1.128358,-0.533869}, + {0.725995,-0.677232}, + {0.131748,-0.914071}, + {-0.661664,0.557397}, + {0.864385,0.026499}, + {-0.076076,-0.384927}, + {-1.700148,0.806878}, + {-0.093025,0.160711}, + {0.657889,-0.819687}, + {1.415252,0.043090}, + {-0.474513,1.021749}, + {-0.235819,0.669443}, + {-0.209294,0.038555}, + {0.350373,0.947927}, + {-0.473777,0.450919}, + {-0.439863,-1.296476}, + {-0.041963,0.452473}, + {0.519491,-0.934337}, + {0.029848,0.199221}, + {0.568997,0.413023}, + {-0.422968,0.191107}, + {-1.046889,-0.575230}, + {0.555575,0.114778}, + {-0.271803,-0.125287}, + {-1.492866,-0.813928}, + {0.581882,-0.352968}, + {-0.802623,1.377947}, + {0.700558,0.297364}, + {0.010499,0.485443}, + {0.030525,-0.214066}, + {0.290003,-0.036848}, + {0.177382,0.633674}, + {-0.142112,-0.817479}, + {-1.506692,0.130953}, + {-0.549851,0.089496}, + {0.530755,1.632153}, + {0.958531,-1.707736}, + {0.610349,2.078139}, + {-0.086293,0.239772}, + {0.202042,-0.362267}, + {0.894271,-1.466671}, + {0.438957,0.318388}, + {-0.721440,-1.241242}, + {0.570884,0.929768}, + {0.691115,0.078293}, + {2.031262,0.005026}, + {0.614740,0.403247}, + {-0.153316,-0.453097}, + {-0.500683,-0.473711}, + {-0.604458,0.407987}, + {0.182040,0.697141}, + {-0.162319,0.006736}, + {0.525699,0.675310}, + {-0.360962,-0.686781}, + {1.308789,-0.386448}, + {-0.174349,-0.941565}, + {-1.104866,0.335170}, + {-0.705175,0.291939}, + {-0.244608,-0.192226}, + {0.962480,0.146916}, + {0.413036,-0.045753}, + {0.322721,0.586207}, + {-0.285444,0.020732}, + {-0.201547,-0.960376}, + {-0.525784,0.598120}, + {-0.594926,0.215987}, + {-0.157909,-0.395456}, + {0.609670,0.114630}, + {0.326789,-0.001808}, + {-0.652800,0.608450}, + {0.630816,-0.318163}, + {1.290349,-0.308122}, + {0.302288,0.042105}, + {-0.618234,-0.122607}, + {-0.671018,0.647521}, + {-0.033489,1.029981}, + {1.127675,0.838844}, + {-0.391586,0.406333}, + {0.634599,-0.206173}, + {-0.158274,0.281173}, + {0.031888,0.459707}, + {-0.371921,0.932324}, + {0.076527,-0.283407}, + {-0.241424,0.283793}, + {0.312402,0.175612}, + {0.212368,-0.432081}, + {-0.773642,0.100780}, + {0.251432,0.483141}, + {-0.166812,-0.067869}, + {0.027261,0.793139}, + {0.764140,0.027200}, + {0.014120,-0.858433}, + {-0.996727,0.370392}, + {0.132527,0.167380}, + {0.972844,0.615013}, + {-0.400845,-1.129354}, + {0.468849,-0.867083}, + {1.017556,-0.782061}, + {-0.109531,-0.643417}, + {-0.213625,0.158193}, + {0.199067,-0.074333}, + {0.344584,-1.074916}, + {-0.221442,0.527535}, + {-0.427743,0.192179}, + {-0.445158,0.223376}, + {-0.406246,-1.129810}, + {0.498180,-0.537912}, + {0.246385,1.147774}, + {1.124593,0.638781}, + {-0.238219,-1.178279}, + {0.564715,0.082624}, + {0.009528,-0.294926}, + {0.449595,-0.413499}, + {-0.222000,-0.383341}, + {-0.293071,-0.020010}, + {0.262525,-0.619825}, + {-0.622110,0.994815}, + {0.826520,-0.318905}, + {-0.139956,0.034670}, + {-0.602776,1.445757}, + {-0.000428,0.515115}, + {0.262184,-0.002736}, + {1.304981,-0.501046}, + {-0.321231,0.622551}, + {1.054329,-0.220852}, + {-0.492771,-0.940654}, + {-0.780517,1.146123}, + {-0.030875,-1.453137}, + {0.833466,-0.395468}, + {0.523778,0.759513}, + {-1.126077,-0.417115}, + {-0.556663,0.032786}, + {0.206892,-1.122757}, + {-0.366164,1.106942}, + {0.152365,-0.067752}, + {0.046570,-0.568357}, + {-1.294625,0.304168}, + {-0.314597,-0.414620}, + {1.204236,0.126016}, + {-0.051512,0.247893}, + {-0.662050,-0.548429}, + {0.806882,0.635211}, + {0.354519,0.315406}, + {-0.102549,-0.307759}, + {-0.945865,-1.144877}, + {0.092988,-0.095752}, + {-0.590799,1.426964}, + {-0.512031,-0.295192}, + {-0.241074,-0.440517}, + {0.829680,0.087681}, + {-0.109337,-0.289886}, + {0.656985,0.294518}, + {0.564203,0.206732}, + {-0.898597,-0.207926}, + {0.327259,0.685055}, + {1.226880,-0.695505}, + {-0.829727,0.718718}, + {-1.451225,-0.289371}, + {0.837042,1.220714}, + {-0.158113,0.175430}, + {0.974037,-0.062980}, + {0.178835,0.169509}, + {1.118203,0.735886}, + {0.104949,-0.340257}, + {0.378724,0.089648}, + {0.214056,-0.821406}, + {1.396107,0.599080}, + {0.369926,0.109247}, + {0.673800,0.763612}, + {-0.268951,-0.230063}, + {0.567933,0.162580}, + {-1.689604,-0.345288}, + {0.137885,-0.093063}, + {-0.298533,-0.191792}, + {1.251967,-0.136681}, + {-0.693495,-0.932444}, + {-0.555325,-0.131594}, + {0.236263,-0.069815}, + {-1.252648,0.035106}, + {-1.764317,0.733486}, + {-0.075051,1.622354}, + {-0.085244,-0.605377}, + {-0.642959,-0.089863}, + {-0.113593,-0.099045}, + {0.058362,-1.029047}, + {0.826847,0.113454}, + {-0.244119,-0.050284}, + {-1.073509,0.123867}, + {-0.904460,-0.901549}, + {0.453204,-0.459712}, + {-1.264724,-0.418653}, + {0.472295,-1.485124}, + {0.323558,-0.092765}, + {1.800720,0.519789}, + {-1.126308,-0.318456}, + {0.724158,-0.269665}, + {0.710385,0.177657}, + {-0.783852,-0.215007}, + {-1.354067,0.031020}, + {-1.015185,0.249321}, + {0.839984,1.457903}, + {-0.353245,-0.313877}, + {0.763070,0.903317}, + {-1.656538,-0.791042}, + {-0.892608,-0.381481}, + {0.649284,-0.643492}, + {1.455720,-0.133815}, + {0.732560,-0.289157}, + {-0.377583,-1.019029}, + {-0.377847,-1.270397}, + {0.809711,-0.293496}, + {-1.027232,-0.492600}, + {-0.531947,-1.149837}, + {-0.321890,0.886703}, + {-0.603477,-1.377457}, + {0.259723,-0.220563}, + {0.949998,0.240148}, + {0.261264,0.890932}, + {0.595257,-1.336390}, + {-0.362741,0.082717}, + {-0.355324,-0.058517}, + {-0.404853,-0.487143}, + {-0.431324,0.299014}, + {0.079328,-0.804580}, + {0.824935,-0.454231}, + {0.262757,-0.554689}, + {0.126869,-0.439135}, + {-1.051874,-0.512746}, + {0.293715,0.904688}, + {-1.530512,-0.258114}, + {0.782473,1.192382}, + {0.532046,0.769399}, + {0.384142,-0.126943}, + {0.161275,-0.961466}, + {-0.060918,-0.053277}, + {0.876995,1.833961}, + {-0.747767,0.165348}, + {-0.052410,-0.612302}, + {0.814379,0.370027}, + {0.848717,-0.351940}, + {-0.797478,-0.346407}, + {0.451936,1.010194}, + {0.582376,0.949018}, + {-0.342362,0.108576}, + {0.556515,-0.142943}, + {0.728162,-1.097160}, + {-1.075414,0.137602}, + {0.457708,-0.654780}, + {0.165246,1.781712}, + {-0.319642,-0.993107}, + {-0.584410,0.462585}, + {-0.203283,-0.682679}, + {-0.872903,0.560968}, + {0.545374,0.278981}, + {0.918419,0.246065}, + {-0.632251,-0.167158}, + {-0.285094,0.517218}, + {0.742545,-0.428022}, + {-0.272512,-0.650121}, + {0.007097,-0.259464}, + {0.321549,-0.153838}, + {-0.935528,-0.478174}, + {-0.609717,-0.076270}, + {-0.755654,-0.453108}, + {0.881595,0.809393}, + {-0.851194,-0.126438}, + {-0.678539,-0.168662}, + {-0.735439,1.454476}, + {-0.702070,-0.732654}, + {0.950217,0.061374}, + {0.931381,0.383055}, + {-1.577577,-0.830957}, + {1.081051,0.875738}, + {0.946201,1.485701}, + {0.433276,0.890427}, + {1.505338,0.234134}, + {0.083216,0.185535}, + {0.206556,0.692397}, + {0.800164,1.210478}, + {0.308393,-0.573495}, + {-0.455541,0.377465}, + {0.285379,0.593679}, + {1.807014,0.007663}, + {1.599165,-0.768434}, + {-0.182963,-1.147207}, + {0.691660,0.496669}, + {0.235179,-0.284885}, + {-0.461998,0.542110}, + {-1.935320,-0.774389}, + {-0.078056,-0.127823}, + {0.299281,-0.033361}, + {0.302731,0.078716}, + {0.069066,-0.050105}, + {0.221607,-1.239222}, + {0.340220,0.582368}, + {-0.565872,0.345751}, + {-0.470414,0.191707}, + {-0.086475,-1.321960}, + {-0.653337,1.499706}, + {-1.186698,0.203143}, + {0.362014,0.335224}, + {0.763790,-0.914370}, + {1.135858,-1.463878}, + {0.719099,-0.477518}, + {0.269766,0.421199}, + {0.064365,-0.175814}, + {-0.367548,0.001256}, + {0.544776,-0.698629}, + {0.615651,-0.386841}, + {-0.875089,-0.516872}, + {0.413476,-1.281108}, + {0.502809,-0.490843}, + {-2.204143,0.110420}, + {-0.385040,-0.740596}, + {0.695904,0.385231}, + {0.255709,0.008205}, + {-0.586557,-0.564665}, + {0.803747,0.411107}, + {1.601181,0.662062}, + {0.865286,-0.979781}, + {0.689845,0.519237}, + {0.395498,0.145840}, + {-0.626369,0.344739}, + {0.042164,0.051887}, + {-1.403498,0.671656}, + {0.598572,0.681828}, + {1.220256,-1.165620}, + {-0.793312,0.715179}, + {-0.234183,0.019938}, + {0.385507,0.226328}, + {-0.450997,-1.107601}, + {-1.171289,0.649867}, + {-1.080178,-1.231856}, + {-0.061619,1.143806}, + {0.430298,0.525364}, + {-1.049354,0.166192}, + {-0.080776,-0.357525}, + {0.511572,-1.785495}, + {-0.558196,0.261639}, + {-0.887145,0.298578}, + {-1.566637,0.706769}, + {1.151140,0.445122}, + {-0.586133,0.107778}, + {-0.804525,0.245580}, + {0.980744,1.043818}, + {-0.070419,-0.910922}, + {-0.451713,0.466261}, + {1.125777,0.160904}, + {0.577041,0.069860}, + {1.144021,-0.150339}, + {-0.411414,0.404973}, + {0.188443,0.548050}, + {0.225498,-0.614626}, + {1.398432,-1.427287}, + {-0.035313,0.492779}, + {0.460713,-1.022950}, + {-0.523193,-0.887124}, + {-1.045011,0.261402}, + {1.388863,-0.612235}, + {0.475152,-0.857959}, + {0.468680,-0.231389}, + {0.983306,0.199760}, + {-0.645385,0.205021}, + {-0.363448,-0.870316}, + {-0.003819,0.010668}, + {0.471121,0.244769}, + {-0.040500,0.556180}, + {-1.479050,0.358434}, + {0.182788,0.373558}, + {-0.858638,-0.878108}, + {0.001368,0.436654}, + {0.142518,0.294864}, + {-1.153171,0.438127}, + {0.937820,0.034099}, + {1.521724,-0.077421}, + {-0.377694,-0.278517}, + {1.467230,-0.459260}, + {0.145964,0.357560}, + {0.619192,-1.480037}, + {-0.797876,0.686615}, + {-0.465726,1.294829}, + {1.120753,0.433341}, + {0.481084,0.429728}, + {-0.993491,-0.218804}, + {0.080120,0.061366}, + {-0.345080,-1.108765}, + {0.597685,-1.108810}, + {0.272861,-1.448070}, + {0.103180,-0.368753}, + {0.452562,-0.193846}, + {-0.047889,-0.169513}, + {-0.062237,-0.499899}, + {-0.208393,1.227431}, + {0.358621,-0.122079}, + {-0.538647,0.167846}, + {-0.535399,0.147300}, + {-0.016851,-0.523791}, + {0.185591,0.287441}, + {-0.076126,0.077379}, + {0.111808,-0.298068}, + {-0.360049,0.447806}, + {-0.468579,0.021829}, + {0.999254,0.093009}, + {0.409156,0.087569}, + {-0.290239,1.155172}, + {-0.631769,0.113278}, + {-0.485475,0.352847}, + {0.132807,0.899243}, + {0.231351,-0.149363}, + {0.389824,-1.011206}, + {-0.093767,0.618494}, + {0.302881,0.883287}, + {0.253348,-0.020438}, + {0.310115,0.544154}, + {-0.181672,0.250213}, + {0.785253,-0.002714}, + {0.399704,-0.310344}, + {-1.634428,0.357997}, + {0.976723,0.117106}, + {-0.663422,0.938808}, + {1.142522,0.426250}, + {-0.176854,0.538674}, + {1.134571,1.976267}, + {-0.793977,0.553600}, + {-0.496199,0.132777}, + {0.428161,1.342281}, + {0.881731,-0.349207}, + {0.487284,-0.673507}, + {0.834150,0.300816}, + {1.043740,0.574802}, + {-0.108407,1.056837}, + {-0.745715,0.304328}, + {0.494903,0.535517}, + {-0.608093,0.752694}, + {0.430291,-0.135674}, + {-0.174181,-1.362910}, + {-0.064613,-1.995513}, + {-0.704478,0.276742}, + {0.232225,-0.347325}, + {0.129886,0.297225}, + {0.095056,0.366532}, + {1.123177,-0.516860}, + {0.280489,0.548995}, + {0.950114,0.871146}, + {-0.045855,-0.101106}, + {0.323361,0.916197}, + {-0.379042,-0.789420}, + {0.155370,-0.526626}, + {0.123440,-0.404112}, + {1.122189,-0.542010}, + {0.287594,-0.412748}, + {-0.487695,-0.914112}, + {0.326158,-0.133099}, + {-0.166449,-1.353339}, + {-0.055827,0.625175}, + {-1.228110,0.059411}, + {-0.274514,-1.194058}, + {0.008816,-0.571387}, + {-0.700423,0.936284}, + {-0.528928,0.824434}, + {-0.436216,1.131698}, + {-1.371594,-0.535034}, + {-0.002092,0.190907}, + {-0.652668,1.278957}, + {0.101573,-0.906194}, + {0.783427,-0.139790}, + {-2.499705,-0.774554}, + {0.580857,0.350367}, + {-0.259410,0.346345}, + {1.443858,0.066180}, + {1.007880,-0.608615}, + {-1.185398,-0.124630}, + {-1.074749,-0.104417}, + {-0.075128,0.869631}, + {-0.157998,1.035636}, + {-0.212559,-0.416354}, + {0.399589,-0.077372}, + {0.139788,0.342017}, + {1.188158,-1.194288}, + {0.290935,0.230597}, + {0.467906,0.144104}, + {0.777358,0.288836}, + {0.818580,0.308433}, + {-0.210142,0.214512}, + {0.315948,-0.636328}, + {-0.005891,-0.999753}, + {0.072755,-0.563891}, + {0.425654,0.196551}, + {0.361411,-0.211226}, + {0.905206,-1.349513}, + {-0.790974,-0.395724}, + {0.525156,0.770383}, + {-0.092408,-0.488183}, + {0.265920,-0.036150}, + {-0.276333,-0.689856}, + {0.117261,0.005735}, + {-0.665691,-0.164460}, + {0.312157,-0.594442}, + {0.107864,-0.443120}, + {1.118670,-0.671898}, + {-0.022763,0.583797}, + {0.510916,-0.179671}, + {0.714169,-0.104546}, + {0.396036,1.216840}, + {0.373920,0.135520}, + {0.553972,-0.997894}, + {0.052585,0.462084}, + {-0.150044,-0.163447}, + {1.461147,0.659548}, + {-1.000455,-1.680109}, + {-0.717611,-0.210337}, + {-0.772596,-0.251350}, + {0.537726,1.050492}, + {-0.482650,-0.283289}, + {-0.633239,-0.569656}, + {-0.904458,-0.617468}, + {0.109119,-1.522443}, + {-1.226419,-0.899079}, + {0.379579,-0.252179}, + {-0.104614,0.852366}, + {-0.503179,0.002718}, + {0.361405,-0.255127}, + {0.707854,-0.139151}, + {0.588351,0.341695}, + {0.541234,0.404290}, + {-0.423201,0.945891}, + {0.540899,0.903758}, + {-0.383715,-1.224310}, + {0.541671,-0.191686}, + {0.220524,-0.467755}, + {0.419523,-0.261834}, + {-0.248004,-0.524029}, + {1.166929,-0.005245}, + {0.162462,0.683697}, + {0.021613,-1.336883}, + {-0.371790,-0.820360}, + {0.064987,-0.180902}, + {-0.530311,-0.237448}, + {0.014535,0.196268}, + {0.302158,-0.943375}, + {-0.741328,-0.621982}, + {-0.990134,-0.843669}, + {0.298802,0.314671}, + {0.150737,-0.515418}, + {0.642389,0.170803}, + {-0.660634,-0.070932}, + {-0.466752,0.294915}, + {0.498991,0.882812}, + {-0.120033,-0.318492}, + {-0.283866,0.416022}, + {-1.125159,0.156951}, + {0.164229,0.285664}, + {-0.680682,0.531478}, + {-0.228335,0.444181}, + {0.424797,-0.850202}, + {-0.620993,1.933195}, + {0.618146,1.057688}, + {0.351681,0.093757}, + {0.343992,-0.350496}, + {0.419756,-0.682277}, + {0.132223,-0.220393}, + {0.315669,-0.077213}, + {0.623756,-0.047636}, + {-0.980970,0.008924}, + {-0.180176,0.848320}, + {1.546197,0.370102}, + {0.713022,-0.899697}, + {-0.512503,-0.004650}, + {-1.161518,0.132127}, + {-1.041393,-0.554167}, + {-0.036518,0.378256}, + {-0.567661,-0.897940}, + {0.259504,-0.049623}, + {-0.026158,-0.270600}, + {0.724927,-0.499448}, + {0.138307,1.291056}, + {-1.822129,-1.644371}, + {0.671500,0.097591}, + {-0.980895,0.107560}, + {-0.420513,0.010420}, + {0.003000,-0.162645}, + {0.447768,-0.633708}, + {0.382118,0.153956}, + {-0.223916,-0.841490}, + {-1.102503,-0.035876}, + {0.040286,0.813246}, + {0.067205,-2.636223}, + {-1.058178,-0.439882}, + {0.240943,0.599442}, + {-0.266778,-1.074089}, + {0.320826,-0.918839}, + {-0.646954,-0.007690}, + {-0.530749,-0.347252}, + {-0.393036,-0.123253}, + {0.053211,-2.091439}, + {-0.481911,-0.677379}, + {-0.014975,0.997160}, + {0.536010,1.088136}, + {-1.031007,-1.129666}, + {-0.116730,0.519996}, + {1.565485,-0.343272}, + {-0.368459,0.506657}, + {-0.230470,-0.260120}, + {0.621381,1.007440}, + {0.186324,-0.312790}, + {0.273069,-0.166279}, + {0.201102,1.556145}, + {-1.115634,1.567159}, + {-0.648866,-0.322859}, + {-0.704410,0.380438}, + {0.342389,0.213936}, + {-0.042804,0.701810}, + {0.016719,0.090798}, + {-0.731592,-0.277491}, + {0.103078,0.783883}, + {0.345053,0.215559}, + {0.067924,1.081925}, + {0.369806,-0.219722}, + {1.098806,0.215612}, + {-0.724316,-0.036048}, + {0.186158,0.608022}, + {0.139663,0.056514}, + {-0.575010,-0.801492}, + {-1.123663,-0.414602}, + {0.564236,0.266108}, + {-0.391462,0.093429}, + {0.144703,-0.560902}, + {-0.686121,1.329790}, + {-0.379640,-0.241261}, + {-0.498875,-1.364991}, + {0.541470,0.214751}, + {-0.508841,-0.694946}, + {0.812702,0.407024}, + {0.257132,0.128592}, + {-1.187255,-0.495273}, + {0.020247,-0.196925}, + {0.188392,-0.459074}, + {-0.932918,0.525366}, + {1.134929,1.151288}, + {-1.296745,-0.844320}, + {-0.610290,-1.014578}, + {0.623994,0.443023}, + {-0.303615,-1.049124}, + {-0.597543,-0.208275}, + {0.252960,0.992397}, + {-0.023412,0.368284}, + {-0.429581,-0.070039}, + {0.923782,-0.778340}, + {0.060056,-0.739469}, + {0.753096,0.478049}, + {-0.127857,0.093383}, + {0.106401,0.423911}, + {-0.183224,-0.032369}, + {-0.381160,0.851604}, + {-0.797228,-0.217383}, + {0.227067,0.316891}, + {0.451114,1.830366}, + {-1.042958,0.186763}, + {-0.171936,0.478779}, + {-0.075379,0.034822}, + {0.385404,1.160047}, + {0.105260,-1.211098}, + {1.211046,-1.103540}, + {0.308818,-1.042156}, + {-0.704631,-0.115963}, + {0.012675,-0.547391}, + {-0.484557,-0.100460}, + {-0.836917,-0.043501}, + {-0.463115,1.544351}, + {0.309894,-0.669455}, + {0.685375,0.000866}, + {0.511942,0.836813}, + {-0.929517,-0.531037}, + {0.050933,0.075894}, + {0.845070,1.231045}, + {0.796139,0.796776}, + {0.766749,-0.653760}, + {0.742048,1.398289}, + {-0.403017,-0.007496}, + {-0.509706,1.110607}, + {-1.449968,0.427343}, + {-0.010909,1.223294}, + {-0.077727,-0.670769}, + {0.526333,0.308160}, + {0.319094,-0.176388}, + {0.742543,1.379446}, + {1.245044,1.188638}, + {-0.025489,-0.164810}, + {0.608945,-0.073624}, + {-0.174670,-0.273746}, + {-0.624686,1.010041}, + {-0.670461,0.584006}, + {-0.444858,-1.904891}, + {0.222806,0.547945}, + {0.138390,0.546322}, + {-0.446882,-0.696967}, + {-0.628694,-1.208785}, + {-2.152300,-0.613403}, + {-0.096864,0.068138}, + {-0.301906,-0.946012}, + {-0.369820,-0.646125}, + {-1.447581,-0.646713}, + {-0.400707,-0.494477}, + {-0.635435,-0.038456}, + {0.296783,0.278288}, + {-1.001213,0.042941}, + {0.091071,0.902239}, + {-0.460656,0.281628}, + {0.479946,0.142043}, + {-0.487485,-0.696643}, + {-0.407485,-0.541246}, + {-0.607882,-0.853128}, + {-1.305443,-0.877425}, + {-0.359749,-0.647498}, + {-0.626709,0.576527}, + {-0.148729,-0.090456}, + {0.172979,0.177948}, + {-0.107637,-0.478667}, + {0.366998,0.024629}, + {0.462107,0.857612}, + {-0.460563,0.248349}, + {0.907838,0.853909}, + {0.783150,0.585374}, + {-0.299669,-0.212882}, + {1.119594,0.504852}, + {0.377228,0.481423}, + {0.852296,0.676788}, + {-0.286757,-0.002129}, + {0.209843,-0.977784}, + {-0.441823,-0.072773}, + {0.917957,-0.753300}, + {0.273348,-0.628772}, + {-0.284862,0.155215}, + {-0.247355,-0.247082}, + {2.118546,-0.537469}, + {-0.310251,-0.363626}, + {1.378995,0.614774}, + {0.009172,-1.398820}, + {-0.300000,0.441999}, + {-0.297449,0.954413}, + {0.683275,0.180768}, + {-0.371476,-1.618431}, + {-0.175134,-1.231505}, + {-0.749555,-0.428287}, + {-0.969477,0.592818}, + {0.687133,-0.691685}, + {-0.165526,-0.045505}, + {0.910848,-0.391948}, + {1.179305,0.100935}, + {0.166614,-0.729254}, + {-1.130469,0.164593}, + {-1.549639,0.217721}, + {-0.481054,-0.872328}, + {-0.586590,-1.074824}, + {0.091563,0.381294}, + {-0.609678,-0.230306}, + {0.503876,0.238278}, + {-0.562595,1.625733}, + {1.273220,0.329444}, + {0.309265,-0.432313}, + {0.950421,0.011570}, + {0.374275,-0.221395}, + {-0.002535,-0.068439}, + {-0.704010,-0.714205}, + {0.645151,-0.117244}, + {-0.548621,0.089519}, + {-1.310708,0.214149}, + {-0.222895,0.327611}, + {-1.536313,0.422522}, + {0.805899,-1.158480}, + {0.201190,0.527469}, + {0.085621,-0.741991}, + {-0.638953,0.135701}, + {0.610284,0.256558}, + {-0.021550,-0.185034}, + {-0.663349,0.344785}, + {1.234438,0.087483}, + {-0.131234,-1.490191}, + {0.256245,0.425473}, + {-0.093340,0.831930}, + {-1.552555,-0.056483}, + {0.441688,0.115210}, + {0.108127,0.046402}, + {-0.367616,-0.887437}, + {-0.808894,-0.681247}, + {-0.609795,-0.206087}, + {0.578144,0.401209}, + {-0.066620,0.628916}, + {0.230375,-0.294361}, + {0.168031,0.445080}, + {0.184035,0.358481}, + {0.251087,-0.489438}, + {-0.945207,2.090916}, + {-0.899493,0.281441}, + {-0.600711,0.695281}, + {0.496877,1.825249}, + {0.557064,1.787828}, + {-0.032903,0.096150}, + {-0.171482,-0.526085}, + {-0.560700,0.472487}, + {-0.295947,0.009918}, + {1.142040,0.416169}, + {-0.447775,0.074483}, + {-0.823909,-1.010476}, + {-1.547191,1.727266}, + {-0.760387,-0.877929}, + {-1.629711,-0.932786}, + {0.486282,0.248117}, + {-0.264396,0.926022}, + {1.081113,0.075435}, + {-0.643699,-0.289886}, + {0.440984,0.308158}, + {0.821736,-0.810105}, + {-1.505203,-1.521192}, + {-0.542677,0.842918}, + {0.164887,0.399004}, + {-0.811521,0.078831}, + {0.797827,-1.167125}, + {-0.401101,-0.501867}, + {0.364811,-0.809028}, + {0.734068,-0.323428}, + {-0.319197,-0.550535}, + {-0.271324,-0.367006}, + {-0.059699,0.983663}, + {-1.366932,0.282483}, + {0.168976,0.203650}, + {0.302598,-0.221575}, + {1.175485,0.753488}, + {0.107512,1.781766}, + {0.946028,-0.282479}, + {-0.679608,-0.932184}, + {-1.191856,0.201361}, + {-0.166462,-0.053378}, + {-0.812532,-0.147616}, + {1.611017,0.674833}, + {0.314528,1.017239}, + {-1.162592,0.325194}, + {-1.032033,0.635921}, + {0.084120,-0.730470}, + {0.494315,0.897198}, + {0.847109,0.168996}, + {1.644454,0.751446}, + {-0.353970,-0.863128}, + {0.678397,0.141939}, + {-0.973674,-2.013022}, + {0.685345,0.419897}, + {-1.288642,-0.442089}, + {-0.054887,-0.748914}, + {-0.601785,-0.605123}, + {-0.214297,-0.391510}, + {-1.074972,0.659726}, + {0.105391,0.708672}, + {-0.113354,-0.765485}, + {0.300873,0.781452}, + {0.170277,0.599499}, + {0.147834,-0.954326}, + {-0.339726,-0.501183}, + {0.544002,0.385444}, + {0.352044,1.066552}, + {0.911869,0.956912}, + {-0.191047,0.108966}, + {1.413499,-0.757569}, + {0.706789,-1.026854}, + {0.539308,-0.138690}, + {0.080942,-0.272806}, + {0.098018,0.018024}, + {0.195238,-0.389384}, + {0.488144,-0.357992}, + {-0.309817,0.010149}, + {-1.032893,-0.592658}, + {-0.298775,-0.388887}, + {1.131782,-1.690704}, + {-0.193514,0.171204}, + {-0.537903,-0.543134}, + {0.659055,-0.601144}, + {0.304951,0.294985}, + {0.888941,0.970043}, + {0.458543,-0.183693}, + {-0.759308,0.795668}, + {-0.350375,-0.113882}, + {-0.127585,0.382365}, + {-0.213916,0.521858}, + {-0.344818,0.116112}, + {-0.092834,-0.185633}, + {0.061649,1.365497}, + {0.476463,-0.791558}, + {-0.984206,0.997109}, + {-0.057978,-0.489422}, + {-0.194234,-0.607085}, + {-0.657674,0.088412}, + {-0.469191,0.137722}, + {1.011820,-0.291022}, + {-0.303269,-0.626332}, + {0.561159,-0.200477}, + {0.140475,0.804297}, + {0.160608,-0.598328}, + {0.213319,1.449153}, + {1.142243,0.283340}, + {0.065037,-0.257834}, + {0.261033,0.207025}, + {0.700460,0.482503}, + {0.843141,-0.154417}, + {0.292633,0.402510}, + {-0.818789,-0.671620}, + {0.736334,-0.267822}, + {-0.736153,0.705889}, + {-1.012207,-0.010744}, + {0.662579,0.401311}, + {-0.387354,-0.679445}, + {1.209621,-0.153205}, + {-0.701672,0.069607}, + {1.319853,1.085888}, + {1.254748,-0.101110}, + {0.266011,-0.499106}, + {0.615725,0.884454}, + {-1.011208,0.102181}, + {-1.099802,-0.974027}, + {-0.531963,-0.562972}, + {0.121607,-0.356338}, + {0.518231,0.154831}, + {0.499951,1.188225}, + {-0.817457,1.714401}, + {0.369950,0.572897}, + {-0.414845,-0.182628}, + {-0.718216,1.117213}, + {-1.333928,0.469810}, + {-1.207522,-0.417102}, + {0.561111,0.726184}, + {-1.117766,-0.219214}, + {0.744550,-0.034760}, + {0.797619,1.455506}, + {-0.584053,0.337943}, + {0.157397,-0.757585}, + {0.116196,-0.446006}, + {0.146428,0.467807}, + {0.714421,-0.366232}, + {1.429872,0.625346}, + {-0.033015,0.198674}, + {0.105885,-0.216353}, + {-0.023687,0.692143}, + {-0.048073,0.669529}, + {-0.205184,0.780326}, + {0.266525,0.176072}, + {0.141148,0.252191}, + {-0.388369,0.046018}, + {0.299170,-0.177464}, + {-1.081893,-1.145642}, + {0.010014,0.514986}, + {0.448166,-0.748932}, + {-0.295357,-0.035173}, + {-0.033904,0.187373}, + {-0.964666,-0.232491}, + {0.485426,-1.478534}, + {0.150372,0.430681}, + {1.004055,0.755612}, + {-1.273932,-0.382681}, + {-0.123319,0.320989}, + {-0.919513,-0.315545}, + {-0.497703,0.345372}, + {0.182013,-0.018783}, + {0.188130,-1.169909}, + {-0.716006,-0.184715}, + {0.178950,-0.378160}, + {-1.121777,0.261067}, + {-0.884913,0.533499}, + {-0.252487,-0.381490}, + {-0.521029,-0.459944}, + {0.109009,-0.604069}, + {-0.131799,-0.166129}, + {-0.915776,0.867035}, + {-0.051356,-0.189373}, + {0.352025,0.298949}, + {0.197533,0.081879}, + {-0.198604,0.668512}, + {1.153004,0.840196}, + {-0.111957,-0.162456}, + {1.271047,0.649951}, + {-0.272905,1.016445}, + {-0.490432,-1.110506}, + {0.098962,0.280027}, + {-0.149747,-1.055724}, + {0.592247,-0.565550}, + {1.155912,-1.145805}, + {0.763039,0.568494}, + {-0.395993,0.406406}, + {0.047324,0.263514}, + {-0.137376,0.214639}, + {-0.226893,-0.197915}, + {0.966088,-0.475559}, + {-0.194234,-0.012569}, + {-0.473935,-0.886494}, + {-0.265603,0.751773}, + {-1.593588,0.084399}, + {1.119877,0.854302}, + {-0.038422,0.118207}, + {0.370947,0.914543}, + {1.114324,0.036220}, + {0.206356,-0.695196}, + {1.075653,0.031579}, + {-0.428467,0.099867}, + {-0.942289,0.247139}, + {-0.925418,-0.511600}, + {-0.275870,-0.147021}, + {0.403291,-0.774485}, + {-0.147236,-0.816691}, + {0.715749,-0.581534}, + {0.714183,-0.266639}, + {-0.530022,0.395632}, + {-0.081142,0.308192}, + {0.776196,-1.301781}, + {0.402042,0.760863}, + {0.582426,1.116527}, + {0.303501,-1.230810}, + {0.909943,-0.101521}, + {-0.304997,0.216745}, + {-0.534911,-1.278462}, + {0.117181,0.344833}, + {0.598680,-0.801582}, + {-0.488952,0.298129}, + {-0.577852,-1.244262}, + {1.066878,-0.383162}, + {0.365205,-0.304288}, + {0.219744,1.047894}, + {-0.203519,0.603274}, + {0.562170,0.561149}, + {0.172008,0.053308}, + {-0.240833,-0.248882}, + {0.374048,0.395277}, + {-0.184462,0.712107}, + {-0.744861,-0.403328}, + {0.909695,-0.029738}, + {-0.518537,0.759702}, + {0.075402,0.358815}, + {1.141827,-0.585600}, + {-0.562473,0.258697}, + {-1.676194,0.124049}, + {0.233487,-1.891531}, + {-0.829451,0.542206}, + {0.671130,-0.997574}, + {-0.508597,-0.729909}, + {1.180725,-0.338574}, + {1.129566,-0.232048}, + {-0.380058,0.044743}, + {-0.520974,0.138217}, + {0.316724,0.009838}, + {0.133527,-1.443095}, + {0.420516,0.089332}, + {-0.302825,0.028929}, + {1.668571,-0.092751}, + {0.452698,0.532245}, + {0.360685,-1.949182}, + {-0.909377,1.422417}, + {0.108981,0.031519}, + {0.529371,-0.320971}, + {-0.439658,0.288459}, + {0.212286,-0.312996}, + {0.505587,0.680236}, + {0.990288,-0.247507}, + {-0.568695,-0.327833}, + {-0.026999,-2.401438}, + {0.339704,-0.467720}, + {1.232324,-0.049586}, + {-1.244245,-0.285340}, + {-1.630956,0.212445}, + {0.099499,0.057161}, + {0.764231,-0.893147}, + {0.454370,-0.132950}, + {0.140425,0.680194}, + {0.516606,0.024468}, + {-0.862301,0.058704}, + {0.505420,0.269336}, + {-1.237570,-0.038382}, + {0.535371,-1.536667}, + {-0.363929,-0.038955}, + {0.024531,0.914036}, + {0.543681,0.532978}, + {-0.515135,-0.698846}, + {-0.428846,0.073398}, + {-1.039931,0.055062}, + {-0.621873,-1.226401}, + {0.007829,0.811232}, + {0.571021,-0.114346}, + {-0.382807,0.023667}, + {-1.068780,-1.869853}, + {1.156098,-0.153257}, + {0.573828,-0.535261}, + {-0.790467,0.176901}, + {-0.315664,0.803594}, + {-0.334936,0.354728}, + {-0.055522,0.952521}, + {1.315614,0.102351}, + {0.491766,0.538302}, + {0.653814,-0.342202}, + {-0.127639,-1.045441}, + {0.819444,-0.227273}, + {-0.029933,0.258527}, + {-0.824566,0.432697}, + {0.165227,-0.560056}, + {-0.588310,0.436099}, + {-0.421849,-0.388859}, + {-0.090400,-1.251581}, + {-0.533719,1.429956}, + {0.394513,1.115320}, + {-0.782266,0.768142}, + {-0.197776,0.622177}, + {-0.067525,1.525139}, + {1.756764,0.035239}, + {0.798450,-0.795585}, + {-0.262068,0.632512}, + {1.880538,-0.279111}, + {-0.792909,-0.561815}, + {0.888441,1.301812}, + {0.701364,-0.873528}, + {1.343495,-0.562411}, + {0.868597,0.141126}, + {-0.328745,0.918909}, + {-0.941006,-1.339590}, + {-1.343155,-0.049963}, + {-0.574658,-1.478137}, + {0.137838,0.792901}, + {-0.041365,0.454133}, + {0.091431,-0.459571}, + {-1.358113,-0.736001}, + {-0.192427,-0.926593}, + {0.350541,0.433002}, + {-0.084577,-0.444999}, + {0.205895,-0.138558}, + {-0.941218,-0.106877}, + {-0.194195,0.335722}, + {0.734401,-0.283139}, + {1.613564,-0.517256}, + {-0.090641,0.231313}, + {0.266345,0.222315}, + {0.518095,0.960832}, + {0.250561,-0.619001}, + {-0.130002,-0.001817}, + {-0.447930,0.628615}, + {-1.273623,0.406367}, + {0.212427,0.986079}, + {-0.997576,-0.940297}, + {0.375197,0.358510}, + {0.229471,-1.781878}, + {0.184320,0.461606}, + {0.434436,-0.414778}, + {0.034886,-0.062974}, + {-1.325976,0.135652}, + {0.189020,-0.739167}, + {-0.205637,-0.572855}, + {0.860524,-0.315333}, + {0.469117,-1.548092}, + {-0.513513,1.158982}, + {-0.837350,0.105504}, + {-0.061953,-0.530778}, + {0.293859,0.467221}, + {-1.319548,-0.912039}, + {-0.137013,-0.872433}, + {0.387589,-0.454601}, + {-0.234174,-0.245068}, + {-0.744095,-0.128278}, + {-0.391439,0.309053}, + {0.908503,0.583369}, + {0.802960,0.512355}, + {-0.685064,1.108868}, + {0.251810,0.543558}, + {-0.142699,0.735253}, + {-0.039414,-0.908746}, + {0.003694,-0.414133}, + {0.715774,0.070174}, + {-0.374828,1.309546}, + {-0.427538,0.385587}, + {1.338794,0.002127}, + {-0.216609,-0.694721}, + {-1.047300,0.562533}, + {0.397480,0.627659}, + {-0.068233,-1.155685}, + {-0.553008,0.472904}, + {-0.042893,-0.644339}, + {-0.448845,-1.208575}, + {-1.198214,0.953970}, + {0.997727,0.245114}, + {0.597755,0.536424}, + {0.056192,0.023036}, + {-0.599560,0.905339}, + {-0.495127,-1.106235}, + {-0.677290,-0.536778}, + {-0.732936,0.552336}, + {-0.341833,0.636930}, + {0.745283,0.226951}, + {-1.677101,-0.140140}, + {0.185817,1.107540}, + {-0.845686,-0.138093}, + {0.337944,-0.600359}, + {1.011849,0.076595}, + {-0.535078,0.401710}, + {-0.509358,0.080738}, + {-0.713136,0.201088}, + {-0.037796,-0.459023}, + {0.077312,0.078831}, + {-0.674500,0.304809}, + {0.022353,0.208630}, + {0.234088,-0.185560}, + {-0.100573,-0.317607}, + {1.598601,0.170815}, + {1.128860,0.395856}, + {0.126361,0.194856}, + {-0.743378,-1.283214}, + {-0.729153,-1.745945}, + {0.427334,0.514369}, + {-0.260759,0.127843}, + {0.726265,0.484686}, + {-1.043220,1.583933}, + {0.058154,0.202930}, + {-0.691332,0.298501}, + {0.914411,-0.450303}, + {0.871508,-0.248846}, + {-0.880065,-1.352105}, + {-0.347400,-0.479989}, + {-0.523254,-0.137392}, + {0.062610,0.321808}, + {0.583315,1.055442}, + {-0.543484,0.434486}, + {-0.325772,-0.127451}, + {-0.691826,-2.465879}, + {-0.182029,-0.371495}, + {0.061634,0.106658}, + {0.465593,-0.215001}, + {0.799056,-0.576378}, + {0.246446,0.624574}, + {-0.629259,-0.126268}, + {-0.332421,-0.594629}, + {0.811796,0.672092}, + {-0.362575,-0.952485}, + {-0.013237,-0.559132}, + {0.462364,-0.104255}, + {-1.326460,-0.448336}, + {-0.472969,-1.030240}, + {0.263871,0.137456}, + {0.289922,0.058766}, + {0.129665,-0.095386}, + {0.004142,0.060144}, + {0.440724,0.236644}, + {-0.648048,-0.197413}, + {-0.313149,0.016730}, + {-0.002432,0.336209}, + {0.258660,1.080749}, + {-0.622678,-0.971236}, + {-0.756907,-0.630989}, + {-0.511331,1.518728}, + {0.044649,-0.192437}, + {-0.525301,1.021474}, + {-0.281214,0.054685}, + {-1.829357,-0.855561}, + {-1.000657,-0.711545}, + {0.117003,-0.447632}, + {0.776485,-0.166259}, + {0.540743,0.110749}, + {0.957454,-0.352617}, + {1.317026,1.546090}, + {0.140886,0.013168}, + {-0.570171,0.392356}, + {-0.129722,0.788992}, + {-0.725847,0.653395}, + {0.679142,0.364229}, + {0.007173,-0.853037}, + {0.914126,-0.596944}, + {0.066525,0.639936}, + {0.026810,0.096725}, + {-0.538577,-0.152497}, + {0.239321,1.002422}, + {0.129554,-1.193610}, + {-0.187528,0.700211}, + {-0.645819,0.080298}, + {0.283125,0.043507}, + {0.350661,0.372335}, + {-0.655806,0.541560}, + {0.259071,0.914486}, + {-0.920489,-0.623889}, + {0.682493,0.379061}, + {-0.505215,0.663097}, + {-0.426863,-0.323863}, + {0.363894,0.848174}, + {-0.959164,0.304144}, + {0.370840,0.239161}, + {-0.576532,1.683390}, + {0.072048,-0.479737}, + {0.248627,-0.740696}, + {0.267982,-1.331841}, + {-0.742341,-0.098982}, + {-1.397583,0.691099}, + {0.062944,-0.918057}, + {-0.341076,-0.572305}, + {-0.625912,0.261916}, + {0.000942,0.115087}, + {-0.175561,-0.065593}, + {0.613856,-0.651875}, + {-0.374162,-1.289950}, + {-0.165900,-0.183065}, + {0.934889,-0.088622}, + {-0.658801,-0.699260}, + {-0.381254,-0.924817}, + {-0.606669,0.746831}, + {-0.801585,-0.060323}, + {0.750367,-1.191764}, + {0.422306,0.025905}, + {-0.348244,-0.193827}, + {0.533889,0.323919}, + {-0.475731,-0.614214}, + {1.358458,1.027040}, + {0.041062,0.716650}, + {1.086781,0.856076}, + {-0.318239,-0.090265}, + {-0.583590,-0.229458}, + {0.280177,-0.106195}, + {-0.066028,1.050147}, + {0.446572,0.653688}, + {1.619855,1.546549}, + {-0.200833,-0.507327}, + {1.815705,1.725080}, + {0.491063,-0.912080}, + {-0.302422,-0.518018}, + {-1.497067,-0.317440}, + {0.268533,-2.004116}, + {-0.197770,-0.600212}, + {0.599980,0.496906}, + {-0.801705,-0.434370}, + {-0.209023,-0.416797}, + {0.089678,0.179194}, + {0.720592,-0.140217}, + {0.937690,0.785413}, + {0.390751,0.123322}, + {0.407110,-0.263791}, + {-0.635582,0.585058}, + {1.028085,0.038369}, + {0.650746,-0.320141}, + {0.273652,-0.045191}, + {-0.773139,-0.851372}, + {0.357316,0.497209}, + {0.140061,0.278817}, + {-0.416838,-1.327050}, + {1.445687,-0.014796}, + {0.457813,0.799090}, + {-0.556724,0.854916}, + {-0.641068,-0.733796}, + {-0.186028,0.209995}, + {0.018928,-0.915909}, + {-0.352721,0.748722}, + {-0.917271,0.414704}, + {-1.388564,0.625074}, + {-0.601451,1.435210}, + {-0.090926,-0.755952}, + {-0.293108,-1.116392}, + {0.041463,-0.942099}, + {0.666369,-0.398063}, + {0.076754,-0.528375}, + {0.698873,-1.134724}, + {-0.392975,-1.312348}, + {-0.526917,0.774984}, + {-0.133714,-0.398997}, + {-0.990661,-0.808244}, + {0.208158,0.174976}, + {-0.042402,0.479397}, + {0.972845,-1.260660}, + {-0.360790,2.380324}, + {-1.161445,-0.617964}, + {-1.369325,0.963665}, + {0.712060,0.409267}, + {0.061189,1.091821}, + {0.108450,0.248626}, + {-0.532186,0.684632}, + {0.049827,0.344103}, + {-0.730446,-0.644051}, + {0.644672,0.108521}, + {-0.311770,0.388340}, + {0.133496,0.663978}, + {-1.068918,-0.856697}, + {-0.186471,-2.407906}, + {0.497449,0.217132}, + {0.553690,0.561973}, + {-0.222306,0.573912}, + {0.294889,-0.153714}, + {-0.467937,-0.114124}, + {0.505513,0.947824}, + {0.835613,1.387442}, + {0.099424,-0.647555}, + {-1.266308,0.746230}, + {-0.314232,-0.506824}, + {-0.017508,1.148471}, + {-0.005104,0.544153}, + {1.347437,0.169568}, + {0.736192,-2.120244}, + {0.478583,-0.538318}, + {-0.845261,-0.241234}, + {0.711244,0.248858}, + {-0.960539,0.885631}, + {0.519557,0.157119}, + {0.400078,-0.558660}, + {-0.355913,-0.726436}, + {0.620301,0.283481}, + {0.437469,0.894420}, + {-0.246065,-0.441159}, + {-0.207652,0.260112}, + {0.235413,1.202266}, + {-0.147333,0.651418}, + {-0.885893,-0.987513}, + {-0.126637,-0.161050}, + {0.198054,-0.239859}, + {0.753221,-0.122113}, + {0.852570,0.312679}, + {-1.421536,0.339068}, + {-0.608847,0.082841}, + {0.806647,-0.618066}, + {-0.055481,0.361346}, + {0.524385,1.872652}, + {-0.288788,-0.146810}, + {-0.967147,-0.853194}, + {1.966405,-0.833411}, + {0.789003,-0.347270}, + {0.015620,-0.631887}, + {-0.150879,0.915769}, + {-1.491238,0.217030}, + {0.326333,1.498518}, + {0.141223,-0.389036}, + {-0.513646,0.793641}, + {0.900859,0.209672}, + {0.036641,-0.621067}, + {-0.472702,0.503169}, + {-0.229471,0.415297}, + {-0.063377,-0.510807}, + {1.772735,-0.165259}, + {0.367308,0.204078}, + {-0.811216,-0.742540}, + {-0.346736,-1.336241}, + {-0.390538,-0.215693}, + {0.273645,0.017357}, + {-0.411219,-0.583215}, + {0.179285,0.386901}, + {-0.714087,-0.705568}, + {0.354034,-0.029101}, + {-0.124648,-1.203258}, + {1.036534,-0.216642}, + {-0.079461,-0.167129}, + {-0.519538,0.969040}, + {-0.926647,-0.543191}, + {-0.311806,0.129944}, + {0.338452,0.046144}, + {0.443791,1.037348}, + {0.366235,0.139119}, + {-0.436045,-0.889787}, + {-0.487186,-0.329841}, + {0.501924,-0.296196}, + {-0.155070,0.928638}, + {-2.271375,-1.096587}, + {-0.875416,0.031515}, + {0.034895,1.136367}, + {1.259196,0.151467}, + {-0.252917,0.546385}, + {0.146755,0.215855}, + {-1.279319,1.584790}, + {-0.218261,-0.211344}, + {0.838865,-0.281694}, + {0.072992,0.018618}, + {-1.486640,-1.384387}, + {0.673440,0.783368}, + {0.039087,0.485902}, + {0.548339,-0.131470}, + {-0.662826,2.232434}, + {-0.724622,-0.767747}, + {-0.737761,-0.048276}, + {0.858736,0.000247}, + {-0.219835,-1.241124}, + {0.396621,-0.086901}, + {-1.437003,0.502828}, + {-1.537267,0.734791}, + {0.247638,-1.034931}, + {-0.879638,0.130748}, + {0.532153,0.697673}, + {0.869286,1.340851}, + {0.477714,-0.332712}, + {-0.081229,0.614635}, + {-0.409415,-0.046581}, + {0.677428,-1.891076}, + {-0.988289,0.508962}, + {0.887530,-0.096640}, + {-1.348466,0.384365}, + {-1.031462,-0.619078}, + {-0.457756,1.980067}, + {-1.307319,-0.821311}, + {-0.428687,-1.927863}, + {0.126831,0.314297}, + {0.552891,0.191885}, + {1.303032,-1.178928}, + {-0.456697,0.537127}, + {-0.138564,0.139533}, + {-0.864216,-0.683295}, + {0.036298,-1.122012}, + {0.480571,-0.713238}, + {0.192623,-0.245657}, + {1.311303,-0.200987}, + {0.399964,-0.611107}, + {0.442759,1.073488}, + {-0.696011,-1.128391}, + {0.170959,-0.286343}, + {1.066110,-0.985228}, + {-0.541647,0.438916}, + {-0.441049,1.398625}, + {0.351268,-0.444252}, + {-0.100225,-0.353511}, + {-0.544437,0.471382}, + {0.719671,0.361168}, + {0.651644,0.499506}, + {0.854268,-0.138822}, + {-0.292998,-1.397932}, + {0.351302,0.565472}, + {-0.249761,-0.289783}, + {0.579986,1.135063}, + {0.380274,0.431460}, + {0.142501,-0.768253}, + {1.174364,-1.250559}, + {0.124183,-0.664356}, + {-1.775768,-0.426318}, + {-0.410384,1.397669}, + {-0.001185,0.082445}, + {0.683819,0.016434}, + {-0.474231,-1.274486}, + {-0.227899,-0.715442}, + {0.190972,-1.037010}, + {0.515506,1.060213}, + {0.574070,-0.057852}, + {0.794263,0.456543}, + {0.941117,0.348461}, + {0.714095,0.442504}, + {-1.016134,-0.621262}, + {1.501944,-0.164696}, + {0.859384,0.325223}, + {0.605958,-0.405522}, + {0.907773,-0.133478}, + {-0.652518,0.324279}, + {-0.223686,1.532219}, + {0.361665,0.114357}, + {0.118379,-1.485257}, + {0.306623,-1.663751}, + {-0.611527,0.305831}, + {-0.371509,0.148804}, + {-0.317648,0.168418}, + {-0.579078,-0.164959}, + {0.064958,1.214070}, + {-1.513764,-0.019390}, + {0.016424,2.001058}, + {-0.457485,-0.024951}, + {-0.847341,0.548593}, + {-0.839426,0.760265}, + {-0.698344,1.016456}, + {-0.246799,0.331351}, + {0.869786,-0.376963}, + {-0.318179,0.256495}, + {0.392127,-1.203653}, + {-0.120425,-0.077075}, + {1.005891,-0.597390}, + {0.055568,-0.619495}, + {0.760399,0.047681}, + {0.293058,0.480236}, + {0.295600,1.063913}, + {0.595203,0.121404}, + {0.681366,-0.184135}, + {1.298989,-0.786985}, + {-0.354303,0.275603}, + {0.255593,-0.140121}, + {1.054477,0.948719}, + {-0.798213,0.913454}, + {-0.582777,0.673212}, + {-1.973554,1.089905}, + {0.606828,-0.566130}, + {-0.539355,-1.199468}, + {0.086100,0.764955}, + {0.792542,-1.548656}, + {-0.533920,0.802166}, + {0.132591,-0.662338}, + {-0.061156,0.482952}, + {-0.104437,-0.056214}, + {-2.042381,0.317327}, + {-0.706828,0.899494}, + {-0.098682,0.865073}, + {0.231769,-0.480548}, + {-0.723515,-0.797806}, + {-0.333745,-0.255096}, + {1.425486,0.616569}, + {-0.223026,-0.286492}, + {0.945380,-0.819845}, + {-0.836305,0.433398}, + {0.888634,-0.227558}, + {-0.302648,-0.403994}, + {-0.266759,0.341454}, + {-0.911044,0.207652}, + {0.257598,0.267578}, + {-0.376137,-0.484206}, + {-0.106228,1.155262}, + {-0.547100,-1.021943}, + {-0.252786,0.099260}, + {0.089525,-0.008952}, + {-0.445924,0.184429}, + {0.141610,-0.548673}, + {-0.639422,-1.083761}, + {0.498910,0.621386}, + {0.093824,-0.107770}, + {-0.245646,0.217584}, + {-0.612243,-0.523719}, + {0.457347,0.364012}, + {-0.411336,-0.629464}, + {-0.092268,0.204563}, + {0.920493,-0.578667}, + {-0.869454,-0.238633}, + {-0.751389,0.777007}, + {0.580578,0.705056}, + {-1.233334,-1.695404}, + {-0.121305,0.368160}, + {0.782543,0.610795}, + {0.553925,1.300069}, + {1.374260,0.609157}, + {-1.357033,0.843414}, + {0.098626,-0.521365}, + {-0.032515,0.264753}, + {0.062218,0.085845}, + {0.138012,-1.084788}, + {-0.187827,1.380862}, + {0.263689,1.028871}, + {-1.215770,-0.552066}, + {-0.971891,-0.672402}, + {-0.256976,0.648996}, + {0.007809,-0.724976}, + {-1.053466,-0.103232}, + {0.957392,-1.526623}, + {0.387851,1.252142}, + {0.298416,-0.686813}, + {-0.249408,-0.417895}, + {-0.524619,-0.646987}, + {-0.101608,0.062621}, + {0.111389,-0.960781}, + {1.101285,0.205008}, + {-0.120747,-0.663793}, + {-0.602035,0.176470}, + {1.221108,0.961762}, + {0.159797,-0.161413}, + {-0.233941,0.806754}, + {1.256036,0.863057}, + {0.259618,0.549863}, + {0.320844,0.899846}, + {1.030547,-0.232090}, + {-0.517929,-0.918284}, + {0.680314,0.060717}, + {-0.505026,-1.527791}, + {0.162336,0.314724}, + {0.234991,-0.216314}, + {1.375132,0.094076}, + {-0.125705,-0.044844}, + {0.657598,0.128665}, + {0.281292,0.370853}, + {0.027894,-0.981212}, + {-0.732655,0.132501}, + {-0.338577,0.250010}, + {-1.883558,0.143130}, + {-1.095169,-0.539749}, + {0.166138,0.224390}, + {-1.094189,-0.104317}, + {-0.997375,-0.598321}, + {-0.535645,-0.686231}, + {1.289569,-0.268987}, + {0.998965,0.994487}, + {-0.349591,0.714244}, + {-0.457773,-1.093644}, + {-1.171475,1.478846}, + {0.523449,0.576947}, + {-0.610201,0.802389}, + {1.367942,-0.063770}, + {-1.189872,0.914725}, + {0.408213,0.132025}, + {-0.856124,-1.135856}, + {-0.347681,-0.706150}, + {0.226903,0.619634}, + {0.548890,0.651093}, + {-1.798606,-0.216122}, + {-0.220157,-0.282742}, + {0.108822,-0.485596}, + {-0.238309,-0.347750}, + {-0.476180,0.392785}, + {0.428713,-0.175999}, + {0.416074,-0.089752}, + {1.268016,-1.407373}, + {-0.322409,0.315716}, + {-0.086932,-0.954776}, + {-1.178527,1.119818}, + {0.873189,-0.405550}, + {-0.286794,-0.449645}, + {0.741120,-0.039714}, + {-0.401502,0.784565}, + {1.378832,0.131114}, + {-0.510286,-0.774428}, + {-0.241374,0.226729}, + {-0.413898,-0.710203}, + {-0.617347,-0.040064}, + {1.452338,-1.110283}, + {0.018838,-0.592385}, + {0.339572,-0.084802}, + {0.262142,1.120113}, + {0.382072,0.167998}, + {-0.273583,1.253093}, + {-0.509580,-0.586627}, + {-1.016938,0.501199}, + {0.530467,0.149760}, + {0.204492,0.038013}, + {0.074458,-0.292217}, + {0.257628,0.451130}, + {0.557490,-0.411723}, + {-0.181796,-0.641207}, + {-0.392248,-0.582808}, + {0.705525,-0.502120}, + {-1.021501,-0.207399}, + {-0.060821,0.298599}, + {-0.261969,-0.318225}, + {-0.350443,1.831054}, + {0.029182,0.719110}, + {-1.269295,-1.154099}, + {-1.488271,-1.469956}, + {0.176535,1.097410}, + {-1.195927,0.342358}, + {0.582184,0.396307}, + {-0.764560,-0.634440}, + {0.106084,-0.378503}, + {0.760363,0.649530}, + {-0.020356,-0.601389}, + {-0.423594,-0.651490}, + {0.600149,-0.395775}, + {0.421193,0.051504}, + {-1.364237,0.717686}, + {0.876530,-0.288772}, + {-0.098973,0.266692}, + {0.051789,0.462817}, + {0.361495,-0.346842}, + {-0.553109,0.940488}, + {-0.653951,0.277526}, + {0.163045,-0.244626}, + {-0.126776,-0.299731}, + {0.860475,0.302389}, + {0.606731,-0.425179}, + {0.305458,0.780583}, + {1.028347,-1.635167}, + {0.197608,1.209333}, + {0.150105,-0.773508}, + {-0.560487,-1.383294}, + {-0.657034,0.108016}, + {-0.629934,-0.335711}, + {-0.404889,0.112022}, + {0.350071,-0.125444}, + {-0.397430,-0.533393}, + {1.157015,-0.673598}, + {0.836126,-0.091404}, + {0.420003,0.030830}, + {0.304754,0.940964}, + {0.857632,-0.131707}, + {1.482902,-0.526416}, + {-0.506755,0.581483}, + {0.798173,-0.622550}, + {0.199645,0.054187}, + {-1.166797,-0.592686}, + {0.703425,-0.099088}, + {0.100574,-0.652021}, + {-0.452634,0.557510}, + {-0.395655,0.631259}, + {0.005128,-0.031089}, + {-0.476422,0.288975}, + {-0.696440,1.007601}, + {0.651351,0.229279}, + {-0.546184,0.967790}, + {-1.783408,0.458041}, + {-0.158492,0.721176}, + {-0.829438,-0.495769}, + {0.853862,-0.436152}, + {-0.510630,0.354021}, + {0.410283,-0.562993}, + {1.333456,0.619765}, + {0.680707,0.364967}, + {0.768117,0.202325}, + {-0.624035,0.194222}, + {-0.242982,-0.068768}, + {-0.060626,0.243812}, + {0.918857,0.010191}, + {-0.158575,-0.660882}, + {0.268070,-1.046163}, + {-0.550812,-0.916602}, + {0.222526,-1.326576}, + {-0.142632,1.771943}, + {-0.500111,0.366333}, + {0.045897,-0.931826}, + {0.061037,-0.398634}, + {-1.206603,1.049450}, + {-0.346603,0.009748}, + {-0.194651,-0.420179}, + {-0.172385,1.200766}, + {-0.276451,-1.221394}, + {-0.971227,0.736046}, + {0.849993,-0.122658}, + {0.565771,1.029030}, + {0.572575,-0.539519}, + {-0.278977,0.982730}, + {-0.406039,-0.534002}, + {-0.022104,-0.217645}, + {0.393789,-0.655764}, + {-0.821859,0.222043}, + {0.709829,-0.538537}, + {0.309091,1.335973}, + {0.555716,0.225149}, + {1.155433,-0.264109}, + {-0.224191,-0.004592}, + {-0.076549,0.928899}, + {0.141337,-0.500391}, + {-0.286491,0.403995}, + {0.340087,1.192301}, + {-0.264734,0.101794}, + {0.873252,-1.455120}, + {-0.574337,0.221889}, + {-1.110424,0.703227}, + {0.420803,0.333899}, + {0.277080,-0.644572}, + {-0.747538,0.159962}, + {0.552815,1.068068}, + {1.368512,0.010990}, + {-0.206001,-0.237472}, + {0.288503,-0.659436}, + {-0.954056,0.215502}, + {1.548500,-0.238286}, + {-0.889812,0.522877}, + {-0.012439,-0.723786}, + {-0.525273,-0.379121}, + {-0.527515,-1.502476}, + {0.133542,0.108887}, + {0.492447,-0.045511}, + {0.574807,-1.260810}, + {0.878001,0.683264}, + {-0.376682,-0.588180}, + {0.164608,0.358034}, + {0.459547,0.386397}, + {-1.374767,0.442204}, + {-0.699591,-0.427016}, + {-0.228447,-1.161662}, + {-0.322419,1.606881}, + {0.576055,1.101472}, + {0.563123,0.146375}, + {0.244216,-0.241690}, + {0.438112,-0.485327}, + {-1.276929,0.367200}, + {-0.181353,-1.346356}, + {-0.146869,-0.957341}, + {-2.198517,0.705247}, + {-0.289717,-0.177364}, + {0.280325,-1.142208}, + {0.002380,0.345383}, + {-0.418233,-1.133385}, + {0.183564,0.534520}, + {-0.372636,-0.051311}, + {-0.020811,-0.085884}, + {1.163894,-0.173220}, + {0.616165,0.230038}, + {-1.320575,-0.652613}, + {0.123778,-0.062176}, + {-0.722536,-0.008719}, + {1.340873,0.027244}, + {-0.294827,-0.522338}, + {-0.602427,0.183616}, + {-0.785766,-0.953680}, + {-0.286187,0.348720}, + {-0.280901,0.554931}, + {0.380116,0.763759}, + {0.780404,0.192032}, + {1.328343,1.436113}, + {-0.362877,0.085413}, + {1.403308,-0.413647}, + {0.773876,-0.086423}, + {-1.316530,-0.726207}, + {-0.379298,-0.390658}, + {-0.150301,0.006436}, + {0.370812,-0.684290}, + {-0.905463,-0.548246}, + {-0.072613,0.421906}, + {-0.211486,0.321136}, + {-0.247273,0.076461}, + {-1.160356,0.131643}, + {0.379819,-0.441965}, + {1.064987,0.033534}, + {-0.575692,-0.336300}, + {-0.131156,0.299834}, + {-0.907355,-0.562159}, + {-0.142894,-0.067061}, + {-0.305338,0.059685}, + {-0.890171,-0.918641}, + {-0.333344,0.104434}, + {0.450288,0.236190}, + {0.180918,-0.376193}, + {-0.816878,0.145535}, + {-0.789538,-1.143910}, + {-0.022631,0.224265}, + {-0.080696,0.591185}, + {-0.511739,0.521540}, + {1.522040,-1.191704}, + {-0.120255,0.225194}, + {-0.124457,0.484338}, + {-0.332395,0.668069}, + {1.358569,0.343165}, + {-0.907961,0.303291}, + {-0.726165,0.958101}, + {-0.631030,-0.969657}, + {0.187222,-0.841928}, + {-1.702365,-0.218011}, + {0.042628,-1.318380}, + {0.356098,0.394505}, + {-0.321503,-0.176962}, + {-1.508798,0.471924}, + {0.284711,-0.884522}, + {-0.279981,1.075346}, + {0.261212,0.062374}, + {0.730161,-0.028577}, + {1.413322,-0.696512}, + {-0.537404,-0.498826}, + {0.470840,-0.050515}, + {1.075743,1.816796}, + {0.238969,0.728689}, + {0.021923,-0.203939}, + {0.068466,0.691633}, + {-0.463844,0.382524}, + {0.536354,1.367231}, + {-0.269568,0.317660}, + {-0.509721,-0.056128}, + {-0.996035,0.482343}, + {-0.318504,0.613621}, + {0.724407,-0.391671}, + {-0.976483,0.002770}, + {0.168754,-0.138651}, + {-0.850412,0.004662}, + {-0.778271,0.301141}, + {-0.556300,-0.014048}, + {-0.144566,0.581755}, + {1.567425,-1.299013}, + {-0.633055,-1.176258}, + {-1.218887,1.088643}, + {-0.057700,0.210952}, + {-0.252005,-0.056308}, + {-0.164041,1.200916}, + {0.881096,-0.523409}, + {1.271002,0.348902}, + {0.300212,0.080781}, + {-1.259126,-0.385348}, + {0.380261,-0.005380}, + {0.301990,-0.096667}, + {-0.644417,0.661865}, + {0.031295,-0.414362}, + {0.513909,-0.849192}, + {1.037724,0.167813}, + {0.045507,0.302800}, + {-1.007752,-0.631584}, + {-1.626240,0.520166}, + {0.161739,-0.005463}, + {-1.011094,-0.296322}, + {0.530863,-0.353709}, + {0.919905,-1.215387}, + {-0.399307,0.348172}, + {0.124302,-0.831545}, + {-1.101106,0.209511}, + {0.423896,0.392179}, + {-0.194011,-0.630735}, + {-0.500591,0.215709}, + {0.031183,0.910928}, + {0.038389,-0.311259}, + {-0.355431,-1.334079}, + {0.530912,-0.294080}, + {-0.716034,-1.092596}, + {0.581166,0.307768}, + {0.499546,-1.691484}, + {-0.109812,-0.243400}, + {0.044216,0.158567}, + {-1.588308,-0.037482}, + {0.222448,-1.635453}, + {-0.184406,-0.084681}, + {1.961808,0.936940}, + {0.545590,0.745191}, + {0.655076,0.761226}, + {0.928499,-0.528748}, + {0.311753,0.419596}, + {1.127516,0.514393}, + {-1.142233,-1.018180}, + {-0.751043,0.873569}, + {-0.003552,-0.256010}, + {-0.055468,-0.040296}, + {-0.461006,0.063426}, + {0.114477,1.054606}, + {0.646237,-0.738074}, + {0.047691,0.563215}, + {0.182860,-0.736483}, + {1.006184,-0.743762}, + {0.208249,1.194100}, + {-0.936638,-0.678655}, + {1.379611,-1.003314}, + {-0.214213,0.683884}, + {-0.412822,0.050631}, + {0.206172,-0.486222}, + {-0.262572,0.662397}, + {0.484827,0.903902}, + {1.340717,0.828282}, + {0.376723,-0.394673}, + {0.947224,0.377674}, + {-1.479304,-0.488522}, + {-0.346264,-1.112863}, + {0.079983,-0.757019}, + {-0.589024,-0.865351}, + {0.154858,0.742523}, + {-0.185417,-1.110911}, + {0.054021,0.213561}, + {0.049129,0.159524}, + {0.250903,1.427318}, + {-1.002452,-1.002884}, + {-0.706890,0.148861}, + {-1.154288,-0.107721}, + {-0.817221,0.436977}, + {-0.157997,-0.870204}, + {1.385451,-1.059729}, + {-0.802317,0.030557}, + {0.536617,-0.377124}, + {-0.267416,1.257724}, + {0.271600,-0.064099}, + {-0.293484,0.280734}, + {-0.139114,-0.129475}, + {0.480314,-0.765081}, + {0.342935,-0.322883}, + {0.036162,-0.632071}, + {0.182499,0.303409}, + {0.388280,-0.850579}, + {-0.118716,0.915001}, + {-0.755100,-0.436041}, + {-0.860414,0.326513}, + {-0.078845,0.146499}, + {-0.454604,0.719797}, + {-2.241604,0.049962}, + {-1.192389,1.327719}, + {0.375567,1.037999}, + {0.689446,-0.703830}, + {0.302199,-0.655993}, + {-0.087239,0.488734}, + {0.211377,0.892874}, + {-1.046074,-0.479046}, + {-1.018003,0.367627}, + {-0.152274,1.650427}, + {-0.779947,1.239985}, + {0.952925,0.318968}, + {0.643531,0.231822}, + {-0.469200,-0.137811}, + {0.818526,-0.988439}, + {0.143608,-0.391619}, + {-0.078638,-0.494635}, + {-0.706101,-0.278646}, + {-0.828922,0.806409}, + {-0.198227,0.585023}, + {-0.181743,-0.538596}, + {0.696894,0.324933}, + {-1.035302,-0.067149}, + {1.116654,-0.636352}, + {-1.447442,-0.383901}, + {-0.842335,0.808594}, + {-0.059386,-1.333912}, + {0.039588,-0.568428}, + {1.841497,0.186063}, + {-0.222182,0.546696}, + {-0.492511,0.065429}, + {-0.049596,0.521704}, + {0.950219,0.001244}, + {0.239031,0.821970}, + {-0.148545,-0.111477}, + {-0.799855,0.719260}, + {-0.198976,-0.598787}, + {1.057029,-0.080555}, + {-0.042454,0.198415}, + {-0.396442,0.128443}, + {0.356674,0.917567}, + {0.629624,-0.252468}, + {0.494230,0.346046}, + {-0.203429,0.238311}, + {-1.254628,-0.489511}, + {-0.885587,1.273245}, + {0.130810,-0.161627}, + {0.060963,-0.761843}, + {-0.216955,-1.087269}, + {0.365978,0.094954}, + {0.912409,0.200455}, + {-1.054822,-0.278074}, + {0.608031,0.908329}, + {0.311314,-0.062994}, + {-1.084923,-0.437044}, + {0.483123,0.692619}, + {0.487429,0.109963}, + {-0.553350,0.131579}, + {-0.992250,0.280366}, + {-0.884746,0.002868}, + {-0.029371,1.412446}, + {0.678184,0.364567}, + {-0.139078,-0.387712}, + {-0.347524,1.175467}, + {-1.183990,-0.650822}, + {1.246393,-1.035660}, + {-0.296366,0.060319}, + {-1.583348,0.761657}, + {-0.150878,0.717756}, + {-0.539900,0.032499}, + {0.538042,-0.765398}, + {0.608876,-0.599854}, + {0.351878,-0.018209}, + {-0.963879,0.867025}, + {-0.746801,0.240322}, + {-0.264184,-0.061670}, + {0.684332,0.011746}, + {1.440898,-0.176096}, + {0.229892,-1.161869}, + {0.056788,-0.657892}, + {-0.700251,-0.949597}, + {-0.678207,-1.371336}, + {0.610739,0.719252}, + {-1.817905,-0.601268}, + {0.031990,0.180419}, + {0.060516,0.204577}, + {-0.679842,1.491688}, + {0.905999,-1.561989}, + {-0.013397,-0.658106}, + {0.646469,-0.124247}, + {0.231365,-0.066460}, + {0.072911,1.358672}, + {0.523387,0.767592}, + {-0.255464,-0.837687}, + {-0.347596,0.065474}, + {-0.118698,0.282555}, + {0.227003,-0.532110}, + {-0.105316,1.261845}, + {-1.287464,0.009365}, + {0.164639,0.004452}, + {0.487845,-0.036515}, + {0.237642,-0.113136}, + {0.280221,-0.370952}, + {-0.693740,-0.547488}, + {-0.026475,-1.513071}, + {0.562730,-0.294865}, + {-0.407170,-0.821101}, + {-0.007381,-0.255046}, + {-0.882883,0.044493}, + {0.458046,-0.236675}, + {-0.280611,0.402649}, + {0.655407,0.081470}, + {-0.583163,0.689875}, + {-0.126923,-0.141713}, + {0.568498,-0.192502}, + {0.207786,-0.707445}, + {0.181237,-0.315024}, + {0.452277,-0.237819}, + {0.804749,0.161488}, + {-0.668502,-0.165804}, + {-0.995984,-0.756193}, + {-1.477199,0.138328}, + {0.224779,0.153369}, + {0.714115,-0.105414}, + {0.755752,-1.157271}, + {-0.624159,0.288454}, + {0.410050,-0.940682}, + {-0.735226,0.333144}, + {-0.319454,-0.151368}, + {-0.534119,0.581015}, + {-1.021982,0.025073}, + {0.364749,-0.324409}, + {-0.809700,-0.013999}, + {-0.631631,-1.111146}, + {0.041314,-0.401087}, + {0.694871,0.735264}, + {-0.367532,-1.564337}, + {-0.580821,-0.330655}, + {0.183537,0.598051}, + {-0.245114,-0.399095}, + {0.431852,-0.491440}, + {-1.538842,0.741551}, + {0.355387,-0.411799}, + {0.047607,-1.484812}, + {-0.406563,-0.099734}, + {-0.476070,-0.974793}, + {0.424268,-0.049799}, + {-0.463479,0.342533}, + {-0.021704,-0.441977}, + {0.274849,0.092550}, + {0.062134,0.876438}, + {0.724167,-0.072370}, + {-0.878909,0.087750}, + {0.496256,-0.162627}, + {0.279006,0.247471}, + {1.112257,-0.008240}, + {-0.542958,1.121075}, + {0.883658,-1.033522}, + {0.665774,1.218471}, + {-0.485500,0.566506}, + {0.101171,-0.467048}, + {0.428733,0.037372}, + {0.070215,0.356568}, + {-0.115995,0.469828}, + {-0.288060,0.751706}, + {-0.893341,-0.479910}, + {0.129788,-0.712225}, + {0.607605,-0.659464}, + {-0.928870,0.184671}, + {1.532564,0.622921}, + {-0.259213,0.773723}, + {-0.613180,1.165169}, + {-0.246855,0.477170}, + {-0.763396,0.185209}, + {0.176437,-0.026025}, + {0.238849,0.442184}, + {-0.352254,-0.531682}, + {0.807799,-0.627800}, + {0.047221,0.691612}, + {-1.063426,-0.086542}, + {0.127711,-0.873769}, + {-0.266249,-0.401636}, + {-0.792988,0.561747}, + {1.359199,0.175116}, + {0.055027,0.221748}, + {-0.811887,0.783136}, + {-0.242847,1.170197}, + {0.603982,-0.386618}, + {-0.066028,-0.887924}, + {0.195072,-0.461362}, + {-0.124588,-1.349309}, + {-0.923671,0.021243}, + {0.672608,0.390882}, + {-0.157503,0.476204}, + {0.395069,1.581050}, + {0.546212,0.493126}, + {-0.275470,-0.171620}, + {0.279435,0.010272}, + {0.398665,-0.060216}, + {-0.540549,-0.545716}, + {-0.203679,0.332363}, + {-0.496097,-0.577372}, + {0.580802,0.437667}, + {1.112826,-0.947356}, + {-0.740122,-1.666636}, + {0.794783,-1.131704}, + {-0.942124,-0.854277}, + {-0.673412,0.214855}, + {-0.147656,0.291988}, + {-0.104863,0.388239}, + {0.076779,0.606955}, + {0.200388,0.524721}, + {-0.320980,0.897459}, + {0.075462,0.168864}, + {1.058383,-0.217411}, + {-0.257135,-0.135694}, + {-0.967934,-0.164808}, + {-0.923465,1.535662}, + {-0.342228,0.493143}, + {0.950437,0.330328}, + {1.159788,0.029407}, + {0.519360,-0.289634}, + {-0.387919,0.756822}, + {0.110258,-0.324655}, + {-0.834385,0.057787}, + {0.385197,0.770062}, + {-0.865068,-0.695108}, + {-0.163616,0.499126}, + {-0.260925,0.174936}, + {0.269825,-0.563868}, + {0.085977,0.711242}, + {-0.154136,-0.310298}, + {0.667896,0.312458}, + {0.455000,0.511352}, + {-0.119230,0.565919}, + {0.448509,-0.266193}, + {-0.076594,0.711581}, + {0.487758,-0.084284}, + {-0.134384,0.512608}, + {-0.073188,-1.588799}, + {0.263813,-1.537716}, + {-0.318161,0.668523}, + {0.716481,1.034983}, + {0.100407,0.603227}, + {1.278314,0.725134}, + {-1.102419,-0.668425}, + {-1.533689,-0.122580}, + {-0.015321,-0.363228}, + {-0.354993,-0.049059}, + {0.234433,-0.176360}, + {1.531154,1.445120}, + {0.196174,-0.704589}, + {0.939701,0.188199}, + {-0.883210,-0.154533}, + {0.533736,1.018771}, + {1.025444,-0.745913}, + {-0.224936,0.074982}, + {-0.445386,-0.861890}, + {0.037407,-0.227981}, + {-0.186347,-1.290577}, + {-0.309371,0.403374}, + {-0.532396,0.613887}, + {2.165530,1.358975}, + {2.007988,-0.415721}, + {1.170118,1.184736}, + {0.147671,0.285319}, + {0.189048,-1.372490}, + {0.572345,-0.160934}, + {-0.968055,0.078689}, + {-0.838057,0.005487}, + {0.002971,0.754035}, + {0.963936,-1.052451}, + {1.384693,-0.238220}, + {0.730919,-0.253514}, + {-0.055962,-1.239576}, + {-0.971576,0.081729}, + {1.592811,0.554873}, + {0.891373,-1.465274}, + {-0.436801,0.681487}, + {0.781594,-0.567997}, + {-0.734441,-0.356614}, + {-0.417233,0.307766}, + {-0.342015,-0.643618}, + {-0.292766,-0.377798}, + {0.524786,0.511648}, + {-0.581227,1.232650}, + {-0.014453,0.621820}, + {0.249726,0.375897}, + {0.606730,-0.436103}, + {0.470665,1.092492}, + {0.049061,0.242758}, + {0.356517,0.602295}, + {-0.136680,-0.171375}, + {0.138788,0.924838}, + {1.014005,-0.233081}, + {-1.201889,0.445990}, + {1.026871,-0.586108}, + {0.489435,1.106440}, + {-0.647070,0.966539}, + {0.412053,0.403891}, + {1.508765,0.651857}, + {0.967302,0.360629}, + {0.643439,0.542859}, + {0.009643,0.167438}, + {-0.043095,-0.479629}, + {-0.427617,-0.891696}, + {0.262743,0.496652}, + {0.399848,0.055136}, + {0.389352,-0.140837}, + {-0.874961,-0.286650}, + {-1.148781,0.964809}, + {-0.075158,-1.058411}, + {-1.356972,0.477178}, + {-0.583056,0.785091}, + {0.180521,0.643195}, + {-0.341790,0.582116}, + {0.617637,-0.386019}, + {0.287523,-0.641069}, + {0.445544,-1.046088}, + {0.056885,0.909019}, + {0.237974,-0.577966}, + {0.265120,0.170968}, + {0.831315,0.261175}, + {-0.053478,0.750541}, + {-0.910915,0.305149}, + {0.740491,0.199702}, + {-0.644430,0.804073}, + {-0.032674,0.043810}, + {0.506929,0.722204}, + {-1.458642,-0.012285}, + {1.125423,-0.870600}, + {-0.413975,-1.013859}, + {0.263494,-0.250882}, + {-0.509992,0.642512}, + {0.309917,0.102069}, + {0.432682,-0.594946}, + {0.389074,-0.347972}, + {0.363322,0.447382}, + {0.409466,0.684147}, + {-0.383569,1.103528}, + {0.400605,1.027698}, + {-0.244181,-1.174979}, + {-0.138094,-0.035489}, + {-0.732504,-1.119719}, + {0.401623,-0.226204}, + {-0.009444,-0.493273}, + {-0.623539,0.052497}, + {-0.082322,0.624134}, + {-0.241276,0.692779}, + {-0.855399,-0.954111}, + {-0.102812,0.455049}, + {-0.163148,-0.813131}, + {0.632547,-0.140929}, + {0.494530,-0.185368}, + {-0.193079,-0.723176}, + {0.337338,-0.445788}, + {0.401790,0.559695}, + {0.230591,-0.192288}, + {-0.300693,-0.121974}, + {1.384646,-0.585677}, + {0.325791,-0.040454}, + {-0.012575,0.226125}, + {-1.008117,-1.345584}, + {-0.253066,-0.722583}, + {0.510556,-1.634320}, + {-0.620574,0.638105}, + {0.744498,-0.848184}, + {-0.604678,0.294828}, + {0.576435,-0.241527}, + {-0.209046,1.633283}, + {-0.037161,-0.383274}, + {-0.522555,-0.336960}, + {0.454551,0.473618}, + {-0.155145,-0.383863}, + {0.691671,0.364433}, + {0.110858,-0.308247}, + {0.291931,-0.200529}, + {-0.257731,-0.294773}, + {-0.297832,-0.078972}, + {-1.000551,-0.056650}, + {-0.728054,1.617977}, + {0.683715,-0.328680}, + {-0.000525,0.011541}, + {0.620598,-0.661930}, + {0.264711,-0.928142}, + {0.228987,-0.335306}, + {-0.244599,-0.068855}, + {-0.836542,-0.817358}, + {0.092673,0.460987}, + {-1.129502,-0.114615}, + {-0.632434,0.515582}, + {0.031820,0.686984}, + {0.770886,-0.492505}, + {-0.596480,1.289307}, + {-0.101952,-0.691478}, + {-0.104274,-0.131200}, + {-0.625558,-1.086399}, + {0.877969,-0.772245}, + {0.268059,-0.223637}, + {-0.900697,1.204608}, + {0.050722,0.907601}, + {0.673273,0.381280}, + {-2.047377,-0.460464}, + {-0.180485,0.585813}, + {0.917693,-0.593887}, + {-0.800537,0.647290}, + {-0.440595,0.183335}, + {-0.713969,-0.073229}, + {-0.774967,-0.149180}, + {0.404131,0.588253}, + {-0.461998,-0.696968}, + {0.274178,-0.357117}, + {0.206730,0.108627}, + {-1.064527,-0.450529}, + {0.868135,-0.511465}, + {1.861500,-0.019361}, + {-0.168042,0.157278}, + {-0.306666,-0.372632}, + {-0.358648,0.439013}, + {-0.508541,0.110548}, + {0.429907,0.318529}, + {0.768140,0.536835}, + {-0.468226,-0.061801}, + {-0.479689,-0.447397}, + {1.419374,-0.900772}, + {1.265393,-0.725799}, + {-1.446047,0.967326}, + {-1.003305,-0.450572}, + {-0.765069,-0.367291}, + {0.058085,0.520892}, + {0.507400,0.307971}, + {-0.096135,0.082836}, + {0.499087,-0.483651}, + {0.786245,-0.896910}, + {-0.776823,-0.917120}, + {0.046113,-0.674221}, + {0.437166,-0.946565}, + {-0.481481,0.348660}, + {-0.303571,-1.297511}, + {0.184266,-0.433271}, + {0.351287,0.490834}, + {0.136868,0.207400}, + {-0.928643,-0.705652}, + {0.411477,-0.296834}, + {-0.130098,0.423371}, + {0.256138,0.201198}, + {1.325804,-1.394897}, + {-0.987536,0.911194}, + {0.467954,0.721556}, + {-1.111917,-0.388390}, + {-0.225829,-0.194731}, + {0.686892,0.002306}, + {0.017090,-0.337756}, + {0.320620,0.701407}, + {-0.126604,-0.448189}, + {-1.038320,0.350680}, + {0.525033,-0.775856}, + {1.423413,-0.907011}, + {-0.654169,1.310124}, + {-0.256723,-1.274182}, + {-0.148799,1.158405}, + {-1.309938,-0.423753}, + {-0.822022,0.520373}, + {-0.487639,-0.029609}, + {-1.731135,1.225201}, + {0.860007,0.817290}, + {1.085528,-0.477385}, + {0.170410,0.225994}, + {0.130012,0.501964}, + {1.362920,-1.040532}, + {0.274595,-0.360680}, + {-0.180443,-1.150807}, + {-1.010892,-2.785690}, + {-0.185408,0.645141}, + {0.408186,0.598987}, + {-0.276912,-0.233762}, + {-0.554369,0.384061}, + {-0.313129,-1.273413}, + {-0.295076,-0.206805}, + {-1.135422,0.314641}, + {-0.091967,1.316718}, + {-1.148036,0.420483}, + {0.464056,0.070829}, + {0.643956,-1.132460}, + {0.007388,-0.087534}, + {-0.670980,-0.644856}, + {-0.562657,0.103308}, + {-0.910544,-0.624181}, + {-1.294871,-0.704342}, + {0.253288,-1.249465}, + {0.010697,-0.206204}, + {0.032296,-0.068846}, + {0.227298,0.289679}, + {-1.018986,0.376146}, + {0.196228,0.336658}, + {0.324491,0.481509}, + {1.401432,-1.385349}, + {0.469776,-0.021242}, + {-0.359218,0.077900}, + {0.263855,-0.553276}, + {-1.338136,1.760596}, + {0.345680,-0.356526}, + {0.967508,-0.348957}, + {-0.000197,-0.317256}, + {0.266182,0.209979}, + {0.645966,-0.065156}, + {0.095471,0.687960}, + {-0.950904,0.472007}, + {0.237504,1.029535}, + {-1.188493,0.582823}, + {0.037901,0.276498}, + {1.500981,0.033858}, + {0.470859,0.204791}, + {-0.325697,-0.511828}, + {-0.701164,-0.624759}, + {-1.022831,0.029449}, + {-0.617654,-0.209681}, + {-1.086358,-0.753587}, + {-0.620495,0.350436}, + {0.255824,0.780289}, + {0.259997,0.853987}, + {0.178984,0.708660}, + {0.206355,0.342937}, + {-0.203803,0.123989}, + {0.087570,-0.018768}, + {-0.251778,0.402282}, + {-0.067944,0.802752}, + {0.814430,-1.075422}, + {0.980073,0.924960}, + {-0.643462,0.281085}, + {-0.043385,0.222169}, + {0.150379,-0.073680}, + {-0.866595,-0.370094}, + {0.070700,-0.031495}, + {-0.718160,-0.057721}, + {-1.453375,0.891355}, + {0.289324,0.775060}, + {0.181655,0.483275}, + {-0.752997,-0.073676}, + {-0.304538,-1.541777}, + {-0.709192,0.581410}, + {0.492839,-0.517246}, + {0.183811,-0.156000}, + {0.653373,0.230724}, + {0.406458,0.005703}, + {-0.311049,0.812297}, + {-0.520574,0.204449}, + {0.054290,-0.724717}, + {0.094583,-0.073227}, + {0.038531,1.556567}, + {-0.384123,-0.654494}, + {0.561946,-0.464299}, + {-0.404523,-0.766166}, + {-0.481575,0.460856}, + {-1.907571,-0.823209}, + {2.101905,0.161585}, + {0.287454,-0.132443}, + {1.242270,0.686925}, + {-0.921165,-0.565261}, + {0.611637,0.513699}, + {0.049954,-1.129081}, + {-0.501940,0.054891}, + {1.429713,-0.551187}, + {-0.836163,-0.446508}, + {0.278495,0.087073}, + {0.218168,-0.779450}, + {-0.223319,-0.407988}, + {0.634553,-0.616996}, + {1.182395,0.959111}, + {-0.978832,0.211972}, + {0.424967,-0.249287}, + {-0.041136,-0.865872}, + {0.678616,0.138109}, + {-0.183760,0.626009}, + {0.774335,0.071065}, + {-0.711756,0.994632}, + {-1.071178,-0.459611}, + {-0.483535,0.070145}, + {-1.195615,0.843780}, + {-0.466068,-0.769168}, + {-0.277629,-1.090422}, + {0.421671,-0.180614}, + {0.412349,0.215483}, + {0.770770,-1.211197}, + {0.216869,-1.257316}, + {1.131962,1.071910}, + {0.604317,1.569760}, + {-0.432696,-0.511691}, + {1.490919,0.544307}, + {0.722433,-0.223854}, + {-0.747281,0.587934}, + {0.591043,-0.389259}, + {0.915617,0.907123}, + {-0.090304,0.260222}, + {-0.286085,0.181432}, + {-1.366335,0.134996}, + {1.006915,-0.256088}, + {-0.742269,-0.287000}, + {-0.560519,0.149843}, + {0.228870,-0.089042}, + {0.485062,1.555019}, + {-2.098179,-1.037507}, + {0.281221,0.160181}, + {1.124136,0.576409}, + {0.377565,0.179290}, + {-0.774858,-0.594426}, + {0.057609,0.773926}, + {-0.352908,0.659389}, + {-0.214422,-0.486733}, + {1.185269,-0.773319}, + {2.361595,0.580060}, + {-0.480781,0.323322}, + {-0.280537,0.592566}, + {-0.518135,1.090907}, + {0.038454,-0.673850}, + {-0.396300,0.291648}, + {0.431237,-0.742958}, + {-0.354511,-0.258468}, + {0.589504,-0.340787}, + {0.350439,0.872189}, + {0.434521,0.321774}, + {-0.033107,0.105060}, + {0.708078,-0.753049}, + {0.529888,-0.271240}, + {0.536421,-1.059462}, + {-0.225809,-0.688310}, + {1.434065,0.509015}, + {-0.173576,0.479379}, + {-1.128043,-1.200555}, + {-0.400962,0.006900}, + {-0.193926,0.797977}, + {0.890121,-0.520395}, + {0.483454,-0.759030}, + {0.120016,0.881875}, + {-0.600343,-0.651720}, + {-1.451600,-1.029965}, + {0.761142,0.319997}, + {-0.112053,-1.155185}, + {1.220439,1.751782}, + {1.160185,0.688299}, + {-0.512242,-0.051162}, + {-0.706967,-0.136270}, + {0.615304,1.293581}, + {-1.400761,0.916505}, + {1.187036,0.351908}, + {0.080335,-1.965701}, + {-1.630052,0.439980}, + {-1.391160,0.129870}, + {1.155798,0.582881}, + {-0.065111,-1.099486}, + {0.125533,-0.003002}, + {-0.164680,0.102916}, + {0.466728,0.343552}, + {0.762902,0.475304}, + {0.744999,-0.654491}, + {-1.398257,0.311517}, + {-0.237558,-0.246793}, + {0.428761,0.156024}, + {0.570756,0.535184}, + {2.016382,-0.060246}, + {-1.088301,0.681331}, + {0.830869,-0.097576}, + {0.388942,1.207765}, + {-0.606217,-0.034154}, + {-0.231597,-0.930088}, + {-1.380885,-0.946200}, + {1.243384,-0.076184}, + {-0.876585,1.046718}, + {0.966272,0.210433}, + {-0.291174,0.271509}, + {0.211819,0.974055}, + {-0.463701,-0.565772}, + {0.487341,-0.602470}, + {-1.121183,-0.165544}, + {-0.252906,0.474726}, + {-0.402199,0.851284}, + {0.080496,-0.760036}, + {0.025413,-1.091766}, + {0.547332,-0.330242}, + {-0.672557,0.494495}, + {0.954815,-0.310860}, + {0.424952,0.387591}, + {-0.206481,-1.215096}, + {-0.565978,0.308471}, + {-0.594998,0.287291}, + {0.244841,-1.011218}, + {-0.121897,-0.182509}, + {0.436936,-0.388815}, + {-0.237612,0.125997}, + {0.469551,0.559430}, + {-0.150812,0.430465}, + {-0.309672,-0.159915}, + {-0.041266,-0.484249}, + {-0.498416,0.134495}, + {-0.216836,-0.600673}, + {0.753550,0.178144}, + {-0.829567,0.580848}, + {0.151586,0.985193}, + {-0.030831,0.835093}, + {-1.336242,-0.274785}, + {0.877728,0.795873}, + {-1.272274,-0.088021}, + {0.329721,0.397562}, + {0.284857,-0.480608}, + {0.682917,0.080741}, + {-0.101889,-0.248454}, + {-0.682076,1.494906}, + {0.629653,0.954928}, + {-0.543290,1.090091}, + {1.459454,0.219865}, + {0.242040,-0.001250}, + {1.335699,-0.279217}, + {-0.929197,-0.177255}, + {-1.073987,-0.628953}, + {-0.603636,0.406831}, + {-0.127502,-0.233138}, + {-0.595331,-1.556322}, + {-0.003979,-0.372901}, + {-0.071019,0.395963}, + {0.367574,-1.213747}, + {-0.334848,-0.212891}, + {0.545672,0.431015}, + {-0.319922,-1.488089}, + {1.622107,-0.160144}, + {-0.443496,-0.342474}, + {-0.182690,0.814460}, + {0.294580,0.439232}, + {-0.456404,-0.781690}, + {-0.239482,0.065164}, + {0.522642,0.114414}, + {0.220545,0.027521}, + {0.928442,-0.357315}, + {-0.037976,0.045284}, + {0.271085,-0.280372}, + {1.126150,-0.692677}, + {0.605778,-0.288038}, + {-0.839818,0.853392}, + {-0.017924,-0.218859}, + {0.193144,0.838310}, + {0.382364,-0.079117}, + {-1.218131,-1.625995}, + {0.587757,-0.067836}, + {1.112485,-0.821042}, + {-1.079681,1.113467}, + {0.739449,0.903260}, + {-0.337197,-0.539171}, + {-0.715782,0.433698}, + {-0.681131,-1.078419}, + {-0.399622,-0.481035}, + {0.985279,0.921888}, + {-0.886267,-0.759144}, + {0.477293,-0.151442}, + {-0.382453,-0.131280}, + {-0.996212,-0.422600}, + {0.704734,0.607694}, + {0.134826,0.350086}, + {-0.256879,0.214261}, + {-0.492210,-1.268288}, + {0.269138,1.401154}, + {-0.717996,0.256866}, + {0.058280,-0.897792}, + {0.335278,-0.190030}, + {-0.247184,-0.605186}, + {0.020146,0.328500}, + {-1.189915,0.129145}, + {0.215961,1.303383}, + {0.478757,0.180930}, + {-0.299342,-0.948503}, + {-1.146943,0.060521}, + {-0.868843,-1.063643}, + {0.923269,-0.045103}, + {-0.878523,1.072741}, + {0.151682,-0.385870}, + {1.248675,0.859689}, + {0.583381,-0.622081}, + {-0.427717,-0.653473}, + {0.114755,1.122795}, + {0.715533,-1.419478}, + {-0.653173,-0.975489}, + {0.388866,-0.494883}, + {0.991641,-1.615541}, + {1.623819,-0.756583}, + {-0.477507,-0.049437}, + {-0.921536,-0.203534}, + {0.524950,-1.209924}, + {0.015214,0.484588}, + {-0.744276,-0.907266}, + {-0.256785,0.726990}, + {-0.989783,0.236785}, + {-0.927026,0.190489}, + {-1.224202,0.044595}, + {0.695077,-0.066990}, + {0.118911,0.317058}, + {0.216068,0.148307}, + {0.147362,0.344791}, + {-0.335603,0.447019}, + {-1.224890,-0.325840}, + {0.002756,-0.321191}, + {-0.160248,1.419446}, + {1.272372,-0.411115}, + {0.090553,-0.020891}, + {-0.813158,0.552475}, + {-1.298817,0.862553}, + {-0.585694,1.251896}, + {-0.013283,-0.413138}, + {-0.297463,-0.903216}, + {-0.255549,1.091331}, + {-0.206760,0.800369}, + {-0.390704,0.606333}, + {0.513017,-1.429631}, + {0.433862,2.005801}, + {-0.383853,-0.598873}, + {1.005859,0.614970}, + {0.851717,0.475903}, + {0.326298,0.574711}, + {-0.558315,0.661107}, + {0.524201,0.697230}, + {0.354126,-1.373313}, + {-0.935029,0.948730}, + {-0.134743,0.135532}, + {0.276808,1.185467}, + {0.018978,0.217541}, + {-0.112404,1.728553}, + {-1.302444,0.146517}, + {0.311354,-0.511768}, + {-0.162418,1.170043}, + {1.221405,-0.185509}, + {0.187501,-0.388756}, + {-0.992425,0.895706}, + {0.010906,-0.436499}, + {-1.151269,-0.978387}, + {0.331651,2.365055}, + {-0.261792,-0.105662}, + {-0.015082,-1.027851}, + {-0.566662,-0.066912}, + {0.333652,0.030599}, + {-0.580868,1.197625}, + {-0.698983,-0.072313}, + {-0.336455,0.586318}, + {-0.460653,-1.130129}, + {1.129557,-0.342097}, + {0.675431,-0.111390}, + {0.656948,-1.198251}, + {0.124118,0.471617}, + {0.873740,-0.661021}, + {0.883188,-0.120431}, + {-0.231922,0.823063}, + {-0.037173,0.803393}, + {0.249852,-0.697130}, + {-0.608230,0.681932}, + {-0.243067,-0.598592}, + {1.280129,0.144530}, + {0.335054,-0.507225}, + {-0.148178,0.471538}, + {-1.320556,0.648198}, + {0.793534,0.184092}, + {0.175364,0.260736}, + {-0.345658,-1.638374}, + {-0.954853,0.361345}, + {-0.439794,-0.209984}, + {-0.580261,-0.437008}, + {-0.042380,-1.008410}, + {-0.256240,0.240739}, + {0.997668,0.041341}, + {0.084286,1.337007}, + {-0.089726,0.349824}, + {-0.351226,-0.439389}, + {0.789935,-0.231385}, + {0.559332,0.372916}, + {0.431332,-0.309163}, + {0.438769,0.729816}, + {-0.709308,-0.453381}, + {-0.806887,0.031475}, + {-0.109243,0.296421}, + {1.053895,-0.808360}, + {1.310377,-0.018203}, + {-0.088228,0.464224}, + {0.404860,1.091152}, + {0.980650,-0.822832}, + {-0.182331,0.154915}, + {-0.416259,0.293648}, + {-1.202575,0.608544}, + {-0.939778,0.311341}, + {0.362085,-0.732201}, + {0.318978,-0.637671}, + {-0.485214,0.461226}, + {-0.302925,-0.728450}, + {0.411979,-0.138660}, + {-0.429297,-0.510534}, + {-1.260831,-0.795375}, + {0.852526,-0.602336}, + {-0.795936,0.503556}, + {-1.379397,-0.490658}, + {0.325956,-1.584800}, + {-0.223558,0.569081}, + {0.081155,0.347926}, + {-0.295295,0.593889}, + {1.147863,0.678079}, + {0.666420,0.268891}, + {0.335919,-0.387414}, + {1.884109,-0.565796}, + {-1.155022,-0.181474}, + {-0.083694,0.434470}, + {-0.431032,-0.709799}, + {0.867853,-0.661146}, + {1.308108,-0.705654}, + {0.441709,0.237870}, + {0.906238,0.160666}, + {0.263269,-0.911975}, + {1.316673,0.073375}, + {0.495316,0.359938}, + {-0.137338,-0.098128}, + {1.551014,-0.986343}, + {0.852076,-0.721691}, + {0.453226,0.292144}, + {1.095678,-0.511793}, + {-0.038954,1.062364}, + {0.808936,-0.562206}, + {-0.290931,-0.645168}, + {0.256794,0.145837}, + {-0.849594,0.501363}, + {0.383039,-0.725827}, + {0.191017,0.987863}, + {-0.260132,0.407206}, + {0.386396,-1.059209}, + {-0.377412,-0.745123}, + {-0.291906,-0.531367}, + {-0.405497,0.709018}, + {0.620085,0.652872}, + {-0.848280,-0.510761}, + {0.284859,0.615713}, + {0.348772,-0.207622}, + {-0.055816,1.039482}, + {0.334478,0.209594}, + {1.605196,-0.420670}, + {-0.605169,-0.084273}, + {0.630320,0.781429}, + {0.014900,-0.362734}, + {0.894942,-0.727579}, + {0.067741,0.754466}, + {0.949988,-0.066743}, + {-0.253311,-0.959373}, + {-0.348181,0.499553}, + {0.059039,-0.130159}, + {-0.127018,-0.015114}, + {0.113024,-0.379652}, + {-0.474835,-0.334921}, + {0.787752,1.233290}, + {0.730310,-0.362158}, + {-0.043029,0.764059}, + {0.702234,0.977776}, + {-0.707870,0.675695}, + {-0.746668,-0.056283}, + {-1.427597,0.548321}, + {-0.889836,-0.322518}, + {0.559716,-0.205609}, + {0.866683,-0.427771}, + {0.190978,-0.991563}, + {-0.904855,0.124091}, + {0.050012,-0.833915}, + {-0.237735,0.753702}, + {1.054057,-0.159998}, + {-1.311705,-0.141423}, + {-0.167340,-0.857237}, + {0.299898,-2.073567}, + {1.438581,0.978587}, + {-0.643269,-0.584753}, + {0.133317,0.494257}, + {-0.649429,0.374599}, + {0.275902,-1.538577}, + {1.198951,-0.760458}, + {-1.385012,-0.069386}, + {-1.281703,-0.058265}, + {-0.555278,-0.011261}, + {-2.004580,-0.558871}, + {0.177745,-0.102492}, + {0.172073,-0.727798}, + {0.435496,-0.446889}, + {0.636023,-1.534272}, + {0.316862,0.134926}, + {-0.152594,-0.252641}, + {1.716484,-0.760875}, + {0.577497,1.141460}, + {0.259169,0.340464}, + {0.148970,-0.160064}, + {1.170360,0.759366}, + {-0.411688,0.120789}, + {0.282131,-0.723614}, + {-0.570560,-0.471775}, + {0.394987,0.179098}, + {0.078922,-1.605195}, + {1.222166,0.705268}, + {0.112494,0.182192}, + {-0.419529,-0.187154}, + {-1.690670,-0.646314}, + {-1.058211,0.228100}, + {0.214788,0.185218}, + {0.288251,0.244880}, + {-1.430080,-1.445750}, + {0.247476,-0.302103}, + {0.265110,-0.804134}, + {1.164424,1.113711}, + {0.311110,-1.210742}, + {0.796506,0.428281}, + {-0.316142,-0.291436}, + {-0.440177,-0.503075}, + {0.097647,-0.178009}, + {0.663421,0.217058}, + {0.665703,-0.958534}, + {0.310222,0.430380}, + {1.264676,0.514635}, + {0.652022,-0.675808}, + {0.546673,-0.732842}, + {-1.412238,0.029713}, + {1.812263,-0.439160}, + {-0.059908,-0.137715}, + {0.717444,-0.127056}, + {-0.231742,0.293963}, + {0.953017,0.337998}, + {-0.259151,0.250980}, + {0.052105,-0.381903}, + {0.152729,-1.519173}, + {-0.591415,-0.657243}, + {-0.150356,0.561554}, + {0.049513,-0.328535}, + {0.980559,-0.235285}, + {1.255975,-0.268207}, + {0.054851,0.313362}, + {1.065817,0.798603}, + {0.333122,0.943230}, + {0.173731,1.244529}, + {-0.137778,1.175759}, + {-0.572404,-0.089366}, + {-1.084071,0.201398}, + {-0.302239,-0.089035}, + {-2.102849,0.327512}, + {-0.071969,0.048153}, + {-0.987305,0.609359}, + {0.045616,-0.070737}, + {0.255401,-0.350403}, + {-0.325866,-0.684457}, + {-0.949723,-0.234736}, + {0.084110,-0.655785}, + {0.250549,1.066458}, + {0.025403,-0.832694}, + {-0.995800,0.738287}, + {0.298398,1.547136}, + {-1.442081,0.084168}, + {0.067213,-0.221365}, + {0.242559,0.174805}, + {-0.326723,-0.622174}, + {0.223836,-0.637175}, + {0.811831,-0.299335}, + {0.773214,0.551379}, + {0.392211,-0.445570}, + {-0.284968,-0.265439}, + {-0.881859,1.508451}, + {-0.347475,-0.325761}, + {-0.616885,-0.769191}, + {0.576795,-0.557282}, + {0.047390,0.337606}, + {-0.097859,1.780184}, + {-0.429312,1.112392}, + {-0.524623,0.219636}, + {0.405006,-0.298594}, + {0.382213,-1.012895}, + {-0.976113,-0.643431}, + {-0.135279,0.069899}, + {-0.077138,0.056443}, + {-0.622842,-0.648767}, + {-0.142333,-0.385734}, + {0.939501,1.168477}, + {-0.090723,-0.021190}, + {0.941865,-1.007430}, + {-0.986187,0.958079}, + {0.375743,0.363480}, + {-0.381949,-0.320752}, + {1.268664,-0.616885}, + {0.136944,0.263353}, + {-2.053794,0.961262}, + {-0.684081,-1.224868}, + {0.599383,0.140131}, + {-0.032657,0.782458}, + {0.385562,-0.313714}, + {0.404669,0.093627}, + {1.091659,0.677779}, + {-0.253105,-0.859333}, + {-0.324104,0.386444}, + {-1.904799,-0.146740}, + {0.373496,0.440722}, + {1.125800,0.354270}, + {-0.276754,-0.390405}, + {0.553166,-0.230742}, + {0.345504,1.257560}, + {0.326855,0.709150}, + {0.168127,0.088543}, + {0.349772,-0.368904}, + {-0.285477,-0.469480}, + {0.523761,-0.504454}, + {0.904464,-0.016717}, + {0.081565,-0.511504}, + {0.885394,0.427703}, + {-0.042153,0.607306}, + {-0.240457,-0.369428}, + {-0.476362,0.849541}, + {0.090063,-0.979648}, + {0.986172,-1.489947}, + {-1.101995,0.630631}, + {-0.700222,-0.297787}, + {-0.105735,-0.061019}, + {0.274621,0.286836}, + {0.956524,-0.005156}, + {1.141911,0.489715}, + {0.155700,0.477954}, + {0.161408,-0.280752}, + {0.208306,-0.382345}, + {-0.319743,-0.654164}, + {1.015004,-0.453518}, + {0.798286,0.047264}, + {-0.339036,1.191907}, + {-0.508641,0.191641}, + {-0.312756,0.231250}, + {1.006892,0.770095}, + {0.392099,-0.187454}, + {0.827204,-1.196456}, + {-0.071158,0.489808}, + {-0.111609,-0.123514}, + {-0.392260,1.137272}, + {-0.418037,-0.312706}, + {-0.890258,-0.638300}, + {0.922980,1.538843}, + {-0.076405,-0.034489}, + {-0.056280,0.132953}, + {0.470452,-0.751306}, + {-0.507513,-0.546397}, + {-1.195554,0.917548}, + {0.119745,-1.039416}, + {0.641056,0.873863}, + {-1.881030,0.230334}, + {-0.472662,-0.485251}, + {-0.731312,-0.241578}, + {1.386169,-0.814696}, + {0.439633,0.192069}, + {0.060629,-0.471375}, + {-0.908071,0.528836}, + {0.831151,0.885574}, + {-1.203440,-0.299895}, + {0.129863,0.106531}, + {0.936271,0.756381}, + {0.084020,-0.140794}, + {0.018339,-0.191766}, + {0.476259,1.311259}, + {0.250059,-1.190703}, + {-0.203745,0.761848}, + {-0.825526,-0.180980}, + {0.812343,0.263797}, + {-0.153643,0.325493}, + {-0.823435,-0.089900}, + {-0.936715,-0.947103}, + {0.504302,0.273732}, + {-0.136153,0.040614}, + {-0.228844,0.063628}, + {0.961477,-0.801511}, + {0.144958,0.157167}, + {-0.275340,0.067845}, + {0.982365,0.655564}, + {-0.101251,0.364215}, + {-0.518940,0.008418}, + {1.146963,0.276110}, + {-0.685455,0.477746}, + {-0.867617,0.334274}, + {-0.216229,-1.075130}, + {0.222334,0.883621}, + {0.561563,-0.562039}, + {0.122965,-1.491563}, + {0.905398,0.202764}, + {0.237011,0.541816}, + {0.995545,-0.305894}, + {0.621302,-0.394520}, + {0.118272,-0.759820}, + {0.217348,-1.054868}, + {0.146891,0.018121}, + {-1.551826,-0.096002}, + {0.015579,-0.036639}, + {1.011278,-1.192439}, + {-0.071961,0.011541}, + {-0.953020,-0.444260}, + {-0.367500,1.228606}, + {1.526161,0.151876}, + {1.107404,0.159669}, + {0.491996,-0.158496}, + {-0.098865,0.292759}, + {-0.430131,-1.325361}, + {1.032900,0.131424}, + {0.238858,-0.653212}, + {1.227567,-0.970755}, + {-1.135533,0.454609}, + {-0.498524,-0.586837}, + {-0.249832,0.164953}, + {0.788240,0.689636}, + {-1.805305,0.688304}, + {-0.568470,-0.213126}, + {-1.008743,0.494092}, + {-0.068211,-0.558996}, + {1.019529,-1.524452}, + {-1.555353,0.038906}, + {-1.517993,0.035634}, + {-0.183605,1.086476}, + {-0.901828,1.815693}, + {-0.376961,0.539305}, + {0.384843,0.052507}, + {-0.147705,-1.045677}, + {0.880142,-0.997078}, + {-0.854662,0.272260}, + {0.283422,1.151546}, + {-1.105150,0.930541}, + {0.044104,0.397594}, + {-0.104013,-0.673208}, + {-0.211616,-0.621975}, + {0.027161,0.371316}, + {0.600274,-0.606245}, + {0.806180,0.471603}, + {-1.008090,0.778175}, + {-0.289146,-0.809723}, + {-0.038659,-0.429242}, + {-1.334523,-0.137992}, + {-1.995175,0.137457}, + {0.021312,-0.091064}, + {-1.281258,-0.684793}, + {-0.413871,-0.292442}, + {0.381687,0.818085}, + {0.295284,0.101209}, + {0.665034,0.592564}, + {0.037124,0.035242}, + {0.132064,-0.657651}, + {1.053341,0.819935}, + {1.210807,0.675951}, + {0.457895,-1.075189}, + {0.358357,0.147282}, + {-0.499271,0.175458}, + {0.854323,0.068143}, + {1.991820,0.805889}, + {1.826429,-0.005057}, + {-0.467242,0.138414}, + {-0.366227,-1.697539}, + {0.485183,-0.821876}, + {0.536318,0.341220}, + {-0.441596,0.831566}, + {-0.134826,0.751288}, + {0.358869,1.095253}, + {-0.386092,0.078119}, + {-0.397661,-0.118587}, + {-0.419914,-1.100465}, + {0.280444,0.389289}, + {-0.832278,0.269468}, + {0.472347,0.132484}, + {0.088928,-0.278739}, + {0.361290,-0.444613}, + {-0.320039,-0.519034}, + {1.354470,0.178576}, + {-0.168088,-0.359028}, + {-1.317068,-0.040397}, + {-0.157570,0.775248}, + {0.150971,-0.256518}, + {0.921575,0.744693}, + {-0.137337,-0.764665}, + {-0.917358,-0.458914}, + {-0.705772,-0.263352}, + {-0.510704,-1.187616}, + {0.796905,0.825262}, + {-0.050399,0.512465}, + {0.768824,-0.159475}, + {-0.687249,0.364975}, + {-0.430008,-0.471340}, + {-0.202663,-0.386981}, + {-0.518536,0.608685}, + {0.525161,0.135142}, + {-0.372337,-0.486685}, + {0.717387,-1.392395}, + {0.854322,0.356855}, + {-1.102180,-0.156184}, + {-0.209081,-0.377676}, + {-0.967928,-0.798301}, + {0.111753,0.232228}, + {0.314745,0.446778}, + {-0.989801,0.082857}, + {-0.298760,0.326928}, + {-0.204933,0.197721}, + {1.048764,-0.114128}, + {-0.304972,0.032725}, + {0.104894,0.290204}, + {-0.045314,0.859009}, + {-0.718912,1.194088}, + {-0.242557,0.422101}, + {-0.859795,0.575768}, + {0.311124,-0.177388}, + {-1.427806,0.214970}, + {-0.645104,0.500403}, + {-0.219194,-0.984099}, + {0.788104,-0.907460}, + {0.513765,0.453685}, + {0.335412,-0.418488}, + {-1.097887,0.150175}, + {-0.979087,0.198912}, + {0.305300,-1.140391}, + {0.077787,0.856586}, + {0.214734,-0.592854}, + {-1.113305,0.320877}, + {-0.669169,0.448671}, + {0.253991,0.932563}, + {-0.455481,0.185849}, + {0.762277,-0.010084}, + {-0.477479,0.184388}, + {0.960667,0.390639}, + {-0.720191,0.037977}, + {-1.316302,1.152700}, + {0.398760,0.257566}, + {-0.401636,-0.419254}, + {-1.914376,1.449176}, + {-0.339228,0.296751}, + {0.207467,0.305288}, + {-1.731574,-0.030498}, + {-0.240750,-0.617304}, + {-0.237212,0.715578}, + {-0.416285,-1.008641}, + {0.634027,1.717009}, + {0.384123,-0.449106}, + {-1.160894,-1.767794}, + {0.618354,-0.261380}, + {-1.569626,-0.364495}, + {0.631915,-0.543410}, + {0.282734,-0.370501}, + {-0.977373,-0.433726}, + {1.432343,-0.462557}, + {-0.972547,0.004444}, + {0.784231,-0.243932}, + {-0.376546,-0.584034}, + {1.001247,-0.164126}, + {0.554715,-0.308636}, + {0.540227,0.426550}, + {-1.066853,-0.294694}, + {-0.504114,0.275915}, + {-0.949985,0.630675}, + {0.506317,-0.294027}, + {0.133689,0.989125}, + {0.105266,0.527915}, + {0.072913,0.211680}, + {0.381472,0.837872}, + {-0.183162,0.180758}, + {0.458198,-0.961007}, + {-0.004799,0.996245}, + {-1.561414,-0.676542}, + {-1.427195,0.800941}, + {0.173579,0.155504}, + {-0.830370,0.498583}, + {-0.232669,0.505982}, + {-0.096304,-0.750719}, + {1.906512,-1.461034}, + {-0.395663,-1.409489}, + {-0.705341,-0.497179}, + {-0.163104,-0.442154}, + {0.853744,-0.265722}, + {-0.361874,0.151299}, + {0.107204,-0.414142}, + {-0.106144,0.419209}, + {-1.286889,-0.802826}, + {-0.144332,0.370855}, + {0.474858,0.913496}, + {-0.867293,0.301363}, + {-0.545302,0.146680}, + {0.001880,0.805475}, + {1.320236,0.643083}, + {-1.141064,1.684144}, + {-0.128674,0.678582}, + {-0.343416,0.309854}, + {0.019772,1.077821}, + {-0.239235,-0.119506}, + {-0.373356,-0.583563}, + {0.403890,-0.534354}, + {-0.519976,0.020956}, + {0.712048,0.988539}, + {-0.861664,-0.493059}, + {0.093158,-0.833793}, + {1.052626,0.468904}, + {0.091221,0.456901}, + {-0.584013,-0.961460}, + {1.685019,0.470576}, + {-0.180148,-0.785828}, + {-0.210638,-0.498937}, + {0.934431,1.304392}, + {0.066268,-0.504962}, + {0.151449,-0.194295}, + {0.247991,0.136973}, + {-0.126328,-0.633755}, + {-0.857218,1.918319}, + {0.354034,0.566611}, + {-0.323836,-0.588707}, + {-0.093776,-0.592204}, + {-0.027068,-0.042178}, + {0.002969,0.636477}, + {-0.480469,-0.201484}, + {-1.191052,0.906057}, + {0.598655,-0.164748}, + {-0.044789,-1.118828}, + {-0.541816,-0.070911}, + {0.074609,1.345165}, + {-0.032322,-0.231974}, + {-0.449760,1.661760}, + {0.707548,0.034345}, + {-0.907888,-0.004174}, + {0.152966,0.440522}, + {0.046909,0.346149}, + {-0.281537,-1.219698}, + {-0.895213,1.513594}, + {-0.881255,0.124261}, + {-1.081693,-0.436486}, + {-0.106278,0.626797}, + {0.754899,0.295278}, + {-0.227234,0.474572}, + {-0.763770,-0.042921}, + {-1.002643,0.429052}, + {0.478156,-0.815031}, + {-0.733688,-0.279437}, + {-0.362104,0.064655}, + {-0.114674,0.196627}, + {0.044324,-1.013509}, + {-0.452231,-1.026683}, + {-0.928972,0.240171}, + {0.531384,-0.041877}, + {0.360475,2.263092}, + {-0.002502,0.278693}, + {-1.068170,-0.652698}, + {-0.133973,0.404417}, + {0.112787,0.817903}, + {0.093469,0.514351}, + {0.173190,0.030494}, + {-0.386117,-0.119304}, + {-0.150011,1.098977}, + {-0.718702,1.061190}, + {-0.187865,0.769379}, + {-0.673330,-0.520017}, + {-0.782271,0.749117}, + {1.040643,-0.447207}, + {-0.686538,-1.825913}, + {0.706101,-1.401344}, + {-0.031939,-0.069587}, + {1.026212,-0.730925}, + {0.311104,0.591601}, + {0.589268,-0.406947}, + {-0.305040,0.233919}, + {-0.658906,-0.074957}, + {-0.172826,0.539225}, + {1.621683,0.577736}, + {1.074205,0.776840}, + {-1.131216,-0.504166}, + {-0.664862,-0.542385}, + {-0.245912,0.040006}, + {1.012363,-0.520893}, + {-1.044423,-0.968495}, + {0.057525,-0.137602}, + {0.031642,-0.360814}, + {0.302685,0.776735}, + {-0.590976,0.666512}, + {-0.153819,-0.015702}, + {0.050475,1.733477}, + {0.474972,0.052117}, + {0.185655,-0.901557}, + {0.383428,0.150210}, + {0.254788,0.679409}, + {-0.224796,0.681574}, + {-0.256749,-1.077031}, + {0.134707,-0.760133}, + {1.014226,-1.619607}, + {-0.766887,-0.104736}, + {0.761824,-0.642466}, + {0.640060,0.025030}, + {0.717916,0.808046}, + {0.158375,-0.609786}, + {0.599932,0.529572}, + {0.920422,-1.417508}, + {0.247593,-0.365323}, + {0.143007,0.147123}, + {-0.698949,-0.661064}, + {0.099640,0.528546}, + {0.387466,1.303945}, + {0.721636,-0.563915}, + {-0.056200,-0.095831}, + {0.127167,0.466936}, + {0.614167,-0.250185}, + {0.324173,-0.104513}, + {0.564475,-0.584259}, + {0.000883,-0.715214}, + {0.175617,-0.853427}, + {-0.655242,0.141206}, + {-0.799496,-0.397656}, + {0.509296,-0.078758}, + {0.824815,-0.397955}, + {0.165592,-0.838807}, + {-1.406393,-0.034832}, + {-0.140087,-0.245922}, + {-0.039954,-0.580654}, + {0.592499,0.257650}, + {0.865662,-0.321183}, + {-0.348095,0.633829}, + {-0.222209,0.346638}, + {0.077141,-0.429164}, + {-0.612928,0.649756}, + {-0.218828,-0.978959}, + {-0.467017,0.873553}, + {1.012268,-0.236361}, + {0.935993,-0.768227}, + {-0.637278,0.397934}, + {-0.171380,0.726429}, + {-0.200094,1.039778}, + {-0.395740,-0.290233}, + {-0.251927,0.547605}, + {-0.317331,2.066899}, + {0.874234,-0.172457}, + {-0.112367,0.968130}, + {-0.608874,-0.281634}, + {0.458084,0.134327}, + {-0.327929,-0.153658}, + {-0.809721,-1.217724}, + {0.108791,0.635246}, + {-0.127071,0.688169}, + {-0.681222,0.292983}, + {-0.447850,-0.098757}, + {-0.059162,0.033865}, + {-1.459920,-0.167831}, + {-0.546872,1.304584}, + {0.567670,-0.764303}, + {-0.051371,0.814561}, + {0.018359,0.085225}, + {0.295254,0.367041}, + {0.923804,-0.382126}, + {-0.094986,0.179273}, + {0.751972,-1.355834}, + {-0.131853,-0.066514}, + {0.223027,-0.074406}, + {-0.447982,-0.207079}, + {-1.165943,-1.747960}, + {0.289496,-0.581631}, + {0.995888,-0.840471}, + {0.287864,-1.173235}, + {-0.035233,-0.012186}, + {1.404205,-0.502267}, + {0.271013,-0.607421}, + {0.082209,-0.294491}, + {1.108759,0.397367}, + {0.147693,-0.077201}, + {0.644694,-1.167422}, + {0.439444,-0.480603}, + {1.596557,0.704222}, + {0.202072,-1.010761}, + {0.472276,-0.171207}, + {0.496560,-0.780542}, + {1.279076,-0.623514}, + {0.182762,-0.393778}, + {0.150084,0.277712}, + {0.752527,0.683646}, + {0.480142,1.172231}, + {1.005193,-0.949569}, + {0.668218,-0.521006}, + {-0.401607,0.695572}, + {0.934451,-1.387263}, + {-1.060714,-0.674529}, + {0.445290,-0.241091}, + {0.757956,0.271408}, + {1.231487,0.237535}, + {-0.486448,0.433734}, + {-1.455954,1.581795}, + {-1.037576,-1.013962}, + {-0.251248,-0.324413}, + {1.064396,0.130331}, + {-1.209972,-0.399869}, + {0.412389,0.237274}, + {-0.971736,0.139207}, + {0.364493,0.360362}, + {0.462466,0.123618}, + {0.015647,0.662696}, + {0.521067,-0.464325}, + {-0.691029,-0.419101}, + {0.797372,-0.361360}, + {-0.711848,-0.337005}, + {0.276187,0.033567}, + {0.261731,0.465815}, + {-0.122547,-0.163457}, + {0.449124,0.025562}, + {-0.366007,-0.325535}, + {0.741756,0.044402}, + {0.795758,-1.009837}, + {-0.045791,-1.021170}, + {-0.690750,-0.553651}, + {-0.885860,0.289949}, + {0.587965,-0.598258}, + {0.645572,0.810630}, + {-0.008388,-0.730176}, + {0.161907,0.977525}, + {-0.967148,0.872038}, + {0.372738,-0.028752}, + {0.255575,1.354765}, + {-0.947345,0.186383}, + {0.938292,0.931974}, + {-0.137511,-1.156500}, + {1.535508,1.226839}, + {0.098197,0.233959}, + {1.091029,-0.489096}, + {0.919905,1.862780}, + {0.715268,0.128684}, + {0.737863,-0.154854}, + {-0.231765,-0.541695}, + {-0.512769,-0.574521}, + {-0.128448,0.487393}, + {0.352688,1.345931}, + {0.064971,-0.982254}, + {-0.726009,1.313529}, + {0.448623,-0.053441}, + {1.469537,-0.044362}, + {1.011843,0.352729}, + {1.063249,-0.322635}, + {-0.131380,0.533014}, + {0.451360,0.230248}, + {0.001995,0.153600}, + {1.646787,0.881911}, + {-1.458759,-0.586824}, + {-0.702392,-0.241636}, + {-0.074182,-0.072131}, + {0.262439,0.583482}, + {-0.476122,0.082469}, + {0.438068,0.803544}, + {-0.207061,0.660637}, + {0.567990,-0.597823}, + {-1.688718,-0.103409}, + {-0.829192,0.426556}, + {0.827020,0.826934}, + {0.441454,-0.546262}, + {-0.304897,-0.022233}, + {-0.357555,-0.612953}, + {-0.388052,0.013095}, + {0.777314,0.544567}, + {0.437676,0.305298}, + {-0.356608,-0.848358}, + {0.791083,-0.271240}, + {0.044885,0.107636}, + {0.364655,0.012973}, + {0.538263,-1.124278}, + {0.228271,-1.168910}, + {0.026633,-0.327359}, + {0.464736,-0.077427}, + {-0.438151,-0.387916}, + {0.384472,0.255111}, + {-0.913587,0.151118}, + {0.215311,0.261325}, + {0.133743,1.302663}, + {0.977288,-1.212393}, + {-1.005590,1.135110}, + {-1.031105,-0.046053}, + {0.034069,0.088167}, + {-1.874043,0.314546}, + {-0.138676,-0.665746}, + {-1.367737,0.809027}, + {-0.617917,0.576212}, + {-0.059977,0.148805}, + {1.021231,-1.734845}, + {0.232449,-1.635767}, + {-0.402629,0.093773}, + {0.306316,-0.589913}, + {0.691035,-0.933528}, + {-0.854344,-0.581280}, + {-0.550056,-0.087623}, + {-0.735359,0.440600}, + {-0.599941,-0.566529}, + {-0.157511,0.329776}, + {-0.620057,-0.573574}, + {-0.618399,-0.151361}, + {0.173969,-0.559218}, + {-0.316563,2.332789}, + {-0.512502,-0.263662}, + {0.127996,0.407326}, + {0.888734,-0.229112}, + {0.431876,-0.881928}, + {0.480039,-0.855335}, + {0.548737,0.504779}, + {0.039114,-0.355311}, + {-0.536205,1.175569}, + {-0.006012,-1.440053}, + {-0.366908,-0.714389}, + {-0.253160,-0.482878}, + {0.071598,-0.022415}, + {0.484456,0.242941}, + {0.353405,-0.516339}, + {0.269909,0.018111}, + {-0.512141,0.368190}, + {-0.034358,-0.690191}, + {0.186251,-0.383563}, + {-1.243734,1.020511}, + {-0.310334,-0.639568}, + {-0.238013,1.203421}, + {-0.276677,0.105597}, + {0.528988,0.213357}, + {0.351103,0.004227}, + {0.686052,-0.683489}, + {0.402253,-0.548756}, + {-0.244236,-0.179112}, + {0.039858,0.390838}, + {0.985325,0.842588}, + {0.440814,-0.329205}, + {0.666419,0.644613}, + {0.548497,-0.000859}, + {-0.938426,1.023278}, + {-0.941754,0.721262}, + {0.000099,1.114577}, + {-1.218951,1.191773}, + {-0.607709,0.205343}, + {-0.206425,0.838011}, + {0.699534,-0.002445}, + {1.352826,-0.100402}, + {0.041916,0.740550}, + {0.416504,-0.341657}, + {0.097466,1.186724}, + {0.687240,-0.367369}, + {0.545399,-0.035212}, + {0.374638,0.479261}, + {0.135228,-0.116509}, + {-0.608795,0.777712}, + {0.335622,0.171713}, + {-0.049759,0.394634}, + {0.882455,-0.007277}, + {0.074308,0.777326}, + {0.370312,0.102349}, + {0.376820,0.573884}, + {-0.431049,0.306366}, + {1.085490,0.744110}, + {-0.230620,-0.315921}, + {0.436716,0.557135}, + {-0.702941,0.571264}, + {0.221250,0.066672}, + {-0.570686,-0.286918}, + {-0.560485,-1.471082}, + {-0.314618,-0.584589}, + {-0.311362,0.168867}, + {1.173793,0.106905}, + {-1.017770,-0.355978}, + {-0.228067,-0.524127}, + {-0.163044,-1.799027}, + {-0.126843,-0.121222}, + {-0.360908,-0.655512}, + {1.040580,-1.978968}, + {-0.769183,0.705786}, + {-0.275717,-0.258945}, + {-0.590592,-1.078141}, + {-1.062724,0.958762}, + {0.123248,0.000726}, + {-0.630985,-0.643702}, + {-0.304755,0.333120}, + {-0.354195,-0.773979}, + {-1.222200,-0.340033}, + {-0.500831,-0.495272}, + {0.395941,0.305049}, + {1.926537,-0.064242}, + {0.102387,0.533556}, + {1.094398,0.165614}, + {-1.017921,-1.540784}, + {-0.218494,-0.929660}, + {-0.535317,0.186219}, + {1.199743,-0.241787}, + {0.086699,-0.643872}, + {-0.586069,0.057078}, + {0.457002,-0.144936}, + {0.938976,0.355965}, + {-0.478159,-0.863239}, + {0.123059,0.137369}, + {-0.726764,0.697758}, + {-0.776171,-0.293292}, + {0.532566,-0.658669}, + {0.490077,-0.101454}, + {0.031428,0.291178}, + {-0.667737,0.741288}, + {0.907230,0.233775}, + {0.515349,-0.227823}, + {1.010764,-0.015213}, + {0.444179,-0.562985}, + {-0.276474,0.657198}, + {-0.172263,0.956311}, + {-0.355806,0.703603}, + {-0.506885,-0.799493}, + {-0.697335,-0.297622}, + {-0.012191,1.840314}, + {-0.847463,0.284183}, + {0.854194,0.403219}, + {1.929827,0.528325}, + {-0.261886,0.577017}, + {-0.031070,-2.348125}, + {-0.155820,-0.265157}, + {0.512475,0.208609}, + {-1.450445,-0.816839}, + {0.564060,0.610582}, + {0.208762,0.538423}, + {-0.394083,-0.217364}, + {0.232377,-0.084660}, + {0.344522,0.516178}, + {-1.449901,-0.112290}, + {0.000158,-0.982079}, + {0.787346,1.416797}, + {0.158547,-0.490012}, + {-0.765118,0.416037}, + {0.552854,0.197313}, + {-0.560294,0.168624}, + {-0.710216,-0.278700}, + {-0.022732,0.174521}, + {-0.831227,0.475439}, + {0.219373,-0.678127}, + {-0.002961,-0.573618}, + {-0.945813,0.412736}, + {-0.979897,1.265908}, + {-0.311475,0.379769}, + {-0.082964,0.038846}, + {-0.500868,0.551077}, + {-1.116548,-0.382053}, + {-0.150512,-0.889516}, + {0.003441,-0.441244}, + {-0.155477,0.236868}, + {-0.372866,-0.003664}, + {0.517363,-0.227696}, + {0.348671,-1.184919}, + {0.023715,-0.857359}, + {-1.165542,0.373084}, + {-0.372004,0.745161}, + {1.486675,0.482708}, + {0.713017,-0.111925}, + {0.698459,0.261537}, + {-1.448937,0.151106}, + {-0.936754,0.023684}, + {0.896661,-0.031541}, + {0.360038,0.783076}, + {-0.094289,0.365897}, + {1.270895,0.047391}, + {-0.069325,-0.911174}, + {0.356797,-0.202779}, + {0.966214,-0.501017}, + {-1.056213,-0.334850}, + {-1.048820,1.448814}, + {-1.559907,0.438635}, + {-0.533985,0.378701}, + {1.577709,-0.730175}, + {0.591595,1.416816}, + {-0.192300,-0.219470}, + {0.299344,-0.860943}, + {0.318677,0.121607}, + {0.335483,0.070689}, + {-0.111371,-1.205420}, + {0.395077,0.205784}, + {1.026121,-0.818676}, + {-0.968687,0.857896}, + {0.312721,1.501156}, + {-0.482650,0.352206}, + {0.997697,0.112893}, + {0.950446,-0.398203}, + {0.097713,-1.070921}, + {-0.800673,-0.325717}, + {0.671945,-0.861890}, + {0.021531,-0.436324}, + {0.437880,1.356432}, + {0.457176,-0.276639}, + {-0.247776,0.777048}, + {0.251688,0.079969}, + {-1.334482,-1.474248}, + {-0.483623,0.743976}, + {0.355137,-0.034433}, + {-0.956198,-1.078557}, + {0.405169,1.702393}, + {-0.835610,-0.412153}, + {0.177645,-0.803742}, + {0.190991,-0.126655}, + {-0.293197,0.907349}, + {0.208255,0.226394}, + {-0.590120,-0.320991}, + {-0.477141,-0.954609}, + {0.534067,-0.035251}, + {-0.962419,0.424134}, + {0.409965,-0.074026}, + {-0.110630,-0.862237}, + {0.037791,0.944337}, + {0.944043,-0.704466}, + {-0.648236,0.057918}, + {-0.617177,-0.830966}, + {0.416183,-0.658194}, + {1.180214,0.519521}, + {-0.123865,-0.426364}, + {0.019066,0.317164}, + {0.234837,0.331158}, + {-0.656986,0.335032}, + {0.346063,-1.649529}, + {0.058210,-0.381788}, + {-0.260900,0.186365}, + {0.429371,0.681698}, + {1.939461,-1.181745}, + {-0.445243,-0.716289}, + {0.131740,0.865901}, + {-0.918136,-0.131137}, + {-0.053577,-0.373297}, + {-0.531049,0.031422}, + {-1.254709,0.556524}, + {-1.119247,0.394916}, + {-0.498215,-0.035437}, + {1.322329,0.190493}, + {-0.701283,-1.164440}, + {-0.361131,-0.504716}, + {-0.117174,0.107979}, + {0.700073,1.603625}, + {-0.582119,0.440169}, + {1.018868,-0.420729}, + {-0.212079,-0.280104}, + {1.132422,-0.035123}, + {0.026273,1.886585}, + {-0.729453,0.098911}, + {0.805546,0.750763}, + {0.224181,0.331261}, + {0.116170,0.259857}, + {0.100047,0.046190}, + {-0.055174,0.957446}, + {-1.456418,-1.105336}, + {0.290339,-0.811412}, + {-0.403941,-0.272939}, + {1.707646,0.332927}, + {0.858293,0.006974}, + {-0.476534,0.364698}, + {-0.705168,0.544668}, + {-0.667669,0.289049}, + {1.181489,-0.102266}, + {-0.363524,-0.507603}, + {0.077873,-0.227451}, + {-0.070765,0.236432}, + {0.547170,0.221358}, + {-0.084700,-0.954482}, + {-0.930200,-1.003973}, + {0.641949,1.189144}, + {0.292530,1.376169}, + {0.146329,0.050514}, + {0.504086,0.327294}, + {0.560656,-0.819642}, + {-0.782328,0.555732}, + {-0.321355,0.040423}, + {0.575312,0.676942}, + {0.676739,0.371605}, + {-0.739089,0.154797}, + {-0.196959,0.765774}, + {-0.075477,-0.064618}, + {-0.708957,-0.695153}, + {-0.114007,-0.274311}, + {-0.208777,-0.197655}, + {-0.330289,0.090402}, + {0.645717,-0.861720}, + {0.759627,1.159973}, + {0.736863,0.016140}, + {-0.290055,1.066642}, + {-0.360313,0.572408}, + {0.559798,-0.118348}, + {1.099664,0.913475}, + {-1.221145,0.753011}, + {-1.080846,-0.309538}, + {0.898748,-1.751489}, + {-0.793636,-0.682252}, + {0.601441,0.716634}, + {-0.754166,-0.295275}, + {-0.057178,-0.531244}, + {-0.503737,0.754428}, + {-0.092784,0.415358}, + {-0.428408,0.867882}, + {-0.531645,-0.427532}, + {0.015225,0.360774}, + {0.052039,0.804546}, + {0.140220,0.683936}, + {-0.183837,-0.075742}, + {0.141611,0.121116}, + {0.863189,-0.304942}, + {-0.183500,-1.267097}, + {0.721582,0.324832}, + {0.490362,-0.620402}, + {0.032723,-0.342147}, + {0.015191,0.299803}, + {-0.453198,0.232907}, + {0.890290,-0.037167}, + {1.101406,-0.724242}, + {-1.147539,-0.245951}, + {-1.727078,-1.683502}, + {0.261545,-0.107582}, + {0.068065,0.753220}, + {0.369570,0.796556}, + {0.143988,0.884428}, + {0.009223,-0.259795}, + {-0.207237,1.912655}, + {0.901343,0.446570}, + {1.779646,-0.190026}, + {0.060311,-0.035492}, + {0.471146,-0.987103}, + {-0.678292,-0.087719}, + {-0.381341,0.932014}, + {0.423463,-0.374888}, + {0.132522,-0.133326}, + {0.725087,-0.055467}, + {-0.026041,0.630602}, + {0.237645,-0.147676}, + {0.384787,0.046887}, + {1.184148,-0.971991}, + {0.904135,-1.133769}, + {1.047468,-0.174437}, + {-0.262063,1.567163}, + {-0.323006,0.521236}, + {0.517606,0.341770}, + {-0.289763,-0.525198}, + {1.140138,-0.745015}, + {0.748583,0.650728}, + {-0.040966,0.218449}, + {0.340059,0.915520}, + {0.031779,0.421656}, + {-0.394555,-0.262061}, + {0.204192,-0.199669}, + {-0.222583,0.416622}, + {0.026680,0.648281}, + {0.394312,-0.072898}, + {-0.547009,-0.610642}, + {-0.323403,-0.781335}, + {0.246200,-0.481307}, + {1.250227,-0.203189}, + {1.335570,0.028829}, + {0.907068,-0.322204}, + {-0.241285,0.672412}, + {-0.500388,1.413200}, + {0.348404,0.053563}, + {-0.515993,1.348158}, + {0.419507,0.843740}, + {-1.680552,-0.349667}, + {1.125661,0.162114}, + {-2.253658,-1.822658}, + {-0.603819,-0.131986}, + {-0.688067,-1.520234}, + {0.107885,1.042587}, + {0.794351,0.550783}, + {0.107568,0.622575}, + {0.427502,0.055636}, + {-0.386636,-0.648276}, + {-0.530590,0.233918}, + {-0.069396,-0.648418}, + {0.677155,1.610371}, + {-0.636080,0.824467}, + {1.069180,0.649464}, + {-1.099628,0.652186}, + {1.175325,0.015894}, + {0.519414,-1.197649}, + {-0.613790,-0.781378}, + {-1.117294,0.891372}, + {0.284313,-0.488536}, + {0.142283,1.641906}, + {1.718632,-0.694643}, + {-0.611194,-0.432577}, + {-0.251579,-0.852987}, + {-0.170100,0.486159}, + {0.320121,-0.580628}, + {0.872266,-0.384060}, + {-0.208309,0.139307}, + {-1.583756,-0.645014}, + {-0.702369,-0.541675}, + {0.336241,0.831866}, + {-0.865645,0.436119}, + {-0.620241,-0.606092}, + {-0.104203,0.984638}, + {-0.410559,-0.040961}, + {-0.416490,-0.226391}, + {0.088726,-0.220726}, + {-1.499559,-0.585178}, + {0.293249,0.186455}, + {-1.210379,-0.633716}, + {-0.277191,-1.244025}, + {1.139804,0.055639}, + {-0.228353,0.448129}, + {0.559068,-0.023119}, + {-1.221999,0.465622}, + {1.162107,-0.729434}, + {-0.368202,0.259066}, + {-0.285426,1.295138}, + {0.379646,0.224708}, + {0.294352,-0.551327}, + {-0.462702,0.187464}, + {-0.026366,-1.131739}, + {0.894485,-0.169837}, + {1.029962,-0.513169}, + {-0.308485,-0.846109}, + {0.013267,0.200561}, + {0.442056,0.037734}, + {-1.579953,-0.567456}, + {0.313331,0.287219}, + {0.237625,-1.467799}, + {-0.343068,0.471870}, + {0.808584,-0.605491}, + {-0.384505,0.285999}, + {-0.821182,1.140405}, + {0.083857,0.569015}, + {0.358021,0.251793}, + {-1.050896,0.222264}, + {0.693579,-0.417443}, + {0.488468,0.599156}, + {-0.102947,-1.320533}, + {0.340396,-0.671734}, + {0.618710,-0.219283}, + {-0.125032,-0.163230}, + {-0.088188,-0.534394}, + {0.682064,1.041136}, + {-0.344705,-0.089664}, + {-0.529053,0.255838}, + {-0.136569,-0.214062}, + {1.455681,0.491256}, + {1.238314,-0.436456}, + {0.183785,-0.294781}, + {-1.115245,1.248687}, + {-0.649421,-0.614780}, + {1.178710,-0.312908}, + {0.812326,-0.393600}, + {-0.874232,0.893146}, + {-1.043341,-0.195049}, + {-1.266037,-0.004749}, + {-0.377230,-0.359996}, + {-0.196225,0.796953}, + {0.996897,-0.623582}, + {-0.556859,-0.864103}, + {-1.371972,0.769551}, + {0.056397,-0.658378}, + {-0.074004,0.516830}, + {-0.019248,0.750291}, + {0.172892,-0.524600}, + {-0.598676,-0.007268}, + {0.137861,1.698237}, + {-0.084691,1.344243}, + {0.001925,-0.191394}, + {0.240667,-0.596132}, + {-0.139205,1.502034}, + {0.716061,-1.415551}, + {0.861506,-0.658005}, + {0.514495,0.090184}, + {-0.528631,1.006103}, + {-0.388832,-0.792382}, + {0.735890,0.122394}, + {-1.547132,1.015471}, + {0.121113,-0.501140}, + {0.975384,-1.280454}, + {0.079350,0.996285}, + {0.046097,-1.248331}, + {-0.978137,-0.857029}, + {-0.292484,0.917538}, + {0.476399,-0.533662}, + {-0.185424,0.410061}, + {-0.516918,0.560953}, + {-1.108884,0.242701}, + {0.393610,-1.112134}, + {-0.342411,0.026459}, + {0.960001,-0.039799}, + {0.292966,-0.871399}, + {0.509531,0.068985}, + {0.306125,0.182601}, + {0.684688,0.611943}, + {0.366705,-1.300976}, + {-0.161117,0.460565}, + {0.919045,0.162937}, + {-0.600136,0.528728}, + {0.807988,-0.082820}, + {0.723075,-1.101493}, + {0.408624,0.497548}, + {0.592179,-0.511883}, + {-0.624763,0.320432}, + {0.702432,0.047555}, + {-0.826321,0.702721}, + {-0.590704,0.927206}, + {-1.222225,0.520187}, + {0.057220,-0.355501}, + {-0.346697,0.327871}, + {-0.389801,-1.554275}, + {0.700315,-0.895953}, + {0.367463,0.307326}, + {-0.364395,-1.611608}, + {-0.506932,0.889372}, + {-0.243596,0.575283}, + {-0.802028,0.056860}, + {-0.171424,0.239689}, + {0.169908,-0.522395}, + {0.213199,-0.701460}, + {0.552262,0.906828}, + {-1.016062,0.643300}, + {0.298917,-0.477633}, + {0.354035,0.004910}, + {-0.091019,0.375327}, + {-0.237197,0.523797}, + {-0.445213,0.236868}, + {0.184486,0.210037}, + {-0.200655,-0.532764}, + {-0.165018,0.252682}, + {0.301383,-0.470096}, + {0.733004,-0.519851}, + {-0.340900,0.559258}, + {-0.003634,0.397142}, + {-0.158002,-0.601995}, + {1.029616,-0.712344}, + {-0.272084,1.292895}, + {-0.245181,0.153895}, + {1.537927,0.233934}, + {-0.194398,-0.207617}, + {-0.037529,-0.362480}, + {-1.439610,-0.069318}, + {-0.527334,-0.847175}, + {0.888073,1.120245}, + {0.759059,-1.709285}, + {-0.038818,-0.451563}, + {-1.569456,0.059742}, + {-1.135825,1.105116}, + {0.860456,-0.054651}, + {0.791421,0.583433}, + {0.300375,0.733727}, + {0.740330,0.173272}, + {0.720677,-0.006213}, + {0.211773,0.171237}, + {1.239301,0.513578}, + {-0.038229,-1.319419}, + {-1.110608,0.623842}, + {-1.199877,2.009182}, + {0.110201,1.359225}, + {-0.521048,1.259603}, + {-0.779884,0.080694}, + {0.922866,1.378522}, + {-0.036678,-0.256378}, + {0.630587,0.356473}, + {-0.818911,0.348724}, + {-0.823156,-0.403827}, + {-0.305461,-0.183285}, + {0.545495,-0.917827}, + {-0.307489,0.278087}, + {0.576430,0.263072}, + {-0.110932,0.343314}, + {-0.730010,0.924897}, + {0.492041,0.775198}, + {0.461854,0.423507}, + {0.427495,1.700151}, + {0.432533,0.301152}, + {-0.593518,1.393076}, + {-0.389399,-0.733757}, + {-1.049504,0.301791}, + {0.546392,0.734537}, + {0.338524,0.116400}, + {-0.597570,-1.925078}, + {0.322346,1.008118}, + {0.513935,-0.042958}, + {-0.518049,0.101353}, + {1.352677,-0.293425}, + {0.240988,-1.041734}, + {-0.691185,-1.063328}, + {0.130569,1.016253}, + {-0.586304,-0.555797}, + {0.462853,-0.235079}, + {0.079994,-0.355770}, + {0.153572,0.147783}, + {-0.596490,-0.795026}, + {0.326538,-0.790256}, + {-1.460756,-0.251033}, + {0.017858,0.259083}, + {0.507881,-1.054094}, + {0.266351,0.627879}, + {-0.752761,-0.513762}, + {-0.627282,0.008649}, + {-0.886446,0.842860}, + {-0.463043,-0.469626}, + {0.096623,0.933024}, + {-0.286410,0.744126}, + {-0.542282,1.126897}, + {-0.313235,0.205528}, + {-1.320519,0.277179}, + {0.071715,0.147248}, + {-0.903511,-0.083047}, + {0.656132,-1.350683}, + {-0.207632,-0.039248}, + {0.117073,-0.120780}, + {-1.332364,0.590990}, + {-0.380298,-0.400794}, + {-0.366577,0.174013}, + {0.485112,-0.117400}, + {0.372690,-0.023396}, + {-0.909507,-0.293390}, + {1.037746,0.057621}, + {0.939461,-1.025088}, + {1.893673,-0.611078}, + {0.078827,-0.951650}, + {-0.839030,0.090466}, + {-1.104840,-1.126416}, + {0.590214,0.068381}, + {1.100851,0.573205}, + {-0.393116,-0.875980}, + {-0.254150,-0.405253}, + {-0.278855,1.000683}, + {0.921864,0.463923}, + {-0.041988,-0.112156}, + {0.155288,-0.019315}, + {0.099627,0.916635}, + {-0.622412,-0.503004}, + {-0.262853,0.533022}, + {-2.349103,-0.232631}, + {-0.387689,-0.672924}, + {-0.981208,0.386278}, + {0.021049,-0.336082}, + {0.385965,1.431628}, + {0.084666,-0.022362}, + {1.501095,-0.445381}, + {-0.174828,0.029946}, + {-0.075096,-0.754793}, + {0.440599,-0.624117}, + {-0.191469,-0.122779}, + {-0.619664,0.048316}, + {0.681431,-1.113935}, + {0.392264,-0.416262}, + {-1.025569,0.426959}, + {0.231863,1.526328}, + {-0.235847,0.767781}, + {-0.081400,-1.937839}, + {-0.142145,0.413403}, + {-0.578059,-0.410749}, + {0.886248,-1.144489}, + {-0.584558,-0.717462}, + {0.337355,-0.804375}, + {-0.070221,0.776269}, + {-0.020066,0.015296}, + {-0.731855,1.217179}, + {0.430529,-0.118092}, + {0.121456,2.210222}, + {0.825156,-1.563617}, + {-0.365542,-0.034897}, + {0.238998,0.603491}, + {-0.488885,-0.418294}, + {0.519796,-1.412865}, + {-1.114191,-0.510320}, + {-0.752598,0.541650}, + {0.380631,-0.713726}, + {0.023115,1.015882}, + {-0.198359,0.433732}, + {0.103927,0.017306}, + {-0.039809,0.223707}, + {1.711996,0.402454}, + {-0.056678,0.174339}, + {-1.687713,-0.160125}, + {0.696416,-0.493909}, + {-0.873410,0.257890}, + {0.319853,0.072947}, + {-0.368300,0.341422}, + {-0.482285,0.930112}, + {-0.004708,0.893093}, + {-0.051559,0.713417}, + {1.244796,1.336726}, + {-0.104941,-0.449322}, + {0.655462,0.706759}, + {-0.239773,1.696788}, + {-0.324650,0.398949}, + {0.624589,0.044072}, + {0.357952,0.443955}, + {0.749903,1.159453}, + {-1.563112,-0.838062}, + {-0.617714,-0.025810}, + {1.450510,-0.020522}, + {0.225253,-1.483181}, + {-0.666102,-0.989824}, + {0.463322,0.622948}, + {-0.252765,-0.493345}, + {-0.030605,0.132428}, + {-0.104919,-1.328013}, + {0.512898,-0.265843}, + {0.641341,0.344586}, + {0.586485,-0.656758}, + {-0.869639,-1.444607}, + {-0.283470,-0.175611}, + {-0.403954,-0.687469}, + {0.222511,-0.720233}, + {-1.268683,-0.981553}, + {-0.379982,-0.435577}, + {1.266867,0.349347}, + {0.164557,-1.057785}, + {0.093567,0.955540}, + {-0.141307,-0.705522}, + {0.371905,0.120573}, + {-0.389172,-0.765473}, + {0.917816,-0.237643}, + {1.004090,0.178844}, + {-0.629418,-0.412242}, + {-0.210337,0.560592}, + {-0.318360,1.059381}, + {0.583389,-1.323808}, + {-0.817288,0.993688}, + {-0.878170,-1.153520}, + {0.368115,0.337455}, + {0.031655,0.110590}, + {0.265206,0.204946}, + {0.088893,0.170791}, + {-0.177558,2.292458}, + {0.141059,-0.985035}, + {-0.660856,-0.980383}, + {-0.609849,0.985874}, + {-0.214610,0.730502}, + {-0.616156,-0.316919}, + {0.694992,-0.768053}, + {-0.325122,-1.054053}, + {1.217558,-0.854166}, + {0.854051,-0.005104}, + {1.209427,-0.241328}, + {0.324556,0.132322}, + {-0.343527,0.053413}, + {0.224351,0.479553}, + {0.421346,-0.521788}, + {0.118883,-0.218365}, + {0.188380,-0.456052}, + {-0.349273,-0.770785}, + {0.219073,0.003962}, + {-0.296130,-0.656501}, + {0.636082,0.026015}, + {-0.625080,0.346952}, + {0.929759,0.857013}, + {0.187340,0.484039}, + {0.007584,-0.624158}, + {0.309799,-2.221435}, + {0.640643,1.329439}, + {0.226335,-0.805996}, + {0.822625,1.060992}, + {-0.470881,-1.000766}, + {0.425072,-0.397100}, + {-0.223623,0.531114}, + {0.292353,-0.088059}, + {0.366968,0.358980}, + {-0.753461,-0.700875}, + {0.249173,0.177231}, + {0.182607,-0.592219}, + {-0.058347,0.078718}, + {0.183978,-0.226199}, + {0.648659,-0.221680}, + {-0.656861,-0.408497}, + {0.798399,0.044049}, + {-1.154125,-0.803622}, + {0.008225,-0.136806}, + {0.676763,-0.316637}, + {-0.376109,0.251771}, + {-1.331292,1.241033}, + {0.190767,0.475373}, + {0.578552,1.172062}, + {0.505876,-0.233129}, + {-0.361797,-0.297199}, + {-0.097264,-0.225741}, + {-0.050572,-0.001436}, + {-0.454120,-0.192442}, + {1.120225,-0.898933}, + {-0.216917,0.333024}, + {0.110060,0.750588}, + {0.760030,0.575150}, + {0.975368,0.487183}, + {-0.416180,1.692559}, + {0.804607,-0.335317}, + {-0.669472,0.243862}, + {1.112954,-0.010765}, + {-0.312142,-0.937224}, + {-0.567689,-0.263702}, + {0.041868,0.572080}, + {1.804127,-0.566619}, + {-0.521481,1.063847}, + {1.819315,0.382287}, + {0.380872,-0.611233}, + {0.296314,-0.222157}, + {1.498113,0.879454}, + {1.518674,0.605166}, + {0.019620,-0.040801}, + {1.102724,0.266670}, + {-0.684836,-0.568236}, + {0.519185,-0.779516}, + {-0.226690,-0.818393}, + {0.394623,-1.286799}, + {0.900695,0.487765}, + {-0.799478,-0.400191}, + {-0.830514,-0.562055}, + {0.951365,-0.076491}, + {-0.152298,-1.042769}, + {0.069064,-1.023238}, + {0.053427,-1.985536}, + {-0.686719,0.206313}, + {-0.872301,0.294649}, + {-0.624577,-0.387285}, + {-0.050756,0.173358}, + {-0.721308,0.536205}, + {0.598027,-1.956268}, + {1.243462,-0.102223}, + {0.272178,0.642981}, + {0.490204,-1.332468}, + {-0.459636,1.005367}, + {-0.186912,-0.782287}, + {-0.912943,-0.294037}, + {1.394333,0.134047}, + {-0.104225,0.280412}, + {0.396206,-0.652859}, + {-1.350593,0.267762}, + {-0.192340,0.249925}, + {-0.294556,0.392405}, + {-0.585629,-0.706280}, + {0.416039,-0.105205}, + {0.230197,-0.642631}, + {-0.788622,-0.801780}, + {0.641724,0.143368}, + {0.868609,0.721575}, + {-0.648315,-0.221029}, + {-0.759865,-0.581518}, + {0.050452,-0.421412}, + {0.554405,-0.621567}, + {-0.620533,-0.351417}, + {-0.708260,0.277084}, + {-0.663141,0.789494}, + {0.544607,-0.890151}, + {0.915475,0.208660}, + {-0.089024,-1.629471}, + {0.122487,0.665973}, + {0.778714,-0.473087}, + {0.436424,-0.053708}, + {-0.962989,0.178894}, + {-0.093878,-1.372909}, + {-1.334592,-0.532912}, + {0.914235,-1.047946}, + {0.468339,0.302520}, + {0.144360,0.390533}, + {-0.851259,0.971010}, + {-0.701207,0.150590}, + {0.338131,-0.762748}, + {1.102405,-0.101683}, + {0.187218,1.112117}, + {0.825270,-0.520667}, + {0.520354,0.359599}, + {-0.541755,0.243781}, + {-0.025789,-0.276606}, + {0.663983,-0.217932}, + {-0.424530,0.937543}, + {0.087080,-0.695290}, + {0.125273,-0.056948}, + {-0.574391,0.829597}, + {0.707433,-0.081680}, + {1.053279,0.587411}, + {1.371934,-0.232203}, + {1.377562,-0.181817}, + {0.301180,1.214186}, + {-1.259045,-0.768218}, + {-0.106634,0.320428}, + {0.638354,0.147326}, + {1.035767,1.246632}, + {-0.484057,-0.778008}, + {-0.568900,0.810352}, + {1.343526,-0.565878}, + {-0.078860,0.468044}, + {-0.241550,-0.951938}, + {0.207429,-0.254585}, + {0.447816,-0.015839}, + {0.302137,0.164948}, + {0.563014,0.769551}, + {-1.148579,0.887160}, + {-0.083611,0.680195}, + {0.369397,0.512873}, + {0.381627,1.395393}, + {0.681791,0.515388}, + {-0.542576,-1.534588}, + {1.918437,0.611528}, + {-0.522244,1.209917}, + {-0.093985,-0.455651}, + {-0.107796,0.859061}, + {-1.018800,0.051540}, + {-0.539498,-0.754561}, + {-0.015481,-1.049091}, + {0.407858,0.681992}, + {1.168251,-0.815391}, + {0.280607,-0.068227}, + {-0.528591,0.091963}, + {-1.073499,-0.577745}, + {0.395243,-0.629384}, + {1.095985,-0.516588}, + {-0.136250,-0.015595}, + {-0.696164,0.819270}, + {-0.192516,-0.906690}, + {1.066016,0.386976}, + {0.084233,-0.420819}, + {0.691169,-0.036671}, + {0.304274,-0.143800}, + {0.174184,1.080694}, + {-0.812545,-0.113297}, + {0.498295,-0.183696}, + {1.482711,0.261931}, + {-1.195411,-0.365014}, + {-1.007641,-1.211093}, + {0.180812,-0.582404}, + {-0.600608,0.360349}, + {-0.795459,-0.612485}, + {-0.498403,-0.770827}, + {0.179341,0.252923}, + {0.078219,-0.134409}, + {0.029020,0.530232}, + {-1.082486,-0.964627}, + {0.475449,0.228865}, + {0.945295,-0.971173}, + {-0.376007,-0.822730}, + {-0.048402,-0.952172}, + {0.442908,0.788001}, + {-0.523677,0.317709}, + {0.249828,-0.866534}, + {0.288825,-0.711717}, + {0.749714,1.240367}, + {0.231159,-0.142686}, + {-0.672808,-0.212280}, + {-0.205479,0.294669}, + {-0.867840,1.497664}, + {0.602268,0.171039}, + {-0.439475,-0.397819}, + {0.056233,1.305299}, + {-0.202537,-1.087085}, + {0.879143,0.645517}, + {-0.098655,0.549591}, + {-0.079826,0.092852}, + {0.787565,-0.587819}, + {0.844504,0.083068}, + {-0.316615,-0.486807}, + {0.318470,-0.589745}, + {-0.323499,0.031700}, + {0.794815,1.192794}, + {-1.434705,-0.743418}, + {0.194635,0.496011}, + {-0.068369,1.097164}, + {0.055882,-0.610884}, + {-0.944299,-0.941208}, + {-0.498806,0.156640}, + {0.208447,-0.528226}, + {0.956777,-0.354452}, + {-0.879130,-1.356783}, + {-0.605954,1.495664}, + {-0.025056,0.107553}, + {0.610923,0.435619}, + {-1.008064,0.239170}, + {-0.137944,-0.395381}, + {-0.531626,0.570013}, + {0.039088,-0.074388}, + {-0.602167,-0.940069}, + {0.520930,0.839237}, + {-1.547177,0.015998}, + {0.439233,0.453052}, + {-0.029776,-0.125403}, + {-0.345532,0.150671}, + {0.283820,-0.311247}, + {0.691268,0.439948}, + {-0.297298,0.571417}, + {-0.664505,-0.174490}, + {1.265258,0.472942}, + {0.049889,0.244857}, + {-0.095322,0.754115}, + {-0.029737,-0.356600}, + {0.146569,-1.294022}, + {-0.295789,0.369970}, + {0.200032,-0.482899}, + {0.781168,1.247152}, + {-0.245575,0.442512}, + {-1.080089,-1.224498}, + {0.347986,-0.310894}, + {1.813778,-0.546107}, + {0.347830,1.098305}, + {1.139714,0.083681}, + {0.613995,-0.064648}, + {0.627980,-1.185934}, + {-0.088940,-0.247523}, + {0.293299,0.282612}, + {0.145607,-0.363898}, + {0.682261,0.069479}, + {-0.062785,-0.107404}, + {-0.404708,0.102763}, + {-0.237587,0.193964}, + {0.971118,1.637474}, + {-0.449309,0.565929}, + {1.795769,0.373496}, + {-0.873712,0.616632}, + {-0.196513,-0.640404}, + {-0.186019,-0.672891}, + {0.405301,-0.523678}, + {-1.000323,1.087868}, + {-0.748565,0.346213}, + {-0.533750,0.023908}, + {-0.576248,0.401431}, + {-0.892996,0.627997}, + {-0.467071,1.447969}, + {-0.139768,-1.028884}, + {0.278656,0.126379}, + {-0.238544,0.542289}, + {-0.270467,-1.010170}, + {-0.228088,0.216426}, + {1.142972,-0.627060}, + {1.031965,-0.434600}, + {0.340546,-0.237191}, + {-0.136616,0.924569}, + {-0.852451,0.409948}, + {-0.030960,0.003293}, + {0.751540,-0.478669}, + {0.454761,-0.433887}, + {-1.611252,0.302680}, + {0.003690,-0.193511}, + {-0.883646,-0.472813}, + {-0.217567,0.614904}, + {-0.060909,-0.291651}, + {0.348777,0.769840}, + {-0.205364,-0.945972}, + {0.100935,-1.105324}, + {-0.730546,1.197917}, + {0.037881,-1.364004}, + {-0.790273,-0.500485}, + {1.019594,1.405192}, + {0.553383,-0.760307}, + {0.079813,1.242097}, + {0.724602,0.322399}, + {0.691650,-0.277596}, + {-0.999711,0.814944}, + {-0.103090,0.702437}, + {-0.245544,-0.599467}, + {-0.194306,1.677402}, + {0.436362,1.246626}, + {0.206087,-0.136172}, + {1.747782,0.584106}, + {0.406945,0.500722}, + {0.401018,0.061251}, + {-0.485579,-0.126287}, + {0.102872,0.074572}, + {0.526394,-0.130306}, + {-0.997377,0.317494}, + {0.651321,-0.412428}, + {-1.160759,-1.663891}, + {-1.106270,0.202325}, + {-0.698919,0.195317}, + {0.486878,0.717703}, + {-0.998619,0.718843}, + {0.006452,0.669891}, + {1.418430,-0.380581}, + {-0.079725,0.248431}, + {0.034193,-0.516827}, + {0.087614,-0.200013}, + {-0.608534,-0.918271}, + {-0.096351,-0.320469}, + {-0.803814,-0.983979}, + {-0.563381,0.035484}, + {0.725737,0.753731}, + {0.945344,-0.412933}, + {1.252002,0.158636}, + {-0.615195,-0.442558}, + {-0.181433,-0.153078}, + {-0.131831,0.255303}, + {0.028794,0.045431}, + {-0.901468,-0.112194}, + {-0.240013,0.332503}, + {0.725427,1.028639}, + {-0.832698,-1.074637}, + {-0.087355,2.052221}, + {-1.695433,1.195954}, + {0.348765,0.618883}, + {-1.261736,0.226435}, + {-1.036571,1.108908}, + {-0.631858,0.969470}, + {-0.383927,0.513694}, + {-1.065415,0.305332}, + {-0.770717,-0.211612}, + {-0.042169,-0.577398}, + {0.778070,0.164015}, + {-0.308740,0.253317}, + {0.673013,0.384047}, + {-0.663271,-1.645542}, + {-0.594806,-0.266981}, + {0.031422,0.017209}, + {0.372819,0.179241}, + {-0.451831,-1.222927}, + {-1.473253,-1.466359}, + {-0.021394,1.299407}, + {0.517073,1.048515}, + {-0.492487,0.319604}, + {0.045902,-0.369191}, + {0.761630,-0.646184}, + {-1.143760,-0.877989}, + {-1.207937,0.402411}, + {0.647822,-0.684881}, + {1.561865,-0.520949}, + {0.034907,0.267810}, + {-0.060274,-1.422451}, + {-0.739349,0.707542}, + {-0.536740,-0.575886}, + {-0.052684,-0.290248}, + {-0.123131,-0.743400}, + {-0.514004,0.128876}, + {-0.865755,0.825335}, + {-1.093714,-1.041393}, + {1.399303,-0.474390}, + {-1.593978,-0.302014}, + {-0.647736,0.276940}, + {-1.921976,-1.024671}, + {-0.330629,-1.292647}, + {-0.758354,0.195156}, + {0.469699,0.035348}, + {-0.091111,0.143719}, + {-0.451077,0.345265}, + {0.206307,-1.201955}, + {-0.710390,1.963236}, + {0.375559,-0.576808}, + {0.149091,-1.086740}, + {-0.449572,0.325384}, + {-0.192764,0.050606}, + {0.421631,-0.018053}, + {1.221822,0.036003}, + {0.377659,0.155503}, + {0.659024,-0.972623}, + {0.028611,1.195320}, + {0.766597,1.851492}, + {-0.080947,-0.311238}, + {-0.546674,0.601715}, + {0.100401,-0.217646}, + {0.545637,0.168297}, + {-1.346635,-0.631837}, + {-0.682666,0.621478}, + {0.045733,-0.349107}, + {-1.244812,-0.204358}, + {-0.422721,0.108213}, + {0.079947,-0.097146}, + {-0.020068,0.559199}, + {0.297205,0.513111}, + {0.941640,0.417691}, + {-0.925712,-0.314921}, + {-0.315827,1.287305}, + {0.529011,0.755734}, + {-1.309677,0.875144}, + {-0.230303,0.267374}, + {0.868997,0.302759}, + {-0.111540,0.065648}, + {-0.142909,0.138899}, + {-0.578420,-1.061350}, + {0.245031,0.319639}, + {1.260454,-0.384548}, + {0.982616,0.576288}, + {0.159346,0.750479}, + {-0.087783,1.089588}, + {0.196171,-0.771344}, + {-0.607085,0.048410}, + {-0.068539,-0.651095}, + {0.361776,-0.899946}, + {0.513233,-0.276754}, + {-0.815696,0.184741}, + {0.595970,0.094903}, + {0.115271,-0.496266}, + {1.233400,-0.604420}, + {-1.610600,0.068291}, + {1.685176,-0.540653}, + {1.331054,-0.306383}, + {0.474553,-0.181542}, + {-0.349692,-1.046318}, + {0.466882,0.552974}, + {0.671398,0.059918}, + {1.220610,-0.655965}, + {-1.017139,0.324829}, + {-0.405089,-0.133175}, + {-1.230806,-0.614727}, + {0.053516,0.105043}, + {0.263139,-0.629699}, + {0.284898,-0.362198}, + {-0.210472,0.588927}, + {0.430466,0.051079}, + {0.114497,0.987658}, + {-1.348501,0.053213}, + {-0.087962,0.937382}, + {-0.583326,-0.560167}, + {0.925946,0.254656}, + {-0.883881,-1.030357}, + {-0.800863,0.810453}, + {1.625943,-1.280755}, + {0.323764,-0.336854}, + {0.797648,0.589424}, + {-0.219584,0.872309}, + {0.640241,0.052660}, + {0.266435,-0.575933}, + {0.010578,0.226011}, + {0.416890,0.200529}, + {1.452786,-0.051537}, + {-0.310855,0.121700}, + {-0.632248,-0.915323}, + {0.030787,-0.673870}, + {-1.049494,0.197745}, + {0.047091,-1.145422}, + {0.711093,0.945179}, + {-0.242047,0.140575}, + {0.340217,0.852112}, + {0.630934,1.603793}, + {-0.212128,0.191145}, + {-1.331703,-0.244984}, + {0.474762,-1.272654}, + {-0.064322,0.887641}, + {-0.772426,-0.137183}, + {-0.476909,-0.765121}, + {-0.921167,0.515822}, + {0.706203,-0.726292}, + {-1.297285,1.234220}, + {0.251867,0.516994}, + {0.152440,0.693035}, + {0.355725,-0.222082}, + {0.070784,-0.573142}, + {-0.472779,0.405148}, + {-0.387195,0.495100}, + {0.353239,1.388869}, + {0.436446,0.846312}, + {0.117673,0.291440}, + {0.038314,0.003910}, + {0.832524,0.297668}, + {-0.067787,-0.787236}, + {0.308990,-1.201882}, + {-0.716303,0.682363}, + {-1.541222,0.779205}, + {-0.399833,0.182525}, + {-1.489015,0.201933}, + {-1.085351,-0.414808}, + {-0.593430,-0.460045}, + {-0.136958,0.225884}, + {0.839454,0.132045}, + {0.512016,0.539074}, + {1.021031,-0.818081}, + {-2.082684,-0.974775}, + {1.078381,-0.424613}, + {-0.215449,-1.070854}, + {-0.267500,-0.045646}, + {-0.097457,-0.787663}, + {-1.127850,-0.129833}, + {0.261141,0.361222}, + {-0.047321,-0.078316}, + {-0.213066,-0.934763}, + {-0.693972,0.416171}, + {0.734195,0.443239}, + {-0.761988,1.089263}, + {0.254715,0.226029}, + {0.302206,0.304181}, + {-0.588604,-0.955464}, + {-0.724068,0.962523}, + {1.030788,1.094885}, + {-1.634408,0.959742}, + {-0.343578,0.529590}, + {-0.913576,0.062114}, + {-0.029438,0.785613}, + {-0.978121,-1.357258}, + {0.393594,-0.252471}, + {-0.547676,0.105908}, + {0.540394,-0.607045}, + {0.769064,-0.118855}, + {-0.655730,0.653167}, + {0.624079,0.821763}, + {0.289239,-0.019449}, + {0.171656,-0.435785}, + {1.322478,0.011860}, + {-2.093062,1.275452}, + {-0.213217,0.410659}, + {-0.922502,0.014639}, + {1.481723,-0.168258}, + {-1.494468,-0.526159}, + {0.212115,-0.653763}, + {0.247302,0.440803}, + {-0.227827,-0.164564}, + {-0.730551,0.626705}, + {0.955221,-0.640437}, + {0.083621,-0.495753}, + {0.010779,0.268628}, + {-0.517990,0.518614}, + {-0.127293,0.121118}, + {-1.391215,0.845785}, + {0.376562,0.013170}, + {-0.023148,0.651098}, + {-0.545330,1.030364}, + {0.423751,-1.034899}, + {0.064578,0.069449}, + {0.727233,-0.170816}, + {-0.262943,-0.128789}, + {-0.200262,0.310986}, + {0.252975,0.424229}, + {-0.907615,-0.073997}, + {-0.543862,-0.735072}, + {-0.813343,-0.173314}, + {-1.201885,1.528061}, + {0.656099,0.166095}, + {-1.168671,0.209173}, + {0.835893,0.449546}, + {0.058003,-0.443218}, + {-0.940742,0.333260}, + {0.685444,1.349441}, + {-0.070850,0.383320}, + {-0.784000,0.412765}, + {0.972754,0.248983}, + {-0.611710,0.795272}, + {0.740168,-0.382664}, + {-0.595800,1.134890}, + {-0.291688,-0.192899}, + {-0.324666,1.139416}, + {-0.026190,0.014553}, + {-0.797475,0.108035}, + {0.257394,-0.383343}, + {0.936633,-2.076909}, + {-0.164027,0.563305}, + {-0.029333,-1.077666}, + {-0.776752,0.687745}, + {-0.361438,-1.434606}, + {0.159147,0.129632}, + {0.742079,-0.379723}, + {-0.325943,-0.534641}, + {0.421914,0.776426}, + {-1.185213,1.207085}, + {-0.812063,-0.427344}, + {-1.734549,-0.468229}, + {-0.532631,-0.196973}, + {-1.124256,-0.783135}, + {0.002816,-0.609461}, + {0.497856,-0.858671}, + {0.297182,-0.995354}, + {-0.009002,-0.094468}, + {-0.841901,0.478523}, + {-0.357151,-0.724320}, + {0.684269,-0.106986}, + {-0.875832,0.368872}, + {-0.451512,1.155647}, + {0.007695,0.984606}, + {-0.245539,-0.586946}, + {-0.438202,0.003614}, + {0.272786,0.270776}, + {0.645523,0.541562}, + {-0.237560,-0.637564}, + {-0.848358,-0.612336}, + {-0.277362,-0.783485}, + {0.481862,-0.045225}, + {0.276958,0.039033}, + {-0.226987,1.330472}, + {1.139474,0.298630}, + {-0.452719,0.688238}, + {0.575993,-1.073807}, + {-0.877879,-0.474368}, + {1.162578,-0.352652}, + {-0.616572,-0.422459}, + {-0.353035,1.347897}, + {-1.158601,-0.646731}, + {0.451272,0.588822}, + {-0.141924,0.363633}, + {0.527233,-0.473859}, + {-0.363216,-0.892939}, + {-1.340083,-0.111274}, + {-0.603631,-0.270979}, + {-0.188457,0.012816}, + {-0.811343,1.252060}, + {1.188571,-0.831308}, + {-1.041929,-0.096941}, + {0.712698,0.394449}, + {-0.553583,0.946137}, + {-1.219442,-0.169581}, + {0.864311,-0.554224}, + {-0.262955,1.220312}, + {-0.576259,0.887034}, + {1.004077,0.461673}, + {-1.593715,0.659881}, + {0.531584,0.228323}, + {-0.240945,0.486940}, + {0.922614,-0.455564}, + {0.275567,0.685332}, + {-0.420722,1.269918}, + {0.430470,0.686037}, + {0.034631,-0.235561}, + {-0.314039,-0.525507}, + {0.272926,1.024054}, + {-0.597859,-0.371195}, + {0.369351,0.638611}, + {-0.203028,1.337666}, + {0.939544,0.549966}, + {0.478238,-0.275508}, + {-0.155890,0.618782}, + {0.065502,1.306056}, + {-0.144435,-1.053199}, + {0.675192,-1.042800}, + {0.887757,0.799049}, + {1.032078,-0.335687}, + {-0.416585,-0.671976}, + {-0.277219,0.392748}, + {-1.373308,0.145767}, + {-1.898957,0.258620}, + {-1.507777,-0.799117}, + {0.125190,-1.513681}, + {-0.555275,-1.147338}, + {0.109193,0.630449}, + {0.850572,-0.428761}, + {0.762598,-0.418743}, + {-0.658676,0.120374}, + {0.219889,0.679444}, + {0.960891,0.748391}, + {0.870463,0.591815}, + {1.008497,0.258433}, + {-0.397245,0.229091}, + {0.079530,-0.765548}, + {-1.189197,0.391146}, + {1.090130,-0.176457}, + {0.878735,-1.220042}, + {-0.282687,0.045037}, + {0.690295,0.760265}, + {-0.064226,-1.270045}, + {0.451127,0.620894}, + {0.518653,-0.291379}, + {1.427926,0.763723}, + {0.013799,-0.112367}, + {-0.284511,0.556617}, + {0.023375,-1.498134}, + {0.527409,0.837385}, + {-0.337269,0.119037}, + {0.397375,1.457268}, + {-0.915267,1.637006}, + {0.189049,0.517475}, + {0.118637,1.005364}, + {0.396135,-1.604041}, + {-0.089106,-0.609048}, + {-0.028093,0.096681}, + {0.978246,-0.222336}, + {0.078209,0.502843}, + {0.317957,-0.209239}, + {-0.235391,-1.067509}, + {0.672564,-0.630147}, + {0.573721,0.505773}, + {-0.211566,0.007962}, + {0.493715,-1.029766}, + {0.610607,-0.973276}, + {-0.204172,-0.197208}, + {1.323638,-0.298948}, + {-1.036127,-1.456968}, + {-0.650336,-0.262731}, + {-0.324206,-0.556171}, + {0.184158,-0.349058}, + {0.439262,0.058320}, + {-1.534475,0.227140}, + {-0.631174,1.780843}, + {-0.755815,-0.501755}, + {0.146835,-0.731846}, + {0.859454,0.963689}, + {0.800582,-0.146938}, + {1.372001,0.638182}, + {-0.919889,-0.622212}, + {0.681129,-0.602858}, + {0.172753,1.274081}, + {-0.669045,-0.735854}, + {1.072433,-0.430603}, + {-0.945714,0.249387}, + {0.058404,-0.356905}, + {0.280842,1.395081}, + {-1.333727,0.175503}, + {-0.162653,0.997135}, + {1.349928,-0.778412}, + {0.351735,-0.432853}, + {0.130525,-0.679365}, + {-0.255894,0.000290}, + {-0.033975,0.753936}, + {0.880727,0.592943}, + {-0.432137,-1.241763}, + {-0.916417,0.629270}, + {-0.417353,0.281667}, + {1.027431,-0.561347}, + {-0.313624,-0.862803}, + {0.688305,-1.114407}, + {0.407758,0.350545}, + {-0.084867,-0.097319}, + {0.659983,0.568765}, + {-0.226611,0.133226}, + {-0.215283,-0.443496}, + {0.718936,-0.037813}, + {0.933978,-0.233086}, + {-0.516582,0.734210}, + {0.736643,0.706611}, + {0.305234,0.000249}, + {-0.370270,0.590320}, + {0.962118,-0.925841}, + {-1.048981,-0.103269}, + {0.044995,0.871437}, + {0.797065,-0.797195}, + {0.012374,1.464487}, + {-0.744670,-0.902590}, + {-0.975379,0.299666}, + {-0.751756,-0.171825}, + {-0.478057,1.113745}, + {-0.351503,0.127088}, + {0.589924,-0.913712}, + {1.035181,-0.319182}, + {-0.226216,-0.426067}, + {0.740355,0.631193}, + {-0.506299,-2.521827}, + {-0.734618,-0.279302}, + {-0.793006,0.934782}, + {0.400248,0.019342}, + {-0.460130,0.039696}, + {-1.182922,-0.759926}, + {-0.322657,0.433662}, + {1.295318,0.089107}, + {0.776325,-0.202020}, + {-1.354920,-0.019325}, + {-0.070378,-0.628537}, + {-0.313186,-0.122804}, + {0.679820,-0.407435}, + {0.568100,-0.865077}, + {-0.270622,-0.118376}, + {-0.120073,1.163957}, + {-2.521375,-0.093829}, + {0.242298,-0.793270}, + {0.110432,1.286578}, + {0.589488,0.684460}, + {-0.130721,-0.833847}, + {-1.196174,0.719174}, + {1.558364,-0.705261}, + {0.040922,0.325140}, + {-0.591884,0.749348}, + {-0.121397,0.219684}, + {0.378761,-0.899270}, + {-0.292474,-0.083947}, + {-0.868838,-1.003608}, + {0.229984,-1.746968}, + {-0.653827,-0.413638}, + {-0.724029,0.485097}, + {0.014806,1.481808}, + {-0.493384,-0.210216}, + {0.722527,-0.225007}, + {1.054819,1.601291}, + {-0.282008,-0.282742}, + {-0.866851,0.072647}, + {-1.735218,-0.205276}, + {-0.689724,-0.951328}, + {0.216225,0.177342}, + {-0.124588,-0.162394}, + {0.489274,-0.190430}, + {-0.057484,-0.451252}, + {-0.838170,0.008589}, + {-0.012782,1.507933}, + {-0.471353,0.394553}, + {-0.190237,0.685665}, + {0.557875,-0.620214}, + {-0.059726,0.397332}, + {-0.592982,-0.006411}, + {-0.123340,0.161368}, + {-0.854995,0.700566}, + {-0.572703,-0.252267}, + {-0.763440,0.344721}, + {0.021265,0.446768}, + {-0.586946,0.323793}, + {0.180415,0.043743}, + {-0.288882,-0.511805}, + {2.624556,-0.567090}, + {0.551481,0.803221}, + {-0.143453,-0.586976}, + {0.992092,1.533923}, + {-0.318124,-0.550864}, + {1.318704,-0.063433}, + {-0.155347,1.117042}, + {0.058911,-0.944546}, + {0.108052,-0.051107}, + {-1.035368,0.386023}, + {-0.823147,0.171737}, + {0.846301,0.680001}, + {-0.110664,0.468723}, + {-0.083706,0.625575}, + {0.290091,0.858146}, + {-0.662183,-0.590796}, + {-0.288190,-0.353492}, + {-1.159802,-1.337642}, + {-0.306885,-0.750638}, + {0.044691,-1.653807}, + {-0.615050,0.289028}, + {-0.201731,0.465221}, + {1.008004,-0.060762}, + {-0.550498,0.300423}, + {-0.116548,-0.013405}, + {0.549048,1.586230}, + {0.759367,-0.971517}, + {1.323636,1.681829}, + {0.170062,0.089436}, + {-0.211072,0.704819}, + {-0.419963,-0.128266}, + {0.626398,-0.551576}, + {1.543900,0.511508}, + {-0.784514,1.183790}, + {0.502940,1.028658}, + {-1.016714,0.248965}, + {0.112604,0.111350}, + {-0.123006,0.683764}, + {0.021753,-0.247159}, + {0.138703,1.086674}, + {-0.051887,-1.076659}, + {1.737884,0.864115}, + {-0.215718,0.020311}, + {0.666013,-0.799401}, + {-1.108657,0.547216}, + {0.552800,2.316691}, + {-0.103811,0.195943}, + {-0.559387,0.399860}, + {-0.574699,-0.002171}, + {0.494645,0.839499}, + {1.539942,0.061094}, + {-1.185473,0.157370}, + {0.687725,-0.726402}, + {1.062304,0.143174}, + {-0.231306,0.431820}, + {0.181212,0.243572}, + {0.048089,1.016969}, + {1.019749,-0.468151}, + {0.272841,-0.383551}, + {0.606381,-0.216956}, + {-1.061207,-1.080103}, + {-0.174838,0.363043}, + {-0.498895,1.116096}, + {-0.098641,0.561958}, + {0.043930,0.385439}, + {-0.427768,-1.146650}, + {0.923076,-0.396539}, + {0.754689,0.963067}, + {-0.037038,-0.203416}, + {0.019305,-0.562339}, + {-0.797642,-0.371491}, + {0.081456,-0.831708}, + {0.208751,-1.180105}, + {-0.774074,-0.978951}, + {1.266618,0.537957}, + {-0.712267,0.567095}, + {0.145303,-0.817414}, + {1.967789,1.007710}, + {0.193202,0.217408}, + {-0.798454,-0.633302}, + {-0.330441,0.650118}, + {-0.007839,0.797737}, + {-0.990287,0.006108}, + {-0.443475,1.373610}, + {0.356907,-0.324058}, + {-0.456490,0.150888}, + {0.778863,-0.215198}, + {-0.465454,-0.433403}, + {0.906855,0.653127}, + {0.492398,-0.648731}, + {0.945877,-1.419218}, + {-0.177893,-0.646512}, + {1.411359,-0.241056}, + {-0.264133,-1.505842}, + {-0.366946,0.985009}, + {-0.128469,-0.052593}, + {0.167171,-0.446152}, + {0.919920,0.002816}, + {0.119854,-0.960683}, + {1.395234,-1.093261}, + {0.264784,0.684038}, + {0.136742,-0.623673}, + {-1.157844,0.208610}, + {-0.081146,-0.545579}, + {0.129620,0.317296}, + {-0.565284,0.051918}, + {-0.552605,0.036032}, + {0.605695,-0.026673}, + {0.050425,2.453665}, + {0.044827,-1.616143}, + {-0.113293,0.653822}, + {1.093501,2.247677}, + {0.695921,-1.033199}, + {0.000694,-0.086366}, + {0.421101,0.539692}, + {0.051940,-1.072276}, + {0.040107,-0.888686}, + {-0.229449,1.123220}, + {1.198503,-0.862325}, + {0.700102,0.555513}, + {-0.119860,-0.774937}, + {-0.028011,1.437656}, + {1.000033,0.429811}, + {0.381991,-0.471777}, + {-1.061909,0.633338}, + {0.795537,-0.653199}, + {1.595592,-1.118207}, + {-0.084673,-1.361223}, + {-0.624297,0.764246}, + {0.089882,1.013592}, + {-0.533656,0.632749}, + {0.465736,0.775404}, + {-0.888801,-0.059761}, + {0.523573,0.053779}, + {-0.209593,0.885880}, + {0.748105,0.127068}, + {0.599795,-1.139121}, + {-0.077588,0.842374}, + {0.761840,-0.795831}, + {0.709548,0.183950}, + {-0.252544,0.680008}, + {0.570220,0.515018}, + {0.266137,-0.206870}, + {-0.885632,1.679647}, + {1.150557,0.483125}, + {-0.468721,-1.841706}, + {0.271059,0.926911}, + {-0.154149,-0.322614}, + {-0.329320,1.218566}, + {-0.171047,-1.007784}, + {0.223529,-0.505620}, + {0.772175,0.801805}, + {-0.341824,0.518301}, + {0.968368,-1.633597}, + {0.073692,-0.583842}, + {-0.953372,-0.161117}, + {0.551488,0.447077}, + {0.020273,-0.505357}, + {0.365393,-0.032102}, + {0.844367,-0.639689}, + {1.018752,0.751834}, + {1.126097,-0.613405}, + {1.016788,-0.019078}, + {0.623747,0.592169}, + {-1.319641,0.298078}, + {-0.329394,-0.423323}, + {0.364704,-0.653483}, + {0.617694,-0.252054}, + {-0.591705,1.619074}, + {-0.161785,1.838932}, + {0.564582,-0.723667}, + {0.225778,0.243980}, + {-0.037796,0.502040}, + {0.367842,-1.021410}, + {-0.427836,-0.366767}, + {-0.488887,1.324747}, + {0.283351,-0.475819}, + {-0.368885,-0.343402}, + {0.022111,-1.503025}, + {0.608174,0.232807}, + {0.872253,-0.186510}, + {-0.550839,-0.327475}, + {-0.154591,-0.267873}, + {-0.747008,-0.379431}, + {-0.277511,-0.951636}, + {-0.759266,0.574239}, + {1.154286,0.179194}, + {-0.112772,-0.817203}, + {0.200759,0.799191}, + {-0.502025,0.432883}, + {-1.119323,-0.074693}, + {1.254542,0.141465}, + {0.080510,0.266965}, + {1.402806,0.382574}, + {0.817240,-0.115142}, + {0.507720,0.176294}, + {0.210651,-0.143840}, + {-0.689945,1.732906}, + {0.235579,-0.641823}, + {0.851720,-0.271216}, + {-0.214092,-1.383215}, + {1.260678,-0.375676}, + {-0.342547,0.300925}, + {0.157321,-1.216358}, + {-1.291505,0.269752}, + {-0.813264,0.966839}, + {0.385009,-0.966745}, + {0.048812,0.037934}, + {0.157922,0.072546}, + {0.136019,-0.636157}, + {-1.131118,0.701695}, + {0.057882,0.542163}, + {-0.289670,-0.556624}, + {0.296565,0.901636}, + {0.811896,0.152258}, + {0.071886,-0.310387}, + {0.248307,-1.423973}, + {-0.077694,-0.208889}, + {0.351881,-0.374276}, + {-1.108993,0.435304}, + {0.689461,-0.661618}, + {-0.847280,0.417742}, + {-0.693780,-0.030547}, + {0.205481,0.163966}, + {1.152296,0.501315}, + {0.421218,-0.000555}, + {-0.796311,0.281834}, + {-0.269010,1.052164}, + {0.133541,-0.454531}, + {-0.412860,1.370429}, + {0.616688,0.124832}, + {0.702940,-1.203623}, + {0.675882,-0.390202}, + {0.830890,1.250459}, + {0.674844,0.665324}, + {-0.043831,0.707066}, + {-0.886906,-0.060713}, + {0.677298,-0.111700}, + {-0.754756,-0.380721}, + {-0.561574,0.787921}, + {-0.138727,-0.246949}, + {0.399551,0.257836}, + {0.391218,-0.046240}, + {-0.604638,-0.547392}, + {1.211615,0.045085}, + {-2.243039,-0.736534}, + {0.779312,0.843648}, + {0.162298,0.157163}, + {-0.140700,0.766237}, + {-0.144998,0.378899}, + {0.417087,0.656509}, + {-0.663537,0.226287}, + {0.623830,0.333788}, + {2.231783,0.374867}, + {0.734099,0.049999}, + {1.036979,-0.688127}, + {-1.040401,-0.707128}, + {0.381121,-0.100134}, + {1.359817,-0.400703}, + {-0.552157,-1.396689}, + {0.259124,-0.224525}, + {-0.273705,-0.347394}, + {-0.409249,0.216952}, + {-0.216934,-0.899068}, + {-0.235146,0.030945}, + {-0.889038,0.360220}, + {-0.157354,0.100057}, + {-0.036127,-0.499812}, + {-0.348823,0.151622}, + {0.279825,-0.589387}, + {-0.933342,0.643324}, + {0.555767,-0.017369}, + {-0.011276,-0.013992}, + {-0.434804,0.253158}, + {0.675855,-0.224374}, + {-0.805744,0.659219}, + {0.808692,0.008962}, + {0.397507,-1.041463}, + {-0.127428,-0.570829}, + {-0.029020,-0.201817}, + {-1.009712,-0.877845}, + {-1.216129,0.783185}, + {0.328932,-0.747150}, + {-0.854801,-0.178626}, + {-0.785073,-1.023245}, + {0.788804,0.147804}, + {-0.654940,0.835733}, + {1.194529,0.469089}, + {-0.435047,-0.112630}, + {-0.398296,0.298359}, + {0.614442,-0.831401}, + {0.898647,1.252811}, + {-0.651719,0.063096}, + {0.829332,-0.130964}, + {-0.644862,0.485383}, + {0.099189,-1.241679}, + {0.232553,-1.087991}, + {0.827992,0.327188}, + {0.251847,-0.542311}, + {0.114473,0.172203}, + {-0.607207,-0.449144}, + {-0.376521,0.290727}, + {-0.132065,0.363772}, + {0.435356,-0.571154}, + {-0.190653,0.248960}, + {0.651496,-0.923586}, + {0.512997,-0.004873}, + {-0.236174,-0.568753}, + {0.932160,-1.334080}, + {0.155451,0.672475}, + {-0.911918,-0.030052}, + {0.263176,0.406002}, + {0.304970,-0.011967}, + {-0.410390,-0.330155}, + {-0.141643,0.047151}, + {-0.172968,-1.012272}, + {-0.372838,0.560728}, + {-0.855840,0.042006}, + {-0.164063,0.636134}, + {-1.109047,-0.279656}, + {-0.069774,-0.604646}, + {-0.282135,-0.394121}, + {0.176084,0.052311}, + {0.487541,-0.565642}, + {-0.208335,0.518275}, + {-0.149021,-0.363198}, + {-0.249631,-0.090729}, + {-0.249841,-0.596483}, + {0.640211,-0.976106}, + {0.326645,0.866942}, + {1.183765,0.830576}, + {-0.029594,-0.620946}, + {1.115148,-0.337932}, + {1.567311,0.261972}, + {-0.721293,-0.564232}, + {-0.357507,0.803439}, + {-1.016735,-0.027591}, + {-0.426745,1.104032}, + {0.443712,1.244449}, + {1.160755,-0.838377}, + {-0.819387,-0.128786}, + {0.288092,0.008755}, + {-0.515644,0.101036}, + {0.364482,-0.130023}, + {-0.229438,-0.654899}, + {0.906635,-0.125711}, + {-0.159322,-0.304040}, + {-1.211824,0.158356}, + {-0.012123,-0.488427}, + {-0.426069,-0.835684}, + {-0.125217,-1.170805}, + {-0.270562,0.000386}, + {0.623183,-0.945317}, + {0.848419,-0.522606}, + {1.250635,0.444407}, + {0.492130,1.050228}, + {1.080375,-0.338691}, + {-0.764704,-1.279899}, + {0.741656,0.485046}, + {0.956357,-1.023715}, + {-0.247405,-0.820810}, + {-0.149085,-0.107801}, + {-0.570624,1.043465}, + {-0.115018,-0.641550}, + {-0.616512,-0.289516}, + {1.176485,-0.172412}, + {-0.362269,1.717443}, + {-0.817064,-0.370700}, + {-0.465179,0.259246}, + {-0.642608,0.664244}, + {0.747615,0.390002}, + {-1.838046,-0.673345}, + {-0.071150,-0.063051}, + {0.124401,-0.037791}, + {0.721531,-0.349121}, + {0.948579,-0.683095}, + {-0.296344,-1.657454}, + {-0.244777,-0.050854}, + {-0.355675,-0.088336}, + {0.834088,-0.200241}, + {-1.139669,0.315556}, + {-0.080632,-0.198803}, + {-0.187648,0.739006}, + {0.609210,-1.146719}, + {0.133987,0.472373}, + {1.301981,-0.658052}, + {0.148344,0.175711}, + {0.482189,-1.298825}, + {-0.666823,-0.399625}, + {0.067421,-0.725454}, + {-0.052146,-0.168842}, + {0.332959,0.334690}, + {-1.054764,0.239030}, + {-0.165250,-0.447066}, + {-0.428016,1.320568}, + {0.510212,0.318306}, + {0.451920,0.645015}, + {1.606643,0.236357}, + {0.230974,0.123761}, + {-0.049062,0.112286}, + {0.479037,0.015434}, + {-0.287389,0.872496}, + {1.067029,0.499731}, + {-0.126337,0.779721}, + {-0.370434,0.612051}, + {0.075632,0.614917}, + {-0.528660,-0.850174}, + {0.487266,-0.590261}, + {-0.234836,0.263938}, + {-0.065654,2.081570}, + {-0.636267,-0.906258}, + {-0.803871,0.321421}, + {-0.328638,0.333370}, + {-0.516140,0.175497}, + {0.347902,-0.402807}, + {0.411276,0.362019}, + {0.440469,0.412853}, + {1.107078,-0.338276}, + {0.856038,-0.131811}, + {-0.369578,0.324333}, + {0.516267,0.144410}, + {-0.706354,-0.923046}, + {1.199280,-0.679079}, + {-0.206381,0.733361}, + {-1.118980,-0.339299}, + {0.249695,1.301003}, + {-0.001465,1.070052}, + {-0.888923,-0.187516}, + {0.810337,0.313939}, + {0.305196,0.026000}, + {0.494726,1.024847}, + {1.476541,-0.802107}, + {-0.526713,0.266385}, + {0.384008,-0.961735}, + {1.282973,-0.698481}, + {0.988486,0.038408}, + {-0.219075,-1.024923}, + {-0.466889,0.255891}, + {0.003917,0.530058}, + {-0.767964,-0.385498}, + {-0.377691,0.462312}, + {0.026027,-1.093603}, + {-0.458202,0.027801}, + {0.806314,-0.293232}, + {0.050386,0.705391}, + {0.738212,0.099567}, + {1.685787,0.176921}, + {-0.892685,-0.318613}, + {1.109295,-0.356620}, + {-0.037037,-0.399946}, + {1.099257,0.066189}, + {-0.138197,0.931202}, + {0.352476,0.541835}, + {-0.234773,1.811281}, + {0.220325,1.006277}, + {1.183808,0.818720}, + {0.412037,-0.266925}, + {-0.046189,0.101378}, + {-0.525259,0.184060}, + {0.223098,-0.866883}, + {0.759485,1.089619}, + {-0.645569,0.593185}, + {-0.363564,-0.111653}, + {-0.760729,0.424275}, + {-0.173270,0.825271}, + {-0.893186,0.404038}, + {0.757566,0.583220}, + {-0.256129,-0.077900}, + {0.284986,0.630869}, + {0.664454,0.481663}, + {0.119009,0.113249}, + {-0.205947,1.010834}, + {0.932543,-0.060003}, + {0.274266,-0.406043}, + {-0.247609,0.396317}, + {-0.442815,0.120444}, + {-1.305720,0.295270}, + {0.936322,0.968362}, + {-0.571598,-0.407698}, + {-0.392774,-0.484139}, + {0.822763,0.339368}, + {-0.517289,0.041135}, + {0.147543,-0.792703}, + {-1.670020,0.099579}, + {-0.299869,-0.266431}, + {0.605640,-0.814238}, + {1.222721,1.050723}, + {-0.467391,-0.124769}, + {-0.575869,0.609053}, + {1.713472,0.570511}, + {0.042960,-1.006402}, + {1.239476,-0.082176}, + {0.378559,-0.955065}, + {-0.165652,0.451352}, + {0.429384,-0.053004}, + {-0.244308,1.056232}, + {0.830270,-0.183125}, + {-0.600558,-1.360258}, + {0.171056,-0.003685}, + {0.839484,0.430587}, + {-0.553197,-1.112661}, + {0.472149,1.241828}, + {0.428034,0.237235}, + {0.611704,-0.377012}, + {-0.231170,-0.306880}, + {0.087621,0.844398}, + {1.390622,0.674419}, + {0.387463,-0.353450}, + {-0.150300,0.730488}, + {-1.062157,0.504289}, + {-0.531514,0.020223}, + {0.128882,-0.065820}, + {0.331307,0.862964}, + {-0.725060,0.793610}, + {0.668800,-2.340218}, + {0.306622,0.510434}, + {-0.240424,0.483310}, + {0.755874,-0.307130}, + {0.307453,-0.534037}, + {-0.260084,-0.957092}, + {0.030535,-0.356006}, + {0.063740,0.338408}, + {0.137347,0.408912}, + {0.071998,-0.512812}, + {-0.816655,0.667604}, + {0.206418,0.459734}, + {-0.199134,-1.021477}, + {-0.027864,-0.229509}, + {0.029766,0.406308}, + {0.263539,0.950641}, + {1.107474,0.510104}, + {0.701356,-0.092664}, + {-0.332519,0.882492}, + {-0.259295,0.542719}, + {0.803323,-0.516191}, + {-0.810940,0.828519}, + {-0.333099,0.493898}, + {0.803446,0.041317}, + {-0.752852,-0.397360}, + {-0.508714,-0.341192}, + {-0.998590,0.444147}, + {0.540311,0.590371}, + {0.352505,-0.284619}, + {-0.330681,0.699920}, + {-0.428966,0.610587}, + {-1.333091,-0.297171}, + {0.345433,-0.821063}, + {0.993852,0.062134}, + {0.729285,0.480559}, + {-0.038753,-0.071297}, + {-0.388438,-0.398816}, + {-0.746620,-0.076653}, + {0.345309,0.817757}, + {0.769405,-0.063687}, + {0.092044,-0.442898}, + {1.029397,-0.869702}, + {0.832081,0.437601}, + {-0.374608,-0.269611}, + {-0.728890,-1.033769}, + {-0.207543,1.059676}, + {0.140337,0.321861}, + {-0.268235,0.376937}, + {0.554032,-1.522496}, + {0.302898,1.115891}, + {-0.566679,1.087246}, + {0.209126,-0.299056}, + {0.183449,-0.446472}, + {0.769257,1.156924}, + {-0.426186,-0.534314}, + {1.357257,-0.027091}, + {0.125598,-0.148277}, + {0.361150,-0.612232}, + {0.733645,-0.215266}, + {-0.599140,-0.087500}, + {0.364386,-0.379064}, + {0.106744,0.427322}, + {0.244401,-0.090466}, + {-0.086618,0.290300}, + {-0.769588,1.227312}, + {0.410929,0.406906}, + {0.033896,-0.301329}, + {1.368098,-1.264228}, + {0.265425,0.246094}, + {-1.089731,0.655995}, + {-0.959035,-0.323536}, + {-0.177452,0.299655}, + {-1.085650,0.751856}, + {-0.934940,-0.467314}, + {0.157832,-1.370121}, + {-0.756801,1.174560}, + {-0.238213,1.484015}, + {0.103337,0.562886}, + {-0.883352,-0.457006}, + {-0.619941,-0.072602}, + {0.827989,-0.576543}, + {-0.274512,0.688768}, + {0.192892,0.046977}, + {0.494114,-1.198486}, + {0.210812,-1.483980}, + {0.068552,-0.412908}, + {0.768963,0.512225}, + {0.887015,-0.416106}, + {0.069268,-0.161404}, + {1.158016,0.428234}, + {1.414889,0.177849}, + {-0.043316,-0.734135}, + {1.519925,-0.641341}, + {-0.954973,-0.096053}, + {-0.627640,0.832967}, + {-0.128482,0.227255}, + {0.096457,-0.172163}, + {-1.188885,0.383040}, + {-0.636699,0.641324}, + {0.760031,-0.811875}, + {-0.020737,0.443516}, + {0.457384,-0.365880}, + {-0.876749,1.149372}, + {0.295054,0.679878}, + {0.023256,0.103668}, + {-0.327805,-0.125698}, + {0.020041,0.216254}, + {-0.306899,-0.187019}, + {1.085265,0.158704}, + {-0.145690,-0.394788}, + {0.338803,0.342693}, + {-0.515034,-1.539775}, + {-0.389804,1.336893}, + {-0.094832,0.858926}, + {-0.697567,-0.301372}, + {0.304157,-0.457016}, + {0.445920,0.840317}, + {0.367189,-0.400123}, + {-0.537674,0.319642}, + {0.040484,0.213835}, + {0.486631,0.235979}, + {-0.927168,0.494577}, + {0.095336,0.538537}, + {-0.685255,-0.341503}, + {-0.414110,0.730628}, + {-0.249497,-0.384687}, + {-0.381906,0.335050}, + {-0.296216,0.192564}, + {0.259756,0.167208}, + {-0.631983,0.213763}, + {-0.107557,0.031968}, + {0.086282,-0.608626}, + {-0.520260,-0.616549}, + {-0.380245,1.375046}, + {-1.355688,-0.262657}, + {-1.404467,0.037742}, + {0.045811,0.570009}, + {-0.416171,-0.129814}, + {0.370554,0.880282}, + {0.719642,1.595834}, + {0.056979,1.643866}, + {0.509780,-0.269105}, + {-0.035170,-0.008985}, + {-0.380304,0.435292}, + {-0.061932,0.766256}, + {0.417917,0.120335}, + {-1.059375,0.118735}, + {0.561525,-0.136216}, + {1.044780,0.316513}, + {0.278741,0.285996}, + {0.445276,1.914646}, + {1.135214,-0.056030}, + {1.552693,-0.468664}, + {0.107992,0.196631}, + {0.010882,-0.782850}, + {0.411889,0.243120}, + {1.041102,0.506174}, + {-0.436580,1.011682}, + {0.234764,-1.107368}, + {-0.369947,-0.283590}, + {0.712020,-0.042864}, + {0.256171,-0.289042}, + {-0.664674,-0.389437}, + {0.501317,-0.199763}, + {-0.233973,0.776302}, + {-0.551974,-0.311394}, + {-1.213793,-0.063365}, + {-0.942542,0.886742}, + {0.120656,-0.927157}, + {0.848886,-0.191111}, + {-0.085995,0.712069}, + {-0.121119,0.712586}, + {0.795790,0.039031}, + {1.130273,-1.091505}, + {-1.009660,-0.084673}, + {-1.391243,1.439570}, + {-0.790172,1.190427}, + {-1.055203,1.031347}, + {0.351972,-0.261797}, + {0.309700,-0.121583}, + {-1.395336,-0.368211}, + {-0.242807,0.043287}, + {-0.091725,1.525055}, + {0.222701,-0.585086}, + {-0.197990,1.109946}, + {0.683433,0.234584}, + {0.778488,1.031004}, + {-1.728844,-0.828213}, + {-0.305833,0.235194}, + {0.839395,1.013991}, + {-0.732283,-1.178569}, + {0.751353,0.525831}, + {-0.608151,-0.209578}, + {-0.760489,0.909863}, + {-0.941207,0.596632}, + {0.113422,0.124614}, + {-0.677100,-0.845145}, + {-2.116992,-1.043945}, + {0.443954,1.264070}, + {-0.844221,-0.548022}, + {0.073296,0.266820}, + {0.606826,-0.308290}, + {-0.142944,0.057349}, + {0.072881,0.302992}, + {-0.294356,-1.221644}, + {0.671911,0.295323}, + {-0.409702,-0.847209}, + {0.266690,-0.020814}, + {1.417976,0.528433}, + {0.294250,-1.224903}, + {-0.438673,-0.509542}, + {0.044148,0.398124}, + {-0.812297,-0.912451}, + {-0.879513,-0.624383}, + {0.758342,0.704452}, + {0.563399,-1.164427}, + {0.809358,-0.309169}, + {-0.076009,-1.386514}, + {-0.580469,0.458582}, + {0.513892,0.214365}, + {-0.640728,-0.171872}, + {-0.521270,-0.133816}, + {-0.843834,0.906054}, + {-1.123661,0.041336}, + {0.082797,0.087755}, + {0.904721,1.160552}, + {-0.238756,0.127971}, + {-1.306804,0.307469}, + {-0.097808,0.500074}, + {-0.007891,-0.206617}, + {-1.058789,-1.223922}, + {-0.086817,1.141660}, + {-0.672100,0.422630}, + {1.107477,0.445402}, + {-1.048691,0.148970}, + {0.860657,-0.307406}, + {-0.075900,-0.772589}, + {0.085372,-0.654328}, + {-0.402544,0.348887}, + {0.836413,-0.212447}, + {0.969845,-0.432787}, + {1.678800,-0.719544}, + {0.122685,0.736764}, + {-0.610210,-0.231955}, + {-0.602630,0.861072}, + {1.689118,-0.524512}, + {-0.570388,-0.710299}, + {0.359182,-0.302528}, + {-0.584968,0.029896}, + {0.376150,-0.101358}, + {0.190034,-0.895052}, + {-0.083246,0.352043}, + {0.488237,-0.109218}, + {0.864959,-0.134808}, + {-0.489859,0.046721}, + {-0.285949,-0.556426}, + {-0.090628,-0.144285}, + {-0.407313,0.094491}, + {-0.754715,0.269388}, + {-0.110048,0.336987}, + {-1.504402,0.827809}, + {-1.144984,0.736338}, + {-0.615585,-0.119038}, + {-1.320089,0.799899}, + {0.146051,-1.613330}, + {-0.203844,1.002752}, + {1.005593,-1.051012}, + {0.590068,0.881226}, + {1.034314,0.478533}, + {-0.807146,0.527922}, + {-1.431626,1.052176}, + {0.254060,-0.588784}, + {-0.552606,0.801991}, + {0.571316,-0.099644}, + {1.906518,0.779457}, + {0.661004,0.688072}, + {-0.848444,-0.767891}, + {-0.446525,1.557097}, + {0.342626,0.070643}, + {1.499481,-0.562495}, + {0.474748,-0.065518}, + {-1.305470,0.236428}, + {-0.996922,0.424136}, + {0.109899,0.116446}, + {-1.376289,-1.178174}, + {1.094583,0.176159}, + {-0.660629,0.735661}, + {0.324773,-0.650471}, + {-0.050363,0.168514}, + {1.411432,0.431589}, + {-0.841104,1.189949}, + {-0.090368,0.422103}, + {-0.138836,-0.227462}, + {0.251194,0.456981}, + {-0.456550,-1.052269}, + {-0.585470,-0.733649}, + {0.718189,0.069608}, + {-0.215514,0.144581}, + {-0.295208,-0.293870}, + {0.064279,1.659733}, + {-0.639890,0.107245}, + {0.671313,-0.308464}, + {0.171154,0.201673}, + {0.530860,-0.395579}, + {0.405182,0.111475}, + {-1.105560,0.477897}, + {-0.469701,-0.814646}, + {-0.310904,-0.140531}, + {0.906292,0.445761}, + {0.641656,-0.711619}, + {1.811121,-0.499532}, + {0.544038,0.258314}, + {0.240229,0.023662}, + {-0.161251,-0.927410}, + {0.526134,0.501783}, + {-0.633589,-0.525689}, + {-0.969783,1.421790}, + {0.164651,-1.234975}, + {-0.945772,0.158957}, + {0.120218,-0.221355}, + {0.234672,-0.016298}, + {-0.397618,-0.661839}, + {1.072883,-0.141947}, + {-1.348040,0.586734}, + {-0.872801,0.434857}, + {-1.430760,0.165192}, + {-0.636803,0.781150}, + {-0.071279,0.396819}, + {-0.298115,0.418331}, + {0.831866,-0.535220}, + {0.958718,0.633147}, + {1.412960,-0.748229}, + {-0.178002,-0.206609}, + {-0.024151,0.915775}, + {1.393923,0.405981}, + {-0.206648,1.302225}, + {0.259960,0.096155}, + {0.842216,0.222933}, + {-0.375179,0.699708}, + {-1.103264,-0.776247}, + {0.193353,-1.171155}, + {0.205492,0.076179}, + {-0.072841,-1.186499}, + {-0.401707,1.760304}, + {-0.205922,0.764063}, + {0.028046,0.211591}, + {0.009746,0.166249}, + {-0.523126,0.458907}, + {0.775557,-0.863099}, + {0.597490,0.287191}, + {1.398946,-0.443293}, + {-0.610123,-1.801501}, + {-0.659803,0.440813}, + {-0.254009,0.206463}, + {0.023678,-1.708605}, + {1.336293,-1.666408}, + {-0.624224,-0.008318}, + {-0.391454,-0.672562}, + {0.005607,0.074204}, + {-0.563962,0.743411}, + {-0.451022,-0.173040}, + {-0.382636,0.398129}, + {-0.036862,-0.079446}, + {-0.008467,-2.296086}, + {0.023278,1.499503}, + {-0.064032,-0.525729}, + {1.457191,-0.108098}, + {0.321643,0.192680}, + {0.121531,0.798915}, + {0.925207,0.317706}, + {1.826658,0.097183}, + {-1.022560,0.131480}, + {-0.318490,1.086323}, + {-1.671511,-0.990183}, + {-0.087723,1.093251}, + {-0.866849,0.094690}, + {0.559302,-0.868112}, + {-0.607928,-1.491484}, + {-0.369056,0.883585}, + {-0.373229,-0.023122}, + {-0.971052,0.792590}, + {0.851785,-0.009613}, + {-0.460853,0.096153}, + {-0.755498,0.166030}, + {-0.598639,-0.848533}, + {0.291127,-0.247983}, + {-0.829961,-1.371573}, + {-0.887194,-0.038222}, + {1.016759,0.265340}, + {-1.203644,-0.226689}, + {1.077377,0.055066}, + {-0.711420,-0.799640}, + {-0.952350,1.757540}, + {-0.699760,-0.395833}, + {0.196095,-0.452552}, + {0.858758,0.082961}, + {-0.102536,-0.000287}, + {0.343266,-0.165811}, + {-0.728940,0.271092}, + {-0.365214,0.684535}, + {0.216959,0.140539}, + {1.180350,-0.419423}, + {1.324288,-0.085228}, + {0.147214,-0.477679}, + {-0.340726,-0.495787}, + {-1.273332,-1.550655}, + {0.922246,-0.111028}, + {0.801098,0.605313}, + {0.636192,1.656684}, + {-0.459339,0.881863}, + {1.781037,0.234321}, + {0.109470,0.133394}, + {-0.004980,-0.810822}, + {0.908525,-0.163045}, + {-0.974477,0.323659}, + {-0.048603,-0.036304}, + {0.325440,-0.342764}, + {-0.337570,-1.092254}, + {0.903449,-0.284129}, + {-0.513390,0.181617}, + {-0.906126,0.669673}, + {-0.047735,-0.670418}, + {0.017003,0.589952}, + {0.028141,0.768896}, + {-0.578796,0.026764}, + {0.153556,-1.036369}, + {1.736299,0.027607}, + {0.207225,-0.621084}, + {0.705813,0.683555}, + {0.613738,-0.279927}, + {0.893509,-0.452908}, + {0.636020,-0.005940}, + {-0.658270,-0.311733}, + {-0.134504,0.070080}, + {1.042131,0.291936}, + {-1.287365,0.847615}, + {-0.003671,0.744938}, + {1.467651,0.342594}, + {0.428411,0.563561}, + {-0.684351,0.323237}, + {-1.151725,-1.138706}, + {-0.979643,-0.060294}, + {-0.950965,1.226894}, + {0.275188,1.399455}, + {1.059926,-0.504133}, + {1.403033,-0.687512}, + {0.451808,-0.267527}, + {0.287162,0.469132}, + {0.667303,-0.852516}, + {-0.817966,0.656727}, + {-0.610009,-1.209200}, + {-0.303650,-0.565971}, + {0.794594,-0.236306}, + {0.431590,-0.908313}, + {-0.486556,-0.148481}, + {0.047972,-0.563498}, + {0.402585,-0.280605}, + {-0.378654,1.233252}, + {0.353901,-0.875133}, + {0.422729,0.132703}, + {0.856809,1.362334}, + {-0.307263,-1.011948}, + {-0.301736,0.329660}, + {-1.085452,0.606158}, + {0.652982,-0.949242}, + {0.162631,-0.537617}, + {-0.965026,-0.836121}, + {-0.224588,-0.548422}, + {-0.437774,-0.279190}, + {0.115997,1.282330}, + {-0.897054,-0.047287}, + {-0.798308,0.372153}, + {0.665938,-0.055502}, + {-0.287413,-0.908496}, + {0.678644,1.314557}, + {-1.449310,1.522950}, + {0.133398,-0.047658}, + {1.224299,-0.149895}, + {0.441690,-0.259865}, + {0.126046,0.235240}, + {-0.966749,-0.417786}, + {-0.246070,0.437277}, + {-0.513593,0.459173}, + {1.263919,0.212954}, + {-0.627105,0.099150}, + {-0.594187,1.118584}, + {0.080869,0.148184}, + {0.706184,0.093108}, + {-0.250103,0.904912}, + {-0.085195,0.370800}, + {-0.081942,1.186957}, + {-0.296313,0.398278}, + {0.107458,-0.270042}, + {-1.468816,0.286041}, + {-0.248786,-0.194616}, + {-0.839973,0.355437}, + {-0.683425,-0.178796}, + {-0.338075,-0.537129}, + {-0.036752,-0.461836}, + {-1.024372,-0.805341}, + {0.013059,0.294161}, + {0.921884,0.535430}, + {-1.007252,1.557665}, + {0.542827,-0.917693}, + {0.309396,0.368338}, + {1.457432,-0.177952}, + {0.233876,-1.087922}, + {-0.287049,-0.480668}, + {-2.620387,0.600910}, + {1.326669,-0.917157}, + {0.401335,0.923110}, + {0.162796,1.157234}, + {0.041788,-0.014345}, + {0.072941,-0.425285}, + {-0.560475,0.764890}, + {0.016479,0.416079}, + {0.097405,0.248996}, + {0.019340,-0.636057}, + {-0.744067,0.747826}, + {0.245503,0.206129}, + {-0.143130,-0.092267}, + {-0.030139,-0.746082}, + {-0.340620,-0.172249}, + {0.574330,0.097636}, + {0.705237,1.038887}, + {0.036829,-1.428994}, + {-0.385480,1.221082}, + {0.367570,-0.573062}, + {0.850865,-0.205763}, + {-1.330905,0.354961}, + {-1.307074,-0.343509}, + {-0.957751,-0.442580}, + {-0.409731,0.243503}, + {0.567889,-0.604233}, + {0.388103,0.085991}, + {0.040627,-0.011142}, + {0.077060,2.004945}, + {-0.833086,-0.049453}, + {-0.843774,-0.478384}, + {0.372355,-0.792844}, + {-0.234287,0.672964}, + {0.107062,-0.502565}, + {-1.135028,0.280502}, + {0.638347,0.034212}, + {-0.199093,-0.238458}, + {0.782282,1.017529}, + {1.389149,0.234737}, + {-0.823454,-0.341639}, + {0.651162,0.121302}, + {0.653624,0.783446}, + {0.352699,-0.207281}, + {1.238071,-0.754767}, + {-0.238806,0.128663}, + {0.262681,0.361327}, + {0.509025,-0.603024}, + {0.981913,-0.189391}, + {-0.706196,-0.289371}, + {1.145942,0.153677}, + {-0.907823,-1.129337}, + {0.188763,0.623059}, + {-0.207448,0.309242}, + {-1.436932,-0.449519}, + {0.263175,0.540244}, + {-0.483092,-0.058570}, + {0.397371,0.753641}, + {0.644110,0.798701}, + {-0.237872,-0.334731}, + {0.600366,-0.897091}, + {0.710538,-0.133366}, + {-1.516116,0.488503}, + {-0.939188,0.418730}, + {-0.827630,-1.305309}, + {0.991499,-0.948166}, + {-0.499176,-0.031343}, + {0.451127,0.527453}, + {-0.546957,-0.430328}, + {0.946791,-0.178838}, + {1.094307,-0.154938}, + {0.609540,-0.054620}, + {0.425711,0.862792}, + {1.052342,-0.544269}, + {0.017746,0.359976}, + {0.075115,-0.401081}, + {0.374648,1.155752}, + {-0.461745,0.439978}, + {0.047619,-0.886710}, + {-0.099683,0.583548}, + {-0.334765,0.050996}, + {-0.478206,-1.264766}, + {0.516489,0.865504}, + {0.320340,-0.267298}, + {-1.324292,0.440493}, + {-0.710460,-0.206828}, + {-0.884704,0.660258}, + {-0.262272,0.394818}, + {-1.601370,0.444466}, + {-0.040487,1.753595}, + {0.449335,0.513686}, + {-0.558298,0.133991}, + {-1.303113,-0.149324}, + {-0.640885,0.046974}, + {-0.069325,-1.365680}, + {0.608970,0.076633}, + {-0.606595,1.106964}, + {-1.357901,-0.599083}, + {0.171158,-0.825277}, + {-0.169345,1.197084}, + {0.952399,-0.276599}, + {-1.216459,-1.814032}, + {0.336292,-0.361441}, + {-0.391223,0.027209}, + {-0.888571,1.002162}, + {0.433612,0.093511}, + {-0.367321,1.307070}, + {0.857512,-0.309022}, + {0.552752,-0.380307}, + {-0.133756,-0.251153}, + {-0.076031,0.670133}, + {0.150394,0.146506}, + {-0.499016,0.809971}, + {-0.790913,0.740662}, + {-1.123231,-1.005292}, + {0.580124,0.208377}, + {-0.466913,0.115610}, + {1.579526,0.786724}, + {0.463652,0.545059}, + {0.363065,-0.468610}, + {0.052198,0.530309}, + {-0.533674,1.126832}, + {0.055098,1.460855}, + {0.446183,-0.620585}, + {0.061081,-0.558367}, + {0.602677,1.026030}, + {-0.214633,0.288994}, + {-0.885402,-0.515751}, + {0.666543,0.166763}, + {-0.582033,-0.122415}, + {0.363257,-0.093152}, + {0.197198,0.114842}, + {0.406922,1.065118}, + {-0.242795,0.181694}, + {1.181767,0.889092}, + {0.397062,-0.428570}, + {-1.448884,-0.474985}, + {-0.309184,-0.467696}, + {0.137783,2.027669}, + {0.474842,-0.884960}, + {-1.661712,0.148843}, + {-0.069285,-0.320696}, + {-0.170034,1.251510}, + {-0.222496,-0.937833}, + {-0.311250,-0.485117}, + {-0.383917,-0.251372}, + {-0.320437,-0.642387}, + {0.206323,-0.019793}, + {-0.278823,-0.242762}, + {0.680746,-0.243103}, + {-0.567863,-0.748655}, + {-0.323796,-0.790379}, + {0.524243,-1.175681}, + {-0.397445,-0.523772}, + {-0.474692,-0.477136}, + {0.189023,0.966859}, + {0.386555,0.481977}, + {-0.140878,-0.911496}, + {0.406182,-0.015365}, + {0.102477,-0.746348}, + {0.090930,-0.614517}, + {-0.086082,-0.376112}, + {0.370291,1.207642}, + {1.139898,0.217497}, + {-0.610672,0.245983}, + {-0.174618,0.833632}, + {-0.831968,0.195580}, + {-0.757329,-0.178189}, + {-0.452875,0.648865}, + {-0.050510,-0.011244}, + {0.607291,0.053154}, + {-0.511124,0.651127}, + {1.482337,-0.900918}, + {-0.703173,0.311134}, + {-0.814727,0.000269}, + {-0.500544,-0.108025}, + {-0.986775,-1.061037}, + {0.121914,-0.452219}, + {-0.442473,1.026816}, + {0.763792,1.515099}, + {0.623316,0.417977}, + {-0.212855,0.306216}, + {-0.561318,-0.795493}, + {0.576698,0.693102}, + {0.061154,1.127743}, + {-0.887248,-0.434093}, + {0.400682,-0.310835}, + {0.432078,0.437754}, + {-1.820646,-0.665382}, + {-0.545136,-0.481289}, + {0.400912,0.700684}, + {0.137771,0.590814}, + {0.811931,1.048663}, + {-0.815412,-0.744414}, + {-0.182987,0.208578}, + {-0.481622,-0.883622}, + {-1.174057,0.017304}, + {0.762922,0.651641}, + {-0.225956,0.405115}, + {0.170487,0.754648}, + {-0.324751,-0.699111}, + {0.508982,0.579276}, + {-0.217381,0.280138}, + {-0.164204,0.071186}, + {1.046480,-0.151789}, + {-0.407525,0.236215}, + {0.043528,0.503335}, + {-0.422499,0.544007}, + {0.737522,-1.360706}, + {1.348720,0.519788}, + {-0.879691,0.405074}, + {-0.357675,0.687248}, + {-0.860730,-0.689677}, + {-1.748928,-1.078704}, + {-0.195426,-1.049862}, + {-0.035495,-0.350232}, + {1.033713,-0.030587}, + {0.800092,-0.110899}, + {-0.305951,0.274492}, + {-0.832381,-0.825501}, + {1.297737,0.530891}, + {-0.024356,0.967573}, + {-0.449962,1.296328}, + {0.341683,-0.869522}, + {-1.470761,0.197663}, + {-0.936318,-1.271953}, + {0.048144,-0.615236}, + {0.378908,0.844420}, + {0.461083,-0.366872}, + {0.047960,0.407828}, + {-0.840079,-1.095449}, + {-0.027915,1.084483}, + {0.674601,0.522046}, + {1.931610,0.765981}, + {-0.125784,-0.336877}, + {0.019115,-1.481554}, + {0.820840,-0.447176}, + {0.707047,0.929830}, + {0.958282,-0.396113}, + {-0.580240,0.094636}, + {-0.174754,-1.196160}, + {-0.860568,-0.091731}, + {0.523920,-0.030573}, + {0.274479,-0.049813}, + {0.153459,0.249274}, + {0.533358,0.444977}, + {-1.241255,0.245974}, + {-1.012174,-0.027701}, + {-0.395522,-0.193917}, + {-0.972526,0.180350}, + {0.430804,-0.833766}, + {-1.011518,0.292716}, + {0.207684,-0.205800}, + {0.044858,0.152791}, + {0.448157,-0.030646}, + {-0.499634,-0.262260}, + {-0.143806,-1.010803}, + {0.886031,-0.336787}, + {-0.362530,-1.768263}, + {-0.242831,-0.154468}, + {0.734717,0.111474}, + {0.072613,0.508828}, + {-1.899793,0.301018}, + {0.090072,0.247977}, + {1.285664,0.732956}, + {-0.135188,0.142834}, + {1.273538,-0.920904}, + {0.221604,0.753942}, + {0.117900,1.060812}, + {-0.232774,-0.083558}, + {-0.425926,0.686408}, + {-0.340529,-0.169042}, + {-1.070367,-0.239810}, + {0.173529,-0.065984}, + {-0.933640,0.004310}, + {-0.566267,1.379593}, + {0.734686,-0.766672}, + {-0.413294,0.709294}, + {0.595004,-1.135705}, + {0.718267,-0.281773}, + {0.106468,-0.863281}, + {-1.145502,0.206171}, + {0.887536,-0.242405}, + {-0.075956,0.156573}, + {-0.567216,-0.288216}, + {0.664645,-0.362856}, + {0.547459,-1.799647}, + {-0.241719,0.821927}, + {-0.034155,0.250263}, + {-0.046388,-0.235086}, + {0.419359,0.310763}, + {-0.215888,-1.367215}, + {0.034387,1.044299}, + {-0.358005,0.645426}, + {0.326152,0.748784}, + {0.202163,-1.123275}, + {0.690767,-0.848466}, + {-0.125006,-0.255902}, + {0.162892,-0.345699}, + {-0.955042,0.294080}, + {0.083320,1.880625}, + {-1.198282,0.804137}, + {0.587054,-0.958859}, + {-1.601116,-0.725511}, + {1.139292,-0.045379}, + {0.203917,0.685789}, + {-0.493037,0.458789}, + {-0.031010,-0.106568}, + {-0.429805,1.119367}, + {-0.528015,0.735593}, + {-0.134197,-1.255463}, + {-0.448291,-0.262008}, + {-0.050223,0.690944}, + {-0.326287,0.961302}, + {0.124462,-0.571389}, + {-1.086006,0.724509}, + {0.209547,1.056945}, + {-1.293691,0.471514}, + {-0.003896,0.567797}, + {0.183588,-0.440099}, + {0.728438,-0.316034}, + {0.626752,-0.654537}, + {-0.323843,-0.581490}, + {-0.584120,1.235448}, + {-0.724753,-0.357822}, + {0.651802,-0.255045}, + {1.066699,0.145706}, + {-0.327084,-0.703887}, + {0.726433,0.902326}, + {0.615929,-0.468777}, + {0.215638,0.025393}, + {0.133688,0.312972}, + {1.480107,0.472599}, + {-0.422097,-0.160696}, + {-0.044013,-0.556906}, + {0.614888,-0.377907}, + {-0.064303,-0.363883}, + {0.417722,0.242693}, + {-0.610622,-0.349784}, + {0.274353,1.229638}, + {1.376876,-0.661918}, + {0.065799,0.192942}, + {-0.985618,1.632529}, + {0.007131,-0.681075}, + {0.034166,-0.337426}, + {-0.725304,-0.279474}, + {-0.730621,-0.266983}, + {-0.843057,0.478930}, + {0.474710,-0.454256}, + {-0.507851,-1.321088}, + {-0.017476,-0.794130}, + {-1.038323,0.066833}, + {0.385382,1.225797}, + {0.021934,-0.410591}, + {-1.010484,-0.669754}, + {0.429793,1.532827}, + {0.636827,-0.288977}, + {-0.534265,-0.646029}, + {-0.844287,-0.564450}, + {-0.396490,0.315667}, + {-1.273186,0.218433}, + {0.417662,-0.018864}, + {0.462506,-1.253567}, + {-0.182622,-0.273477}, + {-1.579637,0.949574}, + {0.433213,-0.037784}, + {-0.846671,0.082560}, + {0.662308,0.650516}, + {0.045595,-0.496667}, + {0.119091,0.014749}, + {0.608458,0.837623}, + {-0.687084,-0.195381}, + {-0.018589,0.789815}, + {-0.298420,0.261702}, + {-0.040271,-0.194730}, + {0.620631,0.613639}, + {-0.937617,-1.049478}, + {-1.053561,-0.076996}, + {-0.146382,1.050599}, + {-0.020837,0.355688}, + {0.201458,0.287587}, + {2.218790,0.476933}, + {-0.104763,0.355760}, + {-0.479467,1.109721}, + {-0.893756,-0.550251}, + {0.956522,-0.432295}, + {-0.194464,0.764093}, + {-0.704136,0.235401}, + {-0.654628,-0.706623}, + {-0.493649,-1.139754}, + {1.131061,-0.875211}, + {0.422646,0.452794}, + {1.210811,0.230644}, + {0.529746,1.430776}, + {0.460853,-0.100968}, + {0.145607,0.417836}, + {-0.183425,0.671501}, + {0.712047,0.585763}, + {0.667523,0.427398}, + {0.083714,0.241186}, + {0.603047,-0.437378}, + {0.671836,-0.108031}, + {0.147556,1.611462}, + {-0.474514,0.338308}, + {0.669331,-0.582147}, + {-0.518075,-1.063090}, + {-0.404972,1.037375}, + {0.392642,0.132706}, + {0.091281,-0.677244}, + {-0.101493,0.595298}, + {-0.273278,-0.149243}, + {-0.056904,0.119955}, + {-1.155884,-1.080464}, + {-0.068053,-0.148710}, + {0.578176,0.409176}, + {0.840193,0.143279}, + {-0.240609,-0.502595}, + {-1.242000,-0.441204}, + {1.109439,0.606569}, + {0.055563,-0.064248}, + {-0.149710,0.672466}, + {0.726856,-0.310854}, + {-0.653160,-0.652705}, + {0.278598,0.458304}, + {1.079266,0.059011}, + {-1.419938,0.322182}, + {0.945599,0.108086}, + {-0.751556,0.294139}, + {0.427620,0.212390}, + {-0.069527,0.242822}, + {0.278856,-0.156601}, + {-0.065200,0.118212}, + {-0.195535,-0.019769}, + {-0.420603,-0.282551}, + {-0.907453,0.158124}, + {0.113203,-0.260452}, + {0.108842,-0.457941}, + {0.325193,0.172876}, + {0.291742,-1.615476}, + {1.111341,0.223062}, + {0.355686,0.290422}, + {0.634955,-0.443257}, + {-0.288282,-0.326955}, + {0.392507,-0.445702}, + {-0.079780,-0.200318}, + {0.358629,0.085606}, + {-1.037372,0.489174}, + {-0.650397,-0.686827}, + {1.025516,-1.009867}, + {0.704492,-0.014842}, + {-1.937672,0.038744}, + {1.043168,-0.182518}, + {0.767195,1.172210}, + {-0.973759,0.495782}, + {0.727765,-0.454134}, + {-0.463311,0.027464}, + {0.461195,0.676168}, + {0.563002,-0.443334}, + {0.837410,1.297797}, + {0.530937,0.527558}, + {-0.207558,1.073655}, + {0.017685,-0.129331}, + {-0.434984,-0.756967}, + {1.186167,0.330663}, + {-0.494215,-0.229928}, + {-1.967930,0.423566}, + {0.085717,0.490676}, + {0.579028,0.081474}, + {-1.165809,1.066751}, + {0.155616,-0.207882}, + {0.824000,0.024005}, + {-0.650314,-0.289259}, + {0.289677,0.562463}, + {0.084380,-0.741257}, + {-0.185975,-1.002760}, + {-0.258544,-1.231110}, + {-0.680721,-0.132215}, + {-0.126178,-0.346100}, + {0.059501,-0.556818}, + {0.257426,0.740194}, + {0.209590,0.920746}, + {0.278486,0.751635}, + {-0.266518,-0.406470}, + {0.747083,0.368274}, + {0.361351,1.035953}, + {0.730710,0.834248}, + {-0.629610,-0.456521}, + {-1.063318,0.238140}, + {-0.239986,0.455673}, + {0.045907,1.094522}, + {-0.098907,-1.444712}, + {0.346836,-0.959861}, + {-0.120778,-0.989386}, + {0.411690,0.088654}, + {-0.269997,0.408287}, + {0.840135,-0.066117}, + {-0.488370,1.718434}, + {0.875784,1.132982}, + {-0.423667,-0.074866}, + {0.406809,-1.179861}, + {0.214059,-0.303153}, + {-0.302193,1.101238}, + {0.868983,-0.955911}, + {-0.507030,-0.093825}, + {0.906214,0.198565}, + {-1.340024,0.138617}, + {-0.383054,-0.069114}, + {-0.486159,-0.087876}, + {-0.469249,0.620882}, + {-0.278926,0.596592}, + {-1.669627,0.194691}, + {0.742352,-0.614247}, + {0.718457,-1.097553}, + {-1.226771,0.059541}, + {-0.753392,-1.289320}, + {-0.209317,-0.130344}, + {0.481910,0.355924}, + {-0.316461,0.620936}, + {-1.244952,-0.290661}, + {0.215579,-0.017983}, + {-0.469612,-0.348379}, + {-1.275008,0.509724}, + {-0.522839,0.762522}, + {1.326882,0.479414}, + {0.226020,-0.210263}, + {-1.179333,-0.508178}, + {-0.818269,-0.304733}, + {-0.173224,-0.439298}, + {-0.536131,0.998854}, + {0.607704,0.360449}, + {0.006800,1.240915}, + {-0.835128,-0.346159}, + {0.147648,0.135792}, + {-0.724952,-0.728993}, + {0.387685,-0.535468}, + {0.119265,0.577041}, + {0.496673,-0.247011}, + {-0.506871,0.140888}, + {-0.556531,-0.131979}, + {-0.286395,0.267888}, + {-1.535815,0.901937}, + {-0.025959,-0.061265}, + {0.571857,0.076721}, + {0.378659,-1.266500}, + {0.474031,-1.498596}, + {-0.010007,0.157154}, + {1.036847,0.749449}, + {1.036444,0.841654}, + {0.548594,-0.632059}, + {0.368966,-1.003432}, + {0.570837,-0.124028}, + {0.341200,0.495283}, + {1.122887,0.046649}, + {0.748775,-0.646888}, + {0.114935,0.407391}, + {0.016391,-1.068782}, + {0.276187,0.082486}, + {0.328695,-0.203988}, + {-0.955191,-0.006992}, + {-0.954723,0.976115}, + {0.130024,0.006814}, + {1.178728,-1.134652}, + {-0.280919,1.145315}, + {-0.074035,-0.138700}, + {-0.885872,-0.173488}, + {-0.052446,0.391385}, + {0.061407,-0.036012}, + {-0.178374,0.207062}, + {1.539364,-0.706954}, + {0.683015,-0.203145}, + {0.214058,-0.228743}, + {0.816114,-0.336901}, + {1.083669,0.601556}, + {0.243885,0.366600}, + {-0.376040,0.342849}, + {0.049959,-0.020917}, + {-0.249481,1.559691}, + {0.260203,0.448585}, + {0.400041,0.204926}, + {0.103935,-0.828622}, + {-1.743587,-0.564881}, + {1.227175,-0.006252}, + {0.517290,0.681785}, + {0.041937,-1.277299}, + {0.884991,1.022953}, + {-0.395354,0.177096}, + {0.659057,-0.417478}, + {-1.433312,-1.086898}, + {-0.307188,0.459477}, + {1.083389,-0.395616}, + {0.931207,-0.529729}, + {-0.691098,-0.682569}, + {-0.107824,-0.121179}, + {0.162237,0.278125}, + {-0.187331,-0.078223}, + {0.539435,-0.468066}, + {-0.037026,-0.169309}, + {-0.032828,0.774350}, + {1.004977,0.207932}, + {-1.375620,-0.465708}, + {-0.853797,-0.492372}, + {0.857050,-0.067048}, + {-1.358066,-0.056983}, + {0.205638,0.517628}, + {0.134978,-1.457460}, + {-0.628057,-0.198079}, + {1.020819,0.168767}, + {-0.660697,0.430602}, + {-1.207856,0.350159}, + {0.211552,0.334102}, + {1.569613,0.644036}, + {0.625801,-0.806877}, + {0.753956,-0.280829}, + {0.800271,0.796731}, + {-0.157847,0.366712}, + {-0.520191,-0.177564}, + {-1.880639,0.111041}, + {0.565178,-0.025211}, + {0.867760,0.267054}, + {-1.699681,0.127302}, + {0.925459,0.105993}, + {-0.381951,-0.290209}, + {-0.008579,-0.672418}, + {-0.226066,0.111930}, + {-0.511046,-0.180645}, + {-0.150570,-0.920002}, + {0.456257,1.157604}, + {0.285512,-0.521834}, + {0.197973,0.250159}, + {-0.574980,-1.048345}, + {0.065042,0.539600}, + {-0.080347,0.440878}, + {0.334152,1.807252}, + {0.870739,-0.406652}, + {0.176466,0.116783}, + {-0.373632,-0.833253}, + {-0.411070,-0.622612}, + {0.490742,0.472114}, + {-0.144185,0.440259}, + {-0.911075,1.395547}, + {-0.963359,0.070059}, + {0.472861,0.954686}, + {0.144494,0.457410}, + {0.724328,0.010123}, + {1.405964,0.660263}, + {0.629468,-1.148403}, + {-0.365955,0.044107}, + {1.302156,-0.349987}, + {0.559796,0.286848}, + {-1.408563,1.083378}, + {0.176937,0.040345}, + {-0.339737,-1.036991}, + {-0.000428,0.120110}, + {0.174082,-0.440745}, + {-0.812662,0.308663}, + {-0.344535,0.731337}, + {-0.687735,-0.481504}, + {-0.167853,0.616992}, + {-0.032443,-0.661320}, + {-0.744886,-0.239760}, + {0.372373,0.085475}, + {-1.440036,0.895442}, + {-0.277006,-0.398549}, + {-0.370569,-0.322067}, + {0.103481,-0.007568}, + {-0.106426,0.323058}, + {-0.483987,-0.268954}, + {0.292168,0.040605}, + {0.074066,0.134120}, + {0.153317,-1.287651}, + {-1.203918,-0.967637}, + {-0.317271,0.386501}, + {0.954049,-0.099558}, + {0.462192,-0.061542}, + {-0.062967,0.369906}, + {-0.884488,0.712304}, + {0.186711,-0.348097}, + {-0.352553,-1.659383}, + {-0.486478,-1.015527}, + {0.251005,0.060654}, + {-0.383225,0.840563}, + {-0.808342,-0.888829}, + {-0.227572,0.129202}, + {-0.314270,-0.775019}, + {-1.545768,-0.570873}, + {0.545677,0.182432}, + {0.081540,-0.429030}, + {-0.106779,-0.216418}, + {0.450044,0.045841}, + {0.905832,-0.902027}, + {0.457874,-0.063177}, + {0.116610,-0.016288}, + {-1.167063,0.372052}, + {0.982923,-0.259440}, + {-0.922239,0.212051}, + {-0.529454,-0.435260}, + {-0.213398,0.659482}, + {0.235217,-0.582746}, + {0.622280,0.032259}, + {0.593666,0.351868}, + {-0.873997,-0.448480}, + {-0.945217,1.031911}, + {-0.039626,0.351279}, + {1.166869,-0.022261}, + {0.104525,0.891744}, + {-0.833076,0.326978}, + {1.038616,0.221851}, + {0.210548,0.797819}, + {-0.610088,-0.922245}, + {-0.343548,-0.954441}, + {0.159815,-0.755620}, + {-1.254248,0.310110}, + {0.112621,0.338769}, + {0.509586,-0.114230}, + {0.458902,-0.012483}, + {-0.077531,0.845512}, + {-0.024838,-0.325136}, + {0.099325,-0.797450}, + {-0.149184,0.461116}, + {-0.229381,-0.113607}, + {-0.790994,0.906154}, + {1.110214,0.040753}, + {-0.312241,0.102262}, + {-0.492226,-0.169707}, + {0.154426,0.445431}, + {0.915648,0.371803}, + {-0.997727,-0.598569}, + {-0.694967,-0.288512}, + {0.440323,-0.276589}, + {-0.606794,-1.515034}, + {-0.336494,0.022852}, + {0.119489,-0.371741}, + {-0.695836,0.229833}, + {-0.161236,-1.197827}, + {0.902952,0.341914}, + {-0.478975,-0.883342}, + {0.010275,0.473193}, + {-0.257723,0.343809}, + {-1.647461,-0.658151}, + {1.203630,0.311324}, + {-0.520208,-0.077408}, + {-0.042387,-0.201717}, + {0.732624,-0.442372}, + {-0.025341,0.263186}, + {-0.585464,0.089537}, + {-1.270729,0.861931}, + {0.365129,0.609487}, + {1.133617,-1.306806}, + {-0.010529,-0.948779}, + {-1.495597,1.148781}, + {-0.029070,-0.136818}, + {0.206800,0.008509}, + {-0.794964,0.295312}, + {0.338531,-0.540493}, + {-0.405923,-0.474873}, + {0.979782,0.070233}, + {-1.358570,-3.041284}, + {-2.044437,-0.337722}, + {0.467839,-0.830266}, + {0.885020,0.766034}, + {0.628159,0.150322}, + {0.155384,1.033378}, + {0.499468,-0.472419}, + {-0.017379,0.135709}, + {1.044006,0.107473}, + {0.069893,1.038512}, + {0.052506,-0.202886}, + {0.725175,-0.396198}, + {-1.435707,0.436358}, + {-0.537693,0.135514}, + {0.874197,1.596120}, + {0.692789,-0.072948}, + {1.514427,0.422330}, + {0.356388,0.004602}, + {-0.424132,1.742008}, + {1.161560,0.621060}, + {-1.253631,0.873246}, + {0.830477,-0.113869}, + {-0.089117,1.005543}, + {-0.119315,0.415317}, + {0.530735,-0.551322}, + {0.468530,-0.096115}, + {0.465401,0.845196}, + {-1.226917,1.079224}, + {-0.340842,-0.903031}, + {1.019357,-0.845306}, + {-0.542261,-0.981142}, + {0.745563,-0.146286}, + {0.146678,1.522813}, + {0.489313,0.877646}, + {0.622197,0.410875}, + {-0.332401,1.742686}, + {-0.530628,0.179136}, + {0.214410,0.379434}, + {-1.320653,0.366324}, + {-0.135837,-0.625588}, + {0.018205,0.579573}, + {0.113747,0.193869}, + {0.826568,-0.342809}, + {0.517217,0.388353}, + {0.511517,-1.261484}, + {0.069570,1.590514}, + {0.524966,1.277127}, + {-0.604102,0.356745}, + {-0.289114,1.192349}, + {-1.224444,0.781320}, + {0.797974,0.660886}, + {0.358733,0.016464}, + {-0.201142,0.232487}, + {1.024496,-0.588845}, + {-0.513361,1.122263}, + {-0.918694,0.121980}, + {-0.195506,-0.020095}, + {0.331440,-0.501190}, + {0.266567,1.455573}, + {0.740847,0.632486}, + {-0.395862,0.862711}, + {-0.542915,-0.406950}, + {-0.187643,0.516822}, + {-0.777298,-0.688838}, + {1.561877,0.175345}, + {0.042752,0.261983}, + {-0.477959,0.013431}, + {-0.378112,-0.612150}, + {0.517772,-0.504068}, + {0.534609,-0.171057}, + {0.581429,-0.511870}, + {1.573305,0.690322}, + {0.371148,0.371632}, + {0.775532,-1.827403}, + {0.699914,-0.106911}, + {-0.563281,-0.400668}, + {0.120288,0.692679}, + {-0.216988,0.919587}, + {-0.032172,-0.042166}, + {0.257666,-0.073362}, + {-0.829215,0.807044}, + {0.043528,-0.370050}, + {0.726681,-0.109935}, + {0.199629,-0.260646}, + {-0.064800,0.952449}, + {-0.366864,0.342468}, + {-0.213579,0.473732}, + {0.475745,-0.522349}, + {-0.578518,0.470114}, + {0.131571,0.070506}, + {0.199747,1.295036}, + {0.163703,0.315885}, + {0.730185,-0.561563}, + {0.155160,-0.466836}, + {0.209743,-0.938351}, + {-0.332044,0.339460}, + {-0.334248,-0.438717}, + {-0.177906,-0.445812}, + {-0.403888,0.515655}, + {-0.529417,1.448326}, + {0.751148,-0.069385}, + {-0.543366,1.195889}, + {-0.565148,0.963886}, + {1.462286,-0.220984}, + {1.482440,-0.287540}, + {-0.577094,-0.718976}, + {-1.677120,-0.951714}, + {1.349836,0.330001}, + {0.047546,-0.005764}, + {-0.087343,-0.860869}, + {0.969527,-0.058331}, + {0.640526,-0.460373}, + {-0.620476,0.177907}, + {0.646331,0.313684}, + {-0.865669,-0.430395}, + {-1.109093,0.284577}, + {0.623313,1.066345}, + {-0.942186,0.297467}, + {0.386541,-0.886178}, + {-1.337573,0.110937}, + {0.411021,-0.972933}, + {-0.731420,-1.565217}, + {0.115932,0.032862}, + {0.647009,-0.702312}, + {0.368068,0.376174}, + {1.769808,-0.289011}, + {-0.186158,0.373612}, + {-1.327035,-0.080788}, + {-1.039836,-0.777259}, + {-0.020857,0.135255}, + {-0.342180,-0.853006}, + {0.599834,0.159697}, + {-1.190980,-0.408167}, + {-0.953700,-0.055447}, + {0.242964,0.103171}, + {-0.330887,0.495570}, + {-0.736320,-0.023509}, + {0.572782,0.531094}, + {1.955315,0.650087}, + {0.489044,-0.003831}, + {-0.573902,-1.761131}, + {-0.258057,-0.141214}, + {0.092342,0.110264}, + {0.813360,1.816915}, + {1.221027,-0.215925}, + {-0.103234,0.313383}, + {0.078699,-0.198435}, + {-0.581828,-0.816310}, + {0.283286,-0.081822}, + {0.302095,-0.251803}, + {-0.406478,-0.593376}, + {-1.326431,0.230793}, + {-0.180609,0.370457}, + {0.552601,0.177024}, + {-1.333465,0.065461}, + {0.599845,-0.602277}, + {1.077753,-1.104753}, + {0.809628,0.038772}, + {0.024962,-0.314990}, + {-0.988391,1.568123}, + {0.338240,0.004098}, + {-0.412518,0.731701}, + {-0.313828,0.854789}, + {1.524806,-1.562020}, + {-1.169150,0.061988}, + {-0.463460,-1.121006}, + {-0.688317,0.548066}, + {1.066755,-1.657319}, + {-0.098140,-0.618434}, + {0.432144,-0.550599}, + {-0.078023,1.897759}, + {0.527062,-1.127072}, + {0.386297,0.274681}, + {1.092527,-0.621702}, + {0.544097,-0.200129}, + {0.619517,0.186827}, + {-0.894467,0.710752}, + {-0.516944,-0.474122}, + {-0.178624,-0.241885}, + {-1.103791,0.206812}, + {-0.750328,-0.465599}, + {-1.049783,-0.059999}, + {-0.238415,-0.584913}, + {0.841484,0.498381}, + {0.772949,-0.257598}, + {0.631129,-0.010723}, + {0.638257,-0.000321}, + {0.484532,-1.725015}, + {0.429875,0.794608}, + {0.098118,-0.679536}, + {0.252370,-1.123608}, + {0.256356,0.128045}, + {-1.654829,-0.677293}, + {0.341717,0.901616}, + {-1.530022,-0.071391}, + {1.584247,0.385784}, + {-0.134925,-0.596211}, + {-0.306823,-0.640632}, + {0.680138,1.001415}, + {0.855363,0.466031}, + {1.047399,-0.967652}, + {0.874714,0.771008}, + {0.023131,0.930381}, + {-1.094853,-0.870464}, + {0.718843,-0.226276}, + {-0.135767,0.433719}, + {0.058625,-1.398816}, + {-1.478618,-0.590113}, + {-1.706239,-0.238334}, + {-0.278994,1.505897}, + {-0.649649,0.049328}, + {0.357204,-0.249715}, + {-0.178715,0.811732}, + {1.233743,0.677688}, + {0.404137,1.022936}, + {0.656525,0.330724}, + {0.607732,-1.362354}, + {-0.127905,-0.419755}, + {-0.152615,-0.700967}, + {-0.352367,-0.973191}, + {-0.720073,-1.323530}, + {-0.127801,-0.477660}, + {-0.092400,0.491723}, + {0.341948,-0.814883}, + {-0.040942,-0.194408}, + {-0.510947,0.165069}, + {-0.386948,0.041816}, + {-0.391543,0.095043}, + {0.814066,-0.413210}, + {0.652218,-0.465334}, + {-0.144483,0.331067}, + {0.230318,-0.335014}, + {-0.085459,-0.090830}, + {-0.458532,0.005534}, + {0.602005,0.549709}, + {-0.656597,-0.039494}, + {-0.529460,-0.586545}, + {0.459330,0.016754}, + {-0.902031,-0.240948}, + {-0.046894,0.151840}, + {0.377669,1.389795}, + {0.397125,0.524265}, + {-0.388316,0.810665}, + {1.536130,-0.018437}, + {-0.324880,0.392937}, + {-0.402622,1.137794}, + {0.298408,-0.266189}, + {0.681114,-0.071383}, + {-0.272913,-0.092683}, + {1.575728,0.022775}, + {0.194788,-0.335136}, + {0.519039,0.062735}, + {-0.764728,0.146452}, + {0.236471,-1.427158}, + {0.995246,0.767302}, + {-0.349678,0.736569}, + {0.118835,0.421198}, + {-1.078159,0.402561}, + {-0.764007,-0.533382}, + {-0.455951,1.354001}, + {0.541724,0.107812}, + {0.517193,0.011113}, + {0.192692,0.927513}, + {-0.639680,-0.461272}, + {-0.497412,0.005693}, + {0.035037,0.968771}, + {0.427440,-0.147090}, + {-1.412140,-0.121905}, + {0.344535,0.038231}, + {0.256825,0.088627}, + {-0.859248,-0.787997}, + {-0.127159,-1.105511}, + {1.125815,-0.063713}, + {-1.355366,-0.913897}, + {0.567869,0.633445}, + {0.784268,-0.756031}, + {-0.417336,0.300105}, + {-1.430904,0.105505}, + {-0.042593,-0.153161}, + {0.213039,0.587233}, + {0.028565,0.513513}, + {-0.041316,-1.552297}, + {0.458964,1.495922}, + {0.559308,-1.214681}, + {1.049392,0.519859}, + {0.290751,0.410285}, + {-0.235969,0.075235}, + {0.827775,0.234283}, + {-0.353105,0.368130}, + {1.152140,0.124431}, + {-0.676463,-0.451120}, + {0.431903,0.156522}, + {-1.146142,0.821383}, + {-0.231929,0.460321}, + {0.331103,0.291431}, + {-0.486103,-1.028895}, + {0.247142,-0.577083}, + {0.643317,0.642730}, + {-0.038357,-0.731389}, + {-0.529627,-0.518347}, + {-0.458770,-0.602541}, + {0.717108,-1.502174}, + {1.639891,-0.046797}, + {0.367167,-0.575410}, + {0.200877,-0.125050}, + {1.282175,-0.037682}, + {-0.094635,-0.888363}, + {0.413420,1.283817}, + {0.132756,0.300671}, + {-0.367404,1.005577}, + {0.511375,-0.097647}, + {-0.375077,0.423522}, + {0.382736,0.001469}, + {0.044349,-1.190297}, + {-1.190740,0.471491}, + {0.835772,0.424912}, + {1.030520,0.464877}, + {-0.529949,0.824068}, + {-0.099363,0.508190}, + {-1.371466,0.242051}, + {0.916338,-1.128584}, + {0.785841,-1.448629}, + {0.407546,0.603846}, + {0.575293,-0.166221}, + {0.886545,0.439648}, + {-0.226133,0.961934}, + {-0.165523,0.076377}, + {-0.678735,-0.898540}, + {-0.053888,1.308609}, + {0.584848,0.060583}, + {0.083871,-0.233156}, + {0.004868,0.283304}, + {0.552259,0.868118}, + {0.500338,-0.610468}, + {-0.043386,-0.346571}, + {-0.498805,0.288491}, + {0.438704,-0.106490}, + {0.415201,-0.503631}, + {0.032692,0.644929}, + {0.101192,0.299544}, + {0.381060,-1.411974}, + {-0.859828,-0.958490}, + {-0.680687,0.892740}, + {0.112933,0.002252}, + {-0.278048,-0.241376}, + {-2.217421,-0.418946}, + {0.671425,0.447137}, + {1.852803,-0.254499}, + {-0.777766,0.350337}, + {0.058883,-0.792590}, + {1.819335,0.931958}, + {-0.140655,0.687205}, + {-0.454620,0.532005}, + {0.520396,-0.641183}, + {-0.614732,-0.794939}, + {-0.555090,0.194826}, + {-0.867211,-0.430899}, + {0.114316,0.279198}, + {0.906085,0.126300}, + {-1.652861,-0.398311}, + {0.720231,0.310120}, + {0.616857,-0.224845}, + {-0.355100,0.825606}, + {-0.443765,-0.588850}, + {0.548479,0.069557}, + {0.311662,0.550548}, + {1.211246,-0.191114}, + {-0.220659,1.110956}, + {-0.359286,-0.164330}, + {0.789602,-0.070392}, + {0.566583,-0.827020}, + {0.595349,-0.690691}, + {0.189841,0.431550}, + {-0.289571,-0.607088}, + {0.621366,-0.321307}, + {0.186891,-0.852539}, + {0.232188,-1.220607}, + {-0.612862,0.059821}, + {-0.105208,0.298759}, + {-0.329366,-1.318732}, + {0.320709,0.096560}, + {0.140400,-1.134450}, + {-1.507197,-1.015648}, + {0.397460,0.411895}, + {-0.815200,-0.096281}, + {0.168722,0.671290}, + {-0.859969,0.821381}, + {0.171885,-0.220966}, + {-0.093656,-1.361741}, + {-0.527003,0.899775}, + {0.390672,-1.707368}, + {0.729568,-0.255314}, + {0.688398,0.539302}, + {-0.397821,0.236694}, + {-0.255357,0.443405}, + {1.355847,0.620758}, + {1.705390,0.158142}, + {1.290421,-0.602823}, + {-0.732108,-0.318124}, + {0.541361,0.046519}, + {-0.502741,-1.050050}, + {0.252136,-0.639033}, + {0.878938,0.856368}, + {-0.690850,1.354681}, + {0.104990,0.071316}, + {0.447853,-0.020789}, + {-0.009859,-0.006837}, + {-0.719030,0.285837}, + {-0.045532,1.180974}, + {-0.413249,-0.120820}, + {0.590697,0.086396}, + {-0.312210,0.058620}, + {0.038969,-0.080060}, + {0.668350,0.562553}, + {-0.339013,0.060135}, + {-0.907438,-0.823162}, + {-0.119806,-0.877603}, + {-0.478883,-0.143292}, + {-0.320699,0.212539}, + {0.100108,0.485710}, + {-0.392466,-0.806866}, + {0.001016,0.076458}, + {-0.592774,0.343524}, + {1.462533,-0.066516}, + {-0.569967,0.315363}, + {-0.481084,0.337295}, + {-0.087391,0.658159}, + {-0.302733,0.653680}, + {0.413127,0.535186}, + {-0.582368,0.582489}, + {1.018942,0.463516}, + {-0.061175,-0.350878}, + {-1.630071,-0.232123}, + {1.208054,0.322525}, + {0.230705,0.582932}, + {-0.217847,0.575781}, + {0.893442,0.630389}, + {-0.174874,0.390805}, + {0.956859,0.734961}, + {0.438679,0.368285}, + {1.409507,-0.272855}, + {-0.021050,0.944726}, + {-0.227605,-1.004858}, + {0.346623,0.582952}, + {0.576312,0.318435}, + {1.094793,-0.629266}, + {-1.088802,0.041459}, + {-0.500393,0.442719}, + {-0.271167,0.374385}, + {0.241921,0.418248}, + {-0.627281,-1.002708}, + {-1.147085,-0.423343}, + {0.728013,-0.479764}, + {0.055815,-0.515315}, + {0.496916,0.348340}, + {0.640592,-0.044396}, + {-0.823480,-0.081510}, + {-0.658153,0.363340}, + {0.549048,0.679255}, + {0.379224,0.498001}, + {0.531963,0.993990}, + {0.503592,0.389701}, + {-0.354800,0.131830}, + {0.447769,-0.726391}, + {-0.226749,0.070274}, + {1.525876,0.048507}, + {0.423583,0.515601}, + {0.281501,0.333000}, + {-0.581471,-0.653560}, + {0.356261,0.210534}, + {-1.831239,-2.179264}, + {-0.207313,2.443682}, + {0.581231,0.219500}, + {0.244048,-0.433631}, + {0.234179,-0.519635}, + {0.321517,-0.667325}, + {0.331807,0.023669}, + {0.150836,0.951006}, + {0.850205,-0.427679}, + {-0.266342,0.492303}, + {0.421612,-0.671137}, + {0.097019,-0.343781}, + {0.353095,0.071768}, + {0.399844,1.140014}, + {-0.092161,0.421038}, + {0.951596,0.997798}, + {0.233831,-0.888818}, + {-0.914231,0.468451}, + {-0.320417,0.768939}, + {0.010017,-0.067670}, + {-0.641204,0.499319}, + {0.464514,-0.342039}, + {0.806917,0.412848}, + {-0.389667,-0.723328}, + {1.504390,-0.862004}, + {-0.077352,-0.895115}, + {-0.618964,0.190222}, + {0.301279,0.239691}, + {-1.242100,0.120618}, + {0.930139,0.521412}, + {0.529753,-0.277023}, + {-0.884634,-0.158847}, + {0.636505,-0.971609}, + {-0.835765,0.991747}, + {0.277340,-0.861971}, + {1.021073,1.142868}, + {-0.705786,0.603524}, + {0.156000,-0.793177}, + {0.066289,-0.265637}, + {-1.395549,-0.477809}, + {-0.398661,0.403177}, + {-0.459976,-0.843605}, + {0.984018,-0.852629}, + {0.218633,-0.126745}, + {-0.282519,0.221063}, + {-0.030076,0.666546}, + {-0.069338,0.189674}, + {0.437178,0.500713}, + {0.391939,0.145078}, + {-1.572762,0.700506}, + {-1.015432,0.377474}, + {-0.840338,0.937558}, + {0.342004,0.167650}, + {-0.060252,0.117581}, + {0.472117,0.635502}, + {0.104385,-0.161998}, + {1.188391,-1.588144}, + {-1.256569,-0.943382}, + {-1.338045,-1.795011}, + {0.423467,-0.663819}, + {0.202217,0.684588}, + {0.233240,1.011311}, + {-0.758494,0.433929}, + {0.926118,-0.054441}, + {0.564314,-0.974460}, + {0.726559,-1.559723}, + {-0.541272,-0.563339}, + {0.749341,-0.459923}, + {-0.592150,-0.292360}, + {-1.425995,-1.199563}, + {0.630984,0.173879}, + {-0.496013,0.849446}, + {0.730005,-0.623744}, + {0.339948,0.700938}, + {0.318261,-1.431390}, + {0.179177,-0.081351}, + {0.422595,0.110693}, + {0.525183,-0.014276}, + {0.791773,-0.477120}, + {0.337622,-0.907080}, + {-0.961643,0.350677}, + {-0.419235,0.114661}, + {-0.036426,-0.074521}, + {-0.851223,0.150299}, + {-1.402542,-0.652643}, + {-0.444904,0.206768}, + {0.649220,0.699797}, + {0.159030,0.332804}, + {0.252170,-0.574764}, + {0.214542,-0.070060}, + {0.672585,-0.214337}, + {0.317019,0.014172}, + {-0.760543,0.267257}, + {1.642791,0.243831}, + {-1.046533,-0.098091}, + {-0.043117,0.019885}, + {0.017252,-1.446676}, + {0.264861,0.685846}, + {0.517324,0.010126}, + {0.343672,0.470516}, + {0.031183,0.226200}, + {-0.069854,-0.562667}, + {0.527272,0.532637}, + {-0.858228,0.534935}, + {0.364460,0.740142}, + {-0.140402,-0.483472}, + {0.017139,0.061624}, + {-0.294724,1.396053}, + {-0.540405,-0.124744}, + {-0.216948,-0.080703}, + {0.142776,-0.316044}, + {-0.253452,-0.078581}, + {-0.025665,0.377449}, + {0.170569,0.657816}, + {0.558146,0.230644}, + {-0.811005,0.844136}, + {1.274885,-0.602096}, + {-0.256525,0.339416}, + {-0.445608,-0.526104}, + {-0.679020,-0.428087}, + {-0.585500,0.611806}, + {0.321104,1.015454}, + {0.088048,0.254566}, + {-0.194493,-0.085023}, + {0.235160,0.956288}, + {0.814722,0.247546}, + {-0.785712,0.033330}, + {1.303812,-0.323498}, + {0.900592,0.189877}, + {0.557885,-0.981445}, + {0.472523,0.784359}, + {0.761798,-0.989764}, + {0.391552,0.560236}, + {0.697718,-0.307289}, + {-0.302544,0.328754}, + {-1.050820,-0.691314}, + {-0.647732,-0.054507}, + {0.021808,0.443342}, + {-1.449923,-0.824803}, + {0.190423,-0.098085}, + {0.631746,-0.468679}, + {0.040293,-1.576056}, + {-0.372698,0.455461}, + {0.220583,0.009939}, + {-0.270850,-0.097216}, + {-0.505603,0.942481}, + {-0.821008,0.456088}, + {-0.903589,-0.879087}, + {-1.037097,0.467356}, + {-0.106833,1.072424}, + {0.863947,0.585468}, + {0.005151,0.434652}, + {-0.400947,-1.251142}, + {0.189981,0.404356}, + {-0.285439,0.379628}, + {0.087294,-0.869496}, + {-0.192137,0.869642}, + {-0.692827,-0.385168}, + {-0.562495,0.217508}, + {0.542657,-0.510556}, + {0.464191,-0.475241}, + {-0.360873,0.439250}, + {0.855123,0.200659}, + {-0.610447,0.408358}, + {0.908977,1.265472}, + {0.594758,-1.492478}, + {0.029868,-0.283152}, + {-0.742647,-0.959861}, + {-1.058543,-0.718420}, + {0.030062,0.074846}, + {0.484401,-1.125483}, + {-0.284086,0.159763}, + {-1.080775,-0.140955}, + {-0.174126,-0.086363}, + {0.739286,-0.217804}, + {0.141377,-0.665255}, + {0.920503,-0.318352}, + {0.312659,0.743913}, + {0.276399,0.154918}, + {0.663342,-0.243720}, + {0.208475,1.070727}, + {1.547443,-0.539637}, + {-0.480355,-0.378719}, + {-0.286722,-0.944048}, + {-0.939835,0.257670}, + {-0.970612,-0.234679}, + {-0.869842,1.134333}, + {0.129012,-1.323594}, + {-0.847059,0.612807}, + {0.143607,0.167211}, + {-0.644289,-0.020060}, + {0.597720,-0.525289}, + {0.344575,0.696561}, + {0.032192,-0.316594}, + {-0.527359,0.248141}, + {0.057843,-1.004926}, + {0.174263,-0.084976}, + {-0.103775,-0.357881}, + {0.591409,0.244348}, + {-1.185070,-0.186006}, + {0.643666,0.679958}, + {-0.560183,-0.180895}, + {-0.730927,0.972640}, + {0.414448,-0.245573}, + {-0.715735,-0.063948}, + {0.602288,-0.368285}, + {-0.595310,-0.096140}, + {0.154414,-0.239226}, + {-0.643521,-1.322612}, + {-0.372893,0.644678}, + {-0.871536,-1.116017}, + {-0.355362,-0.495611}, + {0.807998,-0.506884}, + {-1.512365,1.149375}, + {-0.663902,-0.483402}, + {-0.027985,0.740126}, + {-0.627528,0.621482}, + {0.273277,0.398212}, + {0.646616,1.375140}, + {-0.691492,1.019221}, + {0.666217,0.443858}, + {0.695471,0.183591}, + {-0.505856,-0.531083}, + {0.770952,0.230695}, + {-0.598738,0.451612}, + {0.301636,-1.123508}, + {0.345123,-0.300982}, + {-0.371200,0.114885}, + {0.040179,0.024051}, + {-0.193750,0.538700}, + {-0.540208,0.170493}, + {-0.732932,-0.668738}, + {-1.222816,0.434783}, + {0.056403,0.263628}, + {0.248752,1.012811}, + {-0.511117,-0.049178}, + {-0.044573,-0.975817}, + {0.398627,0.462711}, + {-0.260856,-0.068978}, + {-0.280710,-0.321223}, + {-1.899199,-1.720357}, + {-0.214145,0.610662}, + {0.860637,-0.542982}, + {1.479895,0.512347}, + {-0.634684,-0.205669}, + {-0.774042,0.960716}, + {0.254752,-0.070188}, + {0.048949,0.072511}, + {-0.076806,0.217678}, + {-0.398325,0.011892}, + {0.947991,0.795319}, + {1.507949,-0.647927}, + {-0.067973,0.815859}, + {0.021869,-1.330399}, + {0.260440,-0.736693}, + {0.047665,1.669888}, + {0.051714,-0.750557}, + {0.461558,0.446945}, + {1.025170,0.357000}, + {0.045956,-0.325779}, + {-0.173120,0.700485}, + {0.536135,-0.477065}, + {0.128767,-0.204009}, + {-0.760650,-1.142806}, + {0.136669,-1.190282}, + {0.497392,-1.408788}, + {-0.148019,0.206583}, + {-0.501879,-0.488139}, + {0.009399,-0.681400}, + {0.701198,-0.538127}, + {0.180453,0.485088}, + {-0.265001,0.156447}, + {-0.640031,0.482786}, + {-0.518979,-0.541837}, + {-0.032891,-0.430068}, + {-0.461893,-0.277698}, + {0.262606,0.260080}, + {0.041808,-0.123995}, + {-0.440511,0.223938}, + {-0.106192,-1.594211}, + {-0.418230,0.723012}, + {0.073327,-0.112584}, + {-0.418561,-0.692791}, + {0.368207,0.185128}, + {0.168326,0.239815}, + {0.114983,-0.779877}, + {-0.513697,-0.218598}, + {-0.509730,-1.001503}, + {-0.257517,0.486916}, + {-0.939828,0.965026}, + {-1.454300,-0.203483}, + {-0.492785,-0.713430}, + {0.301437,-0.797414}, + {0.238702,-0.386490}, + {-0.944933,0.181264}, + {0.443444,1.104281}, + {0.703275,-1.091732}, + {-0.739420,0.369381}, + {-0.541723,0.306867}, + {-0.421282,-0.067401}, + {-0.359663,-0.430076}, + {-0.365976,-0.386311}, + {-1.235840,-0.744903}, + {-0.582278,0.165135}, + {0.258208,0.795858}, + {0.656751,-0.199973}, + {-0.661437,-1.236283}, + {-0.183853,0.537246}, + {-0.698045,0.604539}, + {-0.705045,0.847084}, + {-1.459402,0.628008}, + {0.692337,1.236132}, + {-0.260324,0.599788}, + {-0.010288,-0.048783}, + {0.066315,0.077396}, + {0.258401,-1.300776}, + {-0.606507,0.626366}, + {0.918692,0.313908}, + {0.301100,0.600185}, + {0.756285,-0.134042}, + {0.419008,0.068592}, + {0.678707,0.297421}, + {-0.762643,0.544065}, + {0.811504,0.550301}, + {-0.128498,0.753596}, + {-0.506348,-0.102907}, + {-0.361289,-0.120066}, + {0.772548,0.007574}, + {-0.403729,0.699871}, + {0.438742,2.197012}, + {-1.157543,-0.354945}, + {0.220848,0.508695}, + {0.354803,-0.410951}, + {1.084506,0.972850}, + {0.092344,1.433922}, + {0.506397,0.385787}, + {1.217549,0.293367}, + {-0.334559,-0.101333}, + {-0.406466,-0.023401}, + {0.356600,-1.141455}, + {-0.011750,0.287641}, + {-0.050458,0.686041}, + {-1.213470,0.430009}, + {0.551580,-0.801972}, + {0.065996,-0.224313}, + {0.281099,-1.068458}, + {-0.096408,0.757440}, + {1.583368,0.056612}, + {0.087061,0.328131}, + {-0.394441,-1.372195}, + {0.512555,-0.342829}, + {-0.073289,-0.416035}, + {0.913218,-1.088553}, + {-0.698006,0.235712}, + {-0.230038,-0.514247}, + {-0.040607,-0.916763}, + {0.632154,-0.540679}, + {-0.887651,-1.009355}, + {-0.632470,-1.022231}, + {0.190182,1.032801}, + {-0.027089,0.692375}, + {-0.675473,0.192100}, + {-1.255069,0.423638}, + {-0.195848,0.109171}, + {0.292869,-1.505548}, + {0.515116,-0.182036}, + {-0.690289,0.288317}, + {1.434559,-0.687078}, + {-0.461406,-1.224466}, + {-0.374814,0.354303}, + {0.616066,0.664220}, + {-0.312574,-0.753793}, + {-0.010131,0.316177}, + {0.677541,-0.304399}, + {0.362407,-0.542312}, + {0.421985,-0.426462}, + {1.074806,0.427175}, + {0.714370,-0.383605}, + {0.981694,-0.101514}, + {-0.580749,0.366888}, + {0.150148,1.272927}, + {0.102605,1.472671}, + {0.133743,-0.162327}, + {0.098048,0.154761}, + {0.138915,0.424027}, + {-0.068587,-0.269135}, + {0.151768,-0.574258}, + {0.705147,0.504406}, + {-0.199471,-0.747309}, + {0.660886,1.191666}, + {-0.434080,0.337494}, + {0.065750,-1.195325}, + {-0.022976,0.447841}, + {0.105985,0.089817}, + {-0.084156,-0.318798}, + {0.072991,-0.327037}, + {-0.128438,0.126156}, + {-0.405562,-0.076535}, + {-0.426691,-0.173649}, + {-1.860770,-0.948092}, + {-0.127870,-0.262563}, + {-1.138050,-0.096580}, + {0.370414,-1.870972}, + {-0.169835,0.059237}, + {0.107617,0.823066}, + {-1.055285,-0.282586}, + {-1.207492,0.630350}, + {0.199582,0.096160}, + {0.726497,0.068093}, + {-0.532842,-0.156855}, + {1.093617,0.601716}, + {-1.528594,-0.081629}, + {-0.210981,-0.742901}, + {0.320628,-1.275187}, + {-0.959229,-1.040017}, + {-0.435513,-1.345417}, + {0.883669,0.681837}, + {-1.529650,-0.446392}, + {-0.720045,1.701187}, + {-1.098947,0.930781}, + {-0.652223,-0.676971}, + {0.540277,0.620405}, + {-0.084783,-0.516229}, + {-0.645938,-0.752328}, + {0.592236,-0.445923}, + {0.987580,-0.654351}, + {0.631582,-0.687112}, + {-0.747723,-0.216685}, + {-0.242519,0.244150}, + {-0.503676,-0.402645}, + {-1.298327,1.084137}, + {-0.362467,0.491899}, + {-0.033132,-0.268392}, + {-0.126278,0.423416}, + {-1.031263,-0.085027}, + {0.243811,-0.366720}, + {0.639498,0.129467}, + {-0.335136,1.108368}, + {-0.512740,1.873530}, + {0.643081,0.099739}, + {-0.255082,0.612374}, + {-0.175646,0.130710}, + {0.108781,1.292291}, + {-0.614601,0.259555}, + {0.168058,0.048234}, + {-0.574672,0.318310}, + {-0.216721,-0.336900}, + {-0.005054,0.439731}, + {-0.850990,0.370968}, + {-0.067698,0.383192}, + {0.383593,-0.525092}, + {-0.061197,0.459613}, + {1.361076,-0.818933}, + {-0.505306,-0.543337}, + {0.635340,-0.050133}, + {-1.114203,0.161483}, + {-0.176448,-0.346756}, + {0.120352,0.445743}, + {-0.245858,-0.834506}, + {-0.920717,0.600234}, + {-0.297926,0.695282}, + {1.293254,0.324459}, + {-0.963549,0.214107}, + {0.291750,0.306301}, + {-0.020635,-0.108404}, + {-0.625249,0.393424}, + {-0.678041,-0.306473}, + {1.267072,-0.004506}, + {0.022893,0.861164}, + {-0.623908,0.323349}, + {0.368754,0.620841}, + {-0.528447,-0.141905}, + {0.088043,1.543236}, + {-0.899354,-0.855242}, + {-0.026557,-0.453395}, + {0.027462,1.047341}, + {0.769418,-1.229816}, + {1.440973,-0.699249}, + {0.073809,-0.849225}, + {0.260617,-0.050471}, + {-0.343781,-0.188150}, + {0.196896,0.184787}, + {0.186939,-0.670752}, + {0.922055,1.559028}, + {0.501239,-0.571159}, + {-0.501999,0.117773}, + {-0.919095,0.778399}, + {0.351764,-0.823198}, + {0.148608,0.329635}, + {1.115657,-0.601348}, + {-0.356139,-0.377287}, + {0.082008,-0.934193}, + {0.413781,-0.481072}, + {0.159484,0.219529}, + {0.769932,-0.473240}, + {-0.127988,-0.380868}, + {0.633024,-0.074308}, + {0.422594,-1.072281}, + {-0.962782,0.898361}, + {0.606030,-0.243257}, + {0.060875,-0.778985}, + {-0.615502,0.659961}, + {0.690715,-0.017834}, + {0.475395,-0.359472}, + {-0.974448,-0.511066}, + {0.692056,-0.796830}, + {0.464684,-0.250498}, + {-0.473990,0.157603}, + {-0.221502,-0.380543}, + {0.776700,0.874519}, + {0.278098,-0.390918}, + {-0.020204,0.129496}, + {-0.492732,-1.203373}, + {-0.192923,0.392172}, + {-0.456686,-1.096002}, + {0.225734,-0.338651}, + {-0.423440,-0.151675}, + {0.047326,0.697747}, + {-1.402831,0.389770}, + {-0.481669,-0.607328}, + {0.707638,-0.420784}, + {-0.585504,0.372906}, + {0.884026,0.946783}, + {-0.890221,-0.123712}, + {-0.946448,-1.331909}, + {-0.161589,0.672376}, + {-0.428532,0.326757}, + {-0.478465,-0.457691}, + {-0.054022,1.405670}, + {-0.333135,0.375169}, + {-0.372505,0.854525}, + {1.535750,0.415969}, + {0.295118,-0.716003}, + {-0.336206,-0.196896}, + {0.743605,0.229018}, + {0.792000,-1.768616}, + {-1.354626,0.963126}, + {-1.405782,0.680236}, + {-0.237975,-0.000923}, + {-0.690345,-1.003080}, + {-1.313895,-0.033107}, + {-0.614969,0.864382}, + {0.990158,1.112463}, + {-1.001071,-0.634240}, + {0.594301,0.062948}, + {-0.534023,0.563650}, + {0.605461,-0.096271}, + {0.236832,-0.313801}, + {-0.493347,-0.201958}, + {-0.520262,-0.387792}, + {-0.912513,-1.199020}, + {-0.129950,-0.310796}, + {-0.541204,-0.716691}, + {-0.081170,0.596112}, + {0.737798,1.145168}, + {-0.928121,-0.998200}, + {0.669610,1.145227}, + {0.832308,0.318849}, + {-0.039104,-0.614171}, + {0.755613,-0.876583}, + {-1.016801,0.001975}, + {-0.050756,0.076366}, + {0.630505,-0.239083}, + {0.197191,-0.747906}, + {-0.372266,-0.592826}, + {-1.529025,0.438443}, + {-0.412525,-0.849941}, + {0.829853,0.127465}, + {0.283020,0.119718}, + {1.891486,-0.325311}, + {-0.585484,-0.410801}, + {0.059833,-0.092511}, + {-0.831938,-0.638384}, + {-0.235357,0.183885}, + {-0.347581,-1.189650}, + {0.014281,-0.758982}, + {0.350777,-0.963252}, + {-0.065657,-0.156335}, + {-0.165794,0.022285}, + {0.747007,-0.478210}, + {0.567832,-0.106546}, + {0.396140,0.016729}, + {-0.272671,0.066605}, + {1.376385,0.510745}, + {-0.060046,0.644132}, + {0.775174,-0.161923}, + {0.685821,0.001454}, + {-1.561711,0.881058}, + {1.787424,-0.058002}, + {0.336836,-0.858057}, + {-0.331450,-0.740409}, + {-2.109117,0.353266}, + {-0.216311,0.071157}, + {0.114973,-0.504866}, + {-0.622727,-0.587637}, + {-1.153190,0.816906}, + {-1.426416,1.516651}, + {-1.307579,0.228991}, + {-0.770577,-0.045774}, + {0.372744,0.808508}, + {0.120187,-0.103078}, + {-0.195718,-0.374301}, + {1.075698,1.295923}, + {-0.361592,-0.873742}, + {-0.418061,-1.279100}, + {0.784779,-1.675948}, + {1.268633,-0.865789}, + {-0.519273,0.090093}, + {-0.262722,-0.402864}, + {-0.951638,0.084945}, + {-0.355352,-0.351439}, + {0.285010,0.056406}, + {-0.950448,-0.397773}, + {-0.464651,0.160215}, + {1.109933,-0.480592}, + {-1.419546,1.158028}, + {0.905718,0.111670}, + {-0.237821,0.135966}, + {-1.259691,0.323498}, + {-0.470925,-0.541165}, + {0.102619,-0.372763}, + {-0.712979,-0.457720}, + {0.970056,0.171370}, + {-1.135346,-0.461788}, + {-0.633181,1.008828}, + {1.176038,-1.068340}, + {0.500422,-0.673381}, + {0.894371,-0.164669}, + {0.483704,0.314087}, + {-1.188251,-0.842904}, + {-0.157257,0.172253}, + {-0.898239,0.677601}, + {-0.279064,-1.615232}, + {-0.992485,0.177739}, + {-0.476199,-0.218263}, + {-0.132737,1.169939}, + {-1.302813,0.651199}, + {-0.310092,0.900820}, + {0.049591,-0.876856}, + {-0.107885,-0.364864}, + {-0.126501,-0.848695}, + {1.113648,0.511673}, + {0.264047,0.194513}, + {-0.056919,0.273691}, + {0.703939,-0.054764}, + {-1.272536,-0.341796}, + {-0.119178,-0.654156}, + {0.132597,-0.130565}, + {0.899426,0.459049}, + {-0.391768,-1.166623}, + {-0.225483,-0.557438}, + {-0.167593,0.661089}, + {-1.659540,-0.002336}, + {0.794658,0.033512}, + {-1.069324,0.241018}, + {-0.918777,1.380683}, + {0.332766,0.468339}, + {1.686444,-0.943082}, + {-0.547574,-0.948940}, + {0.030771,0.036540}, + {-0.833640,-1.376152}, + {-1.243536,0.371659}, + {-0.237937,-0.425704}, + {0.259845,1.519797}, + {-0.911238,-0.668074}, + {-0.013456,0.176795}, + {-0.882968,-0.341753}, + {0.854397,0.383916}, + {0.235472,0.285590}, + {-0.359982,0.097074}, + {-0.131102,-1.300127}, + {0.266605,0.174879}, + {-0.294888,0.138128}, + {-0.108081,0.172793}, + {-0.478603,-0.057927}, + {-0.712859,1.038960}, + {0.209788,0.449368}, + {0.387551,-0.640651}, + {0.003760,-0.340271}, + {-0.061907,0.617510}, + {0.392158,-0.953156}, + {0.726593,-0.189035}, + {0.597882,-0.274553}, + {0.666026,0.048594}, + {0.284210,0.946907}, + {0.305420,0.165142}, + {0.404228,0.231668}, + {-0.017939,-1.142982}, + {1.139064,-0.458041}, + {-0.819369,0.895217}, + {-0.047318,0.285829}, + {-0.568780,-0.190502}, + {-0.606370,-0.099547}, + {1.424332,0.802029}, + {-0.821119,0.250209}, + {-1.376602,1.326391}, + {-1.098387,1.606694}, + {0.496951,-0.357961}, + {0.210738,0.046687}, + {0.369485,-0.157254}, + {-0.544895,-0.402399}, + {-0.882763,-0.055791}, + {-0.357232,0.166177}, + {-0.615774,-0.069649}, + {-0.767183,-0.112721}, + {0.375762,-0.020422}, + {-0.098314,0.398756}, + {0.176510,0.550347}, + {1.200922,-0.003930}, + {1.325052,-0.313705}, + {-0.150081,1.250977}, + {2.057610,0.216751}, + {-0.238246,0.229506}, + {0.857400,-0.572607}, + {-0.562334,1.100413}, + {0.384247,-1.554662}, + {0.067540,0.515121}, + {1.340051,-0.351801}, + {-0.422137,-0.315044}, + {0.860255,-0.025928}, + {-0.499608,-0.491812}, + {-0.466429,-1.328300}, + {-0.323761,0.241738}, + {0.393656,-0.847954}, + {0.459800,1.193975}, + {0.310703,-0.636093}, + {-0.445585,0.424384}, + {0.846073,0.364936}, + {-0.259331,-0.399480}, + {0.436216,-0.067255}, + {-0.733748,-0.699265}, + {0.324053,1.497643}, + {0.615826,0.748861}, + {1.193295,-1.242813}, + {-0.466988,0.156967}, + {0.611477,0.193048}, + {-0.055928,-0.158672}, + {0.975226,-0.459924}, + {-0.655781,-0.693858}, + {1.324562,-0.668467}, + {0.864872,-2.109563}, + {0.717141,-0.626098}, + {-1.302740,0.096267}, + {1.116621,-0.009268}, + {0.100593,1.267514}, + {0.425933,-0.009823}, + {-0.173129,-0.174238}, + {0.153032,0.109386}, + {-0.318603,0.546064}, + {0.289912,0.429496}, + {0.155977,0.603650}, + {-0.776808,0.920140}, + {-0.878454,-0.082128}, + {0.608451,1.174464}, + {0.353067,-0.103951}, + {-0.452806,0.168395}, + {1.339559,0.439086}, + {-0.020182,-1.321645}, + {0.118079,-0.311166}, + {-0.272936,0.134373}, + {0.373963,-1.299783}, + {0.054969,0.261178}, + {-0.239239,-0.615398}, + {-1.001020,-1.146200}, + {0.449862,-1.228006}, + {0.323008,0.572236}, + {-1.653429,0.189960}, + {-1.049711,-0.245348}, + {0.976135,0.169753}, + {0.706318,-0.614142}, + {1.130571,1.122720}, + {-0.180019,-0.492531}, + {0.585209,-0.465400}, + {-0.786602,0.685904}, + {0.096573,0.109326}, + {-0.141775,-0.749653}, + {-0.059186,-0.316195}, + {-1.462725,-1.202917}, + {-1.236354,0.418481}, + {0.151833,0.157247}, + {0.691259,0.080574}, + {0.483058,-1.638888}, + {0.128021,1.112820}, + {-0.191649,1.303981}, + {-0.086171,-1.095404}, + {-0.568276,0.304373}, + {2.181999,-0.551641}, + {-1.035423,-0.289490}, + {0.155008,-0.150995}, + {-1.103950,-1.857698}, + {-0.668989,-0.467956}, + {-0.185524,0.446566}, + {-0.643301,-0.258359}, + {0.087981,-0.547687}, + {-0.516929,0.605263}, + {0.342129,0.093293}, + {2.011109,0.019105}, + {0.363808,0.781133}, + {-1.536479,1.337943}, + {0.435211,-0.631518}, + {-0.556866,-0.694405}, + {1.114228,-0.174913}, + {0.538381,-0.752450}, + {0.550732,-0.407947}, + {0.022731,-0.085540}, + {0.188773,0.308336}, + {0.487134,-0.164736}, + {0.186646,1.139253}, + {0.045252,-1.157604}, + {1.084051,-0.890305}, + {0.619163,-0.150592}, + {0.354104,0.841673}, + {0.229173,-2.117542}, + {-0.396302,-0.148405}, + {-0.233108,0.645852}, + {-0.409376,0.680217}, + {0.561133,-1.591081}, + {0.132287,1.114235}, + {-0.167495,-0.729692}, + {-0.563572,-1.003719}, + {-1.407809,0.049666}, + {0.259140,-1.152104}, + {0.876016,0.966907}, + {1.109627,0.127202}, + {0.900875,0.161930}, + {-0.239223,-0.745766}, + {-0.049711,-0.106964}, + {-1.172386,1.606319}, + {1.580091,-0.165441}, + {-0.105897,0.096532}, + {0.514744,-0.441290}, + {-0.410128,1.642280}, + {1.025580,-0.241450}, + {0.570167,0.040530}, + {0.871560,-0.323875}, + {-0.234388,-1.244179}, + {0.675376,0.964659}, + {0.374233,0.149805}, + {-0.789252,1.310412}, + {-0.284409,1.148222}, + {-0.660847,0.363166}, + {0.782152,0.454305}, + {0.172868,0.088907}, + {-0.278771,0.023603}, + {0.293272,0.372982}, + {0.311987,0.322549}, + {0.606624,0.527143}, + {0.192137,0.430538}, + {-0.324541,0.343529}, + {-0.158355,0.734556}, + {-0.137073,-0.403531}, + {-0.250048,0.162757}, + {0.447298,0.471529}, + {-0.874570,-0.929687}, + {0.556881,0.694617}, + {0.202336,0.104962}, + {-1.529270,0.384855}, + {0.164846,-0.749040}, + {-0.712317,-0.291645}, + {-0.649720,-0.482616}, + {-0.157974,0.405484}, + {0.057860,0.996968}, + {0.618568,-0.192818}, + {-0.569099,0.526239}, + {0.535368,-2.569703}, + {0.287562,-0.200457}, + {-0.774001,-0.447806}, + {-0.677427,0.757377}, + {0.440255,1.722018}, + {0.221734,0.363236}, + {-1.142799,0.246628}, + {-0.000987,0.084137}, + {0.177699,-0.161609}, + {0.219112,0.145815}, + {1.192557,-0.513284}, + {-1.063099,-0.407821}, + {0.344825,0.059121}, + {0.324140,-1.340732}, + {-0.385376,0.564923}, + {1.112126,0.068623}, + {1.217525,-0.793810}, + {-0.173809,0.211866}, + {0.008904,0.344939}, + {-0.551659,-0.020264}, + {0.409603,0.130882}, + {-0.460838,0.011734}, + {0.767436,-0.389044}, + {-0.317004,1.030325}, + {0.765716,1.202983}, + {-0.899111,-0.543610}, + {-0.281986,-0.684544}, + {-0.364272,0.091067}, + {-0.944820,0.735864}, + {-0.473074,0.236066}, + {0.590428,-0.001307}, + {0.902710,0.060698}, + {-0.479309,0.186699}, + {-0.622708,0.120223}, + {-0.552450,-0.012236}, + {0.431918,1.303160}, + {0.050594,-0.525912}, + {0.362519,0.624894}, + {-0.941750,0.479853}, + {-0.146931,-0.166574}, + {-0.222338,-0.578684}, + {0.516931,0.696953}, + {-0.950476,0.567101}, + {0.021004,0.707791}, + {1.023076,1.585372}, + {-0.379172,-0.455007}, + {0.999678,-1.125859}, + {1.112727,1.119853}, + {-1.229585,-0.372180}, + {0.485929,1.072664}, + {-0.533969,-0.058251}, + {-0.780870,-0.083022}, + {0.197475,-0.090851}, + {0.869964,-0.537793}, + {0.041044,0.400725}, + {0.337632,0.010040}, + {0.995867,-0.413684}, + {-0.197465,-0.816039}, + {0.113805,1.162790}, + {-0.869838,0.460479}, + {-0.720627,0.136898}, + {-0.555949,0.348150}, + {-1.010460,0.876235}, + {0.288385,0.442596}, + {0.628015,0.092587}, + {1.017268,1.102030}, + {0.136902,0.765530}, + {-1.074543,-0.048865}, + {-1.177793,-0.693738}, + {0.527523,0.145117}, + {-0.760523,0.203876}, + {0.938313,1.041252}, + {0.539914,-0.157041}, + {-0.572504,-0.177670}, + {-0.180789,-0.215865}, + {0.138948,-0.228659}, + {-0.294927,-0.979739}, + {-0.295661,-1.044591}, + {0.151225,-1.389272}, + {-0.756423,-0.423643}, + {-0.061934,-0.301791}, + {-0.270853,-0.240812}, + {-0.803715,0.821259}, + {-0.697601,0.617383}, + {0.289209,-0.053389}, + {-0.896823,0.262431}, + {-0.295344,-0.261914}, + {0.058281,0.044589}, + {-1.008325,0.176720}, + {0.175546,-0.335204}, + {0.631611,-0.600731}, + {-0.433719,-1.128985}, + {-0.409720,-0.312795}, + {0.323113,0.261763}, + {0.036730,0.115460}, + {0.059806,0.466118}, + {-0.435466,0.810298}, + {1.362624,-0.053060}, + {0.017303,0.016551}, + {-0.831908,-0.085054}, + {-0.047121,-1.210964}, + {-0.492066,0.242858}, + {0.390794,0.069634}, + {0.814141,-0.385739}, + {0.000600,1.161953}, + {-0.825328,-1.076807}, + {-0.137587,-0.380351}, + {-1.033185,0.376119}, + {-0.942623,0.986463}, + {-0.615904,0.634404}, + {0.405671,0.449572}, + {-0.610933,0.735977}, + {-0.318879,0.163802}, + {-0.507174,-0.284257}, + {0.727653,-0.764991}, + {0.553744,0.406244}, + {0.109977,-0.425145}, + {0.007260,0.694717}, + {-0.589111,-0.324782}, + {1.296184,-0.280316}, + {0.273412,-0.063905}, + {0.628945,0.335630}, + {-0.149412,-0.710817}, + {1.448227,-0.686517}, + {0.812279,1.204193}, + {-0.323526,0.612276}, + {1.317114,-0.397886}, + {-0.905302,-0.684715}, + {-0.018889,0.460583}, + {0.413307,0.079909}, + {0.196694,-0.264636}, + {0.237990,0.380848}, + {1.110570,0.186631}, + {1.100941,0.944369}, + {-0.268469,-0.372955}, + {0.654447,-1.005281}, + {-0.867087,0.494783}, + {-0.307357,0.224308}, + {1.126564,-0.447765}, + {-1.441809,-0.432263}, + {0.829316,-0.254776}, + {0.276601,0.028482}, + {0.321513,0.477089}, + {-0.326903,-0.065775}, + {0.181178,0.425015}, + {-0.021201,-0.632189}, + {0.196787,-0.270172}, + {0.482211,0.760539}, + {-0.021529,0.350678}, + {0.538731,0.792097}, + {-0.792762,-1.073304}, + {0.269102,0.466839}, + {-0.457873,-0.267988}, + {-1.086786,-1.382579}, + {-0.902461,-0.333688}, + {1.449862,0.549708}, + {1.103982,-0.815866}, + {-0.331610,-0.126280}, + {-0.434605,-0.574026}, + {-0.564428,0.451053}, + {1.065076,-0.142613}, + {-1.067355,-0.781069}, + {0.415735,0.395771}, + {-0.257126,-0.498318}, + {0.229113,-0.904408}, + {0.475347,0.932772}, + {-0.126197,-0.312728}, + {0.015972,1.513573}, + {0.072260,-0.478380}, + {0.199441,-1.515994}, + {0.801702,-0.148107}, + {0.732459,-0.716389}, + {-1.055474,0.377686}, + {0.882117,-0.319396}, + {-0.389893,0.614071}, + {-0.426814,0.453146}, + {-1.280709,0.307466}, + {0.465162,-0.568253}, + {-0.105649,0.264185}, + {0.207625,0.360816}, + {-1.212366,0.121881}, + {0.229992,-0.215450}, + {0.416004,-0.583465}, + {0.716912,-0.118409}, + {0.096084,-0.512867}, + {0.186247,0.032560}, + {0.028022,-0.556780}, + {1.150752,-0.299593}, + {-1.619091,-0.453159}, + {-0.212540,-1.038386}, + {0.255212,-0.885610}, + {-0.279565,0.220245}, + {-0.933030,1.702921}, + {1.098960,-0.501176}, + {0.621376,-0.194441}, + {-0.046707,-0.191768}, + {0.820383,-1.152666}, + {-0.625110,1.133264}, + {0.136433,-0.774816}, + {0.450809,-0.089682}, + {-2.456335,0.966943}, + {0.912559,-0.737705}, + {-0.981240,-0.672716}, + {-0.364111,-0.695029}, + {-0.339351,1.566577}, + {-1.639069,1.051843}, + {0.305872,0.958157}, + {-0.506132,0.126778}, + {0.213442,0.269895}, + {0.219518,0.742494}, + {0.850854,0.816322}, + {0.239080,0.545993}, + {-0.092504,0.731571}, + {0.440567,-1.122125}, + {0.610520,-0.413122}, + {-0.578101,-0.718322}, + {-0.222974,1.427200}, + {0.545492,-0.056598}, + {0.627889,1.317222}, + {-0.048461,-0.116290}, + {-0.394290,-0.229413}, + {-0.462502,-0.045762}, + {-0.200809,0.574322}, + {0.339283,-0.584942}, + {-0.393629,1.095376}, + {-0.371673,-0.655765}, + {-0.260952,-0.654112}, + {1.083400,0.823028}, + {-0.952867,-0.473551}, + {-0.018485,0.260282}, + {0.387338,0.088609}, + {-0.988637,-0.394637}, + {-0.651919,-0.458630}, + {1.482098,0.311456}, + {0.617416,0.339357}, + {0.024986,-0.654472}, + {-0.633096,-1.253554}, + {0.316704,-1.543150}, + {-0.309558,-0.064486}, + {-0.027012,-1.213059}, + {0.155906,-0.785986}, + {-0.021507,-0.082515}, + {1.588522,-1.195031}, + {-0.385961,-0.717514}, + {0.813259,0.823171}, + {1.542545,-0.583962}, + {0.699293,1.152578}, + {-2.520775,-0.740568}, + {1.650931,0.444675}, + {-0.894331,-1.449709}, + {-0.606002,-0.786614}, + {0.612772,0.153705}, + {-0.921274,0.922913}, + {0.440139,0.658577}, + {-0.229417,0.728289}, + {1.547479,-2.279597}, + {-0.319338,-0.157973}, + {-1.461973,1.054925}, + {-0.679512,-0.422229}, + {-0.320076,-0.624900}, + {-0.272455,-0.652699}, + {-0.050571,-0.713983}, + {-0.389856,-0.423589}, + {-0.973979,0.062857}, + {1.550694,-0.360476}, + {0.159432,-0.127434}, + {-0.372704,0.494970}, + {0.300625,-0.256622}, + {-1.003412,0.402113}, + {-0.075613,-1.686128}, + {0.482382,-0.480330}, + {0.093242,-0.754616}, + {0.281740,0.184726}, + {-1.393960,-0.547393}, + {0.536805,-0.148686}, + {-0.465176,0.255458}, + {0.306821,0.035537}, + {0.559831,-0.109144}, + {-0.714140,0.108895}, + {0.217559,0.447498}, + {-0.314098,-0.724385}, + {-1.492888,-0.993242}, + {-0.428441,-0.227405}, + {0.188548,0.658179}, + {0.768091,1.556233}, + {-1.545457,-1.086941}, + {0.140440,0.092669}, + {0.537909,-0.495652}, + {0.332552,-0.612271}, + {-0.511223,-0.340514}, + {0.079385,-0.114250}, + {-1.463661,0.057599}, + {0.223999,0.976185}, + {-0.543545,0.027883}, + {0.979747,0.489620}, + {-1.192039,-0.798037}, + {0.730126,-0.056639}, + {-0.267151,0.693524}, + {0.558097,0.153657}, + {-0.696618,-1.338386}, + {-0.909832,-0.096288}, + {0.882699,0.742963}, + {-0.275874,-0.809979}, + {-0.053137,-0.168546}, + {-0.422878,-0.367399}, + {1.557298,0.459112}, + {0.246203,-1.167259}, + {-0.504330,-0.532256}, + {0.987550,-0.885807}, + {0.683296,-0.854008}, + {-0.999180,0.227098}, + {-0.668949,-0.025123}, + {0.025665,-0.317833}, + {1.113571,0.491572}, + {-0.168884,1.194192}, + {0.093188,-1.044563}, + {1.753660,-0.163939}, + {0.555963,-0.609948}, + {0.794400,0.059530}, + {-0.335538,1.145340}, + {-0.230857,-0.288830}, + {-0.449282,0.390382}, + {0.306169,0.184478}, + {-0.346556,-0.363817}, + {-0.831726,0.067839}, + {1.276276,-0.466759}, + {0.244800,0.473109}, + {-0.215391,-0.292773}, + {-0.273257,0.201723}, + {0.842924,-0.698762}, + {-0.729074,0.256315}, + {-1.456625,0.252573}, + {0.559147,-0.282695}, + {0.994685,0.128463}, + {0.300242,-0.524755}, + {0.229392,-0.252261}, + {-0.262222,1.375848}, + {-0.629900,0.580724}, + {-0.886522,0.229244}, + {0.175535,-0.159406}, + {-0.005415,0.158939}, + {0.950522,0.379940}, + {0.346992,0.559263}, + {-0.822353,0.315018}, + {1.106625,-0.737253}, + {-0.252764,-0.041978}, + {-0.652043,1.078668}, + {0.544128,-0.877090}, + {-0.435260,-0.777845}, + {-0.142025,0.692931}, + {-0.031940,-0.162408}, + {-0.737664,0.759069}, + {0.018416,-0.910539}, + {0.501767,0.015715}, + {-0.525217,-0.909641}, + {0.502059,1.002820}, + {0.550277,0.890858}, + {0.563253,-0.901443}, + {-0.482929,-0.468226}, + {0.459780,-1.053824}, + {0.679393,-0.444330}, + {-1.560609,0.500156}, + {0.326860,-0.233930}, + {0.014115,1.226398}, + {-0.841667,0.256632}, + {-0.986458,0.214088}, + {0.561778,-0.293625}, + {-0.166624,-0.623391}, + {0.072308,-1.647830}, + {0.261475,0.207571}, + {-0.439805,-0.515374}, + {-0.903760,0.247456}, + {-0.992315,-0.455678}, + {-0.736917,-0.314349}, + {-0.760237,-0.334644}, + {-0.808025,0.764268}, + {0.962557,-0.746572}, + {-0.497432,0.389293}, + {-0.627429,0.078673}, + {0.281879,-0.521353}, + {-0.041629,0.996509}, + {0.148478,-0.832781}, + {0.241113,0.180056}, + {0.427418,-1.070871}, + {-0.528049,-0.483790}, + {-0.523555,-0.270324}, + {-0.304426,-0.037406}, + {-0.137959,1.438044}, + {0.928138,-0.431107}, + {0.158206,0.475620}, + {0.290347,-0.571426}, + {0.518227,-0.212278}, + {1.434704,-0.008646}, + {0.870633,0.309615}, + {-0.408402,-0.358914}, + {-0.932732,1.867362}, + {-1.106557,0.682544}, + {0.700628,0.050873}, + {0.606759,0.318505}, + {1.100808,0.865530}, + {1.167061,0.859812}, + {-0.457106,0.360329}, + {-0.412289,0.264824}, + {0.121729,0.471512}, + {-1.263924,0.036896}, + {0.592224,-0.981550}, + {-1.358297,-1.589214}, + {0.370305,0.206402}, + {-0.033672,-0.610428}, + {0.084157,-1.167364}, + {-0.925039,0.239143}, + {0.529815,1.166401}, + {0.059166,0.526304}, + {-1.093501,1.010147}, + {1.095547,-0.668412}, + {-0.013464,-0.212740}, + {0.318854,0.079713}, + {-0.582878,0.209336}, + {0.654810,0.042878}, + {1.084759,0.085261}, + {-0.816288,0.517988}, + {-0.922044,-0.145496}, + {-0.413527,-0.094974}, + {0.921929,0.223829}, + {0.834340,-0.632027}, + {0.740097,0.472727}, + {0.109634,-0.761616}, + {0.181177,0.801596}, + {-0.139230,0.351644}, + {-0.919758,1.187038}, + {-0.538770,-0.565291}, + {1.101719,0.094469}, + {0.063713,1.074669}, + {0.544651,-0.008236}, + {-0.043402,-0.182157}, + {-0.337167,-0.066716}, + {-0.942704,-0.275433}, + {-1.247517,0.659809}, + {0.260576,-0.850054}, + {0.328842,-0.795337}, + {-1.158718,0.621543}, + {0.696945,-1.559381}, + {-0.387067,-0.638698}, + {-0.196632,0.228895}, + {0.300199,0.872357}, + {0.989715,1.032305}, + {-0.595253,0.281982}, + {-0.591831,-0.041140}, + {0.274069,-0.351900}, + {-0.204608,-0.274791}, + {0.111010,1.228848}, + {-1.030237,-0.321911}, + {0.451188,-0.908440}, + {-1.157873,-1.048536}, + {-0.773016,-0.742834}, + {-0.068020,0.052725}, + {0.424745,-0.757197}, + {-0.495433,-0.890633}, + {0.095193,-0.673641}, + {-0.838353,0.958686}, + {-0.070324,0.364606}, + {0.240110,-0.379039}, + {0.814811,0.773006}, + {-0.123048,0.360797}, + {-0.383944,-0.049565}, + {-0.384357,0.170201}, + {0.027846,-0.520829}, + {0.509019,-0.721829}, + {1.510086,-0.121824}, + {0.461037,-0.152050}, + {-0.062760,0.456919}, + {0.903696,-0.632184}, + {0.147880,-1.655441}, + {0.107131,0.254212}, + {-1.168225,0.436568}, + {1.645891,0.720458}, + {0.637719,-0.054386}, + {-0.674512,-0.595368}, + {-1.647293,-0.454644}, + {-1.427878,-1.542565}, + {-1.299486,-0.638739}, + {-0.789832,0.890510}, + {-0.971617,0.239988}, + {1.162886,0.122570}, + {0.296613,0.157020}, + {-0.651558,-1.195472}, + {-0.483987,-0.676177}, + {-1.459346,0.226026}, + {-1.565833,-0.705405}, + {0.562608,-0.783332}, + {-0.335643,0.629401}, + {0.601555,-0.527161}, + {0.172194,-0.279522}, + {1.396232,1.176078}, + {1.057625,-0.239732}, + {0.925509,-0.621106}, + {-0.112643,-0.176105}, + {-0.224907,-0.088044}, + {-0.615717,0.351970}, + {-1.022447,-0.343888}, + {-0.611137,0.278950}, + {-0.611510,-0.059484}, + {-0.585823,-0.678989}, + {-0.601954,-0.562345}, + {-0.262591,1.266941}, + {-0.772093,0.174441}, + {-0.587666,0.893304}, + {0.111368,1.608418}, + {0.714706,-0.534446}, + {-0.771247,0.120513}, + {0.318155,0.438540}, + {2.023913,0.190916}, + {-0.212721,0.773555}, + {0.232401,0.319443}, + {-0.251844,-1.318009}, + {0.162669,0.403618}, + {0.827621,-0.529870}, + {0.250448,-1.073482}, + {0.059679,-0.063302}, + {-0.194909,0.064858}, + {0.480359,0.527630}, + {0.037879,0.460448}, + {0.486415,-0.957618}, + {0.451010,-0.068816}, + {0.968128,0.192947}, + {0.831207,-0.164804}, + {0.144330,-1.177113}, + {-1.046468,-0.117025}, + {1.453514,0.529669}, + {0.462780,0.519148}, + {0.355027,0.727646}, + {0.355796,0.311839}, + {1.776668,0.186074}, + {-1.419462,-0.435581}, + {-0.360595,-0.117783}, + {-0.309289,0.349530}, + {-0.530039,-0.873192}, + {-0.106943,0.925020}, + {1.306105,0.027449}, + {0.580964,0.705161}, + {1.478512,-0.101863}, + {-0.202531,0.738568}, + {-0.493564,-0.930668}, + {0.268006,0.343200}, + {0.459762,1.566772}, + {-0.160910,0.379268}, + {0.629888,-0.503718}, + {1.381070,-0.364317}, + {0.307948,-0.047268}, + {0.796512,-0.935058}, + {-0.700082,-0.972416}, + {-0.298262,-0.605478}, + {-0.323136,1.541209}, + {-0.195020,0.416722}, + {-0.086115,0.749763}, + {0.435675,-0.521759}, + {-0.104943,-0.146577}, + {1.092303,0.546935}, + {0.274549,0.086542}, + {0.505962,0.274669}, + {-0.720219,-0.028282}, + {0.761485,0.999235}, + {0.953266,0.149321}, + {0.633826,0.108976}, + {-0.930898,0.531887}, + {-0.401657,1.460128}, + {-1.032822,0.380031}, + {0.199604,0.147336}, + {-0.633607,-0.055812}, + {-0.316084,-0.492567}, + {-0.775544,-0.393868}, + {-0.304902,0.496941}, + {0.587243,0.404586}, + {0.535787,-0.290660}, + {0.526786,-0.492909}, + {0.032885,-0.335402}, + {0.254548,0.025119}, + {-0.007256,0.956603}, + {-0.781701,0.182978}, + {-0.594395,-0.051752}, + {1.137163,0.417077}, + {-0.725425,1.703746}, + {0.203050,-0.823786}, + {-0.093223,-0.599492}, + {-0.171074,0.434182}, + {0.446139,-1.024946}, + {1.307526,-0.924091}, + {0.165343,-0.061759}, + {0.847232,-0.364522}, + {-1.687820,-0.966855}, + {0.367350,1.007379}, + {0.462134,-0.629192}, + {1.480619,0.308647}, + {-0.480776,-0.412441}, + {-0.032728,0.426328}, + {-0.723946,0.349359}, + {-0.695635,0.225437}, + {0.093643,0.801008}, + {-1.148551,-0.246205}, + {-0.049321,-0.459364}, + {-0.241512,1.553192}, + {1.138608,1.302721}, + {0.263139,-0.527765}, + {0.172326,0.638467}, + {-0.425811,0.438227}, + {-0.932956,0.082939}, + {-0.145653,-0.835906}, + {0.099492,-1.396676}, + {-0.730089,-1.456065}, + {0.328898,0.922454}, + {-0.479136,0.168375}, + {-0.693307,-1.117508}, + {0.434907,0.255777}, + {0.159500,-0.075837}, + {0.606847,-1.786357}, + {0.114103,-0.890503}, + {0.475339,-0.639335}, + {-0.501279,0.909314}, + {-0.461021,0.340318}, + {-2.371022,0.240045}, + {-0.663024,-0.078565}, + {0.408487,0.747418}, + {-0.039952,0.544522}, + {-0.346095,-1.181014}, + {1.313543,1.313791}, + {-0.286968,0.049342}, + {-0.985057,0.416389}, + {0.567016,-0.890193}, + {-0.029613,-1.097792}, + {-0.274942,1.279869}, + {0.840626,-0.071335}, + {1.103612,-0.346434}, + {-0.971668,0.314411}, + {-0.401788,-0.159312}, + {0.876157,-1.020020}, + {-0.187758,-0.633080}, + {-0.737539,0.950549}, + {-0.537099,1.220313}, + {-0.354796,0.504951}, + {0.516333,0.303805}, + {0.744535,-0.050407}, + {-0.305368,0.196347}, + {-0.539320,-0.584686}, + {0.578355,0.192718}, + {-1.251327,0.031665}, + {-0.988681,-1.128213}, + {-1.076868,1.127315}, + {-0.652836,-0.331953}, + {-0.922967,0.220209}, + {0.721116,-0.345270}, + {0.102160,-0.184497}, + {0.724131,-0.729485}, + {0.311939,1.406437}, + {-0.687354,-0.482095}, + {-0.746110,0.490688}, + {-0.290505,-0.930634}, + {1.203664,0.171541}, + {0.798127,0.241126}, + {-0.347300,0.167841}, + {-0.383096,0.527781}, + {0.231403,-0.662014}, + {1.208195,-0.842100}, + {0.118811,0.382395}, + {-0.971162,-0.657731}, + {-0.109055,-1.321417}, + {-0.166172,1.000512}, + {0.245685,0.853006}, + {1.179090,0.148636}, + {-0.722005,0.218807}, + {-0.356529,0.394081}, + {0.283431,-1.474497}, + {-0.528565,-0.181279}, + {-0.309054,-0.447532}, + {-0.302059,-0.835447}, + {0.063289,0.197125}, + {0.873344,0.283293}, + {-0.827399,0.327898}, + {-1.445307,0.015543}, + {1.134014,0.449569}, + {0.026380,-0.550346}, + {-0.107964,0.656922}, + {0.551898,-0.361890}, + {1.354513,-1.238748}, + {0.259696,1.783583}, + {-0.954792,0.686831}, + {-0.745327,-0.404158}, + {0.454100,-0.837450}, + {0.087043,-0.950885}, + {0.505512,0.460524}, + {0.404887,0.789404}, + {-0.037236,0.441461}, + {1.725802,0.267412}, + {0.797967,0.244751}, + {-0.978130,0.515460}, + {0.542536,-0.075439}, + {0.712379,-0.497695}, + {-0.212806,0.608145}, + {0.577898,-0.192766}, + {0.489932,0.990213}, + {0.119053,-0.729816}, + {1.097182,-0.576013}, + {-1.201042,-0.794151}, + {-0.120795,0.066962}, + {0.146414,0.603197}, + {0.026528,-0.603082}, + {-0.800504,0.268076}, + {-0.343166,-0.407044}, + {-0.102762,-0.303068}, + {0.129492,1.346782}, + {-0.258398,0.169313}, + {1.243914,-0.592895}, + {1.095122,0.260779}, + {-0.600781,-0.189894}, + {0.240113,0.082414}, + {0.353061,0.355369}, + {0.420819,-0.911021}, + {0.696589,0.394239}, + {-0.682780,0.358780}, + {0.063955,-1.517855}, + {-0.322178,-0.074134}, + {-0.974101,1.406756}, + {-0.526017,-0.353056}, + {-0.640417,0.340377}, + {-0.182126,-0.411452}, + {-0.488776,-1.599695}, + {1.517429,0.767395}, + {0.603698,-0.721522}, + {0.541078,-0.821337}, + {0.110168,0.163595}, + {0.212353,-0.539387}, + {0.117418,-0.754495}, + {-0.155305,-0.255334}, + {-0.119331,0.141361}, + {-1.467100,-0.792509}, + {0.202781,0.268023}, + {-0.814643,-0.407787}, + {0.137034,-0.791640}, + {-0.789811,-0.493989}, + {-0.336780,-0.653000}, + {-0.759226,-0.386969}, + {0.455847,0.617339}, + {1.664504,-0.591428}, + {-0.206955,0.421407}, + {-0.567116,0.215310}, + {-0.634151,-0.216379}, + {-0.474751,0.577085}, + {0.580540,0.007682}, + {0.431102,-0.313646}, + {0.037617,-0.541906}, + {0.586028,0.437426}, + {1.122127,1.192700}, + {0.679301,0.617392}, + {-0.266514,0.750701}, + {1.021989,0.573764}, + {-0.471908,-1.137463}, + {-0.275688,-1.347824}, + {-0.260820,0.857808}, + {-0.353317,-0.507878}, + {1.482158,-0.115137}, + {0.989099,-1.264611}, + {-0.181237,-0.731317}, + {-1.272231,0.000604}, + {-0.050286,-0.518716}, + {0.906532,0.073988}, + {-0.725282,-0.708613}, + {1.130826,0.492829}, + {0.382025,0.118885}, + {-0.289855,0.327266}, + {-0.356868,-0.127456}, + {-0.497037,0.347544}, + {0.916516,-0.011213}, + {0.795788,0.833036}, + {-1.108708,0.654990}, + {1.098447,-0.380100}, + {-0.699273,0.774193}, + {0.342752,-0.535842}, + {0.047643,-0.227671}, + {1.274331,0.341689}, + {0.895537,-0.407677}, + {-0.778889,-0.038155}, + {0.698568,0.098739}, + {1.916364,-0.661903}, + {-0.845148,0.287349}, + {0.837011,-1.241308}, + {0.022716,-0.396469}, + {-0.020420,-0.034983}, + {-0.285681,-0.753360}, + {-0.118651,-1.527316}, + {-0.176143,0.446362}, + {0.130017,-0.415744}, + {0.318507,0.552840}, + {-0.603890,0.207048}, + {-0.523459,0.105243}, + {-0.002344,-0.410590}, + {0.476249,-1.748434}, + {0.110030,-0.295667}, + {-0.776678,-0.699187}, + {-0.336088,0.120044}, + {-0.132220,0.564894}, + {-0.400230,-1.465552}, + {-0.899290,0.326598}, + {-1.442301,-0.087643}, + {-0.008753,-0.630739}, + {0.390787,0.192346}, + {-0.340743,-0.440807}, + {-1.539744,1.205671}, + {0.627614,0.398445}, + {0.127486,0.357655}, + {0.135552,0.764774}, + {0.518036,-0.218960}, + {1.049276,-0.090579}, + {-0.008401,1.454761}, + {0.003514,0.918229}, + {0.302454,0.976231}, + {-0.961992,-0.017294}, + {0.076837,0.668940}, + {-0.348232,0.509916}, + {-1.436588,0.235003}, + {-0.084113,-0.570737}, + {0.635977,0.515143}, + {-0.580761,0.004320}, + {-0.130124,0.718512}, + {-1.064332,0.805427}, + {1.314300,-0.425192}, + {-0.597376,0.040773}, + {-0.369787,0.951658}, + {1.179303,0.302642}, + {0.309178,0.951243}, + {0.683143,-0.691633}, + {0.595706,-0.308229}, + {1.452309,0.693933}, + {-0.597845,0.801738}, + {0.458518,-0.343717}, + {-0.149173,-0.241056}, + {0.979689,0.240095}, + {-0.599037,0.543307}, + {0.354471,-1.145843}, + {-0.020165,-0.398078}, + {-0.123823,1.399765}, + {0.024307,0.255874}, + {0.390943,0.200198}, + {0.660994,-0.236146}, + {0.874927,0.787643}, + {0.171618,0.136452}, + {0.225134,0.175814}, + {-1.009673,0.213737}, + {0.778509,-0.536733}, + {0.659917,-1.701921}, + {-1.047737,-0.614887}, + {-0.561108,0.215661}, + {-0.185832,-0.245792}, + {-0.486231,0.531170}, + {0.116419,-0.145595}, + {0.019939,-0.695158}, + {0.144234,-0.507506}, + {-0.396990,-0.833085}, + {0.375825,-1.907635}, + {-0.080535,0.196175}, + {0.007163,0.589929}, + {-1.106312,-0.916138}, + {1.084560,-1.289281}, + {0.700913,-0.454858}, + {1.690164,-0.645198}, + {0.472295,0.365814}, + {-0.354035,-1.187006}, + {-0.363422,-0.700427}, + {-0.409595,-0.297748}, + {0.222860,-0.488023}, + {1.154380,-0.023766}, + {-0.572994,0.995388}, + {-0.522744,0.915831}, + {-0.102298,0.075968}, + {-1.113661,0.277819}, + {-0.541258,0.942888}, + {0.144149,-1.421493}, + {-0.813628,0.518374}, + {0.438114,-0.583365}, + {-0.306953,-0.083300}, + {-0.965428,-0.187021}, + {-1.651694,0.301327}, + {-0.358049,0.160427}, + {0.494740,0.212273}, + {-0.475793,0.129843}, + {-0.513566,0.206706}, + {-0.789498,-0.454014}, + {-0.506331,-0.677233}, + {-1.191360,-0.684613}, + {-0.473632,-0.505620}, + {1.704961,-0.000282}, + {-0.748426,0.044751}, + {0.722466,-0.271562}, + {-0.114380,-0.029615}, + {0.881983,0.732634}, + {-2.466091,0.797042}, + {0.107247,-1.069177}, + {0.365094,-0.240360}, + {0.860761,-0.392398}, + {0.419712,1.024297}, + {-0.733678,-0.114491}, + {-0.387299,-0.698591}, + {-1.111876,-0.894044}, + {-0.338478,0.432863}, + {0.374858,0.592964}, + {0.132022,-0.172552}, + {-0.566581,0.486986}, + {-0.361814,-0.127256}, + {-0.495429,-1.119817}, + {-0.373163,0.277704}, + {-0.451895,-0.150489}, + {0.676212,0.462474}, + {0.731097,0.067339}, + {-0.391580,-0.221534}, + {0.702811,0.805510}, + {0.306927,-0.330470}, + {0.202033,-0.281253}, + {0.670677,-1.640630}, + {-0.171426,0.129238}, + {0.855865,-0.001158}, + {0.902835,-0.314898}, + {0.258288,-0.817972}, + {-0.246663,-0.050172}, + {-1.298989,1.057827}, + {-0.194878,-0.869015}, + {-0.989629,-0.909738}, + {-0.566145,-0.028838}, + {-0.537190,-0.250192}, + {1.007348,0.083241}, + {0.351506,-0.080267}, + {0.167228,-0.274140}, + {0.523975,-0.383455}, + {-0.693140,-0.400584}, + {-1.377034,-0.099976}, + {0.687119,0.508089}, + {0.624748,-0.713680}, + {0.524963,0.852304}, + {-0.365119,1.391765}, + {-0.098955,-0.773518}, + {0.099686,0.092521}, + {-0.191519,0.113134}, + {-0.246630,-0.849187}, + {0.372718,-0.028201}, + {0.209208,0.168457}, + {0.531034,0.810682}, + {-2.065181,-0.403745}, + {1.662412,-1.025271}, + {0.116164,-1.358371}, + {0.871266,0.684274}, + {-0.601819,0.436820}, + {0.379071,-0.950469}, + {-1.481672,1.328396}, + {-0.215309,0.881097}, + {1.543692,-1.302871}, + {0.566876,-0.346706}, + {-0.107790,0.187282}, + {-0.050962,0.305967}, + {2.234456,0.245861}, + {0.922211,0.315870}, + {0.170718,0.332505}, + {-0.173235,0.269735}, + {-0.034479,-0.147379}, + {-0.910476,0.549261}, + {-1.482071,0.073635}, + {-1.006192,-0.257727}, + {1.380736,0.159414}, + {0.133536,-0.518567}, + {0.452510,-0.297029}, + {0.506554,0.634800}, + {-0.223515,-0.113593}, + {1.640303,-0.303890}, + {0.451081,-0.579022}, + {-0.423077,-0.310128}, + {-0.515610,0.197095}, + {1.449878,-0.575191}, + {0.595091,-0.861876}, + {0.467010,0.214356}, + {1.126815,-0.412791}, + {-0.768978,0.928791}, + {0.662096,0.992854}, + {-0.870112,0.867863}, + {-0.444760,0.695527}, + {0.545433,0.548246}, + {0.900893,1.440884}, + {1.009321,-1.093170}, + {0.002783,-0.661035}, + {0.446845,-0.962453}, + {1.071007,0.104193}, + {0.701488,0.155886}, + {-1.495756,-1.595266}, + {0.037920,-0.027757}, + {-0.816584,0.442122}, + {1.024597,0.061760}, + {0.372463,0.656436}, + {0.193900,-1.113707}, + {0.702296,0.063060}, + {-0.387018,0.640494}, + {0.472535,0.526097}, + {-0.113295,-0.461936}, + {-0.549302,-0.072353}, + {0.113877,1.728784}, + {-0.503031,0.465992}, + {-1.800512,0.344290}, + {-0.291058,0.191364}, + {-1.383239,-0.639046}, + {0.301438,0.939880}, + {-0.887944,0.532416}, + {-0.337686,-1.497391}, + {-0.273128,0.170892}, + {-0.187554,1.292625}, + {-0.335620,0.813804}, + {0.302649,0.115870}, + {-0.125463,0.244516}, + {0.775593,0.754042}, + {0.726695,-0.656969}, + {0.888387,-1.134760}, + {1.275522,-0.250979}, + {-0.736736,-0.023197}, + {-0.722655,0.071534}, + {0.398133,-0.225856}, + {-0.158094,-0.713822}, + {-0.187789,1.530984}, + {0.066136,-0.285781}, + {0.337437,0.069203}, + {-1.522060,0.359290}, + {-0.410925,0.715260}, + {-0.348957,0.792795}, + {-0.822869,0.817856}, + {0.215875,-0.611351}, + {-0.606455,0.320282}, + {1.436453,-0.107341}, + {-0.330349,-1.194834}, + {0.572256,1.303348}, + {1.090097,1.118251}, + {0.745744,-0.906311}, + {-1.122036,-0.363927}, + {-0.352830,0.069443}, + {0.173709,0.298217}, + {1.233522,0.305900}, + {0.226477,-0.043980}, + {-0.722420,0.493256}, + {0.557195,0.058823}, + {-1.094416,-0.312172}, + {0.071648,0.977559}, + {-0.387061,0.773792}, + {0.338082,-0.019251}, + {0.163224,-0.330960}, + {0.610427,0.371691}, + {0.323763,-0.522994}, + {-0.668372,-0.370236}, + {1.242604,0.090453}, + {-1.050305,-0.440150}, + {0.388379,-0.214487}, + {-0.479460,-0.280957}, + {-0.581688,0.708546}, + {-0.651918,-0.699252}, + {-1.289294,0.894307}, + {0.430920,1.134885}, + {-0.140695,0.119391}, + {-0.113397,0.141629}, + {-0.224160,-0.849461}, + {0.145152,1.010905}, + {0.114341,0.319432}, + {-0.731503,0.963791}, + {-0.805791,-0.234161}, + {-0.097786,-0.078454}, + {1.247790,0.056807}, + {-0.066401,-0.334968}, + {0.675039,-0.744820}, + {-0.181113,-0.290322}, + {0.651336,0.530368}, + {-1.249633,-0.321314}, + {-0.289785,0.448466}, + {0.666290,1.196834}, + {0.623286,-0.328105}, + {-0.469083,0.311728}, + {-0.641303,-0.664674}, + {-0.033907,-0.670533}, + {0.177868,1.697506}, + {-0.216707,0.202837}, + {-0.186939,-0.529367}, + {0.022609,-0.126800}, + {0.203477,-0.579855}, + {-0.230490,1.011908}, + {0.162921,1.168193}, + {0.885725,-0.666452}, + {0.277346,0.026881}, + {0.127636,-0.291993}, + {0.343859,0.254767}, + {0.937021,-0.240389}, + {-0.450499,-0.519208}, + {0.026306,0.871227}, + {-0.532201,0.361956}, + {0.510303,-0.387441}, + {-0.746218,0.107938}, + {-0.043113,0.416857}, + {-0.765734,-0.057674}, + {-0.976013,-0.471322}, + {-0.608322,-0.386790}, + {-0.153345,-0.142873}, + {0.282707,-0.174705}, + {0.908893,-0.288510}, + {1.248578,-0.267686}, + {-0.733607,-0.318778}, + {0.711804,0.106524}, + {0.730638,-0.818837}, + {-0.143297,0.775292}, + {0.826449,-0.764265}, + {-1.053740,0.429313}, + {0.093451,-0.285474}, + {0.092797,-1.313155}, + {-0.990341,-0.497315}, + {0.566588,0.912216}, + {-0.641365,-1.513570}, + {-0.399701,0.419908}, + {0.550336,0.454210}, + {1.130919,-1.011306}, + {-0.648588,0.724713}, + {1.530720,-0.329322}, + {0.240109,0.297342}, + {-0.803036,-0.672687}, + {0.558095,0.210214}, + {-0.415771,0.335389}, + {-0.446871,-0.080301}, + {0.439153,0.420859}, + {0.454300,-0.120721}, + {0.210916,-0.112178}, + {-0.409692,-0.248721}, + {-0.879181,-0.650745}, + {0.314275,0.157443}, + {-0.127992,0.459773}, + {0.189201,-0.437353}, + {-0.199317,0.335634}, + {0.926867,-1.219475}, + {0.990475,0.115756}, + {-0.596768,0.519271}, + {0.544668,0.177830}, + {0.025311,0.718018}, + {0.865983,-0.396329}, + {0.931238,0.051218}, + {-1.306796,0.890281}, + {-0.038267,0.417608}, + {0.423411,0.011136}, + {-0.591386,-0.028572}, + {-0.659057,-0.868477}, + {-0.454503,-0.183610}, + {-1.296091,0.623354}, + {-0.369003,-1.032546}, + {0.687142,-0.539728}, + {0.702910,0.311785}, + {0.486632,-0.654871}, + {-0.698156,0.479333}, + {-0.286491,0.023513}, + {-0.061237,0.264710}, + {0.815363,-0.724906}, + {0.080431,0.452235}, + {0.209167,-0.366842}, + {0.238600,-1.015582}, + {0.236585,1.119290}, + {0.115878,-0.511488}, + {0.417193,-0.342133}, + {-0.132619,-0.383681}, + {-0.309108,-0.467185}, + {0.389856,-0.296845}, + {0.862805,-0.845385}, + {0.163740,-1.328876}, + {0.841628,-1.134586}, + {-1.314638,0.983453}, + {0.007594,-0.151851}, + {0.491880,0.589396}, + {0.410562,-0.533815}, + {0.152744,-0.382076}, + {-0.814165,-0.726665}, + {-1.054786,0.399620}, + {-0.604055,0.219815}, + {0.195637,-1.204522}, + {-0.218163,0.389220}, + {-1.060887,-0.365853}, + {0.076152,0.972619}, + {0.106557,-0.550138}, + {0.350506,-0.580934}, + {0.899491,-1.202793}, + {0.006987,-0.237220}, + {-0.621779,0.109460}, + {0.758860,0.378667}, + {0.665073,0.149904}, + {0.514973,-1.076146}, + {-0.531363,-0.151537}, + {-0.160327,-0.372274}, + {1.439986,-1.868230}, + {0.189739,0.119885}, + {0.203151,1.214735}, + {0.227369,-0.449251}, + {-0.320953,1.173650}, + {0.362700,-0.413635}, + {0.104156,0.742685}, + {0.786895,0.217765}, + {0.461444,-0.383361}, + {-0.026425,0.050263}, + {-0.700833,-0.176479}, + {0.516268,-0.266494}, + {0.542822,-0.196286}, + {0.972150,0.282374}, + {0.373345,-1.661969}, + {0.848982,-0.275416}, + {-0.147993,0.557783}, + {-1.235018,-0.425926}, + {-0.990208,-0.819959}, + {-0.502916,0.897826}, + {-0.963431,0.100756}, + {-0.539236,-0.495820}, + {0.043163,-0.313743}, + {0.268113,-0.401802}, + {0.094456,0.929705}, + {0.434827,0.666465}, + {-0.285961,0.540364}, + {-0.067659,0.148652}, + {-0.343734,1.625959}, + {0.941489,-0.334072}, + {-0.339727,-0.526445}, + {0.793149,0.946932}, + {-0.398235,0.623877}, + {0.264790,-0.715621}, + {-1.011724,0.322794}, + {1.384937,0.455970}, + {1.454257,0.048507}, + {-0.306816,-1.428050}, + {0.370468,0.733515}, + {0.850482,0.067026}, + {-0.026520,0.315161}, + {0.553367,-1.038959}, + {-1.381139,0.169341}, + {-0.126396,0.774954}, + {0.579820,-0.324341}, + {0.690277,-0.552866}, + {0.042603,0.250999}, + {0.234958,-0.328548}, + {-0.034987,-0.427424}, + {0.017550,1.027859}, + {0.639405,0.074327}, + {-1.079853,0.773206}, + {-0.255093,-0.538056}, + {-0.516779,0.552364}, + {0.588249,-0.122769}, + {-0.180270,-0.526765}, + {0.281459,-0.573820}, + {-0.597178,0.884251}, + {-1.459452,0.521668}, + {0.475132,0.670896}, + {0.364260,-0.003726}, + {0.162263,1.430702}, + {1.002323,1.191997}, + {0.593734,1.105144}, + {0.455673,-1.069412}, + {-0.566892,-0.153912}, + {-0.401493,0.730293}, + {-0.616850,-0.357030}, + {0.131704,0.877433}, + {0.448159,0.531570}, + {0.707994,0.388152}, + {-1.120399,-1.558184}, + {0.205040,0.110543}, + {0.667577,0.900941}, + {-1.023609,-0.438459}, + {0.592556,-0.786459}, + {-0.218398,-0.203380}, + {0.274252,0.404389}, + {-0.458191,1.011445}, + {0.222179,0.858687}, + {0.029628,-0.040130}, + {-0.290997,-0.035703}, + {0.309122,-1.492022}, + {-1.010844,0.589316}, + {-0.356162,0.305040}, + {0.261650,0.718863}, + {0.434287,0.022466}, + {-0.076320,-0.343857}, + {0.183141,1.026684}, + {0.784650,0.184908}, + {0.701212,0.267810}, + {0.525909,1.299042}, + {-1.685660,0.350329}, + {-0.593831,-0.228072}, + {0.017935,0.860203}, + {0.840364,-1.130071}, + {1.015367,1.442451}, + {-0.901634,-0.746853}, + {0.199565,-0.821338}, + {-0.313785,0.748286}, + {0.090435,0.856189}, + {-0.393746,1.621984}, + {-0.703148,0.813511}, + {-1.461475,0.879518}, + {0.943104,-0.598617}, + {0.393415,-0.321067}, + {0.352488,-0.808631}, + {-0.262355,0.074378}, + {0.444508,0.028535}, + {-1.235967,0.087614}, + {-0.366743,0.274720}, + {-1.534213,1.187011}, + {-1.288413,1.152383}, + {-0.176366,0.392408}, + {-0.479891,-1.289108}, + {0.006065,-2.244152}, + {-0.200774,0.584892}, + {0.841201,0.359442}, + {0.042903,0.605595}, + {-0.050008,0.526026}, + {0.545172,0.114942}, + {-0.741202,0.452490}, + {-0.662675,0.502251}, + {-0.293925,0.361124}, + {-0.174266,0.891888}, + {0.214914,-0.044729}, + {1.076459,-0.324856}, + {0.028362,-0.712596}, + {0.119129,0.420191}, + {0.290109,-1.690392}, + {-0.534984,-0.709829}, + {0.928031,0.340022}, + {0.329803,-0.001821}, + {-0.789933,-0.997637}, + {0.525651,-0.947355}, + {0.800005,0.294846}, + {-0.940716,-0.342722}, + {1.153485,-0.757920}, + {-0.372701,-0.015358}, + {0.413703,0.474207}, + {0.554610,-0.587293}, + {0.609088,0.282538}, + {-0.389165,-0.999838}, + {-0.501062,0.425428}, + {0.506568,0.864824}, + {0.467536,0.041527}, + {0.413553,-0.972673}, + {-0.784710,-0.456333}, + {-0.591675,-0.081141}, + {-0.000096,-0.918489}, + {-0.741971,-0.673887}, + {0.423698,0.133942}, + {-0.353825,-0.248892}, + {0.265903,1.104794}, + {1.155745,-0.487131}, + {-1.230837,1.182218}, + {-0.039358,-1.024105}, + {-0.126243,-0.422831}, + {0.083741,1.333631}, + {-0.582043,-0.167835}, + {-0.651064,-0.716060}, + {-0.933496,1.031392}, + {0.285776,0.119386}, + {1.790267,1.839585}, + {0.673148,-0.036901}, + {0.060941,0.392402}, + {0.439779,0.335930}, + {0.482075,-0.508116}, + {0.166439,-0.478669}, + {1.468145,0.050076}, + {0.697232,0.408675}, + {-0.276139,0.399703}, + {0.376897,-0.613126}, + {0.465563,-1.169737}, + {-1.834874,0.539662}, + {-0.091337,0.444562}, + {-0.997118,0.098997}, + {-0.233274,-0.598737}, + {-0.989027,-1.117883}, + {0.624755,0.428710}, + {-0.375702,-1.212512}, + {-1.056685,0.388795}, + {-0.909594,0.317522}, + {-0.356905,-0.074151}, + {0.524995,0.703629}, + {0.314174,-0.403816}, + {-0.491192,1.182237}, + {-0.926085,-1.084090}, + {-0.017806,0.842876}, + {0.440742,-0.130747}, + {0.272952,0.081986}, + {0.441477,-0.697158}, + {0.259341,-2.099767}, + {0.831863,-0.033636}, + {-0.502615,-1.206727}, + {0.555998,0.859499}, + {-2.056364,0.396201}, + {0.341466,0.784581}, + {0.343672,1.187463}, + {1.274795,-0.151500}, + {-0.628121,1.454649}, + {0.565032,-0.448605}, + {-0.207750,-0.820005}, + {1.175663,0.211856}, + {-1.633000,1.122887}, + {-0.291601,2.700069}, + {-0.622804,1.831482}, + {-0.301059,0.509034}, + {-0.427513,0.001459}, + {-0.341017,-0.116875}, + {0.022551,-0.314193}, + {-0.918960,-0.674715}, + {-0.129296,-0.117801}, + {0.786287,-1.378251}, + {-0.451442,-1.084505}, + {0.942049,-0.109402}, + {-0.219356,-0.655816}, + {-0.878586,0.229613}, + {0.675175,-0.893381}, + {-0.932964,-1.161234}, + {0.214065,-0.396179}, + {-0.277875,1.353829}, + {0.086688,-0.992670}, + {0.266658,1.190433}, + {-0.665654,0.447818}, + {-1.073475,-0.902468}, + {0.561274,1.066952}, + {0.439581,1.398037}, + {-0.038367,-0.253666}, + {-0.180841,-0.607550}, + {-0.663332,0.315716}, + {-0.204138,-0.260854}, + {1.300259,0.483273}, + {0.488196,-1.506948}, + {-1.576188,-0.122042}, + {-0.161309,-0.070824}, + {-0.163122,-0.342865}, + {-0.647706,1.966371}, + {-0.912235,-1.511959}, + {0.246138,-0.881132}, + {-0.400870,-0.146707}, + {1.873068,-0.401651}, + {-0.246960,1.020948}, + {-0.309774,-0.749670}, + {-1.658745,0.706234}, + {0.137746,0.464169}, + {-0.128249,1.229660}, + {0.485569,-0.862653}, + {-0.314748,-0.798912}, + {0.596327,-2.260403}, + {-0.739134,-0.774303}, + {0.559885,2.133758}, + {-0.378982,-0.458096}, + {-0.645429,-0.411828}, + {0.442957,0.412317}, + {0.062638,-0.130068}, + {0.913193,0.872129}, + {-0.000645,-0.659925}, + {-0.611296,0.051654}, + {0.463594,0.106210}, + {-0.172544,0.250975}, + {-0.820128,0.059186}, + {1.244089,-0.241306}, + {-0.606408,0.162598}, + {-0.516257,-0.453431}, + {0.379360,-0.010924}, + {1.694404,-0.098512}, + {0.740398,-1.163674}, + {-0.086404,0.808617}, + {-0.788179,0.497859}, + {0.518954,1.316377}, + {-0.268101,-0.000552}, + {-0.011397,0.127380}, + {-0.776983,1.310111}, + {1.155819,-0.536423}, + {0.325867,0.129875}, + {-0.305559,1.698206}, + {1.469264,1.171590}, + {0.052020,1.645200}, + {-0.475098,0.752333}, + {-0.478576,1.051189}, + {0.209720,-0.846175}, + {0.336027,1.281707}, + {-0.457927,0.978607}, + {0.434299,0.603314}, + {0.819164,-0.707148}, + {0.285992,0.200020}, + {0.903948,0.841191}, + {-0.374723,0.784422}, + {0.270358,-0.432780}, + {-1.131503,-0.204865}, + {0.998721,-0.562161}, + {2.709929,0.333403}, + {0.277214,-0.599034}, + {-1.049311,0.119009}, + {-0.022257,-0.188019}, + {1.186738,0.666140}, + {0.855026,-0.173047}, + {-0.518785,0.244153}, + {1.443967,0.472201}, + {0.268845,0.765957}, + {-0.262575,-0.227543}, + {-0.178477,-0.237919}, + {0.718803,-1.198294}, + {0.296576,-0.928266}, + {-0.265587,0.333848}, + {0.004683,0.050916}, + {0.746835,-0.077362}, + {-0.848756,0.639052}, + {-0.435768,0.677006}, + {-0.761960,-0.673618}, + {0.483697,-0.006953}, + {0.859446,0.342013}, + {0.652033,1.150497}, + {0.279404,0.172724}, + {-1.654868,-0.062761}, + {-0.628006,1.229600}, + {0.434866,0.453249}, + {0.674872,-0.018098}, + {-0.880481,0.632858}, + {0.357744,-1.100971}, + {0.576850,-0.473425}, + {1.084853,-0.458153}, + {-0.135107,-0.068785}, + {-0.519318,-1.097185}, + {-0.391322,-0.857973}, + {0.105697,0.637781}, + {1.012647,0.768231}, + {0.032431,-0.712690}, + {-0.204606,-0.459269}, + {0.385121,0.683265}, + {0.360634,-0.324071}, + {0.146076,-0.206186}, + {-0.206886,-0.280858}, + {0.331549,-0.657394}, + {0.877392,0.663666}, + {0.395278,0.505377}, + {0.756041,0.859819}, + {-0.571644,-0.580026}, + {0.612494,-0.767403}, + {0.440062,-0.276920}, + {0.205130,0.951105}, + {-0.082089,0.424510}, + {-0.388500,-0.817454}, + {-0.297097,-0.030734}, + {0.564334,0.170313}, + {-0.046735,-1.039128}, + {0.236019,-0.606694}, + {0.580484,0.228738}, + {0.732596,1.402753}, + {0.684455,0.312711}, + {-0.114287,0.351727}, + {0.132644,0.482891}, + {-0.052996,0.413845}, + {-0.092510,0.323390}, + {-1.249163,0.744762}, + {-0.144000,-0.150784}, + {0.245751,-0.037541}, + {-0.265020,0.824606}, + {0.166448,-0.503386}, + {0.221548,1.011519}, + {0.705554,0.734803}, + {-0.449412,0.766934}, + {-0.041904,0.103437}, + {-0.589535,0.745306}, + {0.178707,0.543289}, + {-0.049604,0.417483}, + {-1.320194,0.671440}, + {0.618327,0.293337}, + {-0.035204,-0.955884}, + {0.696789,0.975314}, + {0.335561,-0.397880}, + {-0.101238,-0.789334}, + {-1.353433,0.224343}, + {-1.536268,0.154368}, + {0.290941,0.264984}, + {0.054972,0.497049}, + {0.249733,0.304852}, + {0.072880,0.649790}, + {-1.092497,-0.508302}, + {-0.580980,-0.404179}, + {0.684158,1.161387}, + {1.027268,0.419341}, + {-0.575905,0.422229}, + {-0.586725,0.243471}, + {1.044492,0.197131}, + {-0.818624,-0.339106}, + {1.028786,0.649399}, + {0.128927,0.552989}, + {-0.381191,-0.812393}, + {0.255808,-0.783620}, + {-1.000067,-0.814667}, + {0.937145,0.594671}, + {-0.138406,0.009326}, + {0.646863,0.329219}, + {0.114717,0.727041}, + {0.534733,-0.274257}, + {-0.076583,2.064369}, + {-0.061055,0.387069}, + {0.587603,-0.573761}, + {-1.432342,0.080705}, + {0.517872,-0.933701}, + {0.257925,-1.369532}, + {-0.882056,0.033029}, + {0.272729,-0.396548}, + {0.898916,0.232792}, + {-0.323588,0.996638}, + {1.414689,-0.936268}, + {-0.063766,0.848570}, + {-0.631058,-1.026964}, + {0.144042,-0.577972}, + {0.620716,-0.672317}, + {1.311640,0.177935}, + {0.355140,-0.394373}, + {-0.892820,0.040002}, + {0.669596,-1.423798}, + {-0.728338,0.281565}, + {-0.158685,-0.108162}, + {0.294872,0.143540}, + {0.154297,0.845158}, + {-0.614381,0.567366}, + {0.342103,1.116219}, + {0.264975,-1.064063}, + {-0.177622,-0.849517}, + {-0.539107,0.444928}, + {0.552126,-0.015861}, + {-0.212621,0.081190}, + {-0.653462,-0.566566}, + {0.092306,-0.221675}, + {1.100202,0.129533}, + {1.004146,0.906987}, + {-0.450678,-0.139092}, + {-0.041574,0.880738}, + {1.077768,0.691243}, + {0.683594,1.009049}, + {-0.782169,1.735141}, + {0.450257,0.439635}, + {0.529029,0.258264}, + {1.138549,1.986809}, + {-1.302507,0.020303}, + {-0.283556,0.445303}, + {-0.718645,-0.162901}, + {-0.043436,0.596306}, + {-0.253106,1.007761}, + {0.511255,-0.417590}, + {0.747033,0.272022}, + {-0.558437,-0.347778}, + {0.160240,-0.682185}, + {-0.958911,-0.030034}, + {-0.156077,0.031554}, + {-1.151408,0.317689}, + {-0.063615,0.309607}, + {0.652097,-0.090736}, + {0.093596,0.162455}, + {-0.179022,1.654394}, + {-0.242415,-1.079423}, + {0.397297,-1.272118}, + {-0.182965,0.130558}, + {-1.227359,0.503225}, + {0.010313,0.859745}, + {-0.230950,-0.566212}, + {-0.237624,0.329725}, + {0.962370,-0.180738}, + {-0.382887,-0.314282}, + {-0.606405,1.263377}, + {0.178244,-0.050770}, + {1.157081,-0.144043}, + {1.081460,-0.125683}, + {0.287172,0.296327}, + {-0.145758,0.931086}, + {-0.235046,0.421208}, + {-0.476461,0.823257}, + {-0.425877,-0.436417}, + {-0.164299,0.097882}, + {0.438670,0.627963}, + {-0.690073,0.733569}, + {0.386280,-0.534213}, + {-1.074264,-0.832657}, + {0.059724,0.429346}, + {0.241225,-1.310186}, + {-0.041200,-2.185164}, + {0.104350,0.419205}, + {0.259056,-0.248550}, + {1.271667,0.475120}, + {-0.218242,1.164193}, + {0.346768,-0.150378}, + {-0.846548,0.308488}, + {-1.063304,-0.776317}, + {1.166478,-0.454347}, + {0.033053,0.179463}, + {-0.332293,-0.312112}, + {-0.403124,-0.863969}, + {-0.115242,0.881201}, + {-0.443942,-0.049482}, + {0.576722,0.121133}, + {1.115690,-0.395430}, + {-0.967709,-0.283118}, + {0.238138,0.015244}, + {-0.346183,-0.321679}, + {-0.184817,-0.803985}, + {0.428226,-0.424139}, + {0.294728,1.082187}, + {0.146915,-0.379303}, + {-0.524167,0.099747}, + {0.586104,-0.292682}, + {0.078394,0.960573}, + {1.670460,0.570454}, + {0.535695,0.279784}, + {-0.059247,1.179067}, + {0.193284,0.103453}, + {0.198475,1.316057}, + {-0.354204,-0.801039}, + {-1.095112,-0.629114}, + {-0.739693,0.109626}, + {-0.669776,-1.101214}, + {-1.119037,-0.827679}, + {-0.697044,0.582501}, + {0.670182,-0.339850}, + {1.052632,-1.151181}, + {-0.013924,-0.148582}, + {0.676350,-0.382496}, + {-0.609900,0.145339}, + {-0.467053,-1.060301}, + {0.329805,1.116336}, + {-0.657195,-0.381897}, + {0.144469,0.365412}, + {-0.455678,0.492839}, + {0.164257,-0.588328}, + {-0.215978,-0.137108}, + {0.885806,0.550884}, + {-0.512770,-0.358695}, + {-0.059087,0.164926}, + {-0.401278,-0.857801}, + {0.648031,-0.168120}, + {-0.175814,-0.106801}, + {1.103215,-0.147023}, + {-0.173378,-1.161128}, + {0.048200,0.186641}, + {0.382578,0.367532}, + {0.470646,0.681831}, + {-0.094808,0.385076}, + {-0.227419,-0.100211}, + {0.752327,1.031990}, + {0.325679,-0.929947}, + {-1.252363,0.747342}, + {0.611128,0.470173}, + {-0.717586,-0.267591}, + {-1.351702,0.677071}, + {-0.216029,0.531468}, + {0.115357,0.016478}, + {-1.068851,1.084321}, + {0.464010,0.510275}, + {1.225770,-0.765537}, + {0.508388,-0.879914}, + {-0.865601,-0.344538}, + {0.685346,0.515833}, + {-0.637203,-0.617789}, + {0.279486,-0.543520}, + {0.897987,-0.208160}, + {-0.677693,-0.780875}, + {-0.760403,0.397810}, + {0.184177,0.176928}, + {-1.069590,-0.614911}, + {-0.132476,0.356640}, + {-0.036611,-1.348685}, + {0.173300,0.074283}, + {0.665913,0.252531}, + {0.876800,0.368352}, + {0.239620,1.213974}, + {0.392571,0.197044}, + {1.445377,1.168005}, + {-0.351908,-1.245911}, + {-0.200333,-0.246884}, + {1.165079,0.269904}, + {1.102148,0.936739}, + {0.415018,-0.692267}, + {0.695930,-0.610682}, + {0.337706,-0.194200}, + {-0.406360,-0.428313}, + {2.001919,0.298601}, + {0.040240,0.021280}, + {0.476985,-0.207150}, + {-0.955785,2.342469}, + {0.167188,0.627934}, + {0.278484,-0.586048}, + {-0.908941,0.243936}, + {-0.146000,-0.877617}, + {0.192032,-0.244236}, + {0.975606,0.244268}, + {-0.170990,0.257347}, + {0.764497,-0.551919}, + {0.058791,0.682466}, + {0.065943,-0.984803}, + {-0.912431,0.368831}, + {0.855040,0.067306}, + {0.749915,-0.835586}, + {0.838403,-1.238493}, + {-1.483938,-0.123001}, + {-0.557550,-0.923933}, + {-0.771014,0.386390}, + {0.273899,-0.385988}, + {0.750930,-0.659754}, + {0.777048,1.433688}, + {-0.209220,0.937272}, + {0.205420,-0.235356}, + {0.414937,0.418160}, + {0.718236,-0.451301}, + {-0.186269,-1.322922}, + {-1.920077,0.476052}, + {-1.398596,0.784435}, + {-0.256580,0.180031}, + {-0.532659,0.457304}, + {-0.384892,-0.039057}, + {-0.055613,-0.548142}, + {0.527916,0.194822}, + {0.823368,-0.281136}, + {0.619060,-1.874924}, + {1.444115,0.480538}, + {-0.819634,0.380911}, + {-0.423061,-0.352648}, + {0.834671,1.128296}, + {-0.327942,-0.116678}, + {-0.313019,0.264847}, + {-0.887367,-0.196781}, + {0.102331,-0.425392}, + {0.586136,-0.513125}, + {-0.392544,0.760032}, + {0.048821,-0.120578}, + {-0.659257,1.355152}, + {0.071198,-0.123784}, + {-0.611575,-0.162787}, + {0.600874,0.427984}, + {-0.438527,-0.718199}, + {1.021030,-0.206658}, + {-0.040177,0.469484}, + {-0.097920,0.431053}, + {-0.227448,0.032859}, + {0.438377,-0.490723}, + {-0.127967,-0.318678}, + {0.530951,-0.205032}, + {0.306926,-1.611728}, + {-0.155619,0.005610}, + {0.364185,1.075986}, + {-0.355830,1.056994}, + {-0.416081,0.881061}, + {-0.168114,0.891871}, + {0.318273,0.022034}, + {0.045802,-0.498750}, + {0.874723,-0.261830}, + {2.041322,0.581367}, + {-0.434688,-0.889884}, + {-0.625497,-1.424039}, + {-0.916101,-0.012513}, + {0.301928,-0.119459}, + {0.054875,0.719308}, + {0.113292,-0.985813}, + {-0.256198,1.240920}, + {0.110794,0.058590}, + {0.475235,0.043136}, + {0.265904,0.466909}, + {0.569717,1.513256}, + {2.460579,0.347629}, + {-0.583997,-0.395316}, + {1.412936,-0.136881}, + {0.257743,-0.020675}, + {-0.773710,0.598378}, + {-0.155740,0.175291}, + {0.708158,-0.303414}, + {0.128797,-1.688465}, + {-0.944673,0.178251}, + {-0.419667,-0.800480}, + {1.015229,0.451624}, + {-0.563132,-0.098941}, + {1.022619,0.269203}, + {0.544089,-0.558886}, + {0.285403,-0.945592}, + {-0.249927,-0.639200}, + {0.616154,0.448953}, + {1.538937,0.176176}, + {-1.072722,-0.731432}, + {2.202183,-1.085427}, + {-0.187007,0.862339}, + {-0.009781,-0.919787}, + {0.882595,-0.224292}, + {0.328335,-1.466478}, + {-0.425207,-0.406182}, + {0.230537,0.884368}, + {-0.295215,-0.639698}, + {-1.490884,0.427221}, + {1.247354,0.295467}, + {-0.810296,0.889553}, + {1.136726,0.000428}, + {-0.448626,-0.265578}, + {-0.375165,-0.970000}, + {-0.029743,1.329743}, + {0.191118,-0.149061}, + {-1.198112,0.166633}, + {-1.072263,0.604945}, + {1.319951,0.678233}, + {-0.286881,1.447051}, + {-0.000431,-0.790107}, + {-0.927154,-0.720568}, + {1.244388,0.126044}, + {0.361372,-0.563810}, + {1.786158,0.068526}, + {0.652693,-0.233381}, + {-0.956019,-0.446398}, + {-1.257622,-0.253433}, + {0.262294,0.421673}, + {1.178025,0.259483}, + {-0.138056,0.076554}, + {-0.338284,-0.760501}, + {0.238752,-0.363470}, + {-0.467720,-0.613917}, + {1.727196,-2.032936}, + {0.453188,1.148454}, + {-0.860575,-0.211261}, + {-0.134673,-0.149191}, + {0.089986,-0.837997}, + {-0.421324,0.572281}, + {-0.154263,0.793297}, + {-0.068541,-1.226925}, + {-1.024731,1.765286}, + {0.321293,-0.655162}, + {-0.381602,0.084867}, + {-0.761043,0.072325}, + {-0.153164,-0.580169}, + {1.095428,-0.725517}, + {-1.360859,-0.509727}, + {-0.015713,1.146405}, + {0.080499,0.991718}, + {-0.037406,0.203660}, + {0.437657,0.772791}, + {-0.335827,-0.643198}, + {-0.748036,1.554296}, + {0.056139,0.540525}, + {0.855326,1.251389}, + {1.512833,0.127560}, + {-0.335811,-0.685869}, + {0.049175,-0.612331}, + {0.744695,0.303599}, + {0.086665,0.554790}, + {-1.437300,-0.698848}, + {1.208241,0.809530}, + {-0.368646,0.188188}, + {0.918053,2.303752}, + {0.542692,0.198394}, + {0.895487,-1.142547}, + {1.427584,-0.139881}, + {0.366063,-0.559492}, + {0.615816,-0.518515}, + {1.683531,0.689662}, + {-0.561367,0.740093}, + {0.136173,0.685102}, + {0.676639,0.746691}, + {0.409337,-1.146213}, + {-0.636375,0.027888}, + {0.588745,0.274056}, + {-0.722872,0.098504}, + {-0.671533,0.012166}, + {1.011527,0.719796}, + {0.081135,-0.237933}, + {-0.318500,0.963256}, + {-0.817222,0.191993}, + {-0.244338,0.114244}, + {-0.596279,-0.365810}, + {-0.075441,1.479957}, + {-0.791400,0.528275}, + {0.028476,-0.288631}, + {0.165929,-0.171160}, + {0.275183,0.915583}, + {0.295522,-0.680658}, + {0.488326,0.104785}, + {-0.735568,-0.701452}, + {-0.082936,-1.234151}, + {-0.944770,0.415823}, + {-0.723673,0.661138}, + {0.020222,-0.209032}, + {0.744207,1.798693}, + {-0.650645,0.033519}, + {-1.346394,-1.296518}, + {0.979960,-1.559900}, + {0.346991,-0.097270}, + {0.844271,-0.832661}, + {-0.627946,-0.340953}, + {0.648317,-0.668772}, + {1.035056,0.096494}, + {-0.374343,0.301709}, + {-1.959191,0.184104}, + {0.354760,0.554715}, + {0.461264,-0.291802}, + {-1.445191,-0.676835}, + {-0.390066,0.002849}, + {-1.243483,-0.254016}, + {0.756660,-0.152519}, + {0.449951,-0.361801}, + {0.032053,0.448066}, + {0.301092,-0.018617}, + {0.919110,-1.106308}, + {0.688230,-0.751883}, + {1.443475,0.290925}, + {-0.336814,-0.202997}, + {0.194678,0.132777}, + {0.438428,-0.932498}, + {-0.005527,-1.612383}, + {-0.065145,-0.331485}, + {0.569241,0.575176}, + {-0.973392,0.141843}, + {-2.301017,0.881275}, + {0.784561,0.317932}, + {-0.077933,0.914512}, + {0.087316,-0.135682}, + {0.092940,-1.181121}, + {-1.310608,0.288132}, + {-0.892082,-1.676985}, + {0.916083,0.042083}, + {-1.244578,0.624427}, + {-0.334890,0.718718}, + {-0.741767,-0.347100}, + {-0.416327,-0.223633}, + {0.086690,0.939596}, + {0.888409,-0.085335}, + {0.625874,1.037141}, + {0.722036,-1.315310}, + {-0.335910,-0.880128}, + {-0.565481,-0.047599}, + {0.935371,-0.398854}, + {-0.727068,0.164967}, + {-0.431810,-0.025259}, + {0.528973,0.176538}, + {-0.620117,-0.164306}, + {0.113693,-0.756706}, + {-0.026549,-0.082517}, + {0.366109,-0.935198}, + {0.574120,-0.696891}, + {-0.329320,-1.004717}, + {0.167355,-1.385869}, + {-1.184704,0.231683}, + {-1.687510,0.741804}, + {0.460393,0.417694}, + {0.913381,-0.623551}, + {-0.025182,0.652840}, + {0.149389,1.580919}, + {0.046797,0.067857}, + {0.445068,-0.193108}, + {-0.087060,0.449112}, + {0.444716,1.154858}, + {-1.680048,-1.100377}, + {0.060122,1.288340}, + {1.811764,0.294464}, + {0.172455,1.302739}, + {-1.053456,-0.391417}, + {-0.932098,-1.179288}, + {0.822615,0.311778}, + {-0.593686,-0.517305}, + {0.592373,-0.858691}, + {-0.941357,0.211116}, + {-1.091715,-0.037219}, + {0.397495,0.181766}, + {-0.339179,-0.444183}, + {0.202008,-0.835547}, + {0.707791,0.284963}, + {1.127548,0.443368}, + {0.320918,0.693486}, + {-0.408938,-0.202700}, + {-0.474738,-1.197323}, + {0.196347,-0.186877}, + {0.133286,-0.981743}, + {0.454869,-0.118595}, + {-0.708891,0.915489}, + {-0.124946,0.257625}, + {-0.013053,-1.262217}, + {-0.816680,0.357514}, + {-1.325378,-0.000513}, + {-0.471835,-1.666112}, + {0.006822,0.861943}, + {-0.609116,0.665514}, + {-0.022823,-0.921185}, + {0.334153,-0.307869}, + {-0.200664,0.039748}, + {-1.341585,-1.016766}, + {-1.478115,-0.168005}, + {0.493183,-0.315358}, + {0.320896,-0.265798}, + {-0.410948,0.749325}, + {0.493700,0.609085}, + {1.511312,-0.136707}, + {-0.369151,-1.186832}, + {0.053669,-0.453470}, + {-0.344181,0.465001}, + {-0.409580,1.225758}, + {-0.040541,0.314214}, + {-0.563372,0.154451}, + {-0.296031,0.128113}, + {-0.170489,-0.237342}, + {0.484353,0.541345}, + {-0.281269,-1.163252}, + {-0.441618,-0.191346}, + {-0.766963,-1.158696}, + {0.683851,-0.047111}, + {0.085014,-1.047429}, + {0.435402,-1.193670}, + {0.723781,0.086784}, + {0.117848,0.731946}, + {-1.001471,-0.568533}, + {1.623786,-0.472448}, + {-0.405629,-0.440914}, + {-0.867240,0.860770}, + {-1.370369,-0.367847}, + {-1.068700,0.049127}, + {-0.506801,0.070046}, + {-0.571468,-0.279030}, + {-0.936487,0.177180}, + {1.208152,0.335738}, + {0.547493,0.278008}, + {-0.676350,0.122804}, + {0.881113,-0.622278}, + {-0.997446,0.228682}, + {0.374538,-1.112491}, + {0.018405,2.294138}, + {0.190651,-0.275758}, + {-1.066702,1.292937}, + {0.453821,1.500667}, + {-0.003891,-0.058122}, + {0.483079,1.838471}, + {-0.535369,-0.173664}, + {-1.069100,-0.694773}, + {-0.112032,-1.188326}, + {0.855142,0.212202}, + {-1.308295,-0.165234}, + {-0.899488,-0.114441}, + {-0.146224,0.097630}, + {-0.510277,0.887175}, + {0.821703,0.158980}, + {0.853827,-0.985330}, + {0.451970,0.343768}, + {0.077419,-1.075895}, + {-0.613300,0.876653}, + {-0.747934,0.101782}, + {0.456308,-0.448831}, + {0.704574,0.516584}, + {-0.123099,0.328140}, + {0.934254,-0.065327}, + {-0.598220,-0.151876}, + {0.247193,-0.320853}, + {0.710846,0.595196}, + {1.133704,-0.279589}, + {-0.213979,0.300774}, + {-0.136586,-0.481220}, + {-0.818138,0.623683}, + {0.492634,-0.509161}, + {0.233986,-0.216658}, + {-1.803974,-0.101863}, + {0.338246,-0.233200}, + {1.210916,-0.191023}, + {-0.419416,0.400604}, + {0.174883,0.361058}, + {0.041907,-0.084804}, + {-0.565089,-0.646098}, + {0.808848,-0.495713}, + {-0.880710,-0.067991}, + {0.466173,-0.432444}, + {0.326814,0.655068}, + {1.323321,-1.755300}, + {-0.246832,0.422534}, + {0.488638,0.630369}, + {-0.672349,-0.571405}, + {0.929277,0.597525}, + {0.295168,1.180543}, + {-0.443439,-0.167602}, + {0.850886,0.731905}, + {-0.130536,-1.019228}, + {0.667789,-0.245031}, + {-0.048100,0.713830}, + {-0.693496,1.039212}, + {-0.470569,-0.156852}, + {1.071015,-0.851179}, + {-0.141749,-0.228665}, + {0.133398,0.157939}, + {-0.920078,-0.522450}, + {-1.336102,-2.023545}, + {0.189471,-0.546281}, + {0.600537,-0.493998}, + {0.253657,0.643392}, + {-0.844469,1.910885}, + {0.805807,0.277348}, + {0.113829,-0.394163}, + {0.706544,0.990309}, + {0.166811,-1.066923}, + {0.713167,0.883103}, + {1.297380,-0.698009}, + {0.182918,0.196844}, + {-0.582698,0.320323}, + {1.179693,1.053822}, + {1.973986,0.861945}, + {0.831394,0.372738}, + {0.036404,-1.044186}, + {-0.322784,0.736748}, + {0.465765,1.236812}, + {-0.094890,-0.910340}, + {0.534838,0.087896}, + {-0.423018,0.473497}, + {0.446821,-0.345740}, + {1.370136,-0.313957}, + {0.605235,-0.218558}, + {-0.312323,-0.331415}, + {-0.957650,-0.174169}, + {0.438262,0.355984}, + {-0.630817,-0.585063}, + {0.844182,0.027599}, + {0.255999,0.290238}, + {0.195645,-0.309908}, + {-0.361390,0.759387}, + {0.793257,-0.590533}, + {-0.272252,-0.825983}, + {-0.524775,1.002337}, + {1.025595,0.035075}, + {0.144336,0.133347}, + {-0.053176,-0.873734}, + {-1.072797,-0.022777}, + {-0.201704,-0.812261}, + {0.406989,0.690699}, + {0.167489,0.337122}, + {0.954502,0.132945}, + {-0.234877,-1.122684}, + {-0.713308,0.242610}, + {0.993134,-0.224591}, + {0.195455,0.240318}, + {0.176161,0.919258}, + {-1.200962,0.602950}, + {0.146329,-0.178380}, + {1.905485,0.926800}, + {-1.213910,-0.046545}, + {-0.712013,0.163252}, + {0.701015,0.587351}, + {0.475746,-0.236882}, + {0.681216,1.077988}, + {1.005624,0.206876}, + {0.503490,0.797294}, + {-0.740207,-0.178577}, + {0.049749,0.215896}, + {0.121691,0.231312}, + {0.307603,1.696005}, + {0.149964,-0.357488}, + {-0.833350,1.591904}, + {-1.066643,-0.227741}, + {-0.130385,0.289346}, + {0.171775,1.229285}, + {0.499181,0.204163}, + {0.365325,0.432717}, + {-1.116102,1.193373}, + {0.816269,0.322493}, + {0.044289,-0.038741}, + {-0.081816,-0.660226}, + {0.209952,-0.440067}, + {-0.585770,-1.303251}, + {-0.470685,0.187163}, + {-0.273317,-0.063477}, + {1.701860,-0.310642}, + {0.235376,0.741904}, + {-1.391462,-0.818046}, + {0.891559,0.276066}, + {0.397528,-0.407250}, + {-0.245719,0.703900}, + {0.408310,-1.425978}, + {0.984774,0.218506}, + {-0.226844,0.404807}, + {-0.478742,-0.640515}, + {0.194719,1.070898}, + {-0.421489,-1.495545}, + {-0.285219,-0.021769}, + {0.805010,-0.178533}, + {-1.462175,-0.074131}, + {-0.012403,-0.230968}, + {1.614191,-0.155847}, + {1.208571,-1.196227}, + {-0.757660,1.376246}, + {0.948323,-0.100899}, + {-0.537264,0.178661}, + {-0.225242,-0.390378}, + {-2.111611,-0.388815}, + {0.591711,0.721370}, + {-0.486270,-0.043296}, + {-0.354134,0.102331}, + {0.494296,0.500110}, + {0.977534,0.912976}, + {0.083083,0.580670}, + {0.047811,-0.201119}, + {-0.101871,1.602735}, + {-0.299291,-0.338615}, + {-0.517633,-0.181010}, + {0.557599,-1.494308}, + {-1.180601,-0.754826}, + {0.843726,1.285523}, + {0.248651,1.227134}, + {0.385419,-1.487426}, + {0.329802,0.523718}, + {0.832042,2.344297}, + {-0.483497,-0.042848}, + {-0.571850,0.444970}, + {0.578707,-0.332521}, + {-0.383466,0.231784}, + {0.026002,1.355058}, + {0.290971,-0.253279}, + {-0.280147,-0.381802}, + {0.068319,-1.243266}, + {1.056405,-0.214847}, + {-0.804678,0.348259}, + {-0.311298,-0.374442}, + {-0.727188,1.198522}, + {0.089518,0.348222}, + {0.016808,0.138825}, + {-0.165610,0.734759}, + {-0.607876,0.020547}, + {-0.381076,0.319154}, + {0.771585,2.282850}, + {-0.679082,-0.535810}, + {0.922199,-0.104349}, + {0.883859,0.707429}, + {0.297841,-0.513259}, + {-0.084643,0.804522}, + {0.051716,0.095978}, + {-0.214681,-0.166287}, + {0.681025,0.064098}, + {1.880843,0.324433}, + {0.035759,0.351759}, + {-0.184237,1.372837}, + {0.089526,-0.380857}, + {1.314891,0.090765}, + {-0.166000,-0.408904}, + {-0.487537,-0.303936}, + {1.403138,-0.027080}, + {0.874409,-1.421801}, + {-1.455847,-0.180022}, + {1.082291,1.664879}, + {0.071012,0.797922}, + {0.252097,-0.345585}, + {0.278979,0.328135}, + {0.096045,-0.823268}, + {0.240866,0.568270}, + {0.623840,0.074629}, + {1.197388,-0.864621}, + {0.010140,0.536038}, + {-0.936742,-0.311617}, + {0.229416,0.009804}, + {-0.867776,1.059319}, + {0.613966,0.475140}, + {-0.213434,0.139105}, + {0.725146,-0.742290}, + {0.106239,0.386418}, + {0.189119,-0.313432}, + {-0.506237,-0.211804}, + {0.625359,0.120521}, + {0.723693,-0.672366}, + {-0.960395,0.399574}, + {0.120116,0.211127}, + {0.862921,-0.124087}, + {1.083842,1.379676}, + {-0.596075,-0.150507}, + {1.813520,0.153563}, + {0.821543,0.716422}, + {0.905501,0.148319}, + {-0.281616,0.736664}, + {0.523724,0.771024}, + {0.736386,0.335333}, + {0.704974,-1.258289}, + {0.230135,0.149167}, + {-0.183667,0.141978}, + {0.343212,-0.472806}, + {0.502101,-0.030266}, + {0.302980,-0.873466}, + {-0.047585,0.202728}, + {-0.490690,-1.793145}, + {0.072517,0.500160}, + {0.574135,0.273335}, + {-0.679558,-0.481851}, + {-0.391140,0.833001}, + {0.007197,-0.476483}, + {0.755864,0.699900}, + {0.023659,0.256314}, + {-0.219938,-0.203388}, + {-0.489864,0.259189}, + {-1.006033,-0.103282}, + {0.158715,-0.664053}, + {-0.300183,-1.039796}, + {-1.321861,-0.637445}, + {-0.720415,-0.327571}, + {0.251887,-0.485211}, + {0.078411,-0.322993}, + {0.056805,-0.293353}, + {0.315853,-0.085568}, + {0.222705,0.310332}, + {-0.182731,-0.397738}, + {-0.180319,0.561981}, + {0.598215,-0.364178}, + {-1.249949,-1.177746}, + {-0.456053,-0.685671}, + {0.954583,0.571800}, + {1.014219,-1.278695}, + {1.266613,0.223437}, + {-0.283420,-0.474797}, + {0.693306,-0.029207}, + {0.273299,0.133892}, + {0.532101,-0.320308}, + {-0.594831,0.406073}, + {-0.005518,0.766143}, + {0.147701,0.838501}, + {-0.745052,0.749668}, + {0.936722,0.046095}, + {-0.921153,-0.296284}, + {0.230717,1.078411}, + {-0.104489,0.089344}, + {0.184105,0.646882}, + {0.829563,-0.030537}, + {0.646903,-1.032258}, + {-0.266078,-0.192410}, + {0.430983,-0.751174}, + {-0.369734,0.154678}, + {1.027273,-1.123325}, + {-0.284810,-0.673581}, + {-0.198272,0.710599}, + {-0.664385,0.828056}, + {-1.078880,0.714872}, + {-0.474676,0.242386}, + {0.680091,-0.410467}, + {-0.127690,-0.562865}, + {-0.234136,-1.291910}, + {-0.304469,-0.626725}, + {0.530474,0.566233}, + {-0.109255,-0.557004}, + {0.087012,0.988810}, + {-0.750837,-1.577521}, + {0.347408,-0.389814}, + {1.437412,0.283755}, + {-0.159056,1.128835}, + {0.004413,-0.144927}, + {0.088644,-0.027569}, + {-0.079487,-0.229503}, + {0.870379,-0.028245}, + {-0.138882,1.645245}, + {-0.177149,-0.495996}, + {-0.040567,-0.960823}, + {0.701093,-0.753669}, + {-0.268945,0.477653}, + {0.519034,-0.856936}, + {1.010434,0.014817}, + {0.314739,0.141389}, + {0.838768,0.270923}, + {-0.922034,0.148587}, + {0.537647,1.022497}, + {-0.184456,0.248540}, + {-0.702941,0.129272}, + {-1.199959,-0.484713}, + {0.775146,0.641877}, + {1.355787,-0.061010}, + {-0.273411,-0.344273}, + {-0.079652,-0.580078}, + {-0.294108,0.383430}, + {-0.663756,0.764663}, + {-0.029209,0.187390}, + {0.458825,0.020946}, + {-0.759974,-0.072059}, + {-0.762552,2.339859}, + {-0.691081,0.637021}, + {0.066676,-0.267145}, + {-0.000870,-0.130399}, + {-0.128295,-0.090600}, + {0.434282,-1.040424}, + {0.064080,0.311479}, + {0.445593,-1.427874}, + {0.309938,0.341331}, + {-0.668997,0.293917}, + {1.532275,0.452357}, + {1.468994,0.022104}, + {-0.581643,1.003752}, + {0.923086,0.272041}, + {0.469483,0.205555}, + {0.066270,1.032433}, + {-0.223936,0.193990}, + {0.722656,0.900099}, + {-0.460502,0.026773}, + {0.264304,0.263321}, + {0.011564,0.998830}, + {-0.852220,-0.735707}, + {-0.367962,0.277292}, + {0.912905,-0.022560}, + {0.474794,-0.033505}, + {0.383646,0.014366}, + {-0.147667,-0.066343}, + {0.496019,-0.698605}, + {0.466197,0.778409}, + {-0.005985,-0.917034}, + {0.364603,-1.005913}, + {-1.127720,-0.496130}, + {0.530754,-0.710343}, + {0.817573,-0.478350}, + {1.542207,1.147533}, + {-1.015912,-0.392767}, + {-0.528064,-1.332638}, + {-1.655403,0.790160}, + {-0.192199,0.863973}, + {-0.148335,1.398748}, + {0.231018,-0.580136}, + {-0.028057,0.350163}, + {-0.078239,-0.095824}, + {-0.368671,-0.118777}, + {0.143814,0.563598}, + {-0.286646,-1.756129}, + {0.331342,0.411717}, + {0.402591,0.419929}, + {0.267689,0.344904}, + {-0.737596,0.808101}, + {-1.479648,-0.212449}, + {0.354386,1.310559}, + {-0.676218,-1.049757}, + {-0.115748,-1.162720}, + {-0.325709,-1.636897}, + {0.093754,0.067673}, + {-0.266273,-1.083043}, + {-0.366387,-0.814048}, + {-0.315910,0.796504}, + {1.358526,0.414087}, + {-0.674816,-0.587575}, + {-1.084357,-0.761996}, + {1.170537,-1.118362}, + {-0.888671,-0.372056}, + {0.206631,-0.197368}, + {0.151309,-0.017645}, + {-0.639638,-0.158684}, + {-0.818429,-0.799644}, + {0.193617,0.138892}, + {-0.330140,0.508120}, + {-1.023892,-0.005087}, + {-0.492779,-0.242526}, + {1.190477,0.548598}, + {0.380355,-0.428248}, + {-0.443627,0.322194}, + {0.643475,-0.610225}, + {1.639932,0.217874}, + {-0.075206,-0.891935}, + {0.472977,0.806206}, + {-0.049387,0.521157}, + {0.775513,1.120129}, + {-0.820993,-0.580519}, + {0.787248,0.471905}, + {1.982564,-0.239183}, + {0.036994,-0.084856}, + {0.397587,-0.108305}, + {0.717829,-0.658020}, + {0.096854,-1.073618}, + {-0.247410,0.105690}, + {-0.636805,-0.001866}, + {0.249262,0.170546}, + {-1.384929,-0.181014}, + {0.394318,-0.470332}, + {0.312685,-0.971393}, + {0.126831,1.201348}, + {-0.741448,-0.364570}, + {0.885990,-0.170062}, + {0.946030,0.048529}, + {-0.814388,0.775904}, + {0.365165,-0.393381}, + {-0.910022,-0.285627}, + {-1.692124,-0.058729}, + {-1.176468,0.344140}, + {-0.680828,-0.802456}, + {1.430130,-1.167865}, + {-1.009736,-0.292885}, + {0.780604,0.117665}, + {-1.183708,-0.191115}, + {-1.109502,-2.955782}, + {-0.679155,-0.425963}, + {-0.478117,-0.857997}, + {0.559869,1.189793}, + {0.693475,0.705402}, + {-0.069617,-0.231592}, + {-0.824859,-0.475262}, + {-0.613227,0.171012}, + {-0.972368,-0.750733}, + {0.572478,-0.362034}, + {0.400015,0.093211}, + {-0.664619,-0.115371}, + {1.629905,1.260396}, + {-0.887239,-0.880451}, + {-0.475993,1.783962}, + {-0.535449,0.374335}, + {-0.268655,0.381528}, + {-0.048788,0.080243}, + {-0.263956,0.156544}, + {-0.201047,-0.681716}, + {0.007541,-0.270714}, + {0.968368,-1.040116}, + {1.598093,-0.868513}, + {0.608883,-0.925775}, + {-0.292500,0.359309}, + {0.781647,-1.854675}, + {-0.048384,-0.358500}, + {-0.045277,0.182846}, + {0.702542,-0.682803}, + {-1.310088,0.288354}, + {-1.111262,-0.253839}, + {-0.610601,0.629673}, + {-0.077137,-0.288207}, + {-1.248534,-0.678787}, + {0.589672,-0.209868}, + {0.328118,0.280762}, + {-0.130254,0.359489}, + {-1.191280,-0.282377}, + {-0.727137,0.795181}, + {-0.332298,0.545214}, + {0.449265,0.809670}, + {-1.176652,0.024432}, + {-0.444225,0.247852}, + {-0.493719,-0.443957}, + {0.490093,-0.462030}, + {0.894083,-0.428290}, + {-0.808464,0.061714}, + {-0.438031,-0.880389}, + {-0.374120,-0.133532}, + {0.109504,0.714367}, + {1.199793,-0.870295}, + {-0.016396,1.234340}, + {0.176536,0.170704}, + {1.583727,-1.037287}, + {-0.408359,0.192187}, + {-0.716863,-0.030518}, + {-0.087939,-0.157292}, + {0.233970,-0.789071}, + {0.448874,-0.318136}, + {-0.001706,0.203524}, + {-0.583113,0.483299}, + {0.032509,-1.159109}, + {0.243543,-1.545598}, + {0.963137,-1.858378}, + {-0.433912,0.106663}, + {-0.584636,-0.554822}, + {-0.169820,0.694442}, + {-0.694692,-1.420531}, + {0.124368,0.308158}, + {-0.371740,-1.256747}, + {-0.371259,-0.345713}, + {-0.080108,-0.248600}, + {-0.508996,-0.502867}, + {-0.259720,-1.107589}, + {-0.479506,-0.625836}, + {-0.966428,-1.108758}, + {0.199396,0.684562}, + {-0.139579,-0.532375}, + {-0.671940,1.263705}, + {0.583387,-0.545125}, + {0.594017,0.135560}, + {0.295089,-0.517450}, + {0.227495,-0.116494}, + {-0.278437,0.070346}, + {1.252146,0.161429}, + {-0.719420,-0.400126}, + {0.411649,0.672294}, + {-0.067492,-0.147642}, + {0.773465,0.447213}, + {-0.096564,0.687259}, + {0.223581,-0.672181}, + {-1.189369,-1.012300}, + {0.378992,-1.602545}, + {0.528201,-0.184505}, + {0.555361,-0.073704}, + {0.641793,-0.149102}, + {0.614789,0.145011}, + {-0.014245,0.835852}, + {-0.433430,-0.150091}, + {1.265735,-0.171617}, + {0.424119,0.261458}, + {0.543597,-0.019062}, + {0.106955,-0.352852}, + {0.259824,-1.044464}, + {-0.134395,1.294968}, + {0.614190,0.103061}, + {-0.472730,0.440592}, + {0.026255,1.541770}, + {-0.680532,0.748520}, + {-1.652447,-0.981050}, + {1.530492,0.410946}, + {0.590749,-0.057968}, + {-0.204753,-0.053539}, + {-0.146540,0.407365}, + {-0.589178,-0.794021}, + {1.057477,0.390612}, + {-0.318475,0.110593}, + {0.860875,-0.484007}, + {-0.853862,-0.303066}, + {-0.640767,-0.247635}, + {-0.661993,0.487274}, + {-0.132963,-0.470698}, + {0.276424,0.103581}, + {0.269608,-1.122638}, + {-1.094199,0.419837}, + {0.466955,-0.942801}, + {1.061330,-0.773058}, + {0.504520,0.613301}, + {0.975902,0.530381}, + {-0.030956,0.526710}, + {0.231220,-1.339298}, + {-0.011487,0.006031}, + {-0.018207,-1.410146}, + {-0.042725,-1.430596}, + {0.082844,0.468408}, + {-0.592661,0.098480}, + {0.011226,0.279928}, + {0.032576,-1.292298}, + {-1.290445,0.847037}, + {0.901504,-0.435370}, + {-0.728679,-1.694385}, + {0.869029,1.438773}, + {0.348432,0.771641}, + {0.433021,-0.359444}, + {-0.716851,-1.686122}, + {0.654974,-0.546823}, + {-0.288514,0.307206}, + {0.656826,0.217168}, + {-0.688401,0.403697}, + {-0.151237,-0.641147}, + {0.280761,-0.025080}, + {1.352524,0.262260}, + {-1.020794,0.502821}, + {-0.308908,-0.753609}, + {-1.227055,-0.566285}, + {1.246124,-1.216215}, + {-0.096449,-0.082642}, + {-0.582940,0.409202}, + {-0.297638,0.527261}, + {-0.473862,-0.847413}, + {0.493371,0.316474}, + {-0.505728,-0.462956}, + {-0.595404,-0.478184}, + {0.282216,-0.370408}, + {-0.648353,2.154436}, + {0.388833,-1.448003}, + {0.520432,0.059147}, + {-0.013529,0.455994}, + {0.939385,-0.134557}, + {0.620260,0.444285}, + {0.242877,-0.212567}, + {0.864014,1.110652}, + {-0.433176,0.148295}, + {-0.467423,0.654889}, + {0.385444,0.838910}, + {-0.451962,-0.686281}, + {-0.028356,1.160879}, + {-0.420737,0.282096}, + {0.276441,0.183335}, + {0.644401,0.809729}, + {-0.038628,-0.032380}, + {-0.689183,0.615413}, + {0.685082,0.193192}, + {0.603120,-0.720557}, + {0.575454,-0.298269}, + {-0.336636,0.032836}, + {1.167203,-0.640395}, + {-1.086856,-0.481934}, + {1.008476,1.002123}, + {-0.884676,0.816595}, + {1.107577,-0.884024}, + {0.478516,-0.707394}, + {0.258192,-0.748370}, + {-0.741356,0.392670}, + {0.705741,-0.514239}, + {0.153360,0.250206}, + {0.332233,0.401451}, + {-0.810436,0.247146}, + {0.382241,0.492063}, + {-0.120140,-0.666149}, + {0.219067,-0.351762}, + {0.503475,0.143766}, + {1.810909,-0.522492}, + {0.914236,1.024772}, + {-0.001545,0.951413}, + {-0.361359,-0.703397}, + {-0.790543,-0.080398}, + {-0.124326,0.712994}, + {0.989520,0.282750}, + {-0.639085,-0.593687}, + {0.532412,0.985720}, + {-0.814493,-0.684384}, + {-0.335779,-0.770313}, + {-1.021545,0.405681}, + {-0.711770,-1.295042}, + {0.875563,-0.431312}, + {-1.424888,0.070227}, + {0.041671,0.512540}, + {0.560060,-1.156517}, + {0.495886,0.815220}, + {0.932619,0.063747}, + {0.015802,-0.313213}, + {0.849039,0.928043}, + {-1.711563,-0.070807}, + {-0.666807,-0.065413}, + {1.336124,0.298359}, + {-1.465749,1.267894}, + {0.643581,0.208283}, + {-0.027162,0.285537}, + {0.727538,0.592374}, + {-1.035589,0.161733}, + {-0.093690,-1.111324}, + {-0.118812,-0.492105}, + {-0.310044,0.136076}, + {0.423281,0.738354}, + {-0.332121,-1.129243}, + {0.821705,-1.094517}, + {0.034405,-0.125589}, + {-1.061441,-0.025527}, + {0.262581,0.337586}, + {0.089369,-0.030417}, + {0.001538,-0.262250}, + {-0.603561,0.120004}, + {-0.666026,-0.523188}, + {-0.604976,0.661149}, + {0.424495,0.063530}, + {-0.459048,0.273275}, + {-0.759139,-1.058355}, + {0.788408,-0.233671}, + {0.420774,-0.023008}, + {-0.057270,-0.647363}, + {0.332215,-0.161691}, + {-0.241240,0.285908}, + {-2.248124,-1.075027}, + {1.897230,1.332517}, + {-1.000960,-0.341355}, + {-0.764357,0.742789}, + {-0.430048,0.351628}, + {-0.758480,-1.168399}, + {-0.435465,-1.025082}, + {-0.031475,1.442605}, + {-0.098961,0.902862}, + {-1.182562,1.622450}, + {-0.779323,0.082419}, + {0.456925,0.197176}, + {-0.508334,-0.322065}, + {0.508929,1.414049}, + {0.831596,-0.269084}, + {-0.557522,0.829015}, + {-0.307706,1.811900}, + {0.522715,0.538211}, + {-0.007168,-0.369323}, + {-0.617961,0.598800}, + {-0.978429,-1.276183}, + {-0.311683,-0.168769}, + {0.813820,-0.732024}, + {1.620090,0.776415}, + {-0.244712,-0.030740}, + {0.423419,0.437735}, + {-0.438972,0.722604}, + {-0.882370,-0.599715}, + {0.861613,0.144139}, + {0.794431,-0.119300}, + {0.174561,0.355555}, + {-0.691546,0.900205}, + {0.994296,1.262278}, + {-0.693701,0.809946}, + {0.153439,0.433443}, + {-0.125105,-0.519678}, + {0.091914,0.929540}, + {0.307382,1.281497}, + {-0.219573,-0.230141}, + {0.323594,0.781383}, + {0.898631,0.775206}, + {0.511558,-0.475861}, + {0.097796,-0.356711}, + {0.279638,1.045159}, + {1.270842,-0.511080}, + {-0.082679,0.240138}, + {0.568139,-0.004501}, + {0.109403,-0.183895}, + {-0.739424,1.048188}, + {-0.054909,-0.730640}, + {-0.107852,-0.216831}, + {0.685852,-0.120568}, + {1.372181,0.079369}, + {-0.057168,-1.475400}, + {1.379104,-0.416757}, + {0.674217,0.132367}, + {0.823818,0.008095}, + {-0.227594,-1.181870}, + {0.154429,-0.278722}, + {-0.380589,1.327236}, + {0.953822,-0.415279}, + {0.523925,-0.065958}, + {-0.336928,0.243956}, + {0.552334,0.546455}, + {1.968980,-0.255377}, + {0.071926,-0.528260}, + {-0.242553,0.409914}, + {0.794756,-0.821838}, + {0.670664,-0.016080}, + {-0.195775,-0.420098}, + {-0.437345,-0.444139}, + {0.929108,0.038056}, + {-0.034900,0.359362}, + {-0.646337,0.250061}, + {0.164494,-0.964178}, + {0.217552,-0.079574}, + {0.616784,-0.219605}, + {0.274625,0.461819}, + {0.600045,0.609724}, + {-0.227316,0.212501}, + {-0.681566,-0.149931}, + {0.613788,0.331795}, + {-0.746826,-0.495927}, + {-0.352302,-0.492596}, + {-0.234966,-0.714624}, + {0.209031,0.429705}, + {0.909196,-0.574662}, + {-0.264863,1.129618}, + {-0.418314,0.193085}, + {0.140225,-0.055672}, + {-0.259935,0.107007}, + {0.577398,-0.501482}, + {-0.700274,0.431435}, + {-0.320978,-1.214359}, + {0.040677,-0.504970}, + {0.621603,0.489428}, + {-0.775181,0.755810}, + {-0.449114,-0.259854}, + {-0.964709,-0.189900}, + {0.571927,-0.612827}, + {-0.510919,0.532547}, + {1.043521,0.076593}, + {0.559284,1.091596}, + {0.385705,-0.620434}, + {-0.281876,1.139602}, + {0.696445,0.461885}, + {0.144423,-0.355093}, + {-1.477952,0.389119}, + {1.033198,-0.665606}, + {0.301267,0.413149}, + {-0.437421,1.527053}, + {-0.688981,0.779191}, + {-0.736537,-0.869510}, + {0.633416,0.485837}, + {-0.217942,-0.604167}, + {0.052318,-0.432202}, + {-0.404016,0.007563}, + {0.371806,0.924113}, + {0.685100,0.792052}, + {0.338713,-1.831682}, + {0.116368,-0.901689}, + {0.859729,-0.187662}, + {0.532246,-0.609526}, + {-0.252737,0.583202}, + {0.802405,-0.891543}, + {-0.657884,-1.409923}, + {-1.011401,-0.576367}, + {-0.518947,0.454590}, + {-0.760309,0.886904}, + {0.551054,0.077816}, + {-0.056155,-0.399365}, + {-1.188687,-0.144384}, + {0.348530,-0.718497}, + {0.040766,0.421674}, + {0.054193,-1.058049}, + {-0.703027,0.823753}, + {0.674644,0.568892}, + {0.653971,-0.029957}, + {-0.330844,0.894927}, + {-0.355906,0.469251}, + {-0.548867,1.196719}, + {-0.316741,-0.112885}, + {-0.050654,-1.074386}, + {-0.458463,-0.052899}, + {-0.323981,-0.056114}, + {-1.226962,-0.781318}, + {-0.793700,0.814978}, + {0.588809,0.468163}, + {0.297339,0.292342}, + {-1.189165,-0.848667}, + {-0.401703,-0.893584}, + {0.275424,0.119550}, + {-0.152022,-0.594732}, + {-0.937268,0.649621}, + {0.139979,0.423321}, + {-0.267033,-0.061451}, + {0.460158,0.411101}, + {0.102352,0.520000}, + {-0.670053,0.131062}, + {-0.547779,-1.300149}, + {1.065430,-1.272432}, + {0.850852,-1.537153}, + {-0.127321,-0.412569}, + {0.497995,-0.760964}, + {0.618018,-0.962779}, + {-0.367868,0.358651}, + {0.418133,-0.031711}, + {0.827988,-0.299697}, + {0.418025,-0.080342}, + {0.227770,-0.733112}, + {-0.522901,0.220810}, + {0.036422,-0.204918}, + {1.192243,-0.320297}, + {0.640624,-2.005424}, + {1.277127,0.447780}, + {-0.277087,0.657680}, + {-0.277141,0.773988}, + {-1.130237,0.935414}, + {0.284414,0.813877}, + {-0.174957,1.139543}, + {0.300714,-0.749478}, + {1.404330,-1.232405}, + {-0.313154,-0.213062}, + {0.652658,0.241568}, + {1.120691,0.518463}, + {0.224488,-0.153773}, + {0.375402,0.482763}, + {0.435975,0.236790}, + {1.127072,-0.422277}, + {0.580361,1.063162}, + {-0.955583,0.064231}, + {-1.802524,0.616951}, + {0.463128,-0.562220}, + {0.556800,0.473310}, + {0.658684,-0.639963}, + {-0.085954,-1.135439}, + {-0.243128,-0.126796}, + {-0.207362,-0.333691}, + {0.056183,-0.707808}, + {0.902377,-0.681407}, + {0.152853,0.619626}, + {-0.603487,0.293431}, + {0.133038,-0.379933}, + {0.264123,-0.101897}, + {0.861720,1.091886}, + {-0.479815,-0.165089}, + {-0.508836,0.900798}, + {-1.131878,0.459296}, + {0.037585,1.004276}, + {-0.480040,0.214050}, + {0.156506,-0.222274}, + {0.690720,0.133503}, + {0.429938,-0.394251}, + {-0.791723,-0.605653}, + {-0.554200,-0.418231}, + {-0.655144,-0.346624}, + {0.054409,0.359821}, + {-0.198795,-0.563282}, + {0.006104,0.725420}, + {-0.447277,0.540059}, + {-0.240985,0.280044}, + {0.637304,-0.116014}, + {1.381762,0.955712}, + {-0.148803,0.395996}, + {0.461393,0.840140}, + {-0.627308,-0.418263}, + {-2.171597,-0.599572}, + {0.080969,0.894764}, + {0.237331,-0.687851}, + {0.226158,-0.331895}, + {0.210506,-0.350461}, + {-0.043257,-0.021596}, + {0.551392,0.221253}, + {0.410879,-0.257200}, + {0.735420,0.692801}, + {-0.812522,0.436671}, + {-1.425556,-0.022695}, + {1.337264,-0.118216}, + {-0.196561,-1.121436}, + {-1.635570,-0.545684}, + {-0.259296,0.302864}, + {0.233845,0.231713}, + {-1.369904,0.069084}, + {0.310104,0.568822}, + {-0.074240,-0.389091}, + {0.513558,0.016256}, + {0.154059,-0.551779}, + {0.139022,0.002589}, + {1.252789,-1.075694}, + {-0.357876,0.779981}, + {-0.057981,-0.578702}, + {-0.348248,-0.564724}, + {-0.281181,0.160394}, + {0.755197,-1.493796}, + {0.349744,-0.585402}, + {-0.097265,0.568082}, + {-1.207000,0.702378}, + {-1.086582,0.502455}, + {-0.274557,-0.175564}, + {-0.663327,-1.099270}, + {0.025018,-0.858302}, + {0.251512,0.181174}, + {0.948731,0.438021}, + {0.278818,-0.736799}, + {0.384640,0.133641}, + {-0.269113,0.522492}, + {-0.192256,0.710115}, + {0.052306,0.974402}, + {0.154651,-0.268357}, + {-0.131640,0.099690}, + {-1.309976,-0.291957}, + {0.346624,0.382487}, + {0.516366,0.707133}, + {0.697076,1.540016}, + {0.490790,-0.397012}, + {1.123760,0.916850}, + {0.515663,0.434250}, + {-1.638678,-0.176421}, + {1.167902,-0.355185}, + {-0.264941,1.971705}, + {0.745419,-0.542922}, + {-0.754792,-0.652504}, + {1.369699,-0.283123}, + {-0.372842,-0.062135}, + {-0.746602,-1.311843}, + {0.620061,-0.729972}, + {-0.014445,-0.658271}, + {0.344167,0.003698}, + {-0.842281,1.037953}, + {-0.843122,-0.523207}, + {-0.318300,-0.179022}, + {-0.323143,0.019886}, + {0.430288,0.041221}, + {0.360478,0.640265}, + {0.483503,-0.160184}, + {0.244137,1.233902}, + {-0.545883,0.318665}, + {0.247693,-0.469566}, + {-0.321296,0.284737}, + {1.147200,0.641921}, + {1.216635,0.890397}, + {0.486701,0.456830}, + {0.550060,-0.222243}, + {-1.397045,0.187919}, + {0.912252,-0.441861}, + {1.245188,-0.318386}, + {-1.140431,0.133960}, + {-0.223423,-0.543275}, + {-0.259693,0.710342}, + {0.100516,0.525350}, + {-0.101837,-0.378891}, + {0.004744,-0.651883}, + {0.701837,0.505055}, + {1.259750,0.414716}, + {1.619510,-0.525369}, + {-0.927012,0.502818}, + {-0.687559,0.774157}, + {-1.015032,0.154981}, + {0.783957,0.857966}, + {1.055951,1.123508}, + {0.124867,-1.198195}, + {-0.122501,-0.319462}, + {0.522490,1.035699}, + {0.047462,-1.064514}, + {-0.069016,-0.011192}, + {-0.061777,0.932923}, + {-0.496995,0.483659}, + {0.960503,0.102691}, + {-0.858251,-0.587168}, + {-0.679635,-1.149459}, + {0.778286,0.086740}, + {-0.797912,0.786926}, + {0.043148,-1.618909}, + {0.354889,1.345281}, + {1.176276,-0.529673}, + {0.612892,1.322230}, + {0.784053,-1.188249}, + {-0.921667,1.036610}, + {-0.328724,-0.039212}, + {0.462540,1.173392}, + {-0.104801,-0.346268}, + {-0.531985,0.372684}, + {-0.788000,0.243345}, + {0.882742,-0.834651}, + {0.691050,0.394536}, + {-0.122631,0.586303}, + {-1.264893,-0.525182}, + {0.461967,0.151354}, + {0.776068,0.123712}, + {0.063297,0.200959}, + {0.136792,-0.138604}, + {-0.573293,0.711280}, + {0.738962,-1.300857}, + {0.159731,-0.141142}, + {-0.359106,-0.029247}, + {-1.076380,0.376036}, + {0.572506,-0.942929}, + {0.367264,0.437083}, + {-0.507908,-0.742628}, + {-0.012061,0.227037}, + {-0.747644,-0.353159}, + {-0.998729,-0.220973}, + {-0.587253,-0.390827}, + {-0.094152,0.756393}, + {0.448719,0.149999}, + {-0.218918,-0.048559}, + {-0.015560,-0.440495}, + {1.434334,-1.392218}, + {0.077947,-0.359505}, + {1.786997,-0.312543}, + {0.255695,-0.381884}, + {-0.301675,-0.104294}, + {0.700752,0.109512}, + {0.170083,1.699975}, + {-0.434933,0.267685}, + {0.402053,-0.343667}, + {0.698429,0.834043}, + {-0.331847,-0.731839}, + {-1.146666,-0.701629}, + {-0.002935,0.704111}, + {0.205245,0.690760}, + {-0.683238,0.215240}, + {-0.646288,0.694404}, + {0.325711,-0.046830}, + {0.592448,-0.308384}, + {1.529366,-0.987481}, + {-0.295320,-0.271241}, + {0.729563,-0.167488}, + {0.642193,-0.120176}, + {-1.548146,0.885333}, + {0.351531,0.897226}, + {1.595430,1.246450}, + {-0.486378,-0.288596}, + {-0.302011,0.618312}, + {0.182741,0.420557}, + {1.113837,0.316246}, + {0.527597,0.254757}, + {1.415948,-0.051085}, + {0.520356,-0.721367}, + {-0.144424,0.705921}, + {-0.070251,-1.038962}, + {-0.218357,1.041630}, + {0.729530,-0.690915}, + {0.128689,0.314481}, + {-0.117418,0.402299}, + {0.241349,-0.167075}, + {0.360539,0.711009}, + {-0.001491,0.204478}, + {0.487177,-0.385142}, + {0.480899,0.083528}, + {0.905059,-0.668149}, + {0.473028,0.683468}, + {0.048413,-0.513762}, + {0.392684,-0.016979}, + {0.008658,-0.397690}, + {0.312022,-0.290086}, + {-0.224513,-0.203352}, + {-0.700904,1.285464}, + {-0.209541,0.152510}, + {-0.689456,0.082655}, + {-0.090242,0.461600}, + {-0.012036,-0.301713}, + {-0.301809,1.238924}, + {-0.329893,-0.021590}, + {0.223851,0.421586}, + {0.317937,1.311734}, + {0.075659,-1.100616}, + {0.582116,0.136126}, + {-0.364256,-0.625304}, + {0.014662,-0.234577}, + {-1.092968,0.618389}, + {-0.238227,-0.574362}, + {-0.417061,-1.373738}, + {-0.534463,0.792450}, + {-0.112449,-0.282805}, + {-0.579626,0.953945}, + {-0.737441,-1.782889}, + {-0.761315,-0.665039}, + {-0.230262,0.334866}, + {-1.640518,0.345659}, + {-0.183278,1.207714}, + {-0.155715,0.262073}, + {0.495034,0.977896}, + {0.267491,0.395822}, + {0.020021,-0.525175}, + {-0.409405,0.155372}, + {-0.637273,0.397385}, + {0.569432,-0.826493}, + {-0.300224,-0.571919}, + {-0.419535,0.627416}, + {-0.670691,0.736638}, + {0.148186,0.842415}, + {-1.898319,0.635542}, + {-0.194627,-0.501422}, + {0.649891,0.952195}, + {-0.213436,-0.681949}, + {-0.868013,-1.363636}, + {0.613184,-1.017739}, + {-0.840052,-1.564144}, + {0.723446,-0.354610}, + {0.654592,-0.818130}, + {-0.712827,-0.762259}, + {0.166346,0.489915}, + {-0.302822,-0.693097}, + {1.358446,-1.355483}, + {-1.139428,0.086305}, + {-1.082740,1.498861}, + {-0.329648,0.147864}, + {-0.174769,-0.118863}, + {0.845277,-0.480739}, + {-0.289794,-0.173351}, + {0.837552,-0.021153}, + {-0.033429,0.650532}, + {-0.718426,-0.668466}, + {-0.238433,0.483005}, + {-0.720576,-0.226939}, + {-0.565185,-0.899305}, + {-0.586429,-0.847011}, + {0.948211,-1.151628}, + {0.079392,-1.199359}, + {-0.196210,-0.018502}, + {0.092218,-0.902690}, + {0.545633,-0.702880}, + {0.953190,-0.244621}, + {-0.122974,-0.872691}, + {1.001723,0.399548}, + {0.773129,0.292586}, + {0.369522,1.099643}, + {-0.128016,0.145086}, + {0.432098,-0.694186}, + {0.830267,-0.548718}, + {0.960296,-0.000663}, + {0.811884,0.184881}, + {-1.071500,0.409177}, + {0.738243,0.409131}, + {0.073622,0.031693}, + {-0.046745,0.274024}, + {-0.115489,-0.411869}, + {0.216582,-0.319286}, + {0.753995,-0.498359}, + {-0.216480,-1.134280}, + {-0.021988,-0.433786}, + {-0.327947,0.395941}, + {0.075096,-0.558661}, + {-1.031386,-0.090874}, + {0.661876,0.234726}, + {-0.032586,-0.957959}, + {0.675562,-0.062058}, + {0.089478,0.117239}, + {0.758516,-1.036737}, + {0.363183,-0.269026}, + {0.465104,0.683736}, + {0.515043,0.202359}, + {1.572937,-1.193864}, + {-0.456658,-0.051996}, + {-0.262883,-0.004140}, + {1.536223,-0.941011}, + {0.241501,-1.081946}, + {0.376242,-0.059869}, + {1.661854,-0.122313}, + {-0.171189,-0.902749}, + {0.163209,0.109854}, + {0.838006,-0.570945}, + {-0.403151,0.401615}, + {-0.941536,0.224667}, + {0.254770,0.119757}, + {0.010017,0.650252}, + {-0.849219,-0.093818}, + {0.438965,0.528280}, + {0.585909,0.170241}, + {-0.231668,-0.647083}, + {-0.812408,-0.241565}, + {-0.270441,-0.747414}, + {0.351427,-0.136789}, + {-0.454502,-1.594160}, + {-0.128552,-0.381218}, + {0.852571,0.550196}, + {-0.082519,-0.975152}, + {-0.118825,-0.587947}, + {0.118019,0.174990}, + {0.977679,0.989980}, + {-0.687867,0.152383}, + {1.597743,0.880373}, + {-0.926928,-0.305081}, + {-0.676320,0.054946}, + {-0.480725,-0.568788}, + {-0.366417,1.067759}, + {0.017773,1.235424}, + {1.404835,-1.087228}, + {-0.967946,0.352186}, + {-1.229937,-0.317813}, + {-0.051257,-0.039613}, + {-0.580332,-1.096354}, + {1.377717,0.775992}, + {-0.525138,-0.051334}, + {0.341863,0.010390}, + {-0.994051,0.551957}, + {0.554196,0.888456}, + {-0.096138,-0.120533}, + {0.772601,-0.270712}, + {0.643594,-0.087350}, + {0.409067,-0.299266}, + {-0.679971,-0.342567}, + {0.589620,0.703170}, + {0.636779,1.389787}, + {-0.824128,-0.335895}, + {0.607159,0.420643}, + {1.373971,-0.342893}, + {-0.910657,0.837440}, + {1.034973,-0.352405}, + {1.085682,1.920129}, + {0.064748,0.257708}, + {0.862755,0.755955}, + {-0.684932,0.094005}, + {0.112119,-1.441972}, + {1.163420,-0.049867}, + {-0.635217,0.609453}, + {-0.238855,0.480435}, + {1.449328,-0.098448}, + {0.784127,-0.652244}, + {0.769041,-0.937921}, + {0.835573,0.295585}, + {-0.062899,1.494506}, + {-0.062220,0.228891}, + {0.481334,-0.470990}, + {-0.505073,0.374573}, + {-0.099382,-0.967523}, + {1.186319,-0.831618}, + {-0.399300,0.931511}, + {-1.524902,-0.985501}, + {-0.615012,0.547274}, + {0.268857,-0.076929}, + {-0.897427,1.088771}, + {1.055351,0.095282}, + {1.708821,-0.076167}, + {-0.739946,-0.354375}, + {0.373417,0.855748}, + {0.131967,0.285461}, + {-0.364408,-1.708271}, + {-1.014175,0.495565}, + {0.505787,1.003443}, + {0.391683,-0.524584}, + {0.752228,0.882360}, + {-0.394883,1.502965}, + {-0.997717,-0.172972}, + {-0.230813,0.301756}, + {0.669804,-0.121530}, + {-0.070862,-0.368520}, + {1.320153,-0.521160}, + {-1.390873,0.259563}, + {1.146922,0.597540}, + {0.281829,-0.449891}, + {0.295038,0.408987}, + {-0.202209,-1.183362}, + {-0.399018,-0.672154}, + {1.004778,-1.104954}, + {0.143005,0.049996}, + {0.232512,0.669719}, + {0.094630,-0.576997}, + {0.667844,0.367973}, + {-0.537996,0.626066}, + {1.033757,-0.285931}, + {0.992368,-0.514368}, + {-0.319021,0.248041}, + {1.579195,-0.231515}, + {-0.582862,0.913516}, + {-1.085018,0.556959}, + {-0.024787,0.559586}, + {0.402267,0.959849}, + {-0.032095,-0.548640}, + {-1.150115,-0.539607}, + {0.385566,-0.409285}, + {-1.471116,0.537079}, + {0.392795,-1.486643}, + {0.328634,-0.040776}, + {-0.084120,0.830458}, + {-0.524122,0.922066}, + {-0.416595,-0.044276}, + {0.100140,0.462444}, + {-0.590881,1.340948}, + {-0.891718,0.723849}, + {0.337707,-0.670773}, + {0.721537,0.536058}, + {0.059957,0.287448}, + {0.400511,-0.763103}, + {-0.550953,-0.197097}, + {0.591824,0.441947}, + {0.447746,-0.502807}, + {-0.167608,-0.888259}, + {1.103233,-1.437809}, + {0.199023,0.063524}, + {0.202555,0.322043}, + {-0.976584,-0.396812}, + {0.372419,-0.791595}, + {1.289941,0.357281}, + {-0.228916,-1.001487}, + {1.049654,-0.610849}, + {-1.054080,-0.370253}, + {0.859058,-0.644741}, + {-0.377507,0.207554}, + {-0.559546,0.074691}, + {-1.074664,1.355183}, + {0.305625,0.198544}, + {-0.606985,0.356763}, + {0.242896,-0.375304}, + {-0.749774,-0.181054}, + {-0.342246,-0.259054}, + {1.589396,1.010118}, + {1.140405,-0.864599}, + {-1.096629,-0.377337}, + {-0.496940,0.605907}, + {-0.664267,-0.651997}, + {0.951590,0.175420}, + {-1.117929,-0.261231}, + {-0.534170,0.241918}, + {-0.781527,0.244559}, + {-0.271591,0.486803}, + {-1.256120,0.858586}, + {-0.421249,0.405847}, + {0.479353,-0.525636}, + {0.209101,0.142047}, + {-0.083113,0.886645}, + {-0.471083,-0.416663}, + {0.011834,-0.389550}, + {0.669072,-1.245624}, + {-0.598668,0.117422}, + {-0.173989,-0.056465}, + {-0.922954,0.482571}, + {0.522571,-0.365634}, + {0.042361,1.106480}, + {0.655395,-0.034779}, + {0.631652,-0.294389}, + {1.527036,-0.058525}, + {-0.249208,0.459807}, + {-0.887983,-0.627558}, + {-0.289353,-1.411403}, + {0.054751,2.470137}, + {-0.248717,1.053043}, + {-0.735576,0.010779}, + {-0.514003,-0.279226}, + {0.305765,1.274540}, + {0.534981,0.774853}, + {0.392611,-0.644576}, + {-0.468937,1.078119}, + {-0.541705,1.414380}, + {0.277103,0.165488}, + {-0.387851,-0.830792}, + {-1.253914,0.532510}, + {-0.221315,1.797991}, + {0.274370,0.277949}, + {-1.765567,0.046853}, + {-0.327146,-0.297614}, + {-0.984489,-0.168465}, + {-0.660634,-0.450022}, + {0.198917,-0.218025}, + {-0.677175,-0.172085}, + {0.644052,0.285876}, + {0.088023,0.232635}, + {-0.451399,-1.512956}, + {-0.377844,-0.626486}, + {-0.362430,-0.127407}, + {-0.840019,0.380215}, + {0.114939,0.878416}, + {0.470442,-0.105566}, + {-0.585039,0.237390}, + {-0.815600,-0.504437}, + {-0.161445,0.036143}, + {0.296359,1.325861}, + {-0.322171,-1.669738}, + {1.477603,0.776825}, + {0.381550,-0.635687}, + {-0.694525,-0.559498}, + {-1.930663,-0.704911}, + {-0.449682,-0.545347}, + {0.026977,-0.127266}, + {0.233908,0.544153}, + {-0.863452,-0.074155}, + {-0.649361,2.113175}, + {-1.059833,0.624585}, + {0.846892,-1.573266}, + {-0.217441,-0.559443}, + {-0.160678,1.002391}, + {0.804081,-0.338683}, + {-1.541742,0.230370}, + {-0.503421,-0.416987}, + {1.028147,0.529024}, + {-0.596178,0.738456}, + {-1.173493,0.202724}, + {-0.297988,-0.661943}, + {0.302419,0.866482}, + {-0.521944,-1.270284}, + {-0.436218,-0.097784}, + {-0.264531,-0.550600}, + {1.014478,-0.038692}, + {-0.999085,0.486181}, + {1.440740,-0.371893}, + {-0.042694,0.067326}, + {0.093956,-0.957300}, + {-0.375195,-0.970154}, + {-0.251632,-1.304492}, + {-0.414494,1.099568}, + {0.017527,0.168563}, + {-1.263777,0.285450}, + {0.068131,0.327754}, + {1.105079,0.539763}, + {0.981225,-0.468582}, + {0.551992,-0.036035}, + {1.124159,-0.005432}, + {0.611806,-0.979175}, + {0.483684,-0.518734}, + {-0.366983,0.455012}, + {-1.008954,0.471497}, + {-0.133646,-0.509659}, + {-1.029489,0.006309}, + {0.530972,-0.509375}, + {1.140833,0.249621}, + {-0.211773,0.138957}, + {-0.537149,1.254415}, + {-0.213279,0.065513}, + {-1.082796,0.529235}, + {0.350453,0.444304}, + {0.031279,-0.234978}, + {-0.543908,0.234837}, + {0.487194,1.375390}, + {0.215563,-0.549211}, + {0.072623,0.165267}, + {0.801105,-0.987048}, + {0.269412,0.711896}, + {0.027622,0.562303}, + {-0.813866,-0.782547}, + {-0.093912,0.227673}, + {-0.172055,0.060514}, + {0.074656,-0.266314}, + {1.217632,-0.605089}, + {-0.535103,-0.616239}, + {0.151379,-0.076634}, + {0.642760,-0.481053}, + {0.035701,-0.056708}, + {0.980441,-1.299210}, + {-0.856956,-1.002073}, + {0.598486,0.466839}, + {-0.386966,-1.046460}, + {0.625117,-0.115207}, + {-0.260750,-0.041046}, + {0.076652,-0.932881}, + {0.265818,0.764649}, + {0.421985,-0.714312}, + {-0.601085,0.964101}, + {0.467187,-0.124653}, + {-0.387454,0.211856}, + {-0.157263,-0.585296}, + {0.418027,-0.077462}, + {1.583309,-0.609096}, + {0.884257,0.515131}, + {0.138889,-0.138020}, + {-0.169847,0.059272}, + {0.540075,0.309144}, + {0.557179,1.418778}, + {0.610912,0.512799}, + {-0.873253,0.692568}, + {0.120274,-0.853970}, + {-0.586573,-0.561751}, + {-0.672660,0.694987}, + {1.109601,0.008173}, + {1.003841,-0.652223}, + {0.874688,0.367941}, + {-0.330203,0.745219}, + {-0.753140,0.915769}, + {-0.696116,0.227309}, + {0.346841,0.100445}, + {0.740158,-0.250985}, + {-0.397857,0.594584}, + {1.110536,0.339610}, + {0.345296,-0.347319}, + {-0.907915,-0.471159}, + {-0.649958,1.565001}, + {0.775790,-0.287460}, + {1.032125,0.130026}, + {0.907496,1.390180}, + {0.298254,-1.588717}, + {-0.259348,0.502732}, + {0.220840,-0.783740}, + {-0.138042,-0.590126}, + {0.426154,-0.091085}, + {0.405208,0.611676}, + {-0.204049,-0.083068}, + {0.159682,0.740970}, + {0.942561,0.693500}, + {-0.610743,0.303196}, + {0.172349,1.598668}, + {1.627400,-0.281164}, + {0.551930,0.098748}, + {-0.388243,0.433245}, + {-1.235033,0.763915}, + {-0.744667,-0.561124}, + {-0.592271,-0.641181}, + {0.156840,0.347964}, + {-0.023119,0.533539}, + {0.011757,1.073952}, + {-1.186307,0.280738}, + {0.756950,1.492111}, + {-0.877649,0.112185}, + {-0.585789,-0.254425}, + {0.038438,-0.550157}, + {0.314995,0.322778}, + {-0.134760,0.871567}, + {-1.044096,-0.636270}, + {0.590711,0.558388}, + {0.209019,0.293453}, + {-0.599300,0.026492}, + {1.033710,-0.675529}, + {-1.954583,0.594947}, + {-0.182764,0.343157}, + {0.859978,0.329311}, + {0.646436,-0.806192}, + {-0.046664,0.909861}, + {1.093129,0.536020}, + {0.872300,0.678087}, + {-0.123750,0.457168}, + {0.551871,-0.941036}, + {0.794294,-0.407648}, + {-1.538821,-0.171563}, + {-1.035249,0.118770}, + {-0.348383,-0.118152}, + {-0.226615,-0.889496}, + {1.341554,0.160355}, + {-0.351517,-0.424568}, + {-0.070817,0.414649}, + {-0.442786,0.423882}, + {-0.388425,1.093738}, + {-0.582796,0.676209}, + {0.752177,0.821946}, + {-1.006474,0.412201}, + {-0.416449,-0.072394}, + {-0.911661,1.041543}, + {0.003509,0.102477}, + {0.196127,0.591685}, + {0.326262,-0.526969}, + {-1.042304,0.505778}, + {-1.505353,-1.006878}, + {-0.951996,-1.085898}, + {-0.317499,0.045335}, + {-0.099205,0.858056}, + {0.764524,1.480639}, + {0.517856,0.207770}, + {-0.742181,0.240161}, + {-0.555104,-0.871874}, + {-0.699238,-0.986373}, + {-0.763561,-1.000094}, + {0.670026,-0.733751}, + {0.662880,-0.655407}, + {0.119571,-1.657008}, + {-0.223206,-1.113342}, + {0.487176,0.474053}, + {0.192200,1.888510}, + {0.611398,-0.667669}, + {-1.403757,0.409866}, + {0.024463,-0.041370}, + {-0.609262,0.806420}, + {-0.907307,1.198974}, + {0.162117,-1.544459}, + {-0.796786,0.537950}, + {-0.387992,-0.266020}, + {-0.225214,-0.058790}, + {0.753621,0.972150}, + {-0.615864,1.401833}, + {-0.819524,-0.597168}, + {0.647379,-0.468126}, + {-0.655050,-0.432251}, + {-0.069667,-1.062873}, + {0.359295,0.145826}, + {0.647484,0.920104}, + {-0.101287,-0.687857}, + {0.695485,0.112454}, + {0.685476,-0.236214}, + {0.374271,-0.144157}, + {-1.779720,-0.300198}, + {0.145786,0.213707}, + {0.038580,-0.033343}, + {0.672791,1.277813}, + {0.479531,1.053826}, + {-0.907617,-0.059189}, + {-0.172751,0.074425}, + {-0.349068,0.726073}, + {0.008332,0.348492}, + {0.319315,-0.391381}, + {0.402430,0.078896}, + {-0.391121,0.722606}, + {0.081394,0.035975}, + {0.604639,0.636573}, + {-0.598326,-0.581740}, + {-1.369758,1.353076}, + {-1.032156,-0.428532}, + {-0.405163,0.809273}, + {-0.638386,-0.671499}, + {-1.571366,-0.098790}, + {-0.047946,-0.327424}, + {-0.535140,1.485649}, + {0.572495,-0.533611}, + {0.769134,-0.416792}, + {-0.122776,0.855205}, + {0.281802,-0.669203}, + {0.694392,-0.350054}, + {-0.516665,0.498350}, + {-1.145787,0.669606}, + {-0.587504,-1.078295}, + {-0.906257,1.099786}, + {0.713687,-0.104260}, + {0.500828,-1.120030}, + {0.201346,0.446714}, + {0.571867,0.307374}, + {-0.307728,1.383134}, + {-0.066681,0.450119}, + {-0.848761,-1.038823}, + {1.032712,0.224183}, + {0.061333,-0.310979}, + {0.468093,0.223010}, + {-0.199854,-0.913527}, + {-0.857930,0.211259}, + {-0.587648,-0.245449}, + {0.353839,-0.297458}, + {0.888759,-0.874265}, + {0.403853,-0.386048}, + {0.278338,0.103402}, + {-0.538262,-0.477405}, + {-0.028885,1.451692}, + {0.309332,0.336400}, + {-0.000990,0.952112}, + {0.551432,0.708093}, + {0.885608,0.394472}, + {0.630507,0.873531}, + {2.009406,0.830925}, + {0.270462,0.962180}, + {-0.188686,0.224709}, + {-0.176674,-0.183785}, + {0.140600,1.093924}, + {0.189660,-0.420077}, + {-0.523965,-0.625934}, + {-0.336031,0.037125}, + {0.082479,-0.028029}, + {-0.186355,-0.412999}, + {0.082385,1.314585}, + {-0.916720,0.023372}, + {0.361526,0.970313}, + {-1.036301,0.902711}, + {0.753404,-1.144667}, + {1.331139,0.200917}, + {0.079871,0.568019}, + {0.105169,-0.612822}, + {-1.203528,-0.279910}, + {0.681629,-0.484965}, + {1.737185,-1.163903}, + {-0.073538,-0.938369}, + {0.199483,0.191980}, + {-0.463281,0.147863}, + {0.502202,1.383967}, + {0.662814,-0.696233}, + {0.322913,-0.224863}, + {-0.039758,-0.433784}, + {-0.241469,0.133004}, + {0.631311,-0.203045}, + {-0.490926,0.738562}, + {-0.738987,-0.807033}, + {-0.559719,-1.710482}, + {0.414458,-1.114866}, + {0.217559,-1.101081}, + {2.001337,-0.837311}, + {-0.309366,-1.325185}, + {-0.421962,-0.105397}, + {-0.254192,0.250041}, + {0.149750,1.424141}, + {0.574641,-0.960555}, + {1.300898,0.408217}, + {1.120122,-0.397386}, + {0.988203,-0.705869}, + {0.025219,-0.318984}, + {-0.787385,0.484271}, + {0.244498,-1.167668}, + {-0.293105,1.187101}, + {-1.315942,-0.787983}, + {0.014455,0.371305}, + {0.454436,-0.013107}, + {-0.983662,0.592077}, + {-0.500665,0.485289}, + {-0.822873,-0.988985}, + {-0.684186,0.119209}, + {-0.770508,0.745145}, + {0.751135,0.857208}, + {0.580580,-0.403847}, + {-0.261483,0.001789}, + {-0.599543,0.700149}, + {-0.134033,0.276866}, + {1.292787,0.681824}, + {0.571468,-0.079806}, + {-0.420807,-0.237937}, + {-1.393211,-1.148364}, + {-0.826257,-0.341136}, + {-1.430113,-0.469738}, + {0.254639,-0.935916}, + {0.477547,-0.063091}, + {0.143719,-0.656087}, + {-1.043832,-1.865735}, + {-0.223533,-0.255380}, + {-0.347852,1.319428}, + {0.216353,0.217898}, + {0.751324,-0.392111}, + {0.126306,0.463054}, + {0.421776,0.953244}, + {0.101965,0.723898}, + {0.711760,0.644511}, + {1.214540,-0.992251}, + {-0.900924,0.851336}, + {-0.768326,-0.273583}, + {0.611353,-0.777963}, + {-0.644784,-0.597365}, + {-0.866147,-0.077811}, + {1.171992,-0.373912}, + {0.166663,0.845840}, + {-0.051581,-0.037914}, + {-0.044931,0.952456}, + {1.025787,0.092280}, + {0.682561,1.339457}, + {-0.392748,0.417949}, + {0.032937,0.238781}, + {-0.620218,-0.190434}, + {-0.281839,0.385357}, + {-1.841805,0.735532}, + {0.803464,0.390506}, + {-0.520705,-1.106509}, + {-0.231873,-0.372118}, + {1.238221,-0.126795}, + {0.021599,0.567909}, + {0.135681,0.509549}, + {-0.372477,0.993091}, + {-0.463447,2.094221}, + {-1.084856,0.187484}, + {-0.146659,-0.233581}, + {0.020933,-0.106898}, + {0.829958,0.011197}, + {-0.094014,-0.883021}, + {0.547873,-0.450064}, + {0.202885,1.034507}, + {0.994910,0.329836}, + {1.331541,-0.281977}, + {0.228948,-2.008565}, + {-0.478031,0.427230}, + {1.083612,-1.020268}, + {-0.249602,1.393039}, + {-0.012306,0.044320}, + {0.574595,-0.315582}, + {0.774972,-0.431653}, + {0.270253,1.094467}, + {0.120273,-0.263953}, + {1.016864,0.431796}, + {-0.309168,-0.270309}, + {-1.523819,0.385376}, + {-0.763456,0.512232}, + {0.336560,0.850508}, + {0.042057,-0.438179}, + {0.847706,-0.456465}, + {0.742120,0.530981}, + {-0.373430,-1.277644}, + {0.670180,-1.752892}, + {-0.817789,0.218930}, + {0.452251,-0.077324}, + {-0.072623,-0.105395}, + {-1.412266,-1.332875}, + {0.357278,0.516348}, + {-0.043991,-1.067616}, + {1.180654,-0.141604}, + {0.105626,-0.698556}, + {0.368029,0.262566}, + {-0.920419,0.474313}, + {-0.223634,0.572453}, + {0.361011,0.280134}, + {0.558817,0.182521}, + {0.561101,0.605270}, + {0.229716,-0.019313}, + {-0.434761,-0.308359}, + {-0.245133,0.726120}, + {-0.390881,-1.251642}, + {-0.250035,-1.268882}, + {1.655818,-0.092527}, + {-0.910120,0.060578}, + {-0.188804,-0.314052}, + {1.215279,-0.127738}, + {-0.878795,0.285774}, + {0.369799,-0.207177}, + {0.389388,0.134644}, + {0.047652,0.563269}, + {0.447321,-0.865163}, + {-0.080775,-0.368620}, + {-1.003217,-0.560501}, + {0.115756,0.065585}, + {0.736376,-0.286535}, + {-0.305092,0.029092}, + {0.016444,-0.133073}, + {-0.385179,-0.465072}, + {-0.411212,-0.129245}, + {-2.027827,0.247035}, + {-0.408223,-0.432254}, + {-0.623146,-0.096782}, + {0.066094,0.359122}, + {-0.658791,1.673232}, + {0.345053,0.994307}, + {0.475042,-0.520856}, + {-0.629916,0.001245}, + {0.231530,-0.112516}, + {-0.310512,0.763089}, + {0.351545,-0.857181}, + {-1.282645,0.358697}, + {0.265706,-0.200202}, + {-1.020432,-0.205901}, + {-0.450405,0.863954}, + {0.535266,-1.489977}, + {0.116972,-0.830045}, + {-0.574343,0.203469}, + {-1.234327,0.190012}, + {-0.671839,0.202848}, + {-0.511748,0.717934}, + {-0.667350,-0.498889}, + {0.062991,-0.257410}, + {1.387187,0.166053}, + {0.038892,-0.294788}, + {-0.197843,-1.474079}, + {0.842538,0.954516}, + {0.190780,-0.445425}, + {0.986009,0.305338}, + {-0.043897,-0.600633}, + {1.275066,0.500597}, + {0.688402,0.940529}, + {0.681829,1.527615}, + {1.058668,0.147151}, + {1.057440,0.219391}, + {0.279102,0.711516}, + {-0.735985,-0.916082}, + {-0.795380,0.473156}, + {-0.188000,-0.126179}, + {-0.130109,1.022084}, + {-0.255161,-0.611966}, + {-0.712545,0.512778}, + {-0.390866,-0.023470}, + {0.585919,0.072051}, + {0.265748,-0.113116}, + {-0.954015,0.396356}, + {1.150886,0.526901}, + {0.918889,-0.335352}, + {0.908329,-0.918572}, + {0.829812,1.271961}, + {0.385431,0.764974}, + {0.842191,0.817413}, + {-0.211592,-0.300848}, + {0.085412,-0.503896}, + {-0.295625,-1.210188}, + {0.553279,-0.752066}, + {-0.336870,-0.023617}, + {-0.117579,0.194043}, + {-0.439305,0.074470}, + {-0.871696,0.517667}, + {1.132128,-0.352925}, + {1.659963,0.078571}, + {-0.718459,1.770532}, + {-0.815585,0.052456}, + {0.462433,-0.846664}, + {0.112519,-0.115914}, + {0.351286,0.311147}, + {0.445398,1.030217}, + {-1.336584,0.196926}, + {1.720238,-0.567869}, + {-0.036464,0.802003}, + {-0.783873,-0.818943}, + {1.240642,0.976164}, + {0.760370,0.622208}, + {0.716383,0.043453}, + {0.007335,0.445271}, + {-1.912350,0.369577}, + {0.471466,-0.281855}, + {-1.259278,0.458071}, + {-0.505514,0.551813}, + {0.808326,0.336688}, + {0.134236,0.795999}, + {-1.110478,0.657803}, + {0.788157,-1.379746}, + {-0.602157,-0.601484}, + {-0.601597,-0.629413}, + {-0.562336,-0.375857}, + {-0.115154,-0.348384}, + {-1.337893,-0.034902}, + {-0.421096,-0.451334}, + {0.828483,1.195515}, + {-1.170578,-0.527504}, + {-0.310432,0.760422}, + {-1.197816,0.709533}, + {-0.127652,-0.091019}, + {0.069065,-0.305886}, + {-0.078245,-0.633251}, + {0.088257,0.108119}, + {-0.449101,0.132235}, + {-0.124084,1.428966}, + {-0.281890,0.234157}, + {-0.525617,0.582656}, + {-0.816034,0.676694}, + {0.126295,-0.336684}, + {0.148247,0.687522}, + {-0.650085,0.552353}, + {1.047440,-0.871696}, + {-0.652720,0.124596}, + {0.143902,-0.299925}, + {-0.045092,-0.377154}, + {0.337776,-0.360983}, + {-1.034746,-0.453121}, + {0.446298,-0.614523}, + {-0.576398,-0.186150}, + {-0.660111,0.507337}, + {-0.212991,-0.067267}, + {-0.472959,0.233856}, + {0.757097,0.921087}, + {-0.371281,-0.873578}, + {-0.462358,-0.546336}, + {1.046260,0.861505}, + {0.188323,-0.927420}, + {-0.394811,-0.928531}, + {-0.745356,1.802213}, + {-0.144337,1.288925}, + {0.042964,0.393180}, + {-1.051774,-0.538140}, + {-0.859913,-0.181454}, + {-0.768838,-0.081829}, + {-0.410304,-0.505518}, + {0.513469,-0.829740}, + {0.143379,-0.353562}, + {0.259461,-0.349013}, + {-0.693666,0.506081}, + {-0.142532,-1.125624}, + {0.027827,0.093478}, + {0.755859,-1.261207}, + {-0.805314,0.460203}, + {0.565516,0.049003}, + {-0.290886,-0.435227}, + {0.177884,1.134761}, + {-0.790097,-1.155042}, + {0.609440,-0.427450}, + {-1.456648,0.430752}, + {0.731694,0.148750}, + {-1.096537,-0.659722}, + {-0.045365,-0.812621}, + {-0.052870,-0.012892}, + {-0.186133,-1.655777}, + {-1.233724,0.005300}, + {0.227544,-0.206169}, + {0.444051,-1.393497}, + {0.145246,-0.470748}, + {0.321554,-0.540005}, + {0.574299,0.947717}, + {-0.851562,0.821642}, + {-0.224767,0.375636}, + {-1.247393,-1.880826}, + {0.869151,0.644628}, + {1.350218,-0.621884}, + {0.386796,-0.520246}, + {-0.978645,0.272595}, + {0.065436,-0.430137}, + {-0.790944,0.646567}, + {-0.368160,0.501998}, + {-0.401020,0.148140}, + {-0.046369,-0.202567}, + {0.058994,-0.870889}, + {-0.652756,1.932327}, + {0.172676,-1.271166}, + {0.413797,0.955612}, + {0.814433,0.006399}, + {0.328790,1.584645}, + {0.709699,0.490172}, + {-0.774854,-0.005901}, + {0.730751,-2.130532}, + {0.585216,-0.058045}, + {0.745170,-0.426331}, + {-0.547863,0.536897}, + {0.291419,0.183834}, + {0.370049,-0.225214}, + {0.720345,0.700864}, + {-0.658056,0.512990}, + {-0.197299,-0.572787}, + {-0.980329,-0.373197}, + {-0.102615,-0.600997}, + {0.551575,0.035526}, + {0.227213,-1.755647}, + {-0.720773,1.473189}, + {1.078551,0.494038}, + {-0.590708,-0.726487}, + {0.174511,0.593049}, + {-1.113569,-0.861532}, + {-0.863915,-0.407862}, + {-1.489835,0.680252}, + {0.605744,-0.755458}, + {0.019818,-1.444399}, + {1.537532,0.420513}, + {0.454858,0.278244}, + {-1.167997,0.522964}, + {0.636516,0.864054}, + {0.904913,0.954676}, + {-0.172054,1.515377}, + {-0.323955,-0.109815}, + {-0.408556,-0.110050}, + {-0.074129,0.608238}, + {0.907023,0.611414}, + {0.527238,-0.111692}, + {-1.210925,1.026236}, + {0.414338,-1.508815}, + {0.865041,0.205104}, + {-0.519846,0.335515}, + {0.025669,0.894116}, + {-0.069780,0.825868}, + {-0.977589,0.602818}, + {-1.474683,-1.465573}, + {-0.906716,-1.172873}, + {0.633533,-0.164525}, + {1.348636,-0.597077}, + {-0.676391,-0.863396}, + {0.836835,0.681102}, + {0.597157,-0.230220}, + {0.394546,0.387985}, + {-0.930641,0.087960}, + {-0.591838,-0.300588}, + {-0.886742,0.109750}, + {-1.099630,-1.113304}, + {-0.728393,-0.212042}, + {0.763934,-0.639567}, + {0.298122,-0.353191}, + {-0.190079,-0.338979}, + {0.348171,0.548532}, + {-0.524688,-0.411727}, + {0.233072,-0.517023}, + {0.062224,-0.491644}, + {-1.043832,0.098989}, + {-0.476795,-1.490535}, + {0.329321,0.234013}, + {0.221229,0.925059}, + {-0.390816,0.510160}, + {0.875961,0.263989}, + {0.269341,0.588287}, + {-0.104352,1.572109}, + {-0.466807,-0.291013}, + {0.052197,0.507006}, + {-1.203065,0.707042}, + {-1.156324,0.471411}, + {0.754021,-0.321351}, + {-0.351852,0.063256}, + {1.050723,-0.239489}, + {0.095218,-0.048337}, + {-1.306553,-0.315263}, + {0.445850,-0.782225}, + {2.486118,-0.184109}, + {-0.450901,0.744972}, + {0.815191,-0.335411}, + {-0.842677,-0.284237}, + {0.315266,-0.974383}, + {0.075656,-0.930034}, + {-0.265583,0.430262}, + {-0.066361,-0.215722}, + {0.460555,-0.264005}, + {0.338359,-1.339680}, + {-0.711655,0.100374}, + {-0.092740,1.377253}, + {-0.072264,-0.288660}, + {-0.052467,0.772709}, + {0.293775,0.090349}, + {0.824527,1.267417}, + {-0.112363,0.132903}, + {-0.363463,0.969263}, + {-1.642345,0.744705}, + {-0.477562,1.379558}, + {-0.589734,-0.589188}, + {-0.466736,-0.970264}, + {0.010874,0.547445}, + {1.722207,0.884766}, + {0.098718,-0.666330}, + {-0.296542,-1.569936}, + {1.125261,-0.712730}, + {-0.975173,0.932793}, + {0.634325,1.085860}, + {0.217421,0.671107}, + {0.305540,-1.001059}, + {0.798078,0.480317}, + {1.662060,-0.279516}, + {0.613269,-0.820772}, + {-0.367006,0.253467}, + {-0.506871,0.590810}, + {2.014429,-0.631055}, + {-1.851417,-0.047491}, + {0.237869,-0.702116}, + {-0.850494,0.647305}, + {0.129418,-0.098577}, + {-0.842460,0.401123}, + {0.289509,-0.445374}, + {-0.192546,0.423623}, + {0.132945,-0.395475}, + {1.171623,-0.137565}, + {-0.672710,0.703577}, + {0.289266,0.112169}, + {0.388150,-1.503414}, + {-0.632542,-1.193749}, + {-0.836479,-1.570629}, + {-0.117854,0.799663}, + {-1.031422,0.769983}, + {1.141551,1.223726}, + {-0.136202,0.032976}, + {0.539139,-0.362692}, + {0.386391,-0.404400}, + {-0.807908,0.672289}, + {-0.273757,0.409065}, + {0.072317,0.218765}, + {0.315393,-0.161862}, + {0.109827,0.280521}, + {1.124393,-0.880358}, + {1.062493,-0.861810}, + {-0.694576,0.955105}, + {-0.704939,0.712260}, + {0.620207,0.404908}, + {-0.149497,0.008919}, + {0.213315,0.753410}, + {0.882143,0.344575}, + {-0.580178,-0.062246}, + {0.588335,0.732016}, + {-0.923274,0.056641}, + {-0.172440,-0.095349}, + {-1.135217,0.278840}, + {0.775523,-0.339523}, + {-0.314081,-0.344806}, + {-0.764043,-0.198468}, + {-0.089438,-0.785644}, + {-1.040912,1.061657}, + {0.895079,-0.034029}, + {-0.526144,-1.937661}, + {-0.207926,-1.120596}, + {-0.091010,-0.505344}, + {0.284329,0.647329}, + {1.276309,-0.095555}, + {-1.225333,0.215700}, + {0.090999,0.073973}, + {0.870768,-0.363724}, + {0.248731,0.020068}, + {-0.548422,-0.119689}, + {0.920298,-0.082783}, + {-0.467797,1.355912}, + {1.329022,-0.309356}, + {-1.728073,-0.120729}, + {0.624453,0.563478}, + {-0.698755,0.502237}, + {0.401369,-1.301986}, + {-0.924123,-0.248924}, + {0.419063,-0.429884}, + {-0.417802,0.312480}, + {0.303873,0.281815}, + {-0.216253,-0.382458}, + {0.871156,0.437237}, + {0.076165,-0.075358}, + {0.978428,0.177972}, + {-0.387862,-0.666285}, + {-0.385355,-1.084756}, + {-0.039386,0.090518}, + {-0.110409,-0.131921}, + {-0.266880,-0.746409}, + {-0.628974,0.648673}, + {-0.473564,-0.126878}, + {0.061978,-0.647717}, + {-0.282066,-0.853113}, + {-0.118735,1.327370}, + {1.149891,1.209448}, + {0.352147,-0.388989}, + {1.769291,-0.319750}, + {0.764107,-0.667852}, + {-0.587102,-0.210417}, + {1.015087,0.052787}, + {-0.035987,1.195230}, + {0.892858,0.405185}, + {-0.756342,-0.517984}, + {0.623213,-0.595297}, + {0.604408,1.193989}, + {0.953219,0.110624}, + {0.152238,0.507352}, + {-0.094461,-0.308558}, + {0.384838,-0.277351}, + {0.025861,-0.759865}, + {-0.657839,0.460731}, + {-0.194513,0.533848}, + {1.023904,-0.500503}, + {-0.359781,0.642104}, + {-0.404128,-0.973247}, + {0.908211,-0.748690}, + {1.828527,0.178212}, + {0.993783,0.377209}, + {0.497713,0.653823}, + {1.349187,-0.664650}, + {0.867764,-0.677804}, + {0.784912,-0.648229}, + {0.855189,0.283978}, + {-0.177741,0.486565}, + {0.171991,-1.590330}, + {-0.341884,-0.551188}, + {0.552575,-1.140915}, + {0.234083,-0.731475}, + {-0.841477,0.261885}, + {-0.463546,1.015421}, + {-0.655670,-0.933363}, + {0.091412,-0.144388}, + {0.777763,-1.143306}, + {0.393413,0.247097}, + {-0.859657,1.263778}, + {-0.091360,-0.695528}, + {0.453558,0.447697}, + {-0.285448,-0.091432}, + {0.575826,0.771546}, + {-0.185321,-0.400092}, + {-0.927254,-0.065710}, + {-0.404850,0.199127}, + {1.175847,-0.727493}, + {-0.646317,-0.100079}, + {-0.146116,0.997661}, + {0.940721,0.331262}, + {-0.176631,-0.432014}, + {-0.158682,0.007962}, + {0.403128,0.862988}, + {-1.286299,-0.553118}, + {-0.625140,-0.416925}, + {0.164739,0.127397}, + {-1.296657,0.431593}, + {0.110012,0.621031}, + {0.131967,0.747297}, + {-0.417073,-0.528516}, + {-0.058879,0.064701}, + {0.878022,0.417763}, + {-0.593777,-0.749282}, + {-1.488954,-0.088751}, + {0.327350,0.729740}, + {0.288635,0.711133}, + {-0.516210,0.772244}, + {0.646623,-0.360133}, + {0.517444,-1.050468}, + {0.275757,-0.042346}, + {1.091949,-0.723761}, + {-0.581401,0.804300}, + {-0.281716,0.298812}, + {0.389729,-1.352334}, + {0.968056,-0.125904}, + {1.044800,0.400574}, + {0.876008,0.171549}, + {-0.861513,-0.111525}, + {1.321833,0.560932}, + {-0.756588,0.179387}, + {-1.030283,-0.202424}, + {-1.125655,0.034160}, + {-1.018706,0.236765}, + {-1.619937,1.162817}, + {0.587348,0.547688}, + {-1.197305,-0.512869}, + {-0.043864,-1.074949}, + {-0.830876,0.394422}, + {0.164382,-0.058257}, + {-1.269143,0.168948}, + {0.160676,-0.664515}, + {-0.505345,-1.100780}, + {-0.245201,0.068290}, + {-1.306518,-0.678766}, + {-0.425379,0.392774}, + {-0.258367,0.204147}, + {0.045519,-0.256474}, + {-2.017382,0.265548}, + {-0.452550,0.579091}, + {-0.340566,-0.079455}, + {-0.463289,-0.473197}, + {-0.304125,-1.146060}, + {-1.079937,0.770227}, + {0.697733,-1.635291}, + {0.794379,-0.590399}, + {2.066159,0.237608}, + {0.203241,0.228367}, + {0.209470,-0.821393}, + {1.064899,-0.383132}, + {0.799363,-0.151461}, + {-0.607846,0.619438}, + {-0.440935,-0.199774}, + {1.095711,0.112102}, + {-0.687980,-0.399792}, + {-0.489549,0.143813}, + {0.567918,0.022705}, + {0.838391,-1.106572}, + {1.085598,2.516036}, + {-0.699425,-0.521144}, + {-1.195329,-0.973063}, + {-0.455357,0.190010}, + {-0.365438,-0.562397}, + {-0.303810,-1.368273}, + {0.466171,-0.926118}, + {-0.428213,0.660771}, + {0.847118,1.179101}, + {0.431831,0.765670}, + {0.216519,0.066846}, + {0.050229,-1.132895}, + {-0.591341,-0.135568}, + {-1.016589,0.499351}, + {0.619695,1.239771}, + {-0.860305,0.327144}, + {0.794001,-0.673587}, + {-0.198357,0.818361}, + {1.168914,-0.014642}, + {0.448577,1.053050}, + {0.292636,-0.202807}, + {0.769249,0.583713}, + {0.416304,-0.914883}, + {0.462558,-0.935260}, + {0.088227,-0.958327}, + {0.594615,1.182851}, + {-0.204744,0.504845}, + {-0.244805,-0.381424}, + {-0.737471,-1.320935}, + {-0.528289,-0.573258}, + {-0.105260,-0.673370}, + {-0.635278,-0.500940}, + {0.839401,-0.789100}, + {-0.900784,0.142913}, + {-0.611013,1.205516}, + {-0.341594,0.707921}, + {-0.549906,-0.191784}, + {-0.351525,0.601229}, + {0.696679,-0.084436}, + {0.249797,-0.466641}, + {-0.112995,0.982649}, + {-0.103804,0.028549}, + {1.300759,0.562159}, + {0.188050,0.252173}, + {0.106742,0.672221}, + {1.403964,0.196841}, + {0.178249,1.119562}, + {0.478215,0.501237}, + {-0.603436,-0.402843}, + {0.938323,-0.147083}, + {-1.344410,-0.465496}, + {-0.274058,0.037370}, + {0.302808,0.701736}, + {0.522547,-1.063970}, + {0.214000,-1.234162}, + {0.115400,-0.182797}, + {0.613710,-1.188964}, + {-0.059478,-0.884451}, + {-0.020643,0.621642}, + {-0.485842,-0.203300}, + {-0.574101,1.824857}, + {-1.110800,0.465908}, + {-0.009223,-0.878354}, + {-0.970119,-0.234322}, + {2.232488,-0.241458}, + {-0.817618,-0.215082}, + {0.985711,-1.312330}, + {-0.043408,0.166327}, + {0.685598,-1.189246}, + {-0.863629,1.000956}, + {0.363370,0.558049}, + {-0.275515,-1.251793}, + {-0.783958,-0.159861}, + {-0.265416,1.423040}, + {-0.303787,0.078342}, + {-0.942708,0.058797}, + {-0.126596,-0.043927}, + {0.940185,-0.514732}, + {-1.717989,-0.302336}, + {0.392299,-0.472739}, + {-0.605450,-0.153565}, + {0.172246,1.273566}, + {0.973775,-0.571675}, + {0.412459,0.246981}, + {0.750398,0.637567}, + {-0.131172,-0.812034}, + {-0.412718,-0.312419}, + {-1.084367,0.469211}, + {-0.750192,0.239366}, + {-0.807903,0.025000}, + {0.169366,1.110027}, + {0.341377,-0.550559}, + {1.503539,-0.645394}, + {-0.546320,-0.503335}, + {0.349192,0.240205}, + {1.054660,-1.886768}, + {0.052298,0.500975}, + {-0.010100,-0.988941}, + {0.166413,-0.383006}, + {0.843436,0.918938}, + {-0.595515,0.371500}, + {-0.309942,1.492045}, + {0.605896,-0.550874}, + {0.379367,-0.626731}, + {-0.236509,0.601141}, + {-0.378510,-0.419328}, + {0.478068,0.010601}, + {-0.675805,-0.583364}, + {-0.210744,0.418466}, + {-0.189950,0.501288}, + {-0.463660,0.303614}, + {-0.537675,-0.958237}, + {-1.015898,-0.270030}, + {0.198231,0.122265}, + {1.116642,-0.840185}, + {-1.101533,1.812925}, + {-0.561163,-0.261127}, + {1.012467,0.890354}, + {-0.529417,0.082287}, + {0.009180,0.806196}, + {0.789673,0.029863}, + {1.003828,0.373652}, + {0.814418,0.309315}, + {-0.606146,-0.168860}, + {0.056299,0.365320}, + {0.093105,-0.068656}, + {0.755631,-0.057552}, + {0.081025,-0.900634}, + {-0.016102,0.247733}, + {0.884746,0.342390}, + {-0.875936,0.681588}, + {0.098843,-0.487980}, + {-0.376775,-0.427447}, + {0.381212,0.542140}, + {0.530379,-0.369676}, + {0.709660,0.380700}, + {-1.112918,0.335488}, + {-0.171830,0.036069}, + {-1.019468,0.441974}, + {0.552776,1.116890}, + {-0.256032,1.029227}, + {0.709352,0.980046}, + {-0.721419,-0.145083}, + {-1.190310,-1.516095}, + {-1.099134,-0.241831}, + {-1.177761,0.420445}, + {0.618117,1.070602}, + {1.308669,-0.017416}, + {-0.186330,-0.148709}, + {-1.075173,1.134706}, + {-0.474658,-0.073558}, + {-0.417598,-0.815183}, + {0.452627,-0.086364}, + {-0.099908,0.206006}, + {1.159685,-0.593182}, + {-0.620191,0.221127}, + {1.099579,0.166276}, + {-0.224604,-0.878283}, + {0.361899,0.449122}, + {0.782647,-1.303460}, + {1.024841,0.701208}, + {-0.575269,0.369847}, + {0.185542,0.396025}, + {-0.475507,0.042582}, + {-0.644299,1.072212}, + {0.024074,0.094974}, + {1.065494,1.061942}, + {-0.103903,0.047036}, + {-1.507948,1.355023}, + {0.488277,-0.387922}, + {-0.670998,0.516623}, + {1.043637,1.027954}, + {-0.814702,-0.705341}, + {1.113500,-0.824085}, + {-0.446971,0.387174}, + {0.085304,0.134263}, + {-0.032566,0.373506}, + {-0.715275,0.920719}, + {0.856968,-0.363303}, + {-0.531281,-0.778124}, + {-0.273956,0.840519}, + {-1.738353,0.489447}, + {-0.868719,0.482146}, + {-0.324818,0.031145}, + {0.538558,0.494144}, + {-0.353669,0.337685}, + {0.231094,0.720309}, + {-0.836142,0.106659}, + {0.595464,0.423801}, + {0.883973,-0.601154}, + {0.723997,0.934565}, + {-0.355962,0.152775}, + {-0.127005,1.104947}, + {0.969229,-0.149105}, + {-1.201512,0.674038}, + {0.146767,-0.498363}, + {-0.035950,0.557077}, + {-0.459134,-0.914077}, + {0.763345,0.524424}, + {0.011704,-2.017428}, + {-0.849172,1.506112}, + {-0.250493,-1.045756}, + {-0.121860,-0.690564}, + {-0.155904,0.608851}, + {-1.229102,-0.406017}, + {1.226610,1.085280}, + {-0.805206,0.629291}, + {-0.069214,0.730650}, + {1.064779,0.264552}, + {-0.006544,-0.494682}, + {0.457170,-0.951151}, + {-0.410514,0.789954}, + {0.565477,-0.255665}, + {0.734690,-0.988831}, + {-1.062641,0.225151}, + {-0.385230,0.821491}, + {0.371702,-0.110034}, + {-0.057454,0.128720}, + {-0.081977,1.037915}, + {0.311523,1.253425}, + {-0.502448,0.093294}, + {0.615595,-2.344534}, + {0.653408,-1.185627}, + {0.867888,-0.434547}, + {-0.240755,0.331160}, + {-1.197783,0.687314}, + {0.521806,0.208657}, + {-0.554643,0.428899}, + {0.057554,-0.366342}, + {-0.357134,0.156007}, + {0.334822,0.737721}, + {1.436037,-0.287579}, + {-0.612891,0.136375}, + {0.789853,-0.141415}, + {0.525511,0.179881}, + {0.123147,0.811655}, + {0.113730,0.769911}, + {0.182976,-0.119810}, + {0.628026,-0.801001}, + {-0.469332,-0.992844}, + {0.420309,0.553148}, + {-1.170904,-0.099700}, + {-0.146831,-0.313078}, + {0.388133,0.790864}, + {0.282657,0.691093}, + {1.559222,0.832869}, + {0.381183,0.380482}, + {0.489654,-0.943613}, + {0.054295,-0.253576}, + {0.455407,0.344980}, + {0.570221,-0.475851}, + {-0.223240,0.744998}, + {-0.530980,0.687077}, + {-0.449808,-0.821267}, + {-0.330739,0.448330}, + {0.804212,-0.577691}, + {0.158454,0.805972}, + {-0.108758,-0.954099}, + {-0.439021,0.197579}, + {-0.539345,0.439251}, + {0.651230,0.754042}, + {-0.355923,-1.137383}, + {-0.177306,0.749586}, + {0.441287,-0.286658}, + {-0.902108,0.227320}, + {-1.284466,1.638574}, + {-0.036202,0.181132}, + {-1.497482,0.003437}, + {-0.061348,-0.006829}, + {-0.005529,-0.741155}, + {0.215731,0.852106}, + {1.581736,0.051235}, + {0.515924,0.070864}, + {-0.482895,1.204395}, + {-0.025352,-0.128358}, + {1.549274,-0.306254}, + {0.574087,0.073902}, + {-0.521191,0.521923}, + {-0.316768,-1.246159}, + {0.374086,-0.736770}, + {0.657694,0.176918}, + {-0.873769,0.767673}, + {1.284637,0.593571}, + {0.129845,-0.097307}, + {-0.554935,0.847270}, + {0.103939,0.668202}, + {0.803857,1.265275}, + {0.337945,-0.680761}, + {-0.332438,0.818654}, + {0.815651,-0.086611}, + {0.898750,0.267473}, + {0.332558,0.854873}, + {0.033251,-0.369557}, + {-0.994826,0.728912}, + {0.320312,0.989656}, + {-0.968790,-0.524464}, + {0.050254,-1.200479}, + {1.284280,0.052694}, + {-0.551391,1.260977}, + {-0.243554,-0.369087}, + {0.248510,-1.259281}, + {-0.100092,0.030010}, + {0.639801,-0.080694}, + {-0.453774,0.601667}, + {0.157292,0.534592}, + {0.350959,0.051935}, + {-0.757799,-0.971434}, + {0.493319,-0.446165}, + {0.614688,-0.582649}, + {0.074603,-0.299675}, + {0.882269,-0.187581}, + {0.372823,0.368325}, + {0.114711,-0.315413}, + {-0.451795,0.002528}, + {0.124370,-2.011045}, + {0.144513,-0.674410}, + {-0.887191,0.318651}, + {0.276441,-0.028075}, + {-0.656448,0.802020}, + {-0.278558,0.378958}, + {-1.030818,-0.732686}, + {0.993217,-0.426098}, + {0.539963,-0.880491}, + {0.259553,0.120942}, + {0.980649,0.629225}, + {0.549393,-0.007366}, + {1.775229,-0.150526}, + {-0.505972,0.223503}, + {-0.705733,-0.590672}, + {0.617949,-0.169851}, + {-0.057909,0.846471}, + {0.008234,-0.314480}, + {-0.096775,1.283379}, + {-0.962696,-0.439218}, + {-0.259974,0.118526}, + {0.250173,-0.150096}, + {0.910862,-0.680728}, + {-0.415913,-0.191966}, + {-0.396152,-0.497643}, + {-0.771449,-0.213775}, + {-0.301254,-0.272266}, + {0.926896,-0.570671}, + {-0.591745,0.146475}, + {1.086466,-0.131236}, + {-0.844351,-1.562438}, + {-0.990476,0.070498}, + {-0.077338,-0.863886}, + {0.136252,-0.505947}, + {-0.382066,-1.286926}, + {0.669333,-0.074047}, + {1.276768,-0.175578}, + {0.350866,0.997669}, + {0.615194,-1.606065}, + {-1.052562,-0.334451}, + {0.299494,-1.071920}, + {0.549473,0.191316}, + {-1.676270,-0.096974}, + {0.265582,0.159041}, + {0.244795,1.792395}, + {1.008245,-0.322289}, + {-0.702334,0.432326}, + {-1.037780,0.165330}, + {1.538379,0.489235}, + {0.703589,-0.819391}, + {-0.628913,-0.514712}, + {0.569468,0.511478}, + {-1.707972,0.273521}, + {0.317935,0.288596}, + {-0.284997,-2.009373}, + {-0.740532,0.559777}, + {0.537857,0.332833}, + {0.429478,-0.292228}, + {0.285689,1.118983}, + {-0.631836,-0.066223}, + {0.592196,-1.045784}, + {0.226062,0.549405}, + {0.309204,0.291148}, + {0.328950,-0.651208}, + {-0.175570,0.128113}, + {-1.071762,-0.222013}, + {-0.246732,0.503570}, + {0.562434,-0.087614}, + {-1.083738,0.163863}, + {0.138512,-0.058985}, + {-0.738895,0.011677}, + {1.499974,0.103210}, + {0.355002,-0.338290}, + {-0.256904,-0.343176}, + {-0.015659,-0.417844}, + {0.208660,0.606469}, + {-0.734477,0.817951}, + {-0.867542,0.663637}, + {-1.304717,-0.388440}, + {0.704185,0.760198}, + {-1.316292,-0.295106}, + {0.218730,0.983686}, + {0.818713,-1.046025}, + {-0.583046,0.551182}, + {1.265510,-1.016420}, + {-0.761852,0.033767}, + {-0.745320,-0.492837}, + {0.934553,0.066774}, + {-0.819204,0.242431}, + {0.611336,-0.031476}, + {0.096080,-0.848272}, + {-0.106150,-0.492336}, + {-0.383184,-0.269763}, + {0.132107,0.766301}, + {0.212758,-0.088413}, + {-0.422718,1.161167}, + {0.736935,-0.974879}, + {-0.910351,0.495623}, + {0.997377,0.717006}, + {1.989167,-0.180638}, + {-0.518269,1.156765}, + {-1.168705,0.352030}, + {0.875218,-0.727473}, + {0.110928,0.594784}, + {-0.893894,0.190021}, + {-0.063990,-0.588675}, + {0.271381,-0.362008}, + {-1.002002,0.472853}, + {-0.262505,-1.738222}, + {-0.726954,-0.594786}, + {1.196291,1.072635}, + {-0.121522,-0.341266}, + {-0.041270,0.655770}, + {0.198658,0.212242}, + {0.259623,-0.910297}, + {-0.906628,-0.709528}, + {0.763820,-0.135300}, + {1.075767,0.169487}, + {-0.535647,-0.428838}, + {0.184472,0.911065}, + {-1.106756,0.326421}, + {-0.568826,-0.976099}, + {-1.131721,-0.119743}, + {-1.014501,0.157798}, + {-0.188462,-0.981151}, + {0.998759,-0.198788}, + {-0.831733,-0.686713}, + {0.940988,-0.639840}, + {0.432728,-0.625815}, + {-0.373126,-0.262423}, + {0.717374,0.275913}, + {0.267194,-0.410032}, + {-0.244544,-0.599248}, + {-0.372515,-0.727035}, + {1.133795,0.095964}, + {0.188813,0.214390}, + {-0.491510,0.110745}, + {-0.112035,1.669554}, + {-0.692933,0.354110}, + {-0.777650,-0.649853}, + {0.206946,-0.549717}, + {0.060381,-0.218033}, + {-0.923367,1.095193}, + {-0.086790,0.112154}, + {0.173823,-0.663045}, + {0.246195,0.466305}, + {0.046693,-0.524645}, + {-1.283808,-0.478148}, + {0.964145,-0.018176}, + {0.171523,-1.351762}, + {-0.679412,-0.388570}, + {0.550322,-0.537612}, + {0.731997,-1.087005}, + {-0.454207,-0.599756}, + {-0.187639,0.654378}, + {-0.844323,-0.003906}, + {-0.145352,-0.604780}, + {1.621990,-1.918143}, + {-0.151221,0.586071}, + {-2.341130,-1.090539}, + {0.085287,0.722866}, + {-0.323067,0.087640}, + {1.363234,-0.722450}, + {-1.625929,-0.003371}, + {-1.349280,0.497928}, + {-0.763448,0.084800}, + {0.968353,0.485273}, + {-0.654131,0.368048}, + {0.906649,0.966963}, + {0.502693,-0.801039}, + {-0.106512,-0.017897}, + {-0.357878,0.507848}, + {0.596556,-0.386384}, + {-1.350622,-0.075382}, + {-1.132769,-0.094515}, + {0.784254,1.026684}, + {-1.195967,-0.498431}, + {-1.486993,1.041977}, + {-0.861464,1.155882}, + {0.454096,-0.743460}, + {0.135509,0.255852}, + {0.328982,0.287838}, + {-0.351451,-1.454514}, + {-1.163104,0.800600}, + {-0.159101,-0.818017}, + {0.570768,-0.511169}, + {0.261905,0.321343}, + {-0.961814,-0.663710}, + {1.707887,-0.051143}, + {-1.670659,-0.504308}, + {0.921242,0.016788}, + {0.340322,-0.915290}, + {0.166781,-0.511569}, + {-0.158216,-0.111283}, + {-0.283839,-0.287862}, + {0.628406,0.668089}, + {-0.332001,-1.189296}, + {0.017396,0.278010}, + {-0.009861,0.703837}, + {0.292750,0.126056}, + {-1.187099,-1.326938}, + {-0.183012,-0.223564}, + {-0.566881,0.719534}, + {-0.083212,-0.380213}, + {0.070757,-0.303190}, + {-0.121132,0.687038}, + {0.322541,-0.477786}, + {0.129674,-0.807120}, + {-0.418168,0.229298}, + {-0.546595,0.883441}, + {0.637606,0.900993}, + {-0.022450,-0.668027}, + {1.165285,-0.042859}, + {0.394648,1.776434}, + {-0.119592,-0.949967}, + {-0.380534,-0.700304}, + {-0.428653,0.876593}, + {-0.010833,0.445818}, + {-2.068289,0.926831}, + {-0.056759,-1.011635}, + {0.951500,0.730713}, + {-0.735857,-0.974632}, + {-0.441883,-0.113780}, + {0.403497,-0.698566}, + {-0.583007,-0.225655}, + {0.845352,1.129219}, + {1.029108,0.170238}, + {0.677910,-0.154584}, + {-0.866846,-0.610082}, + {0.620796,0.585499}, + {-0.175772,-0.410802}, + {0.738516,0.222083}, + {0.340440,-0.224279}, + {0.514320,-0.118299}, + {0.643830,0.931380}, + {0.823034,0.678161}, + {-0.025896,-0.374766}, + {-0.296529,0.078295}, + {-0.197529,1.188479}, + {-0.561245,1.938594}, + {-0.891056,-0.514375}, + {-0.583395,1.256778}, + {0.358371,0.149749}, + {0.713595,0.243942}, + {-0.424386,-0.267761}, + {0.801126,-0.010966}, + {-0.860760,0.599409}, + {-0.132413,0.845348}, + {-0.366124,1.094189}, + {0.098452,1.013495}, + {-0.594768,1.698599}, + {-0.214296,0.107876}, + {0.435504,-0.097577}, + {0.484505,0.098009}, + {0.395685,1.294490}, + {-0.288240,0.457515}, + {0.454454,0.065128}, + {0.611166,1.360646}, + {0.479140,1.245248}, + {1.573051,0.996718}, + {0.353760,-0.558113}, + {-0.300835,-0.238335}, + {-1.239956,-0.500976}, + {0.687230,-1.586164}, + {0.984939,0.909665}, + {0.095002,-0.407167}, + {-0.722139,0.986728}, + {0.656063,0.152251}, + {-1.206285,0.300682}, + {-0.445228,-1.320390}, + {0.868370,0.652878}, + {0.480469,-0.416396}, + {0.844269,-0.152263}, + {-0.854423,-2.170806}, + {0.451749,-0.005347}, + {0.076050,-0.938747}, + {0.414240,0.282529}, + {-0.314277,0.634230}, + {-0.352751,1.885884}, + {-0.331918,0.293480}, + {-0.611542,-0.591605}, + {-0.032914,-0.878914}, + {0.182686,0.511677}, + {0.282213,-0.654782}, + {0.180992,-0.735602}, + {0.434231,-0.167422}, + {-0.416232,0.478046}, + {-0.150081,-0.445287}, + {-0.321248,-0.468089}, + {0.620043,0.101055}, + {-0.728128,-0.213253}, + {-1.353567,-0.307609}, + {0.725953,-0.761898}, + {0.531030,-0.335851}, + {-0.913209,-0.639658}, + {-0.309075,0.414710}, + {-0.120038,1.012719}, + {0.402300,-0.164851}, + {-0.404268,-0.373224}, + {-0.619788,-0.509276}, + {-1.967288,-0.882356}, + {0.774993,0.863349}, + {0.170683,-0.823057}, + {-1.277681,-0.649139}, + {-0.150491,0.048295}, + {0.655999,-0.224661}, + {-0.328017,1.448516}, + {-0.168569,-0.611396}, + {-1.867020,-0.315154}, + {-0.172188,0.758110}, + {-0.688985,0.441307}, + {-0.344957,0.468144}, + {0.467038,-1.260435}, + {-0.002124,0.251853}, + {0.532495,-0.325352}, + {-0.436167,0.212400}, + {-0.226487,0.643460}, + {1.280616,-1.277356}, + {-0.015069,1.146608}, + {0.145602,0.831614}, + {-1.259462,0.772211}, + {-0.348614,0.234378}, + {0.236966,-0.423945}, + {0.171916,0.116998}, + {-0.380486,-0.447256}, + {-0.069114,-0.908586}, + {0.006162,0.030039}, + {-0.360495,0.129786}, + {-0.449148,0.342152}, + {-0.637659,0.279006}, + {-0.475733,0.146527}, + {0.774150,-0.450019}, + {0.384453,0.905140}, + {0.539473,0.294686}, + {0.963547,0.772764}, + {-0.577154,0.243345}, + {-0.990744,-0.184541}, + {0.361697,-0.706210}, + {-1.300668,-1.074359}, + {-0.350468,-0.053975}, + {-1.253670,1.152225}, + {0.645014,-1.229474}, + {-0.947043,-0.775451}, + {0.731531,0.761002}, + {-0.704281,-0.492722}, + {-2.122805,1.221006}, + {-0.886448,0.215374}, + {-0.063047,1.035249}, + {-0.130030,-1.597369}, + {-1.588580,-0.164693}, + {0.243675,0.189793}, + {1.045297,-1.178104}, + {0.389365,-0.556548}, + {0.475483,-1.559555}, + {-0.335436,0.300775}, + {-0.972000,-0.175491}, + {-0.133305,1.090422}, + {1.581001,0.260800}, + {-0.075648,1.263143}, + {1.516818,-0.971175}, + {0.169816,-0.200516}, + {-1.034590,0.153998}, + {-1.097372,0.044848}, + {-0.579664,-0.209895}, + {-0.053491,-0.037996}, + {1.254129,-1.166188}, + {-1.171324,-1.423655}, + {0.425314,-0.416050}, + {-0.615369,0.303270}, + {-0.110978,-0.122135}, + {0.204478,0.019416}, + {-0.802350,0.427858}, + {-1.296030,-0.172149}, + {-0.506648,0.402006}, + {-0.190420,0.046755}, + {0.243431,0.240358}, + {-0.507131,0.100200}, + {-0.454722,-0.946433}, + {0.725846,0.693385}, + {-0.194304,1.034517}, + {-0.639409,-1.491172}, + {-0.370464,-1.316069}, + {0.026346,1.232204}, + {-0.045298,-1.867401}, + {1.566024,-1.070478}, + {-0.525522,0.424209}, + {-0.390620,0.469335}, + {-0.748788,-0.640077}, + {-0.861505,1.668542}, + {0.942889,1.164779}, + {0.168485,-0.273375}, + {-1.415495,1.078624}, + {-0.973990,-0.245288}, + {-0.406225,0.204616}, + {-1.107687,0.132306}, + {-0.922430,0.271948}, + {-0.770345,0.248383}, + {-0.262733,-0.459021}, + {-1.543574,0.237828}, + {0.427934,1.167747}, + {0.838651,-0.645278}, + {0.003714,0.143614}, + {-0.365774,0.832688}, + {0.120564,0.594678}, + {0.995994,-0.565695}, + {-0.126425,0.174578}, + {0.947284,-0.717938}, + {1.291500,0.893980}, + {0.094097,0.331983}, + {-1.520554,1.050692}, + {0.429938,0.967334}, + {1.062959,1.335563}, + {-1.374009,0.443307}, + {-0.133662,0.424658}, + {-0.351652,0.475247}, + {-0.774004,1.216356}, + {-0.929932,-1.357864}, + {-1.093596,-0.304936}, + {0.421699,1.120944}, + {-0.347581,-1.700207}, + {1.759930,0.663514}, + {-0.091702,0.155358}, + {0.037256,0.562375}, + {-0.880499,0.164302}, + {-0.851232,0.905426}, + {-0.576845,0.536598}, + {-0.671018,0.273580}, + {0.527832,0.179628}, + {-0.088704,-0.382192}, + {-0.475693,-0.489545}, + {0.813913,-0.007911}, + {0.866953,1.168459}, + {0.342727,0.090489}, + {-0.102248,0.577989}, + {0.548149,0.018512}, + {-0.439522,-0.100163}, + {-0.187621,-0.065630}, + {-0.323931,-0.323939}, + {-0.346097,-0.211944}, + {0.183836,1.796108}, + {-0.314326,0.290377}, + {0.221068,-0.314679}, + {-0.807497,0.876966}, + {1.656237,-1.284909}, + {0.429140,0.610550}, + {-0.692503,-1.275180}, + {0.148498,-0.742160}, + {0.471384,-0.117794}, + {-0.337555,0.201199}, + {0.276186,0.288946}, + {0.242827,-0.076791}, + {1.846708,-0.086855}, + {-0.069953,0.656462}, + {0.115995,0.180799}, + {-0.284735,0.545367}, + {0.633690,-0.122335}, + {-0.909572,-1.230068}, + {0.080008,0.996363}, + {0.694586,-0.073983}, + {-0.882830,-1.068673}, + {0.189491,1.853682}, + {-1.424492,0.427126}, + {0.689818,1.018190}, + {0.475888,-0.235734}, + {0.272150,0.265798}, + {0.032696,0.054859}, + {-0.596591,-0.418400}, + {-0.330926,1.472477}, + {0.830467,0.554452}, + {0.141106,-0.441457}, + {0.871720,0.179847}, + {0.295633,-0.724683}, + {-0.435067,0.340489}, + {0.350137,1.011308}, + {-0.193628,0.339546}, + {0.698882,0.568895}, + {0.714853,-0.257131}, + {-0.262342,-0.470386}, + {-0.636850,-0.532836}, + {-0.147885,-0.767427}, + {0.750463,-0.213164}, + {-0.548790,0.050549}, + {-1.033421,-0.901535}, + {1.500041,-1.549836}, + {-0.432532,0.497503}, + {1.038156,0.874007}, + {0.463656,0.085929}, + {-0.089563,-0.381914}, + {-0.081148,1.037969}, + {0.548773,0.429676}, + {-0.491311,-0.637343}, + {-2.438709,-0.051842}, + {1.225795,-0.902596}, + {-0.445842,0.452895}, + {0.109824,0.055383}, + {-0.232239,0.462964}, + {0.237473,-0.816454}, + {-0.073903,0.108264}, + {-0.412081,0.634950}, + {0.526763,-0.598860}, + {0.633333,0.185228}, + {-0.230045,-0.696161}, + {-1.147548,-0.875395}, + {-0.126686,-0.787857}, + {-0.478097,-0.754376}, + {-1.022308,-0.408585}, + {-0.269342,-0.318111}, + {-0.634583,0.035421}, + {0.976029,0.481457}, + {0.490922,1.815942}, + {-0.325872,0.000525}, + {-0.552517,0.029422}, + {-0.493102,-0.053374}, + {-1.503537,-0.460894}, + {1.108601,-0.232398}, + {-0.695587,-1.170494}, + {-1.077017,-0.195150}, + {0.199615,0.188295}, + {0.984679,-0.566367}, + {1.297710,-0.537764}, + {-0.743610,1.332962}, + {0.611631,-1.230295}, + {0.535225,-0.203019}, + {-1.456897,0.798777}, + {-0.000363,-0.238487}, + {0.922337,0.150983}, + {0.215997,0.386013}, + {0.536468,0.167675}, + {0.223258,0.110369}, + {0.661156,0.422147}, + {-0.247800,-0.854418}, + {0.653356,0.093449}, + {0.412471,0.099614}, + {0.008260,-0.284842}, + {0.602377,0.832860}, + {-0.140841,0.066235}, + {0.373272,-0.127086}, + {0.881863,-0.583065}, + {-0.689000,0.206484}, + {1.005700,-0.372850}, + {-0.405465,-0.531119}, + {-0.647395,-0.657215}, + {0.062044,-1.065059}, + {-0.727797,0.903809}, + {-0.566777,-0.706294}, + {-0.632129,0.467014}, + {0.899076,0.126889}, + {0.385478,1.186605}, + {0.703954,-0.241354}, + {0.283012,0.853681}, + {-0.971216,-0.982086}, + {0.102070,-0.510027}, + {-0.474635,0.615183}, + {-1.176123,0.165700}, + {0.656442,-0.454286}, + {-0.470031,0.269875}, + {-0.570072,0.651427}, + {0.160737,0.443575}, + {-0.102227,-1.423956}, + {0.063696,0.787943}, + {0.435511,-1.119014}, + {-0.192739,-0.355147}, + {-0.353761,-0.790623}, + {-1.113609,0.176838}, + {0.250330,-0.046952}, + {0.615718,0.870463}, + {0.400504,0.431724}, + {1.162029,-0.731667}, + {0.568344,-1.078877}, + {0.085425,-0.443310}, + {0.207902,1.284480}, + {0.334856,0.462654}, + {-0.335173,1.595103}, + {-0.929111,-0.555447}, + {0.011277,0.456913}, + {-0.040002,0.130483}, + {0.973999,0.191361}, + {-0.303043,0.236946}, + {0.643394,-0.426236}, + {0.323195,-1.152534}, + {0.747335,-1.247994}, + {0.294046,-0.113540}, + {-0.253140,-0.990029}, + {1.250059,0.248076}, + {-0.521407,-0.594040}, + {0.808065,0.500768}, + {-0.017087,1.026674}, + {0.006366,-0.327461}, + {-0.349676,-1.622236}, + {-0.438362,0.532035}, + {-0.660037,-0.474255}, + {0.162498,0.533545}, + {1.633542,-0.132034}, + {-0.318215,0.175327}, + {1.192031,-0.516092}, + {0.778273,2.231759}, + {-0.011893,-0.581060}, + {-1.029364,-0.695297}, + {-0.173287,0.110115}, + {0.635321,0.005894}, + {-0.363303,0.267814}, + {0.757333,0.531349}, + {-0.454391,-0.388071}, + {0.250888,-1.427019}, + {0.180933,-1.456074}, + {0.679743,-0.683070}, + {-0.313584,-0.254765}, + {-0.030301,0.911933}, + {0.128000,0.628659}, + {-0.443625,-0.158499}, + {1.973744,-0.920044}, + {0.893488,-0.150660}, + {0.931910,0.910991}, + {0.042853,-0.026324}, + {-0.313634,-0.520955}, + {-0.671536,-0.215733}, + {0.556569,0.028198}, + {1.117075,0.254181}, + {-0.910888,0.046416}, + {-0.442587,-0.710371}, + {0.417335,0.155742}, + {-0.390962,1.821362}, + {0.041557,0.535249}, + {0.118388,-1.118331}, + {-1.008590,0.173649}, + {0.933494,-0.410314}, + {-1.828304,-0.246922}, + {0.948599,0.110863}, + {0.563454,-0.219323}, + {0.190125,-1.330677}, + {0.649893,0.077576}, + {0.752153,0.957161}, + {0.145088,0.727431}, + {-0.266557,-0.271793}, + {-0.021569,0.947269}, + {-0.193472,0.296913}, + {0.872543,0.792483}, + {0.567036,-1.219657}, + {-0.243654,0.348594}, + {1.193936,0.547621}, + {0.457518,0.539115}, + {0.476268,0.389504}, + {0.481768,-1.579726}, + {-0.125194,0.075938}, + {0.973247,-0.247002}, + {-0.843604,0.794316}, + {0.516310,0.192748}, + {-0.156413,-0.385387}, + {0.670795,0.673320}, + {0.715695,0.154379}, + {-1.280764,-0.035405}, + {0.336530,1.477179}, + {0.379120,1.083063}, + {-0.395949,-0.490567}, + {-0.541033,0.318875}, + {1.380447,1.144061}, + {-1.155728,-0.451759}, + {-0.119609,0.530847}, + {0.112070,-0.418582}, + {-0.073277,-0.967746}, + {-0.568655,0.359419}, + {-0.644562,1.301028}, + {-0.972656,-0.051257}, + {0.565598,0.063147}, + {0.226373,-1.303766}, + {-0.053945,0.745209}, + {-0.902083,-0.659843}, + {1.127191,1.430759}, + {-0.593266,-0.302685}, + {-0.258176,0.542044}, + {-0.416106,-0.838782}, + {-0.513205,-0.035953}, + {0.242585,-0.897682}, + {-0.942517,1.556742}, + {-0.845536,-0.691953}, + {1.195428,-0.996093}, + {2.193852,-0.065919}, + {0.924832,-0.176276}, + {2.032670,0.127016}, + {-0.102169,0.484681}, + {-0.035450,-1.188934}, + {0.429058,0.816624}, + {-0.470365,0.209900}, + {1.204684,0.408525}, + {-1.114052,0.414965}, + {-0.544975,1.493659}, + {1.142379,0.058358}, + {-1.591466,0.057853}, + {-0.396774,-0.466300}, + {0.278815,0.305556}, + {0.398613,-0.065548}, + {0.671438,0.213874}, + {-1.240631,0.575082}, + {0.694327,-1.107893}, + {-0.789778,-0.245106}, + {1.082148,0.219531}, + {0.152659,-0.295388}, + {1.491724,1.028192}, + {0.264360,-2.175691}, + {0.311309,0.322370}, + {-1.010542,-0.856291}, + {1.053519,-0.514131}, + {0.635882,0.553160}, + {0.210920,-0.544505}, + {-0.390892,0.472470}, + {-1.002592,0.835210}, + {-0.380769,1.290713}, + {-1.474071,-0.592612}, + {-1.467829,-0.275493}, + {-0.484917,-0.266843}, + {1.358912,-0.290679}, + {-0.760563,0.421103}, + {0.606959,0.863622}, + {-0.587442,0.924857}, + {-0.967521,-0.513563}, + {-0.083623,0.137413}, + {-0.366754,0.279873}, + {-0.664209,-0.109312}, + {-0.807642,-1.778743}, + {0.805218,0.540964}, + {0.176385,-0.486583}, + {0.173106,-0.536233}, + {0.000016,0.458630}, + {-0.370551,-0.189795}, + {0.285176,0.463441}, + {0.240888,-0.349790}, + {0.108800,-1.538375}, + {0.043605,-2.269263}, + {-0.272421,-0.006057}, + {0.246002,0.570891}, + {0.096239,1.069368}, + {0.120818,-0.952900}, + {-0.717973,0.329944}, + {0.667827,0.340873}, + {1.111960,-0.209056}, + {-0.189543,-0.273671}, + {0.227323,1.114953}, + {-0.126011,0.855705}, + {-0.076941,-0.519865}, + {0.663803,0.416814}, + {-1.438996,0.380905}, + {0.894368,-1.006748}, + {0.577437,-0.173548}, + {1.291229,1.496509}, + {-0.272941,-0.641907}, + {-0.724711,0.930725}, + {0.076404,-0.563913}, + {-1.000032,0.407691}, + {-0.566778,0.243748}, + {0.053640,-1.146169}, + {0.056950,-0.137659}, + {0.346461,0.676644}, + {1.134174,0.689609}, + {0.667048,0.155867}, + {-0.320707,-0.534195}, + {0.003425,0.485725}, + {-0.047785,-0.403591}, + {-0.508202,-0.573405}, + {0.249207,0.572682}, + {-0.257244,0.012521}, + {0.677142,-0.089546}, + {0.020521,1.116257}, + {0.752646,1.008726}, + {-0.505273,-0.214467}, + {-0.574463,0.394588}, + {-0.062090,0.170994}, + {-1.058119,0.845956}, + {0.671211,0.127179}, + {0.669598,0.396192}, + {-1.024867,-0.406429}, + {-0.919537,-1.145803}, + {0.835666,-1.895036}, + {-1.151913,0.473192}, + {0.555942,0.438244}, + {-0.109398,-0.855773}, + {-0.287955,-0.851273}, + {-0.240201,0.972916}, + {0.263522,1.213921}, + {0.260295,0.650558}, + {0.211509,0.528461}, + {0.224630,0.145409}, + {0.998198,-0.616575}, + {-0.241487,-0.203747}, + {0.176697,0.282204}, + {-1.171878,-0.213805}, + {-0.379528,0.635300}, + {-1.216967,0.179625}, + {-0.880248,-0.542043}, + {-0.062630,1.538727}, + {-0.418366,0.221704}, + {-0.204577,-0.588521}, + {0.468903,0.240225}, + {0.962490,0.035097}, + {-1.212926,-0.343519}, + {1.920868,0.684370}, + {1.041078,0.532627}, + {0.283895,-0.418711}, + {-1.397285,0.823509}, + {0.297481,-0.725686}, + {-0.495904,0.086877}, + {-0.863560,-0.351497}, + {0.531538,1.820775}, + {-1.045262,0.780107}, + {0.974250,-0.849368}, + {0.380715,-1.227674}, + {0.781374,-0.931283}, + {-0.112700,0.323563}, + {0.188277,0.095565}, + {-0.780066,-0.535792}, + {-0.559995,0.628452}, + {-0.217922,-0.893528}, + {0.759105,-0.418794}, + {0.649615,0.790668}, + {0.067538,-0.565015}, + {-0.002673,0.883082}, + {0.194140,0.176718}, + {-0.940190,1.442042}, + {0.619299,0.056097}, + {0.468398,0.509592}, + {-0.711271,0.043840}, + {-0.998983,-0.728807}, + {0.325337,0.466913}, + {0.077430,0.279358}, + {-0.673751,0.162800}, + {-0.231974,0.235378}, + {0.910689,-0.797473}, + {-1.622605,-0.841817}, + {0.432091,-1.018767}, + {-0.539186,-0.324225}, + {-0.242040,0.155646}, + {1.252015,0.593035}, + {0.188151,-0.739432}, + {0.534619,0.511769}, + {0.345659,0.476703}, + {-0.474379,0.580542}, + {-0.760683,-0.293209}, + {-0.917086,0.574522}, + {-0.423170,-0.878440}, + {0.040276,0.362034}, + {0.008902,-0.223798}, + {0.002946,-0.186733}, + {-0.727363,0.046058}, + {0.494353,-0.235286}, + {0.720284,0.433101}, + {1.295036,0.230127}, + {-0.419453,0.141825}, + {-0.485166,0.030742}, + {-0.579491,-0.809389}, + {0.297978,1.166165}, + {0.107656,0.089250}, + {-0.419769,0.749546}, + {0.101102,0.988807}, + {-0.007293,-0.739409}, + {-0.673602,0.874056}, + {0.488981,-0.019753}, + {-0.544172,1.634457}, + {-1.110920,-0.678521}, + {-1.387117,-0.567418}, + {-1.186982,-0.625841}, + {-0.131011,-0.534074}, + {0.455097,0.393563}, + {0.737161,-1.031238}, + {0.817935,-0.327775}, + {-0.385625,-0.012476}, + {-0.802613,0.038609}, + {-0.194642,-0.009339}, + {0.377562,-1.207033}, + {-0.660416,-0.454296}, + {-0.706623,0.381842}, + {-0.116607,0.548143}, + {0.288850,-1.075507}, + {0.276881,0.463193}, + {0.829630,0.529055}, + {0.299449,-0.575188}, + {-0.231345,0.351412}, + {1.003362,-1.460585}, + {0.451130,-1.124930}, + {0.322338,0.099733}, + {-0.254205,-0.042471}, + {0.211873,-0.537793}, + {0.550656,-1.202402}, + {0.302071,-0.529459}, + {0.484872,-0.424805}, + {-0.676112,1.242723}, + {0.196295,0.986675}, + {-0.006182,0.043626}, + {1.004458,-1.101313}, + {-0.508022,-0.307337}, + {-0.069604,-0.270549}, + {-0.936588,0.401472}, + {0.395051,-0.291762}, + {0.249364,-0.460210}, + {0.470524,-1.377845}, + {-0.031948,-0.316301}, + {0.398084,0.453870}, + {-0.084745,0.044352}, + {-0.653237,0.563452}, + {-0.052125,0.128803}, + {-0.427875,0.636993}, + {1.058874,0.376406}, + {-0.282247,-1.483023}, + {-0.125176,-0.032568}, + {1.794146,-1.232187}, + {-0.187983,-0.345985}, + {0.123095,-0.261032}, + {-0.415461,-1.090493}, + {-0.500346,-0.804478}, + {-0.513241,1.041086}, + {-1.784888,0.501072}, + {-0.235262,-0.395913}, + {-0.874197,0.136517}, + {0.802032,0.092163}, + {0.172660,-1.036619}, + {-0.740904,0.535180}, + {0.617676,0.005886}, + {-0.693840,-0.522827}, + {-0.803188,-0.240073}, + {-0.728556,-0.632434}, + {-0.149941,0.193266}, + {0.476898,-0.368260}, + {-0.031225,-0.120384}, + {-0.073972,0.464808}, + {0.160690,0.537959}, + {-0.450836,0.102038}, + {-0.216212,1.235659}, + {0.164200,0.192175}, + {-0.265676,0.384622}, + {0.213530,-0.157196}, + {-0.833550,-0.048440}, + {0.003577,0.903917}, + {-0.060957,0.001082}, + {-0.422697,-0.291104}, + {-0.436963,0.617239}, + {-0.560838,-0.652536}, + {-0.389877,-1.335308}, + {0.221871,-0.727966}, + {0.366452,-0.156117}, + {0.048762,0.817719}, + {1.364032,-1.028170}, + {-0.199738,-0.597666}, + {-0.048452,0.186324}, + {0.317672,1.640253}, + {1.030187,1.004812}, + {0.186677,0.155142}, + {-0.128456,-0.513439}, + {1.114846,-0.127393}, + {-0.365605,-0.311630}, + {-0.081923,0.648966}, + {0.060946,1.009555}, + {0.545678,0.076880}, + {-0.990208,-1.026702}, + {-0.840658,0.552260}, + {-1.316496,0.415412}, + {0.233111,-0.268865}, + {-1.081822,0.126111}, + {-0.893361,0.121170}, + {0.637557,-0.768942}, + {-0.981313,-0.937625}, + {0.366842,-0.491230}, + {-0.296605,-0.122075}, + {-0.694637,-0.691831}, + {-0.346922,1.010405}, + {0.265549,-0.072721}, + {0.553767,0.365723}, + {-0.886712,0.109635}, + {-0.548347,-0.303784}, + {-0.124639,0.349517}, + {-0.989650,0.330316}, + {0.762642,0.298664}, + {-0.179434,1.111018}, + {0.040421,0.525211}, + {-0.040726,-0.517622}, + {-0.436258,-0.419372}, + {-0.614376,-1.002123}, + {0.714119,-0.753994}, + {-0.514783,-0.369145}, + {0.074207,-1.001150}, + {0.344306,-0.309130}, + {0.149015,0.765323}, + {-0.296244,0.136197}, + {0.962661,1.268011}, + {0.023783,-1.186554}, + {0.123632,0.492674}, + {0.856406,0.442632}, + {0.232322,-0.486339}, + {0.191689,0.265950}, + {0.179934,-0.748107}, + {-1.701289,-0.051015}, + {-0.259518,1.342912}, + {-1.092688,0.126797}, + {0.646145,1.070342}, + {-0.102832,0.212320}, + {0.371741,1.059808}, + {0.329041,0.597689}, + {1.172615,0.542162}, + {-0.190803,0.345770}, + {0.694535,-0.143332}, + {1.565777,-0.517105}, + {-1.157503,-0.395621}, + {0.977210,0.015425}, + {-0.257104,0.098762}, + {-1.333003,0.368782}, + {0.061883,0.379086}, + {0.445949,-0.575541}, + {0.417953,0.289093}, + {0.289993,-0.020798}, + {-1.440368,0.472769}, + {1.148131,1.054014}, + {-0.556081,0.000779}, + {0.327782,0.192655}, + {-0.039300,-0.677965}, + {0.740380,-0.491050}, + {-0.072859,-1.870999}, + {-0.464327,-0.233392}, + {0.037757,-0.291647}, + {-0.124848,-0.199890}, + {0.429504,1.065232}, + {-0.841457,0.469673}, + {-0.636712,0.263585}, + {0.958690,-0.322036}, + {-0.209246,0.211522}, + {0.228839,-1.553564}, + {0.544155,0.188110}, + {0.738006,0.016440}, + {0.586748,0.001516}, + {0.360613,0.505248}, + {-0.257556,-0.316652}, + {-0.203123,0.066133}, + {0.707979,-0.756344}, + {-0.583274,-0.479593}, + {-0.810371,-0.061860}, + {0.273421,-0.865636}, + {-0.823282,0.610077}, + {0.094723,0.544387}, + {-0.008236,0.290898}, + {0.646489,0.296314}, + {-0.205770,-0.509249}, + {-0.052562,0.594927}, + {0.444777,0.441814}, + {0.100155,-0.501991}, + {-0.232563,-0.082230}, + {-0.081497,-0.962312}, + {0.041276,0.987394}, + {1.069935,-1.329858}, + {-0.076026,-0.887274}, + {0.086993,0.014743}, + {-0.179174,0.280143}, + {0.565349,-0.420367}, + {0.521928,-1.241770}, + {0.916126,1.435687}, + {0.637655,-0.516147}, + {-1.043603,0.819465}, + {-0.883656,-0.205474}, + {-0.644741,0.180014}, + {0.622506,-0.334192}, + {-0.241486,-0.600670}, + {-1.499588,0.650466}, + {-0.201187,-0.192333}, + {0.480999,-0.530799}, + {-1.738026,-0.145849}, + {0.998277,0.673428}, + {-0.144344,-0.233893}, + {-0.059109,-0.308362}, + {0.269830,1.562885}, + {-0.013641,-0.506529}, + {-0.278890,0.111794}, + {0.066036,0.843526}, + {-0.042208,1.107633}, + {-0.014597,0.485376}, + {0.183473,-1.283402}, + {-0.039860,-0.602430}, + {0.759903,0.034461}, + {-0.520732,0.826968}, + {0.093097,0.518453}, + {-0.047591,0.588031}, + {-0.808060,-0.728578}, + {-1.845584,0.914242}, + {0.266263,0.716752}, + {-1.253357,-1.118286}, + {0.705217,0.050021}, + {0.743902,-0.448512}, + {0.216893,0.073955}, + {0.385487,0.994616}, + {0.178511,0.204042}, + {-0.523429,-0.483543}, + {0.274570,0.042189}, + {-0.187481,0.727858}, + {-1.040426,-0.720766}, + {-0.359936,1.093006}, + {-0.665247,-0.950281}, + {-1.001936,0.289410}, + {1.381124,0.376211}, + {0.995092,-0.174666}, + {1.360198,-2.217745}, + {-0.554387,-1.676721}, + {-0.233175,-0.582371}, + {-0.388060,-0.034116}, + {1.342218,0.537788}, + {0.249304,1.296082}, + {-1.475857,-1.157512}, + {-0.197745,-0.568437}, + {0.824403,0.507678}, + {0.819198,-0.920770}, + {0.385495,-0.200380}, + {-0.503672,0.548119}, + {-1.111840,-1.633640}, + {-1.163537,-0.037715}, + {0.292674,-0.654745}, + {-0.962338,-0.407980}, + {-0.123743,0.028162}, + {-0.253323,0.014822}, + {0.479730,-0.823812}, + {-1.207221,0.300687}, + {0.996807,-1.482183}, + {-0.338063,0.564877}, + {0.920558,-0.084443}, + {1.293720,0.577197}, + {-0.967375,0.013719}, + {-0.481738,0.429749}, + {-0.943010,-0.544458}, + {0.060644,0.029556}, + {1.271225,0.072382}, + {1.345314,-0.606930}, + {-0.113264,0.048617}, + {-0.471231,0.591903}, + {0.450025,-0.255396}, + {1.082117,-0.457752}, + {-0.437023,0.619777}, + {0.199128,0.415873}, + {-0.738844,-1.578600}, + {-0.460504,-0.497232}, + {0.365693,0.851386}, + {1.155773,0.416016}, + {1.362762,-0.089273}, + {0.045085,-0.410653}, + {-0.352391,1.194551}, + {0.269619,-0.845695}, + {-0.937635,-0.041440}, + {-0.291614,0.210214}, + {-0.590964,0.334029}, + {0.041430,-0.582846}, + {-0.049634,-0.333992}, + {0.587620,0.926445}, + {0.019148,-0.708333}, + {-0.897879,1.311240}, + {-0.362442,1.068789}, + {0.417690,0.948938}, + {1.014004,-0.315357}, + {-0.426504,0.852104}, + {0.879939,1.426273}, + {1.147532,-0.513129}, + {-0.010543,-0.559115}, + {-0.935264,-0.274738}, + {0.047804,-0.517361}, + {-1.287619,-0.019239}, + {-0.829546,-0.280842}, + {-0.731296,0.823460}, + {-0.891822,0.427640}, + {0.589846,0.227553}, + {0.224689,0.571736}, + {-0.991209,-1.790480}, + {-0.009287,0.367028}, + {-0.551808,-1.155483}, + {-0.158887,-0.504851}, + {-1.006753,1.691039}, + {0.139125,1.656709}, + {0.311493,-1.358651}, + {-0.000659,-0.397979}, + {0.168687,-0.256026}, + {-1.042776,0.605335}, + {-0.319026,1.219072}, + {1.837911,0.271572}, + {0.239919,0.877257}, + {-0.037115,-0.596589}, + {-0.745878,1.264467}, + {0.010089,0.390431}, + {-0.581987,-0.175623}, + {-0.649250,0.127701}, + {-0.927358,-0.445949}, + {0.969864,-0.227424}, + {0.341977,0.252902}, + {0.135549,-0.495303}, + {-0.434902,-0.375805}, + {0.365613,0.090189}, + {-0.599520,-0.108817}, + {-0.486901,0.808199}, + {0.802453,0.113674}, + {-0.985303,0.348679}, + {0.272472,-0.315188}, + {0.653225,-0.102477}, + {-1.075974,0.333581}, + {0.197104,-0.038665}, + {0.362767,0.959841}, + {-0.336212,-0.991636}, + {0.341808,-0.200085}, + {0.350307,-1.046523}, + {0.941919,-0.790265}, + {-0.391904,-0.269616}, + {-0.583731,-0.576541}, + {-0.767887,0.168764}, + {0.804567,-0.160216}, + {1.321056,0.602316}, + {-0.188219,-0.925499}, + {-0.025028,-0.134455}, + {0.409337,0.135734}, + {0.934364,0.899781}, + {0.443336,-0.454010}, + {0.267522,1.651923}, + {-0.021616,-0.240785}, + {-0.389671,0.913717}, + {1.028459,-0.957200}, + {0.917363,0.369138}, + {0.528539,0.496175}, + {0.086018,0.410356}, + {-0.761042,0.621316}, + {0.674682,-0.212507}, + {-0.658861,-0.532391}, + {0.285689,-0.034456}, + {0.547369,0.588551}, + {-0.665673,-0.523220}, + {-0.044039,0.016680}, + {0.770642,1.488234}, + {1.180668,-0.468981}, + {-0.046869,-0.474722}, + {-0.575480,1.143743}, + {0.493793,-0.521459}, + {-0.181592,0.068195}, + {-0.893649,-0.629530}, + {0.739301,-0.072214}, + {0.372672,0.080329}, + {0.913631,-1.018692}, + {-0.517839,0.093767}, + {0.621679,0.306497}, + {0.074540,0.055095}, + {0.723377,-0.915493}, + {0.022777,-0.462031}, + {0.093992,0.364776}, + {-0.161938,-1.408632}, + {-0.700315,-0.305135}, + {0.067748,-0.187459}, + {0.483409,-0.713985}, + {0.928152,-0.381167}, + {-0.857084,1.583029}, + {-1.318696,0.516152}, + {0.062040,0.590523}, + {0.832742,-0.065744}, + {0.190616,0.184008}, + {0.718808,0.579103}, + {0.091621,-0.167070}, + {-0.496135,1.776628}, + {-0.776281,-0.967919}, + {-0.340838,-1.252051}, + {0.509865,0.890890}, + {0.011224,1.492168}, + {-0.370739,0.707013}, + {-0.707116,1.492027}, + {-1.470031,-1.128868}, + {-1.199963,0.304341}, + {0.178199,-1.144514}, + {0.827291,0.129026}, + {-1.809214,0.424594}, + {-0.056250,-1.086321}, + {-0.806620,0.594545}, + {0.614157,0.789597}, + {-0.230539,-0.152551}, + {0.305055,0.383843}, + {-0.572786,-0.383604}, + {0.699148,0.289711}, + {1.471148,1.731421}, + {0.221494,-0.119078}, + {0.134051,0.860560}, + {-0.199285,1.539492}, + {0.327753,-0.263169}, + {0.070554,-0.500086}, + {0.607835,1.349017}, + {0.298997,0.241897}, + {0.128546,0.517720}, + {-0.933511,-0.304699}, + {-0.222248,-0.319890}, + {0.219134,1.083726}, + {0.732430,-0.081472}, + {-0.274968,0.590110}, + {-0.774399,1.437671}, + {1.398432,-0.474460}, + {0.731892,0.666366}, + {0.286832,-0.212891}, + {0.820630,1.301418}, + {0.413562,1.052060}, + {-0.226316,-0.541971}, + {-1.042872,-0.345541}, + {-0.858989,-1.096863}, + {1.880585,-0.233188}, + {-0.807930,-1.151544}, + {0.394861,-0.330062}, + {-0.085289,-1.629366}, + {0.640853,-0.152655}, + {0.183194,-0.254060}, + {-1.443384,1.394728}, + {-0.011702,0.646342}, + {0.736446,-1.332796}, + {0.621335,-0.574106}, + {-0.338450,-1.567302}, + {-0.332211,0.110908}, + {-1.017165,-1.522539}, + {-0.140315,2.030807}, + {0.044867,-1.101171}, + {0.189708,0.085158}, + {-1.830584,0.387522}, + {-1.017359,0.484883}, + {0.275108,0.181996}, + {-0.327957,1.214680}, + {0.336969,-0.766226}, + {-0.562675,0.180997}, + {1.310744,0.585186}, + {0.080051,2.094519}, + {0.211201,0.942647}, + {0.568763,-0.272394}, + {0.152587,-0.595240}, + {1.275315,0.622396}, + {0.813283,-0.132745}, + {0.407696,1.569844}, + {0.039364,0.287794}, + {0.244642,-0.641218}, + {0.886477,1.006243}, + {0.948847,0.187471}, + {-0.626010,0.160922}, + {0.962612,0.504401}, + {0.875536,-0.815369}, + {0.175947,-1.244808}, + {-0.070131,0.461325}, + {0.202225,-1.039772}, + {-0.325603,0.232979}, + {-0.747171,-1.024781}, + {-0.079451,0.376832}, + {0.336329,1.142868}, + {0.213160,0.231289}, + {-0.691300,-0.017983}, + {0.057278,-0.387798}, + {0.073555,1.006174}, + {0.490772,0.337166}, + {0.685390,-0.318414}, + {0.637094,0.808315}, + {0.523969,2.121595}, + {0.721264,-0.482325}, + {-0.145401,-0.605792}, + {-0.233810,-0.053732}, + {1.269554,0.710916}, + {1.057321,-1.046691}, + {0.464363,-0.270764}, + {0.840490,1.150537}, + {-0.620898,-1.419891}, + {-0.857446,-0.039502}, + {-0.770707,-1.876256}, + {0.950801,1.087080}, + {1.432451,-0.030974}, + {0.490360,-0.567231}, + {-0.268067,-1.435917}, + {-1.183652,0.279454}, + {0.884853,-0.220426}, + {-0.528640,-0.111193}, + {-1.097008,0.128877}, + {-1.181036,-0.940732}, + {0.775628,0.000761}, + {1.472129,0.938313}, + {-0.651045,-0.150514}, + {0.253945,0.727849}, + {-0.625689,-0.863395}, + {-0.857663,-0.204035}, + {0.229410,0.785159}, + {0.415385,-0.811285}, + {0.135788,0.541017}, + {0.540449,0.302355}, + {-0.375243,-0.075659}, + {-0.126218,-1.254478}, + {-0.842535,-0.102853}, + {-0.944249,0.424586}, + {1.011823,-0.620988}, + {1.012036,0.169655}, + {0.512690,0.312651}, + {-0.628804,0.539718}, + {0.567513,0.109352}, + {0.934259,-0.533472}, + {-0.633715,-1.496096}, + {-0.416398,-0.918620}, + {0.421463,-1.209687}, + {0.314672,-0.470088}, + {-0.834237,-0.445546}, + {-0.485232,-0.247145}, + {-0.136325,-0.141431}, + {-0.006273,1.250196}, + {0.266229,-0.648711}, + {-0.945678,-0.027143}, + {0.782856,-0.470187}, + {0.305630,0.658933}, + {-1.111016,0.700723}, + {-0.365320,0.254061}, + {-0.175023,0.308741}, + {0.744562,0.103704}, + {0.557819,0.264705}, + {-1.130397,-0.307616}, + {0.190300,0.843572}, + {0.871835,-0.864320}, + {1.025579,0.117274}, + {-0.714639,-1.413594}, + {-0.394212,0.630346}, + {-0.402052,0.309273}, + {1.048158,0.495032}, + {-1.458614,0.390078}, + {-1.348655,-0.157187}, + {0.627460,0.517239}, + {0.616428,0.013392}, + {0.066659,0.172077}, + {0.177589,1.104288}, + {-0.202342,0.342469}, + {-0.896507,-0.597822}, + {-2.067867,-1.208733}, + {-0.022428,0.203426}, + {0.303756,0.349684}, + {0.627717,0.858736}, + {-0.745760,-0.181848}, + {-0.496215,1.429290}, + {-0.011943,-1.057738}, + {0.536641,1.349276}, + {-0.528001,-0.098934}, + {-1.063109,0.581999}, + {-1.256061,0.808575}, + {-0.601466,0.399072}, + {0.563718,-0.264581}, + {-0.237276,-0.677165}, + {-0.348054,1.673165}, + {0.064061,-0.618610}, + {-0.161228,0.795589}, + {-0.924021,-1.050412}, + {0.197726,0.353867}, + {-0.151410,-1.246225}, + {-0.714340,0.549384}, + {1.556261,-1.468342}, + {0.468479,-0.903354}, + {-0.483340,1.187727}, + {0.077127,-0.093447}, + {0.064972,0.945303}, + {-0.092409,0.145919}, + {1.315321,0.437219}, + {0.090724,0.761955}, + {0.781174,0.978083}, + {-0.308962,-0.268376}, + {0.696462,-0.805879}, + {0.966927,1.486179}, + {-1.249165,-1.299388}, + {1.239842,0.109267}, + {-0.340003,0.701168}, + {-1.633695,0.438179}, + {0.257196,0.023754}, + {0.005382,-0.652799}, + {0.698827,-1.245465}, + {1.057062,-0.264028}, + {-0.335223,-0.503241}, + {0.175219,-1.082885}, + {-0.274187,-0.933890}, + {-0.240526,-2.221268}, + {-0.007571,0.808866}, + {0.162060,0.252737}, + {0.481541,0.726904}, + {-0.555236,0.591634}, + {-0.136039,-0.497365}, + {-0.914324,-0.971380}, + {-0.330625,0.159913}, + {0.231296,-1.098666}, + {0.393929,-1.169035}, + {-0.664998,0.348284}, + {0.579266,-0.439099}, + {0.782286,-0.483201}, + {-0.036705,0.243544}, + {-0.470027,-0.758332}, + {-1.089025,0.282651}, + {-0.536396,-0.779503}, + {0.584009,0.036838}, + {0.777240,-0.758248}, + {-0.410388,0.482134}, + {-0.240905,-0.322910}, + {1.052859,0.448321}, + {0.744819,0.688556}, + {-0.323975,-0.312544}, + {1.688688,0.125085}, + {0.767757,0.027399}, + {-0.165767,0.087836}, + {-0.295850,-1.950460}, + {0.035816,0.245902}, + {-0.180130,-1.262665}, + {0.117034,0.019373}, + {0.309583,-0.084634}, + {0.160314,0.617106}, + {-0.223874,-0.405101}, + {0.391423,-0.984880}, + {-0.583522,-0.208371}, + {0.314564,1.000927}, + {1.528070,-0.488905}, + {0.682797,-0.214904}, + {-0.961746,0.561929}, + {-0.044529,-0.357871}, + {-0.881485,-0.203306}, + {1.081847,-0.376245}, + {0.828899,1.159757}, + {-0.396282,0.868155}, + {0.013008,-0.796971}, + {1.839981,0.128022}, + {0.861759,-0.389782}, + {0.939432,0.185296}, + {0.402922,-1.121553}, + {-0.878636,-1.122818}, + {1.213472,0.848105}, + {0.264317,-0.326819}, + {0.669519,-0.620270}, + {0.703125,-0.958242}, + {-0.367984,-0.413227}, + {-0.561993,0.902582}, + {0.709199,0.095548}, + {-0.624048,-0.624104}, + {0.367587,0.743255}, + {0.349618,-0.082040}, + {0.353670,-0.602772}, + {-0.121469,0.186655}, + {0.966288,-0.989082}, + {0.615847,1.087146}, + {0.049469,-0.498055}, + {0.161550,0.553359}, + {-0.061135,-0.214648}, + {0.046340,1.148951}, + {-0.104857,0.135405}, + {0.575610,1.613613}, + {0.294077,0.716711}, + {0.590764,-0.458646}, + {0.533655,-0.474675}, + {-0.200094,0.220235}, + {0.538978,-0.112814}, + {-0.596995,0.556408}, + {0.538951,-2.449696}, + {0.092171,-0.864222}, + {1.336939,0.991303}, + {0.333067,0.173662}, + {-0.153896,0.523270}, + {-0.582494,0.868651}, + {0.018634,0.130106}, + {-0.392325,-0.082136}, + {0.011480,0.421792}, + {-0.427424,-0.661210}, + {0.942397,0.587290}, + {-0.291423,0.402361}, + {-0.624678,0.855158}, + {0.427905,-0.996070}, + {-0.282753,-0.652971}, + {-1.240070,1.256909}, + {0.815396,-0.668763}, + {0.069285,0.238819}, + {0.077701,0.317614}, + {1.331490,0.009543}, + {1.194605,-0.196271}, + {0.230566,0.449264}, + {0.385677,1.158774}, + {-0.340860,-0.164507}, + {-0.842850,-0.564676}, + {-1.758840,0.064669}, + {-0.772174,0.091618}, + {1.140984,-0.811770}, + {-0.283852,-0.741705}, + {0.846224,0.293317}, + {-0.901372,1.090597}, + {1.033877,-1.064114}, + {-1.186147,0.598334}, + {-0.967792,1.113083}, + {0.974157,0.994512}, + {0.313614,-0.240645}, + {-0.063238,-0.036188}, + {-0.886378,-0.081582}, + {0.155813,-1.314707}, + {0.005821,0.803969}, + {0.031398,1.138370}, + {0.020663,-1.412936}, + {0.051696,0.849846}, + {-0.754989,-0.899231}, + {0.394988,0.540404}, + {-0.440672,-0.180217}, + {1.164193,-0.163753}, + {0.201996,-0.935543}, + {-0.757096,0.768721}, + {-0.851269,0.282609}, + {-0.032236,-0.457477}, + {0.242147,-0.379077}, + {-0.369603,-0.280814}, + {0.521168,-0.299217}, + {-0.383667,0.998399}, + {-0.273344,-0.133382}, + {-0.197726,0.033374}, + {0.399979,0.840030}, + {-0.349378,-0.387395}, + {1.124925,-0.570043}, + {0.418603,0.905447}, + {0.470094,-0.957354}, + {0.799573,0.109228}, + {0.261391,-0.587899}, + {0.115105,0.568951}, + {-0.511340,1.109997}, + {0.183765,1.450929}, + {0.528498,-0.666337}, + {0.342372,-0.375714}, + {-1.148716,0.543099}, + {-0.747361,-0.454390}, + {-0.510703,-0.904779}, + {0.494719,0.007910}, + {-0.178977,-0.714179}, + {-0.178152,-0.715379}, + {-0.282468,0.236082}, + {-1.500059,-0.596371}, + {0.070261,0.659727}, + {-0.930558,0.499131}, + {0.889396,0.872062}, + {1.504564,-0.762497}, + {-0.316940,-0.491494}, + {-0.366178,-0.120892}, + {-1.136140,-0.665677}, + {0.792450,0.494536}, + {-0.058379,-0.131564}, + {0.318553,-0.170468}, + {-0.442968,-0.453066}, + {-0.086122,0.487054}, + {-0.002152,0.609175}, + {-0.198518,-0.485488}, + {0.401525,1.306812}, + {-0.871198,-0.567593}, + {-1.415314,-0.301627}, + {1.094900,0.063995}, + {-0.495128,0.213385}, + {0.001405,-0.320934}, + {-0.324564,-0.183506}, + {0.122253,-0.766486}, + {0.984696,0.267844}, + {0.390885,-0.724844}, + {-0.295282,0.211369}, + {-0.452752,0.149217}, + {-1.129899,1.635510}, + {0.401396,0.319009}, + {-0.558456,0.761582}, + {0.516621,-0.299728}, + {1.170774,0.462117}, + {0.617850,0.230530}, + {-0.616788,-0.704169}, + {0.921282,-0.768237}, + {-0.341409,0.311033}, + {1.237788,-0.817666}, + {0.485433,-1.114476}, + {-0.342288,-0.175267}, + {0.536632,1.147849}, + {0.173754,0.023311}, + {0.019679,-0.413100}, + {0.597239,-0.651007}, + {0.649898,-0.023947}, + {0.784239,0.588037}, + {0.830428,-0.495560}, + {-1.123475,1.667920}, + {-0.757155,0.047444}, + {-1.536651,0.080233}, + {-0.600005,0.260676}, + {0.220305,-1.151817}, + {-0.957182,0.202521}, + {0.051226,-0.029891}, + {0.929447,0.384707}, + {-0.422607,-0.106100}, + {0.353436,0.656718}, + {-1.698234,-0.708923}, + {0.303429,-0.258709}, + {-0.088662,0.015699}, + {-0.107934,-0.261967}, + {0.273168,1.400901}, + {0.727049,-0.003312}, + {0.353597,0.715919}, + {-0.952026,-0.067464}, + {-0.145977,-0.817247}, + {0.424964,-0.919265}, + {0.216841,-0.912514}, + {0.817183,-0.911165}, + {-0.818262,-0.517903}, + {0.313475,-0.796077}, + {-0.461417,0.089258}, + {0.281792,-0.291761}, + {0.256943,-0.778188}, + {0.692420,-1.751276}, + {-0.667443,-1.761493}, + {0.064327,0.039954}, + {0.393151,-0.403340}, + {0.452610,-1.766216}, + {-1.336807,-0.219532}, + {0.984460,-0.595093}, + {-0.702228,0.759469}, + {-0.464956,0.036841}, + {0.212799,0.031216}, + {-0.802860,-0.547493}, + {-0.158662,0.903760}, + {0.085684,-0.487384}, + {0.396768,-0.742668}, + {0.947527,-0.110617}, + {-0.879301,0.044952}, + {1.116675,-0.038127}, + {-0.722818,1.392444}, + {-0.373075,0.108044}, + {0.341487,0.570356}, + {0.441689,-0.298432}, + {-0.916256,0.631859}, + {-0.115507,0.498266}, + {0.487754,0.201490}, + {1.238389,-0.100924}, + {0.271103,0.682797}, + {-0.148481,0.589360}, + {-1.194668,-0.756352}, + {0.264142,0.313523}, + {0.562690,-0.166170}, + {-0.527054,0.196752}, + {-1.636821,-0.651796}, + {0.182204,0.101729}, + {-1.710289,-0.320628}, + {0.053238,-0.006688}, + {0.879077,-0.416623}, + {0.459898,-0.350816}, + {-0.856786,0.761817}, + {0.575136,0.370224}, + {-0.710682,-1.661932}, + {0.336980,0.262314}, + {-0.579270,1.290335}, + {1.163348,0.112616}, + {-0.596616,-0.104548}, + {-0.584829,0.611158}, + {-0.507069,0.090728}, + {-1.061880,0.073344}, + {-0.141397,0.660130}, + {1.132322,0.001417}, + {-0.578203,1.455008}, + {0.430346,-0.353417}, + {0.774728,-0.360911}, + {0.089974,0.151366}, + {-0.258221,-0.281586}, + {0.380590,-0.050307}, + {0.805828,1.610702}, + {-2.417115,-0.796571}, + {0.513097,-0.330322}, + {-0.384140,0.768697}, + {-0.343898,0.186101}, + {-1.280400,-0.294454}, + {0.497601,-1.076587}, + {0.969059,0.648983}, + {0.415521,-0.271362}, + {-0.023547,-0.051680}, + {0.697681,0.077273}, + {1.467525,-0.087120}, + {0.914526,0.512467}, + {0.673227,-0.608451}, + {0.868157,-0.438369}, + {-0.641897,-0.582166}, + {-0.395403,-0.726859}, + {0.708135,0.058289}, + {0.155302,-0.353393}, + {-0.604680,-0.269021}, + {0.555662,-0.222243}, + {-0.691591,-1.012201}, + {0.593126,-0.482201}, + {0.938501,-0.141245}, + {-0.285179,-0.282197}, + {-0.332866,-0.838107}, + {-0.299353,0.907257}, + {-0.502252,0.130212}, + {0.509899,0.203982}, + {0.432764,-1.036891}, + {0.320100,0.302258}, + {-0.715537,0.630849}, + {1.399467,0.189787}, + {0.257626,0.021932}, + {-0.112331,0.217707}, + {-1.289427,1.432804}, + {-0.390872,-0.357403}, + {0.236182,0.303781}, + {0.802511,0.330483}, + {-1.028297,-0.403086}, + {-0.147910,-0.288479}, + {0.978197,-0.775374}, + {0.868229,1.459663}, + {0.452224,0.498722}, + {0.746035,-0.670797}, + {-0.360626,0.630983}, + {-0.148420,-0.258364}, + {-0.536846,0.526774}, + {-0.736656,0.599485}, + {0.251565,0.410096}, + {-0.817544,0.436993}, + {-0.361899,-0.266149}, + {0.106065,1.119062}, + {-0.001893,-0.840154}, + {-0.174058,0.288847}, + {0.450589,-0.520516}, + {0.330658,-0.272313}, + {0.560301,0.149574}, + {-0.927905,-0.026315}, + {-0.130635,0.149914}, + {-0.167674,0.479912}, + {0.163863,-0.914797}, + {-0.236233,0.492833}, + {-0.439716,-0.273501}, + {1.097053,0.570964}, + {-1.090225,-0.751110}, + {-0.622561,-1.038814}, + {0.309323,-1.010214}, + {-0.204232,-0.589475}, + {-0.039192,0.034730}, + {-0.672256,0.289962}, + {1.195556,-0.759149}, + {0.701010,-0.946209}, + {-0.211877,-0.021206}, + {0.834771,0.269014}, + {0.310538,0.897536}, + {-0.416299,-0.103346}, + {0.263666,-0.033155}, + {1.199319,0.739114}, + {0.209693,-0.011071}, + {1.463650,-1.052988}, + {-0.101228,-0.167856}, + {1.234120,-0.942573}, + {0.196785,0.954050}, + {0.829042,0.153133}, + {0.357430,0.139137}, + {-1.233805,0.986066}, + {-0.587524,0.933536}, + {1.124220,0.284460}, + {0.369787,-0.213798}, + {-0.012298,1.911852}, + {-1.586387,0.267615}, + {0.696006,-0.464801}, + {-0.624327,1.280676}, + {0.367066,0.324597}, + {0.000432,0.067311}, + {0.390603,1.101625}, + {0.256944,-0.623323}, + {0.543036,0.814041}, + {0.002517,-0.822681}, + {-1.222231,0.151677}, + {1.087153,-0.651828}, + {-0.140421,-0.309047}, + {-1.276460,-0.479672}, + {0.907053,0.734263}, + {-1.468305,1.325843}, + {-0.742062,1.724340}, + {0.602905,0.826894}, + {-0.234395,0.552366}, + {-0.319795,-0.300154}, + {0.766130,0.375387}, + {-0.565094,-0.908181}, + {-0.002303,0.803038}, + {0.606245,-0.886099}, + {-0.375411,-0.501269}, + {1.137430,0.498844}, + {1.400551,1.243294}, + {-0.572345,0.330001}, + {-0.831085,0.224646}, + {-1.193440,0.029548}, + {-1.017357,0.114069}, + {0.036078,0.403207}, + {1.394122,-0.032985}, + {-0.220085,0.427158}, + {-1.279987,-0.411288}, + {0.377185,0.243313}, + {0.004243,-0.857524}, + {1.036016,-0.532137}, + {0.245228,-1.150637}, + {1.467709,-0.614337}, + {-0.512344,0.162373}, + {-1.104046,-0.167139}, + {-0.224718,-0.143013}, + {-0.256979,0.070597}, + {0.089855,-0.271238}, + {-0.734984,0.724372}, + {-0.217210,0.319333}, + {0.718725,0.347974}, + {0.251565,0.741094}, + {0.290149,0.659867}, + {0.408272,-0.032915}, + {0.079918,0.470449}, + {-1.011348,-0.572926}, + {0.265858,-0.244285}, + {0.498660,-1.173075}, + {-0.489052,0.268982}, + {0.803724,-0.240363}, + {-0.448072,0.003395}, + {0.190085,0.738899}, + {-1.320261,-0.384362}, + {-0.851492,-0.388560}, + {0.421440,-0.177958}, + {-0.701418,0.243165}, + {-0.274377,0.336519}, + {-0.432270,0.059413}, + {0.723602,-1.369028}, + {0.003061,1.025321}, + {0.439715,0.455140}, + {0.247416,-0.318078}, + {-0.295679,-0.309351}, + {-1.069923,0.563669}, + {0.778952,0.003877}, + {-0.650501,0.383655}, + {0.290488,-0.280076}, + {-0.318266,-0.503424}, + {0.200569,-0.451626}, + {-0.058511,1.000852}, + {-0.501142,1.127454}, + {0.840729,0.860918}, + {0.404423,1.184485}, + {0.080599,0.337071}, + {0.265972,-0.831970}, + {-0.792118,-0.632130}, + {-1.312815,-0.150298}, + {0.384463,0.434096}, + {-0.473277,-0.646626}, + {0.726083,0.524943}, + {0.232413,-1.349094}, + {-0.132578,-0.328246}, + {0.192057,-0.949313}, + {-0.294124,1.799810}, + {-0.646249,-0.365151}, + {-1.142885,-0.860267}, + {0.952542,0.463949}, + {-0.843407,0.603740}, + {0.245604,0.005612}, + {0.876790,-0.725446}, + {-1.264255,-0.509446}, + {0.935016,-0.003417}, + {0.253759,-0.252225}, + {-0.504993,0.338401}, + {1.002041,0.260841}, + {0.156989,-0.135302}, + {-1.024724,-0.400709}, + {-0.112462,-1.205456}, + {0.334260,0.781035}, + {0.183794,0.683842}, + {-0.865777,0.383277}, + {-0.505670,0.667817}, + {-0.088249,0.840903}, + {1.101360,1.926043}, + {-0.308625,-0.138154}, + {0.609676,-0.715983}, + {-0.645769,-0.287890}, + {0.369474,-0.729993}, + {0.186644,0.541750}, + {0.463282,0.674407}, + {0.216844,-0.852488}, + {0.856090,0.940839}, + {1.001064,0.394220}, + {-0.837133,-0.154497}, + {-0.390434,0.439008}, + {0.680226,-0.317541}, + {0.098053,0.117416}, + {0.071014,-0.649889}, + {-0.262387,-0.155264}, + {0.388413,0.769428}, + {0.158413,0.941346}, + {0.671325,-0.266932}, + {0.970945,-0.618071}, + {0.233638,0.572923}, + {0.060161,-0.256486}, + {-0.637504,0.063894}, + {0.934414,-0.427341}, + {-0.467026,0.652522}, + {-0.863576,0.149723}, + {-0.771443,-0.816274}, + {0.511701,-0.479018}, + {-0.257457,0.087086}, + {0.290638,0.016947}, + {-0.386981,-0.727179}, + {-1.098515,-0.274432}, + {-0.557208,1.426296}, + {-0.613355,0.019539}, + {-0.419196,-0.251018}, + {-0.832714,0.502052}, + {0.128755,0.655366}, + {0.256114,0.273034}, + {-1.125167,-0.906505}, + {0.388043,-0.540845}, + {-0.937881,2.105264}, + {-0.202089,1.002912}, + {0.723756,-0.449443}, + {0.233778,0.527703}, + {-0.057235,1.884349}, + {1.157345,-0.412072}, + {-0.955458,-1.385361}, + {0.053114,0.627971}, + {0.827722,0.375269}, + {-0.181816,0.772748}, + {-1.626276,0.442130}, + {-0.435385,-0.179652}, + {1.089080,-0.426374}, + {1.017264,0.699838}, + {-1.020426,-0.298556}, + {0.676783,0.459662}, + {-0.739834,0.763761}, + {0.721741,-1.206326}, + {-0.951135,-0.270497}, + {-0.457913,-1.038211}, + {1.712993,-0.468750}, + {-0.543171,1.050327}, + {-0.541388,0.741480}, + {1.399220,-0.146602}, + {-0.246873,1.307922}, + {-0.314164,-0.681691}, + {-0.361125,0.096600}, + {0.468431,-0.456516}, + {-1.208053,0.471189}, + {-0.369852,-0.310925}, + {-0.655492,-0.981961}, + {1.982648,0.257313}, + {0.350295,-0.328245}, + {-0.408155,0.164967}, + {1.186227,0.615053}, + {1.538608,0.853998}, + {-1.014463,-0.266268}, + {-0.038058,1.267679}, + {1.226620,-0.039905}, + {0.128462,-0.723152}, + {1.117944,-0.485275}, + {0.110495,0.512575}, + {0.613947,-0.332562}, + {1.183653,-0.135030}, + {-0.545671,-1.236704}, + {-0.368847,0.282388}, + {0.354177,-0.397370}, + {-0.221450,0.619409}, + {-0.212607,-0.070614}, + {-0.746339,0.421409}, + {-0.796334,0.416425}, + {0.281155,-0.847141}, + {1.084794,-0.633466}, + {-1.416468,-0.504705}, + {-0.413320,-0.218964}, + {-0.006619,1.498092}, + {0.592891,0.110515}, + {0.202503,-0.802352}, + {-1.044280,-0.551926}, + {-0.551728,0.074422}, + {-1.621229,-0.887687}, + {-0.034501,-0.177771}, + {0.643751,-0.498982}, + {0.537422,0.214707}, + {0.859316,0.230005}, + {0.984145,0.642774}, + {-0.446523,-0.283910}, + {0.698656,-0.512658}, + {-0.413664,0.370197}, + {0.012230,0.057244}, + {-0.124965,0.707693}, + {-1.668994,0.589325}, + {0.431439,0.916868}, + {0.357835,-0.007437}, + {0.091721,-1.193125}, + {1.085117,0.362418}, + {-0.815710,-0.704111}, + {0.368599,0.417522}, + {-0.153068,0.701186}, + {0.633497,1.153006}, + {-0.640502,-0.448321}, + {-0.288243,-1.008288}, + {-0.241203,0.571272}, + {-0.700623,0.003668}, + {0.762784,-0.271363}, + {-0.675450,-0.536786}, + {-1.095720,0.963368}, + {-0.545080,-0.052652}, + {0.425995,1.045991}, + {0.747089,-0.106197}, + {0.705921,0.481355}, + {-0.231552,-0.495818}, + {-0.035338,0.271549}, + {-1.434181,-0.462102}, + {-0.234651,-0.659026}, + {0.293521,0.578445}, + {-0.159469,-0.371527}, + {0.947780,-0.184427}, + {-0.575724,1.293055}, + {1.217078,0.776812}, + {0.077462,0.005225}, + {0.031218,0.312440}, + {-0.254340,-1.261328}, + {-0.545078,0.114315}, + {0.214459,0.265649}, + {0.665158,-0.572889}, + {0.156845,-0.494711}, + {-0.805048,-0.829465}, + {-1.377436,-0.234879}, + {-0.680977,1.091655}, + {0.991115,-0.327044}, + {-0.636966,-0.868296}, + {-0.468122,0.139195}, + {-0.023171,-0.344042}, + {0.779795,0.665803}, + {0.288043,-0.640526}, + {-0.377837,-0.768582}, + {1.312911,0.154017}, + {0.594896,0.205326}, + {0.546600,-0.380945}, + {-0.348857,-0.048100}, + {-0.719583,0.758329}, + {0.366828,0.580990}, + {0.370738,0.785391}, + {-0.058071,-1.293254}, + {-0.886575,0.757403}, + {0.424991,-0.722256}, + {0.284736,0.076029}, + {1.316231,-1.073572}, + {-0.783294,0.805530}, + {0.389834,-0.129104}, + {1.095639,-0.075839}, + {0.935852,-0.373630}, + {-0.885108,-0.020762}, + {0.158064,0.217629}, + {-0.640319,-0.386929}, + {-0.909168,-0.373835}, + {0.010911,-0.101003}, + {-0.277750,-0.148550}, + {0.521820,1.009048}, + {-0.512451,-0.513281}, + {-0.008047,0.202402}, + {0.741191,-0.666179}, + {0.763195,0.771867}, + {0.390221,0.297205}, + {0.625399,0.489404}, + {1.023425,0.108867}, + {-0.703103,0.629155}, + {-0.103211,-0.285761}, + {-0.390588,1.375767}, + {0.454617,-0.110921}, + {0.317920,-0.896351}, + {0.649451,-0.067138}, + {-0.121899,-0.655986}, + {0.358821,-1.041252}, + {-0.222857,-0.303574}, + {-0.568716,-0.089093}, + {-0.192284,-0.838715}, + {1.222415,-0.016245}, + {0.526310,-0.627056}, + {-0.068488,-1.753668}, + {-1.039387,-0.320863}, + {0.020520,0.318572}, + {0.496641,-0.577605}, + {-0.968605,-0.480527}, + {0.285637,1.389404}, + {0.944869,0.885298}, + {0.638385,-0.710974}, + {-0.279932,0.152341}, + {-0.743228,-1.024093}, + {-0.486215,-0.168400}, + {-0.114585,1.020039}, + {0.056702,-0.528896}, + {-0.949243,-0.844536}, + {1.129499,0.153529}, + {-1.146171,-0.448270}, + {-0.600020,-0.088151}, + {1.026368,-0.907166}, + {1.049642,1.198028}, + {-0.732045,-0.405919}, + {0.210230,-0.786201}, + {0.310585,0.342437}, + {0.067431,0.566931}, + {-0.587248,0.255356}, + {-0.170138,1.277977}, + {-0.258523,-1.186042}, + {-0.773006,-1.019886}, + {-0.448797,-0.188137}, + {-0.091370,0.772927}, + {0.244919,-0.106617}, + {-0.774478,-0.520363}, + {0.440259,0.217792}, + {0.363108,0.753145}, + {-0.266081,0.238928}, + {-1.127392,0.360823}, + {-0.261177,1.592192}, + {0.699450,0.113524}, + {-0.655141,0.291248}, + {-0.436259,-0.058521}, + {0.384314,0.487647}, + {0.039816,-1.110978}, + {0.404230,0.678814}, + {-0.949673,-0.269000}, + {-0.248331,-1.005033}, + {-0.540079,0.606271}, + {0.444702,0.146360}, + {1.015384,-1.065484}, + {-1.877784,-1.198948}, + {0.489736,1.350612}, + {-0.710135,-0.775063}, + {0.593538,-0.900296}, + {-0.098286,-1.049735}, + {-0.108973,0.545483}, + {0.062642,-0.684699}, + {0.098171,0.140806}, + {-0.959390,-0.170130}, + {0.461162,1.804670}, + {1.124557,0.055315}, + {0.189370,-1.658841}, + {0.186242,-0.841503}, + {0.633026,-0.735853}, + {0.857498,-0.201044}, + {-0.218993,-0.016715}, + {-0.765959,0.455723}, + {0.217731,-0.073306}, + {-0.436889,0.159793}, + {-0.023781,-0.349387}, + {-0.248361,0.055098}, + {-0.771684,0.303200}, + {-0.211929,1.024403}, + {0.104045,-1.383657}, + {-0.416710,0.061459}, + {-0.436209,-0.471431}, + {-1.510879,-0.277018}, + {0.200120,1.225231}, + {-0.328469,0.600453}, + {0.127003,-0.602157}, + {0.987188,0.212941}, + {0.670236,0.123304}, + {0.422322,0.157453}, + {0.152338,-0.945760}, + {-0.025870,-0.413677}, + {-0.268227,-0.778529}, + {0.480173,0.907527}, + {-0.888884,-1.439385}, + {-1.351376,-1.091003}, + {0.222836,-0.086297}, + {0.573336,-1.360066}, + {-0.806399,-0.498281}, + {-0.595494,0.831074}, + {0.908191,0.307062}, + {-0.459795,-0.710666}, + {-0.094751,-0.206448}, + {-0.024242,-0.951987}, + {-0.318051,0.362327}, + {-0.063917,-0.408062}, + {-0.003055,1.006656}, + {1.000114,-0.003844}, + {0.433414,0.153418}, + {-0.146174,-0.778023}, + {-0.002596,-0.081254}, + {-0.372852,-0.562314}, + {0.813749,-0.171006}, + {0.516876,-0.334962}, + {0.130150,-0.220825}, + {-0.399139,-0.678091}, + {-0.184451,-0.949755}, + {-0.188671,0.303505}, + {0.037500,-0.099776}, + {0.773437,0.244504}, + {0.445884,-0.043319}, + {0.316367,-0.273157}, + {-0.746967,0.698428}, + {-0.191399,0.086704}, + {1.316252,1.332223}, + {0.445639,0.004308}, + {-0.087606,0.111263}, + {-0.891735,0.020169}, + {0.193313,-0.606729}, + {0.731145,-0.605570}, + {-0.692633,0.021142}, + {-0.444493,0.208281}, + {-0.466215,-0.817877}, + {-0.624077,-0.305184}, + {0.280254,1.208432}, + {0.014983,0.902646}, + {0.006548,0.008337}, + {0.044097,0.697776}, + {-0.171889,-0.146767}, + {0.265368,0.009346}, + {1.059121,0.446341}, + {1.888582,-0.599794}, + {-0.562391,0.519765}, + {-1.251330,-0.838557}, + {-2.137730,-0.631450}, + {0.182187,0.499127}, + {0.764443,0.756613}, + {0.631286,0.584558}, + {1.111431,-0.772644}, + {0.076405,0.183672}, + {-0.058883,-0.335039}, + {-0.703857,0.073318}, + {0.757167,0.909054}, + {-0.611251,-0.894211}, + {-0.330231,0.304851}, + {-0.364020,-0.938645}, + {-0.104970,0.914045}, + {0.093519,1.357853}, + {-0.770065,-0.085731}, + {1.319136,0.816044}, + {0.058947,-0.406575}, + {-0.396587,-0.503710}, + {0.220349,-0.336425}, + {-0.501066,0.255245}, + {1.323531,-1.916640}, + {-0.596563,0.742761}, + {0.713492,-0.603602}, + {0.051641,-0.788488}, + {-0.027644,-0.011744}, + {0.313449,0.369693}, + {-0.874394,-0.458299}, + {0.156414,-0.301505}, + {-0.817243,-0.129309}, + {0.387262,1.050022}, + {-0.730068,0.280044}, + {0.562581,0.907164}, + {0.467513,0.105385}, + {0.244667,0.168116}, + {0.639852,0.033501}, + {0.208643,0.034229}, + {0.947509,-1.095182}, + {0.730262,1.390582}, + {-0.409880,-1.003160}, + {0.401874,1.156874}, + {-0.714656,-1.740182}, + {-0.430680,-0.361054}, + {-0.188850,0.396311}, + {0.796301,-0.592325}, + {-1.140359,-0.833160}, + {-0.015264,-0.656368}, + {1.098273,-0.926714}, + {0.514728,-0.216690}, + {0.098571,-0.636577}, + {-0.910064,0.415927}, + {-0.440682,0.758024}, + {0.127293,0.104132}, + {-0.981800,-0.277406}, + {0.899617,-0.979514}, + {0.602636,0.426296}, + {0.150065,0.494543}, + {0.232962,0.763611}, + {0.467684,0.140699}, + {-1.574619,0.669059}, + {0.882179,-0.011036}, + {0.097422,0.257114}, + {-0.102244,-0.259914}, + {0.490538,0.105090}, + {-0.996295,0.948638}, + {0.083436,0.900836}, + {0.438195,0.350201}, + {-0.679329,-0.713746}, + {0.529187,1.286256}, + {-0.954747,-0.283946}, + {-0.130941,-0.382040}, + {-0.158855,-1.450548}, + {-0.250052,-0.982319}, + {-0.268123,-0.627128}, + {0.444598,1.229273}, + {1.187865,0.972354}, + {1.162571,0.615927}, + {-0.053069,-0.762640}, + {0.568529,0.950631}, + {0.704832,-0.363101}, + {-0.821986,-0.831900}, + {0.321775,-0.386797}, + {0.318484,-0.462144}, + {-0.981095,-0.085616}, + {-0.827586,-0.611532}, + {-0.767987,0.213131}, + {1.465830,0.359996}, + {0.063406,-0.101972}, + {0.103066,-0.104108}, + {-0.332640,-0.565526}, + {0.153801,0.192602}, + {-0.180607,-0.683069}, + {-1.020433,-0.029838}, + {-1.056090,-0.281924}, + {0.711217,1.040632}, + {-0.779687,-0.286412}, + {-1.227989,0.344829}, + {-0.325886,-0.117333}, + {0.010627,0.905134}, + {-0.179905,-0.040737}, + {-0.034126,0.635378}, + {-0.551102,-0.611186}, + {1.349050,0.713766}, + {-1.950842,0.993737}, + {-0.285493,0.919628}, + {-0.839695,-1.284912}, + {0.867960,0.118154}, + {-0.524136,-0.534178}, + {-0.606047,-0.077576}, + {0.997701,-0.360559}, + {-0.143819,-0.521362}, + {0.277948,0.011120}, + {0.781126,-0.650844}, + {0.514107,-0.291052}, + {-0.605037,0.018662}, + {0.595003,-0.358330}, + {-0.892601,-0.794597}, + {-1.068990,-1.057503}, + {-0.833229,1.270529}, + {-0.334875,0.977099}, + {-0.663629,0.338105}, + {0.554117,-0.088210}, + {-0.667932,1.031071}, + {-0.082927,-0.130890}, + {-0.543973,-0.272414}, + {1.397328,0.081006}, + {0.369186,0.137642}, + {-1.393635,0.792070}, + {-0.582444,-0.031794}, + {-0.053332,-0.043677}, + {-0.372722,-0.230031}, + {1.135177,0.092456}, + {0.280377,-0.188462}, + {-0.486260,-0.151009}, + {1.265662,0.491554}, + {-0.473461,0.147609}, + {-0.239905,-0.801906}, + {-0.220706,0.501078}, + {0.640279,-0.721218}, + {-0.349523,-0.466126}, + {0.322248,0.690068}, + {0.360951,0.602485}, + {0.312384,-0.548838}, + {-1.562549,0.675293}, + {0.282446,0.191236}, + {-0.251916,0.509349}, + {-1.270286,-1.114868}, + {-0.429550,-0.631172}, + {0.636991,1.337931}, + {-0.239257,-0.528962}, + {0.203516,0.107619}, + {-0.158954,0.175905}, + {0.017560,-0.973022}, + {1.063318,-0.351026}, + {-0.500848,0.195306}, + {-0.407674,-0.547799}, + {0.311455,-0.233779}, + {0.950908,0.750602}, + {0.087365,-0.326519}, + {-0.921551,-0.059790}, + {-0.237386,0.904391}, + {0.579191,-1.093121}, + {1.114219,0.472145}, + {1.464486,-0.047726}, + {0.230240,-0.507439}, + {0.214072,0.384204}, + {0.227012,1.628634}, + {0.862830,-0.777709}, + {0.499309,0.503287}, + {0.194024,-0.094408}, + {-0.333249,-1.050169}, + {-0.510589,-1.637118}, + {-0.885624,-0.982164}, + {1.742562,-1.274337}, + {0.089119,-1.079374}, + {-0.446537,-0.098650}, + {0.360210,-0.124113}, + {-0.658511,0.326397}, + {-0.544164,0.579137}, + {-0.251213,0.155793}, + {0.335646,0.461865}, + {0.443714,-0.380484}, + {-0.217890,0.767709}, + {-1.477727,-0.131848}, + {-0.670288,-0.482916}, + {1.276010,-0.242181}, + {-0.569009,-0.344377}, + {0.258112,0.099654}, + {-0.470833,-0.107608}, + {0.077847,-1.011430}, + {-0.095550,-1.610504}, + {-0.245212,-0.779197}, + {0.507037,0.270557}, + {-0.210576,-0.406151}, + {0.334297,0.471540}, + {0.940615,-0.817298}, + {0.807612,-0.335314}, + {-0.967504,1.005527}, + {-0.419911,-0.427284}, + {1.058308,0.377315}, + {-0.640751,-0.100329}, + {-0.206736,-1.490178}, + {-0.908508,0.534514}, + {0.236230,-0.674558}, + {0.040694,0.194800}, + {0.926613,-0.976837}, + {-0.400272,0.398158}, + {1.213940,-0.431001}, + {-0.154429,-0.506394}, + {0.263405,-0.666924}, + {-0.587860,-1.305488}, + {-0.626593,0.117810}, + {0.343828,1.396967}, + {0.083446,-0.263320}, + {-0.486981,-0.263767}, + {-0.353650,0.590502}, + {0.546912,0.129352}, + {-0.148903,-0.442021}, + {0.148692,0.307489}, + {0.456169,0.695536}, + {-0.306257,0.742800}, + {0.843344,-0.137786}, + {-0.403558,-0.081928}, + {0.004422,0.767584}, + {0.602551,-0.925966}, + {0.808077,0.677800}, + {-0.920983,0.444859}, + {0.709114,-0.150759}, + {0.774244,0.583938}, + {-0.007792,-0.664973}, + {0.811944,-0.309259}, + {0.744698,-0.075886}, + {-0.510442,-0.065905}, + {-0.015831,-0.190166}, + {0.713298,-0.160445}, + {-0.693444,0.164467}, + {0.504515,0.718341}, + {-0.357876,0.683165}, + {-0.509067,0.349283}, + {0.027786,0.967045}, + {0.001332,-0.162389}, + {-0.917110,0.767740}, + {0.095917,-0.158809}, + {-0.542706,0.715325}, + {0.730792,0.659037}, + {-0.010585,-0.228058}, + {0.500959,-0.152128}, + {0.079144,0.005812}, + {-1.190054,-0.493119}, + {0.184814,1.759480}, + {0.491137,-0.172917}, + {-1.489489,-0.538351}, + {0.038032,0.828474}, + {-0.790134,0.518021}, + {1.008854,0.645478}, + {0.307948,0.009483}, + {-0.329913,0.936288}, + {0.018155,-0.235603}, + {-0.321219,-1.203784}, + {0.428175,-0.218314}, + {-0.362877,-0.370190}, + {0.444549,-0.342885}, + {-0.049808,0.501963}, + {0.674179,-0.185107}, + {0.599912,-1.732999}, + {0.088862,0.782982}, + {-0.107951,0.180743}, + {-0.122355,1.267863}, + {0.550598,-0.112575}, + {-0.000421,0.525225}, + {1.443725,0.501908}, + {-0.409289,0.574812}, + {-0.039830,0.421113}, + {0.508459,-1.005977}, + {-1.445393,-1.149261}, + {-0.631553,-0.319625}, + {-0.909902,0.054411}, + {0.339123,2.211716}, + {-1.144259,0.907937}, + {0.767662,0.182702}, + {-0.001103,-0.936672}, + {0.724690,-0.821044}, + {-0.127908,0.396448}, + {-1.259213,-0.942427}, + {0.270614,0.534192}, + {0.302353,-0.606736}, + {0.368202,0.117501}, + {-0.621508,-0.599182}, + {-0.389050,0.382474}, + {0.276748,-0.206800}, + {0.692974,-2.222835}, + {0.281160,0.177410}, + {0.692791,0.111511}, + {0.641347,0.456632}, + {-0.024490,0.649549}, + {-0.110421,-1.172916}, + {-1.093464,-0.732331}, + {-0.355374,-0.282145}, + {0.758283,-0.156623}, + {-1.392806,-0.020595}, + {0.062043,-0.332704}, + {0.072246,-0.407848}, + {0.764714,-0.922699}, + {0.324736,0.223764}, + {0.322471,-0.791710}, + {-0.310998,0.871270}, + {0.409121,0.452691}, + {-0.507904,0.540686}, + {0.247319,0.370197}, + {0.289584,0.022769}, + {0.918507,-0.797867}, + {-0.002342,-0.653221}, + {0.665966,0.086050}, + {-0.105914,0.520572}, + {0.661266,-0.788971}, + {-0.016104,1.032441}, + {-1.079144,0.763598}, + {0.286110,-0.408518}, + {-0.702570,-0.278708}, + {0.418026,-1.825956}, + {-0.699938,0.339054}, + {-0.549577,-0.472606}, + {-0.958419,-0.399456}, + {0.931910,0.405273}, + {-0.061580,-0.001784}, + {-0.235095,-0.195635}, + {0.396945,-0.793988}, + {-0.120105,0.741895}, + {0.967101,-1.193312}, + {0.408000,0.328582}, + {0.121563,0.074206}, + {0.794018,0.365534}, + {1.427377,-0.303106}, + {-1.185743,-0.469011}, + {-1.014410,-0.160477}, + {0.891003,-0.675965}, + {-0.449822,0.835702}, + {0.168080,-0.372203}, + {0.231932,-0.813300}, + {0.695524,0.543724}, + {-1.150522,-0.300759}, + {-1.130058,-0.194783}, + {-0.158590,0.163209}, + {0.318411,-1.215333}, + {-0.130949,1.027326}, + {-0.022279,-0.079554}, + {-0.819798,-1.296138}, + {0.045197,0.904739}, + {2.069130,-0.927992}, + {-0.409507,0.500071}, + {-0.320066,-1.146465}, + {0.541117,0.115373}, + {-0.789460,-0.165824}, + {0.540866,-0.330202}, + {-0.794487,-0.094771}, + {-0.857677,0.866646}, + {-1.027897,-0.906066}, + {-0.990814,-0.484744}, + {-1.118999,1.518096}, + {0.368560,0.062309}, + {-0.472288,-0.358193}, + {0.818078,0.355593}, + {0.432227,0.535003}, + {0.881773,-0.248469}, + {0.386008,-0.326813}, + {0.729605,-0.034809}, + {-1.973023,-0.054177}, + {-0.155383,0.156626}, + {-0.654563,0.363333}, + {-0.629236,0.253927}, + {0.047558,-0.270537}, + {0.876852,1.219813}, + {0.676330,0.747201}, + {1.527175,-0.031846}, + {0.058820,0.330611}, + {-1.429720,-0.026237}, + {0.145607,-0.314241}, + {-1.057689,-0.330500}, + {0.140384,-0.134579}, + {-0.954319,0.012254}, + {0.454891,-1.125468}, + {2.357209,-0.042871}, + {-1.230701,0.477340}, + {-0.320824,-0.139064}, + {-0.761107,0.100853}, + {-0.288901,-0.086378}, + {-0.428826,1.158555}, + {0.547848,-1.217274}, + {-0.445240,-0.070165}, + {-1.133672,0.465347}, + {0.623461,0.635773}, + {1.003495,-0.575461}, + {-0.028313,-1.236159}, + {-0.362889,0.221756}, + {-0.439814,-0.193680}, + {0.519280,1.102878}, + {0.752761,0.423081}, + {0.166261,-0.338834}, + {-0.310806,-0.151127}, + {-0.160761,0.442555}, + {0.654292,-0.498436}, + {0.080171,-0.983075}, + {0.630524,0.050145}, + {-1.094236,0.845830}, + {-0.395812,-1.350396}, + {0.362922,-1.130889}, + {0.657214,0.160993}, + {-1.055868,0.691473}, + {-0.077860,-0.396539}, + {0.272831,0.186593}, + {-0.963077,1.436838}, + {-1.491045,0.983782}, + {-0.445406,-1.055664}, + {-0.560002,0.315656}, + {-1.094953,0.428742}, + {1.355583,-0.101228}, + {-0.610726,-0.903339}, + {0.220781,0.133283}, + {-0.385599,-0.105530}, + {1.569466,0.694499}, + {-0.949049,0.657375}, + {0.293380,-0.197649}, + {-0.121347,-1.023660}, + {0.142107,1.869948}, + {0.240700,1.753354}, + {0.155119,-0.787710}, + {0.072108,0.802771}, + {-0.518774,-0.835932}, + {0.686448,0.413265}, + {-0.075227,0.357503}, + {-0.367060,-0.293209}, + {1.198188,0.228709}, + {0.086829,0.401398}, + {0.402488,-0.001439}, + {1.875893,1.073098}, + {-0.997759,-1.144125}, + {-0.046681,0.959887}, + {-0.059867,0.850184}, + {-0.456443,-0.686195}, + {-0.245116,-0.874781}, + {-0.652563,-1.042379}, + {-0.538923,0.202282}, + {-0.076387,-0.432216}, + {0.434154,-0.289432}, + {0.791833,1.524970}, + {-1.011962,0.122749}, + {0.443728,0.583743}, + {-0.476166,-0.164564}, + {0.865760,1.395544}, + {0.458453,0.486414}, + {-1.083056,-0.554460}, + {-0.320430,1.151998}, + {-0.522975,0.380352}, + {-0.800879,-0.410712}, + {-1.160173,-0.225969}, + {-0.727965,-0.082624}, + {-0.078411,0.553021}, + {0.825728,-0.312162}, + {-1.384057,0.781615}, + {-0.368922,0.233514}, + {0.279253,-0.378687}, + {0.403824,0.290804}, + {-0.229572,-0.601070}, + {-0.626745,-0.384230}, + {-1.287989,-0.222999}, + {0.484008,-0.010462}, + {0.301750,-0.985000}, + {-0.633804,0.825349}, + {0.394338,-0.576349}, + {0.468509,0.024264}, + {0.255173,-0.901778}, + {0.346377,-0.280184}, + {0.110180,0.975376}, + {-0.753469,-0.647554}, + {0.651564,-0.547723}, + {-0.144017,0.548258}, + {-0.046057,-0.679254}, + {-0.688028,0.887658}, + {-0.445831,-0.479626}, + {-0.456182,0.267624}, + {-0.799260,0.204550}, + {0.563612,-0.771680}, + {0.352540,0.832719}, + {-0.186709,-0.571833}, + {-0.293953,-0.033501}, + {-0.817521,0.420114}, + {-1.095604,-0.434751}, + {1.279435,-0.039357}, + {-0.247834,0.165422}, + {0.921388,0.559970}, + {-0.060142,0.715675}, + {0.740212,1.014127}, + {-0.452908,0.311206}, + {-0.067195,-0.201576}, + {-1.385389,-0.762611}, + {-1.021316,-1.118405}, + {1.760285,0.265590}, + {-0.914306,0.241406}, + {-1.244930,-0.148217}, + {-0.866724,0.107860}, + {0.289939,-1.543434}, + {0.245372,0.941026}, + {0.353275,-0.177928}, + {-0.031020,1.110706}, + {0.377406,-0.075570}, + {-0.164487,1.047496}, + {-0.499391,-0.473578}, + {0.300038,-0.640920}, + {-0.628968,0.062134}, + {0.489684,-0.638970}, + {-0.015019,0.460942}, + {-0.638345,-1.058916}, + {-0.916723,0.886223}, + {-0.333517,0.053708}, + {0.736499,-0.159192}, + {-0.594457,0.367349}, + {-1.222093,-0.085438}, + {0.251137,-0.073996}, + {0.161582,0.194835}, + {-0.380923,0.667572}, + {-0.679757,-0.361005}, + {-0.028839,0.205199}, + {1.091436,-1.342332}, + {-0.221619,-0.241515}, + {-1.053060,0.026055}, + {0.644250,-1.217245}, + {-1.450051,0.901819}, + {-0.920654,-0.715461}, + {-0.130068,1.003309}, + {1.031255,0.523672}, + {-0.136103,-1.381621}, + {-0.011925,-0.254506}, + {-0.960022,1.478489}, + {0.103113,-1.121767}, + {-0.272495,0.511347}, + {0.286424,0.059268}, + {1.022935,0.594292}, + {0.591589,0.954365}, + {0.350593,-0.458349}, + {-0.050092,0.359806}, + {-1.176490,0.825566}, + {-0.680308,-1.571630}, + {0.664836,-1.675775}, + {0.341383,-0.000495}, + {-0.036233,0.927286}, + {-1.339825,-0.242439}, + {-0.295042,-1.175472}, + {0.327445,-0.305612}, + {-1.334769,0.363978}, + {-0.428302,-1.062567}, + {0.329631,0.597784}, + {0.869728,-1.290804}, + {0.836562,0.583755}, + {-0.647207,-0.128658}, + {-0.438580,-0.636896}, + {-0.104333,1.364442}, + {0.134730,-0.418112}, + {-0.297180,-0.005213}, + {-0.277926,-0.075135}, + {-0.356162,-1.540321}, + {-0.315842,-0.300644}, + {-1.054645,0.153170}, + {-0.247471,0.149554}, + {1.167076,-0.050294}, + {-1.150539,-0.133037}, + {1.375072,-0.851715}, + {0.074937,-0.949878}, + {-0.757522,-0.348698}, + {-0.904564,0.281156}, + {-0.601026,-0.749410}, + {-0.559856,0.573678}, + {-1.146828,0.569818}, + {0.867965,0.745430}, + {-1.303702,-0.904121}, + {0.878923,-0.963699}, + {-0.201701,-0.181087}, + {0.623439,-1.377927}, + {-0.196558,-0.155427}, + {0.545429,0.059872}, + {-0.546805,-0.394397}, + {-0.673582,0.666513}, + {-0.904560,0.345434}, + {-0.404512,0.602264}, + {0.037119,0.766632}, + {0.114462,0.094188}, + {0.152701,0.227803}, + {0.192302,0.350055}, + {-0.806506,0.365440}, + {1.434434,0.090690}, + {-0.927956,0.028970}, + {-0.935372,-0.873602}, + {-0.008948,-0.719395}, + {0.984091,-0.139250}, + {-0.659274,0.742974}, + {-0.389700,0.424576}, + {-0.417964,-0.791927}, + {-0.496517,-0.670771}, + {-0.839619,-0.452674}, + {0.353229,-0.699395}, + {0.160866,0.370645}, + {-1.017395,1.246349}, + {-0.215995,-0.034148}, + {-0.917350,0.216393}, + {0.676833,-1.047976}, + {0.260097,0.124759}, + {0.217774,-0.111813}, + {0.676580,-0.052744}, + {0.283784,0.299891}, + {-0.063002,-0.428329}, + {0.105711,-0.622631}, + {-0.355259,-0.471869}, + {0.266862,0.081740}, + {-1.059721,0.037092}, + {-0.335785,-0.856030}, + {0.165769,0.484277}, + {-0.709411,-0.235252}, + {0.027820,0.592038}, + {0.069184,0.501440}, + {1.395272,2.336471}, + {0.930130,0.779630}, + {0.985494,0.017321}, + {0.462865,-0.679985}, + {-0.562682,-0.638530}, + {-0.220520,-1.015673}, + {0.447075,0.614206}, + {-0.113999,0.348454}, + {-0.330527,-1.009147}, + {0.389321,-0.059019}, + {0.160636,1.179804}, + {0.951858,0.075998}, + {0.220489,0.169580}, + {1.011409,-1.264994}, + {0.431117,-0.022166}, + {1.354951,0.693625}, + {0.365787,0.922387}, + {-0.335963,0.354223}, + {-0.231851,1.246409}, + {0.039846,-0.434578}, + {-0.640260,-0.246655}, + {1.010049,-0.948681}, + {0.420819,0.066446}, + {-0.792475,-0.850887}, + {-0.136391,-0.217795}, + {-0.306861,-1.044193}, + {0.599871,0.242422}, + {0.837296,-0.704235}, + {-1.036397,0.218225}, + {-0.362114,-0.270397}, + {-0.815529,-0.643457}, + {-0.346423,0.137188}, + {-0.533657,0.614111}, + {0.894783,0.792716}, + {0.996665,0.135734}, + {-1.810934,-0.175269}, + {0.231803,0.610888}, + {-0.033074,-0.878133}, + {1.029652,-0.537181}, + {0.969218,-0.136601}, + {0.637612,0.569671}, + {-0.856078,0.008827}, + {-0.884361,0.905464}, + {0.266886,0.602131}, + {0.724282,0.927329}, + {0.656946,1.176936}, + {0.385285,0.453920}, + {0.428491,1.218457}, + {-0.534283,-0.476385}, + {1.265943,-0.071326}, + {1.205410,0.119519}, + {0.729693,0.805513}, + {0.792140,0.259950}, + {0.032696,0.915109}, + {0.577120,-0.330747}, + {0.393790,-0.488283}, + {-0.285168,-0.266736}, + {-1.092401,0.351137}, + {-0.410238,-0.455906}, + {-0.112126,-1.848342}, + {-0.694043,0.586241}, + {-0.282187,-0.084074}, + {0.208143,-0.690431}, + {-0.294220,-0.077478}, + {0.114810,-0.640660}, + {0.317942,0.617271}, + {-1.111586,0.978228}, + {0.522150,1.274807}, + {-0.714204,0.099528}, + {-0.270756,-0.875450}, + {0.562005,-0.039459}, + {0.705905,0.860567}, + {0.762285,1.074943}, + {-0.776165,-0.025768}, + {-0.459283,-0.636944}, + {0.185427,-0.185363}, + {0.204738,0.186381}, + {0.973185,0.077738}, + {-0.292046,-0.508409}, + {0.513353,-0.271946}, + {0.003043,0.871596}, + {0.688854,0.660598}, + {0.210751,0.387266}, + {-0.279586,-1.103817}, + {-0.688930,0.757404}, + {0.565899,-0.300622}, + {0.174615,0.399735}, + {0.138945,0.695770}, + {0.223658,0.384469}, + {-1.073520,-0.360915}, + {-0.489023,-0.405400}, + {-0.605479,-1.167890}, + {-0.411600,0.781236}, + {-1.073459,1.248510}, + {0.810854,-0.254195}, + {1.234502,-0.806495}, + {0.260701,1.174122}, + {-0.372537,1.946493}, + {0.314475,0.895673}, + {-1.009274,0.473788}, + {-0.182152,-0.423023}, + {0.252709,2.433176}, + {0.355098,0.295953}, + {-0.547349,0.145758}, + {-0.602792,0.126766}, + {-0.736203,-0.064009}, + {0.927410,-0.913014}, + {0.685445,0.595637}, + {-1.650825,-0.447151}, + {0.274037,0.349263}, + {0.465722,0.789074}, + {-0.162240,-0.368575}, + {-0.699205,-0.695247}, + {-1.299655,-0.834587}, + {-0.112135,0.439572}, + {-0.554151,0.008035}, + {0.843647,-0.401783}, + {-0.043751,-0.334123}, + {1.091176,0.919460}, + {-0.122626,-0.120011}, + {0.282004,0.565924}, + {1.054618,0.582818}, + {-0.770044,0.182383}, + {-0.377127,-0.662357}, + {0.699934,-0.416461}, + {0.725721,-2.274378}, + {-0.285218,-0.376295}, + {-0.046947,0.662061}, + {-0.150529,-0.552474}, + {0.366969,-0.279145}, + {-0.522761,0.138649}, + {0.359948,-1.543065}, + {-1.101930,-0.354878}, + {0.338112,-0.700804}, + {-0.408526,0.129634}, + {0.649985,-0.651205}, + {0.418800,-0.999764}, + {0.357306,-1.544311}, + {-0.381705,-0.067610}, + {-0.161721,0.259118}, + {-0.606741,0.789184}, + {0.281002,0.526998}, + {0.011339,-0.794455}, + {-1.830912,-0.398614}, + {-0.550333,0.484507}, + {0.380872,0.240877}, + {-0.333808,0.561707}, + {-0.306073,-0.400679}, + {0.455130,0.236129}, + {-1.028073,-0.645612}, + {-0.594235,-0.259487}, + {-0.990751,0.305760}, + {0.006477,-1.019058}, + {0.269924,-0.321009}, + {-0.232176,-0.961120}, + {-0.595080,-0.028841}, + {1.278412,0.318883}, + {0.447321,1.388019}, + {0.532051,0.673116}, + {-1.563452,-0.046970}, + {-0.449587,0.019068}, + {0.606453,-0.602681}, + {1.166692,-0.056815}, + {-0.500489,0.600240}, + {-0.500505,-0.287763}, + {0.713353,-0.974392}, + {0.627625,-0.903950}, + {0.360888,0.126583}, + {-0.455974,-0.380084}, + {-0.104278,-0.465263}, + {0.651519,0.420961}, + {0.788706,0.245607}, + {0.070684,-0.600027}, + {0.647984,-0.619099}, + {0.649698,-1.690212}, + {0.318449,0.028318}, + {-1.471110,1.370645}, + {1.207134,-0.322368}, + {-0.685125,0.769329}, + {1.287764,0.797221}, + {-0.996293,1.087134}, + {0.442161,-0.195315}, + {0.121135,0.058126}, + {1.045922,0.679832}, + {0.873562,0.306245}, + {-0.946556,-1.014899}, + {-1.098702,-0.429317}, + {-0.259191,0.604008}, + {-0.446836,-0.599038}, + {0.079361,-0.237178}, + {-0.530503,0.677970}, + {-0.601736,0.605187}, + {-0.160833,0.081568}, + {-0.692943,-1.922262}, + {-1.351586,-0.764923}, + {-0.910394,1.516147}, + {-0.447204,0.696053}, + {-1.603351,0.949397}, + {0.853493,-0.313292}, + {-0.782020,0.417463}, + {-0.229522,0.508701}, + {0.760533,-0.023716}, + {0.227146,0.243735}, + {-0.842789,0.148573}, + {0.517921,-0.314691}, + {0.692720,0.314784}, + {0.280511,0.102037}, + {0.665274,-0.165350}, + {0.082569,0.733769}, + {0.296156,1.171633}, + {1.047696,0.574972}, + {1.019455,0.327643}, + {0.590864,-0.069291}, + {0.058153,-0.552653}, + {0.532137,-0.655718}, + {0.030514,0.631288}, + {0.014617,0.384621}, + {1.061152,0.155026}, + {-1.531251,0.473269}, + {0.989563,0.018146}, + {-0.456740,0.513566}, + {0.652150,0.217298}, + {0.305406,-0.295892}, + {-2.437038,-0.899029}, + {0.129350,0.230154}, + {-0.072882,-0.255708}, + {1.735334,-0.122027}, + {0.357863,-0.822077}, + {-0.260330,-1.094809}, + {-0.618916,0.441565}, + {-0.692015,0.582413}, + {-0.962700,-0.265797}, + {-0.354149,0.603085}, + {-0.086914,-0.518697}, + {-0.573745,-0.565417}, + {0.606341,0.808186}, + {-0.799331,0.580242}, + {-0.096986,0.161126}, + {0.633315,0.549819}, + {-0.144446,0.177149}, + {0.781768,0.531140}, + {0.338951,-0.899343}, + {0.498622,-0.161978}, + {-1.030481,0.406074}, + {-0.853416,0.247330}, + {-0.021314,0.430044}, + {-0.792349,-0.084728}, + {0.661328,1.015329}, + {-0.127205,0.562281}, + {0.597676,0.621570}, + {0.134817,0.231554}, + {-0.159303,-0.083000}, + {1.241670,-0.215870}, + {0.511646,-0.487637}, + {0.396153,0.003545}, + {-0.879940,-0.429533}, + {-0.720669,0.339226}, + {-0.316744,0.113981}, + {-0.177206,1.125024}, + {-1.768052,-1.277820}, + {0.241700,-0.037855}, + {-0.839180,0.779339}, + {-0.368304,-0.224287}, + {-0.788630,0.576087}, + {0.842764,-0.512279}, + {-0.162576,0.392872}, + {-0.704226,0.243854}, + {0.131859,-0.414154}, + {-0.819482,-1.100527}, + {-0.470748,0.467712}, + {-0.316207,0.030052}, + {-0.235583,-0.156785}, + {-0.557592,-0.375994}, + {-0.784024,0.716792}, + {-0.032535,0.712314}, + {-0.122718,0.060842}, + {0.256587,-0.063350}, + {1.593900,-0.262349}, + {-0.241222,1.230849}, + {0.595739,0.423673}, + {0.891444,0.670761}, + {0.005808,0.459865}, + {0.340771,-0.696366}, + {-0.238902,0.415223}, + {-0.572688,-0.354505}, + {-0.059561,0.494342}, + {0.693758,-0.277854}, + {-0.037608,-0.300489}, + {0.644744,1.106841}, + {0.232660,0.485564}, + {2.011315,0.810211}, + {1.047770,-0.099242}, + {1.206122,0.597776}, + {-1.206184,0.417061}, + {-0.522987,0.244164}, + {-0.036536,0.528486}, + {-0.624421,-0.312582}, + {0.898749,0.177874}, + {1.192713,-0.990058}, + {0.498853,-0.556840}, + {0.589997,-1.001501}, + {0.623528,-0.219887}, + {0.082308,0.170954}, + {-0.289952,0.937628}, + {-0.907912,-0.664638}, + {0.010034,-0.573764}, + {0.911873,0.898607}, + {0.204328,0.208605}, + {0.886008,0.671941}, + {-0.238965,-0.470697}, + {-0.047580,-1.367534}, + {0.445139,0.183575}, + {-0.257686,1.029901}, + {0.650779,0.298196}, + {-1.048885,0.864492}, + {0.018705,1.086719}, + {0.353729,-0.758869}, + {0.135370,-0.483281}, + {-1.076019,0.680627}, + {1.100044,0.598223}, + {-1.294965,1.147402}, + {-0.106790,0.436389}, + {-0.743914,1.121257}, + {-0.871260,1.178553}, + {0.204845,-0.486308}, + {0.361820,-0.974340}, + {-0.206131,0.818694}, + {0.788987,0.506632}, + {0.344848,-1.206124}, + {1.204349,-0.052713}, + {0.485916,-0.425330}, + {-0.356002,1.018318}, + {-0.627702,0.255646}, + {-1.301431,0.413334}, + {0.247930,-0.302713}, + {-1.193767,0.508636}, + {0.802304,-0.014054}, + {0.225364,0.597259}, + {1.130788,0.014869}, + {-0.375125,-0.713056}, + {-0.887297,-1.193802}, + {0.911819,0.357139}, + {0.102299,1.114198}, + {0.346137,0.583719}, + {-0.295741,-0.163232}, + {0.306565,0.062372}, + {-0.387799,0.117200}, + {-0.078818,0.039897}, + {-0.951657,-0.147061}, + {0.531560,-0.532658}, + {-0.922460,0.370301}, + {-0.800399,0.384196}, + {0.207158,1.049643}, + {-0.855953,0.709615}, + {0.833019,0.272167}, + {0.272961,0.796026}, + {0.862792,0.320292}, + {-2.027771,-0.518041}, + {0.382846,-0.137945}, + {-0.116166,-0.315429}, + {-0.168185,-0.144519}, + {0.531779,0.133622}, + {-0.516350,-0.152330}, + {-0.127356,-1.375547}, + {-0.105342,0.100885}, + {0.525022,-0.939381}, + {-0.066998,0.440557}, + {-0.397364,0.443860}, + {0.503200,0.746156}, + {-0.431620,0.075595}, + {-0.841891,0.743002}, + {1.371081,-0.365098}, + {-0.010784,-0.465652}, + {0.020112,-0.041097}, + {0.826739,0.182882}, + {-0.613873,0.704830}, + {-0.568370,0.143343}, + {0.387460,-0.545298}, + {0.021157,-0.747607}, + {1.302628,0.905500}, + {0.261942,-0.033071}, + {0.376649,0.470807}, + {-0.612337,-0.531302}, + {0.841322,0.076988}, + {-0.153153,0.320945}, + {-0.874257,-0.702040}, + {0.165278,-1.657980}, + {-0.147901,-1.012033}, + {-1.277508,0.406026}, + {0.962158,-0.812888}, + {0.570132,-0.249752}, + {0.178017,0.240519}, + {0.221700,-1.244702}, + {-1.203450,0.112039}, + {0.203837,-0.704907}, + {0.134167,-0.222161}, + {-0.462939,-1.592425}, + {-0.032346,0.235999}, + {0.386704,-0.786325}, + {-0.693315,0.928200}, + {-2.135864,0.434740}, + {1.006662,1.715587}, + {-0.142810,-0.802204}, + {0.458850,0.565148}, + {-0.338997,1.517529}, + {-0.803918,0.696678}, + {-0.048029,0.081896}, + {0.172872,-1.381249}, + {-0.463157,0.151494}, + {0.014982,-0.330029}, + {0.131682,0.900381}, + {1.245995,-0.694195}, + {0.723281,0.823227}, + {-1.268782,0.935669}, + {-0.323588,0.329887}, + {-0.826465,0.789808}, + {0.969452,0.147947}, + {-0.086800,-0.739140}, + {0.330504,-0.580053}, + {0.613212,-0.291821}, + {1.508769,0.762460}, + {0.427432,-0.078387}, + {0.241827,-0.720148}, + {0.103200,0.692154}, + {0.237121,-0.186097}, + {0.383141,0.836269}, + {-1.686991,-0.116805}, + {0.357785,0.936704}, + {0.009202,-0.259852}, + {-0.364276,0.361380}, + {-0.452860,1.136152}, + {-0.503536,0.666926}, + {1.115614,0.371158}, + {-0.140742,0.824371}, + {-0.082390,-0.656057}, + {-1.230565,0.359913}, + {0.005553,-0.198844}, + {1.238036,-0.548324}, + {-0.707677,-0.575827}, + {0.561192,-0.372388}, + {0.495972,1.965641}, + {0.693577,-0.278012}, + {-0.501385,0.209282}, + {1.174469,-1.508376}, + {0.645479,-1.112553}, + {0.216551,1.222801}, + {0.317056,-0.152965}, + {0.192083,0.034963}, + {-0.110488,-0.462419}, + {-0.666300,-0.015961}, + {-1.752495,0.399985}, + {-0.469240,0.924181}, + {-0.274931,0.641528}, + {-0.312214,-0.016273}, + {-0.517574,-0.530389}, + {0.833532,0.046255}, + {0.684154,-0.745428}, + {-0.955607,0.071248}, + {-0.251567,0.985285}, + {-0.121152,-0.148834}, + {-0.009011,0.787854}, + {-0.649552,0.048180}, + {-0.425329,0.878791}, + {0.393766,0.793184}, + {0.526353,-1.044814}, + {-0.425715,0.097562}, + {0.345638,-0.549481}, + {0.697957,-0.674357}, + {0.905744,0.301798}, + {0.974970,0.602490}, + {-0.901499,-0.882178}, + {-0.019264,-0.630321}, + {-0.421427,0.049030}, + {-0.217801,-1.297212}, + {0.182897,-0.126145}, + {0.128832,-1.435972}, + {-0.107732,-0.836753}, + {-0.777310,0.461033}, + {0.206962,-0.196436}, + {1.346730,-0.307975}, + {0.401943,0.332010}, + {0.044175,0.580896}, + {0.186951,0.580326}, + {0.198179,0.439384}, + {-0.265917,0.422116}, + {0.364858,1.826492}, + {0.891892,-0.698183}, + {1.583665,-1.221355}, + {-0.190341,0.962946}, + {-0.174967,-0.009207}, + {0.729038,-0.307764}, + {0.043398,-1.428511}, + {-0.680441,0.960596}, + {0.250274,0.295808}, + {0.032164,-0.418385}, + {-0.197256,-0.704446}, + {-1.712183,-1.163529}, + {-0.268695,-0.200849}, + {2.306987,2.318621}, + {0.060264,0.224934}, + {0.578235,0.321018}, + {0.028329,-0.398577}, + {-0.468995,0.372626}, + {-0.486544,1.004021}, + {-1.324421,-0.240098}, + {-0.516670,0.486116}, + {1.493896,-0.392662}, + {0.129571,-0.570646}, + {0.163091,-0.300952}, + {-0.249986,0.337349}, + {-0.795421,-0.775087}, + {-1.050828,-0.478171}, + {-0.687893,-1.095394}, + {0.446193,-0.334549}, + {0.207191,1.248893}, + {1.304610,0.004308}, + {-0.531389,-0.521206}, + {0.856143,-0.371803}, + {-0.436616,1.111738}, + {-1.420017,-0.184266}, + {1.140460,-1.630379}, + {0.161864,0.404858}, + {-0.253171,-0.606452}, + {-1.208974,1.509948}, + {-0.954164,-1.303938}, + {-0.048128,0.715313}, + {0.256096,-0.413618}, + {0.282291,1.407356}, + {0.056407,0.582285}, + {0.394826,0.319440}, + {-0.481465,-1.111214}, + {0.591739,0.508274}, + {0.032651,0.767816}, + {-0.134227,0.328188}, + {0.092560,-0.469654}, + {0.797004,-0.160862}, + {0.769209,1.001893}, + {0.898712,0.476407}, + {-0.606030,0.660273}, + {0.035930,-0.406220}, + {0.549958,0.477784}, + {0.930700,0.739616}, + {-0.352887,0.120378}, + {1.456712,-0.987803}, + {-2.326077,-0.576206}, + {0.005039,-0.663576}, + {0.271949,0.400765}, + {1.016654,-0.532382}, + {0.578166,0.345697}, + {1.335427,-0.691842}, + {0.346829,-1.486777}, + {-1.153416,-1.026001}, + {0.223860,0.210608}, + {-0.190999,-0.519098}, + {-0.198968,0.263295}, + {0.651483,0.398883}, + {-0.549925,-0.275894}, + {-1.229674,-0.017529}, + {-1.383489,0.757820}, + {-0.253172,0.217579}, + {-0.816223,-0.232510}, + {0.104862,0.528907}, + {0.079655,0.495187}, + {-1.060489,0.302825}, + {-0.137642,0.212762}, + {0.674357,0.008222}, + {-0.048395,0.926425}, + {0.412030,-0.840911}, + {0.237129,0.647045}, + {0.339638,-0.335510}, + {0.284322,1.034499}, + {-1.397022,-0.292628}, + {-0.146085,0.519480}, + {-0.041487,-0.555443}, + {0.577501,-0.304147}, + {0.311928,-0.446547}, + {0.635509,-0.519239}, + {-1.033277,-1.288549}, + {0.731980,0.033399}, + {-1.854763,-0.310873}, + {-0.244777,0.164482}, + {0.177305,-1.028995}, + {-0.848186,-1.102416}, + {0.208618,0.238623}, + {0.141655,-0.253353}, + {0.171815,0.430131}, + {-0.300252,0.385949}, + {-0.002417,0.000851}, + {0.140724,0.631155}, + {-0.361690,-0.341663}, + {0.452532,1.566797}, + {-0.983234,-0.383707}, + {-0.919083,-0.153251}, + {-0.570362,-0.004002}, + {0.012526,0.451240}, + {1.078805,0.115248}, + {-0.303834,-0.334887}, + {0.111197,-0.445325}, + {0.190372,0.714853}, + {0.826630,-0.758796}, + {-0.855694,-0.601218}, + {-0.240251,0.838381}, + {0.169116,0.269469}, + {-0.758837,-0.535851}, + {0.833886,0.712264}, + {-1.228975,-1.041728}, + {-0.454220,1.116119}, + {1.266360,0.991548}, + {0.399368,0.572129}, + {0.284363,0.183403}, + {0.852430,-0.069496}, + {-0.634331,0.143028}, + {0.704158,-0.787308}, + {-0.348563,-0.322614}, + {-0.926186,0.376325}, + {0.743159,0.167845}, + {2.017916,1.018183}, + {0.808439,-0.898639}, + {-0.362709,-0.359190}, + {-0.263045,-1.681332}, + {-0.155017,-0.596109}, + {-0.058238,-0.339211}, + {-1.052586,-0.827454}, + {0.083530,-0.579545}, + {0.798530,0.075240}, + {-0.671206,-0.110130}, + {-0.032062,-0.960990}, + {0.473355,0.406486}, + {0.724043,0.644396}, + {-0.324565,0.679171}, + {-0.260678,0.183511}, + {-0.340520,-0.690654}, + {-0.490994,-1.070487}, + {-0.102180,-0.653080}, + {1.588020,1.305983}, + {-0.284747,0.210628}, + {-0.084555,0.093298}, + {-0.200014,0.790467}, + {-0.717793,0.363149}, + {0.131695,-0.446003}, + {0.914407,0.814170}, + {-0.202136,-0.003753}, + {1.277709,0.898150}, + {0.656615,-0.393242}, + {-0.156783,0.685943}, + {-0.206718,0.503998}, + {0.201327,0.404118}, + {0.042250,-0.107335}, + {-0.870850,0.210164}, + {0.381354,0.642557}, + {-0.595277,0.854957}, + {0.322635,0.139045}, + {1.736598,0.188796}, + {0.862338,-0.908735}, + {0.952138,-1.054378}, + {0.771591,0.755734}, + {0.080442,-0.425273}, + {0.711784,0.796568}, + {0.221518,0.711452}, + {-0.754410,0.214646}, + {0.297972,-0.998691}, + {-0.023798,-0.667344}, + {-0.064961,-0.853014}, + {0.082753,0.438751}, + {-0.829817,-0.535958}, + {0.179596,0.170377}, + {-0.232841,0.874216}, + {1.184970,0.506020}, + {0.638693,-1.085547}, + {0.618905,0.086848}, + {0.091035,-1.093523}, + {1.586531,-0.145763}, + {0.781375,-0.734368}, + {-0.439204,-0.368124}, + {0.884153,-0.881938}, + {0.443501,0.046392}, + {-0.000463,-2.010197}, + {-1.341146,0.413517}, + {-0.115972,-0.617283}, + {0.576521,-0.591029}, + {0.262853,0.282668}, + {0.454027,-0.299344}, + {0.561599,-1.411193}, + {0.847940,-0.386760}, + {0.162330,-1.607905}, + {0.019188,0.449590}, + {0.667390,0.097850}, + {1.070732,-0.511950}, + {0.837035,0.531196}, + {0.366102,-0.046720}, + {-0.715692,0.543561}, + {-0.021125,-0.195383}, + {0.548797,-1.182353}, + {1.307617,-0.209852}, + {0.563610,0.627996}, + {0.085233,0.093108}, + {-0.445645,1.093604}, + {-0.920394,1.114292}, + {-0.394214,0.442132}, + {-0.175037,0.756531}, + {-1.486353,0.249107}, + {0.036325,-1.007293}, + {-0.348203,0.752406}, + {-0.502838,0.733700}, + {-0.386542,-0.143784}, + {-0.289604,1.540041}, + {-0.112224,0.139364}, + {-0.060213,-0.734811}, + {0.401407,1.469775}, + {0.455272,0.162539}, + {-0.151403,0.737257}, + {0.767557,-0.397638}, + {-0.392108,-0.373642}, + {0.602157,-0.607477}, + {-0.745662,-0.034958}, + {-1.102743,0.087956}, + {-1.559189,0.464934}, + {-1.466796,0.183389}, + {-1.075429,-0.243765}, + {-0.902469,-0.918449}, + {0.135849,0.153793}, + {-0.867781,-0.363082}, + {1.109122,0.450055}, + {-0.862578,0.592056}, + {-0.417136,0.030326}, + {1.119029,0.172928}, + {-0.460388,1.450624}, + {-0.383553,-0.286544}, + {0.769042,0.259261}, + {-0.624490,1.200131}, + {-1.122671,-0.736922}, + {-1.806449,0.235413}, + {-0.034734,-1.440604}, + {0.183904,-0.178401}, + {0.345460,-0.134209}, + {-0.048553,-0.107624}, + {-1.055511,-0.230159}, + {-0.770478,1.603207}, + {0.225398,1.413173}, + {-0.771651,-0.881477}, + {0.297900,-0.163596}, + {-0.747235,0.837724}, + {1.266946,-0.261761}, + {0.714842,-0.900438}, + {0.566732,-0.227364}, + {-0.266881,-0.036107}, + {-0.791542,0.149132}, + {-1.792347,-0.319528}, + {-0.653766,0.011991}, + {1.200644,0.555262}, + {0.282989,-0.753802}, + {0.528717,0.482407}, + {-0.546723,-0.455929}, + {0.266867,0.694730}, + {0.516831,0.923688}, + {0.182959,-1.056826}, + {-1.486910,-0.208888}, + {1.201567,0.192398}, + {-1.757454,-0.151676}, + {1.324179,-0.469352}, + {0.040209,0.160468}, + {0.654096,-0.624048}, + {0.357661,0.980737}, + {0.058591,-0.693167}, + {-0.122160,-1.377046}, + {0.281492,0.331693}, + {-0.082028,0.294920}, + {1.769671,0.812195}, + {0.098679,0.119134}, + {-1.443098,-1.187373}, + {-0.280626,-0.135435}, + {0.589831,0.260585}, + {-0.540208,-0.744497}, + {0.140753,0.497638}, + {-1.508149,-0.600368}, + {-0.545563,1.017052}, + {0.626888,-0.915797}, + {-0.053717,-0.598712}, + {-0.550529,0.572603}, + {0.159770,1.587399}, + {-1.196120,0.802992}, + {-0.515035,0.547389}, + {-0.008116,0.409647}, + {-1.058518,0.054808}, + {-0.042508,-0.559489}, + {0.011590,0.322688}, + {1.052709,0.384123}, + {0.425621,-0.744465}, + {-1.279637,1.410061}, + {0.107505,-1.717265}, + {-0.850488,-0.542529}, + {-0.969962,0.197049}, + {0.045225,-1.201257}, + {-0.701234,0.348909}, + {0.254005,-0.689191}, + {0.696662,0.251047}, + {1.158640,-0.473769}, + {-0.674666,0.000070}, + {-1.079858,-0.744986}, + {-0.956900,-0.604828}, + {0.336681,0.096805}, + {0.749376,0.408288}, + {-0.341699,-0.132789}, + {-0.566410,-0.063452}, + {-0.307095,0.690775}, + {1.362382,-0.954373}, + {0.027733,0.171340}, + {-0.043149,-0.889067}, + {-0.759746,-0.387685}, + {-0.014074,0.110098}, + {1.941074,1.179552}, + {-0.316348,1.024601}, + {0.686783,-0.662860}, + {-0.480265,-0.318199}, + {-0.301052,0.547353}, + {-0.658741,0.133439}, + {0.219759,0.560583}, + {-0.128545,-0.937591}, + {0.937029,0.858481}, + {0.636270,-0.195326}, + {-0.333245,-0.881758}, + {0.799974,0.622142}, + {-0.008765,-0.681762}, + {-0.344503,-0.152322}, + {-0.269002,-0.978158}, + {-1.401038,0.473890}, + {-0.254753,-0.199118}, + {0.501615,-0.004429}, + {0.223899,0.481336}, + {-0.846760,0.430996}, + {-0.061397,-1.110077}, + {-1.262684,-0.975124}, + {-0.255968,0.443139}, + {0.165242,2.157322}, + {0.171348,-0.113452}, + {0.784235,0.826362}, + {-0.930326,-0.142924}, + {-1.016804,-1.041038}, + {0.053696,0.188937}, + {-1.831388,-0.308341}, + {0.956302,-0.422604}, + {-0.814804,-1.598612}, + {0.125995,-0.841216}, + {1.222502,-0.172663}, + {-0.066590,0.294008}, + {1.467924,0.078648}, + {-0.594113,0.074105}, + {0.454844,0.418237}, + {-0.355792,-1.712601}, + {0.280973,0.482542}, + {-1.677893,-0.708101}, + {-0.143138,-0.222046}, + {0.185764,-0.182096}, + {-1.591763,0.811301}, + {-0.872062,0.528511}, + {0.531152,0.105743}, + {-0.405518,-0.243221}, + {-0.285285,-0.724835}, + {1.211926,-0.938313}, + {-0.311116,0.708844}, + {0.452738,0.246767}, + {-0.734349,-0.015975}, + {0.504125,-0.297089}, + {-0.550223,-0.407948}, + {1.386104,-1.647487}, + {-0.532341,-0.778504}, + {-1.609207,-0.322142}, + {0.151805,0.083478}, + {0.045700,0.360312}, + {-0.209418,0.028573}, + {-0.028010,-0.531229}, + {-0.297919,-0.606391}, + {-0.227399,-0.036008}, + {-1.071328,0.802874}, + {1.611743,-0.469932}, + {-0.639568,1.269852}, + {1.007945,0.734555}, + {0.278845,1.802139}, + {-0.074947,1.028369}, + {0.512044,-1.046021}, + {0.400092,0.083723}, + {-0.560397,-0.243498}, + {0.036739,0.207770}, + {0.571326,0.324339}, + {0.186415,-0.351682}, + {-0.457269,0.176103}, + {0.021670,-0.065631}, + {0.511796,-0.018099}, + {1.735932,-1.412607}, + {-0.650731,-1.358326}, + {0.575977,0.636595}, + {0.654576,-0.152643}, + {-0.490564,0.772623}, + {-0.524959,-0.161241}, + {-0.658197,-0.312236}, + {0.163393,-0.340469}, + {0.656293,0.638867}, + {0.501754,-0.811553}, + {0.440917,0.449741}, + {1.556753,0.811315}, + {0.841730,-0.772732}, + {0.660040,-0.888669}, + {-0.782535,-0.242943}, + {1.033138,-1.092518}, + {-0.069224,0.487574}, + {0.387082,-0.053341}, + {-0.254564,-0.830744}, + {-0.007638,-0.247230}, + {-0.661025,0.930161}, + {0.606968,-0.680955}, + {-0.137605,0.289561}, + {0.863396,0.128169}, + {-0.349560,-0.836361}, + {-1.438246,-1.537779}, + {-0.460247,-1.009597}, + {0.728357,-0.362308}, + {-0.050639,-0.243558}, + {-0.679497,0.781298}, + {0.658934,0.412632}, + {0.670115,0.267368}, + {0.123810,-0.916516}, + {0.868722,-1.620722}, + {-0.145830,0.480333}, + {-1.145276,-0.014976}, + {-0.108175,-1.215163}, + {-0.449991,-0.695477}, + {0.354733,0.823464}, + {-0.039724,-0.098980}, + {0.013556,0.499284}, + {-1.312451,-0.054851}, + {-0.830864,0.524224}, + {0.486311,-0.717254}, + {0.643189,-0.177630}, + {0.273871,0.698640}, + {0.853247,-0.305921}, + {-1.129702,0.190997}, + {0.373702,-1.523299}, + {-0.301040,0.189571}, + {-0.224603,0.155915}, + {0.831177,-0.779143}, + {1.389989,-0.223985}, + {-0.321807,-0.258173}, + {-0.366492,-0.422011}, + {-0.384236,0.224358}, + {-1.063747,-0.704562}, + {-0.555400,0.187686}, + {0.271893,0.617246}, + {-0.610279,-0.700190}, + {-0.551170,0.213321}, + {1.648215,0.778172}, + {-0.025453,-0.830363}, + {-0.219132,-0.100106}, + {-1.131840,0.570620}, + {0.351216,0.049910}, + {-0.316256,-0.207403}, + {-0.050467,1.734194}, + {-0.654866,0.299421}, + {0.150861,-0.684421}, + {-0.561852,0.297147}, + {-0.126410,0.789246}, + {-0.127865,-0.749320}, + {0.162245,1.241481}, + {1.336352,-0.647051}, + {-0.605969,0.480636}, + {-1.072146,0.585871}, + {0.768267,0.008915}, + {-0.399790,0.263734}, + {-1.004410,0.473403}, + {0.145836,0.570952}, + {0.647171,0.532919}, + {1.021832,-0.194468}, + {-0.166667,0.643500}, + {-0.062712,0.359724}, + {0.260920,1.286259}, + {0.702274,-0.475356}, + {-0.995690,-0.674690}, + {1.214113,0.161147}, + {-0.054271,-0.030268}, + {0.135363,0.245079}, + {-0.193862,-0.856533}, + {-0.446497,0.195088}, + {0.909234,0.465749}, + {0.027739,-0.240682}, + {0.202885,-0.391204}, + {-0.915654,-1.517288}, + {0.032038,0.801794}, + {-0.565640,-1.125811}, + {-0.746958,0.080219}, + {1.012414,-0.176261}, + {0.925715,0.171622}, + {0.504816,0.886424}, + {-0.055414,-1.707216}, + {0.331249,1.448197}, + {0.325529,-0.748697}, + {0.006156,-0.885744}, + {0.843520,-0.760984}, + {1.008421,-0.221801}, + {-0.978591,1.867998}, + {0.351767,1.119610}, + {-0.152918,1.039013}, + {-0.595093,0.442284}, + {0.844670,-0.308379}, + {0.716920,-0.336382}, + {0.461792,-0.273735}, + {0.097085,-0.336706}, + {-0.119997,0.705377}, + {0.216905,-0.214695}, + {-0.163907,0.691365}, + {0.046850,-0.395489}, + {-0.622611,-0.633670}, + {0.073035,-0.563313}, + {-1.652085,-0.637483}, + {0.004529,-0.510007}, + {-0.756162,-0.373366}, + {0.224175,0.104698}, + {0.240622,0.087521}, + {0.051187,0.920317}, + {1.667764,0.411180}, + {-0.117246,-0.234740}, + {-0.082710,-0.477874}, + {0.040677,-0.399180}, + {-0.950192,0.484832}, + {0.746072,-0.140056}, + {-1.349141,0.607029}, + {0.548435,-0.191376}, + {0.190776,-1.480638}, + {0.719537,1.345205}, + {1.446202,-0.580025}, + {0.053474,0.978262}, + {0.786674,0.753003}, + {-0.996297,0.640894}, + {1.383403,0.136313}, + {0.608127,0.754792}, + {-0.827608,-0.016325}, + {-0.924064,-0.682900}, + {-1.054567,-0.001422}, + {1.185203,1.589105}, + {0.496944,0.349206}, + {-0.169828,-0.384878}, + {-0.285749,0.247343}, + {-0.719044,-1.465544}, + {0.064705,-0.715851}, + {-0.313329,1.540674}, + {-0.565377,-0.220547}, + {-0.959113,-0.696998}, + {-0.265068,0.828256}, + {-0.231885,-0.521362}, + {0.084903,-0.990582}, + {0.419140,-0.095240}, + {0.278788,-0.044144}, + {0.586966,0.431494}, + {1.209696,0.763105}, + {-1.666831,-0.629313}, + {-0.497822,0.832480}, + {-0.142951,-0.554920}, + {-0.275496,-1.050326}, + {-0.478618,-0.636370}, + {0.782930,0.504903}, + {-0.082104,-1.564349}, + {-0.211217,0.853166}, + {1.084067,0.782337}, + {-0.055275,0.277204}, + {0.880825,-0.475584}, + {-0.949252,0.084678}, + {-0.211708,0.245726}, + {1.704036,0.424302}, + {0.077734,-0.365634}, + {0.216536,0.821771}, + {0.375309,-0.657953}, + {-0.659413,-0.187937}, + {-0.499583,-0.274513}, + {1.229467,-0.033242}, + {-0.267309,0.993163}, + {0.865415,0.210650}, + {-0.823692,-0.069652}, + {-0.540393,-0.407260}, + {-0.708647,-0.380446}, + {-0.456284,-0.443381}, + {-1.262311,-0.764377}, + {-0.321781,0.630733}, + {-0.588639,-0.187851}, + {-0.568256,0.499750}, + {0.373187,0.006208}, + {0.707336,0.348158}, + {1.672811,-0.006168}, + {-0.123496,0.243460}, + {-0.436994,0.521309}, + {0.221835,0.213596}, + {-0.110805,0.604376}, + {-0.453414,-0.656775}, + {-0.342502,-0.092188}, + {0.282574,1.154633}, + {-0.805164,0.800347}, + {0.792364,0.263727}, + {-0.117166,-0.150103}, + {-0.284043,1.115365}, + {0.454632,-1.305995}, + {-0.027046,-0.148701}, + {0.158758,-1.399725}, + {-0.035824,1.192414}, + {-0.761856,0.094855}, + {-0.008090,0.994581}, + {-0.259027,-0.931982}, + {-0.978369,-0.050289}, + {0.339204,-0.785655}, + {-0.301449,0.823972}, + {0.745963,0.972562}, + {1.820135,0.926824}, + {-0.182639,0.155852}, + {-0.307134,0.062589}, + {-0.356943,1.592747}, + {-0.810041,-0.170031}, + {0.924231,-0.092920}, + {-0.511708,-0.739995}, + {0.217789,0.214683}, + {0.727853,0.509274}, + {0.540418,0.119559}, + {1.247327,0.541364}, + {0.750281,0.697049}, + {0.211089,0.231808}, + {0.542634,0.268686}, + {0.250232,0.727131}, + {-1.260513,0.624552}, + {0.606138,-0.194470}, + {0.114722,0.116973}, + {-0.552551,-0.850632}, + {-0.586970,-0.054372}, + {0.199770,-0.540281}, + {-1.122043,-0.794103}, + {1.090813,0.071042}, + {-0.304107,0.113772}, + {0.555280,0.023257}, + {0.066496,-1.087529}, + {0.735559,1.299498}, + {-0.523713,-0.325003}, + {0.558212,-1.053250}, + {-0.542305,-0.417328}, + {0.228459,-0.174137}, + {0.882993,1.180572}, + {-0.210242,0.141900}, + {0.530180,-0.288710}, + {-0.867478,-0.490810}, + {0.680940,0.052579}, + {-0.190379,-0.716328}, + {2.098467,0.446381}, + {-0.802407,0.021896}, + {-0.050531,0.152073}, + {-0.548937,-0.769984}, + {1.160574,1.151177}, + {-0.844446,-1.831308}, + {0.469147,0.201575}, + {0.915001,0.416576}, + {0.447789,-1.554800}, + {0.498533,-0.152030}, + {0.333739,0.365833}, + {0.523884,0.261510}, + {0.102519,-2.132332}, + {1.322340,0.237185}, + {-0.666061,0.182718}, + {-0.547886,0.110171}, + {-0.885832,-0.119981}, + {-0.220295,0.279038}, + {0.672774,-0.493978}, + {0.201961,0.278770}, + {-0.698567,1.015529}, + {-0.547559,0.238427}, + {-0.900760,-0.019301}, + {0.850664,0.808783}, + {-0.435736,0.345590}, + {-0.166500,0.514461}, + {-0.734562,-1.054797}, + {-0.480065,0.153198}, + {1.169755,0.209574}, + {1.069664,0.606532}, + {-0.708567,-0.040850}, + {0.652199,-0.079326}, + {-0.719968,0.322006}, + {-0.514982,0.234570}, + {-1.101919,-0.339730}, + {0.150537,0.654555}, + {-0.736618,-0.262166}, + {-0.856246,-0.452481}, + {1.287460,-0.187745}, + {-0.217413,-0.915828}, + {0.609253,-0.743804}, + {-1.171250,-0.922717}, + {0.150368,0.415436}, + {1.201096,-0.573735}, + {-0.115596,0.661219}, + {1.042194,-0.088547}, + {0.005057,-0.396937}, + {-1.158327,-0.358233}, + {0.623459,-0.169205}, + {0.388201,0.751152}, + {0.895239,0.665853}, + {0.354939,0.105708}, + {-0.587396,-1.923318}, + {-0.061833,0.531589}, + {0.604179,-0.251531}, + {0.494426,0.338236}, + {-0.271009,-0.331057}, + {-0.256580,0.492214}, + {-0.088714,-0.383933}, + {1.123027,0.719944}, + {0.375988,0.313174}, + {0.236084,0.230468}, + {0.003886,-0.712924}, + {0.104498,1.606752}, + {-0.532576,0.330591}, + {-0.488381,-1.352006}, + {0.161545,1.723053}, + {-0.710498,-0.276665}, + {-0.986647,0.482909}, + {1.434283,0.726346}, + {0.068419,1.131931}, + {0.442032,-0.394590}, + {-0.239756,0.143242}, + {1.643873,-0.058546}, + {-1.003878,-0.192841}, + {0.122247,-0.079203}, + {-0.252594,-1.356311}, + {-0.869489,-0.064070}, + {-1.961857,-0.185462}, + {-1.899979,0.496400}, + {-0.109843,0.709934}, + {0.827485,-0.498313}, + {0.209843,1.037273}, + {-1.581375,-1.119497}, + {0.290475,1.032399}, + {0.668792,0.476572}, + {-0.433339,-0.944385}, + {0.323084,0.537194}, + {-0.221663,0.003856}, + {1.383254,-0.497884}, + {-1.198460,-0.892147}, + {-0.750552,0.230349}, + {-0.637159,0.240327}, + {1.023382,1.174099}, + {0.449877,1.718353}, + {0.110701,-1.119723}, + {0.188672,-0.085627}, + {-0.767622,0.429697}, + {0.022888,-0.290090}, + {0.029017,-0.575055}, + {0.569277,-0.179878}, + {-1.100726,0.865245}, + {-0.544482,0.275123}, + {-0.336701,-0.933121}, + {0.051869,0.544727}, + {0.845421,-0.138977}, + {-0.855811,0.654785}, + {0.146789,-1.087976}, + {-0.213152,0.076521}, + {1.014701,0.369228}, + {0.303512,-0.346069}, + {0.019167,0.409554}, + {0.812617,-0.834358}, + {1.338190,-0.103966}, + {0.776275,0.019837}, + {-0.804914,-0.226097}, + {-1.210668,-1.599920}, + {-0.354872,1.508185}, + {-0.577729,-0.030264}, + {1.140923,-0.684538}, + {-1.087623,0.646425}, + {-1.213811,1.245787}, + {-0.747429,0.088243}, + {-1.028906,1.421081}, + {0.269063,0.871054}, + {-1.154534,0.036896}, + {0.616763,0.386360}, + {-0.112931,-0.217046}, + {0.465623,-0.396933}, + {0.167084,-1.587480}, + {1.067098,1.142031}, + {-0.726521,0.527343}, + {0.521179,0.754796}, + {1.965600,-0.951334}, + {-0.493864,0.148753}, + {-0.789453,-0.495132}, + {1.154057,0.025690}, + {0.226936,0.017755}, + {-0.397219,0.138528}, + {0.825606,-0.364112}, + {-0.550409,0.454887}, + {0.168085,-0.192830}, + {1.037240,0.172213}, + {-0.623615,-1.192414}, + {-1.394999,0.433780}, + {-0.517121,0.276487}, + {-0.717265,-1.106185}, + {1.173780,0.500190}, + {1.189896,0.347666}, + {-0.367490,0.332201}, + {1.428207,0.822697}, + {0.450744,1.052459}, + {-0.703437,0.894070}, + {0.915143,0.151831}, + {-0.076742,0.733596}, + {0.524063,-0.923572}, + {0.182666,-1.514815}, + {-0.096585,-0.475288}, + {0.933516,0.325996}, + {0.262816,-1.152226}, + {-1.298289,1.056797}, + {0.290436,0.293651}, + {-0.796841,0.007490}, + {-0.001210,-0.482373}, + {-0.372255,-0.003545}, + {-0.951811,0.424592}, + {0.428500,-0.154131}, + {-0.016110,0.104156}, + {0.714483,-0.096403}, + {-0.497021,0.177252}, + {0.119749,-1.519028}, + {1.655545,-1.336578}, + {0.765918,-0.329551}, + {1.142739,1.110006}, + {0.715838,0.057273}, + {0.978170,0.262785}, + {0.989103,0.268928}, + {-0.844677,0.128637}, + {-0.709728,-0.957801}, + {1.655370,0.576793}, + {-0.701566,-0.455455}, + {1.472421,0.138446}, + {-0.068813,0.104376}, + {-0.307454,0.024655}, + {-1.584193,0.460054}, + {-0.636200,0.303211}, + {-0.547006,-0.100346}, + {0.033197,-0.233433}, + {0.036871,-1.428877}, + {-1.282191,-0.020832}, + {-0.226060,0.575992}, + {0.539645,0.580925}, + {-0.515746,0.640159}, + {0.122624,0.379262}, + {-0.298237,-0.430135}, + {0.582305,0.104006}, + {0.761337,0.778517}, + {-0.116138,-0.079724}, + {0.056869,0.497983}, + {0.534546,-0.781835}, + {1.373099,0.424074}, + {-0.326885,-0.553422}, + {0.466659,0.459637}, + {0.057961,0.638324}, + {1.220616,0.000019}, + {-0.396984,1.437168}, + {0.217722,0.458254}, + {0.517229,-0.226219}, + {0.266293,0.723080}, + {0.316267,-0.496743}, + {0.395212,0.100780}, + {0.208948,-0.868054}, + {0.494479,0.422566}, + {0.090251,0.077638}, + {-0.006175,-0.650019}, + {-0.244839,-0.682264}, + {-0.168110,0.761099}, + {-0.705272,0.959809}, + {0.345444,-0.191354}, + {-1.338302,-0.620916}, + {-0.913269,-0.357629}, + {-0.326929,-0.599831}, + {-0.886159,-0.329607}, + {-0.352269,-0.326190}, + {0.517424,-0.679915}, + {-0.256276,0.568007}, + {-0.018477,0.625619}, + {-1.188829,-0.540793}, + {-0.063814,0.082350}, + {-0.574465,-0.281673}, + {-1.431945,-0.967747}, + {-1.319540,-0.350255}, + {0.385732,0.441168}, + {0.648657,-0.187545}, + {-0.413140,-0.199861}, + {-0.860812,0.630549}, + {-0.526107,-0.254688}, + {1.561758,-0.918379}, + {0.478789,-0.553762}, + {0.577887,0.031411}, + {-0.123129,-1.310582}, + {0.467329,-0.373385}, + {-0.158891,-0.519788}, + {0.413279,-0.717616}, + {-0.090683,0.008334}, + {-0.201974,-0.766771}, + {0.467733,-0.252969}, + {1.537250,-0.785099}, + {1.055945,1.034578}, + {0.855592,-1.000192}, + {0.049488,1.476671}, + {0.485982,-1.096695}, + {-0.417544,-0.230928}, + {0.650111,-0.343016}, + {-0.697971,-0.973262}, + {0.665104,0.431052}, + {0.312919,1.312641}, + {0.441995,-0.145228}, + {0.314576,0.658067}, + {-0.499512,-0.180834}, + {0.274381,-0.633668}, + {-1.253873,0.337280}, + {0.429498,-0.073320}, + {-0.721886,-0.291230}, + {2.130391,-0.609516}, + {0.264504,-0.772070}, + {0.197991,0.156987}, + {0.012200,0.176025}, + {0.511819,0.264211}, + {0.846034,-0.534889}, + {-0.019510,0.783356}, + {0.369750,-0.658338}, + {0.067036,-0.850373}, + {-0.187688,0.650173}, + {-0.550258,0.977643}, + {0.310795,-0.493400}, + {-1.002795,-0.323754}, + {-0.687753,0.520814}, + {-0.273234,-0.055023}, + {1.420085,-0.258885}, + {-1.197577,0.045913}, + {0.069913,-0.134013}, + {-0.662290,-0.003455}, + {-0.451015,-0.580987}, + {1.162251,-0.128787}, + {-0.397880,-0.417766}, + {0.970358,0.047251}, + {-0.999546,-0.615866}, + {-0.667909,0.655248}, + {0.171279,-1.041255}, + {0.490597,-0.745594}, + {-0.163106,-0.467833}, + {0.685498,-0.884569}, + {0.021264,-0.159166}, + {-0.284385,0.390590}, + {-0.406411,0.147308}, + {-0.887529,-0.424785}, + {0.800653,0.320601}, + {-0.237328,0.229176}, + {-0.356110,-0.871456}, + {-0.469616,-0.563785}, + {0.540253,0.000454}, + {0.766091,-0.692660}, + {1.265823,-1.121352}, + {-0.519969,-0.763516}, + {-0.908685,1.223205}, + {0.378901,-0.148434}, + {0.734892,-0.017845}, + {0.630235,0.605463}, + {0.484549,0.798393}, + {0.889189,-0.588511}, + {-1.209300,-0.615938}, + {0.745912,0.216205}, + {-0.361015,0.030537}, + {-0.140569,0.491194}, + {0.206099,0.823077}, + {1.382085,0.511459}, + {0.822290,1.501179}, + {0.580893,0.246972}, + {-0.058519,-0.069856}, + {-0.623353,-0.877999}, + {0.911648,0.144101}, + {0.264720,-1.072727}, + {-0.788517,-0.665520}, + {0.884159,-0.498943}, + {-0.328181,-1.628856}, + {-0.854272,-0.298947}, + {0.369952,-0.228915}, + {0.466766,-0.533842}, + {-0.856672,0.555703}, + {-1.666030,0.205364}, + {-1.163374,0.020615}, + {-0.460905,0.147512}, + {-1.150163,-0.171924}, + {-1.086664,1.156968}, + {0.221459,0.371883}, + {-0.140640,-0.413140}, + {0.015694,-0.876451}, + {0.084676,-0.170816}, + {1.728853,-0.133309}, + {0.505786,0.017453}, + {0.738540,-1.225824}, + {-0.732059,0.505571}, + {0.586809,0.992493}, + {-0.201427,0.147962}, + {-0.669290,0.191411}, + {-0.670438,0.813079}, + {-0.396987,0.005979}, + {-0.248870,0.602922}, + {0.019785,-1.162706}, + {0.258091,-0.507443}, + {-0.293495,-0.206140}, + {-1.416552,-0.047997}, + {0.863624,-0.614726}, + {0.618458,-0.667468}, + {-0.068763,-0.452185}, + {0.518270,0.013776}, + {0.095323,0.282178}, + {-0.501060,1.250301}, + {0.495096,-0.240239}, + {0.841004,0.186255}, + {0.979204,-0.843511}, + {0.159362,-0.525116}, + {-1.076816,-0.329245}, + {0.590261,0.475905}, + {-0.042284,0.849452}, + {-0.176301,0.436022}, + {-0.007701,1.259334}, + {-1.508466,-0.903273}, + {1.741680,0.724148}, + {-0.829550,0.878517}, + {0.549818,0.385023}, + {-0.586413,0.711769}, + {-0.731277,0.072802}, + {0.732751,-0.781661}, + {1.453798,0.653282}, + {-0.547525,0.163118}, + {1.321736,0.284994}, + {0.967075,0.447090}, + {0.449005,-1.871133}, + {0.049354,-0.499692}, + {0.623433,1.594496}, + {-0.006018,-0.366873}, + {-0.476288,-0.645067}, + {-0.185525,1.921269}, + {0.691321,-1.097974}, + {-1.417428,0.364298}, + {0.995453,0.433032}, + {0.645331,-0.069612}, + {0.587566,-0.248929}, + {-0.015891,0.435682}, + {0.300868,0.560848}, + {0.593525,0.847680}, + {-1.032251,0.705217}, + {-1.236513,-0.605437}, + {0.480328,0.151749}, + {-0.327914,-0.239973}, + {0.645026,1.272340}, + {1.041862,-0.097846}, + {-0.444069,0.694695}, + {0.748340,-0.242565}, + {-0.392311,-0.564402}, + {0.955277,-0.330417}, + {0.766884,-1.099700}, + {0.270925,-0.271814}, + {0.991722,-1.258038}, + {-1.300449,-0.021881}, + {-0.648161,-0.316676}, + {0.189458,0.566763}, + {-1.087335,0.525761}, + {-0.096931,0.439582}, + {-0.004232,-0.614384}, + {-1.011860,0.920394}, + {-0.096274,-0.360917}, + {0.126764,-0.317622}, + {1.075920,-2.092266}, + {-0.745683,0.670968}, + {-0.427878,0.479526}, + {1.421614,1.297357}, + {-0.182187,0.907850}, + {0.576038,-0.390017}, + {-0.774510,0.092694}, + {1.486913,0.472625}, + {-0.985614,-0.039686}, + {0.497321,0.513824}, + {-0.226054,-0.465794}, + {0.263041,-0.071887}, + {0.284301,-0.781556}, + {0.312159,-1.389565}, + {-0.473675,1.103600}, + {0.066062,-0.020374}, + {0.153187,-0.821651}, + {0.252598,-0.505776}, + {-0.588915,-0.507526}, + {0.746750,0.865902}, + {-0.198729,0.371388}, + {0.192385,-0.115625}, + {-0.301964,1.093953}, + {-0.372911,0.616029}, + {-0.146635,-0.921548}, + {0.449273,-0.739387}, + {0.901099,0.774089}, + {0.266051,0.377341}, + {0.591555,0.563182}, + {0.636632,-0.227791}, + {1.160072,0.570171}, + {0.176682,0.068412}, + {-0.005833,0.132717}, + {0.004802,-0.842799}, + {1.604389,-0.379789}, + {0.484633,-0.421334}, + {0.185324,0.164699}, + {0.040009,0.495247}, + {-0.126941,-0.436956}, + {1.077300,1.615921}, + {-0.092967,-0.177670}, + {0.562370,-0.425568}, + {-0.812328,-0.831640}, + {0.504950,-0.415654}, + {0.634659,-1.051510}, + {-0.509551,-0.741446}, + {0.461403,-0.823263}, + {0.741515,-0.178576}, + {-1.803048,0.240838}, + {0.965793,0.671290}, + {0.485702,0.199620}, + {-0.033739,0.468502}, + {0.995017,0.457605}, + {-0.891019,-1.422089}, + {0.213272,1.349124}, + {0.957810,-0.529870}, + {1.144436,0.631099}, + {-0.608364,-0.008161}, + {-0.183913,-0.622132}, + {0.259485,1.794263}, + {-1.893936,0.887524}, + {0.869948,0.279483}, + {1.330244,-0.234150}, + {-0.698793,-1.869186}, + {-0.023907,-0.584283}, + {0.889881,-1.321943}, + {0.739625,-0.348848}, + {-0.445268,0.106291}, + {0.826921,0.698815}, + {-0.290005,0.699820}, + {-0.344072,-0.323324}, + {-0.411819,-0.585410}, + {-0.018909,-0.290762}, + {0.505112,-0.327444}, + {-0.118789,-0.034296}, + {1.369287,0.043394}, + {-1.463384,-0.619034}, + {-0.230005,1.632769}, + {-0.715552,1.059146}, + {0.500928,-0.212733}, + {0.920560,-0.635359}, + {-0.588473,0.687934}, + {-0.213108,-0.623500}, + {-1.114112,1.581999}, + {1.450259,-0.777587}, + {-0.240633,0.524103}, + {-0.437009,-0.672738}, + {-0.672158,-0.442712}, + {-1.001309,0.772701}, + {-0.448667,0.061504}, + {0.258287,-0.116766}, + {-1.022620,0.057617}, + {-0.132288,1.008135}, + {1.073702,-1.840446}, + {1.048816,-0.795525}, + {0.549427,-0.386099}, + {0.536366,-1.205694}, + {-0.187059,1.950097}, + {0.301988,-0.179036}, + {-0.553248,1.508990}, + {-1.704598,0.083126}, + {-0.872153,-0.082539}, + {-0.436999,0.247757}, + {-0.535663,0.218898}, + {1.740084,-1.134760}, + {1.769763,0.915663}, + {-0.562986,-0.099149}, + {1.793889,-0.797788}, + {-0.178126,-0.267732}, + {0.631260,-1.067603}, + {0.824120,0.547277}, + {0.414803,0.795777}, + {1.524148,-0.914855}, + {0.122641,-0.801623}, + {0.240361,-0.440083}, + {0.297449,2.260062}, + {-0.047492,-0.415373}, + {1.113301,-0.107794}, + {-0.278272,-0.153044}, + {-0.795337,0.227249}, + {-0.362846,0.602121}, + {0.954406,1.716838}, + {-0.259979,-0.099052}, + {-0.032074,-0.033958}, + {-1.944759,-1.116393}, + {-0.489102,0.214741}, + {-0.522574,1.262638}, + {0.863974,-0.082520}, + {0.484891,1.178134}, + {0.703921,0.461285}, + {-1.885850,-0.134840}, + {0.185955,0.977271}, + {0.324373,0.280497}, + {-0.540469,0.740809}, + {-0.490823,0.276430}, + {1.048976,-0.306852}, + {-0.872366,0.408507}, + {-0.522883,0.166499}, + {0.244488,-0.257421}, + {-1.040009,-0.423785}, + {-0.755068,0.536125}, + {-0.684830,0.823324}, + {0.564522,0.356330}, + {-0.595022,0.388829}, + {-0.144106,0.215685}, + {0.035723,-0.053939}, + {-0.353620,-1.153940}, + {1.247211,-0.730838}, + {1.664593,0.096993}, + {0.991357,-0.265930}, + {-1.524475,1.193607}, + {0.404257,-1.329731}, + {-0.893348,-0.573884}, + {-0.456101,1.026453}, + {0.114008,-0.620093}, + {0.505622,0.342661}, + {0.550962,0.586929}, + {0.809653,-0.405812}, + {-0.028734,-0.834741}, + {-0.155816,-1.209146}, + {1.153799,1.158627}, + {-0.190132,0.358644}, + {-0.802479,-0.235259}, + {0.090976,-0.943619}, + {0.728902,-0.942158}, + {1.160826,-0.138895}, + {0.377593,-0.778267}, + {0.070475,0.710161}, + {-0.141220,-1.059658}, + {0.833144,0.183631}, + {-0.769879,0.085471}, + {0.940921,0.622870}, + {0.717500,0.267314}, + {-0.671317,-0.402610}, + {-0.190394,0.893239}, + {0.197755,0.923891}, + {1.199303,-0.372345}, + {-0.196247,0.422832}, + {0.254665,-0.230619}, + {1.194773,-0.045428}, + {-0.165593,-1.152962}, + {0.457136,-0.280145}, + {-0.302551,0.117955}, + {1.065757,0.136590}, + {-0.403169,-1.378557}, + {-0.555648,0.009076}, + {-0.654869,-0.527972}, + {0.007930,0.308520}, + {0.267582,-0.462596}, + {-1.321099,1.596624}, + {0.201720,0.549905}, + {0.573367,-0.507021}, + {0.816064,0.368670}, + {-0.014020,0.027474}, + {0.437790,0.322314}, + {0.228108,-0.622273}, + {-0.462938,-1.714444}, + {0.645504,0.655548}, + {-0.129067,-1.174696}, + {-0.363463,0.121620}, + {0.064644,-0.373728}, + {0.829669,-0.093423}, + {1.987522,1.409714}, + {0.402627,0.461663}, + {-0.517408,1.461400}, + {-0.194346,0.371817}, + {-0.095302,1.127603}, + {0.854504,0.243799}, + {-0.175436,0.956797}, + {0.765841,0.740974}, + {-0.311100,0.344987}, + {0.505908,-1.150500}, + {0.570032,-0.062613}, + {-0.145633,0.780485}, + {-0.162999,0.361546}, + {-0.290794,1.229566}, + {0.262506,-0.308712}, + {-0.060761,-1.319020}, + {-0.374195,0.429511}, + {-0.086799,0.375579}, + {-0.695934,1.544833}, + {-0.553200,0.563327}, + {0.270544,0.934228}, + {0.336961,0.195811}, + {0.665743,0.096687}, + {-0.076057,1.056521}, + {0.798484,-0.357557}, + {0.241616,-1.011969}, + {-1.077322,-0.558872}, + {0.442441,-0.655746}, + {0.244793,-0.618180}, + {0.103232,0.499368}, + {-0.227070,0.190847}, + {0.550947,-0.745656}, + {-1.079964,0.299129}, + {0.779327,-1.277451}, + {-1.628750,0.145433}, + {0.240864,-1.102978}, + {-1.270518,0.131556}, + {0.775651,-0.293631}, + {-0.240939,-1.275808}, + {0.223459,0.026144}, + {-0.742946,0.387688}, + {0.012050,-0.095382}, + {-0.342335,-0.145945}, + {-0.474094,-0.504738}, + {-0.202108,0.823645}, + {1.541322,-0.601652}, + {0.433840,-0.201410}, + {0.098066,0.014597}, + {-0.773606,-0.954702}, + {0.318751,-0.263447}, + {0.397180,-0.536216}, + {-1.235381,0.558129}, + {0.769004,-0.940717}, + {-0.235040,-0.468838}, + {-0.564520,-0.384393}, + {-0.005423,1.188288}, + {-0.985059,0.199438}, + {-0.189449,-0.528242}, + {-0.388491,-1.042069}, + {0.430704,-0.535256}, + {-0.591624,-0.007859}, + {0.592677,-0.737538}, + {-0.381401,-0.351623}, + {0.491357,-0.380019}, + {-0.483469,1.474160}, + {-0.125849,0.369908}, + {0.078613,-0.121651}, + {-0.353110,-0.717969}, + {0.872719,-0.606648}, + {-0.428882,0.846706}, + {0.175737,-0.707301}, + {0.420668,-0.670445}, + {0.181614,-0.047297}, + {0.921628,-0.508933}, + {0.592896,0.669205}, + {-0.330365,-0.380564}, + {0.650241,1.309658}, + {0.236892,-0.200631}, + {-1.285455,-1.072231}, + {0.258253,-0.458396}, + {0.580260,-0.058791}, + {-0.198798,0.297518}, + {-0.081461,1.105449}, + {-0.972283,0.637500}, + {-0.752549,-0.092627}, + {-0.787857,-1.415530}, + {1.506419,1.017351}, + {0.585529,0.375103}, + {0.637950,-0.354231}, + {0.542343,-0.978832}, + {-0.631439,0.380096}, + {0.387861,-0.406235}, + {-0.458367,0.221299}, + {0.982058,-1.106305}, + {0.250386,-0.654296}, + {0.176148,-0.799581}, + {-1.154337,0.577434}, + {0.743221,-0.164562}, + {0.147461,0.563461}, + {0.262860,-0.187851}, + {0.080463,-1.267225}, + {-0.842093,0.465417}, + {-1.150684,0.413909}, + {-0.697233,-0.258542}, + {1.008287,0.072083}, + {-0.788413,-0.051451}, + {-0.039100,0.376908}, + {0.314799,-0.081361}, + {-0.961472,-1.372276}, + {0.190966,-0.194039}, + {-0.415721,0.883995}, + {-0.001280,-1.035261}, + {-0.578034,0.253532}, + {0.718858,0.130658}, + {0.169064,-0.650773}, + {1.019305,0.470424}, + {-0.779577,-1.527926}, + {-1.397568,-0.116837}, + {0.151050,-0.025676}, + {-0.946740,-0.996213}, + {0.946883,0.374918}, + {0.120331,0.668101}, + {-0.158538,-0.647519}, + {1.011966,-0.291368}, + {-0.414841,0.899555}, + {-0.613882,-0.444467}, + {0.133879,-1.173510}, + {-0.713934,0.659541}, + {0.632421,-0.324801}, + {-0.929352,-0.825345}, + {-0.939329,-0.154669}, + {0.135173,0.015513}, + {1.221067,0.948110}, + {-0.389186,-0.513496}, + {0.296118,1.574228}, + {-0.296515,-0.024812}, + {1.003795,0.323161}, + {-0.435951,0.654561}, + {-0.490652,-0.418108}, + {0.752490,-0.105439}, + {-0.337112,0.345660}, + {-0.567309,1.101450}, + {0.959341,-1.200654}, + {0.928823,0.018668}, + {0.251045,-0.478851}, + {0.947048,-1.373055}, + {0.155776,-1.054964}, + {-0.380913,-0.118574}, + {0.042293,-0.476657}, + {0.200067,-0.039548}, + {-0.386089,-0.409839}, + {0.799759,-0.629364}, + {1.030871,-0.758805}, + {0.191216,-0.009835}, + {1.064252,0.456354}, + {-0.739292,0.213518}, + {-0.957471,0.766434}, + {1.289907,1.080144}, + {0.839509,-0.415417}, + {-0.126717,-0.220462}, + {-0.493196,0.136442}, + {-0.740415,-0.205084}, + {-0.451410,-0.124071}, + {0.590748,-1.389196}, + {1.048353,-0.143902}, + {1.382293,0.237621}, + {-0.817723,-1.004158}, + {0.025907,-0.953813}, + {-0.134011,0.870525}, + {-0.796710,0.808375}, + {1.063805,-0.573200}, + {0.608984,0.022332}, + {0.705208,1.520836}, + {-0.449768,0.364173}, + {-0.121032,-0.081536}, + {-0.222846,1.764236}, + {-2.317731,-0.242630}, + {0.003012,2.291217}, + {-0.731425,0.097707}, + {0.267980,0.021976}, + {-0.052570,-0.060891}, + {1.328129,1.291555}, + {-0.535779,-0.699093}, + {-0.321002,0.511984}, + {-0.118378,0.976733}, + {-0.483034,-0.250304}, + {-1.164027,0.342938}, + {0.152236,0.157467}, + {-0.219252,0.092701}, + {0.666655,-0.396142}, + {-0.662523,-0.345241}, + {0.362952,-0.167473}, + {-0.619415,0.020731}, + {1.119113,0.580225}, + {-1.234932,0.059510}, + {-0.979695,0.650857}, + {0.248844,0.475403}, + {0.152068,0.896504}, + {-0.025802,-0.188693}, + {-0.312432,0.713030}, + {0.318940,1.325683}, + {-1.388616,-0.069398}, + {0.563331,0.129599}, + {0.556248,0.372978}, + {-0.387270,-0.410561}, + {0.381157,0.174884}, + {0.205704,0.309849}, + {0.546306,1.544967}, + {-1.502442,0.568854}, + {-1.441137,-0.654132}, + {0.236177,0.806135}, + {-0.458600,-0.272605}, + {1.645150,-0.472139}, + {1.230134,-0.639721}, + {0.194120,-0.166522}, + {0.117438,-0.763945}, + {0.775048,-0.144419}, + {0.582774,-0.338508}, + {-0.451656,-0.308490}, + {-0.997512,0.221620}, + {0.518933,0.834596}, + {0.072709,0.691029}, + {-0.072488,-0.926413}, + {0.455952,1.521838}, + {0.452472,-1.063857}, + {0.509717,0.548683}, + {0.555750,-0.567077}, + {0.044489,0.772517}, + {-1.065137,1.047399}, + {-0.057517,0.426841}, + {-0.048828,-0.066677}, + {-0.090397,-1.373149}, + {0.299498,-1.074127}, + {0.508632,0.940645}, + {-0.075787,-0.866339}, + {1.162672,0.315994}, + {-0.398345,-0.537812}, + {-0.364908,-0.483622}, + {0.461687,0.527551}, + {-0.162621,0.230750}, + {1.072227,1.602365}, + {-0.866570,1.022571}, + {1.183777,0.054456}, + {-0.901192,-0.614876}, + {0.207856,-1.230461}, + {-0.218150,-0.421866}, + {-0.416722,0.161147}, + {0.434887,0.939654}, + {-0.141095,-0.011220}, + {-1.002557,-0.906183}, + {-0.336980,0.143558}, + {1.524689,-0.734075}, + {-1.673018,-0.011837}, + {-0.399086,0.379387}, + {0.022946,0.360077}, + {1.334352,-0.058248}, + {0.582118,0.104689}, + {-0.235530,-0.117603}, + {-0.685178,1.207036}, + {-0.505037,0.394430}, + {1.041913,-0.754037}, + {0.157290,-0.635867}, + {0.420463,0.059918}, + {-0.672484,-0.106277}, + {-0.342000,-0.887734}, + {0.037279,-1.312576}, + {0.196471,-0.690414}, + {0.628345,0.600837}, + {1.905626,0.213228}, + {0.002845,0.911432}, + {-0.273556,-0.817731}, + {-0.734045,-0.814594}, + {-0.278813,1.362944}, + {-0.490799,0.681619}, + {0.823281,0.924446}, + {0.382131,0.054887}, + {0.207567,0.197565}, + {-0.198756,-2.356373}, + {-0.146667,1.116811}, + {-1.225286,0.261605}, + {-1.600163,-0.215777}, + {0.188098,0.034549}, + {0.059091,0.203517}, + {0.539660,-0.144263}, + {0.559525,-0.197091}, + {-0.995693,0.479884}, + {-0.140240,0.304529}, + {-0.933852,1.657169}, + {-0.378402,0.686321}, + {-0.133646,-0.711732}, + {0.356331,0.032003}, + {0.167839,-1.094820}, + {0.495340,0.695848}, + {-0.324402,2.032407}, + {0.345523,-0.708782}, + {0.651872,1.141485}, + {-0.804705,0.431775}, + {0.073119,-0.202232}, + {-0.389707,-0.229234}, + {-0.264997,1.293800}, + {0.443424,0.482117}, + {0.331831,-1.277015}, + {-1.021430,-1.437496}, + {0.034502,-1.757843}, + {-0.222381,-0.925680}, + {0.029757,0.759219}, + {0.025235,0.100197}, + {0.204608,0.007049}, + {0.108738,-0.526643}, + {0.063573,-1.456564}, + {-0.344489,0.271249}, + {-0.605927,-1.137269}, + {-0.505740,-0.805053}, + {0.607392,0.236317}, + {-0.004607,0.308809}, + {0.148965,0.107110}, + {-0.116365,-1.014452}, + {0.054350,-0.377083}, + {1.753877,0.889535}, + {-1.155775,0.390584}, + {-0.077606,0.065922}, + {0.550225,0.202540}, + {1.695931,-1.527247}, + {0.112023,1.588761}, + {-0.397930,-0.627045}, + {-0.761887,0.846351}, + {-0.202916,0.218434}, + {0.028378,1.479997}, + {-0.484383,-0.042392}, + {-0.104811,0.833990}, + {-0.860957,0.498545}, + {1.074833,-0.971359}, + {0.286261,-0.574891}, + {0.415268,0.659014}, + {-0.123245,-0.459360}, + {0.596546,-0.406837}, + {1.301351,-0.741688}, + {0.925065,-0.414523}, + {0.443874,-0.870857}, + {0.416989,-0.113289}, + {0.117815,0.264440}, + {-0.569040,-0.606823}, + {-0.071240,0.617613}, + {1.082605,0.798463}, + {-0.300080,0.104141}, + {-0.190657,-0.215200}, + {-0.109927,-1.077320}, + {-0.865215,-0.747596}, + {0.026072,0.657730}, + {-0.602460,-0.765455}, + {-0.120662,-0.176552}, + {-0.020959,0.700393}, + {-0.532963,1.578641}, + {0.660906,-0.761852}, + {0.204630,0.671138}, + {1.378102,1.047063}, + {0.561706,0.261408}, + {-0.260495,0.707119}, + {0.122258,-1.309491}, + {0.348012,-0.204710}, + {0.590837,-0.752105}, + {1.641608,-0.346800}, + {-0.873873,0.418680}, + {-0.277803,0.003063}, + {1.257064,0.252787}, + {0.675850,0.403955}, + {-0.418536,0.803833}, + {-0.164660,0.169753}, + {0.850197,0.896004}, + {0.819463,-0.702546}, + {0.422036,0.045786}, + {0.453763,-0.574596}, + {-0.166787,-0.756407}, + {0.523826,0.600864}, + {-0.115417,0.177982}, + {-0.055416,0.683982}, + {-0.270215,0.340186}, + {0.195431,1.313902}, + {-0.443910,-0.182965}, + {-0.071393,-0.364572}, + {-0.707667,0.098065}, + {0.778016,-0.604885}, + {-0.229268,-0.776824}, + {-0.512173,-1.134451}, + {0.252034,0.380931}, + {-0.003544,0.019841}, + {-0.058631,0.109133}, + {-0.128306,-0.186545}, + {-0.293227,1.213620}, + {-0.779521,0.232263}, + {0.060435,0.186679}, + {0.990281,-0.912743}, + {-1.301892,0.111320}, + {-0.034738,-0.546598}, + {-0.566775,-0.661059}, + {-0.925700,-1.136595}, + {0.568009,-0.694776}, + {-0.857730,1.198007}, + {-0.037984,-0.146860}, + {-0.252787,-0.038902}, + {-0.568219,-0.219940}, + {0.303626,0.948180}, + {-0.038566,-0.531735}, + {-0.103828,-0.538015}, + {0.260650,-0.359314}, + {-0.327697,0.416712}, + {-1.116063,0.090095}, + {-1.293285,-0.837186}, + {-0.482711,-0.182843}, + {0.059427,0.514144}, + {0.566554,-0.141405}, + {-1.308599,0.222065}, + {0.119560,-0.441928}, + {-0.228916,-0.884073}, + {0.381615,-0.358756}, + {0.207154,1.337287}, + {-0.260877,-0.510744}, + {-0.240457,0.257392}, + {-0.147033,-0.616898}, + {0.252767,0.555545}, + {1.142911,0.946975}, + {-0.145901,-0.472828}, + {0.263985,0.594191}, + {0.275152,-0.360078}, + {-0.378772,0.233403}, + {0.060201,-1.295192}, + {0.711630,-0.480067}, + {-0.727486,-0.316626}, + {-1.024395,-0.820563}, + {0.229158,0.571038}, + {-0.195501,0.125831}, + {-0.134340,-0.536494}, + {-0.265465,-1.168649}, + {-1.253822,0.766807}, + {-0.908661,0.099254}, + {-0.303613,-0.289008}, + {-0.312701,-1.039648}, + {-0.560653,0.439198}, + {-0.592471,-0.580957}, + {-1.482518,0.450587}, + {1.765973,-0.280969}, + {-2.102702,0.355270}, + {0.543240,1.121485}, + {0.960646,0.575538}, + {-0.328846,-1.412944}, + {-0.158343,1.897285}, + {1.102149,-1.023840}, + {0.757352,-0.148155}, + {-0.543007,0.817050}, + {0.860867,0.780749}, + {-0.209900,-0.052244}, + {0.033218,0.744034}, + {0.846613,0.704981}, + {1.311109,-1.502775}, + {0.749682,-0.026687}, + {-0.670479,-0.906180}, + {-0.449276,-0.235328}, + {-1.029479,-0.800321}, + {-0.552364,0.362018}, + {0.571044,-0.294024}, + {0.303263,-0.977773}, + {-1.872468,0.396964}, + {-0.955788,-0.245566}, + {-0.953171,0.032204}, + {-0.140014,0.562421}, + {-0.238861,-1.034260}, + {0.016618,-0.778735}, + {0.641832,-1.328999}, + {-0.555008,0.001675}, + {0.177758,0.407400}, + {0.378772,-0.737130}, + {-0.947272,0.646346}, + {0.530960,0.259863}, + {-0.901216,-0.065121}, + {-0.322799,-1.319203}, + {1.054523,0.101474}, + {1.428788,-0.349216}, + {0.349194,1.127674}, + {-0.452166,-0.174773}, + {-1.118452,0.641579}, + {0.089249,-0.175187}, + {0.266167,0.234908}, + {0.087406,-0.807926}, + {-1.697266,0.627200}, + {-1.079827,-0.422557}, + {-0.372603,0.642134}, + {0.131330,0.888119}, + {0.792349,0.278774}, + {-0.246192,0.080661}, + {-0.353288,0.005239}, + {-0.134266,-0.384476}, + {-0.828652,0.066405}, + {-0.548264,-0.080022}, + {-0.120933,-0.875978}, + {0.903563,-0.743197}, + {-0.567596,-0.824528}, + {-0.206943,-0.203413}, + {0.232509,0.801755}, + {0.398309,-1.779415}, + {-0.186675,-0.863868}, + {1.305872,0.428744}, + {-1.716046,0.133683}, + {-0.450440,0.029653}, + {-0.506766,0.145657}, + {-0.967946,-0.295591}, + {0.257046,-0.199603}, + {0.490026,0.741449}, + {-0.482293,0.888983}, + {0.433545,0.021292}, + {0.395731,-0.152964}, + {-0.127526,0.629495}, + {0.948778,0.420625}, + {0.080788,0.918771}, + {-0.601768,-0.511523}, + {0.056685,-0.188264}, + {0.077067,-0.297327}, + {0.362971,-0.552698}, + {0.500014,-0.566048}, + {0.681482,0.264552}, + {-0.610054,-0.646848}, + {0.265600,0.541288}, + {0.026679,0.942537}, + {-1.762192,-0.407303}, + {-0.902743,-0.036230}, + {0.474591,-0.525614}, + {0.067020,-0.220233}, + {-0.618935,0.644017}, + {-0.247249,0.460334}, + {0.455640,-0.078102}, + {0.204557,0.186035}, + {-0.502683,-0.745109}, + {0.603414,2.160750}, + {0.949033,-0.309626}, + {0.143544,-0.468590}, + {-1.617425,-0.599765}, + {-0.338967,0.795837}, + {-0.575392,0.117471}, + {1.113309,0.741864}, + {0.491207,-1.773106}, + {-0.796479,-1.166586}, + {1.776758,-0.487393}, + {0.665706,-0.686534}, + {-0.733067,0.665936}, + {-1.191914,-0.753852}, + {-0.861479,-0.028041}, + {0.528864,0.362282}, + {0.372907,-0.759873}, + {-0.326107,-0.368006}, + {1.034767,-0.488401}, + {-0.020672,0.121155}, + {-0.763290,-0.252682}, + {-0.581453,0.977660}, + {-0.422611,0.734330}, + {0.410968,-0.697525}, + {0.256227,0.884536}, + {-0.271733,0.028247}, + {-0.553155,0.558822}, + {0.591687,0.681808}, + {-0.295964,-0.252254}, + {-0.861694,0.270864}, + {-0.212098,0.137016}, + {0.563568,0.156760}, + {-0.959209,-0.885105}, + {1.242799,-0.806484}, + {-1.749964,0.424195}, + {-0.811421,0.090595}, + {-1.270889,0.077082}, + {-0.507043,0.606896}, + {-0.573533,0.304032}, + {-0.073649,1.058108}, + {0.042070,-0.145220}, + {-0.668327,1.142738}, + {0.669062,-0.322129}, + {0.021137,-0.503492}, + {-0.193499,0.358862}, + {-0.508566,0.260507}, + {0.084811,-0.605995}, + {1.557960,-1.120053}, + {1.643320,-0.421612}, + {-0.480576,-0.823660}, + {0.231449,0.151004}, + {0.398016,0.209073}, + {0.045075,0.672618}, + {-0.008618,0.247177}, + {-1.053566,0.352608}, + {0.116426,1.141890}, + {0.792719,-0.667965}, + {0.331232,1.168582}, + {-0.196787,0.038326}, + {-1.109405,0.145585}, + {0.925101,-0.146615}, + {0.420151,-0.522343}, + {-0.006697,0.762735}, + {-0.508807,-0.069119}, + {0.925127,0.708615}, + {-0.110840,-0.048132}, + {-0.364342,0.472781}, + {-0.885346,1.332877}, + {-0.247386,1.012912}, + {-1.386080,0.289459}, + {0.225626,-1.466751}, + {-0.274328,-0.634428}, + {0.221469,0.108111}, + {-0.288359,0.596638}, + {0.406563,-1.159590}, + {-0.781803,0.171775}, + {-0.266993,1.093298}, + {0.188762,-0.887276}, + {-1.385732,0.271974}, + {-0.535123,-0.445177}, + {-0.405735,0.672560}, + {0.184163,0.241237}, + {0.218489,-0.629709}, + {-0.080616,0.521363}, + {-0.263647,-1.969656}, + {-0.000105,-1.140732}, + {0.345163,0.238108}, + {-0.724603,-0.973090}, + {0.166771,2.574467}, + {-0.442168,-0.073635}, + {0.087945,0.845359}, + {0.179795,-0.061662}, + {-0.317741,-0.537081}, + {-0.444731,-0.240390}, + {0.451603,-0.608631}, + {0.311307,-1.277915}, + {-1.138521,0.364751}, + {0.634037,-0.538308}, + {0.336605,-0.705948}, + {0.112277,0.892130}, + {-1.254259,0.041164}, + {-0.032781,1.144167}, + {-0.022324,0.649488}, + {-0.344520,-1.047174}, + {0.317010,-0.433506}, + {0.814095,-0.340343}, + {0.022872,0.077959}, + {0.249692,0.224696}, + {1.305443,0.613798}, + {-0.581707,0.071940}, + {-0.258272,-1.904325}, + {0.601451,-0.060804}, + {-0.118601,0.938334}, + {0.303851,0.393623}, + {0.736692,-0.211060}, + {-0.272122,-0.490145}, + {0.222637,-0.021387}, + {-0.311633,0.735060}, + {-0.199568,0.759139}, + {-1.013715,-0.780787}, + {-1.135842,-0.735749}, + {0.387608,0.235686}, + {0.083913,-0.711059}, + {0.163113,-0.233968}, + {0.180869,-1.193578}, + {-0.541856,0.511090}, + {0.718738,-0.971796}, + {0.918659,-0.884243}, + {0.235544,-1.235024}, + {0.685277,0.219639}, + {0.854647,-0.421738}, + {-0.028494,-0.255750}, + {-0.526021,-0.508404}, + {-0.492737,-0.753063}, + {0.462732,-0.859153}, + {-0.133400,0.676276}, + {0.450487,0.025040}, + {-0.561239,0.571686}, + {-0.642541,-0.609117}, + {1.075468,-0.169765}, + {0.574631,-0.097372}, + {0.338229,-0.024071}, + {-0.525317,0.025844}, + {0.487080,0.416213}, + {-1.007587,-0.270080}, + {0.343576,-1.099756}, + {-0.699170,0.043134}, + {-1.044511,0.757733}, + {-0.575676,-0.749373}, + {0.305846,-0.161683}, + {0.811672,0.079546}, + {-0.192293,0.436743}, + {-0.693445,-0.830657}, + {0.968077,1.051416}, + {-0.769386,-1.502744}, + {-0.255967,-1.803842}, + {-0.470924,-0.998421}, + {-0.824508,-1.845973}, + {0.045837,-0.401762}, + {0.360613,0.910411}, + {-0.337096,-0.237348}, + {-0.484460,0.113391}, + {0.305826,-0.010794}, + {0.147090,0.500318}, + {0.225740,-0.205529}, + {-1.264348,-0.329185}, + {-1.194871,-0.957492}, + {0.650858,-0.758139}, + {-1.280834,0.080681}, + {0.625022,-0.858635}, + {1.711320,0.093822}, + {-1.151505,0.996810}, + {1.790324,0.687198}, + {0.656644,1.704101}, + {-0.376292,-0.352113}, + {-0.126730,0.661884}, + {0.252564,-0.254102}, + {-0.661905,1.131852}, + {-0.368894,0.146481}, + {-0.798706,-1.083358}, + {-0.454165,1.240990}, + {-0.039095,-0.119828}, + {0.632847,-0.423721}, + {-0.380750,-0.363220}, + {-0.262391,-0.622616}, + {-0.859738,0.564480}, + {-0.750698,0.139456}, + {0.947125,0.430152}, + {0.677915,0.729907}, + {-0.239181,0.435498}, + {0.466691,-0.384876}, + {0.532654,-0.083163}, + {0.542034,0.653067}, + {0.208817,-0.330605}, + {-0.130409,0.034659}, + {-2.320815,-0.033099}, + {0.871427,0.273985}, + {0.194936,1.108967}, + {-0.285382,0.345010}, + {1.195251,1.573778}, + {0.713952,1.087552}, + {-0.415100,0.517458}, + {1.196398,0.021875}, + {0.802508,1.907587}, + {0.299614,-0.173952}, + {-0.608050,-0.581877}, + {0.977775,0.565290}, + {-0.192386,0.145355}, + {-0.665472,0.535100}, + {-0.151025,0.022383}, + {-0.250835,0.788190}, + {0.764801,0.467007}, + {0.298350,-1.467544}, + {-0.017556,-1.063610}, + {1.562445,-0.529165}, + {-0.520377,0.378911}, + {0.058748,1.831556}, + {-1.071124,0.601172}, + {-0.878448,-0.254107}, + {-0.154485,-0.985552}, + {-0.887400,0.327273}, + {-0.705357,-1.472086}, + {-0.740599,-0.067128}, + {0.711410,-1.034293}, + {-0.333938,0.630428}, + {1.278035,0.397289}, + {0.210056,-0.257437}, + {-0.585602,-0.005302}, + {0.203850,0.195065}, + {-1.060016,0.172660}, + {0.771525,-0.917467}, + {-0.723919,-0.412679}, + {0.232786,-0.197431}, + {1.194496,-0.581625}, + {1.340972,0.360705}, + {0.975104,0.097678}, + {1.133589,0.133129}, + {-0.298991,0.302132}, + {-0.784508,-0.922366}, + {0.322948,-0.119337}, + {0.110163,-0.145440}, + {1.574654,0.287009}, + {-0.189796,-0.018106}, + {-0.174887,-0.498104}, + {-0.080131,-0.165148}, + {-0.657113,0.318723}, + {-0.433595,0.705876}, + {0.857977,-0.158599}, + {-0.482497,0.036595}, + {-0.576244,-0.193566}, + {0.296959,-0.488391}, + {0.405842,-0.070404}, + {0.590507,0.533184}, + {0.587150,1.314828}, + {-0.211139,-1.292577}, + {-1.010083,-0.313106}, + {-0.863307,0.569579}, + {0.997553,-0.971260}, + {0.472407,1.098185}, + {-1.119245,-1.232905}, + {0.618522,1.245082}, + {-0.262763,-0.278210}, + {-0.105775,0.170132}, + {1.269669,-0.240590}, + {0.170976,0.601526}, + {0.188523,-0.015175}, + {-1.326050,1.007456}, + {-0.090769,0.040268}, + {0.418566,0.135730}, + {-0.182901,0.036998}, + {-0.333515,0.424837}, + {0.428316,0.383354}, + {-0.794054,-0.779979}, + {0.263906,0.439720}, + {0.162836,0.989119}, + {-0.071999,0.354381}, + {-0.291458,-0.020139}, + {0.449140,0.931136}, + {-0.694063,-0.246796}, + {-0.862572,0.091815}, + {0.028864,-0.095157}, + {0.724161,0.223737}, + {0.047003,1.150192}, + {-1.174734,-0.534178}, + {0.591572,-0.393347}, + {-0.219495,0.747091}, + {-0.136702,-0.163781}, + {-1.060912,0.069882}, + {0.029668,0.042101}, + {0.131750,0.093846}, + {0.871290,1.182361}, + {1.253828,0.378833}, + {1.186058,-1.172422}, + {-0.063604,0.553535}, + {1.002073,-0.209174}, + {0.444720,-0.729126}, + {-0.206357,0.032391}, + {-0.700775,-0.526320}, + {-0.737105,0.314376}, + {0.592877,0.135543}, + {-0.663426,0.630024}, + {1.260741,0.446146}, + {-0.705061,-1.146632}, + {0.428181,0.432223}, + {-0.213335,0.151536}, + {0.520582,0.924886}, + {0.577738,-0.057536}, + {-0.751351,1.533813}, + {-0.156074,0.562951}, + {0.046758,-0.037720}, + {-0.217340,0.168171}, + {0.241340,0.494540}, + {0.506104,-0.317633}, + {-0.655820,0.567359}, + {0.480759,-1.112311}, + {0.386474,-1.201118}, + {-1.449230,-0.518502}, + {-0.706211,0.406803}, + {-1.560129,-0.422456}, + {-0.077915,-0.197029}, + {-1.004173,-0.827722}, + {0.500350,1.832784}, + {1.097967,-0.612166}, + {-0.131651,0.635959}, + {-0.049192,0.986648}, + {0.349039,0.570957}, + {-0.171897,-0.308825}, + {-1.215161,-0.958771}, + {0.571949,0.628435}, + {0.729169,0.139248}, + {0.709536,0.696363}, + {0.097966,0.586873}, + {0.397300,0.024276}, + {0.236370,0.090813}, + {0.514880,0.171434}, + {0.793476,-0.258985}, + {-0.515502,-0.496673}, + {0.473964,0.129542}, + {-0.354065,-0.227705}, + {0.656057,0.340024}, + {-0.176111,0.646745}, + {0.688527,0.624363}, + {-0.533171,-0.007906}, + {-1.490044,-0.019393}, + {0.062044,0.744611}, + {0.830698,-0.386727}, + {-0.110515,0.456228}, + {1.417382,-0.674755}, + {0.459868,0.925687}, + {-0.836631,0.488354}, + {-0.019731,-0.693838}, + {1.289891,-0.627465}, + {0.055161,-0.256309}, + {0.468467,-0.780689}, + {0.717432,-0.802497}, + {-0.085141,-0.309899}, + {0.930132,0.556225}, + {0.405997,-0.271818}, + {-0.768176,-0.288646}, + {0.100647,0.538259}, + {0.907866,0.140152}, + {-0.368110,-0.402555}, + {-0.228629,-0.940188}, + {-0.569401,0.233255}, + {-1.022570,0.000617}, + {-0.324842,0.052006}, + {-0.269973,0.777187}, + {-0.035408,-0.139996}, + {0.473745,0.160440}, + {-1.354914,-0.289104}, + {-0.475516,-0.054631}, + {-0.041168,-0.128649}, + {0.427951,-0.409020}, + {1.363959,-0.447370}, + {-0.703075,1.016340}, + {-0.075306,-0.369703}, + {0.230086,-0.722273}, + {1.792416,-0.645114}, + {-0.093824,-0.242755}, + {-1.292877,-1.080529}, + {1.196220,0.155053}, + {0.173557,-0.177454}, + {-0.634131,-0.976788}, + {-0.379141,0.884947}, + {-0.536256,0.697163}, + {0.552100,-0.096580}, + {-0.696552,0.923878}, + {0.118458,0.110518}, + {-0.582715,-0.173407}, + {-0.956599,1.799081}, + {-0.843667,-0.384598}, + {0.764067,-0.865968}, + {1.000620,-0.160073}, + {0.953401,1.628974}, + {-0.888514,-0.891334}, + {-0.680686,0.247835}, + {-0.754843,0.258330}, + {-0.675973,0.394557}, + {-0.190745,0.303396}, + {-0.170964,1.405210}, + {0.926068,-0.197468}, + {0.672418,0.927374}, + {0.197025,-0.069306}, + {0.354251,-0.267216}, + {0.290035,-0.073490}, + {0.110947,0.354887}, + {0.443680,-0.098480}, + {-0.294424,0.866491}, + {-0.841475,-0.422685}, + {0.266968,0.062065}, + {1.515674,-0.060925}, + {0.176005,0.140636}, + {0.404577,-0.509459}, + {0.515552,0.061269}, + {0.853981,-0.954393}, + {1.019148,-1.441008}, + {0.163838,0.376008}, + {0.288430,0.184545}, + {0.067683,1.030477}, + {-0.499583,0.343582}, + {0.009995,-0.042159}, + {-0.621239,1.076062}, + {-0.939004,0.349109}, + {0.798145,0.400775}, + {0.435127,0.287123}, + {0.202232,-0.459503}, + {-0.115217,-0.562763}, + {0.415476,-0.178029}, + {1.158389,1.432155}, + {0.936251,-0.718354}, + {0.848607,-0.413887}, + {0.391567,-0.379341}, + {-0.299960,0.021999}, + {-0.500304,-0.145804}, + {0.809236,0.749736}, + {0.827454,0.361110}, + {0.433617,-1.060374}, + {0.897989,0.043762}, + {-1.028161,0.704788}, + {-0.194029,-0.081497}, + {0.651930,-0.779738}, + {-0.210318,0.138924}, + {-0.224011,-0.719656}, + {-0.690712,-0.403295}, + {-0.421069,0.703604}, + {-0.492768,-0.402452}, + {-0.811297,0.602505}, + {-1.785654,0.521719}, + {0.587757,-0.400209}, + {0.043330,-0.684632}, + {0.384072,1.455485}, + {1.259714,0.400161}, + {0.761448,0.079450}, + {-0.053741,-0.471277}, + {0.412257,0.180934}, + {0.519025,-0.912317}, + {1.338382,-1.089903}, + {-0.120862,1.387350}, + {0.046935,1.216046}, + {0.078641,0.418476}, + {-0.826729,-0.603339}, + {-1.169826,-0.905686}, + {-0.319044,-0.337864}, + {-0.000338,-0.036139}, + {-0.070890,0.167189}, + {-0.364559,-0.483024}, + {-0.845227,0.663173}, + {-0.358604,0.991618}, + {-0.544255,0.196842}, + {1.734390,0.066961}, + {0.304854,-0.438655}, + {0.570055,1.368692}, + {0.680056,0.502049}, + {1.473820,-0.240434}, + {0.143943,0.150471}, + {-0.601375,1.462794}, + {-0.130329,0.130809}, + {-0.816240,-0.613083}, + {-0.363673,0.906229}, + {-0.137845,0.310958}, + {0.028385,0.813332}, + {0.797503,-1.224658}, + {0.193431,-0.529715}, + {-0.088177,-0.203006}, + {-0.475714,-0.792887}, + {0.226096,-0.128947}, + {0.184089,-0.068373}, + {0.887181,0.224031}, + {-0.216778,0.056027}, + {-1.168135,-0.932106}, + {0.564475,-0.495475}, + {-0.673622,1.542024}, + {-0.610914,-0.581747}, + {-0.089544,-0.439327}, + {0.714516,-0.660308}, + {1.223961,-0.522664}, + {0.661751,-0.105839}, + {-0.630532,-0.064537}, + {-1.161529,1.098738}, + {-0.427223,-0.021232}, + {-0.026751,0.416435}, + {0.362154,-0.386305}, + {0.208456,0.633020}, + {0.045405,1.111140}, + {1.425449,-1.110883}, + {0.707444,0.651275}, + {-0.500077,0.697821}, + {0.203707,0.456913}, + {-0.853159,1.120343}, + {0.834138,-1.031290}, + {0.617247,-0.697880}, + {-0.043978,-0.182348}, + {0.543946,-0.336939}, + {-0.357450,-0.588382}, + {0.063896,0.467717}, + {-1.005923,0.946648}, + {0.848093,0.260463}, + {-0.603198,0.472919}, + {0.824311,1.081034}, + {-1.794170,-0.412169}, + {-1.188588,-0.303771}, + {-0.599378,-0.512405}, + {-0.764410,0.839242}, + {-1.630732,-1.206763}, + {0.475393,1.662433}, + {0.287510,0.340842}, + {-0.361590,-0.457253}, + {0.259458,0.427517}, + {-0.962593,-0.157040}, + {-1.043433,0.709428}, + {-0.124816,0.350705}, + {-1.784117,-0.277703}, + {-0.816757,0.881473}, + {1.130899,0.072276}, + {0.508338,-0.545349}, + {0.248984,-1.013667}, + {0.303921,-0.296289}, + {0.907752,-0.325327}, + {-0.706874,-0.148790}, + {-1.511246,-1.230174}, + {-0.034105,1.186995}, + {0.791315,-0.061800}, + {-0.115356,-0.013607}, + {0.614068,-0.643597}, + {-1.434752,-0.837895}, + {-0.262646,-0.486002}, + {0.425083,-1.154407}, + {-0.888865,0.643359}, + {0.354696,-0.522025}, + {0.516178,-0.483834}, + {-0.383349,-0.393546}, + {0.627820,1.304975}, + {-1.536539,0.297887}, + {0.522986,-0.438700}, + {0.570505,0.136875}, + {1.225639,0.726921}, + {0.046321,0.004620}, + {-0.978947,0.165502}, + {0.673976,0.355861}, + {-0.565507,0.154310}, + {0.184185,0.636983}, + {0.669884,0.339459}, + {-0.272178,0.155650}, + {0.946849,-0.018712}, + {1.554380,-0.573908}, + {-1.650752,-0.797470}, + {0.149065,-0.449614}, + {0.000874,0.687892}, + {-0.496167,-0.407806}, + {-0.311445,-0.715590}, + {-0.129442,0.092998}, + {1.038462,1.427624}, + {0.969798,-0.841165}, + {-0.638606,0.246169}, + {-0.007508,-0.280498}, + {0.113839,-0.195910}, + {1.042036,0.726260}, + {-0.200482,0.235256}, + {-0.406369,-0.249998}, + {0.286145,-1.006218}, + {0.210969,0.512718}, + {-0.859586,-0.839554}, + {0.139226,0.146909}, + {0.695305,-0.442922}, + {-0.681479,0.678879}, + {0.573686,0.732063}, + {0.409687,-0.487551}, + {-0.740833,0.407906}, + {-0.627461,-0.094149}, + {0.717096,-0.324215}, + {-1.040547,0.209955}, + {0.390960,0.716126}, + {0.087138,0.229283}, + {-0.453888,-0.488261}, + {-0.309646,-0.346751}, + {-0.129650,0.732543}, + {-0.170771,0.525447}, + {0.514311,0.262524}, + {0.791326,-1.098801}, + {0.026081,-0.432545}, + {0.695147,0.619485}, + {-0.160913,-0.305334}, + {-0.388194,0.428275}, + {-0.857131,0.383539}, + {-0.127692,-0.568071}, + {-0.153925,-1.205867}, + {-0.131234,-0.794515}, + {0.509942,0.661891}, + {-0.411283,-0.325822}, + {-0.557037,0.549357}, + {0.276122,-0.018714}, + {-0.459507,0.586174}, + {0.946074,0.411524}, + {-0.517742,-0.440520}, + {0.518675,-0.707372}, + {0.346846,-0.672055}, + {0.552754,1.465565}, + {-0.084615,0.414643}, + {0.452343,-0.941522}, + {0.346356,0.291833}, + {-0.280410,1.026607}, + {0.938494,-0.769506}, + {-0.559070,-0.210613}, + {-1.005965,1.379425}, + {1.003043,-1.111699}, + {-0.675980,-0.769700}, + {0.000281,1.375752}, + {0.304516,-1.251364}, + {-0.821937,-0.484556}, + {-0.859102,-1.335838}, + {0.058085,-0.346139}, + {0.003970,-0.523620}, + {-0.142542,0.689615}, + {-0.916600,0.902236}, + {0.486899,0.086527}, + {-0.428760,0.270439}, + {0.358628,-0.635933}, + {-0.564581,-0.585300}, + {0.873809,0.369030}, + {-0.178501,0.513622}, + {1.498494,0.604123}, + {-0.119000,0.391230}, + {-0.893021,-0.149327}, + {-1.342297,-1.126706}, + {0.373536,0.861215}, + {0.256534,1.148103}, + {0.899039,-0.560694}, + {0.054489,0.862495}, + {-0.293322,-0.433164}, + {-0.232534,-0.152667}, + {0.571215,-0.491188}, + {0.200082,1.008588}, + {-0.535039,-0.070187}, + {-0.374009,-0.006474}, + {0.968621,-1.673820}, + {-0.250826,-0.592453}, + {-0.768210,-1.143156}, + {0.506240,0.456245}, + {0.517084,-0.666774}, + {0.212136,-0.465469}, + {1.318910,-0.330234}, + {0.021991,0.039870}, + {-0.393252,0.086292}, + {0.707893,-0.244737}, + {0.499235,-0.784132}, + {0.007350,-0.371172}, + {1.522063,0.906834}, + {-0.242588,-1.852291}, + {0.221807,-0.033887}, + {0.323357,0.072972}, + {0.960496,0.074214}, + {0.760485,-0.415787}, + {1.011444,-1.408695}, + {-0.765112,0.167737}, + {0.051886,0.271979}, + {-0.082595,0.361773}, + {0.870305,0.283143}, + {0.225699,0.608936}, + {-1.312811,-0.998105}, + {-0.653488,0.900398}, + {-1.438955,0.084821}, + {-0.412878,-0.723466}, + {-0.272037,0.361482}, + {-0.694861,0.082223}, + {0.850862,1.180117}, + {-0.283139,0.336570}, + {-0.271481,0.069012}, + {-0.029517,-1.101000}, + {0.634905,-0.821237}, + {0.149412,-0.139163}, + {-0.484147,0.270160}, + {-0.761418,0.079378}, + {-0.072847,0.937568}, + {-1.307853,-1.009845}, + {0.297282,0.648821}, + {-0.091781,-1.985271}, + {-0.606219,0.151353}, + {-0.429607,-0.025052}, + {-0.332890,1.175599}, + {-1.118603,0.141680}, + {-0.097394,-0.858219}, + {0.016748,0.173787}, + {0.499711,0.334283}, + {0.294804,-0.100448}, + {-0.226681,1.320937}, + {0.445101,-0.020208}, + {0.298761,0.661325}, + {0.366419,0.625208}, + {-0.610404,-0.402482}, + {-0.196988,-1.143042}, + {-0.140385,-0.419017}, + {0.112807,0.888080}, + {0.266033,0.057014}, + {-0.728926,-0.934920}, + {-0.140320,-0.094250}, + {1.177336,-0.396966}, + {0.420952,0.653529}, + {0.796815,0.416470}, + {0.811086,-0.565463}, + {0.367195,0.333449}, + {-0.400751,1.975824}, + {1.216133,-0.533538}, + {-0.061920,-0.453391}, + {-0.711951,-0.449488}, + {-0.102566,-0.455585}, + {0.285088,-0.802786}, + {0.808552,-0.322926}, + {-0.602289,0.632072}, + {-0.661576,-1.758596}, + {-0.146488,-0.548057}, + {-0.206403,-0.017511}, + {-0.450221,-1.498859}, + {0.932314,-1.134894}, + {0.656476,0.145769}, + {0.235734,0.094820}, + {-0.722074,0.001788}, + {-0.957129,0.829923}, + {-1.219129,-0.094515}, + {0.433577,0.505638}, + {0.667379,-0.080276}, + {-0.481288,-0.154287}, + {0.832150,0.696951}, + {0.845959,0.070575}, + {0.511181,-0.543340}, + {1.404294,0.382848}, + {0.652795,-0.156181}, + {-0.114089,-0.125219}, + {0.105672,-0.192649}, + {1.581463,-0.060738}, + {1.179013,0.318857}, + {-0.514448,-0.186117}, + {-0.004286,0.388816}, + {0.553462,1.141917}, + {-0.108260,-0.709488}, + {0.366715,0.522898}, + {1.011547,0.255626}, + {0.510127,-0.556431}, + {1.387465,-1.491813}, + {-0.030602,0.643039}, + {0.252861,0.370345}, + {0.158032,-0.485250}, + {1.505481,-0.401738}, + {-0.425678,1.475448}, + {0.558642,0.266556}, + {-0.761068,-0.757845}, + {-0.236187,0.096478}, + {-0.299872,-1.335299}, + {-1.133420,0.013509}, + {0.020291,0.311569}, + {0.852593,-0.665722}, + {-0.523899,0.543296}, + {-0.258387,0.397797}, + {-1.620860,0.323925}, + {1.104585,-1.383714}, + {0.683798,0.260786}, + {-1.928301,-0.180178}, + {-1.028854,0.442835}, + {0.657349,-0.494352}, + {-0.277212,0.670959}, + {-0.180849,0.531330}, + {-1.227284,-0.792597}, + {0.563598,-0.076574}, + {-0.437456,0.229217}, + {0.929340,0.015725}, + {0.074666,0.424629}, + {0.534245,-0.350823}, + {0.389638,-0.082153}, + {0.500066,-0.103981}, + {0.517706,0.482821}, + {-0.748255,1.069502}, + {0.473974,-0.018833}, + {0.395953,0.000067}, + {0.154909,0.296848}, + {0.200809,0.287738}, + {-0.607075,-0.544885}, + {-0.267287,0.616905}, + {-0.323802,1.280877}, + {0.255228,0.082953}, + {0.888876,-0.780725}, + {-1.507838,-0.628624}, + {0.117847,0.741004}, + {0.951439,2.158240}, + {0.255605,-0.694650}, + {0.403436,-0.019320}, + {0.028617,-1.122894}, + {-0.559034,-0.279798}, + {-0.151086,1.482814}, + {0.401004,-1.215030}, + {-0.010857,-0.722506}, + {-0.779211,0.186412}, + {0.839532,0.388371}, + {-0.519503,-0.769165}, + {0.886356,-0.068777}, + {-0.666874,0.232912}, + {-0.769333,0.407110}, + {-0.156172,0.626609}, + {-0.845403,0.246838}, + {-0.921500,-1.513649}, + {-0.659432,-0.352143}, + {-0.456287,0.822831}, + {-0.264057,0.594756}, + {-0.381242,0.749825}, + {0.584222,-0.010185}, + {0.717621,0.407810}, + {0.126997,0.610555}, + {0.121083,-0.601804}, + {0.338280,-1.296916}, + {-0.998988,0.202698}, + {0.271413,0.241189}, + {-0.660860,-0.922695}, + {0.217074,0.091244}, + {-0.829182,-0.173802}, + {-1.686936,0.133783}, + {0.085111,-1.036699}, + {-0.835207,-0.547288}, + {-1.001460,0.163306}, + {-0.009840,-0.897352}, + {-0.221570,0.248621}, + {-0.104666,-0.544456}, + {0.492826,1.224533}, + {-0.303816,0.203433}, + {-0.035890,-0.396120}, + {-0.911609,0.154966}, + {-0.477369,-0.149520}, + {0.829666,0.383750}, + {0.288714,-0.400195}, + {0.825822,1.060236}, + {-0.565369,0.570078}, + {0.725772,0.524669}, + {-1.427359,0.510741}, + {0.185095,0.075540}, + {0.123475,-0.291902}, + {0.273887,-0.125613}, + {-0.173428,1.043319}, + {0.321986,0.197724}, + {-0.846527,-0.708152}, + {0.008510,-0.342922}, + {0.627415,-0.580544}, + {0.845050,1.241589}, + {0.585281,0.461177}, + {0.359324,-0.420843}, + {0.049152,1.106094}, + {0.581734,-0.166265}, + {0.003368,1.019929}, + {1.025792,-0.545836}, + {-0.566680,0.838736}, + {0.217046,-0.554830}, + {0.746989,0.330831}, + {-0.477775,-1.838477}, + {1.209384,0.537204}, + {0.084745,-0.402040}, + {0.453664,0.663259}, + {-0.949609,0.481791}, + {-1.018870,0.244091}, + {-0.100135,-0.408291}, + {0.145723,-0.390015}, + {0.591639,-0.187299}, + {-0.072565,0.022234}, + {-0.090558,0.900594}, + {-0.115991,-1.076001}, + {-0.047715,0.945083}, + {-0.153139,1.232195}, + {0.395757,-0.137489}, + {0.500312,-0.165208}, + {-0.446434,-1.255448}, + {0.744826,0.719971}, + {0.101905,0.317928}, + {-1.113815,1.181345}, + {-0.826383,-0.342046}, + {0.698280,-0.256223}, + {-0.376007,0.253217}, + {-0.351381,-0.465508}, + {0.347951,0.252016}, + {1.060703,-0.456476}, + {-0.487386,1.010946}, + {0.082913,1.363434}, + {0.144076,0.505970}, + {0.788440,0.349740}, + {0.359451,0.412744}, + {-0.133783,0.371278}, + {0.132375,0.736016}, + {0.675589,-0.281074}, + {1.388233,0.041104}, + {-0.111974,-0.788585}, + {-0.719106,0.429423}, + {0.285667,0.906691}, + {-0.412522,-0.263860}, + {-0.379611,-1.850579}, + {-0.882381,0.633164}, + {-0.350683,0.326832}, + {0.113319,0.299109}, + {0.030724,-0.533961}, + {-0.229546,1.599082}, + {0.791774,0.219618}, + {-0.083769,-0.825250}, + {-0.250508,0.384164}, + {1.622536,0.627566}, + {0.269926,1.457477}, + {0.027500,0.077387}, + {-0.040952,-0.869704}, + {0.249097,0.799744}, + {-0.855749,-1.207818}, + {0.031174,0.232988}, + {0.470634,-0.176486}, + {-1.322606,-0.574727}, + {0.618473,-1.051757}, + {0.044093,-1.194452}, + {-0.856825,-0.363124}, + {-0.740040,0.491909}, + {1.049228,-0.383126}, + {0.269759,-0.756658}, + {0.411827,-0.187708}, + {-0.021801,-0.730890}, + {-0.338874,-0.436049}, + {0.439729,-0.211741}, + {-0.464913,0.405662}, + {0.813909,1.691059}, + {-0.432949,-0.328759}, + {0.016182,0.617470}, + {-0.000084,-0.630506}, + {1.013115,0.113926}, + {1.045430,-0.431612}, + {-0.149045,-0.540305}, + {-0.168907,1.023595}, + {-0.681722,-0.870885}, + {0.148709,-0.519793}, + {0.083637,-0.233137}, + {-0.006738,-0.358652}, + {-1.132096,-0.196676}, + {0.755618,-0.630740}, + {1.172062,0.331256}, + {-0.074557,-1.505289}, + {1.261753,-0.254490}, + {0.432557,-0.043824}, + {0.233409,-0.174214}, + {0.046213,0.259837}, + {-0.956389,0.034619}, + {0.336500,0.085573}, + {1.029807,-1.168944}, + {0.148733,-0.666186}, + {0.504364,0.591615}, + {-0.244863,-0.431764}, + {-1.287166,-0.010764}, + {0.206851,-1.199483}, + {-1.130227,-0.926562}, + {0.045319,-0.640907}, + {1.744857,0.365060}, + {-0.337659,0.254251}, + {-1.241628,0.474563}, + {-0.098000,0.043348}, + {0.135789,0.720002}, + {0.079954,-0.567468}, + {0.209679,0.580221}, + {0.129076,-0.638995}, + {-0.259201,0.098160}, + {0.684000,0.742712}, + {-1.058322,1.121174}, + {-1.133869,-0.077823}, + {-0.786057,-0.192047}, + {0.043596,-0.730099}, + {-0.468971,-0.508530}, + {-0.166478,0.964301}, + {-0.421994,0.534392}, + {0.801013,0.327796}, + {0.626465,-0.857809}, + {-0.316640,0.963254}, + {-0.686444,-0.349580}, + {-0.411887,0.006307}, + {-0.044218,-0.684096}, + {1.448337,-0.256645}, + {0.224336,-0.436483}, + {0.025337,-0.347815}, + {-0.407366,0.419951}, + {-0.132820,0.348857}, + {0.371735,-0.864264}, + {0.086483,-0.338426}, + {0.585107,0.270821}, + {0.326869,0.548646}, + {-0.326146,-0.463299}, + {1.143470,-0.087656}, + {-0.098858,1.246934}, + {-0.036904,0.191940}, + {0.287535,-0.291944}, + {0.369159,0.063018}, + {-1.317075,-0.193187}, + {0.378189,0.176271}, + {0.856049,-0.716794}, + {0.077633,0.519224}, + {-0.699016,-0.029019}, + {0.295033,0.961106}, + {0.197367,0.762655}, + {0.114262,-0.106428}, + {0.589365,-0.677044}, + {-0.241511,0.228210}, + {-0.430454,-0.895877}, + {0.702252,0.370365}, + {1.742418,-0.318825}, + {0.735371,-0.917391}, + {0.798335,-0.370615}, + {-0.537492,0.369018}, + {1.236422,0.065891}, + {-0.266399,-0.351783}, + {0.423548,0.165331}, + {0.077228,0.536433}, + {-0.174825,0.148350}, + {0.199017,-0.554067}, + {-0.965766,-0.545608}, + {0.554513,0.053499}, + {0.037865,0.091226}, + {0.586746,0.403764}, + {1.063461,-0.711465}, + {0.627927,0.180048}, + {1.849318,0.366474}, + {-0.787943,-0.066363}, + {-0.225401,0.838693}, + {0.780419,1.099950}, + {-0.583530,-0.334410}, + {0.435296,-0.110910}, + {-0.395316,0.522476}, + {-0.296867,1.030867}, + {0.180194,0.365723}, + {-0.565612,0.105022}, + {-0.071050,-0.637618}, + {1.036443,1.254893}, + {-0.357016,0.150407}, + {-0.105283,0.193076}, + {0.137034,0.727374}, + {0.395267,-0.224436}, + {-0.148716,0.241524}, + {-0.185222,0.387931}, + {1.193605,-0.847551}, + {0.250426,-0.707717}, + {0.140128,-0.294992}, + {0.023456,0.023879}, + {0.557191,-1.088329}, + {-0.705496,-0.351205}, + {0.706976,1.287748}, + {0.207298,-0.734820}, + {0.124706,0.189566}, + {0.797376,1.215020}, + {-0.329404,-0.576281}, + {0.648951,0.195529}, + {-0.597548,0.519029}, + {0.212921,0.436097}, + {-0.330959,0.311842}, + {-2.163917,-0.881882}, + {-1.070369,0.664018}, + {0.473269,-0.101973}, + {0.378465,-0.822488}, + {1.361181,0.418143}, + {-1.012859,-0.712103}, + {0.870152,-1.346827}, + {0.653007,-0.617410}, + {0.497337,-0.775725}, + {-0.260237,0.259267}, + {-0.743430,-0.591395}, + {-0.674841,-0.191339}, + {-0.584851,-0.214106}, + {0.225244,0.160024}, + {1.161423,0.256300}, + {-1.640086,-0.242275}, + {-0.180871,-0.679693}, + {-1.243241,-0.228350}, + {0.599251,0.947940}, + {1.146590,-0.156590}, + {-0.647330,0.051065}, + {1.949584,-0.583944}, + {-0.242692,1.238130}, + {0.039443,0.740763}, + {-1.458523,0.089037}, + {-0.153975,-0.381741}, + {-0.317357,-0.610750}, + {0.237125,1.346517}, + {-0.201768,0.320696}, + {0.606654,1.023548}, + {0.810015,0.801355}, + {-0.870015,0.018496}, + {0.005406,0.866319}, + {-0.020676,-0.167982}, + {-0.341657,0.564725}, + {-0.720214,-0.704252}, + {0.656031,-0.457047}, + {0.070486,0.044186}, + {-0.170715,-0.739585}, + {0.184302,-1.788002}, + {0.715592,-0.376628}, + {-0.363081,-0.119088}, + {-0.100914,0.119614}, + {0.005834,-0.268860}, + {-0.129771,0.331506}, + {0.143287,-0.198036}, + {-0.304611,0.217426}, + {-0.594381,-0.825000}, + {-0.365556,-0.258829}, + {-0.214172,1.162243}, + {-1.194364,0.810341}, + {-0.325733,-0.570507}, + {-0.614001,-0.663556}, + {0.118437,-0.291858}, + {0.502611,-0.601088}, + {0.659081,-0.217369}, + {-0.446278,-0.786148}, + {0.022241,0.272441}, + {0.590431,0.909812}, + {-0.505353,0.055519}, + {-1.032100,-0.102485}, + {0.514653,0.094284}, + {0.017452,-0.117900}, + {-0.434090,-0.360114}, + {-0.795938,0.951701}, + {1.526127,-0.592844}, + {-0.389825,-0.453072}, + {0.384166,-1.012017}, + {1.182901,-0.350927}, + {-0.650756,-0.215167}, + {-0.920064,0.382095}, + {0.325262,0.053581}, + {-0.367365,-0.250609}, + {-0.792805,-0.159176}, + {0.364886,1.149926}, + {-0.952999,-0.523706}, + {-0.590878,-0.928414}, + {1.302134,0.020920}, + {0.271231,1.409444}, + {-0.421610,0.925520}, + {1.193167,0.706521}, + {-0.333416,0.336865}, + {0.018979,0.278195}, + {0.454613,0.518481}, + {-0.039562,-0.760878}, + {0.452849,0.034856}, + {-0.363828,-0.532211}, + {-0.120648,0.354305}, + {0.124415,0.897220}, + {0.079466,-0.085179}, + {0.550458,0.796151}, + {0.118218,0.662074}, + {-0.355235,-0.199056}, + {0.436312,0.191719}, + {1.566220,-0.116118}, + {-0.836157,-0.768313}, + {1.586808,0.178922}, + {-0.280443,-0.468900}, + {-0.326042,0.010218}, + {0.566632,1.593287}, + {1.012295,-1.739928}, + {-0.076488,0.044391}, + {0.483599,-0.125041}, + {-1.492059,0.640508}, + {-0.678092,-0.179653}, + {-0.373386,-0.340247}, + {-0.832028,0.600061}, + {-0.567324,-1.027965}, + {-0.083357,0.199339}, + {-0.734433,0.929912}, + {0.570454,0.573202}, + {-0.365270,0.716633}, + {-0.417190,-0.754130}, + {-0.854980,-0.194668}, + {-0.798654,-0.640999}, + {-0.386871,0.854369}, + {-0.317394,-0.378946}, + {0.845760,-0.762026}, + {-0.238503,0.628650}, + {-0.476581,-1.193935}, + {0.372842,0.363358}, + {1.929276,0.425483}, + {0.560945,-0.892123}, + {0.832559,1.026749}, + {0.332159,-0.899940}, + {0.729769,-0.406694}, + {1.773252,-1.453081}, + {0.014471,0.518545}, + {-0.032728,-0.153441}, + {-0.418525,-0.263385}, + {1.483183,1.053228}, + {-1.108048,-0.126405}, + {-0.882071,0.557002}, + {-0.299469,0.621888}, + {-1.390889,0.791123}, + {0.087246,-0.444939}, + {-0.971593,0.855966}, + {0.288585,-1.387271}, + {-0.019311,0.732536}, + {0.575029,-0.900371}, + {-0.849454,-0.021176}, + {0.102055,0.741000}, + {0.639938,0.250506}, + {0.031515,-1.559311}, + {0.184749,0.007297}, + {-0.615292,0.150555}, + {-1.045878,0.504486}, + {0.648174,0.248709}, + {-1.923251,-0.525706}, + {-0.139883,-0.496519}, + {-0.273595,0.733709}, + {-0.554049,-0.638829}, + {-0.388154,-0.721417}, + {0.302342,-0.922345}, + {0.301997,0.247964}, + {0.783229,-0.118560}, + {0.015568,-1.688273}, + {-0.203951,-0.271846}, + {-0.464304,-0.803130}, + {0.788053,0.525790}, + {-0.310437,0.810294}, + {0.734484,-0.122955}, + {0.078820,-0.755273}, + {0.689406,0.380790}, + {-0.879125,-0.800241}, + {0.916797,-0.158671}, + {-0.955580,0.370290}, + {1.053886,0.183747}, + {-1.024297,0.502801}, + {0.821289,-0.323075}, + {-0.197416,-0.199129}, + {0.128673,-0.204273}, + {-0.047906,0.532305}, + {-0.332497,-0.459762}, + {-0.921215,0.010891}, + {-1.187693,0.237371}, + {-0.907113,-1.114225}, + {-0.391416,0.334680}, + {0.484839,-0.022006}, + {0.279699,-0.155898}, + {0.232580,0.635441}, + {0.442647,-0.512038}, + {0.457949,-0.744347}, + {-0.420994,-0.605339}, + {0.607157,1.329146}, + {-0.274663,0.330222}, + {-0.146928,0.998094}, + {0.634872,-0.085303}, + {0.038862,0.137135}, + {0.874375,0.481656}, + {-0.078049,0.930253}, + {0.211922,0.365963}, + {-0.057426,-1.256802}, + {-0.249915,0.102113}, + {0.074635,0.926036}, + {-0.919523,0.156604}, + {0.321808,-0.463000}, + {-0.336447,0.591209}, + {0.069922,0.186182}, + {-0.098125,0.286970}, + {-0.945924,0.199885}, + {1.251790,-0.588337}, + {-0.103392,-0.063531}, + {-1.495706,0.300232}, + {0.161476,-0.532461}, + {-0.229976,0.007762}, + {0.102294,0.640865}, + {-0.046165,-0.345694}, + {0.152871,-0.139371}, + {-0.621642,0.466272}, + {0.502189,-0.429932}, + {0.381534,0.850587}, + {1.047882,0.364581}, + {0.166650,-0.533360}, + {-0.147243,0.870267}, + {0.264328,-0.088269}, + {0.241229,0.219450}, + {-0.674579,0.991554}, + {-0.952101,0.726952}, + {0.000481,-0.050198}, + {-0.237754,0.641076}, + {-0.058228,-0.524298}, + {1.097294,-0.979438}, + {-1.219292,-0.095890}, + {0.265504,-0.684968}, + {-0.779660,0.555899}, + {0.571050,-0.072841}, + {0.669225,1.701574}, + {-1.191487,0.111178}, + {0.909199,0.891876}, + {-0.395837,-0.258702}, + {0.093876,-0.469630}, + {-0.423132,0.835933}, + {-0.273781,-0.809838}, + {0.379980,0.848947}, + {1.264064,-0.035597}, + {-0.801897,0.295423}, + {0.817880,-0.017036}, + {-0.105681,0.855247}, + {0.486284,-0.619853}, + {-0.032531,0.489774}, + {0.211010,0.529908}, + {0.661884,2.635604}, + {0.539633,1.054015}, + {-0.523203,0.144841}, + {0.642130,-0.062279}, + {0.773169,-0.295494}, + {1.236025,0.138371}, + {-0.902266,-0.091117}, + {0.126149,1.096640}, + {-0.361577,0.548790}, + {0.082879,-0.449861}, + {-0.084813,1.095634}, + {1.546048,1.536377}, + {0.856924,0.635732}, + {0.834506,0.824424}, + {-0.021495,-0.526435}, + {-0.838356,0.515902}, + {-0.473372,-0.161548}, + {-0.778314,1.424876}, + {-0.230595,-0.748969}, + {-1.592887,-0.737746}, + {-0.938554,-0.530306}, + {-1.572545,-0.791394}, + {0.435546,-0.376083}, + {0.525145,0.213393}, + {0.367887,-1.044275}, + {-0.719915,0.061255}, + {0.304958,-0.204748}, + {1.210495,-0.112141}, + {-0.086723,0.129535}, + {-1.281467,0.522155}, + {-0.333647,-0.274983}, + {-0.554049,0.413201}, + {0.753145,0.891878}, + {0.274075,-0.707382}, + {-0.062669,0.788726}, + {0.466273,-0.501215}, + {0.024895,0.354051}, + {0.798756,0.455852}, + {-0.020206,-0.029112}, + {0.339560,1.851831}, + {0.152438,0.738243}, + {0.183936,-0.781268}, + {-0.103182,0.713654}, + {0.875376,-0.483562}, + {0.015320,-0.460793}, + {0.060661,-0.643523}, + {-2.264353,0.105116}, + {-0.789343,0.615718}, + {-0.243310,0.060137}, + {1.699891,-0.863147}, + {-0.512188,-0.107884}, + {0.715462,-0.746962}, + {-0.168059,0.396399}, + {-1.855221,0.474742}, + {1.117193,-0.177673}, + {0.605124,0.264148}, + {-0.158801,-0.269563}, + {-0.026259,1.643594}, + {-0.612630,-0.403823}, + {-2.104756,1.120870}, + {0.439319,-0.326207}, + {-0.729839,-0.030055}, + {-0.197924,-0.161142}, + {0.859821,0.172257}, + {-0.082605,1.518575}, + {-1.076389,-1.744869}, + {-0.219282,1.053450}, + {-0.545467,0.263106}, + {0.717580,-0.589610}, + {-0.704720,-0.962831}, + {0.404192,0.274100}, + {-0.559766,-0.674194}, + {-0.846818,1.766523}, + {0.413603,0.183993}, + {0.258588,0.447021}, + {0.711449,-0.254685}, + {-0.039759,0.029436}, + {-0.128433,-0.269298}, + {-1.025894,1.345869}, + {-0.912975,0.052240}, + {0.755264,-0.206240}, + {0.044141,0.949915}, + {-1.565117,-0.595266}, + {0.200074,-1.417585}, + {-0.158238,-0.081043}, + {-0.503170,-0.078182}, + {0.362525,-0.194696}, + {0.259960,-0.907605}, + {-0.105310,-1.933984}, + {-0.899535,-0.440019}, + {0.163533,0.065331}, + {-0.571787,-1.130394}, + {0.301250,-0.094735}, + {0.104414,-1.423818}, + {-0.146865,-0.198913}, + {-0.497490,0.758248}, + {0.466122,-0.416899}, + {-0.940500,0.639487}, + {-0.440392,0.809788}, + {-2.223726,0.948796}, + {-0.313709,1.585454}, + {0.206535,-0.868710}, + {0.910526,-1.174225}, + {-0.495236,0.167135}, + {-0.575404,0.007086}, + {-0.255414,0.937178}, + {-0.296419,-0.082039}, + {1.002712,1.059056}, + {-1.200725,1.009362}, + {-1.031906,1.427611}, + {0.064588,-0.744817}, + {1.290310,0.659770}, + {0.251141,-0.190253}, + {-0.586866,-0.099783}, + {1.514305,0.076462}, + {-0.292877,-0.034932}, + {0.086519,-1.537324}, + {0.558554,-1.027847}, + {0.016688,-0.294418}, + {-0.464068,0.572870}, + {-1.031390,0.702926}, + {-0.993327,0.280797}, + {0.407376,1.270542}, + {-0.291421,-0.688110}, + {0.842434,1.685884}, + {-0.464356,-1.287623}, + {0.680357,-0.473646}, + {0.694717,0.571415}, + {0.391202,-0.560555}, + {-0.169632,-0.035731}, + {-0.203948,0.790613}, + {-0.670035,-0.264796}, + {-0.090461,0.101945}, + {-0.311617,0.481222}, + {-0.344817,0.135445}, + {-1.162870,0.142668}, + {-0.487890,-0.544005}, + {0.732853,0.690509}, + {0.585005,-1.244755}, + {0.503757,-0.316446}, + {0.869989,-0.370224}, + {0.351113,-0.041060}, + {0.021720,-0.728370}, + {-0.706755,-0.494790}, + {-0.103364,-1.238782}, + {-0.355559,-0.533147}, + {0.166720,-0.864956}, + {0.334983,0.100261}, + {-0.848547,0.637065}, + {-0.317559,0.657728}, + {0.409242,0.262048}, + {0.596688,0.826314}, + {-0.458137,0.110997}, + {-0.682732,-0.219886}, + {-0.408569,0.043952}, + {-0.320255,-1.596813}, + {0.387040,-0.699110}, + {0.198430,-0.538138}, + {0.856802,-0.708255}, + {0.756612,-0.653997}, + {-0.356619,-0.562844}, + {0.271806,1.194806}, + {-0.175223,-1.368711}, + {-0.153117,-0.398840}, + {0.706898,-0.328442}, + {0.034251,-0.107789}, + {0.277096,0.757656}, + {-0.144774,0.378035}, + {-1.538711,0.603603}, + {0.206118,0.430155}, + {0.622510,0.173831}, + {0.046042,0.058330}, + {-0.577057,0.162875}, + {0.685647,-0.647830}, + {-0.910460,0.504792}, + {-0.200849,-0.954877}, + {0.475974,-0.438454}, + {0.340606,0.030790}, + {-0.278135,0.194854}, + {0.707024,-0.623755}, + {-0.091069,-2.189701}, + {-0.273684,-0.897539}, + {0.050275,0.334330}, + {-1.301614,-0.241288}, + {0.376532,1.392280}, + {0.848500,0.658936}, + {-0.354567,-0.729838}, + {0.779270,-0.651632}, + {-1.525730,0.876681}, + {0.587723,-1.383307}, + {-0.741497,0.254969}, + {0.873264,0.197479}, + {-0.480964,1.299430}, + {-0.431708,0.130537}, + {0.323680,-0.448970}, + {-0.803705,-0.383630}, + {0.259853,-0.171842}, + {-0.074427,-1.423999}, + {0.213413,-0.806918}, + {0.319758,-0.629784}, + {0.197369,-0.175039}, + {0.374164,-2.020326}, + {0.234205,0.212423}, + {0.442106,-0.486910}, + {-0.970864,0.312143}, + {0.994610,0.634741}, + {0.048931,0.205781}, + {0.369340,-0.247351}, + {-0.458195,0.094655}, + {-0.853393,0.397950}, + {-0.222113,-0.020140}, + {0.855104,1.002182}, + {-0.949021,0.731330}, + {-0.073219,1.402526}, + {-0.151223,-0.492186}, + {-1.375457,-0.136411}, + {-0.466811,0.022190}, + {1.087376,0.106868}, + {-0.744528,-0.413374}, + {-0.342038,0.049102}, + {-1.494273,-0.271438}, + {-0.125528,0.601419}, + {-0.111221,-0.380202}, + {0.641612,0.273790}, + {-0.883504,0.517323}, + {-0.843544,0.433726}, + {0.070544,0.613134}, + {-1.407600,-0.044330}, + {-0.492451,0.995879}, + {0.983269,0.143963}, + {0.221852,0.495000}, + {-0.791657,0.614310}, + {0.703727,-0.571992}, + {-0.071284,0.875682}, + {1.641568,-0.631850}, + {-0.083871,0.250629}, + {-0.229893,-1.203232}, + {-0.382616,1.669525}, + {0.486753,-1.096469}, + {-0.599193,-0.121324}, + {1.105338,0.376484}, + {-0.433136,-0.568643}, + {1.262118,0.303337}, + {-0.180750,-0.251747}, + {0.232196,0.634354}, + {0.526905,0.692507}, + {-0.416640,-0.134469}, + {-0.945404,0.290901}, + {1.452757,0.222601}, + {-0.057791,-0.455470}, + {-0.853629,-0.583719}, + {-0.233342,0.161093}, + {-0.968813,0.500752}, + {-0.861537,0.075586}, + {1.474493,-0.284338}, + {-0.754792,0.807480}, + {-0.643724,1.545286}, + {-0.922333,-0.131210}, + {-1.068958,-0.426784}, + {-1.011546,0.020778}, + {0.787292,0.193200}, + {1.276891,0.812940}, + {-0.001378,1.525040}, + {-0.482745,0.059566}, + {0.640762,-0.003003}, + {-0.842820,-0.681972}, + {-1.136885,1.104554}, + {0.707249,0.574867}, + {0.404579,0.578500}, + {0.772682,0.950729}, + {-0.758872,-0.442283}, + {-0.134508,0.287088}, + {-1.217763,-0.136208}, + {0.067001,0.006883}, + {-1.117236,-0.517592}, + {1.074093,-1.371225}, + {0.434892,-0.753326}, + {-1.657469,-0.184451}, + {-0.563524,0.887134}, + {0.594674,-0.128692}, + {-0.861165,0.393858}, + {0.740365,-0.155010}, + {-0.542431,-0.137020}, + {-0.160958,0.367545}, + {1.061826,-0.276971}, + {-0.771112,0.145356}, + {1.963119,0.088410}, + {0.024542,0.144405}, + {-1.161727,0.028527}, + {-0.629890,-1.011632}, + {-0.523735,0.451983}, + {0.226956,-0.663835}, + {-0.709942,0.411619}, + {-0.862071,-0.723057}, + {-0.430194,0.705340}, + {0.489380,-0.913195}, + {-0.913531,-0.125404}, + {0.580276,-0.084090}, + {-0.795566,0.423792}, + {0.195894,-0.952419}, + {0.206701,0.058895}, + {0.343643,0.988757}, + {0.111858,1.155224}, + {-0.402678,0.396630}, + {-0.085481,1.087237}, + {-0.626447,0.384020}, + {-1.545255,1.402500}, + {-0.382681,1.101254}, + {-0.570465,-0.881833}, + {-0.067170,0.447168}, + {-0.402078,-0.107883}, + {-0.063022,1.237664}, + {0.357641,-0.210884}, + {0.173106,1.169455}, + {0.371232,-0.555801}, + {0.426061,1.683925}, + {-0.862561,0.481593}, + {-1.295345,0.677131}, + {0.882575,-0.080920}, + {1.076227,0.081224}, + {0.217811,0.806447}, + {0.642645,-0.244275}, + {-0.137093,-0.322132}, + {0.246084,-0.089603}, + {0.827582,-0.845716}, + {0.373640,-0.242160}, + {-1.221390,0.390996}, + {-0.147700,0.855458}, + {-0.301463,-0.077718}, + {-0.477683,-1.468176}, + {-0.708449,0.284200}, + {0.341767,1.177536}, + {0.073596,-0.373099}, + {-0.418003,0.011618}, + {0.659790,0.501637}, + {0.517335,-0.383893}, + {-0.504534,0.584654}, + {-0.700111,-0.051171}, + {0.235161,-1.457844}, + {0.447664,-0.556099}, + {0.669581,1.662563}, + {0.635083,-0.024530}, + {-0.426292,-0.598758}, + {0.380072,-1.112453}, + {-0.081336,0.145480}, + {-0.907122,0.871629}, + {0.131628,1.573776}, + {-0.384249,0.507013}, + {-0.799491,0.657805}, + {-0.243014,0.812674}, + {-0.280861,-1.138266}, + {0.252573,-0.763178}, + {-0.829438,0.152104}, + {0.238524,-0.277766}, + {2.523618,-0.842357}, + {-0.699246,-0.801106}, + {1.166441,0.831885}, + {0.413058,0.094339}, + {-0.446019,0.307323}, + {-0.725646,-0.489846}, + {-0.253605,-1.246224}, + {0.912358,-0.556724}, + {1.278255,0.012615}, + {-0.078776,-1.194235}, + {-0.366774,-2.136559}, + {0.776158,0.034121}, + {0.124952,0.735158}, + {0.495498,-0.287894}, + {0.645361,0.435278}, + {-0.027172,-0.196745}, + {-0.091825,0.181205}, + {-0.449690,0.202206}, + {0.615196,-0.763464}, + {0.006443,-0.808811}, + {-0.778937,-0.464757}, + {-0.661201,-0.076723}, + {0.142220,0.639184}, + {0.043606,0.256401}, + {1.185320,0.179074}, + {0.964460,1.638016}, + {-0.439314,-1.027129}, + {-0.974713,-0.701040}, + {0.626450,1.670174}, + {0.849683,0.000633}, + {-0.758821,0.643905}, + {0.533524,-0.276729}, + {-0.287200,0.229033}, + {0.976720,0.691516}, + {0.413251,-0.414654}, + {-0.105930,0.582164}, + {1.083972,0.127931}, + {-0.008602,0.396564}, + {-1.014633,-0.766216}, + {-0.567769,-0.603326}, + {-0.671345,-0.870915}, + {-0.436383,0.159432}, + {0.789563,-1.405331}, + {-0.012052,0.291490}, + {-1.064900,0.499255}, + {1.857613,0.173601}, + {-0.166943,-0.593651}, + {0.813628,0.624637}, + {-0.792895,-0.334087}, + {-0.371264,-1.463375}, + {0.232055,1.514775}, + {-0.480078,-0.932215}, + {0.493973,0.190971}, + {0.477380,0.232577}, + {0.240390,-0.359935}, + {0.082890,-0.564972}, + {0.142401,0.071885}, + {0.415193,-0.076906}, + {1.294283,0.031845}, + {0.184350,0.522837}, + {-0.985097,0.515890}, + {-0.321414,0.266318}, + {-0.040275,-1.090636}, + {1.454251,-0.464461}, + {-1.341400,-0.556900}, + {1.112672,-1.294695}, + {0.684248,-0.569627}, + {0.110519,1.620119}, + {-0.074092,-1.501786}, + {0.836840,0.582174}, + {-0.312866,-0.163083}, + {-0.348387,0.846036}, + {-0.401781,-0.683929}, + {-0.477886,0.419644}, + {0.380085,1.371967}, + {-0.151815,-1.437845}, + {0.362655,1.699131}, + {-0.285574,-0.328342}, + {-0.373046,0.552420}, + {0.524496,-0.274919}, + {0.162426,-0.591347}, + {0.247988,-1.248758}, + {0.179873,-0.495477}, + {0.332481,0.187029}, + {-0.680053,-0.795562}, + {-0.297790,-1.228507}, + {0.433604,0.362610}, + {-0.912981,-0.317793}, + {0.356607,-0.401878}, + {-0.457215,1.277897}, + {0.423863,-0.907331}, + {1.369555,0.294154}, + {-0.558227,-0.787342}, + {-0.700928,-0.002200}, + {0.475999,0.053324}, + {0.759515,-0.511097}, + {-0.214352,-1.108068}, + {-0.823262,0.181915}, + {-1.481847,-0.145536}, + {-0.838811,-0.827068}, + {-0.354237,-0.929419}, + {-0.003615,0.497626}, + {1.165999,0.676843}, + {0.626492,0.510292}, + {0.158529,0.168647}, + {1.189623,0.008902}, + {0.281004,-1.174505}, + {0.610236,-0.754183}, + {-0.669239,0.615970}, + {0.300373,-0.608739}, + {1.205115,-0.072012}, + {0.272992,-0.140035}, + {-0.478646,-0.534863}, + {-1.353538,0.265825}, + {-0.199615,-1.529628}, + {-0.219052,1.418831}, + {-0.138797,0.344504}, + {0.170086,-0.026321}, + {-0.196733,0.535114}, + {-1.033414,-0.221792}, + {0.028438,0.044914}, + {-0.884678,0.622154}, + {0.822835,-2.043658}, + {0.344915,-1.053158}, + {-0.644134,-0.574558}, + {-1.332407,0.519250}, + {0.036381,0.475286}, + {-0.303382,0.982412}, + {-0.353411,0.250417}, + {0.139548,-0.642938}, + {1.414632,-0.370112}, + {0.532912,-0.264381}, + {0.342811,0.344477}, + {0.501145,-0.288626}, + {0.311541,0.560236}, + {-0.413902,-0.733376}, + {0.591928,-0.533218}, + {-0.311692,-0.614243}, + {0.357470,-1.610867}, + {-0.400828,-0.474021}, + {0.291392,1.248851}, + {0.016993,-0.633725}, + {-0.525249,0.450546}, + {0.801819,1.070688}, + {-1.296271,-0.616623}, + {-0.393605,-0.448016}, + {-0.165781,0.199731}, + {-0.066457,0.457058}, + {0.245912,0.367495}, + {-0.614678,0.338112}, + {0.424687,-0.042103}, + {-0.016281,0.164701}, + {-0.388587,-0.005404}, + {-0.616791,0.044666}, + {0.164994,-0.591148}, + {1.130053,0.244749}, + {-0.764096,-0.677907}, + {0.001894,0.070851}, + {0.970162,-0.004036}, + {0.294438,-0.848449}, + {-0.085147,-1.038641}, + {0.146574,-1.020098}, + {0.731212,1.172352}, + {-0.966413,0.010182}, + {0.022011,0.098571}, + {-0.062500,0.809517}, + {0.613554,0.896113}, + {-1.702897,-0.428981}, + {-0.295817,-0.095047}, + {0.363999,1.299666}, + {-0.185637,0.710197}, + {0.667850,-0.579586}, + {-0.091486,-1.745092}, + {0.278540,-0.322231}, + {-1.393286,0.017571}, + {-0.909896,-0.550217}, + {-0.227978,-0.287231}, + {-0.041531,-0.572542}, + {0.598923,-1.109982}, + {0.528515,0.294793}, + {1.420346,-0.167967}, + {0.339044,-0.296742}, + {-0.427926,-0.195084}, + {2.320888,-0.602119}, + {0.316394,-0.195310}, + {0.392226,-0.018758}, + {-0.347128,-0.012198}, + {0.885682,0.291685}, + {0.694113,-0.213884}, + {1.098109,0.434729}, + {0.126689,0.353735}, + {-0.540018,-0.289525}, + {-0.878448,1.391600}, + {-0.019977,0.206745}, + {0.873189,-0.483586}, + {0.121439,-0.209070}, + {0.648235,-0.185503}, + {-0.009043,-0.764272}, + {0.372579,0.872373}, + {0.472101,-0.192603}, + {-0.407035,-0.893065}, + {-1.367142,-0.975043}, + {0.746200,-0.328607}, + {0.388173,-1.625638}, + {0.884013,-0.528696}, + {0.705324,0.779519}, + {0.408395,-0.377831}, + {1.083901,0.395567}, + {0.781733,-0.146787}, + {-0.068884,-0.865584}, + {0.156537,0.742738}, + {0.113212,0.987732}, + {1.521997,0.329659}, + {-0.192594,-0.352522}, + {-0.976653,0.187491}, + {0.817131,0.071363}, + {0.699118,0.409109}, + {-0.297057,-0.940273}, + {-0.936432,-1.106289}, + {0.626260,-0.241420}, + {-0.260488,0.166791}, + {0.701135,-1.061037}, + {-0.554144,-1.046121}, + {0.513165,0.663304}, + {-0.011168,0.147376}, + {0.037910,1.201414}, + {0.140816,1.384849}, + {-0.242984,-1.207828}, + {-0.107482,0.575915}, + {0.451083,0.174602}, + {0.269525,-0.536069}, + {0.211411,-0.104573}, + {-0.204415,-0.512769}, + {0.628925,-0.352539}, + {1.033395,0.036681}, + {-0.675614,-0.143876}, + {-0.621722,-0.934906}, + {0.211877,-0.248810}, + {-0.352170,0.551980}, + {-1.116948,0.321283}, + {-0.826697,1.581404}, + {-0.195648,0.310111}, + {-0.938570,-0.616930}, + {-0.451007,0.525622}, + {-0.120274,0.851907}, + {0.045607,-0.373985}, + {-0.214821,0.266194}, + {0.171364,-0.008571}, + {0.301965,-0.705054}, + {-1.165181,-0.235733}, + {-0.650434,-0.274030}, + {0.122090,0.561616}, + {0.435428,-0.782393}, + {-0.004740,-0.125884}, + {-0.321219,-0.415579}, + {-1.199688,0.284728}, + {-0.533240,0.015463}, + {0.304348,-0.073971}, + {-0.733804,-0.444715}, + {-0.725423,0.204256}, + {0.604231,-0.689961}, + {-0.756920,-0.218757}, + {0.956018,0.954204}, + {0.169414,-0.152566}, + {0.481613,-0.565409}, + {0.371303,0.288803}, + {-0.794294,-1.147211}, + {-1.706341,0.716376}, + {-0.627696,0.291968}, + {-0.121333,-1.001299}, + {0.550558,-0.282856}, + {-0.349733,-0.561486}, + {0.578835,0.339123}, + {0.420234,-0.741495}, + {0.144577,0.277881}, + {0.031130,-0.728796}, + {-0.564058,1.498556}, + {1.015670,0.422366}, + {-0.063266,0.346276}, + {0.551090,-1.963699}, + {0.934465,-0.385555}, + {0.422983,1.159449}, + {0.101278,-1.667219}, + {-0.308766,0.332842}, + {0.150898,-0.097385}, + {-0.862758,-1.060237}, + {-0.687885,-1.141096}, + {-0.862829,-0.505841}, + {0.558943,-0.778417}, + {0.549535,-0.363780}, + {0.072778,0.637066}, + {0.286029,0.322126}, + {0.330171,-0.854661}, + {-1.348837,-0.420251}, + {-0.198428,-0.371513}, + {-0.525214,0.301414}, + {-0.667387,0.022208}, + {-0.574674,0.529466}, + {2.371918,-0.496606}, + {0.257499,-0.783288}, + {0.156324,0.286932}, + {0.087484,0.531503}, + {0.093291,0.317147}, + {-0.427160,-2.024729}, + {-0.044421,1.046526}, + {0.978931,0.464268}, + {-1.373383,-0.073722}, + {-2.321501,-0.976402}, + {0.683655,0.655822}, + {0.352602,-0.192715}, + {0.339613,0.269168}, + {-0.472547,-1.432907}, + {-0.231035,0.019309}, + {-0.094858,1.060712}, + {0.681354,-1.324615}, + {0.864079,0.416811}, + {-0.558628,0.087251}, + {-0.365315,0.133957}, + {0.107680,2.348517}, + {0.198383,1.253961}, + {-1.268406,0.952837}, + {-0.992758,-0.560084}, + {0.672959,0.572037}, + {-0.449041,1.977002}, + {0.522614,0.339234}, + {0.085229,-0.360501}, + {0.640099,0.726865}, + {-0.091502,-0.015738}, + {-1.201696,1.035130}, + {-0.109550,-0.696829}, + {1.168720,1.005732}, + {-0.249323,1.263522}, + {0.724024,0.109230}, + {0.265328,0.012693}, + {-0.842707,-1.113746}, + {-1.256092,-0.822533}, + {-0.075814,-0.052293}, + {-0.128797,-0.411582}, + {-0.653104,-0.788771}, + {0.939494,0.157740}, + {1.072504,0.885641}, + {0.163190,0.818505}, + {0.706255,0.687324}, + {0.384361,-0.313490}, + {0.508228,-1.395336}, + {0.359982,0.352805}, + {-0.256236,0.825832}, + {0.029179,-0.324424}, + {0.486841,0.728258}, + {0.817556,0.065814}, + {1.494148,0.828882}, + {-0.050180,-0.893645}, + {-0.636544,-1.178485}, + {-0.720967,0.391549}, + {-1.307682,0.078339}, + {-0.605757,-0.944323}, + {-0.731348,-0.094258}, + {0.396463,0.209925}, + {0.209509,-0.607296}, + {0.119597,-0.249649}, + {-0.200995,-0.099649}, + {-0.567400,-0.345251}, + {-0.857138,0.181769}, + {-0.941646,-0.854838}, + {-1.128753,0.837338}, + {-0.657241,-0.759242}, + {-0.188936,0.670672}, + {-0.306598,-0.482202}, + {0.912207,-0.517195}, + {1.164901,-0.427966}, + {-0.009895,-1.020774}, + {0.025765,1.322707}, + {0.150524,1.732201}, + {-0.439267,-0.498603}, + {-0.368177,0.524348}, + {-0.630978,-0.521041}, + {-0.231973,-0.184883}, + {0.067075,1.310441}, + {-0.105442,1.412885}, + {0.331006,-1.363233}, + {0.791599,0.084396}, + {-0.890726,-1.246866}, + {-0.542651,-0.106851}, + {0.107314,0.092753}, + {-0.732606,0.153913}, + {-0.330158,0.495539}, + {0.489401,1.064049}, + {-0.417820,1.261110}, + {-1.631694,-0.818434}, + {-0.620724,-0.895058}, + {0.426467,-1.064865}, + {0.467471,-0.278711}, + {0.817514,-0.321221}, + {0.096475,-0.494918}, + {0.152146,0.351492}, + {-0.498145,1.133315}, + {0.303055,-0.317239}, + {0.103959,0.019469}, + {0.092448,0.918901}, + {-0.993398,0.147710}, + {-0.995629,0.413023}, + {1.220671,-1.202642}, + {0.724379,1.575400}, + {0.811431,0.466068}, + {0.499664,-0.880995}, + {0.558109,0.769554}, + {-0.702879,-1.050569}, + {-0.353375,-0.936081}, + {0.360053,-0.464839}, + {-0.779252,-0.780140}, + {0.090785,-0.637723}, + {-0.304972,0.459278}, + {0.736270,-0.110646}, + {-0.109772,0.206927}, + {-0.478619,-0.042280}, + {-0.876631,0.510703}, + {-0.906729,-0.217556}, + {-1.537449,-0.267733}, + {-0.978123,-0.957757}, + {-0.714696,0.975507}, + {0.812617,-0.332136}, + {-0.725724,-0.236311}, + {-0.100842,1.337503}, + {0.080524,1.176672}, + {0.771711,-0.341004}, + {-0.423299,-0.455648}, + {2.158161,-0.512129}, + {1.151039,-1.024555}, + {0.642063,0.018575}, + {-1.054085,0.401372}, + {-0.288785,0.630494}, + {0.347641,-0.610670}, + {1.408482,0.059692}, + {-0.379421,-0.208655}, + {-0.483324,-0.878070}, + {0.602104,-0.394601}, + {-0.004706,-0.642013}, + {-0.358424,-0.253404}, + {0.411569,-0.129959}, + {1.228551,0.006102}, + {0.531607,-0.018854}, + {-1.380934,-0.627088}, + {0.547267,-0.039238}, + {0.746745,0.351671}, + {0.303177,-0.387336}, + {-0.796387,-1.614076}, + {0.464988,0.970223}, + {0.191287,0.066696}, + {-0.220325,0.790812}, + {0.303741,1.089789}, + {0.448117,-0.011489}, + {0.419576,0.169210}, + {0.541446,-0.813073}, + {-0.746604,-0.394798}, + {-0.535124,-0.399080}, + {1.212820,1.210170}, + {-0.608420,0.220226}, + {-1.418918,1.368314}, + {0.931166,0.677711}, + {0.682432,-0.895030}, + {-0.693349,0.261801}, + {0.258131,-2.168849}, + {0.867516,0.563051}, + {-0.096511,-0.462814}, + {-0.689393,-0.230999}, + {-0.369812,0.249233}, + {0.046717,0.954072}, + {-0.032594,0.551930}, + {-0.766079,-0.071566}, + {0.793508,-0.748283}, + {0.241679,0.608403}, + {0.498824,0.196015}, + {0.386018,-0.774475}, + {-0.291054,-0.131220}, + {-0.436014,0.049768}, + {-0.006478,0.331976}, + {-1.126995,0.403371}, + {0.674118,-1.006190}, + {0.727574,-0.631312}, + {0.115880,0.143336}, + {-0.181566,0.695052}, + {-0.233203,-0.086295}, + {0.112809,-0.045588}, + {0.543264,0.808170}, + {-0.581874,-0.471845}, + {0.340867,-0.485032}, + {0.165312,0.013926}, + {-0.162445,0.725280}, + {-0.499103,-1.248448}, + {0.033577,0.051456}, + {-1.045131,-0.235899}, + {-1.110962,-0.102827}, + {-0.274189,1.259956}, + {-0.791826,1.100141}, + {0.324671,0.829447}, + {0.800825,-0.584404}, + {0.849667,-0.944107}, + {0.288553,0.174365}, + {-0.215377,1.086802}, + {0.392650,-0.010487}, + {0.748435,-1.137606}, + {0.034898,-0.302699}, + {0.636265,0.119519}, + {0.837150,-0.690876}, + {-0.092518,0.354308}, + {0.084607,-0.381048}, + {0.970579,0.659439}, + {-0.564493,-0.616213}, + {-0.403944,-0.133496}, + {1.350834,0.527610}, + {-0.742367,-0.805350}, + {0.624140,0.366381}, + {0.005646,-0.563460}, + {0.268050,-1.292687}, + {0.547784,-0.463622}, + {-0.659049,-0.130209}, + {0.283018,0.527990}, + {1.418480,1.297302}, + {0.488656,0.974499}, + {0.551555,-0.669995}, + {0.015860,-0.360077}, + {0.438938,1.527582}, + {-0.729915,-1.304140}, + {0.025131,0.002452}, + {-1.484426,0.708978}, + {-0.804342,0.051125}, + {0.990833,-0.309900}, + {-0.023686,0.762213}, + {-0.617502,0.277137}, + {-1.488232,0.224413}, + {-0.082550,0.224711}, + {0.610967,-0.436610}, + {-0.019999,1.299875}, + {-0.323230,1.244962}, + {-0.812947,1.719798}, + {0.333300,-0.174474}, + {0.115682,-1.155270}, + {-0.695856,0.388529}, + {-0.543434,-0.096509}, + {-0.096049,0.107245}, + {-0.199971,0.163067}, + {-0.067111,0.395370}, + {1.026571,-0.210498}, + {-0.233456,0.753581}, + {0.051242,-0.861376}, + {0.567777,-0.613727}, + {0.987200,-0.366176}, + {-0.409966,-0.600319}, + {-0.021597,-0.362028}, + {-0.285392,-1.023961}, + {0.324897,-0.397392}, + {-0.592783,-1.366636}, + {1.513069,0.094527}, + {-0.044122,0.361806}, + {0.677076,-0.471443}, + {-0.333290,0.236344}, + {0.108895,-0.098454}, + {0.103235,-0.195197}, + {0.650796,-0.537053}, + {-0.131204,-0.326541}, + {0.520322,0.172370}, + {0.210147,-0.555893}, + {-1.082301,-0.048132}, + {-1.964090,-0.466588}, + {0.328335,-0.553112}, + {0.708616,0.426767}, + {1.323439,-0.348617}, + {0.360543,0.545349}, + {-0.719946,-0.639191}, + {0.592925,0.790534}, + {0.402184,-0.204855}, + {0.907703,-1.809146}, + {-0.387200,0.273777}, + {-1.602303,0.588109}, + {0.867147,0.107290}, + {0.824226,0.764841}, + {-0.538419,-0.797958}, + {0.814390,0.065650}, + {-1.453486,-0.528528}, + {-0.672247,-0.514976}, + {-0.052375,0.190079}, + {-0.094941,0.604553}, + {0.088500,0.393075}, + {0.195693,0.876814}, + {-0.184889,-1.487501}, + {-0.270364,0.104600}, + {0.102034,0.660195}, + {-0.091355,-0.465751}, + {-0.135152,-0.520824}, + {-0.022116,-0.821371}, + {0.570832,0.492145}, + {0.066106,0.238053}, + {-0.184571,0.890977}, + {0.288094,-1.019289}, + {-0.022496,-0.473805}, + {1.126320,1.508352}, + {-0.531990,0.461793}, + {-0.594808,0.080021}, + {0.290982,-0.692523}, + {-0.890167,0.818541}, + {-0.162518,0.512516}, + {-0.062089,0.662125}, + {-0.469694,0.836419}, + {0.590828,-0.375129}, + {-1.549634,1.352916}, + {-0.257487,0.526662}, + {0.554513,-0.496139}, + {-0.489056,-1.265723}, + {0.233948,-0.647727}, + {0.333881,0.673747}, + {0.721218,0.641171}, + {0.166479,1.234207}, + {0.251689,-0.854045}, + {0.503304,-0.772030}, + {-0.397815,1.070705}, + {-0.454466,-0.093432}, + {0.509756,0.581621}, + {-0.636769,0.173815}, + {-0.434115,-0.379772}, + {0.360372,0.416251}, + {-0.816916,0.336363}, + {-0.481516,-0.148237}, + {-0.344201,1.129372}, + {-0.745381,-0.145303}, + {-0.237741,-1.131222}, + {0.083772,-0.220665}, + {0.519841,-0.090807}, + {-0.074125,-0.928286}, + {-0.280099,-1.361722}, + {-0.233499,-0.378497}, + {0.373073,-1.241461}, + {-1.426124,0.070811}, + {-0.509544,0.495983}, + {0.099959,-0.668754}, + {0.270905,1.556735}, + {-0.390670,0.537248}, + {-0.058168,0.187165}, + {-0.406095,-0.397041}, + {0.121194,-0.343134}, + {-0.451420,0.715020}, + {-0.116938,-0.147192}, + {-0.333465,0.135991}, + {-0.741996,-0.453454}, + {-0.481034,-0.484738}, + {-0.782498,0.231260}, + {0.024518,0.585927}, + {-0.450470,-0.353688}, + {0.594174,-0.126300}, + {-0.794772,0.420486}, + {1.314513,-0.513466}, + {-0.370453,0.760489}, + {0.150855,-0.339750}, + {-0.135993,-0.778609}, + {-0.276600,-0.086547}, + {0.113501,-0.451234}, + {0.807762,-0.310844}, + {0.789981,0.544938}, + {-0.304444,0.191596}, + {-1.155565,-0.682987}, + {0.312056,1.172277}, + {0.148072,-0.646764}, + {-1.017788,0.784066}, + {0.908108,-2.113397}, + {-0.647792,-0.940894}, + {-0.147613,0.439221}, + {-1.081613,0.980868}, + {0.632143,-0.374708}, + {-0.495802,-0.113519}, + {-0.001556,0.150950}, + {-1.307628,-0.508955}, + {-0.300870,0.315066}, + {-1.083447,-0.140177}, + {-0.100772,0.376783}, + {-0.477322,1.014067}, + {-0.567785,-0.305888}, + {-0.836664,1.106455}, + {-0.015276,0.006448}, + {0.616278,0.239966}, + {0.030009,-1.107782}, + {-0.770995,-0.138155}, + {-0.681094,-0.519193}, + {-0.882058,-0.080711}, + {0.248760,-0.979030}, + {0.000043,-0.366665}, + {0.400810,-0.085567}, + {0.641021,-0.084098}, + {0.533652,0.288318}, + {0.894862,-0.065116}, + {0.123370,0.978511}, + {-0.180674,0.803822}, + {0.728752,-0.234438}, + {-1.319526,0.158393}, + {-0.205442,-0.299613}, + {-0.383721,-0.335137}, + {-1.028570,0.223713}, + {0.932332,-0.634004}, + {0.157887,-0.980576}, + {0.889136,0.047845}, + {-0.087490,-1.077315}, + {1.004223,-0.574276}, + {-0.563213,-0.079366}, + {0.609176,0.143015}, + {1.007697,-0.230920}, + {-0.432129,-0.855668}, + {-0.751450,-0.419138}, + {-0.531787,0.218861}, + {1.240797,0.009179}, + {0.098613,1.024921}, + {-0.418097,-0.610862}, + {0.638017,-0.556955}, + {-0.882736,0.678364}, + {-0.101406,0.188363}, + {0.575997,-0.320782}, + {-0.184244,-0.946120}, + {0.854262,0.058870}, + {0.623265,0.222449}, + {0.026415,0.979594}, + {0.482302,0.001502}, + {-0.278778,-0.147706}, + {0.640003,0.194414}, + {0.438042,-0.226420}, + {0.136500,0.092192}, + {-0.202665,0.686749}, + {0.522478,0.318777}, + {-0.913607,0.461100}, + {0.058242,-0.589196}, + {-0.125264,0.196658}, + {0.455045,0.102476}, + {-0.248191,-0.131455}, + {-0.497535,0.250805}, + {0.168700,0.673232}, + {0.711314,-0.106036}, + {0.651818,-0.851557}, + {0.977553,-1.253093}, + {0.286839,1.317582}, + {-0.371842,-1.093583}, + {-0.301749,1.329315}, + {-0.403959,-0.126875}, + {-0.217582,0.112597}, + {0.122512,-0.547045}, + {0.538957,1.455939}, + {-0.051608,0.121125}, + {-0.483043,0.988090}, + {0.497165,-0.191173}, + {-0.703290,0.550797}, + {0.658044,0.757078}, + {-0.412660,-0.052012}, + {-0.252273,0.092307}, + {-1.322972,0.140665}, + {-0.203724,0.534689}, + {0.116356,0.483238}, + {0.554228,1.157456}, + {0.327654,1.316895}, + {0.250489,-1.294149}, + {0.982871,0.689230}, + {0.192154,-0.292214}, + {-0.669868,-0.373672}, + {-1.188747,-0.038297}, + {-1.090901,0.731469}, + {0.764236,-0.485868}, + {0.275150,1.088652}, + {0.976241,-0.963219}, + {-0.581240,-1.282012}, + {0.320197,0.407777}, + {0.748587,0.046703}, + {0.467881,-0.329966}, + {-1.102496,0.283212}, + {1.062265,1.008907}, + {-0.606597,0.619235}, + {-0.156865,-0.044052}, + {-0.002704,-0.036497}, + {0.706197,-0.423776}, + {-0.257156,0.973133}, + {0.487914,1.074381}, + {-0.885602,-1.777507}, + {-0.940260,0.448708}, + {0.932505,0.236523}, + {1.804253,0.372704}, + {-1.578130,0.083653}, + {-0.626332,1.026166}, + {1.193807,-0.043563}, + {-0.505137,-1.317739}, + {-0.508528,0.107232}, + {-0.487782,0.645512}, + {-0.437935,-0.346208}, + {0.632623,1.393825}, + {0.487853,0.179346}, + {0.015868,0.802943}, + {-0.172107,-0.530354}, + {-0.438663,0.597939}, + {-0.523518,-0.769340}, + {-0.309114,-0.877138}, + {-0.805692,0.319938}, + {0.980487,0.415193}, + {0.086533,-0.000662}, + {0.083456,0.469788}, + {2.350354,0.199267}, + {-1.117492,1.031942}, + {-1.874684,-1.438324}, + {-1.506923,-0.254100}, + {-0.442244,-0.212173}, + {0.622220,0.078493}, + {0.442782,0.738116}, + {0.382808,1.370781}, + {-0.572913,-0.327280}, + {0.033002,-1.591756}, + {-1.011466,-0.707980}, + {-0.540779,-0.501728}, + {-0.430794,-0.139464}, + {0.953393,-0.835771}, + {-0.569549,-1.511300}, + {-1.023529,-1.226598}, + {-0.030465,0.795517}, + {-0.123311,-0.051937}, + {-0.428708,-0.079562}, + {-1.177091,0.332774}, + {-1.004645,-0.843150}, + {-0.038739,1.507680}, + {0.090651,0.221051}, + {0.109970,0.073002}, + {1.310602,0.693833}, + {0.072228,1.417407}, + {-0.104879,0.467846}, + {-1.441396,0.816322}, + {-0.151793,0.678658}, + {-0.096420,0.855195}, + {0.430901,1.154121}, + {-0.250084,-0.013302}, + {0.587835,0.733677}, + {0.477520,-0.424982}, + {-0.504096,-1.402798}, + {-1.013512,0.267668}, + {-0.363026,-0.005476}, + {-0.718136,-0.118798}, + {-0.446816,-0.602576}, + {-0.797358,-0.024473}, + {0.633098,0.624564}, + {0.021270,1.205089}, + {0.266963,1.498017}, + {-0.508527,0.054780}, + {-0.043710,0.286613}, + {-0.142768,0.551359}, + {0.220664,-1.355083}, + {0.521431,-0.476980}, + {0.141075,0.083285}, + {-0.059602,-0.756118}, + {-0.451512,-0.258693}, + {-0.730176,1.521289}, + {-1.362482,0.104512}, + {0.270994,0.327411}, + {-0.363492,-0.868879}, + {0.672515,-0.270446}, + {-1.342101,0.237073}, + {0.508772,-0.377732}, + {-0.713798,-0.466147}, + {0.368961,0.592551}, + {0.299261,2.116040}, + {-0.672263,-0.279814}, + {-1.007523,1.276007}, + {0.227684,-0.462034}, + {0.387360,-0.328996}, + {0.352344,0.109850}, + {-0.554321,-0.079454}, + {-1.105078,0.393291}, + {1.734659,0.308959}, + {-0.308866,0.349966}, + {-0.493334,1.891041}, + {0.107295,-0.199193}, + {0.015633,1.669639}, + {-0.192819,0.360563}, + {1.300187,0.043971}, + {-0.195297,-0.619241}, + {-0.120101,-1.056832}, + {-0.447948,-0.495157}, + {-0.326704,-0.483233}, + {-1.035520,1.157850}, + {-0.498165,1.806892}, + {-0.145448,0.642467}, + {-0.405584,1.352826}, + {-0.421562,0.606142}, + {0.294387,1.309778}, + {-0.154054,0.079388}, + {0.536240,0.173272}, + {-0.024006,1.108828}, + {0.874482,-1.013605}, + {0.377186,-0.667107}, + {1.113183,0.945097}, + {-0.623475,-0.893737}, + {-0.192779,-1.241070}, + {0.632202,0.599329}, + {-0.998820,-0.803084}, + {1.383370,0.376201}, + {-0.083581,0.942494}, + {-0.173566,-0.198364}, + {0.074235,-0.314876}, + {-0.556586,0.347212}, + {0.490005,0.416503}, + {0.331992,-0.555958}, + {-0.691485,-0.331265}, + {-0.796966,-0.358733}, + {-0.252577,0.543161}, + {-0.861375,0.772953}, + {0.133135,1.007422}, + {0.110358,-0.029927}, + {-1.330897,0.730045}, + {0.393907,0.863772}, + {-0.741439,0.432644}, + {0.576414,-1.086511}, + {-0.053779,1.091841}, + {0.727738,-0.274889}, + {-0.147372,0.359935}, + {-1.596102,0.038969}, + {0.002325,-0.748844}, + {1.142039,-0.398003}, + {-0.334125,-0.639994}, + {0.207807,0.496680}, + {-0.364096,-0.594810}, + {1.762264,0.531826}, + {-0.749354,0.980400}, + {-1.280578,1.031222}, + {0.206510,0.566433}, + {-0.682051,-0.394535}, + {-0.551294,1.174139}, + {0.313715,-1.149243}, + {0.656347,0.386459}, + {0.735878,0.178740}, + {-0.293578,-0.287406}, + {-0.179112,-0.387732}, + {0.213178,-0.962025}, + {-0.344776,-0.181182}, + {0.641578,-0.406269}, + {-1.401786,-0.171097}, + {0.286238,-0.125231}, + {0.252492,-0.547389}, + {0.120026,0.720419}, + {1.337138,0.195949}, + {-0.660370,0.703330}, + {0.092159,-0.695855}, + {-0.620594,0.229351}, + {1.055181,0.111751}, + {1.006880,0.293700}, + {-0.093249,0.555442}, + {-0.399694,0.811308}, + {-1.684486,-0.633970}, + {0.080918,0.511860}, + {-0.439946,0.019865}, + {-0.390984,-1.044203}, + {-0.685936,-1.231559}, + {-0.204744,-0.679722}, + {-0.859863,0.460715}, + {-0.246945,0.401049}, + {0.193542,1.129638}, + {-0.255188,0.214659}, + {0.484590,-0.289803}, + {0.830376,-1.338483}, + {-0.649905,-0.117391}, + {-0.796076,-0.304220}, + {0.353714,0.110796}, + {1.064357,0.203116}, + {0.772181,0.613989}, + {-0.595196,0.130421}, + {0.714852,-0.201961}, + {-0.246157,1.317799}, + {-0.188331,1.819959}, + {-0.255805,-0.742062}, + {-0.138330,-0.228130}, + {0.447635,0.068326}, + {0.167371,0.023899}, + {0.541047,-0.398183}, + {1.279247,-0.892511}, + {0.970960,-0.571617}, + {0.064149,-0.440132}, + {-0.091864,0.479401}, + {-0.178907,-0.263349}, + {-0.460228,0.072292}, + {-0.022178,0.024037}, + {0.042415,0.943316}, + {-0.639441,0.125048}, + {0.773008,1.096997}, + {0.127606,0.363171}, + {0.870742,-0.533857}, + {-0.763648,0.812840}, + {0.461366,0.041432}, + {-0.006986,-0.606103}, + {0.535399,0.207011}, + {-0.584722,-1.519249}, + {0.121278,-0.207252}, + {1.085226,-0.059229}, + {0.129751,0.594549}, + {-0.110785,1.298075}, + {-0.828154,0.282231}, + {0.357325,0.161702}, + {-0.286592,0.378964}, + {0.132628,0.276829}, + {-0.793980,1.023088}, + {-0.957162,0.460617}, + {-0.032594,-0.412238}, + {0.060784,0.629413}, + {1.100209,0.447011}, + {-0.198523,0.062691}, + {-0.709541,0.204258}, + {0.020197,-1.320956}, + {-0.215897,-1.623511}, + {0.748680,0.160824}, + {-0.504640,0.232847}, + {-0.269767,-0.738709}, + {0.392299,0.153438}, + {0.160576,-0.386143}, + {0.357881,0.613915}, + {-1.268598,-0.067517}, + {-0.666996,0.396000}, + {-0.761129,-1.835104}, + {-0.128240,0.064241}, + {-0.200634,-0.545752}, + {0.111993,0.186523}, + {-0.162610,-0.333088}, + {-0.548141,0.520658}, + {0.016143,-0.863869}, + {-0.569927,1.339376}, + {0.616225,-0.058848}, + {-0.664092,-0.932852}, + {-0.309768,-0.158927}, + {0.459254,1.205541}, + {-0.809099,-0.795062}, + {-0.182439,-0.025138}, + {-0.916346,-0.341971}, + {0.829546,-0.066365}, + {0.855095,-0.587404}, + {-0.275741,1.185855}, + {-0.816888,0.228774}, + {-1.253625,-0.671337}, + {-0.336773,-0.885292}, + {-1.419712,0.386946}, + {0.256469,-0.112479}, + {-0.195782,0.897473}, + {-0.448164,0.230629}, + {-0.137292,-0.954298}, + {0.044064,-1.420896}, + {0.346739,-0.728567}, + {-0.486216,0.932718}, + {-0.234357,-0.424851}, + {-0.893944,-1.580683}, + {0.224420,-0.109758}, + {-0.525390,-0.659896}, + {-0.082822,-1.111491}, + {-0.027127,0.600399}, + {0.417077,-0.941458}, + {-0.672273,-0.776712}, + {-0.375658,-0.673124}, + {-0.128259,0.669274}, + {0.274039,-0.162639}, + {0.531405,0.328816}, + {-0.173541,-0.344658}, + {0.109632,-0.652172}, + {0.745372,-0.988494}, + {0.323987,0.395099}, + {-0.220000,-0.137398}, + {0.004579,-0.872426}, + {0.251476,-0.625225}, + {1.333603,-0.551770}, + {0.081311,-0.544503}, + {0.326594,-0.007595}, + {-0.823281,1.430717}, + {0.572531,0.791617}, + {0.063804,-0.438730}, + {-0.804912,-0.338880}, + {0.533428,-0.017895}, + {-2.355835,-0.084042}, + {-0.020945,0.576270}, + {-1.338558,0.102208}, + {-1.341976,0.904601}, + {0.494760,0.485739}, + {-0.067460,2.005861}, + {-0.249791,0.460139}, + {0.735361,0.697345}, + {-0.007071,-0.683978}, + {0.116523,-0.146979}, + {0.082917,-0.544381}, + {-0.183656,-0.015491}, + {-0.125475,0.097676}, + {0.216174,0.367420}, + {-0.825492,0.033576}, + {0.392395,0.018111}, + {-1.196534,-0.398387}, + {0.858381,-0.236375}, + {0.427010,-0.140906}, + {0.549912,1.102720}, + {0.013097,-0.589424}, + {-0.486318,-0.182311}, + {0.597453,0.811553}, + {-0.394496,0.945556}, + {0.194762,-0.392322}, + {-0.245420,-1.255616}, + {0.591577,-0.107335}, + {-0.065784,-1.591483}, + {-0.463762,-0.160668}, + {-0.789821,-0.048679}, + {-0.275537,0.448439}, + {1.110561,1.009790}, + {0.527317,-1.005654}, + {1.115740,-0.604145}, + {-0.557221,1.170167}, + {0.014607,-0.908701}, + {0.869524,-0.104916}, + {0.670785,-0.073642}, + {0.275557,-0.344125}, + {-0.677464,0.205771}, + {1.468200,-2.040479}, + {-0.644867,-0.260612}, + {-0.885294,-0.600743}, + {-1.083463,0.305217}, + {0.192783,0.054288}, + {-1.442832,-0.464161}, + {-0.430593,0.193934}, + {1.037362,-0.157372}, + {0.396271,0.148627}, + {-0.590031,-0.536029}, + {-0.903929,-0.929530}, + {0.502786,-0.088813}, + {0.556812,0.044700}, + {0.140136,-0.196190}, + {0.247448,-0.454580}, + {0.858752,0.511401}, + {-0.226488,-0.387412}, + {-0.588826,0.225291}, + {0.122682,-0.776759}, + {-0.494520,0.407446}, + {-0.991127,0.502398}, + {0.655983,-0.129177}, + {-1.425441,-0.191821}, + {-1.341352,0.064542}, + {-1.072479,1.113384}, + {0.041286,2.051621}, + {-0.242983,0.516347}, + {-0.237060,-1.113874}, + {-0.023272,1.377334}, + {-1.899043,0.594030}, + {0.467479,1.264261}, + {0.663846,-0.112813}, + {0.692125,-0.625121}, + {-0.298478,-0.083012}, + {-0.964078,-0.081148}, + {-0.470905,0.411913}, + {1.474979,-0.154895}, + {0.661302,-0.012302}, + {-0.965442,0.514810}, + {0.318276,0.457882}, + {-0.542257,-1.222535}, + {0.062860,0.023413}, + {0.085049,1.158655}, + {1.247453,-0.154635}, + {0.178202,0.204762}, + {0.844883,0.791503}, + {0.233726,-0.984440}, + {0.164056,0.642663}, + {-0.322448,0.327553}, + {-0.126490,0.319918}, + {-0.158159,-1.372744}, + {1.298184,-0.764151}, + {0.018998,0.522201}, + {-0.962200,0.169821}, + {-0.176380,1.186852}, + {-0.034894,0.510674}, + {0.098506,-0.900306}, + {0.336179,-0.133751}, + {0.337938,0.195812}, + {0.012498,0.889530}, + {-0.625594,-0.298426}, + {0.694907,0.251068}, + {-0.113195,0.672439}, + {-0.753666,0.051040}, + {0.141270,0.049792}, + {-0.067074,0.245343}, + {-1.587448,-1.120145}, + {0.136902,0.397052}, + {0.012719,0.888125}, + {-0.899053,-0.232361}, + {-0.572945,0.118157}, + {0.689248,-0.024022}, + {-0.369033,1.314103}, + {1.171046,-0.441653}, + {0.148432,0.000953}, + {0.474619,1.318479}, + {-0.789100,-0.189436}, + {1.168206,-0.870973}, + {-0.471363,0.375174}, + {0.506161,-0.536559}, + {1.423200,0.042084}, + {-0.929433,-1.633785}, + {-1.295439,0.135491}, + {-1.538034,-0.008372}, + {-1.271645,-1.051796}, + {0.554905,-0.373024}, + {-0.643509,-0.327706}, + {-0.419714,1.107479}, + {0.466287,-0.239969}, + {-0.653212,0.139871}, + {-1.451830,-0.344354}, + {-0.907859,-0.216021}, + {0.944616,0.366605}, + {0.059977,0.109431}, + {1.031953,-1.164485}, + {0.449597,-2.254492}, + {-0.703591,-0.293462}, + {0.705176,0.000026}, + {0.129751,-0.129761}, + {-0.500724,0.070967}, + {0.708266,-0.279742}, + {0.057621,-0.165775}, + {-0.918908,0.311085}, + {0.103258,0.736145}, + {0.327648,0.004814}, + {-0.462488,-1.311553}, + {-0.800705,-0.250875}, + {0.725654,-0.503263}, + {0.070847,0.104229}, + {-0.617014,-0.723182}, + {-1.389549,-0.393330}, + {0.968007,-0.009708}, + {0.139527,1.299372}, + {0.248082,0.601290}, + {0.953040,-0.996260}, + {1.309783,-1.016336}, + {-0.934166,0.729653}, + {-0.388471,0.682112}, + {-0.240315,0.888481}, + {-1.098614,-0.034184}, + {-0.421662,-0.755789}, + {0.307964,0.867011}, + {0.444477,0.930219}, + {1.603805,-0.402639}, + {-0.089754,1.413485}, + {0.230484,0.488389}, + {0.354216,0.348765}, + {-0.322557,-0.563235}, + {-0.185066,0.795538}, + {-0.550469,0.168640}, + {-0.331680,-0.810292}, + {-0.678005,-0.138885}, + {0.888325,0.259799}, + {-0.261157,1.314246}, + {-0.724085,0.698159}, + {-0.487339,0.343089}, + {0.256545,0.306148}, + {1.087370,1.360731}, + {0.909221,0.906951}, + {0.840193,0.271044}, + {-0.449186,-0.712406}, + {-0.100897,-0.905420}, + {-1.281902,-0.335234}, + {0.740303,0.011500}, + {0.899467,-0.124748}, + {0.536766,-0.366208}, + {-0.643354,0.691747}, + {-0.261056,-0.256182}, + {0.272516,-0.258403}, + {0.631447,-0.167719}, + {-0.196437,-0.052842}, + {1.508024,-0.936465}, + {-0.180365,-1.378710}, + {-0.249668,0.002152}, + {1.598053,1.741993}, + {-1.056432,0.117693}, + {0.515300,1.069078}, + {-0.212007,-1.048830}, + {0.335613,0.489364}, + {-0.796184,-1.069425}, + {0.083158,0.697802}, + {-1.235153,-0.772422}, + {-0.357202,-0.012821}, + {-0.593893,-1.181373}, + {0.050524,-0.401930}, + {0.074720,0.364095}, + {-0.079716,-1.693522}, + {0.100870,-0.312204}, + {0.947544,0.242623}, + {-0.643159,-0.717020}, + {0.224527,0.733617}, + {0.216476,1.876947}, + {0.332304,-0.401619}, + {1.189563,-1.382521}, + {0.908890,-0.674780}, + {0.437119,-0.298161}, + {-0.058059,-0.200793}, + {0.362838,0.619364}, + {0.117785,0.015330}, + {-1.151039,-0.121108}, + {-0.542608,0.263258}, + {-0.605341,1.175677}, + {-0.526847,0.683678}, + {-0.003684,-0.546691}, + {0.101077,-0.028945}, + {-0.699619,0.028653}, + {-0.287565,0.909150}, + {-0.003493,0.475101}, + {0.110908,-0.450847}, + {0.822169,-0.268593}, + {-1.331173,0.303365}, + {0.354079,1.195309}, + {1.074010,-0.113039}, + {1.358327,0.349989}, + {0.328412,0.126190}, + {0.251235,0.427830}, + {-0.681032,-0.654465}, + {0.947471,-0.314890}, + {-0.506438,0.044035}, + {0.437633,-0.586149}, + {0.108011,0.609608}, + {-0.313954,0.566877}, + {-0.057536,-1.682225}, + {0.588066,0.182714}, + {1.063758,-0.640294}, + {0.843978,-0.415465}, + {1.201541,1.527708}, + {-0.299630,-0.584595}, + {0.591297,0.504796}, + {-0.056764,-0.947796}, + {-0.517348,-0.289759}, + {-0.288464,0.617447}, + {0.348633,-1.043987}, + {0.054553,-0.520532}, + {-0.090965,-0.147650}, + {0.086384,-0.577068}, + {-0.102547,-1.253433}, + {0.635189,0.519118}, + {-0.720591,-1.495902}, + {0.080849,0.205010}, + {0.751958,-0.190846}, + {-0.538937,-0.320929}, + {-0.612417,0.554560}, + {-0.851261,0.869392}, + {1.198195,-0.529736}, + {0.057548,-0.579206}, + {-1.025654,-0.151350}, + {0.303841,-0.211254}, + {0.446343,-1.552067}, + {0.315397,-0.808794}, + {-0.063785,0.774825}, + {0.783816,-0.157279}, + {-0.693511,0.332481}, + {-0.234900,0.528764}, + {0.596556,0.333542}, + {1.373749,-0.817280}, + {-0.295436,-0.145692}, + {0.006813,0.157722}, + {0.516578,-0.790212}, + {0.478924,-0.959898}, + {0.370258,0.489034}, + {0.713319,-0.586588}, + {0.332856,0.078227}, + {-0.425185,-0.677807}, + {-0.149519,0.199877}, + {1.263811,-0.509766}, + {0.233085,-0.479083}, + {0.856984,0.232124}, + {-0.398816,0.118417}, + {0.725782,0.573860}, + {-0.423177,-0.195038}, + {0.479589,-0.152071}, + {-0.606474,1.399722}, + {-2.041557,0.729519}, + {-0.617790,-0.668932}, + {0.137657,-1.422402}, + {-0.786831,-0.619224}, + {-0.149759,-0.165667}, + {0.190154,0.929670}, + {-0.287768,1.169585}, + {1.061637,0.067450}, + {-0.140288,-0.424489}, + {0.785589,-0.241400}, + {-0.992917,0.456275}, + {0.543095,-0.526169}, + {0.262447,0.354750}, + {0.115837,-1.383394}, + {-0.765803,-0.645191}, + {0.382408,-0.004403}, + {0.124288,-0.280736}, + {1.156532,0.881587}, + {1.088618,0.321389}, + {-2.279889,-0.488846}, + {-1.135730,0.591114}, + {-1.093988,-0.708227}, + {-0.153356,0.947910}, + {0.191071,-0.367728}, + {0.332287,0.126137}, + {-0.150579,-0.128056}, + {-0.515071,1.279206}, + {-0.471647,0.450751}, + {-0.177599,0.084528}, + {0.405248,-1.192993}, + {-1.199598,-1.871218}, + {-1.009935,0.125214}, + {0.860742,-0.062698}, + {-0.657040,-1.041627}, + {0.026116,-0.059837}, + {-1.346135,1.113968}, + {-0.624805,0.301187}, + {0.274945,0.937253}, + {0.478006,0.733921}, + {-0.612665,-0.715399}, + {-0.016013,0.268927}, + {0.319591,0.208865}, + {1.344190,-0.216045}, + {0.130151,1.142744}, + {0.172902,-0.626551}, + {-1.349281,-0.008253}, + {0.621623,0.463895}, + {0.184316,0.698054}, + {-0.585348,-1.744754}, + {0.109077,0.127077}, + {0.216486,0.290303}, + {0.785660,0.927775}, + {0.384514,-0.692532}, + {0.727702,-0.034449}, + {-0.057908,0.127263}, + {0.271526,0.524594}, + {-0.858654,-0.086733}, + {0.464001,0.064140}, + {0.227926,1.431933}, + {0.138844,0.005704}, + {0.141627,-0.127211}, + {-1.003825,0.034579}, + {-0.388278,0.179387}, + {0.158985,0.905558}, + {-1.242335,0.519667}, + {-0.047141,0.947802}, + {0.336262,-1.612058}, + {0.614542,-0.464413}, + {0.982166,-1.628173}, + {-0.870128,-0.651271}, + {0.486409,0.436105}, + {0.108930,1.638884}, + {-0.021817,-0.425794}, + {0.039699,-0.387185}, + {-1.225415,-0.377385}, + {0.391090,-0.505627}, + {0.651504,-0.883661}, + {-0.276837,0.691315}, + {0.383239,0.054891}, + {0.297223,-0.197196}, + {1.388005,-0.270560}, + {-1.400360,0.278525}, + {-2.093290,0.098416}, + {0.610011,1.401331}, + {-0.945061,-0.541204}, + {0.412258,-1.330328}, + {0.173694,-1.109422}, + {-0.159121,-1.744757}, + {0.285345,1.096001}, + {0.128427,-0.244146}, + {0.067905,-0.156659}, + {-1.018499,-0.578789}, + {0.505971,0.765807}, + {1.015914,0.376986}, + {0.790707,-1.646495}, + {0.487164,-0.607104}, + {-0.697297,-0.367804}, + {-0.565402,0.674289}, + {1.188518,0.712744}, + {-0.592933,-0.373505}, + {-0.203660,1.226443}, + {-0.098045,-0.097690}, + {0.433178,-1.020054}, + {-0.430052,-0.776739}, + {0.324026,-0.937248}, + {0.701878,-0.493328}, + {0.230826,0.826293}, + {0.004731,0.068967}, + {-0.498959,0.400514}, + {-0.513084,-1.025155}, + {0.421206,-1.417798}, + {-0.981820,-0.435834}, + {0.506125,0.020348}, + {-0.235266,-0.135010}, + {0.838326,-0.650392}, + {-0.396983,-0.682428}, + {0.182128,0.408830}, + {0.727117,-0.622519}, + {-0.068542,0.310867}, + {0.442916,0.767343}, + {0.044007,-1.159112}, + {0.493622,-0.162111}, + {0.380900,-1.503298}, + {0.423037,0.548507}, + {-1.568571,0.528272}, + {0.547764,-0.029898}, + {-0.356876,0.578955}, + {0.515241,0.565923}, + {0.167784,1.612647}, + {0.169705,0.087695}, + {1.177100,0.004351}, + {-0.689952,0.053029}, + {0.154453,1.419159}, + {-0.546385,1.058132}, + {0.021626,-0.754253}, + {0.741607,-0.361204}, + {-0.057849,0.999592}, + {-0.015000,1.519017}, + {-0.384562,0.938159}, + {1.000041,1.295279}, + {-1.069485,-0.177887}, + {-0.656125,-0.402525}, + {-0.338546,0.308619}, + {-0.201887,0.631236}, + {-0.576348,-1.438422}, + {0.094374,-0.332953}, + {1.717504,0.411315}, + {-0.139432,0.242414}, + {1.030451,-0.541582}, + {-0.132491,0.928665}, + {-0.929343,0.330223}, + {0.212063,-0.999967}, + {-1.546734,1.473279}, + {0.895231,-0.122118}, + {-0.024873,0.397475}, + {-0.471758,0.171216}, + {-0.384773,0.411799}, + {1.604132,0.192566}, + {-0.352284,-1.692873}, + {-0.127207,-0.166561}, + {-0.087210,-0.289254}, + {0.069733,0.733600}, + {-0.481091,-0.748068}, + {0.025913,-0.282440}, + {0.385995,-0.269872}, + {0.807898,0.547847}, + {0.920522,-0.253019}, + {0.590344,0.287209}, + {-0.264166,-1.420356}, + {0.741891,-0.453230}, + {-0.005511,-0.334318}, + {0.584215,-0.105380}, + {1.235921,0.737084}, + {0.073373,0.196251}, + {0.050188,0.318437}, + {0.326590,0.608379}, + {-0.322564,0.284616}, + {-0.646108,-0.359319}, + {0.322070,0.143369}, + {-0.863728,-0.775195}, + {0.831176,0.342701}, + {0.032958,-0.098237}, + {0.571168,-0.012336}, + {0.182689,0.790901}, + {-0.425154,-0.855671}, + {-0.898454,0.187687}, + {-0.526788,0.506000}, + {0.653615,0.022943}, + {-0.027712,0.795147}, + {-0.439436,0.442340}, + {0.706258,-1.337857}, + {0.478575,0.834826}, + {-1.198496,-0.435258}, + {-0.626551,-0.689605}, + {0.463850,-1.046754}, + {0.616860,0.015892}, + {-0.036480,-0.180819}, + {-0.850951,0.360575}, + {-0.778725,0.021580}, + {-0.003573,0.011854}, + {0.901575,1.139995}, + {-1.397778,-0.965160}, + {0.828026,-0.382807}, + {-0.014620,0.930159}, + {-1.300195,-0.110779}, + {0.749689,0.981340}, + {0.030482,0.848674}, + {0.187375,-0.097744}, + {0.209488,-0.196027}, + {0.347616,-0.395632}, + {0.329045,0.511381}, + {1.124516,-0.961421}, + {-0.221487,-0.120998}, + {-1.498910,1.138313}, + {-0.900081,0.195057}, + {0.353490,-0.370964}, + {0.461766,-0.958569}, + {-0.156196,-1.009013}, + {-0.303470,0.211825}, + {0.970393,0.376784}, + {0.495209,0.940894}, + {-0.760660,-0.732722}, + {-0.277112,-0.555909}, + {0.336774,-0.081721}, + {-0.764784,1.256559}, + {0.729786,0.187455}, + {-1.516521,-0.580250}, + {-0.060807,1.773198}, + {0.384536,-0.806667}, + {-0.704657,-0.622280}, + {-0.801176,0.052175}, + {-0.590213,1.990490}, + {-0.177006,-0.136596}, + {-0.043811,-1.299593}, + {-0.581471,0.077527}, + {0.234488,-0.891170}, + {-0.346771,1.199070}, + {0.082643,1.293400}, + {0.936822,0.025082}, + {-0.731120,-0.476702}, + {-0.934721,-0.022417}, + {0.222389,0.501521}, + {-0.120435,0.461318}, + {-0.065142,0.306212}, + {0.295570,-0.442311}, + {0.993401,0.404579}, + {-0.453363,0.509552}, + {0.282236,0.306297}, + {-0.536249,-0.901250}, + {-0.425114,0.194843}, + {-0.519253,1.853919}, + {-0.710138,0.608713}, + {0.021883,-0.406892}, + {-0.119297,1.104563}, + {-1.009286,0.692377}, + {-1.312874,0.446078}, + {0.820048,0.144155}, + {0.594350,-0.518111}, + {0.445168,-0.296112}, + {0.528797,0.275437}, + {-0.975129,1.054113}, + {-0.141110,-0.278283}, + {-1.108218,0.758768}, + {-0.720411,0.105147}, + {0.012397,0.377536}, + {-0.600491,-0.143086}, + {-0.953860,-0.409408}, + {0.207974,-0.533590}, + {0.505393,-0.929868}, + {0.693728,-0.168896}, + {1.295575,0.330245}, + {0.197670,-0.003298}, + {-0.644899,-0.599500}, + {0.369732,-0.579213}, + {-0.403831,-1.208236}, + {0.102628,0.417057}, + {0.225578,1.013419}, + {-0.251294,-0.004769}, + {0.889491,1.815880}, + {-1.038993,0.521891}, + {0.764166,-0.213457}, + {-0.562020,-1.509213}, + {0.211293,-0.936981}, + {-0.463538,1.090030}, + {-0.553620,-0.791400}, + {0.611880,-0.306484}, + {0.044468,-0.166676}, + {-0.023328,-1.778915}, + {-0.214294,-0.414020}, + {-0.756939,-1.513298}, + {0.250125,-0.882986}, + {1.120913,-0.169637}, + {0.645831,-0.162204}, + {1.177705,-0.888318}, + {0.363945,-0.029949}, + {0.402238,-0.546777}, + {-0.094455,-0.101378}, + {0.164174,0.060548}, + {-0.169991,-1.176339}, + {-0.374419,-0.123020}, + {-0.914397,-0.405280}, + {-0.853371,-0.380429}, + {1.609595,1.394657}, + {0.488861,0.494798}, + {0.158526,0.345015}, + {0.803121,0.150331}, + {-0.081292,0.181697}, + {0.393064,-0.478711}, + {0.279182,0.092095}, + {0.430334,-0.073225}, + {0.014806,0.588098}, + {0.913267,0.970571}, + {0.646704,0.609592}, + {0.566444,0.775254}, + {-0.335177,1.080688}, + {0.127562,1.140199}, + {0.165559,-0.264557}, + {-1.069915,-0.891586}, + {0.507922,-0.743511}, + {-0.734341,1.039713}, + {-0.738939,-0.058723}, + {0.759593,-1.014583}, + {0.555667,-1.733928}, + {-1.367914,-1.030299}, + {0.188542,-0.418601}, + {0.793444,-0.741383}, + {-0.040384,0.198946}, + {1.361842,-0.048743}, + {-0.225959,0.500185}, + {-0.613758,-0.930241}, + {-1.065079,-1.626019}, + {-1.661331,0.447628}, + {-1.178209,-1.594785}, + {0.385772,0.687990}, + {0.320431,0.326874}, + {-0.209635,0.241160}, + {-0.478316,-0.322029}, + {-1.574782,0.928755}, + {-0.150281,0.335387}, + {0.346979,0.106675}, + {-0.979085,-0.448834}, + {-0.484871,-0.130679}, + {-0.882404,-0.284669}, + {-0.135947,1.428153}, + {0.289974,0.663804}, + {-0.832558,-0.786738}, + {0.566306,1.650858}, + {-0.618622,-0.104784}, + {-0.597685,-0.212515}, + {1.865293,1.206891}, + {0.617878,-0.378103}, + {-0.276038,1.353459}, + {0.879395,0.084117}, + {-0.648554,-0.500746}, + {0.603251,-0.759062}, + {-1.056790,0.769620}, + {0.451470,-0.190342}, + {1.668428,-1.349133}, + {-0.399983,-1.187873}, + {-0.876715,0.206248}, + {0.800569,-0.255028}, + {0.108497,1.535395}, + {-0.321630,0.307984}, + {-0.010085,-1.543582}, + {0.733422,-0.807197}, + {-0.527735,0.361278}, + {0.546397,-0.913698}, + {0.386942,-0.026931}, + {-0.683948,1.644054}, + {-0.713074,-0.760496}, + {0.729880,0.611484}, + {-0.324111,-0.185442}, + {0.513507,0.655970}, + {0.973032,0.708102}, + {0.162839,-1.911128}, + {0.171333,0.442628}, + {0.793978,0.363283}, + {0.139764,-0.553196}, + {1.477350,0.571024}, + {0.046847,-0.083842}, + {0.774276,0.538647}, + {-1.232450,-0.279392}, + {0.998783,0.699271}, + {-2.497752,0.890340}, + {-0.686000,-0.489450}, + {-0.622210,0.728997}, + {-0.896078,-0.269973}, + {0.254307,0.947307}, + {1.029120,0.030115}, + {-0.457637,0.586413}, + {-0.570341,0.796948}, + {-0.326200,0.703162}, + {0.718013,-0.641897}, + {-0.347796,-0.117920}, + {0.980266,-0.427121}, + {0.715130,0.436598}, + {-0.354809,-0.981161}, + {0.609447,0.117866}, + {-1.117899,1.185150}, + {-0.070233,0.421426}, + {0.362961,-0.220281}, + {0.091918,-0.947668}, + {-0.918369,0.893874}, + {1.165251,0.420864}, + {1.432566,-0.178810}, + {-0.356868,-0.188257}, + {-0.815491,-0.404427}, + {-1.070312,-1.216305}, + {-0.318984,-0.583511}, + {1.848678,0.453940}, + {-0.708129,0.177312}, + {-0.893931,1.710539}, + {0.093921,0.348349}, + {1.105949,0.999284}, + {0.967769,-0.721817}, + {0.937282,0.156570}, + {1.436906,1.511836}, + {0.508619,-0.010131}, + {-0.069583,-0.309253}, + {0.108287,0.135978}, + {-0.739620,-0.139477}, + {-0.651608,1.778285}, + {0.027295,-0.276027}, + {0.751467,0.405693}, + {-0.350001,1.687277}, + {0.358628,-0.135793}, + {1.669210,-0.094304}, + {0.563354,0.389800}, + {-0.248111,-0.198466}, + {0.074279,-0.311566}, + {0.205118,-0.722409}, + {0.284728,0.431713}, + {-0.299721,0.775480}, + {0.288778,1.204617}, + {-2.612038,1.096907}, + {0.138972,0.125366}, + {0.298215,0.304176}, + {-0.193236,1.529766}, + {0.485275,-0.982963}, + {0.725341,-0.936405}, + {-0.065237,0.208370}, + {0.125534,-0.205573}, + {-1.821296,0.674082}, + {-0.275038,0.327760}, + {-0.727191,-1.227306}, + {-0.865239,0.939065}, + {-0.803833,1.620915}, + {-0.842433,-1.108209}, + {-0.401148,-0.736410}, + {-0.115040,-1.629236}, + {-2.049102,-0.888722}, + {0.563586,-1.881832}, + {0.500135,0.870559}, + {-0.623029,-1.087557}, + {0.560799,-0.777685}, + {-0.023666,-0.920057}, + {0.514122,-0.387123}, + {0.330311,-0.267867}, + {0.141501,-0.770913}, + {0.895122,1.295559}, + {0.235886,-0.142025}, + {-1.600266,1.392146}, + {0.062394,-0.199017}, + {0.105093,0.847228}, + {-0.004692,-0.611023}, + {-1.105202,-0.676440}, + {-0.803199,0.080607}, + {1.068037,-1.432548}, + {-0.073955,0.534296}, + {-1.544967,-0.292418}, + {-0.018596,0.600587}, + {0.693918,0.111383}, + {0.875333,0.538827}, + {0.810163,0.603066}, + {-0.991128,0.633334}, + {1.410649,-0.273373}, + {-1.402586,0.048299}, + {-0.476167,-0.040214}, + {1.133741,0.893093}, + {-1.976746,0.495152}, + {-0.762297,-0.434453}, + {-0.407391,0.458918}, + {0.081289,-0.693117}, + {-0.901769,-0.566278}, + {0.294244,0.018293}, + {-1.778410,0.169995}, + {-0.065897,-0.565356}, + {-0.067741,-0.386928}, + {-0.042227,-0.470778}, + {-0.724262,-0.448146}, + {0.799391,-0.353504}, + {0.736085,-0.189575}, + {-0.170609,-0.001362}, + {-0.876784,-0.416884}, + {-1.194944,-1.159666}, + {0.378294,-0.050373}, + {2.029991,0.034750}, + {0.488729,0.272216}, + {0.100163,0.084453}, + {0.619746,0.787200}, + {1.516011,0.190597}, + {0.242183,-0.282804}, + {1.348479,0.195434}, + {1.574083,0.044098}, + {-1.648078,0.005385}, + {-0.240798,0.327597}, + {-0.072394,-0.742375}, + {-0.357626,-0.537052}, + {-1.019427,-1.502025}, + {0.265137,1.275985}, + {-1.408237,0.487417}, + {0.488564,0.094077}, + {0.538473,0.089383}, + {0.822984,-0.041699}, + {0.446649,0.965423}, + {0.425275,0.258184}, + {0.293588,-0.009747}, + {-1.901312,0.094518}, + {0.055270,0.104028}, + {0.717610,-0.083141}, + {-1.028907,0.529666}, + {0.276336,-1.707147}, + {0.518490,0.271655}, + {-0.157786,-0.735939}, + {-0.642959,0.105473}, + {-0.194654,0.744489}, + {1.057427,0.578372}, + {-0.078556,0.535382}, + {0.275007,0.425924}, + {-1.493477,0.323239}, + {0.384662,-0.732389}, + {-0.458062,-0.246727}, + {-0.009941,-0.256232}, + {-0.431288,0.694332}, + {1.237922,-0.196164}, + {0.049717,-0.417202}, + {-0.828197,0.209999}, + {-1.328594,-0.698908}, + {0.817510,1.298454}, + {0.021412,-0.376025}, + {0.656062,-0.479696}, + {0.739794,-0.697219}, + {0.359927,0.330324}, + {0.490626,-1.394430}, + {0.003006,-0.052538}, + {0.188833,0.728305}, + {-1.187172,0.758908}, + {-0.519732,-1.148840}, + {-0.411235,-1.217214}, + {0.955021,-0.430176}, + {-0.523480,-0.587903}, + {-1.227340,0.033012}, + {0.122805,-0.649916}, + {0.990446,-0.160799}, + {0.217109,0.439570}, + {0.197974,-0.855599}, + {-1.016884,-0.834066}, + {-0.685161,0.797699}, + {0.718871,0.735908}, + {-2.084638,-0.653982}, + {0.229928,0.252590}, + {0.876971,-1.135835}, + {0.208727,-1.096199}, + {0.189714,0.324005}, + {0.559235,0.891645}, + {-0.337588,1.226503}, + {-0.633028,1.304579}, + {0.352611,0.118112}, + {0.755508,-1.202909}, + {-0.368064,0.379022}, + {0.187482,0.040502}, + {-0.489215,-0.316624}, + {-0.148897,1.794500}, + {0.617933,0.380534}, + {0.724284,0.929908}, + {-0.101068,0.829591}, + {0.239707,0.830689}, + {1.419880,-0.703233}, + {0.428630,-0.738185}, + {0.188227,-0.067175}, + {0.848946,-0.139604}, + {1.358890,-0.759908}, + {-0.598246,-1.356423}, + {0.708571,-0.747022}, + {-1.307309,-1.158771}, + {1.114919,0.003653}, + {0.247448,0.759891}, + {0.629880,-0.013493}, + {0.581883,-0.841438}, + {-0.348783,0.559365}, + {0.553004,0.045767}, + {-0.689707,0.334441}, + {0.783204,0.262356}, + {1.422351,-0.205031}, + {2.033491,0.619792}, + {-0.663187,-0.541048}, + {0.546304,0.061896}, + {0.954720,1.149216}, + {-0.559310,0.175198}, + {1.274649,1.348253}, + {-0.247850,-0.207347}, + {1.742038,1.103291}, + {0.043844,-0.424239}, + {0.614981,-0.080676}, + {-0.517806,1.025811}, + {0.801125,-0.606164}, + {0.473503,0.520220}, + {-0.308974,0.331494}, + {-1.295514,-0.646832}, + {-0.472990,-0.230161}, + {0.174489,-0.366097}, + {-0.118363,-0.163279}, + {-0.200880,-0.899742}, + {0.998390,-0.199202}, + {-0.622541,-0.695766}, + {0.669754,-0.206478}, + {0.106122,0.549600}, + {0.591344,0.214104}, + {0.488377,0.644834}, + {1.136572,1.169122}, + {0.323891,0.444824}, + {-0.562209,-0.060314}, + {0.213956,-1.280496}, + {-0.321971,-1.103028}, + {0.672409,-0.083641}, + {0.495207,0.706465}, + {-0.494982,1.309929}, + {0.994709,-0.975631}, + {0.059966,-0.007228}, + {1.295286,0.210362}, + {-1.155912,0.093655}, + {-0.270843,0.470326}, + {0.756844,0.345241}, + {0.514597,0.140073}, + {-0.621769,0.148131}, + {0.357821,-0.203675}, + {-0.273598,-0.884954}, + {-0.849266,-0.397208}, + {-0.405585,-1.645132}, + {-0.010028,-0.355219}, + {-0.143243,0.535060}, + {-0.489155,0.541734}, + {-1.917934,0.442072}, + {1.120600,0.609251}, + {-0.806215,-0.431671}, + {1.317120,-1.219868}, + {0.067240,1.040216}, + {-0.567193,-1.387665}, + {0.795042,0.402961}, + {-1.025794,-0.277941}, + {0.649983,1.281336}, + {-0.256848,0.005927}, + {0.607023,0.715590}, + {0.540951,-0.424004}, + {-0.353391,1.289066}, + {1.755964,-0.674437}, + {-0.664991,-0.691634}, + {-0.096792,0.422837}, + {-1.167967,0.555492}, + {0.152719,-0.072909}, + {0.116643,0.226822}, + {-0.630662,-0.558520}, + {0.414169,-0.530572}, + {0.717343,-0.343964}, + {0.485011,-0.965124}, + {0.132872,-1.176696}, + {-0.542650,-0.059320}, + {-0.771646,-0.399126}, + {-0.848580,0.963529}, + {0.186147,0.262803}, + {0.352650,0.664986}, + {0.993840,0.913475}, + {-0.484132,-0.800343}, + {0.680518,0.491133}, + {-0.187661,0.025441}, + {-0.647229,0.234518}, + {1.007825,-0.196186}, + {0.956857,-1.015468}, + {-0.722691,-1.369092}, + {0.254518,0.088674}, + {0.029979,-0.009861}, + {0.301615,0.155056}, + {0.039314,0.343316}, + {0.145456,1.183385}, + {0.775872,0.441937}, + {-0.305562,-1.261231}, + {-0.509677,-1.261546}, + {-0.452788,-0.152168}, + {-0.024417,0.566667}, + {0.156338,0.402470}, + {0.451700,-0.516105}, + {0.517440,0.675626}, + {0.108431,0.416795}, + {-0.764284,-0.532834}, + {1.206985,0.069426}, + {-0.932342,1.046480}, + {-0.777393,0.052027}, + {-1.092549,0.033582}, + {0.197445,-0.491148}, + {-0.411677,-0.336139}, + {-0.037210,-0.926280}, + {-0.708483,0.693739}, + {0.664921,-1.385649}, + {-1.353380,1.021171}, + {-0.241049,-0.683939}, + {-0.029907,0.167199}, + {-1.608903,-0.559216}, + {-0.181052,0.821785}, + {1.590072,-1.518116}, + {1.057565,-0.689682}, + {-1.281043,-0.980591}, + {0.304693,-1.080609}, + {-0.240484,0.707799}, + {-0.768310,-0.067520}, + {0.843861,-0.009503}, + {0.807601,-0.431015}, + {-0.512754,-0.550360}, + {1.284096,-1.260585}, + {-0.922574,0.298207}, + {-0.393917,-0.519193}, + {0.127912,-0.984685}, + {-0.144986,0.035279}, + {0.188536,0.393360}, + {0.259745,-0.309148}, + {-0.677779,-0.595934}, + {-0.037591,-0.101627}, + {-0.309109,0.365495}, + {-0.102452,1.566645}, + {1.387901,-0.195166}, + {-0.446879,-0.526524}, + {0.997398,-0.882687}, + {0.031554,0.124163}, + {-0.931075,0.093264}, + {0.482681,1.855809}, + {-0.010467,0.925571}, + {0.169549,0.122786}, + {-0.090570,-0.028792}, + {0.849088,-1.107529}, + {0.050598,0.536702}, + {-0.571372,0.390521}, + {0.337937,0.089426}, + {-0.070935,-0.296006}, + {-0.543102,-0.683296}, + {-0.082528,1.188412}, + {-0.075670,0.684850}, + {0.217929,0.127319}, + {0.244448,0.690258}, + {-0.526178,0.479326}, + {-0.126780,1.089720}, + {0.456035,-0.008824}, + {-0.236651,0.009875}, + {-0.671016,-0.961407}, + {0.700866,0.834313}, + {-0.049151,0.411310}, + {0.069039,0.176343}, + {1.372698,0.367522}, + {-0.107484,0.090397}, + {-1.242871,0.580082}, + {0.352131,0.516255}, + {-0.409130,-0.283403}, + {0.399885,-0.173183}, + {-0.911535,-1.057501}, + {-0.134356,-0.571363}, + {-0.200745,-0.714382}, + {0.247331,-1.213185}, + {-0.183543,0.319417}, + {-0.359287,-0.789582}, + {-0.258945,-0.568476}, + {0.371024,-0.265164}, + {-0.075029,-1.608623}, + {0.082652,2.076230}, + {-1.223628,-1.586630}, + {0.405567,0.823574}, + {0.054968,0.521170}, + {-1.478086,0.062628}, + {0.111418,-0.029518}, + {-1.266318,0.854860}, + {0.944464,-0.835138}, + {0.460958,0.185149}, + {-0.058453,0.047748}, + {0.078237,-0.159788}, + {0.734696,0.268869}, + {0.027735,-1.024541}, + {0.228605,-1.028311}, + {-0.264515,0.187069}, + {0.016598,0.390539}, + {0.080454,0.084167}, + {-0.373853,-0.258455}, + {0.496835,-0.132385}, + {-1.257065,0.046987}, + {0.335159,0.020590}, + {0.466133,0.439269}, + {0.014981,1.110095}, + {0.785194,0.155149}, + {-0.920996,-0.294657}, + {-0.108107,0.667374}, + {-0.074103,0.487597}, + {0.309323,0.450575}, + {1.192132,0.937428}, + {-0.334944,-0.222933}, + {0.412831,-1.114841}, + {0.239488,-0.354992}, + {0.444740,-0.426829}, + {-0.133782,0.466919}, + {-0.488809,0.609075}, + {0.312304,-0.261759}, + {-0.790404,-0.962166}, + {-0.274962,-0.943480}, + {-0.063458,0.313199}, + {0.754376,-0.624958}, + {0.894785,0.254635}, + {-0.454480,-0.679299}, + {-0.017854,-0.594485}, + {-0.423178,-0.160964}, + {-0.458684,-0.155883}, + {-0.663973,0.506733}, + {0.541449,-0.654020}, + {0.172654,0.253066}, + {1.021464,-0.901336}, + {0.111092,-0.491099}, + {0.252050,-0.769468}, + {-0.617856,0.312547}, + {-0.409293,-1.120223}, + {0.039604,-0.485376}, + {-1.493487,0.335907}, + {0.274749,0.723980}, + {-0.203481,-0.723032}, + {-0.495656,-0.759281}, + {1.456744,-1.628369}, + {-0.975111,0.016837}, + {-0.622091,1.044867}, + {-0.434081,-0.462833}, + {-0.315109,-0.189411}, + {0.081910,-0.831801}, + {-0.414067,0.096517}, + {0.024855,-0.006315}, + {-0.505820,0.029401}, + {0.677997,-0.561131}, + {1.161094,-0.385332}, + {0.171413,-1.071286}, + {0.796474,0.125143}, + {0.737257,0.495755}, + {-0.760664,0.609637}, + {0.050209,0.872019}, + {-0.779293,-0.049293}, + {-0.084521,-0.987525}, + {0.836932,0.679155}, + {0.295252,-0.767659}, + {-0.018792,0.419797}, + {-1.163658,0.443970}, + {-0.266127,-0.327858}, + {0.087685,-1.161947}, + {-0.369729,0.762725}, + {0.172665,-0.329469}, + {0.330880,0.749120}, + {-0.816435,-0.491657}, + {0.111348,-1.505915}, + {0.209077,0.184622}, + {-2.342060,-0.110587}, + {0.307412,0.700396}, + {0.113512,-0.465633}, + {-0.646155,0.716656}, + {-0.638825,-1.478782}, + {0.450901,-0.035870}, + {0.035266,1.827315}, + {0.737470,-0.119507}, + {-0.228202,0.108246}, + {0.825314,0.200114}, + {0.487949,0.471538}, + {-0.357296,0.391417}, + {0.180314,0.346172}, + {0.559934,0.139351}, + {-1.305116,0.414318}, + {0.716210,0.212909}, + {-0.013896,1.197851}, + {-1.824869,-0.867501}, + {-0.515474,0.050329}, + {-0.414146,-0.076725}, + {0.708817,-1.133978}, + {-0.639175,0.428318}, + {1.050038,0.727185}, + {-0.702393,0.513455}, + {0.276582,0.809652}, + {0.077934,0.198272}, + {2.196177,0.991960}, + {-0.440575,-1.385910}, + {0.706450,-0.276282}, + {-0.391529,0.375718}, + {0.486569,-0.694199}, + {-0.074971,-1.160590}, + {0.662076,0.018694}, + {0.336811,-0.550141}, + {-0.387020,-0.397890}, + {-0.096345,0.269838}, + {-0.026117,-0.057475}, + {0.158403,-0.187549}, + {0.420344,-0.129844}, + {0.190663,-0.087482}, + {-0.366855,0.893119}, + {-0.249219,0.316325}, + {-0.117221,-0.587177}, + {-1.294407,1.470405}, + {0.418475,-0.548199}, + {1.001920,-0.042350}, + {-0.292716,-0.515533}, + {-1.153163,0.988116}, + {-0.289238,-0.720697}, + {-0.106232,-1.124727}, + {-0.965999,0.865133}, + {-0.401036,0.078021}, + {-1.109930,-0.864017}, + {0.297575,0.865459}, + {0.995143,0.682193}, + {-0.599609,-1.702099}, + {0.883933,-0.307388}, + {0.802376,-0.004978}, + {-0.401257,0.112706}, + {0.384942,-1.000741}, + {-0.989461,0.937746}, + {0.964376,-0.361083}, + {1.014743,-0.689544}, + {-1.640868,0.131432}, + {0.631133,-0.101351}, + {0.185813,0.273002}, + {-1.225259,-0.530792}, + {1.054923,0.095617}, + {-0.207572,0.807720}, + {0.950261,-0.272710}, + {-0.842451,1.027046}, + {-0.948909,0.464619}, + {-0.652197,-0.593345}, + {0.386114,0.647057}, + {-0.348600,-0.148170}, + {0.035874,-0.075556}, + {-0.566582,0.252229}, + {-1.150907,0.142389}, + {-0.373560,0.708924}, + {0.179962,0.177331}, + {0.017741,1.577087}, + {-0.489230,-0.574279}, + {-0.239784,0.779613}, + {-0.897308,-0.203218}, + {0.925241,0.527958}, + {1.036630,0.416062}, + {0.888976,0.209959}, + {0.455977,0.361892}, + {0.395073,0.243300}, + {0.499225,0.860184}, + {1.188627,0.506501}, + {-0.358162,-0.525381}, + {1.769127,-0.519498}, + {-0.973750,0.263258}, + {0.081556,-0.101205}, + {1.293777,0.240134}, + {0.128978,-1.442584}, + {0.092528,-0.197125}, + {-0.117172,-0.490877}, + {-0.946199,-0.606982}, + {0.652803,-0.511129}, + {0.043937,-0.032281}, + {0.284060,0.005765}, + {-0.734968,-1.145450}, + {-0.025606,-0.626951}, + {-0.375895,0.717175}, + {0.438582,0.918001}, + {0.038609,-1.114450}, + {1.118108,0.106149}, + {1.272686,0.846763}, + {0.633646,-0.105666}, + {-0.205043,0.210912}, + {-0.334164,-0.085337}, + {-0.206717,0.894467}, + {-0.085313,1.097756}, + {-0.399149,-0.100234}, + {-0.149590,0.007444}, + {0.494023,-1.223272}, + {-1.126557,-0.292829}, + {1.506312,-0.733856}, + {0.129777,-0.464705}, + {-0.430088,0.615048}, + {1.070713,1.226466}, + {-0.500223,-0.890256}, + {0.241018,-0.691634}, + {-0.425803,-1.598684}, + {-0.349414,0.668187}, + {-0.759980,-1.039801}, + {0.099818,0.588593}, + {0.661566,-0.452644}, + {-0.276551,-0.245314}, + {0.062076,0.738192}, + {-0.436350,-1.545334}, + {-0.338107,0.327650}, + {-0.671510,-0.169933}, + {-0.250838,-0.394788}, + {-0.716007,0.057696}, + {0.716020,0.323465}, + {0.287767,-0.496472}, + {-1.361017,-1.022037}, + {-0.389014,-0.327876}, + {0.005581,0.230345}, + {1.057323,0.344696}, + {0.404404,0.524537}, + {0.213022,1.094306}, + {-0.594658,-0.593064}, + {-0.748241,0.800080}, + {-0.115638,-0.166546}, + {-0.107154,-0.697047}, + {-0.458238,-0.452683}, + {-0.336989,-0.047009}, + {-1.289175,1.647780}, + {0.150375,-0.407781}, + {0.597241,-0.547383}, + {0.443295,0.936489}, + {0.590847,-0.187656}, + {-1.212900,0.882074}, + {0.484389,-0.686777}, + {1.149782,-0.194390}, + {-1.172668,0.032417}, + {0.260298,-1.012974}, + {-0.294107,-1.012750}, + {0.801182,0.633359}, + {0.239464,0.241602}, + {-0.881659,-1.163284}, + {0.489810,-0.463799}, + {0.565567,0.113305}, + {-0.556349,-1.347072}, + {-1.062547,-0.931198}, + {-0.738569,-0.353611}, + {1.317955,-1.099776}, + {0.148693,-0.201014}, + {0.133189,0.681195}, + {-0.120725,0.135954}, + {0.109002,-0.457197}, + {-0.694733,0.709827}, + {0.529587,0.628810}, + {-1.078803,0.606417}, + {-0.135627,1.108991}, + {0.037637,-1.260746}, + {-1.080624,1.191058}, + {0.359973,0.135705}, + {0.232936,0.269440}, + {0.002593,-0.783674}, + {-0.069699,1.212021}, + {-0.664211,-0.740183}, + {0.165729,0.041761}, + {-0.317411,0.070021}, + {-0.172353,-0.428702}, + {0.332293,-0.774738}, + {-0.917322,-0.820716}, + {-0.058246,-0.746256}, + {0.477261,-0.232573}, + {-0.644001,0.166028}, + {-0.429890,0.847238}, + {-0.056154,-1.187696}, + {-0.879377,-0.311314}, + {-0.187718,-0.505879}, + {0.145068,0.268477}, + {0.344934,-0.459281}, + {-0.892009,-0.676237}, + {-0.648511,-0.152063}, + {0.285463,0.019339}, + {-0.020319,-0.901552}, + {-0.937522,0.163649}, + {-0.431348,-0.446665}, + {-0.614010,-0.352647}, + {0.890186,-0.313942}, + {0.187972,0.408152}, + {-0.040763,-0.587026}, + {-1.192632,-0.395902}, + {-0.089341,0.188121}, + {-1.109439,0.101585}, + {-1.721289,-1.011886}, + {-0.451708,0.401072}, + {-0.878256,-0.235344}, + {0.572753,-0.329785}, + {-1.136417,1.039607}, + {-0.433782,-0.120676}, + {0.567816,0.084631}, + {0.546969,-0.179829}, + {0.225644,-0.412318}, + {0.171741,0.816235}, + {-1.141608,-0.629613}, + {-0.537893,-0.566981}, + {0.734572,1.390754}, + {0.099797,-0.210714}, + {-0.603835,-0.911116}, + {-0.919496,0.154357}, + {-0.200722,-0.585775}, + {0.721968,0.331313}, + {0.561601,0.473508}, + {0.550664,-0.258516}, + {-0.237893,0.651197}, + {-0.756266,0.166779}, + {-0.705900,0.481691}, + {-0.006736,0.003238}, + {0.955769,0.739538}, + {-1.102150,-2.203276}, + {-0.152229,-0.119703}, + {-0.498020,0.338978}, + {1.435975,0.240195}, + {0.009239,2.011670}, + {0.176554,0.774631}, + {-0.793129,0.211589}, + {-0.072293,0.240170}, + {0.881402,0.528900}, + {0.458104,0.297768}, + {1.425877,-0.725340}, + {-1.097623,-0.304087}, + {-0.127377,-0.767495}, + {-0.019548,0.382421}, + {0.498701,1.214140}, + {0.443213,-0.118249}, + {-0.071224,-0.014039}, + {0.630956,-1.420196}, + {1.092859,-0.858199}, + {0.601709,-0.454233}, + {0.061239,-0.833424}, + {-0.018905,0.604909}, + {0.465324,-1.778430}, + {-0.755851,0.803587}, + {1.085178,-0.492003}, + {0.820772,-0.064660}, + {0.125793,-1.132899}, + {0.315742,-0.133927}, + {0.890772,0.347966}, + {0.509473,-0.904259}, + {0.313390,-1.242697}, + {-0.183140,-0.195672}, + {-0.664699,-0.149961}, + {1.498274,-0.991017}, + {-1.516974,-0.399403}, + {-0.916197,0.142253}, + {0.040795,-0.428170}, + {-0.845305,0.260543}, + {1.148172,1.459513}, + {-0.079861,0.168896}, + {0.687934,0.865708}, + {-0.536824,0.124210}, + {-0.692623,-1.014247}, + {-1.316924,-0.789046}, + {0.636503,-0.209795}, + {0.552650,0.090913}, + {-0.033354,0.150511}, + {1.249451,-0.206799}, + {0.901957,-0.045704}, + {-0.268462,0.797655}, + {-0.295622,-0.834320}, + {-0.623560,0.392378}, + {0.753139,-0.171098}, + {-0.315586,-0.093971}, + {-0.171782,0.310994}, + {-0.584684,-1.313163}, + {0.305928,1.064417}, + {0.262624,-0.763970}, + {-0.460683,-1.066815}, + {0.775057,0.025142}, + {-0.476420,0.420022}, + {-0.123804,-0.614338}, + {0.107369,-0.775216}, + {1.000481,-0.185825}, + {0.204721,0.528385}, + {0.234913,0.036659}, + {-0.580442,0.580949}, + {1.199714,-0.639281}, + {-0.175095,-1.293234}, + {0.211567,-1.011604}, + {0.534241,0.104124}, + {0.475270,0.112080}, + {-0.296861,0.570522}, + {-0.006516,-0.807378}, + {1.324154,0.366234}, + {0.385646,0.663829}, + {0.952289,-0.020348}, + {-0.107272,-0.904948}, + {-0.430374,-0.791322}, + {0.023816,0.049091}, + {-0.739512,-0.394887}, + {0.267303,0.220767}, + {0.585441,-0.615484}, + {-0.174586,-0.975560}, + {-0.857831,0.240895}, + {-0.578808,0.608267}, + {-0.618652,-0.737440}, + {-1.703410,1.076574}, + {0.239973,-0.524723}, + {-0.877083,0.885381}, + {0.364504,-1.546471}, + {0.843914,1.160001}, + {1.150505,1.071204}, + {-0.370583,-0.153527}, + {-0.146237,-1.166747}, + {1.580330,0.835601}, + {1.183807,-0.290036}, + {0.408171,0.697836}, + {-1.363711,1.276123}, + {0.003091,-0.751142}, + {0.892821,1.683361}, + {-0.181868,0.148855}, + {0.247007,-0.270453}, + {-0.864199,-0.144221}, + {0.131680,-1.468996}, + {1.015785,0.628468}, + {0.080450,-0.687172}, + {-0.209898,0.096785}, + {0.759138,-0.425614}, + {-0.758907,-0.363425}, + {0.295546,-0.675126}, + {0.137910,0.585381}, + {-0.615761,-0.004313}, + {0.900616,0.336981}, + {1.909880,-0.158311}, + {-0.634418,-0.790108}, + {-0.475383,0.335938}, + {-0.438158,1.008165}, + {-0.066609,-0.342591}, + {1.040649,0.129256}, + {-0.317508,0.138331}, + {-0.934472,0.287414}, + {-0.822846,-0.707184}, + {0.013228,0.200951}, + {-0.192966,0.231664}, + {0.702280,-0.035047}, + {1.601308,-0.110163}, + {0.968228,0.484041}, + {0.267920,1.208324}, + {0.387431,0.257585}, + {0.137627,-0.038053}, + {-0.533791,-0.592955}, + {-0.208416,-0.090015}, + {1.242265,-0.575457}, + {-0.093360,0.612640}, + {0.474705,1.164073}, + {-0.223268,-0.303550}, + {0.725415,0.987524}, + {-0.792211,0.833725}, + {-0.127078,0.253060}, + {1.032843,-0.053796}, + {-0.611660,0.688883}, + {0.020020,-0.682951}, + {-0.061453,1.055994}, + {0.159875,0.842203}, + {1.073916,0.515861}, + {-1.002761,0.703949}, + {-0.433069,-0.241907}, + {-0.485950,0.355489}, + {0.046573,0.251588}, + {0.594776,1.519930}, + {-0.353550,-0.125344}, + {0.019352,-0.371083}, + {0.567640,-0.653759}, + {-0.250529,0.176770}, + {-0.406982,0.103083}, + {0.373635,0.728257}, + {1.588916,-0.649808}, + {-0.478022,-0.050687}, + {0.377243,0.193279}, + {-0.036592,-0.246075}, + {1.520919,1.009384}, + {0.159340,0.341124}, + {-0.463280,0.378020}, + {-0.035160,0.543988}, + {0.118358,0.710502}, + {-0.619443,0.780539}, + {0.191851,0.377155}, + {-0.776310,-0.116329}, + {-0.276307,-0.043138}, + {-1.211908,0.346911}, + {0.079369,-0.858422}, + {0.016724,0.926178}, + {1.256652,-0.481102}, + {-0.806248,0.229023}, + {0.044788,0.119707}, + {-0.262081,0.272806}, + {0.932057,-0.006805}, + {0.544372,-0.095148}, + {-1.383816,-1.364462}, + {-0.358308,1.050147}, + {0.273473,-0.855889}, + {-0.003535,0.064740}, + {-0.833668,-1.139499}, + {-0.191707,0.659760}, + {-0.462448,0.173778}, + {-0.025911,0.309467}, + {-0.460535,0.971118}, + {1.307444,1.320250}, + {1.627809,0.805101}, + {0.508275,-0.630378}, + {-0.234563,1.086843}, + {-0.122915,0.361400}, + {-0.915180,0.611521}, + {-0.286575,-0.818160}, + {0.182178,0.788028}, + {0.604783,-0.208278}, + {0.359150,1.039738}, + {-0.992256,0.972576}, + {0.106132,-1.299370}, + {-0.162884,1.643172}, + {-0.338271,0.643220}, + {-0.862948,-0.463959}, + {0.326343,0.010285}, + {-0.098661,-0.720012}, + {0.058748,0.476613}, + {-0.313979,0.106628}, + {0.342506,-1.683328}, + {-0.675662,0.430103}, + {-0.378889,-0.229145}, + {1.071848,0.353785}, + {-0.028918,-0.457589}, + {0.480169,1.182056}, + {-0.186146,0.337164}, + {0.032820,-0.383106}, + {-0.716018,0.172634}, + {-0.408182,-0.131892}, + {0.656507,-1.192520}, + {-0.081387,-1.758375}, + {0.157451,0.629884}, + {-0.501019,0.814047}, + {-0.998292,-0.030481}, + {-0.562935,0.654219}, + {0.092469,-0.943344}, + {0.875478,0.782977}, + {0.136500,0.716997}, + {-0.130205,0.061150}, + {0.772493,-0.787669}, + {-0.069071,-1.069128}, + {0.020852,0.155118}, + {-0.691191,-0.378006}, + {0.037354,-0.996423}, + {1.281753,-0.929153}, + {-0.426147,-0.438014}, + {0.112682,1.190760}, + {-0.025867,-0.051631}, + {0.855843,0.245861}, + {-1.283729,0.078821}, + {0.082616,0.423985}, + {0.650177,0.257912}, + {-0.288642,-0.113135}, + {-0.309283,0.956368}, + {0.275866,0.777270}, + {1.063946,-0.850517}, + {-0.114175,-0.925831}, + {-0.197025,0.160165}, + {0.188163,0.770923}, + {0.725416,-0.238262}, + {0.532756,0.332611}, + {0.110235,0.733467}, + {0.568374,-0.980107}, + {0.264085,-0.102002}, + {0.128516,0.242100}, + {-0.326246,0.476676}, + {0.177628,1.005675}, + {0.183542,-0.730819}, + {0.560809,0.026720}, + {-0.555138,-0.837223}, + {-1.111326,-0.738718}, + {-0.573157,1.307743}, + {0.039276,-0.375639}, + {-0.610247,0.441594}, + {0.288641,-0.912492}, + {1.190911,0.545295}, + {0.782747,0.523818}, + {-0.489349,-0.232879}, + {-0.020657,-0.703896}, + {0.073902,0.609629}, + {0.772461,-0.210514}, + {-0.035950,0.573090}, + {0.973263,0.098002}, + {0.573650,-0.286151}, + {-0.420773,0.322248}, + {0.828456,-0.527977}, + {1.858361,0.248676}, + {-0.216404,0.356862}, + {-0.646708,-0.483857}, + {-0.093864,-0.293461}, + {0.583492,-0.646171}, + {-1.115405,-0.181960}, + {1.366417,-1.845473}, + {-0.794050,0.390124}, + {0.467227,0.144103}, + {0.059131,1.012538}, + {0.365336,0.237803}, + {-0.484233,-0.485568}, + {-1.005855,-0.440960}, + {0.502362,-0.343204}, + {-0.153506,-0.221922}, + {1.040348,0.847320}, + {0.875955,0.856994}, + {0.134586,-0.579993}, + {0.979287,-0.133640}, + {0.552321,0.102281}, + {0.541191,-1.039863}, + {-1.155057,-0.141459}, + {-0.136017,0.538894}, + {-0.816461,0.275250}, + {-0.724677,0.192772}, + {0.326787,-0.010919}, + {0.117003,1.159378}, + {0.504487,-0.285180}, + {-0.855043,0.300502}, + {0.497492,1.177945}, + {-1.019849,-0.391640}, + {0.294492,-0.148558}, + {-1.105971,-1.574034}, + {-0.549529,0.276093}, + {1.612157,0.358384}, + {-0.490901,-0.027039}, + {0.169836,1.390746}, + {-0.194342,-0.284269}, + {-0.171289,0.586009}, + {0.440634,-0.241719}, + {-0.866231,0.075171}, + {0.604738,0.501042}, + {-1.268727,0.181187}, + {0.970697,0.307040}, + {1.049433,0.365987}, + {-0.498752,0.386423}, + {-0.025266,-0.505426}, + {-0.073175,0.049414}, + {-0.182412,1.089200}, + {-0.323381,-0.689772}, + {0.110545,-1.103422}, + {-0.264985,1.043266}, + {-0.572449,1.384650}, + {0.364356,0.676386}, + {0.022608,0.196732}, + {1.158744,2.048316}, + {0.765193,-0.520691}, + {0.612272,0.175707}, + {0.822290,-0.539943}, + {-0.029847,0.542674}, + {-0.046485,-0.527074}, + {-0.247289,-0.309464}, + {-0.123121,0.695817}, + {-0.585551,1.109341}, + {1.091744,-0.323955}, + {-0.258755,0.608515}, + {-0.359400,-0.617556}, + {0.213343,0.803480}, + {0.723600,-0.553256}, + {-0.919498,1.614200}, + {0.151235,-0.057427}, + {0.507107,0.231984}, + {-0.423361,-0.409427}, + {0.846366,1.210201}, + {-0.481114,-0.023277}, + {-0.021299,0.801072}, + {0.087164,0.162119}, + {0.648244,-0.593489}, + {-1.033972,-0.776052}, + {-0.910048,0.009627}, + {1.145802,-0.064943}, + {-0.863007,0.893723}, + {-0.063187,0.408214}, + {0.097570,0.371056}, + {0.055008,0.378266}, + {0.760486,-0.116970}, + {0.175700,-0.711182}, + {-1.061988,-1.515268}, + {-0.366716,1.634002}, + {-1.127267,0.259187}, + {-0.105613,-1.658119}, + {-0.956148,0.078537}, + {-0.789998,-0.046661}, + {-0.555772,0.241221}, + {-0.361317,0.374073}, + {0.542807,-0.644804}, + {-0.067211,-0.306273}, + {-0.313289,-0.762354}, + {0.944145,0.011802}, + {0.344604,0.581157}, + {-0.238694,-1.260077}, + {-0.499531,-0.040909}, + {1.081440,-0.013408}, + {-1.020259,-0.402582}, + {0.168469,-0.449379}, + {-0.322218,-0.352819}, + {0.417512,0.125277}, + {-0.179187,0.773391}, + {0.934511,0.154665}, + {0.668175,1.139319}, + {-1.109726,-0.697647}, + {-0.058986,-0.618589}, + {1.224662,-0.691357}, + {-0.344564,1.430847}, + {-0.198289,0.080758}, + {0.248374,-0.855443}, + {0.510391,0.972455}, + {-0.236303,-0.325335}, + {0.461915,-0.112654}, + {-1.113610,-1.548437}, + {-1.242013,-0.824333}, + {-0.071317,0.322042}, + {-0.489653,-0.266651}, + {0.049223,-0.240123}, + {-0.017929,0.190162}, + {-0.643566,-0.146084}, + {0.581599,0.459194}, + {-0.885802,-0.729123}, + {0.659102,1.113099}, + {0.604221,0.372455}, + {0.150965,-0.404922}, + {0.024189,-0.589169}, + {0.181120,-2.232684}, + {-0.109871,-0.604952}, + {-0.441800,-1.783353}, + {1.351005,0.201968}, + {0.226026,0.178360}, + {0.052492,0.086991}, + {1.777618,1.068832}, + {-0.332651,0.317066}, + {0.541455,-0.685652}, + {0.392310,1.079179}, + {-0.427805,-0.269735}, + {0.498657,-0.582363}, + {0.940945,0.355367}, + {0.265536,-1.458500}, + {0.449227,0.874282}, + {0.227071,-0.627270}, + {-0.093351,-0.097808}, + {-1.145261,-0.218075}, + {0.484358,1.069822}, + {0.996167,0.219158}, + {0.164768,0.888018}, + {-0.524378,-0.335536}, + {0.408570,0.683742}, + {0.520097,-0.352789}, + {0.528279,0.701878}, + {0.254929,0.657117}, + {-0.913148,-0.518469}, + {-0.444215,-0.199164}, + {0.123173,0.541502}, + {0.623248,0.013648}, + {0.876430,0.188051}, + {-0.745054,-0.440719}, + {1.370839,-0.341183}, + {-0.557997,0.053702}, + {0.504211,-0.772695}, + {1.925599,-0.732382}, + {1.134615,0.354443}, + {-0.823694,0.010852}, + {-0.010443,-0.137324}, + {0.583601,-0.844533}, + {0.664869,1.118130}, + {-0.000382,0.444552}, + {-0.646392,1.280645}, + {1.497105,0.917277}, + {-0.230933,-0.814139}, + {-0.618821,-0.230543}, + {0.004494,-0.586885}, + {0.188155,0.759926}, + {0.400992,-0.852580}, + {0.916116,0.173815}, + {0.164091,-0.226974}, + {0.428332,-1.030586}, + {-1.450546,-0.165323}, + {-0.743664,-0.984256}, + {1.239929,0.021010}, + {0.169317,0.059045}, + {1.351634,0.648103}, + {-0.725472,0.514575}, + {0.682044,0.646209}, + {-0.254000,-0.088715}, + {0.820242,0.000807}, + {-0.199804,-1.335055}, + {0.568600,-0.573050}, + {-0.372125,1.120332}, + {-0.080109,-0.217794}, + {-0.077319,0.183705}, + {0.610015,-0.768326}, + {0.531406,-0.197264}, + {0.374272,0.746575}, + {0.811771,-0.070560}, + {0.456952,0.828381}, + {-1.114625,-0.778551}, + {-0.677564,-1.195200}, + {-0.032155,-0.146667}, + {0.160033,-1.240192}, + {0.784846,-0.048669}, + {0.226182,-0.040282}, + {-1.385046,-0.704092}, + {0.539381,-1.102437}, + {0.385233,0.702485}, + {0.229480,0.119168}, + {-1.160470,0.285107}, + {-0.541554,0.585548}, + {-0.348345,0.770643}, + {-0.277295,0.505369}, + {0.072372,0.074768}, + {-1.171783,-0.243523}, + {0.704349,0.708709}, + {0.059024,0.631281}, + {0.065354,1.504243}, + {-0.835199,0.568548}, + {-0.460690,1.264099}, + {-1.828812,-1.061787}, + {0.003831,0.815100}, + {-1.209037,0.131804}, + {0.842161,-0.991327}, + {0.138250,-0.926978}, + {-0.127969,0.712464}, + {-0.350826,1.252760}, + {0.556596,0.709099}, + {-0.880338,-0.882393}, + {0.633947,0.831589}, + {1.535985,0.012752}, + {-0.110222,-1.560059}, + {-0.473637,-0.328046}, + {-0.183194,0.641908}, + {-1.074374,0.106450}, + {0.837744,-1.048600}, + {0.080980,-1.310010}, + {0.538448,-1.136176}, + {-0.596666,-0.628378}, + {-0.594768,0.340720}, + {0.251058,-0.190293}, + {-0.061235,0.142368}, + {0.563618,-0.663220}, + {-0.994710,0.799951}, + {-0.013219,-0.077868}, + {-0.260975,0.436012}, + {0.701558,-1.555042}, + {0.218937,-0.839333}, + {0.189052,-0.893478}, + {-0.825828,-0.108326}, + {0.179960,-0.454794}, + {-0.189811,-0.729981}, + {0.258641,0.734701}, + {1.033546,-0.851021}, + {-0.481548,1.060999}, + {0.550961,-0.495215}, + {-0.720159,0.605927}, + {-0.918472,-1.437412}, + {0.238061,0.359825}, + {-0.669119,-0.477539}, + {-0.393230,1.100341}, + {-0.294604,0.625805}, + {1.183505,0.325424}, + {0.656797,0.302560}, + {-0.264583,1.659226}, + {0.944444,0.759065}, + {0.363301,-0.931562}, + {0.321250,0.144317}, + {0.056304,0.033562}, + {0.396821,-0.081704}, + {-0.146098,-0.157071}, + {-0.567406,0.542368}, + {0.087811,-1.191284}, + {0.645851,-1.129586}, + {-0.480500,0.559676}, + {-0.512098,-0.692533}, + {-0.576949,-0.178230}, + {-0.312055,-1.312385}, + {-0.661092,-0.003298}, + {1.385371,0.073527}, + {0.749575,0.121531}, + {0.451503,-0.172923}, + {-1.720465,0.533779}, + {-0.558727,-0.163352}, + {1.161200,1.410997}, + {0.343344,-0.099791}, + {-0.065168,-2.180713}, + {0.350066,0.806381}, + {-0.286234,-0.192670}, + {0.073187,0.263513}, + {-0.757331,-0.586757}, + {0.984908,0.277915}, + {1.028605,0.961379}, + {0.644807,0.258389}, + {0.606982,0.266423}, + {-0.090490,0.787222}, + {0.184171,0.023188}, + {0.350628,0.158079}, + {0.778608,0.188059}, + {-0.930078,1.186364}, + {-0.671489,-0.012170}, + {-0.081454,0.351651}, + {1.178337,0.477150}, + {-0.455728,-0.782186}, + {0.891922,0.565029}, + {1.160296,-0.280368}, + {0.653268,0.357551}, + {1.540297,1.202347}, + {0.245353,0.959049}, + {0.243214,-0.407234}, + {-0.450652,1.435352}, + {-0.707209,1.169824}, + {-0.087597,0.734600}, + {0.280094,-0.507072}, + {-0.362702,0.385568}, + {-0.298647,-0.445275}, + {1.484539,-0.134123}, + {-0.714418,-0.484541}, + {0.183658,-0.100520}, + {-1.304078,-0.615248}, + {-0.145906,-0.378490}, + {-1.139469,0.513238}, + {-1.002350,-0.857683}, + {-0.662826,1.027047}, + {0.866330,-0.714924}, + {0.134961,-0.170331}, + {-1.346329,-0.335113}, + {-1.486651,0.211276}, + {-0.033975,0.498228}, + {0.808639,0.410672}, + {-0.183830,0.673398}, + {0.283445,0.591164}, + {-0.775002,-0.358194}, + {-0.559984,0.245061}, + {0.448254,-0.351589}, + {-0.307253,0.317585}, + {0.110474,-0.551974}, + {1.435987,-0.093767}, + {-0.899370,-0.601259}, + {0.050750,-0.801049}, + {-0.248103,-0.266506}, + {-0.722677,0.408100}, + {0.439215,0.082929}, + {0.326781,0.560803}, + {-0.435041,0.157077}, + {0.616733,-0.929936}, + {-1.000230,0.585819}, + {0.197016,-0.325485}, + {-0.661867,-0.863923}, + {-0.149218,-0.118129}, + {-0.048844,-0.426240}, + {-0.048809,-1.036530}, + {1.234970,-1.198487}, + {-0.564061,0.812790}, + {0.518469,-0.899248}, + {-1.011805,-0.436426}, + {-0.731235,0.119354}, + {-0.748153,-0.686550}, + {-0.765046,-0.353657}, + {-0.836584,0.509778}, + {0.848860,-0.573605}, + {0.275349,-0.980142}, + {-0.086480,0.350212}, + {0.561023,0.614301}, + {0.295835,-0.062431}, + {-0.169997,1.796229}, + {1.411584,-0.157918}, + {-0.820578,-0.083208}, + {0.363949,-1.059952}, + {-1.105712,-0.108223}, + {0.022597,-1.059282}, + {-0.599310,-1.113121}, + {1.271478,0.088851}, + {-0.351697,1.037394}, + {0.708869,1.367619}, + {1.616188,0.268445}, + {-0.055062,0.051147}, + {0.089420,0.984126}, + {1.037123,0.467659}, + {0.285018,1.056293}, + {0.076872,0.167609}, + {0.466394,0.073944}, + {-1.120238,-0.403795}, + {-0.605089,0.022859}, + {0.279943,1.026083}, + {0.103397,0.277845}, + {-0.243145,0.104500}, + {0.333394,-0.637974}, + {-0.115601,1.088147}, + {-0.792947,0.234692}, + {-0.789909,-0.934349}, + {-0.734755,0.478295}, + {1.709832,-0.280996}, + {0.744538,-0.906727}, + {0.250604,0.999609}, + {-0.503783,0.558645}, + {0.495996,0.365936}, + {0.142156,-0.574836}, + {0.512751,0.192158}, + {1.235956,0.332711}, + {0.023924,-0.429072}, + {1.193035,-0.496755}, + {0.507106,0.569391}, + {-0.957161,-1.168585}, + {-0.107514,0.423613}, + {-0.739674,-0.701516}, + {0.904520,-0.072935}, + {-0.102696,-0.928840}, + {-0.431224,0.774089}, + {0.546826,0.645864}, + {-1.462693,-0.997040}, + {0.045656,0.881963}, + {1.235724,0.605226}, + {0.485086,-0.077597}, + {-0.269521,-0.825996}, + {-1.322636,0.198827}, + {-0.755254,0.130400}, + {0.905988,-0.026561}, + {0.398511,-0.221909}, + {0.101731,-0.824604}, + {-0.772005,-0.034138}, + {0.255018,0.583319}, + {-0.099606,-0.618148}, + {-1.244045,0.403242}, + {0.290003,0.145494}, + {0.525354,0.224848}, + {0.953469,0.330420}, + {-0.529456,0.842453}, + {-0.558430,-0.068691}, + {0.816181,-1.027805}, + {0.473286,0.705963}, + {-0.374642,-0.541333}, + {0.450463,-0.658926}, + {-0.817825,-0.087311}, + {-0.506713,0.154635}, + {-0.234898,0.576703}, + {-0.308701,-0.353461}, + {-1.064488,-0.829382}, + {-0.948916,1.358909}, + {0.873385,0.041247}, + {-0.975031,0.341437}, + {0.465089,-0.305899}, + {-1.322672,-0.257483}, + {-1.628600,0.631921}, + {1.432280,-0.394926}, + {-0.278556,0.212714}, + {-0.350961,-1.579332}, + {-0.404100,0.750536}, + {0.368782,0.707155}, + {0.075936,-1.267203}, + {-0.831914,-0.096899}, + {-0.333046,-1.207398}, + {0.347681,1.157404}, + {-0.578348,-0.070195}, + {-0.129107,1.292968}, + {0.170815,0.528093}, + {0.446822,-0.070859}, + {0.606865,-1.535666}, + {0.948290,-0.884917}, + {-0.045336,-0.805774}, + {0.469737,-0.474745}, + {-0.491228,1.119829}, + {-0.441045,0.412691}, + {-0.263473,0.314737}, + {-0.249778,-0.497140}, + {1.067664,0.185250}, + {0.464393,0.962226}, + {1.268074,-0.124376}, + {-0.050562,0.440929}, + {1.169404,0.656123}, + {-0.881702,0.319503}, + {-1.052664,1.076097}, + {-0.492302,0.583617}, + {0.558011,-0.848022}, + {-0.723854,0.330486}, + {-0.451609,0.208036}, + {0.033972,0.322249}, + {0.081812,0.909632}, + {0.438240,-0.140270}, + {-1.769997,0.783168}, + {0.841427,0.381585}, + {-0.535555,1.054986}, + {0.480827,-0.859746}, + {-0.590138,-1.197696}, + {1.838550,-0.341772}, + {0.314785,0.598647}, + {0.966481,0.829249}, + {-0.603204,1.197482}, + {0.287894,-0.764641}, + {0.245047,0.646047}, + {0.703114,0.023655}, + {-0.751477,-0.640445}, + {0.128946,0.238554}, + {-0.248008,-0.661997}, + {-1.358426,0.542743}, + {-0.077018,0.562820}, + {-0.992383,-0.265463}, + {0.815603,-0.609510}, + {0.402195,0.111800}, + {0.098221,0.243275}, + {0.465141,-0.894786}, + {-0.195025,0.818069}, + {0.163013,0.020456}, + {0.019287,0.280488}, + {-1.292419,-0.472930}, + {-1.176423,-0.206148}, + {-0.517755,-0.206153}, + {-0.221025,-0.087351}, + {0.613520,0.874127}, + {0.125680,-0.160756}, + {0.959133,-0.888381}, + {-0.119945,0.682721}, + {0.994469,1.538646}, + {0.666825,0.194733}, + {-0.037507,-0.858152}, + {1.210323,-0.049750}, + {-1.064716,-0.617205}, + {0.945401,-2.387452}, + {0.158818,0.160687}, + {-0.482974,0.394775}, + {-0.858639,0.219751}, + {0.294519,0.146071}, + {1.044995,-0.604510}, + {0.823595,0.998153}, + {0.038470,1.230760}, + {1.575698,-0.815523}, + {0.148811,0.410763}, + {-0.389223,0.867009}, + {-0.126203,0.541746}, + {1.678347,0.380927}, + {0.429547,-1.024259}, + {-0.266202,0.332225}, + {-1.617040,-1.222720}, + {-0.563409,-0.661385}, + {-0.219464,-0.002245}, + {0.314463,0.656447}, + {-0.300489,0.532422}, + {-1.675190,0.759753}, + {0.428757,0.171765}, + {-0.011795,-0.359087}, + {-0.887617,0.835305}, + {-0.810371,1.602856}, + {0.409307,-0.461949}, + {0.199920,-0.987035}, + {0.123417,0.693076}, + {-0.100030,-1.106335}, + {1.582451,-1.165881}, + {-0.704681,-0.668353}, + {0.760863,1.026244}, + {-0.191075,0.266052}, + {-0.668103,0.170235}, + {-0.012904,-0.286498}, + {-0.501481,0.788971}, + {0.668517,0.968752}, + {-1.047200,-0.400916}, + {-0.533675,0.024010}, + {-0.986899,-0.229436}, + {0.627433,1.110767}, + {-0.365978,0.023073}, + {0.663772,-0.100048}, + {1.049500,0.285839}, + {-0.643717,-0.106911}, + {0.591250,-0.125807}, + {-0.639040,-0.106044}, + {0.037507,-0.832752}, + {0.328107,-0.285961}, + {-0.627469,-0.265954}, + {-0.052279,0.075179}, + {-0.231068,0.046103}, + {1.172718,0.580020}, + {-0.255252,0.819326}, + {-0.169260,-0.100791}, + {-0.756299,0.608835}, + {-0.181330,-0.094706}, + {0.479515,-0.363664}, + {1.236969,0.858327}, + {-0.975062,0.641956}, + {1.244166,0.412330}, + {-0.243528,-0.367673}, + {-0.352109,-0.345661}, + {-0.198278,0.348731}, + {-0.264499,0.354155}, + {1.043070,-1.080189}, + {-0.158193,0.645892}, + {-0.341817,-0.186282}, + {-0.152951,-0.679947}, + {-0.281572,0.534695}, + {-0.012417,0.328755}, + {-0.265771,-0.525037}, + {-0.161336,1.444940}, + {0.995682,0.203988}, + {-0.537981,0.988658}, + {-0.529871,1.194728}, + {0.831686,0.030963}, + {0.356165,-0.026852}, + {-0.577640,-0.518094}, + {-1.028778,-0.136226}, + {1.046369,-0.334105}, + {-0.005565,-1.329268}, + {-0.821778,-0.563742}, + {1.142928,0.091294}, + {0.682693,-1.263949}, + {0.380228,-0.658545}, + {0.843082,0.932597}, + {-0.345522,0.249836}, + {0.446026,-1.368423}, + {-0.918192,1.002040}, + {-0.661288,-0.984786}, + {-0.590316,-0.129025}, + {0.777157,0.056676}, + {-0.264574,-0.214260}, + {-0.816790,0.067197}, + {-0.585520,-0.519243}, + {-1.193762,-0.976993}, + {0.583269,0.827641}, + {0.394747,-0.120571}, + {-0.049132,-0.030678}, + {-0.484051,0.178199}, + {-0.283985,-0.097271}, + {0.105214,-0.205086}, + {0.341469,1.602652}, + {0.269129,0.846228}, + {-0.386895,-0.161324}, + {0.950400,0.840099}, + {-0.753280,0.687107}, + {0.466935,-0.616318}, + {-0.287216,-0.420626}, + {-1.046482,-0.085754}, + {0.284436,-0.869538}, + {0.897849,0.423417}, + {0.921429,-0.765774}, + {0.763842,-0.209293}, + {0.617392,0.912271}, + {-0.177456,-0.132474}, + {0.806300,0.356169}, + {0.336841,-0.384476}, + {0.283514,-1.204551}, + {-1.051563,0.410899}, + {-0.962639,0.824742}, + {-0.270251,-0.887304}, + {0.165904,-0.610252}, + {-0.333379,0.607510}, + {0.600463,0.941986}, + {0.997552,0.235415}, + {-1.187420,-0.233916}, + {0.897561,-0.197762}, + {0.319458,-0.794006}, + {1.832876,-1.005851}, + {0.117741,0.084043}, + {-0.277336,-0.585939}, + {-0.220366,0.332784}, + {-0.955706,-0.663342}, + {-0.874698,-0.661934}, + {-0.977466,0.530857}, + {-0.670765,0.717771}, + {1.169043,0.801325}, + {-0.313282,0.543873}, + {1.361090,-0.016967}, + {-0.045271,0.468467}, + {-0.872414,0.191454}, + {-0.622985,1.003125}, + {-1.506511,-0.683927}, + {-0.860689,-0.551287}, + {-0.871940,-0.866821}, + {0.624825,0.683967}, + {1.592190,0.116308}, + {0.126634,0.042754}, + {0.051162,1.220215}, + {0.758876,0.604646}, + {0.941573,0.080765}, + {-0.195989,0.676589}, + {-0.499377,0.152671}, + {0.658630,0.605302}, + {-0.358647,1.735287}, + {1.364593,0.503183}, + {0.210822,-0.166494}, + {-0.861761,0.367387}, + {-0.458178,0.060156}, + {0.427491,0.042062}, + {0.086057,-0.088052}, + {0.162160,-0.189039}, + {-0.734105,1.173913}, + {1.009910,-0.268308}, + {0.511028,0.449041}, + {-0.638741,1.917117}, + {-0.396037,-0.155032}, + {-0.997269,-0.575873}, + {0.535088,0.441734}, + {-0.543414,-0.751851}, + {-1.416398,-0.066365}, + {-0.053821,1.180805}, + {0.282290,0.897749}, + {0.759861,-0.479464}, + {0.990860,-0.835886}, + {0.536881,-0.128652}, + {-0.235283,1.638562}, + {-0.048821,-1.424798}, + {-1.013434,-0.285478}, + {0.380225,0.037058}, + {0.083666,0.162508}, + {-0.638680,-0.529640}, + {0.063698,0.202676}, + {0.126295,-0.106833}, + {-0.705436,0.875691}, + {1.560148,-0.744106}, + {0.506902,0.182486}, + {-0.216431,0.488020}, + {0.088319,0.537304}, + {0.744745,0.260296}, + {-0.266826,0.163056}, + {-0.680731,1.666494}, + {0.716172,-0.824289}, + {0.576971,1.097574}, + {-0.306776,0.425233}, + {0.559360,0.770270}, + {0.306141,-0.569606}, + {0.641368,0.473688}, + {-0.534869,0.305556}, + {0.479480,-1.319807}, + {-0.369422,0.008258}, + {-1.015711,0.415351}, + {0.334729,-0.161003}, + {0.111812,-0.232136}, + {1.115033,0.418084}, + {0.372638,0.159681}, + {0.228723,0.086318}, + {0.183488,0.840287}, + {-0.032699,-0.968931}, + {0.497496,0.382361}, + {-0.737920,0.301958}, + {-0.390336,-0.313842}, + {-1.358576,-0.824571}, + {-0.296870,-0.221777}, + {-1.204408,-0.178874}, + {0.430879,0.540454}, + {-0.129484,-0.943346}, + {0.111495,-0.347794}, + {0.241006,0.882070}, + {0.259517,-0.153651}, + {0.359138,0.493153}, + {-0.117222,-0.896891}, + {0.130265,-0.611169}, + {-0.564621,-0.942626}, + {0.109644,0.919373}, + {-0.765497,-0.454155}, + {1.351302,-0.499722}, + {-0.388550,0.828392}, + {1.338169,1.025334}, + {-0.017090,-0.296752}, + {-0.180796,0.374854}, + {0.418456,0.346593}, + {-0.739752,0.202709}, + {-0.167847,-0.921766}, + {0.747846,-0.289610}, + {0.366519,-1.205982}, + {0.238487,-0.366714}, + {-0.757299,0.554594}, + {-0.815610,-0.092068}, + {0.238967,0.595734}, + {-0.637637,-0.039172}, + {-0.511671,-0.025446}, + {1.327343,-0.892339}, + {0.787727,0.725476}, + {0.193989,-0.948691}, + {-0.435612,0.747976}, + {0.973745,0.043831}, + {-0.081442,-1.261099}, + {0.972757,0.437030}, + {-0.906525,0.511164}, + {0.286286,-0.007231}, + {-0.724918,0.317117}, + {-0.010738,-1.408628}, + {-0.892791,-0.413062}, + {-1.145404,-1.000462}, + {-0.054472,-0.656673}, + {-0.397352,-1.006708}, + {1.272339,0.348268}, + {-0.072337,0.462120}, + {0.263024,0.820054}, + {-1.350094,-1.060760}, + {0.318931,1.224979}, + {-0.743524,0.081760}, + {0.782937,0.494788}, + {-0.380764,0.038653}, + {0.366967,-1.110074}, + {-0.539220,-0.289508}, + {-0.750016,-0.379700}, + {-1.056018,0.760600}, + {-0.014371,0.051682}, + {0.646769,-1.206138}, + {-0.192194,-0.268590}, + {0.211900,-0.061502}, + {0.667021,0.717522}, + {-0.988574,0.469784}, + {0.909208,-0.187655}, + {-0.264537,0.459019}, + {0.283053,-0.771236}, + {0.977605,0.326370}, + {0.188691,-0.116146}, + {-0.841161,-1.507667}, + {-0.622058,0.275580}, + {0.827556,0.636424}, + {0.829953,-0.934848}, + {-0.974846,-0.484086}, + {1.038897,0.572127}, + {-1.470389,0.655402}, + {-0.031678,-0.280099}, + {0.345680,1.131225}, + {1.521886,0.475562}, + {-0.095613,0.225868}, + {0.587360,0.098605}, + {-0.910606,-0.220681}, + {0.695483,0.270633}, + {1.392499,-0.534474}, + {-0.380665,-0.132181}, + {0.739761,-0.804516}, + {0.247837,0.364872}, + {-0.504840,0.279031}, + {0.577741,-0.499917}, + {-0.877160,-0.500081}, + {0.470665,0.626683}, + {-0.845048,-0.661755}, + {0.573259,0.452514}, + {1.463281,0.460497}, + {-0.140814,-1.014287}, + {0.792857,0.139124}, + {0.095435,-1.194781}, + {-0.168013,-0.617225}, + {-0.669563,-0.438816}, + {0.970599,1.334226}, + {-0.389379,-0.250410}, + {0.337426,1.425473}, + {0.040593,0.759876}, + {-0.692656,-0.593318}, + {0.644505,-0.808285}, + {0.343813,0.483264}, + {0.262818,-0.442864}, + {0.401180,-0.354012}, + {0.042798,0.576953}, + {1.057127,-0.234653}, + {-0.543273,0.116899}, + {-0.261085,0.760538}, + {0.917617,0.504692}, + {-0.505622,-0.461514}, + {-0.397714,0.102581}, + {0.841617,0.258265}, + {-1.224217,1.200595}, + {0.549822,-0.854504}, + {-0.331807,0.249164}, + {-0.969781,1.050829}, + {-1.102970,-0.743287}, + {0.391551,-1.364767}, + {-0.291293,0.652954}, + {-1.597162,-0.453738}, + {-0.347804,-0.281488}, + {-0.384993,-0.354367}, + {-0.893094,-0.032469}, + {-1.033837,0.258447}, + {-0.059178,-0.196922}, + {-0.727165,1.094397}, + {-0.050880,-0.416205}, + {-1.801534,0.759659}, + {-0.013259,-0.907752}, + {-0.663571,-0.737940}, + {0.248589,-0.087161}, + {1.713345,1.020552}, + {0.274155,-0.077844}, + {0.684280,0.290232}, + {0.467950,-1.380906}, + {-0.134793,0.354306}, + {0.641834,-0.147045}, + {1.549775,1.034824}, + {1.011992,0.136162}, + {1.032606,-0.470594}, + {0.002512,-0.501699}, + {0.263132,-0.873676}, + {0.596802,0.698595}, + {0.644208,-1.026820}, + {-0.241748,-0.120648}, + {0.400545,0.692764}, + {0.723725,-1.171937}, + {-0.065336,0.082173}, + {0.087121,0.777870}, + {0.137719,0.862409}, + {0.600762,-0.256252}, + {-0.496334,1.522049}, + {1.415523,-0.361800}, + {0.195888,0.140839}, + {-0.201059,-0.957306}, + {0.833613,-0.884474}, + {-1.923963,-0.511931}, + {-0.401694,-0.750599}, + {-0.057871,-1.554591}, + {0.136921,-0.610025}, + {-0.692221,0.232519}, + {-0.963772,-0.406412}, + {-1.011556,0.388904}, + {0.196652,0.402592}, + {-0.236942,0.249439}, + {0.197316,0.749347}, + {0.260643,1.518230}, + {-0.261184,-0.019793}, + {0.953847,0.003123}, + {-0.488447,-0.693489}, + {0.100561,-0.839624}, + {-0.387958,0.029235}, + {-0.056287,0.849571}, + {0.146328,-0.596042}, + {-0.442422,-0.081224}, + {1.467301,1.058274}, + {-0.842963,-0.823609}, + {0.361145,0.235648}, + {2.244235,-0.417005}, + {0.557178,0.494236}, + {-0.286937,0.446261}, + {-0.797514,0.125949}, + {-0.396846,-0.492949}, + {0.791338,0.112081}, + {0.731112,0.815339}, + {0.124238,1.042459}, + {0.178620,-0.243480}, + {-0.297767,-0.499014}, + {0.089431,-1.045263}, + {0.876765,1.478866}, + {-0.433655,-0.416072}, + {0.076538,0.452756}, + {0.276575,-0.657696}, + {0.710620,0.425570}, + {-0.348002,-1.521084}, + {0.463074,-0.794634}, + {1.420303,0.458714}, + {-0.799261,0.730155}, + {-0.282421,-0.450125}, + {-1.215153,0.133084}, + {0.429525,0.137792}, + {-0.046368,-0.348350}, + {1.182696,-0.476907}, + {-0.354102,-0.016664}, + {0.228567,-0.048909}, + {0.317271,-0.110712}, + {0.000535,0.097966}, + {0.358389,-0.986634}, + {0.233837,-0.517393}, + {-0.702710,-1.470436}, + {0.301747,-0.361704}, + {-0.116303,0.152185}, + {0.321548,0.456944}, + {0.426785,0.809817}, + {0.862019,-0.752446}, + {0.503493,-0.196673}, + {-0.188695,1.043960}, + {-0.634846,0.615436}, + {-0.773059,-0.768587}, + {0.735760,-0.078372}, + {0.076222,-0.103925}, + {-0.837846,-1.879631}, + {0.311214,0.005395}, + {-0.256265,0.525394}, + {-0.759509,0.445865}, + {-0.425542,0.964997}, + {0.621631,0.218384}, + {0.749916,0.486092}, + {0.735936,-0.741326}, + {-0.550580,0.175995}, + {0.441750,0.922190}, + {-0.284205,0.780467}, + {0.111299,-0.940763}, + {-0.488491,0.739998}, + {-0.538022,0.602799}, + {-0.458050,-0.227355}, + {1.218009,1.485198}, + {0.293776,0.548771}, + {0.621581,0.201245}, + {0.029869,-0.484299}, + {0.297470,-0.678649}, + {-0.652890,-0.572565}, + {0.708517,0.135724}, + {-0.759185,1.020900}, + {0.089393,1.254895}, + {-0.163606,-0.225901}, + {1.028091,-0.979818}, + {-0.463887,-0.461716}, + {-0.472972,1.295955}, + {-1.499760,-0.100153}, + {-0.316495,0.182810}, + {-0.029037,1.390832}, + {-1.052626,0.016877}, + {0.140853,-1.064090}, + {0.077518,0.160558}, + {-0.789567,0.126484}, + {0.237999,0.933535}, + {-0.625411,-0.154393}, + {-0.651849,0.477355}, + {0.313835,-0.871245}, + {0.063692,0.733038}, + {-0.125890,-1.321408}, + {0.782127,0.731970}, + {0.067632,1.028553}, + {0.390798,-0.202231}, + {0.859910,-0.547214}, + {0.303427,0.117133}, + {-1.221034,0.106196}, + {-0.556539,-0.005747}, + {-0.581574,-0.064757}, + {-0.093350,-1.416022}, + {-0.371514,0.863009}, + {-0.228865,-0.911086}, + {0.226620,0.868273}, + {-0.022400,0.968063}, + {-0.282417,-1.206830}, + {0.517815,-0.318365}, + {0.433595,-1.277757}, + {0.650281,0.282816}, + {0.696810,-0.618460}, + {-0.018515,-1.174056}, + {0.528708,-0.383014}, + {0.465366,-0.166643}, + {-1.111839,-0.208049}, + {1.260600,-0.904770}, + {0.114190,0.595080}, + {-0.772035,1.160945}, + {-0.072465,-0.121030}, + {0.740277,0.073001}, + {-0.031995,-1.003071}, + {0.309444,-0.284262}, + {0.256298,0.217717}, + {-0.714797,0.139100}, + {1.365575,-0.321842}, + {0.609559,1.219424}, + {-0.656153,0.923034}, + {0.306127,0.569498}, + {-0.185454,-0.769265}, + {0.640850,-0.158718}, + {-1.334112,-0.208599}, + {-0.368937,-0.719614}, + {0.154071,0.481000}, + {0.369258,-1.256445}, + {-1.053810,1.454169}, + {-0.166292,-0.690521}, + {0.434216,-0.485381}, + {0.446152,0.316255}, + {0.598136,-0.692985}, + {0.194634,0.723444}, + {0.033284,-0.674910}, + {-0.677093,-0.480733}, + {0.483942,0.055658}, + {-0.380847,1.698802}, + {-0.739697,-0.967901}, + {0.181901,-0.283096}, + {-0.385252,-0.218986}, + {0.571349,1.211891}, + {0.208035,-0.801372}, + {-0.001354,0.011905}, + {0.481477,-0.622890}, + {1.126983,0.720045}, + {0.366125,0.725890}, + {0.172974,0.276534}, + {-0.297515,-0.000297}, + {0.716860,-0.694652}, + {0.896244,-0.218171}, + {0.166865,-0.781466}, + {-0.782709,-0.862993}, + {-0.004288,1.019110}, + {-0.509804,0.230849}, + {-0.987740,0.724671}, + {-0.816786,-1.334751}, + {-0.406238,-0.684850}, + {0.680826,0.080398}, + {-0.045664,0.409165}, + {1.857790,-0.268328}, + {0.265866,1.576185}, + {-0.633796,-0.378996}, + {0.441580,0.420835}, + {0.594992,-0.103592}, + {-0.350224,1.054242}, + {-0.454100,0.966540}, + {-0.553087,0.060871}, + {-0.473446,-0.638460}, + {0.348962,-0.726140}, + {0.403723,-0.092776}, + {0.168148,-0.187260}, + {-0.047057,-0.712472}, + {0.546338,0.364816}, + {0.918003,-0.461675}, + {-0.907751,-1.659162}, + {0.690737,0.688165}, + {1.115170,-0.620245}, + {-0.424054,-0.378832}, + {-0.295589,0.438479}, + {-1.181545,-0.526172}, + {-0.191356,0.363078}, + {1.256819,0.772957}, + {0.660880,-0.127556}, + {-0.770033,1.086703}, + {-0.221948,-0.024302}, + {0.376195,0.665919}, + {0.855315,1.296681}, + {0.064168,-1.090223}, + {1.198266,-0.123963}, + {0.222219,0.832714}, + {0.265471,0.660817}, + {0.926886,0.106470}, + {-0.116532,-0.351282}, + {0.282755,1.394651}, + {1.976995,0.625415}, + {0.086001,0.874691}, + {-1.158765,-0.296382}, + {0.821879,0.330819}, + {1.473645,0.454222}, + {0.373012,0.334324}, + {0.784090,-1.194075}, + {-0.049292,-0.080586}, + {-0.326299,-1.150056}, + {-0.376097,-0.297711}, + {0.400420,0.699295}, + {-0.401832,0.718915}, + {0.513962,1.314126}, + {-1.223199,0.822673}, + {-0.198511,0.577317}, + {-0.931176,-0.141243}, + {-0.328271,-0.297043}, + {0.058682,0.063005}, + {-1.537647,-1.357544}, + {0.991342,-0.020237}, + {0.389384,-0.358624}, + {-0.286835,0.522531}, + {-0.921756,-1.109047}, + {-0.005216,0.585698}, + {0.073284,-0.240263}, + {-0.608758,1.045577}, + {-0.127535,1.243989}, + {1.069722,-0.381090}, + {0.658169,-0.466652}, + {0.110592,-0.898093}, + {-0.344192,0.315264}, + {-1.253943,0.576829}, + {-0.988689,0.289650}, + {0.323581,0.406835}, + {0.753623,-1.395921}, + {-0.526975,0.375853}, + {-0.228419,0.642204}, + {-0.911534,-0.802450}, + {-0.714417,-0.277566}, + {-0.248413,-0.669371}, + {0.558370,-0.525797}, + {-0.676306,-0.233652}, + {0.187377,-0.245513}, + {-0.115084,-0.722299}, + {-0.778514,-0.521242}, + {1.510762,0.186472}, + {-0.112162,0.741817}, + {0.168038,0.036480}, + {0.473081,-0.613676}, + {0.017735,-1.619743}, + {0.125184,-0.943553}, + {0.545184,-0.381330}, + {0.093888,0.932584}, + {0.298593,-1.014602}, + {1.317871,-0.453601}, + {0.446039,0.296345}, + {-0.003700,-0.215325}, + {0.357740,-1.726941}, + {0.056925,-0.146512}, + {0.242151,-0.224778}, + {0.333254,1.380770}, + {1.576821,-0.423607}, + {0.293532,0.300461}, + {-0.192775,-0.819195}, + {-0.724187,0.864495}, + {-0.256047,0.693948}, + {0.227372,0.048857}, + {0.384743,-0.022614}, + {0.334230,0.059078}, + {-0.084885,0.245805}, + {-0.956303,-1.202349}, + {-0.673081,-0.715653}, + {-1.070653,-0.327304}, + {-0.147279,0.735590}, + {-1.051301,2.081734}, + {0.743641,0.675310}, + {0.497307,-0.052339}, + {-1.137150,-0.681605}, + {0.958912,-0.359105}, + {-0.011346,-1.133356}, + {-0.675276,0.676611}, + {-0.088049,-0.368402}, + {1.029195,0.986048}, + {0.769677,0.565289}, + {-0.142346,1.404113}, + {-1.105935,0.105231}, + {0.137296,-0.042361}, + {0.064376,1.281022}, + {0.891722,-0.662071}, + {-0.274474,1.361238}, + {0.501089,0.037064}, + {-1.079683,0.260584}, + {-0.657026,-0.608459}, + {-1.321491,0.137369}, + {-0.147387,1.485629}, + {0.701370,-0.338272}, + {-0.937117,-1.890266}, + {-0.002981,-0.309410}, + {-0.450557,0.756156}, + {-0.207628,0.767636}, + {-0.017018,-1.057447}, + {-0.516946,0.622016}, + {-0.439782,-0.660634}, + {0.465733,0.369621}, + {-1.107081,0.963995}, + {-1.304264,-0.056408}, + {0.326753,0.871892}, + {0.607911,-0.097462}, + {0.368739,-0.185021}, + {1.177421,0.378663}, + {-0.059318,-0.122919}, + {0.024356,-0.157050}, + {-0.952570,-0.640217}, + {-0.285763,0.974177}, + {-0.222286,-0.638367}, + {1.350695,0.832729}, + {0.426047,0.068965}, + {-1.235143,-0.255727}, + {0.097972,-1.280044}, + {0.613868,0.569266}, + {0.792483,-0.388408}, + {-0.611795,-0.757664}, + {0.066523,-1.342460}, + {1.152646,0.059112}, + {-0.407404,-0.164086}, + {0.998551,-0.553072}, + {-0.230242,-0.414397}, + {1.100387,-0.474447}, + {-0.136452,-0.266361}, + {-0.783866,-0.608098}, + {-0.626331,0.731900}, + {0.453871,0.483000}, + {0.118882,-0.076636}, + {-0.010890,1.832384}, + {-0.275781,0.534932}, + {-0.758412,0.302367}, + {0.774181,-0.666316}, + {-1.239903,-0.018154}, + {-0.826897,-0.159508}, + {0.294782,0.329762}, + {-0.310305,0.173462}, + {-0.484331,0.577130}, + {0.528037,-0.079597}, + {-1.165040,0.643362}, + {0.218828,-1.879045}, + {0.340559,0.534394}, + {1.027003,-0.862991}, + {0.265023,0.582110}, + {0.533497,0.424652}, + {-0.143533,-0.668350}, + {-0.043478,1.242700}, + {0.140689,-0.328515}, + {0.594427,0.952587}, + {0.328719,0.131913}, + {1.647645,0.451601}, + {0.807728,0.547755}, + {-0.398431,1.090855}, + {0.071550,0.529582}, + {0.696988,0.096969}, + {-0.315803,0.602702}, + {-0.053510,0.368662}, + {-0.783694,-0.369834}, + {-0.513209,-0.183077}, + {-0.389552,-0.423163}, + {0.250511,-0.197899}, + {1.072604,1.141232}, + {-0.256157,0.324126}, + {-0.845304,1.344024}, + {1.607235,-0.083729}, + {0.216531,-0.229193}, + {-1.849789,0.283520}, + {-0.273563,-0.437125}, + {0.439165,0.820069}, + {-0.071710,0.044047}, + {-0.036628,0.811854}, + {0.949810,0.092324}, + {0.223015,-0.302363}, + {-1.151938,0.219130}, + {-0.602013,-0.159929}, + {-0.479745,-0.467518}, + {-0.596418,1.115315}, + {1.155356,0.976269}, + {-0.339066,0.667014}, + {-0.537118,-0.328546}, + {0.231632,-0.251679}, + {-0.564684,-0.151955}, + {0.404261,0.591546}, + {0.156538,-0.119747}, + {-0.265291,0.441799}, + {-0.710732,0.990762}, + {-0.037181,-0.893433}, + {-0.608993,0.072250}, + {-0.431612,-0.294577}, + {-0.449292,-0.627379}, + {1.118185,-0.219789}, + {-1.095315,-0.141630}, + {-0.906823,1.379934}, + {-0.355207,0.170146}, + {0.012266,-0.140593}, + {0.582558,0.200710}, + {-0.264941,0.654223}, + {0.490653,0.262090}, + {-0.806158,0.423760}, + {-0.916022,-0.095727}, + {-1.435559,-0.430004}, + {-1.383499,0.819679}, + {-0.476148,-0.799760}, + {-0.086440,-0.288405}, + {0.468541,-0.026429}, + {-0.513250,-0.142815}, + {-0.903017,0.571624}, + {-0.097263,0.834344}, + {-1.345370,-0.677137}, + {1.710559,-0.271618}, + {-0.490398,-0.719281}, + {-0.660807,0.868829}, + {-0.612810,-0.703682}, + {0.992913,0.444834}, + {0.083612,0.800845}, + {-0.140036,-0.531708}, + {-1.676151,0.726057}, + {1.115666,0.611399}, + {-0.454838,0.031736}, + {0.338107,0.033385}, + {-1.179649,0.975904}, + {-0.362644,-0.703524}, + {0.265567,-0.598433}, + {0.612009,-0.911296}, + {0.669627,0.732675}, + {0.299979,-1.083474}, + {-0.001796,0.450980}, + {-0.312085,-0.240890}, + {-0.157834,-0.452017}, + {-1.005825,-1.124619}, + {1.514761,-0.139328}, + {0.205847,-0.624360}, + {-0.788916,-0.431594}, + {0.185577,0.530159}, + {-0.998640,-0.120038}, + {-0.701757,-0.385069}, + {0.127492,0.278129}, + {0.644093,-0.318252}, + {1.349703,0.815553}, + {1.178677,0.257816}, + {0.290177,1.567018}, + {0.815353,0.069366}, + {0.428406,0.751920}, + {-0.358682,-0.000313}, + {0.898652,-0.035994}, + {0.007882,-0.203406}, + {1.143951,0.676206}, + {-1.579231,-0.510529}, + {-0.029383,0.067530}, + {-0.207513,-0.651686}, + {-0.171590,0.197287}, + {1.106950,0.639104}, + {-1.153861,0.109446}, + {0.128439,1.245168}, + {-1.709516,0.155977}, + {0.698242,0.511780}, + {0.188021,0.140058}, + {0.214542,-0.603858}, + {-0.585161,-0.999378}, + {-0.125116,-0.107497}, + {1.169544,-0.068827}, + {-0.641184,-0.795741}, + {0.299439,-0.994491}, + {-1.270881,0.080905}, + {0.638892,0.320804}, + {-0.045967,0.343003}, + {0.572705,-0.597459}, + {-1.076651,0.926168}, + {1.591514,-0.239336}, + {-0.151223,0.296796}, + {-0.547906,-0.598357}, + {0.194930,-1.469040}, + {-1.066167,-0.488868}, + {0.375923,-0.458435}, + {0.118752,-0.176519}, + {-1.119040,-0.877881}, + {0.317179,1.106286}, + {-0.524586,0.380106}, + {0.449438,-0.812248}, + {0.218978,-0.240793}, + {0.920874,1.099158}, + {0.337065,-1.042434}, + {0.165176,-0.575666}, + {0.124061,0.064366}, + {-0.972349,-0.449360}, + {0.438009,-0.607478}, + {1.340508,0.164007}, + {-0.611231,-0.045868}, + {-1.894545,0.313067}, + {0.026078,-0.046337}, + {-0.993251,0.529082}, + {0.338591,-0.050854}, + {0.276524,-1.876008}, + {0.553549,-0.641581}, + {-1.274207,1.314869}, + {0.082555,0.483468}, + {0.480747,0.004671}, + {0.129514,0.227370}, + {0.488707,-0.498655}, + {-0.672859,0.446981}, + {-0.389134,0.220936}, + {0.678780,0.388861}, + {0.004714,0.113091}, + {0.098152,0.402314}, + {-0.584163,0.655414}, + {1.069824,0.053944}, + {1.426146,-0.171673}, + {-0.492434,0.430442}, + {0.387326,-0.723692}, + {0.923225,0.315823}, + {-0.436266,-0.179644}, + {0.679013,0.839753}, + {0.121002,0.328185}, + {0.686624,0.263510}, + {-1.014880,0.226535}, + {0.496357,0.676631}, + {-0.685878,0.475997}, + {-0.816184,-0.690225}, + {0.624418,-0.640938}, + {0.981859,-0.263799}, + {1.266654,-0.559957}, + {-0.447318,-1.692190}, + {-1.632760,-0.647412}, + {1.237379,1.188506}, + {0.224983,-0.193860}, + {0.265301,0.088248}, + {1.487341,-0.210028}, + {0.975147,-1.738118}, + {-0.315739,-1.563346}, + {0.759571,-0.834275}, + {0.248891,-0.487193}, + {0.593097,0.883254}, + {-0.295665,-0.091338}, + {0.242557,-0.870492}, + {0.076878,-0.401879}, + {-1.275364,-0.748062}, + {-1.030366,-0.635397}, + {-0.059741,0.281073}, + {0.647269,0.569318}, + {0.091019,-0.383699}, + {1.550738,-0.017491}, + {0.558012,-0.883251}, + {1.344487,0.781872}, + {0.425354,-0.544888}, + {0.443166,-0.622855}, + {0.402391,-0.428524}, + {0.322402,0.140907}, + {0.665183,0.150628}, + {0.264571,0.063423}, + {-0.180192,1.228519}, + {0.176187,0.609708}, + {-0.686995,-0.858999}, + {0.403250,1.127242}, + {-0.460433,0.622449}, + {0.957213,0.125857}, + {-0.214465,-0.254392}, + {0.953570,-0.146560}, + {0.351196,-0.097209}, + {0.363350,0.991605}, + {-0.842097,0.750050}, + {0.173444,0.393799}, + {0.644241,0.891357}, + {0.518479,0.829535}, + {-0.793455,-0.868437}, + {-0.451662,0.080692}, + {1.713382,0.806600}, + {-0.986818,0.371536}, + {-0.732506,-0.086137}, + {-0.287972,1.333554}, + {-0.505251,-0.388335}, + {0.182226,-0.170677}, + {0.656847,-0.151742}, + {0.240621,-0.408503}, + {-1.207747,0.579227}, + {-0.480071,-1.477118}, + {0.397312,1.160838}, + {-0.478893,0.085660}, + {-1.201398,-0.484779}, + {-0.875166,1.306590}, + {-0.048226,0.168645}, + {0.575978,0.334768}, + {0.268464,-0.584981}, + {0.172204,0.362164}, + {-0.573584,0.837555}, + {0.097430,0.693442}, + {0.710075,0.430611}, + {0.279881,0.500559}, + {-0.495316,-0.284207}, + {-0.024375,-0.582689}, + {0.503912,0.590465}, + {0.543956,-0.751481}, + {-0.113901,0.583382}, + {-0.424219,0.552384}, + {-0.209784,0.254702}, + {2.524661,-1.007793}, + {0.453447,-0.787107}, + {0.129431,0.856054}, + {-0.725614,-0.060954}, + {-0.076847,-0.411651}, + {-0.585319,-0.607995}, + {0.354620,-0.943508}, + {0.004873,0.874609}, + {0.584256,0.295973}, + {-0.751269,-0.621494}, + {1.252094,0.523044}, + {0.412384,-0.071193}, + {1.460668,-0.424840}, + {-1.668383,-0.125918}, + {-0.140575,-0.793958}, + {-0.602913,-1.530258}, + {-0.485749,0.647443}, + {0.327012,0.012391}, + {-0.065556,-1.534338}, + {0.040087,0.692505}, + {0.331535,0.606771}, + {-1.081422,0.655871}, + {0.112370,0.095884}, + {0.544109,-0.418467}, + {0.883949,0.869171}, + {-0.053113,1.005180}, + {0.084581,0.070706}, + {1.176918,0.868754}, + {0.340621,-0.290651}, + {1.069518,-0.145240}, + {-0.305978,-0.255205}, + {0.264782,0.828990}, + {0.076048,0.311651}, + {1.020387,-0.341573}, + {1.171179,0.317841}, + {0.039440,-0.343955}, + {-0.196474,-1.120097}, + {0.173672,-0.637267}, + {0.869413,0.499800}, + {0.402750,-0.274691}, + {-0.195399,-0.716727}, + {-0.697868,-0.592886}, + {1.005820,-0.833437}, + {1.667014,-0.928567}, + {0.112603,0.637979}, + {-0.378046,-0.094991}, + {-0.264513,0.562337}, + {-0.281534,-0.171989}, + {0.184469,0.954685}, + {-0.184794,-0.419611}, + {0.042573,-0.035524}, + {0.526333,0.216558}, + {0.221470,-0.570724}, + {0.952384,0.824810}, + {0.377462,-0.439426}, + {0.552507,0.406306}, + {0.356019,-0.448320}, + {-1.181908,0.315880}, + {1.237299,-1.380363}, + {-0.266766,1.166820}, + {-0.543319,-0.487425}, + {0.853891,1.002771}, + {0.094524,-1.085172}, + {-0.122670,-0.819704}, + {0.507893,1.214830}, + {0.066840,0.391217}, + {-0.627340,-1.028818}, + {0.048450,0.066480}, + {1.252207,-1.088292}, + {1.914396,-0.390461}, + {0.783587,-0.456659}, + {-1.087500,-0.414070}, + {-0.017378,-0.330487}, + {0.822467,0.523086}, + {0.544551,-0.396871}, + {0.505004,-0.302542}, + {0.655396,0.309852}, + {0.744048,-0.677621}, + {0.632487,0.637052}, + {0.382478,-0.487032}, + {-0.253994,1.037147}, + {1.056620,0.110571}, + {-1.000220,0.890575}, + {0.227128,-0.051171}, + {0.249166,-0.869667}, + {0.362158,0.942859}, + {0.170629,0.370184}, + {-0.428655,-0.104012}, + {0.827800,-0.147575}, + {0.050820,-0.016864}, + {1.169503,0.264916}, + {1.055638,-1.029984}, + {-0.213356,-0.446858}, + {0.883660,-0.272743}, + {-0.179240,1.234001}, + {-1.124872,-1.414740}, + {0.620017,0.524664}, + {0.429714,-1.144124}, + {0.071774,0.024483}, + {0.236817,0.493902}, + {-0.345272,0.403117}, + {-0.245305,0.443081}, + {0.456796,0.439895}, + {0.127632,-1.065099}, + {1.004045,0.187642}, + {0.910957,0.711730}, + {0.270826,0.181679}, + {0.554230,-0.318570}, + {0.415953,0.287152}, + {0.249620,-1.683391}, + {-0.183154,-0.452854}, + {0.914111,-0.432673}, + {-1.329404,-0.200816}, + {0.408647,0.357466}, + {0.342816,0.128307}, + {-0.372446,-0.517950}, + {-0.268470,-0.945823}, + {0.058636,0.446404}, + {0.077650,-0.641117}, + {0.500659,0.569755}, + {-1.264154,-0.108240}, + {-0.323458,1.076444}, + {0.286058,-0.812280}, + {1.130102,-0.533853}, + {0.820155,0.813720}, + {-0.369292,0.599253}, + {-0.401040,-1.122319}, + {0.015961,0.999207}, + {0.113009,0.151940}, + {-0.326797,-1.045239}, + {-0.631927,-0.213249}, + {-0.232764,-0.353310}, + {-0.277962,0.172006}, + {-1.384869,0.322627}, + {0.657043,0.378613}, + {1.632659,-0.311238}, + {-0.128560,0.380120}, + {-0.021658,0.595562}, + {0.055891,0.020949}, + {0.360843,-1.355132}, + {-0.441202,0.653312}, + {-0.903583,-0.602887}, + {0.589411,-0.501421}, + {0.009663,0.497738}, + {0.955606,0.137016}, + {-0.829489,0.248268}, + {-0.623087,0.554453}, + {-0.983462,-0.470261}, + {-0.093188,-0.254457}, + {0.281605,-0.015601}, + {1.143487,-0.512110}, + {-0.259302,0.254954}, + {-1.333991,0.113816}, + {1.056834,0.224210}, + {0.478784,-1.143913}, + {1.172144,0.054436}, + {0.126576,-0.617074}, + {0.129731,0.567838}, + {0.992712,0.311224}, + {-0.080398,0.093624}, + {-0.333385,0.321406}, + {-0.857085,0.136303}, + {-0.193071,0.112527}, + {0.174651,-0.824896}, + {-0.044413,-0.225567}, + {0.889937,0.174611}, + {0.221331,-0.846178}, + {-0.911343,-0.217177}, + {-0.598798,1.486589}, + {0.678465,-0.562484}, + {1.906944,0.211159}, + {-0.148741,0.420947}, + {0.875071,0.723028}, + {0.500603,0.175314}, + {-0.669264,0.505343}, + {-0.162355,0.492007}, + {0.405254,0.188295}, + {0.730781,-0.170657}, + {0.219461,-0.487510}, + {-0.607648,-0.266311}, + {1.031809,-1.878717}, + {0.262365,0.080670}, + {0.704439,-0.342870}, + {0.526865,0.107263}, + {0.449751,-0.350958}, + {-0.250292,-0.244899}, + {0.322347,-0.066403}, + {0.250252,0.152062}, + {-0.123904,0.252763}, + {0.097518,0.668475}, + {-0.756972,0.544061}, + {-0.482034,-1.042969}, + {0.216007,-0.057989}, + {-0.076012,-0.157728}, + {-0.193643,0.281670}, + {-0.047023,-1.385414}, + {0.425208,0.198825}, + {-1.128706,1.130083}, + {0.749280,0.273274}, + {-0.885277,-0.437183}, + {-0.045310,0.493993}, + {0.689210,0.481689}, + {-0.836367,-0.212518}, + {0.933511,-0.551367}, + {0.323157,0.145200}, + {-0.381780,0.425335}, + {-0.043935,0.669080}, + {0.950537,-0.788988}, + {0.888065,0.870818}, + {0.198948,1.131985}, + {0.333668,1.531210}, + {0.329099,1.260233}, + {0.619784,-0.971239}, + {-0.362197,0.842451}, + {-0.107082,0.572070}, + {-1.273638,-0.219990}, + {-0.220258,0.341964}, + {-0.110476,-0.229104}, + {1.871605,1.085818}, + {-0.667567,-0.510587}, + {-0.081589,-0.002145}, + {-0.485358,-0.264608}, + {-0.021298,-1.378931}, + {1.061728,-0.050554}, + {0.063661,-0.078720}, + {0.540324,-0.679083}, + {0.040479,-1.175746}, + {-1.651713,0.175791}, + {-1.061321,-0.905733}, + {-0.144548,-0.403863}, + {-0.212951,-0.162069}, + {-0.202079,0.210548}, + {-0.481286,-0.089389}, + {0.534427,0.293422}, + {-0.077023,-0.592110}, + {0.748204,-0.933897}, + {0.789813,0.023419}, + {0.364097,-0.688288}, + {-0.817344,-0.232389}, + {-1.106773,-0.011376}, + {-1.149018,0.589183}, + {-0.237988,0.461070}, + {0.144291,-0.866590}, + {-0.319867,-0.741546}, + {0.467556,-0.563525}, + {0.787965,-0.067020}, + {-0.377218,0.346134}, + {-0.439111,-0.729340}, + {0.111481,-0.725684}, + {-0.345130,0.303179}, + {0.221511,-0.444748}, + {-0.139828,1.064259}, + {-0.102410,1.595486}, + {-0.033213,-1.118558}, + {0.003251,0.259777}, + {-0.418818,0.218547}, + {0.196030,-0.238166}, + {0.317481,0.810128}, + {0.685667,-1.193565}, + {-0.230818,1.499649}, + {0.527567,1.628496}, + {0.418979,-0.163575}, + {0.943900,0.909605}, + {-1.191709,-0.027791}, + {0.834602,1.596546}, + {0.285289,0.562981}, + {-0.270156,-0.195083}, + {-0.731085,-0.510584}, + {0.054180,0.401694}, + {0.222936,-0.465566}, + {0.708946,0.905168}, + {0.274867,-0.023564}, + {0.255887,-1.523657}, + {-0.438371,-0.835342}, + {-0.388636,0.420745}, + {0.575120,0.350653}, + {0.165252,-1.180423}, + {-0.106785,-0.106601}, + {-0.163290,0.059107}, + {-0.048709,-0.263100}, + {0.309147,-0.042611}, + {-0.927395,0.617546}, + {0.809214,1.027300}, + {-0.146042,0.142650}, + {-0.784247,-1.284659}, + {-0.278628,-0.344565}, + {0.036556,0.842948}, + {0.912256,0.120918}, + {-1.159161,-0.897982}, + {1.183806,0.116039}, + {0.080759,-0.670877}, + {1.106555,0.968417}, + {-0.748972,-0.332161}, + {0.015659,-0.238382}, + {0.072921,0.945789}, + {0.720423,-0.655437}, + {-1.184291,-1.204869}, + {0.005271,-0.500795}, + {-0.947286,0.565118}, + {0.402954,-0.272249}, + {-0.051205,-1.269563}, + {-0.244921,-0.403400}, + {0.688696,-0.966522}, + {-1.332749,1.102022}, + {0.248091,-0.614807}, + {0.542833,0.089974}, + {0.092234,-1.064895}, + {-0.142784,-0.393747}, + {-1.915675,0.230426}, + {0.189830,0.787094}, + {-0.630199,0.176279}, + {-1.014131,1.143947}, + {-0.520987,-0.274620}, + {0.207558,-0.600789}, + {0.091016,-0.244461}, + {-0.130663,0.121426}, + {0.004404,0.214764}, + {1.305978,0.539062}, + {1.085432,0.406738}, + {-1.147405,0.986932}, + {-0.527963,0.040514}, + {1.048821,0.402675}, + {0.871429,1.049595}, + {1.770856,-0.090866}, + {-0.518070,0.716500}, + {0.487361,0.022371}, + {-0.686924,-0.549181}, + {0.340429,0.907657}, + {-0.394719,1.043237}, + {0.202132,-0.329431}, + {-0.569046,0.377140}, + {-0.446943,0.699826}, + {-1.179740,-0.505842}, + {0.356706,0.439865}, + {-0.598450,0.446083}, + {-1.374043,0.679741}, + {-0.021589,-1.611401}, + {0.410296,0.014703}, + {1.604389,0.059808}, + {-1.673347,-0.607599}, + {-0.050574,0.534932}, + {1.712505,1.284287}, + {-0.342150,-0.043176}, + {0.055806,0.223800}, + {0.355618,-0.311415}, + {-0.271235,0.683074}, + {-0.775743,1.125752}, + {-0.378310,-1.640378}, + {-1.038677,0.190076}, + {1.174409,-0.118801}, + {0.331030,-0.048922}, + {0.728780,-0.295898}, + {0.693699,-0.972498}, + {0.174966,-1.152868}, + {-0.876610,-0.017480}, + {-0.062463,0.606038}, + {0.974421,1.248637}, + {1.417309,-0.262139}, + {0.011829,1.068245}, + {-0.812946,2.785479}, + {0.861911,0.248256}, + {-0.567134,0.287479}, + {-1.000297,0.453402}, + {-0.007071,0.201681}, + {-0.152146,1.342125}, + {0.671739,0.150808}, + {1.116866,0.838904}, + {0.759212,-1.364876}, + {-1.013891,1.460428}, + {-0.226149,-1.126365}, + {-0.451954,-0.444787}, + {-0.021515,1.034266}, + {-0.571367,-0.692007}, + {-0.349616,0.140445}, + {0.168654,0.087815}, + {-0.129953,0.445421}, + {0.410578,0.912573}, + {-0.217475,-0.669581}, + {-0.222785,1.245619}, + {1.558435,0.605819}, + {-0.488581,-0.336896}, + {-0.247095,0.691559}, + {-0.272835,-0.264770}, + {0.675699,0.032700}, + {-0.600614,0.262450}, + {0.180303,-0.367078}, + {0.919067,1.375550}, + {0.152099,-0.550776}, + {-0.201242,0.036053}, + {0.764895,-1.477231}, + {0.396961,0.220377}, + {-0.306654,0.876105}, + {-0.991493,0.187414}, + {-0.307614,0.684635}, + {-0.773884,0.106210}, + {-1.566911,0.170510}, + {0.361833,-0.141857}, + {-0.600408,-0.446279}, + {1.421652,0.535651}, + {0.798181,1.741752}, + {0.828463,-1.351656}, + {1.064522,0.356219}, + {-0.261882,-0.068944}, + {-0.274206,-0.863308}, + {-0.472305,-0.610240}, + {1.169302,0.073319}, + {0.212464,-0.516636}, + {0.072813,0.172732}, + {-0.402815,-0.754899}, + {0.240675,0.006754}, + {-0.413280,0.162876}, + {-0.878790,-0.579111}, + {-0.490272,-1.206031}, + {-0.500456,-0.219817}, + {0.069254,-1.439473}, + {0.914958,0.485123}, + {0.759158,-0.336522}, + {0.798766,-0.831419}, + {0.572361,-0.465976}, + {-0.130641,-0.259763}, + {-0.529278,0.642024}, + {0.169663,1.957850}, + {0.290362,1.466387}, + {0.486745,-0.303996}, + {-0.739829,0.729494}, + {-1.119647,-0.438709}, + {1.199651,0.132905}, + {-0.028488,0.166904}, + {0.294118,1.343646}, + {-1.078798,-0.045417}, + {-0.144834,0.724221}, + {-0.286147,0.584877}, + {-1.025536,1.281690}, + {1.349738,0.051777}, + {-0.163706,0.861461}, + {1.304346,-1.415064}, + {-0.220065,0.578733}, + {-0.073421,-0.292662}, + {-0.407989,1.100458}, + {0.306779,-0.903447}, + {-0.053132,-0.864616}, + {-0.613827,0.320417}, + {-0.157362,-0.152289}, + {-0.363881,-0.696127}, + {-0.644928,-0.357587}, + {0.523401,-0.545460}, + {-0.284975,0.437116}, + {-0.332811,0.194424}, + {0.886436,-0.283097}, + {-0.353503,1.253798}, + {0.777206,1.140778}, + {-0.176515,1.349269}, + {0.200192,0.474405}, + {-0.090735,0.782045}, + {0.108052,-0.393573}, + {-0.097758,0.133294}, + {-0.521819,-0.069948}, + {0.495179,0.903907}, + {-1.635143,0.044403}, + {-1.044754,0.995099}, + {-0.029236,0.231209}, + {-0.763150,-0.740411}, + {0.666666,0.948566}, + {-0.996496,0.103076}, + {0.066595,0.386752}, + {1.079913,-0.587405}, + {-0.126881,0.324364}, + {0.242668,0.274037}, + {-0.167854,-0.463373}, + {1.254502,-1.338299}, + {-0.814549,-0.540325}, + {0.604115,0.960306}, + {-0.762464,0.255581}, + {-0.145291,-0.151457}, + {0.539461,0.564589}, + {0.452901,-0.644154}, + {-0.121667,0.123363}, + {0.172408,0.943437}, + {0.349217,-0.431470}, + {0.193653,-0.286326}, + {0.373892,-0.225571}, + {-0.469563,-0.051636}, + {0.703894,0.076285}, + {-0.342531,-0.919488}, + {-0.093593,0.467140}, + {-0.370503,-0.159512}, + {-0.427136,0.822814}, + {0.484980,0.660569}, + {0.380112,1.642120}, + {0.741086,-1.181946}, + {-0.861984,-0.551848}, + {-0.326551,0.051893}, + {-0.673266,0.128672}, + {0.477538,-0.448337}, + {0.424523,-0.099635}, + {-0.200313,0.300309}, + {-0.319153,-1.021980}, + {-0.640520,-0.659841}, + {-0.189198,0.771204}, + {0.163659,-0.315306}, + {0.756345,0.736886}, + {-0.321533,0.169677}, + {-1.755957,0.206259}, + {-2.116119,1.256344}, + {-0.750604,0.344105}, + {0.267358,-0.320943}, + {1.438068,-0.187643}, + {-0.629031,-0.059064}, + {0.769031,0.174502}, + {0.611810,0.637876}, + {0.509224,1.423682}, + {0.029716,-0.226301}, + {-0.529129,-0.458146}, + {0.588062,0.568816}, + {-0.261343,0.028227}, + {0.000322,-0.506508}, + {-0.454871,-0.212809}, + {-1.170607,0.073436}, + {1.134318,0.212980}, + {-1.039946,1.151672}, + {0.904145,-0.236109}, + {0.572173,-0.222902}, + {0.354798,-0.056846}, + {0.617914,-0.121507}, + {-0.485005,-0.789432}, + {0.555901,1.045454}, + {-0.342510,0.662108}, + {0.477863,0.919492}, + {-0.886891,-0.151806}, + {0.073477,0.660208}, + {-0.836821,-0.492241}, + {0.868206,0.057640}, + {-0.278170,-0.344302}, + {1.740416,0.163213}, + {0.710730,0.125488}, + {0.283223,0.313698}, + {0.549759,-0.103777}, + {0.979863,0.559804}, + {-0.290891,-0.894974}, + {0.187074,-1.035208}, + {0.722918,-1.398915}, + {-0.581228,0.581626}, + {0.289505,-0.332083}, + {0.489170,-0.566258}, + {-0.889190,-0.521928}, + {-0.262424,0.143982}, + {-1.279355,-0.724648}, + {0.257297,0.851178}, + {-0.306166,-0.469346}, + {0.045235,-0.453040}, + {0.285296,0.528722}, + {-0.568471,-0.086437}, + {-0.449844,0.791630}, + {0.440313,0.203210}, + {-0.715834,0.084234}, + {-0.535316,-0.471520}, + {0.545214,0.542797}, + {0.858170,-0.392007}, + {0.459011,0.277321}, + {0.630900,0.621847}, + {-0.661226,-1.433006}, + {0.657691,-0.355625}, + {-0.083747,0.737402}, + {-0.427198,-0.957863}, + {-0.194041,1.158089}, + {-0.546119,-0.629835}, + {1.668000,1.040309}, + {-0.407113,-1.748223}, + {0.586268,0.131234}, + {0.824612,0.043758}, + {0.077720,0.434675}, + {-0.878529,0.066930}, + {-0.910217,-0.770628}, + {-0.399495,0.223856}, + {-0.776131,0.072596}, + {0.968979,-0.378461}, + {-0.788724,-0.419890}, + {-0.717876,-0.129177}, + {0.649467,-0.543748}, + {-0.083694,-0.154461}, + {0.433057,0.341816}, + {-0.109326,0.473616}, + {-0.306007,0.525211}, + {1.334709,0.792284}, + {0.450165,0.092275}, + {1.269496,-0.283253}, + {-0.987681,0.679147}, + {0.700508,-0.765557}, + {0.020683,0.657076}, + {0.556750,0.196350}, + {-1.036465,0.515704}, + {0.529448,0.036856}, + {-1.108420,-0.332631}, + {-0.792801,-0.226293}, + {-0.806708,-0.100053}, + {-0.810484,-0.306346}, + {-0.181914,-0.053941}, + {-0.967090,0.696498}, + {1.192545,-0.294435}, + {-0.566689,-1.356403}, + {-0.828942,-0.407377}, + {-0.621438,1.217900}, + {-1.028343,0.521929}, + {1.025599,-0.656932}, + {0.138542,0.489792}, + {-0.202065,1.257500}, + {0.043756,-0.176369}, + {0.685895,-0.249690}, + {0.549922,0.885082}, + {-0.189354,-1.551150}, + {-1.118100,0.020367}, + {0.474848,1.184561}, + {-0.050645,1.195300}, + {0.867725,-0.380298}, + {1.033550,0.154888}, + {-0.477175,-0.457725}, + {1.148061,0.585421}, + {0.380830,-0.754913}, + {-0.106258,0.080392}, + {-0.092959,-0.386023}, + {-0.358937,-0.724895}, + {-1.374994,1.067211}, + {0.460321,0.527363}, + {-1.238789,-0.089993}, + {1.464682,0.876127}, + {-1.234731,1.128579}, + {0.724792,-0.450972}, + {-1.521916,0.809717}, + {-0.388497,-0.174976}, + {0.086236,0.748876}, + {1.100546,-0.528230}, + {0.226367,0.697463}, + {0.744283,1.254010}, + {-0.249234,-0.694237}, + {0.167903,0.298213}, + {-0.228874,-0.560931}, + {0.394532,0.449698}, + {-0.344909,-0.227098}, + {-0.415043,-1.065131}, + {0.126645,1.162114}, + {1.370732,-0.619147}, + {0.823699,-0.552124}, + {0.345714,-0.232139}, + {0.894510,-0.203477}, + {0.475686,-1.010735}, + {0.661874,0.478840}, + {-0.521820,-0.526937}, + {1.314386,0.651335}, + {-0.319251,-0.196685}, + {-0.505632,0.967049}, + {0.590235,0.712258}, + {1.380347,1.137978}, + {0.152855,-0.242439}, + {0.291709,-0.255131}, + {1.260959,-0.491270}, + {-1.089113,-0.159145}, + {0.435095,-0.676862}, + {-0.340494,0.469703}, + {1.302442,-0.532868}, + {-0.378602,-0.400420}, + {0.925227,-0.607976}, + {0.251869,0.591035}, + {-0.646873,-0.636483}, + {-0.328268,-0.897893}, + {1.089412,-0.159031}, + {0.814358,2.220698}, + {0.772924,-0.691036}, + {-0.784735,1.137714}, + {-0.042070,-0.600536}, + {0.592465,-0.209877}, + {0.769297,1.296465}, + {0.448652,-0.198575}, + {0.025998,0.141744}, + {0.485850,-1.270583}, + {-0.846149,-0.038597}, + {-0.277242,-0.731952}, + {0.198053,-1.496392}, + {-0.073055,0.046129}, + {0.574797,-1.238401}, + {0.133512,0.156586}, + {0.105417,1.088396}, + {0.143785,0.480135}, + {0.306526,-0.884781}, + {0.722423,-0.916666}, + {-0.657561,0.272999}, + {-0.557441,1.138685}, + {-0.782249,-1.293763}, + {0.453444,0.532557}, + {1.013185,-0.405740}, + {-0.094466,0.752667}, + {1.286455,-0.593367}, + {-0.298950,0.306095}, + {1.181346,0.559262}, + {0.461658,-0.639042}, + {-1.291839,-0.121779}, + {-0.326193,0.113747}, + {-1.154270,-0.089857}, + {-0.351472,-1.491822}, + {0.720080,-0.419379}, + {-0.672820,0.094205}, + {0.812964,-0.064953}, + {-1.294077,1.076364}, + {-0.133796,-0.745281}, + {-0.393393,0.385628}, + {-0.602521,-0.377900}, + {0.528132,-0.164217}, + {0.505215,-0.104243}, + {0.765574,0.926339}, + {2.024634,-0.477364}, + {0.017166,0.179716}, + {0.399008,-1.200177}, + {-1.090208,0.311701}, + {-0.158439,-0.916668}, + {1.058774,0.191072}, + {-0.464662,-0.983746}, + {0.540500,-0.331676}, + {0.139759,-0.346498}, + {-0.331954,0.206804}, + {-0.956494,0.357149}, + {-0.944290,-0.414694}, + {1.172465,-0.536726}, + {-0.541046,0.365657}, + {0.276923,1.402963}, + {-0.242318,0.269377}, + {0.965338,-0.785207}, + {-0.718256,-0.028312}, + {0.231175,0.665614}, + {-0.947264,-0.913082}, + {-0.501002,1.094529}, + {0.352224,-0.272040}, + {0.397494,0.185641}, + {-0.151725,0.717844}, + {0.839893,0.459279}, + {0.801901,-0.313492}, + {-0.684958,0.226865}, + {-0.212219,-0.213841}, + {0.892238,-0.435760}, + {1.314788,-0.271844}, + {0.836362,0.043882}, + {-0.957485,-0.948085}, + {1.079672,0.119647}, + {-0.513333,0.529166}, + {0.438430,-0.923301}, + {0.175442,-0.539418}, + {-0.003292,-0.268481}, + {-0.438336,0.598716}, + {0.174795,0.663858}, + {0.409033,1.094613}, + {0.766143,0.882464}, + {0.116399,0.720590}, + {-0.563363,0.971493}, + {-1.542577,0.365604}, + {0.514771,-0.458050}, + {-0.346020,0.184177}, + {-1.029390,0.631160}, + {0.916323,0.569872}, + {0.330674,-0.403426}, + {-0.815112,0.338683}, + {-0.233795,-0.536290}, + {-0.156529,-1.368641}, + {-0.263744,0.144793}, + {0.546089,0.239988}, + {-0.176949,-0.463405}, + {-0.369226,-1.044596}, + {-0.505317,-0.388794}, + {-0.451340,0.812733}, + {0.325007,0.206856}, + {-0.810237,-1.085805}, + {0.165055,0.996302}, + {-0.931375,0.613591}, + {-0.126483,-0.744854}, + {0.397855,0.364294}, + {0.287751,-0.500914}, + {-0.053719,0.982818}, + {-0.553468,0.292330}, + {0.179430,-0.597617}, + {-1.198685,-0.800000}, + {1.186764,-0.992792}, + {0.724964,0.103448}, + {0.963127,0.232599}, + {0.092029,0.364811}, + {0.023554,0.358368}, + {-0.156919,-0.181441}, + {0.186716,0.206933}, + {0.533803,-0.467186}, + {-0.459122,0.140642}, + {0.994366,-0.893881}, + {0.452242,0.282844}, + {-1.757045,-0.228025}, + {0.966083,-0.036048}, + {-0.134917,-0.207168}, + {0.124213,-0.129237}, + {-0.080806,-0.024992}, + {-0.799884,-0.669277}, + {-0.620681,-0.397588}, + {-0.352503,-0.044189}, + {0.092370,0.364939}, + {0.449970,1.026360}, + {0.529612,0.063033}, + {-1.083693,-0.194379}, + {0.369823,-0.277191}, + {-0.177423,-0.619947}, + {0.562466,1.467675}, + {-0.573227,0.920231}, + {0.552988,-0.530708}, + {0.844829,-1.136412}, + {0.558908,0.169169}, + {0.626978,-0.115006}, + {0.351068,-0.464366}, + {-0.762156,-0.066833}, + {-0.117971,0.052717}, + {-0.570717,0.761831}, + {-0.514255,0.164156}, + {0.013305,-0.055138}, + {-0.245547,0.642430}, + {0.216396,0.005143}, + {-0.507045,-0.685026}, + {1.118325,0.364330}, + {-0.590687,-0.140389}, + {0.013596,0.844098}, + {-0.399225,0.716323}, + {-0.417137,-0.565919}, + {0.092852,0.416915}, + {-0.943451,-0.152195}, + {-1.020240,0.801126}, + {-0.611728,0.436773}, + {-0.019905,-1.332957}, + {-0.690646,-0.464269}, + {0.907830,-0.494683}, + {-0.281882,-0.749796}, + {-1.546127,-1.007659}, + {0.830144,-0.015166}, + {-0.390510,-1.043779}, + {0.117684,-0.482510}, + {0.924184,1.260658}, + {-1.061867,1.221469}, + {-0.815122,-0.023800}, + {-0.103022,0.298058}, + {-0.252904,0.230901}, + {0.021567,-0.875517}, + {0.248461,0.093681}, + {0.264196,0.004397}, + {-0.311626,-0.620671}, + {0.280419,0.771652}, + {-0.018466,0.219481}, + {1.700853,-0.112003}, + {-0.882344,0.018746}, + {-0.006374,0.087725}, + {-0.100868,0.209463}, + {0.512129,0.523700}, + {-0.317199,0.307879}, + {0.294301,-0.330502}, + {0.601020,-0.125700}, + {-0.739890,-0.023356}, + {-1.444838,0.568493}, + {-0.134116,-0.671218}, + {1.005881,0.367029}, + {-0.738930,0.646782}, + {-0.342683,-0.504731}, + {0.716899,-0.539596}, + {0.738524,0.070291}, + {0.386202,0.440067}, + {1.345032,0.180183}, + {-0.018880,-0.031769}, + {-0.378806,-0.171766}, + {-0.286278,-0.617444}, + {-0.080975,-0.526326}, + {0.700062,-0.604598}, + {-0.885363,0.470310}, + {-1.156147,-0.054617}, + {0.133744,-0.226376}, + {-0.240292,-1.157249}, + {0.063137,-0.793579}, + {0.030749,-0.302199}, + {0.090525,0.483558}, + {0.073085,-0.481644}, + {-0.223842,-2.140667}, + {0.031752,0.005003}, + {1.231275,-0.530212}, + {1.038917,-0.422673}, + {0.394114,0.524978}, + {-1.097829,0.484170}, + {0.431677,0.251181}, + {1.225130,-0.837454}, + {-0.186695,1.110229}, + {0.338671,0.141820}, + {-0.023210,1.021750}, + {0.990528,-1.624820}, + {0.011025,-0.247794}, + {-0.339063,0.407060}, + {0.384226,0.510580}, + {-0.757315,-0.246458}, + {-1.582920,0.107500}, + {-1.012034,0.035645}, + {1.968999,0.055935}, + {-1.424400,-1.006629}, + {-0.381551,-0.428135}, + {0.437026,0.843355}, + {0.179125,0.109344}, + {-0.449217,1.913849}, + {0.427694,-0.425086}, + {-0.211741,-0.700567}, + {-0.188227,-0.847564}, + {-0.594710,1.483595}, + {-0.072411,0.766453}, + {1.150670,0.617209}, + {-0.386818,-0.026636}, + {-0.385528,-1.273407}, + {-0.361319,0.734053}, + {0.098469,-0.126693}, + {-1.389158,1.163252}, + {-0.460623,0.471711}, + {0.338909,-0.460817}, + {0.130190,0.607843}, + {0.207546,0.467445}, + {-0.587233,-0.598555}, + {0.608060,0.186716}, + {1.153664,0.245205}, + {0.328400,0.759055}, + {-0.694971,0.220107}, + {-0.338761,-1.561954}, + {-0.594066,-0.121286}, + {-0.422942,-0.435408}, + {-0.514954,-0.135974}, + {-0.685185,0.540584}, + {-0.824955,1.303292}, + {0.226211,-0.342887}, + {-0.598595,-1.523227}, + {0.678569,0.475931}, + {0.630242,0.483559}, + {-0.620338,0.518139}, + {0.919177,-0.181962}, + {0.507928,-0.566914}, + {-0.488096,0.812728}, + {-0.364813,0.705453}, + {-1.369744,0.240855}, + {0.714938,-0.709527}, + {0.582868,0.091790}, + {-0.180208,0.726072}, + {0.452558,0.415231}, + {0.495553,-1.877462}, + {0.582132,-0.333465}, + {0.833380,-0.489799}, + {0.267983,0.623820}, + {-1.556596,0.244596}, + {0.566314,0.288588}, + {-0.067564,1.023165}, + {0.505347,0.922345}, + {-0.470138,-0.951912}, + {0.660978,0.761539}, + {0.621641,0.135908}, + {1.400944,0.226884}, + {0.652989,-0.565545}, + {0.237052,-0.192473}, + {0.953481,-0.437290}, + {-0.532917,0.753979}, + {-0.401020,0.182003}, + {-0.774883,0.538031}, + {-0.320697,-0.549711}, + {1.663374,0.724379}, + {0.588294,1.303208}, + {1.044164,-0.361746}, + {-0.145359,-1.690668}, + {-0.825189,1.215719}, + {-1.088180,-0.300943}, + {-0.430774,0.622501}, + {0.316668,0.544425}, + {0.504829,-0.457687}, + {-0.834387,-0.240484}, + {-0.306896,0.687505}, + {0.268810,1.644408}, + {-0.780049,1.087894}, + {-1.538673,-0.201769}, + {0.535403,0.605154}, + {0.019388,-0.435640}, + {-0.440314,-0.055865}, + {1.298971,1.128651}, + {0.177042,1.260625}, + {-0.854552,0.621748}, + {-0.677730,0.607538}, + {0.203182,0.219196}, + {1.347539,0.528045}, + {-1.261542,0.367327}, + {-0.137496,0.330269}, + {0.960711,1.133014}, + {0.687000,0.111912}, + {-0.181358,1.091956}, + {0.223343,-0.483492}, + {-0.273860,0.362866}, + {-0.011742,-0.136568}, + {0.275521,-1.429957}, + {-0.273297,-0.074082}, + {0.290409,-0.066311}, + {-0.228273,-0.362296}, + {-1.378862,-0.444713}, + {0.241775,0.546076}, + {0.039962,-0.186289}, + {-0.036983,-0.286490}, + {0.091318,-1.140707}, + {0.511967,-0.298166}, + {-0.103362,0.567148}, + {-1.507135,-0.446682}, + {-0.002256,-0.382378}, + {0.793055,0.713325}, + {0.519248,-0.273429}, + {0.373212,1.206027}, + {-0.186569,0.345384}, + {-1.037811,0.160379}, + {0.100911,0.728662}, + {0.348187,1.397238}, + {1.053003,0.787660}, + {0.851118,-0.072377}, + {0.885419,-2.014642}, + {0.224168,-0.873868}, + {0.866546,-1.231568}, + {-0.196727,0.530071}, + {-0.510674,-0.434893}, + {0.256375,-0.296321}, + {1.333570,1.516369}, + {0.216969,1.545445}, + {0.164709,0.254986}, + {0.100115,-0.605479}, + {0.086380,0.234960}, + {0.907601,-0.649032}, + {-1.199984,0.075438}, + {1.186217,-0.332770}, + {-0.270511,-1.202410}, + {0.826974,0.035252}, + {0.331603,-0.037377}, + {0.476641,0.109902}, + {-0.174187,-0.546405}, + {0.159829,-0.563128}, + {-0.251076,-0.337193}, + {0.587231,0.086443}, + {-0.004139,-0.062337}, + {0.847037,-1.213560}, + {0.720797,-0.302577}, + {-0.313615,1.223469}, + {-0.385838,0.548932}, + {-0.681006,0.375296}, + {-0.002250,-0.626297}, + {0.044566,-0.714328}, + {-0.785516,0.625881}, + {1.008274,-0.326630}, + {-0.475841,0.809907}, + {-0.189279,-0.144121}, + {-0.147481,-0.167430}, + {0.297717,-0.662249}, + {0.903221,-0.828173}, + {-0.076715,-0.103500}, + {-0.220609,0.037787}, + {0.500891,0.420473}, + {0.273765,-1.134860}, + {0.469416,-0.299483}, + {0.490976,0.584688}, + {0.840863,0.462752}, + {-0.374205,-0.498565}, + {0.970595,1.606044}, + {0.351297,0.387913}, + {-1.301970,1.173260}, + {0.132588,1.491314}, + {-1.181621,-0.261585}, + {-1.361050,0.972321}, + {-0.153063,-1.707550}, + {0.758497,0.123412}, + {0.238820,0.155025}, + {-0.254726,0.301346}, + {-1.010450,1.160231}, + {-1.240972,0.287896}, + {0.784458,-0.105589}, + {-0.536336,-0.405889}, + {-0.146211,0.253732}, + {-0.878979,0.549278}, + {0.065870,-0.198147}, + {-0.954775,1.043484}, + {0.557617,1.047797}, + {0.493106,-0.919198}, + {-0.170124,0.314583}, + {0.688442,0.122648}, + {-1.023681,-0.111431}, + {0.801745,-1.821817}, + {-0.723679,0.440206}, + {-0.453669,-0.190110}, + {-0.581141,0.078254}, + {-0.941791,-0.060551}, + {0.890659,0.122601}, + {0.963847,0.066347}, + {0.759853,-0.199802}, + {-0.106224,0.458618}, + {1.065279,0.399051}, + {-0.321525,0.808861}, + {-1.208707,0.585097}, + {0.866323,-0.559539}, + {0.474646,0.039294}, + {1.902251,0.915424}, + {-0.455613,-0.414985}, + {-0.246282,-0.640345}, + {-0.333131,0.196717}, + {-0.493399,-0.772411}, + {0.204786,-0.870497}, + {0.309500,-0.533279}, + {0.910107,0.510703}, + {-0.056168,-0.123584}, + {-0.491468,-0.572133}, + {0.375774,1.162053}, + {0.063430,1.272410}, + {-1.406177,-0.010975}, + {-0.087637,-0.226010}, + {-0.563296,0.452261}, + {-0.449694,-0.554259}, + {0.707040,0.188047}, + {1.601323,-0.206911}, + {-0.923501,0.574700}, + {-0.966020,0.679890}, + {0.268570,0.368709}, + {0.212696,-0.904453}, + {0.194974,0.488184}, + {0.470565,0.918929}, + {-0.684581,-0.142648}, + {-0.844954,-0.189146}, + {-0.542152,-0.747252}, + {0.495473,0.403557}, + {-0.688008,-0.913830}, + {-0.059830,0.517971}, + {-2.171862,1.024477}, + {-1.249624,-0.015772}, + {0.015926,0.734811}, + {0.457707,-0.081584}, + {-0.009916,-0.098752}, + {0.810571,-0.772556}, + {1.274648,0.151342}, + {1.083434,-0.643550}, + {1.044509,0.338194}, + {-0.378948,0.039118}, + {-0.075820,-1.730294}, + {0.774083,0.620047}, + {-0.066915,-1.689347}, + {0.731451,-0.094387}, + {0.259309,-0.417934}, + {-0.498563,0.708930}, + {0.774393,1.168883}, + {-0.172278,-0.053409}, + {-0.293542,-0.414288}, + {1.373904,0.468393}, + {-0.086211,0.448331}, + {0.141485,-0.030337}, + {-0.107671,0.406149}, + {0.098529,0.748433}, + {-0.267386,-0.031872}, + {-0.748722,-0.653857}, + {0.004819,0.286587}, + {0.320934,0.502389}, + {0.434680,0.257350}, + {0.042256,-0.018636}, + {-0.305369,0.076753}, + {-0.205572,-0.818070}, + {0.936762,0.858510}, + {-0.423207,0.799304}, + {0.072296,0.374763}, + {-0.156480,-0.604657}, + {-0.968287,0.266390}, + {1.115752,-0.133177}, + {0.666615,-0.815890}, + {0.472277,0.132071}, + {-0.193603,0.875236}, + {0.318294,-0.031684}, + {1.004666,-0.833170}, + {0.262337,-0.253264}, + {0.691983,2.042454}, + {0.209886,-0.290278}, + {0.278291,1.124044}, + {-0.207172,1.567355}, + {0.238977,-0.323462}, + {-0.223252,-0.119456}, + {0.303814,1.004795}, + {1.200940,0.213197}, + {-0.687440,-1.084798}, + {-0.198295,0.195513}, + {0.046763,0.521581}, + {-0.510831,-0.423679}, + {0.244499,-0.628926}, + {0.698044,-0.623503}, + {0.416896,-0.041211}, + {-0.350345,-0.226075}, + {0.695417,0.604628}, + {-0.383804,0.383435}, + {0.086188,-0.192144}, + {0.781463,-1.146905}, + {0.098847,-0.660911}, + {-0.335006,0.419788}, + {1.122026,-0.064158}, + {0.384520,-0.618539}, + {0.479143,-1.027819}, + {1.107169,-0.524087}, + {0.383901,-0.402677}, + {0.194053,0.255903}, + {0.477393,0.074827}, + {-0.410776,-0.444651}, + {-1.991022,-0.394045}, + {0.216143,-0.334173}, + {-0.563452,0.819894}, + {-0.311190,0.640443}, + {-0.243058,0.560057}, + {-0.546188,-0.070783}, + {-0.615962,0.363862}, + {0.240774,0.912485}, + {0.219238,-0.849157}, + {-0.885919,-1.007370}, + {0.190039,0.543608}, + {1.070954,0.179088}, + {0.554915,-0.018668}, + {1.371742,-0.335006}, + {-0.645975,0.229713}, + {-0.736469,0.669922}, + {0.001929,-0.033222}, + {0.701460,-0.205447}, + {0.486977,0.824796}, + {1.258540,-0.391141}, + {-0.036946,0.293066}, + {0.670274,-0.247172}, + {-1.768643,0.859413}, + {0.290706,-0.231858}, + {-0.102970,-0.041794}, + {-0.418989,-0.849960}, + {0.098567,0.921322}, + {-0.459667,-0.893404}, + {-0.804486,1.022065}, + {-0.978005,-1.097316}, + {0.774600,-0.328074}, + {-0.242046,0.003126}, + {-0.056869,-0.164227}, + {-0.521315,0.145929}, + {0.311763,-0.783776}, + {0.116789,0.376795}, + {0.518519,-0.236313}, + {0.134501,-1.013336}, + {-1.199793,-0.823016}, + {0.122597,0.539057}, + {0.664613,0.256397}, + {-0.316770,0.490154}, + {-1.263702,-0.252355}, + {0.550430,0.282031}, + {1.070783,-0.094371}, + {0.587430,-0.613368}, + {0.684523,0.740690}, + {-1.023715,0.345296}, + {0.107663,0.265091}, + {0.215299,-0.153788}, + {-0.342020,-1.389234}, + {1.512062,0.110530}, + {-0.255843,-0.304788}, + {0.344653,0.472651}, + {1.604399,0.282072}, + {-0.123394,-1.073324}, + {0.823059,0.235494}, + {1.005127,-0.422945}, + {1.087857,0.942103}, + {0.388606,0.630055}, + {-0.489398,0.271613}, + {0.662806,-0.072930}, + {-0.505174,-0.083009}, + {-1.099044,-0.087619}, + {1.682942,0.105597}, + {-0.963602,-1.159610}, + {1.770411,-0.665544}, + {0.274943,-0.029549}, + {-0.368023,0.498046}, + {0.382125,0.110398}, + {0.143411,-0.471052}, + {-0.962301,-0.125190}, + {-0.382881,-0.300460}, + {-0.702084,-1.028932}, + {0.609839,-0.269770}, + {-0.322227,-0.046758}, + {0.196679,-0.841992}, + {0.389128,0.554504}, + {-0.138058,-0.153224}, + {0.225274,0.357098}, + {-0.326247,-0.149102}, + {0.189830,2.038718}, + {0.622165,-0.578665}, + {-0.555788,-1.517656}, + {0.223546,-0.956908}, + {0.036102,-0.216316}, + {-0.527827,-0.790654}, + {-0.703457,1.216742}, + {1.896473,0.420610}, + {-0.919048,-1.717801}, + {-0.564716,-0.463391}, + {0.072924,0.515583}, + {1.213858,1.273362}, + {-0.585628,-1.777402}, + {0.315143,0.314280}, + {1.599076,0.263103}, + {0.551870,-0.508782}, + {0.198278,-0.171192}, + {0.370793,0.390001}, + {0.186273,-0.685544}, + {-1.334139,-0.047514}, + {0.859364,1.107470}, + {1.108595,-0.249803}, + {-0.767836,0.024632}, + {-0.755180,0.202525}, + {0.558701,-0.646325}, + {-0.864527,-0.056300}, + {-0.568031,0.020910}, + {-0.192644,-0.239731}, + {0.335820,0.941753}, + {-0.905318,0.078626}, + {1.348554,-0.274217}, + {0.718711,0.937416}, + {0.701784,1.186619}, + {0.783715,0.942788}, + {0.511822,-0.269353}, + {0.262749,0.224861}, + {-0.369690,0.087992}, + {0.119908,0.245625}, + {-0.755046,-0.352329}, + {1.050758,-1.220104}, + {1.112945,-0.869696}, + {0.154116,-0.398725}, + {-0.682546,-0.178220}, + {0.000616,-1.176764}, + {0.582237,-0.360093}, + {-0.048804,-0.182963}, + {0.343632,-1.302243}, + {-0.059123,1.169904}, + {-0.849233,0.417740}, + {0.802972,0.824939}, + {-0.259347,1.401916}, + {0.262680,1.027712}, + {0.119396,0.842189}, + {0.789537,0.288341}, + {0.873023,-0.678867}, + {-0.282999,-0.803959}, + {0.032434,-0.332495}, + {0.362466,-0.869451}, + {1.303907,-0.351392}, + {-0.261026,-0.184508}, + {0.069724,0.222538}, + {-1.692123,-0.176506}, + {0.182023,-0.297168}, + {1.166731,0.974402}, + {0.182690,0.901593}, + {-2.707181,0.294289}, + {-0.422655,0.616411}, + {0.818191,-0.536655}, + {0.200265,-0.152867}, + {-0.571663,-0.576991}, + {-1.149922,0.237294}, + {0.683474,0.514764}, + {-0.327411,-0.298380}, + {0.543399,1.134105}, + {0.221413,-0.885642}, + {1.120697,-0.024074}, + {-0.727365,0.561341}, + {-0.060173,-0.140444}, + {0.010505,-0.532622}, + {0.085622,0.854726}, + {0.776915,0.627544}, + {-0.480372,1.612013}, + {0.035874,0.948871}, + {-0.202889,0.071192}, + {1.071655,0.563884}, + {-0.856493,0.157759}, + {1.465912,0.740984}, + {-0.975957,0.149083}, + {0.017006,0.661242}, + {0.677641,0.736448}, + {-0.055937,1.619199}, + {0.017620,0.501037}, + {-0.329608,-0.642669}, + {0.460941,-0.086157}, + {-0.677150,-0.999700}, + {1.085090,0.487071}, + {0.766686,0.736476}, + {0.245465,-0.602065}, + {0.259054,-0.926270}, + {0.241794,0.493962}, + {0.213145,-0.717582}, + {-0.164479,1.252053}, + {1.520899,0.765972}, + {-0.262001,-0.514990}, + {0.394009,0.530819}, + {-0.398782,0.610431}, + {0.061806,-0.058270}, + {0.630771,1.025669}, + {-0.235617,0.164118}, + {-0.497122,0.651216}, + {0.906863,0.812694}, + {0.942602,0.037286}, + {0.353956,-0.268639}, + {0.721879,-1.407883}, + {0.336154,-1.490511}, + {0.463325,-0.409685}, + {-0.654404,0.164448}, + {1.353668,-1.381831}, + {0.902985,1.291975}, + {-0.673638,1.082945}, + {0.096381,0.069481}, + {0.268580,-0.006480}, + {0.351301,0.210100}, + {-0.111290,0.763114}, + {0.482922,0.206619}, + {0.265563,0.454462}, + {-1.242255,-1.027363}, + {-1.082879,0.470826}, + {0.192528,-1.507715}, + {-1.393900,0.462004}, + {-0.328719,0.813496}, + {0.736296,0.834899}, + {0.401170,-0.096215}, + {0.570525,-0.070442}, + {-0.633878,-0.590925}, + {0.147991,0.069756}, + {0.368475,0.553471}, + {-0.936644,-0.634945}, + {-0.209835,0.061014}, + {0.376984,0.415601}, + {-0.053992,0.927934}, + {-0.664815,-0.230709}, + {-0.368558,-0.869841}, + {0.869019,0.207397}, + {-0.077032,0.015291}, + {-1.041657,-1.084937}, + {-0.040849,-1.191117}, + {-0.040502,-0.637029}, + {-0.113547,-0.036059}, + {-0.376653,0.011245}, + {-0.611166,-0.722246}, + {-0.252785,0.199909}, + {-0.554396,-0.777145}, + {1.508706,1.960357}, + {0.802878,-1.058245}, + {-0.668372,-0.380450}, + {0.934698,0.328675}, + {-0.484190,-0.777490}, + {-1.096700,-0.599480}, + {0.133311,-0.708274}, + {-0.037022,-0.697705}, + {-0.094335,-0.104415}, + {0.578229,-0.473142}, + {0.521239,0.402009}, + {-0.601727,-0.589783}, + {1.068671,-0.802095}, + {-0.179212,0.761986}, + {-0.098283,-0.660154}, + {-1.325546,0.733457}, + {1.204701,0.635880}, + {0.071453,0.547081}, + {0.116252,0.809687}, + {-0.289209,-0.786678}, + {0.060218,-0.093927}, + {1.040621,0.201639}, + {0.663944,-1.404113}, + {0.323341,0.022382}, + {-1.173198,1.186145}, + {0.631958,0.811309}, + {0.140914,-0.812980}, + {0.918574,-0.388552}, + {0.137629,0.245151}, + {0.286895,-1.006635}, + {-0.883709,0.464159}, + {1.149660,0.500635}, + {0.869576,-0.471720}, + {0.820353,0.381747}, + {-0.764649,-0.632796}, + {-1.436934,-0.113737}, + {-2.086755,0.084057}, + {1.010455,-0.246709}, + {-0.149211,-1.532015}, + {0.496285,0.442942}, + {0.101726,-0.696911}, + {0.536346,-0.055237}, + {-1.001254,-0.165978}, + {0.527046,1.269435}, + {0.251018,-0.408625}, + {-0.398318,1.683260}, + {-0.838820,-0.091386}, + {1.301904,1.505187}, + {0.156433,-0.483412}, + {-0.888996,-0.920372}, + {1.318649,0.539760}, + {0.608943,1.036337}, + {-0.290264,-1.659074}, + {-0.100778,0.034840}, + {-0.597380,-0.927067}, + {2.662626,-0.397478}, + {1.115005,-0.106991}, + {0.838668,-0.032934}, + {-0.046413,0.184593}, + {0.262956,-0.070027}, + {0.126185,1.919012}, + {-0.267772,-0.664473}, + {0.614649,0.179683}, + {-0.527418,0.106321}, + {-0.240424,1.418708}, + {-0.112591,-0.348458}, + {1.337480,-0.026564}, + {-0.112471,0.124444}, + {-0.491147,0.252096}, + {-0.291925,-0.069114}, + {0.572380,0.425877}, + {0.216700,0.480072}, + {0.002923,-0.590032}, + {-0.221473,0.797032}, + {-0.450239,-0.109167}, + {-0.138495,0.363282}, + {0.536702,0.942890}, + {-0.385188,-0.255577}, + {-0.195874,-0.396227}, + {-0.149959,-0.045442}, + {0.175505,0.639732}, + {-0.871016,0.558898}, + {-0.166986,0.487026}, + {0.015097,0.188443}, + {1.593731,-0.064295}, + {-1.302004,1.334270}, + {0.647612,0.649894}, + {-0.466297,-1.438770}, + {-0.082164,-0.271981}, + {-0.369005,0.109265}, + {0.012960,1.067369}, + {0.008171,-0.522336}, + {1.072758,0.533772}, + {0.010905,-0.615835}, + {-0.267041,0.338341}, + {-0.163231,-0.172623}, + {-0.298143,-0.844671}, + {-0.996324,0.395993}, + {0.351228,0.210237}, + {-0.408737,1.852449}, + {1.371179,-0.270106}, + {0.698624,-0.186227}, + {0.764440,-1.018351}, + {-0.417185,-0.489324}, + {-0.254638,-0.780647}, + {-0.589837,-1.171805}, + {1.132576,-0.812185}, + {0.071797,0.075910}, + {-0.142160,-0.205967}, + {-0.131813,-1.570445}, + {-0.646197,-0.501273}, + {-0.343572,-0.550584}, + {-0.384814,0.182407}, + {1.396442,-0.058372}, + {1.089823,0.806014}, + {0.613392,0.111495}, + {-0.619374,-0.997811}, + {0.937457,0.236635}, + {-1.783063,-0.017353}, + {0.639293,1.721414}, + {-0.973684,-0.595704}, + {0.588127,2.077128}, + {-0.508637,0.421534}, + {-0.204767,-0.116534}, + {-0.925742,-0.808087}, + {-0.247853,0.383247}, + {0.122339,-0.377588}, + {-0.245016,1.239323}, + {-1.251013,1.414176}, + {-0.595604,0.183438}, + {0.165761,0.973419}, + {-0.360977,0.533837}, + {-0.156010,1.266329}, + {-0.361477,-0.706989}, + {-1.278243,-0.570395}, + {0.188787,-0.241089}, + {0.695269,-0.016308}, + {0.336792,1.128790}, + {-0.195083,-0.486791}, + {0.435703,-1.218875}, + {-0.892865,0.992856}, + {-0.503019,-0.799460}, + {0.305161,-0.872681}, + {0.824504,0.670722}, + {-0.057163,-0.737607}, + {-0.459377,-0.426213}, + {0.661363,-0.123470}, + {0.291500,-0.574575}, + {0.736858,-0.048679}, + {-1.798391,-0.674830}, + {-1.124265,-0.210419}, + {0.305464,0.240427}, + {0.660762,0.390722}, + {-2.191616,-0.299109}, + {0.764942,-0.333123}, + {-0.766828,-0.575533}, + {0.609647,-0.179405}, + {0.010595,-0.673221}, + {0.496617,0.041268}, + {0.961196,-0.055449}, + {-0.225309,0.834606}, + {1.114384,-0.055796}, + {-0.222813,-0.099848}, + {-0.120519,0.033593}, + {1.015066,-0.116109}, + {-0.906373,0.667821}, + {-1.147539,-1.158675}, + {-0.339648,-0.873359}, + {-0.489429,-0.652974}, + {-0.607693,0.915098}, + {-0.739589,-0.880921}, + {-0.519588,0.827766}, + {0.166684,-0.028429}, + {-0.621222,-0.143460}, + {0.186200,-0.213188}, + {-0.815053,-0.375461}, + {0.459186,0.134372}, + {0.218895,0.177810}, + {0.028394,-0.083888}, + {-0.673259,-0.245137}, + {1.213576,-0.494994}, + {-0.504661,1.291076}, + {0.485929,0.212768}, + {-0.050601,1.330620}, + {-0.127089,1.121260}, + {-0.062864,1.184358}, + {0.388036,0.065984}, + {0.639649,0.940623}, + {0.345500,-0.926372}, + {0.294821,0.080969}, + {-0.675096,0.401880}, + {-0.457889,-1.034898}, + {0.546379,-0.123306}, + {1.925229,0.617684}, + {0.036275,0.153092}, + {0.438382,-0.367055}, + {-1.510804,-0.350652}, + {0.511549,0.357008}, + {0.058650,-0.056035}, + {0.426843,0.291233}, + {0.647381,1.340631}, + {-0.459728,0.946206}, + {-0.626630,0.024277}, + {-0.023095,-0.808970}, + {0.409768,-1.094577}, + {-0.364498,0.100205}, + {0.584196,-0.029047}, + {-1.299973,-1.205881}, + {-1.467178,1.165527}, + {0.651701,-0.056131}, + {0.591321,0.585146}, + {1.050908,-0.864838}, + {-1.010467,0.869663}, + {0.286195,0.382027}, + {-0.407370,0.606735}, + {0.731817,-0.248191}, + {0.594029,0.949877}, + {1.107643,0.816630}, + {0.112756,-0.800629}, + {-0.936598,-0.635692}, + {0.320902,-1.154471}, + {0.362662,0.687527}, + {-0.772593,-0.345974}, + {-0.301668,-0.298240}, + {-0.317592,1.336231}, + {-0.396778,-0.334856}, + {-0.506675,-0.312185}, + {-1.281432,0.149600}, + {0.401639,-0.418585}, + {0.782846,0.722927}, + {0.344150,0.854286}, + {-0.014517,0.567740}, + {0.108356,0.024531}, + {0.902085,-0.055156}, + {0.826237,-0.713395}, + {0.244866,0.044681}, + {-0.176188,0.891915}, + {-0.420097,-0.253119}, + {0.417268,0.290663}, + {0.163310,-0.245311}, + {-0.182683,-0.297175}, + {0.631826,-0.030011}, + {-0.109512,-0.088560}, + {1.429108,0.225297}, + {0.155576,0.083817}, + {1.613520,0.239461}, + {0.127288,-0.420358}, + {0.477950,0.504352}, + {1.328754,-0.163013}, + {-0.568880,-0.751232}, + {-0.482506,-1.538834}, + {-0.059557,0.412963}, + {0.350223,-0.360451}, + {0.833328,1.009992}, + {-0.066145,-0.506290}, + {-1.529181,0.414709}, + {1.240990,0.206763}, + {-1.129462,0.769895}, + {-0.481806,0.484887}, + {0.595993,0.725062}, + {-0.285575,1.347548}, + {2.330541,-0.013789}, + {-1.797866,0.257308}, + {0.905498,0.146234}, + {-0.319323,-1.413330}, + {-0.175398,-1.142782}, + {-0.862556,0.482210}, + {0.223448,0.729414}, + {0.578396,-0.016839}, + {-0.318659,-0.617867}, + {0.157744,0.530414}, + {0.123166,-0.362401}, + {1.806366,0.187194}, + {0.141849,0.128567}, + {0.233317,0.139137}, + {-0.195036,-0.613837}, + {1.714962,1.593262}, + {-0.732866,-0.038927}, + {0.307565,-0.920340}, + {0.373395,-0.516143}, + {0.826920,-0.612844}, + {-0.388779,-0.390229}, + {-0.862877,0.788258}, + {0.495550,0.670739}, + {-0.545650,0.635220}, + {-0.230298,0.414062}, + {-0.719266,-0.811359}, + {-0.999942,1.684412}, + {0.527479,0.543823}, + {-0.743616,0.101886}, + {-0.199070,0.115074}, + {-0.870949,0.256787}, + {0.142208,0.122864}, + {1.178514,-0.092691}, + {0.516611,0.664212}, + {-0.414682,1.125980}, + {0.378510,-0.100979}, + {0.283304,-0.277420}, + {-0.208157,-0.202171}, + {-0.440988,-0.820237}, + {1.298009,-0.850293}, + {0.779159,-0.461672}, + {0.149934,1.508017}, + {0.095404,-0.092000}, + {-0.337095,-0.317412}, + {-0.629736,-0.111690}, + {-0.399381,0.078341}, + {-0.479442,-0.187099}, + {-0.760090,0.125670}, + {-0.610029,-0.278563}, + {0.649156,0.494456}, + {-0.672965,0.631743}, + {-0.016562,0.306273}, + {-0.609100,0.137436}, + {0.652638,1.047158}, + {0.026014,-0.348532}, + {0.423324,-0.479491}, + {-0.383879,0.485369}, + {-0.598911,-0.835369}, + {0.115294,-0.571799}, + {-0.125615,0.202125}, + {-0.909276,-0.587717}, + {-0.727220,0.093925}, + {-0.134042,-0.601821}, + {-0.187468,-0.669988}, + {0.370470,0.393121}, + {-0.691281,0.520446}, + {-0.548105,-0.687475}, + {1.223865,0.276014}, + {-0.770862,-0.529642}, + {-0.147001,-0.466523}, + {-0.573650,0.453058}, + {-0.592723,0.439779}, + {-0.455307,-0.206169}, + {1.320446,0.684046}, + {-0.935463,-0.447754}, + {0.703593,-1.016309}, + {-0.891936,-0.175935}, + {0.328758,-0.396236}, + {0.094338,0.221705}, + {-1.404257,-0.190658}, + {-0.100089,1.039360}, + {-0.966548,0.827384}, + {-1.253737,-1.014768}, + {-0.346418,-1.267854}, + {-0.158700,1.164901}, + {-0.034736,0.009220}, + {0.545952,-0.246464}, + {0.717271,-0.093260}, + {0.676085,-0.863656}, + {0.493132,-0.105922}, + {-0.533072,0.636553}, + {-0.216843,0.884234}, + {0.111424,0.082110}, + {1.028141,0.146957}, + {-0.446215,0.136231}, + {0.730978,-0.275731}, + {0.042365,0.048442}, + {-0.370711,-0.543378}, + {0.106057,1.265886}, + {0.379243,-0.330497}, + {1.108852,-0.723866}, + {-0.110398,0.511860}, + {-0.106902,0.174878}, + {1.148426,-0.603670}, + {-0.128195,0.280598}, + {0.764800,-0.358176}, + {-0.266245,0.816531}, + {0.114914,-0.539096}, + {0.114034,-0.367231}, + {2.141155,-1.484656}, + {-0.724135,-0.856970}, + {0.266306,-0.874060}, + {0.846456,0.435570}, + {0.066472,0.252900}, + {-1.088643,-1.133248}, + {-0.566947,0.767431}, + {0.619468,-0.550164}, + {0.029218,1.459059}, + {1.301080,0.095710}, + {1.753613,-0.553147}, + {1.516418,-0.318869}, + {0.861448,-0.472804}, + {-1.047020,-0.037668}, + {-0.123383,0.272455}, + {-0.124143,1.500702}, + {0.378722,0.458093}, + {-1.369372,-0.010599}, + {-1.027065,0.948843}, + {0.152530,-0.545888}, + {-0.239192,0.716174}, + {0.874709,-1.022073}, + {-0.259942,-0.432089}, + {0.315777,-0.677813}, + {-0.187516,0.604001}, + {-0.350366,-0.868253}, + {0.358178,0.239084}, + {-0.355413,0.043801}, + {-0.114867,0.567550}, + {0.031781,0.301042}, + {-0.447827,-0.086481}, + {0.347362,-0.347636}, + {1.466736,-1.298975}, + {1.198740,-0.131404}, + {1.300932,0.897703}, + {0.490673,-0.229079}, + {-0.330844,-0.232505}, + {0.025943,0.810266}, + {-0.261850,-0.280763}, + {-0.607853,1.415846}, + {0.498158,-1.107135}, + {0.674920,-1.200670}, + {-0.527907,0.318037}, + {-0.097676,0.532536}, + {-0.475594,0.848160}, + {1.642276,-0.891873}, + {-0.019197,-0.109536}, + {0.784795,0.260554}, + {-0.431823,-0.907632}, + {-0.763132,-0.342258}, + {0.570806,-0.517628}, + {-0.522336,0.403684}, + {0.307563,-1.143478}, + {0.825753,0.031997}, + {0.368023,-0.139664}, + {2.021968,-0.943570}, + {0.245160,-0.269865}, + {1.303964,0.871270}, + {-0.453218,0.819811}, + {0.594784,0.655540}, + {-0.891577,-0.373922}, + {0.538908,-0.710190}, + {0.930254,0.481708}, + {0.307017,-0.652410}, + {-0.201791,-0.804746}, + {-0.740248,-0.045989}, + {0.865316,0.507359}, + {0.112008,0.675150}, + {0.390570,-0.737997}, + {0.588187,-0.739911}, + {-0.557253,0.208247}, + {-1.425644,-0.743117}, + {0.400609,-1.036328}, + {0.703460,0.720835}, + {-1.235671,0.360834}, + {0.977538,0.800469}, + {-0.215826,-0.917093}, + {0.464002,-0.108658}, + {-0.170525,1.430161}, + {0.249880,0.881905}, + {0.039538,0.515360}, + {0.589463,1.687736}, + {-0.918504,0.398258}, + {0.885603,-0.419459}, + {-0.103454,0.517781}, + {-1.403384,0.991157}, + {-1.129402,-0.084304}, + {0.631421,-0.053522}, + {1.013885,-0.201949}, + {0.677556,0.891074}, + {0.761542,-0.055830}, + {1.043183,0.841930}, + {0.116780,0.047638}, + {-0.379538,0.850317}, + {0.899566,-1.508949}, + {-0.360145,-0.726620}, + {-0.394237,0.504382}, + {1.299661,-0.904075}, + {0.037135,-1.543567}, + {0.025721,-1.294574}, + {-0.201345,-0.573420}, + {-0.805476,1.100473}, + {-0.222557,0.815637}, + {0.745171,-0.443108}, + {-0.051322,0.385340}, + {0.415288,0.967950}, + {0.567228,0.929748}, + {-0.981482,0.368396}, + {-0.322623,0.925524}, + {0.036004,-1.359715}, + {-1.239654,0.547052}, + {0.569381,0.209552}, + {0.999405,0.435894}, + {0.209398,-0.035708}, + {-0.616545,-1.367319}, + {-0.032505,0.893263}, + {-0.753972,-0.284855}, + {-1.122253,0.694921}, + {0.062416,0.560687}, + {-0.867416,0.682553}, + {-0.093222,0.154366}, + {-0.881648,0.429238}, + {-0.190308,-2.089628}, + {0.066021,0.756615}, + {0.514725,-0.798372}, + {0.053171,-1.408616}, + {0.209844,0.661365}, + {-0.353419,0.830578}, + {0.283011,-0.510899}, + {1.844187,0.067852}, + {0.452893,0.042450}, + {1.522679,0.732928}, + {0.455406,-0.622942}, + {0.434744,-0.877805}, + {0.156233,0.549888}, + {-0.488361,0.683512}, + {-0.709181,-0.074767}, + {1.094457,-1.430172}, + {-1.090533,-1.200256}, + {0.467875,-1.396375}, + {-0.216862,0.998395}, + {0.845417,0.461581}, + {-0.243621,-1.037224}, + {1.009367,-0.804843}, + {-0.733158,-0.634989}, + {-0.317695,0.187141}, + {1.042970,-0.479150}, + {0.574917,-0.396721}, + {-0.753535,0.501924}, + {0.176516,0.011773}, + {-0.252053,-0.567245}, + {0.523082,0.913279}, + {-1.555099,0.401929}, + {-0.437464,0.181542}, + {-0.873226,0.044419}, + {0.219685,1.157821}, + {-0.254417,-1.517094}, + {0.091563,-0.354438}, + {-0.528333,-0.170731}, + {0.995211,0.678314}, + {-0.898812,-0.064997}, + {-0.013840,0.293050}, + {-0.839259,-0.587023}, + {-0.945978,-0.617619}, + {-0.895625,0.302625}, + {1.051869,0.573372}, + {-0.825980,-0.122912}, + {0.163980,1.256745}, + {0.706734,0.124522}, + {-0.361175,0.101887}, + {1.057818,-0.426948}, + {-0.675053,1.031729}, + {0.206726,0.279056}, + {0.389211,-0.301896}, + {1.063765,0.619761}, + {0.352544,0.613860}, + {0.128183,-0.129278}, + {-0.839177,0.102129}, + {-1.009067,0.298734}, + {0.002993,-0.360330}, + {1.224970,-0.160513}, + {1.106708,-0.229533}, + {-1.032136,-0.377685}, + {-0.236230,0.001354}, + {0.410400,0.222334}, + {0.392320,1.483927}, + {0.665122,0.691449}, + {-0.455393,-0.602445}, + {-1.351692,0.738197}, + {-0.766579,0.268302}, + {1.589365,0.864385}, + {0.070446,0.850433}, + {-0.308235,-0.135000}, + {-0.292362,-1.347597}, + {1.555687,-0.715862}, + {-0.014022,-0.045398}, + {-0.446291,1.226295}, + {-1.032951,-0.093507}, + {-0.899258,1.039720}, + {-1.078121,-0.867005}, + {0.520897,0.494706}, + {-0.211998,-0.448273}, + {0.580937,-0.430233}, + {0.179600,0.873513}, + {0.808713,-1.022514}, + {0.555485,0.127189}, + {0.880953,-0.143050}, + {1.149157,0.917433}, + {-0.893810,0.428443}, + {-1.266854,-0.409126}, + {-0.626689,0.378355}, + {-0.164413,-0.184089}, + {-0.898300,0.593376}, + {-0.547055,0.834128}, + {-1.142588,-0.422562}, + {-0.284378,-0.254682}, + {0.791523,-0.756468}, + {0.485108,-0.001937}, + {-1.059758,-0.298921}, + {0.575755,0.321922}, + {0.126469,0.056855}, + {0.481604,-0.118000}, + {-0.161121,-0.348846}, + {-0.018420,0.600699}, + {1.149129,-0.048108}, + {-0.542935,-1.132408}, + {0.615102,0.119735}, + {-0.401196,-0.056096}, + {0.240128,-0.191069}, + {-0.230665,0.650328}, + {-1.043812,0.267771}, + {-0.337422,-1.346232}, + {-1.272762,0.339037}, + {-0.577232,0.042670}, + {-0.024654,1.721493}, + {-0.290755,-0.294420}, + {0.050099,-0.241641}, + {0.523826,-0.443739}, + {1.259578,0.041380}, + {1.203733,-0.585998}, + {0.759313,-0.279728}, + {-0.270898,0.554221}, + {0.319001,0.630204}, + {-1.012906,-1.065616}, + {-0.064960,-0.895967}, + {-0.439101,-0.524601}, + {0.648934,-0.701096}, + {0.990764,-1.487838}, + {0.266843,0.072485}, + {-1.337164,-0.177902}, + {0.882257,-0.971672}, + {0.443937,1.419520}, + {0.489435,0.600496}, + {-1.048080,0.668837}, + {0.080006,-0.024016}, + {0.393861,-0.144830}, + {0.029134,-0.594013}, + {0.020636,0.866641}, + {-0.695757,-0.655914}, + {-0.145142,-0.618203}, + {-0.302988,-0.495213}, + {-0.462676,1.085804}, + {0.153729,-0.610300}, + {-0.098602,1.025134}, + {-0.571255,-1.464634}, + {-0.761817,0.959088}, + {-0.975994,-0.370398}, + {-0.313675,0.590253}, + {0.297074,0.390224}, + {-0.582347,-0.270186}, + {-0.652665,-1.353611}, + {-0.019627,0.000436}, + {0.117063,0.851400}, + {-0.123453,-0.339978}, + {-0.071860,-0.712601}, + {-0.150279,0.705257}, + {0.346280,-0.008366}, + {-0.959111,0.297700}, + {0.620350,-0.430125}, + {-0.047112,0.050720}, + {1.805691,-0.047197}, + {1.715418,-0.183448}, + {-1.158967,2.090597}, + {0.743999,-1.778906}, + {0.025331,-0.388354}, + {0.518336,-0.327919}, + {1.166154,-0.289812}, + {0.029288,1.018113}, + {0.007631,-0.292880}, + {-1.468947,0.677554}, + {0.948800,-0.363516}, + {0.363116,-1.186390}, + {0.033570,-0.368930}, + {-1.920066,-0.183494}, + {1.245028,1.360201}, + {0.157701,0.511411}, + {-0.725534,0.913929}, + {-0.642394,0.108628}, + {1.433083,0.355667}, + {-0.351948,0.578183}, + {0.229656,-1.065693}, + {-0.231833,0.177390}, + {1.099345,-0.553877}, + {-1.922732,0.038200}, + {-0.200014,1.349928}, + {0.725471,-1.057210}, + {0.242414,0.445252}, + {-0.886991,-0.408397}, + {0.510536,0.822131}, + {-0.260030,0.343419}, + {-0.214564,-1.138471}, + {-0.008637,-0.579129}, + {-0.761397,-0.872982}, + {0.350951,0.624380}, + {0.900611,0.816234}, + {-0.522778,0.207549}, + {-0.760791,0.034648}, + {0.375186,0.362076}, + {0.112175,0.831388}, + {-1.242682,-0.022903}, + {0.331423,0.701496}, + {0.253687,-0.488079}, + {-0.873518,0.279186}, + {0.231592,-0.385780}, + {-0.701089,-0.501785}, + {-0.241921,-1.391418}, + {0.019241,0.106733}, + {0.591344,-1.051357}, + {0.745421,-0.610140}, + {-0.606596,0.169312}, + {-0.372797,-0.501536}, + {-0.768757,0.841569}, + {-0.348190,0.051062}, + {0.063387,0.584047}, + {0.329073,-0.791211}, + {0.514938,0.740972}, + {0.273985,-0.582246}, + {-0.967329,0.578559}, + {0.415417,0.124701}, + {-0.098539,0.385786}, + {-0.004510,-0.248503}, + {0.555897,0.242153}, + {1.579329,0.015322}, + {0.230998,1.990804}, + {0.363098,0.553719}, + {1.562863,0.478130}, + {0.026208,0.305355}, + {1.116516,0.360515}, + {-0.982566,-0.465728}, + {-0.508676,-0.878270}, + {-0.144291,0.415225}, + {-1.350074,-0.098142}, + {1.616341,-1.518052}, + {0.104774,0.015461}, + {0.374867,-1.531420}, + {-0.416475,-0.114543}, + {-0.739622,-1.138037}, + {-0.923005,1.062459}, + {-0.664320,-0.280073}, + {-1.156293,-0.337499}, + {-0.689945,0.344369}, + {1.058939,0.443670}, + {-1.285207,0.147568}, + {0.475596,0.835141}, + {-0.239945,1.476067}, + {0.025039,0.541449}, + {-0.101321,-0.682732}, + {-0.546186,-0.130474}, + {-0.433541,0.503623}, + {0.464975,1.359146}, + {-0.567927,0.964406}, + {-1.219789,-1.539823}, + {-0.016740,0.669833}, + {0.182447,-0.271553}, + {-1.320623,1.306323}, + {-0.000075,-0.219999}, + {-1.536075,0.914474}, + {-1.404556,-1.020084}, + {-0.150083,0.236011}, + {0.516978,0.585327}, + {0.241503,0.030283}, + {-0.329743,0.849644}, + {-0.537257,1.132562}, + {0.817902,-0.281236}, + {1.432319,0.095690}, + {0.632687,-0.576622}, + {-0.734149,0.271036}, + {0.459345,-0.277828}, + {0.305288,-0.697961}, + {-1.187887,0.415304}, + {0.796687,-0.667703}, + {0.059859,0.503282}, + {-0.674526,0.557001}, + {0.761860,-0.342605}, + {-0.553691,-0.066432}, + {0.158447,0.486740}, + {0.871085,-0.243732}, + {-0.618374,0.322577}, + {0.211178,-0.228494}, + {0.256709,-0.631463}, + {0.136058,-0.407427}, + {0.386538,-0.076609}, + {0.363731,0.067482}, + {-0.693882,0.964447}, + {1.052294,-0.778507}, + {-0.404876,-1.906265}, + {0.357725,-0.223712}, + {-0.899349,-0.135851}, + {0.297922,-0.353175}, + {0.378138,0.542955}, + {0.948882,-0.008489}, + {-1.168557,-0.095203}, + {0.196487,1.331091}, + {-1.592780,-0.195128}, + {0.496292,0.257436}, + {0.094574,0.257786}, + {0.179735,0.175672}, + {-0.773849,-0.867187}, + {-0.218875,-0.151987}, + {-1.457404,0.561553}, + {-0.766543,-1.240765}, + {-0.311424,-0.241690}, + {1.593359,-0.990696}, + {-1.347961,-0.110373}, + {0.087199,-0.249410}, + {-0.381577,0.193060}, + {1.290974,0.330803}, + {-0.264855,-0.062533}, + {1.932407,-0.669281}, + {1.404137,-0.854353}, + {0.032966,-0.375454}, + {-0.665186,-0.403770}, + {-0.669869,0.889790}, + {0.897455,-0.188428}, + {0.730249,1.021129}, + {-0.843537,-0.297006}, + {0.429220,-0.539707}, + {0.449427,-0.771936}, + {-0.429601,0.576114}, + {0.055077,-0.604795}, + {-0.278586,0.300688}, + {0.067531,-1.925382}, + {-0.924128,-0.958812}, + {-0.337994,-0.727637}, + {-0.457529,1.034296}, + {0.370646,-0.836115}, + {-0.467752,0.409464}, + {-0.334921,-0.540654}, + {0.832486,0.959241}, + {0.746558,0.657005}, + {-0.318685,-1.230673}, + {-0.169521,0.642337}, + {0.789263,0.831460}, + {0.223756,0.414123}, + {-0.325954,-0.321332}, + {0.075028,0.967698}, + {0.216434,-0.716844}, + {-0.776716,0.826807}, + {-0.074531,0.812789}, + {-0.537597,1.026980}, + {0.152495,0.982402}, + {0.413097,-0.552747}, + {0.611235,-0.071720}, + {-0.491325,-0.356869}, + {-0.486791,-0.626587}, + {0.204293,-0.436972}, + {-0.211208,-0.432147}, + {-0.561132,1.073539}, + {-0.070137,-0.184257}, + {-1.115610,-0.477053}, + {1.018256,0.435396}, + {0.301658,-0.197887}, + {-0.147236,1.059088}, + {-0.888603,0.328241}, + {-1.070295,-0.599636}, + {0.316661,0.365444}, + {-0.212919,-0.409418}, + {-0.753071,0.087512}, + {0.404576,0.038580}, + {-1.504748,-0.267729}, + {-0.313997,-0.930065}, + {-0.236354,-1.238931}, + {-0.376294,0.405383}, + {1.291459,-0.346108}, + {-0.297634,0.589772}, + {0.110657,-0.512851}, + {-1.955329,-0.456873}, + {-1.247619,0.482959}, + {0.083895,-0.640105}, + {-0.396012,1.108095}, + {0.909912,-0.470332}, + {-0.049822,-0.096660}, + {0.363109,0.186229}, + {-0.314218,-0.256700}, + {-0.295377,-0.825150}, + {-0.122935,0.847107}, + {0.254378,0.637229}, + {0.103655,1.262402}, + {0.673758,-0.803048}, + {0.318196,-0.206245}, + {0.385547,0.450488}, + {-1.392342,0.052822}, + {-0.665772,0.103675}, + {0.426712,-1.222266}, + {-0.075608,-0.769710}, + {-0.548068,-0.642260}, + {0.647223,0.860224}, + {0.483236,0.514534}, + {0.398769,0.050907}, + {1.229950,0.745029}, + {0.911489,1.188746}, + {-0.099161,-0.697764}, + {0.247348,-0.284992}, + {-0.248089,-0.862396}, + {0.846203,-1.166603}, + {0.906759,0.708414}, + {-1.122335,-0.402972}, + {-0.118882,-0.437190}, + {-0.430711,0.992516}, + {-0.985280,-0.933490}, + {0.753059,-1.029240}, + {0.074035,1.011795}, + {-0.554878,-0.736494}, + {0.137578,-0.170962}, + {0.010941,0.160870}, + {-0.287390,-0.081999}, + {-0.915608,-0.288509}, + {1.009344,0.455340}, + {-1.170750,0.374210}, + {-0.509900,0.696984}, + {-0.073667,0.542572}, + {0.508428,-0.509940}, + {0.162651,-0.619031}, + {-0.894067,-0.370045}, + {-1.100994,0.144700}, + {-0.361678,0.973850}, + {-0.592640,0.709252}, + {0.482369,0.464118}, + {0.646740,0.794370}, + {-1.518095,-0.047480}, + {-2.480153,0.558073}, + {0.171995,-0.118977}, + {-0.307031,-0.408313}, + {0.667857,0.886201}, + {1.215072,-1.815363}, + {0.636451,-0.999552}, + {1.038871,0.746703}, + {0.799771,-0.633650}, + {-0.478658,0.963576}, + {0.660793,-0.396006}, + {-0.366382,-0.010134}, + {-0.126455,0.550368}, + {-0.295040,-0.019897}, + {-0.189119,0.144486}, + {-0.409427,-0.246134}, + {-0.749594,1.158845}, + {-0.619952,-0.568661}, + {0.418661,-0.682120}, + {0.022881,-0.611217}, + {0.745549,-0.999202}, + {0.223803,-1.326778}, + {-0.512690,-0.409827}, + {0.730464,0.154411}, + {0.304366,0.129614}, + {1.037600,-0.642403}, + {-1.589766,0.575436}, + {1.303312,1.195870}, + {-0.048468,-0.161105}, + {-0.583344,0.721412}, + {-0.598792,-1.629398}, + {-1.184964,0.686923}, + {-0.206515,0.128982}, + {-1.354328,0.347421}, + {-0.305114,-0.063748}, + {-0.148754,1.025688}, + {1.386647,-0.299267}, + {0.623479,0.660380}, + {0.111936,-0.215479}, + {0.164504,-0.448971}, + {-1.298132,-0.229643}, + {-0.544931,0.273312}, + {0.708111,1.131149}, + {-1.025639,0.983595}, + {-0.874828,0.448445}, + {0.083092,0.131569}, + {-0.199073,0.111786}, + {0.471144,-0.582538}, + {-0.002063,-1.209889}, + {0.036177,-0.191428}, + {0.048523,-0.482262}, + {-0.591823,0.022019}, + {-0.957858,0.379499}, + {-0.388964,-0.030605}, + {-1.067693,-0.564523}, + {0.683215,0.452901}, + {-0.417523,-0.888896}, + {0.116388,-0.001175}, + {-0.530451,-0.402808}, + {-0.501828,-0.447776}, + {-0.312741,-0.320066}, + {0.239558,0.274188}, + {0.413057,-0.479391}, + {0.804059,0.228824}, + {0.251042,-0.392509}, + {-0.977828,-0.114416}, + {0.706358,0.019025}, + {-0.604572,-0.619421}, + {-0.965764,0.532922}, + {-0.557196,-0.448498}, + {0.117221,-2.151584}, + {0.339451,0.235127}, + {1.163795,0.355797}, + {-0.724402,0.409418}, + {0.255004,0.576204}, + {-0.258374,0.349667}, + {1.028698,-0.794530}, + {0.527963,1.589823}, + {0.719742,-0.748712}, + {0.368928,-0.686335}, + {0.065692,0.585041}, + {-0.125019,-0.273104}, + {-0.241274,-0.481545}, + {0.254201,0.650913}, + {-0.612250,0.134043}, + {-0.040628,1.546205}, + {-0.153613,-0.158336}, + {0.573747,-0.368891}, + {0.247576,-0.546121}, + {-0.327529,-0.227120}, + {0.909237,0.293783}, + {-0.641484,1.032472}, + {0.945376,-0.976555}, + {-0.097696,-1.005641}, + {0.280105,0.778472}, + {0.129635,-0.266768}, + {0.163724,-0.064104}, + {0.234504,-0.013251}, + {-0.745244,2.072479}, + {-1.437508,0.815776}, + {-0.742229,-0.540598}, + {0.532092,-0.390349}, + {0.231447,-0.072878}, + {0.459868,-0.668039}, + {-1.085061,0.706084}, + {0.666810,-0.686744}, + {0.881553,0.001870}, + {0.028822,-1.283565}, + {-0.420608,0.313733}, + {-0.114939,-0.901210}, + {-0.382738,0.663378}, + {-0.159187,0.391378}, + {0.413518,0.011760}, + {-1.145054,-0.174115}, + {0.657089,-0.093871}, + {0.439769,-0.078178}, + {-0.876726,-1.290887}, + {-0.194151,-0.120212}, + {-0.573588,-0.601036}, + {0.480740,-0.445964}, + {0.246870,0.914457}, + {1.507856,-0.333776}, + {1.176638,0.254658}, + {0.571415,0.268885}, + {-0.635128,0.650310}, + {0.383027,-0.382331}, + {0.464641,-0.511072}, + {0.874510,-0.963842}, + {-0.540770,-0.325872}, + {0.253789,-0.123098}, + {-0.270305,0.172002}, + {-1.031316,0.278028}, + {-0.332885,-0.499473}, + {0.120825,-0.860634}, + {-0.643136,-0.068827}, + {-0.040357,0.200742}, + {-0.933480,0.185052}, + {0.771612,-0.286406}, + {0.939360,-0.140307}, + {0.028340,0.302658}, + {-1.188171,-0.068560}, + {-0.180113,0.072284}, + {-0.550815,-0.947792}, + {-0.643721,-0.045899}, + {0.092203,-0.288068}, + {0.439139,0.467489}, + {0.682732,-0.634377}, + {-0.736317,-0.107723}, + {-0.237552,-1.170557}, + {-1.265348,-0.851037}, + {-0.117957,-0.085973}, + {1.102227,-0.027409}, + {0.201656,0.258550}, + {-0.341302,0.345698}, + {-0.226687,0.021001}, + {0.300950,0.747520}, + {-0.548719,-0.764005}, + {0.342371,0.650129}, + {-0.197264,-0.406966}, + {0.253969,0.590828}, + {-0.654232,-0.911205}, + {-0.069347,-0.649115}, + {-0.302273,-0.962710}, + {-0.858735,-0.734358}, + {0.824973,0.347623}, + {0.561939,-0.332102}, + {-0.149910,-0.141332}, + {-0.329960,-0.276681}, + {-0.477825,0.796294}, + {-0.929950,-1.013256}, + {0.660669,-1.277091}, + {0.992162,0.447772}, + {-0.304259,1.500934}, + {-0.057727,0.903363}, + {0.674917,0.876704}, + {-0.634144,-0.191583}, + {0.845197,-1.233301}, + {-1.661000,0.075804}, + {-0.514972,0.235703}, + {0.140527,0.185480}, + {-0.234079,-1.451824}, + {-0.405753,0.462321}, + {1.170499,0.117621}, + {0.131879,0.114231}, + {0.965116,-0.378527}, + {0.206708,-0.220844}, + {-0.187811,0.488983}, + {-0.661154,-0.013639}, + {-1.372899,-0.391042}, + {-0.208436,0.141927}, + {-0.900758,0.338770}, + {-1.061068,-0.473609}, + {-0.442850,-0.150059}, + {-0.656915,-0.213440}, + {-0.519110,0.388374}, + {0.552973,0.412297}, + {0.246784,0.360372}, + {0.037668,-0.058916}, + {-1.348537,-0.018245}, + {-0.618509,0.055222}, + {0.618511,-0.123750}, + {-0.034437,-0.099757}, + {0.323428,-0.652759}, + {0.154987,0.899311}, + {1.781830,-0.153147}, + {0.035979,1.188616}, + {0.488400,0.697546}, + {-0.446666,0.281943}, + {-0.453892,0.528215}, + {-0.688147,-1.008588}, + {-0.390631,0.389458}, + {-1.194630,-0.928712}, + {0.678735,-0.466324}, + {0.976499,-0.038259}, + {1.396877,-0.138085}, + {-1.430019,0.335065}, + {-0.055289,-0.927780}, + {0.485662,0.485284}, + {0.201981,0.537132}, + {0.363088,1.731858}, + {-0.668758,0.465720}, + {0.077665,0.666078}, + {-1.566421,0.040135}, + {-0.355676,-1.374433}, + {-1.271148,0.473298}, + {-0.709383,-1.088175}, + {0.072900,-0.383878}, + {-0.221073,0.694508}, + {0.979392,0.358300}, + {-0.468658,-1.257957}, + {-0.986421,-0.688206}, + {0.774736,0.025302}, + {-0.350405,-1.379404}, + {0.265043,-0.179214}, + {0.632730,0.655965}, + {-0.580958,0.073589}, + {-0.674751,-0.329321}, + {-0.157258,0.366028}, + {-0.167454,0.458918}, + {0.360995,-0.045800}, + {0.541670,0.414036}, + {-0.953282,0.396081}, + {-0.640341,-0.815884}, + {0.099247,0.488115}, + {1.028320,-1.065518}, + {-0.608843,-0.394921}, + {-0.660332,0.127980}, + {1.215143,-0.784662}, + {-0.597942,0.410855}, + {-0.460977,-1.731878}, + {-1.125346,-0.522925}, + {0.160018,-0.890953}, + {0.354174,0.463096}, + {0.432617,0.091890}, + {-0.537692,0.916233}, + {-0.231298,-1.123082}, + {0.448289,0.048934}, + {0.141959,0.248023}, + {-0.239098,1.258853}, + {0.659532,0.029834}, + {1.296697,-0.068587}, + {-0.566528,0.709376}, + {-0.408385,-0.069338}, + {-0.390137,0.783384}, + {-1.620428,-0.505653}, + {0.410443,-0.303323}, + {-0.550195,-0.764973}, + {-0.576556,0.263301}, + {-0.600212,0.262565}, + {-0.122290,-0.126754}, + {0.331186,-1.519006}, + {-0.345319,-0.461422}, + {-0.572596,0.480422}, + {1.103205,0.915259}, + {0.118307,1.801626}, + {-0.764045,0.235550}, + {-0.022141,1.201361}, + {0.028013,0.044403}, + {0.488177,0.026615}, + {-0.623776,-0.232662}, + {-0.961218,0.888319}, + {0.486462,-0.519644}, + {0.199430,-0.047332}, + {0.947899,1.148955}, + {0.169357,-1.336189}, + {-0.930552,-0.016437}, + {-0.518731,0.323647}, + {1.068277,-0.408039}, + {0.873528,-0.510827}, + {-0.062329,-0.013528}, + {0.016866,0.267559}, + {1.056129,-1.027253}, + {-0.539801,0.935748}, + {0.096848,-0.037621}, + {-0.095070,-0.255447}, + {-0.848099,0.443100}, + {0.639670,-0.048560}, + {0.923418,-0.283416}, + {1.456548,-1.294075}, + {-1.764045,-0.439263}, + {0.461557,0.172525}, + {-0.436138,0.071867}, + {-0.673432,0.538713}, + {0.312169,0.260254}, + {0.103237,-0.512787}, + {-1.493843,0.399438}, + {0.819913,1.366162}, + {-0.016400,1.497652}, + {0.215513,-0.225488}, + {-0.017414,-0.407048}, + {-0.020617,0.629335}, + {0.224152,0.982394}, + {-0.511165,-0.579162}, + {0.007663,0.124781}, + {0.108301,0.792560}, + {0.158005,0.407386}, + {-0.182543,-0.165334}, + {1.159181,-0.510782}, + {0.280196,-1.062985}, + {0.236496,-0.145702}, + {-0.422758,1.424397}, + {-0.331449,-0.193450}, + {0.192874,-0.427651}, + {0.112059,0.188264}, + {-0.272202,0.107938}, + {-0.760328,-0.363161}, + {-0.726426,1.597634}, + {-0.071579,0.949224}, + {0.308458,0.255762}, + {1.021180,-0.266580}, + {0.143714,0.679690}, + {0.402213,-0.431472}, + {0.325377,-0.219868}, + {1.102590,0.967718}, + {0.358516,-0.734835}, + {0.014624,0.178090}, + {0.448299,-0.407042}, + {-0.611858,-0.011623}, + {1.077674,-0.250480}, + {-0.299770,0.274045}, + {-0.091250,0.162794}, + {0.263684,0.580732}, + {-0.524096,0.453355}, + {1.220175,-0.439485}, + {0.505437,0.769273}, + {-0.448804,-0.993002}, + {-0.443388,-0.483274}, + {-0.523477,-0.401425}, + {-0.313273,-0.056149}, + {0.050769,0.557578}, + {-0.702026,-0.345979}, + {-0.323416,0.362591}, + {0.804164,0.415913}, + {0.366415,0.231610}, + {-0.674289,2.719386}, + {-0.390476,-0.001017}, + {0.634584,0.043129}, + {-0.165932,-0.088890}, + {-0.084003,0.164003}, + {0.326900,-0.176912}, + {0.846530,-0.575045}, + {0.379000,-0.560151}, + {-0.045598,-1.256528}, + {0.004132,-0.330289}, + {0.801731,0.102068}, + {0.310208,-0.016975}, + {0.804024,-0.848600}, + {0.530551,0.564239}, + {-0.217442,-0.406346}, + {0.482194,-0.354971}, + {1.013284,0.341576}, + {-0.189813,-0.158867}, + {0.057823,0.314484}, + {-0.385227,0.961346}, + {-0.252099,0.877088}, + {-0.150246,0.399242}, + {0.227240,-0.011056}, + {-0.906256,0.232546}, + {0.447790,0.615224}, + {0.710736,0.413033}, + {0.332351,0.394525}, + {-1.111575,-0.892920}, + {0.671354,0.236546}, + {-0.530462,0.833944}, + {-0.487734,-0.933744}, + {-0.279573,0.015821}, + {0.150636,0.941044}, + {-0.490255,-1.718709}, + {-0.562611,-0.050636}, + {0.161397,-0.336955}, + {-0.581458,0.013550}, + {1.301819,-0.243034}, + {0.328760,-0.383835}, + {-0.558614,0.312557}, + {-0.994847,-0.123656}, + {-0.946885,-0.460904}, + {-0.150270,0.629816}, + {0.059610,-0.005996}, + {-0.577683,-0.466143}, + {-0.471025,-0.278965}, + {-0.148945,-0.324783}, + {1.276411,0.305076}, + {0.980279,-0.070273}, + {1.162642,0.100148}, + {1.843762,0.357636}, + {-1.342349,-0.353233}, + {-0.436687,-0.095269}, + {-0.805848,0.606225}, + {0.871641,-1.329340}, + {0.184974,1.265810}, + {-0.244617,-0.882645}, + {-0.907868,-0.039793}, + {1.031712,0.603956}, + {-0.320916,0.296021}, + {0.769198,0.408169}, + {0.273306,-1.560085}, + {-0.845221,-0.120352}, + {-0.292803,-0.487164}, + {-1.188451,1.021220}, + {0.712612,-0.904145}, + {1.536593,0.458014}, + {0.948114,-0.292910}, + {0.183039,-0.763955}, + {2.157607,-0.224608}, + {-0.273569,-0.394222}, + {-0.431183,0.416926}, + {0.132424,-0.348722}, + {0.753581,1.216860}, + {-0.337171,-0.893545}, + {-1.120653,-0.243974}, + {1.019687,0.181340}, + {1.477047,-0.821085}, + {0.046624,-0.107856}, + {0.433614,-0.195993}, + {-0.405870,-1.017501}, + {-0.050243,0.119354}, + {-0.671673,0.243350}, + {-0.315893,1.721316}, + {-0.083615,0.238805}, + {-1.037536,0.577163}, + {-0.913802,-0.523424}, + {1.219618,-0.315761}, + {1.146100,0.517259}, + {-0.895445,-1.015857}, + {0.514174,0.575290}, + {-0.123435,0.745106}, + {0.702053,0.848669}, + {-0.342611,-0.957096}, + {-0.289839,-0.316382}, + {-0.397795,0.021996}, + {-0.677843,0.971322}, + {0.361514,-0.183216}, + {0.080051,-0.295673}, + {1.160202,-0.910675}, + {-0.150463,0.736822}, + {-0.709405,-0.203295}, + {-0.350063,0.552303}, + {-0.721111,0.319029}, + {-0.253701,-0.103668}, + {-0.750172,-0.320345}, + {-1.206247,-0.063426}, + {-1.373506,0.124767}, + {0.508866,0.460720}, + {-1.336954,0.210008}, + {-0.631641,-0.072041}, + {0.928787,-1.037158}, + {0.032754,1.022849}, + {0.666725,-0.698994}, + {-0.426685,0.073876}, + {0.641602,0.815373}, + {0.375179,-0.463772}, + {-0.233340,1.332766}, + {-0.588562,0.673215}, + {-1.583380,0.174935}, + {0.183747,-0.026180}, + {-0.037925,-0.435531}, + {0.421545,-1.077913}, + {0.739201,0.256848}, + {0.278009,-0.012421}, + {1.071530,-1.464473}, + {0.879311,0.140050}, + {0.690285,-0.379450}, + {-0.359215,0.696639}, + {0.445641,1.003849}, + {-0.471426,0.216653}, + {0.747519,-0.191435}, + {0.609888,1.087821}, + {-0.114237,0.707995}, + {0.310145,-0.068274}, + {0.238114,0.520310}, + {0.188092,-0.863861}, + {-0.272074,0.545071}, + {-0.584299,0.335263}, + {0.568218,0.803199}, + {-0.430740,0.419229}, + {-0.900838,0.175793}, + {0.241127,0.980598}, + {0.229357,-0.402579}, + {-0.005071,0.451806}, + {-0.169403,0.001801}, + {0.498114,0.632898}, + {0.880223,-0.529746}, + {-0.868428,0.322017}, + {-0.934466,0.316410}, + {-0.153631,-0.037373}, + {-0.402630,-0.960009}, + {0.069345,1.147181}, + {0.538025,0.497931}, + {-0.752724,0.353508}, + {1.119766,0.340039}, + {2.267532,-0.419679}, + {0.867285,-0.861810}, + {-0.219850,0.147761}, + {-1.333873,0.140060}, + {0.349306,-0.296989}, + {1.246670,-0.360293}, + {0.448126,1.393103}, + {0.458653,-0.009429}, + {0.897902,0.163413}, + {-0.423687,0.569503}, + {0.533119,-0.220683}, + {-0.561732,-0.975309}, + {0.881865,0.101322}, + {-0.304062,0.840913}, + {0.773744,-0.251265}, + {0.767785,-0.089005}, + {0.093558,0.166969}, + {-0.144223,0.543223}, + {0.599210,-0.139195}, + {-0.757562,0.974285}, + {1.287608,-1.166102}, + {0.851889,0.840470}, + {-0.060754,1.083686}, + {0.613368,0.304015}, + {-0.379987,-0.439814}, + {-0.329733,-0.112941}, + {-0.424859,-0.739637}, + {-1.793210,-1.188762}, + {-0.635379,-0.904453}, + {0.257752,-1.166231}, + {0.795667,-1.099593}, + {0.943045,-0.741673}, + {0.132503,-0.740775}, + {-0.441437,-0.158045}, + {0.625827,-0.791281}, + {0.206786,0.183906}, + {0.838373,-0.394791}, + {0.800490,0.460415}, + {0.158553,0.035947}, + {0.941686,1.030037}, + {-0.449424,0.181222}, + {-0.064192,0.321760}, + {-0.818197,-0.517869}, + {-1.001442,-0.964262}, + {-0.341690,0.209038}, + {0.769880,-0.509106}, + {-1.800834,-0.977495}, + {0.934141,-0.956871}, + {-0.544929,-0.234843}, + {0.052514,-0.188411}, + {0.020671,0.409432}, + {-0.446867,0.177584}, + {-0.018809,0.439592}, + {-1.004284,-1.141000}, + {0.165529,-0.054725}, + {0.209767,0.617396}, + {-0.141390,-0.133027}, + {-0.035609,0.141281}, + {-0.178184,1.191617}, + {0.543428,0.601854}, + {-0.095008,-0.455613}, + {-0.059113,0.233037}, + {0.233059,-0.139516}, + {0.272380,-1.266193}, + {0.618656,0.116292}, + {-0.009285,0.623049}, + {0.096660,0.123946}, + {-1.580974,0.525244}, + {0.206597,1.002594}, + {0.089974,-0.500957}, + {1.895818,0.543035}, + {-0.305681,0.122755}, + {0.221252,0.227730}, + {-0.820677,-0.365112}, + {0.947046,0.458062}, + {0.542810,-0.838007}, + {-0.052196,-0.075847}, + {0.814450,-0.744863}, + {-0.567190,0.264126}, + {0.237717,0.018269}, + {-0.703420,0.405742}, + {0.614185,0.753346}, + {-1.418353,0.214996}, + {-0.860688,0.915467}, + {-0.360367,-0.260405}, + {1.472941,0.435927}, + {0.446222,0.730291}, + {-0.144925,-0.561438}, + {-1.750887,-0.525869}, + {0.340149,-0.191235}, + {0.377149,0.915875}, + {0.114776,0.838241}, + {1.129547,-0.141350}, + {0.184851,-0.695700}, + {-0.534036,-0.634324}, + {-0.340427,0.321547}, + {-0.404642,-0.697021}, + {-0.253808,-0.192746}, + {-0.596530,-0.932647}, + {-0.838994,-0.405391}, + {-0.755491,-0.342310}, + {-0.057286,-0.358306}, + {-1.447241,1.301361}, + {-1.313619,-1.013152}, + {-0.571824,0.109239}, + {-0.260698,0.606990}, + {0.070246,0.534229}, + {0.597517,-0.037879}, + {-1.094173,-0.410137}, + {-0.254631,-0.246340}, + {0.431483,-0.376672}, + {0.519113,0.214955}, + {-0.076563,0.738583}, + {0.205809,-1.447609}, + {-0.810528,-0.234393}, + {0.229555,0.246711}, + {0.927126,0.590173}, + {-0.466521,-1.469152}, + {0.695727,1.527739}, + {-1.704484,-0.591690}, + {0.307858,0.231491}, + {-0.995968,0.318885}, + {0.661263,-0.555950}, + {-0.712018,0.863494}, + {0.187289,-0.103648}, + {0.148728,0.440236}, + {-0.416693,0.421814}, + {-0.285165,-1.497392}, + {-1.351142,-0.185347}, + {0.484214,-0.136529}, + {0.573682,-1.192687}, + {0.410345,-0.315465}, + {0.848424,0.671905}, + {-1.103233,0.644873}, + {1.299410,0.565215}, + {-0.461676,0.064235}, + {-1.379040,-0.432968}, + {-1.015434,-1.145416}, + {0.129534,0.363062}, + {0.104220,0.288515}, + {1.543944,-1.307105}, + {0.221840,0.109014}, + {-0.184143,0.370434}, + {0.058980,0.873678}, + {0.551447,-0.039445}, + {-0.270308,0.105572}, + {0.469465,-0.104565}, + {0.015573,0.788276}, + {0.749307,1.602021}, + {-0.203181,-0.465786}, + {0.133115,-1.936805}, + {-0.429016,-0.726444}, + {-0.149023,-0.362963}, + {0.397963,-0.235261}, + {1.558527,0.044457}, + {-0.972298,0.805232}, + {-0.807760,-0.399592}, + {0.280215,0.243919}, + {0.137227,-1.792080}, + {-0.651625,0.507164}, + {0.275789,-0.969788}, + {-0.254710,-0.494221}, + {-0.568344,-0.391331}, + {-0.403117,-0.847222}, + {0.850632,0.551661}, + {0.375400,0.202567}, + {0.407655,0.339162}, + {-0.077186,-0.944989}, + {0.853879,0.321790}, + {-0.878723,1.078369}, + {0.402514,0.134404}, + {-0.636014,0.028282}, + {-0.306382,-0.725383}, + {0.596217,0.775472}, + {0.743227,0.136710}, + {0.318624,0.141530}, + {-2.436086,1.380653}, + {-1.525091,-0.330171}, + {0.786829,-0.068407}, + {-0.268204,0.051274}, + {0.026261,-0.264944}, + {0.284678,0.800642}, + {1.139380,-0.635677}, + {0.531484,1.095444}, + {0.061698,-1.585712}, + {-0.200152,-0.292121}, + {0.511662,1.497851}, + {-1.734319,0.421699}, + {0.730265,-0.139450}, + {-0.853009,-0.131672}, + {0.279669,0.232947}, + {-0.265099,-0.688263}, + {-0.929645,-0.286772}, + {-0.125102,-1.125642}, + {1.064545,0.166148}, + {0.733526,-0.916868}, + {-0.934886,0.513751}, + {1.207510,1.425677}, + {-0.027745,0.571540}, + {-1.475919,-1.304595}, + {0.891606,-0.522466}, + {-1.132359,-0.916251}, + {0.769611,1.058327}, + {-0.787181,-0.146081}, + {-0.219027,0.104576}, + {-0.095533,0.083469}, + {-0.115227,0.014563}, + {-1.070410,0.746173}, + {1.109839,-1.229791}, + {-0.326565,0.830876}, + {0.286977,0.532019}, + {-0.769394,0.226197}, + {0.754521,0.827572}, + {-0.361735,-0.367817}, + {-0.546435,-0.902863}, + {0.746461,-0.939287}, + {-0.625963,1.456091}, + {-0.244332,0.173159}, + {0.735755,0.338783}, + {1.161011,-0.592912}, + {0.316221,-0.277843}, + {-0.515322,-0.171536}, + {-0.073174,0.804972}, + {1.050407,-1.065537}, + {0.484378,0.954140}, + {0.939704,-0.717131}, + {-0.746289,0.125873}, + {0.306167,0.822975}, + {-0.688430,-0.009492}, + {0.473809,-0.195759}, + {-0.291123,-0.887642}, + {-1.113639,-0.205191}, + {0.507462,-1.139016}, + {-1.047570,1.061075}, + {0.076114,0.502083}, + {-0.009567,0.771579}, + {0.277710,-1.082459}, + {-0.030487,-0.792313}, + {-0.005490,-0.038347}, + {-0.070947,-0.641452}, + {0.064114,-1.279288}, + {-0.735976,-0.177716}, + {-1.173461,-0.963224}, + {0.642447,-1.215458}, + {-0.542537,-0.779186}, + {0.208617,0.707524}, + {-0.815926,0.734432}, + {-1.362503,0.826668}, + {0.171331,-0.098047}, + {0.299502,-0.977795}, + {-1.423973,0.972393}, + {1.079616,-1.087319}, + {-0.301928,0.824269}, + {1.239375,0.407183}, + {0.060999,-0.016179}, + {0.804982,-0.385257}, + {-0.012938,0.677340}, + {-0.121473,1.046107}, + {-0.173294,-0.590221}, + {0.680903,0.172555}, + {0.901474,-0.638362}, + {-0.754168,0.954427}, + {-1.017190,0.458050}, + {-0.893258,-0.651492}, + {-1.223616,0.734166}, + {-0.551561,0.465105}, + {-0.472743,-1.538767}, + {-0.643332,0.237332}, + {-1.403355,-0.712716}, + {-0.696300,0.281854}, + {0.063601,0.242936}, + {0.140091,-0.361881}, + {-0.466220,0.056740}, + {0.400082,0.655608}, + {-0.218787,0.165453}, + {0.162508,0.460463}, + {0.196531,0.805585}, + {0.867586,-0.796481}, + {-0.103192,-0.372709}, + {1.480107,-0.244144}, + {-0.377288,-0.616448}, + {0.827771,0.615012}, + {0.241670,-0.067976}, + {0.159564,-0.039752}, + {0.202995,-0.531926}, + {-0.635295,-0.300095}, + {-0.112240,-0.452463}, + {-0.005874,-1.283824}, + {-0.902111,-0.502776}, + {0.246129,0.198008}, + {0.478389,0.145563}, + {0.441332,0.687473}, + {-0.247149,0.184176}, + {-0.789643,-0.991969}, + {-1.231853,-0.521080}, + {0.419307,-1.074857}, + {0.844709,0.320482}, + {1.197865,0.314086}, + {-0.515979,0.581945}, + {-0.331012,-0.496182}, + {-0.030485,0.691218}, + {-0.148168,0.839336}, + {-0.386217,-0.545061}, + {0.377549,-2.132758}, + {-0.636174,-0.065140}, + {-0.578408,0.476528}, + {-0.770655,0.716478}, + {-0.315434,0.652659}, + {-0.095634,0.084278}, + {-0.454542,0.493002}, + {-0.466113,-0.638183}, + {-0.452908,0.032110}, + {0.612871,-0.006891}, + {-0.519763,-0.980015}, + {0.216004,1.044187}, + {-0.522556,-1.037992}, + {0.191915,-0.608267}, + {1.409379,-0.193706}, + {-0.007437,-0.406039}, + {-0.109688,-0.212492}, + {0.014242,-0.315274}, + {-1.498715,-0.045784}, + {0.823582,-0.518037}, + {0.453221,-0.453072}, + {0.308668,0.963767}, + {-0.639039,-0.106259}, + {-0.295817,-1.112948}, + {0.149772,1.651655}, + {-0.190802,0.742309}, + {-0.697535,0.406187}, + {0.803067,-0.505165}, + {-0.543679,-0.703909}, + {-0.455789,0.354645}, + {-0.801542,-0.036586}, + {0.803856,-0.099847}, + {-1.193883,-0.353241}, + {1.075654,0.052465}, + {-0.258694,-0.040366}, + {-0.699399,-0.209583}, + {-0.215574,-0.004929}, + {0.632563,0.109047}, + {-0.472713,1.246852}, + {0.558519,0.764899}, + {-1.312153,-0.650642}, + {0.319234,0.096798}, + {-0.116014,1.918017}, + {0.348943,-0.098542}, + {-0.517133,-0.367209}, + {-0.032548,-1.034303}, + {0.328535,-0.909280}, + {0.458397,1.012904}, + {0.159957,0.751975}, + {0.448532,1.165521}, + {-0.289242,-1.073650}, + {0.221077,0.996689}, + {0.271276,0.400481}, + {-0.293484,0.257531}, + {0.380645,-0.869409}, + {1.060007,-1.185366}, + {-0.683863,-0.654862}, + {0.335272,0.036245}, + {-0.230655,0.834185}, + {-0.012915,-0.531325}, + {0.024833,-1.050938}, + {-0.708008,0.918939}, + {-0.825306,-0.060127}, + {0.253139,0.491280}, + {0.680471,0.175579}, + {-0.198326,-0.665312}, + {-0.922970,-0.808154}, + {0.156470,-0.797370}, + {-0.783536,-0.469965}, + {0.341051,0.873579}, + {-2.007647,0.681225}, + {0.364041,-0.508894}, + {-0.015955,0.350543}, + {-0.291678,-0.998941}, + {0.239003,-0.487403}, + {-0.327758,-0.508257}, + {-0.539391,-0.798760}, + {-0.540462,-0.564731}, + {-0.620798,0.707924}, + {0.256000,0.452068}, + {0.385059,1.172229}, + {0.360328,-0.171884}, + {-0.572500,0.532958}, + {0.648164,0.071339}, + {-1.027705,-1.054336}, + {0.522261,-0.590621}, + {-0.019556,0.572396}, + {0.607990,0.481700}, + {-1.322499,0.788470}, + {-0.684229,-0.473861}, + {-1.265839,1.105980}, + {-0.581971,-0.124401}, + {0.444034,0.102150}, + {0.794992,0.031055}, + {0.603776,0.000266}, + {0.877366,0.024301}, + {0.277579,0.682971}, + {-0.109226,0.230966}, + {-0.935434,0.116535}, + {-0.083082,0.334694}, + {0.362059,-0.024471}, + {0.753738,0.122144}, + {0.304294,1.505981}, + {0.271106,-0.317919}, + {-0.465618,-0.059502}, + {-0.373175,-0.755986}, + {0.387614,-0.416476}, + {-0.748802,-0.395856}, + {-0.013579,-1.476338}, + {-0.366869,0.317716}, + {-0.979219,-0.200391}, + {-0.153407,-0.447562}, + {-0.255245,0.351090}, + {0.998840,-0.545270}, + {0.186904,-0.240711}, + {0.153329,-0.943938}, + {0.247078,0.571677}, + {0.192360,1.104895}, + {-0.551067,0.802267}, + {-0.124506,0.860949}, + {-0.139002,-0.104195}, + {-0.642611,-0.508259}, + {0.157868,0.859140}, + {0.019725,0.207020}, + {-0.653316,1.187525}, + {1.329306,-0.509686}, + {0.694674,0.256705}, + {0.202853,0.851294}, + {-0.441419,1.428209}, + {0.156150,-0.080560}, + {0.715021,-0.899171}, + {-0.239049,-0.631319}, + {0.195295,0.575186}, + {-1.311572,-0.865187}, + {0.570106,0.651064}, + {0.208959,-1.023329}, + {0.906490,-0.109625}, + {-0.781286,-0.253333}, + {0.231546,0.707965}, + {-1.265833,1.067884}, + {0.815263,1.165205}, + {1.466715,0.385384}, + {0.535490,0.581761}, + {-0.472358,-0.470277}, + {0.983264,0.384383}, + {0.727058,0.443847}, + {-0.416272,-0.472738}, + {0.376082,-0.134460}, + {-0.503839,-0.901079}, + {0.682625,1.008080}, + {-1.386979,-1.091660}, + {0.213387,0.535684}, + {-0.957192,-0.557212}, + {-0.067069,-1.051855}, + {-0.101157,-0.178941}, + {-1.306964,-0.631127}, + {0.926961,-0.083734}, + {-0.264348,-0.487315}, + {0.627269,-0.923797}, + {1.086963,0.082439}, + {-0.149566,-1.399193}, + {0.389143,-0.198131}, + {-0.031070,0.505173}, + {1.081145,-0.421980}, + {-0.365429,-0.412667}, + {-0.376916,0.370359}, + {0.531009,1.324279}, + {0.522575,-0.338998}, + {0.502957,-0.482424}, + {-0.562535,-0.545277}, + {-0.397874,-0.045620}, + {-0.210300,-0.937677}, + {0.678832,-1.456153}, + {-0.290273,0.095165}, + {0.631624,0.517150}, + {-0.411457,0.459952}, + {1.217812,-0.542939}, + {0.073630,-0.234428}, + {0.054958,-0.570539}, + {-1.128586,0.230127}, + {0.720559,0.058370}, + {-1.035968,0.077082}, + {-0.608327,-0.358758}, + {0.269851,0.489804}, + {-0.406969,-0.549994}, + {0.527270,-0.654157}, + {1.027706,-0.593285}, + {-0.471971,-0.594411}, + {0.040449,-0.467310}, + {-0.290221,0.851614}, + {-0.226635,-0.794078}, + {0.447274,0.236763}, + {-0.785187,-0.067945}, + {0.712972,0.436643}, + {-0.088441,1.299909}, + {0.475924,0.408473}, + {0.209117,0.539048}, + {0.714783,-0.513016}, + {0.106957,0.344444}, + {-0.517943,0.098828}, + {1.248470,0.110160}, + {-0.164676,0.715642}, + {0.116579,0.701060}, + {-0.338202,1.285789}, + {0.252122,0.401489}, + {0.208841,0.077311}, + {0.254678,0.806815}, + {0.234503,-0.687878}, + {-0.017710,1.099931}, + {1.248068,-1.577695}, + {-2.177322,0.634684}, + {0.383749,-0.488257}, + {0.626473,0.894318}, + {0.950392,-1.224503}, + {-1.592308,0.183474}, + {-0.883620,0.459040}, + {0.335251,-0.492958}, + {-1.452049,0.645747}, + {0.654540,-0.613036}, + {-0.786306,0.621635}, + {-0.835920,1.214810}, + {-0.402804,-0.379300}, + {-0.167140,-1.088577}, + {2.017823,-0.733220}, + {1.277852,0.045432}, + {-0.655324,-0.273020}, + {-0.502679,-1.294652}, + {0.139179,0.305881}, + {0.476464,0.374818}, + {-1.204706,0.929919}, + {-0.703096,0.426476}, + {-0.170932,-0.224981}, + {-0.351279,-0.400379}, + {0.267640,0.852748}, + {0.272721,-0.274755}, + {0.394744,0.261766}, + {-0.427077,-1.197927}, + {0.469152,-0.246978}, + {-0.068939,-0.212535}, + {0.567020,0.581239}, + {1.773606,-1.261858}, + {0.258176,-1.131465}, + {-1.103839,-0.289925}, + {1.177229,-0.690317}, + {0.137438,-0.884592}, + {0.116897,-0.623741}, + {1.231751,-1.044646}, + {0.653054,-0.008248}, + {-1.025754,0.353121}, + {0.152087,-0.684942}, + {0.970565,0.373987}, + {-0.392564,-0.069188}, + {-0.268254,0.066466}, + {1.288850,-0.546856}, + {-0.879522,1.075044}, + {0.398109,0.957102}, + {0.937518,-0.970381}, + {1.315683,0.004675}, + {0.656915,0.923958}, + {0.964084,0.332777}, + {-0.544967,-0.260763}, + {0.161974,-0.230332}, + {0.086070,1.573961}, + {-0.383494,0.130120}, + {1.082890,0.057498}, + {-1.410456,-0.461719}, + {0.540485,0.691271}, + {-0.278103,0.291339}, + {0.180835,0.081187}, + {0.648822,-0.143641}, + {-1.616721,0.284309}, + {0.850766,-0.295949}, + {-0.452081,-0.318424}, + {-0.672436,0.363193}, + {0.330021,-0.103062}, + {-1.201214,0.695691}, + {-0.176974,-0.049101}, + {0.034254,-0.001430}, + {-0.581966,-1.404542}, + {1.233772,0.845893}, + {0.770042,-0.222329}, + {-0.134528,1.408050}, + {0.981347,0.143636}, + {0.145948,1.099040}, + {0.710827,0.052673}, + {0.557771,-0.481154}, + {-0.146756,-1.008837}, + {-0.689552,-0.880902}, + {0.001022,0.756353}, + {0.222483,0.013501}, + {0.905978,0.432735}, + {-0.497583,-0.437051}, + {0.010372,-0.231759}, + {-0.834391,0.245930}, + {0.869406,-1.488002}, + {-1.420173,0.137089}, + {0.055164,0.678866}, + {0.811665,1.025276}, + {0.375303,0.608999}, + {-0.615345,-0.077846}, + {-0.186463,0.319902}, + {0.005719,0.915684}, + {0.318663,-0.507730}, + {-0.803895,0.451266}, + {0.160835,0.158185}, + {1.633081,0.429963}, + {-0.791587,0.563798}, + {-0.778932,-0.083845}, + {-0.746995,0.259063}, + {-0.374430,0.379522}, + {-0.025126,-0.204688}, + {-0.991074,0.045919}, + {-0.136845,-0.414905}, + {0.899845,1.310109}, + {-0.868625,-0.129578}, + {1.148100,0.070605}, + {-0.810213,-0.433737}, + {1.207818,-0.151042}, + {-0.515970,-0.141577}, + {-0.161548,0.388756}, + {-0.679441,-0.108745}, + {-0.858860,0.144068}, + {-0.111455,-0.935162}, + {-0.512453,0.281827}, + {0.802022,-0.977459}, + {-0.488174,0.273547}, + {-0.555684,0.973625}, + {-1.467122,1.287905}, + {0.769233,-0.351832}, + {0.214904,0.347022}, + {0.942995,0.470266}, + {-1.265858,-1.103599}, + {0.786352,-0.915630}, + {0.377453,0.259392}, + {0.364408,-0.253769}, + {-0.939662,0.510476}, + {-0.611435,0.630746}, + {0.496403,0.350935}, + {0.780776,-0.376306}, + {0.329368,-0.560035}, + {-0.104896,-0.414545}, + {0.459736,-0.818950}, + {0.101952,0.759826}, + {0.234506,0.195742}, + {1.165165,1.081672}, + {-0.741395,-0.556266}, + {0.136652,-0.063647}, + {-0.380017,0.025288}, + {-1.149874,1.004539}, + {0.233882,0.583344}, + {1.407491,-0.873973}, + {0.124950,0.137739}, + {0.077742,0.655085}, + {0.756326,0.693924}, + {-0.978230,-0.590244}, + {-0.318209,-0.151183}, + {1.590341,0.137861}, + {-0.091311,-0.581231}, + {0.362381,-0.416706}, + {0.646778,-0.246347}, + {0.432081,-0.436533}, + {0.467351,0.177888}, + {-0.192966,1.332833}, + {-0.364669,0.036797}, + {-0.426350,0.041546}, + {-0.468050,0.813732}, + {-1.082121,-0.356209}, + {0.795313,0.513634}, + {0.286996,0.171098}, + {0.534304,-0.756041}, + {-0.676098,0.413430}, + {-0.707209,0.964446}, + {-0.144614,-0.627121}, + {1.280522,-1.317728}, + {-0.159645,-0.237936}, + {-0.582439,-0.659814}, + {-0.070758,-1.089956}, + {-0.148674,-1.374329}, + {-0.179882,0.506686}, + {0.086493,-0.791614}, + {0.489759,-0.403031}, + {-0.314327,-0.111422}, + {-0.412931,0.493597}, + {0.253975,0.712494}, + {0.449653,0.383925}, + {-0.170046,-0.209558}, + {0.146663,0.741047}, + {-0.391870,-0.091945}, + {-0.442016,0.119528}, + {-0.802004,-1.400078}, + {-0.352020,-0.673484}, + {1.178405,0.222166}, + {0.401656,-0.176436}, + {-0.270939,-0.198899}, + {-0.695723,-0.566735}, + {0.834854,-1.471402}, + {-0.289106,0.437823}, + {0.251627,0.054241}, + {0.029125,-0.307041}, + {-1.487735,1.231129}, + {0.333572,-0.223186}, + {0.038154,1.081929}, + {-0.087970,-1.036150}, + {0.592180,0.133148}, + {0.093161,-0.294506}, + {-0.296535,0.495623}, + {-0.522146,1.313928}, + {-0.714640,-0.532988}, + {0.398263,0.293071}, + {-0.596224,1.223075}, + {0.479882,-1.180554}, + {-0.065416,-0.710133}, + {-0.889315,-0.315524}, + {0.962241,-0.055537}, + {-0.221264,0.112333}, + {0.322420,-0.571722}, + {1.192841,0.558100}, + {0.521199,0.138154}, + {0.716695,0.106324}, + {0.711628,-0.260564}, + {0.189505,-0.382577}, + {-0.438235,-0.546217}, + {0.077497,-0.092175}, + {-0.202673,-0.048951}, + {1.487370,-0.747006}, + {-1.031527,-0.820128}, + {-1.649929,-0.105742}, + {-0.347869,-0.458435}, + {-0.029234,-1.320993}, + {1.253876,0.585886}, + {0.436760,2.430056}, + {0.545664,0.470634}, + {0.901732,-0.856095}, + {0.662886,0.977089}, + {1.075384,-0.075824}, + {0.209674,0.063782}, + {-0.126499,0.482599}, + {-0.507162,0.208925}, + {0.247866,-0.354774}, + {0.054885,-1.024517}, + {0.204562,0.827382}, + {-0.883562,-0.740692}, + {0.849976,-0.019489}, + {0.263688,0.251006}, + {-0.330082,-0.061291}, + {-0.083851,1.370921}, + {0.295784,0.875275}, + {-0.425539,-0.283223}, + {-0.640975,0.136141}, + {-0.173006,0.465478}, + {-0.895481,0.477515}, + {0.229261,1.220279}, + {-0.407060,1.466588}, + {1.295396,0.176855}, + {-0.632605,0.786648}, + {-1.121659,0.268616}, + {-0.847703,-0.305246}, + {1.663789,1.656323}, + {-0.523322,-0.547465}, + {-0.792665,0.115445}, + {-0.824945,0.042476}, + {0.901073,0.249932}, + {1.130116,-1.907218}, + {-0.859768,-1.577612}, + {-0.191384,0.566792}, + {0.676686,-0.623231}, + {-0.793064,-0.852185}, + {0.027490,-0.460866}, + {0.540012,-1.738204}, + {-0.751769,-1.401695}, + {-0.652675,-2.187214}, + {0.546582,0.366436}, + {0.191392,-0.194236}, + {0.143155,0.472797}, + {-0.850023,-0.135606}, + {-0.377306,0.072815}, + {1.283611,0.519238}, + {0.216310,0.401307}, + {0.612385,0.376774}, + {0.509529,-1.018581}, + {0.718140,-0.664603}, + {-0.092749,-0.580942}, + {0.408930,-0.062835}, + {-0.082806,-1.497458}, + {-0.474417,-0.431005}, + {-0.261473,0.207407}, + {-0.241734,0.107672}, + {-1.042802,-0.161642}, + {0.155338,0.029191}, + {0.742596,0.009836}, + {1.004603,-0.548445}, + {-0.772076,0.004202}, + {0.684254,-1.908420}, + {-0.643584,-0.503343}, + {-0.602398,0.352084}, + {0.637940,0.050408}, + {-0.282541,-0.673629}, + {-0.218095,-0.677067}, + {0.028687,-0.173118}, + {0.599385,0.120223}, + {-0.635225,1.055321}, + {-0.321093,-1.072140}, + {0.301278,-0.518003}, + {-0.301802,0.560499}, + {0.404168,-0.160419}, + {0.439423,-0.123051}, + {-0.001024,-0.084182}, + {-0.222399,0.398534}, + {-0.032543,0.290847}, + {-0.686894,0.642376}, + {-0.376391,-0.292043}, + {1.291833,-0.282113}, + {-0.432943,0.047899}, + {-0.268253,-1.565101}, + {-0.079616,-0.299536}, + {0.117126,-0.616435}, + {0.920777,-1.547713}, + {0.672508,-0.938412}, + {-0.127227,0.039824}, + {0.497527,0.137301}, + {-1.150554,-0.242356}, + {0.526140,0.662427}, + {0.332716,0.387359}, + {0.193252,-0.748491}, + {0.879236,1.244841}, + {-0.320852,0.438523}, + {0.655207,0.250311}, + {0.798317,-0.037761}, + {1.759320,0.543552}, + {0.796490,0.394488}, + {-0.426451,0.104660}, + {-0.596812,0.295484}, + {-0.586590,-0.761865}, + {-1.204936,1.145020}, + {-0.858949,0.734240}, + {0.417170,-1.861530}, + {-1.380253,0.411880}, + {0.940440,-1.547216}, + {0.392789,0.067926}, + {0.752023,-0.870322}, + {0.120743,-0.084171}, + {0.226500,-0.038959}, + {-0.199741,0.982130}, + {-1.435202,1.924533}, + {-0.681303,-0.685655}, + {-0.017819,0.316710}, + {-0.419371,0.291876}, + {-0.419993,-0.704322}, + {-0.167402,-0.653200}, + {0.689883,1.667397}, + {0.656809,-0.191279}, + {1.349286,0.707932}, + {-0.417382,-0.503832}, + {-0.314839,0.076203}, + {0.018604,0.103821}, + {-0.670877,0.305072}, + {0.238125,-0.177294}, + {-0.711169,0.115679}, + {0.098621,-0.114667}, + {-0.836724,0.797509}, + {-1.266489,0.300376}, + {-1.574358,-0.601570}, + {0.109701,-0.625894}, + {0.799278,-2.008089}, + {0.734900,1.439041}, + {-0.172757,0.297516}, + {0.123756,0.251462}, + {-0.605374,0.019162}, + {-0.277414,0.527217}, + {1.598600,-0.465976}, + {0.478046,-0.621558}, + {-0.032111,0.513916}, + {-0.406663,0.473997}, + {0.377026,-1.022417}, + {0.261630,-0.600598}, + {0.192450,-0.761462}, + {-0.945120,1.662247}, + {1.445931,-0.381166}, + {0.796386,-0.527247}, + {0.570342,-0.165144}, + {-0.260445,0.197738}, + {-0.396075,0.035099}, + {0.438589,0.193911}, + {0.279975,0.803087}, + {-0.718632,-0.043015}, + {-0.073136,-0.144147}, + {0.091844,-1.245899}, + {1.133630,1.064059}, + {0.333917,-1.059628}, + {-0.475974,0.272878}, + {1.618769,0.338515}, + {-0.026654,0.173819}, + {-0.832746,-1.291872}, + {1.459739,-1.787186}, + {0.152053,0.719499}, + {-0.845311,0.148728}, + {0.096770,0.236791}, + {0.788550,0.590381}, + {0.589643,0.130083}, + {0.556591,1.302659}, + {-0.149560,0.050103}, + {0.917707,-0.486145}, + {-0.059802,1.519826}, + {-1.072536,0.667091}, + {-0.111194,1.228050}, + {-0.229775,0.154698}, + {-0.371433,0.541268}, + {0.403110,0.104249}, + {-0.766373,-1.209893}, + {-0.133097,0.781221}, + {0.018198,-0.190757}, + {0.547760,-0.448064}, + {-0.733735,0.187525}, + {0.308738,0.575826}, + {0.120420,-0.748615}, + {-0.162974,-1.656815}, + {0.495299,1.294132}, + {0.284833,0.326106}, + {0.304357,-0.029696}, + {-0.114308,-0.998843}, + {1.147646,0.007336}, + {0.889660,0.377428}, + {1.101746,-0.075572}, + {-0.630002,0.224827}, + {-0.447421,-0.680766}, + {-0.398164,-0.758312}, + {1.162091,0.872670}, + {-0.153320,0.100257}, + {-1.053855,-0.142606}, + {-0.151297,-1.709248}, + {-0.088670,-0.030046}, + {-0.039511,-0.751111}, + {-0.268719,0.233002}, + {0.107060,0.944089}, + {-0.528369,0.218636}, + {0.379463,-1.271446}, + {0.845463,-0.200500}, + {0.449410,-0.308035}, + {-1.125393,-1.368811}, + {-0.707799,0.752393}, + {0.224584,0.957984}, + {-0.076844,-0.185815}, + {-0.276454,-0.875122}, + {-0.308372,-0.078258}, + {0.710906,-0.432983}, + {0.086967,-0.475256}, + {-0.484939,-0.239784}, + {0.527071,1.381910}, + {1.207738,0.764537}, + {-1.166732,0.156223}, + {-0.928368,-0.713470}, + {0.232623,0.248816}, + {0.234335,-0.713494}, + {0.506899,-0.538864}, + {0.923647,0.164175}, + {0.589798,0.487695}, + {-0.068928,-0.289141}, + {0.770468,0.393273}, + {-0.850038,1.509075}, + {-0.050092,-1.065967}, + {0.044840,-0.642072}, + {1.538218,-0.718189}, + {-0.483958,0.310072}, + {0.883513,0.423129}, + {0.577394,-0.913756}, + {0.369553,-0.000248}, + {1.306622,-0.676905}, + {-0.161439,-0.092252}, + {0.124913,0.545292}, + {-0.055785,-0.270095}, + {-0.654485,1.619946}, + {0.010064,-0.415884}, + {0.561868,-0.574773}, + {0.417682,0.121106}, + {0.447357,-1.403651}, + {0.036032,0.849953}, + {-0.310738,-0.139296}, + {-0.340548,1.709065}, + {0.324753,-0.829858}, + {-0.482715,1.278533}, + {0.027337,0.634282}, + {0.543259,-1.129644}, + {-0.176542,0.641092}, + {0.513499,0.270266}, + {0.592728,1.200615}, + {-0.168299,0.071350}, + {-0.028778,-1.609077}, + {0.100068,-0.177816}, + {0.179793,0.405800}, + {-0.550998,-0.189012}, + {-0.374629,-0.335207}, + {0.489373,-0.863435}, + {-0.909667,-0.243295}, + {-1.905582,0.828148}, + {-0.322044,0.578390}, + {0.172952,0.392945}, + {-1.349845,-0.593467}, + {0.385443,-0.834331}, + {-0.520047,-0.256327}, + {-0.168864,-0.011272}, + {0.705916,0.337266}, + {-0.613837,0.309663}, + {0.732870,0.082069}, + {-0.446717,0.037997}, + {0.503221,-0.919048}, + {-1.227801,-0.644395}, + {-0.110226,0.472814}, + {-0.153520,-1.426752}, + {-0.372143,-0.995245}, + {0.041903,1.617146}, + {-1.716966,-0.094746}, + {0.110050,0.506537}, + {0.441591,0.285438}, + {-0.422717,0.030475}, + {-0.546275,1.427064}, + {0.597491,-0.001582}, + {-0.227799,0.278393}, + {-0.711928,-0.389254}, + {-0.316276,-0.045449}, + {-0.246906,0.142129}, + {-0.017644,0.530840}, + {-0.846558,0.285732}, + {0.024601,1.550225}, + {0.135991,-0.281795}, + {1.076094,-0.393152}, + {0.469595,0.373539}, + {0.700686,-0.192217}, + {-1.044613,-0.031666}, + {-0.172857,0.037056}, + {0.216986,-0.221328}, + {1.202936,0.262729}, + {0.736136,0.660856}, + {0.310616,-0.895782}, + {0.756943,-0.860938}, + {0.491193,0.919560}, + {-0.391990,-1.038218}, + {0.630603,0.076034}, + {-1.672313,0.931548}, + {0.031370,-0.235708}, + {-0.059540,-0.730453}, + {1.751460,-0.083331}, + {-0.312742,1.042875}, + {-1.327894,-0.601739}, + {1.130657,-0.489036}, + {-0.578349,-0.452027}, + {0.442817,-0.010612}, + {0.568033,0.646896}, + {-0.209657,0.511084}, + {0.185712,-0.492029}, + {1.604476,-0.325909}, + {-0.804376,-0.713345}, + {-1.315856,0.385873}, + {-0.221093,1.328622}, + {-0.759605,0.387801}, + {0.152179,-0.162878}, + {-0.218474,-0.005204}, + {0.375890,-0.799244}, + {0.637063,-1.137409}, + {0.594361,0.315677}, + {0.645739,0.636245}, + {0.658041,-0.321056}, + {0.070071,1.391222}, + {0.721141,-0.400061}, + {-0.352948,0.195410}, + {-1.271695,0.849227}, + {-0.501393,-0.054339}, + {0.423696,1.085774}, + {-1.135309,0.703848}, + {-0.274176,0.653380}, + {-0.316789,-0.988309}, + {0.711998,1.178853}, + {0.467890,0.383039}, + {-0.361315,0.586150}, + {-1.992977,0.823878}, + {0.390939,0.167472}, + {0.110536,0.002095}, + {-1.247517,-0.665658}, + {0.121696,0.179633}, + {-1.365006,0.556461}, + {0.408822,-0.155980}, + {-0.730116,0.123973}, + {0.684268,-1.776762}, + {-0.649453,-0.171713}, + {-0.372612,-0.050829}, + {0.376350,0.556347}, + {-0.100789,-0.048297}, + {0.535745,-0.486194}, + {-0.461672,-0.184145}, + {0.397655,-0.685573}, + {-0.322562,-0.405548}, + {-0.139347,0.980121}, + {0.383183,-0.416704}, + {0.405772,0.305710}, + {1.287783,1.488584}, + {0.032704,0.960170}, + {-0.996629,-0.613880}, + {0.344951,0.741074}, + {0.012855,0.279797}, + {0.059268,0.437106}, + {1.099804,-0.690001}, + {2.066302,-1.011066}, + {-1.138329,0.358600}, + {0.915106,0.661313}, + {-0.890883,-0.368142}, + {-1.368238,0.378705}, + {-0.336150,0.507975}, + {-0.706113,0.234963}, + {-0.606888,-0.970039}, + {-0.527169,0.523949}, + {0.018031,-0.474310}, + {0.741809,-0.091430}, + {-0.009929,0.576888}, + {0.874371,0.333460}, + {-0.254588,0.654464}, + {0.261702,1.313061}, + {-1.277335,1.378973}, + {-0.138901,-0.173082}, + {0.924853,0.129874}, + {-0.387252,0.001449}, + {0.101334,-0.534299}, + {1.166440,-0.414895}, + {1.069226,0.257124}, + {0.900367,-0.135723}, + {1.218319,-0.472790}, + {0.508176,-0.583053}, + {0.556299,0.001431}, + {0.941767,0.240470}, + {1.019062,-1.238945}, + {-1.044413,0.547817}, + {0.739657,0.372119}, + {-1.127057,-0.032632}, + {1.021823,-2.155687}, + {0.154893,-0.768565}, + {0.222839,-0.891271}, + {-0.021271,-0.349137}, + {-0.498438,-0.404658}, + {0.713753,-1.281305}, + {0.516202,-0.400977}, + {0.375070,-0.381473}, + {0.611029,-0.695506}, + {0.329870,0.978420}, + {-0.440990,-0.627980}, + {1.106160,-0.673187}, + {0.330761,0.960060}, + {0.002016,-0.375526}, + {-0.418742,-0.230493}, + {0.889310,0.259182}, + {-0.743094,0.859461}, + {-0.639141,0.046149}, + {-0.825368,1.113567}, + {-0.183710,-1.099516}, + {-0.688241,0.048768}, + {-0.567826,0.016499}, + {-0.252604,-0.505972}, + {0.125737,-0.032586}, + {-0.289104,0.481842}, + {0.197078,-0.361814}, + {1.702697,-0.135121}, + {-0.313162,-0.195712}, + {0.373467,-0.638017}, + {0.265985,0.688793}, + {-0.930620,-0.543390}, + {0.266031,0.127381}, + {-1.131799,-0.707161}, + {0.294857,-1.044248}, + {0.844394,-1.509590}, + {-0.012985,0.455971}, + {0.934720,0.325752}, + {0.477097,-0.617656}, + {-0.186792,0.919832}, + {0.661168,-1.463831}, + {-0.052266,-0.007023}, + {-0.417000,-0.630278}, + {-0.201517,0.049327}, + {0.324582,0.488122}, + {-1.135622,1.088472}, + {-0.839457,0.576660}, + {0.776228,-0.246711}, + {-0.060646,0.204187}, + {-1.666099,-0.412724}, + {-0.302620,0.413709}, + {0.134609,-0.417098}, + {0.667218,-0.505744}, + {0.310204,-0.163001}, + {2.227881,0.439271}, + {-0.402395,-0.165319}, + {-0.381247,0.233719}, + {-0.070232,-0.083912}, + {0.705271,0.505574}, + {-0.574528,-0.237527}, + {-0.097888,0.687548}, + {-0.287092,-0.392327}, + {0.771057,-2.105183}, + {-0.424797,-0.712019}, + {-1.141051,-0.262563}, + {1.245465,-0.173175}, + {-0.809671,0.478984}, + {0.420857,-1.118626}, + {-0.774501,0.206551}, + {-0.371353,-0.523965}, + {-0.475349,0.782751}, + {0.354270,0.297627}, + {0.429063,-0.301249}, + {-0.253951,-0.024314}, + {0.542049,0.210328}, + {-1.288145,0.902746}, + {-0.610673,-0.457713}, + {0.560486,-0.045507}, + {1.012326,0.160808}, + {0.739327,0.227113}, + {0.440689,-0.364347}, + {0.043907,-0.902520}, + {0.107084,-0.850966}, + {-0.864312,-0.936915}, + {-0.983595,1.279503}, + {-0.826804,-0.510867}, + {0.410159,-0.166249}, + {0.234942,0.048679}, + {-0.440864,-1.871740}, + {-0.277232,0.058905}, + {0.865167,-1.085117}, + {0.323421,0.865950}, + {0.078567,0.487181}, + {-0.106628,0.112398}, + {-0.701141,-0.631292}, + {-0.241547,-0.907031}, + {-1.058655,1.194515}, + {-0.245933,-0.291151}, + {0.090384,-0.078327}, + {-1.804471,0.305652}, + {-0.710208,-0.044177}, + {-1.637185,0.634789}, + {0.322701,0.202198}, + {0.592642,0.027099}, + {0.106661,0.220082}, + {0.374884,0.031143}, + {0.466431,0.144924}, + {-0.435113,-0.045018}, + {-0.812143,0.850339}, + {-0.723946,0.392704}, + {-2.151521,-0.712553}, + {0.450893,-0.280685}, + {0.819631,0.669219}, + {0.173790,-0.823862}, + {1.252888,-0.450119}, + {-0.760925,0.126633}, + {0.100797,0.669706}, + {0.636397,0.644360}, + {0.314358,0.426072}, + {0.399418,-0.772800}, + {-0.648593,-0.341262}, + {-0.247134,0.264055}, + {1.077773,0.975354}, + {0.523563,-0.791219}, + {-0.796902,-0.163962}, + {-0.615911,0.149349}, + {0.954916,-1.262222}, + {0.678034,1.207517}, + {-0.372992,-0.431473}, + {-1.124813,-1.597092}, + {-0.447033,-0.087720}, + {-0.720631,0.709710}, + {0.384703,0.910101}, + {-0.247341,-1.476532}, + {-1.241862,1.322373}, + {-0.310325,0.816418}, + {-0.050700,-0.416219}, + {0.309471,-0.192610}, + {0.371081,0.778064}, + {-0.510419,-1.055190}, + {0.127094,0.388637}, + {-0.255658,-0.020784}, + {-0.239095,-0.235771}, + {0.860355,0.144748}, + {0.175697,0.666209}, + {0.161710,-1.018808}, + {0.208616,-0.113253}, + {0.322261,-0.153970}, + {0.115609,0.527421}, + {-1.142425,-0.174532}, + {-0.867659,-0.160025}, + {0.702013,-0.499588}, + {-0.305717,-0.468403}, + {1.015578,-0.486232}, + {0.012654,0.647932}, + {0.650411,0.663774}, + {0.064881,0.712345}, + {-0.408083,-0.026499}, + {0.129269,0.557035}, + {-1.311066,0.784364}, + {-0.811294,-0.539442}, + {-0.783403,-0.385913}, + {0.661821,0.125770}, + {-0.659564,0.069575}, + {0.995148,0.349592}, + {0.148861,-0.577855}, + {1.019181,-0.324607}, + {0.569564,-0.397281}, + {0.908002,0.954231}, + {1.214742,-0.616921}, + {-0.173224,0.454581}, + {-2.116294,-0.837803}, + {-0.363546,0.105419}, + {0.440872,0.067274}, + {-0.101457,0.086710}, + {0.335032,1.011214}, + {-0.212784,1.709394}, + {-0.609104,0.294062}, + {0.257849,-0.420324}, + {-1.753260,-0.996065}, + {0.233278,0.392532}, + {0.347599,0.585661}, + {0.445643,-0.462247}, + {1.049963,0.117133}, + {0.839655,-0.356217}, + {0.703241,0.033581}, + {0.271280,-0.196860}, + {0.065959,-0.921553}, + {0.405906,-0.688962}, + {0.098046,0.333902}, + {-0.014572,0.211136}, + {-0.737884,0.177744}, + {-0.649906,-1.604793}, + {0.293595,0.706452}, + {-0.066643,1.517094}, + {0.441195,-0.173964}, + {1.195227,0.123771}, + {-1.135443,-1.413717}, + {0.006356,-1.017804}, + {0.722946,0.103556}, + {-0.003354,0.488708}, + {0.474062,0.159755}, + {0.324770,0.895972}, + {-0.553939,0.154297}, + {-0.103416,0.898922}, + {-1.072220,-0.410260}, + {-0.053047,-0.030047}, + {0.070087,-0.725415}, + {0.165223,-0.558910}, + {0.782904,-0.136372}, + {-0.041688,-0.135373}, + {0.334520,-0.033481}, + {0.801873,-0.133751}, + {0.209301,0.597294}, + {0.618379,1.223616}, + {0.888198,-0.672384}, + {-1.214205,0.041896}, + {-0.207532,-0.540674}, + {0.992363,-1.169905}, + {0.940801,-0.242385}, + {-0.708174,0.635987}, + {-0.369966,0.143612}, + {1.281108,0.086508}, + {0.250887,-0.332167}, + {-0.515793,-0.631672}, + {1.136276,0.346349}, + {-0.464252,1.668219}, + {0.525805,-0.141030}, + {0.999260,1.590780}, + {0.605581,-0.060022}, + {1.056390,-0.048178}, + {-0.968752,0.185265}, + {-1.340377,-0.330139}, + {-1.046545,0.051473}, + {-0.450882,0.258781}, + {0.243010,0.998613}, + {0.421506,-0.706489}, + {0.656187,-0.851819}, + {-1.749329,-0.182724}, + {0.266263,0.302166}, + {0.344290,-0.491448}, + {0.946706,1.671205}, + {1.056879,-0.219540}, + {0.627745,-0.729454}, + {0.433355,-0.250281}, + {-0.200019,-1.300245}, + {1.255424,-1.022037}, + {-0.061801,-0.646340}, + {-0.232252,0.533970}, + {-0.395477,0.369443}, + {-0.623953,-0.526531}, + {-0.820382,1.716970}, + {0.140594,0.061758}, + {-1.036810,0.403211}, + {-0.469993,-0.107368}, + {1.205792,0.275994}, + {0.959943,0.019721}, + {0.573598,0.123293}, + {-1.420059,-1.132904}, + {0.290727,0.167288}, + {0.365799,0.542990}, + {0.516968,-0.612634}, + {0.160027,-0.390477}, + {-0.347292,0.029547}, + {-0.004609,1.121404}, + {-0.335175,-0.015666}, + {0.908113,0.229171}, + {0.545009,1.480549}, + {-1.220973,1.093788}, + {0.479628,-1.425169}, + {-0.513786,1.062727}, + {0.357421,-0.804394}, + {-1.061941,0.223873}, + {-0.385252,0.110396}, + {-1.640287,-0.021951}, + {0.623028,-0.060477}, + {-0.550756,0.678768}, + {0.135673,0.837449}, + {0.751838,-0.180054}, + {0.954815,-0.866757}, + {0.604536,1.476877}, + {-0.286459,0.372774}, + {0.376627,-0.910916}, + {1.217027,0.101736}, + {0.011181,-0.874826}, + {-0.722030,0.489939}, + {0.311409,-0.260903}, + {0.226439,-0.416559}, + {-0.217666,0.618687}, + {-0.882251,-0.420330}, + {0.562126,-0.226552}, + {-0.133127,-0.134644}, + {0.969153,-0.508304}, + {0.405205,-0.871967}, + {-1.017625,0.079112}, + {-0.736203,-0.949411}, + {0.250579,0.868592}, + {0.584736,0.487773}, + {-0.200735,0.406254}, + {-0.169967,-0.174164}, + {-0.926833,-0.008126}, + {-1.276335,-0.436210}, + {-1.055847,-0.464811}, + {1.382819,-0.892263}, + {0.549810,-0.254992}, + {-1.222183,-0.947043}, + {0.548589,-0.517754}, + {0.330987,1.018993}, + {0.025173,0.069526}, + {0.574042,-1.129914}, + {1.165371,-0.221953}, + {-0.047741,-0.296772}, + {0.651998,0.263669}, + {-0.694023,0.443470}, + {-0.956615,-0.672689}, + {0.016381,-0.458048}, + {0.982982,-0.048522}, + {0.181067,-0.514465}, + {-0.391139,-0.223578}, + {0.161096,-0.653129}, + {-0.351802,-0.290479}, + {-0.314563,0.489580}, + {-0.146600,0.217679}, + {-0.626463,-1.314274}, + {-0.425276,0.036105}, + {0.653590,-0.842355}, + {0.326039,-0.509672}, + {-0.469673,0.286035}, + {-0.123351,0.467094}, + {0.413046,1.210950}, + {-1.022797,-0.785435}, + {0.675002,0.772235}, + {-0.862771,-0.220066}, + {-0.231169,-0.567071}, + {-0.022879,-1.662436}, + {0.191818,-0.220743}, + {-0.011754,-1.811256}, + {0.535316,-0.223392}, + {0.073030,1.008182}, + {0.433603,1.040546}, + {0.057488,-0.260627}, + {-0.750304,-0.190874}, + {-1.484162,-0.249188}, + {0.555514,-0.171803}, + {0.541373,0.623842}, + {-0.324439,-0.112460}, + {0.079769,-0.353481}, + {0.330382,1.054412}, + {-0.106034,0.995793}, + {-0.382467,0.382232}, + {-0.036929,-0.393942}, + {0.511558,-1.203157}, + {-0.669114,-0.507821}, + {-0.717810,-0.040914}, + {-1.754621,0.344004}, + {-0.597845,-1.199356}, + {1.760979,0.700903}, + {0.625006,-0.444735}, + {-0.348717,-0.247748}, + {0.174249,0.142504}, + {0.819233,0.294173}, + {-0.031325,-0.221121}, + {0.591852,0.560305}, + {-0.018918,-0.672425}, + {0.779234,-0.181712}, + {-1.059580,0.442549}, + {-0.326264,1.377449}, + {-0.788614,-1.350767}, + {0.216709,0.414704}, + {0.220819,0.108199}, + {-0.359007,0.600802}, + {-0.309663,0.778317}, + {0.757247,0.732882}, + {-0.492180,0.313444}, + {-0.869761,-1.301811}, + {-0.125626,-0.676394}, + {0.295449,-0.241053}, + {1.054322,0.797473}, + {-0.287078,-0.504316}, + {-0.537100,-0.231610}, + {0.613905,-0.234007}, + {0.741154,0.141237}, + {0.626367,-0.853201}, + {0.755579,-0.402972}, + {0.791054,0.600208}, + {-0.063499,-0.518131}, + {-0.489265,-0.036842}, + {-0.949063,0.023314}, + {-0.515292,-0.340645}, + {1.479585,0.191550}, + {-0.606714,-0.320708}, + {0.466669,0.522580}, + {-0.863079,1.451320}, + {0.528683,0.847398}, + {0.542235,-0.755739}, + {0.118265,0.135243}, + {-0.740312,-0.861944}, + {-0.435756,0.830366}, + {-0.109372,-0.213866}, + {-0.553930,-0.845500}, + {-1.099287,-0.297620}, + {0.106898,-0.424559}, + {-0.378716,0.193142}, + {0.213494,1.033237}, + {-0.853118,-0.760434}, + {-0.206960,0.322096}, + {0.515476,-0.382595}, + {-0.452647,0.010086}, + {-0.802250,-0.678852}, + {0.294123,0.686175}, + {0.858965,0.189241}, + {0.605752,-1.104271}, + {1.481873,0.508996}, + {-1.116676,0.289812}, + {-0.707222,-0.382630}, + {-0.079025,1.156617}, + {0.639524,-0.001944}, + {-0.088679,-1.253192}, + {-0.321477,0.741010}, + {0.995588,-0.064482}, + {-0.881360,1.360842}, + {-0.297000,-0.072434}, + {0.060998,0.138554}, + {0.421436,-0.022213}, + {0.600608,-0.843743}, + {-0.093266,-0.799977}, + {-0.270330,-0.551698}, + {-0.586570,0.075585}, + {0.535896,-0.937339}, + {-0.196885,-1.152215}, + {-0.824956,-0.668942}, + {-0.259150,0.564970}, + {1.163106,-0.343775}, + {-0.211627,0.887391}, + {-1.519484,-0.692918}, + {0.630723,-0.711066}, + {-0.804122,-0.662480}, + {0.839553,1.605451}, + {-0.326213,0.368434}, + {0.059140,-1.102124}, + {0.237029,0.146990}, + {-0.696770,-0.008057}, + {-1.171176,0.075899}, + {-0.147349,0.040450}, + {0.129807,-1.078745}, + {-1.346480,-0.102841}, + {1.923088,-0.340920}, + {0.604509,-0.631306}, + {0.830188,0.900687}, + {-0.244172,-0.131295}, + {-1.297096,0.273955}, + {-0.851825,1.248525}, + {-0.198894,-0.720303}, + {0.603852,0.405432}, + {0.164840,0.543281}, + {1.671773,0.067980}, + {0.038583,0.297031}, + {0.507509,-0.744625}, + {0.359393,0.748717}, + {-0.212608,-0.358101}, + {0.126437,1.165712}, + {-0.248434,-0.585575}, + {-0.263564,1.882286}, + {0.197666,-0.007268}, + {1.382641,-2.141275}, + {0.372177,-1.454355}, + {-1.179644,0.104261}, + {1.106674,-0.282933}, + {-0.265928,-0.626704}, + {-0.561107,0.452555}, + {-1.300538,0.287714}, + {-1.015374,0.573758}, + {-0.607617,-0.309770}, + {-0.023152,-0.760109}, + {-0.194123,0.599047}, + {0.647420,-0.037263}, + {0.106358,0.238426}, + {-0.392097,0.094144}, + {0.661177,0.412145}, + {-1.399599,1.957816}, + {0.148234,0.471031}, + {0.286092,0.528837}, + {-0.391787,0.921074}, + {0.195292,0.118754}, + {-0.136761,0.298155}, + {-0.378985,-0.604095}, + {1.371422,-0.622111}, + {0.857070,0.509011}, + {0.066269,-0.029824}, + {-1.377703,0.529433}, + {-0.694186,-0.441324}, + {-0.257793,1.275458}, + {-0.672277,-0.654115}, + {-0.809306,0.145106}, + {0.670659,-0.012692}, + {0.157773,0.013152}, + {-0.462958,-0.012297}, + {0.827130,1.661564}, + {0.397882,0.120724}, + {1.117614,1.225687}, + {0.476878,0.490050}, + {0.724769,1.113002}, + {0.586609,-0.560797}, + {-1.361147,0.474845}, + {-0.007226,0.580620}, + {-0.701521,0.864232}, + {0.994535,0.306268}, + {0.370349,1.237807}, + {-0.242788,-1.443067}, + {0.473815,-0.479609}, + {-0.389546,0.026009}, + {-0.338480,0.878802}, + {0.435504,-0.420076}, + {0.889075,0.161873}, + {0.138696,-0.566162}, + {0.217055,0.953271}, + {0.839538,0.048184}, + {-0.059206,-1.142293}, + {0.665060,-0.676547}, + {0.221557,0.086282}, + {-1.173015,0.335912}, + {0.457360,-0.040303}, + {0.575889,-1.213594}, + {0.658439,-0.011276}, + {-1.457696,-0.189237}, + {-0.800412,0.566585}, + {-0.102734,-0.661830}, + {-0.348242,0.424874}, + {0.353335,1.852790}, + {1.435363,0.984674}, + {0.405182,-0.313471}, + {-0.641495,1.885674}, + {1.945466,1.286943}, + {-1.031042,-0.000691}, + {-0.513774,-1.070626}, + {1.364844,-0.285854}, + {-0.121790,-1.095977}, + {-1.249687,0.021067}, + {-0.075555,0.781338}, + {0.954208,-0.915902}, + {-1.027627,-0.406509}, + {-1.513386,0.885096}, + {-0.487952,-0.456337}, + {-1.052057,0.867359}, + {-0.145713,0.278056}, + {-0.756226,-0.964303}, + {-0.446097,-0.089467}, + {0.169928,-0.361224}, + {0.397326,-0.307696}, + {-0.034144,-0.246857}, + {-0.696100,-0.538312}, + {-0.534972,0.210185}, + {0.816251,-0.647654}, + {-0.705987,-0.908852}, + {-0.615467,-1.097666}, + {-0.159338,-0.149510}, + {-0.937470,0.880936}, + {-0.320957,-0.048574}, + {-0.372401,-0.285898}, + {-0.358402,-0.568311}, + {0.708385,-1.254534}, + {0.829644,0.011912}, + {0.285381,-1.031588}, + {0.017740,-0.349993}, + {-0.022239,-0.439243}, + {-1.430300,-0.497895}, + {0.170766,-0.701765}, + {0.175088,0.629816}, + {-0.098450,0.984733}, + {-0.506275,0.273047}, + {0.386685,0.226191}, + {-0.849597,0.026814}, + {0.331172,-0.400903}, + {-0.166717,0.322664}, + {0.840811,0.163583}, + {-1.492836,0.838920}, + {-1.518271,0.133282}, + {0.411785,0.665886}, + {-1.288775,0.573578}, + {-0.679826,0.216065}, + {1.072059,0.678109}, + {0.327039,0.057915}, + {0.748172,-1.016021}, + {0.766777,0.338616}, + {-0.154979,1.088221}, + {-0.233660,-0.592573}, + {0.733229,-0.356964}, + {-0.716623,0.333791}, + {0.201190,-0.773714}, + {0.312616,-0.148537}, + {0.290474,-0.743141}, + {-0.227709,-0.668733}, + {-1.515149,1.270848}, + {0.226198,-0.729829}, + {-0.181346,-1.271070}, + {-1.045326,-0.092295}, + {1.642772,-1.645010}, + {1.017090,-1.591010}, + {0.095373,-1.289559}, + {1.964387,0.348377}, + {-0.950861,0.367564}, + {0.556953,0.768761}, + {-0.203486,0.439205}, + {0.491570,0.168439}, + {-0.687148,-0.295486}, + {-0.740794,-0.566119}, + {-0.024076,0.456466}, + {0.109395,-0.274543}, + {-0.793800,-1.014024}, + {0.292454,0.541633}, + {-0.595307,0.963837}, + {-0.657843,-0.867296}, + {0.204862,-0.344086}, + {-0.578269,-0.345403}, + {-0.780437,-0.385625}, + {-0.273820,0.505994}, + {1.004484,-0.156356}, + {-0.868964,0.266448}, + {0.143031,-0.803470}, + {0.101618,-0.081850}, + {0.193181,-0.062062}, + {-0.861275,0.852923}, + {0.288135,-0.426406}, + {-0.928134,0.099686}, + {-0.181721,1.615686}, + {-0.136660,0.020212}, + {0.072772,0.114802}, + {0.202198,-0.238392}, + {-0.251007,0.316880}, + {0.349716,-0.792136}, + {-1.213064,-0.842004}, + {0.862678,-0.028549}, + {-0.973473,0.006869}, + {0.233388,-0.345947}, + {1.041065,0.708671}, + {0.324049,-1.771873}, + {-0.185275,0.653364}, + {0.628341,0.054329}, + {-0.164341,0.487005}, + {0.393343,-0.037375}, + {-0.532730,1.366482}, + {0.106510,0.798337}, + {-0.801100,-0.368808}, + {0.492501,-0.594827}, + {-0.157276,-0.210969}, + {1.430722,-0.123353}, + {0.869858,-0.330376}, + {-0.870905,-0.576319}, + {0.488152,-0.077766}, + {-1.352852,-0.983699}, + {-0.071516,0.008669}, + {0.038294,-0.659775}, + {-0.638838,-1.453811}, + {0.365078,0.936548}, + {-0.176761,0.029567}, + {-0.637139,0.811721}, + {0.199638,-0.298378}, + {-0.555570,0.019142}, + {-0.091645,0.610158}, + {0.877453,0.174360}, + {-0.568953,0.103565}, + {-0.832229,0.324979}, + {0.712774,0.870009}, + {-0.278872,-0.588582}, + {0.435542,0.494374}, + {-0.065868,0.021952}, + {1.423758,-0.393834}, + {-0.477059,0.827165}, + {0.627414,-0.276227}, + {1.000520,0.682515}, + {0.607696,0.206943}, + {-0.154464,0.495945}, + {-0.124329,-0.829138}, + {-0.087112,-0.220509}, + {-0.465875,-0.382839}, + {-1.017272,0.487396}, + {-0.547511,0.237748}, + {-0.038977,0.393638}, + {1.026923,-0.597241}, + {-0.621617,-0.717375}, + {0.667387,0.914740}, + {-0.608364,-0.851361}, + {0.615870,0.510211}, + {0.292743,0.514543}, + {0.347583,1.275365}, + {0.200986,-0.420921}, + {1.374615,-0.215986}, + {-0.414803,0.434964}, + {-1.476929,-1.362368}, + {0.636865,0.488148}, + {1.114926,0.262444}, + {0.082692,-0.670997}, + {1.966723,1.124746}, + {-0.046586,-1.173584}, + {-0.363377,-0.208166}, + {0.501587,0.594431}, + {-0.168038,0.767871}, + {0.323440,0.680381}, + {1.067349,0.560431}, + {-0.772885,-1.138626}, + {0.518494,0.322721}, + {0.685843,-0.056191}, + {0.787104,-0.784384}, + {0.609174,-0.220906}, + {-0.006505,0.671218}, + {0.460238,-0.684338}, + {0.438095,1.508562}, + {0.009417,0.237749}, + {0.393314,1.196541}, + {-0.583606,1.070722}, + {-0.169269,-0.926174}, + {-0.066992,-0.301332}, + {0.497741,-1.198867}, + {-1.090838,0.548678}, + {-0.004155,-0.024343}, + {-0.612437,-0.656401}, + {-0.663257,-0.093885}, + {-0.174069,0.911494}, + {0.367565,0.610990}, + {-0.144097,-0.435430}, + {1.104616,-1.845717}, + {-0.972594,0.334831}, + {-0.794574,-0.392847}, + {0.311997,0.561151}, + {0.586292,-0.042105}, + {-1.605228,-0.279692}, + {-0.382017,2.388282}, + {1.055212,0.335750}, + {0.209281,0.138650}, + {-0.385178,-0.272430}, + {0.548245,-0.025245}, + {-0.638262,-0.021417}, + {-1.294383,-0.197757}, + {0.423815,0.591952}, + {-0.071987,-0.562847}, + {-0.126977,1.038596}, + {0.496448,0.840634}, + {-1.185477,0.042048}, + {-0.823043,-0.368610}, + {1.008274,-0.231597}, + {-0.660260,0.296490}, + {-0.743515,0.208480}, + {0.379941,-1.003447}, + {0.968945,0.294877}, + {-0.698481,-1.144907}, + {-1.162786,0.387927}, + {-0.293235,0.428785}, + {0.718636,-0.315848}, + {0.107103,-0.828505}, + {0.356476,-0.645877}, + {0.505071,-0.331163}, + {-0.649298,-0.398312}, + {-0.090610,-0.074341}, + {0.200451,-0.421806}, + {0.908067,-0.168388}, + {-0.846288,0.033026}, + {-0.189659,-0.925072}, + {-0.023812,0.459475}, + {1.602866,0.714233}, + {-0.575714,-0.238446}, + {0.846762,-0.832419}, + {0.120918,0.182480}, + {-0.570597,-0.373300}, + {0.419728,0.612563}, + {-0.320002,-0.948555}, + {0.318035,-0.186493}, + {-0.127286,0.112951}, + {-0.141023,0.135715}, + {1.060583,0.677137}, + {0.101330,0.199317}, + {0.803035,-0.452390}, + {-0.340576,0.650283}, + {0.902556,-0.144691}, + {-0.893404,0.858889}, + {-0.007600,-0.345112}, + {0.111926,-0.168442}, + {1.039893,-0.469075}, + {0.240538,-0.826278}, + {0.826768,0.578478}, + {1.046184,0.665426}, + {0.038550,0.215966}, + {-0.635648,0.508181}, + {-0.146230,0.638788}, + {-0.362399,-0.629495}, + {0.542586,0.843847}, + {0.167182,-0.792296}, + {-0.855717,0.083743}, + {-1.036334,-0.085065}, + {-0.324723,-0.030988}, + {-1.833660,-0.410648}, + {-0.001357,-0.829866}, + {-0.104752,-0.284616}, + {-0.816835,-1.210435}, + {-0.052255,-0.543345}, + {-0.367505,0.092323}, + {-0.736559,-0.520296}, + {0.201749,0.054396}, + {-0.199049,0.602651}, + {0.404682,-0.309862}, + {-0.317471,1.036744}, + {-0.098938,-0.818030}, + {-0.814101,-1.260633}, + {0.763575,0.457821}, + {0.358938,-0.131199}, + {-0.301845,0.650210}, + {-0.029168,-0.595484}, + {-0.369691,0.223720}, + {0.194581,0.025750}, + {-0.460265,0.156045}, + {0.305830,0.208558}, + {0.223866,0.641668}, + {0.026609,0.558788}, + {0.356247,0.373533}, + {0.237883,-1.069953}, + {0.147891,-0.805516}, + {0.188977,-0.068435}, + {0.292733,-0.380567}, + {0.221952,1.563443}, + {0.345474,-0.145997}, + {0.562837,0.992170}, + {0.931969,1.306009}, + {1.241908,0.118149}, + {0.565906,-0.246496}, + {-0.585196,0.203570}, + {0.711276,-0.200387}, + {-0.376149,0.513875}, + {1.192035,-0.156803}, + {-0.862564,0.588024}, + {0.388852,-1.356642}, + {0.725190,0.687537}, + {0.257052,0.151601}, + {0.411402,0.594166}, + {-0.047136,-1.330878}, + {1.164207,-0.046186}, + {-0.200303,0.780709}, + {-1.433552,0.524817}, + {0.560902,0.219424}, + {1.472746,0.370998}, + {0.004523,0.852842}, + {-0.707314,-0.502471}, + {-0.705225,-0.568235}, + {-1.031248,0.407625}, + {1.060594,0.382613}, + {1.464419,-0.586019}, + {-0.605902,-0.458757}, + {0.929307,0.153506}, + {-0.016372,0.282450}, + {-1.208132,-0.830801}, + {-0.126240,-0.367972}, + {-0.499330,0.674812}, + {1.438503,0.217270}, + {0.740691,0.305890}, + {-0.108512,0.515161}, + {-0.078081,-0.658439}, + {0.032558,-0.295751}, + {-0.340864,-0.476425}, + {-0.013541,1.071300}, + {-0.316971,0.276887}, + {-0.154365,-0.266247}, + {0.612401,0.295050}, + {0.668963,-0.540567}, + {0.158289,0.472776}, + {-0.166571,1.587298}, + {-0.159732,0.238475}, + {0.347017,0.964527}, + {0.004723,1.073330}, + {0.829038,-0.522273}, + {-0.541649,0.245743}, + {-0.766282,-1.376811}, + {1.171373,-0.879527}, + {0.569829,0.378677}, + {0.416307,0.145570}, + {-0.123077,-0.283547}, + {-0.896898,0.201798}, + {-0.435349,-0.464885}, + {1.650033,0.637224}, + {0.965961,0.150970}, + {1.166701,0.751840}, + {-0.127525,0.401022}, + {0.092153,0.492356}, + {-0.022106,0.491025}, + {0.385129,1.227755}, + {-0.436923,0.728795}, + {-0.022073,-0.802340}, + {1.216361,-1.280683}, + {-0.519844,-0.069400}, + {0.409208,-0.807452}, + {-0.368572,0.226689}, + {0.076268,0.839854}, + {0.287471,-0.764709}, + {1.363614,0.454507}, + {-1.102576,0.253968}, + {-0.046986,-0.270808}, + {-0.736602,0.092040}, + {1.165091,-0.216918}, + {0.127164,0.453077}, + {-0.886593,0.861856}, + {0.158112,-0.594493}, + {-0.030994,0.470361}, + {-0.261688,0.126497}, + {0.600867,0.028243}, + {-0.982395,0.004090}, + {-0.507128,-0.005293}, + {-0.731200,-1.445173}, + {-1.293737,-0.514366}, + {0.105943,-0.405240}, + {0.207327,-0.755563}, + {-0.023598,0.754680}, + {1.402186,-0.206298}, + {-0.127333,0.036313}, + {1.399904,-0.297810}, + {-0.974748,0.286854}, + {1.124209,1.335946}, + {-0.128752,0.673476}, + {0.713310,0.757828}, + {-0.843100,-0.537106}, + {-0.715673,0.477791}, + {-0.382188,-0.826056}, + {0.390282,-0.250610}, + {0.514525,1.058072}, + {-0.896554,1.141563}, + {0.829613,0.348516}, + {0.238624,0.417594}, + {-0.105300,-1.182838}, + {1.532616,-0.028817}, + {-0.894122,-0.090487}, + {-0.389445,0.360247}, + {1.821895,0.589262}, + {-1.125450,0.413939}, + {0.161053,1.207355}, + {-0.222854,0.366948}, + {0.533803,0.516122}, + {-0.531179,-0.721872}, + {-0.763610,0.387296}, + {-1.006094,-0.714480}, + {-0.053524,2.039535}, + {0.715739,-0.315490}, + {0.112799,-0.374255}, + {0.012495,-0.075747}, + {0.777265,-1.168285}, + {-0.030666,-0.933422}, + {-0.621612,0.877107}, + {1.613176,-0.222628}, + {0.762815,0.849391}, + {-0.616282,0.927940}, + {-0.508595,-0.736129}, + {-0.282486,0.049873}, + {0.685474,-0.516179}, + {-0.167842,-1.278946}, + {-0.341434,0.561593}, + {-0.450187,0.553444}, + {-0.284804,0.812548}, + {0.660818,0.289406}, + {-0.851014,-1.087384}, + {-0.046101,1.015682}, + {-0.127992,-0.773456}, + {0.306108,-0.585527}, + {0.058395,1.365709}, + {-1.008366,-0.490221}, + {0.982199,0.335153}, + {-0.577732,0.243236}, + {0.835171,1.062171}, + {0.861717,-0.878783}, + {0.076238,0.653993}, + {0.882457,-1.182033}, + {0.395471,0.707660}, + {0.175015,0.113237}, + {-0.326660,-0.420746}, + {-0.270266,-0.064866}, + {1.219132,0.257211}, + {0.532239,-1.366118}, + {-0.063139,0.364975}, + {-0.538459,-0.301802}, + {-0.066699,1.443469}, + {1.349248,-0.063832}, + {0.640151,-0.177954}, + {-0.281434,-0.418631}, + {0.205809,0.035216}, + {-0.593818,-0.007308}, + {0.083672,-0.018417}, + {0.229748,-1.197985}, + {0.617426,-0.238514}, + {0.627780,1.027152}, + {-0.525954,0.502738}, + {-0.494039,0.268553}, + {-0.565555,1.133933}, + {0.692407,-0.156891}, + {-1.132269,-1.404156}, + {0.952331,0.232551}, + {0.542762,0.026346}, + {-0.223407,-0.463245}, + {-0.889800,-1.076883}, + {1.183630,0.315594}, + {-0.424457,-2.145227}, + {2.273507,0.093040}, + {1.217376,-0.209756}, + {-0.118041,0.061581}, + {-0.281683,-0.337646}, + {0.681924,-0.618740}, + {0.366107,0.349009}, + {0.162105,-0.360180}, + {0.626527,-0.551253}, + {-0.406674,1.130650}, + {-0.210328,-0.182414}, + {0.362503,-0.512021}, + {-0.628315,-0.024001}, + {0.504299,0.803734}, + {1.120537,0.920166}, + {0.908672,-0.033387}, + {-0.253838,1.298045}, + {0.481005,0.131980}, + {-0.135943,0.437193}, + {0.267186,0.026759}, + {0.542714,-0.264004}, + {-1.206726,-0.419685}, + {-0.699274,0.238968}, + {0.463989,-0.510916}, + {0.043349,-0.214415}, + {0.160823,0.541792}, + {-0.242431,-0.210894}, + {0.511331,-0.176104}, + {1.048913,0.488046}, + {0.365260,-0.066836}, + {-1.066309,-0.093985}, + {0.542119,0.501833}, + {-1.244972,-0.372142}, + {-0.753972,-0.096356}, + {-0.291842,0.016194}, + {-0.477053,-0.804632}, + {-0.078449,-0.379581}, + {0.753739,-0.537456}, + {0.100513,-0.310604}, + {1.368776,0.717445}, + {0.764968,-0.075108}, + {0.053403,0.448399}, + {0.582609,-0.788861}, + {0.049464,-0.413320}, + {-1.015383,-0.153174}, + {-1.441094,1.226203}, + {-0.935850,0.636812}, + {0.714004,-0.531381}, + {-0.467397,0.354665}, + {-0.132670,0.678550}, + {0.491754,-0.263982}, + {0.137027,-0.063034}, + {-0.320801,0.061453}, + {-0.682060,0.697585}, + {0.772583,-0.400500}, + {-0.702765,0.154811}, + {0.248536,-0.291513}, + {1.213524,-1.416038}, + {-0.169976,-0.794819}, + {0.012138,0.740188}, + {0.700987,-0.962213}, + {0.654398,1.372495}, + {0.267751,0.491715}, + {0.380491,-0.409166}, + {0.697133,-0.296663}, + {-0.210519,0.303294}, + {-0.557089,0.942688}, + {0.250830,0.597076}, + {0.836891,0.383697}, + {-0.781979,-1.371013}, + {-0.312390,-0.764450}, + {-0.475572,0.060645}, + {0.756715,-0.479073}, + {-0.018402,0.967757}, + {-1.118602,0.402060}, + {-0.050789,0.033776}, + {-0.378991,-0.301264}, + {0.550866,-0.472333}, + {0.695695,-0.564736}, + {-1.022700,0.001319}, + {-0.995349,-0.179992}, + {-0.160696,-0.561579}, + {-1.238996,1.005039}, + {0.164585,0.869884}, + {-0.474996,0.425370}, + {-0.437417,1.116224}, + {-0.429658,0.009218}, + {-0.525544,-0.272148}, + {0.695156,-0.102539}, + {-0.850466,-0.358257}, + {0.079718,-1.212420}, + {0.484277,0.505628}, + {0.433427,0.521144}, + {1.357588,-0.280115}, + {-1.050502,0.461743}, + {0.092603,0.569536}, + {0.031757,0.460663}, + {-0.412955,0.613726}, + {-0.236422,-0.089493}, + {0.459335,0.304540}, + {-0.753505,-0.235785}, + {0.355571,-0.811544}, + {0.221435,-0.954573}, + {-2.346443,1.114150}, + {-0.490478,0.349986}, + {-0.652118,0.839932}, + {0.946405,-0.288780}, + {0.892454,0.348067}, + {0.154899,0.070845}, + {-0.145795,0.359580}, + {1.398316,-0.468739}, + {1.048537,0.085309}, + {-0.840074,-0.159959}, + {-0.514107,0.060504}, + {-1.325402,-0.340374}, + {0.838967,0.991954}, + {-1.218276,-1.408265}, + {0.335541,-0.565783}, + {-0.954269,0.937467}, + {-0.559335,-0.134362}, + {1.943719,-1.403866}, + {-0.460487,-0.682805}, + {0.681467,-0.850286}, + {-0.644147,0.907500}, + {-0.369335,0.124141}, + {-0.290076,-0.249195}, + {-1.372572,0.399371}, + {-0.216078,0.112425}, + {0.202706,-0.571132}, + {0.007932,0.238452}, + {0.622883,-0.361681}, + {-1.659769,-0.052142}, + {0.913395,-0.548796}, + {-1.546375,-0.177939}, + {0.033195,0.124151}, + {-1.002228,0.568683}, + {-0.552731,-0.057954}, + {-1.386417,-0.250903}, + {-0.685426,0.169422}, + {-0.419053,-0.687470}, + {0.203790,1.177844}, + {0.101606,0.434861}, + {1.212102,-1.394154}, + {-0.376188,0.550320}, + {0.845756,0.440839}, + {0.313480,-0.822269}, + {-0.806734,-0.209968}, + {0.235863,-0.633919}, + {-0.345711,-1.139946}, + {0.420142,0.087180}, + {0.522750,0.494215}, + {-0.415381,-0.544665}, + {-0.805989,-0.717142}, + {0.591845,-0.006759}, + {-1.082991,-0.056471}, + {-1.529968,1.037963}, + {-0.255855,-1.785748}, + {-0.454847,-0.034732}, + {-0.272457,0.141042}, + {-0.539356,0.233351}, + {-1.123501,0.381575}, + {-1.362791,-0.485143}, + {0.867246,-0.554638}, + {-0.592859,-0.071347}, + {0.029115,0.338592}, + {0.892906,-0.530447}, + {-0.942275,-0.950575}, + {0.681004,-0.812727}, + {-0.682861,-0.748591}, + {0.852113,0.476257}, + {0.789010,-0.330489}, + {0.615453,0.653533}, + {1.319493,-1.499355}, + {0.423842,-0.348825}, + {0.157478,-0.767351}, + {1.477448,1.666978}, + {0.067225,-0.415903}, + {0.744507,-0.884219}, + {0.040268,0.058540}, + {-1.735353,0.366785}, + {0.153680,0.237515}, + {0.667468,0.542703}, + {0.436021,0.493232}, + {0.563348,-1.182141}, + {-0.003835,-0.322843}, + {-0.656232,-0.176493}, + {-0.873231,0.360992}, + {0.136123,1.085468}, + {-0.510539,0.320659}, + {-0.312098,0.046118}, + {-0.421199,-1.437631}, + {-0.215423,0.161690}, + {1.307419,-0.284457}, + {-0.563560,-0.119780}, + {-1.600169,0.228748}, + {-1.421886,0.023649}, + {-0.189495,0.797349}, + {-0.165802,0.372003}, + {-0.221700,-0.219905}, + {0.534275,-0.120511}, + {-0.248351,-0.805280}, + {0.034413,0.744190}, + {-0.642193,-0.452466}, + {-0.599072,-0.680422}, + {-1.724224,0.426709}, + {-0.790234,-0.730923}, + {0.088659,-1.035535}, + {-0.275351,-0.733153}, + {-1.102652,-0.046605}, + {-0.757406,0.374197}, + {1.053567,-1.538006}, + {0.088439,-0.294301}, + {0.516494,0.576207}, + {0.909468,-0.056118}, + {0.067821,-0.686035}, + {-1.044428,0.968891}, + {0.557625,-0.843896}, + {-0.446400,0.872971}, + {0.354836,1.692407}, + {-1.197610,-0.164863}, + {1.193169,-0.074590}, + {0.564380,-0.167004}, + {1.458768,0.101084}, + {-1.659323,-0.179509}, + {-0.637948,-1.333850}, + {0.521633,-0.111609}, + {0.159952,0.245567}, + {0.557457,0.552443}, + {-0.541189,-0.269047}, + {0.178323,0.718181}, + {-0.148046,1.282756}, + {0.396217,-0.918592}, + {-1.196000,-1.302291}, + {-1.147016,1.087835}, + {-0.697901,0.120563}, + {-0.416445,-0.085792}, + {-0.575136,1.047383}, + {-0.108410,0.806852}, + {0.103438,0.190436}, + {-0.514501,0.205539}, + {-1.158432,0.436651}, + {1.837359,0.282446}, + {2.898165,0.605520}, + {-0.638636,-1.383828}, + {-0.422205,-1.159697}, + {0.439481,1.089898}, + {-0.440211,0.267563}, + {0.055757,-0.465994}, + {0.203813,-1.372535}, + {-0.369227,-0.991863}, + {0.502829,0.205971}, + {-0.168711,0.991037}, + {-0.441042,-0.002326}, + {0.323292,-0.197988}, + {0.245345,0.967783}, + {-1.106120,-0.247019}, + {-0.701892,-0.940481}, + {0.089337,0.099586}, + {-0.484300,0.499526}, + {1.270932,0.213534}, + {0.769257,0.759910}, + {-0.001945,0.582357}, + {-1.013147,0.480989}, + {0.541451,0.216142}, + {0.984260,-0.129450}, + {0.593683,-0.154239}, + {-1.381179,1.039958}, + {0.586204,-0.209757}, + {0.373642,0.368349}, + {0.322644,0.122887}, + {-0.760574,0.101006}, + {-0.369533,0.356949}, + {0.793169,0.343188}, + {-0.088122,-0.026515}, + {-0.134987,-0.622070}, + {-0.209032,0.730416}, + {-0.633736,-0.964829}, + {0.004523,0.680249}, + {-0.251489,-0.161656}, + {-1.236883,0.834379}, + {0.158569,-0.243367}, + {-0.728852,0.382640}, + {0.132910,-0.265206}, + {0.491294,1.636521}, + {-1.199529,-0.648592}, + {0.655339,-0.600365}, + {-0.088940,0.359795}, + {-0.344506,1.674392}, + {-0.074931,-0.684859}, + {-0.600775,0.495819}, + {0.546661,-0.283537}, + {0.816700,1.018373}, + {1.345432,0.093005}, + {-0.429347,-1.242027}, + {-0.195153,0.520674}, + {0.051187,-0.285221}, + {-0.157695,0.732045}, + {0.525571,0.750470}, + {-1.647741,0.695828}, + {0.729457,-1.305992}, + {-0.156214,0.275815}, + {-0.271609,-1.109912}, + {-0.884156,1.468249}, + {0.772042,-0.843589}, + {1.124620,0.188741}, + {-0.613738,-1.412528}, + {1.392810,0.203713}, + {0.414216,-0.811126}, + {0.049929,-0.015404}, + {-1.845246,0.585689}, + {0.311221,-0.174248}, + {0.322036,0.428788}, + {0.323903,-1.877702}, + {0.723333,-0.843178}, + {-1.316829,-0.626211}, + {-0.457250,-0.296858}, + {0.460788,-0.256206}, + {1.858779,0.618149}, + {1.520473,0.618939}, + {0.182818,-0.609792}, + {0.093293,-0.511200}, + {-0.796530,0.280311}, + {0.314653,0.441506}, + {0.145929,-0.171299}, + {0.989340,-0.023398}, + {0.382977,0.962526}, + {-0.234472,0.204414}, + {-0.168631,0.970621}, + {-0.359397,-0.238005}, + {-1.160084,-0.108981}, + {1.026957,0.611603}, + {0.594561,0.074036}, + {-0.703831,-0.612982}, + {-0.920383,0.335892}, + {0.779956,-0.290330}, + {0.160028,-0.530884}, + {-0.462821,-0.124964}, + {-0.021306,-0.500310}, + {-0.640899,-0.880880}, + {-0.168131,0.249834}, + {-0.181111,0.256184}, + {0.201675,-1.172094}, + {-1.107592,-0.654002}, + {0.618958,-1.100837}, + {-0.613276,-0.606221}, + {0.589475,0.793413}, + {-0.799120,-1.033400}, + {0.461943,0.180295}, + {-0.992388,0.078304}, + {0.249753,-0.552251}, + {1.140054,0.813340}, + {-0.380441,-0.427859}, + {0.140464,-0.478517}, + {-0.693361,1.211238}, + {0.156036,-0.216601}, + {0.403554,-1.008049}, + {-0.867654,1.706051}, + {-0.451461,0.206311}, + {-1.312167,-0.321273}, + {0.304323,1.501758}, + {-1.237910,0.416220}, + {-0.246990,-0.517017}, + {0.921878,1.665267}, + {0.680523,0.333206}, + {-0.250695,-0.780680}, + {0.017056,-1.185064}, + {0.833909,-0.065707}, + {-1.048432,-0.304359}, + {-0.079640,0.971286}, + {0.860137,1.148088}, + {-0.222327,0.443586}, + {0.569845,0.484530}, + {0.709289,0.527264}, + {-0.437060,1.058135}, + {0.441519,0.926605}, + {0.563086,-0.036039}, + {0.731869,1.018196}, + {0.715868,-0.555336}, + {0.083263,-0.392260}, + {-0.432371,0.271707}, + {-0.323319,0.838910}, + {-0.250503,-0.369677}, + {-0.341576,-0.046356}, + {1.703584,0.832092}, + {0.305570,0.700940}, + {0.313809,0.320696}, + {-0.232152,-0.195104}, + {-0.160822,0.383805}, + {-0.782644,0.821497}, + {0.317483,0.561839}, + {0.292112,-0.787810}, + {0.682217,-0.036886}, + {-0.234958,-0.342815}, + {1.489802,0.394218}, + {-0.780212,0.082822}, + {0.012921,1.219529}, + {-0.309442,1.310485}, + {0.805021,0.916130}, + {-0.164403,-0.490808}, + {-2.442305,0.477766}, + {0.306204,0.782185}, + {-0.642253,0.034201}, + {-0.734342,0.374860}, + {-0.534225,-0.141448}, + {-1.039800,0.243934}, + {-0.758901,0.139142}, + {0.772172,-0.221432}, + {-0.227259,-0.494436}, + {-0.797240,0.203608}, + {-0.526939,-1.003768}, + {0.604457,-0.836335}, + {-1.042733,-1.031733}, + {0.351133,-1.552611}, + {0.193510,-0.593573}, + {-0.158616,-0.000909}, + {0.477336,0.765709}, + {0.294301,-0.549073}, + {2.252452,0.421725}, + {-0.648990,-0.424124}, + {-0.564920,-0.189999}, + {-0.270131,0.078961}, + {0.772736,0.336949}, + {0.313340,-0.927747}, + {-0.573263,0.583021}, + {0.470820,-1.055331}, + {0.581432,0.212701}, + {-0.711626,0.384798}, + {0.162031,-0.175657}, + {0.742236,-0.643734}, + {0.803206,-0.132745}, + {0.613025,-0.690771}, + {0.291435,1.290752}, + {0.501168,0.658611}, + {-1.443138,-0.434044}, + {0.661785,0.822570}, + {-1.374180,0.778183}, + {0.382538,-0.753720}, + {-0.517099,0.294458}, + {0.849115,0.536175}, + {1.511322,-0.255960}, + {-0.446477,-0.510725}, + {0.351935,-0.058662}, + {-0.309950,-0.683659}, + {-0.315003,0.260157}, + {0.056499,-0.463872}, + {-0.865618,-0.396466}, + {-1.294184,0.061282}, + {1.011925,0.144531}, + {0.932576,-0.379779}, + {1.018562,0.158520}, + {-0.048017,0.052001}, + {-0.917482,-1.278635}, + {-0.098721,-0.152092}, + {1.017871,0.028110}, + {-0.268018,-0.393909}, + {0.293293,0.208300}, + {-0.580657,-0.411407}, + {1.031302,0.428409}, + {1.910617,-0.467351}, + {-0.831919,1.592028}, + {0.663417,-0.384198}, + {1.046530,-0.066088}, + {0.351843,0.024416}, + {0.571277,-0.833007}, + {-0.079296,-0.149397}, + {0.413530,-0.701706}, + {0.210312,-0.385820}, + {-0.140847,-0.268188}, + {0.139115,1.298546}, + {-1.143262,-0.441174}, + {-0.027645,0.535143}, + {-0.405058,-0.616212}, + {0.316847,-0.050931}, + {0.349966,-0.763656}, + {-0.103767,0.410991}, + {-1.917632,-0.571364}, + {-0.242820,-1.010565}, + {-0.127771,-0.753536}, + {0.604908,-0.475209}, + {0.013372,0.837038}, + {0.608820,0.079690}, + {-0.142643,-0.181203}, + {-0.281800,-0.574404}, + {1.254414,0.387417}, + {0.880432,-0.334068}, + {-0.222264,-1.359749}, + {-0.157873,0.904339}, + {-0.249764,-0.463576}, + {0.667664,0.499756}, + {-0.267900,0.673011}, + {0.640840,1.260412}, + {0.484117,-0.429452}, + {0.592152,-0.003510}, + {0.506192,-0.201848}, + {1.247699,0.171432}, + {0.353386,0.996887}, + {0.078137,-0.308590}, + {-0.018745,-1.037419}, + {1.093397,0.245313}, + {0.750051,1.199990}, + {-0.094081,-0.586781}, + {0.051596,-0.731723}, + {0.455013,1.276353}, + {-0.195394,-0.845165}, + {-0.520628,0.355488}, + {-0.688832,-0.070661}, + {0.375953,0.177470}, + {1.142021,0.354608}, + {-0.475901,0.038190}, + {0.364796,0.118211}, + {-0.675976,-0.263314}, + {-0.552894,0.232846}, + {-0.464710,-0.158232}, + {-0.258691,-0.053579}, + {0.279914,-0.374251}, + {-0.442636,-0.032047}, + {-0.444012,-0.548113}, + {-0.360146,0.089110}, + {0.490385,0.171563}, + {1.123041,-0.550139}, + {0.543533,0.079109}, + {-0.637200,-1.014626}, + {0.046707,-0.245370}, + {-0.257292,1.703984}, + {-0.071662,-0.589401}, + {0.108536,0.405153}, + {-0.344097,0.282119}, + {-0.245578,0.106487}, + {-0.401110,-1.258960}, + {0.107488,0.353920}, + {0.608643,-0.021585}, + {0.440527,-1.022432}, + {0.213325,0.187777}, + {-0.052628,-0.281017}, + {0.235210,0.007120}, + {-1.235719,0.155901}, + {-0.268724,1.113432}, + {-0.121335,0.019839}, + {0.189913,1.015487}, + {0.865889,0.697982}, + {0.197149,0.792114}, + {-0.117071,0.639035}, + {-1.306955,0.275980}, + {0.252452,0.322515}, + {-0.529397,-0.478036}, + {0.936446,-1.395706}, + {0.400833,0.024500}, + {-0.502883,-0.102895}, + {0.273595,0.753245}, + {-0.343074,0.091902}, + {0.304226,-0.867240}, + {-0.180509,-1.078705}, + {-0.205455,0.858649}, + {0.774539,0.517635}, + {-0.823959,0.593452}, + {0.732369,0.153099}, + {0.672588,-0.633125}, + {0.002290,-0.941901}, + {0.176569,-0.579932}, + {0.171845,-0.870413}, + {-0.293425,0.175049}, + {-0.137718,0.217686}, + {1.044936,0.061606}, + {-0.758815,0.807341}, + {-0.336751,-0.164385}, + {1.008626,0.256348}, + {-0.723706,0.047971}, + {-0.050905,-0.353985}, + {0.390970,-0.158517}, + {0.119335,0.109838}, + {-0.041174,-0.673703}, + {-0.556070,-0.401985}, + {-0.509192,0.543375}, + {0.625149,-0.084801}, + {-0.744969,0.178757}, + {-0.163163,0.168014}, + {-0.749477,0.577796}, + {-0.154530,0.089817}, + {0.437073,-0.946214}, + {-0.116608,-1.099246}, + {0.666880,0.264435}, + {0.474793,-0.843138}, + {0.617247,0.069116}, + {0.294487,0.030065}, + {-0.337986,0.559117}, + {-0.227776,0.882621}, + {1.101572,-1.080786}, + {0.070565,-0.664384}, + {-0.451764,-0.457432}, + {-0.576313,-0.841245}, + {0.068010,0.274456}, + {-0.710972,1.045372}, + {-0.080175,-0.636644}, + {-1.167785,-0.908857}, + {-0.040623,0.027782}, + {2.470891,-0.352323}, + {0.225188,-0.216579}, + {-0.911285,-0.883839}, + {1.575339,0.857027}, + {-0.480260,0.028266}, + {-1.400611,-0.208040}, + {-0.607262,0.315214}, + {-1.413554,-0.086775}, + {-0.078748,0.091694}, + {-0.823326,-0.045219}, + {0.179688,0.157220}, + {0.503945,-0.069413}, + {0.384609,1.810637}, + {-0.036682,0.018567}, + {-0.630811,-0.597114}, + {-0.672791,-0.931285}, + {1.222804,1.107029}, + {-0.313392,0.591602}, + {1.095544,1.771690}, + {-0.798560,1.745435}, + {1.543951,0.832816}, + {0.126556,1.114287}, + {0.213435,1.321216}, + {-0.224136,-1.359183}, + {1.477972,-0.350192}, + {-0.077844,-0.795493}, + {-0.231997,-0.564458}, + {0.801618,-0.460815}, + {-1.183569,1.681266}, + {0.800365,-1.537642}, + {-0.329589,-0.279386}, + {0.146069,-0.294189}, + {0.197825,0.827717}, + {-0.649584,1.974452}, + {-1.281819,1.044606}, + {0.908785,-0.571095}, + {1.096563,-0.008991}, + {1.743241,0.314216}, + {0.653207,0.687347}, + {-0.304444,-0.200533}, + {0.317770,0.204985}, + {1.680031,-1.270921}, + {0.013470,0.101117}, + {0.035178,0.125471}, + {-0.496304,-1.027426}, + {-0.803857,-0.277048}, + {0.785028,-0.689768}, + {0.339297,0.190250}, + {0.464936,-0.560609}, + {-0.775980,-0.128567}, + {-0.724656,0.021571}, + {0.116261,-1.049885}, + {-0.856403,0.530206}, + {0.067380,-0.690871}, + {-0.101626,0.190740}, + {-0.230450,0.733674}, + {1.510300,-0.232611}, + {-0.558900,0.743672}, + {0.328636,-0.130287}, + {0.037062,0.836783}, + {0.228297,-1.114284}, + {0.591880,-0.742029}, + {1.016332,0.389831}, + {0.501144,0.220041}, + {-0.682226,0.173825}, + {0.194447,-0.220124}, + {-0.201636,0.483213}, + {-0.346227,0.693268}, + {0.089963,0.776428}, + {0.784136,-0.216991}, + {1.351173,0.460213}, + {0.948340,0.389235}, + {0.856649,-0.280823}, + {-0.281458,-0.467549}, + {0.712758,-0.473551}, + {-0.113624,-0.180662}, + {0.827903,-0.935301}, + {0.384431,0.183861}, + {-0.116835,0.143097}, + {0.437151,0.673442}, + {-0.259116,1.211244}, + {-0.832708,0.005765}, + {0.579745,-0.839210}, + {-0.272578,0.846526}, + {0.006319,-0.191822}, + {-0.543038,-2.053956}, + {0.577765,-0.226179}, + {-0.864414,0.264531}, + {-0.081640,-0.316889}, + {-0.733387,-0.029103}, + {-0.856447,0.102918}, + {1.118355,-0.516612}, + {-0.953002,0.614206}, + {0.317643,0.733096}, + {-0.268814,0.548796}, + {1.819432,-1.055275}, + {-0.311760,0.400650}, + {0.198343,-1.247555}, + {-0.027410,0.778872}, + {-0.508919,0.444286}, + {-1.171694,0.019824}, + {1.248879,0.012588}, + {-0.703571,-1.267101}, + {-0.351630,0.717535}, + {0.712341,0.238149}, + {-0.921778,0.823704}, + {0.183744,-0.465176}, + {0.967624,0.110433}, + {0.638384,-0.733964}, + {0.023469,-0.341078}, + {0.457953,0.148002}, + {-0.387642,0.886603}, + {-0.069635,-0.580919}, + {-0.059943,-1.223428}, + {0.912288,0.393697}, + {0.642983,0.930647}, + {0.910222,0.601928}, + {-0.445410,-0.667141}, + {-1.572064,0.279244}, + {1.978238,0.802084}, + {-0.397479,-0.061574}, + {0.410751,0.408608}, + {-0.708602,-0.186290}, + {-0.230716,0.939863}, + {0.243815,0.220266}, + {0.510986,0.986593}, + {-0.697529,0.649296}, + {-0.586676,-0.694978}, + {1.365805,0.060623}, + {0.669724,0.191354}, + {1.712433,0.794664}, + {1.420112,0.316341}, + {0.241010,0.642880}, + {-0.543402,-0.040763}, + {0.566228,-0.271359}, + {-0.161257,0.334876}, + {0.599455,1.548617}, + {-0.164632,-0.789523}, + {-0.166458,-1.089323}, + {-0.603273,-0.989075}, + {0.528595,0.451579}, + {-0.312701,0.087580}, + {0.052067,-0.329935}, + {-0.422394,-0.867374}, + {0.543689,0.209453}, + {-0.559684,-1.177563}, + {0.467575,-0.097401}, + {0.369629,-0.501474}, + {0.404819,0.203655}, + {1.147670,0.855509}, + {-0.639961,0.122152}, + {0.634182,-0.589714}, + {-1.383792,0.081240}, + {-0.762136,-0.308434}, + {0.795235,-0.419563}, + {-0.464381,1.585393}, + {1.078462,0.518624}, + {0.096101,-0.470606}, + {-1.483047,-0.692461}, + {-0.298531,0.776764}, + {0.119121,-0.885261}, + {0.117578,0.531321}, + {-0.917483,1.214456}, + {0.103637,-0.543026}, + {-0.029330,-0.442023}, + {0.667382,-0.559059}, + {0.454800,1.315120}, + {-0.121242,1.135188}, + {-0.488542,0.095236}, + {1.029647,0.289141}, + {-0.103825,-0.536353}, + {0.328875,0.038776}, + {0.506639,-0.670018}, + {0.579004,0.162704}, + {0.390291,0.091227}, + {-1.290292,-0.652858}, + {-0.408826,0.011857}, + {0.767200,0.888858}, + {1.439873,0.872966}, + {1.146577,0.749942}, + {0.081693,-0.305140}, + {-0.129388,1.025387}, + {-0.634484,-0.843138}, + {0.172444,0.005313}, + {-0.657469,-0.089850}, + {-0.760529,-0.081906}, + {-0.426315,-1.084558}, + {-0.979330,-0.160143}, + {-0.044730,0.574946}, + {-1.527934,0.139190}, + {-0.115705,-0.468978}, + {0.394550,-0.231006}, + {0.586208,-0.529691}, + {0.437290,-1.153886}, + {0.808557,1.623821}, + {-1.472277,0.306073}, + {0.113523,-0.990164}, + {-0.436942,-0.152251}, + {0.906011,-0.455300}, + {-0.137609,-0.290251}, + {0.467302,-0.253409}, + {-0.677977,-0.643365}, + {-0.258209,0.117683}, + {0.237770,0.579862}, + {0.361357,0.184037}, + {-0.768527,-0.431966}, + {-0.374232,0.070814}, + {-0.271652,0.701989}, + {-1.650963,1.243199}, + {0.817481,-0.130520}, + {0.093297,1.182986}, + {-0.740615,0.357099}, + {0.190737,1.086730}, + {-0.326431,-0.458982}, + {0.123048,1.118810}, + {-0.006755,0.087656}, + {0.321461,0.525849}, + {-0.567447,-0.412553}, + {-0.516657,-1.118277}, + {-0.343009,-0.119105}, + {0.491223,1.372952}, + {0.179821,0.053473}, + {-0.238648,0.029409}, + {0.222945,0.156960}, + {0.310281,0.281777}, + {-0.992198,-0.975749}, + {-0.432296,-0.289497}, + {-1.121582,-0.621216}, + {-0.079473,-0.549632}, + {0.673944,0.250442}, + {-1.170647,0.816044}, + {0.009351,-0.038545}, + {0.202295,0.376773}, + {0.207996,-0.767330}, + {-0.683128,0.462706}, + {0.363351,0.668791}, + {-0.236248,0.234738}, + {0.236777,0.097248}, + {-0.079751,-0.322131}, + {0.422070,0.380715}, + {0.465275,-0.117293}, + {0.914394,0.070100}, + {-0.328927,-1.087863}, + {0.009725,-0.714301}, + {0.694105,-0.275872}, + {0.038939,-1.079395}, + {0.761932,1.210910}, + {0.753418,0.067086}, + {-0.215663,-0.159486}, + {-0.187086,0.872605}, + {-0.142958,0.220448}, + {0.273894,-0.555399}, + {-0.650689,-0.402346}, + {0.897581,0.328779}, + {-0.338363,1.002994}, + {-0.328070,0.563372}, + {-0.550288,0.856980}, + {-0.977701,-1.482775}, + {2.446075,-0.651519}, + {0.653114,0.245545}, + {0.481750,1.570437}, + {-0.925317,0.286313}, + {0.723354,0.222318}, + {0.684692,-1.247687}, + {-0.189216,-0.475236}, + {-0.640211,0.212953}, + {-0.053677,0.669794}, + {-0.330972,-0.472563}, + {0.194653,-1.044945}, + {-0.541368,-0.021547}, + {0.683410,-0.394597}, + {0.106472,-0.419672}, + {0.760465,0.199993}, + {-1.179110,0.112292}, + {0.055066,0.377698}, + {0.909270,-1.560735}, + {0.401362,1.350247}, + {0.187297,-0.004588}, + {-0.039523,1.088870}, + {-0.268140,0.216489}, + {0.164274,1.288643}, + {-1.308630,0.008255}, + {-0.828187,0.539431}, + {0.171691,1.194553}, + {0.299761,-0.052910}, + {1.722756,-0.697963}, + {-0.251873,-0.722015}, + {0.079270,-0.072157}, + {-0.932151,-0.304344}, + {0.207095,0.052868}, + {1.088320,-1.003559}, + {0.850424,-0.709885}, + {0.649069,-1.639259}, + {0.383301,-0.409913}, + {0.170324,-0.407571}, + {0.752730,0.520546}, + {0.243588,0.101737}, + {-0.487145,0.946709}, + {-0.484323,-0.380167}, + {0.224305,-0.272019}, + {0.059913,-0.726160}, + {-0.285819,-0.028296}, + {-1.484445,-0.022900}, + {0.166353,0.255178}, + {-1.161566,0.903064}, + {0.494498,0.797073}, + {-0.297146,-0.147285}, + {-0.236315,0.665692}, + {-0.085679,0.279219}, + {-0.870393,0.141386}, + {-0.014293,-0.542938}, + {-0.365326,0.980887}, + {0.203701,-0.711214}, + {-0.407262,0.445812}, + {1.421543,-0.606156}, + {1.347169,0.048977}, + {-1.433734,0.817061}, + {1.146370,-0.793382}, + {0.319925,-0.854738}, + {0.438860,2.145962}, + {1.166341,-0.365637}, + {0.683141,0.055309}, + {-1.130258,0.470611}, + {-0.142316,0.723606}, + {-1.167357,0.251633}, + {-0.061046,-0.144651}, + {-0.028701,-0.462089}, + {-0.018132,0.169646}, + {-0.671335,0.900461}, + {0.116801,-0.593090}, + {0.085282,-0.067586}, + {-0.411836,0.548411}, + {0.260672,-1.297764}, + {-0.232586,-0.692774}, + {-0.797251,0.519497}, + {0.493274,0.128724}, + {-0.452326,-0.942666}, + {-1.259305,0.165846}, + {-0.397245,-0.650621}, + {-0.827247,-0.027941}, + {0.400771,0.899915}, + {-1.510673,-0.552102}, + {-0.016118,-1.664885}, + {0.468835,-0.256144}, + {-0.095802,-0.449476}, + {-0.334430,-1.538678}, + {0.005072,0.053176}, + {0.276647,-0.648527}, + {0.087667,0.067103}, + {0.853516,0.367063}, + {0.694817,-0.772811}, + {0.402106,-0.764670}, + {0.563088,0.747578}, + {-0.268367,1.277181}, + {-0.749042,-0.032805}, + {1.254513,0.221049}, + {-0.610276,0.267629}, + {-0.316447,1.420839}, + {-1.922798,-0.390022}, + {0.556385,0.484709}, + {0.027270,0.139172}, + {-0.726247,-0.156295}, + {-0.120574,1.445949}, + {0.876597,0.011245}, + {-0.056240,-0.228567}, + {-0.008902,-0.187852}, + {0.322713,-0.491207}, + {-0.362863,0.473453}, + {-0.712861,-0.365141}, + {-0.742098,-0.136880}, + {0.111748,1.005100}, + {-0.464041,-0.288319}, + {-0.591913,0.416452}, + {0.517190,0.391430}, + {1.195625,0.788324}, + {0.410152,0.138649}, + {-1.371791,1.228180}, + {-0.101232,0.141153}, + {-0.710496,-0.154048}, + {-0.808498,-0.383805}, + {-0.018569,-0.202316}, + {1.184777,-1.079341}, + {-1.306705,0.345682}, + {-0.154691,0.011843}, + {0.661710,0.500578}, + {-0.343929,0.779614}, + {0.543034,1.214597}, + {-1.348330,0.139834}, + {0.117324,0.850516}, + {-0.108573,-0.567512}, + {-0.543670,-0.506252}, + {0.763259,-0.023357}, + {-0.124683,-0.687557}, + {-0.298014,0.912602}, + {0.205308,0.618330}, + {1.529908,-0.085205}, + {0.956008,-0.652740}, + {-0.068925,-1.092457}, + {-0.637354,-0.419358}, + {1.268680,-0.243073}, + {-0.136088,-0.425454}, + {-1.136538,1.501422}, + {-0.865629,0.163418}, + {1.489446,-0.425663}, + {-0.176186,-0.697113}, + {0.053611,-0.207498}, + {0.453244,0.901965}, + {0.045845,1.465057}, + {0.863726,-0.540462}, + {-0.043928,0.683414}, + {0.115106,-1.021701}, + {0.247975,0.286382}, + {0.801124,0.684719}, + {-0.492425,-0.671975}, + {-0.738085,-0.372832}, + {0.246402,0.622964}, + {1.316755,0.124231}, + {0.061890,0.559458}, + {-0.016314,0.518483}, + {0.065088,-0.564502}, + {-1.075867,-0.098767}, + {0.178467,0.098481}, + {-0.008945,-0.802168}, + {-0.811757,0.814761}, + {1.059392,-0.846953}, + {-0.343747,0.373055}, + {0.758821,-1.176281}, + {-0.647837,-0.951149}, + {-0.817682,0.112162}, + {1.173084,-0.558803}, + {-0.604647,0.144875}, + {-0.132176,0.361366}, + {-0.668269,0.061026}, + {0.246659,0.201436}, + {1.226810,-0.619724}, + {-0.468072,-0.019591}, + {0.966661,0.482886}, + {0.583820,0.926226}, + {0.852546,0.572840}, + {-0.649207,-0.545958}, + {0.255183,-0.155787}, + {-0.025898,0.078114}, + {-0.201309,-0.225492}, + {0.525905,0.410706}, + {0.177865,1.477507}, + {2.457610,-1.850447}, + {0.151478,1.000617}, + {1.360119,-0.754828}, + {0.157215,-0.492841}, + {-0.566692,1.324305}, + {0.620154,0.754623}, + {0.074979,-0.860552}, + {-0.222454,0.021736}, + {-1.408236,-1.307141}, + {-0.544968,0.463417}, + {-0.595774,-0.743040}, + {0.559990,0.480234}, + {-1.168589,-0.203965}, + {0.281098,-0.105368}, + {0.641682,-0.360390}, + {0.836257,-0.373430}, + {-0.805041,0.752649}, + {0.441466,-0.719064}, + {-1.832253,1.143759}, + {-0.247786,-0.438656}, + {-0.870375,0.850503}, + {-0.375699,0.159219}, + {-1.124725,0.793712}, + {-0.723709,0.342564}, + {-0.633437,-0.558060}, + {-0.135905,-0.355088}, + {-2.183977,-0.007379}, + {1.116177,0.159945}, + {1.490166,0.480268}, + {0.164575,-0.726484}, + {-0.520145,0.297363}, + {-0.641292,-0.643205}, + {-0.067693,-0.128819}, + {0.413410,0.031469}, + {-0.760742,1.425786}, + {0.085627,-0.041021}, + {0.114922,0.384508}, + {-0.225939,-0.065478}, + {0.023267,1.057989}, + {1.470100,-0.598823}, + {0.723707,-1.348607}, + {0.035084,-1.125010}, + {-0.454672,0.069253}, + {0.809724,-0.071756}, + {0.083234,0.221237}, + {-0.377449,1.091443}, + {0.402802,0.357787}, + {-0.684853,-0.705112}, + {-0.625051,-0.136144}, + {1.018437,-0.307444}, + {-0.339611,0.577613}, + {-0.559291,-0.331159}, + {-0.661887,0.404697}, + {-0.412244,-0.877878}, + {-0.591570,-0.072583}, + {-0.437359,0.868594}, + {0.926766,-0.479234}, + {-0.939874,0.960508}, + {-0.216226,-2.190387}, + {0.373954,-0.239234}, + {0.735172,-0.368192}, + {0.925092,0.361395}, + {0.238858,-1.067577}, + {0.211254,0.055615}, + {0.067811,-0.232802}, + {-0.256948,-1.231779}, + {-0.231535,-1.085856}, + {1.027191,0.635764}, + {-1.039482,-0.284762}, + {0.802325,0.903988}, + {-0.407235,-0.165035}, + {-0.645411,0.570917}, + {-0.631895,-0.866667}, + {-0.413516,-0.479763}, + {-0.327054,0.889851}, + {-0.660647,1.168247}, + {-0.054201,-0.157478}, + {0.021347,1.157376}, + {-0.281979,0.310791}, + {1.078613,-0.998599}, + {0.978329,-0.316584}, + {0.227859,-0.057813}, + {0.879319,1.029731}, + {0.007877,-0.338237}, + {-0.023282,0.856635}, + {0.802926,0.658965}, + {-0.654637,-0.321326}, + {-0.486953,-0.278102}, + {0.399871,-0.703921}, + {0.137966,-0.143648}, + {-1.382161,-0.633032}, + {0.994994,0.454662}, + {-0.563795,-0.296766}, + {0.395332,-0.055457}, + {0.879708,-0.963628}, + {-0.321128,-0.149853}, + {-0.072034,-0.491397}, + {0.094058,-0.301073}, + {0.846232,0.232090}, + {0.286858,-0.066615}, + {-0.642041,0.413146}, + {0.464097,0.354731}, + {0.102751,1.804440}, + {0.377422,0.609243}, + {0.654797,-0.435679}, + {0.472210,-0.209745}, + {-0.641060,-0.154395}, + {-1.512229,0.312514}, + {-0.668791,-1.337721}, + {-0.568657,-0.277971}, + {0.842358,1.337541}, + {-0.633354,0.123400}, + {-0.236926,1.438454}, + {-0.524131,0.461021}, + {-0.027427,0.041582}, + {-0.630328,-0.951639}, + {0.467582,-0.775196}, + {-0.645079,-0.410044}, + {1.050603,1.068060}, + {-0.144830,0.117018}, + {-0.428974,-0.059010}, + {0.343620,-1.481687}, + {-0.117022,0.802153}, + {0.371381,0.568841}, + {-0.713658,-0.166011}, + {-0.262867,-0.772913}, + {1.097425,0.118692}, + {-0.682499,0.040285}, + {-0.088318,-0.101135}, + {0.596149,0.381073}, + {-1.594536,0.711970}, + {-0.520008,0.491471}, + {0.042324,0.355744}, + {-0.736938,-0.529835}, + {-0.648401,0.855958}, + {-0.338084,-0.351747}, + {0.672677,0.892670}, + {0.361092,-0.678357}, + {2.079292,0.329758}, + {0.234354,0.449063}, + {0.246854,-0.747312}, + {-0.254858,-0.378022}, + {0.391048,0.078144}, + {-1.322392,1.109864}, + {-0.392252,1.133680}, + {0.317787,-1.119124}, + {-1.125500,0.590658}, + {0.651714,-0.019948}, + {-0.188271,-0.587491}, + {0.512942,0.238828}, + {-0.089800,0.880141}, + {-0.020669,-0.745277}, + {-0.393933,0.425016}, + {-0.706385,-0.337056}, + {-0.072274,-0.466942}, + {1.361972,1.600456}, + {-0.536411,0.143837}, + {-1.315825,-0.345262}, + {0.586610,-0.105453}, + {0.361835,-0.310457}, + {0.162424,-0.455937}, + {-0.266229,0.468748}, + {0.608348,0.237188}, + {-0.338820,0.469070}, + {0.825241,-0.122825}, + {-1.296042,-1.106153}, + {0.782186,1.012854}, + {0.546063,0.108291}, + {-0.675564,-0.118591}, + {0.959435,-0.617240}, + {0.253049,0.642651}, + {-0.717033,0.421230}, + {0.065648,-0.236145}, + {0.787941,-0.725300}, + {-0.214982,-0.330445}, + {-0.005308,0.843855}, + {0.569761,-1.404632}, + {-0.847684,0.288276}, + {-1.351673,0.398555}, + {-0.653094,0.359977}, + {-0.451479,-0.175236}, + {0.250162,1.082506}, + {1.720280,-0.173550}, + {0.043283,0.495568}, + {-0.467075,-0.286571}, + {-0.516911,0.372184}, + {-0.644850,0.027566}, + {0.412044,-0.228306}, + {0.441079,-0.818598}, + {0.597972,0.496661}, + {-0.751802,0.592583}, + {-0.172332,-0.063214}, + {-0.486652,0.453796}, + {-0.789048,0.001233}, + {-0.037757,-0.424086}, + {0.610775,0.085934}, + {1.357820,0.385392}, + {0.772897,0.561994}, + {-0.547971,0.343509}, + {-0.305912,-0.659965}, + {-0.150391,0.051106}, + {-0.659545,0.811236}, + {1.156720,-1.403491}, + {0.250035,0.752173}, + {-1.033130,1.467901}, + {-0.081366,0.567584}, + {-0.189016,0.757573}, + {-0.062907,0.109766}, + {0.519387,-0.073148}, + {0.852716,1.480028}, + {-0.332826,-0.335259}, + {0.699783,1.177709}, + {-1.501976,-0.869618}, + {0.011903,0.566373}, + {0.240645,0.815848}, + {0.022006,0.778674}, + {-0.311565,-0.232334}, + {0.412026,0.252313}, + {-0.541887,0.196055}, + {1.576042,1.850318}, + {0.801784,0.173800}, + {-0.910855,-0.685674}, + {2.049228,-0.222369}, + {-0.354029,1.030187}, + {0.323162,-0.505727}, + {-0.125605,-0.829970}, + {0.512979,0.187703}, + {-1.013040,-1.303101}, + {0.013997,0.121938}, + {0.058118,0.257561}, + {-0.258403,0.395440}, + {-0.670940,1.122375}, + {-1.432201,-0.379968}, + {-0.814277,-0.812373}, + {-0.559929,0.609962}, + {0.363925,0.849823}, + {0.621028,-0.837635}, + {-0.240268,-0.472030}, + {0.072362,1.038756}, + {0.227193,-0.732684}, + {-0.658857,0.208278}, + {-1.534011,0.239111}, + {-0.154706,-0.173726}, + {-1.368605,-1.607920}, + {0.111885,0.436946}, + {-0.125141,1.156338}, + {-0.468032,-1.283854}, + {-0.095271,-1.024174}, + {-0.298550,0.045489}, + {0.683411,0.029385}, + {0.549679,-0.031146}, + {0.498454,-0.530899}, + {-0.477430,0.323974}, + {0.791994,0.089182}, + {0.361261,0.618991}, + {0.562423,0.394355}, + {0.244952,0.570213}, + {0.006620,2.036926}, + {-1.886519,-0.587302}, + {0.648386,0.606893}, + {-1.081200,1.050888}, + {0.376747,-0.048129}, + {-0.587935,0.543545}, + {1.449966,-0.385258}, + {0.268650,1.464783}, + {-0.781591,-0.348916}, + {0.585803,-0.636496}, + {0.978237,1.172719}, + {0.668928,-0.068851}, + {-1.466985,0.045779}, + {-1.179510,1.101713}, + {0.904752,0.497169}, + {0.097355,-0.293205}, + {-0.172173,-0.181016}, + {-0.501643,-0.080642}, + {0.581053,-0.218558}, + {-0.895757,0.375873}, + {-0.483364,0.120657}, + {-0.423777,0.643739}, + {0.124416,-1.106641}, + {-1.457878,-0.321679}, + {0.659524,-0.761259}, + {0.364923,-0.166847}, + {-1.388401,-0.199159}, + {1.588209,-0.604498}, + {1.309079,-0.352915}, + {-0.347980,0.189430}, + {0.911844,-1.078087}, + {0.278893,-0.835737}, + {-0.982551,-0.254161}, + {-0.431526,0.412463}, + {-0.477069,0.486325}, + {0.573694,0.715416}, + {1.143420,2.072284}, + {-0.857854,-0.906373}, + {-0.297631,0.413436}, + {-0.467294,-0.331288}, + {0.982162,-0.975864}, + {0.285199,0.043006}, + {-0.812961,0.340233}, + {1.431540,1.133126}, + {0.102308,0.190565}, + {1.476116,0.637898}, + {0.434583,0.580426}, + {0.046831,-0.794218}, + {-0.341083,0.192367}, + {-0.279135,-0.299876}, + {0.296558,0.569512}, + {0.147472,0.329278}, + {-1.388735,1.020627}, + {0.602259,0.386248}, + {-0.528118,1.134901}, + {-0.181877,-0.564929}, + {-0.553234,0.469098}, + {-1.455098,-0.185264}, + {0.800772,0.396759}, + {-1.234805,0.736313}, + {0.761554,-0.175533}, + {-0.650272,-1.001478}, + {0.515606,-0.160728}, + {1.523529,0.422419}, + {0.327472,0.391494}, + {0.747341,0.126178}, + {0.796575,0.604781}, + {-0.579325,0.723723}, + {0.188695,-0.270173}, + {0.608637,-0.176246}, + {0.357106,-0.187142}, + {-0.476938,0.579994}, + {-0.159003,-0.546717}, + {0.805633,0.436189}, + {-0.000267,-0.078362}, + {0.388497,0.613782}, + {-0.616919,0.325909}, + {-0.139824,0.506477}, + {-0.357327,-0.352587}, + {0.465315,0.517060}, + {-0.402298,0.401676}, + {-1.052840,1.068351}, + {0.089254,-0.088566}, + {1.553712,-0.490081}, + {0.796169,0.313496}, + {0.221044,0.079029}, + {0.735658,0.515442}, + {0.088796,-0.414440}, + {0.177135,0.018821}, + {-0.136482,0.116556}, + {0.998341,1.750061}, + {1.539176,-0.444703}, + {-0.005825,-1.174685}, + {-0.546142,-1.060067}, + {-0.238276,-0.411240}, + {1.270839,1.815292}, + {0.238926,-0.014318}, + {-0.433391,1.175325}, + {0.365434,0.514461}, + {0.549538,-0.875982}, + {-0.052031,0.088336}, + {0.056105,0.755373}, + {-0.739169,1.345512}, + {0.022259,0.310272}, + {-0.143530,0.226380}, + {0.377260,-2.217078}, + {1.266910,0.770192}, + {-1.430207,-0.389470}, + {0.373033,0.954533}, + {-0.032998,0.458503}, + {0.033109,0.876798}, + {1.254053,-0.868324}, + {-0.750205,-1.243251}, + {0.178780,-0.059218}, + {-0.138437,-1.864862}, + {-0.057342,0.724688}, + {0.255896,1.443441}, + {0.554522,-0.149032}, + {0.535395,0.518631}, + {0.178084,-1.333335}, + {-1.146268,-0.525930}, + {-0.444915,-0.179534}, + {-1.827258,0.610506}, + {-0.970571,0.433014}, + {-0.851848,-1.408017}, + {-0.010547,0.425406}, + {-0.438689,-0.641632}, + {0.982537,0.523425}, + {0.194053,0.040519}, + {-2.164144,-0.712796}, + {-0.286878,-1.289071}, + {-1.189324,0.191043}, + {-0.178947,0.227410}, + {0.543007,-0.209633}, + {-0.504561,0.558697}, + {-0.476418,-0.360136}, + {-0.066349,0.311321}, + {0.205228,0.537992}, + {-0.431381,0.691561}, + {0.373215,-0.698683}, + {-0.021947,-0.774605}, + {0.587365,-1.799103}, + {0.808319,-0.623221}, + {1.089104,0.969406}, + {-0.309144,0.148429}, + {-0.370805,0.696824}, + {0.232746,0.498690}, + {0.207694,0.370303}, + {-0.921240,-1.399620}, + {-0.553996,0.380382}, + {-0.578575,0.448331}, + {0.429058,-0.213727}, + {-0.710646,-0.159683}, + {1.620601,0.839856}, + {-0.118776,0.365243}, + {1.473897,0.572852}, + {0.186774,0.121951}, + {0.610082,-0.416502}, + {-0.680911,0.926587}, + {-0.677998,0.322929}, + {0.386026,0.195354}, + {0.127726,0.580091}, + {0.103026,-0.655300}, + {-0.285589,0.668215}, + {-0.304495,0.862677}, + {0.676639,-0.908045}, + {-0.101844,-1.374433}, + {0.111932,-0.315504}, + {-0.786232,0.096354}, + {0.412804,1.171453}, + {0.242855,0.419671}, + {-1.122453,0.072119}, + {-0.954008,-1.360665}, + {0.490884,-0.394485}, + {1.407058,-0.197984}, + {0.516526,-0.041076}, + {-0.356944,0.119194}, + {0.114765,-0.432646}, + {-0.616070,-0.812770}, + {-1.283144,0.352879}, + {-0.675260,0.248547}, + {0.037469,0.111532}, + {1.808690,0.215876}, + {-0.262605,0.390434}, + {-0.528473,-0.590598}, + {0.067823,1.025179}, + {-0.134779,0.388853}, + {-0.856184,-0.137929}, + {-1.322880,-0.587829}, + {0.255339,0.957455}, + {0.691181,0.120283}, + {-0.138113,-0.681550}, + {-0.839258,-0.647184}, + {0.717937,-0.342172}, + {-0.002496,0.085833}, + {0.066570,0.376295}, + {-1.184694,-0.306608}, + {-0.765986,-0.240214}, + {-1.484250,-0.148429}, + {-0.381439,1.124766}, + {-0.350007,0.336370}, + {0.235697,-1.183933}, + {1.443619,0.581121}, + {0.491068,-0.099921}, + {0.093451,0.902716}, + {0.505893,1.686718}, + {-0.385501,-1.017724}, + {-0.541630,0.466243}, + {0.186522,-0.926013}, + {-0.447201,-0.317000}, + {-0.142966,-1.103298}, + {0.144505,-0.006342}, + {1.660683,-0.528652}, + {-0.863812,-0.656971}, + {0.373327,-0.447680}, + {0.064399,-0.006573}, + {0.273959,-0.067186}, + {0.158321,-0.040345}, + {-0.809976,1.524938}, + {0.265150,0.968352}, + {-0.561451,0.122076}, + {-0.238906,0.602495}, + {-0.682023,-1.518610}, + {0.226352,0.239321}, + {0.249679,-0.450287}, + {1.424126,-0.421314}, + {0.347601,-1.256083}, + {-0.161817,-0.558341}, + {-0.698010,1.392321}, + {0.854525,-0.180275}, + {-0.607136,-0.163008}, + {-0.201352,-0.463324}, + {0.177265,0.445976}, + {-1.139061,-0.711736}, + {0.071346,0.954147}, + {-0.007381,-0.234975}, + {0.122223,0.301816}, + {0.744879,-0.147205}, + {0.885961,0.569310}, + {-0.584466,0.194479}, + {-0.356190,-0.486432}, + {-0.604637,0.312954}, + {-0.571192,0.009307}, + {-1.645607,-1.013357}, + {0.767907,0.911892}, + {-0.292811,-0.436490}, + {0.754294,-0.258061}, + {-0.020915,-0.553060}, + {0.513940,0.367752}, + {-0.039909,-0.308901}, + {-0.426255,-0.427997}, + {0.031096,-0.350317}, + {0.183359,0.337084}, + {-1.442484,0.931023}, + {0.285229,0.747264}, + {1.284922,-0.542352}, + {-0.580213,-0.744180}, + {-1.258930,1.722668}, + {-0.259699,-0.002504}, + {0.488400,0.053418}, + {0.626716,-0.067078}, + {-0.262059,-0.661936}, + {-0.826681,1.076488}, + {-0.313348,0.452737}, + {0.751086,-0.240226}, + {-0.201071,-0.293798}, + {0.498236,0.533344}, + {0.445915,-0.498216}, + {-0.476964,-0.992134}, + {0.124767,0.528058}, + {-0.175549,0.108257}, + {-0.983469,1.220194}, + {-1.365000,0.620389}, + {0.126352,1.586583}, + {0.698377,-0.366504}, + {-0.972605,-0.070712}, + {-0.173680,0.387337}, + {-1.296066,-0.326749}, + {0.074632,1.409292}, + {0.273771,0.567147}, + {1.247218,0.334758}, + {0.109021,0.319268}, + {0.782710,0.115378}, + {0.481173,-0.827708}, + {-0.539717,-0.877906}, + {0.746934,1.005647}, + {-0.621987,0.129283}, + {0.413268,0.131652}, + {-1.265124,0.249034}, + {-0.352113,0.553744}, + {0.639651,-0.490536}, + {-0.207383,-0.516105}, + {0.300740,0.271305}, + {-0.778036,-0.864931}, + {0.237860,-0.011126}, + {0.147210,0.427180}, + {-0.038382,1.535662}, + {-1.191819,0.386445}, + {0.553605,0.469841}, + {0.060159,0.320722}, + {0.628356,0.798504}, + {0.141494,0.747546}, + {0.356586,-0.813978}, + {-0.526579,0.129332}, + {-0.142047,-0.183652}, + {0.142306,-1.230296}, + {0.163303,0.973984}, + {0.741797,-0.963034}, + {-0.953978,1.630063}, + {0.782292,0.927006}, + {0.269555,-0.483264}, + {-0.225813,-0.846876}, + {-0.147398,0.037824}, + {-1.151203,0.182452}, + {-0.051871,1.116905}, + {0.618385,0.772501}, + {-0.806309,-0.676225}, + {0.314484,0.962604}, + {-0.877810,0.165547}, + {-0.278775,0.828332}, + {-0.193032,0.607956}, + {0.481850,0.406728}, + {0.189260,0.564026}, + {0.101573,-0.153646}, + {0.141078,0.577827}, + {0.442071,-0.654711}, + {-0.497890,-0.069597}, + {-0.896127,0.092677}, + {1.379386,-1.739856}, + {0.049072,0.076701}, + {-0.000871,-0.137247}, + {-1.069033,1.216272}, + {1.305900,-1.105981}, + {-0.038746,0.948692}, + {0.097514,-0.182169}, + {0.504969,0.301159}, + {-0.070645,-0.338149}, + {-0.648749,1.116034}, + {0.019086,0.366446}, + {0.061191,-0.513735}, + {-0.412078,0.343295}, + {-1.006799,-0.785297}, + {0.728767,-0.194047}, + {-0.294156,0.632371}, + {-0.674312,-1.092083}, + {-0.662882,-0.689872}, + {-1.090220,-0.610777}, + {0.103421,0.205088}, + {0.654995,-0.196212}, + {0.811050,-1.173118}, + {0.047948,0.235323}, + {0.657132,0.634237}, + {0.807551,0.684801}, + {0.066354,-0.968132}, + {-0.109448,-0.718459}, + {-1.570057,0.383556}, + {1.177749,-0.333918}, + {-0.076754,-0.018363}, + {1.147423,0.535147}, + {-1.099482,-1.047722}, + {0.202256,0.611263}, + {0.355965,0.186135}, + {0.638869,0.248176}, + {0.423701,0.167180}, + {0.140065,-1.046322}, + {-0.128061,0.389472}, + {-0.073327,-0.620858}, + {0.551739,-0.001060}, + {-0.010351,-0.343739}, + {0.273292,0.077655}, + {0.018582,-0.649334}, + {0.858083,-0.239483}, + {0.434152,-0.516887}, + {-1.191059,0.970440}, + {-1.078976,-1.186674}, + {1.220491,0.830858}, + {0.392834,-0.620787}, + {0.570976,1.188011}, + {0.659424,-0.514683}, + {0.396493,0.413003}, + {1.064244,-1.299914}, + {-0.395576,-0.151052}, + {-1.016292,-0.124868}, + {0.339642,0.187616}, + {-0.732745,0.330348}, + {0.064742,0.443943}, + {0.986493,-0.439466}, + {0.469584,-0.447904}, + {0.721960,0.754263}, + {0.157520,-0.324514}, + {-0.114010,-0.285823}, + {-0.771222,-0.402135}, + {0.327920,0.786586}, + {-0.761432,-0.278662}, + {0.019400,-0.367941}, + {1.070777,0.601845}, + {0.456113,-0.819699}, + {0.879266,-1.927595}, + {0.205047,-0.103213}, + {0.499241,0.410470}, + {0.833646,-1.356775}, + {0.148523,0.231443}, + {0.561257,-0.947881}, + {0.003637,-0.389497}, + {0.433277,0.984572}, + {-0.048365,-0.418898}, + {-0.136111,-1.207308}, + {1.922850,1.447618}, + {0.384710,0.640459}, + {0.139125,0.130501}, + {0.571578,-0.186558}, + {0.682121,0.751595}, + {0.321521,-1.559149}, + {-0.371364,-0.545437}, + {0.621527,0.318470}, + {-0.035350,0.128997}, + {0.478967,0.282489}, + {-1.726296,0.075075}, + {-0.410562,-0.229728}, + {0.248913,0.103229}, + {-1.158596,0.232259}, + {0.162925,0.185782}, + {0.954972,-0.172445}, + {-1.023235,-0.827372}, + {0.386385,0.418922}, + {-1.535752,-0.171385}, + {-0.052104,0.779521}, + {0.578034,-0.561471}, + {0.132959,0.311450}, + {-0.343702,-0.401046}, + {0.245350,0.969726}, + {0.396674,0.108288}, + {-1.432259,0.419970}, + {0.341158,0.317464}, + {-0.330617,-0.606965}, + {-0.152268,-0.472867}, + {-0.060637,0.458003}, + {-0.571015,-0.285286}, + {-0.689380,-0.890630}, + {1.280908,0.748947}, + {-0.541963,0.307449}, + {1.509660,0.796404}, + {1.759599,-0.190714}, + {0.431596,-0.064444}, + {0.781975,-0.726109}, + {-0.225672,-0.453357}, + {-1.213446,0.029801}, + {-0.502440,0.933800}, + {0.526578,0.291420}, + {0.147412,0.134833}, + {0.512102,0.625511}, + {1.456875,1.380586}, + {-0.290328,-1.063807}, + {0.101380,-0.817843}, + {0.113163,0.126724}, + {1.215953,0.725106}, + {0.201676,0.845303}, + {0.239325,-0.398681}, + {0.164998,-0.338345}, + {-0.108562,-0.506582}, + {-0.489327,0.543874}, + {0.661906,-0.354970}, + {-0.265596,0.563607}, + {-0.884218,0.854292}, + {1.321217,-1.368510}, + {0.081827,-1.410110}, + {-0.219351,0.885236}, + {-0.982823,0.858992}, + {-1.274274,-1.011328}, + {-1.067975,0.067140}, + {0.436583,-0.052909}, + {-0.404171,-0.153187}, + {-0.582062,0.600456}, + {0.023155,0.627493}, + {-0.685279,-0.017384}, + {0.548277,-0.244152}, + {-0.115240,0.053806}, + {0.060231,0.740503}, + {-0.145329,0.863530}, + {-1.448378,0.298489}, + {0.240402,-0.369060}, + {1.430967,1.095404}, + {0.331176,0.532789}, + {0.065128,0.165151}, + {-0.301511,-0.764322}, + {1.104458,0.230971}, + {-0.659759,-0.691340}, + {-0.814781,-0.814180}, + {0.417795,1.175324}, + {0.289451,0.400148}, + {-0.418076,0.131680}, + {-1.362387,0.205250}, + {-0.014391,0.377274}, + {-1.409865,-1.379234}, + {0.541087,1.912687}, + {-0.029290,-0.841498}, + {0.466166,0.092614}, + {0.184014,-0.060701}, + {0.809956,1.648975}, + {-0.773957,0.556490}, + {-0.526512,-0.408391}, + {0.241741,0.658692}, + {-0.542720,1.687133}, + {-0.516997,-0.467089}, + {0.739354,0.421007}, + {-0.042296,-0.146626}, + {-0.269594,-0.550475}, + {-1.523314,-1.306939}, + {0.250566,0.617745}, + {0.504463,-0.722584}, + {-0.179117,-0.083309}, + {1.874666,0.664473}, + {0.786372,-0.183692}, + {-0.791371,-0.105155}, + {0.546627,-0.378284}, + {-0.682557,0.353458}, + {-1.551750,-1.178922}, + {0.004591,-0.364755}, + {0.595242,-0.129436}, + {-0.525592,-0.317380}, + {-0.090858,-0.976245}, + {-0.485468,0.291478}, + {0.149195,0.432197}, + {-0.614205,-0.776327}, + {-0.282117,0.839998}, + {-0.805384,-0.020502}, + {0.822789,-1.368598}, + {-0.626826,0.998920}, + {0.496481,-0.497299}, + {1.668775,0.382570}, + {0.548438,-1.033250}, + {1.007271,0.933075}, + {0.183149,-0.380990}, + {1.293787,-0.119620}, + {0.774773,0.143392}, + {-0.274284,-0.302211}, + {0.451132,-0.154428}, + {-0.025212,0.110100}, + {-1.359157,0.348165}, + {0.013577,0.207362}, + {1.101108,1.741819}, + {-1.147832,-0.970628}, + {-0.792563,-0.451914}, + {-0.065555,0.248664}, + {-1.252769,0.225012}, + {0.954973,-1.085338}, + {0.121842,-0.845815}, + {-1.622493,0.134620}, + {-0.785575,-1.165826}, + {-0.155585,-0.299899}, + {0.204921,1.247232}, + {0.190846,0.982351}, + {-0.086519,0.188154}, + {0.911527,-0.410064}, + {-0.589303,0.001458}, + {-0.461175,-0.753628}, + {-0.703909,-0.266743}, + {-0.552377,-0.836142}, + {-0.316481,-0.804232}, + {-1.208979,-0.807974}, + {-0.405595,-0.324402}, + {0.556275,0.511671}, + {0.755633,-0.192398}, + {0.361233,-0.288166}, + {-0.271475,-0.290048}, + {0.036496,1.048269}, + {-0.230503,0.604447}, + {1.000254,-0.234682}, + {0.120851,-0.393787}, + {-1.135812,-0.005555}, + {0.117785,0.102412}, + {0.269803,0.306705}, + {-1.000569,-0.211454}, + {-0.921295,-0.318864}, + {0.015830,-0.276718}, + {0.855560,0.052771}, + {-0.331353,0.532554}, + {-0.998449,-0.148572}, + {1.087764,1.700836}, + {-0.433519,1.028843}, + {0.238422,-0.076953}, + {-0.789252,-0.068322}, + {0.231041,0.257196}, + {-0.119942,0.994053}, + {-1.624463,0.592305}, + {0.489505,0.330256}, + {-0.791727,-0.240149}, + {0.023486,0.405492}, + {-0.712725,1.139520}, + {-0.397841,0.392477}, + {-0.172113,-0.103673}, + {-0.916898,-0.115494}, + {-0.740514,-0.159728}, + {0.030016,0.438515}, + {-0.189621,0.505697}, + {-0.312361,-0.485750}, + {0.395219,-0.191466}, + {-0.681995,0.910094}, + {-0.886425,0.038644}, + {-0.363377,0.254644}, + {1.213012,0.273619}, + {0.387538,-0.267483}, + {0.184534,-0.031493}, + {-0.082584,0.185597}, + {-0.168003,-1.103117}, + {-0.130390,0.133329}, + {-0.641604,-1.152805}, + {0.930567,0.868625}, + {-0.667303,0.040410}, + {0.885582,-0.805815}, + {1.203275,0.842920}, + {-1.398472,-0.587075}, + {-1.319309,-0.535182}, + {0.187520,0.267047}, + {1.366326,0.361960}, + {0.099778,-0.157978}, + {-0.133780,-0.185177}, + {0.536479,-0.703430}, + {-1.744925,0.483704}, + {-0.188968,-0.117653}, + {0.100862,-0.201597}, + {1.112205,0.886361}, + {1.065932,0.187435}, + {-0.515742,-1.160125}, + {-0.302570,0.686457}, + {0.650096,-0.027069}, + {-0.038160,1.315195}, + {0.325478,-0.873972}, + {-1.071418,0.172045}, + {0.086233,-0.410727}, + {0.062731,0.419938}, + {-0.067950,0.160374}, + {-0.871875,-0.789548}, + {-0.533510,0.417835}, + {0.549437,-0.061798}, + {0.230347,0.244062}, + {-0.664741,-0.647699}, + {0.866195,-0.509121}, + {-0.455236,-1.065637}, + {-0.098402,-0.964385}, + {0.972477,0.831164}, + {1.126182,1.212522}, + {-1.214912,-0.489044}, + {-0.145521,-0.082823}, + {0.172649,0.507886}, + {0.816966,0.723179}, + {0.286767,0.813230}, + {-0.292067,0.442358}, + {-0.242028,0.403211}, + {0.810219,-0.296835}, + {-0.965484,0.781090}, + {0.030609,1.430429}, + {-0.113167,-0.735173}, + {0.679344,0.038494}, + {-0.296711,1.173452}, + {0.205363,0.307279}, + {0.236531,-0.902335}, + {1.474420,1.009479}, + {-0.794636,-1.088974}, + {-0.600780,-0.630495}, + {-0.120746,0.153255}, + {-0.074198,-1.159780}, + {0.479216,-0.756744}, + {-0.061359,-0.464196}, + {0.266948,0.499785}, + {0.466252,-0.801677}, + {-0.739398,-1.104281}, + {-0.209888,0.342897}, + {0.317751,0.652312}, + {-0.108828,-0.502183}, + {0.311654,-0.272723}, + {-1.213448,0.887512}, + {-0.156897,0.247416}, + {0.684845,0.663784}, + {-0.834150,-1.557275}, + {-0.111679,-0.539638}, + {-0.629201,-0.244997}, + {0.345529,-0.729459}, + {-0.573635,0.569731}, + {0.202781,1.168916}, + {0.299240,0.698863}, + {-0.303744,0.092127}, + {-0.770121,-0.010426}, + {0.785242,-0.473798}, + {-0.258107,-1.614886}, + {-0.364306,0.445393}, + {-0.030830,-0.396489}, + {-0.861569,-0.618809}, + {-0.467142,-0.065045}, + {1.496496,0.390095}, + {-0.664346,-0.666512}, + {-1.078531,-0.683208}, + {-1.035570,0.332805}, + {0.334032,0.923234}, + {-0.352618,1.163516}, + {0.487088,0.813483}, + {-0.108438,0.111755}, + {-0.242763,-0.716151}, + {0.048218,-0.411570}, + {-0.682291,-0.100047}, + {-0.347302,-0.541596}, + {-0.055860,0.329776}, + {-0.486827,0.763519}, + {0.936834,0.378179}, + {0.560789,-0.581682}, + {0.062925,-1.147451}, + {0.370209,0.604113}, + {0.303006,0.781933}, + {-0.771395,1.640898}, + {0.367795,-0.936096}, + {-0.948469,-0.645591}, + {-1.338969,0.458720}, + {-0.119671,0.943494}, + {-0.504578,1.348833}, + {0.087662,0.180008}, + {-0.400353,-0.940478}, + {-1.020622,0.010305}, + {-0.572008,0.916672}, + {0.777239,-0.920403}, + {-0.246385,-1.900782}, + {0.368677,-0.397907}, + {-0.213803,1.423726}, + {-0.529380,0.287280}, + {0.674833,0.865517}, + {0.214032,0.083444}, + {-1.354788,0.121986}, + {-0.147398,-0.259880}, + {-0.236661,0.083370}, + {1.070576,-0.674437}, + {-1.696654,-0.863431}, + {-0.288571,-0.088433}, + {-1.178608,0.352638}, + {-0.686168,-0.664879}, + {-0.727181,0.139968}, + {0.704379,0.011108}, + {-0.097122,-0.414411}, + {0.833092,-0.416375}, + {1.679856,-0.186026}, + {-0.188038,-0.789648}, + {0.788024,1.319672}, + {-0.111910,-0.429271}, + {0.026979,-0.973063}, + {-0.822299,-0.468297}, + {-0.020743,-0.075185}, + {-0.196015,-0.653514}, + {-0.531606,0.126889}, + {0.683125,0.196602}, + {-0.642640,-1.115938}, + {0.216297,0.501497}, + {-0.798830,-0.596719}, + {0.118774,-0.356140}, + {-1.144614,-0.125928}, + {0.782631,0.924172}, + {-1.170188,-0.199186}, + {-1.219077,1.060124}, + {-0.426246,0.782024}, + {0.022011,1.753737}, + {-1.176024,1.096339}, + {0.892655,0.511964}, + {0.162166,0.613459}, + {0.089108,0.600362}, + {0.727923,0.549506}, + {0.043496,-0.772287}, + {0.545886,-1.494124}, + {-0.208190,-0.121938}, + {0.457878,-0.436767}, + {0.202868,1.137949}, + {0.442543,-0.970062}, + {-0.938356,0.524556}, + {-0.206104,-0.650013}, + {-0.241362,-0.130104}, + {0.825974,0.375147}, + {-1.030467,0.349799}, + {0.165765,0.053764}, + {0.539089,0.219063}, + {-0.920803,-0.360764}, + {-1.501808,0.467059}, + {0.010156,-0.026508}, + {0.296985,1.309064}, + {0.255845,0.369301}, + {0.282236,0.181767}, + {-0.599911,0.417191}, + {-0.124009,-0.052300}, + {1.762523,-0.638097}, + {1.559969,-0.392161}, + {0.788940,-1.012021}, + {-0.889773,0.829916}, + {-0.758505,0.629368}, + {0.149425,0.205740}, + {-1.489133,0.519999}, + {0.274081,-0.473210}, + {-0.400278,-0.605729}, + {-0.034848,-0.711428}, + {0.797203,0.653726}, + {0.684081,0.306657}, + {-0.898558,0.487512}, + {0.531034,-0.804407}, + {-0.189209,0.079728}, + {-0.236203,0.887653}, + {-1.055849,-0.030049}, + {0.157577,0.262297}, + {0.816064,0.614824}, + {-0.517684,-0.651690}, + {0.817597,0.142859}, + {0.632049,0.746048}, + {-0.004080,-0.044616}, + {-0.443800,-0.623657}, + {-1.950154,0.292959}, + {0.849712,0.756986}, + {-0.331359,0.267557}, + {0.110510,0.822703}, + {1.123170,-0.844141}, + {-0.779840,0.699576}, + {0.039398,0.256364}, + {0.701604,-1.071505}, + {0.068249,-0.334658}, + {-0.092711,-0.747982}, + {0.279999,0.476331}, + {-0.250376,-0.152404}, + {-0.633183,-0.303464}, + {-0.871779,-0.289203}, + {0.520590,0.441538}, + {0.411185,0.050415}, + {0.299688,0.061898}, + {0.006655,0.250882}, + {0.663987,-0.250278}, + {-0.435304,0.428809}, + {-0.954020,0.275075}, + {-0.534693,-0.019677}, + {-0.454147,-0.287202}, + {-0.410159,0.876545}, + {0.167473,0.702159}, + {-0.798929,-0.035521}, + {0.321676,0.347692}, + {0.817898,0.460273}, + {-0.129380,0.029044}, + {0.252003,-0.312483}, + {-0.794911,2.260189}, + {1.196671,-0.508444}, + {0.658018,0.454661}, + {-0.110961,1.988064}, + {1.027958,-0.139970}, + {0.371965,0.512944}, + {-0.889717,-0.561569}, + {-0.385539,1.492987}, + {0.182554,-0.293347}, + {-0.678913,-0.180265}, + {-0.619095,0.804020}, + {-0.246786,0.065080}, + {0.732415,0.287005}, + {-0.433814,0.359104}, + {-1.062615,0.398734}, + {-0.068996,-0.161415}, + {0.177600,-0.169124}, + {-1.098818,0.257113}, + {-0.199506,-0.234330}, + {-0.457931,-0.929827}, + {1.267319,-0.665283}, + {0.569162,0.128109}, + {-0.894920,-0.343725}, + {-1.047250,0.194854}, + {0.145325,1.000184}, + {-0.485785,0.176002}, + {0.416958,0.181212}, + {-0.538063,1.408044}, + {0.396945,0.376793}, + {-0.650388,0.600960}, + {-0.336692,0.041523}, + {0.762633,0.056195}, + {-0.101801,1.060078}, + {0.008753,0.341367}, + {1.213057,0.650804}, + {-0.242555,0.605359}, + {-0.096545,0.505888}, + {-0.218160,0.065450}, + {-0.392291,-0.153585}, + {-0.382276,-0.435595}, + {-0.566462,0.503745}, + {0.742303,0.092767}, + {-0.706119,-0.446348}, + {0.846034,-0.169926}, + {-0.800204,0.067673}, + {0.393443,-0.252153}, + {-1.189230,-0.417032}, + {-0.258718,-0.577801}, + {0.148415,-0.218861}, + {-0.242399,-0.722251}, + {-0.554846,0.266552}, + {-0.154566,0.345374}, + {-0.178620,-0.620674}, + {-1.452684,0.547125}, + {0.742394,-0.579851}, + {-0.535252,0.818573}, + {-0.373753,-0.844847}, + {-0.307951,-0.485154}, + {-1.055151,-0.234469}, + {-0.617500,0.155782}, + {-0.632949,-0.514511}, + {0.321217,-0.177787}, + {0.810575,0.867079}, + {-0.739780,0.080659}, + {-0.702951,-0.542686}, + {-0.849406,-0.434737}, + {-0.107667,1.546333}, + {-0.481642,0.249243}, + {-0.434692,0.925578}, + {-0.649042,0.190168}, + {0.543056,0.387398}, + {0.229006,1.749723}, + {-0.659196,1.496811}, + {-1.112472,-1.378348}, + {-0.347713,0.655806}, + {-0.333020,-0.442177}, + {-0.010896,0.243385}, + {0.396435,-0.937387}, + {-1.542977,-0.081353}, + {-0.988957,-1.301314}, + {-0.671717,0.385106}, + {-0.475757,-0.051430}, + {-0.152665,-0.430897}, + {0.226653,-1.286005}, + {-0.121291,-0.593614}, + {-0.416353,0.289417}, + {0.641212,-0.014396}, + {0.625740,0.289628}, + {0.109355,-0.864110}, + {-1.304982,0.864331}, + {0.540706,-0.034820}, + {1.160577,0.426277}, + {0.897177,0.120431}, + {0.166315,0.025191}, + {-1.194892,-0.817293}, + {-0.018821,-0.365376}, + {0.419874,-0.904719}, + {-0.376988,1.270798}, + {0.591134,-0.413071}, + {0.765301,0.183033}, + {0.425363,-2.200343}, + {0.282538,-0.115302}, + {0.471367,-0.189218}, + {0.072332,-1.738241}, + {0.705167,1.306461}, + {0.517418,-0.123308}, + {0.665696,0.768678}, + {0.799159,0.744041}, + {0.388496,0.054943}, + {-0.509369,-0.466480}, + {-0.932773,-0.129384}, + {-1.766512,0.342952}, + {-0.411573,-0.953764}, + {-0.376695,-0.388200}, + {0.253429,0.762383}, + {-0.238802,-0.837494}, + {-0.568870,0.170795}, + {0.970388,1.303336}, + {-0.483732,-0.759695}, + {-0.067874,-0.877486}, + {0.361803,-0.828496}, + {0.148481,-0.631609}, + {0.188760,0.682836}, + {0.233787,1.072984}, + {0.607324,0.052559}, + {-0.462668,-0.875849}, + {0.513511,-0.625931}, + {0.029210,-0.447513}, + {0.480831,0.480287}, + {-0.664907,-0.973077}, + {0.188319,-1.203828}, + {0.022725,-0.215416}, + {-0.426508,0.568704}, + {0.696166,-0.153401}, + {-0.888605,0.283359}, + {-1.887684,-0.631214}, + {-0.027258,-0.755818}, + {0.463172,0.099262}, + {0.176597,0.408871}, + {0.139626,0.475139}, + {-0.512137,-0.095797}, + {0.142498,0.791082}, + {1.714745,0.050486}, + {-0.151700,1.001408}, + {-0.187926,-1.189337}, + {-1.047952,0.351206}, + {-0.605363,0.923878}, + {-0.880344,-0.236752}, + {0.158545,0.536012}, + {-0.702132,-0.383830}, + {-0.232765,-0.434727}, + {-0.332018,0.111265}, + {-0.115645,1.224794}, + {1.130556,1.039947}, + {-0.684674,0.389432}, + {-0.495957,-0.819223}, + {-0.287520,0.044088}, + {-0.120997,-0.373808}, + {0.344498,-0.861474}, + {-0.287849,-0.627099}, + {-1.624836,1.107974}, + {-0.161896,0.734496}, + {0.922077,0.415761}, + {-0.092261,-0.792858}, + {0.740678,0.637053}, + {0.009040,-1.221702}, + {-0.151925,-1.520832}, + {-0.926963,1.228550}, + {1.592761,-0.740545}, + {0.975686,-0.204006}, + {-0.510445,-0.013318}, + {-0.116722,-1.460534}, + {0.050564,-0.696307}, + {0.238704,-0.306242}, + {-0.056267,-0.039088}, + {0.367015,0.155718}, + {0.828479,0.364074}, + {-0.066791,-0.263206}, + {-0.206769,-0.176020}, + {0.607347,-0.204373}, + {-0.328140,0.234530}, + {-0.149728,0.964312}, + {-0.673761,-0.476774}, + {-0.531880,1.004618}, + {-0.115795,-0.702836}, + {0.150798,-1.577178}, + {-0.261606,-0.115086}, + {-0.466822,-0.540959}, + {0.188110,-0.368671}, + {1.054299,0.152076}, + {0.955712,-0.861367}, + {-0.203463,1.366727}, + {0.633374,0.651992}, + {-1.391364,0.818343}, + {0.956846,1.464320}, + {-0.393481,0.977886}, + {0.069476,1.092029}, + {-0.819219,0.095735}, + {-0.358142,-0.433980}, + {0.880563,0.408356}, + {-0.110838,0.733042}, + {0.767039,0.273039}, + {0.484175,1.024151}, + {0.506067,-0.462739}, + {0.138992,0.524270}, + {0.438017,-0.334267}, + {-0.480006,-1.227354}, + {-0.549142,0.321805}, + {0.558154,0.085036}, + {-1.561828,1.403826}, + {0.792447,-1.514236}, + {0.340796,0.383640}, + {-1.368843,-0.478391}, + {0.058797,0.152301}, + {-1.186850,0.309630}, + {0.008511,0.569976}, + {0.499503,0.907362}, + {-0.582328,-1.193703}, + {0.457649,0.390902}, + {0.080038,0.404945}, + {0.509056,-1.101939}, + {-0.172094,0.524935}, + {-0.856769,-1.342524}, + {0.600361,0.564700}, + {0.669194,-0.792939}, + {1.645031,-1.295386}, + {-0.563368,-1.044735}, + {1.573442,0.369752}, + {-0.476873,1.693162}, + {0.009118,-0.394260}, + {-1.892748,0.376392}, + {0.527800,0.693088}, + {0.174069,1.074548}, + {0.421630,-0.272748}, + {-0.328084,0.643263}, + {-1.074268,-0.336496}, + {1.380511,-0.549909}, + {0.446078,-0.836703}, + {0.094413,0.555130}, + {2.359104,0.198856}, + {-0.171100,1.095922}, + {0.554416,-0.723893}, + {-1.692759,-0.111848}, + {-0.968574,-0.811231}, + {-1.243309,-0.641704}, + {0.374876,-0.441376}, + {-0.298878,0.934476}, + {0.959066,0.185512}, + {-0.372387,0.626353}, + {-0.200447,0.974171}, + {-0.656902,-0.411072}, + {0.606477,0.609449}, + {0.596347,-0.335998}, + {-0.680908,-0.373738}, + {-0.714886,-0.319760}, + {-1.232879,-0.543364}, + {0.597159,0.750747}, + {-0.092650,0.649143}, + {1.312315,0.577498}, + {0.949531,0.577766}, + {-0.536287,-0.256933}, + {0.026927,0.209819}, + {-0.506280,0.975751}, + {-0.100592,-0.496428}, + {0.703664,0.977937}, + {0.439077,0.642939}, + {-1.186330,-0.562701}, + {0.834602,-0.346392}, + {-1.140063,1.278697}, + {-0.176394,-0.177266}, + {-1.911734,-0.158996}, + {-0.938247,-1.139427}, + {0.430852,-0.519788}, + {0.552453,0.347402}, + {0.397558,-0.621711}, + {0.395750,-0.030026}, + {-0.318682,0.526152}, + {-0.086843,0.198691}, + {-0.463806,1.322882}, + {0.021087,0.405731}, + {-0.997044,-0.774766}, + {-0.693620,0.425756}, + {-0.093692,0.639838}, + {0.605591,0.305130}, + {-1.280314,0.984296}, + {-0.058598,-1.163590}, + {0.649775,-0.003839}, + {-0.268283,0.754608}, + {-1.297487,0.615832}, + {0.619815,-0.088227}, + {-0.447024,0.734463}, + {0.342713,0.254090}, + {-0.076577,1.067338}, + {-0.580665,-0.362452}, + {0.233286,-0.620338}, + {-0.934433,0.379823}, + {0.933342,0.231465}, + {-0.859952,0.114437}, + {-0.856929,0.585641}, + {-0.943033,-0.113384}, + {1.038475,0.201911}, + {-0.469030,-0.388884}, + {-0.118337,-0.297191}, + {-0.702286,-0.240531}, + {-0.513404,-0.591197}, + {0.324736,0.499129}, + {0.131897,-0.425180}, + {-0.464172,1.168790}, + {-0.606129,0.482431}, + {-0.947150,-0.266069}, + {0.443681,-1.910554}, + {-0.022401,-0.327754}, + {0.551598,0.923532}, + {0.223361,-0.385604}, + {0.185751,0.593156}, + {-0.184030,0.754766}, + {1.395817,0.028574}, + {0.475188,0.054661}, + {-0.277480,0.125616}, + {-0.496862,-1.147994}, + {-0.004339,-1.205962}, + {-0.143203,-0.265497}, + {0.125309,-0.043515}, + {0.366992,0.512033}, + {0.824571,0.106918}, + {-1.068985,0.132551}, + {1.832261,0.084296}, + {0.263801,-1.200894}, + {-1.508048,0.915831}, + {0.482696,-0.426293}, + {0.033090,-1.904729}, + {-2.108846,-0.435991}, + {-0.176570,0.183011}, + {-0.552305,0.353128}, + {-0.238016,0.185723}, + {-1.105006,-0.940637}, + {-0.819965,-0.929777}, + {0.157431,0.682561}, + {-0.217550,0.640647}, + {0.203090,-0.654541}, + {-0.077923,1.061114}, + {0.255508,-1.220831}, + {-0.166887,-0.641701}, + {-0.366592,0.125942}, + {-1.173483,0.813176}, + {0.808734,-0.982589}, + {-0.278042,1.861455}, + {-0.065514,0.269957}, + {0.906470,0.226526}, + {-0.120529,-0.080793}, + {0.417512,0.156899}, + {-0.907569,-0.097119}, + {0.263494,-0.109026}, + {0.189893,-0.050584}, + {-0.790905,0.939795}, + {-0.170601,-0.628612}, + {0.350909,-0.626418}, + {-0.386598,-0.927327}, + {-0.453768,0.023829}, + {0.914262,0.275209}, + {-0.562420,-0.398459}, + {-0.630268,1.978496}, + {0.221322,1.406665}, + {0.469280,0.011328}, + {1.173789,0.177916}, + {-0.299844,0.272473}, + {0.251780,-0.111125}, + {-0.773700,1.126264}, + {-0.141209,0.420552}, + {0.799946,-0.075850}, + {-1.245327,0.658100}, + {0.291694,0.510028}, + {-0.794185,-0.184348}, + {0.558676,-0.725595}, + {0.104020,0.146003}, + {0.687901,0.258342}, + {0.447092,1.306396}, + {0.252250,-0.596987}, + {-0.576601,0.104527}, + {-0.528980,0.897886}, + {0.319621,0.007942}, + {-0.271045,-1.032491}, + {0.106805,-1.171924}, + {-0.117934,-0.002040}, + {0.937400,0.094878}, + {0.767345,0.456467}, + {-0.248117,1.399906}, + {-0.019431,0.029962}, + {-0.553835,-0.199065}, + {0.973482,-0.555913}, + {-1.158272,0.011195}, + {0.289042,-0.022439}, + {-0.242274,0.051491}, + {-0.784552,0.046357}, + {0.089161,-0.070526}, + {-0.347404,-0.479778}, + {-0.387975,-0.227373}, + {0.209500,-1.064529}, + {1.636459,-0.994817}, + {0.962069,-0.828699}, + {0.599537,0.180033}, + {0.403511,-1.375267}, + {-0.030051,0.364420}, + {0.255406,-0.152639}, + {-0.842737,-0.083531}, + {0.265162,-0.110579}, + {0.023556,-1.674108}, + {0.998462,-0.391540}, + {-0.236300,-0.679450}, + {-0.135786,0.684768}, + {-0.166010,0.165157}, + {0.727715,-0.372501}, + {-0.189725,0.488845}, + {-0.295131,-0.024017}, + {0.260305,-0.897897}, + {0.282883,-0.374545}, + {-0.131905,0.759994}, + {0.642608,-0.501903}, + {0.235753,-0.019992}, + {0.234917,-0.917430}, + {-0.187950,-0.955321}, + {-1.679033,-0.077540}, + {0.057969,-0.182145}, + {0.806970,0.187450}, + {-1.255149,-1.161657}, + {0.071722,-1.622885}, + {0.743520,-0.598178}, + {-0.541128,0.760663}, + {-0.690128,-0.163725}, + {-0.713829,1.032708}, + {-0.184282,0.073560}, + {-1.631399,-1.104151}, + {-0.287196,-1.050644}, + {-0.861881,0.837003}, + {0.658268,-0.445585}, + {-0.492519,-0.822022}, + {-0.042083,0.453774}, + {-1.060994,0.621202}, + {0.552598,-0.448519}, + {0.547632,-0.643752}, + {-0.180073,-0.870508}, + {-0.301082,0.100829}, + {-0.185883,0.378342}, + {-1.021355,-0.041632}, + {0.835251,0.146685}, + {0.367444,1.012175}, + {-0.336391,0.016233}, + {-1.065102,0.040814}, + {-0.949472,0.846319}, + {1.291102,0.795366}, + {-0.487972,1.266731}, + {0.385963,-1.232202}, + {-0.274804,-0.575065}, + {0.142511,0.996808}, + {-1.127767,0.320745}, + {-1.464213,-0.001272}, + {-1.263870,-0.925822}, + {0.440001,1.508906}, + {-1.938712,-1.470684}, + {-0.186008,0.087603}, + {0.166957,-0.114873}, + {-0.546288,0.060052}, + {-0.451944,-0.677336}, + {0.110307,-0.073643}, + {-2.575184,-0.348193}, + {0.686896,-0.114358}, + {0.104536,-0.295687}, + {1.742926,0.023467}, + {-0.764176,0.383341}, + {0.143325,0.194010}, + {0.520979,0.503754}, + {1.008110,-0.184279}, + {0.707282,0.233438}, + {-1.342322,-0.476836}, + {-0.162102,-0.516986}, + {-1.555440,0.272954}, + {1.012432,-0.043494}, + {-0.081673,1.117860}, + {0.403470,0.057254}, + {-0.517038,-0.110340}, + {0.475128,0.752501}, + {-0.489141,-0.553330}, + {-0.636345,-0.926923}, + {0.379515,0.423726}, + {0.263556,-0.838201}, + {1.364556,-0.420440}, + {-0.269874,0.091490}, + {-1.434258,0.014961}, + {-0.590992,0.091827}, + {-0.308413,0.016741}, + {0.349648,-1.591085}, + {-0.118712,1.184347}, + {0.187251,1.433784}, + {0.562964,1.318689}, + {-0.861674,-0.392680}, + {0.002905,0.622487}, + {-0.151723,-1.179258}, + {-0.070747,0.053384}, + {0.525404,-0.554260}, + {-0.343545,-0.118922}, + {-0.507229,-0.864504}, + {0.500450,-0.403323}, + {0.377233,0.949879}, + {-0.833561,-0.056483}, + {-0.725906,-0.705636}, + {0.922402,-0.108117}, + {0.242458,-0.509338}, + {1.107595,0.489720}, + {-1.198374,-0.015819}, + {-0.413664,-0.441380}, + {0.218345,-1.315292}, + {0.497907,-0.042786}, + {1.204892,-0.699516}, + {-0.555751,0.313409}, + {0.379257,-0.609355}, + {0.950328,-0.278547}, + {-0.755355,0.813622}, + {0.513696,-0.533451}, + {-0.495311,0.409720}, + {0.112153,-1.160556}, + {0.353378,0.752034}, + {0.459675,-0.527592}, + {0.546631,0.123779}, + {0.828528,0.384762}, + {-0.369489,0.154474}, + {-0.505704,0.615962}, + {-0.473887,0.076201}, + {0.008357,-0.357277}, + {0.129246,-0.337053}, + {-0.257137,-0.189718}, + {-1.475479,0.652016}, + {0.204440,-0.454342}, + {1.032094,-0.103206}, + {-1.053839,0.656926}, + {0.190919,-0.204573}, + {-0.069636,-0.090363}, + {-1.022143,0.421546}, + {0.117690,-0.596925}, + {0.668920,-0.202848}, + {0.414527,0.111164}, + {0.569160,-0.332882}, + {-0.740114,-0.838751}, + {-0.811449,0.332958}, + {0.165041,-0.548386}, + {0.586089,1.162788}, + {-0.441744,0.705830}, + {0.345507,0.417786}, + {-0.150969,-0.217414}, + {0.980970,-0.395728}, + {0.202029,0.053837}, + {-0.567949,-0.756414}, + {0.838055,-0.962655}, + {0.185033,-0.842624}, + {0.505452,-0.230980}, + {0.500792,-1.312236}, + {0.098343,0.520689}, + {-0.927027,-0.045385}, + {0.569641,0.548063}, + {-0.798887,1.354409}, + {-1.055338,0.516666}, + {-1.035704,0.360430}, + {-0.184264,0.067661}, + {0.570477,0.590137}, + {0.551827,0.899930}, + {0.533855,1.304288}, + {0.350958,-0.358284}, + {-1.384382,-0.753483}, + {0.601123,-2.156966}, + {-0.554389,0.059956}, + {-0.871086,-0.106200}, + {0.558179,0.180493}, + {0.531430,-0.025180}, + {-0.795320,0.260424}, + {0.692222,-0.238340}, + {0.169459,0.823660}, + {0.299030,0.761034}, + {-0.698652,-0.351722}, + {0.368231,0.434130}, + {0.185790,-1.403230}, + {-0.799883,-0.119406}, + {0.736042,0.392089}, + {-0.666826,-0.832812}, + {-0.513339,0.050691}, + {-0.587525,0.355240}, + {-0.517997,0.850523}, + {-0.899883,0.695032}, + {-0.206738,0.938988}, + {-0.699376,-0.248451}, + {0.788660,-0.329191}, + {-0.803143,0.755641}, + {-0.347574,-0.096980}, + {0.655063,-0.198669}, + {0.324775,-0.654269}, + {0.921286,-0.437049}, + {0.744575,-0.148011}, + {-1.499490,0.208673}, + {1.813010,1.936063}, + {-0.330382,0.942141}, + {-0.175160,0.095578}, + {-0.688972,0.621992}, + {-0.710787,0.337475}, + {0.082558,-0.051458}, + {0.108929,-1.049616}, + {0.411274,0.385344}, + {0.016239,-0.562674}, + {0.921934,0.406952}, + {0.524669,-0.237757}, + {-0.660776,-0.152646}, + {-0.149333,0.000891}, + {-0.254695,-0.615310}, + {-0.756202,0.840237}, + {-0.309718,-0.633714}, + {-0.218646,-1.024427}, + {-0.085284,0.238786}, + {-0.127700,-0.176234}, + {0.641768,-0.561286}, + {-1.032711,-0.515069}, + {1.363094,-0.095828}, + {1.534582,0.380000}, + {0.805601,0.320919}, + {0.701193,-0.161937}, + {0.262605,-0.457002}, + {0.345692,-0.485455}, + {0.973676,1.050191}, + {0.563517,-0.896698}, + {-1.052935,-0.655316}, + {-0.231460,-0.146481}, + {-0.979474,0.060279}, + {-1.088586,-0.421800}, + {0.161069,1.003289}, + {0.090253,-0.088947}, + {-0.547361,-1.206487}, + {0.246441,1.106913}, + {-0.706636,-0.015038}, + {0.132891,1.002612}, + {-0.295681,0.231105}, + {-1.153732,-0.996986}, + {-0.501629,-0.644197}, + {0.295345,-0.691762}, + {-1.440078,-0.607401}, + {0.101169,0.934845}, + {0.071043,-0.644190}, + {0.614922,-0.503042}, + {1.037925,-0.411965}, + {-0.852186,0.229310}, + {0.299200,-0.324206}, + {-0.088801,-0.474293}, + {-2.187987,-0.562442}, + {0.874113,-0.747951}, + {0.575873,-0.728991}, + {-0.846189,0.157840}, + {-1.429388,0.899668}, + {0.146948,-0.004011}, + {1.408618,-0.212564}, + {-0.215899,-0.253146}, + {1.498321,-0.772136}, + {-0.877108,-0.120817}, + {1.817143,0.201466}, + {-0.209176,0.538539}, + {1.517331,-0.539165}, + {-0.251656,0.628209}, + {-0.629867,1.537735}, + {0.022098,1.206070}, + {-0.360631,-0.347506}, + {0.752599,0.256274}, + {0.417381,-0.329550}, + {-1.519437,-1.728036}, + {-0.414089,-0.630542}, + {-0.364826,0.403330}, + {0.581478,0.594084}, + {0.663563,0.961159}, + {0.825272,1.573900}, + {-0.367023,-0.988905}, + {-0.073497,0.708838}, + {1.148249,-0.415716}, + {-0.101004,0.106337}, + {-0.928442,-1.408122}, + {0.469680,-0.047484}, + {-0.960126,-0.904661}, + {-1.132264,-0.188708}, + {-0.016658,-0.199830}, + {-1.075654,-0.338366}, + {0.061431,1.126846}, + {-1.081800,-0.415970}, + {1.123256,-0.127503}, + {-1.145737,-0.191834}, + {-0.793043,-0.118410}, + {-1.196367,1.014650}, + {1.527032,-1.381034}, + {0.647338,-0.080257}, + {-0.804731,0.453449}, + {-0.516077,0.480638}, + {0.530282,-0.739929}, + {0.269033,-1.963435}, + {1.477697,0.784988}, + {0.311743,0.788590}, + {-0.325671,0.653941}, + {-0.233521,-0.206602}, + {-0.278201,0.128288}, + {1.135366,-1.284597}, + {-0.763170,-0.012900}, + {0.438701,0.811553}, + {-0.249020,-0.316173}, + {0.561871,-0.138876}, + {0.726334,1.041021}, + {0.098118,-0.710592}, + {-0.572228,0.067081}, + {0.734250,0.106212}, + {-0.105387,0.013023}, + {-0.089425,0.237119}, + {-0.955892,0.328177}, + {-0.219179,0.170715}, + {0.931844,-0.349402}, + {-0.006197,-1.310244}, + {1.151184,0.469394}, + {1.308615,1.117283}, + {-0.431605,0.200205}, + {0.191977,-0.367832}, + {0.236475,0.821365}, + {-0.941490,0.282290}, + {-0.006772,0.760460}, + {0.184771,-0.364421}, + {-0.329091,-1.396452}, + {-0.459936,0.172703}, + {-0.153217,1.302087}, + {0.098202,-0.527384}, + {-1.355245,0.009842}, + {-0.924139,0.157557}, + {-0.100397,-0.408893}, + {0.217141,-0.593144}, + {-0.156430,1.211818}, + {0.011004,-0.314417}, + {0.131301,-0.060106}, + {0.399402,-0.219055}, + {0.392387,-0.631019}, + {-0.341266,0.461355}, + {0.426031,-0.852869}, + {-0.101110,0.790776}, + {-0.436091,1.765631}, + {0.568398,0.767510}, + {-0.271711,-0.480995}, + {-0.249560,-0.882825}, + {-0.381369,1.034425}, + {-0.503866,0.598387}, + {0.876082,-1.385329}, + {0.063173,0.213468}, + {0.543796,-0.225159}, + {-0.032141,0.017681}, + {0.493171,0.162913}, + {0.686035,0.268915}, + {0.175293,1.136665}, + {0.157721,0.697172}, + {-1.127321,0.592262}, + {0.166970,-0.343138}, + {0.194866,0.189738}, + {-0.288449,1.476208}, + {-0.421817,1.014786}, + {0.126023,-0.775427}, + {0.394521,-0.989582}, + {-1.089528,-0.055308}, + {0.200147,0.011439}, + {1.903990,0.358153}, + {0.664392,-0.905588}, + {0.539781,0.841634}, + {0.582682,0.671146}, + {-0.024278,-0.572103}, + {0.185635,-0.697631}, + {0.106066,0.699490}, + {0.246818,0.300906}, + {1.189828,-0.227730}, + {-0.013825,-0.769516}, + {-0.684393,0.018085}, + {1.218080,-1.701471}, + {0.424389,-0.592234}, + {1.403248,-0.017446}, + {0.013415,-0.977801}, + {0.369274,0.430111}, + {0.381919,1.117175}, + {0.816133,-0.715540}, + {0.035215,-0.105043}, + {0.556964,-0.135119}, + {-0.673203,1.053060}, + {-0.516621,0.494257}, + {0.450111,-0.035975}, + {-0.421140,1.411773}, + {-0.535489,0.037563}, + {-0.574600,-1.377926}, + {0.032767,-0.640636}, + {-0.459555,-0.203066}, + {-0.434567,0.545250}, + {0.650357,0.652128}, + {-0.892425,1.283559}, + {0.692184,0.557113}, + {0.751736,-0.211262}, + {0.313737,-0.163152}, + {-0.247115,-0.034955}, + {0.491416,-1.537278}, + {0.930530,-1.108210}, + {-0.556112,-1.391934}, + {-0.961302,0.326983}, + {1.662905,-0.278552}, + {-0.313318,-1.433712}, + {-1.000577,0.559144}, + {0.216728,0.878720}, + {0.487019,-0.649528}, + {-0.623891,-0.371940}, + {-0.040803,0.208126}, + {0.315032,0.149693}, + {-0.198370,-1.011750}, + {-0.824018,1.104106}, + {-0.353701,0.822379}, + {-0.123394,-1.055204}, + {-0.737870,-0.757284}, + {-0.634799,-0.464904}, + {-1.763571,-0.369890}, + {0.047103,0.948021}, + {0.847644,0.119019}, + {0.504559,-0.136831}, + {0.049168,0.250676}, + {-0.407130,0.581465}, + {-0.424114,-0.237635}, + {-0.576690,-0.447438}, + {-0.534590,-0.285313}, + {-0.525026,0.509418}, + {0.991170,0.776430}, + {0.082037,-0.154868}, + {-0.738468,1.113500}, + {-1.376870,-0.237227}, + {0.182010,0.599488}, + {-0.012601,0.360641}, + {-0.874033,0.846574}, + {-0.453102,0.527465}, + {-0.140117,0.979272}, + {0.469908,-0.563083}, + {0.494906,0.205413}, + {-0.152124,1.445632}, + {-1.070697,-0.417032}, + {0.620584,1.098607}, + {0.647829,-0.212808}, + {0.329902,0.206018}, + {0.769611,0.068876}, + {0.595618,-1.179969}, + {0.134816,1.155849}, + {0.132816,-0.826840}, + {-0.204456,-0.005218}, + {0.565919,-0.406434}, + {1.076761,0.279015}, + {-0.824357,-0.318681}, + {0.536584,1.190336}, + {-0.837780,-0.783722}, + {-0.365623,-0.592565}, + {0.140732,-0.354577}, + {-0.318893,0.197879}, + {-0.650844,0.142190}, + {0.611141,-0.819490}, + {0.824394,-1.997252}, + {1.188414,-0.772520}, + {0.495803,0.456638}, + {-0.793332,1.358671}, + {-1.208357,0.747812}, + {0.639802,-0.096943}, + {0.128095,-0.588363}, + {0.114812,0.593784}, + {-0.189818,-0.088502}, + {-0.281234,0.074641}, + {-0.318011,0.468384}, + {-0.032031,0.092814}, + {0.280203,0.824080}, + {0.375190,0.631836}, + {0.434939,-0.102007}, + {-0.537006,-1.514559}, + {0.203213,-0.319343}, + {-0.141183,-1.038148}, + {-0.218501,-0.477195}, + {-0.338538,-0.751898}, + {-0.686068,0.283823}, + {0.062352,1.559887}, + {-0.241352,-1.511161}, + {0.720157,-0.832961}, + {0.558763,-0.548703}, + {0.263548,0.902844}, + {0.842079,-0.167704}, + {-0.542509,0.454977}, + {0.903157,0.620579}, + {0.964410,0.047286}, + {-0.955672,0.944376}, + {0.860074,1.300853}, + {0.512725,0.794600}, + {-0.450602,0.516415}, + {-0.447504,0.181518}, + {-0.437303,0.401800}, + {-0.578495,-0.043247}, + {0.617911,-0.345819}, + {-0.552715,-1.044463}, + {-0.867800,-0.875333}, + {0.481378,-0.046626}, + {0.191387,-0.016629}, + {-0.518826,-0.671362}, + {-0.076694,0.392508}, + {0.019799,-0.500523}, + {1.539289,0.191522}, + {0.268896,0.472991}, + {-0.122127,-0.508825}, + {0.314364,-0.019904}, + {-0.144547,0.440958}, + {0.265538,0.198174}, + {0.863341,-0.176679}, + {0.122943,-0.154642}, + {0.043506,0.107960}, + {0.099631,-0.078301}, + {-0.560396,0.316725}, + {1.286545,0.635450}, + {-0.358192,-0.438848}, + {1.039133,-0.132411}, + {1.186643,0.405783}, + {-1.001651,-0.156892}, + {-1.179719,-0.490621}, + {-0.721972,0.717535}, + {-1.029560,-0.455562}, + {-0.077975,0.563804}, + {-0.813295,0.621995}, + {0.618189,0.598485}, + {-1.199978,-0.777894}, + {-0.290504,0.990481}, + {-0.031754,0.345115}, + {-0.368322,1.005785}, + {0.599679,-0.895852}, + {-0.590234,-0.096684}, + {-0.496663,-0.691375}, + {0.088853,0.700215}, + {-0.183732,0.242244}, + {-0.643606,-0.335184}, + {0.121277,-0.906499}, + {0.241237,1.352691}, + {-0.254636,-0.459023}, + {-0.621434,-0.262442}, + {-1.261593,0.823850}, + {0.524973,0.145684}, + {0.664583,-0.298579}, + {0.609610,-0.078780}, + {0.203934,-0.123287}, + {-0.774268,-0.471319}, + {-0.207046,1.271445}, + {-0.236533,-0.485094}, + {-0.597981,1.115511}, + {-0.406298,0.760957}, + {0.694472,-0.379866}, + {-0.372914,0.292032}, + {0.784017,0.922657}, + {0.297901,0.163029}, + {-0.904827,-0.819312}, + {0.561786,0.562537}, + {-0.239547,0.126229}, + {-1.407316,-0.320167}, + {-0.134303,-1.366530}, + {-0.531725,-0.336818}, + {0.623285,0.322439}, + {-0.335097,0.897800}, + {0.695935,-0.312405}, + {0.095367,0.409572}, + {-0.765337,-0.211423}, + {-1.131867,-0.623383}, + {-0.267968,-0.286704}, + {-0.404970,-0.309191}, + {1.379609,0.251604}, + {0.331291,0.143124}, + {-0.913650,0.804486}, + {-1.218644,0.871913}, + {0.039236,0.744136}, + {1.449769,0.975760}, + {-0.210467,0.262295}, + {0.405987,0.424655}, + {0.999384,0.627690}, + {1.164600,0.133861}, + {-0.175488,1.427081}, + {-1.744108,0.555451}, + {0.302610,-0.688230}, + {-0.529522,-1.322584}, + {-0.223304,-0.289473}, + {0.668378,0.179522}, + {0.084177,0.492469}, + {0.266502,-0.068043}, + {0.764533,-0.106614}, + {-0.317832,0.270595}, + {-0.444143,-0.228776}, + {0.108340,-0.373711}, + {-0.027397,-0.010145}, + {-0.613227,0.902768}, + {-0.557055,0.429239}, + {0.373258,-0.228158}, + {-0.631503,-0.356203}, + {0.643938,-0.284783}, + {-0.784050,-0.572626}, + {-0.207974,-0.145033}, + {0.006310,0.173822}, + {-0.106005,0.111244}, + {2.363675,-0.471391}, + {0.972607,0.013920}, + {1.130367,-0.608325}, + {-0.479318,-0.017402}, + {-0.647306,0.746952}, + {1.365227,0.174166}, + {0.586382,-0.751731}, + {-0.467157,1.701264}, + {-0.531539,0.869207}, + {-0.610338,0.132307}, + {0.356638,0.108132}, + {-0.568649,-0.676443}, + {0.089214,-0.008608}, + {-0.984149,0.709467}, + {0.597348,0.413095}, + {0.139796,1.022797}, + {-1.032483,-0.315232}, + {0.021779,-1.284263}, + {0.891663,-0.443996}, + {-0.684480,-0.817773}, + {0.401035,0.351907}, + {0.217196,-0.252169}, + {-1.349881,-0.517501}, + {0.816430,-0.091990}, + {-0.502108,-0.698291}, + {-0.086025,0.915485}, + {-0.682122,-0.322046}, + {0.706000,0.763462}, + {0.796854,0.455243}, + {1.366467,1.196075}, + {0.417067,-0.256263}, + {0.015371,0.451181}, + {-0.400583,0.178607}, + {0.179912,-0.117066}, + {0.597156,-0.688654}, + {-0.661676,-0.820197}, + {0.085683,-0.217177}, + {-0.706450,-1.381830}, + {0.028548,1.200703}, + {-0.920667,0.289784}, + {0.160350,-0.351146}, + {-0.804724,-0.618602}, + {0.024888,0.647150}, + {-0.098113,0.173361}, + {0.697754,0.291105}, + {-1.408036,1.022388}, + {0.469920,0.445517}, + {0.384059,0.532228}, + {-0.151818,0.944132}, + {-0.090433,0.327546}, + {-0.879679,-1.070965}, + {-0.495967,0.063480}, + {-0.358409,-0.789978}, + {-0.699352,-0.883109}, + {-1.947079,0.913473}, + {-0.641222,-0.030654}, + {-1.419634,-0.263358}, + {-0.287427,1.075618}, + {1.041925,0.333373}, + {1.035917,-0.384391}, + {-0.742460,0.756039}, + {0.484778,0.439710}, + {-0.454690,-0.553386}, + {-0.860744,-0.035129}, + {-0.063566,0.489990}, + {0.107992,0.565035}, + {-0.016311,0.236242}, + {0.309996,0.522161}, + {0.839932,1.127528}, + {0.213453,-1.064570}, + {-0.716013,0.561550}, + {-0.277888,-0.545995}, + {-0.080229,-0.275056}, + {-1.231363,-0.438038}, + {-0.221378,1.152323}, + {0.465562,-0.015422}, + {-0.636983,-1.776097}, + {0.994972,1.153935}, + {-0.840363,-1.044283}, + {-0.147775,-0.659287}, + {-1.008426,1.195206}, + {0.221680,0.312210}, + {0.391826,0.267132}, + {-0.300629,0.352818}, + {1.088779,0.848130}, + {-0.087740,-1.562253}, + {-0.636828,0.356063}, + {0.255724,-0.928242}, + {0.197228,-1.313775}, + {-0.363243,-0.477933}, + {0.342319,1.332603}, + {-0.687342,-0.697300}, + {0.588366,-0.220649}, + {0.718963,1.534212}, + {0.378261,-0.815048}, + {0.008267,-0.048339}, + {-0.337132,-0.394747}, + {-0.429718,-1.955695}, + {0.422312,0.648188}, + {-0.225384,-1.038982}, + {-0.074649,-0.432788}, + {1.197830,0.224400}, + {0.179256,0.174055}, + {0.324657,-0.153234}, + {-0.008755,-0.720614}, + {1.171336,1.386902}, + {-0.502534,0.544987}, + {-0.874559,-0.045977}, + {0.641911,0.309244}, + {-0.852252,-0.189481}, + {0.905778,-0.240689}, + {0.805296,0.190095}, + {0.583950,0.500505}, + {0.927808,-0.289025}, + {-0.161069,-1.142641}, + {-0.829648,-1.067679}, + {0.160495,-0.177610}, + {-0.669901,0.538416}, + {-0.417880,-0.610111}, + {-0.641121,0.118270}, + {-0.307481,0.182497}, + {-0.098936,-0.300794}, + {0.079945,-1.126696}, + {0.767377,-0.205567}, + {-0.229164,-0.681283}, + {-0.938784,0.869544}, + {0.729480,-0.893640}, + {0.318684,0.291873}, + {-0.063858,-1.269459}, + {-0.394907,0.032640}, + {0.041145,-0.695384}, + {0.903121,-0.762764}, + {-0.236944,-1.403906}, + {0.010014,-0.107070}, + {-0.144645,0.624289}, + {0.889531,-0.018986}, + {0.956051,1.297021}, + {-0.096103,-0.738099}, + {-0.795984,-1.097452}, + {-0.394740,0.151985}, + {0.109809,-0.515633}, + {1.331729,-1.680084}, + {1.546974,0.279037}, + {-1.785160,-0.221012}, + {0.122575,-0.919889}, + {-0.788030,1.561325}, + {-0.205935,0.088416}, + {-0.265662,0.431570}, + {0.115537,0.899615}, + {0.471598,0.669058}, + {-0.214156,0.254611}, + {0.970194,1.044374}, + {-0.486194,0.026669}, + {0.232387,0.010928}, + {0.162715,0.243238}, + {-0.554603,0.305242}, + {0.050873,0.089235}, + {0.866591,0.431844}, + {-0.137254,0.419949}, + {-0.444023,-0.814751}, + {0.405856,0.278733}, + {-0.006847,-0.084791}, + {0.661887,0.366497}, + {0.036938,-1.474893}, + {0.074623,0.527883}, + {-0.932561,-1.217377}, + {-0.579955,-0.770222}, + {0.496777,-0.398753}, + {0.415390,0.029064}, + {-0.368869,0.318877}, + {-0.083926,0.115238}, + {-0.165148,0.315531}, + {-0.201764,-1.548454}, + {-0.837318,-1.399309}, + {0.078016,-0.732903}, + {-0.094333,-0.160290}, + {0.732228,-1.029345}, + {0.690766,0.425063}, + {-0.896572,-0.514863}, + {0.781318,-0.797095}, + {-0.121511,0.255802}, + {1.919578,-0.769384}, + {-0.060926,0.430455}, + {-0.409906,-0.249459}, + {-0.460218,-0.783980}, + {-0.191177,0.609070}, + {1.020451,-0.427484}, + {0.388170,-0.559406}, + {0.583320,0.030542}, + {-1.179019,0.739794}, + {1.513305,0.344903}, + {-1.082705,-0.638275}, + {-0.426897,0.254435}, + {-0.481466,0.047423}, + {0.330028,-0.364721}, + {0.571710,0.131679}, + {0.796521,-1.303731}, + {-0.192941,-0.043661}, + {-0.182032,1.445423}, + {-0.370906,0.132620}, + {1.865372,-0.256694}, + {0.122110,-0.042592}, + {-0.484049,0.625328}, + {0.498676,-0.447230}, + {-0.698297,-0.450146}, + {0.197802,0.388351}, + {-0.270285,0.053455}, + {0.113784,-0.200340}, + {0.144229,0.267333}, + {0.085266,1.105437}, + {-0.021050,1.100430}, + {1.668020,-1.591069}, + {1.074784,-0.878131}, + {-0.687458,-1.410101}, + {0.945055,0.057837}, + {-0.968993,-0.249526}, + {-0.095768,-0.004312}, + {0.539684,-0.120041}, + {-0.690336,-0.784441}, + {-0.070364,0.818636}, + {0.306879,-0.280708}, + {-0.072888,0.404632}, + {-1.158507,1.076282}, + {-1.311557,0.016792}, + {-1.276006,0.450810}, + {0.052812,-0.238705}, + {1.449476,-0.258773}, + {-0.935995,-0.005463}, + {-0.355631,0.492401}, + {-0.612492,0.524131}, + {0.838550,0.621703}, + {0.198766,-1.213802}, + {0.114797,-0.883231}, + {0.323205,-0.912574}, + {-0.492987,0.031387}, + {0.613420,-1.264507}, + {-0.452913,-0.543444}, + {0.252574,0.848988}, + {0.177081,1.145831}, + {-0.172781,-0.088674}, + {-0.380519,-0.210205}, + {-0.333186,-1.162848}, + {0.424112,-0.009379}, + {-0.876016,0.594356}, + {0.191680,-0.347826}, + {-0.001609,-0.647491}, + {-0.410415,-0.735499}, + {-0.001733,-0.310524}, + {-0.323841,0.482596}, + {-0.242955,0.027559}, + {0.502454,0.491188}, + {0.014760,0.136650}, + {0.969240,-0.064603}, + {-0.230129,-0.410373}, + {0.068982,0.158729}, + {-0.264938,1.121409}, + {-0.330733,-1.289736}, + {-0.310857,-0.416680}, + {-0.995101,0.426949}, + {0.044670,-0.644963}, + {-0.370186,-0.419359}, + {-0.198722,0.626537}, + {0.250446,-0.321014}, + {-0.199294,0.428196}, + {0.287559,0.661812}, + {-0.819334,-0.182923}, + {0.627230,0.073635}, + {-0.254799,0.086437}, + {0.629778,-0.238849}, + {-0.214531,-0.833867}, + {-0.370971,-1.340886}, + {-0.838782,0.085272}, + {0.699287,0.326143}, + {0.969557,0.265905}, + {0.224255,1.026885}, + {-0.705422,0.039940}, + {2.677294,0.824637}, + {-0.872479,0.726054}, + {-0.356049,-0.644072}, + {1.247068,-0.283382}, + {-0.052734,0.460700}, + {-0.219080,-0.773459}, + {-0.404964,1.015079}, + {-0.613011,-0.740705}, + {-0.224677,0.053237}, + {0.894221,0.740370}, + {1.156185,-0.712990}, + {0.292658,-0.216708}, + {-0.066752,1.055119}, + {1.357077,0.220257}, + {0.460298,0.433686}, + {-1.604282,0.281681}, + {0.013828,-0.330717}, + {0.170076,-0.933305}, + {1.041761,-0.252779}, + {-0.246114,-0.576060}, + {1.480525,0.007697}, + {0.441859,0.826016}, + {0.295619,-1.276915}, + {0.915688,0.319889}, + {0.022048,0.222383}, + {1.378602,-1.120309}, + {-0.027128,0.227251}, + {-0.029159,0.234012}, + {-1.232345,-1.709367}, + {0.443828,0.107305}, + {-0.853740,-1.028442}, + {0.423166,-0.208449}, + {0.437276,0.123764}, + {-0.405086,-0.566809}, + {-0.459850,-0.615080}, + {0.015966,-0.560154}, + {-0.524545,0.824488}, + {0.590298,1.680262}, + {-0.074765,1.037196}, + {1.410833,-0.872378}, + {0.595534,-0.084257}, + {0.283239,-0.652858}, + {-0.046879,-0.046124}, + {-0.369435,0.393944}, + {1.852725,0.076027}, + {-1.092554,-0.019375}, + {-1.380574,-1.233999}, + {0.377688,0.527289}, + {-0.179858,0.250972}, + {0.411598,0.469015}, + {0.284770,-0.983034}, + {0.950896,-0.086210}, + {0.315096,0.753994}, + {-0.153846,-0.582036}, + {-0.642368,-0.187750}, + {0.048072,0.639136}, + {-0.556765,-1.105212}, + {0.180486,-0.178092}, + {0.924552,-0.298329}, + {-0.232289,-1.459794}, + {-0.210924,-0.352326}, + {-0.743565,0.331766}, + {0.804067,-0.756999}, + {-1.120228,1.402332}, + {-0.563865,-0.766699}, + {-1.241026,-0.016935}, + {-1.083249,0.663982}, + {-0.696610,0.197940}, + {0.240815,-1.001368}, + {0.338313,-1.016316}, + {-0.333358,-0.619444}, + {0.114418,-0.274406}, + {-0.048887,0.026654}, + {0.319559,-0.940490}, + {-0.772192,-0.627506}, + {0.732077,0.628962}, + {-0.517531,-0.461387}, + {0.366764,-0.719179}, + {0.537746,0.869680}, + {0.349716,-0.212016}, + {-1.339703,0.494797}, + {-0.261270,0.480154}, + {-1.071839,-2.066688}, + {-0.370999,-0.038925}, + {-0.747227,0.085586}, + {-0.942602,-0.057338}, + {-0.072358,1.097723}, + {-0.205848,-1.136328}, + {0.597227,0.197329}, + {0.676518,0.381645}, + {-0.874854,-0.479414}, + {-1.999738,-0.565455}, + {-0.664048,-0.574682}, + {0.186569,0.411274}, + {-0.110267,-0.357864}, + {0.302705,-1.743357}, + {-0.319344,-0.476152}, + {-0.640334,-0.720226}, + {-0.910033,-0.422789}, + {-0.208408,0.548207}, + {-0.964300,0.002179}, + {0.824444,0.424217}, + {-1.032269,-0.762202}, + {0.105175,0.447058}, + {-0.012006,0.049305}, + {-0.937920,0.289750}, + {-1.253273,0.757789}, + {-0.762061,0.328438}, + {-0.241415,1.027135}, + {0.243270,0.013979}, + {-1.109143,-0.208914}, + {0.090512,-0.386316}, + {1.503883,0.622403}, + {0.175205,1.011719}, + {0.386237,-0.727356}, + {1.030490,-0.207293}, + {-0.934681,-0.637268}, + {0.390874,0.381332}, + {0.183902,1.098244}, + {-0.785477,1.103963}, + {0.665390,0.256809}, + {0.263688,-0.503673}, + {-0.166081,-0.926605}, + {-0.557337,0.532023}, + {-0.195427,1.271505}, + {-0.474249,0.447195}, + {0.443875,1.233854}, + {-0.269777,-0.979940}, + {-0.022060,0.544843}, + {0.313713,-0.853284}, + {-0.096390,2.008847}, + {0.439922,-0.335096}, + {0.896690,-0.588963}, + {-0.844743,0.183750}, + {0.781349,-0.755606}, + {-0.765362,0.170504}, + {-1.628206,-0.216829}, + {0.500102,-0.059625}, + {-0.304791,0.107158}, + {0.557697,-0.477804}, + {0.583642,0.627863}, + {-0.121640,-0.409209}, + {-1.120829,-1.076884}, + {-0.536931,0.178972}, + {-0.417448,-0.458302}, + {0.718477,-1.059868}, + {0.610038,-0.423881}, + {0.999029,-0.368049}, + {-0.197010,0.618818}, + {-0.092802,0.280660}, + {-0.884475,0.746423}, + {-0.218251,0.164965}, + {-0.421409,0.312894}, + {-0.658414,0.399046}, + {0.745212,-0.200538}, + {0.941667,-0.785267}, + {0.521849,0.859422}, + {-0.473471,0.762251}, + {0.397426,-0.176657}, + {-0.323150,0.760653}, + {-0.998414,1.716395}, + {0.740360,-0.938944}, + {0.023348,1.116443}, + {1.069598,-0.382364}, + {-1.043662,0.236812}, + {-0.382172,-0.980040}, + {-0.349019,0.364638}, + {-0.298100,-1.107602}, + {0.456000,0.116486}, + {0.877536,0.868085}, + {0.048209,-1.069550}, + {0.661781,-1.278720}, + {0.359336,0.813250}, + {-0.123966,-0.468063}, + {0.430191,0.023114}, + {-0.135566,-0.319366}, + {0.968871,-0.115512}, + {-0.394328,-0.170491}, + {-0.009694,-1.061476}, + {0.046248,-0.139918}, + {0.368727,0.177700}, + {0.414373,-0.767674}, + {0.759806,0.895111}, + {-1.039452,-0.596694}, + {0.098206,0.950569}, + {-1.174535,-0.768597}, + {0.623601,-0.766489}, + {1.209239,-0.052878}, + {-0.452015,-0.009341}, + {0.690382,0.542857}, + {-0.108723,0.123140}, + {-0.529691,0.324165}, + {1.478203,-0.911289}, + {1.068649,-0.374113}, + {0.299869,0.396780}, + {0.430316,0.155351}, + {0.013919,-0.121839}, + {0.039700,0.017585}, + {-0.571082,-0.704321}, + {-0.736133,1.469112}, + {0.703268,-0.091642}, + {0.386893,0.603817}, + {0.172514,-0.849675}, + {0.607745,0.054904}, + {0.271231,-0.590061}, + {0.913552,-0.116009}, + {-1.138750,0.486391}, + {-0.076353,-0.638643}, + {-0.498974,0.588957}, + {-0.246757,-1.191164}, + {-0.997522,0.317823}, + {-0.041872,0.542933}, + {1.096147,0.311412}, + {-0.397941,-0.073418}, + {-0.674415,-0.476303}, + {0.129485,-0.144863}, + {-0.320564,-0.468116}, + {-0.409642,-0.561575}, + {0.221420,-0.215094}, + {-0.958367,0.609774}, + {-0.465613,0.040251}, + {0.382094,-1.384503}, + {0.918899,0.048990}, + {-0.078886,0.735926}, + {-0.090336,-0.471819}, + {-0.263712,-0.599983}, + {0.620502,-0.130819}, + {-0.335282,0.318506}, + {0.052591,0.963759}, + {-0.671888,0.668188}, + {-0.372171,-0.042465}, + {0.471828,-0.469881}, + {-0.393130,-1.355191}, + {0.245535,-0.797273}, + {-0.293227,-0.997773}, + {-0.191794,-0.927120}, + {0.484915,-1.363790}, + {0.318464,0.435871}, + {-0.854547,-0.351262}, + {-0.218097,-0.360717}, + {0.263629,-0.076017}, + {-0.414797,0.096633}, + {0.897394,-0.109831}, + {0.962227,-0.804732}, + {0.151329,1.627499}, + {0.990435,0.235665}, + {0.290903,0.311037}, + {0.160010,-0.053403}, + {-0.069998,0.302710}, + {0.084036,0.853274}, + {0.560929,-0.560850}, + {-0.106112,0.314448}, + {-0.421578,-0.268470}, + {-0.785387,-0.750187}, + {-1.189174,-0.084856}, + {0.466530,0.976102}, + {0.880929,-0.457008}, + {-0.729195,-0.675082}, + {0.104374,-0.633442}, + {0.757444,-0.949991}, + {0.008917,0.692426}, + {-0.338838,0.532756}, + {0.794670,0.717730}, + {-0.709404,1.043684}, + {0.579162,0.487640}, + {-0.404886,0.060629}, + {1.349450,-0.355399}, + {0.770612,-1.464736}, + {0.347219,0.274775}, + {0.354646,-0.020434}, + {0.465359,-0.985538}, + {0.385781,1.068191}, + {-0.106262,1.103081}, + {-0.599815,-0.997276}, + {-0.492767,-0.081408}, + {-0.245567,0.057807}, + {0.120883,0.308476}, + {-1.143013,-0.054048}, + {0.398061,0.717026}, + {-0.600222,0.456605}, + {-0.984594,-0.328664}, + {0.330060,0.028399}, + {0.273902,-1.559059}, + {0.491818,0.871726}, + {-0.827789,-0.540048}, + {0.065844,0.068222}, + {-0.808401,1.160869}, + {-1.274150,-0.355051}, + {0.561683,0.271525}, + {-0.413291,-0.224445}, + {-0.344482,-0.270754}, + {-0.669051,0.246237}, + {-0.049024,-0.250489}, + {0.977734,-0.366526}, + {-0.742840,0.329251}, + {-0.793661,-0.540377}, + {-0.164454,-0.041182}, + {0.796305,-0.095571}, + {-0.168732,0.018351}, + {-0.010513,1.211849}, + {-0.994831,-0.709750}, + {-1.282949,0.285938}, + {0.864976,0.026893}, + {-0.160674,-0.991054}, + {0.235256,0.436919}, + {1.212801,-0.909780}, + {0.529844,0.976362}, + {0.946160,-0.680521}, + {0.094877,0.672648}, + {-0.675454,-0.322118}, + {0.305372,-0.550007}, + {0.912401,1.035879}, + {1.131467,-0.138706}, + {-0.253731,-0.964860}, + {0.051329,-1.529624}, + {-0.113924,0.173806}, + {0.884102,0.159153}, + {-0.227632,0.877234}, + {1.010051,-1.543880}, + {0.809937,-0.173659}, + {0.332144,-0.243052}, + {-0.906095,0.676593}, + {0.073033,-1.548259}, + {0.458666,0.050823}, + {-0.289121,1.068049}, + {-0.383643,0.011142}, + {0.134420,0.076707}, + {0.466514,-0.043312}, + {0.438283,-1.522376}, + {0.163508,-0.193750}, + {0.487026,0.542501}, + {-0.200524,0.459230}, + {0.262819,1.505884}, + {0.653087,-0.201042}, + {0.233565,-0.547870}, + {-1.017089,0.878535}, + {0.228269,-0.679254}, + {1.248531,-0.791408}, + {0.439579,1.697946}, + {0.592039,-0.339903}, + {-0.109908,0.453321}, + {-1.115247,0.010700}, + {-0.164818,1.131623}, + {2.025510,-0.505251}, + {-0.309346,-1.373256}, + {0.537120,-0.360283}, + {-0.104894,0.296882}, + {0.024801,0.978248}, + {-0.937777,-1.070944}, + {-0.198826,-0.783295}, + {-1.127480,-0.610347}, + {0.298001,0.024948}, + {0.145368,0.794536}, + {0.612907,-0.059654}, + {0.782929,-0.048403}, + {-0.435378,-1.436197}, + {0.169811,0.516786}, + {-0.116510,0.319035}, + {0.538300,0.841565}, + {-0.155311,0.492565}, + {0.620200,0.730660}, + {-0.015916,0.419497}, + {0.164181,-1.630272}, + {0.824648,0.320043}, + {-1.560239,0.572704}, + {-0.252823,0.296962}, + {-0.746081,0.958339}, + {0.082239,-1.217646}, + {-0.567736,0.000241}, + {0.427482,0.476159}, + {-0.459043,1.161889}, + {0.254120,-0.488463}, + {-0.023313,-0.723543}, + {-0.293002,-0.169112}, + {0.089490,-0.261529}, + {0.247961,0.791363}, + {-1.110516,-0.166830}, + {0.983670,-1.198302}, + {0.519375,-0.785171}, + {-0.619925,0.150262}, + {0.569926,0.149914}, + {0.719057,-0.514677}, + {0.458531,-0.475477}, + {0.571393,1.036797}, + {-0.827266,-1.069063}, + {-0.208821,0.601468}, + {0.601543,-0.246378}, + {-0.545977,-0.481944}, + {-0.142618,-0.493885}, + {0.104624,-0.885512}, + {-0.806208,-1.172703}, + {-0.327891,-0.764616}, + {-0.111412,0.778570}, + {-0.025417,-0.823612}, + {-0.064253,0.146300}, + {0.897841,0.233453}, + {0.170462,-0.208221}, + {0.469815,0.534622}, + {0.464492,0.082733}, + {0.852167,-0.277563}, + {0.042076,-0.252323}, + {-0.639666,-0.218750}, + {0.344882,-0.710013}, + {-0.897684,0.020080}, + {0.969355,-0.131562}, + {-1.412936,0.152039}, + {0.762647,-1.063394}, + {-0.706248,-0.458628}, + {-0.193334,0.251486}, + {-0.278574,-0.609158}, + {-0.000444,0.167283}, + {-0.191255,-0.598270}, + {0.113407,0.082497}, + {1.361065,0.155568}, + {-0.171486,0.161889}, + {1.639261,-0.316890}, + {-0.129987,-0.110577}, + {-0.802764,1.330457}, + {-0.147106,0.095728}, + {0.820872,1.110744}, + {-0.391447,0.136340}, + {0.927357,0.908692}, + {1.225880,-0.741652}, + {0.166896,-2.018048}, + {-0.072197,-0.734190}, + {-0.188537,0.562295}, + {-0.419001,0.597966}, + {1.012061,-0.032231}, + {-1.265661,-0.098692}, + {-0.363672,0.493087}, + {-1.277901,0.568014}, + {0.094125,0.641038}, + {0.366210,-0.871913}, + {-0.406243,1.248265}, + {-0.265139,0.291993}, + {-0.711300,-0.517739}, + {0.551969,0.211300}, + {0.863097,0.620748}, + {-0.791252,0.292823}, + {-0.859584,-0.514999}, + {-0.222594,0.242104}, + {-0.529240,1.091900}, + {0.056589,-0.206772}, + {-0.206678,0.117667}, + {-0.372107,0.346623}, + {0.197375,0.175770}, + {0.109383,-0.285298}, + {-0.128606,-0.575351}, + {-1.350885,-0.629351}, + {-0.549311,-0.890107}, + {-0.052058,-0.399744}, + {0.117226,-0.822548}, + {-0.522921,-0.747784}, + {0.696853,0.225147}, + {1.404505,0.031853}, + {-0.199716,0.923465}, + {-0.366027,-0.965298}, + {0.254400,0.565191}, + {0.720813,-0.011776}, + {0.048742,0.485636}, + {0.463885,-0.445094}, + {-0.354658,-0.258331}, + {-0.512308,0.875492}, + {0.109512,-0.704183}, + {-0.359123,-0.222049}, + {2.094077,-0.596104}, + {0.099119,0.151596}, + {1.272189,-0.870022}, + {-1.203661,0.080126}, + {-0.402370,-0.038618}, + {-1.465566,0.187786}, + {-0.188615,-0.551253}, + {-0.144342,-0.651031}, + {0.466536,-0.902577}, + {0.442013,-0.756855}, + {0.651331,0.059349}, + {-0.580323,-0.556246}, + {1.443369,0.532876}, + {-0.410520,0.142482}, + {-0.638481,-1.620247}, + {1.107948,0.449859}, + {-0.053538,0.595051}, + {-0.660756,0.271631}, + {-0.110972,0.102598}, + {-0.853215,0.693121}, + {-0.815886,0.697183}, + {0.444707,0.103685}, + {-0.147454,1.248558}, + {-0.304216,0.147728}, + {-0.380406,0.389584}, + {0.869539,-0.442373}, + {0.367415,0.370479}, + {-0.860426,0.294945}, + {-0.310280,-0.101136}, + {-0.724660,-0.542268}, + {0.084686,-0.384017}, + {0.620385,-0.343553}, + {0.193432,-0.835223}, + {0.342748,0.073244}, + {-0.208107,0.866350}, + {-0.433622,-0.098584}, + {-1.050180,0.800354}, + {1.140817,-0.095778}, + {0.074059,0.720540}, + {0.324579,-0.250899}, + {0.908664,-0.424491}, + {-0.349658,0.492219}, + {-0.416368,-0.443491}, + {-0.093378,0.249512}, + {-1.388730,0.610637}, + {0.516564,-1.098854}, + {-0.860684,0.484278}, + {-0.183881,-0.463325}, + {-0.461003,-0.667445}, + {0.768848,0.198854}, + {0.229416,-1.256209}, + {0.480655,-0.403404}, + {0.479239,-0.007571}, + {-1.318306,0.738942}, + {1.469443,-0.959983}, + {0.253482,0.333056}, + {0.017190,1.742204}, + {-0.519932,0.898752}, + {-0.452267,-0.316200}, + {0.022717,1.692417}, + {0.796237,-0.765617}, + {-0.812041,-0.198540}, + {0.884469,-0.078862}, + {0.030191,-0.787176}, + {1.126078,-0.516637}, + {-1.102333,0.446474}, + {0.446080,-0.315343}, + {-0.062631,-0.265291}, + {-0.853606,-0.044797}, + {1.077386,-0.224226}, + {-0.147136,-0.399345}, + {0.166629,-0.401479}, + {0.257271,0.174285}, + {-0.244527,-0.825127}, + {-0.798872,0.420259}, + {0.491059,0.151109}, + {-1.041543,-1.289491}, + {-0.331789,-1.527598}, + {-0.083175,0.394579}, + {-0.323992,0.766890}, + {0.902158,0.010174}, + {1.662799,-0.272640}, + {-0.497409,-0.677542}, + {-0.849235,0.346076}, + {0.747101,0.412698}, + {1.611062,0.866991}, + {0.163223,-0.262013}, + {0.741905,0.535948}, + {-0.239992,0.315095}, + {1.073907,0.578535}, + {-0.344179,0.817836}, + {-0.620181,-0.707425}, + {0.834661,0.312322}, + {-1.019361,-0.609310}, + {1.785614,-0.162301}, + {0.529534,0.672965}, + {0.486672,0.153629}, + {-0.288024,-0.719498}, + {0.413983,0.270909}, + {1.374466,0.087559}, + {0.163283,0.494934}, + {-0.234819,0.954579}, + {0.012206,-0.678054}, + {1.572847,-1.076632}, + {-0.599282,-0.633372}, + {1.095665,-0.655620}, + {-0.684687,-0.201969}, + {-0.549440,0.045874}, + {0.322676,0.581203}, + {0.148109,0.304196}, + {-0.253076,0.734066}, + {-0.251967,0.042417}, + {0.045715,-0.031266}, + {1.116937,1.123835}, + {0.483493,0.290907}, + {0.068072,0.333893}, + {-0.429817,-0.931647}, + {-0.480528,-0.164660}, + {-0.775073,0.535179}, + {-0.275572,-0.740592}, + {0.448695,-0.532992}, + {0.393924,-0.730806}, + {-0.932048,-1.011165}, + {-0.001888,0.395913}, + {-0.030311,0.267041}, + {0.251709,-0.163471}, + {0.758127,1.170676}, + {-0.971904,0.719459}, + {-0.677315,1.283372}, + {0.015133,0.474236}, + {0.250784,0.239230}, + {-0.284132,0.714203}, + {0.344950,0.419915}, + {1.583594,-0.064074}, + {0.576677,0.349100}, + {0.125629,0.022908}, + {0.377394,-0.234506}, + {-0.563284,-0.715614}, + {0.101048,-0.920563}, + {0.608430,0.161613}, + {-0.928742,-0.992338}, + {-0.294843,-0.399957}, + {-0.365761,0.504701}, + {0.306154,0.060709}, + {0.715237,0.113832}, + {-0.231447,-0.747493}, + {-0.137875,0.022192}, + {0.270512,-0.373718}, + {-0.284239,-0.283799}, + {0.279434,0.240517}, + {0.968853,-1.661595}, + {0.795511,0.040827}, + {0.756925,-0.008006}, + {0.410158,0.188364}, + {0.212647,0.160361}, + {-0.274239,0.135422}, + {-0.748007,0.121514}, + {1.889864,-0.426021}, + {-1.118363,0.603299}, + {-1.079087,0.214901}, + {0.881102,0.533797}, + {0.977096,0.271883}, + {-0.593182,-0.608447}, + {-0.831317,-0.259562}, + {-1.046078,-0.378692}, + {-0.521179,1.064548}, + {0.310178,-0.242294}, + {-0.276422,-0.319965}, + {-0.581592,-1.175487}, + {0.078785,0.414402}, + {0.384824,-0.029560}, + {0.350595,-0.015079}, + {-0.505694,0.346891}, + {-0.244162,-0.431912}, + {0.179140,0.408671}, + {-1.683719,-0.175195}, + {-0.439600,-0.848327}, + {0.214818,-0.535441}, + {0.799181,1.313585}, + {-0.476475,1.275140}, + {-0.281987,-0.003127}, + {-0.659120,0.672635}, + {-0.061892,-0.705050}, + {-1.224782,0.446358}, + {0.016139,0.676888}, + {0.102488,0.468285}, + {0.270256,1.292447}, + {-0.872090,0.046884}, + {0.843556,-0.407998}, + {1.131680,-0.756558}, + {0.414796,-1.380356}, + {-0.696230,-1.001295}, + {-0.356978,0.947810}, + {0.203772,-1.057518}, + {-0.328018,0.786771}, + {0.943286,1.338451}, + {-1.157899,-0.594093}, + {0.126929,1.437347}, + {1.125664,-0.410598}, + {1.476748,-0.336433}, + {0.391183,0.754958}, + {-0.538390,1.039711}, + {0.539183,0.253245}, + {-0.738926,-1.328143}, + {0.843172,-0.517204}, + {-1.094296,0.432451}, + {-0.207836,0.579061}, + {-0.780287,-0.213072}, + {0.251006,-0.069137}, + {0.847453,0.521498}, + {-0.110487,-0.550587}, + {1.366744,0.051771}, + {0.111898,-0.116679}, + {0.457595,0.211260}, + {-0.224542,-0.247515}, + {-0.075318,-0.913189}, + {0.413131,0.636904}, + {0.442816,-0.725927}, + {-0.269415,-1.101203}, + {1.238631,-0.048564}, + {-0.867622,-0.029135}, + {-1.272665,-0.426738}, + {-0.358993,1.214374}, + {0.223994,0.430413}, + {-0.069366,-0.065533}, + {-1.151986,-0.046081}, + {-0.034817,-0.587513}, + {0.820362,-0.805810}, + {-0.002677,-0.479108}, + {-0.501825,-0.402321}, + {0.479133,0.520280}, + {-0.023935,0.157521}, + {-0.805270,-0.213889}, + {-0.652714,-1.133157}, + {0.141114,0.750052}, + {-0.870557,0.131878}, + {-0.537313,0.243984}, + {0.270492,1.388730}, + {0.351691,-1.026747}, + {0.265859,-0.073035}, + {0.876907,0.008793}, + {-0.015669,0.222651}, + {-0.458046,-0.172892}, + {0.480864,-0.236468}, + {-0.304051,0.883748}, + {1.386217,0.196728}, + {-0.448091,0.725679}, + {0.279281,1.432388}, + {-1.090792,-0.202419}, + {0.531809,-0.405696}, + {-0.038049,0.323853}, + {-0.027231,-0.016436}, + {-0.716140,-0.504110}, + {0.323352,-0.270107}, + {-0.253368,-1.019154}, + {-0.779463,-0.217103}, + {-0.579380,-0.994819}, + {1.349996,0.012975}, + {0.343522,-0.422818}, + {0.277107,-1.468269}, + {1.635924,-0.133051}, + {-0.184484,0.613490}, + {0.452174,1.169168}, + {-0.116411,0.804015}, + {-0.040472,0.200894}, + {-0.451595,0.380316}, + {-0.018660,-0.980569}, + {1.037949,1.233064}, + {1.095728,0.983920}, + {0.472751,-0.243982}, + {0.234380,0.303549}, + {-0.706062,1.365919}, + {-1.056416,-0.147830}, + {0.003918,0.621718}, + {-0.866214,-0.038261}, + {0.019575,-0.379413}, + {0.205000,0.142153}, + {-0.272811,0.136060}, + {-1.150797,-1.754010}, + {0.777102,0.334033}, + {0.144743,0.082452}, + {0.409845,1.246999}, + {-0.848828,-0.844270}, + {0.336356,1.069431}, + {-0.261880,0.472035}, + {-0.274440,-0.250428}, + {0.096055,1.333042}, + {-1.150019,-0.005824}, + {-0.345565,1.491009}, + {0.434845,0.644814}, + {-0.995453,0.103214}, + {-0.248426,-0.545754}, + {0.087275,1.536388}, + {-1.950359,0.672084}, + {0.687779,0.938171}, + {0.592318,-0.358229}, + {0.719642,-0.071983}, + {-0.080845,0.708763}, + {0.136255,-1.235083}, + {-0.251003,-0.912274}, + {-0.884002,-0.310324}, + {0.031525,0.320763}, + {0.556086,-0.250977}, + {0.090584,0.172983}, + {-0.360676,0.948733}, + {-0.090851,0.465571}, + {-0.059321,0.271202}, + {0.377821,0.928997}, + {-2.122083,-0.662680}, + {0.606876,-0.740523}, + {0.304647,-1.075289}, + {0.104366,0.294334}, + {-0.618571,-1.125453}, + {0.347400,-0.197963}, + {0.740467,-0.980580}, + {0.567211,0.587097}, + {-0.009102,0.368841}, + {0.365819,1.246754}, + {0.408926,-0.573655}, + {0.629943,0.031990}, + {-0.888191,-1.455036}, + {-0.192010,-1.721713}, + {-0.525795,-0.883365}, + {-0.688342,-0.233976}, + {-1.231810,0.919714}, + {-0.171857,0.047815}, + {0.829192,0.498064}, + {-0.164813,0.833731}, + {-0.835674,1.420757}, + {0.117641,0.408307}, + {0.061907,-0.340905}, + {0.328647,0.483077}, + {-0.334550,-0.634442}, + {-1.143177,0.176319}, + {0.945986,-0.429932}, + {0.962872,-0.156957}, + {0.316408,-0.309555}, + {-0.071834,0.467993}, + {0.374919,0.531204}, + {-0.061652,-0.441122}, + {0.296652,-0.735807}, + {0.635521,0.547129}, + {-0.820187,-0.119987}, + {-0.256993,-0.874678}, + {-1.176903,0.375631}, + {-0.389114,1.458620}, + {-1.499695,1.086553}, + {0.662846,-0.346478}, + {1.134804,0.260529}, + {-0.353432,0.041867}, + {0.599759,-0.706760}, + {0.233411,-0.191501}, + {0.069271,-0.371072}, + {-0.299719,-0.158599}, + {0.156862,0.287897}, + {0.044521,-1.565973}, + {0.647652,-0.050318}, + {-0.625813,0.313538}, + {-0.305193,0.707469}, + {-0.889292,-0.615903}, + {0.108968,0.323345}, + {0.891658,0.530089}, + {-0.619121,0.542110}, + {-0.173821,-0.076271}, + {-0.066656,-0.380613}, + {1.201157,-0.868830}, + {-0.269634,-0.547771}, + {-0.166608,0.337899}, + {-0.580004,0.028538}, + {-0.178471,0.256375}, + {0.479790,-0.353481}, + {-0.141978,-0.140536}, + {0.573456,-1.096426}, + {-1.407537,0.376742}, + {-0.000291,-0.159343}, + {0.566129,1.021878}, + {0.592375,0.213044}, + {-1.093385,-0.195052}, + {-1.227213,-0.283957}, + {-1.107600,-0.512341}, + {0.405843,-0.034674}, + {-0.628223,-1.573836}, + {-0.424388,-1.127573}, + {1.352502,0.703620}, + {0.260965,0.940215}, + {0.564688,-0.617820}, + {0.627958,-1.090734}, + {-0.519309,-0.170822}, + {-0.018574,0.160240}, + {0.581393,0.735974}, + {-1.723723,-0.001348}, + {0.426947,0.152603}, + {1.732577,-0.140408}, + {0.733090,-1.014674}, + {0.548625,-0.606929}, + {-0.104524,-0.976971}, + {0.002059,0.365576}, + {-0.437915,-0.973652}, + {0.409557,-0.489978}, + {-0.000720,0.508669}, + {0.256095,-1.595859}, + {0.287175,0.564402}, + {0.876617,-1.300599}, + {-0.980624,0.538104}, + {-0.197058,-0.835753}, + {0.293510,1.023684}, + {-1.124246,-0.346680}, + {1.728107,0.223808}, + {0.608823,0.314713}, + {-0.678436,-0.934938}, + {0.467041,-0.286489}, + {0.304061,0.659360}, + {0.433362,-0.114714}, + {0.470833,0.482791}, + {0.136415,0.001946}, + {-0.192213,1.062735}, + {1.160425,1.197857}, + {0.570082,-0.708591}, + {-0.674925,-0.979498}, + {0.258815,-0.140179}, + {0.765330,0.060888}, + {-1.138194,-0.547729}, + {-0.342221,-0.331377}, + {0.487680,-0.431774}, + {0.195766,-0.563726}, + {-0.515654,-2.231175}, + {-0.514830,1.422505}, + {-0.818513,0.454493}, + {0.380391,0.182849}, + {-0.069606,1.071475}, + {-1.175893,0.278782}, + {-1.024879,-0.018088}, + {0.047685,-0.767415}, + {-0.451445,0.575550}, + {0.806845,-0.635450}, + {0.137154,0.051450}, + {0.484762,0.473028}, + {1.476065,-0.375153}, + {0.038745,0.227390}, + {1.613348,-0.285214}, + {0.027663,-0.441607}, + {0.327132,0.393034}, + {0.097041,1.118078}, + {-1.373910,-0.535039}, + {-0.830631,0.886098}, + {0.712699,0.117282}, + {-0.435669,0.900266}, + {-0.230984,0.260017}, + {-1.134322,0.277879}, + {1.217344,0.070220}, + {-0.322548,0.229832}, + {-0.912984,1.081382}, + {0.945157,-0.653585}, + {0.109940,-0.208093}, + {-0.750971,-0.827736}, + {0.077654,-0.623765}, + {1.218827,-0.344685}, + {-0.313002,0.296601}, + {0.400554,0.568839}, + {0.304519,-0.601576}, + {0.373664,1.261417}, + {0.019345,0.795808}, + {-0.078023,-0.626856}, + {0.116647,0.074558}, + {0.563238,-0.563330}, + {-2.463399,0.442332}, + {-0.109267,0.048086}, + {0.519121,0.180174}, + {0.193848,-0.161425}, + {-0.042920,0.296486}, + {0.073707,-1.348922}, + {0.617742,-0.148470}, + {0.261979,-0.030175}, + {1.197662,-1.031986}, + {-0.180963,0.326171}, + {-0.182722,0.138127}, + {0.333006,-0.298385}, + {0.118052,0.145749}, + {-0.378857,-0.353684}, + {-0.874132,-0.138412}, + {1.049590,-0.258466}, + {-0.227425,0.931924}, + {0.060564,0.378351}, + {0.371015,-0.349550}, + {-0.143444,-0.217476}, + {-0.247485,-0.046193}, + {-0.765423,0.386454}, + {0.075810,0.747783}, + {-0.562521,-0.075906}, + {0.409856,-0.469514}, + {-0.135998,-0.492786}, + {0.986502,-0.462649}, + {-0.068894,0.801619}, + {-0.162736,0.525729}, + {-0.453916,0.283674}, + {-0.123426,-1.358265}, + {1.200608,-0.396901}, + {0.577734,-0.019945}, + {-0.436619,0.346352}, + {0.830315,0.899719}, + {-0.064963,1.026769}, + {-0.019483,-1.140266}, + {-0.248584,0.297740}, + {-0.203858,0.942282}, + {-0.081061,-0.362369}, + {0.963064,0.245140}, + {-0.061346,0.970336}, + {-1.223766,-1.442024}, + {-0.659296,-0.305137}, + {-0.168098,0.526909}, + {0.244864,0.201375}, + {-1.037356,-0.409374}, + {-0.342768,0.074298}, + {-0.126356,0.583275}, + {0.700812,0.148717}, + {1.123453,-0.594402}, + {-0.880209,-0.000771}, + {0.508231,0.583812}, + {0.461500,-1.305179}, + {-0.352762,-0.342643}, + {0.026590,1.641167}, + {0.172356,-0.551779}, + {0.624259,1.319173}, + {-0.343181,0.521502}, + {-0.377493,0.564330}, + {0.463338,0.107471}, + {-1.020304,0.501309}, + {1.214700,-0.385908}, + {0.246930,0.896288}, + {-1.150099,0.525414}, + {0.598091,-0.621490}, + {-0.551424,0.044236}, + {0.503002,0.175473}, + {-0.326038,0.203589}, + {0.000174,-0.755465}, + {-0.076286,0.193240}, + {0.751071,-0.851721}, + {-1.638472,-0.078066}, + {0.277348,0.196780}, + {0.017669,-0.946993}, + {-0.808836,0.460763}, + {0.389572,-0.585954}, + {-0.536593,-0.448112}, + {0.668181,-0.374583}, + {-0.103420,-0.222061}, + {0.033553,0.915602}, + {-0.727955,-0.942821}, + {0.227992,-0.544748}, + {0.215369,0.016803}, + {-0.331175,-0.358666}, + {-0.369147,-1.683768}, + {0.287561,1.754403}, + {0.730502,1.075420}, + {0.098139,0.193287}, + {-0.220536,-0.547638}, + {-0.708086,0.229183}, + {-0.066645,0.221207}, + {-0.544498,0.224689}, + {0.909845,0.066686}, + {-0.417147,-1.561040}, + {-0.588530,-0.271389}, + {0.765381,0.630382}, + {-1.536043,0.954170}, + {-0.007504,-0.251426}, + {0.320371,-0.415162}, + {-1.079865,-0.015651}, + {1.246319,-0.288800}, + {1.664357,0.873397}, + {1.274888,-0.286462}, + {0.089238,0.521546}, + {-0.850328,-0.204610}, + {-1.344064,-0.175840}, + {1.059629,0.597417}, + {1.396640,-0.558153}, + {-1.299523,-0.700533}, + {-0.303029,-0.016323}, + {-0.571055,-0.101430}, + {0.240632,-0.156008}, + {-0.210472,-0.676508}, + {-0.377210,-0.257232}, + {-0.458563,0.394798}, + {-1.298114,0.535994}, + {0.348716,1.486169}, + {-0.551518,0.095552}, + {-0.454461,0.613793}, + {0.589896,0.608956}, + {0.024315,-0.615423}, + {0.108640,0.657051}, + {0.277486,0.095590}, + {0.112263,0.590235}, + {-1.676875,0.295265}, + {-0.641851,0.429911}, + {0.112035,-0.999186}, + {0.407359,1.310697}, + {0.123607,-0.285048}, + {-0.584768,0.856268}, + {0.365845,-1.606895}, + {0.118025,0.980790}, + {0.976487,-0.548793}, + {-0.608533,0.177190}, + {-0.254552,0.490015}, + {-0.764686,-0.476040}, + {0.339780,0.307140}, + {1.071418,-0.394981}, + {0.343840,-0.138409}, + {0.050959,0.206412}, + {-0.132190,1.024308}, + {-0.531174,-0.997495}, + {0.107836,0.197144}, + {0.006508,0.051268}, + {-1.180682,-0.078210}, + {-0.301054,0.221919}, + {-0.198790,-2.154487}, + {1.281974,-0.406055}, + {0.248667,0.220739}, + {-0.151733,0.572224}, + {-0.887702,-0.282886}, + {-0.035221,0.961347}, + {-1.071469,0.514402}, + {-1.341250,0.603023}, + {-0.080709,0.493279}, + {0.437681,-0.565973}, + {0.221259,1.582183}, + {-0.409386,0.729511}, + {0.982076,-0.071098}, + {-1.001791,-0.519130}, + {-0.121082,-0.007075}, + {-0.339436,1.234458}, + {1.513595,0.969100}, + {-0.583819,0.253911}, + {0.177078,-0.732721}, + {1.010067,0.995855}, + {-1.355505,0.888006}, + {-0.332757,0.204762}, + {0.021403,1.025592}, + {-1.217885,0.139156}, + {0.889080,0.092179}, + {-1.102149,0.293526}, + {0.435463,-0.449178}, + {0.080275,0.169176}, + {-0.709930,-1.149043}, + {0.196490,-0.626610}, + {0.000069,-0.943691}, + {0.223655,0.039723}, + {-0.560770,-0.882470}, + {-0.807256,0.094114}, + {-0.058225,-0.349692}, + {-0.500905,-1.096078}, + {-0.962775,0.327158}, + {0.282785,-0.401214}, + {0.361234,-0.934402}, + {0.576734,-0.359076}, + {-1.413799,0.265539}, + {-1.117609,-0.837082}, + {0.180753,-0.472530}, + {-0.120835,-0.959192}, + {-0.157811,0.176422}, + {-0.850684,0.325782}, + {0.828223,0.792925}, + {0.054204,0.579626}, + {-1.121286,-0.414842}, + {-0.113676,0.001080}, + {0.642904,0.453393}, + {-1.026285,0.939691}, + {0.521202,0.352828}, + {0.456312,-0.206836}, + {0.058434,-0.053600}, + {0.115901,0.497408}, + {1.204157,-0.447713}, + {0.345992,-0.395337}, + {0.164925,1.328079}, + {0.069910,0.657455}, + {0.884794,0.478670}, + {0.805589,0.626931}, + {-0.169274,-0.328030}, + {-0.535077,0.102330}, + {-0.946526,0.154656}, + {0.358642,-1.362812}, + {-0.676983,-0.652080}, + {0.992864,-0.004017}, + {-0.410549,0.342659}, + {-1.235267,0.713491}, + {-0.398621,0.103696}, + {-0.820035,0.801927}, + {1.200059,0.099361}, + {0.165502,0.725726}, + {-0.591579,0.903920}, + {-0.843723,0.547834}, + {0.773809,0.403580}, + {-0.110340,-0.128695}, + {-0.642852,0.256573}, + {0.020826,-0.020841}, + {-2.163248,0.136883}, + {-0.964862,0.387295}, + {0.687709,0.453517}, + {-0.112839,-0.567023}, + {-0.409633,0.580404}, + {-0.395668,1.251119}, + {0.347308,-0.652184}, + {1.734678,-0.822788}, + {0.601811,-0.259379}, + {0.378296,-0.866471}, + {0.498403,-0.656762}, + {0.504824,0.489810}, + {0.639843,0.108016}, + {-0.224104,0.234376}, + {0.009714,-1.168003}, + {0.019711,0.237093}, + {0.442850,0.092101}, + {0.202559,0.660920}, + {-0.738652,-1.371965}, + {-1.297719,0.932182}, + {0.739608,1.592722}, + {0.287503,-0.045919}, + {1.222096,-0.184544}, + {-0.022342,-1.348633}, + {-0.384473,0.250028}, + {0.001750,-0.224717}, + {-0.339904,-0.227850}, + {-0.775438,-1.310795}, + {0.571535,0.293371}, + {-0.324597,0.227490}, + {0.169930,1.145261}, + {-1.551123,-0.199599}, + {0.903788,-0.358227}, + {-0.622574,-0.635810}, + {-0.045168,1.216837}, + {0.093370,2.013175}, + {-0.171013,-0.524670}, + {0.035948,0.841222}, + {-0.592962,0.383082}, + {0.304794,-0.702133}, + {0.779021,0.240417}, + {1.021212,0.841250}, + {-0.373074,-0.296006}, + {-0.522088,1.139662}, + {-0.268210,-0.251780}, + {-0.668865,-0.925004}, + {-0.197566,0.255127}, + {1.441911,1.117605}, + {0.359801,0.069378}, + {0.485969,-1.028166}, + {0.009410,1.004055}, + {-0.386974,-1.624570}, + {0.923300,0.143629}, + {0.181342,0.541303}, + {0.292919,0.079149}, + {0.324985,-0.714574}, + {1.032349,-0.142324}, + {-0.163295,0.054984}, + {-1.028432,-0.229401}, + {0.459060,-0.443054}, + {-0.236741,-0.785944}, + {-0.703899,-1.736899}, + {-0.586833,-0.513491}, + {-1.517056,-0.084420}, + {0.292003,-0.016637}, + {0.700051,-0.583601}, + {0.526109,0.250151}, + {-0.227784,-0.209721}, + {1.818833,-0.253432}, + {-0.360458,-0.668042}, + {0.666832,-0.166561}, + {-0.358616,-0.418329}, + {-0.412887,0.836863}, + {0.467107,0.455230}, + {0.592494,1.202728}, + {-0.049518,-0.533706}, + {-1.002130,0.544990}, + {-0.257809,-0.145484}, + {-0.507467,-0.453834}, + {0.291788,0.724311}, + {-0.135188,0.157332}, + {0.631982,0.964860}, + {-1.346895,0.067204}, + {-0.288235,0.488706}, + {-2.477087,1.241502}, + {-0.518612,-0.435361}, + {0.955342,0.489972}, + {1.169275,0.407173}, + {0.213697,0.494150}, + {1.485172,0.045033}, + {0.153003,0.092241}, + {-0.308640,-0.601813}, + {-0.228943,0.489280}, + {-1.169407,-1.772660}, + {0.178640,0.792597}, + {-0.165417,0.292843}, + {1.369952,-1.611009}, + {0.852707,-0.827966}, + {0.821978,-0.004446}, + {0.649031,-0.812858}, + {0.973973,-0.310191}, + {-0.044568,-1.440362}, + {0.765165,-0.538318}, + {0.073737,0.997220}, + {1.234533,0.305244}, + {0.063294,0.158006}, + {0.169849,0.859146}, + {-0.719410,-1.068298}, + {0.116258,-0.709057}, + {-0.930144,-0.632747}, + {-0.181414,-0.975216}, + {0.795997,0.192359}, + {0.066111,-1.055039}, + {-0.298799,-0.559138}, + {-0.603013,-0.082259}, + {0.209757,1.372754}, + {0.347500,0.495824}, + {0.676474,-0.072774}, + {0.550261,-1.227179}, + {-0.263165,0.041038}, + {-0.546702,-0.491019}, + {0.738601,-0.021821}, + {-0.575464,-0.045919}, + {0.123871,-0.075287}, + {-1.083198,-1.254586}, + {-0.183814,-1.052704}, + {-0.881953,0.291254}, + {0.295336,-0.371557}, + {0.023762,-0.165479}, + {0.922082,0.683317}, + {0.324383,-0.491146}, + {1.171481,-0.557506}, + {0.470032,0.663233}, + {-0.433687,0.881275}, + {0.569872,1.163325}, + {-1.147629,1.276498}, + {-1.667829,0.173502}, + {1.509836,-0.393443}, + {0.061339,-0.994588}, + {1.297176,-0.289000}, + {-0.222211,1.274974}, + {0.171856,-0.708127}, + {-0.762371,0.928647}, + {0.489001,-0.717858}, + {0.273726,-0.144006}, + {0.089858,0.479527}, + {-0.415939,-0.754283}, + {-0.820428,-1.308644}, + {0.246597,0.476980}, + {-0.061898,-0.518679}, + {-0.002501,-0.563025}, + {0.160470,-0.497633}, + {0.654653,-0.058246}, + {-0.346737,0.304705}, + {-0.730579,-0.133753}, + {0.332384,0.151924}, + {-0.769060,0.340191}, + {-0.946356,0.802338}, + {-0.185563,-0.701926}, + {-0.018478,0.385360}, + {-0.763889,-0.171119}, + {0.136434,-1.151131}, + {0.944360,0.351269}, + {0.234035,0.460682}, + {-0.126511,-0.343346}, + {-0.129577,0.714668}, + {0.831803,1.425489}, + {-0.311698,0.471973}, + {0.374336,-0.532622}, + {-1.287929,0.086859}, + {-0.960906,-0.551099}, + {-1.322977,0.426687}, + {0.566247,-1.476259}, + {-0.042332,-0.595204}, + {-0.217199,0.570666}, + {-0.336883,0.586814}, + {0.991186,1.090638}, + {-0.112997,0.343201}, + {0.936285,0.699872}, + {1.134616,0.605336}, + {-0.332672,0.412190}, + {-0.131705,-0.706994}, + {0.966135,0.922373}, + {1.133423,-0.652360}, + {-1.177552,-0.186519}, + {0.708659,-0.078514}, + {-0.951753,-0.658081}, + {0.498906,0.236519}, + {0.282086,-1.164112}, + {0.256290,-0.187041}, + {0.292859,-0.420021}, + {0.670422,-0.359978}, + {-0.031479,-0.211732}, + {-0.243913,-0.094388}, + {-0.214352,0.162763}, + {-0.671425,1.172721}, + {-0.345164,-0.766127}, + {-0.628780,-0.950380}, + {-0.275698,0.202610}, + {-0.358559,0.974356}, + {0.409593,0.965904}, + {-0.287768,-0.284934}, + {-0.817917,0.034221}, + {0.282824,-0.083509}, + {0.266940,0.414989}, + {-0.839039,0.602647}, + {-0.030358,-0.143335}, + {-0.461787,-1.323753}, + {-0.947434,0.034506}, + {0.206777,0.393953}, + {0.110051,0.039027}, + {-0.255445,-0.418588}, + {-0.824977,-0.529115}, + {-0.847940,0.003400}, + {-0.227448,-0.605217}, + {-0.658428,-0.129496}, + {-0.070069,-0.874316}, + {-0.452178,-0.509891}, + {0.006794,0.737596}, + {-0.173131,-0.491329}, + {-0.018882,0.037139}, + {1.012352,-1.428883}, + {0.341480,-0.177353}, + {0.088907,1.263644}, + {-0.007106,-0.035769}, + {0.494848,-0.291677}, + {1.029770,1.640336}, + {-0.019924,-0.576639}, + {1.078143,0.161988}, + {-1.158261,-0.009208}, + {-0.920354,0.385655}, + {-0.103172,-0.424669}, + {-0.128917,0.361840}, + {0.451312,-0.151329}, + {0.486818,-0.792695}, + {0.173666,-0.625128}, + {-1.227586,0.233996}, + {-0.567889,0.022017}, + {-0.012878,0.076646}, + {-0.423646,0.335511}, + {-0.989293,1.156415}, + {-0.977194,0.382489}, + {-1.465169,0.221222}, + {-0.821043,-0.880370}, + {0.953556,0.320459}, + {-0.493348,1.015682}, + {-0.041491,-1.401656}, + {0.110917,-1.090802}, + {-0.787109,0.792470}, + {-1.183552,-0.605356}, + {-0.466455,0.123053}, + {1.377708,0.488188}, + {1.036160,-0.429887}, + {-0.195443,0.367498}, + {-0.649320,-0.214917}, + {0.818471,-0.314367}, + {-1.095956,-1.066370}, + {1.010551,1.357206}, + {-0.522272,-1.266004}, + {0.742807,-0.658170}, + {0.137677,-0.996820}, + {-0.269035,-0.313754}, + {0.231487,1.580343}, + {0.050224,-0.237917}, + {0.022147,0.008968}, + {-0.118094,-0.562883}, + {0.746369,-0.220601}, + {0.103125,-1.486236}, + {-0.018752,0.345496}, + {-0.026367,0.124820}, + {-0.095584,0.426964}, + {0.299398,-0.036745}, + {0.876858,0.071707}, + {0.080784,0.101691}, + {-0.365802,-0.832668}, + {-0.066045,-0.042815}, + {-1.336839,-0.309595}, + {-1.855670,0.090094}, + {0.142864,0.213680}, + {0.170087,-0.748118}, + {0.757840,-0.487161}, + {-0.008566,0.015099}, + {-0.574190,0.366625}, + {0.850847,-0.670065}, + {-0.088781,-0.552472}, + {0.065881,-0.562275}, + {2.174229,-0.693270}, + {0.545383,0.173825}, + {0.179404,-1.118853}, + {-0.706263,0.644413}, + {-0.201256,0.026020}, + {0.371367,0.027994}, + {0.695924,-0.856474}, + {-0.068587,-0.377147}, + {-1.335474,-0.381794}, + {-0.705342,-0.264330}, + {1.211854,0.734180}, + {0.689579,-0.829674}, + {0.236230,-0.519350}, + {-0.373274,-0.203030}, + {0.522275,0.190464}, + {-0.984102,0.184132}, + {0.608537,0.528305}, + {0.645580,-0.632723}, + {0.106191,-1.924526}, + {-0.860820,0.172286}, + {-0.017002,-0.413171}, + {-0.870914,-0.915141}, + {-0.032162,-0.022238}, + {1.063524,0.208230}, + {0.208620,0.392565}, + {1.534353,0.353688}, + {0.503624,0.611747}, + {1.441714,0.373080}, + {-1.685419,0.553616}, + {-1.251072,1.088477}, + {0.030551,0.653043}, + {0.348223,-0.875562}, + {-0.158646,-1.827145}, + {-0.599854,-1.150166}, + {-0.622279,1.015380}, + {-0.045192,0.068378}, + {0.289380,0.241892}, + {0.780663,-0.317637}, + {-0.624796,-0.111034}, + {0.156313,0.625074}, + {-0.887464,0.338653}, + {0.276127,-1.089799}, + {0.393729,-0.259418}, + {0.290756,0.344205}, + {-1.690691,0.271341}, + {1.070050,-0.375246}, + {-0.518340,-0.146201}, + {-0.136899,-0.031255}, + {-0.732118,0.763056}, + {0.595604,-0.170473}, + {0.313932,0.752164}, + {1.258402,-0.021841}, + {-1.271193,0.594328}, + {1.074153,0.128659}, + {0.478066,-0.276071}, + {-0.358573,0.984028}, + {0.423156,0.233965}, + {-0.177399,0.151124}, + {0.079737,0.146108}, + {-0.800067,-0.511673}, + {0.506933,-0.549296}, + {0.699370,-0.759465}, + {0.195093,1.236176}, + {0.557245,1.418542}, + {0.287210,1.479131}, + {0.668788,-0.448889}, + {-0.463056,0.926393}, + {1.124722,-0.224757}, + {1.118837,-0.244739}, + {-0.214775,0.121754}, + {-0.086324,-0.784099}, + {1.274702,0.512876}, + {1.060185,1.325123}, + {0.193620,0.390433}, + {-0.286823,0.231843}, + {-0.351578,0.727546}, + {-1.647569,0.062221}, + {0.356859,-0.256082}, + {0.266346,0.400761}, + {-0.225153,-0.791734}, + {0.522282,0.074414}, + {-0.375861,-0.448761}, + {-0.533274,0.056055}, + {-0.400783,-0.040651}, + {0.436361,0.406416}, + {0.165936,0.403954}, + {0.851735,1.253902}, + {-0.996147,0.302040}, + {0.979640,0.288274}, + {-0.020106,-0.155534}, + {-0.392568,-0.327217}, + {-0.200327,0.496539}, + {-0.233763,-0.423968}, + {-0.976208,-0.408918}, + {-0.571268,-0.378235}, + {0.224025,-0.154206}, + {-0.176338,0.225973}, + {0.355614,-0.189466}, + {-0.450087,0.567394}, + {-0.659818,1.574000}, + {-0.724889,0.197115}, + {-1.355431,-0.664189}, + {-0.203199,0.667343}, + {-0.361135,0.152712}, + {-0.007547,-0.222527}, + {-0.546892,-0.387338}, + {1.044558,-0.663379}, + {0.326269,-0.004359}, + {-0.012900,0.714057}, + {-0.032278,-0.204936}, + {-0.152106,0.539984}, + {-0.484380,-0.174141}, + {-0.480804,-0.521659}, + {0.019051,-0.512885}, + {-0.371011,-0.457457}, + {0.637777,-0.575044}, + {1.426366,0.512612}, + {0.266994,0.797655}, + {-0.824664,-0.336600}, + {-0.422137,-0.905715}, + {0.656471,0.209458}, + {-0.864761,-0.058947}, + {1.312581,0.409720}, + {0.093477,1.303098}, + {-0.495575,0.491653}, + {0.616295,0.289625}, + {0.019085,0.370022}, + {-1.785266,0.062761}, + {-0.110044,-0.749797}, + {1.685633,0.914155}, + {0.759099,0.624272}, + {-0.950030,1.223722}, + {0.414424,-0.410528}, + {0.183760,-0.081691}, + {-0.402176,-0.026614}, + {-0.349344,-0.746451}, + {-0.669819,0.784265}, + {0.124418,0.632759}, + {0.541258,-1.198492}, + {-0.866841,0.005112}, + {-0.420861,0.310081}, + {-0.492845,2.040430}, + {0.289183,-0.025633}, + {0.333462,-0.545470}, + {0.620450,-0.664730}, + {-0.966239,0.477068}, + {-0.280518,0.588544}, + {0.855581,0.526154}, + {0.176645,-0.532816}, + {0.243194,-0.347975}, + {0.121295,1.046375}, + {0.468586,-0.344088}, + {-0.350739,-0.403584}, + {-0.631745,-0.782817}, + {-0.949273,-1.150875}, + {0.922169,-1.684543}, + {-0.345543,-0.015945}, + {0.837118,0.348048}, + {-0.849669,0.097854}, + {-0.950003,-0.284938}, + {-0.827245,1.274905}, + {0.582750,0.674266}, + {0.863202,-0.250190}, + {0.661880,0.368907}, + {0.037276,-0.913114}, + {0.165824,1.259230}, + {0.058122,0.701148}, + {-0.309547,-0.432040}, + {-0.596559,-0.618049}, + {0.889281,0.852314}, + {0.257575,-0.140190}, + {0.466566,-1.164941}, + {-0.846649,-0.024130}, + {-0.006130,-0.345342}, + {0.554810,-0.369790}, + {0.132936,-1.245072}, + {-0.708319,-0.243577}, + {-0.938221,0.593895}, + {-0.035179,0.513441}, + {-0.049975,1.127913}, + {-0.672031,0.159578}, + {-0.023330,1.155255}, + {0.143090,1.023505}, + {0.115199,0.309062}, + {-1.199697,0.879078}, + {0.519932,0.063135}, + {0.186381,0.036151}, + {-0.474750,1.313004}, + {-1.041353,0.036701}, + {-0.089927,-0.772333}, + {0.090568,-0.837483}, + {-0.048569,-0.259303}, + {1.571934,-0.955589}, + {-0.022494,-0.250567}, + {-0.308409,0.008499}, + {-0.198203,-0.449276}, + {-0.294832,-0.776042}, + {0.258584,-0.160882}, + {0.168586,-0.668421}, + {-0.607039,-0.175648}, + {-1.595333,0.275002}, + {0.354293,-1.433081}, + {-1.076825,0.444679}, + {0.112063,0.403675}, + {-0.019937,-0.526304}, + {0.878192,1.126714}, + {-0.555291,-0.177409}, + {0.618919,-1.270440}, + {-0.718783,-0.636622}, + {1.023238,-0.542857}, + {0.482907,0.146108}, + {1.333821,1.330160}, + {1.132981,-0.772368}, + {-0.543637,-0.834221}, + {0.775740,0.171336}, + {0.801106,-0.771147}, + {-0.561803,0.079096}, + {0.652019,-0.040842}, + {-0.654772,-0.774603}, + {0.405766,-0.335507}, + {-0.131693,-0.202866}, + {-1.261224,0.358867}, + {0.573502,0.072986}, + {-0.658929,-0.659778}, + {-0.667468,-0.367979}, + {1.363660,0.358243}, + {0.355715,0.497317}, + {0.186055,-0.513256}, + {-0.427157,-0.478966}, + {1.490717,-0.058493}, + {-0.952606,-0.205605}, + {1.437961,0.595822}, + {1.113979,0.821148}, + {-1.993044,0.178065}, + {0.062770,-1.172124}, + {-0.601798,-0.508838}, + {0.404892,0.157432}, + {0.446296,-0.198539}, + {-2.000248,-0.062555}, + {0.418983,-0.605122}, + {1.044428,1.430575}, + {-0.225956,0.016324}, + {0.516675,0.456090}, + {-0.117366,-0.642548}, + {0.821745,0.347570}, + {0.439764,0.695177}, + {-0.216506,-0.082014}, + {1.389264,-0.080676}, + {-0.185223,-0.603367}, + {-0.860185,-0.740634}, + {-0.146111,-0.173600}, + {-0.208919,0.975808}, + {-0.323668,-0.191408}, + {0.325369,0.387206}, + {-1.016963,0.031901}, + {-0.607601,-1.373026}, + {-0.029588,1.154785}, + {-0.134545,-0.252350}, + {0.776553,-0.133224}, + {0.543461,0.280061}, + {-0.890756,-0.743419}, + {-1.170665,1.021231}, + {0.518692,-0.016268}, + {0.959604,0.190010}, + {-0.985259,-0.574513}, + {0.772275,-0.572044}, + {-0.989352,-0.007084}, + {-0.843395,-0.709321}, + {-0.701267,0.196028}, + {-0.479826,0.888804}, + {1.012193,1.019070}, + {0.706742,0.197803}, + {-0.979845,-0.049822}, + {-0.200635,-0.291375}, + {0.049786,-0.795526}, + {1.237530,0.009952}, + {-1.067907,0.940046}, + {-0.112405,-0.397752}, + {-0.046100,-0.102711}, + {0.453746,0.537092}, + {-0.187188,-0.759559}, + {0.717383,-0.561168}, + {-0.164953,-0.323824}, + {-0.166557,0.021823}, + {-0.783368,-0.429656}, + {0.794975,-0.230617}, + {-0.527327,-0.780894}, + {-0.872325,0.014350}, + {0.054789,0.241499}, + {0.738298,-0.228210}, + {0.060773,0.996415}, + {0.241621,-1.596309}, + {0.445850,0.578241}, + {0.315976,1.201028}, + {-1.511131,-0.670994}, + {-0.110134,0.130493}, + {-0.265378,0.556605}, + {-0.552998,0.389953}, + {0.085908,0.759607}, + {-1.029355,0.404668}, + {0.516605,-0.500285}, + {-0.014747,0.186171}, + {-0.662889,0.914909}, + {1.133404,0.043481}, + {0.942736,-1.022847}, + {-1.367925,0.662538}, + {0.202927,-0.261840}, + {-0.080038,0.255562}, + {0.334206,0.344507}, + {0.909260,0.161783}, + {0.279950,-0.442240}, + {-0.132812,1.284395}, + {0.561415,-0.874174}, + {-0.040063,0.004187}, + {0.139506,0.273340}, + {0.678991,-0.833389}, + {-1.242484,-0.045382}, + {0.256214,-0.213426}, + {-0.587563,-0.587595}, + {0.078473,0.384032}, + {-0.277039,1.136410}, + {-0.092972,-1.062368}, + {-0.023888,-0.080233}, + {-0.452956,-0.444322}, + {1.328310,-0.992490}, + {-0.474930,0.347850}, + {0.523240,-0.003848}, + {-0.051859,0.435035}, + {0.353494,-0.243220}, + {-1.096435,1.075703}, + {-0.289883,0.126013}, + {1.309579,0.419419}, + {-0.249474,-1.277937}, + {0.370228,-0.619822}, + {-0.162931,-0.986185}, + {0.529442,0.663374}, + {0.206235,-0.141314}, + {0.327230,0.297918}, + {0.258588,-0.423171}, + {-0.397341,0.502437}, + {0.021206,0.592566}, + {-0.289367,0.413864}, + {0.910642,0.392091}, + {-1.057228,-0.461395}, + {1.001500,0.315649}, + {-0.090014,-0.918110}, + {0.318253,0.558070}, + {0.211192,-0.014893}, + {0.522386,-0.366099}, + {0.090398,-0.703867}, + {1.622834,0.018082}, + {-0.071737,-1.007484}, + {-0.664638,-0.104874}, + {-0.189868,-0.515833}, + {0.358739,0.281609}, + {-0.622523,0.089106}, + {0.361331,0.095296}, + {1.085784,0.080787}, + {0.478981,-0.441729}, + {1.068931,0.439744}, + {-0.628892,0.424033}, + {-0.196324,0.379911}, + {-0.789710,-0.283177}, + {-0.806679,-1.377374}, + {1.599832,1.186046}, + {0.412645,0.144409}, + {0.327430,1.119619}, + {1.057958,1.303142}, + {0.432599,0.474891}, + {0.284130,-0.147951}, + {0.137384,-0.946542}, + {-1.047473,0.054293}, + {-0.143269,-0.396173}, + {0.134200,-1.117673}, + {0.904095,-0.967660}, + {0.784155,-0.589834}, + {-0.329207,-1.584818}, + {1.336969,-0.965850}, + {0.562061,0.584660}, + {-0.860259,-0.550482}, + {0.553302,0.170503}, + {0.384839,0.442235}, + {-0.123665,0.795758}, + {-2.267570,1.579904}, + {-0.985957,0.263810}, + {-0.114123,-0.105293}, + {-0.073897,-0.131005}, + {0.394013,0.420781}, + {1.294967,-0.725636}, + {0.392888,-0.237295}, + {0.708169,-0.947210}, + {0.598124,-0.131921}, + {0.392268,1.238404}, + {0.565937,-1.492817}, + {-0.620915,0.218253}, + {-0.187653,-0.500112}, + {-0.225466,-0.457223}, + {0.298875,0.099610}, + {0.214690,-0.399322}, + {-0.679138,-0.038895}, + {0.118053,0.472370}, + {-0.488826,-0.872846}, + {-1.119422,-0.036171}, + {-0.075847,-0.265969}, + {-1.290590,-1.483111}, + {0.903551,1.081328}, + {-0.903254,-0.425745}, + {-1.654210,-0.592746}, + {-0.834468,0.360416}, + {-0.517414,-0.268347}, + {0.219221,-0.942583}, + {-0.159846,0.647089}, + {0.022067,-0.112729}, + {1.161820,-1.200230}, + {-1.140920,-0.081036}, + {-1.039243,-0.377205}, + {0.314333,0.565306}, + {-1.575490,0.432187}, + {0.468719,0.702260}, + {-0.496647,-0.982869}, + {0.807580,0.126209}, + {-1.232223,-0.694859}, + {0.344013,0.146694}, + {0.352479,-0.248874}, + {0.500112,0.240281}, + {0.150882,0.007734}, + {1.025832,0.271827}, + {0.087793,-0.911808}, + {0.239715,-0.182878}, + {-0.488536,-1.404765}, + {0.245387,-0.004696}, + {-0.830521,0.880491}, + {0.083542,0.285857}, + {0.921577,-0.685627}, + {0.695468,-0.133940}, + {0.939971,1.828094}, + {0.789922,0.759310}, + {0.403211,0.030107}, + {0.016796,0.689851}, + {1.084819,-0.186630}, + {-0.903993,-0.024230}, + {0.712283,-1.107485}, + {-0.931592,0.898492}, + {-0.696849,1.388040}, + {0.542043,-1.230688}, + {-0.217901,1.160492}, + {-0.093252,-0.025223}, + {-0.766154,0.653670}, + {-0.042860,0.814345}, + {-0.196778,-0.716831}, + {0.540037,0.172703}, + {-0.361556,-0.529404}, + {-0.422260,-0.060487}, + {0.516217,-0.838463}, + {0.084237,0.024053}, + {-0.942743,-0.718373}, + {-0.665473,-0.812679}, + {-0.055540,0.324464}, + {-1.050179,0.765823}, + {0.374960,0.619826}, + {0.099384,0.440820}, + {-1.375869,0.145126}, + {-1.168991,-0.089796}, + {-0.464068,0.467425}, + {0.141780,1.426938}, + {0.483327,1.031467}, + {-0.966008,-0.779106}, + {-0.735806,0.516178}, + {-0.139286,0.109933}, + {1.469544,0.847398}, + {0.027674,-0.409753}, + {-0.025074,-1.939206}, + {-0.240214,-0.034248}, + {0.650895,-0.982693}, + {0.425554,-0.059190}, + {-0.496271,0.495123}, + {-1.237870,1.392917}, + {0.256191,-0.155617}, + {0.586083,-0.158262}, + {-0.078923,-0.643073}, + {-0.331194,-1.453308}, + {-0.144171,-0.906848}, + {0.966641,-0.220992}, + {-0.423391,0.041833}, + {-0.824277,0.698242}, + {-0.861274,0.529953}, + {0.179762,-1.130919}, + {-0.996767,-0.193545}, + {0.453175,1.234067}, + {1.485681,0.094392}, + {1.051655,0.052776}, + {-0.134871,0.796853}, + {0.864630,-0.781504}, + {0.780484,-0.400513}, + {0.331109,0.578865}, + {0.776426,-1.263769}, + {0.572772,-0.326729}, + {0.372413,0.005622}, + {0.941942,-1.305397}, + {0.303917,-1.556093}, + {0.189437,1.234819}, + {0.508129,0.382806}, + {-1.116871,-0.360450}, + {0.422168,-0.982315}, + {0.594919,0.466410}, + {1.035624,0.463855}, + {-0.783077,-0.390978}, + {1.236459,1.182626}, + {-0.387814,-0.332232}, + {0.086563,1.162983}, + {-0.346845,-0.245300}, + {0.221111,-0.315026}, + {-0.125533,-0.386266}, + {1.007383,-1.514431}, + {0.408173,-0.652894}, + {-0.444993,0.620328}, + {-0.081295,0.024145}, + {-1.171356,0.146286}, + {-0.654750,-0.194256}, + {1.094476,0.948711}, + {-0.885556,-0.313736}, + {-0.013248,0.284773}, + {-0.687804,-0.472138}, + {-0.155912,-1.113625}, + {-0.819529,0.183507}, + {1.128618,1.019696}, + {-0.355820,-0.271205}, + {-1.577226,0.085216}, + {0.538217,-0.298420}, + {0.076116,-0.620804}, + {0.154589,-1.126306}, + {0.598211,0.261215}, + {-1.007944,1.678870}, + {0.224117,-0.226210}, + {-1.489159,0.965365}, + {-0.297128,-0.374228}, + {0.750106,0.539997}, + {0.386862,0.676595}, + {0.966769,-0.407596}, + {0.384334,-1.359028}, + {-0.664215,-0.143987}, + {0.039815,-0.249599}, + {-1.121556,0.013060}, + {0.991496,1.175812}, + {-0.353957,-0.926145}, + {0.416137,0.633272}, + {-0.347908,-0.060762}, + {-1.001857,-1.669313}, + {0.715754,-0.308980}, + {0.493890,0.621634}, + {0.080629,-0.165597}, + {0.066092,-0.718772}, + {-0.340841,0.667852}, + {0.031320,-1.351725}, + {0.793912,0.365991}, + {0.094964,0.747321}, + {-1.342909,0.528676}, + {-0.173577,-0.344160}, + {-0.196297,-0.688651}, + {0.159112,0.542697}, + {0.329935,0.154517}, + {1.185337,0.700728}, + {-0.704310,-0.402117}, + {-0.316785,-0.310172}, + {-1.232388,-1.015449}, + {-0.043209,0.901854}, + {-0.340189,-2.254502}, + {-0.603832,0.362719}, + {0.962932,-0.001934}, + {1.768897,0.121106}, + {0.679471,0.866237}, + {-0.737197,-1.149965}, + {1.225298,-0.618371}, + {-0.296798,-1.468710}, + {-1.678878,0.063437}, + {0.479002,0.192428}, + {0.346018,-1.538752}, + {-1.206099,-0.295383}, + {1.053135,0.455640}, + {-0.560954,0.547959}, + {0.643517,-0.909463}, + {-0.098024,-0.246867}, + {0.931635,-0.252753}, + {0.148997,-0.323576}, + {0.050144,-0.171018}, + {-0.267956,0.294251}, + {0.333497,0.911259}, + {-0.365215,0.268823}, + {0.144195,-0.701040}, + {-1.526851,-0.129927}, + {1.142833,0.635755}, + {-0.586324,0.067496}, + {1.134076,-0.946287}, + {-0.493528,-0.592981}, + {-0.425575,0.286177}, + {0.092149,0.506148}, + {-0.271803,-1.297036}, + {0.026268,0.441668}, + {1.237103,0.694613}, + {0.582480,-0.500776}, + {-0.919241,0.616013}, + {0.539933,-0.765108}, + {-0.238804,-0.015991}, + {0.251532,1.010740}, + {0.018575,1.538529}, + {1.164247,0.775468}, + {-0.724490,0.704236}, + {0.572185,-0.261278}, + {-0.165192,-0.473733}, + {-0.275442,-0.214077}, + {0.529682,0.079349}, + {-1.043063,0.590297}, + {-0.312898,0.982987}, + {-0.347152,-0.300360}, + {0.198617,-1.545474}, + {-0.137123,0.206520}, + {1.406277,0.504897}, + {-0.230632,-0.020974}, + {1.165849,1.286086}, + {0.567973,0.251033}, + {0.730319,-0.018651}, + {-1.173668,0.011321}, + {-0.036457,-0.751900}, + {-0.615665,0.447886}, + {-0.452895,-0.069779}, + {0.673152,-0.178631}, + {-0.327908,-0.701133}, + {0.721903,-0.259445}, + {0.096390,-0.755208}, + {0.558453,-0.050797}, + {0.264645,0.199839}, + {-0.894315,0.312986}, + {-0.216785,-0.394039}, + {-1.143224,0.400516}, + {-1.356620,0.072608}, + {1.362480,-0.018613}, + {1.142226,-0.983870}, + {0.627630,0.620440}, + {0.660075,-0.739872}, + {0.579792,-1.280997}, + {0.651826,0.602429}, + {1.895455,-0.274354}, + {-0.906672,-0.429069}, + {-0.803452,0.029061}, + {0.481015,1.138218}, + {1.032808,-0.296512}, + {-0.832241,0.455665}, + {0.539383,1.075476}, + {-0.438440,0.887938}, + {0.424835,-0.368019}, + {-0.135554,0.584722}, + {0.599934,1.286793}, + {-1.006594,0.727090}, + {0.911023,0.076265}, + {0.337550,1.120384}, + {-0.895655,0.047860}, + {0.266564,-0.467233}, + {-0.048357,0.118508}, + {-0.702445,-0.560325}, + {0.480256,-1.121399}, + {0.654894,0.949342}, + {-0.417652,-0.110876}, + {0.709040,-0.321438}, + {-0.238239,-0.984386}, + {-0.301674,-0.706961}, + {0.472112,1.348416}, + {-0.288396,-0.181889}, + {-0.450683,-0.267402}, + {-0.308414,-1.071811}, + {-0.417105,0.973953}, + {-1.553241,-0.142268}, + {0.128366,0.111307}, + {-0.927474,-0.051060}, + {1.101826,-0.477989}, + {-0.242754,0.084899}, + {-0.746846,1.115605}, + {-1.127438,-0.172875}, + {-0.155172,-0.399688}, + {-1.837735,0.530750}, + {-1.374064,0.363114}, + {-0.097395,0.053473}, + {0.609195,-0.274619}, + {1.734941,0.890505}, + {0.779686,-0.972688}, + {0.585193,-1.045163}, + {0.248025,-0.300921}, + {-0.152088,0.863592}, + {0.576776,-0.435392}, + {-0.660678,-1.619638}, + {-0.049095,0.111165}, + {-0.054992,0.933530}, + {0.502694,0.260923}, + {-0.330115,-0.374907}, + {0.738413,0.897929}, + {-0.134611,-0.079508}, + {-0.501918,0.744600}, + {1.092964,0.366548}, + {-0.569112,-0.575195}, + {-0.361389,-0.543941}, + {-0.246589,1.583851}, + {0.115483,0.436651}, + {0.709692,-0.027134}, + {-0.201305,-0.325035}, + {-0.081069,-0.613508}, + {-0.204912,0.899014}, + {-0.052638,-0.313595}, + {-0.055242,-0.450843}, + {-1.021730,-0.600249}, + {0.649428,0.166285}, + {-0.566037,-0.062804}, + {0.020980,0.775753}, + {-0.665180,0.091810}, + {0.475532,0.480182}, + {-0.392908,0.497955}, + {-0.911233,-1.270771}, + {0.008075,-0.360294}, + {0.692020,-0.075024}, + {-0.731113,-0.013576}, + {0.768481,0.871268}, + {-0.414806,-0.177137}, + {-0.085437,-0.311006}, + {0.611962,0.398797}, + {-1.456806,0.915209}, + {0.234176,-0.108086}, + {0.392467,-0.300692}, + {-1.290682,-0.075481}, + {0.661390,0.746033}, + {-0.613522,-0.349294}, + {-0.658477,1.050708}, + {-0.966256,-0.650581}, + {-0.356483,-0.515624}, + {0.776759,1.027077}, + {-1.230686,-1.756435}, + {1.443473,0.351437}, + {-1.627666,0.332377}, + {-0.893450,0.724938}, + {-1.214274,0.674931}, + {0.575030,-1.220913}, + {0.436178,-0.146204}, + {0.255927,-0.642819}, + {0.837765,0.357972}, + {0.413942,0.336704}, + {-0.491814,0.029299}, + {0.577770,-0.709864}, + {0.618412,-0.094846}, + {1.113511,0.720462}, + {-1.276252,-1.169819}, + {-0.221518,0.034718}, + {1.175932,0.480262}, + {-1.089821,-0.091391}, + {-0.050210,0.483209}, + {0.570865,-0.312307}, + {0.218860,-0.555332}, + {0.085193,0.903061}, + {-0.177520,-0.161550}, + {-0.920380,-0.285077}, + {1.144318,-0.822307}, + {-0.443889,-0.246271}, + {1.751176,0.442665}, + {-0.171192,0.036515}, + {1.478796,0.623020}, + {0.988539,-0.047767}, + {-0.656993,1.766078}, + {0.175814,-0.815643}, + {0.621924,0.409207}, + {-0.576310,0.039971}, + {-1.353919,-0.486915}, + {-0.387561,-1.061818}, + {-0.119924,1.290992}, + {-0.230595,-0.112278}, + {-0.740619,-0.035881}, + {0.143479,-1.215912}, + {0.210367,1.334086}, + {-0.308564,-0.243013}, + {-0.152059,-0.489945}, + {-0.321632,0.092499}, + {1.924499,-0.416900}, + {-0.096596,-0.427458}, + {0.269636,0.757454}, + {-0.150174,-0.186291}, + {0.865667,-0.424643}, + {0.370408,0.371389}, + {-0.766370,-0.272893}, + {-0.222344,0.995829}, + {-0.468779,1.033146}, + {-0.149001,0.896831}, + {-0.755959,-1.024279}, + {1.217738,-0.762323}, + {0.534823,0.219960}, + {-0.070087,-0.996893}, + {0.319844,-0.482557}, + {0.360326,-1.036808}, + {0.175977,0.088674}, + {-1.461705,0.208011}, + {0.077773,-0.162524}, + {0.054694,-0.539832}, + {-0.096807,0.513069}, + {-0.100006,0.909039}, + {1.406467,-0.680385}, + {-0.474095,0.657180}, + {-0.266534,-0.258199}, + {-0.155174,0.776743}, + {-0.786856,-1.189942}, + {-0.191945,-0.142069}, + {1.405201,0.141338}, + {0.792400,0.879229}, + {0.517136,-0.068225}, + {-0.073672,0.710877}, + {-0.308993,-0.293807}, + {-0.242238,0.739423}, + {0.319612,1.603955}, + {0.275246,-1.560017}, + {0.990727,0.848362}, + {0.559344,-0.346077}, + {-1.078959,-0.356477}, + {-0.070324,0.894042}, + {-0.528587,0.035779}, + {-1.258713,0.379885}, + {-0.290864,0.053989}, + {-0.225357,-0.508803}, + {-0.752478,-0.581330}, + {0.126417,-0.906446}, + {-0.993092,0.097985}, + {0.016474,1.418872}, + {-0.886978,1.124599}, + {-0.864118,0.032904}, + {0.105550,0.529514}, + {-0.447701,-0.032437}, + {-0.815386,0.312394}, + {1.531759,0.864403}, + {0.463851,-0.299624}, + {1.193057,-0.699033}, + {-0.904051,1.118158}, + {-0.019004,-0.938424}, + {0.479988,-0.435766}, + {0.614927,0.556017}, + {-0.620773,0.176160}, + {-0.040731,-0.961046}, + {1.396722,0.475938}, + {-0.651834,-0.578144}, + {-1.231469,0.391926}, + {0.074102,0.218066}, + {-0.780426,0.939099}, + {0.266873,0.597431}, + {0.035461,-0.147601}, + {-0.041518,-1.551616}, + {-0.652796,0.186071}, + {-0.515741,0.854016}, + {0.260025,-0.565384}, + {-0.507427,-1.442764}, + {1.156603,-0.625163}, + {-0.277430,-0.146397}, + {0.786110,-0.385100}, + {0.187860,0.259149}, + {-0.708870,0.857568}, + {0.258114,-0.517658}, + {-1.593806,1.354268}, + {0.769054,1.115951}, + {-0.320025,0.831390}, + {0.362127,-0.478752}, + {0.463627,-0.562727}, + {0.105345,-0.459347}, + {-1.973697,-0.097140}, + {-0.329367,0.850698}, + {-0.703448,-0.335789}, + {0.450011,1.121062}, + {0.654028,-0.721941}, + {0.397198,0.029445}, + {0.299006,0.140008}, + {-1.278916,-0.883708}, + {-0.442195,0.297563}, + {0.159308,-0.023143}, + {0.282331,-0.269534}, + {1.455855,0.834365}, + {0.520331,-0.449560}, + {-0.163163,0.285191}, + {-0.485547,-0.381264}, + {0.182946,-0.895494}, + {-1.239939,0.220402}, + {-0.161033,-0.885029}, + {-1.573787,-0.436694}, + {0.431696,-0.262095}, + {-0.044572,-0.808512}, + {-1.515339,-0.713970}, + {-0.072136,-0.707279}, + {0.083839,0.736988}, + {0.609676,-0.073344}, + {-0.218284,0.410031}, + {-0.145884,-0.759804}, + {1.449489,0.119417}, + {-0.924116,-0.784971}, + {0.396728,-0.420324}, + {0.442812,0.065814}, + {0.300979,0.512297}, + {0.720141,0.898594}, + {-0.335842,-0.181875}, + {-0.558501,-0.374812}, + {-0.124859,0.840644}, + {-0.457252,-0.211346}, + {-0.502385,-0.919004}, + {-0.681491,0.752273}, + {-0.596193,-1.541557}, + {0.244109,-0.338625}, + {0.598338,-0.141999}, + {-0.132257,0.405104}, + {-0.402130,0.664641}, + {-0.985068,0.337142}, + {0.289973,0.153776}, + {-0.086672,0.267755}, + {-1.157864,1.082877}, + {0.138765,1.203857}, + {0.157440,-0.081841}, + {0.183486,1.244150}, + {-1.021782,-0.631884}, + {-0.147782,-0.684714}, + {0.196621,0.546394}, + {-0.631778,-0.068033}, + {-0.138504,-0.409385}, + {-0.600232,0.098769}, + {-0.817953,0.213884}, + {0.961003,0.245662}, + {0.790531,0.562720}, + {-0.703499,1.039309}, + {0.479667,-1.119048}, + {-0.013366,0.839971}, + {-0.034365,0.640450}, + {-1.399523,0.355804}, + {0.260801,0.147967}, + {0.065808,0.546078}, + {-0.347448,0.098553}, + {0.821639,0.246355}, + {-1.628820,-0.597563}, + {-0.248049,0.428404}, + {-0.053644,1.339589}, + {-0.477780,-0.236885}, + {0.582341,-0.895865}, + {0.551673,-0.940215}, + {0.810823,0.355256}, + {-0.718213,-0.553310}, + {0.761180,-1.567887}, + {-1.354477,0.587993}, + {-0.280057,0.265041}, + {-0.485069,-0.830335}, + {-0.898486,-0.123829}, + {-0.065445,-0.810844}, + {-0.075952,0.012324}, + {0.489889,-0.201254}, + {0.502262,-0.204768}, + {0.228861,0.614161}, + {0.686882,0.221387}, + {-0.191478,-0.314977}, + {-0.163156,0.201862}, + {0.981396,-0.176446}, + {0.031663,0.040162}, + {0.765293,0.204843}, + {-1.423840,0.580181}, + {0.661978,-0.453962}, + {-0.198973,-0.676154}, + {0.975239,0.071402}, + {0.514612,1.173023}, + {0.395354,-0.237298}, + {0.218742,-0.040218}, + {1.092119,0.149444}, + {-0.066491,1.171302}, + {0.600378,-0.193844}, + {-0.522677,-0.422476}, + {-0.450177,-0.922771}, + {0.814332,0.819734}, + {0.611399,0.414148}, + {-0.102235,1.090889}, + {0.172764,0.367310}, + {-0.386690,0.711734}, + {-0.308570,0.399715}, + {-0.067773,0.037268}, + {0.897905,-0.893449}, + {0.499070,-0.204820}, + {1.054001,0.253654}, + {-1.022458,-0.025210}, + {0.791977,-0.988702}, + {0.083416,-0.657610}, + {-0.203881,-0.187619}, + {1.728950,0.829113}, + {-0.980056,0.458782}, + {-0.475889,-0.471833}, + {-0.597087,-0.425042}, + {1.065324,0.775118}, + {0.503802,-0.715574}, + {0.017682,-0.631690}, + {-0.846011,-0.086879}, + {-1.073453,-0.572789}, + {0.668645,0.492660}, + {0.202993,0.029645}, + {-0.464086,0.246619}, + {-0.899470,-0.353428}, + {0.399672,-0.546029}, + {-0.121598,1.584198}, + {0.616540,0.126347}, + {1.654014,-0.991907}, + {0.329572,-0.377064}, + {-0.771268,0.203136}, + {0.866739,-0.212090}, + {-0.105599,0.598985}, + {0.124672,0.816280}, + {0.148568,-0.916659}, + {0.156576,-0.534549}, + {0.963588,1.376216}, + {0.514055,-0.130478}, + {-0.228784,0.663864}, + {0.478723,-0.412546}, + {-0.851050,-1.062536}, + {0.424482,0.064766}, + {-0.229494,0.000992}, + {1.328704,-0.161219}, + {-0.001671,1.095202}, + {0.127424,0.140526}, + {0.072691,0.881068}, + {-0.449420,-1.174092}, + {-0.002478,0.730130}, + {-0.264893,1.106372}, + {-0.113501,0.098044}, + {0.445563,-1.652426}, + {-0.648095,-0.615132}, + {-0.791597,0.312268}, + {-0.592599,0.128912}, + {0.193724,-0.027621}, + {-0.246776,1.475506}, + {0.154953,0.056356}, + {-0.256764,-0.209585}, + {1.243059,0.094700}, + {-1.263590,1.488868}, + {-0.715768,1.026954}, + {-0.069072,-0.394451}, + {-0.054306,0.165971}, + {-0.905233,0.403129}, + {-0.220554,-0.122628}, + {0.364791,0.286679}, + {0.785926,-0.769723}, + {-0.735274,2.193241}, + {1.277747,0.699746}, + {0.279424,0.904941}, + {-0.202973,0.086592}, + {-0.778679,-0.431290}, + {0.160730,-0.785100}, + {-0.503414,-0.322093}, + {0.592752,-0.398302}, + {-0.224174,0.376569}, + {-0.504882,0.240802}, + {0.639766,0.479862}, + {-0.548174,0.076778}, + {0.839506,-1.051851}, + {-0.614694,0.201207}, + {0.946087,0.430684}, + {-0.128392,0.666809}, + {0.392418,0.875509}, + {-0.468207,-0.038870}, + {-0.222987,-1.094249}, + {-0.745045,-0.662640}, + {-0.282590,-0.848140}, + {0.273818,-0.451490}, + {-0.107371,0.883462}, + {1.090884,-0.618116}, + {0.320881,-0.288501}, + {-0.802570,-0.344983}, + {0.293442,0.998732}, + {-0.027360,0.016971}, + {-0.520384,1.021780}, + {-1.029293,0.643514}, + {0.544240,-0.294024}, + {0.814885,0.293088}, + {-0.217184,-1.607462}, + {1.042856,-0.193162}, + {-0.482617,0.001200}, + {1.290766,0.396281}, + {0.541096,0.190732}, + {-0.185152,0.422218}, + {-0.395013,-0.856063}, + {0.129098,-0.208842}, + {-1.216610,0.501032}, + {-0.578368,-0.077011}, + {-0.142931,-0.107519}, + {-0.049935,-1.347985}, + {-0.169092,-0.532516}, + {0.473700,-0.739075}, + {-0.372626,-0.612488}, + {0.695860,0.589931}, + {0.090898,0.189706}, + {1.451253,0.155602}, + {0.630673,1.074650}, + {0.523568,1.240808}, + {-0.333037,-1.525041}, + {0.828902,0.384816}, + {0.705692,-0.123515}, + {-0.161236,-1.091553}, + {-0.905419,1.093307}, + {-0.353888,-0.534408}, + {0.604700,-1.082505}, + {0.014201,-0.516866}, + {-2.169492,1.453974}, + {1.951017,0.818724}, + {0.494091,-0.791937}, + {0.118409,-0.206657}, + {1.085713,0.213897}, + {0.301931,-0.566131}, + {-0.259674,0.527941}, + {0.980986,0.596725}, + {-0.596668,-1.134933}, + {0.625839,0.458710}, + {-0.334225,-0.120566}, + {1.771062,-1.026789}, + {0.151459,-1.012159}, + {-0.330544,0.845122}, + {-1.728633,-1.435125}, + {0.140577,-0.610380}, + {0.822159,0.635061}, + {-0.201738,0.393073}, + {0.440206,-0.257053}, + {0.260232,-0.046157}, + {-0.020715,0.469076}, + {-0.449526,-0.525654}, + {1.069078,1.418019}, + {-0.433268,-0.165652}, + {-0.085426,-0.660526}, + {-0.843452,-1.075621}, + {0.160153,-0.609560}, + {0.532025,-0.402982}, + {1.053319,-0.606113}, + {-0.912064,0.532538}, + {0.288336,-0.224900}, + {1.049554,-0.798748}, + {0.062931,0.248464}, + {1.171278,-0.296591}, + {-0.258426,-0.410351}, + {0.945094,0.478489}, + {-1.461804,1.046522}, + {-0.633659,0.358206}, + {0.250690,1.106278}, + {0.430452,-0.309765}, + {-0.308992,0.553894}, + {0.779977,0.398830}, + {-0.294969,0.376904}, + {0.220612,0.065218}, + {-0.920859,-0.345626}, + {0.187574,0.099608}, + {-1.349871,-0.183671}, + {0.130552,0.361476}, + {-0.141677,0.506033}, + {0.618300,1.618166}, + {0.475492,0.079416}, + {0.714330,-0.370986}, + {-0.573479,0.180490}, + {-0.137712,-0.060913}, + {0.515423,-0.368048}, + {0.244133,1.174597}, + {-0.525398,0.663225}, + {0.578443,-0.543669}, + {1.201958,0.923160}, + {-0.111823,-0.487590}, + {-0.073718,0.190523}, + {0.649657,-0.659715}, + {-0.409310,0.134954}, + {-1.326234,-1.272925}, + {1.305404,0.226864}, + {-0.392474,-0.933792}, + {-0.007464,-1.287274}, + {-0.446668,-0.005931}, + {0.098037,-1.037468}, + {1.342139,0.517189}, + {0.428876,0.529115}, + {0.527585,-0.589122}, + {0.132382,0.288948}, + {-0.088091,-0.529385}, + {-0.211020,0.106296}, + {-0.618083,-0.302373}, + {1.818536,0.685940}, + {-0.922613,-0.342791}, + {-1.840156,0.792622}, + {-0.553622,-0.586101}, + {0.623642,-1.195093}, + {-1.132636,0.579581}, + {0.093510,-0.770117}, + {-0.885828,-1.187070}, + {-0.293717,-0.805523}, + {0.400295,-0.348303}, + {0.607811,-0.144559}, + {-0.692936,-0.145218}, + {0.725639,-0.758167}, + {-0.143427,-1.162858}, + {0.782318,-0.861163}, + {-0.606077,-0.183103}, + {0.022532,-0.331872}, + {-0.240756,-1.411801}, + {0.278457,0.187169}, + {0.424589,0.760281}, + {0.483186,-0.084917}, + {-1.213938,-0.432077}, + {-0.429109,0.225001}, + {0.175712,0.073672}, + {1.027955,0.430115}, + {-0.106412,-1.172744}, + {-0.400012,0.691001}, + {0.488778,0.654797}, + {0.674586,0.222262}, + {-0.040199,0.757857}, + {0.335755,-0.779464}, + {-0.011836,0.511340}, + {-0.287985,0.242453}, + {-0.323989,-0.022321}, + {-1.788818,-0.594621}, + {-0.126588,-0.670139}, + {-0.582553,-0.282272}, + {-0.172383,-1.483735}, + {0.097068,0.374952}, + {1.145251,-0.041021}, + {-0.661188,-0.015538}, + {0.478935,-0.798933}, + {0.483136,-0.932957}, + {-0.692102,0.831164}, + {0.387143,-0.210910}, + {-0.369834,-0.499064}, + {-0.552389,0.968678}, + {0.706835,0.672863}, + {0.884666,-1.374115}, + {-0.892116,-0.645080}, + {0.212438,-0.363604}, + {0.120562,0.094899}, + {-0.607090,0.509514}, + {0.391938,-0.197226}, + {1.477689,-0.894952}, + {0.067956,0.305202}, + {-0.377072,-1.118688}, + {0.238509,-0.640692}, + {0.985068,-1.082955}, + {1.406457,0.016522}, + {-0.195835,0.951245}, + {-0.668623,0.196354}, + {0.629538,-0.359206}, + {-2.110332,-0.600784}, + {0.218971,-0.422251}, + {0.327340,-0.702791}, + {-0.506006,-0.186140}, + {0.342203,0.477097}, + {-0.211730,-0.864108}, + {-0.065807,0.211029}, + {-0.227760,0.316405}, + {0.086344,0.613594}, + {0.237860,1.320884}, + {0.473216,-0.549211}, + {0.498238,-0.583895}, + {0.286832,0.326195}, + {-0.476474,0.218899}, + {-0.563894,0.557927}, + {0.272322,0.469703}, + {-0.749019,-0.736560}, + {0.161585,0.085403}, + {0.056852,0.115904}, + {-0.388830,-0.672548}, + {0.884869,-0.590201}, + {0.566593,0.608661}, + {-0.516091,-0.918691}, + {1.642885,1.310890}, + {0.696677,0.124297}, + {0.445759,2.250527}, + {0.322959,0.688997}, + {0.016110,-0.780982}, + {1.171736,0.361072}, + {1.343905,1.272841}, + {0.592350,0.019416}, + {0.152619,-0.147421}, + {-0.704640,0.341073}, + {1.099323,-0.430740}, + {-0.840177,-0.697932}, + {-1.442964,0.718412}, + {0.164263,0.523929}, + {-0.111350,-0.289444}, + {1.050958,0.639940}, + {-0.763601,-0.206712}, + {-0.631193,-0.041356}, + {0.663994,0.322670}, + {-0.258825,1.093934}, + {0.337754,-0.472584}, + {-0.618973,0.215902}, + {0.770590,-1.183008}, + {1.114851,-0.199457}, + {1.027480,1.933290}, + {-0.609203,1.103349}, + {-0.541345,0.547887}, + {0.276828,-0.095631}, + {1.215758,-0.061026}, + {-0.865888,-0.313945}, + {0.134350,-0.986536}, + {0.333627,0.278205}, + {0.229353,-0.313560}, + {0.822267,-0.147288}, + {1.790442,-0.772786}, + {0.614975,-0.867141}, + {0.824009,-0.340756}, + {0.242416,0.525339}, + {-0.913436,1.352899}, + {0.085737,0.921626}, + {0.600046,0.518829}, + {0.840608,-0.399042}, + {0.744769,0.036632}, + {-0.040337,0.836790}, + {0.069399,0.963537}, + {0.190218,-1.028734}, + {0.357859,-0.557734}, + {-0.160823,-0.761802}, + {0.679527,0.810942}, + {-0.334324,0.388009}, + {0.635341,-0.443085}, + {1.119667,1.031693}, + {0.702179,-0.010668}, + {0.687804,0.335793}, + {-1.218997,0.360120}, + {-0.015499,0.167078}, + {0.772188,-0.754889}, + {1.119482,0.633941}, + {0.789910,-0.165533}, + {-0.352196,-0.008508}, + {0.863554,0.258157}, + {0.200500,0.053978}, + {-0.201635,0.202142}, + {-0.195493,0.605893}, + {-0.351966,-0.907111}, + {-0.185199,-1.375999}, + {-0.288755,0.112778}, + {-0.601478,0.546465}, + {-0.254146,0.433599}, + {1.287544,0.188691}, + {0.748493,0.772074}, + {-0.185359,-0.704725}, + {0.297589,-0.523805}, + {-1.228142,0.231061}, + {-0.238207,-1.513225}, + {-1.093305,-0.811754}, + {-1.360744,-0.232347}, + {0.770614,2.942337}, + {-1.054750,-0.772966}, + {0.639057,-0.927998}, + {-0.300836,-0.163147}, + {-0.393160,-0.264180}, + {-0.502845,1.088386}, + {-0.790613,0.905711}, + {-0.312306,-0.234891}, + {0.024799,0.486804}, + {-0.059798,1.341482}, + {-0.463482,0.141503}, + {-0.142495,0.482216}, + {-0.584915,0.774424}, + {0.727377,0.857342}, + {-0.250533,-0.538912}, + {-0.708249,-0.711566}, + {-1.633626,-0.948018}, + {-0.654737,0.568716}, + {-0.452462,0.609938}, + {0.103789,0.356140}, + {-0.028716,0.443183}, + {1.028940,0.846843}, + {-1.932886,-0.497384}, + {-0.029238,-0.196571}, + {0.059763,-0.375114}, + {-0.336361,-0.329419}, + {0.088773,-0.164776}, + {0.765711,0.371364}, + {0.204439,0.390603}, + {-0.110530,1.504023}, + {-0.431800,0.089282}, + {-0.819449,-0.350066}, + {-0.974220,0.564947}, + {0.125759,0.339755}, + {0.317493,-0.006911}, + {-1.013535,-0.202630}, + {0.112258,0.117162}, + {-0.531978,0.042502}, + {-0.940156,0.121649}, + {-0.725521,0.466195}, + {-0.416124,0.485405}, + {0.336967,0.057276}, + {-0.421566,-0.168387}, + {-0.015320,0.831380}, + {-1.056343,-0.068795}, + {0.549310,-1.282829}, + {-0.194868,0.315490}, + {0.003948,-0.561034}, + {0.479671,-0.065741}, + {-0.425547,0.760606}, + {0.488399,-0.579394}, + {-0.424074,-0.366667}, + {0.044047,1.152952}, + {-0.830197,-0.460495}, + {-0.814327,0.057209}, + {1.553867,-0.219049}, + {0.774422,0.590411}, + {0.363240,-0.485420}, + {0.185316,0.168755}, + {-0.564670,-0.244371}, + {0.792661,-0.638865}, + {-0.024050,-0.436980}, + {1.350849,-0.888220}, + {-0.143934,0.300172}, + {0.586975,0.568336}, + {-0.081438,-0.547728}, + {0.492427,0.008414}, + {0.215698,-0.171356}, + {0.462206,0.692607}, + {-0.431732,-0.509402}, + {-1.299840,-1.348103}, + {-0.738818,-0.011450}, + {-0.193146,-1.086403}, + {0.998385,-0.142121}, + {-0.217947,-0.430734}, + {-0.035329,-1.851256}, + {-0.353180,0.927875}, + {0.107119,0.623563}, + {0.012206,-0.271749}, + {-0.307655,0.692549}, + {-0.622138,-0.761409}, + {0.442970,-0.480029}, + {0.796093,0.551437}, + {0.009668,-0.449114}, + {-0.116923,-0.003272}, + {0.747452,0.198782}, + {1.585947,-0.584168}, + {0.062659,-2.154515}, + {-1.470887,-0.702686}, + {-0.377002,-0.215950}, + {-1.380013,0.062652}, + {0.664140,0.181371}, + {1.034914,1.310640}, + {0.810257,-0.623334}, + {0.768412,-0.116447}, + {-0.043917,1.459535}, + {-0.441852,-0.598940}, + {0.028953,-0.184729}, + {-0.076069,0.867122}, + {-0.752365,-0.121888}, + {0.348209,-0.710583}, + {1.006050,-0.709281}, + {0.321016,0.506845}, + {-1.004044,0.592095}, + {1.476868,1.249852}, + {0.404023,-0.215948}, + {-0.786363,0.092388}, + {0.312994,-1.676486}, + {0.877315,0.390367}, + {0.304297,1.872417}, + {0.488998,-0.499786}, + {0.018221,-0.372451}, + {-1.630813,0.961882}, + {-0.677563,0.211437}, + {-0.795802,0.135461}, + {0.520392,0.265735}, + {0.785026,0.446039}, + {-0.362354,-0.016902}, + {-0.318927,-0.455923}, + {-0.333291,0.675215}, + {-1.334583,0.593424}, + {1.430517,-0.375052}, + {-0.502683,-0.736192}, + {-0.710810,-0.141498}, + {-0.252294,0.092360}, + {0.626259,-0.169977}, + {-0.267358,-0.042655}, + {0.193435,0.364396}, + {0.847771,-0.951427}, + {-0.521408,0.066863}, + {1.582067,-0.274576}, + {-0.618104,0.064801}, + {0.613930,-0.093315}, + {0.117743,0.435939}, + {1.262775,0.798231}, + {-0.609864,0.402638}, + {-0.433813,-0.204178}, + {0.343590,-0.619007}, + {-0.178302,0.528886}, + {0.558275,-0.569073}, + {-0.158423,-0.646560}, + {0.527513,0.661901}, + {-0.991489,0.090190}, + {-0.352216,-0.296703}, + {-0.809827,-0.667036}, + {-0.509143,0.613069}, + {-0.175233,0.802702}, + {-0.393206,-0.142194}, + {0.443495,-0.739842}, + {-0.493505,-0.346109}, + {0.291099,0.973915}, + {-0.121100,-0.623550}, + {0.464915,-0.564442}, + {-0.544471,0.680835}, + {-0.476296,0.594486}, + {-0.646494,-0.116102}, + {-0.912840,0.857731}, + {0.608502,0.100114}, + {0.831568,-1.091763}, + {0.233161,0.780343}, + {-0.197179,0.037707}, + {-0.367386,-0.575712}, + {-0.755259,0.477536}, + {0.467144,-0.619239}, + {-0.321884,0.010948}, + {0.452682,0.145276}, + {-0.220426,-0.550002}, + {-0.256978,0.137362}, + {0.680658,-0.565345}, + {-1.750026,-0.017867}, + {-0.323665,-0.262173}, + {-0.097985,0.422237}, + {-1.404647,-0.993924}, + {-0.588194,0.571803}, + {-1.200961,0.921556}, + {0.193916,2.152188}, + {1.013266,-0.106129}, + {0.235823,2.080106}, + {-0.108434,-0.729457}, + {-0.408723,-0.348886}, + {-0.302859,1.484877}, + {-0.312681,-0.505828}, + {0.018735,-0.122920}, + {0.355886,-0.484280}, + {-0.135969,0.761103}, + {0.390779,1.771250}, + {-0.145102,-1.388635}, + {-0.416709,-0.621879}, + {0.126479,-0.899692}, + {-1.448828,0.318005}, + {0.672198,0.308803}, + {-1.764904,0.014698}, + {0.467586,0.731148}, + {-0.866142,-0.129121}, + {1.095405,1.415374}, + {-0.288686,1.532333}, + {-0.694974,-0.572545}, + {-0.296954,-0.918548}, + {0.185017,-0.335333}, + {0.106725,-0.810778}, + {-0.266406,-0.574720}, + {1.024931,0.523381}, + {0.111210,1.033764}, + {1.104428,0.317206}, + {0.138012,-0.485474}, + {-0.075850,-0.936313}, + {-0.691784,0.547524}, + {-0.960452,-0.600781}, + {-0.806045,-0.461982}, + {1.408073,-0.255135}, + {0.150425,-0.658298}, + {0.240710,-0.413124}, + {0.206125,1.431848}, + {-0.706788,-0.747984}, + {0.209810,0.344959}, + {0.940145,1.819041}, + {-0.423045,1.613672}, + {0.691372,0.408910}, + {0.291379,1.694717}, + {-0.022473,-0.483715}, + {1.506409,-0.487754}, + {-0.950211,0.174272}, + {0.437884,0.334518}, + {-0.059121,-0.187999}, + {-0.706148,0.532011}, + {1.247993,-0.173918}, + {0.403025,-0.456743}, + {0.101642,-0.201338}, + {0.220295,0.098694}, + {-0.544353,-1.008343}, + {0.706586,-0.476523}, + {0.291079,-0.150127}, + {-0.041337,-0.659792}, + {-0.493954,-0.757686}, + {-0.198818,-0.425300}, + {0.765368,-0.713655}, + {0.129659,-0.656772}, + {0.752741,0.605671}, + {0.059329,1.098435}, + {-0.095906,-1.236300}, + {-0.192572,-0.654089}, + {0.060002,-0.407818}, + {1.023894,-0.192512}, + {-0.012820,-0.526931}, + {-0.853581,-0.349135}, + {0.422981,-0.199832}, + {-0.884115,-1.022837}, + {0.051870,2.156258}, + {0.511633,0.370017}, + {1.100921,0.287222}, + {-1.091726,-0.326993}, + {1.065161,-0.088250}, + {1.295012,0.347661}, + {-0.186661,0.274683}, + {0.453460,0.453078}, + {-0.019832,-1.655232}, + {0.033441,-0.077400}, + {0.083820,-0.808385}, + {0.161770,1.034907}, + {-0.408970,0.435216}, + {0.710238,0.172596}, + {0.070505,0.071455}, + {-0.157619,1.133331}, + {0.934837,0.290817}, + {-0.142153,-1.033463}, + {-0.805522,-0.609104}, + {-0.713519,0.333743}, + {0.766007,0.180658}, + {-0.210227,-0.404890}, + {-1.432711,0.510194}, + {-1.527153,-0.138670}, + {-1.413773,-1.392381}, + {1.162048,-1.121023}, + {0.375536,0.334633}, + {0.277678,0.377802}, + {0.353273,-0.438537}, + {-0.000468,0.519358}, + {-1.862624,-0.213202}, + {0.231657,-0.206180}, + {0.579498,1.438150}, + {-0.818714,0.244540}, + {-0.414526,-0.963580}, + {1.434481,-0.200950}, + {-0.706870,-0.490200}, + {-0.445819,0.232220}, + {0.014789,0.903088}, + {0.823644,0.019996}, + {-0.257175,1.092355}, + {0.233427,1.236390}, + {-1.569737,0.596411}, + {0.289963,-0.304775}, + {-0.652898,-0.307950}, + {0.677093,0.468114}, + {0.199346,-0.368715}, + {-0.122099,-0.856128}, + {0.527088,-0.699184}, + {0.098459,-0.383729}, + {0.127642,0.100256}, + {-0.743423,-0.133080}, + {-1.904618,-0.208222}, + {-0.311420,0.441420}, + {0.314336,-0.480474}, + {-0.822712,-0.862232}, + {-0.009480,1.146566}, + {-0.001370,-0.736855}, + {-0.643167,-0.430793}, + {-1.377535,0.367134}, + {0.117747,-0.018534}, + {0.118661,-0.605605}, + {-0.428251,0.078424}, + {-0.755322,0.026743}, + {0.108427,-0.429369}, + {-0.546590,-0.242576}, + {-1.123375,0.034104}, + {-0.178010,0.215736}, + {0.555579,-0.157472}, + {0.008256,-1.040877}, + {0.300994,0.502246}, + {-0.596434,-0.574450}, + {0.650520,-0.251038}, + {-1.202669,0.119406}, + {1.207843,-0.367324}, + {-0.839307,-0.511398}, + {-1.142954,0.350094}, + {1.745947,-0.663306}, + {-0.197524,-0.058007}, + {0.604840,0.358341}, + {-0.629763,-1.061339}, + {0.714119,-0.671946}, + {-0.957979,0.108516}, + {-0.204673,-0.841928}, + {-0.224796,1.403409}, + {0.057728,-0.276108}, + {0.022420,0.907590}, + {-0.442873,-0.197745}, + {0.070502,0.367408}, + {1.111314,-0.115300}, + {-1.214722,0.435263}, + {-0.623381,-0.183199}, + {0.842462,0.271952}, + {0.223962,-0.253993}, + {0.784241,-0.623105}, + {-0.460386,0.244667}, + {0.057513,-0.844943}, + {0.252052,1.072527}, + {0.045339,0.090347}, + {-1.550655,-0.849565}, + {0.698342,1.719761}, + {0.625755,-0.059108}, + {0.461099,0.873655}, + {-0.178899,-0.905113}, + {0.378758,0.050943}, + {-0.024118,0.005723}, + {0.139377,-1.441619}, + {0.746170,-0.864942}, + {2.244304,0.225823}, + {0.941294,0.456267}, + {0.681838,0.479907}, + {0.555077,0.448809}, + {0.113034,0.326665}, + {0.290276,-0.323618}, + {-0.310803,-0.740078}, + {0.288215,0.147328}, + {0.122018,-0.901168}, + {1.102202,-1.702754}, + {-0.681899,1.076125}, + {-0.823461,-0.531651}, + {0.608237,-0.372707}, + {-0.681661,-0.191809}, + {0.079867,-1.266244}, + {-0.317741,-0.703671}, + {0.034086,0.942178}, + {0.168887,0.177944}, + {-0.613740,0.025035}, + {1.089925,0.392534}, + {0.075943,0.040485}, + {0.566377,-0.156880}, + {0.660386,0.045064}, + {-0.906557,0.350211}, + {-0.616084,0.671656}, + {-0.353653,-0.928423}, + {1.334011,-0.377983}, + {0.733590,0.190001}, + {-0.583415,-0.285064}, + {1.339272,0.266120}, + {-0.537001,-0.258520}, + {-0.448141,-0.050157}, + {0.740691,0.648732}, + {1.056314,-0.629005}, + {-1.160330,0.410656}, + {0.633715,-0.113482}, + {0.220648,-0.289338}, + {-1.356221,-1.047442}, + {-0.799830,-0.402114}, + {-0.855423,-0.218579}, + {0.533292,-0.955058}, + {-0.590952,-0.359871}, + {-1.003588,-0.950145}, + {0.031010,-0.073887}, + {-0.970717,0.112552}, + {0.905541,0.082191}, + {1.109198,0.621634}, + {0.061115,-0.182655}, + {0.519211,0.584771}, + {0.453454,1.105118}, + {0.307900,-0.290329}, + {-1.310764,-1.192390}, + {-0.990446,-0.449249}, + {-0.636245,-1.136897}, + {0.194571,-0.105070}, + {0.972256,0.693447}, + {-0.291198,1.374025}, + {0.144387,1.382765}, + {-0.101333,-0.022509}, + {-0.474852,0.062917}, + {-0.543704,-0.461692}, + {0.714138,-0.106485}, + {0.040096,0.285104}, + {0.590028,1.369938}, + {0.501543,-0.043429}, + {2.614600,1.102147}, + {0.255439,-1.183224}, + {-1.069301,0.552063}, + {0.505847,0.666774}, + {0.018523,2.289326}, + {-0.261409,-0.381025}, + {-0.633168,-0.802063}, + {-0.221651,-0.314856}, + {0.314198,1.603044}, + {1.173064,1.017943}, + {-0.665682,-0.159433}, + {-1.758748,-0.064417}, + {1.147580,0.950364}, + {0.550126,-0.366558}, + {0.065759,0.113614}, + {0.956481,1.179104}, + {0.433038,-0.684553}, + {-0.367835,-0.136092}, + {-1.108652,-0.501821}, + {0.014093,-0.724897}, + {0.474274,0.071691}, + {-0.878852,-0.454418}, + {-0.111987,0.397469}, + {0.980863,0.508451}, + {0.567833,-0.325126}, + {0.117299,-0.350239}, + {0.496458,-0.149528}, + {-0.712447,0.404552}, + {0.050514,-0.370253}, + {0.209666,-0.591714}, + {-0.392540,-1.209119}, + {-0.075244,0.496292}, + {-0.294131,-1.102998}, + {-0.209255,0.078796}, + {0.109577,-0.306647}, + {-0.214269,0.731213}, + {1.862247,0.688064}, + {-0.992337,0.128817}, + {0.056261,2.006550}, + {-0.259084,0.729512}, + {0.491870,-0.795017}, + {0.176987,0.094347}, + {-0.319391,0.300136}, + {-0.069294,-0.021210}, + {1.038121,-1.099239}, + {1.734655,-0.131408}, + {0.361025,1.818288}, + {-0.758635,-0.906905}, + {1.433721,-0.082347}, + {-0.327756,-1.150218}, + {0.449566,0.413723}, + {0.983053,-0.867287}, + {-0.937329,-0.376043}, + {-0.126866,-0.124008}, + {-0.438458,-0.453466}, + {-0.101627,0.012617}, + {0.582181,-0.133631}, + {0.121428,-0.222195}, + {-0.608804,0.004610}, + {-0.280329,-0.071507}, + {0.776663,-0.049369}, + {0.603737,-0.528278}, + {-1.155587,0.324328}, + {-1.123362,-0.454602}, + {0.767449,-0.921822}, + {-0.352388,-0.357436}, + {0.309848,0.070129}, + {-0.656513,-0.652553}, + {-0.381851,0.355358}, + {0.495213,0.523033}, + {1.153773,1.092873}, + {0.668633,-0.859082}, + {-0.746353,-0.312026}, + {1.048775,0.535930}, + {0.279033,-0.054578}, + {-0.111243,-0.422662}, + {-0.136422,0.053799}, + {-0.056102,0.342915}, + {-1.088014,-0.730922}, + {0.878624,-0.890989}, + {-0.729911,-0.058834}, + {-1.333908,-1.160115}, + {-0.684287,-0.253154}, + {-1.079448,-0.270283}, + {0.151333,-1.649204}, + {0.253875,0.108594}, + {0.235712,0.387503}, + {-0.899825,0.496213}, + {-0.610484,-0.533034}, + {0.496822,-0.243569}, + {-0.524167,0.235972}, + {-1.610220,-0.155522}, + {-0.796686,1.243795}, + {-0.581308,-0.236754}, + {-0.209195,-0.037144}, + {0.184881,-0.083576}, + {0.396540,-0.490520}, + {0.508980,1.096300}, + {-0.094454,0.369221}, + {0.680896,1.252947}, + {-0.440938,-0.853486}, + {-0.157199,-1.304081}, + {-1.447599,0.971928}, + {0.626587,0.396517}, + {0.836229,0.966611}, + {1.381874,-0.246085}, + {-0.414028,-0.280956}, + {0.980019,-0.334138}, + {-1.644429,-0.389069}, + {0.225519,0.368235}, + {1.116159,-0.726131}, + {-0.733320,0.355245}, + {0.988265,-1.747007}, + {0.840822,0.138793}, + {-0.117871,0.688465}, + {0.657025,0.157528}, + {-0.117520,0.629271}, + {-0.645882,-0.938485}, + {0.980639,0.197481}, + {0.320092,-0.621575}, + {1.315216,0.186380}, + {-1.150480,-1.020916}, + {1.148288,-0.445450}, + {-0.049133,0.097262}, + {0.210559,-0.338083}, + {-0.164647,1.698560}, + {-0.134143,-0.581370}, + {-0.100706,0.043457}, + {-0.251067,-0.907292}, + {0.551859,-0.013725}, + {0.299242,-0.340345}, + {-0.247395,1.075102}, + {-0.032695,-1.479628}, + {0.250204,0.334675}, + {0.859668,-0.605057}, + {0.362075,0.166596}, + {0.432570,-0.747261}, + {0.674745,-0.020640}, + {0.361038,0.375811}, + {0.009795,0.744204}, + {-0.437627,-0.150132}, + {-1.149837,0.074239}, + {-0.717292,-1.450907}, + {1.485412,0.238923}, + {-0.577879,-0.010250}, + {0.641200,-0.964459}, + {-0.088981,0.206840}, + {0.593610,-0.502221}, + {-1.008813,0.283182}, + {-0.009605,-0.090918}, + {-1.338922,0.333185}, + {-1.074846,-1.517178}, + {0.539697,-0.906593}, + {0.275416,-0.647435}, + {1.139667,1.074978}, + {0.070698,-0.375933}, + {0.008435,1.196329}, + {-0.222550,0.250323}, + {0.275090,-0.128200}, + {0.279230,0.576149}, + {-0.362237,0.693913}, + {-0.614259,0.504714}, + {0.812049,-1.100580}, + {-0.370461,0.966923}, + {1.198670,-0.644836}, + {-0.031461,0.128519}, + {-0.122097,0.053159}, + {1.315332,-1.008152}, + {-0.754167,-0.305309}, + {-0.485979,0.476556}, + {0.823664,1.071616}, + {-0.183654,-0.551620}, + {0.748615,0.994233}, + {-0.119972,0.065139}, + {-0.849627,-1.159702}, + {-0.444765,0.256956}, + {0.209474,-0.472828}, + {-0.525549,-1.027303}, + {1.757616,0.445698}, + {0.160525,0.088103}, + {0.435382,0.227305}, + {0.218477,0.170341}, + {-0.580507,-0.450303}, + {0.398378,0.017052}, + {-0.031351,-0.247548}, + {-2.316506,-1.483557}, + {-0.443973,-0.691774}, + {-0.510807,0.699816}, + {-1.037649,0.345879}, + {-1.257505,0.629094}, + {-0.000852,-0.321557}, + {-0.373482,-0.402662}, + {-0.022826,-1.218651}, + {0.025138,0.767667}, + {0.356935,-1.465306}, + {-0.020640,-0.323252}, + {0.602591,-0.289913}, + {0.046297,0.283469}, + {-0.283535,-0.047672}, + {-0.166785,-0.277583}, + {-2.385793,1.082178}, + {-0.050855,0.483435}, + {-0.239055,-0.165545}, + {0.505107,0.359352}, + {-0.855951,-1.185629}, + {-0.394709,0.226833}, + {1.257326,-0.916278}, + {-0.745575,-0.046165}, + {-2.243851,-0.696840}, + {0.551393,0.147983}, + {0.291053,-0.204270}, + {0.161488,-0.475875}, + {-0.528262,0.575247}, + {-0.986426,0.773656}, + {-0.744878,-0.909927}, + {0.320911,0.629702}, + {-0.323660,-0.506678}, + {0.028159,-0.259382}, + {0.460460,-0.163144}, + {-0.813206,-0.350558}, + {1.044790,0.293066}, + {-0.132596,1.665505}, + {0.395208,-1.153663}, + {0.924725,-0.269132}, + {-0.982288,-0.672640}, + {0.021874,0.182806}, + {0.249894,0.425458}, + {-0.636470,-0.070118}, + {0.024546,-0.394318}, + {-0.114422,-0.016105}, + {0.604817,0.799636}, + {0.172222,0.798172}, + {-0.091129,0.328291}, + {0.590852,1.199025}, + {-1.487713,0.087366}, + {-1.108675,-0.555536}, + {-0.692600,0.090637}, + {0.911874,0.392273}, + {0.402013,0.091871}, + {-2.169173,0.338864}, + {0.067482,-1.073878}, + {-0.036547,1.460194}, + {0.266305,0.645196}, + {0.003120,0.423355}, + {-0.238731,0.052394}, + {-1.065448,-0.598678}, + {0.055241,0.168619}, + {0.562618,1.551298}, + {-0.301688,-0.337400}, + {0.547448,0.323789}, + {0.788771,0.516224}, + {0.132486,0.681322}, + {-0.323760,-0.904475}, + {-0.871126,-0.916061}, + {-1.544630,0.204207}, + {-0.082182,0.441189}, + {-0.325721,0.084840}, + {-0.000671,-0.910962}, + {-1.548705,-0.305130}, + {1.464460,1.600289}, + {-1.349656,0.526047}, + {-1.552741,0.906982}, + {-0.519449,-0.233318}, + {0.355732,0.331088}, + {-0.489145,0.230703}, + {-0.970139,0.363476}, + {-1.624033,-0.509895}, + {0.174146,0.821782}, + {0.724604,-1.376511}, + {1.393602,-0.607327}, + {-0.510112,1.657338}, + {0.015431,-0.001536}, + {-0.130508,-1.555322}, + {0.000549,-0.198261}, + {0.311467,1.081502}, + {0.243611,-1.360408}, + {-0.894903,-0.713205}, + {0.388720,-0.109925}, + {0.521072,0.398730}, + {0.574843,0.157766}, + {-0.617189,-0.437769}, + {-0.211497,0.748437}, + {0.702855,0.433536}, + {0.432827,-0.382179}, + {0.447150,1.156332}, + {-0.241624,0.581731}, + {1.292169,0.119941}, + {0.294642,-0.871407}, + {0.078200,-0.381604}, + {1.032330,0.908219}, + {0.814741,-0.010627}, + {-0.355983,-0.219502}, + {-0.243898,-0.682654}, + {0.635359,-1.737373}, + {-0.107756,-0.345466}, + {-1.263305,-0.370563}, + {0.175980,0.376202}, + {1.108166,-0.738982}, + {-0.840360,-0.285063}, + {-0.324492,-0.354966}, + {0.478240,0.505811}, + {0.319641,0.856630}, + {-0.332756,0.510426}, + {2.005001,0.405899}, + {0.155406,-1.227927}, + {0.289207,0.937761}, + {0.051751,-0.221727}, + {0.149748,0.268723}, + {-1.025125,0.344019}, + {0.582839,-0.321769}, + {-0.775607,1.441111}, + {0.027304,-0.584074}, + {0.863740,0.627974}, + {-1.060986,0.321724}, + {-0.281804,-0.212668}, + {-0.329657,0.371799}, + {0.531848,-0.158105}, + {0.026672,-0.486360}, + {-0.218047,0.635491}, + {0.666709,0.993036}, + {0.459120,0.452677}, + {0.248002,0.115551}, + {0.206833,-1.105758}, + {-1.569637,-0.151421}, + {0.180787,0.166870}, + {1.226875,1.017497}, + {-1.217281,-0.448781}, + {-1.565721,0.396797}, + {-0.217848,-0.273230}, + {-0.526096,0.662491}, + {-1.229207,0.003437}, + {0.383000,-0.372112}, + {1.650689,0.790800}, + {0.536051,1.136376}, + {-0.392390,-0.182759}, + {-0.163732,-1.005985}, + {-1.140970,0.475364}, + {0.184716,-1.063705}, + {0.945672,-0.647324}, + {0.317886,-0.600098}, + {-0.396886,0.775971}, + {0.101952,-0.090515}, + {0.276508,1.253623}, + {-0.416748,0.718122}, + {-0.099947,-0.530635}, + {-1.499713,0.042544}, + {0.397603,-0.268105}, + {0.204542,-1.122999}, + {-0.983787,-0.646320}, + {0.250761,-0.124317}, + {0.473183,0.341900}, + {-0.705158,0.158472}, + {0.371776,0.467056}, + {0.257410,-1.623932}, + {0.092234,-1.078695}, + {-0.295587,0.833320}, + {-0.531598,-0.934193}, + {0.124603,-0.162051}, + {-0.040780,-0.840548}, + {0.785678,0.974760}, + {-0.282413,0.507355}, + {0.057080,-0.754205}, + {-0.817044,0.275642}, + {0.449437,0.089153}, + {-0.482425,0.004603}, + {1.564964,-1.225545}, + {-0.296003,1.012181}, + {0.691527,0.516007}, + {0.861031,-0.816600}, + {0.276897,-0.215415}, + {-0.478248,1.152079}, + {-0.243767,0.552381}, + {-0.615166,0.120121}, + {-0.258476,-0.311377}, + {-0.105806,-1.233470}, + {0.933500,0.163247}, + {0.430437,1.092868}, + {-1.072369,-0.214236}, + {-0.893004,0.971634}, + {-0.207458,-0.661337}, + {0.591135,0.252093}, + {-0.044583,0.323754}, + {0.455226,0.549888}, + {1.492632,0.101093}, + {-0.299396,-0.684097}, + {0.378218,-0.334619}, + {0.232610,-0.041219}, + {0.051506,0.557403}, + {1.217142,-1.249841}, + {0.292157,1.470057}, + {0.044903,0.071167}, + {-0.290396,0.496778}, + {-0.181920,0.671063}, + {-0.579713,-1.039686}, + {-1.356184,0.198084}, + {0.175306,1.691410}, + {1.030813,-0.581909}, + {-0.959255,-0.444030}, + {-0.357172,-0.625541}, + {0.681264,0.143548}, + {-0.065022,-1.255416}, + {-0.025972,0.751640}, + {0.195418,0.198967}, + {-0.581082,1.283469}, + {0.990660,0.778059}, + {-0.282029,1.107940}, + {-0.273763,0.542701}, + {0.995269,0.786820}, + {-0.232447,0.365286}, + {0.704749,1.074984}, + {0.644010,0.101394}, + {0.378756,-0.170049}, + {0.796258,0.096740}, + {0.728484,0.048925}, + {-0.029005,1.135049}, + {-1.414461,0.100530}, + {0.195218,1.644827}, + {-1.140545,0.941779}, + {-0.380364,-0.295396}, + {-0.489642,0.720380}, + {0.491530,1.084624}, + {0.771087,0.723882}, + {-0.079504,-0.260956}, + {0.512847,0.722547}, + {0.807801,-0.638746}, + {-0.235408,-2.425129}, + {-0.331496,-0.883682}, + {-0.331335,0.149970}, + {0.777123,0.876489}, + {1.812793,-0.280792}, + {-0.603163,0.962356}, + {-0.433949,0.895134}, + {0.611068,-0.002651}, + {-0.050707,-0.939219}, + {0.333190,-0.695877}, + {1.033787,-0.977412}, + {1.029110,0.572951}, + {-0.703830,0.009984}, + {-0.605666,0.240015}, + {-0.892166,-0.256507}, + {0.310084,-0.876146}, + {1.405525,0.188992}, + {-0.818726,0.673212}, + {0.010904,-1.077932}, + {-1.260912,0.553293}, + {-0.193185,0.554862}, + {-0.169833,-0.541666}, + {0.022431,-0.220661}, + {-0.072948,0.560653}, + {-0.643691,-0.722108}, + {-0.414350,-0.104367}, + {0.708357,0.463080}, + {0.714304,-0.151360}, + {-0.658587,-0.887861}, + {0.149199,0.432913}, + {-0.530458,0.445705}, + {1.826116,1.011888}, + {0.656833,0.119869}, + {-0.563687,0.624626}, + {-0.525881,0.838023}, + {0.361541,0.559821}, + {-1.743937,0.165666}, + {-1.349337,1.152104}, + {-0.049679,0.493514}, + {1.987946,-0.325951}, + {0.055513,0.426012}, + {-1.269326,0.122713}, + {-0.773301,-0.328201}, + {0.863300,0.397242}, + {1.404658,0.490418}, + {0.697909,-1.272366}, + {0.346984,0.771560}, + {-0.275198,1.462558}, + {0.614286,-0.583483}, + {0.491689,-0.121321}, + {0.868958,-0.218826}, + {0.802647,0.609581}, + {-0.178894,-0.484794}, + {1.554270,-0.459034}, + {-0.578008,-0.604401}, + {0.141200,-0.810175}, + {0.444930,1.801883}, + {-0.510472,0.370071}, + {0.280709,-1.144972}, + {0.020627,-1.159767}, + {-0.815817,-0.708195}, + {1.525475,-1.186390}, + {0.277199,0.101433}, + {-0.263937,-0.366057}, + {-0.084328,-0.735973}, + {-1.014961,-0.808112}, + {-0.463739,0.359998}, + {-0.195469,-0.339523}, + {-0.016981,0.736436}, + {-0.265756,0.651378}, + {1.181170,0.229175}, + {0.508341,-0.387702}, + {0.232816,0.750349}, + {0.118147,0.881985}, + {0.775509,-1.072872}, + {0.126875,-0.169368}, + {0.733796,-1.038803}, + {-0.002779,1.199573}, + {-0.771687,-0.819622}, + {-0.160414,1.766988}, + {-0.554493,-0.822178}, + {-0.966927,-0.264584}, + {-1.666005,0.562460}, + {-1.142024,-0.696414}, + {0.406841,0.433538}, + {-0.370948,-1.115653}, + {0.136048,0.160321}, + {0.288581,1.454045}, + {0.877842,-0.195856}, + {-0.788680,-1.099470}, + {-0.132225,1.177897}, + {0.090549,0.626800}, + {-0.773979,-0.074852}, + {0.684609,0.690323}, + {0.177050,-1.167072}, + {-0.324256,-0.482870}, + {-0.176754,-0.424217}, + {-1.014998,-0.298680}, + {-0.474555,-0.796117}, + {0.283239,0.175760}, + {0.614617,0.095776}, + {-0.294539,-0.581832}, + {-0.411225,-0.981276}, + {0.042082,0.873893}, + {-0.603924,0.401098}, + {-0.783720,-0.094055}, + {-0.750818,1.155413}, + {-0.229883,-0.177973}, + {-0.439507,0.600696}, + {1.064919,0.193246}, + {-0.304774,0.765127}, + {-0.423589,1.423282}, + {0.226341,0.048299}, + {-0.491662,0.021729}, + {-1.190822,-0.192527}, + {0.236763,-1.021980}, + {0.347245,0.305465}, + {0.437791,-0.174323}, + {0.293884,-1.183318}, + {0.090410,-0.351897}, + {0.127531,0.572262}, + {-1.046283,-0.452403}, + {0.940061,-0.475348}, + {-0.986271,0.443950}, + {0.220640,1.032270}, + {0.286851,-0.234600}, + {0.875448,-0.665507}, + {0.054512,0.468117}, + {-0.130507,1.089372}, + {-0.035702,0.486985}, + {0.069264,-0.306520}, + {-0.066945,-0.482707}, + {0.452421,0.252962}, + {0.597328,-0.457166}, + {-0.475184,-0.265545}, + {0.663543,-0.025896}, + {0.284485,0.141732}, + {0.041567,-0.957668}, + {0.290973,-0.844633}, + {-0.681949,-1.232429}, + {0.017290,0.318637}, + {-0.575524,-0.211416}, + {0.508609,0.616042}, + {0.019156,1.014363}, + {-0.230623,-0.152963}, + {0.390757,0.179639}, + {-0.076114,0.571760}, + {-0.385456,0.807338}, + {1.161341,-1.117539}, + {0.108692,-0.217050}, + {0.124773,-0.057939}, + {0.460042,-0.075353}, + {0.381092,-0.249534}, + {0.421018,0.484359}, + {0.008405,-0.001483}, + {-1.033700,0.064492}, + {0.168744,-0.730623}, + {-0.456130,-0.563921}, + {-0.042797,-0.009800}, + {0.296420,0.994668}, + {-0.431712,-0.260015}, + {-0.851644,0.160001}, + {0.315681,-0.696367}, + {2.018690,1.186418}, + {-0.250355,-0.220666}, + {0.748427,-0.192764}, + {-0.047138,-0.852542}, + {0.211458,1.086426}, + {0.871051,-0.574737}, + {-0.562745,0.929652}, + {0.283267,-0.955651}, + {-1.076759,-0.129783}, + {0.675245,0.669145}, + {-0.702168,-0.896492}, + {-0.291861,0.305292}, + {-0.395244,0.389980}, + {1.207996,0.801305}, + {0.975263,-0.313611}, + {-1.106120,0.102991}, + {0.171218,0.482130}, + {0.049836,0.344150}, + {-0.574798,0.577927}, + {0.172133,0.333449}, + {-1.172473,0.893130}, + {1.350215,-0.102154}, + {0.456540,0.882785}, + {0.794284,-1.919899}, + {0.870210,0.114615}, + {0.286346,0.295210}, + {0.213541,1.053429}, + {0.087514,-0.244276}, + {-0.872078,0.726523}, + {0.614549,0.116808}, + {-0.631306,-1.519765}, + {-0.542784,1.390314}, + {0.087673,0.809103}, + {-1.379197,-0.585950}, + {0.481568,0.087880}, + {-0.119636,-0.372124}, + {0.016361,-0.024546}, + {0.371448,-0.472289}, + {-0.572025,0.092977}, + {0.848296,0.441249}, + {-0.453304,0.205288}, + {-0.271298,0.488850}, + {-0.281843,-0.272080}, + {-0.630517,-0.095495}, + {-0.762736,-0.986147}, + {0.057032,0.993819}, + {-0.237911,-1.264914}, + {0.382413,-0.189031}, + {1.303322,-0.407785}, + {0.538644,0.342608}, + {0.330098,-0.259188}, + {-1.271100,-0.197699}, + {1.826721,0.415414}, + {0.508481,-0.379909}, + {-0.724041,-0.599641}, + {-1.260518,-1.057946}, + {-0.374209,-0.096198}, + {0.392033,1.122224}, + {-0.810644,0.587815}, + {0.365400,1.456110}, + {0.729153,0.098419}, + {-0.225790,-0.539353}, + {-0.858060,0.189621}, + {0.376242,-0.480459}, + {0.232259,-0.269844}, + {0.129211,1.283390}, + {-0.948935,0.157627}, + {0.613247,0.455174}, + {-0.868574,0.557501}, + {0.133104,1.933073}, + {0.493281,-0.734954}, + {-0.317203,0.085507}, + {-0.072179,-0.635623}, + {-0.985795,1.545802}, + {0.274456,-0.767398}, + {0.728872,0.296392}, + {0.593057,0.123323}, + {-0.183197,1.056002}, + {-0.032735,-0.029408}, + {0.677645,0.164514}, + {0.091211,-0.485727}, + {-2.498205,0.808644}, + {0.996395,0.003573}, + {0.266711,-0.454450}, + {-0.263794,-0.040333}, + {0.354992,-0.771940}, + {1.172659,-0.469942}, + {-0.367261,-0.704077}, + {-0.143653,0.755396}, + {1.250809,-0.502261}, + {1.019959,-0.368994}, + {1.590169,-0.138417}, + {0.177393,0.277887}, + {-0.611047,0.094640}, + {-0.549878,-0.036917}, + {0.807628,0.821926}, + {-0.010075,0.421684}, + {-1.108953,-0.164506}, + {-1.299036,-0.726626}, + {0.671054,-0.292631}, + {0.742427,-0.086543}, + {-1.439898,-0.338884}, + {-0.130204,0.124819}, + {0.283823,0.657034}, + {-0.109731,-1.711867}, + {-0.245196,0.209915}, + {0.134997,-0.672792}, + {0.052287,-0.037615}, + {0.660337,-0.488347}, + {-0.874463,-0.641201}, + {-0.570408,0.594626}, + {0.681125,1.678168}, + {0.795936,-1.473398}, + {0.778924,-0.690375}, + {0.431527,-0.973408}, + {-0.440928,-0.786162}, + {0.032495,-0.001239}, + {0.384671,0.422006}, + {-0.232534,0.009146}, + {-0.797171,0.074804}, + {0.273856,-1.269545}, + {-0.171058,-0.791818}, + {1.061619,-0.008526}, + {1.034158,-0.217879}, + {-1.073993,0.364692}, + {0.025259,0.399442}, + {-0.054965,0.068811}, + {-0.267747,-0.643064}, + {1.461066,-0.012076}, + {-0.836750,1.168916}, + {0.751557,0.373319}, + {0.284049,-0.561823}, + {0.913427,0.006951}, + {0.604871,0.613051}, + {0.938690,0.069825}, + {0.501171,-0.252792}, + {0.173783,0.437109}, + {-0.295979,-0.584728}, + {0.268176,-0.073450}, + {-0.039777,0.110535}, + {0.448278,-0.594228}, + {-0.298566,-0.370610}, + {0.359251,1.950238}, + {0.585298,-0.306953}, + {0.002142,-0.517386}, + {0.039309,0.239663}, + {-0.535150,0.901889}, + {0.909644,-0.597911}, + {1.686969,-0.229593}, + {-0.675714,-0.593584}, + {-0.388048,-1.333594}, + {0.141555,-0.868886}, + {0.566275,0.216197}, + {0.132033,0.260242}, + {0.623869,0.696830}, + {0.374297,-0.755016}, + {-0.375173,-0.919679}, + {0.062230,0.203455}, + {-1.171487,1.698409}, + {-0.657380,-0.503744}, + {0.414301,0.170470}, + {-0.611193,-0.370376}, + {0.470375,-0.330994}, + {-0.990314,0.032083}, + {-1.312575,-0.450515}, + {0.164736,-0.128481}, + {-0.912458,-1.485285}, + {-0.073236,-0.747723}, + {0.278586,-0.044914}, + {-0.449681,-1.314391}, + {0.509207,1.963487}, + {0.443624,-1.487975}, + {0.605531,0.966878}, + {0.884828,1.743505}, + {-0.335874,-0.307016}, + {-0.615678,0.670790}, + {0.953036,0.532101}, + {0.825614,0.299899}, + {0.399454,-0.946779}, + {-0.563757,-0.802924}, + {-0.023567,0.554864}, + {0.046483,-0.362895}, + {-0.330303,0.001323}, + {0.433488,0.570663}, + {-0.127014,1.545073}, + {0.235044,-0.692703}, + {0.339960,-0.764085}, + {0.765956,-0.657851}, + {1.077800,-0.036173}, + {0.431734,-0.931291}, + {0.205175,1.147130}, + {-0.058883,-0.741478}, + {0.538996,0.374879}, + {-0.435105,0.405032}, + {0.930107,0.775706}, + {0.158508,-0.559880}, + {-0.043020,-0.139690}, + {0.218128,-0.940794}, + {0.107406,-0.191890}, + {-0.040673,-0.450419}, + {0.710685,-0.272868}, + {0.214608,-0.733148}, + {-0.440708,-0.166709}, + {0.216889,-1.104968}, + {0.114942,0.352891}, + {0.515426,0.834965}, + {-0.186585,-0.424557}, + {1.257561,-0.686647}, + {-0.278166,-1.068819}, + {0.045243,-0.149820}, + {-0.806871,0.387979}, + {0.040414,-0.705648}, + {-0.016666,1.472054}, + {-0.427683,0.185384}, + {0.017081,0.122558}, + {-1.422488,0.695789}, + {0.084603,1.586049}, + {-0.226098,-0.072565}, + {-0.689706,0.246104}, + {0.644654,0.604549}, + {-0.260322,1.463776}, + {-0.430197,0.702709}, + {-0.736554,1.401740}, + {0.204332,-0.375610}, + {-0.939807,1.309502}, + {-0.037928,0.882787}, + {-0.338569,0.066617}, + {0.075071,0.541251}, + {0.172982,1.021832}, + {0.431851,-0.387000}, + {0.307106,-0.919275}, + {0.988648,-0.253024}, + {-0.673928,0.782128}, + {-0.688000,-0.918977}, + {-0.027596,0.365924}, + {-0.017926,1.175705}, + {0.199711,-0.926633}, + {0.739217,-0.155412}, + {-0.592162,0.021539}, + {0.080983,-0.276297}, + {0.537674,-0.246176}, + {0.015238,0.398952}, + {-0.027734,-0.249279}, + {-1.378429,0.127339}, + {-0.809060,1.028061}, + {0.218043,-0.052562}, + {0.856957,1.006954}, + {-1.011526,0.164596}, + {0.476552,0.826400}, + {0.022545,0.496168}, + {-0.593984,0.825097}, + {-0.170301,-0.015034}, + {0.206013,0.981045}, + {0.558955,-2.047671}, + {-0.285619,-0.535242}, + {0.338595,-0.054516}, + {-0.320398,0.326921}, + {-1.165209,-0.830182}, + {-0.247664,-0.461885}, + {0.566396,-0.099876}, + {-0.062142,0.605779}, + {0.862879,0.021585}, + {-0.964586,-0.456012}, + {0.383126,-0.226075}, + {1.125091,0.452775}, + {0.287649,1.076596}, + {0.090020,0.540193}, + {-0.329572,1.895356}, + {0.883979,-0.133990}, + {0.777596,0.934683}, + {0.305673,-0.097759}, + {0.445752,0.546775}, + {0.438676,-0.401466}, + {0.515517,0.663239}, + {-0.861769,-0.334754}, + {-1.155387,1.376435}, + {0.693576,0.380899}, + {-0.233764,-1.427252}, + {-0.512225,0.275704}, + {-1.300603,-0.025943}, + {-0.886231,0.393107}, + {0.203813,-1.151956}, + {1.065475,0.274747}, + {1.298933,-0.171110}, + {-0.034164,-0.546428}, + {1.344656,0.280082}, + {0.303208,-0.150756}, + {-0.278895,0.217139}, + {0.774302,0.280649}, + {-0.397168,-0.748535}, + {-0.154686,-0.416415}, + {0.108531,-0.707248}, + {1.044479,0.517916}, + {-1.079087,-0.181141}, + {-0.618875,-0.601089}, + {-0.903401,1.369553}, + {-0.434703,1.004383}, + {0.084219,-0.594635}, + {0.760134,0.396506}, + {-0.868353,0.425362}, + {0.190516,-0.470775}, + {0.130523,-0.050180}, + {1.613252,-0.894441}, + {-1.230645,0.027123}, + {-0.207136,1.406158}, + {0.097428,0.373589}, + {1.101023,0.803449}, + {1.891159,-1.054308}, + {-0.158666,-0.325728}, + {0.218607,-0.427098}, + {0.581789,-0.007118}, + {0.407515,0.254448}, + {0.153202,-1.566655}, + {1.270156,0.791481}, + {-0.807984,-1.293868}, + {-0.631812,0.190605}, + {1.684536,0.502642}, + {-0.623167,-0.326260}, + {0.460536,1.490078}, + {-0.633215,-0.730038}, + {0.455857,-0.569264}, + {1.113987,0.512264}, + {-0.303183,-0.813196}, + {1.242308,0.346664}, + {0.235454,0.588078}, + {0.884906,-0.682330}, + {-0.870385,0.197874}, + {-0.392108,1.132213}, + {0.139987,0.749446}, + {0.057771,-0.617700}, + {-0.090352,0.118191}, + {0.007506,0.480385}, + {-0.183661,-0.349638}, + {-0.201963,1.476555}, + {-0.705242,-0.479413}, + {0.975864,0.280884}, + {0.972210,0.753330}, + {0.338783,-0.040685}, + {-0.054492,0.060498}, + {-0.159293,0.819645}, + {-1.053555,0.401428}, + {0.115345,-0.107756}, + {-0.194026,0.187454}, + {0.439241,-0.428716}, + {-0.065278,-1.075082}, + {-0.272430,0.840665}, + {-0.259244,0.669703}, + {0.033760,-1.203906}, + {0.088858,-0.092993}, + {-0.855095,-0.299047}, + {-0.255525,0.089061}, + {-0.202798,0.134231}, + {0.574524,0.323405}, + {-0.355686,-0.509011}, + {-0.238557,0.035684}, + {-0.381287,-0.557626}, + {0.657797,0.952902}, + {-0.077875,0.403221}, + {-0.237508,1.411722}, + {0.652551,-0.088574}, + {-0.013073,0.581057}, + {0.570232,-0.572671}, + {1.442937,-1.109803}, + {0.997920,-0.010095}, + {-0.152155,0.277499}, + {-0.584876,-0.218181}, + {0.717679,-0.143585}, + {-0.075248,-0.695632}, + {-1.576641,-0.266963}, + {-0.228247,-1.087442}, + {-0.672358,-0.340599}, + {-0.682509,-0.975534}, + {0.412126,0.155315}, + {0.540229,-0.913902}, + {-0.949688,-0.498559}, + {0.038080,-0.334697}, + {-0.844788,0.671919}, + {-0.340829,-1.268134}, + {0.033822,1.867938}, + {-0.995863,-0.338217}, + {0.179299,-0.122295}, + {-0.037869,-0.933049}, + {-0.750164,-0.719282}, + {-0.833977,1.003917}, + {0.932833,0.760645}, + {0.867564,0.655081}, + {-0.504874,-0.636730}, + {0.714318,-1.290905}, + {-0.672831,0.341525}, + {0.278639,0.168889}, + {-1.057328,-0.938548}, + {-0.028958,0.765673}, + {0.659485,-0.427439}, + {-0.688018,0.905752}, + {0.593115,-1.081085}, + {1.020607,-1.035200}, + {-0.288406,0.254196}, + {0.681091,-0.195788}, + {-0.405965,0.877370}, + {0.247328,-1.348181}, + {0.193907,-0.618541}, + {0.104252,-0.480525}, + {-1.219477,-0.511557}, + {-0.355216,0.903456}, + {-1.510029,-0.513418}, + {-0.622239,1.647319}, + {1.211936,-0.279494}, + {-0.944064,0.760953}, + {0.165329,0.746784}, + {1.123063,0.150372}, + {0.591389,0.426566}, + {-0.763105,0.099885}, + {-0.233567,-0.051927}, + {0.451271,0.672933}, + {-0.319276,-0.725166}, + {0.090943,0.256992}, + {-0.740401,0.083129}, + {-0.493689,0.594996}, + {-1.160349,0.225323}, + {-0.120932,-0.308355}, + {-0.242434,0.784263}, + {-0.564637,-0.499833}, + {-0.094070,-0.250553}, + {-0.953770,-0.371332}, + {1.661581,0.171338}, + {0.341775,0.270245}, + {0.118130,0.083808}, + {-0.079126,-0.216981}, + {0.338884,0.258435}, + {0.264433,-0.841639}, + {0.232893,-1.129943}, + {1.240106,-0.052206}, + {0.209045,0.058734}, + {0.520361,0.888685}, + {-0.349822,-0.636562}, + {0.594371,1.144844}, + {0.075638,0.714484}, + {-0.784900,-0.809998}, + {0.662100,-0.092575}, + {0.056696,0.432525}, + {-1.239459,0.384416}, + {-0.006458,0.746883}, + {-0.290814,-0.506631}, + {0.561491,-0.077239}, + {-1.024084,0.663394}, + {-0.157999,-0.050504}, + {1.085344,-0.554264}, + {-0.708002,0.222259}, + {-0.593735,-0.009698}, + {0.223185,0.251755}, + {-1.023014,0.387383}, + {0.397333,0.864350}, + {1.103984,0.475520}, + {0.352685,-0.245976}, + {0.549224,0.087034}, + {-0.472024,0.633377}, + {-0.620719,-0.384944}, + {-0.442898,-0.177685}, + {-1.124416,1.350868}, + {0.618839,0.158407}, + {0.718180,0.334085}, + {-0.107034,-1.414157}, + {0.390844,-0.348879}, + {0.416452,-0.381163}, + {0.016589,0.693169}, + {0.210261,1.649291}, + {0.151838,0.205813}, + {-0.595573,-0.768804}, + {-0.160431,-0.717857}, + {-0.510800,-0.293505}, + {-0.818709,0.437824}, + {0.545773,0.032159}, + {0.676537,-0.059850}, + {-0.311443,-1.175198}, + {0.157728,-1.121027}, + {0.012740,0.536150}, + {-0.639492,0.488597}, + {-0.070496,-0.204313}, + {0.234541,0.328949}, + {0.236419,-0.139396}, + {-0.288891,0.889796}, + {0.148007,1.176270}, + {0.546853,0.583059}, + {-0.361551,1.330611}, + {1.183964,1.397033}, + {-0.993293,0.519104}, + {-0.712212,-0.401528}, + {0.445422,-1.006540}, + {0.778229,-0.924857}, + {0.140488,-0.120001}, + {-0.930823,0.679986}, + {0.269149,-1.501842}, + {0.630853,-0.526320}, + {0.957876,-0.802863}, + {0.190233,-1.009434}, + {-0.185559,0.932629}, + {0.050613,-0.086777}, + {0.020035,-0.059037}, + {-0.511718,-0.355513}, + {-0.795821,0.050420}, + {-0.656840,1.891314}, + {-0.055379,0.405881}, + {0.539094,0.845218}, + {-1.014806,0.375225}, + {-0.503707,1.354756}, + {0.124660,-1.563966}, + {-0.465392,-0.054315}, + {-0.437257,0.566359}, + {-0.082575,-0.150215}, + {-0.133522,0.536886}, + {0.594595,1.933791}, + {0.914843,-0.872862}, + {-0.247467,-0.433828}, + {-0.064788,0.077212}, + {0.778095,-0.045493}, + {0.366523,1.293263}, + {0.094333,0.230801}, + {-0.614536,0.463331}, + {0.430178,1.113947}, + {-0.150038,0.174521}, + {0.438024,0.254990}, + {0.480884,-1.856722}, + {-0.666409,-0.255484}, + {-0.457158,-0.599194}, + {-0.450171,0.118477}, + {0.497637,-0.101183}, + {-1.705586,0.405099}, + {0.259566,0.922599}, + {0.672946,-0.407264}, + {0.324409,0.900242}, + {-0.243075,-0.163768}, + {0.051280,0.490307}, + {0.571128,0.105678}, + {0.345743,-1.177099}, + {-0.869364,-0.068202}, + {-0.334410,0.647972}, + {0.476318,-0.010292}, + {-0.404522,0.623306}, + {-1.162121,-1.071830}, + {-0.627528,-0.384318}, + {-0.337665,-1.341870}, + {0.041529,0.841819}, + {-0.201762,-0.736758}, + {0.184452,-0.757867}, + {-0.709406,-0.513657}, + {-0.135826,-1.416885}, + {-0.764527,-0.630076}, + {-0.759073,1.284986}, + {-0.016376,-1.529208}, + {1.348773,-0.176343}, + {-0.604174,0.991312}, + {-0.281693,-1.131040}, + {0.070203,0.284520}, + {-1.229019,-0.521961}, + {-0.321063,-0.524171}, + {-0.284333,-0.886437}, + {0.325590,-0.528520}, + {0.254426,-0.232536}, + {0.263271,-0.448853}, + {-0.872268,0.657765}, + {-0.819516,-0.328243}, + {-0.259070,0.625280}, + {-0.590739,-0.670188}, + {0.493374,0.019055}, + {1.344704,-0.174393}, + {-1.182374,-1.425261}, + {-0.666870,0.434800}, + {-0.225687,0.069924}, + {0.375164,1.016698}, + {0.327044,-0.675835}, + {0.497187,0.790896}, + {-0.054661,-0.971456}, + {0.260230,0.159026}, + {-1.246029,-0.535410}, + {-0.124982,0.871965}, + {1.010443,1.001963}, + {0.452742,-0.029144}, + {0.117958,-0.136449}, + {0.148605,-0.229105}, + {0.251393,0.825563}, + {0.730487,0.258166}, + {-0.610108,0.505836}, + {0.797900,0.109366}, + {-0.107968,0.039054}, + {0.252653,-0.138314}, + {0.035959,0.047755}, + {-1.412453,-0.353756}, + {-0.174516,-1.100457}, + {-0.405645,0.021713}, + {-1.214659,-0.958074}, + {-0.598051,-0.067393}, + {0.459193,-0.091313}, + {-0.584458,-0.757231}, + {-0.806303,-0.669604}, + {0.808333,0.602605}, + {-0.258282,-0.747621}, + {0.089092,-0.642856}, + {-0.730287,0.033052}, + {0.087943,-0.788594}, + {0.341008,-0.211460}, + {0.000571,0.004990}, + {0.670368,-0.386947}, + {0.557711,-0.002995}, + {-0.293485,-0.872980}, + {-0.783528,0.580868}, + {-1.146005,1.580005}, + {-0.361812,1.094479}, + {0.124733,0.413218}, + {-0.158285,-0.637446}, + {0.364533,0.669450}, + {-0.382480,0.147327}, + {-1.131368,-0.908078}, + {-0.134073,0.755815}, + {0.085353,0.234990}, + {0.038784,-0.362630}, + {-1.186840,-0.015796}, + {0.464353,0.494665}, + {-0.835406,0.374020}, + {-0.321494,0.250667}, + {0.327866,0.142119}, + {0.104908,0.694259}, + {0.081477,-0.930475}, + {-1.022207,0.157953}, + {1.114196,-0.318852}, + {-0.153446,-0.083414}, + {-0.004149,-1.802615}, + {0.061545,-0.040178}, + {-0.799257,-0.743362}, + {-0.208531,-0.357144}, + {-0.319060,1.569294}, + {0.077045,-0.067189}, + {-0.161677,0.635664}, + {-1.405501,-0.763577}, + {-0.397846,0.381495}, + {-0.609449,0.151477}, + {0.790843,0.583281}, + {-0.125419,-0.673059}, + {0.048552,-0.170964}, + {0.251041,1.361702}, + {0.146372,-0.095489}, + {0.636802,0.172758}, + {0.019193,0.213042}, + {-1.039100,-1.241302}, + {-0.564480,-0.945689}, + {0.486241,-0.284521}, + {0.331050,-1.330519}, + {-0.267252,-0.434646}, + {0.766397,-0.345934}, + {-0.200744,0.569833}, + {-0.041749,1.160658}, + {-0.166904,0.567353}, + {-0.647654,-0.482519}, + {1.259189,0.238637}, + {-0.061864,-1.133994}, + {0.709167,0.066215}, + {0.421481,0.512487}, + {0.539837,0.885868}, + {-0.840289,-1.137802}, + {1.081907,-0.754870}, + {0.139268,-0.120622}, + {1.964821,1.068368}, + {0.623684,0.427752}, + {-0.307559,-0.061760}, + {-0.075474,-0.859298}, + {0.856064,-0.238438}, + {0.100253,0.302974}, + {-0.637176,-0.566873}, + {-0.008290,0.282227}, + {1.214723,0.715509}, + {-0.162779,-1.789175}, + {-0.134063,0.710633}, + {-0.519932,0.522329}, + {0.204941,0.159361}, + {-0.482306,-0.376938}, + {-0.188561,0.397104}, + {0.440798,0.479065}, + {0.765870,0.912747}, + {-0.419145,-1.087277}, + {0.200862,0.291699}, + {1.606653,0.419064}, + {-0.231721,-0.095246}, + {-0.709828,-0.172976}, + {0.156692,-0.203509}, + {-1.074669,0.010797}, + {0.247751,-0.531622}, + {0.596496,-0.743859}, + {-0.167848,0.769772}, + {-0.600885,-0.306912}, + {-1.540693,0.221595}, + {0.449488,-0.651038}, + {-0.250910,-0.287887}, + {-0.367598,0.361719}, + {0.494129,0.106607}, + {-0.074593,-1.892982}, + {0.883074,0.395411}, + {-1.092268,0.178541}, + {-0.087335,-0.713201}, + {-0.276838,-0.297331}, + {0.652034,-0.294585}, + {0.545522,-0.253011}, + {0.923416,0.397211}, + {-1.625554,-0.069215}, + {0.004244,-0.025244}, + {0.961205,1.110819}, + {-0.183857,-0.022013}, + {0.193756,0.316726}, + {-2.046393,-0.164273}, + {-0.368365,-0.635641}, + {-0.977759,0.639374}, + {-0.511194,0.291523}, + {-0.240401,0.676329}, + {0.444406,0.962063}, + {-0.276425,1.306324}, + {-0.632475,-0.521505}, + {-2.202754,-0.707231}, + {0.036750,-1.180940}, + {1.569251,-0.049689}, + {0.398289,0.888255}, + {0.348308,-1.632712}, + {-0.564295,-0.266565}, + {0.269295,-0.357566}, + {0.717308,-0.386385}, + {0.055096,1.001055}, + {-0.316491,0.558610}, + {-0.104349,-0.364259}, + {-0.628408,0.275177}, + {-0.793190,-0.708380}, + {0.273673,-0.761222}, + {-0.324338,0.469933}, + {-0.879443,1.299100}, + {-1.259126,0.852917}, + {-0.076886,-0.512190}, + {0.102022,-0.181585}, + {0.519581,0.053206}, + {0.001434,-0.202726}, + {-1.015981,0.459688}, + {1.125770,0.940926}, + {0.312231,0.424855}, + {-0.499418,-0.502875}, + {0.517807,0.069577}, + {-0.973119,0.268788}, + {0.374483,-0.502729}, + {0.003039,-0.024829}, + {-0.040855,1.072277}, + {-0.951793,-0.475118}, + {-0.710944,-0.003773}, + {-0.114791,1.219599}, + {-0.245796,0.792555}, + {-0.003881,0.164329}, + {0.352843,0.700678}, + {1.098609,-0.455416}, + {0.890404,-0.589496}, + {0.004892,-0.535082}, + {1.442431,-0.702892}, + {-0.366707,-1.095639}, + {1.025595,0.172890}, + {0.938371,0.195878}, + {0.126380,0.673834}, + {-0.578430,0.938407}, + {-0.502260,0.910490}, + {0.254066,0.433385}, + {-0.220341,1.040807}, + {1.453578,0.343099}, + {-0.608675,-0.498692}, + {0.073501,0.011211}, + {-0.829259,0.377760}, + {-0.079486,-1.685480}, + {1.145159,-0.985214}, + {0.098902,-0.864296}, + {0.393820,1.649395}, + {-0.734563,0.744368}, + {-0.147095,-1.257531}, + {-1.627407,-1.136028}, + {0.467873,1.041606}, + {0.757500,-0.414132}, + {0.831162,-1.034454}, + {0.816375,0.500999}, + {0.702928,1.649657}, + {0.080263,-0.721470}, + {-1.187533,-0.047103}, + {-0.150313,1.708622}, + {0.493906,-0.679800}, + {0.594035,-0.186757}, + {-0.240079,1.222442}, + {-0.360900,0.050265}, + {0.144905,0.624081}, + {1.181170,0.285112}, + {0.290493,0.604750}, + {1.092495,0.412827}, + {0.562585,0.524007}, + {0.341804,0.235361}, + {-1.162588,-0.993807}, + {0.413398,0.629788}, + {-0.085675,0.234139}, + {0.096242,-0.149101}, + {-0.237502,-0.226784}, + {1.018918,0.053213}, + {-0.242669,-0.787538}, + {0.756043,-0.235274}, + {0.919413,0.564605}, + {1.108872,0.879978}, + {-0.581288,0.281426}, + {-0.326461,1.233718}, + {-0.079129,-1.162175}, + {0.349478,-0.844907}, + {0.027088,-0.819916}, + {0.170056,0.187616}, + {0.502767,-0.666850}, + {0.961324,-0.584669}, + {0.710063,0.119446}, + {0.239278,0.976768}, + {-0.014996,0.524941}, + {0.008554,0.179727}, + {-0.393247,-0.037826}, + {0.718612,-0.978392}, + {-0.225419,-0.038771}, + {-0.227036,-0.165385}, + {0.121599,-0.197455}, + {1.134869,0.485862}, + {-0.947191,-0.134063}, + {-0.654587,1.189330}, + {0.443246,-0.706134}, + {-0.830123,-0.240530}, + {-0.113430,1.241655}, + {-0.108660,-1.135730}, + {0.036003,-0.841002}, + {-0.157794,0.185786}, + {-0.483079,0.099628}, + {0.280081,0.479144}, + {1.939184,-0.257319}, + {-0.687604,0.274654}, + {0.281510,0.228436}, + {-0.028762,-0.144790}, + {-0.171744,0.621507}, + {-0.370458,-0.435995}, + {-0.369755,0.546579}, + {1.695030,0.039443}, + {1.240829,-0.834031}, + {0.295979,-0.031126}, + {-0.422307,-0.218957}, + {0.139370,0.067480}, + {0.184715,-0.646348}, + {-0.818519,0.518805}, + {-0.103088,0.886249}, + {-0.138199,-0.692871}, + {-0.039802,0.305166}, + {0.227665,0.707830}, + {0.407761,-0.090334}, + {-0.148850,1.035646}, + {0.706539,0.838360}, + {-1.216193,0.118999}, + {-1.145744,-0.154962}, + {-1.072350,0.028873}, + {0.816804,-0.037296}, + {-0.223583,0.078154}, + {0.551985,-0.137222}, + {-0.434480,-0.170241}, + {-0.717792,0.161839}, + {0.404747,-0.083635}, + {0.457787,0.137080}, + {-0.205589,0.734910}, + {-0.788705,1.504406}, + {0.647835,-0.940490}, + {1.096260,-0.020625}, + {-0.515190,0.721472}, + {0.151921,0.029406}, + {-1.071512,-0.382693}, + {-0.666773,0.643925}, + {0.473907,0.434675}, + {0.281689,0.152364}, + {1.231462,0.143107}, + {0.422616,0.642618}, + {-0.860802,1.066102}, + {0.180806,-0.160456}, + {-0.171602,1.259847}, + {-1.080608,-1.537974}, + {0.247965,-0.391762}, + {-0.597206,-0.026325}, + {0.806679,0.506041}, + {-0.448461,-0.551637}, + {0.609211,1.564775}, + {-0.584254,-0.421677}, + {-0.115819,0.092741}, + {0.630211,-0.423075}, + {0.219037,0.467483}, + {0.330857,0.747908}, + {-0.653036,0.009290}, + {-0.785070,-0.874116}, + {1.707815,0.381228}, + {0.023747,-1.518223}, + {-0.937137,-0.965197}, + {0.640566,0.933056}, + {-0.594679,-0.574540}, + {0.296794,-0.291891}, + {-0.714825,0.378028}, + {0.757843,0.220650}, + {1.019762,2.070884}, + {1.052090,-0.108974}, + {0.617214,-1.030121}, + {0.234111,1.070887}, + {0.325029,1.415523}, + {-1.411232,-0.591198}, + {0.955943,0.862474}, + {-1.524439,0.478968}, + {0.161252,-0.000874}, + {-1.682225,-0.113368}, + {-0.714802,0.379857}, + {0.815552,-0.386556}, + {0.565304,0.508925}, + {0.033944,-0.055679}, + {-0.160544,-0.364665}, + {1.167740,-0.747209}, + {-0.114289,-0.426222}, + {0.998961,-0.781649}, + {0.480485,-0.325437}, + {0.818972,1.053668}, + {-0.759151,0.662107}, + {-0.533949,1.213625}, + {-0.348061,-0.399280}, + {-0.612857,0.282472}, + {-0.155041,0.177124}, + {1.564518,0.497387}, + {-0.259280,0.598564}, + {-0.330630,-0.194511}, + {-0.927641,0.683062}, + {-0.492680,0.187990}, + {-0.486909,0.556354}, + {-1.016376,0.123981}, + {0.605410,0.661383}, + {-1.259776,-0.139097}, + {0.687748,-0.124519}, + {1.076749,1.172916}, + {0.826104,0.453227}, + {0.916044,0.484496}, + {-0.220030,0.081309}, + {-0.762988,-0.501734}, + {0.156663,-0.397336}, + {-0.645976,-0.464085}, + {0.013181,-0.690831}, + {1.418278,-0.223876}, + {0.138929,0.135069}, + {0.576396,-0.082604}, + {0.341489,0.166084}, + {0.239311,0.512591}, + {-0.705057,0.281017}, + {-0.216695,0.700219}, + {-0.052454,-1.245938}, + {-0.553732,-1.127581}, + {-0.875834,0.839077}, + {0.590675,-0.603937}, + {1.115400,0.110295}, + {-0.433421,0.192051}, + {0.724311,-0.663050}, + {-0.511338,-0.678864}, + {0.319840,-0.020854}, + {-1.173155,0.013443}, + {0.379830,0.418095}, + {-1.047586,0.754616}, + {-0.458533,-0.744747}, + {0.039738,0.740735}, + {-0.448691,-1.323799}, + {-0.614500,0.274110}, + {-0.954928,1.710574}, + {-1.115993,0.162485}, + {1.193523,-0.172836}, + {-0.813587,-0.815742}, + {0.432139,-0.761635}, + {0.539046,-0.256594}, + {0.293082,0.217539}, + {0.390536,-0.019131}, + {-0.520508,-0.341834}, + {-0.124911,-0.157248}, + {-0.637428,-0.090345}, + {-1.047505,0.197182}, + {1.028592,0.057271}, + {0.228695,-0.421307}, + {0.160562,0.065647}, + {-0.125276,0.570122}, + {0.771720,-0.929429}, + {-0.885627,-0.643624}, + {0.674625,0.505683}, + {-0.361914,-0.577650}, + {0.053097,-0.825371}, + {1.336278,-0.384586}, + {0.004049,0.906965}, + {-1.072504,0.415022}, + {0.802524,-0.826920}, + {-0.955720,0.142124}, + {-0.125373,1.113202}, + {0.334120,0.836902}, + {0.835931,-0.122422}, + {1.106213,-0.047726}, + {2.296859,0.078391}, + {0.366122,-0.430429}, + {0.701139,-0.605645}, + {-0.146080,-1.767753}, + {0.016836,1.135654}, + {-0.176842,-0.909804}, + {0.161320,0.030687}, + {0.095294,-0.085024}, + {-0.777534,-0.732828}, + {-0.415510,0.843213}, + {-0.064383,1.441395}, + {-0.077757,-0.848909}, + {0.344072,-0.405862}, + {-0.685213,-0.152876}, + {2.219878,-0.147536}, + {-0.259629,-0.346784}, + {-0.154063,-0.256064}, + {-0.347575,-0.135536}, + {-0.507167,-0.471854}, + {1.053886,1.000078}, + {0.899577,0.115105}, + {-0.044331,-0.789282}, + {-0.151879,-1.288516}, + {0.121111,-1.153694}, + {1.329053,0.966325}, + {-0.678745,0.814417}, + {-0.257457,-0.282341}, + {-0.962823,-0.351230}, + {0.873445,0.133721}, + {0.627689,-0.454924}, + {-0.255754,-0.414715}, + {0.018030,1.186715}, + {-0.957481,0.875629}, + {-0.117672,-0.173647}, + {0.174636,-0.871127}, + {-0.384196,0.778462}, + {0.082789,0.383797}, + {-0.701027,-1.355462}, + {0.668719,0.695236}, + {-0.042132,2.102093}, + {1.413857,-0.300645}, + {-0.112820,-0.849034}, + {-0.612251,0.816555}, + {0.608860,0.226898}, + {-0.179368,-0.087384}, + {0.040499,0.002180}, + {-0.737672,0.256065}, + {-0.161481,0.832177}, + {1.099151,0.426534}, + {-0.235701,-0.127462}, + {-0.152026,-0.390955}, + {-0.543015,-0.478542}, + {-1.160759,0.623038}, + {-0.202691,0.593749}, + {1.786126,-0.318883}, + {1.316698,0.020550}, + {0.169104,-0.060324}, + {1.045560,-0.056788}, + {1.020056,-0.597922}, + {-1.645949,0.293017}, + {0.923375,-0.090014}, + {-0.844203,-0.218401}, + {-0.239957,0.368485}, + {-0.309986,0.239761}, + {-1.016587,-0.062435}, + {-0.767244,0.118052}, + {0.277478,0.074426}, + {0.683305,-1.041466}, + {-0.808274,-1.614546}, + {0.394355,0.811173}, + {0.796282,-1.296704}, + {-0.714204,0.137774}, + {0.196927,0.370427}, + {-0.376269,-0.542680}, + {0.791492,-0.123199}, + {0.321249,0.521318}, + {1.046344,0.661679}, + {-0.141206,-0.238853}, + {-0.383405,0.290032}, + {0.376350,0.432868}, + {-0.049260,-0.368856}, + {0.408613,-0.014061}, + {-0.326055,0.816902}, + {-0.026001,-0.589331}, + {-0.072918,0.200475}, + {0.331867,-1.316811}, + {0.435541,-0.935694}, + {0.510818,1.141595}, + {-0.190277,-1.450792}, + {0.173657,-0.279898}, + {0.438387,-0.236168}, + {-0.079822,-1.188886}, + {0.332160,-0.026150}, + {-0.156566,-0.711998}, + {1.519541,0.155118}, + {-0.252771,0.027134}, + {-0.051493,0.730522}, + {1.034388,-0.494617}, + {0.585226,-0.142609}, + {-0.056058,0.636934}, + {0.427097,-0.139863}, + {0.142636,-0.376670}, + {0.261685,-0.129577}, + {0.622429,-0.458139}, + {0.558685,-1.457037}, + {-0.302307,-0.237556}, + {0.667578,-0.893159}, + {0.394038,-0.616568}, + {-1.053062,-0.607413}, + {-0.102774,0.550373}, + {-0.151209,-0.605143}, + {0.982131,-0.044701}, + {0.872422,0.300385}, + {-1.738852,-0.042787}, + {-0.927014,0.312879}, + {1.133143,0.059571}, + {-1.447607,-0.203064}, + {0.844638,-0.610940}, + {-0.131441,-0.383945}, + {0.185690,0.504708}, + {0.873802,-0.522457}, + {-0.241741,-0.833009}, + {-0.527447,-0.384432}, + {-0.313053,0.007224}, + {-0.144519,-1.752126}, + {-0.350914,0.331914}, + {0.019446,0.830710}, + {-0.361050,0.087871}, + {0.136350,-0.729097}, + {-0.727329,-1.483267}, + {0.506054,-0.485436}, + {0.062342,0.447545}, + {0.577105,0.248545}, + {-0.160478,0.636342}, + {0.874559,0.051499}, + {0.105072,-0.821176}, + {-0.398886,0.154675}, + {-0.622607,0.598468}, + {-0.199183,-0.205099}, + {-0.450282,-0.153537}, + {0.663143,-0.304326}, + {-0.184256,-1.048931}, + {-0.162581,0.645661}, + {-1.044422,-0.455806}, + {-1.229037,-0.793770}, + {-2.194331,-0.034931}, + {0.302824,0.337893}, + {-0.190657,0.691359}, + {0.829411,0.226586}, + {-0.425507,-0.020147}, + {-0.664468,0.683717}, + {-0.671081,-0.230903}, + {-0.907480,-1.183741}, + {0.554297,-0.117632}, + {0.096878,0.871193}, + {-1.083314,0.379586}, + {-0.234206,-0.116224}, + {1.369810,0.686732}, + {-0.721421,-1.029317}, + {-0.368926,0.569493}, + {1.046382,0.740596}, + {0.360666,0.448457}, + {0.480405,0.359113}, + {-0.086104,-0.363264}, + {0.238387,0.695863}, + {-0.736684,1.072959}, + {0.386997,-0.744110}, + {-0.437168,-0.232638}, + {-1.153335,-0.780908}, + {-0.684055,0.692340}, + {0.289389,0.249867}, + {-1.698004,0.639394}, + {0.394495,0.268874}, + {-0.603894,0.330558}, + {1.253198,0.211305}, + {-0.322306,0.240516}, + {0.102897,0.083584}, + {0.309184,-1.627874}, + {-0.390228,0.139204}, + {-0.089614,0.647020}, + {-0.121180,-1.208862}, + {0.826558,-0.115660}, + {0.495726,-0.898881}, + {-0.312265,0.328451}, + {-0.575407,-0.648683}, + {-0.432874,-0.055634}, + {0.299794,-0.672465}, + {0.755398,-1.216531}, + {-0.785094,0.381940}, + {1.177524,-0.442002}, + {-0.690561,-0.399181}, + {0.280850,1.343907}, + {-0.409116,0.423859}, + {1.752878,0.134327}, + {0.051034,-0.396984}, + {0.519335,0.260097}, + {0.669303,-0.512912}, + {-0.121664,-0.181888}, + {1.193699,-0.767988}, + {1.019133,-0.321132}, + {0.967335,-0.098405}, + {1.413661,-0.166381}, + {-0.125145,0.663141}, + {0.401551,-0.358640}, + {-0.253575,0.814815}, + {-0.102327,-0.276315}, + {-0.122363,-0.012399}, + {0.113221,0.159392}, + {0.425525,-2.019792}, + {-2.296354,0.492443}, + {-0.954148,-0.237086}, + {0.238738,-0.639157}, + {-1.761694,-0.164252}, + {0.737287,0.200460}, + {-0.162938,-0.768438}, + {-0.782868,-0.626567}, + {-2.246589,-0.509916}, + {-0.310067,-0.836668}, + {-1.464033,-0.333291}, + {1.315826,-0.280998}, + {0.002046,1.347203}, + {1.070363,0.251329}, + {0.246476,0.663615}, + {-0.845820,-0.236884}, + {0.093058,0.749687}, + {-1.111095,1.211477}, + {0.009610,0.450174}, + {0.915608,0.234386}, + {0.143672,0.205552}, + {1.527516,0.145242}, + {0.460513,1.555029}, + {-0.555127,-0.285376}, + {0.145695,0.896220}, + {1.217480,-0.305496}, + {0.414556,-0.502992}, + {0.603741,-0.844504}, + {0.129219,0.575608}, + {-0.283013,1.040908}, + {-1.255234,-0.534709}, + {1.088903,0.197861}, + {-0.058756,0.425937}, + {0.123779,-1.040665}, + {0.637367,-0.271180}, + {-0.103176,-1.697012}, + {-0.158588,0.656751}, + {-0.967854,-0.951648}, + {0.086897,-0.516020}, + {-0.373714,-0.748635}, + {0.596132,-0.522697}, + {-0.983889,-0.989551}, + {-0.467885,-0.141256}, + {0.830302,0.458530}, + {-0.760114,0.632394}, + {-0.274484,1.063399}, + {0.388037,0.224930}, + {1.249109,-0.166835}, + {-0.449788,-0.325036}, + {0.042710,-0.844489}, + {0.146003,1.006131}, + {-0.220865,-0.302253}, + {1.058335,1.753412}, + {0.002717,-0.206278}, + {-0.435205,0.096155}, + {0.045458,0.308059}, + {0.985575,-0.174125}, + {0.888946,0.271600}, + {-0.928001,0.303726}, + {0.508220,0.392928}, + {1.126653,0.623124}, + {-0.026042,-0.803140}, + {-0.924908,1.178639}, + {0.420452,1.218289}, + {0.232925,-0.244339}, + {-0.786826,0.421704}, + {-1.480250,-0.437413}, + {-0.876270,-1.154740}, + {-1.039014,0.278444}, + {0.540032,-0.043074}, + {-0.333186,0.620742}, + {0.264837,0.039240}, + {-0.323505,0.012675}, + {-0.409204,-0.767399}, + {0.025022,0.921557}, + {0.331678,0.765442}, + {0.655658,0.673464}, + {0.122603,1.712084}, + {0.671768,1.118615}, + {-0.304646,-0.327486}, + {0.200620,0.635266}, + {1.151679,-0.567691}, + {0.063835,-0.149801}, + {1.857157,0.061181}, + {-0.314228,-0.969461}, + {1.172970,0.214697}, + {-0.123463,0.139130}, + {-1.037067,0.729725}, + {0.375812,-0.068514}, + {0.007778,0.344010}, + {-0.498291,0.686760}, + {-0.021774,0.153344}, + {-0.106309,0.126358}, + {-1.635683,-0.251761}, + {0.280908,0.489367}, + {-0.706807,0.816537}, + {-0.831300,-0.192401}, + {0.178349,-0.073416}, + {0.680202,-0.971835}, + {-1.256339,-0.648133}, + {0.699942,0.382164}, + {-0.150262,-0.545250}, + {-0.612851,-1.036643}, + {0.778548,0.694659}, + {0.419950,-0.302441}, + {0.364074,1.256622}, + {-0.157228,-0.261850}, + {-0.107384,-0.158219}, + {0.493916,-0.735154}, + {-0.157863,0.679501}, + {-0.238097,0.159096}, + {-0.151747,-0.515968}, + {-0.196244,0.393762}, + {0.981312,-0.958934}, + {-0.172524,0.221805}, + {-1.038868,-0.156395}, + {-0.540427,-0.434566}, + {0.143654,-0.576748}, + {1.394838,0.011972}, + {-0.567336,1.449890}, + {0.016188,-0.586559}, + {0.018122,0.164911}, + {0.282832,-0.041033}, + {0.516311,-0.903365}, + {-0.074153,0.774443}, + {0.525149,-0.511892}, + {-0.064105,0.462937}, + {-0.550807,-0.740917}, + {-0.159709,0.095051}, + {0.856954,0.712022}, + {0.184713,-0.093683}, + {0.562640,-0.866336}, + {1.091445,0.202260}, + {0.504672,-0.248524}, + {0.172117,0.391537}, + {-0.067218,-0.440004}, + {0.287740,1.212661}, + {-0.562285,-0.146228}, + {0.218122,0.047461}, + {0.593255,-0.355369}, + {-0.533896,-0.299014}, + {-0.568450,-0.278213}, + {0.203598,0.537438}, + {-0.938066,0.704581}, + {-0.917601,0.791035}, + {-0.839964,-0.649079}, + {1.307890,0.264572}, + {-0.599850,-0.634273}, + {0.460067,-0.969037}, + {-0.646018,0.708979}, + {-0.452636,0.224816}, + {0.494858,0.238132}, + {-0.011522,-1.346647}, + {0.000576,-0.737202}, + {0.100013,-0.266210}, + {1.318841,0.403066}, + {-0.639935,-0.303449}, + {0.675628,-0.063920}, + {-0.097399,0.502298}, + {1.924211,-0.661343}, + {-0.193195,-0.836120}, + {-0.879425,-1.065778}, + {-0.777720,0.991738}, + {0.449743,-0.615344}, + {-0.163401,-0.484593}, + {-0.295979,0.797219}, + {-0.293076,0.655861}, + {-0.012079,-1.170280}, + {0.217685,-0.808306}, + {0.521063,0.052078}, + {-0.051550,-0.734594}, + {-0.035872,-1.275539}, + {-0.111903,0.457933}, + {1.585142,-1.073931}, + {-0.630589,-0.097644}, + {0.196150,-0.329361}, + {0.786858,-0.651981}, + {0.353044,-0.508077}, + {0.633349,0.050938}, + {0.292792,-1.147545}, + {-1.636248,0.076500}, + {0.121149,0.667182}, + {-0.485428,0.822637}, + {0.042791,0.346486}, + {-0.406830,0.061469}, + {0.260006,0.078180}, + {0.480654,-0.228662}, + {0.069106,0.904044}, + {0.689995,-0.355703}, + {1.356396,0.165978}, + {-1.216395,-0.167056}, + {0.806751,-0.082865}, + {1.379444,0.548229}, + {0.082448,-0.566330}, + {-0.153881,-0.613327}, + {-0.400828,-1.175044}, + {0.007904,0.187198}, + {0.017020,0.469228}, + {-0.635306,0.814212}, + {-0.686244,-1.695371}, + {0.635513,-0.061291}, + {-0.425817,0.149979}, + {0.251848,-0.710921}, + {-0.046316,0.161009}, + {0.286905,-0.673584}, + {-0.816487,-0.090565}, + {-0.587562,1.125426}, + {-0.388150,-0.088164}, + {-0.855313,-1.030685}, + {0.137949,0.442570}, + {-0.500305,0.481672}, + {-0.569691,-0.277656}, + {1.232236,2.015065}, + {-0.544907,-1.314194}, + {-1.063375,-0.275894}, + {-0.061552,-0.173145}, + {0.552244,0.176811}, + {-0.276732,-0.699921}, + {-1.723753,-0.289518}, + {-1.246463,1.183601}, + {-0.500170,0.373240}, + {0.651110,0.202271}, + {-1.201287,-0.164245}, + {-0.252490,0.060805}, + {0.267841,0.166147}, + {0.217199,0.233845}, + {0.487467,1.765281}, + {-1.323439,1.017541}, + {-1.689664,0.253096}, + {0.024758,0.480120}, + {0.663608,0.503539}, + {0.951764,-0.395559}, + {0.811294,0.409032}, + {-0.687545,0.241462}, + {-0.320659,0.006277}, + {-0.239229,1.109935}, + {1.192667,0.419789}, + {0.461142,0.131372}, + {0.087449,0.030492}, + {1.724236,-1.133479}, + {-0.233717,0.474440}, + {-0.107867,-0.340221}, + {-0.260094,-0.871921}, + {1.512797,-0.186811}, + {-1.150296,0.161701}, + {1.270353,-1.064373}, + {-0.208916,-0.609819}, + {0.266445,-0.850148}, + {-0.191666,-1.143687}, + {0.624237,0.402745}, + {-0.146100,-0.313531}, + {-0.394306,-0.512183}, + {0.748664,1.567171}, + {1.172201,-0.075086}, + {-0.203625,-0.403359}, + {0.801120,0.219087}, + {0.483011,-0.186969}, + {-0.822249,0.790955}, + {-0.826600,0.057749}, + {-0.340349,-1.708476}, + {-0.612349,0.017105}, + {-0.405678,0.770708}, + {-0.882441,-0.884726}, + {-0.760047,0.956302}, + {-0.134529,-0.806649}, + {-0.616061,-0.717116}, + {-0.786351,0.960517}, + {0.995470,0.823887}, + {0.803940,-0.068840}, + {-0.780356,0.796537}, + {0.754690,0.462261}, + {0.558489,-1.826939}, + {0.565941,-0.533679}, + {-0.349220,-0.565535}, + {-0.117447,-0.033437}, + {0.306679,0.561986}, + {-0.452673,0.002558}, + {0.656129,-0.312644}, + {-0.137241,0.808405}, + {0.023718,-0.818979}, + {0.316627,0.723533}, + {0.245948,-0.220425}, + {0.018669,-0.033499}, + {-0.384480,-0.064193}, + {1.059643,1.011290}, + {0.255465,0.122262}, + {0.892933,0.377851}, + {-1.057426,-1.072620}, + {0.376262,0.020682}, + {-0.318577,-1.103330}, + {0.820800,0.258835}, + {0.084963,-0.566530}, + {-0.270657,0.173413}, + {-0.630122,0.411348}, + {-0.140339,0.070918}, + {-0.580496,1.695575}, + {0.184591,-0.255626}, + {-1.595309,0.220755}, + {-1.086653,-0.518954}, + {-0.092904,-1.828520}, + {-1.560213,-0.345541}, + {-0.107258,0.421123}, + {1.333753,0.427132}, + {0.651096,-0.307819}, + {1.547703,0.021547}, + {-0.938925,0.799421}, + {0.161495,1.637137}, + {-0.566160,0.009561}, + {0.765734,1.847262}, + {-0.099619,1.217570}, + {-1.646296,1.143879}, + {-0.341561,0.208659}, + {-0.829797,-0.078640}, + {0.230420,0.260061}, + {-1.115321,-0.415304}, + {-0.759305,1.137078}, + {0.119318,0.326539}, + {0.634494,-0.172025}, + {0.951927,1.084809}, + {-0.481045,-0.125166}, + {-0.147533,-1.237017}, + {-0.194932,0.304319}, + {-0.055354,-0.773023}, + {-0.610176,0.526057}, + {-1.442512,0.301773}, + {0.806472,0.525891}, + {0.442248,0.868214}, + {-0.735627,-0.085293}, + {-0.527279,-0.419674}, + {-0.485876,-0.318730}, + {0.619257,-0.096117}, + {0.256008,-0.511587}, + {0.402021,0.667654}, + {1.085013,0.181906}, + {-1.075699,-0.590304}, + {0.149918,0.698889}, + {1.232178,-0.974211}, + {0.299137,-0.807070}, + {-0.363717,1.920628}, + {0.520819,-1.006913}, + {0.237037,-0.181282}, + {-0.473254,0.538424}, + {-0.693209,0.205641}, + {0.196816,-1.365328}, + {1.294426,-0.457957}, + {-1.201707,0.159986}, + {-0.434547,1.602358}, + {0.640590,-1.134317}, + {0.145536,-0.201253}, + {-0.295678,-0.144970}, + {0.474340,0.506270}, + {0.626337,0.119856}, + {-0.389066,-1.331761}, + {1.112996,-0.698493}, + {0.218681,0.173533}, + {1.403960,-0.330757}, + {0.473726,0.286873}, + {-0.065860,-0.094907}, + {0.245194,-0.785259}, + {-0.737379,0.731098}, + {0.888062,0.554072}, + {1.481762,-0.047101}, + {0.422688,0.158868}, + {0.569769,-0.263568}, + {-1.225339,-0.094437}, + {-1.449739,0.636898}, + {-0.257917,-0.053649}, + {0.155706,-0.122416}, + {0.953568,0.325125}, + {-0.798452,1.472069}, + {0.052703,-0.295397}, + {0.456338,-0.736016}, + {0.529491,-0.568515}, + {-0.233975,1.120665}, + {-0.680203,-1.295243}, + {-0.466273,-0.062131}, + {-0.131288,1.168066}, + {-0.385004,-1.409355}, + {-0.314060,-0.015362}, + {-0.874063,-0.686612}, + {-0.445655,-1.003053}, + {0.928618,0.248422}, + {0.478245,-0.872451}, + {-0.240218,0.229832}, + {-0.207487,1.315485}, + {0.708097,-0.459610}, + {0.324259,-1.091280}, + {-1.452807,0.091208}, + {1.395570,-1.863330}, + {0.999160,-1.241401}, + {0.280141,-0.706033}, + {-0.925961,0.469675}, + {-0.688460,-0.963031}, + {0.119873,0.226830}, + {-0.106209,-0.158092}, + {0.677296,-0.307387}, + {0.390625,0.002007}, + {-1.651675,0.216743}, + {0.079875,0.792000}, + {0.235602,0.452420}, + {0.777284,-0.266590}, + {-0.895642,-0.021410}, + {0.254087,0.034999}, + {-0.270512,-0.127041}, + {-0.256159,-0.869917}, + {0.373497,1.048321}, + {-0.762650,-0.290650}, + {-0.578370,-0.111365}, + {-1.982232,-0.062361}, + {0.578377,-0.656604}, + {-0.468886,0.154771}, + {0.844443,1.791920}, + {0.097667,-1.339984}, + {0.210075,1.094129}, + {-0.206117,0.067388}, + {0.421055,0.203273}, + {0.584588,0.986430}, + {0.133407,-0.641132}, + {-1.170174,-0.263451}, + {-0.157218,-0.021621}, + {1.475833,-0.127775}, + {0.078896,0.799595}, + {-1.587069,-0.475999}, + {0.695471,0.483917}, + {0.025792,-0.441905}, + {1.007477,0.041037}, + {-0.181478,-0.017029}, + {0.036815,-0.111715}, + {-0.465989,0.179141}, + {0.794247,0.927431}, + {0.285622,-0.418923}, + {-0.068971,-0.305474}, + {-0.463998,-0.444865}, + {0.699853,-1.012322}, + {0.151237,1.087834}, + {-0.146684,0.233955}, + {0.567227,-0.089576}, + {-0.224722,0.477183}, + {1.199889,1.553201}, + {0.760053,0.017195}, + {0.261229,0.445578}, + {-0.705770,-1.755211}, + {0.290944,0.079387}, + {0.133894,-0.691097}, + {-0.059663,2.211638}, + {0.370996,-0.939649}, + {0.112302,1.366692}, + {0.188262,-0.356295}, + {-0.612580,0.733432}, + {0.619933,0.144186}, + {0.278577,0.110054}, + {0.225926,0.612772}, + {-0.729589,0.857299}, + {1.264619,0.408863}, + {-0.628055,-1.407078}, + {-0.514858,-0.744270}, + {0.619405,1.047669}, + {-0.199934,0.731997}, + {0.418989,-0.042346}, + {0.785841,-0.113664}, + {-0.932752,-0.678127}, + {-0.806044,0.573963}, + {0.587483,0.194597}, + {-0.103663,0.283307}, + {-0.433701,1.184546}, + {0.790999,0.223614}, + {1.419865,1.046606}, + {-0.830056,0.788822}, + {-0.242103,-0.605081}, + {-1.753848,-0.814530}, + {0.527669,0.991027}, + {-0.240201,-0.427279}, + {0.856250,0.646151}, + {1.153696,0.714506}, + {0.866539,0.692044}, + {0.203711,0.315015}, + {-0.285981,-0.182996}, + {0.789261,-0.986318}, + {-0.144656,0.102805}, + {-0.151745,-0.054796}, + {-0.093111,0.849218}, + {0.517938,0.271205}, + {0.552012,-0.102406}, + {1.085765,0.387176}, + {0.084600,1.884932}, + {-0.054731,-0.030402}, + {1.382310,-0.885943}, + {0.098738,0.889079}, + {1.144495,-0.059725}, + {-0.899532,0.664015}, + {-0.181939,0.217922}, + {0.321437,0.396019}, + {0.285473,-1.089756}, + {0.586511,0.295108}, + {-0.372205,0.500376}, + {-0.078211,0.182058}, + {0.011147,-0.495137}, + {0.896627,-0.426638}, + {-0.092586,-0.308805}, + {0.601102,1.063945}, + {0.749759,-1.427166}, + {1.055874,0.699219}, + {-0.903965,-0.438794}, + {-0.707729,0.384313}, + {-0.101038,0.921657}, + {-0.485551,0.820867}, + {0.236179,-0.929859}, + {1.125738,-0.530163}, + {0.077800,-1.861208}, + {-0.730572,0.920142}, + {-0.898268,0.339665}, + {-0.317154,0.181412}, + {-0.160429,-1.323295}, + {-0.400514,-0.563102}, + {-0.014542,0.576620}, + {-0.381432,-0.415218}, + {-0.377208,0.718852}, + {-0.705579,1.318340}, + {1.530143,-0.271100}, + {-0.221327,-0.588484}, + {-0.022733,-0.642035}, + {0.030789,-0.791981}, + {-0.766666,-0.492790}, + {-0.749544,-0.073490}, + {0.447054,-0.800807}, + {1.070489,0.825108}, + {-0.727046,0.726992}, + {-0.060446,-1.037320}, + {-0.328770,0.190905}, + {-0.128967,-0.434271}, + {-0.186546,0.312983}, + {0.935917,-0.100236}, + {-0.047536,-0.213380}, + {0.082069,-0.603080}, + {-0.913393,-0.849605}, + {-0.457231,-0.796030}, + {0.682990,0.778589}, + {0.209229,-0.807062}, + {0.272420,1.125802}, + {0.036284,1.629727}, + {0.104411,-0.167382}, + {-0.626081,-0.031098}, + {-0.351775,-1.618939}, + {0.413605,0.257989}, + {-0.370629,0.161392}, + {-0.330446,0.806375}, + {0.390219,-0.746819}, + {-0.509487,-0.047151}, + {-0.273129,-0.108304}, + {-0.319689,-0.338005}, + {0.842067,0.281057}, + {0.055884,0.234417}, + {-0.365933,0.614457}, + {-0.454615,1.448888}, + {-0.699608,-1.033875}, + {-0.372957,0.671612}, + {-0.133444,-0.030193}, + {-0.924223,0.603383}, + {-0.516276,0.204182}, + {-0.382316,-0.235633}, + {-0.187827,-1.054536}, + {-0.442085,0.354249}, + {0.622665,0.610810}, + {0.265960,-0.284553}, + {0.040194,-0.911782}, + {-0.509020,0.860569}, + {0.600634,-1.182167}, + {0.151219,0.454662}, + {-0.418144,0.065874}, + {-1.569977,1.023171}, + {0.266306,0.219226}, + {0.791286,0.244977}, + {-0.241393,0.875145}, + {-0.318656,-1.030454}, + {-0.022462,0.214741}, + {-0.619332,0.153986}, + {-1.020611,-1.628587}, + {0.479077,0.439942}, + {1.740772,1.610355}, + {0.003287,0.194352}, + {0.566085,0.121822}, + {-1.147140,0.412844}, + {1.376034,0.118976}, + {0.420202,-1.038233}, + {0.373144,0.162301}, + {0.794360,0.106407}, + {-0.962990,-0.802783}, + {0.056256,0.007095}, + {-0.708347,-0.662442}, + {-0.959655,1.323960}, + {-0.529900,0.259971}, + {1.193998,0.563030}, + {0.939263,1.103177}, + {-0.385987,0.149407}, + {-0.476455,-1.133539}, + {0.308749,0.266472}, + {-0.497402,0.161375}, + {-0.740784,0.032059}, + {-0.760730,-0.593766}, + {-0.063348,-0.060021}, + {0.633546,-1.329736}, + {0.834383,0.497996}, + {-0.600352,0.731318}, + {-0.447242,0.431888}, + {-1.343652,-0.365840}, + {0.777551,-0.685316}, + {-0.680872,-0.406050}, + {-0.586652,-0.305786}, + {-0.554828,0.022048}, + {-0.699549,-0.247367}, + {1.389279,-0.742174}, + {-0.065282,-1.308684}, + {-0.261274,-0.493450}, + {-0.733425,0.887315}, + {-0.025220,-0.501261}, + {0.241883,-0.683133}, + {-0.140739,0.262319}, + {-2.045143,-1.409459}, + {1.343072,0.855186}, + {-0.035921,-0.283506}, + {0.106737,0.720865}, + {0.406583,0.040440}, + {0.214985,1.947726}, + {0.438985,-0.798479}, + {-0.217059,0.167267}, + {1.243574,0.015551}, + {-0.125817,-0.046205}, + {-1.183831,-1.384855}, + {-0.322551,0.251363}, + {-0.722839,0.595898}, + {0.551627,-0.760119}, + {1.054220,0.065259}, + {0.591739,-0.191866}, + {0.296816,-0.332836}, + {1.165112,-0.248075}, + {0.248393,-0.545047}, + {1.311024,-0.407092}, + {0.591438,-1.621612}, + {-0.052964,-0.001681}, + {-0.298430,-0.248136}, + {0.275239,-0.088719}, + {-0.147969,-0.645551}, + {-0.505692,0.261343}, + {0.309140,0.959088}, + {0.921434,0.629677}, + {0.748760,1.088213}, + {-0.680151,-0.335191}, + {-0.613400,0.493749}, + {0.727131,-0.030512}, + {-0.379323,-1.035416}, + {-0.211766,-0.796419}, + {-0.454060,0.049283}, + {-0.049881,0.070106}, + {-0.279312,0.046965}, + {-0.397766,0.760498}, + {0.520312,-0.439711}, + {0.331968,-1.409079}, + {0.427486,0.218783}, + {1.003588,-0.080820}, + {1.556979,-0.423669}, + {0.619977,0.469522}, + {-0.045054,-0.809393}, + {-0.528064,-0.036637}, + {-0.482697,0.131513}, + {-0.460037,0.505505}, + {-0.324516,-0.389828}, + {0.460368,-0.314426}, + {-0.560330,-0.324922}, + {-0.376507,-0.059857}, + {-0.851451,-0.423302}, + {0.336302,-0.960355}, + {1.612286,-1.262715}, + {0.637618,-0.176273}, + {0.382746,0.450728}, + {0.643770,0.137805}, + {-0.321537,1.065434}, + {-0.913438,-1.344611}, + {0.123579,-0.525252}, + {-0.684321,-0.050399}, + {0.092025,-0.049197}, + {0.230247,-0.846072}, + {-0.567252,1.537805}, + {-0.113614,-0.004427}, + {0.694251,-0.089008}, + {-0.303172,-0.350574}, + {0.609402,-0.434146}, + {0.107243,-0.651101}, + {1.272207,-0.348857}, + {-0.502908,0.151282}, + {-0.145185,-1.741187}, + {0.660613,-0.230215}, + {0.178185,-0.686348}, + {1.272619,-0.158281}, + {-0.280741,0.764747}, + {0.044990,-0.769996}, + {0.417010,0.096608}, + {0.062595,1.686842}, + {2.151472,0.043530}, + {0.715346,1.734442}, + {0.098966,-0.998731}, + {0.599808,0.342824}, + {-0.343734,0.708030}, + {-0.128109,-0.806256}, + {0.761198,0.210038}, + {-0.138642,0.040832}, + {-0.062262,0.648355}, + {1.277507,0.552877}, + {-0.927193,-0.325931}, + {-0.249534,-0.771760}, + {0.521253,-0.650575}, + {0.616145,1.180146}, + {-0.318551,-0.126697}, + {-0.526436,-0.915103}, + {1.171009,1.586755}, + {-1.579776,-0.032072}, + {0.379730,-0.424383}, + {0.219217,-0.851723}, + {0.557224,0.464978}, + {-0.216519,0.253208}, + {0.972628,0.385579}, + {0.412359,0.086125}, + {0.876441,-0.274872}, + {-0.407527,-0.657947}, + {0.541719,0.812008}, + {0.772499,0.092084}, + {0.502839,0.363918}, + {0.146701,0.081139}, + {-0.007951,-0.624450}, + {-0.605555,-1.647412}, + {-0.169302,-0.077049}, + {-0.244837,-0.620332}, + {0.764241,-0.522473}, + {-1.133782,0.258060}, + {0.948375,0.016726}, + {1.587208,-0.235768}, + {0.424286,0.560435}, + {0.366718,-0.229027}, + {0.114061,-0.120273}, + {-0.032553,-0.706649}, + {-1.656256,0.469776}, + {-0.800075,0.163134}, + {0.184989,-0.490187}, + {-0.066939,0.069671}, + {-0.124030,-0.278587}, + {0.098588,-0.516323}, + {0.641825,0.433273}, + {0.039826,-1.896522}, + {0.544579,0.174252}, + {-1.136703,0.508232}, + {0.473606,-0.928168}, + {-0.262024,0.277016}, + {-0.525881,-0.940302}, + {0.774239,0.928604}, + {0.475874,-0.471899}, + {-0.803854,0.030975}, + {-0.993059,-1.988145}, + {0.006261,-0.462312}, + {0.304373,-0.219476}, + {-0.064896,0.411816}, + {-0.565623,0.410175}, + {0.451946,0.896558}, + {0.579193,-0.666237}, + {1.111956,-0.324559}, + {0.958126,0.875141}, + {-2.376995,0.139360}, + {-0.174255,-0.647183}, + {0.014742,0.174545}, + {-0.527097,-1.346987}, + {1.514308,1.010371}, + {0.148586,0.574571}, + {-0.282640,0.894507}, + {-0.099804,0.189072}, + {-0.371499,-0.000976}, + {0.094502,1.606489}, + {-0.417943,0.639646}, + {0.660216,-0.605938}, + {-0.545899,-0.550059}, + {1.076567,-0.745220}, + {0.405227,0.711701}, + {-0.366586,0.196052}, + {0.860394,0.269181}, + {-1.127270,0.202607}, + {0.136211,0.475897}, + {0.459787,0.495293}, + {0.544301,-0.482145}, + {0.365063,0.234250}, + {-0.593792,-0.434170}, + {-0.426111,-1.761006}, + {0.869614,-0.020494}, + {-0.467603,0.072709}, + {-0.324193,-0.665541}, + {0.777996,-0.277466}, + {-0.283302,0.615438}, + {-1.708614,0.792042}, + {0.621137,-0.463159}, + {0.521234,0.742400}, + {-0.133299,-0.939262}, + {-0.160119,-0.770287}, + {-0.512796,0.969515}, + {0.315453,-1.192219}, + {1.288366,0.188477}, + {0.555009,0.515260}, + {0.190975,-0.611313}, + {0.181731,0.979969}, + {1.256390,-0.748626}, + {-0.335278,-0.480621}, + {-0.671001,0.965038}, + {-0.104705,0.209754}, + {-0.085875,-1.716713}, + {-1.640847,-0.669974}, + {0.447848,-0.348934}, + {0.265837,1.298157}, + {0.752559,1.353997}, + {-1.107378,1.884381}, + {-0.974856,0.729668}, + {-0.408192,0.715443}, + {0.256093,-1.141904}, + {-1.426772,0.454018}, + {-0.379814,-0.020252}, + {0.808918,-0.270355}, + {0.032856,-0.539366}, + {-1.792033,-0.556382}, + {-0.749878,0.045814}, + {-1.284019,0.264061}, + {-0.644668,0.334991}, + {0.167439,0.463690}, + {0.781219,0.368265}, + {-0.260223,-0.044352}, + {-0.071616,-0.070425}, + {-1.084332,0.404648}, + {-1.607982,-0.417932}, + {0.755238,-0.174306}, + {0.185585,1.881097}, + {-0.015098,0.559027}, + {-0.177597,-0.752248}, + {-0.550116,-1.060073}, + {-0.358345,-0.425293}, + {0.348800,-0.817303}, + {-0.881309,-0.246413}, + {0.925273,-0.021585}, + {-0.725402,0.242012}, + {0.185628,0.275909}, + {-0.422986,1.393526}, + {0.628901,-0.118229}, + {0.317355,-0.260886}, + {0.700872,-0.179362}, + {-0.261562,-0.299310}, + {0.255547,0.459484}, + {0.874547,-0.523117}, + {1.173201,1.024590}, + {-0.996085,-0.014251}, + {-0.936499,-0.186035}, + {-0.124365,-0.515926}, + {-1.063564,-0.984708}, + {0.564578,-1.758164}, + {-0.798557,-0.294069}, + {-0.100377,0.060186}, + {-0.199967,-0.488498}, + {0.888361,-0.509741}, + {0.983519,1.571630}, + {0.112599,1.056708}, + {0.873252,0.482406}, + {0.452934,-0.285808}, + {-0.043803,-0.750535}, + {0.403150,0.892230}, + {-0.396320,-0.357763}, + {-0.332699,-0.116355}, + {0.593079,0.468945}, + {0.284203,0.714000}, + {0.215099,-0.285505}, + {-1.147423,0.160707}, + {-0.762612,1.411527}, + {0.472681,0.269305}, + {0.255840,-0.160359}, + {-0.055088,1.194371}, + {-0.698704,-0.799073}, + {-1.285369,0.675681}, + {1.004399,-0.126013}, + {-0.548650,0.989301}, + {-0.348031,0.143843}, + {0.019998,-0.340962}, + {1.023248,0.761331}, + {-0.902970,-1.223627}, + {-0.279665,0.623119}, + {-0.366014,0.496679}, + {-0.813344,-0.457467}, + {-0.372345,0.539890}, + {-0.485404,-0.267196}, + {0.536624,0.644437}, + {1.607247,0.297879}, + {0.220415,0.883121}, + {-0.610471,-0.507677}, + {0.457363,0.253781}, + {-0.258994,0.833024}, + {-0.261108,-1.096423}, + {-0.890548,-0.267881}, + {-0.514366,-0.459512}, + {0.812269,-0.123179}, + {-0.034540,0.119925}, + {-0.180841,0.846220}, + {-0.752312,-0.637519}, + {1.026199,1.242000}, + {0.197854,-1.717988}, + {0.475428,0.194479}, + {0.292648,-0.864272}, + {0.947169,-0.161454}, + {-0.464096,-0.510604}, + {1.153502,0.164372}, + {0.487626,-1.698067}, + {-0.435832,-0.248461}, + {0.986247,0.332766}, + {0.573550,0.450706}, + {0.217594,-0.594628}, + {0.411145,0.714235}, + {-0.635136,1.259112}, + {0.505637,0.257079}, + {1.088652,0.088325}, + {-0.412997,1.426823}, + {0.773139,0.811379}, + {1.222511,-1.367456}, + {0.062337,0.036862}, + {-0.941056,-0.307414}, + {-0.219902,0.345179}, + {-0.822663,-0.150728}, + {-0.830573,0.243392}, + {0.184643,-1.254941}, + {0.044543,2.065648}, + {-0.303212,0.177042}, + {-1.024625,-0.575737}, + {-1.766237,-0.128839}, + {1.166984,-1.325277}, + {0.296716,-0.350582}, + {0.108368,-0.173239}, + {0.820007,-0.685029}, + {-1.179457,-1.230915}, + {0.373694,-0.295121}, + {0.792136,0.427746}, + {0.908489,0.134038}, + {0.112420,0.145958}, + {-0.528428,-0.719873}, + {-1.018138,-0.106810}, + {0.487126,0.785684}, + {-0.459239,1.922989}, + {0.315122,-0.019843}, + {0.271436,1.009157}, + {-0.561563,-0.748185}, + {-0.823416,-0.551511}, + {-0.966122,-1.600366}, + {0.213364,-0.578518}, + {0.495633,-0.444785}, + {-0.527658,1.519762}, + {-0.069264,0.878791}, + {-0.269854,0.404970}, + {-0.610037,-0.956304}, + {0.484475,0.633773}, + {-0.168591,-0.969952}, + {0.484383,1.817719}, + {0.141585,0.111118}, + {-1.199097,-0.051283}, + {-0.528354,0.347269}, + {0.475852,0.415654}, + {0.228798,0.835716}, + {-0.253920,0.038539}, + {1.462540,-0.489890}, + {-0.104670,-0.701368}, + {-0.022712,-0.856311}, + {-1.130025,0.873925}, + {-0.019534,-0.883438}, + {-0.193835,0.406293}, + {-0.387684,0.052551}, + {1.298327,-0.709101}, + {-0.310405,0.001679}, + {-0.481614,-0.685795}, + {-1.062058,-0.520206}, + {-1.344745,-0.153656}, + {-0.831422,0.037292}, + {0.400435,1.234084}, + {0.727975,0.204297}, + {0.824147,-0.809614}, + {0.702855,-0.127743}, + {-1.649216,1.142318}, + {0.341254,0.448017}, + {-0.898656,-0.789927}, + {1.058227,-0.602215}, + {-1.095050,-0.894509}, + {-0.599427,-0.153097}, + {-0.102633,0.228645}, + {0.508210,0.665789}, + {-0.535104,0.147440}, + {-1.277860,-1.283381}, + {-0.023286,0.344266}, + {-0.632160,0.903716}, + {0.360618,-0.187216}, + {-0.390545,0.532805}, + {-0.595274,1.078196}, + {0.211172,-0.862871}, + {0.328564,-0.792903}, + {0.829098,0.198476}, + {-0.566607,1.373401}, + {-0.019308,0.285081}, + {-0.888302,0.700636}, + {0.148316,0.138057}, + {1.181460,0.019935}, + {0.392411,0.162331}, + {-0.247861,0.263792}, + {0.505014,-0.182329}, + {0.628016,1.287511}, + {0.212292,1.024624}, + {0.687431,1.089767}, + {0.564834,-0.028119}, + {0.371715,-1.099486}, + {0.357609,0.070059}, + {2.215728,0.181810}, + {0.836665,-0.244650}, + {-0.220496,0.330559}, + {0.676588,0.472829}, + {-0.829341,-0.226416}, + {0.744014,-0.881448}, + {-0.729316,-0.218085}, + {-0.984519,-0.858390}, + {-0.487788,0.244053}, + {-0.671190,-0.312322}, + {0.049124,0.288241}, + {-1.004947,0.620259}, + {-0.321884,-0.417017}, + {-0.493885,0.523531}, + {-0.059619,-0.791344}, + {-0.457605,0.691495}, + {0.170169,-0.246006}, + {1.075328,-0.540974}, + {-0.079762,0.947477}, + {-0.010670,-0.267796}, + {0.943646,0.021645}, + {-0.285628,-0.533131}, + {-0.326849,0.040866}, + {-1.421573,-0.739533}, + {1.107711,-0.003967}, + {1.000615,-0.065396}, + {0.312538,-0.117636}, + {-0.125344,-0.171464}, + {-1.212099,-0.453897}, + {0.288620,-0.519846}, + {-0.248802,-1.402444}, + {-0.310674,0.442311}, + {0.098956,0.041407}, + {-0.145050,1.286205}, + {-0.429898,0.190147}, + {-1.606072,0.685533}, + {0.367341,0.528374}, + {-0.074278,-0.544411}, + {0.109107,0.601468}, + {-0.454410,0.957520}, + {0.453384,0.097285}, + {-1.143893,0.610775}, + {1.249307,-0.776195}, + {0.494955,1.337840}, + {0.242363,0.197588}, + {-0.114836,-0.076961}, + {-0.517306,0.086171}, + {0.536084,0.234221}, + {-0.269984,-0.404274}, + {0.607933,-0.179944}, + {1.480986,0.514357}, + {-1.274472,-0.307237}, + {0.687074,1.058117}, + {-0.400117,0.313936}, + {-0.791993,-0.417857}, + {-0.561613,-0.645294}, + {0.656279,-0.373169}, + {0.740039,-0.034331}, + {-0.240484,-0.434931}, + {-0.485973,0.426967}, + {0.234931,1.122127}, + {0.391140,-0.409224}, + {0.549154,0.884721}, + {-0.915296,-0.762616}, + {0.305934,-0.771631}, + {-0.760185,0.255838}, + {0.140172,0.086197}, + {-0.136659,-1.801038}, + {-0.285519,-1.066988}, + {-0.359939,1.554395}, + {0.289408,0.825934}, + {0.461379,-0.152002}, + {-0.806281,0.378343}, + {-1.253917,-1.287774}, + {-0.911462,-0.640941}, + {0.986825,0.222918}, + {0.108762,0.707578}, + {0.028426,1.052636}, + {0.337372,0.262425}, + {-0.074310,-0.230538}, + {-0.746241,-0.364158}, + {0.184766,0.326757}, + {0.299052,0.408284}, + {0.454029,0.336521}, + {-0.418725,-0.640634}, + {-0.358958,0.325470}, + {-0.113820,1.106193}, + {0.097508,-0.640975}, + {0.004309,0.013634}, + {-0.103721,-0.180842}, + {0.500274,0.105109}, + {1.541197,0.972081}, + {0.441451,-0.455017}, + {0.040723,-0.995386}, + {0.963317,-0.421559}, + {1.402597,0.107761}, + {1.587690,0.790156}, + {-0.360062,0.069757}, + {0.272024,-0.645917}, + {0.182518,-0.169444}, + {-0.720138,0.570094}, + {-0.219343,-0.714791}, + {0.364707,0.085334}, + {1.238324,-0.048266}, + {-0.069206,0.421442}, + {-0.369665,0.405097}, + {-0.125755,1.815291}, + {1.339344,-0.722225}, + {0.212585,0.318092}, + {0.198631,-0.060546}, + {0.526265,0.353971}, + {-0.432338,0.914161}, + {-0.259149,-0.485961}, + {0.186000,-1.204080}, + {0.143559,0.179813}, + {0.174681,-0.217002}, + {-0.535888,0.862929}, + {0.138733,0.315051}, + {-0.281155,-0.621632}, + {0.825205,1.046364}, + {-1.448150,0.028607}, + {1.043647,-0.708319}, + {0.579024,-0.187058}, + {0.462025,-0.051373}, + {0.080543,-0.987185}, + {-0.422065,1.038899}, + {1.245455,0.673572}, + {0.120575,-0.872393}, + {-0.935692,-0.049482}, + {0.833592,0.112002}, + {-0.280053,-0.923684}, + {-0.352881,-0.159811}, + {0.006592,0.880995}, + {-0.334637,0.319727}, + {1.600511,0.559890}, + {-0.063299,0.518006}, + {0.767673,-0.342292}, + {0.894664,-1.056244}, + {0.218239,-1.485107}, + {1.313901,-0.284383}, + {0.416552,0.516669}, + {-0.945374,-0.353124}, + {-1.444466,-0.478877}, + {0.595701,-0.530269}, + {0.321203,-0.859422}, + {-0.202144,0.563280}, + {-0.921581,-0.435354}, + {-0.709879,-0.080659}, + {0.850755,0.425879}, + {0.371517,-0.722259}, + {-0.655815,-0.005035}, + {0.270087,0.539163}, + {-0.233616,0.091892}, + {0.062617,-0.648446}, + {0.581563,-0.013480}, + {-0.959711,2.092442}, + {-1.236567,-0.286320}, + {0.048573,-0.041422}, + {-0.491037,-1.454069}, + {1.001908,0.754578}, + {-0.301879,0.407477}, + {0.642198,0.246582}, + {0.224810,0.092193}, + {-0.272613,0.953599}, + {-0.427767,1.107148}, + {-0.212575,-0.673377}, + {0.074416,-0.040497}, + {0.889662,0.397214}, + {-0.188469,0.498567}, + {0.687591,1.144973}, + {1.150738,-0.377170}, + {-0.700195,0.414603}, + {-1.226960,-0.280948}, + {0.047836,-1.929469}, + {-0.082189,-0.056623}, + {-0.601386,-0.154564}, + {-0.462696,0.956185}, + {0.425110,0.342661}, + {-0.840692,0.701600}, + {-0.504892,0.547409}, + {0.111847,0.714410}, + {0.239928,-0.645067}, + {-0.108924,-0.190042}, + {-0.383790,0.092672}, + {-1.208346,0.551190}, + {0.603143,0.029640}, + {-1.009036,-0.200890}, + {-0.446945,-1.003718}, + {0.765485,-1.039887}, + {-0.480552,-0.196850}, + {-0.203509,-0.820593}, + {0.688553,0.072149}, + {0.703177,-0.301738}, + {0.086873,0.336471}, + {-0.087231,-0.206545}, + {0.269569,-0.857498}, + {0.233124,0.128947}, + {-0.484636,0.170069}, + {-0.537166,0.776772}, + {0.175699,-0.230826}, + {0.085410,-0.018865}, + {0.034945,-0.185273}, + {0.569387,0.834000}, + {0.947868,-0.930988}, + {-0.100640,0.458731}, + {1.002459,0.121581}, + {1.059436,-0.068274}, + {-0.421766,-0.185124}, + {0.812700,-0.879198}, + {1.381454,-0.394813}, + {0.765729,-0.434247}, + {-0.715909,-0.355391}, + {0.073886,1.283928}, + {0.489919,-0.471248}, + {0.194977,1.066605}, + {-0.578221,-0.425253}, + {-0.406449,1.355422}, + {-0.264036,-1.141037}, + {-0.684424,0.475471}, + {-0.556184,1.217787}, + {-0.098804,0.291072}, + {-2.004840,-0.218550}, + {0.675484,0.712235}, + {-0.467058,0.550342}, + {-0.743855,2.418363}, + {-0.778534,0.962859}, + {-0.835465,-0.887622}, + {0.044832,1.405487}, + {0.309662,-1.836249}, + {0.206982,-0.439087}, + {0.960534,-2.043925}, + {-0.543298,1.356592}, + {0.928993,-0.616757}, + {0.549173,0.603967}, + {-0.430636,-0.012406}, + {0.260641,0.304006}, + {0.440114,-0.450592}, + {0.231095,0.277928}, + {0.209124,-0.466697}, + {-0.960677,-1.002757}, + {1.075456,-0.462500}, + {-0.606526,0.152494}, + {-0.182662,-0.659743}, + {1.384662,-0.357479}, + {-1.330588,-1.047178}, + {0.502764,0.377201}, + {-0.247289,0.855959}, + {-0.012699,-0.113936}, + {0.364142,0.075726}, + {-0.269392,1.005615}, + {1.370532,0.307236}, + {1.142868,0.386704}, + {0.440215,-0.324471}, + {-0.033589,-0.638411}, + {-0.327272,1.068003}, + {-0.543571,-0.273416}, + {-0.365062,-0.542959}, + {1.250943,0.688743}, + {0.472615,-0.098602}, + {1.445136,0.536558}, + {0.784735,-0.170791}, + {0.064371,-0.779831}, + {0.308675,-0.603152}, + {1.586819,0.666450}, + {0.639744,-1.202155}, + {-0.627964,1.088006}, + {-0.476573,0.282566}, + {0.027772,0.994415}, + {0.334959,1.192618}, + {0.504855,0.281254}, + {0.413815,0.195150}, + {-0.592291,1.052660}, + {0.079286,-1.324581}, + {0.235540,-0.732265}, + {-0.005819,-0.171668}, + {0.067451,-0.441117}, + {0.607046,-0.160835}, + {-0.162694,0.829134}, + {0.421080,0.189770}, + {-0.116096,-0.441471}, + {-1.205497,-0.460146}, + {0.111566,0.707898}, + {-0.674216,0.010199}, + {-0.516917,-0.340492}, + {-0.253736,-0.133809}, + {0.293164,-0.493820}, + {0.094884,1.329867}, + {0.888509,0.028852}, + {0.507446,0.428109}, + {0.777171,-1.230643}, + {0.888975,-0.258522}, + {0.494596,0.073523}, + {-0.528695,-0.616262}, + {-0.133796,1.596729}, + {0.042732,0.994114}, + {0.187107,-0.683293}, + {1.709562,-0.422073}, + {-0.501284,-0.984705}, + {0.979104,0.114013}, + {0.619612,0.148485}, + {0.265311,0.436067}, + {-1.104922,0.399318}, + {-0.844686,0.364787}, + {0.045931,-1.764657}, + {0.234470,0.330008}, + {-0.745766,0.634961}, + {1.040822,-1.192880}, + {-0.924936,-0.069478}, + {-0.559008,1.068087}, + {-0.001940,-1.409943}, + {-0.963420,-0.425440}, + {-0.355644,-0.262865}, + {-0.325353,0.688031}, + {-0.505974,0.930113}, + {-0.513432,0.014631}, + {-0.641167,-0.464992}, + {0.989676,0.899411}, + {0.475176,1.152172}, + {-0.649576,-0.471232}, + {-0.544376,0.273234}, + {-1.936626,0.360009}, + {-0.788292,-0.146180}, + {0.029239,0.663837}, + {0.089389,-0.405482}, + {-1.006432,0.041522}, + {0.065737,0.170432}, + {-0.536108,0.463754}, + {0.249146,-0.505395}, + {0.371547,-0.812264}, + {-0.037906,-1.072131}, + {0.484523,-1.128252}, + {-0.715915,-0.328589}, + {-0.274512,0.228612}, + {-0.058716,0.021879}, + {0.702693,-0.158524}, + {-0.151997,0.473194}, + {-0.852896,-0.326452}, + {-0.100443,0.365915}, + {-0.955887,0.394822}, + {-0.208727,-0.344079}, + {-0.131318,0.157507}, + {0.210001,0.434525}, + {-1.062122,-0.117708}, + {-0.346687,-0.182016}, + {0.654369,-0.500059}, + {-0.307734,-0.826574}, + {0.155367,1.735056}, + {1.858707,-0.541347}, + {-0.268982,0.440984}, + {0.216965,-1.158686}, + {-0.431159,-1.260753}, + {-1.785308,-0.584553}, + {0.261771,0.584204}, + {1.451317,-0.742810}, + {-0.004668,-0.752829}, + {-0.024921,1.245290}, + {0.595504,0.565095}, + {0.960266,-0.329771}, + {0.326327,0.550239}, + {-0.863137,0.203973}, + {-0.380078,-0.435468}, + {1.090459,-0.823282}, + {-0.356638,0.283852}, + {0.682541,0.012101}, + {-0.308431,0.770005}, + {1.199072,0.069286}, + {-1.046700,1.675759}, + {-0.077715,0.534336}, + {-0.222926,0.910906}, + {0.261806,0.566523}, + {0.420022,-0.553801}, + {-1.412877,0.700632}, + {0.797401,0.323269}, + {-0.694224,0.960901}, + {0.533299,0.850659}, + {-0.991622,1.002736}, + {-0.028049,0.666471}, + {0.715754,-0.271882}, + {0.578916,0.553135}, + {0.231987,0.123384}, + {-0.109185,-1.359211}, + {-0.398565,0.173967}, + {-0.043014,-0.665217}, + {-1.225856,0.628940}, + {-0.929289,-1.132390}, + {1.603272,0.818561}, + {-0.103226,-0.692397}, + {0.141116,1.383120}, + {-0.400579,0.668820}, + {0.143826,-0.222660}, + {0.333041,-0.807693}, + {-0.320005,0.808184}, + {0.629822,-0.286580}, + {-0.772778,1.724556}, + {1.386505,0.462035}, + {-0.229246,-1.474260}, + {-0.503459,1.044767}, + {-0.250001,0.561403}, + {0.012072,-0.058950}, + {0.756583,0.503015}, + {-0.335019,-0.761904}, + {-0.682864,0.003814}, + {0.068344,0.231416}, + {0.256777,-0.369994}, + {-0.282520,-0.095213}, + {-0.187083,-0.559020}, + {-0.026183,-0.522028}, + {-0.650853,-0.769108}, + {0.035804,-0.431890}, + {0.030008,-0.399347}, + {-0.287980,-0.145851}, + {-0.677012,-0.560565}, + {-1.049641,-0.861592}, + {0.312580,0.091289}, + {-0.963485,0.211167}, + {0.287165,-0.371532}, + {0.555650,-0.838435}, + {0.395525,-0.449511}, + {0.252774,-0.490994}, + {-0.688084,-0.314271}, + {-0.402613,0.309283}, + {0.511800,-0.453051}, + {1.035475,-0.441895}, + {-0.655559,0.204947}, + {-0.683300,-0.428916}, + {0.387642,0.043918}, + {-0.179349,-0.651814}, + {-0.493107,1.155292}, + {-0.030356,0.289986}, + {0.652280,1.046866}, + {0.057809,1.266974}, + {0.215742,1.064339}, + {0.447729,-0.632852}, + {0.279966,-0.339154}, + {-0.166371,-1.026682}, + {0.421910,0.351254}, + {-0.254637,-0.154264}, + {-1.334090,-0.110719}, + {-0.566168,-1.155950}, + {-0.558998,0.207397}, + {-0.055417,0.648158}, + {-0.241039,-0.287178}, + {-0.582347,-1.040992}, + {-0.289176,0.447352}, + {0.564223,-0.500253}, + {0.200212,0.121773}, + {0.752287,0.131198}, + {-0.586207,-0.250267}, + {0.752385,-1.118821}, + {-0.454050,0.686154}, + {0.421964,-0.071049}, + {0.385670,0.105139}, + {-0.883155,0.420629}, + {0.582838,0.829220}, + {1.599990,0.302506}, + {-0.711621,-0.048242}, + {-0.769061,-0.939823}, + {-0.570805,1.221850}, + {0.746084,0.370521}, + {-1.095763,0.542099}, + {0.507870,-0.028658}, + {-0.006494,-0.140681}, + {1.123004,0.639325}, + {0.023228,-0.243014}, + {2.006419,-0.925360}, + {0.244315,0.241295}, + {0.714233,0.041423}, + {0.930361,1.159843}, + {-0.439284,-1.104778}, + {-2.044038,1.046255}, + {-0.247643,-0.295368}, + {-0.496474,-0.188701}, + {0.427399,-0.103610}, + {-0.048929,-0.755309}, + {-0.378127,-0.657410}, + {0.647217,0.149609}, + {0.628906,-1.593151}, + {-0.581867,-0.372896}, + {-0.483963,-0.772021}, + {-1.279053,-0.372171}, + {-0.505264,-0.021054}, + {-1.130825,0.247607}, + {0.329896,1.593840}, + {-0.312292,-0.619026}, + {-0.024599,0.020700}, + {-0.647591,-0.690874}, + {1.248162,1.039611}, + {-0.252032,0.173910}, + {0.311838,-0.632350}, + {-1.024234,0.131065}, + {0.035961,-1.216873}, + {0.477173,0.507557}, + {-1.295462,-0.451069}, + {-0.377181,1.110673}, + {0.706351,-0.382557}, + {-0.134564,-0.499312}, + {0.566652,-0.673370}, + {-0.967847,-0.852623}, + {-0.139758,-2.138448}, + {-0.176702,0.054714}, + {0.043205,0.100348}, + {-1.012144,-0.515393}, + {0.620692,-0.001168}, + {-0.231469,0.384359}, + {0.167537,0.294412}, + {-0.061414,-0.366999}, + {0.731633,0.876544}, + {1.154343,0.803758}, + {0.412281,0.559052}, + {-0.371725,-1.273328}, + {0.957476,-1.378973}, + {0.289512,-0.991069}, + {-0.578394,-1.421610}, + {0.015914,0.322132}, + {0.106358,-1.449675}, + {-0.069120,0.739722}, + {0.531874,-0.371638}, + {0.657279,0.323686}, + {0.037083,-0.796566}, + {1.061708,-0.965017}, + {0.413730,0.054267}, + {0.521430,1.075811}, + {0.856354,-0.905745}, + {0.373586,-0.270185}, + {0.791206,-0.986693}, + {0.729893,0.860268}, + {0.043905,-0.429560}, + {-0.656692,-1.039828}, + {0.555913,1.767401}, + {0.303388,-0.323869}, + {-0.125446,-0.255745}, + {1.117126,0.195974}, + {-0.992980,0.304440}, + {-0.382740,0.426044}, + {-0.223638,-0.152487}, + {1.023637,-0.350714}, + {0.245655,-0.157361}, + {-0.111659,-0.614165}, + {0.354600,0.026794}, + {-0.027813,0.532690}, + {0.245690,0.739772}, + {-0.504872,-0.794998}, + {-0.809269,-1.094385}, + {-1.001891,-0.480770}, + {-0.465059,0.023020}, + {0.229876,-0.151501}, + {-1.141435,-0.029146}, + {-0.937562,-0.801157}, + {-0.195200,-2.144830}, + {0.101337,0.587135}, + {0.153064,-0.325187}, + {-0.583504,-1.060043}, + {-0.098906,-0.330180}, + {-0.216563,-0.818141}, + {-0.211935,-0.707920}, + {0.636668,0.028993}, + {-0.758271,-0.108885}, + {-0.706584,0.097759}, + {1.376119,0.384825}, + {0.420516,1.213370}, + {1.030631,-0.077473}, + {-1.252726,1.002692}, + {0.487495,0.456548}, + {0.682253,0.398622}, + {0.147446,-0.079877}, + {0.722369,-0.614144}, + {0.378631,-0.601790}, + {0.075497,0.837757}, + {0.199081,0.445597}, + {0.535089,0.570803}, + {-0.122319,0.373349}, + {-0.321298,0.741177}, + {0.903177,-0.013977}, + {-0.583050,-0.924612}, + {0.066698,1.396794}, + {0.408667,0.958962}, + {-0.738580,-1.497866}, + {0.600777,-0.398895}, + {0.254742,0.347824}, + {-0.265817,0.876722}, + {0.907423,0.129822}, + {-0.114962,-0.826617}, + {-0.240360,-0.143947}, + {0.148077,-0.071668}, + {-0.212910,1.016550}, + {-0.013388,-1.067770}, + {0.046668,-0.442470}, + {0.256538,-0.318212}, + {-0.250360,1.417343}, + {-0.775082,1.038648}, + {1.220756,-0.342349}, + {-0.032158,-0.172829}, + {0.922113,0.382379}, + {1.047628,0.944538}, + {0.885199,-0.041166}, + {-1.458274,0.373000}, + {0.855979,0.373876}, + {0.431145,0.483826}, + {-0.019854,-1.320043}, + {0.213858,-0.134150}, + {-1.273584,-0.203977}, + {-0.916604,0.918129}, + {-0.768406,-1.109353}, + {-0.278667,-0.372253}, + {0.878634,0.434317}, + {-1.182409,0.691791}, + {-0.166143,0.370502}, + {-0.371636,-0.617445}, + {0.836100,-1.092805}, + {0.179593,2.209969}, + {-0.760372,-0.186876}, + {0.580655,0.070447}, + {0.637695,-1.328039}, + {-0.210008,0.169876}, + {0.107828,-1.200689}, + {0.689020,0.461975}, + {0.799638,-0.225619}, + {0.549319,0.257945}, + {-0.169926,-0.062423}, + {-1.000681,-1.230883}, + {-0.280677,-0.889594}, + {-0.365240,0.176973}, + {-0.496268,-1.327882}, + {-0.051553,1.031328}, + {-1.118158,1.437687}, + {0.069181,-0.263582}, + {0.034310,0.657226}, + {-0.665250,-0.249209}, + {-0.265277,-0.231715}, + {0.768583,-0.439151}, + {-0.516311,1.258394}, + {-1.062635,-0.480988}, + {0.768868,1.387988}, + {-0.133561,-0.253474}, + {0.174635,-0.763359}, + {0.207988,0.224757}, + {0.171049,1.245499}, + {-0.923550,1.085739}, + {0.631564,-1.467559}, + {-0.160409,0.068830}, + {-0.008023,-1.455924}, + {0.180831,-0.762764}, + {0.303099,2.221159}, + {0.032024,0.734284}, + {0.086762,-0.565552}, + {-0.273328,1.536368}, + {-0.101105,-0.703900}, + {0.023821,-0.404259}, + {0.138986,-0.943679}, + {-0.511459,0.739696}, + {-1.031153,0.329790}, + {-0.038206,-0.799769}, + {0.440881,-0.555912}, + {0.023990,-0.531059}, + {0.659228,-0.843024}, + {-0.826474,-0.770692}, + {0.946334,-1.545003}, + {0.261025,-0.113739}, + {0.048911,-1.179110}, + {0.060770,-0.859467}, + {-0.785178,-0.587693}, + {-0.381189,0.094381}, + {0.630990,-0.822901}, + {0.013473,-0.408986}, + {-1.789311,0.714900}, + {1.519795,-0.195693}, + {-0.701243,0.864168}, + {-0.915110,0.072452}, + {-1.261997,1.360065}, + {-0.163284,0.527620}, + {0.649672,-0.335824}, + {0.610109,0.962789}, + {1.048801,-0.879891}, + {-1.064425,-1.265436}, + {0.105428,-0.129546}, + {1.539402,-0.029218}, + {-0.431054,-0.384473}, + {0.440965,-1.503971}, + {-0.553600,0.461140}, + {0.432415,-0.588674}, + {0.466966,0.767686}, + {-1.282511,-0.822551}, + {-0.405750,-0.169677}, + {-0.529296,-0.256420}, + {0.333425,-0.212289}, + {0.351865,-1.052035}, + {-0.372759,-0.324327}, + {0.496838,0.426941}, + {0.521469,0.729775}, + {-0.360286,0.330552}, + {-0.939280,-0.731402}, + {-0.589460,0.375702}, + {0.473278,0.562849}, + {0.907852,0.477585}, + {-1.161415,0.674441}, + {-0.978026,0.108291}, + {-0.646718,0.244958}, + {-0.037385,-0.220525}, + {-0.453012,0.255493}, + {0.903459,-0.255742}, + {-0.099331,0.318876}, + {0.002754,-0.225539}, + {0.134105,-0.165745}, + {1.240310,-0.105975}, + {0.009197,0.949681}, + {-0.673977,0.458706}, + {0.679855,-0.534481}, + {-0.073767,0.277108}, + {0.277924,-0.047804}, + {0.415045,-0.608651}, + {0.122556,0.982192}, + {-0.446661,-0.313225}, + {1.173726,1.220580}, + {-1.593188,0.789350}, + {-1.834105,-1.079304}, + {0.107095,-0.091381}, + {1.110756,0.061581}, + {-0.917192,0.734789}, + {0.348696,-1.323831}, + {0.010933,1.090009}, + {-0.106413,-0.322089}, + {-0.860837,-0.506303}, + {0.627199,0.541836}, + {-0.139889,-0.512866}, + {0.637993,0.510208}, + {-1.167249,-0.146076}, + {-0.862119,0.394909}, + {-1.240754,0.494548}, + {-0.376744,0.672959}, + {-0.999381,0.637653}, + {-1.391600,0.390940}, + {0.955660,-0.769621}, + {0.310879,-0.798671}, + {0.408795,-0.452281}, + {-0.974719,-0.029192}, + {0.311104,0.273352}, + {0.026062,-0.858645}, + {0.556329,0.206713}, + {0.094267,-1.481594}, + {-0.356078,0.544259}, + {-0.033796,-0.245353}, + {0.203784,0.331156}, + {0.096733,2.575388}, + {-0.381793,0.290671}, + {-0.116102,-0.156839}, + {0.161793,0.594064}, + {-0.321204,-1.339815}, + {-1.090421,-0.762797}, + {0.787900,0.459478}, + {0.243785,0.940882}, + {-0.153906,0.841058}, + {-0.936971,1.541452}, + {-0.439278,-0.322908}, + {-1.066801,-0.222840}, + {0.629434,-0.352457}, + {-0.202999,0.278222}, + {-0.505916,0.969990}, + {0.396149,-0.315510}, + {-0.829205,-0.140890}, + {-0.660853,-0.447071}, + {-0.699586,0.850048}, + {-0.706088,0.377818}, + {-0.876828,0.869990}, + {0.937227,-0.354026}, + {-1.149567,-0.878271}, + {-0.807950,-0.806797}, + {-0.733349,-1.050036}, + {0.134549,-1.452923}, + {0.623023,0.412688}, + {0.119168,-1.377420}, + {0.682589,0.820573}, + {0.800743,-0.117315}, + {-0.930976,-0.305719}, + {0.007050,0.193402}, + {1.580681,0.605792}, + {0.281324,0.201371}, + {0.005740,1.007009}, + {0.993450,-0.268242}, + {0.289972,-0.080020}, + {0.206252,0.023882}, + {-0.015665,-2.024198}, + {0.371283,-1.340106}, + {-0.213033,-0.457500}, + {0.263077,-0.366399}, + {0.710898,-1.090262}, + {0.677746,-1.151681}, + {1.238201,-0.610042}, + {0.325461,-1.103737}, + {-0.980765,-0.488024}, + {-0.077484,0.774584}, + {0.496364,0.004649}, + {0.643821,1.447878}, + {-0.743024,-1.112741}, + {-0.195607,0.639318}, + {-0.080202,0.412438}, + {0.916875,0.189103}, + {-0.106268,0.390295}, + {0.715604,-0.486286}, + {0.115849,1.370489}, + {-0.576103,1.129486}, + {0.935521,-0.616187}, + {-0.914664,0.196014}, + {0.360647,0.177486}, + {0.442306,-0.048782}, + {-1.345507,0.159373}, + {-1.024007,-1.295577}, + {0.303087,-0.450638}, + {0.225152,-0.356881}, + {-0.503513,-0.770894}, + {-0.333461,-1.843134}, + {-0.432863,-0.889999}, + {-0.784493,-0.566774}, + {0.410618,0.701420}, + {0.136290,-1.037936}, + {0.145021,0.974063}, + {0.529589,0.128197}, + {-0.676674,-0.971814}, + {-0.270406,1.019808}, + {0.096367,-0.838265}, + {0.318717,-0.762441}, + {0.397090,0.756928}, + {0.648969,0.667148}, + {-0.913693,-0.162627}, + {0.119623,0.022965}, + {0.555892,0.378100}, + {0.900717,0.703179}, + {-0.046262,-0.721821}, + {-1.181653,0.505205}, + {0.465203,-0.477470}, + {0.046090,-0.627510}, + {-0.363122,-0.091161}, + {0.953653,1.039114}, + {-0.789380,-0.928026}, + {0.162396,0.803479}, + {-0.835156,-0.260672}, + {0.250119,-0.467056}, + {0.218336,0.454615}, + {0.209926,1.190928}, + {-1.178592,-0.891917}, + {0.550639,-0.793167}, + {-1.985065,-1.044282}, + {-0.196421,-0.054591}, + {0.084188,-0.363259}, + {-0.505210,-0.803844}, + {1.240644,-0.301110}, + {0.512258,-0.469191}, + {-1.549377,0.756018}, + {-0.614481,-0.080973}, + {-0.744195,-0.048617}, + {0.879512,-0.837412}, + {-1.089793,1.223308}, + {1.011531,0.192099}, + {0.335207,-0.361593}, + {0.976295,-0.603421}, + {-0.220526,-0.371096}, + {-1.002946,0.716884}, + {-0.444541,-0.037052}, + {-0.477626,0.295812}, + {-1.046918,-2.279811}, + {0.133746,-0.120300}, + {0.279460,0.397052}, + {-0.663998,0.035170}, + {1.121487,0.680845}, + {1.108689,1.142655}, + {0.380884,1.253683}, + {0.106635,-0.096270}, + {0.651713,-1.297000}, + {0.481130,-0.876693}, + {-2.086800,0.062748}, + {0.502741,0.743331}, + {-0.634120,0.417364}, + {0.332408,-1.807629}, + {0.288393,-0.248269}, + {-0.589845,0.528027}, + {-0.953016,0.010891}, + {1.215645,-1.463684}, + {0.179478,-0.118753}, + {0.304072,0.579308}, + {-0.786558,-1.384700}, + {1.545828,0.671325}, + {-1.103380,0.496542}, + {0.566262,0.207667}, + {0.168035,-0.084493}, + {-0.745029,0.787807}, + {-0.008405,0.486130}, + {-1.256400,-0.811337}, + {-0.421056,-0.997844}, + {-0.129980,-0.010057}, + {0.683615,0.299871}, + {0.171174,-0.371855}, + {0.239929,-0.288358}, + {0.736989,0.844517}, + {0.502939,-0.293006}, + {-0.078536,-0.030891}, + {0.889214,0.617627}, + {0.107697,-0.504655}, + {-0.322943,-0.180390}, + {-0.659880,-0.211751}, + {-0.425630,1.220749}, + {1.564708,1.804423}, + {-0.562868,0.198486}, + {-0.064851,-0.014952}, + {-0.685409,0.304867}, + {1.341588,0.203554}, + {0.391212,-0.841740}, + {0.700891,0.658326}, + {-0.301305,0.902339}, + {-0.046588,0.019530}, + {0.415121,-0.949705}, + {-0.410635,-0.231837}, + {0.615095,1.334066}, + {-0.067261,0.324586}, + {0.167043,-1.136141}, + {0.422422,0.696197}, + {0.584087,0.667480}, + {-0.551074,0.249301}, + {0.421860,-0.454014}, + {-0.585820,-0.664637}, + {-0.071516,0.815123}, + {-0.541864,0.195446}, + {0.866604,-1.519052}, + {-1.811300,0.473683}, + {-0.412564,0.863621}, + {-0.125827,-0.223240}, + {0.963505,0.064195}, + {0.096324,-0.017230}, + {-0.559212,0.385040}, + {-0.071234,0.362721}, + {-0.783611,-1.711285}, + {-0.466996,-0.665663}, + {-0.422348,0.153831}, + {0.031726,0.347303}, + {0.126585,0.194805}, + {1.089699,-0.115948}, + {0.261952,1.193404}, + {-0.062577,0.658827}, + {1.046650,1.250723}, + {0.343986,-0.385875}, + {0.398418,-1.112678}, + {0.397788,0.432553}, + {-0.081351,-0.869887}, + {0.115778,-1.810748}, + {1.089135,0.283668}, + {0.348676,-0.215081}, + {0.990831,0.340013}, + {-0.429526,0.150394}, + {-0.209451,-0.426354}, + {1.251426,0.387939}, + {-0.941099,-0.048392}, + {0.553432,0.490465}, + {0.820341,-0.892655}, + {-0.469979,0.215954}, + {-0.111752,-0.518634}, + {-0.322742,0.282748}, + {-0.131831,-0.096259}, + {0.928465,0.491990}, + {-0.131168,0.713177}, + {1.182858,-0.137778}, + {0.498624,0.596945}, + {-0.340255,1.333451}, + {-0.263143,-0.178530}, + {-0.853000,-0.367513}, + {0.645533,0.217256}, + {-0.222484,-0.050816}, + {-0.889767,0.961630}, + {-0.559303,-0.335849}, + {0.755808,1.224325}, + {-0.295347,-0.382986}, + {0.154238,0.489334}, + {0.806167,0.600666}, + {-1.440967,0.906005}, + {0.400307,-1.289369}, + {-1.322768,0.271201}, + {0.721328,-0.415260}, + {0.328246,0.162043}, + {1.063849,-0.169918}, + {0.661691,0.188712}, + {-0.393050,-0.106635}, + {-0.924026,-0.264599}, + {-0.379871,-0.638547}, + {1.648221,0.026247}, + {1.111263,0.149709}, + {0.176878,-1.278937}, + {0.734091,0.194270}, + {0.643210,-0.024985}, + {-0.703541,-0.377990}, + {0.786560,0.295150}, + {1.646656,-0.147934}, + {-0.361062,0.674906}, + {-0.317120,0.143807}, + {-1.310888,-0.164024}, + {0.035068,0.189815}, + {-0.787682,0.694272}, + {-0.057575,-0.198782}, + {0.037946,-1.261234}, + {0.789551,0.167209}, + {0.163492,1.280868}, + {1.486117,0.344385}, + {-0.259139,-0.046155}, + {-0.720616,-0.687107}, + {0.332266,0.269337}, + {0.677660,-0.080123}, + {0.221776,0.671525}, + {-1.286564,-1.026638}, + {-0.137566,-0.439496}, + {1.253971,-1.647977}, + {-1.082200,-0.445719}, + {-0.166409,-0.650523}, + {-0.453263,0.213402}, + {-0.017712,-0.128208}, + {-0.032769,-0.405644}, + {-0.219371,-0.017666}, + {-0.799480,-1.769117}, + {-0.532850,0.965634}, + {-0.686125,-1.467377}, + {-0.633034,-0.389067}, + {-0.150331,0.782007}, + {-0.691980,0.730198}, + {-0.597063,-0.279026}, + {0.834946,0.396175}, + {-0.078053,-0.123351}, + {-0.571384,-0.618287}, + {0.325004,0.114546}, + {0.411609,1.274331}, + {0.206788,-0.139653}, + {-1.090128,0.800625}, + {-0.412709,0.694443}, + {-0.162932,1.311011}, + {0.397417,-0.737950}, + {-0.100183,0.447697}, + {1.213408,-1.126972}, + {0.034492,0.978029}, + {-0.872335,-0.584584}, + {0.568310,0.904579}, + {-0.453700,0.703082}, + {-1.230769,0.813793}, + {-0.851555,0.357280}, + {0.604006,0.281641}, + {0.411237,0.367925}, + {-0.750405,-1.252638}, + {0.260416,0.091677}, + {0.333514,-1.104021}, + {0.782219,0.587118}, + {-0.200975,-0.528729}, + {-0.332689,-1.636132}, + {-0.415304,-0.010511}, + {-0.121022,0.354709}, + {0.994143,0.280846}, + {0.138590,-0.213242}, + {-0.193256,-0.095752}, + {-0.441602,0.259315}, + {0.948753,0.001788}, + {0.898141,-0.750677}, + {1.346054,0.626588}, + {0.381400,-0.493532}, + {-1.338972,0.327082}, + {0.220140,-0.344755}, + {0.656912,-0.469924}, + {1.263170,0.096743}, + {0.070575,-0.775336}, + {0.716447,1.747781}, + {0.298510,0.135103}, + {0.022491,0.885968}, + {0.142852,0.482053}, + {-0.434061,-0.439810}, + {0.694127,0.094622}, + {0.448201,-0.299757}, + {0.087507,0.008116}, + {0.250792,0.103017}, + {-0.059841,-0.687843}, + {-0.071647,0.860597}, + {0.728315,0.820186}, + {-0.640044,0.101480}, + {0.211384,0.028702}, + {-0.457781,0.490619}, + {-0.178352,-0.304710}, + {-0.563754,-0.733470}, + {-0.770274,0.082873}, + {-0.762355,1.140889}, + {0.797291,0.304485}, + {-0.057014,-0.903306}, + {-0.158813,0.075113}, + {-0.874554,0.299985}, + {-1.282132,-0.277777}, + {0.150378,-1.322159}, + {0.433856,-0.000391}, + {0.119086,-0.850105}, + {0.204912,0.316619}, + {-0.757190,-0.377894}, + {-0.896753,1.076560}, + {1.182092,-0.196822}, + {0.699797,0.526050}, + {0.405838,-0.496715}, + {-0.834600,-0.037964}, + {0.545939,0.047411}, + {-0.771625,0.127979}, + {0.625542,0.978054}, + {0.578050,1.339611}, + {-0.854615,-0.162544}, + {0.803070,-1.575209}, + {-0.722438,0.809655}, + {0.812986,-0.021617}, + {0.617012,0.621875}, + {-0.694562,-0.359274}, + {0.819084,0.571131}, + {0.605917,-0.877233}, + {-0.166467,-0.432090}, + {-0.763237,0.021539}, + {-1.007144,0.682364}, + {-0.012074,-1.138787}, + {-0.793479,0.734741}, + {0.950373,-0.774179}, + {0.714255,-0.444826}, + {-1.824486,-1.178179}, + {0.286283,-1.022538}, + {0.371641,0.412646}, + {1.221297,-0.075273}, + {0.513217,0.452413}, + {0.015385,-0.341663}, + {-0.926360,0.470885}, + {-0.515633,0.282595}, + {-0.876782,0.148065}, + {-0.204097,-0.416771}, + {0.581214,0.730282}, + {0.150986,-0.721883}, + {-0.919574,-0.518872}, + {-1.025393,1.032902}, + {-0.571691,-0.523905}, + {0.336729,0.277443}, + {0.077651,0.017905}, + {-0.049717,0.473017}, + {-0.410902,-0.770257}, + {-0.847206,0.198044}, + {0.356753,0.100081}, + {0.580691,0.400755}, + {0.718459,0.870265}, + {0.779366,0.466430}, + {-1.046243,-1.317550}, + {-0.248241,-0.184969}, + {0.626921,0.660065}, + {0.772665,-1.467408}, + {0.189100,0.479679}, + {-1.027175,1.032229}, + {-0.110106,-0.214123}, + {-0.434741,0.523121}, + {-0.947316,0.197282}, + {0.241363,0.711876}, + {-0.790393,-0.270092}, + {-0.264741,0.345775}, + {0.814247,-0.835493}, + {0.947799,0.460240}, + {0.505144,0.380228}, + {-0.473087,-0.638790}, + {0.543595,-0.001347}, + {-0.682112,0.627895}, + {-0.405487,0.778655}, + {0.090159,-1.164412}, + {-1.021743,-1.421425}, + {-0.149220,-0.891920}, + {0.763872,-0.387818}, + {0.447078,0.686021}, + {0.054443,0.941294}, + {0.946171,-0.217788}, + {-0.490974,1.129098}, + {0.729449,0.252452}, + {0.815682,-0.189074}, + {0.788805,-1.240450}, + {0.942122,-1.379303}, + {-0.702094,0.893805}, + {-1.031257,0.993462}, + {-0.515607,-1.598744}, + {-1.242896,0.696992}, + {0.462112,-1.234721}, + {-1.005724,0.703223}, + {0.475509,1.468536}, + {0.087152,0.401476}, + {-1.961801,0.527485}, + {-0.277783,0.792785}, + {0.499758,-0.094692}, + {0.592984,-0.740657}, + {-0.369076,-0.004060}, + {0.610104,-0.671913}, + {-0.127590,0.291879}, + {-0.769939,-0.549296}, + {-0.110371,-0.651391}, + {-0.324962,-0.638560}, + {-0.366826,1.409327}, + {0.365052,-0.587005}, + {-0.316704,-0.411182}, + {-0.769326,-0.018427}, + {0.918326,-0.205236}, + {1.455609,1.087051}, + {0.844860,-0.653147}, + {1.020463,0.280075}, + {0.559389,-0.768862}, + {-1.792332,-0.215746}, + {0.196068,-0.074482}, + {-0.613620,-0.906514}, + {-0.602302,1.210484}, + {1.537292,0.306783}, + {-0.008903,-0.974294}, + {-0.532771,-0.265199}, + {-0.018499,-0.535834}, + {-0.014195,0.748767}, + {0.353076,-0.075319}, + {0.434187,0.928206}, + {-0.355526,0.282319}, + {0.211333,0.311046}, + {-0.589182,-0.031620}, + {1.002223,0.023921}, + {-0.601628,-0.329293}, + {0.424415,0.068179}, + {-1.155585,0.516343}, + {0.515025,0.512588}, + {-0.779358,0.737289}, + {-0.532136,-0.528990}, + {0.246092,0.038006}, + {-1.225133,0.620487}, + {-0.200500,-0.297832}, + {-0.419124,-0.629269}, + {0.857102,-0.394516}, + {-0.627349,0.023525}, + {-0.480722,0.194265}, + {-0.967646,-0.289770}, + {-0.811645,0.778058}, + {-0.330038,0.486357}, + {-0.188439,0.216193}, + {0.089880,-0.920053}, + {0.123710,-0.395635}, + {0.590314,0.051432}, + {-0.400984,0.472685}, + {-0.482473,-0.081664}, + {1.021624,1.195570}, + {-0.641330,-0.310074}, + {-0.191657,-0.668057}, + {0.057035,0.868019}, + {0.161342,0.290908}, + {-0.914313,1.611466}, + {0.752373,1.180590}, + {-0.023547,1.358874}, + {-0.891893,0.622478}, + {-0.627566,-0.215932}, + {0.569484,-0.032047}, + {0.151811,0.537318}, + {0.643493,-0.211765}, + {-0.277706,0.641965}, + {-0.055308,0.040286}, + {0.133963,-0.238700}, + {-0.927043,0.438230}, + {0.737539,-1.090991}, + {-0.258609,0.790912}, + {-0.248323,-0.881598}, + {0.220905,1.051752}, + {0.439683,-0.240808}, + {-0.081260,-0.429267}, + {-0.893930,-0.301145}, + {0.216628,0.563682}, + {0.495748,-0.625961}, + {-0.484015,-1.195660}, + {-0.717614,-0.328233}, + {-0.601530,-0.572201}, + {-0.055818,0.060060}, + {0.301962,0.128367}, + {-0.314449,-0.022201}, + {-1.088724,0.633684}, + {-0.576006,0.352197}, + {-0.476385,-0.096264}, + {-1.326078,-0.103745}, + {-0.458658,-0.228827}, + {0.123811,0.703156}, + {-1.208584,0.467840}, + {0.733960,0.272324}, + {-0.531940,0.601927}, + {-0.203491,0.765397}, + {0.282851,0.489174}, + {-1.410437,0.224490}, + {-0.438276,-0.013360}, + {-0.061401,-0.259781}, + {-0.014421,-0.307778}, + {-0.475161,1.111264}, + {0.769111,0.441227}, + {0.172795,-0.268608}, + {0.979869,0.135185}, + {-0.528977,-0.205653}, + {-0.045259,0.027604}, + {0.722821,0.789841}, + {-0.039846,-0.938385}, + {0.589344,0.223276}, + {-1.022671,-0.084817}, + {0.041763,-1.074842}, + {-0.588962,0.459411}, + {0.305630,-0.951329}, + {-0.688286,-0.717012}, + {-0.239280,-0.054100}, + {0.466996,-0.578716}, + {0.515927,-0.146469}, + {0.728230,1.345576}, + {0.418004,1.320527}, + {-0.518194,0.757005}, + {0.012964,-1.615714}, + {-0.952324,-0.315730}, + {-0.857139,0.027421}, + {0.114293,0.309591}, + {-0.844651,-0.223144}, + {-0.928183,1.192097}, + {-1.023982,-0.343621}, + {-1.048939,-0.345626}, + {0.164567,0.377517}, + {0.836105,-0.111800}, + {0.071700,0.607273}, + {0.144912,0.349067}, + {0.722128,-0.075779}, + {-0.279779,-0.260383}, + {-0.049156,1.120738}, + {-0.640154,-0.228391}, + {-0.039753,0.150724}, + {-0.415397,-0.463677}, + {-0.723847,-0.209406}, + {-0.524332,-1.037805}, + {0.171327,-1.435469}, + {-0.089687,-0.415936}, + {-1.225215,0.133157}, + {-0.018497,-0.644647}, + {0.396236,-0.355851}, + {0.225700,0.899203}, + {0.287114,-0.691831}, + {0.674085,-0.073870}, + {2.000654,-0.623437}, + {-0.252822,-0.415741}, + {0.052088,0.016210}, + {-0.332988,-0.849652}, + {0.026695,-0.376094}, + {0.742096,0.969579}, + {-1.635731,0.339533}, + {-0.208349,0.686132}, + {0.828001,-0.603493}, + {-0.078836,-0.444070}, + {1.364974,0.631664}, + {-0.160620,0.335231}, + {-1.378768,-0.907673}, + {-0.293646,0.072013}, + {1.524592,-1.461770}, + {0.083610,-1.746190}, + {0.102486,0.149103}, + {0.691698,0.227990}, + {0.028614,-0.864596}, + {-0.152066,0.125449}, + {-1.205134,1.186200}, + {0.848843,-0.061847}, + {1.081665,0.049303}, + {-0.108837,-0.099148}, + {0.262042,-0.490003}, + {-0.254991,0.361463}, + {-0.477565,0.096211}, + {-0.137706,-1.119345}, + {0.538644,0.486454}, + {0.035114,0.001732}, + {-0.695087,0.063591}, + {-1.648017,0.977367}, + {-0.224997,0.395787}, + {-0.727539,-0.234162}, + {0.078225,-0.026224}, + {0.772412,-0.439717}, + {-0.403974,0.204029}, + {-1.104881,-0.012786}, + {-0.672931,-0.415948}, + {-0.863229,-2.233172}, + {1.063307,-0.258525}, + {-0.529432,-0.708843}, + {-0.176069,-1.026002}, + {-0.384993,-0.904576}, + {0.042330,-1.765663}, + {0.851313,1.091533}, + {0.180840,0.453570}, + {0.337128,0.182821}, + {1.363286,-1.181451}, + {1.137031,-0.433505}, + {-1.325181,-0.200399}, + {0.394546,0.006217}, + {0.723817,-0.068463}, + {1.050909,0.065058}, + {0.084242,-0.420440}, + {-0.238302,0.258881}, + {0.174215,-0.677729}, + {-0.711756,0.276335}, + {-0.129577,-0.515158}, + {0.866331,0.116316}, + {1.575856,0.566488}, + {0.235497,-0.285233}, + {-0.831974,-0.236821}, + {-0.817600,1.539514}, + {-0.485036,0.295694}, + {-1.575127,0.044856}, + {0.181119,0.710358}, + {-0.056993,-0.238132}, + {0.091941,0.490274}, + {0.339556,1.201109}, + {-1.241956,1.033717}, + {-0.653462,-1.105622}, + {-0.351127,0.017888}, + {-0.240821,-0.475748}, + {-0.456277,0.573568}, + {-0.419904,-1.058360}, + {0.052939,-0.291801}, + {-0.975645,0.317124}, + {-0.277843,1.312881}, + {-0.980414,-0.689515}, + {-0.328660,0.125761}, + {0.002261,0.540834}, + {0.289127,-0.906076}, + {-0.583909,0.091516}, + {-0.105622,0.534255}, + {0.498881,-1.752227}, + {-0.372611,-0.300411}, + {0.805897,1.430785}, + {1.128088,-0.203904}, + {-0.080504,-0.025175}, + {0.109551,0.071366}, + {-1.018953,0.755951}, + {0.666092,0.991101}, + {0.947680,-0.016049}, + {2.030778,-1.308712}, + {-0.536376,-0.093177}, + {-0.979295,-0.287391}, + {-0.720582,-0.666863}, + {-1.329793,-0.141597}, + {1.120330,0.296339}, + {-0.683593,-1.193189}, + {-0.890008,-0.339326}, + {0.108370,0.364104}, + {0.761248,0.181091}, + {0.852765,1.409425}, + {-0.232370,1.404779}, + {-0.951683,-0.337612}, + {-2.093378,-0.985796}, + {-0.708897,0.096981}, + {-0.369032,-0.081507}, + {0.668578,0.410819}, + {-1.449941,1.474340}, + {-0.077746,-0.719201}, + {-0.522293,-0.151163}, + {-0.458998,-0.377810}, + {-0.371088,-0.656185}, + {-0.692675,0.536793}, + {-0.856001,0.770941}, + {0.787694,-0.616170}, + {0.666946,-1.360541}, + {0.649554,-0.692776}, + {-1.149561,-0.060654}, + {-1.017696,-1.553694}, + {0.594676,-0.308209}, + {-0.414485,0.300271}, + {0.914811,-1.373936}, + {0.593489,-0.368620}, + {-0.414122,0.825231}, + {-0.946035,-0.712426}, + {-0.027283,-0.856090}, + {0.824075,-0.537887}, + {-0.670569,-1.076879}, + {1.250980,-0.782317}, + {0.225270,-0.377829}, + {0.977247,1.198198}, + {-0.255252,0.458703}, + {0.859036,2.174261}, + {-0.392631,0.739821}, + {-0.219855,0.169863}, + {0.412017,0.686208}, + {0.191456,0.548503}, + {0.762538,-0.306864}, + {-0.618637,-0.991173}, + {-0.286232,-1.189813}, + {0.409556,0.705714}, + {0.604650,-0.285883}, + {-0.037553,-0.284563}, + {-1.752832,0.885716}, + {0.662262,0.178240}, + {-0.668130,-0.398971}, + {2.333495,-0.030369}, + {0.431917,-0.014914}, + {-0.339628,-0.075137}, + {0.979382,0.620025}, + {0.024547,-0.548793}, + {-1.198934,0.571377}, + {0.089618,0.417351}, + {-0.696845,0.721676}, + {0.227661,-0.375026}, + {-0.168858,-0.092691}, + {0.407953,-0.657836}, + {0.508885,-0.088453}, + {0.062845,-0.270386}, + {-0.087209,-0.221708}, + {-1.042531,0.650343}, + {-0.637231,0.804756}, + {-0.316632,0.521297}, + {-0.284839,0.380972}, + {0.756041,0.089078}, + {0.367135,-0.050171}, + {0.673788,-0.328597}, + {-0.475960,1.277835}, + {0.050328,-0.406764}, + {-1.253687,0.528663}, + {1.121088,-0.753455}, + {0.576634,0.414912}, + {1.154879,-0.107302}, + {0.079544,0.382389}, + {0.259826,-0.087435}, + {1.064498,0.528704}, + {-0.698877,-1.021912}, + {1.273747,0.566923}, + {-0.151776,1.226809}, + {-0.116914,0.456137}, + {-0.758612,0.838042}, + {0.174788,0.207897}, + {-1.054368,-0.062673}, + {0.303920,0.414262}, + {0.444540,-1.599911}, + {-0.263430,0.748950}, + {0.673118,0.295838}, + {0.558813,-1.015097}, + {-0.182189,0.099479}, + {-0.290746,-0.204886}, + {-0.429349,-0.670610}, + {-1.054783,-0.017990}, + {0.438704,1.112183}, + {1.172061,0.466392}, + {0.572237,0.341187}, + {0.617213,-0.632464}, + {0.122765,0.496952}, + {-0.366828,0.476781}, + {0.023184,0.226708}, + {-0.410027,-1.070367}, + {-1.411039,0.798430}, + {0.635652,-1.202681}, + {1.131089,-0.782675}, + {0.310544,0.006326}, + {0.525788,-1.242739}, + {0.347988,0.586708}, + {-1.343655,1.265193}, + {0.573006,0.820707}, + {-0.145902,-0.883328}, + {0.129940,0.855404}, + {0.877836,-0.239222}, + {-0.451520,-0.558787}, + {0.326841,-1.498916}, + {-0.472055,-0.088465}, + {0.420626,0.747670}, + {0.365096,-0.779117}, + {0.779887,-1.025049}, + {0.268789,0.955912}, + {0.427846,0.416261}, + {0.351268,1.579771}, + {0.085293,-1.166684}, + {0.108972,-1.064624}, + {-0.566448,-0.214947}, + {-0.132223,-0.361406}, + {-0.136036,0.118975}, + {0.427266,0.217945}, + {0.189904,-0.598306}, + {0.020599,0.225899}, + {-1.566003,0.465088}, + {-0.151238,-0.690998}, + {0.644967,-1.305515}, + {-1.005521,0.212625}, + {-0.201626,0.124733}, + {0.712140,0.508869}, + {0.934268,0.418607}, + {1.930008,-0.584650}, + {-0.667467,1.471271}, + {0.925854,0.010608}, + {-0.540775,-0.332686}, + {-1.356718,0.347897}, + {1.008829,0.621137}, + {1.266918,-0.344629}, + {-1.128488,-0.418674}, + {0.157524,0.139078}, + {-0.080731,-1.515912}, + {0.138870,1.536295}, + {0.096079,-0.738967}, + {0.055822,0.790336}, + {0.775557,-0.154829}, + {-0.762535,-0.407425}, + {-1.166020,0.176498}, + {-0.001453,0.874596}, + {0.086572,0.749436}, + {-0.497314,1.108861}, + {1.253067,0.882093}, + {0.043620,0.847310}, + {1.124285,0.394422}, + {-0.028010,-0.424847}, + {0.502442,-0.944102}, + {-0.624064,-0.633988}, + {-1.314388,-0.197072}, + {-0.878207,1.312132}, + {0.164886,-0.109184}, + {-1.477262,-0.055125}, + {-0.030013,-0.699816}, + {-1.298661,1.409137} +}; \ No newline at end of file diff --git a/libcodec2-android/src/codec2/src/octave.c b/libcodec2-android/src/codec2/src/octave.c new file mode 100644 index 0000000..18a8517 --- /dev/null +++ b/libcodec2-android/src/codec2/src/octave.c @@ -0,0 +1,143 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: octave.c + AUTHOR......: David Rowe + DATE CREATED: April 28 2012 + + Functions to save C arrays in GNU Octave matrix format. The output text + file can be directly read into Octave using "load filename". + +\*---------------------------------------------------------------------------*/ + + +/* + Copyright (C) 2012 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . + */ + +#include +#include + +#include "octave.h" + +#ifdef ARM_MATH_CM4 +#include "Trace.h" +#endif + +#define OCTAVE_BUFSIZE 2048 + + +void flush_buffer(FILE* f, char* buffer,size_t* buf_idx_ptr) +{ +#ifdef ARM_MATH_CM4 + trace_write(buffer,*buf_idx_ptr); +#else + fwrite(buffer,*buf_idx_ptr,1,f); +#endif + *buf_idx_ptr = 0; +} + +void handle_buffer(FILE* f, char* buffer,const size_t max_buf, size_t* buf_idx_ptr, size_t l) +{ + *buf_idx_ptr += l; + if (*buf_idx_ptr > max_buf - 64) + { + flush_buffer(f, buffer,buf_idx_ptr); + } +} + +signed int printf_buffer(FILE* f, char* buffer,const size_t max_buf, size_t* buf_idx_ptr, const char *pFormat, ...) +{ + va_list ap; + signed int rc; + + va_start(ap, pFormat); + rc = vsnprintf(&buffer[*buf_idx_ptr], max_buf - *buf_idx_ptr, pFormat, ap); + va_end(ap); + if (rc>0) + { + handle_buffer(f, buffer,max_buf,buf_idx_ptr,rc); + } + return rc; +} + + +void printf_header(FILE* f, char* buffer,const size_t max_buf, size_t* buf_idx_ptr, const char *name, const char *dtype, int rows, int cols, int isFloat) +{ +#ifdef ARM_MATH_CM4 + printf_buffer(f, buffer, OCTAVE_BUFSIZE, buf_idx_ptr, "# hex: %s\n", isFloat?"true":"false"); +#endif + printf_buffer(f, buffer, OCTAVE_BUFSIZE, buf_idx_ptr, "# name: %s\n", name); + printf_buffer(f, buffer, OCTAVE_BUFSIZE, buf_idx_ptr, "# type: %s\n",dtype); + printf_buffer(f, buffer, OCTAVE_BUFSIZE, buf_idx_ptr, "# rows: %d\n", rows); + printf_buffer(f, buffer, OCTAVE_BUFSIZE, buf_idx_ptr, "# columns: %d\n", cols); +} +void octave_save_int(FILE *f, char name[], int data[], int rows, int cols) +{ + int r,c; + char buffer[OCTAVE_BUFSIZE]; + size_t buf_idx = 0; + + printf_header(f, buffer, OCTAVE_BUFSIZE, &buf_idx, name, "matrix", rows, cols, 0); + + for(r=0; r. +*/ + +#ifndef __OCTAVE__ +#define __OCTAVE__ + +#include "comp.h" + +void octave_save_int(FILE *f, char name[], int data[], int rows, int cols); +void octave_save_float(FILE *f, char name[], float data[], int rows, int cols, int col_len); +void octave_save_complex(FILE *f, char name[], COMP data[], int rows, int cols, int col_len); + +#endif diff --git a/libcodec2-android/src/codec2/src/ofdm.c b/libcodec2-android/src/codec2/src/ofdm.c new file mode 100644 index 0000000..6e27380 --- /dev/null +++ b/libcodec2-android/src/codec2/src/ofdm.c @@ -0,0 +1,1999 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: ofdm.c + AUTHORS.....: David Rowe & Steve Sampson + DATE CREATED: June 2017 + + A Library of functions that implement a PSK OFDM modem, C port of + the Octave functions in ofdm_lib.m + +\*---------------------------------------------------------------------------*/ +/* + Copyright (C) 2017-2020 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "comp.h" +#include "ofdm_internal.h" +#include "codec2_ofdm.h" +#include "filter.h" +#include "wval.h" +#include "debug_alloc.h" +#include "machdep.h" + +/* Static Prototypes */ + +static float cnormf(complex float); +static void allocate_tx_bpf(struct OFDM *); +static void deallocate_tx_bpf(struct OFDM *); +static void dft(struct OFDM *, complex float *, complex float *); +static void idft(struct OFDM *, complex float *, complex float *); +static complex float vector_sum(complex float *, int); +static int est_timing(struct OFDM *, complex float *, int, int, float *, int *, int); +static float est_freq_offset_pilot_corr(struct OFDM *, complex float *, int, int); +static int ofdm_sync_search_core(struct OFDM *); +static void ofdm_demod_core(struct OFDM *, int *); + +/* Defines */ + +#define max( a, b ) ( ((a) > (b)) ? (a) : (b) ) +#define min( a, b ) ( ((a) < (b)) ? (a) : (b) ) + +/* + * QPSK Quadrant bit-pair values - Gray Coded + */ +static const complex float qpsk[] = { + 1.0f + 0.0f * I, + 0.0f + 1.0f * I, + 0.0f - 1.0f * I, + -1.0f + 0.0f * I +}; + +static const complex float qam16[] = { + 1.0f + 1.0f * I, + 1.0f + 3.0f * I, + 3.0f + 1.0f * I, + 3.0f + 3.0f * I, + 1.0f - 1.0f * I, + 1.0f - 3.0f * I, + 3.0f - 1.0f * I, + 3.0f - 3.0f * I, + -1.0f + 1.0f * I, + -1.0f + 3.0f * I, + -3.0f + 1.0f * I, + -3.0f + 3.0f * I, + -1.0f - 1.0f * I, + -1.0f - 3.0f * I, + -3.0f - 1.0f * I, + -3.0f - 3.0f * I +}; + +/* + * These pilots are compatible with Octave version + */ +static const int8_t pilotvalues[] = { + -1,-1, 1, 1,-1,-1,-1, 1, + -1, 1,-1, 1, 1, 1, 1, 1, + 1, 1, 1,-1,-1, 1,-1, 1, + -1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1,-1, 1, 1, 1, 1, + 1,-1,-1,-1,-1,-1,-1, 1, + -1, 1,-1, 1,-1,-1, 1,-1, + 1, 1, 1, 1,-1, 1,-1, 1 +}; + +/* Local Functions ----------------------------------------------------------*/ + +static float cnormf(complex float val) { + float realf = crealf(val); + float imagf = cimagf(val); + + return realf * realf + imagf * imagf; +} + +/* + * Gray coded QPSK modulation function + */ +complex float qpsk_mod(int *bits) { + return qpsk[(bits[1] << 1) | bits[0]]; +} + +/* + * Gray coded QPSK demodulation function + * + * 01 | 00 + * ---+--- + * 11 | 10 + */ +void qpsk_demod(complex float symbol, int *bits) { + complex float rotate = symbol * cmplx(ROT45); + + bits[0] = crealf(rotate) < 0.0f; + bits[1] = cimagf(rotate) < 0.0f; +} + +complex float qam16_mod(int *bits) { + return qam16[ + (bits[3] << 3) | (bits[2] << 2) | + (bits[1] << 1) | bits[0] + ]; +} + +void qam16_demod(complex float symbol, int *bits) { + float dist[16]; + int i; + + for (i = 0; i < 16; i++) { + dist[i] = cnormf(symbol - qam16[i]); + } + + int row = 0; + float mdist = 10000.0f; + + for (i = 0; i < 16; i++) { + if (dist[i] < mdist) { + mdist = dist[i]; + row = i; + } + } + + bits[0] = row & 1; + bits[1] = (row >> 1) & 1; + bits[2] = (row >> 2) & 1; + bits[3] = (row >> 3) & 1; +} + +/* + * ------------ + * ofdm_create + * ------------ + * + * Returns OFDM data structure on success + * Return NULL on fail + * + * If you want the defaults, call this with config structure + * and the NC setting to 0. This will fill the structure with + * default values of the original OFDM modem. + */ +struct OFDM *ofdm_create(const struct OFDM_CONFIG *config) { + struct OFDM *ofdm; + float tval; + int i, j; + + ofdm = (struct OFDM *) MALLOC(sizeof (struct OFDM)); + assert(ofdm != NULL); + + if (config == NULL) { + /* Fill in default values */ + + ofdm->nc = 17; /* Number of carriers */ + ofdm->np = 1; + ofdm->ns = 8; /* Number of Symbols per modem frame */ + ofdm->ts = 0.018f; + ofdm->rs = (1.0f / ofdm->ts); /* Modulation Symbol Rate */ + ofdm->tcp = .002f; /* Cyclic Prefix duration */ + ofdm->tx_centre = 1500.0f; /* TX Carrier Frequency */ + ofdm->rx_centre = 1500.0f; /* RX Carrier Frequency */ + ofdm->fs = 8000.0f; /* Sample rate */ + ofdm->ntxtbits = 4; + ofdm->bps = 2; /* Bits per Symbol */ + ofdm->nuwbits = 5 * ofdm->bps; /* default is 5 symbols of Unique Word bits */ + ofdm->bad_uw_errors = 3; + ofdm->ftwindowwidth = 11; + ofdm->timing_mx_thresh = 0.30f; + ofdm->data_mode = 0; + ofdm->codename = "HRA_112_112"; + } else { + /* Use the users values */ + + ofdm->nc = config->nc; /* Number of carriers */ + ofdm->np = config->np; /* Number of modem Frames per Packet */ + ofdm->ns = config->ns; /* Number of Symbol frames */ + ofdm->bps = config->bps; /* Bits per Symbol */ + ofdm->ts = config->ts; + ofdm->tcp = config->tcp; /* Cyclic Prefix duration */ + ofdm->tx_centre = config->tx_centre; /* TX Centre Audio Frequency */ + ofdm->rx_centre = config->rx_centre; /* RX Centre Audio Frequency */ + ofdm->fs = config->fs; /* Sample Frequency */ + ofdm->rs = config->rs; /* Symbol Rate */ + ofdm->ntxtbits = config->txtbits; + ofdm->nuwbits = config->nuwbits; + ofdm->bad_uw_errors = config->bad_uw_errors; + ofdm->ftwindowwidth = config->ftwindowwidth; + ofdm->timing_mx_thresh = config->timing_mx_thresh; + ofdm->data_mode = config->data_mode; + ofdm->codename = config->codename; + } + + ofdm->rs = (1.0f / ofdm->ts); /* Modulation Symbol Rate */ + ofdm->m = (int) (ofdm->fs / ofdm->rs); /* 700D: 144 */ + ofdm->ncp = (int) (ofdm->tcp * ofdm->fs); /* 700D: 16 */ + ofdm->inv_m = (1.0f / (float) ofdm->m); + + /* basic sanity checks */ + assert((int)floorf(ofdm->fs / ofdm->rs) == ofdm->m); + assert((ofdm->data_mode == 0) || (ofdm->data_mode == 1)); + + /* Copy constants into states */ + + ofdm->config.tx_centre = ofdm->tx_centre; + ofdm->config.rx_centre = ofdm->rx_centre; + ofdm->config.fs = ofdm->fs; + ofdm->config.rs = ofdm->rs; + ofdm->config.ts = ofdm->ts; + ofdm->config.tcp = ofdm->tcp; + ofdm->config.timing_mx_thresh = ofdm->timing_mx_thresh; + ofdm->config.nc = ofdm->nc; + ofdm->config.ns = ofdm->ns; + ofdm->config.np = ofdm->np; + ofdm->config.bps = ofdm->bps; + ofdm->config.nuwbits = ofdm->nuwbits; + ofdm->config.txtbits = ofdm->ntxtbits; + ofdm->config.bad_uw_errors = ofdm->bad_uw_errors; + ofdm->config.ftwindowwidth = ofdm->ftwindowwidth; + ofdm->config.data_mode = ofdm->data_mode; + ofdm->config.codename = ofdm->codename; + + /* Calculate sizes from config param */ + + ofdm->bitsperframe = (ofdm->ns - 1) * (ofdm->nc * ofdm->bps); // 238 for nc = 17 + ofdm->bitsperpacket = ofdm->np * ofdm->bitsperframe; + ofdm->tpacket = (float)(ofdm->np * ofdm->ns) * (ofdm->tcp + ofdm->ts); /* time for one packet */ + ofdm->rowsperframe = ofdm->bitsperframe / (ofdm->nc * ofdm->bps); + ofdm->samplespersymbol = (ofdm->m + ofdm->ncp); + ofdm->samplesperframe = ofdm->ns * ofdm->samplespersymbol; + ofdm->max_samplesperframe = ofdm->samplesperframe + (ofdm->samplespersymbol / 4); + ofdm->nrxbuf = (3 * ofdm->samplesperframe) + (3 * ofdm->samplespersymbol); + + ofdm->pilot_samples = (complex float *) MALLOC(sizeof (complex float) * ofdm->samplespersymbol); + assert(ofdm->pilot_samples != NULL); + + ofdm->rxbuf = (complex float *) MALLOC(sizeof (complex float) * ofdm->nrxbuf); + assert(ofdm->rxbuf != NULL); + + ofdm->pilots = (complex float *) MALLOC(sizeof (complex float) * (ofdm->nc + 2)); + assert(ofdm->pilots != NULL); + + /* + * rx_sym is a 2D array of variable size + * + * allocate rx_sym row storage. It is a pointer to a pointer + */ + ofdm->rx_sym = MALLOC(sizeof (complex float) * (ofdm->ns + 3)); + assert(ofdm->rx_sym != NULL); + + /* allocate rx_sym column storage */ + + for (i = 0; i < (ofdm->ns + 3); i++) { + ofdm->rx_sym[i] = (complex float *) MALLOC(sizeof(complex float) * (ofdm->nc + 2)); + assert(ofdm->rx_sym[i] != NULL); + } + + /* The rest of these are 1D arrays of variable size */ + + ofdm->rx_np = MALLOC(sizeof (complex float) * (ofdm->rowsperframe * ofdm->nc)); + assert(ofdm->rx_np != NULL); + + ofdm->rx_amp = MALLOC(sizeof (float) * (ofdm->rowsperframe * ofdm->nc)); + assert(ofdm->rx_amp != NULL); + + ofdm->aphase_est_pilot_log = MALLOC(sizeof (float) * (ofdm->rowsperframe * ofdm->nc)); + assert(ofdm->aphase_est_pilot_log != NULL); + + /* set up Unique Word */ + ofdm->tx_uw = MALLOC(sizeof (uint8_t) * ofdm->nuwbits); + assert(ofdm->tx_uw != NULL); + + for (i = 0; i < ofdm->nuwbits; i++) { + ofdm->tx_uw[i] = 0; + } + + /* Null pointers to unallocated buffers */ + ofdm->tx_bpf = NULL; + + /* store complex BPSK pilot symbols */ + + assert(sizeof (pilotvalues) >= (ofdm->nc + 2) * sizeof (int8_t)); + + /* There are only 64 pilot values available */ + + for (i = 0; i < (ofdm->nc + 2); i++) { + ofdm->pilots[i] = ((float) pilotvalues[i]) + 0.0f * I; + } + + /* carrier tables for up and down conversion */ + + ofdm->doc = (TAU / (ofdm->fs / ofdm->rs)); + tval = ((float) ofdm->nc / 2.0f); + ofdm->tx_nlower = roundf((ofdm->tx_centre / ofdm->rs) - tval) - 1.0f; + ofdm->rx_nlower = roundf((ofdm->rx_centre / ofdm->rs) - tval) - 1.0f; + + for (i = 0; i < ofdm->nrxbuf; i++) { + ofdm->rxbuf[i] = 0.0f; + } + + for (i = 0; i < (ofdm->ns + 3); i++) { + for (j = 0; j < (ofdm->nc + 2); j++) { + ofdm->rx_sym[i][j] = 0.0f; + } + } + + for (i = 0; i < ofdm->rowsperframe * ofdm->nc; i++) { + ofdm->rx_np[i] = 0.0f; + } + + for (i = 0; i < ofdm->rowsperframe; i++) { + for (j = 0; j < ofdm->nc; j++) { + ofdm->aphase_est_pilot_log[ofdm->nc * i + j] = 0.0f; + ofdm->rx_amp[ofdm->nc * i + j] = 0.0f; + } + } + + /* default settings of options and states */ + + ofdm->verbose = 0; + ofdm->timing_en = true; + ofdm->foff_est_en = true; + ofdm->phase_est_en = true; + ofdm->phase_est_bandwidth = high_bw; + ofdm->phase_est_bandwidth_mode = AUTO_PHASE_EST; + + ofdm->coarse_foff_est_hz = 0.0f; + ofdm->foff_est_gain = 0.1f; + ofdm->foff_est_hz = 0.0f; + ofdm->sample_point = 0; + ofdm->timing_est = 0; + ofdm->timing_valid = 0; + ofdm->timing_mx = 0.0f; + ofdm->nin = ofdm->samplesperframe; + ofdm->mean_amp = 0.0f; + ofdm->foff_metric = 0.0f; + + /* + * Unique Word symbol placement. Note we need to group the UW + * bits so they fit into symbols. The LDPC decoder works on + * symbols so we can't break up any symbols into UW/payload bits. + */ + ofdm->uw_ind = MALLOC(sizeof (int) * ofdm->nuwbits); + assert(ofdm->uw_ind != NULL); + + ofdm->uw_ind_sym = MALLOC(sizeof (int) * (ofdm->nuwbits / ofdm->bps)); + assert(ofdm->uw_ind_sym != NULL); + + /* + * The Unique Word is placed in different indexes based on + * the number of carriers requested. + */ + int nuwsyms = ofdm->nuwbits / ofdm->bps; + for (i = 0, j = 0; i < nuwsyms; i++, j += ofdm->bps) { + int val = floorf((i + 1) * (ofdm->nc + 1) / ofdm->bps); + + ofdm->uw_ind_sym[i] = val; // symbol index + + for (int b = 0; b < ofdm->bps ; b++) { + ofdm->uw_ind[j + b] = (val * ofdm->bps) + b; + } + } + + // work out how many frames UW is spread over + int symsperframe = ofdm->bitsperframe / ofdm->bps; + ofdm->nuwframes = (int) ceilf((float)ofdm->uw_ind_sym[nuwsyms-1]/symsperframe); + + ofdm->tx_uw_syms = MALLOC(sizeof (complex float) * (ofdm->nuwbits / ofdm->bps)); + assert(ofdm->tx_uw_syms != NULL); + + for (i = 0; i < (ofdm->nuwbits / ofdm->bps); i++) { + ofdm->tx_uw_syms[i] = 1.0f; // qpsk_mod(0:0) + } + + /* sync state machine */ + + ofdm->sync_state = search; + ofdm->last_sync_state = search; + + ofdm->uw_errors = 0; + ofdm->sync_counter = 0; + ofdm->frame_count = 0; + ofdm->sync_start = false; + ofdm->sync_end = false; + ofdm->sync_mode = autosync; + ofdm->modem_frame = 0; + + /* create the OFDM pilot time-domain waveform */ + + complex float *temp = MALLOC(sizeof (complex float) * ofdm->m); + assert(temp != NULL); + + idft(ofdm, temp, ofdm->pilots); + + /* + * pilot_samples is 160 samples, but timing and freq offset est + * were found by experiment to work better without a cyclic + * prefix, so we uses zeroes instead. + */ + + /* zero out Cyclic Prefix (CP) time-domain values */ + + for (i = 0; i < ofdm->ncp; i++) { + ofdm->pilot_samples[i] = 0.0f; + } + + /* Now copy the whole thing after the above */ + + for (i = ofdm->ncp, j = 0; j < ofdm->m; i++, j++) { + ofdm->pilot_samples[i] = temp[j]; + } + + FREE(temp); /* finished with temp */ + + /* calculate constant used to normalise timing correlation maximum */ + + float acc = 0.0f; + + for (i = 0; i < ofdm->samplespersymbol; i++) { + acc += cnormf(ofdm->pilot_samples[i]); + } + + ofdm->timing_norm = ofdm->samplespersymbol * acc; + ofdm->clock_offset_counter = 0; + ofdm->sig_var = ofdm->noise_var = 1.0f; + ofdm->tx_bpf_en = false; + ofdm->dpsk_en = false; + + return ofdm; /* Success */ +} + +static void allocate_tx_bpf(struct OFDM *ofdm) { + ofdm->tx_bpf = MALLOC(sizeof(struct quisk_cfFilter)); + assert(ofdm->tx_bpf != NULL); + + /* Transmit bandpass filter; complex coefficients, center frequency */ + + quisk_filt_cfInit(ofdm->tx_bpf, filtP550S750, sizeof (filtP550S750) / sizeof (float)); + quisk_cfTune(ofdm->tx_bpf, ofdm->tx_centre / ofdm->fs); +} + +static void deallocate_tx_bpf(struct OFDM *ofdm) { + assert(ofdm->tx_bpf != NULL); + quisk_filt_destroy(ofdm->tx_bpf); + FREE(ofdm->tx_bpf); + ofdm->tx_bpf = NULL; +} + +void ofdm_destroy(struct OFDM *ofdm) { + int i; + + if (ofdm->tx_bpf) { + deallocate_tx_bpf(ofdm); + } + + FREE(ofdm->pilot_samples); + FREE(ofdm->rxbuf); + FREE(ofdm->pilots); + + for (i = 0; i < (ofdm->ns + 3); i++) { /* 2D array */ + FREE(ofdm->rx_sym[i]); + } + + FREE(ofdm->rx_sym); + FREE(ofdm->rx_np); + FREE(ofdm->rx_amp); + FREE(ofdm->aphase_est_pilot_log); + FREE(ofdm->tx_uw); + FREE(ofdm->tx_uw_syms); + FREE(ofdm->uw_ind); + FREE(ofdm->uw_ind_sym); + FREE(ofdm); +} + +/* + * Convert frequency domain into time domain + * + * This algorithm was optimized for speed + */ +static void idft(struct OFDM *ofdm, complex float *result, complex float *vector) { + int row, col; + + result[0] = 0.0f; + + for (col = 0; col < (ofdm->nc + 2); col++) { + result[0] += vector[col]; // cexp(j0) == 1 + } + + result[0] *= ofdm->inv_m; + + for (row = 1; row < ofdm->m; row++) { + complex float c = cmplx(ofdm->tx_nlower * ofdm->doc *row); + complex float delta = cmplx(ofdm->doc * row); + + result[row] = 0.0f; + + for (col = 0; col < (ofdm->nc + 2); col++) { + result[row] += (vector[col] * c); + c *= delta; + } + + result[row] *= ofdm->inv_m; + } +} + +/* + * Convert time domain into frequency domain + * + * This algorithm was optimized for speed + */ +static void dft(struct OFDM *ofdm, complex float *result, complex float *vector) { + int row, col; + + for (col = 0; col < (ofdm->nc + 2); col++) { + result[col] = vector[0]; // conj(cexp(j0)) == 1 + } + + for (col = 0; col < (ofdm->nc + 2); col++) { + float tval = (ofdm->rx_nlower + col) * ofdm->doc; + complex float c = cmplxconj(tval); + complex float delta = c; + + for (row = 1; row < ofdm->m; row++) { + result[col] += (vector[row] * c); + c *= delta; + } + } +} + +static complex float vector_sum(complex float *a, int num_elements) { + complex float sum = 0.0f; + int i; + + for (i = 0; i < num_elements; i++) { + sum += a[i]; + } + + return sum; +} + + +/* + * Correlates the OFDM pilot symbol samples with a window of received + * samples to determine the most likely timing offset. Combines two + * frames pilots so we need at least Nsamperframe+M+Ncp samples in rx. + * + * Can be used for acquisition (coarse timing), and fine timing. + * + * Breaks when freq offset approaches +/- symbol rate (e.g + * +/- 25 Hz for 700D). + */ +static int est_timing(struct OFDM *ofdm, complex float *rx, int length, + int fcoarse, float *timing_mx, int *timing_valid, int step) { + complex float corr_st, corr_en; + int Ncorr = length - (ofdm->samplesperframe + ofdm->samplespersymbol); + float corr[Ncorr]; + int i, j; + float acc = 0.0f; + + for (i = 0; i < length; i++) { + acc += cnormf(rx[i]); + } + + float av_level = 1.0f/(2.0f * sqrtf(ofdm->timing_norm * acc / length) + 1E-12f); + + /* precompute the freq shift multiplied by pilot samples outside of main loop */ + + PROFILE_VAR(wvecpilot); + PROFILE_SAMPLE(wvecpilot); + + complex float wvec_pilot[ofdm->samplespersymbol]; + + switch(fcoarse) { + case -40: + for (j = 0; j < ofdm->samplespersymbol; j++) + wvec_pilot[j] = conjf(ofdm_wval[j]*ofdm->pilot_samples[j]); + break; + case 0: + for (j = 0; j < ofdm->samplespersymbol; j++) + wvec_pilot[j] = conjf(ofdm->pilot_samples[j]); + break; + case 40: + for (j = 0; j < ofdm->samplespersymbol; j++) + wvec_pilot[j] = ofdm_wval[j]*conjf(ofdm->pilot_samples[j]); + break; + default: + assert(0); + } + + /* use of __REAL__ provides a speed in increase of 10ms/frame during acquisition, however complex + is fast enough for real time operation */ + +#if defined(__EMBEDDED__) && defined(__REAL__) + float rx_real[length]; + float wvec_pilot_real[ofdm->samplespersymbol]; + float wvec_pilot_imag[ofdm->samplespersymbol]; + + for (i = 0; i < length; i++) { + rx_real[i] = crealf(rx[i]); + } + + for (i = 0; i < ofdm->samplespersymbol; i++) { + wvec_pilot_real[i] = crealf(wvec_pilot[i]); + wvec_pilot_imag[i] = cimagf(wvec_pilot[i]); + } + +#endif + PROFILE_SAMPLE_AND_LOG2(wvecpilot, " wvecpilot"); + PROFILE_VAR(corr_start); + PROFILE_SAMPLE(corr_start); + + for (i = 0; i < Ncorr; i += step) { + corr_st = 0.0f; + corr_en = 0.0f; + +#ifdef __EMBEDDED__ +#ifdef __REAL__ + float re,im; + + arm_dot_prod_f32(&rx_real[i], wvec_pilot_real, ofdm->samplespersymbol, &re); + arm_dot_prod_f32(&rx_real[i], wvec_pilot_imag, ofdm->samplespersymbol, &im); + corr_st = re + im * I; + + arm_dot_prod_f32(&rx_real[i+ ofdm->samplesperframe], wvec_pilot_real, ofdm->samplespersymbol, &re); + arm_dot_prod_f32(&rx_real[i+ ofdm->samplesperframe], wvec_pilot_imag, ofdm->samplespersymbol, &im); + corr_en = re + im * I; +#else + float re,im; + + arm_cmplx_dot_prod_f32(&rx[i], wvec_pilot, ofdm->samplespersymbol, &re, &im); + corr_st = re + im * I; + + arm_cmplx_dot_prod_f32(&rx[i+ ofdm->samplesperframe], wvec_pilot, ofdm->samplespersymbol, &re, &im); + corr_en = re + im * I; +#endif +#else + for (j = 0; j < ofdm->samplespersymbol; j++) { + int ind = i + j; + + corr_st = corr_st + (rx[ind ] * wvec_pilot[j]); + corr_en = corr_en + (rx[ind + ofdm->samplesperframe] * wvec_pilot[j]); + } +#endif + corr[i] = (cabsf(corr_st) + cabsf(corr_en)) * av_level; + } + + PROFILE_SAMPLE_AND_LOG2(corr_start, " corr"); + + /* find the max magnitude and its index */ + + int timing_est = 0; + *timing_mx = 0.0f; + + for (i = 0; i < Ncorr; i+=step) { + if (corr[i] > *timing_mx) { + *timing_mx = corr[i]; + timing_est = i; + } + } + + // only declare timing valid if there are enough samples in rxbuf to demodulate a frame + *timing_valid = (cabsf(rx[timing_est]) > 0.0) && (*timing_mx > ofdm->timing_mx_thresh); + + if (ofdm->verbose > 2) { + fprintf(stderr, " av_level: %f max: %f timing_est: %d timing_valid: %d\n", (double) av_level, + (double) *timing_mx, timing_est, *timing_valid); + } + + return timing_est; +} + +/* + * Determines frequency offset at current timing estimate, used for + * coarse freq offset estimation during acquisition. Works up to +/- + * the symbol rate, e.g. +/- 25Hz for the FreeDV 700D configuration. + */ +static float est_freq_offset_pilot_corr(struct OFDM *ofdm, complex float *rx, int timing_est, int fcoarse) { + int st = -20; int en = 20; float foff_est = 0.0f; float Cabs_max = 0.0f; + + /* precompute the freq shift multiplied by pilot samples outside of main loop */ + + complex float wvec_pilot[ofdm->samplespersymbol]; + int j; + + switch(fcoarse) { + case -40: + for (j = 0; j < ofdm->samplespersymbol; j++) + wvec_pilot[j] = conjf(ofdm_wval[j]*ofdm->pilot_samples[j]); + break; + case 0: + for (j = 0; j < ofdm->samplespersymbol; j++) + wvec_pilot[j] = conjf(ofdm->pilot_samples[j]); + break; + case 40: + for (j = 0; j < ofdm->samplespersymbol; j++) + wvec_pilot[j] = ofdm_wval[j]*conjf(ofdm->pilot_samples[j]); + break; + default: + assert(0); + } + + // sample sum of DFT magnitude of correlated signals at each freq offset and look for peak + for (int f = st; f < en; f++) { + complex float corr_st = 0.0f; + complex float corr_en = 0.0f; + float tmp = TAU * f / ofdm->fs; + complex float delta = cmplxconj(tmp); + complex float w = cmplxconj(0.0f); + int i; + + for (i = 0; i < ofdm->samplespersymbol; i++) { + // "mix" down (correlate) the pilot sequences from frame with 0 Hz offset pilot samples + complex float csam = wvec_pilot[i] * w; + int est = timing_est + i; + + corr_st += rx[est ] * csam; + corr_en += rx[est + ofdm->samplesperframe] * csam; + w = w * delta; + } + + float Cabs = cabsf(corr_st) + cabsf(corr_en); + + if (Cabs > Cabs_max) { + Cabs_max = Cabs; + foff_est = f; + } + } + + ofdm->foff_metric = 0.0f; // not used in this version of freq est algorithm + + if (ofdm->verbose > 2) { + fprintf(stderr, "cabs_max: %f foff_est: %f\n", (double) Cabs_max, (double) foff_est); + } + + return foff_est; +} + +/* + * ---------------------------------------------- + * ofdm_txframe - modulates one frame of symbols + * ---------------------------------------------- + */ +void ofdm_txframe(struct OFDM *ofdm, complex float *tx, complex float *tx_sym_lin) { + complex float aframe[ofdm->np * ofdm->ns][ofdm->nc + 2]; + complex float asymbol[ofdm->m]; + complex float asymbol_cp[ofdm->samplespersymbol]; + int i, j, k, m; + + /* initialize aframe to complex zero */ + + for (i = 0; i < (ofdm->np * ofdm->ns); i++) { + for (j = 0; j < (ofdm->nc + 2); j++) { + aframe[i][j] = 0.0f; + } + } + + /* + * Place symbols in multi-carrier frame with pilots + * This will place boundary values of complex zero around data + */ + int s = 0; + for (int r = 0; r < ofdm->np*ofdm->ns; r++) { + + if ((r % ofdm->ns) == 0) { + /* copy in a row of complex pilots to first row of each frame */ + for (i = 0; i < (ofdm->nc + 2); i++) { + aframe[r][i] = ofdm->pilots[i]; + } + } + else { + /* copy in the Nc complex data symbols with [0 Nc 0] or (Nc + 2) total */ + for (j = 1; j < (ofdm->nc + 1); j++) { + aframe[r][j] = tx_sym_lin[s++]; + if (ofdm->dpsk_en == true) { + aframe[r][j] *= aframe[r-1][j]; + } + } + } + } + + /* OFDM up-convert symbol by symbol so we can add CP */ + + for (i = 0, m = 0; i < (ofdm->np * ofdm->ns); i++, m += ofdm->samplespersymbol) { + idft(ofdm, asymbol, aframe[i]); + + /* Copy the last Ncp samples to the front */ + + for (j = (ofdm->m - ofdm->ncp), k = 0; j < ofdm->m; j++, k++) { + asymbol_cp[k] = asymbol[j]; + } + + /* Now copy the all samples for this row after it */ + + for (j = ofdm->ncp, k = 0; k < ofdm->m; j++, k++) { + asymbol_cp[j] = asymbol[k]; + } + + /* Now move row to the tx output */ + + for (j = 0; j < ofdm->samplespersymbol; j++) { + tx[m + j] = asymbol_cp[j]; + } + } + + /* optional Tx Band Pass Filter */ + + if (ofdm->tx_bpf_en == true) { + assert(ofdm->tx_bpf != NULL); + complex float tx_filt[ofdm->samplesperframe]; + + quisk_ccfFilter(tx, tx_filt, ofdm->samplesperframe, ofdm->tx_bpf); + memmove(tx, tx_filt, ofdm->samplesperframe * sizeof (complex float)); + } +} + +struct OFDM_CONFIG *ofdm_get_config_param(struct OFDM *ofdm) { return &ofdm->config; } +int ofdm_get_nin(struct OFDM *ofdm) {return ofdm->nin;} +int ofdm_get_samples_per_frame(struct OFDM *ofdm) { return ofdm->samplesperframe;} +int ofdm_get_samples_per_packet(struct OFDM *ofdm) { return ofdm->samplesperframe*ofdm->np;} +int ofdm_get_max_samples_per_frame(struct OFDM *ofdm) {return ofdm->max_samplesperframe; } +int ofdm_get_bits_per_frame(struct OFDM *ofdm) {return ofdm->bitsperframe; } +int ofdm_get_bits_per_packet(struct OFDM *ofdm) {return ofdm->bitsperpacket; } +void ofdm_set_verbose(struct OFDM *ofdm, int level) { ofdm->verbose = level; } + +void ofdm_set_timing_enable(struct OFDM *ofdm, bool val) { + ofdm->timing_en = val; + + if (ofdm->timing_en == false) { + /* manually set ideal timing instant */ + + ofdm->sample_point = (ofdm->ncp - 1); + } +} + +int ofdm_get_phase_est_bandwidth_mode(struct OFDM *ofdm) { + return ofdm->phase_est_bandwidth_mode; /* int version of enum */ +} + +void ofdm_set_phase_est_bandwidth_mode(struct OFDM *ofdm, int val) { + assert((val == AUTO_PHASE_EST) || (val == LOCKED_PHASE_EST)); + ofdm->phase_est_bandwidth_mode = val; +} + +void ofdm_set_foff_est_enable(struct OFDM *ofdm, bool val) { + ofdm->foff_est_en = val; +} + +void ofdm_set_phase_est_enable(struct OFDM *ofdm, bool val) { + ofdm->phase_est_en = val; +} + +void ofdm_set_off_est_hz(struct OFDM *ofdm, float val) { + ofdm->foff_est_hz = val; +} + +void ofdm_set_tx_bpf(struct OFDM *ofdm, bool val) { + if (val == true) { + if (ofdm->tx_bpf == NULL) + allocate_tx_bpf(ofdm); + + ofdm->tx_bpf_en = true; + } + else { + if (ofdm->tx_bpf != NULL) + deallocate_tx_bpf(ofdm); + + ofdm->tx_bpf_en = false; + } +} + +void ofdm_set_dpsk(struct OFDM *ofdm, bool val) { + ofdm->dpsk_en = val; +} + +/* + * -------------------------------------- + * ofdm_mod - modulates one frame of bits + * -------------------------------------- + */ +void ofdm_mod(struct OFDM *ofdm, COMP *result, const int *tx_bits) { + int length = ofdm->bitsperpacket / ofdm->bps; + complex float *tx = (complex float *) &result[0]; // complex has same memory layout + complex float tx_sym_lin[length]; + int dibit[2]; + int s, i; + + if (ofdm->bps == 1) { + /* Here we will have Nbitsperpacket / 1 */ + + for (s = 0; s < length; s++) { + tx_sym_lin[s] = (float) (2 * tx_bits[s] - 1); + } + } else if (ofdm->bps == 2) { + /* Here we will have Nbitsperpacket / 2 */ + + for (s = 0, i = 0; i < length; s += 2, i++) { + dibit[0] = tx_bits[s + 1] & 0x1; + dibit[1] = tx_bits[s ] & 0x1; + + tx_sym_lin[i] = qpsk_mod(dibit); + } + } /* else if (ofdm->bps == 3) { } TODO */ + + ofdm_txframe(ofdm, tx, tx_sym_lin); +} + +/* + * ---------------------------------------------------------------------------------- + * ofdm_sync_search - attempts to find coarse sync parameters for modem initial sync + * ---------------------------------------------------------------------------------- + */ + +/* + * This is a wrapper to maintain the older functionality + * with an array of COMPs as input + */ +int ofdm_sync_search(struct OFDM *ofdm, COMP *rxbuf_in) { + /* + * insert latest input samples into rxbuf + * so it is primed for when we have to call ofdm_demod() + */ + + /* note can't use memcpy when src and dest overlap */ + memmove(&ofdm->rxbuf[0], &ofdm->rxbuf[ofdm->nin], + (ofdm->nrxbuf - ofdm->nin) * sizeof (complex float)); + memmove(&ofdm->rxbuf[(ofdm->nrxbuf - ofdm->nin)], + rxbuf_in, ofdm->nin * sizeof (complex float)); + + return(ofdm_sync_search_core(ofdm)); +} + +/* + * This is a wrapper with a new interface to reduce memory allocated. + * This works with ofdm_demod and freedv_api. Gain is not used here. + */ +int ofdm_sync_search_shorts(struct OFDM *ofdm, short *rxbuf_in, float gain) { + int i, j; + + /* shift the buffer left based on nin */ + + memmove(&ofdm->rxbuf[0], &ofdm->rxbuf[ofdm->nin], + (ofdm->nrxbuf - ofdm->nin) * sizeof (complex float)); + + /* insert latest input samples onto tail of rxbuf */ + + for (j = 0, i = (ofdm->nrxbuf - ofdm->nin); i < ofdm->nrxbuf; j++, i++) { + ofdm->rxbuf[i] = ((float)rxbuf_in[j] / 32767.0f); + } + + return ofdm_sync_search_core(ofdm); +} + +/* + * Attempts to find coarse sync parameters for modem initial sync + */ +static int ofdm_sync_search_core(struct OFDM *ofdm) { + int act_est, afcoarse; + + /* Attempt coarse timing estimate (i.e. detect start of frame) at a range of frequency offsets */ + + int st = ofdm->samplesperframe + ofdm->samplespersymbol; + int en = st + 2 * ofdm->samplesperframe + ofdm->samplespersymbol; + + int fcoarse = 0; + float atiming_mx, timing_mx = 0.0f; + int ct_est = 0; + int atiming_valid, timing_valid = 0; + + PROFILE_VAR(timing_start); + PROFILE_SAMPLE(timing_start); + + for (afcoarse = -40; afcoarse <= 40; afcoarse += 40) { + act_est = est_timing(ofdm, &ofdm->rxbuf[st], (en - st), afcoarse, &atiming_mx, &atiming_valid, 2); + + if (atiming_mx > timing_mx) { + ct_est = act_est; + timing_mx = atiming_mx; + fcoarse = afcoarse; + timing_valid = atiming_valid; + } + } + + PROFILE_SAMPLE_AND_LOG2(timing_start, " timing"); + + /* refine freq est within -/+ 20 Hz window */ + + PROFILE_VAR(freq_start); + PROFILE_SAMPLE(freq_start); + + ofdm->coarse_foff_est_hz = est_freq_offset_pilot_corr(ofdm, &ofdm->rxbuf[st], ct_est, fcoarse); + ofdm->coarse_foff_est_hz += fcoarse; + + PROFILE_SAMPLE_AND_LOG2(freq_start, " freq"); + + if (ofdm->verbose != 0) { + fprintf(stderr, " ct_est: %4d foff_est: %4.1f timing_valid: %d timing_mx: %5.4f\n", + ct_est, (double) ofdm->coarse_foff_est_hz, timing_valid, + (double)timing_mx); + } + + if (timing_valid != 0) { + /* potential candidate found .... */ + + /* calculate number of samples we need on next buffer to get into sync */ + + ofdm->nin = ct_est; + + /* reset modem states */ + + ofdm->sample_point = ofdm->timing_est = 0; + ofdm->foff_est_hz = ofdm->coarse_foff_est_hz; + ofdm->timing_valid = timing_valid; + ofdm->timing_mx = timing_mx; + } else { + ofdm->nin = ofdm->samplesperframe; + } + + ofdm->timing_mx = timing_mx; + + return ofdm->timing_valid; +} + +/* + * ------------------------------------------ + * ofdm_demod - Demodulates one frame of bits + * ------------------------------------------ + */ + +/* + * This is a wrapper to maintain the older functionality with an + * array of COMPs as input + */ +void ofdm_demod(struct OFDM *ofdm, int *rx_bits, COMP *rxbuf_in) { + complex float *rx = (complex float *) &rxbuf_in[0]; // complex has same memory layout + int i, j; + + /* shift the buffer left based on nin */ + for (i = 0, j = ofdm->nin; i < (ofdm->nrxbuf - ofdm->nin); i++, j++) { + ofdm->rxbuf[i] = ofdm->rxbuf[j]; + } + + /* insert latest input samples onto tail of rxbuf */ + for (j = 0, i = (ofdm->nrxbuf - ofdm->nin); i < ofdm->nrxbuf; j++, i++) { + ofdm->rxbuf[i] = rx[j]; + } + + ofdm_demod_core(ofdm, rx_bits); +} + +/* + * This is a wrapper with a new interface to reduce memory allocated. + * This works with ofdm_demod and freedv_api. Gain is not used here. + */ +void ofdm_demod_shorts(struct OFDM *ofdm, int *rx_bits, short *rxbuf_in, float gain) { + int i, j; + + /* shift the buffer left based on nin */ + + for (i = 0, j = ofdm->nin; i < (ofdm->nrxbuf - ofdm->nin); i++, j++) { + ofdm->rxbuf[i] = ofdm->rxbuf[j]; + } + + /* insert latest input samples onto tail of rxbuf */ + + for (j = 0, i = (ofdm->nrxbuf - ofdm->nin); i < ofdm->nrxbuf; j++, i++) { + ofdm->rxbuf[i] = ((float)rxbuf_in[j] / 32767.0f); + } + + ofdm_demod_core(ofdm, rx_bits); +} + +/* + * This is the rest of the function which expects that the data is + * already in ofdm->rxbuf + */ +static void ofdm_demod_core(struct OFDM *ofdm, int *rx_bits) { + int prev_timing_est = ofdm->timing_est; + int i, j, k, rr, st, en; + + /* + * get user and calculated freq offset + */ + float woff_est = TAU * ofdm->foff_est_hz / ofdm->fs; + + /* update timing estimate ---------------------------------------------- */ + + if (ofdm->timing_en == true) { + /* update timing at start of every frame */ + + st = (ofdm->samplespersymbol + ofdm->samplesperframe) - floorf(ofdm->ftwindowwidth / 2) + ofdm->timing_est; + en = st + ofdm->samplesperframe - 1 + ofdm->samplespersymbol + ofdm->ftwindowwidth; + + complex float work[(en - st)]; + + /* + * Adjust for the frequency error by shifting the phase + * using a conjugate multiply + */ + for (j = 0, i = st; i < en; j++, i++) { + work[j] = ofdm->rxbuf[i] * cmplxconj(woff_est * i); + } + + int ft_est = est_timing(ofdm, work, (en - st), 0.0f, &ofdm->timing_mx, &ofdm->timing_valid, 1); + + ofdm->timing_est += ft_est - ceilf((float)ofdm->ftwindowwidth / 2) + 1; + + if (ofdm->verbose > 2) { + fprintf(stderr, " ft_est: %2d timing_est: %2d sample_point: %2d\n", ft_est, ofdm->timing_est, + ofdm->sample_point); + } + + /* Black magic to keep sample_point inside cyclic prefix. Or something like that. */ + + ofdm->sample_point = max(ofdm->timing_est + (ofdm->ncp / 4), ofdm->sample_point); + ofdm->sample_point = min(ofdm->timing_est + ofdm->ncp, ofdm->sample_point); + } + + /* + * Convert the time-domain samples to the frequency-domain using the rx_sym + * data matrix. This will be Nc+2 carriers of 11 symbols. + * + * You will notice there are Nc+2 BPSK symbols for each pilot symbol, and + * that there are Nc QPSK symbols for each data symbol. + * + * XXXXXXXXXXXXXXXXX <-- Timing Slip + * PPPPPPPPPPPPPPPPPPP <-- Previous Frames Pilot + * DDDDDDDDDDDDDDDDD + * DDDDDDDDDDDDDDDDD + * DDDDDDDDDDDDDDDDD + * DDDDDDDDDDDDDDDDD Ignore these past data symbols + * DDDDDDDDDDDDDDDDD + * DDDDDDDDDDDDDDDDD + * DDDDDDDDDDDDDDDDD + * PPPPPPPPPPPPPPPPPPP <-- This Frames Pilot + * DDDDDDDDDDDDDDDDD + * DDDDDDDDDDDDDDDDD + * DDDDDDDDDDDDDDDDD + * DDDDDDDDDDDDDDDDD These are the current data symbols to be decoded + * DDDDDDDDDDDDDDDDD + * DDDDDDDDDDDDDDDDD + * DDDDDDDDDDDDDDDDD + * PPPPPPPPPPPPPPPPPPP <-- Next Frames Pilot + * DDDDDDDDDDDDDDDDD + * DDDDDDDDDDDDDDDDD + * DDDDDDDDDDDDDDDDD + * DDDDDDDDDDDDDDDDD Ignore these next data symbols + * DDDDDDDDDDDDDDDDD + * DDDDDDDDDDDDDDDDD + * DDDDDDDDDDDDDDDDD + * PPPPPPPPPPPPPPPPPPP <-- Future Frames Pilot + * XXXXXXXXXXXXXXXXX <-- Timing Slip + * + * So this algorithm will have seven data symbols and four pilot symbols to process. + * The average of the four pilot symbols is our phase estimation. + */ + for (i = 0; i < (ofdm->ns + 3); i++) { + for (j = 0; j < (ofdm->nc + 2); j++) { + ofdm->rx_sym[i][j] = 0.0f; + } + } + + /* + * "Previous" pilot symbol is one modem frame above. + */ + st = ofdm->samplespersymbol + 1 + ofdm->sample_point; + en = st + ofdm->m; + + complex float work[ofdm->m]; + + /* down-convert at current timing instant------------------------------- */ + + for (k = 0, j = st; j < en; k++, j++) { + work[k] = ofdm->rxbuf[j] * cmplxconj(woff_est * j); + } + + /* + * Each symbol is of course ofdm->samplespersymbol samples long and + * becomes Nc+2 carriers after DFT. + * + * We put this carrier pilot symbol at the top of our matrix: + * + * 1 .................. Nc+2 + * + * +----------------------+ + * | Previous Pilot | rx_sym[0] + * +----------------------+ + * | | + * + */ + dft(ofdm, ofdm->rx_sym[0], work); + + /* + * "This" pilot comes after the extra symbol allotted at the top, and after + * the "previous" pilot and previous data symbols (let's call it, the previous + * modem frame). + * + * So we will now be starting at "this" pilot symbol, and continuing to the + * "next" pilot symbol. + * + * In this routine we also process the current data symbols. + */ + for (rr = 0; rr < (ofdm->ns + 1); rr++) { + st = ofdm->samplespersymbol + ofdm->samplesperframe + (rr * ofdm->samplespersymbol) + 1 + ofdm->sample_point; + en = st + ofdm->m; + + /* down-convert at current timing instant---------------------------------- */ + + for (k = 0, j = st; j < en; k++, j++) { + work[k] = ofdm->rxbuf[j] * cmplxconj(woff_est * j); + } + + /* + * We put these Nc+2 carrier symbols into our matrix after the previous pilot: + * + * 1 .................. Nc+2 + * | Previous Pilot | rx_sym[0] + * +----------------------+ + * | This Pilot | rx_sym[1] + * +----------------------+ + * | Data | rx_sym[2] + * +----------------------+ + * | Data | rx_sym[3] + * +----------------------+ + * | Data | rx_sym[4] + * +----------------------+ + * | Data | rx_sym[5] + * +----------------------+ + * | Data | rx_sym[6] + * +----------------------+ + * | Data | rx_sym[7] + * +----------------------+ + * | Data | rx_sym[8] + * +----------------------+ + * | Next Pilot | rx_sym[9] + * +----------------------+ + * | | rx_sym[10] + */ + dft(ofdm, ofdm->rx_sym[rr + 1], work); + } + + /* + * OK, now we want to process to the "future" pilot symbol. This is after + * the "next" modem frame. + * + * We are ignoring the data symbols between the "next" pilot and "future" pilot. + * We only want the "future" pilot symbol, to perform the averaging of all pilots. + */ + st = ofdm->samplespersymbol + (3 * ofdm->samplesperframe) + 1 + ofdm->sample_point; + en = st + ofdm->m; + + /* down-convert at current timing instant------------------------------- */ + + for (k = 0, j = st; j < en; k++, j++) { + work[k] = ofdm->rxbuf[j] * cmplxconj(woff_est * j); + } + + /* + * We put the future pilot after all the previous symbols in the matrix: + * + * 1 .................. Nc+2 + * + * | | rx_sym[9] + * +----------------------+ + * | Future Pilot | rx_sym[10] + * +----------------------+ + */ + dft(ofdm, ofdm->rx_sym[ofdm->ns + 2], work); + + /* + * We are finished now with the DFT and down conversion + * From here on down we are in the frequency domain + */ + + /* est freq err based on all carriers ---------------------------------- */ + + if (ofdm->foff_est_en == true) { + /* + * sym[1] is 'this' pilot symbol, sym[9] is 'next' pilot symbol. + * + * By subtracting the two averages of these pilots, we find the frequency + * by the change in phase over time. + */ + complex float freq_err_rect = + conjf(vector_sum(ofdm->rx_sym[1], ofdm->nc + 2)) * + vector_sum(ofdm->rx_sym[ofdm->ns + 1], ofdm->nc + 2); + + /* prevent instability in atan(im/re) when real part near 0 */ + + freq_err_rect += 1E-6f; + + float freq_err_hz = cargf(freq_err_rect) * ofdm->rs / (TAU * ofdm->ns); + ofdm->foff_est_hz += (ofdm->foff_est_gain * freq_err_hz); + } + + /* OK - now estimate and correct pilot phase -------------------------- */ + + complex float aphase_est_pilot_rect; + float aphase_est_pilot[ofdm->nc + 2]; + float aamp_est_pilot[ofdm->nc + 2]; + + for (i = 0; i < (ofdm->nc + 2); i++) { + aphase_est_pilot[i] = 10.0f; + aamp_est_pilot[i] = 0.0f; + } + + for (i = 1; i < (ofdm->nc + 1); i++) { /* ignore first and last carrier for count */ + if (ofdm->phase_est_bandwidth == low_bw) { + complex float symbol[3]; + + /* + * Use all pilots normally, results in low SNR performance, + * but will fall over in high Doppler propagation + * + * Basically we divide the Nc+2 pilots into groups of 3 + * Then average the phase surrounding each of the data symbols. + */ + for (k = 0, j = (i - 1); k < 3; k++, j++) { + symbol[k] = ofdm->rx_sym[1][j] * conjf(ofdm->pilots[j]); /* this pilot conjugate */ + } + + aphase_est_pilot_rect = vector_sum(symbol, 3); + + for (k = 0, j = (i - 1); k < 3; k++, j++) { + symbol[k] = ofdm->rx_sym[ofdm->ns + 1][j] * conjf(ofdm->pilots[j]); /* next pilot conjugate */ + } + + aphase_est_pilot_rect += vector_sum(symbol, 3); + + /* use pilots in past and future */ + + for (k = 0, j = (i - 1); k < 3; k++, j++) { + symbol[k] = ofdm->rx_sym[0][j] * conjf(ofdm->pilots[j]); /* previous pilot */ + } + + aphase_est_pilot_rect += vector_sum(symbol, 3); + + for (k = 0, j = (i - 1); k < 3; k++, j++) { + symbol[k] = ofdm->rx_sym[ofdm->ns + 2][j] * conjf(ofdm->pilots[j]); /* future pilot */ + } + + aphase_est_pilot_rect += vector_sum(symbol, 3); + aphase_est_pilot[i] = cargf(aphase_est_pilot_rect); + + /* amplitude is estimated over 12 pilots */ + + aamp_est_pilot[i] = cabsf(aphase_est_pilot_rect / 12.0f); + } else { + assert(ofdm->phase_est_bandwidth == high_bw); + + /* + * Use only symbols at 'this' and 'next' to quickly track changes + * in phase due to high Doppler spread in propagation (no neighbor averaging). + * + * As less pilots are averaged, low SNR performance will be poorer + */ + aphase_est_pilot_rect = ofdm->rx_sym[1][i] * conjf(ofdm->pilots[i]); /* "this" pilot conjugate */ + aphase_est_pilot_rect += ofdm->rx_sym[ofdm->ns + 1][i] * conjf(ofdm->pilots[i]); /* "next" pilot conjugate */ + aphase_est_pilot[i] = cargf(aphase_est_pilot_rect); + + /* amplitude is estimated over 2 pilots */ + + aamp_est_pilot[i] = cabsf(aphase_est_pilot_rect / 2.0f); + } + } + + /* + * correct the phase offset using phase estimate, and demodulate + * bits, separate loop as it runs across cols (carriers) to get + * frame bit ordering correct + */ + complex float rx_corr; + int abit[2]; + int bit_index = 0; + float sum_amp = 0.0f; + + for (rr = 0; rr < ofdm->rowsperframe; rr++) { + /* + * Note the i starts with the second carrier, ends with Nc+1. + * so we ignore the first and last carriers. + * + * Also note we are using sym[2..8] or the seven data symbols. + */ + for (i = 1; i < (ofdm->nc + 1); i++) { + if (ofdm->phase_est_en == true) { + if (ofdm->dpsk_en == true) { + /* differential detection, using pilot as reference at start of frame */ + rx_corr = ofdm->rx_sym[rr + 2][i] * cmplxconj(cargf(ofdm->rx_sym[rr + 1][i])); + } else { + /* regular coherent detection */ + rx_corr = ofdm->rx_sym[rr + 2][i] * cmplxconj(aphase_est_pilot[i]); + } + } else { + rx_corr = ofdm->rx_sym[rr + 2][i]; + } + + /* + * Output complex data symbols after phase correction; + * (_np = no pilots) the pilot symbols have been removed + */ + ofdm->rx_np[(rr * ofdm->nc) + (i - 1)] = rx_corr; + + /* + * Note even though amp ests are the same for each col, + * the FEC decoder likes to have one amplitude per symbol + * so convenient to log them all + */ + ofdm->rx_amp[(rr * ofdm->nc) + (i - 1)] = aamp_est_pilot[i]; + sum_amp += aamp_est_pilot[i]; + + /* + * Note like amps in this implementation phase ests are the + * same for each col, but we log them for each symbol anyway + */ + ofdm->aphase_est_pilot_log[(rr * ofdm->nc) + (i - 1)] = aphase_est_pilot[i]; + + if (ofdm->bps == 1) { + rx_bits[bit_index++] = crealf(rx_corr) > 0.0f; + } else if (ofdm->bps == 2) { + /* + * Only one final task, decode what quadrant the phase + * is in, and return the dibits + */ + qpsk_demod(rx_corr, abit); + rx_bits[bit_index++] = abit[1]; + rx_bits[bit_index++] = abit[0]; + } + } + } + + /* update mean amplitude estimate for LDPC decoder scaling */ + + ofdm->mean_amp = 0.9f * ofdm->mean_amp + 0.1f * sum_amp / (ofdm->rowsperframe * ofdm->nc); + + /* Adjust nin to take care of sample clock offset */ + + ofdm->nin = ofdm->samplesperframe; + + if (ofdm->timing_en == true) { + ofdm->clock_offset_counter += (prev_timing_est - ofdm->timing_est); + + int thresh = ofdm->samplespersymbol / 8; + int tshift = ofdm->samplespersymbol / 4; + + if (ofdm->timing_est > thresh) { + ofdm->nin = ofdm->samplesperframe + tshift; + ofdm->timing_est -= tshift; + ofdm->sample_point -= tshift; + } else if (ofdm->timing_est < -thresh) { + ofdm->nin = ofdm->samplesperframe - tshift; + ofdm->timing_est += tshift; + ofdm->sample_point += tshift; + } + } + + /* + * estimate signal and noise power, see ofdm_lib.m, + * cohpsk.m for more info + */ + complex float *rx_np = ofdm->rx_np; + + float sig_var = 0.0f; + + /* + * sig_var gets a little large, so tamp it down + * each step + */ + float step = (1.0f / (ofdm->rowsperframe * ofdm->nc)); + + for (i = 0; i < (ofdm->rowsperframe * ofdm->nc); i++) { + sig_var += (cnormf(rx_np[i]) * step); + } + + float sig_rms = sqrtf(sig_var); + + float sum_x = 0.0f; + float sum_xx = 0.0f; + int n = 0; + + for (i = 0; i < (ofdm->rowsperframe * ofdm->nc); i++) { + complex float s = rx_np[i]; + + if (fabsf(crealf(s)) > sig_rms) { + sum_x += cimagf(s); + sum_xx += cimagf(s) * cimagf(s); + n++; + } + } + + /* + * with large interfering carriers this alg can break down - in + * that case set a benign value for noise_var that will produce a + * sensible (probably low) SNR est + */ + float noise_var = 1.0f; + + if (n > 1) { + noise_var = (n * sum_xx - sum_x * sum_x) / (n * (n - 1)); + } + + ofdm->noise_var = 2.0f * noise_var; + ofdm->sig_var = sig_var; +} + +/* + * state machine for 700D/2020 + */ +void ofdm_sync_state_machine(struct OFDM *ofdm, uint8_t *rx_uw) { + int i; + + State next_state = ofdm->sync_state; + + ofdm->sync_start = false; + ofdm->sync_end = false; + + if (ofdm->sync_state == search) { + if (ofdm->timing_valid) { + ofdm->frame_count = 0; + ofdm->sync_counter = 0; + ofdm->sync_start = true; + ofdm->clock_offset_counter = 0; + next_state = trial; + } + } + + if ((ofdm->sync_state == synced) || (ofdm->sync_state == trial)) { + ofdm->frame_count++; + + /* + * freq offset est may be too far out, and has aliases every 1/Ts, so + * we use a Unique Word to get a really solid indication of sync. + */ + ofdm->uw_errors = 0; + + for (i = 0; i < ofdm->nuwbits; i++) { + ofdm->uw_errors += ofdm->tx_uw[i] ^ rx_uw[i]; + } + + /* + * during trial sync we don't tolerate errors so much, we look + * for 3 consecutive frames with low error rate to confirm sync + */ + if (ofdm->sync_state == trial) { + if (ofdm->uw_errors > 2) { + /* if we exceed thresh stay in trial sync */ + + ofdm->sync_counter++; + ofdm->frame_count = 0; + } + + if (ofdm->sync_counter == 2) { + /* if we get two bad frames drop sync and start again */ + + next_state = search; + ofdm->phase_est_bandwidth = high_bw; + } + + if (ofdm->frame_count == 4) { + /* three good frames, sync is OK! */ + + next_state = synced; + /* change to low bandwidth, but more accurate phase estimation */ + /* but only if not locked to high */ + + if (ofdm->phase_est_bandwidth_mode != LOCKED_PHASE_EST) { + ofdm->phase_est_bandwidth = low_bw; + } + } + } + + /* once we have synced up we tolerate a higher error rate to wait out fades */ + + if (ofdm->sync_state == synced) { + if (ofdm->uw_errors > 2) { + ofdm->sync_counter++; + } else { + ofdm->sync_counter = 0; + } + + if ((ofdm->sync_mode == autosync) && (ofdm->sync_counter > 6)) { + /* run of consecutive bad frames ... drop sync */ + + next_state = search; + ofdm->phase_est_bandwidth = high_bw; + } + } + } + + ofdm->last_sync_state = ofdm->sync_state; + ofdm->sync_state = next_state; +} + +/* + * state machine for data modes + */ +void ofdm_sync_state_machine2(struct OFDM *ofdm, uint8_t *rx_uw) { + State next_state = ofdm->sync_state; + int i; + + ofdm->sync_start = ofdm->sync_end = 0; + + if (ofdm->sync_state == search) { + if (ofdm->timing_valid != 0) { + ofdm->sync_start = true; + ofdm->sync_counter = 0; + next_state = trial; + } + } + + ofdm->uw_errors = 0; + + for (i = 0; i < ofdm->nuwbits; i++) { + ofdm->uw_errors += ofdm->tx_uw[i] ^ rx_uw[i]; + } + + if (ofdm->sync_state == trial) { + if (ofdm->sync_state == trial) { + if (ofdm->uw_errors < ofdm->bad_uw_errors) { + next_state = synced; + ofdm->frame_count = ofdm->nuwframes; + ofdm->modem_frame = ofdm->nuwframes; + } else { + ofdm->sync_counter++; + + if (ofdm->sync_counter > ofdm->np) { + next_state = search; + } + } + } + } + + // Note we don't ever lose sync, we assume there are a known number of frames being sent, + // or the packets contain an "end of stream" information. + + if (ofdm->sync_state == synced) { + ofdm->frame_count++; + ofdm->modem_frame++; + + if (ofdm->modem_frame >= ofdm->np) { + ofdm->modem_frame = 0; + } + } + + ofdm->last_sync_state = ofdm->sync_state; + ofdm->sync_state = next_state; +} + +/*---------------------------------------------------------------------------* \ + + FUNCTIONS...: ofdm_set_sync + AUTHOR......: David Rowe + DATE CREATED: May 2018 + + Operator control of sync state machine. This mode is required to + acquire sync up at very low SNRS. This is difficult to implement, + for example we may get a false sync, or the state machine may fall + out of sync by mistake during a long fade. + + So with this API call we allow some operator assistance. + + Ensure this is called in the same thread as ofdm_sync_state_machine(). + +\*---------------------------------------------------------------------------*/ + +void ofdm_set_sync(struct OFDM *ofdm, int sync_cmd) { + assert(ofdm != NULL); + + switch (sync_cmd) { + case UN_SYNC: + /* + * force manual unsync, in case operator detects false sync, + * which will cause sync state machine to have another go at sync + */ + ofdm->sync_state = search; + break; + case AUTO_SYNC: + /* normal operating mode - sync state machine decides when to unsync */ + + ofdm->sync_mode = autosync; + break; + case MANUAL_SYNC: + /* + * allow sync state machine to sync, but not to unsync, the + * operator will decide that manually + */ + ofdm->sync_mode = manualsync; + break; + default: + assert(0); + } +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: ofdm_get_demod_stats() + AUTHOR......: David Rowe + DATE CREATED: May 2018 + + Fills stats structure with a bunch of demod information. + +\*---------------------------------------------------------------------------*/ + +void ofdm_get_demod_stats(struct OFDM *ofdm, struct MODEM_STATS *stats) { + stats->Nc = ofdm->nc; + assert(stats->Nc <= MODEM_STATS_NC_MAX); + + float snr_est = 10.0f * log10f((0.1f + (ofdm->sig_var / ofdm->noise_var)) * + ofdm->nc * ofdm->rs / 3000.0f); + float total = ofdm->frame_count * ofdm->samplesperframe; + + /* fast attack, slow decay */ + if (snr_est > stats->snr_est) + stats->snr_est = snr_est; + else + stats->snr_est = 0.9f * stats->snr_est + 0.1f * snr_est; + + stats->sync = ((ofdm->sync_state == synced) || (ofdm->sync_state == trial)); + stats->foff = ofdm->foff_est_hz; + stats->rx_timing = ofdm->timing_est; + stats->clock_offset = 0; + + if (total != 0.0f) { + stats->clock_offset = ofdm->clock_offset_counter / total; + } + + stats->sync_metric = ofdm->timing_mx; + +#ifndef __EMBEDDED__ + assert(ofdm->rowsperframe < MODEM_STATS_NR_MAX); + stats->nr = ofdm->rowsperframe; + + for (int c = 0; c < ofdm->nc; c++) { + for (int r = 0; r < ofdm->rowsperframe; r++) { + complex float rot = ofdm->rx_np[r * c] * cmplx(ROT45); + + stats->rx_symbols[r][c].real = crealf(rot); + stats->rx_symbols[r][c].imag = cimagf(rot); + } + } +#endif +} + +/* + * Assemble packet of bits from UW, payload bits, and txt bits + */ +void ofdm_assemble_qpsk_modem_packet(struct OFDM *ofdm, uint8_t modem_frame[], + uint8_t payload_bits[], uint8_t txt_bits[]) { + int s, t; + + int p = 0; + int u = 0; + + for (s = 0; s < (ofdm->bitsperpacket - ofdm->ntxtbits); s++) { + if ((u < ofdm->nuwbits) && (s == ofdm->uw_ind[u])) { + modem_frame[s] = ofdm->tx_uw[u++]; + } else { + modem_frame[s] = payload_bits[p++]; + } + } + + assert(u == ofdm->nuwbits); + assert(p == (ofdm->bitsperpacket - ofdm->nuwbits - ofdm->ntxtbits)); + + for (t = 0; s < ofdm->bitsperframe; s++, t++) { + modem_frame[s] = txt_bits[t]; + } + + assert(t == ofdm->ntxtbits); +} + +/* + * Assemble packet of symbols from UW, payload symbols, and txt bits + */ +void ofdm_assemble_qpsk_modem_packet_symbols(struct OFDM *ofdm, complex float modem_packet[], + COMP payload_syms[], uint8_t txt_bits[]) { + complex float *payload = (complex float *) &payload_syms[0]; // complex has same memory layout + int Nsymsperpacket = ofdm->bitsperpacket / ofdm->bps; + int Nuwsyms = ofdm->nuwbits / ofdm->bps; + int Ntxtsyms = ofdm->ntxtbits / ofdm->bps; + int dibit[2]; + int s, t; + + int p = 0; + int u = 0; + + assert(ofdm->bps == 2); /* this only works for QPSK at this stage (e.g. modem packet mod) */ + + for (s = 0; s < (Nsymsperpacket - Ntxtsyms); s++) { + if ((u < Nuwsyms) && (s == ofdm->uw_ind_sym[u])) { + modem_packet[s] = ofdm->tx_uw_syms[u++]; + } else { + modem_packet[s] = payload[p++]; + } + } + + assert(u == Nuwsyms); + assert(p == (Nsymsperpacket - Nuwsyms - Ntxtsyms)); + + for (t = 0; s < Nsymsperpacket; s++, t += 2) { + dibit[1] = txt_bits[t ] & 0x1; + dibit[0] = txt_bits[t + 1] & 0x1; + modem_packet[s] = qpsk_mod(dibit); + } + + assert(t == ofdm->ntxtbits); +} + +/* + * Disassemble a received packet of symbols into UW bits and payload data symbols + */ +void ofdm_disassemble_qpsk_modem_packet(struct OFDM *ofdm, complex float rx_syms[], float rx_amps[], + COMP codeword_syms[], float codeword_amps[], short txt_bits[]) +{ + complex float *codeword = (complex float *) &codeword_syms[0]; // complex has same memory layout + int Nsymsperpacket = ofdm->bitsperpacket / ofdm->bps; + int Nuwsyms = ofdm->nuwbits / ofdm->bps; + int Ntxtsyms = ofdm->ntxtbits / ofdm->bps; + int dibit[2]; + int s, t; + + int p = 0; + int u = 0; + + assert(ofdm->bps == 2); /* this only works for QPSK at this stage */ + + for (s = 0; s < (Nsymsperpacket - Ntxtsyms); s++) { + if ((u < Nuwsyms) && (s == ofdm->uw_ind_sym[u])) { + u++; + } else { + codeword[p] = rx_syms[s]; + codeword_amps[p] = rx_amps[s]; + p++; + } + } + + assert(u == Nuwsyms); + assert(p == (Nsymsperpacket - Nuwsyms - Ntxtsyms)); + + for (t = 0; s < Nsymsperpacket; s++, t += 2) { + qpsk_demod(rx_syms[s], dibit); + + txt_bits[t ] = dibit[1]; + txt_bits[t + 1] = dibit[0]; + } + + assert(t == ofdm->ntxtbits); +} + +/* + * Extract just the UW from the packet + */ +void ofdm_extract_uw(struct OFDM *ofdm, complex float rx_syms[], float rx_amps[], uint8_t rx_uw[]) { + int Nsymsperframe = ofdm->bitsperframe / ofdm->bps; + int Nuwsyms = ofdm->nuwbits / ofdm->bps; + int dibit[2]; + int s,u; + + assert(ofdm->bps == 2); /* this only works for QPSK at this stage (e.g. UW demod) */ + + for (s = 0, u = 0; s < Nsymsperframe*ofdm->nuwframes; s++) { + if ((u < Nuwsyms) && (s == ofdm->uw_ind_sym[u])) { + qpsk_demod(rx_syms[s], dibit); + rx_uw[2 * u ] = dibit[1]; + rx_uw[2 * u + 1] = dibit[0]; + u++; + } + } + + assert(u == Nuwsyms); +} + +/* + * Pseudo-random number generator that we can implement in C with + * identical results to Octave. Returns an unsigned int between 0 + * and 32767. Used for generating test frames of various lengths. + */ +void ofdm_rand(uint16_t r[], int n) { + uint64_t seed = 1; + int i; + + for (i = 0; i < n; i++) { + seed = (1103515245l * seed + 12345) % 32768; + r[i] = seed; + } +} + +void ofdm_generate_payload_data_bits(uint8_t payload_data_bits[], int n) { + uint16_t r[n]; + int i; + + /* construct payload data bits */ + + ofdm_rand(r, n); + + for (i = 0; i < n; i++) { + payload_data_bits[i] = r[i] > 16384; + } +} + +void ofdm_print_info(struct OFDM *ofdm) { + char *syncmode[] = { + "unsync", + "autosync", + "manualsync" + }; + char *phase_est_bandwidth_mode[] = { + "auto", + "locked_high" + }; + + fprintf(stderr, "ofdm->tx_centre = %g\n", (double)ofdm->tx_centre); + fprintf(stderr, "ofdm->rx_centre = %g\n", (double)ofdm->rx_centre); + fprintf(stderr, "ofdm->fs = %g\n", (double)ofdm->fs); + fprintf(stderr, "ofdm->ts = %g\n", (double)ofdm->ts); + fprintf(stderr, "ofdm->rs = %g\n", (double)ofdm->rs); + fprintf(stderr, "ofdm->tcp = %g\n", (double)ofdm->tcp); + fprintf(stderr, "ofdm->inv_m = %g\n", (double)ofdm->inv_m); + fprintf(stderr, "ofdm->tx_nlower = %g\n", (double)ofdm->tx_nlower); + fprintf(stderr, "ofdm->rx_nlower = %g\n", (double)ofdm->rx_nlower); + fprintf(stderr, "ofdm->doc = %g\n", (double)ofdm->doc); + fprintf(stderr, "ofdm->timing_mx_thresh = %g\n", (double)ofdm->timing_mx_thresh); + fprintf(stderr, "ofdm->nc = %d\n", ofdm->nc); + fprintf(stderr, "ofdm->np = %d\n", ofdm->np); + fprintf(stderr, "ofdm->ns = %d\n", ofdm->ns); + fprintf(stderr, "ofdm->bps = %d\n", ofdm->bps); + fprintf(stderr, "ofdm->m = %d\n", ofdm->m); + fprintf(stderr, "ofdm->ncp = %d\n", ofdm->ncp); + fprintf(stderr, "ofdm->ftwindowwidth = %d\n", ofdm->ftwindowwidth); + fprintf(stderr, "ofdm->bitsperframe = %d\n", ofdm->bitsperframe); + fprintf(stderr, "ofdm->bitsperpacket = %d\n", ofdm->bitsperpacket); + fprintf(stderr, "ofdm->rowsperframe = %d\n", ofdm->rowsperframe); + fprintf(stderr, "ofdm->samplespersymbol = %d\n", ofdm->samplespersymbol); + fprintf(stderr, "ofdm->samplesperframe = %d\n", ofdm->samplesperframe); + fprintf(stderr, "ofdm->max_samplesperframe = %d\n", ofdm->max_samplesperframe); + fprintf(stderr, "ofdm->nrxbuf = %d\n", ofdm->nrxbuf); + fprintf(stderr, "ofdm->ntxtbits = %d\n", ofdm->ntxtbits); + fprintf(stderr, "ofdm->nuwbits = %d\n", ofdm->nuwbits); + fprintf(stderr, "ofdm->foff_est_gain = %g\n", (double)ofdm->foff_est_gain); + fprintf(stderr, "ofdm->foff_est_hz = %g\n", (double)ofdm->foff_est_hz); + fprintf(stderr, "ofdm->timing_mx = %g\n", (double)ofdm->timing_mx); + fprintf(stderr, "ofdm->coarse_foff_est_hz = %g\n", (double)ofdm->coarse_foff_est_hz); + fprintf(stderr, "ofdm->timing_norm = %g\n", (double)ofdm->timing_norm); + fprintf(stderr, "ofdm->sig_var = %g\n", (double)ofdm->sig_var); + fprintf(stderr, "ofdm->noise_var = %g\n", (double)ofdm->noise_var); + fprintf(stderr, "ofdm->mean_amp = %g\n", (double)ofdm->mean_amp); + fprintf(stderr, "ofdm->clock_offset_counter = %d\n", ofdm->clock_offset_counter); + fprintf(stderr, "ofdm->verbose = %d\n", ofdm->verbose); + fprintf(stderr, "ofdm->sample_point = %d\n", ofdm->sample_point); + fprintf(stderr, "ofdm->timing_est = %d\n", ofdm->timing_est); + fprintf(stderr, "ofdm->timing_valid = %d\n", ofdm->timing_valid); + fprintf(stderr, "ofdm->nin = %d\n", ofdm->nin); + fprintf(stderr, "ofdm->uw_errors = %d\n", ofdm->uw_errors); + fprintf(stderr, "ofdm->sync_counter = %d\n", ofdm->sync_counter); + fprintf(stderr, "ofdm->frame_count = %d\n", ofdm->frame_count); + fprintf(stderr, "ofdm->sync_start = %s\n", ofdm->sync_start ? "true" : "false"); + fprintf(stderr, "ofdm->sync_end = %s\n", ofdm->sync_end ? "true" : "false"); + fprintf(stderr, "ofdm->sync_mode = %s\n", syncmode[ofdm->sync_mode]); + fprintf(stderr, "ofdm->timing_en = %s\n", ofdm->timing_en ? "true" : "false"); + fprintf(stderr, "ofdm->foff_est_en = %s\n", ofdm->foff_est_en ? "true" : "false"); + fprintf(stderr, "ofdm->phase_est_en = %s\n", ofdm->phase_est_en ? "true" : "false"); + fprintf(stderr, "ofdm->tx_bpf_en = %s\n", ofdm->tx_bpf_en ? "true" : "false"); + fprintf(stderr, "ofdm->dpsk_en = %s\n", ofdm->dpsk_en ? "true" : "false"); + fprintf(stderr, "ofdm->phase_est_bandwidth_mode = %s\n", phase_est_bandwidth_mode[ofdm->phase_est_bandwidth_mode]); +} + diff --git a/libcodec2-android/src/codec2/src/ofdm_demod.c b/libcodec2-android/src/codec2/src/ofdm_demod.c new file mode 100644 index 0000000..04f1cdf --- /dev/null +++ b/libcodec2-android/src/codec2/src/ofdm_demod.c @@ -0,0 +1,709 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: ofdm_demod.c + AUTHOR......: David Rowe + DATE CREATED: Mar 2018 + + Demodulates an input file of raw file (8kHz, 16 bit shorts) OFDM modem + samples. Runs in uncoded or LDPC coded modes. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2018 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . + */ + +#define OPTPARSE_IMPLEMENTATION +#define OPTPARSE_API static +#include "optparse.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "codec2_ofdm.h" +#include "ofdm_internal.h" +#include "ofdm_mode.h" +#include "octave.h" +#include "mpdecode_core.h" +#include "ldpc_codes.h" +#include "gp_interleaver.h" +#include "interldpc.h" + +#define IS_DIR_SEPARATOR(c) ((c) == '/') + +#define NFRAMES 100 /* just log the first 100 frames */ +#define NDISCARD 20 /* BER2 measure discards first 20 frames */ +#define FS 8000.0f + +static const char *progname; + +static const char *statemode[] = { + "search", + "trial", + "synced" +}; + +void opt_help() { + fprintf(stderr, "\nusage: %s [options]\n\n", progname); + fprintf(stderr, " Default output file format is one byte per bit hard decision\n\n"); + fprintf(stderr, " --in filename Name of InputModemRawFile\n"); + fprintf(stderr, " --out filename Name of OutputOneCharPerBitFile\n"); + fprintf(stderr, " --log filename Octave log file for testing\n"); + fprintf(stderr, " --mode modeName Predefined mode 700D|2020|datac1\n"); + fprintf(stderr, " --nc [17..62] Number of Carriers (17 default, 62 max)\n"); + fprintf(stderr, " --np Number of packets\n"); + fprintf(stderr, " --ns Nframes One pilot every ns symbols (8 default)\n"); + fprintf(stderr, " --tcp Nsecs Cyclic Prefix Duration (.002 default)\n"); + fprintf(stderr, " --ts Nsecs Symbol Duration (.018 default)\n"); + fprintf(stderr, " --bandwidth [0|1] Select phase est bw mode AUTO low or high (0) or LOCKED high (1) (default 0)\n"); + fprintf(stderr, " Must also specify --ldpc option\n"); + fprintf(stderr, " --tx_freq freq Set modulation TX centre Frequency (1500.0 default)\n"); + fprintf(stderr, " --rx_freq freq Set modulation RX centre Frequency (1500.0 default)\n"); + fprintf(stderr, " --verbose [1|2|3] Verbose output level to stderr (default off)\n"); + fprintf(stderr, " --testframes Receive test frames and count errors\n"); + fprintf(stderr, " --ldpc [1|2] Run LDPC decoder In (224,112) 700D or (504, 396) 2020 mode.\n"); + fprintf(stderr, " --databits numBits Number of data bits used in LDPC codeword.\n"); + fprintf(stderr, "\n"); + fprintf(stderr, " --start_secs secs Number of seconds delay before we start to demod\n"); + fprintf(stderr, " --len_secs secs Number of seconds to run demod\n"); + fprintf(stderr, " --skip_secs timeSecs At timeSecs introduce a large timing error by skipping half a frame of samples\n"); + fprintf(stderr, " --dpsk Differential PSK.\n"); + fprintf(stderr, "\n"); + + exit(-1); +} + +int main(int argc, char *argv[]) { + int i, j, opt, val; + + char *pn = argv[0] + strlen(argv[0]); + + while (pn != argv[0] && !IS_DIR_SEPARATOR(pn[-1])) + --pn; + + progname = pn; + + /* Turn off stream buffering */ + + setvbuf(stdin, NULL, _IONBF, BUFSIZ); + setvbuf(stdout, NULL, _IONBF, BUFSIZ); + + FILE *fin = stdin; + FILE *fout = stdout; + FILE *foct = NULL; + + char *fin_name = NULL; + char *fout_name = NULL; + char *log_name = NULL; + + int logframes = NFRAMES; + int verbose = 0; + int phase_est_bandwidth_mode = AUTO_PHASE_EST; + int ldpc_en = 0; + int Ndatabitsperpacket = 0; + + bool testframes = false; + bool input_specified = false; + bool output_specified = false; + bool log_specified = false; + bool log_active = false; + bool dpsk = false; + + float time_to_sync = -1; + float start_secs = 0.0; + float len_secs = 0.0; + float skip_secs = 0.0; + + /* set up the default modem config */ + struct OFDM_CONFIG *ofdm_config = (struct OFDM_CONFIG *) calloc(1, sizeof (struct OFDM_CONFIG)); + assert(ofdm_config != NULL); + char mode[32] = "700D"; + ofdm_init_mode(mode, ofdm_config); + + struct optparse options; + struct optparse_long longopts[] = { + {"in", 'a', OPTPARSE_REQUIRED}, + {"out", 'b', OPTPARSE_REQUIRED}, + {"log", 'c', OPTPARSE_REQUIRED}, + {"testframes", 'd', OPTPARSE_NONE}, + {"bandwidth", 'o', OPTPARSE_REQUIRED}, + {"tx_freq", 'f', OPTPARSE_REQUIRED}, + {"rx_freq", 'g', OPTPARSE_REQUIRED}, + {"verbose", 'v', OPTPARSE_REQUIRED}, + {"ldpc", 'i', OPTPARSE_NONE}, + {"nc", 'j', OPTPARSE_REQUIRED}, + {"tcp", 'k', OPTPARSE_REQUIRED}, + {"ts", 'l', OPTPARSE_REQUIRED}, + {"ns", 'm', OPTPARSE_REQUIRED}, + {"np", 'n', OPTPARSE_REQUIRED}, + {"databits", 'p', OPTPARSE_REQUIRED}, + {"start_secs", 'x', OPTPARSE_REQUIRED}, + {"len_secs", 'y', OPTPARSE_REQUIRED}, + {"skip_secs", 'z', OPTPARSE_REQUIRED}, + {"dpsk", 'q', OPTPARSE_NONE}, + {"mode", 'r', OPTPARSE_REQUIRED}, + {0, 0, 0} + }; + + optparse_init(&options, argv); + + while ((opt = optparse_long(&options, longopts, NULL)) != -1) { + switch (opt) { + case '?': + opt_help(); + case 'a': + fin_name = options.optarg; + input_specified = true; + break; + case 'b': + fout_name = options.optarg; + output_specified = true; + break; + case 'c': + log_name = options.optarg; + log_specified = true; + log_active = true; + break; + case 'd': + testframes = true; + break; + case 'i': + ldpc_en = 1; + break; + case 'f': + ofdm_config->tx_centre = atof(options.optarg); + break; + case 'g': + ofdm_config->rx_centre = atof(options.optarg); + break; + case 'j': + val = atoi(options.optarg); + + if (val > 62 || val < 17) { + opt_help(); + } else { + ofdm_config->nc = val; + } + break; + case 'k': + ofdm_config->tcp = atof(options.optarg); + break; + case 'l': + ofdm_config->ts = atof(options.optarg); + ofdm_config->rs = 1.0f/ofdm_config->ts; + break; + case 'm': + ofdm_config->ns = atoi(options.optarg); + break; + case 'n': + ofdm_config->np = atoi(options.optarg); + break; + case 'o': + phase_est_bandwidth_mode = atoi(options.optarg); + break; + case 'p': + Ndatabitsperpacket = atoi(options.optarg); + break; + case 'q': + dpsk = true; + break; + case 'r': + strcpy(mode, options.optarg); + ofdm_init_mode(mode, ofdm_config); + break; + case 'v': + verbose = atoi(options.optarg); + if (verbose < 0 || verbose > 3) + verbose = 0; + break; + case 'x': + start_secs = atoi(options.optarg); + break; + case 'y': + len_secs = atoi(options.optarg); + break; + case 'z': + skip_secs = atoi(options.optarg); + break; + + } + } + + /* Print remaining arguments to give user a hint */ + char *arg; + + while ((arg = optparse_arg(&options))) + fprintf(stderr, "%s\n", arg); + + if (input_specified == true) { + if ((fin = fopen(fin_name, "rb")) == NULL) { + fprintf(stderr, "Error opening input modem sample file: %s\n", fin_name); + exit(-1); + } + } + + if (output_specified == true) { + if ((fout = fopen(fout_name, "wb")) == NULL) { + fprintf(stderr, "Error opening output file: %s\n", fout_name); + exit(-1); + } + } + + if (log_specified == true) { + if ((foct = fopen(log_name, "wt")) == NULL) { + fprintf(stderr, "Error opening Octave output file: %s\n", log_name); + exit(-1); + } + } + + /* Create OFDM modem ----------------------------------------------------*/ + + struct OFDM *ofdm = ofdm_create(ofdm_config); + assert(ofdm != NULL); + free(ofdm_config); + + ofdm_set_phase_est_bandwidth_mode(ofdm, phase_est_bandwidth_mode); + ofdm_set_dpsk(ofdm, dpsk); + + /* Get a copy of the actual modem config (ofdm_create() fills in more parameters) */ + ofdm_config = ofdm_get_config_param(ofdm); + + int ofdm_bitsperframe = ofdm_get_bits_per_frame(ofdm); + int ofdm_rowsperframe = ofdm_bitsperframe / (ofdm_config->nc * ofdm_config->bps); + int ofdm_nuwbits = ofdm_config->nuwbits; + int ofdm_ntxtbits = ofdm_config->txtbits; + + float phase_est_pilot_log[ofdm_rowsperframe * NFRAMES][ofdm_config->nc]; + COMP rx_np_log[ofdm_rowsperframe * ofdm_config->nc * NFRAMES]; + float rx_amp_log[ofdm_rowsperframe * ofdm_config->nc * NFRAMES]; + float foff_hz_log[NFRAMES], snr_est_log[NFRAMES]; + int timing_est_log[NFRAMES]; + + /* zero out the log arrays in case we don't run for NFRAMES and fill them with data */ + + for (i = 0; i < (ofdm_rowsperframe * NFRAMES); i++) { + for (j = 0; j < ofdm_config->nc; j++) { + phase_est_pilot_log[i][j] = 0.0f; + } + } + + for (i = 0; i < (ofdm_rowsperframe * ofdm_config->nc * NFRAMES); i++) { + rx_np_log[i].real = 0.0f; + rx_np_log[i].imag = 0.0f; + rx_amp_log[i] = 0.0f; + } + + for (i = 0; i < NFRAMES; i++) { + foff_hz_log[i] = 0.0f; + snr_est_log[i] = 0.0f; + timing_est_log[i] = 0.0f; + } + + /* some useful constants */ + + int Nbitsperframe = ofdm_bitsperframe; + int Nbitsperpacket = ofdm_get_bits_per_packet(ofdm); + int Nsymsperframe = Nbitsperframe / ofdm_config->bps; + int Nsymsperpacket = Nbitsperpacket / ofdm_config->bps; + int Nmaxsamperframe = ofdm_get_max_samples_per_frame(ofdm); + int Npayloadbitsperframe = ofdm_bitsperframe - ofdm_nuwbits - ofdm_ntxtbits; + int Npayloadbitsperpacket = Nbitsperpacket - ofdm_nuwbits - ofdm_ntxtbits; + int Npayloadsymsperframe = Npayloadbitsperframe/ofdm_config->bps; + int Npayloadsymsperpacket = Npayloadbitsperpacket/ofdm_config->bps; + + /* Set up LPDC codes */ + + struct LDPC ldpc; + COMP payload_syms[Npayloadsymsperpacket]; + float payload_amps[Npayloadsymsperpacket]; + + if (ldpc_en) { + ldpc_codes_setup(&ldpc, ofdm->codename); + if (verbose > 1) { fprintf(stderr, "using: %s\n", ofdm->codename); } + + /* here is where we can change data bits per frame to a number smaller than LDPC code input data bits_per_frame */ + if (Ndatabitsperpacket) { + set_data_bits_per_frame(&ldpc, Ndatabitsperpacket); + } + + Ndatabitsperpacket = ldpc.data_bits_per_frame; + + assert(Ndatabitsperpacket <= ldpc.ldpc_data_bits_per_frame); + assert(Npayloadbitsperpacket <= ldpc.ldpc_coded_bits_per_frame); + + if (verbose > 1) { + fprintf(stderr, "LDPC codeword data bits = %d\n", ldpc.ldpc_data_bits_per_frame); + fprintf(stderr, "LDPC codeword total bits = %d\n", ldpc.ldpc_coded_bits_per_frame); + fprintf(stderr, "LDPC codeword data bits used = %d\n", Ndatabitsperpacket); + fprintf(stderr, "LDPC codeword total length in modem packet = %d\n", Npayloadbitsperpacket); + } + } + + if (verbose != 0) { + ofdm_set_verbose(ofdm, verbose); + + fprintf(stderr, "Phase Estimate Switching: "); + + switch (phase_est_bandwidth_mode) { + case 0: fprintf(stderr, "Auto\n"); + break; + case 1: fprintf(stderr, "Locked\n"); + } + } + + complex float rx_syms[Nsymsperpacket]; float rx_amps[Nsymsperpacket]; + for(int i=0; idata_mode == 0) + Ndiscard = NDISCARD; /* backwards compatability with 700D/2020 */ + else + Ndiscard = 1; /* much longer packets, so discrd thresh smaller */ + + float EsNo = 3.0f; + float snr_est_smoothed_dB = 0.0f; + + if (verbose == 2) + fprintf(stderr, "Warning EsNo: %f hard coded\n", EsNo); + + /* More logging */ + COMP payload_syms_log[NFRAMES][Npayloadsymsperframe]; + float payload_amps_log[NFRAMES][Npayloadsymsperframe]; + + for (i = 0; i < NFRAMES; i++) { + for (j = 0; j < Npayloadsymsperframe; j++) { + payload_syms_log[i][j].real = 0.0f; + payload_syms_log[i][j].imag = 0.0f; + payload_amps_log[i][j] = 0.0f; + } + } + + int nin_frame = ofdm_get_nin(ofdm); + + int f = 0; + int finish = 0; + + if (start_secs != 0.0) { + int offset = start_secs*FS*sizeof(short); + fseek(fin, offset, SEEK_SET); + } + + while ((fread(rx_scaled, sizeof (short), nin_frame, fin) == nin_frame) && !finish) { + + bool log_payload_syms = false; + Nerrs_raw = Nerrs_coded = 0; + + /* demod */ + + if (ofdm->sync_state == search) { + ofdm_sync_search_shorts(ofdm, rx_scaled, (OFDM_AMP_SCALE / 2.0f)); + } + + if ((ofdm->sync_state == synced) || (ofdm->sync_state == trial)) { + log_payload_syms = true; + + /* demod the latest modem frame */ + ofdm_demod_shorts(ofdm, rx_bits, rx_scaled, (OFDM_AMP_SCALE / 2.0f)); + + /* accumulate a buffer of data symbols for this packet */ + for(i=0; irx_np, sizeof(complex float)*Nsymsperframe); + memcpy(&rx_amps[Nsymsperpacket-Nsymsperframe], ofdm->rx_amp, sizeof(float)*Nsymsperframe); + + /* look for UW as frames enter packet buffer, note UW may span several modem frames */ + int st_uw = Nsymsperpacket - ofdm->nuwframes*Nsymsperframe; + ofdm_extract_uw(ofdm, &rx_syms[st_uw], &rx_amps[st_uw], rx_uw); + + /* SNR estimation and smoothing */ + float snr_est_dB = 10.0f * log10f((ofdm->sig_var / ofdm->noise_var) * ofdm_config->nc * ofdm_config->rs / 3000.0f); + snr_est_smoothed_dB = 0.9f * snr_est_smoothed_dB + 0.1f * snr_est_dB; + + if (ofdm->modem_frame == (ofdm->np-1)) { + + /* we have received enough frames to make a complete packet .... */ + + /* extract payload symbols from packet */ + ofdm_disassemble_qpsk_modem_packet(ofdm, rx_syms, rx_amps, payload_syms, payload_amps, txt_bits); + + if (ldpc_en) { + assert((ofdm_nuwbits + ofdm_ntxtbits + Npayloadbitsperpacket) <= Nbitsperpacket); + + /* run de-interleaver */ + COMP payload_syms_de[Npayloadsymsperpacket]; + float payload_amps_de[Npayloadsymsperpacket]; + gp_deinterleave_comp(payload_syms_de, payload_syms, Npayloadsymsperpacket); + gp_deinterleave_float(payload_amps_de, payload_amps, Npayloadsymsperpacket); + + float llr[Npayloadsymsperpacket]; + uint8_t out_char[Npayloadbitsperpacket]; + + if (testframes == true) { + Terrs += count_uncoded_errors(&ldpc, ofdm_config, &Nerrs_raw, payload_syms_de); + Tbits += Npayloadbitsperpacket; /* not counting errors in txt bits */ + } + + symbols_to_llrs(llr, payload_syms_de, payload_amps_de, + EsNo, ofdm->mean_amp, Npayloadsymsperpacket); + + assert(Ndatabitsperpacket == ldpc.data_bits_per_frame); + if (ldpc.data_bits_per_frame == ldpc.ldpc_data_bits_per_frame) { + /* all data bits in code word used */ + iter = run_ldpc_decoder(&ldpc, out_char, llr, &parityCheckCount); + } else { + /* some unused data bits, set these to known values to strengthen code */ + float llr_full_codeword[ldpc.ldpc_coded_bits_per_frame]; + int unused_data_bits = ldpc.ldpc_data_bits_per_frame - ldpc.data_bits_per_frame; + + // received data bits + for (i = 0; i < ldpc.data_bits_per_frame; i++) + llr_full_codeword[i] = llr[i]; + // known bits ... so really likely + for (i = ldpc.data_bits_per_frame; i < ldpc.ldpc_data_bits_per_frame; i++) + llr_full_codeword[i] = -100.0; + // parity bits at end + for (i = ldpc.ldpc_data_bits_per_frame; i < ldpc.ldpc_coded_bits_per_frame; i++) + llr_full_codeword[i] = llr[i - unused_data_bits]; + + iter = run_ldpc_decoder(&ldpc, out_char, llr_full_codeword, &parityCheckCount); + } + + if (testframes == true) { + /* construct payload data bits */ + uint8_t payload_data_bits[Ndatabitsperpacket]; + ofdm_generate_payload_data_bits(payload_data_bits, Ndatabitsperpacket); + + Nerrs_coded = count_errors(payload_data_bits, out_char, Ndatabitsperpacket); + Terrs_coded += Nerrs_coded; + Tbits_coded += Ndatabitsperpacket; + } + + fwrite(out_char, sizeof (char), Ndatabitsperpacket, fout); + } else { + /* simple hard decision output for uncoded testing, all bits in frame dumped including UW and txt */ + + for (i = 0; i < Nbitsperpacket; i++) { + rx_bits_char[i] = rx_bits[i]; + } + + fwrite(rx_bits_char, sizeof (uint8_t), Nbitsperpacket, fout); + } + + /* optional error counting on uncoded data in non-LDPC testframe mode */ + + if ((testframes == true) && (ldpc_en == 0)) { + /* build up a test frame consisting of unique word, txt bits, and psuedo-random + uncoded payload bits. The psuedo-random generator is the same as Octave so + it can interoperate with ofdm_tx.m/ofdm_rx.m */ + + uint8_t payload_bits[Npayloadbitsperpacket]; + uint8_t txt_bits[ofdm_ntxtbits]; memset(txt_bits, 0, ofdm_ntxtbits); + uint8_t tx_bits[Nbitsperpacket]; + ofdm_generate_payload_data_bits(payload_bits, Npayloadbitsperpacket); + ofdm_assemble_qpsk_modem_packet(ofdm, tx_bits, payload_bits, txt_bits); + + /* count errors across UW, payload, txt bits */ + int rx_bits[Nbitsperpacket]; + int dibit[2]; + assert(ofdm->bps == 2); /* this only works for QPSK at this stage */ + for(int s=0; s= Ndiscard) { + Terrs2 += Nerrs_raw; + Tbits2 += Nbitsperpacket; + } + } + packet_count++; + } + + frame_count++; + } + + /* per-frame modem processing */ + + nin_frame = ofdm_get_nin(ofdm); + + if (ofdm->data_mode == 0) + ofdm_sync_state_machine(ofdm, rx_uw); + else + ofdm_sync_state_machine2(ofdm, rx_uw); + + /* act on any events returned by state machine */ + + if (ofdm->sync_start == true) { + Terrs = Tbits = Terrs2 = Tbits2 = Terrs_coded = Tbits_coded = frame_count = packet_count = 0; + Nerrs_raw = 0; + Nerrs_coded = 0; + } + + if (verbose >= 2) { + fprintf(stderr, "%3d nin: %4d st: %-6s euw: %2d %1d mf: %2d f: %5.1f pbw: %d eraw: %3d ecdd: %3d iter: %3d pcc: %3d\n", + f, nin_frame, + statemode[ofdm->last_sync_state], + ofdm->uw_errors, + ofdm->sync_counter, + ofdm->modem_frame, + ofdm->foff_est_hz, + ofdm->phase_est_bandwidth, + Nerrs_raw, Nerrs_coded, iter, parityCheckCount); + + /* detect a successful sync for time to sync tests */ + if ((time_to_sync < 0) && ((ofdm->sync_state == synced) || (ofdm->sync_state == trial))) + if ((parityCheckCount > 80) && (iter != 100)) + time_to_sync = (float)(f+1)*ofdm_get_samples_per_frame(ofdm)/FS; + + } + + /* optional logging of states */ + + if (log_active == true) { + /* note corrected phase (rx no phase) is one big linear array for frame */ + + for (i = 0; i < ofdm_rowsperframe * ofdm_config->nc; i++) { + rx_np_log[ofdm_rowsperframe * ofdm_config->nc * f + i].real = crealf(ofdm->rx_np[i]); + rx_np_log[ofdm_rowsperframe * ofdm_config->nc * f + i].imag = cimagf(ofdm->rx_np[i]); + } + + /* note phase/amp ests the same for each col, but check them all anyway */ + + for (i = 0; i < ofdm_rowsperframe; i++) { + for (j = 0; j < ofdm_config->nc; j++) { + phase_est_pilot_log[ofdm_rowsperframe * f + i][j] = ofdm->aphase_est_pilot_log[ofdm_config->nc * i + j]; + rx_amp_log[ofdm_rowsperframe * ofdm_config->nc * f + ofdm_config->nc * i + j] = ofdm->rx_amp[ofdm_config->nc * i + j]; + } + } + + foff_hz_log[f] = ofdm->foff_est_hz; + timing_est_log[f] = ofdm->timing_est + 1; /* offset by 1 to match Octave */ + + snr_est_log[f] = snr_est_smoothed_dB; + + if (log_payload_syms == true) { + for (i = 0; i < Npayloadsymsperpacket; i++) { + payload_syms_log[f][i].real = payload_syms[i].real; + payload_syms_log[f][i].imag = payload_syms[i].imag; + payload_amps_log[f][i] = payload_amps[i]; + } + } + + if (f == (logframes - 1)) + log_active = false; + } + + if (len_secs != 0.0) { + float secs = (float)f*ofdm_get_samples_per_frame(ofdm)/FS; + if (secs >= len_secs) finish = 1; + } + + if (skip_secs != 0.0) { + /* big nasty timing error */ + float secs = (float)f*ofdm_get_samples_per_frame(ofdm)/FS; + if (secs >= skip_secs) { + assert(fread(rx_scaled, sizeof (short), nin_frame/2, fin) == nin_frame/2); + fprintf(stderr," Skip! Just introduced a nasty big timing slip\n"); + skip_secs = 0.0; /* make sure we just introduce one error */ + } + } + + f++; + } + + ofdm_destroy(ofdm); + + if (input_specified == true) + fclose(fin); + + if (output_specified == true) + fclose(fout); + + /* optionally dump Octave files */ + + if (log_specified == true) { + octave_save_float(foct, "phase_est_pilot_log_c", (float*) phase_est_pilot_log, ofdm_rowsperframe*NFRAMES, ofdm_config->nc, ofdm_config->nc); + octave_save_complex(foct, "rx_np_log_c", (COMP*) rx_np_log, 1, ofdm_rowsperframe * ofdm_config->nc*NFRAMES, ofdm_rowsperframe * ofdm_config->nc * NFRAMES); + octave_save_float(foct, "rx_amp_log_c", (float*) rx_amp_log, 1, ofdm_rowsperframe * ofdm_config->nc*NFRAMES, ofdm_rowsperframe * ofdm_config->nc * NFRAMES); + octave_save_float(foct, "foff_hz_log_c", foff_hz_log, NFRAMES, 1, 1); + octave_save_int(foct, "timing_est_log_c", timing_est_log, NFRAMES, 1); + octave_save_float(foct, "snr_est_log_c", snr_est_log, NFRAMES, 1, 1); + octave_save_complex(foct, "payload_syms_log_c", (COMP*) payload_syms_log, NFRAMES, Npayloadsymsperpacket, Npayloadsymsperpacket); + octave_save_float(foct, "payload_amps_log_c", (float*) payload_amps_log, NFRAMES, Npayloadsymsperpacket, Npayloadsymsperpacket); + + fclose(foct); + } + + if (verbose == 2) + printf("time_to_sync: %f\n", time_to_sync); + + if (testframes == true) { + float uncoded_ber = (float) Terrs / Tbits; + float coded_ber = 0.0; + + if (verbose != 0) { + fprintf(stderr, "BER......: %5.4f Tbits: %5d Terrs: %5d Tpackets: %5d\n", uncoded_ber, Tbits, Terrs, packet_count); + + if ((ldpc_en == 0) && (packet_count > Ndiscard)) { + fprintf(stderr, "BER2.....: %5.4f Tbits: %5d Terrs: %5d\n", (float) Terrs2 / Tbits2, Tbits2, Terrs2); + } + } + + /* set return code for Ctest, 1 for fail */ + + if (ldpc_en) { + coded_ber = (float) Terrs_coded / Tbits_coded; + + if (verbose != 0) + fprintf(stderr, "Coded BER: %5.4f Tbits: %5d Terrs: %5d\n", coded_ber, Tbits_coded, Terrs_coded); + if ((Tbits_coded == 0) || (coded_ber >= 0.01f)) + return 1; + } + + if ((Tbits == 0) || (uncoded_ber >= 0.1f)) + return 1; + } + + return 0; +} diff --git a/libcodec2-android/src/codec2/src/ofdm_get_test_bits.c b/libcodec2-android/src/codec2/src/ofdm_get_test_bits.c new file mode 100644 index 0000000..1fe7e21 --- /dev/null +++ b/libcodec2-android/src/codec2/src/ofdm_get_test_bits.c @@ -0,0 +1,164 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: ofdm_get_test_bits.c + AUTHOR......: David Rowe + DATE CREATED: Mar 2018 + + Generate input for the OFDM modem in either coded or uncoded mode. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2018 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#define OPTPARSE_IMPLEMENTATION +#define OPTPARSE_API static +#include "optparse.h" + +#include +#include +#include +#include +#include +#include + +#include "codec2_ofdm.h" +#include "ofdm_internal.h" +#include "ldpc_codes.h" +#include "interldpc.h" +#include "varicode.h" + +#define IS_DIR_SEPARATOR(c) ((c) == '/') + +static const char *progname; + +void opt_help() { + fprintf(stderr, "\nUsage: %s [options]\n\n", progname); + fprintf(stderr, " --out filename Name of OutputOneCharPerBitFile\n"); + fprintf(stderr, " --frames n Number of frames to output (default 10)\n"); + fprintf(stderr, " --ldpc Frame length (112) for LDPC (else 238) for Plain (default Plain)\n"); + fprintf(stderr, " --verbose Output variable assigned values to stderr\n\n"); + + exit(-1); +} + +int main(int argc, char *argv[]) +{ + struct OFDM *ofdm; + struct LDPC ldpc; + FILE *fout; + char *fout_name = NULL; + int opt, verbose, Nframes, n; + int ldpc_en, frames, output_specified; + + char *pn = argv[0] + strlen (argv[0]); + + while (pn != argv[0] && !IS_DIR_SEPARATOR (pn[-1])) + --pn; + + progname = pn; + + /* Turn off stream buffering */ + + setvbuf(stdout, NULL, _IONBF, BUFSIZ); + + fout = stdout; + output_specified = 0; + frames = 10; + ldpc_en = 0; + verbose = 0; + + struct optparse options; + + struct optparse_long longopts[] = { + {"out", 'o', OPTPARSE_REQUIRED}, + {"frames", 'n', OPTPARSE_REQUIRED}, + {"ldpc", 'l', OPTPARSE_NONE}, + {"verbose", 'v', OPTPARSE_NONE}, + {0, 0, 0} + }; + + optparse_init(&options, argv); + + while ((opt = optparse_long(&options, longopts, NULL)) != -1) { + switch (opt) { + case '?': + opt_help(); + case 'o': + fout_name = options.optarg; + output_specified = 1; + break; + case 'n': + frames = atoi(options.optarg); + break; + case 'l': + ldpc_en = 1; + break; + case 'v': + verbose = 1; + } + } + + /* Print remaining arguments to give user a hint */ + + char *arg; + + while ((arg = optparse_arg(&options))) + fprintf(stderr, "%s\n", arg); + + if (output_specified) { + if ((fout = fopen(fout_name, "wb")) == NULL) { + fprintf(stderr, "Error opening output bit file: %s\n", fout_name); + exit(-1); + } + } + + Nframes = frames; + + if (verbose) + fprintf(stderr, "Nframes: %d\n", Nframes); + + ofdm = ofdm_create(NULL); + assert(ofdm != NULL); + + int ofdm_bitsperpacket = ofdm_get_bits_per_packet(ofdm); + int Ndatabitsperpacket = ofdm_bitsperpacket - ofdm->nuwbits - ofdm->ntxtbits; + + /* Optionally set up default LPDC code */ + if (ldpc_en) { + fprintf(stderr, "codename: %s\n", ofdm->codename); + ldpc_codes_setup(&ldpc, ofdm->codename); + Ndatabitsperpacket = ldpc.ldpc_data_bits_per_frame; + } + + if (verbose) + fprintf(stderr, "Ndatabitsperpacket: %d\n", Ndatabitsperpacket); + + fprintf(stderr, "Ndatabitsperpacket = %d\n", Ndatabitsperpacket); + uint8_t data_bits[Ndatabitsperpacket]; + ofdm_generate_payload_data_bits(data_bits, Ndatabitsperpacket); + for (n = 0; n. + */ + +#ifndef OFDM_INTERNAL_H +#define OFDM_INTERNAL_H + +#include +#include +#include + +#include "codec2_ofdm.h" +#include "filter.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +#ifndef M_PI +#define M_PI 3.14159265358979323846f +#endif + +#define TAU (2.0f * M_PI) +#define ROT45 (M_PI / 4.0f) + +#define cmplx(value) (cosf(value) + sinf(value) * I) +#define cmplxconj(value) (cosf(value) + sinf(value) * -I) + +/* modem state machine states */ +typedef enum { + search, + trial, + synced +} State; + +typedef enum { + unsync, /* force sync state machine to lose sync, and search for new sync */ + autosync, /* falls out of sync automatically */ + manualsync /* fall out of sync only under operator control */ +} Sync; + +/* phase estimator bandwidth options */ + +typedef enum { + low_bw, /* can only track a narrow freq offset, but accurate */ + high_bw /* can track wider freq offset, but less accurate at low SNR */ +} PhaseEstBandwidth; + +/* + * User-defined configuration for OFDM modem. Used to set up + * constants at init time, e.g. for different bit rate modems. + */ + +struct OFDM_CONFIG { + float tx_centre; /* TX Centre Audio Frequency */ + float rx_centre; /* RX Centre Audio Frequency */ + float fs; /* Sample Frequency */ + float rs; /* Symbol Rate */ + float ts; /* symbol duration */ + float tcp; /* Cyclic Prefix duration */ + float timing_mx_thresh; + + int nc; /* Number of carriers */ + int ns; /* Number of Symbol frames */ + int np; /* number of modem frames per packet */ + int bps; /* Bits per Symbol */ + int txtbits; /* number of auxiliary data bits */ + int nuwbits; /* number of unique word bits */ + int bad_uw_errors; + int ftwindowwidth; + int data_mode; /* non-zero if this is a data mode */ + char *codename; /* name of LDPC code used with this mode */ +}; + +struct OFDM { + struct OFDM_CONFIG config; + + /* + * See 700D Part 4 Acquisition blog post and ofdm_dev.m routines + * for how this was set + */ + float timing_mx_thresh; + + int nc; + int ns; /* NS-1 = data symbols between pilots */ + int bps; /* Bits per symbol */ + int m; /* duration of each symbol in samples */ + int ncp; /* duration of CP in samples */ + int np; /* number of modem frames per packet. In some modes we want */ + /* the total packet of data to span multiple modem frames, e.g. HF data */ + /* and/or when the FEC codeword is larger than the one */ + /* modem frame. In other modes (e.g. 700D/2020) Np=1, ie the modem frame */ + /* is the same length as the packet/FEC frame. */ + int ftwindowwidth; + int bitsperframe; /* total bits in all data symbols in modem frame */ + int bitsperpacket; /* total bits in all data symbols in a packet */ + int rowsperframe; + int samplespersymbol; + int samplesperframe; + int max_samplesperframe; + int nuwframes; + int nrxbuf; + int ntxtbits; /* reserve bits/frame for aux text information */ + int nuwbits; /* number of unique word bits used to achieve packet frame sync */ + int bad_uw_errors; + + float tx_centre; /* TX Center frequency */ + float rx_centre; /* RX Center frequency */ + float fs; /* Sample rate */ + float ts; /* Symbol cycle time */ + float rs; /* Symbol rate */ + float tcp; /* Cyclic prefix duration */ + float tpacket; /* time for one packet in ms */ + float inv_m; /* 1/m */ + float tx_nlower; /* TX lowest carrier freq */ + float rx_nlower; /* RX lowest carrier freq */ + float doc; /* division of radian circle */ + + // Pointers + + struct quisk_cfFilter *tx_bpf; + + complex float *pilot_samples; + complex float *rxbuf; + complex float *pilots; + complex float **rx_sym; + complex float *rx_np; + complex float *tx_uw_syms; + + float *rx_amp; + float *aphase_est_pilot_log; + + uint8_t *tx_uw; + int *uw_ind; + int *uw_ind_sym; + + // State enums + State sync_state; + State last_sync_state; + + // Sync enums + Sync sync_mode; + + // Phase enums + PhaseEstBandwidth phase_est_bandwidth; + + int phase_est_bandwidth_mode; + + // Complex + complex float foff_metric; + + // Float + float foff_est_gain; + float foff_est_hz; + float timing_mx; + float coarse_foff_est_hz; + float timing_norm; + float sig_var; + float noise_var; + float mean_amp; + + // Integer + int clock_offset_counter; + int verbose; + int sample_point; + int timing_est; + int timing_valid; + int nin; + int uw_errors; + int sync_counter; + int frame_count; + int modem_frame; /* increments for every modem frame in packet */ + int data_mode; + + // Boolean + bool sync_start; + bool sync_end; + bool timing_en; + bool foff_est_en; + bool phase_est_en; + bool tx_bpf_en; + bool dpsk_en; + + char *codename; +}; + +/* Prototypes */ + +complex float qpsk_mod(int *); +complex float qam16_mod(int *); +void qpsk_demod(complex float, int *); +void qam16_demod(complex float, int *); +void ofdm_txframe(struct OFDM *, complex float *, complex float []); +void ofdm_assemble_qpsk_modem_packet(struct OFDM *, uint8_t [], uint8_t [], uint8_t []); +void ofdm_assemble_qpsk_modem_packet_symbols(struct OFDM *, complex float [], COMP [], uint8_t []); +void ofdm_disassemble_qpsk_modem_packet(struct OFDM *, complex float rx_syms[], float rx_amps[], COMP [], float [], short []); +void ofdm_extract_uw(struct OFDM *ofdm, complex float rx_syms[], float rx_amps[], uint8_t rx_uw[]); +void ofdm_rand(uint16_t [], int); +void ofdm_generate_payload_data_bits(uint8_t [], int); +int ofdm_get_phase_est_bandwidth_mode(struct OFDM *); +void ofdm_set_phase_est_bandwidth_mode(struct OFDM *, int); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/libcodec2-android/src/codec2/src/ofdm_mod.c b/libcodec2-android/src/codec2/src/ofdm_mod.c new file mode 100644 index 0000000..95ce4a9 --- /dev/null +++ b/libcodec2-android/src/codec2/src/ofdm_mod.c @@ -0,0 +1,404 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: ofdm_mod.c + AUTHOR......: David Rowe + DATE CREATED: March 2018 + + Given an input file of bits (note one bit per char format), outputs + a raw file (8kHz, 16 bit shorts) of OFDM modem samples ready to send + over a HF radio channel. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2018 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . + */ + +#define OPTPARSE_IMPLEMENTATION +#define OPTPARSE_API static +#include "optparse.h" + +#include +#include +#include +#include +#include + +#include "codec2_ofdm.h" +#include "ofdm_internal.h" +#include "ofdm_mode.h" +#include "gp_interleaver.h" +#include "ldpc_codes.h" +#include "interldpc.h" +#include "varicode.h" + +#define IS_DIR_SEPARATOR(c) ((c) == '/') + +static const char *progname; + +void opt_help() { + fprintf(stderr, "\nusage: %s [options]\n\n", progname); + fprintf(stderr, " --in filename Name of InputOneCharPerBitFile\n"); + fprintf(stderr, " --out filename Name of OutputModemRawFile\n"); + fprintf(stderr, " --mode modeName Predefined mode 700D|2020|datac1\n"); + fprintf(stderr, " --nc [17..62] Number of Carriers (17 default, 62 max)\n"); + fprintf(stderr, " --ns symbols One pilot every ns symbols (8 default)\n"); + fprintf(stderr, " --tcp Nsecs Cyclic Prefix Duration (.002 default)\n"); + fprintf(stderr, " --ts Nsecs Symbol Duration (.018 default)\n"); + fprintf(stderr, " --testframes Nsecs Transmit test frames (adjusts test frames for raw and LDPC modes)\n"); + fprintf(stderr, " --tx_freq freq Set an optional modulation TX centre frequency (1500.0 default)\n"); + fprintf(stderr, " --rx_freq freq Set an optional modulation RX centre frequency (1500.0 default)\n\n"); + fprintf(stderr, " --verbose [1|2|3] Verbose output level to stderr (default off)\n"); + fprintf(stderr, " --txbpf Transmit band pass filter boolean (default off)\n"); + fprintf(stderr, " --text Include a standard text message boolean (default off)\n"); + fprintf(stderr, " -i --ldpc [1|2] Run LDPC decoder (1 -> (224,112) 700D code, 2 -> (504,396) 2020 code).\n" + " In testframe mode raw and coded errors will be counted.\n"); + fprintf(stderr, " -p --databits numBits Number of data bits used in LDPC codeword.\n"); + fprintf(stderr, " --dpsk Differential PSK.\n"); + fprintf(stderr, "\n"); + exit(-1); +} + +int main(int argc, char *argv[]) { + char *fin_name, *fout_name; + int i, opt, val; + + char *pn = argv[0] + strlen(argv[0]); + + while (pn != argv[0] && !IS_DIR_SEPARATOR(pn[-1])) + --pn; + + progname = pn; + + /* Turn off stream buffering */ + + setvbuf(stdin, NULL, _IONBF, BUFSIZ); + setvbuf(stdout, NULL, _IONBF, BUFSIZ); + + FILE *fin = stdin; + FILE *fout = stdout; + + /* set for LDPC coded or uncoded frames */ + + int ldpc_en = 0; + + int input_specified = 0; + int output_specified = 0; + int verbose = 0; + int txbpf_en = 0; + int testframes = 0; + int use_text = 0; + int dpsk = 0; + + int Npackets = 0; + int Nsec = 0; + + /* set up the default modem config */ + struct OFDM_CONFIG *ofdm_config = (struct OFDM_CONFIG *) calloc(1, sizeof (struct OFDM_CONFIG)); + assert(ofdm_config != NULL); + char mode[32] = "700D"; + ofdm_init_mode(mode, ofdm_config); + + int Ndatabitsperpacket = 0; + struct optparse options; + + struct optparse_long longopts[] = { + {"in", 'a', OPTPARSE_REQUIRED}, + {"out", 'b', OPTPARSE_REQUIRED}, + {"nc", 'c', OPTPARSE_REQUIRED}, + {"ns", 'm', OPTPARSE_REQUIRED}, + {"tcp", 'd', OPTPARSE_REQUIRED}, + {"ts", 'e', OPTPARSE_REQUIRED}, + {"testframes", 'f', OPTPARSE_REQUIRED}, + {"tx_freq", 'n', OPTPARSE_REQUIRED}, + {"rx_freq", 'i', OPTPARSE_REQUIRED}, + {"ldpc", 'j', OPTPARSE_NONE}, + {"txbpf", 'k', OPTPARSE_NONE}, + {"text", 'l', OPTPARSE_NONE}, + {"verbose", 'v', OPTPARSE_REQUIRED}, + {"databits", 'p', OPTPARSE_REQUIRED}, + {"dpsk", 'q', OPTPARSE_NONE}, + {"mode", 'g', OPTPARSE_REQUIRED}, + {"help", 'h', OPTPARSE_NONE}, + {0, 0, 0} + }; + + optparse_init(&options, argv); + + while ((opt = optparse_long(&options, longopts, NULL)) != -1) { + switch (opt) { + case '?': + case 'h': + opt_help(); + case 'a': + fin_name = options.optarg; + input_specified = 1; + break; + case 'b': + fout_name = options.optarg; + output_specified = 1; + break; + case 'c': + val = atoi(options.optarg); + + if (val > 62 || val < 17) { + opt_help(); + } else { + ofdm_config->nc = val; + } + break; + case 'd': + ofdm_config->tcp = atof(options.optarg); + break; + case 'e': + ofdm_config->ts = atof(options.optarg); + ofdm_config->rs = 1.0f / ofdm_config->ts; + break; + case 'm': + ofdm_config->ns = atoi(options.optarg); + break; + case 'f': + testframes = 1; + Nsec = atoi(options.optarg); + break; + case 'g': + strcpy(mode, options.optarg); + ofdm_init_mode(mode, ofdm_config); + break; + case 'n': + ofdm_config->tx_centre = atof(options.optarg); + break; + case 'i': + ofdm_config->rx_centre = atof(options.optarg); + break; + case 'j': + ldpc_en = 1; + break; + case 'k': + txbpf_en = 1; + break; + case 'l': + use_text = 1; + break; + case 'p': + Ndatabitsperpacket = atoi(options.optarg); + break; + case 'q': + dpsk = 1; + break; + case 'v': + verbose = atoi(options.optarg); + if (verbose < 0 || verbose > 3) + verbose = 0; + } + } + + /* Print remaining arguments to give user a hint */ + + char *arg; + + while ((arg = optparse_arg(&options))) + fprintf(stderr, "%s\n", arg); + + if (input_specified) { + if ((fin = fopen(fin_name, "rb")) == NULL) { + fprintf(stderr, "Error opening input bits file: %s\n", fin_name); + exit(-1); + } + } + + if (output_specified) { + if ((fout = fopen(fout_name, "wb")) == NULL) { + fprintf(stderr, "Error opening output modem sample file: %s\n", fout_name); + exit(-1); + } + } + + /* init the modem with our (optinally) custom config */ + struct OFDM *ofdm = ofdm_create(ofdm_config); + assert(ofdm != NULL); + + free(ofdm_config); + + /* Get a copy of the completed modem config (ofdm_create() fills in more parameters) */ + ofdm_config = ofdm_get_config_param(ofdm); + + /* ste up some useful constants */ + + int Nbitsperpacket = ofdm_get_bits_per_packet(ofdm); + int Npayloadbitsperpacket = Nbitsperpacket - ofdm->nuwbits - ofdm->ntxtbits; + int Nsamperpacket = ofdm_get_samples_per_packet(ofdm); + + /* Set up LPDC code */ + + struct LDPC ldpc; + if (ldpc_en) { + ldpc_codes_setup(&ldpc, ofdm->codename); + if (verbose > 1) { fprintf(stderr, "using: %s\n", ofdm->codename); } + + /* here is where we can change data bits per frame to a number smaller than LDPC code input data bits_per_frame */ + if (Ndatabitsperpacket) { + set_data_bits_per_frame(&ldpc, Ndatabitsperpacket); + } + + Ndatabitsperpacket = ldpc.data_bits_per_frame; + + assert(Ndatabitsperpacket <= ldpc.ldpc_data_bits_per_frame); + assert(Npayloadbitsperpacket <= ldpc.ldpc_coded_bits_per_frame); + + if (verbose > 1) { + fprintf(stderr, "LDPC codeword data bits = %d\n", ldpc.ldpc_data_bits_per_frame); + fprintf(stderr, "LDPC codeword total bits = %d\n", ldpc.ldpc_coded_bits_per_frame); + fprintf(stderr, "LDPC codeword data bits used = %d\n", Ndatabitsperpacket); + fprintf(stderr, "LDPC codeword total length in modem packet = %d\n", Npayloadbitsperpacket); + } + } + else { + Ndatabitsperpacket = Npayloadbitsperpacket; + } + + if (verbose) { + ofdm_set_verbose(ofdm, verbose); + fprintf(stderr, "Ndatabitsperpacket: %d Npayloadbitsperpacket: %d Nsamperpacket: %d\n", + Ndatabitsperpacket, Npayloadbitsperpacket, Nsamperpacket); + } + + if (testframes) { + Npackets = round(Nsec/ofdm->tpacket); + if (verbose) + fprintf(stderr, "Npackets: %d\n", Npackets); + } + + if (txbpf_en) { + ofdm_set_tx_bpf(ofdm, 1); + } + if (dpsk) { + ofdm_set_dpsk(ofdm, 1); + } + + uint8_t txt_bits[ofdm->ntxtbits]; + memset(txt_bits, 0, ofdm->ntxtbits); + char text_str[] = "cq cq cq hello world\r"; // Add text bits to match other tests + char *ptr_text = text_str; + + short tx_varicode_bits[VARICODE_MAX_BITS]; + int nvaricode_bits = 0; + int varicode_bit_index = 0; + + complex float tx_sams[Nsamperpacket]; + short tx_scaled[Nsamperpacket]; + + if (verbose > 1) { + ofdm_print_info(ofdm); + } + + /* main loop ----------------------------------------------------------------*/ + + int packet = 0; + uint8_t data_bits[Ndatabitsperpacket]; + while (fread(data_bits, sizeof (uint8_t), Ndatabitsperpacket, fin) == Ndatabitsperpacket) { + + if (ldpc_en) { + /* fancy LDPC encoded frames ----------------------------*/ + + /* optionally overwrite input data with test frame of + payload data bits known to demodulator */ + + if (testframes) { + + if (use_text) { + // Get text bits + int nspare = ofdm->ntxtbits; + int k; + + for (k = 0; k < nspare; k++) { + if (nvaricode_bits) { + txt_bits[k] = tx_varicode_bits[varicode_bit_index++]; + nvaricode_bits--; + } + + if (nvaricode_bits == 0) { + /* get new char and encode */ + char s[2]; + s[0] = *ptr_text++; + + if (*ptr_text == 0) + ptr_text = &text_str[0]; + + nvaricode_bits = varicode_encode(tx_varicode_bits, s, VARICODE_MAX_BITS, 1, 1); + varicode_bit_index = 0; + } + } + } + + ofdm_generate_payload_data_bits(data_bits, Ndatabitsperpacket); + } + + ofdm_ldpc_interleave_tx(ofdm, &ldpc, tx_sams, data_bits, txt_bits); + + for (i = 0; i < Nsamperpacket; i++) { + tx_scaled[i] = OFDM_AMP_SCALE * crealf(tx_sams[i]); + } + + fwrite(tx_scaled, sizeof (short), Nsamperpacket, fout); + } else { + /* just modulate uncoded raw bits ------------------------------------*/ + + /* in uncoded mode entire payload is input data bits */ + assert(Ndatabitsperpacket == Npayloadbitsperpacket); + + if (testframes) { + /* build up a test frame consisting of unique word, txt bits, and psuedo-random + uncoded payload bits. The psuedo-random generator is the same as Octave so + it can interoperate with ofdm_tx.m/ofdm_rx.m */ + + ofdm_generate_payload_data_bits(data_bits, Npayloadbitsperpacket); + } + + /* assemble packet of bits then modulate */ + uint8_t tx_bits_char[Nbitsperpacket]; + ofdm_assemble_qpsk_modem_packet(ofdm, tx_bits_char, data_bits, txt_bits); + int tx_bits[Nbitsperpacket]; + for (i = 0; i < Nbitsperpacket; i++) tx_bits[i] = tx_bits_char[i]; + COMP tx_sams[Nsamperpacket]; + ofdm_mod(ofdm, tx_sams, tx_bits); + + /* scale and save to disk as shorts */ + for (i = 0; i < Nsamperpacket; i++) + tx_scaled[i] = tx_sams[i].real * OFDM_AMP_SCALE; + fwrite(tx_scaled, sizeof (short), Nsamperpacket, fout); + } + + packet++; + + if (testframes && (packet >= Npackets)) + break; + } + + if (input_specified) + fclose(fin); + + if (output_specified) + fclose(fout); + + if (verbose) + fprintf(stderr, "%d packets processed\n", packet); + + ofdm_destroy(ofdm); + + return 0; +} + diff --git a/libcodec2-android/src/codec2/src/ofdm_mode.c b/libcodec2-android/src/codec2/src/ofdm_mode.c new file mode 100644 index 0000000..89ed43a --- /dev/null +++ b/libcodec2-android/src/codec2/src/ofdm_mode.c @@ -0,0 +1,68 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: ofdm_mode.c + AUTHORS.....: David Rowe & Steve Sampson + DATE CREATED: July 2020 + + Mode specific configuration for OFDM modem. + +\*---------------------------------------------------------------------------*/ + +#include +#include "comp.h" +#include "ofdm_internal.h" +#include "ofdm_mode.h" + +void ofdm_init_mode(char mode[], struct OFDM_CONFIG *config) { + assert(mode != NULL); + assert(config != NULL); + + /* Fill in default values - 700D */ + + config->nc = 17; /* Number of carriers */ + config->np = 1; + config->ns = 8; /* Number of Symbols per modem frame */ + config->ts = 0.018f; + config->tcp = .002f; /* Cyclic Prefix duration */ + config->tx_centre = 1500.0f; /* TX Carrier Frequency */ + config->rx_centre = 1500.0f; /* RX Carrier Frequency */ + config->fs = 8000.0f; /* Sample rate */ + config->txtbits = 4; + config->bps = 2; /* Bits per Symbol */ + config->nuwbits = 5 * config->bps; /* default is 5 symbols of Unique Word bits */ + config->bad_uw_errors = 3; + config->ftwindowwidth = 11; + config->timing_mx_thresh = 0.30f; + config->data_mode = 0; + config->codename = "HRA_112_112"; + + if (strcmp(mode,"700D") == 0) { + } else if (strcmp(mode,"2020") == 0) { + config->ts = 0.0205; config->nc = 31; config->codename = "HRAb_396_504"; + } else if (strcmp(mode,"qam16") == 0) { + config->ns=5; config->np=5; config->tcp = 0.004; config->ts = 0.016; config->nc = 33; + config->bps=4; config->txtbits = 0; config->nuwbits = 15*4; config->bad_uw_errors = 5; + config->ftwindowwidth = 32; config->data_mode = 1; + } else if (strcmp(mode,"datac1") == 0) { + config->ns=5; config->np=18; config->tcp = 0.006; config->ts = 0.016; config-> nc = 18; + config->txtbits = 0; config->nuwbits = 12; config->bad_uw_errors = 2; + config->ftwindowwidth = 32; config->data_mode = 1; config->codename = "H2064_516_sparse"; + } else if (strcmp(mode,"datac2") == 0) { + config->ns=5; config->np=36; config->tcp = 0.006; config->ts = 0.016; config->nc = 9; + config->txtbits = 0; config->nuwbits = 12; config->bad_uw_errors = 1; + config->ftwindowwidth = 32; config->data_mode = 1; config->codename = "H2064_516_sparse"; + } else if (strcmp(mode,"datac3") == 0) { + config->ns=5; config->np=11; config->tcp = 0.006; config->ts = 0.016; config->nc = 9; + config->txtbits = 0; config->nuwbits = 24; config->bad_uw_errors = 1; /* TODO 5 */ + config->ftwindowwidth = 32; config->timing_mx_thresh = 0.30; config->data_mode = 1; + config->codename = "H_256_768_22"; + /* TODO custom UW */ + //uint8_t uw[] = {1,1,0,0, 1,0,1,0, 1,1,1,1, 0,0,0,0, 1,1,1,1, 0,0,0,0}; + //memcpy(config->tx_uw, uw, config->nuwbits); + } + else { + assert(0); + } + config->rs=1.0f/config->ts; +} + diff --git a/libcodec2-android/src/codec2/src/ofdm_mode.h b/libcodec2-android/src/codec2/src/ofdm_mode.h new file mode 100644 index 0000000..358beff --- /dev/null +++ b/libcodec2-android/src/codec2/src/ofdm_mode.h @@ -0,0 +1,15 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: ofdm_mode.h + AUTHORS.....: David Rowe & Steve Sampson + DATE CREATED: July 2020 + + Mode specific configuration for OFDM modem. + +\*---------------------------------------------------------------------------*/ + +#ifndef __OFDM_MODE__ +#define __OFDM_MODE__ +void ofdm_init_mode(char mode[], struct OFDM_CONFIG *config); +#endif + diff --git a/libcodec2-android/src/codec2/src/ofdm_put_test_bits.c b/libcodec2-android/src/codec2/src/ofdm_put_test_bits.c new file mode 100644 index 0000000..686bcfa --- /dev/null +++ b/libcodec2-android/src/codec2/src/ofdm_put_test_bits.c @@ -0,0 +1,126 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: ofdm_put_test_bits.c + AUTHOR......: David Rowe + DATE CREATED: Mar 2018 + + Slurps up a stream of test bits generated by ofdm_get_test_bits, useful for + testing ofdm_mod and ofdm_demod. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2018 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include +#include +#include +#include +#include + +#include "codec2_ofdm.h" +#include "ofdm_internal.h" +#include "test_bits_ofdm.h" + +#define LOG_FRAMES 100 +#define NDISCARD 20 + +static struct OFDM *ofdm; + +int opt_exists(char *argv[], int argc, char opt[]) { + int i; + for (i=0; i= NDISCARD) { + Terrs2 += Nerrs; + Tbits2 += Nbitsperframe; + } + + if (verbose) { + printf("f: %d Nerrs: %d aber: %3.2f\n", f, Nerrs, aber); + } + + if (fin == stdin) fflush(stdin); + } + + fclose(fin); + + fprintf(stderr, "BER..: %5.4f Tbits: %5d Terrs: %5d\n", (float)Terrs/Tbits, Tbits, Terrs); + + if (Tbits2 != 0) { + fprintf(stderr, "BER2.: %5.4f Tbits: %5d Terrs: %5d\n", (float)Terrs2/Tbits2, Tbits2, Terrs2); + } + + ofdm_destroy(ofdm); + + return 0; +} + diff --git a/libcodec2-android/src/codec2/src/optparse.h b/libcodec2-android/src/codec2/src/optparse.h new file mode 100644 index 0000000..bc1cc06 --- /dev/null +++ b/libcodec2-android/src/codec2/src/optparse.h @@ -0,0 +1,404 @@ +/* Optparse --- portable, reentrant, embeddable, getopt-like option parser + * + * This is free and unencumbered software released into the public domain. + * + * To get the implementation, define OPTPARSE_IMPLEMENTATION. + * Optionally define OPTPARSE_API to control the API's visibility + * and/or linkage (static, __attribute__, __declspec). + * + * The POSIX getopt() option parser has three fatal flaws. These flaws + * are solved by Optparse. + * + * 1) Parser state is stored entirely in global variables, some of + * which are static and inaccessible. This means only one thread can + * use getopt(). It also means it's not possible to recursively parse + * nested sub-arguments while in the middle of argument parsing. + * Optparse fixes this by storing all state on a local struct. + * + * 2) The POSIX standard provides no way to properly reset the parser. + * This means for portable code that getopt() is only good for one + * run, over one argv with one option string. It also means subcommand + * options cannot be processed with getopt(). Most implementations + * provide a method to reset the parser, but it's not portable. + * Optparse provides an optparse_arg() function for stepping over + * subcommands and continuing parsing of options with another option + * string. The Optparse struct itself can be passed around to + * subcommand handlers for additional subcommand option parsing. A + * full reset can be achieved by with an additional optparse_init(). + * + * 3) Error messages are printed to stderr. This can be disabled with + * opterr, but the messages themselves are still inaccessible. + * Optparse solves this by writing an error message in its errmsg + * field. The downside to Optparse is that this error message will + * always be in English rather than the current locale. + * + * Optparse should be familiar with anyone accustomed to getopt(), and + * it could be a nearly drop-in replacement. The option string is the + * same and the fields have the same names as the getopt() global + * variables (optarg, optind, optopt). + * + * Optparse also supports GNU-style long options with optparse_long(). + * The interface is slightly different and simpler than getopt_long(). + * + * By default, argv is permuted as it is parsed, moving non-option + * arguments to the end. This can be disabled by setting the `permute` + * field to 0 after initialization. + */ +#ifndef OPTPARSE_H +#define OPTPARSE_H + +#ifndef OPTPARSE_API +# define OPTPARSE_API +#endif + +struct optparse { + char **argv; + int permute; + int optind; + int optopt; + char *optarg; + char errmsg[64]; + int subopt; +}; + +enum optparse_argtype { + OPTPARSE_NONE, + OPTPARSE_REQUIRED, + OPTPARSE_OPTIONAL +}; + +struct optparse_long { + const char *longname; + int shortname; + enum optparse_argtype argtype; +}; + +/** + * Initializes the parser state. + */ +OPTPARSE_API +void optparse_init(struct optparse *options, char **argv); + +/** + * Read the next option in the argv array. + * @param optstring a getopt()-formatted option string. + * @return the next option character, -1 for done, or '?' for error + * + * Just like getopt(), a character followed by no colons means no + * argument. One colon means the option has a required argument. Two + * colons means the option takes an optional argument. + */ +OPTPARSE_API +int optparse(struct optparse *options, const char *optstring); + +/** + * Handles GNU-style long options in addition to getopt() options. + * This works a lot like GNU's getopt_long(). The last option in + * longopts must be all zeros, marking the end of the array. The + * longindex argument may be NULL. + */ +OPTPARSE_API +int optparse_long(struct optparse *options, + const struct optparse_long *longopts, + int *longindex); + +/** + * Used for stepping over non-option arguments. + * @return the next non-option argument, or NULL for no more arguments + * + * Argument parsing can continue with optparse() after using this + * function. That would be used to parse the options for the + * subcommand returned by optparse_arg(). This function allows you to + * ignore the value of optind. + */ +OPTPARSE_API +char *optparse_arg(struct optparse *options); + +/* Implementation */ +#ifdef OPTPARSE_IMPLEMENTATION + +#define OPTPARSE_MSG_INVALID "invalid option" +#define OPTPARSE_MSG_MISSING "option requires an argument" +#define OPTPARSE_MSG_TOOMANY "option takes no arguments" + +static int +optparse_error(struct optparse *options, const char *msg, const char *data) +{ + unsigned p = 0; + const char *sep = " -- '"; + while (*msg) + options->errmsg[p++] = *msg++; + while (*sep) + options->errmsg[p++] = *sep++; + while (p < sizeof(options->errmsg) - 2 && *data) + options->errmsg[p++] = *data++; + options->errmsg[p++] = '\''; + options->errmsg[p++] = '\0'; + return '?'; +} + +OPTPARSE_API +void +optparse_init(struct optparse *options, char **argv) +{ + options->argv = argv; + options->permute = 1; + options->optind = 1; + options->subopt = 0; + options->optarg = 0; + options->errmsg[0] = '\0'; +} + +static int +optparse_is_dashdash(const char *arg) +{ + return arg != 0 && arg[0] == '-' && arg[1] == '-' && arg[2] == '\0'; +} + +static int +optparse_is_shortopt(const char *arg) +{ + return arg != 0 && arg[0] == '-' && arg[1] != '-' && arg[1] != '\0'; +} + +static int +optparse_is_longopt(const char *arg) +{ + return arg != 0 && arg[0] == '-' && arg[1] == '-' && arg[2] != '\0'; +} + +static void +optparse_permute(struct optparse *options, int index) +{ + char *nonoption = options->argv[index]; + int i; + for (i = index; i < options->optind - 1; i++) + options->argv[i] = options->argv[i + 1]; + options->argv[options->optind - 1] = nonoption; +} + +static int +optparse_argtype(const char *optstring, char c) +{ + int count = OPTPARSE_NONE; + if (c == ':') + return -1; + for (; *optstring && c != *optstring; optstring++); + if (!*optstring) + return -1; + if (optstring[1] == ':') + count += optstring[2] == ':' ? 2 : 1; + return count; +} + +OPTPARSE_API +int +optparse(struct optparse *options, const char *optstring) +{ + int type; + char *next; + char *option = options->argv[options->optind]; + options->errmsg[0] = '\0'; + options->optopt = 0; + options->optarg = 0; + if (option == 0) { + return -1; + } else if (optparse_is_dashdash(option)) { + options->optind++; /* consume "--" */ + return -1; + } else if (!optparse_is_shortopt(option)) { + if (options->permute) { + int index = options->optind++; + int r = optparse(options, optstring); + optparse_permute(options, index); + options->optind--; + return r; + } else { + return -1; + } + } + option += options->subopt + 1; + options->optopt = option[0]; + type = optparse_argtype(optstring, option[0]); + next = options->argv[options->optind + 1]; + switch (type) { + case -1: { + char str[2] = {0, 0}; + str[0] = option[0]; + options->optind++; + return optparse_error(options, OPTPARSE_MSG_INVALID, str); + } + case OPTPARSE_NONE: + if (option[1]) { + options->subopt++; + } else { + options->subopt = 0; + options->optind++; + } + return option[0]; + case OPTPARSE_REQUIRED: + options->subopt = 0; + options->optind++; + if (option[1]) { + options->optarg = option + 1; + } else if (next != 0) { + options->optarg = next; + options->optind++; + } else { + char str[2] = {0, 0}; + str[0] = option[0]; + options->optarg = 0; + return optparse_error(options, OPTPARSE_MSG_MISSING, str); + } + return option[0]; + case OPTPARSE_OPTIONAL: + options->subopt = 0; + options->optind++; + if (option[1]) + options->optarg = option + 1; + else + options->optarg = 0; + return option[0]; + } + return 0; +} + +OPTPARSE_API +char * +optparse_arg(struct optparse *options) +{ + char *option = options->argv[options->optind]; + options->subopt = 0; + if (option != 0) + options->optind++; + return option; +} + +static int +optparse_longopts_end(const struct optparse_long *longopts, int i) +{ + return !longopts[i].longname && !longopts[i].shortname; +} + +static void +optparse_from_long(const struct optparse_long *longopts, char *optstring) +{ + char *p = optstring; + int i; + for (i = 0; !optparse_longopts_end(longopts, i); i++) { + if (longopts[i].shortname) { + int a; + *p++ = longopts[i].shortname; + for (a = 0; a < (int)longopts[i].argtype; a++) + *p++ = ':'; + } + } + *p = '\0'; +} + +/* Unlike strcmp(), handles options containing "=". */ +static int +optparse_longopts_match(const char *longname, const char *option) +{ + const char *a = option, *n = longname; + if (longname == 0) + return 0; + for (; *a && *n && *a != '='; a++, n++) + if (*a != *n) + return 0; + return *n == '\0' && (*a == '\0' || *a == '='); +} + +/* Return the part after "=", or NULL. */ +static char * +optparse_longopts_arg(char *option) +{ + for (; *option && *option != '='; option++); + if (*option == '=') + return option + 1; + else + return 0; +} + +static int +optparse_long_fallback(struct optparse *options, + const struct optparse_long *longopts, + int *longindex) +{ + int result; + char optstring[96 * 3 + 1]; /* 96 ASCII printable characters */ + optparse_from_long(longopts, optstring); + result = optparse(options, optstring); + if (longindex != 0) { + *longindex = -1; + if (result != -1) { + int i; + for (i = 0; !optparse_longopts_end(longopts, i); i++) + if (longopts[i].shortname == options->optopt) + *longindex = i; + } + } + return result; +} + +OPTPARSE_API +int +optparse_long(struct optparse *options, + const struct optparse_long *longopts, + int *longindex) +{ + int i; + char *option = options->argv[options->optind]; + if (option == 0) { + return -1; + } else if (optparse_is_dashdash(option)) { + options->optind++; /* consume "--" */ + return -1; + } else if (optparse_is_shortopt(option)) { + return optparse_long_fallback(options, longopts, longindex); + } else if (!optparse_is_longopt(option)) { + if (options->permute) { + int index = options->optind++; + int r = optparse_long(options, longopts, longindex); + optparse_permute(options, index); + options->optind--; + return r; + } else { + return -1; + } + } + + /* Parse as long option. */ + options->errmsg[0] = '\0'; + options->optopt = 0; + options->optarg = 0; + option += 2; /* skip "--" */ + options->optind++; + for (i = 0; !optparse_longopts_end(longopts, i); i++) { + const char *name = longopts[i].longname; + if (optparse_longopts_match(name, option)) { + char *arg; + if (longindex) + *longindex = i; + options->optopt = longopts[i].shortname; + arg = optparse_longopts_arg(option); + if (longopts[i].argtype == OPTPARSE_NONE && arg != 0) { + return optparse_error(options, OPTPARSE_MSG_TOOMANY, name); + } if (arg != 0) { + options->optarg = arg; + } else if (longopts[i].argtype == OPTPARSE_REQUIRED) { + options->optarg = options->argv[options->optind]; + if (options->optarg == 0) + return optparse_error(options, OPTPARSE_MSG_MISSING, name); + else + options->optind++; + } + return options->optopt; + } + } + return optparse_error(options, OPTPARSE_MSG_INVALID, option); +} + +#endif /* OPTPARSE_IMPLEMENTATION */ +#endif /* OPTPARSE_H */ + diff --git a/libcodec2-android/src/codec2/src/os.h b/libcodec2-android/src/codec2/src/os.h new file mode 100644 index 0000000..14b4713 --- /dev/null +++ b/libcodec2-android/src/codec2/src/os.h @@ -0,0 +1,53 @@ +/* Generate using fir1(47,1/2) in Octave */ + +static const float fdmdv_os_filter[]= { + -0.0008215855034550382, + -0.0007833023901802921, + 0.001075563790768233, + 0.001199092367787555, + -0.001765309502928316, + -0.002055372115328064, + 0.002986877604154257, + 0.003462567920638414, + -0.004856570111126334, + -0.005563143845031497, + 0.007533613299748122, + 0.008563932468880897, + -0.01126857129039911, + -0.01280782411693687, + 0.01651443896361847, + 0.01894875110322284, + -0.02421604439474981, + -0.02845107338464062, + 0.03672973563400258, + 0.04542046150312214, + -0.06189165826716491, + -0.08721876380763803, + 0.1496157094199961, + 0.4497962274137046, + 0.4497962274137046, + 0.1496157094199961, + -0.08721876380763803, + -0.0618916582671649, + 0.04542046150312216, + 0.03672973563400257, + -0.02845107338464062, + -0.02421604439474984, + 0.01894875110322284, + 0.01651443896361848, + -0.01280782411693687, + -0.0112685712903991, + 0.008563932468880899, + 0.007533613299748123, + -0.005563143845031501, + -0.004856570111126346, + 0.003462567920638419, + 0.002986877604154259, + -0.002055372115328063, + -0.001765309502928318, + 0.001199092367787557, + 0.001075563790768233, + -0.0007833023901802925, + -0.0008215855034550383 +}; + diff --git a/libcodec2-android/src/codec2/src/pack.c b/libcodec2-android/src/codec2/src/pack.c new file mode 100644 index 0000000..1c07230 --- /dev/null +++ b/libcodec2-android/src/codec2/src/pack.c @@ -0,0 +1,140 @@ +/* + Copyright (C) 2010 Perens LLC + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include "defines.h" +#include "quantise.h" +#include + +/* Compile-time constants */ +/* Size of unsigned char in bits. Assumes 8 bits-per-char. */ +static const unsigned int WordSize = 8; + +/* Mask to pick the bit component out of bitIndex. */ +static const unsigned int IndexMask = 0x7; + +/* Used to pick the word component out of bitIndex. */ +static const unsigned int ShiftRight = 3; + +/** Pack a bit field into a bit string, encoding the field in Gray code. + * + * The output is an array of unsigned char data. The fields are efficiently + * packed into the bit string. The Gray coding is a naive attempt to reduce + * the effect of single-bit errors, we expect to do a better job as the + * codec develops. + * + * This code would be simpler if it just set one bit at a time in the string, + * but would hit the same cache line more often. I'm not sure the complexity + * gains us anything here. + * + * Although field is currently of int type rather than unsigned for + * compatibility with the rest of the code, indices are always expected to + * be >= 0. + */ +void +pack( + unsigned char * bitArray, /* The output bit string. */ + unsigned int * bitIndex, /* Index into the string in BITS, not bytes.*/ + int field, /* The bit field to be packed. */ + unsigned int fieldWidth/* Width of the field in BITS, not bytes. */ + ) +{ + pack_natural_or_gray(bitArray, bitIndex, field, fieldWidth, 1); +} + +void +pack_natural_or_gray( + unsigned char * bitArray, /* The output bit string. */ + unsigned int * bitIndex, /* Index into the string in BITS, not bytes.*/ + int field, /* The bit field to be packed. */ + unsigned int fieldWidth,/* Width of the field in BITS, not bytes. */ + unsigned int gray /* non-zero for gray coding */ + ) +{ + if (gray) { + /* Convert the field to Gray code */ + field = (field >> 1) ^ field; + } + + do { + unsigned int bI = *bitIndex; + unsigned int bitsLeft = WordSize - (bI & IndexMask); + unsigned int sliceWidth = + bitsLeft < fieldWidth ? bitsLeft : fieldWidth; + unsigned int wordIndex = bI >> ShiftRight; + + bitArray[wordIndex] |= + ((unsigned char)((field >> (fieldWidth - sliceWidth)) + << (bitsLeft - sliceWidth))); + + *bitIndex = bI + sliceWidth; + fieldWidth -= sliceWidth; + } while ( fieldWidth != 0 ); +} + +/** Unpack a field from a bit string, converting from Gray code to binary. + * + */ +int +unpack( + const unsigned char * bitArray, /* The input bit string. */ + unsigned int * bitIndex, /* Index into the string in BITS, not bytes.*/ + unsigned int fieldWidth/* Width of the field in BITS, not bytes. */ + ) +{ + return unpack_natural_or_gray(bitArray, bitIndex, fieldWidth, 1); +} + +/** Unpack a field from a bit string, to binary, optionally using + * natural or Gray code. + * + */ +int +unpack_natural_or_gray( + const unsigned char * bitArray, /* The input bit string. */ + unsigned int * bitIndex, /* Index into the string in BITS, not bytes.*/ + unsigned int fieldWidth,/* Width of the field in BITS, not bytes. */ + unsigned int gray /* non-zero for Gray coding */ + ) +{ + unsigned int field = 0; + unsigned int t; + + do { + unsigned int bI = *bitIndex; + unsigned int bitsLeft = WordSize - (bI & IndexMask); + unsigned int sliceWidth = + bitsLeft < fieldWidth ? bitsLeft : fieldWidth; + + field |= (((bitArray[bI >> ShiftRight] >> (bitsLeft - sliceWidth)) & ((1 << sliceWidth) - 1)) << (fieldWidth - sliceWidth)); + + *bitIndex = bI + sliceWidth; + fieldWidth -= sliceWidth; + } while ( fieldWidth != 0 ); + + if (gray) { + /* Convert from Gray code to binary. Works for maximum 8-bit fields. */ + t = field ^ (field >> 8); + t ^= (t >> 4); + t ^= (t >> 2); + t ^= (t >> 1); + } + else { + t = field; + } + + return t; +} diff --git a/libcodec2-android/src/codec2/src/phase.c b/libcodec2-android/src/codec2/src/phase.c new file mode 100644 index 0000000..e486613 --- /dev/null +++ b/libcodec2-android/src/codec2/src/phase.c @@ -0,0 +1,289 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: phase.c + AUTHOR......: David Rowe + DATE CREATED: 1/2/09 + + Functions for modelling and synthesising phase. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2009 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not,see . +*/ + +#include "defines.h" +#include "phase.h" +#include "kiss_fft.h" +#include "comp.h" +#include "comp_prim.h" +#include "sine.h" + +#include +#include +#include +#include +#include + +/*---------------------------------------------------------------------------*\ + + sample_phase() + + Samples phase at centre of each harmonic from and array of FFT_ENC + DFT samples. + +\*---------------------------------------------------------------------------*/ + +void sample_phase(MODEL *model, + COMP H[], + COMP A[] /* LPC analysis filter in freq domain */ + ) +{ + int m, b; + float r; + + r = TWO_PI/(FFT_ENC); + + /* Sample phase at harmonics */ + + for(m=1; m<=model->L; m++) { + b = (int)(m*model->Wo/r + 0.5); + H[m] = cconj(A[b]); /* synth filter 1/A is opposite phase to analysis filter */ + } +} + + +/*---------------------------------------------------------------------------*\ + + phase_synth_zero_order() + + Synthesises phases based on SNR and a rule based approach. No phase + parameters are required apart from the SNR (which can be reduced to a + 1 bit V/UV decision per frame). + + The phase of each harmonic is modelled as the phase of a synthesis + filter excited by an impulse. In many Codec 2 modes the synthesis + filter is a LPC filter. Unlike the first order model the position + of the impulse is not transmitted, so we create an excitation pulse + train using a rule based approach. + + Consider a pulse train with a pulse starting time n=0, with pulses + repeated at a rate of Wo, the fundamental frequency. A pulse train + in the time domain is equivalent to harmonics in the frequency + domain. We can make an excitation pulse train using a sum of + sinsusoids: + + for(m=1; m<=L; m++) + ex[n] = cos(m*Wo*n) + + Note: the Octave script ../octave/phase.m is an example of this if + you would like to try making a pulse train. + + The phase of each excitation harmonic is: + + arg(E[m]) = mWo + + where E[m] are the complex excitation (freq domain) samples, + arg(x), just returns the phase of a complex sample x. + + As we don't transmit the pulse position for this model, we need to + synthesise it. Now the excitation pulses occur at a rate of Wo. + This means the phase of the first harmonic advances by N_SAMP samples + over a synthesis frame of N_SAMP samples. For example if Wo is pi/20 + (200 Hz), then over a 10ms frame (N_SAMP=80 samples), the phase of the + first harmonic would advance (pi/20)*80 = 4*pi or two complete + cycles. + + We generate the excitation phase of the fundamental (first + harmonic): + + arg[E[1]] = Wo*N_SAMP; + + We then relate the phase of the m-th excitation harmonic to the + phase of the fundamental as: + + arg(E[m]) = m*arg(E[1]) + + This E[m] then gets passed through the LPC synthesis filter to + determine the final harmonic phase. + + Comparing to speech synthesised using original phases: + + - Through headphones speech synthesised with this model is not as + good. Through a loudspeaker it is very close to original phases. + + - If there are voicing errors, the speech can sound clicky or + staticy. If V speech is mistakenly declared UV, this model tends to + synthesise impulses or clicks, as there is usually very little shift or + dispersion through the LPC synthesis filter. + + - When combined with LPC amplitude modelling there is an additional + drop in quality. I am not sure why, theory is interformant energy + is raised making any phase errors more obvious. + + NOTES: + + 1/ This synthesis model is effectively the same as a simple LPC-10 + vocoders, and yet sounds much better. Why? Conventional wisdom + (AMBE, MELP) says mixed voicing is required for high quality + speech. + + 2/ I am pretty sure the Lincoln Lab sinusoidal coding guys (like xMBE + also from MIT) first described this zero phase model, I need to look + up the paper. + + 3/ Note that this approach could cause some discontinuities in + the phase at the edge of synthesis frames, as no attempt is made + to make sure that the phase tracks are continuous (the excitation + phases are continuous, but not the final phases after filtering + by the LPC spectra). Technically this is a bad thing. However + this may actually be a good thing, disturbing the phase tracks a + bit. More research needed, e.g. test a synthesis model that adds + a small delta-W to make phase tracks line up for voiced + harmonics. + +\*---------------------------------------------------------------------------*/ + +void phase_synth_zero_order( + int n_samp, + MODEL *model, + float *ex_phase, /* excitation phase of fundamental */ + COMP H[] /* L synthesis filter freq domain samples */ + +) +{ + int m; + float new_phi; + COMP Ex[MAX_AMP+1]; /* excitation samples */ + COMP A_[MAX_AMP+1]; /* synthesised harmonic samples */ + + /* + Update excitation fundamental phase track, this sets the position + of each pitch pulse during voiced speech. After much experiment + I found that using just this frame's Wo improved quality for UV + sounds compared to interpolating two frames Wo like this: + + ex_phase[0] += (*prev_Wo+model->Wo)*N_SAMP/2; + */ + + ex_phase[0] += (model->Wo)*n_samp; + ex_phase[0] -= TWO_PI*floorf(ex_phase[0]/TWO_PI + 0.5); + + for(m=1; m<=model->L; m++) { + + /* generate excitation */ + + if (model->voiced) { + + Ex[m].real = cosf(ex_phase[0]*m); + Ex[m].imag = sinf(ex_phase[0]*m); + } + else { + + /* When a few samples were tested I found that LPC filter + phase is not needed in the unvoiced case, but no harm in + keeping it. + */ + float phi = TWO_PI*(float)codec2_rand()/CODEC2_RAND_MAX; + Ex[m].real = cosf(phi); + Ex[m].imag = sinf(phi); + } + + /* filter using LPC filter */ + + A_[m].real = H[m].real*Ex[m].real - H[m].imag*Ex[m].imag; + A_[m].imag = H[m].imag*Ex[m].real + H[m].real*Ex[m].imag; + + /* modify sinusoidal phase */ + + new_phi = atan2f(A_[m].imag, A_[m].real+1E-12); + model->phi[m] = new_phi; + } + +} + + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: mag_to_phase + AUTHOR......: David Rowe + DATE CREATED: Jan 2017 + + Algorithm for http://www.dsprelated.com/showcode/20.php ported to C. See + also Octave function mag_to_phase.m + + Given a magnitude spectrum in dB, returns a minimum-phase phase + spectra. + +\*---------------------------------------------------------------------------*/ + +void mag_to_phase(float phase[], /* Nfft/2+1 output phase samples in radians */ + float Gdbfk[], /* Nfft/2+1 postive freq amplitudes samples in dB */ + int Nfft, + codec2_fft_cfg fft_fwd_cfg, + codec2_fft_cfg fft_inv_cfg + ) +{ + COMP Sdb[Nfft], c[Nfft], cf[Nfft], Cf[Nfft]; + int Ns = Nfft/2+1; + int i; + + /* install negative frequency components, 1/Nfft takes into + account kiss fft lack of scaling on ifft */ + + Sdb[0].real = Gdbfk[0]; + Sdb[0].imag = 0.0; + for(i=1; i. +*/ + +#ifndef __PHASE__ +#define __PHASE__ + +#include "codec2_fft.h" +#include "comp.h" + +void sample_phase(MODEL *model, COMP filter_phase[], COMP A[]); +void phase_synth_zero_order(int n_samp, MODEL *model, float *ex_phase, COMP filter_phase[]); + +void mag_to_phase(float phase[], float Gdbfk[], int Nfft, codec2_fft_cfg fwd_cfg, codec2_fft_cfg inv_cfg); + +#endif diff --git a/libcodec2-android/src/codec2/src/phi0.c b/libcodec2-android/src/codec2/src/phi0.c new file mode 100644 index 0000000..f4a75e2 --- /dev/null +++ b/libcodec2-android/src/codec2/src/phi0.c @@ -0,0 +1,218 @@ + +// phi0.c +// +// An approximation of the function +// +// This file is generated by the gen_phi0 scritps +// Any changes should be made to that file, not this one + +#include + +#define SI16(f) ((int32_t)(f * (1<<16))) + +float phi0( float xf ) { + + int32_t x = SI16(xf); + + if (x >= SI16(10.0f)) return(0.0f); + else { + if (x >= SI16(5.0f)) { + int i = 19 - (x >> 15); + switch (i) { + case 0: return(0.000116589f); // (9.5) + case 1: return(0.000192223f); // (9.0) + case 2: return(0.000316923f); // (8.5) + case 3: return(0.000522517f); // (8.0) + case 4: return(0.000861485f); // (7.5) + case 5: return(0.001420349f); // (7.0) + case 6: return(0.002341760f); // (6.5) + case 7: return(0.003860913f); // (6.0) + case 8: return(0.006365583f); // (5.5) + case 9: return(0.010495133f); // (5.0) + } + } + else { + if (x >= SI16(1.0f)) { + int i = 79 - (x >> 12); + switch (i) { + case 0: return(0.013903889f); // (4.9375) + case 1: return(0.014800644f); // (4.8750) + case 2: return(0.015755242f); // (4.8125) + case 3: return(0.016771414f); // (4.7500) + case 4: return(0.017853133f); // (4.6875) + case 5: return(0.019004629f); // (4.6250) + case 6: return(0.020230403f); // (4.5625) + case 7: return(0.021535250f); // (4.5000) + case 8: return(0.022924272f); // (4.4375) + case 9: return(0.024402903f); // (4.3750) + case 10: return(0.025976926f); // (4.3125) + case 11: return(0.027652501f); // (4.2500) + case 12: return(0.029436184f); // (4.1875) + case 13: return(0.031334956f); // (4.1250) + case 14: return(0.033356250f); // (4.0625) + case 15: return(0.035507982f); // (4.0000) + case 16: return(0.037798579f); // (3.9375) + case 17: return(0.040237016f); // (3.8750) + case 18: return(0.042832850f); // (3.8125) + case 19: return(0.045596260f); // (3.7500) + case 20: return(0.048538086f); // (3.6875) + case 21: return(0.051669874f); // (3.6250) + case 22: return(0.055003924f); // (3.5625) + case 23: return(0.058553339f); // (3.5000) + case 24: return(0.062332076f); // (3.4375) + case 25: return(0.066355011f); // (3.3750) + case 26: return(0.070637993f); // (3.3125) + case 27: return(0.075197917f); // (3.2500) + case 28: return(0.080052790f); // (3.1875) + case 29: return(0.085221814f); // (3.1250) + case 30: return(0.090725463f); // (3.0625) + case 31: return(0.096585578f); // (3.0000) + case 32: return(0.102825462f); // (2.9375) + case 33: return(0.109469985f); // (2.8750) + case 34: return(0.116545700f); // (2.8125) + case 35: return(0.124080967f); // (2.7500) + case 36: return(0.132106091f); // (2.6875) + case 37: return(0.140653466f); // (2.6250) + case 38: return(0.149757747f); // (2.5625) + case 39: return(0.159456024f); // (2.5000) + case 40: return(0.169788027f); // (2.4375) + case 41: return(0.180796343f); // (2.3750) + case 42: return(0.192526667f); // (2.3125) + case 43: return(0.205028078f); // (2.2500) + case 44: return(0.218353351f); // (2.1875) + case 45: return(0.232559308f); // (2.1250) + case 46: return(0.247707218f); // (2.0625) + case 47: return(0.263863255f); // (2.0000) + case 48: return(0.281099022f); // (1.9375) + case 49: return(0.299492155f); // (1.8750) + case 50: return(0.319127030f); // (1.8125) + case 51: return(0.340095582f); // (1.7500) + case 52: return(0.362498271f); // (1.6875) + case 53: return(0.386445235f); // (1.6250) + case 54: return(0.412057648f); // (1.5625) + case 55: return(0.439469363f); // (1.5000) + case 56: return(0.468828902f); // (1.4375) + case 57: return(0.500301872f); // (1.3750) + case 58: return(0.534073947f); // (1.3125) + case 59: return(0.570354566f); // (1.2500) + case 60: return(0.609381573f); // (1.1875) + case 61: return(0.651427083f); // (1.1250) + case 62: return(0.696805010f); // (1.0625) + case 63: return(0.745880827f); // (1.0000) + } + } + else { + if (x > SI16(0.007812f)) { + if (x > SI16(0.088388f)) { + if (x > SI16(0.250000f)) { + if (x > SI16(0.500000f)) { + if (x > SI16(0.707107f)) { + return(0.922449644f); + } else { + return(1.241248638f); + } + } else { + if (x > SI16(0.353553f)) { + return(1.573515241f); + } else { + return(1.912825912f); + } + } + } else { + if (x > SI16(0.125000f)) { + if (x > SI16(0.176777f)) { + return(2.255740095f); + } else { + return(2.600476919f); + } + } else { + return(2.946130351f); + } + } + } else { + if (x > SI16(0.022097f)) { + if (x > SI16(0.044194f)) { + if (x > SI16(0.062500f)) { + return(3.292243417f); + } else { + return(3.638586634f); + } + } else { + if (x > SI16(0.031250f)) { + return(3.985045009f); + } else { + return(4.331560985f); + } + } + } else { + if (x > SI16(0.011049f)) { + if (x > SI16(0.015625f)) { + return(4.678105767f); + } else { + return(5.024664952f); + } + } else { + return(5.371231340f); + } + } + } + } else { + if (x > SI16(0.000691f)) { + if (x > SI16(0.001953f)) { + if (x > SI16(0.003906f)) { + if (x > SI16(0.005524f)) { + return(5.717801329f); + } else { + return(6.064373119f); + } + } else { + if (x > SI16(0.002762f)) { + return(6.410945809f); + } else { + return(6.757518949f); + } + } + } else { + if (x > SI16(0.000977f)) { + if (x > SI16(0.001381f)) { + return(7.104092314f); + } else { + return(7.450665792f); + } + } else { + return(7.797239326f); + } + } + } else { + if (x > SI16(0.000173f)) { + if (x > SI16(0.000345f)) { + if (x > SI16(0.000488f)) { + return(8.143812888f); + } else { + return(8.490386464f); + } + } else { + if (x > SI16(0.000244f)) { + return(8.836960047f); + } else { + return(9.183533634f); + } + } + } else { + if (x > SI16(0.000086f)) { + if (x > SI16(0.000122f)) { + return(9.530107222f); + } else { + return(9.876680812f); + } + } else { + return(10.000000000f); + } + } + } + } + } + } + } + return(10.0f); +} diff --git a/libcodec2-android/src/codec2/src/phi0.h b/libcodec2-android/src/codec2/src/phi0.h new file mode 100644 index 0000000..0fa71df --- /dev/null +++ b/libcodec2-android/src/codec2/src/phi0.h @@ -0,0 +1,7 @@ +// phi0.h +#ifndef PHI0_H +#define PHI0_H + +extern float phi0( float xf ); + +#endif diff --git a/libcodec2-android/src/codec2/src/pilot_coeff.h b/libcodec2-android/src/codec2/src/pilot_coeff.h new file mode 100644 index 0000000..85af696 --- /dev/null +++ b/libcodec2-android/src/codec2/src/pilot_coeff.h @@ -0,0 +1,41 @@ +/* Generated by pilot_coeff_file() Octave function */ + +// const removed since this provides gain +// on the STM32F4 platform + +#ifdef CORTEX_M4 +/* const */ float pilot_coeff[]={ +#else +const float pilot_coeff[]={ +#endif + 0.00223001, + 0.00301037, + 0.00471258, + 0.0075934, + 0.0118145, + 0.0174153, + 0.0242969, + 0.0322204, + 0.0408199, + 0.0496286, + 0.0581172, + 0.0657392, + 0.0719806, + 0.0764066, + 0.0787022, + 0.0787022, + 0.0764066, + 0.0719806, + 0.0657392, + 0.0581172, + 0.0496286, + 0.0408199, + 0.0322204, + 0.0242969, + 0.0174153, + 0.0118145, + 0.0075934, + 0.00471258, + 0.00301037, + 0.00223001 +}; diff --git a/libcodec2-android/src/codec2/src/pilots_coh.h b/libcodec2-android/src/codec2/src/pilots_coh.h new file mode 100644 index 0000000..9271195 --- /dev/null +++ b/libcodec2-android/src/codec2/src/pilots_coh.h @@ -0,0 +1,6 @@ +/* Generated by write_pilot_file() Octave function */ + +float pilots_coh[][PILOTS_NC]={ + { 1.000000, -1.000000, 1.000000, -1.000000, 1.000000, -1.000000, -1.000000}, + { -1.000000, 1.000000, 1.000000, -1.000000, 1.000000, 1.000000, 1.000000} +}; \ No newline at end of file diff --git a/libcodec2-android/src/codec2/src/postfilter.c b/libcodec2-android/src/codec2/src/postfilter.c new file mode 100644 index 0000000..6542c7c --- /dev/null +++ b/libcodec2-android/src/codec2/src/postfilter.c @@ -0,0 +1,142 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: postfilter.c + AUTHOR......: David Rowe + DATE CREATED: 13/09/09 + + Postfilter to improve sound quality for speech with high levels of + background noise. Unlike mixed-excitation models requires no bits + to be transmitted to handle background noise. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2009 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include +#include +#include + +#include "defines.h" +#include "comp.h" +#include "dump.h" +#include "sine.h" +#include "postfilter.h" + +/*---------------------------------------------------------------------------*\ + + DEFINES + +\*---------------------------------------------------------------------------*/ + +#define BG_THRESH 40.0 /* only consider low levels signals for bg_est */ +#define BG_BETA 0.1 /* averaging filter constant */ +#define BG_MARGIN 6.0 /* harmonics this far above BG noise are + randomised. Helped make bg noise less + spikey (impulsive) for mmt1, but speech was + perhaps a little rougher. + */ + +/*---------------------------------------------------------------------------*\ + + postfilter() + + The post filter is designed to help with speech corrupted by + background noise. The zero phase model tends to make speech with + background noise sound "clicky". With high levels of background + noise the low level inter-formant parts of the spectrum will contain + noise rather than speech harmonics, so modelling them as voiced + (i.e. a continuous, non-random phase track) is inaccurate. + + Some codecs (like MBE) have a mixed voicing model that breaks the + spectrum into voiced and unvoiced regions. Several bits/frame + (5-12) are required to transmit the frequency selective voicing + information. Mixed excitation also requires accurate voicing + estimation (parameter estimators always break occasionally under + exceptional conditions). + + In our case we use a post filter approach which requires no + additional bits to be transmitted. The decoder measures the average + level of the background noise during unvoiced frames. If a harmonic + is less than this level it is made unvoiced by randomising it's + phases. + + This idea is rather experimental. Some potential problems that may + happen: + + 1/ If someone says "aaaaaaaahhhhhhhhh" will background estimator track + up to speech level? This would be a bad thing. + + 2/ If background noise suddenly dissapears from the source speech does + estimate drop quickly? What is noise suddenly re-appears? + + 3/ Background noise with a non-flat sepctrum. Current algorithm just + comsiders scpetrum as a whole, but this could be broken up into + bands, each with their own estimator. + + 4/ Males and females with the same level of background noise. Check + performance the same. Changing Wo affects width of each band, may + affect bg energy estimates. + + 5/ Not sure what happens during long periods of voiced speech + e.g. "sshhhhhhh" + +\*---------------------------------------------------------------------------*/ + +void postfilter( + MODEL *model, + float *bg_est +) +{ + int m, uv; + float e, thresh; + + /* determine average energy across spectrum */ + + e = 1E-12; + for(m=1; m<=model->L; m++) + e += model->A[m]*model->A[m]; + + assert(e > 0.0); + e = 10.0*log10f(e/model->L); + + /* If beneath threhold, update bg estimate. The idea + of the threshold is to prevent updating during high level + speech. */ + + if ((e < BG_THRESH) && !model->voiced) + *bg_est = *bg_est*(1.0 - BG_BETA) + e*BG_BETA; + + /* now mess with phases during voiced frames to make any harmonics + less then our background estimate unvoiced. + */ + + uv = 0; + thresh = POW10F((*bg_est + BG_MARGIN)/20.0); + if (model->voiced) + for(m=1; m<=model->L; m++) + if (model->A[m] < thresh) { + model->phi[m] = (TWO_PI/CODEC2_RAND_MAX)*(float)codec2_rand(); + uv++; + } + +#ifdef DUMP + dump_bg(e, *bg_est, 100.0*uv/model->L); +#endif + +} diff --git a/libcodec2-android/src/codec2/src/postfilter.h b/libcodec2-android/src/codec2/src/postfilter.h new file mode 100644 index 0000000..156714e --- /dev/null +++ b/libcodec2-android/src/codec2/src/postfilter.h @@ -0,0 +1,33 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: postfilter.h + AUTHOR......: David Rowe + DATE CREATED: 13/09/09 + + Postfilter header file. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2009 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#ifndef __POSTFILTER__ +#define __POSTFILTER__ + +void postfilter(MODEL *model, float *bg_est); + +#endif diff --git a/libcodec2-android/src/codec2/src/quantise.c b/libcodec2-android/src/codec2/src/quantise.c new file mode 100644 index 0000000..95552c6 --- /dev/null +++ b/libcodec2-android/src/codec2/src/quantise.c @@ -0,0 +1,1252 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: quantise.c + AUTHOR......: David Rowe + DATE CREATED: 31/5/92 + + Quantisation functions for the sinusoidal coder. + +\*---------------------------------------------------------------------------*/ + +/* + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . + +*/ + +#include +#include +#include +#include +#include +#include + +#include "defines.h" +#include "dump.h" +#include "quantise.h" +#include "lpc.h" +#include "lsp.h" +#include "codec2_fft.h" +#include "phase.h" +#include "mbest.h" + +#undef PROFILE +#include "machdep.h" + +#define LSP_DELTA1 0.01 /* grid spacing for LSP root searches */ + +/*---------------------------------------------------------------------------*\ + + FUNCTION HEADERS + +\*---------------------------------------------------------------------------*/ + +float speech_to_uq_lsps(float lsp[], float ak[], float Sn[], float w[], + int m_pitch, int order); + +/*---------------------------------------------------------------------------*\ + + FUNCTIONS + +\*---------------------------------------------------------------------------*/ + +int lsp_bits(int i) { + return lsp_cb[i].log2m; +} + +int lspd_bits(int i) { + return lsp_cbd[i].log2m; +} + +int lsp_pred_vq_bits(int i) { + return lsp_cbjvm[i].log2m; +} + +/*---------------------------------------------------------------------------*\ + + quantise_init + + Loads the entire LSP quantiser comprised of several vector quantisers + (codebooks). + +\*---------------------------------------------------------------------------*/ + +void quantise_init() +{ +} + +/*---------------------------------------------------------------------------*\ + + quantise + + Quantises vec by choosing the nearest vector in codebook cb, and + returns the vector index. The squared error of the quantised vector + is added to se. + +\*---------------------------------------------------------------------------*/ + +long quantise(const float * cb, float vec[], float w[], int k, int m, float *se) +/* float cb[][K]; current VQ codebook */ +/* float vec[]; vector to quantise */ +/* float w[]; weighting vector */ +/* int k; dimension of vectors */ +/* int m; size of codebook */ +/* float *se; accumulated squared error */ +{ + float e; /* current error */ + long besti; /* best index so far */ + float beste; /* best error so far */ + long j; + int i; + float diff; + + besti = 0; + beste = 1E32; + for(j=0; j max_Rw) + max_Rw = Rw[i]; + if (Rw[i] < min_Rw) + min_Rw = Rw[i]; + + } + + PROFILE_SAMPLE_AND_LOG(tr, tww, " R"); + + #ifdef DUMP + if (dump) + dump_Rw(Rw); + #endif + + /* create post filter mag spectrum and apply ------------------*/ + + /* measure energy before post filtering */ + + e_before = 1E-4; + for(i=0; i 242 ms + // so please leave it as is or improve further + // since this code is called 4 times it results in almost 4ms gain (21ms -> 17ms per audio frame decode @ 1300 ) + + for(i=0; iL; m++) { + am = (int)((m - 0.5)*model->Wo/r + 0.5); + bm = (int)((m + 0.5)*model->Wo/r + 0.5); + + // FIXME: With arm_rfft_fast_f32 we have to use this + // otherwise sometimes a to high bm is calculated + // which causes trouble later in the calculation + // chain + // it seems for some reason model->Wo is calculated somewhat too high + if (bm>FFT_ENC/2) + { + bm = FFT_ENC/2; + } + Em = 0.0; + + for(i=am; iA[m]*model->A[m]; + noise += (model->A[m] - Am)*(model->A[m] - Am); + + /* This code significantly improves perf of LPC model, in + particular when combined with phase0. The LPC spectrum tends + to track just under the peaks of the spectral envelope, and + just above nulls. This algorithm does the reverse to + compensate - raising the amplitudes of spectral peaks, while + attenuating the null. This enhances the formants, and + supresses the energy between formants. */ + + if (sim_pf) { + if (Am > model->A[m]) + Am *= 0.7; + if (Am < model->A[m]) + Am *= 1.4; + } + model->A[m] = Am; + } + *snr = 10.0*log10f(signal/noise); + + PROFILE_SAMPLE_AND_LOG2(tpf, " rec"); +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: encode_Wo() + AUTHOR......: David Rowe + DATE CREATED: 22/8/2010 + + Encodes Wo using a WO_LEVELS quantiser. + +\*---------------------------------------------------------------------------*/ + +int encode_Wo(C2CONST *c2const, float Wo, int bits) +{ + int index, Wo_levels = 1<Wo_min; + float Wo_max = c2const->Wo_max; + float norm; + + norm = (Wo - Wo_min)/(Wo_max - Wo_min); + index = floorf(Wo_levels * norm + 0.5); + if (index < 0 ) index = 0; + if (index > (Wo_levels-1)) index = Wo_levels-1; + + return index; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: decode_Wo() + AUTHOR......: David Rowe + DATE CREATED: 22/8/2010 + + Decodes Wo using a WO_LEVELS quantiser. + +\*---------------------------------------------------------------------------*/ + +float decode_Wo(C2CONST *c2const, int index, int bits) +{ + float Wo_min = c2const->Wo_min; + float Wo_max = c2const->Wo_max; + float step; + float Wo; + int Wo_levels = 1<Wo_min; + float Wo_max = c2const->Wo_max; + float norm; + + norm = (log10f(Wo) - log10f(Wo_min))/(log10f(Wo_max) - log10f(Wo_min)); + index = floorf(Wo_levels * norm + 0.5); + if (index < 0 ) index = 0; + if (index > (Wo_levels-1)) index = Wo_levels-1; + + return index; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: decode_log_Wo() + AUTHOR......: David Rowe + DATE CREATED: 22/8/2010 + + Decodes Wo using a WO_LEVELS quantiser in the log domain. + +\*---------------------------------------------------------------------------*/ + +float decode_log_Wo(C2CONST *c2const, int index, int bits) +{ + float Wo_min = c2const->Wo_min; + float Wo_max = c2const->Wo_max; + float step; + float Wo; + int Wo_levels = 1<Wo < (PI*150.0/4000)) { + model->A[1] *= 0.032; + } +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: encode_energy() + AUTHOR......: David Rowe + DATE CREATED: 22/8/2010 + + Encodes LPC energy using an E_LEVELS quantiser. + +\*---------------------------------------------------------------------------*/ + +int encode_energy(float e, int bits) +{ + int index, e_levels = 1< (e_levels-1)) index = e_levels-1; + + return index; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: decode_energy() + AUTHOR......: David Rowe + DATE CREATED: 22/8/2010 + + Decodes energy using a E_LEVELS quantiser. + +\*---------------------------------------------------------------------------*/ + +float decode_energy(int index, int bits) +{ + float e_min = E_MIN_DB; + float e_max = E_MAX_DB; + float step; + float e; + int e_levels = 1<.5) /* Lower if not stable */ + { + w[0] *= .5; + } + + /* Lower weight for low energy */ + if (x[1] < xp[1]-10) + { + w[1] *= .5; + } + if (x[1] < xp[1]-20) + { + w[1] *= .5; + } + + //w[0] = 30; + //w[1] = 1; + + /* Square the weights because it's applied on the squared error */ + w[0] *= w[0]; + w[1] *= w[1]; + +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: quantise_WoE() + AUTHOR......: Jean-Marc Valin & David Rowe + DATE CREATED: 29 Feb 2012 + + Experimental joint Wo and LPC energy vector quantiser developed by + Jean-Marc Valin. Exploits correlations between the difference in + the log pitch and log energy from frame to frame. For example + both the pitch and energy tend to only change by small amounts + during voiced speech, however it is important that these changes be + coded carefully. During unvoiced speech they both change a lot but + the ear is less sensitve to errors so coarser quantisation is OK. + + The ear is sensitive to log energy and loq pitch so we quantise in + these domains. That way the error measure used to quantise the + values is close to way the ear senses errors. + + See http://jmspeex.livejournal.com/10446.html + +\*---------------------------------------------------------------------------*/ + +void quantise_WoE(C2CONST *c2const, MODEL *model, float *e, float xq[]) +{ + int i, n1; + float x[2]; + float err[2]; + float w[2]; + const float *codebook1 = ge_cb[0].cb; + int nb_entries = ge_cb[0].m; + int ndim = ge_cb[0].k; + float Wo_min = c2const->Wo_min; + float Wo_max = c2const->Wo_max; + float Fs = c2const->Fs; + + /* VQ is only trained for Fs = 8000 Hz */ + + assert(Fs == 8000); + + x[0] = log10f((model->Wo/PI)*4000.0/50.0)/log10f(2); + x[1] = 10.0*log10f(1e-4 + *e); + + compute_weights2(x, xq, w); + for (i=0;iWo = powf(2.0, xq[0])*(PI*50.0)/4000.0; + + /* bit errors can make us go out of range leading to all sorts of + probs like seg faults */ + + if (model->Wo > Wo_max) model->Wo = Wo_max; + if (model->Wo < Wo_min) model->Wo = Wo_min; + + model->L = PI/model->Wo; /* if we quantise Wo re-compute L */ + + *e = POW10F(xq[1]/10.0); +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: encode_WoE() + AUTHOR......: Jean-Marc Valin & David Rowe + DATE CREATED: 11 May 2012 + + Joint Wo and LPC energy vector quantiser developed my Jean-Marc + Valin. Returns index, and updated states xq[]. + +\*---------------------------------------------------------------------------*/ + +int encode_WoE(MODEL *model, float e, float xq[]) +{ + int i, n1; + float x[2]; + float err[2]; + float w[2]; + const float *codebook1 = ge_cb[0].cb; + int nb_entries = ge_cb[0].m; + int ndim = ge_cb[0].k; + + assert((1<Wo/PI)*4000.0/50.0)/log10f(2); + x[1] = 10.0*log10f(1e-4 + e); + + compute_weights2(x, xq, w); + for (i=0;iWo_min; + float Wo_max = c2const->Wo_max; + + for (i=0;iWo = powf(2.0, xq[0])*(PI*50.0)/4000.0; + + /* bit errors can make us go out of range leading to all sorts of + probs like seg faults */ + + if (model->Wo > Wo_max) model->Wo = Wo_max; + if (model->Wo < Wo_min) model->Wo = Wo_min; + + model->L = PI/model->Wo; /* if we quantise Wo re-compute L */ + + *e = POW10F(xq[1]/10.0); +} + diff --git a/libcodec2-android/src/codec2/src/quantise.h b/libcodec2-android/src/codec2/src/quantise.h new file mode 100644 index 0000000..25f943e --- /dev/null +++ b/libcodec2-android/src/codec2/src/quantise.h @@ -0,0 +1,108 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: quantise.h + AUTHOR......: David Rowe + DATE CREATED: 31/5/92 + + Quantisation functions for the sinusoidal coder. + +\*---------------------------------------------------------------------------*/ + +/* + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#ifndef __QUANTISE__ +#define __QUANTISE__ + +#include "codec2_fft.h" +#include "comp.h" + +#define WO_BITS 7 +#define WO_LEVELS (1<. +*/ + + +#define BUF_PERIOD 0.02 /* length of processingbuffer in seconds */ + +#include +#include +#include +#include +#include +#include + +/* returns number of output samples generated by resampling */ + +int resample(SRC_STATE *src, + short output_short[], + short input_short[], + int output_sample_rate, + int input_sample_rate, + int length_output_short, /* maximum output array length in samples */ + int length_input_short, + int *input_samples_used, + int last + ) +{ + SRC_DATA src_data; + float input[length_input_short]; + float output[length_output_short]; + int ret; + + assert(src != NULL); + + src_short_to_float_array(input_short, input, length_input_short); + + src_data.data_in = input; + src_data.data_out = output; + src_data.input_frames = length_input_short; + src_data.output_frames = length_output_short; + src_data.end_of_input = last; + src_data.src_ratio = (float)output_sample_rate/input_sample_rate; + //printf("ratio: %f\n", src_data.src_ratio); + + ret = src_process(src, &src_data); + assert(ret == 0); + + assert(src_data.output_frames_gen <= length_output_short); + src_float_to_short_array(output, output_short, src_data.output_frames_gen); + + *input_samples_used = src_data.input_frames_used; + return src_data.output_frames_gen; +} + + +int main(int argc, char *argv[]) { + FILE *fin, *fout; + SRC_STATE *src; + int FsIn, FsOut; + int length_input_short, length_output_short; + int src_error, nin, left_over, nread; + + if (argc < 5) { + printf("usage: resample FsIn FsOut InputFileOfShorts OutputFileOfShortsn"); + printf("e.g resample 1E6 1E5 Fs1E6HzInputShortFile.raw Fs1E5HzOutputShortFile.raw\n"); + printf("e.g SampleGenerator | resample 1E6 1E5 | SampleConsumer\n"); + exit(1); + } + + FsIn = (int)atof(argv[1]); + FsOut = (int)atof(argv[2]); + + length_input_short = BUF_PERIOD*FsIn; + length_output_short = BUF_PERIOD*FsOut; + //printf("FsIn: %d FsOut: %d length_input_short: %d length_output_short: %d\n", + // FsIn, FsOut, length_input_short, length_output_short); + + short input_short[length_input_short]; + short output_short[length_output_short]; + + if (strcmp(argv[3], "-") == 0) fin = stdin; + else if ( (fin = fopen(argv[3],"rb")) == NULL ) { + fprintf(stderr, "Error opening input speech file: %s: %s.\n", + argv[2], strerror(errno)); + exit(1); + } + + if (strcmp(argv[4], "-") == 0) fout = stdout; + else if ( (fout = fopen(argv[4],"wb")) == NULL ) { + fprintf(stderr, "Error opening output speech file: %s: %s.\n", + argv[3], strerror(errno)); + exit(1); + } + + src = src_new(SRC_SINC_FASTEST, 1, &src_error); + assert(src != NULL); + + nin = length_input_short; + left_over = 0; + while((nread = fread(&input_short[left_over], sizeof(short), nin, fin)) == nin) { + length_output_short = resample(src, + output_short, + input_short, + FsOut, + FsIn, + length_output_short, + length_input_short, + &nin, + 0); + left_over = length_input_short - nin; + memcpy(input_short, &input_short[nin], left_over); + //printf("length_output_short: %d length_input_short: %d nin: %d left_over: %d\n", + // length_output_short, length_input_short, nin, left_over); + fwrite(output_short, sizeof(short), length_output_short, fout); + } + + length_output_short = resample(src, + output_short, + input_short, + FsOut, + FsIn, + length_output_short, + length_input_short, + &nin, + 1); + fwrite(output_short, sizeof(short), length_output_short, fout); + + fclose(fin); + fclose(fout); + + src_delete(src); + + return 0; +} diff --git a/libcodec2-android/src/codec2/src/rn.h b/libcodec2-android/src/codec2/src/rn.h new file mode 100644 index 0000000..934f458 --- /dev/null +++ b/libcodec2-android/src/codec2/src/rn.h @@ -0,0 +1,964 @@ +/* Generated by rn_file() Octave function */ + +const float gt_alpha5_root[]={ + 2.86997e-05, + 2.2286e-05, + 1.82863e-05, + 1.42303e-05, + 1.04905e-05, + 6.70859e-06, + 3.05918e-06, + -6.22187e-07, + -4.22748e-06, + -7.85603e-06, + -1.14317e-05, + -1.50227e-05, + -1.85712e-05, + -2.21275e-05, + -2.56455e-05, + -2.91642e-05, + -3.26453e-05, + -3.61199e-05, + -3.95556e-05, + -4.29778e-05, + -4.63581e-05, + -4.97179e-05, + -5.3032e-05, + -5.63184e-05, + -5.95548e-05, + -6.27565e-05, + -6.59032e-05, + -6.90085e-05, + -7.20538e-05, + -7.50509e-05, + -7.7983e-05, + -8.08605e-05, + -8.36678e-05, + -8.64141e-05, + -8.9085e-05, + -9.16888e-05, + -9.42119e-05, + -9.66619e-05, + -9.9026e-05, + -0.000101311, + -0.000103505, + -0.000105614, + -0.000107627, + -0.00010955, + -0.000111372, + -0.000113099, + -0.00011472, + -0.000116241, + -0.000117652, + -0.000118959, + -0.000120152, + -0.000121235, + -0.000122201, + -0.000123053, + -0.000123784, + -0.000124397, + -0.000124884, + -0.00012525, + -0.000125487, + -0.000125598, + -0.000125578, + -0.000125428, + -0.000125145, + -0.000124729, + -0.000124185, + -0.000123518, + -0.000122709, + -0.000121766, + -0.000120685, + -0.000119471, + -0.000118119, + -0.000116633, + -0.000115009, + -0.000113251, + -0.000111356, + -0.000109326, + -0.00010716, + -0.00010486, + -0.000102424, + -9.98553e-05, + -9.71528e-05, + -9.43199e-05, + -9.13551e-05, + -8.82623e-05, + -8.50404e-05, + -8.16936e-05, + -7.82211e-05, + -7.46271e-05, + -7.09109e-05, + -6.70773e-05, + -6.31256e-05, + -5.90607e-05, + -5.48823e-05, + -5.05954e-05, + -4.62001e-05, + -4.17016e-05, + -3.71002e-05, + -3.24015e-05, + -2.7606e-05, + -2.27195e-05, + -1.77428e-05, + -1.2682e-05, + -7.53795e-06, + -2.31702e-06, + 2.97965e-06, + 8.34567e-06, + 1.37796e-05, + 1.9275e-05, + 2.483e-05, + 3.04382e-05, + 3.60975e-05, + 4.18011e-05, + 4.75467e-05, + 5.33273e-05, + 5.91403e-05, + 6.49787e-05, + 7.08393e-05, + 7.67152e-05, + 8.26029e-05, + 8.84957e-05, + 9.43895e-05, + 0.000100278, + 0.000106157, + 0.00011202, + 0.000117864, + 0.000123681, + 0.000129468, + 0.000135218, + 0.000140929, + 0.000146583, + 0.000152183, + 0.000157725, + 0.000163202, + 0.000168608, + 0.000173938, + 0.000179183, + 0.00018434, + 0.0001894, + 0.00019436, + 0.000199211, + 0.000203949, + 0.000208568, + 0.000213063, + 0.000217426, + 0.000221654, + 0.00022574, + 0.000229678, + 0.000233463, + 0.000237089, + 0.000240551, + 0.000243843, + 0.000246959, + 0.000249895, + 0.000252644, + 0.000255202, + 0.000257562, + 0.000259721, + 0.000261672, + 0.000263411, + 0.000264933, + 0.000266234, + 0.000267308, + 0.000268152, + 0.00026876, + 0.000269128, + 0.000269253, + 0.000269129, + 0.000268754, + 0.000268123, + 0.000267232, + 0.000266079, + 0.000264658, + 0.000262968, + 0.000261006, + 0.000258767, + 0.000256251, + 0.000253453, + 0.000250373, + 0.000247007, + 0.000243354, + 0.000239412, + 0.00023518, + 0.000230655, + 0.000225837, + 0.000220723, + 0.000215314, + 0.000209608, + 0.000203605, + 0.000197304, + 0.000190706, + 0.000183812, + 0.000176621, + 0.000169145, + 0.000161363, + 0.000153275, + 0.000144895, + 0.000136224, + 0.000127266, + 0.00011802, + 0.000108491, + 9.8679e-05, + 8.85877e-05, + 7.82196e-05, + 6.7577e-05, + 5.66636e-05, + 4.54822e-05, + 3.40369e-05, + 2.23311e-05, + 1.03695e-05, + -1.844e-06, + -1.43041e-05, + -2.70061e-05, + -3.99444e-05, + -5.31139e-05, + -6.65082e-05, + -8.01218e-05, + -9.39481e-05, + -0.000107981, + -0.000122213, + -0.000136638, + -0.000151248, + -0.000166036, + -0.000180995, + -0.000196115, + -0.00021139, + -0.000226811, + -0.000242369, + -0.000258056, + -0.000273861, + -0.000289776, + -0.000305792, + -0.000321898, + -0.000338084, + -0.000354342, + -0.00037066, + -0.000387027, + -0.000403434, + -0.00041987, + -0.000436324, + -0.000452784, + -0.00046924, + -0.00048568, + -0.000502091, + -0.000518464, + -0.000534785, + -0.000551043, + -0.000567225, + -0.000583319, + -0.000599314, + -0.000615196, + -0.000630955, + -0.000646575, + -0.000662049, + -0.000677361, + -0.000692506, + -0.000707464, + -0.00072229, + -0.000736922, + -0.000751266, + -0.000765372, + -0.000779217, + -0.000792798, + -0.000806094, + -0.000819098, + -0.000831793, + -0.000844168, + -0.000856207, + -0.000867898, + -0.000879227, + -0.00089018, + -0.000900744, + -0.000910906, + -0.000920652, + -0.00092997, + -0.000938844, + -0.000947263, + -0.000955214, + -0.000962682, + -0.000969654, + -0.000976119, + -0.000982062, + -0.00098747, + -0.000992332, + -0.000996634, + -0.00100036, + -0.00100351, + -0.00100606, + -0.001008, + -0.00100932, + -0.00101, + -0.00101005, + -0.00100943, + -0.00100816, + -0.0010062, + -0.00100356, + -0.00100021, + -0.000996162, + -0.000991392, + -0.000985892, + -0.000979654, + -0.000972668, + -0.000964925, + -0.000956415, + -0.000947131, + -0.000937065, + -0.000926208, + -0.000914552, + -0.00090209, + -0.000888816, + -0.000874721, + -0.0008598, + -0.000844046, + -0.000827453, + -0.000810015, + -0.000791726, + -0.000772581, + -0.000752576, + -0.000731704, + -0.000709965, + -0.00068735, + -0.000663865, + -0.000639509, + -0.000614269, + -0.000588146, + -0.000561139, + -0.000533246, + -0.000504468, + -0.000474802, + -0.000444251, + -0.000412813, + -0.00038049, + -0.000347281, + -0.000313189, + -0.000278215, + -0.000242361, + -0.000205629, + -0.000168024, + -0.000129546, + -9.02024e-05, + -4.99954e-05, + -8.93026e-06, + 3.2988e-05, + 7.57537e-05, + 0.000119361, + 0.000163804, + 0.000209075, + 0.000255167, + 0.000302074, + 0.000349786, + 0.000398297, + 0.000447596, + 0.000497676, + 0.000548526, + 0.000600136, + 0.000652497, + 0.000705598, + 0.000759427, + 0.000813972, + 0.000869223, + 0.000925166, + 0.000981789, + 0.00103908, + 0.00109702, + 0.00115561, + 0.00121482, + 0.00127464, + 0.00133505, + 0.00139605, + 0.00145762, + 0.00151973, + 0.00158238, + 0.00164555, + 0.00170922, + 0.00177337, + 0.00183799, + 0.00190305, + 0.00196854, + 0.00203445, + 0.00210075, + 0.00216742, + 0.00223445, + 0.00230181, + 0.00236949, + 0.00243747, + 0.00250572, + 0.00257423, + 0.00264296, + 0.00271192, + 0.00278107, + 0.00285039, + 0.00291986, + 0.00298947, + 0.00305918, + 0.00312898, + 0.00319884, + 0.00326874, + 0.00333866, + 0.00340857, + 0.00347846, + 0.00354831, + 0.00361808, + 0.00368775, + 0.00375731, + 0.00382673, + 0.00389599, + 0.00396506, + 0.00403393, + 0.00410256, + 0.00417094, + 0.00423904, + 0.00430684, + 0.00437431, + 0.00444144, + 0.0045082, + 0.00457457, + 0.00464052, + 0.00470603, + 0.00477108, + 0.00483565, + 0.00489972, + 0.00496325, + 0.00502623, + 0.00508865, + 0.00515046, + 0.00521166, + 0.00527223, + 0.00533213, + 0.00539135, + 0.00544987, + 0.00550766, + 0.00556472, + 0.005621, + 0.00567651, + 0.00573121, + 0.00578508, + 0.00583811, + 0.00589028, + 0.00594157, + 0.00599196, + 0.00604143, + 0.00608996, + 0.00613754, + 0.00618415, + 0.00622977, + 0.00627439, + 0.00631798, + 0.00636054, + 0.00640204, + 0.0064425, + 0.00648186, + 0.00652009, + 0.00655722, + 0.00659322, + 0.00662808, + 0.00666179, + 0.00669433, + 0.00672571, + 0.00675589, + 0.00678488, + 0.00681266, + 0.00683921, + 0.00686454, + 0.00688863, + 0.00691147, + 0.00693305, + 0.00695336, + 0.0069724, + 0.00699016, + 0.00700663, + 0.00702181, + 0.00703569, + 0.00704826, + 0.00705952, + 0.00706947, + 0.00707809, + 0.0070854, + 0.00709138, + 0.00709604, + 0.00709937, + 0.00710136, + 0.00710203, + 0.00710136, + 0.00709937, + 0.00709604, + 0.00709138, + 0.0070854, + 0.00707809, + 0.00706947, + 0.00705952, + 0.00704826, + 0.00703569, + 0.00702181, + 0.00700663, + 0.00699016, + 0.0069724, + 0.00695336, + 0.00693305, + 0.00691147, + 0.00688863, + 0.00686454, + 0.00683921, + 0.00681266, + 0.00678488, + 0.00675589, + 0.00672571, + 0.00669433, + 0.00666179, + 0.00662808, + 0.00659322, + 0.00655722, + 0.00652009, + 0.00648186, + 0.0064425, + 0.00640204, + 0.00636054, + 0.00631798, + 0.00627439, + 0.00622977, + 0.00618415, + 0.00613754, + 0.00608996, + 0.00604143, + 0.00599196, + 0.00594157, + 0.00589028, + 0.00583811, + 0.00578508, + 0.00573121, + 0.00567651, + 0.005621, + 0.00556472, + 0.00550766, + 0.00544987, + 0.00539135, + 0.00533213, + 0.00527223, + 0.00521166, + 0.00515046, + 0.00508865, + 0.00502623, + 0.00496325, + 0.00489972, + 0.00483565, + 0.00477108, + 0.00470603, + 0.00464052, + 0.00457457, + 0.0045082, + 0.00444144, + 0.00437431, + 0.00430684, + 0.00423904, + 0.00417094, + 0.00410256, + 0.00403393, + 0.00396506, + 0.00389599, + 0.00382673, + 0.00375731, + 0.00368775, + 0.00361808, + 0.00354831, + 0.00347846, + 0.00340857, + 0.00333866, + 0.00326874, + 0.00319884, + 0.00312898, + 0.00305918, + 0.00298947, + 0.00291986, + 0.00285039, + 0.00278107, + 0.00271192, + 0.00264296, + 0.00257423, + 0.00250572, + 0.00243747, + 0.00236949, + 0.00230181, + 0.00223445, + 0.00216742, + 0.00210075, + 0.00203445, + 0.00196854, + 0.00190305, + 0.00183799, + 0.00177337, + 0.00170922, + 0.00164555, + 0.00158238, + 0.00151973, + 0.00145762, + 0.00139605, + 0.00133505, + 0.00127464, + 0.00121482, + 0.00115561, + 0.00109702, + 0.00103908, + 0.000981789, + 0.000925166, + 0.000869223, + 0.000813972, + 0.000759427, + 0.000705598, + 0.000652497, + 0.000600136, + 0.000548526, + 0.000497676, + 0.000447596, + 0.000398297, + 0.000349786, + 0.000302074, + 0.000255167, + 0.000209075, + 0.000163804, + 0.000119361, + 7.57537e-05, + 3.2988e-05, + -8.93026e-06, + -4.99954e-05, + -9.02024e-05, + -0.000129546, + -0.000168024, + -0.000205629, + -0.000242361, + -0.000278215, + -0.000313189, + -0.000347281, + -0.00038049, + -0.000412813, + -0.000444251, + -0.000474802, + -0.000504468, + -0.000533246, + -0.000561139, + -0.000588146, + -0.000614269, + -0.000639509, + -0.000663865, + -0.00068735, + -0.000709965, + -0.000731704, + -0.000752576, + -0.000772581, + -0.000791726, + -0.000810015, + -0.000827453, + -0.000844046, + -0.0008598, + -0.000874721, + -0.000888816, + -0.00090209, + -0.000914552, + -0.000926208, + -0.000937065, + -0.000947131, + -0.000956415, + -0.000964925, + -0.000972668, + -0.000979654, + -0.000985892, + -0.000991392, + -0.000996162, + -0.00100021, + -0.00100356, + -0.0010062, + -0.00100816, + -0.00100943, + -0.00101005, + -0.00101, + -0.00100932, + -0.001008, + -0.00100606, + -0.00100351, + -0.00100036, + -0.000996634, + -0.000992332, + -0.00098747, + -0.000982062, + -0.000976119, + -0.000969654, + -0.000962682, + -0.000955214, + -0.000947263, + -0.000938844, + -0.00092997, + -0.000920652, + -0.000910906, + -0.000900744, + -0.00089018, + -0.000879227, + -0.000867898, + -0.000856207, + -0.000844168, + -0.000831793, + -0.000819098, + -0.000806094, + -0.000792798, + -0.000779217, + -0.000765372, + -0.000751266, + -0.000736922, + -0.00072229, + -0.000707464, + -0.000692506, + -0.000677361, + -0.000662049, + -0.000646575, + -0.000630955, + -0.000615196, + -0.000599314, + -0.000583319, + -0.000567225, + -0.000551043, + -0.000534785, + -0.000518464, + -0.000502091, + -0.00048568, + -0.00046924, + -0.000452784, + -0.000436324, + -0.00041987, + -0.000403434, + -0.000387027, + -0.00037066, + -0.000354342, + -0.000338084, + -0.000321898, + -0.000305792, + -0.000289776, + -0.000273861, + -0.000258056, + -0.000242369, + -0.000226811, + -0.00021139, + -0.000196115, + -0.000180995, + -0.000166036, + -0.000151248, + -0.000136638, + -0.000122213, + -0.000107981, + -9.39481e-05, + -8.01218e-05, + -6.65082e-05, + -5.31139e-05, + -3.99444e-05, + -2.70061e-05, + -1.43041e-05, + -1.844e-06, + 1.03695e-05, + 2.23311e-05, + 3.40369e-05, + 4.54822e-05, + 5.66636e-05, + 6.7577e-05, + 7.82196e-05, + 8.85877e-05, + 9.8679e-05, + 0.000108491, + 0.00011802, + 0.000127266, + 0.000136224, + 0.000144895, + 0.000153275, + 0.000161363, + 0.000169145, + 0.000176621, + 0.000183812, + 0.000190706, + 0.000197304, + 0.000203605, + 0.000209608, + 0.000215314, + 0.000220723, + 0.000225837, + 0.000230655, + 0.00023518, + 0.000239412, + 0.000243354, + 0.000247007, + 0.000250373, + 0.000253453, + 0.000256251, + 0.000258767, + 0.000261006, + 0.000262968, + 0.000264658, + 0.000266079, + 0.000267232, + 0.000268123, + 0.000268754, + 0.000269129, + 0.000269253, + 0.000269128, + 0.00026876, + 0.000268152, + 0.000267308, + 0.000266234, + 0.000264933, + 0.000263411, + 0.000261672, + 0.000259721, + 0.000257562, + 0.000255202, + 0.000252644, + 0.000249895, + 0.000246959, + 0.000243843, + 0.000240551, + 0.000237089, + 0.000233463, + 0.000229678, + 0.00022574, + 0.000221654, + 0.000217426, + 0.000213063, + 0.000208568, + 0.000203949, + 0.000199211, + 0.00019436, + 0.0001894, + 0.00018434, + 0.000179183, + 0.000173938, + 0.000168608, + 0.000163202, + 0.000157725, + 0.000152183, + 0.000146583, + 0.000140929, + 0.000135218, + 0.000129468, + 0.000123681, + 0.000117864, + 0.00011202, + 0.000106157, + 0.000100278, + 9.43895e-05, + 8.84957e-05, + 8.26029e-05, + 7.67152e-05, + 7.08393e-05, + 6.49787e-05, + 5.91403e-05, + 5.33273e-05, + 4.75467e-05, + 4.18011e-05, + 3.60975e-05, + 3.04382e-05, + 2.483e-05, + 1.9275e-05, + 1.37796e-05, + 8.34567e-06, + 2.97965e-06, + -2.31702e-06, + -7.53795e-06, + -1.2682e-05, + -1.77428e-05, + -2.27195e-05, + -2.7606e-05, + -3.24015e-05, + -3.71002e-05, + -4.17016e-05, + -4.62001e-05, + -5.05954e-05, + -5.48823e-05, + -5.90607e-05, + -6.31256e-05, + -6.70773e-05, + -7.09109e-05, + -7.46271e-05, + -7.82211e-05, + -8.16936e-05, + -8.50404e-05, + -8.82623e-05, + -9.13551e-05, + -9.43199e-05, + -9.71528e-05, + -9.98553e-05, + -0.000102424, + -0.00010486, + -0.00010716, + -0.000109326, + -0.000111356, + -0.000113251, + -0.000115009, + -0.000116633, + -0.000118119, + -0.000119471, + -0.000120685, + -0.000121766, + -0.000122709, + -0.000123518, + -0.000124185, + -0.000124729, + -0.000125145, + -0.000125428, + -0.000125578, + -0.000125598, + -0.000125487, + -0.00012525, + -0.000124884, + -0.000124397, + -0.000123784, + -0.000123053, + -0.000122201, + -0.000121235, + -0.000120152, + -0.000118959, + -0.000117652, + -0.000116241, + -0.00011472, + -0.000113099, + -0.000111372, + -0.00010955, + -0.000107627, + -0.000105614, + -0.000103505, + -0.000101311, + -9.9026e-05, + -9.66619e-05, + -9.42119e-05, + -9.16888e-05, + -8.9085e-05, + -8.64141e-05, + -8.36678e-05, + -8.08605e-05, + -7.7983e-05, + -7.50509e-05, + -7.20538e-05, + -6.90085e-05, + -6.59032e-05, + -6.27565e-05, + -5.95548e-05, + -5.63184e-05, + -5.3032e-05, + -4.97179e-05, + -4.63581e-05, + -4.29778e-05, + -3.95556e-05, + -3.61199e-05, + -3.26453e-05, + -2.91642e-05, + -2.56455e-05, + -2.21275e-05, + -1.85712e-05, + -1.50227e-05, + -1.14317e-05, + -7.85603e-06, + -4.22748e-06, + -6.22187e-07, + 3.05918e-06, + 6.70859e-06, + 1.04905e-05, + 1.42303e-05, + 1.82863e-05, + 2.2286e-05 +}; diff --git a/libcodec2-android/src/codec2/src/rn_coh.h b/libcodec2-android/src/codec2/src/rn_coh.h new file mode 100644 index 0000000..d4b3c81 --- /dev/null +++ b/libcodec2-android/src/codec2/src/rn_coh.h @@ -0,0 +1,604 @@ +/* Generated by rn_file() Octave function */ + +const float gt_alpha5_root_coh[]={ + 4.05576e-05, + 2.58255e-05, + 1.58964e-05, + 5.78773e-06, + -3.71244e-06, + -1.33229e-05, + -2.2664e-05, + -3.20611e-05, + -4.12734e-05, + -5.04935e-05, + -5.9545e-05, + -6.85565e-05, + -7.73902e-05, + -8.6137e-05, + -9.46835e-05, + -0.000103097, + -0.000111281, + -0.000119289, + -0.000127034, + -0.000134559, + -0.000141789, + -0.000148756, + -0.000155393, + -0.000161723, + -0.000167689, + -0.000173315, + -0.00017854, + -0.000183382, + -0.000187794, + -0.000191793, + -0.000195333, + -0.000198429, + -0.000201038, + -0.000203173, + -0.000204797, + -0.000205922, + -0.000206515, + -0.00020659, + -0.000206117, + -0.000205109, + -0.000203541, + -0.000201427, + -0.000198743, + -0.000195505, + -0.000191693, + -0.000187324, + -0.000182382, + -0.000176885, + -0.000170822, + -0.00016421, + -0.000157041, + -0.000149335, + -0.000141089, + -0.000132323, + -0.000123038, + -0.000113258, + -0.000102985, + -9.22439e-05, + -8.10442e-05, + -6.94109e-05, + -5.73536e-05, + -4.49012e-05, + -3.20661e-05, + -1.88794e-05, + -5.35615e-06, + 8.47105e-06, + 2.25833e-05, + 3.69472e-05, + 5.15418e-05, + 6.63317e-05, + 8.12934e-05, + 9.63895e-05, + 0.000111594, + 0.000126869, + 0.000142183, + 0.000157497, + 0.000172781, + 0.000187996, + 0.000203111, + 0.000218088, + 0.000232892, + 0.000247474, + 0.000261806, + 0.000275847, + 0.000289559, + 0.000302903, + 0.000315839, + 0.00032833, + 0.000340339, + 0.000351824, + 0.000362751, + 0.00037308, + 0.000382774, + 0.000391795, + 0.000400108, + 0.000407675, + 0.000414464, + 0.000420437, + 0.000425565, + 0.000429812, + 0.000433151, + 0.000435544, + 0.000436975, + 0.000437401, + 0.000436865, + 0.000435237, + 0.00043246, + 0.000428592, + 0.000423608, + 0.000417497, + 0.00041024, + 0.000401823, + 0.000392231, + 0.000381449, + 0.000369471, + 0.000356284, + 0.000341885, + 0.000326267, + 0.00030943, + 0.000291373, + 0.000272099, + 0.000251612, + 0.000229921, + 0.000207034, + 0.000182964, + 0.000157726, + 0.000131338, + 0.000103821, + 7.51956e-05, + 4.54842e-05, + 1.4721e-05, + -1.7067e-05, + -4.98479e-05, + -8.35883e-05, + -0.000118248, + -0.00015379, + -0.000190167, + -0.000227336, + -0.000265248, + -0.000303856, + -0.000343104, + -0.000382942, + -0.00042331, + -0.000464152, + -0.000505403, + -0.000547003, + -0.000588883, + -0.000630979, + -0.000673218, + -0.000715533, + -0.000757849, + -0.000800092, + -0.000842187, + -0.000884054, + -0.000925613, + -0.000966788, + -0.00100749, + -0.00104765, + -0.00108717, + -0.00112597, + -0.00116397, + -0.00120108, + -0.0012372, + -0.00127227, + -0.00130617, + -0.00133884, + -0.00137017, + -0.00140008, + -0.00142848, + -0.00145528, + -0.0014804, + -0.00150374, + -0.00152522, + -0.00154475, + -0.00156225, + -0.00157763, + -0.00159081, + -0.00160171, + -0.00161024, + -0.00161633, + -0.0016199, + -0.00162088, + -0.00161917, + -0.00161472, + -0.00160744, + -0.00159729, + -0.00158419, + -0.00156807, + -0.00154888, + -0.00152655, + -0.00150103, + -0.00147227, + -0.00144021, + -0.00140482, + -0.00136604, + -0.00132384, + -0.00127818, + -0.00122903, + -0.00117635, + -0.00112013, + -0.00106033, + -0.000996946, + -0.000929956, + -0.000859348, + -0.000785117, + -0.000707261, + -0.000625779, + -0.00054068, + -0.000451952, + -0.000359651, + -0.000263788, + -0.00016436, + -6.13947e-05, + 4.5076e-05, + 0.000155016, + 0.000268384, + 0.000385134, + 0.000505217, + 0.000628582, + 0.000755171, + 0.000884923, + 0.00101777, + 0.00115366, + 0.00129249, + 0.00143421, + 0.00157873, + 0.00172596, + 0.00187583, + 0.00202822, + 0.00218306, + 0.00234023, + 0.00249965, + 0.00266119, + 0.00282475, + 0.00299023, + 0.00315749, + 0.00332643, + 0.00349691, + 0.00366882, + 0.00384202, + 0.00401639, + 0.0041918, + 0.0043681, + 0.00454516, + 0.00472285, + 0.00490101, + 0.00507951, + 0.00525821, + 0.00543695, + 0.0056156, + 0.005794, + 0.00597201, + 0.00614947, + 0.00632623, + 0.00650216, + 0.00667708, + 0.00685086, + 0.00702335, + 0.00719439, + 0.00736383, + 0.00753153, + 0.00769734, + 0.00786111, + 0.00802269, + 0.00818194, + 0.00833872, + 0.00849289, + 0.0086443, + 0.00879283, + 0.00893832, + 0.00908066, + 0.00921971, + 0.00935534, + 0.00948743, + 0.00961585, + 0.00974049, + 0.00986123, + 0.00997795, + 0.0100905, + 0.0101989, + 0.0103029, + 0.0104025, + 0.0104976, + 0.0105881, + 0.0106738, + 0.0107548, + 0.010831, + 0.0109022, + 0.0109684, + 0.0110295, + 0.0110855, + 0.0111364, + 0.011182, + 0.0112224, + 0.0112575, + 0.0112872, + 0.0113115, + 0.0113305, + 0.0113441, + 0.0113522, + 0.0113549, + 0.0113522, + 0.0113441, + 0.0113305, + 0.0113115, + 0.0112872, + 0.0112575, + 0.0112224, + 0.011182, + 0.0111364, + 0.0110855, + 0.0110295, + 0.0109684, + 0.0109022, + 0.010831, + 0.0107548, + 0.0106738, + 0.0105881, + 0.0104976, + 0.0104025, + 0.0103029, + 0.0101989, + 0.0100905, + 0.00997795, + 0.00986123, + 0.00974049, + 0.00961585, + 0.00948743, + 0.00935534, + 0.00921971, + 0.00908066, + 0.00893832, + 0.00879283, + 0.0086443, + 0.00849289, + 0.00833872, + 0.00818194, + 0.00802269, + 0.00786111, + 0.00769734, + 0.00753153, + 0.00736383, + 0.00719439, + 0.00702335, + 0.00685086, + 0.00667708, + 0.00650216, + 0.00632623, + 0.00614947, + 0.00597201, + 0.005794, + 0.0056156, + 0.00543695, + 0.00525821, + 0.00507951, + 0.00490101, + 0.00472285, + 0.00454516, + 0.0043681, + 0.0041918, + 0.00401639, + 0.00384202, + 0.00366882, + 0.00349691, + 0.00332643, + 0.00315749, + 0.00299023, + 0.00282475, + 0.00266119, + 0.00249965, + 0.00234023, + 0.00218306, + 0.00202822, + 0.00187583, + 0.00172596, + 0.00157873, + 0.00143421, + 0.00129249, + 0.00115366, + 0.00101777, + 0.000884923, + 0.000755171, + 0.000628582, + 0.000505217, + 0.000385134, + 0.000268384, + 0.000155016, + 4.5076e-05, + -6.13947e-05, + -0.00016436, + -0.000263788, + -0.000359651, + -0.000451952, + -0.00054068, + -0.000625779, + -0.000707261, + -0.000785117, + -0.000859348, + -0.000929956, + -0.000996946, + -0.00106033, + -0.00112013, + -0.00117635, + -0.00122903, + -0.00127818, + -0.00132384, + -0.00136604, + -0.00140482, + -0.00144021, + -0.00147227, + -0.00150103, + -0.00152655, + -0.00154888, + -0.00156807, + -0.00158419, + -0.00159729, + -0.00160744, + -0.00161472, + -0.00161917, + -0.00162088, + -0.0016199, + -0.00161633, + -0.00161024, + -0.00160171, + -0.00159081, + -0.00157763, + -0.00156225, + -0.00154475, + -0.00152522, + -0.00150374, + -0.0014804, + -0.00145528, + -0.00142848, + -0.00140008, + -0.00137017, + -0.00133884, + -0.00130617, + -0.00127227, + -0.0012372, + -0.00120108, + -0.00116397, + -0.00112597, + -0.00108717, + -0.00104765, + -0.00100749, + -0.000966788, + -0.000925613, + -0.000884054, + -0.000842187, + -0.000800092, + -0.000757849, + -0.000715533, + -0.000673218, + -0.000630979, + -0.000588883, + -0.000547003, + -0.000505403, + -0.000464152, + -0.00042331, + -0.000382942, + -0.000343104, + -0.000303856, + -0.000265248, + -0.000227336, + -0.000190167, + -0.00015379, + -0.000118248, + -8.35883e-05, + -4.98479e-05, + -1.7067e-05, + 1.4721e-05, + 4.54842e-05, + 7.51956e-05, + 0.000103821, + 0.000131338, + 0.000157726, + 0.000182964, + 0.000207034, + 0.000229921, + 0.000251612, + 0.000272099, + 0.000291373, + 0.00030943, + 0.000326267, + 0.000341885, + 0.000356284, + 0.000369471, + 0.000381449, + 0.000392231, + 0.000401823, + 0.00041024, + 0.000417497, + 0.000423608, + 0.000428592, + 0.00043246, + 0.000435237, + 0.000436865, + 0.000437401, + 0.000436975, + 0.000435544, + 0.000433151, + 0.000429812, + 0.000425565, + 0.000420437, + 0.000414464, + 0.000407675, + 0.000400108, + 0.000391795, + 0.000382774, + 0.00037308, + 0.000362751, + 0.000351824, + 0.000340339, + 0.00032833, + 0.000315839, + 0.000302903, + 0.000289559, + 0.000275847, + 0.000261806, + 0.000247474, + 0.000232892, + 0.000218088, + 0.000203111, + 0.000187996, + 0.000172781, + 0.000157497, + 0.000142183, + 0.000126869, + 0.000111594, + 9.63895e-05, + 8.12934e-05, + 6.63317e-05, + 5.15418e-05, + 3.69472e-05, + 2.25833e-05, + 8.47105e-06, + -5.35615e-06, + -1.88794e-05, + -3.20661e-05, + -4.49012e-05, + -5.73536e-05, + -6.94109e-05, + -8.10442e-05, + -9.22439e-05, + -0.000102985, + -0.000113258, + -0.000123038, + -0.000132323, + -0.000141089, + -0.000149335, + -0.000157041, + -0.00016421, + -0.000170822, + -0.000176885, + -0.000182382, + -0.000187324, + -0.000191693, + -0.000195505, + -0.000198743, + -0.000201427, + -0.000203541, + -0.000205109, + -0.000206117, + -0.00020659, + -0.000206515, + -0.000205922, + -0.000204797, + -0.000203173, + -0.000201038, + -0.000198429, + -0.000195333, + -0.000191793, + -0.000187794, + -0.000183382, + -0.00017854, + -0.000173315, + -0.000167689, + -0.000161723, + -0.000155393, + -0.000148756, + -0.000141789, + -0.000134559, + -0.000127034, + -0.000119289, + -0.000111281, + -0.000103097, + -9.46835e-05, + -8.6137e-05, + -7.73902e-05, + -6.85565e-05, + -5.9545e-05, + -5.04935e-05, + -4.12734e-05, + -3.20611e-05, + -2.2664e-05, + -1.33229e-05, + -3.71244e-06, + 5.78773e-06, + 1.58964e-05, + 2.58255e-05 +}; diff --git a/libcodec2-android/src/codec2/src/rxdec_coeff.h b/libcodec2-android/src/codec2/src/rxdec_coeff.h new file mode 100644 index 0000000..a08cf9f --- /dev/null +++ b/libcodec2-android/src/codec2/src/rxdec_coeff.h @@ -0,0 +1,35 @@ +/* Generated by rxdec_file() Octave function */ + +const float rxdec_coeff[]={ + -0.00125472, + -0.00204605, + -0.0019897, + 0.000163906, + 0.00490937, + 0.00986375, + 0.0096718, + -0.000480351, + -0.019311, + -0.0361822, + -0.0341251, + 0.000827866, + 0.0690577, + 0.152812, + 0.222115, + 0.249004, + 0.222115, + 0.152812, + 0.0690577, + 0.000827866, + -0.0341251, + -0.0361822, + -0.019311, + -0.000480351, + 0.0096718, + 0.00986375, + 0.00490937, + 0.000163906, + -0.0019897, + -0.00204605, + -0.00125472 +}; diff --git a/libcodec2-android/src/codec2/src/sine.c b/libcodec2-android/src/codec2/src/sine.c new file mode 100644 index 0000000..750e262 --- /dev/null +++ b/libcodec2-android/src/codec2/src/sine.c @@ -0,0 +1,676 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: sine.c + AUTHOR......: David Rowe + DATE CREATED: 19/8/2010 + + Sinusoidal analysis and synthesis functions. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 1990-2010 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +/*---------------------------------------------------------------------------*\ + + INCLUDES + +\*---------------------------------------------------------------------------*/ + +#include +#include +#include + +#include "defines.h" +#include "sine.h" +#include "kiss_fft.h" + +#define HPF_BETA 0.125 + +/*---------------------------------------------------------------------------*\ + + HEADERS + +\*---------------------------------------------------------------------------*/ + +void hs_pitch_refinement(MODEL *model, COMP Sw[], float pmin, float pmax, + float pstep); + +/*---------------------------------------------------------------------------*\ + + FUNCTIONS + +\*---------------------------------------------------------------------------*/ + +C2CONST c2const_create(int Fs, float framelength_s) { + C2CONST c2const; + + assert((Fs == 8000) || (Fs = 16000)); + c2const.Fs = Fs; + c2const.n_samp = round(Fs*framelength_s); + c2const.max_amp = floor(Fs*P_MAX_S/2); + c2const.p_min = floor(Fs*P_MIN_S); + c2const.p_max = floor(Fs*P_MAX_S); + c2const.m_pitch = floor(Fs*M_PITCH_S); + c2const.Wo_min = TWO_PI/c2const.p_max; + c2const.Wo_max = TWO_PI/c2const.p_min; + + if (Fs == 8000) { + c2const.nw = 279; + } else { + c2const.nw = 511; /* actually a bit shorter in time but lets us maintain constant FFT size */ + } + + c2const.tw = Fs*TW_S; + + /* + fprintf(stderr, "max_amp: %d m_pitch: %d\n", c2const.n_samp, c2const.m_pitch); + fprintf(stderr, "p_min: %d p_max: %d\n", c2const.p_min, c2const.p_max); + fprintf(stderr, "Wo_min: %f Wo_max: %f\n", c2const.Wo_min, c2const.Wo_max); + fprintf(stderr, "nw: %d tw: %d\n", c2const.nw, c2const.tw); + */ + + return c2const; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: make_analysis_window + AUTHOR......: David Rowe + DATE CREATED: 11/5/94 + + Init function that generates the time domain analysis window and it's DFT. + +\*---------------------------------------------------------------------------*/ + +void make_analysis_window(C2CONST *c2const, codec2_fft_cfg fft_fwd_cfg, float w[], float W[]) +{ + float m; + COMP wshift[FFT_ENC]; + int i,j; + int m_pitch = c2const->m_pitch; + int nw = c2const->nw; + + /* + Generate Hamming window centered on M-sample pitch analysis window + + 0 M/2 M-1 + |-------------|-------------| + |-------|-------| + nw samples + + All our analysis/synthsis is centred on the M/2 sample. + */ + + m = 0.0; + for(i=0; im_pitch; + int nw = c2const->nw; + + for(i=0; iWo + 5; + pmin = TWO_PI/model->Wo - 5; + pstep = 1.0; + hs_pitch_refinement(model,Sw,pmin,pmax,pstep); + + /* Fine refinement */ + + pmax = TWO_PI/model->Wo + 1; + pmin = TWO_PI/model->Wo - 1; + pstep = 0.25; + hs_pitch_refinement(model,Sw,pmin,pmax,pstep); + + /* Limit range */ + + if (model->Wo < TWO_PI/c2const->p_max) + model->Wo = TWO_PI/c2const->p_max; + if (model->Wo > TWO_PI/c2const->p_min) + model->Wo = TWO_PI/c2const->p_min; + + model->L = floorf(PI/model->Wo); + + /* trap occasional round off issues with floorf() */ + if (model->Wo*model->L >= 0.95*PI) { + model->L--; + } + assert(model->Wo*model->L < PI); +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: hs_pitch_refinement + AUTHOR......: David Rowe + DATE CREATED: 27/5/94 + + Harmonic sum pitch refinement function. + + pmin pitch search range minimum + pmax pitch search range maximum + step pitch search step size + model current pitch estimate in model.Wo + + model refined pitch estimate in model.Wo + +\*---------------------------------------------------------------------------*/ + +void hs_pitch_refinement(MODEL *model, COMP Sw[], float pmin, float pmax, float pstep) +{ + int m; /* loop variable */ + int b; /* bin for current harmonic centre */ + float E; /* energy for current pitch*/ + float Wo; /* current "test" fundamental freq. */ + float Wom; /* Wo that maximises E */ + float Em; /* mamimum energy */ + float r, one_on_r; /* number of rads/bin */ + float p; /* current pitch */ + + /* Initialisation */ + + model->L = PI/model->Wo; /* use initial pitch est. for L */ + Wom = model->Wo; + Em = 0.0; + r = TWO_PI/FFT_ENC; + one_on_r = 1.0/r; + + /* Determine harmonic sum for a range of Wo values */ + + for(p=pmin; p<=pmax; p+=pstep) { + E = 0.0; + Wo = TWO_PI/p; + + /* Sum harmonic magnitudes */ + for(m=1; m<=model->L; m++) { + b = (int)(m*Wo*one_on_r + 0.5); + E += Sw[b].real*Sw[b].real + Sw[b].imag*Sw[b].imag; + } + /* Compare to see if this is a maximum */ + + if (E > Em) { + Em = E; + Wom = Wo; + } + } + + model->Wo = Wom; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: estimate_amplitudes + AUTHOR......: David Rowe + DATE CREATED: 27/5/94 + + Estimates the complex amplitudes of the harmonics. + +\*---------------------------------------------------------------------------*/ + +void estimate_amplitudes(MODEL *model, COMP Sw[], float W[], int est_phase) +{ + int i,m; /* loop variables */ + int am,bm; /* bounds of current harmonic */ + float den; /* denominator of amplitude expression */ + + float r = TWO_PI/FFT_ENC; + float one_on_r = 1.0/r; + + for(m=1; m<=model->L; m++) { + /* Estimate ampltude of harmonic */ + + den = 0.0; + am = (int)((m - 0.5)*model->Wo*one_on_r + 0.5); + bm = (int)((m + 0.5)*model->Wo*one_on_r + 0.5); + + for(i=am; iA[m] = sqrtf(den); + + if (est_phase) { + int b = (int)(m*model->Wo/r + 0.5); /* DFT bin of centre of current harmonic */ + + /* Estimate phase of harmonic, this is expensive in CPU for + embedded devicesso we make it an option */ + + model->phi[m] = atan2f(Sw[b].imag,Sw[b].real); + } + } +} + +/*---------------------------------------------------------------------------*\ + + est_voicing_mbe() + + Returns the error of the MBE cost function for a fiven F0. + + Note: I think a lot of the operations below can be simplified as + W[].imag = 0 and has been normalised such that den always equals 1. + +\*---------------------------------------------------------------------------*/ + +float est_voicing_mbe( + C2CONST *c2const, + MODEL *model, + COMP Sw[], + float W[] + ) +{ + int l,al,bl,m; /* loop variables */ + COMP Am; /* amplitude sample for this band */ + int offset; /* centers Hw[] about current harmonic */ + float den; /* denominator of Am expression */ + float error; /* accumulated error between original and synthesised */ + float Wo; + float sig, snr; + float elow, ehigh, eratio; + float sixty; + COMP Ew; + Ew.real = 0; + Ew.imag = 0; + + int l_1000hz = model->L*1000.0/(c2const->Fs/2); + sig = 1E-4; + for(l=1; l<=l_1000hz; l++) { + sig += model->A[l]*model->A[l]; + } + + Wo = model->Wo; + error = 1E-4; + + /* Just test across the harmonics in the first 1000 Hz */ + + for(l=1; l<=l_1000hz; l++) { + Am.real = 0.0; + Am.imag = 0.0; + den = 0.0; + al = ceilf((l - 0.5)*Wo*FFT_ENC/TWO_PI); + bl = ceilf((l + 0.5)*Wo*FFT_ENC/TWO_PI); + + /* Estimate amplitude of harmonic assuming harmonic is totally voiced */ + + offset = FFT_ENC/2 - l*Wo*FFT_ENC/TWO_PI + 0.5; + for(m=al; m V_THRESH) + model->voiced = 1; + else + model->voiced = 0; + + /* post processing, helps clean up some voicing errors ------------------*/ + + /* + Determine the ratio of low freqency to high frequency energy, + voiced speech tends to be dominated by low frequency energy, + unvoiced by high frequency. This measure can be used to + determine if we have made any gross errors. + */ + + int l_2000hz = model->L*2000.0/(c2const->Fs/2); + int l_4000hz = model->L*4000.0/(c2const->Fs/2); + elow = ehigh = 1E-4; + for(l=1; l<=l_2000hz; l++) { + elow += model->A[l]*model->A[l]; + } + for(l=l_2000hz; l<=l_4000hz; l++) { + ehigh += model->A[l]*model->A[l]; + } + eratio = 10.0*log10f(elow/ehigh); + + /* Look for Type 1 errors, strongly V speech that has been + accidentally declared UV */ + + if (model->voiced == 0) + if (eratio > 10.0) + model->voiced = 1; + + /* Look for Type 2 errors, strongly UV speech that has been + accidentally declared V */ + + if (model->voiced == 1) { + if (eratio < -10.0) + model->voiced = 0; + + /* A common source of Type 2 errors is the pitch estimator + gives a low (50Hz) estimate for UV speech, which gives a + good match with noise due to the close harmoonic spacing. + These errors are much more common than people with 50Hz3 + pitch, so we have just a small eratio threshold. */ + + sixty = 60.0*TWO_PI/c2const->Fs; + if ((eratio < -4.0) && (model->Wo <= sixty)) + model->voiced = 0; + } + //printf(" v: %d snr: %f eratio: %3.2f %f\n",model->voiced,snr,eratio,dF0); + + return snr; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: make_synthesis_window + AUTHOR......: David Rowe + DATE CREATED: 11/5/94 + + Init function that generates the trapezoidal (Parzen) sythesis window. + +\*---------------------------------------------------------------------------*/ + +void make_synthesis_window(C2CONST *c2const, float Pn[]) +{ + int i; + float win; + int n_samp = c2const->n_samp; + int tw = c2const->tw; + + /* Generate Parzen window in time domain */ + + win = 0.0; + for(i=0; iL; l++) { + b = (int)(l*model->Wo*FFT_DEC/TWO_PI + 0.5); + if (b > ((FFT_DEC/2)-1)) { + b = (FFT_DEC/2)-1; + } + Sw_[b].real = model->A[l]*cosf(model->phi[l]); + Sw_[b].imag = model->A[l]*sinf(model->phi[l]); + } + + /* Perform inverse DFT */ + + codec2_fftri(fftr_inv_cfg, Sw_,sw_); + + /* Overlap add to previous samples */ + + #ifdef USE_KISS_FFT + #define FFTI_FACTOR ((float)1.0) + #else + #define FFTI_FACTOR ((float32_t)FFT_DEC) + #endif + + for(i=0; i. +*/ + +#ifndef __SINE__ +#define __SINE__ + +#include "defines.h" +#include "comp.h" +#include "codec2_fft.h" + +C2CONST c2const_create(int Fs, float framelength_ms); + +void make_analysis_window(C2CONST *c2const, codec2_fft_cfg fft_fwd_cfg, float w[], float W[]); +float hpf(float x, float states[]); +void dft_speech(C2CONST *c2const, codec2_fft_cfg fft_fwd_cfg, COMP Sw[], float Sn[], float w[]); +void two_stage_pitch_refinement(C2CONST *c2const, MODEL *model, COMP Sw[]); +void estimate_amplitudes(MODEL *model, COMP Sw[], float W[], int est_phase); +float est_voicing_mbe(C2CONST *c2const, MODEL *model, COMP Sw[], float W[]); +void make_synthesis_window(C2CONST *c2const, float Pn[]); +void synthesise(int n_samp, codec2_fftr_cfg fftr_inv_cfg, float Sn_[], MODEL *model, float Pn[], int shift); + +#define CODEC2_RAND_MAX 32767 +int codec2_rand(void); + +#endif diff --git a/libcodec2-android/src/codec2/src/ssbfilt_coeff.h b/libcodec2-android/src/codec2/src/ssbfilt_coeff.h new file mode 100644 index 0000000..457f03a --- /dev/null +++ b/libcodec2-android/src/codec2/src/ssbfilt_coeff.h @@ -0,0 +1,107 @@ +/* 600 - 2600 Hz FIR filter coeffs */ +/* Generated by make_ssbfilt Octave script */ + +#define SSBFILT_N 100 + +float ssbfilt_coeff[]={ + 0.000065, + -0.000030, + 0.000041, + 0.000010, + -0.000128, + -0.000072, + -0.000007, + -0.000095, + -0.000063, + 0.000016, + -0.000000, + 0.000022, + -0.000115, + -0.000233, + -0.000023, + -0.000315, + -0.000725, + 0.000073, + 0.000380, + -0.000345, + 0.000895, + 0.002401, + 0.001241, + 0.001409, + 0.003106, + 0.001236, + -0.001117, + -0.001091, + -0.003184, + -0.005981, + -0.006904, + -0.007920, + -0.005588, + -0.002546, + -0.003476, + 0.005155, + 0.017465, + 0.010772, + 0.013033, + 0.035082, + 0.018466, + -0.010261, + 0.016676, + 0.004890, + -0.076807, + -0.055969, + -0.007360, + -0.155769, + -0.203150, + 0.179458, + 0.475523, + 0.179458, + -0.203150, + -0.155769, + -0.007360, + -0.055969, + -0.076807, + 0.004890, + 0.016676, + -0.010261, + 0.018466, + 0.035082, + 0.013033, + 0.010772, + 0.017465, + 0.005155, + -0.003476, + -0.002546, + -0.005588, + -0.007920, + -0.006904, + -0.005981, + -0.003184, + -0.001091, + -0.001117, + 0.001236, + 0.003106, + 0.001409, + 0.001241, + 0.002401, + 0.000895, + -0.000345, + 0.000380, + 0.000073, + -0.000725, + -0.000315, + -0.000023, + -0.000233, + -0.000115, + 0.000022, + -0.000000, + 0.000016, + -0.000063, + -0.000095, + -0.000007, + -0.000072, + -0.000128, + 0.000010, + 0.000041, + -0.000030 +}; \ No newline at end of file diff --git a/libcodec2-android/src/codec2/src/test_bits.h b/libcodec2-android/src/codec2/src/test_bits.h new file mode 100644 index 0000000..d1c01a0 --- /dev/null +++ b/libcodec2-android/src/codec2/src/test_bits.h @@ -0,0 +1,164 @@ +/* Generated by test_bits_file() Octave function */ + +const int test_bits[]={ + 0, + 1, + 1, + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 1, + 0, + 1, + 0, + 0, + 1, + 0, + 1, + 1, + 0, + 0, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 0, + 1, + 1, + 0, + 0, + 1, + 1, + 1, + 0, + 1, + 1, + 0, + 1, + 1, + 1, + 1, + 1, + 0, + 0, + 1, + 0, + 0, + 1, + 1, + 1, + 0, + 0, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 0, + 0, + 1, + 1, + 1, + 1, + 1, + 0, + 1, + 1, + 1, + 0, + 0, + 1, + 1, + 0, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 0, + 0, + 1, + 1, + 0, + 1, + 0, + 0, + 0, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1, + 1, + 0, + 1, + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 0, + 1, + 1, + 0, + 0, + 0, + 1, + 0, + 1, + 1, + 1, + 0, + 1 +}; diff --git a/libcodec2-android/src/codec2/src/test_bits_coh.h b/libcodec2-android/src/codec2/src/test_bits_coh.h new file mode 100644 index 0000000..b01299c --- /dev/null +++ b/libcodec2-android/src/codec2/src/test_bits_coh.h @@ -0,0 +1,564 @@ +/* Generated by test_bits_coh_file() Octave function */ + +const int test_bits_coh[]={ + 0, + 1, + 1, + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 1, + 0, + 1, + 0, + 0, + 1, + 0, + 1, + 1, + 0, + 0, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 0, + 1, + 1, + 0, + 0, + 1, + 1, + 1, + 0, + 1, + 1, + 0, + 1, + 1, + 1, + 1, + 1, + 0, + 0, + 1, + 0, + 0, + 1, + 1, + 1, + 0, + 0, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 0, + 0, + 1, + 1, + 1, + 1, + 1, + 0, + 1, + 1, + 1, + 0, + 0, + 1, + 1, + 0, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 0, + 0, + 1, + 1, + 0, + 1, + 0, + 0, + 0, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1, + 1, + 0, + 1, + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 0, + 1, + 1, + 0, + 0, + 0, + 1, + 0, + 1, + 1, + 1, + 0, + 1, + 1, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 0, + 1, + 1, + 0, + 1, + 0, + 1, + 1, + 0, + 0, + 0, + 1, + 0, + 1, + 1, + 1, + 0, + 1, + 1, + 1, + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 1, + 1, + 1, + 0, + 1, + 1, + 0, + 1, + 0, + 1, + 0, + 0, + 1, + 0, + 1, + 1, + 1, + 0, + 0, + 0, + 1, + 1, + 1, + 1, + 0, + 1, + 0, + 0, + 0, + 1, + 1, + 1, + 0, + 1, + 1, + 0, + 1, + 0, + 0, + 0, + 1, + 1, + 1, + 0, + 0, + 1, + 1, + 0, + 1, + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 1, + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 1, + 0, + 0, + 0, + 1, + 1, + 1, + 0, + 0, + 1, + 1, + 1, + 1, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 1, + 0, + 1, + 0, + 1, + 1, + 1, + 0, + 0, + 1, + 1, + 0, + 1, + 0, + 1, + 0, + 0, + 1, + 1, + 1, + 1, + 1, + 1, + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 1, + 1, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 0, + 1, + 1, + 1, + 0, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 0, + 1, + 0, + 0, + 1, + 1, + 0, + 1, + 1, + 0, + 1, + 1, + 0, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 0, + 0, + 0, + 1, + 1, + 0, + 1, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 1, + 1, + 0, + 1, + 1, + 0, + 1, + 1, + 1, + 1, + 0, + 1, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 0, + 0, + 1, + 0, + 1, + 0, + 1, + 1, + 1, + 1, + 1, + 0, + 1, + 1, + 1, + 0, + 0, + 0, + 1, + 0, + 1, + 1, + 1, + 1, + 1, + 0, + 1, + 1, + 0, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1, + 1, + 0, + 1, + 0, + 1, + 1, + 0, + 0, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1, + 1, + 0, + 1, + 1, + 1, + 1, + 0, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 0, + 0, + 1, + 1, + 1, + 0 +}; diff --git a/libcodec2-android/src/codec2/src/test_bits_ofdm.h b/libcodec2-android/src/codec2/src/test_bits_ofdm.h new file mode 100644 index 0000000..f0a2c6c --- /dev/null +++ b/libcodec2-android/src/codec2/src/test_bits_ofdm.h @@ -0,0 +1,584 @@ +/* Generated by test_bits_ofdm_file() Octave function */ + +const int test_bits_ofdm[]={ + 1, + 1, + 0, + 1, + 1, + 0, + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 1, + 0, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 1, + 0, + 0, + 1, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 0, + 0, + 1, + 1, + 0, + 0, + 1, + 1, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 1, + 0, + 1, + 0, + 1, + 1, + 0, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 1, + 0, + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 1, + 1, + 1, + 1, + 0, + 1, + 0, + 1, + 0, + 0, + 0, + 1, + 1, + 1, + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 1, + 0, + 0, + 1, + 1, + 1, + 0, + 0, + 1, + 1, + 1, + 0, + 1, + 1, + 1, + 1, + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 0, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 1, + 1, + 1, + 1, + 0, + 1, + 0, + 1, + 1, + 1, + 0, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0 +}; + +const uint8_t payload_data_bits[]={ + 1, + 1, + 0, + 0, + 1, + 1, + 1, + 0, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 0, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1, + 1, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 1, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 1, + 0, + 1, + 1, + 0, + 1, + 0, + 0, + 1, + 0, + 1, + 0, + 0, + 0, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 1, + 1, + 0, + 0, + 1, + 1, + 1, + 0 +}; + +const int test_codeword[]={ + 1, + 1, + 0, + 0, + 1, + 1, + 1, + 0, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 0, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1, + 1, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 1, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 1, + 0, + 1, + 1, + 0, + 1, + 0, + 0, + 1, + 0, + 1, + 0, + 0, + 0, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 1, + 1, + 0, + 0, + 1, + 1, + 1, + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 1, + 1, + 0, + 1, + 1, + 1, + 0, + 1, + 0, + 1, + 1, + 1, + 1, + 1, + 0, + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 1, + 1, + 0, + 1, + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 0, + 1, + 1, + 1, + 0, + 0, + 1, + 0, + 1, + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 0 +}; diff --git a/libcodec2-android/src/codec2/src/tollr.c b/libcodec2-android/src/codec2/src/tollr.c new file mode 100644 index 0000000..3edce9b --- /dev/null +++ b/libcodec2-android/src/codec2/src/tollr.c @@ -0,0 +1,19 @@ +/* + FILE...: tollr.c + AUTHOR.: David Rowe + CREATED: July 2020 + + Converts oneBitPerByte hard decisions to LLRs for LDPC testing. +*/ + +#include +#include + +int main(void) { + uint8_t bit; + while(fread(&bit,sizeof(uint8_t), 1, stdin)) { + float llr = 10.0*(1-2*bit); + fwrite(&llr,sizeof(float),1,stdout); + } + return 0; +} diff --git a/libcodec2-android/src/codec2/src/varicode.c b/libcodec2-android/src/codec2/src/varicode.c new file mode 100644 index 0000000..84de4c9 --- /dev/null +++ b/libcodec2-android/src/codec2/src/varicode.c @@ -0,0 +1,493 @@ +//========================================================================== +// Name: varicode.h +// Purpose: Varicode encoded and decode functions +// Created: Nov 24, 2012 +// Authors: David Rowe +// +// To test: +// $ gcc varicode.c -o varicode -DVARICODE_UNITTEST -Wall +// $ ./varicode +// +// License: +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2.1, +// as published by the Free Software Foundation. This program is +// distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public +// License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, see . +// +//========================================================================== + +#include +#include +#include +#include +#include +#include "varicode.h" +#include "varicode_table.h" + +#include "debug_alloc.h" + + +/* + output is an unpacked array of bits of maximum size max_out. Note + unpacked arrays are a more suitable form for modulator input. + + Code 1 covers the entire ASCII char set. +*/ + +int varicode_encode1(short varicode_out[], char ascii_in[], int max_out, int n_in) { + int n_out, index, n_zeros, v_len; + unsigned short byte1, byte2, packed; + char c; + + n_out = 0; + + while(n_in && (n_out < max_out)) { + + c = *ascii_in; + if ((unsigned int)c >= 128) { + c = ' '; + } + + index = 2*(unsigned int)(c); + assert(index <= 254); + byte1 = varicode_table1[index]; + byte2 = varicode_table1[index+1]; + packed = (byte1 << 8) + byte2; + + //printf("n_in: %d ascii_in: %c index: %d packed 0x%x\n", n_in, *ascii_in, index, packed); + ascii_in++; + + n_zeros = 0; + v_len = 0; + while ((n_zeros < 2) && (n_out < max_out) && (v_len <= VARICODE_MAX_BITS)) { + if (packed & 0x8000) { + *varicode_out = 1; + n_zeros = 0; + } + else { + *varicode_out = 0; + n_zeros++; + } + //printf("packed: 0x%x *varicode_out: %d n_zeros: %d v_len: %d\n", packed, *varicode_out, n_zeros,v_len ); + packed <<= 1; + varicode_out++; + n_out++; + v_len++; + } + assert(v_len <= VARICODE_MAX_BITS); + + n_in--; + } + + return n_out; +} + + +/* + Code 2 covers a subset, but is more efficient that Code 1 (282 + compared to 1315 bits on unittest) Unsupported characters are + replaced by spaces. We encode/decode two bits at a time. +*/ + +int varicode_encode2(short varicode_out[], char ascii_in[], int max_out, int n_in) { + int n_out, n_zeros, v_len, i; + unsigned short packed; + + n_out = 0; + + while(n_in && (n_out < max_out)) { + + packed = varicode_table2[0]; // default to space if char not found + + // see if our character exists + for(i=0; istate = 0; + dec_states->n_zeros = 0; + dec_states->v_len = 0; + dec_states->packed = 0; + dec_states->code_num = code_num; + dec_states->n_in = 0; + dec_states->in[0] = dec_states->in[1] = 0; +} + + +void varicode_set_code_num(struct VARICODE_DEC *dec_states, int code_num) +{ + assert((code_num == 1) || (code_num == 2)); + dec_states->code_num = code_num; +} + + +/* Code 1 decode function, accepts one bit at a time */ + +static int decode_one_bit(struct VARICODE_DEC *s, char *single_ascii, short varicode_in, int long_code) +{ + int found=0, i; + unsigned short byte1, byte2; + + //printf("decode_one_bit : state: %d varicode_in: %d packed: 0x%x n_zeros: %d\n", + // s->state, varicode_in, s->packed, s->n_zeros); + + if (s->state == 0) { + if (!varicode_in) + return 0; + else + s->state = 1; + } + + if (s->state == 1) { + if (varicode_in) { + s->packed |= (0x8000 >> s->v_len); + s->n_zeros = 0; + } + else { + s->n_zeros++; + } + s->v_len++; + found = 0; + + /* end of character code */ + + if (s->n_zeros == 2) { + if (s->v_len) { + /* run thru table but note with bit errors we might not actually find a match */ + + byte1 = s->packed >> 8; + //printf("looking for byte1 : 0x%x ... ", byte1); + byte2 = s->packed & 0xff; + + for(i=0; i<128; i++) { + if ((byte1 == varicode_table1[2*i]) && (byte2 == varicode_table1[2*i+1])) { + found = 1; + *single_ascii = i; + } + } + } + varicode_decode_init(s, s->code_num); + } + + /* code can run too long if we have a bit error */ + + if (s->v_len > VARICODE_MAX_BITS) + varicode_decode_init(s, s->code_num); + } + + return found; +} + + +/* Code 2 decode function, accepts two bits at a time */ + +static int decode_two_bits(struct VARICODE_DEC *s, char *single_ascii, short varicode_in1, short varicode_in2) +{ + int found=0, i; + unsigned short byte1; + + if (s->state == 0) { + if (!(varicode_in1 || varicode_in2)) + return 0; + else + s->state = 1; + } + + if (s->state == 1) { + if (varicode_in1) + s->packed |= (0x8000 >> s->v_len); + if (varicode_in2) + s->packed |= (0x4000 >> s->v_len); + if (varicode_in1 || varicode_in2) + s->n_zeros = 0; + else + s->n_zeros+=2; + + s->v_len+=2; + + found = 0; + + /* end of character code */ + + if (s->n_zeros == 2) { + if (s->v_len) { + /* run thru table but note with bit errors we might not actually find a match */ + + byte1 = s->packed >> 8; + //printf("looking for byte1 : 0x%x ... ", byte1); + for(i=0; icode_num); + } + + /* code can run too long if we have a bit error */ + + if (s->v_len > VARICODE_MAX_BITS) + varicode_decode_init(s, s->code_num); + } + + return found; +} + + +int varicode_decode1(struct VARICODE_DEC *dec_states, char ascii_out[], short varicode_in[], int max_out, int n_in) { + int output, n_out; + char single_ascii = 0; + + n_out = 0; + + //printf("varicode_decode: n_in: %d\n", n_in); + + while(n_in && (n_out < max_out)) { + output = decode_one_bit(dec_states, &single_ascii, varicode_in[0], 0); + varicode_in++; + n_in--; + + if (output) { + *ascii_out++ = single_ascii; + n_out++; + } + } + + return n_out; +} + + +int varicode_decode2(struct VARICODE_DEC *dec_states, char ascii_out[], short varicode_in[], int max_out, int n_in) { + int output, n_out; + char single_ascii = 0; + + n_out = 0; + + //printf("varicode_decode2: n_in: %d varicode_in[0] %d dec_states->n_in: %d\n", n_in, varicode_in[0], dec_states->n_in); + //printf("%d ", varicode_in[0]); + while(n_in && (n_out < max_out)) { + + // keep two bit buffer so we can process two at a time + + dec_states->in[0] = dec_states->in[1]; + dec_states->in[1] = varicode_in[0]; + dec_states->n_in++; + varicode_in++; + n_in--; + + if (dec_states->n_in == 2) { + output = decode_two_bits(dec_states, &single_ascii, dec_states->in[0], dec_states->in[1]); + + dec_states->n_in = 0; + + if (output) { + //printf(" output: %d single_ascii: 0x%x %c\n", output, (int)single_ascii, single_ascii); + *ascii_out++ = single_ascii; + n_out++; + } + } + } + + return n_out; +} + + +int varicode_decode(struct VARICODE_DEC *dec_states, char ascii_out[], short varicode_in[], int max_out, int n_in) { + if (dec_states->code_num == 1) + return varicode_decode1(dec_states, ascii_out, varicode_in, max_out, n_in); + else + return varicode_decode2(dec_states, ascii_out, varicode_in, max_out, n_in); +} + + +#ifdef VARICODE_UNITTEST +void test_varicode(int code_num) { + char *ascii_in; + short *varicode; + int i, n_varicode_bits_out, n_ascii_chars_out, length, half, n_out, j, len; + char *ascii_out; + struct VARICODE_DEC dec_states; + + if (code_num == 1) { + printf("long code:\n"); + length = sizeof(varicode_table1)/2; + } + else { + printf("short code:\n"); + length = sizeof(varicode_table2)/2; + } + //length = 10; + ascii_in = (char*)MALLOC(length); + varicode = (short*)MALLOC(VARICODE_MAX_BITS*sizeof(short)*length); + ascii_out = (char*)MALLOC(length); + + // 1. test all Varicode codes ------------------------------------------------------------- + + if (code_num == 1) { + for(i=0; i. +// +//========================================================================== + +#ifndef __VARICODE__ +#define __VARICODE__ + +#ifdef __cplusplus +extern "C" { + +#endif + +#define VARICODE_MAX_BITS (10+2) /* max varicode bits for each ascii character */ + /* 10 bits for code plus 2 0 bits for inter-character space */ + +struct VARICODE_DEC { + int state; + int n_zeros; + int v_len; + unsigned short packed; + int code_num; + int n_in; + int in[2]; +}; + +int varicode_encode(short varicode_out[], char ascii_in[], int max_out, int n_in, int code_num); +void varicode_decode_init(struct VARICODE_DEC *dec_states, int code_num); +int varicode_decode(struct VARICODE_DEC *dec_states, char ascii_out[], short varicode_in[], int max_out, int n_in); +void varicode_set_code_num(struct VARICODE_DEC *dec_states, int code_num); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/libcodec2-android/src/codec2/src/varicode_table.h b/libcodec2-android/src/codec2/src/varicode_table.h new file mode 100644 index 0000000..2d22adc --- /dev/null +++ b/libcodec2-android/src/codec2/src/varicode_table.h @@ -0,0 +1,338 @@ +//========================================================================== +// Name: varicode_table.h +// Purpose: Varicode look up table +// Created: Nov 24, 2012 +// Authors: Clint Turner, KA7OEI, Peter Martinez, G3PLX +// +// License: +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2.1, +// as published by the Free Software Foundation. This program is +// distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public +// License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, see . +// +//========================================================================== + +/* The following table defines the PKS31 varicode. There are 128 entries, +corresponding to ASCII characters 0-127 with two bytes for each entry. The bits +for the varicode are to be shifted out MSB-first for both bytes, with the first byte +in the table being the first one to be sent. + +More than one zero in sequence signifies the end of the character (i.e. +two zeroes are the intercharacter sequence, so at least two zeroes should always be +sent before the next character is sent. + +This file is constructed with information from the article "PSK31 Fundamentals" +by Peter Martinez, G3PLX by Clint Turner, KA7OEI +*/ +unsigned char const varicode_table1[256] = { + 0b10101010, + 0b11000000, // 0 NUL + 0b10110110, + 0b11000000, // 1 SOH + 0b10111011, + 0b01000000, // 2 STX + 0b11011101, + 0b11000000, // 3 ETX + 0b10111010, + 0b11000000, // 4 EOT + 0b11010111, + 0b11000000, // 5 ENQ + 0b10111011, + 0b11000000, // 6 ACK + 0b10111111, + 0b01000000, // 7 BEL + 0b10111111, + 0b11000000, // 8 BS + 0b11101111, + 0b00000000, // 9 HT + 0b11101000, + 0b00000000, // 10 LF + 0b11011011, + 0b11000000, // 11 VT + 0b10110111, + 0b01000000, // 12 FF + 0b11111000, + 0b00000000, // 13 CR + 0b11011101, + 0b01000000, // 14 SO + 0b11101010, + 0b11000000, // 15 SI + 0b10111101, + 0b11000000, // 16 DLE + 0b10111101, + 0b01000000, // 17 DC1 + 0b11101011, + 0b01000000, // 18 DC2 + 0b11101011, + 0b11000000, // 19 DC3 + 0b11010110, + 0b11000000, // 20 DC4 + 0b11011010, + 0b11000000, // 21 NAK + 0b11011011, + 0b01000000, // 22 SYN + 0b11010101, + 0b11000000, // 23 ETB + 0b11011110, + 0b11000000, // 24 CAN + 0b11011111, + 0b01000000, // 25 EM + 0b11101101, + 0b11000000, // 26 SUB + 0b11010101, + 0b01000000, // 27 ESC + 0b11010111, + 0b01000000, // 28 FS + 0b11101110, + 0b11000000, // 29 GS + 0b10111110, + 0b11000000, // 30 RS + 0b11011111, + 0b11000000, // 31 US + 0b10000000, + 0b00000000, // 32 SP + 0b11111111, + 0b10000000, // 33 ! + 0b10101111, + 0b10000000, // 34 " + 0b11111010, + 0b10000000, // 35 # + 0b11101101, + 0b10000000, // 36 $ + 0b10110101, + 0b01000000, // 37 % + 0b10101110, + 0b11000000, // 38 & + 0b10111111, + 0b10000000, // 39 ' + 0b11111011, + 0b00000000, // 40 ( + 0b11110111, + 0b00000000, // 41 ) + 0b10110111, + 0b10000000, // 42 * + 0b11101111, + 0b10000000, // 43 + + 0b11101010, + 0b00000000, // 44 , + 0b11010100, + 0b00000000, // 45 - + 0b10101110, + 0b00000000, // 46 . + 0b11010111, + 0b10000000, // 47 / + 0b10110111, + 0b00000000, // 48 0 + 0b10111101, + 0b00000000, // 49 1 + 0b11101101, + 0b00000000, // 50 2 + 0b11111111, + 0b00000000, // 51 3 + 0b10111011, + 0b10000000, // 52 4 + 0b10101101, + 0b10000000, // 53 5 + 0b10110101, + 0b10000000, // 54 6 + 0b11010110, + 0b10000000, // 55 7 + 0b11010101, + 0b10000000, // 56 8 + 0b11011011, + 0b10000000, // 57 9 + 0b11110101, + 0b00000000, // 58 : + 0b11011110, + 0b10000000, // 59 ; + 0b11110110, + 0b10000000, // 60 < + 0b10101010, + 0b00000000, // 61 = + 0b11101011, + 0b10000000, // 62 > + 0b10101011, + 0b11000000, // 63 ? + 0b10101111, + 0b01000000, // 64 @ + 0b11111010, + 0b00000000, // 65 A + 0b11101011, + 0b00000000, // 66 B + 0b10101101, + 0b00000000, // 67 C + 0b10110101, + 0b00000000, // 68 D + 0b11101110, + 0b00000000, // 69 E + 0b11011011, + 0b00000000, // 70 F + 0b11111101, + 0b00000000, // 71 G + 0b10101010, + 0b10000000, // 72 H + 0b11111110, + 0b00000000, // 73 I + 0b11111110, + 0b10000000, // 74 J + 0b10111110, + 0b10000000, // 75 K + 0b11010111, + 0b00000000, // 76 L + 0b10111011, + 0b00000000, // 77 M + 0b11011101, + 0b00000000, // 78 N + 0b10101011, + 0b00000000, // 79 O + 0b11010101, + 0b00000000, // 80 P + 0b11101110, + 0b10000000, // 81 Q + 0b10101111, + 0b00000000, // 82 R + 0b11011110, + 0b00000000, // 83 S + 0b11011010, + 0b00000000, // 84 T + 0b10101011, + 0b10000000, // 85 U + 0b11011010, + 0b10000000, // 86 V + 0b10101110, + 0b10000000, // 87 W + 0b10111010, + 0b10000000, // 88 X + 0b10111101, + 0b10000000, // 89 Y + 0b10101011, + 0b01000000, // 90 Z + 0b11111011, + 0b10000000, // 91 [ + 0b11110111, + 0b10000000, // 92 "\" + 0b11111101, + 0b10000000, // 93 ] + 0b10101111, + 0b11000000, // 94 ^ + 0b10110110, + 0b10000000, // 95 _ (underline) + 0b10110111, + 0b11000000, // 96 ` + 0b10110000, + 0b00000000, // 97 a + 0b10111110, + 0b00000000, // 98 b + 0b10111100, + 0b00000000, // 99 c + 0b10110100, + 0b00000000, // 100 d + 0b11000000, + 0b00000000, // 101 e + 0b11110100, + 0b00000000, // 102 f + 0b10110110, + 0b00000000, // 103 g + 0b10101100, + 0b00000000, // 104 h + 0b11010000, + 0b00000000, // 105 i + 0b11110101, + 0b10000000, // 106 j + 0b10111111, + 0b00000000, // 107 k + 0b11011000, + 0b00000000, // 108 l + 0b11101100, + 0b00000000, // 109 m + 0b11110000, + 0b00000000, // 110 n + 0b11100000, + 0b00000000, // 111 o + 0b11111100, + 0b00000000, // 112 p + 0b11011111, + 0b10000000, // 113 q + 0b10101000, + 0b00000000, // 114 r + 0b10111000, + 0b00000000, // 115 s + 0b10100000, + 0b00000000, // 116 t + 0b11011100, + 0b00000000, // 117 u + 0b11110110, + 0b00000000, // 118 v + 0b11010110, + 0b00000000, // 119 w + 0b11011111, + 0b00000000, // 120 x + 0b10111010, + 0b00000000, // 121 y + 0b11101010, + 0b10000000, // 122 z + 0b10101101, + 0b11000000, // 123 { + 0b11011101, + 0b10000000, // 124 | + 0b10101101, + 0b01000000, // 125 } + 0b10110101, + 0b11000000, // 126 ~ + 0b11101101, + 0b01000000, // 127 (del) +}; + +// This code was used on FDMDV version 1, and is more compact that Code 1, but only covers a subset +// of the ASCII cahacter set + +char const varicode_table2[] = { + + ' ' ,0b11000000, + 13 ,0b01000000, // CR, end of message + '=' ,0b10000000, + '1' ,0b11110000, + '2' ,0b01110000, + '3' ,0b10110000, + '4' ,0b11010000, + '5' ,0b01010000, + '6' ,0b10010000, + '7' ,0b11100000, + '8' ,0b01100000, + '9' ,0b10100000, + 'a' ,0b11111100, + 'b' ,0b01111100, + 'c' ,0b10111100, + 'd' ,0b11011100, + 'e' ,0b01011100, + 'f' ,0b10011100, + 'g' ,0b11101100, + 'h' ,0b01101100, + 'i' ,0b10101100, + 'j' ,0b11110100, + 'k' ,0b01110100, + 'l' ,0b10110100, + 'm' ,0b11010100, + 'n' ,0b01010100, + 'o' ,0b10010100, + 'p' ,0b11100100, + 'q' ,0b01100100, + 'r' ,0b10100100, + 's' ,0b11111000, + 't' ,0b01111000, + 'u' ,0b10111000, + 'v' ,0b11011000, + 'w' ,0b01011000, + 'x' ,0b10011000, + 'y' ,0b11101000, + 'z' ,0b01101000, + '0' ,0b10101000 +}; + diff --git a/libcodec2-android/src/codec2/src/vhf_deframe_c2.c b/libcodec2-android/src/codec2/src/vhf_deframe_c2.c new file mode 100644 index 0000000..59d0432 --- /dev/null +++ b/libcodec2-android/src/codec2/src/vhf_deframe_c2.c @@ -0,0 +1,111 @@ + +/*---------------------------------------------------------------------------*\ + + FILE........: vhf_deframe_c2.c + AUTHOR......: Brady O'Brien + DATE CREATED: 8 March 2016 + + C tool to extract codec2 data from freedv VHF 2400A/B/whatever frames + + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2016 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include +#include +#include +#include "freedv_vhf_framing.h" + +int main(int argc,char *argv[]){ + struct freedv_vhf_deframer * deframer; + FILE *fin,*fout; + uint8_t *bitbuf; + uint8_t *c2buf; + uint8_t zbuf[] = {0,0,0,0,0,0,0,0}; + int frame_fmt = 0; + int fsize,c2size; + + if(argc<3){ + fprintf(stderr,"usage: %s (A|B) InputOneBitPerCharFile OutputC2File\n",argv[0]); + exit(1); + } + + if(strcmp(argv[1],"A")==0){ + frame_fmt = FREEDV_VHF_FRAME_A; + } else if (strcmp(argv[1],"B")==0) { + frame_fmt = FREEDV_HF_FRAME_B; + } else { + fprintf(stderr,"usage: %s (A|B) InputOneBitPerCharFile OutputC2File\n",argv[0]); + exit(1); + } + + /* Open files */ + if(strcmp(argv[2],"-")==0){ + fin = stdin; + }else{ + fin = fopen(argv[2],"r"); + } + + if(strcmp(argv[3],"-")==0){ + fout = stdout; + }else{ + fout = fopen(argv[3],"w"); + } + + /* Set up deframer */ + deframer = fvhff_create_deframer(frame_fmt,0); + + if(fin==NULL || fout==NULL || deframer==NULL){ + fprintf(stderr,"Couldn't open test vector files\n"); + goto cleanup; + } + + c2size = fvhff_get_codec2_size(deframer); + fsize = fvhff_get_frame_size(deframer); + + /* allocate buffers for processing */ + bitbuf = (uint8_t*)malloc(sizeof(uint8_t)*fsize); + c2buf = (uint8_t*)malloc(sizeof(uint8_t)*c2size); + + /* Deframe! */ + while( fread(bitbuf,sizeof(uint8_t),fsize,fin) == fsize ){ + if(fvhff_deframe_bits(deframer,c2buf,NULL,NULL,bitbuf)) + fwrite(c2buf,sizeof(uint8_t),c2size,fout); + else + fwrite(zbuf,sizeof(uint8_t),c2size,fout); + + if(fin == stdin || fout == stdin){ + fflush(fin); + fflush(fout); + } + } + fprintf(stderr,"BER Estimate: %f total_uw_err: %d \n", + ((float)deframer->total_uw_err)/((float)deframer->total_uw_bits),deframer->total_uw_err); + + free(bitbuf); + free(c2buf); + + cleanup: + fclose(fin); + fclose(fout); + fvhff_destroy_deframer(deframer); + exit(0); +} + diff --git a/libcodec2-android/src/codec2/src/vhf_frame_c2.c b/libcodec2-android/src/codec2/src/vhf_frame_c2.c new file mode 100644 index 0000000..9fae67d --- /dev/null +++ b/libcodec2-android/src/codec2/src/vhf_frame_c2.c @@ -0,0 +1,106 @@ + +/*---------------------------------------------------------------------------*\ + + FILE........: vhf_deframe_c2.c + AUTHOR......: Brady O'Brien + DATE CREATED: 8 March 2016 + + C tool to extract codec2 data from freedv VHF 2400A/B/whatever frames + + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2016 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include +#include +#include +#include "freedv_vhf_framing.h" + +int main(int argc,char *argv[]){ + struct freedv_vhf_deframer * deframer; + FILE *fin,*fout; + uint8_t *bitbuf; + uint8_t *c2buf; + int frame_fmt = 0; + int fsize,c2size; + + if(argc<3){ + fprintf(stderr,"usage: %s (A|B) InpuC2File OutputOneBitPerCharFile\n",argv[0]); + exit(1); + } + + if(strcmp(argv[1],"A")==0){ + frame_fmt = FREEDV_VHF_FRAME_A; + } else if (strcmp(argv[1],"B")==0) { + frame_fmt = FREEDV_HF_FRAME_B; + } else { + fprintf(stderr,"usage: %s (A|B) InpuC2File OutputOneBitPerCharFile\n",argv[0]); + exit(1); + } + + /* Open files */ + if(strcmp(argv[2],"-")==0){ + fin = stdin; + }else{ + fin = fopen(argv[2],"r"); + } + + if(strcmp(argv[3],"-")==0){ + fout = stdout; + }else{ + fout = fopen(argv[3],"w"); + } + + /* Set up deframer */ + deframer = fvhff_create_deframer(frame_fmt,0); + + if(fin==NULL || fout==NULL || deframer==NULL){ + fprintf(stderr,"Couldn't open test vector files\n"); + goto cleanup; + } + + c2size = fvhff_get_codec2_size(deframer); + fsize = fvhff_get_frame_size(deframer); + + /* allocate buffers for processing */ + bitbuf = (uint8_t*)malloc(sizeof(uint8_t)*fsize); + c2buf = (uint8_t*)malloc(sizeof(uint8_t)*c2size); + + /* Deframe! */ + while( fread(c2buf,sizeof(uint8_t),c2size,fin) == c2size ){ + fvhff_frame_bits(frame_fmt,bitbuf,c2buf,NULL,NULL); + fwrite(bitbuf,sizeof(uint8_t),fsize,fout); + + if(fin == stdin || fout == stdin){ + fflush(fin); + fflush(fout); + } + } + + free(bitbuf); + free(c2buf); + + cleanup: + fclose(fin); + fclose(fout); + fvhff_destroy_deframer(deframer); + exit(0); +} + diff --git a/libcodec2-android/src/codec2/src/wval.h b/libcodec2-android/src/codec2/src/wval.h new file mode 100644 index 0000000..ef6f056 --- /dev/null +++ b/libcodec2-android/src/codec2/src/wval.h @@ -0,0 +1,219 @@ +/* + * Generated file: + * + * ofdm_wfreq = 40.0; + * ofdm_nval = (int)(ofdm_fs / ofdm_wfreq); + * ofdm_w = TAU * ofdm_wfreq / ofdm_fs; + * + * ofdm_wval = MALLOC(sizeof (complex float) * ofdm_nval); + * + * for (i = 0; i < ofdm_nval; i++) { + * ofdm_wval[i] = cmplxconj(ofdm_w * i); + * } + * + */ +#include + +static const complex float ofdm_wval[] = { +1.000000-0.000000 * I, +0.999507-0.031411 * I, +0.998027-0.062791 * I, +0.995562-0.094108 * I, +0.992115-0.125333 * I, +0.987688-0.156434 * I, +0.982287-0.187381 * I, +0.975917-0.218143 * I, +0.968583-0.248690 * I, +0.960294-0.278991 * I, +0.951057-0.309017 * I, +0.940881-0.338738 * I, +0.929776-0.368125 * I, +0.917755-0.397148 * I, +0.904827-0.425779 * I, +0.891007-0.453991 * I, +0.876307-0.481754 * I, +0.860742-0.509041 * I, +0.844328-0.535827 * I, +0.827081-0.562083 * I, +0.809017-0.587785 * I, +0.790155-0.612907 * I, +0.770513-0.637424 * I, +0.750111-0.661312 * I, +0.728969-0.684547 * I, +0.707107-0.707107 * I, +0.684547-0.728969 * I, +0.661312-0.750111 * I, +0.637424-0.770513 * I, +0.612907-0.790155 * I, +0.587785-0.809017 * I, +0.562083-0.827081 * I, +0.535827-0.844328 * I, +0.509041-0.860742 * I, +0.481754-0.876307 * I, +0.453990-0.891007 * I, +0.425779-0.904827 * I, +0.397148-0.917755 * I, +0.368125-0.929776 * I, +0.338738-0.940881 * I, +0.309017-0.951057 * I, +0.278991-0.960294 * I, +0.248690-0.968583 * I, +0.218143-0.975917 * I, +0.187381-0.982287 * I, +0.156434-0.987688 * I, +0.125333-0.992115 * I, +0.094108-0.995562 * I, +0.062790-0.998027 * I, +0.031411-0.999507 * I, +-0.000000-1.000000 * I, +-0.031411-0.999507 * I, +-0.062791-0.998027 * I, +-0.094108-0.995562 * I, +-0.125333-0.992115 * I, +-0.156435-0.987688 * I, +-0.187381-0.982287 * I, +-0.218143-0.975917 * I, +-0.248690-0.968583 * I, +-0.278991-0.960294 * I, +-0.309017-0.951056 * I, +-0.338738-0.940881 * I, +-0.368125-0.929776 * I, +-0.397148-0.917755 * I, +-0.425779-0.904827 * I, +-0.453991-0.891006 * I, +-0.481754-0.876307 * I, +-0.509042-0.860742 * I, +-0.535827-0.844328 * I, +-0.562084-0.827080 * I, +-0.587785-0.809017 * I, +-0.612907-0.790155 * I, +-0.637424-0.770513 * I, +-0.661312-0.750111 * I, +-0.684547-0.728968 * I, +-0.707107-0.707107 * I, +-0.728969-0.684547 * I, +-0.750111-0.661312 * I, +-0.770513-0.637424 * I, +-0.790155-0.612907 * I, +-0.809017-0.587785 * I, +-0.827081-0.562083 * I, +-0.844328-0.535827 * I, +-0.860742-0.509041 * I, +-0.876307-0.481754 * I, +-0.891007-0.453990 * I, +-0.904827-0.425779 * I, +-0.917755-0.397148 * I, +-0.929777-0.368124 * I, +-0.940881-0.338738 * I, +-0.951057-0.309017 * I, +-0.960294-0.278991 * I, +-0.968583-0.248690 * I, +-0.975917-0.218143 * I, +-0.982287-0.187381 * I, +-0.987688-0.156434 * I, +-0.992115-0.125333 * I, +-0.995562-0.094108 * I, +-0.998027-0.062790 * I, +-0.999507-0.031411 * I, +-1.000000+0.000000 * I, +-0.999507+0.031411 * I, +-0.998027+0.062791 * I, +-0.995562+0.094108 * I, +-0.992115+0.125333 * I, +-0.987688+0.156435 * I, +-0.982287+0.187381 * I, +-0.975917+0.218143 * I, +-0.968583+0.248690 * I, +-0.960294+0.278991 * I, +-0.951056+0.309017 * I, +-0.940881+0.338738 * I, +-0.929776+0.368125 * I, +-0.917755+0.397148 * I, +-0.904827+0.425780 * I, +-0.891006+0.453991 * I, +-0.876307+0.481754 * I, +-0.860742+0.509042 * I, +-0.844328+0.535827 * I, +-0.827081+0.562083 * I, +-0.809017+0.587785 * I, +-0.790155+0.612907 * I, +-0.770513+0.637424 * I, +-0.750111+0.661312 * I, +-0.728969+0.684547 * I, +-0.707107+0.707107 * I, +-0.684547+0.728969 * I, +-0.661312+0.750111 * I, +-0.637424+0.770513 * I, +-0.612907+0.790155 * I, +-0.587785+0.809017 * I, +-0.562083+0.827081 * I, +-0.535827+0.844328 * I, +-0.509041+0.860742 * I, +-0.481753+0.876307 * I, +-0.453990+0.891007 * I, +-0.425779+0.904827 * I, +-0.397148+0.917755 * I, +-0.368124+0.929777 * I, +-0.338738+0.940881 * I, +-0.309017+0.951057 * I, +-0.278991+0.960294 * I, +-0.248690+0.968583 * I, +-0.218143+0.975917 * I, +-0.187381+0.982287 * I, +-0.156434+0.987688 * I, +-0.125333+0.992115 * I, +-0.094108+0.995562 * I, +-0.062790+0.998027 * I, +-0.031410+0.999507 * I, +0.000000+1.000000 * I, +0.031411+0.999507 * I, +0.062791+0.998027 * I, +0.094108+0.995562 * I, +0.125333+0.992115 * I, +0.156435+0.987688 * I, +0.187381+0.982287 * I, +0.218143+0.975917 * I, +0.248690+0.968583 * I, +0.278991+0.960294 * I, +0.309017+0.951056 * I, +0.338738+0.940881 * I, +0.368125+0.929776 * I, +0.397148+0.917755 * I, +0.425779+0.904827 * I, +0.453991+0.891006 * I, +0.481754+0.876307 * I, +0.509042+0.860742 * I, +0.535827+0.844328 * I, +0.562084+0.827080 * I, +0.587785+0.809017 * I, +0.612907+0.790155 * I, +0.637424+0.770513 * I, +0.661312+0.750111 * I, +0.684547+0.728968 * I, +0.707107+0.707107 * I, +0.728969+0.684547 * I, +0.750111+0.661312 * I, +0.770513+0.637424 * I, +0.790155+0.612907 * I, +0.809017+0.587785 * I, +0.827081+0.562083 * I, +0.844328+0.535826 * I, +0.860742+0.509041 * I, +0.876307+0.481753 * I, +0.891007+0.453990 * I, +0.904827+0.425779 * I, +0.917755+0.397147 * I, +0.929777+0.368124 * I, +0.940881+0.338737 * I, +0.951057+0.309016 * I, +0.960294+0.278991 * I, +0.968583+0.248689 * I, +0.975917+0.218143 * I, +0.982287+0.187381 * I, +0.987688+0.156434 * I, +0.992115+0.125333 * I, +0.995562+0.094108 * I, +0.998027+0.062790 * I, +0.999507+0.031411 * I +}; + diff --git a/libcodec2-android/src/codec2/stm32/CMakeLists.txt b/libcodec2-android/src/codec2/stm32/CMakeLists.txt new file mode 100644 index 0000000..dfff4ac --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/CMakeLists.txt @@ -0,0 +1,540 @@ +# +# stm32f4 Codec2 test programs +# +# CMake configuration contributed by Richard Shaw (KF5OIM) +# Please report questions, comments, problems, or patches to the freetel +# mailing list: https://lists.sourceforge.net/lists/listinfo/freetel-codec2 +# +set(ARM_GCC_BIN "" CACHE STRING "Path to the bin directory of your arm-eabi-none-gcc (optional)") +project(stm32f4 C ASM) + +if(CMAKE_CROSSCOMPILING) + message(STATUS "We are cross compiling...") +else() + message(STATUS "Performing standard host build...") +endif() + +cmake_minimum_required(VERSION 2.8) + +include(cmake/gencodebooks.cmake) + +# +# Prevent in-source builds +# If an in-source build is attempted, you will still need to clean up a few +# files manually. +# +set(CMAKE_DISABLE_SOURCE_CHANGES ON) +set(CMAKE_DISABLE_IN_SOURCE_BUILD ON) +if("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_BINARY_DIR}") + message(FATAL_ERROR "In-source builds in ${CMAKE_BINARY_DIR} are not " + "allowed, please remove ./CMakeCache.txt and ./CMakeFiles/, create a " + "separate build directory and run cmake from there.") +endif("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_BINARY_DIR}") + +#include(cmake/STM32_Toolchain.cmake) + +################################################### + +set(FLOAT_TYPE "hard" CACHE STRING "Floating point: defaults to hard.") +set(CMAKE_TOOLCHAIN_FILE "../stm32/cmake/STM32_Toolchain.cmake" CACHE STRING "Toolchain defs") + +################################################### + +# +# Find the git hash if this is a working copy. +# +if(EXISTS ${CMAKE_SOURCE_DIR}/.git) + find_package(Git QUIET) + if(Git_FOUND) + execute_process( + COMMAND "${GIT_EXECUTABLE}" describe --always HEAD + WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" + RESULT_VARIABLE res + OUTPUT_VARIABLE FREEDV_HASH + ERROR_QUIET + OUTPUT_STRIP_TRAILING_WHITESPACE) + message(STATUS "freedv-gui current git hash: ${FREEDV_HASH}") + add_definitions(-DGIT_HASH="${FREEDV_HASH}") + else() + message(WARNING "Git not found. Can not determine current commit hash.") + add_definitions(-DGIT_HASH="Unknown") + endif() +else() + add_definitions(-DGIT_HASH="None") +endif() + +# Set default C flags. +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -std=gnu11 -mlittle-endian -mthumb -mthumb-interwork --specs=nano.specs -u_printf_float -mcpu=cortex-m4 -ffunction-sections -fdata-sections -O3") + +add_definitions(-DSTM32F40_41xxx -DCORTEX_M4 -D__EMBEDDED__) +add_definitions(-DFREEDV_MODE_EN_DEFAULT=0 -DFREEDV_MODE_1600_EN=1 -DFREEDV_MODE_700D_EN=1 -DCODEC2_MODE_EN_DEFAULT=0 -DCODEC2_MODE_1300_EN=1 -DCODEC2_MODE_700C_EN=1) + +if(FLOAT_TYPE STREQUAL "hard") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsingle-precision-constant -Wdouble-promotion -mfpu=fpv4-sp-d16 -mfloat-abi=hard -D__FPU_PRESENT=1 -D__FPU_USED=1") + #CFLAGS += -fsingle-precision-constant +else() + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msoft-float") +endif() + +option(VERIFY_OPT "Enable this for dump files to help verify optimization" OFF) +if(VERIFY_OPT) + add_definitions(-DDUMP) +endif() + +#option(SEMIHOSTING "Enable for standard arm semihosting." OFF) +#if(SEMIHOSTING) +# link_libraries(rdimon) +# set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} --specs=rdimon.specs") +#else() +# link_libraries(nosys) +# set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -specs=nosys.specs") +#endif() + +# Set default build type +if(NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE "Debug") +endif() +if(CMAKE_BUILD_TYPE STREQUAL "Debug") + link_libraries(g m) +else() + link_libraries(c m) +endif() + +# Setup defaults that can't be set in the toolchain file +set(CMAKE_EXE_LINKER_FLAGS "-u_init -T${CMAKE_SOURCE_DIR}/stm32_flash.ld -Xlinker --gc-sections") +set(CMAKE_EXECUTABLE_SUFFIX_C ".elf") +set(CMAKE_EXECUTABLE_SUFFIX_CXX ".elf") +set(CMAKE_EXECUTABLE_SUFFIX_ASM ".elf") +set(CMAKE_ASM_FLAGS "${CMAKE_C_FLAGS} -x assembler-with-cpp") + + +# Check build flags + +message(STATUS "CMAKE_C_FLAGS: " ${CMAKE_C_FLAGS}) +message(STATUS "CMAKE_ASM_FLAGS: " ${CMAKE_ASM_FLAGS}) + + +################################################### + +# STM32F4 Standard Peripheral Library + +include(cmake/STM32_Lib.cmake) + +################################################### + +# Macro for elf->bin +macro(elf2bin target) + add_custom_command(TARGET ${target} + POST_BUILD COMMAND ${CMAKE_OBJCOPY} -O binary ${target}.elf ${target}.bin + COMMENT "Creating binary for ${target}") + set_source_files_properties(${target}.bin PROPERTIES GENERATED TRUE) + set_property(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" APPEND PROPERTY + ADDITIONAL_MAKE_CLEAN_FILES ${target}.bin) +endmacro() + +# Macro for elf->bin +macro(elf2dfu target) + add_custom_command(TARGET ${target} + POST_BUILD COMMAND ${CMAKE_OBJCOPY} -O ihex ${target}.elf ${target}.hex && ${CMAKE_SOURCE_DIR}/support/hex2dfu.py ${target}.hex ${target}.dfu + COMMENT "Creating dfu file for ${target}") + set_source_files_properties(${target}.bin PROPERTIES GENERATED TRUE) + set_property(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" APPEND PROPERTY + ADDITIONAL_MAKE_CLEAN_FILES ${target}.hex ${target}.dfu) +endmacro() + +# This macro just adds generation of a map file with the same name as the executable and .map suffix +# to the linker command line. This works in older Cmake version (versions >= 3.13 have target_link_options) +# it should be a one to one replacement for add_executable +macro(add_mapped_executable target) + add_executable(${target} ${ARGN}) + target_link_libraries(${target} "-Wl,-Map=$.map") + set_source_files_properties(${target}.map PROPERTIES GENERATED TRUE) + set_property(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" APPEND PROPERTY + ADDITIONAL_MAKE_CLEAN_FILES ${target}.map) +endmacro() + +include(CTest) +include_directories(../src ../unittest inc ${PROJECT_BINARY_DIR}) + +add_subdirectory(unittest/src) + + + +# Codec 2 + +# Output path is such that #include in codec2.h works +set(CODEC2_VERSION_PATH "${PROJECT_BINARY_DIR}/codec2") +configure_file ("${PROJECT_SOURCE_DIR}/../cmake/version.h.in" + "${CODEC2_VERSION_PATH}/version.h" ) + + +set(CODEC2_SRC ../src) +set(CODEC2_GEN_CODEBOOK_SRC ../build/src) +set(CODEC2_SRCS +${CODEC2_SRC}/lpc.c +${CODEC2_SRC}/nlp.c +${CODEC2_SRC}/postfilter.c +${CODEC2_SRC}/sine.c +${CODEC2_SRC}/codec2.c +${CODEC2_SRC}/codec2_fft.c +${CODEC2_SRC}/gp_interleaver.c +${CODEC2_SRC}/interldpc.c +${CODEC2_SRC}/kiss_fft.c +${CODEC2_SRC}/kiss_fftr.c +${CODEC2_SRC}/interp.c +${CODEC2_SRC}/lsp.c +${CODEC2_SRC}/ofdm.c +${CODEC2_SRC}/phase.c +${CODEC2_SRC}/quantise.c +${CODEC2_SRC}/pack.c +${CODEC2_SRC}/dump.c +${CODEC2_SRC}/cohpsk.c +${CODEC2_SRC}/fdmdv.c +${CODEC2_SRC}/freedv_api.c +${CODEC2_SRC}/freedv_1600.c +${CODEC2_SRC}/freedv_700.c +${CODEC2_SRC}/freedv_2020.c +${CODEC2_SRC}/freedv_fsk.c +${CODEC2_SRC}/filter.c +${CODEC2_SRC}/varicode.c +${CODEC2_SRC}/golay23.c +${CODEC2_SRC}/freedv_data_channel.c +${CODEC2_SRC}/newamp1.c +${CODEC2_SRC}/mbest.c +${CODEC2_SRC}/HRA_112_112.c +${CODEC2_SRC}/linreg.c +${CODEC2_SRC}/mpdecode_core.c +${CODEC2_SRC}/ldpc_codes.c +${CODEC2_SRC}/phi0.c +${CODEC2_SRC}/HRAb_396_504.c +codebook.c +codebookd.c +codebookjvm.c +codebookge.c +codebooknewamp1_energy.c +codebooknewamp1.c +) + +set(STM32F4_ADAC_SRCS +src/stm32f4_adc.c +src/stm32f4_dac.c +../src/codec2_fifo.c +) +add_library(stm32f4_adac STATIC ${STM32F4_ADAC_SRCS}) + +add_library(codec2 STATIC ${CODEC2_SRCS}) +add_library(codec2_prof STATIC ${CODEC2_SRCS}) +target_compile_definitions(codec2_prof PRIVATE PROFILE) + +set(SYSTEM_SRCS +src/system_stm32f4xx.c +src/startup_stm32f4xx.s +src/gdb_stdio.c +) + +add_library(sm1000base STATIC src/sm1000_leds_switches.c src/debugblinky.c ${SYSTEM_SRCS}) + +set(PROFILE_SYSTEM_SRCS +src/stm32f4_machdep.c +) + +list(APPEND PROFILE_SYSTEM_SRCS ${SYSTEM_SRCS}) + +set(FFT_TEST_SRCS +src/fft_test.c +../src/kiss_fft.c +) + +add_mapped_executable(fft_test ${FFT_TEST_SRCS} ${PROFILE_SYSTEM_SRCS}) +target_link_libraries(fft_test stm32f4 CMSIS) +elf2bin(fft_test) + + +# Rule for programming the SM1000 +#%.pgm: %.bin +# $(SUDO) dfu-util -d 0483:df11 -c 1 -i 0 -a 0 -s 0x08000000 -D $< +#################################################### + +set(CODEC2_PROFILE_SRCS +src/codec2_profile.c +) + +add_mapped_executable(codec2_profile ${CODEC2_PROFILE_SRCS} ${PROFILE_SYSTEM_SRCS}) +target_link_libraries(codec2_profile codec2_prof stm32f4 CMSIS) +target_compile_definitions(codec2_profile PRIVATE PROFILE) +elf2bin(codec2_profile) + +set(DAC_UT_SRCS +src/dac_ut.c +) + +add_mapped_executable(dac_ut ${DAC_UT_SRCS}) +target_link_libraries(dac_ut stm32f4_adac stm32f4 sm1000base) +elf2bin(dac_ut) + +set(FAST_DAC_UT_SRCS +src/fast_dac_ut.c +../src/codec2_fifo.c +src/iir_duc.c +src/stm32f4_dacduc.c +src/debugblinky.c +) + +add_mapped_executable(fast_dac_ut ${FAST_DAC_UT_SRCS} ${SYSTEM_SRCS}) +target_link_libraries(fast_dac_ut stm32f4) +target_compile_options(fast_dac_ut PRIVATE "-O3") +elf2bin(fast_dac_ut) + +set(ADCDAC_UT_SRCS +src/adcdac_ut.c +) + +add_mapped_executable(adcdac_ut ${ADCDAC_UT_SRCS} ${STM32F4_ADAC_SRCS} ${SYSTEM_SRCS}) +target_link_libraries(adcdac_ut stm32f4 sm1000base) +target_compile_options(adcdac_ut PRIVATE "-O0") +elf2bin(adcdac_ut) + + +set(DAC_PLAY_SRCS +src/dac_play.c +../src/codec2_fifo.c +src/stm32f4_dac.c +) + +add_mapped_executable(dac_play ${DAC_PLAY_SRCS} ${SYSTEM_SRCS}) +target_link_libraries(dac_play stm32f4 sm1000base) +target_compile_options(dac_play PRIVATE "-O0") +elf2bin(dac_play) + +set(ADC_REC_SRCS +src/adc_rec.c +) + +add_mapped_executable(adc_rec ${ADC_REC_SRCS}) +target_link_libraries(adc_rec stm32f4_adac stm32f4 sm1000base) +elf2bin(adc_rec) + +set(ADC_SD_SRCS +src/adc_sd.c +) + +add_mapped_executable(adc_sd ${ADC_SD_SRCS}) +target_link_libraries(adc_sd stm32f4_adac stm32f4 sm1000base) +elf2bin(adc_sd) + +set(PWM_UT_SRCS +src/stm32f4_pwm.c +) + +add_mapped_executable(pwm_ut ${PWM_UT_SRCS}) +target_link_libraries(pwm_ut stm32f4 sm1000base) +elf2bin(pwm_ut) + +# ------------------------------------------------ + +set(USART_UT_SRCS +src/stm32f4_usart.c +src/usart_ut.c +) + +add_mapped_executable(usart_ut ${USART_UT_SRCS}) +target_link_libraries(usart_ut stm32f4 sm1000base) +elf2bin(usart_ut) + +# ------------------------------------------------ + + +set(POWER_UT_SRCS +src/power_ut.c +) + +list(APPEND POWER_UT_SRCS ${CODEC2_SRCS}) + +# stm32/src/power_ut.c:124:5: error: too few arguments to function 'adc_open' +# stm32/src/power_ut.c:125:5: error: too few arguments to function 'dac_open' +#add_mapped_executable(power_ut ${POWER_UT_SRCS}) +#target_link_libraries(power_ut stm32f4_adac stm32f4 sm1000base) + +set(USB_VCP +usb_conf/usb_bsp.c +usb_conf/usbd_desc.c +usb_conf/usbd_usr.c +usb_lib/cdc/usbd_cdc_core.c +usb_lib/cdc/usbd_cdc_vcp.c +usb_lib/core/usbd_core.c +usb_lib/core/usbd_ioreq.c +usb_lib/core/usbd_req.c +usb_lib/otg/usb_core.c +usb_lib/otg/usb_dcd.c +usb_lib/otg/usb_dcd_int.c) + +set(USB_VCP_UT +src/usb_vcp_ut.c +src/stm32f4_usb_vcp.c +) + +list(APPEND USB_VCP_UT ${USB_VCP}) + +add_definitions(-DUSE_USB_OTG_FS -DUSE_ULPI_PHY) +include_directories(usb_conf usb_lib/cdc usb_lib/core usb_lib/otg) + +add_mapped_executable(usb_vcp_ut ${USB_VCP_UT}) +target_link_libraries(usb_vcp_ut stm32f4 sm1000base) +elf2bin(usb_vcp_ut) + +set(ADC_REC_USB_SRCS +src/adc_rec_usb.c +src/stm32f4_usb_vcp.c +) + +add_mapped_executable(adc_rec_usb ${ADC_REC_USB_SRCS} ${USB_VCP}) +target_link_libraries(adc_rec_usb stm32f4_adac stm32f4 sm1000base) +elf2bin(adc_rec_usb) + + +set(FDMDV_PROFILE_SRCS +src/fdmdv_profile.c +) + +list(APPEND FDMDV_PROFILE_SRCS ${CODEC2_SRCS} ${SYSTEM_SRCS}) + +# Doesn't compile because M_PITCH is not defined but M_PITCH_S is. +#add_mapped_executable(fdmdv_profile ${FDMDV_PROFILE_SRCS}) +#target_link_libraries(fdmdv_profile stm32f4) +#target_compile_definitions(fdmdv_profile PRIVATE PROFILE) + +set(SM1000_LEDS_SWITCHES_UT_SRCS +src/sm1000_leds_switches_ut.c +src/sm1000_leds_switches.c +) + +add_mapped_executable(sm1000_leds_switches_ut ${SM1000_LEDS_SWITCHES_UT_SRCS}) +target_link_libraries(sm1000_leds_switches_ut stm32f4 sm1000base) +elf2bin(sm1000_leds_switches_ut) + + +set(SM1000_SRCS +src/sm1000_main.c +src/tone.c +src/sfx.c +src/sounds.c +src/morse.c +src/menu.c +src/tot.c +src/sm1000_leds_switches.c +../src/codec2_fifo.c +src/debugblinky.c +src/stm32f4_vrom.c +src/stm32f4_usart.c +src/memtools.c +) + +list(APPEND SM1000_SRCS ${CODEC2_SRCS}) + + +add_mapped_executable(sm1000v4 ${SM1000_SRCS} ${SYSTEM_SRCS}) +target_link_libraries(sm1000v4 stm32f4_adac stm32f4 CMSIS) +target_compile_options(sm1000v4 PRIVATE "-O3") +elf2bin(sm1000v4) +elf2dfu(sm1000v4) + +set(FREEDV_TX_PROFILE_SRCS +src/freedv_tx_profile.c +) + +add_mapped_executable(freedv_tx_profile ${FREEDV_TX_PROFILE_SRCS} ${PROFILE_SYSTEM_SRCS}) +target_link_libraries(freedv_tx_profile codec2_prof stm32f4 CMSIS) +target_compile_definitions(freedv_tx_profile PRIVATE PROFILE) +elf2bin(freedv_tx_profile) + + +set(FREEDV_RX_PROFILE_SRCS +src/freedv_rx_profile.c +) + +add_mapped_executable(freedv_rx_profile ${FREEDV_RX_PROFILE_SRCS} ${PROFILE_SYSTEM_SRCS}) +target_link_libraries(freedv_rx_profile codec2_prof stm32f4 CMSIS) +#target_link_libraries(freedv_rx_base "-Wl,-Map=$.map") +elf2bin(freedv_rx_profile) + +set(FDMDV_DUMP_RT_SRCS +src/fdmdv_dump_rt.c +) + +list(APPEND FDMDV_DUMP_RT_SRCS ${CODEC2_SRCS} ${SYSTEM_SRCS}) + +# Doesn't build due to FREEDV_NSAMPLES not being defined. +#add_mapped_executable(fdmdv_dump_rt ${FDMDV_DUMP_RT_SRCS}) +#target_link_libraries(fdmdv_dump_rt stm32f4_adac stm32f4 sm1000base) +#target_compile_options(fdmdv_dump_rt PRIVATE "-O3") + +# --------------------------------------------------------------------------- + +set(TUNER_UT_SRCS +src/tuner_ut.c +src/iir_tuner.c +../src/fm.c) + +# this needs to be compiled without the optimiser or ugly things happen +# would be nice to work out why as ISRs need to run fast + +add_library(stm32f4_adc_tuner STATIC src/stm32f4_adc_tuner.c) +add_mapped_executable(tuner_ut ${TUNER_UT_SRCS} ${SYSTEM_SRCS}) +target_compile_options(tuner_ut PRIVATE "-O3") +target_link_libraries(tuner_ut stm32f4_adc_tuner stm32f4_adac stm32f4 sm1000base) +elf2bin(tuner_ut) + +# ----------------------------------------------------------------------------- + +set(ADC_SFDR_UT_SRCS +src/adc_sfdr_ut.c +src/iir_tuner.c +) + +add_mapped_executable(adc_sfdr_ut ${ADC_SFDR_UT_SRCS}) +target_link_libraries(adc_sfdr_ut stm32f4_adc_tuner stm32f4_adac stm32f4 sm1000base CMSIS) +elf2bin(adc_sfdr_ut) + +# ----------------------------------------------------------------------------- + +#set(FM_LODUC_PLAY_SRCS +#src/fm_loduc_play.c +#gdb_stdio.c +#../src/codec2_fifo.c +#../src/fm.c +#src/debugblinky.c +#src/system_stm32f4xx.c +#src/startup_stm32f4xx.s +#) + +#add_library(stm32f4_dacloduc STATIC src/stm32f4_dacloduc.c) + +#add_mapped_executable(fm_loduc_play ${FM_LODUC_PLAY_SRCS}) +#target_link_libraries(fm_loduc_play stm32f4_dacloduc) + +# ----------------------------------------------------------------------------- + +set(SI5351_UT_SRCS +src/si5351_ut.c +src/new_i2c.c +src/si53xx.c +) + +add_mapped_executable(si5351_ut ${SI5351_UT_SRCS}) +target_link_libraries(si5351_ut stm32f4 sm1000base) +elf2bin(si5351_ut) + +# ----------------------------------------------------------------------------- + +set(MCO_UT_SRCS +src/mco_ut.c +src/tm_stm32f4_mco_output.c +src/tm_stm32f4_gpio.c +) + +add_mapped_executable(mco_ut ${MCO_UT_SRCS}) +target_link_libraries(mco_ut stm32f4 sm1000base) +elf2bin(mco_ut) + +# ----------------------------------------------------------------------------- + diff --git a/libcodec2-android/src/codec2/stm32/README.md b/libcodec2-android/src/codec2/stm32/README.md new file mode 100644 index 0000000..bb7dabb --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/README.md @@ -0,0 +1,97 @@ +# Building for the stm32 + +## Quickstart + +1. Build codec2 for your host system, see [codec2/README.md](../README.md) + +2. Install a gcc arm toolchain: + ``` + $ cd ~ + $ wget https://armkeil.blob.core.windows.net/developer/Files/downloads/gnu-rm/8-2018q4/gcc-arm-none-eabi-8-2018-q4-major-linux.tar.bz2 + $ tar xvjf gcc-arm-none-eabi-8-2018-q4-major-linux.tar.bz2 + $ export PATH=$HOME/gcc-arm-none-eabi-8-2018-q4-major/bin:$PATH + ``` + + NOTE: We do not recommend toolchains provided by popular + distributions (e.g. the Ubuntu 18 gcc-arm-none-eabi package will not + work). + +3. Create a build directory (```/path/to/codec2/stm32``` recommended to support unit tests) + ``` + $ cd /path/to/codec2/stm32 + $ mkdir build_stm32 + $ cd build_stm32 + ``` + +4. The STM32 Standard Peripheral Library is required. The download + requires a registration on the STM website. Save the zip file + somewhere safe and then extract it anywhere you like. You will have + to tell cmake where the unzipped library is by giving the variable + PERIPHLIBDIR the location of top level directory, e.g. for version + 1.8.0 this is STM32F4xx_DSP_StdPeriph_Lib_V1.8.0. + + In this example we will assume the library has been unzipped in ~/Downloads. + +5. Configure the build system by running cmake: + + ``` + $ cmake -DCMAKE_TOOLCHAIN_FILE=../cmake/STM32_Toolchain.cmake \ + -DPERIPHLIBDIR=~/Downloads/STM32F4xx_DSP_StdPeriph_Lib_V1.8.0 .. + ``` + Or a more general case: + ``` + $ cmake /path/to/codec2-dev/stm32 -DCMAKE_TOOLCHAIN_FILE=/path/to/codec2-dev/stm32/cmake/STM32_Toolchain.cmake \ + -DPERIPHLIBDIR=/path/to/unzipped/STM32F4xx_DSP_StdPeriph_Lib_Vx.x.x .. + ``` + +6. Build binaries (including sm1000.bin) + + Finally: + ``` + $ make + ``` + To see all the details during compilation: + ``` + $ make VERBOSE=1 + ``` + +## Flashing your SM1000 + +1. Power up your SM1000 with the PTT button down. Then flash it with: + +2. ``` + sudo dfu-util -d 0483:df11 -c 1 -i 0 -a 0 -s 0x08000000 -D sm1000.bin + ``` +3. Power cycle to reboot. + +## Loading and Debugging stm32 programs + +1. See unitest/README.md for information on how to set up openocd. + +2. In one console Start openocd: + ``` + $ openocd -f board/stm32f4discovery.cfg + + ``` + +3. In another start gdb: + ``` + $ cd ~/codec2/stm32/build_stm32 + $ arm-none-eabi-gdb usart_ut.elf + (gdb) target remote :3333 + + (gdb) load + + (gdb) c + + ``` + +## Directories + +Directory | Notes +---|--- +cmake | cmake support files for the stm32 +doc | SM1000 documentation +inc | top level sm1000 source, drivers, and some legacy test code +src | top level sm1000 source, drivers, and some legacy test code +unittest | comprehensive set of automated unit tests for the stm32 700D port diff --git a/libcodec2-android/src/codec2/stm32/cmake/STM32_Lib.cmake b/libcodec2-android/src/codec2/stm32/cmake/STM32_Lib.cmake new file mode 100644 index 0000000..f336862 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/cmake/STM32_Lib.cmake @@ -0,0 +1,348 @@ +################################################### + +# Definitions for the STM32F4 Standard Peripheral Library + +#set(PERIPHLIBURL http://www.st.com/st-web-ui/static/active/en/st_prod_software_internet/resource/technical/software/firmware) +#set(PERIPHLIBZIP stm32f4_dsp_stdperiph_lib.zip) +set(PERIPHLIBVER 1.8.0) +set(PERIPHLIBNAME STM32F4xx_DSP_StdPeriph_Lib_V) + +if(NOT PERIPHLIBDIR) + set(PERIPHLIBDIR ${CMAKE_SOURCE_DIR}/${PERIPHLIBNAME}${PERIPHLIBVER}) + message(STATUS "Using default path for StdPeriph Lib: ${PERIPHLIBDIR}") +endif() + +set(CMSIS ${PERIPHLIBDIR}/Libraries/CMSIS) +set(STM32F4LIB ${PERIPHLIBDIR}/Libraries/STM32F4xx_StdPeriph_Driver) +set(STM32F4TEMPLATE ${PERIPHLIBDIR}/Project/STM32F4xx_StdPeriph_Templates) +set(DSPLIB ${PERIPHLIBDIR}/Libraries/CMSIS/DSP_Lib) + +add_definitions(-DUSE_STDPERIPH_DRIVER -DARM_MATH_CM4 -DHSE_VALUE=\(\(uint32_t\)8000000\)) +include_directories(${STM32F4LIB}/inc ${STM32F4TEMPLATE} + ${CMSIS}/Include ${CMSIS}/Device/ST/STM32F4xx/Include) + + +set(STM32F4LIB_SRCS +${STM32F4LIB}/src/misc.c +${STM32F4LIB}/src/stm32f4xx_adc.c +${STM32F4LIB}/src/stm32f4xx_can.c +${STM32F4LIB}/src/stm32f4xx_cec.c +${STM32F4LIB}/src/stm32f4xx_crc.c +${STM32F4LIB}/src/stm32f4xx_cryp_aes.c +${STM32F4LIB}/src/stm32f4xx_cryp.c +${STM32F4LIB}/src/stm32f4xx_cryp_des.c +${STM32F4LIB}/src/stm32f4xx_cryp_tdes.c +${STM32F4LIB}/src/stm32f4xx_dac.c +${STM32F4LIB}/src/stm32f4xx_dbgmcu.c +${STM32F4LIB}/src/stm32f4xx_dcmi.c +${STM32F4LIB}/src/stm32f4xx_dma2d.c +${STM32F4LIB}/src/stm32f4xx_dma.c +${STM32F4LIB}/src/stm32f4xx_exti.c +${STM32F4LIB}/src/stm32f4xx_flash.c +${STM32F4LIB}/src/stm32f4xx_flash_ramfunc.c +${STM32F4LIB}/src/stm32f4xx_fmpi2c.c +${STM32F4LIB}/src/stm32f4xx_fsmc.c +${STM32F4LIB}/src/stm32f4xx_gpio.c +${STM32F4LIB}/src/stm32f4xx_hash.c +${STM32F4LIB}/src/stm32f4xx_hash_md5.c +${STM32F4LIB}/src/stm32f4xx_hash_sha1.c +${STM32F4LIB}/src/stm32f4xx_i2c.c +${STM32F4LIB}/src/stm32f4xx_iwdg.c +${STM32F4LIB}/src/stm32f4xx_ltdc.c +${STM32F4LIB}/src/stm32f4xx_pwr.c +${STM32F4LIB}/src/stm32f4xx_qspi.c +${STM32F4LIB}/src/stm32f4xx_rcc.c +${STM32F4LIB}/src/stm32f4xx_rng.c +${STM32F4LIB}/src/stm32f4xx_rtc.c +${STM32F4LIB}/src/stm32f4xx_sai.c +${STM32F4LIB}/src/stm32f4xx_sdio.c +${STM32F4LIB}/src/stm32f4xx_spdifrx.c +${STM32F4LIB}/src/stm32f4xx_spi.c +${STM32F4LIB}/src/stm32f4xx_syscfg.c +${STM32F4LIB}/src/stm32f4xx_tim.c +${STM32F4LIB}/src/stm32f4xx_usart.c +${STM32F4LIB}/src/stm32f4xx_wwdg.c +# Not compiling for now +# $(STM32F4LIB)/src/stm32f4xx_fmc.c +) + +add_library(stm32f4 STATIC ${STM32F4LIB_SRCS}) + + +set(CMSIS_SRCS +${CMSIS}/DSP_Lib/Source/BasicMathFunctions/arm_abs_f32.c +${CMSIS}/DSP_Lib/Source/BasicMathFunctions/arm_abs_q15.c +${CMSIS}/DSP_Lib/Source/BasicMathFunctions/arm_abs_q31.c +${CMSIS}/DSP_Lib/Source/BasicMathFunctions/arm_abs_q7.c +${CMSIS}/DSP_Lib/Source/BasicMathFunctions/arm_add_f32.c +${CMSIS}/DSP_Lib/Source/BasicMathFunctions/arm_add_q15.c +${CMSIS}/DSP_Lib/Source/BasicMathFunctions/arm_add_q31.c +${CMSIS}/DSP_Lib/Source/BasicMathFunctions/arm_add_q7.c +${CMSIS}/DSP_Lib/Source/BasicMathFunctions/arm_dot_prod_f32.c +${CMSIS}/DSP_Lib/Source/BasicMathFunctions/arm_dot_prod_q15.c +${CMSIS}/DSP_Lib/Source/BasicMathFunctions/arm_dot_prod_q31.c +${CMSIS}/DSP_Lib/Source/BasicMathFunctions/arm_dot_prod_q7.c +${CMSIS}/DSP_Lib/Source/BasicMathFunctions/arm_mult_f32.c +${CMSIS}/DSP_Lib/Source/BasicMathFunctions/arm_mult_q15.c +${CMSIS}/DSP_Lib/Source/BasicMathFunctions/arm_mult_q31.c +${CMSIS}/DSP_Lib/Source/BasicMathFunctions/arm_mult_q7.c +${CMSIS}/DSP_Lib/Source/BasicMathFunctions/arm_negate_f32.c +${CMSIS}/DSP_Lib/Source/BasicMathFunctions/arm_negate_q15.c +${CMSIS}/DSP_Lib/Source/BasicMathFunctions/arm_negate_q31.c +${CMSIS}/DSP_Lib/Source/BasicMathFunctions/arm_negate_q7.c +${CMSIS}/DSP_Lib/Source/BasicMathFunctions/arm_offset_f32.c +${CMSIS}/DSP_Lib/Source/BasicMathFunctions/arm_offset_q15.c +${CMSIS}/DSP_Lib/Source/BasicMathFunctions/arm_offset_q31.c +${CMSIS}/DSP_Lib/Source/BasicMathFunctions/arm_offset_q7.c +${CMSIS}/DSP_Lib/Source/BasicMathFunctions/arm_scale_f32.c +${CMSIS}/DSP_Lib/Source/BasicMathFunctions/arm_scale_q15.c +${CMSIS}/DSP_Lib/Source/BasicMathFunctions/arm_scale_q31.c +${CMSIS}/DSP_Lib/Source/BasicMathFunctions/arm_scale_q7.c +${CMSIS}/DSP_Lib/Source/BasicMathFunctions/arm_shift_q15.c +${CMSIS}/DSP_Lib/Source/BasicMathFunctions/arm_shift_q31.c +${CMSIS}/DSP_Lib/Source/BasicMathFunctions/arm_shift_q7.c +${CMSIS}/DSP_Lib/Source/BasicMathFunctions/arm_sub_f32.c +${CMSIS}/DSP_Lib/Source/BasicMathFunctions/arm_sub_q15.c +${CMSIS}/DSP_Lib/Source/BasicMathFunctions/arm_sub_q31.c +${CMSIS}/DSP_Lib/Source/BasicMathFunctions/arm_sub_q7.c +${CMSIS}/DSP_Lib/Source/CommonTables/arm_common_tables.c +${CMSIS}/DSP_Lib/Source/CommonTables/arm_const_structs.c +${CMSIS}/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_conj_f32.c +${CMSIS}/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_conj_q15.c +${CMSIS}/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_conj_q31.c +${CMSIS}/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_dot_prod_f32.c +${CMSIS}/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_dot_prod_q15.c +${CMSIS}/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_dot_prod_q31.c +${CMSIS}/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_mag_f32.c +${CMSIS}/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_mag_q15.c +${CMSIS}/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_mag_q31.c +${CMSIS}/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_mag_squared_f32.c +${CMSIS}/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_mag_squared_q15.c +${CMSIS}/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_mag_squared_q31.c +${CMSIS}/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_mult_cmplx_f32.c +${CMSIS}/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_mult_cmplx_q15.c +${CMSIS}/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_mult_cmplx_q31.c +${CMSIS}/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_mult_real_f32.c +${CMSIS}/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_mult_real_q15.c +${CMSIS}/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_mult_real_q31.c +${CMSIS}/DSP_Lib/Source/ControllerFunctions/arm_pid_init_f32.c +${CMSIS}/DSP_Lib/Source/ControllerFunctions/arm_pid_init_q15.c +${CMSIS}/DSP_Lib/Source/ControllerFunctions/arm_pid_init_q31.c +${CMSIS}/DSP_Lib/Source/ControllerFunctions/arm_pid_reset_f32.c +${CMSIS}/DSP_Lib/Source/ControllerFunctions/arm_pid_reset_q15.c +${CMSIS}/DSP_Lib/Source/ControllerFunctions/arm_pid_reset_q31.c +${CMSIS}/DSP_Lib/Source/ControllerFunctions/arm_sin_cos_f32.c +${CMSIS}/DSP_Lib/Source/ControllerFunctions/arm_sin_cos_q31.c +${CMSIS}/DSP_Lib/Source/FastMathFunctions/arm_cos_f32.c +${CMSIS}/DSP_Lib/Source/FastMathFunctions/arm_cos_q15.c +${CMSIS}/DSP_Lib/Source/FastMathFunctions/arm_cos_q31.c +${CMSIS}/DSP_Lib/Source/FastMathFunctions/arm_sin_f32.c +${CMSIS}/DSP_Lib/Source/FastMathFunctions/arm_sin_q15.c +${CMSIS}/DSP_Lib/Source/FastMathFunctions/arm_sin_q31.c +${CMSIS}/DSP_Lib/Source/FastMathFunctions/arm_sqrt_q15.c +${CMSIS}/DSP_Lib/Source/FastMathFunctions/arm_sqrt_q31.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_df1_32x64_init_q31.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_df1_32x64_q31.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_df1_f32.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_df1_fast_q15.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_df1_fast_q31.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_df1_init_f32.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_df1_init_q15.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_df1_init_q31.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_df1_q15.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_df1_q31.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_df2T_f32.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_df2T_f64.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_df2T_init_f32.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_df2T_init_f64.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_stereo_df2T_f32.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_stereo_df2T_init_f32.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_conv_f32.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_conv_fast_opt_q15.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_conv_fast_q15.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_conv_fast_q31.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_conv_opt_q15.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_conv_opt_q7.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_conv_partial_f32.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_conv_partial_fast_opt_q15.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_conv_partial_fast_q15.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_conv_partial_fast_q31.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_conv_partial_opt_q15.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_conv_partial_opt_q7.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_conv_partial_q15.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_conv_partial_q31.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_conv_partial_q7.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_conv_q15.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_conv_q31.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_conv_q7.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_correlate_f32.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_correlate_fast_opt_q15.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_correlate_fast_q15.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_correlate_fast_q31.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_correlate_opt_q15.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_correlate_opt_q7.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_correlate_q15.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_correlate_q31.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_correlate_q7.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_fir_decimate_f32.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_fir_decimate_fast_q15.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_fir_decimate_fast_q31.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_fir_decimate_init_f32.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_fir_decimate_init_q15.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_fir_decimate_init_q31.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_fir_decimate_q15.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_fir_decimate_q31.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_fir_f32.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_fir_fast_q15.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_fir_fast_q31.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_fir_init_f32.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_fir_init_q15.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_fir_init_q31.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_fir_init_q7.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_fir_interpolate_f32.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_fir_interpolate_init_f32.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_fir_interpolate_init_q15.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_fir_interpolate_init_q31.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_fir_interpolate_q15.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_fir_interpolate_q31.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_fir_lattice_f32.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_fir_lattice_init_f32.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_fir_lattice_init_q15.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_fir_lattice_init_q31.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_fir_lattice_q15.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_fir_lattice_q31.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_fir_q15.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_fir_q31.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_fir_q7.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_fir_sparse_f32.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_fir_sparse_init_f32.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_fir_sparse_init_q15.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_fir_sparse_init_q31.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_fir_sparse_init_q7.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_fir_sparse_q15.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_fir_sparse_q31.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_fir_sparse_q7.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_iir_lattice_f32.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_iir_lattice_init_f32.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_iir_lattice_init_q15.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_iir_lattice_init_q31.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_iir_lattice_q15.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_iir_lattice_q31.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_lms_f32.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_lms_init_f32.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_lms_init_q15.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_lms_init_q31.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_lms_norm_f32.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_lms_norm_init_f32.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_lms_norm_init_q15.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_lms_norm_init_q31.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_lms_norm_q15.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_lms_norm_q31.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_lms_q15.c +${CMSIS}/DSP_Lib/Source/FilteringFunctions/arm_lms_q31.c +${CMSIS}/DSP_Lib/Source/MatrixFunctions/arm_mat_add_f32.c +${CMSIS}/DSP_Lib/Source/MatrixFunctions/arm_mat_add_q15.c +${CMSIS}/DSP_Lib/Source/MatrixFunctions/arm_mat_add_q31.c +${CMSIS}/DSP_Lib/Source/MatrixFunctions/arm_mat_cmplx_mult_f32.c +${CMSIS}/DSP_Lib/Source/MatrixFunctions/arm_mat_cmplx_mult_q15.c +${CMSIS}/DSP_Lib/Source/MatrixFunctions/arm_mat_cmplx_mult_q31.c +${CMSIS}/DSP_Lib/Source/MatrixFunctions/arm_mat_init_f32.c +${CMSIS}/DSP_Lib/Source/MatrixFunctions/arm_mat_init_q15.c +${CMSIS}/DSP_Lib/Source/MatrixFunctions/arm_mat_init_q31.c +${CMSIS}/DSP_Lib/Source/MatrixFunctions/arm_mat_inverse_f32.c +${CMSIS}/DSP_Lib/Source/MatrixFunctions/arm_mat_inverse_f64.c +${CMSIS}/DSP_Lib/Source/MatrixFunctions/arm_mat_mult_f32.c +${CMSIS}/DSP_Lib/Source/MatrixFunctions/arm_mat_mult_fast_q15.c +${CMSIS}/DSP_Lib/Source/MatrixFunctions/arm_mat_mult_fast_q31.c +${CMSIS}/DSP_Lib/Source/MatrixFunctions/arm_mat_mult_q15.c +${CMSIS}/DSP_Lib/Source/MatrixFunctions/arm_mat_mult_q31.c +${CMSIS}/DSP_Lib/Source/MatrixFunctions/arm_mat_scale_f32.c +${CMSIS}/DSP_Lib/Source/MatrixFunctions/arm_mat_scale_q15.c +${CMSIS}/DSP_Lib/Source/MatrixFunctions/arm_mat_scale_q31.c +${CMSIS}/DSP_Lib/Source/MatrixFunctions/arm_mat_sub_f32.c +${CMSIS}/DSP_Lib/Source/MatrixFunctions/arm_mat_sub_q15.c +${CMSIS}/DSP_Lib/Source/MatrixFunctions/arm_mat_sub_q31.c +${CMSIS}/DSP_Lib/Source/MatrixFunctions/arm_mat_trans_f32.c +${CMSIS}/DSP_Lib/Source/MatrixFunctions/arm_mat_trans_q15.c +${CMSIS}/DSP_Lib/Source/MatrixFunctions/arm_mat_trans_q31.c +${CMSIS}/DSP_Lib/Source/StatisticsFunctions/arm_max_f32.c +${CMSIS}/DSP_Lib/Source/StatisticsFunctions/arm_max_q15.c +${CMSIS}/DSP_Lib/Source/StatisticsFunctions/arm_max_q31.c +${CMSIS}/DSP_Lib/Source/StatisticsFunctions/arm_max_q7.c +${CMSIS}/DSP_Lib/Source/StatisticsFunctions/arm_mean_f32.c +${CMSIS}/DSP_Lib/Source/StatisticsFunctions/arm_mean_q15.c +${CMSIS}/DSP_Lib/Source/StatisticsFunctions/arm_mean_q31.c +${CMSIS}/DSP_Lib/Source/StatisticsFunctions/arm_mean_q7.c +${CMSIS}/DSP_Lib/Source/StatisticsFunctions/arm_min_f32.c +${CMSIS}/DSP_Lib/Source/StatisticsFunctions/arm_min_q15.c +${CMSIS}/DSP_Lib/Source/StatisticsFunctions/arm_min_q31.c +${CMSIS}/DSP_Lib/Source/StatisticsFunctions/arm_min_q7.c +${CMSIS}/DSP_Lib/Source/StatisticsFunctions/arm_power_f32.c +${CMSIS}/DSP_Lib/Source/StatisticsFunctions/arm_power_q15.c +${CMSIS}/DSP_Lib/Source/StatisticsFunctions/arm_power_q31.c +${CMSIS}/DSP_Lib/Source/StatisticsFunctions/arm_power_q7.c +${CMSIS}/DSP_Lib/Source/StatisticsFunctions/arm_rms_f32.c +${CMSIS}/DSP_Lib/Source/StatisticsFunctions/arm_rms_q15.c +${CMSIS}/DSP_Lib/Source/StatisticsFunctions/arm_rms_q31.c +${CMSIS}/DSP_Lib/Source/StatisticsFunctions/arm_std_f32.c +${CMSIS}/DSP_Lib/Source/StatisticsFunctions/arm_std_q15.c +${CMSIS}/DSP_Lib/Source/StatisticsFunctions/arm_std_q31.c +${CMSIS}/DSP_Lib/Source/StatisticsFunctions/arm_var_f32.c +${CMSIS}/DSP_Lib/Source/StatisticsFunctions/arm_var_q15.c +${CMSIS}/DSP_Lib/Source/StatisticsFunctions/arm_var_q31.c +${CMSIS}/DSP_Lib/Source/SupportFunctions/arm_copy_f32.c +${CMSIS}/DSP_Lib/Source/SupportFunctions/arm_copy_q15.c +${CMSIS}/DSP_Lib/Source/SupportFunctions/arm_copy_q31.c +${CMSIS}/DSP_Lib/Source/SupportFunctions/arm_copy_q7.c +${CMSIS}/DSP_Lib/Source/SupportFunctions/arm_fill_f32.c +${CMSIS}/DSP_Lib/Source/SupportFunctions/arm_fill_q15.c +${CMSIS}/DSP_Lib/Source/SupportFunctions/arm_fill_q31.c +${CMSIS}/DSP_Lib/Source/SupportFunctions/arm_fill_q7.c +${CMSIS}/DSP_Lib/Source/SupportFunctions/arm_float_to_q15.c +${CMSIS}/DSP_Lib/Source/SupportFunctions/arm_float_to_q31.c +${CMSIS}/DSP_Lib/Source/SupportFunctions/arm_float_to_q7.c +${CMSIS}/DSP_Lib/Source/SupportFunctions/arm_q15_to_float.c +${CMSIS}/DSP_Lib/Source/SupportFunctions/arm_q15_to_q31.c +${CMSIS}/DSP_Lib/Source/SupportFunctions/arm_q15_to_q7.c +${CMSIS}/DSP_Lib/Source/SupportFunctions/arm_q31_to_float.c +${CMSIS}/DSP_Lib/Source/SupportFunctions/arm_q31_to_q15.c +${CMSIS}/DSP_Lib/Source/SupportFunctions/arm_q31_to_q7.c +${CMSIS}/DSP_Lib/Source/SupportFunctions/arm_q7_to_float.c +${CMSIS}/DSP_Lib/Source/SupportFunctions/arm_q7_to_q15.c +${CMSIS}/DSP_Lib/Source/SupportFunctions/arm_q7_to_q31.c +${CMSIS}/DSP_Lib/Source/TransformFunctions/arm_bitreversal.c +${CMSIS}/DSP_Lib/Source/TransformFunctions/arm_bitreversal2.S +${CMSIS}/DSP_Lib/Source/TransformFunctions/arm_cfft_f32.c +${CMSIS}/DSP_Lib/Source/TransformFunctions/arm_cfft_q15.c +${CMSIS}/DSP_Lib/Source/TransformFunctions/arm_cfft_q31.c +${CMSIS}/DSP_Lib/Source/TransformFunctions/arm_cfft_radix2_f32.c +${CMSIS}/DSP_Lib/Source/TransformFunctions/arm_cfft_radix2_init_f32.c +${CMSIS}/DSP_Lib/Source/TransformFunctions/arm_cfft_radix2_init_q15.c +${CMSIS}/DSP_Lib/Source/TransformFunctions/arm_cfft_radix2_init_q31.c +${CMSIS}/DSP_Lib/Source/TransformFunctions/arm_cfft_radix2_q15.c +${CMSIS}/DSP_Lib/Source/TransformFunctions/arm_cfft_radix2_q31.c +${CMSIS}/DSP_Lib/Source/TransformFunctions/arm_cfft_radix4_f32.c +${CMSIS}/DSP_Lib/Source/TransformFunctions/arm_cfft_radix4_init_f32.c +${CMSIS}/DSP_Lib/Source/TransformFunctions/arm_cfft_radix4_init_q15.c +${CMSIS}/DSP_Lib/Source/TransformFunctions/arm_cfft_radix4_init_q31.c +${CMSIS}/DSP_Lib/Source/TransformFunctions/arm_cfft_radix4_q15.c +${CMSIS}/DSP_Lib/Source/TransformFunctions/arm_cfft_radix4_q31.c +${CMSIS}/DSP_Lib/Source/TransformFunctions/arm_cfft_radix8_f32.c +${CMSIS}/DSP_Lib/Source/TransformFunctions/arm_dct4_f32.c +${CMSIS}/DSP_Lib/Source/TransformFunctions/arm_dct4_init_f32.c +${CMSIS}/DSP_Lib/Source/TransformFunctions/arm_dct4_init_q15.c +${CMSIS}/DSP_Lib/Source/TransformFunctions/arm_dct4_init_q31.c +${CMSIS}/DSP_Lib/Source/TransformFunctions/arm_dct4_q15.c +${CMSIS}/DSP_Lib/Source/TransformFunctions/arm_dct4_q31.c +${CMSIS}/DSP_Lib/Source/TransformFunctions/arm_rfft_f32.c +${CMSIS}/DSP_Lib/Source/TransformFunctions/arm_rfft_fast_f32.c +${CMSIS}/DSP_Lib/Source/TransformFunctions/arm_rfft_fast_init_f32.c +${CMSIS}/DSP_Lib/Source/TransformFunctions/arm_rfft_init_f32.c +${CMSIS}/DSP_Lib/Source/TransformFunctions/arm_rfft_init_q15.c +${CMSIS}/DSP_Lib/Source/TransformFunctions/arm_rfft_init_q31.c +${CMSIS}/DSP_Lib/Source/TransformFunctions/arm_rfft_q15.c +${CMSIS}/DSP_Lib/Source/TransformFunctions/arm_rfft_q31.c +) + +add_library(CMSIS STATIC ${CMSIS_SRCS}) +target_compile_options(CMSIS PRIVATE "-Wno-double-promotion") diff --git a/libcodec2-android/src/codec2/stm32/cmake/STM32_Toolchain.cmake b/libcodec2-android/src/codec2/stm32/cmake/STM32_Toolchain.cmake new file mode 100644 index 0000000..1d4ef47 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/cmake/STM32_Toolchain.cmake @@ -0,0 +1,14 @@ +set(CMAKE_SYSTEM_NAME Generic) +set(CMAKE_SYSTEM_PROCESSOR arm) +set(CMAKE_SYSTEM_VERSION 1) +set(CMAKE_ASM_FLAGS "${CFLAGS} -x assembler-with-cpp") + +# specify the cross compiler +set(CMAKE_C_COMPILER ${ARM_GCC_BIN}arm-none-eabi-gcc) +set(CMAKE_CXX_COMPILER ${ARM_GCC_BIN}arm-none-eabi-cpp) +set(CMAKE_ASM ${ARM_GCC_BIN}arm-none-eabi-as) +set(CMAKE_C_FLAGS_INIT "-specs=nosys.specs" CACHE STRING "Required compiler init flags") +set(CMAKE_CXX_FLAGS_INIT "-specs=nosys.specs" CACHE STRING "Required compiler init flags") +## https://stackoverflow.com/questions/10599038/can-i-skip-cmake-compiler-tests-or-avoid-error-unrecognized-option-rdynamic +set(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "") +set(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "") diff --git a/libcodec2-android/src/codec2/stm32/cmake/arm_header.cmake b/libcodec2-android/src/codec2/stm32/cmake/arm_header.cmake new file mode 100644 index 0000000..7b9130e --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/cmake/arm_header.cmake @@ -0,0 +1,64 @@ +CMAKE_MINIMUM_REQUIRED(VERSION 2.8.4) + +#custom command to use objcopy to create .bin files out of ELF files +function(make_mbed_firmware INPUT) + add_custom_command(TARGET ${INPUT} + COMMAND arm-none-eabi-objcopy -O binary ${INPUT} ${INPUT}_${MBED_TARGET}.bin + COMMENT "objcopying to make mbed compatible firmware") + set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES ${INPUT}_${MBED_TARGET}.bin) +endfunction(make_mbed_firmware) + +#assume we're using an LPC1768 model if it's not specified by -DMBED_TARGET= + if( NOT MBED_TARGET MATCHES "LPC1768" AND NOT MBED_TARGET MATCHES "LPC2368" AND NOT MBED_TARGET MATCHES "LPC11U24") + message(STATUS "invalid or no mbed target specified. Options are LPC1768, LPC2368 or LPC11U24. Assuming LPC1768 for now. + Target may be specified using -DMBED_TARGET=") + set(MBED_TARGET "LPC1768") +endif( NOT MBED_TARGET MATCHES "LPC1768" AND NOT MBED_TARGET MATCHES "LPC2368" AND NOT MBED_TARGET MATCHES "LPC11U24") + +set(MBED_INCLUDE "${CMAKE_SOURCE_DIR}/mbed/${MBED_TARGET}/GCC_CS/") + +#setup target specific object files +if(MBED_TARGET MATCHES "LPC1768") + set(MBED_PREFIX "LPC17") + set(CORE "cm3") + set(CHIP ${MBED_INCLUDE}sys.o + ${MBED_INCLUDE}startup_LPC17xx.o) +elseif(MBED_TARGET MATCHES "LPC2368") + set(CHIP ${MBED_INCLUDE}vector_functions.o + ${MBED_INCLUDE}vector_realmonitor.o + ${MBED_INCLUDE}vector_table.o) + set(MBED_PREFIX "LPC23") + set(CORE "arm7") +elseif(MBED_TARGET MATCHES "LPC11U24") + set(CHIP ${MBED_INCLUDE}sys.o + ${MBED_INCLUDE}startup_LPC11xx.o) + set(CORE "cm0") + set(MBED_PREFIX "LPC11U") +endif(MBED_TARGET MATCHES "LPC1768") + +#setup precompiled mbed files which will be needed for all projects +set(CHIP ${CHIP} + ${MBED_INCLUDE}system_${MBED_PREFIX}xx.o + ${MBED_INCLUDE}cmsis_nvic.o + ${MBED_INCLUDE}core_${CORE}.o) + +#force min size build type +if(NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE MinSizeRel CACHE STRING + "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel." + FORCE) +endif(NOT CMAKE_BUILD_TYPE) + +#set correct linker script +set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} \"-T${CMAKE_SOURCE_DIR}/mbed/${MBED_TARGET}/GCC_CS/${MBED_TARGET}.ld\" -static") + +#find CodeSourcery Toolchain for appropriate include dirs +find_path(CSPATH arm-none-eabi-g++ PATHS ENV) +message(STATUS "${CSPATH} is where CodeSourcery is installed") + +#setup directories for appropriate C, C++, mbed libraries and includes +include_directories(${MBED_INCLUDE}) +include_directories(mbed) +include_directories(${CSPATH}/../arm-none-eabi/include) +include_directories(${CSPATH}/../arm-none-eabi/include/c++/4.6.1) +link_directories(${MBED_INCLUDE}) diff --git a/libcodec2-android/src/codec2/stm32/cmake/gencodebooks.cmake b/libcodec2-android/src/codec2/stm32/cmake/gencodebooks.cmake new file mode 100644 index 0000000..feced46 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/cmake/gencodebooks.cmake @@ -0,0 +1,173 @@ +# +# Generated sources +# + +set(D ${CMAKE_CURRENT_SOURCE_DIR}/../src/codebook) + +# lsp quantisers + +set(CODEBOOKS + ${D}/lsp1.txt + ${D}/lsp2.txt + ${D}/lsp3.txt + ${D}/lsp4.txt + ${D}/lsp5.txt + ${D}/lsp6.txt + ${D}/lsp7.txt + ${D}/lsp8.txt + ${D}/lsp9.txt + ${D}/lsp10.txt +) + +# lspd quantisers + +set(CODEBOOKSD + ${D}/dlsp1.txt + ${D}/dlsp2.txt + ${D}/dlsp3.txt + ${D}/dlsp4.txt + ${D}/dlsp5.txt + ${D}/dlsp6.txt + ${D}/dlsp7.txt + ${D}/dlsp8.txt + ${D}/dlsp9.txt + ${D}/dlsp10.txt +) + +set(CODEBOOKSJVM + ${D}/lspjvm1.txt + ${D}/lspjvm2.txt + ${D}/lspjvm3.txt +) + +set(CODEBOOKSMEL + ${D}/mel1.txt + ${D}/mel2.txt + ${D}/mel3.txt + ${D}/mel4.txt + ${D}/mel5.txt + ${D}/mel6.txt +) + +set(CODEBOOKSLSPMELVQ + ${D}/lspmelvq1.txt + ${D}/lspmelvq2.txt + ${D}/lspmelvq3.txt +) + +set(CODEBOOKSGE ${D}/gecb.txt) + +set(CODEBOOKSNEWAMP1 + ${D}/train_120_1.txt + ${D}/train_120_2.txt +) + +set(CODEBOOKSNEWAMP1_ENERGY + ${D}/newamp1_energy_q.txt +) + +set(CODEBOOKSNEWAMP2 + ${D}/codes_450.txt +) + +set(CODEBOOKSNEWAMP2_ENERGY + ${D}/newamp2_energy_q.txt +) + +# when crosscompiling we need a native executable +if(CMAKE_CROSSCOMPILING) + include(ExternalProject) + set(SOURCE_DIR ${CMAKE_SOURCE_DIR}/..) + ExternalProject_Add(codec2_native + SOURCE_DIR ${SOURCE_DIR} + BINARY_DIR ${CMAKE_BINARY_DIR}/src/codec2_native + CONFIGURE_COMMAND ${CMAKE_COMMAND} ${SOURCE_DIR} + BUILD_COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR}/src/codec2_native --target generate_codebook + INSTALL_COMMAND ${CMAKE_COMMAND} -E copy src/generate_codebook ${CMAKE_CURRENT_BINARY_DIR} + ) + add_executable(generate_codebook IMPORTED) + set_target_properties(generate_codebook + PROPERTIES IMPORTED_LOCATION ${CMAKE_CURRENT_BINARY_DIR}/generate_codebook) + add_dependencies(generate_codebook codec2_native) +else(CMAKE_CROSSCOMPILING) +# Build code generator binaries. These do not get installed. + # generate_codebook + add_executable(generate_codebook generate_codebook.c) + target_link_libraries(generate_codebook ${CMAKE_REQUIRED_LIBRARIES}) + # Make native builds available for cross-compiling. + export(TARGETS generate_codebook + FILE ${CMAKE_BINARY_DIR}/ImportExecutables.cmake) +endif(CMAKE_CROSSCOMPILING) + + +# codebook.c +add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/codebook.c + COMMAND generate_codebook lsp_cb ${CODEBOOKS} > ${CMAKE_CURRENT_BINARY_DIR}/codebook.c + DEPENDS generate_codebook ${CODEBOOKS} +) + +# codebookd.c +add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/codebookd.c + COMMAND generate_codebook lsp_cbd ${CODEBOOKSD} > ${CMAKE_CURRENT_BINARY_DIR}/codebookd.c + DEPENDS generate_codebook ${CODEBOOKSD} +) + +# codebookjvm.c +add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/codebookjvm.c + COMMAND generate_codebook lsp_cbjvm ${CODEBOOKSJVM} > ${CMAKE_CURRENT_BINARY_DIR}/codebookjvm.c + DEPENDS generate_codebook ${CODEBOOKSJVM} +) + + +# codebookmel.c +add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/codebookmel.c + COMMAND generate_codebook mel_cb ${CODEBOOKSMEL} > ${CMAKE_CURRENT_BINARY_DIR}/codebookmel.c + DEPENDS generate_codebook ${CODEBOOKSMEL} +) + +# codebooklspmelvq.c +add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/codebooklspmelvq.c + COMMAND generate_codebook lspmelvq_cb ${CODEBOOKSLSPMELVQ} > ${CMAKE_CURRENT_BINARY_DIR}/codebooklspmelvq.c + DEPENDS generate_codebook ${CODEBOOKSLSPMELVQ} +) + +# codebookge.c +add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/codebookge.c + COMMAND generate_codebook ge_cb ${CODEBOOKSGE} > ${CMAKE_CURRENT_BINARY_DIR}/codebookge.c + DEPENDS generate_codebook ${CODEBOOKSGE} +) + +# codebooknewamp1.c +add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/codebooknewamp1.c + COMMAND generate_codebook newamp1vq_cb ${CODEBOOKSNEWAMP1} > ${CMAKE_CURRENT_BINARY_DIR}/codebooknewamp1.c + DEPENDS generate_codebook ${CODEBOOKSNEWAMP1} +) + +# codebooknewamp1_energy.c +add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/codebooknewamp1_energy.c + COMMAND generate_codebook newamp1_energy_cb ${CODEBOOKSNEWAMP1_ENERGY} > ${CMAKE_CURRENT_BINARY_DIR}/codebooknewamp1_energy.c + DEPENDS generate_codebook ${CODEBOOKSNEWAMP1_ENERGY} +) + +# codebooknewamp2.c +add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/codebooknewamp2.c + COMMAND generate_codebook newamp2vq_cb ${CODEBOOKSNEWAMP2} > ${CMAKE_CURRENT_BINARY_DIR}/codebooknewamp2.c + DEPENDS generate_codebook ${CODEBOOKSNEWAMP2} +) + +# codebooknewamp2_energy.c +add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/codebooknewamp2_energy.c + COMMAND generate_codebook newamp2_energy_cb ${CODEBOOKSNEWAMP2_ENERGY} > ${CMAKE_CURRENT_BINARY_DIR}/codebooknewamp2_energy.c + DEPENDS generate_codebook ${CODEBOOKSNEWAMP2_ENERGY} +) + diff --git a/libcodec2-android/src/codec2/stm32/doc/3dot5mm_cable_config.png b/libcodec2-android/src/codec2/stm32/doc/3dot5mm_cable_config.png new file mode 100644 index 0000000..4e585d1 Binary files /dev/null and b/libcodec2-android/src/codec2/stm32/doc/3dot5mm_cable_config.png differ diff --git a/libcodec2-android/src/codec2/stm32/doc/sm1000_cn12.png b/libcodec2-android/src/codec2/stm32/doc/sm1000_cn12.png new file mode 100644 index 0000000..32da142 Binary files /dev/null and b/libcodec2-android/src/codec2/stm32/doc/sm1000_cn12.png differ diff --git a/libcodec2-android/src/codec2/stm32/doc/sm1000_cn12_rev2.odg b/libcodec2-android/src/codec2/stm32/doc/sm1000_cn12_rev2.odg new file mode 100644 index 0000000..a4891fa Binary files /dev/null and b/libcodec2-android/src/codec2/stm32/doc/sm1000_cn12_rev2.odg differ diff --git a/libcodec2-android/src/codec2/stm32/doc/sm1000_cn12_rev2.png b/libcodec2-android/src/codec2/stm32/doc/sm1000_cn12_rev2.png new file mode 100644 index 0000000..e82ef7d Binary files /dev/null and b/libcodec2-android/src/codec2/stm32/doc/sm1000_cn12_rev2.png differ diff --git a/libcodec2-android/src/codec2/stm32/doc/sm1000_cn4_cn12.jpg b/libcodec2-android/src/codec2/stm32/doc/sm1000_cn4_cn12.jpg new file mode 100644 index 0000000..de50d6c Binary files /dev/null and b/libcodec2-android/src/codec2/stm32/doc/sm1000_cn4_cn12.jpg differ diff --git a/libcodec2-android/src/codec2/stm32/doc/sm1000_enc_sm.jpg b/libcodec2-android/src/codec2/stm32/doc/sm1000_enc_sm.jpg new file mode 100644 index 0000000..e64d48d Binary files /dev/null and b/libcodec2-android/src/codec2/stm32/doc/sm1000_enc_sm.jpg differ diff --git a/libcodec2-android/src/codec2/stm32/doc/sm1000_manual.md b/libcodec2-android/src/codec2/stm32/doc/sm1000_manual.md new file mode 100644 index 0000000..1de14e0 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/doc/sm1000_manual.md @@ -0,0 +1,181 @@ +# SM1000 Manual + +![SM1000 front view](sm1000_enc_sm.jpg) + +# Getting Started + +1. Connect 12V, set the volume to half way and power on. You will hear morse playing the firmware version number (e.g. "V4") and the current mode. + +1. The SELECT button steps through the mode: + + Analog pass through (ANA) + + FreeDV 1600 (1600) + + FreeDV 700D (700D) + +1. Select 1600 mode. + +1. Connect the SM1000 ***Rig SPKR 3.5mm connector*** to your PC or laptop 3.5mm headphone socket. + +1. Download and play the [ve9qrp_1600.wav](https://github.com/drowe67/freedv-gui/tree/master/wav) sample from your PC or laptop to the SM1000. + +1. Adjust ***RIG SPKR Trimmer*** on the top of the SM1000 with a screwdriver until the clip/error LED on the front stops blinking. Occasional blinks are OK. If it blinks all the time you are clipping. + +1. If all is well you will hear decoded speech from the SM1000 speaker. + +1. Change modes to 700D with SELECT and try the [ve9qrp_700d.wav](https://github.com/drowe67/freedv-gui/tree/master/wav) sample. + +# Connection to your Radio + +This is the hardest part of SM1000 set up and will take some time. + +***Sorry, we do not have specific instructions for your radio***. + +Study the wiring of you radio, the [SM1000 schematic](https://svn.code.sf.net/p/freetel/code/smartmic/SM1000-F/MFG-SM1000-F/SCH-SM1000-F.pdf) **Rig Interface** section, and this section of the manual. Draw a schematic or wiring diagram. Take it slowly. Connect one part of the interface at at time and test. For example start with PTT. When that is working, connect receive audio and test, then transmit audio. + +1. You can connect the SM1000 to your radio using the 3.5mm sockets or the RJ45 connector. The RIG MIC, RIG SPKR and RIG PTT signals are connected in parallel to the 3.5mm sockets and the RJ45. + + ![](3dot5mm_cable_config.png) + +1. Stereo 3.5mm plugs should be used if possible. The stereo 3.5mm SM1000 sockets are wired to use the sleeve for ground and tip for signal, with ring unconnected. + +1. RJ45 connection to your radio – The CN12 Patch Panel is configured to connect the audio and PTT connections to your radio. You only need to configure the CN12 Patch Panel if you are using the RJ45. If you are using the 3.5mm connectors you do not need to configure the CN12 Patch Panel. Here is an example for a Yaesu radio: + + ![](sm1000_cn12_rev2.png) + ![](sm1000_cn4_cn12.jpg) + +1. All grounds are floating (unconnected) by default, but can be connected together using the extra ground connections on CN12. In the Yaesu example above all grounds are connected together using the wires between pins 10-13 and 11-12. Some radios have a separate microphone ground. + +1. Some radios have reversed numbering for their RJ45. + +1. Use 5cm lengths of 24GA (0.5mm) maximum diameter solid core wire for the patch panel. Using wire greater than 24GA (0.5mm) may damage the patch panel sockets. Insert one end of the wire at a time using needle nose pliers. + +1. For level set up, you can adjust the RIG SPKR, MIC GAIN, and RIG MIC trimmers through holes in the SM1000 top cover. + +1. On receive, adjust the radio volume (AF gain) and/or SM1000 RIG SPKR trimmer R52 so the clip/error led is not blinking. The receive level is not critical. It doesn’t work better with a louder signal. FreeDV 1600 and 700D use phase shift keying so are level insensitive. Constant clipping on the audio is bad, when this happens you’ll see the error led blink. + +1. Press PTT, and adjust MIC GAIN trimmer R42 so that the clip led just blinks occasionally, at the peaks of yr speech. Once again, this is not very critical, as it’s Digital Voice. A louder microphone signal won’t make your signal stronger. However a badly clipped mic signal will sound bad. Note on some versions MIC GAIN increases when turned anticlockwise. + +1. Jumper J5 selects high or low range RIG MIC level. Add J5 if your radio requires a “line level” mic input of several hundred mVpp. Remove J5 for low, mV level mic input into your radio. Then finely adjust the RIG MIC level with R47 (next step). Prior to Rev E it is possible to solder a resistor onto your SM1000 to achieve the same boost in mic input level. + +1. The RIG MIC trimmer R47 is the most critical. This controls the level of the modem signal sent to your radio on transmit. With PTT pressed and your radio transmitting adjust RIG MIC so that your radio ALC is just moving. Too much transmit drive will lead to a distorted modem signal, splatter on adjacent frequencies, and bit errors. Your Digital Voice signal will not be improved! Over driving transmitters when using digital voice is the most common mistake for new users! For finer adjustment use a 2nd receiver to monitoring your FreeDV transmission. Connect this receiver to the x86 PC version of FreeDV to monitor the spectrum and scatter plot. Here is a blog post and video [describing](http://www.rowetel.com/?p=3109) scatter plots and how they can be used to tune your FreeDV transmission. + +1. External Microphone – Jumper J3 provides electret microphone DC bias. Remove J3 if you do not want DC bias. + +1. External Speaker – The SM1000 3.5mm sockets are wired to use stereo or mono plugs. If you wish to use a mono plug for Ext Spkr (CN8) remove the jumper J2 on the PCB. This prevents a mono plug shorting the speaker amplifier output to ground resulting in no audio. Note the first production SM1000 (Rev D) did not have jumper J2 and should only be used with a stereo plug. + +# Morse Menus + +The SM1000 has a comprehensive menu system with morse code prompts developed by Stuart, VK4MSL. + +There are two buttons for UI operation, SELECT and BACK. Outside of the menu, these simply cycle between the available modes. The current mode is announced (morse code) after a short delay. + +Holding down SELECT puts you in menu mode. The POWER LED will now flash to indicate this. To navigate, press the SELECT and BACK buttons momentarily to move up and down in the menu. Again, after a pause the item will be read out. Holding SELECT or BACK either chooses the option, or backs out. + +Pressing PTT while in a menu exits the entire menu tree without saving changes to flash storage. + +The menu structure looks like this: +``` + -> Root menu: + |---> "MODE": Boot-up Operating mode + | |---> "ANA": Analogue mode + | |---> "1600": FreeDV 1600 + | '---> "700D": FreeDV 700D + | + |---> "TOT": Time-out timer + | |---> "TIME": Total time-out period (0 == disabled) + | | 0-10 minutes in 5 second steps + | '---> "WARN": Warning beep period (0 == disabled) + | 0-${TIME} seconds in 5 second steps + | + '---> "UI": User interface options + |---> "FREQ": Morse frequency + | 50-2000 Hz in 50Hz steps + |---> "WPM": Morse send speed (PARIS standard) + | 5-60 WPM in 5 WPM steps + '---> "VOL": Menu volume + 1-15 units. +``` +Settings are saved when you hold down BACK to leave the root menu. + +# Flashing Your SM1000 + +You can program the flash memory on your SM1000 via USB using a Windows or Linux PC. Download the latest SM1000 firmware here: + + Version | Date | Download .bin | Download .dfu | Release Notes + :---: | --- | --- | --- | --- | + 1 | May 2015 | [sm1000.bin](http://www.rowetel.com/downloads/codec2/smartmic/sm1000.bin) | | Original release with FreeDV 1600 + 2 | July 2019 | [sm1000v2.bin](http://www.rowetel.com/downloads/codec2/smartmic/sm1000v2.bin) | [sm1000v2.dfu](http://www.rowetel.com/downloads/codec2/smartmic/sm1000v2.dfu) | FreeDV 700D and morse menus + 3 | March 2020 | [sm1000v3.bin](http://www.rowetel.com/downloads/codec2/smartmic/sm1000v3.bin) | [sm1000v3.dfu](http://www.rowetel.com/downloads/codec2/smartmic/sm1000v3.dfu) | Menu bug fixes, 700D modem improvements & automatic Mic EQ + 4 | May 2020 | [sm1000v4.bin](http://www.rowetel.com/downloads/codec2/smartmic/sm1000v4.bin) | [sm1000v4.dfu](http://www.rowetel.com/downloads/codec2/smartmic/sm1000v4.dfu) | 700D sync logic to reduce stop burbling with no signal + +## Windows + +Find and install the **DfuSeDemo** software by searching on the [ST web site](http://www.st.com). + +For Windows use the ```.dfu``` firmware file provided above: + +1. Connect the SM1000 USB to a Windows PC. +1. Run the ```DfuSeDemo``` Application. +1. Apply power with PTT held down, then release PTT. +1. The ```Available DFU Devices``` window should show ```STM Device in DFU Mode```. If not, use the arrow to select that option. Verify it shows a ```Vender ID``` of 0483, and a ```Product ID``` of DF11. +1. In the lower right quadrant of the screen, under ```Upgrade or Verify Action``` select ```Choose```. +1. Locate your DFU file you want to program into the SM1000, and press ```Open```. +1. Select ```Verify after download``` option. +1. Select ```Upgrade``` and confirm ```Yes``` when asked, and the firmware procedure will commence. +1. A message when complete that it was successful. If the message returns that it was unsuccessful, then first try the ```Upgrade``` again. If the upgrade fails twice, you may have to start this complete procedure again. + +Power cycle the SM1000 and the new firmware will run. + +## Linux + +1. Apply power with PTT held down, then release PTT. +1. Connect the SM1000 to a Ubuntu Linux PC and type “dmesg”. You should see a STM32F4 boot device. +1. To flash the SM1000 + ``` + $ sudo apt-get install dfu-util + $ sudo dfu-util -d 0483:df11 -c 1 -i 0 -a 0 -s 0x08000000 -D sm1000v4.bin + ``` + After about 10 seconds you will be returned to the command line. +1. Power cycle the SM1000 and the new firmware will run. + +# Tips + +1. A sound blaster record input connected to RIG MIC CN7 is a good way to test if the SM1000 is transmitting a signal. You can receive your FreeDV signal on the bench using FreeDV GUI on your PC. No radio is required for this test. + +1. Small external speakers and an external mic tend to make FreeDV sound better. A low cost analog headset works well. + +1. You may notice background noise from the SM1000 with no signal connected, especially at high volume levels. This becomes inaudible when the SM1000 is connected to a SSB radio in either analog or digital mode. + +1. The squelch threshold is fixed at 2dB for FreeDV 1600 and is off for 700D to optimise low SNR reception. However 700D will squelch if the Forward Error Correction (FEC) fails to decode. + +# Building the Firmware and Development + +1. [The SM1000 source code](https://github.com/drowe67/codec2/blob/master/stm32/README.md) + +1. You can use a STM32F4 Discovery board as an emulator pod for tetsing SM1000 firmware. + +1. [Comprehensive unit test system](https://github.com/drowe67/codec2/blob/master/stm32/unittest/README_unittest.md), thanks Don W7DMR. + +1. The SM1000 has a 115200 bit/s serial output from the 3 pin CN11 connector that dumps debug information as it runs. + +## Factory Reset + +To perform a factory reset, hold down BACK whilst powering the device on. A loud beep should be heard and the SYNC LED should flash. Release, and the device should boot up with factory defaults. + +# References + +1. [Support - Codec 2 Mailing List](https://lists.sourceforge.net/lists/listinfo/freetel-codec2). +1. [Buy a SM1000](http://rowetel.com/sm1000.html) - Your purchase supports FreeDV development +1. [SM1000 Ref F Schematic](https://svn.code.sf.net/p/freetel/code/smartmic/SM1000-F/MFG-SM1000-F/SCH-SM1000-F.pdf) +1. [SM1000 Hardware Design](https://svn.code.sf.net/p/freetel/code/smartmic) +1. [Series of blog posts on the SM1000 development](http://www.rowetel.com/?page_id=6172) (2014 section of archive) +1. Nice write up of a mobile [Codan NGT SM1000 installation](http://rfhead.net/?p=582) by Mark VK5QI including tips on testing and debugging a microphone level problem. + +# Credits + +The SM1000 hardware was developed by David Rowe VK5DGR and Rick Barnich KA8BMA. It is being manufactured, tested and shipped by our good friend Edwin at Dragino in Shenzhen, China. + +Steve (K5OKC) helped develop the fine OFDM modem used for FreeDV 700D. Don (W7DMR), spearheaded the port of FreeDV 700D to the SM1000, including code optimisation and a comprehensive unit test system. Don, Danilo (DB4PLE), and Richard (KF5OIM) have done some fantastic work on the cmake build and test system for the stm32 port of 700D. Stuart VK4MSL developed the morse menu system for the SM1000. + +Thanks also to the many Hams who kindly helped out with testing new firmware releases. + +This is an open source/open hardware project, developed by Hams - for Hams. Thanks! diff --git a/libcodec2-android/src/codec2/stm32/inc/debugblinky.h b/libcodec2-android/src/codec2/stm32/inc/debugblinky.h new file mode 100644 index 0000000..f2bb2da --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/inc/debugblinky.h @@ -0,0 +1,35 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: debugblinky.h + AUTHOR......: David Rowe + DATE CREATED: 12 August 2014 + + Configures Port E GPIO pins used for debug blinkies, and control lines + for SM2000 +12V switching. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2014 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#ifndef __DEBUGBLINKY__ +#define __DEBUGBLINKY__ + +void init_debug_blinky(void); +void txrx_12V(int state); + +#endif diff --git a/libcodec2-android/src/codec2/stm32/inc/gdb_stdio.h b/libcodec2-android/src/codec2/stm32/inc/gdb_stdio.h new file mode 100644 index 0000000..eafabca --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/inc/gdb_stdio.h @@ -0,0 +1,47 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: gdb_stdio.h + AUTHOR......: David Rowe + DATE CREATED: April 23 2013 + + Some stdio I/O functions that perform I/O on the host using gdb. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2013 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#ifndef __GDB_STDIO__ +#define __GDB_STDIO__ + +#include +#include + +void gdb_stdio_fprintf(FILE *file, const char *format, ...); +void gdb_stdio_printf(const char *format, ...); +FILE *gdb_stdio_fopen(char file_name[], char mode[]); +void gdb_stdio_fclose(FILE *file); +int gdb_stdio_fwrite(void *ptr, int size, int nmemb, FILE *file); +int gdb_stdio_fread(void *ptr, int size, int nmemb, FILE *file); + +#define printf gdb_stdio_printf +#define fopen gdb_stdio_fopen +#define fclose gdb_stdio_fclose +#define fread gdb_stdio_fread +#define fwrite gdb_stdio_fwrite + +#endif diff --git a/libcodec2-android/src/codec2/stm32/inc/iir_duc.h b/libcodec2-android/src/codec2/stm32/inc/iir_duc.h new file mode 100644 index 0000000..b20b0b5 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/inc/iir_duc.h @@ -0,0 +1,37 @@ + /*---------------------------------------------------------------------------*\ + + FILE........: iir_duc.h + AUTHOR......: Brady O'Brien + DATE CREATED: 6 Mar 2015 + + Interapolator/Filter for IF upconversion + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2015 Brady O'Brien + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#ifndef __IIR_DUC_H +#define __IIR_DUC_H +#include "comp.h" + +void iir_upconv(float modin[],unsigned short dac_out[]); +void iir_upconv_fixp(int modin[], unsigned short dac_out[]); +void upconv_48c_80r(COMP comp_8[],int real_80[],int count); +void upconv_8c_80r(COMP comp_8[],float real_80[],int count); + +#endif diff --git a/libcodec2-android/src/codec2/stm32/inc/iir_tuner.h b/libcodec2-android/src/codec2/stm32/inc/iir_tuner.h new file mode 100644 index 0000000..7788a8d --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/inc/iir_tuner.h @@ -0,0 +1,36 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: iir_tuner.h + AUTHOR......: David Rowe + DATE CREATED: 20 Feb 2015 + + Header file for IIR tuner function. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2015 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#ifndef __IIR_TUNER__ +#define __IIR_TUNER__ + +#define IIR_TUNER_DEC_50_10_FILT_MEM 100 + +void iir_tuner(float dec_50[], unsigned short adc_buf[]); +void iir_tuner_dec_50_to_10(float dec_10[], float dec_50[], int n); + +#endif diff --git a/libcodec2-android/src/codec2/stm32/inc/memtools.h b/libcodec2-android/src/codec2/stm32/inc/memtools.h new file mode 100644 index 0000000..b4fa8be --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/inc/memtools.h @@ -0,0 +1,13 @@ +/* + memtools.h + June 2019 + + Tools for anlysing and debugging memory on stm32. See also debug_alloc.h +*/ + +#ifndef __MEMTOOLS__ +#define __MEMTOOLS__ +void memtools_find_unused( int (*printf_func)(const char *fmt, ...) ); +register char * memtools_sp asm ("sp"); +void memtools_isnan(float *vec, int n, char *label, int (*printf_func)(const char *fmt, ...)); +#endif diff --git a/libcodec2-android/src/codec2/stm32/inc/menu.h b/libcodec2-android/src/codec2/stm32/inc/menu.h new file mode 100644 index 0000000..f93601b --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/inc/menu.h @@ -0,0 +1,92 @@ +#ifndef _MENU_H +#define _MENU_H +/*! + * Callback driven menu handler. + * + * The following is an implementation of a callback-driven menu system. + * It supports arbitrary levels of menus (limited by size of return stack) + * and supports arbitrary user events. + * + * Author Stuart Longland + * Copyright (C) 2015 FreeDV project. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License version 2.1, + * as published by the Free Software Foundation. This program is + * distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, see + * . + */ + +#include + +#define MENU_STACK_SZ 8 /*!< Size of the menu return stack */ + +#define MENU_EVT_ENTERED 0 /*!< Menu item has been entered */ +#define MENU_EVT_RETURNED 1 /*!< We have returned from a submenu */ + +/*! Menu state structure */ +struct menu_t { + /*! The last seen menu item */ + const struct menu_item_t* last; + /*! Currently selected item index */ + uint32_t current; + /*! Current menu item stack */ + struct menu_stack_item_t { + const struct menu_item_t* item; + uint32_t index; + } stack[MENU_STACK_SZ]; + /*! Present depth of the stack */ + uint8_t stack_depth; +}; + +/*! Menu item structure */ +struct menu_item_t { + /*! Morse-code label for the menu item */ + const char* label; + /*! Event callback pointer for menu item */ + void (*event_cb)( + struct menu_t* const menu, + uint32_t event); + /*! Children of this menu item */ + const struct menu_item_t** const children; + uint32_t num_children; + /*! Arbitrary data */ + union menu_item_data_t { + /*! Arbitrary pointer */ + const void* p; + /*! Arbitrary unsigned integer */ + uintptr_t ui; + /*! Arbitrary signed integer */ + intptr_t si; + } data; +}; + +/*! + * Return the Nth item on the stack. + */ +const struct menu_item_t* const menu_item( + const struct menu_t* const menu, uint8_t index); + +/*! + * Enter a (sub)-menu. + * @retval -1 Stack is full + * @retval 0 Success + */ +int menu_enter(struct menu_t* const menu, + const struct menu_item_t* const item); + +/*! Return from a (sub)-menu */ +void menu_leave(struct menu_t* const menu); + +/*! + * Execute the callback for the current item with a user-supplied event. + */ +void menu_exec(struct menu_t* const menu, uint32_t event); + +#endif diff --git a/libcodec2-android/src/codec2/stm32/inc/morse.h b/libcodec2-android/src/codec2/stm32/inc/morse.h new file mode 100644 index 0000000..632f2e2 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/inc/morse.h @@ -0,0 +1,65 @@ +#ifndef _MORSE_H +#define _MORSE_H +/*! + * Morse code library. + * + * This implements a state machine for playing back morse code messages. + * + * Author Stuart Longland + * Copyright (C) 2015 FreeDV project. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License version 2.1, + * as published by the Free Software Foundation. This program is + * distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, see + * . + */ + +#include "sfx.h" + +/*! + * Maximum length of a morse symbol, including gaps and termination. + * Allowing for 8 actual sub-symbols (dahs and dits), that's up to + * 8 gaps between plus a terminator. + */ +#define MORSE_SYM_LEN (17) + +/*! + * Morse code playback state machine + */ +struct morse_player_t { + /*! Symbol being transmitted */ + struct sfx_note_t sym[MORSE_SYM_LEN]; + /*! + * Pointer to the string being emitted. Playback is finished + * when this is NULL. + */ + const char* msg; + /*! Sound effect player state machine */ + struct sfx_player_t sfx_player; + /*! "Dit" period in milliseconds */ + uint16_t dit_time; + /*! Tone frequency */ + uint16_t freq; +}; + +/*! + * Play a morse code message. + * @param morse_player Morse code player state machine + * @param msg Message to play back (NULL == stop) + */ +void morse_play(struct morse_player_t* const morse_player, + const char* msg); + +/*! + * Retrieve the next sample to be played. + */ +int16_t morse_next(struct morse_player_t* const morse_player); + +#endif diff --git a/libcodec2-android/src/codec2/stm32/inc/new_i2c.h b/libcodec2-android/src/codec2/stm32/inc/new_i2c.h new file mode 100644 index 0000000..a37444d --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/inc/new_i2c.h @@ -0,0 +1,107 @@ +/* + * File: new_i2c.h + * Author: leon (zs6lmg@gmail.com or leon@lrlabs.com) + * + * Created on March 17, 2016, 6:09 PM + * + * GNU license apply. + * + */ + +/* + Copyright (C) 2016 Leon + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#ifndef NEWI2C_H +#define NEWI2C_H + +#include + +// +// I2C1 device Enable +// +#define I2C_D1 0 +// I2C1 only PORTB +// SCL - B6 or B8 +// SDA - B7 or B9 +#if I2C_D1 +#define I2C_DEVICE I2C1 +#define I2C_DX_P_SCK GPIOB +#define I2C_DX_P_SDA GPIOB +#define I2C_DX_SCK 6 +#define I2C_DX_SDA 9 +// could not get macro expansion in gcc to play with us +#define I2C_DX_CLK_SCK RCC_AHB1Periph_GPIOB +#define I2C_DX_CLK_SDA RCC_AHB1Periph_GPIOB +#endif + +// +// I2C2 device Enable +// +#define I2C_D2 0 +// I2C2 on PORTB, PORTF and PORTH +// SCL - B10 F1 H4 +// SDA - B11 F0 H5 +#if I2C_D2 +#define I2C_DEVICE I2C2 +#define I2C_DX_P_SCK GPIOB +#define I2C_DX_P_SDA GPIOB +#define I2C_DX_SCK 10 +#define I2C_DX_SDA 11 +// could not get macro expansion in gcc to play with us +#define I2C_DX_CLK_SCK RCC_AHB1Periph_GPIOB +#define I2C_DX_CLK_SDA RCC_AHB1Periph_GPIOB +#endif + +// +// I2C3 device Enable +// +#define I2C_D3 1 +// I2C2 on PORTA and PORTH +// SCL - A8 H7 +// SDA - C9 H8 +#if I2C_D3 +#define I2C_DEVICE I2C3 +#define I2C_DX_P_SCK GPIOA +#define I2C_DX_P_SDA GPIOC +#define I2C_DX_SCK 8 +#define I2C_DX_SDA 9 +// could not get macro expansion in gcc to play with us +#define I2C_DX_CLK_SCK RCC_AHB1Periph_GPIOA +#define I2C_DX_CLK_SDA RCC_AHB1Periph_GPIOC +#endif + + + + +#define I2C_SPEED 100000 +#define I2C_STIMEOUT ((uint32_t)0x1000) +#define I2C_LTIMEOUT ((uint32_t)(300 * 0x1000)) + +// software I2C model for testing +// +#define I2Cmodel 1 + +//void I2C_GPIO_Init(void); +void I2C_Setup(void); + +uint32_t I2C_NewWriteRegister(uint8_t Addr,uint8_t Register,uint8_t Value); +uint32_t I2C_NewWriteRegisterN(uint8_t Addr,uint8_t Register,uint8_t *Value,uint8_t N); +uint32_t I2C_NewReadRegister(uint8_t Addr,uint8_t Register); +uint32_t I2C_NewReadRegisterN(uint8_t Addr,uint8_t Register,uint8_t *buffer, uint8_t N); + +#endif /* NEWI2C_H */ + diff --git a/libcodec2-android/src/codec2/stm32/inc/sfx.h b/libcodec2-android/src/codec2/stm32/inc/sfx.h new file mode 100644 index 0000000..9745018 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/inc/sfx.h @@ -0,0 +1,63 @@ +#ifndef _SFX_H +#define _SFX_H +/*! + * Sound effect player library. + * + * This implements a state machine for playing back various monophonic + * sound effects such as morse code symbols, clicks and alert tones. + * + * Author Stuart Longland + * Copyright (C) 2015 FreeDV project. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License version 2.1, + * as published by the Free Software Foundation. This program is + * distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, see + * . + */ + +#include "tone.h" + +/*! + * A sound effect "note" + */ +struct sfx_note_t { + /*! Note frequency. 0 == pause */ + uint16_t freq; + /*! Note duration in msec. 0 == end of effect */ + uint16_t duration; +}; + +/*! + * Sound effect player state machine + */ +struct sfx_player_t { + /*! + * Pointer to the current "note". When this is NULL, + * playback is complete. + */ + const struct sfx_note_t* note; + /*! Tone generator state machine */ + struct tone_gen_t tone_gen; +}; + +/*! + * Start playing a particular effect. + * @param sfx_player Effect player state machine + * @param effect Pointer to sound effect (NULL == stop) + */ +void sfx_play(struct sfx_player_t* const sfx_player, + const struct sfx_note_t* effect); + +/*! + * Retrieve the next sample to be played. + */ +int16_t sfx_next(struct sfx_player_t* const sfx_player); + +#endif diff --git a/libcodec2-android/src/codec2/stm32/inc/si53xx.h b/libcodec2-android/src/codec2/stm32/inc/si53xx.h new file mode 100644 index 0000000..b43af79 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/inc/si53xx.h @@ -0,0 +1,315 @@ +/*------------------------------------------------------------------------------ + * + * Ported to stm32F4xx non c++ by Leon Lessing leon@lrlabs.com or zs6lmg@gmail.com + * + * + * Copyright (C) 2015-2016 Jason Milldrum + * Dana H. Myers + * + * Many defines derived from clk-si5351.h in the Linux kernel. + * Sebastian Hesselbarth + * Rabeeh Khoury + * + * do_div() macro derived from /include/asm-generic/div64.h in + * the Linux kernel. + * Copyright (C) 2003 Bernardo Innocenti + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + * + *------------------------------------------------------------------------------ +*/ + + +#ifndef SI53XX_H_ +#define SI53XX_H_ + +#include + + +#define SI5351_BUS_BASE_ADDR 0x60 +#define SI5351_XTAL_FREQ 25000000 +#define SI5351_PLL_FIXED 90000000000ULL +#define SI5351_FREQ_MULT 100ULL +#define SI5351_DEFAULT_CLK 1000000000ULL + +#define SI5351_PLL_VCO_MIN 600000000 +#define SI5351_PLL_VCO_MAX 900000000 +#define SI5351_MULTISYNTH_MIN_FREQ 1000000 +#define SI5351_MULTISYNTH_DIVBY4_FREQ 150000000 +#define SI5351_MULTISYNTH_MAX_FREQ 160000000 +#define SI5351_MULTISYNTH_SHARE_MAX 112500000 +#define SI5351_MULTISYNTH67_MAX_FREQ SI5351_MULTISYNTH_DIVBY4_FREQ +#define SI5351_CLKOUT_MIN_FREQ 8000 +#define SI5351_CLKOUT_MAX_FREQ SI5351_MULTISYNTH_MAX_FREQ +#define SI5351_CLKOUT67_MAX_FREQ SI5351_MULTISYNTH67_MAX_FREQ + +#define SI5351_PLL_A_MIN 15 +#define SI5351_PLL_A_MAX 90 +#define SI5351_PLL_B_MAX (SI5351_PLL_C_MAX-1) +#define SI5351_PLL_C_MAX 1048575 +#define SI5351_MULTISYNTH_A_MIN 6 +#define SI5351_MULTISYNTH_A_MAX 1800 +#define SI5351_MULTISYNTH67_A_MAX 254 +#define SI5351_MULTISYNTH_B_MAX (SI5351_MULTISYNTH_C_MAX-1) +#define SI5351_MULTISYNTH_C_MAX 1048575 +#define SI5351_MULTISYNTH_P1_MAX ((1<<18)-1) +#define SI5351_MULTISYNTH_P2_MAX ((1<<20)-1) +#define SI5351_MULTISYNTH_P3_MAX ((1<<20)-1) + +#define SI5351_DEVICE_STATUS 0 +#define SI5351_INTERRUPT_STATUS 1 +#define SI5351_INTERRUPT_MASK 2 +#define SI5351_STATUS_SYS_INIT (1<<7) +#define SI5351_STATUS_LOL_B (1<<6) +#define SI5351_STATUS_LOL_A (1<<5) +#define SI5351_STATUS_LOS (1<<4) +#define SI5351_OUTPUT_ENABLE_CTRL 3 +#define SI5351_OEB_PIN_ENABLE_CTRL 9 +#define SI5351_PLL_INPUT_SOURCE 15 +#define SI5351_CLKIN_DIV_MASK (3<<6) +#define SI5351_CLKIN_DIV_1 (0<<6) +#define SI5351_CLKIN_DIV_2 (1<<6) +#define SI5351_CLKIN_DIV_4 (2<<6) +#define SI5351_CLKIN_DIV_8 (3<<6) +#define SI5351_PLLB_SOURCE (1<<3) +#define SI5351_PLLA_SOURCE (1<<2) + +#define SI5351_CLK0_CTRL 16 +#define SI5351_CLK1_CTRL 17 +#define SI5351_CLK2_CTRL 18 +#define SI5351_CLK3_CTRL 19 +#define SI5351_CLK4_CTRL 20 +#define SI5351_CLK5_CTRL 21 +#define SI5351_CLK6_CTRL 22 +#define SI5351_CLK7_CTRL 23 +#define SI5351_CLK_POWERDOWN (1<<7) +#define SI5351_CLK_INTEGER_MODE (1<<6) +#define SI5351_CLK_PLL_SELECT (1<<5) +#define SI5351_CLK_INVERT (1<<4) +#define SI5351_CLK_INPUT_MASK (3<<2) +#define SI5351_CLK_INPUT_XTAL (0<<2) +#define SI5351_CLK_INPUT_CLKIN (1<<2) +#define SI5351_CLK_INPUT_MULTISYNTH_0_4 (2<<2) +#define SI5351_CLK_INPUT_MULTISYNTH_N (3<<2) +#define SI5351_CLK_DRIVE_STRENGTH_MASK (3<<0) +#define SI5351_CLK_DRIVE_STRENGTH_2MA (0<<0) +#define SI5351_CLK_DRIVE_STRENGTH_4MA (1<<0) +#define SI5351_CLK_DRIVE_STRENGTH_6MA (2<<0) +#define SI5351_CLK_DRIVE_STRENGTH_8MA (3<<0) + +#define SI5351_CLK3_0_DISABLE_STATE 24 +#define SI5351_CLK7_4_DISABLE_STATE 25 +#define SI5351_CLK_DISABLE_STATE_MASK 3 +#define SI5351_CLK_DISABLE_STATE_LOW 0 +#define SI5351_CLK_DISABLE_STATE_HIGH 1 +#define SI5351_CLK_DISABLE_STATE_FLOAT 2 +#define SI5351_CLK_DISABLE_STATE_NEVER 3 + +#define SI5351_PARAMETERS_LENGTH 8 +#define SI5351_PLLA_PARAMETERS 26 +#define SI5351_PLLB_PARAMETERS 34 +#define SI5351_CLK0_PARAMETERS 42 +#define SI5351_CLK1_PARAMETERS 50 +#define SI5351_CLK2_PARAMETERS 58 +#define SI5351_CLK3_PARAMETERS 66 +#define SI5351_CLK4_PARAMETERS 74 +#define SI5351_CLK5_PARAMETERS 82 +#define SI5351_CLK6_PARAMETERS 90 +#define SI5351_CLK7_PARAMETERS 91 +#define SI5351_CLK6_7_OUTPUT_DIVIDER 92 +#define SI5351_OUTPUT_CLK_DIV_MASK (7 << 4) +#define SI5351_OUTPUT_CLK6_DIV_MASK (7 << 0) +#define SI5351_OUTPUT_CLK_DIV_SHIFT 4 +#define SI5351_OUTPUT_CLK_DIV6_SHIFT 0 +#define SI5351_OUTPUT_CLK_DIV_1 0 +#define SI5351_OUTPUT_CLK_DIV_2 1 +#define SI5351_OUTPUT_CLK_DIV_4 2 +#define SI5351_OUTPUT_CLK_DIV_8 3 +#define SI5351_OUTPUT_CLK_DIV_16 4 +#define SI5351_OUTPUT_CLK_DIV_32 5 +#define SI5351_OUTPUT_CLK_DIV_64 46 +#define SI5351_OUTPUT_CLK_DIV_128 7 +#define SI5351_OUTPUT_CLK_DIVBY4 (3<<2) + +#define SI5351_SSC_PARAM0 149 +#define SI5351_SSC_PARAM1 150 +#define SI5351_SSC_PARAM2 151 +#define SI5351_SSC_PARAM3 152 +#define SI5351_SSC_PARAM4 153 +#define SI5351_SSC_PARAM5 154 +#define SI5351_SSC_PARAM6 155 +#define SI5351_SSC_PARAM7 156 +#define SI5351_SSC_PARAM8 157 +#define SI5351_SSC_PARAM9 158 +#define SI5351_SSC_PARAM10 159 +#define SI5351_SSC_PARAM11 160 +#define SI5351_SSC_PARAM12 161 + +#define SI5351_VXCO_PARAMETERS_LOW 162 +#define SI5351_VXCO_PARAMETERS_MID 163 +#define SI5351_VXCO_PARAMETERS_HIGH 164 + +#define SI5351_CLK0_PHASE_OFFSET 165 +#define SI5351_CLK1_PHASE_OFFSET 166 +#define SI5351_CLK2_PHASE_OFFSET 167 +#define SI5351_CLK3_PHASE_OFFSET 168 +#define SI5351_CLK4_PHASE_OFFSET 169 +#define SI5351_CLK5_PHASE_OFFSET 170 + +#define SI5351_PLL_RESET 177 +#define SI5351_PLL_RESET_B (1<<7) +#define SI5351_PLL_RESET_A (1<<5) + +#define SI5351_CRYSTAL_LOAD 183 +#define SI5351_CRYSTAL_LOAD_MASK (3<<6) +#define SI5351_CRYSTAL_LOAD_0PF (0<<6) +#define SI5351_CRYSTAL_LOAD_6PF (1<<6) +#define SI5351_CRYSTAL_LOAD_8PF (2<<6) +#define SI5351_CRYSTAL_LOAD_10PF (3<<6) + +#define SI5351_FANOUT_ENABLE 187 +#define SI5351_CLKIN_ENABLE (1<<7) +#define SI5351_XTAL_ENABLE (1<<6) +#define SI5351_MULTISYNTH_ENABLE (1<<4) + +/* Macro definitions */ + +#define RFRAC_DENOM ((1L << 20) - 1) + +/* + * Based on former asm-ppc/div64.h and asm-m68knommu/div64.h + * + * The semantics of do_div() are: + * + * uint32_t do_div(uint64_t *n, uint32_t base) + * { + * uint32_t remainder = *n % base; + * *n = *n / base; + * return remainder; + * } + * + * NOTE: macro parameter n is evaluated multiple times, + * beware of side effects! + */ + +# define do_div(n,base) ({ \ + uint64_t __base = (base); \ + uint64_t __rem; \ + __rem = ((uint64_t)(n)) % __base; \ + (n) = ((uint64_t)(n)) / __base; \ + __rem; \ + }) + +/* Enum definitions */ + +/* + * enum si5351_variant - SiLabs Si5351 chip variant + * @SI5351_VARIANT_A: Si5351A (8 output clocks, XTAL input) + * @SI5351_VARIANT_A3: Si5351A MSOP10 (3 output clocks, XTAL input) + * @SI5351_VARIANT_B: Si5351B (8 output clocks, XTAL/VXCO input) + * @SI5351_VARIANT_C: Si5351C (8 output clocks, XTAL/CLKIN input) + */ + enum si5351_variant {SI5351_VARIANT_A, SI5351_VARIANT_A3, SI5351_VARIANT_B, + SI5351_VARIANT_C}; + + enum si5351_clock {SI5351_CLK0, SI5351_CLK1, SI5351_CLK2, SI5351_CLK3, + SI5351_CLK4, SI5351_CLK5, SI5351_CLK6, SI5351_CLK7, SI5351_CLKNONE}; + + enum si5351_pll {SI5351_PLLA, SI5351_PLLB}; + + enum si5351_drive {SI5351_DRIVE_2MA, SI5351_DRIVE_4MA, SI5351_DRIVE_6MA, + SI5351_DRIVE_8MA}; + + enum si5351_clock_source {SI5351_CLK_SRC_XTAL, SI5351_CLK_SRC_CLKIN, + SI5351_CLK_SRC_MS0, SI5351_CLK_SRC_MS}; + + enum si5351_clock_disable {SI5351_CLK_DISABLE_LOW, SI5351_CLK_DISABLE_HIGH, + SI5351_CLK_DISABLE_HI_Z, SI5351_CLK_DISABLE_NEVER}; + + enum si5351_clock_fanout {SI5351_FANOUT_CLKIN, SI5351_FANOUT_XO, + SI5351_FANOUT_MS}; + + enum si5351_pll_input{SI5351_PLL_INPUT_XO, SI5351_PLL_INPUT_CLKIN}; + +/* Struct definitions */ + +struct Si5351RegSet { + uint32_t p1; + uint32_t p2; + uint32_t p3; +}; + +struct Si5351Status { + uint8_t SYS_INIT; + uint8_t LOL_B; + uint8_t LOL_A; + uint8_t LOS; + uint8_t REVID; +}; + +struct Si5351IntStatus { + uint8_t SYS_INIT_STKY; + uint8_t LOL_B_STKY; + uint8_t LOL_A_STKY; + uint8_t LOS_STKY; +}; + +typedef struct { + struct Si5351Status dev_status; + struct Si5351IntStatus dev_int_status; + uint64_t plla_freq; + uint64_t pllb_freq; + uint64_t clk0_freq; + uint64_t clk1_freq; + uint64_t clk2_freq; + uint8_t clk0_int_mode, clk1_int_mode, clk2_int_mode; + int32_t ref_correction; + uint8_t lock_plla, lock_pllb; + uint32_t xtal_freq; + uint32_t I2C_ErrorCode; + uint8_t I2C_add; +} T_Si5351_data; + + + +T_Si5351_data Si5351_Config; + +/* private routines */ + + +void si5351_write(uint8_t REGaddr, uint8_t data); +void si5351_write_bulk(uint8_t REGaddr, uint8_t bytes, uint8_t *data); +uint8_t si5351_read(uint8_t REGaddr); +uint64_t si5351_multisynth_calc(uint64_t freq, uint64_t pll_freq, struct Si5351RegSet *reg); +void si5351_set_ms_source(enum si5351_clock clk, enum si5351_pll pll); +void si5351_set_ms(enum si5351_clock clk, struct Si5351RegSet ms_reg, uint8_t int_mode, uint8_t r_div, uint8_t div_by_4); +void si5351_set_pll(uint64_t pll_freq, enum si5351_pll target_pll); +void si5351_ms_div(enum si5351_clock clk, uint8_t r_div, uint8_t div_by_4); +void si5351_set_int(enum si5351_clock clk, uint8_t enable); +uint64_t si5351_pll_calc(uint64_t freq, struct Si5351RegSet *reg, int32_t correction); +uint8_t si5351_select_r_div(uint64_t *freq); + + +/* public routines */ + + + +void si5351_init(uint8_t I2C_Address, uint8_t xtal_load_c, uint32_t ref_osc_freq); +void si5351_pll_reset(enum si5351_pll target_pll); +void si5351_set_clock_pwr(enum si5351_clock clk, uint8_t pwr); +void si5351_set_clock_invert(enum si5351_clock clk, uint8_t inv); +uint8_t si5351_set_freq(uint64_t freq_in_Hz_times_100, uint64_t pll_freq, enum si5351_clock clk); + +#endif diff --git a/libcodec2-android/src/codec2/stm32/inc/sine.h b/libcodec2-android/src/codec2/stm32/inc/sine.h new file mode 100644 index 0000000..3a3ce46 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/inc/sine.h @@ -0,0 +1,48 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: sine.h + AUTHOR......: David Rowe + DATE CREATED: 1/11/94 + + Header file for sinusoidal analysis and synthesis functions. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2009 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#ifndef __SINE__ +#define __SINE__ + +#include "defines.h" +#include "comp.h" +#include "kiss_fft.h" + +void make_analysis_window(kiss_fft_cfg fft_fwd_cfg, float w[], COMP W[]); +float hpf(float x, float states[]); +void dft_speech(kiss_fft_cfg fft_fwd_cfg, COMP Sw[], float Sn[], float w[]); +void two_stage_pitch_refinement(MODEL *model, COMP Sw[]); +void estimate_amplitudes(MODEL *model, COMP Sw[], COMP W[], int est_phase); +float est_voicing_mbe(MODEL *model, COMP Sw[], COMP W[], COMP Sw_[],COMP Ew[], + float prev_Wo); +void make_synthesis_window(float Pn[]); +void synthesise(kiss_fft_cfg fft_inv_cfg, float Sn_[], MODEL *model, float Pn[], int shift); + +#define CODEC2_RAND_MAX 32767 +int codec2_rand(void); + +#endif diff --git a/libcodec2-android/src/codec2/stm32/inc/sm1000_leds_switches.h b/libcodec2-android/src/codec2/stm32/inc/sm1000_leds_switches.h new file mode 100644 index 0000000..a5cbc2a --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/inc/sm1000_leds_switches.h @@ -0,0 +1,86 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: sm1000_leds_switches.h + AUTHOR......: David Rowe + DATE CREATED: 18 July 2014 + + Functions for controlling LEDs and reading switches on SM1000. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2014 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#ifndef __LEDS_SWITCHES__ +#define __LEDS_SWITCHES__ + +#include + +void sm1000_leds_switches_init(void); + +#define LED_ON 1 /*!< Turn LED on */ +#define LED_OFF 0 /*!< Turn LED off */ +#define LED_INV -1 /*!< Invert LED state */ + +void led_pwr(int state); +void led_ptt(int state); +void led_rt(int state); +void led_err(int state); +void not_cptt(int state); + +int switch_ptt(void); +int switch_select(void); +int switch_back(void); +int ext_ptt(void); + +#define DEBOUNCE_DELAY 50 /*!< Delay to wait while switch bounces */ + +#define SW_STEADY 0 /*!< Switch is in steady-state */ +#define SW_DEBOUNCE 1 /*!< Switch is being debounced */ + +/*! Switch debounce and logic handling */ +struct switch_t { + /*! Debounce/hold timer */ + uint32_t timer; + /*! Current/debounced observed switch state */ + uint8_t sw; + /*! Raw observed switch state (during debounce) */ + uint8_t raw; + /*! Last steady-state switch state */ + uint8_t last; + /*! Debouncer state */ + uint8_t state; +}; + +/*! Update the state of a switch */ +void switch_update(struct switch_t* const sw, uint8_t state); + +/*! Acknowledge the current state of the switch */ +void switch_ack(struct switch_t* const sw); + +/*! Return how long the switch has been pressed in ticks. */ +uint32_t switch_pressed(const struct switch_t* const sw); + +/*! Return non-zero if the switch has been released. */ +int switch_released(const struct switch_t* const sw); + +/*! Count the tick timers on the switches. */ +void switch_tick(struct switch_t* const sw); + +void ColorfulRingOfDeath(int code); + +#endif diff --git a/libcodec2-android/src/codec2/stm32/inc/sounds.h b/libcodec2-android/src/codec2/stm32/inc/sounds.h new file mode 100644 index 0000000..9ccfeb7 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/inc/sounds.h @@ -0,0 +1,38 @@ +#ifndef _SOUNDS_H +#define _SOUNDS_H +/*! + * Sound effect library. + * + * This provides some sound effects for the SM1000 UI. + * + * Author Stuart Longland + * Copyright (C) 2015 FreeDV project. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License version 2.1, + * as published by the Free Software Foundation. This program is + * distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, see + * . + */ + +#include "sfx.h" + +/*! Start-up tune / selected tune */ +extern const struct sfx_note_t sound_startup[]; + +/*! Returned tune */ +extern const struct sfx_note_t sound_returned[]; + +/*! Click sound */ +extern const struct sfx_note_t sound_click[]; + +/*! Death march tune */ +extern const struct sfx_note_t sound_death_march[]; + +#endif diff --git a/libcodec2-android/src/codec2/stm32/inc/stm32f4_adc.h b/libcodec2-android/src/codec2/stm32/inc/stm32f4_adc.h new file mode 100644 index 0000000..c7884a9 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/inc/stm32f4_adc.h @@ -0,0 +1,46 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: stm32f4_adc.h + AUTHOR......: David Rowe + DATE CREATED: 30 May 2014 + + Two channel FIFO buffered ADC driver module for STM32F4. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2014 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#ifndef __STM32F4_ADC__ +#define __STM32F4_ADC__ + +#define ADC_BUF_SZ 320 + +/* divisors for various sample rates */ + +#define ADC_FS_8KHZ 10500 +#define ADC_FS_16KHZ 5250 +#define ADC_FS_48KHZ 1750 +#define ADC_FS_96KHZ 875 + +void adc_open(int fs_divisor, int fifo_sz, short *buf1, short *buf2); +int adc1_read(short buf[], int n); /* ADC1 Pin PA1 */ +int adc2_read(short buf[], int n); /* ADC2 Pin PA2 */ +int adc1_samps(); +int adc2_samps(); + +#endif diff --git a/libcodec2-android/src/codec2/stm32/inc/stm32f4_adc_tuner.h b/libcodec2-android/src/codec2/stm32/inc/stm32f4_adc_tuner.h new file mode 100644 index 0000000..a258b9d --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/inc/stm32f4_adc_tuner.h @@ -0,0 +1,40 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: stm32f4_adc_tuner.h + AUTHOR......: David Rowe + DATE CREATED: 19 Feb 2015 + + Single channel ADC driver module for STM32F4 that samples pin PA1 at + 2 MHz and down converts to 50 kHz, with "tuning" centred at 500 kHz. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2015 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#ifndef __STM32F4_ADC_TUNER__ +#define __STM32F4_ADC_TUNER__ + +#define ADC_TUNER_M 45 /* decimation rate */ +#define ADC_TUNER_N 160 +#define ADC_TUNER_BUF_SZ (ADC_TUNER_M*ADC_TUNER_N) + +void adc_open(int fifo_sz); +int adc1_read(short buf[], int n); /* ADC1 Pin PA1 */ +void adc_set_tuner_en(short flag); /* disable tuner to get raw ADC samples written to fifo */ + +#endif diff --git a/libcodec2-android/src/codec2/stm32/inc/stm32f4_dac.h b/libcodec2-android/src/codec2/stm32/inc/stm32f4_dac.h new file mode 100644 index 0000000..9bf0b9a --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/inc/stm32f4_dac.h @@ -0,0 +1,46 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: stm32f4_dac.h + AUTHOR......: David Rowe + DATE CREATED: 1 June 2013 + + Two channel FIFO buffered DAC driver module for STM32F4. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2013 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#ifndef __STM32F4_DAC__ +#define __STM32F4_DAC__ + +#define DAC_BUF_SZ 320 + +/* divisors for various sample rates */ + +#define DAC_FS_8KHZ 10500 +#define DAC_FS_16KHZ 5250 +#define DAC_FS_48KHZ 1750 +#define DAC_FS_96KHZ 875 + +void dac_open(int fs_divisor, int fifo_sz, short *buf1, short *buf2); +int dac1_write(short buf[], int n, int limit); /* DAC1 pin PA4 */ +int dac1_free(); +int dac2_write(short buf[], int n, int limit); /* DAC2 pin PA5 */ +int dac2_free(); + +#endif diff --git a/libcodec2-android/src/codec2/stm32/inc/stm32f4_dacduc.h b/libcodec2-android/src/codec2/stm32/inc/stm32f4_dacduc.h new file mode 100644 index 0000000..6a1ba20 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/inc/stm32f4_dacduc.h @@ -0,0 +1,42 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: stm32f4_dac.h + AUTHOR......: David Rowe + DATE CREATED: 1 June 2013 + + Two channel FIFO buffered DAC driver module for STM32F4. DAC1 is fixed at + Fs=2Mhz + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2013 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#ifndef __STM32F4_DAC__ +#define __STM32F4_DAC__ + +#define DUC_N 160 +#define DUC_M 25 +#define DUC_48N 96 //This is 3/5th DUC_N +#define DAC_DUC_BUF_SZ DUC_M*DUC_N +#define DAC_BUF_SZ 2048 + +void fast_dac_open(int dac1_fifo_size,int dac2_fifo_size); +int dac1_write(short buf[], int n); /* DAC1 pin PA4 */ +int dac2_write(short buf[], int n); /* DAC2 pin PA5 */ + +#endif diff --git a/libcodec2-android/src/codec2/stm32/inc/stm32f4_usart.h b/libcodec2-android/src/codec2/stm32/inc/stm32f4_usart.h new file mode 100644 index 0000000..8a37a6d --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/inc/stm32f4_usart.h @@ -0,0 +1,35 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: stm32f4_usart.h + AUTHOR......: David Rowe + DATE CREATED: May 2019 + + Basic USART tty support for the stm32. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2019 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#ifndef __STM32F4_USART__ +#define __STM32F4_USART__ + +void usart_init(); +void usart_puts(const char s[]); +int usart_printf(const char *fmt, ...); + +#endif diff --git a/libcodec2-android/src/codec2/stm32/inc/stm32f4_usb_vcp.h b/libcodec2-android/src/codec2/stm32/inc/stm32f4_usb_vcp.h new file mode 100644 index 0000000..d742ebc --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/inc/stm32f4_usb_vcp.h @@ -0,0 +1,24 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: stm32f4_usb_vcp.h + AUTHOR......: David Rowe + DATE CREATED: 4 Sep 2014 + + USB Virtual COM Port (VCP) module. + +\*---------------------------------------------------------------------------*/ + +#ifndef __STM32F4_USB_VCP__ +#define __STM32F4_USB_VCP__ + +#include + +void usb_vcp_init(void); + +int VCP_get_char(uint8_t *buf); +int VCP_get_string(uint8_t *buf); +void VCP_put_char(uint8_t buf); +void VCP_send_str(uint8_t* buf); +void VCP_send_buffer(uint8_t* buf, int len); + +#endif diff --git a/libcodec2-android/src/codec2/stm32/inc/stm32f4_vrom.h b/libcodec2-android/src/codec2/stm32/inc/stm32f4_vrom.h new file mode 100644 index 0000000..e878b9c --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/inc/stm32f4_vrom.h @@ -0,0 +1,70 @@ +#ifndef _STM32F4_VROM_H_ +#define _STM32F4_VROM_H_ +/*! + * STM32F4 Virtual EEPROM driver + * + * This module implements a crude virtual EEPROM device stored in on-board + * flash. The STM32F405 has 4 16kB flash sectors starting at address + * 0x80000000, followed by a 64kB sector, then 128kB sectors. + * + * The Cortex M4 core maps these all to address 0x00000000 when booting + * from normal flash, so the first sector is reserved for interrupt + * vectors. + * + * Everything else however is free game, and so we use these smaller + * sectors to store our configuration. + * + * Author Stuart Longland + * Copyright (C) 2015 FreeDV project. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License version 2.1, + * as published by the Free Software Foundation. This program is + * distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, see + * . + */ + +#include +#include + +/*! + * Read data from a virtual EEPROM. + * @param rom ROM ID to start reading. + * @param offset Address offset into ROM to start reading. + * @param size Number of bytes to read from ROM. + * @param out Buffer to write ROM content to. + * @returns Number of bytes read from ROM. + * @retval -ENXIO No valid data found for address. + * @retval -ESPIPE Offset past end of ROM. + */ +int vrom_read(uint8_t rom, uint16_t offset, uint16_t size, void* out); + +/*! + * Write data to a virtual EEPROM. + * @param rom ROM ID to start writing. + * @param offset Address offset into ROM to start writing. + * @param size Number of bytes to write to ROM. + * @param in Buffer to write ROM content from. + * @returns Number of bytes written to ROM. + * @retval -EIO Programming failed + * @retval -ENOSPC No free blocks available + */ +int vrom_write(uint8_t rom, uint16_t offset, uint16_t size, + const void* in); + +/*! + * Erase a virtual EEPROM. + * @param rom ROM ID to erase. + * @returns Number of bytes written to ROM. + * @retval -EIO Programming failed + * @retval -ENOSPC No free blocks available + */ +int vrom_erase(uint8_t rom); + +#endif diff --git a/libcodec2-android/src/codec2/stm32/inc/stm32f4xx_conf.h b/libcodec2-android/src/codec2/stm32/inc/stm32f4xx_conf.h new file mode 100644 index 0000000..69047b1 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/inc/stm32f4xx_conf.h @@ -0,0 +1,94 @@ +/** + ****************************************************************************** + * @file stm32f4xx_conf.h + * @author MCD Application Team + * @version V1.0.0 + * @date 19-September-2011 + * @brief Library configuration file. + ****************************************************************************** + * @attention + * + * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS + * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE + * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY + * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING + * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE + * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + *

© COPYRIGHT 2011 STMicroelectronics

+ ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __STM32F4xx_CONF_H +#define __STM32F4xx_CONF_H + +#if defined (HSE_VALUE) +/* Redefine the HSE value; it's equal to 8 MHz on the STM32F4-DISCOVERY Kit */ + #undef HSE_VALUE + #define HSE_VALUE ((uint32_t)8000000) +#endif /* HSE_VALUE */ + +/* Includes ------------------------------------------------------------------*/ +/* Uncomment the line below to enable peripheral header file inclusion */ +#include "stm32f4xx_adc.h" +#include "stm32f4xx_can.h" +#include "stm32f4xx_crc.h" +#include "stm32f4xx_cryp.h" +#include "stm32f4xx_dac.h" +#include "stm32f4xx_dbgmcu.h" +#include "stm32f4xx_dcmi.h" +#include "stm32f4xx_dma.h" +#include "stm32f4xx_exti.h" +#include "stm32f4xx_flash.h" +#include "stm32f4xx_fsmc.h" +#include "stm32f4xx_hash.h" +#include "stm32f4xx_gpio.h" +#include "stm32f4xx_i2c.h" +#include "stm32f4xx_iwdg.h" +#include "stm32f4xx_pwr.h" +#include "stm32f4xx_rcc.h" +#include "stm32f4xx_rng.h" +#include "stm32f4xx_rtc.h" +#include "stm32f4xx_sdio.h" +#include "stm32f4xx_spi.h" +#include "stm32f4xx_syscfg.h" +#include "stm32f4xx_tim.h" +#include "stm32f4xx_usart.h" +#include "stm32f4xx_wwdg.h" +#include "misc.h" /* High level functions for NVIC and SysTick (add-on to CMSIS functions) */ + +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ + +/* If an external clock source is used, then the value of the following define + should be set to the value of the external clock source, else, if no external + clock is used, keep this define commented */ +/*#define I2S_EXTERNAL_CLOCK_VAL 12288000 */ /* Value of the external clock in Hz */ + + +/* Uncomment the line below to expanse the "assert_param" macro in the + Standard Peripheral Library drivers code */ +/* #define USE_FULL_ASSERT 1 */ + +/* Exported macro ------------------------------------------------------------*/ +#ifdef USE_FULL_ASSERT + +/** + * @brief The assert_param macro is used for function's parameters check. + * @param expr: If expr is false, it calls assert_failed function + * which reports the name of the source file and the source + * line number of the call that failed. + * If expr is true, it returns no value. + * @retval None + */ + #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_failed(uint8_t* file, uint32_t line); +#else + #define assert_param(expr) ((void)0) +#endif /* USE_FULL_ASSERT */ + +#endif /* __STM32F4xx_CONF_H */ + +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ diff --git a/libcodec2-android/src/codec2/stm32/inc/tm_stm32f4_gpio.h b/libcodec2-android/src/codec2/stm32/inc/tm_stm32f4_gpio.h new file mode 100644 index 0000000..d973350 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/inc/tm_stm32f4_gpio.h @@ -0,0 +1,429 @@ +/** + * @author Tilen Majerle + * @email tilen@majerle.eu + * @website http://stm32f4-discovery.com + * @link http://stm32f4-discovery.com/2015/03/library-53-gpio-for-stm32f4 + * @version v1.5 + * @ide Keil uVision + * @license GNU GPL v3 + * @brief GPIO Library for STM32F4xx devices + * +@verbatim + ---------------------------------------------------------------------- + Copyright (C) Tilen Majerle, 2015 + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + ---------------------------------------------------------------------- +@endverbatim + */ +#ifndef TM_GPIO_H +#define TM_GPIO_H 150 + +/** + * @addtogroup TM_STM32F4xx_Libraries + * @{ + */ + +/** + * @defgroup TM_GPIO + * @brief TM GPIO Library for STM32F4xx - http://stm32f4-discovery.com/2015/03/library-53-gpio-for-stm32f4 + * @{ + * + * GPIO library can be used for GPIO pins. + * + * It features fast initialization methods as well pin input/output methods. + * + * It can be used as replacement for STD/HAL drivers GPIO library. + * + * \par Changelog + * +@verbatim + Version 1.5 + - June 10 2015 + - Added 2 new functions for getting used GPIO pins + + Version 1.4 + - April 28, 2015 + - Added support for PORT locking + + Version 1.3 + - March 23, 2015 + - Totally independent from HAL / SPD drivers + - Library can be used with any drivers or totally itself + + Version 1.2 + - March 10, 2015 + - Added functions TM_GPIO_SetPinAsInput and TM_GPIO_SetPinAsOutput + - Added functions TM_GPIO_GetPortSource and TM_GPIO_GetPinSource +0 + Version 1.1 + - March 09, 2015 + - Added function to deinit pin. Pin is set to analog input which allows lowest current consumption + + Version 1.0 + - March 08, 2015 + - Initial release +@endverbatim + * + * \par Dependencies + * +@verbatim + - STM32F4xx + - STM32F4xx GPIO + - defines.h +@endverbatim + */ + +#include "stm32f4xx.h" +#include "stm32f4xx_gpio.h" +#include "defines.h" + +/* C++ detection */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @defgroup TM_GPIO_Macros + * @brief GPIO Library macros + * @{ + */ + +/** + * @brief GPIO Pins declarations + * @note For HAL drivers compatibility + */ + +#ifndef GPIO_PIN_0 +#define GPIO_PIN_0 ((uint16_t)0x0001) +#define GPIO_PIN_1 ((uint16_t)0x0002) +#define GPIO_PIN_2 ((uint16_t)0x0004) +#define GPIO_PIN_3 ((uint16_t)0x0008) +#define GPIO_PIN_4 ((uint16_t)0x0010) +#define GPIO_PIN_5 ((uint16_t)0x0020) +#define GPIO_PIN_6 ((uint16_t)0x0040) +#define GPIO_PIN_7 ((uint16_t)0x0080) +#define GPIO_PIN_8 ((uint16_t)0x0100) +#define GPIO_PIN_9 ((uint16_t)0x0200) +#define GPIO_PIN_10 ((uint16_t)0x0400) +#define GPIO_PIN_11 ((uint16_t)0x0800) +#define GPIO_PIN_12 ((uint16_t)0x1000) +#define GPIO_PIN_13 ((uint16_t)0x2000) +#define GPIO_PIN_14 ((uint16_t)0x4000) +#define GPIO_PIN_15 ((uint16_t)0x8000) +#define GPIO_PIN_ALL ((uint16_t)0xFFFF) +#endif + +/** + * @brief GPIO Pins declarations + * @note For STD Periph drivers compatibility + */ + +#ifndef GPIO_Pin_0 +#define GPIO_Pin_0 ((uint16_t)0x0001) +#define GPIO_Pin_1 ((uint16_t)0x0002) +#define GPIO_Pin_2 ((uint16_t)0x0004) +#define GPIO_Pin_3 ((uint16_t)0x0008) +#define GPIO_Pin_4 ((uint16_t)0x0010) +#define GPIO_Pin_5 ((uint16_t)0x0020) +#define GPIO_Pin_6 ((uint16_t)0x0040) +#define GPIO_Pin_7 ((uint16_t)0x0080) +#define GPIO_Pin_8 ((uint16_t)0x0100) +#define GPIO_Pin_9 ((uint16_t)0x0200) +#define GPIO_Pin_10 ((uint16_t)0x0400) +#define GPIO_Pin_11 ((uint16_t)0x0800) +#define GPIO_Pin_12 ((uint16_t)0x1000) +#define GPIO_Pin_13 ((uint16_t)0x2000) +#define GPIO_Pin_14 ((uint16_t)0x4000) +#define GPIO_Pin_15 ((uint16_t)0x8000) +#define GPIO_Pin_All ((uint16_t)0xFFFF) +#endif + +/** + * @} + */ + +/** + * @defgroup TM_GPIO_Typedefs + * @brief GPIO Typedefs used for GPIO library for initialization purposes + * @{ + */ + +/** + * @brief GPIO Mode enumeration + */ +typedef enum { + TM_GPIO_Mode_IN = 0x00, /*!< GPIO Pin as General Purpose Input */ + TM_GPIO_Mode_OUT = 0x01, /*!< GPIO Pin as General Purpose Output */ + TM_GPIO_Mode_AF = 0x02, /*!< GPIO Pin as Alternate Function */ + TM_GPIO_Mode_AN = 0x03, /*!< GPIO Pin as Analog */ +} TM_GPIO_Mode_t; + +/** + * @brief GPIO Output type enumeration + */ +typedef enum { + TM_GPIO_OType_PP = 0x00, /*!< GPIO Output Type Push-Pull */ + TM_GPIO_OType_OD = 0x01 /*!< GPIO Output Type Open-Drain */ +} TM_GPIO_OType_t; + +/** + * @brief GPIO Speed enumeration + */ +typedef enum { + TM_GPIO_Speed_Low = 0x00, /*!< GPIO Speed Low */ + TM_GPIO_Speed_Medium = 0x01, /*!< GPIO Speed Medium */ + TM_GPIO_Speed_Fast = 0x02, /*!< GPIO Speed Fast */ + TM_GPIO_Speed_High = 0x03 /*!< GPIO Speed High */ +} TM_GPIO_Speed_t; + +/** + * @brief GPIO pull resistors enumeration + */ +typedef enum { + TM_GPIO_PuPd_NOPULL = 0x00, /*!< No pull resistor */ + TM_GPIO_PuPd_UP = 0x01, /*!< Pull up resistor enabled */ + TM_GPIO_PuPd_DOWN = 0x02 /*!< Pull down resistor enabled */ +} TM_GPIO_PuPd_t; + +/** + * @} TM_GPIO_Typedefs + */ + +/** + * @defgroup TM_GPIO_Functions + * @brief GPIO Functions + * @{ + */ + +/** + * @brief Initializes GPIO pins(s) + * @note This function also enables clock for GPIO port + * @param GPIOx: Pointer to GPIOx port you will use for initialization + * @param GPIO_Pin: GPIO pin(s) you will use for initialization + * @param GPIO_Mode: Select GPIO mode. This parameter can be a value of @ref TM_GPIO_Mode_t enumeration + * @param GPIO_OType: Select GPIO Output type. This parameter can be a value of @ref TM_GPIO_OType_t enumeration + * @param GPIO_PuPd: Select GPIO pull resistor. This parameter can be a value of @ref TM_GPIO_PuPd_t enumeration + * @param GPIO_Speed: Select GPIO speed. This parameter can be a value of @ref TM_GPIO_Speed_t enumeration + * @retval None + */ +void TM_GPIO_Init(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, TM_GPIO_Mode_t GPIO_Mode, TM_GPIO_OType_t GPIO_OType, TM_GPIO_PuPd_t GPIO_PuPd, TM_GPIO_Speed_t GPIO_Speed); + +/** + * @brief Initializes GPIO pins(s) as alternate function + * @note This function also enables clock for GPIO port + * @param GPIOx: Pointer to GPIOx port you will use for initialization + * @param GPIO_Pin: GPIO pin(s) you will use for initialization + * @param GPIO_OType: Select GPIO Output type. This parameter can be a value of @ref TM_GPIO_OType_t enumeration + * @param GPIO_PuPd: Select GPIO pull resistor. This parameter can be a value of @ref TM_GPIO_PuPd_t enumeration + * @param GPIO_Speed: Select GPIO speed. This parameter can be a value of @ref TM_GPIO_Speed_t enumeration + * @param Alternate: Alternate function you will use + * @retval None + */ +void TM_GPIO_InitAlternate(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, TM_GPIO_OType_t GPIO_OType, TM_GPIO_PuPd_t GPIO_PuPd, TM_GPIO_Speed_t GPIO_Speed, uint8_t Alternate); + +/** + * @brief Deinitializes pin(s) + * @note Pins(s) will be set as analog mode to get low power consumption + * @param GPIOx: GPIOx PORT where you want to set pin as input + * @param GPIO_Pin: Select GPIO pin(s). You can select more pins with | (OR) operator to set them as input + * @retval None + */ +void TM_GPIO_DeInit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); + +/** + * @brief Sets pin(s) as input + * @note Pins HAVE to be initialized first using @ref TM_GPIO_Init() or @ref TM_GPIO_InitAlternate() function + * @note This is just an option for fast input mode + * @param GPIOx: GPIOx PORT where you want to set pin as input + * @param GPIO_Pin: Select GPIO pin(s). You can select more pins with | (OR) operator to set them as input + * @retval None + */ +void TM_GPIO_SetPinAsInput(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); + +/** + * @brief Sets pin(s) as output + * @note Pins HAVE to be initialized first using @ref TM_GPIO_Init() or @ref TM_GPIO_InitAlternate() function + * @note This is just an option for fast output mode + * @param GPIOx: GPIOx PORT where you want to set pin as output + * @param GPIO_Pin: Select GPIO pin(s). You can select more pins with | (OR) operator to set them as output + * @retval None + */ +void TM_GPIO_SetPinAsOutput(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); + +/** + * @brief Sets pin(s) as analog + * @note Pins HAVE to be initialized first using @ref TM_GPIO_Init() or @ref TM_GPIO_InitAlternate() function + * @note This is just an option for fast analog mode + * @param GPIOx: GPIOx PORT where you want to set pin as analog + * @param GPIO_Pin: Select GPIO pin(s). You can select more pins with | (OR) operator to set them as analog + * @retval None + */ +void TM_GPIO_SetPinAsAnalog(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); + +/** + * @brief Sets pin(s) as alternate function + * @note For proper alternate function, you should first init pin using @ref TM_GPIO_InitAlternate() function. + * This functions is only used for changing GPIO mode + * @param GPIOx: GPIOx PORT where you want to set pin as alternate + * @param GPIO_Pin: Select GPIO pin(s). You can select more pins with | (OR) operator to set them as alternate + * @retval None + */ +void TM_GPIO_SetPinAsAlternate(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); + +/** + * @brief Sets pull resistor settings to GPIO pin(s) + * @note Pins HAVE to be initialized first using @ref TM_GPIO_Init() or @ref TM_GPIO_InitAlternate() function + * @param *GPIOx: GPIOx PORT where you want to select pull resistor + * @param GPIO_Pin: Select GPIO pin(s). You can select more pins with | (OR) operator to set them as output + * @param GPIO_PuPd: Pull resistor option. This parameter can be a value of @ref TM_GPIO_PuPd_t enumeration + * @retval None + */ +void TM_GPIO_SetPullResistor(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, TM_GPIO_PuPd_t GPIO_PuPd); + +/** + * @brief Sets pin(s) low + * @note Defined as macro to get maximum speed using register access + * @param GPIOx: GPIOx PORT where you want to set pin low + * @param GPIO_Pin: Select GPIO pin(s). You can select more pins with | (OR) operator to set them low + * @retval None + */ +#define TM_GPIO_SetPinLow(GPIOx, GPIO_Pin) ((GPIOx)->BSRRH = (GPIO_Pin)) + +/** + * @brief Sets pin(s) high + * @note Defined as macro to get maximum speed using register access + * @param GPIOx: GPIOx PORT where you want to set pin high + * @param GPIO_Pin: Select GPIO pin(s). You can select more pins with | (OR) operator to set them high + * @retval None + */ +#define TM_GPIO_SetPinHigh(GPIOx, GPIO_Pin) ((GPIOx)->BSRRL = (GPIO_Pin)) + +/** + * @brief Sets pin(s) value + * @note Defined as macro to get maximum speed using register access + * @param GPIOx: GPIOx PORT where you want to set pin value + * @param GPIO_Pin: Select GPIO pin(s). You can select more pins with | (OR) operator to set them value + * @param val: If parameter is 0 then pin will be low, otherwise high + * @retval None + */ +#define TM_GPIO_SetPinValue(GPIOx, GPIO_Pin, val) ((val) ? TM_GPIO_SetPinHigh(GPIOx, GPIO_Pin) : TM_GPIO_SetPinLow(GPIOx, GPIO_Pin)) + +/** + * @brief Toggles pin(s) + * @note Defined as macro to get maximum speed using register access + * @param GPIOx: GPIOx PORT where you want to toggle pin value + * @param GPIO_Pin: Select GPIO pin(s). You can select more pins with | (OR) operator to toggle them all at a time + * @retval None + */ +#define TM_GPIO_TogglePinValue(GPIOx, GPIO_Pin) ((GPIOx)->ODR ^= (GPIO_Pin)) + +/** + * @brief Sets value to entire GPIO PORT + * @note Defined as macro to get maximum speed using register access + * @param GPIOx: GPIOx PORT where you want to set value + * @param value: Value for GPIO OUTPUT data + * @retval None + */ +#define TM_GPIO_SetPortValue(GPIOx, value) ((GPIOx)->ODR = (value)) + +/** + * @brief Gets input data bit + * @note Defined as macro to get maximum speed using register access + * @param GPIOx: GPIOx PORT where you want to read input bit value + * @param GPIO_Pin: GPIO pin where you want to read value + * @retval 1 in case pin is high, or 0 if low + */ +#define TM_GPIO_GetInputPinValue(GPIOx, GPIO_Pin) (((GPIOx)->IDR & (GPIO_Pin)) == 0 ? 0 : 1) + +/** + * @brief Gets output data bit + * @note Defined as macro to get maximum speed using register access + * @param GPIOx: GPIOx PORT where you want to read output bit value + * @param GPIO_Pin: GPIO pin where you want to read value + * @retval 1 in case pin is high, or 0 if low + */ +#define TM_GPIO_GetOutputPinValue(GPIOx, GPIO_Pin) (((GPIOx)->ODR & (GPIO_Pin)) == 0 ? 0 : 1) + +/** + * @brief Gets input value from entire GPIO PORT + * @note Defined as macro to get maximum speed using register access + * @param GPIOx: GPIOx PORT where you want to read input data value + * @retval Entire PORT INPUT register + */ +#define TM_GPIO_GetPortInputValue(GPIOx) ((GPIOx)->IDR) + +/** + * @brief Gets output value from entire GPIO PORT + * @note Defined as macro to get maximum speed using register access + * @param GPIOx: GPIOx PORT where you want to read output data value + * @retval Entire PORT OUTPUT register + */ +#define TM_GPIO_GetPortOutputValue(GPIOx) ((GPIOx)->ODR) + +/** + * @brief Gets port source from desired GPIOx PORT + * @note Meant for private use, unless you know what are you doing + * @param GPIOx: GPIO PORT for calculating port source + * @retval Calculated port source for GPIO + */ +uint16_t TM_GPIO_GetPortSource(GPIO_TypeDef* GPIOx); + +/** + * @brief Gets pin source from desired GPIO pin + * @note Meant for private use, unless you know what are you doing + * @param GPIO_Pin: GPIO pin for calculating port source + * @retval Calculated pin source for GPIO pin + */ +uint16_t TM_GPIO_GetPinSource(uint16_t GPIO_Pin); + +/** + * @brief Locks GPIOx register for future changes + * @note You are not able to config GPIO registers until new MCU reset occurs + * @param *GPIOx: GPIOx PORT where you want to lock config registers + * @param GPIO_Pin: GPIO pin(s) where you want to lock config registers + * @retval None + */ +void TM_GPIO_Lock(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); + +/** + * @brief Gets bit separated pins which were used at least once in library and were not deinitialized + * @param *GPIOx: Pointer to GPIOx peripheral where to check used GPIO pins + * @retval Bit values for used pins + */ +uint16_t TM_GPIO_GetUsedPins(GPIO_TypeDef* GPIOx); + +/** + * @brief Gets bit separated pins which were not used at in library or were deinitialized + * @param *GPIOx: Pointer to GPIOx peripheral where to check used GPIO pins + * @retval Bit values for free pins + */ +uint16_t TM_GPIO_GetFreePins(GPIO_TypeDef* GPIOx); + +/** + * @} + */ +/** + * @} + */ +/** + * @} + */ + +/* C++ detection */ +#ifdef __cplusplus +} +#endif + +#endif diff --git a/libcodec2-android/src/codec2/stm32/inc/tm_stm32f4_mco_output.h b/libcodec2-android/src/codec2/stm32/inc/tm_stm32f4_mco_output.h new file mode 100644 index 0000000..820e564 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/inc/tm_stm32f4_mco_output.h @@ -0,0 +1,188 @@ +/** + * @author Tilen Majerle + * @email tilen@majerle.eu + * @website http://stm32f4-discovery.com + * @link http://stm32f4-discovery.com/2014/10/library-40-output-clocks-stm32f4/ + * @version v1.1 + * @ide Keil uVision + * @license GNU GPL v3 + * @brief MCO Output for STM32F4xx + * +@verbatim + ---------------------------------------------------------------------- + Copyright (C) Tilen Majerle, 2015 + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + ---------------------------------------------------------------------- +@endverbatim + */ +#ifndef TM_MCOOUTPUT_H +#define TM_MCOOUTPUT_H 110 + +/** + * @addtogroup TM_STM32F4xx_Libraries + * @{ + */ + +/** + * @defgroup TM_MCO + * @brief MCO Output clock for STM32F4xx - http://stm32f4-discovery.com/2014/10/library-40-output-clocks-stm32f4/ + * @{ + * + * This library allows you to output different frequencies. They are split into 2 different output sections. + * + * \par MCO1 output = PA8 + * + * MCO1 output + * - Pin PA8 + * - HSI: High Speed Internal clock, 16MHz RC oscillator + * - HSE: High Speed External clock, external crystal or user clock + * - LSE: External 32738Hz low-speed oscillator or ceramic resonator + * - PLLCLK: Output from PLL + * + * \par MCO2 output = PC9 + * + * MCO2 output + * - Pin PC9 + * - SYSCLK: Output system core clock + * - PLLI2SCLK: Accurate clock for high-quality audio performance in I2S and SAI interfaces + * - HSE: High Speed External clock, external crystal or user clock + * - PLLCLK: Output from PLL + * + * \par Changelog + * +@verbatim + Version 1.1 + - March 11, 2015 + - Support for my new GPIO library + + Version 1.0 + - First release +@endverbatim + * + * \par Dependencies + * +@verbatim + - STM32F4xx + - STM32F4xx RCC + - defines.h + - TM GPIO +@endverbatim + */ + +#include "stm32f4xx.h" +#include "stm32f4xx_rcc.h" +#include "defines.h" +#include "tm_stm32f4_gpio.h" + +/* C++ detection */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @defgroup TM_MCO_Typedefs + * @brief Library Typedefs + * @{ + */ + +/** + * @brief Prescaler values for output clock + */ +typedef enum { + TM_MCOOUTPUT_Prescaler_1, /*!< Output original value of clock on MCO pin */ + TM_MCOOUTPUT_Prescaler_2, /*!< Output clock is original / 2 */ + TM_MCOOUTPUT_Prescaler_3, /*!< Output clock is original / 3 */ + TM_MCOOUTPUT_Prescaler_4, /*!< Output clock is original / 4 */ + TM_MCOOUTPUT_Prescaler_5 /*!< Output clock is original / 5 */ +} TM_MCOOUTPUT_Prescaler_t; + +/** + * @brief Possible output clocks on MCO1 pin + */ +typedef enum { + TM_MCOOUTPUT1_Source_HSI, /*!< High Speed Internal clock, 16MHz RC oscillator */ + TM_MCOOUTPUT1_Source_HSE, /*!< High Speed External clock, external crystal or user clock */ + TM_MCOOUTPUT1_Source_LSE, /*!< External 32738Hz low-speed oscillator or ceramic resonator */ + TM_MCOOUTPUT1_Source_PLLCLK /*!< Output from PLL */ +} TM_MCOOUTPUT1_Source_t; + +/** + * @brief Possible output clocks on MCO2 pin + */ +typedef enum { + TM_MCOOUTPUT2_Source_SYSCLK, /*!< System core clock */ + TM_MCOOUTPUT2_Source_PLLI2SCLK, /*!< Accurate clock for high-quality audio performance in I2S and SAI interfaces */ + TM_MCOOUTPUT2_Source_HSE, /*!< High Speed External clock, external crystal or user clock */ + TM_MCOOUTPUT2_Source_PLLCLK /*!< Output from PLL */ +} TM_MCOOUTPUT2_Source_t; + +/** + * @} + */ + +/** + * @defgroup TM_MCO_Functions + * @brief Library Functions + * @{ + */ + +/** + * @brief Initializes and prepares MCO1 pin to output clock + * @param None + * @retval None + */ +void TM_MCOOUTPUT_InitMCO1(void); + +/** + * @brief Sets output for MCO1 pin + * @param Source: Clock source to output. This parameter can be a value of @ref TM_MCOOUTPUT1_Source_t enumeration. + * @param Prescaler: Prescaler used for clock. This parameter can be a value of @ref TM_MCOOUTPUT_Prescaler_t enumeration. + * @retval None + */ +void TM_MCOOUTPUT_SetOutput1(TM_MCOOUTPUT1_Source_t Source, TM_MCOOUTPUT_Prescaler_t Prescaler); + +/** + * @brief Initializes and prepares MCO2 pin to output clock + * @param None + * @retval None + */ +void TM_MCOOUTPUT_InitMCO2(void); + +/** + * @brief Sets output for MCO2 pin + * @param Source: Clock source to output. This parameter can be a value of @ref TM_MCOOUTPUT2_Source_t enumeration. + * @param Prescaler: Prescaler used for clock. This parameter can be a value of @ref TM_MCOOUTPUT_Prescaler_t enumeration. + * @retval None + */ +void TM_MCOOUTPUT_SetOutput2(TM_MCOOUTPUT2_Source_t Source, TM_MCOOUTPUT_Prescaler_t Prescaler); + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/* C++ detection */ +#ifdef __cplusplus +} +#endif + +#endif diff --git a/libcodec2-android/src/codec2/stm32/inc/tone.h b/libcodec2-android/src/codec2/stm32/inc/tone.h new file mode 100644 index 0000000..b7441ca --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/inc/tone.h @@ -0,0 +1,84 @@ +#ifndef _TONE_H +#define _TONE_H +/*! + * Fixed-point tone generator. + * + * The code here implements a simple fixed-point tone generator that uses + * integer arithmetic to generate a sinusoid at a fixed sample rate of + * 16kHz. + * + * To set the initial state of the state machine, you specify a frequency + * and duration using tone_reset. The corresponding C file embeds a + * sinusoid look-up table. The total number of samples is computed for + * the given time and used to initialise 'remain', 'time' is initialised + * to 0, and 'step' gives the amount to increment 'time' by each iteration. + * + * The samples are retrieved by repeatedly calling tone_next. This + * advances 'time' and decrements 'remain'. The tone is complete when + * 'remain' is zero. + * + * Author Stuart Longland + * Copyright (C) 2015 FreeDV project. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License version 2.1, + * as published by the Free Software Foundation. This program is + * distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, see + * . + */ + +#include + +/*! Tone sampling rate in Hz. */ +#define TONE_FS 16000 + +/*! + * Tone generator state. This holds the current state of the tone + * generator in order to decide what sample to release next. + */ +struct tone_gen_t { + /*! Current sample. (Q12) */ + uint32_t sample; + /*! + * Time remaining in samples. (integer) Playback is finished + * when this reaches zero. + */ + uint16_t remain; + /*! + * Subsample step (Q12). This is the number of samples (or part + * thereof) to advance "sample". Special case: when zero, sample + * is not advanced, silence is generated instead. + */ + uint16_t step; +}; + +/*! + * Re-set the tone generator. + * + * @param tone_gen Tone generator to reset. + * @param freq Frequency in Hz, 0 = silence. + * @param duration Duration in milliseconds. 0 to stop. + */ +void tone_reset( + struct tone_gen_t* const tone_gen, + uint16_t freq, uint16_t duration); + +/*! + * Retrieve the next sample from the tone generator. + * @param tone_gen Tone generator to update. + */ +int16_t tone_next( + struct tone_gen_t* const tone_gen); + +/*! + * Retrieve the current time in milliseconds. + */ +uint32_t tone_msec(const struct tone_gen_t* const tone_gen); + +#endif diff --git a/libcodec2-android/src/codec2/stm32/inc/tot.h b/libcodec2-android/src/codec2/stm32/inc/tot.h new file mode 100644 index 0000000..ad635b0 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/inc/tot.h @@ -0,0 +1,115 @@ +#ifndef _TOT_H +#define _TOT_H +/*! + * Time-out timer. + * + * This is a simple time-out timer for ensuring a maximum transmission + * time is observed. The time-out timer is configured with a total time + * in "ticks", which get counted down in an interrupt. + * + * When the "warning" level is reached, a flag is repeatedly set permit + * triggering of LEDs/sounds to warn the user that time is nearly up. + * + * Upon timeout, a separate flag is set to indicate timeout has taken + * place. + * + * Author Stuart Longland + * Copyright (C) 2015 FreeDV project. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License version 2.1, + * as published by the Free Software Foundation. This program is + * distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, see + * . + */ + +#include + +/*! + * Time-out timer state machine + */ +struct tot_t { + /*! + * Number of ticks remaining, if non-zero, transmission is + * in progress. + */ + uint32_t remaining; + /*! + * Number of ticks remaining, before next warning. + */ + uint32_t warn_remain; + /*! + * Timeout timer tick period. Used to reset the ticks counter. + */ + uint32_t tick_period; + /*! + * Number of ticks between the remaining warnings. + */ + uint16_t remain_warn_ticks; + /*! + * Event tick timer. Used to slow down the source timer. + */ + uint16_t ticks; + /*! + * Event flags. + */ + uint16_t event; +}; + +/*! + * Time-out timer has been started. + */ +#define TOT_EVT_START (1 << 0) + +/*! + * Start of warning period reached. + */ +#define TOT_EVT_WARN (1 << 1) + +/*! + * Next warning is due. + */ +#define TOT_EVT_WARN_NEXT (1 << 2) + +/*! + * Time-out reached. + */ +#define TOT_EVT_TIMEOUT (1 << 3) + +/*! + * Timer sequence complete + */ +#define TOT_EVT_DONE (1 << 4) + +/*! + * Reset the time-out timer. This zeroes the counter and event flags. + */ +void tot_reset(struct tot_t * const tot); + +/*! + * Start the time-out timer ticking. + */ +void tot_start(struct tot_t * const tot, uint32_t tot_ticks, + uint16_t warn_ticks); + +/*! + * Count a time-out timer tick. + */ +static inline void tot_tick(struct tot_t * const tot) +{ + if (tot->ticks) + tot->ticks--; +} + +/*! + * Update the time-out timer state. + */ +void tot_update(struct tot_t * const tot); + +#endif diff --git a/libcodec2-android/src/codec2/stm32/src/adc_rec.c b/libcodec2-android/src/codec2/stm32/src/adc_rec.c new file mode 100644 index 0000000..1fba194 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/src/adc_rec.c @@ -0,0 +1,76 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: adc_rec.c + AUTHOR......: David Rowe + DATE CREATED: 30 May 2014 + + Records a 16 kHz sample rate raw file from one of the ADC channels, + which are connected to pins PA1 (ADC1) and PA2 (ADC2). + + Note the semi-hosting system isn't fast enough to transfer 2 16 kHz + streams at once. + + ~/stlink$ sudo ./st-util -f ~/codec2-dev/stm32/adc_rec.elf + ~/codec2-dev/stm32$ ~/gcc-arm-none-eabi-4_7-2013q1/bin/arm-none-eabi-gdb adc_rec.elf + + (when finished) + $ play -r 16000 -s -2 ~/stlink/adc.raw + + adc1 -> "from radio" + adc2 -> "mic amp" + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2014 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include "stm32f4_adc.h" +#include "gdb_stdio.h" +#include "stm32f4xx_gpio.h" + +#define REC_TIME_SECS 10 +#define N (ADC_BUF_SZ*6) +#define FS 16000 + +extern int adc_overflow1; +extern int adc_overflow2; + +int main(void){ + short buf[N]; + FILE *fadc; + int i, bufs; + + fadc = fopen("adc.raw", "wb"); + if (fadc == NULL) { + printf("Error opening input file: adc.raw\n\nTerminating....\n"); + exit(1); + } + bufs = FS*REC_TIME_SECS/N; + + printf("Starting!\n"); + adc_open(ADC_FS_16KHZ, 4*N, NULL, NULL); + + for(i=0; i PA1 -> "from radio" + ADC2 -> PA2 -> "mic amp" + + I used this to record: + $ sudo dd if=/dev/ttyACM0 of=test.raw count=100 + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2015 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include +#include "stm32f4_adc.h" +#include "stm32f4_usb_vcp.h" +#include "sm1000_leds_switches.h" + +#define N (ADC_BUF_SZ*6) + +/* test tone parameters */ + +#define FREQ 999.0 /* make sure no alignment with frame boundaries */ +#define FS 16000.0 +#define AMP 10000.0 + +extern int adc_overflow1; +extern int adc_overflow2; + +int main(void){ + short buf[N]; + #ifdef TEST_TONE + float phase = 0.0; + float sam; + int i; + #endif + + usb_vcp_init(); + adc_open(ADC_FS_96KHZ, 4*N, NULL, NULL); + sm1000_leds_switches_init(); + + /* set up test buffer, lets us test USB comms indep of ADC, record to a file + then play back/examine waveform to make sure no clicks */ + + while(1) { + while(adc1_read(buf, N) == -1); + + #ifdef TEST_TONE + for(i=0; i. +*/ + +#include +#include +#include "stm32f4_adc.h" +#include "stm32f4_dac.h" +#include "gdb_stdio.h" + +#define REC_TIME_SECS 10 +#define N (ADC_BUF_SZ*4) +#define FS 16000 + +static float calc_sd(short x[], int n) { + float sum, mean, sum_diff, sd; + int i; + + sum = 0.0; + for(i=0; i. +*/ + +#include +#include +#include "gdb_stdio.h" +#include "stm32f4_dac.h" +#include "stm32f4_adc_tuner.h" +#include "iir_tuner.h" +#include "sm1000_leds_switches.h" +#include "../src/codec2_fm.h" +#include "stm32f4xx.h" + +#define BUFS 10 +#define FS 2E6 +#define N 1024 + +extern int adc_overflow1; + +int main(void) { + unsigned short unsigned_buf[N]; + short buf[N]; + int sam; + int i, j, fifo_sz; + FILE *fadc; + + fadc = fopen("adc.raw", "wb"); + if (fadc == NULL) { + printf("Error opening output file: adc.raw\n\nTerminating....\n"); + exit(1); + } + fifo_sz = ADC_TUNER_BUF_SZ; + printf("Starting! bufs: %d %d\n", BUFS, fifo_sz); + + adc_open(fifo_sz); + adc_set_tuner_en(0); /* dump raw samples, no tuner */ + + sm1000_leds_switches_init(); + + for (i=0; iODR |= (1 << 3); + fwrite(buf, sizeof(short), N, fadc); + GPIOE->ODR &= ~(1 << 3); + } + fclose(fadc); + + printf("Finished!\n"); +} diff --git a/libcodec2-android/src/codec2/stm32/src/adcdac_ut.c b/libcodec2-android/src/codec2/stm32/src/adcdac_ut.c new file mode 100644 index 0000000..77f8c4e --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/src/adcdac_ut.c @@ -0,0 +1,70 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: adcdac_ut.c + AUTHOR......: David Rowe + DATE CREATED: May 31 201310 Aug 2014 + + Echoes ADC2 input (mic) to DAC2 output (speaker) on SM1000. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2013 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include "stm32f4_dac.h" +#include "stm32f4_adc.h" +#include "sm1000_leds_switches.h" + +#define SINE_SAMPLES 32 + + +/* 32 sample sine wave which at Fs=16kHz will be 500Hz. Note samples + are 16 bit 2's complement, the DAC driver convertsto 12 bit + unsigned. */ + +short aSine[] = { + -16, 6384, 12528, 18192, 23200, 27232, 30256, 32128, + 32752, 32128, 30256, 27232, 23152, 18192, 12528, 6384, + -16, -6416, -12560, -18224, -23184, -27264, -30288, -32160, + -32768, -32160, -30288, -27264, -23184, -18224, -12560, -6416 +}; + +int main(void) { + short buf[SINE_SAMPLES]; + int i; + + dac_open(ADC_FS_16KHZ,4*DAC_BUF_SZ, 0, 0); + adc_open(ADC_FS_16KHZ, 4*ADC_BUF_SZ, 0, 0); + sm1000_leds_switches_init(); + + while (1) { + + /* keep DAC FIFOs topped up */ + + while(adc2_read(buf, SINE_SAMPLES) == -1); + + if (!switch_select()) { + for(i=0; i. +*/ + +#include +#include +#include +#include + +#include "stm32f4xx_conf.h" +#include "stm32f4xx.h" +#include "gdb_stdio.h" +#include "codec2.h" +#include "dump.h" +#include "sine.h" +#include "machdep.h" + +#ifdef __EMBEDDED__ +#define printf gdb_stdio_printf +#define fopen gdb_stdio_fopen +#define fclose gdb_stdio_fclose +#define fread gdb_stdio_fread +#define fwrite gdb_stdio_fwrite +#endif + +static void c2demo(int mode, char inputfile[], char outputfile[]) +{ + struct CODEC2 *codec2; + short *inbuf, *outbuf; + unsigned char *bits; + int nsam, nbit; + FILE *fin, *fout; + int frame; + PROFILE_VAR(enc_start, dec_start); + + codec2 = codec2_create(mode); + nsam = codec2_samples_per_frame(codec2); + outbuf = (short*)malloc(nsam*sizeof(short)); + inbuf = (short*)malloc(nsam*sizeof(short)); + nbit = codec2_bits_per_frame(codec2); + bits = (unsigned char*)malloc(nbit*sizeof(char)); + + fin = fopen(inputfile, "rb"); + if (fin == NULL) { + printf("Error opening input file: %s\n\nTerminating....\n",inputfile); + exit(1); + } + + fout = fopen(outputfile, "wb"); + if (fout == NULL) { + printf("Error opening output file: %s\n\nTerminating....\n",outputfile); + exit(1); + } + + #ifdef DUMP + dump_on("stm32f4"); + #endif + frame = 0; + + while (fread(inbuf, sizeof(short), nsam, fin) == nsam) { + PROFILE_SAMPLE(enc_start); + codec2_encode(codec2, bits, inbuf); + PROFILE_SAMPLE_AND_LOG(dec_start, enc_start, " enc"); + codec2_decode(codec2, outbuf, bits); + PROFILE_SAMPLE_AND_LOG2(dec_start, " dec"); + PROFILE_SAMPLE_AND_LOG2(enc_start, " enc & dec"); + fwrite((char*)outbuf, sizeof(short), nsam, fout); + printf("frame: %d\n", ++frame); + machdep_profile_print_logged_samples(); + } + + #ifdef DUMP + dump_off("sm32f4"); + #endif + + fclose(fin); + fclose(fout); + free(inbuf); + free(outbuf); + free(bits); + codec2_destroy(codec2); +} + +#define SPEED_TEST_SAMPLES 24000 + +static void c2speedtest(int mode, char inputfile[]) +{ + struct CODEC2 *codec2; + short *inbuf, *outbuf, *pinbuf; + unsigned char *bits; + int nsam, nbit, nframes; + FILE *fin; + int f, nread; + + codec2 = codec2_create(mode); + nsam = codec2_samples_per_frame(codec2); + nframes = SPEED_TEST_SAMPLES/nsam; + outbuf = (short*)malloc(nsam*sizeof(short)); + inbuf = (short*)malloc(SPEED_TEST_SAMPLES*sizeof(short)); + nbit = codec2_bits_per_frame(codec2); + bits = (unsigned char*)malloc(nbit*sizeof(char)); + + fin = fopen(inputfile, "rb"); + if (fin == NULL) { + printf("Error opening input file: %s\nTerminating....\n",inputfile); + exit(1); + } + + nread = fread(inbuf, sizeof(short), SPEED_TEST_SAMPLES, fin); + if (nread != SPEED_TEST_SAMPLES) { + printf("error reading %s, %d samples reqd, %d read\n", + inputfile, SPEED_TEST_SAMPLES, nread); + } + fclose(fin); + + pinbuf = inbuf; + for(f=0; fODR = (1 << 13); + codec2_encode(codec2, bits, pinbuf); + pinbuf += nsam; + GPIOD->ODR &= ~(1 << 13); + codec2_decode(codec2, outbuf, bits); + } + + free(inbuf); + free(outbuf); + free(bits); + codec2_destroy(codec2); +} + +void gpio_init() { + RCC->AHB1ENR |= RCC_AHB1ENR_GPIODEN; // enable the clock to GPIOD + GPIOD->MODER = (1 << 26); // set pin 13 to be general + // purpose output +} + +int main(int argc, char *argv[]) { + gpio_init(); + machdep_profile_init (); + + printf("Starting c2demo\n"); + + /* File I/O test for profiling or (with #define DUMP) + dumping states for optimisation and tiuning */ + + c2demo(CODEC2_MODE_1600, "stm_in.raw", "stm_out.raw"); + + printf("Starting c2 speed test\n"); + + /* Another test of execution speed. Look at PD13 with a + oscilliscope. On time is enc, off is dec */ + + c2speedtest(CODEC2_MODE_1600, "stm_in.raw"); + + printf("Finished\n"); + + return 0; +} diff --git a/libcodec2-android/src/codec2/stm32/src/dac_it.c b/libcodec2-android/src/codec2/stm32/src/dac_it.c new file mode 100644 index 0000000..7f43e2d --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/src/dac_it.c @@ -0,0 +1,205 @@ +/** + ****************************************************************************** + * @file DMA/DMA_FLASHToRAM/stm32f4xx_it.c + * @author MCD Application Team + * @version V1.1.0 + * @date 18-January-2013 + * @brief Main Interrupt Service Routines. + * This file provides template for all exceptions handler and + * peripherals interrupt service routine. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT 2013 STMicroelectronics

+ * + * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.st.com/software_license_agreement_liberty_v2 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ****************************************************************************** + */ +int interrupts; + + +/* Includes ------------------------------------------------------------------*/ +#include "dac_it.h" + +/** @addtogroup STM32F4xx_StdPeriph_Examples + * @{ + */ + +/** @addtogroup DMA_FLASHToRAM + * @{ + */ + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ + +/******************************************************************************/ +/* Cortex-M4 Processor Exceptions Handlers */ +/******************************************************************************/ + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + /* Go to infinite loop when Hard Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Memory Manage exception. + * @param None + * @retval None + */ +void MemManage_Handler(void) +{ + /* Go to infinite loop when Memory Manage exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Bus Fault exception. + * @param None + * @retval None + */ +void BusFault_Handler(void) +{ + /* Go to infinite loop when Bus Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles Usage Fault exception. + * @param None + * @retval None + */ +void UsageFault_Handler(void) +{ + /* Go to infinite loop when Usage Fault exception occurs */ + while (1) + { + } +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles Debug Monitor exception. + * @param None + * @retval None + */ +void DebugMon_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/******************************************************************************/ +/* STM32F4xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f40xx.s/startup_stm32f427x.s). */ +/******************************************************************************/ + +/** + * @brief This function handles DMA Stream interrupt request. + * @param None + * @retval None + */ +void DMA1_Stream6_IRQHandler(void) +{ + + /* Transfer half empty interrupt */ + + if(DMA_GetITStatus(DMA1_Stream6, DMA_IT_HTIF6) != RESET) + { + /* fill first half from fifo */ + + fifo_read(DMA1_Stream6_fifo, dac_buf, DAC_BUF_SZ/2); + + /* Clear DMA Stream Transfer Complete interrupt pending bit */ + + DMA_ClearITPendingBit(DMA1_Stream6, DMA_IT_HTIF6); + + interrupts++; + } + + /* Transfer complete interrupt */ + + if(DMA_GetITStatus(DMA1_Stream6, DMA_IT_TCIF6) != RESET) + { + /* fill second half from fifo */ + + fifo_read(DMA1_Stream6_fifo, &dac_buf[DAC_BUF_SZ/2], DAC_BUF_SZ/2); + + /* Clear DMA Stream Transfer Complete interrupt pending bit */ + + DMA_ClearITPendingBit(DMA1_Stream6, DMA_IT_TCIF6); + + interrupts++; + } +} + +/** + * @} + */ + +/** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/libcodec2-android/src/codec2/stm32/src/dac_play.c b/libcodec2-android/src/codec2/stm32/src/dac_play.c new file mode 100644 index 0000000..b960435 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/src/dac_play.c @@ -0,0 +1,63 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: dac_play.c + AUTHOR......: David Rowe + DATE CREATED: 1 June 2013 + + Plays a 16 kHz sample rate raw file to the STM32F4 DACs. DAC1 is + connected to pin PA4, DAC2 is connected to pin PA5. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2013 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include "stm32f4_dac.h" +#include "gdb_stdio.h" + +#define N (5*DAC_BUF_SZ) + +int main(void) { + short buf[N]; + FILE *fplay; + + dac_open(DAC_FS_16KHZ, 2*N, NULL, NULL); + + while(1) { + fplay = fopen("stm_in.raw", "rb"); + if (fplay == NULL) { + printf("Error opening input file: stm_in.raw\n\nTerminating....\n"); + exit(1); + } + + printf("Starting!\n"); + + while(fread(buf, sizeof(short), N, fplay) == N) { + while(dac1_write(buf, N, 0) == -1); + while(dac2_write(buf, N, 0) == -1); + } + + printf("Finished!\n"); + fclose(fplay); + } + + /* let FIFO empty */ + + while(1); +} + diff --git a/libcodec2-android/src/codec2/stm32/src/dac_ut.c b/libcodec2-android/src/codec2/stm32/src/dac_ut.c new file mode 100644 index 0000000..2edceb0 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/src/dac_ut.c @@ -0,0 +1,57 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: dac_ut.c + AUTHOR......: David Rowe + DATE CREATED: May 31 2013 + + Plays a 500 Hz sine wave sampled at 16 kHz out of PA5 on a Discovery board, + or the speaker output of the SM1000. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2013 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include "stm32f4_dac.h" + +#define SINE_SAMPLES 32 + +/* 32 sample sine wave which at Fs=16kHz will be 500Hz. Note samples + are 16 bit 2's complement, the DAC driver convertsto 12 bit + unsigned. */ + +short aSine[] = { + -16, 6384, 12528, 18192, 23200, 27232, 30256, 32128, + 32752, 32128, 30256, 27232, 23152, 18192, 12528, 6384, + -16, -6416, -12560, -18224, -23184, -27264, -30288, -32160, + -32768, -32160, -30288, -27264, -23184, -18224, -12560, -6416 +}; + +int main(void) { + + dac_open(DAC_FS_16KHZ, 4*DAC_BUF_SZ, 0, 0); + + while (1) { + + /* keep DAC FIFOs topped up */ + + dac1_write((short*)aSine, SINE_SAMPLES, 0); + dac2_write((short*)aSine, SINE_SAMPLES, 0); + } + +} diff --git a/libcodec2-android/src/codec2/stm32/src/dac_ut_fast.c b/libcodec2-android/src/codec2/stm32/src/dac_ut_fast.c new file mode 100644 index 0000000..9c75059 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/src/dac_ut_fast.c @@ -0,0 +1,37 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: dac_ut_fast.c + AUTHOR......: David Rowe + DATE CREATED: Sep 2015 + + Plays a Fs/4 sine wave sampled out of PA5 on a Discovery board, used for + testing high speed DAC operation, e.g. for IF/RF generation. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2015 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include "stm32f4_dac.h" + + +int main(void) { + dac_open(4*DAC_BUF_SZ); + while (1); +} + diff --git a/libcodec2-android/src/codec2/stm32/src/debugblinky.c b/libcodec2-android/src/codec2/stm32/src/debugblinky.c new file mode 100644 index 0000000..992c8b0 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/src/debugblinky.c @@ -0,0 +1,57 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: debugblinky.c + AUTHOR......: David Rowe + DATE CREATED: 12 August 2014 + + Configures GPIO pins used for debug blinkies + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2014 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include "stm32f4xx.h" + +void init_debug_blinky(void) { + GPIO_InitTypeDef GPIO_InitStruct; + + /* PE0-3 used to indicate activity, PE4-5 for SM2000 +12V rail switching */ + + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE); + + GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5; + GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT; + GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; + GPIO_InitStruct.GPIO_OType = GPIO_OType_PP; + GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL; + GPIO_Init(GPIOE, &GPIO_InitStruct); +} + +/* SM2000: 0 for +12V RX power, 1 for +12V TX power */ + +void txrx_12V(int state) { + if (state) { + GPIOE->ODR &= ~(1 << 5); /* +12VRXENB off */ + GPIOE->ODR |= (1 << 4); /* +12VTXENB on */ + } + else { + GPIOE->ODR &= ~(1 << 4); /* +12VTXENB off */ + GPIOE->ODR |= (1 << 5); /* +12VRXENB on */ + } +} + diff --git a/libcodec2-android/src/codec2/stm32/src/fast_dac_ut.c b/libcodec2-android/src/codec2/stm32/src/fast_dac_ut.c new file mode 100644 index 0000000..cce4edb --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/src/fast_dac_ut.c @@ -0,0 +1,116 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: dac_ut.c + AUTHOR......: David Rowe + DATE CREATED: May 31 2013 + + Plays a 500 Hz sine wave sampled at 16 kHz out of PA5 on a Discovery board, + or the speaker output of the SM1000. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2013 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include +#include "stm32f4_dacduc.h" +#include "iir_duc.h" +#include "stm32f4xx.h" +#include +#include +#include "gdb_stdio.h" +#include "comp.h" +#include +//#include "gmsk_test_dat_m4.h" +#define SINE_SAMPLES 32 + + +/* 32 sample sine wave which at Fs=16kHz will be 500Hz. Note samples + are 16 bit 2's complement, the DAC driver convertsto 12 bit + unsigned. */ + +short aWave[] = {4095,0,4095,0,4095,0,4095,0,4095,0,4095,0,4095,0,4095,0,4095,0,4095,0,4095,0,4095,0,4095,0,4095,0,4095,0,4095,0, + 4095,0,4095,0,4095,0,4095,0,4095,0,4095,0,4095,0,4095,0,4095,0,4095,0,4095,0,4095,0,4095,0,4095,0,4095,0,4095,0,}; + +short aSine[] = {1600, 3200, 1601, 0, 1600, 3200, 1601, 0, 1600, 3200, 1601, 0, 1600, 3200, 1601, 0, 1600, 3200, 1601, 0, 1600, 3200, 1601, 0, 1600, 3200, 1600, 0, 1600, 3200, 1601, 0 +}; + +//Sine at Fs/4 +float f4sine[] = {1,0,-1,0,1,0,-1,0,1,0,-1,0,1,0,-1,0,1,0,-1,0,1,0,-1,0,1,0,-1,0,1,0,-1,0,1,0,-1,0,1,0,-1,0,1,0,-1,0,1,0,-1,0, +1,0,-1,0,1,0,-1,0,1,0,-1,0,1,0,-1,0,1,0,-1,0,1,0,-1,0,1,0,-1,0,1,0,-1,0,1,0,-1,0,1,0,-1,0,1,0,-1,0,1,0,-1,0, +1,0,-1,0,1,0,-1,0,1,0,-1,0,1,0,-1,0,1,0,-1,0,1,0,-1,0,1,0,-1,0,1,0,-1,0,1,0,-1,0,1,0,-1,0,1,0,-1,0,1,0,-1,0, +1,0,-1,0,1,0,-1,0,1,0,-1,0,1,0,-1,0,1,0,-1,0,1,0,-1,0,1,0,-1,0,1,0,-1,0,}; + +//Intermediate 80k real before tx +int tx_imm[DUC_N]; + +//Complex input to chain +#define COMP_IN_SZ (DUC_48N) +COMP comp_in[COMP_IN_SZ]; + +unsigned short outbuf[DAC_DUC_BUF_SZ]; + +void setup_timer() +{ + RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); + + TIM_TimeBaseInitTypeDef timerInitStructure; + timerInitStructure.TIM_Prescaler = 84; + timerInitStructure.TIM_CounterMode = TIM_CounterMode_Up; + timerInitStructure.TIM_Period = 0x8FFFFFFF; + timerInitStructure.TIM_ClockDivision = 0; + timerInitStructure.TIM_RepetitionCounter = 0; + TIM_TimeBaseInit(TIM2, &timerInitStructure); + TIM_Cmd(TIM2, ENABLE); +} + +int main(void) { + int tstart,tup,tend,cyc,i; + + memset((void*)outbuf,0,sizeof(short)*DAC_DUC_BUF_SZ); + setup_timer(); + fast_dac_open(2*DAC_DUC_BUF_SZ,2*DAC_BUF_SZ); + tstart=tend=tup=cyc=0; + //Initalize complex input with signal at zero + for(i=0;iGMSK_TEST_LEN) + // cyc=0; + if(cyc%10000==0){ + printf("48c80r takes %d uSecs\n",tup-tstart); + printf("iir upconvert takes %d uSecs\n",tend-tup); + } + tstart = TIM_GetCounter(TIM2); + + upconv_48c_80r(comp_in,tx_imm,1); + + tup = TIM_GetCounter(TIM2); + + iir_upconv_fixp(tx_imm,outbuf); + + tend = TIM_GetCounter(TIM2); + + //Sit and spin until we can get more samples into the dac + while(dac1_write((short*)outbuf,DAC_DUC_BUF_SZ)<0); + } + +} diff --git a/libcodec2-android/src/codec2/stm32/src/fdmdv_dump_rt.c b/libcodec2-android/src/codec2/stm32/src/fdmdv_dump_rt.c new file mode 100644 index 0000000..52ca977 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/src/fdmdv_dump_rt.c @@ -0,0 +1,154 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: fdmdv_dump_rt.c + AUTHOR......: David Rowe + DATE CREATED: 9 Sep 2014 + + Runs the fdmdv demod in real time for a few seconds then dumps some + modem info to a text file for plotting in Octave. Way to verify the + "from radio" SM1000 hardware, ADC, and demod on the SM1000. + + Requires FreeDV signal to be sent to CN6 of SM1000. + + Octave: + + load scatter.txt + l=length(scatter) + plot(scatter(:,1:2:l),scatter(:,2:2:l),'+') + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2014 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include +#include +#include +#include + +#include +#include "stm32f4_adc.h" +#include "stm32f4_dac.h" +#include "freedv_api.h" +#include "codec2_fdmdv.h" +#include "sm1000_leds_switches.h" +#include "gdb_stdio.h" + +#ifdef __EMBEDDED__ +#define printf gdb_stdio_printf +#define fprintf gdb_stdio_fprintf +#define fopen gdb_stdio_fopen +#define fclose gdb_stdio_fclose +#define fread gdb_stdio_fread +#define fwrite gdb_stdio_fwrite +#endif + +#define FREEDV_NSAMPLES_16K (2*FREEDV_NSAMPLES) +#define START_LOG_FRAMES 100 +#define LOG_FRAMES 10 +#define STOP_LOG_FRAMES (START_LOG_FRAMES+LOG_FRAMES) +#define NC 16 + +int main(void) { + struct freedv *f; + short adc16k[FDMDV_OS_TAPS_16K+FREEDV_NSAMPLES_16K]; + short dac16k[FREEDV_NSAMPLES_16K]; + short adc8k[FREEDV_NSAMPLES]; + short dac8k[FDMDV_OS_TAPS_8K+FREEDV_NSAMPLES]; + + int nin, nout, i, j, frames, lines; + + COMP *symb, *psymb; + + /* init all the drivers for various peripherals */ + + sm1000_leds_switches_init(); + dac_open(4*DAC_BUF_SZ); + adc_open(4*ADC_BUF_SZ); + f = freedv_open(FREEDV_MODE_1600); + + /* clear filter memories */ + + for(i=0; itotal_bit_errors = 0; + + if (adc1_read(&adc16k[FDMDV_OS_TAPS_16K], 2*nin) == 0) { + GPIOE->ODR = (1 << 3); + fdmdv_16_to_8_short(adc8k, &adc16k[FDMDV_OS_TAPS_16K], nin); + nout = freedv_rx(f, &dac8k[FDMDV_OS_TAPS_8K], adc8k); + fdmdv_8_to_16_short(dac16k, &dac8k[FDMDV_OS_TAPS_8K], nout); + dac2_write(dac16k, 2*nout); + led_ptt(0); led_rt(f->fdmdv_stats.sync); led_err(f->total_bit_errors); + GPIOE->ODR &= ~(1 << 3); + +#define TMP1 +#ifdef TMP1 + if (f->fdmdv_stats.sync) + frames++; + if ((frames >= START_LOG_FRAMES) && (lines < LOG_FRAMES)) { + for(i=0; i<=f->fdmdv_stats.Nc; i++) + psymb[i] = f->fdmdv_stats.rx_symbols[i]; + psymb += (f->fdmdv_stats.Nc+1); + lines++; + } + + if (frames >= STOP_LOG_FRAMES) { + FILE *ft = fopen("scatter.txt", "wt"); + assert(ft != NULL); + printf("Writing scatter file....\n"); + for(j=0; jfdmdv_stats.Nc; i++) { + fprintf(ft, "%f\t%f\t", + (double)symb[j*(f->fdmdv_stats.Nc+1)+i].real, + (double)symb[j*(f->fdmdv_stats.Nc+1)+i].imag); + printf("line: %d\n", j); + } + fprintf(ft, "\n"); + } + fclose(ft); + printf("SNR = %3.2f dB\nfinished!\n", (double)f->fdmdv_stats.snr_est); + while(1); + } +#endif + } + + } /* while(1) ... */ +} + diff --git a/libcodec2-android/src/codec2/stm32/src/fdmdv_profile.c b/libcodec2-android/src/codec2/stm32/src/fdmdv_profile.c new file mode 100644 index 0000000..a663e60 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/src/fdmdv_profile.c @@ -0,0 +1,149 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: fdmdv_profile.c + AUTHOR......: David Rowe + DATE CREATED: 18 July 2014 + + Profiling FDMDV modem operation on the STM32F4. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2014 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include +#include +#include +#include + +#include "stm32f4xx_conf.h" +#include "stm32f4xx.h" +#include "gdb_stdio.h" +#include "codec2_fdmdv.h" +#include "dump.h" +#include "sine.h" +#include "machdep.h" + +#ifdef __EMBEDDED__ +#define printf gdb_stdio_printf +#define fopen gdb_stdio_fopen +#define fclose gdb_stdio_fclose +#define fread gdb_stdio_fread +#define fwrite gdb_stdio_fwrite +#endif + +#define TEST_FRAMES 25 +#define CHANNEL_BUF_SIZE (10*FDMDV_NOM_SAMPLES_PER_FRAME) + +static int channel_count = 0; +static COMP channel[CHANNEL_BUF_SIZE]; + +static void channel_in(COMP tx_fdm[], int nout) { + int i; + + /* add M_PITCH tx samples to end of buffer */ + + assert((channel_count + nout) < CHANNEL_BUF_SIZE); + for(i=0; i Refer + * \link arm_fft_bin_example_f32.c \endlink + * + */ + + +/** \example arm_fft_bin_example_f32.c + */ + + +#include "arm_math.h" +#include "gdb_stdio.h" +#include "machdep.h" +#include "kiss_fft.h" + +#define TEST_LENGTH_SAMPLES 1024 + +/* ------------------------------------------------------------------- +* External Input and Output buffer Declarations for FFT Bin Example +* ------------------------------------------------------------------- */ +extern float32_t testInput_f32_10khz[2048]; +static float32_t testOutput[TEST_LENGTH_SAMPLES/2]; +static float32_t kiss_complex_out[TEST_LENGTH_SAMPLES]; + +/* ------------------------------------------------------------------ +* Global variables for FFT Bin Example +* ------------------------------------------------------------------- */ +uint32_t fftSize = TEST_LENGTH_SAMPLES/2; +uint32_t ifftFlag = 0; +uint32_t doBitReverse = 1; + +/* Reference index at which max energy of bin ocuurs */ +uint32_t refIndex = 213, testIndex = 0; + +/* ---------------------------------------------------------------------- +* Max magnitude FFT Bin test +* ------------------------------------------------------------------- */ + +void SystemInit(void); + +int main(void) +{ + + arm_status status; + arm_cfft_radix2_instance_f32 S; + float32_t maxValue; + unsigned int fft_start, kiss_fft_start; + kiss_fft_cfg fft_fwd_cfg; + + SystemInit(); + machdep_profile_init(); + fft_fwd_cfg = kiss_fft_alloc(fftSize, 0, NULL, NULL); + kiss_fft_start = machdep_profile_sample(); + kiss_fft(fft_fwd_cfg, (kiss_fft_cpx *)testInput_f32_10khz, + (kiss_fft_cpx *)kiss_complex_out); + machdep_profile_sample_and_log(kiss_fft_start, " kiss_fft"); + + status = ARM_MATH_SUCCESS; + + /* Initialize the CFFT/CIFFT module */ + status = arm_cfft_radix2_init_f32(&S, fftSize, ifftFlag, doBitReverse); + + /* Process the data through the CFFT/CIFFT module */ + fft_start = machdep_profile_sample(); + arm_cfft_radix2_f32(&S, testInput_f32_10khz); + machdep_profile_sample_and_log(fft_start, " fft"); + machdep_profile_print_logged_samples(); + + /* Process the data through the Complex Magnitude Module for + calculating the magnitude at each bin */ + arm_cmplx_mag_f32(testInput_f32_10khz, testOutput,fftSize); + + /* Calculates maxValue and returns corresponding BIN value */ + arm_max_f32(testOutput, fftSize, &maxValue, &testIndex); + + if(testIndex != refIndex) + { + status = ARM_MATH_TEST_FAILURE; + } + + /* ---------------------------------------------------------------------- + ** Loop here if the signals fail the PASS check. + ** This denotes a test failure + ** ------------------------------------------------------------------- */ + + if( status != ARM_MATH_SUCCESS) + { + while(1); + } + + while(1); /* main function does not return */ + + return 0; +} + + /** \endlink */ + + +/* ---------------------------------------------------------------------- +Test Input signal contains 10KHz signal + Uniformly distributed white noise +** ------------------------------------------------------------------- */ + +float32_t testInput_f32_10khz[2048] = +{ +-0.865129623056441, 0.000000000000000, -2.655020678073846, 0.000000000000000, 0.600664612949661, 0.000000000000000, 0.080378093886515, 0.000000000000000, +-2.899160484012034, 0.000000000000000, 2.563004262857762, 0.000000000000000, 3.078328403304206, 0.000000000000000, 0.105906778385130, 0.000000000000000, +0.048366940168201, 0.000000000000000, -0.145696461188734, 0.000000000000000, -0.023417155362879, 0.000000000000000, 2.127729174988954, 0.000000000000000, +-1.176633086028377, 0.000000000000000, 3.690223557991855, 0.000000000000000, -0.622791766173194, 0.000000000000000, 0.722837373872203, 0.000000000000000, +2.739754205367484, 0.000000000000000, -0.062610410524552, 0.000000000000000, -0.891296810967338, 0.000000000000000, -1.845872258871811, 0.000000000000000, +1.195039415434387, 0.000000000000000, -2.177388969045026, 0.000000000000000, 1.078649103637905, 0.000000000000000, 2.570976050490193, 0.000000000000000, +-1.383551403404574, 0.000000000000000, 2.392141424058873, 0.000000000000000, 2.858002843205065, 0.000000000000000, -3.682433899725536, 0.000000000000000, +-3.488146646451150, 0.000000000000000, 1.323468578888120, 0.000000000000000, -0.099771155430726, 0.000000000000000, 1.561168082500454, 0.000000000000000, +1.025026795103179, 0.000000000000000, 0.928841900171200, 0.000000000000000, 2.930499509864950, 0.000000000000000, 2.013349089766430, 0.000000000000000, +2.381676148486737, 0.000000000000000, -3.081062307950236, 0.000000000000000, -0.389579115537544, 0.000000000000000, 0.181540149166620, 0.000000000000000, +-2.601953341353208, 0.000000000000000, 0.333435137783218, 0.000000000000000, -2.812945856162965, 0.000000000000000, 2.649109640172910, 0.000000000000000, +-1.003963025744654, 0.000000000000000, 1.552460768755035, 0.000000000000000, 0.088641345335247, 0.000000000000000, -2.519951327113426, 0.000000000000000, +-4.341348988610527, 0.000000000000000, 0.557772429359965, 0.000000000000000, -1.671267412948494, 0.000000000000000, 0.733951350960387, 0.000000000000000, +0.409263788034864, 0.000000000000000, 3.566033071952806, 0.000000000000000, 1.882565173848352, 0.000000000000000, -1.106017073793287, 0.000000000000000, +0.154456720778718, 0.000000000000000, -2.513205795512153, 0.000000000000000, 0.310978660939421, 0.000000000000000, 0.579706500111723, 0.000000000000000, +0.000086383683251, 0.000000000000000, -1.311866980897721, 0.000000000000000, 1.840007477574986, 0.000000000000000, -3.253005768451345, 0.000000000000000, +1.462584328739432, 0.000000000000000, 1.610103610851738, 0.000000000000000, 0.761914676858907, 0.000000000000000, 0.974541361089834, 0.000000000000000, +0.686845845885983, 0.000000000000000, 1.849153122025191, 0.000000000000000, 0.787800410401453, 0.000000000000000, -1.187438909666279, 0.000000000000000, +-0.754937911044720, 0.000000000000000, 0.084373858395232, 0.000000000000000, -2.600269011710521, 0.000000000000000, -0.962982842142644, 0.000000000000000, +-0.369328108540868, 0.000000000000000, 0.810791418361879, 0.000000000000000, 3.587016488699641, 0.000000000000000, -0.520776145083723, 0.000000000000000, +0.640249919627884, 0.000000000000000, 1.103122489464969, 0.000000000000000, 2.231779881455556, 0.000000000000000, -1.308035392685241, 0.000000000000000, +0.424070304330106, 0.000000000000000, -0.200383932651189, 0.000000000000000, -2.365526783356541, 0.000000000000000, -0.989114757436628, 0.000000000000000, +2.770807688959777, 0.000000000000000, -0.444172737462307, 0.000000000000000, 0.079760979374078, 0.000000000000000, -0.005199118412183, 0.000000000000000, +-0.664712668309527, 0.000000000000000, -0.624171857561896, 0.000000000000000, 0.537306979007338, 0.000000000000000, -2.575955675497642, 0.000000000000000, +1.562363235756780, 0.000000000000000, 1.814069369848895, 0.000000000000000, -1.293428583392509, 0.000000000000000, -1.026188449495686, 0.000000000000000, +-2.981771815588717, 0.000000000000000, -4.223468103075124, 0.000000000000000, 2.672674782004045, 0.000000000000000, -0.856096801117735, 0.000000000000000, +0.048517345512563, 0.000000000000000, -0.026860721136222, 0.000000000000000, 0.392932277758187, 0.000000000000000, -1.331740855093099, 0.000000000000000, +-1.894292129477081, 0.000000000000000, -1.425006468460681, 0.000000000000000, -2.721772427617057, 0.000000000000000, -1.616831100216806, 0.000000000000000, +3.551177651488947, 0.000000000000000, -0.069685667896087, 0.000000000000000, -3.134634907409102, 0.000000000000000, -0.263627598944639, 0.000000000000000, +-1.650469945991350, 0.000000000000000, -2.203580339374399, 0.000000000000000, -0.872203246123242, 0.000000000000000, 1.230782812607287, 0.000000000000000, +0.257288860093291, 0.000000000000000, 1.989083106173137, 0.000000000000000, -1.985638729453261, 0.000000000000000, -1.416185105842892, 0.000000000000000, +-1.131097688325772, 0.000000000000000, -2.245130805416057, 0.000000000000000, -1.938873996219074, 0.000000000000000, 2.043608361562645, 0.000000000000000, +-0.583727989880841, 0.000000000000000, -1.785266378212929, 0.000000000000000, 1.961457586224753, 0.000000000000000, 1.139400099963223, 0.000000000000000, +-1.979519343363991, 0.000000000000000, 2.003023322818429, 0.000000000000000, 0.229004069076829, 0.000000000000000, 3.452808862193135, 0.000000000000000, +2.882273808365857, 0.000000000000000, -1.549450501844438, 0.000000000000000, -3.283872089931876, 0.000000000000000, -0.327025884099064, 0.000000000000000, +-0.054979977136430, 0.000000000000000, -1.192280531479012, 0.000000000000000, 0.645539328365578, 0.000000000000000, 2.300832863404618, 0.000000000000000, +-1.092951789535240, 0.000000000000000, -1.017368249363773, 0.000000000000000, -0.142673056169787, 0.000000000000000, 0.831073544881250, 0.000000000000000, +-2.314612531587064, 0.000000000000000, -2.221456299106321, 0.000000000000000, 0.460261143885226, 0.000000000000000, 0.050585301888595, 0.000000000000000, +0.364373329183988, 0.000000000000000, -1.685956552069538, 0.000000000000000, 0.050664512351055, 0.000000000000000, -0.193355783902718, 0.000000000000000, +-0.158660446046828, 0.000000000000000, 2.394156453841953, 0.000000000000000, -1.562965718554525, 0.000000000000000, -2.199750600869900, 0.000000000000000, +1.544984022381773, 0.000000000000000, -1.988307216807315, 0.000000000000000, -0.628240722541046, 0.000000000000000, -1.436235771505429, 0.000000000000000, +1.677013691147313, 0.000000000000000, 1.600741781678228, 0.000000000000000, -0.757380959134706, 0.000000000000000, -4.784797439515566, 0.000000000000000, +0.265121462834569, 0.000000000000000, 3.862029485934378, 0.000000000000000, 2.386823577249430, 0.000000000000000, -3.655779745436893, 0.000000000000000, +-0.763541621368016, 0.000000000000000, -1.182140388432962, 0.000000000000000, -1.349106114858063, 0.000000000000000, -2.287533624396759, 0.000000000000000, +-0.028603745188423, 0.000000000000000, -1.353580755934427, 0.000000000000000, 0.461602380352937, 0.000000000000000, -0.059599055078928, 0.000000000000000, +-0.929946734342228, 0.000000000000000, 0.065773089295561, 0.000000000000000, 1.106565863102982, 0.000000000000000, 4.719295086373593, 0.000000000000000, +-2.108377703544395, 0.000000000000000, -2.226393620240159, 0.000000000000000, 1.375668397437521, 0.000000000000000, -0.960772428525443, 0.000000000000000, +-2.156313465390571, 0.000000000000000, 1.126060012375311, 0.000000000000000, 2.756485137030720, 0.000000000000000, 0.739639690862600, 0.000000000000000, +3.914769510295006, 0.000000000000000, 1.685232785586675, 0.000000000000000, 4.079058040970612, 0.000000000000000, -1.174598301660513, 0.000000000000000, +-2.885776587275580, 0.000000000000000, -0.241073635188767, 0.000000000000000, 3.080489872502403, 0.000000000000000, -2.051244183999421, 0.000000000000000, +0.664330486845139, 0.000000000000000, -1.697798999370016, 0.000000000000000, 1.452369423649782, 0.000000000000000, -1.523532831019280, 0.000000000000000, +0.171981186587481, 0.000000000000000, -4.685274721583927, 0.000000000000000, -1.336175835319380, 0.000000000000000, 1.419070770428945, 0.000000000000000, +-0.035791601713475, 0.000000000000000, 2.291937971632081, 0.000000000000000, -1.962559313450293, 0.000000000000000, -4.831595589339301, 0.000000000000000, +-1.857055284000925, 0.000000000000000, 2.606271522635512, 0.000000000000000, -0.576447978738030, 0.000000000000000, 0.082299166967720, 0.000000000000000, +1.888399453494614, 0.000000000000000, -3.564705298046079, 0.000000000000000, -0.939357831083889, 0.000000000000000, -1.903578203697778, 0.000000000000000, +-2.642492215447250, 0.000000000000000, -0.182990405251017, 0.000000000000000, 3.742026478011174, 0.000000000000000, 0.104295803798333, 0.000000000000000, +1.848678195370347, 0.000000000000000, -1.887384346896369, 0.000000000000000, 0.365048973046045, 0.000000000000000, -0.889638010354219, 0.000000000000000, +1.173877118428863, 0.000000000000000, -1.178562827540109, 0.000000000000000, 0.610271645685184, 0.000000000000000, 1.831284815697871, 0.000000000000000, +0.449575390102283, 0.000000000000000, 1.597171905253443, 0.000000000000000, 3.918574971904773, 0.000000000000000, 0.868104027970404, 0.000000000000000, +0.582643134746494, 0.000000000000000, 2.321256382353331, 0.000000000000000, -0.238118642223180, 0.000000000000000, -2.890287868054370, 0.000000000000000, +0.970995414625622, 0.000000000000000, 0.666137930891283, 0.000000000000000, -0.202435718709502, 0.000000000000000, 2.057930200518194, 0.000000000000000, +3.120583443719949, 0.000000000000000, -0.863945271701041, 0.000000000000000, 0.906848893874630, 0.000000000000000, -1.434124930222570, 0.000000000000000, +0.754659384848783, 0.000000000000000, -5.224154442713778, 0.000000000000000, 2.330229744098967, 0.000000000000000, 1.113946320164698, 0.000000000000000, +0.523324920322840, 0.000000000000000, 1.750740911548348, 0.000000000000000, -0.899333972913577, 0.000000000000000, 0.228705845203506, 0.000000000000000, +-1.934782624767648, 0.000000000000000, -3.508386237231303, 0.000000000000000, -2.107108523073510, 0.000000000000000, 0.380587645474815, 0.000000000000000, +-0.476200877183279, 0.000000000000000, -2.172086712642198, 0.000000000000000, 1.795372535780299, 0.000000000000000, -2.100318983391055, 0.000000000000000, +-0.022571122461405, 0.000000000000000, 0.674514020010955, 0.000000000000000, -0.148872569390857, 0.000000000000000, 0.298175890592737, 0.000000000000000, +-1.134244492493590, 0.000000000000000, -3.146848422289455, 0.000000000000000, -1.357950199087602, 0.000000000000000, 0.667362732020878, 0.000000000000000, +-3.119397998316724, 0.000000000000000, -1.189341126297637, 0.000000000000000, -1.532744386856668, 0.000000000000000, -1.672972484202534, 0.000000000000000, +-2.042283373871558, 0.000000000000000, -1.479481547595924, 0.000000000000000, -0.002668662875396, 0.000000000000000, 0.262737760129546, 0.000000000000000, +2.734456080621830, 0.000000000000000, -0.671945925075102, 0.000000000000000, -3.735078262179111, 0.000000000000000, -0.161705013319883, 0.000000000000000, +0.748963512361001, 0.000000000000000, 1.128046374367600, 0.000000000000000, 0.649651335592966, 0.000000000000000, 1.880020215025867, 0.000000000000000, +-1.095632293842306, 0.000000000000000, 1.197764876160487, 0.000000000000000, 0.323646656252985, 0.000000000000000, -1.655502751114502, 0.000000000000000, +3.666399062961496, 0.000000000000000, -0.334060899735197, 0.000000000000000, -2.119056978738397, 0.000000000000000, 3.721375117275012, 0.000000000000000, +0.044874186872307, 0.000000000000000, -2.733053897593234, 0.000000000000000, 1.590700278891042, 0.000000000000000, 3.215711772781902, 0.000000000000000, +-1.792085012843801, 0.000000000000000, -0.405797188885475, 0.000000000000000, -0.628080020080892, 0.000000000000000, -1.831815840843960, 0.000000000000000, +2.973656862522834, 0.000000000000000, -0.212032655138417, 0.000000000000000, 0.372437389437234, 0.000000000000000, -1.614030579023492, 0.000000000000000, +-0.704900996358698, 0.000000000000000, 1.123700273452105, 0.000000000000000, -0.136371848130819, 0.000000000000000, 3.020284357635585, 0.000000000000000, +-0.550211350877649, 0.000000000000000, 5.101256236381711, 0.000000000000000, 3.367051512192333, 0.000000000000000, -4.385131946669234, 0.000000000000000, +-3.967303337694391, 0.000000000000000, -0.965894936640022, 0.000000000000000, 0.328366945264681, 0.000000000000000, 0.199041562924914, 0.000000000000000, +1.067681999025495, 0.000000000000000, -1.939516091697170, 0.000000000000000, -1.092980954328824, 0.000000000000000, 0.273786079368066, 0.000000000000000, +-0.040928322190265, 0.000000000000000, -0.118368078577437, 0.000000000000000, 1.766589628899997, 0.000000000000000, 1.738321311635393, 0.000000000000000, +-2.895012794321649, 0.000000000000000, 1.213521771395142, 0.000000000000000, 0.922971726633985, 0.000000000000000, 1.091516563636489, 0.000000000000000, +3.226378465469620, 0.000000000000000, 1.149169778666974, 0.000000000000000, -1.695986327709386, 0.000000000000000, -0.974803077355813, 0.000000000000000, +-4.898035507513607, 0.000000000000000, 1.622719302889447, 0.000000000000000, 0.583891313586579, 0.000000000000000, -1.677182424094957, 0.000000000000000, +-1.915633132814685, 0.000000000000000, -1.980150370851616, 0.000000000000000, 0.604538269404190, 0.000000000000000, 0.939862406149365, 0.000000000000000, +-1.266939874246416, 0.000000000000000, -1.494771249200063, 0.000000000000000, 0.278042784093988, 0.000000000000000, 0.326627416008916, 0.000000000000000, +-1.914530157643303, 0.000000000000000, 1.908947721862196, 0.000000000000000, 0.531819285694044, 0.000000000000000, 3.056856632319658, 0.000000000000000, +-0.389241827774643, 0.000000000000000, -2.418606606780420, 0.000000000000000, 0.915299238878703, 0.000000000000000, -0.098774174295283, 0.000000000000000, +-0.906199428444304, 0.000000000000000, 0.316716451217743, 0.000000000000000, -4.367700643578311, 0.000000000000000, 1.491687997515293, 0.000000000000000, +-1.962381126288365, 0.000000000000000, -0.700829196527045, 0.000000000000000, 3.028958963615630, 0.000000000000000, -2.313461067462598, 0.000000000000000, +-1.431933239886712, 0.000000000000000, -0.831153039725342, 0.000000000000000, 3.939495598250743, 0.000000000000000, 0.342974753984771, 0.000000000000000, +-2.768330763002974, 0.000000000000000, -2.744010370019008, 0.000000000000000, 3.821352685212561, 0.000000000000000, 4.551065271455856, 0.000000000000000, +3.270136437041298, 0.000000000000000, -3.188028411950982, 0.000000000000000, -0.777075012417436, 0.000000000000000, 0.097110650265216, 0.000000000000000, +1.221216137608812, 0.000000000000000, -1.325824244541822, 0.000000000000000, -2.655296734084113, 0.000000000000000, -1.074792144885704, 0.000000000000000, +2.770401584439407, 0.000000000000000, 5.240270645610543, 0.000000000000000, 0.108576672208892, 0.000000000000000, -1.209394350650142, 0.000000000000000, +1.403344353838785, 0.000000000000000, -0.299032904177277, 0.000000000000000, 4.074959450638227, 0.000000000000000, 1.718727473952107, 0.000000000000000, +-3.061349227080806, 0.000000000000000, -1.158596888541269, 0.000000000000000, 3.381858904662625, 0.000000000000000, 0.957339964054052, 0.000000000000000, +0.179900074904899, 0.000000000000000, -3.909641902506081, 0.000000000000000, 0.805717289408649, 0.000000000000000, 2.047413793928261, 0.000000000000000, +-1.273580225826614, 0.000000000000000, -2.681359186869971, 0.000000000000000, -0.721241345822093, 0.000000000000000, -1.613090681569475, 0.000000000000000, +0.463138804815955, 0.000000000000000, 0.377223507800954, 0.000000000000000, 2.046550684968141, 0.000000000000000, 0.178508732797712, 0.000000000000000, +-0.477815330358845, 0.000000000000000, 3.763355908332053, 0.000000000000000, 1.300430303035163, 0.000000000000000, -0.214625793857725, 0.000000000000000, +1.343267891864081, 0.000000000000000, -0.340007682433245, 0.000000000000000, 2.062703194680005, 0.000000000000000, 0.042032160234235, 0.000000000000000, +0.643732569732250, 0.000000000000000, -1.913502543857589, 0.000000000000000, 3.771340762937158, 0.000000000000000, 1.050024807363386, 0.000000000000000, +-4.440489488592649, 0.000000000000000, 0.444904302066643, 0.000000000000000, 2.898702265650048, 0.000000000000000, 1.953232980548558, 0.000000000000000, +2.761564952735079, 0.000000000000000, 1.963537633260397, 0.000000000000000, -2.168858472916215, 0.000000000000000, -4.116235357699841, 0.000000000000000, +4.183678271896528, 0.000000000000000, 0.600422284944681, 0.000000000000000, -0.659352647255126, 0.000000000000000, -0.993127338218109, 0.000000000000000, +-2.463571314945747, 0.000000000000000, 0.937720951545881, 0.000000000000000, -3.098957308429730, 0.000000000000000, -2.354719140045463, 0.000000000000000, +-0.417285119323949, 0.000000000000000, 2.187974075975947, 0.000000000000000, 1.101468905172585, 0.000000000000000, -3.185800678152109, 0.000000000000000, +2.357534709345083, 0.000000000000000, 0.246645606729407, 0.000000000000000, 4.440905650784504, 0.000000000000000, -2.236807716637866, 0.000000000000000, +-2.171481518317550, 0.000000000000000, -2.029571795072690, 0.000000000000000, 0.135599790431348, 0.000000000000000, -1.277965265520191, 0.000000000000000, +-1.927976233157507, 0.000000000000000, -5.434492783745394, 0.000000000000000, -2.026375829312657, 0.000000000000000, 1.009666016819321, 0.000000000000000, +0.238549782367247, 0.000000000000000, -0.516403923971309, 0.000000000000000, -0.933977817429352, 0.000000000000000, 0.155803015935614, 0.000000000000000, +-0.396194809997929, 0.000000000000000, -0.915178100253214, 0.000000000000000, 0.666329367985015, 0.000000000000000, -1.517991149945785, 0.000000000000000, +0.458266744144822, 0.000000000000000, -1.242845974381418, 0.000000000000000, 0.057914823556477, 0.000000000000000, 0.994101307476875, 0.000000000000000, +-2.387209849199325, 0.000000000000000, 0.459297048883826, 0.000000000000000, 0.227711405683905, 0.000000000000000, 0.030255073506117, 0.000000000000000, +-1.323361608181337, 0.000000000000000, -4.650244457426706, 0.000000000000000, 0.062908579526021, 0.000000000000000, 3.462831028244432, 0.000000000000000, +1.303608183314856, 0.000000000000000, -1.430415193881612, 0.000000000000000, -1.672886118942142, 0.000000000000000, 0.992890699210099, 0.000000000000000, +-0.160814531784247, 0.000000000000000, -1.238132939350430, 0.000000000000000, -0.589223271459376, 0.000000000000000, 2.326363810561534, 0.000000000000000, +-4.433789496230785, 0.000000000000000, 1.664686987538929, 0.000000000000000, -2.366128834617921, 0.000000000000000, 1.212421570743837, 0.000000000000000, +-4.847914267690055, 0.000000000000000, 0.228485221404712, 0.000000000000000, 0.466139765470957, 0.000000000000000, -1.344202776943546, 0.000000000000000, +-1.012053673330574, 0.000000000000000, -2.844980626424742, 0.000000000000000, -1.552703722026340, 0.000000000000000, -1.448830983885038, 0.000000000000000, +0.127010756753980, 0.000000000000000, -1.667188263752299, 0.000000000000000, 3.424818052085100, 0.000000000000000, 0.956291135453840, 0.000000000000000, +-3.725533331754662, 0.000000000000000, -1.584534272368832, 0.000000000000000, -1.654148210472472, 0.000000000000000, 0.701610500675698, 0.000000000000000, +0.164954538683927, 0.000000000000000, -0.739260064712987, 0.000000000000000, -2.167324026090101, 0.000000000000000, -0.310240491909496, 0.000000000000000, +-2.281790349106906, 0.000000000000000, 1.719655331305361, 0.000000000000000, -2.997005923606441, 0.000000000000000, -1.999301431556852, 0.000000000000000, +-0.292229010068828, 0.000000000000000, 1.172317994855851, 0.000000000000000, 0.196734885241533, 0.000000000000000, 2.981365193477068, 0.000000000000000, +2.637726016926352, 0.000000000000000, 1.434045125217982, 0.000000000000000, 0.883627180451827, 0.000000000000000, -1.434040761445747, 0.000000000000000, +-1.528891971086553, 0.000000000000000, -3.306913135367542, 0.000000000000000, -0.399059265470646, 0.000000000000000, -0.265674394285178, 0.000000000000000, +3.502591252855384, 0.000000000000000, 0.830301156604454, 0.000000000000000, -0.220021317046083, 0.000000000000000, -0.090553770476646, 0.000000000000000, +0.771863477047951, 0.000000000000000, 1.351209629105760, 0.000000000000000, 3.773699756201963, 0.000000000000000, 0.472600118752329, 0.000000000000000, +2.332825668012222, 0.000000000000000, 1.853747950314528, 0.000000000000000, 0.759515251766178, 0.000000000000000, 1.327112776215496, 0.000000000000000, +2.518730296237868, 0.000000000000000, 0.764450208786353, 0.000000000000000, -0.278275349491296, 0.000000000000000, -0.041559465082020, 0.000000000000000, +1.387166083167787, 0.000000000000000, 2.612996769598122, 0.000000000000000, -0.385404831721799, 0.000000000000000, 2.005630016170309, 0.000000000000000, +-0.950500047307998, 0.000000000000000, -1.166884021392492, 0.000000000000000, 1.432973552928162, 0.000000000000000, 2.540370505384567, 0.000000000000000, +-1.140505295054501, 0.000000000000000, -3.673358835201185, 0.000000000000000, -0.450691288038056, 0.000000000000000, 1.601024294408014, 0.000000000000000, +0.773213556014045, 0.000000000000000, 2.973873693246168, 0.000000000000000, -1.361548406382279, 0.000000000000000, 1.409136332424815, 0.000000000000000, +-0.963382518314713, 0.000000000000000, -2.031268227368161, 0.000000000000000, 0.983309972085586, 0.000000000000000, -3.461412488471631, 0.000000000000000, +-2.601124929406039, 0.000000000000000, -0.533896239766343, 0.000000000000000, -2.627129008866350, 0.000000000000000, 0.622111169161305, 0.000000000000000, +-1.160926365580422, 0.000000000000000, -2.406196188132628, 0.000000000000000, -1.076870362758737, 0.000000000000000, -1.791866820937175, 0.000000000000000, +-0.749453071522325, 0.000000000000000, -5.324156615990973, 0.000000000000000, -1.038698022238289, 0.000000000000000, -2.106629944730630, 0.000000000000000, +0.659295598564773, 0.000000000000000, 0.520940881580988, 0.000000000000000, -0.055649203928700, 0.000000000000000, 0.292096765423137, 0.000000000000000, +-4.663743901790872, 0.000000000000000, -0.125066503391666, 0.000000000000000, -2.452620252445380, 0.000000000000000, -0.712128227397468, 0.000000000000000, +-0.048938037970968, 0.000000000000000, -1.821520226003361, 0.000000000000000, 0.810106421304257, 0.000000000000000, -0.196636623956257, 0.000000000000000, +-0.701769836763804, 0.000000000000000, 2.460345045649201, 0.000000000000000, 3.506597671641116, 0.000000000000000, -2.711322611972225, 0.000000000000000, +-0.658079876600542, 0.000000000000000, -2.040082099646173, 0.000000000000000, 2.201668355395807, 0.000000000000000, 1.181507395879711, 0.000000000000000, +-1.640739552179682, 0.000000000000000, -1.613393726467190, 0.000000000000000, -1.156741241731352, 0.000000000000000, 2.527773464519963, 0.000000000000000, +-0.497040638009502, 0.000000000000000, -0.975817112895589, 0.000000000000000, -2.866830755546166, 0.000000000000000, 1.120214498507878, 0.000000000000000, +5.986771654661698, 0.000000000000000, 0.398219252656757, 0.000000000000000, -3.545606013198135, 0.000000000000000, 0.312398099396191, 0.000000000000000, +-2.265327979531788, 0.000000000000000, 0.792121001107366, 0.000000000000000, -3.736145137670100, 0.000000000000000, 0.762228883650802, 0.000000000000000, +2.283545661214646, 0.000000000000000, 3.780020629583529, 0.000000000000000, 3.117260228608810, 0.000000000000000, -2.011159255609613, 0.000000000000000, +0.279107700476072, 0.000000000000000, 2.003369134246936, 0.000000000000000, -1.448171234480257, 0.000000000000000, 0.584697150310140, 0.000000000000000, +0.919508663636197, 0.000000000000000, -3.071349141675388, 0.000000000000000, -1.555923649263667, 0.000000000000000, 2.232497079438850, 0.000000000000000, +-0.012662139119883, 0.000000000000000, 0.372825540734715, 0.000000000000000, 2.378543590847629, 0.000000000000000, 1.459053407813062, 0.000000000000000, +-0.967913907390927, 0.000000000000000, 1.322825200678212, 0.000000000000000, -1.033775820061824, 0.000000000000000, -1.813629552693142, 0.000000000000000, +4.794348161661486, 0.000000000000000, 0.655279811518676, 0.000000000000000, -2.224590138589720, 0.000000000000000, 0.595329481295766, 0.000000000000000, +3.364055988866225, 0.000000000000000, 1.863416422998127, 0.000000000000000, 1.930305751828105, 0.000000000000000, -0.284467053432545, 0.000000000000000, +-0.923374905878938, 0.000000000000000, 1.922988234041399, 0.000000000000000, 0.310482143432719, 0.000000000000000, 0.332122302397134, 0.000000000000000, +-1.659487472408966, 0.000000000000000, -1.865943507877961, 0.000000000000000, -0.186775297569864, 0.000000000000000, -1.700543850628361, 0.000000000000000, +0.497157959366735, 0.000000000000000, -0.471244843957418, 0.000000000000000, -0.432013753969948, 0.000000000000000, -4.000189880113231, 0.000000000000000, +-0.415335170016467, 0.000000000000000, 0.317311950972859, 0.000000000000000, 0.038393428927595, 0.000000000000000, 0.177219909465206, 0.000000000000000, +0.531650958095143, 0.000000000000000, -2.711644985175806, 0.000000000000000, 0.328744077805156, 0.000000000000000, -0.938417707547928, 0.000000000000000, +0.970379584897379, 0.000000000000000, 1.873649473917137, 0.000000000000000, 0.177938226987023, 0.000000000000000, 0.155609346302393, 0.000000000000000, +-1.276504241867208, 0.000000000000000, -0.463725075928807, 0.000000000000000, -0.064748250389500, 0.000000000000000, -1.725568534062385, 0.000000000000000, +-0.139066584804067, 0.000000000000000, 1.975514554117767, 0.000000000000000, -0.807063199499478, 0.000000000000000, -0.326926659682788, 0.000000000000000, +1.445727032487938, 0.000000000000000, -0.597151107739100, 0.000000000000000, 2.732557531709386, 0.000000000000000, -2.907130934109188, 0.000000000000000, +-1.461264832679981, 0.000000000000000, -1.708588604968163, 0.000000000000000, 3.652851925431363, 0.000000000000000, 0.682050868282879, 0.000000000000000, +-0.281312579963294, 0.000000000000000, 0.554966483307825, 0.000000000000000, -0.981341739340932, 0.000000000000000, 1.279543331141603, 0.000000000000000, +0.036589747826856, 0.000000000000000, 2.312073745896073, 0.000000000000000, 1.754682200732425, 0.000000000000000, -0.957515875428627, 0.000000000000000, +-0.833596942819695, 0.000000000000000, 0.437054368791033, 0.000000000000000, -0.898819399360279, 0.000000000000000, -0.296050580896839, 0.000000000000000, +-0.785144257649601, 0.000000000000000, -2.541503089003311, 0.000000000000000, 2.225075846758761, 0.000000000000000, -1.587290487902002, 0.000000000000000, +-1.421404172056462, 0.000000000000000, -3.015149802293631, 0.000000000000000, 1.780874288867949, 0.000000000000000, -0.865812740882613, 0.000000000000000, +-2.845327531197112, 0.000000000000000, 1.445225867774367, 0.000000000000000, 2.183733236584647, 0.000000000000000, 1.163371072749080, 0.000000000000000, +0.883547693520409, 0.000000000000000, -1.224093106684675, 0.000000000000000, -1.854501116331044, 0.000000000000000, 1.783082089255796, 0.000000000000000, +2.301508706196191, 0.000000000000000, -0.539901944139077, 0.000000000000000, 1.962315832319967, 0.000000000000000, -0.060709041870503, 0.000000000000000, +-1.353139923300238, 0.000000000000000, -1.482887537805234, 0.000000000000000, 1.273732601967176, 0.000000000000000, -3.456609915556321, 0.000000000000000, +-3.752320586540873, 0.000000000000000, 3.536356614978951, 0.000000000000000, 0.206035952043233, 0.000000000000000, 5.933966913773842, 0.000000000000000, +-0.486633898075490, 0.000000000000000, -0.329595089863342, 0.000000000000000, 1.496414153905337, 0.000000000000000, 0.137868749388880, 0.000000000000000, +-0.437192030996792, 0.000000000000000, 2.682750615210656, 0.000000000000000, -2.440234892848570, 0.000000000000000, 1.433910252426186, 0.000000000000000, +-0.415051506104074, 0.000000000000000, 1.982003013708649, 0.000000000000000, 1.345796609972435, 0.000000000000000, -2.335949513404370, 0.000000000000000, +1.065988867433025, 0.000000000000000, 2.741844905000464, 0.000000000000000, -1.754047930934362, 0.000000000000000, 0.229252730015575, 0.000000000000000, +-0.679791016408669, 0.000000000000000, -2.274097820043743, 0.000000000000000, 0.149802252231876, 0.000000000000000, -0.139697151364830, 0.000000000000000, +-2.773367420505435, 0.000000000000000, -4.403400246165611, 0.000000000000000, -1.468974515184135, 0.000000000000000, 0.664990623095844, 0.000000000000000, +-3.446979775557143, 0.000000000000000, 1.850006428987618, 0.000000000000000, -1.550866747921936, 0.000000000000000, -3.632874882935257, 0.000000000000000, +0.828039662992464, 0.000000000000000, 2.794055182632816, 0.000000000000000, -0.593995716682633, 0.000000000000000, 0.142788156054200, 0.000000000000000, +0.552461945119668, 0.000000000000000, 0.842127129738758, 0.000000000000000, 1.414335509600077, 0.000000000000000, -0.311559241382430, 0.000000000000000, +1.510590844695250, 0.000000000000000, 1.692217183824300, 0.000000000000000, 0.613760285711957, 0.000000000000000, 0.065233463207770, 0.000000000000000, +-2.571912893711505, 0.000000000000000, -1.707001531141341, 0.000000000000000, 0.673884968382041, 0.000000000000000, 0.889863883420103, 0.000000000000000, +-2.395635435233346, 0.000000000000000, 1.129247296359819, 0.000000000000000, 0.569074704779735, 0.000000000000000, 6.139436017480722, 0.000000000000000, +0.822158309259017, 0.000000000000000, -3.289872016222589, 0.000000000000000, 0.417612988384414, 0.000000000000000, 1.493982103868165, 0.000000000000000, +-0.415353391377005, 0.000000000000000, 0.288670764933155, 0.000000000000000, -1.895650228872272, 0.000000000000000, -0.139631694475020, 0.000000000000000, +1.445103299005436, 0.000000000000000, 2.877182243683429, 0.000000000000000, 1.192428490172580, 0.000000000000000, -5.964591921763842, 0.000000000000000, +0.570859795882959, 0.000000000000000, 2.328333316356666, 0.000000000000000, 0.333755014930026, 0.000000000000000, 1.221901577771909, 0.000000000000000, +0.943358697415568, 0.000000000000000, 2.793063983613067, 0.000000000000000, 3.163005066073616, 0.000000000000000, 2.098300664513867, 0.000000000000000, +-3.915313164333447, 0.000000000000000, -2.475766769064539, 0.000000000000000, 1.720472044894277, 0.000000000000000, -1.273591949275665, 0.000000000000000, +-1.213451272938616, 0.000000000000000, 0.697439404325690, 0.000000000000000, -0.309902287574293, 0.000000000000000, 2.622575852162781, 0.000000000000000, +-2.075881936219060, 0.000000000000000, 0.777847545691770, 0.000000000000000, -3.967947986440650, 0.000000000000000, -3.066503371806472, 0.000000000000000, +1.193780625937845, 0.000000000000000, 0.214246579281311, 0.000000000000000, -2.610681491162162, 0.000000000000000, -1.261224183972745, 0.000000000000000, +-1.165071748544285, 0.000000000000000, -1.116548474834374, 0.000000000000000, 0.847202164846982, 0.000000000000000, -3.474301529532390, 0.000000000000000, +0.020799541946476, 0.000000000000000, -3.868995473288166, 0.000000000000000, 1.757979409638067, 0.000000000000000, 0.868115130183109, 0.000000000000000, +0.910167436737958, 0.000000000000000, -1.878855115563720, 0.000000000000000, 1.710357104174161, 0.000000000000000, -1.468933980990902, 0.000000000000000, +1.799544171601169, 0.000000000000000, -4.922332880027887, 0.000000000000000, 0.219424548939720, 0.000000000000000, -0.971671113451924, 0.000000000000000, +-0.940533475616266, 0.000000000000000, 0.122510114412152, 0.000000000000000, -1.373686254916911, 0.000000000000000, 1.760348103896323, 0.000000000000000, +0.391745067829643, 0.000000000000000, 2.521958505327354, 0.000000000000000, -1.300693516405092, 0.000000000000000, -0.538251788309178, 0.000000000000000, +0.797184135810173, 0.000000000000000, 2.908800548982588, 0.000000000000000, 1.590902251655215, 0.000000000000000, -1.070323714487264, 0.000000000000000, +-3.349764443340999, 0.000000000000000, -1.190563529731447, 0.000000000000000, 1.363369471291963, 0.000000000000000, -1.814270299924576, 0.000000000000000, +-0.023381588315711, 0.000000000000000, 1.719182048679569, 0.000000000000000, 0.839917213252626, 0.000000000000000, 1.006099633839122, 0.000000000000000, +0.812462674381527, 0.000000000000000, 1.755814336346739, 0.000000000000000, 2.546848681206319, 0.000000000000000, -1.555300208869455, 0.000000000000000, +1.017053811631167, 0.000000000000000, 0.996591039170903, 0.000000000000000, -1.228047247924881, 0.000000000000000, 4.809462271463009, 0.000000000000000, +2.318113116151685, 0.000000000000000, -1.206932520679733, 0.000000000000000, 1.273757685623312, 0.000000000000000, 0.724335352481802, 0.000000000000000, +1.519876652073198, 0.000000000000000, -2.749670314714158, 0.000000000000000, 3.424042481847581, 0.000000000000000, -3.714668360421517, 0.000000000000000, +1.612834197004014, 0.000000000000000, -2.038234723985566, 0.000000000000000, 1.470938786562152, 0.000000000000000, 2.111634918450302, 0.000000000000000, +1.030376670151787, 0.000000000000000, -0.420877189003829, 0.000000000000000, -1.502024800532894, 0.000000000000000, 0.452310749163804, 0.000000000000000, +-1.606059382300987, 0.000000000000000, -4.006159967834147, 0.000000000000000, -2.152801208196508, 0.000000000000000, 1.671674089372579, 0.000000000000000, +1.714536333564101, 0.000000000000000, -1.011518543005344, 0.000000000000000, -0.576410282180584, 0.000000000000000, 0.733689809480836, 0.000000000000000, +1.004245602717974, 0.000000000000000, 1.010090391888449, 0.000000000000000, 3.811459513385621, 0.000000000000000, -5.230621089271954, 0.000000000000000, +0.678044861034399, 0.000000000000000, 1.255935859598107, 0.000000000000000, 1.674521701615288, 0.000000000000000, -1.656695216761705, 0.000000000000000, +1.169286028869693, 0.000000000000000, 0.524915416191998, 0.000000000000000, 2.397642885039520, 0.000000000000000, 2.108711400616072, 0.000000000000000, +2.037618211018084, 0.000000000000000, -0.623664553406925, 0.000000000000000, 2.984106170984409, 0.000000000000000, 1.132182737400932, 0.000000000000000, +-2.859274340352130, 0.000000000000000, -0.975550071398723, 0.000000000000000, -1.359935119997407, 0.000000000000000, -2.963308211050121, 0.000000000000000, +-0.228726662781163, 0.000000000000000, -1.411110379682043, 0.000000000000000, 0.741553355734225, 0.000000000000000, 0.497554254758309, 0.000000000000000, +2.371907950598855, 0.000000000000000, 1.063465168988748, 0.000000000000000, -0.641082692081488, 0.000000000000000, -0.855439878540726, 0.000000000000000, +0.578321738578726, 0.000000000000000, 3.005809768796194, 0.000000000000000, 1.961458699064065, 0.000000000000000, -3.206261663772745, 0.000000000000000, +-0.364431989095434, 0.000000000000000, -0.263182496622273, 0.000000000000000, 1.843464680631139, 0.000000000000000, -0.419107530229249, 0.000000000000000, +1.662335873298487, 0.000000000000000, -0.853687563304005, 0.000000000000000, -2.584133404357169, 0.000000000000000, 3.466839568922895, 0.000000000000000, +0.881671345091973, 0.000000000000000, 0.454620014206908, 0.000000000000000, -1.737245187402739, 0.000000000000000, 2.162713238369243, 0.000000000000000, +-3.868539002714486, 0.000000000000000, 2.014114855933826, 0.000000000000000, -0.703233831811006, 0.000000000000000, -3.410319935997574, 0.000000000000000, +-1.851235811006584, 0.000000000000000, 0.909783907894036, 0.000000000000000, 0.091884002136728, 0.000000000000000, -2.688294201131650, 0.000000000000000, +-0.906134178460955, 0.000000000000000, 3.475054609035133, 0.000000000000000, -0.573927964170323, 0.000000000000000, -0.429542937515399, 0.000000000000000, +0.991348618739939, 0.000000000000000, 1.974804904926325, 0.000000000000000, 0.975783450796698, 0.000000000000000, -3.057119549071503, 0.000000000000000, +-3.899429237481194, 0.000000000000000, 0.362439009175350, 0.000000000000000, -1.124461670265618, 0.000000000000000, 1.806000360163583, 0.000000000000000, +-2.768333362600288, 0.000000000000000, 0.244387897900379, 0.000000000000000, 0.908767296720926, 0.000000000000000, 1.254669374391882, 0.000000000000000, +-1.420441929463686, 0.000000000000000, -0.875658895966293, 0.000000000000000, 0.183824603376167, 0.000000000000000, -3.361653917011686, 0.000000000000000, +-0.796615630227952, 0.000000000000000, -1.660226542658673, 0.000000000000000, 1.654439358307226, 0.000000000000000, 2.782812946709771, 0.000000000000000, +1.418064412811531, 0.000000000000000, -0.819645647243761, 0.000000000000000, 0.807724772592699, 0.000000000000000, -0.941967976379298, 0.000000000000000, +-2.312768306047469, 0.000000000000000, 0.872426936477443, 0.000000000000000, 0.919528961530845, 0.000000000000000, -2.084904575264847, 0.000000000000000, +-1.972464868459322, 0.000000000000000, -1.050687203338466, 0.000000000000000, 1.659579707007902, 0.000000000000000, -1.820640014705855, 0.000000000000000, +-1.195078061671045, 0.000000000000000, -1.639773173762048, 0.000000000000000, 1.616744338157063, 0.000000000000000, 4.019216096811563, 0.000000000000000, +3.461021102549681, 0.000000000000000, 1.642352734361484, 0.000000000000000, -0.046354693720813, 0.000000000000000, -0.041936252359677, 0.000000000000000, +-2.393307519480551, 0.000000000000000, -0.341471634615121, 0.000000000000000, -0.392073595257017, 0.000000000000000, -0.219299018372730, 0.000000000000000, +-2.016391579662071, 0.000000000000000, -0.653096251969787, 0.000000000000000, 1.466353155666821, 0.000000000000000, -2.872058864320412, 0.000000000000000, +-2.157180779503830, 0.000000000000000, 0.723257479841560, 0.000000000000000, 3.769951308104384, 0.000000000000000, -1.923392042420024, 0.000000000000000, +0.644899359942840, 0.000000000000000, -2.090226891621437, 0.000000000000000, -0.277043982890403, 0.000000000000000, -0.528271428321112, 0.000000000000000, +2.518120645960652, 0.000000000000000, 1.040820431111488, 0.000000000000000, -4.560583754742486, 0.000000000000000, -0.226899614918836, 0.000000000000000, +1.713331231108959, 0.000000000000000, -3.293941019163642, 0.000000000000000, -1.113331444648290, 0.000000000000000, -1.032308423149906, 0.000000000000000, +1.593774272982443, 0.000000000000000, -1.246840475090529, 0.000000000000000, -0.190344684920137, 0.000000000000000, -1.719386356896355, 0.000000000000000, +-2.827721754659679, 0.000000000000000, -0.092438285279020, 0.000000000000000, -0.565844430675246, 0.000000000000000, -1.077916121691716, 0.000000000000000, +-1.208665809504693, 0.000000000000000, -2.996014266381254, 0.000000000000000, 2.888573323402423, 0.000000000000000, 2.829507048720695, 0.000000000000000, +-0.859177034120755, 0.000000000000000, -1.969302377743254, 0.000000000000000, 0.777437674525362, 0.000000000000000, -0.124910190157646, 0.000000000000000, +0.129875493115290, 0.000000000000000, -4.192139262163992, 0.000000000000000, 3.023496047962126, 0.000000000000000, 1.149775163736637, 0.000000000000000, +2.038151304801731, 0.000000000000000, 3.016122489841263, 0.000000000000000, -4.829481812137012, 0.000000000000000, -1.668436615909279, 0.000000000000000, +0.958586784636918, 0.000000000000000, 1.550652410058678, 0.000000000000000, -1.456305257976716, 0.000000000000000, -0.079588392344731, 0.000000000000000, +-2.453213599392345, 0.000000000000000, 0.296795909127105, 0.000000000000000, -0.253426616607643, 0.000000000000000, 1.418937160028195, 0.000000000000000, +-1.672949529066915, 0.000000000000000, -1.620990298572947, 0.000000000000000, -1.085103073196045, 0.000000000000000, 0.738606361195386, 0.000000000000000, +-2.097831202853255, 0.000000000000000, 2.711952282071310, 0.000000000000000, 1.498539238246888, 0.000000000000000, 1.317457282535915, 0.000000000000000, +-0.302765938349717, 0.000000000000000, -0.044623707947201, 0.000000000000000, 2.337405215062395, 0.000000000000000, -3.980689173859100, 0.000000000000000, + + +}; + diff --git a/libcodec2-android/src/codec2/stm32/src/freedv_rx_profile.c b/libcodec2-android/src/codec2/stm32/src/freedv_rx_profile.c new file mode 100644 index 0000000..52ad6d2 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/src/freedv_rx_profile.c @@ -0,0 +1,136 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: freedv_rx_profile.c + AUTHOR......: David Rowe + DATE CREATED: 13 August 2014 + + Profiling freedv_rx() operation on the STM32F4. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2014 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#define PROFILE + +#include +#include +#include +#include +#include + +#include "stm32f4xx_conf.h" +#include "stm32f4xx.h" +#include "gdb_stdio.h" +#include "freedv_api.h" +#include "machdep.h" +#include "codec2_fdmdv.h" + +#ifdef __EMBEDDED__ +#define printf gdb_stdio_printf +#define fopen gdb_stdio_fopen +#define fclose gdb_stdio_fclose +#define fread gdb_stdio_fread +#define fwrite gdb_stdio_fwrite +#define fprintf gdb_stdio_fprintf +#endif + +#define FREEDV_NSAMPLES_16K (2*FREEDV_NSAMPLES) + +int main(int argc, char *argv[]) { + struct freedv *f; + FILE *fin, *fout, *ftotal; + int frame, nin_16k, nin, i, nout = 0; + int n_samples, n_samples_16k; + int sync; + float snr_est; + + PROFILE_VAR(fdmdv_16_to_8_start, freedv_rx_start, fdmdv_8_to_16_start); + + machdep_profile_init(); + + f = freedv_open(FREEDV_MODE_1600); + n_samples = freedv_get_n_speech_samples(f); + n_samples_16k = 2*n_samples; + + short adc16k[FDMDV_OS_TAPS_16K+n_samples_16k]; + short dac16k[n_samples_16k]; + short adc8k[n_samples]; + short dac8k[FDMDV_OS_TAPS_8K+n_samples]; + + // Receive --------------------------------------------------------------------- + + frame = 0; + + fin = fopen("mod_16k.raw", "rb"); + if (fin == NULL) { + printf("Error opening input file\n"); + exit(1); + } + + fout = fopen("speechout_16k.raw", "wb"); + if (fout == NULL) { + printf("Error opening output file\n"); + exit(1); + } + + ftotal = fopen("total.txt", "wt"); + assert(ftotal != NULL); + + /* clear filter memories */ + + for(i=0; i. +*/ + +#include +#include +#include +#include + +#include "stm32f4xx_conf.h" +#include "stm32f4xx.h" +#include "gdb_stdio.h" +#include "freedv_api.h" +#include "machdep.h" + +#ifdef __EMBEDDED__ +#define printf gdb_stdio_printf +#define fopen gdb_stdio_fopen +#define fclose gdb_stdio_fclose +#define fread gdb_stdio_fread +#define fwrite gdb_stdio_fwrite +#endif + +int main(int argc, char *argv[]) { + struct freedv *f; + FILE *fin, *fout; + int frame, n_samples; + PROFILE_VAR(freedv_start); + + machdep_profile_init(); + + f = freedv_open(FREEDV_MODE_1600); + n_samples = freedv_get_n_speech_samples(f); + short inbuf[n_samples], outbuf[n_samples]; + + // Transmit --------------------------------------------------------------------- + + fin = fopen("stm_in.raw", "rb"); + if (fin == NULL) { + printf("Error opening input file\n"); + exit(1); + } + + fout = fopen("mod.raw", "wb"); + if (fout == NULL) { + printf("Error opening output file\n"); + exit(1); + } + + frame = 0; + + while (fread(inbuf, sizeof(short), n_samples, fin) == n_samples) { + PROFILE_SAMPLE(freedv_start); + freedv_tx(f, outbuf, inbuf); + PROFILE_SAMPLE_AND_LOG2(freedv_start, " freedv_tx"); + + fwrite(outbuf, sizeof(short), n_samples, fout); + printf("frame: %d\n", ++frame); + machdep_profile_print_logged_samples(); + } + + fclose(fin); + fclose(fout); + + return 0; +} + diff --git a/libcodec2-android/src/codec2/stm32/src/gdb_stdio.c b/libcodec2-android/src/codec2/stm32/src/gdb_stdio.c new file mode 100644 index 0000000..46245e4 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/src/gdb_stdio.c @@ -0,0 +1,125 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: gdb_stdio.c + AUTHOR......: David Rowe + DATE CREATED: April 23 2013 + + Some stdio I/O functions that perform I/O on the host using gdb. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2013 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include +#include +#include "gdb_stdio.h" + +#define MAX_STR 2048 + +/* command codes we use to signal host */ + +#define GDB_STDIO_PRINTF 1 +#define GDB_STDIO_FOPEN 2 +#define GDB_STDIO_FCLOSE 3 +#define GDB_STDIO_FWRITE 4 +#define GDB_STDIO_FREAD 5 +#define GDB_STDIO_FPRINTF 6 + +/* globals we use to communicate with host */ + +volatile int gdb_stdio_func = 0; +volatile int gdb_stdio_ret; +volatile char *gdb_stdio_pstr1; +volatile char *gdb_stdio_pstr2; +volatile int gdb_stdio_strlen1; +volatile int gdb_stdio_strlen2; +volatile FILE *gdb_stdio_file; +volatile void *gdb_stdio_ptr; +volatile int gdb_stdio_size; +volatile int gdb_stdio_nmem; + +void gdb_stdio_fprintf(FILE *file, const char *format, ...) { + va_list arg; + char str[MAX_STR]; + + va_start(arg, format); + vsnprintf(str, MAX_STR, format, arg); + va_end(arg); + gdb_stdio_file = file; + gdb_stdio_pstr1 = str; + gdb_stdio_strlen1 = strlen(str); + + gdb_stdio_func = GDB_STDIO_FPRINTF; + while(gdb_stdio_func); +} + +void gdb_stdio_printf(const char *format, ...) { + va_list arg; + char str[MAX_STR]; + + va_start(arg, format); + vsnprintf(str, MAX_STR, format, arg); + va_end(arg); + gdb_stdio_pstr1 = str; + gdb_stdio_strlen1 = strlen(str); + + gdb_stdio_func = GDB_STDIO_PRINTF; + while(gdb_stdio_func); +} + +FILE *gdb_stdio_fopen(char file_name[], char mode[]) { + gdb_stdio_pstr1 = file_name; + gdb_stdio_pstr2 = mode; + gdb_stdio_strlen1 = strlen(file_name); + gdb_stdio_strlen2 = strlen(mode); + + gdb_stdio_func = GDB_STDIO_FOPEN; + while(gdb_stdio_func); + return (FILE*)gdb_stdio_ret; +} + +void gdb_stdio_fclose(FILE *file) { + gdb_stdio_file = file; + + gdb_stdio_func = GDB_STDIO_FCLOSE; + while(gdb_stdio_func); +} + +int gdb_stdio_fwrite(void *ptr, int size, int nmem, FILE *file) { + gdb_stdio_ptr = ptr; + gdb_stdio_size = size; + gdb_stdio_nmem = nmem; + gdb_stdio_file = file; + + gdb_stdio_func = GDB_STDIO_FWRITE; + while(gdb_stdio_func); + return gdb_stdio_ret; +} + +int gdb_stdio_fread(void *ptr, int size, int nmem, FILE *file) { + gdb_stdio_ptr = ptr; + gdb_stdio_size = size; + gdb_stdio_nmem = nmem; + gdb_stdio_file = file; + + gdb_stdio_func = GDB_STDIO_FREAD; + while(gdb_stdio_func); + return gdb_stdio_ret; +} + diff --git a/libcodec2-android/src/codec2/stm32/src/iir_duc.c b/libcodec2-android/src/codec2/stm32/src/iir_duc.c new file mode 100644 index 0000000..2c93059 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/src/iir_duc.c @@ -0,0 +1,371 @@ + /*---------------------------------------------------------------------------*\ + + FILE........: iir_duc.c + AUTHOR......: Brady O'Brien + DATE CREATED: 6 Mar 2015 + + Interapolator/Filter for IF upconversion + + Unit testing: + + ~/codec2-dev/stm32$ gcc -D__UNITTEST__ -Iinc src/iir_duc.c -o iir_duc -lm -Wall -I../src/ + ~/codec2-dev/stm32$ ./iir_duc + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2015 Brady O'Brien + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include "stm32f4_dacduc.h" +#include "iir_duc.h" + +#define BETA1 0.99002 // B1MUL/(2**B1SHFT) +#define B1MUL 32441 +#define B1SMUL -38328 +#define B1SHFT 15 // 10 bits gives us plenty of headroom between 31 bits of int and 14 bits of ADC +#define B2MUL 24593 // This actually matches BETA2 exactly with the supplied BETA1 +#define B2SHFT 15 // 10 is also the lowest we can go without beta1=1 +#define BETA2 (1.0 - (1.0-BETA1)*DUC_M) // B2MUL/(2**B2SHFT) +#define IN_SCALE 2.0 //Input scaling factor. Should be as large as the amplitude of the incoming samples +#define DAC_SCALE 4096 //Maximum output to DAC +#define DAC_SCALE_2 2040 + + +//IIR and FIR filter states. Global for go fast. +float f_1,f_2,f; +int n_1,n_2,n,m_1,m_2,m; + +/* + Upconvert and bandpass filter a chunk of spectrum from Fs/M to Fs. We're going for 700khz here. + modin needs to be DUC_N long and dac_out needs to be DUC_N*DUC_M long. This +*/ + +void iir_upconv(float modin[], unsigned short dac_out[]){ + int i,j,k; + int m; + k=0; + //Iterate through input samples and apply pre-eq FIR, interpolate, and apply BPF IIR + for(i=0;i>B1SHFT) - ((B1MUL*n_2)>>B1SHFT); //Apply one cycle of IIR. This feeds the fir-ed sample into the output filter + n_2 = n_1; + n_1 = n; + dac_out[k]=(unsigned short)(n+DAC_SCALE_2); + k++; + //now do the rest of the filtering. Because we're zero-stuffing we can neglect the sample from the fir filter. + for(j=1;j>B1SHFT) - ((B1MUL*n_2)>>B1SHFT); + n_2 = n_1; + n_1 = n; + dac_out[k]=(unsigned short)((n)+DAC_SCALE_2); + } + } +} + +/* + Upconvert and bandpass filter a chunk of spectrum from Fs/M to Fs. We're going for 700khz here. + modin needs to be DUC_N long and dac_out needs to be DUC_N*DUC_M long. This +*/ + +void iir_upconv_fixp(int modin[], unsigned short dac_out[]){ + int i,j,k; + int l; + k=0; + //Iterate through input samples and apply pre-eq FIR, interpolate, and apply BPF IIR + for(i=0;i>4; + m = l+((m_2*B2MUL)>>B2SHFT); + m_2 = m_1; + m_1 = l; //Scale fir output and convert to fixed. + //m = (int)((f/(IN_SCALE))*DAC_SCALE_2); //Scale fir output and convert to fixed + n = m + ((B1SMUL*n_1)>>B1SHFT) - ((B1MUL*n_2)>>B1SHFT); //Apply one cycle of IIR. This feeds the fir-ed sample into the output filter + n_2 = n_1; + n_1 = n; + dac_out[k]=(unsigned short)(n+DAC_SCALE_2); + k++; + //now do the rest of the filtering. Because we're zero-stuffing we can neglect the sample from the fir filter. + for(j=1;j>B1SHFT) - ((B1MUL*n_2)>>B1SHFT); + n_2 = n_1; + n_1 = n; + dac_out[k]=(unsigned short)((n)+DAC_SCALE_2); + } + } +} + +#define F48C80R_LEN 25 +#define F48C80R_MUL 4096 +static int js3 = 0; //Index for downsampling +static int js5 = 0; //Index for upsampling +static unsigned int w48c80r; //Phase for real to comp conversion +static int ptr_48c80r; //Pointer in fir delay lines +static int fir_48c80r[]; //Fir filter coeffs +static int fir_48c80r_re[F48C80R_LEN*2]; //Real delay line. Can probably be made much smaller. +static int fir_48c80r_im[F48C80R_LEN*2]; //Imag delay line. Can probably be made much smaller. +static int * sel_48c80r[2] = {fir_48c80r_re,fir_48c80r_im}; //Selector used to optimize out branches in inner loops + +/* + Interpolate and shift from 48k complex to 80k real, centered on Fs/4. + comp_8 - Input samples - 8Kc complex - must be DUC_48N*count long + upout - Output samples - must be DUC_N*count long + count - how many chunks of samples must be processed +*/ + +void upconv_48c_80r(COMP comp_48[],int real_80[],int count){ + int i,j,k; //Loop counters + int ret; //Temp vars + int nr,ni; //Temp vars + int inidx = 0; //Input index + int outidx = 0; + int ncs_48c80r[3]; + for(i=0;i=F48C80R_LEN) + ptr_48c80r-=F48C80R_LEN; + } + if(js3==0){ //Downsample by 3 + ni=0; + /*This loop computes the FIR filter. It only computes from either the re or the im delay line, + depending on comp->re phase It also skips all 'zeros' in the delay line */ + for(k=js5;k>14; //Scale back result; should probably just return int + outidx++; + js3=3; + w48c80r+=3; + } + ptr_48c80r++; + js3--; + js5--; + } + } +} + +#define F8C80R_LEN 42 //Number of taps in the 8C80R filters +#define F8C80R_MUL 4096 +static int int1r,int2r,int3r,int4r,int5r,cmb1r,cmb2r,cmb3r,cmb4r,cmb5r; //States for re combs and integrators +static int int1i,int2i,int3i,int4i,int5i,cmb1i,cmb2i,cmb3i,cmb4i,cmb5i; //States for im combs and integrators +static int ptr_8c80r; //circular buffer ptr fir_8c80r_re +static int w8c80r = 0; //Omega for upconversion + +static int fir_8c80r_cic_i[]; //FIR Coeffs +static int fir_8c80r_re[F8C80R_LEN*2]; //FIR delay line for re +static int fir_8c80r_im[F8C80R_LEN*2]; //FIR delay line for im + +/* + Interpolate and shift from 8k complex to 80k real, centered on Fs/4. + comp_8 - Input samples - 8Kc complex - must be (DUC_N/10)*count long + upout - Output samples - must be DUC_N*count long + count - how many chunks of samples must be processed +*/ + +void upconv_8c_80r(COMP comp_8[],float real_80[],int count){ + int i,j,k; //Loop indices + float ret; //Temporary variables + int nr,ni; + int cmbr,cmbi,cmbrr,cmbii,rein,imin; //More temporaries + int inidx = 0; //Index of input + int outidx = 0; //Index of output + for(i=0;i>14; + ni+=(fir_8c80r_cic_i[k]*fir_8c80r_im[ptr_8c80r+k])>>14; + } + ptr_8c80r++; //Spin the dealy line index + if(ptr_8c80r>=F8C80R_LEN) + ptr_8c80r=0; + rein=nr; + imin=ni; + cmbr = rein - cmb1r; cmb1r = rein; //Comb 1 real + cmbrr = cmbr - cmb2r; cmb2r = cmbr; //Comb 2 real + cmbr = cmbrr - cmb3r; cmb3r = cmbrr; //Comb 3 real + cmbrr = cmbr - cmb4r; cmb4r = cmbr; //Comb 4 real + cmbr = cmbrr - cmb5r; cmb5r = cmbrr; + + cmbi = imin - cmb1i; cmb1i = imin; //Comb 1 im + cmbii = cmbi - cmb2i; cmb2i = cmbi; //Comb 2 im + cmbi = cmbii - cmb3i; cmb3i = cmbii; //Comb 3 im + cmbii = cmbi - cmb4i; cmb4i = cmbi; //Comb 4 im + cmbi = cmbii - cmb5i; cmb5i = cmbii; //Comb 4 im + //Do first cycle of integration + int1r = cmbr + int1r; //Integrator stage 1 re + int2r = int1r + int2r; //Integrator stage 2 re + int3r = int2r + int3r; //Integrator stage 3 re + int4r = int3r + int4r; //Integrator stage 4 re + int5i = int4i + int5i; + + int1i = cmbi + int1i; //Integrator stage 1 im + int2i = int1i + int2i; //Integrator stage 2 im + int3i = int2i + int3i; //Integrator stage 3 im + int4i = int3i + int4i; //Integrator stage 4 im + int5r = int4r + int5r; + //Convert this complex into real and cancel out the gain from CIC + //This should probably spit out integers instead of going back to float + switch(w8c80r&0x3){ //Do comp->real conversion by hand + case 0:ret=(float)(-int5i>>7);break; + case 1:ret=(float)(int5r>>7);break; + case 2:ret=(float)(int5i>>7);break; + case 3:ret=(float)(-int5r>>7);break; + } + real_80[outidx] = ret/8192; //Divide by 4096 to cancel out gain + outidx++; + w8c80r++; //spin omega + //Next 4 stages of integration. Stage 1 can be ignored because of zero stuffing. + for(k=1;k<5;k++){ + int2r = int1r + int2r; //Integrator stage 2 re + int3r = int2r + int3r; //Integrator stage 3 re + int4r = int3r + int4r; //Integrator stage 4 re + int5r = int4r + int5r; + int2i = int1i + int2i; //Integrator stage 2 im + int3i = int2i + int3i; //Integrator stage 3 im + int4i = int3i + int4i; //Integrator stage 4 im + int5i = int4i + int5i; + switch(w8c80r&0x3){ //Do comp->real conversion by hand + case 0:ret=(float)(-int5i>>7);break; + case 1:ret=(float)(int5r>>7);break; + case 2:ret=(float)(int5i>>7);break; + case 3:ret=(float)(-int5r>>7);break; + } + real_80[outidx] = ret/8192; //Cancel out gain from all that. + outidx++; + w8c80r++; + } + } + } +} + +#ifdef __UNITTEST__ + +#include +#include +#include +#include + +#define FS 80000 +#define AMP_MAX 1 + +#define NOUT_BUFS 500 +#define NIN (NOUT_BUFS*DUC_N) +#define NOUT (NIN*DUC_M) + +void synth_line(float us[], float f, float amp, int n) { + float w, sam; + int i; + + w = 2*M_PI*f/(float)FS; + + for(i=0; i. +*/ + +#ifdef __UNITTEST__ + +#include +#include +#include + +#endif + +#include "stm32f4_adc_tuner.h" +#include "iir_tuner.h" + +/* Filter coefficients of IIR tuner (BETA1) and FIR equaliser (BETA2). + Note neat trick to relate BETA2 to BETA1 by the decimation rate */ + +#define BETA1 .9990234375 // B1MUL/(2**B1SHFT) +#define B1MUL 1023 +#define B1SMUL 1204 +#define B1SHFT 10 // 10 bits gives us plenty of headroom between 31 bits of int and 14 bits of ADC +#define B2MUL 979 // This actually matches BETA2 exactly with the supplied BETA1 +#define B2SHFT 10 // 10 is also the lowest we can go without beta1=1 +#define BETA2 (1.0 - (1.0-BETA1)*ADC_TUNER_M)// B2MUL/(2**B2SHFT) + +#define FIXED_IIR //Define this to compile a fixed point IIR filter + +/* filter states - we keep them global due to the need for speed */ + +#ifdef FIXED_IIR +int n_2, n_1, o_2, o_1; +#else +float y_2, y_1, z_2, z_1; +#endif + +/* + ADC -> signed conversion - IIR BPF - Decimate - FIR Equaliser -> FIFO +*/ + +void iir_tuner( + float dec_50[], // ADC_TUNER_N/2 output samples + unsigned short adc_buf[] // ADC_TUNER_BUF_SZ/2 input samples +) +{ + int i, j, k; +#ifndef FIXED_IIR + float x, y, z; +#endif + int n, m, o; + + for(i=0, j=0; i>B1SHFT) - ((B1MUL*n_2)>>B1SHFT); + n_2 = n_1; + n_1 = n; + #else + x = (int)adc_buf[i] - 32768; + y = x - (BETA1*y_2); + y_2 = y_1; + y_1 = y; + #endif + } + + /* Equaliser FIR filter, notch at Fs/(4*ADC_TUNER_M) to smooth out + IIR BPF passband response */ + #ifdef FIXED_IIR + o = n + ((B2MUL*o_2)>>B2SHFT); + dec_50[j] = (float)o; + o_2 = o_1; + o_1 = n; + #else + z=y+BETA2*z_2; + dec_50[j] = z; + z_2 = z_1; + z_1 = y; + #endif + + } +} + + +/* BPF at 12.5 kHz +/- 2000 Hz, and decimate down to Fs = 10kHz */ + +static float fir_50_to_10[]; +void iir_tuner_dec_50_to_10(float dec_10[], float dec_50[], int n) { + int i,j,k; + float acc; + + for(i=0,k=0; i Fs=10kHz short ---------------------------------------------*/ + + for(i=0; i +#include +#include "memtools.h" + +/* startup_stm32f4xx.s has been modified to fill RAM segment from bss up with 0x0x55555555 */ + +void memtools_find_unused( int (*printf_func)(const char *fmt, ...) ) { + int32_t *p, *start; + int found = 0; + + (*printf_func)("chunks of RAM segment > 256 bytes containing start up pattern:\n"); + + /* count down from top of memory through stack, empty memory, then to heap */ + for (p =(int32_t*)0x20000000; p<(int32_t*)0x20020000; p++) { + if (found == 0) { + if (*p == 0x55555555) { + start = p; + found = 1; + } + } + + if (found == 1) { + if (*p != 0x55555555) { + found = 0; + int bytes = (void*)p - (void*)start; + if (bytes >= 0x100) + (*printf_func)(" start: 0x%x end: 0x%x bytes: %d\n", (int) start, (int)p, bytes); + } + } + } + +} + +void memtools_isnan(float *vec, int n, char *label, int (*printf_func)(const char *fmt, ...)) { + int count = 0; + for(int i=0; i + * Copyright (C) 2015 FreeDV project. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License version 2.1, + * as published by the Free Software Foundation. This program is + * distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, see + * . + */ + +#include "menu.h" +#include + +/*! + * Return the Nth item on the stack. + */ +static const struct menu_stack_item_t* const menu_stack( + const struct menu_t* const menu, + uint8_t index) +{ + if (menu->stack_depth <= index) + return NULL; + + return &(menu->stack[menu->stack_depth - index - 1]); +} + +/*! + * Return the Nth item on the stack. + */ +const struct menu_item_t* const menu_item( + const struct menu_t* const menu, uint8_t index) +{ + const struct menu_stack_item_t* const current + = menu_stack(menu, index); + + if (!current) + return NULL; + return current->item; +} + +/*! + * Enter a (sub)-menu. + */ +int menu_enter(struct menu_t* const menu, + const struct menu_item_t* const item) +{ + if (menu->stack_depth == MENU_STACK_SZ) + return -1; + + menu->stack[menu->stack_depth].item = item; + menu->stack[menu->stack_depth].index = menu->current; + menu->stack_depth++; + + (item->event_cb)(menu, MENU_EVT_ENTERED); + + return 0; +} + +/*! + * Return from a (sub)-menu. + */ +void menu_leave(struct menu_t* const menu) +{ + if (!menu->stack_depth) + return; /* Already out of the menu */ + + menu->last = menu_item(menu, 0); + menu->stack_depth--; + + const struct menu_stack_item_t* current = menu_stack(menu, 0); + if (current && current->item) { + menu->current = current->index; + (current->item->event_cb)(menu, MENU_EVT_RETURNED); + } +} + +/*! + * Execute the callback for the current item with a user-supplied event. + */ +void menu_exec(struct menu_t* const menu, uint32_t event) +{ + const struct menu_item_t* item = menu_item(menu, 0); + if (item && item->event_cb) + (item->event_cb)(menu, event); +} diff --git a/libcodec2-android/src/codec2/stm32/src/morse.c b/libcodec2-android/src/codec2/stm32/src/morse.c new file mode 100644 index 0000000..2522993 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/src/morse.c @@ -0,0 +1,175 @@ +/*! + * Morse code library. + * + * This implements a state machine for playing back morse code messages. + * + * Author Stuart Longland + * Copyright (C) 2015 FreeDV project. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License version 2.1, + * as published by the Free Software Foundation. This program is + * distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, see + * . + */ + +#include +#include "morse.h" + +#include + +/*! Symbol table element definition */ +struct morse_sym_table_t { + uint8_t code; uint8_t len; +}; + +/*! Symbol table: "digits" */ +static const struct morse_sym_table_t morse_digits[] = { + { .code = 0xf8, .len = 5 }, /* 0: ----- */ + { .code = 0x78, .len = 5 }, /* 1: .---- */ + { .code = 0x38, .len = 5 }, /* 2: ..--- */ + { .code = 0x18, .len = 5 }, /* 3: ...-- */ + { .code = 0x08, .len = 5 }, /* 4: ....- */ + { .code = 0x00, .len = 5 }, /* 5: ..... */ + { .code = 0x80, .len = 5 }, /* 6: -.... */ + { .code = 0xc0, .len = 5 }, /* 7: --... */ + { .code = 0xe0, .len = 5 }, /* 8: ---.. */ + { .code = 0xf0, .len = 5 }, /* 9: ----. */ +}; + +/*! Symbol table: "letters" */ +static const struct morse_sym_table_t morse_letters[] = { + { .code = 0x40, .len = 2 }, /* A: .- */ + { .code = 0x80, .len = 4 }, /* B: -... */ + { .code = 0xa0, .len = 4 }, /* C: -.-. */ + { .code = 0x80, .len = 3 }, /* D: -.. */ + { .code = 0x00, .len = 1 }, /* E: . */ + { .code = 0x20, .len = 4 }, /* F: ..-. */ + { .code = 0xc0, .len = 3 }, /* G: --. */ + { .code = 0x00, .len = 4 }, /* H: .... */ + { .code = 0x00, .len = 2 }, /* I: .. */ + { .code = 0x70, .len = 4 }, /* J: .--- */ + { .code = 0xa0, .len = 3 }, /* K: -.- */ + { .code = 0x40, .len = 4 }, /* L: .-.. */ + { .code = 0xc0, .len = 2 }, /* M: -- */ + { .code = 0x80, .len = 2 }, /* N: -. */ + { .code = 0xe0, .len = 3 }, /* O: --- */ + { .code = 0x60, .len = 4 }, /* P: .--. */ + { .code = 0xd0, .len = 4 }, /* Q: --.- */ + { .code = 0x40, .len = 3 }, /* R: .-. */ + { .code = 0x00, .len = 3 }, /* S: ... */ + { .code = 0x80, .len = 1 }, /* T: - */ + { .code = 0x20, .len = 3 }, /* U: ..- */ + { .code = 0x10, .len = 4 }, /* V: ...- */ + { .code = 0x60, .len = 3 }, /* W: .-- */ + { .code = 0x90, .len = 4 }, /* X: -..- */ + { .code = 0xb0, .len = 4 }, /* Y: -.-- */ + { .code = 0xc0, .len = 4 }, /* Z: --.. */ +}; + +static void morse_next_sym(struct morse_player_t* const morse_player) +{ + struct sfx_player_t* sfx_player = &(morse_player->sfx_player); + + if (!morse_player->msg) { + sfx_play(sfx_player, NULL); + return; + } + + uint8_t sym_rem = 0; + uint8_t sym_code = 0; + const struct morse_sym_table_t* sym = NULL; + const char* c = morse_player->msg; + + while(!sym) { + if ((*c >= 'A') && (*c <= 'Z')) + /* Play a letter. (capitals) */ + sym = &morse_letters[*c - 'A']; + else if ((*c >= 'a') && (*c <= 'z')) + /* Play a letter. (lowercase) */ + sym = &morse_letters[*c - 'a']; + else if ((*c >= '0') && (*c <= '9')) + /* Play a digit. */ + sym = &morse_digits[*c - '0']; + else if (*c == 0) { + morse_player->msg = NULL; + return; + } + c++; + } + morse_player->msg = c; + + struct sfx_note_t* note = morse_player->sym; + sym_rem = sym->len; + sym_code = sym->code; + + while(sym_rem) { + note->freq = morse_player->freq; + if (sym_code & 0x80) + /* Play a "dah" */ + note->duration = morse_player->dit_time*3; + else + /* Play a "dit" */ + note->duration = morse_player->dit_time; + note++; + sym_code <<= 1; + sym_rem--; + + /* A gap follows */ + note->freq = 0; + + if (sym_rem) { + /* More of the character */ + note->duration = morse_player->dit_time; + note++; + } + } + + /* What comes next? */ + if (*c == ' ') { + /* End of word */ + note->duration = morse_player->dit_time*7; + note++; + } else if (*c) { + /* End of character */ + note->duration = morse_player->dit_time*3; + note++; + } + + /* Terminate the sequence */ + note->freq = 0; + note->duration = 0; + + /* Set the player up */ + sfx_play(sfx_player, morse_player->sym); +} + +/*! + * Start playing a particular effect. + * @param sfx_player Effect player state machine + * @param effect Pointer to sound effect (NULL == stop) + */ +void morse_play(struct morse_player_t* const morse_player, + const char* msg) +{ + morse_player->msg = msg; + morse_next_sym(morse_player); +} + +/*! + * Retrieve the next sample to be played. + */ +int16_t morse_next(struct morse_player_t* const morse_player) +{ + if (!morse_player) + return(0); + if (!morse_player->sfx_player.note) + morse_next_sym(morse_player); + return sfx_next(&(morse_player->sfx_player)); +} diff --git a/libcodec2-android/src/codec2/stm32/src/new_i2c.c b/libcodec2-android/src/codec2/stm32/src/new_i2c.c new file mode 100644 index 0000000..abc5170 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/src/new_i2c.c @@ -0,0 +1,430 @@ +/* + * File: new_i2c.h + * Author: leon (zs6lmg@gmail.com or leon@lrlabs.com) + * + * Created on March 17, 2016, 6:09 PM + * + * GNU license apply. + * + */ + + +/* + Copyright (C) 2016 Leon + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include "stm32f4xx.h" +#include "stm32f4xx_conf.h" +#include "new_i2c.h" +//#include "cds_i2s.h" + +// +// +// +#define CONCAT_(x,y) x##y +#define CONCAT(x,y) CONCAT_(x,y) +// +// +// + +// +// +// +// +#define I2C_SDA_AFPIN_ID CONCAT(GPIO_PinSource,I2C_DX_SDA) +#define I2C_SCK_AFPIN_ID CONCAT(GPIO_PinSource,I2C_DX_SCK) +#define I2C_SDA_PIN_ID CONCAT(GPIO_Pin_,I2C_DX_SDA) +#define I2C_SCK_PIN_ID CONCAT(GPIO_Pin_,I2C_DX_SCK) + + +/* definition to expand macro then apply to pragma message */ +// Verify that my shortcuts are actually working +//#define VALUE_TO_STRING(x) #x +//#define VALUE(x) VALUE_TO_STRING(x) +// +//#define VAR_NAME_VALUE(var) #var "=" VALUE(var) +//#pragma message(VAR_NAME_VALUE(I2C_SCK_AFPIN_ID)) +//#pragma message(VAR_NAME_VALUE(I2C_SDA_AFPIN_ID)) + +/* + * @brief Setup I2C interface pins + * PB6 is SCL + * PB9 is SDA + * + * @param None + * + * @return None + */ +void I2C_Setup(void) { + I2C_InitTypeDef I2C_Init_S; + GPIO_InitTypeDef GPIO_Init_P; + // setup the clock for the GPIO device + RCC_AHB1PeriphClockCmd(I2C_DX_CLK_SCK|I2C_DX_CLK_SDA, ENABLE); + // enable clock for the i2c device +#if I2C_D1 + RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE); + // Performing a Reset + //RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); + //RCC_APB1PeriphResetCmd(RCC_APB1Periph_I2C1, ENABLE); + //RCC_APB1PeriphResetCmd(RCC_APB1Periph_I2C1, DISABLE); +#elif I2C_D3 + RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C3, ENABLE); +#else +#error "Problem on I2C" +#endif + // setup the pins + GPIO_Init_P.GPIO_Pin=I2C_SDA_PIN_ID; + GPIO_Init_P.GPIO_Mode=GPIO_Mode_AF; + GPIO_Init_P.GPIO_Speed=GPIO_Speed_50MHz; + GPIO_Init_P.GPIO_OType=GPIO_OType_OD; + GPIO_Init_P.GPIO_PuPd=GPIO_PuPd_NOPULL; + GPIO_Init(I2C_DX_P_SDA, &GPIO_Init_P); + // + // + GPIO_Init_P.GPIO_Pin=I2C_SCK_PIN_ID; + GPIO_Init(I2C_DX_P_SCK, &GPIO_Init_P); + // assign alternate functions +#if I2C_D1 + GPIO_PinAFConfig(I2C_DX_P_SDA, I2C_SDA_AFPIN_ID, GPIO_AF_I2C1); + GPIO_PinAFConfig(I2C_DX_P_SCK, I2C_SCK_AFPIN_ID, GPIO_AF_I2C1); +#elif I2C_D3 + GPIO_PinAFConfig(I2C_DX_P_SDA, I2C_SDA_AFPIN_ID, GPIO_AF_I2C3); + GPIO_PinAFConfig(I2C_DX_P_SCK, I2C_SCK_AFPIN_ID, GPIO_AF_I2C3); +#else +#error "Device not defined" +#endif + // + I2C_Cmd(I2C_DEVICE, DISABLE); + I2C_DeInit(I2C_DEVICE); + // + // + I2C_Init_S.I2C_Mode=I2C_Mode_I2C; + I2C_Init_S.I2C_DutyCycle=I2C_DutyCycle_2; + I2C_Init_S.I2C_Ack=I2C_Ack_Enable; + I2C_Init_S.I2C_OwnAddress1=0x00; + I2C_Init_S.I2C_AcknowledgedAddress=I2C_AcknowledgedAddress_7bit; + I2C_Init_S.I2C_ClockSpeed=I2C_SPEED; + I2C_Cmd(I2C_DEVICE, ENABLE); + I2C_Init(I2C_DEVICE, &I2C_Init_S); +} + + + +uint32_t I2C_timeout(uint32_t retval) { + I2C_GenerateSTOP(I2C_DEVICE, ENABLE); + I2C_SoftwareResetCmd(I2C_DEVICE, ENABLE); + I2C_SoftwareResetCmd(I2C_DEVICE, DISABLE); + I2C_DeInit(I2C_DEVICE); + I2C_Setup(); + return(retval); +} + + + +/** + * @brief Writes a Byte to a given register through the control interface (I2C) + * @param Addr: I2C address to write to. + * @param Register: Register inside device to write to. + * @param Value: the Byte value to be written into destination register. + * @return 0 all ok. + * 0x101 i2c busy. + * 0x102 master mode not selected. + * 0x103 master transmitter mode. + * 0x104 send data failed. + * 0x105 no reply from device. + */ +uint32_t I2C_NewWriteRegister(uint8_t Addr, uint8_t Register, uint8_t Value) { + uint32_t result = 0; + + /* check if bus is busy */ + __IO uint32_t Timeout = I2C_LTIMEOUT; + while (I2C_GetFlagStatus(I2C_DEVICE, I2C_FLAG_BUSY )) { + if ((Timeout--) == 0) return 0x101; + } + I2C_GenerateSTART(I2C_DEVICE, ENABLE); + Timeout = I2C_STIMEOUT; + while (!I2C_CheckEvent(I2C_DEVICE,I2C_EVENT_MASTER_MODE_SELECT)) { + if ((Timeout--) == 0) return 0x102; + } + I2C_Send7bitAddress(I2C_DEVICE,Addr,I2C_Direction_Transmitter); + Timeout = I2C_STIMEOUT; + while (!I2C_CheckEvent(I2C_DEVICE,I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)) { + if ((Timeout--) == 0) return 0x103; + } + I2C_SendData(I2C_DEVICE, Register); + Timeout = I2C_STIMEOUT; + while (!I2C_CheckEvent(I2C_DEVICE,I2C_EVENT_MASTER_BYTE_TRANSMITTING)) { + if ((Timeout--) == 0) return 0x104; + } + I2C_SendData(I2C_DEVICE, Value); + // Wait for reply + Timeout = I2C_LTIMEOUT; + while (!I2C_GetFlagStatus(I2C_DEVICE, I2C_FLAG_BTF)) { + if ((Timeout--) == 0) return 0x105; + } + I2C_GenerateSTOP(I2C_DEVICE, ENABLE); + return result; +} + +/** + * @brief Writes more than 1 bytes to a given register through the control interface (I2C) + * @param Addr: I2C address to write to. + * @param Register: Register inside device to write to. + * @param Value: the Byte(s) to be written into destination register. + * @param N: Number of byte(s) to write + * @return 0 all ok. + * 0x101 i2c busy. + * 0x102 master mode not selected. + * 0x103 master transmitter mode. + * 0x104 send data failed. + * 0x105 no reply from device. + */ +uint32_t I2C_NewWriteRegisterN(uint8_t Addr, uint8_t Register, uint8_t *Value, uint8_t N) { + uint32_t result = 0; + + /* check if bus is busy */ + __IO uint8_t i; + __IO uint32_t Timeout = I2C_LTIMEOUT; + while (I2C_GetFlagStatus(I2C_DEVICE, I2C_FLAG_BUSY )) { + if ((Timeout--) == 0) return 0x101; + } + I2C_GenerateSTART(I2C_DEVICE, ENABLE); + Timeout = I2C_STIMEOUT; + while (!I2C_CheckEvent(I2C_DEVICE,I2C_EVENT_MASTER_MODE_SELECT)) { + if ((Timeout--) == 0) return 0x102; + } + I2C_Send7bitAddress(I2C_DEVICE,Addr,I2C_Direction_Transmitter); + Timeout = I2C_STIMEOUT; + while (!I2C_CheckEvent(I2C_DEVICE,I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)) { + if ((Timeout--) == 0) return 0x103; + } + I2C_SendData(I2C_DEVICE, Register); + Timeout = I2C_STIMEOUT; + while (!I2C_CheckEvent(I2C_DEVICE,I2C_EVENT_MASTER_BYTE_TRANSMITTING)) { + if ((Timeout--) == 0) return 0x104; + } + for (i = 0; i < N; i++) { + I2C_SendData(I2C_DEVICE, *(Value++)); + // Wait for reply + Timeout = I2C_LTIMEOUT; + while (!I2C_GetFlagStatus(I2C_DEVICE, I2C_FLAG_BTF)) { + if ((Timeout--) == 0) return 0x105; + } + } + I2C_GenerateSTOP(I2C_DEVICE, ENABLE); + return result; +} + + + +/** + * @brief Reads a Byte to a given register via I2C + * @param Addr: I2C address. + * @param Register: Register inside device to read. + * @return value read. + * 0x101 i2c busy. + * 0x102 master mode not selected. + * 0x103 master transmitter mode. + * 0x104 send data failed. + * 0x105 no reply from device. + * 0x106 direction receive. + * 0x107 data register not empty. + * 0x108 waiting data. + */ +uint32_t I2C_NewReadRegister(uint8_t Addr,uint8_t Register) { + uint32_t result = 0; + __IO uint32_t Timeout = I2C_LTIMEOUT; + while (I2C_GetFlagStatus(I2C_DEVICE,I2C_FLAG_BUSY)) { + if ((Timeout--) == 0) return I2C_timeout(0x101); + } + I2C_GenerateSTART(I2C_DEVICE, ENABLE); +#if (I2Cmodel == 1) + Timeout = I2C_STIMEOUT; + while (!I2C_GetFlagStatus(I2C_DEVICE,I2C_FLAG_SB)) { + if ((Timeout--) == 0) return I2C_timeout(0x102); + } + I2C_AcknowledgeConfig(I2C_DEVICE, DISABLE); + I2C_Send7bitAddress(I2C_DEVICE, Addr, I2C_Direction_Transmitter); + Timeout = I2C_STIMEOUT; + while (!I2C_GetFlagStatus(I2C_DEVICE, I2C_FLAG_ADDR)) { + if ((Timeout--) == 0) return I2C_timeout(0x103); + } + (void) I2C_DEVICE->SR2; + Timeout = I2C_STIMEOUT; + while (!I2C_GetFlagStatus(I2C_DEVICE, I2C_FLAG_TXE)) { + if ((Timeout--) == 0) return I2C_timeout(0x104); + } + I2C_SendData(I2C_DEVICE, Register); + Timeout = I2C_STIMEOUT; + while ( (!I2C_GetFlagStatus(I2C_DEVICE, I2C_FLAG_TXE)) || + (!I2C_GetFlagStatus(I2C_DEVICE, I2C_FLAG_BTF)) + ) { + if ((Timeout--) == 0) return I2C_timeout(0x105); + } + I2C_GenerateSTART(I2C_DEVICE, ENABLE); + Timeout = I2C_STIMEOUT; + while (!I2C_GetFlagStatus(I2C_DEVICE, I2C_FLAG_SB)) { + if ((Timeout--) == 0) return I2C_timeout(0x106); + } + I2C_Send7bitAddress(I2C_DEVICE, Addr, I2C_Direction_Receiver); + Timeout = I2C_STIMEOUT; + while (I2C_GetFlagStatus(I2C_DEVICE, I2C_FLAG_ADDR) == RESET) { + if ((Timeout--) == 0) return I2C_timeout(0x107); + } + (void) I2C_DEVICE->SR2; + while (!I2C_GetFlagStatus(I2C_DEVICE, I2C_FLAG_RXNE)) { + if ((Timeout--) == 0) return I2C_timeout(0x108); + } + I2C_GenerateSTOP(I2C_DEVICE, ENABLE); + Timeout = I2C_STIMEOUT; + result = I2C_ReceiveData(I2C_DEVICE ); + Timeout = I2C_STIMEOUT; + while (I2C_DEVICE ->CR1 & I2C_CR1_STOP ) { + if ((Timeout--) == 0) return I2C_timeout(0x109); + } + I2C_AcknowledgeConfig(I2C_DEVICE, ENABLE); + I2C_ClearFlag(I2C_DEVICE, I2C_FLAG_AF ); +#else + Timeout = I2C_STIMEOUT; + while (!I2C_CheckEvent(I2C_DEVICE,I2C_EVENT_MASTER_MODE_SELECT)) { + if ((Timeout--) == 0) return 0x102; + } + I2C_Send7bitAddress(I2C_DEVICE,Addr,I2C_Direction_Transmitter); + Timeout = I2C_STIMEOUT; + while (!I2C_CheckEvent(I2C_DEVICE,I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)) { + if ((Timeout--) == 0) return 0x103; + } + I2C_SendData(I2C_DEVICE, Register); + Timeout = I2C_STIMEOUT; + while (I2C_GetFlagStatus(I2C_DEVICE,I2C_FLAG_BTF) == RESET) { + if ((Timeout--) == 0) return 0x104; + } + I2C_GenerateSTART(I2C_DEVICE, ENABLE); + Timeout = I2C_STIMEOUT; + while (!I2C_CheckEvent(I2C_DEVICE,I2C_EVENT_MASTER_MODE_SELECT)) { + if ((Timeout--) == 0) return 0x105; + } + I2C_Send7bitAddress(I2C_DEVICE,Addr,I2C_Direction_Receiver); + Timeout = I2C_STIMEOUT; + while (I2C_GetFlagStatus(I2C_DEVICE, I2C_FLAG_ADDR) == RESET) { + if ((Timeout--) == 0) return 0x106; + } + I2C_AcknowledgeConfig(I2C_DEVICE,DISABLE); + (void) I2C_DEVICE->SR2; + I2C_GenerateSTOP(I2C_DEVICE, ENABLE); + Timeout = I2C_STIMEOUT; + while (I2C_GetFlagStatus(I2C_DEVICE,I2C_FLAG_RXNE) == RESET) { + if ((Timeout--) == 0) return 0x107; + } + result = I2C_ReceiveData(I2C_DEVICE ); + Timeout = I2C_STIMEOUT; + while (I2C_DEVICE ->CR1 & I2C_CR1_STOP ) { + if ((Timeout--) == 0) return 0x108; + } + I2C_AcknowledgeConfig(I2C_DEVICE, ENABLE); + I2C_ClearFlag(I2C_DEVICE, I2C_FLAG_AF ); +#endif + return result; +} + +/** + * @brief Reads more than one byte from a given register via I2C + * @param Addr: I2C address. + * @param Register: Register inside device to read. + * @return value read. + * 0x101 i2c busy. + * 0x102 master mode not selected. + * 0x103 master transmitter mode. + * 0x104 send data failed. + * 0x105 no reply from device. + * 0x106 direction receive. + * 0x107 data register not empty. + * 0x108 waiting data. + */ +uint32_t I2C_NewReadRegisterN(uint8_t Addr,uint8_t Register,uint8_t *buffer, uint8_t N) { + uint32_t result = 0; + uint8_t cnt; + __IO uint32_t Timeout = I2C_LTIMEOUT; + if ( (N==0)||(N>64) ) return 0x109; + while (I2C_GetFlagStatus(I2C_DEVICE,I2C_FLAG_BUSY)) { + if ((Timeout--) == 0) return 0x101; + } + I2C_GenerateSTART(I2C_DEVICE, ENABLE); + Timeout = I2C_STIMEOUT; + while (!I2C_CheckEvent(I2C_DEVICE,I2C_EVENT_MASTER_MODE_SELECT)) { + if ((Timeout--) == 0) return 0x102; + } + if(N==1) { + // ACK disable + I2C_AcknowledgeConfig(I2C_DEVICE, DISABLE); + } else { + // ACK enable + I2C_AcknowledgeConfig(I2C_DEVICE, ENABLE); + } + I2C_Send7bitAddress(I2C_DEVICE,Addr,I2C_Direction_Transmitter); + Timeout = I2C_STIMEOUT; + while (!I2C_CheckEvent(I2C_DEVICE,I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)) { + if ((Timeout--) == 0) return 0x103; + } + (void) I2C_DEVICE->SR2; + Timeout = I2C_STIMEOUT; + while (!I2C_GetFlagStatus(I2C_DEVICE, I2C_FLAG_TXE)) { + if ((Timeout--) == 0) return I2C_timeout(0x104); + } + I2C_SendData(I2C_DEVICE, Register); + Timeout = I2C_STIMEOUT; + while ( (!I2C_GetFlagStatus(I2C_DEVICE, I2C_FLAG_TXE)) || + (!I2C_GetFlagStatus(I2C_DEVICE, I2C_FLAG_BTF)) + ) { + if ((Timeout--) == 0) return I2C_timeout(0x105); + } + I2C_GenerateSTART(I2C_DEVICE, ENABLE); + Timeout = I2C_STIMEOUT; + while (!I2C_GetFlagStatus(I2C_DEVICE, I2C_FLAG_SB)) { + if ((Timeout--) == 0) return I2C_timeout(0x106); + } + I2C_Send7bitAddress(I2C_DEVICE, Addr, I2C_Direction_Receiver); + Timeout = I2C_STIMEOUT; + while (I2C_GetFlagStatus(I2C_DEVICE, I2C_FLAG_ADDR) == RESET) { + if ((Timeout--) == 0) return I2C_timeout(0x107); + } + (void) I2C_DEVICE->SR2; + for (cnt=0; cnt= N) { + // ACK disable + I2C_AcknowledgeConfig(I2C_DEVICE, DISABLE); + // Stop-Sequenz + I2C_GenerateSTOP(I2C_DEVICE, ENABLE); + } + Timeout = I2C_STIMEOUT; + while (!I2C_GetFlagStatus(I2C_DEVICE, I2C_FLAG_RXNE)) { + if ((Timeout--) == 0) return I2C_timeout(0x108); + } + result=I2C_ReceiveData(I2C_DEVICE); + Timeout = I2C_STIMEOUT; + while (I2C_DEVICE ->CR1 & I2C_CR1_STOP ) { + if ((Timeout--) == 0) return I2C_timeout(0x109); + } + *buffer=(uint8_t)(result & 0xff); + buffer++; + Timeout = I2C_STIMEOUT; + } + I2C_AcknowledgeConfig(I2C_DEVICE, ENABLE); + //I2C_ClearFlag(I2C_DEVICE, I2C_FLAG_AF ); + if (result<0x100) result=0; + return result; +} + diff --git a/libcodec2-android/src/codec2/stm32/src/power_ut.c b/libcodec2-android/src/codec2/stm32/src/power_ut.c new file mode 100644 index 0000000..9733823 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/src/power_ut.c @@ -0,0 +1,135 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: power_ut.c + AUTHOR......: David Rowe + DATE CREATED: 30 May 2014 + + Runs Codec 2, ADC, and DAC, to fully exercise STM32C so we can a feel for + run-time power consumption for SM1000 and hence dimension regulators. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2014 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include +#include +#include + +#include "stm32f4xx_conf.h" +#include "stm32f4xx.h" +#include "stm32f4_adc.h" +#include "stm32f4_dac.h" +#include "gdb_stdio.h" +#include "codec2.h" +#include "dump.h" +#include "sine.h" +#include "machdep.h" + +#ifdef __EMBEDDED__ +#define printf gdb_stdio_printf +#define fopen gdb_stdio_fopen +#define fclose gdb_stdio_fclose +#define fread gdb_stdio_fread +#define fwrite gdb_stdio_fwrite +#endif + +#define SPEED_TEST_SAMPLES 24000 + +/* modification of test used to measure codec2 execuation speed. We read/write ADC/DAC + but dont do anything with the samples, as they are at 16 kHz and codec needs 8 kHz. Just + trying to exercise everything to get a feel for power consumption */ + +static void c2speedtest(int mode, char inputfile[]) +{ + struct CODEC2 *codec2; + short *inbuf, *outbuf, *pinbuf, *dummy_buf; + unsigned char *bits; + int nsam, nbit, nframes; + FILE *fin; + int f, nread; + + codec2 = codec2_create(mode); + nsam = codec2_samples_per_frame(codec2); + nframes = SPEED_TEST_SAMPLES/nsam; + outbuf = (short*)malloc(nsam*sizeof(short)); + inbuf = (short*)malloc(SPEED_TEST_SAMPLES*sizeof(short)); + nbit = codec2_bits_per_frame(codec2); + bits = (unsigned char*)malloc(nbit*sizeof(char)); + dummy_buf = (short*)malloc(2*nsam*sizeof(short)); + + fin = fopen(inputfile, "rb"); + if (fin == NULL) { + printf("Error opening input file: %s\nTerminating....\n",inputfile); + exit(1); + } + + printf("reading samples ....\n"); + nread = fread(inbuf, sizeof(short), SPEED_TEST_SAMPLES, fin); + if (nread != SPEED_TEST_SAMPLES) { + printf("error reading %s, %d samples reqd, %d read\n", + inputfile, SPEED_TEST_SAMPLES, nread); + } + fclose(fin); + + pinbuf = inbuf; + for(f=0; fODR = (1 << 13); + codec2_encode(codec2, bits, pinbuf); + pinbuf += nsam; + GPIOD->ODR &= ~(1 << 13); + //printf("Codec 2 dec\n"); + codec2_decode(codec2, outbuf, bits); + + //printf("write to DAC\n"); + while(dac1_write(dummy_buf, nsam*2) == -1); /* runs at Fs = 16kHz */ + //printf("."); + } + + free(inbuf); + free(outbuf); + free(bits); + codec2_destroy(codec2); +} + +void gpio_init() { + RCC->AHB1ENR |= RCC_AHB1ENR_GPIODEN; // enable the clock to GPIOD + GPIOD->MODER = (1 << 26); // set pin 13 to be general + // purpose output +} + +int main(int argc, char *argv[]) { + SystemInit(); + gpio_init(); + machdep_profile_init (); + adc_open(4*DAC_BUF_SZ); + dac_open(4*DAC_BUF_SZ); + + printf("Starting power_ut\n"); + + c2speedtest(CODEC2_MODE_1600, "stm_in.raw"); + + printf("Finished\n"); + + return 0; +} + diff --git a/libcodec2-android/src/codec2/stm32/src/sfx.c b/libcodec2-android/src/codec2/stm32/src/sfx.c new file mode 100644 index 0000000..f80c8d1 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/src/sfx.c @@ -0,0 +1,67 @@ +/*! + * Sound effect player library. + * + * This implements a state machine for playing back various monophonic + * sound effects such as morse code symbols, clicks and alert tones. + * + * Author Stuart Longland + * Copyright (C) 2015 FreeDV project. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License version 2.1, + * as published by the Free Software Foundation. This program is + * distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, see + * . + */ + +#include +#include "sfx.h" + +static void sfx_next_tone(struct sfx_player_t* const sfx_player) +{ + struct tone_gen_t* tone_gen = &(sfx_player->tone_gen); + const struct sfx_note_t* note = sfx_player->note; + + if (!note) { + tone_reset(tone_gen, 0, 0); + } else { + tone_reset(tone_gen, note->freq, note->duration); + + if (!note->duration) + /* We are done */ + sfx_player->note = NULL; + else + /* Move to next note */ + sfx_player->note++; + } +} + +/*! + * Start playing a particular effect. + * @param sfx_player Effect player state machine + * @param effect Pointer to sound effect (NULL == stop) + */ +void sfx_play(struct sfx_player_t* const sfx_player, + const struct sfx_note_t* effect) +{ + sfx_player->note = effect; + sfx_next_tone(sfx_player); +} + +/*! + * Retrieve the next sample to be played. + */ +int16_t sfx_next(struct sfx_player_t* const sfx_player) +{ + if (!sfx_player) + return(0); + if (!sfx_player->tone_gen.remain) + sfx_next_tone(sfx_player); + return tone_next(&(sfx_player->tone_gen)); +} diff --git a/libcodec2-android/src/codec2/stm32/src/si5351_ut.c b/libcodec2-android/src/codec2/stm32/src/si5351_ut.c new file mode 100644 index 0000000..d79a4da --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/src/si5351_ut.c @@ -0,0 +1,45 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: si5351_ut.c + AUTHOR......: David Rowe + DATE CREATED: June 2016 + + Generates a 10MHz signal on CLK0 ouput of Si5351, should be visible in + attenuated form on SP7/SP7 of SM2000. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2016 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include "new_i2c.h" +#include "si53xx.h" +//#include "gdb_stdio.h" +//#define printf gdb_stdio_printf + +int main(void) { + + //printf("starting\n"); + I2C_Setup(); + si5351_init(0, SI5351_CRYSTAL_LOAD_6PF, 0); + si5351_set_freq(1000000000ULL, 0, SI5351_CLK0); + // int ret = si5351_set_freq(1000000000ULL, 0, SI5351_CLK0); + //printf(" ret = %d\n", ret); + + while(1); +} diff --git a/libcodec2-android/src/codec2/stm32/src/si53xx.c b/libcodec2-android/src/codec2/stm32/src/si53xx.c new file mode 100644 index 0000000..48576a3 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/src/si53xx.c @@ -0,0 +1,856 @@ +/*------------------------------------------------------------------------------ + * + * Ported to stm32F4xx non c++ by Leon Lessing leon@lrlabs.com or zs6lmg@gmail.com + * + * + * Copyright (C) 2015-2016 Jason Milldrum + * Dana H. Myers + * + * Many defines derived from clk-si5351.h in the Linux kernel. + * Sebastian Hesselbarth + * Rabeeh Khoury + * + * do_div() macro derived from /include/asm-generic/div64.h in + * the Linux kernel. + * Copyright (C) 2003 Bernardo Innocenti + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + * + *------------------------------------------------------------------------------ +*/ + +#include "stm32f4xx.h" +#include "stm32f4xx_conf.h" +//#include "system.h" + +#include "new_i2c.h" +//#include "inc/xprintf.h" +#include "stdlib.h" +#include "string.h" +#include "math.h" +#include "si53xx.h" + + +void si5351_write(uint8_t REGaddr, uint8_t data) { + // ignoring errors + // Waiting for the bite + Si5351_Config.I2C_ErrorCode=I2C_NewWriteRegister(Si5351_Config.I2C_add, REGaddr, data); + + /* + printf(" si5351_write: REGaddr: 0x%02x data...: 0x%02x", REGaddr, data); + if (Si5351_Config.I2C_ErrorCode > 0xff) + printf(" ErrorCode: 0x%02x\n", Si5351_Config.I2C_ErrorCode); + else + printf("\n"); + */ +} + +void si5351_write_bulk(uint8_t REGaddr, uint8_t bytes, uint8_t *data) { + Si5351_Config.I2C_ErrorCode=I2C_NewWriteRegisterN(Si5351_Config.I2C_add, REGaddr, data, bytes); +} + + +uint8_t si5351_read(uint8_t REGaddr) { + uint8_t reg_val; + Si5351_Config.I2C_ErrorCode=I2C_NewReadRegister(Si5351_Config.I2C_add,REGaddr); + //printf(" si5351_read.: REGaddr: 0x%02x", REGaddr); + if (Si5351_Config.I2C_ErrorCode>0xff) { + reg_val=0; + //printf(" ErrorCode: 0x%02x\n", Si5351_Config.I2C_ErrorCode); + } else { + reg_val=(uint8_t)(Si5351_Config.I2C_ErrorCode & 0xff); + Si5351_Config.I2C_ErrorCode=0; + //printf(" reg_val: 0x%02x\n", reg_val); + } + return reg_val; +} + +/*------------------------------------------------------------------------------ + * @brief si5351_init(uint8_t xtal_load_c, uint32_t ref_osc_freq) + * Setup communications to the Si5351 and set the crystal + * load capacitance. + * + * @param I2C_Address - enter I2C address here, use 0 to use .h file defined value + * + * @param xtal_load_c - Crystal load capacitance. Use the SI5351_CRYSTAL_LOAD_*PF + * defines in the header file + * + * @param ref_osc_freq - Crystal/reference oscillator frequency in 1 Hz increments. + * Defaults to 25000000 if a 0 is used here. + * + *------------------------------------------------------------------------------ + */ +void si5351_init(uint8_t I2C_Address, uint8_t xtal_load_c, uint32_t ref_osc_freq) { + //printf("si5351_init\n"); + + Si5351_Config.clk0_freq=0; + Si5351_Config.lock_plla = SI5351_CLKNONE; + Si5351_Config.lock_pllb = SI5351_CLKNONE; + Si5351_Config.clk0_int_mode = 0; + Si5351_Config.clk1_int_mode = 0; + Si5351_Config.clk2_int_mode = 0; + Si5351_Config.plla_freq = 0; + Si5351_Config.pllb_freq = 0; + Si5351_Config.clk0_freq = 0; + Si5351_Config.clk1_freq = 0; + Si5351_Config.clk2_freq = 0; + Si5351_Config.xtal_freq = SI5351_XTAL_FREQ; + Si5351_Config.I2C_add = SI5351_BUS_BASE_ADDR << 1; + if (I2C_Address != 0) Si5351_Config.I2C_add=I2C_Address << 1; + // Set crystal load capacitance + uint8_t reg_val = 0x12; // 0b010010 reserved value bits + reg_val |= xtal_load_c; + si5351_write(SI5351_CRYSTAL_LOAD, reg_val); + + // DR: test of I2C + reg_val = si5351_read(SI5351_CRYSTAL_LOAD); + //printf("reg_val: 0x%02x\n", reg_val); + + // Change the ref osc freq if different from default + // Divide down if greater than 30 MHz + if (ref_osc_freq != 0) { + uint8_t reg_val; + reg_val = si5351_read(SI5351_PLL_INPUT_SOURCE); + // + // Clear the bits first + reg_val &= ~(SI5351_CLKIN_DIV_MASK); + if(ref_osc_freq <= 30000000) { + Si5351_Config.xtal_freq = ref_osc_freq; + reg_val |= SI5351_CLKIN_DIV_1; + } else if(ref_osc_freq > 30000000 && ref_osc_freq <= 60000000) { + Si5351_Config.xtal_freq = ref_osc_freq / 2; + reg_val |= SI5351_CLKIN_DIV_2; + } else if(ref_osc_freq > 60000000 && ref_osc_freq <= 100000000) { + Si5351_Config.xtal_freq = ref_osc_freq / 4; + reg_val |= SI5351_CLKIN_DIV_4; + } + si5351_write(SI5351_PLL_INPUT_SOURCE, reg_val); + } + // Initialize the CLK outputs according to flowchart in datasheet + // First, turn them off + si5351_write(16, 0x80); + si5351_write(17, 0x80); + si5351_write(18, 0x80); + + // Turn the clocks back on... + si5351_write(16, 0x0c); + si5351_write(17, 0x0c); + si5351_write(18, 0x0c); + + // Then reset the PLLs + si5351_pll_reset(SI5351_PLLA); + si5351_pll_reset(SI5351_PLLB); +} + + + + +/*------------------------------------------------------------------------------ + * @brief si5351_set_freq(uint64_t freq, uint64_t pll_freq, enum si5351_clock output) + * Sets the clock frequency of the specified CLK output + * + * @param freq - Output frequency in 0.01 Hz increments, so for 10MHz + * use 1000000000ULL + * + * @param pll_freq - Frequency of the PLL driving the Multisynth + * Use a 0 to have the function choose a PLL frequency + * + * @param clk - Clock output + * (use the si5351_clock enum) + *------------------------------------------------------------------------------ + */ +uint8_t si5351_set_freq(uint64_t freq, uint64_t pll_freq, enum si5351_clock clk) { + struct Si5351RegSet ms_reg; + enum si5351_pll target_pll; + uint8_t write_pll = 0; + uint8_t r_div = SI5351_OUTPUT_CLK_DIV_1; + uint8_t int_mode = 0; + uint8_t div_by_4 = 0; + + //printf("si5351_set_freq:\n"); + + // PLL bounds checking + if(pll_freq != 0) { + if ((pll_freq < SI5351_PLL_VCO_MIN * SI5351_FREQ_MULT) + || (pll_freq > SI5351_PLL_VCO_MAX * SI5351_FREQ_MULT)) { + return 1; + } + } + + //printf("freq: 0x%0x 0x%0x\n", (uint32_t)(freq >> 32), (uint32_t)(freq & 0xffffffff)); + + // Lower bounds check + if(freq < SI5351_CLKOUT_MIN_FREQ * SI5351_FREQ_MULT) { + freq = SI5351_CLKOUT_MIN_FREQ * SI5351_FREQ_MULT; + } + + // Upper bounds check + if(freq > SI5351_MULTISYNTH_MAX_FREQ * SI5351_FREQ_MULT) { + freq = SI5351_MULTISYNTH_MAX_FREQ * SI5351_FREQ_MULT; + } + + //printf("freq: 0x%0x 0x%0x\n", (uint32_t)(freq >> 32), (uint32_t)(freq & 0xffffffff)); + + // Select the proper R div value + r_div = si5351_select_r_div(&freq); + + // Calculate the synth parameters + // If pll_freq is 0 and freq < 150 MHz, let the algorithm pick a PLL frequency + if ((pll_freq) && (freq < SI5351_MULTISYNTH_DIVBY4_FREQ * SI5351_FREQ_MULT)) { + si5351_multisynth_calc(freq, pll_freq, &ms_reg); + write_pll = 0; + div_by_4 = 0; + int_mode = 0; + + switch(clk) { + case SI5351_CLK0: + Si5351_Config.clk0_freq = freq; + break; + case SI5351_CLK1: + Si5351_Config.clk1_freq = freq; + break; + case SI5351_CLK2: + Si5351_Config.clk2_freq = freq; + break; + default: + break; + } + } else { + // The PLL must be calculated and set by firmware when 150 MHz <= freq <= 160 MHz + if(freq >= SI5351_MULTISYNTH_DIVBY4_FREQ * SI5351_FREQ_MULT) { + pll_freq = si5351_multisynth_calc(freq, 0, &ms_reg); + write_pll = 1; + div_by_4 = 1; + int_mode = 1; + } + + // Determine which PLL to use + // CLK0 gets PLLA, CLK1 gets PLLB + // CLK2 gets PLLB if necessary + // Only good for Si5351A3 variant at the moment + switch(clk) { + case SI5351_CLK0: + //printf("case SI5351_CLK0\n"); + pll_freq = si5351_multisynth_calc(freq, 0, &ms_reg); + target_pll = SI5351_PLLA; + write_pll = 1; + si5351_set_ms_source(SI5351_CLK0, SI5351_PLLA); + + //printf("pll_freq: 0x%0x 0x%0x\n", (uint32_t)(pll_freq >> 32), (uint32_t)(pll_freq & 0xffffffff)); + //printf("freq: 0x%0x 0x%0x\n", (uint32_t)(freq >> 32), (uint32_t)(freq & 0xffffffff)); + + Si5351_Config.plla_freq = pll_freq; + Si5351_Config.clk0_freq = freq; + break; + case SI5351_CLK1: + // Check to see if PLLB is locked due to other output being < 1.024 MHz or >= 112.5 MHz + if(Si5351_Config.lock_pllb == SI5351_CLK2) { + // We can't have a 2nd output < 1.024 MHz or >= 112.5 MHz on the same PLL unless exact same freq, so exit + if((freq >= SI5351_MULTISYNTH_SHARE_MAX * SI5351_FREQ_MULT + || freq < SI5351_CLKOUT_MIN_FREQ * SI5351_FREQ_MULT * 128) + && freq != Si5351_Config.clk2_freq) { + Si5351_Config.clk1_freq = 0; + return 1; + } else { + // Else, set multisynth to same PLL freq as CLK2 + pll_freq = Si5351_Config.pllb_freq; + si5351_multisynth_calc(freq, pll_freq, &ms_reg); + write_pll = 0; + si5351_set_ms_source(SI5351_CLK1, SI5351_PLLB); + } + } else { + Si5351_Config.pllb_freq = pll_freq; + pll_freq = si5351_multisynth_calc(freq, 0, &ms_reg); + write_pll = 1; + si5351_set_ms_source(SI5351_CLK1, SI5351_PLLB); + } + + if(freq >= SI5351_MULTISYNTH_SHARE_MAX * SI5351_FREQ_MULT + || freq < SI5351_CLKOUT_MIN_FREQ * SI5351_FREQ_MULT * 128) { + Si5351_Config.lock_pllb = SI5351_CLK1; + + // Recalc and rewrite the multisynth parameters on CLK2 + if(Si5351_Config.clk2_freq != 0) { + struct Si5351RegSet ms_temp_reg; + r_div = si5351_select_r_div(&Si5351_Config.clk2_freq); + si5351_multisynth_calc(Si5351_Config.clk2_freq, \ + Si5351_Config.pllb_freq, &ms_temp_reg); + si5351_set_ms(SI5351_CLK2, ms_temp_reg, 0, r_div, 0); + } + } else { + Si5351_Config.lock_pllb = SI5351_CLKNONE; + } + + target_pll = SI5351_PLLB; + Si5351_Config.clk1_freq = freq; + break; + case SI5351_CLK2: + // Check to see if PLLB is locked due to other output being < 1.024 MHz or >= 112.5 MHz + if(Si5351_Config.lock_pllb == SI5351_CLK1) { + // We can't have a 2nd output < 1.024 MHz or >= 112.5 MHz on the same PLL unless exact same freq, so exit + if((freq >= SI5351_MULTISYNTH_SHARE_MAX * SI5351_FREQ_MULT + || freq < SI5351_CLKOUT_MIN_FREQ * SI5351_FREQ_MULT * 128) + && freq != Si5351_Config.clk2_freq) { + Si5351_Config.clk2_freq = 0; + return 1; + } else { + // Else, set multisynth to same PLL freq as CLK1 + pll_freq = Si5351_Config.pllb_freq; + si5351_multisynth_calc(freq, pll_freq, &ms_reg); + write_pll = 0; + si5351_set_ms_source(SI5351_CLK2, SI5351_PLLB); + } + } else { + // need to account for CLK2 set before CLK1 + Si5351_Config.pllb_freq = pll_freq; + pll_freq = si5351_multisynth_calc(freq, 0, &ms_reg); + write_pll = 1; + si5351_set_ms_source(SI5351_CLK2, SI5351_PLLB); + } + + if(freq >= SI5351_MULTISYNTH_SHARE_MAX * SI5351_FREQ_MULT + || freq < SI5351_CLKOUT_MIN_FREQ * SI5351_FREQ_MULT * 128) { + Si5351_Config.lock_pllb = SI5351_CLK2; + + if(Si5351_Config.clk1_freq != 0) { + // Recalc and rewrite the multisynth parameters on CLK1 + struct Si5351RegSet ms_temp_reg; + r_div = si5351_select_r_div(&Si5351_Config.clk1_freq); + si5351_multisynth_calc(Si5351_Config.clk1_freq, Si5351_Config.pllb_freq, &ms_temp_reg); + si5351_set_ms(SI5351_CLK1, ms_temp_reg, 0, r_div, 0); + } + } else { + Si5351_Config.lock_pllb = SI5351_CLKNONE; + } + + target_pll = SI5351_PLLB; + Si5351_Config.clk2_freq = freq; + break; + default: + return 1; + } + } + + // Set multisynth registers (MS must be set before PLL) + si5351_set_ms(clk, ms_reg, int_mode, r_div, div_by_4); + + // Set PLL if necessary + if (write_pll == 1) { + si5351_set_pll(pll_freq, target_pll); + } + + return 0; +} + +/*------------------------------------------------------------------------------ + * @brief si5351_set_pll(uint64_t pll_freq, enum si5351_pll target_pll) + * + * Set the specified PLL to a specific oscillation frequency + * + * @param pll_freq - Desired PLL frequency + * + * @param target_pll - Which PLL to set + * (use the si5351_pll enum) + *------------------------------------------------------------------------------ + */ +void si5351_set_pll(uint64_t pll_freq, enum si5351_pll target_pll) { + struct Si5351RegSet pll_reg; + + si5351_pll_calc(pll_freq, &pll_reg, Si5351_Config.ref_correction); + + // Derive the register values to write + + // Prepare an array for parameters to be written to + uint8_t *params; + uint8_t buffer[20]; + uint8_t i = 0; + uint8_t temp; + params = (uint8_t *)&buffer; + + // Registers 26-27 + temp = ((pll_reg.p3 >> 8) & 0xFF); + params[i++] = temp; + + temp = (uint8_t)(pll_reg.p3 & 0xFF); + params[i++] = temp; + + // Register 28 + temp = (uint8_t)((pll_reg.p1 >> 16) & 0x03); + params[i++] = temp; + + // Registers 29-30 + temp = (uint8_t)((pll_reg.p1 >> 8) & 0xFF); + params[i++] = temp; + + temp = (uint8_t)(pll_reg.p1 & 0xFF); + params[i++] = temp; + + // Register 31 + temp = (uint8_t)((pll_reg.p3 >> 12) & 0xF0); + temp += (uint8_t)((pll_reg.p2 >> 16) & 0x0F); + params[i++] = temp; + + // Registers 32-33 + temp = (uint8_t)((pll_reg.p2 >> 8) & 0xFF); + params[i++] = temp; + + temp = (uint8_t)(pll_reg.p2 & 0xFF); + params[i++] = temp; + + // Write the parameters + if (target_pll == SI5351_PLLA) { + si5351_write_bulk(SI5351_PLLA_PARAMETERS, i, params); + } else if (target_pll == SI5351_PLLB) { + si5351_write_bulk(SI5351_PLLB_PARAMETERS, i, params); + } +} + + + + +/*------------------------------------------------------------------------------ + * @brief si5351_pll_reset(enum si5351_pll target_pll) + * target_pll - Which PLL to reset + * (use the si5351_pll enum) + * + * Apply a reset to the indicated PLL. + * @param SI5351_PLL_RESET_A or SI5351_PLL_RESET_B + * + * @return none + *------------------------------------------------------------------------------ + */ +void si5351_pll_reset(enum si5351_pll target_pll) { + if(target_pll == SI5351_PLLA) { + si5351_write(SI5351_PLL_RESET, SI5351_PLL_RESET_A); + } else if(target_pll == SI5351_PLLB) { + si5351_write(SI5351_PLL_RESET, SI5351_PLL_RESET_B); + } +} + +/*------------------------------------------------------------------------------ + * @brief set_int(enum si5351_clock clk, uint8_t int_mode) + * Set the indicated multisynth into integer mode. + * + * @param clk - Clock output + * (use the si5351_clock enum) + * + * @param enable - Set to 1 to enable, 0 to disable + * + *------------------------------------------------------------------------------ + */ +void si5351_set_int(enum si5351_clock clk, uint8_t enable){ + uint8_t reg_val; + reg_val = si5351_read(SI5351_CLK0_CTRL + (uint8_t)clk); + + if(enable == 1) { + reg_val |= (SI5351_CLK_INTEGER_MODE); + } else { + reg_val &= ~(SI5351_CLK_INTEGER_MODE); + } + + si5351_write(SI5351_CLK0_CTRL + (uint8_t)clk, reg_val); + + // Integer mode indication + switch(clk) { + case SI5351_CLK0: + Si5351_Config.clk0_int_mode = enable; + break; + case SI5351_CLK1: + Si5351_Config.clk1_int_mode = enable; + break; + case SI5351_CLK2: + Si5351_Config.clk2_int_mode = enable; + break; + default: + break; + } +} + + +/*------------------------------------------------------------------------------ + * @brief si5351_set_clock_pwr(enum si5351_clock clk, uint8_t pwr) + * Enable or disable power to a clock output (a power + * saving feature). + * + * @param clk - Clock output + * (use the si5351_clock enum) + * + * @param pwr - Set to 1 to enable, 0 to disable + * + *------------------------------------------------------------------------------ + */ +void si5351_set_clock_pwr(enum si5351_clock clk, uint8_t pwr) { + uint8_t reg_val; + reg_val = si5351_read(SI5351_CLK0_CTRL + (uint8_t)clk); + if(pwr == 1) { + reg_val &= 0b01111111; + } else { + reg_val |= 0b10000000; + } + si5351_write(SI5351_CLK0_CTRL + (uint8_t)clk, reg_val); +} + +/*------------------------------------------------------------------------------ + * @brief si5351_set_clock_invert(enum si5351_clock clk, uint8_t inv) + * Enable to invert the clock output waveform. + * + * @param clk - Clock output + * (use the si5351_clock enum) + * + * @param inv - Set to 1 to enable, 0 to disable + * + * ----------------------------------------------------------------------------- + */ +void si5351_set_clock_invert(enum si5351_clock clk, uint8_t inv) { + uint8_t reg_val; + reg_val = si5351_read(SI5351_CLK0_CTRL + (uint8_t)clk); + if(inv == 1) { + reg_val |= (SI5351_CLK_INVERT); + } else { + reg_val &= ~(SI5351_CLK_INVERT); + } + si5351_write(SI5351_CLK0_CTRL + (uint8_t)clk, reg_val); +} + + +/*------------------------------------------------------------------------------ + * @brief si5351_set_ms(enum si5351_clock clk, struct Si5351RegSet ms_reg, + * uint8_t int_mode, uint8_t r_div, uint8_t div_by_4) + * + * Set the specified multisynth parameters. Not normally needed, but public for advanced users. + * + * @param clk - Clock output + * (use the si5351_clock enum) + * + * @param int_mode - Set integer mode + * Set to 1 to enable, 0 to disable + * + * @param r_div - Desired r_div ratio + * + * @param div_by_4 - Set Divide By 4 mode + * Set to 1 to enable, 0 to disable + *------------------------------------------------------------------------------ + */ +void si5351_set_ms(enum si5351_clock clk, struct Si5351RegSet ms_reg, uint8_t int_mode, uint8_t r_div, uint8_t div_by_4) { + uint8_t *params; + uint8_t buffer[20]; + uint8_t i = 0; + uint8_t temp; + uint8_t reg_val; + + params = (uint8_t *)&buffer; + // Registers 42-43 for CLK0 + temp = (uint8_t)((ms_reg.p3 >> 8) & 0xFF); + params[i++] = temp; + + temp = (uint8_t)(ms_reg.p3 & 0xFF); + params[i++] = temp; + + // Register 44 for CLK0 + reg_val = si5351_read((SI5351_CLK0_PARAMETERS + 2) + (clk * 8)); + reg_val &= ~(0x03); + temp = reg_val | ((uint8_t)((ms_reg.p1 >> 16) & 0x03)); + params[i++] = temp; + + // Registers 45-46 for CLK0 + temp = (uint8_t)((ms_reg.p1 >> 8) & 0xFF); + params[i++] = temp; + + temp = (uint8_t)(ms_reg.p1 & 0xFF); + params[i++] = temp; + + // Register 47 for CLK0 + temp = (uint8_t)((ms_reg.p3 >> 12) & 0xF0); + temp += (uint8_t)((ms_reg.p2 >> 16) & 0x0F); + params[i++] = temp; + + // Registers 48-49 for CLK0 + temp = (uint8_t)((ms_reg.p2 >> 8) & 0xFF); + params[i++] = temp; + + temp = (uint8_t)(ms_reg.p2 & 0xFF); + params[i++] = temp; + + // Write the parameters + switch (clk) { + case SI5351_CLK0: + si5351_write_bulk(SI5351_CLK0_PARAMETERS, i, params); + break; + case SI5351_CLK1: + si5351_write_bulk(SI5351_CLK1_PARAMETERS, i, params); + break; + case SI5351_CLK2: + si5351_write_bulk(SI5351_CLK2_PARAMETERS, i, params); + break; + case SI5351_CLK3: + si5351_write_bulk(SI5351_CLK3_PARAMETERS, i, params); + break; + case SI5351_CLK4: + si5351_write_bulk(SI5351_CLK4_PARAMETERS, i, params); + break; + case SI5351_CLK5: + si5351_write_bulk(SI5351_CLK5_PARAMETERS, i, params); + break; + case SI5351_CLK6: + si5351_write_bulk(SI5351_CLK6_PARAMETERS, i, params); + break; + case SI5351_CLK7: + si5351_write_bulk(SI5351_CLK7_PARAMETERS, i, params); + break; + case SI5351_CLKNONE: + return; + } + + si5351_set_int(clk, int_mode); + si5351_ms_div(clk, r_div, div_by_4); +} + +void si5351_ms_div(enum si5351_clock clk, uint8_t r_div, uint8_t div_by_4) { + uint8_t reg_val, reg_addr; + + switch(clk) { + case SI5351_CLK0: + reg_addr = SI5351_CLK0_PARAMETERS + 2; + break; + case SI5351_CLK1: + reg_addr = SI5351_CLK1_PARAMETERS + 2; + break; + case SI5351_CLK2: + reg_addr = SI5351_CLK2_PARAMETERS + 2; + break; + case SI5351_CLK3: + reg_addr = SI5351_CLK3_PARAMETERS + 2; + break; + case SI5351_CLK4: + reg_addr = SI5351_CLK4_PARAMETERS + 2; + break; + case SI5351_CLK5: + reg_addr = SI5351_CLK5_PARAMETERS + 2; + break; + case SI5351_CLK6: + return; + case SI5351_CLK7: + return; + case SI5351_CLKNONE: + return; + default: + return; + } + + reg_val = si5351_read(reg_addr); + + // Clear the relevant bits + reg_val &= ~(0x7c); + + if(div_by_4 == 0) { + reg_val &= ~(SI5351_OUTPUT_CLK_DIVBY4); + } else { + reg_val |= (SI5351_OUTPUT_CLK_DIVBY4); + } + + reg_val |= (r_div << SI5351_OUTPUT_CLK_DIV_SHIFT); + + si5351_write(reg_addr, reg_val); +} + +/*------------------------------------------------------------------------------ + * @brief set_ms_source(enum si5351_clock clk, enum si5351_pll pll) + * Set the desired PLL source for a multisynth. + * + * @param clk - Clock output + * (use the si5351_clock enum) + * + * @param pll - Which PLL to use as the source + * (use the si5351_pll enum) + * + *------------------------------------------------------------------------------ + */ +void si5351_set_ms_source(enum si5351_clock clk, enum si5351_pll pll) { + uint8_t reg_val; + + reg_val = si5351_read(SI5351_CLK0_CTRL + (uint8_t)clk); + + if(pll == SI5351_PLLA) { + reg_val &= ~(SI5351_CLK_PLL_SELECT); + } else if (pll == SI5351_PLLB) { + reg_val |= SI5351_CLK_PLL_SELECT; + } + si5351_write(SI5351_CLK0_CTRL + (uint8_t)clk, reg_val); +} + +uint64_t si5351_multisynth_calc(uint64_t freq, uint64_t pll_freq, struct Si5351RegSet *reg) { + uint64_t lltmp; + uint32_t a, b, c, p1, p2, p3; + uint8_t divby4; + uint8_t ret_val = 0; + + // Multisynth bounds checking + if (freq > SI5351_MULTISYNTH_MAX_FREQ * SI5351_FREQ_MULT) { + freq = SI5351_MULTISYNTH_MAX_FREQ * SI5351_FREQ_MULT; + } + if (freq < SI5351_MULTISYNTH_MIN_FREQ * SI5351_FREQ_MULT) { + freq = SI5351_MULTISYNTH_MIN_FREQ * SI5351_FREQ_MULT; + } + + divby4 = 0; + if (freq >= SI5351_MULTISYNTH_DIVBY4_FREQ * SI5351_FREQ_MULT) { + divby4 = 1; + } + + if(pll_freq == 0) { + // Find largest integer divider for max + // VCO frequency and given target frequency + if(divby4 == 0) { + lltmp = SI5351_PLL_VCO_MAX * SI5351_FREQ_MULT; + do_div(lltmp, freq); + a = (uint32_t)lltmp; + } else { + a = 4; + } + + b = 0; + c = 1; + pll_freq = a * freq; + } else { + // Preset PLL, so return the actual freq for these params instead of PLL freq + ret_val = 1; + // Determine integer part of feedback equation + a = pll_freq / freq; + if (a < SI5351_MULTISYNTH_A_MIN) { + freq = pll_freq / SI5351_MULTISYNTH_A_MIN; + } + if (a > SI5351_MULTISYNTH_A_MAX) { + freq = pll_freq / SI5351_MULTISYNTH_A_MAX; + } + b = (pll_freq % freq * RFRAC_DENOM) / freq; + c = b ? RFRAC_DENOM : 1; + } + + // Calculate parameters + if (divby4 == 1) { + p3 = 1; + p2 = 0; + p1 = 0; + } else { + p1 = 128 * a + ((128 * b) / c) - 512; + p2 = 128 * b - c * ((128 * b) / c); + p3 = c; + } + + reg->p1 = p1; + reg->p2 = p2; + reg->p3 = p3; + + if(ret_val == 0) { + return pll_freq; + } else { + return freq; + } +} + +uint64_t si5351_pll_calc(uint64_t freq, struct Si5351RegSet *reg, int32_t correction) { + uint64_t ref_freq = Si5351_Config.xtal_freq * SI5351_FREQ_MULT; + uint32_t a, b, c, p1, p2, p3; + uint64_t lltmp, denom; + + + // Factor calibration value into nominal crystal frequency + // Measured in parts-per-billion + + ref_freq = ref_freq + (int32_t)((((((int64_t)correction) << 31) / 1000000000LL) * ref_freq) >> 31); + + // PLL bounds checking + if (freq < SI5351_PLL_VCO_MIN * SI5351_FREQ_MULT) { + freq = SI5351_PLL_VCO_MIN * SI5351_FREQ_MULT; + } + if (freq > SI5351_PLL_VCO_MAX * SI5351_FREQ_MULT) { + freq = SI5351_PLL_VCO_MAX * SI5351_FREQ_MULT; + } + + // Determine integer part of feedback equation + a = freq / ref_freq; + + if (a < SI5351_PLL_A_MIN) { + freq = ref_freq * SI5351_PLL_A_MIN; + } + if (a > SI5351_PLL_A_MAX) { + freq = ref_freq * SI5351_PLL_A_MAX; + } + + // Find best approximation for b/c = fVCO mod fIN + denom = 1000ULL * 1000ULL; + lltmp = freq % ref_freq; + lltmp *= denom; + do_div(lltmp, ref_freq); + + b = (((uint64_t)(freq % ref_freq)) * RFRAC_DENOM) / ref_freq; + c = b ? RFRAC_DENOM : 1; + + // Calculate parameters + p1 = 128 * a + ((128 * b) / c) - 512; + p2 = 128 * b - c * ((128 * b) / c); + p3 = c; + + // Recalculate frequency as fIN * (a + b/c) + lltmp = ref_freq; + lltmp *= b; + do_div(lltmp, c); + freq = lltmp; + freq += ref_freq * a; + + reg->p1 = p1; + reg->p2 = p2; + reg->p3 = p3; + + return freq; +} + +uint8_t si5351_select_r_div(uint64_t *freq) { + uint8_t r_div = SI5351_OUTPUT_CLK_DIV_1; + + // Choose the correct R divider + if((*freq >= SI5351_CLKOUT_MIN_FREQ * SI5351_FREQ_MULT) + && (*freq < SI5351_CLKOUT_MIN_FREQ * SI5351_FREQ_MULT * 2)) { + r_div = SI5351_OUTPUT_CLK_DIV_128; + *freq *= 128ULL; + } else if ((*freq >= SI5351_CLKOUT_MIN_FREQ * SI5351_FREQ_MULT * 2) + && (*freq < SI5351_CLKOUT_MIN_FREQ * SI5351_FREQ_MULT * 4)) { + r_div = SI5351_OUTPUT_CLK_DIV_64; + *freq *= 64ULL; + } else if ((*freq >= SI5351_CLKOUT_MIN_FREQ * SI5351_FREQ_MULT * 4) + && (*freq < SI5351_CLKOUT_MIN_FREQ * SI5351_FREQ_MULT * 8)) { + r_div = SI5351_OUTPUT_CLK_DIV_32; + *freq *= 32ULL; + } else if ((*freq >= SI5351_CLKOUT_MIN_FREQ * SI5351_FREQ_MULT * 8) + && (*freq < SI5351_CLKOUT_MIN_FREQ * SI5351_FREQ_MULT * 16)) { + r_div = SI5351_OUTPUT_CLK_DIV_16; + *freq *= 16ULL; + } else if ((*freq >= SI5351_CLKOUT_MIN_FREQ * SI5351_FREQ_MULT * 16) + && (*freq < SI5351_CLKOUT_MIN_FREQ * SI5351_FREQ_MULT * 32)) { + r_div = SI5351_OUTPUT_CLK_DIV_8; + *freq *= 8ULL; + } else if ((*freq >= SI5351_CLKOUT_MIN_FREQ * SI5351_FREQ_MULT * 32) + && (*freq < SI5351_CLKOUT_MIN_FREQ * SI5351_FREQ_MULT * 64)) { + r_div = SI5351_OUTPUT_CLK_DIV_4; + *freq *= 4ULL; + } else if ((*freq >= SI5351_CLKOUT_MIN_FREQ * SI5351_FREQ_MULT * 64) + && (*freq < SI5351_CLKOUT_MIN_FREQ * SI5351_FREQ_MULT * 128)) { + r_div = SI5351_OUTPUT_CLK_DIV_2; + *freq *= 2ULL; + } + + return r_div; +} + diff --git a/libcodec2-android/src/codec2/stm32/src/sine.c b/libcodec2-android/src/codec2/stm32/src/sine.c new file mode 100644 index 0000000..be4df00 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/src/sine.c @@ -0,0 +1,648 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: sine.c + AUTHOR......: David Rowe + DATE CREATED: 19/8/2010 + + Sinusoidal analysis and synthesis functions. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 1990-2010 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +/*---------------------------------------------------------------------------*\ + + INCLUDES + +\*---------------------------------------------------------------------------*/ + +#include +#include +#include + +#include "defines.h" +#include "sine.h" +#include "kiss_fft.h" + +#define HPF_BETA 0.125 + +/*---------------------------------------------------------------------------*\ + + HEADERS + +\*---------------------------------------------------------------------------*/ + +void hs_pitch_refinement(MODEL *model, COMP Sw[], float pmin, float pmax, + float pstep); + +/*---------------------------------------------------------------------------*\ + + FUNCTIONS + +\*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: make_analysis_window + AUTHOR......: David Rowe + DATE CREATED: 11/5/94 + + Init function that generates the time domain analysis window and it's DFT. + +\*---------------------------------------------------------------------------*/ + +void make_analysis_window(kiss_fft_cfg fft_fwd_cfg, float w[], COMP W[]) +{ + float m; + COMP wshift[FFT_ENC]; + COMP temp; + int i,j; + + /* + Generate Hamming window centered on M-sample pitch analysis window + + 0 M/2 M-1 + |-------------|-------------| + |-------|-------| + NW samples + + All our analysis/synthsis is centred on the M/2 sample. + */ + + m = 0.0; + for(i=0; iWo + 5; + pmin = TWO_PI/model->Wo - 5; + pstep = 1.0; + hs_pitch_refinement(model,Sw,pmin,pmax,pstep); + + /* Fine refinement */ + + pmax = TWO_PI/model->Wo + 1; + pmin = TWO_PI/model->Wo - 1; + pstep = 0.25; + hs_pitch_refinement(model,Sw,pmin,pmax,pstep); + + /* Limit range */ + + if (model->Wo < TWO_PI/P_MAX) + model->Wo = TWO_PI/P_MAX; + if (model->Wo > TWO_PI/P_MIN) + model->Wo = TWO_PI/P_MIN; + + model->L = floor(PI/model->Wo); +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: hs_pitch_refinement + AUTHOR......: David Rowe + DATE CREATED: 27/5/94 + + Harmonic sum pitch refinement function. + + pmin pitch search range minimum + pmax pitch search range maximum + step pitch search step size + model current pitch estimate in model.Wo + + model refined pitch estimate in model.Wo + +\*---------------------------------------------------------------------------*/ + +void hs_pitch_refinement(MODEL *model, COMP Sw[], float pmin, float pmax, float pstep) +{ + int m; /* loop variable */ + int b; /* bin for current harmonic centre */ + float E; /* energy for current pitch*/ + float Wo; /* current "test" fundamental freq. */ + float Wom; /* Wo that maximises E */ + float Em; /* mamimum energy */ + float r, one_on_r; /* number of rads/bin */ + float p; /* current pitch */ + + /* Initialisation */ + + model->L = PI/model->Wo; /* use initial pitch est. for L */ + Wom = model->Wo; + Em = 0.0; + r = TWO_PI/FFT_ENC; + one_on_r = 1.0/r; + + /* Determine harmonic sum for a range of Wo values */ + + for(p=pmin; p<=pmax; p+=pstep) { + E = 0.0; + Wo = TWO_PI/p; + + /* Sum harmonic magnitudes */ + for(m=1; m<=model->L; m++) { + b = (int)(m*Wo*one_on_r + 0.5); + E += Sw[b].real*Sw[b].real + Sw[b].imag*Sw[b].imag; + } + /* Compare to see if this is a maximum */ + + if (E > Em) { + Em = E; + Wom = Wo; + } + } + + model->Wo = Wom; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: estimate_amplitudes + AUTHOR......: David Rowe + DATE CREATED: 27/5/94 + + Estimates the complex amplitudes of the harmonics. + +\*---------------------------------------------------------------------------*/ + +void estimate_amplitudes(MODEL *model, COMP Sw[], COMP W[], int est_phase) +{ + int i,m; /* loop variables */ + int am,bm; /* bounds of current harmonic */ + int b; /* DFT bin of centre of current harmonic */ + float den; /* denominator of amplitude expression */ + float r, one_on_r; /* number of rads/bin */ + int offset; + COMP Am; + + r = TWO_PI/FFT_ENC; + one_on_r = 1.0/r; + + for(m=1; m<=model->L; m++) { + den = 0.0; + am = (int)((m - 0.5)*model->Wo*one_on_r + 0.5); + bm = (int)((m + 0.5)*model->Wo*one_on_r + 0.5); + b = (int)(m*model->Wo/r + 0.5); + + /* Estimate ampltude of harmonic */ + + den = 0.0; + Am.real = Am.imag = 0.0; + offset = FFT_ENC/2 - (int)(m*model->Wo*one_on_r + 0.5); + for(i=am; iA[m] = sqrtf(den); + + if (est_phase) { + + /* Estimate phase of harmonic, this is expensive in CPU for + embedded devicesso we make it an option */ + + model->phi[m] = atan2(Sw[b].imag,Sw[b].real); + } + } +} + +/*---------------------------------------------------------------------------*\ + + est_voicing_mbe() + + Returns the error of the MBE cost function for a fiven F0. + + Note: I think a lot of the operations below can be simplified as + W[].imag = 0 and has been normalised such that den always equals 1. + +\*---------------------------------------------------------------------------*/ + +float est_voicing_mbe( + MODEL *model, + COMP Sw[], + COMP W[], + COMP Sw_[], /* DFT of all voiced synthesised signal */ + /* useful for debugging/dump file */ + COMP Ew[], /* DFT of error */ + float prev_Wo) +{ + int i,l,al,bl,m; /* loop variables */ + COMP Am; /* amplitude sample for this band */ + int offset; /* centers Hw[] about current harmonic */ + float den; /* denominator of Am expression */ + float error; /* accumulated error between original and synthesised */ + float Wo; + float sig, snr; + float elow, ehigh, eratio; + float sixty; + + sig = 1E-4; + for(l=1; l<=model->L/4; l++) { + sig += model->A[l]*model->A[l]; + } + for(i=0; iWo; + error = 1E-4; + + /* Just test across the harmonics in the first 1000 Hz (L/4) */ + + for(l=1; l<=model->L/4; l++) { + Am.real = 0.0; + Am.imag = 0.0; + den = 0.0; + al = ceil((l - 0.5)*Wo*FFT_ENC/TWO_PI); + bl = ceil((l + 0.5)*Wo*FFT_ENC/TWO_PI); + + /* Estimate amplitude of harmonic assuming harmonic is totally voiced */ + + offset = FFT_ENC/2 - l*Wo*FFT_ENC/TWO_PI + 0.5; + for(m=al; m V_THRESH) + model->voiced = 1; + else + model->voiced = 0; + + /* post processing, helps clean up some voicing errors ------------------*/ + + /* + Determine the ratio of low freqency to high frequency energy, + voiced speech tends to be dominated by low frequency energy, + unvoiced by high frequency. This measure can be used to + determine if we have made any gross errors. + */ + + elow = ehigh = 1E-4; + for(l=1; l<=model->L/2; l++) { + elow += model->A[l]*model->A[l]; + } + for(l=model->L/2; l<=model->L; l++) { + ehigh += model->A[l]*model->A[l]; + } + eratio = 10.0*log10f(elow/ehigh); + + /* Look for Type 1 errors, strongly V speech that has been + accidentally declared UV */ + + if (model->voiced == 0) + if (eratio > 10.0) + model->voiced = 1; + + /* Look for Type 2 errors, strongly UV speech that has been + accidentally declared V */ + + if (model->voiced == 1) { + if (eratio < -10.0) + model->voiced = 0; + + /* A common source of Type 2 errors is the pitch estimator + gives a low (50Hz) estimate for UV speech, which gives a + good match with noise due to the close harmoonic spacing. + These errors are much more common than people with 50Hz3 + pitch, so we have just a small eratio threshold. */ + + sixty = 60.0*TWO_PI/FS; + if ((eratio < -4.0) && (model->Wo <= sixty)) + model->voiced = 0; + } + //printf(" v: %d snr: %f eratio: %3.2f %f\n",model->voiced,snr,eratio,dF0); + + return snr; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: make_synthesis_window + AUTHOR......: David Rowe + DATE CREATED: 11/5/94 + + Init function that generates the trapezoidal (Parzen) sythesis window. + +\*---------------------------------------------------------------------------*/ + +void make_synthesis_window(float Pn[]) +{ + int i; + float win; + + /* Generate Parzen window in time domain */ + + win = 0.0; + for(i=0; i 10ms sound poor. The effect can also + be seen when synthesising test signals like single sine waves, some + sort of amplitude modulation at the frame rate. + + Another possibility is using a larger FFT size (1024 or 2048). + */ + +#define FFT_SYNTHESIS +#ifdef FFT_SYNTHESIS + /* Now set up frequency domain synthesised speech */ + for(l=1; l<=model->L; l++) { + //for(l=model->L/2; l<=model->L; l++) { + //for(l=1; l<=model->L/4; l++) { + b = (int)(l*model->Wo*FFT_DEC/TWO_PI + 0.5); + if (b > ((FFT_DEC/2)-1)) { + b = (FFT_DEC/2)-1; + } + Sw_[b].real = model->A[l]*cosf(model->phi[l]); + Sw_[b].imag = model->A[l]*sinf(model->phi[l]); + Sw_[FFT_DEC-b].real = Sw_[b].real; + Sw_[FFT_DEC-b].imag = -Sw_[b].imag; + } + + /* Perform inverse DFT */ + + kiss_fft(fft_inv_cfg, (kiss_fft_cpx *)Sw_, (kiss_fft_cpx *)sw_); +#else + /* + Direct time domain synthesis using the cos() function. Works + well at 10ms and 20ms frames rates. Note synthesis window is + still used to handle overlap-add between adjacent frames. This + could be simplified as we don't need to synthesise where Pn[] + is zero. + */ + for(l=1; l<=model->L; l++) { + for(i=0,j=-N+1; iA[l]*cos(j*model->Wo*l + model->phi[l]); + } + for(i=N-1,j=0; i<2*N; i++,j++) + Sw_[j].real += 2.0*model->A[l]*cos(j*model->Wo*l + model->phi[l]); + } +#endif + + /* Overlap add to previous samples */ + + for(i=0; i. +*/ + +#define _CPTT GPIO_Pin_10 +#define LED_PWR GPIO_Pin_12 +#define LED_PTT GPIO_Pin_13 +#define LED_RT GPIO_Pin_14 +#define LED_ERR GPIO_Pin_15 +#define SWITCH_PTT GPIO_Pin_7 +#define SWITCH_SELECT GPIO_Pin_0 +#define SWITCH_BACK GPIO_Pin_1 +#define EXT_PTT GPIO_Pin_8 + +#include +#include +#include "sm1000_leds_switches.h" + +void sm1000_leds_switches_init(void) { + GPIO_InitTypeDef GPIO_InitStruct; + + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE); + + /* output pins */ + + GPIO_InitStruct.GPIO_Pin = LED_PWR | LED_PTT | LED_RT | LED_ERR | _CPTT; + GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT; + GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz; + GPIO_InitStruct.GPIO_OType = GPIO_OType_PP; + GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL; + GPIO_Init(GPIOD, &GPIO_InitStruct); + + /* input pins */ + + GPIO_InitStruct.GPIO_Pin = SWITCH_PTT | SWITCH_SELECT | SWITCH_BACK; + GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN; + GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz; + GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL; /* we have our own external pull ups */ + GPIO_Init(GPIOD, &GPIO_InitStruct); + + GPIO_InitStruct.GPIO_Pin = EXT_PTT; + GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN; + GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz; + GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP; /* use internal pull up */ + GPIO_Init(GPIOD, &GPIO_InitStruct); + + +} + +void led_pwr(int state) { + if (state > 0) + GPIOD->ODR |= (1 << 12); + else if (state < 0) + GPIOD->ODR ^= (1 << 12); + else + GPIOD->ODR &= ~(1 << 12); +} + +void led_ptt(int state) { + if (state > 0) + GPIOD->ODR |= (1 << 13); + else if (state < 0) + GPIOD->ODR |= (1 << 13); + else + GPIOD->ODR &= ~(1 << 13); +} + +void led_rt(int state) { + if (state > 0) + GPIOD->ODR |= (1 << 14); + else if (state < 0) + GPIOD->ODR ^= (1 << 14); + else + GPIOD->ODR &= ~(1 << 14); +} + +void led_err(int state) { + if (state > 0) + GPIOD->ODR |= (1 << 15); + else if (state < 0) + GPIOD->ODR ^= (1 << 15); + else + GPIOD->ODR &= ~(1 << 15); +} + +void not_cptt(int state) { + if (state) + GPIOD->ODR |= (1 << 10); + else + GPIOD->ODR &= ~(1 << 10); +} + +int switch_ptt(void) { + return GPIOD->IDR & (1 << 7); +} + +int switch_select(void) { + return GPIOD->IDR & (1 << 0); +} + +int switch_back(void) { + return GPIOD->IDR & (1 << 1); +} + +int ext_ptt(void) { + return GPIOD->IDR & (1 << 8); +} + +/* + FUNCTION: ColorfulRingOfDeath() + AUTHOR..: xenovacivus + + Colourful ring of death, blink LEDs like crazy forever if something + really nasty happens. Adapted from USB Virtual COM Port (VCP) + module adapted from code I found here: + + https://github.com/xenovacivus/STM32DiscoveryVCP + + Call this to indicate a failure. Blinks the STM32F4 discovery LEDs + in sequence. At 168Mhz, the blinking will be very fast - about 5 + Hz. Keep that in mind when debugging, knowing the clock speed + might help with debugging. +*/ + +int mycode; /* examine this with debugger if it dies */ + +void ColorfulRingOfDeath(int code) { + mycode = code; + uint16_t ring = 1; + while (1) { + uint32_t count = 0; + while (count++ < 5000000); + + GPIOD->BSRRH = (ring << 12); + ring = ring << 1; + if (ring >= 1<<4) { + ring = 1; + } + GPIOD->BSRRL = (ring << 12); + } +} +void HardFault_Handler(void) { ColorfulRingOfDeath(1); } +void MemManage_Handler(void) { ColorfulRingOfDeath(2); } +void BusFault_Handler(void) { ColorfulRingOfDeath(3); } +void UsageFault_Handler(void){ ColorfulRingOfDeath(4); } + + +void switch_tick(struct switch_t* const sw) +{ + if (sw->sw != sw->raw) { + /* State transition, reset timer */ + if (sw->state == SW_STEADY) + sw->last = sw->sw; + sw->state = SW_DEBOUNCE; + sw->timer = DEBOUNCE_DELAY; + sw->sw = sw->raw; + } else if (sw->state == SW_DEBOUNCE) { + if (sw->timer > 0) { + /* Steady so far, keep waiting */ + sw->timer--; + } else { + /* Steady state reached */ + sw->state = SW_STEADY; + } + } else if (sw->sw) { + /* Hold state. Yes this will wrap, but who cares? */ + sw->timer++; + } +} + +void switch_update(struct switch_t* const sw, uint8_t state) +{ + sw->raw = state; + if (sw->raw == sw->sw) + return; + + if (sw->state == SW_STEADY) + sw->last = sw->sw; + sw->timer = DEBOUNCE_DELAY; + sw->sw = sw->raw; + sw->state = SW_DEBOUNCE; +} + +uint32_t switch_pressed(const struct switch_t* const sw) +{ + if ((sw->state == SW_STEADY) && sw->sw) + return sw->timer; + return 0; +} + +int switch_released(const struct switch_t* const sw) +{ + if (sw->state != SW_STEADY) + return 0; + if (!sw->last) + return 0; + if (sw->sw) + return 0; + return 1; +} + +void switch_ack(struct switch_t* const sw) +{ + if (sw->state == SW_STEADY) + sw->last = sw->sw; +} diff --git a/libcodec2-android/src/codec2/stm32/src/sm1000_leds_switches_ut.c b/libcodec2-android/src/codec2/stm32/src/sm1000_leds_switches_ut.c new file mode 100644 index 0000000..9209bfc --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/src/sm1000_leds_switches_ut.c @@ -0,0 +1,41 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: sm1000_leds_switches_ut.c + AUTHOR......: David Rowe + DATE CREATED: August 5 2014 + + Unit Test program for the SM1000 switches and LEDs driver. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2014 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include "sm1000_leds_switches.h" + +int main(void) { + sm1000_leds_switches_init(); + + while(1) { + led_pwr(switch_select()); + led_ptt(switch_ptt()); + led_rt(switch_back()); + led_err(!switch_back()); + } +} + diff --git a/libcodec2-android/src/codec2/stm32/src/sm1000_main.c b/libcodec2-android/src/codec2/stm32/src/sm1000_main.c new file mode 100644 index 0000000..ff3cc00 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/src/sm1000_main.c @@ -0,0 +1,1417 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: sm1000_main.c + AUTHOR......: David Rowe + DATE CREATED: August 5 2014 + + Main program for SM1000. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2014 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include "stm32f4_adc.h" +#include "stm32f4_dac.h" +#include "stm32f4_vrom.h" +#include "stm32f4_usart.h" +#include "freedv_api.h" +#include "codec2_fdmdv.h" +#include "sm1000_leds_switches.h" +#include "memtools.h" +#include +#include +#include +#include + +#include "sfx.h" +#include "sounds.h" +#include "morse.h" +#include "menu.h" +#include "tot.h" + +#define VERSION "V4" +#define FORTY_MS_16K (0.04*16000) /* 40ms of samples at 16 kHz */ +#define FREEDV_NSAMPLES_16K (2*FREEDV_NSAMPLES) +#define CCM (void*)0x10000000 /* start of 64k CCM memory */ +#define CCM_LEN 0x10000 /* start of 64k CCM memory */ + +#define MENU_LED_PERIOD 100 +#define ANNOUNCE_DELAY 1500 +#define HOLD_DELAY 1000 +#define MENU_DELAY 1000 + +#define STATE_RX 0x00 /*!< Receive state: normal operation */ +#define STATE_TX 0x10 /*!< Transmit state: normal operation */ +#define STATE_RX_TOT 0x01 /*!< Receive state: after time-out */ +#define STATE_MENU 0x20 /*!< Menu state: normal operation */ + +/*! + * State machine states. We consider our state depending on what events + * are in effect at the start of the main() loop. For buttons, we have + * the following events: + * + * PRESS: Short-succession down-and-up event. (<1 second) + * DOWN: Button press event with no release. + * UP: Button release event. + * HOLD: Button press for a minimum duration of 1 second without + * release. + * + * We also have some other state machines: + * TOT: + * IDLE: No time-out event + * WARN: Warning period reached event + * WARN_TICK: Next warning tick due event + * TIMEOUT: Cease transmit event + * + * We consider ourselves to be in one of a few finite states: + * + * STATE_RX: Normal receive state. + * Conditions: !PTT.DOWN, !SELECT.HOLD + * + * We receive samples via the TRX ADC and pass those + * to SPEAKER DAC after demodulation/filtering. + * + * On SELECT.HOLD: go to STATE_MENU + * On SELECT.PRESS: next mode, stay in STATE_RX + * On BACK.PRESS: prev mode, stay in STATE_RX + * On PTT.DOWN: reset TOT, go to STATE_TX + * + * STATE_TX: Normal transmit state. + * Conditions: PTT.DOWN, !TOT.TIMEOUT + * + * We receive samples via the MIC ADC and pass those + * to TRX DAC after modulation/filtering. + * + * On PTT.UP: reset TOT, go to STATE_RX + * On TOT.WARN_TICK: play tick noise, + * reset WARN_TICK event, + * stay in STATE_TX + * On TOT.TIMEOUT: play timeout tune, + * reset TIMEOUT event + * go to STATE_RX_TOT. + * + * STATE_RX_TOT: Receive after time-out state. + * Conditions: PTT.DOWN + * + * We receive samples via the TRX ADC and pass those + * to SPEAKER DAC after demodulation/filtering. + * + * On PTT.UP: reset TOT, go to STATE_RX + * + * STATE_MENU: Menu operation state. Operation is dictated by + * the menu state machine, when we exit that state + * machine, we return to STATE_RX. + * + * On SELECT.HOLD: select the current menu entry, + * if it is a submenu then make that the currnet level + * On SELECT.PRESS: next entry in the current menu level + * On BACK.PRESS: prev mode in the current menu level + * On BACK.HOLD: go up to the previous menu + * save any changes to NV memory + * This may exit the menu system + * On PTT.DOWN: Exit menu system, do not save to NVM + * + * See the "Menu data" section of this file for the menu structure + * + */ +uint8_t core_state = STATE_RX; + +#define MAX_MODES 3 +#define ANALOG 0 +#define DV1600 1 +#define DV700D 2 + +struct switch_t sw_select; /*!< Switch driver for SELECT button */ +struct switch_t sw_back; /*!< Switch driver for BACK button */ +struct switch_t sw_ptt; /*!< Switch driver for PTT buttons */ + +struct tot_t tot; /*!< Time-out timer */ + +unsigned int announceTicker = 0; +unsigned int menuLEDTicker = 0; +unsigned int menuTicker = 0; +unsigned int menuExit = 0; + +uint32_t ms = 0; /* increments once per ms */ + +/*! + * User preferences + */ +static struct prefs_t { + /*! Serial number */ + uint64_t serial; + /*! Time-out timer period, in seconds increment */ + uint16_t tot_period; + /*! Time-out timer warning period, in seconds increment */ + uint16_t tot_warn_period; + /*! Menu frequency */ + uint16_t menu_freq; + /*! Menu speed */ + uint8_t menu_speed; + /*! Menu volume (attenuation) */ + uint8_t menu_vol; + /*! Default operating mode */ + uint8_t op_mode; +} prefs; + +/*! Preferences changed flag */ +int prefs_changed = 0; + +/*! Number of preference images kept */ +#define PREFS_IMG_NUM (2) +/*! Base ROM ID for preferences */ +#define PREFS_IMG_BASE (0) +/*! Minimum serial number */ +#define PREFS_SERIAL_MIN 8 +/*! Maximum serial number */ +#define PREFS_SERIAL_MAX UINT64_MAX + +/*! Preference serial numbers, by slot */ +static uint64_t prefs_serial[PREFS_IMG_NUM]; + +struct tone_gen_t tone_gen; +struct sfx_player_t sfx_player; +struct morse_player_t morse_player; + +void SysTick_Handler(void); + +/*! Menu item root */ +static const struct menu_item_t menu_root; + +#define MENU_EVT_NEXT 0x10 /*!< Increment the current item */ +#define MENU_EVT_PREV 0x11 /*!< Decrement the current item */ +#define MENU_EVT_SELECT 0x20 /*!< Select current item */ +#define MENU_EVT_BACK 0x21 /*!< Go back one level */ +#define MENU_EVT_EXIT 0x30 /*!< Exit menu */ + +/*! + * Software-mix two 16-bit samples. + */ +int16_t software_mix(int16_t a, int16_t b) { + int32_t s = a + b; + if (s < INT16_MIN) + return INT16_MIN; /* Clip! */ + if (s > INT16_MAX) + return INT16_MAX; /* Clip! */ + return s; +} + +/*! Compare current serial with oldest and newest */ +void compare_prefs(int* const oldest, int* const newest, int idx) +{ + if (newest && prefs_serial[idx]) { + if ((*newest < 0) + || (prefs_serial[idx] > prefs_serial[*newest]) + || ((prefs_serial[idx] == PREFS_SERIAL_MIN) + && (prefs_serial[*newest] == PREFS_SERIAL_MAX))) + *newest = idx; + } + + if (oldest) { + if ((*oldest < 0) + || (!prefs_serial[idx]) + || (prefs_serial[idx] < prefs_serial[*oldest]) + || ((prefs_serial[idx] == PREFS_SERIAL_MAX) + && (prefs_serial[*oldest] == PREFS_SERIAL_MIN))) + *oldest = idx; + } +} + +/*! Find oldest and newest images */ +void find_prefs(int* const oldest, int* const newest) +{ + int i; + if (newest) *newest = -1; + if (oldest) *oldest = -1; + for (i = 0; i < PREFS_IMG_NUM; i++) + compare_prefs(oldest, newest, i); +} + +/*! Load preferences from flash */ +int load_prefs() +{ + struct prefs_t image[PREFS_IMG_NUM]; + int newest = -1; + int i; + + /* Load all copies into RAM */ + for (i = 0; i < PREFS_IMG_NUM; i++) { + int res = vrom_read(PREFS_IMG_BASE + i, 0, + sizeof(image[i]), &image[i]); + if (res == sizeof(image[i])) { + prefs_serial[i] = image[i].serial; + compare_prefs(NULL, &newest, i); + } else { + prefs_serial[i] = 0; + } + } + + if (newest < 0) + /* No newest image was found */ + return -ENOENT; + + /* Load from the latest image */ + memcpy(&prefs, &image[newest], sizeof(prefs)); + return 0; +} + +void print_prefs(struct prefs_t *prefs) { + usart_printf("serial: %d\n", (int)prefs->serial); + usart_printf("tot_period: %d\n", (int)prefs->tot_period); + usart_printf("tot_warn_period: %d\n", (int)prefs->tot_warn_period); + usart_printf("menu_freq: %d\n", (int)prefs->menu_freq); + usart_printf("menu_speed: %d\n", (int)prefs->menu_speed); + usart_printf("menu_vol: %d\n", (int)prefs->menu_vol); + usart_printf("op_mode: %d\n", (int)prefs->op_mode); + usart_printf("prefs_changed: %d\n", prefs_changed); +} + +struct freedv *set_freedv_mode(int op_mode, int *n_samples) { + struct freedv *f = NULL; + switch(op_mode) { + case ANALOG: + usart_printf("Analog\n"); + *n_samples = FORTY_MS_16K/4; + f = NULL; + break; + case DV1600: + usart_printf("FreeDV 1600\n"); + f = freedv_open(FREEDV_MODE_1600); + assert(f != NULL); + *n_samples = freedv_get_n_speech_samples(f); + break; + case DV700D: + usart_printf("FreeDV 700D\n"); + f = freedv_open(FREEDV_MODE_700D); + assert(f != NULL); + freedv_set_snr_squelch_thresh(f, -2.0); /* squelch at -2.0 dB */ + freedv_set_squelch_en(f, 1); + freedv_set_eq(f, 1); /* equaliser on by default */ + *n_samples = freedv_get_n_speech_samples(f); + break; + } + return f; +} + +int process_core_state_machine(int core_state, struct menu_t *menu, int *op_mode); + +int main(void) { + struct freedv *f; + int nin, nout, i; + int n_samples, n_samples_16k; + + usart_init(); usart_printf("SM1000 VERSION: %s\n", VERSION); + usart_printf("SM1000 main()... stack 0x%x (%d)\n", &n_samples_16k, (uint32_t)0x2001ffff - (uint32_t)&n_samples_16k); + memtools_find_unused(usart_printf); + + /* Menu data */ + struct menu_t menu; + + /* Outgoing sample counter */ + int spk_nsamples = 0; + + /* Current runtime operation mode */ + int op_mode = ANALOG; + + /* init all the drivers for various peripherals */ + + SysTick_Config(SystemCoreClock/1000); /* 1 kHz SysTick */ + sm1000_leds_switches_init(); + + /* Enable CRC clock */ + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_CRC, ENABLE); + + /* Briefly open FreeDV 700D to determine buffer sizes we need + (700D has the largest buffers) */ + + f = freedv_open(FREEDV_MODE_700D); + int n_speech_samples = freedv_get_n_speech_samples(f); + int n_speech_samples_16k = 2*n_speech_samples; + int n_modem_samples = freedv_get_n_max_modem_samples(f); + int n_modem_samples_16k = 2*n_modem_samples; + freedv_close(f); f = NULL; + usart_printf("n_speech_samples: %d n_modem_samples: %d\n", + n_speech_samples, n_modem_samples); + + /* both speech and modem buffers will be about the same size, but + choose the largest and add a little extra padding */ + if (n_speech_samples_16k > n_modem_samples_16k) + n_samples_16k = n_speech_samples_16k; + else + n_samples_16k = n_modem_samples_16k; + n_samples_16k += FORTY_MS_16K; + usart_printf("n_samples_16k: %d storage for 4 FIFOs: %d bytes\n", + n_samples_16k, 4*2*n_samples_16k); + + /* Set up ADCs/DACs and their FIFOs, note storage is in CCM memory */ + short *pccm = CCM; + usart_printf("pccm before dac/adc open: %p\n", pccm); + n_samples = n_samples_16k/2; + dac_open(DAC_FS_16KHZ, n_samples_16k, pccm, pccm+n_samples_16k); + pccm += 2*n_samples_16k; + adc_open(ADC_FS_16KHZ, n_samples_16k, pccm, pccm+n_samples_16k); + pccm += 2*n_samples_16k; + usart_printf("pccm after dac/adc open: %p\n", pccm); + assert((void*)pccm < CCM+CCM_LEN); + + short *adc16k = pccm; pccm += FDMDV_OS_TAPS_16K+n_samples_16k; + short *dac16k = pccm; pccm += n_samples_16k; + short adc8k[n_samples]; + short dac8k[FDMDV_OS_TAPS_8K+n_samples]; + usart_printf("pccm after buffers: %p\n", pccm); + assert((void*)pccm < CCM+CCM_LEN); + + /* clear buffers */ + for(i=0; i n_samples_16k) + dac_rem = n_samples_16k; + + for (i = 0; i < dac_rem; i++) + dac16k[i] = tone_next(&tone_gen); + dac2_write(dac16k, dac_rem, 0); + } + if (!menuLEDTicker) { + menuLEDTicker = MENU_LED_PERIOD; + led_rt(LED_INV); + } + } + + /* Button released, do an EEPROM erase */ + for (i = 0; i < PREFS_IMG_NUM; i++) + vrom_erase(i + PREFS_IMG_BASE); + } + led_rt(LED_OFF); + tone_reset(&tone_gen, 0, 0); + tot_reset(&tot); + + usart_printf("loading preferences from flash....\n"); + + /* Try to load preferences from flash */ + if (load_prefs() < 0) { + usart_printf("loading default preferences....\n"); + /* Fail! Load defaults. */ + memset(&prefs, 0, sizeof(prefs)); + prefs.op_mode = ANALOG; + prefs.menu_vol = 2; + prefs.menu_speed = 60; /* 20 WPM */ + prefs.menu_freq = 800; + prefs.tot_period = 0; /* Disable time-out timer */ + prefs.tot_warn_period = 15; + } + print_prefs(&prefs); + + /* Set up time-out timer, 100msec ticks */ + tot.tick_period = 100; + tot.remain_warn_ticks = 10; + + /* Clear out switch states */ + memset(&sw_select, 0, sizeof(sw_select)); + memset(&sw_back, 0, sizeof(sw_back)); + memset(&sw_ptt, 0, sizeof(sw_ptt)); + + /* Clear out menu state */ + memset(&menu, 0, sizeof(menu)); + + morse_player.freq = prefs.menu_freq; + morse_player.dit_time = prefs.menu_speed; + morse_player.msg = NULL; + op_mode = prefs.op_mode; + + /* default op-mode */ + f = set_freedv_mode(op_mode, &n_samples); + n_samples_16k = 2*n_samples; + + /* play VERSION and op mode at start-up. Morse player can't queue + so we assemble a concatenated string here */ + char startup_announcement[16]; + if (op_mode == ANALOG) + snprintf(startup_announcement, 16, VERSION " ANA"); + else if (op_mode == DV1600) + snprintf(startup_announcement, 16, VERSION " 1600"); + else if (op_mode == DV700D) + snprintf(startup_announcement, 16, VERSION " 700D"); + morse_play(&morse_player, startup_announcement); + + usart_printf("entering main loop...\n"); + uint32_t lastms = ms; + while(1) { + /* Read switch states */ + switch_update(&sw_select, (!switch_select()) ? 1 : 0); + switch_update(&sw_back, (!switch_back()) ? 1 : 0); + switch_update(&sw_ptt, (switch_ptt() || (!ext_ptt())) ? 1 : 0); + + /* Update time-out timer state */ + tot_update(&tot); + + /* iterate core state machine based on switch events */ + int prev_op_mode = op_mode; + int prev_core_state = core_state; + core_state = process_core_state_machine(core_state, &menu, &op_mode); + + /* Acknowledge switch events */ + switch_ack(&sw_select); + switch_ack(&sw_back); + switch_ack(&sw_ptt); + + /* if mode has changed, re-open freedv */ + if (op_mode != prev_op_mode) { + usart_printf("Mode change prev_op_mode: %d op_mode: %d\n", prev_op_mode, op_mode); + if (f) { freedv_close(f); } f = NULL; + f = set_freedv_mode(op_mode, &n_samples); + n_samples_16k = 2*n_samples; + usart_printf("FreeDV f = 0x%x n_samples: %d n_samples_16k: %d\n", (int)f, n_samples, n_samples_16k); + + /* clear buffers */ + + for(i=0; iODR = (1 << 3); + + /* clipping indicator */ + + led_err(0); + for (i=0; i 28000) + led_err(1); + } + + fdmdv_16_to_8_short(adc8k, &adc16k[FDMDV_OS_TAPS_16K], n_samples); + + if (op_mode == ANALOG) { + for(i=0; iODR &= ~(1 << 3); + } + break; + + case STATE_RX: + case STATE_RX_TOT: + /* Receive --------------------------------------------------------------------------*/ + + not_cptt(1); + led_ptt(0); + + /* ADC1 is the demod in signal from the radio rx, DAC2 is the SM1000 speaker */ + + if (op_mode == ANALOG) { + if (ms > lastms+5000) { + usart_printf("Analog\n"); + lastms = ms; + } + + if (adc1_read(&adc16k[FDMDV_OS_TAPS_16K], n_samples_16k) == 0) { + fdmdv_16_to_8_short(adc8k, &adc16k[FDMDV_OS_TAPS_16K], n_samples); + for(i=0; i lastms+5000) { + usart_printf("Digital Voice\n"); + lastms = ms; + } + + /* 1600 or 700D DV mode */ + + nin = freedv_nin(f); + nout = nin; + freedv_set_total_bit_errors(f, 0); + if (adc1_read(&adc16k[FDMDV_OS_TAPS_16K], 2*nin) == 0) { + GPIOE->ODR = (1 << 3); + fdmdv_16_to_8_short(adc8k, &adc16k[FDMDV_OS_TAPS_16K], nin); + nout = freedv_rx(f, &dac8k[FDMDV_OS_TAPS_8K], adc8k); + fdmdv_8_to_16_short(dac16k, &dac8k[FDMDV_OS_TAPS_8K], nout); + spk_nsamples = 2*nout; + led_rt(freedv_get_sync(f)); led_err(freedv_get_total_bit_errors(f)); + GPIOE->ODR &= ~(1 << 3); + } + } + break; + default: + break; + } + + /* Write audio to speaker output */ + if (spk_nsamples || sfx_player.note || morse_player.msg) { + /* Make a note of our playback position */ + int16_t* play_ptr = dac16k; + + if (!spk_nsamples) + spk_nsamples = dac2_free(); + + /* + * There is audio to play on the external speaker. If there + * is a sound or announcement, software-mix it into the outgoing + * buffer. + */ + if (sfx_player.note) { + int i; + if (menu.stack_depth) { + /* Exclusive */ + for (i = 0; i < spk_nsamples; i++) + dac16k[i] = sfx_next(&sfx_player) >> prefs.menu_vol; + } else { + /* Software mix */ + for (i = 0; i < spk_nsamples; i++) + dac16k[i] = software_mix(dac16k[i], + sfx_next(&sfx_player) >> prefs.menu_vol); + } + if (!sfx_player.note && morse_player.msg) + announceTicker = ANNOUNCE_DELAY; + } else if (!announceTicker && morse_player.msg) { + int i; + if (menu.stack_depth) { + for (i = 0; i < spk_nsamples; i++) + dac16k[i] = morse_next(&morse_player) >> prefs.menu_vol; + } else { + for (i = 0; i < spk_nsamples; i++) + dac16k[i] = software_mix(dac16k[i], + morse_next(&morse_player) >> prefs.menu_vol); + } + } + + while (spk_nsamples) { + /* Get the number of samples to be played this time around */ + int n_rem = dac2_free(); + if (spk_nsamples < n_rem) + n_rem = spk_nsamples; + /* Play the audio */ + dac2_write(play_ptr, n_rem, 0); + spk_nsamples -= n_rem; + play_ptr += n_rem; + } + + /* Clear out buffer */ + memset(dac16k, 0, n_samples_16k*sizeof(short)); + } + + } /* while(1) ... */ +} + +/* + * SysTick Interrupt Handler + */ + +void SysTick_Handler(void) +{ + ms++; + switch_tick(&sw_select); + switch_tick(&sw_back); + switch_tick(&sw_ptt); + if (menuTicker > 0) { + menuTicker--; + } + if (menuLEDTicker > 0) { + menuLEDTicker--; + } + if (announceTicker > 0) { + announceTicker--; + } + tot_tick(&tot); +} + + +int process_core_state_machine(int core_state, struct menu_t *menu, int *op_mode) { + /* State machine updates */ + switch(core_state) { + case STATE_RX: + { + uint8_t mode_changed = 0; + + if (!menuTicker) { + if (menuExit) { + /* We've just exited a menu, wait for release of BACK */ + if (switch_released(&sw_back)) + menuExit = 0; + } else if (switch_pressed(&sw_ptt)) { + /* Cancel any announcement if scheduled */ + if (announceTicker && morse_player.msg) { + announceTicker = 0; + morse_play(&morse_player, NULL); + } + /* Start time-out timer if enabled */ + if (prefs.tot_period) + tot_start(&tot, prefs.tot_period*10, + prefs.tot_warn_period*10); + /* Enter transmit state */ + core_state = STATE_TX; + } else if (switch_pressed(&sw_select) > HOLD_DELAY) { + /* Enter the menu */ + led_pwr(1); led_ptt(0); led_rt(0); + led_err(0); not_cptt(1); + + menu_enter(menu, &menu_root); + menuTicker = MENU_DELAY; + core_state = STATE_MENU; + prefs_changed = 0; + usart_printf("Entering menu ...\n"); + print_prefs(&prefs); + + } else if (switch_released(&sw_select)) { + /* Shortcut: change current mode */ + *op_mode = (*op_mode + 1) % MAX_MODES; + mode_changed = 1; + } else if (switch_released(&sw_back)) { + /* Shortcut: change current mode */ + *op_mode = (*op_mode - 1) % MAX_MODES; + mode_changed = 1; + } + + if (mode_changed) { + /* Announce the new mode */ + if (*op_mode == ANALOG) + morse_play(&morse_player, "ANA"); + else if (*op_mode == DV1600) + morse_play(&morse_player, "1600"); + else if (*op_mode == DV700D) + morse_play(&morse_player, "700D"); + sfx_play(&sfx_player, sound_click); + } + } + } + break; + case STATE_TX: + { + if (!switch_pressed(&sw_ptt)) { + /* PTT released, leave transmit mode */ + tot_reset(&tot); + core_state = STATE_RX; + } else if (tot.event & TOT_EVT_TIMEOUT) { + /* Time-out reached */ + sfx_play(&sfx_player, sound_death_march); + tot.event &= ~TOT_EVT_TIMEOUT; + core_state = STATE_RX_TOT; + } else if (tot.event & TOT_EVT_WARN_NEXT) { + /* Re-set warning flag */ + tot.event &= ~TOT_EVT_WARN_NEXT; + /* Schedule a click tone */ + sfx_play(&sfx_player, sound_click); + } + } + break; + case STATE_RX_TOT: + if (switch_released(&sw_ptt)) { + /* PTT released, leave transmit mode */ + tot_reset(&tot); + core_state = STATE_RX; + } + break; + case STATE_MENU: + if (!menuTicker) { + /* We are in a menu */ + static uint8_t press_ack = 0; + uint8_t save_settings = 0; + + if (press_ack == 1) { + if ((sw_select.state == SW_STEADY) + && (!sw_select.sw)) + press_ack = 0; + } else if (press_ack == 2) { + if ((sw_back.state == SW_STEADY) + && (!sw_back.sw)) + press_ack = 0; + } else { + if (switch_pressed(&sw_select) > HOLD_DELAY) { + menu_exec(menu, MENU_EVT_SELECT); + press_ack = 1; + menuTicker = MENU_DELAY; + } else if (switch_pressed(&sw_back) > HOLD_DELAY) { + menu_exec(menu, MENU_EVT_BACK); + press_ack = 2; + menuTicker = MENU_DELAY; + + usart_printf("Leaving menu ... stack_depth: %d \n", menu->stack_depth); + print_prefs(&prefs); + if (!menu->stack_depth) + save_settings = prefs_changed; + + } else if (switch_released(&sw_select)) { + menu_exec(menu, MENU_EVT_NEXT); + menuTicker = MENU_DELAY; + } else if (switch_released(&sw_back)) { + menu_exec(menu, MENU_EVT_PREV); + menuTicker = MENU_DELAY; + } else if (switch_released(&sw_ptt)) { + while(menu->stack_depth > 0) + menu_exec(menu, MENU_EVT_EXIT); + sfx_play(&sfx_player, sound_returned); + } + + /* If exited, put the LED back */ + if (!menu->stack_depth) { + menuLEDTicker = 0; + menuTicker = 0; + led_pwr(LED_ON); + morse_play(&morse_player, NULL); + menuExit = 1; + if (save_settings) { + int oldest = -1; + int res; + /* Copy the morse settings in */ + prefs.menu_freq = morse_player.freq; + prefs.menu_speed = morse_player.dit_time; + /* make sure we have same op mode as power on prefs */ + *op_mode = prefs.op_mode; + /* Increment serial number */ + prefs.serial++; + /* Find the oldest image */ + find_prefs(&oldest, NULL); + if (oldest < 0) + oldest = 0; /* No current image */ + + /* Write new settings over it */ + usart_printf("vrom_write\n"); + res = vrom_write(oldest + PREFS_IMG_BASE, 0, + sizeof(prefs), &prefs); + if (res >= 0) + prefs_serial[oldest] = prefs.serial; + } + /* Go back to receive state */ + core_state = STATE_RX; + } + } + } + break; + default: + break; + } + + return core_state; +} + + +/* ---------------------------- Menu data --------------------------- + * + * MENU - + * |- "MODE" Select operating mode + * | |- "ANA" - Analog + * | |- "DV1600" - FreeDV 1600 + * | |- "DV700D" - FreeDV 700D + * | + * |- "TOT" Timer Out Timer options + * | |- "TIME" - Set timeout time (a sub menu) + * | | |- - SELECT.PRESS add 5 sec + * | | |- - BACK.PRESS subtracts 5 sec + * | | + * | |- "WARN" - Set warning time (a sub menu) + * | | |- - SELECT.PRESS add 5 sec + * | | |- - BACK.PRESS subtracts 5 sec + * | + * |- "UI" UI (morse code announcments) parameters + * | |- "FREQ" - Set tone + * | | |- - SELECT.PRESS add 50 Hz + * | | |- - BACK.PRESS subtracts 50 Hz + * | | + * | |- "WPMQ" - Set speed + * | | |- - SELECT.PRESS add 5 WPM + * | | |- - BACK.PRESS subtracts 5 WPM + * | | + * | |- "VOL" - Set volume + * | | |- - SELECT.PRESS -> quieter + * | | |- - BACK.PRESS -> louder + */ + +/*! + * Default handler for menu callback. + */ +static void menu_default_cb(struct menu_t* const menu, uint32_t event) +{ + /* Get the current menu item */ + const struct menu_item_t* item = menu_item(menu, 0); + uint8_t announce = 0; + + switch(event) { + case MENU_EVT_ENTERED: + sfx_play(&sfx_player, sound_startup); + /* Choose first item */ + menu->current = 0; + case MENU_EVT_RETURNED: + announce = 1; + break; + case MENU_EVT_NEXT: + sfx_play(&sfx_player, sound_click); + menu->current = (menu->current + 1) % item->num_children; + announce = 1; + break; + case MENU_EVT_PREV: + sfx_play(&sfx_player, sound_click); + menu->current = (menu->current - 1) % item->num_children; + announce = 1; + break; + case MENU_EVT_SELECT: + /* Enter the sub-menu */ + menu_enter(menu, item->children[menu->current]); + break; + case MENU_EVT_BACK: + /* Exit the menu */ + sfx_play(&sfx_player, sound_returned); + case MENU_EVT_EXIT: + menu_leave(menu); + break; + default: + break; + } + + if (announce) { + /* Announce the label of the selected child */ + morse_play(&morse_player, + item->children[menu->current]->label); + } +} + +/* Root menu item forward declarations */ +static const struct menu_item_t* menu_root_children[]; +/* Root item definition */ +static const struct menu_item_t menu_root = { + .label = "MENU", + .event_cb = menu_default_cb, + .children = menu_root_children, + .num_children = 3, +}; + +/* Child declarations */ +static const struct menu_item_t menu_op_mode; +static const struct menu_item_t menu_tot; +static const struct menu_item_t menu_ui; +static const struct menu_item_t * menu_root_children[] = { + &menu_op_mode, + &menu_tot, + &menu_ui, +}; + + +/* Operation Mode menu forward declarations */ +static void menu_op_mode_cb(struct menu_t* const menu, uint32_t event); +static struct menu_item_t const* menu_op_mode_children[]; +/* Operation mode menu */ +static const struct menu_item_t menu_op_mode = { + .label = "MODE", + .event_cb = menu_op_mode_cb, + .children = menu_op_mode_children, + .num_children = 3, +}; +/* Children */ +static const struct menu_item_t menu_op_mode_analog = { + .label = "ANA", + .event_cb = NULL, + .children = NULL, + .num_children = 0, + .data = { + .ui = ANALOG, + }, +}; +static const struct menu_item_t menu_op_mode_dv1600 = { + .label = "1600", + .event_cb = NULL, + .children = NULL, + .num_children = 0, + .data = { + .ui = DV1600, + }, +}; +static const struct menu_item_t menu_op_mode_dv700D = { + .label = "700D", + .event_cb = NULL, + .children = NULL, + .num_children = 0, + .data = { + .ui = DV700D, + }, +}; +static struct menu_item_t const* menu_op_mode_children[] = { + &menu_op_mode_analog, + &menu_op_mode_dv1600, + &menu_op_mode_dv700D, +}; +/* Callback function */ +static void menu_op_mode_cb(struct menu_t* const menu, uint32_t event) +{ + const struct menu_item_t* item = menu_item(menu, 0); + uint8_t announce = 0; + + switch(event) { + case MENU_EVT_ENTERED: + sfx_play(&sfx_player, sound_startup); + /* Choose current item */ + switch(prefs.op_mode) { + case DV1600: + menu->current = 1; + break; + case DV700D: + menu->current = 2; + break; + default: + menu->current = 0; + } + case MENU_EVT_RETURNED: + /* Shouldn't happen, but we handle it anyway */ + announce = 1; + break; + case MENU_EVT_NEXT: + sfx_play(&sfx_player, sound_click); + menu->current = (menu->current + 1) % item->num_children; + announce = 1; + break; + case MENU_EVT_PREV: + sfx_play(&sfx_player, sound_click); + menu->current = (menu->current - 1) % item->num_children; + announce = 1; + break; + case MENU_EVT_SELECT: + /* Choose the selected mode */ + prefs.op_mode = item->children[menu->current]->data.ui; + /* Play the "selected" tune and return. */ + sfx_play(&sfx_player, sound_startup); + prefs_changed = 1; + menu_leave(menu); + break; + case MENU_EVT_BACK: + /* Exit the menu */ + sfx_play(&sfx_player, sound_returned); + case MENU_EVT_EXIT: + menu_leave(menu); + break; + default: + break; + } + + if (announce) { + /* Announce the label of the selected child */ + morse_play(&morse_player, + item->children[menu->current]->label); + } +} + + +/* Time-out timer menu forward declarations */ +static struct menu_item_t const* menu_tot_children[]; +/* Operation mode menu */ +static const struct menu_item_t menu_tot = { + .label = "TOT", + .event_cb = menu_default_cb, + .children = menu_tot_children, + .num_children = 2, +}; +/* Children */ +static const struct menu_item_t menu_tot_time; +static const struct menu_item_t menu_tot_warn; +static struct menu_item_t const* menu_tot_children[] = { + &menu_tot_time, + &menu_tot_warn, +}; + +/* TOT time menu forward declarations */ +static void menu_tot_time_cb(struct menu_t* const menu, uint32_t event); +/* TOT time menu */ +static const struct menu_item_t menu_tot_time = { + .label = "TIME", + .event_cb = menu_tot_time_cb, + .children = NULL, + .num_children = 0, +}; + +/* Callback function */ +static void menu_tot_time_cb(struct menu_t* const menu, uint32_t event) +{ + uint8_t announce = 0; + + switch(event) { + case MENU_EVT_ENTERED: + sfx_play(&sfx_player, sound_startup); + /* Get the current period */ + menu->current = prefs.tot_period; + case MENU_EVT_RETURNED: + /* Shouldn't happen, but we handle it anyway */ + announce = 1; + break; + case MENU_EVT_NEXT: + sfx_play(&sfx_player, sound_click); + /* Adjust the frequency up by 50 Hz */ + if (prefs.tot_period < 600) + prefs.tot_period += 5; + announce = 1; + break; + case MENU_EVT_PREV: + sfx_play(&sfx_player, sound_click); + if (prefs.tot_period > 0) + prefs.tot_period -= 5; + announce = 1; + break; + case MENU_EVT_SELECT: + /* Play the "selected" tune and return. */ + sfx_play(&sfx_player, sound_startup); + prefs_changed = 1; + menu_leave(menu); + break; + case MENU_EVT_BACK: + /* Restore the mode and exit the menu */ + sfx_play(&sfx_player, sound_returned); + case MENU_EVT_EXIT: + prefs.tot_period = menu->current; + menu_leave(menu); + break; + default: + break; + } + + if (announce) { + /* Render the text, thankfully we don't need re-entrancy */ + static char period[6]; + snprintf(period, 6, "%d", prefs.tot_period); + /* Announce the period */ + morse_play(&morse_player, period); + } +}; + +/* TOT warning time menu forward declarations */ +static void menu_tot_warn_cb(struct menu_t* const menu, uint32_t event); +/* TOT warning time menu */ +static const struct menu_item_t menu_tot_warn = { + .label = "WARN", + .event_cb = menu_tot_warn_cb, + .children = NULL, + .num_children = 0, +}; + +/* Callback function */ +static void menu_tot_warn_cb(struct menu_t* const menu, uint32_t event) +{ + uint8_t announce = 0; + + switch(event) { + case MENU_EVT_ENTERED: + sfx_play(&sfx_player, sound_startup); + /* Get the current period */ + if (prefs.tot_warn_period < prefs.tot_period) + menu->current = prefs.tot_warn_period; + else + menu->current = prefs.tot_period; + case MENU_EVT_RETURNED: + /* Shouldn't happen, but we handle it anyway */ + announce = 1; + break; + case MENU_EVT_NEXT: + sfx_play(&sfx_player, sound_click); + /* Adjust the frequency up by 50 Hz */ + if (prefs.tot_warn_period < prefs.tot_period) + prefs.tot_warn_period += 5; + announce = 1; + break; + case MENU_EVT_PREV: + sfx_play(&sfx_player, sound_click); + if (prefs.tot_warn_period > 0) + prefs.tot_warn_period -= 5; + announce = 1; + break; + case MENU_EVT_SELECT: + /* Play the "selected" tune and return. */ + sfx_play(&sfx_player, sound_startup); + prefs_changed = 1; + menu_leave(menu); + break; + case MENU_EVT_BACK: + /* Restore the mode and exit the menu */ + sfx_play(&sfx_player, sound_returned); + case MENU_EVT_EXIT: + prefs.tot_warn_period = menu->current; + menu_leave(menu); + break; + default: + break; + } + + if (announce) { + /* Render the text, thankfully we don't need re-entrancy */ + static char period[6]; + snprintf(period, 6, "%d", prefs.tot_warn_period); + /* Announce the period */ + morse_play(&morse_player, period); + } +}; + +/* UI menu forward declarations */ +static struct menu_item_t const* menu_ui_children[]; +/* Operation mode menu */ +static const struct menu_item_t menu_ui = { + .label = "UI", + .event_cb = menu_default_cb, + .children = menu_ui_children, + .num_children = 3, +}; +/* Children */ +static const struct menu_item_t menu_ui_freq; +static const struct menu_item_t menu_ui_speed; +static const struct menu_item_t menu_ui_vol; +static struct menu_item_t const* menu_ui_children[] = { + &menu_ui_freq, + &menu_ui_speed, + &menu_ui_vol, +}; + +/* UI Frequency menu forward declarations */ +static void menu_ui_freq_cb(struct menu_t* const menu, uint32_t event); +/* UI Frequency menu */ +static const struct menu_item_t menu_ui_freq = { + .label = "FREQ", + .event_cb = menu_ui_freq_cb, + .children = NULL, + .num_children = 0, +}; +/* Callback function */ +static void menu_ui_freq_cb(struct menu_t* const menu, uint32_t event) +{ + uint8_t announce = 0; + + switch(event) { + case MENU_EVT_ENTERED: + sfx_play(&sfx_player, sound_startup); + /* Get the current frequency */ + menu->current = morse_player.freq; + case MENU_EVT_RETURNED: + /* Shouldn't happen, but we handle it anyway */ + announce = 1; + break; + case MENU_EVT_NEXT: + sfx_play(&sfx_player, sound_click); + /* Adjust the frequency up by 50 Hz */ + if (morse_player.freq < 2000) + morse_player.freq += 50; + announce = 1; + break; + case MENU_EVT_PREV: + sfx_play(&sfx_player, sound_click); + if (morse_player.freq > 50) + morse_player.freq -= 50; + announce = 1; + break; + case MENU_EVT_SELECT: + /* Play the "selected" tune and return. */ + sfx_play(&sfx_player, sound_startup); + prefs_changed = 1; + menu_leave(menu); + break; + case MENU_EVT_BACK: + /* Restore the mode and exit the menu */ + sfx_play(&sfx_player, sound_returned); + case MENU_EVT_EXIT: + morse_player.freq = menu->current; + menu_leave(menu); + break; + default: + break; + } + + if (announce) { + /* Render the text, thankfully we don't need re-entrancy */ + static char freq[6]; + snprintf(freq, 6, "%d", morse_player.freq); + /* Announce the frequency */ + morse_play(&morse_player, freq); + } +}; + +/* UI Speed menu forward declarations */ +static void menu_ui_speed_cb(struct menu_t* const menu, uint32_t event); +/* UI Speed menu */ +static const struct menu_item_t menu_ui_speed = { + .label = "WPM", + .event_cb = menu_ui_speed_cb, + .children = NULL, + .num_children = 0, +}; +/* Callback function */ +static void menu_ui_speed_cb(struct menu_t* const menu, uint32_t event) +{ + uint8_t announce = 0; + + /* Get the current WPM */ + uint16_t curr_wpm = 1200 / morse_player.dit_time; + + switch(event) { + case MENU_EVT_ENTERED: + sfx_play(&sfx_player, sound_startup); + /* Get the current frequency */ + menu->current = morse_player.dit_time; + case MENU_EVT_RETURNED: + /* Shouldn't happen, but we handle it anyway */ + announce = 1; + break; + case MENU_EVT_NEXT: + sfx_play(&sfx_player, sound_click); + /* Increment WPM by 5 */ + if (curr_wpm < 60) + curr_wpm += 5; + announce = 1; + break; + case MENU_EVT_PREV: + sfx_play(&sfx_player, sound_click); + if (curr_wpm > 5) + curr_wpm -= 5; + announce = 1; + break; + case MENU_EVT_SELECT: + /* Play the "selected" tune and return. */ + sfx_play(&sfx_player, sound_startup); + prefs_changed = 1; + menu_leave(menu); + break; + case MENU_EVT_BACK: + /* Restore the mode and exit the menu */ + sfx_play(&sfx_player, sound_returned); + case MENU_EVT_EXIT: + morse_player.dit_time = menu->current; + menu_leave(menu); + break; + default: + break; + } + + if (announce) { + /* Render the text, thankfully we don't need re-entrancy */ + static char wpm[5]; + snprintf(wpm, 5, "%d", curr_wpm); + /* Set the new parameter */ + morse_player.dit_time = 1200 / curr_wpm; + /* Announce the words per minute */ + morse_play(&morse_player, wpm); + } +}; + +/* UI volume menu forward declarations */ +static void menu_ui_vol_cb(struct menu_t* const menu, uint32_t event); +/* UI volume menu */ +static const struct menu_item_t menu_ui_vol = { + .label = "VOL", + .event_cb = menu_ui_vol_cb, + .children = NULL, + .num_children = 0, +}; +/* Callback function */ +static void menu_ui_vol_cb(struct menu_t* const menu, uint32_t event) +{ + uint8_t announce = 0; + + switch(event) { + case MENU_EVT_ENTERED: + sfx_play(&sfx_player, sound_startup); + /* Get the current volume */ + menu->current = prefs.menu_vol; + case MENU_EVT_RETURNED: + /* Shouldn't happen, but we handle it anyway */ + announce = 1; + break; + case MENU_EVT_NEXT: + sfx_play(&sfx_player, sound_click); + if (prefs.menu_vol > 0) + prefs.menu_vol--; + announce = 1; + break; + case MENU_EVT_PREV: + sfx_play(&sfx_player, sound_click); + if (prefs.menu_vol < 14) + prefs.menu_vol++; + announce = 1; + break; + case MENU_EVT_SELECT: + /* Play the "selected" tune and return. */ + sfx_play(&sfx_player, sound_startup); + menu_leave(menu); + prefs_changed = 1; + break; + case MENU_EVT_BACK: + /* Restore the mode and exit the menu */ + sfx_play(&sfx_player, sound_returned); + case MENU_EVT_EXIT: + prefs.menu_vol = menu->current; + menu_leave(menu); + break; + default: + break; + } + + if (announce) { + /* Render the text, thankfully we don't need re-entrancy */ + static char vol[5]; + snprintf(vol, 5, "%d", 15 - prefs.menu_vol); + /* Announce the volume level */ + morse_play(&morse_player, vol); + } +}; diff --git a/libcodec2-android/src/codec2/stm32/src/sounds.c b/libcodec2-android/src/codec2/stm32/src/sounds.c new file mode 100644 index 0000000..54848b8 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/src/sounds.c @@ -0,0 +1,62 @@ +/*! + * Sound effect library. + * + * This provides some sound effects for the SM1000 UI. + * + * Author Stuart Longland + * Copyright (C) 2015 FreeDV project. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License version 2.1, + * as published by the Free Software Foundation. This program is + * distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, see + * . + */ + +#include "sounds.h" + +const struct sfx_note_t sound_startup[] = { + {.freq = 600, .duration = 80}, + {.freq = 800, .duration = 80}, + {.freq = 1000, .duration = 80}, + {.freq = 0, .duration = 0} +}; + +const struct sfx_note_t sound_returned[] = { + {.freq = 1000, .duration = 80}, + {.freq = 800, .duration = 80}, + {.freq = 600, .duration = 80}, + {.freq = 0, .duration = 0} +}; + +const struct sfx_note_t sound_click[] = { + {.freq = 1200, .duration = 10}, + {.freq = 0, .duration = 0} +}; + +const struct sfx_note_t sound_death_march[] = { + {.freq = 340, .duration = 400}, + {.freq = 0, .duration = 80}, + {.freq = 340, .duration = 400}, + {.freq = 0, .duration = 80}, + {.freq = 340, .duration = 400}, + {.freq = 0, .duration = 80}, + {.freq = 420, .duration = 400}, + {.freq = 0, .duration = 80}, + {.freq = 400, .duration = 300}, + {.freq = 0, .duration = 80}, + {.freq = 340, .duration = 120}, + {.freq = 0, .duration = 80}, + {.freq = 340, .duration = 120}, + {.freq = 0, .duration = 80}, + {.freq = 300, .duration = 200}, + {.freq = 0, .duration = 80}, + {.freq = 340, .duration = 400}, + {.freq = 0, .duration = 0}, +}; diff --git a/libcodec2-android/src/codec2/stm32/src/startup_stm32f4xx.s b/libcodec2-android/src/codec2/stm32/src/startup_stm32f4xx.s new file mode 100644 index 0000000..3332012 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/src/startup_stm32f4xx.s @@ -0,0 +1,526 @@ +/** + ****************************************************************************** + * @file startup_stm32f4xx.s + * @author MCD Application Team + * @version V1.0.0 + * @date 30-September-2011 + * @brief STM32F4xx Devices vector table for Atollic TrueSTUDIO toolchain. + * This module performs: + * - Set the initial SP + * - Set the initial PC == Reset_Handler, + * - Set the vector table entries with the exceptions ISR address + * - Configure the clock system and the external SRAM mounted on + * STM324xG-EVAL board to be used as data memory (optional, + * to be enabled by user) + * - Branches to main in the C library (which eventually + * calls main()). + * After Reset the Cortex-M4 processor is in Thread mode, + * priority is Privileged, and the Stack is set to Main. + ****************************************************************************** + * @attention + * + * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS + * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE + * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY + * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING + * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE + * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + *

© COPYRIGHT 2011 STMicroelectronics

+ ****************************************************************************** + */ + + .syntax unified + .cpu cortex-m3 + .fpu softvfp + .thumb + +.global g_pfnVectors +.global Default_Handler +.global EndofMain + +/* start address for the initialization values of the .data section. +defined in linker script */ +.word _sidata +/* start address for the .data section. defined in linker script */ +.word _sdata +/* end address for the .data section. defined in linker script */ +.word _edata +/* start address for the .bss section. defined in linker script */ +.word _sbss +/* end address for the .bss section. defined in linker script */ +.word _ebss +/* stack used for SystemInit_ExtMemCtl; always internal RAM used */ + +/** + * @brief This is the code that gets called when the processor first + * starts execution following a reset event. Only the absolutely + * necessary set is performed, after which the application + * supplied main() routine is called. + * @param None + * @retval : None +*/ + + .section .text.Reset_Handler + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss + +/* Zero fill all memory from bss up */ +FillZerobss: + movs r3, #0 + str r3, [r2], #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss + +/* Zero memory from bss up with a sentinal value */ + b LoopFillsentinel +Fillsentinel: + ldr r3, = 0x55555555 /* sentinel value we put in memory */ + str r3, [r2], #4 + +LoopFillsentinel: + ldr r3, = 0x2001fffc /* end of ram */ + cmp r2, r3 + bcc Fillsentinel + +/* Call the clock system intitialization function.*/ + bl SystemInit +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main +EndofMain: + bl . +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * @param None + * @retval None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M3. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +*******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word MemManage_Handler + .word BusFault_Handler + .word UsageFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word DebugMon_Handler + .word 0 + .word PendSV_Handler + .word SysTick_Handler + + /* External Interrupts */ + .word WWDG_IRQHandler /* Window WatchDog */ + .word PVD_IRQHandler /* PVD through EXTI Line detection */ + .word TAMP_STAMP_IRQHandler /* Tamper and TimeStamps through the EXTI line */ + .word RTC_WKUP_IRQHandler /* RTC Wakeup through the EXTI line */ + .word FLASH_IRQHandler /* FLASH */ + .word RCC_IRQHandler /* RCC */ + .word EXTI0_IRQHandler /* EXTI Line0 */ + .word EXTI1_IRQHandler /* EXTI Line1 */ + .word EXTI2_IRQHandler /* EXTI Line2 */ + .word EXTI3_IRQHandler /* EXTI Line3 */ + .word EXTI4_IRQHandler /* EXTI Line4 */ + .word DMA1_Stream0_IRQHandler /* DMA1 Stream 0 */ + .word DMA1_Stream1_IRQHandler /* DMA1 Stream 1 */ + .word DMA1_Stream2_IRQHandler /* DMA1 Stream 2 */ + .word DMA1_Stream3_IRQHandler /* DMA1 Stream 3 */ + .word DMA1_Stream4_IRQHandler /* DMA1 Stream 4 */ + .word DMA1_Stream5_IRQHandler /* DMA1 Stream 5 */ + .word DMA1_Stream6_IRQHandler /* DMA1 Stream 6 */ + .word ADC_IRQHandler /* ADC1, ADC2 and ADC3s */ + .word CAN1_TX_IRQHandler /* CAN1 TX */ + .word CAN1_RX0_IRQHandler /* CAN1 RX0 */ + .word CAN1_RX1_IRQHandler /* CAN1 RX1 */ + .word CAN1_SCE_IRQHandler /* CAN1 SCE */ + .word EXTI9_5_IRQHandler /* External Line[9:5]s */ + .word TIM1_BRK_TIM9_IRQHandler /* TIM1 Break and TIM9 */ + .word TIM1_UP_TIM10_IRQHandler /* TIM1 Update and TIM10 */ + .word TIM1_TRG_COM_TIM11_IRQHandler /* TIM1 Trigger and Commutation and TIM11 */ + .word TIM1_CC_IRQHandler /* TIM1 Capture Compare */ + .word TIM2_IRQHandler /* TIM2 */ + .word TIM3_IRQHandler /* TIM3 */ + .word TIM4_IRQHandler /* TIM4 */ + .word I2C1_EV_IRQHandler /* I2C1 Event */ + .word I2C1_ER_IRQHandler /* I2C1 Error */ + .word I2C2_EV_IRQHandler /* I2C2 Event */ + .word I2C2_ER_IRQHandler /* I2C2 Error */ + .word SPI1_IRQHandler /* SPI1 */ + .word SPI2_IRQHandler /* SPI2 */ + .word USART1_IRQHandler /* USART1 */ + .word USART2_IRQHandler /* USART2 */ + .word USART3_IRQHandler /* USART3 */ + .word EXTI15_10_IRQHandler /* External Line[15:10]s */ + .word RTC_Alarm_IRQHandler /* RTC Alarm (A and B) through EXTI Line */ + .word OTG_FS_WKUP_IRQHandler /* USB OTG FS Wakeup through EXTI line */ + .word TIM8_BRK_TIM12_IRQHandler /* TIM8 Break and TIM12 */ + .word TIM8_UP_TIM13_IRQHandler /* TIM8 Update and TIM13 */ + .word TIM8_TRG_COM_TIM14_IRQHandler /* TIM8 Trigger and Commutation and TIM14 */ + .word TIM8_CC_IRQHandler /* TIM8 Capture Compare */ + .word DMA1_Stream7_IRQHandler /* DMA1 Stream7 */ + .word FSMC_IRQHandler /* FSMC */ + .word SDIO_IRQHandler /* SDIO */ + .word TIM5_IRQHandler /* TIM5 */ + .word SPI3_IRQHandler /* SPI3 */ + .word UART4_IRQHandler /* UART4 */ + .word UART5_IRQHandler /* UART5 */ + .word TIM6_DAC_IRQHandler /* TIM6 and DAC1&2 underrun errors */ + .word TIM7_IRQHandler /* TIM7 */ + .word DMA2_Stream0_IRQHandler /* DMA2 Stream 0 */ + .word DMA2_Stream1_IRQHandler /* DMA2 Stream 1 */ + .word DMA2_Stream2_IRQHandler /* DMA2 Stream 2 */ + .word DMA2_Stream3_IRQHandler /* DMA2 Stream 3 */ + .word DMA2_Stream4_IRQHandler /* DMA2 Stream 4 */ + .word ETH_IRQHandler /* Ethernet */ + .word ETH_WKUP_IRQHandler /* Ethernet Wakeup through EXTI line */ + .word CAN2_TX_IRQHandler /* CAN2 TX */ + .word CAN2_RX0_IRQHandler /* CAN2 RX0 */ + .word CAN2_RX1_IRQHandler /* CAN2 RX1 */ + .word CAN2_SCE_IRQHandler /* CAN2 SCE */ + .word OTG_FS_IRQHandler /* USB OTG FS */ + .word DMA2_Stream5_IRQHandler /* DMA2 Stream 5 */ + .word DMA2_Stream6_IRQHandler /* DMA2 Stream 6 */ + .word DMA2_Stream7_IRQHandler /* DMA2 Stream 7 */ + .word USART6_IRQHandler /* USART6 */ + .word I2C3_EV_IRQHandler /* I2C3 event */ + .word I2C3_ER_IRQHandler /* I2C3 error */ + .word OTG_HS_EP1_OUT_IRQHandler /* USB OTG HS End Point 1 Out */ + .word OTG_HS_EP1_IN_IRQHandler /* USB OTG HS End Point 1 In */ + .word OTG_HS_WKUP_IRQHandler /* USB OTG HS Wakeup through EXTI */ + .word OTG_HS_IRQHandler /* USB OTG HS */ + .word DCMI_IRQHandler /* DCMI */ + .word CRYP_IRQHandler /* CRYP crypto */ + .word HASH_RNG_IRQHandler /* Hash and Rng */ + .word FPU_IRQHandler /* FPU */ + + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak MemManage_Handler + .thumb_set MemManage_Handler,Default_Handler + + .weak BusFault_Handler + .thumb_set BusFault_Handler,Default_Handler + + .weak UsageFault_Handler + .thumb_set UsageFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak DebugMon_Handler + .thumb_set DebugMon_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak WWDG_IRQHandler + .thumb_set WWDG_IRQHandler,Default_Handler + + .weak PVD_IRQHandler + .thumb_set PVD_IRQHandler,Default_Handler + + .weak TAMP_STAMP_IRQHandler + .thumb_set TAMP_STAMP_IRQHandler,Default_Handler + + .weak RTC_WKUP_IRQHandler + .thumb_set RTC_WKUP_IRQHandler,Default_Handler + + .weak FLASH_IRQHandler + .thumb_set FLASH_IRQHandler,Default_Handler + + .weak RCC_IRQHandler + .thumb_set RCC_IRQHandler,Default_Handler + + .weak EXTI0_IRQHandler + .thumb_set EXTI0_IRQHandler,Default_Handler + + .weak EXTI1_IRQHandler + .thumb_set EXTI1_IRQHandler,Default_Handler + + .weak EXTI2_IRQHandler + .thumb_set EXTI2_IRQHandler,Default_Handler + + .weak EXTI3_IRQHandler + .thumb_set EXTI3_IRQHandler,Default_Handler + + .weak EXTI4_IRQHandler + .thumb_set EXTI4_IRQHandler,Default_Handler + + .weak DMA1_Stream0_IRQHandler + .thumb_set DMA1_Stream0_IRQHandler,Default_Handler + + .weak DMA1_Stream1_IRQHandler + .thumb_set DMA1_Stream1_IRQHandler,Default_Handler + + .weak DMA1_Stream2_IRQHandler + .thumb_set DMA1_Stream2_IRQHandler,Default_Handler + + .weak DMA1_Stream3_IRQHandler + .thumb_set DMA1_Stream3_IRQHandler,Default_Handler + + .weak DMA1_Stream4_IRQHandler + .thumb_set DMA1_Stream4_IRQHandler,Default_Handler + + .weak DMA1_Stream5_IRQHandler + .thumb_set DMA1_Stream5_IRQHandler,Default_Handler + + .weak DMA1_Stream6_IRQHandler + .thumb_set DMA1_Stream6_IRQHandler,Default_Handler + + .weak ADC_IRQHandler + .thumb_set ADC_IRQHandler,Default_Handler + + .weak CAN1_TX_IRQHandler + .thumb_set CAN1_TX_IRQHandler,Default_Handler + + .weak CAN1_RX0_IRQHandler + .thumb_set CAN1_RX0_IRQHandler,Default_Handler + + .weak CAN1_RX1_IRQHandler + .thumb_set CAN1_RX1_IRQHandler,Default_Handler + + .weak CAN1_SCE_IRQHandler + .thumb_set CAN1_SCE_IRQHandler,Default_Handler + + .weak EXTI9_5_IRQHandler + .thumb_set EXTI9_5_IRQHandler,Default_Handler + + .weak TIM1_BRK_TIM9_IRQHandler + .thumb_set TIM1_BRK_TIM9_IRQHandler,Default_Handler + + .weak TIM1_UP_TIM10_IRQHandler + .thumb_set TIM1_UP_TIM10_IRQHandler,Default_Handler + + .weak TIM1_TRG_COM_TIM11_IRQHandler + .thumb_set TIM1_TRG_COM_TIM11_IRQHandler,Default_Handler + + .weak TIM1_CC_IRQHandler + .thumb_set TIM1_CC_IRQHandler,Default_Handler + + .weak TIM2_IRQHandler + .thumb_set TIM2_IRQHandler,Default_Handler + + .weak TIM3_IRQHandler + .thumb_set TIM3_IRQHandler,Default_Handler + + .weak TIM4_IRQHandler + .thumb_set TIM4_IRQHandler,Default_Handler + + .weak I2C1_EV_IRQHandler + .thumb_set I2C1_EV_IRQHandler,Default_Handler + + .weak I2C1_ER_IRQHandler + .thumb_set I2C1_ER_IRQHandler,Default_Handler + + .weak I2C2_EV_IRQHandler + .thumb_set I2C2_EV_IRQHandler,Default_Handler + + .weak I2C2_ER_IRQHandler + .thumb_set I2C2_ER_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak USART1_IRQHandler + .thumb_set USART1_IRQHandler,Default_Handler + + .weak USART2_IRQHandler + .thumb_set USART2_IRQHandler,Default_Handler + + .weak USART3_IRQHandler + .thumb_set USART3_IRQHandler,Default_Handler + + .weak EXTI15_10_IRQHandler + .thumb_set EXTI15_10_IRQHandler,Default_Handler + + .weak RTC_Alarm_IRQHandler + .thumb_set RTC_Alarm_IRQHandler,Default_Handler + + .weak OTG_FS_WKUP_IRQHandler + .thumb_set OTG_FS_WKUP_IRQHandler,Default_Handler + + .weak TIM8_BRK_TIM12_IRQHandler + .thumb_set TIM8_BRK_TIM12_IRQHandler,Default_Handler + + .weak TIM8_UP_TIM13_IRQHandler + .thumb_set TIM8_UP_TIM13_IRQHandler,Default_Handler + + .weak TIM8_TRG_COM_TIM14_IRQHandler + .thumb_set TIM8_TRG_COM_TIM14_IRQHandler,Default_Handler + + .weak TIM8_CC_IRQHandler + .thumb_set TIM8_CC_IRQHandler,Default_Handler + + .weak DMA1_Stream7_IRQHandler + .thumb_set DMA1_Stream7_IRQHandler,Default_Handler + + .weak FSMC_IRQHandler + .thumb_set FSMC_IRQHandler,Default_Handler + + .weak SDIO_IRQHandler + .thumb_set SDIO_IRQHandler,Default_Handler + + .weak TIM5_IRQHandler + .thumb_set TIM5_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak TIM6_DAC_IRQHandler + .thumb_set TIM6_DAC_IRQHandler,Default_Handler + + .weak TIM7_IRQHandler + .thumb_set TIM7_IRQHandler,Default_Handler + + .weak DMA2_Stream0_IRQHandler + .thumb_set DMA2_Stream0_IRQHandler,Default_Handler + + .weak DMA2_Stream1_IRQHandler + .thumb_set DMA2_Stream1_IRQHandler,Default_Handler + + .weak DMA2_Stream2_IRQHandler + .thumb_set DMA2_Stream2_IRQHandler,Default_Handler + + .weak DMA2_Stream3_IRQHandler + .thumb_set DMA2_Stream3_IRQHandler,Default_Handler + + .weak DMA2_Stream4_IRQHandler + .thumb_set DMA2_Stream4_IRQHandler,Default_Handler + + .weak ETH_IRQHandler + .thumb_set ETH_IRQHandler,Default_Handler + + .weak ETH_WKUP_IRQHandler + .thumb_set ETH_WKUP_IRQHandler,Default_Handler + + .weak CAN2_TX_IRQHandler + .thumb_set CAN2_TX_IRQHandler,Default_Handler + + .weak CAN2_RX0_IRQHandler + .thumb_set CAN2_RX0_IRQHandler,Default_Handler + + .weak CAN2_RX1_IRQHandler + .thumb_set CAN2_RX1_IRQHandler,Default_Handler + + .weak CAN2_SCE_IRQHandler + .thumb_set CAN2_SCE_IRQHandler,Default_Handler + + .weak OTG_FS_IRQHandler + .thumb_set OTG_FS_IRQHandler,Default_Handler + + .weak DMA2_Stream5_IRQHandler + .thumb_set DMA2_Stream5_IRQHandler,Default_Handler + + .weak DMA2_Stream6_IRQHandler + .thumb_set DMA2_Stream6_IRQHandler,Default_Handler + + .weak DMA2_Stream7_IRQHandler + .thumb_set DMA2_Stream7_IRQHandler,Default_Handler + + .weak USART6_IRQHandler + .thumb_set USART6_IRQHandler,Default_Handler + + .weak I2C3_EV_IRQHandler + .thumb_set I2C3_EV_IRQHandler,Default_Handler + + .weak I2C3_ER_IRQHandler + .thumb_set I2C3_ER_IRQHandler,Default_Handler + + .weak OTG_HS_EP1_OUT_IRQHandler + .thumb_set OTG_HS_EP1_OUT_IRQHandler,Default_Handler + + .weak OTG_HS_EP1_IN_IRQHandler + .thumb_set OTG_HS_EP1_IN_IRQHandler,Default_Handler + + .weak OTG_HS_WKUP_IRQHandler + .thumb_set OTG_HS_WKUP_IRQHandler,Default_Handler + + .weak OTG_HS_IRQHandler + .thumb_set OTG_HS_IRQHandler,Default_Handler + + .weak DCMI_IRQHandler + .thumb_set DCMI_IRQHandler,Default_Handler + + .weak CRYP_IRQHandler + .thumb_set CRYP_IRQHandler,Default_Handler + + .weak HASH_RNG_IRQHandler + .thumb_set HASH_RNG_IRQHandler,Default_Handler + + .weak FPU_IRQHandler + .thumb_set FPU_IRQHandler,Default_Handler + +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ diff --git a/libcodec2-android/src/codec2/stm32/src/stm32f4_adc.c b/libcodec2-android/src/codec2/stm32/src/stm32f4_adc.c new file mode 100644 index 0000000..96e776b --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/src/stm32f4_adc.c @@ -0,0 +1,286 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: stm32f4_adc.c + AUTHOR......: David Rowe + DATE CREATED: 4 June 2013 + + Two channel ADC driver module for STM32F4. Pin PA1 connects to ADC1, pin + PA2 connects to ADC2. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2013 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include +#include + +#include "stm32f4xx_adc.h" +#include "stm32f4xx_gpio.h" +#include "stm32f4xx_rcc.h" + +#include "codec2_fifo.h" +#include "stm32f4_adc.h" +#include "debugblinky.h" + +struct FIFO *adc1_fifo; +struct FIFO *adc2_fifo; +unsigned short adc_buf[ADC_BUF_SZ]; +int adc_overflow1, adc_overflow2; +int half,full; + +#define ADCx_DR_ADDRESS ((uint32_t)0x4001204C) +#define DMA_CHANNELx DMA_Channel_0 +#define DMA_STREAMx DMA2_Stream0 +#define ADCx ADC1 + +void adc_configure(); + +static void tim2_config(int fs_divisor); + +// You can optionally supply your own storage for the FIFO buffers bu1 and buf2, +// or set them to NULL and they will be malloc-ed for you +void adc_open(int fs_divisor, int fifo_sz, short *buf1, short *buf2) { + if (buf1 == NULL) { + adc1_fifo = codec2_fifo_create(fifo_sz); + adc2_fifo = codec2_fifo_create(fifo_sz); + } else { + adc1_fifo = codec2_fifo_create_buf(fifo_sz, buf1); + adc2_fifo = codec2_fifo_create_buf(fifo_sz, buf2); + } + + tim2_config(fs_divisor); + adc_configure(); + init_debug_blinky(); +} + +/* n signed 16 bit samples in buf[] if return != -1 */ + +int adc1_read(short buf[], int n) { + return codec2_fifo_read(adc1_fifo, buf, n); +} + +/* n signed 16 bit samples in buf[] if return != -1 */ + +int adc2_read(short buf[], int n) { + return codec2_fifo_read(adc2_fifo, buf, n); +} + +/* Returns number of signed 16 bit samples in the FIFO currently */ +int adc1_samps(){ + return codec2_fifo_used(adc1_fifo); +} + +/* Returns number of signed 16 bit samples in the FIFO currently */ +int adc2_samps(){ + return codec2_fifo_used(adc2_fifo); +} + +static void tim2_config(int fs_divisor) +{ + TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; + + /* TIM2 Periph clock enable */ + RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); + + /* -------------------------------------------------------- + + TIM2 input clock (TIM2CLK) is set to 2 * APB1 clock (PCLK1), since + APB1 prescaler is different from 1 (see system_stm32f4xx.c and Fig + 13 clock tree figure in DM0031020.pdf). + + Sample rate Fs = 2*PCLK1/TIM_ClockDivision + = (HCLK/2)/TIM_ClockDivision + + ----------------------------------------------------------- */ + + /* Time base configuration */ + + TIM_TimeBaseStructInit(&TIM_TimeBaseStructure); + TIM_TimeBaseStructure.TIM_Period = fs_divisor - 1; + TIM_TimeBaseStructure.TIM_Prescaler = 0; + TIM_TimeBaseStructure.TIM_ClockDivision = 0; + TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; + TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); + + /* TIM2 TRGO selection */ + + TIM_SelectOutputTrigger(TIM2, TIM_TRGOSource_Update); + + /* TIM2 enable counter */ + + TIM_Cmd(TIM2, ENABLE); +} + + +void adc_configure(){ + ADC_InitTypeDef ADC_init_structure; + GPIO_InitTypeDef GPIO_initStructre; + DMA_InitTypeDef DMA_InitStructure; + NVIC_InitTypeDef NVIC_InitStructure; + + // Clock configuration + + RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE); + RCC_AHB1PeriphClockCmd(RCC_AHB1ENR_GPIOAEN,ENABLE); + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2, ENABLE); + + // Analog pin configuration ADC1->PA1, ADC2->PA2 + + GPIO_initStructre.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2; + GPIO_initStructre.GPIO_Mode = GPIO_Mode_AN; + GPIO_initStructre.GPIO_PuPd = GPIO_PuPd_NOPULL; + GPIO_Init(GPIOA,&GPIO_initStructre); + + // ADC structure configuration + + ADC_DeInit(); + ADC_init_structure.ADC_DataAlign = ADC_DataAlign_Left; + ADC_init_structure.ADC_Resolution = ADC_Resolution_12b; + ADC_init_structure.ADC_ContinuousConvMode = DISABLE; + ADC_init_structure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T2_TRGO; + ADC_init_structure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_Rising; + ADC_init_structure.ADC_NbrOfConversion = 2; + ADC_init_structure.ADC_ScanConvMode = ENABLE; + ADC_Init(ADCx,&ADC_init_structure); + + // Select the channel to be read from + + ADC_RegularChannelConfig(ADCx,ADC_Channel_1,1,ADC_SampleTime_144Cycles); + ADC_RegularChannelConfig(ADCx,ADC_Channel_2,2,ADC_SampleTime_144Cycles); + //ADC_VBATCmd(ENABLE); + + /* DMA configuration **************************************/ + + DMA_DeInit(DMA_STREAMx); + DMA_InitStructure.DMA_Channel = DMA_CHANNELx; + DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)ADCx_DR_ADDRESS; + DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)adc_buf; + DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory; + DMA_InitStructure.DMA_BufferSize = ADC_BUF_SZ; + DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; + DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; + DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; + DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; + DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; + DMA_InitStructure.DMA_Priority = DMA_Priority_High; + DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable; + DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull; + DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single; + DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; + DMA_Init(DMA_STREAMx, &DMA_InitStructure); + + /* Enable DMA request after last transfer (Single-ADC mode) */ + + ADC_DMARequestAfterLastTransferCmd(ADCx, ENABLE); + + /* Enable ADC1 DMA */ + + ADC_DMACmd(ADCx, ENABLE); + + /* DMA2_Stream0 enable */ + + DMA_Cmd(DMA_STREAMx, ENABLE); + + /* Enable DMA Half & Complete interrupts */ + + DMA_ITConfig(DMA2_Stream0, DMA_IT_TC | DMA_IT_HT, ENABLE); + + /* Enable the DMA Stream IRQ Channel */ + + NVIC_InitStructure.NVIC_IRQChannel = DMA2_Stream0_IRQn; + NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; + NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; + NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; + NVIC_Init(&NVIC_InitStructure); + + // Enable and start ADC conversion + + ADC_Cmd(ADC1,ENABLE); + ADC_SoftwareStartConv(ADC1); +} + +/* + This function handles DMA Stream interrupt request. +*/ + +void DMA2_Stream0_IRQHandler(void) { + int i, j, sam; + short signed_buf1[ADC_BUF_SZ/2]; + short signed_buf2[ADC_BUF_SZ/2]; + + GPIOE->ODR |= (1 << 0); + + /* Half transfer interrupt */ + + if(DMA_GetITStatus(DMA2_Stream0, DMA_IT_HTIF0) != RESET) { + half++; + + /* convert to signed */ + + for(i=0, j=0; iODR &= ~(1 << 0); +} + diff --git a/libcodec2-android/src/codec2/stm32/src/stm32f4_adc_tuner.c b/libcodec2-android/src/codec2/stm32/src/stm32f4_adc_tuner.c new file mode 100644 index 0000000..ad1ced3 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/src/stm32f4_adc_tuner.c @@ -0,0 +1,289 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: stm32f4_adc_tuner.c + AUTHOR......: David Rowe + DATE CREATED: 19 Feb 2015 + + Single channel ADC driver module for STM32F4 that samples pin PA1 at + 2 MHz and down converts to 50 kHz, with "tuning" centred at 500 kHz. + + See codec2-dev/octave.m for a simulation model. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2015 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include +#include + +#include "stm32f4xx_adc.h" +#include "stm32f4xx_gpio.h" +#include "stm32f4xx_rcc.h" + +#include "codec2_fifo.h" +#include "stm32f4_adc_tuner.h" +#include "debugblinky.h" +#include "iir_tuner.h" + +struct FIFO *adc1_fifo; +unsigned short adc_buf[ADC_TUNER_BUF_SZ], *padc_buf; +int adc_overflow1; +int half,full; +static short tuner_en = 1; + +#define ADCx_DR_ADDRESS ((uint32_t)0x4001204C) +#define DMA_CHANNELx DMA_Channel_0 +#define DMA_STREAMx DMA2_Stream0 +#define ADCx ADC1 + +void adc_configure(); + +static void tim2_config(void); + +//#define DUMMY_SIGNAL +#ifdef DUMMY_SIGNAL +unsigned short sine[ADC_TUNER_BUF_SZ]; +#endif + +void adc_open(int fifo_sz) { + adc1_fifo = codec2_fifo_create(fifo_sz); + assert(adc1_fifo != NULL); + + tim2_config(); + adc_configure(); + init_debug_blinky(); +} + + +/* n signed 16 bit samples in buf[] if return != -1 */ + +int adc1_read(short buf[], int n) { + return codec2_fifo_read(adc1_fifo, buf, n); +} + + +void adc_set_tuner_en(short flag) +{ + tuner_en = flag; +} + +static void tim2_config(void) +{ + TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; + + /* TIM2 Periph clock enable */ + RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); + + /* -------------------------------------------------------- + + TIM2 input clock (TIM2CLK) is set to 2 * APB1 clock (PCLK1), since + APB1 prescaler is different from 1 (see system_stm32f4xx.c and Fig + 13 clock tree figure in DM0031020.pdf). + + Sample rate Fs = 2*PCLK1/)TIM_ClockDivision+1) + = (HCLK/2)/(TIM_ClockDivision+1) + + Note from David: The +1 was discovered empirically, still not sure + if it's right. + + ----------------------------------------------------------- */ + + /* Time base configuration */ + + TIM_TimeBaseStructInit(&TIM_TimeBaseStructure); + TIM_TimeBaseStructure.TIM_Period = 41; + TIM_TimeBaseStructure.TIM_Prescaler = 0; + TIM_TimeBaseStructure.TIM_ClockDivision = 0; + TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; + TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); + + /* TIM2 TRGO selection */ + + TIM_SelectOutputTrigger(TIM2, TIM_TRGOSource_Update); + + /* TIM2 enable counter */ + + TIM_Cmd(TIM2, ENABLE); +} + + +void adc_configure() { + ADC_InitTypeDef ADC_init_structure; + GPIO_InitTypeDef GPIO_initStructre; + DMA_InitTypeDef DMA_InitStructure; + NVIC_InitTypeDef NVIC_InitStructure; + + // Clock configuration + + RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE); + RCC_AHB1PeriphClockCmd(RCC_AHB1ENR_GPIOAEN,ENABLE); + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2, ENABLE); + + // Analog pin configuration ADC1->PA1 + + GPIO_initStructre.GPIO_Pin = GPIO_Pin_1; + GPIO_initStructre.GPIO_Mode = GPIO_Mode_AN; + GPIO_initStructre.GPIO_PuPd = GPIO_PuPd_NOPULL; + GPIO_Init(GPIOA,&GPIO_initStructre); + + // ADC structure configuration + + ADC_DeInit(); + ADC_init_structure.ADC_DataAlign = ADC_DataAlign_Left; + ADC_init_structure.ADC_Resolution = ADC_Resolution_12b; + ADC_init_structure.ADC_ContinuousConvMode = DISABLE; + ADC_init_structure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T2_TRGO; + ADC_init_structure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_Rising; + ADC_init_structure.ADC_NbrOfConversion = 1; + ADC_Init(ADCx,&ADC_init_structure); + + // Select the channel to be read from + + ADC_RegularChannelConfig(ADCx,ADC_Channel_1,1,ADC_SampleTime_3Cycles); + + /* DMA configuration **************************************/ + + DMA_DeInit(DMA_STREAMx); + DMA_InitStructure.DMA_Channel = DMA_CHANNELx; + DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)ADCx_DR_ADDRESS; + DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)adc_buf; + DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory; + DMA_InitStructure.DMA_BufferSize = ADC_TUNER_BUF_SZ; + DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; + DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; + DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; + DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; + DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; + DMA_InitStructure.DMA_Priority = DMA_Priority_High; + DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable; + DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull; + DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single; + DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; + DMA_Init(DMA_STREAMx, &DMA_InitStructure); + + /* Enable DMA request after last transfer (Single-ADC mode) */ + + ADC_DMARequestAfterLastTransferCmd(ADCx, ENABLE); + + /* Enable ADC1 DMA */ + + ADC_DMACmd(ADCx, ENABLE); + + /* DMA2_Stream0 enable */ + + DMA_Cmd(DMA_STREAMx, ENABLE); + + /* Enable DMA Half & Complete interrupts */ + + DMA_ITConfig(DMA2_Stream0, DMA_IT_TC | DMA_IT_HT, ENABLE); + + /* Enable the DMA Stream IRQ Channel */ + + NVIC_InitStructure.NVIC_IRQChannel = DMA2_Stream0_IRQn; + NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; + NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; + NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; + NVIC_Init(&NVIC_InitStructure); + + // Enable and start ADC conversion + + ADC_Cmd(ADC1,ENABLE); + ADC_SoftwareStartConv(ADC1); + + padc_buf = adc_buf; + + #ifdef DUMMY_SIGNAL + int i; + + /* Fs/4 sine wave, right in the middle of the pass band ! */ + + for(i=0; iODR |= (1 << 0); + + /* Half transfer interrupt */ + + if(DMA_GetITStatus(DMA2_Stream0, DMA_IT_HTIF0) != RESET) { + half++; + + if (tuner_en) { + iir_tuner(dec_buf, padc_buf); + + /* write first half to fifo. Note we are writing ADC_TUNER_N/2 floats, + which is equivalent to ADC_TUNER_N shorts. */ + + if (codec2_fifo_write(adc1_fifo, (short*)dec_buf, ADC_TUNER_N) == -1) { + adc_overflow1++; + } + } + else // note: we dump signed shorts when tuner off + codec2_fifo_write(adc1_fifo, (short*)padc_buf, ADC_TUNER_BUF_SZ/2); + + /* Clear DMA Stream Transfer Complete interrupt pending bit */ + + DMA_ClearITPendingBit(DMA2_Stream0, DMA_IT_HTIF0); + } + + /* Transfer complete interrupt */ + + if(DMA_GetITStatus(DMA2_Stream0, DMA_IT_TCIF0) != RESET) { + full++; + + if (tuner_en) { + iir_tuner(dec_buf, &padc_buf[ADC_TUNER_BUF_SZ/2]); + + /* write second half to fifo */ + + if (codec2_fifo_write(adc1_fifo, (short*)dec_buf, ADC_TUNER_N) == -1) { + adc_overflow1++; + } + } + else + codec2_fifo_write(adc1_fifo, (short*)&padc_buf[ADC_TUNER_BUF_SZ/2], ADC_TUNER_BUF_SZ/2); + + /* Clear DMA Stream Transfer Complete interrupt pending bit */ + + DMA_ClearITPendingBit(DMA2_Stream0, DMA_IT_TCIF0); + } + + GPIOE->ODR &= ~(1 << 0); +} + diff --git a/libcodec2-android/src/codec2/stm32/src/stm32f4_dac.c b/libcodec2-android/src/codec2/stm32/src/stm32f4_dac.c new file mode 100644 index 0000000..ec61bf4 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/src/stm32f4_dac.c @@ -0,0 +1,427 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: stm32f4_dac.c + AUTHOR......: David Rowe + DATE CREATED: 1 June 2013 + + DAC driver module for STM32F4. DAC1 is connected to pin PA4, DAC2 + is connected to pin PA5. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2013 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include +#include +#include "stm32f4xx.h" +#include "codec2_fifo.h" +#include "stm32f4_dac.h" +#include "debugblinky.h" + +/* write to these registers for 12 bit left aligned data, as per data sheet + make sure 4 least sig bits set to 0 */ + +#define DAC_DHR12R1_ADDRESS 0x40007408 +#define DAC_DHR12R2_ADDRESS 0x40007414 + +#define DAC_MAX 4096 /* maximum amplitude */ + +/* y=mx+c mapping of samples16 bit shorts to DAC samples. Table: 74 + of data sheet indicates With DAC buffer on, DAC range is limited to + 0x0E0 to 0xF1C at VREF+ = 3.6 V, we have Vref=3.3V which is close. + */ + +#define M ((3868.0-224.0)/65536.0) +#define C 2047.0 + +static struct FIFO *dac1_fifo; +static struct FIFO *dac2_fifo; + +static unsigned short dac1_buf[DAC_BUF_SZ]; +static unsigned short dac2_buf[DAC_BUF_SZ]; + +static void tim6_config(int fs_divisor); +static void dac1_config(void); +static void dac2_config(void); + +int dac_underflow; + +// You can optionally supply your own storage for the FIFO buffers bu1 and buf2, +// or set them to NULL and they will be malloc-ed for you +void dac_open(int fs_divisor, int fifo_size, short *buf1, short *buf2) { + + memset(dac1_buf, 32768, sizeof(short)*DAC_BUF_SZ); + memset(dac2_buf, 32768, sizeof(short)*DAC_BUF_SZ); + + /* Create fifos */ + + if ((buf1 == NULL) && (buf2 == NULL)) { + dac1_fifo = codec2_fifo_create(fifo_size); + dac2_fifo = codec2_fifo_create(fifo_size); + } else { + dac1_fifo = codec2_fifo_create_buf(fifo_size, buf1); + dac2_fifo = codec2_fifo_create_buf(fifo_size, buf2); + } + + /* Turn on the clocks we need -----------------------------------------------*/ + + /* DMA1 clock enable */ + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA1, ENABLE); + /* GPIOA clock enable (to be used with DAC) */ + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); + /* DAC Periph clock enable */ + RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE); + + /* GPIO Pin configuration DAC1->PA.4, DAC2->PA.5 configuration --------------*/ + + GPIO_InitTypeDef GPIO_InitStructure; + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; + GPIO_Init(GPIOA, &GPIO_InitStructure); + + /* Timer and DAC 1 & 2 Configuration ----------------------------------------*/ + + tim6_config(fs_divisor); + dac1_config(); + dac2_config(); + + init_debug_blinky(); +} + +/* Call these functions to send samples to the DACs. For your + convenience they accept signed 16 bit samples. You can optionally + limit how much data to store in the fifo */ + +int dac1_write(short buf[], int n, int limit) { + /* artificial limit < FIFO size */ + if (limit) { + if ((codec2_fifo_used(dac1_fifo) + n) <= limit) + return codec2_fifo_write(dac1_fifo, buf, n); + else + return -1; + } + /* normal operation */ + return codec2_fifo_write(dac1_fifo, buf, n); +} + +int dac2_write(short buf[], int n, int limit) { + /* artificial limit < FIFO size */ + if (limit) { + if ((codec2_fifo_used(dac2_fifo) + n) <= limit) + return codec2_fifo_write(dac2_fifo, buf, n); + else + return -1; + } + /* normal operation */ + return codec2_fifo_write(dac2_fifo, buf, n); +} + +int dac1_free() { + return codec2_fifo_free(dac1_fifo); +} + +int dac2_free() { + return codec2_fifo_free(dac2_fifo); +} + +static void tim6_config(int fs_divisor) +{ + TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; + + /* TIM6 Periph clock enable */ + RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, ENABLE); + + /* -------------------------------------------------------- + + TIM6 input clock (TIM6CLK) is set to 2 * APB1 clock (PCLK1), since + APB1 prescaler is different from 1 (see system_stm32f4xx.c and Fig + 13 clock tree figure in DM0031020.pdf). + + Sample rate Fs = 2*PCLK1/TIM_ClockDivision + = (HCLK/2)/TIM_ClockDivision + + ----------------------------------------------------------- */ + + /* Time base configuration */ + + TIM_TimeBaseStructInit(&TIM_TimeBaseStructure); + TIM_TimeBaseStructure.TIM_Period = fs_divisor - 1; + TIM_TimeBaseStructure.TIM_Prescaler = 0; + TIM_TimeBaseStructure.TIM_ClockDivision = 0; + TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; + TIM_TimeBaseInit(TIM6, &TIM_TimeBaseStructure); + + /* TIM6 TRGO selection */ + + TIM_SelectOutputTrigger(TIM6, TIM_TRGOSource_Update); + + /* TIM6 enable counter */ + + TIM_Cmd(TIM6, ENABLE); +} + +static void dac1_config(void) +{ + DAC_InitTypeDef DAC_InitStructure; + DMA_InitTypeDef DMA_InitStructure; + NVIC_InitTypeDef NVIC_InitStructure; + + /* DAC channel 1 Configuration */ + + /* + This line fixed a bug that cost me 5 days, bad wave amplitude + value, and some STM32F4 periph library bugs caused triangle wave + geneartion to be enable resulting in a low level tone on the + SM1000, that we thought was caused by analog issues like layour + or power supply biasing + */ + DAC_StructInit(&DAC_InitStructure); + + DAC_InitStructure.DAC_Trigger = DAC_Trigger_T6_TRGO; + DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None; + DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Enable; + DAC_Init(DAC_Channel_1, &DAC_InitStructure); + + /* DMA1_Stream5 channel7 configuration **************************************/ + /* Table 35 page 219 of the monster data sheet */ + + DMA_DeInit(DMA1_Stream5); + DMA_InitStructure.DMA_Channel = DMA_Channel_7; + DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)DAC_DHR12R1_ADDRESS; + DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)dac1_buf; + DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral; + DMA_InitStructure.DMA_BufferSize = DAC_BUF_SZ; + DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; + DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; + DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; + DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; + DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; + DMA_InitStructure.DMA_Priority = DMA_Priority_High; + DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable; + DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull; + DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single; + DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; + DMA_Init(DMA1_Stream5, &DMA_InitStructure); + + /* Enable DMA Half & Complete interrupts */ + + DMA_ITConfig(DMA1_Stream5, DMA_IT_TC | DMA_IT_HT, ENABLE); + + /* Enable the DMA Stream IRQ Channel */ + + NVIC_InitStructure.NVIC_IRQChannel = DMA1_Stream5_IRQn; + NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; + NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; + NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; + NVIC_Init(&NVIC_InitStructure); + + /* Enable DMA1_Stream5 */ + + DMA_Cmd(DMA1_Stream5, ENABLE); + + /* Enable DAC Channel 1 */ + + DAC_Cmd(DAC_Channel_1, ENABLE); + + /* Enable DMA for DAC Channel 1 */ + + DAC_DMACmd(DAC_Channel_1, ENABLE); +} + +static void dac2_config(void) +{ + DAC_InitTypeDef DAC_InitStructure; + DMA_InitTypeDef DMA_InitStructure; + NVIC_InitTypeDef NVIC_InitStructure; + + /* DAC channel 2 Configuration (see notes in dac1_config() above) */ + + DAC_StructInit(&DAC_InitStructure); + DAC_InitStructure.DAC_Trigger = DAC_Trigger_T6_TRGO; + DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None; + DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Enable; + DAC_Init(DAC_Channel_2, &DAC_InitStructure); + + /* DMA1_Stream6 channel7 configuration **************************************/ + + DMA_DeInit(DMA1_Stream6); + DMA_InitStructure.DMA_Channel = DMA_Channel_7; + DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)DAC_DHR12R2_ADDRESS; + DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)dac2_buf; + DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral; + DMA_InitStructure.DMA_BufferSize = DAC_BUF_SZ; + DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; + DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; + DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; + DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; + DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; + DMA_InitStructure.DMA_Priority = DMA_Priority_High; + DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable; + DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull; + DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single; + DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; + DMA_Init(DMA1_Stream6, &DMA_InitStructure); + + /* Enable DMA Half & Complete interrupts */ + + DMA_ITConfig(DMA1_Stream6, DMA_IT_TC | DMA_IT_HT, ENABLE); + + /* Enable the DMA Stream IRQ Channel */ + + NVIC_InitStructure.NVIC_IRQChannel = DMA1_Stream6_IRQn; + NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; + NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; + NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; + NVIC_Init(&NVIC_InitStructure); + + /* Enable DMA1_Stream6 */ + + DMA_Cmd(DMA1_Stream6, ENABLE); + + /* Enable DAC Channel 2 */ + + DAC_Cmd(DAC_Channel_2, ENABLE); + + /* Enable DMA for DAC Channel 2 */ + + DAC_DMACmd(DAC_Channel_2, ENABLE); + +} + +/******************************************************************************/ +/* STM32F4xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f40xx.s/startup_stm32f427x.s). */ +/******************************************************************************/ + +/* + This function handles DMA1 Stream 5 interrupt request for DAC1. +*/ + +void DMA1_Stream5_IRQHandler(void) { + int i, j, sam; + short signed_buf[DAC_BUF_SZ/2]; + + GPIOE->ODR |= (1 << 1); + + /* Transfer half empty interrupt - refill first half */ + + if(DMA_GetITStatus(DMA1_Stream5, DMA_IT_HTIF5) != RESET) { + /* fill first half from fifo */ + + if (codec2_fifo_read(dac1_fifo, signed_buf, DAC_BUF_SZ/2) == -1) { + memset(signed_buf, 0, sizeof(short)*DAC_BUF_SZ/2); + dac_underflow++; + } + + /* convert to unsigned */ + + for(i=0; iODR &= ~(1 << 1); +} + +/* + This function handles DMA1 Stream 6 interrupt request for DAC2. +*/ + +void DMA1_Stream6_IRQHandler(void) { + int i, j, sam; + short signed_buf[DAC_BUF_SZ/2]; + + GPIOE->ODR |= (1 << 2); + + /* Transfer half empty interrupt - refill first half */ + + if(DMA_GetITStatus(DMA1_Stream6, DMA_IT_HTIF6) != RESET) { + /* fill first half from fifo */ + + if (codec2_fifo_read(dac2_fifo, signed_buf, DAC_BUF_SZ/2) == -1) { + memset(signed_buf, 0, sizeof(short)*DAC_BUF_SZ/2); + dac_underflow++; + } + + /* convert to unsigned */ + + for(i=0; iODR &= ~(1 << 2); +} diff --git a/libcodec2-android/src/codec2/stm32/src/stm32f4_dacduc.c b/libcodec2-android/src/codec2/stm32/src/stm32f4_dacduc.c new file mode 100644 index 0000000..fa4c917 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/src/stm32f4_dacduc.c @@ -0,0 +1,416 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: stm32f4_dac.c + AUTHOR......: David Rowe + DATE CREATED: 1 June 2013 + + DAC driver module for STM32F4. DAC1 if fixed at Fs of 2Mhz. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2013 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include +#include +#include "stm32f4xx.h" +#include "codec2_fifo.h" +#include "stm32f4_dacduc.h" +#include "debugblinky.h" + +/* write to these registers for 12 bit left aligned data, as per data sheet + make sure 4 least sig bits set to 0 */ + +#define DAC_DHR12R1_ADDRESS 0x40007408 +#define DAC_DHR12R2_ADDRESS 0x40007414 + +#define DAC_MAX 4096 /* maximum amplitude */ + +/* y=mx+c mapping of samples16 bit shorts to DAC samples. Table: 74 + of data sheet indicates With DAC buffer on, DAC range is limited to + 0x0E0 to 0xF1C at VREF+ = 3.6 V, we have Vref=3.3V which is close. + */ + +#define M ((3868.0-224.0)/65536.0) +#define C 2047.0 + + +static struct FIFO *dac1_fifo; +static struct FIFO *dac2_fifo; + +static unsigned short dac1_buf[DAC_DUC_BUF_SZ]; +static unsigned short dac2_buf[DAC_BUF_SZ]; + +static void tim6_config(void); +static void tim7_config(void); +static void dac1_config(void); +static void dac2_config(void); + +int dac_underflow; + +void fast_dac_open(int dac1_fifo_size,int dac2_fifo_size) { + + memset(dac1_buf, 32768, sizeof(short)*DAC_DUC_BUF_SZ); + memset(dac2_buf, 32768, sizeof(short)*DAC_BUF_SZ); + + /* Create fifos */ + + dac1_fifo = codec2_fifo_create(dac1_fifo_size); + dac2_fifo = codec2_fifo_create(dac2_fifo_size); + assert(dac1_fifo != NULL); + assert(dac2_fifo != NULL); + + /* Turn on the clocks we need -----------------------------------------------*/ + + /* DMA1 clock enable */ + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA1, ENABLE); + /* GPIOA clock enable (to be used with DAC) */ + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); + /* DAC Periph clock enable */ + RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE); + + /* GPIO Pin configuration DAC1->PA.4, DAC2->PA.5 configuration --------------*/ + + GPIO_InitTypeDef GPIO_InitStructure; + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; + GPIO_Init(GPIOA, &GPIO_InitStructure); + + /* Timer and DAC 1 & 2 Configuration ----------------------------------------*/ + tim7_config(); + tim6_config(); + dac1_config(); + dac2_config(); + + init_debug_blinky(); +} + + +/* Call these puppies to send samples to the DACs. For your + convenience they accept signed 16 bit samples. */ + +int dac1_write(short buf[], int n) { + return codec2_fifo_write(dac1_fifo, buf, n); +} + +int dac2_write(short buf[], int n) { + return codec2_fifo_write(dac2_fifo, buf, n); +} + +static void tim6_config(void) +{ + TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; + + /* TIM6 Periph clock enable */ + RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, ENABLE); + + /* -------------------------------------------------------- + + TIM6 input clock (TIM6CLK) is set to 2 * APB1 clock (PCLK1), since + APB1 prescaler is different from 1 (see system_stm32f4xx.c and Fig + 13 clock tree figure in DM0031020.pdf). + + Sample rate Fs = 2*PCLK1/TIM_ClockDivision + = (HCLK/2)/TIM_ClockDivision + + ----------------------------------------------------------- */ + + /* Time base configuration */ + + TIM_TimeBaseStructInit(&TIM_TimeBaseStructure); + TIM_TimeBaseStructure.TIM_Period = 5250; + TIM_TimeBaseStructure.TIM_Prescaler = 0; + TIM_TimeBaseStructure.TIM_ClockDivision = 0; + TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; + TIM_TimeBaseInit(TIM6, &TIM_TimeBaseStructure); + + /* TIM6 TRGO selection */ + + TIM_SelectOutputTrigger(TIM6, TIM_TRGOSource_Update); + + /* TIM6 enable counter */ + + TIM_Cmd(TIM6, ENABLE); +} + +/* Sets up tim7 to run at a high sample rate */ +void tim7_config(void) +{ + /* Set up tim7 */ + + + TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; + + /* TIM7 Periph clock enable */ + RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM7, ENABLE); + + /* -------------------------------------------------------- + + + TIM7 input clock (TIM7CLK) is set to 2 * APB1 clock (PCLK1), since + APB1 prescaler is different from 1 (see system_stm32f4xx.c and Fig + 13 clock tree figure in DM0031020.pdf). + + Sample rate Fs = 2*PCLK1/TIM_ClockDivision + = (HCLK/2)/TIM_ClockDivision + + ----------------------------------------------------------- */ + + /* Time base configuration */ + + TIM_TimeBaseStructInit(&TIM_TimeBaseStructure); + TIM_TimeBaseStructure.TIM_Period = 41; + TIM_TimeBaseStructure.TIM_Prescaler = 0; + TIM_TimeBaseStructure.TIM_ClockDivision = 0; + TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; + TIM_TimeBaseInit(TIM7, &TIM_TimeBaseStructure); + + /* TIM7 TRGO selection */ + + TIM_SelectOutputTrigger(TIM7, TIM_TRGOSource_Update); + + /* TIM7 enable counter */ + + TIM_Cmd(TIM7, ENABLE); +} + +static void dac1_config(void) +{ + DAC_InitTypeDef DAC_InitStructure; + DMA_InitTypeDef DMA_InitStructure; + NVIC_InitTypeDef NVIC_InitStructure; + + /* DAC channel 1 Configuration */ + + /* + This line fixed a bug that cost me 5 days, bad wave amplitude + value, and some STM32F4 periph library bugs caused triangle wave + geneartion to be enable resulting in a low level tone on the + SM1000, that we thought was caused by analog issues like layour + or power supply biasing + */ + DAC_StructInit(&DAC_InitStructure); + + DAC_InitStructure.DAC_Trigger = DAC_Trigger_T7_TRGO; + DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None; + + /*External buffering is needed to get nice square samples at Fs=2Mhz. See DM00129215.pdf */ + DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Disable; + DAC_Init(DAC_Channel_1, &DAC_InitStructure); + + /* DMA1_Stream5 channel7 configuration **************************************/ + /* Table 35 page 219 of the monster data sheet */ + + DMA_DeInit(DMA1_Stream5); + DMA_InitStructure.DMA_Channel = DMA_Channel_7; + DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)DAC_DHR12R1_ADDRESS; + DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)dac1_buf; + DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral; + DMA_InitStructure.DMA_BufferSize = DAC_DUC_BUF_SZ; + DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; + DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; + DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; + DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; + DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; + DMA_InitStructure.DMA_Priority = DMA_Priority_High; + DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable; + DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull; + DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single; + DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; + DMA_Init(DMA1_Stream5, &DMA_InitStructure); + + /* Enable DMA Half & Complete interrupts */ + + DMA_ITConfig(DMA1_Stream5, DMA_IT_TC | DMA_IT_HT, ENABLE); + + /* Enable the DMA Stream IRQ Channel */ + + NVIC_InitStructure.NVIC_IRQChannel = DMA1_Stream5_IRQn; + NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; + NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; + NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; + NVIC_Init(&NVIC_InitStructure); + + /* Enable DMA1_Stream5 */ + + DMA_Cmd(DMA1_Stream5, ENABLE); + + /* Enable DAC Channel 1 */ + + DAC_Cmd(DAC_Channel_1, ENABLE); + + /* Enable DMA for DAC Channel 1 */ + + DAC_DMACmd(DAC_Channel_1, ENABLE); +} + +static void dac2_config(void) +{ + DAC_InitTypeDef DAC_InitStructure; + DMA_InitTypeDef DMA_InitStructure; + NVIC_InitTypeDef NVIC_InitStructure; + + /* DAC channel 2 Configuration (see notes in dac1_config() above) */ + + DAC_StructInit(&DAC_InitStructure); + DAC_InitStructure.DAC_Trigger = DAC_Trigger_T6_TRGO; + DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None; + DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Enable; + DAC_Init(DAC_Channel_2, &DAC_InitStructure); + + /* DMA1_Stream6 channel7 configuration **************************************/ + + DMA_DeInit(DMA1_Stream6); + DMA_InitStructure.DMA_Channel = DMA_Channel_7; + DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)DAC_DHR12R2_ADDRESS; + DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)dac2_buf; + DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral; + DMA_InitStructure.DMA_BufferSize = DAC_BUF_SZ; + DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; + DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; + DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; + DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; + DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; + DMA_InitStructure.DMA_Priority = DMA_Priority_High; + DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable; + DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull; + DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single; + DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; + DMA_Init(DMA1_Stream6, &DMA_InitStructure); + + /* Enable DMA Half & Complete interrupts */ + + DMA_ITConfig(DMA1_Stream6, DMA_IT_TC | DMA_IT_HT, ENABLE); + + /* Enable the DMA Stream IRQ Channel */ + + NVIC_InitStructure.NVIC_IRQChannel = DMA1_Stream6_IRQn; + NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; + NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; + NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; + NVIC_Init(&NVIC_InitStructure); + + /* Enable DMA1_Stream6 */ + + DMA_Cmd(DMA1_Stream6, ENABLE); + + /* Enable DAC Channel 2 */ + + DAC_Cmd(DAC_Channel_2, ENABLE); + + /* Enable DMA for DAC Channel 2 */ + + DAC_DMACmd(DAC_Channel_2, ENABLE); + +} + +/******************************************************************************/ +/* STM32F4xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f40xx.s/startup_stm32f427x.s). */ +/******************************************************************************/ + +/* + This function handles DMA1 Stream 5 interrupt request for DAC1. +*/ + +void DMA1_Stream5_IRQHandler(void) { + GPIOE->ODR |= (1 << 1); + + /* Transfer half empty interrupt - refill first half */ + + if(DMA_GetITStatus(DMA1_Stream5, DMA_IT_HTIF5) != RESET) { + /* fill first half from fifo */ + codec2_fifo_read(dac1_fifo, (short*)dac1_buf, DAC_DUC_BUF_SZ/2); + + /* Clear DMA Stream Transfer Complete interrupt pending bit */ + DMA_ClearITPendingBit(DMA1_Stream5, DMA_IT_HTIF5); + } + + /* Transfer complete interrupt - refill 2nd half */ + + if(DMA_GetITStatus(DMA1_Stream5, DMA_IT_TCIF5) != RESET) { + /* fill second half from fifo */ + codec2_fifo_read(dac1_fifo, (short*)(dac1_buf+DAC_DUC_BUF_SZ/2), DAC_DUC_BUF_SZ/2); + + /* Clear DMA Stream Transfer Complete interrupt pending bit */ + DMA_ClearITPendingBit(DMA1_Stream5, DMA_IT_TCIF5); + } + + GPIOE->ODR &= ~(1 << 1); +} + +/* + This function handles DMA1 Stream 6 interrupt request for DAC2. +*/ + +void DMA1_Stream6_IRQHandler(void) { + int i, j, sam; + short signed_buf[DAC_BUF_SZ/2]; + + GPIOE->ODR |= (1 << 2); + + /* Transfer half empty interrupt - refill first half */ + + if(DMA_GetITStatus(DMA1_Stream6, DMA_IT_HTIF6) != RESET) { + /* fill first half from fifo */ + + if (codec2_fifo_read(dac2_fifo, signed_buf, DAC_BUF_SZ/2) == -1) { + memset(signed_buf, 0, sizeof(short)*DAC_BUF_SZ/2); + dac_underflow++; + } + + /* convert to unsigned */ + + for(i=0; iODR &= ~(1 << 2); +} + diff --git a/libcodec2-android/src/codec2/stm32/src/stm32f4_dacloduc.c b/libcodec2-android/src/codec2/stm32/src/stm32f4_dacloduc.c new file mode 100644 index 0000000..2aa3f40 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/src/stm32f4_dacloduc.c @@ -0,0 +1,276 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: stm32f4_dacloduc.c + AUTHOR......: David Rowe + DATE CREATED: Sep 2015 + + Experimental DAC driver module for STM32F4 that includes a low IF + Digital Up Converter (DUC). The Fs=96kHz signal is mixed up by a + (real) 24 kHz (Fs/4) local oscillator, then output by DAC1. + + DAC1 is connected to pin PA4. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2015 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include +#include +#include +#include "stm32f4xx.h" +#include "codec2_fifo.h" +#include "stm32f4_dac.h" +#include "debugblinky.h" + +/* write to these registers for 12 bit left aligned data, as per data sheet + make sure 4 least sig bits set to 0 */ + +#define DAC_DHR12R1_ADDRESS 0x40007408 + +#define DAC_MAX 4096 /* maximum amplitude */ + +/* y=mx+c mapping of samples16 bit shorts to DAC samples. Table: 74 + of data sheet indicates With DAC buffer on, DAC range is limited to + 0x0E0 to 0xF1C at VREF+ = 3.6 V, we have Vref=3.3V which is close. + */ + +#define M ((3868.0-224.0)/65536.0) +#define C 2047.0 + +static struct FIFO *dac1_fifo; + +static unsigned short dac1_buf[DAC_BUF_SZ]; + +static void tim6_config(void); +static void dac1_config(void); + +int dac_underflow; + +short signed_buf[DAC_BUF_SZ/2]; + +#define MAX_AMP 32767 + +void dac_open(int fifo_size) { + memset(dac1_buf, 32768, sizeof(short)*DAC_BUF_SZ); + + /* Create fifo */ + + dac1_fifo = codec2_fifo_create(fifo_size); + assert(dac1_fifo != NULL); + + /* Turn on the clocks we need -----------------------------------------------*/ + + /* DMA1 clock enable */ + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA1, ENABLE); + /* GPIOA clock enable (to be used with DAC) */ + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); + /* DAC Periph clock enable */ + RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE); + + /* GPIO Pin configuration DAC1->PA.4 configuration --------------------------*/ + + GPIO_InitTypeDef GPIO_InitStructure; + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; + GPIO_Init(GPIOA, &GPIO_InitStructure); + + /* Timer and DAC 1 Configuration --------------------------------------------*/ + + tim6_config(); + dac1_config(); + + init_debug_blinky(); +} + +/* Call these puppies to send samples to the DACs. For your + convenience they accept signed 16 bit samples. */ + +int dac1_write(short buf[], int n) { + return codec2_fifo_write(dac1_fifo, buf, n); +} + +static void tim6_config(void) +{ + TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; + + /* TIM6 Periph clock enable */ + RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, ENABLE); + + /* -------------------------------------------------------- + + TIM6 input clock (TIM6CLK) is set to 2 * APB1 clock (PCLK1), since + APB1 prescaler is different from 1 (see system_stm32f4xx.c and Fig + 13 clock tree figure in DM0031020.pdf). + + Sample rate Fs = 2*PCLK1/TIM_ClockDivision + = (HCLK/2)/TIM_ClockDivision + = 84E6/TIM_ClockDivision (usually) + + ----------------------------------------------------------- */ + + /* Time base configuration */ + + TIM_TimeBaseStructInit(&TIM_TimeBaseStructure); + TIM_TimeBaseStructure.TIM_Period = 875-1; /* 96 kHz */ + TIM_TimeBaseStructure.TIM_Prescaler = 0; + TIM_TimeBaseStructure.TIM_ClockDivision = 0; + TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; + TIM_TimeBaseInit(TIM6, &TIM_TimeBaseStructure); + + /* TIM6 TRGO selection */ + + TIM_SelectOutputTrigger(TIM6, TIM_TRGOSource_Update); + + /* TIM6 enable counter */ + + TIM_Cmd(TIM6, ENABLE); +} + +static void dac1_config(void) +{ + DAC_InitTypeDef DAC_InitStructure; + DMA_InitTypeDef DMA_InitStructure; + NVIC_InitTypeDef NVIC_InitStructure; + + /* DAC channel 1 Configuration */ + + /* + This line fixed a bug that cost me 5 days, bad wave amplitude + value, and some STM32F4 periph library bugs caused triangle wave + generation to be enable resulting in a low level tone on the + SM1000, that we thought was caused by analog issues like layout + or power supply biasing + */ + DAC_StructInit(&DAC_InitStructure); + + DAC_InitStructure.DAC_Trigger = DAC_Trigger_T6_TRGO; + DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None; + DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Enable; + DAC_Init(DAC_Channel_1, &DAC_InitStructure); + + /* DMA1_Stream5 channel7 configuration **************************************/ + /* Table 35 page 219 of the monster data sheet */ + + DMA_DeInit(DMA1_Stream5); + DMA_InitStructure.DMA_Channel = DMA_Channel_7; + DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)DAC_DHR12R1_ADDRESS; + DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)dac1_buf; + DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral; + DMA_InitStructure.DMA_BufferSize = DAC_BUF_SZ; + DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; + DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; + DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; + DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; + DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; + DMA_InitStructure.DMA_Priority = DMA_Priority_High; + DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable; + DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull; + DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single; + DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; + DMA_Init(DMA1_Stream5, &DMA_InitStructure); + + /* Enable DMA Half & Complete interrupts */ + + DMA_ITConfig(DMA1_Stream5, DMA_IT_TC | DMA_IT_HT, ENABLE); + + /* Enable the DMA Stream IRQ Channel */ + + NVIC_InitStructure.NVIC_IRQChannel = DMA1_Stream5_IRQn; + NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; + NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; + NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; + NVIC_Init(&NVIC_InitStructure); + + /* Enable DMA1_Stream5 */ + + DMA_Cmd(DMA1_Stream5, ENABLE); + + /* Enable DAC Channel 1 */ + + DAC_Cmd(DAC_Channel_1, ENABLE); + + /* Enable DMA for DAC Channel 1 */ + + DAC_DMACmd(DAC_Channel_1, ENABLE); +} + + +/******************************************************************************/ +/* STM32F4xx Peripherals Interrupt Handlers */ +/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */ +/* available peripheral interrupt handler's name please refer to the startup */ +/* file (startup_stm32f40xx.s/startup_stm32f427x.s). */ +/******************************************************************************/ + +/* + This function handles DMA1 Stream 5 interrupt request for DAC1. +*/ + +void DMA1_Stream5_IRQHandler(void) { + int i, j, sam; + short signed_buf[DAC_BUF_SZ/2]; + + GPIOE->ODR |= (1 << 1); + + /* Transfer half empty interrupt - refill first half */ + + if(DMA_GetITStatus(DMA1_Stream5, DMA_IT_HTIF5) != RESET) { + + /* fill first half from fifo */ + + if (codec2_fifo_read(dac1_fifo, signed_buf, DAC_BUF_SZ/2) == -1) { + memset(signed_buf, 0, sizeof(short)*DAC_BUF_SZ/2); + dac_underflow++; + } + + for(i=0; iODR &= ~(1 << 1); +} + diff --git a/libcodec2-android/src/codec2/stm32/src/stm32f4_machdep.c b/libcodec2-android/src/codec2/stm32/src/stm32f4_machdep.c new file mode 100644 index 0000000..cf831c2 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/src/stm32f4_machdep.c @@ -0,0 +1,92 @@ + +/*---------------------------------------------------------------------------*\ + + FILE........: stm32f4_machdep.c + AUTHOR......: David Rowe + DATE CREATED: May 2 2013 + + STM32F4 implementation of the machine dependant timer functions, + e.g. profiling using a clock cycle counter.. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2013 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include "machdep.h" + +#ifdef SEMIHOST_USE_STDIO +#include "stdio.h" +#else +#include "gdb_stdio.h" +#define printf gdb_stdio_printf +#endif + +volatile unsigned int *DWT_CYCCNT = (volatile unsigned int *)0xE0001004; +volatile unsigned int *DWT_CONTROL = (volatile unsigned int *)0xE0001000; +volatile unsigned int *SCB_DEMCR = (volatile unsigned int *)0xE000EDFC; + +#define CORE_CLOCK 168E6 +#define BUF_SZ 4096 + +static char buf[BUF_SZ]; + +void machdep_profile_init(void) +{ + static int enabled = 0; + + if (!enabled) { + *SCB_DEMCR = *SCB_DEMCR | 0x01000000; + *DWT_CYCCNT = 0; // reset the counter + *DWT_CONTROL = *DWT_CONTROL | 1 ; // enable the counter + + enabled = 1; + } + *buf = 0; +} + +void machdep_profile_reset(void) +{ + *DWT_CYCCNT = 0; // reset the counter +} + +unsigned int machdep_profile_sample(void) { + return *DWT_CYCCNT; +} + +/* log to a buffer, we only call printf after timing finished as it is slow */ + +unsigned int machdep_profile_sample_and_log(unsigned int start, char s[]) +{ + char tmp[80]; + float msec; + + unsigned int dwt = *DWT_CYCCNT - start; + msec = 1000.0*(float)dwt/CORE_CLOCK; + snprintf(tmp, sizeof(tmp), "%s %5.2f msecs\n",s,(double)msec); + if ((strlen(buf) + strlen(tmp)) < BUF_SZ) + strncat(buf, tmp, sizeof(buf)-1); + return *DWT_CYCCNT; +} + +void machdep_profile_print_logged_samples(void) +{ + printf("%s", buf); + *buf = 0; +} + diff --git a/libcodec2-android/src/codec2/stm32/src/stm32f4_pwm.c b/libcodec2-android/src/codec2/stm32/src/stm32f4_pwm.c new file mode 100644 index 0000000..3bc3ea7 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/src/stm32f4_pwm.c @@ -0,0 +1,236 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: stm32f4_pwm.c + AUTHOR......: David Rowe + DATE CREATED: 26 June 2013 + + PWM driver module for STM32F4. + + TODO: + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2013 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + + +#include +#include +#include +#include "gdb_stdio.h" + +#include "stm32f4xx_gpio.h" +#include "stm32f4xx_rcc.h" + +#define TIM1_CCR3_ADDRESS 0x4001003C +//#define TIM1_CCR3_ADDRESS 0x4001223C +#define SINE_SAMPLES 32 + +TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; +TIM_OCInitTypeDef TIM_OCInitStructure; +uint16_t uhTimerPeriod; +uint16_t aSRC_Buffer[SINE_SAMPLES] = {0, 0, 0}; + +/* 32 sample sine wave which at Fs=16kHz will be 500Hz. Not sampels + are 16 bit 2's complement, the DAC driver convertsto 12 bit + unsigned. */ + +short aSine[SINE_SAMPLES] = { + -16, 6384, 12528, 18192, 23200, 27232, 30256, 32128, 32752, 32128, + 30256, 27232, 23152, 18192, 12528, 6384, -16, -6416, -12560, -18224, + -23184, -27264, -30288, -32160, -32768, -32160, -30288, -27264, -23184, -18224, + -12560, -6416 +}; + +void Timer1Config(); + +#define FS 16000 + +int main(void){ + Timer1Config(); + while(1); +} + +/* DR: TIM_Config configures a couple of I/O pins for PWM output from + Timer1 Channel 3. Note I dont think any of this is needed, except + perhaps to check timer frequency. Can be removed down the track. */ + +/** + * @brief Configure the TIM1 Pins. + * @param None + * @retval None + */ +static void TIM_Config(void) +{ + GPIO_InitTypeDef GPIO_InitStructure; + + /* GPIOA and GPIOB clock enable */ + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB, ENABLE); + + /* GPIOA Configuration: Channel 3 as alternate function push-pull */ + + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10 ; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; + GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP ; + GPIO_Init(GPIOA, &GPIO_InitStructure); + GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_TIM1); + + /* GPIOB Configuration: Channel 3N as alternate function push-pull */ + + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15; + GPIO_Init(GPIOB, &GPIO_InitStructure); + GPIO_PinAFConfig(GPIOB, GPIO_PinSource15, GPIO_AF_TIM1); + +#ifdef DR_OFF + /* DMA clock enable */ + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2 , ENABLE); + + DMA_DeInit(DMA2_Stream6); + DMA_InitStructure.DMA_Channel = DMA_Channel_6; + DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)(TIM1_CCR3_ADDRESS) ; + DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)aSRC_Buffer; + DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral; + DMA_InitStructure.DMA_BufferSize = SINE_SAMPLES; + DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; + DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; + DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; + DMA_InitStructure.DMA_MemoryDataSize = DMA_PeripheralDataSize_HalfWord; + DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; + DMA_InitStructure.DMA_Priority = DMA_Priority_High; + DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable; + DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_Full; + DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single; + DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; + + DMA_Init(DMA2_Stream6, &DMA_InitStructure); +#endif +} + +void Timer1Config() { + /* TIM Configuration */ + + TIM_Config(); + + /* TIM1 example ------------------------------------------------- + + TIM1 input clock (TIM1CLK) is set to 2 * APB2 clock (PCLK2), since APB2 + prescaler is different from 1. + TIM1CLK = 2 * PCLK2 + PCLK2 = HCLK / 2 + => TIM1CLK = 2 * (HCLK / 2) = HCLK = SystemCoreClock + + TIM1CLK = SystemCoreClock, Prescaler = 0, TIM1 counter clock = SystemCoreClock + SystemCoreClock is set to 168 MHz for STM32F4xx devices. + + The objective is to configure TIM1 channel 3 to generate complementary PWM + signal with a frequency equal to F KHz: + - TIM1_Period = (SystemCoreClock / F) - 1 + + The number of this repetitive requests is defined by the TIM1 Repetion counter, + each 3 Update Requests, the TIM1 Channel 3 Duty Cycle changes to the next new + value defined by the aSRC_Buffer. + + Note: + SystemCoreClock variable holds HCLK frequency and is defined in system_stm32f4xx.c file. + Each time the core clock (HCLK) changes, user had to call SystemCoreClockUpdate() + function to update SystemCoreClock variable value. Otherwise, any configuration + based on this variable will be incorrect. + -----------------------------------------------------------------------------*/ + + /* Compute the value to be set in ARR regiter to generate signal frequency at FS */ + +#ifdef TMP + uhTimerPeriod = (SystemCoreClock / FS ) - 1; + //gdb_stdio_printf("uhTimerPeriod = %d\n", uhTimerPeriod); + + /* Compute CCR1 values to generate a duty cycle at 50% */ + + for(i=0; i +#include +#include +#include +#include +#include "stm32f4_usart.h" + +#define MAX_FMT_SIZE 256 + +void usart_init(void){ + + GPIO_InitTypeDef GPIO_InitStructure; + USART_InitTypeDef USART_InitStructure; + + /* enable peripheral clock for USART3 */ + RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE); + + /* GPIOB clock enable */ + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE); + + /* GPIOA Configuration: USART3 TX on PB10 */ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; + GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP ; + GPIO_Init(GPIOB, &GPIO_InitStructure); + + /* Connect USART3 pins to AF2 */ + // TX = PB10 + GPIO_PinAFConfig(GPIOB, GPIO_PinSource10, GPIO_AF_USART3); + + USART_InitStructure.USART_BaudRate = 115200; + USART_InitStructure.USART_WordLength = USART_WordLength_8b; + USART_InitStructure.USART_StopBits = USART_StopBits_1; + USART_InitStructure.USART_Parity = USART_Parity_No; + USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; + USART_InitStructure.USART_Mode = USART_Mode_Tx; + USART_Init(USART3, &USART_InitStructure); + + USART_Cmd(USART3, ENABLE); // enable USART3 + +} + +void usart_puts(const char s[]) { + for (int i=0; i + * Copyright (C) 2015 FreeDV project. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License version 2.1, + * as published by the Free Software Foundation. This program is + * distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, see + * . + */ + +#include +#include +#include "stm32f4_vrom.h" +#include "stm32f4xx_flash.h" +#include "stm32f4xx_crc.h" + +#define VROM_SECT_SZ (16384) /*!< Size of a flash sector */ +#define VROM_SECT_CNT (3) /*!< Number of sectors */ +#define VROM_BLOCK_SZ (256) /*!< Size of a flash block */ + +/*! + * Starting address for the flash area + */ +#define VROM_START_ADDR (0x08004000) + +/*! + * Number of blocks we can fit per sector, including the index block. + */ +#define VROM_BLOCK_CNT (VROM_SECT_SZ / VROM_BLOCK_SZ) + +/*! + * Number of application blocks we can fit per sector. + */ +#define VROM_SECT_APP_BLOCK_CNT (VROM_BLOCK_CNT - 1) + +/*! + * Total number of application blocks we can fit in flash. + */ +#define VROM_APP_BLOCK_CNT (VROM_SECT_CNT * VROM_SECT_APP_BLOCK_CNT) + +/*! + * Maximum number of erase cycles per sector. + * Table 42 (page 109) of STM32F405 datasheet (DocID022152 Rev 5). + */ +#define VROM_MAX_CYCLES (10000) + +/*! + * EEPROM block header. + */ +struct __attribute__ ((__packed__)) vrom_block_hdr_t { + /*! + * CRC32 checksum of the data, offset, size and ROM ID. + * A CRC32 of 0x00000000 indicates an obsoleted block. + * A CRC32 of 0xffffffff indicates an erased block. + */ + uint32_t crc32; + /*! + * ROM ID. + */ + uint8_t rom; + /*! + * Block number in the virtual EEPROM. + */ + uint8_t idx; + /*! + * Number of bytes from the virtual EEPROM stored in this block. + */ + uint8_t size; + /*! + * Reserved for future use. + */ + uint8_t reserved; +}; + +/*! + * The size of a block header in bytes. + */ +#define VROM_BLOCK_HDR_SZ (sizeof(struct vrom_block_hdr_t)) + +/*! + * The amount of data available for application use. + */ +#define VROM_DATA_SZ (VROM_BLOCK_SZ - VROM_BLOCK_HDR_SZ) + +/*! + * EEPROM data block. + */ +struct __attribute__ ((__packed__)) vrom_data_block_t { + /*! Block header */ + struct vrom_block_hdr_t header; + + /*! Block data */ + uint8_t data[VROM_DATA_SZ]; +}; + +/*! + * The first block in a sector is the sector index block. This indicates + * the used/free state of the entire block and counts the number of + * erase cycles for the sector. The index block has no header. + */ +struct __attribute__ ((__packed__)) vrom_sector_idx_t { + /*! + * Number of erase cycles remaining for the sector. + * 0xffffffff == unprogrammed. + */ + uint32_t cycles_remain; + /*! + * Block metadata flags. One for each data block in the sector. + * Does not include the index block. + */ + uint16_t flags[VROM_SECT_APP_BLOCK_CNT]; +}; + +#define VROM_SFLAGS_USED (1 << 0) /*!< Block in use */ + +/*! + * Return the address of a virtual EEPROM sector header. + */ +static const struct vrom_sector_idx_t* vrom_get_sector_hdr(uint8_t sector) +{ + return (const struct vrom_sector_idx_t*)( + VROM_START_ADDR + (VROM_SECT_SZ * sector)); +} + +/*! + * Return the address of a virtual EEPROM block. + */ +static const struct vrom_data_block_t* vrom_get_block( + uint8_t sector, uint8_t block) +{ + return (const struct vrom_data_block_t*)( + (void*)vrom_get_sector_hdr(sector) + + (VROM_BLOCK_SZ * (block + 1))); +} + +/*! + * Compute the CRC32 of a block. + */ +static uint32_t vrom_crc32( + const struct vrom_data_block_t* const block) +{ + struct vrom_data_block_t temp_block; + uint32_t size = sizeof(temp_block); + const uint8_t* in = (const uint8_t*)(&temp_block); + uint32_t tmp; + uint32_t crc; + + memcpy(&temp_block, block, sizeof(temp_block)); + temp_block.header.crc32 = 0; + + CRC_ResetDR(); + while(size) { + tmp = 0; + if (size) { + tmp |= (uint32_t)(*(in++)) << 24; + size--; + } + if (size) { + tmp |= (uint32_t)(*(in++)) << 16; + size--; + } + if (size) { + tmp |= (uint32_t)(*(in++)) << 8; + size--; + } + if (size) { + tmp |= (uint32_t)(*(in++)); + size--; + } + crc = CRC_CalcCRC(tmp); + } + return crc; +} + +/*! + * Find the block storing the given index. + */ +static const struct vrom_data_block_t* vrom_find(uint8_t rom, uint8_t idx) +{ + int sector, block; + + for (sector = 0; sector < VROM_SECT_CNT; sector++) { + const struct vrom_sector_idx_t* sect_hdr + = vrom_get_sector_hdr(sector); + if (sect_hdr->cycles_remain == UINT32_MAX) + /* unformatted */ + continue; + for (block = 0; block < VROM_SECT_APP_BLOCK_CNT; block++) { + const struct vrom_data_block_t* block_ptr; + if (sect_hdr->flags[block] == UINT16_MAX) + /* unformatted */ + continue; + if (sect_hdr->flags[block] == 0) + /* obsolete */ + continue; + + block_ptr = vrom_get_block(sector, block); + + /* Verify the content */ + if (vrom_crc32(block_ptr) + != block_ptr->header.crc32) + /* corrupt */ + continue; + + if (block_ptr->header.rom != rom) + /* different ROM */ + continue; + + if (block_ptr->header.idx != idx) + /* wrong index */ + continue; + + return block_ptr; + } + } + return NULL; +} + +/*! + * Get the sector number of a given address. + */ +static uint8_t vrom_sector_num(const void* address) +{ + /* Get the offset from the base address */ + uint32_t offset = (uint32_t)address - VROM_START_ADDR; + return offset / VROM_SECT_SZ; +} + +/*! + * Get the block number of a given address. + */ +static uint8_t vrom_block_num(const void* address) +{ + /* Get the sector number */ + uint8_t sector = vrom_sector_num(address); + + /* Get the offset from the sector base */ + uint32_t offset = (uint32_t)(address + - (const void*)vrom_get_sector_hdr(sector)); + offset /= VROM_BLOCK_SZ; + return offset - 1; +} + +/*! + * (Erase and) Format a sector. + * + * @retval -EIO Erase failed + * @retval -EPERM Erase counter depleted. + */ +static int vrom_format_sector(const struct vrom_sector_idx_t* sector) +{ + uint8_t sector_num = vrom_sector_num(sector); + uint32_t cycles_remain = VROM_MAX_CYCLES; + if (sector->cycles_remain != UINT32_MAX) { + if (sector->cycles_remain == 0) + /* This sector is exhausted */ + return -EPERM; + + /* This sector has been formatted before */ + cycles_remain = sector->cycles_remain - 1; + if (FLASH_EraseSector(sector_num + 1, VoltageRange_3)) + /* Erase failed */ + return -EIO; + } + + /* Program the new sector cycle counter */ + if (FLASH_ProgramWord((uint32_t)sector, + cycles_remain) == FLASH_COMPLETE) + return 0; /* All good */ + /* If we get here, then programming failed */ + return -EIO; +} + +/*! + * Find the next available block. + */ +static const struct vrom_data_block_t* vrom_find_free(uint8_t run_gc) +{ + int sector; + if (run_gc) { + for (sector = 0; sector < VROM_SECT_CNT; sector++) { + uint8_t block; + uint8_t used = 0; + const struct vrom_sector_idx_t* sect_hdr + = vrom_get_sector_hdr(sector); + if (sect_hdr->cycles_remain == UINT32_MAX) + /* Already erased */ + continue; + if (sect_hdr->cycles_remain == 0) + /* Depleted */ + continue; + + for (block = 0; block < VROM_SECT_APP_BLOCK_CNT; + block++) { + if (sect_hdr->flags[block]) { + used = 1; + break; + } + } + + if (!used) { + /* We can format this */ + vrom_format_sector(sect_hdr); + } + } + } + + for (sector = 0; sector < VROM_SECT_CNT; sector++) { + uint8_t block; + const struct vrom_sector_idx_t* sect_hdr + = vrom_get_sector_hdr(sector); + if (sect_hdr->cycles_remain == UINT32_MAX) { + /* Unformatted sector. */ + if (vrom_format_sector(sect_hdr)) + /* Couldn't format, keep looking */ + continue; + } + for (block = 0; block < VROM_SECT_APP_BLOCK_CNT; block++) { + if (sect_hdr->flags[block] == UINT16_MAX) + /* Success */ + return vrom_get_block(sector, block); + } + } + + /* No blocks free, but have we done garbage collection? */ + if (!run_gc) + return vrom_find_free(1); + + /* If we get here, then we weren't able to find a free block */ + return NULL; +} + +/*! + * Set flags for a block + */ +static int vrom_set_flags(const struct vrom_data_block_t* block, + uint16_t flags) +{ + const struct vrom_sector_idx_t* sector = + vrom_get_sector_hdr(vrom_sector_num(block)); + uint8_t block_num = vrom_block_num(block); + + /* Compute the new flags settings */ + flags = sector->flags[block_num] & ~flags; + + /* Write them */ + if (FLASH_ProgramHalfWord( + (uint32_t)(&(sector->flags[block_num])), + flags) != FLASH_COMPLETE) + return -EIO; + return 0; +} + +/*! + * Mark a block as being obsolete + */ +static int vrom_mark_obsolete(const struct vrom_data_block_t* block) +{ + /* Blank out the CRC */ + if (FLASH_ProgramWord((uint32_t)(&(block->header.crc32)), 0) + != FLASH_COMPLETE) + return -EIO; + /* Blank out the ROM ID */ + if (FLASH_ProgramByte((uint32_t)(&(block->header.rom)), 0) + != FLASH_COMPLETE) + return -EIO; + /* Blank out the index */ + if (FLASH_ProgramByte((uint32_t)(&(block->header.idx)), 0) + != FLASH_COMPLETE) + return -EIO; + /* Blank out the size */ + if (FLASH_ProgramByte((uint32_t)&(block->header.size), 0) + != FLASH_COMPLETE) + return -EIO; + /* Blank out the reserved byte */ + if (FLASH_ProgramByte((uint32_t)&(block->header.reserved), 0) + != FLASH_COMPLETE) + return -EIO; + /* Blank out the flags */ + return vrom_set_flags(block, -1); +} + +/*! + * Write a new block. + */ +static int vrom_write_block(uint8_t rom, uint8_t idx, uint8_t size, + const uint8_t* in) +{ + /* Find a new home for the block */ + const struct vrom_data_block_t* block = vrom_find_free(0); + struct vrom_data_block_t new_block; + uint8_t* out = (uint8_t*)(block); + uint32_t rem = sizeof(new_block); + int res; + + if (!block) + return -ENOSPC; + + /* Prepare the new block */ + memset(&new_block, 0xff, sizeof(new_block)); + new_block.header.rom = rom; + new_block.header.idx = idx; + new_block.header.size = size; + memcpy(new_block.data, in, size); + new_block.header.crc32 = vrom_crc32(&new_block); + + /* Start writing out the block */ + in = (uint8_t*)(&new_block); + rem = VROM_BLOCK_SZ; + while(rem) { + if (*out != *in) { + if (FLASH_ProgramByte((uint32_t)out, *in) + != FLASH_COMPLETE) + /* Failed! */ + return -EIO; + } + in++; + out++; + rem--; + } + res = vrom_set_flags(block, VROM_SFLAGS_USED); + if (res < 0) + return res; + return size; +} + +/*! + * Re-write the given block if needed. + */ +static int vrom_rewrite_block(const struct vrom_data_block_t* block, + uint8_t size, const uint8_t* in) +{ + uint8_t obsolete = 0; + uint8_t rom = block->header.rom; + uint8_t idx = block->header.idx; + const uint8_t* cmp_block = block->data; + const uint8_t* cmp_in = in; + uint8_t cmp_sz = size; + int res; + while(cmp_sz) { + if (*cmp_block != *cmp_in) { + obsolete = 1; + break; + } + cmp_sz--; + cmp_block++; + cmp_in++; + } + + if (!obsolete) + /* The block is fine, leave it be. */ + return size; + + /* Mark the block as obsolete */ + res = vrom_mark_obsolete(block); + if (res) + return res; + return vrom_write_block(rom, idx, size, in); +} + +/*! + * Overwrite the start of a block. + */ +static int vrom_overwrite_block( + const struct vrom_data_block_t* block, + uint8_t offset, uint8_t size, const uint8_t* in) +{ + uint8_t data[VROM_DATA_SZ]; + uint16_t block_sz = block->header.size; + int res; + + if (!offset && (size >= block->header.size)) + /* Complete overwrite */ + return vrom_rewrite_block(block, size, in); + + if (offset) { + /* Overwrite end of block, possible expansion */ + block_sz = offset + size; + if (block_sz > VROM_DATA_SZ) + block_sz = VROM_DATA_SZ; + memcpy(data, block->data, offset); + memcpy(&data[offset], in, block_sz - offset); + } else { + /* Overwrite start of block, no size change */ + memcpy(data, in, size); + memcpy(&data[size], &(block->data[size]), + block_sz - size); + } + + res = vrom_rewrite_block(block, block_sz, data); + if (res < 0) + return res; + return block_sz; +} + +/*! + * Write data to the virtual EEPROM. + */ +static int vrom_write_internal(uint8_t rom, + uint16_t offset, uint16_t size, const uint8_t* in) +{ + /* Figure out our starting block and offset */ + uint8_t block_idx = offset / VROM_DATA_SZ; + uint8_t block_offset = offset % VROM_DATA_SZ; + int count = 0; + + /* Locate the first block */ + const struct vrom_data_block_t* block = vrom_find(rom, block_idx); + + uint8_t block_sz = VROM_DATA_SZ; + if (block_sz > (size + block_offset)) + block_sz = size + block_offset; + + if (!block) { + /* Create a new block */ + uint8_t data[VROM_DATA_SZ]; + int res; + memset(data, 0xff, sizeof(data)); + memcpy(&data[block_offset], in, + block_sz-block_offset); + res = vrom_write_block(rom, block_idx, block_sz, data); + if (res < 0) + return res; + } else { + /* Overwrite block */ + int res = vrom_overwrite_block(block, block_offset, + block_sz, in); + if (res < 0) + return res; + count += block_sz; + } + + block_idx++; + size -= block_sz - block_offset; + + while(size) { + /* Work out how much data to write */ + if (size < VROM_DATA_SZ) + block_sz = size; + else + block_sz = VROM_DATA_SZ; + + int res; + + /* Is there a block covering this range? */ + block = vrom_find(rom, block_idx); + if (block) + res = vrom_overwrite_block( + block, 0, block_sz, in); + else + res = vrom_write_block(rom, block_idx, + block_sz, in); + + if (res < 0) + return res; + + /* Successful write */ + count += res; + size -= res; + in += res; + offset += res; + } + return count; +} + +/*! + * Read data from a virtual EEPROM. + * @param rom ROM ID to start reading. + * @param offset Address offset into ROM to start reading. + * @param size Number of bytes to read from ROM. + * @param out Buffer to write ROM content to. + * @returns Number of bytes read from ROM. + * @retval -ENXIO ROM not found + * @retval -ESPIPE Offset past end of ROM. + */ +int vrom_read(uint8_t rom, uint16_t offset, uint16_t size, void* out) +{ + /* Figure out our starting block and offset */ + uint8_t block_idx = offset / VROM_DATA_SZ; + uint8_t block_offset = offset % VROM_DATA_SZ; + uint8_t block_sz; + int count = 0; + uint8_t* out_ptr = (uint8_t*)out; + + /* Locate the first block */ + const struct vrom_data_block_t* block = vrom_find(rom, block_idx); + + if (!block) + return -ENXIO; + + if (block_offset >= block->header.size) + return -ESPIPE; + + /* Copy the initial bytes */ + block_sz = block->header.size - block_offset; + if (block_sz > size) + block_sz = size; + memcpy(out_ptr, &(block->data[block_offset]), block_sz); + out_ptr += block_sz; + size -= block_sz; + count += block_sz; + + if (size) { + /* Look for the next block */ + block = vrom_find(rom, ++block_idx); + while(size && block) { + if (block->header.size <= size) + block_sz = block->header.size; + else + block_sz = size; + memcpy(out_ptr, block->data, block_sz); + out_ptr += block_sz; + size -= block_sz; + count += block_sz; + + block = vrom_find(rom, ++block_idx); + } + } + + return count; +} + +/*! + * Write data to a virtual EEPROM. + * @param rom ROM ID to start writing. + * @param offset Address offset into ROM to start writing. + * @param size Number of bytes to write to ROM. + * @param in Buffer to write ROM content from. + * @returns Number of bytes written to ROM. + * @retval -EIO Programming failed + * @retval -ENOSPC No free blocks available + */ +int vrom_write(uint8_t rom, uint16_t offset, uint16_t size, + const void* in) +{ + int res; + FLASH_Unlock(); + FLASH_ClearFlag(FLASH_FLAG_EOP + | FLASH_FLAG_OPERR + | FLASH_FLAG_WRPERR + | FLASH_FLAG_PGAERR + | FLASH_FLAG_PGPERR + | FLASH_FLAG_PGSERR); + res = vrom_write_internal(rom, offset, size, in); + FLASH_Lock(); + return res; +} + +/*! + * Erase a virtual EEPROM. + * @param rom ROM ID to erase. + * @returns Number of bytes written to ROM. + * @retval -EIO Programming failed + * @retval -ENOSPC No free blocks available + */ +int vrom_erase(uint8_t rom) +{ + int sector, block; + FLASH_Unlock(); + FLASH_ClearFlag(FLASH_FLAG_EOP + | FLASH_FLAG_OPERR + | FLASH_FLAG_WRPERR + | FLASH_FLAG_PGAERR + | FLASH_FLAG_PGPERR + | FLASH_FLAG_PGSERR); + for (sector = 0; sector < VROM_SECT_CNT; sector++) { + const struct vrom_sector_idx_t* sect_hdr + = vrom_get_sector_hdr(sector); + if (sect_hdr->cycles_remain == UINT32_MAX) + /* unformatted */ + continue; + for (block = 0; block < VROM_SECT_APP_BLOCK_CNT; block++) { + int res; + const struct vrom_data_block_t* block_ptr; + if (sect_hdr->flags[block] == UINT16_MAX) + /* unformatted */ + continue; + if (sect_hdr->flags[block] == 0) + /* obsolete */ + continue; + + block_ptr = vrom_get_block(sector, block); + + /* Verify the content */ + if (vrom_crc32(block_ptr) + != block_ptr->header.crc32) + /* corrupt */ + continue; + + if (block_ptr->header.rom != rom) + /* different ROM */ + continue; + + /* + * Block is valid, for the correct ROM. Mark it + * obsolete. + */ + res = vrom_mark_obsolete(block_ptr); + if (res) + return res; + } + } + return 0; +} diff --git a/libcodec2-android/src/codec2/stm32/src/system_stm32f4xx.c b/libcodec2-android/src/codec2/stm32/src/system_stm32f4xx.c new file mode 100644 index 0000000..b8bdd96 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/src/system_stm32f4xx.c @@ -0,0 +1,585 @@ +/** + ****************************************************************************** + * @file system_stm32f4xx.c + * @author MCD Application Team + * @version V1.0.1 + * @date 10-July-2012 + * @brief CMSIS Cortex-M4 Device Peripheral Access Layer System Source File. + * This file contains the system clock configuration for STM32F4xx devices, + * and is generated by the clock configuration tool + * stm32f4xx_Clock_Configuration_V1.0.1.xls + * + * 1. This file provides two functions and one global variable to be called from + * user application: + * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier + * and Divider factors, AHB/APBx prescalers and Flash settings), + * depending on the configuration made in the clock xls tool. + * This function is called at startup just after reset and + * before branch to main program. This call is made inside + * the "startup_stm32f4xx.s" file. + * + * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used + * by the user application to setup the SysTick + * timer or configure other parameters. + * + * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must + * be called whenever the core clock is changed + * during program execution. + * + * 2. After each device reset the HSI (16 MHz) is used as system clock source. + * Then SystemInit() function is called, in "startup_stm32f4xx.s" file, to + * configure the system clock before to branch to main program. + * + * 3. If the system clock source selected by user fails to startup, the SystemInit() + * function will do nothing and HSI still used as system clock source. User can + * add some code to deal with this issue inside the SetSysClock() function. + * + * 4. The default value of HSE crystal is set to 25MHz, refer to "HSE_VALUE" define + * in "stm32f4xx.h" file. When HSE is used as system clock source, directly or + * through PLL, and you are using different crystal you have to adapt the HSE + * value to your own configuration. + * + * 5. This file configures the system clock as follows: + *============================================================================= + *============================================================================= + * Supported STM32F4xx device revision | Rev A + *----------------------------------------------------------------------------- + * System Clock source | PLL (HSE) + *----------------------------------------------------------------------------- + * SYSCLK(Hz) | 168000000 + *----------------------------------------------------------------------------- + * HCLK(Hz) | 168000000 + *----------------------------------------------------------------------------- + * AHB Prescaler | 1 + *----------------------------------------------------------------------------- + * APB1 Prescaler | 4 + *----------------------------------------------------------------------------- + * APB2 Prescaler | 2 + *----------------------------------------------------------------------------- + * HSE Frequency(Hz) | 8000000 + *----------------------------------------------------------------------------- + * PLL_M | 8 + *----------------------------------------------------------------------------- + * PLL_N | 336 + *----------------------------------------------------------------------------- + * PLL_P | 2 + *----------------------------------------------------------------------------- + * PLL_Q | 7 + *----------------------------------------------------------------------------- + * PLLI2S_N | 352 + *----------------------------------------------------------------------------- + * PLLI2S_R | 2 + *----------------------------------------------------------------------------- + * I2S input clock(Hz) | 176000000 + * | + * To achieve the following I2S config: | + * - Master clock output (MCKO): OFF | + * - Frame wide : 16bit | + * - Error % : 0,0000 | + * - Prescaler Odd factor (ODD): 1 | + * - Linear prescaler (DIV) : 14 | + *----------------------------------------------------------------------------- + * VDD(V) | 3,3 + *----------------------------------------------------------------------------- + * Main regulator output voltage | Scale1 mode + *----------------------------------------------------------------------------- + * Flash Latency(WS) | 5 + *----------------------------------------------------------------------------- + * Prefetch Buffer | OFF + *----------------------------------------------------------------------------- + * Instruction cache | ON + *----------------------------------------------------------------------------- + * Data cache | ON + *----------------------------------------------------------------------------- + * Require 48MHz for USB OTG FS, | Enabled + * SDIO and RNG clock | + *----------------------------------------------------------------------------- + *============================================================================= + ****************************************************************************** + * @attention + * + * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS + * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE + * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY + * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING + * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE + * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + *

© COPYRIGHT 2011 STMicroelectronics

+ ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f4xx_system + * @{ + */ + +/** @addtogroup STM32F4xx_System_Private_Includes + * @{ + */ + +#include "stm32f4xx.h" + +/** + * @} + */ + +/** @addtogroup STM32F4xx_System_Private_TypesDefinitions + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F4xx_System_Private_Defines + * @{ + */ + +/************************* Miscellaneous Configuration ************************/ +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM324xG_EVAL board as data memory */ +/* #define DATA_IN_ExtSRAM */ + +/*!< Uncomment the following line if you need to relocate your vector Table in + Internal SRAM. */ +/* #define VECT_TAB_SRAM */ +#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. + This value must be a multiple of 0x200. */ +/******************************************************************************/ + +/************************* PLL Parameters *************************************/ +/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ +#define PLL_M 8 +#define PLL_N 336 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 + +/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ +#define PLL_Q 7 + +/* PLLI2S_VCO = (HSE_VALUE Or HSI_VALUE / PLL_M) * PLLI2S_N + I2SCLK = PLLI2S_VCO / PLLI2S_R */ +#define START_I2SCLOCK 0 +#define PLLI2S_N 352 +#define PLLI2S_R 2 + +/******************************************************************************/ + +/** + * @} + */ + +/** @addtogroup STM32F4xx_System_Private_Macros + * @{ + */ + +/** + * @} + */ + +/** @addtogroup STM32F4xx_System_Private_Variables + * @{ + */ + +uint32_t SystemCoreClock = 168000000; + +__I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + +/** + * @} + */ + +/** @addtogroup STM32F4xx_System_Private_FunctionPrototypes + * @{ + */ + +static void SetSysClock(void); +#ifdef DATA_IN_ExtSRAM +static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ + +/** + * @} + */ + +/** @addtogroup STM32F4xx_System_Private_Functions + * @{ + */ + +/** + * @brief Setup the microcontroller system + * Initialize the Embedded Flash Interface, the PLL and update the + * SystemFrequency variable. + * @param None + * @retval None + */ +void SystemInit(void) +{ + /* FPU settings ------------------------------------------------------------*/ +#if (__FPU_PRESENT == 1) && (__FPU_USED == 1) + SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2)); /* set CP10 and CP11 Full Access */ +#endif + /* Reset the RCC clock configuration to the default reset state ------------*/ + /* Set HSION bit */ + RCC->CR |= (uint32_t)0x00000001; + + /* Reset CFGR register */ + RCC->CFGR = 0x00000000; + + /* Reset HSEON, CSSON and PLLON bits */ + RCC->CR &= (uint32_t)0xFEF6FFFF; + + /* Reset PLLCFGR register */ + RCC->PLLCFGR = 0x24003010; + + /* Reset HSEBYP bit */ + RCC->CR &= (uint32_t)0xFFFBFFFF; + + /* Disable all interrupts */ + RCC->CIR = 0x00000000; + +#ifdef DATA_IN_ExtSRAM + SystemInit_ExtMemCtl(); +#endif /* DATA_IN_ExtSRAM */ + + /* Configure the System clock source, PLL Multiplier and Divider factors, + AHB/APBx prescalers and Flash settings ----------------------------------*/ + SetSysClock(); + + /* Configure the Vector Table location add offset address ------------------*/ +#ifdef VECT_TAB_SRAM + SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ +#else + SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ +#endif +} + +/** + * @brief Update SystemCoreClock variable according to Clock Register Values. + * The SystemCoreClock variable contains the core clock (HCLK), it can + * be used by the user application to setup the SysTick timer or configure + * other parameters. + * + * @note Each time the core clock (HCLK) changes, this function must be called + * to update SystemCoreClock variable value. Otherwise, any configuration + * based on this variable will be incorrect. + * + * @note - The system frequency computed by this function is not the real + * frequency in the chip. It is calculated based on the predefined + * constant and the selected clock source: + * + * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) + * + * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) + * + * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) + * or HSI_VALUE(*) multiplied/divided by the PLL factors. + * + * (*) HSI_VALUE is a constant defined in stm32f4xx.h file (default value + * 16 MHz) but the real value may vary depending on the variations + * in voltage and temperature. + * + * (**) HSE_VALUE is a constant defined in stm32f4xx.h file (default value + * 25 MHz), user has to ensure that HSE_VALUE is same as the real + * frequency of the crystal used. Otherwise, this function may + * have wrong result. + * + * - The result of this function could be not correct when using fractional + * value for HSE crystal. + * + * @param None + * @retval None + */ +void SystemCoreClockUpdate(void) +{ + uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2; + + /* Get SYSCLK source -------------------------------------------------------*/ + tmp = RCC->CFGR & RCC_CFGR_SWS; + + switch (tmp) + { + case 0x00: /* HSI used as system clock source */ + SystemCoreClock = HSI_VALUE; + break; + case 0x04: /* HSE used as system clock source */ + SystemCoreClock = HSE_VALUE; + break; + case 0x08: /* PLL used as system clock source */ + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + SYSCLK = PLL_VCO / PLL_P + */ + pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; + pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; + + if (pllsource != 0) + { + /* HSE used as PLL clock source */ + pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + else + { + /* HSI used as PLL clock source */ + pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); + } + + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; + SystemCoreClock = pllvco/pllp; + break; + default: + SystemCoreClock = HSI_VALUE; + break; + } + /* Compute HCLK frequency --------------------------------------------------*/ + /* Get HCLK prescaler */ + tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; + /* HCLK frequency */ + SystemCoreClock >>= tmp; +} + +/** + * @brief Configures the System clock source, PLL Multiplier and Divider factors, + * AHB/APBx prescalers and Flash settings + * @Note This function should be called only once the RCC clock configuration + * is reset to the default reset state (done in SystemInit() function). + * @param None + * @retval None + */ +static void SetSysClock(void) +{ + /******************************************************************************/ + /* PLL (clocked by HSE) used as System clock source */ + /******************************************************************************/ + __IO uint32_t StartUpCounter = 0, HSEStatus = 0; + + /* Enable HSE */ + RCC->CR |= ((uint32_t)RCC_CR_HSEON); + + /* Wait till HSE is ready and if Time out is reached exit */ + do + { + HSEStatus = RCC->CR & RCC_CR_HSERDY; + StartUpCounter++; + } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); + + if ((RCC->CR & RCC_CR_HSERDY) != RESET) + { + HSEStatus = (uint32_t)0x01; + } + else + { + HSEStatus = (uint32_t)0x00; + } + + if (HSEStatus == (uint32_t)0x01) + { + /* Select regulator voltage output Scale 1 mode, System frequency up to 168 MHz */ + RCC->APB1ENR |= RCC_APB1ENR_PWREN; + PWR->CR |= PWR_CR_VOS; + + /* HCLK = SYSCLK / 1*/ + RCC->CFGR |= RCC_CFGR_HPRE_DIV1; + + /* PCLK2 = HCLK / 2*/ + RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; + + /* PCLK1 = HCLK / 4*/ + RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; + + /* Configure the main PLL */ + RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | + (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + + /* Enable the main PLL */ + RCC->CR |= RCC_CR_PLLON; + + /* Wait till the main PLL is ready */ + while((RCC->CR & RCC_CR_PLLRDY) == 0) + { + } + + /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ + FLASH->ACR = FLASH_ACR_ICEN |FLASH_ACR_DCEN |FLASH_ACR_LATENCY_5WS; + + /* Select the main PLL as system clock source */ + RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); + RCC->CFGR |= RCC_CFGR_SW_PLL; + + /* Wait till the main PLL is used as system clock source */ + while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL) + { + asm("nop"); + } + } + else + { /* If HSE fails to start-up, the application will have wrong clock + configuration. User can add here some code to deal with this error */ + } + + + /******************************************************************************/ + /* I2S clock configuration */ + /******************************************************************************/ + +#if START_I2SCLOCK + /* PLLI2S clock used as I2S clock source */ + RCC->CFGR &= ~RCC_CFGR_I2SSRC; + + /* Configure PLLI2S */ + RCC->PLLI2SCFGR = (PLLI2S_N << 6) | (PLLI2S_R << 28); + + /* Enable PLLI2S */ + RCC->CR |= ((uint32_t)RCC_CR_PLLI2SON); + + /* Wait till PLLI2S is ready */ + while((RCC->CR & RCC_CR_PLLI2SRDY) == 0) + { + } +#endif +} + +/** + * @brief Setup the external memory controller. Called in startup_stm32f4xx.s + * before jump to __main + * @param None + * @retval None + */ +#ifdef DATA_IN_ExtSRAM +/** + * @brief Setup the external memory controller. + * Called in startup_stm32f4xx.s before jump to main. + * This function configures the external SRAM mounted on STM324xG_EVAL board + * This SRAM will be used as program data memory (including heap and stack). + * @param None + * @retval None + */ +void SystemInit_ExtMemCtl(void) +{ + /*-- GPIOs Configuration -----------------------------------------------------*/ + /* + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE3 <-> FSMC_A19 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE4 <-> FSMC_A20 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE7 <-> FSMC_D4 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE8 <-> FSMC_D5 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE9 <-> FSMC_D6 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE10 <-> FSMC_D7 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE11 <-> FSMC_D8 | PF14 <-> FSMC_A8 | + | PD13 <-> FSMC_A18 | PE12 <-> FSMC_D9 | PF15 <-> FSMC_A9 | + | PD14 <-> FSMC_D0 | PE13 <-> FSMC_D10 |------------------+ + | PD15 <-> FSMC_D1 | PE14 <-> FSMC_D11 | + | | PE15 <-> FSMC_D12 | + +-------------------+--------------------+ + */ + /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ + RCC->AHB1ENR = 0x00000078; + + /* Connect PDx pins to FSMC Alternate function */ + GPIOD->AFR[0] = 0x00cc00cc; + GPIOD->AFR[1] = 0xcc0ccccc; + /* Configure PDx pins in Alternate function mode */ + GPIOD->MODER = 0xaaaa0a0a; + /* Configure PDx pins speed to 100 MHz */ + GPIOD->OSPEEDR = 0xffff0f0f; + /* Configure PDx pins Output type to push-pull */ + GPIOD->OTYPER = 0x00000000; + /* No pull-up, pull-down for PDx pins */ + GPIOD->PUPDR = 0x00000000; + + /* Connect PEx pins to FSMC Alternate function */ + GPIOE->AFR[0] = 0xc00cc0cc; + GPIOE->AFR[1] = 0xcccccccc; + /* Configure PEx pins in Alternate function mode */ + GPIOE->MODER = 0xaaaa828a; + /* Configure PEx pins speed to 100 MHz */ + GPIOE->OSPEEDR = 0xffffc3cf; + /* Configure PEx pins Output type to push-pull */ + GPIOE->OTYPER = 0x00000000; + /* No pull-up, pull-down for PEx pins */ + GPIOE->PUPDR = 0x00000000; + + /* Connect PFx pins to FSMC Alternate function */ + GPIOF->AFR[0] = 0x00cccccc; + GPIOF->AFR[1] = 0xcccc0000; + /* Configure PFx pins in Alternate function mode */ + GPIOF->MODER = 0xaa000aaa; + /* Configure PFx pins speed to 100 MHz */ + GPIOF->OSPEEDR = 0xff000fff; + /* Configure PFx pins Output type to push-pull */ + GPIOF->OTYPER = 0x00000000; + /* No pull-up, pull-down for PFx pins */ + GPIOF->PUPDR = 0x00000000; + + /* Connect PGx pins to FSMC Alternate function */ + GPIOG->AFR[0] = 0x00cccccc; + GPIOG->AFR[1] = 0x000000c0; + /* Configure PGx pins in Alternate function mode */ + GPIOG->MODER = 0x00080aaa; + /* Configure PGx pins speed to 100 MHz */ + GPIOG->OSPEEDR = 0x000c0fff; + /* Configure PGx pins Output type to push-pull */ + GPIOG->OTYPER = 0x00000000; + /* No pull-up, pull-down for PGx pins */ + GPIOG->PUPDR = 0x00000000; + + /*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ + RCC->AHB3ENR = 0x00000001; + + /* Configure and enable Bank1_SRAM2 */ + FSMC_Bank1->BTCR[2] = 0x00001015; + FSMC_Bank1->BTCR[3] = 0x00010603; + FSMC_Bank1E->BWTR[2] = 0x0fffffff; + /* + Bank1_SRAM2 is configured as follow: + + p.FSMC_AddressSetupTime = 3; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 6; + p.FSMC_BusTurnAroundDuration = 1; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; + + FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; + FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; + FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM; + FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b; + FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low; + FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState; + FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; + FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; + FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; + FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; + */ +} +#endif /* DATA_IN_ExtSRAM */ + + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ diff --git a/libcodec2-android/src/codec2/stm32/src/timer_ut.c b/libcodec2-android/src/codec2/stm32/src/timer_ut.c new file mode 100644 index 0000000..1e9dcc4 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/src/timer_ut.c @@ -0,0 +1,179 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: timer_ut.c + AUTHOR......: David Rowe + DATE CREATED: 3 Jan 2014 + + Unit test STM32F4 timer hardware. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2014 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include +#include + +#include "stm32f4xx_gpio.h" +#include "stm32f4xx_rcc.h" + +#include "gdb_stdio.h" + +#define TIM1_CCR3_ADDRESS 0x4001223C + +TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; +TIM_OCInitTypeDef TIM_OCInitStructure; +TIM_BDTRInitTypeDef TIM_BDTRInitStructure; +uint16_t uhTimerPeriod; +uint16_t aSRC_Buffer[3] = {0, 0, 0}; + +void Timer1Config(); +#define FS 3500000 + +int main(void){ + Timer1Config(); + } + +/* DR: TIM_Config configures a couple of I/O pins for PWM output from + Timer1 Channel 3. Note I dont think any of this is needed, except + perhaps to check timer frequency. Can be removed down the track. */ + +/** + * @brief Configure the TIM1 Pins. + * @param None + * @retval None + */ +static void TIM_Config(void) +{ + GPIO_InitTypeDef GPIO_InitStructure; + + /* GPIOA and GPIOB clock enable */ + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB, ENABLE); + + /* GPIOA Configuration: Channel 3 as alternate function push-pull */ + /* Discovery board pin PA10 */ + + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10 ; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; + GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP ; + GPIO_Init(GPIOA, &GPIO_InitStructure); + GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_TIM1); + + /* GPIOB Configuration: Channel 3N as alternate function push-pull */ + /* Discovery board pin PB15 */ + + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15; + GPIO_Init(GPIOB, &GPIO_InitStructure); + GPIO_PinAFConfig(GPIOB, GPIO_PinSource15, GPIO_AF_TIM1); +} + +void Timer1Config() { + + /* TIM Configuration */ + + TIM_Config(); + + /* TIM1 example ------------------------------------------------- + + TIM1 input clock (TIM1CLK) is set to 2 * APB2 clock (PCLK2), since APB2 + prescaler is different from 1. + TIM1CLK = 2 * PCLK2 + PCLK2 = HCLK / 2 + => TIM1CLK = 2 * (HCLK / 2) = HCLK = SystemCoreClock + + TIM1CLK = SystemCoreClock, Prescaler = 0, TIM1 counter clock = SystemCoreClock + SystemCoreClock is set to 168 MHz for STM32F4xx devices. + + The objective is to configure TIM1 channel 3 to generate complementary PWM + signal with a frequency equal to F KHz: + - TIM1_Period = (SystemCoreClock / F) - 1 + + The number of this repetitive requests is defined by the TIM1 Repetion counter, + each 3 Update Requests, the TIM1 Channel 3 Duty Cycle changes to the next new + value defined by the aSRC_Buffer. + + Note: + SystemCoreClock variable holds HCLK frequency and is defined in system_stm32f4xx.c file. + Each time the core clock (HCLK) changes, user had to call SystemCoreClockUpdate() + function to update SystemCoreClock variable value. Otherwise, any configuration + based on this variable will be incorrect. + -----------------------------------------------------------------------------*/ + + /* Compute the value to be set in ARR regiter to generate signal frequency at FS Hz */ + uhTimerPeriod = (SystemCoreClock / FS ) - 1; + /* Compute CCR1 value to generate a duty cycle at 50% */ + aSRC_Buffer[0] = (uint16_t) (((uint32_t) 5 * (uhTimerPeriod - 1)) / 10); + /* Compute CCR1 value to generate a duty cycle at 37.5% */ + aSRC_Buffer[1] = (uint16_t) (((uint32_t) 375 * (uhTimerPeriod - 1)) / 1000); + /* Compute CCR1 value to generate a duty cycle at 25% */ + aSRC_Buffer[2] = (uint16_t) (((uint32_t) 25 * (uhTimerPeriod - 1)) / 100); + + /* TIM1 Peripheral Configuration -------------------------------------------*/ + /* TIM1 clock enable */ + RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); + + /* Time Base configuration */ + + TIM_DeInit(TIM1); + TIM_TimeBaseStructure.TIM_Prescaler = 0; + TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; + TIM_TimeBaseStructure.TIM_Period = uhTimerPeriod; + TIM_TimeBaseStructure.TIM_ClockDivision = 0; + TIM_TimeBaseStructure.TIM_RepetitionCounter = 0; + + TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); + + /* Channel 3 Configuration in PWM mode */ + + /* I think we just ned to enable channel 3 somehow, but without + (or optionally with) actual ouput to a GPIO pin. */ + + TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; + TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; + TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable; + TIM_OCInitStructure.TIM_Pulse = aSRC_Buffer[0]; + TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; + TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_Low; + TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set; + TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset; + + TIM_OC3Init(TIM1, &TIM_OCInitStructure); + + /* Enable preload feature */ + TIM_OC3PreloadConfig(TIM1, TIM_OCPreload_Enable); + + /* Automatic Output enable, Break, dead time and lock configuration*/ + TIM_BDTRInitStructure.TIM_OSSRState = TIM_OSSRState_Enable; + TIM_BDTRInitStructure.TIM_OSSIState = TIM_OSSIState_Enable; + //TIM_BDTRInitStructure.TIM_LOCKLevel = TIM_LOCKLevel_1; + TIM_BDTRInitStructure.TIM_DeadTime = 11; + //TIM_BDTRInitStructure.TIM_Break = TIM_Break_Enable; + //TIM_BDTRInitStructure.TIM_BreakPolarity = TIM_BreakPolarity_High; + TIM_BDTRInitStructure.TIM_AutomaticOutput = TIM_AutomaticOutput_Enable; + + TIM_BDTRConfig(TIM1, &TIM_BDTRInitStructure); + + /* TIM1 counter enable */ + TIM_Cmd(TIM1, ENABLE); + + /* Main Output Enable */ + TIM_CtrlPWMOutputs(TIM1, ENABLE); +} + diff --git a/libcodec2-android/src/codec2/stm32/src/tm_stm32f4_gpio.c b/libcodec2-android/src/codec2/stm32/src/tm_stm32f4_gpio.c new file mode 100644 index 0000000..7089632 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/src/tm_stm32f4_gpio.c @@ -0,0 +1,238 @@ +/** + * |---------------------------------------------------------------------- + * | Copyright (C) Tilen Majerle, 2015 + * | + * | This program is free software: you can redistribute it and/or modify + * | it under the terms of the GNU General Public License as published by + * | the Free Software Foundation, either version 3 of the License, or + * | any later version. + * | + * | This program is distributed in the hope that it will be useful, + * | but WITHOUT ANY WARRANTY; without even the implied warranty of + * | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * | GNU General Public License for more details. + * | + * | You should have received a copy of the GNU General Public License + * | along with this program. If not, see . + * |---------------------------------------------------------------------- + */ +#include "tm_stm32f4_gpio.h" + +/* Private function */ +static uint16_t GPIO_UsedPins[11] = {0,0,0,0,0,0,0,0,0,0,0}; + +/* Private functions */ +void TM_GPIO_INT_EnableClock(GPIO_TypeDef* GPIOx); +void TM_GPIO_INT_DisableClock(GPIO_TypeDef* GPIOx); +void TM_GPIO_INT_Init(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, TM_GPIO_Mode_t GPIO_Mode, TM_GPIO_OType_t GPIO_OType, TM_GPIO_PuPd_t GPIO_PuPd, TM_GPIO_Speed_t GPIO_Speed); + +void TM_GPIO_Init(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, TM_GPIO_Mode_t GPIO_Mode, TM_GPIO_OType_t GPIO_OType, TM_GPIO_PuPd_t GPIO_PuPd, TM_GPIO_Speed_t GPIO_Speed) { + /* Check input */ + if (GPIO_Pin == 0x00) { + return; + } + + /* Enable clock for GPIO */ + TM_GPIO_INT_EnableClock(GPIOx); + + /* Do initialization */ + TM_GPIO_INT_Init(GPIOx, GPIO_Pin, GPIO_Mode, GPIO_OType, GPIO_PuPd, GPIO_Speed); +} + +void TM_GPIO_InitAlternate(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, TM_GPIO_OType_t GPIO_OType, TM_GPIO_PuPd_t GPIO_PuPd, TM_GPIO_Speed_t GPIO_Speed, uint8_t Alternate) { + uint32_t pinpos; + + /* Check input */ + if (GPIO_Pin == 0x00) { + return; + } + + /* Enable GPIOx clock */ + TM_GPIO_INT_EnableClock(GPIOx); + + /* Set alternate functions for all pins */ + for (pinpos = 0; pinpos < 0x10; pinpos++) { + /* Check pin */ + if ((GPIO_Pin & (1 << pinpos)) == 0) { + continue; + } + + /* Set alternate function */ + GPIOx->AFR[pinpos >> 0x03] = (GPIOx->AFR[pinpos >> 0x03] & ~(0x0F << (4 * (pinpos & 0x07)))) | (Alternate << (4 * (pinpos & 0x07))); + } + + /* Do initialization */ + TM_GPIO_INT_Init(GPIOx, GPIO_Pin, TM_GPIO_Mode_AF, GPIO_OType, GPIO_PuPd, GPIO_Speed); +} + +void TM_GPIO_DeInit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) { + uint8_t i; + uint8_t ptr = TM_GPIO_GetPortSource(GPIOx); + + /* Go through all pins */ + for (i = 0x00; i < 0x10; i++) { + /* Pin is set */ + if (GPIO_Pin & (1 << i)) { + /* Set 11 bits combination for analog mode */ + GPIOx->MODER |= (0x03 << (2 * i)); + + /* Pin is not used */ + GPIO_UsedPins[ptr] &= ~(1 << i); + } + } +} + +void TM_GPIO_SetPinAsInput(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) { + uint8_t i; + /* Go through all pins */ + for (i = 0x00; i < 0x10; i++) { + /* Pin is set */ + if (GPIO_Pin & (1 << i)) { + /* Set 00 bits combination for input */ + GPIOx->MODER &= ~(0x03 << (2 * i)); + } + } +} + +void TM_GPIO_SetPinAsOutput(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) { + uint8_t i; + /* Go through all pins */ + for (i = 0x00; i < 0x10; i++) { + /* Pin is set */ + if (GPIO_Pin & (1 << i)) { + /* Set 01 bits combination for output */ + GPIOx->MODER = (GPIOx->MODER & ~(0x03 << (2 * i))) | (0x01 << (2 * i)); + } + } +} + +void TM_GPIO_SetPinAsAnalog(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) { + uint8_t i; + /* Go through all pins */ + for (i = 0x00; i < 0x10; i++) { + /* Pin is set */ + if (GPIO_Pin & (1 << i)) { + /* Set 11 bits combination for analog mode */ + GPIOx->MODER |= (0x03 << (2 * i)); + } + } +} + +void TM_GPIO_SetPinAsAlternate(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) { + uint8_t i; + + /* Set alternate functions for all pins */ + for (i = 0; i < 0x10; i++) { + /* Check pin */ + if ((GPIO_Pin & (1 << i)) == 0) { + continue; + } + + /* Set alternate mode */ + GPIOx->MODER = (GPIOx->MODER & ~(0x03 << (2 * i))) | (0x02 << (2 * i)); + } +} + +void TM_GPIO_SetPullResistor(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, TM_GPIO_PuPd_t GPIO_PuPd) { + uint8_t pinpos; + + /* Go through all pins */ + for (pinpos = 0; pinpos < 0x10; pinpos++) { + /* Check if pin available */ + if ((GPIO_Pin & (1 << pinpos)) == 0) { + continue; + } + + /* Set GPIO PUPD register */ + GPIOx->PUPDR = (GPIOx->PUPDR & ~(0x03 << (2 * pinpos))) | ((uint32_t)(GPIO_PuPd << (2 * pinpos))); + } +} + +void TM_GPIO_Lock(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) { + uint32_t d; + + /* Set GPIO pin with 16th bit set to 1 */ + d = 0x00010000 | GPIO_Pin; + + /* Write to LCKR register */ + GPIOx->LCKR = d; + GPIOx->LCKR = GPIO_Pin; + GPIOx->LCKR = d; + + /* Read twice */ + (void)GPIOx->LCKR; + (void)GPIOx->LCKR; +} + +uint16_t TM_GPIO_GetPinSource(uint16_t GPIO_Pin) { + uint16_t pinsource = 0; + + /* Get pinsource */ + while (GPIO_Pin > 1) { + /* Increase pinsource */ + pinsource++; + /* Shift right */ + GPIO_Pin >>= 1; + } + + /* Return source */ + return pinsource; +} + +uint16_t TM_GPIO_GetPortSource(GPIO_TypeDef* GPIOx) { + /* Get port source number */ + /* Offset from GPIOA Difference between 2 GPIO addresses */ + return ((uint32_t)GPIOx - (GPIOA_BASE)) / ((GPIOB_BASE) - (GPIOA_BASE)); +} + +/* Private functions */ +void TM_GPIO_INT_EnableClock(GPIO_TypeDef* GPIOx) { + /* Set bit according to the 1 << portsourcenumber */ + RCC->AHB1ENR |= (1 << TM_GPIO_GetPortSource(GPIOx)); +} + +void TM_GPIO_INT_DisableClock(GPIO_TypeDef* GPIOx) { + /* Clear bit according to the 1 << portsourcenumber */ + RCC->AHB1ENR &= ~(1 << TM_GPIO_GetPortSource(GPIOx)); +} + +void TM_GPIO_INT_Init(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, TM_GPIO_Mode_t GPIO_Mode, TM_GPIO_OType_t GPIO_OType, TM_GPIO_PuPd_t GPIO_PuPd, TM_GPIO_Speed_t GPIO_Speed) { + uint8_t pinpos; + uint8_t ptr = TM_GPIO_GetPortSource(GPIOx); + + /* Go through all pins */ + for (pinpos = 0; pinpos < 0x10; pinpos++) { + /* Check if pin available */ + if ((GPIO_Pin & (1 << pinpos)) == 0) { + continue; + } + + /* Pin is used */ + GPIO_UsedPins[ptr] |= 1 << pinpos; + + /* Set GPIO PUPD register */ + GPIOx->PUPDR = (GPIOx->PUPDR & ~(0x03 << (2 * pinpos))) | ((uint32_t)(GPIO_PuPd << (2 * pinpos))); + + /* Set GPIO MODE register */ + GPIOx->MODER = (GPIOx->MODER & ~((uint32_t)(0x03 << (2 * pinpos)))) | ((uint32_t)(GPIO_Mode << (2 * pinpos))); + + /* Set only if output or alternate functions */ + if (GPIO_Mode == TM_GPIO_Mode_OUT || GPIO_Mode == TM_GPIO_Mode_AF) { + /* Set GPIO OTYPE register */ + GPIOx->OTYPER = (GPIOx->OTYPER & ~(uint16_t)(0x01 << pinpos)) | ((uint16_t)(GPIO_OType << pinpos)); + + /* Set GPIO OSPEED register */ + GPIOx->OSPEEDR = (GPIOx->OSPEEDR & ~((uint32_t)(0x03 << (2 * pinpos)))) | ((uint32_t)(GPIO_Speed << (2 * pinpos))); + } + } +} + +uint16_t TM_GPIO_GetUsedPins(GPIO_TypeDef* GPIOx) { + /* Return used */ + return GPIO_UsedPins[TM_GPIO_GetPortSource(GPIOx)]; +} + +uint16_t TM_GPIO_GetFreePins(GPIO_TypeDef* GPIOx) { + /* Return free pins */ + return ~GPIO_UsedPins[TM_GPIO_GetPortSource(GPIOx)]; +} diff --git a/libcodec2-android/src/codec2/stm32/src/tm_stm32f4_mco_output.c b/libcodec2-android/src/codec2/stm32/src/tm_stm32f4_mco_output.c new file mode 100644 index 0000000..3261bda --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/src/tm_stm32f4_mco_output.c @@ -0,0 +1,128 @@ +/** + * |---------------------------------------------------------------------- + * | Copyright (C) Tilen Majerle, 2014 + * | + * | This program is free software: you can redistribute it and/or modify + * | it under the terms of the GNU General Public License as published by + * | the Free Software Foundation, either version 3 of the License, or + * | any later version. + * | + * | This program is distributed in the hope that it will be useful, + * | but WITHOUT ANY WARRANTY; without even the implied warranty of + * | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * | GNU General Public License for more details. + * | + * | You should have received a copy of the GNU General Public License + * | along with this program. If not, see . + * |---------------------------------------------------------------------- + */ +#include "tm_stm32f4_mco_output.h" + +void TM_MCOOUTPUT_InitMCO1(void) { + /* Enable PA8 */ + TM_GPIO_Init(GPIOA, GPIO_PIN_8, TM_GPIO_Mode_AF, TM_GPIO_OType_PP, TM_GPIO_PuPd_NOPULL, TM_GPIO_Speed_High); +} + +void TM_MCOOUTPUT_InitMCO2(void) { + /* Enable PC9 */ + TM_GPIO_Init(GPIOC, GPIO_PIN_9, TM_GPIO_Mode_AF, TM_GPIO_OType_PP, TM_GPIO_PuPd_NOPULL, TM_GPIO_Speed_High); +} + +void TM_MCOOUTPUT_SetOutput1(TM_MCOOUTPUT1_Source_t Source, TM_MCOOUTPUT_Prescaler_t Prescaler) { + uint32_t presc = 0, src = 0; + + /* Get prescaler */ + switch (Prescaler) { + case TM_MCOOUTPUT_Prescaler_1: + presc = RCC_MCO1Div_1; + break; + case TM_MCOOUTPUT_Prescaler_2: + presc = RCC_MCO1Div_2; + break; + case TM_MCOOUTPUT_Prescaler_3: + presc = RCC_MCO1Div_3; + break; + case TM_MCOOUTPUT_Prescaler_4: + presc = RCC_MCO1Div_4; + break; + case TM_MCOOUTPUT_Prescaler_5: + presc = RCC_MCO1Div_5; + break; + default: + break; + } + + /* Get source */ + switch (Source) { + case TM_MCOOUTPUT1_Source_HSE: + src = RCC_MCO1Source_HSE; + + /* Enable RCC HSE oscillator */ + RCC_HSEConfig(RCC_HSE_ON); + break; + case TM_MCOOUTPUT1_Source_HSI: + src = RCC_MCO1Source_HSI; + break; + case TM_MCOOUTPUT1_Source_PLLCLK: + src = RCC_MCO1Source_PLLCLK; + break; + case TM_MCOOUTPUT1_Source_LSE: + src = RCC_MCO1Source_LSE; + + /* Start LSE clock if available */ + RCC_LSEConfig(RCC_LSE_ON); + break; + default: + break; + } + + + /* Set source and prescaler */ + RCC_MCO1Config(src, presc); +} + +void TM_MCOOUTPUT_SetOutput2(TM_MCOOUTPUT2_Source_t Source, TM_MCOOUTPUT_Prescaler_t Prescaler) { + uint32_t presc, src; + + /* Get prescaler */ + switch (Prescaler) { + case TM_MCOOUTPUT_Prescaler_1: + presc = RCC_MCO2Div_1; + break; + case TM_MCOOUTPUT_Prescaler_2: + presc = RCC_MCO2Div_2; + break; + case TM_MCOOUTPUT_Prescaler_3: + presc = RCC_MCO2Div_3; + break; + case TM_MCOOUTPUT_Prescaler_4: + presc = RCC_MCO2Div_4; + break; + case TM_MCOOUTPUT_Prescaler_5: + presc = RCC_MCO2Div_5; + break; + default: + break; + } + + /* Get clock source */ + switch (Source) { + case TM_MCOOUTPUT2_Source_SYSCLK: + src = RCC_MCO2Source_SYSCLK; + break; + case TM_MCOOUTPUT2_Source_PLLI2SCLK: + src = RCC_MCO2Source_PLLI2SCLK; + break; + case TM_MCOOUTPUT2_Source_HSE: + src = RCC_MCO2Source_HSE; + break; + case TM_MCOOUTPUT2_Source_PLLCLK: + src = RCC_MCO2Source_PLLCLK; + break; + default: + break; + } + + /* Set source and prescaler */ + RCC_MCO2Config(src, presc); +} diff --git a/libcodec2-android/src/codec2/stm32/src/tone.c b/libcodec2-android/src/codec2/stm32/src/tone.c new file mode 100644 index 0000000..ab56792 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/src/tone.c @@ -0,0 +1,151 @@ +/*! + * Fixed-point tone generator. + * + * The code here implements a simple fixed-point tone generator that uses + * integer arithmetic to generate a sinusoid at a fixed sample rate of + * 16kHz. + * + * To set the initial state of the state machine, you specify a frequency + * and duration using tone_reset. The corresponding C file embeds a + * sinusoid look-up table. The total number of samples is computed for + * the given time and used to initialise 'remain', 'time' is initialised + * to 0, and 'step' gives the amount to increment 'time' by each iteration. + * + * The samples are retrieved by repeatedly calling tone_next. This + * advances 'time' and decrements 'remain'. The tone is complete when + * 'remain' is zero. + * + * Author Stuart Longland + * Copyright (C) 2015 FreeDV project. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License version 2.1, + * as published by the Free Software Foundation. This program is + * distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, see + * . + */ + +#include "tone.h" + +/*! Fixed-point shift factor */ +#define TONE_SHIFT (12) + +/*! Static compiled quarter-sinusoid. */ +static const int16_t partial_sine[] = { + 830, 2488, 4140, 5781, 7407, 9014, 10598, 12155, + 13681, 15171, 16623, 18031, 19394, 20707, 21967, 23170, + 24314, 25395, 26411, 27360, 28238, 29043, 29774, 30429, + 31006, 31503, 31919, 32253, 32504, 32672, 32756 +}; + +/*! Length of quarter-sinusoid in samples */ +#define TONE_PART_SINE_LEN (sizeof(partial_sine)\ + /sizeof(partial_sine[0])) + +/*! Total length of sinusoid */ +#define TONE_SINE_LEN ((TONE_PART_SINE_LEN*4)+4) + +/*! + * Generate a sine from the quarter-waveform. + */ +static int16_t tone_sine(uint8_t sample) +{ + /* Key points */ + if ((sample % (TONE_SINE_LEN/2)) == 0) + /* Zero crossings */ + return 0; + if (sample == TONE_SINE_LEN/4) + /* Maximum */ + return INT16_MAX; + if (sample == (3*TONE_SINE_LEN)/4) + /* Minimum */ + return INT16_MIN; + + if (sample < TONE_SINE_LEN/4) + /* First quarter of sine wave */ + return partial_sine[sample-1]; + + if (sample < (TONE_SINE_LEN/2)) + /* Second quarter */ + return partial_sine[(TONE_SINE_LEN/2)-sample-1]; + if (sample < ((3*TONE_SINE_LEN)/4)) + /* Third quarter */ + return -partial_sine[(sample-3) % TONE_PART_SINE_LEN]; + if (sample < TONE_SINE_LEN) + /* Final quarter */ + return -partial_sine[TONE_SINE_LEN-sample-1]; + /* We should not get here */ + return 0; +} + +/*! + * Re-set the tone generator. + * + * @param tone_gen Tone generator to reset. + * @param freq Frequency in Hz, 0 = silence. + * @param duration Duration in milliseconds. 0 to stop. + */ +void tone_reset( + struct tone_gen_t* const tone_gen, + uint16_t freq, uint16_t duration) +{ + if (freq) + /* Compute the time step */ + tone_gen->step = (((2*freq*TONE_SINE_LEN) << TONE_SHIFT) + / ((2*TONE_FS) + 1) + 1); + else + /* DC tone == silence */ + tone_gen->step = 0; + + /* Compute remaining samples */ + tone_gen->remain = (uint16_t)( + ((uint32_t)(TONE_FS * duration)) / 1000); + + /* Initialise the sample counter */ + tone_gen->sample = 0; +} + +/*! + * Retrieve the next sample from the tone generator. + * @param tone_gen Tone generator to update. + */ +int16_t tone_next( + struct tone_gen_t* const tone_gen) +{ + if (!tone_gen) + return 0; + if (!tone_gen->remain) + return 0; + if (!tone_gen->step) { + /* Special case, emit silence */ + tone_gen->remain--; + return 0; + } + + /* Compute sample index */ + uint16_t sample_int = ((tone_gen->sample) >> TONE_SHIFT) + % TONE_SINE_LEN; + + /* Advance tone generator state */ + tone_gen->sample += tone_gen->step; + tone_gen->remain--; + + return tone_sine(sample_int); +} + +/*! + * Retrieve the current time in milliseconds. + */ +uint32_t tone_msec(const struct tone_gen_t* const tone_gen) +{ + uint64_t ms = tone_gen->sample; + ms *= 1000; + ms /= TONE_FS; + return ms >> TONE_SHIFT; +} diff --git a/libcodec2-android/src/codec2/stm32/src/tot.c b/libcodec2-android/src/codec2/stm32/src/tot.c new file mode 100644 index 0000000..1fce495 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/src/tot.c @@ -0,0 +1,90 @@ +/*! + * Time-out timer. + * + * This is a simple time-out timer for ensuring a maximum transmission + * time is observed. The time-out timer is configured with a total time + * in "ticks", which get counted down in an interrupt. + * + * When the "warning" level is reached, a flag is repeatedly set permit + * triggering of LEDs/sounds to warn the user that time is nearly up. + * + * Upon timeout, a separate flag is set to indicate timeout has taken + * place. + * + * Author Stuart Longland + * Copyright (C) 2015 FreeDV project. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License version 2.1, + * as published by the Free Software Foundation. This program is + * distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, see + * . + */ + +#include "tot.h" + +/*! + * Reset the time-out timer. This zeroes the counter and event flags. + */ +void tot_reset(struct tot_t * const tot) +{ + tot->event = 0; + tot->remaining = 0; + tot->warn_remain = 0; + tot->ticks = 0; +} + +/*! + * Start the time-out timer ticking. + */ +void tot_start(struct tot_t * const tot, uint32_t tot_ticks, + uint16_t warn_ticks) +{ + tot->event = TOT_EVT_START; + tot->warn_remain = tot_ticks - warn_ticks; + tot->remaining = tot_ticks; + tot->ticks = tot->tick_period; +} + +/*! + * Update the time-out timer state. + */ +void tot_update(struct tot_t * const tot) +{ + if (!tot->event) + /* We are not active */ + return; + + if (tot->event & TOT_EVT_DONE) + /* We are done, do not process */ + return; + + if (tot->ticks) + /* Wait for a tick to pass */ + return; + + /* One "tick" has passed */ + if (!tot->remaining) { + /* Time-out reached, reset all flags except timeout */ + tot->event |= TOT_EVT_TIMEOUT | TOT_EVT_DONE; + return; + } else { + tot->remaining--; + } + + if (!tot->warn_remain) { + /* Warning period has passed */ + tot->event |= TOT_EVT_WARN | TOT_EVT_WARN_NEXT; + tot->warn_remain = tot->remain_warn_ticks; + } else { + tot->warn_remain--; + } + + tot->ticks = tot->tick_period; +} diff --git a/libcodec2-android/src/codec2/stm32/src/tuner_ut.c b/libcodec2-android/src/codec2/stm32/src/tuner_ut.c new file mode 100644 index 0000000..9c752c0 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/src/tuner_ut.c @@ -0,0 +1,122 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: tuner_ut.c + AUTHOR......: David Rowe + DATE CREATED: 20 Feb 2015 + + Unit test for high speed ADC radio tuner, samples signal centred at + 500kHz using Fs=2 MHz and uploads to host at Fs=10 kHz. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2015 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include +#include "gdb_stdio.h" +#include "stm32f4_dac.h" +#include "stm32f4_adc_tuner.h" +#include "iir_tuner.h" +#include "sm1000_leds_switches.h" +#include "../src/codec2_fm.h" +#include "stm32f4xx.h" + +#define REC_TIME_SECS 10 +#define FS 50000 +#define N 5000 + +extern int adc_overflow1; + +int main(void) { + float tuner_out[IIR_TUNER_DEC_50_10_FILT_MEM+N/2]; + float fm_out[N/2]; + //float dec_10[(N/2)/5]; + short dec_10_short[(N/2)]; + int bufs, i, j, k, fifo_sz, bn; + FILE *ftuner; + struct FM *fm; + + ftuner = fopen("tuner.raw", "wb"); + if (ftuner == NULL) { + printf("Error opening input file: tuner.raw\n\nTerminating....\n"); + exit(1); + } + bufs = FS*REC_TIME_SECS/N; + fifo_sz = ((4*N/ADC_TUNER_N)+1)*ADC_TUNER_N; + printf("Starting! bufs: %d %d\n", bufs, fifo_sz); + + //dac_open(DAC_BUF_SZ); + adc_open(fifo_sz); + sm1000_leds_switches_init(); + + fm = fm_create(N/2); + fm->Fs = 44400.0; + fm->fm_max = 3000.0; + fm->fd = 5000.0; + fm->fc = fm->Fs/4; + + i = 0; bn = 0; + while(1) { + /* wait for buffer of Fs=50kHz tuner output samples */ + + while(adc1_read((short *)&tuner_out[IIR_TUNER_DEC_50_10_FILT_MEM], N) == -1); + + /* The semi-hosting system can only handle Fs=16kHz and below so resample down + to Fs=10 kHz and convert to shorts */ + + #ifdef SSB + iir_tuner_dec_50_to_10(dec_10, &tuner_out[IIR_TUNER_DEC_50_10_FILT_MEM], N/2); + for(j=0; jODR |= (1 << 3); + /* + for(j=0; jODR &= ~(1 << 3); + + for(j=0,k=0; j +#include "stm32f4_usart.h" + +void Delay(uint32_t nCount) +{ + while(nCount--) + { + } +} + +int main(void){ + + usart_init(); + + while(1){ + usart_puts("Hello, World\n"); + Delay(0x3FFFFF); + } +} diff --git a/libcodec2-android/src/codec2/stm32/src/usb_vcp_ut.c b/libcodec2-android/src/codec2/stm32/src/usb_vcp_ut.c new file mode 100644 index 0000000..d060a73 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/src/usb_vcp_ut.c @@ -0,0 +1,96 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: usb_vcp_ut.c + AUTHOR......: xenovacivus + DATE CREATED: 31 August 2014 + + USB Virtual COM Port (VCP) unit test that I found here: + + https://github.com/xenovacivus/STM32DiscoveryVCP + + Remarkably, it compiled and ran first time, and even the LEDs blink + as advertised, they just happen to match the LEDs on the SM1000! + However the speed was capped at about 130 kB/s. After a lot of + messing around I found suggestions in the comments from a similar + library here: + + http://stm32f4-discovery.com/2014/08/library-24-virtual-com-port-vcp-stm32f4xx/ + + The key was changing APP_RX_DATA_SIZE in usbd_conf.h to 10000. I + guess the previous size of 2048 was constraing the length of USB + packets, and the USB overhead meant slow throughput. I could + achieve a max of 450 kB/s with this change, about 1/3 of the + theoretical 1.5 MB/s max for USB FS (12 Mbit/s). + + I used this to test grabbing data from the STM32F4 Discovery: + $ sudo dd if=/dev/ttyACM0 of=/dev/null count=100 + 4+96 records in + 44+1 records out + 22615 bytes (23 kB) copied, 0.150884 s, 150 kB/s + + However I occasionally see: + $ sudo dd if=/dev/ttyACM0 of=/dev/null count=100 + dd: failed to open ‘/dev/ttyACM0’: Device or resource busy + + Googling found some suggestion that this is due to "modem manager", however I + removed MM and the problem still exists. + +\*---------------------------------------------------------------------------*/ + +#include +#include +#include "stm32f4_usb_vcp.h" +#include "sm1000_leds_switches.h" + +volatile uint32_t ticker, buf_ticker; + +#define N 640*6 + +short buf[N]; + +int main(void) { + int i; + + for(i=0; i 500) { + GPIOD->BSRRH = GPIO_Pin_13; + } + if (ticker > 1000) { + ticker = 0; + GPIOD->BSRRL = GPIO_Pin_13; + } + + /* Every 40ms send a buffer, simulates 16 bit samples at Fs=96kHz */ + + if (buf_ticker > 40) { + buf_ticker = 0; + led_pwr(1); + VCP_send_buffer((uint8_t*)buf, sizeof(buf)); + led_pwr(0); + } + + } + + return 0; +} + +/* + * Interrupt Handler + */ + +void SysTick_Handler(void) +{ + ticker++; + buf_ticker++; +} + diff --git a/libcodec2-android/src/codec2/stm32/src/usb_vsp_ut.c b/libcodec2-android/src/codec2/stm32/src/usb_vsp_ut.c new file mode 100644 index 0000000..8f0c9f4 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/src/usb_vsp_ut.c @@ -0,0 +1,192 @@ + +#define HSE_VALUE ((uint32_t)8000000) /* STM32 discovery uses a 8Mhz external crystal */ + +#include "stm32f4xx_conf.h" +#include "stm32f4xx.h" +#include "stm32f4xx_gpio.h" +#include "stm32f4xx_rcc.h" +#include "stm32f4xx_exti.h" +#include "usbd_cdc_core.h" +#include "usbd_usr.h" +#include "usbd_desc.h" +#include "usbd_cdc_vcp.h" +#include "usb_dcd_int.h" + +volatile uint32_t ticker, downTicker; + +/* + * The USB data must be 4 byte aligned if DMA is enabled. This macro handles + * the alignment, if necessary (it's actually magic, but don't tell anyone). + */ +__ALIGN_BEGIN USB_OTG_CORE_HANDLE USB_OTG_dev __ALIGN_END; + + +void init(); +void ColorfulRingOfDeath(void); + +/* + * Define prototypes for interrupt handlers here. The conditional "extern" + * ensures the weak declarations from startup_stm32f4xx.c are overridden. + */ +#ifdef __cplusplus + extern "C" { +#endif + +void SysTick_Handler(void); +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void OTG_FS_IRQHandler(void); +void OTG_FS_WKUP_IRQHandler(void); + +#ifdef __cplusplus +} +#endif + + + +int main(void) +{ + /* Set up the system clocks */ + SystemInit(); + + /* Initialize USB, IO, SysTick, and all those other things you do in the morning */ + init(); + + + while (1) + { + /* Blink the orange LED at 1Hz */ + if (500 == ticker) + { + GPIOD->BSRRH = GPIO_Pin_13; + } + else if (1000 == ticker) + { + ticker = 0; + GPIOD->BSRRL = GPIO_Pin_13; + } + + + /* If there's data on the virtual serial port: + * - Echo it back + * - Turn the green LED on for 10ms + */ + uint8_t theByte; + if (VCP_get_char(&theByte)) + { + VCP_put_char(theByte); + + + GPIOD->BSRRL = GPIO_Pin_12; + downTicker = 10; + } + if (0 == downTicker) + { + GPIOD->BSRRH = GPIO_Pin_12; + } + } + + return 0; +} + + +void init() +{ + /* STM32F4 discovery LEDs */ + GPIO_InitTypeDef LED_Config; + + /* Always remember to turn on the peripheral clock... If not, you may be up till 3am debugging... */ + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE); + LED_Config.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13| GPIO_Pin_14| GPIO_Pin_15; + LED_Config.GPIO_Mode = GPIO_Mode_OUT; + LED_Config.GPIO_OType = GPIO_OType_PP; + LED_Config.GPIO_Speed = GPIO_Speed_25MHz; + LED_Config.GPIO_PuPd = GPIO_PuPd_NOPULL; + GPIO_Init(GPIOD, &LED_Config); + + + + /* Setup SysTick or CROD! */ + if (SysTick_Config(SystemCoreClock / 1000)) + { + ColorfulRingOfDeath(); + } + + + /* Setup USB */ + USBD_Init(&USB_OTG_dev, + USB_OTG_FS_CORE_ID, + &USR_desc, + &USBD_CDC_cb, + &USR_cb); + + return; +} + +/* + * Call this to indicate a failure. Blinks the STM32F4 discovery LEDs + * in sequence. At 168Mhz, the blinking will be very fast - about 5 Hz. + * Keep that in mind when debugging, knowing the clock speed might help + * with debugging. + */ +void ColorfulRingOfDeath(void) +{ + uint16_t ring = 1; + while (1) + { + uint32_t count = 0; + while (count++ < 500000); + + GPIOD->BSRRH = (ring << 12); + ring = ring << 1; + if (ring >= 1<<4) + { + ring = 1; + } + GPIOD->BSRRL = (ring << 12); + } +} + +/* + * Interrupt Handlers + */ + +void SysTick_Handler(void) +{ + ticker++; + if (downTicker > 0) + { + downTicker--; + } +} + +void NMI_Handler(void) {} +void HardFault_Handler(void) { ColorfulRingOfDeath(); } +void MemManage_Handler(void) { ColorfulRingOfDeath(); } +void BusFault_Handler(void) { ColorfulRingOfDeath(); } +void UsageFault_Handler(void){ ColorfulRingOfDeath(); } +void SVC_Handler(void) {} +void DebugMon_Handler(void) {} +void PendSV_Handler(void) {} + +void OTG_FS_IRQHandler(void) +{ + USBD_OTG_ISR_Handler (&USB_OTG_dev); +} + +void OTG_FS_WKUP_IRQHandler(void) +{ + if(USB_OTG_dev.cfg.low_power) + { + *(uint32_t *)(0xE000ED10) &= 0xFFFFFFF9 ; + SystemInit(); + USB_OTG_UngateClock(&USB_OTG_dev); + } + EXTI_ClearITPendingBit(EXTI_Line18); +} diff --git a/libcodec2-android/src/codec2/stm32/stlink/elfsym.c b/libcodec2-android/src/codec2/stm32/stlink/elfsym.c new file mode 100644 index 0000000..f2d6ab5 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/stlink/elfsym.c @@ -0,0 +1,145 @@ +/* + elfsym.c + + Read symbol adresses from a .elf file. + + Based on libelf-howto.c from: http://em386.blogspot.com + + Unit test with: + + gcc elfsym.c -o elfsym -D__UNITTEST__ -Wall -lelf + ./elfsym elf_file.elf +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "elfsym.h" + +#define ERR -1 + +int elfsym_open(char file[]) { + int fd; /* File Descriptor */ + char *base_ptr; /* ptr to our object in memory */ + struct stat elf_stats; /* fstat struct */ + + if((fd = open(file, O_RDWR)) == ERR) { + printf("couldnt open %s\n", file); + return ERR; + } + + if((fstat(fd, &elf_stats))) { + printf("could not fstat %s\n", file); + close(fd); + return ERR; + } + + if((base_ptr = (char *) malloc(elf_stats.st_size)) == NULL) { + fprintf(stderr, "could not malloc\n"); + close(fd); + return ERR; + } + + if((read(fd, base_ptr, elf_stats.st_size)) < elf_stats.st_size) { + fprintf(stderr, "could not read %s\n", file); + free(base_ptr); + close(fd); + return ERR; + } + + /* Check libelf version first */ + + if(elf_version(EV_CURRENT) == EV_NONE) { + fprintf(stderr, "WARNING Elf Library is out of date!\n"); + } + + free(base_ptr); + + return fd; +} + + +void elfsym_close(int fd) { + close(fd); +} + +unsigned int elfsym_get_symbol_address(int fd, char symbol_name[]) +{ + Elf_Scn *scn; /* Section Descriptor */ + Elf_Data *edata; /* Data Descriptor */ + GElf_Sym sym; /* Symbol */ + GElf_Shdr shdr; /* Section Header */ + Elf *elf; /* Our Elf pointer for libelf */ + unsigned int symbol_address; + int symbol_count; + int i; + + /* Iterate through section headers, stop when we find symbols, + and check for match */ + + elf = elf_begin(fd, ELF_C_READ, NULL); + if (elf == 0) { + fprintf(stderr, "could not elf_begin\n"); + } + symbol_address = 0; + scn = NULL; + + while((scn = elf_nextscn(elf, scn)) != 0) { + gelf_getshdr(scn, &shdr); + + // When we find a section header marked SHT_SYMTAB stop and get symbols + edata = NULL; + if(shdr.sh_type == SHT_SYMTAB) { + // edata points to our symbol table + edata = elf_getdata(scn, edata); + + // how many symbols are there? this number comes from the size of + // the section divided by the entry size + symbol_count = shdr.sh_size / shdr.sh_entsize; + + // loop through to grab all symbols + for(i = 0; i < symbol_count; i++) { + // libelf grabs the symbol data using gelf_getsym() + gelf_getsym(edata, i, &sym); + + if (strcmp(symbol_name, + elf_strptr(elf, shdr.sh_link, sym.st_name)) == 0) { + symbol_address = sym.st_value; + } + } + + } + } + + return symbol_address; +} + +#ifdef __UNITTEST__ + +int main(int argc, char *argv[]) +{ + int fd; + unsigned int flag_addr, ptr_addr, file_addr, len_addr; + + fd = elfsym_open(argv[1]); + flag_addr = elfsym_get_symbol_address(fd, "syscalls_gdb_flag"); + ptr_addr = elfsym_get_symbol_address(fd, "syscalls_gdb_ptr"); + file_addr = elfsym_get_symbol_address(fd, "syscalls_gdb_file"); + len_addr = elfsym_get_symbol_address(fd, "syscalls_gdb_len"); + elfsym_close(fd); + + printf("flag_addr: 0x%x\n", flag_addr); + printf("ptr_addr: 0x%x\n", ptr_addr); + printf("file_addr: 0x%x\n", file_addr); + printf("len_addr: 0x%x\n", len_addr); + + return 0; +} + +#endif diff --git a/libcodec2-android/src/codec2/stm32/stlink/elfsym.h b/libcodec2-android/src/codec2/stm32/stlink/elfsym.h new file mode 100644 index 0000000..fcd287a --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/stlink/elfsym.h @@ -0,0 +1,14 @@ +/* + elfsym.h + + Read symbol adresses from a .elf file. +*/ + +#ifndef __ELFSYM__ +#define __ELFSYM__ + +int elfsym_open(char file[]); +void elfsym_close(int fd); +unsigned int elfsym_get_symbol_address(int fd, char symbol_name[]); + +#endif diff --git a/libcodec2-android/src/codec2/stm32/stlink/stlink.patch b/libcodec2-android/src/codec2/stm32/stlink/stlink.patch new file mode 100644 index 0000000..6f87450 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/stlink/stlink.patch @@ -0,0 +1,428 @@ +diff --git Makefile.am Makefile.am +index a315dd7..7406216 100644 +--- Makefile.am ++++ Makefile.am +@@ -7,7 +7,7 @@ bin_PROGRAMS = st-flash st-util + noinst_LIBRARIES = libstlink.a + + st_flash_SOURCES = flash/main.c +-st_util_SOURCES = gdbserver/gdb-remote.c gdbserver/gdb-remote.h gdbserver/gdb-server.c mingw/mingw.c mingw/mingw.h ++st_util_SOURCES = gdbserver/gdb-remote.c gdbserver/gdb-remote.h gdbserver/gdb-server.c gdbserver/elfsym.c mingw/mingw.c mingw/mingw.h + + CFILES = \ + src/stlink-common.c \ +@@ -24,14 +24,14 @@ HFILES = \ + + libstlink_a_SOURCES = $(CFILES) $(HFILES) + +-libstlink_a_CPPFLAGS = -std=gnu99 -Wall -Wextra -O2 ++libstlink_a_CPPFLAGS = -std=gnu99 -Wall -Wextra -g + libstlink_a_LIBADD = $(LIBOBJS) + + st_flash_LDADD = libstlink.a +-st_flash_CPPFLAGS = -std=gnu99 -Wall -Wextra -O2 -I$(top_srcdir)/src -I$(top_srcdir)/mingw ++st_flash_CPPFLAGS = -std=gnu99 -Wall -Wextra -g -I$(top_srcdir)/src -I$(top_srcdir)/mingw + +-st_util_LDADD = libstlink.a +-st_util_CPPFLAGS = -std=gnu99 -Wall -Wextra -O2 -I$(top_srcdir)/src -I$(top_srcdir)/mingw ++st_util_LDADD = libstlink.a -lelf ++st_util_CPPFLAGS = -std=gnu99 -Wall -Wextra -g -I$(top_srcdir)/src -I$(top_srcdir)/mingw + + EXTRA_DIST = autogen.sh + +diff --git gdbserver/Makefile gdbserver/Makefile +index bd5c73d..6763388 100644 +--- gdbserver/Makefile ++++ gdbserver/Makefile +@@ -1,12 +1,11 @@ + PRG := st-util +-OBJS = gdb-remote.o gdb-server.o ++OBJS = gdb-remote.o gdb-server.o elfsym.o + + CFLAGS+=-g -Wall -Werror -std=gnu99 -I../src + LDFLAGS=-L.. -lstlink + + # libusb location +-LDFLAGS+=`pkg-config --libs libusb-1.0` +-CFLAGS+=`pkg-config --cflags libusb-1.0` ++LDFLAGS+=`pkg-config --libs libusb-1.0` -lelfCFLAGS+=`pkg-config --cflags libusb-1.0` + + all: $(PRG) + +diff --git gdbserver/gdb-server.c gdbserver/gdb-server.c +index f92fc05..e54d136 100644 +--- gdbserver/gdb-server.c ++++ gdbserver/gdb-server.c +@@ -1,11 +1,12 @@ + /* -*- tab-width:8 -*- */ +-#define DEBUG 0 ++//#define DEBUG 0 + /* + Copyright (C) 2011 Peter Zotov + Use of this source code is governed by a BSD-style + license that can be found in the LICENSE file. + */ + ++#include + #include + #include + #include +@@ -20,14 +21,29 @@ + #include + #include + #endif ++#include ++#include ++#include + + #include + + #include "gdb-remote.h" ++#include "elfsym.h" + + #define DEFAULT_LOGGING_LEVEL 50 + #define DEFAULT_GDB_LISTEN_PORT 4242 + ++/* stdio command codes from target */ ++ ++#define GDB_STDIO_PRINTF 1 ++#define GDB_STDIO_FOPEN 2 ++#define GDB_STDIO_FCLOSE 3 ++#define GDB_STDIO_FWRITE 4 ++#define GDB_STDIO_FREAD 5 ++#define GDB_STDIO_FPRINTF 6 ++ ++#define MAX_STR 256 ++ + #define STRINGIFY_inner(name) #name + #define STRINGIFY(name) STRINGIFY_inner(name) + +@@ -46,11 +62,12 @@ typedef struct _st_state_t { + // "/dev/serial/by-id/usb-FTDI_TTL232R-3V3_FTE531X6-if00-port0" is only 58 chars + char devicename[100]; + int logging_level; +- int listen_port; ++ int listen_port; ++ char elf_filename[255]; + } st_state_t; + + +-int serve(stlink_t *sl, int port); ++int serve(stlink_t *sl, int port, char *elf_filename); + char* make_memory_map(stlink_t *sl); + + +@@ -76,13 +93,14 @@ int parse_options(int argc, char** argv, st_state_t *st) { + " -p 4242, --listen_port=1234\n" + "\t\t\tSet the gdb server listen port. " + "(default port: " STRINGIFY(DEFAULT_GDB_LISTEN_PORT) ")\n" ++ " -f \tenable File I/O of target executable elf_filename" + ; + + + int option_index = 0; + int c; + int q; +- while ((c = getopt_long(argc, argv, "hv::d:s:1p:", long_options, &option_index)) != -1) { ++ while ((c = getopt_long(argc, argv, "hv::d:s:1p:1f:", long_options, &option_index)) != -1) { + switch (c) { + case 0: + printf("XXXXX Shouldn't really normally come here, only if there's no corresponding option\n"); +@@ -110,25 +128,29 @@ int parse_options(int argc, char** argv, st_state_t *st) { + strcpy(st->devicename, optarg); + } + break; +- case '1': +- st->stlink_version = 1; +- break; +- case 's': +- sscanf(optarg, "%i", &q); +- if (q < 0 || q > 2) { +- fprintf(stderr, "stlink version %d unknown!\n", q); +- exit(EXIT_FAILURE); +- } +- st->stlink_version = q; +- break; +- case 'p': +- sscanf(optarg, "%i", &q); +- if (q < 0) { +- fprintf(stderr, "Can't use a negative port to listen on: %d\n", q); +- exit(EXIT_FAILURE); +- } +- st->listen_port = q; +- break; ++ case '1': ++ st->stlink_version = 1; ++ break; ++ case 's': ++ sscanf(optarg, "%i", &q); ++ if (q < 0 || q > 2) { ++ fprintf(stderr, "stlink version %d unknown!\n", q); ++ exit(EXIT_FAILURE); ++ } ++ st->stlink_version = q; ++ break; ++ case 'p': ++ sscanf(optarg, "%i", &q); ++ if (q < 0) { ++ fprintf(stderr, "Can't use a negative port to listen on: %d\n", q); ++ exit(EXIT_FAILURE); ++ } ++ st->listen_port = q; ++ break; ++ case 'f': ++ sscanf(optarg, "%s", st->elf_filename); ++ printf("-f arg; %s\n", st->elf_filename); ++ break; + } + } + +@@ -162,7 +184,7 @@ int main(int argc, char** argv) { + sl = stlink_v1_open(state.logging_level); + if(sl == NULL) return 1; + break; +- } ++ } + + printf("Chip ID is %08x, Core ID is %08x.\n", sl->chip_id, sl->core_id); + +@@ -177,7 +199,7 @@ int main(int argc, char** argv) { + } + #endif + +- while(serve(sl, state.listen_port) == 0); ++ while(serve(sl, state.listen_port, state.elf_filename) == 0); + + #ifdef __MINGW32__ + winsock_error: +@@ -625,7 +647,179 @@ error: + return error; + } + +-int serve(stlink_t *sl, int port) { ++static unsigned int func_addr, ret_addr, pstr1_addr, pstr2_addr; ++static unsigned int strlen1_addr, strlen2_addr, file_addr, ptr_addr; ++static unsigned int size_addr, nmem_addr; ++ ++static void write_buffer(stlink_t *sl, int target_addr, char* buf, size_t size) { ++ /* write the buffer right after the loader */ ++ size_t chunk = size & ~0x3; ++ size_t rem = size & 0x3; ++ ++ if (chunk) { ++ memcpy(sl->q_buf, buf, chunk); ++ stlink_write_mem32(sl, target_addr, chunk); ++ } ++ if (rem) { ++ memcpy(sl->q_buf, buf+chunk, rem); ++ stlink_write_mem8(sl, target_addr+chunk, rem); ++ } ++} ++ ++static void read_buffer(stlink_t *sl, int target_addr, char* buf, size_t size) { ++ unsigned adj_start = target_addr % 4; ++ unsigned count_rnd = (size + adj_start + 4 - 1) / 4 * 4; ++ size_t i; ++ ++ stlink_read_mem32(sl, target_addr - adj_start, count_rnd); ++ ++ for(i=0; iq_buf[i + adj_start]; ++} ++ ++static void fileio(stlink_t *sl) ++{ ++ int func, pstr1, pstr2, strlen1, strlen2, ptr, size, nmem; ++ int ret = 0; ++ FILE *file; ++ char file_name[MAX_STR]; ++ char mode[MAX_STR]; ++ char *buf; ++ ++ stlink_read_mem32(sl, func_addr, 4); ++ func = read_uint32(sl->q_buf, 0); ++ ++ /* func != 0 means target has requested a system call */ ++ ++ switch(func) { ++ ++ case GDB_STDIO_PRINTF: ++ stlink_read_mem32(sl, pstr1_addr, 4); ++ pstr1 = read_uint32(sl->q_buf, 0); ++ stlink_read_mem32(sl, strlen1_addr, 4); ++ strlen1 = read_uint32(sl->q_buf, 0); ++ buf = (char*)malloc(strlen1+1); ++ assert(buf != NULL); ++ read_buffer(sl, pstr1, buf, strlen1); ++ buf[strlen1] = 0; ++ #ifdef DEBUG ++ //printf("gdb_stdio printf pstr1: 0x%0x strlen1: %d buf: %s\n", pstr1, strlen1, buf); ++ #endif ++ fputs(buf, stdout); ++ free(buf); ++ ++ break; ++ ++ case GDB_STDIO_FPRINTF: ++ stlink_read_mem32(sl, file_addr, 4); ++ file = (FILE*)read_uint32(sl->q_buf, 0); ++ stlink_read_mem32(sl, pstr1_addr, 4); ++ pstr1 = read_uint32(sl->q_buf, 0); ++ stlink_read_mem32(sl, strlen1_addr, 4); ++ strlen1 = read_uint32(sl->q_buf, 0); ++ buf = (char*)malloc(strlen1+1); ++ assert(buf != NULL); ++ read_buffer(sl, pstr1, buf, strlen1); ++ buf[strlen1] = 0; ++ #ifdef DEBUG ++ //printf("gdb_stdio fprintf pstr1: 0x%0x strlen1: %d buf: %s file: 0x%x\n", pstr1, strlen1, buf, (unsigned int)file); ++ #endif ++ fputs(buf, file); ++ free(buf); ++ ++ break; ++ ++ case GDB_STDIO_FOPEN: ++ stlink_read_mem32(sl, pstr1_addr, 4); ++ pstr1 = read_uint32(sl->q_buf, 0); ++ stlink_read_mem32(sl, strlen1_addr, 4); ++ strlen1 = read_uint32(sl->q_buf, 0); ++ assert(strlen1 < MAX_STR); ++ read_buffer(sl, pstr1, file_name, strlen1); ++ file_name[strlen1] = 0; ++ ++ stlink_read_mem32(sl, pstr2_addr, 4); ++ pstr2 = read_uint32(sl->q_buf, 0); ++ stlink_read_mem32(sl, strlen2_addr, 4); ++ strlen2 = read_uint32(sl->q_buf, 0); ++ assert(strlen2 < MAX_STR); ++ read_buffer(sl, pstr2, mode, strlen2); ++ mode[strlen2] = 0; ++ ++ file = fopen(file_name, mode); ++ ++ ret = (int)file; ++ #ifdef DEBUG ++ printf("gdb_stdio fopen file_name: %s mode: %s file: 0x%x\n", file_name, mode, (unsigned int)file); ++ #endif ++ break; ++ ++ case GDB_STDIO_FCLOSE: ++ stlink_read_mem32(sl, file_addr, 4); ++ file = (FILE*)read_uint32(sl->q_buf, 0); ++ fclose(file); ++ ++ #ifdef DEBUG ++ printf("gdb_stdio fclose file: 0x%x\n", (unsigned int)file); ++ #endif ++ break; ++ ++ case GDB_STDIO_FWRITE: ++ stlink_read_mem32(sl, ptr_addr, 4); ++ ptr = read_uint32(sl->q_buf, 0); ++ stlink_read_mem32(sl, size_addr, 4); ++ size = read_uint32(sl->q_buf, 0); ++ stlink_read_mem32(sl, nmem_addr, 4); ++ nmem = read_uint32(sl->q_buf, 0); ++ stlink_read_mem32(sl, file_addr, 4); ++ file = (FILE*)read_uint32(sl->q_buf, 0); ++ ++ buf = (char*)malloc(size*nmem); ++ assert(buf != NULL); ++ read_buffer(sl, ptr, buf, size*nmem); ++ ret = fwrite(buf, size, nmem, file); ++ free(buf); ++ #ifdef DEBUG ++ printf("gdb_stdio fwrite ptr: 0x%x size: %d nmem: %d file: 0x%x\n", ++ ptr, size, nmem, (unsigned int)file); ++ #endif ++ break; ++ ++ case GDB_STDIO_FREAD: ++ stlink_read_mem32(sl, ptr_addr, 4); ++ ptr = read_uint32(sl->q_buf, 0); ++ stlink_read_mem32(sl, size_addr, 4); ++ size = read_uint32(sl->q_buf, 0); ++ stlink_read_mem32(sl, nmem_addr, 4); ++ nmem = read_uint32(sl->q_buf, 0); ++ stlink_read_mem32(sl, file_addr, 4); ++ file = (FILE*)read_uint32(sl->q_buf, 0); ++ ++ buf = (char*)malloc(size*nmem); ++ assert(buf != NULL); ++ ret = fread(buf, size, nmem, file); ++ write_buffer(sl, ptr, buf, size*nmem); ++ free(buf); ++ ++ #ifdef DEBUG ++ printf("gdb_stdio fread ptr: 0x%x size: %d nmem: %d file: 0x%x\n", ++ ptr, size, nmem, (unsigned int)file); ++ #endif ++ break; ++ } ++ ++ if (func) { ++ memcpy(sl->q_buf, &ret, sizeof(int)); ++ stlink_write_mem32(sl, ret_addr, 4); ++ ++ func = 0; ++ memcpy(sl->q_buf, &func, sizeof(int)); ++ stlink_write_mem32(sl, func_addr, 4); ++ } ++} ++ ++ ++int serve(stlink_t *sl, int port, char *elf_filename) { + int sock = socket(AF_INET, SOCK_STREAM, 0); + if(sock < 0) { + perror("socket"); +@@ -650,7 +844,33 @@ int serve(stlink_t *sl, int port) { + perror("listen"); + return 1; + } +- ++ ++ /* init for file I/O */ ++ ++ func_addr = ret_addr = pstr1_addr = pstr2_addr = strlen1_addr = strlen2_addr = 0; ++ file_addr = ptr_addr = size_addr = nmem_addr = 0; ++ ++ printf("elf_filename: %s----------------------------------\n", elf_filename); ++ if (*elf_filename != 0) { ++ int fd = elfsym_open(elf_filename); ++ if (fd == -1) ++ exit(0); ++ func_addr = elfsym_get_symbol_address(fd, "gdb_stdio_func"); ++ ret_addr = elfsym_get_symbol_address(fd, "gdb_stdio_ret"); ++ pstr1_addr = elfsym_get_symbol_address(fd, "gdb_stdio_pstr1"); ++ pstr2_addr = elfsym_get_symbol_address(fd, "gdb_stdio_pstr2"); ++ strlen1_addr = elfsym_get_symbol_address(fd, "gdb_stdio_strlen1"); ++ strlen2_addr = elfsym_get_symbol_address(fd, "gdb_stdio_strlen2"); ++ file_addr = elfsym_get_symbol_address(fd, "gdb_stdio_file"); ++ ptr_addr = elfsym_get_symbol_address(fd, "gdb_stdio_ptr"); ++ size_addr = elfsym_get_symbol_address(fd, "gdb_stdio_size"); ++ nmem_addr = elfsym_get_symbol_address(fd, "gdb_stdio_nmem"); ++ elfsym_close(fd); ++ #ifdef DEBUG ++ printf("func_addr: 0x%x\n", func_addr); ++ #endif ++ } ++ + start_again: + stlink_force_debug(sl); + stlink_reset(sl); +@@ -924,8 +1144,13 @@ start_again: + if(sl->core_stat == STLINK_CORE_HALTED) { + break; + } ++ ++ /* file I/O if enabled */ ++ ++ if (*elf_filename != 0) ++ fileio(sl); + +- usleep(100000); ++ usleep(10000); + } + + reply = strdup("S05"); // TRAP diff --git a/libcodec2-android/src/codec2/stm32/stm32_flash.ld b/libcodec2-android/src/codec2/stm32/stm32_flash.ld new file mode 100644 index 0000000..20d335e --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/stm32_flash.ld @@ -0,0 +1,151 @@ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = 0x20020000; /* end of 128K RAM on AHB bus*/ + +/* Generate a link error if heap and stack don't fit into RAM */ +_Min_Heap_Size = 0; /* required amount of heap */ +_Min_Stack_Size = 0x400; /* required amount of stack */ + +/* Specify the memory areas */ +MEMORY +{ + /* ISR vectors *must* be placed here as they get mapped to address 0 */ + VECTOR (rx) : ORIGIN = 0x08000000, LENGTH = 16K + /* Virtual EEPROM area, we use the remaining 16kB blocks for this. */ + EEPROM (rx) : ORIGIN = 0x08004000, LENGTH = 48K + /* The rest of flash is used for program data */ + FLASH (rx) : ORIGIN = 0x08010000, LENGTH = 960K + /* Backup memory area */ + BKPSRAM (rwx) : ORIGIN = 0x40024000, LENGTH = 4K + /* Memory area */ + RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 128K + /* Core Coupled Memory */ + CCM (rwx) : ORIGIN = 0x10000000, LENGTH = 64K +} + +SECTIONS +{ + .isr_vector : + { + . = ALIGN(4); + KEEP(*(.isr_vector)) + . = ALIGN(4); + } >VECTOR + + + .eeprom : + { + . = ALIGN(4); + KEEP(*(.eeprom)) /* special section for persistent data */ + . = ORIGIN(EEPROM) + LENGTH(EEPROM) - 1; + BYTE(0xFF) + . = ALIGN(4); + } >EEPROM = 0xff + + .bkpsram : + { + . = ALIGN(4); + KEEP(*(.bkpsram)) + . = ALIGN(4); + } > BKPSRAM + + .text : + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + _exit = .; + } >FLASH + + + .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH + .ARM : { + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + } >FLASH + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } >FLASH + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } >FLASH + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(.fini_array*)) + KEEP (*(SORT(.fini_array.*))) + PROVIDE_HIDDEN (__fini_array_end = .); + } >FLASH + + /* used by the startup to initialize data */ + _sidata = .; + + /* Initialized data sections goes into RAM, load LMA copy after code */ + .data : AT ( _sidata ) + { + . = ALIGN(4); + _sdata = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + + . = ALIGN(4); + _edata = .; /* define a global symbol at data end */ + } >RAM + + /* Uninitialized data section */ + . = ALIGN(4); + .bss : + { + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; /* define a global symbol at bss start */ + __bss_start__ = _sbss; + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; /* define a global symbol at bss end */ + __bss_end__ = _ebss; + } >RAM + + /* User_heap_stack section, used to check that there is enough RAM left */ + ._user_heap_stack : + { + . = ALIGN(4); + PROVIDE ( end = . ); + PROVIDE ( _end = . ); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(4); + } >RAM + + .ccm (NOLOAD) : + { + . = ALIGN(4); + _sccmram = .; + *(.ccm) + . = ALIGN(4); + _eccmram = .; + } >CCM +} diff --git a/libcodec2-android/src/codec2/stm32/stm32_ram.ld b/libcodec2-android/src/codec2/stm32/stm32_ram.ld new file mode 100644 index 0000000..88c735a --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/stm32_ram.ld @@ -0,0 +1,116 @@ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = 0x20020000; /* end of 128K RAM on AHB bus*/ + +/* Generate a link error if heap and stack don't fit into RAM */ +_Min_Heap_Size = 0; /* required amount of heap */ +_Min_Stack_Size = 0x400; /* required amount of stack */ + +/* Specify the memory areas */ +MEMORY +{ + FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 1024K + RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 128K + CCM (rwx) : ORIGIN = 0x10000000, LENGTH = 64K +} + +SECTIONS +{ + .isr_vector : + { + . = ALIGN(4); + KEEP(*(.isr_vector)) + . = ALIGN(4); + } >RAM + + .text : + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + _exit = .; + } >RAM + + + .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >RAM + .ARM : { + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + } >RAM + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } >RAM + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } >RAM + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(.fini_array*)) + KEEP (*(SORT(.fini_array.*))) + PROVIDE_HIDDEN (__fini_array_end = .); + } >RAM + + /* used by the startup to initialize data */ + _sidata = .; + + /* Initialized data sections goes into RAM, load LMA copy after code */ + .data : AT ( _sidata ) + { + . = ALIGN(4); + _sdata = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + + . = ALIGN(4); + _edata = .; /* define a global symbol at data end */ + } >RAM + + /* Uninitialized data section */ + . = ALIGN(4); + .bss : + { + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; /* define a global symbol at bss start */ + __bss_start__ = _sbss; + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; /* define a global symbol at bss end */ + __bss_end__ = _ebss; + } >RAM + + /* User_heap_stack section, used to check that there is enough RAM left */ + ._user_heap_stack : + { + . = ALIGN(4); + PROVIDE ( end = . ); + PROVIDE ( _end = . ); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(4); + } >RAM +} diff --git a/libcodec2-android/src/codec2/stm32/support/hex2dfu.py b/libcodec2-android/src/codec2/stm32/support/hex2dfu.py new file mode 100755 index 0000000..30b3f17 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/support/hex2dfu.py @@ -0,0 +1,206 @@ +#!/usr/bin/env python2 +# +# Intel HEX to ST microelectronics DfuSe file converter +# Copyright (C)2015 Thomas Kindler +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +import os +import struct +import argparse +from zlib import crc32 +from intelhex import IntelHex + + +def load_hex(): + """ + Load hex or binary file. + :return: intelhex object + """ + if args.verbose: + print "Loading %s..." % args.source + + try: + ih = IntelHex() + + if args.format == "hex": + ih.loadhex(args.source) + else: + ih.loadbin(args.source, args.start_addr) + + except Exception, e: + print e + exit(1) + + if args.verbose: + print " Start: 0x%08x" % ih.minaddr() + print " End : 0x%08x" % ih.maxaddr() + + return ih + + +def save_dfu(ih): + """ + Save as STMicroelectronics DfuSe file. + see UM0391 - DfuSe File Format Specification + + :param ih: intelhex object + """ + if args.verbose: + print "Saving %s..." % args.target + print " Device ID: 0x%04x:0x%04x" % (args.vid, args.pid) + print " Target name: %s" % args.target_name + + # Image element + # + image_data = ih.tobinstr() + + data = struct.pack( + " end: + start, end = end, start + return start, end + + def tobinarray(self, start=None, end=None, pad=_DEPRECATED, size=None): + ''' Convert this object to binary form as array. If start and end + unspecified, they will be inferred from the data. + @param start start address of output bytes. + @param end end address of output bytes (inclusive). + @param pad [DEPRECATED PARAMETER, please use self.padding instead] + fill empty spaces with this value + (if pad is None then this method uses self.padding). + @param size size of the block, used with start or end parameter. + @return array of unsigned char data. + ''' + if not isinstance(pad, _DeprecatedParam): + print "IntelHex.tobinarray: 'pad' parameter is deprecated." + if pad is not None: + print "Please, use IntelHex.padding attribute instead." + else: + print "Please, don't pass it explicitly." + print "Use syntax like this: ih.tobinarray(start=xxx, end=yyy, size=zzz)" + else: + pad = None + return self._tobinarray_really(start, end, pad, size) + + def _tobinarray_really(self, start, end, pad, size): + if pad is None: + pad = self.padding + + bin = array('B') + + if self._buf == {} and None in (start, end): + return bin + + if size is not None and size <= 0: + raise ValueError("tobinarray: wrong value for size") + + start, end = self._get_start_end(start, end, size) + + for i in xrange(start, end+1): + bin.append(self._buf.get(i, pad)) + + return bin + + def tobinstr(self, start=None, end=None, pad=_DEPRECATED, size=None): + ''' Convert to binary form and return as a string. + @param start start address of output bytes. + @param end end address of output bytes (inclusive). + @param pad [DEPRECATED PARAMETER, please use self.padding instead] + fill empty spaces with this value + (if pad is None then this method uses self.padding). + @param size size of the block, used with start or end parameter. + @return string of binary data. + ''' + if not isinstance(pad, _DeprecatedParam): + print "IntelHex.tobinstr: 'pad' parameter is deprecated." + if pad is not None: + print "Please, use IntelHex.padding attribute instead." + else: + print "Please, don't pass it explicitly." + print "Use syntax like this: ih.tobinstr(start=xxx, end=yyy, size=zzz)" + else: + pad = None + return self._tobinstr_really(start, end, pad, size) + + def _tobinstr_really(self, start, end, pad, size): + return asstr(self._tobinarray_really(start, end, pad, size).tostring()) + + def tobinfile(self, fobj, start=None, end=None, pad=_DEPRECATED, size=None): + '''Convert to binary and write to file. + + @param fobj file name or file object for writing output bytes. + @param start start address of output bytes. + @param end end address of output bytes (inclusive). + @param pad [DEPRECATED PARAMETER, please use self.padding instead] + fill empty spaces with this value + (if pad is None then this method uses self.padding). + @param size size of the block, used with start or end parameter. + ''' + if not isinstance(pad, _DeprecatedParam): + print "IntelHex.tobinfile: 'pad' parameter is deprecated." + if pad is not None: + print "Please, use IntelHex.padding attribute instead." + else: + print "Please, don't pass it explicitly." + print "Use syntax like this: ih.tobinfile(start=xxx, end=yyy, size=zzz)" + else: + pad = None + if getattr(fobj, "write", None) is None: + fobj = open(fobj, "wb") + close_fd = True + else: + close_fd = False + + fobj.write(self._tobinstr_really(start, end, pad, size)) + + if close_fd: + fobj.close() + + def todict(self): + '''Convert to python dictionary. + + @return dict suitable for initializing another IntelHex object. + ''' + r = {} + r.update(self._buf) + if self.start_addr: + r['start_addr'] = self.start_addr + return r + + def addresses(self): + '''Returns all used addresses in sorted order. + @return list of occupied data addresses in sorted order. + ''' + aa = self._buf.keys() + aa.sort() + return aa + + def minaddr(self): + '''Get minimal address of HEX content. + @return minimal address or None if no data + ''' + aa = self._buf.keys() + if aa == []: + return None + else: + return min(aa) + + def maxaddr(self): + '''Get maximal address of HEX content. + @return maximal address or None if no data + ''' + aa = self._buf.keys() + if aa == []: + return None + else: + return max(aa) + + def __getitem__(self, addr): + ''' Get requested byte from address. + @param addr address of byte. + @return byte if address exists in HEX file, or self.padding + if no data found. + ''' + t = type(addr) + if t in (int, long): + if addr < 0: + raise TypeError('Address should be >= 0.') + return self._buf.get(addr, self.padding) + elif t == slice: + addresses = self._buf.keys() + ih = IntelHex() + if addresses: + addresses.sort() + start = addr.start or addresses[0] + stop = addr.stop or (addresses[-1]+1) + step = addr.step or 1 + for i in xrange(start, stop, step): + x = self._buf.get(i) + if x is not None: + ih[i] = x + return ih + else: + raise TypeError('Address has unsupported type: %s' % t) + + def __setitem__(self, addr, byte): + """Set byte at address.""" + t = type(addr) + if t in (int, long): + if addr < 0: + raise TypeError('Address should be >= 0.') + self._buf[addr] = byte + elif t == slice: + if not isinstance(byte, (list, tuple)): + raise ValueError('Slice operation expects sequence of bytes') + start = addr.start + stop = addr.stop + step = addr.step or 1 + if None not in (start, stop): + ra = range(start, stop, step) + if len(ra) != len(byte): + raise ValueError('Length of bytes sequence does not match ' + 'address range') + elif (start, stop) == (None, None): + raise TypeError('Unsupported address range') + elif start is None: + start = stop - len(byte) + elif stop is None: + stop = start + len(byte) + if start < 0: + raise TypeError('start address cannot be negative') + if stop < 0: + raise TypeError('stop address cannot be negative') + j = 0 + for i in xrange(start, stop, step): + self._buf[i] = byte[j] + j += 1 + else: + raise TypeError('Address has unsupported type: %s' % t) + + def __delitem__(self, addr): + """Delete byte at address.""" + t = type(addr) + if t in (int, long): + if addr < 0: + raise TypeError('Address should be >= 0.') + del self._buf[addr] + elif t == slice: + addresses = self._buf.keys() + if addresses: + addresses.sort() + start = addr.start or addresses[0] + stop = addr.stop or (addresses[-1]+1) + step = addr.step or 1 + for i in xrange(start, stop, step): + x = self._buf.get(i) + if x is not None: + del self._buf[i] + else: + raise TypeError('Address has unsupported type: %s' % t) + + def __len__(self): + """Return count of bytes with real values.""" + return len(self._buf.keys()) + + def write_hex_file(self, f, write_start_addr=True): + """Write data to file f in HEX format. + + @param f filename or file-like object for writing + @param write_start_addr enable or disable writing start address + record to file (enabled by default). + If there is no start address in obj, nothing + will be written regardless of this setting. + """ + fwrite = getattr(f, "write", None) + if fwrite: + fobj = f + fclose = None + else: + fobj = open(f, 'w') + fwrite = fobj.write + fclose = fobj.close + + # Translation table for uppercasing hex ascii string. + # timeit shows that using hexstr.translate(table) + # is faster than hexstr.upper(): + # 0.452ms vs. 0.652ms (translate vs. upper) + if sys.version_info[0] >= 3: + table = bytes(range(256)).upper() + else: + table = ''.join(chr(i).upper() for i in range(256)) + + + + # start address record if any + if self.start_addr and write_start_addr: + keys = self.start_addr.keys() + keys.sort() + bin = array('B', asbytes('\0'*9)) + if keys == ['CS','IP']: + # Start Segment Address Record + bin[0] = 4 # reclen + bin[1] = 0 # offset msb + bin[2] = 0 # offset lsb + bin[3] = 3 # rectyp + cs = self.start_addr['CS'] + bin[4] = (cs >> 8) & 0x0FF + bin[5] = cs & 0x0FF + ip = self.start_addr['IP'] + bin[6] = (ip >> 8) & 0x0FF + bin[7] = ip & 0x0FF + bin[8] = (-sum(bin)) & 0x0FF # chksum + fwrite(':' + + asstr(hexlify(bin.tostring()).translate(table)) + + '\n') + elif keys == ['EIP']: + # Start Linear Address Record + bin[0] = 4 # reclen + bin[1] = 0 # offset msb + bin[2] = 0 # offset lsb + bin[3] = 5 # rectyp + eip = self.start_addr['EIP'] + bin[4] = (eip >> 24) & 0x0FF + bin[5] = (eip >> 16) & 0x0FF + bin[6] = (eip >> 8) & 0x0FF + bin[7] = eip & 0x0FF + bin[8] = (-sum(bin)) & 0x0FF # chksum + fwrite(':' + + asstr(hexlify(bin.tostring()).translate(table)) + + '\n') + else: + if fclose: + fclose() + raise InvalidStartAddressValueError(start_addr=self.start_addr) + + # data + addresses = self._buf.keys() + addresses.sort() + addr_len = len(addresses) + if addr_len: + minaddr = addresses[0] + maxaddr = addresses[-1] + + if maxaddr > 65535: + need_offset_record = True + else: + need_offset_record = False + high_ofs = 0 + + cur_addr = minaddr + cur_ix = 0 + + while cur_addr <= maxaddr: + if need_offset_record: + bin = array('B', asbytes('\0'*7)) + bin[0] = 2 # reclen + bin[1] = 0 # offset msb + bin[2] = 0 # offset lsb + bin[3] = 4 # rectyp + high_ofs = int(cur_addr>>16) + b = divmod(high_ofs, 256) + bin[4] = b[0] # msb of high_ofs + bin[5] = b[1] # lsb of high_ofs + bin[6] = (-sum(bin)) & 0x0FF # chksum + fwrite(':' + + asstr(hexlify(bin.tostring()).translate(table)) + + '\n') + + while True: + # produce one record + low_addr = cur_addr & 0x0FFFF + # chain_len off by 1 + chain_len = min(15, 65535-low_addr, maxaddr-cur_addr) + + # search continuous chain + stop_addr = cur_addr + chain_len + if chain_len: + ix = bisect_right(addresses, stop_addr, + cur_ix, + min(cur_ix+chain_len+1, addr_len)) + chain_len = ix - cur_ix # real chain_len + # there could be small holes in the chain + # but we will catch them by try-except later + # so for big continuous files we will work + # at maximum possible speed + else: + chain_len = 1 # real chain_len + + bin = array('B', asbytes('\0'*(5+chain_len))) + b = divmod(low_addr, 256) + bin[1] = b[0] # msb of low_addr + bin[2] = b[1] # lsb of low_addr + bin[3] = 0 # rectype + try: # if there is small holes we'll catch them + for i in range(chain_len): + bin[4+i] = self._buf[cur_addr+i] + except KeyError: + # we catch a hole so we should shrink the chain + chain_len = i + bin = bin[:5+i] + bin[0] = chain_len + bin[4+chain_len] = (-sum(bin)) & 0x0FF # chksum + fwrite(':' + + asstr(hexlify(bin.tostring()).translate(table)) + + '\n') + + # adjust cur_addr/cur_ix + cur_ix += chain_len + if cur_ix < addr_len: + cur_addr = addresses[cur_ix] + else: + cur_addr = maxaddr + 1 + break + high_addr = int(cur_addr>>16) + if high_addr > high_ofs: + break + + # end-of-file record + fwrite(":00000001FF\n") + if fclose: + fclose() + + def tofile(self, fobj, format): + """Write data to hex or bin file. Preferred method over tobin or tohex. + + @param fobj file name or file-like object + @param format file format ("hex" or "bin") + """ + if format == 'hex': + self.write_hex_file(fobj) + elif format == 'bin': + self.tobinfile(fobj) + else: + raise ValueError('format should be either "hex" or "bin";' + ' got %r instead' % format) + + def gets(self, addr, length): + """Get string of bytes from given address. If any entries are blank + from addr through addr+length, a NotEnoughDataError exception will + be raised. Padding is not used.""" + a = array('B', asbytes('\0'*length)) + try: + for i in xrange(length): + a[i] = self._buf[addr+i] + except KeyError: + raise NotEnoughDataError(address=addr, length=length) + return asstr(a.tostring()) + + def puts(self, addr, s): + """Put string of bytes at given address. Will overwrite any previous + entries. + """ + a = array('B', asbytes(s)) + for i in xrange(len(a)): + self._buf[addr+i] = a[i] + + def getsz(self, addr): + """Get zero-terminated string from given address. Will raise + NotEnoughDataError exception if a hole is encountered before a 0. + """ + i = 0 + try: + while True: + if self._buf[addr+i] == 0: + break + i += 1 + except KeyError: + raise NotEnoughDataError(msg=('Bad access at 0x%X: ' + 'not enough data to read zero-terminated string') % addr) + return self.gets(addr, i) + + def putsz(self, addr, s): + """Put string in object at addr and append terminating zero at end.""" + self.puts(addr, s) + self._buf[addr+len(s)] = 0 + + def dump(self, tofile=None): + """Dump object content to specified file object or to stdout if None. + Format is a hexdump with some header information at the beginning, + addresses on the left, and data on right. + + @param tofile file-like object to dump to + """ + + if tofile is None: + tofile = sys.stdout + # start addr possibly + if self.start_addr is not None: + cs = self.start_addr.get('CS') + ip = self.start_addr.get('IP') + eip = self.start_addr.get('EIP') + if eip is not None and cs is None and ip is None: + tofile.write('EIP = 0x%08X\n' % eip) + elif eip is None and cs is not None and ip is not None: + tofile.write('CS = 0x%04X, IP = 0x%04X\n' % (cs, ip)) + else: + tofile.write('start_addr = %r\n' % start_addr) + # actual data + addresses = self._buf.keys() + if addresses: + addresses.sort() + minaddr = addresses[0] + maxaddr = addresses[-1] + startaddr = int(minaddr>>4)*16 + endaddr = int((maxaddr>>4)+1)*16 + maxdigits = max(len(str(endaddr)), 4) + templa = '%%0%dX' % maxdigits + range16 = range(16) + for i in xrange(startaddr, endaddr, 16): + tofile.write(templa % i) + tofile.write(' ') + s = [] + for j in range16: + x = self._buf.get(i+j) + if x is not None: + tofile.write(' %02X' % x) + if 32 <= x < 127: # GNU less does not like 0x7F (128 decimal) so we'd better show it as dot + s.append(chr(x)) + else: + s.append('.') + else: + tofile.write(' --') + s.append(' ') + tofile.write(' |' + ''.join(s) + '|\n') + + def merge(self, other, overlap='error'): + """Merge content of other IntelHex object into current object (self). + @param other other IntelHex object. + @param overlap action on overlap of data or starting addr: + - error: raising OverlapError; + - ignore: ignore other data and keep current data + in overlapping region; + - replace: replace data with other data + in overlapping region. + + @raise TypeError if other is not instance of IntelHex + @raise ValueError if other is the same object as self + (it can't merge itself) + @raise ValueError if overlap argument has incorrect value + @raise AddressOverlapError on overlapped data + """ + # check args + if not isinstance(other, IntelHex): + raise TypeError('other should be IntelHex object') + if other is self: + raise ValueError("Can't merge itself") + if overlap not in ('error', 'ignore', 'replace'): + raise ValueError("overlap argument should be either " + "'error', 'ignore' or 'replace'") + # merge data + this_buf = self._buf + other_buf = other._buf + for i in other_buf: + if i in this_buf: + if overlap == 'error': + raise AddressOverlapError( + 'Data overlapped at address 0x%X' % i) + elif overlap == 'ignore': + continue + this_buf[i] = other_buf[i] + # merge start_addr + if self.start_addr != other.start_addr: + if self.start_addr is None: # set start addr from other + self.start_addr = other.start_addr + elif other.start_addr is None: # keep existing start addr + pass + else: # conflict + if overlap == 'error': + raise AddressOverlapError( + 'Starting addresses are different') + elif overlap == 'replace': + self.start_addr = other.start_addr +#/IntelHex + + +class IntelHex16bit(IntelHex): + """Access to data as 16-bit words. Intended to use with Microchip HEX files.""" + + def __init__(self, source=None): + """Construct class from HEX file + or from instance of ordinary IntelHex class. If IntelHex object + is passed as source, the original IntelHex object should not be used + again because this class will alter it. This class leaves padding + alone unless it was precisely 0xFF. In that instance it is sign + extended to 0xFFFF. + + @param source file name of HEX file or file object + or instance of ordinary IntelHex class. + Will also accept dictionary from todict method. + """ + if isinstance(source, IntelHex): + # from ihex8 + self.padding = source.padding + self.start_addr = source.start_addr + # private members + self._buf = source._buf + self._offset = source._offset + elif isinstance(source, dict): + raise IntelHexError("IntelHex16bit does not support initialization from dictionary yet.\n" + "Patches are welcome.") + else: + IntelHex.__init__(self, source) + + if self.padding == 0x0FF: + self.padding = 0x0FFFF + + def __getitem__(self, addr16): + """Get 16-bit word from address. + Raise error if only one byte from the pair is set. + We assume a Little Endian interpretation of the hex file. + + @param addr16 address of word (addr8 = 2 * addr16). + @return word if bytes exists in HEX file, or self.padding + if no data found. + """ + addr1 = addr16 * 2 + addr2 = addr1 + 1 + byte1 = self._buf.get(addr1, None) + byte2 = self._buf.get(addr2, None) + + if byte1 != None and byte2 != None: + return byte1 | (byte2 << 8) # low endian + + if byte1 == None and byte2 == None: + return self.padding + + raise BadAccess16bit(address=addr16) + + def __setitem__(self, addr16, word): + """Sets the address at addr16 to word assuming Little Endian mode. + """ + addr_byte = addr16 * 2 + b = divmod(word, 256) + self._buf[addr_byte] = b[1] + self._buf[addr_byte+1] = b[0] + + def minaddr(self): + '''Get minimal address of HEX content in 16-bit mode. + + @return minimal address used in this object + ''' + aa = self._buf.keys() + if aa == []: + return 0 + else: + return min(aa)>>1 + + def maxaddr(self): + '''Get maximal address of HEX content in 16-bit mode. + + @return maximal address used in this object + ''' + aa = self._buf.keys() + if aa == []: + return 0 + else: + return max(aa)>>1 + + def tobinarray(self, start=None, end=None, size=None): + '''Convert this object to binary form as array (of 2-bytes word data). + If start and end unspecified, they will be inferred from the data. + @param start start address of output data. + @param end end address of output data (inclusive). + @param size size of the block (number of words), + used with start or end parameter. + @return array of unsigned short (uint16_t) data. + ''' + bin = array('H') + + if self._buf == {} and None in (start, end): + return bin + + if size is not None and size <= 0: + raise ValueError("tobinarray: wrong value for size") + + start, end = self._get_start_end(start, end, size) + + for addr in xrange(start, end+1): + bin.append(self[addr]) + + return bin + + +#/class IntelHex16bit + + +def hex2bin(fin, fout, start=None, end=None, size=None, pad=None): + """Hex-to-Bin convertor engine. + @return 0 if all OK + + @param fin input hex file (filename or file-like object) + @param fout output bin file (filename or file-like object) + @param start start of address range (optional) + @param end end of address range (inclusive; optional) + @param size size of resulting file (in bytes) (optional) + @param pad padding byte (optional) + """ + try: + h = IntelHex(fin) + except HexReaderError, e: + txt = "ERROR: bad HEX file: %s" % str(e) + print(txt) + return 1 + + # start, end, size + if size != None and size != 0: + if end == None: + if start == None: + start = h.minaddr() + end = start + size - 1 + else: + if (end+1) >= size: + start = end + 1 - size + else: + start = 0 + + try: + if pad is not None: + # using .padding attribute rather than pad argument to function call + h.padding = pad + h.tobinfile(fout, start, end) + except IOError, e: + txt = "ERROR: Could not write to file: %s: %s" % (fout, str(e)) + print(txt) + return 1 + + return 0 +#/def hex2bin + + +def bin2hex(fin, fout, offset=0): + """Simple bin-to-hex convertor. + @return 0 if all OK + + @param fin input bin file (filename or file-like object) + @param fout output hex file (filename or file-like object) + @param offset starting address offset for loading bin + """ + h = IntelHex() + try: + h.loadbin(fin, offset) + except IOError, e: + txt = 'ERROR: unable to load bin file:', str(e) + print(txt) + return 1 + + try: + h.tofile(fout, format='hex') + except IOError, e: + txt = "ERROR: Could not write to file: %s: %s" % (fout, str(e)) + print(txt) + return 1 + + return 0 +#/def bin2hex + + +def diff_dumps(ih1, ih2, tofile=None, name1="a", name2="b", n_context=3): + """Diff 2 IntelHex objects and produce unified diff output for their + hex dumps. + + @param ih1 first IntelHex object to compare + @param ih2 second IntelHex object to compare + @param tofile file-like object to write output + @param name1 name of the first hex file to show in the diff header + @param name2 name of the first hex file to show in the diff header + @param n_context number of context lines in the unidiff output + """ + def prepare_lines(ih): + from cStringIO import StringIO + sio = StringIO() + ih.dump(sio) + dump = sio.getvalue() + lines = dump.splitlines() + return lines + a = prepare_lines(ih1) + b = prepare_lines(ih2) + import difflib + result = list(difflib.unified_diff(a, b, fromfile=name1, tofile=name2, n=n_context, lineterm='')) + if tofile is None: + tofile = sys.stdout + output = '\n'.join(result)+'\n' + tofile.write(output) + + +class Record(object): + """Helper methods to build valid ihex records.""" + + def _from_bytes(bytes): + """Takes a list of bytes, computes the checksum, and outputs the entire + record as a string. bytes should be the hex record without the colon + or final checksum. + + @param bytes list of byte values so far to pack into record. + @return String representation of one HEX record + """ + assert len(bytes) >= 4 + # calculate checksum + s = (-sum(bytes)) & 0x0FF + bin = array('B', bytes + [s]) + return ':' + asstr(hexlify(bin.tostring())).upper() + _from_bytes = staticmethod(_from_bytes) + + def data(offset, bytes): + """Return Data record. This constructs the full record, including + the length information, the record type (0x00), the + checksum, and the offset. + + @param offset load offset of first byte. + @param bytes list of byte values to pack into record. + + @return String representation of one HEX record + """ + assert 0 <= offset < 65536 + assert 0 < len(bytes) < 256 + b = [len(bytes), (offset>>8)&0x0FF, offset&0x0FF, 0x00] + bytes + return Record._from_bytes(b) + data = staticmethod(data) + + def eof(): + """Return End of File record as a string. + @return String representation of Intel Hex EOF record + """ + return ':00000001FF' + eof = staticmethod(eof) + + def extended_segment_address(usba): + """Return Extended Segment Address Record. + @param usba Upper Segment Base Address. + + @return String representation of Intel Hex USBA record. + """ + b = [2, 0, 0, 0x02, (usba>>8)&0x0FF, usba&0x0FF] + return Record._from_bytes(b) + extended_segment_address = staticmethod(extended_segment_address) + + def start_segment_address(cs, ip): + """Return Start Segment Address Record. + @param cs 16-bit value for CS register. + @param ip 16-bit value for IP register. + + @return String representation of Intel Hex SSA record. + """ + b = [4, 0, 0, 0x03, (cs>>8)&0x0FF, cs&0x0FF, + (ip>>8)&0x0FF, ip&0x0FF] + return Record._from_bytes(b) + start_segment_address = staticmethod(start_segment_address) + + def extended_linear_address(ulba): + """Return Extended Linear Address Record. + @param ulba Upper Linear Base Address. + + @return String representation of Intel Hex ELA record. + """ + b = [2, 0, 0, 0x04, (ulba>>8)&0x0FF, ulba&0x0FF] + return Record._from_bytes(b) + extended_linear_address = staticmethod(extended_linear_address) + + def start_linear_address(eip): + """Return Start Linear Address Record. + @param eip 32-bit linear address for the EIP register. + + @return String representation of Intel Hex SLA record. + """ + b = [4, 0, 0, 0x05, (eip>>24)&0x0FF, (eip>>16)&0x0FF, + (eip>>8)&0x0FF, eip&0x0FF] + return Record._from_bytes(b) + start_linear_address = staticmethod(start_linear_address) + + +class _BadFileNotation(Exception): + """Special error class to use with _get_file_and_addr_range.""" + pass + +def _get_file_and_addr_range(s, _support_drive_letter=None): + """Special method for hexmerge.py script to split file notation + into 3 parts: (filename, start, end) + + @raise _BadFileNotation when string cannot be safely split. + """ + if _support_drive_letter is None: + _support_drive_letter = (os.name == 'nt') + drive = '' + if _support_drive_letter: + if s[1:2] == ':' and s[0].upper() in ''.join([chr(i) for i in range(ord('A'), ord('Z')+1)]): + drive = s[:2] + s = s[2:] + parts = s.split(':') + n = len(parts) + if n == 1: + fname = parts[0] + fstart = None + fend = None + elif n != 3: + raise _BadFileNotation + else: + fname = parts[0] + def ascii_hex_to_int(ascii): + if ascii is not None: + try: + return int(ascii, 16) + except ValueError: + raise _BadFileNotation + return ascii + fstart = ascii_hex_to_int(parts[1] or None) + fend = ascii_hex_to_int(parts[2] or None) + return drive+fname, fstart, fend + + +## +# IntelHex Errors Hierarchy: +# +# IntelHexError - basic error +# HexReaderError - general hex reader error +# AddressOverlapError - data for the same address overlap +# HexRecordError - hex record decoder base error +# RecordLengthError - record has invalid length +# RecordTypeError - record has invalid type (RECTYP) +# RecordChecksumError - record checksum mismatch +# EOFRecordError - invalid EOF record (type 01) +# ExtendedAddressRecordError - extended address record base error +# ExtendedSegmentAddressRecordError - invalid extended segment address record (type 02) +# ExtendedLinearAddressRecordError - invalid extended linear address record (type 04) +# StartAddressRecordError - start address record base error +# StartSegmentAddressRecordError - invalid start segment address record (type 03) +# StartLinearAddressRecordError - invalid start linear address record (type 05) +# DuplicateStartAddressRecordError - start address record appears twice +# InvalidStartAddressValueError - invalid value of start addr record +# _EndOfFile - it's not real error, used internally by hex reader as signal that EOF record found +# BadAccess16bit - not enough data to read 16 bit value (deprecated, see NotEnoughDataError) +# NotEnoughDataError - not enough data to read N contiguous bytes +# EmptyIntelHexError - requested operation cannot be performed with empty object + +class IntelHexError(Exception): + '''Base Exception class for IntelHex module''' + + _fmt = 'IntelHex base error' #: format string + + def __init__(self, msg=None, **kw): + """Initialize the Exception with the given message. + """ + self.msg = msg + for key, value in kw.items(): + setattr(self, key, value) + + def __str__(self): + """Return the message in this Exception.""" + if self.msg: + return self.msg + try: + return self._fmt % self.__dict__ + except (NameError, ValueError, KeyError), e: + return 'Unprintable exception %s: %s' \ + % (repr(e), str(e)) + +class _EndOfFile(IntelHexError): + """Used for internal needs only.""" + _fmt = 'EOF record reached -- signal to stop read file' + +class HexReaderError(IntelHexError): + _fmt = 'Hex reader base error' + +class AddressOverlapError(HexReaderError): + _fmt = 'Hex file has data overlap at address 0x%(address)X on line %(line)d' + +# class NotAHexFileError was removed in trunk.revno.54 because it's not used + + +class HexRecordError(HexReaderError): + _fmt = 'Hex file contains invalid record at line %(line)d' + + +class RecordLengthError(HexRecordError): + _fmt = 'Record at line %(line)d has invalid length' + +class RecordTypeError(HexRecordError): + _fmt = 'Record at line %(line)d has invalid record type' + +class RecordChecksumError(HexRecordError): + _fmt = 'Record at line %(line)d has invalid checksum' + +class EOFRecordError(HexRecordError): + _fmt = 'File has invalid End-of-File record' + + +class ExtendedAddressRecordError(HexRecordError): + _fmt = 'Base class for extended address exceptions' + +class ExtendedSegmentAddressRecordError(ExtendedAddressRecordError): + _fmt = 'Invalid Extended Segment Address Record at line %(line)d' + +class ExtendedLinearAddressRecordError(ExtendedAddressRecordError): + _fmt = 'Invalid Extended Linear Address Record at line %(line)d' + + +class StartAddressRecordError(HexRecordError): + _fmt = 'Base class for start address exceptions' + +class StartSegmentAddressRecordError(StartAddressRecordError): + _fmt = 'Invalid Start Segment Address Record at line %(line)d' + +class StartLinearAddressRecordError(StartAddressRecordError): + _fmt = 'Invalid Start Linear Address Record at line %(line)d' + +class DuplicateStartAddressRecordError(StartAddressRecordError): + _fmt = 'Start Address Record appears twice at line %(line)d' + +class InvalidStartAddressValueError(StartAddressRecordError): + _fmt = 'Invalid start address value: %(start_addr)s' + + +class NotEnoughDataError(IntelHexError): + _fmt = ('Bad access at 0x%(address)X: ' + 'not enough data to read %(length)d contiguous bytes') + +class BadAccess16bit(NotEnoughDataError): + _fmt = 'Bad access at 0x%(address)X: not enough data to read 16 bit value' + +class EmptyIntelHexError(IntelHexError): + _fmt = "Requested operation cannot be executed with empty object" diff --git a/libcodec2-android/src/codec2/stm32/support/intelhex/bench.py b/libcodec2-android/src/codec2/stm32/support/intelhex/bench.py new file mode 100644 index 0000000..0d8ed3e --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/support/intelhex/bench.py @@ -0,0 +1,357 @@ +#!/usr/bin/python +# (c) Alexander Belchenko, 2007, 2009 + +"""Benchmarking. + +Run each test 3 times and get median value. +Using 10K array as base test time. + +Each other test compared with base with next formula:: + + Tc * Nb + q = --------- + Tb * Nc + +Here: + +* Tc - execution time of current test +* Tb - execution time of base +* Nb - array size of base (10K) +* Nc - array size of current test + +If resulting value is ``q <= 1.0`` it's the best possible result, +i.e. time increase proportionally to array size. +""" + +from cStringIO import StringIO +import gc +import sys +import time + +import intelhex + + +def median(values): + """Return median value for the list of values. + @param values: list of values for processing. + @return: median value. + """ + values.sort() + n = int(len(values) / 2) + return values[n] + +def run_test(func, fobj): + """Run func with argument fobj and measure execution time. + @param func: function for test + @param fobj: data for test + @return: execution time + """ + gc.disable() + try: + begin = time.time() + func(fobj) + end = time.time() + finally: + gc.enable() + return end - begin + +def run_readtest_N_times(func, hexstr, n): + """Run each test N times. + @param func: function for test + @param hexstr: string with content of hex file to read + @param n: times to repeat. + @return: (median time, times list) + """ + assert n > 0 + times = [] + for i in xrange(n): + sio = StringIO(hexstr) + times.append(run_test(func, sio)) + sio.close() + t = median(times) + return t, times + +def run_writetest_N_times(func, n): + """Run each test N times. + @param func: function for test + @param n: times to repeat. + @return: (median time, times list) + """ + assert n > 0 + times = [] + for i in xrange(n): + sio = StringIO() + times.append(run_test(func, sio)) + sio.close() + t = median(times) + return t, times + +def time_coef(tc, nc, tb, nb): + """Return time coefficient relative to base numbers. + @param tc: current test time + @param nc: current test data size + @param tb: base test time + @param nb: base test data size + @return: time coef. + """ + tc = float(tc) + nc = float(nc) + tb = float(tb) + nb = float(nb) + q = (tc * nb) / (tb * nc) + return q + +def get_test_data(n1, offset, n2): + """Create test data on given pattern. + @param n1: size of first part of array at base address 0. + @param offset: offset for second part of array. + @param n2: size of second part of array at given offset. + @return: (overall size, hex file, IntelHex object) + """ + # make IntelHex object + ih = intelhex.IntelHex() + addr = 0 + for i in xrange(n1): + ih[addr] = addr % 256 + addr += 1 + addr += offset + for i in xrange(n2): + ih[addr] = addr % 256 + addr += 1 + # make hex file + sio = StringIO() + ih.write_hex_file(sio) + hexstr = sio.getvalue() + sio.close() + # + return n1+n2, hexstr, ih + +def get_base_10K(): + """Base 10K""" + return get_test_data(10000, 0, 0) + +def get_100K(): + return get_test_data(100000, 0, 0) + +def get_100K_100K(): + return get_test_data(100000, 1000000, 100000) + +def get_0_100K(): + return get_test_data(0, 1000000, 100000) + +def get_1M(): + return get_test_data(1000000, 0, 0) + + +class Measure(object): + """Measure execution time helper.""" + + data_set = [ + # (data name, getter) + ('base 10K', get_base_10K), # first should be base numbers + ('100K', get_100K), + ('1M', get_1M), + ('100K+100K', get_100K_100K), + ('0+100K', get_0_100K), + ] + + def __init__(self, n=3, read=True, write=True): + self.n = n + self.read = read + self.write = write + self.results = [] + + def measure_one(self, data): + """Do measuring of read and write operations. + @param data: 3-tuple from get_test_data + @return: (time readhex, time writehex) + """ + _unused, hexstr, ih = data + tread, twrite = 0.0, 0.0 + if self.read: + tread = run_readtest_N_times(intelhex.IntelHex, hexstr, self.n)[0] + if self.write: + twrite = run_writetest_N_times(ih.write_hex_file, self.n)[0] + return tread, twrite + + def measure_all(self): + for name, getter in self.data_set: + data = getter() + times = self.measure_one(data) + self.results.append((name, times, data[0])) + + def print_report(self, to_file=None): + if to_file is None: + to_file = sys.stdout + + base_title, base_times, base_n = self.results[0] + base_read, base_write = base_times + read_report = ['%-10s\t%7.3f' % (base_title, base_read)] + write_report = ['%-10s\t%7.3f' % (base_title, base_write)] + + for item in self.results[1:]: + cur_title, cur_times, cur_n = item + cur_read, cur_write = cur_times + if self.read: + qread = time_coef(cur_read, cur_n, + base_read, base_n) + read_report.append('%-10s\t%7.3f\t%7.3f' % (cur_title, + cur_read, + qread)) + if self.write: + qwrite = time_coef(cur_write, cur_n, + base_write, base_n) + write_report.append('%-10s\t%7.3f\t%7.3f' % (cur_title, + cur_write, + qwrite)) + if self.read: + to_file.write('Read operation:\n') + to_file.write('\n'.join(read_report)) + to_file.write('\n\n') + if self.write: + to_file.write('Write operation:\n') + to_file.write('\n'.join(write_report)) + to_file.write('\n\n') + + +HELP = """\ +Usage: python _bench.py [OPTIONS] + +Options: + -h this help + -n N repeat tests N times + -r run only tests for read operation + -w run only tests for write operation + +If option -r or -w is not specified then all tests will be run. +""" + + +def main(argv=None): + """Main function to run benchmarks. + @param argv: command-line arguments. + @return: exit code (0 is OK). + """ + import getopt + + # default values + test_read = None + test_write = None + n = 3 # number of repeat + + if argv is None: + argv = sys.argv[1:] + + try: + opts, args = getopt.getopt(argv, 'hn:rw', []) + + for o,a in opts: + if o == '-h': + print(HELP) + return 0 + elif o == '-n': + n = int(a) + elif o == '-r': + test_read = True + elif o == '-w': + test_write = True + + if args: + raise getopt.GetoptError('Arguments are not used.') + except getopt.GetoptError, msg: + txt = str(msg) + print(txt) + return 1 + + if (test_read, test_write) == (None, None): + test_read = test_write = True + + m = Measure(n, test_read, test_write) + m.measure_all() + m.print_report() + + return 0 + + +if __name__ == '__main__': + sys.exit(main(sys.argv[1:])) + + +""" + +Some Results +************ + + +21/04/2007 revno.40 +Python 2.5 @ Windows XP, Intel Celeron M CPU 430 @ 1.73GHz + +Read operation: +base 10K 0.031 +100K 0.360 1.161 +1M 3.500 1.129 +100K+100K 0.719 1.160 +0+100K 0.360 1.161 + +Write operation: +base 10K 0.031 +100K 0.297 0.958 +1M 2.953 0.953 +100K+100K 1.328 2.142 +0+100K 0.312 1.006 + + +21/04/2007 revno.46 +Python 2.5 @ Windows XP, Intel Celeron M CPU 430 @ 1.73GHz + +Read operation: +base 10K 0.016 +100K 0.203 1.269 +1M 2.000 1.250 +100K+100K 0.422 1.319 +0+100K 0.203 1.269 + +Write operation: +base 10K 0.031 +100K 0.297 0.958 +1M 2.969 0.958 +100K+100K 1.328 2.142 +0+100K 0.312 1.006 + + +22/04/2007 revno.48 +Python 2.5 @ Windows XP, Intel Celeron M CPU 430 @ 1.73GHz + +Read operation: +base 10K 0.016 +100K 0.187 1.169 +1M 1.891 1.182 +100K+100K 0.406 1.269 +0+100K 0.188 1.175 + +Write operation: +base 10K 0.031 +100K 0.296 0.955 +1M 2.969 0.958 +100K+100K 1.328 2.142 +0+100K 0.312 1.006 + + +19/08/2008 revno.72 +Python 2.5.2 @ Windows XP, Intel Celeron M CPU 430 @ 1.73GHz + +Read operation: +base 10K 0.016 +100K 0.171 1.069 +1M 1.734 1.084 +100K+100K 0.375 1.172 +0+100K 0.172 1.075 + +Write operation: +base 10K 0.016 +100K 0.156 0.975 +1M 1.532 0.957 +100K+100K 0.344 1.075 +0+100K 0.156 0.975 + +""" diff --git a/libcodec2-android/src/codec2/stm32/support/intelhex/compat.py b/libcodec2-android/src/codec2/stm32/support/intelhex/compat.py new file mode 100644 index 0000000..3f48350 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/support/intelhex/compat.py @@ -0,0 +1,57 @@ +# Copyright (c) 2011, Bernhard Leiner +# All rights reserved. +# +# Redistribution and use in source and binary forms, +# with or without modification, are permitted provided +# that the following conditions are met: +# +# * Redistributions of source code must retain +# the above copyright notice, this list of conditions +# and the following disclaimer. +# * Redistributions in binary form must reproduce +# the above copyright notice, this list of conditions +# and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# * Neither the name of the author nor the names +# of its contributors may be used to endorse +# or promote products derived from this software +# without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, +# BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY +# AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, +# OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, +# OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED +# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +'''Compatibility functions for python 2 and 3. + +@author Bernhard Leiner (bleiner AT gmail com) +@version 1.0 +''' + +__docformat__ = "javadoc" + + +import sys + +if sys.version_info[0] >= 3: + def asbytes(s): + if isinstance(s, bytes): + return s + return s.encode('latin1') + def asstr(s): + if isinstance(s, str): + return s + return s.decode('latin1') +else: + asbytes = str + asstr = str + diff --git a/libcodec2-android/src/codec2/stm32/support/intelhex/test.py b/libcodec2-android/src/codec2/stm32/support/intelhex/test.py new file mode 100644 index 0000000..9e4901c --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/support/intelhex/test.py @@ -0,0 +1,1483 @@ +#!/usr/bin/python + +# Copyright (c) 2005-2013, Alexander Belchenko +# All rights reserved. +# +# Redistribution and use in source and binary forms, +# with or without modification, are permitted provided +# that the following conditions are met: +# +# * Redistributions of source code must retain +# the above copyright notice, this list of conditions +# and the following disclaimer. +# * Redistributions in binary form must reproduce +# the above copyright notice, this list of conditions +# and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# * Neither the name of the author nor the names +# of its contributors may be used to endorse +# or promote products derived from this software +# without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, +# BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY +# AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, +# OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, +# OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED +# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +"""Test suite for IntelHex class.""" + +import array +from cStringIO import StringIO +import os +import sys +import tempfile +import unittest + +from compat import asbytes, asstr +import intelhex +from intelhex import IntelHex, \ + IntelHexError, \ + HexReaderError, \ + AddressOverlapError, \ + HexRecordError, \ + RecordLengthError, \ + RecordTypeError, \ + RecordChecksumError, \ + EOFRecordError, \ + ExtendedSegmentAddressRecordError, \ + ExtendedLinearAddressRecordError, \ + StartSegmentAddressRecordError, \ + StartLinearAddressRecordError, \ + DuplicateStartAddressRecordError, \ + InvalidStartAddressValueError, \ + _EndOfFile, \ + BadAccess16bit, \ + hex2bin, \ + Record + + +__docformat__ = 'restructuredtext' + +## +# Data for tests + +hex8 = '''\ +:1004E300CFF0FBE2FDF220FF20F2E120E2FBE6F396 +:1004F3000A00FDE0E1E2E3B4E4E5BAE6E7B3BFE80E +:10050300E9EAEBECEDEEEFF0F1F2F3F4F5F6F7F8E0 +:10051300F9FCFEFF00C0C1C2C3A5C4C5AAC6C7B2C9 +:10052300AFC8C9CACBCCCDCECFD0D1D2D3D4D5D6F8 +:07053300D7D8D9DCDEDF00A0 +:10053A0078227C007D007BFF7A0479F57E007F2398 +:10054A0012042F78457C007D007BFF7A0579187E9E +:10055A00007F2212042F759850438920758DDDD2B1 +:10056A008ED2996390017BFF7A0479E31200658049 +:01057A00FE82 +:030000000205A254 +:0C05A200787FE4F6D8FD75817A02053AF6 +:10035F00E709F608DFFA8046E709F208DFFA803E80 +:10036F0088828C83E709F0A3DFFA8032E309F6086D +:10037F00DFFA8078E309F208DFFA807088828C83D5 +:10038F00E309F0A3DFFA806489828A83E0A3F60889 +:10039F00DFFA805889828A83E0A3F208DFFA804C63 +:1003AF0080D280FA80C680D4806980F2803380103A +:1003BF0080A680EA809A80A880DA80E280CA8033A3 +:1003CF0089828A83ECFAE493A3C8C582C8CCC5831B +:1003DF00CCF0A3C8C582C8CCC583CCDFE9DEE780EB +:1003EF000D89828A83E493A3F608DFF9ECFAA9F06A +:1003FF00EDFB2289828A83ECFAE0A3C8C582C8CCC0 +:10040F00C583CCF0A3C8C582C8CCC583CCDFEADED8 +:10041F00E880DB89828A83E493A3F208DFF980CC3A +:10042F0088F0EF60010E4E60C388F0ED2402B40433 +:10043F000050B9F582EB2402B4040050AF232345DA +:06044F0082239003AF734D +:10000300E576246AF8E60576227867300702786A8F +:10001300E475F0011204AD0204552000EB7F2ED2EB +:10002300008018EF540F2490D43440D4FF30040BD5 +:10003300EF24BFB41A0050032461FFE57760021573 +:1000430077057AE57A7002057930070D7867E475EC +:10005300F0011204ADEF02049B02057B7403D20787 +:100063008003E4C207F5768B678A688969E4F577CC +:10007300F579F57AE57760077F2012003E80F57504 +:1000830078FFC201C200C202C203C205C206C2088F +:1000930012000CFF700D3007057F0012004FAF7A7E +:1000A300AE7922B4255FC2D5C20412000CFF24D05E +:1000B300B40A00501A75F00A787730D50508B6FFF0 +:1000C3000106C6A426F620D5047002D20380D924E3 +:1000D300CFB41A00EF5004C2E5D20402024FD2019A +:1000E30080C6D20080C0D20280BCD2D580BAD205ED +:1000F30080B47F2012003E2002077401B5770040D0 +:10010300F1120003FF12003E020077D208D20680EC +:1001130095120003FB120003FA120003F94A4B7015 +:100123000679207A037BFF20022EE577602A7E0082 +:100133008E8275830012046E60060EEE657870F091 +:10014300C2D5EBC0E0EAC0E0E9C0E0EE120296D00F +:10015300E0F9D0E0FAD0E0FB120455FF60AAEBC04F +:10016300E0EAC0E0E9C0E012003ED0E02401F9D0AB +:10017300E03400FAD0E0FBE5780460DCD578D98080 +:10018300877BFF7A027992D202809C791080027970 +:1001930008C206C2088008D2D5790A8004790AC247 +:1001A300D5E578047002F578E4FAFDFEFF1200034A +:1001B300FC7B08200113120003FD7B1030000A12A0 +:1001C3000003FE120003FF7B20EC3382D592D5504F +:1001D30013C3E43000069FFFE49EFEE42001039D69 +:1001E300FDE49CFCE4CBF8C201EC700CCFCECDCC8B +:1001F300E824F8F870F38017C3EF33FFEE33FEED16 +:1002030033FDEC33FCEB33FB994002FB0FD8E9EBF6 +:10021300300105F8D0E0C448B201C0E00AEC4D4E0D +:100223004F78207B0070C2EAB5780040BCC0E01272 +:100233000298D0F0D0E0200104C4C0E0C4B201C0F1 +:10024300F0120027D0F0D5F0EB0200771204BD01C5 +:100253001453018E5800E54C00E14201924F019A7C +:0F02630044019A4900FA4301A0550184460184E1 +:100272004501844703405000E92D00ED2E01102B6B +:1002820000F123010E2003292A00A94800000108D9 +:100292003F3F3F00790AA2D5200314300509B91067 +:1002A200020404B9080104A2D52006025001042068 +:1002B20002689202B577005034C0E07F2030031903 +:1002C2007F30A20272067205500F1202EFC202C202 +:1002D20006C205C2087F30800F300503E9C0E01274 +:1002E200003E300503D0E0F9D0E0B577CC300517F9 +:1002F2007F30B9100C12003E7F583004077F78809F +:1003020003B9080312003E3002057F2D02003E7F32 +:10031200202008F87F2B2006F322920280CF286E3D +:10032200756C6C2900D2011200033001F8C2017809 +:100332007730D50108F60200A92D50434958120022 +:10034200032403B405004001E490033B9312002F01 +:0D035200743A12002FD20375770402018E59 +:10045500BB010689828A83E0225002E722BBFE02A5 +:09046500E32289828A83E49322D8 +:10046E00BB010CE58229F582E5833AF583E0225043 +:10047E0006E92582F8E622BBFE06E92582F8E2228D +:0D048E00E58229F582E5833AF583E49322A7 +:10049B00BB010689828A83F0225002F722BBFE0140 +:0204AB00F3223A +:1004AD00FAE6FB0808E6F925F0F618E6CA3AF62250 +:1004BD00D083D082F8E4937012740193700DA3A3CE +:1004CD0093F8740193F5828883E4737402936860E2 +:0604DD00EFA3A3A380DFE2 +:10057B00EFB40A07740D120586740A309811A89906 +:10058B00B8130CC2983098FDA899C298B811F630E0 +:07059B0099FDC299F59922B8 +:00000001FF +''' +bin8 = array.array('B',[2, 5, 162, 229, 118, 36, 106, 248, 230, 5, 118, 34, + 120, 103, 48, 7, 2, 120, 106, 228, 117, 240, 1, 18, + 4, 173, 2, 4, 85, 32, 0, 235, 127, 46, 210, 0, 128, + 24, 239, 84, 15, 36, 144, 212, 52, 64, 212, 255, 48, + 4, 11, 239, 36, 191, 180, 26, 0, 80, 3, 36, 97, 255, + 229, 119, 96, 2, 21, 119, 5, 122, 229, 122, 112, 2, + 5, 121, 48, 7, 13, 120, 103, 228, 117, 240, 1, 18, + 4, 173, 239, 2, 4, 155, 2, 5, 123, 116, 3, 210, 7, + 128, 3, 228, 194, 7, 245, 118, 139, 103, 138, 104, + 137, 105, 228, 245, 119, 245, 121, 245, 122, 229, + 119, 96, 7, 127, 32, 18, 0, 62, 128, 245, 117, 120, + 255, 194, 1, 194, 0, 194, 2, 194, 3, 194, 5, 194, 6, + 194, 8, 18, 0, 12, 255, 112, 13, 48, 7, 5, 127, 0, + 18, 0, 79, 175, 122, 174, 121, 34, 180, 37, 95, 194, + 213, 194, 4, 18, 0, 12, 255, 36, 208, 180, 10, 0, 80, + 26, 117, 240, 10, 120, 119, 48, 213, 5, 8, 182, 255, + 1, 6, 198, 164, 38, 246, 32, 213, 4, 112, 2, 210, 3, + 128, 217, 36, 207, 180, 26, 0, 239, 80, 4, 194, 229, + 210, 4, 2, 2, 79, 210, 1, 128, 198, 210, 0, 128, 192, + 210, 2, 128, 188, 210, 213, 128, 186, 210, 5, 128, + 180, 127, 32, 18, 0, 62, 32, 2, 7, 116, 1, 181, 119, + 0, 64, 241, 18, 0, 3, 255, 18, 0, 62, 2, 0, 119, 210, + 8, 210, 6, 128, 149, 18, 0, 3, 251, 18, 0, 3, 250, + 18, 0, 3, 249, 74, 75, 112, 6, 121, 32, 122, 3, 123, + 255, 32, 2, 46, 229, 119, 96, 42, 126, 0, 142, 130, + 117, 131, 0, 18, 4, 110, 96, 6, 14, 238, 101, 120, + 112, 240, 194, 213, 235, 192, 224, 234, 192, 224, + 233, 192, 224, 238, 18, 2, 150, 208, 224, 249, 208, + 224, 250, 208, 224, 251, 18, 4, 85, 255, 96, 170, + 235, 192, 224, 234, 192, 224, 233, 192, 224, 18, 0, + 62, 208, 224, 36, 1, 249, 208, 224, 52, 0, 250, 208, + 224, 251, 229, 120, 4, 96, 220, 213, 120, 217, 128, + 135, 123, 255, 122, 2, 121, 146, 210, 2, 128, 156, + 121, 16, 128, 2, 121, 8, 194, 6, 194, 8, 128, 8, 210, + 213, 121, 10, 128, 4, 121, 10, 194, 213, 229, 120, 4, + 112, 2, 245, 120, 228, 250, 253, 254, 255, 18, 0, 3, + 252, 123, 8, 32, 1, 19, 18, 0, 3, 253, 123, 16, 48, + 0, 10, 18, 0, 3, 254, 18, 0, 3, 255, 123, 32, 236, + 51, 130, 213, 146, 213, 80, 19, 195, 228, 48, 0, 6, + 159, 255, 228, 158, 254, 228, 32, 1, 3, 157, 253, + 228, 156, 252, 228, 203, 248, 194, 1, 236, 112, 12, + 207, 206, 205, 204, 232, 36, 248, 248, 112, 243, 128, + 23, 195, 239, 51, 255, 238, 51, 254, 237, 51, 253, + 236, 51, 252, 235, 51, 251, 153, 64, 2, 251, 15, 216, + 233, 235, 48, 1, 5, 248, 208, 224, 196, 72, 178, 1, + 192, 224, 10, 236, 77, 78, 79, 120, 32, 123, 0, 112, + 194, 234, 181, 120, 0, 64, 188, 192, 224, 18, 2, 152, + 208, 240, 208, 224, 32, 1, 4, 196, 192, 224, 196, + 178, 1, 192, 240, 18, 0, 39, 208, 240, 213, 240, 235, + 2, 0, 119, 18, 4, 189, 1, 20, 83, 1, 142, 88, 0, 229, + 76, 0, 225, 66, 1, 146, 79, 1, 154, 68, 1, 154, 73, + 0, 250, 67, 1, 160, 85, 1, 132, 70, 1, 132, 69, 1, + 132, 71, 3, 64, 80, 0, 233, 45, 0, 237, 46, 1, 16, + 43, 0, 241, 35, 1, 14, 32, 3, 41, 42, 0, 169, 72, 0, + 0, 1, 8, 63, 63, 63, 0, 121, 10, 162, 213, 32, 3, 20, + 48, 5, 9, 185, 16, 2, 4, 4, 185, 8, 1, 4, 162, 213, + 32, 6, 2, 80, 1, 4, 32, 2, 104, 146, 2, 181, 119, 0, + 80, 52, 192, 224, 127, 32, 48, 3, 25, 127, 48, 162, + 2, 114, 6, 114, 5, 80, 15, 18, 2, 239, 194, 2, 194, + 6, 194, 5, 194, 8, 127, 48, 128, 15, 48, 5, 3, 233, + 192, 224, 18, 0, 62, 48, 5, 3, 208, 224, 249, 208, + 224, 181, 119, 204, 48, 5, 23, 127, 48, 185, 16, 12, + 18, 0, 62, 127, 88, 48, 4, 7, 127, 120, 128, 3, 185, + 8, 3, 18, 0, 62, 48, 2, 5, 127, 45, 2, 0, 62, 127, + 32, 32, 8, 248, 127, 43, 32, 6, 243, 34, 146, 2, 128, + 207, 40, 110, 117, 108, 108, 41, 0, 210, 1, 18, 0, 3, + 48, 1, 248, 194, 1, 120, 119, 48, 213, 1, 8, 246, 2, + 0, 169, 45, 80, 67, 73, 88, 18, 0, 3, 36, 3, 180, 5, + 0, 64, 1, 228, 144, 3, 59, 147, 18, 0, 47, 116, 58, + 18, 0, 47, 210, 3, 117, 119, 4, 2, 1, 142, 231, 9, + 246, 8, 223, 250, 128, 70, 231, 9, 242, 8, 223, 250, + 128, 62, 136, 130, 140, 131, 231, 9, 240, 163, 223, + 250, 128, 50, 227, 9, 246, 8, 223, 250, 128, 120, + 227, 9, 242, 8, 223, 250, 128, 112, 136, 130, 140, + 131, 227, 9, 240, 163, 223, 250, 128, 100, 137, + 130, 138, 131, 224, 163, 246, 8, 223, 250, 128, 88, + 137, 130, 138, 131, 224, 163, 242, 8, 223, 250, 128, + 76, 128, 210, 128, 250, 128, 198, 128, 212, 128, 105, + 128, 242, 128, 51, 128, 16, 128, 166, 128, 234, 128, + 154, 128, 168, 128, 218, 128, 226, 128, 202, 128, 51, + 137, 130, 138, 131, 236, 250, 228, 147, 163, 200, + 197, 130, 200, 204, 197, 131, 204, 240, 163, 200, + 197, 130, 200, 204, 197, 131, 204, 223, 233, 222, + 231, 128, 13, 137, 130, 138, 131, 228, 147, 163, 246, + 8, 223, 249, 236, 250, 169, 240, 237, 251, 34, 137, + 130, 138, 131, 236, 250, 224, 163, 200, 197, 130, + 200, 204, 197, 131, 204, 240, 163, 200, 197, 130, + 200, 204, 197, 131, 204, 223, 234, 222, 232, 128, + 219, 137, 130, 138, 131, 228, 147, 163, 242, 8, + 223, 249, 128, 204, 136, 240, 239, 96, 1, 14, 78, + 96, 195, 136, 240, 237, 36, 2, 180, 4, 0, 80, 185, + 245, 130, 235, 36, 2, 180, 4, 0, 80, 175, 35, 35, + 69, 130, 35, 144, 3, 175, 115, 187, 1, 6, 137, 130, + 138, 131, 224, 34, 80, 2, 231, 34, 187, 254, 2, 227, + 34, 137, 130, 138, 131, 228, 147, 34, 187, 1, 12, + 229, 130, 41, 245, 130, 229, 131, 58, 245, 131, 224, + 34, 80, 6, 233, 37, 130, 248, 230, 34, 187, 254, 6, + 233, 37, 130, 248, 226, 34, 229, 130, 41, 245, 130, + 229, 131, 58, 245, 131, 228, 147, 34, 187, 1, 6, + 137, 130, 138, 131, 240, 34, 80, 2, 247, 34, 187, + 254, 1, 243, 34, 250, 230, 251, 8, 8, 230, 249, 37, + 240, 246, 24, 230, 202, 58, 246, 34, 208, 131, 208, + 130, 248, 228, 147, 112, 18, 116, 1, 147, 112, 13, + 163, 163, 147, 248, 116, 1, 147, 245, 130, 136, + 131, 228, 115, 116, 2, 147, 104, 96, 239, 163, 163, + 163, 128, 223, 207, 240, 251, 226, 253, 242, 32, + 255, 32, 242, 225, 32, 226, 251, 230, 243, 10, 0, + 253, 224, 225, 226, 227, 180, 228, 229, 186, 230, + 231, 179, 191, 232, 233, 234, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 252, 254, 255, 0, 192, 193, 194, 195, 165, 196, + 197, 170, 198, 199, 178, 175, 200, 201, 202, 203, + 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, + 214, 215, 216, 217, 220, 222, 223, 0, 120, 34, 124, + 0, 125, 0, 123, 255, 122, 4, 121, 245, 126, 0, 127, + 35, 18, 4, 47, 120, 69, 124, 0, 125, 0, 123, 255, + 122, 5, 121, 24, 126, 0, 127, 34, 18, 4, 47, 117, + 152, 80, 67, 137, 32, 117, 141, 221, 210, 142, 210, + 153, 99, 144, 1, 123, 255, 122, 4, 121, 227, 18, 0, + 101, 128, 254, 239, 180, 10, 7, 116, 13, 18, 5, 134, + 116, 10, 48, 152, 17, 168, 153, 184, 19, 12, 194, + 152, 48, 152, 253, 168, 153, 194, 152, 184, 17, + 246, 48, 153, 253, 194, 153, 245, 153, 34, 120, 127, + 228, 246, 216, 253, 117, 129, 122, 2, 5, 58]) + + +hex16 = """:020000040000FA +:10000000000083120313072055301820042883169C +:10001000031340309900181598168312031318160D +:1000200098170800831203138C1E14281A0808005E +:0C003000831203130C1E1A28990008000C +:00000001FF +""" +bin16 = array.array('H', [0x0000, 0x1283, 0x1303, 0x2007, + 0x3055, 0x2018, 0x2804, 0x1683, + 0x1303, 0x3040, 0x0099, 0x1518, + 0x1698, 0x1283, 0x1303, 0x1618, + 0x1798, 0x0008, 0x1283, 0x1303, + 0x1E8C, 0x2814, 0x081A, 0x0008, + 0x1283, 0x1303, 0x1E0C, 0x281A, + 0x0099, 0x0008, 0x3FFF, 0x3FFF]) + + +hex64k = """:020000040000FA +:0100000001FE +:020000040001F9 +:0100000002FD +:00000001FF +""" +data64k = {0: 1, 0x10000: 2} + + +hex_rectype3 = """:0400000312345678E5 +:0100000001FE +:00000001FF +""" +data_rectype3 = {0: 1} +start_addr_rectype3 = {'CS': 0x1234, 'IP': 0x5678} + + +hex_rectype5 = """:0400000512345678E3 +:0100000002FD +:00000001FF +""" +data_rectype5 = {0: 2} +start_addr_rectype5 = {'EIP': 0x12345678} + +hex_empty_file = ':00000001FF\n' + +hex_simple = """\ +:10000000000083120313072055301820042883169C +:10001000031340309900181598168312031318160D +:1000200098170800831203138C1E14281A0808005E +:0C003000831203130C1E1A28990008000C +:00000001FF +""" + +hex_bug_lp_341051 = """\ +:020FEC00E4E738 +:040FF00022E122E1F7 +:00000001FF +""" + + +## +# Test cases + +class TestIntelHexBase(unittest.TestCase): + """Base class for all tests. + Provide additional functionality for testing. + """ + + def assertRaisesMsg(self, excClass, msg, callableObj, *args, **kwargs): + """Just like unittest.TestCase.assertRaises, + but checks that the message is right too. + + Borrowed from Ned Batchelder Blog. + See: http://www.nedbatchelder.com/blog/200609.html#e20060905T064418 + + Typical usage:: + + self.assertRaisesMsg(MyException, "Exception message", + my_function, (arg1, arg2)) + """ + try: + callableObj(*args, **kwargs) + except excClass, exc: + excMsg = str(exc) + if not msg: + # No message provided: any message is fine. + return + elif excMsg == msg: + # Message provided, and we got the right message: it passes. + return + else: + # Message provided, and it didn't match: fail! + raise self.failureException( + "Right exception, wrong message: got '%s' expected '%s'" % + (excMsg, msg) + ) + else: + if hasattr(excClass, '__name__'): + excName = excClass.__name__ + else: + excName = str(excClass) + raise self.failureException( + "Expected to raise %s, didn't get an exception at all" % + excName + ) + + def assertEqualWrittenData(self, a, b): + return self.assertEquals(a, b, """Written data is incorrect +Should be: +%s + +Written: +%s +""" % (a, b)) +#/class TestIntelHexBase + + +class TestIntelHex(TestIntelHexBase): + + def setUp(self): + self.f = StringIO(hex8) + + def tearDown(self): + self.f.close() + del self.f + + def test_init_from_file(self): + ih = IntelHex(self.f) + for addr in xrange(len(bin8)): + expected = bin8[addr] + actual = ih[addr] + self.assertEqual(expected, actual, + "Data different at address " + "%x (%x != %x)" % (addr, expected, actual)) + + def test_hex_fromfile(self): + ih = IntelHex() + ih.fromfile(self.f, format='hex') + for addr in xrange(len(bin8)): + expected = bin8[addr] + actual = ih[addr] + self.assertEqual(expected, actual, + "Data different at address " + "%x (%x != %x)" % (addr, expected, actual)) + + def test_unicode_filename(self): + handle, fname = tempfile.mkstemp(u'') + os.close(handle) + try: + self.assertTrue(isinstance(fname, unicode)) + f = open(fname, 'w') + try: + f.write(hex8) + finally: + f.close() + ih = IntelHex(fname) + self.assertEqual(0, ih.minaddr()) + self.assertEqual(len(bin8)-1, ih.maxaddr()) + finally: + os.remove(fname) + + def test_tobinarray_empty(self): + ih = IntelHex() + ih.padding = 0xFF # set-up explicit padding value and don't use pad parameter + self.assertEqual(array.array('B', []), ih.tobinarray()) + self.assertEqual(array.array('B', []), ih.tobinarray(start=0)) + self.assertEqual(array.array('B', []), ih.tobinarray(end=2)) + self.assertEqual(array.array('B', [255,255,255]), ih.tobinarray(0,2)) + + def test_tobinarray_with_size(self): + ih = IntelHex(self.f) + self.assertEqual(array.array('B', [2, 5, 162, 229, 118, 36, 106, 248]), + ih.tobinarray(size=8)) # from addr 0 + self.assertEqual(array.array('B', [120, 103, 48, 7, 2, 120, 106, 228]), + ih.tobinarray(start=12, size=8)) + self.assertEqual(array.array('B', [2, 5, 162, 229, 118, 36, 106, 248]), + ih.tobinarray(end=7, size=8)) # addr: 0..7, 8 bytes + self.assertEqual(array.array('B', [120, 103, 48, 7, 2, 120, 106, 228]), + ih.tobinarray(end=19, size=8)) # addr: 12..19, 8 bytes + self.assertRaises(ValueError, ih.tobinarray, start=0, end=7, size=8) + self.assertRaises(ValueError, ih.tobinarray, end=3, size=8) + self.assertRaises(ValueError, ih.tobinarray, size=0) + self.assertRaises(ValueError, ih.tobinarray, size=-1) + + def test_tobinstr(self): + ih = IntelHex(self.f) + s1 = ih.tobinstr() + s2 = asstr(bin8.tostring()) + self.assertEqual(s2, s1, "data not equal\n%s\n\n%s" % (s1, s2)) + + def test_tobinfile(self): + ih = IntelHex(self.f) + sio = StringIO() + ih.tobinfile(sio) + s1 = sio.getvalue() + sio.close() + s2 = asstr(bin8.tostring()) + self.assertEqual(s2, s1, "data not equal\n%s\n\n%s" % (s1, s2)) + # new API: .tofile universal method + sio = StringIO() + ih.tofile(sio, format='bin') + s1 = sio.getvalue() + sio.close() + s2 = asstr(bin8.tostring()) + self.assertEqual(s2, s1, "data not equal\n%s\n\n%s" % (s1, s2)) + + def test_write_empty_hexfile(self): + ih = intelhex.IntelHex() + sio = StringIO() + ih.write_hex_file(sio) + s = sio.getvalue() + sio.close() + self.assertEqualWrittenData(hex_empty_file, s) + + def test_write_hexfile(self): + ih = intelhex.IntelHex(StringIO(hex_simple)) + sio = StringIO() + ih.write_hex_file(sio) + s = sio.getvalue() + sio.close() + self.assertEqualWrittenData(hex_simple, s) + # new API: .tofile universal method + sio = StringIO() + ih.tofile(sio, format='hex') + s = sio.getvalue() + sio.close() + self.assertEqualWrittenData(hex_simple, s) + + def test_write_hex_bug_341051(self): + ih = intelhex.IntelHex(StringIO(hex_bug_lp_341051)) + sio = StringIO() + ih.tofile(sio, format='hex') + s = sio.getvalue() + sio.close() + self.assertEqualWrittenData(hex_bug_lp_341051, s) + + def test_write_hex_first_extended_linear_address(self): + ih = IntelHex({0x20000: 0x01}) + sio = StringIO() + ih.write_hex_file(sio) + s = sio.getvalue() + sio.close() + # should be + r = [Record.extended_linear_address(2), + Record.data(0x0000, [0x01]), + Record.eof()] + h = '\n'.join(r) + '\n' + # compare + self.assertEqual(h, s) + + def test_tofile_wrong_format(self): + ih = IntelHex() + sio = StringIO() + self.assertRaises(ValueError, ih.tofile, sio, {'format': 'bad'}) + + def test_todict(self): + ih = IntelHex() + self.assertEquals({}, ih.todict()) + ih = IntelHex(StringIO(hex64k)) + self.assertEquals(data64k, ih.todict()) + ih = IntelHex() + ih[1] = 2 + ih.start_addr = {'EIP': 1234} + self.assertEquals({1: 2, 'start_addr': {'EIP': 1234}}, ih.todict()) + + def test_fromdict(self): + ih = IntelHex() + ih.fromdict({1:2, 3:4}) + self.assertEquals({1:2, 3:4}, ih.todict()) + ih.fromdict({1:5, 6:7}) + self.assertEquals({1:5, 3:4, 6:7}, ih.todict()) + ih = IntelHex() + ih.fromdict({1: 2, 'start_addr': {'EIP': 1234}}) + self.assertEquals({1: 2, 'start_addr': {'EIP': 1234}}, ih.todict()) + # bad dict + self.assertRaises(ValueError, ih.fromdict, {'EIP': 1234}) + self.assertRaises(ValueError, ih.fromdict, {-1: 1234}) + + def test_init_from_obj(self): + ih = IntelHex({1:2, 3:4}) + self.assertEquals({1:2, 3:4}, ih.todict()) + ih.start_addr = {'EIP': 1234} + ih2 = IntelHex(ih) + ih[1] = 5 + ih.start_addr = {'EIP': 5678} + self.assertEquals({1:2, 3:4, 'start_addr': {'EIP': 1234}}, ih2.todict()) + self.assertNotEqual(id(ih), id(ih2)) + + def test_dict_interface(self): + ih = IntelHex() + self.assertEquals(0xFF, ih[0]) # padding byte substitution + ih[0] = 1 + self.assertEquals(1, ih[0]) + del ih[0] + self.assertEquals({}, ih.todict()) # padding byte substitution + + def test_len(self): + ih = IntelHex() + self.assertEquals(0, len(ih)) + ih[2] = 1 + self.assertEquals(1, len(ih)) + ih[1000] = 2 + self.assertEquals(2, len(ih)) + + def test__getitem__(self): + ih = IntelHex() + # simple cases + self.assertEquals(0xFF, ih[0]) + ih[0] = 1 + self.assertEquals(1, ih[0]) + # big address + self.assertEquals(0xFF, ih[2**32-1]) + # wrong addr type/value for indexing operations + def getitem(index): + return ih[index] + self.assertRaisesMsg(TypeError, + 'Address should be >= 0.', + getitem, -1) + self.assertRaisesMsg(TypeError, + "Address has unsupported type: %s" % type('foo'), + getitem, 'foo') + # new object with some data + ih = IntelHex() + ih[0] = 1 + ih[1] = 2 + ih[2] = 3 + ih[10] = 4 + # full copy via slicing + ih2 = ih[:] + self.assertTrue(isinstance(ih2, IntelHex)) + self.assertEquals({0:1, 1:2, 2:3, 10:4}, ih2.todict()) + # other slice operations + self.assertEquals({}, ih[3:8].todict()) + self.assertEquals({0:1, 1:2}, ih[0:2].todict()) + self.assertEquals({0:1, 1:2}, ih[:2].todict()) + self.assertEquals({2:3, 10:4}, ih[2:].todict()) + self.assertEquals({0:1, 2:3, 10:4}, ih[::2].todict()) + self.assertEquals({10:4}, ih[3:11].todict()) + + def test__setitem__(self): + ih = IntelHex() + # simple indexing operation + ih[0] = 1 + self.assertEquals({0:1}, ih.todict()) + # errors + def setitem(a,b): + ih[a] = b + self.assertRaisesMsg(TypeError, + 'Address should be >= 0.', + setitem, -1, 0) + self.assertRaisesMsg(TypeError, + "Address has unsupported type: %s" % type('foo'), + setitem, 'foo', 0) + # slice operations + ih[0:4] = range(4) + self.assertEquals({0:0, 1:1, 2:2, 3:3}, ih.todict()) + ih[0:] = range(5,9) + self.assertEquals({0:5, 1:6, 2:7, 3:8}, ih.todict()) + ih[:4] = range(9,13) + self.assertEquals({0:9, 1:10, 2:11, 3:12}, ih.todict()) + # with step + ih = IntelHex() + ih[0:8:2] = range(4) + self.assertEquals({0:0, 2:1, 4:2, 6:3}, ih.todict()) + # errors in slice operations + # ih[1:2] = 'a' + self.assertRaisesMsg(ValueError, + 'Slice operation expects sequence of bytes', + setitem, slice(1,2,None), 'a') + # ih[0:1] = [1,2,3] + self.assertRaisesMsg(ValueError, + 'Length of bytes sequence does not match address range', + setitem, slice(0,1,None), [1,2,3]) + # ih[:] = [1,2,3] + self.assertRaisesMsg(TypeError, + 'Unsupported address range', + setitem, slice(None,None,None), [1,2,3]) + # ih[:2] = [1,2,3] + self.assertRaisesMsg(TypeError, + 'start address cannot be negative', + setitem, slice(None,2,None), [1,2,3]) + # ih[0:-3:-1] = [1,2,3] + self.assertRaisesMsg(TypeError, + 'stop address cannot be negative', + setitem, slice(0,-3,-1), [1,2,3]) + + def test__delitem__(self): + ih = IntelHex() + ih[0] = 1 + del ih[0] + self.assertEquals({}, ih.todict()) + # errors + def delitem(addr): + del ih[addr] + self.assertRaises(KeyError, delitem, 1) + self.assertRaisesMsg(TypeError, + 'Address should be >= 0.', + delitem, -1) + self.assertRaisesMsg(TypeError, + "Address has unsupported type: %s" % type('foo'), + delitem, 'foo') + # deleting slice + del ih[0:1] # no error here because of slicing + # + def ihex(size=8): + ih = IntelHex() + for i in xrange(size): + ih[i] = i + return ih + ih = ihex(8) + del ih[:] # delete all data + self.assertEquals({}, ih.todict()) + ih = ihex(8) + del ih[2:6] + self.assertEquals({0:0, 1:1, 6:6, 7:7}, ih.todict()) + ih = ihex(8) + del ih[::2] + self.assertEquals({1:1, 3:3, 5:5, 7:7}, ih.todict()) + + def test_addresses(self): + # empty object + ih = IntelHex() + self.assertEquals([], ih.addresses()) + self.assertEquals(None, ih.minaddr()) + self.assertEquals(None, ih.maxaddr()) + # normal object + ih = IntelHex({1:2, 7:8, 10:0}) + self.assertEquals([1,7,10], ih.addresses()) + self.assertEquals(1, ih.minaddr()) + self.assertEquals(10, ih.maxaddr()) + + def test__get_start_end(self): + # test for private method _get_start_end + # for empty object + ih = IntelHex() + self.assertRaises(intelhex.EmptyIntelHexError, ih._get_start_end) + self.assertRaises(intelhex.EmptyIntelHexError, ih._get_start_end, size=10) + self.assertEquals((0,9), ih._get_start_end(start=0, size=10)) + self.assertEquals((1,10), ih._get_start_end(end=10, size=10)) + # normal object + ih = IntelHex({1:2, 7:8, 10:0}) + self.assertEquals((1,10), ih._get_start_end()) + self.assertEquals((1,10), ih._get_start_end(size=10)) + self.assertEquals((0,9), ih._get_start_end(start=0, size=10)) + self.assertEquals((1,10), ih._get_start_end(end=10, size=10)) + + +class TestIntelHexLoadBin(TestIntelHexBase): + + def setUp(self): + self.data = '0123456789' + self.f = StringIO(self.data) + + def tearDown(self): + self.f.close() + + def test_loadbin(self): + ih = IntelHex() + ih.loadbin(self.f) + self.assertEqual(0, ih.minaddr()) + self.assertEqual(9, ih.maxaddr()) + self.assertEqual(self.data, ih.tobinstr()) + + def test_bin_fromfile(self): + ih = IntelHex() + ih.fromfile(self.f, format='bin') + self.assertEqual(0, ih.minaddr()) + self.assertEqual(9, ih.maxaddr()) + self.assertEqual(self.data, ih.tobinstr()) + + def test_loadbin_w_offset(self): + ih = IntelHex() + ih.loadbin(self.f, offset=100) + self.assertEqual(100, ih.minaddr()) + self.assertEqual(109, ih.maxaddr()) + self.assertEqual(self.data, ih.tobinstr()) + + def test_loadfile_format_bin(self): + ih = IntelHex() + ih.loadfile(self.f, format='bin') + self.assertEqual(0, ih.minaddr()) + self.assertEqual(9, ih.maxaddr()) + self.assertEqual(self.data, ih.tobinstr()) + + +class TestIntelHexStartingAddressRecords(TestIntelHexBase): + + def _test_read(self, hexstr, data, start_addr): + sio = StringIO(hexstr) + ih = IntelHex(sio) + sio.close() + # test data + self.assertEqual(data, ih._buf, + "Internal buffer: %r != %r" % + (data, ih._buf)) + self.assertEqual(start_addr, ih.start_addr, + "Start address: %r != %r" % + (start_addr, ih.start_addr)) + + def test_read_rectype3(self): + self._test_read(hex_rectype3, data_rectype3, start_addr_rectype3) + + def test_read_rectype5(self): + self._test_read(hex_rectype5, data_rectype5, start_addr_rectype5) + + def _test_write(self, hexstr, data, start_addr, write_start_addr=True): + # prepare + ih = IntelHex(None) + ih._buf = data + ih.start_addr = start_addr + # write + sio = StringIO() + ih.write_hex_file(sio, write_start_addr) + s = sio.getvalue() + sio.close() + # check + self.assertEqualWrittenData(hexstr, s) + + def _test_dont_write(self, hexstr, data, start_addr): + expected = ''.join(hexstr.splitlines(True)[1:]) + self._test_write(expected, data, start_addr, False) + + def test_write_rectype3(self): + self._test_write(hex_rectype3, data_rectype3, start_addr_rectype3) + + def test_dont_write_rectype3(self): + self._test_dont_write(hex_rectype3, data_rectype3, start_addr_rectype3) + + def test_write_rectype5(self): + self._test_write(hex_rectype5, data_rectype5, start_addr_rectype5) + + def test_dont_write_rectype5(self): + self._test_dont_write(hex_rectype5, data_rectype5, start_addr_rectype5) + + def test_write_invalid_start_addr_value(self): + ih = IntelHex() + ih.start_addr = {'foo': 1} + sio = StringIO() + self.assertRaises(InvalidStartAddressValueError, ih.write_hex_file, sio) + + +class TestIntelHex_big_files(TestIntelHexBase): + """Test that data bigger than 64K read/write correctly""" + + def setUp(self): + self.f = StringIO(hex64k) + + def tearDown(self): + self.f.close() + del self.f + + def test_readfile(self): + ih = intelhex.IntelHex(self.f) + for addr, byte in data64k.items(): + readed = ih[addr] + self.assertEquals(byte, readed, + "data not equal at addr %X " + "(%X != %X)" % (addr, byte, readed)) + + def test_write_hex_file(self): + ih = intelhex.IntelHex(self.f) + sio = StringIO() + ih.write_hex_file(sio) + s = sio.getvalue() + sio.close() + self.assertEqualWrittenData(hex64k, s) + + +class TestIntelHexGetPutString(TestIntelHexBase): + + def setUp(self): + self.ih = IntelHex() + for i in xrange(10): + self.ih[i] = i + + def test_gets(self): + self.assertEquals('\x00\x01\x02\x03\x04\x05\x06\x07', self.ih.gets(0, 8)) + self.assertEquals('\x07\x08\x09', self.ih.gets(7, 3)) + self.assertRaisesMsg(intelhex.NotEnoughDataError, + 'Bad access at 0x1: ' + 'not enough data to read 10 contiguous bytes', + self.ih.gets, 1, 10) + + def test_puts(self): + self.ih.puts(0x03, 'hello') + self.assertEquals('\x00\x01\x02hello\x08\x09', self.ih.gets(0, 10)) + + def test_getsz(self): + self.assertEquals('', self.ih.getsz(0)) + self.assertRaisesMsg(intelhex.NotEnoughDataError, + 'Bad access at 0x1: ' + 'not enough data to read zero-terminated string', + self.ih.getsz, 1) + self.ih[4] = 0 + self.assertEquals('\x01\x02\x03', self.ih.getsz(1)) + + def test_putsz(self): + self.ih.putsz(0x03, 'hello') + self.assertEquals('\x00\x01\x02hello\x00\x09', self.ih.gets(0, 10)) + + +class TestIntelHexDump(TestIntelHexBase): + + def test_empty(self): + ih = IntelHex() + sio = StringIO() + ih.dump(sio) + self.assertEquals('', sio.getvalue()) + + def test_simple(self): + ih = IntelHex() + ih[0] = 0x12 + ih[1] = 0x34 + sio = StringIO() + ih.dump(sio) + self.assertEquals( + '0000 12 34 -- -- -- -- -- -- -- -- -- -- -- -- -- -- |.4 |\n', + sio.getvalue()) + ih[16] = 0x56 + ih[30] = 0x98 + sio = StringIO() + ih.dump(sio) + self.assertEquals( + '0000 12 34 -- -- -- -- -- -- -- -- -- -- -- -- -- -- |.4 |\n' + '0010 56 -- -- -- -- -- -- -- -- -- -- -- -- -- 98 -- |V . |\n', + sio.getvalue()) + + def test_minaddr_not_zero(self): + ih = IntelHex() + ih[16] = 0x56 + ih[30] = 0x98 + sio = StringIO() + ih.dump(sio) + self.assertEquals( + '0010 56 -- -- -- -- -- -- -- -- -- -- -- -- -- 98 -- |V . |\n', + sio.getvalue()) + + def test_start_addr(self): + ih = IntelHex() + ih[0] = 0x12 + ih[1] = 0x34 + ih.start_addr = {'CS': 0x1234, 'IP': 0x5678} + sio = StringIO() + ih.dump(sio) + self.assertEquals( + 'CS = 0x1234, IP = 0x5678\n' + '0000 12 34 -- -- -- -- -- -- -- -- -- -- -- -- -- -- |.4 |\n', + sio.getvalue()) + ih.start_addr = {'EIP': 0x12345678} + sio = StringIO() + ih.dump(sio) + self.assertEquals( + 'EIP = 0x12345678\n' + '0000 12 34 -- -- -- -- -- -- -- -- -- -- -- -- -- -- |.4 |\n', + sio.getvalue()) + + +class TestIntelHexMerge(TestIntelHexBase): + + def test_merge_empty(self): + ih1 = IntelHex() + ih2 = IntelHex() + ih1.merge(ih2) + self.assertEquals({}, ih1.todict()) + + def test_merge_simple(self): + ih1 = IntelHex({0:1, 1:2, 2:3}) + ih2 = IntelHex({3:4, 4:5, 5:6}) + ih1.merge(ih2) + self.assertEquals({0:1, 1:2, 2:3, 3:4, 4:5, 5:6}, ih1.todict()) + + def test_merge_wrong_args(self): + ih1 = IntelHex() + self.assertRaisesMsg(TypeError, 'other should be IntelHex object', + ih1.merge, {0:1}) + self.assertRaisesMsg(ValueError, "Can't merge itself", + ih1.merge, ih1) + ih2 = IntelHex() + self.assertRaisesMsg(ValueError, "overlap argument should be either " + "'error', 'ignore' or 'replace'", + ih1.merge, ih2, overlap='spam') + + def test_merge_overlap(self): + # error + ih1 = IntelHex({0:1}) + ih2 = IntelHex({0:2}) + self.assertRaisesMsg(intelhex.AddressOverlapError, + 'Data overlapped at address 0x0', + ih1.merge, ih2, overlap='error') + # ignore + ih1 = IntelHex({0:1}) + ih2 = IntelHex({0:2}) + ih1.merge(ih2, overlap='ignore') + self.assertEquals({0:1}, ih1.todict()) + # replace + ih1 = IntelHex({0:1}) + ih2 = IntelHex({0:2}) + ih1.merge(ih2, overlap='replace') + self.assertEquals({0:2}, ih1.todict()) + + def test_merge_start_addr(self): + # this, None + ih1 = IntelHex({'start_addr': {'EIP': 0x12345678}}) + ih2 = IntelHex() + ih1.merge(ih2) + self.assertEquals({'start_addr': {'EIP': 0x12345678}}, ih1.todict()) + # None, other + ih1 = IntelHex() + ih2 = IntelHex({'start_addr': {'EIP': 0x12345678}}) + ih1.merge(ih2) + self.assertEquals({'start_addr': {'EIP': 0x12345678}}, ih1.todict()) + # this == other: no conflict + ih1 = IntelHex({'start_addr': {'EIP': 0x12345678}}) + ih2 = IntelHex({'start_addr': {'EIP': 0x12345678}}) + ih1.merge(ih2) + self.assertEquals({'start_addr': {'EIP': 0x12345678}}, ih1.todict()) + # this != other: conflict + ## overlap=error + ih1 = IntelHex({'start_addr': {'EIP': 0x12345678}}) + ih2 = IntelHex({'start_addr': {'EIP': 0x87654321}}) + self.assertRaisesMsg(AddressOverlapError, + 'Starting addresses are different', + ih1.merge, ih2, overlap='error') + ## overlap=ignore + ih1 = IntelHex({'start_addr': {'EIP': 0x12345678}}) + ih2 = IntelHex({'start_addr': {'EIP': 0x87654321}}) + ih1.merge(ih2, overlap='ignore') + self.assertEquals({'start_addr': {'EIP': 0x12345678}}, ih1.todict()) + ## overlap=replace + ih1 = IntelHex({'start_addr': {'EIP': 0x12345678}}) + ih2 = IntelHex({'start_addr': {'EIP': 0x87654321}}) + ih1.merge(ih2, overlap='replace') + self.assertEquals({'start_addr': {'EIP': 0x87654321}}, ih1.todict()) + + +class TestIntelHex16bit(TestIntelHexBase): + + def setUp(self): + self.f = StringIO(hex16) + + def tearDown(self): + self.f.close() + del self.f + + def test_init_from_file(self): + ih = intelhex.IntelHex16bit(self.f) + + def test_init_from_ih(self): + ih = intelhex.IntelHex(self.f) + ih16 = intelhex.IntelHex16bit(ih) + + def test_default_padding(self): + ih16 = intelhex.IntelHex16bit() + self.assertEqual(0x0FFFF, ih16.padding) + self.assertEqual(0x0FFFF, ih16[0]) + + def test_minaddr(self): + ih = intelhex.IntelHex16bit(self.f) + addr = ih.minaddr() + self.assertEqual(0, addr, + 'Error in detection of minaddr (0 != 0x%x)' % addr) + + def test_maxaddr(self): + ih = intelhex.IntelHex16bit(self.f) + addr = ih.maxaddr() + self.assertEqual(0x001D, addr, + 'Error in detection of maxaddr ' + '(0x001D != 0x%x)' % addr) + + def test_getitem(self): + ih = intelhex.IntelHex16bit(self.f) + ih.padding = 0x3FFF + for addr, word in enumerate(bin16): + self.assertEqual(word, ih[addr], + 'Data mismatch at address ' + '0x%x (0x%x != 0x%x)' % (addr, word, ih[addr])) + + def test_not_enough_data(self): + ih = intelhex.IntelHex() + ih[0] = 1 + ih16 = intelhex.IntelHex16bit(ih) + self.assertRaisesMsg(BadAccess16bit, + 'Bad access at 0x0: ' + 'not enough data to read 16 bit value', + lambda x: ih16[x], + 0) + + def test_write_hex_file(self): + ih = intelhex.IntelHex16bit(self.f) + sio = StringIO() + ih.write_hex_file(sio) + s = sio.getvalue() + sio.close() + + fin = StringIO(s) + ih2 = intelhex.IntelHex16bit(fin) + + self.assertEqual(ih.tobinstr(), ih2.tobinstr(), + "Written hex file does not equal with original") + + def test_bug_988148(self): + # see https://bugs.launchpad.net/intelhex/+bug/988148 + ih = intelhex.IntelHex16bit(intelhex.IntelHex()) + ih[0] = 25 + sio = StringIO() + ih.write_hex_file(sio) + + def test_setitem(self): + ih = intelhex.IntelHex16bit(self.f) + + old = ih[0] + ih[0] = old ^ 0xFFFF + + self.assertNotEqual(old, ih[0], + "Setting new value to internal buffer failed") + + def test_tobinarray(self): + ih = intelhex.IntelHex16bit() + ih[0] = 0x1234 + ih[1] = 0x5678 + self.assertEqual(array.array('H', [0x1234,0x5678,0xFFFF]), + ih.tobinarray(start=0, end=2)) + # change padding + ih.padding = 0x3FFF + self.assertEqual(array.array('H', [0x1234,0x5678,0x3FFF]), + ih.tobinarray(start=0, end=2)) +#/class TestIntelHex16bit + + +class TestIntelHexErrors(TestIntelHexBase): + """Tests for custom errors classes""" + + def assertEqualExc(self, message, exception): + return self.assertEqual(message, str(exception)) + + def test_IntelHexError(self): + self.assertEqualExc('IntelHex base error', IntelHexError()) + + def test_IntelHexError_message(self): + self.assertEqualExc('IntelHex custom error message', + IntelHexError(msg='IntelHex custom error message')) + self.assertEqualExc('IntelHex base error', IntelHexError(msg='')) + + def test_HexReaderError(self): + self.assertEqualExc('Hex reader base error', HexReaderError()) + + def test_HexRecordError(self): + self.assertEqualExc('Hex file contains invalid record at line 1', + HexRecordError(line=1)) + + def test_RecordLengthError(self): + self.assertEqualExc('Record at line 1 has invalid length', + RecordLengthError(line=1)) + + def test_RecordTypeError(self): + self.assertEqualExc('Record at line 1 has invalid record type', + RecordTypeError(line=1)) + + def test_RecordChecksumError(self): + self.assertEqualExc('Record at line 1 has invalid checksum', + RecordChecksumError(line=1)) + + def test_EOFRecordError(self): + self.assertEqualExc('File has invalid End-of-File record', + EOFRecordError()) + + def test_ExtendedSegmentAddressRecordError(self): + self.assertEqualExc( + 'Invalid Extended Segment Address Record at line 1', + ExtendedSegmentAddressRecordError(line=1)) + + def test_ExtendedLinearAddressRecordError(self): + self.assertEqualExc('Invalid Extended Linear Address Record at line 1', + ExtendedLinearAddressRecordError(line=1)) + + def test_StartSegmentAddressRecordError(self): + self.assertEqualExc('Invalid Start Segment Address Record at line 1', + StartSegmentAddressRecordError(line=1)) + + def test_StartLinearAddressRecordError(self): + self.assertEqualExc('Invalid Start Linear Address Record at line 1', + StartLinearAddressRecordError(line=1)) + + def test_DuplicateStartAddressRecord(self): + self.assertEqualExc('Start Address Record appears twice at line 1', + DuplicateStartAddressRecordError(line=1)) + + def test_InvalidStartAddressValue(self): + self.assertEqualExc("Invalid start address value: {'foo': 1}", + InvalidStartAddressValueError(start_addr={'foo': 1})) + + def test_AddressOverlapError(self): + self.assertEqualExc('Hex file has data overlap at address 0x1234 ' + 'on line 1', + AddressOverlapError(address=0x1234, line=1)) + + def test_NotEnoughDataError(self): + self.assertEqualExc('Bad access at 0x1234: ' + 'not enough data to read 10 contiguous bytes', + intelhex.NotEnoughDataError(address=0x1234, length=10)) + + def test_BadAccess16bit(self): + self.assertEqualExc('Bad access at 0x1234: ' + 'not enough data to read 16 bit value', + BadAccess16bit(address=0x1234)) +#/class TestIntelHexErrors + + +class TestDecodeHexRecords(TestIntelHexBase): + """Testing that decoding of records is correct + and all errors raised when needed + """ + + def setUp(self): + self.ih = IntelHex() + self.decode_record = self.ih._decode_record + + def tearDown(self): + del self.ih + + def test_empty_line(self): + # do we could to accept empty lines in hex files? + # standard don't say anything about this + self.decode_record('') + + def test_non_empty_line(self): + self.assertRaisesMsg(HexRecordError, + 'Hex file contains invalid record at line 1', + self.decode_record, + ' ', + 1) + + def test_short_record(self): + # if record too short it's not a hex record + self.assertRaisesMsg(HexRecordError, + 'Hex file contains invalid record at line 1', + self.decode_record, + ':', + 1) + + def test_odd_hexascii_digits(self): + self.assertRaisesMsg(HexRecordError, + 'Hex file contains invalid record at line 1', + self.decode_record, + ':0100000100F', + 1) + + def test_invalid_length(self): + self.assertRaisesMsg(RecordLengthError, + 'Record at line 1 has invalid length', + self.decode_record, + ':FF00000100', + 1) + + def test_invalid_record_type(self): + self.assertRaisesMsg(RecordTypeError, + 'Record at line 1 has invalid record type', + self.decode_record, + ':000000FF01', + 1) + + def test_invalid_checksum(self): + self.assertRaisesMsg(RecordChecksumError, + 'Record at line 1 has invalid checksum', + self.decode_record, + ':0000000100', + 1) + + def test_invalid_eof(self): + self.assertRaisesMsg(EOFRecordError, + 'File has invalid End-of-File record', + self.decode_record, + ':0100000100FE', + 1) + + def test_invalid_extended_segment(self): + # length + self.assertRaisesMsg(ExtendedSegmentAddressRecordError, + 'Invalid Extended Segment Address Record at line 1', + self.decode_record, + ':00000002FE', + 1) + # addr field + self.assertRaisesMsg(ExtendedSegmentAddressRecordError, + 'Invalid Extended Segment Address Record at line 1', + self.decode_record, + ':020001020000FB', + 1) + + def test_invalid_linear_address(self): + # length + self.assertRaisesMsg(ExtendedLinearAddressRecordError, + 'Invalid Extended Linear Address Record ' + 'at line 1', + self.decode_record, + ':00000004FC', + 1) + # addr field + self.assertRaisesMsg(ExtendedLinearAddressRecordError, + 'Invalid Extended Linear Address Record ' + 'at line 1', + self.decode_record, + ':020001040000F9', + 1) + + def test_invalid_start_segment_addr(self): + # length + self.assertRaisesMsg(StartSegmentAddressRecordError, + 'Invalid Start Segment Address Record at line 1', + self.decode_record, + ':00000003FD', + 1) + # addr field + self.assertRaisesMsg(StartSegmentAddressRecordError, + 'Invalid Start Segment Address Record at line 1', + self.decode_record, + ':0400010300000000F8', + 1) + + def test_duplicate_start_segment_addr(self): + self.decode_record(':0400000312345678E5') + self.assertRaisesMsg(DuplicateStartAddressRecordError, + 'Start Address Record appears twice at line 2', + self.decode_record, + ':0400000300000000F9', + 2) + + def test_invalid_start_linear_addr(self): + # length + self.assertRaisesMsg(StartLinearAddressRecordError, + 'Invalid Start Linear Address Record at line 1', + self.decode_record, + ':00000005FB', + 1) + # addr field + self.assertRaisesMsg(StartLinearAddressRecordError, + 'Invalid Start Linear Address Record at line 1', + self.decode_record, + ':0400010500000000F6', + 1) + + def test_duplicate_start_linear_addr(self): + self.decode_record(':0400000512345678E3') + self.assertRaisesMsg(DuplicateStartAddressRecordError, + 'Start Address Record appears twice at line 2', + self.decode_record, + ':0400000500000000F7', + 2) + + def test_addr_overlap(self): + self.decode_record(':0100000000FF') + self.assertRaisesMsg(AddressOverlapError, + 'Hex file has data overlap at address 0x0 ' + 'on line 1', + self.decode_record, + ':0100000000FF', + 1) + + def test_data_record(self): + # should be no exceptions + self.decode_record(':0100000000FF\n') + self.decode_record(':03000100000102F9\r\n') + self.decode_record(':1004E300CFF0FBE2FDF220FF20F2E120E2FBE6F396') + + def test_eof(self): + # EOF should raise special exception + self.assertRaises(_EndOfFile, self.decode_record, ':00000001FF') + +#/class TestDecodeHexRecords + + +class TestHex2Bin(unittest.TestCase): + + def setUp(self): + self.fin = StringIO(hex8) + self.fout = StringIO() + + def tearDown(self): + self.fin.close() + self.fout.close() + + def test_hex2bin(self): + ih = hex2bin(self.fin, self.fout) + data = array.array('B', asbytes(self.fout.getvalue())) + for addr in xrange(len(bin8)): + expected = bin8[addr] + actual = data[addr] + self.assertEqual(expected, actual, + "Data different at address " + "%x (%x != %x)" % (addr, expected, actual)) + + +class TestDiffDumps(unittest.TestCase): + + def test_simple(self): + ih1 = IntelHex({1:0x30, 20:0x31, 40:0x33}) + ih2 = IntelHex({1:0x30, 20:0x32, 40:0x33}) + sio = StringIO() + intelhex.diff_dumps(ih1, ih2, sio) + result = sio.getvalue() + extra = ' ' + if sys.version_info[0] >= 3 or sys.version >= '2.7': + extra = '' + shouldbe = ( + "--- a%(extra)s\n" + "+++ b%(extra)s\n" + "@@ -1,3 +1,3 @@\n" + " 0000 -- 30 -- -- -- -- -- -- -- -- -- -- -- -- -- -- | 0 |\n" + "-0010 -- -- -- -- 31 -- -- -- -- -- -- -- -- -- -- -- | 1 |\n" + "+0010 -- -- -- -- 32 -- -- -- -- -- -- -- -- -- -- -- | 2 |\n" + " 0020 -- -- -- -- -- -- -- -- 33 -- -- -- -- -- -- -- | 3 |\n" + ) % dict(extra=extra) + self.assertEquals(shouldbe, result) + + +class TestBuildRecords(TestIntelHexBase): + + def test__from_bytes(self): + self.assertEqual(':00000001FF', + intelhex.Record._from_bytes([0,0,0,1])) + + def test_data(self): + self.assertEqual(':011234005663', intelhex.Record.data(0x1234, [0x56])) + self.assertEqual(':0312340056789059', + intelhex.Record.data(0x1234, [0x56, 0x78, 0x90])) + + def test_eof(self): + self.assertEqual(':00000001FF', intelhex.Record.eof()) + + def test_extended_segment_address(self): + self.assertEqual(':020000021234B6', + intelhex.Record.extended_segment_address(0x1234)) + + def test_start_segment_address(self): + self.assertEqual(':0400000312345678E5', + intelhex.Record.start_segment_address(0x1234, 0x5678)) + + def test_extended_linear_address(self): + self.assertEqual(':020000041234B4', + intelhex.Record.extended_linear_address(0x1234)) + + def test_start_linear_address(self): + self.assertEqual(':0400000512345678E3', + intelhex.Record.start_linear_address(0x12345678)) + + +class Test_GetFileAndAddrRange(TestIntelHexBase): + + def test_simple(self): + self.assertEqual(('filename.hex', None, None), + intelhex._get_file_and_addr_range('filename.hex')) + self.assertEqual(('f', None, None), + intelhex._get_file_and_addr_range('f')) + self.assertEqual(('filename.hex', 1, None), + intelhex._get_file_and_addr_range('filename.hex:1:')) + self.assertEqual(('filename.hex', None, 10), + intelhex._get_file_and_addr_range('filename.hex::A')) + self.assertEqual(('filename.hex', 1, 10), + intelhex._get_file_and_addr_range('filename.hex:1:A')) + self.assertEqual(('filename.hex', 1, 10), + intelhex._get_file_and_addr_range('filename.hex:0001:000A')) + + def test_bad_notation(self): + self.assertRaises(intelhex._BadFileNotation, + intelhex._get_file_and_addr_range, 'filename.hex:') + self.assertRaises(intelhex._BadFileNotation, + intelhex._get_file_and_addr_range, 'filename.hex:::') + self.assertRaises(intelhex._BadFileNotation, + intelhex._get_file_and_addr_range, 'C:\\filename.hex:', True) + + def test_drive_letter(self): + self.assertEqual(('C:\\filename.hex', None, None), + intelhex._get_file_and_addr_range('C:\\filename.hex', True)) + self.assertEqual(('C:\\filename.hex', 1, None), + intelhex._get_file_and_addr_range('C:\\filename.hex:1:', True)) + self.assertEqual(('C:\\filename.hex', None, 10), + intelhex._get_file_and_addr_range('C:\\filename.hex::A', True)) + self.assertEqual(('C:\\filename.hex', 1, 10), + intelhex._get_file_and_addr_range('C:\\filename.hex:1:A', True)) + self.assertEqual(('C:\\filename.hex', 1, 10), + intelhex._get_file_and_addr_range('C:\\filename.hex:0001:000A', True)) + + +## +# MAIN +if __name__ == '__main__': + unittest.main() diff --git a/libcodec2-android/src/codec2/stm32/unittest/README_unittest.md b/libcodec2-android/src/codec2/stm32/unittest/README_unittest.md new file mode 100644 index 0000000..3196338 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/unittest/README_unittest.md @@ -0,0 +1,263 @@ +# README Codec2 STM32 Unit Test +Don Reid 2018/2019 + +This is the unittest system for the stm32 implementation of +codec2/FreeDV which runs on Linux systems. It requires a STM32F4xx +processor development board connected to/having a ST-LINK, e.g. a +STM32F4 Discovery board. + +## Quickstart + +Requirements: +* python3/numpy +* arm-none-eabi-gdb install and in your path (see codec2/stm32/README.md) +* STM32F4xx_DSP_StdPeriph_Lib_V1.8.0 (see codec2/stm32/README.md) +* build openocd from source and have it in your path (see below) + +Build codec2 for x86 Linux and run the ctests. This generates several artifacts required for the stm32 tests: + +``` +$ cd ~/codec2 +$ mkdir build_linux && cd build_linux && cmake .. && make && ctest +``` + +Now build for the stm32, and run the stm32 ctests: +``` +$ cd ~/codec2/stm32 && mkdir build_stm32 && cd build_stm32 +$ cmake -DCMAKE_TOOLCHAIN_FILE=../cmake/STM32_Toolchain.cmake -DPERIPHLIBDIR=~/Downloads/STM32F4xx_DSP_StdPeriph_Lib_V1.8.0 .. +$ make +$ ctest -V +``` + +You should see tests executing (and passing). They are slow to execute +(30 to 180 seconds each), due to the speed of the semihosting system. + +## If a Test fails + +Explore the files in ```codec2/stm32/unittest/test_run/name_of_test``` + +When each test runs, a directory is created, and several log files generated. + +## Running the stm32 Unit Tests + +1. Tests can be run using the ctest utility (part of cmake) + ``` + $ cd ~/codec2/stm32/build_stm32 + $ ctest + ``` + You can pass -V to see more output: + ``` + $ ctest -V + ``` + You can pass -R to run test matching . Please note, + that some test have dependencies and will have to run other tests before + being executed + ``` + $ ctest -R ofdm + ``` + To list the available ctests: + ``` + $ ctest -N + ``` +1. To run a single test. This test exercises the entire 700D receive side, + and measures CPU load and memory: + ``` + $ cd ~/codec2/stm32/unittest + $ ./scripts/run_stm32_tst tst_ofdm_api_demod 700D_AWGN_codec + ``` + In general: + ``` + $ ./scripts/run_stm32_test + ``` + +1. To run a test set (example): + ``` + $ cd ~/codec2/stm32/unittest + $ ./scripts/run_all_ldpc_tests + ``` + In general: (codec2, ofdm, ldpc): + ``` + $ ./scripts/run_all__tests + ``` + +## When tests fail + +1. If a test fails, explore the files in the ```test_run``` directory for that test. +1. Try building with ALLOC_DEBUG can be helpful with heap issues: + ``` + $ CFLAGS=-DEBUG_ALLOC cmake -DCMAKE_TOOLCHAIN_FILE=../cmake/STM32_Toolchain.cmake \ + -DPERIPHLIBDIR=~/Downloads/STM32F4xx_DSP_StdPeriph_Lib_V1.8.0 .. + ``` + +## Sequence of a Test + +Consider the example: +``` +build_stm32$ ctest -R tst_ldpc_dec_noise +``` + +1. The test is kicked off based on `src/CMakeLists.txt`, which calls `scipts/run_stm32_tst` +1. `run_stm32_tst` calls the test setup script, e.g. `tst_ldpc_dec_setup`. Typically, this will run a host version to generate a reference. +1. `run_stm32_tst` runs the stm32 executable on the Discovery, e.g. `tst_ldpc_dec`, the source is in `src/tst_ldpc_dec.c` +1. The steup and check scripts can handle many sub cases, e.g. `ideal` and `noise`. +1. `run_stm32_tst` calls the test check script, e.g. `tst_ldpc_dec_check` which typically compares the host generated reference to the output from the stm32. +1. As the test runs, various files are generated in `test_run/tst_ldpc_dec_noise` +1. When debugging it's useful to run the ctest with the verbose option: + ``` + $ ctest -V -R tst_ldpc_dec_noise + ``` + Set the `-x` at the top of the scripts to trace execution: + ``` + #!/bin/bash -x + # + # tst_ldpc_enc_check + + ``` + +## Directory Structure + + | Path | Description | + | --- | --- | + | `scripts` | Scripts for unittest system + | `src` | stm32 C sources + | `\src\CMakeLists.txt` | ctests are defined here + | `lib/python`| Python library files + | `lib/octave`| Octave library files + | `test_run` | Files created by each test as it runs + + +## Running the tests remotely + +If the stm32 hardware is connected on a different pc with linux, the tests can be run remotely. +Test will run slower, roughly 3 times. + +1. You have to build OpenOCD on the remote machine with the STM32 board. It must be built from + (https://github.com/db4ple/openocd.git). +1. You don't need OpenOCD installed on your build pc. +1. You have to be able to run ssh with public key authentication using ssh-agent so that + you can ssh into the remote machine without entering a password. +1. You have to call ctest with the proper UT_SSH_PARAMS settings, e.g. +``` +UT_SSH_PARAMS="-p 22 -q remoteuser@remotemachine" ctest -V +``` + +## Debug and Semihosting + +These tests required a connection from the arm-none-eabi-gdb debugger +to the stm32 hardware. For this we use a recent version of +OpenOCD. Running tests with the stm32 hardware connected to a remote +machine via ssh is possible. This works only with a patched (fixed) +OpenOCD, see below. + +## OpenOCD + +We recommend OpenOCD instead of stlink. + +Most linux distributions use old packages for openocd, so you should +build it from the git source. If your test runs fail with error +messages regarding SYS_FLEN not support (see openocd_stderr.log in the +test_run directories), your openocd is too old. Make sure to have the +right openocd first in the PATH if you have multiple openocd +installed! + +It is strongly recommended to build OpenOCD from sources, see below. + +## Building OpenOCD + +OpenOCD needs to be built from the source. + +If you want to use openocd remotely via SSH, you have to use currently the patched +source from (https://github.com/db4ple/openocd.git) instead of the official repository. + +1. + The executable is placed in /usr/local/bin ! Make sure to have no + other openocd installed (check output of `which openocd` to be + /usr/local/bin) + + ```Bash + git clone https://git.code.sf.net/p/openocd/code openocd-code + cd openocd-code + ./bootstrap + ./configure + sudo make install + which openocd + ``` + +2. Plug in a stm32 development board and test: + +``` + $ openocd -f board/stm32f4discovery.cfg + + Open On-Chip Debugger 0.10.0+dev-00796-ga4ac5615 (2019-04-12-21:58) + Licensed under GNU GPL v2 + For bug reports, read + http://openocd.org/doc/doxygen/bugs.html + Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD + adapter speed: 2000 kHz + adapter_nsrst_delay: 100 + none separate + srst_only separate srst_nogate srst_open_drain connect_deassert_srst + Info : Listening on port 6666 for tcl connections + Info : Listening on port 4444 for telnet connections + Info : clock speed 2000 kHz + Info : STLINK V2J33S0 (API v2) VID:PID 0483:3748 + Info : Target voltage: 2.871855 + Info : stm32f4x.cpu: hardware has 6 breakpoints, 4 watchpoints + Info : Listening on port 3333 for gdb connections +``` + +## st-util (deprecated) + +Most distributions don't have stutil included. Easiest way is to build it from +the github sources. + +The source can be downloaded from: + + (https://github.com/texane/stlink) + +After compiling it can be installed anywhere, as long as it is in the PATH. The program is in +`build/Release/src/gdbserver/st-util`. + +The newlib stdio functions (open, fread, fwrite, flush, fclose, etc.) send +some requests that this tool does not recognize and those messages will appear +in the output of st-util. They can be ignored. + +1. Build from github + +```Bash + git clone https://github.com/texane/stlink + cd stlink + make + sudo cp ./etc/udev/rules.d/49-stlinkv2.rules /etc/udev/rules.d/ + sudo udevadm control --reload-rules +``` +3. Add the st-util util to your $PATH, if not installed in the default location ( /usr/local/bin ) + +4. Plug in a stm32 development board and test: + +``` + $ st-util + + st-util 1.4.0-47-gae717b9 + 2018-12-29T06:52:16 INFO usb.c: -- exit_dfu_mode + 2018-12-29T06:52:16 INFO common.c: Loading device parameters.... + 2018-12-29T06:52:16 INFO common.c: Device connected is: F4 device, id 0x10016413 + 2018-12-29T06:52:16 INFO common.c: SRAM size: 0x30000 bytes (192 KiB), Flash: 0x100000 bytes (1024 KiB) in pages of 16384 bytes + 2018-12-29T06:52:16 INFO gdb-server.c: Chip ID is 00000413, Core ID is 2ba01477.G + 2018-12-29T06:52:16 INFO gdb-server.c: Listening at *:4242... +``` + +## Install numpy for Python3 +Some test are in fact python3 scripts and require the numpy package to be installed, +otherwise some tests will fail. + +On Ubuntu: + ```Bash + sudo apt-get install python3-numpy + ``` + + + + + +# vi:set ts=3 et sts=3: diff --git a/libcodec2-android/src/codec2/stm32/unittest/lib/octave/ofdm_demod_check.m b/libcodec2-android/src/codec2/stm32/unittest/lib/octave/ofdm_demod_check.m new file mode 100644 index 0000000..04a15f7 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/unittest/lib/octave/ofdm_demod_check.m @@ -0,0 +1,62 @@ +% ofdm_demod_check.m +% +% Load results from reference and stm32 run and compare + +addpath("../../lib/octave") + +% Constants (would prefer paramters) +err_limit = 0.001; + +% Reference +load("ofdm_demod_ref_log.txt"); + +% DUT +load("ofdm_demod_log.txt"); + +% Eliminate trailing rows of all zeros (unused) +sums_ref = sum(payload_syms_log_c, 2); +last_ref = find(sums_ref, 1, 'last'); +sums_dut = sum(payload_syms_log_stm32, 2); +last_dut = find(sums_dut, 1, 'last'); +last_all = max(last_ref, last_dut); + +syms_ref = payload_syms_log_c(1:last_all,:); +syms_dut = payload_syms_log_stm32(1:last_all,:); + +% error values +err = abs(syms_ref - syms_dut); +err_max = max(max(err)); +printf("MAX_ERR %f\n", err_max); + +err_vals = err - err_limit; +err_vals(err_vals<0) = 0; +errors = err_vals > 0; +num_errors = nnz(errors); + +%% TODO, print errors info (count locations,...) +if (num_errors > 0) + printf("%d ERRORS\n", num_errors); +else + printf("PASSED\n"); +end + +% EVM +evm = sqrt(meansq(err, 2)); +evm_avg = mean(evm); +printf("AVG_EVM %f\n", evm_avg); +evm_max = max(evm); +printf("MAX_EVM %f\n", evm_max); + +% Standard deviation +sdv = std(err, 0, 2); +sdv_max = max(sdv); +printf("MAX_SDV %f\n", sdv_max); + +% Plot +figure(1) +figure(1, "visible", true) +scatter(real(syms_ref), imag(syms_ref), "g", "+") +hold on +scatter(real(syms_dut), imag(syms_dut), "b", "o") +print(1, "syms_plot.png", "-dpng") +hold off diff --git a/libcodec2-android/src/codec2/stm32/unittest/lib/python/sum_profiles.py b/libcodec2-android/src/codec2/stm32/unittest/lib/python/sum_profiles.py new file mode 100755 index 0000000..19eea13 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/unittest/lib/python/sum_profiles.py @@ -0,0 +1,51 @@ +#!/usr/bin/env python3 +""" sum_profiles """ + +def sum_profiles(fin, frames): + data = {} + total_time = 0.0 + active = False + + for line in fin: + if (not active): active = line.startswith("Start Profile Data") + elif line.startswith("End Profile Data"): active = False + else: + words = line.strip().split() + if (len(words) == 3): + part = words[0] + time_str = words[1] + time = float(time_str) + total_time += time + if (not part in data): data[part] = 0.0 + data[part] += time + # end else + # end for line + + data_sorted = [(p, data[p]) for p in sorted(data, key=data.get, reverse=True)] + + print("Total time = {:.1f} ms".format(total_time)) + if (frames): + print("{:.1f} ms per frame".format(total_time / frames)) + print("") + + for part, time in data_sorted: + percent = int(100*(time / total_time)) + print('{:2d}% - {:10.3f} - {}'.format(percent, time, part)) + + return(data) + # end sum_profiles() + + +######################################## +if __name__ == "__main__": + import argparse + + #### Options + argparser = argparse.ArgumentParser() + argparser.add_argument("-f", "--frames", action="store", type=int, default=0, + help="Number of frames") + argparser.add_argument("file", metavar="FILE", help="file to read") + args = argparser.parse_args() + + fin = open(args.file, "r") + sum_profiles(fin, args.frames) diff --git a/libcodec2-android/src/codec2/stm32/unittest/lib/ut_travis.enc b/libcodec2-android/src/codec2/stm32/unittest/lib/ut_travis.enc new file mode 100644 index 0000000..e950ac0 Binary files /dev/null and b/libcodec2-android/src/codec2/stm32/unittest/lib/ut_travis.enc differ diff --git a/libcodec2-android/src/codec2/stm32/unittest/scripts/check_ram_limit b/libcodec2-android/src/codec2/stm32/unittest/scripts/check_ram_limit new file mode 100755 index 0000000..874f46f --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/unittest/scripts/check_ram_limit @@ -0,0 +1,25 @@ +#!/bin/bash +# +# Compare the amount of RAM used in all stm32 programs to a +# threshold. The idea is trap changes to x86 code that will +# cause out of memory issues on the stm32 +# +# This can be run from the command line or via a ctest, it doesn't +# require stm32 hardware. +# +# usage: +# cd ~/codec2/stm32/build_stm32 +# ./check_ram_limit [threshold] + +echo "Checking end of used RAM in all stm32 programs......." +thresh=0x20006000 +[[ $# -gt 0 ]] && thresh=$1 +map_files=`find . -name '*.map'` +for f in $map_files +do + ram_used=`cat $f | grep bss_end | sed 's/^.*\(0x[a-f0-9]*\).*/\1/'` + printf "%-40s 0x%x\n" $f $ram_used + [[ $ram_used -gt $thresh ]] && echo -e "\n ***** FAIL - LIMIT is $thresh !!! *****\n" && exit 1 +done +echo "PASS" +exit 0 diff --git a/libcodec2-android/src/codec2/stm32/unittest/scripts/kill_run_stm32_tst b/libcodec2-android/src/codec2/stm32/unittest/scripts/kill_run_stm32_tst new file mode 100755 index 0000000..ddccd90 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/unittest/scripts/kill_run_stm32_tst @@ -0,0 +1,15 @@ +#!/bin/bash + +list_descendants () +{ + local children=$(ps -o pid= --ppid "$1") + + for pid in $children + do + list_descendants "$pid" + done + + echo $children +} + +kill $(list_descendants $(pidof -x run_stm32_tst)) diff --git a/libcodec2-android/src/codec2/stm32/unittest/scripts/plot_ofdm_demod_syms b/libcodec2-android/src/codec2/stm32/unittest/scripts/plot_ofdm_demod_syms new file mode 100755 index 0000000..28eb063 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/unittest/scripts/plot_ofdm_demod_syms @@ -0,0 +1,54 @@ +#!/usr/bin/env python3 +""" plot_ofdm_demod_syms + + Plot QPSK constelations of reference demods. + + Later read stm32 log...... + + """ + +import numpy as np +import os +import sys + + +############################################################################## +# Read Octave text file +############################################################################## + +def read_octave_text(fname): + data = {} + with open(fname, "r") as f: + for line in f: + if (line[0:8] == '# name: '): + var = line.split()[2] + print('found {}'.format(var)) + line = next(f) + if (line.startswith('# type: matrix')): + line = next(f) + rows = int(line.split()[2]) + line = next(f) + cols = int(line.split()[2]) + print(' matrix({}, {})'.format(rows, cols)) + data[var] = np.empty((rows, cols), np.float32) + # Read rows one at a time + for row in range(rows): + line = next(f) + data[var][row] = np.fromstring(line, np.float32, cols, ' ') + + # end while True + # end with + return(data) + + +############################################################################## +# Main +############################################################################## + +### Text not supported!!! ref_data = sio.loadmat('ofdm_demod_ref_log.mat') + +ref_data = read_octave_text('ofdm_demod_ref_log.txt') + +import pprint +pp = pprint.PrettyPrinter(indent=4) +pp.pprint(ref_data) diff --git a/libcodec2-android/src/codec2/stm32/unittest/scripts/run_all_codec2_tests b/libcodec2-android/src/codec2/stm32/unittest/scripts/run_all_codec2_tests new file mode 100755 index 0000000..91cf068 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/unittest/scripts/run_all_codec2_tests @@ -0,0 +1,27 @@ +#!/bin/bash +# +# run_all_codec2_tests + +# Find the scripts directory +SCRIPTS="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )" + +# Setup common variables +source $SCRIPTS/run_tests_common.sh + +declare -i Fails=0 + +run_stm32_tst tst_codec2_enc 1300 "$@" || Fails+=1 +run_stm32_tst tst_codec2_enc 700C "$@" || Fails+=1 + +run_stm32_tst tst_codec2_dec 1300 "$@" || Fails+=1 +run_stm32_tst tst_codec2_dec 700C "$@" || Fails+=1 + +if (( $Fails == 0 )); then + echo -e "\nAll Codec2 Tests PASSED" +else + echo -e "\n$Fails Codec2 Tests FAILED!" +fi + +exit $Fails + +# vi:set ts=4 et sts=4: diff --git a/libcodec2-android/src/codec2/stm32/unittest/scripts/run_all_ldpc_tests b/libcodec2-android/src/codec2/stm32/unittest/scripts/run_all_ldpc_tests new file mode 100755 index 0000000..98d06a2 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/unittest/scripts/run_all_ldpc_tests @@ -0,0 +1,26 @@ +#!/bin/bash +# +# run_all_ldpc_tests + +# Find the scripts directory +SCRIPTS="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )" + +# Setup common variables +source $SCRIPTS/run_tests_common.sh + +declare -i Fails=0 + +run_stm32_tst tst_ldpc_enc "$@" || Fails+=1 + +run_stm32_tst tst_ldpc_dec ideal "$@" || Fails+=1 +run_stm32_tst tst_ldpc_dec noise "$@" || Fails+=1 + +if (( $Fails == 0 )); then + echo -e "\nAll LDPC Tests PASSED" +else + echo -e "\n$Fails LDPC Tests FAILED!" +fi + +exit $Fails + +# vi:set ts=4 et sts=4: diff --git a/libcodec2-android/src/codec2/stm32/unittest/scripts/run_all_ofdm_tests b/libcodec2-android/src/codec2/stm32/unittest/scripts/run_all_ofdm_tests new file mode 100755 index 0000000..3f63558 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/unittest/scripts/run_all_ofdm_tests @@ -0,0 +1,32 @@ +#!/bin/bash +# +# run_all_ofdm_tests + +# Find the scripts directory +SCRIPTS="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )" + +# Setup common variables +source $SCRIPTS/run_tests_common.sh + +declare -i Fails=0 + +run_stm32_tst tst_ofdm_mod plain "$@" || Fails+=1 +run_stm32_tst tst_ofdm_mod ldpc "$@" || Fails+=1 + +run_stm32_tst tst_ofdm_demod quick "$@" || Fails+=1 +run_stm32_tst tst_ofdm_demod ideal "$@" || Fails+=1 +run_stm32_tst tst_ofdm_demod AWGN "$@" || Fails+=1 +run_stm32_tst tst_ofdm_demod fade "$@" || Fails+=1 +run_stm32_tst tst_ofdm_demod ldpc "$@" || Fails+=1 +run_stm32_tst tst_ofdm_demod ldpc_AWGN "$@" || Fails+=1 +run_stm32_tst tst_ofdm_demod ldpc_fade "$@" || Fails+=1 + +if (( $Fails == 0 )); then + echo -e "\nAll ODFM Tests PASSED" +else + echo -e "\n$Fails ODFM Tests FAILED!" +fi + +exit $Fails + +# vi:set ts=4 et sts=4: diff --git a/libcodec2-android/src/codec2/stm32/unittest/scripts/run_all_stm32_tests b/libcodec2-android/src/codec2/stm32/unittest/scripts/run_all_stm32_tests new file mode 100755 index 0000000..6e066be --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/unittest/scripts/run_all_stm32_tests @@ -0,0 +1,25 @@ +#!/bin/bash +# +# run_all_codec2_tests + +# Find the scripts directory +SCRIPTS="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )" + +# Setup common variables +source $SCRIPTS/run_tests_common.sh + +declare -i Fails=0 + +run_all_codec2_tests "$@" || Fails+=1 +run_all_ofdm_tests "$@" || Fails+=1 +run_all_ldpc_tests "$@" || Fails+=1 + +if (( $Fails == 0 )); then + echo -e "\nAll STM32 Tests PASSED" +else + echo -e "\n$Fails STM32 Tests FAILED!" +fi + +exit $Fails + +# vi:set ts=4 et sts=4: diff --git a/libcodec2-android/src/codec2/stm32/unittest/scripts/run_stm32_prog b/libcodec2-android/src/codec2/stm32/unittest/scripts/run_stm32_prog new file mode 100755 index 0000000..652f715 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/unittest/scripts/run_stm32_prog @@ -0,0 +1,91 @@ +#!/bin/bash + +####################################### +# Parse command line options +# Options (starting with "--") are stored in $ARGS. +# Non-options are taken as the test name (last one sticks). + +declare -A ARGS +for arg in "$@"; do + if [[ ${arg} == --* ]] ; then ARGS[${arg}]=true + else ELF=${arg} + fi + done + +# Add the parameters for connecting via ssh to +# your machine with an stm32 connected to +# UT_SSH_PARAMS +# e.g. +# UT_SSH_PARAMS="-p 22 user@host_with_stm32" + +if [ -z "$UT_SSH_PARAMS" ]; then + UT_SSH="" + UT_SLEEP=${UT_SLEEP:=1} + UI_SH_FIO="disable" +else + UT_SSH="ssh -f -L 3333:localhost:3333 $UT_SSH_PARAMS" + UT_SLEEP=${UT_SLEEP:=4} + UT_SH_FIO="enable" +fi + +rm -f gdb_cmds + +if [ ! ${ARGS[--st-util]+_} ] ; then + # OpenOCD + if [ -n "$UT_SSH" ]; then + cat <<-EEOOFF >> gdb_cmds + shell ${UT_SSH} killall -q openocd\; sleep 1\; openocd -d0 -f board/stm32f4discovery.cfg 2> >(tee stderr.log >&2) | tee stdout.log & + EEOOFF + else + cat <<-EEOOFF >> gdb_cmds + shell killall -q openocd + shell openocd -d0 -f board/stm32f4discovery.cfg 2> >(tee stderr.log >&2) | tee stdout.log & + EEOOFF + fi + + cat <<-EEOOFF >> gdb_cmds + shell sleep ${UT_SLEEP} + target remote :3333 + monitor arm semihosting enable + monitor arm semihosting_fileio $UT_SH_FIO + EEOOFF + + SHUTDOWN="monitor shutdown" +else + # ST-Util + echo "---------------------- STARTING gdb/st-util ------------------------------" + cat <<-EEOOFF >> gdb_cmds + shell st-util --verbose=0 --semihosting 2>stutil_stderr.log >stutil_stdout.log & + shell sleep ${UT_SLEEP} + target remote :4242 + EEOOFF + + SHUTDOWN="" +fi + +if [ ! ${ARGS[--noload]+_} ] ; then + cat <<-EEOOFF >> gdb_cmds + load + EEOOFF + fi + +cat <<-EEOOFF >> gdb_cmds + monitor reset halt + monitor adapter speed 4000 + break EndofMain + break abort + EEOOFF + +if [ -z ${ARGS[--debug]+_} ] ; then + cat <<-EEOOFF >> gdb_cmds + shell printf "\n----------------------------STARTING PROGRAM-------------------------\n\n" + continue + set confirm off + $SHUTDOWN + quit + EEOOFF + arm-none-eabi-gdb -batch -x gdb_cmds ${ELF} + else + arm-none-eabi-gdb -x gdb_cmds ${ELF} + fi + diff --git a/libcodec2-android/src/codec2/stm32/unittest/scripts/run_stm32_tst b/libcodec2-android/src/codec2/stm32/unittest/scripts/run_stm32_tst new file mode 100755 index 0000000..9cfeef0 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/unittest/scripts/run_stm32_tst @@ -0,0 +1,53 @@ +#!/bin/bash +# +# run_stm32_tst [--noload] [--st-util] + +# Find the scripts directory +SCRIPTS="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )" + +# Setup common variables +source $SCRIPTS/run_tests_common.sh + +declare -i Fails=0 + +##################################################################### +LOAD=${ARGS[--noload]:+--noload} +STUTIL=${ARGS[--st-util]:+--st-util} +RUN_DIR="${UNITTEST_BASE}/test_run/${FULL_TEST_NAME}" +echo -e "test full name: ${FULL_TEST_NAME}" +setup_common "${RUN_DIR}" + +if [ ! -f "${SCRIPTS}/${TEST}_setup" ]; then + echo -e "\nERROR: scripts/${TEST}_setup not found!" + echo "Test name correct?" + echo "valid test names:" + cd scripts; ls tst*setup | sed 's/_setup//' + exit 1 +fi + +# Call setup - run - check scripts +${TEST}_setup ${TEST} ${TEST_OPT} --clean || { echo "ERROR in ${TEST}_setup! Exiting..."; exit 1; } +cd "${RUN_DIR}" +run_stm32_prog ${UNITTEST_BIN}/${TEST}.elf ${LOAD} ${OPENOCD} | tee gdb.log +[ ! ${PIPESTATUS[0]} -eq 0 ] && { echo "ERROR in run_stm32_prog! Exiting..."; exit 1; } +# stop now if we see an assert() fire, no point running check phase +grep -q assertion gdb.log && exit 1 +${TEST}_check ${TEST} ${TEST_OPT} 2>&1 | tee check.log +if [ ! "${PIPESTATUS[0]}" -eq 0 ]; then + let Fails=($Fails + 1) +fi + +sleep 5 # Delay for st-util to close + +if (( $Fails == 0 )); then + echo -e "\nTest ${FULL_TEST_NAME} PASSED" +else + echo -e "\nTest ${FULL_TEST_NAME} FAILED!" + cat ${RUN_DIR}/check.log + echo -e "\n -> look at log files in: ${RUN_DIR}:" + ls ${RUN_DIR} +fi + +exit $Fails + +# vi:set ts=4 et sts=4: diff --git a/libcodec2-android/src/codec2/stm32/unittest/scripts/run_tests_common.sh b/libcodec2-android/src/codec2/stm32/unittest/scripts/run_tests_common.sh new file mode 100644 index 0000000..2f950c4 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/unittest/scripts/run_tests_common.sh @@ -0,0 +1,79 @@ +# This file must be "sourced" from a parent shell! +# +# run_tests_common.sh +# +# This is a collection of common variable settings for stm32 unit tests. +# +# The variable $SCRIPTS must be set when this is called. + +if [ -z ${SCRIPTS+x} ]; then + echo "Error, run_tests_common.sh requires that \$SCRIPTS be set!" + exit 1 + fi + +####################################### +# Set default directories based on the parent of the SCRIPTS variable. +set -a + +#UNITTEST_BASE - Location of STM32 Unittests and files +UNITTEST_BASE="$( cd "$( dirname "${SCRIPTS}" )" >/dev/null && pwd )" + +# STM32_BASE - Base directory of Stm32 files +STM32_BASE="$( cd "$( dirname "${UNITTEST_BASE}" )" >/dev/null && pwd )" + +# STM32_BUILD - Build directory of Stm32 files +STM32_BUILD="${STM32_BASE}/build_stm32" + +# UNITTEST_BIN - Location of STM32 unittest binaries +UNITTEST_BIN="${STM32_BUILD}/unittest/src" + +# CODEC2_BASE - Base directory of Codec2 +CODEC2_BASE="$( cd "$( dirname "${STM32_BASE}" )" >/dev/null && pwd )" + +# CODEC2_BIN - Location of x86 utiliy programs for Codec2 +CODEC2_BIN="${CODEC2_BASE}/build_linux/src" + +# CODEC2_UTST - Location of x86 utiliy programs for Codec2 unittest +CODEC2_UTST="${CODEC2_BASE}/build_linux/unittest" + +set +a + +####################################### +# Add directories to PATH +export PATH=${PATH}:${SCRIPTS}:${CODEC2_BIN}:${CODEC2_UTST} + + +####################################### +# Parse command line options +# Options (starting with "--") are stored in $ARGS. +# Non-options are taken as the test name, then as a test option (optional) +declare -A ARGS +unset TEST +unset TEST_OPT +for arg in "$@"; do + if [[ ${arg} == --* ]] ; then ARGS[${arg}]=true + else + if [ -z ${TEST+x} ]; then TEST=${arg} + else TEST_OPT=${arg} + fi + fi + done + +# Prepend the common test name to the option if given +if [ -n "$TEST_OPT" ] ; then FULL_TEST_NAME="${TEST}_${TEST_OPT}" +else FULL_TEST_NAME="${TEST}" +fi + +####################################### +# A function for setup + +setup_common () { + + if [ ${ARGS[--clean]+_} ] ; then + if [ -d "${1}" ] ; then rm -rf "${1}"; fi + fi + + # Make run directory if needed + if [ ! -d "${1}" ] ; then mkdir -p "${1}"; fi + + } diff --git a/libcodec2-android/src/codec2/stm32/unittest/scripts/setup.sh b/libcodec2-android/src/codec2/stm32/unittest/scripts/setup.sh new file mode 100644 index 0000000..c64906a --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/unittest/scripts/setup.sh @@ -0,0 +1,19 @@ +# This file must be "sourced" from a parent shell! +# +# setup.sh +# +# This is a collection of common variable settings for manually running +# stm32 unit tests. +# +# This assumes it is called from the "stm32/unittests" directory!!! + +SCRIPTS="${PWD}/scripts" + +# Setup common variables +source $SCRIPTS/run_tests_common.sh + +####################################### +# Add directories to PATH(s) +export PATH=${SCRIPTS}:${PATH} +export PATH=${CODEC2_BIN}:${CODEC2_UTST}:${CODEC2_UTST_BIN}:${CODEC2_SCRIPT}:${PATH} +export LD_LIBRARY_PATH=${CODEC2_BIN}:${LD_LIBRARY_PATH} diff --git a/libcodec2-android/src/codec2/stm32/unittest/scripts/stm_stderr.txt b/libcodec2-android/src/codec2/stm32/unittest/scripts/stm_stderr.txt new file mode 100644 index 0000000..6ff50c5 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/unittest/scripts/stm_stderr.txt @@ -0,0 +1,2 @@ +semihosting test - stderr +Error 2 opening fin diff --git a/libcodec2-android/src/codec2/stm32/unittest/scripts/stm_stdout.txt b/libcodec2-android/src/codec2/stm32/unittest/scripts/stm_stdout.txt new file mode 100644 index 0000000..2fc0905 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/unittest/scripts/stm_stdout.txt @@ -0,0 +1 @@ +semihosting test - stdout diff --git a/libcodec2-android/src/codec2/stm32/unittest/scripts/sum_profiles b/libcodec2-android/src/codec2/stm32/unittest/scripts/sum_profiles new file mode 100644 index 0000000..706b8a2 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/unittest/scripts/sum_profiles @@ -0,0 +1,45 @@ +#!/usr/bin/env python3 +""" sum_profiles """ + +def sum_profiles(fin, frames): + data = {} + total_time = 0.0 + + for line in fin: + words = line.strip().split() + if (len(words) == 3): + part = words[0] + time_str = words[1] + time = float(time_str) + total_time += time + if (not part in data): data[part] = 0.0 + data[part] += time + + data_sorted = [(p, data[p]) for p in sorted(data, key=data.get, reverse=True)] + + print("Total time = {:.1f} ms".format(total_time)) + if (frames): + print("{:.1f} per frame".format(total_time / args.frames)) + print("") + + for part, time in data_sorted: + percent = int(100*(time / total_time)) + print('{:2d}% - {:10.3f} - {}'.format(percent, time, part)) + + return(data) + # end sum_profiles() + + +######################################## +if __name__ == "__main__": + import argparse + + #### Options + argparser = argparse.ArgumentParser() + argparser.add_argument("-f", "--frames", action="store", type=int, default=0, + help="Number of frames") + argparser.add_argument("file", metavar="FILE", help="file to read") + args = argparser.parse_args() + + fin = open(args.file, "r") + sum_profiles(fin, args.frames) diff --git a/libcodec2-android/src/codec2/stm32/unittest/scripts/tst_api_demod_check b/libcodec2-android/src/codec2/stm32/unittest/scripts/tst_api_demod_check new file mode 100755 index 0000000..962e5b0 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/unittest/scripts/tst_api_demod_check @@ -0,0 +1,137 @@ +#!/bin/bash +# +# tst_api_demod_check +# +# Setup input and reference data for one of several versions of this test. + +# Find the scripts directory +SCRIPTS="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )" + +# Setup common variables +source $SCRIPTS/run_tests_common.sh + +# RUN_DIR - Directory where test will be run +RUN_DIR="${UNITTEST_BASE}/test_run/${FULL_TEST_NAME}" + +# Call common setup function to make the directory +setup_common "${RUN_DIR}" + +# Change to test directory +cd "${RUN_DIR}" + +# way of performing a rough comparsion of two output speech files that are not exactly the same + +function compare_energy() { + energy_ref=$(python -c "import numpy as np; x=np.fromfile(\"ref_demod.raw\",dtype=\"int16\").astype(float); print(10*np.log10(np.dot(x,x)))") + energy_target=$(python -c "import numpy as np; x=np.fromfile(\"stm_out.raw\",dtype=\"int16\").astype(float); print(10*np.log10(np.dot(x,x)))") + printf "ref energy: %f target energy: %f\n" $energy_ref $energy_target + + python -c "import sys; sys.exit(1) if abs($energy_ref-$energy_target) < 1 else sys.exit(0)" + if [[ $? -eq 1 ]]; then echo "energy compare OK"; + else echo "energy compare BAD"; + let Fails=($Fails + 1) + fi +} + +##################################################################### +## Test CHECK actions: + +declare -i Fails=0 + +case "${TEST_OPT}" in + + 700D_plain_test) + echo "Check reference decode" + p1=$(grep '^BER\.*: 0.000' ref_gen.log | wc -l) + p2=$(grep '^Coded BER: 0.000' ref_gen.log | wc -l) + if [[ $p1 -eq 1 && $p2 -eq 1 ]]; then echo "OK"; + else echo "BAD"; + let Fails=($Fails + 1) + fi + # + echo "Check target decode" + p1=$(grep '^BER\.*: 0.000' stderr.log | wc -l) + p2=$(grep '^Coded BER: 0.000' stderr.log | wc -l) + if [[ $p1 -eq 1 && $p2 -eq 1 ]]; then echo "OK"; + else echo "BAD"; + let Fails=($Fails + 1) + fi + ;; + + 700D_AWGN_test) + echo "Check reference decode" + uber_ref=$(cat ref_gen.log | sed -n "s/^BER.* \([0-9..]*\) Tbits.*/\1/p") + cber_ref=$(cat ref_gen.log | sed -n "s/^Coded BER.* \([0-9..]*\) Tbits.*/\1/p") + printf "REF uncoded BER: %f coded BER: %f\n" $uber_ref $cber_ref + + # As per notes in tst_api_demod_setup, coded BER is unreliable + # for such a short test, so we'll just sanity check the + # reference uncoded BER here. Bash can't compare floats + # .... so use return code of some python script + python -c "import sys; sys.exit(1) if $uber_ref<0.1 else sys.exit(0)" + if [[ $? -eq 1 ]]; then echo "OK"; + else echo "BAD"; + let Fails=($Fails + 1) + fi + + echo "Check target decode" + uber_target=$(cat ref_gen.log | sed -n "s/^BER.* \([0-9..]*\) Tbits.*/\1/p") + cber_target=$(cat ref_gen.log | sed -n "s/^Coded BER.* \([0-9..]*\) Tbits.*/\1/p") + printf "TARGET uncoded BER: %f coded BER: %f\n" $uber_target $cber_target + python -c "import sys; sys.exit(1) if $uber_target<0.1 and abs($cber_ref-$cber_target)<0.01 else sys.exit(0)" + if [[ $? -eq 1 ]]; then echo "OK"; + else echo "BAD"; + let Fails=($Fails + 1) + fi + ;; + + 700D_AWGN_codec) + # 1/ The two output files sound OK, and when plotted look very + # similar, but they don't match on a sample-sample basis. + + # 2/ Suspect some small state difference, or perhaps random + # number generator diverging, sampling codec2_rand() at the + # end of the x86 and stm32 test programs might show up any + # differences. + + # 3/ At this stage - we can't make sample by sample automatic + # tests work. However there is value in running the test + # to ensure no asserts are hit and the code doesn't crash + # (e.g. due to an out of memory issues). A simple energy + # comparison is used on the output speech files, which + # will trap any large errors. + + # 4/ We can also manually evaulate the ouput decoded speech by + # listening to the output speech files. + + compare_energy; + + # make sure execution time stays within bounds + execution_time=mktmp + cat stdout.log | sed -n "s/.*freedv_rx \([0-9..]*\) msecs/\1/p" > $execution_time + python -c "import sys; import numpy as np; x=np.loadtxt(\"$execution_time\"); print(\"execution time max:: %5.2f mean: %5.2f ms\" % (np.max(x), np.mean(x))); sys.exit(1) if np.max(x) < 80.0 else sys.exit(0)" + if [[ $? -eq 1 ]]; then echo "execution time OK"; + else echo "BAD"; + let Fails=($Fails + 1) + fi + + ;; + + 1600_plain_codec) + compare_energy; + ;; + + *) + printf "ERROR: invalid test option. Valid options are:\n 700D_plain_test\n 700D_AWGN_test\n 700D_plain_codec\n 1600_plain_codec\n" + exit 1 + + esac + +if (( $Fails == 0 )); then + echo -e "\nTest PASSED" +else + echo -e "\nTest FAILED!" +fi + + +exit $Fails diff --git a/libcodec2-android/src/codec2/stm32/unittest/scripts/tst_api_demod_setup b/libcodec2-android/src/codec2/stm32/unittest/scripts/tst_api_demod_setup new file mode 100755 index 0000000..33c103d --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/unittest/scripts/tst_api_demod_setup @@ -0,0 +1,106 @@ +#!/bin/bash +# +# tst_api_demod_setup +# +# Setup input and reference data for one of several versions of this test. + +# Find the scripts directory +SCRIPTS="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )" + +# Setup common variables +source $SCRIPTS/run_tests_common.sh + +# RUN_DIR - Directory where test will be run +RUN_DIR="${UNITTEST_BASE}/test_run/${FULL_TEST_NAME}" + +# Call common setup function to make the directory +setup_common "${RUN_DIR}" + +# Change to test directory +cd "${RUN_DIR}" + + +##################################################################### +## Test SETUP actions: + +case "${TEST_OPT}" in + + 700D_plain_test ) + # Config is , + echo "71000010" > stm_cfg.txt + # + # Copy N frames of a raw audio file to stm_in.raw. + dd bs=1280 count=100 if=../../../../raw/hts1.raw of=spch_in.raw \ + > setup.log 2>&1 + freedv_tx 700D spch_in.raw stm_in.raw --testframes --txbpf 0 \ + >> setup.log 2>&1 + # + # Reference + freedv_rx 700D stm_in.raw ref_demod.raw -v --testframes \ + > ref_gen.log 2>&1 + ;; + + 700D_AWGN_test ) + # Config is , + echo "71000010" > stm_cfg.txt + # + # Copy N frames of a raw audio file to stm_in.raw. + dd bs=1280 count=48 if=../../../../raw/hts1.raw of=spch_in.raw \ + > setup.log 2>&1 + freedv_tx 700D spch_in.raw mod_bits.raw --testframes --txbpf 0 \ + >> setup.log 2>&1 + cohpsk_ch mod_bits.raw stm_in.raw -20 --Fs 8000 -f -5 2>&1 | tee setup.log + + # Reference: - When the OFDM modem initially syncs, it often + # has residual freq offset that causes abnormally + # high LDPC decoder bit errors forthe first few + # seconds. This leads to a high coded BER being + # reported for short duration tests. This + # settles down after a few seconds, and we get + # the expected coded BER when averaging over + # longer periods (e.g. 60s). However this + # particular test is necessarily short due to the + # slow speed of the semihosting system. It is + # therefore sufficient to check that the + # performance is similar to the x86 C verison, + # rather than expecting a low coded BER for a + # short run. + + freedv_rx 700D stm_in.raw ref_demod.raw -v --testframes 2>&1 --discard | tee ref_gen.log + ;; + + 700D_AWGN_codec ) + # Config is , + echo "70000020" > stm_cfg.txt + # + # Copy N frames of a raw audio file to stm_in.raw. + dd bs=1280 count=48 if=../../../../raw/hts1.raw of=spch_in.raw \ + > setup.log 2>&1 + freedv_tx 700D spch_in.raw mod_bits.raw --txbpf 0 \ + >> setup.log 2>&1 + # + # Reference - give it a hard time with some noise to exercise the LDPC codec and get us to max CPU + cohpsk_ch mod_bits.raw stm_in.raw -20 --Fs 8000 -f -5 2>&1 | tee setup.log + freedv_rx 700D stm_in.raw ref_demod.raw -v \ + > ref_gen.log 2>&1 + ;; + + 1600_plain_codec ) + # Config is , + echo "00000010" > stm_cfg.txt + # + # Copy N frames of a raw audio file to stm_in.raw. + dd bs=320 count=100 if=../../../../raw/hts1.raw of=spch_in.raw > setup.log 2>&1 + freedv_tx 1600 spch_in.raw stm_in.raw >> setup.log 2>&1 + # + # Reference + freedv_rx 1600 stm_in.raw ref_demod.raw -v \ + > ref_gen.log 2>&1 + ;; + + *) + printf "ERROR: invalid test option. Valid options are:\n 700D_plain_test\n 700D_AWGN_test\n 700D_AWGN_codec\n 1600_plain_codec\n" + exit 1 + ;; + + esac diff --git a/libcodec2-android/src/codec2/stm32/unittest/scripts/tst_api_mod_check b/libcodec2-android/src/codec2/stm32/unittest/scripts/tst_api_mod_check new file mode 100755 index 0000000..c3ca170 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/unittest/scripts/tst_api_mod_check @@ -0,0 +1,77 @@ +#!/bin/bash +# +# tst_api_mod_check +# +# Setup input and reference data for one of several versions of this test. + +# Find the scripts directory +SCRIPTS="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )" + +# Setup common variables +source $SCRIPTS/run_tests_common.sh + +# RUN_DIR - Directory where test will be run +RUN_DIR="${UNITTEST_BASE}/test_run/${FULL_TEST_NAME}" + +# Call common setup function to make the directory +setup_common "${RUN_DIR}" + +# Change to test directory +cd "${RUN_DIR}" + + +##################################################################### +## Test CHECK actions: + +declare -i Fails=0 + +case "${TEST_OPT}" in + + 700D_TEST) + # + echo -e "\nReference check" + if freedv_rx 700D ref_mod.raw ref_rx.raw --testframes; then + echo "Passed" + else + echo "Failed" + let Fails=($Fails + 1) + fi + # + echo -e "\nTarget check" + if freedv_rx 700D stm_out.raw stm_rx.raw --testframes; then + echo "Passed" + else + echo "Failed" + let Fails=($Fails + 1) + fi + # + echo -e "\nCompare output binary data" + if compare_ints -s -b2 -t4 ref_mod.raw stm_out.raw; then + echo "Passed" + else + echo "Failed" + let Fails=($Fails + 1) + fi + ;; + + 700D_CODEC) + # + echo -e "\nCompare output binary data" + if compare_ints -s -b2 -t4 ref_mod.raw stm_out.raw; then + echo "Passed" + else + echo "Failed" + let Fails=($Fails + 1) + fi + ;; + + esac + +if (( $Fails == 0 )); then + echo -e "\nTest PASSED" +else + echo -e "\nTest FAILED!" +fi + + +exit $Fails diff --git a/libcodec2-android/src/codec2/stm32/unittest/scripts/tst_api_mod_setup b/libcodec2-android/src/codec2/stm32/unittest/scripts/tst_api_mod_setup new file mode 100755 index 0000000..fced9f1 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/unittest/scripts/tst_api_mod_setup @@ -0,0 +1,60 @@ +#!/bin/bash +# +# tst_api_mod_setup +# +# Setup input and reference data for one of several versions of this test. + +# Find the scripts directory +SCRIPTS="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )" + +# Setup common variables +source $SCRIPTS/run_tests_common.sh + +# RUN_DIR - Directory where test will be run +RUN_DIR="${UNITTEST_BASE}/test_run/${FULL_TEST_NAME}" + +# Call common setup function to make the directory +setup_common "${RUN_DIR}" + +# Change to test directory +cd "${RUN_DIR}" + + +##################################################################### +## Test SETUP actions: + +case "${TEST_OPT}" in + + 700D_TEST ) + # Config is , + echo "71000000" > stm_cfg.txt + # + # Copy N frames of a raw audio file to stm_in.raw. + dd bs=1280 count=48 if=../../../../raw/hts1.raw of=stm_in.raw \ + > setup.log 2>&1 + # + # Reference + freedv_tx 700D stm_in.raw ref_mod.raw --testframes --txbpf 0 \ + > ref_gen.log 2>&1 + ;; + + 700D_CODEC ) + # Config is , + echo "70000000" > stm_cfg.txt + # + # Copy N frames of a raw audio file to stm_in.raw. + dd bs=1280 count=48 if=../../../../raw/hts1.raw of=stm_in.raw \ + > setup.log 2>&1 + # + # Reference + freedv_tx 700D stm_in.raw ref_mod.raw --txbpf 0 \ + > ref_gen.log 2>&1 + ;; + + *) + printf "ERROR: invalid test option. Valid options are:\n 700D_TEST\n 700D_CODEC\n" + exit 1 + ;; + esac + +exit 0 diff --git a/libcodec2-android/src/codec2/stm32/unittest/scripts/tst_codec2_dec_check b/libcodec2-android/src/codec2/stm32/unittest/scripts/tst_codec2_dec_check new file mode 100755 index 0000000..adb6a90 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/unittest/scripts/tst_codec2_dec_check @@ -0,0 +1,43 @@ +#!/bin/bash +# +# tst_codec2_dec_check +# +# Setup input and reference data for one of several versions of this test. + +# Find the scripts directory +SCRIPTS="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )" + +# Setup common variables +source $SCRIPTS/run_tests_common.sh + +# RUN_DIR - Directory where test will be run +RUN_DIR="${UNITTEST_BASE}/test_run/${FULL_TEST_NAME}" + +# Call common setup function to make the directory +setup_common "${RUN_DIR}" + +# Change to test directory +cd "${RUN_DIR}" + + +##################################################################### +## Test CHECK actions: + +declare -i Fails=0 + +#case "${TEST_OPT}" in +# 1300) +# 700C) +# esac + +echo -e "\nMust manually listen to this!" +aplay -f S16_LE stm_out.raw + +if (( $Fails == 0 )); then + echo -e "\nTest PASSED" +else + echo -e "\nTest FAILED!" +fi + + +exit $Fails diff --git a/libcodec2-android/src/codec2/stm32/unittest/scripts/tst_codec2_dec_setup b/libcodec2-android/src/codec2/stm32/unittest/scripts/tst_codec2_dec_setup new file mode 100755 index 0000000..0f38a73 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/unittest/scripts/tst_codec2_dec_setup @@ -0,0 +1,54 @@ +#!/bin/bash +# +# tst_codec2_dec_setup +# +# Setup input and reference data for one of several versions of this test. + +# Find the scripts directory +SCRIPTS="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )" + +# Setup common variables +source $SCRIPTS/run_tests_common.sh + +# RUN_DIR - Directory where test will be run +RUN_DIR="${UNITTEST_BASE}/test_run/${FULL_TEST_NAME}" + +# Call common setup function to make the directory +setup_common "${RUN_DIR}" + +# Change to test directory +cd "${RUN_DIR}" + + +##################################################################### +## Test SETUP actions: + +case "${TEST_OPT}" in + + 1300 ) + # Config is , + echo "41000000" > stm_cfg.txt + # + # Copy N frames of a raw audio file to stm_in.raw. + dd bs=2560 count=30 if=../../../../raw/hts1.raw of=spch_in.raw \ + > setup.log 2>&1 + c2enc 1300 spch_in.raw stm_in.raw >> setup.log 2>&1 + # + # Reference + c2dec 1300 stm_in.raw ref_dec.raw > ref_gen.log 2>&1 + ;; + + 700C ) + # Config is , + echo "81000000" > stm_cfg.txt + # + # Copy N frames of a raw audio file to stm_in.raw. + dd bs=2560 count=30 if=../../../../raw/hts1.raw of=spch_in.raw \ + > setup.log 2>&1 + c2enc 700C spch_in.raw stm_in.raw >> setup.log 2>&1 + # + # Reference + c2dec 700C stm_in.raw ref_dec.raw > ref_gen.log 2>&1 + ;; + + esac diff --git a/libcodec2-android/src/codec2/stm32/unittest/scripts/tst_codec2_enc_check b/libcodec2-android/src/codec2/stm32/unittest/scripts/tst_codec2_enc_check new file mode 100755 index 0000000..d95bd18 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/unittest/scripts/tst_codec2_enc_check @@ -0,0 +1,59 @@ +#!/bin/bash +# +# tst_codec2_enc_check +# +# Setup input and reference data for one of several versions of this test. + +# Find the scripts directory +SCRIPTS="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )" + +# Setup common variables +source $SCRIPTS/run_tests_common.sh + +# RUN_DIR - Directory where test will be run +RUN_DIR="${UNITTEST_BASE}/test_run/${FULL_TEST_NAME}" + +# Call common setup function to make the directory +setup_common "${RUN_DIR}" + +# Change to test directory +cd "${RUN_DIR}" + + +##################################################################### +## Test CHECK actions: + +declare -i Fails=0 + +case "${TEST_OPT}" in + 1300) + echo -e "\nCompare output binary data" + compare_ints -b1 -c ref_enc.raw stm_out.raw + error_count=$? + if [[ $error_count -le 2 ]]; then + echo "Passed" + else + echo "Failed" + let Fails=($Fails + 1) + fi + ;; + 700C) + echo -e "\nCompare output binary data" + if compare_ints -b1 ref_enc.raw stm_out.raw; then + echo "Passed" + else + echo "Failed" + let Fails=($Fails + 1) + fi + ;; + esac + + +if (( $Fails == 0 )); then + echo -e "\nTest PASSED" +else + echo -e "\nTest FAILED!" +fi + + +exit $Fails diff --git a/libcodec2-android/src/codec2/stm32/unittest/scripts/tst_codec2_enc_setup b/libcodec2-android/src/codec2/stm32/unittest/scripts/tst_codec2_enc_setup new file mode 100755 index 0000000..12fe4eb --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/unittest/scripts/tst_codec2_enc_setup @@ -0,0 +1,54 @@ +#!/bin/bash +# +# tst_codec2_enc_setup +# +# Setup input and reference data for one of several versions of this test. + +# Find the scripts directory +SCRIPTS="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )" + +# Setup common variables +source $SCRIPTS/run_tests_common.sh + +# RUN_DIR - Directory where test will be run +RUN_DIR="${UNITTEST_BASE}/test_run/${FULL_TEST_NAME}" + +# Call common setup function to make the directory +setup_common "${RUN_DIR}" + +# Change to test directory +cd "${RUN_DIR}" + + +##################################################################### +## Test SETUP actions: + +case "${TEST_OPT}" in + + 1300 ) + # Config is , + echo "40000000" > stm_cfg.txt + # + # Copy N frames of a raw audio file to stm_in.raw. + dd bs=2560 count=30 if=../../../../raw/hts1.raw of=stm_in.raw \ + > setup.log 2>&1 + # + # Reference + c2enc 1300 stm_in.raw ref_enc.raw \ + > ref_gen.log 2>&1 + ;; + + 700C ) + # Config is , + echo "80000000" > stm_cfg.txt + # + # Copy N frames of a raw audio file to stm_in.raw. + dd bs=2560 count=30 if=../../../../raw/hts1.raw of=stm_in.raw \ + > setup.log 2>&1 + # + # Reference + c2enc 700C stm_in.raw ref_enc.raw \ + > ref_gen.log 2>&1 + ;; + + esac diff --git a/libcodec2-android/src/codec2/stm32/unittest/scripts/tst_ldpc_dec_check b/libcodec2-android/src/codec2/stm32/unittest/scripts/tst_ldpc_dec_check new file mode 100755 index 0000000..a301798 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/unittest/scripts/tst_ldpc_dec_check @@ -0,0 +1,71 @@ +#!/bin/bash +# +# tst_ldpc_enc_check +# +# Setup input and reference data for one of several versions of this test. + +# Find the scripts directory +SCRIPTS="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )" + +# Setup common variables +source $SCRIPTS/run_tests_common.sh + +# RUN_DIR - Directory where test will be run +RUN_DIR="${UNITTEST_BASE}/test_run/${FULL_TEST_NAME}" + +# Call common setup function to make the directory +setup_common "${RUN_DIR}" + +# Change to test directory +cd "${RUN_DIR}" + + +##################################################################### +## Test CHECK actions: + +declare -i Fails=0 + +case "${TEST_OPT}" in + + ideal) + BER_LIMIT_RAW=0.0 + BER_LIMIT_CODED=0.0 + ;; + noise) + BER_LIMIT_RAW=0.15 + BER_LIMIT_CODED=0.015 + ;; + esac + +echo -e "\nCompare output binary data" +if compare_ints -b1 ref_out.raw stm_out.raw; then + echo "Passed" +else + echo "Failed" + let Fails=($Fails + 1) +fi +# + +echo -e "\nReference BER values" +n=$(grep 'Raw.*BER:' ref_gen.log | awk '{print $7}') +p1=$(echo $n '<=' ${BER_LIMIT_RAW} | bc) +n=$(grep 'Coded.*BER:' ref_gen.log | awk '{print $7}') +p2=$(echo $n '<=' ${BER_LIMIT_CODED} | bc) +if [[ $p1 -eq 1 && $p2 -eq 1 ]]; then echo "Pass"; +else echo "Fail"; let Fails=($Fails + 1); fi +# +echo -e "\nTarget BER values" +n=$(grep 'Raw.*BER:' stderr.log | cut -d ' ' -f 7) +p1=$(echo $n '<=' ${BER_LIMIT_RAW} | bc) +n=$(grep 'Coded.*BER:' stderr.log | cut -d ' ' -f 7) +p2=$(echo $n '<=' ${BER_LIMIT_CODED} | bc) +if [[ $p1 -eq 1 && $p2 -eq 1 ]]; then echo "Pass"; +else echo "Fail"; let Fails=($Fails + 1); fi + +if (( $Fails == 0 )); then + echo -e "\nTest PASSED" +else + echo -e "\nTest FAILED!" +fi + +exit $Fails diff --git a/libcodec2-android/src/codec2/stm32/unittest/scripts/tst_ldpc_dec_setup b/libcodec2-android/src/codec2/stm32/unittest/scripts/tst_ldpc_dec_setup new file mode 100755 index 0000000..5370f55 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/unittest/scripts/tst_ldpc_dec_setup @@ -0,0 +1,50 @@ +#!/bin/bash +# +# tst_ldpc_dec_setup +# +# Setup input and reference data for one of several versions of this test. + +# Find the scripts directory +SCRIPTS="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )" + +# Setup common variables +source $SCRIPTS/run_tests_common.sh + +# RUN_DIR - Directory where test will be run +RUN_DIR="${UNITTEST_BASE}/test_run/${FULL_TEST_NAME}" + +# Call common setup function to make the directory +setup_common "${RUN_DIR}" + +# Change to test directory +cd "${RUN_DIR}" + + +##################################################################### +## Test SETUP actions: + +case "${TEST_OPT}" in + + ideal ) +# # Config is , , , +# echo "00000000" > stm_cfg.txt + ldpc_enc /dev/zero stm_in.raw --sd --code HRA_112_112 --testframes 6 \ + > setup.log 2>&1 + ldpc_dec stm_in.raw ref_out.raw --sd --code HRA_112_112 --testframes \ + > ref_gen.log 2>&1 + ;; + + noise ) +# # Config is , , , +# echo "00000000" > stm_cfg.txt + ldpc_enc /dev/zero enc_out.raw --sd --code HRA_112_112 --testframes 24 \ + > setup.log 2>&1 + ldpc_noise enc_out.raw stm_in.raw 1 \ + >> setup.log 2>&1 + ldpc_dec stm_in.raw ref_out.raw --sd --code HRA_112_112 --testframes \ + > ref_gen.log 2>&1 + ;; + + esac + +exit 0 diff --git a/libcodec2-android/src/codec2/stm32/unittest/scripts/tst_ldpc_enc_check b/libcodec2-android/src/codec2/stm32/unittest/scripts/tst_ldpc_enc_check new file mode 100755 index 0000000..69f3f3b --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/unittest/scripts/tst_ldpc_enc_check @@ -0,0 +1,68 @@ +#!/bin/bash +# +# tst_ldpc_enc_check +# +# Setup input and reference data for one of several versions of this test. + +# Find the scripts directory +SCRIPTS="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )" + +# Setup common variables +source $SCRIPTS/run_tests_common.sh + +# RUN_DIR - Directory where test will be run +RUN_DIR="${UNITTEST_BASE}/test_run/${FULL_TEST_NAME}" + +# Call common setup function to make the directory +setup_common "${RUN_DIR}" + +# Change to test directory +cd "${RUN_DIR}" + + +##################################################################### +## Test CHECK actions: + +declare -i Fails=0 + +#case "${TEST_OPT}" in +# +# plain) +# ;; +# esac + +##### TODO: ldpc_dec should be able to check this outputs, +##### it currently reports Tbits = 0! + +#echo -e "\nReference check" +#if ofdm_demod ref_mod_out.raw ref_ofdm_demod.raw --testframes ${LDPC}; then +# echo "Passed" +#else +# echo "Failed" +# let Fails=($Fails + 1) +#fi +## +#echo -e "\nTarget check" +#if ofdm_demod mod.raw stm_demod.raw --testframes ${LDPC}; then +# echo "Passed" +#else +# echo "Failed" +# let Fails=($Fails + 1) +#fi +## +echo -e "\nCompare output binary data" +if compare_ints -b1 ref_out.raw stm_out.raw; then + echo "Passed" +else + echo "Failed" + let Fails=($Fails + 1) +fi +# + +if (( $Fails == 0 )); then + echo -e "\nTest PASSED" +else + echo -e "\nTest FAILED!" +fi + +exit $Fails diff --git a/libcodec2-android/src/codec2/stm32/unittest/scripts/tst_ldpc_enc_setup b/libcodec2-android/src/codec2/stm32/unittest/scripts/tst_ldpc_enc_setup new file mode 100755 index 0000000..ae9164d --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/unittest/scripts/tst_ldpc_enc_setup @@ -0,0 +1,39 @@ +#!/bin/bash +# +# tst_ldpc_enc_setup +# +# Setup input and reference data for one of several versions of this test. + +# Find the scripts directory +SCRIPTS="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )" + +# Setup common variables +source $SCRIPTS/run_tests_common.sh + +# RUN_DIR - Directory where test will be run +RUN_DIR="${UNITTEST_BASE}/test_run/${FULL_TEST_NAME}" + +# Call common setup function to make the directory +setup_common "${RUN_DIR}" + +# Change to test directory +cd "${RUN_DIR}" + + +##################################################################### +## Test SETUP actions: + +#case "${TEST_OPT}" in +# +# plain ) +# # Config is , , , +# echo "00000000" > stm_cfg.txt + ofdm_gen_test_bits --out stm_in.raw --frames 6 --ldpc --verbose \ + > setup.log 2>&1 + ldpc_enc stm_in.raw ref_out.raw --code HRA_112_112 \ + > ref_gen.log 2>&1 +# ;; +# +# esac + +exit 0 diff --git a/libcodec2-android/src/codec2/stm32/unittest/scripts/tst_ofdm_demod_check b/libcodec2-android/src/codec2/stm32/unittest/scripts/tst_ofdm_demod_check new file mode 100755 index 0000000..6a0c126 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/unittest/scripts/tst_ofdm_demod_check @@ -0,0 +1,503 @@ +#!/usr/bin/env python3 +""" tst_ofdm_demod_check + + Testing for tst_ofdm_demod_* tests + + Usage tst_ofdm_demod_check quick|ideal|AWGN|fade|profile|ldpc|ldpc_AWGN|ldpc_fade + + Checks are different for each option, but similar + + - Convert stm32 output to octave text foramt + (stm32 does not have memory for this) + + - ... + + """ + +import numpy as np +import math +import argparse +import struct +import os +import sys + +if ("UNITTEST_BASE" in os.environ): + sys.path.append(os.environ["UNITTEST_BASE"] + "/lib/python") +else: + sys.path.append("../../lib/python") # assume in test run dir + +import sum_profiles + +Nbitsperframe = 238 + +############################################################################## +# Read Octave text file +############################################################################## + +def read_octave_text(f): + if (args.verbose): print('read_octave_text()') + data = {} + for line in f: + if (line[0:8] == "# name: "): + var = line.split()[2] + if (args.verbose): print(' var "{}"'.format(var)) + line = next(f) + if (line.startswith("# type: matrix")): + line = next(f) + rows = int(line.split()[2]) + line = next(f) + cols = int(line.split()[2]) + if (cols > 0): + data[var] = np.empty((rows, cols), np.float32) + # Read rows one at a time + for row in range(rows): + try: + line = next(f) + data[var][row] = np.fromstring(line, np.float32, cols, " ") + except: + print("Error reading row {} of var {}".format(row, var)) + raise + + elif (line.startswith("# type: complex matrix")): + line = next(f) + rows = int(line.split()[2]) + line = next(f) + cols = int(line.split()[2]) + if (cols > 0): + data[var] = np.empty((rows, cols), np.complex64) + # Read rows one at a time + for row in range(rows): + try: + line = next(f) + # " (r,i) (r,i) ..." + col = 0 + for tpl in line.split(): + real, imag = tpl.strip("(,)").split(",") + data[var][row][col] = float(real) + (1j * float(imag)) + col += 1 + except: + print("Error reading row {} of var {}".format(row, var)) + raise + # end for line in f + return(data) + + +############################################################################## +# Read stm32 diag data, syms, amps for each frame +############################################################################## + +def read_tgt_syms(f): + # TODO: don't use hardcoded values... + syms = np.zeros((100, 112), np.complex64) + amps = np.zeros((100, 112), np.float32) + row = 0 + while True: + # syms + buf = f.read(112 * 8) + if (len(buf) < (112 * 8)): break + row_lst = struct.unpack("<224f", buf) + ary = np.array(row_lst, np.float32) + ary.dtype = np.complex64 + syms[row] = ary + # amps + buf = f.read(112 * 4) + if (len(buf) < (112 * 4)): break + row_lst = struct.unpack("<112f", buf) + ary = np.array(row_lst, np.float32) + amps[row] = ary + # + row += 1 + if (row >= 100): break + # end While True + return(syms, amps) + # end read_stm_syms() + + +############################################################################## +# Write out in octave text format as 2 matricies +############################################################################## + +def write_syms_as_octave(syms, amps): + with open("ofdm_demod_log.txt", "w") as f: + # syms + rows = syms.shape[0] + cols = syms.shape[1] + f.write("# name: payload_syms_log_stm32\n") + f.write("# type: complex matrix\n") + f.write("# rows: {}\n".format(rows)) + f.write("# columns: {}\n".format(cols)) + for row in range(rows): + for col in range(cols): + f.write(" ({},{})".format( + syms[row][col].real, + syms[row][col].imag + )) + f.write("\n") + # amps + rows = amps.shape[0] + cols = amps.shape[1] + f.write("\n") + f.write("# name: payload_amps_log_stm32\n") + f.write("# type: matrix\n") + f.write("# rows: {}\n".format(rows)) + f.write("# columns: {}\n".format(cols)) + for row in range(rows): + for col in range(cols): + f.write(" {}".format( + amps[row][col] + )) + f.write("\n") + # end write_syms_as_octave() + + +############################################################################## +# Main +############################################################################## + +#### Options +argparser = argparse.ArgumentParser() +argparser.add_argument("-v", "--verbose", action="store_true") +argparser.add_argument("test", action="store") +argparser.add_argument("test_opt", action="store", + choices=["quick", "ideal", "AWGN", "fade", "profile", + "ldpc", "ldpc_AWGN", "ldpc_fade" ]) +args = argparser.parse_args() + +# Use ENV value of UNITTEST_BASE from upper level shell script (default to .) +if ('UNITTEST_BASE' in os.environ): + run_dir = os.environ['UNITTEST_BASE'] + "/test_run/" + run_dir += args.test + "_" + args.test_opt + print(run_dir) + os.chdir(run_dir) + +#### Settings +# Defaults, (for tests without channel degradation, results should be close to ideal) +max_ber = 0.001 # Max BER value in Target +max_ber2 = 0.001 # Max Coded BER value in Target +compare_ber = 1 # Compare Target to Reference? +# Used if compare_ber: +tolerance_ber = 0.001 # Difference from reference for BER +tolerance_ber2 = 0.001 # Difference from reference for Coded BER +tolerance_tbits = 0 +tolerance_terrs = 1 +# +compare_output = 1 # Compare Target to Reference? +# Used if compare_output: +tolerance_output_differences = 0 +tolerance_syms = 0.01 +tolerance_amps = 0.01 +# +# Per test settings +if (args.test_opt == "quick"): + pass +elif (args.test_opt == "ideal"): + pass +elif (args.test_opt == "AWGN"): # Still close enough to compare BERs loosely + max_ber = 0.1 + max_ber2 = 0.1 + tolerance_ber = 0.01 + tolerance_ber2 = 0.005 + tolerance_tbits = 1000 + tolerance_terrs = 50 + tolerance_output_differences = 2 + compare_output = 0 +elif (args.test_opt == "fade"): + max_ber = 0.1 + max_ber2 = 0.1 + tolerance_ber = 0.01 + tolerance_ber2 = 0.005 + tolerance_tbits = 1000 + tolerance_terrs = 200 + tolerance_output_differences = 5 + compare_output = 0 + pass +elif (args.test_opt == "profile"): + tolerance_output_differences = 1 + pass +elif (args.test_opt == "ldpc"): + pass +elif (args.test_opt == "ldpc_AWGN"): + max_ber = 0.1 + max_ber2 = 0.01 + compare_ber = 0 + compare_output = 0 +elif (args.test_opt == "ldpc_fade"): + max_ber = 0.1 + max_ber2 = 0.01 + compare_ber = 0 + compare_output = 0 + pass +else: + print("Error: Test {} not recognized".format(args.test_opt)) + sys.exit(1) + +#### Check that we are in the test directory: +#### TODO::: + + +#### Read test configuration - a file of '0' or '1' characters +with open("stm_cfg.txt", "r") as f: + config = f.read(8) + config_verbose = (config[0] == '1') + config_testframes = (config[1] == '1') + config_ldpc_en = (config[2] == '1') + config_log_payload_syms = (config[3] == '1') + config_profile = (config[4] == '1') + + +#### +fails = 0 + + +if (config_testframes): + #### BER checks - log output looks like this, for non-ldpc: + # BER......: 0.1951 Tbits: 14994 Terrs: 2926 + # BER2.....: 0.2001 Tbits: 10234 Terrs: 2048 + # + # Or this, for ldpc: + # BER......: 0.0000 Tbits: 15008 Terrs: 0 + # Coded BER: 0.0000 Tbits: 7504 Terrs: 0 + # + # HACK: store "Coded BER" info as BER2. + + print("\nBER checks") + + # Read ref log + print("Reference") + with open("ref_gen_log.txt", "r") as f: + for line in f: + if (line[0:4] == "BER2"): + print(line, end="") + _, ref_ber2, _, ref_tbits2, _, ref_terrs2 = line.split() + elif (line[0:3] == "BER"): + print(line, end="") + _, ref_ber, _, ref_tbits, _, ref_terrs, _, ref_tpackets = line.split() + elif (line[0:9] == "Coded BER"): + print(line, end="") + _, _, ref_ber2, _, ref_tbits2, _, ref_terrs2 = line.split() + + # Strings to integers + ref_ber = float(ref_ber) + ref_tbits = int(ref_tbits) + ref_terrs = int(ref_terrs) + ref_ber2 = float(ref_ber2) + ref_tbits2 = int(ref_tbits2) + ref_terrs2 = int(ref_terrs2) + + # Read stm log + print("Target") + with open("stdout.log", "r") as f: + for line in f: + if (line[0:4] == "BER2"): + print(line, end="") + _, tgt_ber2, _, tgt_tbits2, _, tgt_terrs2 = line.split() + elif (line[0:3] == "BER"): + print(line, end="") + _, tgt_ber, _, tgt_tbits, _, tgt_terrs = line.split() + elif (line[0:9] == "Coded BER"): + print(line, end="") + _, _, tgt_ber2, _, tgt_tbits2, _, tgt_terrs2 = line.split() + # Strings to integers + tgt_ber = float(tgt_ber) + tgt_tbits = int(tgt_tbits) + tgt_terrs = int(tgt_terrs) + tgt_ber2 = float(tgt_ber2) + tgt_tbits2 = int(tgt_tbits2) + tgt_terrs2 = int(tgt_terrs2) + + # simple hack to tolerate zero bits > NAN + if (math.isnan(ref_ber2)): ref_ber2 = 0 + if (math.isnan(tgt_ber2)): tgt_ber2 = 0 + + ## Max BER values + if ((tgt_ber > max_ber) or (tgt_ber2 > max_ber2)): + fails += 1 + print("FAIL: max BER") + else: + print("PASS: max BER") + + ## Compare BER values + if (compare_ber): + chk_tolerance_ber = abs(ref_ber - tgt_ber) + chk_tolerance_tbits = abs(ref_tbits - tgt_tbits) + chk_tolerance_terrs = abs(ref_terrs - tgt_terrs) + chk_tolerance_ber2 = abs(ref_ber2 - tgt_ber2) + chk_tolerance_tbits2 = abs(ref_tbits2 - tgt_tbits2) + chk_tolerance_terrs2 = abs(ref_terrs2 - tgt_terrs2) + passes = True + + if (chk_tolerance_ber > tolerance_ber): + print("fail tolerance_ber {} > {}". + format(chk_tolerance_ber, tolerance_ber)) + passes = False + if (chk_tolerance_tbits > tolerance_tbits): + print("fail tolerance_tbits {} > {}". + format(chk_tolerance_tbits, tolerance_tbits)) + passes = False + if (chk_tolerance_terrs > tolerance_terrs): + print("fail tolerance_terrs {} > {}". + format(chk_tolerance_terrs, tolerance_terrs)) + passes = False + if (ref_tbits2 == 0): + if (chk_tolerance_ber2 > tolerance_ber2): + print("fail tolerance_ber2 {} > {}". + format(chk_tolerance_ber2, tolerance_ber2)) + passes = False + if (chk_tolerance_tbits2 > tolerance_tbits): + print("fail tolerance_tbits2 {} > {}". + format(chk_tolerance_tbits2, tolerance_tbits)) + passes = False + if (chk_tolerance_terrs2 > tolerance_terrs): + print("fail tolerance_terrs2 {} > {}". + format(chk_tolerance_terrs2, tolerance_terrs)) + passes = False + + if (passes): + print("PASS: BER compare") + else: + fails += 1 + print("FAIL: BER compare") + + # end Compare BER + # end BER checks + +#### Output differences +if (compare_output): + + print("\nOutput checks") + + # Output is a binary file of bytes whose values are 0x00 or 0x01. + with open("ref_demod_out.raw", "rb") as f: ref_out_bytes = f.read() + with open("stm_out.raw", "rb") as f: tgt_out_bytes = f.read() + if (len(ref_out_bytes) != len(tgt_out_bytes)): + fails += 1 + print("FAIL Output, length mismatch") + else: + output_diffs = 0 + for i in range(len(ref_out_bytes)): + fnum = math.floor(i/Nbitsperframe) + bnum = i - (fnum * Nbitsperframe) + # Both legal values?? + if (ref_out_bytes[i] > 1): + print("Error: Output frame {} byte {} not 0 or 1 in reference data".format(fnum, bnum)) + fails += 1 + if (tgt_out_bytes[i] > 1): + print("Error: Output frame {} byte {} not 0 or 1 in target data".format(fnum, bnum)) + fails += 1 + # Match?? + if (ref_out_bytes[i] != tgt_out_bytes[i]): + print("Output frame {} byte {} mismatch: ref={} tgt={}".format( + fnum, bnum, ref_out_bytes[i], tgt_out_bytes[i])) + output_diffs += 1 + # end for i + if (output_diffs > tolerance_output_differences): + print("FAIL: Output Differences = {}".format(output_diffs)) + fails += 1 + else: + print("PASS: Output Differences = {}".format(output_diffs)) + # end not length mismatch + + + #### Syms data + if (config_log_payload_syms): + print("\nSyms and Amps checks") + + fref = open("ofdm_demod_ref_log.txt", "r") + fdiag = open("stm_diag.raw", "rb") + + ref_data = read_octave_text(fref) + (tgt_syms, tgt_amps) = read_tgt_syms(fdiag) + fdiag.close() + write_syms_as_octave(tgt_syms, tgt_amps) # for manual debug... + + # Find smallest common subset + hgt = min(tgt_syms.shape[0], ref_data["payload_syms_log_c"].shape[0]) + wid = min(tgt_syms.shape[1], ref_data["payload_syms_log_c"].shape[1]) + + ref_syms = ref_data["payload_syms_log_c"][:hgt][:wid] + ref_amps = ref_data["payload_amps_log_c"][:hgt][:wid] + tgt_syms= tgt_syms[:hgt][:wid] + tgt_amps= tgt_amps[:hgt][:wid] + + # Eliminate trailing rows of all zeros + # Sum the rows to find rows of all zeros + row_sums = ref_syms.sum(axis=1) + tgt_syms.sum(axis=1) + nonzeros = row_sums.nonzero() + last_nonzero = nonzeros[0][-1] + # stop index is 1 past the last!! + # and use the Magnitude of the complex values + ref_syms = np.abs(ref_syms[:last_nonzero+1]) + ref_amps = np.abs(ref_amps[:last_nonzero+1]) + tgt_syms = np.abs(tgt_syms[:last_nonzero+1]) + tgt_amps = np.abs(tgt_amps[:last_nonzero+1]) + + # Differences - Syms + #diffs_syms = np.abs(ref_syms - tgt_syms) # This is the mag of complex + diffs_syms = np.abs(np.divide((ref_syms - tgt_syms), ref_syms, + where=(ref_syms!=0))) + print("Minimum syms difference = {:.6f}".format(np.amin(diffs_syms))) + print("Maximum syms difference = {:.6f}".format(np.amax(diffs_syms))) + print("Average syms difference = {:.6f}".format(np.average(diffs_syms))) + if (args.verbose): # Print top 10 differences + diffs_syms_sorted_indexes = (diffs_syms).argsort(axis=None)[::-1] + print(" Top 10 differences") + for i in range(10): + j = diffs_syms_sorted_indexes[i] + print(" #{} @{}: {} {} = {:.6f}".format( + i, j, + ref_syms.flatten()[j], tgt_syms.flatten()[j], diffs_syms.flatten()[j]) + ) + # Errors are differences > tolerance_syms + errors_syms = diffs_syms - tolerance_syms + errors_syms[errors_syms < 0.0] = 0.0 + num_errors_syms = np.count_nonzero(errors_syms) + error_rows_syms = np.amax(errors_syms, axis=1) + num_error_rows_syms = np.count_nonzero(error_rows_syms) + print("") + print("{} symbol errors on {} rows".format(num_errors_syms, num_error_rows_syms)) + + # Differences - Amps + diffs_amps = np.abs(np.divide((ref_amps - tgt_amps), ref_amps, + where=(ref_amps!=0))) + print("Minimum amps difference = {:.6f}".format(np.amin(diffs_amps))) + print("Maximum amps difference = {:.6f}".format(np.amax(diffs_amps))) + print("Average amps difference = {:.6f}".format(np.average(diffs_amps))) + if (args.verbose): # Print top 10 differences + diffs_amps_sorted_indexes = (diffs_amps).argsort(axis=None)[::-1] + print(" Top 10 differences") + for i in range(10): + j = diffs_amps_sorted_indexes[i] + print(" #{} @{}: {} {} = {:.6f}".format( + i, j, + ref_amps.flatten()[j], tgt_amps.flatten()[j], diffs_amps.flatten()[j]) + ) + + # Errors are differences > tolerance_syms + errors_amps = diffs_amps - tolerance_amps + errors_amps[errors_amps < 0.0] = 0.0 + num_errors_amps = np.count_nonzero(errors_amps) + error_rows_amps = np.amax(errors_amps, axis=1) + num_error_rows_amps = np.count_nonzero(error_rows_amps) + print("") + print("{} Amplitude errors on {} rows".format(num_errors_amps, num_error_rows_amps)) + # End compare_output + + +#### Profile +if (config_profile): + print("\nProfile:") + with open("stdout.log", "r") as f: + sum_profiles.sum_profiles(f, 100) + + print("\nStack:") + with open("stdout.txt", "r") as f: + for line in f: + if (line.startswith("Max stack")): + print(line) + + +#### Print final status message +if (fails): print("\nTest FAILED!") +else: print("\nTest PASSED") + +sys.exit(fails) diff --git a/libcodec2-android/src/codec2/stm32/unittest/scripts/tst_ofdm_demod_setup b/libcodec2-android/src/codec2/stm32/unittest/scripts/tst_ofdm_demod_setup new file mode 100755 index 0000000..f00d53d --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/unittest/scripts/tst_ofdm_demod_setup @@ -0,0 +1,102 @@ +#!/bin/bash +# +# tst_ofdm_demod_setup +# +# Setup input and reference data for one of several versions of this test. + +# Find the scripts directory +SCRIPTS="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )" + +# Setup common variables +source $SCRIPTS/run_tests_common.sh + +# RUN_DIR - Directory where test will be run +RUN_DIR="${UNITTEST_BASE}/test_run/${FULL_TEST_NAME}" + +# Call common setup function to make the directory +setup_common "${RUN_DIR}" + +# Change to test directory +cd "${RUN_DIR}" + + +##################################################################### +## Test SETUP actions: + +case "${TEST_OPT}" in + + quick ) + # Config is , , , + echo "01000000" > stm_cfg.txt + ofdm_mod --in /dev/zero --out stm_in.raw --testframes 10 > setup.log 2>&1 + ofdm_demod --in stm_in.raw --out ref_demod_out.raw --log ofdm_demod_ref_log.txt \ + --testframes --verbose 1 > ref_gen_log.txt 2>&1 + ;; + + ideal ) + # Config is , , , + echo "01000000" > stm_cfg.txt + ofdm_mod --in /dev/zero --out stm_in.raw --testframes 10 > setup.log 2>&1 + ofdm_demod --in stm_in.raw --out ref_demod_out.raw --log ofdm_demod_ref_log.txt \ + --testframes --verbose 1 > ref_gen_log.txt 2>&1 + ;; + + AWGN ) + # Config is , , , + echo "11000000" > stm_cfg.txt + ofdm_mod --in /dev/zero --out mod_bits.raw --testframes 10 > setup.log 2>&1 + cohpsk_ch mod_bits.raw stm_in.raw -20 --Fs 8000 -f -5 \ + --raw_dir ${CODEC2_BASE}/raw >> setup.log 2>&1 + ofdm_demod --in stm_in.raw --out ref_demod_out.raw --log ofdm_demod_ref_log.txt \ + --testframes --verbose 1 > ref_gen_log.txt 2>&1 + ;; + + fade ) + # Config is , , , + echo "11000000" > stm_cfg.txt + ofdm_mod --in /dev/zero --out mod_bits.raw --testframes 60 > setup.log 2>&1 + cohpsk_ch mod_bits.raw stm_in.raw -24.5 --Fs 8000 -f -10 --fast \ + --raw_dir ${CODEC2_BASE}/raw >> setup.log 2>&1 + ofdm_demod --in stm_in.raw --out ref_demod_out.raw --log ofdm_demod_ref_log.txt \ + --testframes --verbose 1 > ref_gen_log.txt 2>&1 + ;; + + profile ) + # Config is , , , + echo "00001000" > stm_cfg.txt + ofdm_mod --in /dev/zero --out mod_bits.raw --testframes 100 > setup.log 2>&1 + cohpsk_ch mod_bits.raw stm_in.raw -20 --Fs 8000 -f -10 --fast \ + --raw_dir ${CODEC2_BASE}/raw >> setup.log 2>&1 + ofdm_demod --in stm_in.raw --out ref_demod_out.raw --log ofdm_demod_ref_log.txt \ + --testframes --verbose 1 > ref_gen_log.txt 2>&1 + ;; + + ldpc ) + # Config is , , , + echo "01110000" > stm_cfg.txt + ofdm_mod --in /dev/zero --out stm_in.raw --testframes 1 --ldpc 1 > setup.log 2>&1 + ofdm_demod --in stm_in.raw --out ref_demod_out.raw --log ofdm_demod_ref_log.txt \ + --testframes --ldpc 1 --verbose 1 > ref_gen_log.txt 2>&1 + ;; + + ldpc_AWGN ) + # Config is , , , + echo "01110000" > stm_cfg.txt + ofdm_mod --in /dev/zero --out mod_bits.raw --testframes 30 --ldpc 1 > setup.log 2>&1 + cohpsk_ch mod_bits.raw stm_in.raw -20 --Fs 8000 -f -10 \ + --raw_dir ${CODEC2_BASE}/raw >> setup.log 2>&1 + ofdm_demod --in stm_in.raw --out ref_demod_out.raw --log ofdm_demod_ref_log.txt \ + --testframes --ldpc 1 --verbose 1 > ref_gen_log.txt 2>&1 + ;; + + ldpc_fade ) + # Config is , , , + echo "01110000" > stm_cfg.txt + ofdm_mod --in /dev/zero --out mod_bits.raw --testframes 120 --ldpc 1 > setup.log 2>&1 + cohpsk_ch mod_bits.raw stm_in.raw -30 --Fs 8000 -f -10 --fast \ + --raw_dir ${CODEC2_BASE}/raw >> setup.log 2>&1 + ofdm_demod --in stm_in.raw --out ref_demod_out.raw --log ofdm_demod_ref_log.txt \ + --testframes --ldpc 1 --verbose 1 > ref_gen_log.txt 2>&1; + ;; + + esac diff --git a/libcodec2-android/src/codec2/stm32/unittest/scripts/tst_ofdm_mod_check b/libcodec2-android/src/codec2/stm32/unittest/scripts/tst_ofdm_mod_check new file mode 100755 index 0000000..d3b45bf --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/unittest/scripts/tst_ofdm_mod_check @@ -0,0 +1,65 @@ +#!/bin/bash -x +# +# tst_ofdm_mod_check +# +# Setup input and reference data for one of several versions of this test. + +# Find the scripts directory +SCRIPTS="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )" + +# Setup common variables +source $SCRIPTS/run_tests_common.sh + +# RUN_DIR - Directory where test will be run +RUN_DIR="${UNITTEST_BASE}/test_run/${FULL_TEST_NAME}" + +# Call common setup function to make the directory +setup_common "${RUN_DIR}" + +# Change to test directory +cd "${RUN_DIR}" + + +##################################################################### +## Test CHECK actions: + +declare -i Fails=0 + +case "${TEST_OPT}" in + + plain) LDPC="";; + ldpc) LDPC="--ldpc";; + esac + +echo -e "\nReference check" +if ofdm_demod --in ref_mod_out.raw --out ref_ofdm_demod.raw --testframes ${LDPC}; then + echo "Passed" +else + echo "Failed" + let Fails=($Fails + 1) +fi +# +echo -e "\nTarget check" +if ofdm_demod --in mod.raw --out stm_demod.raw --testframes ${LDPC}; then + echo "Passed" +else + echo "Failed" + let Fails=($Fails + 1) +fi +# +echo -e "\nCompare output binary data" +if compare_ints -s -b2 -t3 ref_mod_out.raw mod.raw; then + echo "Passed" +else + echo "Failed" + let Fails=($Fails + 1) +fi +# + +if (( $Fails == 0 )); then + echo -e "\nTest PASSED" +else + echo -e "\nTest FAILED!" +fi + +exit $Fails diff --git a/libcodec2-android/src/codec2/stm32/unittest/scripts/tst_ofdm_mod_setup b/libcodec2-android/src/codec2/stm32/unittest/scripts/tst_ofdm_mod_setup new file mode 100755 index 0000000..552a1c0 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/unittest/scripts/tst_ofdm_mod_setup @@ -0,0 +1,42 @@ +#!/bin/bash +# +# tst_ofdm_mod_setup +# +# Setup input and reference data for one of several versions of this test. + +# Find the scripts directory +SCRIPTS="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )" + +# Setup common variables +source $SCRIPTS/run_tests_common.sh + +# RUN_DIR - Directory where test will be run +RUN_DIR="${UNITTEST_BASE}/test_run/${FULL_TEST_NAME}" + +# Call common setup function to make the directory +setup_common "${RUN_DIR}" + +# Change to test directory +cd "${RUN_DIR}" + + +##################################################################### +## Test SETUP actions: + +case "${TEST_OPT}" in + + plain ) + # Config is , , , + echo "00000000" > stm_cfg.txt + ofdm_get_test_bits --out stm_in.raw --frames 10 --verbose > setup.log 2>&1 + ofdm_mod --in stm_in.raw --out ref_mod_out.raw --verbose 1 > ref_gen_log.txt 2>&1 + ;; + + ldpc ) + # Config is , , , + echo "00100000" > stm_cfg.txt + ofdm_get_test_bits --out stm_in.raw --frames 10 --ldpc --verbose > setup.log 2>&1 + ofdm_mod --in stm_in.raw --out ref_mod_out.raw --ldpc --verbose 1 > ref_gen_log.txt 2>&1 + ;; + + esac diff --git a/libcodec2-android/src/codec2/stm32/unittest/src/CMakeLists.txt b/libcodec2-android/src/codec2/stm32/unittest/src/CMakeLists.txt new file mode 100644 index 0000000..04ba66e --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/unittest/src/CMakeLists.txt @@ -0,0 +1,141 @@ +set(STM32F4_SYSTEM_SRCS +../../src/system_stm32f4xx.c +../../src/memtools.c +../../src/stm32f4_machdep.c +startup_stm32f4xx.s +) + +list(APPEND SEMIHOSTING_SRCS semihosting.c ${STM32F4_SYSTEM_SRCS}) +list(APPEND SEMIHOSTING_PROFILE_LIBS codec2_prof stm32f4 CMSIS rdimon) +list(APPEND SEMIHOSTING_LIBS codec2 stm32f4 CMSIS rdimon) + +macro(profiledSemihostedBin target) + add_mapped_executable(${target} ${target}.c ${SEMIHOSTING_SRCS}) + target_link_libraries(${target} ${SEMIHOSTING_PROFILE_LIBS}) + target_compile_definitions(${target} PRIVATE "-DPROFILE -DSEMIHOST_USE_STDIO --specs=rdimon.specs") + elf2bin(${target}) +endmacro() + +macro(semihostedBin target) + add_mapped_executable(${target} ${target}.c ${SEMIHOSTING_SRCS}) + target_link_libraries(${target} ${SEMIHOSTING_LIBS}) + target_compile_definitions(${target} PRIVATE "-DSEMIHOST_USE_STDIO --specs=rdimon.specs") + elf2bin(${target}) +endmacro() + +semihostedBin(tst_api_tx) +semihostedBin(tst_codec2_enc) +semihostedBin(tst_codec2_dec) +semihostedBin(tst_ofdm_mod) +profiledSemihostedBin(tst_ofdm_demod) +semihostedBin(tst_ldpc_enc) +semihostedBin(tst_ldpc_dec) +semihostedBin(tst_api_mod) +profiledsemihostedBin(tst_api_demod) +semihostedBin(tst_semihost) +semihostedBin(tst_codec2_fft_init) + + +add_test(NAME check_ram_limit + COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/../scripts/check_ram_limit + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) + +add_test(NAME tst_ldpc_enc + COMMAND sh -c "./run_stm32_tst tst_ldpc_enc ${UT_PARAMS}" + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../scripts) + +add_test(NAME tst_ldpc_dec_ideal + COMMAND sh -c "./run_stm32_tst tst_ldpc_dec ideal ${UT_PARAMS}" + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../scripts) + +add_test(NAME tst_ldpc_dec_noise + COMMAND sh -c "./run_stm32_tst tst_ldpc_dec noise ${UT_PARAMS}" + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../scripts) +set_tests_properties(tst_ldpc_dec_noise PROPERTIES DEPENDS tst_ldpc_dec_ideal) + +add_test(NAME tst_ofdm_mod_plain + COMMAND sh -c "./run_stm32_tst tst_ofdm_mod plain ${UT_PARAMS}" + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../scripts) + +add_test(NAME tst_ofdm_mod_ldpc + COMMAND sh -c "./run_stm32_tst tst_ofdm_mod ldpc ${UT_PARAMS}" + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../scripts) +set_tests_properties(tst_ofdm_mod_ldpc PROPERTIES DEPENDS tst_ofdm_mod_plain) + +add_test(NAME tst_ofdm_demod_quick + COMMAND sh -c "./run_stm32_tst tst_ofdm_demod quick ${UT_PARAMS}" + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../scripts) + +add_test(NAME tst_ofdm_demod_ideal + COMMAND sh -c "./run_stm32_tst tst_ofdm_demod ideal ${UT_PARAMS}" + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../scripts) +set_tests_properties(tst_ofdm_demod_ideal PROPERTIES DEPENDS tst_ofdm_demod_quick) + +add_test(NAME tst_ofdm_demod_AWGN + COMMAND sh -c "./run_stm32_tst tst_ofdm_demod AWGN ${UT_PARAMS}" + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../scripts) +set_tests_properties(tst_ofdm_demod_AWGN PROPERTIES DEPENDS tst_ofdm_demod_quick) + +add_test(NAME tst_ofdm_demod_fade + COMMAND sh -c "./run_stm32_tst tst_ofdm_demod fade ${UT_PARAMS}" + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../scripts) +set_tests_properties(tst_ofdm_demod_fade PROPERTIES DEPENDS tst_ofdm_demod_quick) + +add_test(NAME tst_ofdm_demod_ldpc + COMMAND sh -c "./run_stm32_tst tst_ofdm_demod ldpc ${UT_PARAMS}" + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../scripts) +set_tests_properties(tst_ofdm_demod_ldpc PROPERTIES DEPENDS tst_ofdm_demod_quick) + +add_test(NAME tst_ofdm_demod_ldpc_AWGN + COMMAND sh -c "./run_stm32_tst tst_ofdm_demod ldpc_AWGN ${UT_PARAMS}" + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../scripts) +set_tests_properties(tst_ofdm_demod_ldpc_AWGN PROPERTIES DEPENDS tst_ofdm_demod_quick) + +add_test(NAME tst_ofdm_demod_ldpc_fade + COMMAND sh -c "./run_stm32_tst tst_ofdm_demod ldpc_fade ${UT_PARAMS}" + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../scripts) +set_tests_properties(tst_ofdm_demod_ldpc_fade PROPERTIES DEPENDS tst_ofdm_demod_quick) + +add_test(NAME tst_codec2_enc_1300 + COMMAND sh -c "./run_stm32_tst tst_codec2_enc 1300 ${UT_PARAMS}" + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../scripts) + +add_test(NAME tst_codec2_enc_700C + COMMAND sh -c "./run_stm32_tst tst_codec2_enc 700C ${UT_PARAMS}" + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../scripts) +set_tests_properties(tst_codec2_enc_700C PROPERTIES DEPENDS tst_codec2_enc_1300) + + +add_test(NAME tst_codec2_dec_1300 + COMMAND sh -c "./run_stm32_tst tst_codec2_dec 1300 ${UT_PARAMS}" + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../scripts) + +add_test(NAME tst_codec2_dec_700C + COMMAND sh -c "./run_stm32_tst tst_codec2_dec 700C ${UT_PARAMS} " + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../scripts) +set_tests_properties(tst_codec2_dec_700C PROPERTIES DEPENDS tst_codec2_dec_1300) + +add_test(NAME tst_api_mod_700D_TEST + COMMAND sh -c "./run_stm32_tst tst_api_mod 700D_TEST ${UT_PARAMS}" + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../scripts) + +add_test(NAME tst_api_mod_700D_CODEC + COMMAND sh -c "./run_stm32_tst tst_api_mod 700D_CODEC ${UT_PARAMS}" + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../scripts) + +add_test(NAME tst_api_demod_700D_plain_test + COMMAND sh -c "./run_stm32_tst tst_api_demod 700D_plain_test ${UT_PARAMS}" + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../scripts) + +add_test(NAME tst_api_demod_700D_AWGN_test + COMMAND sh -c "./run_stm32_tst tst_api_demod 700D_AWGN_test ${UT_PARAMS}" + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../scripts) + +add_test(NAME tst_api_demod_700D_AWGN_codec + COMMAND sh -c "./run_stm32_tst tst_api_demod 700D_AWGN_codec ${UT_PARAMS}" + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../scripts) + +add_test(NAME tst_api_demod_1600_plain_codec + COMMAND sh -c "./run_stm32_tst tst_api_demod 1600_plain_codec ${UT_PARAMS}" + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../scripts) + diff --git a/libcodec2-android/src/codec2/stm32/unittest/src/Makefile b/libcodec2-android/src/codec2/stm32/unittest/src/Makefile new file mode 100644 index 0000000..5b0ed14 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/unittest/src/Makefile @@ -0,0 +1,745 @@ +# Makefile for stm32f4 Codec 2 unittest programs + +# Include local definitions if they exist. +-include local.mak + +################################################### + +FLOAT_TYPE=hard + +################################################### + +CROSS_COMPILE ?= arm-none-eabi- +CC=$(BINPATH)$(CROSS_COMPILE)gcc +AS=$(BINPATH)$(CROSS_COMPILE)as +OBJCOPY=$(BINPATH)$(CROSS_COMPILE)objcopy +SIZE=$(BINPATH)$(CROSS_COMPILE)size +SUDO ?= sudo + +################################################### + +CFLAGS = -std=gnu11 -O2 -g -Wall -DSTM32F40_41xxx -DCORTEX_M4 +CFLAGS += -mlittle-endian -mthumb -mthumb-interwork -nostartfiles -mcpu=cortex-m4 -Wno-unused-function + +ifeq ($(FLOAT_TYPE), hard) +CFLAGS += -fsingle-precision-constant -Wdouble-promotion +CFLAGS += -fdata-sections -ffunction-sections -Xlinker --gc-sections +CFLAGS += -mfpu=fpv4-sp-d16 -mfloat-abi=hard -D__FPU_PRESENT=1 -D__FPU_USED=1 +else +CFLAGS += -msoft-float +endif + +#CFLAGS += -DDEBUG_ALLOC + +################################################### +# STM32F4 Standard Peripheral Library + +PERIPHLIBDIR ?= STM32F4xx_DSP_StdPeriph_Lib +CMSIS = $(PERIPHLIBDIR)/Libraries/CMSIS +STM32F4LIB = $(PERIPHLIBDIR)/Libraries/STM32F4xx_StdPeriph_Driver +STM32F4TEMPLATE = $(PERIPHLIBDIR)/Project/STM32F4xx_StdPeriph_Templates +DSPLIB = $(PERIPHLIBDIR)/Libraries/CMSIS/DSP_Lib + +CFLAGS += -DUSE_STDPERIPH_DRIVER -I$(STM32F4LIB)/inc -I$(STM32F4TEMPLATE) +CFLAGS += -I$(CMSIS)/Include -I$(CMSIS)/Device/ST/STM32F4xx/Include +CFLAGS += -DARM_MATH_CM4 +CFLAGS += -DFDV_ARM_MATH +CFLAGS += -DSEMIHOST_USE_STDIO + +# Precious files that should be preserved at all cost! +.PRECIOUS: dl/$(PERIPHLIBZIP) + +STM32F4LIB_SRCS=\ +$(STM32F4LIB)/src/misc.c\ +$(STM32F4LIB)/src/stm32f4xx_adc.c\ +$(STM32F4LIB)/src/stm32f4xx_can.c\ +$(STM32F4LIB)/src/stm32f4xx_cec.c\ +$(STM32F4LIB)/src/stm32f4xx_crc.c\ +$(STM32F4LIB)/src/stm32f4xx_cryp_aes.c\ +$(STM32F4LIB)/src/stm32f4xx_cryp.c\ +$(STM32F4LIB)/src/stm32f4xx_cryp_des.c\ +$(STM32F4LIB)/src/stm32f4xx_cryp_tdes.c\ +$(STM32F4LIB)/src/stm32f4xx_dac.c\ +$(STM32F4LIB)/src/stm32f4xx_dbgmcu.c\ +$(STM32F4LIB)/src/stm32f4xx_dcmi.c\ +$(STM32F4LIB)/src/stm32f4xx_dma2d.c\ +$(STM32F4LIB)/src/stm32f4xx_dma.c\ +$(STM32F4LIB)/src/stm32f4xx_exti.c\ +$(STM32F4LIB)/src/stm32f4xx_flash.c\ +$(STM32F4LIB)/src/stm32f4xx_flash_ramfunc.c\ +$(STM32F4LIB)/src/stm32f4xx_fmpi2c.c\ +$(STM32F4LIB)/src/stm32f4xx_fsmc.c\ +$(STM32F4LIB)/src/stm32f4xx_gpio.c\ +$(STM32F4LIB)/src/stm32f4xx_hash.c\ +$(STM32F4LIB)/src/stm32f4xx_hash_md5.c\ +$(STM32F4LIB)/src/stm32f4xx_hash_sha1.c\ +$(STM32F4LIB)/src/stm32f4xx_i2c.c\ +$(STM32F4LIB)/src/stm32f4xx_iwdg.c\ +$(STM32F4LIB)/src/stm32f4xx_ltdc.c\ +$(STM32F4LIB)/src/stm32f4xx_pwr.c\ +$(STM32F4LIB)/src/stm32f4xx_qspi.c\ +$(STM32F4LIB)/src/stm32f4xx_rcc.c\ +$(STM32F4LIB)/src/stm32f4xx_rng.c\ +$(STM32F4LIB)/src/stm32f4xx_rtc.c\ +$(STM32F4LIB)/src/stm32f4xx_sai.c\ +$(STM32F4LIB)/src/stm32f4xx_sdio.c\ +$(STM32F4LIB)/src/stm32f4xx_spdifrx.c\ +$(STM32F4LIB)/src/stm32f4xx_spi.c\ +$(STM32F4LIB)/src/stm32f4xx_syscfg.c\ +$(STM32F4LIB)/src/stm32f4xx_tim.c\ +$(STM32F4LIB)/src/stm32f4xx_usart.c\ +$(STM32F4LIB)/src/stm32f4xx_wwdg.c + +STM32F4LIB_OBJS = $(STM32F4LIB_SRCS:.c=.o) + +CMSIS_SRCS=\ +$(CMSIS)/DSP_Lib/Source/BasicMathFunctions/arm_abs_f32.c\ +$(CMSIS)/DSP_Lib/Source/BasicMathFunctions/arm_abs_q15.c\ +$(CMSIS)/DSP_Lib/Source/BasicMathFunctions/arm_abs_q31.c\ +$(CMSIS)/DSP_Lib/Source/BasicMathFunctions/arm_abs_q7.c\ +$(CMSIS)/DSP_Lib/Source/BasicMathFunctions/arm_add_f32.c\ +$(CMSIS)/DSP_Lib/Source/BasicMathFunctions/arm_add_q15.c\ +$(CMSIS)/DSP_Lib/Source/BasicMathFunctions/arm_add_q31.c\ +$(CMSIS)/DSP_Lib/Source/BasicMathFunctions/arm_add_q7.c\ +$(CMSIS)/DSP_Lib/Source/BasicMathFunctions/arm_dot_prod_f32.c\ +$(CMSIS)/DSP_Lib/Source/BasicMathFunctions/arm_dot_prod_q15.c\ +$(CMSIS)/DSP_Lib/Source/BasicMathFunctions/arm_dot_prod_q31.c\ +$(CMSIS)/DSP_Lib/Source/BasicMathFunctions/arm_dot_prod_q7.c\ +$(CMSIS)/DSP_Lib/Source/BasicMathFunctions/arm_mult_f32.c\ +$(CMSIS)/DSP_Lib/Source/BasicMathFunctions/arm_mult_q15.c\ +$(CMSIS)/DSP_Lib/Source/BasicMathFunctions/arm_mult_q31.c\ +$(CMSIS)/DSP_Lib/Source/BasicMathFunctions/arm_mult_q7.c\ +$(CMSIS)/DSP_Lib/Source/BasicMathFunctions/arm_negate_f32.c\ +$(CMSIS)/DSP_Lib/Source/BasicMathFunctions/arm_negate_q15.c\ +$(CMSIS)/DSP_Lib/Source/BasicMathFunctions/arm_negate_q31.c\ +$(CMSIS)/DSP_Lib/Source/BasicMathFunctions/arm_negate_q7.c\ +$(CMSIS)/DSP_Lib/Source/BasicMathFunctions/arm_offset_f32.c\ +$(CMSIS)/DSP_Lib/Source/BasicMathFunctions/arm_offset_q15.c\ +$(CMSIS)/DSP_Lib/Source/BasicMathFunctions/arm_offset_q31.c\ +$(CMSIS)/DSP_Lib/Source/BasicMathFunctions/arm_offset_q7.c\ +$(CMSIS)/DSP_Lib/Source/BasicMathFunctions/arm_scale_f32.c\ +$(CMSIS)/DSP_Lib/Source/BasicMathFunctions/arm_scale_q15.c\ +$(CMSIS)/DSP_Lib/Source/BasicMathFunctions/arm_scale_q31.c\ +$(CMSIS)/DSP_Lib/Source/BasicMathFunctions/arm_scale_q7.c\ +$(CMSIS)/DSP_Lib/Source/BasicMathFunctions/arm_shift_q15.c\ +$(CMSIS)/DSP_Lib/Source/BasicMathFunctions/arm_shift_q31.c\ +$(CMSIS)/DSP_Lib/Source/BasicMathFunctions/arm_shift_q7.c\ +$(CMSIS)/DSP_Lib/Source/BasicMathFunctions/arm_sub_f32.c\ +$(CMSIS)/DSP_Lib/Source/BasicMathFunctions/arm_sub_q15.c\ +$(CMSIS)/DSP_Lib/Source/BasicMathFunctions/arm_sub_q31.c\ +$(CMSIS)/DSP_Lib/Source/BasicMathFunctions/arm_sub_q7.c\ +$(CMSIS)/DSP_Lib/Source/CommonTables/arm_common_tables.c\ +$(CMSIS)/DSP_Lib/Source/CommonTables/arm_const_structs.c\ +$(CMSIS)/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_conj_f32.c\ +$(CMSIS)/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_conj_q15.c\ +$(CMSIS)/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_conj_q31.c\ +$(CMSIS)/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_dot_prod_f32.c\ +$(CMSIS)/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_dot_prod_q15.c\ +$(CMSIS)/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_dot_prod_q31.c\ +$(CMSIS)/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_mag_f32.c\ +$(CMSIS)/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_mag_q15.c\ +$(CMSIS)/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_mag_q31.c\ +$(CMSIS)/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_mag_squared_f32.c\ +$(CMSIS)/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_mag_squared_q15.c\ +$(CMSIS)/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_mag_squared_q31.c\ +$(CMSIS)/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_mult_cmplx_f32.c\ +$(CMSIS)/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_mult_cmplx_q15.c\ +$(CMSIS)/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_mult_cmplx_q31.c\ +$(CMSIS)/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_mult_real_f32.c\ +$(CMSIS)/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_mult_real_q15.c\ +$(CMSIS)/DSP_Lib/Source/ComplexMathFunctions/arm_cmplx_mult_real_q31.c\ +$(CMSIS)/DSP_Lib/Source/ControllerFunctions/arm_pid_init_f32.c\ +$(CMSIS)/DSP_Lib/Source/ControllerFunctions/arm_pid_init_q15.c\ +$(CMSIS)/DSP_Lib/Source/ControllerFunctions/arm_pid_init_q31.c\ +$(CMSIS)/DSP_Lib/Source/ControllerFunctions/arm_pid_reset_f32.c\ +$(CMSIS)/DSP_Lib/Source/ControllerFunctions/arm_pid_reset_q15.c\ +$(CMSIS)/DSP_Lib/Source/ControllerFunctions/arm_pid_reset_q31.c\ +$(CMSIS)/DSP_Lib/Source/ControllerFunctions/arm_sin_cos_f32.c\ +$(CMSIS)/DSP_Lib/Source/ControllerFunctions/arm_sin_cos_q31.c\ +$(CMSIS)/DSP_Lib/Source/FastMathFunctions/arm_cos_f32.c\ +$(CMSIS)/DSP_Lib/Source/FastMathFunctions/arm_cos_q15.c\ +$(CMSIS)/DSP_Lib/Source/FastMathFunctions/arm_cos_q31.c\ +$(CMSIS)/DSP_Lib/Source/FastMathFunctions/arm_sin_f32.c\ +$(CMSIS)/DSP_Lib/Source/FastMathFunctions/arm_sin_q15.c\ +$(CMSIS)/DSP_Lib/Source/FastMathFunctions/arm_sin_q31.c\ +$(CMSIS)/DSP_Lib/Source/FastMathFunctions/arm_sqrt_q15.c\ +$(CMSIS)/DSP_Lib/Source/FastMathFunctions/arm_sqrt_q31.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_df1_32x64_init_q31.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_df1_32x64_q31.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_df1_f32.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_df1_fast_q15.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_df1_fast_q31.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_df1_init_f32.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_df1_init_q15.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_df1_init_q31.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_df1_q15.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_df1_q31.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_df2T_f32.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_df2T_f64.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_df2T_init_f32.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_df2T_init_f64.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_stereo_df2T_f32.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_biquad_cascade_stereo_df2T_init_f32.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_conv_f32.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_conv_fast_opt_q15.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_conv_fast_q15.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_conv_fast_q31.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_conv_opt_q15.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_conv_opt_q7.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_conv_partial_f32.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_conv_partial_fast_opt_q15.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_conv_partial_fast_q15.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_conv_partial_fast_q31.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_conv_partial_opt_q15.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_conv_partial_opt_q7.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_conv_partial_q15.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_conv_partial_q31.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_conv_partial_q7.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_conv_q15.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_conv_q31.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_conv_q7.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_correlate_f32.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_correlate_fast_opt_q15.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_correlate_fast_q15.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_correlate_fast_q31.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_correlate_opt_q15.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_correlate_opt_q7.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_correlate_q15.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_correlate_q31.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_correlate_q7.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_fir_decimate_f32.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_fir_decimate_fast_q15.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_fir_decimate_fast_q31.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_fir_decimate_init_f32.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_fir_decimate_init_q15.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_fir_decimate_init_q31.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_fir_decimate_q15.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_fir_decimate_q31.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_fir_f32.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_fir_fast_q15.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_fir_fast_q31.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_fir_init_f32.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_fir_init_q15.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_fir_init_q31.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_fir_init_q7.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_fir_interpolate_f32.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_fir_interpolate_init_f32.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_fir_interpolate_init_q15.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_fir_interpolate_init_q31.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_fir_interpolate_q15.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_fir_interpolate_q31.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_fir_lattice_f32.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_fir_lattice_init_f32.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_fir_lattice_init_q15.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_fir_lattice_init_q31.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_fir_lattice_q15.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_fir_lattice_q31.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_fir_q15.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_fir_q31.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_fir_q7.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_fir_sparse_f32.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_fir_sparse_init_f32.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_fir_sparse_init_q15.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_fir_sparse_init_q31.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_fir_sparse_init_q7.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_fir_sparse_q15.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_fir_sparse_q31.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_fir_sparse_q7.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_iir_lattice_f32.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_iir_lattice_init_f32.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_iir_lattice_init_q15.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_iir_lattice_init_q31.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_iir_lattice_q15.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_iir_lattice_q31.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_lms_f32.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_lms_init_f32.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_lms_init_q15.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_lms_init_q31.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_lms_norm_f32.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_lms_norm_init_f32.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_lms_norm_init_q15.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_lms_norm_init_q31.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_lms_norm_q15.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_lms_norm_q31.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_lms_q15.c\ +$(CMSIS)/DSP_Lib/Source/FilteringFunctions/arm_lms_q31.c\ +$(CMSIS)/DSP_Lib/Source/MatrixFunctions/arm_mat_add_f32.c\ +$(CMSIS)/DSP_Lib/Source/MatrixFunctions/arm_mat_add_q15.c\ +$(CMSIS)/DSP_Lib/Source/MatrixFunctions/arm_mat_add_q31.c\ +$(CMSIS)/DSP_Lib/Source/MatrixFunctions/arm_mat_cmplx_mult_f32.c\ +$(CMSIS)/DSP_Lib/Source/MatrixFunctions/arm_mat_cmplx_mult_q15.c\ +$(CMSIS)/DSP_Lib/Source/MatrixFunctions/arm_mat_cmplx_mult_q31.c\ +$(CMSIS)/DSP_Lib/Source/MatrixFunctions/arm_mat_init_f32.c\ +$(CMSIS)/DSP_Lib/Source/MatrixFunctions/arm_mat_init_q15.c\ +$(CMSIS)/DSP_Lib/Source/MatrixFunctions/arm_mat_init_q31.c\ +$(CMSIS)/DSP_Lib/Source/MatrixFunctions/arm_mat_inverse_f32.c\ +$(CMSIS)/DSP_Lib/Source/MatrixFunctions/arm_mat_inverse_f64.c\ +$(CMSIS)/DSP_Lib/Source/MatrixFunctions/arm_mat_mult_f32.c\ +$(CMSIS)/DSP_Lib/Source/MatrixFunctions/arm_mat_mult_fast_q15.c\ +$(CMSIS)/DSP_Lib/Source/MatrixFunctions/arm_mat_mult_fast_q31.c\ +$(CMSIS)/DSP_Lib/Source/MatrixFunctions/arm_mat_mult_q15.c\ +$(CMSIS)/DSP_Lib/Source/MatrixFunctions/arm_mat_mult_q31.c\ +$(CMSIS)/DSP_Lib/Source/MatrixFunctions/arm_mat_scale_f32.c\ +$(CMSIS)/DSP_Lib/Source/MatrixFunctions/arm_mat_scale_q15.c\ +$(CMSIS)/DSP_Lib/Source/MatrixFunctions/arm_mat_scale_q31.c\ +$(CMSIS)/DSP_Lib/Source/MatrixFunctions/arm_mat_sub_f32.c\ +$(CMSIS)/DSP_Lib/Source/MatrixFunctions/arm_mat_sub_q15.c\ +$(CMSIS)/DSP_Lib/Source/MatrixFunctions/arm_mat_sub_q31.c\ +$(CMSIS)/DSP_Lib/Source/MatrixFunctions/arm_mat_trans_f32.c\ +$(CMSIS)/DSP_Lib/Source/MatrixFunctions/arm_mat_trans_q15.c\ +$(CMSIS)/DSP_Lib/Source/MatrixFunctions/arm_mat_trans_q31.c\ +$(CMSIS)/DSP_Lib/Source/StatisticsFunctions/arm_max_f32.c\ +$(CMSIS)/DSP_Lib/Source/StatisticsFunctions/arm_max_q15.c\ +$(CMSIS)/DSP_Lib/Source/StatisticsFunctions/arm_max_q31.c\ +$(CMSIS)/DSP_Lib/Source/StatisticsFunctions/arm_max_q7.c\ +$(CMSIS)/DSP_Lib/Source/StatisticsFunctions/arm_mean_f32.c\ +$(CMSIS)/DSP_Lib/Source/StatisticsFunctions/arm_mean_q15.c\ +$(CMSIS)/DSP_Lib/Source/StatisticsFunctions/arm_mean_q31.c\ +$(CMSIS)/DSP_Lib/Source/StatisticsFunctions/arm_mean_q7.c\ +$(CMSIS)/DSP_Lib/Source/StatisticsFunctions/arm_min_f32.c\ +$(CMSIS)/DSP_Lib/Source/StatisticsFunctions/arm_min_q15.c\ +$(CMSIS)/DSP_Lib/Source/StatisticsFunctions/arm_min_q31.c\ +$(CMSIS)/DSP_Lib/Source/StatisticsFunctions/arm_min_q7.c\ +$(CMSIS)/DSP_Lib/Source/StatisticsFunctions/arm_power_f32.c\ +$(CMSIS)/DSP_Lib/Source/StatisticsFunctions/arm_power_q15.c\ +$(CMSIS)/DSP_Lib/Source/StatisticsFunctions/arm_power_q31.c\ +$(CMSIS)/DSP_Lib/Source/StatisticsFunctions/arm_power_q7.c\ +$(CMSIS)/DSP_Lib/Source/StatisticsFunctions/arm_rms_f32.c\ +$(CMSIS)/DSP_Lib/Source/StatisticsFunctions/arm_rms_q15.c\ +$(CMSIS)/DSP_Lib/Source/StatisticsFunctions/arm_rms_q31.c\ +$(CMSIS)/DSP_Lib/Source/StatisticsFunctions/arm_std_f32.c\ +$(CMSIS)/DSP_Lib/Source/StatisticsFunctions/arm_std_q15.c\ +$(CMSIS)/DSP_Lib/Source/StatisticsFunctions/arm_std_q31.c\ +$(CMSIS)/DSP_Lib/Source/StatisticsFunctions/arm_var_f32.c\ +$(CMSIS)/DSP_Lib/Source/StatisticsFunctions/arm_var_q15.c\ +$(CMSIS)/DSP_Lib/Source/StatisticsFunctions/arm_var_q31.c\ +$(CMSIS)/DSP_Lib/Source/SupportFunctions/arm_copy_f32.c\ +$(CMSIS)/DSP_Lib/Source/SupportFunctions/arm_copy_q15.c\ +$(CMSIS)/DSP_Lib/Source/SupportFunctions/arm_copy_q31.c\ +$(CMSIS)/DSP_Lib/Source/SupportFunctions/arm_copy_q7.c\ +$(CMSIS)/DSP_Lib/Source/SupportFunctions/arm_fill_f32.c\ +$(CMSIS)/DSP_Lib/Source/SupportFunctions/arm_fill_q15.c\ +$(CMSIS)/DSP_Lib/Source/SupportFunctions/arm_fill_q31.c\ +$(CMSIS)/DSP_Lib/Source/SupportFunctions/arm_fill_q7.c\ +$(CMSIS)/DSP_Lib/Source/SupportFunctions/arm_float_to_q15.c\ +$(CMSIS)/DSP_Lib/Source/SupportFunctions/arm_float_to_q31.c\ +$(CMSIS)/DSP_Lib/Source/SupportFunctions/arm_float_to_q7.c\ +$(CMSIS)/DSP_Lib/Source/SupportFunctions/arm_q15_to_float.c\ +$(CMSIS)/DSP_Lib/Source/SupportFunctions/arm_q15_to_q31.c\ +$(CMSIS)/DSP_Lib/Source/SupportFunctions/arm_q15_to_q7.c\ +$(CMSIS)/DSP_Lib/Source/SupportFunctions/arm_q31_to_float.c\ +$(CMSIS)/DSP_Lib/Source/SupportFunctions/arm_q31_to_q15.c\ +$(CMSIS)/DSP_Lib/Source/SupportFunctions/arm_q31_to_q7.c\ +$(CMSIS)/DSP_Lib/Source/SupportFunctions/arm_q7_to_float.c\ +$(CMSIS)/DSP_Lib/Source/SupportFunctions/arm_q7_to_q15.c\ +$(CMSIS)/DSP_Lib/Source/SupportFunctions/arm_q7_to_q31.c\ +$(CMSIS)/DSP_Lib/Source/TransformFunctions/arm_bitreversal.c\ +$(CMSIS)/DSP_Lib/Source/TransformFunctions/arm_cfft_f32.c\ +$(CMSIS)/DSP_Lib/Source/TransformFunctions/arm_cfft_q15.c\ +$(CMSIS)/DSP_Lib/Source/TransformFunctions/arm_cfft_q31.c\ +$(CMSIS)/DSP_Lib/Source/TransformFunctions/arm_cfft_radix2_f32.c\ +$(CMSIS)/DSP_Lib/Source/TransformFunctions/arm_cfft_radix2_init_f32.c\ +$(CMSIS)/DSP_Lib/Source/TransformFunctions/arm_cfft_radix2_init_q15.c\ +$(CMSIS)/DSP_Lib/Source/TransformFunctions/arm_cfft_radix2_init_q31.c\ +$(CMSIS)/DSP_Lib/Source/TransformFunctions/arm_cfft_radix2_q15.c\ +$(CMSIS)/DSP_Lib/Source/TransformFunctions/arm_cfft_radix2_q31.c\ +$(CMSIS)/DSP_Lib/Source/TransformFunctions/arm_cfft_radix4_f32.c\ +$(CMSIS)/DSP_Lib/Source/TransformFunctions/arm_cfft_radix4_init_f32.c\ +$(CMSIS)/DSP_Lib/Source/TransformFunctions/arm_cfft_radix4_init_q15.c\ +$(CMSIS)/DSP_Lib/Source/TransformFunctions/arm_cfft_radix4_init_q31.c\ +$(CMSIS)/DSP_Lib/Source/TransformFunctions/arm_cfft_radix4_q15.c\ +$(CMSIS)/DSP_Lib/Source/TransformFunctions/arm_cfft_radix4_q31.c\ +$(CMSIS)/DSP_Lib/Source/TransformFunctions/arm_cfft_radix8_f32.c\ +$(CMSIS)/DSP_Lib/Source/TransformFunctions/arm_dct4_f32.c\ +$(CMSIS)/DSP_Lib/Source/TransformFunctions/arm_dct4_init_f32.c\ +$(CMSIS)/DSP_Lib/Source/TransformFunctions/arm_dct4_init_q15.c\ +$(CMSIS)/DSP_Lib/Source/TransformFunctions/arm_dct4_init_q31.c\ +$(CMSIS)/DSP_Lib/Source/TransformFunctions/arm_dct4_q15.c\ +$(CMSIS)/DSP_Lib/Source/TransformFunctions/arm_dct4_q31.c\ +$(CMSIS)/DSP_Lib/Source/TransformFunctions/arm_rfft_f32.c\ +$(CMSIS)/DSP_Lib/Source/TransformFunctions/arm_rfft_fast_f32.c\ +$(CMSIS)/DSP_Lib/Source/TransformFunctions/arm_rfft_fast_init_f32.c\ +$(CMSIS)/DSP_Lib/Source/TransformFunctions/arm_rfft_init_f32.c\ +$(CMSIS)/DSP_Lib/Source/TransformFunctions/arm_rfft_init_q15.c\ +$(CMSIS)/DSP_Lib/Source/TransformFunctions/arm_rfft_init_q31.c\ +$(CMSIS)/DSP_Lib/Source/TransformFunctions/arm_rfft_q15.c\ +$(CMSIS)/DSP_Lib/Source/TransformFunctions/arm_rfft_q31.c\ + +CMSIS_OBJS = $(CMSIS_SRCS:.c=.o) $(CMSIS)/DSP_Lib/Source/TransformFunctions/arm_bitreversal2.o + +################################################### +# Codec 2 + +CODEC2_DIR = ../../.. +CODEC2_SRC = $(CODEC2_DIR)/src +CODEC2_BLD = $(CODEC2_DIR)/build_linux + +CODEC2_SRCS=\ +$(CODEC2_SRC)/lpc.c \ +$(CODEC2_SRC)/nlp.c \ +$(CODEC2_SRC)/postfilter.c \ +$(CODEC2_SRC)/sine.c \ +$(CODEC2_SRC)/codec2.c \ +$(CODEC2_SRC)/codec2_fft.c \ +$(CODEC2_SRC)/cohpsk.c \ +$(CODEC2_SRC)/linreg.c \ +$(CODEC2_SRC)/kiss_fft.c \ +$(CODEC2_SRC)/kiss_fftr.c \ +$(CODEC2_SRC)/interp.c \ +$(CODEC2_SRC)/lsp.c \ +$(CODEC2_SRC)/mbest.c \ +$(CODEC2_SRC)/newamp1.c \ +$(CODEC2_SRC)/phase.c \ +$(CODEC2_SRC)/quantise.c \ +$(CODEC2_SRC)/pack.c \ +$(CODEC2_SRC)/codebook.c \ +$(CODEC2_SRC)/codebookd.c \ +$(CODEC2_SRC)/codebookjvm.c \ +$(CODEC2_SRC)/codebookge.c \ +$(CODEC2_SRC)/codebooknewamp1.c \ +$(CODEC2_SRC)/codebooknewamp1_energy.c \ +$(CODEC2_SRC)/dump.c \ +$(CODEC2_SRC)/fdmdv.c \ +$(CODEC2_SRC)/freedv_api.c \ +$(CODEC2_SRC)/filter.c \ +$(CODEC2_SRC)/varicode.c \ +$(CODEC2_SRC)/golay23.c \ +$(CODEC2_SRC)/fsk.c \ +$(CODEC2_SRC)/fmfsk.c \ +$(CODEC2_SRC)/freedv_vhf_framing.c \ +$(CODEC2_SRC)/freedv_data_channel.c \ +$(CODEC2_SRC)/ofdm.c \ +$(CODEC2_SRC)/phi0.c \ +$(CODEC2_SRC)/mpdecode_core.c \ +$(CODEC2_SRC)/gp_interleaver.c \ +$(CODEC2_SRC)/interldpc.c \ +$(CODEC2_SRC)/HRA_112_112.c \ + +CFLAGS += -D__EMBEDDED__ +CFLAGS += -I$(CODEC2_SRC) +CFLAGS += -I$(CODEC2_BLD) + +################################################### +# Codec2/STM32 + +CODEC2_STM32_DIR := ../.. +CODEC2_STM32_SRC = $(CODEC2_STM32_DIR)/src +CODEC2_STM32_HDR = $(CODEC2_STM32_DIR)/inc +CFLAGS += -I$(CODEC2_STM32_HDR) +CFLAGS += -T$(CODEC2_STM32_DIR)/stm32_flash.ld + +#enable this for dump files to help verify optimisation +#CFLAGS += -DDUMP +ASFLAGS += $(CFLAGS) + +################################################### + +ROOT=$(shell pwd) + +# Library paths + +LIBPATHS = + +# Libraries to link + +# Standard ARM semihosting +LIBS = -lg -lrdimon -lm --specs=rdimon.specs + +# startup file + +SRCS += startup_stm32f4xx.s +SRCS += init.c +SRCS += stm32f4_machdep.c +SRCS += $(CODEC2_STM32_SRC)/system_stm32f4xx.c + +all: libstm32f4.a \ + tst_codec2_enc.bin tst_codec2_dec.bin \ + tst_ofdm_mod.bin tst_ofdm_demod.bin \ + tst_ldpc_enc.bin tst_ldpc_dec.bin \ + tst_api_mod.bin tst_api_demod.bin \ + tst_semihost.bin \ + tst_codec2_fft_init.bin + +libstm32f4.a: $(CMSIS_OBJS) $(STM32F4LIB_OBJS) + find -L $(PERIPHLIBDIR) -type f -name '*.o' -exec $(AR) crs libstm32f4.a {} ";" + +# Kludgy target to build a file with CFLAGS -DPROFILE +%.profile.o: %.c + $(CC) $(CPPFLAGS) $(CFLAGS) -DPROFILE -c -o $@ $< + +# Rule for building .bin files from a .elf +%.bin: %.elf + $(OBJCOPY) -O binary $< $@ + +#####%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#### +##### Used for debugging stdio (with semihosting) : +## +## TMP_NEWLIB_INCS = -INewlib +## TMP_NEWLIB_DEFS = -DARM_RDI_MONITOR +## TMP_NEWLIB_OBJS = Newlib/fread.o Newlib/refill.o Newlib/syscalls.o Newlib/stdio.o Newlib/readr.o Newlib/fclose.o Newlib/fflush.o +## +## Newlib/fread.o: Newlib/fread.c +## $(CC) -c $(CFLAGS) $^ -o Newlib/fread.o $(TMP_NEWLIB_INCS) $(TMP_NEWLIB_DEFS) +## +## Newlib/refill.o: Newlib/refill.c +## $(CC) -c $(CFLAGS) $^ -o Newlib/refill.o $(TMP_NEWLIB_INCS) $(TMP_NEWLIB_DEFS) +## +## Newlib/syscalls.o: Newlib/syscalls.c +## $(CC) -c $(CFLAGS) $^ -o Newlib/syscalls.o $(TMP_NEWLIB_INCS) $(TMP_NEWLIB_DEFS) +## +## Newlib/stdio.o: Newlib/stdio.c +## $(CC) -c $(CFLAGS) $^ -o Newlib/stdio.o $(TMP_NEWLIB_INCS) $(TMP_NEWLIB_DEFS) +## +## Newlib/readr.o: Newlib/readr.c +## $(CC) -c $(CFLAGS) $^ -o Newlib/readr.o $(TMP_NEWLIB_INCS) $(TMP_NEWLIB_DEFS) +## +#####%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#### + +#################################################### +# Test Programs + +# ----------------------------------------------- +TST_API_TX_SRCS=\ +tst_api_tx.c \ +semihosting.c \ +$(CODEC2_STM32_SRC)/system_stm32f4xx.c + +TST_API_TX_SRCS += $(CODEC2_SRCS) +TST_API_TX_SRCS += $(SRCS) + +tst_api_tx.elf: $(TST_API_TX_SRCS:.c=.profile.o) libstm32f4.a + $(CC) $(CFLAGS) -DPROFILE $^ -o $@ $(LIBPATHS) $(LIBS) + +# ----------------------------------------------- +TST_CODEC2_ENC_SRCS=\ +tst_codec2_enc.c \ +semihosting.c \ +$(CODEC2_STM32_SRC)/system_stm32f4xx.c +# +TST_CODEC2_ENC_SRCS += $(CODEC2_SRCS) +TST_CODEC2_ENC_SRCS += $(SRCS) +# +tst_codec2_enc.elf: $(TST_CODEC2_ENC_SRCS:.c=.profile.o) libstm32f4.a + $(CC) $(CFLAGS) -DPROFILE $^ -o $@ $(LIBPATHS) $(LIBS) -Wl,-Map=tst_codec2_enc.map + +# ----------------------------------------------- +TST_CODEC2_DEC_SRCS=\ +tst_codec2_dec.c \ +semihosting.c \ +$(CODEC2_STM32_SRC)/system_stm32f4xx.c +# +TST_CODEC2_DEC_SRCS += $(CODEC2_SRCS) +TST_CODEC2_DEC_SRCS += $(SRCS) +# +tst_codec2_dec.elf: $(TST_CODEC2_DEC_SRCS:.c=.profile.o) libstm32f4.a + $(CC) $(CFLAGS) -DPROFILE $^ -o $@ $(LIBPATHS) $(LIBS) + +# ----------------------------------------------- +TST_API_MOD_SRCS=\ +tst_api_mod.c \ +semihosting.c \ +$(CODEC2_STM32_SRC)/system_stm32f4xx.c +# +TST_API_MOD_SRCS += $(CODEC2_SRCS) +TST_API_MOD_SRCS += $(SRCS) +# +tst_api_mod.elf: $(TST_API_MOD_SRCS:.c=.profile.o) libstm32f4.a # $(TMP_NEWLIB_OBJS) + $(CC) $(CFLAGS) -DPROFILE $^ -o $@ $(LIBPATHS) $(LIBS) + +# ----------------------------------------------- +# TST_API_MOD_700D_PROFILE +# +TST_API_MOD_700D_PROFILE_SRCS=\ +tst_api_mod_700d_profile.c \ +semihosting.c \ +$(CODEC2_STM32_SRC)/system_stm32f4xx.c +# +TST_API_MOD_700D_PROFILE_SRCS += $(CODEC2_SRCS) +TST_API_MOD_700D_PROFILE_SRCS += $(SRCS) +# +tst_api_mod_700d_profile.elf: $(TST_API_MOD_700D_PROFILE_SRCS:.c=.profile.o) libstm32f4.a + $(CC) $(CFLAGS) -DPROFILE $^ -o $@ $(LIBPATHS) $(LIBS) + +# ----------------------------------------------- +# TST_API_DEMOD +TST_API_DEMOD_SRCS=\ +tst_api_demod.c \ +semihosting.c \ +$(CODEC2_STM32_SRC)/system_stm32f4xx.c +## (for debug use) sbrk_dbg.c \ +# +TST_API_DEMOD_SRCS += $(CODEC2_SRCS) +TST_API_DEMOD_SRCS += $(SRCS) +# +tst_api_demod.elf: $(TST_API_DEMOD_SRCS:.c=.o) libstm32f4.a + $(CC) $(CFLAGS) -DPROFILE $^ -o $@ $(LIBPATHS) $(LIBS) -Wl,-Map=tst_api_demod.map + +# ----------------------------------------------- +# TST_API_DEMOD_700D_PROFILE +api_demod_700d_in_10f: + # Each frame of OFDM is 160ms which is 1280 speech samples of 2 bytes each. + # + dd bs=2560 count=100 if=../../../raw/hts1.raw of=tmp_spch_in.raw + cohpsk_ch tmp_spch_in.raw tmp_modout.raw -20 -Fs 8000 -f -5 --raw_dir ../../../raw + freedv_tx 700D tmp_modout.raw api_demod_700d_in_10f --txbpf 0 +# +api_demod_700d_in_10f.c: api_demod_700d_in_10f + xxd -i api_demod_700d_in_10f > api_demod_700d_in_10f.c +# +TST_API_DEMOD_700D_PROFILE_SRCS=\ +tst_api_demod_700d_profile.c \ +semihosting.c \ +$(CODEC2_STM32_SRC)/system_stm32f4xx.c +## (for debug use) sbrk_dbg.c \ +# +tst_api_demod_700d_profile.profile.o: tst_api_demod_700d_profile.c api_demod_700d_in_10f.c + $(CC) $(CPPFLAGS) $(CFLAGS) -DPROFILE -c -o $@ $< +# +TST_API_DEMOD_700D_PROFILE_SRCS += $(CODEC2_SRCS) +TST_API_DEMOD_700D_PROFILE_SRCS += $(SRCS) +# +tst_api_demod_700d_profile.elf: $(TST_API_DEMOD_700D_PROFILE_SRCS:.c=.profile.o) libstm32f4.a + $(CC) $(CFLAGS) -DPROFILE $^ -o $@ $(LIBPATHS) $(LIBS) + +# ----------------------------------------------- +TST_OFDM_MOD_SRCS=\ +tst_ofdm_mod.c \ +semihosting.c \ +$(CODEC2_SRC)/ofdm.c \ +$(CODEC2_STM32_SRC)/system_stm32f4xx.c + +TST_OFDM_MOD_SRCS += $(CODEC2_SRCS) +TST_OFDM_MOD_SRCS += $(SRCS) + +tst_ofdm_mod.elf: $(TST_OFDM_MOD_SRCS:.c=.profile.o) libstm32f4.a + $(CC) $(CFLAGS) -DPROFILE $^ -o $@ $(LIBPATHS) $(LIBS) + +# ----------------------------------------------- +TST_OFDM_DEMOD_SRCS=\ +tst_ofdm_demod.c \ +semihosting.c \ +$(CODEC2_SRC)/ofdm.c \ +$(CODEC2_STM32_SRC)/system_stm32f4xx.c +# +TST_OFDM_DEMOD_SRCS += $(CODEC2_SRCS) +TST_OFDM_DEMOD_SRCS += $(SRCS) +# +tst_ofdm_demod.elf: $(TST_OFDM_DEMOD_SRCS:.c=.profile.o) libstm32f4.a + $(CC) $(CFLAGS) $^ -o $@ $(LIBPATHS) $(LIBS) -Wl,-Map=tst_ofdm_demod.map + +# ----------------------------------------------- +# TST_OFDM_MOD_STACK +# +ofdm_mod_ref_10f: + $(CODEC2_BLD)/src/ofdm_mod /dev/zero ofdm_mod_ref_10f --testframes 1 --ldpc +# +ofdm_mod_ref_10f.c: ofdm_mod_ref_10f + xxd -g2 -e -i ofdm_mod_ref_10f > ofdm_mod_ref_10f.c +# +tst_ofdm_mod_stack.profile.o: tst_ofdm_mod_stack.c ofdm_mod_ref_10f.c + $(CC) $(CPPFLAGS) $(CFLAGS) -DPROFILE -c -o $@ $< +# +TST_OFDM_MOD_STACK_SRCS=\ +tst_ofdm_mod_stack.c \ +function_trace.c \ +$(CODEC2_SRC)/ofdm.c \ +$(CODEC2_STM32_SRC)/system_stm32f4xx.c +# +TST_OFDM_MOD_STACK_SRCS += $(CODEC2_SRCS) +TST_OFDM_MOD_STACK_SRCS += $(SRCS) +# +tst_ofdm_mod_stack.elf: $(TST_OFDM_MOD_STACK_SRCS:.c=.o) libstm32f4.a + $(CC) $(CFLAGS) $^ -o $@ $(LIBPATHS) $(LIBS) -Wl,-Map=tst_ofdm_mod_stack.map + +# ----------------------------------------------- +# TST_OFDM_DEMOD_STACK +ofdm_demod_in_10f: + $(CODEC2_BLD)/src/ofdm_get_test_bits - -f 10 | \ + $(CODEC2_BLD)/src/ofdm_mod - ofdm_demod_in_10f +# +ofdm_demod_in_10f.c: ofdm_demod_in_10f + xxd -i ofdm_demod_in_10f > ofdm_demod_in_10f.c +# +ofdm_demod_ref_10f: ofdm_demod_in_10f + $(CODEC2_BLD)/src/ofdm_demod ofdm_demod_in_10f ofdm_demod_ref_10f +# +ofdm_demod_ref_10f.c: ofdm_demod_ref_10f + xxd -i ofdm_demod_ref_10f > ofdm_demod_ref_10f.c +# +tst_ofdm_demod_stack.o: ofdm_demod_in_10f.c ofdm_demod_ref_10f.c +# +TST_OFDM_DEMOD_STACK_SRCS=\ +tst_ofdm_demod_stack.c \ +$(CODEC2_SRC)/ofdm.c \ +$(CODEC2_STM32_SRC)/system_stm32f4xx.c +# +TST_OFDM_DEMOD_STACK_SRCS += $(CODEC2_SRCS) +TST_OFDM_DEMOD_STACK_SRCS += $(SRCS) +# +tst_ofdm_demod_stack.elf: $(TST_OFDM_DEMOD_STACK_SRCS:.c=.o) libstm32f4.a + $(CC) $(CFLAGS) $^ -o $@ $(LIBPATHS) $(LIBS) -Wl,-Map=tst_ofdm_demod_stack.map + +# ----------------------------------------------- +# Not working yet! +TST_LDPC_ENC_SRCS= \ +tst_ldpc_enc.c \ +semihosting.c \ +$(CODEC2_STM32_SRC)/system_stm32f4xx.c +# +TST_LDPC_ENC_SRCS += $(CODEC2_SRCS) +TST_LDPC_ENC_SRCS += $(SRCS) +# +TST_LDPC_ENC_HDR= \ +$(CODEC2_INC)/mpdecode_code_test.h +# +tst_ldpc_enc.elf: $(TST_LDPC_ENC_SRCS:.c=.profile.o) libstm32f4.a $(TST_LDPC_ENC_HRDS) + $(CC) $(CFLAGS) -DPROFILE $^ -o $@ $(LIBPATHS) $(LIBS) + +# ----------------------------------------------- +# Not working yet! +TST_LDPC_DEC_SRCS= \ +tst_ldpc_dec.c \ +semihosting.c \ +$(CODEC2_STM32_SRC)/system_stm32f4xx.c +# +TST_LDPC_DEC_SRCS += $(CODEC2_SRCS) +TST_LDPC_DEC_SRCS += $(SRCS) +# +TST_LDPC_DEC_HDR= \ +$(CODEC2_INC)/mpdecode_code.h +# +tst_ldpc_dec.elf: $(TST_LDPC_DEC_SRCS:.c=.profile.o) libstm32f4.a $(TST_LDPC_DEC_HRDS) + $(CC) $(CFLAGS) -DPROFILE $^ -o $@ $(LIBPATHS) $(LIBS) -Wl,-Map=tst_ldpc_dec.map + +# ----------------------------------------------- +TST_SEMIHOST_SRCS=\ +tst_semihost.c \ +semihosting.c \ +$(CODEC2_STM32_SRC)/system_stm32f4xx.c +# +TST_SEMIHOST_SRCS += $(CODEC2_SRCS) +TST_SEMIHOST_SRCS += $(SRCS) +# +tst_semihost.elf: $(TST_SEMIHOST_SRCS:.c=.o) libstm32f4.a #$(TMP_NEWLIB_OBJS) + $(CC) $(CFLAGS) $^ -o $@ $(LIBPATHS) $(LIBS) + +# ----------------------------------------------- +TST_CODEC2_FFT_INIT_SRCS=\ +tst_codec2_fft_init.c \ +semihosting.c \ +$(CODEC2_STM32_SRC)/system_stm32f4xx.c +# +TST_CODEC2_FFT_INIT_SRCS += $(CODEC2_SRCS) +TST_CODEC2_FFT_INIT_SRCS += $(SRCS) +# +tst_codec2_fft_init.elf: $(TST_CODEC2_FFT_INIT_SRCS:.c=.o) libstm32f4.a + $(CC) $(CFLAGS) $^ -o $@ $(LIBPATHS) $(LIBS) + + +################################################### + +clean: + rm -f *.elf *.bin + rm -f libstm32f4.a + rm -f $(CMSIS_OBJS) $(STM32F4LIB_OBJS) $(CODEC2_SRC)/*.o + find . -type f -name '*.o' | xargs rm -f diff --git a/libcodec2-android/src/codec2/stm32/unittest/src/init.c b/libcodec2-android/src/codec2/stm32/unittest/src/init.c new file mode 100644 index 0000000..527141d --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/unittest/src/init.c @@ -0,0 +1,10 @@ +/* + * Dummy function to avoid compiler error + */ +void _init() { + +} +void _fini() { + +} + diff --git a/libcodec2-android/src/codec2/stm32/unittest/src/semihosting.c b/libcodec2-android/src/codec2/stm32/unittest/src/semihosting.c new file mode 100644 index 0000000..33a929e --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/unittest/src/semihosting.c @@ -0,0 +1,19 @@ +#include +#include +#include +#include + +#include "semihosting.h" + +extern void initialise_monitor_handles(void); +extern int errno; + +int semihosting_init(void) { + + initialise_monitor_handles(); + setvbuf(stderr, NULL, _IOLBF, 256); + return(0); + +} + +/* vi:set ts=4 et sts=4: */ diff --git a/libcodec2-android/src/codec2/stm32/unittest/src/semihosting.h b/libcodec2-android/src/codec2/stm32/unittest/src/semihosting.h new file mode 100644 index 0000000..c602031 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/unittest/src/semihosting.h @@ -0,0 +1,7 @@ +#ifndef SEMIHOSTING_H +#define SEMIHOSTING_H +extern int semihosting_init(void); + +#endif // SEMIHOSTING_H + +/* vi:set ts=4 et sts=4: */ diff --git a/libcodec2-android/src/codec2/stm32/unittest/src/startup_stm32f4xx.s b/libcodec2-android/src/codec2/stm32/unittest/src/startup_stm32f4xx.s new file mode 100644 index 0000000..80214c2 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/unittest/src/startup_stm32f4xx.s @@ -0,0 +1,529 @@ +/** + ****************************************************************************** + * @file startup_stm32f4xx.s + * @author MCD Application Team + * @version V1.0.0 + * @date 30-September-2011 + * @brief STM32F4xx Devices vector table for Atollic TrueSTUDIO toolchain. + * This module performs: + * - Set the initial SP + * - Set the initial PC == Reset_Handler, + * - Set the vector table entries with the exceptions ISR address + * - Configure the clock system and the external SRAM mounted on + * STM324xG-EVAL board to be used as data memory (optional, + * to be enabled by user) + * - Branches to main in the C library (which eventually + * calls main()). + * After Reset the Cortex-M4 processor is in Thread mode, + * priority is Privileged, and the Stack is set to Main. + ****************************************************************************** + * @attention + * + * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS + * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE + * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY + * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING + * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE + * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + *

© COPYRIGHT 2011 STMicroelectronics

+ ****************************************************************************** + */ + + .syntax unified + .cpu cortex-m3 + .fpu softvfp + .thumb + +.global g_pfnVectors +.global Default_Handler +.global EndofMain + +/* start address for the initialization values of the .data section. +defined in linker script */ +.word _sidata +/* start address for the .data section. defined in linker script */ +.word _sdata +/* end address for the .data section. defined in linker script */ +.word _edata +/* start address for the .bss section. defined in linker script */ +.word _sbss +/* end address for the .bss section. defined in linker script */ +.word _ebss +/* stack used for SystemInit_ExtMemCtl; always internal RAM used */ + +/** + * @brief This is the code that gets called when the processor first + * starts execution following a reset event. Only the absolutely + * necessary set is performed, after which the application + * supplied main() routine is called. + * @param None + * @retval : None +*/ + + .section .text.Reset_Handler + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss + +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2], #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss + + +/* Fill stack area with a fix pattern for observince max stack use */ + mov r2, r3 + ldr r3, = _estack + ldr r4, =0x55555555 + b LoopFillStack +FillStack: + str r4, [r2], #4 + +LoopFillStack: + cmp r2, r3 + bcc FillStack + + +/* Call the clock system intitialization function.*/ + bl SystemInit +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main +EndofMain: + bl . +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * @param None + * @retval None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M3. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +*******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word MemManage_Handler + .word BusFault_Handler + .word UsageFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word DebugMon_Handler + .word 0 + .word PendSV_Handler + .word SysTick_Handler + + /* External Interrupts */ + .word WWDG_IRQHandler /* Window WatchDog */ + .word PVD_IRQHandler /* PVD through EXTI Line detection */ + .word TAMP_STAMP_IRQHandler /* Tamper and TimeStamps through the EXTI line */ + .word RTC_WKUP_IRQHandler /* RTC Wakeup through the EXTI line */ + .word FLASH_IRQHandler /* FLASH */ + .word RCC_IRQHandler /* RCC */ + .word EXTI0_IRQHandler /* EXTI Line0 */ + .word EXTI1_IRQHandler /* EXTI Line1 */ + .word EXTI2_IRQHandler /* EXTI Line2 */ + .word EXTI3_IRQHandler /* EXTI Line3 */ + .word EXTI4_IRQHandler /* EXTI Line4 */ + .word DMA1_Stream0_IRQHandler /* DMA1 Stream 0 */ + .word DMA1_Stream1_IRQHandler /* DMA1 Stream 1 */ + .word DMA1_Stream2_IRQHandler /* DMA1 Stream 2 */ + .word DMA1_Stream3_IRQHandler /* DMA1 Stream 3 */ + .word DMA1_Stream4_IRQHandler /* DMA1 Stream 4 */ + .word DMA1_Stream5_IRQHandler /* DMA1 Stream 5 */ + .word DMA1_Stream6_IRQHandler /* DMA1 Stream 6 */ + .word ADC_IRQHandler /* ADC1, ADC2 and ADC3s */ + .word CAN1_TX_IRQHandler /* CAN1 TX */ + .word CAN1_RX0_IRQHandler /* CAN1 RX0 */ + .word CAN1_RX1_IRQHandler /* CAN1 RX1 */ + .word CAN1_SCE_IRQHandler /* CAN1 SCE */ + .word EXTI9_5_IRQHandler /* External Line[9:5]s */ + .word TIM1_BRK_TIM9_IRQHandler /* TIM1 Break and TIM9 */ + .word TIM1_UP_TIM10_IRQHandler /* TIM1 Update and TIM10 */ + .word TIM1_TRG_COM_TIM11_IRQHandler /* TIM1 Trigger and Commutation and TIM11 */ + .word TIM1_CC_IRQHandler /* TIM1 Capture Compare */ + .word TIM2_IRQHandler /* TIM2 */ + .word TIM3_IRQHandler /* TIM3 */ + .word TIM4_IRQHandler /* TIM4 */ + .word I2C1_EV_IRQHandler /* I2C1 Event */ + .word I2C1_ER_IRQHandler /* I2C1 Error */ + .word I2C2_EV_IRQHandler /* I2C2 Event */ + .word I2C2_ER_IRQHandler /* I2C2 Error */ + .word SPI1_IRQHandler /* SPI1 */ + .word SPI2_IRQHandler /* SPI2 */ + .word USART1_IRQHandler /* USART1 */ + .word USART2_IRQHandler /* USART2 */ + .word USART3_IRQHandler /* USART3 */ + .word EXTI15_10_IRQHandler /* External Line[15:10]s */ + .word RTC_Alarm_IRQHandler /* RTC Alarm (A and B) through EXTI Line */ + .word OTG_FS_WKUP_IRQHandler /* USB OTG FS Wakeup through EXTI line */ + .word TIM8_BRK_TIM12_IRQHandler /* TIM8 Break and TIM12 */ + .word TIM8_UP_TIM13_IRQHandler /* TIM8 Update and TIM13 */ + .word TIM8_TRG_COM_TIM14_IRQHandler /* TIM8 Trigger and Commutation and TIM14 */ + .word TIM8_CC_IRQHandler /* TIM8 Capture Compare */ + .word DMA1_Stream7_IRQHandler /* DMA1 Stream7 */ + .word FSMC_IRQHandler /* FSMC */ + .word SDIO_IRQHandler /* SDIO */ + .word TIM5_IRQHandler /* TIM5 */ + .word SPI3_IRQHandler /* SPI3 */ + .word UART4_IRQHandler /* UART4 */ + .word UART5_IRQHandler /* UART5 */ + .word TIM6_DAC_IRQHandler /* TIM6 and DAC1&2 underrun errors */ + .word TIM7_IRQHandler /* TIM7 */ + .word DMA2_Stream0_IRQHandler /* DMA2 Stream 0 */ + .word DMA2_Stream1_IRQHandler /* DMA2 Stream 1 */ + .word DMA2_Stream2_IRQHandler /* DMA2 Stream 2 */ + .word DMA2_Stream3_IRQHandler /* DMA2 Stream 3 */ + .word DMA2_Stream4_IRQHandler /* DMA2 Stream 4 */ + .word ETH_IRQHandler /* Ethernet */ + .word ETH_WKUP_IRQHandler /* Ethernet Wakeup through EXTI line */ + .word CAN2_TX_IRQHandler /* CAN2 TX */ + .word CAN2_RX0_IRQHandler /* CAN2 RX0 */ + .word CAN2_RX1_IRQHandler /* CAN2 RX1 */ + .word CAN2_SCE_IRQHandler /* CAN2 SCE */ + .word OTG_FS_IRQHandler /* USB OTG FS */ + .word DMA2_Stream5_IRQHandler /* DMA2 Stream 5 */ + .word DMA2_Stream6_IRQHandler /* DMA2 Stream 6 */ + .word DMA2_Stream7_IRQHandler /* DMA2 Stream 7 */ + .word USART6_IRQHandler /* USART6 */ + .word I2C3_EV_IRQHandler /* I2C3 event */ + .word I2C3_ER_IRQHandler /* I2C3 error */ + .word OTG_HS_EP1_OUT_IRQHandler /* USB OTG HS End Point 1 Out */ + .word OTG_HS_EP1_IN_IRQHandler /* USB OTG HS End Point 1 In */ + .word OTG_HS_WKUP_IRQHandler /* USB OTG HS Wakeup through EXTI */ + .word OTG_HS_IRQHandler /* USB OTG HS */ + .word DCMI_IRQHandler /* DCMI */ + .word CRYP_IRQHandler /* CRYP crypto */ + .word HASH_RNG_IRQHandler /* Hash and Rng */ + .word FPU_IRQHandler /* FPU */ + + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak MemManage_Handler + .thumb_set MemManage_Handler,Default_Handler + + .weak BusFault_Handler + .thumb_set BusFault_Handler,Default_Handler + + .weak UsageFault_Handler + .thumb_set UsageFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak DebugMon_Handler + .thumb_set DebugMon_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak WWDG_IRQHandler + .thumb_set WWDG_IRQHandler,Default_Handler + + .weak PVD_IRQHandler + .thumb_set PVD_IRQHandler,Default_Handler + + .weak TAMP_STAMP_IRQHandler + .thumb_set TAMP_STAMP_IRQHandler,Default_Handler + + .weak RTC_WKUP_IRQHandler + .thumb_set RTC_WKUP_IRQHandler,Default_Handler + + .weak FLASH_IRQHandler + .thumb_set FLASH_IRQHandler,Default_Handler + + .weak RCC_IRQHandler + .thumb_set RCC_IRQHandler,Default_Handler + + .weak EXTI0_IRQHandler + .thumb_set EXTI0_IRQHandler,Default_Handler + + .weak EXTI1_IRQHandler + .thumb_set EXTI1_IRQHandler,Default_Handler + + .weak EXTI2_IRQHandler + .thumb_set EXTI2_IRQHandler,Default_Handler + + .weak EXTI3_IRQHandler + .thumb_set EXTI3_IRQHandler,Default_Handler + + .weak EXTI4_IRQHandler + .thumb_set EXTI4_IRQHandler,Default_Handler + + .weak DMA1_Stream0_IRQHandler + .thumb_set DMA1_Stream0_IRQHandler,Default_Handler + + .weak DMA1_Stream1_IRQHandler + .thumb_set DMA1_Stream1_IRQHandler,Default_Handler + + .weak DMA1_Stream2_IRQHandler + .thumb_set DMA1_Stream2_IRQHandler,Default_Handler + + .weak DMA1_Stream3_IRQHandler + .thumb_set DMA1_Stream3_IRQHandler,Default_Handler + + .weak DMA1_Stream4_IRQHandler + .thumb_set DMA1_Stream4_IRQHandler,Default_Handler + + .weak DMA1_Stream5_IRQHandler + .thumb_set DMA1_Stream5_IRQHandler,Default_Handler + + .weak DMA1_Stream6_IRQHandler + .thumb_set DMA1_Stream6_IRQHandler,Default_Handler + + .weak ADC_IRQHandler + .thumb_set ADC_IRQHandler,Default_Handler + + .weak CAN1_TX_IRQHandler + .thumb_set CAN1_TX_IRQHandler,Default_Handler + + .weak CAN1_RX0_IRQHandler + .thumb_set CAN1_RX0_IRQHandler,Default_Handler + + .weak CAN1_RX1_IRQHandler + .thumb_set CAN1_RX1_IRQHandler,Default_Handler + + .weak CAN1_SCE_IRQHandler + .thumb_set CAN1_SCE_IRQHandler,Default_Handler + + .weak EXTI9_5_IRQHandler + .thumb_set EXTI9_5_IRQHandler,Default_Handler + + .weak TIM1_BRK_TIM9_IRQHandler + .thumb_set TIM1_BRK_TIM9_IRQHandler,Default_Handler + + .weak TIM1_UP_TIM10_IRQHandler + .thumb_set TIM1_UP_TIM10_IRQHandler,Default_Handler + + .weak TIM1_TRG_COM_TIM11_IRQHandler + .thumb_set TIM1_TRG_COM_TIM11_IRQHandler,Default_Handler + + .weak TIM1_CC_IRQHandler + .thumb_set TIM1_CC_IRQHandler,Default_Handler + + .weak TIM2_IRQHandler + .thumb_set TIM2_IRQHandler,Default_Handler + + .weak TIM3_IRQHandler + .thumb_set TIM3_IRQHandler,Default_Handler + + .weak TIM4_IRQHandler + .thumb_set TIM4_IRQHandler,Default_Handler + + .weak I2C1_EV_IRQHandler + .thumb_set I2C1_EV_IRQHandler,Default_Handler + + .weak I2C1_ER_IRQHandler + .thumb_set I2C1_ER_IRQHandler,Default_Handler + + .weak I2C2_EV_IRQHandler + .thumb_set I2C2_EV_IRQHandler,Default_Handler + + .weak I2C2_ER_IRQHandler + .thumb_set I2C2_ER_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak USART1_IRQHandler + .thumb_set USART1_IRQHandler,Default_Handler + + .weak USART2_IRQHandler + .thumb_set USART2_IRQHandler,Default_Handler + + .weak USART3_IRQHandler + .thumb_set USART3_IRQHandler,Default_Handler + + .weak EXTI15_10_IRQHandler + .thumb_set EXTI15_10_IRQHandler,Default_Handler + + .weak RTC_Alarm_IRQHandler + .thumb_set RTC_Alarm_IRQHandler,Default_Handler + + .weak OTG_FS_WKUP_IRQHandler + .thumb_set OTG_FS_WKUP_IRQHandler,Default_Handler + + .weak TIM8_BRK_TIM12_IRQHandler + .thumb_set TIM8_BRK_TIM12_IRQHandler,Default_Handler + + .weak TIM8_UP_TIM13_IRQHandler + .thumb_set TIM8_UP_TIM13_IRQHandler,Default_Handler + + .weak TIM8_TRG_COM_TIM14_IRQHandler + .thumb_set TIM8_TRG_COM_TIM14_IRQHandler,Default_Handler + + .weak TIM8_CC_IRQHandler + .thumb_set TIM8_CC_IRQHandler,Default_Handler + + .weak DMA1_Stream7_IRQHandler + .thumb_set DMA1_Stream7_IRQHandler,Default_Handler + + .weak FSMC_IRQHandler + .thumb_set FSMC_IRQHandler,Default_Handler + + .weak SDIO_IRQHandler + .thumb_set SDIO_IRQHandler,Default_Handler + + .weak TIM5_IRQHandler + .thumb_set TIM5_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak TIM6_DAC_IRQHandler + .thumb_set TIM6_DAC_IRQHandler,Default_Handler + + .weak TIM7_IRQHandler + .thumb_set TIM7_IRQHandler,Default_Handler + + .weak DMA2_Stream0_IRQHandler + .thumb_set DMA2_Stream0_IRQHandler,Default_Handler + + .weak DMA2_Stream1_IRQHandler + .thumb_set DMA2_Stream1_IRQHandler,Default_Handler + + .weak DMA2_Stream2_IRQHandler + .thumb_set DMA2_Stream2_IRQHandler,Default_Handler + + .weak DMA2_Stream3_IRQHandler + .thumb_set DMA2_Stream3_IRQHandler,Default_Handler + + .weak DMA2_Stream4_IRQHandler + .thumb_set DMA2_Stream4_IRQHandler,Default_Handler + + .weak ETH_IRQHandler + .thumb_set ETH_IRQHandler,Default_Handler + + .weak ETH_WKUP_IRQHandler + .thumb_set ETH_WKUP_IRQHandler,Default_Handler + + .weak CAN2_TX_IRQHandler + .thumb_set CAN2_TX_IRQHandler,Default_Handler + + .weak CAN2_RX0_IRQHandler + .thumb_set CAN2_RX0_IRQHandler,Default_Handler + + .weak CAN2_RX1_IRQHandler + .thumb_set CAN2_RX1_IRQHandler,Default_Handler + + .weak CAN2_SCE_IRQHandler + .thumb_set CAN2_SCE_IRQHandler,Default_Handler + + .weak OTG_FS_IRQHandler + .thumb_set OTG_FS_IRQHandler,Default_Handler + + .weak DMA2_Stream5_IRQHandler + .thumb_set DMA2_Stream5_IRQHandler,Default_Handler + + .weak DMA2_Stream6_IRQHandler + .thumb_set DMA2_Stream6_IRQHandler,Default_Handler + + .weak DMA2_Stream7_IRQHandler + .thumb_set DMA2_Stream7_IRQHandler,Default_Handler + + .weak USART6_IRQHandler + .thumb_set USART6_IRQHandler,Default_Handler + + .weak I2C3_EV_IRQHandler + .thumb_set I2C3_EV_IRQHandler,Default_Handler + + .weak I2C3_ER_IRQHandler + .thumb_set I2C3_ER_IRQHandler,Default_Handler + + .weak OTG_HS_EP1_OUT_IRQHandler + .thumb_set OTG_HS_EP1_OUT_IRQHandler,Default_Handler + + .weak OTG_HS_EP1_IN_IRQHandler + .thumb_set OTG_HS_EP1_IN_IRQHandler,Default_Handler + + .weak OTG_HS_WKUP_IRQHandler + .thumb_set OTG_HS_WKUP_IRQHandler,Default_Handler + + .weak OTG_HS_IRQHandler + .thumb_set OTG_HS_IRQHandler,Default_Handler + + .weak DCMI_IRQHandler + .thumb_set DCMI_IRQHandler,Default_Handler + + .weak CRYP_IRQHandler + .thumb_set CRYP_IRQHandler,Default_Handler + + .weak HASH_RNG_IRQHandler + .thumb_set HASH_RNG_IRQHandler,Default_Handler + + .weak FPU_IRQHandler + .thumb_set FPU_IRQHandler,Default_Handler + +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ diff --git a/libcodec2-android/src/codec2/stm32/unittest/src/tst_api_demod.c b/libcodec2-android/src/codec2/stm32/unittest/src/tst_api_demod.c new file mode 100644 index 0000000..0ddd671 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/unittest/src/tst_api_demod.c @@ -0,0 +1,229 @@ +/*------------------------------------------------------ + + FILE........: tst_api_demod.c + AUTHOR......: David Rowe, Don Reid + DATE CREATED: 7 July 2018 + + Test and profile OFDM de-modulation on the STM32F4. + +-------------------------------------------------------*/ + +/* + Copyright (C) 2014 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +/* Typical run, using internal testframes: + + # Input + # Copy N frames of a raw audio file to stm_in.raw. + dd bs=2560 count=30 if=../../../../raw/hts1.raw of=spch_in.raw + freedv_tx 700D spch_in.raw stm_in.raw --testframes + + # Reference + freedv_rx 700D stm_in.raw ref_demod.raw --testframes + + # Create config + echo "71000010" > stm_cfg.txt + + # Run stm32 + run_stm32_prog ../../src/tst_api_demod.elf --load + + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "freedv_api.h" +#include "modem_stats.h" +#include "codec2.h" + +#include "semihosting.h" +#include "stm32f4xx_conf.h" +#include "stm32f4xx.h" +#include "machdep.h" +#include "memtools.h" + + +struct my_callback_state { + //FILE *ftxt; +}; + +void my_put_next_rx_char(void *callback_state, char c) { + //fprintf(stdout, "text msg: %c\n", c); +} + +void my_put_next_rx_proto(void *callback_state,char *proto_bits){ + //fprintf(stdout, "proto chars: %.*s\n",2, proto_bits); +} + +/* Called when a packet has been received */ +void my_datarx(void *callback_state, unsigned char *packet, size_t size) { + //size_t i; + // + //fprintf(stdout, "data (%zd bytes): ", size); + //for (i = 0; i < size; i++) { + // fprintf(stdout, "0x%02x ", packet[i]); + //} + //fprintf(stdout, "\n"); +} + +/* Called when a new packet can be send */ +void my_datatx(void *callback_state, unsigned char *packet, size_t *size) { + /* This should not happen while receiving.. */ + fprintf(stderr, "datarx callback called, this should not happen!\n"); + *size = 0; +} + +#define SPARE_RAM 10000 + +int main(int argc, char *argv[]) { + char dummy[SPARE_RAM]; + int f_cfg, f_in, f_out; + struct freedv *freedv; + struct my_callback_state my_cb_state; + int frame; + int nread, nin, nout; + int sync; + float snr_est; + + // Force test to fail unless we have this much spare RAM (adjusted by experiment) + memset(dummy, 0, SPARE_RAM); + + semihosting_init(); + PROFILE_VAR(freedv_rx_start); + machdep_profile_init(); + + //////// + // Test configuration, read from stm_cfg.txt + int config_mode; // 0 + int config_testframes; // 1 + int config_verbose; // 6 + //int config_profile; // 7 + char config[8]; + f_cfg = open("stm_cfg.txt", O_RDONLY); + if (f_cfg == -1) { + fprintf(stderr, "Error opening config file\n"); + exit(1); + } + if (read(f_cfg, &config[0], 8) != 8) { + fprintf(stderr, "Error reading config file\n"); + exit(1); + } + config_mode = config[0] - '0'; + config_testframes = config[1] - '0'; + config_verbose = config[6] - '0'; + //config_profile = config[7] - '0'; + close(f_cfg); + printf("config_mode: %d config_verbose: %d\n", config_mode, config_verbose); + + //////// + freedv = freedv_open(config_mode); + assert(freedv != NULL); + + memtools_find_unused(printf); + + freedv_set_test_frames(freedv, config_testframes); + freedv_set_verbose(freedv, config_verbose); + + freedv_set_snr_squelch_thresh(freedv, -100.0); + freedv_set_squelch_en(freedv, 0); + + short speech_out[freedv_get_n_speech_samples(freedv)]; + short demod_in[freedv_get_n_max_modem_samples(freedv)]; + + freedv_set_callback_txt(freedv, &my_put_next_rx_char, NULL, &my_cb_state); + freedv_set_callback_protocol(freedv, &my_put_next_rx_proto, NULL, &my_cb_state); + freedv_set_callback_data(freedv, my_datarx, my_datatx, &my_cb_state); + + //////// + // Streams + f_in = open("stm_in.raw", O_RDONLY); + if (f_in == -1) { + perror("Error opening input file\n"); + exit(1); + } + + f_out = open("stm_out.raw", (O_CREAT | O_WRONLY), 0644); + if (f_out == -1) { + perror("Error opening output file\n"); + exit(1); + } + + frame = 0; + + //////// + // Main loop + + nin = freedv_nin(freedv); + while((nread = read(f_in, demod_in, (sizeof(short) * nin))) == (nin * sizeof(short))) { + + fprintf(stderr, "frame: %d, %d bytes read\n", frame, nread); + + PROFILE_SAMPLE(freedv_rx_start); + nout = freedv_rx(freedv, speech_out, demod_in); + PROFILE_SAMPLE_AND_LOG2(freedv_rx_start, " freedv_rx"); + machdep_profile_print_logged_samples(); + + fprintf(stderr, " %d short speech values returned\n", nout); + if (nout) write(f_out, speech_out, (sizeof(short) * nout)); + + if (sync == 0) { + // discard BER results if we get out of sync, helps us get sensible BER results + freedv_set_total_bits(freedv, 0); freedv_set_total_bit_errors(freedv, 0); + freedv_set_total_bits_coded(freedv, 0); freedv_set_total_bit_errors_coded(freedv, 0); + } + freedv_get_modem_stats(freedv, &sync, &snr_est); + int total_bit_errors = freedv_get_total_bit_errors(freedv); + fprintf(stderr, + "frame: %d demod sync: %d nin: %d demod snr: %3.2f dB bit errors: %d\n", + frame, sync, nin, (double)snr_est, total_bit_errors); + + frame++; + nin = freedv_nin(freedv); + } + + ////// + if (freedv_get_test_frames(freedv)) { + int Tbits = freedv_get_total_bits(freedv); + int Terrs = freedv_get_total_bit_errors(freedv); + fprintf(stderr, "BER......: %5.4f Tbits: %5d Terrs: %5d\n", + (double)Terrs/Tbits, Tbits, Terrs); + if (config_mode == FREEDV_MODE_700D) { + int Tbits_coded = freedv_get_total_bits_coded(freedv); + int Terrs_coded = freedv_get_total_bit_errors_coded(freedv); + fprintf(stderr, "Coded BER: %5.4f Tbits: %5d Terrs: %5d\n", + (double)Terrs_coded/Tbits_coded, Tbits_coded, Terrs_coded); + } + } + + printf("Done\n"); + + close(f_in); + close(f_out); + + memtools_find_unused(printf); + printf("\nEnd of Test\n"); +} + +/* vi:set ts=4 et sts=4: */ diff --git a/libcodec2-android/src/codec2/stm32/unittest/src/tst_api_demod_700d_profile.c b/libcodec2-android/src/codec2/stm32/unittest/src/tst_api_demod_700d_profile.c new file mode 100644 index 0000000..4f3dfbe --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/unittest/src/tst_api_demod_700d_profile.c @@ -0,0 +1,136 @@ +/*------------------------------------------------------ + + FILE........: tst_api_demod.c + AUTHOR......: David Rowe, Don Reid + DATE CREATED: 7 July 2018 + + Test and profile OFDM de-modulation on the STM32F4. + +-------------------------------------------------------*/ + +/* + Copyright (C) 2014 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "freedv_api.h" +#include "modem_stats.h" +#include "codec2.h" + +#include "semihosting.h" +#include "stm32f4xx_conf.h" +#include "stm32f4xx.h" +#include "machdep.h" + + +/* Input and Reference data */ +const +#include "api_demod_700d_in_10f.c" + +struct my_callback_state { + //FILE *ftxt; +}; + +void my_put_next_rx_char(void *callback_state, char c) { + //fprintf(stdout, "text msg: %c\n", c); +} + +void my_put_next_rx_proto(void *callback_state,char *proto_bits){ + //fprintf(stdout, "proto chars: %.*s\n",2, proto_bits); +} + +/* Called when a packet has been received */ +void my_datarx(void *callback_state, unsigned char *packet, size_t size) { + //size_t i; + // + //fprintf(stdout, "data (%zd bytes): ", size); + //for (i = 0; i < size; i++) { + // fprintf(stdout, "0x%02x ", packet[i]); + //} + //fprintf(stdout, "\n"); +} + +/* Called when a new packet can be send */ +void my_datatx(void *callback_state, unsigned char *packet, size_t *size) { + /* This should not happen while receiving.. */ + fprintf(stderr, "datarx callback called, this should not happen!\n"); + *size = 0; +} + + +int main(int argc, char *argv[]) { + struct freedv *freedv; + struct my_callback_state my_cb_state; + int frame; + int nin, nout; + + //////// + PROFILE_VAR(prof_freedv_rx); + machdep_profile_init(); + + semihosting_init(); + + //////// + freedv = freedv_open(FREEDV_MODE_700D); + + freedv_set_snr_squelch_thresh(freedv, -100.0); + freedv_set_squelch_en(freedv, 0); + + short speech_out[freedv_get_n_speech_samples(freedv)]; + + freedv_set_callback_txt(freedv, &my_put_next_rx_char, NULL, &my_cb_state); + freedv_set_callback_protocol(freedv, &my_put_next_rx_proto, NULL, &my_cb_state); + freedv_set_callback_data(freedv, my_datarx, my_datatx, &my_cb_state); + + frame = 0; + + //////// + // Main loop + + nin = freedv_nin(freedv); + int in_ptr = 0; + while(in_ptr < api_demod_700d_in_10f_len) { + + PROFILE_SAMPLE(prof_freedv_rx); + + nout = freedv_shortrx(freedv, speech_out, (short *)&api_demod_700d_in_10f[in_ptr], 1.0f); + + PROFILE_SAMPLE_AND_LOG2(prof_freedv_rx, "freedv_rx"); + + //if (nout) write(f_out, speech_out, (sizeof(short) * nout)); + + frame++; + in_ptr += nin * 2; + } + + machdep_profile_print_logged_samples(); + + fclose(stdout); + fclose(stderr); + +} + +/* vi:set ts=4 et sts=4: */ diff --git a/libcodec2-android/src/codec2/stm32/unittest/src/tst_api_mod.c b/libcodec2-android/src/codec2/stm32/unittest/src/tst_api_mod.c new file mode 100644 index 0000000..49d2610 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/unittest/src/tst_api_mod.c @@ -0,0 +1,266 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: tst_api_mod.c + AUTHOR......: David Rowe, Don Reid + DATE CREATED: August 2014, Oct 2018 + + Test modem modulation via freedv API on the STM32F4. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2014 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +/* Typical run, using internal testframes: + + # Copy N frames of a raw audio file to stm_in.raw. + # N=6, count = 6 * 1280 * 2 = 15360 + dd bs=1 count=15360 if=../../../../raw/hts1.raw of=stm_in.raw + + # Reference + freedv_tx 700D stm_in.raw ref_mod.raw --testframes + + # Create config + echo "71000000" > stm_cfg.txt + + # Run stm32 + run_stm32_prog ../../src/tst_api_mod.elf --load + + # Check output + freedv_rx 700D ref_mod.raw ref_rx.raw --testframes + freedv_rx 700D stm_out.raw stm_rx.raw --testframes + #optional: ofdm_demod ref_mod.raw ref_demod.raw --ldpc --testframes + #optional: ofdm_demod stm_out.raw stm_demod.raw --ldpc --testframes + + compare_ints -s -b 2 ref_mod.raw stm_out.raw +*/ + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "freedv_api.h" +#include "codec2.h" + +#include "semihosting.h" +#include "stm32f4xx_conf.h" +#include "stm32f4xx.h" +#include "machdep.h" +#include "memtools.h" + +struct my_callback_state { + char tx_str[80]; + char *ptx_str; + int calls; +}; + +char my_get_next_tx_char(void *callback_state) { + struct my_callback_state* pstate = (struct my_callback_state*)callback_state; + char c = *pstate->ptx_str++; + //fprintf(stderr, "my_get_next_tx_char: %c\n", c); + if (*pstate->ptx_str == 0) { + pstate->ptx_str = pstate->tx_str; + } + return c; +} + +void my_get_next_proto(void *callback_state,char *proto_bits){ + struct my_callback_state* cb_states = (struct my_callback_state*)(callback_state); + snprintf(proto_bits,3,"%2d",cb_states->calls); + cb_states->calls = cb_states->calls + 1; +} + +/* Called when a packet has been received */ +void my_datarx(void *callback_state, unsigned char *packet, size_t size) { + /* This should not happen while sending... */ + fprintf(stderr, "datarx callback called, this should not happen!\n"); +} + +/* Called when a new packet can be send */ +void my_datatx(void *callback_state, unsigned char *packet, size_t *size) { + static int data_toggle; + /* Data could come from a network interface, here we just make up some */ + data_toggle = !data_toggle; + if (data_toggle) { + /* Send a packet with data */ + int i; + for (i = 0; i < 64; i++) + packet[i] = i; + *size = i; + } else { + /* set size to zero, the freedv api will insert a header frame */ + *size = 0; + } +} + + +int main(int argc, char *argv[]) { + struct freedv *freedv; + int f_cfg, f_in, f_out; + int frame; + int num_read; + + //struct CODEC2 *c2; + struct my_callback_state my_cb_state; + + semihosting_init(); + memtools_find_unused(printf); + + //////// + // Test configuration, read from stm_cfg.txt + int config_mode; // 0 + int config_testframes; // 1 + //int config_verbose; // 6 + //int config_profile; // 7 + char config[8]; + f_cfg = open("stm_cfg.txt", O_RDONLY); + if (f_cfg == -1) { + fprintf(stderr, "Error opening config file\n"); + exit(1); + } + if (read(f_cfg, &config[0], 8) != 8) { + fprintf(stderr, "Error reading config file\n"); + exit(1); + } + config_mode = config[0] - '0'; + config_testframes = config[1] - '0'; + //config_verbose = config[6] - '0'; + //config_profile = config[7] - '0'; + close(f_cfg); + + //int use_codectx = 0; + //int use_datatx = 0; + //int use_testframes = 0; + int use_clip = 0; + int use_txbpf = 0; + int use_ext_vco = 0; + + //////// + //PROFILE_VAR(freedv_start); + //machdep_profile_init(); + + //////// + freedv = freedv_open(config_mode); + assert(freedv != NULL); + + fprintf(stderr, "freedv opened %p\n", freedv); + + freedv_set_test_frames(freedv, config_testframes); + + int n_speech_samples = freedv_get_n_speech_samples(freedv); + short *speech_in = (short*)malloc(sizeof(short)*n_speech_samples); + int n_nom_modem_samples = freedv_get_n_nom_modem_samples(freedv); + short *mod_out = (short*)malloc(sizeof(short)*n_nom_modem_samples); + + fprintf(stderr, "n_speech_samples: %d n_nom_modem_samples: %d\n", + n_speech_samples, n_nom_modem_samples); + + fprintf(stderr, "mod_out: %p\n", mod_out); + + /* + // This is "codectx" operation: + int c2_mode; + if (config_mode == FREEDV_MODE_700) { + c2_mode = CODEC2_MODE_700; + } else if ((config_mode == FREEDV_MODE_700B) || + (config_mode == FREEDV_MODE_800XA)) { + c2_mode = CODEC2_MODE_700B; + } else if ((config_mode == FREEDV_MODE_700C) || + (config_mode == FREEDV_MODE_700D)) { + c2_mode = CODEC2_MODE_700C; + } else { + c2_mode = CODEC2_MODE_1300; + } + c2 = codec2_create(c2_mode); + + int bits_per_codec_frame = codec2_bits_per_frame(c2); + int bytes_per_codec_frame = (bits_per_codec_frame + 7) / 8; + int codec_frames = freedv_get_n_codec_bits(freedv) / bits_per_codec_frame; + int inbuf_size = bytes_per_codec_frame * codec_frames; + unsigned char inbuf[inbuf_size]; +*/ + + freedv_set_snr_squelch_thresh(freedv, -100.0); + freedv_set_squelch_en(freedv, 1); + freedv_set_clip(freedv, use_clip); + freedv_set_tx_bpf(freedv, use_txbpf); + freedv_set_ext_vco(freedv, use_ext_vco); + + memtools_find_unused(printf); + + // set up callback for txt msg chars + sprintf(my_cb_state.tx_str, "cq cq cq hello world\r"); + my_cb_state.ptx_str = my_cb_state.tx_str; + my_cb_state.calls = 0; + freedv_set_callback_txt(freedv, NULL, &my_get_next_tx_char, &my_cb_state); + + // set up callback for protocol bits + freedv_set_callback_protocol(freedv, NULL, &my_get_next_proto, &my_cb_state); + + // set up callback for data packets + freedv_set_callback_data(freedv, my_datarx, my_datatx, &my_cb_state); + + //////// + // Streams + f_in = open("stm_in.raw", O_RDONLY); + if (f_in == -1) { + perror("Error opening input file\n"); + exit(1); + } + + f_out = open("stm_out.raw", (O_CREAT | O_WRONLY), 0644); + if (f_out == -1) { + perror("Error opening output file\n"); + exit(1); + } + + frame = 0; + + fprintf(stderr, "starting main loop\n"); + + //////// + // Main loop + while ((num_read = read(f_in, speech_in, (sizeof(short) * n_speech_samples))) == + (sizeof(short) * n_speech_samples)) { + fprintf(stderr, "frame: %d\r", frame); + + freedv_tx(freedv, mod_out, speech_in); + + write(f_out, mod_out, (sizeof(short) * n_nom_modem_samples)); + + frame++ ; + //machdep_profile_print_logged_samples(); + + } + printf("Done\n"); + + close(f_in); + close(f_out); + printf("\nEnd of Test\n"); + + return(0); +} + +/* vi:set ts=4 et sts=4: */ diff --git a/libcodec2-android/src/codec2/stm32/unittest/src/tst_api_mod_700d_profile.c b/libcodec2-android/src/codec2/stm32/unittest/src/tst_api_mod_700d_profile.c new file mode 100644 index 0000000..9c7f881 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/unittest/src/tst_api_mod_700d_profile.c @@ -0,0 +1,167 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: tst_api_mod.c + AUTHOR......: David Rowe, Don Reid + DATE CREATED: August 2014, Oct 2018 + + Test modem modulation via freedv API on the STM32F4. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2014 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +/* This is a test implementation of the Freev API Modulation function. + * It is used for profiling performance. + * + * The input is generated within the test. + * The output is ignored. + */ + + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "freedv_api.h" +#include "codec2.h" + +#include "semihosting.h" +#include "stm32f4xx_conf.h" +#include "stm32f4xx.h" +#include "machdep.h" + +struct my_callback_state { + char tx_str[80]; + char *ptx_str; + int calls; +}; + +char my_get_next_tx_char(void *callback_state) { + struct my_callback_state* pstate = (struct my_callback_state*)callback_state; + char c = *pstate->ptx_str++; + if (*pstate->ptx_str == 0) { + pstate->ptx_str = pstate->tx_str; + } + return c; +} + +void my_get_next_proto(void *callback_state,char *proto_bits){ + struct my_callback_state* cb_states = (struct my_callback_state*)(callback_state); + snprintf(proto_bits,3,"%2d",cb_states->calls); + cb_states->calls = cb_states->calls + 1; +} + +/* Called when a packet has been received */ +void my_datarx(void *callback_state, unsigned char *packet, size_t size) { + /* This should not happen while sending... */ + assert(0); +} + +/* Called when a new packet can be send */ +void my_datatx(void *callback_state, unsigned char *packet, size_t *size) { + static int data_toggle; + /* Data could come from a network interface, here we just make up some */ + data_toggle = !data_toggle; + if (data_toggle) { + /* Send a packet with data */ + int i; + for (i = 0; i < 64; i++) + packet[i] = i; + *size = i; + } else { + /* set size to zero, the freedv api will insert a header frame */ + *size = 0; + } +} + + +int main(int argc, char *argv[]) { + struct freedv *freedv; + int i; + + struct my_callback_state my_cb_state; + + int use_clip = 0; + int use_txbpf = 0; + int use_ext_vco = 0; + + //////// + PROFILE_VAR(prof_freedv_tx); + machdep_profile_init(); + + semihosting_init(); + + //////// + freedv = freedv_open(FREEDV_MODE_700D); + + int n_speech_samples = freedv_get_n_speech_samples(freedv); + short *speech_in = (short*)malloc(sizeof(short)*n_speech_samples); + int n_nom_modem_samples = freedv_get_n_nom_modem_samples(freedv); + short *mod_out = (short*)malloc(sizeof(short)*n_nom_modem_samples); + + freedv_set_snr_squelch_thresh(freedv, -100.0); + freedv_set_squelch_en(freedv, 1); + freedv_set_clip(freedv, use_clip); + freedv_set_tx_bpf(freedv, use_txbpf); + freedv_set_ext_vco(freedv, use_ext_vco); + + // set up callback for txt msg chars + sprintf(my_cb_state.tx_str, "cq cq cq hello world\r"); + my_cb_state.ptx_str = my_cb_state.tx_str; + my_cb_state.calls = 0; + freedv_set_callback_txt(freedv, NULL, &my_get_next_tx_char, &my_cb_state); + + // set up callback for protocol bits + freedv_set_callback_protocol(freedv, NULL, &my_get_next_proto, &my_cb_state); + + // set up callback for data packets + freedv_set_callback_data(freedv, my_datarx, my_datatx, &my_cb_state); + + int frame = 0; + + for (i=0; i. +*/ + +#include +#include +#include +#include +#include + +#include "semihosting.h" +#include "codec2_ofdm.h" +#include "ofdm_internal.h" +#include "interldpc.h" +#include "gp_interleaver.h" + +#include "stm32f4xx_conf.h" +#include "stm32f4xx.h" +#include "freedv_api.h" +#include "machdep.h" + +int main(int argc, char *argv[]) { + struct freedv *f; + FILE *fin, *fout; + int frame, n_samples; + + semihosting_init(); + + //PROFILE_VAR(freedv_start); + + //machdep_profile_init(); + + f = freedv_open(FREEDV_MODE_1600); + n_samples = freedv_get_n_speech_samples(f); + short inbuf[n_samples], outbuf[n_samples]; + + freedv_set_test_frames(f, 1); + + // Transmit --------------------------------------------------------------------- + + fin = fopen("stm_in.raw", "rb"); + if (fin == NULL) { + printf("Error opening input file\n"); + exit(1); + } + + fout = fopen("mod.raw", "wb"); + if (fout == NULL) { + printf("Error opening output file\n"); + exit(1); + } + + frame = 0; + + while (fread(inbuf, sizeof(short), n_samples, fin) == n_samples) { + //PROFILE_SAMPLE(freedv_start); + freedv_tx(f, outbuf, inbuf); + //PROFILE_SAMPLE_AND_LOG2(freedv_start, " freedv_tx"); + + fwrite(outbuf, sizeof(short), n_samples, fout); + printf("frame: %d\n", ++frame); + //machdep_profile_print_logged_samples(); + } + + fclose(fin); + fclose(fout); + + return 0; +} + +/* vi:set ts=4 et sts=4: */ diff --git a/libcodec2-android/src/codec2/stm32/unittest/src/tst_codec2_dec.c b/libcodec2-android/src/codec2/stm32/unittest/src/tst_codec2_dec.c new file mode 100644 index 0000000..406a84d --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/unittest/src/tst_codec2_dec.c @@ -0,0 +1,164 @@ +/*------------------------------------------------------ + + FILE........: tst_codec2_dec.c + AUTHOR......: David Rowe, Don Reid + DATE CREATED: 30 May 2013, Oct 2018 + + Test Codec 2 decoding on the STM32F4. + +-------------------------------------------------------*/ + +/* + Copyright (C) 2014 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +/* Typical run, using internal testframes: + + # Input + # Copy N frames of a raw audio file to stm_in.raw. + dd bs=2560 count=30 if=../../../../raw/hts1.raw of=spch_in.raw + c2enc 700C spch_in.raw stm_in.raw + + # Reference + c2dec 700C stm_in.raw ref_dec.raw + + # Create config + echo "81000000" > stm_cfg.txt + + # Run stm32 + run_stm32_prog ../../src/tst_codec2_dec.elf --load + + # Compare outputs + compare_ints -s -b 2 ref_dec.raw stm_out.raw + + # Manual play (and listen) + aplay -f S16_LE ref_dec.raw + # + aplay -f S16_LE stm_out.raw + + + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "codec2.h" + +#include "semihosting.h" +#include "stm32f4xx_conf.h" +#include "stm32f4xx.h" +#include "machdep.h" + + +static char fin_buffer[1024]; +static __attribute__ ((section (".ccm"))) char fout_buffer[4*8192]; + +int main(int argc, char *argv[]) { + int f_cfg; + int frame; + void *codec2; + short *buf; + unsigned char *bits; + + int nsam, nbit, nbyte; + + semihosting_init(); + + //////// + // Test configuration, read from stm_cfg.txt + int config_mode; // 0 + int config_gray; // 1 + //int config_verbose; // 6 + //int config_profile; // 7 + char config[8]; + f_cfg = open("stm_cfg.txt", O_RDONLY); + if (f_cfg == -1) { + fprintf(stderr, "Error opening config file\n"); + exit(1); + } + if (read(f_cfg, &config[0], 8) != 8) { + fprintf(stderr, "Error reading config file\n"); + exit(1); + } + config_mode = config[0] - '0'; + config_gray = config[1] - '0'; + //config_verbose = config[6] - '0'; + //config_profile = config[7] - '0'; + close(f_cfg); + + + //////// + // Setup + codec2 = codec2_create(config_mode); + assert(codec2 != NULL); + codec2_set_natural_or_gray(codec2, config_gray); + + nsam = codec2_samples_per_frame(codec2); + nbit = codec2_bits_per_frame(codec2); + buf = (short*)malloc(nsam*sizeof(short)); + nbyte = (nbit + 7) / 8; + bits = (unsigned char*)malloc(nbyte*sizeof(char)); + + + //////// + // Streams + FILE* fin = fopen("stm_in.raw", "rb"); + if (fin == NULL) { + perror("Error opening input file\n"); + exit(1); + } + setvbuf(fin, fin_buffer,_IOFBF,sizeof(fin_buffer)); + + FILE *fout = fopen("stm_out.raw", "wb" ); + if (fout == NULL) { + perror("Error opening output file\n"); + exit(1); + } + setvbuf(fout, fout_buffer,_IOFBF,sizeof(fout_buffer)); + + frame = 0; + + //////// + // Main loop + int bytes_per_frame = (sizeof(char) * nbyte); + while (fread(bits, 1, bytes_per_frame, fin) == (size_t)bytes_per_frame) { + + codec2_decode_ber(codec2, buf, bits, 0.0); + + fwrite(buf, sizeof(short) , nsam, fout); + + frame ++; + } + + + fclose(fin); + fclose(fout); + + printf("\nEnd of Test\n"); + fclose(stdout); + fclose(stderr); + +} + +/* vi:set ts=4 et sts=4: */ diff --git a/libcodec2-android/src/codec2/stm32/unittest/src/tst_codec2_enc.c b/libcodec2-android/src/codec2/stm32/unittest/src/tst_codec2_enc.c new file mode 100644 index 0000000..f799265 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/unittest/src/tst_codec2_enc.c @@ -0,0 +1,172 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: tst_codec2_enc.c, (derived from codec2_profile.c) + AUTHOR......: David Rowe, Don Reid + DATE CREATED: 30 May 2013, Oct 2018 + + Test Codec 2 encoding on the STM32F4. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2014 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +/* This is a unit test implementation of the Codec2_encode function. + * + * Typical run: + + # Copy N frames of a raw audio file to stm_in.raw. + dd bs=2560 count=30 if=../../../../raw/hts1.raw of=stm_in.raw + + # Run x86 command for reference output + c2enc 700C stm_in.raw ref_enc.raw + + # Create config + echo "80000000" > stm_cfg.txt + + # Run stm32 + run_stm32_prog ../../src/tst_codec2_enc.elf --load + + # Compare outputs + comare_ints -b 1 ref_enc.raw stm_out.raw + + # Manual play (and listen) + c2dec 700C ref_enc.raw ref_dec.raw + aplay -f S16_LE ref_out.raw + # + c2dec 700C stm_out.raw stm_dec.raw + aplay -f S16_LE stm_dec.raw + + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "codec2.h" + +#include "stm32f4xx_conf.h" +#include "stm32f4xx.h" +#include "semihosting.h" +#include "machdep.h" + +static __attribute__ ((section (".ccm"))) char fin_buffer[8*8192]; +char fout_buffer[1024]; + + +int main(int argc, char *argv[]) { + int f_cfg; + + struct CODEC2 *codec2; + short *buf; + unsigned char *bits; + int nsam, nbit, nbyte; + int gray; + int frame; + + //////// + // Semihosting + semihosting_init(); + + //////// + // Test configuration, read from stm_cfg.txt + int config_mode; // 0 + //int config_verbose; // 6 + //int config_profile; // 7 + char config[8]; + f_cfg = open("stm_cfg.txt", O_RDONLY); + if (f_cfg == -1) { + fprintf(stderr, "Error opening config file\n"); + exit(1); + } + if (read(f_cfg, &config[0], 8) != 8) { + fprintf(stderr, "Error reading config file\n"); + exit(1); + } + config_mode = config[0] - '0'; + //config_verbose = config[6] - '0'; + //config_profile = config[7] - '0'; + close(f_cfg); + + //////// + //PROFILE_VAR(freedv_start); + //machdep_profile_init(); + + //////// + codec2 = codec2_create(config_mode); + nsam = codec2_samples_per_frame(codec2); + nbit = codec2_bits_per_frame(codec2); + buf = (short*)malloc(nsam*sizeof(short)); + nbyte = (nbit + 7) / 8; + bits = (unsigned char*)malloc(nbyte*sizeof(char)); + + gray = 1; + //softdec = 0; + //bitperchar = 0; + + codec2_set_natural_or_gray(codec2, gray); + + //////// + // Streams + FILE* fin = fopen("stm_in.raw", "rb"); + if (fin == NULL) { + perror("Error opening input file\n"); + exit(1); + } + setvbuf(fin, fin_buffer,_IOFBF,sizeof(fin_buffer)); + + FILE* fout = fopen("stm_out.raw", "wb"); + if (fout == NULL) { + perror("Error opening output file\n"); + exit(1); + } + + frame = 0; + + int bytes_per_frame = (sizeof(short) * nsam); + while (fread(buf,1, bytes_per_frame, fin) == bytes_per_frame) { + + //PROFILE_SAMPLE(enc_start); + codec2_encode(codec2, bits, buf); + //PROFILE_SAMPLE_AND_LOG2(, enc_start, " enc"); + + fwrite(bits, 1, (sizeof(char) * nbyte), fout); + printf("frame: %d\n", ++frame); + + //machdep_profile_print_logged_samples(); + } + + codec2_destroy(codec2); + + free(buf); + free(bits); + fclose(fin); + fclose(fout); + + printf("\nEnd of Test\n"); + fclose(stdout); + fclose(stderr); + + return(0); +} + +/* vi:set ts=4 et sts=4: */ diff --git a/libcodec2-android/src/codec2/stm32/unittest/src/tst_codec2_fft_init.c b/libcodec2-android/src/codec2/stm32/unittest/src/tst_codec2_fft_init.c new file mode 100644 index 0000000..aae5f60 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/unittest/src/tst_codec2_fft_init.c @@ -0,0 +1,104 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: tst_codec2_fft_init.c, + AUTHOR......: David Rowe, Don Reid + DATE CREATED: 30 May 2013, Oct 2018, Feb 2018 + + Test FFT Window initialization in Codec2_create + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2014 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include +#include +#include + +#include "codec2.h" +#include "codec2_internal.h" +#include "defines.h" + +#include "stm32f4xx_conf.h" +#include "stm32f4xx.h" +#include "semihosting.h" +#include "machdep.h" + +static const float expect_w[] = { + 0.004293, 0.004301, 0.004309, 0.004315, + 0.004320, 0.004323, 0.004326, 0.004328, + 0.004328, 0.004328, 0.004326, 0.004323, + 0.004320, 0.004315, 0.004309, 0.004301}; + + +static const float expect_W[] = { + -0.002176, 0.002195, 0.004429, -0.008645, + -0.012196, 0.065359, 0.262390, 0.495616, + 0.601647, 0.495616, 0.262390, 0.065359, + -0.012196, -0.008645, 0.004429, 0.002195}; + + +int float_cmp(float a, float b) { + if ( fabsf(a - b) < 1e-6f ) return 1; + else return 0; + } + +int main(int argc, char *argv[]) { + + struct CODEC2 *codec2; + int i, j; + + //////// + // Semihosting + semihosting_init(); + + //////// + codec2 = codec2_create(CODEC2_MODE_700C); + + j = (codec2->c2const.m_pitch / 2) - 8; + for (i=0; i<16; i++) { + printf("w[%d] = %f", j+i, + (double)codec2->w[j+i]); + if (!float_cmp(codec2->w[j+i], expect_w[i])) { + printf(" Error, expected %f", (double)expect_w[i]); + } + printf("\n"); + } + + printf("\n"); + + j = (FFT_ENC / 2) - 8; + for (i=0; i<16; i++) { + printf("W[%d] = %f", j+i, + (double)codec2->W[j+i]); + if (!float_cmp(codec2->W[j+i], expect_W[i])) { + printf(" Error, expected %f", (double)expect_W[i]); + } + printf("\n"); + } + + codec2_destroy(codec2); + + printf("\nEnd of Test\n"); + fclose(stdout); + fclose(stderr); + + return(0); +} + +/* vi:set ts=4 et sts=4: */ diff --git a/libcodec2-android/src/codec2/stm32/unittest/src/tst_ldpc_dec.c b/libcodec2-android/src/codec2/stm32/unittest/src/tst_ldpc_dec.c new file mode 100644 index 0000000..f177255 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/unittest/src/tst_ldpc_dec.c @@ -0,0 +1,204 @@ +/* + FILE...: ldpc_dec.c + AUTHOR.: Matthew C. Valenti, Rohit Iyer Seshadri, David Rowe, Don Reid + CREATED: Sep 2016 + + Command line C LDPC decoder derived from MpDecode.c in the CML + library. Allows us to run the same decoder in Octave and C. The + code is defined by the parameters and array stored in the include + file below, which can be machine generated from the Octave function + ldpc_fsk_lib.m:ldpc_decode() + + The include file also contains test input/output vectors for the LDPC + decoder for testing this program. If no input file "stm_in.raw" is found + then the built in test mode will run. + + If there is an input is should be encoded data from the x86 ldpc_enc + program. Here is the suggested way to run: + + ldpc_enc /dev/zero stm_in.raw --sd --code HRA_112_112 --testframes 6 + + ldpc_dec stm_in.raw ref_out.raw --sd --code HRA_112_112 --testframes + + + + cmp -l ref_out.raw stm_out.raw + << Check BER values in logs >> +*/ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "mpdecode_core.h" +#include "ofdm_internal.h" + +#include "semihosting.h" +#include "stm32f4xx_conf.h" +#include "stm32f4xx.h" +#include "machdep.h" + +/* generated by ldpc_fsk_lib.m:ldpc_decode() */ +/* Machine generated consts, H_rows, H_cols, test input/output data to + change LDPC code regenerate this file. */ + +#include "HRA_112_112.h" + +int testframes = 1; + +static char fin_buffer[1024]; +static __attribute__ ((section (".ccm"))) char fout_buffer[8*8192]; + +int main(int argc, char *argv[]) { + int CodeLength, NumberParityBits; + int i, parityCheckCount; + uint8_t out_data[HRA_112_112_CODELENGTH]; + struct LDPC ldpc; + int data_bits_per_frame; + FILE *fout; + int iter, total_iters; + int Tbits, Terrs, Tbits_raw, Terrs_raw; + + int nread, frame; + + semihosting_init(); + + fprintf(stderr, "LDPC decode test and profile\n"); + + PROFILE_VAR(ldpc_decode); + machdep_profile_init(); + + ldpc.max_iter = HRA_112_112_MAX_ITER; + ldpc.dec_type = 0; + ldpc.q_scale_factor = 1; + ldpc.r_scale_factor = 1; + ldpc.CodeLength = HRA_112_112_CODELENGTH; + ldpc.NumberParityBits = HRA_112_112_NUMBERPARITYBITS; + ldpc.NumberRowsHcols = HRA_112_112_NUMBERROWSHCOLS; + ldpc.max_row_weight = HRA_112_112_MAX_ROW_WEIGHT; + ldpc.max_col_weight = HRA_112_112_MAX_COL_WEIGHT; + ldpc.H_rows = (uint16_t *)HRA_112_112_H_rows; + ldpc.H_cols = (uint16_t *)HRA_112_112_H_cols; + + CodeLength = ldpc.CodeLength; + NumberParityBits = ldpc.NumberParityBits; + data_bits_per_frame = ldpc.NumberRowsHcols; + unsigned char ibits[data_bits_per_frame]; + unsigned char pbits[NumberParityBits]; + +// // Allocate common space which can be shared with other functions. +// int size_common; +// uint8_t *common_array; + +// ldpc_init(&ldpc, &size_common); +// fprintf(stderr, "ldpc needs %d bytes of shared memory\n", size_common); +// common_array = malloc(size_common); + + testframes = 1; + total_iters = 0; + + if (testframes) { + uint16_t r[data_bits_per_frame]; + ofdm_rand(r, data_bits_per_frame); + + for(i=0; i 16384; + } + encode(&ldpc, ibits, pbits); + Tbits = Terrs = Tbits_raw = Terrs_raw = 0; + } + + FILE* fin = fopen("stm_in.raw", "rb"); + if (fin == NULL) { + fprintf(stderr, "Error opening input file\n"); + fflush(stderr); + exit(1); + } + setvbuf(fin, fin_buffer,_IOFBF,sizeof(fin_buffer)); + + fout = fopen("stm_out.raw", "wb"); + if (fout == NULL) { + fprintf(stderr, "Error opening output file\n"); + fflush(stderr); + exit(1); + } + setvbuf(fout, fout_buffer,_IOFBF,sizeof(fout_buffer)); + + float *input_float = calloc(CodeLength, sizeof(float)); + + nread = CodeLength; + fprintf(stderr, "CodeLength: %d\n", CodeLength); + + frame = 0; + while(fread(input_float, sizeof(float) , nread, fin) == nread) { + fprintf(stderr, "frame %d\n", frame); + + if (testframes) { + char in_char; + for (i=0; i + + cmp -l ref_out.raw stm_out.raw + + */ + + +#include +#include +#include +#include +#include +#include + +#include "mpdecode_core.h" + +#include "semihosting.h" +#include "stm32f4xx_conf.h" +#include "stm32f4xx.h" +#include "machdep.h" + +/* generated by ldpc_fsk_lib.m:ldpc_decode() */ + +#include "HRA_112_112.h" + +static __attribute__ ((section (".ccm"))) char fin_buffer[8*8192]; +char fout_buffer[1024]; + +int opt_exists(char *argv[], int argc, char opt[]) { + int i; + for (i=0; i. +*/ + + +/* This is a unit test implementation of the OFDM Demod function. + * It is used for several tests: + * + * tst_ofdm_demod_ideal Simple 10 frames with no degradation. + * tst_ofdm_demod_AWGN Just AWGN in channel. + * tst_ofdm_demod_fade AWGN and fading in channel. + * tst_ofdm_demod_profile Profile, disable verbose logging. + * + * See tst_ofdm_demod_setup and tst_ofdm_demod_check scripts for details. + * + * This program reads a file "stm_cfg.txt" at startup to configure its options. + * + * This program is intended to be run using input data, typically + * Codec2 frames, which may have had simulated RF degredation applied. + * For example: + * + * ofdm_get_test_bits - 10 | * ofdm_mod - - | \ + * cohpsk_ch - stm_in.raw -20 -Fs 8000 -f -5 + * + * Reference data can be created by running the same input through the x86 + * ofdm_demod tool. + * + * ofdm_demod stm_in.raw ref_demod_out.raw -o ofdm_demod_ref_log.txt --testframes + * + * Comparison of the results to the reference will depend on the test conditions. + * Some small differences are expected due to differences in implementation. + * + */ + + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "semihosting.h" +#include "codec2_ofdm.h" +#include "ofdm_internal.h" +#include "mpdecode_core.h" +#include "ldpc_codes.h" +#include "interldpc.h" +#include "gp_interleaver.h" +#include "test_bits_ofdm.h" + +#include "debug_alloc.h" + +#include "stm32f4xx_conf.h" +#include "stm32f4xx.h" +#include "machdep.h" + +#define NDISCARD 20 + +extern const uint8_t payload_data_bits[]; +extern const int test_bits_ofdm[]; + +static struct OFDM_CONFIG *ofdm_config; + +static int ofdm_bitsperframe; +static int ofdm_rowsperframe; +static int ofdm_nuwbits; +static int ofdm_ntxtbits; +static int ofdm_nin; +static char fout_buffer[4*4096]; +static __attribute__ ((section (".ccm"))) char fdiag_buffer[4*8192]; +static __attribute__ ((section (".ccm"))) char fin_buffer[4096*8]; + +static char *statemode[] = { + "search", + "trial", + "synced" +}; + +static FILE *fout, *fdiag; +void flush_all(void) { + fflush(fout); + fflush(fdiag); + fflush(stdout); + fflush(stderr); + } + +int main(int argc, char *argv[]) { + struct OFDM *ofdm; + FILE *fcfg; + int nin_frame; + struct LDPC ldpc; + + // Test configuration, read from stm_cfg.txt + int config_verbose; + int config_testframes; + int config_ldpc_en; + int config_log_payload_syms; + int config_profile; + + int i; + int Nerrs, Terrs, Tbits, Terrs2, Tbits2, frame_count; + int Tbits_coded, Terrs_coded; + + semihosting_init(); + + fprintf(stdout, "OFDM Demod test\n"); + + // Read configuration - a file of '0' or '1' characters + char config[8]; + fcfg = fopen("stm_cfg.txt", "r"); + if (fcfg == NULL) { + fprintf(stderr, "Error opening config file\n"); + exit(1); + } + if (fread(&config[0], 1, 8, fcfg) != 8) { + fprintf(stderr, "Error reading config file\n"); + exit(1); + } + config_verbose = config[0] - '0'; + config_testframes = config[1] - '0'; + config_ldpc_en = config[2] - '0'; + config_log_payload_syms = config[3] - '0'; + config_profile = config[4] - '0'; + fclose(fcfg); + + int Nerrs_raw = 0; + int Nerrs_coded = 0; + int iter = 0; + int parityCheckCount = 0; + + PROFILE_VAR(ofdm_demod_start, ofdm_demod_sync_search, + ofdm_demod_demod, ofdm_demod_diss, ofdm_demod_snr); + ofdm_demod_start = 0; + ofdm_demod_sync_search = 0; + ofdm_demod_demod = 0; + ofdm_demod_diss = 0; + ofdm_demod_snr = 0; + if (config_profile) machdep_profile_init(); + + ofdm = ofdm_create(NULL); + assert(ofdm != NULL); + + /* Get a copy of the actual modem config */ + ofdm_config = ofdm_get_config_param(ofdm); + + ldpc_codes_setup(&ldpc, "HRA_112_112"); + + ofdm_bitsperframe = ofdm_get_bits_per_frame(ofdm); + ofdm_rowsperframe = ofdm_bitsperframe / (ofdm_config->nc * ofdm_config->bps); + ofdm_nuwbits = (ofdm_config->ns - 1) * ofdm_config->bps - ofdm_config->txtbits; + ofdm_ntxtbits = ofdm_config->txtbits; + ofdm_nin = ofdm_get_nin(ofdm); + + ofdm_set_verbose(ofdm, config_verbose); + + int Nmaxsamperframe = ofdm_get_max_samples_per_frame(ofdm); + + int data_bits_per_frame = ldpc.data_bits_per_frame; + int coded_bits_per_frame = ldpc.coded_bits_per_frame; + int coded_syms_per_frame = ldpc.coded_bits_per_frame/ofdm->bps; + + short rx_scaled[Nmaxsamperframe]; + int rx_bits[ofdm_bitsperframe]; + char rx_bits_char[ofdm_bitsperframe]; + uint8_t rx_uw[ofdm_nuwbits]; + short txt_bits[ofdm_ntxtbits]; + int f = 0; + Nerrs = Terrs = Tbits = Terrs2 = Tbits2 = Terrs_coded = Tbits_coded = frame_count = 0; + + float snr_est_smoothed_dB = 0.0; + + float EsNo = 3.0f; // Constant from ofdm_demod.c + + COMP payload_syms[coded_syms_per_frame]; + float payload_amps[coded_syms_per_frame]; + COMP codeword_symbols[coded_syms_per_frame]; + float codeword_amps[coded_syms_per_frame]; + + FILE* fin = fopen("stm_in.raw", "rb"); + if (fin == NULL) { + fprintf(stderr, "Error opening input file\n"); + exit(1); + } + setvbuf(fin, fin_buffer,_IOFBF,sizeof(fin_buffer)); + + + fout = fopen("stm_out.raw", "wb"); + if (fout == NULL) { + fprintf(stderr, "Error opening output file\n"); + exit(1); + } + setvbuf(fout, fout_buffer,_IOFBF,sizeof(fout_buffer)); + + fdiag = fopen("stm_diag.raw", "wb"); + if (fdiag == NULL) { + fprintf(stderr, "Error opening diag file\n"); + exit(1); + } + setvbuf(fdiag, fdiag_buffer,_IOFBF,sizeof(fdiag_buffer)); + + nin_frame = ofdm_get_nin(ofdm); + int num_read; + + while((num_read = fread(rx_scaled, sizeof(short) , nin_frame, fin)) == nin_frame) { + + int log_payload_syms_flag = 0; + + if (config_profile) PROFILE_SAMPLE(ofdm_demod_start); + + /* demod */ + + if (config_profile) PROFILE_SAMPLE_AND_LOG2(ofdm_demod_start, " ofdm_demod_start"); + + if (ofdm->sync_state == search) { + if (config_profile) PROFILE_SAMPLE(ofdm_demod_sync_search); + ofdm_sync_search_shorts(ofdm, rx_scaled, (OFDM_AMP_SCALE/2)); + if (config_profile) PROFILE_SAMPLE_AND_LOG2(ofdm_demod_sync_search, " ofdm_demod_sync_search"); + } + + if ((ofdm->sync_state == synced) || (ofdm->sync_state == trial) ) { + if (config_profile) PROFILE_SAMPLE(ofdm_demod_demod); + ofdm_demod_shorts(ofdm, rx_bits, rx_scaled, (OFDM_AMP_SCALE/2)); + if (config_profile) PROFILE_SAMPLE_AND_LOG2(ofdm_demod_demod, " ofdm_demod_demod"); + if (config_profile) PROFILE_SAMPLE(ofdm_demod_diss); + ofdm_extract_uw(ofdm, ofdm->rx_np, ofdm->rx_amp, rx_uw); + ofdm_disassemble_qpsk_modem_packet(ofdm, ofdm->rx_np, ofdm->rx_amp, payload_syms, payload_amps, txt_bits); + if (config_profile) PROFILE_SAMPLE_AND_LOG2(ofdm_demod_diss, " ofdm_demod_diss"); + log_payload_syms_flag = 1; + + /* SNR estimation and smoothing */ + if (config_profile) PROFILE_SAMPLE(ofdm_demod_snr); + float snr_est_dB = 10*log10((ofdm->sig_var/ofdm->noise_var) * + ofdm_config->nc * ofdm_config->rs / 3000); + snr_est_smoothed_dB = 0.9f * snr_est_smoothed_dB + 0.1f *snr_est_dB; + if (config_profile) { + PROFILE_SAMPLE_AND_LOG2(ofdm_demod_snr, " ofdm_demod_snr"); + } + + // LDPC + if (config_ldpc_en) { // was llr_en in orig + + /* first few symbols are used for UW and txt bits, find + start of (224,112) LDPC codeword and extract QPSK + symbols and amplitude estimates */ + assert((ofdm_nuwbits + ofdm_ntxtbits + coded_bits_per_frame) + == ofdm_bitsperframe); + + /* newest symbols at end of buffer (uses final i from last loop) */ + for(i=0; i < coded_syms_per_frame; i++) { + codeword_symbols[i] = payload_syms[i]; + codeword_amps[i] = payload_amps[i]; + } + + /* run de-interleaver */ + COMP codeword_symbols_de[coded_syms_per_frame]; + float codeword_amps_de[coded_syms_per_frame]; + + gp_deinterleave_comp (codeword_symbols_de, codeword_symbols, coded_syms_per_frame); + gp_deinterleave_float(codeword_amps_de, codeword_amps, coded_syms_per_frame); + + float llr[coded_bits_per_frame]; + + if (config_ldpc_en) { + uint8_t out_char[coded_bits_per_frame]; + + if (config_testframes) { + Terrs += count_uncoded_errors(&ldpc, ofdm_config, &Nerrs_raw, codeword_symbols_de); + Tbits += coded_bits_per_frame; + } + + symbols_to_llrs(llr, codeword_symbols_de, codeword_amps_de, + EsNo, ofdm->mean_amp, coded_syms_per_frame); + iter = run_ldpc_decoder(&ldpc, out_char, llr, &parityCheckCount); + + //fprintf(stderr,"iter: %d pcc: %d\n", iter, parityCheckCount); + + if (config_testframes) { + /* construct payload data bits */ + uint8_t payload_data_bits[data_bits_per_frame]; + ofdm_generate_payload_data_bits(payload_data_bits, data_bits_per_frame); + + Nerrs_coded = count_errors(payload_data_bits, out_char, data_bits_per_frame); + Terrs_coded += Nerrs_coded; + Tbits_coded += data_bits_per_frame; + } + + fwrite(out_char, sizeof(char), data_bits_per_frame, fout); + } else { + /* lpdc_en == 0, external LDPC decoder, so output LLRs */ + symbols_to_llrs(llr, codeword_symbols_de, codeword_amps_de, EsNo, ofdm->mean_amp, coded_syms_per_frame); + fwrite(llr, sizeof(double), coded_bits_per_frame, fout); + } + } else { // !llrs_en (or ldpc_en) + + /* simple hard decision output for uncoded testing, all bits in frame dumped inlcuding UW and txt */ + for(i=0; i 16384; + //fprintf(stderr,"%d %d ", r[i], tx_bits_char[i]); + } + + uint8_t txt_bits[ofdm_ntxtbits]; + + for(i=0; i= NDISCARD) { + Terrs2 += Nerrs; + Tbits2 += ofdm_bitsperframe; + } + } // config_testframes ... + + frame_count++; + } // state "synced" or "trial" + + nin_frame = ofdm_get_nin(ofdm); + ofdm_sync_state_machine(ofdm, rx_uw); + + /* act on any events returned by state machine */ + + if (ofdm->sync_start) { + Terrs = Tbits = Terrs2 = Tbits2 = Terrs_coded = Tbits_coded = frame_count = Nerrs_raw = Nerrs_coded = 0; + } + + if (config_testframes && config_verbose) { + fprintf(stderr, "%3d st: %-6s", f, statemode[ofdm->last_sync_state]); + fprintf(stderr, " euw: %2d %1d f: %5.1f eraw: %3d ecdd: %3d iter: %3d pcc: %3d\n", + ofdm->uw_errors, ofdm->sync_counter, + (double)ofdm->foff_est_hz, + Nerrs_raw, Nerrs_coded, iter, parityCheckCount); + } + + if (config_log_payload_syms) { + if (! log_payload_syms_flag) { + memset(payload_syms, 0, (sizeof(COMP)*coded_syms_per_frame)); + memset(payload_amps, 0, (sizeof(float)*coded_syms_per_frame)); + } + fwrite(payload_syms, sizeof(COMP), coded_syms_per_frame, fdiag); + fwrite(payload_amps, sizeof(float), coded_syms_per_frame, fdiag); + } + + f++; + } // while(fread(.., fin)) + + flush_all(); // To make sure this function is included in binary. + fclose(fin); + fclose(fout); + fclose(fdiag); + + if (config_testframes) { + printf("BER......: %5.4f Tbits: %5d Terrs: %5d\n", (double)Terrs/Tbits, Tbits, Terrs); + if (!config_ldpc_en) { + printf("BER2.....: %5.4f Tbits: %5d Terrs: %5d\n", (double)Terrs2/Tbits2, Tbits2, Terrs2); + } + if (config_ldpc_en) { + printf("Coded BER: %5.4f Tbits: %5d Terrs: %5d\n", + (double)Terrs_coded/Tbits_coded, Tbits_coded, Terrs_coded); + } + } + + if (config_profile) { + printf("\nStart Profile Data\n"); + machdep_profile_print_logged_samples(); + printf("End Profile Data\n"); + } + + printf("\nEnd of Test\n"); + fclose(stdout); + fclose(stderr); + + return 0; +} + +/* vi:set ts=4 et sts=4: */ diff --git a/libcodec2-android/src/codec2/stm32/unittest/src/tst_ofdm_mod.c b/libcodec2-android/src/codec2/stm32/unittest/src/tst_ofdm_mod.c new file mode 100644 index 0000000..6eb3ae2 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/unittest/src/tst_ofdm_mod.c @@ -0,0 +1,248 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: tst_ofdm_mod.c + AUTHOR......: David Rowe, Don Reid + DATE CREATED: 25 June 2018 + + Test and profile OFDM modulation on the STM32F4. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2014 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +/* This is a unit test implementation of the OFDM Mod function. + * + * Typical run: + + ofdm_gen_test_bits stm_in.raw 6 --rand + + ofdm_mod stm_in.raw ref_mod_out.raw + + echo "00000000" > stm_cfg.txt + + + + compare_ints -s -b2 ref_mod_out.raw mod.raw + + ofdm_demod ref_mod_out.raw ref_ofdm_demod.raw --testframes + ofdm_demod mod.raw stm_demod.raw --testframes + + * For LDPC use: + + ofdm_gen_test_bits stm_in.raw 6 --rand --ldpc + + ofdm_mod stm_in.raw ref_mod_out.raw --ldpc + + echo "00100000" > stm_cfg.txt + + + + ofdm_demod ref_mod_out.raw ref_ofdm_demod.raw --ldpc --testframes + ofdm_demod mod.raw stm_demod.raw --ldpc --testframes + + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "semihosting.h" +#include "codec2_ofdm.h" +#include "ofdm_internal.h" +#include "ldpc_codes.h" +#include "interldpc.h" +#include "gp_interleaver.h" + +#include "stm32f4xx_conf.h" +#include "stm32f4xx.h" +#include "machdep.h" + +#include "debug_alloc.h" + +int main(int argc, char *argv[]) { + struct OFDM *ofdm; + FILE *fcfg; + struct LDPC ldpc; + + // Test configuration, read from stm_cfg.txt + int config_verbose; +// int config_testframes; + int config_ldpc_en; +// int config_log_payload_syms; + int config_profile; + + int Nbitsperframe, Nsamperframe; + int frame = 0; + int i; + + semihosting_init(); + + printf("OFDM_mod test and profile\n"); + + // Read configuration - a file of '0' or '1' characters + char config[8]; + fcfg = fopen("stm_cfg.txt", "r"); + if (fcfg == NULL) { + fprintf(stderr, "Error opening config file\n"); + exit(1); + } + if (fread(&config[0], 1, 8, fcfg) != 8) { + fprintf(stderr, "Error reading config file\n"); + exit(1); + } + config_verbose = config[0] - '0'; +// config_testframes = config[1] - '0'; + config_ldpc_en = config[2] - '0'; +// config_log_payload_syms = config[3] - '0'; + config_profile = config[4] - '0'; + fclose(fcfg); + + PROFILE_VAR(ofdm_mod_start); + if (config_profile) machdep_profile_init(); + + struct OFDM_CONFIG *ofdm_config; + + ofdm = ofdm_create(NULL); + assert(ofdm != NULL); + + /* Get a copy of the actual modem config */ + ofdm_config = ofdm_get_config_param(ofdm); + + ldpc_codes_setup(&ldpc, "HRA_112_112"); + + Nbitsperframe = ofdm_get_bits_per_frame(ofdm); + int Ndatabitsperframe; + if (config_ldpc_en) { + Ndatabitsperframe = ldpc.data_bits_per_frame; + } else { + Ndatabitsperframe = ofdm_get_bits_per_frame(ofdm) - ofdm->nuwbits - ofdm->ntxtbits; + } + + Nsamperframe = ofdm_get_samples_per_frame(ofdm); +// int ofdm_nuwbits = (ofdm_config->ns - 1) * ofdm_config->bps - ofdm_config->txtbits; + + if (config_verbose) { + ofdm_set_verbose(ofdm, config_verbose); + fprintf(stderr, "Nsamperframe: %d, Nbitsperframe: %d \n", Nsamperframe, Nbitsperframe); + } + + int ofdm_ntxtbits = ofdm_config->txtbits; + + uint8_t tx_bits_char[Ndatabitsperframe]; + int16_t tx_scaled[Nsamperframe]; + uint8_t txt_bits_char[ofdm_ntxtbits]; + + for(i=0; i< ofdm_ntxtbits; i++) { + txt_bits_char[i] = 0; + } + + if (config_verbose) { + ofdm_print_info(ofdm); + } + + int sin = open("stm_in.raw", O_RDONLY); + if (sin < 0) { + printf("Error opening input file\n"); + exit(1); + } + + int sout = open("mod.raw", O_WRONLY|O_TRUNC|O_CREAT, 0666); + if (sout < 0) { + printf("Error opening output file\n"); + exit(1); + } + + while (read(sin, tx_bits_char, sizeof(char) * Ndatabitsperframe) == Ndatabitsperframe) { + fprintf(stderr, "Frame %d\n", frame); + + if (config_profile) { PROFILE_SAMPLE(ofdm_mod_start); } + + if (config_ldpc_en) { + + complex float tx_sams[Nsamperframe]; + ofdm_ldpc_interleave_tx(ofdm, &ldpc, tx_sams, tx_bits_char, txt_bits_char); + + for(i=0; i=3) { + fprintf(stderr, "\ntx_bits:\n"); + for (i = 0; i < Nbitsperframe; i++) { + fprintf(stderr, " %3d %8d\n", i, tx_bits[i]); + } + } + + COMP tx_sams[Nsamperframe]; + ofdm_mod(ofdm, tx_sams, tx_bits); + + if (config_verbose >=3) { + fprintf(stderr, "\ntx_sams:\n"); + for (i = 0; i < Nsamperframe; i++) { + fprintf(stderr, " %3d % f\n", i, (double)tx_sams[i].real); + } + } + + for(i=0; i +#include +#include +#include +#include +#include + +#include "semihosting.h" + +#include "stm32f4xx_conf.h" +#include "stm32f4xx.h" +#include "machdep.h" + +#define min(a, b) ((a < b) ? (a) : (b)) + +int main(int argc, char *argv[]) { + + semihosting_init(); + + printf("semihosting test - stdout\n"); + fprintf(stderr, "semihosting test - stderr\n"); + + uint8_t buf[128]; + int count; + int i; + + FILE *fin = fopen("stm_in.raw", "rb"); + if (!fin) { + fprintf(stderr, "Error %d opening fin\n", errno); + } + setbuf(fin, NULL); + + FILE *fout = fopen("stm_out.raw", "wb"); + if (!fout) { + fprintf(stderr, "Error %d opening fout\n", errno); + } + setbuf(fout, NULL); + + // Unrolled while loop for simpler debugging: + // Pass 0: expect 16 bytes 00-0f + printf("Pass 0: feof(fin) = %d\n", feof(fin)); + count = fread(&buf[0], 1, 16, fin); + printf("read %d bytes: ", count); + for (i=0; i
© COPYRIGHT 2011 STMicroelectronics
+ ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "usb_bsp.h" +#include "usbd_conf.h" +#include "stm32f4xx_conf.h" +#include "stm32f4xx_gpio.h" +#include "stm32f4xx_exti.h" +#include "stm32f4xx_rcc.h" +#include "misc.h" + + +void USB_OTG_BSP_ConfigVBUS(USB_OTG_CORE_HANDLE *pdev) { + +} + +void USB_OTG_BSP_DriveVBUS(USB_OTG_CORE_HANDLE *pdev,uint8_t state) { + +} + + +/** +* @brief USB_OTG_BSP_Init +* Initilizes BSP configurations +* @param None +* @retval None +*/ + +void USB_OTG_BSP_Init(USB_OTG_CORE_HANDLE *pdev) +{ + GPIO_InitTypeDef GPIO_InitStructure; + +#ifndef USE_ULPI_PHY +#ifdef USB_OTG_FS_LOW_PWR_MGMT_SUPPORT + EXTI_InitTypeDef EXTI_InitStructure; + NVIC_InitTypeDef NVIC_InitStructure; +#endif +#endif + + + #ifdef USE_USB_OTG_FS + + RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_GPIOA , ENABLE); + + /* Configure SOF VBUS ID DM DP Pins */ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | + GPIO_Pin_9 | + GPIO_Pin_11 | + GPIO_Pin_12; + + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; + GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ; + GPIO_Init(GPIOA, &GPIO_InitStructure); + + GPIO_PinAFConfig(GPIOA,GPIO_PinSource8,GPIO_AF_OTG1_FS) ; + GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_OTG1_FS) ; + GPIO_PinAFConfig(GPIOA,GPIO_PinSource11,GPIO_AF_OTG1_FS) ; + GPIO_PinAFConfig(GPIOA,GPIO_PinSource12,GPIO_AF_OTG1_FS) ; + + /* this for ID line debug */ + + + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; + GPIO_InitStructure.GPIO_OType = GPIO_OType_OD; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP ; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; + GPIO_Init(GPIOA, &GPIO_InitStructure); + GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_OTG1_FS) ; + + RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); + RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_OTG_FS, ENABLE) ; + #else // USE_USB_OTG_HS + + #ifdef USE_ULPI_PHY // ULPI + RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | + RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOH | + RCC_AHB1Periph_GPIOI, ENABLE); + + + GPIO_PinAFConfig(GPIOA,GPIO_PinSource3, GPIO_AF_OTG2_HS) ; // D0 + GPIO_PinAFConfig(GPIOA,GPIO_PinSource5, GPIO_AF_OTG2_HS) ; // CLK + GPIO_PinAFConfig(GPIOB,GPIO_PinSource0, GPIO_AF_OTG2_HS) ; // D1 + GPIO_PinAFConfig(GPIOB,GPIO_PinSource1, GPIO_AF_OTG2_HS) ; // D2 + GPIO_PinAFConfig(GPIOB,GPIO_PinSource5, GPIO_AF_OTG2_HS) ; // D7 + GPIO_PinAFConfig(GPIOB,GPIO_PinSource10,GPIO_AF_OTG2_HS) ; // D3 + GPIO_PinAFConfig(GPIOB,GPIO_PinSource11,GPIO_AF_OTG2_HS) ; // D4 + GPIO_PinAFConfig(GPIOB,GPIO_PinSource12,GPIO_AF_OTG2_HS) ; // D5 + GPIO_PinAFConfig(GPIOB,GPIO_PinSource13,GPIO_AF_OTG2_HS) ; // D6 + GPIO_PinAFConfig(GPIOH,GPIO_PinSource4, GPIO_AF_OTG2_HS) ; // NXT + GPIO_PinAFConfig(GPIOI,GPIO_PinSource11,GPIO_AF_OTG2_HS) ; // DIR + GPIO_PinAFConfig(GPIOC,GPIO_PinSource0, GPIO_AF_OTG2_HS) ; // STP + + // CLK + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 ; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; + GPIO_Init(GPIOA, &GPIO_InitStructure); + + // D0 + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 ; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; + GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ; + GPIO_Init(GPIOA, &GPIO_InitStructure); + + + + // D1 D2 D3 D4 D5 D6 D7 + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | + GPIO_Pin_5 | GPIO_Pin_10 | + GPIO_Pin_11| GPIO_Pin_12 | + GPIO_Pin_13 ; + + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; + GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ; + GPIO_Init(GPIOB, &GPIO_InitStructure); + + + // STP + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 ; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; + GPIO_Init(GPIOC, &GPIO_InitStructure); + + //NXT + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; + GPIO_Init(GPIOH, &GPIO_InitStructure); + + + //DIR + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 ; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; + GPIO_Init(GPIOI, &GPIO_InitStructure); + + + RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_OTG_HS | + RCC_AHB1Periph_OTG_HS_ULPI, ENABLE) ; + + #else + #ifdef USE_I2C_PHY + RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_GPIOB , ENABLE); + /* Configure RESET INTN SCL SDA (Phy/I2C) Pins */ + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | + GPIO_Pin_1 | + GPIO_Pin_10 | + GPIO_Pin_11; + + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; + GPIO_Init(GPIOB, &GPIO_InitStructure); + + GPIO_PinAFConfig(GPIOB,GPIO_PinSource0,GPIO_AF_OTG2_FS) ; + GPIO_PinAFConfig(GPIOB,GPIO_PinSource1,GPIO_AF_OTG2_FS) ; + GPIO_PinAFConfig(GPIOB,GPIO_PinSource10,GPIO_AF_OTG2_FS) ; + GPIO_PinAFConfig(GPIOB,GPIO_PinSource11,GPIO_AF_OTG2_FS); + RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_OTG_HS, ENABLE) ; + + #else + + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB , ENABLE); + + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | + GPIO_Pin_13 | + GPIO_Pin_14 | + GPIO_Pin_15; + + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; + GPIO_Init(GPIOB, &GPIO_InitStructure); + + GPIO_PinAFConfig(GPIOB,GPIO_PinSource12, GPIO_AF_OTG2_FS) ; + GPIO_PinAFConfig(GPIOB,GPIO_PinSource13,GPIO_AF_OTG2_FS) ; + GPIO_PinAFConfig(GPIOB,GPIO_PinSource14,GPIO_AF_OTG2_FS) ; + GPIO_PinAFConfig(GPIOB,GPIO_PinSource15,GPIO_AF_OTG2_FS) ; + RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_OTG_HS, ENABLE) ; + #endif + #endif // USE_ULPI_PHY + + #endif //USB_OTG_HS + + + /* enable the PWR clock */ + RCC_APB1PeriphResetCmd(RCC_APB1Periph_PWR, ENABLE); + + /* Configure the Key button in EXTI mode */ + //STM_EVAL_PBInit(BUTTON_USER, BUTTON_MODE_EXTI); + +#ifdef USB_OTG_FS_LOW_PWR_MGMT_SUPPORT + EXTI_ClearITPendingBit(EXTI_Line18); + + EXTI_InitStructure.EXTI_Line = EXTI_Line18; + EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; + EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; + EXTI_InitStructure.EXTI_LineCmd = ENABLE; + EXTI_Init(&EXTI_InitStructure); + + EXTI_ClearITPendingBit(EXTI_Line18); + + NVIC_InitStructure.NVIC_IRQChannel = OTG_FS_WKUP_IRQn; + NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; + NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; + NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; + NVIC_Init(&NVIC_InitStructure); + + EXTI_ClearITPendingBit(EXTI_Line18); +#endif + +#ifdef USB_OTG_HS_LOW_PWR_MGMT_SUPPORT + EXTI_ClearITPendingBit(EXTI_Line20); + + EXTI_InitStructure.EXTI_Line = EXTI_Line20; + EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; + EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; + EXTI_InitStructure.EXTI_LineCmd = ENABLE; + EXTI_Init(&EXTI_InitStructure); + + EXTI_ClearITPendingBit(EXTI_Line20); + + NVIC_InitStructure.NVIC_IRQChannel = OTG_HS_WKUP_IRQn; + NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; + NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2; + NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; + NVIC_Init(&NVIC_InitStructure); + + EXTI_ClearITPendingBit(EXTI_Line20); +#endif + + EXTI_ClearITPendingBit(EXTI_Line0); +} +/** +* @brief USB_OTG_BSP_EnableInterrupt +* Enabele USB Global interrupt +* @param None +* @retval None +*/ +void USB_OTG_BSP_EnableInterrupt(USB_OTG_CORE_HANDLE *pdev) +{ + NVIC_InitTypeDef NVIC_InitStructure; + + NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); +#ifdef USE_USB_OTG_HS + NVIC_InitStructure.NVIC_IRQChannel = OTG_HS_IRQn; +#else + NVIC_InitStructure.NVIC_IRQChannel = OTG_FS_IRQn; +#endif + NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; + NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; + NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; + NVIC_Init(&NVIC_InitStructure); +#ifdef USB_OTG_HS_DEDICATED_EP1_ENABLED + NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); + NVIC_InitStructure.NVIC_IRQChannel = OTG_HS_EP1_OUT_IRQn; + NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; + NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2; + NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; + NVIC_Init(&NVIC_InitStructure); + + NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); + NVIC_InitStructure.NVIC_IRQChannel = OTG_HS_EP1_IN_IRQn; + NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; + NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; + NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; + NVIC_Init(&NVIC_InitStructure); +#endif +} +/** +* @brief USB_OTG_BSP_uDelay +* This function provides delay time in micro sec +* @param usec : Value of delay required in micro sec +* @retval None +*/ +void USB_OTG_BSP_uDelay (const uint32_t usec) +{ + uint32_t count = 0; + const uint32_t utime = (120 * usec / 7); + do + { + if ( ++count > utime ) + { + return ; + } + } + while (1); +} + + +/** +* @brief USB_OTG_BSP_mDelay +* This function provides delay time in milli sec +* @param msec : Value of delay required in milli sec +* @retval None +*/ +void USB_OTG_BSP_mDelay (const uint32_t msec) +{ + USB_OTG_BSP_uDelay(msec * 1000); +} +/** +* @} +*/ + +/** +* @} +*/ + +/** +* @} +*/ + +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ diff --git a/libcodec2-android/src/codec2/stm32/usb_conf/usb_bsp.h b/libcodec2-android/src/codec2/stm32/usb_conf/usb_bsp.h new file mode 100644 index 0000000..736f3d0 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/usb_conf/usb_bsp.h @@ -0,0 +1,97 @@ +/** + ****************************************************************************** + * @file usb_bsp.h + * @author MCD Application Team + * @version V2.0.0 + * @date 22-July-2011 + * @brief Specific api's relative to the used hardware platform + ****************************************************************************** + * @attention + * + * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS + * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE + * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY + * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING + * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE + * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + *

© COPYRIGHT 2011 STMicroelectronics

+ ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __USB_BSP__H__ +#define __USB_BSP__H__ + +/* Includes ------------------------------------------------------------------*/ +#include "usb_core.h" +#include "stm32f4xx.h" + +/** @addtogroup USB_OTG_DRIVER + * @{ + */ + +/** @defgroup USB_BSP + * @brief This file is the + * @{ + */ + + +/** @defgroup USB_BSP_Exported_Defines + * @{ + */ +/** + * @} + */ + + +/** @defgroup USB_BSP_Exported_Types + * @{ + */ +/** + * @} + */ + + +/** @defgroup USB_BSP_Exported_Macros + * @{ + */ +/** + * @} + */ + +/** @defgroup USB_BSP_Exported_Variables + * @{ + */ +/** + * @} + */ + +/** @defgroup USB_BSP_Exported_FunctionsPrototype + * @{ + */ +void BSP_Init(void); + +void USB_OTG_BSP_Init (USB_OTG_CORE_HANDLE *pdev); +void USB_OTG_BSP_uDelay (const uint32_t usec); +void USB_OTG_BSP_mDelay (const uint32_t msec); +void USB_OTG_BSP_EnableInterrupt (USB_OTG_CORE_HANDLE *pdev); +#ifdef USE_HOST_MODE +void USB_OTG_BSP_ConfigVBUS(USB_OTG_CORE_HANDLE *pdev); +void USB_OTG_BSP_DriveVBUS(USB_OTG_CORE_HANDLE *pdev,uint8_t state); +#endif +/** + * @} + */ + +#endif //__USB_BSP__H__ + +/** + * @} + */ + +/** + * @} + */ +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ + diff --git a/libcodec2-android/src/codec2/stm32/usb_conf/usb_conf.h b/libcodec2-android/src/codec2/stm32/usb_conf/usb_conf.h new file mode 100644 index 0000000..9fa5459 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/usb_conf/usb_conf.h @@ -0,0 +1,287 @@ +/** + ****************************************************************************** + * @file usb_conf.h + * @author MCD Application Team + * @version V2.0.0 + * @date 22-July-2011 + * @brief general low level driver configuration + ****************************************************************************** + * @attention + * + * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS + * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE + * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY + * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING + * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE + * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + *

© COPYRIGHT 2011 STMicroelectronics

+ ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __USB_CONF__H__ +#define __USB_CONF__H__ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx.h" + + +/** @addtogroup USB_OTG_DRIVER + * @{ + */ + +/** @defgroup USB_CONF + * @brief USB low level driver configuration file + * @{ + */ + +/** @defgroup USB_CONF_Exported_Defines + * @{ + */ + +/* USB Core and PHY interface configuration. + Tip: To avoid modifying these defines each time you need to change the USB + configuration, you can declare the needed define in your toolchain + compiler preprocessor. + */ +#ifndef USE_USB_OTG_FS + //#define USE_USB_OTG_FS +#endif /* USE_USB_OTG_FS */ + +#ifndef USE_USB_OTG_HS + //#define USE_USB_OTG_HS +#endif /* USE_USB_OTG_HS */ + +#ifndef USE_ULPI_PHY + //#define USE_ULPI_PHY +#endif /* USE_ULPI_PHY */ + +#ifndef USE_EMBEDDED_PHY + //#define USE_EMBEDDED_PHY +#endif /* USE_EMBEDDED_PHY */ + +#ifndef USE_I2C_PHY + //#define USE_I2C_PHY +#endif /* USE_I2C_PHY */ + + +#ifdef USE_USB_OTG_FS + #define USB_OTG_FS_CORE +#endif + +#ifdef USE_USB_OTG_HS + #define USB_OTG_HS_CORE +#endif + +/******************************************************************************* +* FIFO Size Configuration in Device mode +* +* (i) Receive data FIFO size = RAM for setup packets + +* OUT endpoint control information + +* data OUT packets + miscellaneous +* Space = ONE 32-bits words +* --> RAM for setup packets = 10 spaces +* (n is the nbr of CTRL EPs the device core supports) +* --> OUT EP CTRL info = 1 space +* (one space for status information written to the FIFO along with each +* received packet) +* --> data OUT packets = (Largest Packet Size / 4) + 1 spaces +* (MINIMUM to receive packets) +* --> OR data OUT packets = at least 2*(Largest Packet Size / 4) + 1 spaces +* (if high-bandwidth EP is enabled or multiple isochronous EPs) +* --> miscellaneous = 1 space per OUT EP +* (one space for transfer complete status information also pushed to the +* FIFO with each endpoint's last packet) +* +* (ii)MINIMUM RAM space required for each IN EP Tx FIFO = MAX packet size for +* that particular IN EP. More space allocated in the IN EP Tx FIFO results +* in a better performance on the USB and can hide latencies on the AHB. +* +* (iii) TXn min size = 16 words. (n : Transmit FIFO index) +* (iv) When a TxFIFO is not used, the Configuration should be as follows: +* case 1 : n > m and Txn is not used (n,m : Transmit FIFO indexes) +* --> Txm can use the space allocated for Txn. +* case2 : n < m and Txn is not used (n,m : Transmit FIFO indexes) +* --> Txn should be configured with the minimum space of 16 words +* (v) The FIFO is used optimally when used TxFIFOs are allocated in the top +* of the FIFO.Ex: use EP1 and EP2 as IN instead of EP1 and EP3 as IN ones. +*******************************************************************************/ + +/******************************************************************************* +* FIFO Size Configuration in Host mode +* +* (i) Receive data FIFO size = (Largest Packet Size / 4) + 1 or +* 2x (Largest Packet Size / 4) + 1, If a +* high-bandwidth channel or multiple isochronous +* channels are enabled +* +* (ii) For the host nonperiodic Transmit FIFO is the largest maximum packet size +* for all supported nonperiodic OUT channels. Typically, a space +* corresponding to two Largest Packet Size is recommended. +* +* (iii) The minimum amount of RAM required for Host periodic Transmit FIFO is +* the largest maximum packet size for all supported periodic OUT channels. +* If there is at least one High Bandwidth Isochronous OUT endpoint, +* then the space must be at least two times the maximum packet size for +* that channel. +*******************************************************************************/ + +/****************** USB OTG HS CONFIGURATION **********************************/ +#ifdef USB_OTG_HS_CORE + #define RX_FIFO_HS_SIZE 512 + #define TX0_FIFO_HS_SIZE 512 + #define TX1_FIFO_HS_SIZE 512 + #define TX2_FIFO_HS_SIZE 0 + #define TX3_FIFO_HS_SIZE 0 + #define TX4_FIFO_HS_SIZE 0 + #define TX5_FIFO_HS_SIZE 0 + #define TXH_NP_HS_FIFOSIZ 96 + #define TXH_P_HS_FIFOSIZ 96 + + //#define USB_OTG_HS_LOW_PWR_MGMT_SUPPORT + //#define USB_OTG_HS_SOF_OUTPUT_ENABLED + + //#define USB_OTG_INTERNAL_VBUS_ENABLED + #define USB_OTG_EXTERNAL_VBUS_ENABLED + + #ifdef USE_ULPI_PHY + #define USB_OTG_ULPI_PHY_ENABLED + #endif + #ifdef USE_EMBEDDED_PHY + #define USB_OTG_EMBEDDED_PHY_ENABLED + #endif + #ifdef USE_I2C_PHY + #define USB_OTG_I2C_PHY_ENABLED + #endif +//#define USB_OTG_HS_INTERNAL_DMA_ENABLED + #define USB_OTG_HS_DEDICATED_EP1_ENABLED +#endif + +/****************** USB OTG FS CONFIGURATION **********************************/ +#ifdef USB_OTG_FS_CORE + #define RX_FIFO_FS_SIZE 128 + #define TX0_FIFO_FS_SIZE 64 + #define TX1_FIFO_FS_SIZE 128 + #define TX2_FIFO_FS_SIZE 0 + #define TX3_FIFO_FS_SIZE 0 + #define TXH_NP_FS_FIFOSIZ 96 + #define TXH_P_FS_FIFOSIZ 96 + + //#define USB_OTG_FS_LOW_PWR_MGMT_SUPPORT + //#define USB_OTG_FS_SOF_OUTPUT_ENABLED +#endif + +/****************** USB OTG MODE CONFIGURATION ********************************/ +//#define USE_HOST_MODE +#define USE_DEVICE_MODE +//#define USE_OTG_MODE + + +#ifndef USB_OTG_FS_CORE + #ifndef USB_OTG_HS_CORE + #error "USB_OTG_HS_CORE or USB_OTG_FS_CORE should be defined" + #endif +#endif + + +#ifndef USE_DEVICE_MODE + #ifndef USE_HOST_MODE + #error "USE_DEVICE_MODE or USE_HOST_MODE should be defined" + #endif +#endif + +#ifndef USE_USB_OTG_HS + #ifndef USE_USB_OTG_FS + #error "USE_USB_OTG_HS or USE_USB_OTG_FS should be defined" + #endif +#else //USE_USB_OTG_HS + #ifndef USE_ULPI_PHY + #ifndef USE_EMBEDDED_PHY + #ifndef USE_I2C_PHY + #error "USE_ULPI_PHY or USE_EMBEDDED_PHY or USE_I2C_PHY should be defined" + #endif + #endif + #endif +#endif + +/****************** C Compilers dependant keywords ****************************/ +/* In HS mode and when the DMA is used, all variables and data structures dealing + with the DMA during the transaction process should be 4-bytes aligned */ +#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED + #if defined (__GNUC__) /* GNU Compiler */ + #define __ALIGN_END __attribute__ ((aligned (4))) + #define __ALIGN_BEGIN + #else + #define __ALIGN_END + #if defined (__CC_ARM) /* ARM Compiler */ + #define __ALIGN_BEGIN __align(4) + #elif defined (__ICCARM__) /* IAR Compiler */ + #define __ALIGN_BEGIN + #elif defined (__TASKING__) /* TASKING Compiler */ + #define __ALIGN_BEGIN __align(4) + #endif /* __CC_ARM */ + #endif /* __GNUC__ */ +#else + #define __ALIGN_BEGIN + #define __ALIGN_END +#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */ + +/* __packed keyword used to decrease the data type alignment to 1-byte */ +#if defined (__CC_ARM) /* ARM Compiler */ + #define __packed __packed +#elif defined (__ICCARM__) /* IAR Compiler */ + #define __packed __packed +#elif defined ( __GNUC__ ) /* GNU Compiler */ + #define __packed __attribute__ ((__packed__)) +#elif defined (__TASKING__) /* TASKING Compiler */ + #define __packed __unaligned +#endif /* __CC_ARM */ + +/** + * @} + */ + + +/** @defgroup USB_CONF_Exported_Types + * @{ + */ +/** + * @} + */ + + +/** @defgroup USB_CONF_Exported_Macros + * @{ + */ +/** + * @} + */ + +/** @defgroup USB_CONF_Exported_Variables + * @{ + */ +/** + * @} + */ + +/** @defgroup USB_CONF_Exported_FunctionsPrototype + * @{ + */ +/** + * @} + */ + + +#endif //__USB_CONF__H__ + + +/** + * @} + */ + +/** + * @} + */ +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ + diff --git a/libcodec2-android/src/codec2/stm32/usb_conf/usbd_conf.h b/libcodec2-android/src/codec2/stm32/usb_conf/usbd_conf.h new file mode 100644 index 0000000..9fc6d51 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/usb_conf/usbd_conf.h @@ -0,0 +1,97 @@ +/** + ****************************************************************************** + * @file usbd_conf.h + * @author MCD Application Team + * @version V1.0.0 + * @date 22-July-2011 + * @brief USB Device configuration file + ****************************************************************************** + * @attention + * + * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS + * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE + * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY + * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING + * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE + * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + *

© COPYRIGHT 2011 STMicroelectronics

+ ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __USBD_CONF__H__ +#define __USBD_CONF__H__ + +/** @defgroup USB_CONF_Exported_Defines + * @{ + */ +#define USBD_CFG_MAX_NUM 1 +#define USBD_ITF_MAX_NUM 1 +#define USB_MAX_STR_DESC_SIZ 100 + +/** @defgroup USB_VCP_Class_Layer_Parameter + * @{ + */ +#define CDC_IN_EP 0x81 /* EP1 for data IN */ +#define CDC_OUT_EP 0x01 /* EP1 for data OUT */ +#define CDC_CMD_EP 0x82 /* EP2 for CDC commands */ + +/* CDC Endpoints parameters: you can fine tune these values depending on the needed baudrates and performance. */ +#ifdef USE_USB_OTG_HS + #define CDC_DATA_MAX_PACKET_SIZE 512 /* Endpoint IN & OUT Packet size */ + #define CDC_CMD_PACKET_SZE 8 /* Control Endpoint Packet size */ + + #define CDC_IN_FRAME_INTERVAL 40 /* Number of micro-frames between IN transfers */ + #define APP_RX_DATA_SIZE 2048 /* Total size of IN buffer: + APP_RX_DATA_SIZE*8/MAX_BAUDARATE*1000 should be > CDC_IN_FRAME_INTERVAL*8 */ +#else + #define CDC_DATA_MAX_PACKET_SIZE 64 /* Endpoint IN & OUT Packet size */ + #define CDC_CMD_PACKET_SZE 8 /* Control Endpoint Packet size */ + + #define CDC_IN_FRAME_INTERVAL 5 /* Number of frames between IN transfers */ + + //#define APP_RX_DATA_SIZE 2048 /* Total size of IN buffer: */ + #define APP_RX_DATA_SIZE 10000 + +#endif /* USE_USB_OTG_HS */ + +#define APP_FOPS VCP_fops +/** + * @} + */ + +/** @defgroup USB_CONF_Exported_Types + * @{ + */ +/** + * @} + */ + + +/** @defgroup USB_CONF_Exported_Macros + * @{ + */ +/** + * @} + */ + +/** @defgroup USB_CONF_Exported_Variables + * @{ + */ +/** + * @} + */ + +/** @defgroup USB_CONF_Exported_FunctionsPrototype + * @{ + */ +/** + * @} + */ + + +#endif //__USBD_CONF__H__ + +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ + diff --git a/libcodec2-android/src/codec2/stm32/usb_conf/usbd_desc.c b/libcodec2-android/src/codec2/stm32/usb_conf/usbd_desc.c new file mode 100644 index 0000000..c252633 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/usb_conf/usbd_desc.c @@ -0,0 +1,324 @@ +/** + ****************************************************************************** + * @file usbd_desc.c + * @author MCD Application Team + * @version V1.0.0 + * @date 19-September-2011 + * @brief This file provides the USBD descriptors and string formating method. + ****************************************************************************** + * @attention + * + * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS + * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE + * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY + * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING + * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE + * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + *

© COPYRIGHT 2011 STMicroelectronics

+ ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include +#include "usbd_core.h" +#include "usbd_desc.h" +#include "usbd_req.h" +#include "usbd_conf.h" +#include "usb_regs.h" + +/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY + * @{ + */ + + +/** @defgroup USBD_DESC + * @brief USBD descriptors module + * @{ + */ + +/** @defgroup USBD_DESC_Private_TypesDefinitions + * @{ + */ +/** + * @} + */ + + +/** @defgroup USBD_DESC_Private_Defines + * @{ + */ + +#define USBD_VID 0x0483 + +#define USBD_PID 0x5740 + +/** @defgroup USB_String_Descriptors + * @{ + */ +#define USBD_LANGID_STRING 0x409 +#define USBD_MANUFACTURER_STRING "STMicroelectronics" + +#define USBD_PRODUCT_HS_STRING "STM32 Virtual ComPort in HS mode" +#define USBD_SERIALNUMBER_HS_STRING "00000000050B" + +#define USBD_PRODUCT_FS_STRING "STM32 Virtual ComPort in FS Mode" +#define USBD_SERIALNUMBER_FS_STRING "00000000050C" + +#define USBD_CONFIGURATION_HS_STRING "VCP Config" +#define USBD_INTERFACE_HS_STRING "VCP Interface" + +#define USBD_CONFIGURATION_FS_STRING "VCP Config" +#define USBD_INTERFACE_FS_STRING "VCP Interface" +/** + * @} + */ + + +/** @defgroup USBD_DESC_Private_Macros + * @{ + */ +/** + * @} + */ + + +/** @defgroup USBD_DESC_Private_Variables + * @{ + */ + +USBD_DEVICE USR_desc = +{ + USBD_USR_DeviceDescriptor, + USBD_USR_LangIDStrDescriptor, + USBD_USR_ManufacturerStrDescriptor, + USBD_USR_ProductStrDescriptor, + USBD_USR_SerialStrDescriptor, + USBD_USR_ConfigStrDescriptor, + USBD_USR_InterfaceStrDescriptor, + +}; + +#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED + #if defined ( __ICCARM__ ) /*!< IAR Compiler */ + #pragma data_alignment=4 + #endif +#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */ +/* USB Standard Device Descriptor */ +__ALIGN_BEGIN uint8_t USBD_DeviceDesc[USB_SIZ_DEVICE_DESC] __ALIGN_END = + { + 0x12, /*bLength */ + USB_DEVICE_DESCRIPTOR_TYPE, /*bDescriptorType*/ + 0x00, /*bcdUSB */ + 0x02, + 0x00, /*bDeviceClass*/ + 0x00, /*bDeviceSubClass*/ + 0x00, /*bDeviceProtocol*/ + USB_OTG_MAX_EP0_SIZE, /*bMaxPacketSize*/ + LOBYTE(USBD_VID), /*idVendor*/ + HIBYTE(USBD_VID), /*idVendor*/ + LOBYTE(USBD_PID), /*idVendor*/ + HIBYTE(USBD_PID), /*idVendor*/ + 0x00, /*bcdDevice rel. 2.00*/ + 0x02, + USBD_IDX_MFC_STR, /*Index of manufacturer string*/ + USBD_IDX_PRODUCT_STR, /*Index of product string*/ + USBD_IDX_SERIAL_STR, /*Index of serial number string*/ + USBD_CFG_MAX_NUM /*bNumConfigurations*/ + } ; /* USB_DeviceDescriptor */ + +#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED + #if defined ( __ICCARM__ ) /*!< IAR Compiler */ + #pragma data_alignment=4 + #endif +#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */ +/* USB Standard Device Descriptor */ +__ALIGN_BEGIN uint8_t USBD_DeviceQualifierDesc[USB_LEN_DEV_QUALIFIER_DESC] __ALIGN_END = +{ + USB_LEN_DEV_QUALIFIER_DESC, + USB_DESC_TYPE_DEVICE_QUALIFIER, + 0x00, + 0x02, + 0x00, + 0x00, + 0x00, + 0x40, + 0x01, + 0x00, +}; + +#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED + #if defined ( __ICCARM__ ) /*!< IAR Compiler */ + #pragma data_alignment=4 + #endif +#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */ +/* USB Standard Device Descriptor */ +__ALIGN_BEGIN uint8_t USBD_LangIDDesc[USB_SIZ_STRING_LANGID] __ALIGN_END = +{ + USB_SIZ_STRING_LANGID, + USB_DESC_TYPE_STRING, + LOBYTE(USBD_LANGID_STRING), + HIBYTE(USBD_LANGID_STRING), +}; +/** + * @} + */ + + +/** @defgroup USBD_DESC_Private_FunctionPrototypes + * @{ + */ +/** + * @} + */ + + +/** @defgroup USBD_DESC_Private_Functions + * @{ + */ + +/** +* @brief USBD_USR_DeviceDescriptor +* return the device descriptor +* @param speed : current device speed +* @param length : pointer to data length variable +* @retval pointer to descriptor buffer +*/ +uint8_t * USBD_USR_DeviceDescriptor( uint8_t speed , uint16_t *length) +{ + *length = sizeof(USBD_DeviceDesc); + return USBD_DeviceDesc; +} + +/** +* @brief USBD_USR_LangIDStrDescriptor +* return the LangID string descriptor +* @param speed : current device speed +* @param length : pointer to data length variable +* @retval pointer to descriptor buffer +*/ +uint8_t * USBD_USR_LangIDStrDescriptor( uint8_t speed , uint16_t *length) +{ + *length = sizeof(USBD_LangIDDesc); + return USBD_LangIDDesc; +} + + +/** +* @brief USBD_USR_ProductStrDescriptor +* return the product string descriptor +* @param speed : current device speed +* @param length : pointer to data length variable +* @retval pointer to descriptor buffer +*/ +uint8_t * USBD_USR_ProductStrDescriptor( uint8_t speed , uint16_t *length) +{ + + if(speed == 0) + { + USBD_GetString ((uint8_t*)USBD_PRODUCT_HS_STRING, USBD_StrDesc, length); + } + else + { + USBD_GetString ((uint8_t*)USBD_PRODUCT_FS_STRING, USBD_StrDesc, length); + } + + assert(*length < USB_MAX_STR_DESC_SIZ); + + return USBD_StrDesc; +} + +/** +* @brief USBD_USR_ManufacturerStrDescriptor +* return the manufacturer string descriptor +* @param speed : current device speed +* @param length : pointer to data length variable +* @retval pointer to descriptor buffer +*/ +uint8_t * USBD_USR_ManufacturerStrDescriptor( uint8_t speed , uint16_t *length) +{ + USBD_GetString ((uint8_t*)USBD_MANUFACTURER_STRING, USBD_StrDesc, length); + assert(*length < USB_MAX_STR_DESC_SIZ); + return USBD_StrDesc; +} + +/** +* @brief USBD_USR_SerialStrDescriptor +* return the serial number string descriptor +* @param speed : current device speed +* @param length : pointer to data length variable +* @retval pointer to descriptor buffer +*/ +uint8_t * USBD_USR_SerialStrDescriptor( uint8_t speed , uint16_t *length) +{ + if(speed == USB_OTG_SPEED_HIGH) + { + USBD_GetString ((uint8_t*)USBD_SERIALNUMBER_HS_STRING, USBD_StrDesc, length); + } + else + { + USBD_GetString ((uint8_t*)USBD_SERIALNUMBER_FS_STRING, USBD_StrDesc, length); + } + assert(*length < USB_MAX_STR_DESC_SIZ); + return USBD_StrDesc; +} + +/** +* @brief USBD_USR_ConfigStrDescriptor +* return the configuration string descriptor +* @param speed : current device speed +* @param length : pointer to data length variable +* @retval pointer to descriptor buffer +*/ +uint8_t * USBD_USR_ConfigStrDescriptor( uint8_t speed , uint16_t *length) +{ + if(speed == USB_OTG_SPEED_HIGH) + { + USBD_GetString ((uint8_t*)USBD_CONFIGURATION_HS_STRING, USBD_StrDesc, length); + } + else + { + USBD_GetString ((uint8_t*)USBD_CONFIGURATION_FS_STRING, USBD_StrDesc, length); + } + assert(*length < USB_MAX_STR_DESC_SIZ); + return USBD_StrDesc; +} + + +/** +* @brief USBD_USR_InterfaceStrDescriptor +* return the interface string descriptor +* @param speed : current device speed +* @param length : pointer to data length variable +* @retval pointer to descriptor buffer +*/ +uint8_t * USBD_USR_InterfaceStrDescriptor( uint8_t speed , uint16_t *length) +{ + if(speed == 0) + { + USBD_GetString ((uint8_t*)USBD_INTERFACE_HS_STRING, USBD_StrDesc, length); + } + else + { + USBD_GetString ((uint8_t*)USBD_INTERFACE_FS_STRING, USBD_StrDesc, length); + } + assert(*length < USB_MAX_STR_DESC_SIZ); + return USBD_StrDesc; +} + +/** + * @} + */ + + +/** + * @} + */ + + +/** + * @} + */ + +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ + diff --git a/libcodec2-android/src/codec2/stm32/usb_conf/usbd_desc.h b/libcodec2-android/src/codec2/stm32/usb_conf/usbd_desc.h new file mode 100644 index 0000000..30c6f97 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/usb_conf/usbd_desc.h @@ -0,0 +1,114 @@ +/** + ****************************************************************************** + * @file usbd_desc.h + * @author MCD Application Team + * @version V1.0.0 + * @date 19-September-2011 + * @brief header file for the usbd_desc.c file + ****************************************************************************** + * @attention + * + * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS + * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE + * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY + * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING + * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE + * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + *

© COPYRIGHT 2011 STMicroelectronics

+ ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ + +#ifndef __USB_DESC_H +#define __USB_DESC_H + +/* Includes ------------------------------------------------------------------*/ +#include "usbd_def.h" + +/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY + * @{ + */ + +/** @defgroup USB_DESC + * @brief general defines for the usb device library file + * @{ + */ + +/** @defgroup USB_DESC_Exported_Defines + * @{ + */ +#define USB_DEVICE_DESCRIPTOR_TYPE 0x01 +#define USB_CONFIGURATION_DESCRIPTOR_TYPE 0x02 +#define USB_STRING_DESCRIPTOR_TYPE 0x03 +#define USB_INTERFACE_DESCRIPTOR_TYPE 0x04 +#define USB_ENDPOINT_DESCRIPTOR_TYPE 0x05 +#define USB_SIZ_DEVICE_DESC 18 +#define USB_SIZ_STRING_LANGID 4 + +/** + * @} + */ + + +/** @defgroup USBD_DESC_Exported_TypesDefinitions + * @{ + */ +/** + * @} + */ + + + +/** @defgroup USBD_DESC_Exported_Macros + * @{ + */ +/** + * @} + */ + +/** @defgroup USBD_DESC_Exported_Variables + * @{ + */ +extern uint8_t USBD_DeviceDesc [USB_SIZ_DEVICE_DESC]; +extern uint8_t USBD_StrDesc[USB_MAX_STR_DESC_SIZ]; +extern uint8_t USBD_OtherSpeedCfgDesc[USB_LEN_CFG_DESC]; +extern uint8_t USBD_DeviceQualifierDesc[USB_LEN_DEV_QUALIFIER_DESC]; +extern uint8_t USBD_LangIDDesc[USB_SIZ_STRING_LANGID]; +extern USBD_DEVICE USR_desc; +/** + * @} + */ + +/** @defgroup USBD_DESC_Exported_FunctionsPrototype + * @{ + */ + + +uint8_t * USBD_USR_DeviceDescriptor( uint8_t speed , uint16_t *length); +uint8_t * USBD_USR_LangIDStrDescriptor( uint8_t speed , uint16_t *length); +uint8_t * USBD_USR_ManufacturerStrDescriptor ( uint8_t speed , uint16_t *length); +uint8_t * USBD_USR_ProductStrDescriptor ( uint8_t speed , uint16_t *length); +uint8_t * USBD_USR_SerialStrDescriptor( uint8_t speed , uint16_t *length); +uint8_t * USBD_USR_ConfigStrDescriptor( uint8_t speed , uint16_t *length); +uint8_t * USBD_USR_InterfaceStrDescriptor( uint8_t speed , uint16_t *length); + +#ifdef USB_SUPPORT_USER_STRING_DESC +uint8_t * USBD_USR_USRStringDesc (uint8_t speed, uint8_t idx , uint16_t *length); +#endif /* USB_SUPPORT_USER_STRING_DESC */ + +/** + * @} + */ + +#endif /* __USBD_DESC_H */ + +/** + * @} + */ + +/** +* @} +*/ +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ diff --git a/libcodec2-android/src/codec2/stm32/usb_conf/usbd_usr.c b/libcodec2-android/src/codec2/stm32/usb_conf/usbd_usr.c new file mode 100644 index 0000000..24c5f17 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/usb_conf/usbd_usr.c @@ -0,0 +1,126 @@ +/** + ****************************************************************************** + * @file usbd_usr.c + * @author MCD Application Team + * @version V1.0.0 + * @date 19-September-2011 + * @brief This file includes the user application layer + ****************************************************************************** + * @attention + * + * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS + * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE + * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY + * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING + * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE + * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + *

© COPYRIGHT 2011 STMicroelectronics

+ ****************************************************************************** + */ + +#include "usbd_usr.h" +#include "usbd_ioreq.h" + +USBD_Usr_cb_TypeDef USR_cb = +{ + USBD_USR_Init, + USBD_USR_DeviceReset, + USBD_USR_DeviceConfigured, + USBD_USR_DeviceSuspended, + USBD_USR_DeviceResumed, + + USBD_USR_DeviceConnected, + USBD_USR_DeviceDisconnected, +}; + + +/** +* @brief USBD_USR_Init +* Displays the message on LCD for host lib initialization +* @param None +* @retval None +*/ +void USBD_USR_Init(void) +{ + +} + +/** +* @brief USBD_USR_DeviceReset +* Displays the message on LCD on device Reset Event +* @param speed : device speed +* @retval None +*/ +void USBD_USR_DeviceReset(uint8_t speed ) +{ + switch (speed) + { + case USB_OTG_SPEED_HIGH: + break; + + case USB_OTG_SPEED_FULL: + break; + default: + break; + + } +} + + +/** +* @brief USBD_USR_DeviceConfigured +* Displays the message on LCD on device configuration Event +* @param None +* @retval Staus +*/ +void USBD_USR_DeviceConfigured (void) +{ +} + + +/** +* @brief USBD_USR_DeviceConnected +* Displays the message on LCD on device connection Event +* @param None +* @retval Staus +*/ +void USBD_USR_DeviceConnected (void) +{ +} + + +/** +* @brief USBD_USR_DeviceDisonnected +* Displays the message on LCD on device disconnection Event +* @param None +* @retval Staus +*/ +void USBD_USR_DeviceDisconnected (void) +{ +} + +/** +* @brief USBD_USR_DeviceSuspended +* Displays the message on LCD on device suspend Event +* @param None +* @retval None +*/ +void USBD_USR_DeviceSuspended(void) +{ + /* Users can do their application actions here for the USB-Reset */ +} + + +/** +* @brief USBD_USR_DeviceResumed +* Displays the message on LCD on device resume Event +* @param None +* @retval None +*/ +void USBD_USR_DeviceResumed(void) +{ + /* Users can do their application actions here for the USB-Reset */ +} + + diff --git a/libcodec2-android/src/codec2/stm32/usb_lib/cdc/usbd_cdc_core.c b/libcodec2-android/src/codec2/stm32/usb_lib/cdc/usbd_cdc_core.c new file mode 100644 index 0000000..d587d86 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/usb_lib/cdc/usbd_cdc_core.c @@ -0,0 +1,811 @@ +/** + ****************************************************************************** + * @file usbd_cdc_core.c + * @author MCD Application Team + * @version V1.0.0 + * @date 22-July-2011 + * @brief This file provides the high layer firmware functions to manage the + * following functionalities of the USB CDC Class: + * - Initialization and Configuration of high and low layer + * - Enumeration as CDC Device (and enumeration for each implemented memory interface) + * - OUT/IN data transfer + * - Command IN transfer (class requests management) + * - Error management + * + * @verbatim + * + * =================================================================== + * CDC Class Driver Description + * =================================================================== + * This driver manages the "Universal Serial Bus Class Definitions for Communications Devices + * Revision 1.2 November 16, 2007" and the sub-protocol specification of "Universal Serial Bus + * Communications Class Subclass Specification for PSTN Devices Revision 1.2 February 9, 2007" + * This driver implements the following aspects of the specification: + * - Device descriptor management + * - Configuration descriptor management + * - Enumeration as CDC device with 2 data endpoints (IN and OUT) and 1 command endpoint (IN) + * - Requests management (as described in section 6.2 in specification) + * - Abstract Control Model compliant + * - Union Functional collection (using 1 IN endpoint for control) + * - Data interface class + + * @note + * For the Abstract Control Model, this core allows only transmitting the requests to + * lower layer dispatcher (ie. usbd_cdc_vcp.c/.h) which should manage each request and + * perform relative actions. + * + * These aspects may be enriched or modified for a specific user application. + * + * This driver doesn't implement the following aspects of the specification + * (but it is possible to manage these features with some modifications on this driver): + * - Any class-specific aspect relative to communication classes should be managed by user application. + * - All communication classes other than PSTN are not managed + * + * @endverbatim + * + ****************************************************************************** + * @attention + * + * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS + * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE + * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY + * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING + * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE + * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + *

© COPYRIGHT 2011 STMicroelectronics

+ ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "usbd_cdc_core.h" +#include "usbd_desc.h" +#include "usbd_req.h" + + +/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY + * @{ + */ + + +/** @defgroup usbd_cdc + * @brief usbd core module + * @{ + */ + +/** @defgroup usbd_cdc_Private_TypesDefinitions + * @{ + */ +/** + * @} + */ + + +/** @defgroup usbd_cdc_Private_Defines + * @{ + */ +/** + * @} + */ + + +/** @defgroup usbd_cdc_Private_Macros + * @{ + */ +/** + * @} + */ + + +/** @defgroup usbd_cdc_Private_FunctionPrototypes + * @{ + */ + +/********************************************* + CDC Device library callbacks + *********************************************/ +static uint8_t usbd_cdc_Init (void *pdev, uint8_t cfgidx); +static uint8_t usbd_cdc_DeInit (void *pdev, uint8_t cfgidx); +static uint8_t usbd_cdc_Setup (void *pdev, USB_SETUP_REQ *req); +static uint8_t usbd_cdc_EP0_RxReady (void *pdev); +static uint8_t usbd_cdc_DataIn (void *pdev, uint8_t epnum); +static uint8_t usbd_cdc_DataOut (void *pdev, uint8_t epnum); +static uint8_t usbd_cdc_SOF (void *pdev); + +/********************************************* + CDC specific management functions + *********************************************/ +static void Handle_USBAsynchXfer (void *pdev); +static uint8_t *USBD_cdc_GetCfgDesc (uint8_t speed, uint16_t *length); +#ifdef USE_USB_OTG_HS +static uint8_t *USBD_cdc_GetOtherCfgDesc (uint8_t speed, uint16_t *length); +#endif +/** + * @} + */ + +/** @defgroup usbd_cdc_Private_Variables + * @{ + */ +extern CDC_IF_Prop_TypeDef APP_FOPS; +extern uint8_t USBD_DeviceDesc [USB_SIZ_DEVICE_DESC]; + +#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED + #if defined ( __ICCARM__ ) /*!< IAR Compiler */ + #pragma data_alignment=4 + #endif +#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */ +__ALIGN_BEGIN uint8_t usbd_cdc_CfgDesc [USB_CDC_CONFIG_DESC_SIZ] __ALIGN_END ; + +#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED + #if defined ( __ICCARM__ ) /*!< IAR Compiler */ + #pragma data_alignment=4 + #endif +#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */ +__ALIGN_BEGIN uint8_t usbd_cdc_OtherCfgDesc [USB_CDC_CONFIG_DESC_SIZ] __ALIGN_END ; + +#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED + #if defined ( __ICCARM__ ) /*!< IAR Compiler */ + #pragma data_alignment=4 + #endif +#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */ +__ALIGN_BEGIN static __IO uint32_t usbd_cdc_AltSet __ALIGN_END = 0; + +#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED + #if defined ( __ICCARM__ ) /*!< IAR Compiler */ + #pragma data_alignment=4 + #endif +#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */ +__ALIGN_BEGIN uint8_t USB_Rx_Buffer [CDC_DATA_MAX_PACKET_SIZE] __ALIGN_END ; + +#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED + #if defined ( __ICCARM__ ) /*!< IAR Compiler */ + #pragma data_alignment=4 + #endif +#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */ +__ALIGN_BEGIN uint8_t APP_Rx_Buffer [APP_RX_DATA_SIZE] __ALIGN_END ; + + +#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED + #if defined ( __ICCARM__ ) /*!< IAR Compiler */ + #pragma data_alignment=4 + #endif +#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */ +__ALIGN_BEGIN uint8_t CmdBuff[CDC_CMD_PACKET_SZE] __ALIGN_END ; + +uint32_t APP_Rx_ptr_in = 0; +uint32_t APP_Rx_ptr_out = 0; +uint32_t APP_Rx_length = 0; + +uint8_t USB_Tx_State = 0; + +static uint32_t cdcCmd = 0xFF; +static uint32_t cdcLen = 0; + +/* CDC interface class callbacks structure */ +USBD_Class_cb_TypeDef USBD_CDC_cb = +{ + usbd_cdc_Init, + usbd_cdc_DeInit, + usbd_cdc_Setup, + NULL, /* EP0_TxSent, */ + usbd_cdc_EP0_RxReady, + usbd_cdc_DataIn, + usbd_cdc_DataOut, + usbd_cdc_SOF, + NULL, + NULL, + USBD_cdc_GetCfgDesc, +#ifdef USE_USB_OTG_HS + USBD_cdc_GetOtherCfgDesc, /* use same cobfig as per FS */ +#endif /* USE_USB_OTG_HS */ +}; + +#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED + #if defined ( __ICCARM__ ) /*!< IAR Compiler */ + #pragma data_alignment=4 + #endif +#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */ +/* USB CDC device Configuration Descriptor */ +__ALIGN_BEGIN uint8_t usbd_cdc_CfgDesc[USB_CDC_CONFIG_DESC_SIZ] __ALIGN_END = +{ + /*Configuration Descriptor*/ + 0x09, /* bLength: Configuration Descriptor size */ + USB_CONFIGURATION_DESCRIPTOR_TYPE, /* bDescriptorType: Configuration */ + USB_CDC_CONFIG_DESC_SIZ, /* wTotalLength:no of returned bytes */ + 0x00, + 0x02, /* bNumInterfaces: 2 interface */ + 0x01, /* bConfigurationValue: Configuration value */ + 0x00, /* iConfiguration: Index of string descriptor describing the configuration */ + 0xC0, /* bmAttributes: self powered */ + 0x32, /* MaxPower 0 mA */ + + /*---------------------------------------------------------------------------*/ + + /*Interface Descriptor */ + 0x09, /* bLength: Interface Descriptor size */ + USB_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType: Interface */ + /* Interface descriptor type */ + 0x00, /* bInterfaceNumber: Number of Interface */ + 0x00, /* bAlternateSetting: Alternate setting */ + 0x01, /* bNumEndpoints: One endpoints used */ + 0x02, /* bInterfaceClass: Communication Interface Class */ + 0x02, /* bInterfaceSubClass: Abstract Control Model */ + 0x01, /* bInterfaceProtocol: Common AT commands */ + 0x00, /* iInterface: */ + + /*Header Functional Descriptor*/ + 0x05, /* bLength: Endpoint Descriptor size */ + 0x24, /* bDescriptorType: CS_INTERFACE */ + 0x00, /* bDescriptorSubtype: Header Func Desc */ + 0x10, /* bcdCDC: spec release number */ + 0x01, + + /*Call Management Functional Descriptor*/ + 0x05, /* bFunctionLength */ + 0x24, /* bDescriptorType: CS_INTERFACE */ + 0x01, /* bDescriptorSubtype: Call Management Func Desc */ + 0x00, /* bmCapabilities: D0+D1 */ + 0x01, /* bDataInterface: 1 */ + + /*ACM Functional Descriptor*/ + 0x04, /* bFunctionLength */ + 0x24, /* bDescriptorType: CS_INTERFACE */ + 0x02, /* bDescriptorSubtype: Abstract Control Management desc */ + 0x02, /* bmCapabilities */ + + /*Union Functional Descriptor*/ + 0x05, /* bFunctionLength */ + 0x24, /* bDescriptorType: CS_INTERFACE */ + 0x06, /* bDescriptorSubtype: Union func desc */ + 0x00, /* bMasterInterface: Communication class interface */ + 0x01, /* bSlaveInterface0: Data Class Interface */ + + /*Endpoint 2 Descriptor*/ + 0x07, /* bLength: Endpoint Descriptor size */ + USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType: Endpoint */ + CDC_CMD_EP, /* bEndpointAddress */ + 0x03, /* bmAttributes: Interrupt */ + LOBYTE(CDC_CMD_PACKET_SZE), /* wMaxPacketSize: */ + HIBYTE(CDC_CMD_PACKET_SZE), +#ifdef USE_USB_OTG_HS + 0x10, /* bInterval: */ +#else + 0xFF, /* bInterval: */ +#endif /* USE_USB_OTG_HS */ + + /*---------------------------------------------------------------------------*/ + + /*Data class interface descriptor*/ + 0x09, /* bLength: Endpoint Descriptor size */ + USB_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType: */ + 0x01, /* bInterfaceNumber: Number of Interface */ + 0x00, /* bAlternateSetting: Alternate setting */ + 0x02, /* bNumEndpoints: Two endpoints used */ + 0x0A, /* bInterfaceClass: CDC */ + 0x00, /* bInterfaceSubClass: */ + 0x00, /* bInterfaceProtocol: */ + 0x00, /* iInterface: */ + + /*Endpoint OUT Descriptor*/ + 0x07, /* bLength: Endpoint Descriptor size */ + USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType: Endpoint */ + CDC_OUT_EP, /* bEndpointAddress */ + 0x02, /* bmAttributes: Bulk */ + LOBYTE(CDC_DATA_MAX_PACKET_SIZE), /* wMaxPacketSize: */ + HIBYTE(CDC_DATA_MAX_PACKET_SIZE), + 0x00, /* bInterval: ignore for Bulk transfer */ + + /*Endpoint IN Descriptor*/ + 0x07, /* bLength: Endpoint Descriptor size */ + USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType: Endpoint */ + CDC_IN_EP, /* bEndpointAddress */ + 0x02, /* bmAttributes: Bulk */ + LOBYTE(CDC_DATA_MAX_PACKET_SIZE), /* wMaxPacketSize: */ + HIBYTE(CDC_DATA_MAX_PACKET_SIZE), + 0x00 /* bInterval: ignore for Bulk transfer */ +} ; + +#ifdef USE_USB_OTG_HS +#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED + #if defined ( __ICCARM__ ) /*!< IAR Compiler */ + #pragma data_alignment=4 + #endif +#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */ +__ALIGN_BEGIN uint8_t usbd_cdc_OtherCfgDesc[USB_CDC_CONFIG_DESC_SIZ] __ALIGN_END = +{ + 0x09, /* bLength: Configuation Descriptor size */ + USB_DESC_TYPE_OTHER_SPEED_CONFIGURATION, + USB_CDC_CONFIG_DESC_SIZ, + 0x00, + 0x02, /* bNumInterfaces: 2 interfaces */ + 0x01, /* bConfigurationValue: */ + 0x04, /* iConfiguration: */ + 0xC0, /* bmAttributes: */ + 0x32, /* MaxPower 100 mA */ + + /*Interface Descriptor */ + 0x09, /* bLength: Interface Descriptor size */ + USB_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType: Interface */ + /* Interface descriptor type */ + 0x00, /* bInterfaceNumber: Number of Interface */ + 0x00, /* bAlternateSetting: Alternate setting */ + 0x01, /* bNumEndpoints: One endpoints used */ + 0x02, /* bInterfaceClass: Communication Interface Class */ + 0x02, /* bInterfaceSubClass: Abstract Control Model */ + 0x01, /* bInterfaceProtocol: Common AT commands */ + 0x00, /* iInterface: */ + + /*Header Functional Descriptor*/ + 0x05, /* bLength: Endpoint Descriptor size */ + 0x24, /* bDescriptorType: CS_INTERFACE */ + 0x00, /* bDescriptorSubtype: Header Func Desc */ + 0x10, /* bcdCDC: spec release number */ + 0x01, + + /*Call Management Functional Descriptor*/ + 0x05, /* bFunctionLength */ + 0x24, /* bDescriptorType: CS_INTERFACE */ + 0x01, /* bDescriptorSubtype: Call Management Func Desc */ + 0x00, /* bmCapabilities: D0+D1 */ + 0x01, /* bDataInterface: 1 */ + + /*ACM Functional Descriptor*/ + 0x04, /* bFunctionLength */ + 0x24, /* bDescriptorType: CS_INTERFACE */ + 0x02, /* bDescriptorSubtype: Abstract Control Management desc */ + 0x02, /* bmCapabilities */ + + /*Union Functional Descriptor*/ + 0x05, /* bFunctionLength */ + 0x24, /* bDescriptorType: CS_INTERFACE */ + 0x06, /* bDescriptorSubtype: Union func desc */ + 0x00, /* bMasterInterface: Communication class interface */ + 0x01, /* bSlaveInterface0: Data Class Interface */ + + /*Endpoint 2 Descriptor*/ + 0x07, /* bLength: Endpoint Descriptor size */ + USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType: Endpoint */ + CDC_CMD_EP, /* bEndpointAddress */ + 0x03, /* bmAttributes: Interrupt */ + LOBYTE(CDC_CMD_PACKET_SZE), /* wMaxPacketSize: */ + HIBYTE(CDC_CMD_PACKET_SZE), + 0xFF, /* bInterval: */ + + /*---------------------------------------------------------------------------*/ + + /*Data class interface descriptor*/ + 0x09, /* bLength: Endpoint Descriptor size */ + USB_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType: */ + 0x01, /* bInterfaceNumber: Number of Interface */ + 0x00, /* bAlternateSetting: Alternate setting */ + 0x02, /* bNumEndpoints: Two endpoints used */ + 0x0A, /* bInterfaceClass: CDC */ + 0x00, /* bInterfaceSubClass: */ + 0x00, /* bInterfaceProtocol: */ + 0x00, /* iInterface: */ + + /*Endpoint OUT Descriptor*/ + 0x07, /* bLength: Endpoint Descriptor size */ + USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType: Endpoint */ + CDC_OUT_EP, /* bEndpointAddress */ + 0x02, /* bmAttributes: Bulk */ + 0x40, /* wMaxPacketSize: */ + 0x00, + 0x00, /* bInterval: ignore for Bulk transfer */ + + /*Endpoint IN Descriptor*/ + 0x07, /* bLength: Endpoint Descriptor size */ + USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType: Endpoint */ + CDC_IN_EP, /* bEndpointAddress */ + 0x02, /* bmAttributes: Bulk */ + 0x40, /* wMaxPacketSize: */ + 0x00, + 0x00 /* bInterval */ +}; +#endif /* USE_USB_OTG_HS */ + +/** + * @} + */ + +/** @defgroup usbd_cdc_Private_Functions + * @{ + */ + +/** + * @brief usbd_cdc_Init + * Initilaize the CDC interface + * @param pdev: device instance + * @param cfgidx: Configuration index + * @retval status + */ +static uint8_t usbd_cdc_Init (void *pdev, + uint8_t cfgidx) +{ + uint8_t *pbuf; + + /* Open EP IN */ + DCD_EP_Open(pdev, + CDC_IN_EP, + CDC_DATA_IN_PACKET_SIZE, + USB_OTG_EP_BULK); + + /* Open EP OUT */ + DCD_EP_Open(pdev, + CDC_OUT_EP, + CDC_DATA_OUT_PACKET_SIZE, + USB_OTG_EP_BULK); + + /* Open Command IN EP */ + DCD_EP_Open(pdev, + CDC_CMD_EP, + CDC_CMD_PACKET_SZE, + USB_OTG_EP_INT); + + pbuf = (uint8_t *)USBD_DeviceDesc; + pbuf[4] = DEVICE_CLASS_CDC; + pbuf[5] = DEVICE_SUBCLASS_CDC; + + /* Initialize the Interface physical components */ + APP_FOPS.pIf_Init(); + + /* Prepare Out endpoint to receive next packet */ + DCD_EP_PrepareRx(pdev, + CDC_OUT_EP, + (uint8_t*)(USB_Rx_Buffer), + CDC_DATA_OUT_PACKET_SIZE); + + return USBD_OK; +} + +/** + * @brief usbd_cdc_Init + * DeInitialize the CDC layer + * @param pdev: device instance + * @param cfgidx: Configuration index + * @retval status + */ +static uint8_t usbd_cdc_DeInit (void *pdev, + uint8_t cfgidx) +{ + /* Open EP IN */ + DCD_EP_Close(pdev, + CDC_IN_EP); + + /* Open EP OUT */ + DCD_EP_Close(pdev, + CDC_OUT_EP); + + /* Open Command IN EP */ + DCD_EP_Close(pdev, + CDC_CMD_EP); + + /* Restore default state of the Interface physical components */ + APP_FOPS.pIf_DeInit(); + + return USBD_OK; +} + +/** + * @brief usbd_cdc_Setup + * Handle the CDC specific requests + * @param pdev: instance + * @param req: usb requests + * @retval status + */ +static uint8_t usbd_cdc_Setup (void *pdev, + USB_SETUP_REQ *req) +{ + uint16_t len = 0; + uint8_t *pbuf; + + switch (req->bmRequest & USB_REQ_TYPE_MASK) + { + /* CDC Class Requests -------------------------------*/ + case USB_REQ_TYPE_CLASS : + /* Check if the request is a data setup packet */ + if (req->wLength) + { + /* Check if the request is Device-to-Host */ + if (req->bmRequest & 0x80) + { + /* Get the data to be sent to Host from interface layer */ + APP_FOPS.pIf_Ctrl(req->bRequest, CmdBuff, req->wLength); + + /* Send the data to the host */ + USBD_CtlSendData (pdev, + CmdBuff, + req->wLength); + } + else /* Host-to-Device requeset */ + { + /* Set the value of the current command to be processed */ + cdcCmd = req->bRequest; + cdcLen = req->wLength; + + /* Prepare the reception of the buffer over EP0 + Next step: the received data will be managed in usbd_cdc_EP0_TxSent() + function. */ + USBD_CtlPrepareRx (pdev, + CmdBuff, + req->wLength); + } + } + else /* No Data request */ + { + /* Transfer the command to the interface layer */ + APP_FOPS.pIf_Ctrl(req->bRequest, NULL, 0); + } + + return USBD_OK; + + default: + USBD_CtlError (pdev, req); + return USBD_FAIL; + + + + /* Standard Requests -------------------------------*/ + case USB_REQ_TYPE_STANDARD: + switch (req->bRequest) + { + case USB_REQ_GET_DESCRIPTOR: + if( (req->wValue >> 8) == CDC_DESCRIPTOR_TYPE) + { +#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED + pbuf = usbd_cdc_Desc; +#else + pbuf = usbd_cdc_CfgDesc + 9 + (9 * USBD_ITF_MAX_NUM); +#endif + len = MIN(USB_CDC_DESC_SIZ , req->wLength); + } + + USBD_CtlSendData (pdev, + pbuf, + len); + break; + + case USB_REQ_GET_INTERFACE : + USBD_CtlSendData (pdev, + (uint8_t *)&usbd_cdc_AltSet, + 1); + break; + + case USB_REQ_SET_INTERFACE : + if ((uint8_t)(req->wValue) < USBD_ITF_MAX_NUM) + { + usbd_cdc_AltSet = (uint8_t)(req->wValue); + } + else + { + /* Call the error management function (command will be nacked */ + USBD_CtlError (pdev, req); + } + break; + } + } + return USBD_OK; +} + +/** + * @brief usbd_cdc_EP0_RxReady + * Data received on control endpoint + * @param pdev: device device instance + * @retval status + */ +static uint8_t usbd_cdc_EP0_RxReady (void *pdev) +{ + if (cdcCmd != NO_CMD) + { + /* Process the data */ + APP_FOPS.pIf_Ctrl(cdcCmd, CmdBuff, cdcLen); + + /* Reset the command variable to default value */ + cdcCmd = NO_CMD; + } + + return USBD_OK; +} + +/** + * @brief usbd_audio_DataIn + * Data sent on non-control IN endpoint + * @param pdev: device instance + * @param epnum: endpoint number + * @retval status + */ +static uint8_t usbd_cdc_DataIn (void *pdev, uint8_t epnum) +{ + uint16_t USB_Tx_ptr; + uint16_t USB_Tx_length; + + if (USB_Tx_State == 1) + { + if (APP_Rx_length == 0) + { + USB_Tx_State = 0; + } + else + { + if (APP_Rx_length > CDC_DATA_IN_PACKET_SIZE){ + USB_Tx_ptr = APP_Rx_ptr_out; + USB_Tx_length = CDC_DATA_IN_PACKET_SIZE; + + APP_Rx_ptr_out += CDC_DATA_IN_PACKET_SIZE; + APP_Rx_length -= CDC_DATA_IN_PACKET_SIZE; + } + else + { + USB_Tx_ptr = APP_Rx_ptr_out; + USB_Tx_length = APP_Rx_length; + + APP_Rx_ptr_out += APP_Rx_length; + APP_Rx_length = 0; + } + + /* Prepare the available data buffer to be sent on IN endpoint */ + DCD_EP_Tx (pdev, + CDC_IN_EP, + (uint8_t*)&APP_Rx_Buffer[USB_Tx_ptr], + USB_Tx_length); + } + } + + return USBD_OK; +} + +/** + * @brief usbd_audio_DataOut + * Data received on non-control Out endpoint + * @param pdev: device instance + * @param epnum: endpoint number + * @retval status + */ +static uint8_t usbd_cdc_DataOut (void *pdev, uint8_t epnum) +{ + uint16_t USB_Rx_Cnt; + + /* Get the received data buffer and update the counter */ + USB_Rx_Cnt = ((USB_OTG_CORE_HANDLE*)pdev)->dev.out_ep[epnum].xfer_count; + + /* USB data will be immediately processed, this allow next USB traffic being + NAKed till the end of the application Xfer */ + APP_FOPS.pIf_DataRx(USB_Rx_Buffer, USB_Rx_Cnt); + + /* Prepare Out endpoint to receive next packet */ + DCD_EP_PrepareRx(pdev, + CDC_OUT_EP, + (uint8_t*)(USB_Rx_Buffer), + CDC_DATA_OUT_PACKET_SIZE); + + return USBD_OK; +} + +/** + * @brief usbd_audio_SOF + * Start Of Frame event management + * @param pdev: instance + * @param epnum: endpoint number + * @retval status + */ +static uint8_t usbd_cdc_SOF (void *pdev) +{ + static uint32_t FrameCount = 0; + + if (FrameCount++ == CDC_IN_FRAME_INTERVAL) + { + /* Reset the frame counter */ + FrameCount = 0; + + /* Check the data to be sent through IN pipe */ + Handle_USBAsynchXfer(pdev); + } + + return USBD_OK; +} + +/** + * @brief Handle_USBAsynchXfer + * Send data to USB + * @param pdev: instance + * @retval None + */ +static void Handle_USBAsynchXfer (void *pdev) +{ + uint16_t USB_Tx_ptr; + uint16_t USB_Tx_length; + + if(USB_Tx_State != 1) + { + if (APP_Rx_ptr_out == APP_RX_DATA_SIZE) + { + APP_Rx_ptr_out = 0; + } + + if(APP_Rx_ptr_out == APP_Rx_ptr_in) + { + USB_Tx_State = 0; + return; + } + + if(APP_Rx_ptr_out > APP_Rx_ptr_in) /* rollback */ + { + APP_Rx_length = APP_RX_DATA_SIZE - APP_Rx_ptr_out; + + } + else + { + APP_Rx_length = APP_Rx_ptr_in - APP_Rx_ptr_out; + + } +#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED + APP_Rx_length &= ~0x03; +#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */ + + if (APP_Rx_length > CDC_DATA_IN_PACKET_SIZE) + { + USB_Tx_ptr = APP_Rx_ptr_out; + USB_Tx_length = CDC_DATA_IN_PACKET_SIZE; + + APP_Rx_ptr_out += CDC_DATA_IN_PACKET_SIZE; + APP_Rx_length -= CDC_DATA_IN_PACKET_SIZE; + } + else + { + USB_Tx_ptr = APP_Rx_ptr_out; + USB_Tx_length = APP_Rx_length; + + APP_Rx_ptr_out += APP_Rx_length; + APP_Rx_length = 0; + } + USB_Tx_State = 1; + + DCD_EP_Tx (pdev, + CDC_IN_EP, + (uint8_t*)&APP_Rx_Buffer[USB_Tx_ptr], + USB_Tx_length); + } + +} + +/** + * @brief USBD_cdc_GetCfgDesc + * Return configuration descriptor + * @param speed : current device speed + * @param length : pointer data length + * @retval pointer to descriptor buffer + */ +static uint8_t *USBD_cdc_GetCfgDesc (uint8_t speed, uint16_t *length) +{ + *length = sizeof (usbd_cdc_CfgDesc); + return usbd_cdc_CfgDesc; +} + +/** + * @brief USBD_cdc_GetCfgDesc + * Return configuration descriptor + * @param speed : current device speed + * @param length : pointer data length + * @retval pointer to descriptor buffer + */ +#ifdef USE_USB_OTG_HS +static uint8_t *USBD_cdc_GetOtherCfgDesc (uint8_t speed, uint16_t *length) +{ + *length = sizeof (usbd_cdc_OtherCfgDesc); + return usbd_cdc_OtherCfgDesc; +} +#endif +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ diff --git a/libcodec2-android/src/codec2/stm32/usb_lib/cdc/usbd_cdc_core.h b/libcodec2-android/src/codec2/stm32/usb_lib/cdc/usbd_cdc_core.h new file mode 100644 index 0000000..43af268 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/usb_lib/cdc/usbd_cdc_core.h @@ -0,0 +1,137 @@ +/** + ****************************************************************************** + * @file usbd_cdc_core.h + * @author MCD Application Team + * @version V1.0.0 + * @date 22-July-2011 + * @brief header file for the usbd_cdc_core.c file. + ****************************************************************************** + * @attention + * + * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS + * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE + * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY + * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING + * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE + * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + *

© COPYRIGHT 2011 STMicroelectronics

+ ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ + +#ifndef __USB_CDC_CORE_H_ +#define __USB_CDC_CORE_H_ + +#include "usbd_ioreq.h" + +/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY + * @{ + */ + +/** @defgroup usbd_cdc + * @brief This file is the Header file for USBD_cdc.c + * @{ + */ + + +/** @defgroup usbd_cdc_Exported_Defines + * @{ + */ +#define USB_CDC_CONFIG_DESC_SIZ (67) +#define USB_CDC_DESC_SIZ (67-9) + +#define CDC_DESCRIPTOR_TYPE 0x21 + +#define DEVICE_CLASS_CDC 0x02 +#define DEVICE_SUBCLASS_CDC 0x00 + + +#define USB_DEVICE_DESCRIPTOR_TYPE 0x01 +#define USB_CONFIGURATION_DESCRIPTOR_TYPE 0x02 +#define USB_STRING_DESCRIPTOR_TYPE 0x03 +#define USB_INTERFACE_DESCRIPTOR_TYPE 0x04 +#define USB_ENDPOINT_DESCRIPTOR_TYPE 0x05 + +#define STANDARD_ENDPOINT_DESC_SIZE 0x09 + +#define CDC_DATA_IN_PACKET_SIZE *(uint16_t *)(((USB_OTG_CORE_HANDLE *)pdev)->dev.pConfig_descriptor + 57) + +#define CDC_DATA_OUT_PACKET_SIZE *(uint16_t *)(((USB_OTG_CORE_HANDLE *)pdev)->dev.pConfig_descriptor + 64) + +/*---------------------------------------------------------------------*/ +/* CDC definitions */ +/*---------------------------------------------------------------------*/ + +/**************************************************/ +/* CDC Requests */ +/**************************************************/ +#define SEND_ENCAPSULATED_COMMAND 0x00 +#define GET_ENCAPSULATED_RESPONSE 0x01 +#define SET_COMM_FEATURE 0x02 +#define GET_COMM_FEATURE 0x03 +#define CLEAR_COMM_FEATURE 0x04 +#define SET_LINE_CODING 0x20 +#define GET_LINE_CODING 0x21 +#define SET_CONTROL_LINE_STATE 0x22 +#define SEND_BREAK 0x23 +#define NO_CMD 0xFF + +/** + * @} + */ + + +/** @defgroup USBD_CORE_Exported_TypesDefinitions + * @{ + */ +typedef struct _CDC_IF_PROP +{ + uint16_t (*pIf_Init) (void); + uint16_t (*pIf_DeInit) (void); + uint16_t (*pIf_Ctrl) (uint32_t Cmd, uint8_t* Buf, uint32_t Len); + uint16_t (*pIf_DataTx) (uint8_t* Buf, uint32_t Len); + uint16_t (*pIf_DataRx) (uint8_t* Buf, uint32_t Len); +} +CDC_IF_Prop_TypeDef; +/** + * @} + */ + + + +/** @defgroup USBD_CORE_Exported_Macros + * @{ + */ + +/** + * @} + */ + +/** @defgroup USBD_CORE_Exported_Variables + * @{ + */ + +extern USBD_Class_cb_TypeDef USBD_CDC_cb; +/** + * @} + */ + +/** @defgroup USB_CORE_Exported_Functions + * @{ + */ +/** + * @} + */ + +#endif // __USB_CDC_CORE_H_ +/** + * @} + */ + +/** + * @} + */ + +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ diff --git a/libcodec2-android/src/codec2/stm32/usb_lib/cdc/usbd_cdc_vcp.c b/libcodec2-android/src/codec2/stm32/usb_lib/cdc/usbd_cdc_vcp.c new file mode 100644 index 0000000..5f96919 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/usb_lib/cdc/usbd_cdc_vcp.c @@ -0,0 +1,280 @@ +/** + ****************************************************************************** + * @file usbd_cdc_vcp.c + * @author MCD Application Team + * @version V1.0.0 + * @date 22-July-2011 + * @brief Generic media access Layer. + ****************************************************************************** + * @attention + * + * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS + * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE + * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY + * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING + * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE + * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + *

© COPYRIGHT 2011 STMicroelectronics

+ ****************************************************************************** + */ + +#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED +#pragma data_alignment = 4 +#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */ + +/* Includes ------------------------------------------------------------------*/ +#include "usbd_cdc_vcp.h" +#include "stm32f4xx_conf.h" +#include "stm32f4xx_usart.h" + +/* Private variables ---------------------------------------------------------*/ +LINE_CODING linecoding = { + 115200, /* baud rate*/ + 0x00, /* stop bits-1*/ + 0x00, /* parity - none*/ + 0x08 /* nb. of bits 8*/ +}; + +USART_InitTypeDef USART_InitStructure; + +/* These are external variables imported from CDC core to be used for IN + transfer management. */ +extern uint8_t APP_Rx_Buffer[]; /* Write CDC received data in this buffer. + These data will be sent over USB IN endpoint + in the CDC core functions. */ +extern uint32_t APP_Rx_ptr_in; /* Increment this pointer or roll it back to + start address when writing received data + in the buffer APP_Rx_Buffer. */ + +/* Private function prototypes -----------------------------------------------*/ +static uint16_t VCP_Init(void); +static uint16_t VCP_DeInit(void); +static uint16_t VCP_Ctrl(uint32_t Cmd, uint8_t* Buf, uint32_t Len); +static uint16_t VCP_DataTx(uint8_t* Buf, uint32_t Len); +static uint16_t VCP_DataRx(uint8_t* Buf, uint32_t Len); + +CDC_IF_Prop_TypeDef VCP_fops = { VCP_Init, VCP_DeInit, VCP_Ctrl, VCP_DataTx, + VCP_DataRx }; + +/* Private functions ---------------------------------------------------------*/ +/** + * @brief VCP_Init + * Initializes the Media on the STM32 + * @param None + * @retval Result of the opeartion (USBD_OK in all cases) + */ +static uint16_t VCP_Init(void) { + return USBD_OK; +} + +/** + * @brief VCP_DeInit + * DeInitializes the Media on the STM32 + * @param None + * @retval Result of the opeartion (USBD_OK in all cases) + */ +static uint16_t VCP_DeInit(void) { + return USBD_OK; +} + +/** + * @brief VCP_Ctrl + * Manage the CDC class requests + * @param Cmd: Command code + * @param Buf: Buffer containing command data (request parameters) + * @param Len: Number of data to be sent (in bytes) + * @retval Result of the opeartion (USBD_OK in all cases) + */ +static uint16_t VCP_Ctrl(uint32_t Cmd, uint8_t* Buf, uint32_t Len) { + switch (Cmd) { + case SEND_ENCAPSULATED_COMMAND: + /* Not needed for this driver */ + break; + + case GET_ENCAPSULATED_RESPONSE: + /* Not needed for this driver */ + break; + + case SET_COMM_FEATURE: + /* Not needed for this driver */ + break; + + case GET_COMM_FEATURE: + /* Not needed for this driver */ + break; + + case CLEAR_COMM_FEATURE: + /* Not needed for this driver */ + break; + + case SET_LINE_CODING: + /* Not needed for this driver */ + break; + + case GET_LINE_CODING: + Buf[0] = (uint8_t) (linecoding.bitrate); + Buf[1] = (uint8_t) (linecoding.bitrate >> 8); + Buf[2] = (uint8_t) (linecoding.bitrate >> 16); + Buf[3] = (uint8_t) (linecoding.bitrate >> 24); + Buf[4] = linecoding.format; + Buf[5] = linecoding.paritytype; + Buf[6] = linecoding.datatype; + break; + + case SET_CONTROL_LINE_STATE: + /* Not needed for this driver */ + break; + + case SEND_BREAK: + /* Not needed for this driver */ + break; + + default: + break; + } + + return USBD_OK; +} + +/** + * @brief putchar + * Sends one char over the USB serial link. + * @param buf: char to be sent + * @retval none + */ + +void VCP_put_char(uint8_t buf) { + VCP_DataTx(&buf, 1); +} + +void VCP_send_str(uint8_t* buf) { + uint32_t i = 0; + while (*(buf + i)) { + i++; + } + VCP_DataTx(buf, i); +} + +void VCP_send_buffer(uint8_t* buf, int len) { + VCP_DataTx(buf, len); +} + +/** + * @brief VCP_DataTx + * CDC received data to be send over USB IN endpoint are managed in + * this function. + * @param Buf: Buffer of data to be sent + * @param Len: Number of data to be sent (in bytes) + * @retval Result of the opeartion: USBD_OK if all operations are OK else VCP_FAIL + */ +static uint16_t VCP_DataTx(uint8_t* Buf, uint32_t Len) { + uint32_t i = 0; + while (i < Len) { + APP_Rx_Buffer[APP_Rx_ptr_in] = *(Buf + i); + APP_Rx_ptr_in++; + i++; + /* To avoid buffer overflow */ + if (APP_Rx_ptr_in == APP_RX_DATA_SIZE) { + APP_Rx_ptr_in = 0; + } + } + + return USBD_OK; +} + +/** + * @brief VCP_DataRx + * Data received over USB OUT endpoint are sent over CDC interface + * through this function. + * + * @note + * This function will block any OUT packet reception on USB endpoint + * until exiting this function. If you exit this function before transfer + * is complete on CDC interface (ie. using DMA controller) it will result + * in receiving more data while previous ones are still not sent. + * + * @param Buf: Buffer of data to be received + * @param Len: Number of data received (in bytes) + * @retval Result of the opeartion: USBD_OK if all operations are OK else VCP_FAIL + */ + +#define APP_TX_BUF_SIZE 128 +uint8_t APP_Tx_Buffer[APP_TX_BUF_SIZE]; +uint32_t APP_tx_ptr_head; +uint32_t APP_tx_ptr_tail; + +static uint16_t VCP_DataRx(uint8_t* Buf, uint32_t Len) { + uint32_t i; + + for (i = 0; i < Len; i++) { + APP_Tx_Buffer[APP_tx_ptr_head] = *(Buf + i); + APP_tx_ptr_head++; + if (APP_tx_ptr_head == APP_TX_BUF_SIZE) + APP_tx_ptr_head = 0; + + if (APP_tx_ptr_head == APP_tx_ptr_tail) + return USBD_FAIL; + } + + return USBD_OK; +} + +int VCP_get_char(uint8_t *buf) { + if (APP_tx_ptr_head == APP_tx_ptr_tail) + return 0; + + *buf = APP_Tx_Buffer[APP_tx_ptr_tail]; + APP_tx_ptr_tail++; + if (APP_tx_ptr_tail == APP_TX_BUF_SIZE) + APP_tx_ptr_tail = 0; + + return 1; +} + +int VCP_get_string(uint8_t *buf) { + if (APP_tx_ptr_head == APP_tx_ptr_tail) + return 0; + + while (!APP_Tx_Buffer[APP_tx_ptr_tail] + || APP_Tx_Buffer[APP_tx_ptr_tail] == '\n' + || APP_Tx_Buffer[APP_tx_ptr_tail] == '\r') { + APP_tx_ptr_tail++; + if (APP_tx_ptr_tail == APP_TX_BUF_SIZE) + APP_tx_ptr_tail = 0; + if (APP_tx_ptr_head == APP_tx_ptr_tail) + return 0; + } + + int i = 0; + do { + *(buf + i) = APP_Tx_Buffer[i + APP_tx_ptr_tail]; + i++; + + if ((APP_tx_ptr_tail + i) == APP_TX_BUF_SIZE) + i = -APP_tx_ptr_tail; + if (APP_tx_ptr_head == (APP_tx_ptr_tail + i)) + return 0; + + } while (APP_Tx_Buffer[APP_tx_ptr_tail + i] + && APP_Tx_Buffer[APP_tx_ptr_tail + i] != '\n' + && APP_Tx_Buffer[APP_tx_ptr_tail + i] != '\r'); + + *(buf + i) = 0; + APP_tx_ptr_tail += i; + if (APP_tx_ptr_tail >= APP_TX_BUF_SIZE) + APP_tx_ptr_tail -= APP_TX_BUF_SIZE; + return i; +} + +/** + * @brief EVAL_COM_IRQHandler + * + * @param None. + * @retval None. + */ +void EVAL_COM_IRQHandler(void) { + +} + +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ diff --git a/libcodec2-android/src/codec2/stm32/usb_lib/cdc/usbd_cdc_vcp.h b/libcodec2-android/src/codec2/stm32/usb_lib/cdc/usbd_cdc_vcp.h new file mode 100644 index 0000000..78f2c03 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/usb_lib/cdc/usbd_cdc_vcp.h @@ -0,0 +1,68 @@ +/** + ****************************************************************************** + * @file usbd_cdc_vcp.h + * @author MCD Application Team + * @version V1.0.0 + * @date 22-July-2011 + * @brief Header for usbd_cdc_vcp.c file. + ****************************************************************************** + * @attention + * + * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS + * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE + * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY + * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING + * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE + * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + *

© COPYRIGHT 2011 STMicroelectronics

+ ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __USBD_CDC_VCP_H +#define __USBD_CDC_VCP_H + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f4xx_conf.h" + +#include "usbd_cdc_core.h" +#include "usbd_conf.h" +#include + +/* Exported typef ------------------------------------------------------------*/ +/* The following structures groups all needed parameters to be configured for the + ComPort. These parameters can modified on the fly by the host through CDC class + command class requests. */ +typedef struct +{ + uint32_t bitrate; + uint8_t format; + uint8_t paritytype; + uint8_t datatype; +}LINE_CODING; + +/* Exported constants --------------------------------------------------------*/ +/* The following define is used to route the USART IRQ handler to be used. + The IRQ handler function is implemented in the usbd_cdc_vcp.c file. */ +#ifdef USE_STM322xG_EVAL + #define EVAL_COM_IRQHandler USART3_IRQHandler +#elif defined(USE_STM3210C_EVAL) + #define EVAL_COM_IRQHandler USART2_IRQHandler +#endif /* USE_STM322xG_EVAL */ + +void VCP_put_char(uint8_t buf); +void VCP_send_str(uint8_t* buf); +int VCP_get_char(uint8_t *buf); +int VCP_get_string(uint8_t *buf); +void VCP_send_buffer(uint8_t* buf, int len); + +#define DEFAULT_CONFIG 0 +#define OTHER_CONFIG 1 + +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ + +#endif /* __USBD_CDC_VCP_H */ + +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ diff --git a/libcodec2-android/src/codec2/stm32/usb_lib/core/usbd_core.c b/libcodec2-android/src/codec2/stm32/usb_lib/core/usbd_core.c new file mode 100644 index 0000000..4b5781f --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/usb_lib/core/usbd_core.c @@ -0,0 +1,476 @@ +/** + ****************************************************************************** + * @file usbd_core.c + * @author MCD Application Team + * @version V1.0.0 + * @date 22-July-2011 + * @brief This file provides all the USBD core functions. + ****************************************************************************** + * @attention + * + * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS + * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE + * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY + * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING + * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE + * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + *

© COPYRIGHT 2011 STMicroelectronics

+ ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "usbd_core.h" +#include "usbd_req.h" +#include "usbd_ioreq.h" +#include "usb_dcd_int.h" +#include "usb_bsp.h" + +/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY +* @{ +*/ + + +/** @defgroup USBD_CORE +* @brief usbd core module +* @{ +*/ + +/** @defgroup USBD_CORE_Private_TypesDefinitions +* @{ +*/ +/** +* @} +*/ + + +/** @defgroup USBD_CORE_Private_Defines +* @{ +*/ + +/** +* @} +*/ + + +/** @defgroup USBD_CORE_Private_Macros +* @{ +*/ +/** +* @} +*/ + + + + +/** @defgroup USBD_CORE_Private_FunctionPrototypes +* @{ +*/ +static uint8_t USBD_SetupStage(USB_OTG_CORE_HANDLE *pdev); +static uint8_t USBD_DataOutStage(USB_OTG_CORE_HANDLE *pdev , uint8_t epnum); +static uint8_t USBD_DataInStage(USB_OTG_CORE_HANDLE *pdev , uint8_t epnum); +static uint8_t USBD_SOF(USB_OTG_CORE_HANDLE *pdev); +static uint8_t USBD_Reset(USB_OTG_CORE_HANDLE *pdev); +static uint8_t USBD_Suspend(USB_OTG_CORE_HANDLE *pdev); +static uint8_t USBD_Resume(USB_OTG_CORE_HANDLE *pdev); +#ifdef VBUS_SENSING_ENABLED +static uint8_t USBD_DevConnected(USB_OTG_CORE_HANDLE *pdev); +static uint8_t USBD_DevDisconnected(USB_OTG_CORE_HANDLE *pdev); +#endif +static uint8_t USBD_IsoINIncomplete(USB_OTG_CORE_HANDLE *pdev); +static uint8_t USBD_IsoOUTIncomplete(USB_OTG_CORE_HANDLE *pdev); +/** +* @} +*/ + +/** @defgroup USBD_CORE_Private_Variables +* @{ +*/ + + + +USBD_DCD_INT_cb_TypeDef USBD_DCD_INT_cb = +{ + USBD_DataOutStage, + USBD_DataInStage, + USBD_SetupStage, + USBD_SOF, + USBD_Reset, + USBD_Suspend, + USBD_Resume, + USBD_IsoINIncomplete, + USBD_IsoOUTIncomplete, +#ifdef VBUS_SENSING_ENABLED +USBD_DevConnected, +USBD_DevDisconnected, +#endif +}; + +USBD_DCD_INT_cb_TypeDef *USBD_DCD_INT_fops = &USBD_DCD_INT_cb; +/** +* @} +*/ + +/** @defgroup USBD_CORE_Private_Functions +* @{ +*/ + +/** +* @brief USBD_Init +* Initailizes the device stack and load the class driver +* @param pdev: device instance +* @param core_address: USB OTG core ID +* @param class_cb: Class callback structure address +* @param usr_cb: User callback structure address +* @retval None +*/ +void USBD_Init(USB_OTG_CORE_HANDLE *pdev, + USB_OTG_CORE_ID_TypeDef coreID, + USBD_DEVICE *pDevice, + USBD_Class_cb_TypeDef *class_cb, + USBD_Usr_cb_TypeDef *usr_cb) +{ + /* Hardware Init */ + USB_OTG_BSP_Init(pdev); + + USBD_DeInit(pdev); + + /*Register class and user callbacks */ + pdev->dev.class_cb = class_cb; + pdev->dev.usr_cb = usr_cb; + pdev->dev.usr_device = pDevice; + + /* set USB OTG core params */ + DCD_Init(pdev , coreID); + + /* Upon Init call usr callback */ + pdev->dev.usr_cb->Init(); + + /* Enable Interrupts */ + USB_OTG_BSP_EnableInterrupt(pdev); +} + +/** +* @brief USBD_DeInit +* Re-Initialize th deviuce library +* @param pdev: device instance +* @retval status: status +*/ +USBD_Status USBD_DeInit(USB_OTG_CORE_HANDLE *pdev) +{ + /* Software Init */ + + return USBD_OK; +} + +/** +* @brief USBD_SetupStage +* Handle the setup stage +* @param pdev: device instance +* @retval status +*/ +static uint8_t USBD_SetupStage(USB_OTG_CORE_HANDLE *pdev) +{ + USB_SETUP_REQ req; + + USBD_ParseSetupRequest(pdev , &req); + + switch (req.bmRequest & 0x1F) + { + case USB_REQ_RECIPIENT_DEVICE: + USBD_StdDevReq (pdev, &req); + break; + + case USB_REQ_RECIPIENT_INTERFACE: + USBD_StdItfReq(pdev, &req); + break; + + case USB_REQ_RECIPIENT_ENDPOINT: + USBD_StdEPReq(pdev, &req); + break; + + default: + DCD_EP_Stall(pdev , req.bmRequest & 0x80); + break; + } + return USBD_OK; +} + +/** +* @brief USBD_DataOutStage +* Handle data out stage +* @param pdev: device instance +* @param epnum: endpoint index +* @retval status +*/ +static uint8_t USBD_DataOutStage(USB_OTG_CORE_HANDLE *pdev , uint8_t epnum) +{ + USB_OTG_EP *ep; + + if(epnum == 0) + { + ep = &pdev->dev.out_ep[0]; + if ( pdev->dev.device_state == USB_OTG_EP0_DATA_OUT) + { + if(ep->rem_data_len > ep->maxpacket) + { + ep->rem_data_len -= ep->maxpacket; + + if(pdev->cfg.dma_enable == 1) + { + /* in slave mode this, is handled by the RxSTSQLvl ISR */ + ep->xfer_buff += ep->maxpacket; + } + USBD_CtlContinueRx (pdev, + ep->xfer_buff, + MIN(ep->rem_data_len ,ep->maxpacket)); + } + else + { + if((pdev->dev.class_cb->EP0_RxReady != NULL)&& + (pdev->dev.device_status == USB_OTG_CONFIGURED)) + { + pdev->dev.class_cb->EP0_RxReady(pdev); + } + USBD_CtlSendStatus(pdev); + } + } + } + else if((pdev->dev.class_cb->DataOut != NULL)&& + (pdev->dev.device_status == USB_OTG_CONFIGURED)) + { + pdev->dev.class_cb->DataOut(pdev, epnum); + } + return USBD_OK; +} + +/** +* @brief USBD_DataInStage +* Handle data in stage +* @param pdev: device instance +* @param epnum: endpoint index +* @retval status +*/ +static uint8_t USBD_DataInStage(USB_OTG_CORE_HANDLE *pdev , uint8_t epnum) +{ + USB_OTG_EP *ep; + + if(epnum == 0) + { + ep = &pdev->dev.in_ep[0]; + if ( pdev->dev.device_state == USB_OTG_EP0_DATA_IN) + { + if(ep->rem_data_len > ep->maxpacket) + { + ep->rem_data_len -= ep->maxpacket; + if(pdev->cfg.dma_enable == 1) + { + /* in slave mode this, is handled by the TxFifoEmpty ISR */ + ep->xfer_buff += ep->maxpacket; + } + USBD_CtlContinueSendData (pdev, + ep->xfer_buff, + ep->rem_data_len); + } + else + { /* last packet is MPS multiple, so send ZLP packet */ + if((ep->total_data_len % ep->maxpacket == 0) && + (ep->total_data_len >= ep->maxpacket) && + (ep->total_data_len < ep->ctl_data_len )) + { + + USBD_CtlContinueSendData(pdev , NULL, 0); + ep->ctl_data_len = 0; + } + else + { + if((pdev->dev.class_cb->EP0_TxSent != NULL)&& + (pdev->dev.device_status == USB_OTG_CONFIGURED)) + { + pdev->dev.class_cb->EP0_TxSent(pdev); + } + USBD_CtlReceiveStatus(pdev); + } + } + } + } + else if((pdev->dev.class_cb->DataIn != NULL)&& + (pdev->dev.device_status == USB_OTG_CONFIGURED)) + { + pdev->dev.class_cb->DataIn(pdev, epnum); + } + return USBD_OK; +} + +/** +* @brief USBD_Reset +* Handle Reset event +* @param pdev: device instance +* @retval status +*/ + +static uint8_t USBD_Reset(USB_OTG_CORE_HANDLE *pdev) +{ + /* Open EP0 OUT */ + DCD_EP_Open(pdev, + 0x00, + USB_OTG_MAX_EP0_SIZE, + EP_TYPE_CTRL); + + /* Open EP0 IN */ + DCD_EP_Open(pdev, + 0x80, + USB_OTG_MAX_EP0_SIZE, + EP_TYPE_CTRL); + + /* Upon Reset call usr call back */ + pdev->dev.device_status = USB_OTG_DEFAULT; + pdev->dev.usr_cb->DeviceReset(pdev->cfg.speed); + + return USBD_OK; +} + +/** +* @brief USBD_Resume +* Handle Resume event +* @param pdev: device instance +* @retval status +*/ + +static uint8_t USBD_Resume(USB_OTG_CORE_HANDLE *pdev) +{ + /* Upon Resume call usr call back */ + pdev->dev.usr_cb->DeviceResumed(); + pdev->dev.device_status = USB_OTG_CONFIGURED; + return USBD_OK; +} + + +/** +* @brief USBD_Suspend +* Handle Suspend event +* @param pdev: device instance +* @retval status +*/ + +static uint8_t USBD_Suspend(USB_OTG_CORE_HANDLE *pdev) +{ + + pdev->dev.device_status = USB_OTG_SUSPENDED; + /* Upon Resume call usr call back */ + pdev->dev.usr_cb->DeviceSuspended(); + return USBD_OK; +} + + +/** +* @brief USBD_SOF +* Handle SOF event +* @param pdev: device instance +* @retval status +*/ + +static uint8_t USBD_SOF(USB_OTG_CORE_HANDLE *pdev) +{ + if(pdev->dev.class_cb->SOF) + { + pdev->dev.class_cb->SOF(pdev); + } + return USBD_OK; +} +/** +* @brief USBD_SetCfg +* Configure device and start the interface +* @param pdev: device instance +* @param cfgidx: configuration index +* @retval status +*/ + +USBD_Status USBD_SetCfg(USB_OTG_CORE_HANDLE *pdev, uint8_t cfgidx) +{ + pdev->dev.class_cb->Init(pdev, cfgidx); + + /* Upon set config call usr call back */ + pdev->dev.usr_cb->DeviceConfigured(); + return USBD_OK; +} + +/** +* @brief USBD_ClrCfg +* Clear current configuration +* @param pdev: device instance +* @param cfgidx: configuration index +* @retval status: USBD_Status +*/ +USBD_Status USBD_ClrCfg(USB_OTG_CORE_HANDLE *pdev, uint8_t cfgidx) +{ + pdev->dev.class_cb->DeInit(pdev, cfgidx); + return USBD_OK; +} + +/** +* @brief USBD_IsoINIncomplete +* Handle iso in incomplete event +* @param pdev: device instance +* @retval status +*/ +static uint8_t USBD_IsoINIncomplete(USB_OTG_CORE_HANDLE *pdev) +{ + pdev->dev.class_cb->IsoINIncomplete(pdev); + return USBD_OK; +} + +/** +* @brief USBD_IsoOUTIncomplete +* Handle iso out incomplete event +* @param pdev: device instance +* @retval status +*/ +static uint8_t USBD_IsoOUTIncomplete(USB_OTG_CORE_HANDLE *pdev) +{ + pdev->dev.class_cb->IsoOUTIncomplete(pdev); + return USBD_OK; +} + +#ifdef VBUS_SENSING_ENABLED +/** +* @brief USBD_DevConnected +* Handle device connection event +* @param pdev: device instance +* @retval status +*/ +static uint8_t USBD_DevConnected(USB_OTG_CORE_HANDLE *pdev) +{ + pdev->dev.usr_cb->DeviceConnected(); + return USBD_OK; +} + +/** +* @brief USBD_DevDisconnected +* Handle device disconnection event +* @param pdev: device instance +* @retval status +*/ +static uint8_t USBD_DevDisconnected(USB_OTG_CORE_HANDLE *pdev) +{ + pdev->dev.usr_cb->DeviceDisconnected(); + pdev->dev.class_cb->DeInit(pdev, 0); + return USBD_OK; +} +#endif +/** +* @} +*/ + + +/** +* @} +*/ + + +/** +* @} +*/ + +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ + diff --git a/libcodec2-android/src/codec2/stm32/usb_lib/core/usbd_core.h b/libcodec2-android/src/codec2/stm32/usb_lib/core/usbd_core.h new file mode 100644 index 0000000..1fc8366 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/usb_lib/core/usbd_core.h @@ -0,0 +1,114 @@ +/** + ****************************************************************************** + * @file usbd_core.h + * @author MCD Application Team + * @version V1.0.0 + * @date 22-July-2011 + * @brief Header file for usbd_core.c + ****************************************************************************** + * @attention + * + * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS + * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE + * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY + * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING + * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE + * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + *

© COPYRIGHT 2011 STMicroelectronics

+ ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __USBD_CORE_H +#define __USBD_CORE_H + +/* Includes ------------------------------------------------------------------*/ +#include "usb_dcd.h" +#include "usbd_def.h" +#include "usbd_conf.h" + +/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY + * @{ + */ + +/** @defgroup USBD_CORE + * @brief This file is the Header file for usbd_core.c file + * @{ + */ + + +/** @defgroup USBD_CORE_Exported_Defines + * @{ + */ + +typedef enum { + USBD_OK = 0, + USBD_BUSY, + USBD_FAIL, +}USBD_Status; +/** + * @} + */ + + +/** @defgroup USBD_CORE_Exported_TypesDefinitions + * @{ + */ + + +/** + * @} + */ + + + +/** @defgroup USBD_CORE_Exported_Macros + * @{ + */ + +/** + * @} + */ + +/** @defgroup USBD_CORE_Exported_Variables + * @{ + */ + +/** + * @} + */ + +/** @defgroup USBD_CORE_Exported_FunctionsPrototype + * @{ + */ +void USBD_Init(USB_OTG_CORE_HANDLE *pdev, + USB_OTG_CORE_ID_TypeDef coreID, + USBD_DEVICE *pDevice, + USBD_Class_cb_TypeDef *class_cb, + USBD_Usr_cb_TypeDef *usr_cb); + +USBD_Status USBD_DeInit(USB_OTG_CORE_HANDLE *pdev); + +USBD_Status USBD_ClrCfg(USB_OTG_CORE_HANDLE *pdev, uint8_t cfgidx); + +USBD_Status USBD_SetCfg(USB_OTG_CORE_HANDLE *pdev, uint8_t cfgidx); + +/** + * @} + */ + +#endif /* __USBD_CORE_H */ + +/** + * @} + */ + +/** +* @} +*/ + +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ + + + diff --git a/libcodec2-android/src/codec2/stm32/usb_lib/core/usbd_def.h b/libcodec2-android/src/codec2/stm32/usb_lib/core/usbd_def.h new file mode 100644 index 0000000..40620c9 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/usb_lib/core/usbd_def.h @@ -0,0 +1,149 @@ +/** + ****************************************************************************** + * @file usbd_def.h + * @author MCD Application Team + * @version V1.0.0 + * @date 22-July-2011 + * @brief general defines for the usb device library + ****************************************************************************** + * @attention + * + * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS + * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE + * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY + * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING + * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE + * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + *

© COPYRIGHT 2011 STMicroelectronics

+ ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ + +#ifndef __USBD_DEF_H +#define __USBD_DEF_H +/* Includes ------------------------------------------------------------------*/ +#include "usbd_conf.h" + +/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY + * @{ + */ + +/** @defgroup USB_DEF + * @brief general defines for the usb device library file + * @{ + */ + +/** @defgroup USB_DEF_Exported_Defines + * @{ + */ + +#ifndef NULL +#define NULL 0 +#endif + +#define USB_LEN_DEV_QUALIFIER_DESC 0x0A +#define USB_LEN_DEV_DESC 0x12 +#define USB_LEN_CFG_DESC 0x09 +#define USB_LEN_IF_DESC 0x09 +#define USB_LEN_EP_DESC 0x07 +#define USB_LEN_OTG_DESC 0x03 + +#define USBD_IDX_LANGID_STR 0x00 +#define USBD_IDX_MFC_STR 0x01 +#define USBD_IDX_PRODUCT_STR 0x02 +#define USBD_IDX_SERIAL_STR 0x03 +#define USBD_IDX_CONFIG_STR 0x04 +#define USBD_IDX_INTERFACE_STR 0x05 + +#define USB_REQ_TYPE_STANDARD 0x00 +#define USB_REQ_TYPE_CLASS 0x20 +#define USB_REQ_TYPE_VENDOR 0x40 +#define USB_REQ_TYPE_MASK 0x60 + +#define USB_REQ_RECIPIENT_DEVICE 0x00 +#define USB_REQ_RECIPIENT_INTERFACE 0x01 +#define USB_REQ_RECIPIENT_ENDPOINT 0x02 +#define USB_REQ_RECIPIENT_MASK 0x03 + +#define USB_REQ_GET_STATUS 0x00 +#define USB_REQ_CLEAR_FEATURE 0x01 +#define USB_REQ_SET_FEATURE 0x03 +#define USB_REQ_SET_ADDRESS 0x05 +#define USB_REQ_GET_DESCRIPTOR 0x06 +#define USB_REQ_SET_DESCRIPTOR 0x07 +#define USB_REQ_GET_CONFIGURATION 0x08 +#define USB_REQ_SET_CONFIGURATION 0x09 +#define USB_REQ_GET_INTERFACE 0x0A +#define USB_REQ_SET_INTERFACE 0x0B +#define USB_REQ_SYNCH_FRAME 0x0C + +#define USB_DESC_TYPE_DEVICE 1 +#define USB_DESC_TYPE_CONFIGURATION 2 +#define USB_DESC_TYPE_STRING 3 +#define USB_DESC_TYPE_INTERFACE 4 +#define USB_DESC_TYPE_ENDPOINT 5 +#define USB_DESC_TYPE_DEVICE_QUALIFIER 6 +#define USB_DESC_TYPE_OTHER_SPEED_CONFIGURATION 7 + + +#define USB_CONFIG_REMOTE_WAKEUP 2 +#define USB_CONFIG_SELF_POWERED 1 + +#define USB_FEATURE_EP_HALT 0 +#define USB_FEATURE_REMOTE_WAKEUP 1 +#define USB_FEATURE_TEST_MODE 2 + +/** + * @} + */ + + +/** @defgroup USBD_DEF_Exported_TypesDefinitions + * @{ + */ +/** + * @} + */ + + + +/** @defgroup USBD_DEF_Exported_Macros + * @{ + */ +#define SWAPBYTE(addr) (((uint16_t)(*((uint8_t *)(addr)))) + \ + (((uint16_t)(*(((uint8_t *)(addr)) + 1))) << 8)) + +#define LOBYTE(x) ((uint8_t)(x & 0x00FF)) +#define HIBYTE(x) ((uint8_t)((x & 0xFF00) >>8)) +/** + * @} + */ + +/** @defgroup USBD_DEF_Exported_Variables + * @{ + */ + +/** + * @} + */ + +/** @defgroup USBD_DEF_Exported_FunctionsPrototype + * @{ + */ + +/** + * @} + */ + +#endif /* __USBD_DEF_H */ + +/** + * @} + */ + +/** +* @} +*/ +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ diff --git a/libcodec2-android/src/codec2/stm32/usb_lib/core/usbd_ioreq.c b/libcodec2-android/src/codec2/stm32/usb_lib/core/usbd_ioreq.c new file mode 100644 index 0000000..ea7cacf --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/usb_lib/core/usbd_ioreq.c @@ -0,0 +1,237 @@ +/** + ****************************************************************************** + * @file usbd_ioreq.c + * @author MCD Application Team + * @version V1.0.0 + * @date 22-July-2011 + * @brief This file provides the IO requests APIs for control endpoints. + ****************************************************************************** + * @attention + * + * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS + * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE + * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY + * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING + * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE + * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + *

© COPYRIGHT 2011 STMicroelectronics

+ ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "usbd_ioreq.h" +/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY + * @{ + */ + + +/** @defgroup USBD_IOREQ + * @brief control I/O requests module + * @{ + */ + +/** @defgroup USBD_IOREQ_Private_TypesDefinitions + * @{ + */ +/** + * @} + */ + + +/** @defgroup USBD_IOREQ_Private_Defines + * @{ + */ + +/** + * @} + */ + + +/** @defgroup USBD_IOREQ_Private_Macros + * @{ + */ +/** + * @} + */ + + +/** @defgroup USBD_IOREQ_Private_Variables + * @{ + */ + +/** + * @} + */ + + +/** @defgroup USBD_IOREQ_Private_FunctionPrototypes + * @{ + */ +/** + * @} + */ + + +/** @defgroup USBD_IOREQ_Private_Functions + * @{ + */ + +/** +* @brief USBD_CtlSendData +* send data on the ctl pipe +* @param pdev: device instance +* @param buff: pointer to data buffer +* @param len: length of data to be sent +* @retval status +*/ +USBD_Status USBD_CtlSendData (USB_OTG_CORE_HANDLE *pdev, + uint8_t *pbuf, + uint16_t len) +{ + USBD_Status ret = USBD_OK; + + pdev->dev.in_ep[0].total_data_len = len; + pdev->dev.in_ep[0].rem_data_len = len; + pdev->dev.device_state = USB_OTG_EP0_DATA_IN; + + DCD_EP_Tx (pdev, 0, pbuf, len); + + return ret; +} + +/** +* @brief USBD_CtlContinueSendData +* continue sending data on the ctl pipe +* @param pdev: device instance +* @param buff: pointer to data buffer +* @param len: length of data to be sent +* @retval status +*/ +USBD_Status USBD_CtlContinueSendData (USB_OTG_CORE_HANDLE *pdev, + uint8_t *pbuf, + uint16_t len) +{ + USBD_Status ret = USBD_OK; + + DCD_EP_Tx (pdev, 0, pbuf, len); + + + return ret; +} + +/** +* @brief USBD_CtlPrepareRx +* receive data on the ctl pipe +* @param pdev: USB OTG device instance +* @param buff: pointer to data buffer +* @param len: length of data to be received +* @retval status +*/ +USBD_Status USBD_CtlPrepareRx (USB_OTG_CORE_HANDLE *pdev, + uint8_t *pbuf, + uint16_t len) +{ + USBD_Status ret = USBD_OK; + + pdev->dev.out_ep[0].total_data_len = len; + pdev->dev.out_ep[0].rem_data_len = len; + pdev->dev.device_state = USB_OTG_EP0_DATA_OUT; + + DCD_EP_PrepareRx (pdev, + 0, + pbuf, + len); + + + return ret; +} + +/** +* @brief USBD_CtlContinueRx +* continue receive data on the ctl pipe +* @param pdev: USB OTG device instance +* @param buff: pointer to data buffer +* @param len: length of data to be received +* @retval status +*/ +USBD_Status USBD_CtlContinueRx (USB_OTG_CORE_HANDLE *pdev, + uint8_t *pbuf, + uint16_t len) +{ + USBD_Status ret = USBD_OK; + + DCD_EP_PrepareRx (pdev, + 0, + pbuf, + len); + return ret; +} +/** +* @brief USBD_CtlSendStatus +* send zero lzngth packet on the ctl pipe +* @param pdev: USB OTG device instance +* @retval status +*/ +USBD_Status USBD_CtlSendStatus (USB_OTG_CORE_HANDLE *pdev) +{ + USBD_Status ret = USBD_OK; + pdev->dev.device_state = USB_OTG_EP0_STATUS_IN; + DCD_EP_Tx (pdev, + 0, + NULL, + 0); + + USB_OTG_EP0_OutStart(pdev); + + return ret; +} + +/** +* @brief USBD_CtlReceiveStatus +* receive zero lzngth packet on the ctl pipe +* @param pdev: USB OTG device instance +* @retval status +*/ +USBD_Status USBD_CtlReceiveStatus (USB_OTG_CORE_HANDLE *pdev) +{ + USBD_Status ret = USBD_OK; + pdev->dev.device_state = USB_OTG_EP0_STATUS_OUT; + DCD_EP_PrepareRx ( pdev, + 0, + NULL, + 0); + + USB_OTG_EP0_OutStart(pdev); + + return ret; +} + + +/** +* @brief USBD_GetRxCount +* returns the received data length +* @param pdev: USB OTG device instance +* epnum: endpoint index +* @retval Rx Data blength +*/ +uint16_t USBD_GetRxCount (USB_OTG_CORE_HANDLE *pdev , uint8_t epnum) +{ + return pdev->dev.out_ep[epnum].xfer_count; +} + +/** + * @} + */ + + +/** + * @} + */ + + +/** + * @} + */ + +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ diff --git a/libcodec2-android/src/codec2/stm32/usb_lib/core/usbd_ioreq.h b/libcodec2-android/src/codec2/stm32/usb_lib/core/usbd_ioreq.h new file mode 100644 index 0000000..6858eba --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/usb_lib/core/usbd_ioreq.h @@ -0,0 +1,115 @@ +/** + ****************************************************************************** + * @file usbd_ioreq.h + * @author MCD Application Team + * @version V1.0.0 + * @date 22-July-2011 + * @brief header file for the usbd_ioreq.c file + ****************************************************************************** + * @attention + * + * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS + * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE + * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY + * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING + * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE + * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + *

© COPYRIGHT 2011 STMicroelectronics

+ ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ + +#ifndef __USBD_IOREQ_H_ +#define __USBD_IOREQ_H_ + +/* Includes ------------------------------------------------------------------*/ +#include "usbd_def.h" +#include "usbd_core.h" + +/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY + * @{ + */ + +/** @defgroup USBD_IOREQ + * @brief header file for the usbd_ioreq.c file + * @{ + */ + +/** @defgroup USBD_IOREQ_Exported_Defines + * @{ + */ +/** + * @} + */ + + +/** @defgroup USBD_IOREQ_Exported_Types + * @{ + */ + + +/** + * @} + */ + + + +/** @defgroup USBD_IOREQ_Exported_Macros + * @{ + */ + +/** + * @} + */ + +/** @defgroup USBD_IOREQ_Exported_Variables + * @{ + */ + +/** + * @} + */ + +/** @defgroup USBD_IOREQ_Exported_FunctionsPrototype + * @{ + */ + +USBD_Status USBD_CtlSendData (USB_OTG_CORE_HANDLE *pdev, + uint8_t *buf, + uint16_t len); + +USBD_Status USBD_CtlContinueSendData (USB_OTG_CORE_HANDLE *pdev, + uint8_t *pbuf, + uint16_t len); + +USBD_Status USBD_CtlPrepareRx (USB_OTG_CORE_HANDLE *pdev, + uint8_t *pbuf, + uint16_t len); + +USBD_Status USBD_CtlContinueRx (USB_OTG_CORE_HANDLE *pdev, + uint8_t *pbuf, + uint16_t len); + +USBD_Status USBD_CtlSendStatus (USB_OTG_CORE_HANDLE *pdev); + +USBD_Status USBD_CtlReceiveStatus (USB_OTG_CORE_HANDLE *pdev); + +uint16_t USBD_GetRxCount (USB_OTG_CORE_HANDLE *pdev , + uint8_t epnum); + +/** + * @} + */ + +#endif /* __USBD_IOREQ_H_ */ + +/** + * @} + */ + +/** +* @} +*/ +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ diff --git a/libcodec2-android/src/codec2/stm32/usb_lib/core/usbd_req.c b/libcodec2-android/src/codec2/stm32/usb_lib/core/usbd_req.c new file mode 100644 index 0000000..40fca32 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/usb_lib/core/usbd_req.c @@ -0,0 +1,868 @@ +/** + ****************************************************************************** + * @file usbd_req.c + * @author MCD Application Team + * @version V1.0.0 + * @date 22-July-2011 + * @brief This file provides the standard USB requests following chapter 9. + ****************************************************************************** + * @attention + * + * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS + * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE + * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY + * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING + * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE + * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + *

© COPYRIGHT 2011 STMicroelectronics

+ ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "usbd_req.h" +#include "usbd_ioreq.h" +#include "usbd_desc.h" + + +/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY + * @{ + */ + + +/** @defgroup USBD_REQ + * @brief USB standard requests module + * @{ + */ + +/** @defgroup USBD_REQ_Private_TypesDefinitions + * @{ + */ +/** + * @} + */ + + +/** @defgroup USBD_REQ_Private_Defines + * @{ + */ + +/** + * @} + */ + + +/** @defgroup USBD_REQ_Private_Macros + * @{ + */ +/** + * @} + */ + + +/** @defgroup USBD_REQ_Private_Variables + * @{ + */ + +#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED + #if defined ( __ICCARM__ ) /*!< IAR Compiler */ + #pragma data_alignment=4 + #endif +#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */ +__ALIGN_BEGIN uint32_t USBD_ep_status __ALIGN_END = 0; + +#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED + #if defined ( __ICCARM__ ) /*!< IAR Compiler */ + #pragma data_alignment=4 + #endif +#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */ +__ALIGN_BEGIN uint32_t USBD_default_cfg __ALIGN_END = 0; + +#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED + #if defined ( __ICCARM__ ) /*!< IAR Compiler */ + #pragma data_alignment=4 + #endif +#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */ +__ALIGN_BEGIN uint32_t USBD_cfg_status __ALIGN_END = 0; + +#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED + #if defined ( __ICCARM__ ) /*!< IAR Compiler */ + #pragma data_alignment=4 + #endif +#endif /* USB_OTG_HS_INTERNAL_DMA_ENABLED */ +__ALIGN_BEGIN uint8_t USBD_StrDesc[USB_MAX_STR_DESC_SIZ] __ALIGN_END ; +/** + * @} + */ + + +/** @defgroup USBD_REQ_Private_FunctionPrototypes + * @{ + */ +static void USBD_GetDescriptor(USB_OTG_CORE_HANDLE *pdev, + USB_SETUP_REQ *req); + +static void USBD_SetAddress(USB_OTG_CORE_HANDLE *pdev, + USB_SETUP_REQ *req); + +static void USBD_SetConfig(USB_OTG_CORE_HANDLE *pdev, + USB_SETUP_REQ *req); + +static void USBD_GetConfig(USB_OTG_CORE_HANDLE *pdev, + USB_SETUP_REQ *req); + +static void USBD_GetStatus(USB_OTG_CORE_HANDLE *pdev, + USB_SETUP_REQ *req); + +static void USBD_SetFeature(USB_OTG_CORE_HANDLE *pdev, + USB_SETUP_REQ *req); + +static void USBD_ClrFeature(USB_OTG_CORE_HANDLE *pdev, + USB_SETUP_REQ *req); + +static uint8_t USBD_GetLen(uint8_t *buf); +/** + * @} + */ + + +/** @defgroup USBD_REQ_Private_Functions + * @{ + */ + + +/** +* @brief USBD_StdDevReq +* Handle standard usb device requests +* @param pdev: device instance +* @param req: usb request +* @retval status +*/ +USBD_Status USBD_StdDevReq (USB_OTG_CORE_HANDLE *pdev, USB_SETUP_REQ *req) +{ + USBD_Status ret = USBD_OK; + + switch (req->bRequest) + { + case USB_REQ_GET_DESCRIPTOR: + + USBD_GetDescriptor (pdev, req) ; + break; + + case USB_REQ_SET_ADDRESS: + USBD_SetAddress(pdev, req); + break; + + case USB_REQ_SET_CONFIGURATION: + USBD_SetConfig (pdev , req); + break; + + case USB_REQ_GET_CONFIGURATION: + USBD_GetConfig (pdev , req); + break; + + case USB_REQ_GET_STATUS: + USBD_GetStatus (pdev , req); + break; + + + case USB_REQ_SET_FEATURE: + USBD_SetFeature (pdev , req); + break; + + case USB_REQ_CLEAR_FEATURE: + USBD_ClrFeature (pdev , req); + break; + + default: + USBD_CtlError(pdev , req); + break; + } + + return ret; +} + +/** +* @brief USBD_StdItfReq +* Handle standard usb interface requests +* @param pdev: USB OTG device instance +* @param req: usb request +* @retval status +*/ +USBD_Status USBD_StdItfReq (USB_OTG_CORE_HANDLE *pdev, USB_SETUP_REQ *req) +{ + USBD_Status ret = USBD_OK; + + switch (pdev->dev.device_status) + { + case USB_OTG_CONFIGURED: + + if (LOBYTE(req->wIndex) <= USBD_ITF_MAX_NUM) + { + pdev->dev.class_cb->Setup (pdev, req); + + if((req->wLength == 0)&& (ret == USBD_OK)) + { + USBD_CtlSendStatus(pdev); + } + } + else + { + USBD_CtlError(pdev , req); + } + break; + + default: + USBD_CtlError(pdev , req); + break; + } + return ret; +} + +/** +* @brief USBD_StdEPReq +* Handle standard usb endpoint requests +* @param pdev: USB OTG device instance +* @param req: usb request +* @retval status +*/ +USBD_Status USBD_StdEPReq (USB_OTG_CORE_HANDLE *pdev, USB_SETUP_REQ *req) +{ + + uint8_t ep_addr; + USBD_Status ret = USBD_OK; + + ep_addr = LOBYTE(req->wIndex); + + switch (req->bRequest) + { + + case USB_REQ_SET_FEATURE : + + switch (pdev->dev.device_status) + { + case USB_OTG_ADDRESSED: + if ((ep_addr != 0x00) && (ep_addr != 0x80)) + { + DCD_EP_Stall(pdev , ep_addr); + } + break; + + case USB_OTG_CONFIGURED: + if (req->wValue == USB_FEATURE_EP_HALT) + { + if ((ep_addr != 0x00) && (ep_addr != 0x80)) + { + DCD_EP_Stall(pdev , ep_addr); + + } + } + pdev->dev.class_cb->Setup (pdev, req); + USBD_CtlSendStatus(pdev); + + break; + + default: + USBD_CtlError(pdev , req); + break; + } + break; + + case USB_REQ_CLEAR_FEATURE : + + switch (pdev->dev.device_status) + { + case USB_OTG_ADDRESSED: + if ((ep_addr != 0x00) && (ep_addr != 0x80)) + { + DCD_EP_Stall(pdev , ep_addr); + } + break; + + case USB_OTG_CONFIGURED: + if (req->wValue == USB_FEATURE_EP_HALT) + { + if ((ep_addr != 0x00) && (ep_addr != 0x80)) + { + DCD_EP_ClrStall(pdev , ep_addr); + pdev->dev.class_cb->Setup (pdev, req); + } + USBD_CtlSendStatus(pdev); + } + break; + + default: + USBD_CtlError(pdev , req); + break; + } + break; + + case USB_REQ_GET_STATUS: + switch (pdev->dev.device_status) + { + case USB_OTG_ADDRESSED: + if ((ep_addr != 0x00) && (ep_addr != 0x80)) + { + DCD_EP_Stall(pdev , ep_addr); + } + break; + + case USB_OTG_CONFIGURED: + + + if ((ep_addr & 0x80)== 0x80) + { + if(pdev->dev.in_ep[ep_addr & 0x7F].is_stall) + { + USBD_ep_status = 0x0001; + } + else + { + USBD_ep_status = 0x0000; + } + } + else if ((ep_addr & 0x80)== 0x00) + { + if(pdev->dev.out_ep[ep_addr].is_stall) + { + USBD_ep_status = 0x0001; + } + + else + { + USBD_ep_status = 0x0000; + } + } + USBD_CtlSendData (pdev, + (uint8_t *)&USBD_ep_status, + 2); + break; + + default: + USBD_CtlError(pdev , req); + break; + } + break; + + default: + break; + } + return ret; +} +/** +* @brief USBD_GetDescriptor +* Handle Get Descriptor requests +* @param pdev: device instance +* @param req: usb request +* @retval status +*/ +static void USBD_GetDescriptor(USB_OTG_CORE_HANDLE *pdev, + USB_SETUP_REQ *req) +{ + uint16_t len; + uint8_t *pbuf; + + switch (req->wValue >> 8) + { + case USB_DESC_TYPE_DEVICE: + pbuf = pdev->dev.usr_device->GetDeviceDescriptor(pdev->cfg.speed, &len); + if ((req->wLength == 64) ||( pdev->dev.device_status == USB_OTG_DEFAULT)) + { + len = 8; + } + break; + + case USB_DESC_TYPE_CONFIGURATION: + pbuf = (uint8_t *)pdev->dev.class_cb->GetConfigDescriptor(pdev->cfg.speed, &len); +#ifdef USB_OTG_HS_CORE + if((pdev->cfg.speed == USB_OTG_SPEED_FULL )&& + (pdev->cfg.phy_itface == USB_OTG_ULPI_PHY)) + { + pbuf = (uint8_t *)pdev->dev.class_cb->GetOtherConfigDescriptor(pdev->cfg.speed, &len); + } +#endif + pbuf[1] = USB_DESC_TYPE_CONFIGURATION; + pdev->dev.pConfig_descriptor = pbuf; + break; + + case USB_DESC_TYPE_STRING: + switch ((uint8_t)(req->wValue)) + { + case USBD_IDX_LANGID_STR: + pbuf = pdev->dev.usr_device->GetLangIDStrDescriptor(pdev->cfg.speed, &len); + break; + + case USBD_IDX_MFC_STR: + pbuf = pdev->dev.usr_device->GetManufacturerStrDescriptor(pdev->cfg.speed, &len); + break; + + case USBD_IDX_PRODUCT_STR: + pbuf = pdev->dev.usr_device->GetProductStrDescriptor(pdev->cfg.speed, &len); + break; + + case USBD_IDX_SERIAL_STR: + pbuf = pdev->dev.usr_device->GetSerialStrDescriptor(pdev->cfg.speed, &len); + break; + + case USBD_IDX_CONFIG_STR: + pbuf = pdev->dev.usr_device->GetConfigurationStrDescriptor(pdev->cfg.speed, &len); + break; + + case USBD_IDX_INTERFACE_STR: + pbuf = pdev->dev.usr_device->GetInterfaceStrDescriptor(pdev->cfg.speed, &len); + break; + + default: +#ifdef USB_SUPPORT_USER_STRING_DESC + pbuf = pdev->dev.class_cb->GetUsrStrDescriptor(pdev->cfg.speed, (req->wValue) , &len); + break; +#else + USBD_CtlError(pdev , req); + return; +#endif /* USBD_CtlError(pdev , req); */ + } + break; + case USB_DESC_TYPE_DEVICE_QUALIFIER: +#ifdef USB_OTG_HS_CORE + if(pdev->cfg.speed == USB_OTG_SPEED_HIGH ) + { + + pbuf = (uint8_t *)pdev->dev.class_cb->GetConfigDescriptor(pdev->cfg.speed, &len); + + USBD_DeviceQualifierDesc[4]= pbuf[14]; + USBD_DeviceQualifierDesc[5]= pbuf[15]; + USBD_DeviceQualifierDesc[6]= pbuf[16]; + + pbuf = USBD_DeviceQualifierDesc; + len = USB_LEN_DEV_QUALIFIER_DESC; + break; + } + else + { + USBD_CtlError(pdev , req); + return; + } +#else + USBD_CtlError(pdev , req); + return; +#endif + + case USB_DESC_TYPE_OTHER_SPEED_CONFIGURATION: +#ifdef USB_OTG_HS_CORE + + if(pdev->cfg.speed == USB_OTG_SPEED_HIGH ) + { + pbuf = (uint8_t *)pdev->dev.class_cb->GetOtherConfigDescriptor(pdev->cfg.speed, &len); + pbuf[1] = USB_DESC_TYPE_OTHER_SPEED_CONFIGURATION; + break; + } + else + { + USBD_CtlError(pdev , req); + return; + } +#else + USBD_CtlError(pdev , req); + return; +#endif + + + default: + USBD_CtlError(pdev , req); + return; + } + + if((len != 0)&& (req->wLength != 0)) + { + + len = MIN(len , req->wLength); + + USBD_CtlSendData (pdev, + pbuf, + len); + } + +} + +/** +* @brief USBD_SetAddress +* Set device address +* @param pdev: device instance +* @param req: usb request +* @retval status +*/ +static void USBD_SetAddress(USB_OTG_CORE_HANDLE *pdev, + USB_SETUP_REQ *req) +{ + uint8_t dev_addr; + + if ((req->wIndex == 0) && (req->wLength == 0)) + { + dev_addr = (uint8_t)(req->wValue) & 0x7F; + + if (pdev->dev.device_status == USB_OTG_CONFIGURED) + { + USBD_CtlError(pdev , req); + } + else + { + pdev->dev.device_address = dev_addr; + DCD_EP_SetAddress(pdev, dev_addr); + USBD_CtlSendStatus(pdev); + + if (dev_addr != 0) + { + pdev->dev.device_status = USB_OTG_ADDRESSED; + } + else + { + pdev->dev.device_status = USB_OTG_DEFAULT; + } + } + } + else + { + USBD_CtlError(pdev , req); + } +} + +/** +* @brief USBD_SetConfig +* Handle Set device configuration request +* @param pdev: device instance +* @param req: usb request +* @retval status +*/ +static void USBD_SetConfig(USB_OTG_CORE_HANDLE *pdev, + USB_SETUP_REQ *req) +{ + + static uint8_t cfgidx; + + cfgidx = (uint8_t)(req->wValue); + + if (cfgidx > USBD_CFG_MAX_NUM ) + { + USBD_CtlError(pdev , req); + } + else + { + switch (pdev->dev.device_status) + { + case USB_OTG_ADDRESSED: + if (cfgidx) + { + pdev->dev.device_config = cfgidx; + pdev->dev.device_status = USB_OTG_CONFIGURED; + USBD_SetCfg(pdev , cfgidx); + USBD_CtlSendStatus(pdev); + } + else + { + USBD_CtlSendStatus(pdev); + } + break; + + case USB_OTG_CONFIGURED: + if (cfgidx == 0) + { + pdev->dev.device_status = USB_OTG_ADDRESSED; + pdev->dev.device_config = cfgidx; + USBD_ClrCfg(pdev , cfgidx); + USBD_CtlSendStatus(pdev); + + } + else if (cfgidx != pdev->dev.device_config) + { + /* Clear old configuration */ + USBD_ClrCfg(pdev , pdev->dev.device_config); + + /* set new configuration */ + pdev->dev.device_config = cfgidx; + USBD_SetCfg(pdev , cfgidx); + USBD_CtlSendStatus(pdev); + } + else + { + USBD_CtlSendStatus(pdev); + } + break; + + default: + USBD_CtlError(pdev , req); + break; + } + } +} + +/** +* @brief USBD_GetConfig +* Handle Get device configuration request +* @param pdev: device instance +* @param req: usb request +* @retval status +*/ +static void USBD_GetConfig(USB_OTG_CORE_HANDLE *pdev, + USB_SETUP_REQ *req) +{ + + if (req->wLength != 1) + { + USBD_CtlError(pdev , req); + } + else + { + switch (pdev->dev.device_status ) + { + case USB_OTG_ADDRESSED: + + USBD_CtlSendData (pdev, + (uint8_t *)&USBD_default_cfg, + 1); + break; + + case USB_OTG_CONFIGURED: + + USBD_CtlSendData (pdev, + &pdev->dev.device_config, + 1); + break; + + default: + USBD_CtlError(pdev , req); + break; + } + } +} + +/** +* @brief USBD_GetStatus +* Handle Get Status request +* @param pdev: device instance +* @param req: usb request +* @retval status +*/ +static void USBD_GetStatus(USB_OTG_CORE_HANDLE *pdev, + USB_SETUP_REQ *req) +{ + + switch (pdev->dev.device_status) + { + case USB_OTG_ADDRESSED: + case USB_OTG_CONFIGURED: + + if (pdev->dev.DevRemoteWakeup) + { + USBD_cfg_status = USB_CONFIG_SELF_POWERED | USB_CONFIG_REMOTE_WAKEUP; + } + else + { + USBD_cfg_status = USB_CONFIG_SELF_POWERED; + } + + USBD_CtlSendData (pdev, + (uint8_t *)&USBD_cfg_status, + 1); + break; + + default : + USBD_CtlError(pdev , req); + break; + } +} + + +/** +* @brief USBD_SetFeature +* Handle Set device feature request +* @param pdev: device instance +* @param req: usb request +* @retval status +*/ +static void USBD_SetFeature(USB_OTG_CORE_HANDLE *pdev, + USB_SETUP_REQ *req) +{ + + USB_OTG_DCTL_TypeDef dctl; + uint8_t test_mode = 0; + + if (req->wValue == USB_FEATURE_REMOTE_WAKEUP) + { + pdev->dev.DevRemoteWakeup = 1; + pdev->dev.class_cb->Setup (pdev, req); + USBD_CtlSendStatus(pdev); + } + + else if ((req->wValue == USB_FEATURE_TEST_MODE) && + ((req->wIndex & 0xFF) == 0)) + { + dctl.d32 = USB_OTG_READ_REG32(&pdev->regs.DREGS->DCTL); + + test_mode = req->wIndex >> 8; + switch (test_mode) + { + case 1: // TEST_J + dctl.b.tstctl = 1; + break; + + case 2: // TEST_K + dctl.b.tstctl = 2; + break; + + case 3: // TEST_SE0_NAK + dctl.b.tstctl = 3; + break; + + case 4: // TEST_PACKET + dctl.b.tstctl = 4; + break; + + case 5: // TEST_FORCE_ENABLE + dctl.b.tstctl = 5; + break; + } + USB_OTG_WRITE_REG32(&pdev->regs.DREGS->DCTL, dctl.d32); + USBD_CtlSendStatus(pdev); + } + +} + + +/** +* @brief USBD_ClrFeature +* Handle clear device feature request +* @param pdev: device instance +* @param req: usb request +* @retval status +*/ +static void USBD_ClrFeature(USB_OTG_CORE_HANDLE *pdev, + USB_SETUP_REQ *req) +{ + switch (pdev->dev.device_status) + { + case USB_OTG_ADDRESSED: + case USB_OTG_CONFIGURED: + if (req->wValue == USB_FEATURE_REMOTE_WAKEUP) + { + pdev->dev.DevRemoteWakeup = 0; + pdev->dev.class_cb->Setup (pdev, req); + USBD_CtlSendStatus(pdev); + } + break; + + default : + USBD_CtlError(pdev , req); + break; + } +} + +/** +* @brief USBD_ParseSetupRequest +* Copy buffer into setup structure +* @param pdev: device instance +* @param req: usb request +* @retval None +*/ + +void USBD_ParseSetupRequest( USB_OTG_CORE_HANDLE *pdev, + USB_SETUP_REQ *req) +{ + req->bmRequest = *(uint8_t *) (pdev->dev.setup_packet); + req->bRequest = *(uint8_t *) (pdev->dev.setup_packet + 1); + req->wValue = SWAPBYTE (pdev->dev.setup_packet + 2); + req->wIndex = SWAPBYTE (pdev->dev.setup_packet + 4); + req->wLength = SWAPBYTE (pdev->dev.setup_packet + 6); + + pdev->dev.in_ep[0].ctl_data_len = req->wLength ; + pdev->dev.device_state = USB_OTG_EP0_SETUP; +} + +/** +* @brief USBD_CtlError +* Handle USB low level Error +* @param pdev: device instance +* @param req: usb request +* @retval None +*/ + +void USBD_CtlError( USB_OTG_CORE_HANDLE *pdev, + USB_SETUP_REQ *req) +{ + if((req->bmRequest & 0x80) == 0x80) + { + DCD_EP_Stall(pdev , 0x80); + } + else + { + if(req->wLength == 0) + { + DCD_EP_Stall(pdev , 0x80); + } + else + { + DCD_EP_Stall(pdev , 0); + } + } + USB_OTG_EP0_OutStart(pdev); +} + + +/** + * @brief USBD_GetString + * Convert Ascii string into unicode one + * @param desc : descriptor buffer + * @param unicode : Formatted string buffer (unicode) + * @param len : descriptor length + * @retval None + */ +void USBD_GetString(uint8_t *desc, uint8_t *unicode, uint16_t *len) +{ + uint8_t idx = 0; + + if (desc != NULL) + { + *len = USBD_GetLen(desc) * 2 + 2; + unicode[idx++] = *len; + unicode[idx++] = USB_DESC_TYPE_STRING; + + while (*desc != NULL) + { + unicode[idx++] = *desc++; + unicode[idx++] = 0x00; + } + } +} + +/** + * @brief USBD_GetLen + * return the string length + * @param buf : pointer to the ascii string buffer + * @retval string length + */ +static uint8_t USBD_GetLen(uint8_t *buf) +{ + uint8_t len = 0; + + while (*buf != NULL) + { + len++; + buf++; + } + + return len; +} +/** + * @} + */ + + +/** + * @} + */ + + +/** + * @} + */ + +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ diff --git a/libcodec2-android/src/codec2/stm32/usb_lib/core/usbd_req.h b/libcodec2-android/src/codec2/stm32/usb_lib/core/usbd_req.h new file mode 100644 index 0000000..f73bb45 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/usb_lib/core/usbd_req.h @@ -0,0 +1,102 @@ +/** + ****************************************************************************** + * @file usbd_req.h + * @author MCD Application Team + * @version V1.0.0 + * @date 22-July-2011 + * @brief header file for the usbd_req.c file + ****************************************************************************** + * @attention + * + * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS + * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE + * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY + * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING + * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE + * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + *

© COPYRIGHT 2011 STMicroelectronics

+ ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ + +#ifndef __USB_REQUEST_H_ +#define __USB_REQUEST_H_ + +/* Includes ------------------------------------------------------------------*/ +#include "usbd_def.h" +#include "usbd_core.h" +#include "usbd_conf.h" + + +/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY + * @{ + */ + +/** @defgroup USBD_REQ + * @brief header file for the usbd_ioreq.c file + * @{ + */ + +/** @defgroup USBD_REQ_Exported_Defines + * @{ + */ +/** + * @} + */ + + +/** @defgroup USBD_REQ_Exported_Types + * @{ + */ +/** + * @} + */ + + + +/** @defgroup USBD_REQ_Exported_Macros + * @{ + */ +/** + * @} + */ + +/** @defgroup USBD_REQ_Exported_Variables + * @{ + */ +/** + * @} + */ + +/** @defgroup USBD_REQ_Exported_FunctionsPrototype + * @{ + */ + +USBD_Status USBD_StdDevReq (USB_OTG_CORE_HANDLE *pdev, USB_SETUP_REQ *req); +USBD_Status USBD_StdItfReq (USB_OTG_CORE_HANDLE *pdev, USB_SETUP_REQ *req); +USBD_Status USBD_StdEPReq (USB_OTG_CORE_HANDLE *pdev, USB_SETUP_REQ *req); +void USBD_ParseSetupRequest( USB_OTG_CORE_HANDLE *pdev, + USB_SETUP_REQ *req); + +void USBD_CtlError( USB_OTG_CORE_HANDLE *pdev, + USB_SETUP_REQ *req); + +void USBD_GetString(uint8_t *desc, uint8_t *unicode, uint16_t *len); +/** + * @} + */ + +#endif /* __USB_REQUEST_H_ */ + +/** + * @} + */ + +/** +* @} +*/ + + +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ diff --git a/libcodec2-android/src/codec2/stm32/usb_lib/core/usbd_usr.h b/libcodec2-android/src/codec2/stm32/usb_lib/core/usbd_usr.h new file mode 100644 index 0000000..976cc13 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/usb_lib/core/usbd_usr.h @@ -0,0 +1,135 @@ +/** + ****************************************************************************** + * @file usbd_usr.h + * @author MCD Application Team + * @version V1.0.0 + * @date 22-July-2011 + * @brief Header file for usbd_usr.c + ****************************************************************************** + * @attention + * + * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS + * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE + * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY + * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING + * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE + * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + *

© COPYRIGHT 2011 STMicroelectronics

+ ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __USBD_USR_H__ +#define __USBD_USR_H__ + +/* Includes ------------------------------------------------------------------*/ +#include "usbd_core.h" + + +/** @addtogroup USBD_USER + * @{ + */ + +/** @addtogroup USBD_MSC_DEMO_USER_CALLBACKS + * @{ + */ + +/** @defgroup USBD_USR + * @brief This file is the Header file for usbd_usr.c + * @{ + */ + + +/** @defgroup USBD_USR_Exported_Types + * @{ + */ + +extern USBD_Usr_cb_TypeDef USR_cb; +extern USBD_Usr_cb_TypeDef USR_FS_cb; +extern USBD_Usr_cb_TypeDef USR_HS_cb; + + + +/** + * @} + */ + + + +/** @defgroup USBD_USR_Exported_Defines + * @{ + */ + +/** + * @} + */ + +/** @defgroup USBD_USR_Exported_Macros + * @{ + */ +/** + * @} + */ + +/** @defgroup USBD_USR_Exported_Variables + * @{ + */ + +void USBD_USR_Init(void); +void USBD_USR_DeviceReset (uint8_t speed); +void USBD_USR_DeviceConfigured (void); +void USBD_USR_DeviceSuspended(void); +void USBD_USR_DeviceResumed(void); + +void USBD_USR_DeviceConnected(void); +void USBD_USR_DeviceDisconnected(void); + +void USBD_USR_FS_Init(void); +void USBD_USR_FS_DeviceReset (uint8_t speed); +void USBD_USR_FS_DeviceConfigured (void); +void USBD_USR_FS_DeviceSuspended(void); +void USBD_USR_FS_DeviceResumed(void); + +void USBD_USR_FS_DeviceConnected(void); +void USBD_USR_FS_DeviceDisconnected(void); + +void USBD_USR_HS_Init(void); +void USBD_USR_HS_DeviceReset (uint8_t speed); +void USBD_USR_HS_DeviceConfigured (void); +void USBD_USR_HS_DeviceSuspended(void); +void USBD_USR_HS_DeviceResumed(void); + +void USBD_USR_HS_DeviceConnected(void); +void USBD_USR_HS_DeviceDisconnected(void); + +/** + * @} + */ + +/** @defgroup USBD_USR_Exported_FunctionsPrototype + * @{ + */ +/** + * @} + */ + +#endif /*__USBD_USR_H__*/ + +/** + * @} + */ + +/** + * @} + */ + +/** + * @} + */ + +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ + + + + diff --git a/libcodec2-android/src/codec2/stm32/usb_lib/otg/usb_core.c b/libcodec2-android/src/codec2/stm32/usb_lib/otg/usb_core.c new file mode 100644 index 0000000..1832106 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/usb_lib/otg/usb_core.c @@ -0,0 +1,2187 @@ +/** + ****************************************************************************** + * @file usb_core.c + * @author MCD Application Team + * @version V2.0.0 + * @date 22-July-2011 + * @brief USB-OTG Core Layer + ****************************************************************************** + * @attention + * + * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS + * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE + * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY + * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING + * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE + * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + *

© COPYRIGHT 2011 STMicroelectronics

+ ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "usb_core.h" +#include "usb_bsp.h" + + +/** @addtogroup USB_OTG_DRIVER +* @{ +*/ + +/** @defgroup USB_CORE +* @brief This file includes the USB-OTG Core Layer +* @{ +*/ + + +/** @defgroup USB_CORE_Private_Defines +* @{ +*/ + +/** +* @} +*/ + + +/** @defgroup USB_CORE_Private_TypesDefinitions +* @{ +*/ +/** +* @} +*/ + + + +/** @defgroup USB_CORE_Private_Macros +* @{ +*/ +/** +* @} +*/ + + +/** @defgroup USB_CORE_Private_Variables +* @{ +*/ +/** +* @} +*/ + + +/** @defgroup USB_CORE_Private_FunctionPrototypes +* @{ +*/ +/** +* @} +*/ + + +/** @defgroup USB_CORE_Private_Functions +* @{ +*/ + +/** +* @brief USB_OTG_EnableCommonInt +* Initializes the commmon interrupts, used in both device and modes +* @param pdev : Selected device +* @retval None +*/ +static void USB_OTG_EnableCommonInt(USB_OTG_CORE_HANDLE *pdev) +{ + USB_OTG_GINTMSK_TypeDef int_mask; + + int_mask.d32 = 0; + /* Clear any pending USB_OTG Interrupts */ +#ifndef USE_OTG_MODE + USB_OTG_WRITE_REG32( &pdev->regs.GREGS->GOTGINT, 0xFFFFFFFF); +#endif + /* Clear any pending interrupts */ + USB_OTG_WRITE_REG32( &pdev->regs.GREGS->GINTSTS, 0xFFFFFFFF); + /* Enable the interrupts in the INTMSK */ + int_mask.b.wkupintr = 1; + int_mask.b.usbsuspend = 1; + +#ifdef USE_OTG_MODE + int_mask.b.otgintr = 1; + int_mask.b.sessreqintr = 1; + int_mask.b.conidstschng = 1; +#endif + USB_OTG_WRITE_REG32( &pdev->regs.GREGS->GINTMSK, int_mask.d32); +} + +/** +* @brief USB_OTG_CoreReset : Soft reset of the core +* @param pdev : Selected device +* @retval USB_OTG_STS : status +*/ +static USB_OTG_STS USB_OTG_CoreReset(USB_OTG_CORE_HANDLE *pdev) +{ + USB_OTG_STS status = USB_OTG_OK; + __IO USB_OTG_GRSTCTL_TypeDef greset; + uint32_t count = 0; + + greset.d32 = 0; + /* Wait for AHB master IDLE state. */ + do + { + USB_OTG_BSP_uDelay(3); + greset.d32 = USB_OTG_READ_REG32(&pdev->regs.GREGS->GRSTCTL); + if (++count > 200000) + { + return USB_OTG_OK; + } + } + while (greset.b.ahbidle == 0); + /* Core Soft Reset */ + count = 0; + greset.b.csftrst = 1; + USB_OTG_WRITE_REG32(&pdev->regs.GREGS->GRSTCTL, greset.d32 ); + do + { + greset.d32 = USB_OTG_READ_REG32(&pdev->regs.GREGS->GRSTCTL); + if (++count > 200000) + { + break; + } + } + while (greset.b.csftrst == 1); + /* Wait for 3 PHY Clocks*/ + USB_OTG_BSP_uDelay(3); + return status; +} + +/** +* @brief USB_OTG_WritePacket : Writes a packet into the Tx FIFO associated +* with the EP +* @param pdev : Selected device +* @param src : source pointer +* @param ch_ep_num : end point number +* @param bytes : No. of bytes +* @retval USB_OTG_STS : status +*/ +USB_OTG_STS USB_OTG_WritePacket(USB_OTG_CORE_HANDLE *pdev, + uint8_t *src, + uint8_t ch_ep_num, + uint16_t len) +{ + USB_OTG_STS status = USB_OTG_OK; + if (pdev->cfg.dma_enable == 0) + { + uint32_t count32b= 0 , i= 0; + __IO uint32_t *fifo; + + count32b = (len + 3) / 4; + fifo = pdev->regs.DFIFO[ch_ep_num]; + for (i = 0; i < count32b; i++, src+=4) + { + USB_OTG_WRITE_REG32( fifo, *((__packed uint32_t *)src) ); + } + } + return status; +} + + +/** +* @brief USB_OTG_ReadPacket : Reads a packet from the Rx FIFO +* @param pdev : Selected device +* @param dest : Destination Pointer +* @param bytes : No. of bytes +* @retval None +*/ +void *USB_OTG_ReadPacket(USB_OTG_CORE_HANDLE *pdev, + uint8_t *dest, + uint16_t len) +{ + uint32_t i=0; + uint32_t count32b = (len + 3) / 4; + + __IO uint32_t *fifo = pdev->regs.DFIFO[0]; + + for ( i = 0; i < count32b; i++, dest += 4 ) + { + *(__packed uint32_t *)dest = USB_OTG_READ_REG32(fifo); + + } + return ((void *)dest); +} + +/** +* @brief USB_OTG_SelectCore +* Initialize core registers address. +* @param pdev : Selected device +* @param coreID : USB OTG Core ID +* @retval USB_OTG_STS : status +*/ +USB_OTG_STS USB_OTG_SelectCore(USB_OTG_CORE_HANDLE *pdev, + USB_OTG_CORE_ID_TypeDef coreID) +{ + uint32_t i , baseAddress = 0; + USB_OTG_STS status = USB_OTG_OK; + + pdev->cfg.dma_enable = 0; + + /* at startup the core is in FS mode */ + pdev->cfg.speed = USB_OTG_SPEED_FULL; + pdev->cfg.mps = USB_OTG_FS_MAX_PACKET_SIZE ; + + /* initialize device cfg following its address */ + if (coreID == USB_OTG_FS_CORE_ID) + { + baseAddress = USB_OTG_FS_BASE_ADDR; + pdev->cfg.coreID = USB_OTG_FS_CORE_ID; + pdev->cfg.host_channels = 8 ; + pdev->cfg.dev_endpoints = 4 ; + pdev->cfg.TotalFifoSize = 320; /* in 32-bits */ + pdev->cfg.phy_itface = USB_OTG_EMBEDDED_PHY; + +#ifdef USB_OTG_FS_SOF_OUTPUT_ENABLED + pdev->cfg.Sof_output = 1; +#endif + +#ifdef USB_OTG_FS_LOW_PWR_MGMT_SUPPORT + pdev->cfg.low_power = 1; +#endif + } + else if (coreID == USB_OTG_HS_CORE_ID) + { + baseAddress = USB_OTG_HS_BASE_ADDR; + pdev->cfg.coreID = USB_OTG_HS_CORE_ID; + pdev->cfg.host_channels = 12 ; + pdev->cfg.dev_endpoints = 6 ; + pdev->cfg.TotalFifoSize = 1280;/* in 32-bits */ + +#ifdef USB_OTG_ULPI_PHY_ENABLED + pdev->cfg.phy_itface = USB_OTG_ULPI_PHY; +#else + #ifdef USB_OTG_EMBEDDED_PHY_ENABLED + pdev->cfg.phy_itface = USB_OTG_EMBEDDED_PHY; + #else + #ifdef USB_OTG_I2C_PHY_ENABLED + pdev->cfg.phy_itface = USB_OTG_I2C_PHY; + #endif + #endif +#endif + +#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED + pdev->cfg.dma_enable = 1; +#endif + +#ifdef USB_OTG_HS_SOF_OUTPUT_ENABLED + pdev->cfg.Sof_output = 1; +#endif + +#ifdef USB_OTG_HS_LOW_PWR_MGMT_SUPPORT + pdev->cfg.low_power = 1; +#endif + + } + + pdev->regs.GREGS = (USB_OTG_GREGS *)(baseAddress + \ + USB_OTG_CORE_GLOBAL_REGS_OFFSET); + pdev->regs.DREGS = (USB_OTG_DREGS *) (baseAddress + \ + USB_OTG_DEV_GLOBAL_REG_OFFSET); + + for (i = 0; i < pdev->cfg.dev_endpoints; i++) + { + pdev->regs.INEP_REGS[i] = (USB_OTG_INEPREGS *) \ + (baseAddress + USB_OTG_DEV_IN_EP_REG_OFFSET + \ + (i * USB_OTG_EP_REG_OFFSET)); + pdev->regs.OUTEP_REGS[i] = (USB_OTG_OUTEPREGS *) \ + (baseAddress + USB_OTG_DEV_OUT_EP_REG_OFFSET + \ + (i * USB_OTG_EP_REG_OFFSET)); + } + pdev->regs.HREGS = (USB_OTG_HREGS *)(baseAddress + \ + USB_OTG_HOST_GLOBAL_REG_OFFSET); + pdev->regs.HPRT0 = (uint32_t *)(baseAddress + USB_OTG_HOST_PORT_REGS_OFFSET); + + for (i = 0; i < pdev->cfg.host_channels; i++) + { + pdev->regs.HC_REGS[i] = (USB_OTG_HC_REGS *)(baseAddress + \ + USB_OTG_HOST_CHAN_REGS_OFFSET + \ + (i * USB_OTG_CHAN_REGS_OFFSET)); + } + for (i = 0; i < pdev->cfg.host_channels; i++) + { + pdev->regs.DFIFO[i] = (uint32_t *)(baseAddress + USB_OTG_DATA_FIFO_OFFSET +\ + (i * USB_OTG_DATA_FIFO_SIZE)); + } + pdev->regs.PCGCCTL = (uint32_t *)(baseAddress + USB_OTG_PCGCCTL_OFFSET); + + return status; +} + + +/** +* @brief USB_OTG_CoreInit +* Initializes the USB_OTG controller registers and prepares the core +* device mode or host mode operation. +* @param pdev : Selected device +* @retval USB_OTG_STS : status +*/ +USB_OTG_STS USB_OTG_CoreInit(USB_OTG_CORE_HANDLE *pdev) +{ + USB_OTG_STS status = USB_OTG_OK; + USB_OTG_GUSBCFG_TypeDef usbcfg; + USB_OTG_GCCFG_TypeDef gccfg; + USB_OTG_GI2CCTL_TypeDef i2cctl; + USB_OTG_GAHBCFG_TypeDef ahbcfg; + + usbcfg.d32 = 0; + gccfg.d32 = 0; + ahbcfg.d32 = 0; + + + + if (pdev->cfg.phy_itface == USB_OTG_ULPI_PHY) + { + gccfg.d32 = USB_OTG_READ_REG32(&pdev->regs.GREGS->GCCFG); + gccfg.b.pwdn = 0; + + if (pdev->cfg.Sof_output) + { + gccfg.b.sofouten = 1; + } + USB_OTG_WRITE_REG32 (&pdev->regs.GREGS->GCCFG, gccfg.d32); + + /* Init The ULPI Interface */ + usbcfg.d32 = 0; + usbcfg.d32 = USB_OTG_READ_REG32(&pdev->regs.GREGS->GUSBCFG); + + usbcfg.b.physel = 0; /* HS Interface */ +#ifdef USB_OTG_INTERNAL_VBUS_ENABLED + usbcfg.b.ulpi_ext_vbus_drv = 0; /* Use internal VBUS */ +#else + #ifdef USB_OTG_EXTERNAL_VBUS_ENABLED + usbcfg.b.ulpi_ext_vbus_drv = 1; /* Use external VBUS */ + #endif +#endif + usbcfg.b.term_sel_dl_pulse = 0; /* Data line pulsing using utmi_txvalid */ + usbcfg.b.ulpi_utmi_sel = 1; /* ULPI seleInterfacect */ + + usbcfg.b.phyif = 0; /* 8 bits */ + usbcfg.b.ddrsel = 0; /* single data rate */ + + usbcfg.b.ulpi_fsls = 0; + usbcfg.b.ulpi_clk_sus_m = 0; + USB_OTG_WRITE_REG32 (&pdev->regs.GREGS->GUSBCFG, usbcfg.d32); + + /* Reset after a PHY select */ + USB_OTG_CoreReset(pdev); + + if(pdev->cfg.dma_enable == 1) + { + + ahbcfg.b.hburstlen = 5; /* 64 x 32-bits*/ + ahbcfg.b.dmaenable = 1; + USB_OTG_WRITE_REG32(&pdev->regs.GREGS->GAHBCFG, ahbcfg.d32); + + } + } + else /* FS interface (embedded Phy or I2C Phy) */ + { + + usbcfg.d32 = USB_OTG_READ_REG32(&pdev->regs.GREGS->GUSBCFG);; + usbcfg.b.physel = 1; /* FS Interface */ + USB_OTG_WRITE_REG32 (&pdev->regs.GREGS->GUSBCFG, usbcfg.d32); + /* Reset after a PHY select and set Host mode */ + USB_OTG_CoreReset(pdev); + /* Enable the I2C interface and deactivate the power down*/ + gccfg.d32 = 0; + gccfg.b.pwdn = 1; + + if(pdev->cfg.phy_itface == USB_OTG_I2C_PHY) + { + gccfg.b.i2cifen = 1; + } + gccfg.b.vbussensingA = 1 ; + gccfg.b.vbussensingB = 1 ; +#ifndef VBUS_SENSING_ENABLED + gccfg.b.disablevbussensing = 1; +#endif + + if(pdev->cfg.Sof_output) + { + gccfg.b.sofouten = 1; + } + + USB_OTG_WRITE_REG32 (&pdev->regs.GREGS->GCCFG, gccfg.d32); + USB_OTG_BSP_mDelay(20); + /* Program GUSBCFG.OtgUtmifsSel to I2C*/ + usbcfg.d32 = USB_OTG_READ_REG32(&pdev->regs.GREGS->GUSBCFG); + + if(pdev->cfg.phy_itface == USB_OTG_I2C_PHY) + { + usbcfg.b.otgutmifssel = 1; + } + + USB_OTG_WRITE_REG32 (&pdev->regs.GREGS->GUSBCFG, usbcfg.d32); + + if(pdev->cfg.phy_itface == USB_OTG_I2C_PHY) + { + /*Program GI2CCTL.I2CEn*/ + i2cctl.d32 = USB_OTG_READ_REG32(&pdev->regs.GREGS->GI2CCTL); + i2cctl.b.i2cdevaddr = 1; + i2cctl.b.i2cen = 0; + i2cctl.b.dat_se0 = 1; + i2cctl.b.addr = 0x2D; + USB_OTG_WRITE_REG32 (&pdev->regs.GREGS->GI2CCTL, i2cctl.d32); + + USB_OTG_BSP_mDelay(200); + + i2cctl.b.i2cen = 1; + USB_OTG_WRITE_REG32 (&pdev->regs.GREGS->GI2CCTL, i2cctl.d32); + USB_OTG_BSP_mDelay(200); + } + } + /* case the HS core is working in FS mode */ + if(pdev->cfg.dma_enable == 1) + { + + ahbcfg.d32 = USB_OTG_READ_REG32(&pdev->regs.GREGS->GAHBCFG); + ahbcfg.b.hburstlen = 5; /* 64 x 32-bits*/ + ahbcfg.b.dmaenable = 1; + USB_OTG_WRITE_REG32(&pdev->regs.GREGS->GAHBCFG, ahbcfg.d32); + + } + /* initialize OTG features */ +#ifdef USE_OTG_MODE + usbcfg.d32 = USB_OTG_READ_REG32(&pdev->regs.GREGS->GUSBCFG); + usbcfg.b.hnpcap = 1; + usbcfg.b.srpcap = 1; + USB_OTG_WRITE_REG32(&pdev->regs.GREGS->GUSBCFG, usbcfg.d32); + USB_OTG_EnableCommonInt(pdev); +#endif + return status; +} +/** +* @brief USB_OTG_EnableGlobalInt +* Enables the controller's Global Int in the AHB Config reg +* @param pdev : Selected device +* @retval USB_OTG_STS : status +*/ +USB_OTG_STS USB_OTG_EnableGlobalInt(USB_OTG_CORE_HANDLE *pdev) +{ + USB_OTG_STS status = USB_OTG_OK; + USB_OTG_GAHBCFG_TypeDef ahbcfg; + + ahbcfg.d32 = 0; + ahbcfg.b.glblintrmsk = 1; /* Enable interrupts */ + USB_OTG_MODIFY_REG32(&pdev->regs.GREGS->GAHBCFG, 0, ahbcfg.d32); + return status; +} + + +/** +* @brief USB_OTG_DisableGlobalInt +* Enables the controller's Global Int in the AHB Config reg +* @param pdev : Selected device +* @retval USB_OTG_STS : status +*/ +USB_OTG_STS USB_OTG_DisableGlobalInt(USB_OTG_CORE_HANDLE *pdev) +{ + USB_OTG_STS status = USB_OTG_OK; + USB_OTG_GAHBCFG_TypeDef ahbcfg; + ahbcfg.d32 = 0; + ahbcfg.b.glblintrmsk = 1; /* Enable interrupts */ + USB_OTG_MODIFY_REG32(&pdev->regs.GREGS->GAHBCFG, ahbcfg.d32, 0); + return status; +} + + +/** +* @brief USB_OTG_FlushTxFifo : Flush a Tx FIFO +* @param pdev : Selected device +* @param num : FO num +* @retval USB_OTG_STS : status +*/ +USB_OTG_STS USB_OTG_FlushTxFifo (USB_OTG_CORE_HANDLE *pdev , uint32_t num ) +{ + USB_OTG_STS status = USB_OTG_OK; + __IO USB_OTG_GRSTCTL_TypeDef greset; + + uint32_t count = 0; + greset.d32 = 0; + greset.b.txfflsh = 1; + greset.b.txfnum = num; + USB_OTG_WRITE_REG32( &pdev->regs.GREGS->GRSTCTL, greset.d32 ); + do + { + greset.d32 = USB_OTG_READ_REG32( &pdev->regs.GREGS->GRSTCTL); + if (++count > 200000) + { + break; + } + } + while (greset.b.txfflsh == 1); + /* Wait for 3 PHY Clocks*/ + USB_OTG_BSP_uDelay(3); + return status; +} + + +/** +* @brief USB_OTG_FlushRxFifo : Flush a Rx FIFO +* @param pdev : Selected device +* @retval USB_OTG_STS : status +*/ +USB_OTG_STS USB_OTG_FlushRxFifo( USB_OTG_CORE_HANDLE *pdev ) +{ + USB_OTG_STS status = USB_OTG_OK; + __IO USB_OTG_GRSTCTL_TypeDef greset; + uint32_t count = 0; + + greset.d32 = 0; + greset.b.rxfflsh = 1; + USB_OTG_WRITE_REG32( &pdev->regs.GREGS->GRSTCTL, greset.d32 ); + do + { + greset.d32 = USB_OTG_READ_REG32( &pdev->regs.GREGS->GRSTCTL); + if (++count > 200000) + { + break; + } + } + while (greset.b.rxfflsh == 1); + /* Wait for 3 PHY Clocks*/ + USB_OTG_BSP_uDelay(3); + return status; +} + + +/** +* @brief USB_OTG_SetCurrentMode : Set ID line +* @param pdev : Selected device +* @param mode : (Host/device) +* @retval USB_OTG_STS : status +*/ +USB_OTG_STS USB_OTG_SetCurrentMode(USB_OTG_CORE_HANDLE *pdev , uint8_t mode) +{ + USB_OTG_STS status = USB_OTG_OK; + USB_OTG_GUSBCFG_TypeDef usbcfg; + + usbcfg.d32 = USB_OTG_READ_REG32(&pdev->regs.GREGS->GUSBCFG); + + usbcfg.b.force_host = 0; + usbcfg.b.force_dev = 0; + + if ( mode == HOST_MODE) + { + usbcfg.b.force_host = 1; + } + else if ( mode == DEVICE_MODE) + { + usbcfg.b.force_dev = 1; + } + + USB_OTG_WRITE_REG32(&pdev->regs.GREGS->GUSBCFG, usbcfg.d32); + USB_OTG_BSP_mDelay(50); + return status; +} + + +/** +* @brief USB_OTG_GetMode : Get current mode +* @param pdev : Selected device +* @retval current mode +*/ +uint32_t USB_OTG_GetMode(USB_OTG_CORE_HANDLE *pdev) +{ + return (USB_OTG_READ_REG32(&pdev->regs.GREGS->GINTSTS ) & 0x1); +} + + +/** +* @brief USB_OTG_IsDeviceMode : Check if it is device mode +* @param pdev : Selected device +* @retval num_in_ep +*/ +uint8_t USB_OTG_IsDeviceMode(USB_OTG_CORE_HANDLE *pdev) +{ + return (USB_OTG_GetMode(pdev) != HOST_MODE); +} + + +/** +* @brief USB_OTG_IsHostMode : Check if it is host mode +* @param pdev : Selected device +* @retval num_in_ep +*/ +uint8_t USB_OTG_IsHostMode(USB_OTG_CORE_HANDLE *pdev) +{ + return (USB_OTG_GetMode(pdev) == HOST_MODE); +} + + +/** +* @brief USB_OTG_ReadCoreItr : returns the Core Interrupt register +* @param pdev : Selected device +* @retval Status +*/ +uint32_t USB_OTG_ReadCoreItr(USB_OTG_CORE_HANDLE *pdev) +{ + uint32_t v = 0; + v = USB_OTG_READ_REG32(&pdev->regs.GREGS->GINTSTS); + v &= USB_OTG_READ_REG32(&pdev->regs.GREGS->GINTMSK); + return v; +} + + +/** +* @brief USB_OTG_ReadOtgItr : returns the USB_OTG Interrupt register +* @param pdev : Selected device +* @retval Status +*/ +uint32_t USB_OTG_ReadOtgItr (USB_OTG_CORE_HANDLE *pdev) +{ + return (USB_OTG_READ_REG32 (&pdev->regs.GREGS->GOTGINT)); +} + +#ifdef USE_HOST_MODE +/** +* @brief USB_OTG_CoreInitHost : Initializes USB_OTG controller for host mode +* @param pdev : Selected device +* @retval status +*/ +USB_OTG_STS USB_OTG_CoreInitHost(USB_OTG_CORE_HANDLE *pdev) +{ + USB_OTG_STS status = USB_OTG_OK; + USB_OTG_FSIZ_TypeDef nptxfifosize; + USB_OTG_FSIZ_TypeDef ptxfifosize; + USB_OTG_HCFG_TypeDef hcfg; + +#ifdef USE_OTG_MODE + USB_OTG_OTGCTL_TypeDef gotgctl; +#endif + + uint32_t i = 0; + + nptxfifosize.d32 = 0; + ptxfifosize.d32 = 0; +#ifdef USE_OTG_MODE + gotgctl.d32 = 0; +#endif + hcfg.d32 = 0; + + + /* configure charge pump IO */ + USB_OTG_BSP_ConfigVBUS(pdev); + + /* Restart the Phy Clock */ + USB_OTG_WRITE_REG32(pdev->regs.PCGCCTL, 0); + + /* Initialize Host Configuration Register */ + USB_OTG_InitFSLSPClkSel(pdev , HCFG_48_MHZ); /* in init phase */ + + hcfg.d32 = USB_OTG_READ_REG32(&pdev->regs.HREGS->HCFG); + hcfg.b.fslssupp = 0; + USB_OTG_WRITE_REG32(&pdev->regs.HREGS->HCFG, hcfg.d32); + + /* Configure data FIFO sizes */ + /* Rx FIFO */ +#ifdef USB_OTG_FS_CORE + if(pdev->cfg.coreID == USB_OTG_FS_CORE_ID) + { + /* set Rx FIFO size */ + USB_OTG_WRITE_REG32(&pdev->regs.GREGS->GRXFSIZ, RX_FIFO_FS_SIZE); + nptxfifosize.b.startaddr = RX_FIFO_FS_SIZE; + nptxfifosize.b.depth = TXH_NP_FS_FIFOSIZ; + USB_OTG_WRITE_REG32(&pdev->regs.GREGS->DIEPTXF0_HNPTXFSIZ, nptxfifosize.d32); + + ptxfifosize.b.startaddr = RX_FIFO_FS_SIZE + TXH_NP_FS_FIFOSIZ; + ptxfifosize.b.depth = TXH_P_FS_FIFOSIZ; + USB_OTG_WRITE_REG32(&pdev->regs.GREGS->HPTXFSIZ, ptxfifosize.d32); + } +#endif +#ifdef USB_OTG_HS_CORE + if (pdev->cfg.coreID == USB_OTG_HS_CORE_ID) + { + /* set Rx FIFO size */ + USB_OTG_WRITE_REG32(&pdev->regs.GREGS->GRXFSIZ, RX_FIFO_HS_SIZE); + nptxfifosize.b.startaddr = RX_FIFO_HS_SIZE; + nptxfifosize.b.depth = TXH_NP_HS_FIFOSIZ; + USB_OTG_WRITE_REG32(&pdev->regs.GREGS->DIEPTXF0_HNPTXFSIZ, nptxfifosize.d32); + + ptxfifosize.b.startaddr = RX_FIFO_HS_SIZE + TXH_NP_HS_FIFOSIZ; + ptxfifosize.b.depth = TXH_P_HS_FIFOSIZ; + USB_OTG_WRITE_REG32(&pdev->regs.GREGS->HPTXFSIZ, ptxfifosize.d32); + } +#endif + +#ifdef USE_OTG_MODE + /* Clear Host Set HNP Enable in the USB_OTG Control Register */ + gotgctl.b.hstsethnpen = 1; + USB_OTG_MODIFY_REG32( &pdev->regs.GREGS->GOTGCTL, gotgctl.d32, 0); +#endif + + /* Make sure the FIFOs are flushed. */ + USB_OTG_FlushTxFifo(pdev, 0x10 ); /* all Tx FIFOs */ + USB_OTG_FlushRxFifo(pdev); + + + /* Clear all pending HC Interrupts */ + for (i = 0; i < pdev->cfg.host_channels; i++) + { + USB_OTG_WRITE_REG32( &pdev->regs.HC_REGS[i]->HCINT, 0xFFFFFFFF ); + USB_OTG_WRITE_REG32( &pdev->regs.HC_REGS[i]->HCGINTMSK, 0 ); + } +#ifndef USE_OTG_MODE + USB_OTG_DriveVbus(pdev, 1); +#endif + + USB_OTG_EnableHostInt(pdev); + return status; +} + +/** +* @brief USB_OTG_IsEvenFrame +* This function returns the frame number for sof packet +* @param pdev : Selected device +* @retval Frame number +*/ +uint8_t USB_OTG_IsEvenFrame (USB_OTG_CORE_HANDLE *pdev) +{ + return !(USB_OTG_READ_REG32(&pdev->regs.HREGS->HFNUM) & 0x1); +} + +/** +* @brief USB_OTG_DriveVbus : set/reset vbus +* @param pdev : Selected device +* @param state : VBUS state +* @retval None +*/ +void USB_OTG_DriveVbus (USB_OTG_CORE_HANDLE *pdev, uint8_t state) +{ + USB_OTG_HPRT0_TypeDef hprt0; + + hprt0.d32 = 0; + + /* enable disable the external charge pump */ + USB_OTG_BSP_DriveVBUS(pdev, state); + + /* Turn on the Host port power. */ + hprt0.d32 = USB_OTG_ReadHPRT0(pdev); + if ((hprt0.b.prtpwr == 0 ) && (state == 1 )) + { + hprt0.b.prtpwr = 1; + USB_OTG_WRITE_REG32(pdev->regs.HPRT0, hprt0.d32); + } + if ((hprt0.b.prtpwr == 1 ) && (state == 0 )) + { + hprt0.b.prtpwr = 0; + USB_OTG_WRITE_REG32(pdev->regs.HPRT0, hprt0.d32); + } + + USB_OTG_BSP_mDelay(200); +} +/** +* @brief USB_OTG_EnableHostInt: Enables the Host mode interrupts +* @param pdev : Selected device +* @retval USB_OTG_STS : status +*/ +USB_OTG_STS USB_OTG_EnableHostInt(USB_OTG_CORE_HANDLE *pdev) +{ + USB_OTG_STS status = USB_OTG_OK; + USB_OTG_GINTMSK_TypeDef intmsk; + intmsk.d32 = 0; + /* Disable all interrupts. */ + USB_OTG_WRITE_REG32(&pdev->regs.GREGS->GINTMSK, 0); + + /* Clear any pending interrupts. */ + USB_OTG_WRITE_REG32(&pdev->regs.GREGS->GINTSTS, 0xFFFFFFFF); + + /* Enable the common interrupts */ + USB_OTG_EnableCommonInt(pdev); + + if (pdev->cfg.dma_enable == 0) + { + intmsk.b.rxstsqlvl = 1; + } + intmsk.b.portintr = 1; + intmsk.b.hcintr = 1; + intmsk.b.disconnect = 1; + intmsk.b.sofintr = 1; + intmsk.b.incomplisoout = 1; + USB_OTG_MODIFY_REG32(&pdev->regs.GREGS->GINTMSK, intmsk.d32, intmsk.d32); + return status; +} + +/** +* @brief USB_OTG_InitFSLSPClkSel : Initializes the FSLSPClkSel field of the +* HCFG register on the PHY type +* @param pdev : Selected device +* @param freq : clock frequency +* @retval None +*/ +void USB_OTG_InitFSLSPClkSel(USB_OTG_CORE_HANDLE *pdev , uint8_t freq) +{ + USB_OTG_HCFG_TypeDef hcfg; + + hcfg.d32 = USB_OTG_READ_REG32(&pdev->regs.HREGS->HCFG); + hcfg.b.fslspclksel = freq; + USB_OTG_WRITE_REG32(&pdev->regs.HREGS->HCFG, hcfg.d32); +} + + +/** +* @brief USB_OTG_ReadHPRT0 : Reads HPRT0 to modify later +* @param pdev : Selected device +* @retval HPRT0 value +*/ +uint32_t USB_OTG_ReadHPRT0(USB_OTG_CORE_HANDLE *pdev) +{ + USB_OTG_HPRT0_TypeDef hprt0; + + hprt0.d32 = USB_OTG_READ_REG32(pdev->regs.HPRT0); + hprt0.b.prtena = 0; + hprt0.b.prtconndet = 0; + hprt0.b.prtenchng = 0; + hprt0.b.prtovrcurrchng = 0; + return hprt0.d32; +} + + +/** +* @brief USB_OTG_ReadHostAllChannels_intr : Register PCD Callbacks +* @param pdev : Selected device +* @retval Status +*/ +uint32_t USB_OTG_ReadHostAllChannels_intr (USB_OTG_CORE_HANDLE *pdev) +{ + return (USB_OTG_READ_REG32 (&pdev->regs.HREGS->HAINT)); +} + + +/** +* @brief USB_OTG_ResetPort : Reset Host Port +* @param pdev : Selected device +* @retval status +* @note : (1)The application must wait at least 10 ms (+ 10 ms security) +* before clearing the reset bit. +*/ +uint32_t USB_OTG_ResetPort(USB_OTG_CORE_HANDLE *pdev) +{ + USB_OTG_HPRT0_TypeDef hprt0; + + hprt0.d32 = USB_OTG_ReadHPRT0(pdev); + hprt0.b.prtrst = 1; + USB_OTG_WRITE_REG32(pdev->regs.HPRT0, hprt0.d32); + USB_OTG_BSP_mDelay (10); /* See Note #1 */ + hprt0.b.prtrst = 0; + USB_OTG_WRITE_REG32(pdev->regs.HPRT0, hprt0.d32); + USB_OTG_BSP_mDelay (20); + return 1; +} + + +/** +* @brief USB_OTG_HC_Init : Prepares a host channel for transferring packets +* @param pdev : Selected device +* @param hc_num : channel number +* @retval USB_OTG_STS : status +*/ +USB_OTG_STS USB_OTG_HC_Init(USB_OTG_CORE_HANDLE *pdev , uint8_t hc_num) +{ + USB_OTG_STS status = USB_OTG_OK; + uint32_t intr_enable = 0; + USB_OTG_HCGINTMSK_TypeDef hcintmsk; + USB_OTG_GINTMSK_TypeDef gintmsk; + USB_OTG_HCCHAR_TypeDef hcchar; + USB_OTG_HCINTn_TypeDef hcint; + + + gintmsk.d32 = 0; + hcintmsk.d32 = 0; + hcchar.d32 = 0; + + /* Clear old interrupt conditions for this host channel. */ + hcint.d32 = 0xFFFFFFFF; + USB_OTG_WRITE_REG32(&pdev->regs.HC_REGS[hc_num]->HCINT, hcint.d32); + + /* Enable channel interrupts required for this transfer. */ + hcintmsk.d32 = 0; + + if (pdev->cfg.dma_enable == 1) + { + hcintmsk.b.ahberr = 1; + } + + switch (pdev->host.hc[hc_num].ep_type) + { + case EP_TYPE_CTRL: + case EP_TYPE_BULK: + hcintmsk.b.xfercompl = 1; + hcintmsk.b.stall = 1; + hcintmsk.b.xacterr = 1; + hcintmsk.b.datatglerr = 1; + hcintmsk.b.nak = 1; + if (pdev->host.hc[hc_num].ep_is_in) + { + hcintmsk.b.bblerr = 1; + } + else + { + hcintmsk.b.nyet = 1; + if (pdev->host.hc[hc_num].do_ping) + { + hcintmsk.b.ack = 1; + } + } + break; + case EP_TYPE_INTR: + hcintmsk.b.xfercompl = 1; + hcintmsk.b.nak = 1; + hcintmsk.b.stall = 1; + hcintmsk.b.xacterr = 1; + hcintmsk.b.datatglerr = 1; + hcintmsk.b.frmovrun = 1; + + if (pdev->host.hc[hc_num].ep_is_in) + { + hcintmsk.b.bblerr = 1; + } + + break; + case EP_TYPE_ISOC: + hcintmsk.b.xfercompl = 1; + hcintmsk.b.frmovrun = 1; + hcintmsk.b.ack = 1; + + if (pdev->host.hc[hc_num].ep_is_in) + { + hcintmsk.b.xacterr = 1; + hcintmsk.b.bblerr = 1; + } + break; + } + + + USB_OTG_WRITE_REG32(&pdev->regs.HC_REGS[hc_num]->HCGINTMSK, hcintmsk.d32); + + + /* Enable the top level host channel interrupt. */ + intr_enable = (1 << hc_num); + USB_OTG_MODIFY_REG32(&pdev->regs.HREGS->HAINTMSK, 0, intr_enable); + + /* Make sure host channel interrupts are enabled. */ + gintmsk.b.hcintr = 1; + USB_OTG_MODIFY_REG32(&pdev->regs.GREGS->GINTMSK, 0, gintmsk.d32); + + /* Program the HCCHAR register */ + hcchar.d32 = 0; + hcchar.b.devaddr = pdev->host.hc[hc_num].dev_addr; + hcchar.b.epnum = pdev->host.hc[hc_num].ep_num; + hcchar.b.epdir = pdev->host.hc[hc_num].ep_is_in; + hcchar.b.lspddev = (pdev->host.hc[hc_num].speed == HPRT0_PRTSPD_LOW_SPEED); + hcchar.b.eptype = pdev->host.hc[hc_num].ep_type; + hcchar.b.mps = pdev->host.hc[hc_num].max_packet; + if (pdev->host.hc[hc_num].ep_type == HCCHAR_INTR) + { + hcchar.b.oddfrm = 1; + } + USB_OTG_WRITE_REG32(&pdev->regs.HC_REGS[hc_num]->HCCHAR, hcchar.d32); + return status; +} + + +/** +* @brief USB_OTG_HC_StartXfer : Start transfer +* @param pdev : Selected device +* @param hc_num : channel number +* @retval USB_OTG_STS : status +*/ +USB_OTG_STS USB_OTG_HC_StartXfer(USB_OTG_CORE_HANDLE *pdev , uint8_t hc_num) +{ + USB_OTG_STS status = USB_OTG_OK; + USB_OTG_HCCHAR_TypeDef hcchar; + USB_OTG_HCTSIZn_TypeDef hctsiz; + USB_OTG_HNPTXSTS_TypeDef hnptxsts; + USB_OTG_HPTXSTS_TypeDef hptxsts; + USB_OTG_GINTMSK_TypeDef intmsk; + uint16_t len_words = 0; + + uint16_t num_packets; + uint16_t max_hc_pkt_count; + + max_hc_pkt_count = 256; + hctsiz.d32 = 0; + hcchar.d32 = 0; + intmsk.d32 = 0; + + /* Compute the expected number of packets associated to the transfer */ + if (pdev->host.hc[hc_num].xfer_len > 0) + { + num_packets = (pdev->host.hc[hc_num].xfer_len + \ + pdev->host.hc[hc_num].max_packet - 1) / pdev->host.hc[hc_num].max_packet; + + if (num_packets > max_hc_pkt_count) + { + num_packets = max_hc_pkt_count; + pdev->host.hc[hc_num].xfer_len = num_packets * \ + pdev->host.hc[hc_num].max_packet; + } + } + else + { + num_packets = 1; + } + if (pdev->host.hc[hc_num].ep_is_in) + { + pdev->host.hc[hc_num].xfer_len = num_packets * \ + pdev->host.hc[hc_num].max_packet; + } + /* Initialize the HCTSIZn register */ + hctsiz.b.xfersize = pdev->host.hc[hc_num].xfer_len; + hctsiz.b.pktcnt = num_packets; + hctsiz.b.pid = pdev->host.hc[hc_num].data_pid; + USB_OTG_WRITE_REG32(&pdev->regs.HC_REGS[hc_num]->HCTSIZ, hctsiz.d32); + + if (pdev->cfg.dma_enable == 1) + { + USB_OTG_WRITE_REG32(&pdev->regs.HC_REGS[hc_num]->HCDMA, (unsigned int)pdev->host.hc[hc_num].xfer_buff); + } + + + hcchar.d32 = USB_OTG_READ_REG32(&pdev->regs.HC_REGS[hc_num]->HCCHAR); + hcchar.b.oddfrm = USB_OTG_IsEvenFrame(pdev); + + /* Set host channel enable */ + hcchar.b.chen = 1; + hcchar.b.chdis = 0; + USB_OTG_WRITE_REG32(&pdev->regs.HC_REGS[hc_num]->HCCHAR, hcchar.d32); + + if (pdev->cfg.dma_enable == 0) /* Slave mode */ + { + if((pdev->host.hc[hc_num].ep_is_in == 0) && + (pdev->host.hc[hc_num].xfer_len > 0)) + { + switch(pdev->host.hc[hc_num].ep_type) + { + /* Non periodic transfer */ + case EP_TYPE_CTRL: + case EP_TYPE_BULK: + + hnptxsts.d32 = USB_OTG_READ_REG32(&pdev->regs.GREGS->HNPTXSTS); + len_words = (pdev->host.hc[hc_num].xfer_len + 3) / 4; + + /* check if there is enough space in FIFO space */ + if(len_words > hnptxsts.b.nptxfspcavail) + { + /* need to process data in nptxfempty interrupt */ + intmsk.b.nptxfempty = 1; + USB_OTG_MODIFY_REG32( &pdev->regs.GREGS->GINTMSK, 0, intmsk.d32); + } + + break; + /* Periodic transfer */ + case EP_TYPE_INTR: + case EP_TYPE_ISOC: + hptxsts.d32 = USB_OTG_READ_REG32(&pdev->regs.HREGS->HPTXSTS); + len_words = (pdev->host.hc[hc_num].xfer_len + 3) / 4; + /* check if there is enough space in FIFO space */ + if(len_words > hptxsts.b.ptxfspcavail) /* split the transfer */ + { + /* need to process data in ptxfempty interrupt */ + intmsk.b.ptxfempty = 1; + USB_OTG_MODIFY_REG32( &pdev->regs.GREGS->GINTMSK, 0, intmsk.d32); + } + break; + + default: + break; + } + + /* Write packet into the Tx FIFO. */ + USB_OTG_WritePacket(pdev, + pdev->host.hc[hc_num].xfer_buff , + hc_num, pdev->host.hc[hc_num].xfer_len); + } + } + return status; +} + + +/** +* @brief USB_OTG_HC_Halt : Halt channel +* @param pdev : Selected device +* @param hc_num : channel number +* @retval USB_OTG_STS : status +*/ +USB_OTG_STS USB_OTG_HC_Halt(USB_OTG_CORE_HANDLE *pdev , uint8_t hc_num) +{ + USB_OTG_STS status = USB_OTG_OK; + USB_OTG_HNPTXSTS_TypeDef nptxsts; + USB_OTG_HPTXSTS_TypeDef hptxsts; + USB_OTG_HCCHAR_TypeDef hcchar; + + nptxsts.d32 = 0; + hptxsts.d32 = 0; + hcchar.d32 = USB_OTG_READ_REG32(&pdev->regs.HC_REGS[hc_num]->HCCHAR); + hcchar.b.chen = 1; + hcchar.b.chdis = 1; + + /* Check for space in the request queue to issue the halt. */ + if (hcchar.b.eptype == HCCHAR_CTRL || hcchar.b.eptype == HCCHAR_BULK) + { + nptxsts.d32 = USB_OTG_READ_REG32(&pdev->regs.GREGS->HNPTXSTS); + if (nptxsts.b.nptxqspcavail == 0) + { + hcchar.b.chen = 0; + } + } + else + { + hptxsts.d32 = USB_OTG_READ_REG32(&pdev->regs.HREGS->HPTXSTS); + if (hptxsts.b.ptxqspcavail == 0) + { + hcchar.b.chen = 0; + } + } + USB_OTG_WRITE_REG32(&pdev->regs.HC_REGS[hc_num]->HCCHAR, hcchar.d32); + return status; +} + +/** +* @brief Issue a ping token +* @param None +* @retval : None +*/ +USB_OTG_STS USB_OTG_HC_DoPing(USB_OTG_CORE_HANDLE *pdev , uint8_t hc_num) +{ + USB_OTG_STS status = USB_OTG_OK; + USB_OTG_HCCHAR_TypeDef hcchar; + USB_OTG_HCTSIZn_TypeDef hctsiz; + + hctsiz.d32 = 0; + hctsiz.b.dopng = 1; + hctsiz.b.pktcnt = 1; + USB_OTG_WRITE_REG32(&pdev->regs.HC_REGS[hc_num]->HCTSIZ, hctsiz.d32); + + hcchar.d32 = USB_OTG_READ_REG32(&pdev->regs.HC_REGS[hc_num]->HCCHAR); + hcchar.b.chen = 1; + hcchar.b.chdis = 0; + USB_OTG_WRITE_REG32(&pdev->regs.HC_REGS[hc_num]->HCCHAR, hcchar.d32); + return status; +} + +/** +* @brief Stop the device and clean up fifo's +* @param None +* @retval : None +*/ +void USB_OTG_StopHost(USB_OTG_CORE_HANDLE *pdev) +{ + USB_OTG_HCCHAR_TypeDef hcchar; + uint32_t i; + + USB_OTG_WRITE_REG32(&pdev->regs.HREGS->HAINTMSK , 0); + USB_OTG_WRITE_REG32(&pdev->regs.HREGS->HAINT, 0xFFFFFFFF); + /* Flush out any leftover queued requests. */ + + for (i = 0; i < pdev->cfg.host_channels; i++) + { + hcchar.d32 = USB_OTG_READ_REG32(&pdev->regs.HC_REGS[i]->HCCHAR); + hcchar.b.chen = 0; + hcchar.b.chdis = 1; + hcchar.b.epdir = 0; + USB_OTG_WRITE_REG32(&pdev->regs.HC_REGS[i]->HCCHAR, hcchar.d32); + } + + /* Flush the FIFO */ + USB_OTG_FlushRxFifo(pdev); + USB_OTG_FlushTxFifo(pdev , 0x10 ); +} +#endif +#ifdef USE_DEVICE_MODE +/* PCD Core Layer */ + +/** +* @brief USB_OTG_InitDevSpeed :Initializes the DevSpd field of DCFG register +* depending the PHY type and the enumeration speed of the device. +* @param pdev : Selected device +* @retval : None +*/ +void USB_OTG_InitDevSpeed(USB_OTG_CORE_HANDLE *pdev , uint8_t speed) +{ + USB_OTG_DCFG_TypeDef dcfg; + + dcfg.d32 = USB_OTG_READ_REG32(&pdev->regs.DREGS->DCFG); + dcfg.b.devspd = speed; + USB_OTG_WRITE_REG32(&pdev->regs.DREGS->DCFG, dcfg.d32); +} + + +/** +* @brief USB_OTG_CoreInitDev : Initializes the USB_OTG controller registers +* for device mode +* @param pdev : Selected device +* @retval USB_OTG_STS : status +*/ +USB_OTG_STS USB_OTG_CoreInitDev (USB_OTG_CORE_HANDLE *pdev) +{ + USB_OTG_STS status = USB_OTG_OK; + USB_OTG_DEPCTL_TypeDef depctl; + uint32_t i; + USB_OTG_DCFG_TypeDef dcfg; + USB_OTG_FSIZ_TypeDef nptxfifosize; + USB_OTG_FSIZ_TypeDef txfifosize; + USB_OTG_DIEPMSK_TypeDef msk; + USB_OTG_DTHRCTL_TypeDef dthrctl; + + depctl.d32 = 0; + dcfg.d32 = 0; + nptxfifosize.d32 = 0; + txfifosize.d32 = 0; + msk.d32 = 0; + + /* Restart the Phy Clock */ + USB_OTG_WRITE_REG32(pdev->regs.PCGCCTL, 0); + /* Device configuration register */ + dcfg.d32 = USB_OTG_READ_REG32( &pdev->regs.DREGS->DCFG); + dcfg.b.perfrint = DCFG_FRAME_INTERVAL_80; + USB_OTG_WRITE_REG32( &pdev->regs.DREGS->DCFG, dcfg.d32 ); + +#ifdef USB_OTG_FS_CORE + if(pdev->cfg.coreID == USB_OTG_FS_CORE_ID ) + { + + /* Set Full speed phy */ + USB_OTG_InitDevSpeed (pdev , USB_OTG_SPEED_PARAM_FULL); + + /* set Rx FIFO size */ + USB_OTG_WRITE_REG32(&pdev->regs.GREGS->GRXFSIZ, RX_FIFO_FS_SIZE); + + /* EP0 TX*/ + nptxfifosize.b.depth = TX0_FIFO_FS_SIZE; + nptxfifosize.b.startaddr = RX_FIFO_FS_SIZE; + USB_OTG_WRITE_REG32( &pdev->regs.GREGS->DIEPTXF0_HNPTXFSIZ, nptxfifosize.d32 ); + + + /* EP1 TX*/ + txfifosize.b.startaddr = nptxfifosize.b.startaddr + nptxfifosize.b.depth; + txfifosize.b.depth = TX1_FIFO_FS_SIZE; + USB_OTG_WRITE_REG32( &pdev->regs.GREGS->DIEPTXF[0], txfifosize.d32 ); + + + /* EP2 TX*/ + txfifosize.b.startaddr += txfifosize.b.depth; + txfifosize.b.depth = TX2_FIFO_FS_SIZE; + USB_OTG_WRITE_REG32( &pdev->regs.GREGS->DIEPTXF[1], txfifosize.d32 ); + + + /* EP3 TX*/ + txfifosize.b.startaddr += txfifosize.b.depth; + txfifosize.b.depth = TX3_FIFO_FS_SIZE; + USB_OTG_WRITE_REG32( &pdev->regs.GREGS->DIEPTXF[2], txfifosize.d32 ); + } +#endif +#ifdef USB_OTG_HS_CORE + if(pdev->cfg.coreID == USB_OTG_HS_CORE_ID ) + { + + /* Set High speed phy */ + + if(pdev->cfg.phy_itface == USB_OTG_ULPI_PHY) + { + USB_OTG_InitDevSpeed (pdev , USB_OTG_SPEED_PARAM_HIGH); + } + else /* set High speed phy in Full speed mode */ + { + USB_OTG_InitDevSpeed (pdev , USB_OTG_SPEED_PARAM_HIGH_IN_FULL); + } + + /* set Rx FIFO size */ + USB_OTG_WRITE_REG32(&pdev->regs.GREGS->GRXFSIZ, RX_FIFO_HS_SIZE); + + /* EP0 TX*/ + nptxfifosize.b.depth = TX0_FIFO_HS_SIZE; + nptxfifosize.b.startaddr = RX_FIFO_HS_SIZE; + USB_OTG_WRITE_REG32( &pdev->regs.GREGS->DIEPTXF0_HNPTXFSIZ, nptxfifosize.d32 ); + + + /* EP1 TX*/ + txfifosize.b.startaddr = nptxfifosize.b.startaddr + nptxfifosize.b.depth; + txfifosize.b.depth = TX1_FIFO_HS_SIZE; + USB_OTG_WRITE_REG32( &pdev->regs.GREGS->DIEPTXF[0], txfifosize.d32 ); + + + /* EP2 TX*/ + txfifosize.b.startaddr += txfifosize.b.depth; + txfifosize.b.depth = TX2_FIFO_HS_SIZE; + USB_OTG_WRITE_REG32( &pdev->regs.GREGS->DIEPTXF[1], txfifosize.d32 ); + + + /* EP3 TX*/ + txfifosize.b.startaddr += txfifosize.b.depth; + txfifosize.b.depth = TX3_FIFO_HS_SIZE; + USB_OTG_WRITE_REG32( &pdev->regs.GREGS->DIEPTXF[2], txfifosize.d32 ); + + /* EP4 TX*/ + txfifosize.b.startaddr += txfifosize.b.depth; + txfifosize.b.depth = TX4_FIFO_HS_SIZE; + USB_OTG_WRITE_REG32( &pdev->regs.GREGS->DIEPTXF[3], txfifosize.d32 ); + + + /* EP5 TX*/ + txfifosize.b.startaddr += txfifosize.b.depth; + txfifosize.b.depth = TX5_FIFO_HS_SIZE; + USB_OTG_WRITE_REG32( &pdev->regs.GREGS->DIEPTXF[4], txfifosize.d32 ); + } +#endif + /* Flush the FIFOs */ + USB_OTG_FlushTxFifo(pdev , 0x10); /* all Tx FIFOs */ + USB_OTG_FlushRxFifo(pdev); + /* Clear all pending Device Interrupts */ + USB_OTG_WRITE_REG32( &pdev->regs.DREGS->DIEPMSK, 0 ); + USB_OTG_WRITE_REG32( &pdev->regs.DREGS->DOEPMSK, 0 ); + USB_OTG_WRITE_REG32( &pdev->regs.DREGS->DAINT, 0xFFFFFFFF ); + USB_OTG_WRITE_REG32( &pdev->regs.DREGS->DAINTMSK, 0 ); + + for (i = 0; i < pdev->cfg.dev_endpoints; i++) + { + depctl.d32 = USB_OTG_READ_REG32(&pdev->regs.INEP_REGS[i]->DIEPCTL); + if (depctl.b.epena) + { + depctl.d32 = 0; + depctl.b.epdis = 1; + depctl.b.snak = 1; + } + else + { + depctl.d32 = 0; + } + USB_OTG_WRITE_REG32( &pdev->regs.INEP_REGS[i]->DIEPCTL, depctl.d32); + USB_OTG_WRITE_REG32( &pdev->regs.INEP_REGS[i]->DIEPTSIZ, 0); + USB_OTG_WRITE_REG32( &pdev->regs.INEP_REGS[i]->DIEPINT, 0xFF); + } + for (i = 0; i < pdev->cfg.dev_endpoints; i++) + { + USB_OTG_DEPCTL_TypeDef depctl; + depctl.d32 = USB_OTG_READ_REG32(&pdev->regs.OUTEP_REGS[i]->DOEPCTL); + if (depctl.b.epena) + { + depctl.d32 = 0; + depctl.b.epdis = 1; + depctl.b.snak = 1; + } + else + { + depctl.d32 = 0; + } + USB_OTG_WRITE_REG32( &pdev->regs.OUTEP_REGS[i]->DOEPCTL, depctl.d32); + USB_OTG_WRITE_REG32( &pdev->regs.OUTEP_REGS[i]->DOEPTSIZ, 0); + USB_OTG_WRITE_REG32( &pdev->regs.OUTEP_REGS[i]->DOEPINT, 0xFF); + } + msk.d32 = 0; + msk.b.txfifoundrn = 1; + USB_OTG_MODIFY_REG32(&pdev->regs.DREGS->DIEPMSK, msk.d32, msk.d32); + + if (pdev->cfg.dma_enable == 1) + { + dthrctl.d32 = 0; + dthrctl.b.non_iso_thr_en = 1; + dthrctl.b.iso_thr_en = 1; + dthrctl.b.tx_thr_len = 64; + dthrctl.b.rx_thr_en = 1; + dthrctl.b.rx_thr_len = 64; + USB_OTG_WRITE_REG32(&pdev->regs.DREGS->DTHRCTL, dthrctl.d32); + } + USB_OTG_EnableDevInt(pdev); + return status; +} + + +/** +* @brief USB_OTG_EnableDevInt : Enables the Device mode interrupts +* @param pdev : Selected device +* @retval USB_OTG_STS : status +*/ +USB_OTG_STS USB_OTG_EnableDevInt(USB_OTG_CORE_HANDLE *pdev) +{ + USB_OTG_STS status = USB_OTG_OK; + USB_OTG_GINTMSK_TypeDef intmsk; + + intmsk.d32 = 0; + + /* Disable all interrupts. */ + USB_OTG_WRITE_REG32( &pdev->regs.GREGS->GINTMSK, 0); + /* Clear any pending interrupts */ + USB_OTG_WRITE_REG32( &pdev->regs.GREGS->GINTSTS, 0xFFFFFFFF); + /* Enable the common interrupts */ + USB_OTG_EnableCommonInt(pdev); + + if (pdev->cfg.dma_enable == 0) + { + intmsk.b.rxstsqlvl = 1; + } + + /* Enable interrupts matching to the Device mode ONLY */ + intmsk.b.usbsuspend = 1; + intmsk.b.usbreset = 1; + intmsk.b.enumdone = 1; + intmsk.b.inepintr = 1; + intmsk.b.outepintr = 1; + intmsk.b.sofintr = 1; + + intmsk.b.incomplisoin = 1; + intmsk.b.incomplisoout = 1; +#ifdef VBUS_SENSING_ENABLED + intmsk.b.sessreqintr = 1; + intmsk.b.otgintr = 1; +#endif + USB_OTG_MODIFY_REG32( &pdev->regs.GREGS->GINTMSK, intmsk.d32, intmsk.d32); + return status; +} + + +/** +* @brief USB_OTG_GetDeviceSpeed +* Get the device speed from the device status register +* @param None +* @retval status +*/ +enum USB_OTG_SPEED USB_OTG_GetDeviceSpeed (USB_OTG_CORE_HANDLE *pdev) +{ + USB_OTG_DSTS_TypeDef dsts; + enum USB_OTG_SPEED speed = USB_SPEED_UNKNOWN; + + + dsts.d32 = USB_OTG_READ_REG32(&pdev->regs.DREGS->DSTS); + + switch (dsts.b.enumspd) + { + case DSTS_ENUMSPD_HS_PHY_30MHZ_OR_60MHZ: + speed = USB_SPEED_HIGH; + break; + case DSTS_ENUMSPD_FS_PHY_30MHZ_OR_60MHZ: + case DSTS_ENUMSPD_FS_PHY_48MHZ: + speed = USB_SPEED_FULL; + break; + + case DSTS_ENUMSPD_LS_PHY_6MHZ: + speed = USB_SPEED_LOW; + break; + } + + return speed; +} +/** +* @brief enables EP0 OUT to receive SETUP packets and configures EP0 +* for transmitting packets +* @param None +* @retval USB_OTG_STS : status +*/ +USB_OTG_STS USB_OTG_EP0Activate(USB_OTG_CORE_HANDLE *pdev) +{ + USB_OTG_STS status = USB_OTG_OK; + USB_OTG_DSTS_TypeDef dsts; + USB_OTG_DEPCTL_TypeDef diepctl; + USB_OTG_DCTL_TypeDef dctl; + + dctl.d32 = 0; + /* Read the Device Status and Endpoint 0 Control registers */ + dsts.d32 = USB_OTG_READ_REG32(&pdev->regs.DREGS->DSTS); + diepctl.d32 = USB_OTG_READ_REG32(&pdev->regs.INEP_REGS[0]->DIEPCTL); + /* Set the MPS of the IN EP based on the enumeration speed */ + switch (dsts.b.enumspd) + { + case DSTS_ENUMSPD_HS_PHY_30MHZ_OR_60MHZ: + case DSTS_ENUMSPD_FS_PHY_30MHZ_OR_60MHZ: + case DSTS_ENUMSPD_FS_PHY_48MHZ: + diepctl.b.mps = DEP0CTL_MPS_64; + break; + case DSTS_ENUMSPD_LS_PHY_6MHZ: + diepctl.b.mps = DEP0CTL_MPS_8; + break; + } + USB_OTG_WRITE_REG32(&pdev->regs.INEP_REGS[0]->DIEPCTL, diepctl.d32); + dctl.b.cgnpinnak = 1; + USB_OTG_MODIFY_REG32(&pdev->regs.DREGS->DCTL, dctl.d32, dctl.d32); + return status; +} + + +/** +* @brief USB_OTG_EPActivate : Activates an EP +* @param pdev : Selected device +* @retval USB_OTG_STS : status +*/ +USB_OTG_STS USB_OTG_EPActivate(USB_OTG_CORE_HANDLE *pdev , USB_OTG_EP *ep) +{ + USB_OTG_STS status = USB_OTG_OK; + USB_OTG_DEPCTL_TypeDef depctl; + USB_OTG_DAINT_TypeDef daintmsk; + __IO uint32_t *addr; + + + depctl.d32 = 0; + daintmsk.d32 = 0; + /* Read DEPCTLn register */ + if (ep->is_in == 1) + { + addr = &pdev->regs.INEP_REGS[ep->num]->DIEPCTL; + daintmsk.ep.in = 1 << ep->num; + } + else + { + addr = &pdev->regs.OUTEP_REGS[ep->num]->DOEPCTL; + daintmsk.ep.out = 1 << ep->num; + } + /* If the EP is already active don't change the EP Control + * register. */ + depctl.d32 = USB_OTG_READ_REG32(addr); + if (!depctl.b.usbactep) + { + depctl.b.mps = ep->maxpacket; + depctl.b.eptype = ep->type; + depctl.b.txfnum = ep->tx_fifo_num; + depctl.b.setd0pid = 1; + depctl.b.usbactep = 1; + USB_OTG_WRITE_REG32(addr, depctl.d32); + } + /* Enable the Interrupt for this EP */ +#ifdef USB_OTG_HS_DEDICATED_EP1_ENABLED + if((ep->num == 1)&&(pdev->cfg.coreID == USB_OTG_HS_CORE_ID)) + { + USB_OTG_MODIFY_REG32(&pdev->regs.DREGS->DEACHMSK, 0, daintmsk.d32); + } + else +#endif + USB_OTG_MODIFY_REG32(&pdev->regs.DREGS->DAINTMSK, 0, daintmsk.d32); + return status; +} + + +/** +* @brief USB_OTG_EPDeactivate : Deactivates an EP +* @param pdev : Selected device +* @retval USB_OTG_STS : status +*/ +USB_OTG_STS USB_OTG_EPDeactivate(USB_OTG_CORE_HANDLE *pdev , USB_OTG_EP *ep) +{ + USB_OTG_STS status = USB_OTG_OK; + USB_OTG_DEPCTL_TypeDef depctl; + USB_OTG_DAINT_TypeDef daintmsk; + __IO uint32_t *addr; + + depctl.d32 = 0; + daintmsk.d32 = 0; + /* Read DEPCTLn register */ + if (ep->is_in == 1) + { + addr = &pdev->regs.INEP_REGS[ep->num]->DIEPCTL; + daintmsk.ep.in = 1 << ep->num; + } + else + { + addr = &pdev->regs.OUTEP_REGS[ep->num]->DOEPCTL; + daintmsk.ep.out = 1 << ep->num; + } + depctl.b.usbactep = 0; + USB_OTG_WRITE_REG32(addr, depctl.d32); + /* Disable the Interrupt for this EP */ + +#ifdef USB_OTG_HS_DEDICATED_EP1_ENABLED + if((ep->num == 1)&&(pdev->cfg.coreID == USB_OTG_HS_CORE_ID)) + { + USB_OTG_MODIFY_REG32(&pdev->regs.DREGS->DEACHMSK, daintmsk.d32, 0); + } + else +#endif + USB_OTG_MODIFY_REG32(&pdev->regs.DREGS->DAINTMSK, daintmsk.d32, 0); + return status; +} + + +/** +* @brief USB_OTG_EPStartXfer : Handle the setup for data xfer for an EP and +* starts the xfer +* @param pdev : Selected device +* @retval USB_OTG_STS : status +*/ +USB_OTG_STS USB_OTG_EPStartXfer(USB_OTG_CORE_HANDLE *pdev , USB_OTG_EP *ep) +{ + USB_OTG_STS status = USB_OTG_OK; + USB_OTG_DEPCTL_TypeDef depctl; + USB_OTG_DEPXFRSIZ_TypeDef deptsiz; + USB_OTG_DSTS_TypeDef dsts; + uint32_t fifoemptymsk = 0; + + depctl.d32 = 0; + deptsiz.d32 = 0; + /* IN endpoint */ + if (ep->is_in == 1) + { + depctl.d32 = USB_OTG_READ_REG32(&(pdev->regs.INEP_REGS[ep->num]->DIEPCTL)); + deptsiz.d32 = USB_OTG_READ_REG32(&(pdev->regs.INEP_REGS[ep->num]->DIEPTSIZ)); + /* Zero Length Packet? */ + if (ep->xfer_len == 0) + { + deptsiz.b.xfersize = 0; + deptsiz.b.pktcnt = 1; + } + else + { + /* Program the transfer size and packet count + * as follows: xfersize = N * maxpacket + + * short_packet pktcnt = N + (short_packet + * exist ? 1 : 0) + */ + deptsiz.b.xfersize = ep->xfer_len; + deptsiz.b.pktcnt = (ep->xfer_len - 1 + ep->maxpacket) / ep->maxpacket; + + if (ep->type == EP_TYPE_ISOC) + { + deptsiz.b.mc = 1; + } + } + USB_OTG_WRITE_REG32(&pdev->regs.INEP_REGS[ep->num]->DIEPTSIZ, deptsiz.d32); + + if (pdev->cfg.dma_enable == 1) + { + USB_OTG_WRITE_REG32(&pdev->regs.INEP_REGS[ep->num]->DIEPDMA, ep->dma_addr); + } + else + { + if (ep->type != EP_TYPE_ISOC) + { + /* Enable the Tx FIFO Empty Interrupt for this EP */ + if (ep->xfer_len > 0) + { + fifoemptymsk = 1 << ep->num; + USB_OTG_MODIFY_REG32(&pdev->regs.DREGS->DIEPEMPMSK, 0, fifoemptymsk); + } + } + } + + + if (ep->type == EP_TYPE_ISOC) + { + dsts.d32 = USB_OTG_READ_REG32(&pdev->regs.DREGS->DSTS); + + if (((dsts.b.soffn)&0x1) == 0) + { + depctl.b.setd1pid = 1; + } + else + { + depctl.b.setd0pid = 1; + } + } + + /* EP enable, IN data in FIFO */ + depctl.b.cnak = 1; + depctl.b.epena = 1; + USB_OTG_WRITE_REG32(&pdev->regs.INEP_REGS[ep->num]->DIEPCTL, depctl.d32); + + if (ep->type == EP_TYPE_ISOC) + { + USB_OTG_WritePacket(pdev, ep->xfer_buff, ep->num, ep->xfer_len); + } + } + else + { + /* OUT endpoint */ + depctl.d32 = USB_OTG_READ_REG32(&(pdev->regs.OUTEP_REGS[ep->num]->DOEPCTL)); + deptsiz.d32 = USB_OTG_READ_REG32(&(pdev->regs.OUTEP_REGS[ep->num]->DOEPTSIZ)); + /* Program the transfer size and packet count as follows: + * pktcnt = N + * xfersize = N * maxpacket + */ + if (ep->xfer_len == 0) + { + deptsiz.b.xfersize = ep->maxpacket; + deptsiz.b.pktcnt = 1; + } + else + { + deptsiz.b.pktcnt = (ep->xfer_len + (ep->maxpacket - 1)) / ep->maxpacket; + deptsiz.b.xfersize = deptsiz.b.pktcnt * ep->maxpacket; + } + USB_OTG_WRITE_REG32(&pdev->regs.OUTEP_REGS[ep->num]->DOEPTSIZ, deptsiz.d32); + + if (pdev->cfg.dma_enable == 1) + { + USB_OTG_WRITE_REG32(&pdev->regs.OUTEP_REGS[ep->num]->DOEPDMA, ep->dma_addr); + } + + if (ep->type == EP_TYPE_ISOC) + { + if (ep->even_odd_frame) + { + depctl.b.setd1pid = 1; + } + else + { + depctl.b.setd0pid = 1; + } + } + /* EP enable */ + depctl.b.cnak = 1; + depctl.b.epena = 1; + USB_OTG_WRITE_REG32(&pdev->regs.OUTEP_REGS[ep->num]->DOEPCTL, depctl.d32); + } + return status; +} + + +/** +* @brief USB_OTG_EP0StartXfer : Handle the setup for a data xfer for EP0 and +* starts the xfer +* @param pdev : Selected device +* @retval USB_OTG_STS : status +*/ +USB_OTG_STS USB_OTG_EP0StartXfer(USB_OTG_CORE_HANDLE *pdev , USB_OTG_EP *ep) +{ + USB_OTG_STS status = USB_OTG_OK; + USB_OTG_DEPCTL_TypeDef depctl; + USB_OTG_DEP0XFRSIZ_TypeDef deptsiz; + USB_OTG_INEPREGS *in_regs; + uint32_t fifoemptymsk = 0; + + depctl.d32 = 0; + deptsiz.d32 = 0; + /* IN endpoint */ + if (ep->is_in == 1) + { + in_regs = pdev->regs.INEP_REGS[0]; + depctl.d32 = USB_OTG_READ_REG32(&in_regs->DIEPCTL); + deptsiz.d32 = USB_OTG_READ_REG32(&in_regs->DIEPTSIZ); + /* Zero Length Packet? */ + if (ep->xfer_len == 0) + { + deptsiz.b.xfersize = 0; + deptsiz.b.pktcnt = 1; + + } + else + { + if (ep->xfer_len > ep->maxpacket) + { + ep->xfer_len = ep->maxpacket; + deptsiz.b.xfersize = ep->maxpacket; + } + else + { + deptsiz.b.xfersize = ep->xfer_len; + } + deptsiz.b.pktcnt = 1; + } + USB_OTG_WRITE_REG32(&in_regs->DIEPTSIZ, deptsiz.d32); + + if (pdev->cfg.dma_enable == 1) + { + USB_OTG_WRITE_REG32(&pdev->regs.INEP_REGS[ep->num]->DIEPDMA, ep->dma_addr); + } + + /* EP enable, IN data in FIFO */ + depctl.b.cnak = 1; + depctl.b.epena = 1; + USB_OTG_WRITE_REG32(&in_regs->DIEPCTL, depctl.d32); + + + + if (pdev->cfg.dma_enable == 0) + { + /* Enable the Tx FIFO Empty Interrupt for this EP */ + if (ep->xfer_len > 0) + { + { + fifoemptymsk |= 1 << ep->num; + USB_OTG_MODIFY_REG32(&pdev->regs.DREGS->DIEPEMPMSK, 0, fifoemptymsk); + } + } + } + } + else + { + /* OUT endpoint */ + depctl.d32 = USB_OTG_READ_REG32(&pdev->regs.OUTEP_REGS[ep->num]->DOEPCTL); + deptsiz.d32 = USB_OTG_READ_REG32(&pdev->regs.OUTEP_REGS[ep->num]->DOEPTSIZ); + /* Program the transfer size and packet count as follows: + * xfersize = N * (maxpacket + 4 - (maxpacket % 4)) + * pktcnt = N */ + if (ep->xfer_len == 0) + { + deptsiz.b.xfersize = ep->maxpacket; + deptsiz.b.pktcnt = 1; + } + else + { + ep->xfer_len = ep->maxpacket; + deptsiz.b.xfersize = ep->maxpacket; + deptsiz.b.pktcnt = 1; + } + USB_OTG_WRITE_REG32(&pdev->regs.OUTEP_REGS[ep->num]->DOEPTSIZ, deptsiz.d32); + if (pdev->cfg.dma_enable == 1) + { + USB_OTG_WRITE_REG32(&pdev->regs.OUTEP_REGS[ep->num]->DOEPDMA, ep->dma_addr); + } + /* EP enable */ + depctl.b.cnak = 1; + depctl.b.epena = 1; + USB_OTG_WRITE_REG32 (&(pdev->regs.OUTEP_REGS[ep->num]->DOEPCTL), depctl.d32); + + } + return status; +} + + +/** +* @brief USB_OTG_EPSetStall : Set the EP STALL +* @param pdev : Selected device +* @retval USB_OTG_STS : status +*/ +USB_OTG_STS USB_OTG_EPSetStall(USB_OTG_CORE_HANDLE *pdev , USB_OTG_EP *ep) +{ + USB_OTG_STS status = USB_OTG_OK; + USB_OTG_DEPCTL_TypeDef depctl; + __IO uint32_t *depctl_addr; + + depctl.d32 = 0; + if (ep->is_in == 1) + { + depctl_addr = &(pdev->regs.INEP_REGS[ep->num]->DIEPCTL); + depctl.d32 = USB_OTG_READ_REG32(depctl_addr); + /* set the disable and stall bits */ + if (depctl.b.epena) + { + depctl.b.epdis = 1; + } + depctl.b.stall = 1; + USB_OTG_WRITE_REG32(depctl_addr, depctl.d32); + } + else + { + depctl_addr = &(pdev->regs.OUTEP_REGS[ep->num]->DOEPCTL); + depctl.d32 = USB_OTG_READ_REG32(depctl_addr); + /* set the stall bit */ + depctl.b.stall = 1; + USB_OTG_WRITE_REG32(depctl_addr, depctl.d32); + } + return status; +} + + +/** +* @brief Clear the EP STALL +* @param pdev : Selected device +* @retval USB_OTG_STS : status +*/ +USB_OTG_STS USB_OTG_EPClearStall(USB_OTG_CORE_HANDLE *pdev , USB_OTG_EP *ep) +{ + USB_OTG_STS status = USB_OTG_OK; + USB_OTG_DEPCTL_TypeDef depctl; + __IO uint32_t *depctl_addr; + + depctl.d32 = 0; + + if (ep->is_in == 1) + { + depctl_addr = &(pdev->regs.INEP_REGS[ep->num]->DIEPCTL); + } + else + { + depctl_addr = &(pdev->regs.OUTEP_REGS[ep->num]->DOEPCTL); + } + depctl.d32 = USB_OTG_READ_REG32(depctl_addr); + /* clear the stall bits */ + depctl.b.stall = 0; + if (ep->type == EP_TYPE_INTR || ep->type == EP_TYPE_BULK) + { + depctl.b.setd0pid = 1; /* DATA0 */ + } + USB_OTG_WRITE_REG32(depctl_addr, depctl.d32); + return status; +} + + +/** +* @brief USB_OTG_ReadDevAllOutEp_itr : returns OUT endpoint interrupt bits +* @param pdev : Selected device +* @retval OUT endpoint interrupt bits +*/ +uint32_t USB_OTG_ReadDevAllOutEp_itr(USB_OTG_CORE_HANDLE *pdev) +{ + uint32_t v; + v = USB_OTG_READ_REG32(&pdev->regs.DREGS->DAINT); + v &= USB_OTG_READ_REG32(&pdev->regs.DREGS->DAINTMSK); + return ((v & 0xffff0000) >> 16); +} + + +/** +* @brief USB_OTG_ReadDevOutEP_itr : returns Device OUT EP Interrupt register +* @param pdev : Selected device +* @param ep : end point number +* @retval Device OUT EP Interrupt register +*/ +uint32_t USB_OTG_ReadDevOutEP_itr(USB_OTG_CORE_HANDLE *pdev , uint8_t epnum) +{ + uint32_t v; + v = USB_OTG_READ_REG32(&pdev->regs.OUTEP_REGS[epnum]->DOEPINT); + v &= USB_OTG_READ_REG32(&pdev->regs.DREGS->DOEPMSK); + return v; +} + + +/** +* @brief USB_OTG_ReadDevAllInEPItr : Get int status register +* @param pdev : Selected device +* @retval int status register +*/ +uint32_t USB_OTG_ReadDevAllInEPItr(USB_OTG_CORE_HANDLE *pdev) +{ + uint32_t v; + v = USB_OTG_READ_REG32(&pdev->regs.DREGS->DAINT); + v &= USB_OTG_READ_REG32(&pdev->regs.DREGS->DAINTMSK); + return (v & 0xffff); +} + +/** +* @brief configures EPO to receive SETUP packets +* @param None +* @retval : None +*/ +void USB_OTG_EP0_OutStart(USB_OTG_CORE_HANDLE *pdev) +{ + USB_OTG_DEP0XFRSIZ_TypeDef doeptsize0; + doeptsize0.d32 = 0; + doeptsize0.b.supcnt = 3; + doeptsize0.b.pktcnt = 1; + doeptsize0.b.xfersize = 8 * 3; + USB_OTG_WRITE_REG32( &pdev->regs.OUTEP_REGS[0]->DOEPTSIZ, doeptsize0.d32 ); + + if (pdev->cfg.dma_enable == 1) + { + USB_OTG_DEPCTL_TypeDef doepctl; + doepctl.d32 = 0; + USB_OTG_WRITE_REG32( &pdev->regs.OUTEP_REGS[0]->DOEPDMA, + (uint32_t)&pdev->dev.setup_packet); + + /* EP enable */ + doepctl.d32 = USB_OTG_READ_REG32(&pdev->regs.OUTEP_REGS[0]->DOEPCTL); + doepctl.b.epena = 1; + doepctl.d32 = 0x80008000; + USB_OTG_WRITE_REG32( &pdev->regs.OUTEP_REGS[0]->DOEPCTL, doepctl.d32); + } +} + +/** +* @brief USB_OTG_RemoteWakeup : active remote wakeup signalling +* @param None +* @retval : None +*/ +void USB_OTG_ActiveRemoteWakeup(USB_OTG_CORE_HANDLE *pdev) +{ + + USB_OTG_DCTL_TypeDef dctl; + USB_OTG_DSTS_TypeDef dsts; + USB_OTG_PCGCCTL_TypeDef power; + + if (pdev->dev.DevRemoteWakeup) + { + dsts.d32 = USB_OTG_READ_REG32(&pdev->regs.DREGS->DSTS); + if(dsts.b.suspsts == 1) + { + if(pdev->cfg.low_power) + { + /* un-gate USB Core clock */ + power.d32 = USB_OTG_READ_REG32(pdev->regs.PCGCCTL); + power.b.gatehclk = 0; + power.b.stoppclk = 0; + USB_OTG_WRITE_REG32(pdev->regs.PCGCCTL, power.d32); + } + /* active Remote wakeup signaling */ + dctl.d32 = 0; + dctl.b.rmtwkupsig = 1; + USB_OTG_MODIFY_REG32(&pdev->regs.DREGS->DCTL, 0, dctl.d32); + USB_OTG_BSP_mDelay(5); + USB_OTG_MODIFY_REG32(&pdev->regs.DREGS->DCTL, dctl.d32, 0 ); + } + } +} + + +/** +* @brief USB_OTG_UngateClock : active USB Core clock +* @param None +* @retval : None +*/ +void USB_OTG_UngateClock(USB_OTG_CORE_HANDLE *pdev) +{ + if(pdev->cfg.low_power) + { + + USB_OTG_DSTS_TypeDef dsts; + USB_OTG_PCGCCTL_TypeDef power; + + dsts.d32 = USB_OTG_READ_REG32(&pdev->regs.DREGS->DSTS); + + if(dsts.b.suspsts == 1) + { + /* un-gate USB Core clock */ + power.d32 = USB_OTG_READ_REG32(pdev->regs.PCGCCTL); + power.b.gatehclk = 0; + power.b.stoppclk = 0; + USB_OTG_WRITE_REG32(pdev->regs.PCGCCTL, power.d32); + + } + } +} + +/** +* @brief Stop the device and clean up fifo's +* @param None +* @retval : None +*/ +void USB_OTG_StopDevice(USB_OTG_CORE_HANDLE *pdev) +{ + uint32_t i; + + pdev->dev.device_status = 1; + + for (i = 0; i < pdev->cfg.dev_endpoints ; i++) + { + USB_OTG_WRITE_REG32( &pdev->regs.INEP_REGS[i]->DIEPINT, 0xFF); + USB_OTG_WRITE_REG32( &pdev->regs.OUTEP_REGS[i]->DOEPINT, 0xFF); + } + + USB_OTG_WRITE_REG32( &pdev->regs.DREGS->DIEPMSK, 0 ); + USB_OTG_WRITE_REG32( &pdev->regs.DREGS->DOEPMSK, 0 ); + USB_OTG_WRITE_REG32( &pdev->regs.DREGS->DAINTMSK, 0 ); + USB_OTG_WRITE_REG32( &pdev->regs.DREGS->DAINT, 0xFFFFFFFF ); + + /* Flush the FIFO */ + USB_OTG_FlushRxFifo(pdev); + USB_OTG_FlushTxFifo(pdev , 0x10 ); +} + +/** +* @brief returns the EP Status +* @param pdev : Selected device +* ep : endpoint structure +* @retval : EP status +*/ + +uint32_t USB_OTG_GetEPStatus(USB_OTG_CORE_HANDLE *pdev ,USB_OTG_EP *ep) +{ + USB_OTG_DEPCTL_TypeDef depctl; + __IO uint32_t *depctl_addr; + uint32_t Status = 0; + + depctl.d32 = 0; + if (ep->is_in == 1) + { + depctl_addr = &(pdev->regs.INEP_REGS[ep->num]->DIEPCTL); + depctl.d32 = USB_OTG_READ_REG32(depctl_addr); + + if (depctl.b.stall == 1) + Status = USB_OTG_EP_TX_STALL; + else if (depctl.b.naksts == 1) + Status = USB_OTG_EP_TX_NAK; + else + Status = USB_OTG_EP_TX_VALID; + + } + else + { + depctl_addr = &(pdev->regs.OUTEP_REGS[ep->num]->DOEPCTL); + depctl.d32 = USB_OTG_READ_REG32(depctl_addr); + if (depctl.b.stall == 1) + Status = USB_OTG_EP_RX_STALL; + else if (depctl.b.naksts == 1) + Status = USB_OTG_EP_RX_NAK; + else + Status = USB_OTG_EP_RX_VALID; + } + + /* Return the current status */ + return Status; +} + +/** +* @brief Set the EP Status +* @param pdev : Selected device +* Status : new Status +* ep : EP structure +* @retval : None +*/ +void USB_OTG_SetEPStatus (USB_OTG_CORE_HANDLE *pdev , USB_OTG_EP *ep , uint32_t Status) +{ + USB_OTG_DEPCTL_TypeDef depctl; + __IO uint32_t *depctl_addr; + + depctl.d32 = 0; + + /* Process for IN endpoint */ + if (ep->is_in == 1) + { + depctl_addr = &(pdev->regs.INEP_REGS[ep->num]->DIEPCTL); + depctl.d32 = USB_OTG_READ_REG32(depctl_addr); + + if (Status == USB_OTG_EP_TX_STALL) + { + USB_OTG_EPSetStall(pdev, ep); return; + } + else if (Status == USB_OTG_EP_TX_NAK) + depctl.b.snak = 1; + else if (Status == USB_OTG_EP_TX_VALID) + { + if (depctl.b.stall == 1) + { + ep->even_odd_frame = 0; + USB_OTG_EPClearStall(pdev, ep); + return; + } + depctl.b.cnak = 1; + depctl.b.usbactep = 1; + depctl.b.epena = 1; + } + else if (Status == USB_OTG_EP_TX_DIS) + depctl.b.usbactep = 0; + } + else /* Process for OUT endpoint */ + { + depctl_addr = &(pdev->regs.OUTEP_REGS[ep->num]->DOEPCTL); + depctl.d32 = USB_OTG_READ_REG32(depctl_addr); + + if (Status == USB_OTG_EP_RX_STALL) { + depctl.b.stall = 1; + } + else if (Status == USB_OTG_EP_RX_NAK) + depctl.b.snak = 1; + else if (Status == USB_OTG_EP_RX_VALID) + { + if (depctl.b.stall == 1) + { + ep->even_odd_frame = 0; + USB_OTG_EPClearStall(pdev, ep); + return; + } + depctl.b.cnak = 1; + depctl.b.usbactep = 1; + depctl.b.epena = 1; + } + else if (Status == USB_OTG_EP_RX_DIS) + { + depctl.b.usbactep = 0; + } + } + + USB_OTG_WRITE_REG32(depctl_addr, depctl.d32); +} + +#endif +/** +* @} +*/ + +/** +* @} +*/ + +/** +* @} +*/ + +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ diff --git a/libcodec2-android/src/codec2/stm32/usb_lib/otg/usb_core.h b/libcodec2-android/src/codec2/stm32/usb_lib/otg/usb_core.h new file mode 100644 index 0000000..acd1f1c --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/usb_lib/otg/usb_core.h @@ -0,0 +1,408 @@ +/** + ****************************************************************************** + * @file usb_core.h + * @author MCD Application Team + * @version V2.0.0 + * @date 22-July-2011 + * @brief Header of the Core Layer + ****************************************************************************** + * @attention + * + * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS + * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE + * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY + * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING + * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE + * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + *

© COPYRIGHT 2011 STMicroelectronics

+ ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __USB_CORE_H__ +#define __USB_CORE_H__ + +/* Includes ------------------------------------------------------------------*/ +#include "usb_conf.h" +#include "usb_regs.h" +#include "usb_defines.h" + + +/** @addtogroup USB_OTG_DRIVER + * @{ + */ + +/** @defgroup USB_CORE + * @brief usb otg driver core layer + * @{ + */ + + +/** @defgroup USB_CORE_Exported_Defines + * @{ + */ + +#define USB_OTG_EP0_IDLE 0 +#define USB_OTG_EP0_SETUP 1 +#define USB_OTG_EP0_DATA_IN 2 +#define USB_OTG_EP0_DATA_OUT 3 +#define USB_OTG_EP0_STATUS_IN 4 +#define USB_OTG_EP0_STATUS_OUT 5 +#define USB_OTG_EP0_STALL 6 + +#define USB_OTG_EP_TX_DIS 0x0000 +#define USB_OTG_EP_TX_STALL 0x0010 +#define USB_OTG_EP_TX_NAK 0x0020 +#define USB_OTG_EP_TX_VALID 0x0030 + +#define USB_OTG_EP_RX_DIS 0x0000 +#define USB_OTG_EP_RX_STALL 0x1000 +#define USB_OTG_EP_RX_NAK 0x2000 +#define USB_OTG_EP_RX_VALID 0x3000 +/** + * @} + */ +#define MAX_DATA_LENGTH 0xFF + +/** @defgroup USB_CORE_Exported_Types + * @{ + */ + + +typedef enum { + USB_OTG_OK = 0, + USB_OTG_FAIL +}USB_OTG_STS; + +typedef enum { + HC_IDLE = 0, + HC_XFRC, + HC_HALTED, + HC_NAK, + HC_NYET, + HC_STALL, + HC_XACTERR, + HC_BBLERR, + HC_DATATGLERR, +}HC_STATUS; + +typedef enum { + URB_IDLE = 0, + URB_DONE, + URB_NOTREADY, + URB_ERROR, + URB_STALL +}URB_STATE; + +typedef enum { + CTRL_START = 0, + CTRL_XFRC, + CTRL_HALTED, + CTRL_NAK, + CTRL_STALL, + CTRL_XACTERR, + CTRL_BBLERR, + CTRL_DATATGLERR, + CTRL_FAIL +}CTRL_STATUS; + + +typedef struct USB_OTG_hc +{ + uint8_t dev_addr ; + uint8_t ep_num; + uint8_t ep_is_in; + uint8_t speed; + uint8_t do_ping; + uint8_t ep_type; + uint16_t max_packet; + uint8_t data_pid; + uint8_t *xfer_buff; + uint32_t xfer_len; + uint32_t xfer_count; + uint8_t toggle_in; + uint8_t toggle_out; + uint32_t dma_addr; +} +USB_OTG_HC , *PUSB_OTG_HC; + +typedef struct USB_OTG_ep +{ + uint8_t num; + uint8_t is_in; + uint8_t is_stall; + uint8_t type; + uint8_t data_pid_start; + uint8_t even_odd_frame; + uint16_t tx_fifo_num; + uint32_t maxpacket; + /* transaction level variables*/ + uint8_t *xfer_buff; + uint32_t dma_addr; + uint32_t xfer_len; + uint32_t xfer_count; + /* Transfer level variables*/ + uint32_t rem_data_len; + uint32_t total_data_len; + uint32_t ctl_data_len; + +} + +USB_OTG_EP , *PUSB_OTG_EP; + + + +typedef struct USB_OTG_core_cfg +{ + uint8_t host_channels; + uint8_t dev_endpoints; + uint8_t speed; + uint8_t dma_enable; + uint16_t mps; + uint16_t TotalFifoSize; + uint8_t phy_itface; + uint8_t Sof_output; + uint8_t low_power; + uint8_t coreID; + +} +USB_OTG_CORE_CFGS, *PUSB_OTG_CORE_CFGS; + + + +typedef struct usb_setup_req { + + uint8_t bmRequest; + uint8_t bRequest; + uint16_t wValue; + uint16_t wIndex; + uint16_t wLength; +} USB_SETUP_REQ; + +typedef struct _Device_TypeDef +{ + uint8_t *(*GetDeviceDescriptor)( uint8_t speed , uint16_t *length); + uint8_t *(*GetLangIDStrDescriptor)( uint8_t speed , uint16_t *length); + uint8_t *(*GetManufacturerStrDescriptor)( uint8_t speed , uint16_t *length); + uint8_t *(*GetProductStrDescriptor)( uint8_t speed , uint16_t *length); + uint8_t *(*GetSerialStrDescriptor)( uint8_t speed , uint16_t *length); + uint8_t *(*GetConfigurationStrDescriptor)( uint8_t speed , uint16_t *length); + uint8_t *(*GetInterfaceStrDescriptor)( uint8_t speed , uint16_t *length); +} USBD_DEVICE, *pUSBD_DEVICE; + +typedef struct USB_OTG_hPort +{ + void (*Disconnect) (void *phost); + void (*Connect) (void *phost); + uint8_t ConnStatus; + uint8_t DisconnStatus; + uint8_t ConnHandled; + uint8_t DisconnHandled; +} USB_OTG_hPort_TypeDef; + +typedef struct _Device_cb +{ + uint8_t (*Init) (void *pdev , uint8_t cfgidx); + uint8_t (*DeInit) (void *pdev , uint8_t cfgidx); + /* Control Endpoints*/ + uint8_t (*Setup) (void *pdev , USB_SETUP_REQ *req); + uint8_t (*EP0_TxSent) (void *pdev ); + uint8_t (*EP0_RxReady) (void *pdev ); + /* Class Specific Endpoints*/ + uint8_t (*DataIn) (void *pdev , uint8_t epnum); + uint8_t (*DataOut) (void *pdev , uint8_t epnum); + uint8_t (*SOF) (void *pdev); + uint8_t (*IsoINIncomplete) (void *pdev); + uint8_t (*IsoOUTIncomplete) (void *pdev); + + uint8_t *(*GetConfigDescriptor)( uint8_t speed , uint16_t *length); +#ifdef USB_OTG_HS_CORE + uint8_t *(*GetOtherConfigDescriptor)( uint8_t speed , uint16_t *length); +#endif + +#ifdef USB_SUPPORT_USER_STRING_DESC + uint8_t *(*GetUsrStrDescriptor)( uint8_t speed ,uint8_t index, uint16_t *length); +#endif + +} USBD_Class_cb_TypeDef; + + + +typedef struct _USBD_USR_PROP +{ + void (*Init)(void); + void (*DeviceReset)(uint8_t speed); + void (*DeviceConfigured)(void); + void (*DeviceSuspended)(void); + void (*DeviceResumed)(void); + + void (*DeviceConnected)(void); + void (*DeviceDisconnected)(void); + +} +USBD_Usr_cb_TypeDef; + +typedef struct _DCD +{ + uint8_t device_config; + uint8_t device_state; + uint8_t device_status; + uint8_t device_address; + uint32_t DevRemoteWakeup; + USB_OTG_EP in_ep [USB_OTG_MAX_TX_FIFOS]; + USB_OTG_EP out_ep [USB_OTG_MAX_TX_FIFOS]; + uint8_t setup_packet [8*3]; + USBD_Class_cb_TypeDef *class_cb; + USBD_Usr_cb_TypeDef *usr_cb; + USBD_DEVICE *usr_device; + uint8_t *pConfig_descriptor; + } +DCD_DEV , *DCD_PDEV; + + +typedef struct _HCD +{ + uint8_t Rx_Buffer [MAX_DATA_LENGTH]; + __IO uint32_t ConnSts; + __IO uint32_t ErrCnt[USB_OTG_MAX_TX_FIFOS]; + __IO uint32_t XferCnt[USB_OTG_MAX_TX_FIFOS]; + __IO HC_STATUS HC_Status[USB_OTG_MAX_TX_FIFOS]; + __IO URB_STATE URB_State[USB_OTG_MAX_TX_FIFOS]; + USB_OTG_HC hc [USB_OTG_MAX_TX_FIFOS]; + uint16_t channel [USB_OTG_MAX_TX_FIFOS]; + USB_OTG_hPort_TypeDef *port_cb; +} +HCD_DEV , *USB_OTG_USBH_PDEV; + + +typedef struct _OTG +{ + uint8_t OTG_State; + uint8_t OTG_PrevState; + uint8_t OTG_Mode; +} +OTG_DEV , *USB_OTG_USBO_PDEV; + +typedef struct USB_OTG_handle +{ + USB_OTG_CORE_CFGS cfg; + USB_OTG_CORE_REGS regs; +#ifdef USE_DEVICE_MODE + DCD_DEV dev; +#endif +#ifdef USE_HOST_MODE + HCD_DEV host; +#endif +#ifdef USE_OTG_MODE + OTG_DEV otg; +#endif +} +USB_OTG_CORE_HANDLE , *PUSB_OTG_CORE_HANDLE; + +/** + * @} + */ + + +/** @defgroup USB_CORE_Exported_Macros + * @{ + */ + +/** + * @} + */ + +/** @defgroup USB_CORE_Exported_Variables + * @{ + */ +/** + * @} + */ + +/** @defgroup USB_CORE_Exported_FunctionsPrototype + * @{ + */ + + +USB_OTG_STS USB_OTG_CoreInit (USB_OTG_CORE_HANDLE *pdev); +USB_OTG_STS USB_OTG_SelectCore (USB_OTG_CORE_HANDLE *pdev, + USB_OTG_CORE_ID_TypeDef coreID); +USB_OTG_STS USB_OTG_EnableGlobalInt (USB_OTG_CORE_HANDLE *pdev); +USB_OTG_STS USB_OTG_DisableGlobalInt(USB_OTG_CORE_HANDLE *pdev); +void* USB_OTG_ReadPacket (USB_OTG_CORE_HANDLE *pdev , + uint8_t *dest, + uint16_t len); +USB_OTG_STS USB_OTG_WritePacket (USB_OTG_CORE_HANDLE *pdev , + uint8_t *src, + uint8_t ch_ep_num, + uint16_t len); +USB_OTG_STS USB_OTG_FlushTxFifo (USB_OTG_CORE_HANDLE *pdev , uint32_t num); +USB_OTG_STS USB_OTG_FlushRxFifo (USB_OTG_CORE_HANDLE *pdev); + +uint32_t USB_OTG_ReadCoreItr (USB_OTG_CORE_HANDLE *pdev); +uint32_t USB_OTG_ReadOtgItr (USB_OTG_CORE_HANDLE *pdev); +uint8_t USB_OTG_IsHostMode (USB_OTG_CORE_HANDLE *pdev); +uint8_t USB_OTG_IsDeviceMode (USB_OTG_CORE_HANDLE *pdev); +uint32_t USB_OTG_GetMode (USB_OTG_CORE_HANDLE *pdev); +USB_OTG_STS USB_OTG_PhyInit (USB_OTG_CORE_HANDLE *pdev); +USB_OTG_STS USB_OTG_SetCurrentMode (USB_OTG_CORE_HANDLE *pdev, + uint8_t mode); + +/*********************** HOST APIs ********************************************/ +#ifdef USE_HOST_MODE +USB_OTG_STS USB_OTG_CoreInitHost (USB_OTG_CORE_HANDLE *pdev); +USB_OTG_STS USB_OTG_EnableHostInt (USB_OTG_CORE_HANDLE *pdev); +USB_OTG_STS USB_OTG_HC_Init (USB_OTG_CORE_HANDLE *pdev, uint8_t hc_num); +USB_OTG_STS USB_OTG_HC_Halt (USB_OTG_CORE_HANDLE *pdev, uint8_t hc_num); +USB_OTG_STS USB_OTG_HC_StartXfer (USB_OTG_CORE_HANDLE *pdev, uint8_t hc_num); +USB_OTG_STS USB_OTG_HC_DoPing (USB_OTG_CORE_HANDLE *pdev , uint8_t hc_num); +uint32_t USB_OTG_ReadHostAllChannels_intr (USB_OTG_CORE_HANDLE *pdev); +uint32_t USB_OTG_ResetPort (USB_OTG_CORE_HANDLE *pdev); +uint32_t USB_OTG_ReadHPRT0 (USB_OTG_CORE_HANDLE *pdev); +void USB_OTG_DriveVbus (USB_OTG_CORE_HANDLE *pdev, uint8_t state); +void USB_OTG_InitFSLSPClkSel (USB_OTG_CORE_HANDLE *pdev ,uint8_t freq); +uint8_t USB_OTG_IsEvenFrame (USB_OTG_CORE_HANDLE *pdev) ; +void USB_OTG_StopHost (USB_OTG_CORE_HANDLE *pdev); +#endif +/********************* DEVICE APIs ********************************************/ +#ifdef USE_DEVICE_MODE +USB_OTG_STS USB_OTG_CoreInitDev (USB_OTG_CORE_HANDLE *pdev); +USB_OTG_STS USB_OTG_EnableDevInt (USB_OTG_CORE_HANDLE *pdev); +uint32_t USB_OTG_ReadDevAllInEPItr (USB_OTG_CORE_HANDLE *pdev); +enum USB_OTG_SPEED USB_OTG_GetDeviceSpeed (USB_OTG_CORE_HANDLE *pdev); +USB_OTG_STS USB_OTG_EP0Activate (USB_OTG_CORE_HANDLE *pdev); +USB_OTG_STS USB_OTG_EPActivate (USB_OTG_CORE_HANDLE *pdev , USB_OTG_EP *ep); +USB_OTG_STS USB_OTG_EPDeactivate(USB_OTG_CORE_HANDLE *pdev , USB_OTG_EP *ep); +USB_OTG_STS USB_OTG_EPStartXfer (USB_OTG_CORE_HANDLE *pdev , USB_OTG_EP *ep); +USB_OTG_STS USB_OTG_EP0StartXfer(USB_OTG_CORE_HANDLE *pdev , USB_OTG_EP *ep); +USB_OTG_STS USB_OTG_EPSetStall (USB_OTG_CORE_HANDLE *pdev , USB_OTG_EP *ep); +USB_OTG_STS USB_OTG_EPClearStall (USB_OTG_CORE_HANDLE *pdev , USB_OTG_EP *ep); +uint32_t USB_OTG_ReadDevAllOutEp_itr (USB_OTG_CORE_HANDLE *pdev); +uint32_t USB_OTG_ReadDevOutEP_itr (USB_OTG_CORE_HANDLE *pdev , uint8_t epnum); +uint32_t USB_OTG_ReadDevAllInEPItr (USB_OTG_CORE_HANDLE *pdev); +void USB_OTG_InitDevSpeed (USB_OTG_CORE_HANDLE *pdev , uint8_t speed); +uint8_t USBH_IsEvenFrame (USB_OTG_CORE_HANDLE *pdev); +void USB_OTG_EP0_OutStart(USB_OTG_CORE_HANDLE *pdev); +void USB_OTG_ActiveRemoteWakeup(USB_OTG_CORE_HANDLE *pdev); +void USB_OTG_UngateClock(USB_OTG_CORE_HANDLE *pdev); +void USB_OTG_StopDevice(USB_OTG_CORE_HANDLE *pdev); +void USB_OTG_SetEPStatus (USB_OTG_CORE_HANDLE *pdev , USB_OTG_EP *ep , uint32_t Status); +uint32_t USB_OTG_GetEPStatus(USB_OTG_CORE_HANDLE *pdev ,USB_OTG_EP *ep); +#endif +/** + * @} + */ + +#endif /* __USB_CORE_H__ */ + + +/** + * @} + */ + +/** + * @} + */ +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ + diff --git a/libcodec2-android/src/codec2/stm32/usb_lib/otg/usb_dcd.c b/libcodec2-android/src/codec2/stm32/usb_lib/otg/usb_dcd.c new file mode 100644 index 0000000..bab0146 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/usb_lib/otg/usb_dcd.c @@ -0,0 +1,475 @@ +/** + ****************************************************************************** + * @file usb_dcd.c + * @author MCD Application Team + * @version V2.0.0 + * @date 22-July-2011 + * @brief Peripheral Device Interface Layer + ****************************************************************************** + * @attention + * + * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS + * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE + * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY + * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING + * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE + * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + *

© COPYRIGHT 2011 STMicroelectronics

+ ****************************************************************************** + */ + +#include "usb_conf.h" +#ifdef USE_DEVICE_MODE +/* Includes ------------------------------------------------------------------*/ +#include "usb_dcd.h" +#include "usb_bsp.h" + + +/** @addtogroup USB_OTG_DRIVER +* @{ +*/ + +/** @defgroup USB_DCD +* @brief This file is the interface between EFSL ans Host mass-storage class +* @{ +*/ + + +/** @defgroup USB_DCD_Private_Defines +* @{ +*/ +/** +* @} +*/ + + +/** @defgroup USB_DCD_Private_TypesDefinitions +* @{ +*/ +/** +* @} +*/ + + + +/** @defgroup USB_DCD_Private_Macros +* @{ +*/ +/** +* @} +*/ + + +/** @defgroup USB_DCD_Private_Variables +* @{ +*/ +/** +* @} +*/ + + +/** @defgroup USB_DCD_Private_FunctionPrototypes +* @{ +*/ + +/** +* @} +*/ + + +/** @defgroup USB_DCD_Private_Functions +* @{ +*/ + + + +void DCD_Init(USB_OTG_CORE_HANDLE *pdev , + USB_OTG_CORE_ID_TypeDef coreID) +{ + uint32_t i; + USB_OTG_EP *ep; + + USB_OTG_SelectCore (pdev , coreID); + + pdev->dev.device_status = USB_OTG_DEFAULT; + pdev->dev.device_address = 0; + + /* Init ep structure */ + for (i = 0; i < pdev->cfg.dev_endpoints ; i++) + { + ep = &pdev->dev.in_ep[i]; + /* Init ep structure */ + ep->is_in = 1; + ep->num = i; + ep->tx_fifo_num = i; + /* Control until ep is actvated */ + ep->type = EP_TYPE_CTRL; + ep->maxpacket = USB_OTG_MAX_EP0_SIZE; + ep->xfer_buff = 0; + ep->xfer_len = 0; + } + + for (i = 0; i < pdev->cfg.dev_endpoints; i++) + { + ep = &pdev->dev.out_ep[i]; + /* Init ep structure */ + ep->is_in = 0; + ep->num = i; + ep->tx_fifo_num = i; + /* Control until ep is activated */ + ep->type = EP_TYPE_CTRL; + ep->maxpacket = USB_OTG_MAX_EP0_SIZE; + ep->xfer_buff = 0; + ep->xfer_len = 0; + } + + USB_OTG_DisableGlobalInt(pdev); + + /*Init the Core (common init.) */ + USB_OTG_CoreInit(pdev); + + + /* Force Device Mode*/ + USB_OTG_SetCurrentMode(pdev, DEVICE_MODE); + + /* Init Device */ + USB_OTG_CoreInitDev(pdev); + + + /* Enable USB Global interrupt */ + USB_OTG_EnableGlobalInt(pdev); +} + + +/** +* @brief Configure an EP +* @param pdev : Device instance +* @param epdesc : Endpoint Descriptor +* @retval : status +*/ +uint32_t DCD_EP_Open(USB_OTG_CORE_HANDLE *pdev , + uint8_t ep_addr, + uint16_t ep_mps, + uint8_t ep_type) +{ + USB_OTG_EP *ep; + + if ((ep_addr & 0x80) == 0x80) + { + ep = &pdev->dev.in_ep[ep_addr & 0x7F]; + } + else + { + ep = &pdev->dev.out_ep[ep_addr & 0x7F]; + } + ep->num = ep_addr & 0x7F; + + ep->is_in = (0x80 & ep_addr) != 0; + ep->maxpacket = ep_mps; + ep->type = ep_type; + if (ep->is_in) + { + /* Assign a Tx FIFO */ + ep->tx_fifo_num = ep->num; + } + /* Set initial data PID. */ + if (ep_type == USB_OTG_EP_BULK ) + { + ep->data_pid_start = 0; + } + USB_OTG_EPActivate(pdev , ep ); + return 0; +} +/** +* @brief called when an EP is disabled +* @param pdev: device instance +* @param ep_addr: endpoint address +* @retval : status +*/ +uint32_t DCD_EP_Close(USB_OTG_CORE_HANDLE *pdev , uint8_t ep_addr) +{ + USB_OTG_EP *ep; + + if ((ep_addr&0x80) == 0x80) + { + ep = &pdev->dev.in_ep[ep_addr & 0x7F]; + } + else + { + ep = &pdev->dev.out_ep[ep_addr & 0x7F]; + } + ep->num = ep_addr & 0x7F; + ep->is_in = (0x80 & ep_addr) != 0; + USB_OTG_EPDeactivate(pdev , ep ); + return 0; +} + + +/** +* @brief DCD_EP_PrepareRx +* @param pdev: device instance +* @param ep_addr: endpoint address +* @param pbuf: pointer to Rx buffer +* @param buf_len: data length +* @retval : status +*/ +uint32_t DCD_EP_PrepareRx( USB_OTG_CORE_HANDLE *pdev, + uint8_t ep_addr, + uint8_t *pbuf, + uint16_t buf_len) +{ + USB_OTG_EP *ep; + + ep = &pdev->dev.out_ep[ep_addr & 0x7F]; + + /*setup and start the Xfer */ + ep->xfer_buff = pbuf; + ep->xfer_len = buf_len; + ep->xfer_count = 0; + ep->is_in = 0; + ep->num = ep_addr & 0x7F; + + if (pdev->cfg.dma_enable == 1) + { + ep->dma_addr = (uint32_t)pbuf; + } + + if ( ep->num == 0 ) + { + USB_OTG_EP0StartXfer(pdev , ep); + } + else + { + USB_OTG_EPStartXfer(pdev, ep ); + } + return 0; +} + +/** +* @brief Transmit data over USB +* @param pdev: device instance +* @param ep_addr: endpoint address +* @param pbuf: pointer to Tx buffer +* @param buf_len: data length +* @retval : status +*/ +uint32_t DCD_EP_Tx ( USB_OTG_CORE_HANDLE *pdev, + uint8_t ep_addr, + uint8_t *pbuf, + uint32_t buf_len) +{ + USB_OTG_EP *ep; + + ep = &pdev->dev.in_ep[ep_addr & 0x7F]; + + /* Setup and start the Transfer */ + ep->is_in = 1; + ep->num = ep_addr & 0x7F; + ep->xfer_buff = pbuf; + ep->dma_addr = (uint32_t)pbuf; + ep->xfer_count = 0; + ep->xfer_len = buf_len; + + if ( ep->num == 0 ) + { + USB_OTG_EP0StartXfer(pdev , ep); + } + else + { + USB_OTG_EPStartXfer(pdev, ep ); + } + return 0; +} + + +/** +* @brief Stall an endpoint. +* @param pdev: device instance +* @param epnum: endpoint address +* @retval : status +*/ +uint32_t DCD_EP_Stall (USB_OTG_CORE_HANDLE *pdev, uint8_t epnum) +{ + USB_OTG_EP *ep; + if ((0x80 & epnum) == 0x80) + { + ep = &pdev->dev.in_ep[epnum & 0x7F]; + } + else + { + ep = &pdev->dev.out_ep[epnum]; + } + + ep->is_stall = 1; + ep->num = epnum & 0x7F; + ep->is_in = ((epnum & 0x80) == 0x80); + + USB_OTG_EPSetStall(pdev , ep); + return (0); +} + + +/** +* @brief Clear stall condition on endpoints. +* @param pdev: device instance +* @param epnum: endpoint address +* @retval : status +*/ +uint32_t DCD_EP_ClrStall (USB_OTG_CORE_HANDLE *pdev, uint8_t epnum) +{ + USB_OTG_EP *ep; + if ((0x80 & epnum) == 0x80) + { + ep = &pdev->dev.in_ep[epnum & 0x7F]; + } + else + { + ep = &pdev->dev.out_ep[epnum]; + } + + ep->is_stall = 0; + ep->num = epnum & 0x7F; + ep->is_in = ((epnum & 0x80) == 0x80); + + USB_OTG_EPClearStall(pdev , ep); + return (0); +} + + +/** +* @brief This Function flushes the FIFOs. +* @param pdev: device instance +* @param epnum: endpoint address +* @retval : status +*/ +uint32_t DCD_EP_Flush (USB_OTG_CORE_HANDLE *pdev , uint8_t epnum) +{ + + if ((epnum & 0x80) == 0x80) + { + USB_OTG_FlushTxFifo(pdev, epnum & 0x7F); + } + else + { + USB_OTG_FlushRxFifo(pdev); + } + + return (0); +} + + +/** +* @brief This Function set USB device address +* @param pdev: device instance +* @param address: new device address +* @retval : status +*/ +void DCD_EP_SetAddress (USB_OTG_CORE_HANDLE *pdev, uint8_t address) +{ + USB_OTG_DCFG_TypeDef dcfg; + dcfg.d32 = 0; + dcfg.b.devaddr = address; + USB_OTG_MODIFY_REG32( &pdev->regs.DREGS->DCFG, 0, dcfg.d32); +} + +/** +* @brief Connect device (enable internal pull-up) +* @param pdev: device instance +* @retval : None +*/ +void DCD_DevConnect (USB_OTG_CORE_HANDLE *pdev) +{ +#ifndef USE_OTG_MODE + USB_OTG_DCTL_TypeDef dctl; + dctl.d32 = USB_OTG_READ_REG32(&pdev->regs.DREGS->DCTL); + /* Connect device */ + dctl.b.sftdiscon = 0; + USB_OTG_WRITE_REG32(&pdev->regs.DREGS->DCTL, dctl.d32); + USB_OTG_BSP_mDelay(3); +#endif +} + + +/** +* @brief Disconnect device (disable internal pull-up) +* @param pdev: device instance +* @retval : None +*/ +void DCD_DevDisconnect (USB_OTG_CORE_HANDLE *pdev) +{ +#ifndef USE_OTG_MODE + USB_OTG_DCTL_TypeDef dctl; + dctl.d32 = USB_OTG_READ_REG32(&pdev->regs.DREGS->DCTL); + /* Disconnect device for 3ms */ + dctl.b.sftdiscon = 1; + USB_OTG_WRITE_REG32(&pdev->regs.DREGS->DCTL, dctl.d32); + USB_OTG_BSP_mDelay(3); +#endif +} + + +/** +* @brief returns the EP Status +* @param pdev : Selected device +* epnum : endpoint address +* @retval : EP status +*/ + +uint32_t DCD_GetEPStatus(USB_OTG_CORE_HANDLE *pdev ,uint8_t epnum) +{ + USB_OTG_EP *ep; + uint32_t Status = 0; + + if ((0x80 & epnum) == 0x80) + { + ep = &pdev->dev.in_ep[epnum & 0x7F]; + } + else + { + ep = &pdev->dev.out_ep[epnum]; + } + + Status = USB_OTG_GetEPStatus(pdev ,ep); + + /* Return the current status */ + return Status; +} + +/** +* @brief Set the EP Status +* @param pdev : Selected device +* Status : new Status +* epnum : EP address +* @retval : None +*/ +void DCD_SetEPStatus (USB_OTG_CORE_HANDLE *pdev , uint8_t epnum , uint32_t Status) +{ + USB_OTG_EP *ep; + + if ((0x80 & epnum) == 0x80) + { + ep = &pdev->dev.in_ep[epnum & 0x7F]; + } + else + { + ep = &pdev->dev.out_ep[epnum]; + } + + USB_OTG_SetEPStatus(pdev ,ep , Status); +} + +/** +* @} +*/ + +/** +* @} +*/ + +/** +* @} +*/ +#endif + +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ diff --git a/libcodec2-android/src/codec2/stm32/usb_lib/otg/usb_dcd.h b/libcodec2-android/src/codec2/stm32/usb_lib/otg/usb_dcd.h new file mode 100644 index 0000000..9a23dc6 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/usb_lib/otg/usb_dcd.h @@ -0,0 +1,158 @@ +/** + ****************************************************************************** + * @file usb_dcd.h + * @author MCD Application Team + * @version V2.0.0 + * @date 22-July-2011 + * @brief Peripheral Driver Header file + ****************************************************************************** + * @attention + * + * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS + * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE + * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY + * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING + * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE + * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + *

© COPYRIGHT 2011 STMicroelectronics

+ ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __DCD_H__ +#define __DCD_H__ + +/* Includes ------------------------------------------------------------------*/ +#include "usb_core.h" + + +/** @addtogroup USB_OTG_DRIVER +* @{ +*/ + +/** @defgroup USB_DCD +* @brief This file is the +* @{ +*/ + + +/** @defgroup USB_DCD_Exported_Defines +* @{ +*/ +#define USB_OTG_EP_CONTROL 0 +#define USB_OTG_EP_ISOC 1 +#define USB_OTG_EP_BULK 2 +#define USB_OTG_EP_INT 3 +#define USB_OTG_EP_MASK 3 + +/* Device Status */ +#define USB_OTG_DEFAULT 1 +#define USB_OTG_ADDRESSED 2 +#define USB_OTG_CONFIGURED 3 +#define USB_OTG_SUSPENDED 4 + +/** +* @} +*/ + + +/** @defgroup USB_DCD_Exported_Types +* @{ +*/ +/******************************************************************************** +Data structure type +********************************************************************************/ +typedef struct +{ + uint8_t bLength; + uint8_t bDescriptorType; + uint8_t bEndpointAddress; + uint8_t bmAttributes; + uint16_t wMaxPacketSize; + uint8_t bInterval; +} +EP_DESCRIPTOR , *PEP_DESCRIPTOR; + +/** +* @} +*/ + + +/** @defgroup USB_DCD_Exported_Macros +* @{ +*/ +/** +* @} +*/ + +/** @defgroup USB_DCD_Exported_Variables +* @{ +*/ +/** +* @} +*/ + +/** @defgroup USB_DCD_Exported_FunctionsPrototype +* @{ +*/ +/******************************************************************************** +EXPORTED FUNCTION FROM THE USB-OTG LAYER +********************************************************************************/ +void DCD_Init(USB_OTG_CORE_HANDLE *pdev , + USB_OTG_CORE_ID_TypeDef coreID); + +void DCD_DevConnect (USB_OTG_CORE_HANDLE *pdev); +void DCD_DevDisconnect (USB_OTG_CORE_HANDLE *pdev); +void DCD_EP_SetAddress (USB_OTG_CORE_HANDLE *pdev, + uint8_t address); +uint32_t DCD_EP_Open(USB_OTG_CORE_HANDLE *pdev , + uint8_t ep_addr, + uint16_t ep_mps, + uint8_t ep_type); + +uint32_t DCD_EP_Close (USB_OTG_CORE_HANDLE *pdev, + uint8_t ep_addr); + + +uint32_t DCD_EP_PrepareRx ( USB_OTG_CORE_HANDLE *pdev, + uint8_t ep_addr, + uint8_t *pbuf, + uint16_t buf_len); + +uint32_t DCD_EP_Tx (USB_OTG_CORE_HANDLE *pdev, + uint8_t ep_addr, + uint8_t *pbuf, + uint32_t buf_len); +uint32_t DCD_EP_Stall (USB_OTG_CORE_HANDLE *pdev, + uint8_t epnum); +uint32_t DCD_EP_ClrStall (USB_OTG_CORE_HANDLE *pdev, + uint8_t epnum); +uint32_t DCD_EP_Flush (USB_OTG_CORE_HANDLE *pdev, + uint8_t epnum); +uint32_t DCD_Handle_ISR(USB_OTG_CORE_HANDLE *pdev); + +uint32_t DCD_GetEPStatus(USB_OTG_CORE_HANDLE *pdev , + uint8_t epnum); + +void DCD_SetEPStatus (USB_OTG_CORE_HANDLE *pdev , + uint8_t epnum , + uint32_t Status); + +/** +* @} +*/ + + +#endif //__DCD_H__ + + +/** +* @} +*/ + +/** +* @} +*/ +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ + diff --git a/libcodec2-android/src/codec2/stm32/usb_lib/otg/usb_dcd_int.c b/libcodec2-android/src/codec2/stm32/usb_lib/otg/usb_dcd_int.c new file mode 100644 index 0000000..82567eb --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/usb_lib/otg/usb_dcd_int.c @@ -0,0 +1,889 @@ +/** + ****************************************************************************** + * @file usb_dcd_int.c + * @author MCD Application Team + * @version V2.0.0 + * @date 22-July-2011 + * @brief Peripheral Device interrupt subroutines + ****************************************************************************** + * @attention + * + * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS + * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE + * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY + * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING + * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE + * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + *

© COPYRIGHT 2011 STMicroelectronics

+ ****************************************************************************** + */ + +#include "usb_conf.h" +#ifdef USE_DEVICE_MODE +/* Includes ------------------------------------------------------------------*/ +#include "usb_dcd_int.h" +/** @addtogroup USB_OTG_DRIVER +* @{ +*/ + +/** @defgroup USB_DCD_INT +* @brief This file contains the interrupt subroutines for the Device mode. +* @{ +*/ + + +/** @defgroup USB_DCD_INT_Private_Defines +* @{ +*/ +/** +* @} +*/ + + +/** @defgroup USB_DCD_INT_Private_TypesDefinitions +* @{ +*/ +/** +* @} +*/ + + + +/** @defgroup USB_DCD_INT_Private_Macros +* @{ +*/ +/** +* @} +*/ + + +/** @defgroup USB_DCD_INT_Private_Variables +* @{ +*/ +/** +* @} +*/ + + +/** @defgroup USB_DCD_INT_Private_FunctionPrototypes +* @{ +*/ +/* static functions */ +static uint32_t DCD_ReadDevInEP (USB_OTG_CORE_HANDLE *pdev, uint8_t epnum); + +/* Interrupt Handlers */ +static uint32_t DCD_HandleInEP_ISR(USB_OTG_CORE_HANDLE *pdev); +static uint32_t DCD_HandleOutEP_ISR(USB_OTG_CORE_HANDLE *pdev); +static uint32_t DCD_HandleSof_ISR(USB_OTG_CORE_HANDLE *pdev); + +static uint32_t DCD_HandleRxStatusQueueLevel_ISR(USB_OTG_CORE_HANDLE *pdev); +static uint32_t DCD_WriteEmptyTxFifo(USB_OTG_CORE_HANDLE *pdev , uint32_t epnum); + +static uint32_t DCD_HandleUsbReset_ISR(USB_OTG_CORE_HANDLE *pdev); +static uint32_t DCD_HandleEnumDone_ISR(USB_OTG_CORE_HANDLE *pdev); +static uint32_t DCD_HandleResume_ISR(USB_OTG_CORE_HANDLE *pdev); +static uint32_t DCD_HandleUSBSuspend_ISR(USB_OTG_CORE_HANDLE *pdev); + +static uint32_t DCD_IsoINIncomplete_ISR(USB_OTG_CORE_HANDLE *pdev); +static uint32_t DCD_IsoOUTIncomplete_ISR(USB_OTG_CORE_HANDLE *pdev); +#ifdef VBUS_SENSING_ENABLED +static uint32_t DCD_SessionRequest_ISR(USB_OTG_CORE_HANDLE *pdev); +static uint32_t DCD_OTG_ISR(USB_OTG_CORE_HANDLE *pdev); +#endif + +/** +* @} +*/ + + +/** @defgroup USB_DCD_INT_Private_Functions +* @{ +*/ + + +#ifdef USB_OTG_HS_DEDICATED_EP1_ENABLED +/** +* @brief USBD_OTG_EP1OUT_ISR_Handler +* handles all USB Interrupts +* @param pdev: device instance +* @retval status +*/ +uint32_t USBD_OTG_EP1OUT_ISR_Handler (USB_OTG_CORE_HANDLE *pdev) +{ + + USB_OTG_DOEPINTn_TypeDef doepint; + USB_OTG_DEPXFRSIZ_TypeDef deptsiz; + + doepint.d32 = USB_OTG_READ_REG32(&pdev->regs.OUTEP_REGS[1]->DOEPINT); + doepint.d32&= USB_OTG_READ_REG32(&pdev->regs.DREGS->DOUTEP1MSK); + + /* Transfer complete */ + if ( doepint.b.xfercompl ) + { + /* Clear the bit in DOEPINTn for this interrupt */ + CLEAR_OUT_EP_INTR(1, xfercompl); + if (pdev->cfg.dma_enable == 1) + { + deptsiz.d32 = USB_OTG_READ_REG32(&(pdev->regs.OUTEP_REGS[1]->DOEPTSIZ)); + /*ToDo : handle more than one single MPS size packet */ + pdev->dev.out_ep[1].xfer_count = pdev->dev.out_ep[1].maxpacket - \ + deptsiz.b.xfersize; + } + /* Inform upper layer: data ready */ + /* RX COMPLETE */ + USBD_DCD_INT_fops->DataOutStage(pdev , 1); + + } + + /* Endpoint disable */ + if ( doepint.b.epdisabled ) + { + /* Clear the bit in DOEPINTn for this interrupt */ + CLEAR_OUT_EP_INTR(1, epdisabled); + } + /* AHB Error */ + if ( doepint.b.ahberr ) + { + CLEAR_OUT_EP_INTR(1, ahberr); + } + return 1; +} + +/** +* @brief USBD_OTG_EP1IN_ISR_Handler +* handles all USB Interrupts +* @param pdev: device instance +* @retval status +*/ +uint32_t USBD_OTG_EP1IN_ISR_Handler (USB_OTG_CORE_HANDLE *pdev) +{ + + USB_OTG_DIEPINTn_TypeDef diepint; + uint32_t fifoemptymsk, msk, emp; + + msk = USB_OTG_READ_REG32(&pdev->regs.DREGS->DINEP1MSK); + emp = USB_OTG_READ_REG32(&pdev->regs.DREGS->DIEPEMPMSK); + msk |= ((emp >> 1 ) & 0x1) << 7; + diepint.d32 = USB_OTG_READ_REG32(&pdev->regs.INEP_REGS[1]->DIEPINT) & msk; + + if ( diepint.b.xfercompl ) + { + fifoemptymsk = 0x1 << 1; + USB_OTG_MODIFY_REG32(&pdev->regs.DREGS->DIEPEMPMSK, fifoemptymsk, 0); + CLEAR_IN_EP_INTR(1, xfercompl); + /* TX COMPLETE */ + USBD_DCD_INT_fops->DataInStage(pdev , 1); + } + if ( diepint.b.ahberr ) + { + CLEAR_IN_EP_INTR(1, ahberr); + } + if ( diepint.b.epdisabled ) + { + CLEAR_IN_EP_INTR(1, epdisabled); + } + if ( diepint.b.timeout ) + { + CLEAR_IN_EP_INTR(1, timeout); + } + if (diepint.b.intktxfemp) + { + CLEAR_IN_EP_INTR(1, intktxfemp); + } + if (diepint.b.intknepmis) + { + CLEAR_IN_EP_INTR(1, intknepmis); + } + if (diepint.b.inepnakeff) + { + CLEAR_IN_EP_INTR(1, inepnakeff); + } + if (diepint.b.emptyintr) + { + DCD_WriteEmptyTxFifo(pdev , 1); + CLEAR_IN_EP_INTR(1, emptyintr); + } + return 1; +} +#endif + +/** +* @brief STM32_USBF_OTG_ISR_Handler +* handles all USB Interrupts +* @param pdev: device instance +* @retval status +*/ +uint32_t USBD_OTG_ISR_Handler (USB_OTG_CORE_HANDLE *pdev) +{ + USB_OTG_GINTSTS_TypeDef gintr_status; + uint32_t retval = 0; + + if (USB_OTG_IsDeviceMode(pdev)) /* ensure that we are in device mode */ + { + gintr_status.d32 = USB_OTG_ReadCoreItr(pdev); + if (!gintr_status.d32) /* avoid spurious interrupt */ + { + return 0; + } + + if (gintr_status.b.outepintr) + { + retval |= DCD_HandleOutEP_ISR(pdev); + } + + if (gintr_status.b.inepint) + { + retval |= DCD_HandleInEP_ISR(pdev); + } + + if (gintr_status.b.modemismatch) + { + USB_OTG_GINTSTS_TypeDef gintsts; + + /* Clear interrupt */ + gintsts.d32 = 0; + gintsts.b.modemismatch = 1; + USB_OTG_WRITE_REG32(&pdev->regs.GREGS->GINTSTS, gintsts.d32); + } + + if (gintr_status.b.wkupintr) + { + retval |= DCD_HandleResume_ISR(pdev); + } + + if (gintr_status.b.usbsuspend) + { + retval |= DCD_HandleUSBSuspend_ISR(pdev); + } + if (gintr_status.b.sofintr) + { + retval |= DCD_HandleSof_ISR(pdev); + + } + + if (gintr_status.b.rxstsqlvl) + { + retval |= DCD_HandleRxStatusQueueLevel_ISR(pdev); + + } + + if (gintr_status.b.usbreset) + { + retval |= DCD_HandleUsbReset_ISR(pdev); + + } + if (gintr_status.b.enumdone) + { + retval |= DCD_HandleEnumDone_ISR(pdev); + } + + if (gintr_status.b.incomplisoin) + { + retval |= DCD_IsoINIncomplete_ISR(pdev); + } + + if (gintr_status.b.incomplisoout) + { + retval |= DCD_IsoOUTIncomplete_ISR(pdev); + } +#ifdef VBUS_SENSING_ENABLED + if (gintr_status.b.sessreqintr) + { + retval |= DCD_SessionRequest_ISR(pdev); + } + + if (gintr_status.b.otgintr) + { + retval |= DCD_OTG_ISR(pdev); + } +#endif + } + return retval; +} + +#ifdef VBUS_SENSING_ENABLED +/** +* @brief DCD_SessionRequest_ISR +* Indicates that the USB_OTG controller has detected a connection +* @param pdev: device instance +* @retval status +*/ +static uint32_t DCD_SessionRequest_ISR(USB_OTG_CORE_HANDLE *pdev) +{ + USB_OTG_GINTSTS_TypeDef gintsts; + USBD_DCD_INT_fops->DevConnected (pdev); + + /* Clear interrupt */ + gintsts.d32 = 0; + gintsts.b.sessreqintr = 1; + USB_OTG_WRITE_REG32 (&pdev->regs.GREGS->GINTSTS, gintsts.d32); + return 1; +} + +/** +* @brief DCD_OTG_ISR +* Indicates that the USB_OTG controller has detected an OTG event: +* used to detect the end of session i.e. disconnection +* @param pdev: device instance +* @retval status +*/ +static uint32_t DCD_OTG_ISR(USB_OTG_CORE_HANDLE *pdev) +{ + + USB_OTG_GOTGINT_TypeDef gotgint; + + gotgint.d32 = USB_OTG_READ_REG32(&pdev->regs.GREGS->GOTGINT); + + if (gotgint.b.sesenddet) + { + USBD_DCD_INT_fops->DevDisconnected (pdev); + } + /* Clear OTG interrupt */ + USB_OTG_WRITE_REG32(&pdev->regs.GREGS->GOTGINT, gotgint.d32); + return 1; +} +#endif +/** +* @brief DCD_HandleResume_ISR +* Indicates that the USB_OTG controller has detected a resume or +* remote Wake-up sequence +* @param pdev: device instance +* @retval status +*/ +static uint32_t DCD_HandleResume_ISR(USB_OTG_CORE_HANDLE *pdev) +{ + USB_OTG_GINTSTS_TypeDef gintsts; + USB_OTG_DCTL_TypeDef devctl; + USB_OTG_PCGCCTL_TypeDef power; + + if(pdev->cfg.low_power) + { + /* un-gate USB Core clock */ + power.d32 = USB_OTG_READ_REG32(pdev->regs.PCGCCTL); + power.b.gatehclk = 0; + power.b.stoppclk = 0; + USB_OTG_WRITE_REG32(pdev->regs.PCGCCTL, power.d32); + } + + /* Clear the Remote Wake-up Signaling */ + devctl.d32 = 0; + devctl.b.rmtwkupsig = 1; + USB_OTG_MODIFY_REG32(&pdev->regs.DREGS->DCTL, devctl.d32, 0); + + /* Inform upper layer by the Resume Event */ + USBD_DCD_INT_fops->Resume (pdev); + + /* Clear interrupt */ + gintsts.d32 = 0; + gintsts.b.wkupintr = 1; + USB_OTG_WRITE_REG32 (&pdev->regs.GREGS->GINTSTS, gintsts.d32); + return 1; +} + +/** +* @brief USB_OTG_HandleUSBSuspend_ISR +* Indicates that SUSPEND state has been detected on the USB +* @param pdev: device instance +* @retval status +*/ +static uint32_t DCD_HandleUSBSuspend_ISR(USB_OTG_CORE_HANDLE *pdev) +{ + USB_OTG_GINTSTS_TypeDef gintsts; + USB_OTG_PCGCCTL_TypeDef power; + USB_OTG_DSTS_TypeDef dsts; + + USBD_DCD_INT_fops->Suspend (pdev); + + dsts.d32 = USB_OTG_READ_REG32(&pdev->regs.DREGS->DSTS); + + /* Clear interrupt */ + gintsts.d32 = 0; + gintsts.b.usbsuspend = 1; + USB_OTG_WRITE_REG32(&pdev->regs.GREGS->GINTSTS, gintsts.d32); + + if((pdev->cfg.low_power) && (dsts.b.suspsts == 1)) + { + /* switch-off the clocks */ + power.d32 = 0; + power.b.stoppclk = 1; + USB_OTG_MODIFY_REG32(pdev->regs.PCGCCTL, 0, power.d32); + + power.b.gatehclk = 1; + USB_OTG_MODIFY_REG32(pdev->regs.PCGCCTL, 0, power.d32); + + /* Request to enter Sleep mode after exit from current ISR */ + SCB->SCR |= (SCB_SCR_SLEEPDEEP_Msk | SCB_SCR_SLEEPONEXIT_Msk); + } + return 1; +} + +/** +* @brief DCD_HandleInEP_ISR +* Indicates that an IN EP has a pending Interrupt +* @param pdev: device instance +* @retval status +*/ +static uint32_t DCD_HandleInEP_ISR(USB_OTG_CORE_HANDLE *pdev) +{ + USB_OTG_DIEPINTn_TypeDef diepint; + + uint32_t ep_intr; + uint32_t epnum = 0; + uint32_t fifoemptymsk; + diepint.d32 = 0; + ep_intr = USB_OTG_ReadDevAllInEPItr(pdev); + + while ( ep_intr ) + { + if (ep_intr&0x1) /* In ITR */ + { + diepint.d32 = DCD_ReadDevInEP(pdev , epnum); /* Get In ITR status */ + if ( diepint.b.xfercompl ) + { + fifoemptymsk = 0x1 << epnum; + USB_OTG_MODIFY_REG32(&pdev->regs.DREGS->DIEPEMPMSK, fifoemptymsk, 0); + CLEAR_IN_EP_INTR(epnum, xfercompl); + /* TX COMPLETE */ + USBD_DCD_INT_fops->DataInStage(pdev , epnum); + + if (pdev->cfg.dma_enable == 1) + { + if((epnum == 0) && (pdev->dev.device_state == USB_OTG_EP0_STATUS_IN)) + { + /* prepare to rx more setup packets */ + USB_OTG_EP0_OutStart(pdev); + } + } + } + if ( diepint.b.ahberr ) + { + CLEAR_IN_EP_INTR(epnum, ahberr); + } + if ( diepint.b.timeout ) + { + CLEAR_IN_EP_INTR(epnum, timeout); + } + if (diepint.b.intktxfemp) + { + CLEAR_IN_EP_INTR(epnum, intktxfemp); + } + if (diepint.b.intknepmis) + { + CLEAR_IN_EP_INTR(epnum, intknepmis); + } + if (diepint.b.inepnakeff) + { + CLEAR_IN_EP_INTR(epnum, inepnakeff); + } + if ( diepint.b.epdisabled ) + { + CLEAR_IN_EP_INTR(epnum, epdisabled); + } + if (diepint.b.emptyintr) + { + + DCD_WriteEmptyTxFifo(pdev , epnum); + + CLEAR_IN_EP_INTR(epnum, emptyintr); + } + } + epnum++; + ep_intr >>= 1; + } + + return 1; +} + +/** +* @brief DCD_HandleOutEP_ISR +* Indicates that an OUT EP has a pending Interrupt +* @param pdev: device instance +* @retval status +*/ +static uint32_t DCD_HandleOutEP_ISR(USB_OTG_CORE_HANDLE *pdev) +{ + uint32_t ep_intr; + USB_OTG_DOEPINTn_TypeDef doepint; + USB_OTG_DEPXFRSIZ_TypeDef deptsiz; + uint32_t epnum = 0; + + doepint.d32 = 0; + + /* Read in the device interrupt bits */ + ep_intr = USB_OTG_ReadDevAllOutEp_itr(pdev); + + while ( ep_intr ) + { + if (ep_intr&0x1) + { + + doepint.d32 = USB_OTG_ReadDevOutEP_itr(pdev, epnum); + + /* Transfer complete */ + if ( doepint.b.xfercompl ) + { + /* Clear the bit in DOEPINTn for this interrupt */ + CLEAR_OUT_EP_INTR(epnum, xfercompl); + if (pdev->cfg.dma_enable == 1) + { + deptsiz.d32 = USB_OTG_READ_REG32(&(pdev->regs.OUTEP_REGS[epnum]->DOEPTSIZ)); + /*ToDo : handle more than one single MPS size packet */ + pdev->dev.out_ep[epnum].xfer_count = pdev->dev.out_ep[epnum].maxpacket - \ + deptsiz.b.xfersize; + } + /* Inform upper layer: data ready */ + /* RX COMPLETE */ + USBD_DCD_INT_fops->DataOutStage(pdev , epnum); + + if (pdev->cfg.dma_enable == 1) + { + if((epnum == 0) && (pdev->dev.device_state == USB_OTG_EP0_STATUS_OUT)) + { + /* prepare to rx more setup packets */ + USB_OTG_EP0_OutStart(pdev); + } + } + } + /* Endpoint disable */ + if ( doepint.b.epdisabled ) + { + /* Clear the bit in DOEPINTn for this interrupt */ + CLEAR_OUT_EP_INTR(epnum, epdisabled); + } + /* AHB Error */ + if ( doepint.b.ahberr ) + { + CLEAR_OUT_EP_INTR(epnum, ahberr); + } + /* Setup Phase Done (control EPs) */ + if ( doepint.b.setup ) + { + + /* inform the upper layer that a setup packet is available */ + /* SETUP COMPLETE */ + USBD_DCD_INT_fops->SetupStage(pdev); + CLEAR_OUT_EP_INTR(epnum, setup); + } + } + epnum++; + ep_intr >>= 1; + } + return 1; +} + +/** +* @brief DCD_HandleSof_ISR +* Handles the SOF Interrupts +* @param pdev: device instance +* @retval status +*/ +static uint32_t DCD_HandleSof_ISR(USB_OTG_CORE_HANDLE *pdev) +{ + USB_OTG_GINTSTS_TypeDef GINTSTS; + + + USBD_DCD_INT_fops->SOF(pdev); + + /* Clear interrupt */ + GINTSTS.d32 = 0; + GINTSTS.b.sofintr = 1; + USB_OTG_WRITE_REG32 (&pdev->regs.GREGS->GINTSTS, GINTSTS.d32); + + return 1; +} + +/** +* @brief DCD_HandleRxStatusQueueLevel_ISR +* Handles the Rx Status Queue Level Interrupt +* @param pdev: device instance +* @retval status +*/ +static uint32_t DCD_HandleRxStatusQueueLevel_ISR(USB_OTG_CORE_HANDLE *pdev) +{ + USB_OTG_GINTMSK_TypeDef int_mask; + USB_OTG_DRXSTS_TypeDef status; + USB_OTG_EP *ep; + + /* Disable the Rx Status Queue Level interrupt */ + int_mask.d32 = 0; + int_mask.b.rxstsqlvl = 1; + USB_OTG_MODIFY_REG32( &pdev->regs.GREGS->GINTMSK, int_mask.d32, 0); + + /* Get the Status from the top of the FIFO */ + status.d32 = USB_OTG_READ_REG32( &pdev->regs.GREGS->GRXSTSP ); + + ep = &pdev->dev.out_ep[status.b.epnum]; + + switch (status.b.pktsts) + { + case STS_GOUT_NAK: + break; + case STS_DATA_UPDT: + if (status.b.bcnt) + { + USB_OTG_ReadPacket(pdev,ep->xfer_buff, status.b.bcnt); + ep->xfer_buff += status.b.bcnt; + ep->xfer_count += status.b.bcnt; + } + break; + case STS_XFER_COMP: + break; + case STS_SETUP_COMP: + break; + case STS_SETUP_UPDT: + /* Copy the setup packet received in FIFO into the setup buffer in RAM */ + USB_OTG_ReadPacket(pdev , pdev->dev.setup_packet, 8); + ep->xfer_count += status.b.bcnt; + break; + default: + break; + } + + /* Enable the Rx Status Queue Level interrupt */ + USB_OTG_MODIFY_REG32( &pdev->regs.GREGS->GINTMSK, 0, int_mask.d32); + + return 1; +} + +/** +* @brief DCD_WriteEmptyTxFifo +* check FIFO for the next packet to be loaded +* @param pdev: device instance +* @retval status +*/ +static uint32_t DCD_WriteEmptyTxFifo(USB_OTG_CORE_HANDLE *pdev, uint32_t epnum) +{ + USB_OTG_DTXFSTSn_TypeDef txstatus; + USB_OTG_EP *ep; + uint32_t len = 0; + uint32_t len32b; + txstatus.d32 = 0; + + ep = &pdev->dev.in_ep[epnum]; + + len = ep->xfer_len - ep->xfer_count; + + if (len > ep->maxpacket) + { + len = ep->maxpacket; + } + + len32b = (len + 3) / 4; + txstatus.d32 = USB_OTG_READ_REG32( &pdev->regs.INEP_REGS[epnum]->DTXFSTS); + + + + while (txstatus.b.txfspcavail > len32b && + ep->xfer_count < ep->xfer_len && + ep->xfer_len != 0) + { + /* Write the FIFO */ + len = ep->xfer_len - ep->xfer_count; + + if (len > ep->maxpacket) + { + len = ep->maxpacket; + } + len32b = (len + 3) / 4; + + USB_OTG_WritePacket (pdev , ep->xfer_buff, epnum, len); + + ep->xfer_buff += len; + ep->xfer_count += len; + + txstatus.d32 = USB_OTG_READ_REG32(&pdev->regs.INEP_REGS[epnum]->DTXFSTS); + } + + return 1; +} + +/** +* @brief DCD_HandleUsbReset_ISR +* This interrupt occurs when a USB Reset is detected +* @param pdev: device instance +* @retval status +*/ +static uint32_t DCD_HandleUsbReset_ISR(USB_OTG_CORE_HANDLE *pdev) +{ + USB_OTG_DAINT_TypeDef daintmsk; + USB_OTG_DOEPMSK_TypeDef doepmsk; + USB_OTG_DIEPMSK_TypeDef diepmsk; + USB_OTG_DCFG_TypeDef dcfg; + USB_OTG_DCTL_TypeDef dctl; + USB_OTG_GINTSTS_TypeDef gintsts; + uint32_t i; + + dctl.d32 = 0; + daintmsk.d32 = 0; + doepmsk.d32 = 0; + diepmsk.d32 = 0; + dcfg.d32 = 0; + gintsts.d32 = 0; + + /* Clear the Remote Wake-up Signaling */ + dctl.b.rmtwkupsig = 1; + USB_OTG_MODIFY_REG32(&pdev->regs.DREGS->DCTL, dctl.d32, 0 ); + + /* Flush the Tx FIFO */ + USB_OTG_FlushTxFifo(pdev , 0 ); + + for (i = 0; i < pdev->cfg.dev_endpoints ; i++) + { + USB_OTG_WRITE_REG32( &pdev->regs.INEP_REGS[i]->DIEPINT, 0xFF); + USB_OTG_WRITE_REG32( &pdev->regs.OUTEP_REGS[i]->DOEPINT, 0xFF); + } + USB_OTG_WRITE_REG32( &pdev->regs.DREGS->DAINT, 0xFFFFFFFF ); + + daintmsk.ep.in = 1; + daintmsk.ep.out = 1; + USB_OTG_WRITE_REG32( &pdev->regs.DREGS->DAINTMSK, daintmsk.d32 ); + + doepmsk.b.setup = 1; + doepmsk.b.xfercompl = 1; + doepmsk.b.ahberr = 1; + doepmsk.b.epdisabled = 1; + USB_OTG_WRITE_REG32( &pdev->regs.DREGS->DOEPMSK, doepmsk.d32 ); +#ifdef USB_OTG_HS_DEDICATED_EP1_ENABLED + USB_OTG_WRITE_REG32( &pdev->regs.DREGS->DOUTEP1MSK, doepmsk.d32 ); +#endif + diepmsk.b.xfercompl = 1; + diepmsk.b.timeout = 1; + diepmsk.b.epdisabled = 1; + diepmsk.b.ahberr = 1; + diepmsk.b.intknepmis = 1; + USB_OTG_WRITE_REG32( &pdev->regs.DREGS->DIEPMSK, diepmsk.d32 ); +#ifdef USB_OTG_HS_DEDICATED_EP1_ENABLED + USB_OTG_WRITE_REG32( &pdev->regs.DREGS->DINEP1MSK, diepmsk.d32 ); +#endif + /* Reset Device Address */ + dcfg.d32 = USB_OTG_READ_REG32( &pdev->regs.DREGS->DCFG); + dcfg.b.devaddr = 0; + USB_OTG_WRITE_REG32( &pdev->regs.DREGS->DCFG, dcfg.d32); + + + /* setup EP0 to receive SETUP packets */ + USB_OTG_EP0_OutStart(pdev); + + /* Clear interrupt */ + gintsts.d32 = 0; + gintsts.b.usbreset = 1; + USB_OTG_WRITE_REG32 (&pdev->regs.GREGS->GINTSTS, gintsts.d32); + + /*Reset internal state machine */ + USBD_DCD_INT_fops->Reset(pdev); + return 1; +} + +/** +* @brief DCD_HandleEnumDone_ISR +* Read the device status register and set the device speed +* @param pdev: device instance +* @retval status +*/ +static uint32_t DCD_HandleEnumDone_ISR(USB_OTG_CORE_HANDLE *pdev) +{ + USB_OTG_GINTSTS_TypeDef gintsts; + USB_OTG_GUSBCFG_TypeDef gusbcfg; + + USB_OTG_EP0Activate(pdev); + + /* Set USB turn-around time based on device speed and PHY interface. */ + gusbcfg.d32 = USB_OTG_READ_REG32(&pdev->regs.GREGS->GUSBCFG); + + /* Full or High speed */ + if ( USB_OTG_GetDeviceSpeed(pdev) == USB_SPEED_HIGH) + { + pdev->cfg.speed = USB_OTG_SPEED_HIGH; + pdev->cfg.mps = USB_OTG_HS_MAX_PACKET_SIZE ; + gusbcfg.b.usbtrdtim = 9; + } + else + { + pdev->cfg.speed = USB_OTG_SPEED_FULL; + pdev->cfg.mps = USB_OTG_FS_MAX_PACKET_SIZE ; + gusbcfg.b.usbtrdtim = 5; + } + + USB_OTG_WRITE_REG32(&pdev->regs.GREGS->GUSBCFG, gusbcfg.d32); + + /* Clear interrupt */ + gintsts.d32 = 0; + gintsts.b.enumdone = 1; + USB_OTG_WRITE_REG32( &pdev->regs.GREGS->GINTSTS, gintsts.d32 ); + return 1; +} + + +/** +* @brief DCD_IsoINIncomplete_ISR +* handle the ISO IN incomplete interrupt +* @param pdev: device instance +* @retval status +*/ +static uint32_t DCD_IsoINIncomplete_ISR(USB_OTG_CORE_HANDLE *pdev) +{ + USB_OTG_GINTSTS_TypeDef gintsts; + + gintsts.d32 = 0; + + USBD_DCD_INT_fops->IsoINIncomplete (pdev); + + /* Clear interrupt */ + gintsts.b.incomplisoin = 1; + USB_OTG_WRITE_REG32(&pdev->regs.GREGS->GINTSTS, gintsts.d32); + + return 1; +} + +/** +* @brief DCD_IsoOUTIncomplete_ISR +* handle the ISO OUT incomplete interrupt +* @param pdev: device instance +* @retval status +*/ +static uint32_t DCD_IsoOUTIncomplete_ISR(USB_OTG_CORE_HANDLE *pdev) +{ + USB_OTG_GINTSTS_TypeDef gintsts; + + gintsts.d32 = 0; + + USBD_DCD_INT_fops->IsoOUTIncomplete (pdev); + + /* Clear interrupt */ + gintsts.b.incomplisoout = 1; + USB_OTG_WRITE_REG32(&pdev->regs.GREGS->GINTSTS, gintsts.d32); + return 1; +} +/** +* @brief DCD_ReadDevInEP +* Reads ep flags +* @param pdev: device instance +* @retval status +*/ +static uint32_t DCD_ReadDevInEP (USB_OTG_CORE_HANDLE *pdev, uint8_t epnum) +{ + uint32_t v, msk, emp; + msk = USB_OTG_READ_REG32(&pdev->regs.DREGS->DIEPMSK); + emp = USB_OTG_READ_REG32(&pdev->regs.DREGS->DIEPEMPMSK); + msk |= ((emp >> epnum) & 0x1) << 7; + v = USB_OTG_READ_REG32(&pdev->regs.INEP_REGS[epnum]->DIEPINT) & msk; + return v; +} + + + +/** +* @} +*/ + +/** +* @} +*/ + +/** +* @} +*/ +#endif + +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ diff --git a/libcodec2-android/src/codec2/stm32/usb_lib/otg/usb_dcd_int.h b/libcodec2-android/src/codec2/stm32/usb_lib/otg/usb_dcd_int.h new file mode 100644 index 0000000..3cbebd8 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/usb_lib/otg/usb_dcd_int.h @@ -0,0 +1,121 @@ +/** + ****************************************************************************** + * @file usb_dcd_int.h + * @author MCD Application Team + * @version V2.0.0 + * @date 22-July-2011 + * @brief Peripheral Device Interface Layer + ****************************************************************************** + * @attention + * + * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS + * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE + * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY + * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING + * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE + * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + *

© COPYRIGHT 2011 STMicroelectronics

+ ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef USB_DCD_INT_H__ +#define USB_DCD_INT_H__ + +/* Includes ------------------------------------------------------------------*/ +#include "usb_dcd.h" + + + +/** @addtogroup USB_OTG_DRIVER + * @{ + */ + +/** @defgroup USB_DCD_INT + * @brief This file is the + * @{ + */ + + +/** @defgroup USB_DCD_INT_Exported_Defines + * @{ + */ + +typedef struct _USBD_DCD_INT +{ + uint8_t (* DataOutStage) (USB_OTG_CORE_HANDLE *pdev , uint8_t epnum); + uint8_t (* DataInStage) (USB_OTG_CORE_HANDLE *pdev , uint8_t epnum); + uint8_t (* SetupStage) (USB_OTG_CORE_HANDLE *pdev); + uint8_t (* SOF) (USB_OTG_CORE_HANDLE *pdev); + uint8_t (* Reset) (USB_OTG_CORE_HANDLE *pdev); + uint8_t (* Suspend) (USB_OTG_CORE_HANDLE *pdev); + uint8_t (* Resume) (USB_OTG_CORE_HANDLE *pdev); + uint8_t (* IsoINIncomplete) (USB_OTG_CORE_HANDLE *pdev); + uint8_t (* IsoOUTIncomplete) (USB_OTG_CORE_HANDLE *pdev); + + uint8_t (* DevConnected) (USB_OTG_CORE_HANDLE *pdev); + uint8_t (* DevDisconnected) (USB_OTG_CORE_HANDLE *pdev); + +}USBD_DCD_INT_cb_TypeDef; + +extern USBD_DCD_INT_cb_TypeDef *USBD_DCD_INT_fops; +/** + * @} + */ + + +/** @defgroup USB_DCD_INT_Exported_Types + * @{ + */ +/** + * @} + */ + +/** @defgroup USB_DCD_INT_Exported_Macros + * @{ + */ + +#define CLEAR_IN_EP_INTR(epnum,intr) \ + diepint.d32=0; \ + diepint.b.intr = 1; \ + USB_OTG_WRITE_REG32(&pdev->regs.INEP_REGS[epnum]->DIEPINT,diepint.d32); + +#define CLEAR_OUT_EP_INTR(epnum,intr) \ + doepint.d32=0; \ + doepint.b.intr = 1; \ + USB_OTG_WRITE_REG32(&pdev->regs.OUTEP_REGS[epnum]->DOEPINT,doepint.d32); + +/** + * @} + */ + +/** @defgroup USB_DCD_INT_Exported_Variables + * @{ + */ +/** + * @} + */ + +/** @defgroup USB_DCD_INT_Exported_FunctionsPrototype + * @{ + */ + +uint32_t USBD_OTG_ISR_Handler (USB_OTG_CORE_HANDLE *pdev); + +/** + * @} + */ + + +#endif // USB_DCD_INT_H__ + +/** + * @} + */ + +/** + * @} + */ +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ + diff --git a/libcodec2-android/src/codec2/stm32/usb_lib/otg/usb_defines.h b/libcodec2-android/src/codec2/stm32/usb_lib/otg/usb_defines.h new file mode 100644 index 0000000..70f9952 --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/usb_lib/otg/usb_defines.h @@ -0,0 +1,244 @@ +/** + ****************************************************************************** + * @file usb_defines.h + * @author MCD Application Team + * @version V2.0.0 + * @date 22-July-2011 + * @brief Header of the Core Layer + ****************************************************************************** + * @attention + * + * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS + * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE + * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY + * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING + * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE + * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + *

© COPYRIGHT 2011 STMicroelectronics

+ ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __USB_DEF_H__ +#define __USB_DEF_H__ + +/* Includes ------------------------------------------------------------------*/ +#include "usb_conf.h" + +/** @addtogroup USB_OTG_DRIVER + * @{ + */ + +/** @defgroup USB_DEFINES + * @brief This file is the + * @{ + */ + + +/** @defgroup USB_DEFINES_Exported_Defines + * @{ + */ +/** + * @} + */ + + +/** @defgroup _CORE_DEFINES_ + * @{ + */ + +#define USB_OTG_SPEED_PARAM_HIGH 0 +#define USB_OTG_SPEED_PARAM_HIGH_IN_FULL 1 +#define USB_OTG_SPEED_PARAM_FULL 3 + +#define USB_OTG_SPEED_HIGH 0 +#define USB_OTG_SPEED_FULL 1 + +#define USB_OTG_ULPI_PHY 1 +#define USB_OTG_EMBEDDED_PHY 2 +#define USB_OTG_I2C_PHY 3 + +/** + * @} + */ + + +/** @defgroup _GLOBAL_DEFINES_ + * @{ + */ +#define GAHBCFG_TXFEMPTYLVL_EMPTY 1 +#define GAHBCFG_TXFEMPTYLVL_HALFEMPTY 0 +#define GAHBCFG_GLBINT_ENABLE 1 +#define GAHBCFG_INT_DMA_BURST_SINGLE 0 +#define GAHBCFG_INT_DMA_BURST_INCR 1 +#define GAHBCFG_INT_DMA_BURST_INCR4 3 +#define GAHBCFG_INT_DMA_BURST_INCR8 5 +#define GAHBCFG_INT_DMA_BURST_INCR16 7 +#define GAHBCFG_DMAENABLE 1 +#define GAHBCFG_TXFEMPTYLVL_EMPTY 1 +#define GAHBCFG_TXFEMPTYLVL_HALFEMPTY 0 +#define GRXSTS_PKTSTS_IN 2 +#define GRXSTS_PKTSTS_IN_XFER_COMP 3 +#define GRXSTS_PKTSTS_DATA_TOGGLE_ERR 5 +#define GRXSTS_PKTSTS_CH_HALTED 7 +/** + * @} + */ + + +/** @defgroup _OnTheGo_DEFINES_ + * @{ + */ +#define MODE_HNP_SRP_CAPABLE 0 +#define MODE_SRP_ONLY_CAPABLE 1 +#define MODE_NO_HNP_SRP_CAPABLE 2 +#define MODE_SRP_CAPABLE_DEVICE 3 +#define MODE_NO_SRP_CAPABLE_DEVICE 4 +#define MODE_SRP_CAPABLE_HOST 5 +#define MODE_NO_SRP_CAPABLE_HOST 6 +#define A_HOST 1 +#define A_SUSPEND 2 +#define A_PERIPHERAL 3 +#define B_PERIPHERAL 4 +#define B_HOST 5 +#define DEVICE_MODE 0 +#define HOST_MODE 1 +#define OTG_MODE 2 +/** + * @} + */ + + +/** @defgroup __DEVICE_DEFINES_ + * @{ + */ +#define DSTS_ENUMSPD_HS_PHY_30MHZ_OR_60MHZ 0 +#define DSTS_ENUMSPD_FS_PHY_30MHZ_OR_60MHZ 1 +#define DSTS_ENUMSPD_LS_PHY_6MHZ 2 +#define DSTS_ENUMSPD_FS_PHY_48MHZ 3 + +#define DCFG_FRAME_INTERVAL_80 0 +#define DCFG_FRAME_INTERVAL_85 1 +#define DCFG_FRAME_INTERVAL_90 2 +#define DCFG_FRAME_INTERVAL_95 3 + +#define DEP0CTL_MPS_64 0 +#define DEP0CTL_MPS_32 1 +#define DEP0CTL_MPS_16 2 +#define DEP0CTL_MPS_8 3 + +#define EP_SPEED_LOW 0 +#define EP_SPEED_FULL 1 +#define EP_SPEED_HIGH 2 + +#define EP_TYPE_CTRL 0 +#define EP_TYPE_ISOC 1 +#define EP_TYPE_BULK 2 +#define EP_TYPE_INTR 3 +#define EP_TYPE_MSK 3 + +#define STS_GOUT_NAK 1 +#define STS_DATA_UPDT 2 +#define STS_XFER_COMP 3 +#define STS_SETUP_COMP 4 +#define STS_SETUP_UPDT 6 +/** + * @} + */ + + +/** @defgroup __HOST_DEFINES_ + * @{ + */ +#define HC_PID_DATA0 0 +#define HC_PID_DATA2 1 +#define HC_PID_DATA1 2 +#define HC_PID_SETUP 3 + +#define HPRT0_PRTSPD_HIGH_SPEED 0 +#define HPRT0_PRTSPD_FULL_SPEED 1 +#define HPRT0_PRTSPD_LOW_SPEED 2 + +#define HCFG_30_60_MHZ 0 +#define HCFG_48_MHZ 1 +#define HCFG_6_MHZ 2 + +#define HCCHAR_CTRL 0 +#define HCCHAR_ISOC 1 +#define HCCHAR_BULK 2 +#define HCCHAR_INTR 3 + +#define MIN(a, b) (((a) < (b)) ? (a) : (b)) + +/** + * @} + */ + + +/** @defgroup USB_DEFINES_Exported_Types + * @{ + */ + +typedef enum +{ + USB_OTG_HS_CORE_ID = 0, + USB_OTG_FS_CORE_ID = 1 +}USB_OTG_CORE_ID_TypeDef; +/** + * @} + */ + + +/** @defgroup USB_DEFINES_Exported_Macros + * @{ + */ +/** + * @} + */ + +/** @defgroup USB_DEFINES_Exported_Variables + * @{ + */ +/** + * @} + */ + +/** @defgroup USB_DEFINES_Exported_FunctionsPrototype + * @{ + */ +/** + * @} + */ + + +/** @defgroup Internal_Macro's + * @{ + */ +#define USB_OTG_READ_REG32(reg) (*(__IO uint32_t *)reg) +#define USB_OTG_WRITE_REG32(reg,value) (*(__IO uint32_t *)reg = value) +#define USB_OTG_MODIFY_REG32(reg,clear_mask,set_mask) \ + USB_OTG_WRITE_REG32(reg, (((USB_OTG_READ_REG32(reg)) & ~clear_mask) | set_mask ) ) + +/******************************************************************************** + ENUMERATION TYPE +********************************************************************************/ +enum USB_OTG_SPEED { + USB_SPEED_UNKNOWN = 0, + USB_SPEED_LOW, + USB_SPEED_FULL, + USB_SPEED_HIGH +}; + +#endif //__USB_DEFINES__H__ + + +/** + * @} + */ + +/** + * @} + */ +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ + diff --git a/libcodec2-android/src/codec2/stm32/usb_lib/otg/usb_regs.h b/libcodec2-android/src/codec2/stm32/usb_lib/otg/usb_regs.h new file mode 100644 index 0000000..57e478c --- /dev/null +++ b/libcodec2-android/src/codec2/stm32/usb_lib/otg/usb_regs.h @@ -0,0 +1,1206 @@ +/** + ****************************************************************************** + * @file usb_regs.h + * @author MCD Application Team + * @version V2.0.0 + * @date 22-July-2011 + * @brief hardware registers + ****************************************************************************** + * @attention + * + * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS + * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE + * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY + * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING + * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE + * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + *

© COPYRIGHT 2011 STMicroelectronics

+ ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __USB_OTG_REGS_H__ +#define __USB_OTG_REGS_H__ + +/* Includes ------------------------------------------------------------------*/ +#include "usb_conf.h" + + +/** @addtogroup USB_OTG_DRIVER + * @{ + */ + +/** @defgroup USB_REGS + * @brief This file is the + * @{ + */ + + +/** @defgroup USB_REGS_Exported_Defines + * @{ + */ + +#define USB_OTG_HS_BASE_ADDR 0x40040000 +#define USB_OTG_FS_BASE_ADDR 0x50000000 + +#define USB_OTG_CORE_GLOBAL_REGS_OFFSET 0x000 +#define USB_OTG_DEV_GLOBAL_REG_OFFSET 0x800 +#define USB_OTG_DEV_IN_EP_REG_OFFSET 0x900 +#define USB_OTG_EP_REG_OFFSET 0x20 +#define USB_OTG_DEV_OUT_EP_REG_OFFSET 0xB00 +#define USB_OTG_HOST_GLOBAL_REG_OFFSET 0x400 +#define USB_OTG_HOST_PORT_REGS_OFFSET 0x440 +#define USB_OTG_HOST_CHAN_REGS_OFFSET 0x500 +#define USB_OTG_CHAN_REGS_OFFSET 0x20 +#define USB_OTG_PCGCCTL_OFFSET 0xE00 +#define USB_OTG_DATA_FIFO_OFFSET 0x1000 +#define USB_OTG_DATA_FIFO_SIZE 0x1000 + + +#define USB_OTG_MAX_TX_FIFOS 15 + +#define USB_OTG_HS_MAX_PACKET_SIZE 512 +#define USB_OTG_FS_MAX_PACKET_SIZE 64 +#define USB_OTG_MAX_EP0_SIZE 64 +/** + * @} + */ + +/** @defgroup USB_REGS_Exported_Types + * @{ + */ + +/** @defgroup __USB_OTG_Core_register + * @{ + */ +typedef struct _USB_OTG_GREGS //000h +{ + __IO uint32_t GOTGCTL; /* USB_OTG Control and Status Register 000h*/ + __IO uint32_t GOTGINT; /* USB_OTG Interrupt Register 004h*/ + __IO uint32_t GAHBCFG; /* Core AHB Configuration Register 008h*/ + __IO uint32_t GUSBCFG; /* Core USB Configuration Register 00Ch*/ + __IO uint32_t GRSTCTL; /* Core Reset Register 010h*/ + __IO uint32_t GINTSTS; /* Core Interrupt Register 014h*/ + __IO uint32_t GINTMSK; /* Core Interrupt Mask Register 018h*/ + __IO uint32_t GRXSTSR; /* Receive Sts Q Read Register 01Ch*/ + __IO uint32_t GRXSTSP; /* Receive Sts Q Read & POP Register 020h*/ + __IO uint32_t GRXFSIZ; /* Receive FIFO Size Register 024h*/ + __IO uint32_t DIEPTXF0_HNPTXFSIZ; /* EP0 / Non Periodic Tx FIFO Size Register 028h*/ + __IO uint32_t HNPTXSTS; /* Non Periodic Tx FIFO/Queue Sts reg 02Ch*/ + __IO uint32_t GI2CCTL; /* I2C Access Register 030h*/ + uint32_t Reserved34; /* PHY Vendor Control Register 034h*/ + __IO uint32_t GCCFG; /* General Purpose IO Register 038h*/ + __IO uint32_t CID; /* User ID Register 03Ch*/ + uint32_t Reserved40[48]; /* Reserved 040h-0FFh*/ + __IO uint32_t HPTXFSIZ; /* Host Periodic Tx FIFO Size Reg 100h*/ + __IO uint32_t DIEPTXF[USB_OTG_MAX_TX_FIFOS];/* dev Periodic Transmit FIFO */ +} +USB_OTG_GREGS; +/** + * @} + */ + + +/** @defgroup __device_Registers + * @{ + */ +typedef struct _USB_OTG_DREGS // 800h +{ + __IO uint32_t DCFG; /* dev Configuration Register 800h*/ + __IO uint32_t DCTL; /* dev Control Register 804h*/ + __IO uint32_t DSTS; /* dev Status Register (RO) 808h*/ + uint32_t Reserved0C; /* Reserved 80Ch*/ + __IO uint32_t DIEPMSK; /* dev IN Endpoint Mask 810h*/ + __IO uint32_t DOEPMSK; /* dev OUT Endpoint Mask 814h*/ + __IO uint32_t DAINT; /* dev All Endpoints Itr Reg 818h*/ + __IO uint32_t DAINTMSK; /* dev All Endpoints Itr Mask 81Ch*/ + uint32_t Reserved20; /* Reserved 820h*/ + uint32_t Reserved9; /* Reserved 824h*/ + __IO uint32_t DVBUSDIS; /* dev VBUS discharge Register 828h*/ + __IO uint32_t DVBUSPULSE; /* dev VBUS Pulse Register 82Ch*/ + __IO uint32_t DTHRCTL; /* dev thr 830h*/ + __IO uint32_t DIEPEMPMSK; /* dev empty msk 834h*/ + __IO uint32_t DEACHINT; /* dedicated EP interrupt 838h*/ + __IO uint32_t DEACHMSK; /* dedicated EP msk 83Ch*/ + uint32_t Reserved40; /* dedicated EP mask 840h*/ + __IO uint32_t DINEP1MSK; /* dedicated EP mask 844h*/ + uint32_t Reserved44[15]; /* Reserved 844-87Ch*/ + __IO uint32_t DOUTEP1MSK; /* dedicated EP msk 884h*/ +} +USB_OTG_DREGS; +/** + * @} + */ + + +/** @defgroup __IN_Endpoint-Specific_Register + * @{ + */ +typedef struct _USB_OTG_INEPREGS +{ + __IO uint32_t DIEPCTL; /* dev IN Endpoint Control Reg 900h + (ep_num * 20h) + 00h*/ + uint32_t Reserved04; /* Reserved 900h + (ep_num * 20h) + 04h*/ + __IO uint32_t DIEPINT; /* dev IN Endpoint Itr Reg 900h + (ep_num * 20h) + 08h*/ + uint32_t Reserved0C; /* Reserved 900h + (ep_num * 20h) + 0Ch*/ + __IO uint32_t DIEPTSIZ; /* IN Endpoint Txfer Size 900h + (ep_num * 20h) + 10h*/ + __IO uint32_t DIEPDMA; /* IN Endpoint DMA Address Reg 900h + (ep_num * 20h) + 14h*/ + __IO uint32_t DTXFSTS;/*IN Endpoint Tx FIFO Status Reg 900h + (ep_num * 20h) + 18h*/ + uint32_t Reserved18; /* Reserved 900h+(ep_num*20h)+1Ch-900h+ (ep_num * 20h) + 1Ch*/ +} +USB_OTG_INEPREGS; +/** + * @} + */ + + +/** @defgroup __OUT_Endpoint-Specific_Registers + * @{ + */ +typedef struct _USB_OTG_OUTEPREGS +{ + __IO uint32_t DOEPCTL; /* dev OUT Endpoint Control Reg B00h + (ep_num * 20h) + 00h*/ + __IO uint32_t DOUTEPFRM; /* dev OUT Endpoint Frame number B00h + (ep_num * 20h) + 04h*/ + __IO uint32_t DOEPINT; /* dev OUT Endpoint Itr Reg B00h + (ep_num * 20h) + 08h*/ + uint32_t Reserved0C; /* Reserved B00h + (ep_num * 20h) + 0Ch*/ + __IO uint32_t DOEPTSIZ; /* dev OUT Endpoint Txfer Size B00h + (ep_num * 20h) + 10h*/ + __IO uint32_t DOEPDMA; /* dev OUT Endpoint DMA Address B00h + (ep_num * 20h) + 14h*/ + uint32_t Reserved18[2]; /* Reserved B00h + (ep_num * 20h) + 18h - B00h + (ep_num * 20h) + 1Ch*/ +} +USB_OTG_OUTEPREGS; +/** + * @} + */ + + +/** @defgroup __Host_Mode_Register_Structures + * @{ + */ +typedef struct _USB_OTG_HREGS +{ + __IO uint32_t HCFG; /* Host Configuration Register 400h*/ + __IO uint32_t HFIR; /* Host Frame Interval Register 404h*/ + __IO uint32_t HFNUM; /* Host Frame Nbr/Frame Remaining 408h*/ + uint32_t Reserved40C; /* Reserved 40Ch*/ + __IO uint32_t HPTXSTS; /* Host Periodic Tx FIFO/ Queue Status 410h*/ + __IO uint32_t HAINT; /* Host All Channels Interrupt Register 414h*/ + __IO uint32_t HAINTMSK; /* Host All Channels Interrupt Mask 418h*/ +} +USB_OTG_HREGS; +/** + * @} + */ + + +/** @defgroup __Host_Channel_Specific_Registers + * @{ + */ +typedef struct _USB_OTG_HC_REGS +{ + __IO uint32_t HCCHAR; + __IO uint32_t HCSPLT; + __IO uint32_t HCINT; + __IO uint32_t HCGINTMSK; + __IO uint32_t HCTSIZ; + __IO uint32_t HCDMA; + uint32_t Reserved[2]; +} +USB_OTG_HC_REGS; +/** + * @} + */ + + +/** @defgroup __otg_Core_registers + * @{ + */ +typedef struct USB_OTG_core_regs //000h +{ + USB_OTG_GREGS *GREGS; + USB_OTG_DREGS *DREGS; + USB_OTG_HREGS *HREGS; + USB_OTG_INEPREGS *INEP_REGS[USB_OTG_MAX_TX_FIFOS]; + USB_OTG_OUTEPREGS *OUTEP_REGS[USB_OTG_MAX_TX_FIFOS]; + USB_OTG_HC_REGS *HC_REGS[USB_OTG_MAX_TX_FIFOS]; + __IO uint32_t *HPRT0; + __IO uint32_t *DFIFO[USB_OTG_MAX_TX_FIFOS]; + __IO uint32_t *PCGCCTL; +} +USB_OTG_CORE_REGS , *PUSB_OTG_CORE_REGS; +typedef union _USB_OTG_OTGCTL_TypeDef +{ + uint32_t d32; + struct + { +uint32_t sesreqscs : + 1; +uint32_t sesreq : + 1; +uint32_t Reserved2_7 : + 6; +uint32_t hstnegscs : + 1; +uint32_t hnpreq : + 1; +uint32_t hstsethnpen : + 1; +uint32_t devhnpen : + 1; +uint32_t Reserved12_15 : + 4; +uint32_t conidsts : + 1; +uint32_t Reserved17 : + 1; +uint32_t asesvld : + 1; +uint32_t bsesvld : + 1; +uint32_t currmod : + 1; +uint32_t Reserved21_31 : + 11; + } + b; +} USB_OTG_OTGCTL_TypeDef ; +typedef union _USB_OTG_GOTGINT_TypeDef +{ + uint32_t d32; + struct + { +uint32_t Reserved0_1 : + 2; +uint32_t sesenddet : + 1; +uint32_t Reserved3_7 : + 5; +uint32_t sesreqsucstschng : + 1; +uint32_t hstnegsucstschng : + 1; +uint32_t reserver10_16 : + 7; +uint32_t hstnegdet : + 1; +uint32_t adevtoutchng : + 1; +uint32_t debdone : + 1; +uint32_t Reserved31_20 : + 12; + } + b; +} USB_OTG_GOTGINT_TypeDef ; +typedef union _USB_OTG_GAHBCFG_TypeDef +{ + uint32_t d32; + struct + { +uint32_t glblintrmsk : + 1; +uint32_t hburstlen : + 4; +uint32_t dmaenable : + 1; +uint32_t Reserved : + 1; +uint32_t nptxfemplvl_txfemplvl : + 1; +uint32_t ptxfemplvl : + 1; +uint32_t Reserved9_31 : + 23; + } + b; +} USB_OTG_GAHBCFG_TypeDef ; +typedef union _USB_OTG_GUSBCFG_TypeDef +{ + uint32_t d32; + struct + { +uint32_t toutcal : + 3; +uint32_t phyif : + 1; +uint32_t ulpi_utmi_sel : + 1; +uint32_t fsintf : + 1; +uint32_t physel : + 1; +uint32_t ddrsel : + 1; +uint32_t srpcap : + 1; +uint32_t hnpcap : + 1; +uint32_t usbtrdtim : + 4; +uint32_t nptxfrwnden : + 1; +uint32_t phylpwrclksel : + 1; +uint32_t otgutmifssel : + 1; +uint32_t ulpi_fsls : + 1; +uint32_t ulpi_auto_res : + 1; +uint32_t ulpi_clk_sus_m : + 1; +uint32_t ulpi_ext_vbus_drv : + 1; +uint32_t ulpi_int_vbus_indicator : + 1; +uint32_t term_sel_dl_pulse : + 1; +uint32_t Reserved : + 6; +uint32_t force_host : + 1; +uint32_t force_dev : + 1; +uint32_t corrupt_tx : + 1; + } + b; +} USB_OTG_GUSBCFG_TypeDef ; +typedef union _USB_OTG_GRSTCTL_TypeDef +{ + uint32_t d32; + struct + { +uint32_t csftrst : + 1; +uint32_t hsftrst : + 1; +uint32_t hstfrm : + 1; +uint32_t intknqflsh : + 1; +uint32_t rxfflsh : + 1; +uint32_t txfflsh : + 1; +uint32_t txfnum : + 5; +uint32_t Reserved11_29 : + 19; +uint32_t dmareq : + 1; +uint32_t ahbidle : + 1; + } + b; +} USB_OTG_GRSTCTL_TypeDef ; +typedef union _USB_OTG_GINTMSK_TypeDef +{ + uint32_t d32; + struct + { +uint32_t Reserved0 : + 1; +uint32_t modemismatch : + 1; +uint32_t otgintr : + 1; +uint32_t sofintr : + 1; +uint32_t rxstsqlvl : + 1; +uint32_t nptxfempty : + 1; +uint32_t ginnakeff : + 1; +uint32_t goutnakeff : + 1; +uint32_t Reserved8 : + 1; +uint32_t i2cintr : + 1; +uint32_t erlysuspend : + 1; +uint32_t usbsuspend : + 1; +uint32_t usbreset : + 1; +uint32_t enumdone : + 1; +uint32_t isooutdrop : + 1; +uint32_t eopframe : + 1; +uint32_t Reserved16 : + 1; +uint32_t epmismatch : + 1; +uint32_t inepintr : + 1; +uint32_t outepintr : + 1; +uint32_t incomplisoin : + 1; +uint32_t incomplisoout : + 1; +uint32_t Reserved22_23 : + 2; +uint32_t portintr : + 1; +uint32_t hcintr : + 1; +uint32_t ptxfempty : + 1; +uint32_t Reserved27 : + 1; +uint32_t conidstschng : + 1; +uint32_t disconnect : + 1; +uint32_t sessreqintr : + 1; +uint32_t wkupintr : + 1; + } + b; +} USB_OTG_GINTMSK_TypeDef ; +typedef union _USB_OTG_GINTSTS_TypeDef +{ + uint32_t d32; + struct + { +uint32_t curmode : + 1; +uint32_t modemismatch : + 1; +uint32_t otgintr : + 1; +uint32_t sofintr : + 1; +uint32_t rxstsqlvl : + 1; +uint32_t nptxfempty : + 1; +uint32_t ginnakeff : + 1; +uint32_t goutnakeff : + 1; +uint32_t Reserved8 : + 1; +uint32_t i2cintr : + 1; +uint32_t erlysuspend : + 1; +uint32_t usbsuspend : + 1; +uint32_t usbreset : + 1; +uint32_t enumdone : + 1; +uint32_t isooutdrop : + 1; +uint32_t eopframe : + 1; +uint32_t intimerrx : + 1; +uint32_t epmismatch : + 1; +uint32_t inepint: + 1; +uint32_t outepintr : + 1; +uint32_t incomplisoin : + 1; +uint32_t incomplisoout : + 1; +uint32_t Reserved22_23 : + 2; +uint32_t portintr : + 1; +uint32_t hcintr : + 1; +uint32_t ptxfempty : + 1; +uint32_t Reserved27 : + 1; +uint32_t conidstschng : + 1; +uint32_t disconnect : + 1; +uint32_t sessreqintr : + 1; +uint32_t wkupintr : + 1; + } + b; +} USB_OTG_GINTSTS_TypeDef ; +typedef union _USB_OTG_DRXSTS_TypeDef +{ + uint32_t d32; + struct + { +uint32_t epnum : + 4; +uint32_t bcnt : + 11; +uint32_t dpid : + 2; +uint32_t pktsts : + 4; +uint32_t fn : + 4; +uint32_t Reserved : + 7; + } + b; +} USB_OTG_DRXSTS_TypeDef ; +typedef union _USB_OTG_GRXSTS_TypeDef +{ + uint32_t d32; + struct + { +uint32_t chnum : + 4; +uint32_t bcnt : + 11; +uint32_t dpid : + 2; +uint32_t pktsts : + 4; +uint32_t Reserved : + 11; + } + b; +} USB_OTG_GRXFSTS_TypeDef ; +typedef union _USB_OTG_FSIZ_TypeDef +{ + uint32_t d32; + struct + { +uint32_t startaddr : + 16; +uint32_t depth : + 16; + } + b; +} USB_OTG_FSIZ_TypeDef ; +typedef union _USB_OTG_HNPTXSTS_TypeDef +{ + uint32_t d32; + struct + { +uint32_t nptxfspcavail : + 16; +uint32_t nptxqspcavail : + 8; +uint32_t nptxqtop_terminate : + 1; +uint32_t nptxqtop_timer : + 2; +uint32_t nptxqtop : + 2; +uint32_t chnum : + 2; +uint32_t Reserved : + 1; + } + b; +} USB_OTG_HNPTXSTS_TypeDef ; +typedef union _USB_OTG_DTXFSTSn_TypeDef +{ + uint32_t d32; + struct + { +uint32_t txfspcavail : + 16; +uint32_t Reserved : + 16; + } + b; +} USB_OTG_DTXFSTSn_TypeDef ; +typedef union _USB_OTG_GI2CCTL_TypeDef +{ + uint32_t d32; + struct + { +uint32_t rwdata : + 8; +uint32_t regaddr : + 8; +uint32_t addr : + 7; +uint32_t i2cen : + 1; +uint32_t ack : + 1; +uint32_t i2csuspctl : + 1; +uint32_t i2cdevaddr : + 2; +uint32_t dat_se0: + 1; +uint32_t Reserved : + 1; +uint32_t rw : + 1; +uint32_t bsydne : + 1; + } + b; +} USB_OTG_GI2CCTL_TypeDef ; +typedef union _USB_OTG_GCCFG_TypeDef +{ + uint32_t d32; + struct + { +uint32_t Reserved_in : + 16; +uint32_t pwdn : + 1; +uint32_t i2cifen : + 1; +uint32_t vbussensingA : + 1; +uint32_t vbussensingB : + 1; +uint32_t sofouten : + 1; +uint32_t disablevbussensing : + 1; +uint32_t Reserved_out : + 10; + } + b; +} USB_OTG_GCCFG_TypeDef ; + +typedef union _USB_OTG_DCFG_TypeDef +{ + uint32_t d32; + struct + { +uint32_t devspd : + 2; +uint32_t nzstsouthshk : + 1; +uint32_t Reserved3 : + 1; +uint32_t devaddr : + 7; +uint32_t perfrint : + 2; +uint32_t Reserved13_17 : + 5; +uint32_t epmscnt : + 4; + } + b; +} USB_OTG_DCFG_TypeDef ; +typedef union _USB_OTG_DCTL_TypeDef +{ + uint32_t d32; + struct + { +uint32_t rmtwkupsig : + 1; +uint32_t sftdiscon : + 1; +uint32_t gnpinnaksts : + 1; +uint32_t goutnaksts : + 1; +uint32_t tstctl : + 3; +uint32_t sgnpinnak : + 1; +uint32_t cgnpinnak : + 1; +uint32_t sgoutnak : + 1; +uint32_t cgoutnak : + 1; +uint32_t Reserved : + 21; + } + b; +} USB_OTG_DCTL_TypeDef ; +typedef union _USB_OTG_DSTS_TypeDef +{ + uint32_t d32; + struct + { +uint32_t suspsts : + 1; +uint32_t enumspd : + 2; +uint32_t errticerr : + 1; +uint32_t Reserved4_7: + 4; +uint32_t soffn : + 14; +uint32_t Reserved22_31 : + 10; + } + b; +} USB_OTG_DSTS_TypeDef ; +typedef union _USB_OTG_DIEPINTn_TypeDef +{ + uint32_t d32; + struct + { +uint32_t xfercompl : + 1; +uint32_t epdisabled : + 1; +uint32_t ahberr : + 1; +uint32_t timeout : + 1; +uint32_t intktxfemp : + 1; +uint32_t intknepmis : + 1; +uint32_t inepnakeff : + 1; +uint32_t emptyintr : + 1; +uint32_t txfifoundrn : + 1; +uint32_t Reserved08_31 : + 23; + } + b; +} USB_OTG_DIEPINTn_TypeDef ; +typedef union _USB_OTG_DIEPINTn_TypeDef USB_OTG_DIEPMSK_TypeDef ; +typedef union _USB_OTG_DOEPINTn_TypeDef +{ + uint32_t d32; + struct + { +uint32_t xfercompl : + 1; +uint32_t epdisabled : + 1; +uint32_t ahberr : + 1; +uint32_t setup : + 1; +uint32_t Reserved04_31 : + 28; + } + b; +} USB_OTG_DOEPINTn_TypeDef ; +typedef union _USB_OTG_DOEPINTn_TypeDef USB_OTG_DOEPMSK_TypeDef ; + +typedef union _USB_OTG_DAINT_TypeDef +{ + uint32_t d32; + struct + { +uint32_t in : + 16; +uint32_t out : + 16; + } + ep; +} USB_OTG_DAINT_TypeDef ; + +typedef union _USB_OTG_DTHRCTL_TypeDef +{ + uint32_t d32; + struct + { +uint32_t non_iso_thr_en : + 1; +uint32_t iso_thr_en : + 1; +uint32_t tx_thr_len : + 9; +uint32_t Reserved11_15 : + 5; +uint32_t rx_thr_en : + 1; +uint32_t rx_thr_len : + 9; +uint32_t Reserved26_31 : + 6; + } + b; +} USB_OTG_DTHRCTL_TypeDef ; +typedef union _USB_OTG_DEPCTL_TypeDef +{ + uint32_t d32; + struct + { +uint32_t mps : + 11; +uint32_t reserved : + 4; +uint32_t usbactep : + 1; +uint32_t dpid : + 1; +uint32_t naksts : + 1; +uint32_t eptype : + 2; +uint32_t snp : + 1; +uint32_t stall : + 1; +uint32_t txfnum : + 4; +uint32_t cnak : + 1; +uint32_t snak : + 1; +uint32_t setd0pid : + 1; +uint32_t setd1pid : + 1; +uint32_t epdis : + 1; +uint32_t epena : + 1; + } + b; +} USB_OTG_DEPCTL_TypeDef ; +typedef union _USB_OTG_DEPXFRSIZ_TypeDef +{ + uint32_t d32; + struct + { +uint32_t xfersize : + 19; +uint32_t pktcnt : + 10; +uint32_t mc : + 2; +uint32_t Reserved : + 1; + } + b; +} USB_OTG_DEPXFRSIZ_TypeDef ; +typedef union _USB_OTG_DEP0XFRSIZ_TypeDef +{ + uint32_t d32; + struct + { +uint32_t xfersize : + 7; +uint32_t Reserved7_18 : + 12; +uint32_t pktcnt : + 2; +uint32_t Reserved20_28 : + 9; +uint32_t supcnt : + 2; + uint32_t Reserved31; + } + b; +} USB_OTG_DEP0XFRSIZ_TypeDef ; +typedef union _USB_OTG_HCFG_TypeDef +{ + uint32_t d32; + struct + { +uint32_t fslspclksel : + 2; +uint32_t fslssupp : + 1; + } + b; +} USB_OTG_HCFG_TypeDef ; +typedef union _USB_OTG_HFRMINTRVL_TypeDef +{ + uint32_t d32; + struct + { +uint32_t frint : + 16; +uint32_t Reserved : + 16; + } + b; +} USB_OTG_HFRMINTRVL_TypeDef ; + +typedef union _USB_OTG_HFNUM_TypeDef +{ + uint32_t d32; + struct + { +uint32_t frnum : + 16; +uint32_t frrem : + 16; + } + b; +} USB_OTG_HFNUM_TypeDef ; +typedef union _USB_OTG_HPTXSTS_TypeDef +{ + uint32_t d32; + struct + { +uint32_t ptxfspcavail : + 16; +uint32_t ptxqspcavail : + 8; +uint32_t ptxqtop_terminate : + 1; +uint32_t ptxqtop_timer : + 2; +uint32_t ptxqtop : + 2; +uint32_t chnum : + 2; +uint32_t ptxqtop_odd : + 1; + } + b; +} USB_OTG_HPTXSTS_TypeDef ; +typedef union _USB_OTG_HPRT0_TypeDef +{ + uint32_t d32; + struct + { +uint32_t prtconnsts : + 1; +uint32_t prtconndet : + 1; +uint32_t prtena : + 1; +uint32_t prtenchng : + 1; +uint32_t prtovrcurract : + 1; +uint32_t prtovrcurrchng : + 1; +uint32_t prtres : + 1; +uint32_t prtsusp : + 1; +uint32_t prtrst : + 1; +uint32_t Reserved9 : + 1; +uint32_t prtlnsts : + 2; +uint32_t prtpwr : + 1; +uint32_t prttstctl : + 4; +uint32_t prtspd : + 2; +uint32_t Reserved19_31 : + 13; + } + b; +} USB_OTG_HPRT0_TypeDef ; +typedef union _USB_OTG_HAINT_TypeDef +{ + uint32_t d32; + struct + { +uint32_t chint : + 16; +uint32_t Reserved : + 16; + } + b; +} USB_OTG_HAINT_TypeDef ; +typedef union _USB_OTG_HAINTMSK_TypeDef +{ + uint32_t d32; + struct + { +uint32_t chint : + 16; +uint32_t Reserved : + 16; + } + b; +} USB_OTG_HAINTMSK_TypeDef ; +typedef union _USB_OTG_HCCHAR_TypeDef +{ + uint32_t d32; + struct + { +uint32_t mps : + 11; +uint32_t epnum : + 4; +uint32_t epdir : + 1; +uint32_t Reserved : + 1; +uint32_t lspddev : + 1; +uint32_t eptype : + 2; +uint32_t multicnt : + 2; +uint32_t devaddr : + 7; +uint32_t oddfrm : + 1; +uint32_t chdis : + 1; +uint32_t chen : + 1; + } + b; +} USB_OTG_HCCHAR_TypeDef ; +typedef union _USB_OTG_HCSPLT_TypeDef +{ + uint32_t d32; + struct + { +uint32_t prtaddr : + 7; +uint32_t hubaddr : + 7; +uint32_t xactpos : + 2; +uint32_t compsplt : + 1; +uint32_t Reserved : + 14; +uint32_t spltena : + 1; + } + b; +} USB_OTG_HCSPLT_TypeDef ; +typedef union _USB_OTG_HCINTn_TypeDef +{ + uint32_t d32; + struct + { +uint32_t xfercompl : + 1; +uint32_t chhltd : + 1; +uint32_t ahberr : + 1; +uint32_t stall : + 1; +uint32_t nak : + 1; +uint32_t ack : + 1; +uint32_t nyet : + 1; +uint32_t xacterr : + 1; +uint32_t bblerr : + 1; +uint32_t frmovrun : + 1; +uint32_t datatglerr : + 1; +uint32_t Reserved : + 21; + } + b; +} USB_OTG_HCINTn_TypeDef ; +typedef union _USB_OTG_HCTSIZn_TypeDef +{ + uint32_t d32; + struct + { +uint32_t xfersize : + 19; +uint32_t pktcnt : + 10; +uint32_t pid : + 2; +uint32_t dopng : + 1; + } + b; +} USB_OTG_HCTSIZn_TypeDef ; +typedef union _USB_OTG_HCGINTMSK_TypeDef +{ + uint32_t d32; + struct + { +uint32_t xfercompl : + 1; +uint32_t chhltd : + 1; +uint32_t ahberr : + 1; +uint32_t stall : + 1; +uint32_t nak : + 1; +uint32_t ack : + 1; +uint32_t nyet : + 1; +uint32_t xacterr : + 1; +uint32_t bblerr : + 1; +uint32_t frmovrun : + 1; +uint32_t datatglerr : + 1; +uint32_t Reserved : + 21; + } + b; +} USB_OTG_HCGINTMSK_TypeDef ; +typedef union _USB_OTG_PCGCCTL_TypeDef +{ + uint32_t d32; + struct + { +uint32_t stoppclk : + 1; +uint32_t gatehclk : + 1; +uint32_t Reserved : + 30; + } + b; +} USB_OTG_PCGCCTL_TypeDef ; + +/** + * @} + */ + + +/** @defgroup USB_REGS_Exported_Macros + * @{ + */ +/** + * @} + */ + +/** @defgroup USB_REGS_Exported_Variables + * @{ + */ +/** + * @} + */ + +/** @defgroup USB_REGS_Exported_FunctionsPrototype + * @{ + */ +/** + * @} + */ + + +#endif //__USB_OTG_REGS_H__ + + +/** + * @} + */ + +/** + * @} + */ +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ + diff --git a/libcodec2-android/src/codec2/unittest/CMakeLists.txt b/libcodec2-android/src/codec2/unittest/CMakeLists.txt new file mode 100644 index 0000000..211fab8 --- /dev/null +++ b/libcodec2-android/src/codec2/unittest/CMakeLists.txt @@ -0,0 +1,79 @@ +add_definitions(-DFLOATING_POINT -DVAR_ARRAYS) +include_directories(../src) + +add_executable(tfdmdv tfdmdv.c ../src/fdmdv.c ../src/kiss_fft.c ../src/octave.c) +target_link_libraries(tfdmdv codec2) + +add_executable(tcohpsk tcohpsk.c ../src/cohpsk.c ../src/octave.c) +target_link_libraries(tcohpsk codec2) + +add_executable(tfsk tfsk.c ../src/kiss_fft.c ../src/kiss_fftr.c ../src/octave.c ../src/modem_probe.c) +target_link_libraries(tfsk m) + +add_executable(tfreedv_data_channel tfreedv_data_channel.c ../src/freedv_data_channel.c) + +add_executable(tfmfsk tfmfsk.c ../src/octave.c ../src/modem_probe.c) +target_link_libraries(tfmfsk m) + +add_executable(tdeframer tdeframer.c) +target_link_libraries(tdeframer m codec2) + +add_definitions(-DMODEMPROBE_ENABLE -DXXXXX) + +add_executable(tofdm tofdm.c ../src/ofdm.c ../src/octave.c ../src/kiss_fft.c ../src/modem_probe.c ../src/mpdecode_core.c ../src/phi0.c ../src/filter.c ../src/HRA_112_112.c) +target_link_libraries(tofdm m) + +if(UNIX) # Uses pthreads +add_executable(tfifo tfifo.c ../src/codec2_fifo.c) +target_link_libraries(tfifo codec2 ${CMAKE_THREAD_LIBS_INIT}) +endif() + +add_executable(fdmdv_mem fdmdv_mem.c) + +add_executable(ofdm_mem ofdm_mem.c ../src/ofdm.c ../src/octave.c ../src/kiss_fft.c ../src/modem_probe.c ../src/mpdecode_core.c ../src/phi0.c ../src/filter.c) +target_link_libraries(ofdm_mem m) + +add_library(function_trace STATIC ../unittest/function_trace.c) + +add_executable(ofdm_stack ofdm_stack.c ../src/ofdm.c ../src/octave.c ../src/kiss_fft.c ../src/modem_probe.c ../src/mpdecode_core.c ../src/phi0.c ../src/filter.c) +if (CMAKE_C_COMPILER MATCHES "gcc$") + target_link_libraries(ofdm_stack function_trace m -no-pie "-Wl,-Map=ofdm_stack.map") + target_compile_options(ofdm_stack PUBLIC -fstack-usage -finstrument-functions -no-pie) +else() + target_link_libraries(ofdm_stack function_trace m -no-pie) + target_compile_options(ofdm_stack PUBLIC -finstrument-functions -no-pie) +endif() +add_definitions(-D__UNITTEST__) + +add_executable(tnewamp1 tnewamp1.c ../src/quantise.c ../src/newamp1.c ../src/mbest.c ../src/kiss_fft.c ../src/sine.c ../src/nlp.c ../src/dump.c ../src/octave.c ${CODEBOOKS}) +target_link_libraries(tnewamp1 codec2) + +add_executable(compare_ints compare_ints.c) + +add_executable(compare_floats compare_floats.c) + +add_executable(test_phi0 test_phi0.c ../src/phi0.c) +target_link_libraries(test_phi0 m) + +add_executable(tst_codec2_fft_init tst_codec2_fft_init.c) +target_link_libraries(tst_codec2_fft_init m codec2) + +add_executable(tvq_mbest tvq_mbest.c) + +add_executable(tfreedv_800XA_rawdata tfreedv_800XA_rawdata.c) +target_link_libraries(tfreedv_800XA_rawdata codec2) + +add_executable(tfreedv_2400A_rawdata tfreedv_2400A_rawdata.c) +target_link_libraries(tfreedv_2400A_rawdata codec2) + +add_executable(tfreedv_2400B_rawdata tfreedv_2400B_rawdata.c) +target_link_libraries(tfreedv_2400B_rawdata codec2) + +add_executable(tfsk_llr tfsk_llr.c) +target_link_libraries(tfsk_llr codec2 m) + +add_executable(thash thash.c) +target_link_libraries(thash codec2 m) + +add_executable(tqam16 tqam16.c) +target_link_libraries(tqam16 codec2 m) diff --git a/libcodec2-android/src/codec2/unittest/compare_floats.c b/libcodec2-android/src/codec2/unittest/compare_floats.c new file mode 100644 index 0000000..572ce16 --- /dev/null +++ b/libcodec2-android/src/codec2/unittest/compare_floats.c @@ -0,0 +1,89 @@ +/* compare floats - a test utility */ + +#include +#include +#include +#include +#include +#include + +/* Declarations */ + +/* Globals */ + +/* Main */ + +int main(int argc, char *argv[]) { + + char usage[] = "Usage: %s [-t tolerance] file1 file2\n"; + + float tol = .001; + + int opt; + while ((opt = getopt(argc, argv, "t:")) != -1) { + switch (opt) { + case 't': + tol = atof(optarg); + break; + default: + fprintf(stderr, usage, argv[0]); + exit(1); + } + } + + if ((optind + 2) > argc) { + fprintf(stderr, usage, argv[0]); + exit(1); + } + char *fname1 = argv[optind++]; + char *fname2 = argv[optind++]; + + FILE *f1 = fopen(fname1, "rb"); + if (f1 == NULL) { + fprintf(stderr, "Error opening file1 \"%s\": ", fname1); + perror(NULL); + exit(1); + } + + FILE *f2 = fopen(fname2, "rb"); + if (f2 == NULL) { + fprintf(stderr, "Error opening file2 \"%s\": ", fname2); + perror(NULL); + exit(1); + } + + float data1, data2; + int count = 0; + int errors = 0; + double rms_sum = 0; + + while (fread(&data1, sizeof(float), 1, f1)) { + if (!fread(&data2, sizeof(float), 1, f2)) { + fprintf(stderr, "Error: file2 is shorter!"); + exit(1); + } + float err = fabsf((data1 - data2) / data1); + if (err > tol) { + errors ++; + printf("%d %g %g %g\n", count, data1, data2, err); + } + rms_sum += (err * err); + count ++; + } + if (fread(&data2, sizeof(float), 1, f2)) { + fprintf(stderr, "Error: file1 is shorter\n"); + exit(1); + } + + if (errors) { + printf("Fail: %d errors\n", errors); + printf(" rms error = %g\n", ((double)rms_sum/count)); + exit(1); + } + else printf("Pass\n"); + exit(0); + + } // main + + +/* vi:set ts=4 et sts=4: */ diff --git a/libcodec2-android/src/codec2/unittest/compare_ints.c b/libcodec2-android/src/codec2/unittest/compare_ints.c new file mode 100644 index 0000000..3ff70f7 --- /dev/null +++ b/libcodec2-android/src/codec2/unittest/compare_ints.c @@ -0,0 +1,158 @@ +/* compare ints - a test utility */ + +#include +#include +#include +#include +#include + +/* Declarations */ + +/* Globals */ + +/* Functions */ +int get_data(FILE *f, int64_t *dd, int signed_flag, int bytes) { + int res; + int8_t d_8; + int16_t d_16; + uint8_t d_u8; + uint16_t d_u16; + // TODO Loop on reads until, but catch EOF!! + if (signed_flag) { + switch (bytes) { + case 1: + res = fread(&d_8, bytes, 1, f); + *dd = d_8; + break; + case 2: + res = fread(&d_16, bytes, 1, f); + *dd = d_16; + break; + default: + fprintf(stderr, "Error: unsupported size %d bytes\n", bytes); + exit(1); + } + } + else { // unsigned + switch (bytes) { + case 1: + res = fread(&d_u8, bytes, 1, f); + *dd = d_u8; + break; + case 2: + res = fread(&d_u16, bytes, 1, f); + *dd = d_u16; + break; + default: + fprintf(stderr, "Error: unsupported size %d bytes\n", bytes); + exit(1); + } + } + + if (res != 1) return(0); + else return(1); + } + + +/* Main */ + +int main(int argc, char *argv[]) { + + char usage[] = "Usage: %s [-b size_in_bytes] [-c] [-s] [-t tolerance] [-n numerrorstoexit] file1 file2\n"; + + int bytes = 1; + int count_errors = 0; + int signed_flag = 0; + int tol = 1; + int numerrorstoexit = -1; + + int opt; + while ((opt = getopt(argc, argv, "b:cst:n:")) != -1) { + switch (opt) { + case 'b': + bytes = atoi(optarg); + break; + case 'c': + count_errors = 1; + break; + case 's': + signed_flag = 1; + break; + case 'n': + numerrorstoexit = atoi(optarg); + break; + case 't': + tol = atof(optarg); + break; + default: + fprintf(stderr, usage, argv[0]); + exit(1); + } + } + + if ((optind + 2) > argc) { + fprintf(stderr, usage, argv[0]); + exit(1); + } + char *fname1 = argv[optind++]; + char *fname2 = argv[optind++]; + + FILE *f1 = fopen(fname1, "rb"); + if (f1 == NULL) { + fprintf(stderr, "Error opening file1 \"%s\": ", fname1); + perror(NULL); + exit(1); + } + + FILE *f2 = fopen(fname2, "rb"); + if (f2 == NULL) { + fprintf(stderr, "Error opening file2 \"%s\": ", fname2); + perror(NULL); + exit(1); + } + + // Convert inputs to SIGNED long values + int64_t data1, data2; + + int count = 0; + int errors = 0; + int rms_sum = 0; + + while (get_data(f1, &data1, signed_flag, bytes)) { + if (!get_data(f2, &data2, signed_flag, bytes)) { + fprintf(stderr, "Error: file2 is shorter\n"); + exit(1); + } + uint64_t err = llabs(data1 - data2); + if (err > tol) { + errors ++; + printf("%d %ld %ld\n", count, data1, data2); + if (numerrorstoexit != -1) + if (errors > numerrorstoexit) { + printf("reached errors: %d, bailing!", numerrorstoexit); + exit(1); + } + } + rms_sum += (err * err); + count ++; + } + if (get_data(f2, &data2, signed_flag, bytes)) { + fprintf(stderr, "Error: file1 is shorter\n"); + exit(1); + } + + if (count_errors) exit(errors); + else { + if (errors) { + printf("Fail: %d errors\n", errors); + printf(" rms error = %f\n", ((double)rms_sum/count)); + exit(1); + } + else printf("Pass\n"); + exit(0); + } + + } // main + + +/* vi:set ts=4 et sts=4: */ diff --git a/libcodec2-android/src/codec2/unittest/est_n0.sh.in b/libcodec2-android/src/codec2/unittest/est_n0.sh.in new file mode 100755 index 0000000..120a0ee --- /dev/null +++ b/libcodec2-android/src/codec2/unittest/est_n0.sh.in @@ -0,0 +1,18 @@ +#!/bin/bash -x +# David Dec 2019 +# Tests misc/est_n0 + +PATH=$PATH:@CMAKE_CURRENT_BINARY_DIR@/src:@CMAKE_CURRENT_BINARY_DIR@/misc +onerun=$(mktemp) +results=$(mktemp) + +# generate an impulse with time offset 1 +timpulse 1 | c2sim - --modelout - | est_n0 > $results + +python3 -c " +import sys; import numpy as np +est_n0 = np.loadtxt(\"$results\") +#ignore first few frames as buffers load up +est_n0 = est_n0[2:] +sys.exit(0) if np.all(est_n0==1) else sys.exit(1) +" diff --git a/libcodec2-android/src/codec2/unittest/fdmdv_mem.c b/libcodec2-android/src/codec2/unittest/fdmdv_mem.c new file mode 100644 index 0000000..60845c0 --- /dev/null +++ b/libcodec2-android/src/codec2/unittest/fdmdv_mem.c @@ -0,0 +1,63 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: fdmdv_mem.c + AUTHOR......: David Rowe + DATE CREATED: 25 June 2014 + + Prints out the memory used by the FDMDV modem states. Used to optimise + memory use for thw STM32F4 port. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2014 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include +#include +#include +#include + +#include "fdmdv_internal.h" + +extern float pilot_coeff[]; + +int main(int argc, char *argv[]) +{ + struct FDMDV *fdmdv; + + printf("struct FDMDV..........: %ld\n", sizeof(struct FDMDV)); + printf("prev_tx_symbols.......: %ld\n", sizeof(fdmdv->prev_tx_symbols)); + printf("tx_filter_memory......: %ld\n", sizeof(fdmdv->tx_filter_memory)); + printf("phase_tx..............: %ld\n", sizeof(fdmdv->phase_tx)); + printf("freq..................: %ld\n", sizeof(fdmdv->freq)); + printf("pilot_lut.............: %ld\n", sizeof(fdmdv->pilot_lut)); + printf("pilot_baseband1.......: %ld\n", sizeof(fdmdv->pilot_baseband1)); + printf("pilot_baseband2.......: %ld\n", sizeof(fdmdv->pilot_baseband2)); + printf("pilot_lpf1............: %ld\n", sizeof(fdmdv->pilot_lpf1)); + printf("pilot_lpf2............: %ld\n", sizeof(fdmdv->pilot_lpf2)); + printf("S1....................: %ld\n", sizeof(fdmdv->S1)); + printf("S2....................: %ld\n", sizeof(fdmdv->S2)); + printf("phase_rx..............: %ld\n", sizeof(fdmdv->phase_rx)); + printf("rx_fdm_mem............: %ld\n", sizeof(fdmdv->rx_fdm_mem)); + printf("rx_filter_mem_timing..: %ld\n", sizeof(fdmdv->rx_filter_mem_timing)); + printf("phase_difference......: %ld\n", sizeof(fdmdv->phase_difference)); + printf("prev_rx_symbols.......: %ld\n", sizeof(fdmdv->prev_rx_symbols)); + + return 0; +} + diff --git a/libcodec2-android/src/codec2/unittest/function_trace.c b/libcodec2-android/src/codec2/unittest/function_trace.c new file mode 100644 index 0000000..5ed47a9 --- /dev/null +++ b/libcodec2-android/src/codec2/unittest/function_trace.c @@ -0,0 +1,36 @@ +#include + +static FILE *fp_trace; + +void +__attribute__ ((constructor)) +trace_begin (void) +{ + fp_trace = fopen("function_trace.out", "w"); +} + +void +__attribute__ ((destructor)) +trace_end (void) +{ + if(fp_trace != NULL) { + fclose(fp_trace); + } +} + + +void +__cyg_profile_func_enter (void *func, void *caller) +{ + if(fp_trace != NULL) { + fprintf(fp_trace, "e %p %p\n", func, caller); + } +} + +void +__cyg_profile_func_exit (void *func, void *caller) +{ + if(fp_trace != NULL) { + fprintf(fp_trace, "x %p %p\n", func, caller); + } +} diff --git a/libcodec2-android/src/codec2/unittest/hts1a.h b/libcodec2-android/src/codec2/unittest/hts1a.h new file mode 100644 index 0000000..2e40397 --- /dev/null +++ b/libcodec2-android/src/codec2/unittest/hts1a.h @@ -0,0 +1,8002 @@ +short hts1a_raw[] = { +-14, +-14, +-8, +-7, +-11, +-15, +-14, +-16, +-24, +-26, +-25, +-26, +-22, +-22, +-24, +-19, +-19, +-19, +-26, +-28, +-28, +-21, +-16, +-14, +-19, +-19, +-18, +-18, +-16, +-18, +-26, +-28, +-35, +-28, +-19, +-12, +-12, +-14, +-15, +-21, +-16, +-12, +-9, +-11, +-5, +-8, +-7, +-5, +-8, +-8, +-7, +3, +3, +-1, +-2, +-5, +-1, +-7, +-5, +-4, +-4, +-7, +-5, +-9, +-8, +-12, +-21, +-21, +-28, +-28, +-24, +-25, +-29, +-29, +-31, +-32, +-28, +-31, +-35, +-26, +-35, +-31, +-28, +-32, +-26, +-21, +-22, +-16, +-15, +-14, +-18, +-12, +-19, +-12, +-12, +-16, +-15, +-16, +-16, +-16, +-12, +-15, +-12, +-18, +-18, +-15, +-19, +-18, +-16, +-14, +-15, +-16, +-16, +-16, +-14, +-16, +-11, +-4, +-8, +-8, +-9, +-8, +-15, +-12, +-11, +-12, +-9, +-11, +-8, +-11, +-14, +-11, +-18, +-16, +-14, +-14, +-9, +-5, +-8, +-15, +-16, +-14, +-16, +-18, +-15, +-31, +-32, +-19, +-15, +-12, +-16, +-15, +-18, +-14, +-12, +-12, +-16, +-24, +-25, +-19, +-18, +-22, +-21, +-19, +-16, +-16, +-14, +-16, +-24, +-24, +-19, +-24, +-24, +-19, +-21, +-24, +-25, +-28, +-25, +-25, +-26, +-18, +-12, +-22, +-25, +-26, +-25, +-24, +-24, +-22, +-21, +-19, +-16, +-15, +-12, +-12, +-14, +-8, +-12, +-11, +-5, +-1, +0, +0, +-1, +-4, +-4, +-5, +-7, +-7, +-11, +-8, +-11, +-5, +-4, +-2, +-8, +-5, +-12, +-14, +-14, +-14, +-12, +-12, +-7, +-16, +-21, +-22, +-22, +-25, +-28, +-24, +-31, +-32, +-33, +-33, +-35, +-31, +-29, +-32, +-36, +-36, +-35, +-35, +-32, +-26, +-35, +-29, +-22, +-18, +-11, +-16, +-14, +-14, +-11, +-8, +-8, +-12, +-11, +-24, +-25, +-12, +-8, +-7, +-9, +-5, +-9, +-8, +-4, +-7, +-5, +-11, +-11, +-4, +-5, +-5, +-8, +-4, +-8, +-4, +-8, +-14, +-8, +-9, +-12, +-11, +-15, +-22, +-21, +-19, +-22, +-15, +-22, +-18, +-15, +-16, +-18, +-12, +-14, +-21, +-19, +-16, +-19, +-21, +-22, +-21, +-25, +-19, +-26, +-21, +-19, +-21, +-19, +-16, +-15, +-18, +-9, +-8, +-9, +-8, +-14, +-19, +-15, +-16, +-16, +-16, +-12, +-11, +-12, +-11, +-11, +-7, +-19, +-18, +-14, +-28, +-28, +-26, +-28, +-31, +-31, +-24, +-25, +-26, +-29, +-28, +-31, +-28, +-24, +-21, +-19, +-21, +-16, +-24, +-24, +-18, +-16, +-19, +-12, +-9, +-12, +-14, +-12, +-7, +-9, +-9, +-5, +-5, +-9, +-7, +-5, +-5, +-4, +-21, +-25, +-12, +-5, +5, +10, +10, +-1, +-2, +3, +-4, +-7, +-8, +-5, +-11, +-12, +-25, +-26, +-24, +-33, +-32, +-29, +-35, +-36, +-33, +-38, +-42, +-38, +-38, +-36, +-36, +-33, +-32, +-38, +-32, +-28, +-22, +-18, +-14, +-9, +-15, +-9, +-8, +-11, +-2, +-2, +-5, +-2, +3, +-2, +-1, +-4, +-7, +-12, +-12, +-12, +-16, +-15, +-11, +-11, +-8, +-7, +-5, +-9, +-12, +-12, +-18, +-19, +-26, +-26, +-22, +-22, +-24, +-21, +-15, +-12, +-14, +-18, +-16, +-15, +-26, +-26, +-28, +-26, +-26, +-25, +-28, +-25, +-14, +-12, +-14, +-18, +-24, +-14, +-9, +-5, +-7, +-9, +-7, +-8, +-14, +-11, +-8, +-15, +-8, +-7, +-5, +-2, +-5, +-5, +-8, +-15, +-15, +-16, +-33, +-35, +-25, +-15, +-14, +-18, +-22, +-18, +-22, +-24, +-29, +-31, +-32, +-33, +-31, +-36, +-31, +-25, +-31, +-33, +-28, +-26, +-22, +-25, +-25, +-16, +-18, +-16, +-15, +-15, +-14, +-11, +-7, +-5, +-4, +-8, +-4, +-5, +-8, +-4, +0, +-7, +-1, +-1, +-9, +-11, +-12, +-14, +-15, +-9, +-8, +-7, +-5, +-11, +-12, +-12, +-19, +-15, +-16, +-16, +-12, +-18, +-19, +-19, +-18, +-15, +-19, +-24, +-19, +-25, +-28, +-26, +-26, +-26, +-28, +-26, +-22, +-21, +-25, +-19, +-16, +-16, +-9, +-9, +-12, +-7, +-11, +-7, +-12, +-15, +-18, +-24, +-16, +-16, +-12, +-19, +-18, +-16, +-25, +-24, +-22, +-25, +-21, +-25, +-24, +-24, +-19, +-15, +-26, +-19, +-14, +-19, +-16, +-18, +-26, +-28, +-16, +-4, +10, +15, +12, +13, +10, +8, +8, +-7, +-11, +-19, +-29, +-31, +-33, +-29, +-26, +-26, +-26, +-22, +-15, +-16, +-15, +-19, +-18, +-19, +-12, +-15, +-21, +-21, +-24, +-22, +-19, +-19, +-15, +-16, +-16, +-24, +-18, +-25, +-24, +-24, +-26, +-21, +-22, +-22, +-18, +-16, +-19, +-22, +-22, +-19, +-24, +-19, +-16, +-19, +-15, +-16, +-12, +-4, +-9, +-19, +-12, +-15, +-19, +-16, +-16, +-15, +-14, +-12, +-12, +-11, +-8, +-9, +-9, +-12, +-11, +-11, +-8, +-9, +-5, +5, +-1, +-1, +-4, +-8, +-8, +-8, +-9, +-8, +-7, +-11, +-19, +-19, +-18, +-26, +-21, +-24, +-24, +-26, +-35, +-32, +-36, +-31, +-26, +-28, +-26, +-25, +-22, +-26, +-35, +-35, +-36, +-45, +-45, +-33, +-28, +-19, +-16, +-9, +-14, +-12, +-5, +-11, +-8, +-7, +-5, +-5, +2, +-2, +-5, +0, +-7, +-5, +-11, +-14, +-14, +-8, +-8, +-7, +-9, +-11, +-11, +-15, +-15, +-14, +-12, +-14, +-18, +-16, +-9, +-12, +-12, +-14, +-16, +-22, +-25, +-26, +-31, +-29, +-26, +-29, +-25, +-22, +-19, +-18, +-24, +-21, +-24, +-19, +-12, +-15, +-15, +-16, +-15, +-14, +-16, +-15, +-16, +-24, +-19, +-22, +-26, +-24, +-19, +-18, +-19, +-15, +-11, +-5, +-2, +-2, +-4, +-7, +-4, +-8, +-8, +-11, +-15, +-11, +-9, +-7, +-9, +-4, +2, +-8, +-1, +-2, +-12, +-9, +-15, +-21, +-31, +-38, +-32, +-32, +-35, +-31, +-28, +-33, +-32, +-35, +-33, +-33, +-36, +-36, +-42, +-45, +-43, +-33, +-29, +-25, +-21, +-14, +-12, +-11, +-16, +-15, +-12, +-14, +-15, +-15, +-9, +-2, +-2, +0, +-5, +-4, +-2, +0, +8, +9, +10, +12, +3, +6, +5, +9, +3, +-7, +-9, +-25, +-32, +-25, +-11, +-1, +2, +-1, +-9, +-15, +-12, +-15, +-21, +-29, +-35, +-39, +-39, +-31, +-33, +-33, +-26, +-28, +-29, +-31, +-33, +-26, +-24, +-22, +-24, +-21, +-18, +-15, +-18, +-26, +-25, +-22, +-18, +-21, +-24, +-26, +-35, +-28, +-26, +-26, +-24, +-22, +-16, +-18, +-22, +-15, +-22, +-24, +-16, +-14, +-11, +-4, +3, +5, +3, +8, +8, +6, +0, +6, +3, +-5, +0, +6, +-5, +-5, +-8, +-11, +-14, +-19, +-21, +-24, +-25, +-28, +-28, +-22, +-28, +-38, +-38, +-26, +-26, +-22, +-32, +-31, +-26, +-18, +-12, +-11, +-9, +-16, +-21, +-19, +-16, +-16, +-18, +-12, +-12, +-8, +-7, +-15, +-16, +-16, +-19, +-21, +-22, +-22, +-22, +-25, +-32, +-29, +-35, +-32, +-33, +-33, +-29, +-25, +-18, +-15, +-16, +-12, +-12, +-8, +-2, +0, +6, +2, +0, +5, +2, +-5, +-1, +-5, +-8, +-8, +-8, +-9, +-15, +-12, +-11, +-5, +-9, +-18, +-19, +-22, +-16, +-14, +-11, +-2, +-2, +-8, +-16, +-21, +-22, +-19, +-24, +-24, +-16, +-16, +-12, +-7, +-8, +-5, +-8, +-16, +-24, +-29, +-35, +-36, +-36, +-38, +-41, +-38, +-43, +-41, +-39, +-35, +-32, +-31, +-32, +-32, +-28, +-24, +-24, +-19, +-16, +-18, +-12, +-2, +-1, +5, +5, +-9, +-25, +-21, +-15, +-14, +-15, +-14, +-18, +-16, +-12, +-11, +-5, +-2, +-7, +-11, +-7, +-18, +-11, +-5, +-2, +0, +-2, +0, +0, +-5, +-11, +-14, +-12, +-14, +-14, +-16, +-18, +-18, +-29, +-38, +-38, +-42, +-46, +-38, +-35, +-32, +-31, +-16, +-5, +0, +12, +19, +20, +17, +20, +20, +16, +16, +12, +5, +-7, +-15, +-14, +-22, +-25, +-26, +-26, +-32, +-38, +-43, +-45, +-49, +-55, +-56, +-52, +-56, +-48, +-39, +-33, +-28, +-31, +-24, +-29, +-32, +-26, +-16, +-7, +-14, +-11, +-11, +-16, +-18, +-29, +-28, +-24, +-14, +-11, +-15, +-4, +-11, +-12, +-5, +-2, +3, +5, +2, +10, +5, +6, +2, +-1, +-7, +-7, +-12, +-14, +-16, +-22, +-21, +-18, +-19, +-22, +-11, +-1, +3, +2, +2, +3, +6, +-2, +-7, +-15, +-18, +-24, +-26, +-31, +-38, +-41, +-39, +-36, +-39, +-33, +-26, +-24, +-18, +-19, +-21, +-19, +-18, +-16, +-21, +-21, +-15, +-14, +-18, +-24, +-25, +-31, +-38, +-43, +-45, +-46, +-43, +-39, +-33, +-28, +-19, +-11, +-8, +-4, +5, +12, +12, +17, +16, +9, +9, +10, +6, +8, +-4, +3, +0, +-5, +-11, +-14, +-28, +-26, +-15, +-24, +-32, +-32, +-28, +-32, +-28, +-18, +-22, +-22, +-15, +-15, +-24, +-25, +-26, +-25, +-16, +-16, +-18, +-22, +-21, +-26, +-29, +-25, +-22, +-19, +-16, +-9, +-4, +2, +6, +10, +3, +2, +0, +-7, +-7, +-14, +-16, +-15, +-22, +-26, +-29, +-25, +-25, +-22, +-29, +-35, +-25, +-19, +-14, +-15, +-12, +-15, +-26, +-24, +-29, +-28, +-26, +-26, +-29, +-32, +-38, +-42, +-38, +-33, +-29, +-25, +-25, +-21, +-14, +-5, +5, +6, +8, +6, +2, +0, +-1, +-9, +-16, +-18, +-19, +-22, +-22, +-21, +-15, +-18, +-22, +-11, +-8, +-11, +-7, +5, +2, +-2, +-4, +-5, +-7, +-5, +6, +-7, +-9, +-8, +-19, +-22, +-24, +-26, +-29, +-33, +-29, +-25, +-24, +-21, +-21, +-24, +-29, +-28, +-26, +-25, +-21, +-26, +-26, +-25, +-31, +-31, +-38, +-39, +-38, +-33, +-21, +-9, +-5, +-4, +5, +3, +-2, +-7, +-8, +-9, +-15, +-16, +-16, +-22, +-21, +-24, +-24, +-16, +-22, +-21, +-24, +-26, +-22, +-16, +-9, +-11, +-2, +6, +2, +-4, +-9, +-16, +-21, +-21, +-21, +-24, +-22, +-22, +-19, +-18, +-16, +-12, +-14, +-12, +-4, +-2, +-4, +-8, +-5, +-5, +-11, +0, +2, +-7, +-8, +-12, +-14, +-19, +-24, +-25, +-28, +-9, +-5, +-29, +-33, +-22, +-22, +-21, +-15, +-18, +-24, +-21, +-26, +-29, +-25, +-33, +-29, +-29, +-29, +-31, +-28, +-28, +-25, +-24, +-21, +-25, +-14, +-7, +-5, +-16, +-19, +-21, +-28, +-33, +-38, +-36, +-26, +-25, +-22, +-8, +-5, +0, +5, +10, +16, +13, +10, +8, +5, +-4, +-1, +-7, +-11, +-18, +-28, +-31, +-42, +-43, +-38, +-38, +-22, +-11, +-8, +-7, +6, +6, +3, +13, +8, +-7, +-2, +-9, +-16, +-11, +-15, +-18, +-24, +-28, +-24, +-25, +-22, +-25, +-28, +-25, +-38, +-39, +-35, +-36, +-14, +-25, +-42, +-16, +-9, +-29, +-28, +-26, +-31, +-29, +-39, +-29, +-12, +-7, +-1, +-2, +-4, +0, +2, +-5, +-15, +-21, +-35, +-32, +-22, +-19, +-18, +-19, +-5, +6, +0, +-14, +-26, +-11, +0, +-19, +-24, +-24, +-25, +-25, +-31, +-35, +-32, +-19, +-5, +-7, +-1, +0, +6, +8, +0, +-8, +-5, +9, +9, +6, +2, +9, +13, +-7, +-26, +-36, +-35, +-42, +-56, +-49, +-42, +-42, +-36, +-28, +-12, +-12, +-21, +-18, +-24, +-19, +-22, +-25, +-24, +-21, +-18, +-15, +-15, +-8, +-7, +3, +-4, +-11, +-22, +-22, +-16, +-24, +-21, +-7, +-22, +-31, +-16, +-21, +-11, +-12, +-21, +-26, +-28, +-19, +-28, +-31, +-25, +-38, +-38, +-29, +-33, +-38, +-33, +-9, +10, +19, +5, +-4, +-4, +-1, +-12, +-21, +-18, +-16, +-16, +-19, +-8, +-5, +-7, +-2, +0, +12, +16, +15, +2, +-14, +-12, +-22, +-29, +-42, +-36, +-25, +-16, +-18, +-19, +-12, +6, +2, +2, +9, +-4, +-11, +-19, +-25, +-24, +-28, +-35, +-43, +-35, +-25, +-41, +-45, +-42, +-39, +-35, +-41, +-33, +-29, +-18, +-2, +-19, +-32, +-12, +3, +-8, +-11, +-26, +-35, +-29, +-29, +-24, +-15, +-9, +-8, +-1, +2, +0, +-1, +-2, +2, +-1, +-8, +-9, +-18, +-21, +-26, +-32, +-35, +-26, +-15, +-9, +-7, +-2, +-2, +2, +13, +12, +-2, +-11, +-15, +-18, +-28, +-29, +-24, +-28, +-32, +-31, +-28, +-15, +-9, +-21, +-4, +10, +-7, +-5, +-14, +-18, +-9, +-21, +-25, +-29, +-32, +-36, +-31, +-16, +-24, +-18, +-18, +-22, +-25, +-32, +-31, +-12, +-8, +-8, +2, +-2, +15, +9, +-14, +-9, +-9, +0, +-1, +-22, +-24, +-18, +-32, +-29, +-29, +-39, +-33, +-24, +-41, +-33, +-18, +-33, +-28, +-32, +-28, +-24, +-35, +-32, +-24, +-21, +-14, +-21, +-25, +-18, +-9, +-8, +-11, +0, +3, +5, +-5, +-14, +-19, +-15, +-9, +2, +-2, +0, +12, +10, +19, +22, +8, +-2, +-5, +-9, +-22, +-16, +-5, +-16, +-21, +-19, +-16, +-16, +-26, +-29, +-28, +-25, +-1, +-2, +-15, +-19, +-29, +-35, +-35, +-38, +-36, +-38, +-29, +-46, +-56, +-38, +-45, +-62, +-55, +-48, +-33, +-42, +-79, +-93, +33, +207, +203, +112, +30, +-29, +-28, +-70, +-148, +-176, +-96, +-69, +-87, +-32, +-45, +-24, +46, +64, +76, +46, +43, +60, +39, +20, +12, +6, +-35, +-26, +-28, +-67, +-8, +-18, +-55, +6, +-38, +-75, +-24, +-5, +-5, +-25, +-25, +-35, +22, +93, +23, +-28, +-55, +-83, +-42, +-83, +-103, +-56, +-22, +44, +3, +-33, +6, +8, +12, +17, +-5, +-131, +-189, +100, +265, +40, +49, +135, +-59, +12, +51, +-123, +-87, +-182, +-298, +-226, +-192, +-205, +-198, +-49, +30, +39, +183, +238, +183, +141, +187, +132, +83, +176, +16, +-116, +-90, +-118, +-138, +-189, +-123, +-137, +-147, +-9, +-28, +49, +125, +66, +29, +43, +46, +-70, +-100, +-75, +-121, +-117, +-109, +-58, +-28, +29, +77, +74, +128, +118, +63, +12, +56, +158, +90, +0, +-29, +-127, +-103, +-33, +-137, +-140, +-18, +-43, +-66, +-7, +-45, +-73, +6, +42, +-35, +-111, +-104, +-92, +-147, +-526, +-1264, +-1575, +-765, +438, +997, +1207, +1339, +1320, +1748, +2310, +2055, +1176, +299, +-434, +-1009, +-1257, +-1632, +-2439, +-2960, +-2928, +-2615, +-2054, +-1308, +-736, +-303, +445, +1377, +2112, +2587, +2728, +2464, +2061, +1838, +1525, +888, +182, +-511, +-1203, +-1516, +-1425, +-1447, +-1556, +-1386, +-1076, +-642, +-16, +437, +547, +662, +915, +1092, +1055, +883, +519, +53, +-259, +-472, +-771, +-1037, +-1070, +-981, +-814, +-511, +-203, +2, +251, +519, +616, +631, +648, +582, +476, +391, +271, +-18, +-305, +-348, +-399, +-478, +-389, +-348, +-351, +-222, +-121, +-386, +-1735, +-3442, +-2533, +573, +2049, +2601, +3434, +2708, +2736, +4175, +4209, +2551, +296, +-1119, +-2477, +-3494, +-3361, +-4179, +-5485, +-5636, +-4580, +-3316, +-2031, +-22, +1181, +1763, +3271, +4874, +5510, +5224, +4612, +3186, +1425, +652, +-147, +-1598, +-2834, +-3484, +-3818, +-3613, +-2537, +-1594, +-1278, +-574, +734, +1997, +2818, +3281, +3233, +2488, +1960, +1561, +520, +-672, +-1616, +-2288, +-2651, +-2450, +-2115, +-2137, +-1772, +-998, +-341, +312, +891, +1208, +1322, +1574, +1687, +1285, +810, +427, +-18, +-404, +-664, +-1030, +-1306, +-1064, +-656, +-397, +-182, +-16, +170, +514, +922, +1023, +956, +915, +626, +-42, +-1701, +-4508, +-5074, +-1033, +2559, +2488, +3256, +3525, +2940, +5224, +6208, +3992, +-50, +-2480, +-3034, +-4628, +-4714, +-5427, +-7560, +-7667, +-5645, +-2855, +-1414, +621, +2572, +3066, +5038, +7469, +7951, +6155, +4438, +2841, +544, +-373, +-1233, +-3376, +-5177, +-5271, +-4414, +-3653, +-2121, +-788, +-392, +720, +2701, +3972, +4022, +3914, +3451, +2206, +1426, +796, +-632, +-2163, +-3381, +-4159, +-4113, +-3045, +-1776, +-1312, +-743, +275, +1098, +1851, +2335, +2131, +1527, +1259, +1200, +713, +73, +-516, +-1176, +-1677, +-1755, +-1672, +-1670, +-1336, +-625, +37, +718, +1435, +1620, +1412, +1445, +1137, +438, +388, +645, +505, +194, +-907, +-3965, +-7195, +-5524, +1111, +4509, +3145, +3535, +3294, +3846, +7424, +7315, +3111, +-1601, +-3095, +-3366, +-4972, +-5281, +-7332, +-9647, +-8219, +-4862, +-1956, +-808, +1125, +2677, +3750, +7120, +9202, +7949, +5515, +3979, +2538, +716, +-4, +-1881, +-5029, +-6072, +-5264, +-4448, +-3573, +-2254, +-1472, +-802, +1513, +3981, +4536, +4289, +4083, +3336, +2484, +2141, +963, +-1417, +-3088, +-3937, +-4523, +-3991, +-2694, +-2023, +-1694, +-593, +580, +1431, +2310, +2417, +1777, +1433, +1598, +1241, +374, +-69, +-753, +-1490, +-1449, +-1357, +-1625, +-1628, +-1176, +-845, +-356, +723, +1418, +1370, +1530, +1663, +1222, +1057, +1140, +345, +-576, +-628, +-1435, +-4343, +-6010, +-2139, +2712, +2651, +2832, +3744, +2781, +5433, +7295, +4184, +117, +-2377, +-2990, +-4553, +-4853, +-5022, +-7143, +-6439, +-4074, +-2314, +-1340, +-260, +822, +720, +2570, +4741, +4967, +4932, +4619, +4026, +2856, +2222, +1221, +-911, +-1898, +-2510, +-2962, +-2593, +-1870, +-1447, +-1553, +-1085, +-648, +-342, +240, +418, +505, +623, +1054, +1416, +1337, +1193, +544, +-101, +-348, +-407, +-426, +-604, +-573, +-519, +-297, +9, +-235, +-589, +-927, +-952, +-563, +-310, +9, +168, +219, +369, +245, +40, +-235, +-451, +-287, +46, +415, +683, +836, +842, +670, +489, +316, +166, +54, +-36, +-65, +36, +-96, +-883, +-1693, +-1570, +-756, +-117, +340, +975, +1918, +2596, +2086, +1068, +199, +-509, +-625, +-662, +-529, +71, +-33, +-597, +-1067, +-1512, +-1670, +-1870, +-1901, +-1547, +-974, +-269, +142, +260, +272, +56, +-164, +-24, +509, +1019, +1292, +1496, +1616, +1660, +1613, +1357, +966, +660, +605, +597, +480, +275, +-134, +-671, +-1134, +-1376, +-1473, +-1534, +-1564, +-1496, +-1237, +-812, +-402, +-128, +64, +267, +431, +522, +479, +332, +320, +468, +565, +548, +407, +180, +-63, +-264, +-455, +-638, +-685, +-574, +-358, +-32, +238, +328, +329, +371, +427, +438, +448, +424, +383, +441, +482, +29, +-1189, +-2337, +-1898, +-396, +261, +599, +1708, +2529, +2347, +1500, +312, +-430, +-148, +278, +227, +432, +471, +-532, +-1710, +-2265, +-2405, +-2323, +-2014, +-1597, +-1182, +-690, +-406, +-567, +-617, +-358, +-89, +343, +1088, +1780, +1952, +1833, +1659, +1418, +1391, +1493, +1446, +1302, +1180, +911, +415, +-45, +-492, +-962, +-1186, +-1142, +-1095, +-1100, +-1196, +-1422, +-1556, +-1353, +-995, +-586, +-59, +257, +287, +287, +197, +3, +-36, +156, +418, +737, +932, +759, +427, +165, +-84, +-252, +-225, +-148, +-84, +34, +39, +-96, +-169, +-168, +-72, +63, +179, +360, +539, +485, +-67, +-1439, +-2707, +-1793, +379, +1014, +1030, +2144, +2711, +2106, +1211, +-4, +-525, +364, +955, +628, +584, +170, +-1432, +-2769, +-2892, +-2525, +-2075, +-1551, +-1390, +-1363, +-1025, +-944, +-1087, +-615, +145, +594, +1099, +1758, +1969, +1712, +1453, +1289, +1384, +1843, +2083, +1800, +1387, +975, +400, +-86, +-260, +-446, +-681, +-781, +-918, +-1183, +-1481, +-1768, +-1877, +-1558, +-1020, +-515, +-28, +192, +9, +-261, +-322, +-178, +98, +444, +706, +805, +761, +492, +145, +-5, +6, +20, +53, +81, +27, +-103, +-249, +-325, +-219, +-9, +139, +291, +473, +547, +400, +42, +-904, +-2367, +-2330, +-46, +1336, +924, +1518, +2371, +1895, +1372, +564, +-271, +454, +1397, +1020, +578, +328, +-986, +-2542, +-2821, +-2398, +-1994, +-1564, +-1564, +-1956, +-1922, +-1598, +-1434, +-879, +175, +771, +983, +1429, +1726, +1615, +1534, +1616, +1721, +2049, +2369, +2073, +1426, +888, +304, +-192, +-219, +-94, +-284, +-630, +-961, +-1359, +-1618, +-1696, +-1748, +-1454, +-778, +-324, +-128, +-18, +-195, +-423, +-382, +-226, +70, +483, +701, +628, +428, +210, +10, +-22, +114, +227, +272, +257, +169, +25, +-75, +-138, +-118, +102, +328, +287, +159, +135, +-135, +-1224, +-2588, +-2139, +243, +1339, +861, +1548, +2238, +1746, +1333, +575, +20, +917, +1538, +977, +662, +405, +-964, +-2463, +-2640, +-2228, +-1890, +-1544, +-1616, +-1970, +-1980, +-1750, +-1567, +-867, +258, +771, +834, +1153, +1445, +1448, +1465, +1600, +1732, +2025, +2283, +1981, +1387, +883, +305, +-131, +-60, +112, +-138, +-472, +-713, +-1204, +-1632, +-1686, +-1616, +-1274, +-676, +-513, +-574, +-314, +-246, +-516, +-545, +-349, +-28, +512, +853, +680, +427, +319, +192, +159, +289, +343, +264, +254, +193, +-29, +-143, +-148, +-107, +152, +371, +271, +-62, +-913, +-2303, +-2531, +-572, +992, +788, +1179, +2054, +1888, +1608, +1079, +285, +625, +1391, +1211, +911, +815, +-239, +-1829, +-2473, +-2303, +-1946, +-1557, +-1548, +-1949, +-2143, +-1976, +-1775, +-1202, +-178, +458, +614, +910, +1272, +1374, +1395, +1466, +1518, +1745, +2114, +2090, +1680, +1224, +657, +53, +-175, +-52, +-45, +-203, +-454, +-892, +-1329, +-1492, +-1447, +-1204, +-814, +-655, +-631, +-406, +-247, +-334, +-468, +-526, +-358, +83, +466, +547, +455, +343, +228, +230, +309, +335, +371, +394, +352, +231, +64, +-60, +-48, +104, +202, +-11, +-747, +-2004, +-2576, +-1166, +550, +643, +737, +1650, +1868, +1642, +1375, +674, +546, +1071, +1077, +943, +1115, +595, +-841, +-1963, +-2249, +-2154, +-1810, +-1444, +-1523, +-1822, +-1890, +-1813, +-1512, +-726, +32, +333, +650, +1095, +1306, +1343, +1429, +1450, +1429, +1627, +1802, +1692, +1440, +1016, +360, +-106, +-130, +-84, +-157, +-290, +-645, +-1068, +-1270, +-1301, +-1210, +-984, +-715, +-532, +-436, +-353, +-370, +-471, +-464, +-363, +-165, +206, +496, +517, +400, +306, +192, +166, +284, +373, +383, +386, +383, +319, +224, +135, +127, +115, +-491, +-1799, +-2388, +-1161, +363, +522, +420, +1024, +1442, +1559, +1517, +1026, +750, +863, +628, +452, +800, +684, +-348, +-1405, +-1942, +-2143, +-2044, +-1704, +-1476, +-1461, +-1526, +-1621, +-1422, +-716, +5, +325, +585, +1013, +1288, +1380, +1476, +1487, +1409, +1382, +1354, +1255, +1174, +968, +519, +129, +-52, +-240, +-438, +-441, +-399, +-604, +-941, +-1258, +-1284, +-315, +394, +-628, +-1085, +-532, +-675, +-126, +-277, +-1573, +-522, +598, +237, +407, +805, +1075, +653, +318, +362, +-59, +-56, +-240, +-233, +312, +-489, +-2514, +-4669, +-4202, +-712, +2020, +3805, +4136, +2529, +3440, +5718, +5515, +3867, +1626, +-647, +-2193, +-2176, +-1803, +-3276, +-5465, +-7012, +-7661, +-6402, +-3818, +-2200, +-1338, +105, +1535, +3292, +5837, +7231, +6633, +5443, +4310, +3120, +2167, +863, +-1674, +-4124, +-5139, +-5305, +-4852, +-3473, +-1936, +-1080, +-52, +1583, +2812, +3833, +4309, +3278, +2191, +1920, +1330, +168, +-1132, +-2559, +-3548, +-3413, +-3045, +-3000, +-2440, +-1105, +424, +1562, +2003, +1718, +1409, +1794, +1922, +959, +-191, +-649, +-329, +-22, +-2232, +-7587, +-10133, +-6123, +3815, +11010, +10048, +7655, +4465, +7798, +10768, +5766, +-1615, +-9642, +-12287, +-10166, +-6666, +-6229, +-9606, +-9109, +-5832, +-1326, +4475, +7162, +6468, +5722, +6975, +8255, +7576, +5333, +919, +-3576, +-5125, +-4751, +-4305, +-4140, +-4257, +-4346, +-2541, +1238, +4948, +7386, +6832, +4496, +3434, +2708, +1527, +-206, +-3454, +-6091, +-5990, +-4237, +-2710, +-1963, +-1253, +-324, +1191, +2740, +2787, +2061, +1796, +1911, +1408, +-65, +-1632, +-2642, +-2612, +-2111, +-2132, +-2119, +-703, +1824, +2113, +-3052, +-10217, +-9285, +2474, +15080, +14696, +9168, +3569, +1871, +8840, +7733, +-863, +-10981, +-16373, +-12835, +-7172, +-2606, +-4832, +-7242, +-3728, +1232, +7185, +9862, +7265, +2730, +1101, +4013, +4560, +2412, +-866, +-5642, +-6610, +-3630, +-702, +380, +20, +-726, +-825, +2400, +6645, +7202, +4332, +728, +-1582, +-1799, +-535, +-1312, +-4539, +-5701, +-4256, +-1013, +2246, +2495, +1214, +859, +1630, +1894, +788, +-715, +-1510, +-1008, +-797, +-1376, +-2139, +-2347, +-1166, +64, +874, +1826, +2927, +1167, +-7529, +-13865, +-7119, +8693, +17405, +11376, +5806, +-706, +3910, +12384, +4898, +-5841, +-15567, +-15268, +-9199, +-2915, +-2, +-6828, +-7298, +-645, +4931, +9593, +8510, +3404, +-1029, +1545, +5927, +3179, +704, +-3058, +-7267, +-5092, +-1456, +523, +578, +803, +476, +128, +4503, +7132, +4843, +2484, +-314, +-2661, +-1629, +-312, +-2667, +-4845, +-4645, +-3556, +-106, +3033, +2307, +815, +1327, +2202, +1608, +238, +-1347, +-2299, +-1676, +-1349, +-2026, +-2123, +-993, +185, +601, +1363, +2536, +1356, +-6385, +-14216, +-8118, +9341, +18113, +10028, +5714, +-662, +2201, +13868, +5555, +-6998, +-16122, +-13932, +-7484, +-3936, +-511, +-7031, +-7875, +1569, +7356, +9852, +7233, +2382, +-812, +2168, +7258, +2096, +-2579, +-3745, +-6101, +-3546, +-123, +70, +-1707, +-134, +2587, +1895, +4233, +5028, +2090, +1861, +1389, +-720, +-1444, +-1278, +-3112, +-4277, +-3164, +-2898, +-1520, +861, +1640, +1528, +1967, +2726, +1695, +329, +-492, +-1697, +-1969, +-1929, +-2346, +-2041, +-600, +480, +449, +1232, +2001, +-2082, +-11654, +-11999, +3894, +17853, +11683, +5279, +1994, +-1245, +12112, +9934, +-5184, +-14616, +-13918, +-5837, +-3437, +-2238, +-7345, +-9704, +1457, +9286, +8837, +4980, +1010, +1222, +4271, +7312, +1819, +-5336, +-4002, +-3308, +-1866, +-985, +-3300, +-3466, +-199, +5187, +4104, +1751, +2997, +2126, +3600, +3670, +-678, +-3106, +-1891, +-1261, +-2368, +-2264, +-3919, +-3476, +176, +1251, +1354, +400, +691, +2138, +1896, +1695, +-373, +-2231, +-1989, +-1816, +-1622, +-1393, +-557, +-261, +839, +1234, +-6099, +-13830, +-6704, +12207, +17650, +5219, +4873, +2652, +5438, +14840, +2038, +-11781, +-14722, +-7010, +-2482, +-5104, +-8182, +-11393, +-3796, +9197, +8387, +2298, +752, +2771, +7659, +8564, +3986, +-5080, +-5073, +893, +-749, +-2984, +-6554, +-6884, +-950, +4891, +4912, +-866, +561, +5333, +7261, +5833, +-1037, +-4326, +-1758, +1554, +-393, +-5394, +-5454, +-3454, +179, +2665, +-1061, +-2457, +677, +3635, +4058, +1347, +-451, +-846, +-346, +-403, +-2221, +-2535, +-1778, +-671, +454, +-2159, +-10071, +-12945, +-179, +17116, +12061, +403, +7550, +7610, +11287, +11279, +-5843, +-14361, +-7034, +-1442, +-6719, +-11613, +-12495, +-8241, +4100, +9619, +-682, +-1891, +5146, +9786, +11057, +5758, +-974, +-3229, +3852, +2712, +-6304, +-8209, +-8290, +-4368, +1412, +1119, +-2455, +-1243, +5528, +8521, +7421, +3537, +-1505, +772, +3590, +-341, +-4257, +-4940, +-4165, +-2414, +-583, +-3011, +-4147, +39, +2313, +2528, +2055, +1207, +1947, +2715, +1007, +-2408, +-2377, +-414, +-1230, +-1867, +-3633, +-9724, +-12863, +-3041, +14045, +10335, +-2909, +9310, +13964, +12254, +12191, +-3180, +-10105, +-345, +-192, +-11763, +-16662, +-13357, +-7749, +648, +2417, +-6327, +-892, +9776, +11498, +8643, +4306, +4143, +5477, +7138, +935, +-8335, +-6130, +-4015, +-5890, +-6088, +-6166, +-3580, +1133, +4766, +3210, +4129, +8211, +5810, +3999, +3155, +502, +-186, +-1683, +-4503, +-5169, +-3667, +-3607, +-4424, +-3364, +-1626, +496, +2096, +1967, +2167, +3503, +3642, +1586, +-283, +-332, +-32, +-1544, +-4229, +-7899, +-12648, +-8414, +7338, +10181, +-4368, +4177, +17458, +13517, +13236, +4243, +-5162, +1964, +2892, +-11114, +-17844, +-12323, +-7832, +-6496, +-4604, +-7565, +-3331, +7284, +7605, +3611, +5653, +10209, +9934, +7845, +4885, +-679, +-230, +-329, +-7610, +-9785, +-6780, +-5146, +-4804, +-3114, +-808, +1753, +6140, +6461, +4152, +5323, +6386, +4387, +857, +-710, +-1095, +-2162, +-3546, +-6282, +-6035, +-3066, +-2787, +-2956, +-1881, +510, +2940, +3258, +2654, +2028, +2429, +2474, +1033, +-233, +-2762, +-7034, +-11056, +-7771, +4646, +5433, +-5715, +3990, +16374, +11856, +10648, +5494, +-18, +5462, +1544, +-10835, +-12677, +-6704, +-7160, +-10246, +-8169, +-7359, +-3156, +2089, +-420, +260, +6647, +8892, +6911, +7202, +8552, +5729, +4090, +1688, +-3204, +-3246, +-3532, +-7259, +-7538, +-4539, +-3069, +-2792, +-884, +932, +3421, +5464, +3526, +3536, +5345, +4133, +2168, +584, +-281, +-1044, +-2500, +-4101, +-4951, +-3804, +-3109, +-3549, +-2503, +-910, +410, +1643, +2037, +1937, +2188, +2788, +2315, +-572, +-6503, +-9657, +-1302, +7699, +-1541, +-6680, +9781, +13307, +6279, +7430, +3430, +3365, +5749, +-4342, +-10037, +-4328, +-4039, +-10940, +-9452, +-4717, +-5445, +-3381, +-2392, +-2448, +2723, +4173, +2037, +4710, +9437, +7904, +4223, +5554, +4404, +1385, +-43, +-3303, +-4253, +-3654, +-5194, +-5691, +-3290, +-1456, +-2081, +-498, +1909, +2226, +3394, +3325, +2560, +4033, +3472, +1280, +1159, +354, +-1428, +-2003, +-2912, +-3889, +-3756, +-3522, +-3245, +-2163, +-801, +-58, +556, +1671, +2327, +2137, +1292, +-3214, +-7879, +-365, +8792, +-2058, +-6971, +10764, +11376, +2080, +7475, +5194, +2926, +4953, +-5039, +-7315, +-715, +-5646, +-12680, +-6937, +-1755, +-6613, +-5901, +-2174, +-1343, +2238, +575, +-682, +5661, +9086, +4503, +2478, +7910, +6936, +1933, +1266, +-19, +-835, +-2541, +-5805, +-4897, +-2034, +-3317, +-5455, +-1761, +1654, +-167, +-301, +2165, +3287, +3091, +2318, +1799, +3063, +3081, +-334, +-481, +970, +-1720, +-3691, +-3239, +-2820, +-2991, +-3206, +-2470, +-811, +529, +173, +716, +2623, +1564, +-3845, +-6581, +2529, +8041, +-5370, +-4499, +13582, +7503, +-109, +8820, +5684, +4438, +3673, +-6724, +-2925, +1272, +-9126, +-12206, +-2956, +-2350, +-9067, +-5194, +-1653, +-1288, +390, +-2551, +530, +6921, +4657, +798, +5477, +10107, +4739, +2049, +4361, +2961, +561, +-2843, +-4325, +-1612, +-2273, +-6381, +-5260, +-109, +-1162, +-3773, +-522, +1928, +1069, +328, +1702, +3025, +2946, +2046, +955, +2895, +2338, +-1672, +-1136, +-243, +-2378, +-3644, +-2902, +-1987, +-2112, +-1495, +-920, +270, +1683, +595, +-992, +-4240, +-4096, +5163, +3365, +-8693, +2644, +13871, +721, +2637, +10991, +4279, +5176, +1215, +-4254, +1188, +-1917, +-10538, +-7706, +-284, +-6409, +-9875, +-1970, +-2217, +-3228, +-2424, +-2575, +1869, +3423, +1156, +1937, +7458, +7611, +2627, +5239, +6736, +2968, +897, +-186, +-48, +-1270, +-3511, +-4529, +-2943, +-1507, +-4284, +-3616, +-532, +-870, +-1332, +-877, +1520, +2161, +605, +2045, +3158, +2852, +1636, +554, +1527, +479, +-1720, +-2091, +-1287, +-1420, +-2853, +-1994, +-642, +-702, +-651, +-305, +809, +-1228, +-6310, +-3284, +6444, +57, +-9694, +6692, +12322, +-2264, +4655, +10553, +3995, +5217, +-66, +-1294, +2509, +-3061, +-9247, +-4914, +871, +-7968, +-9271, +-1035, +-3443, +-5114, +-3791, +-1539, +1162, +829, +660, +2385, +7135, +5285, +1660, +6675, +7080, +2594, +1368, +2909, +2358, +-1581, +-2121, +-1548, +-1810, +-3079, +-4944, +-2309, +-1422, +-3854, +-2656, +-14, +115, +-634, +735, +2188, +2383, +1821, +1231, +2298, +1998, +6, +-378, +210, +-244, +-1924, +-1735, +-317, +-1118, +-1969, +-886, +5, +-368, +-410, +-812, +-3948, +-5540, +1489, +4735, +-7002, +-3001, +13628, +3594, +-3100, +10227, +7590, +2375, +2916, +1211, +1479, +-631, +-3134, +-6350, +-1802, +-978, +-10207, +-6177, +-1046, +-4499, +-6925, +-3423, +1443, +-1421, +-584, +2444, +2882, +5009, +3294, +3499, +5559, +5411, +3077, +1096, +4451, +2750, +-1703, +-631, +383, +-1183, +-4035, +-2959, +-1350, +-3069, +-3804, +-2694, +-236, +-904, +-1864, +513, +1545, +1463, +455, +1019, +2475, +970, +230, +551, +798, +211, +-916, +-468, +-216, +-352, +-1036, +-1298, +-138, +-232, +-750, +-580, +40, +-1001, +-5521, +-4688, +5193, +3492, +-9220, +1094, +13917, +1137, +-3168, +7172, +9020, +2400, +-2739, +3367, +3104, +-2930, +-2350, +-4632, +-2215, +-2432, +-6993, +-6593, +-3793, +228, +-5689, +-6176, +2457, +1840, +-1003, +-1275, +4305, +5439, +333, +2841, +4258, +4558, +3512, +1238, +3254, +2559, +1884, +-421, +-1639, +1150, +-1170, +-3158, +-3000, +-1500, +-1025, +-3848, +-2200, +-277, +-804, +-1328, +-773, +1228, +162, +-96, +884, +812, +1234, +386, +645, +708, +381, +633, +-624, +-126, +146, +-872, +-957, +-586, +223, +-698, +-781, +544, +261, +200, +-328, +-2742, +-4169, +1605, +6106, +-3718, +-5298, +7649, +6832, +-1261, +-1390, +4067, +6767, +-470, +-1764, +1864, +-38, +257, +-2297, +-3900, +-2558, +-1958, +-1561, +-6583, +-4334, +516, +-2266, +-3226, +-2200, +2206, +1794, +-1454, +1915, +2658, +3157, +2576, +1949, +3410, +1896, +3450, +2310, +117, +1588, +1002, +917, +-1493, +-1639, +129, +-2106, +-2237, +-2421, +-1808, +-1254, +-2307, +-727, +-923, +-651, +449, +46, +471, +268, +1098, +710, +-117, +1031, +362, +-192, +-90, +398, +471, +-775, +-349, +271, +125, +-277, +-403, +-31, +162, +682, +-104, +-477, +441, +534, +682, +136, +-219, +114, +-447, +-2159, +-2436, +1852, +1779, +-2721, +-567, +1960, +1799, +1184, +-179, +1457, +1266, +629, +1852, +-82, +-866, +-345, +61, +-696, +-3194, +-1676, +-726, +-1898, +-1857, +-1936, +-516, +-494, +-253, +808, +-301, +554, +1218, +1193, +1286, +398, +1408, +1364, +843, +1215, +506, +400, +94, +496, +632, +-447, +-192, +-387, +-386, +-505, +-1087, +-390, +-591, +-458, +-196, +-703, +-257, +-225, +87, +90, +-470, +210, +258, +-121, +-270, +-150, +267, +-203, +-43, +302, +-101, +47, +244, +209, +63, +142, +353, +64, +-158, +-79, +312, +-121, +-985, +-253, +224, +-389, +-603, +-351, +-28, +56, +376, +220, +-222, +353, +635, +478, +441, +85, +-219, +-768, +-570, +876, +771, +-478, +-189, +482, +529, +329, +211, +618, +210, +-94, +575, +101, +-511, +-508, +-454, +-437, +-1064, +-996, +-845, +-1071, +-617, +-593, +-579, +-382, +-58, +471, +253, +135, +289, +926, +1221, +374, +432, +626, +645, +834, +325, +203, +84, +-69, +-36, +-344, +-247, +-287, +-308, +-257, +-498, +-158, +-109, +-198, +51, +-60, +-96, +-138, +-56, +98, +-11, +54, +-73, +-188, +-216, +-209, +-5, +-219, +-244, +-28, +-33, +68, +-84, +-84, +80, +73, +119, +-16, +66, +277, +234, +102, +-55, +-16, +47, +2, +-93, +-193, +-113, +-55, +50, +-53, +-307, +-24, +213, +98, +37, +-31, +-7, +158, +335, +243, +22, +-138, +-114, +100, +-46, +-12, +59, +-209, +-89, +-387, +-869, +-338, +349, +214, +-232, +57, +417, +335, +312, +414, +604, +151, +63, +478, +22, +-329, +-402, +-315, +-355, +-754, +-553, +-526, +-538, +-332, +-424, +-199, +-28, +5, +-42, +94, +415, +271, +316, +136, +90, +485, +233, +202, +189, +-7, +119, +61, +238, +200, +-237, +-254, +-49, +136, +64, +-79, +20, +129, +93, +9, +163, +95, +-203, +-49, +-24, +-295, +-223, +-110, +-223, +-396, +-499, +-400, +-240, +-33, +98, +-1, +54, +179, +134, +97, +78, +77, +83, +197, +296, +85, +70, +180, +-124, +-99, +192, +-128, +-218, +57, +-193, +-181, +74, +-113, +-140, +-164, +-338, +-179, +243, +366, +-42, +-277, +-104, +326, +618, +-14, +-451, +-82, +427, +529, +-158, +-205, +119, +80, +131, +-334, +-213, +29, +-440, +-203, +-304, +-836, +-890, +-169, +646, +-67, +-447, +172, +636, +871, +527, +643, +608, +262, +642, +401, +-199, +-569, +-523, +23, +-393, +-1005, +-848, +-468, +-303, +-376, +-237, +-406, +-287, +127, +-24, +32, +107, +294, +410, +155, +369, +735, +1157, +894, +228, +386, +77, +-355, +-358, +-547, +-555, +-441, +-222, +-250, +-179, +108, +136, +345, +287, +162, +-33, +-328, +-152, +-376, +-598, +-557, +-479, +-116, +-18, +-29, +-179, +-58, +306, +129, +206, +138, +67, +337, +284, +462, +255, +127, +401, +97, +33, +-124, +-90, +194, +-120, +-174, +-185, +-107, +-46, +-546, +-587, +-11, +101, +-488, +-414, +-205, +-223, +604, +237, +-778, +-128, +197, +-56, +346, +-42, +-471, +543, +625, +42, +398, +270, +352, +612, +226, +-97, +-545, +-986, +-945, +180, +328, +-916, +-487, +557, +1254, +725, +-351, +751, +1211, +679, +478, +-325, +-431, +-253, +-48, +-569, +-1721, +-1248, +-523, +-457, +-1384, +-1587, +255, +138, +-553, +-114, +-66, +592, +657, +497, +609, +570, +1263, +1060, +490, +405, +734, +1057, +-32, +-239, +210, +68, +-104, +-819, +-495, +-219, +-666, +-557, +-737, +-389, +-352, +-536, +-222, +-397, +50, +74, +-90, +59, +-155, +548, +417, +-70, +325, +411, +649, +248, +204, +645, +186, +219, +112, +-70, +-109, +-446, +-278, +-542, +-702, +-586, +-596, +-352, +-617, +-462, +-216, +-222, +25, +-247, +-18, +456, +500, +543, +379, +531, +935, +1053, +335, +25, +672, +318, +-28, +-816, +-2456, +-1516, +306, +-121, +-1684, +-1292, +1694, +2342, +236, +60, +2252, +3274, +1020, +-188, +1232, +1227, +-252, +-1636, +-1516, +-904, +-1924, +-2779, +-2848, +-2019, +-1439, +-2150, +-1854, +-683, +309, +118, +-339, +1142, +2092, +1617, +1234, +1834, +2791, +2007, +1289, +1677, +1789, +1272, +289, +217, +270, +-317, +-828, +-1357, +-1162, +-1102, +-1626, +-1775, +-1529, +-903, +-1022, +-1267, +-600, +-113, +-67, +-274, +162, +766, +571, +349, +359, +1031, +1385, +534, +396, +1299, +1418, +144, +-242, +669, +265, +-870, +-965, +-404, +-662, +-1479, +-1228, +-777, +-889, +-1008, +-862, +-344, +42, +110, +54, +404, +1167, +1098, +571, +942, +1528, +1010, +363, +766, +584, +-897, +-1931, +-1206, +-25, +-637, +-1718, +-533, +1422, +900, +-67, +1286, +2403, +1732, +659, +1009, +1558, +228, +-802, +-877, +-925, +-1503, +-2632, +-2514, +-2009, +-2026, +-2343, +-2281, +-906, +-525, +-892, +-334, +718, +1351, +805, +1249, +2375, +2283, +1903, +1872, +2457, +2290, +1439, +1279, +1129, +860, +43, +-607, +-550, +-942, +-1455, +-1851, +-1708, +-1513, +-1901, +-1768, +-1313, +-951, +-920, +-816, +-144, +112, +93, +227, +495, +816, +757, +554, +582, +1324, +1474, +458, +711, +1433, +798, +-86, +145, +626, +-513, +-1102, +-339, +-651, +-1347, +-1325, +-907, +-1033, +-1323, +-828, +-642, +-444, +-113, +-33, +411, +789, +969, +827, +980, +1337, +1112, +1075, +727, +374, +27, +-933, +-1200, +-696, +-79, +-913, +-1343, +905, +997, +-110, +963, +1732, +1617, +723, +866, +1238, +71, +-341, +-839, +-1040, +-1214, +-2238, +-2186, +-1978, +-1808, +-2140, +-2121, +-819, +-845, +-894, +-189, +489, +830, +605, +1397, +1894, +1789, +1928, +1903, +2286, +2038, +1530, +1394, +1204, +891, +-12, +-249, +-227, +-934, +-1386, +-1439, +-1292, +-1607, +-1796, +-1363, +-1213, +-1135, +-1015, +-678, +-307, +-260, +-90, +165, +466, +520, +431, +665, +667, +502, +727, +1115, +806, +367, +1021, +1166, +173, +83, +558, +-42, +-816, +-562, +-464, +-1091, +-1190, +-917, +-975, +-1025, +-924, +-692, +-450, +-291, +-193, +142, +595, +626, +686, +970, +1082, +990, +805, +867, +843, +319, +17, +-195, +-859, +-952, +-270, +-365, +-1005, +-184, +815, +199, +328, +1211, +1085, +894, +789, +633, +384, +-89, +-576, +-976, +-924, +-1469, +-2074, +-1662, +-1558, +-1801, +-1713, +-1090, +-713, +-758, +-223, +244, +524, +791, +986, +1443, +1626, +1612, +1636, +1802, +1817, +1365, +1225, +1156, +713, +267, +23, +-169, +-603, +-894, +-988, +-1146, +-1236, +-1325, +-1250, +-1073, +-1022, +-940, +-717, +-448, +-366, +-295, +-28, +160, +192, +305, +522, +591, +553, +554, +502, +492, +703, +751, +373, +354, +735, +388, +-164, +102, +87, +-564, +-675, +-444, +-706, +-992, +-816, +-678, +-750, +-689, +-505, +-259, +-150, +-116, +176, +438, +465, +560, +815, +880, +638, +615, +851, +466, +-58, +207, +19, +-777, +-959, +-577, +-66, +-379, +-678, +444, +939, +363, +565, +1241, +1237, +565, +407, +598, +155, +-564, +-972, +-849, +-1078, +-1833, +-1883, +-1422, +-1428, +-1737, +-1373, +-620, +-553, +-545, +46, +621, +725, +734, +1186, +1600, +1530, +1380, +1579, +1777, +1428, +1053, +1111, +992, +452, +61, +49, +-175, +-716, +-967, +-907, +-1025, +-1335, +-1370, +-1115, +-1063, +-1161, +-979, +-622, +-477, +-475, +-219, +156, +240, +243, +503, +785, +734, +650, +795, +826, +557, +315, +452, +605, +60, +-329, +190, +153, +-550, +-494, +-135, +-389, +-811, +-593, +-314, +-597, +-669, +-386, +-167, +-210, +-266, +78, +299, +187, +206, +471, +554, +353, +455, +582, +393, +261, +217, +119, +-53, +-186, +-361, +-647, +-732, +-604, +-236, +-86, +-325, +388, +1004, +599, +871, +1273, +1200, +945, +645, +653, +224, +-325, +-740, +-1025, +-1149, +-1776, +-1976, +-1733, +-1752, +-1781, +-1622, +-985, +-698, +-570, +27, +500, +829, +990, +1336, +1726, +1749, +1748, +1770, +1867, +1667, +1258, +1130, +910, +447, +-38, +-286, +-509, +-991, +-1326, +-1383, +-1461, +-1615, +-1615, +-1384, +-1196, +-1080, +-838, +-482, +-175, +-14, +216, +546, +721, +771, +874, +1017, +977, +800, +710, +674, +476, +139, +50, +37, +-290, +-491, +-485, +-547, +-501, +-539, +-647, +-450, +-303, +-443, +-355, +5, +6, +-121, +158, +337, +213, +237, +445, +488, +373, +371, +309, +216, +257, +166, +-93, +-67, +-25, +-487, +-577, +-237, +-757, +-1373, +-832, +-334, +-368, +-174, +226, +1135, +1470, +1102, +1724, +2099, +1709, +1214, +900, +893, +-62, +-961, +-1193, +-1544, +-2098, +-2837, +-2650, +-2327, +-2490, +-2272, +-1748, +-890, +-508, +-179, +742, +1418, +1785, +1945, +2451, +2852, +2549, +2342, +2263, +2071, +1439, +723, +422, +-70, +-780, +-1397, +-1652, +-1795, +-2228, +-2373, +-2126, +-1836, +-1672, +-1380, +-736, +-179, +146, +496, +999, +1399, +1449, +1470, +1602, +1565, +1249, +881, +663, +364, +-144, +-546, +-764, +-1006, +-1224, +-1274, +-1323, +-1236, +-962, +-746, +-407, +-120, +80, +463, +721, +747, +843, +993, +900, +669, +618, +533, +236, +-48, +-107, +-201, +-458, +-556, +-542, +-529, +-465, +-437, +-307, +-188, +-438, +-662, +-305, +-39, +-849, +-1609, +-263, +1428, +228, +-375, +2323, +3098, +1664, +1745, +2553, +2535, +1112, +77, +-77, +-756, +-1720, +-3222, +-3587, +-2878, +-3439, +-4100, +-3459, +-1755, +-1227, +-1445, +83, +1728, +2314, +2379, +2965, +3941, +3821, +3266, +2732, +2490, +2154, +755, +-389, +-760, +-1169, +-2230, +-3181, +-2864, +-2619, +-2872, +-2717, +-1946, +-927, +-441, +68, +922, +1777, +2357, +2318, +2405, +2664, +2408, +1643, +895, +553, +-104, +-1131, +-1816, +-2166, +-2399, +-2609, +-2615, +-2416, +-1697, +-736, +-598, +40, +1632, +2103, +1854, +2137, +2549, +2345, +1456, +902, +564, +-128, +-821, +-1510, +-1762, +-1629, +-1827, +-1897, +-1407, +-639, +-298, +-256, +342, +1237, +1516, +948, +881, +1300, +285, +-601, +-106, +-1005, +-2152, +-765, +366, +-225, +105, +1800, +2667, +2263, +2358, +2609, +1902, +1309, +383, +-1178, +-2028, +-2431, +-3415, +-4550, +-4205, +-3344, +-3426, +-2845, +-1330, +27, +949, +1939, +3073, +3622, +4112, +4210, +3486, +2987, +2535, +1477, +2, +-942, +-1447, +-2432, +-3129, +-3225, +-3139, +-2816, +-2288, +-1557, +-826, +190, +1229, +1697, +2171, +2713, +2848, +2494, +1998, +1574, +810, +-38, +-777, +-1573, +-2133, +-2414, +-2554, +-2640, +-2453, +-1750, +-916, +-403, +165, +1489, +2218, +1984, +2950, +3358, +1847, +1268, +1173, +3, +-1163, +-1755, +-2176, +-2690, +-2518, +-1972, +-1908, +-1192, +22, +618, +1019, +1695, +2107, +1666, +1636, +2010, +1092, +94, +-263, +-1376, +-1768, +-457, +-1731, +-5151, +-3981, +955, +2337, +-400, +750, +5303, +6160, +5173, +3503, +1711, +2310, +1724, +-1812, +-6147, +-6323, +-3861, +-5816, +-7464, +-5990, +-3493, +-1001, +97, +1540, +2770, +5367, +7786, +5898, +4386, +4606, +4302, +1937, +-1267, +-2217, +-3112, +-3790, +-4215, +-5298, +-4526, +-2551, +-773, +-546, +-32, +2599, +3965, +3955, +3518, +3064, +2937, +2131, +893, +-1169, +-2477, +-2268, +-2844, +-3763, +-3940, +-2899, +-1616, +-1023, +-181, +607, +1586, +2617, +3023, +3070, +2914, +2991, +2172, +623, +-310, +-1374, +-2183, +-2752, +-3338, +-3214, +-2667, +-1629, +-816, +-278, +799, +1765, +2420, +2415, +2095, +1811, +1020, +509, +175, +-542, +-1258, +-1676, +-1622, +-1721, +-1740, +-1068, +-852, +-2054, +-2617, +929, +5290, +4343, +2568, +4316, +5511, +5146, +3002, +-412, +-2276, +-2717, +-3204, +-6159, +-8896, +-7253, +-4846, +-3602, +-2969, +-1694, +1159, +3995, +6267, +6021, +4739, +5447, +5599, +3839, +720, +-1621, +-2390, +-3349, +-4039, +-4975, +-5170, +-3395, +-1315, +139, +701, +2083, +4056, +4738, +4561, +3559, +2429, +1602, +507, +-1149, +-3232, +-4042, +-3810, +-3787, +-3580, +-3000, +-1677, +-99, +1293, +2238, +2416, +2580, +2706, +3382, +4128, +2082, +-743, +-502, +-239, +-2169, +-3426, +-3827, +-3585, +-2181, +-999, +-751, +-658, +1255, +3304, +2794, +1816, +1619, +1680, +1241, +8, +-1322, +-2153, +-1180, +-321, +-1526, +-2302, +-1478, +-72, +363, +-230, +-426, +-82, +-103, +-77, +2541, +4581, +3326, +3631, +4197, +3161, +2512, +785, +-1567, +-3641, +-4417, +-4491, +-6115, +-6640, +-5357, +-3878, +-2181, +-630, +1004, +2187, +3811, +5725, +5413, +4276, +3600, +2869, +1625, +-298, +-1819, +-3206, +-3817, +-3270, +-3022, +-2734, +-1844, +-175, +1408, +2225, +2944, +3158, +3145, +3144, +2440, +1057, +-421, +-1236, +-1857, +-2701, +-3165, +-3225, +-2780, +-1898, +-937, +-298, +-206, +87, +1419, +3719, +4816, +3523, +2068, +1482, +881, +-351, +-2295, +-3896, +-4219, +-3195, +-2016, +-1842, +-1410, +9, +1300, +1732, +1636, +1591, +1442, +1292, +1060, +905, +951, +40, +-693, +-286, +-671, +-1437, +-1264, +-383, +371, +148, +623, +1538, +-1352, +-5744, +-4090, +1312, +2921, +1799, +1479, +2488, +5347, +7009, +4782, +210, +-1976, +-191, +-607, +-4050, +-6603, +-6961, +-5451, +-3585, +-2599, +-3395, +-3123, +320, +3569, +4271, +3628, +3813, +4892, +5331, +4548, +2148, +-569, +-1301, +-1040, +-1894, +-3494, +-4162, +-3511, +-2160, +-805, +-235, +-93, +737, +2313, +3162, +2711, +2027, +1466, +942, +786, +684, +-712, +-2331, +-1677, +-1330, +-2395, +-1867, +-539, +-52, +-62, +434, +820, +233, +735, +1092, +-206, +-628, +-8, +124, +-546, +-681, +-390, +-814, +-535, +90, +-5, +-80, +381, +1054, +919, +810, +759, +221, +373, +445, +-358, +-1278, +-1213, +15, +517, +240, +469, +618, +117, +-366, +-1994, +-3771, +-679, +3229, +1528, +-90, +1057, +1545, +2429, +2774, +1183, +-1064, +-1624, +94, +-409, +-2670, +-2848, +-2292, +-1846, +-1057, +-812, +-1316, +-1070, +454, +1003, +468, +747, +1275, +1268, +1598, +1792, +975, +808, +942, +410, +441, +-32, +-622, +-261, +-436, +-603, +-474, +-709, +-641, +-368, +-305, +-310, +-242, +-165, +-29, +114, +107, +193, +187, +158, +287, +194, +100, +51, +-28, +-31, +-70, +-19, +-33, +-143, +-165, +-225, +-240, +-244, +-273, +-283, +-269, +-118, +-7, +34, +68, +94, +196, +267, +258, +202, +136, +102, +29, +-72, +-179, +-281, +-298, +-274, +-227, +-161, +-15, +162, +227, +236, +268, +332, +335, +237, +132, +8, +-77, +-130, +-179, +-220, +-267, +-270, +-218, +-159, +-65, +46, +111, +144, +187, +226, +197, +129, +56, +-14, +-93, +-179, +-259, +-280, +-256, +-236, +-198, +-168, +-134, +-41, +51, +66, +42, +50, +76, +107, +156, +168, +144, +124, +110, +76, +-5, +-50, +-72, +-130, +-219, +-284, +-253, +-181, +-118, +-75, +-56, +-9, +77, +144, +175, +176, +206, +247, +240, +187, +85, +-15, +-79, +-158, +-240, +-274, +-283, +-257, +-178, +-96, +-36, +44, +131, +196, +206, +180, +175, +134, +61, +-26, +-116, +-179, +-195, +-188, +-215, +-250, +-209, +-137, +-97, +-62, +-22, +-5, +32, +84, +114, +93, +100, +142, +135, +84, +33, +3, +-8, +-9, +-22, +-60, +-79, +-50, +-5, +17, +2, +-1, +6, +23, +40, +43, +25, +26, +42, +29, +-15, +-55, +-104, +-134, +-147, +-203, +-244, +-220, +-175, +-118, +-58, +-5, +44, +95, +136, +135, +134, +132, +115, +60, +-4, +-46, +-72, +-110, +-124, +-135, +-159, +-145, +-93, +-46, +-21, +44, +107, +141, +151, +132, +111, +110, +100, +44, +-15, +-43, +-67, +-92, +-107, +-110, +-96, +-80, +-58, +-15, +13, +44, +67, +68, +42, +23, +19, +-15, +-49, +-86, +-101, +-121, +-131, +-141, +-159, +-165, +-152, +-120, +-92, +-52, +13, +67, +107, +139, +151, +141, +117, +76, +36, +10, +-16, +-35, +-73, +-75, +-56, +-46, +-49, +-58, +-46, +-15, +17, +40, +43, +53, +59, +49, +34, +12, +-9, +-19, +-43, +-79, +-116, +-130, +-134, +-123, +-100, +-96, +-77, +-48, +-12, +30, +44, +59, +60, +47, +40, +25, +20, +22, +15, +6, +-14, +-24, +-29, +-35, +-36, +-43, +-45, +-41, +-33, +-18, +-9, +3, +6, +-2, +-4, +3, +9, +17, +20, +17, +10, +3, +5, +3, +-12, +-24, +-31, +-36, +-45, +-52, +-48, +-55, +-59, +-60, +-55, +-53, +-53, +-63, +-65, +-60, +-50, +-43, +-48, +-35, +-24, +-25, +-35, +-41, +-39, +-33, +-16, +-2, +12, +27, +42, +57, +68, +66, +61, +51, +44, +25, +0, +-9, +-31, +-49, +-53, +-52, +-36, +-39, +-41, +-7, +27, +25, +15, +27, +32, +23, +20, +5, +-18, +-26, +-36, +-39, +-50, +-62, +-63, +-62, +-55, +-50, +-41, +-33, +-25, +-14, +-1, +5, +9, +15, +5, +-7, +-18, +-26, +-33, +-46, +-56, +-73, +-82, +-66, +-67, +-50, +-38, +-22, +-7, +17, +30, +37, +36, +29, +19, +13, +12, +-7, +-25, +-41, +-42, +-38, +-49, +-49, +-35, +-26, +-8, +6, +0, +0, +-2, +-5, +-1, +-4, +-2, +-12, +-12, +-15, +-16, +-19, +-24, +-35, +-39, +-48, +-46, +-35, +-25, +-4, +13, +25, +27, +3, +2, +30, +27, +-1, +-1, +-16, +-25, +-18, +-36, +-42, +-48, +-62, +-56, +-48, +-53, +-46, +-36, +-26, +-15, +-8, +12, +23, +29, +25, +13, +5, +5, +0, +-16, +-12, +-19, +-25, +-24, +-29, +-29, +-39, +-33, +-25, +-33, +-19, +-5, +-11, +-22, +-24, +-18, +-25, +-32, +-39, +-39, +-32, +-41, +-36, +-43, +-39, +-18, +-11, +-7, +-12, +-8, +-4, +-7, +0, +5, +-4, +2, +6, +-2, +-5, +-19, +-25, +-29, +-33, +-39, +-36, +-25, +-24, +-12, +-7, +5, +13, +16, +34, +29, +3, +-1, +-1, +-14, +-16, +-18, +-19, +-19, +-26, +-22, +-32, +-26, +-26, +-28, +-14, +-11, +-5, +-2, +-4, +0, +-9, +-15, +-16, +-28, +-28, +-32, +-48, +-56, +-52, +-55, +-56, +-56, +-48, +-41, +-31, +-22, +-8, +-2, +-1, +9, +10, +-1, +3, +-7, +-1, +0, +2, +-1, +-11, +-16, +-28, +-38, +-45, +-41, +-42, +-24, +-15, +5, +9, +-9, +-19, +-62, +-192, +-328, +125, +1057, +514, +-579, +277, +-138, +-1499, +-18, +595, +-276, +67, +-332, +-853, +761, +1310, +-301, +-237, +513, +762, +540, +-164, +57, +-1481, +-1500, +396, +-1350, +-365, +1445, +-933, +136, +1200, +-686, +876, +1901, +166, +-349, +-244, +-198, +-1073, +-1085, +187, +-481, +294, +893, +-877, +-4, +659, +-7, +-7, +-178, +73, +-62, +463, +223, +-523, +500, +209, +318, +199, +-818, +398, +-28, +-508, +320, +-635, +-127, +226, +-688, +83, +-65, +-426, +214, +-318, +-297, +425, +134, +29, +311, +-21, +115, +316, +-417, +-84, +127, +-294, +407, +219, +-470, +-110, +221, +-148, +-176, +231, +-189, +180, +194, +-562, +172, +71, +110, +90, +-645, +107, +-58, +267, +646, +-467, +349, +628, +-366, +-205, +-16, +-235, +-386, +-322, +-31, +22, +54, +316, +-226, +219, +689, +-186, +272, +-288, +-679, +37, +-351, +17, +-284, +-130, +95, +-312, +347, +-15, +563, +439, +-696, +54, +-113, +-233, +-212, +-246, +190, +-33, +91, +-76, +-106, +192, +88, +117, +196, +432, +56, +-100, +279, +0, +-65, +-243, +-412, +-49, +-193, +-361, +121, +104, +-280, +102, +-89, +-120, +488, +-7, +-145, +194, +261, +-270, +-314, +396, +-185, +-93, +271, +81, +134, +-317, +13, +-158, +-549, +445, +388, +-53, +-2, +-550, +-332, +88, +-237, +-131, +-45, +36, +386, +-128, +-243, +90, +145, +686, +-259, +-511, +217, +-213, +422, +-318, +-277, +809, +-339, +131, +-73, +-577, +354, +296, +527, +-158, +-488, +-89, +-196, +203, +-252, +-86, +146, +-242, +264, +-39, +56, +287, +-470, +-624, +-666, +71, +632, +221, +292, +189, +390, +39, +-600, +-80, +-182, +-79, +182, +44, +-33, +-700, +101, +319, +-417, +895, +459, +-155, +550, +-325, +-645, +-325, +-94, +-491, +-460, +284, +-193, +182, +669, +325, +-58, +122, +520, +-504, +-423, +169, +169, +360, +-165, +-195, +-404, +-161, +42, +-1156, +-581, +449, +434, +301, +-41, +405, +544, +298, +-87, +-716, +46, +322, +-460, +-590, +-164, +-28, +-530, +-140, +141, +138, +776, +514, +-121, +-461, +380, +1170, +257, +-32, +10, +-174, +-114, +-369, +-771, +-925, +148, +571, +-413, +-89, +539, +17, +-87, +6, +-716, +-392, +683, +124, +-436, +233, +473, +66, +-198, +-329, +-478, +-26, +588, +0, +-475, +362, +483, +-189, +-145, +-310, +-516, +-4, +63, +-461, +-269, +413, +360, +507, +805, +291, +447, +580, +-383, +-723, +-312, +-141, +-270, +-638, +-824, +-416, +-89, +-277, +-126, +476, +1006, +1010, +898, +1040, +320, +-185, +-148, +-794, +-989, +-1019, +-972, +-450, +-210, +17, +-31, +83, +90, +-138, +415, +219, +-162, +597, +1156, +1003, +108, +-376, +-202, +-291, +-216, +-644, +-1095, +-404, +282, +248, +-150, +145, +371, +-104, +305, +261, +-512, +-267, +-101, +-549, +-553, +59, +260, +350, +557, +-114, +-223, +495, +388, +278, +414, +177, +22, +23, +29, +-12, +-65, +90, +-250, +-756, +-60, +533, +142, +-76, +-157, +-181, +193, +-77, +-1185, +-1054, +54, +333, +-124, +-750, +-431, +700, +1449, +1017, +-877, +-1236, +415, +277, +-586, +-126, +373, +326, +85, +410, +132, +-361, +185, +-293, +-440, +915, +1344, +155, +-698, +262, +519, +-270, +-431, +-678, +-693, +-556, +-294, +78, +-182, +-325, +-478, +-675, +-55, +248, +-404, +-395, +415, +907, +614, +-206, +-14, +699, +387, +-135, +-276, +192, +759, +456, +-263, +-420, +340, +585, +-128, +-208, +-114, +111, +781, +93, +-675, +-99, +-7, +-560, +-835, +-647, +-638, +-199, +853, +291, +-198, +666, +439, +-127, +-266, +-457, +-229, +-134, +-103, +-678, +-1277, +-120, +782, +461, +-101, +124, +985, +421, +-76, +-128, +-329, +493, +806, +653, +363, +349, +687, +-593, +-945, +-67, +-495, +-1020, +-1158, +-869, +-436, +359, +757, +-753, +-1234, +42, +680, +217, +-504, +-137, +609, +934, +333, +-750, +-252, +867, +632, +-327, +-104, +951, +1184, +548, +-529, +-618, +565, +969, +-179, +-967, +-184, +680, +735, +-87, +-1227, +-985, +125, +-7, +-1102, +-794, +676, +669, +-28, +-332, +-1333, +-1237, +513, +1204, +335, +318, +1758, +420, +-2489, +-1776, +76, +-359, +-1987, +-1489, +925, +2204, +2995, +2332, +306, +1254, +3049, +1171, +-1367, +-1189, +-468, +-1397, +-2357, +-2116, +-1536, +-1060, +-750, +-790, +-788, +-75, +638, +683, +699, +383, +91, +642, +911, +258, +-376, +-362, +-271, +-167, +241, +296, +308, +650, +945, +999, +883, +953, +946, +418, +-453, +-808, +-461, +-706, +-1258, +-988, +-434, +-52, +66, +-123, +151, +679, +428, +-481, +-509, +771, +714, +-512, +-1035, +-1486, +-726, +-31, +-1281, +-1212, +1309, +2854, +-717, +-5541, +-2528, +4411, +4364, +-965, +-2135, +1605, +6128, +6542, +901, +-2670, +955, +3056, +-1970, +-6739, +-4304, +-1117, +-2714, +-3398, +-2501, +-995, +1508, +2242, +360, +-608, +1734, +2558, +452, +-246, +119, +-35, +-26, +448, +260, +60, +1385, +1602, +292, +541, +1344, +673, +-386, +-482, +-556, +-744, +-250, +-352, +-906, +-236, +1023, +238, +-1847, +-1223, +598, +466, +107, +156, +44, +587, +1174, +431, +-1296, +-1827, +-647, +-169, +-780, +-1298, +-1319, +-43, +2335, +3246, +1074, +-2402, +-6047, +-7079, +-1059, +4745, +1480, +-734, +4822, +9405, +9224, +5118, +-67, +-1939, +-822, +-1629, +-6357, +-8638, +-5218, +-2163, +-2139, +-2847, +-1910, +727, +2801, +3025, +1442, +682, +1915, +2640, +1630, +-328, +-1203, +-831, +-587, +-253, +102, +145, +388, +1416, +1997, +1157, +750, +902, +285, +-634, +-968, +-935, +-1489, +-1441, +-559, +-307, +98, +255, +-79, +393, +757, +383, +-92, +224, +977, +612, +-250, +-768, +-1037, +-1196, +-1434, +-1257, +-528, +53, +-83, +128, +1382, +1759, +1323, +-341, +-8125, +-13054, +-157, +15976, +6087, +-6341, +5951, +14103, +11032, +4159, +-6743, +-10446, +-3027, +1775, +-9133, +-16626, +-6476, +3326, +1674, +-3781, +-1209, +4156, +6635, +7114, +2682, +-1791, +1685, +5147, +898, +-4427, +-3907, +-1369, +-1268, +-375, +-530, +-1009, +1666, +3818, +2716, +1439, +2971, +2807, +-334, +-836, +548, +-1022, +-3429, +-2739, +-1867, +-1887, +-494, +346, +44, +972, +2167, +1438, +-239, +-396, +-202, +-971, +-1043, +-826, +-696, +13, +401, +-335, +-805, +129, +226, +-515, +410, +1208, +717, +88, +-5350, +-13627, +-8527, +10641, +17424, +-276, +-2734, +12987, +14423, +8109, +-1717, +-11484, +-8209, +-128, +-4410, +-16396, +-14255, +-1867, +5154, +1136, +-2316, +3394, +8584, +10376, +6841, +-603, +-2497, +2138, +1684, +-4646, +-7354, +-4663, +-2188, +-675, +945, +795, +1892, +5103, +6024, +3291, +1198, +1634, +500, +-1851, +-2889, +-3691, +-3739, +-1530, +228, +-833, +-215, +2780, +3205, +1946, +1246, +642, +-103, +-849, +-1823, +-3171, +-2957, +-1587, +-1554, +-1490, +-322, +710, +1122, +1530, +1998, +1508, +689, +476, +669, +754, +-720, +-4025, +-6837, +-7325, +-6367, +-2698, +6174, +12964, +9699, +7442, +11835, +10703, +3935, +-2704, +-7836, +-10023, +-10369, +-10922, +-12144, +-10017, +-3153, +3001, +3870, +4798, +9021, +10308, +7988, +4810, +1285, +-1649 +}; diff --git a/libcodec2-android/src/codec2/unittest/hts1a_1300.h b/libcodec2-android/src/codec2/unittest/hts1a_1300.h new file mode 100644 index 0000000..a254ecc --- /dev/null +++ b/libcodec2-android/src/codec2/unittest/hts1a_1300.h @@ -0,0 +1,8002 @@ +short hts1a_1300[] = { +0, +1, +1, +2, +2, +3, +2, +2, +2, +3, +2, +4, +2, +2, +-1, +0, +-2, +0, +2, +2, +-3, +-2, +-5, +-2, +-4, +-1, +-5, +-5, +-10, +-11, +-15, +-9, +-8, +0, +-4, +-5, +-10, +-5, +0, +1, +-3, +7, +3, +2, +0, +6, +10, +12, +5, +8, +9, +7, +13, +13, +5, +19, +23, +14, +3, +0, +7, +10, +9, +0, +-11, +-18, +-15, +-16, +-15, +-27, +-37, +-46, +-40, +-37, +-49, +-80, +-73, +-65, +-43, +-10, +39, +72, +88, +82, +82, +66, +57, +34, +38, +32, +28, +17, +28, +7, +1, +-12, +-1, +-13, +-2, +-9, +-11, +-24, +-16, +-26, +-16, +-24, +-11, +-17, +-11, +-21, +-14, +-26, +-11, +-9, +6, +-11, +-3, +-9, +2, +-5, +10, +11, +23, +2, +8, +5, +24, +14, +29, +9, +21, +14, +21, +11, +12, +9, +22, +4, +16, +0, +5, +-2, +-1, +-12, +2, +-6, +-13, +-29, +-22, +-37, +-25, +-32, +-29, +-42, +-45, +-60, +-51, +-59, +-45, +-19, +23, +57, +80, +69, +65, +49, +40, +34, +38, +20, +10, +5, +5, +-6, +-5, +-10, +-3, +-7, +-15, +-20, +-21, +-16, +-9, +-17, +-18, +-21, +-20, +-9, +-5, +-5, +-7, +-19, +-15, +-4, +2, +6, +-3, +-3, +1, +8, +7, +16, +12, +7, +3, +5, +15, +22, +15, +17, +12, +16, +6, +13, +-3, +8, +12, +9, +1, +7, +-1, +6, +-5, +-1, +-7, +-9, +-20, +-17, +-20, +-3, +-8, +-1, +-27, +-35, +-46, +-36, +-34, +-21, +-23, +2, +20, +43, +41, +52, +41, +37, +36, +41, +24, +16, +7, +1, +-18, +-14, +-22, +-6, +-4, +-5, +-8, +-7, +-15, +-14, +-20, +-10, +-21, +-13, +-3, +-2, +-7, +0, +1, +-4, +-10, +-3, +-1, +-1, +-4, +-2, +4, +13, +15, +11, +3, +-4, +3, +4, +2, +7, +13, +9, +9, +9, +6, +0, +1, +-1, +-1, +3, +5, +1, +0, +-5, +-2, +-12, +4, +-7, +-3, +-11, +-8, +-6, +-10, +-14, +-8, +-16, +-12, +-19, +-19, +-20, +-3, +0, +10, +23, +25, +27, +45, +30, +28, +19, +24, +13, +0, +-15, +-20, +-17, +-4, +-9, +-6, +-5, +-10, +-9, +0, +-1, +-7, +-14, +-14, +-6, +-6, +4, +0, +-5, +1, +4, +6, +4, +-1, +3, +-8, +-4, +1, +11, +9, +12, +6, +1, +1, +10, +6, +-2, +-3, +9, +7, +4, +4, +0, +-8, +0, +-3, +-1, +-2, +-1, +-6, +-19, +-10, +-18, +-13, +-15, +-14, +-11, +-6, +-4, +0, +7, +18, +16, +38, +34, +32, +23, +17, +7, +-6, +-24, +-17, +-16, +-9, +-6, +-5, +-12, +-3, +-12, +-5, +-6, +-5, +-15, +-6, +-3, +2, +1, +13, +0, +4, +0, +0, +-1, +7, +6, +11, +4, +2, +4, +9, +5, +7, +-4, +-1, +0, +7, +-1, +-7, +1, +1, +1, +0, +-5, +-10, +-9, +-9, +-6, +-13, +-13, +-9, +-7, +-10, +-5, +-3, +10, +12, +27, +21, +26, +17, +13, +9, +2, +-4, +5, +-10, +-4, +-18, +-11, +-15, +-5, +-6, +2, +-9, +-5, +-17, +-15, +-4, +13, +0, +0, +4, +15, +7, +2, +-4, +0, +-7, +10, +5, +13, +11, +8, +4, +8, +0, +-1, +0, +3, +-2, +1, +-3, +0, +0, +-12, +-14, +-18, +-15, +-14, +-15, +-16, +-7, +3, +9, +7, +12, +17, +24, +25, +27, +16, +10, +-8, +-2, +-8, +-8, +-14, +-10, +-13, +-2, +-7, +2, +-12, +-4, +-9, +3, +-2, +4, +-2, +13, +1, +7, +-9, +1, +0, +13, +6, +11, +0, +9, +-2, +6, +-9, +3, +-9, +10, +-5, +-7, +-4, +5, +-22, +-8, +-28, +-14, +-23, +-11, +-16, +7, +13, +31, +24, +35, +27, +33, +16, +20, +5, +3, +-20, +-6, +-13, +-2, +-17, +-10, +-18, +-2, +-7, +1, +-10, +-5, +-12, +-2, +-6, +4, +-5, +6, +-3, +-2, +-9, +-1, +-5, +1, +0, +3, +-8, +0, +-5, +0, +-6, +-13, +-11, +3, +-4, +-10, +-18, +-4, +0, +6, +4, +17, +26, +35, +38, +35, +34, +24, +15, +6, +-2, +0, +0, +5, +0, +-6, +-10, +-13, +-12, +-6, +-10, +-6, +-2, +-3, +-13, +-13, +-8, +-9, +-9, +-4, +-10, +-10, +-8, +-7, +-15, +-8, +-8, +-14, +-11, +-8, +-9, +-4, +-20, +-13, +-3, +-4, +-11, +-19, +-16, +1, +4, +15, +21, +39, +45, +56, +49, +48, +30, +26, +8, +4, +-4, +-5, +-3, +1, +-5, +-7, +-17, +-8, +-4, +-2, +-11, +-1, +-5, +-4, +-9, +-10, +-7, +-9, +-13, +-7, +-2, +-8, +-10, +-14, +-19, +-12, +-4, +-6, +-10, +-11, +-11, +-14, +-9, +-11, +-4, +-8, +-5, +-11, +-17, +-16, +-6, +-3, +15, +15, +38, +45, +56, +53, +49, +32, +31, +11, +14, +-7, +-5, +-10, +1, +-10, +-8, +-22, +-5, +-10, +-7, +-21, +-2, +-12, +2, +-13, +-1, +-11, +-4, +-17, +4, +0, +1, +-7, +0, +-6, +11, +5, +4, +-7, +2, +-10, +1, +-8, +-3, +-7, +1, +-11, +-13, +-26, +-16, +-29, +-11, +-12, +2, +11, +27, +32, +37, +32, +43, +27, +25, +12, +9, +-4, +-11, +-25, +-20, +-18, +-11, +-13, +-8, +-8, +-8, +-16, +-14, +-5, +4, +6, +10, +5, +8, +7, +4, +16, +8, +2, +4, +9, +13, +15, +4, +0, +0, +-3, +-1, +-2, +-7, +-6, +-1, +-6, +-12, +-20, +-21, +-29, +-29, +-16, +-14, +-3, +9, +16, +26, +31, +43, +37, +31, +23, +15, +7, +-5, +-22, +-23, +-23, +-18, +-18, +-16, +-18, +-5, +-10, +-9, +-16, +-7, +-6, +7, +1, +12, +7, +18, +9, +11, +0, +5, +0, +15, +8, +23, +8, +7, +-6, +3, +-8, +10, +-4, +6, +-10, +2, +-18, +-1, +-12, +-13, +-32, +-24, +-28, +-15, +-29, +1, +-6, +15, +21, +45, +41, +47, +32, +31, +14, +12, +-11, +-9, +-19, +-15, +-23, +-16, +-28, +-10, +-15, +-5, +-19, +-12, +-11, +3, +-4, +4, +1, +7, +7, +1, +-1, +4, +6, +16, +10, +14, +13, +11, +8, +7, +5, +7, +5, +3, +4, +1, +-9, +-7, +-8, +-15, +-11, +-20, +-22, +-26, +-26, +-28, +-23, +-17, +-2, +5, +30, +39, +56, +47, +46, +29, +23, +3, +7, +-7, +-1, +-22, +-22, +-33, +-25, +-30, +-19, +-17, +-11, +-22, +-2, +-5, +0, +-6, +12, +2, +19, +2, +11, +8, +16, +13, +16, +4, +14, +5, +13, +0, +7, +-1, +5, +-3, +7, +-1, +-2, +-6, +-4, +-16, +-6, +-12, +-7, +-13, +-12, +-23, +-22, +-30, +-20, +-23, +-6, +-1, +15, +18, +29, +33, +42, +36, +44, +36, +34, +21, +7, +-7, +-11, +-19, +-28, +-32, +-23, +-25, +-16, +-25, +-23, +-26, +-25, +-12, +-4, +-1, +0, +3, +7, +4, +7, +7, +12, +14, +4, +15, +16, +15, +15, +14, +5, +8, +4, +6, +4, +6, +11, +4, +6, +5, +-4, +-10, +-9, +-4, +-5, +-8, +-12, +-17, +-24, +-30, +-28, +-30, +-32, +-28, +-22, +-16, +-5, +6, +15, +27, +44, +52, +61, +50, +46, +36, +31, +17, +1, +-5, +-9, +-15, +-18, +-28, +-26, +-34, +-34, +-32, +-25, +-24, +-19, +-17, +-12, +-9, +0, +-6, +7, +0, +13, +9, +15, +12, +16, +10, +14, +13, +22, +14, +17, +0, +9, +1, +7, +7, +16, +4, +9, +-7, +-2, +-7, +4, +-2, +3, +-3, +-4, +-22, +-9, +-18, +-11, +-19, +-4, +-16, +-22, +-33, +-31, +-40, +-29, +-32, +-14, +-8, +17, +26, +51, +45, +57, +53, +60, +53, +53, +36, +31, +16, +12, +-7, +-18, +-32, +-36, +-44, +-39, +-45, +-36, +-41, +-35, +-31, +-24, +-28, +-17, +-14, +-2, +-6, +0, +8, +18, +18, +19, +24, +18, +11, +19, +12, +15, +18, +20, +19, +18, +13, +9, +4, +8, +6, +5, +0, +1, +-5, +0, +3, +4, +6, +4, +6, +3, +-5, +-7, +-16, +-18, +-19, +-12, +-4, +-7, +-14, +-24, +-32, +-42, +-39, +-43, +-39, +-30, +-29, +-25, +-20, +-5, +3, +16, +33, +49, +68, +79, +81, +84, +77, +70, +58, +41, +26, +9, +-1, +-16, +-30, +-39, +-49, +-53, +-50, +-52, +-51, +-46, +-40, +-41, +-36, +-33, +-27, +-18, +-10, +3, +9, +9, +16, +13, +14, +10, +14, +14, +11, +7, +10, +21, +23, +19, +16, +12, +7, +2, +3, +7, +8, +7, +10, +10, +15, +14, +6, +2, +-5, +-1, +-4, +-3, +-3, +-3, +1, +-1, +-2, +-3, +-12, +-16, +-18, +-12, +-11, +-10, +-6, +-3, +-12, +-19, +-19, +-23, +-24, +-22, +-22, +-34, +-39, +-33, +-31, +-18, +-2, +21, +51, +69, +82, +92, +87, +86, +77, +61, +42, +19, +0, +-11, +-21, +-33, +-43, +-46, +-50, +-54, +-59, +-53, +-47, +-42, +-34, +-26, +-16, +-10, +-1, +0, +-2, +-1, +9, +10, +15, +22, +27, +16, +3, +7, +2, +11, +16, +15, +16, +11, +10, +4, +3, +8, +4, +10, +6, +6, +8, +3, +0, +-1, +2, +-1, +-2, +-4, +-4, +-3, +0, +-3, +-6, +-7, +-8, +-13, +-15, +-13, +-12, +-14, +-12, +-15, +-17, +-24, +-32, +-36, +-41, +-40, +-26, +-12, +7, +25, +41, +63, +79, +80, +82, +70, +63, +50, +24, +7, +-6, +-17, +-35, +-38, +-33, +-38, +-40, +-45, +-45, +-31, +-30, +-24, +-17, +-18, +-13, +-5, +3, +3, +6, +5, +8, +7, +10, +11, +9, +11, +9, +8, +6, +5, +10, +11, +10, +10, +10, +4, +6, +7, +6, +5, +7, +11, +9, +9, +11, +9, +4, +1, +-2, +-3, +3, +4, +0, +-6, +-13, +-15, +-22, +-26, +-25, +-25, +-19, +-18, +-22, +-27, +-28, +-35, +-36, +-35, +-19, +-1, +21, +39, +64, +69, +73, +70, +64, +47, +34, +15, +1, +-13, +-16, +-31, +-30, +-39, +-32, +-29, +-17, +-19, +-21, +-17, +-3, +-16, +-7, +-8, +3, +-2, +4, +-4, +0, +-12, +0, +6, +5, +0, +7, +4, +9, +0, +17, +6, +8, +7, +12, +8, +17, +2, +5, +1, +6, +5, +7, +5, +6, +-2, +-3, +-3, +0, +-11, +0, +1, +0, +-6, +-9, +-18, +-6, +-8, +-9, +-14, +-4, +-14, +-19, +-29, +-28, +-29, +-23, +-22, +-7, +3, +25, +39, +59, +66, +68, +59, +51, +30, +16, +-2, +-14, +-25, +-26, +-40, +-24, +-25, +-12, +-16, +-13, +-17, +-10, +-21, +-10, +-14, +-1, +-9, +3, +0, +1, +-8, +5, +-8, +-2, +-3, +14, +6, +17, +1, +11, +5, +4, +-10, +15, +3, +12, +7, +14, +8, +15, +2, +8, +-4, +9, +0, +5, +-5, +8, +-6, +0, +-6, +0, +-15, +-10, +-23, +-15, +-15, +-6, +-20, +-12, +-20, +-17, +-27, +-18, +-14, +7, +13, +32, +42, +56, +43, +45, +34, +26, +10, +-2, +-14, +-10, +-25, +-21, +-22, +-12, +-18, +-11, +-9, +-17, +-12, +-7, +-15, +-1, +0, +-1, +-1, +1, +-12, +-8, +2, +8, +12, +7, +9, +4, +4, +3, +7, +4, +12, +6, +10, +15, +15, +3, +-3, +-5, +3, +6, +6, +0, +1, +-4, +-3, +-9, +-13, +-10, +-9, +-9, +-4, +-9, +-12, +-20, +-23, +-26, +-27, +-26, +-12, +2, +19, +38, +45, +48, +54, +44, +26, +15, +6, +-5, +-10, +-17, +-21, +-18, +-18, +-21, +-16, +-12, +-14, +-9, +-9, +-16, +-7, +3, +2, +0, +1, +-3, +9, +12, +1, +-3, +0, +3, +16, +10, +8, +10, +13, +4, +2, +7, +15, +5, +5, +3, +1, +-6, +1, +-4, +-6, +-7, +-3, +-20, +-7, +-17, +-12, +-18, +-14, +-21, +-25, +-34, +-20, +-22, +-2, +18, +44, +52, +70, +50, +47, +22, +4, +-6, +-12, +-21, +-17, +-20, +-10, +-18, +-16, +-15, +-10, +-11, +-9, +-5, +0, +-8, +-2, +0, +-4, +-3, +-1, +4, +7, +13, +12, +8, +0, +7, +5, +10, +5, +9, +9, +6, +-9, +-1, +0, +7, +-1, +7, +-5, +0, +-18, +-14, +-14, +2, +-2, +-9, +-34, +-27, +-34, +-18, +-22, +4, +9, +47, +47, +67, +53, +50, +20, +11, +-18, +-2, +-33, +-14, +-16, +-5, +-14, +2, +-21, +0, +-11, +0, +-21, +0, +-11, +-1, +-10, +5, +-17, +5, +-8, +13, +-3, +9, +-1, +17, +-1, +18, +2, +16, +2, +21, +1, +18, +-5, +10, +-7, +9, +-12, +8, +-17, +-5, +-29, +-14, +-31, +-3, +-27, +-16, +-35, +-11, +-9, +32, +16, +54, +43, +46, +14, +20, +-19, +3, +-11, +5, +-25, +-2, +-17, +-4, +-25, +7, +-17, +2, +-19, +1, +-6, +11, +-17, +0, +-9, +28, +1, +16, +-9, +9, +2, +23, +7, +20, +0, +13, +-3, +14, +-7, +9, +-4, +3, +-14, +0, +-21, +3, +-11, +-12, +-23, +-17, +-42, +-20, +-45, +-46, +-39, +-24, +-22, +11, +-2, +39, +89, +134, +120, +101, +57, +24, +3, +1, +-50, +-71, +-68, +-47, +-53, +-38, +-30, +-33, +-19, +-9, +-27, +-3, +-3, +-14, +-9, +11, +12, +13, +0, +19, +29, +13, +16, +25, +19, +18, +18, +24, +15, +23, +26, +13, +16, +18, +11, +3, +-4, +-2, +-3, +-28, +-30, +-22, +-42, +-41, +-34, +-50, +-35, +-34, +-69, +-66, +-76, +-101, +-94, +-109, +-80, +16, +103, +192, +318, +337, +259, +220, +156, +64, +6, +-55, +-127, +-185, +-195, +-185, +-182, +-146, +-143, +-137, +-71, +-18, +3, +22, +42, +46, +58, +66, +57, +53, +44, +30, +21, +11, +8, +-1, +6, +7, +15, +24, +30, +33, +39, +42, +40, +47, +63, +59, +47, +31, +14, +-5, +-19, +-28, +-45, +-46, +-55, +-55, +-65, +-72, +-87, +-100, +-97, +-100, +-99, +-127, +-147, +-166, +-184, +-204, +-177, +-157, +-17, +398, +737, +863, +867, +696, +510, +337, +155, +-43, +-288, +-535, +-694, +-732, +-710, +-658, +-558, +-493, +-392, +-178, +40, +186, +298, +359, +366, +397, +439, +372, +242, +150, +30, +-79, +-127, +-173, +-207, +-219, +-151, +-86, +-12, +69, +136, +170, +198, +223, +227, +212, +183, +145, +68, +8, +-23, +-56, +-76, +-84, +-104, +-137, +-199, +-222, +-219, +-193, +-154, +-109, +-85, +-48, +-34, +-45, +-79, +-106, +-163, +-189, +-284, +-388, +-491, +-520, +-528, +-492, +-334, +-181, +337, +1588, +2517, +2790, +2658, +2100, +1398, +804, +193, +-514, +-1413, +-2214, +-2762, +-2872, +-2689, +-2341, +-1805, +-1254, +-671, +197, +1134, +1850, +2271, +2443, +2238, +1863, +1564, +1131, +361, +-457, +-1179, +-1843, +-2236, +-2234, +-2109, +-1937, +-1485, +-755, +-24, +787, +1557, +2039, +2226, +2373, +2324, +1994, +1476, +844, +37, +-724, +-1258, +-1640, +-1935, +-1977, +-1798, +-1435, +-968, +-344, +216, +675, +1089, +1400, +1518, +1429, +1249, +876, +412, +-33, +-430, +-785, +-1070, +-1170, +-1277, +-1314, +-1269, +-1110, +-978, +-804, +-609, +-641, +-697, +-651, +-552, +-494, +-325, +135, +500, +2215, +5495, +6796, +6052, +5042, +3147, +1215, +116, +-1002, +-3144, +-5589, +-6520, +-6317, +-5735, +-4288, +-2890, +-2091, +-759, +1408, +3363, +4471, +4948, +4826, +3928, +3044, +2389, +1098, +-649, +-2099, +-3161, +-3899, +-4013, +-3612, +-3199, +-2637, +-1418, +9, +1187, +2276, +3095, +3361, +3341, +3278, +2863, +1960, +1001, +31, +-1000, +-1789, +-2155, +-2455, +-2552, +-2271, +-1698, +-1070, +-305, +507, +1062, +1471, +1806, +1930, +1752, +1427, +964, +339, +-303, +-834, +-1274, +-1591, +-1681, +-1594, +-1359, +-1020, +-649, +-326, +-41, +192, +413, +493, +346, +-75, +-535, +-949, +-1245, +-1428, +-1321, +-980, +-317, +2528, +6139, +7000, +6364, +5218, +3303, +1706, +628, +-795, +-3546, +-5920, +-6498, +-6545, +-6103, +-4835, +-3917, +-3066, +-1293, +1199, +3039, +3927, +4666, +4768, +4350, +4274, +3789, +2220, +377, +-1035, +-2202, +-3198, +-3586, +-3753, +-3980, +-3515, +-2339, +-1137, +-45, +1100, +2067, +2672, +3234, +3600, +3294, +2586, +1853, +987, +2, +-850, +-1499, +-2112, +-2413, +-2256, +-1928, +-1532, +-945, +-262, +366, +972, +1480, +1667, +1590, +1400, +1114, +714, +239, +-184, +-534, +-877, +-1107, +-1193, +-1275, +-1284, +-1066, +-770, +-586, +-439, +-277, +-199, +-166, +-58, +-137, +-537, +-864, +-1068, +-1254, +-1350, +-1073, +-581, +291, +3441, +7266, +8090, +7061, +5406, +3345, +1467, +10, +-1669, +-4631, +-6887, +-6956, +-6475, +-5812, +-4678, +-3607, +-2441, +-531, +2202, +3894, +4422, +4836, +4817, +4194, +3508, +2578, +947, +-906, +-1956, +-2704, +-3506, +-3806, +-3708, +-3506, +-2837, +-1548, +-261, +710, +1659, +2504, +2934, +3179, +3249, +2844, +2061, +1358, +616, +-247, +-975, +-1414, +-1790, +-1969, +-1781, +-1391, +-1000, +-548, +140, +701, +1053, +1344, +1397, +1199, +923, +652, +241, +-257, +-572, +-828, +-1058, +-1161, +-1162, +-1141, +-996, +-631, +-296, +-10, +279, +423, +307, +137, +-64, +-363, +-676, +-897, +-1239, +-1631, +-1853, +-1864, +-1797, +-1355, +-681, +342, +2668, +6898, +9692, +9193, +7285, +4881, +2444, +230, +-1644, +-4223, +-7340, +-8228, +-7415, +-6573, +-5662, +-4441, +-2955, +-1304, +1388, +3742, +4299, +4524, +4932, +4858, +4111, +3152, +1788, +-254, +-1512, +-2051, +-2934, +-3781, +-3890, +-3579, +-3057, +-1982, +-708, +-11, +683, +1632, +2286, +2472, +2621, +2660, +2229, +1872, +1752, +1188, +366, +-264, +-774, +-1311, +-1553, +-1552, +-1748, +-1830, +-1453, +-964, +-523, +-8, +474, +765, +1050, +1356, +1343, +1042, +833, +623, +350, +90, +-155, +-527, +-898, +-1037, +-1049, +-1037, +-957, +-808, +-603, +-439, +-291, +-303, +-458, +-601, +-511, +-491, +-695, +-960, +-1106, +-1124, +-1013, +-616, +-129, +1213, +5183, +8228, +7688, +5918, +3998, +2165, +464, +-1063, +-2909, +-5096, +-5447, +-4841, +-4942, +-5007, +-4437, +-3402, +-1980, +-204, +1295, +1952, +2731, +3668, +3893, +3588, +3107, +2463, +1659, +952, +248, +-785, +-1655, +-2032, +-2130, +-2199, +-2108, +-1876, +-1482, +-1012, +-360, +102, +458, +793, +1145, +1295, +1284, +1138, +1002, +843, +739, +622, +451, +377, +481, +375, +155, +-17, +-117, +-238, +-274, +-402, +-593, +-772, +-748, +-776, +-836, +-809, +-643, +-500, +-319, +-144, +7, +123, +323, +472, +579, +574, +458, +214, +-122, +-464, +-744, +-859, +-976, +-1160, +-1370, +-1517, +-1518, +-1444, +-982, +-524, +1029, +4637, +6859, +5961, +4565, +3378, +2129, +1090, +-15, +-1187, +-2183, +-2343, +-2444, +-3464, +-4397, +-4442, +-4000, +-3218, +-2264, +-1375, +-581, +369, +1273, +1793, +2064, +2506, +2839, +2890, +2653, +2186, +1589, +1011, +404, +-166, +-700, +-1027, +-1311, +-1499, +-1686, +-1744, +-1678, +-1455, +-1118, +-694, +-282, +102, +418, +670, +812, +971, +1153, +1304, +1331, +1250, +1065, +836, +544, +266, +-3, +-156, +-180, +-268, +-519, +-707, +-805, +-809, +-840, +-840, +-795, +-698, +-521, +-314, +-146, +-32, +10, +49, +-12, +-107, +-245, +-376, +-365, +-344, +-348, +-490, +-668, +-736, +-795, +-556, +-286, +348, +2825, +5387, +5002, +3315, +2393, +1505, +702, +211, +-402, +-751, +-684, +-948, +-2080, +-3432, +-3953, +-3680, +-3103, +-2450, +-1818, +-1127, +-419, +-9, +145, +370, +965, +1734, +2356, +2572, +2423, +2145, +1741, +1238, +753, +441, +293, +89, +-239, +-724, +-1212, +-1515, +-1602, +-1528, +-1360, +-1120, +-814, +-541, +-344, +-138, +109, +394, +709, +981, +1141, +1192, +1141, +1008, +851, +720, +599, +454, +287, +95, +-114, +-311, +-473, +-583, +-621, +-636, +-712, +-775, +-779, +-784, +-771, +-761, +-763, +-783, +-811, +-779, +-618, +-374, +-158, +-116, +-126, +-142, +-180, +-17, +183, +843, +2996, +4968, +4288, +2646, +1929, +1208, +464, +249, +54, +97, +424, +-99, +-1685, +-3049, +-3497, +-3422, +-3049, +-2480, +-1883, +-1313, +-971, +-995, +-1134, +-862, +-44, +911, +1655, +2068, +2191, +2109, +1843, +1522, +1281, +1239, +1303, +1226, +867, +312, +-232, +-667, +-949, +-1075, +-1019, +-885, +-784, +-781, +-840, +-844, +-719, +-468, +-182, +102, +358, +515, +586, +572, +552, +521, +510, +525, +508, +444, +316, +152, +-43, +-233, +-378, +-474, +-520, +-567, +-643, +-757, +-884, +-985, +-1056, +-1022, +-850, +-637, +-464, +-411, +-391, +-371, +-257, +90, +368, +1460, +3843, +4975, +3682, +2294, +1470, +670, +290, +146, +-168, +-205, +-298, +-1151, +-2520, +-3381, +-3395, +-2867, +-2241, +-1657, +-1224, +-844, +-576, +-415, +-281, +229, +991, +1680, +2012, +2055, +1855, +1640, +1354, +1090, +820, +679, +499, +236, +-195, +-618, +-944, +-1077, +-1123, +-1024, +-908, +-695, +-525, +-369, +-278, +-117, +80, +334, +530, +688, +723, +751, +652, +579, +443, +379, +294, +223, +63, +-111, +-338, +-485, +-601, +-615, +-630, +-594, +-629, +-644, +-725, +-794, +-872, +-788, +-650, +-486, +-471, +-540, +-571, +-526, +-364, +-37, +309, +1862, +4190, +4600, +3152, +2067, +1274, +715, +616, +523, +145, +-155, +-547, +-1396, +-2551, +-3151, +-3128, +-2715, +-2181, +-1744, +-1572, +-1324, +-954, +-541, +-102, +497, +1104, +1662, +1956, +2016, +1834, +1620, +1420, +1287, +1066, +814, +492, +208, +-116, +-426, +-722, +-859, +-916, +-843, +-804, +-724, +-686, +-553, +-410, +-212, +-34, +169, +325, +453, +488, +492, +437, +464, +415, +396, +282, +183, +3, +-131, +-280, +-386, +-526, +-568, +-646, +-701, +-839, +-898, +-980, +-910, +-809, +-687, +-610, +-516, +-430, +-315, +-150, +167, +562, +2306, +4506, +4563, +3127, +2021, +1106, +548, +416, +226, +-298, +-721, +-1105, +-1838, +-2796, +-3160, +-2969, +-2491, +-1878, +-1259, +-868, +-516, +-136, +260, +592, +1021, +1463, +1763, +1817, +1633, +1225, +923, +715, +559, +317, +100, +-186, +-453, +-747, +-894, +-966, +-885, +-728, +-518, +-383, +-221, +-79, +98, +282, +440, +522, +588, +604, +577, +468, +399, +310, +258, +162, +39, +-141, +-279, +-357, +-398, +-430, +-458, +-513, +-578, +-673, +-753, +-848, +-811, +-683, +-575, +-540, +-541, +-543, +-532, +-355, +-14, +501, +2415, +4789, +4874, +3247, +1809, +813, +340, +298, +5, +-896, +-1698, +-2031, +-2557, +-3148, +-3246, +-2873, +-2215, +-1395, +-706, +-313, +16, +617, +1239, +1719, +2007, +2086, +1953, +1662, +1308, +898, +448, +0, +-343, +-637, +-864, +-1045, +-1159, +-1080, +-895, +-587, +-272, +58, +315, +587, +663, +658, +714, +798, +799, +685, +474, +191, +-66, +-284, +-456, +-592, +-671, +-709, +-692, +-605, +-521, +-430, +-361, +-321, +-307, +-343, +-402, +-452, +-385, +-431, +-538, +-653, +-767, +-798, +-722, +-333, +74, +2319, +6417, +7237, +4578, +1893, +80, +-534, +-305, +-518, +-2023, +-3525, +-3760, +-3773, +-3936, +-3578, +-2753, +-1490, +63, +1233, +1601, +1711, +2132, +2565, +2695, +2518, +1948, +1219, +528, +-152, +-810, +-1410, +-1721, +-1920, +-1947, +-1724, +-1397, +-867, +-186, +379, +817, +1180, +1475, +1649, +1664, +1540, +1277, +916, +479, +9, +-409, +-756, +-979, +-1131, +-1198, +-1176, +-971, +-620, +-254, +26, +163, +125, +128, +93, +-31, +-292, +-478, +-635, +-953, +-1380, +-1583, +-1644, +-1419, +-1152, +-399, +251, +4499, +10959, +10640, +5605, +940, +-1797, +-1900, +-912, +-1437, +-4530, +-6791, +-6083, +-4884, +-3823, +-2752, +-1802, +-493, +1411, +3196, +3629, +3332, +3298, +3084, +2571, +1731, +518, +-743, +-1456, +-1563, +-1716, +-1912, +-1821, +-1440, +-688, +139, +720, +993, +1170, +1393, +1542, +1498, +1215, +727, +218, +-303, +-680, +-897, +-986, +-982, +-935, +-801, +-570, +-336, +-50, +215, +398, +461, +412, +177, +-178, +-514, +-799, +-1120, +-1238, +-1446, +-1914, +-2206, +-2069, +-1724, +-1218, +-675, +403, +1587, +10391, +17960, +12996, +4106, +-3204, +-5756, +-3983, +-2049, +-4025, +-10017, +-11376, +-7444, +-3275, +-60, +751, +750, +1933, +5097, +7442, +6069, +3469, +1246, +87, +103, +-526, +-2235, +-4086, +-4202, +-2776, +-1238, +-34, +354, +956, +2050, +2908, +3065, +2242, +1311, +557, +-49, +-425, +-1171, +-1757, +-1790, +-1290, +-594, +-357, +-284, +-212, +122, +809, +1042, +818, +168, +-69, +474, +421, +-452, +-1605, +-2380, +-2274, +-1574, +-1230, +-2216, +-2752, +-2511, +-1407, +-640, +312, +676, +4389, +19943, +23784, +11922, +-2128, +-11491, +-10505, +-5286, +-2405, +-8670, +-16588, +-12890, +-4652, +2789, +5901, +4161, +3109, +5802, +10495, +9957, +4443, +-427, +-3507, +-3885, +-3529, +-4689, +-6813, +-7109, +-4011, +-349, +1936, +2980, +3045, +3496, +4643, +5230, +4065, +1849, +-118, +-1173, +-1445, +-2042, +-2893, +-3375, +-2894, +-1254, +274, +1038, +1307, +2290, +2781, +2132, +1267, +106, +-630, +-884, +-1637, +-2480, +-3193, +-3014, +-2220, +-1334, +-981, +-1771, +-2146, +-1551, +-431, +200, +527, +742, +3176, +17053, +21910, +10382, +-1289, +-7789, +-6810, +-3716, +-4452, +-11521, +-16921, +-10358, +-1918, +2356, +3087, +1882, +3618, +8258, +11358, +8237, +2385, +-273, +-1011, +-759, +-2180, +-5560, +-7378, +-5592, +-2185, +-744, +-524, +8, +1316, +3802, +5109, +4298, +2707, +1756, +1418, +649, +-450, +-1740, +-2189, +-1271, +-1100, +-1679, +-1844, +-1360, +-592, +-325, +-144, +133, +745, +1554, +1549, +852, +513, +308, +-135, +-795, +-1430, +-1921, +-2655, +-3667, +-3859, +-3421, +-2082, +-855, +743, +1367, +11088, +21800, +14144, +3001, +-2687, +-3697, +-1984, +-3637, +-10176, +-15992, +-11894, +-4093, +-1757, +-1223, +-662, +2685, +8279, +10945, +8109, +3635, +2661, +2783, +892, +-2400, +-6211, +-7154, +-4982, +-2746, +-2283, +-2438, +-971, +1750, +3884, +4493, +3457, +2951, +3329, +2881, +1281, +-590, +-1789, +-2085, +-2185, +-2296, +-2621, +-2183, +-1219, +-538, +-59, +510, +1243, +1925, +1929, +1515, +982, +511, +-433, +-1173, +-1845, +-2172, +-2228, +-2871, +-3663, +-3279, +-2056, +-670, +256, +1334, +2850, +15158, +19429, +7039, +-384, +-1970, +-1342, +-1607, +-6796, +-13500, +-14145, +-6652, +-2427, +-3188, +-2202, +996, +6164, +9815, +8518, +5061, +3964, +4637, +2691, +-1290, +-4764, +-6237, +-5122, +-3867, +-4382, +-4340, +-2171, +954, +2885, +3430, +3650, +4302, +5176, +4711, +2169, +3, +-958, +-1485, +-2344, +-3327, +-3815, +-3159, +-1939, +-888, +-331, +405, +1484, +2494, +2693, +2133, +1396, +838, +-47, +-874, +-1956, +-2849, +-2975, +-3277, +-3840, +-3478, +-2275, +-834, +246, +1425, +2537, +15180, +18376, +5188, +410, +802, +554, +-1236, +-7656, +-13700, +-12256, +-5313, +-3930, +-5878, +-3184, +1356, +6062, +8660, +6908, +5229, +6261, +6295, +2669, +-1615, +-3864, +-4683, +-4685, +-5191, +-6164, +-4786, +-1257, +803, +1647, +2717, +4277, +5751, +5444, +3534, +1693, +788, +240, +-1209, +-2868, +-3856, +-3683, +-2945, +-2398, +-2127, +-1237, +221, +1625, +2252, +2363, +2177, +2139, +1646, +747, +-682, +-1592, +-1973, +-2640, +-4154, +-4457, +-3691, +-2213, +-1609, +358, +9, +8796, +19973, +8801, +323, +3725, +4003, +1287, +-4158, +-11215, +-12123, +-6560, +-4893, +-8680, +-7000, +-1262, +2843, +5584, +5846, +5210, +7061, +8286, +5502, +1735, +34, +-1179, +-2711, +-4369, +-6004, +-5869, +-4326, +-3324, +-2591, +-387, +2387, +3383, +4066, +4520, +4303, +4319, +3839, +1928, +-212, +-929, +-1713, +-3166, +-3950, +-4068, +-3727, +-2636, +-1732, +-858, +429, +1712, +2271, +2567, +2489, +2242, +1508, +525, +-534, +-1480, +-3190, +-4176, +-4399, +-3711, +-3319, +-1318, +-1529, +5824, +18263, +8980, +1129, +6565, +5402, +1529, +-2393, +-8897, +-9751, +-5403, +-5862, +-10492, +-7777, +-1518, +366, +2076, +3696, +4427, +7644, +8718, +5220, +2988, +3238, +1518, +-1549, +-3359, +-4583, +-5273, +-4773, +-4814, +-4600, +-2655, +-692, +471, +2320, +4827, +5642, +5031, +4951, +4328, +3095, +1691, +-433, +-2141, +-2810, +-3720, +-4751, +-4605, +-3658, +-2743, +-1551, +-321, +614, +1792, +2448, +2382, +2240, +1606, +743, +87, +-1379, +-3091, +-3718, +-3446, +-3437, +-2448, +-1598, +213, +13754, +13943, +1573, +6057, +9324, +2801, +-23, +-4927, +-8617, +-5726, +-5704, +-11215, +-10704, +-3695, +-2220, +-2605, +1165, +3401, +5816, +8504, +6316, +4585, +6307, +4747, +594, +-1023, +-1896, +-3709, +-4527, +-5028, +-5585, +-4224, +-2220, +-1274, +293, +1942, +2965, +3680, +4734, +4718, +3363, +2892, +2290, +475, +-716, +-1845, +-2946, +-3263, +-3337, +-3567, +-3026, +-1758, +-982, +-436, +702, +1028, +1410, +1741, +899, +309, +291, +-996, +-2445, +-3047, +-2952, +-3078, +-1523, +-2030, +2577, +15559, +9454, +1329, +10378, +8861, +812, +-178, +-5162, +-7416, +-4607, +-8367, +-13138, +-8360, +-2930, +-5048, +-4060, +1923, +3453, +5460, +7466, +5185, +6214, +8049, +3818, +813, +1270, +-554, +-3504, +-4259, +-4876, +-4876, +-3386, +-3386, +-3113, +-156, +1431, +1404, +2648, +3661, +3690, +3786, +3546, +2712, +1647, +1033, +-233, +-1897, +-2276, +-2634, +-3387, +-2877, +-2404, +-2222, +-1388, +-525, +-72, +513, +771, +515, +361, +372, +-1054, +-2250, +-2155, +-2433, +-2983, +-1100, +-1463, +1833, +14674, +9493, +994, +11938, +10503, +-113, +849, +-2621, +-6603, +-4210, +-8873, +-13590, +-7446, +-3923, +-8350, +-5775, +1855, +2051, +2889, +6569, +5468, +6885, +9044, +3845, +1981, +4585, +840, +-3160, +-2258, +-3339, +-4931, +-3915, +-4280, +-4171, +-1115, +-336, +-844, +1792, +3382, +2470, +3089, +3456, +2413, +2294, +1580, +-213, +-464, +-689, +-2154, +-2373, +-1735, +-1924, +-1759, +-1042, +-263, +-271, +-470, +311, +122, +-736, +-585, +-908, +-1820, +-2145, +-2413, +-2727, +-1706, +-627, +-619, +4874, +12214, +7923, +4151, +10217, +8801, +1832, +-249, +-2252, +-3941, +-5356, +-8809, +-10597, +-8087, +-4985, +-7232, +-7340, +-455, +1766, +511, +3545, +5644, +6035, +7060, +5689, +3666, +4528, +4075, +-346, +-2183, +-702, +-2923, +-5332, +-3956, +-3938, +-3891, +-1722, +-1618, +-1007, +2233, +3124, +2092, +3473, +4677, +3158, +2354, +2344, +896, +13, +-353, +-1920, +-2500, +-1876, +-2429, +-2904, +-1931, +-1548, +-1647, +-1143, +-884, +-587, +-356, +-508, +-603, +-570, +-880, +-1604, +-1523, +-1037, +-233, +392, +246, +7721, +12282, +3714, +4320, +10768, +5362, +-326, +-905, +-1597, +-3500, +-6473, +-8522, +-9139, +-6295, +-5259, +-8560, +-4871, +1286, +254, +-49, +3842, +6419, +5774, +5068, +5505, +4977, +4533, +3102, +-292, +-514, +212, +-2991, +-5293, +-3514, +-2846, +-4594, +-4048, +-1929, +-1453, +-380, +842, +1019, +2564, +4031, +2872, +2666, +4105, +3307, +1387, +1469, +1130, +-486, +-1134, +-1432, +-2295, +-2313, +-2289, +-2707, +-2354, +-1718, +-2015, +-1659, +-910, +-1114, +-1046, +-671, +-781, +-696, +-1066, +-920, +-494, +630, +-299, +2946, +11838, +6153, +756, +9967, +9690, +956, +-307, +1845, +-422, +-4869, +-5636, +-7078, +-7135, +-4922, +-8414, +-8790, +-2391, +-1148, +-3767, +-1233, +4544, +4553, +2606, +5319, +6810, +5740, +4969, +3580, +2641, +2352, +620, +-2410, +-2839, +-1672, +-3703, +-5513, +-3556, +-2440, +-3208, +-2349, +-432, +345, +1085, +2191, +2337, +2745, +3717, +2847, +1849, +2422, +2079, +335, +-214, +-200, +-1094, +-1711, +-1872, +-2344, +-2092, +-1723, +-2328, +-2458, +-1317, +-1102, +-1879, +-1257, +-123, +-629, +-738, +-453, +-109, +594, +1436, +277, +2464, +11940, +6632, +-1004, +8264, +10307, +345, +-2750, +2361, +611, +-7160, +-6461, +-5327, +-7288, +-6340, +-7520, +-7649, +-3079, +-742, +-3018, +-1572, +5171, +5207, +1733, +5350, +8233, +5364, +3687, +4600, +3696, +1606, +583, +-1252, +-2373, +-1724, +-3315, +-5337, +-3644, +-2214, +-3828, +-3650, +-742, +30, +-493, +992, +2447, +2577, +2805, +3105, +2993, +3033, +2781, +1472, +929, +1016, +-326, +-1571, +-1491, +-1549, +-2321, +-2736, +-2195, +-1921, +-2231, +-2236, +-1424, +-1151, +-1565, +-1131, +-567, +-966, +-660, +-647, +-512, +129, +1163, +-39, +2185, +9519, +3970, +1406, +8300, +7218, +904, +922, +4135, +-220, +-3955, +-2012, +-3738, +-5164, +-4935, +-5977, +-5533, +-3731, +-3711, +-4401, +-1222, +1074, +-614, +576, +3421, +3648, +2696, +3423, +4231, +3550, +2987, +2061, +1263, +1521, +290, +-1497, +-1411, +-887, +-2235, +-3156, +-2033, +-1655, +-2231, +-1780, +-914, +-406, +-37, +398, +721, +1364, +1844, +1608, +1558, +1991, +1915, +1263, +920, +1012, +455, +-182, +-375, +-600, +-1079, +-1270, +-1304, +-1347, +-1242, +-1019, +-991, +-693, +-437, +-596, +-480, +54, +-152, +-430, +-113, +13, +-468, +-500, +-521, +-375, +-321, +46, +-615, +1857, +5276, +1047, +1304, +5364, +3720, +427, +969, +2866, +60, +-1980, +-856, +-1994, +-2713, +-2620, +-3138, +-3432, +-2515, +-1677, +-2598, +-1889, +111, +16, +-190, +914, +1912, +1649, +1546, +2185, +1917, +1525, +1621, +1180, +585, +440, +444, +-330, +-841, +-637, +-867, +-1331, +-1271, +-1064, +-1109, +-1007, +-648, +-539, +-378, +38, +310, +399, +644, +932, +1043, +1017, +1087, +1034, +896, +724, +493, +249, +71, +-7, +-260, +-565, +-549, +-526, +-607, +-669, +-547, +-426, +-399, +-283, +-164, +-120, +-9, +41, +53, +-42, +-73, +-112, +-179, +-342, +-426, +-469, +-497, +-554, +-574, +-701, +-484, +-266, +-66, +-354, +757, +2832, +1417, +142, +2007, +3958, +2079, +28, +1105, +1712, +464, +-647, +-819, +-992, +-1518, +-1511, +-1828, +-2259, +-1935, +-1445, +-1378, +-1419, +-869, +-216, +-39, +212, +606, +932, +966, +1093, +1317, +1159, +923, +869, +781, +471, +155, +48, +-163, +-431, +-536, +-624, +-717, +-739, +-679, +-574, +-466, +-297, +-136, +0, +162, +282, +383, +443, +478, +521, +500, +418, +335, +257, +194, +91, +7, +-59, +-114, +-170, +-186, +-240, +-312, +-257, +-154, +-145, +-165, +-121, +-32, +-7, +24, +81, +90, +89, +174, +205, +111, +67, +89, +81, +-9, +-51, +-70, +-155, +-284, +-278, +-327, +-429, +-396, +-341, +-381, +-430, +-352, +-310, +-272, +-204, +-85, +-150, +80, +662, +335, +-1, +222, +524, +319, +344, +1942, +1990, +525, +363, +1053, +1318, +421, +50, +91, +-476, +-747, +-661, +-791, +-1278, +-1465, +-1063, +-965, +-1033, +-768, +-502, +-304, +-172, +154, +401, +463, +596, +731, +746, +683, +622, +562, +404, +269, +151, +-16, +-163, +-270, +-338, +-409, +-413, +-369, +-398, +-358, +-250, +-188, +-222, +-97, +60, +158, +174, +248, +307, +329, +325, +354, +295, +217, +162, +154, +78, +0, +-66, +-86, +-97, +-93, +-119, +-104, +-35, +-4, +-11, +-6, +-69, +-43, +38, +41, +-7, +-37, +0, +-13, +-85, +-68, +-68, +-80, +-107, +-81, +-82, +-74, +-86, +-66, +-92, +-61, +-61, +-33, +-59, +-71, +-122, +-126, +-181, +-217, +-254, +-236, +-270, +-342, +-315, +-291, +-285, +-153, +-35, +78, +89, +1837, +2562, +831, +424, +1316, +1760, +754, +-120, +26, +-317, +-593, +-716, +-1095, +-1379, +-1373, +-1018, +-1002, +-1129, +-762, +-415, +-179, +-2, +243, +478, +604, +784, +838, +751, +682, +608, +504, +280, +35, +-118, +-205, +-323, +-476, +-579, +-561, +-566, +-544, +-427, +-292, +-179, +-49, +98, +231, +332, +430, +482, +485, +478, +442, +392, +283, +178, +82, +18, +-77, +-143, +-208, +-211, +-224, +-225, +-227, +-167, +-112, +-45, +-15, +50, +114, +161, +178, +204, +219, +205, +162, +106, +66, +-23, +-155, +-194, +-192, +-254, +-307, +-314, +-257, +-247, +-184, +-157, +-118, +-48, +35, +34, +9, +0, +53, +-15, +-101, +-126, +-139, +-229, +-321, +-431, +-343, +-225, +-136, +-203, +155, +2249, +2043, +292, +680, +1780, +1723, +370, +-146, +104, +-212, +-411, +-968, +-1471, +-1388, +-1103, +-1045, +-1383, +-1195, +-536, +-254, +-126, +-31, +344, +710, +860, +881, +800, +822, +866, +599, +316, +112, +0, +-205, +-447, +-592, +-660, +-669, +-626, +-625, +-510, +-331, +-112, +20, +154, +307, +459, +557, +569, +515, +492, +464, +383, +189, +70, +5, +-88, +-218, +-281, +-289, +-290, +-312, +-254, +-188, +-103, +-18, +89, +160, +201, +248, +324, +334, +307, +255, +201, +125, +47, +-41, +-146, +-175, +-214, +-290, +-298, +-398, +-399, +-262, +-234, +-263, +-198, +-20, +69, +41, +17, +59, +80, +37, +-109, +-163, +-139, +-217, +-396, +-489, +-464, +-241, +-223, +-132, +-266, +1765, +2822, +428, +325, +1911, +2224, +731, +-466, +58, +90, +-363, +-1061, +-1848, +-1478, +-1048, +-1188, +-1626, +-1425, +-500, +-126, +-120, +29, +427, +983, +1016, +846, +890, +1003, +968, +621, +321, +168, +11, +-203, +-507, +-673, +-695, +-714, +-741, +-820, +-670, +-416, +-267, +-153, +14, +262, +468, +551, +629, +658, +705, +676, +571, +452, +333, +200, +49, +-106, +-193, +-336, +-439, +-444, +-440, +-429, +-382, +-296, +-193, +-87, +17, +78, +148, +237, +288, +278, +282, +280, +243, +162, +95, +67, +6, +-62, +-121, +-174, +-228, +-261, +-278, +-309, +-330, +-301, +-278, +-304, +-342, +-329, +-283, +-302, +-329, +-278, +-238, +-245, +-244, +-269, +-78, +41, +242, +97, +1291, +2890, +1483, +993, +1982, +2135, +1016, +98, +475, +68, +-777, +-1112, +-1511, +-1531, +-1717, +-1782, +-1761, +-1558, +-1042, +-930, +-723, +-176, +262, +536, +698, +1069, +1263, +1231, +1250, +1085, +901, +696, +423, +113, +-206, +-382, +-622, +-836, +-909, +-938, +-898, +-852, +-708, +-503, +-323, +-82, +121, +340, +520, +672, +780, +820, +838, +808, +714, +614, +452, +309, +124, +-30, +-158, +-280, +-378, +-437, +-465, +-459, +-439, +-386, +-330, +-247, +-164, +-94, +-30, +20, +75, +97, +72, +38, +66, +56, +10, +7, +24, +-3, +-44, +-31, +2, +-17, +-43, +-11, +-33, +-65, +-125, +-208, +-261, +-399, +-523, +-590, +-648, +-749, +-865, +-727, +-583, +-399, +-359, +937, +2246, +1545, +1816, +2823, +2789, +1815, +1425, +1819, +907, +22, +-344, +-736, +-1228, +-1916, +-2187, +-2283, +-2317, +-2281, +-2329, +-1779, +-1327, +-1049, +-609, +-9, +603, +799, +1139, +1566, +1672, +1679, +1543, +1538, +1309, +954, +658, +360, +66, +-293, +-625, +-752, +-945, +-1055, +-1136, +-1060, +-938, +-895, +-698, +-484, +-262, +-79, +125, +365, +533, +654, +779, +859, +933, +880, +852, +803, +690, +555, +394, +291, +92, +-95, +-230, +-373, +-524, +-625, +-691, +-729, +-764, +-719, +-680, +-583, +-469, +-351, +-222, +-73, +79, +170, +274, +392, +423, +419, +417, +393, +254, +117, +-36, +-207, +-402, +-607, +-734, +-940, +-1034, +-1216, +-1324, +-1241, +-1034, +-923, +-557, +1060, +1737, +1615, +2842, +3811, +3578, +2905, +3300, +3178, +1690, +955, +455, +-292, +-1483, +-2319, +-2502, +-3018, +-3353, +-3562, +-3301, +-2792, +-2659, +-2195, +-1426, +-640, +-142, +273, +1167, +1653, +1841, +2078, +2310, +2408, +2044, +1855, +1622, +1205, +717, +206, +-131, +-533, +-952, +-1217, +-1401, +-1429, +-1527, +-1467, +-1251, +-1021, +-781, +-507, +-138, +199, +419, +710, +910, +1082, +1144, +1180, +1166, +1090, +978, +809, +614, +444, +219, +4, +-204, +-352, +-515, +-653, +-746, +-776, +-825, +-810, +-804, +-699, +-617, +-494, +-373, +-190, +-34, +102, +214, +357, +438, +477, +469, +458, +394, +225, +28, +-148, +-353, +-602, +-785, +-934, +-1033, +-1142, +-1203, +-1058, +-874, +-612, +-427, +838, +1786, +1645, +2459, +3425, +3408, +2808, +2738, +2832, +1691, +673, +137, +-499, +-1435, +-2395, +-2637, +-2831, +-3168, +-3261, +-2988, +-2361, +-2064, +-1671, +-864, +-100, +419, +790, +1411, +1924, +1941, +1943, +2017, +1964, +1554, +1104, +872, +496, +-29, +-470, +-717, +-911, +-1231, +-1365, +-1308, +-1196, +-1146, +-992, +-667, +-350, +-150, +119, +446, +714, +840, +956, +1107, +1132, +1064, +940, +850, +690, +445, +212, +24, +-154, +-367, +-514, +-588, +-630, +-683, +-664, +-595, +-502, +-438, +-322, +-194, +-88, +-28, +67, +160, +192, +218, +246, +253, +204, +150, +101, +1, +-96, +-193, +-284, +-376, +-455, +-555, +-575, +-631, +-659, +-679, +-651, +-615, +-644, +-561, +-425, +-228, +-130, +276, +1386, +1613, +1695, +2525, +2972, +2674, +2279, +2336, +2011, +997, +342, +-163, +-758, +-1590, +-2268, +-2448, +-2639, +-2927, +-2968, +-2601, +-2099, +-1895, +-1414, +-663, +-21, +374, +827, +1410, +1787, +1850, +1929, +2002, +1916, +1555, +1215, +942, +563, +49, +-358, +-646, +-900, +-1218, +-1356, +-1331, +-1269, +-1215, +-1025, +-714, +-425, +-201, +114, +419, +671, +789, +948, +1040, +1053, +955, +865, +756, +580, +352, +185, +22, +-143, +-317, +-395, +-475, +-535, +-564, +-500, +-483, +-398, +-319, +-195, +-106, +-11, +86, +152, +199, +219, +243, +221, +140, +94, +32, +-51, +-104, +-140, +-202, +-240, +-263, +-294, +-345, +-390, +-409, +-483, +-545, +-577, +-602, +-626, +-699, +-643, +-557, +-392, +-292, +114, +1059, +1328, +1501, +2285, +2720, +2562, +2319, +2336, +2078, +1242, +591, +88, +-507, +-1320, +-2026, +-2257, +-2474, +-2759, +-2782, +-2435, +-1979, +-1679, +-1182, +-459, +126, +549, +972, +1433, +1694, +1699, +1649, +1588, +1338, +953, +553, +236, +-157, +-557, +-827, +-994, +-1099, +-1142, +-1070, +-878, +-648, +-389, +-78, +231, +532, +746, +930, +1044, +1084, +1028, +909, +732, +516, +277, +1, +-263, +-479, +-645, +-807, +-871, +-828, +-761, +-639, +-472, +-236, +-29, +175, +347, +507, +612, +652, +641, +584, +501, +346, +180, +22, +-131, +-285, +-416, +-501, +-560, +-574, +-595, +-565, +-495, +-437, +-411, +-363, +-258, +-217, +-226, +-211, +-226, +-253, +-363, +-472, +-483, +-424, +-340, +-341, +552, +1617, +1454, +1874, +2855, +3002, +2514, +2085, +2061, +1390, +268, +-528, +-1234, +-1750, +-2502, +-3167, +-3146, +-2930, +-2789, +-2584, +-1872, +-901, +-282, +308, +1085, +1794, +2213, +2289, +2307, +2303, +1969, +1401, +756, +267, +-269, +-938, +-1423, +-1683, +-1786, +-1828, +-1744, +-1412, +-955, +-474, +-38, +439, +953, +1308, +1472, +1559, +1581, +1441, +1132, +752, +391, +-3, +-410, +-793, +-1044, +-1157, +-1200, +-1179, +-984, +-695, +-328, +-29, +350, +698, +959, +1087, +1108, +1083, +927, +662, +339, +41, +-276, +-572, +-826, +-957, +-1012, +-1024, +-912, +-762, +-514, +-289, +-55, +187, +332, +428, +429, +397, +275, +14, +-231, +-469, +-727, +-1018, +-1174, +-1020, +-786, +-613, +-228, +1364, +2799, +2457, +2788, +3873, +3684, +2460, +1383, +960, +-70, +-1527, +-2538, +-3408, +-3453, +-3426, +-3769, +-3360, +-2146, +-960, +-415, +314, +1728, +2548, +2696, +2764, +2677, +2528, +1897, +899, +-2, +-669, +-1177, +-1992, +-2608, +-2448, +-2195, +-1980, +-1628, +-901, +1, +661, +1183, +1643, +2036, +2295, +2105, +1691, +1346, +916, +309, +-359, +-841, +-1115, +-1364, +-1512, +-1455, +-1159, +-790, +-458, +-64, +400, +781, +977, +1072, +1176, +1113, +902, +624, +333, +67, +-243, +-501, +-741, +-848, +-834, +-819, +-831, +-736, +-485, +-307, +-216, +-73, +114, +244, +355, +353, +266, +237, +286, +158, +-288, +-453, +-492, +-814, +-1143, +-1383, +-1324, +-1111, +-815, +-615, +442, +3114, +3953, +3029, +3919, +4941, +3971, +1878, +374, +-455, +-1974, +-3286, +-4552, +-5650, +-4570, +-3342, +-3483, +-2641, +-269, +1946, +2478, +2830, +4030, +4214, +3803, +2888, +1228, +136, +-491, +-1700, +-3203, +-3856, +-3201, +-2821, +-2817, +-1903, +-637, +581, +1606, +2167, +2553, +2896, +3040, +2593, +1551, +807, +272, +-605, +-1460, +-2042, +-2202, +-2015, +-1775, +-1386, +-876, +-132, +665, +1150, +1393, +1651, +1797, +1694, +1299, +803, +318, +-107, +-513, +-923, +-1298, +-1358, +-1289, +-1153, +-1084, +-838, +-447, +-41, +243, +441, +656, +958, +981, +839, +682, +511, +236, +-52, +-445, +-778, +-1174, +-1308, +-1352, +-1558, +-1649, +-1547, +-1278, +-879, +-382, +161, +644, +3348, +6104, +4816, +3648, +4808, +4552, +2078, +-784, +-2182, +-3265, +-4352, +-4702, +-5791, +-6030, +-3554, +-1612, +-1271, +-443, +1928, +3939, +4107, +4000, +4064, +3257, +2711, +1724, +-334, +-2045, +-2530, +-2818, +-3814, +-4286, +-3290, +-2251, +-1389, +-186, +846, +1714, +2703, +3331, +3093, +2464, +2180, +1666, +523, +-508, +-1187, +-1812, +-2159, +-2176, +-2015, +-1810, +-1193, +-271, +366, +829, +1396, +1903, +2099, +1994, +1626, +1124, +566, +139, +-409, +-1054, +-1436, +-1468, +-1292, +-1136, +-1026, +-684, +-200, +225, +501, +562, +625, +732, +705, +523, +230, +-65, +-282, +-465, +-752, +-1154, +-1418, +-1247, +-1238, +-1499, +-1622, +-1520, +-1164, +-695, +-34, +403, +1638, +5931, +7958, +5384, +4240, +4911, +3894, +836, +-2312, +-4068, +-5473, +-5637, +-5363, +-6650, +-6603, +-3512, +-852, +-104, +663, +2831, +4675, +5137, +5106, +4149, +2660, +2205, +1551, +-531, +-2750, +-3254, +-2848, +-3218, +-3660, +-3123, +-2255, +-1075, +296, +1020, +1242, +1997, +3202, +3380, +2502, +1924, +1596, +954, +119, +-773, +-1635, +-2079, +-1966, +-1815, +-1949, +-1750, +-932, +-103, +443, +899, +1332, +1814, +2147, +2079, +1638, +1083, +677, +232, +-448, +-1163, +-1623, +-1755, +-1731, +-1606, +-1448, +-1105, +-692, +-98, +367, +706, +901, +1041, +1012, +803, +544, +56, +-557, +-990, +-1031, +-1320, +-1806, +-2086, +-1988, +-1453, +-840, +-107, +286, +2824, +8161, +9177, +5513, +3632, +3567, +2327, +-794, +-3932, +-6200, +-7500, +-6227, +-4761, +-5838, +-5877, +-2578, +1103, +2615, +3068, +4186, +5094, +5568, +5778, +4142, +1250, +-132, +-349, +-1662, +-3998, +-5143, +-4834, +-4300, +-3396, +-2216, +-1395, +-256, +1793, +3508, +3851, +3570, +3620, +3451, +2651, +1641, +418, +-868, +-1653, +-1907, +-2339, +-2754, +-2446, +-1671, +-1065, +-478, +139, +677, +1196, +1665, +1890, +1696, +1486, +1340, +988, +343, +-254, +-685, +-994, +-1246, +-1391, +-1430, +-1328, +-1092, +-793, +-525, +-158, +205, +559, +744, +829, +829, +758, +439, +9, +-296, +-447, +-813, +-1334, +-1615, +-1731, +-1694, +-1559, +-1055, +-694, +360, +3442, +5109, +3607, +2189, +2785, +4015, +3152, +868, +-642, +-1512, +-1742, +-1879, +-2998, +-4294, +-4178, +-2538, +-1395, +-1552, +-1371, +-211, +1144, +1968, +2197, +2053, +1917, +2172, +2349, +1636, +410, +-250, +-406, +-763, +-1506, +-2096, +-2271, +-2112, +-1695, +-1288, +-1062, +-671, +160, +1038, +1398, +1487, +1588, +1643, +1513, +1173, +665, +72, +-358, +-595, +-820, +-1083, +-1209, +-1030, +-748, +-424, +-140, +137, +405, +691, +869, +882, +764, +636, +514, +322, +62, +-196, +-408, +-528, +-545, +-548, +-555, +-450, +-265, +-90, +79, +217, +343, +400, +391, +378, +302, +180, +41, +-105, +-226, +-375, +-435, +-459, +-428, +-381, +-321, +-222, +-149, +-79, +24, +158, +248, +183, +112, +63, +27, +-49, +-119, +-233, +-176, +64, +185, +-62, +-229, +-261, +-200, +-123, +-85, +126, +1087, +1992, +1942, +1470, +1327, +1169, +695, +-37, +-706, +-1358, +-1547, +-1428, +-1460, +-1608, +-1364, +-798, +-192, +143, +449, +713, +959, +1160, +1184, +857, +537, +313, +121, +-207, +-539, +-789, +-843, +-801, +-670, +-573, +-439, +-208, +123, +325, +448, +530, +617, +602, +526, +364, +173, +-17, +-133, +-269, +-377, +-447, +-423, +-353, +-257, +-159, +-41, +67, +202, +275, +321, +314, +294, +244, +180, +84, +-28, +-95, +-131, +-186, +-185, +-179, +-147, +-95, +-25, +31, +51, +111, +150, +135, +146, +122, +78, +61, +43, +-4, +-43, +-51, +-74, +-81, +-66, +-69, +-64, +-40, +-19, +-7, +4, +16, +29, +27, +30, +28, +8, +6, +6, +-7, +0, +12, +6, +-13, +-22, +-26, +-42, +-54, +-51, +-62, +-59, +-32, +-21, +-21, +-11, +4, +12, +7, +3, +-21, +-56, +-46, +-42, +-68, +-89, +-95, +-84, +-68, +-46, +-32, +-22, +67, +214, +276, +221, +144, +119, +94, +30, +-43, +-81, +-46, +51, +136, +177, +210, +244, +262, +213, +106, +-21, +-133, +-221, +-299, +-373, +-413, +-380, +-299, +-201, +-98, +23, +134, +230, +301, +309, +268, +224, +184, +103, +-21, +-121, +-166, +-189, +-204, +-211, +-207, +-174, +-96, +-10, +44, +72, +99, +126, +137, +126, +96, +48, +17, +-6, +-40, +-68, +-83, +-75, +-69, +-73, +-58, +-29, +-1, +14, +24, +41, +47, +41, +39, +38, +37, +23, +0, +-10, +-6, +-1, +-1, +-4, +-3, +-1, +5, +7, +7, +15, +11, +-1, +-3, +6, +-6, +-8, +0, +-6, +-5, +6, +17, +-1, +-7, +5, +4, +-3, +-6, +-10, +-26, +-43, +-37, +-28, +-21, +-18, +-28, +-29, +-15, +-3, +-2, +-17, +-22, +-13, +-31, +-36, +-27, +-33, +-57, +-43, +-15, +5, +20, +60, +107, +165, +197, +199, +172, +144, +102, +51, +-28, +-94, +-131, +-139, +-157, +-158, +-149, +-117, +-87, +-39, +-7, +22, +43, +67, +67, +56, +40, +44, +25, +13, +-12, +-28, +-31, +-23, +-25, +-18, +-12, +-8, +-6, +14, +12, +6, +19, +35, +25, +16, +5, +0, +9, +7, +2, +16, +18, +3, +-4, +8, +18, +3, +9, +5, +10, +-3, +-10, +-12, +-10, +-13, +-19, +-29, +-10, +-17, +-18, +-24, +-27, +-27, +-10, +-24, +-29, +-43, +-35, +-39, +-31, +-33, +-21, +-30, +-8, +21, +53, +65, +103, +117, +128, +120, +119, +68, +36, +2, +-23, +-55, +-71, +-94, +-88, +-81, +-67, +-63, +-48, +-34, +-8, +6, +11, +10, +30, +25, +15, +27, +26, +15, +-1, +0, +3, +-6, +-5, +9, +3, +7, +4, +8, +-2, +9, +12, +27, +13, +6, +-2, +6, +-17, +5, +-4, +0, +-9, +4, +-16, +-16, +-26, +-10, +-36, +-18, +-30, +-26, +-33, +-19, +-50, +-38, +-43, +-25, +-16, +24, +27, +71, +92, +108, +94, +97, +64, +52, +16, +-6, +-33, +-36, +-57, +-57, +-68, +-43, +-43, +-37, +-46, +-20, +-10, +3, +-7, +10, +10, +11, +13, +12, +-1, +19, +3, +4, +12, +20, +12, +10, +15, +14, +-2, +15, +19, +5, +2, +2, +1, +-5, +-16, +-1, +-8, +-16, +-8, +-13, +-29, +-24, +-27, +-28, +-28, +-37, +-30, +-24, +-8, +26, +58, +75, +81, +73, +59, +51, +30, +6, +3, +-5, +-24, +-22, +-15, +-23, +-34, +-38, +-30, +-21, +-10, +-8, +-4, +0, +4, +-12, +-15, +-6, +-9, +13, +22, +18, +28, +30, +15, +10, +5, +6, +-13, +-36, +-34, +-42, +-47, +-25, +-14, +-21, +-17, +22, +26, +-5, +4, +2, +-24, +-32, +-4, +5, +11, +25, +7, +6, +15, +23, +26, +6, +11, +43, +21, +8, +39, +4, +21, +40, +22, +60, +75, +83, +122, +95, +73, +26, +-23, +-27, +-92, +-119, +-104, +-92, +-41, +-4, +-4, +-6, +6, +15, +38, +34, +23, +31, +14, +9, +-15, +-37, +-33, +-83, +-120, +-100, +-81, +-97, +-64, +-11, +8, +10, +41, +15, +46, +174, +106, +55, +99, +1, +-18, +-30, +-61, +-61, +-67, +-39, +-33, +-12, +13, +-1, +5, +19, +3, +9, +-1, +-5, +-25, +-26, +-15, +-37, +-14, +-3, +-10, +5, +15, +22, +26, +39, +40, +33, +37, +30, +18, +22, +7, +7, +0, +-5, +-6, +-15, +-11, +-19, +-17, +-21, +-23, +-27, +-27, +-30, +-35, +-27, +-49, +-45, +-64, +-56, +-74, +-28, +-13, +15, +429, +417, +80, +188, +29, +-101, +-111, +-167, +-162, +-171, +-56, +-91, +-72, +42, +-18, +15, +45, +11, +31, +1, +23, +-7, +-5, +21, +-21, +28, +12, +5, +28, +7, +26, +7, +15, +25, +5, +25, +10, +10, +22, +-9, +10, +-17, +-5, +-16, +-17, +-9, +-8, +-21, +-11, +-39, +-23, +-46, +-30, +-46, +-26, +-51, +-67, +-76, +-90, +-80, +-63, +39, +-30, +635, +818, +46, +147, +-11, +-278, +-216, +-248, +-194, +-242, +-6, +-63, +-100, +131, +-11, +44, +91, +17, +-18, +-58, +-5, +-49, +21, +-33, +34, +160, +61, +42, +32, +-2, +-113, +-120, +-192, +-75, +174, +-143, +-100, +-10, +1, +79, +135, +266, +-1, +116, +120, +-89, +154, +-22, +10, +-58, +-38, +-202, +-307, +432, +240, +-80, +320, +-182, +-285, +-252, +-618, +-269, +-89, +401, +459, +347, +472, +26, +-18, +-47, +-376, +-223, +-199, +-46, +-93, +22, +219, +196, +46, +-326, +-160, +115, +-210, +144, +129, +-141, +-8, +140, +433, +-12, +-87, +20, +-10, +30, +-307, +-261, +-690, +-238, +822, +469, +415, +320, +-6, +185, +-219, +-145, +-246, +-420, +-115, +-157, +-84, +-87, +221, +0, +-23, +530, +4, +-15, +89, +9, +-58, +-197, +-96, +-421, +-165, +-13, +-452, +55, +171, +130, +110, +311, +464, +-39, +43, +10, +-65, +28, +-164, +62, +-60, +-209, +-362, +-272, +244, +-103, +209, +819, +167, +68, +-34, +-230, +-100, +-10, +105, +170, +423, +632, +119, +-199, +42, +-178, +-85, +-74, +-344, +-439, +-339, +-216, +311, +678, +582, +435, +-158, +-175, +73, +-80, +-464, +-815, +-203, +-323, +-664, +-21, +26, +433, +441, +246, +333, +142, +171, +-387, +-263, +148, +23, +149, +-126, +30, +51, +117, +188, +-539, +29, +205, +-123, +155, +131, +104, +19, +145, +-289, +-431, +0, +-420, +-218, +56, +91, +195, +-103, +87, +-3, +343, +207, +-281, +35, +-148, +138, +93, +-334, +63, +36, +78, +-302, +-526, +-427, +-660, +-238, +-298, +21, +790, +448, +472, +757, +856, +389, +-389, +69, +103, +-63, +-13, +-557, +-170, +125, +-4, +-352, +-410, +315, +-48, +-97, +-124, +-527, +246, +647, +71, +-235, +-228, +-451, +-306, +363, +382, +-74, +108, +28, +-341, +37, +162, +-66, +183, +454, +227, +187, +517, +471, +-139, +-228, +63, +-170, +-150, +244, +-64, +-456, +-54, +461, +195, +-309, +-326, +-89, +49, +50, +-323, +-210, +435, +988, +820, +218, +-165, +-192, +-175, +-579, +-567, +-365, +-146, +141, +-662, +-1223, +-704, +227, +269, +-448, +337, +931, +673, +437, +-205, +-176, +-156, +-299, +-386, +-496, +142, +116, +-154, +-355, +-491, +17, +-203, +-499, +-298, +546, +1489, +516, +-241, +67, +90, +-223, +-616, +-622, +-157, +616, +1075, +610, +288, +676, +659, +150, +-342, +-244, +-86, +-320, +-220, +-278, +-543, +-80, +488, +247, +-54, +-153, +-207, +-283, +-198, +-170, +-266, +60, +153, +-215, +-72, +120, +76, +56, +-87, +22, +64, +141, +73, +-37, +277, +136, +-169, +-203, +-127, +-17, +-145, +-140, +-241, +-175, +15, +-195, +-212, +-100, +-52, +-12, +-178, +-183, +-149, +-57, +-117, +-392, +-91, +48, +-216, +-271, +-469, +-397, +-181, +516, +777, +1001, +3479, +4115, +1347, +-222, +-177, +-240, +-1385, +-1635, +-1006, +-1541, +-520, +485, +-557, +-748, +-38, +644, +246, +-252, +468, +74, +-220, +342, +-5, +-595, +-393, +152, +8, +-347, +106, +-23, +-344, +218, +493, +39, +-291, +56, +296, +-170, +-123, +-127, +-256, +22, +115, +-152, +-373, +40, +424, +4, +-81, +71, +149, +196, +108, +-52, +-140, +178, +398, +119, +-134, +-9, +219, +92, +44, +-49, +5, +156, +240, +44, +-224, +-7, +198, +46, +-57, +-75, +82, +53, +94, +-147, +-214, +10, +142, +-60, +-192, +-55, +4, +13, +-20, +-153, +-107, +-17, +-1, +-264, +-153, +125, +109, +-43, +-215, +-368, +-192, +-77, +-270, +-476, +-241, +3, +-343, +-672, +-840, +-735, +-154, +520, +-118, +638, +5110, +5318, +313, +-1333, +-315, +-312, +-1728, +-2948, +-3283, +-1999, +2484, +2536, +-2013, +-1675, +2109, +2863, +441, +-940, +-163, +507, +1163, +406, +-2538, +-2285, +789, +1005, +-1405, +-2044, +21, +1110, +607, +143, +-524, +-70, +1636, +1329, +-636, +-1084, +522, +978, +-127, +-706, +-462, +-31, +667, +392, +-639, +-636, +527, +949, +183, +-322, +-7, +503, +716, +348, +-298, +-269, +355, +505, +-116, +-541, +-312, +179, +305, +-33, +-464, +-280, +277, +425, +-204, +-549, +-279, +129, +80, +-348, +-630, +-332, +214, +54, +-792, +-987, +-88, +-51, +-616, +-1227, +-1268, +-659, +-335, +-81, +-718, +4376, +11477, +5778, +-1970, +-272, +1642, +-973, +-5351, +-7281, +-6891, +-2672, +3193, +-7, +-4939, +911, +7202, +4919, +629, +214, +1744, +2296, +1588, +-2183, +-6087, +-2879, +1197, +-1255, +-4385, +-1998, +1583, +2244, +1509, +876, +599, +2229, +3512, +715, +-1625, +-209, +943, +-848, +-2156, +-1329, +-394, +36, +502, +56, +-46, +1476, +2086, +549, +-412, +521, +1004, +-234, +-1188, +-1288, +-1050, +-434, +-346, +-644, +-305, +722, +1109, +337, +-280, +-52, +5, +78, +-1079, +-2736, +-2774, +-1980, +-1476, +-1451, +-969, +245, +1501, +10820, +16134, +3358, +-4437, +1229, +2611, +-3693, +-10270, +-10079, +-5371, +-873, +1188, +-4267, +-5509, +6273, +12488, +6174, +732, +1904, +4303, +3430, +-849, +-7991, +-10784, +-3524, +1056, +-4652, +-7465 +}; diff --git a/libcodec2-android/src/codec2/unittest/ofdm_check b/libcodec2-android/src/codec2/unittest/ofdm_check new file mode 100755 index 0000000..c93531c --- /dev/null +++ b/libcodec2-android/src/codec2/unittest/ofdm_check @@ -0,0 +1,68 @@ +#! /bin/bash + +# ofdm_check +# +# A series of checks of the ofdm functions, mostly decode. +# +# This uses ofdm_mod to supply test data to ofdm_demod and mosty +# assumes that the encode function is correct. + +# Define macros to (later) allow testing alternate versions. +alias OFDM_MOD=ofdm_mod +alias OFDM_DEMOD=ofdm_demod +shopt -s expand_aliases + +# PATH +PATH=$PATH:../src + +PASS=1 + +############################### +echo +echo "Simple test, plain, ideal" +OFDM_MOD --in /dev/zero --testframes 100 | + OFDM_DEMOD --out /dev/null --testframes --verbose 1 2> tmp +cat tmp +p1=$(grep '^BER\.*: 0.000' tmp | wc -l) +p2=$(grep '^BER2\.*: 0.000' tmp | wc -l) +if [[ $p1 -eq 1 && $p2 -eq 1 ]]; then echo "OK"; else echo "BAD"; PASS=0; fi + +############################### +echo +echo "Simple test, plain, AWGN" +OFDM_MOD --in /dev/zero --testframes 100 | + cohpsk_ch - - -20 -Fs 8000 -f -5 --raw_dir ../../raw | + OFDM_DEMOD --out /dev/null --testframes --verbose 1 2>tmp +cat tmp +n=$(grep '^BER\.*:' tmp | cut -d ' ' -f 2) +p1=$(echo $n '<=' 0.10 | bc) +n=$(grep '^BER2\.*:' tmp | cut -d ' ' -f 2) +p2=$(echo $n '<=' 0.10 | bc) +if [[ $p1 -eq 1 && $p2 -eq 1 ]]; then echo "OK"; else echo "BAD"; PASS=0; fi + +############################### +echo +echo "Simple test, LDPC, ideal" +OFDM_MOD --in /dev/zero --ldpc --testframes 100 | + OFDM_DEMOD --out /dev/null --ldpc --testframes --verbose 1 2>tmp +cat tmp +p1=$(grep '^BER\.*: 0.000' tmp | wc -l) +p2=$(grep '^Coded BER: 0.000' tmp | wc -l) +if [[ $p1 -eq 1 && $p2 -eq 1 ]]; then echo "OK"; else echo "BAD"; PASS=0; fi + +############################### +echo +echo "Simple test, LDPC, AWGN" +OFDM_MOD --in /dev/zero --ldpc --testframes 100 | + cohpsk_ch - - -20 -Fs 8000 -f -5 --raw_dir ../../raw | + OFDM_DEMOD --out /dev/null --ldpc --testframes --verbose 1 2>tmp +cat tmp +n=$(grep '^BER\.*:' tmp | cut -d ' ' -f 2) +p1=$(echo $n '<=' 0.10 | bc) +n=$(grep '^Coded.*BER\.*:' tmp | cut -d ' ' -f 3) +p2=$(echo $n '<=' 0.01 | bc) +if [[ $p1 -eq 1 && $p2 -eq 1 ]]; then echo "OK"; else echo "BAD"; PASS=0; fi + + +echo +if [[ $PASS == 1 ]]; then echo "PASSED"; else echo "FAILED"; fi diff --git a/libcodec2-android/src/codec2/unittest/ofdm_fade.sh.in b/libcodec2-android/src/codec2/unittest/ofdm_fade.sh.in new file mode 100755 index 0000000..c3fc98c --- /dev/null +++ b/libcodec2-android/src/codec2/unittest/ofdm_fade.sh.in @@ -0,0 +1,24 @@ +#!/bin/bash -x +# +# David June 2019 +# Tests 700D OFDM modem fading channel performance, using a simulated channel + +PATH=$PATH:@CMAKE_CURRENT_BINARY_DIR@/src +RAW=$PWD/../raw +results=$(mktemp) + +# generate fading file +if [ ! -f ../raw/fast_fading_samples.float ]; then + echo "Generating fading files ......" + cmd='cd ../octave; pkg load signal; cohpsk_ch_fading("../raw/fast_fading_samples.float", 8000, 1.0, 8000*60)' + octave --no-gui -qf --eval "$cmd" + [ ! $? -eq 0 ] && { echo "octave failed to run correctly .... exiting"; exit 1; } +fi + +pwd +# BER should be around 4% for this test (it's better for larger interleavers but no one uses interleaving in practice) +ofdm_mod --in /dev/zero --ldpc 1 --testframes 60 --txbpf | cohpsk_ch - - -24 --Fs 8000 -f -10 --fast --raw_dir $RAW | ofdm_demod --out /dev/null --testframes --verbose 2 --ldpc 1 2> $results +cat $results +cber=$(cat $results | sed -n "s/^Coded BER.* \([0-9..]*\) Tbits.*/\1/p") +python -c "import sys; sys.exit(0) if $cber<=0.05 else sys.exit(1)" + diff --git a/libcodec2-android/src/codec2/unittest/ofdm_fade_dpsk.sh b/libcodec2-android/src/codec2/unittest/ofdm_fade_dpsk.sh new file mode 100755 index 0000000..6e7280c --- /dev/null +++ b/libcodec2-android/src/codec2/unittest/ofdm_fade_dpsk.sh @@ -0,0 +1,23 @@ +#!/bin/bash -x +# +# David Sep 2019 +# Tests 2020 OFDM modem fading channel performance in DPSK mode, using a simulated faster (2Hz) high SNR fading channel + +RAW=$PWD/../raw +results=$(mktemp) + +# generate fading file +if [ ! -f ../raw/faster_fading_samples.float ]; then + echo "Generating fading files ......" + cmd='cd ../octave; pkg load signal; cohpsk_ch_fading("../raw/faster_fading_samples.float", 8000, 2.0, 8000*60)' + octave --no-gui -qf --eval "$cmd" + [ ! $? -eq 0 ] && { echo "octave failed to run correctly .... exiting"; exit 1; } +fi + +pwd +# Coded BER should be < 1% for this test +ofdm_mod --in /dev/zero --testframes 300 --mode 2020 --ldpc --verbose 1 -p 312 --dpsk | cohpsk_ch - - -40 --Fs 8000 -f 10 --ssbfilt 1 --faster --raw_dir $RAW | ofdm_demod --out /dev/null --testframes --mode 2020 --verbose 1 --ldpc -p 312 --dpsk 2> $results +cat $results +cber=$(cat $results | sed -n "s/^Coded BER.* \([0-9..]*\) Tbits.*/\1/p") +python -c "import sys; sys.exit(0) if $cber<=0.05 else sys.exit(1)" + diff --git a/libcodec2-android/src/codec2/unittest/ofdm_mem.c b/libcodec2-android/src/codec2/unittest/ofdm_mem.c new file mode 100644 index 0000000..02f2436 --- /dev/null +++ b/libcodec2-android/src/codec2/unittest/ofdm_mem.c @@ -0,0 +1,107 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: ofdm_mem.c + AUTHOR......: Don Reid + DATE CREATED: 11 June 2018 + + Prints out the memory used by the OFDM modem states. Used to optimise + memory use for thw STM32F4 port. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2018 Don Reid + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include +#include +#include +#include +#include + +#include "codec2_ofdm.h" +#include "ofdm_internal.h" + +int main() +{ + struct OFDM_CONFIG *ofdm_config; + struct OFDM *ofdm; + + ofdm = ofdm_create(NULL); + assert(ofdm != NULL); + + /* Get a copy of the actual modem config */ + ofdm_config = ofdm_get_config_param(ofdm); + + int ofdm_m = (int) (ofdm_config->fs / ofdm_config->rs); /* 144 */ + int ofdm_ncp = (int) (ofdm_config->tcp * ofdm_config->fs); /* 16 */ + int ofdm_bitsperframe = (ofdm_config->ns - 1) * (ofdm_config->nc * ofdm_config->bps); + int ofdm_rowsperframe = ofdm_bitsperframe / (ofdm_config->nc * ofdm_config->bps); + int ofdm_samplesperframe = ofdm_config->ns * (ofdm_m + ofdm_ncp); + int ofdm_rxbuf = 3 * ofdm_samplesperframe + 3 * (ofdm_m + ofdm_ncp); + int ofdm_nuwbits = (ofdm_config->ns - 1) * ofdm_config->bps - ofdm_config->txtbits; + + int used = 0; + + printf("struct OFDM.................: %zd\n", sizeof(struct OFDM)); + printf("config......................: %zd\n", sizeof(struct OFDM_CONFIG)); + used += sizeof(struct OFDM_CONFIG); + printf("pilot_samples...............: %zd\n", sizeof (complex float) * (ofdm_m + ofdm_ncp)); + used += sizeof (complex float) * (ofdm_m + ofdm_ncp); + printf("rxbuf.......................: %zd\n", sizeof (complex float) * ofdm_rxbuf); + used += sizeof (complex float) * ofdm_rxbuf; + printf("pilots......................: %zd\n", sizeof (complex float) * (ofdm_config->nc + 2)); + used += sizeof (complex float) * (ofdm_config->nc + 2); + + size_t rxsym_size = sizeof (complex float) * (ofdm_config->ns + 3) * (ofdm_config->nc + 2); + + printf("rx_sym......................: %zd\n", rxsym_size); + used += rxsym_size; + printf("rx_np.......................: %zd\n", sizeof (complex float) * (ofdm_rowsperframe * ofdm_config->nc)); + used += sizeof (complex float) * (ofdm_rowsperframe * ofdm_config->nc); + printf("rx_amp......................: %zd\n", sizeof (float) * (ofdm_rowsperframe * ofdm_config->nc)); + used += sizeof (float) * (ofdm_rowsperframe * ofdm_config->nc); + printf("aphase_est_pilot_log........: %zd\n", sizeof (float) * (ofdm_rowsperframe * ofdm_config->nc)); + used += sizeof (float) * (ofdm_rowsperframe * ofdm_config->nc); + printf("tx_uw.......................: %zd\n", sizeof (int) * ofdm_nuwbits); + used += sizeof (int) * ofdm_nuwbits; + printf("sync_state..................: %zd\n", sizeof (State)); + used += sizeof (State); + printf("last_sync_state.............: %zd\n", sizeof (State)); + used += sizeof (State); + printf("sync_state_interleaver......: %zd\n", sizeof (State)); + used += sizeof (State); + printf("last_sync_state_interleaver.: %zd\n", sizeof (State)); + used += sizeof (State); + + // add in non-array sizes + int single = 0; + single += 8 * sizeof(int); + single += 13 * sizeof(float); + single += 1 * sizeof(complex float); + single += 1 * sizeof(float *); + single += 4 * sizeof(bool); + printf("single values...............: %d\n", single); + used += single; + + printf("Total used .................: %zd\n", (size_t) used); + + ofdm_destroy(ofdm); + + return 0; +} + diff --git a/libcodec2-android/src/codec2/unittest/ofdm_phase_est_bw.sh b/libcodec2-android/src/codec2/unittest/ofdm_phase_est_bw.sh new file mode 100755 index 0000000..fe7d6e2 --- /dev/null +++ b/libcodec2-android/src/codec2/unittest/ofdm_phase_est_bw.sh @@ -0,0 +1,33 @@ +#!/bin/bash -x +# +# ofdm_phase_est_bw.sh +# David August 2019 + +# Tests 2020 OFDM modem phase est bandwidth mode option. Locking the +# phase est bandwidth to "high" is useful for High SNR channels with +# fast fading or high phase noise. In this test we show that with +# high bandwidth phase est mode, the BER is < 5% for the "--faster" (2 +# Hz fading) channel model on a fairly high SNR channel. +# +# To run manually outside of ctest: +# $ cd codec2/unittest +# $ PATH=$PATH:../build_linux/src ./ofdm_phase_est_bw.sh + +RAW=$PWD/../raw +results=$(mktemp) + +# generate fading file +if [ ! -f ../raw/faster_fading_samples.float ]; then + echo "Generating fading file ......" + cmd='cd ../octave; pkg load signal; cohpsk_ch_fading("../raw/faster_fading_samples.float", 8000, 2.0, 8000*60)' + octave --no-gui -qf --eval "$cmd" + [ ! $? -eq 0 ] && { echo "octave failed to run correctly .... exiting"; exit 1; } +fi + +pwd +# BER should be < 5% for this test +ofdm_mod --in /dev/zero --testframes 300 --mode 2020 --ldpc -p 312 --verbose 0 | cohpsk_ch - - -40 --Fs 8000 -f 10 --ssbfilt 1 --faster --raw_dir $RAW | ofdm_demod --out /dev/null --testframes --mode 2020 --verbose 1 --ldpc -p 312 --bandwidth 1 2> $results +cat $results +cber=$(cat $results | sed -n "s/^Coded BER.* \([0-9..]*\) Tbits.*/\1/p") +python -c "import sys; sys.exit(0) if $cber<=0.05 else sys.exit(1)" + diff --git a/libcodec2-android/src/codec2/unittest/ofdm_stack.c b/libcodec2-android/src/codec2/unittest/ofdm_stack.c new file mode 100644 index 0000000..aef6f42 --- /dev/null +++ b/libcodec2-android/src/codec2/unittest/ofdm_stack.c @@ -0,0 +1,229 @@ +#include +#include +#include +#include +#include +#include + +#include "comp.h" +#include "ofdm_internal.h" +#include "codec2_ofdm.h" +#include "test_bits_ofdm.h" /* payload_data_bits */ +#include "mpdecode_core.h" + +#define MAX_ERRORS 32 + +static int ofdm_bitsperframe; +static int ofdm_rowsperframe; +static int ofdm_nuwbits; +static int ofdm_ntxtbits; +static int ofdm_rx_offset; +static int ofdm_data_bitsperframe; +static int ofdm_samplesperframe; +static int ofdm_max_samplesperframe; +static int ofdm_rxbuf; +static int ofdm_m; +static int ofdm_ncp; + +// Forwards +void run_modem(struct OFDM *ofdm, int tx_bits[], int rx_bits[], COMP tx_rx[]); +void dummy_code(); + +///////////////////////////////////////////////////////////// +/// MAIN() +int main(int argc, char *argv[]) { + // Options + int f, i, opt; + int dummy = 0; // flag to use dummy code + int frames = 1; // how many frames + int print = 0; // flag to print all bits + struct OFDM *ofdm; + struct OFDM_CONFIG *ofdm_config; + + ofdm = ofdm_create(NULL); + assert(ofdm != NULL); + + /* Get a copy of the actual modem config */ + + ofdm_config = ofdm_get_config_param(ofdm); + + ofdm_m = (int) (ofdm_config->fs / ofdm_config->rs); + ofdm_ncp = (int) (ofdm_config->tcp * ofdm_config->fs); + ofdm_bitsperframe = ofdm_get_bits_per_frame(ofdm); + ofdm_rowsperframe = ofdm_bitsperframe / (ofdm_config->nc * ofdm_config->bps); + ofdm_samplesperframe = ofdm_get_samples_per_frame(ofdm); + ofdm_max_samplesperframe = ofdm_get_max_samples_per_frame(ofdm); + ofdm_rxbuf = 3 * ofdm_samplesperframe + 3 * (ofdm_m + ofdm_ncp); + ofdm_nuwbits = (ofdm_config->ns - 1) * ofdm_config->bps - ofdm_config->txtbits; + ofdm_ntxtbits = ofdm_config->txtbits; + ofdm_rx_offset = (ofdm_nuwbits + ofdm_ntxtbits); + ofdm_data_bitsperframe = (ofdm_bitsperframe - ofdm_rx_offset); + + int tx_bits[ofdm_data_bitsperframe]; + int rx_bits[ofdm_data_bitsperframe]; + COMP tx_rx[ofdm_samplesperframe]; + + while ((opt = getopt(argc, argv, "df:p")) != -1) { + switch (opt) { + case 'd': + dummy = 1; + break; + case 'f': + frames = atoi(optarg); + break; + case 'p': + print = 1; + break; + default: + fprintf(stderr, "Usage: %s [-e] [-f ] [-p]\n", argv[0]); + } + } + + for (f = 0; f < frames; f++) { + //////// + // Prep inputs + + for(i=0; itx_uw[i]; + } + + for(i=ofdm_nuwbits; irxbuf[ofdm_rxbuf-nin+i] = tx_rx[prx].real + tx_rx[prx].imag * I; + } + + for (i=ofdm_samplesperframe ; irxbuf[ofdm_rxbuf-nin+i] = 0.0 + 0.0 * I; + } + + /* disable estimators for initial testing */ + ofdm_set_verbose(ofdm, false); + ofdm_set_timing_enable(ofdm, true); + ofdm_set_foff_est_enable(ofdm, true); + ofdm_set_phase_est_enable(ofdm, true); + + ofdm->mean_amp = 1.0; + + nin = ofdm_get_nin(ofdm); + + /* Insert samples at end of buffer, set to zero if no samples + available to disable phase estimation on future pilots on + last frame of simulation. */ + + if ((Nsam-prx) < nin) { + lnew = Nsam-prx; + } else { + lnew = nin; + } + for(i=0; i/dev/null > $onerun + fi; + if [ "$1" = "2020" ]; then + ofdm_demod --mode 2020 --in ../wav/david4.wav --out /dev/null --verbose 2 --ldpc -p 312 \ + --start_secs $start_secs --len_secs 5 2>/dev/null > $onerun + fi; + [ ! $? -eq 0 ] && { echo "error running ofdm_demod"; exit 1; } + cat $onerun | sed -n "s/time_to_sync: \([0-9..]*\)/\1/p" >> $results +done +# a pass is we never take longer than 5 secs to sync (mean is much smaller) +python3 -c " +import sys; import numpy as np +x=np.loadtxt(\"$results\") +fails=sum(x == -1) +print(\"fails: %d mean: %5.2f var: %5.2f \" % (fails, np.mean(x), np.var(x))) +sys.exit(0) if fails==0 else sys.exit(1) +" diff --git a/libcodec2-android/src/codec2/unittest/sd.c b/libcodec2-android/src/codec2/unittest/sd.c new file mode 100644 index 0000000..1d1a628 --- /dev/null +++ b/libcodec2-android/src/codec2/unittest/sd.c @@ -0,0 +1,84 @@ +/*--------------------------------------------------------------------------*\ + + FILE........: sd.c + AUTHOR......: David Rowe + DATE CREATED: 20/7/93 + + Function to determine spectral distortion between two sets of LPCs. + +\*--------------------------------------------------------------------------*/ + +/* + Copyright (C) 2009 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#define MAX_N 2048 /* maximum DFT size */ + +#include +#include "four1.h" +#include "comp.h" +#include "sd.h" + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: spectral_dist() + + AUTHOR......: David Rowe + DATE CREATED: 20/7/93 + + This function returns the soectral distoertion between two + sets of LPCs. + +\*---------------------------------------------------------------------------*/ + +float spectral_dist(float ak1[], float ak2[], int p, int n) +/* float ak1[]; unquantised set of p+1 LPCs */ +/* float ak2[]; quantised set of p+1 LPCs */ +/* int p; LP order */ +/* int n; DFT size to use for SD calculations (power of 2) */ +{ + COMP A1[MAX_N]; /* DFT of ak1[] */ + COMP A2[MAX_N]; /* DFT of ak2[] */ + float P1,P2; /* power of current bin */ + float sd; + int i; + + for(i=0; i. +*/ + +#ifndef __SD__ +#define __SD__ + +float spectral_dist(float ak1[], float ak2[], int p, int n); + +#endif /* __SD__ */ diff --git a/libcodec2-android/src/codec2/unittest/sum_debug_alloc b/libcodec2-android/src/codec2/unittest/sum_debug_alloc new file mode 100755 index 0000000..21e3137 --- /dev/null +++ b/libcodec2-android/src/codec2/unittest/sum_debug_alloc @@ -0,0 +1,79 @@ +#!/usr/bin/env python3 + +""" sum_debug_alloc + + Sum lines reported from codec2-dev/src/debug_alloc.h and report + + Lines like: + + CALLOC: run_ldpc_decoder(112, 32) + + + MALLOC: other_func(238) + + """ + +import fileinput + +by_func = {} +by_addr = {} + +def new_func(): + rec = {} + rec['cur'] = 0 + rec['max'] = 0 + return(rec) + +def new_addr(): + rec = {} + rec['func'] = 0 # Where allocated, may not be same as where free'd! + rec['size'] = 0 + return(rec) + +for line in fileinput.input(): + + if ((line.startswith("MALLOC:")) or (line.startswith("CALLOC:"))): + if (line.startswith("MALLOC:")): + words = line.translate( str.maketrans("()", " ") ).strip().split() + func = words[1] + addr = words[2] + size = int(words[3]) + + elif (line.startswith("CALLOC:")): + words = line.translate( str.maketrans("(,)", " ") ).strip().split() + func = words[1] + addr = words[2] + size = int(words[3]) * int(words[4]) + + #print("Alloc: {} to {} in {}".format(size, addr, func)) + if (not (func in by_func)): by_func[func] = new_func() + data = by_func[func] + data['cur'] += size + if (data['cur'] > data['max']): + data['max'] = data['cur'] + if (addr in by_addr): + print("Error: duplicate allocation to {} in {}".format(addr, func)) + else: + by_addr[addr] = new_addr() + by_addr[addr]['func'] = func + by_addr[addr]['size'] = size + + elif (line.startswith("FREE:")): + words = line.translate( str.maketrans("(,)", " ") ).strip().split() + func = words[1] + addr = words[2] + if (addr in by_addr): + func_a = by_addr[addr]['func'] + by_func[func_a]['cur'] -= by_addr[addr]['size'] + del(by_addr[addr]) + else: + print("Error: free of unallocated location {} in {}".format(addr, func)) + #print("Free: {}:{} in {} to {}".format(func_a, addr, func, by_func[func_a]['cur'])) + +##### +total = 0 +for func, sum in by_func.items(): + max = by_func[func]['max'] + print("{} = {}".format(func, max)) + total += max +print("Total = {}".format(total)) diff --git a/libcodec2-android/src/codec2/unittest/t_helpers.c b/libcodec2-android/src/codec2/unittest/t_helpers.c new file mode 100644 index 0000000..4f20743 --- /dev/null +++ b/libcodec2-android/src/codec2/unittest/t_helpers.c @@ -0,0 +1,38 @@ +#include +#include +#include +#include + +#include "t_helpers.h" + +void test(char * tfn) +{ + fn = tfn; + printf("========================================\n"); + printf("test function: %s\n", fn); + printf("========================================\n"); +} + +void test_failed() +{ + printf("Failed to calculate %s.\n", fn); + exit(1); +} + +void test_failed_s(char * expected, char * res) +{ + + printf("Failed to calculate %s.\n", fn); + + printf("expected: %s\ngot: %s\n", expected, res); + exit(1); +} + +void test_failed_f(float expected, float res) +{ + + printf("Failed to calculate %s.\n", fn); + printf("expected: %f\ngot: %f\n", expected, res); + exit(1); +} + diff --git a/libcodec2-android/src/codec2/unittest/t_helpers.h b/libcodec2-android/src/codec2/unittest/t_helpers.h new file mode 100644 index 0000000..2dfcbef --- /dev/null +++ b/libcodec2-android/src/codec2/unittest/t_helpers.h @@ -0,0 +1,41 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: t_helpers.c + AUTHOR......: Phil Ayres + DATE CREATED: July 2017 + + * Simple helper functions for unit tests + * +\*---------------------------------------------------------------------------*/ + +/* + Copyright David Rowe 2017 + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . + + */ + +#ifndef T_HELPERS_H +#define T_HELPERS_H + +void test(char * tfn); +void test_failed(); +void test_failed_s(char * expected, char * res); +void test_failed_f(float expected, float res); + +char *fn; + + +#endif /* T_HELPERS_H */ + diff --git a/libcodec2-android/src/codec2/unittest/tcohpsk.c b/libcodec2-android/src/codec2/unittest/tcohpsk.c new file mode 100644 index 0000000..2bd5d15 --- /dev/null +++ b/libcodec2-android/src/codec2/unittest/tcohpsk.c @@ -0,0 +1,286 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: tcohpsk.c + AUTHOR......: David Rowe + DATE CREATED: March 2015 + + Tests for the C version of the coherent PSK FDM modem. This program + outputs a file of Octave vectors that are loaded and automatically + tested against the Octave version of the modem by the Octave script + tcohpsk.m + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2015 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include +#include +#include +#include + +#include "fdmdv_internal.h" +#include "codec2_fdmdv.h" +#include "codec2_cohpsk.h" +#include "cohpsk_defs.h" +#include "cohpsk_internal.h" +#include "octave.h" +#include "comp_prim.h" +#include "noise_samples.h" + +#define FRAMES 30 /* LOG_FRAMES is #defined in cohpsk_internal.h */ +#define SYNC_FRAMES 12 /* sync state uses up extra log storage as we reprocess several times */ +#define FRAMESL (SYNC_FRAMES*FRAMES) /* worst case is every frame is out of sync */ + +#define FOFF 58.7 +#define DFOFF (-0.5/(float)COHPSK_FS) +#define ESNODB 8 +#define PPM -1500 + +extern float pilots_coh[][PILOTS_NC]; + +int main(int argc, char *argv[]) +{ + struct COHPSK *coh; + int tx_bits[COHPSK_BITS_PER_FRAME]; + COMP tx_symb[NSYMROWPILOT][COHPSK_NC*ND]; + COMP tx_fdm_frame[COHPSK_M*NSYMROWPILOT]; + COMP ch_fdm_frame[COHPSK_M*NSYMROWPILOT]; + //COMP rx_fdm_frame_bb[M*NSYMROWPILOT]; + //COMP ch_symb[NSYMROWPILOT][COHPSK_NC*ND]; + float rx_bits_sd[COHPSK_BITS_PER_FRAME]; + int rx_bits[COHPSK_BITS_PER_FRAME]; + + int tx_bits_log[COHPSK_BITS_PER_FRAME*FRAMES]; + COMP tx_symb_log[NSYMROWPILOT*FRAMES][COHPSK_NC*ND]; + COMP tx_fdm_frame_log[COHPSK_M*NSYMROWPILOT*FRAMES]; + COMP ch_fdm_frame_log[COHPSK_M*NSYMROWPILOT*FRAMES]; + COMP ch_fdm_frame_log_out[(COHPSK_M*NSYMROWPILOT+1)*FRAMES]; + //COMP rx_fdm_frame_bb_log[M*NSYMROWPILOT*FRAMES]; + //COMP ch_symb_log[NSYMROWPILOT*FRAMES][COHPSK_NC*ND]; + COMP ct_symb_ff_log[NSYMROWPILOT*FRAMES][COHPSK_NC*ND]; + float rx_amp_log[NSYMROW*FRAMES][COHPSK_NC*ND]; + float rx_phi_log[NSYMROW*FRAMES][COHPSK_NC*ND]; + COMP rx_symb_log[NSYMROW*FRAMES][COHPSK_NC*ND]; + int rx_bits_log[COHPSK_BITS_PER_FRAME*FRAMES]; + + FILE *fout; + int f, r, c, log_r, log_data_r, noise_r, ff_log_r, i; + double foff; + COMP foff_rect, phase_ch; + + struct FDMDV *fdmdv; + //COMP rx_filt[COHPSK_NC*ND][P+1]; + //int rx_filt_log_col_index = 0; + //float env[NT*P]; + //float __attribute__((unused)) rx_timing; + COMP tx_onesym[COHPSK_NC*ND]; + //COMP rx_onesym[COHPSK_NC*ND]; + //int rx_baseband_log_col_index = 0; + //COMP rx_baseband_log[COHPSK_NC*ND][(M+M/P)*NSYMROWPILOT*FRAMES]; + float f_est_log[FRAMES], sig_rms_log[FRAMES], noise_rms_log[FRAMES]; + int f_est_samples; + + int log_bits; + float EsNo, variance; + COMP scaled_noise; + int reliable_sync_bit; + int ch_fdm_frame_log_index, nin_frame, tmp, nout; + + coh = cohpsk_create(); + fdmdv = coh->fdmdv; + assert(coh != NULL); + cohpsk_set_verbose(coh, 1); + + /* these puppies are used for logging data in the bowels on the modem */ + + coh->rx_baseband_log_col_sz = (COHPSK_M+COHPSK_M/P)*NSYMROWPILOT*FRAMESL; + coh->rx_baseband_log = (COMP *)malloc(sizeof(COMP)*COHPSK_NC*ND*coh->rx_baseband_log_col_sz); + + coh->rx_filt_log_col_sz = (P+1)*NSYMROWPILOT*FRAMESL; + coh->rx_filt_log = (COMP *)malloc(sizeof(COMP)*COHPSK_NC*ND*coh->rx_filt_log_col_sz); + + coh->ch_symb_log_col_sz = COHPSK_NC*ND; + coh->ch_symb_log = (COMP *)malloc(sizeof(COMP)*NSYMROWPILOT*FRAMESL*coh->ch_symb_log_col_sz); + + coh->rx_timing_log = (float*)malloc(sizeof(float)*NSYMROWPILOT*FRAMESL); + + /* init stuff */ + + log_r = log_data_r = noise_r = log_bits = ff_log_r = f_est_samples = 0; + phase_ch.real = 1.0; phase_ch.imag = 0.0; + foff = FOFF; + + /* each carrier has power = 2, total power 2Nc, total symbol rate + NcRs, noise BW B=Fs Es/No = (C/Rs)/(N/B), N = var = + 2NcFs/NcRs(Es/No) = 2Fs/Rs(Es/No) */ + + EsNo = pow(10.0, ESNODB/10.0); + variance = 2.0*COHPSK_FS/(COHPSK_RS*EsNo); + //fprintf(stderr, "doff: %e\n", DFOFF); + + /* Main Loop ---------------------------------------------------------------------*/ + + for(f=0; ftx_filter_memory, + fdmdv->phase_tx, fdmdv->freq, &fdmdv->fbb_phase_tx, fdmdv->fbb_rect); + } + cohpsk_clip(tx_fdm_frame, COHPSK_CLIP, NSYMROWPILOT*COHPSK_M); + + /* --------------------------------------------------------*\ + Channel + \*---------------------------------------------------------*/ + + for(r=0; rframe = f; + + //printf("nin_frame: %d\n", nin_frame); + + assert(ch_fdm_frame_log_index < COHPSK_M*NSYMROWPILOT*FRAMES); + tmp = nin_frame; + cohpsk_demod(coh, rx_bits_sd, &reliable_sync_bit, &ch_fdm_frame_log_out[ch_fdm_frame_log_index], &nin_frame); + for(i=0; isync == 1) { + + for(r=0; rct_symb_ff_buf[r][c]; + } + } + + for(r=0; ramp_[r][c]; + rx_phi_log[log_data_r][c] = coh->phi_[r][c]; + rx_symb_log[log_data_r][c] = coh->rx_symb[r][c]; + } + } + memcpy(&rx_bits_log[COHPSK_BITS_PER_FRAME*log_bits], rx_bits, sizeof(int)*COHPSK_BITS_PER_FRAME); + log_bits++; + f_est_log[f_est_samples] = coh->f_est; + sig_rms_log[f_est_samples] = coh->sig_rms; + noise_rms_log[f_est_samples] = coh->noise_rms; + f_est_samples++;; + } + + assert(log_r <= NSYMROWPILOT*FRAMES); + assert(noise_r <= NSYMROWPILOT*COHPSK_M*FRAMES); + assert(log_data_r <= NSYMROW*FRAMES); + + printf("\r [%d]", f+1); + } + printf("\n"); + + /*---------------------------------------------------------*\ + Dump logs to Octave file for evaluation + by tcohpsk.m Octave script + \*---------------------------------------------------------*/ + + fout = fopen("tcohpsk_out.txt","wt"); + assert(fout != NULL); + fprintf(fout, "# Created by tcohpsk.c\n"); + octave_save_int(fout, "tx_bits_log_c", tx_bits_log, 1, COHPSK_BITS_PER_FRAME*FRAMES); + octave_save_complex(fout, "tx_symb_log_c", (COMP*)tx_symb_log, NSYMROWPILOT*FRAMES, COHPSK_NC*ND, COHPSK_NC*ND); + octave_save_complex(fout, "tx_fdm_frame_log_c", (COMP*)tx_fdm_frame_log, 1, COHPSK_M*NSYMROWPILOT*FRAMES, COHPSK_M*NSYMROWPILOT*FRAMES); + octave_save_complex(fout, "ch_fdm_frame_log_c", (COMP*)ch_fdm_frame_log_out, 1, nout-1, nout-1); + //octave_save_complex(fout, "rx_fdm_frame_bb_log_c", (COMP*)rx_fdm_frame_bb_log, 1, M*NSYMROWPILOT*FRAMES, M*NSYMROWPILOT*FRAMES); + octave_save_complex(fout, "rx_baseband_log_c", (COMP*)coh->rx_baseband_log, COHPSK_NC*ND, coh->rx_baseband_log_col_index, coh->rx_baseband_log_col_sz); + octave_save_complex(fout, "rx_filt_log_c", (COMP*)coh->rx_filt_log, COHPSK_NC*ND, coh->rx_filt_log_col_index, coh->rx_filt_log_col_sz); + octave_save_complex(fout, "ch_symb_log_c", (COMP*)coh->ch_symb_log, coh->ch_symb_log_r, COHPSK_NC*ND, COHPSK_NC*ND); + octave_save_float(fout, "rx_timing_log_c", (float*)coh->rx_timing_log, 1, coh->rx_timing_log_index, coh->rx_timing_log_index); + octave_save_complex(fout, "ct_symb_ff_log_c", (COMP*)ct_symb_ff_log, NSYMROWPILOT*FRAMES, COHPSK_NC*ND, COHPSK_NC*ND); + octave_save_float(fout, "rx_amp_log_c", (float*)rx_amp_log, log_data_r, COHPSK_NC*ND, COHPSK_NC*ND); + octave_save_float(fout, "rx_phi_log_c", (float*)rx_phi_log, log_data_r, COHPSK_NC*ND, COHPSK_NC*ND); + octave_save_complex(fout, "rx_symb_log_c", (COMP*)rx_symb_log, log_data_r, COHPSK_NC*ND, COHPSK_NC*ND); + octave_save_int(fout, "rx_bits_log_c", rx_bits_log, 1, COHPSK_BITS_PER_FRAME*log_bits); + octave_save_float(fout, "f_est_log_c", &f_est_log[1], 1, f_est_samples-1, f_est_samples-1); + octave_save_float(fout, "sig_rms_log_c", sig_rms_log, 1, f_est_samples, f_est_samples-1); + octave_save_float(fout, "noise_rms_log_c", noise_rms_log, 1, f_est_samples, f_est_samples); +#ifdef XX +#endif + fclose(fout); + + cohpsk_destroy(coh); + + return 0; +} + diff --git a/libcodec2-android/src/codec2/unittest/tcontphase.c b/libcodec2-android/src/codec2/unittest/tcontphase.c new file mode 100644 index 0000000..0e42d82 --- /dev/null +++ b/libcodec2-android/src/codec2/unittest/tcontphase.c @@ -0,0 +1,186 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: tcontphase.c + AUTHOR......: David Rowe + DATE CREATED: 11/9/09 + + Test program for developing continuous phase track synthesis algorithm. + However while developing this it was discovered that synthesis_mixed() + worked just as well. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2009 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#define N 80 /* frame size */ +#define F 160 /* frames to synthesis */ +#define P 10 /* LPC order */ + +#include +#include +#include +#include +#include "sine.h" +#include "dump.h" +#include "synth.h" +#include "phase.h" + +int frames; + +float ak[] = { + 1.000000, +-1.455836, + 1.361841, +-0.879267, + 0.915985, +-1.002202, + 0.944103, +-0.743094, + 1.053356, +-0.817491, + 0.431222 +}; + + +/*---------------------------------------------------------------------------*\ + + switch_present() + + Searches the command line arguments for a "switch". If the switch is + found, returns the command line argument where it ws found, else returns + NULL. + +\*---------------------------------------------------------------------------*/ + +int switch_present(sw,argc,argv) + char sw[]; /* switch in string form */ + int argc; /* number of command line arguments */ + char *argv[]; /* array of command line arguments in string form */ +{ + int i; /* loop variable */ + + for(i=1; i. +*/ + +/* BER of test */ +#define TESTBER 0.01 + +/* Frame count */ +#define FRCNT 1500 + +/* Random bits leading frame */ +#define LRCNT 44 + +#include +#include +#include +#include +#include +#include + +/* The main loop of the test driver */ +int main(int argc,char *argv[]){ + uint8_t * bit_buffer; + uint8_t c2_buffer[10]; + struct freedv_vhf_deframer * fvd; + int i,p,k; + int bitbufferlen; + int fsize; + int ftype; + int first_tol; + + if(argc<2){ + fprintf(stderr,"Usage: %s [A|B]\n",argv[0]); + exit(1); + } + + if(strcmp(argv[1],"A")==0){ + ftype = FREEDV_VHF_FRAME_A; + first_tol = 2; + }else if(strcmp(argv[1],"B")==0){ + ftype = FREEDV_HF_FRAME_B; + first_tol = 5; + }else{ + fprintf(stderr,"Usage: %s [A|B]\n",argv[0]); + exit(1); + } + + srand(1); + golay23_init(); + + /* Set up the deframer */ + fvd = fvhff_create_deframer(ftype,1); + + fsize = fvhff_get_frame_size(fvd); + bitbufferlen = (LRCNT+fsize*FRCNT); + + /* Allocate bit buffer */ + bit_buffer = (uint8_t *) malloc(sizeof(uint8_t)*bitbufferlen); + p = 0; + + /* Fill out front of buffer */ + for(i=0; i>8 )&0xFF; + c2_buffer[0] = (k>>16)&0x7F; + /* Frame the bits */ + fvhff_frame_bits(ftype, &bit_buffer[p+(i*fsize)], c2_buffer,NULL,NULL); + } + + /* Flip bits */ + for(i=0; i>11; + + printf("%d,\t",p); + total_extract++; + if(first_extract==0) + first_extract=p; + } + } + printf("\n"); + float measured_ber = (float)err_count/(float)(23*total_extract); + + printf("First extracted frame %d\n",first_extract); + printf("Extracted %d frames of %d, %f hit rate\n",total_extract,FRCNT,((float)total_extract/(float)FRCNT)); + printf("Bit error rate %f measured from golay code\n",measured_ber); + printf("Bit error rate %f measured by deframer\n",fvd->ber_est); + printf("Bit error rate %f measured by deframer\n",(float)fvd->total_uw_err/(float)fvd->total_uw_bits); + /* Check test condition */ + if(first_extract $results +var=$(cat $results | sed -n "s/.*var: \([0-9..]*\) .*/\1/p") +c2enc 700C ../raw/kristoff.raw /dev/null --var --eq 2> $results +var_eq=$(cat $results | sed -n "s/.*var: \([0-9..]*\) .*/\1/p") +printf "var: %5.2f var_eq: %5.2f\n" $var $var_eq +python -c "import sys; sys.exit(0) if $var_eq<=$var else sys.exit(1)" diff --git a/libcodec2-android/src/codec2/unittest/test_phi0.c b/libcodec2-android/src/codec2/unittest/test_phi0.c new file mode 100644 index 0000000..8063843 --- /dev/null +++ b/libcodec2-android/src/codec2/unittest/test_phi0.c @@ -0,0 +1,78 @@ +/* + FILE...: test_phi0.c + AUTHOR.: Matthew C. Valenti, Rohit Iyer Seshadri, David Rowe, Don Reid + CREATED: Sep 2018 + + Compare new generated phi0 function to what was originally in mpdecode_core.c +*/ + +#include +#include +#include + +#include "phi0.h" + + +/* Original Phi function */ +static float phi0_orig( float x ) { + float z; + + if (x>10) + return( 0 ); + else if (x< 9.08e-5 ) + return( 10 ); + else if (x > 9) + return( 1.6881e-4 ); + /* return( 1.4970e-004 ); */ + else if (x > 8) + return( 4.5887e-4 ); + /* return( 4.0694e-004 ); */ + else if (x > 7) + return( 1.2473e-3 ); + /* return( 1.1062e-003 ); */ + else if (x > 6) + return( 3.3906e-3 ); + /* return( 3.0069e-003 ); */ + else if (x > 5) + return( 9.2168e-3 ); + /* return( 8.1736e-003 ); */ + else { + z = (float) exp(x); + return( (float) log( (z+1)/(z-1) ) ); + } +} + +//////////////////////////////////////////////////// +// Main +int main(void) { + + float xf; + float error; + int errsum = 0; + int errsum2 = 0; + int errcnt = 0; + + for (xf=10.5f; xf>5e-5f; xf = xf * 0.9) { + + float orig = phi0_orig(xf); + float new = phi0(xf); + + error = new - orig; + printf("%10.4f: %10.6f - %10.6f = %10.6f", xf, new, orig, error); + if ((error >= 0.001) && (error >= (orig * 0.1))) printf(" ****"); + printf("\n"); + + errsum += error; + errsum2 += error * error; + errcnt ++; + + } + + printf("Net error %f\n", (double)errsum); + printf("avg error %f\n", (double)errsum/errcnt); + printf("rms error %f\n", (double)sqrt(errsum2/errcnt)); + + return(0); +} + +/* vi:set ts=4 et sts=4: */ diff --git a/libcodec2-android/src/codec2/unittest/tfdmdv.c b/libcodec2-android/src/codec2/unittest/tfdmdv.c new file mode 100644 index 0000000..6806a5d --- /dev/null +++ b/libcodec2-android/src/codec2/unittest/tfdmdv.c @@ -0,0 +1,286 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: tfdmdv.c + AUTHOR......: David Rowe + DATE CREATED: April 16 2012 + + Tests for the C version of the FDMDV modem. This program outputs a + file of Octave vectors that are loaded and automatically tested + against the Octave version of the modem by the Octave script + tfmddv.m + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2012 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include +#include +#include +#include + +#include "fdmdv_internal.h" +#include "codec2_fdmdv.h" +#include "octave.h" + +#define FRAMES 35 +#define CHANNEL_BUF_SIZE (10*M_FAC) + +extern float pilot_coeff[]; + +int main(int argc, char *argv[]) +{ + struct FDMDV *fdmdv; + int tx_bits[FDMDV_BITS_PER_FRAME]; + COMP tx_symbols[FDMDV_NC+1]; + COMP tx_fdm[M_FAC]; + float channel[CHANNEL_BUF_SIZE]; + int channel_count; + COMP rx_fdm[M_FAC+M_FAC/P]; + float foff_coarse; + int nin, next_nin; + COMP rx_fdm_fcorr[M_FAC+M_FAC/P]; + COMP rx_fdm_filter[M_FAC+M_FAC/P]; + COMP rx_filt[NC+1][P+1]; + float rx_timing; + float env[NT*P]; + COMP rx_symbols[FDMDV_NC+1]; + int rx_bits[FDMDV_BITS_PER_FRAME]; + float foff_fine; + int sync_bit, reliable_sync_bit; + + int tx_bits_log[FDMDV_BITS_PER_FRAME*FRAMES]; + COMP tx_symbols_log[(FDMDV_NC+1)*FRAMES]; + COMP tx_fdm_log[M_FAC*FRAMES]; + COMP pilot_baseband1_log[NPILOTBASEBAND*FRAMES]; + COMP pilot_baseband2_log[NPILOTBASEBAND*FRAMES]; + COMP pilot_lpf1_log[NPILOTLPF*FRAMES]; + COMP pilot_lpf2_log[NPILOTLPF*FRAMES]; + COMP S1_log[MPILOTFFT*FRAMES]; + COMP S2_log[MPILOTFFT*FRAMES]; + float foff_coarse_log[FRAMES]; + float foff_log[FRAMES]; + COMP rx_fdm_filter_log[(M_FAC+M_FAC/P)*FRAMES]; + int rx_fdm_filter_log_index; + COMP rx_filt_log[NC+1][(P+1)*FRAMES]; + int rx_filt_log_col_index; + float env_log[NT*P*FRAMES]; + float rx_timing_log[FRAMES]; + COMP rx_symbols_log[FDMDV_NC+1][FRAMES]; + COMP phase_difference_log[FDMDV_NC+1][FRAMES]; + float sig_est_log[FDMDV_NC+1][FRAMES]; + float noise_est_log[FDMDV_NC+1][FRAMES]; + int rx_bits_log[FDMDV_BITS_PER_FRAME*FRAMES]; + float foff_fine_log[FRAMES]; + int sync_bit_log[FRAMES]; + int sync_log[FRAMES]; + int nin_log[FRAMES]; + + FILE *fout; + int f,c,i,j; + + fdmdv = fdmdv_create(FDMDV_NC); + next_nin = M_FAC; + channel_count = 0; + + rx_fdm_filter_log_index = 0; + rx_filt_log_col_index = 0; + + printf("sizeof FDMDV states: %zd bytes\n", sizeof(struct FDMDV)); + + for(f=0; fprev_tx_symbols, tx_bits, &fdmdv->tx_pilot_bit, 0); + memcpy(fdmdv->prev_tx_symbols, tx_symbols, sizeof(COMP)*(FDMDV_NC+1)); + tx_filter_and_upconvert(tx_fdm, FDMDV_NC , tx_symbols, fdmdv->tx_filter_memory, + fdmdv->phase_tx, fdmdv->freq, &fdmdv->fbb_phase_tx, fdmdv->fbb_rect); + + /* --------------------------------------------------------*\ + Channel + \*---------------------------------------------------------*/ + + nin = next_nin; + + // nin = M_FAC; // when debugging good idea to uncomment this to "open loop" + + /* add M_FAC tx samples to end of buffer */ + + assert((channel_count + M_FAC) < CHANNEL_BUF_SIZE); + for(i=0; ifbb_phase_rx, nin); + + /* freq offset estimation and correction */ + + // fdmdv->sync = 0; // when debugging good idea to uncomment this to "open loop" + + foff_coarse = rx_est_freq_offset(fdmdv, rx_fdm, nin, !fdmdv->sync); + + if (fdmdv->sync == 0) + fdmdv->foff = foff_coarse; + fdmdv_freq_shift(rx_fdm_fcorr, rx_fdm, -fdmdv->foff, &fdmdv->foff_phase_rect, nin); + + /* baseband processing */ + + rxdec_filter(rx_fdm_filter, rx_fdm_fcorr, fdmdv->rxdec_lpf_mem, nin); + down_convert_and_rx_filter(rx_filt, fdmdv->Nc, rx_fdm_filter, fdmdv->rx_fdm_mem, fdmdv->phase_rx, fdmdv->freq, + fdmdv->freq_pol, nin, M_FAC/Q); + rx_timing = rx_est_timing(rx_symbols, FDMDV_NC, rx_filt, fdmdv->rx_filter_mem_timing, env, nin, M_FAC); + foff_fine = qpsk_to_bits(rx_bits, &sync_bit, FDMDV_NC, fdmdv->phase_difference, fdmdv->prev_rx_symbols, rx_symbols, 0); + + //for(i=0; iprev_rx_symbols[i].real, fdmdv->prev_rx_symbols[i].imag, fdmdv->phase_difference[i].real, fdmdv->phase_difference[i].imag); + //if (f==1) + // exit(0); + + snr_update(fdmdv->sig_est, fdmdv->noise_est, FDMDV_NC, fdmdv->phase_difference); + memcpy(fdmdv->prev_rx_symbols, rx_symbols, sizeof(COMP)*(FDMDV_NC+1)); + + next_nin = M_FAC; + + if (rx_timing > 2*M_FAC/P) + next_nin += M_FAC/P; + + if (rx_timing < 0) + next_nin -= M_FAC/P; + + fdmdv->sync = freq_state(&reliable_sync_bit, sync_bit, &fdmdv->fest_state, &fdmdv->timer, fdmdv->sync_mem); + fdmdv->foff -= TRACK_COEFF*foff_fine; + + /* --------------------------------------------------------*\ + Log each vector + \*---------------------------------------------------------*/ + + memcpy(&tx_bits_log[FDMDV_BITS_PER_FRAME*f], tx_bits, sizeof(int)*FDMDV_BITS_PER_FRAME); + memcpy(&tx_symbols_log[(FDMDV_NC+1)*f], tx_symbols, sizeof(COMP)*(FDMDV_NC+1)); + memcpy(&tx_fdm_log[M_FAC*f], tx_fdm, sizeof(COMP)*M_FAC); + + memcpy(&pilot_baseband1_log[f*NPILOTBASEBAND], fdmdv->pilot_baseband1, sizeof(COMP)*NPILOTBASEBAND); + memcpy(&pilot_baseband2_log[f*NPILOTBASEBAND], fdmdv->pilot_baseband2, sizeof(COMP)*NPILOTBASEBAND); + memcpy(&pilot_lpf1_log[f*NPILOTLPF], fdmdv->pilot_lpf1, sizeof(COMP)*NPILOTLPF); + memcpy(&pilot_lpf2_log[f*NPILOTLPF], fdmdv->pilot_lpf2, sizeof(COMP)*NPILOTLPF); + memcpy(&S1_log[f*MPILOTFFT], fdmdv->S1, sizeof(COMP)*MPILOTFFT); + memcpy(&S2_log[f*MPILOTFFT], fdmdv->S2, sizeof(COMP)*MPILOTFFT); + foff_coarse_log[f] = foff_coarse; + foff_log[f] = fdmdv->foff; + + /* rx filtering */ + + for(i=0; iphase_difference[c]; + } + + /* qpsk_to_bits() */ + + memcpy(&rx_bits_log[FDMDV_BITS_PER_FRAME*f], rx_bits, sizeof(int)*FDMDV_BITS_PER_FRAME); + for(c=0; csig_est[c]; + noise_est_log[c][f] = fdmdv->noise_est[c]; + } + foff_fine_log[f] = foff_fine; + sync_bit_log[f] = sync_bit; + + sync_log[f] = fdmdv->sync; + } + + + /*---------------------------------------------------------*\ + Dump logs to Octave file for evaluation + by tfdmdv.m Octave script + \*---------------------------------------------------------*/ + + fout = fopen("tfdmdv_out.txt","wt"); + assert(fout != NULL); + fprintf(fout, "# Created by tfdmdv.c\n"); + octave_save_int(fout, "tx_bits_log_c", tx_bits_log, 1, FDMDV_BITS_PER_FRAME*FRAMES); + octave_save_complex(fout, "tx_symbols_log_c", tx_symbols_log, 1, (FDMDV_NC+1)*FRAMES, (FDMDV_NC+1)*FRAMES); + octave_save_complex(fout, "tx_fdm_log_c", (COMP*)tx_fdm_log, 1, M_FAC*FRAMES, M_FAC*FRAMES); + octave_save_complex(fout, "pilot_lut_c", (COMP*)fdmdv->pilot_lut, 1, NPILOT_LUT, NPILOT_LUT); + octave_save_complex(fout, "pilot_baseband1_log_c", pilot_baseband1_log, 1, NPILOTBASEBAND*FRAMES, NPILOTBASEBAND*FRAMES); + octave_save_complex(fout, "pilot_baseband2_log_c", pilot_baseband2_log, 1, NPILOTBASEBAND*FRAMES, NPILOTBASEBAND*FRAMES); + octave_save_float(fout, "pilot_coeff_c", pilot_coeff, 1, NPILOTCOEFF, NPILOTCOEFF); + octave_save_complex(fout, "pilot_lpf1_log_c", pilot_lpf1_log, 1, NPILOTLPF*FRAMES, NPILOTLPF*FRAMES); + octave_save_complex(fout, "pilot_lpf2_log_c", pilot_lpf2_log, 1, NPILOTLPF*FRAMES, NPILOTLPF*FRAMES); + octave_save_complex(fout, "S1_log_c", S1_log, 1, MPILOTFFT*FRAMES, MPILOTFFT*FRAMES); + octave_save_complex(fout, "S2_log_c", S2_log, 1, MPILOTFFT*FRAMES, MPILOTFFT*FRAMES); + octave_save_float(fout, "foff_log_c", foff_log, 1, FRAMES, FRAMES); + octave_save_float(fout, "foff_coarse_log_c", foff_coarse_log, 1, FRAMES, FRAMES); + octave_save_complex(fout, "rx_fdm_filter_log_c", (COMP*)rx_fdm_filter_log, 1, rx_fdm_filter_log_index, rx_fdm_filter_log_index); + octave_save_complex(fout, "rx_filt_log_c", (COMP*)rx_filt_log, (FDMDV_NC+1), rx_filt_log_col_index, (P+1)*FRAMES); + octave_save_float(fout, "env_log_c", env_log, 1, NT*P*FRAMES, NT*P*FRAMES); + octave_save_float(fout, "rx_timing_log_c", rx_timing_log, 1, FRAMES, FRAMES); + octave_save_complex(fout, "rx_symbols_log_c", (COMP*)rx_symbols_log, (FDMDV_NC+1), FRAMES, FRAMES); + octave_save_complex(fout, "phase_difference_log_c", (COMP*)phase_difference_log, (FDMDV_NC+1), FRAMES, FRAMES); + octave_save_float(fout, "sig_est_log_c", (float*)sig_est_log, (FDMDV_NC+1), FRAMES, FRAMES); + octave_save_float(fout, "noise_est_log_c", (float*)noise_est_log, (FDMDV_NC+1), FRAMES, FRAMES); + octave_save_int(fout, "rx_bits_log_c", rx_bits_log, 1, FDMDV_BITS_PER_FRAME*FRAMES); + octave_save_float(fout, "foff_fine_log_c", foff_fine_log, 1, FRAMES, FRAMES); + octave_save_int(fout, "sync_bit_log_c", sync_bit_log, 1, FRAMES); + octave_save_int(fout, "sync_log_c", sync_log, 1, FRAMES); + octave_save_int(fout, "nin_log_c", nin_log, 1, FRAMES); + fclose(fout); + + fdmdv_destroy(fdmdv); + + return 0; +} + diff --git a/libcodec2-android/src/codec2/unittest/tfifo.c b/libcodec2-android/src/codec2/unittest/tfifo.c new file mode 100644 index 0000000..0987db6 --- /dev/null +++ b/libcodec2-android/src/codec2/unittest/tfifo.c @@ -0,0 +1,106 @@ +/* + tfifo.c + David Rowe + Nov 19 2012 + + Tests FIFOs, in particular thread safety. +*/ + +#include +#include +#include +#include "codec2_fifo.h" + +#define FIFO_SZ 1024 +#define WRITE_SZ 10 +#define READ_SZ 8 +#define N_MAX 100 +#define LOOPS 1000000 + +int run_thread = 1; +struct FIFO *f; + +void writer(void); +void *writer_thread(void *data); +pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; + +#define USE_THREADS +//#define USE_MUTEX + +int main() { + pthread_t awriter_thread; + int i,j; + short read_buf[READ_SZ]; + int n_out = 0; + int success; + + f = codec2_fifo_create(FIFO_SZ); + #ifdef USE_THREADS + pthread_create(&awriter_thread, NULL, writer_thread, NULL); + #endif + + for(i=0; i WRITE_SZ) { + for(i=0; i. +*/ + + +//#define MODEMPROBE_ENABLE + +#include "modem_probe.h" +#include + +/* Note: This is a dirty hack to force fsk.c to compile with modem probing enabled */ +#include "fmfsk.c" + +#define ST_BITS 10000 +#define ST_FS 48000 +#define ST_RS 2400 +#define ST_EBNO 8 + +#define TEST_SELF_FULL 1 /* No-arg self test */ +#define TEST_MOD 2 /* Test modulator using in and out file */ +#define TEST_DEMOD 3 /* Test demodulator using in and out file */ + + +int main(int argc,char *argv[]){ + struct FMFSK *fmfsk; + int Fs,Rs; + FILE *fin,*fout; + + uint8_t *bitbuf = NULL; + float *modbuf = NULL; + uint8_t *bitbufp; + float *modbufp; + + size_t bitbufsize = 0; + size_t modbufsize = 0; + + int test_type; + + int i; + + fin = NULL; + fout = NULL; + + /* Set up full self-test */ + if(argc == 1){ + test_type = TEST_SELF_FULL; + modem_probe_init("fmfsk","fmfsk_tfmfsk_log.txt"); + Fs = ST_FS; + Rs = ST_RS; + } else if (argc<7){ + /* Not running any test */ + printf("Usage: %s [(M|D) SampleRate BitRate InputFile OutputFile OctaveLogFile]\n",argv[0]); + exit(1); + } else { + /* Running stim-drivin test */ + /* Mod test */ + if(strcmp(argv[1],"M")==0 || strcmp(argv[1],"m")==0) { + test_type = TEST_MOD; + /* Demod test */ + } else if(strcmp(argv[1],"D")==0 || strcmp(argv[1],"d")==0) { + test_type = TEST_DEMOD; + } else { + printf("Must specify mod or demod test with M or D\n"); + exit(1); + } + /* Extract parameters */ + Fs = atoi(argv[2]); + Rs = atoi(argv[3]); + + /* Open files */ + fin = fopen(argv[4],"r"); + fout = fopen(argv[5],"w"); + + if(fin == NULL || fout == NULL){ + printf("Couldn't open test vector files\n"); + exit(1); + } + /* Init modem probing */ + modem_probe_init("fmfsk",argv[6]); + + } + + srand(1); + + /* set up FSK */ + fmfsk = fmfsk_create(Fs,Rs); + /* Modulate! */ + if(test_type == TEST_MOD || test_type == TEST_SELF_FULL){ + /* Generate random bits for self test */ + if(test_type == TEST_SELF_FULL){ + bitbufsize = ST_BITS; + bitbuf = (uint8_t*) malloc(sizeof(uint8_t)*ST_BITS); + for(i=0; inbit,fin) == fmfsk->nbit){ + i++; + bitbufp+=fmfsk->nbit; + /* Make sure we don't break the buffer */ + if(i*fmfsk->nbit > bitbufsize){ + bitbuf = realloc(bitbuf,sizeof(uint8_t)*(bitbufsize+fmfsk->nbit)); + bitbufsize += fmfsk->nbit; + } + } + } + /* Allocate modulation buffer */ + modbuf = (float*)malloc(sizeof(float)*(bitbufsize/fmfsk->nbit)*fmfsk->N*4); + modbufsize = (bitbufsize/fmfsk->nbit)*fmfsk->N; + /* Do the modulation */ + modbufp = modbuf; + bitbufp = bitbuf; + while( bitbufp < bitbuf+bitbufsize){ + fmfsk_mod(fmfsk, modbufp, bitbufp); + modbufp += fmfsk->N; + bitbufp += fmfsk->nbit; + } + /* For a mod-only test, write out the result */ + if(test_type == TEST_MOD){ + fwrite(modbuf,sizeof(float),modbufsize,fout); + free(modbuf); + } + /* Free bit buffer */ + free(bitbuf); + } + + /* Add channel imp here */ + + + /* Now test the demod */ + if(test_type == TEST_DEMOD || test_type == TEST_SELF_FULL){ + free(modbuf); + modbuf = malloc(sizeof(float)*(fmfsk->N+fmfsk->Ts*2)); + bitbuf = malloc(sizeof(uint8_t)*fmfsk->nbit); + /* Demod-only test */ + if(test_type == TEST_DEMOD){ + + //fprintf(stderr,"%d\n",(fmfsk->N+fmfsk->Ts*2)); + while( fread(modbuf,sizeof(float),fmfsk_nin(fmfsk),fin) == fmfsk_nin(fmfsk) ){ + fmfsk_demod(fmfsk,bitbuf,modbuf); + fwrite(bitbuf,sizeof(uint8_t),fmfsk->nbit,fout); + } + } + /* Demod after channel imp. and mod */ + else{ + bitbufp = bitbuf; + modbufp = modbuf; + while( modbufp < modbuf + modbufsize){ + fmfsk_demod(fmfsk,bitbuf,modbuf); + modbufp += fmfsk_nin(fmfsk); + } + } + free(bitbuf); + } + + modem_probe_close(); + if(test_type == TEST_DEMOD || test_type == TEST_MOD){ + fclose(fin); + fclose(fout); + } + fmfsk_destroy(fmfsk); + exit(0); +} + diff --git a/libcodec2-android/src/codec2/unittest/tfreedv_2400A_rawdata.c b/libcodec2-android/src/codec2/unittest/tfreedv_2400A_rawdata.c new file mode 100644 index 0000000..ed65501 --- /dev/null +++ b/libcodec2-android/src/codec2/unittest/tfreedv_2400A_rawdata.c @@ -0,0 +1,114 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: tfreedv_2400A_rawdata.c + AUTHOR......: Jeroen Vreeken + DATE CREATED: 24 May 2020 + + FreeDV 2400A rawdata test. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2020 Jeroen Vreeken + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include "freedv_api.h" +#include "assert.h" + +int main(int argc, char **argv) +{ + struct freedv *f; + int i; + + printf("freedv_api tests for mode 2400A\n"); + + printf("freedv_open(FREEDV_MODE_2400A) "); + f = freedv_open(FREEDV_MODE_2400A); + assert(f != NULL); + printf("Passed\n"); + + printf("freedv_get_mode() "); + int mode = freedv_get_mode(f); + assert(mode == FREEDV_MODE_2400A); + printf("Passed\n"); + + printf("freedv_get_n_max_modem_samples() "); + int max_samples = freedv_get_n_max_modem_samples(f); + assert(max_samples == 2040); + printf("%d Passed\n", max_samples); + + printf("freedv_get_n_nom_modem_samples() "); + int nom_samples = freedv_get_n_nom_modem_samples(f); + assert(nom_samples == 2000); + printf("%d Passed\n", nom_samples); + + printf("freedv_get_n_speech_samples() "); + int speech_samples = freedv_get_n_speech_samples(f); + assert(speech_samples == 320); + printf("%d Passed\n", speech_samples); + + printf("freedv_get_n_bits_per_codec_frame() "); + int codec_bits = freedv_get_bits_per_codec_frame(f); + assert(codec_bits == 52); + printf("%d Passed\n", codec_bits); + + printf("freedv_get_n_bits_per_modem_frame() "); + int frame_bits = freedv_get_bits_per_modem_frame(f); + assert(frame_bits == 52); + printf("%d Passed\n", frame_bits); + + printf("freedv_rawdatatx()/freedv_rawdatarx() "); + int frames = 0; + int fails = 0; + { + short mod[nom_samples * 10]; + /* Note: A codec frame is only 6.5 bytes! + so the seventh byte will be half empty! + */ + unsigned char payload[7] = { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x70 }; + for (i = 0; i < 10; i ++) { + freedv_rawdatatx(f, mod + i * nom_samples, payload); + } + int nin = 0; + for (i = 0; i < nom_samples * 9; i += nin) { + nin = freedv_nin(f); + unsigned char payload_rx[7] = {0}; + int r = freedv_rawdatarx(f, payload_rx, mod + i); + if (r) { + int b; + for (b = 0; b < 7; b++) { + if (payload[b] != payload_rx[b]) { + printf("Received codec bits 0x%02x do not match expected 0x%02x\n", payload_rx[b], payload[b]); + fails++; + } + } + frames++; + } + } + } + if (!frames) { + printf("Did not decode any frames successfully\n"); + goto fail; + } + + printf("Tests passed\n"); + return 0; +fail: + printf("Test failed\n"); + return 1; +} diff --git a/libcodec2-android/src/codec2/unittest/tfreedv_2400B_rawdata.c b/libcodec2-android/src/codec2/unittest/tfreedv_2400B_rawdata.c new file mode 100644 index 0000000..888ba83 --- /dev/null +++ b/libcodec2-android/src/codec2/unittest/tfreedv_2400B_rawdata.c @@ -0,0 +1,114 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: tfreedv_2400B_rawdata.c + AUTHOR......: Jeroen Vreeken + DATE CREATED: 24 May 2020 + + FreeDV 2400B rawdata test. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2020 Jeroen Vreeken + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include "freedv_api.h" +#include "assert.h" + +int main(int argc, char **argv) +{ + struct freedv *f; + int i; + + printf("freedv_api tests for mode 2400B\n"); + + printf("freedv_open(FREEDV_MODE_2400B) "); + f = freedv_open(FREEDV_MODE_2400B); + assert(f != NULL); + printf("Passed\n"); + + printf("freedv_get_mode() "); + int mode = freedv_get_mode(f); + assert(mode == FREEDV_MODE_2400B); + printf("Passed\n"); + + printf("freedv_get_n_max_modem_samples() "); + int max_samples = freedv_get_n_max_modem_samples(f); + assert(max_samples == 1930); + printf("%d Passed\n", max_samples); + + printf("freedv_get_n_nom_modem_samples() "); + int nom_samples = freedv_get_n_nom_modem_samples(f); + assert(nom_samples == 1920); + printf("%d Passed\n", nom_samples); + + printf("freedv_get_n_speech_samples() "); + int speech_samples = freedv_get_n_speech_samples(f); + assert(speech_samples == 320); + printf("%d Passed\n", speech_samples); + + printf("freedv_get_n_bits_per_codec_frame() "); + int codec_bits = freedv_get_bits_per_codec_frame(f); + assert(codec_bits == 52); + printf("%d Passed\n", codec_bits); + + printf("freedv_get_n_bits_per_modem_frame() "); + int frame_bits = freedv_get_bits_per_modem_frame(f); + assert(frame_bits == 52); + printf("%d Passed\n", frame_bits); + + printf("freedv_rawdatatx()/freedv_rawdatarx() "); + int frames = 0; + int fails = 0; + { + short mod[nom_samples * 10]; + /* Note: A codec frame is only 6.5 bytes! + so the seventh byte will be half empty! + */ + unsigned char payload[7] = { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x70 }; + for (i = 0; i < 10; i ++) { + freedv_rawdatatx(f, mod + i * nom_samples, payload); + } + int nin = 0; + for (i = 0; i < nom_samples * 9; i += nin) { + nin = freedv_nin(f); + unsigned char payload_rx[7] = {0}; + int r = freedv_rawdatarx(f, payload_rx, mod + i); + if (r) { + int b; + for (b = 0; b < 7; b++) { + if (payload[b] != payload_rx[b]) { + printf("Received codec bits 0x%02x do not match expected 0x%02x\n", payload_rx[b], payload[b]); + fails++; + } + } + frames++; + } + } + } + if (!frames) { + printf("Did not decode any frames successfully\n"); + goto fail; + } + + printf("Tests passed\n"); + return 0; +fail: + printf("Test failed\n"); + return 1; +} diff --git a/libcodec2-android/src/codec2/unittest/tfreedv_800XA_rawdata.c b/libcodec2-android/src/codec2/unittest/tfreedv_800XA_rawdata.c new file mode 100644 index 0000000..2cf9bb7 --- /dev/null +++ b/libcodec2-android/src/codec2/unittest/tfreedv_800XA_rawdata.c @@ -0,0 +1,147 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: tfreedv_800XA_rawdata.c + AUTHOR......: Jeroen Vreeken + DATE CREATED: 24 May 2020 + + FreeDV 800XA rawdata test. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2020 Jeroen Vreeken + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include "freedv_api.h" +#include "assert.h" + +int main(int argc, char **argv) +{ + struct freedv *f; + int i; + + printf("freedv_api tests for mode 800XA\n"); + + printf("freedv_open(FREEDV_MODE_800XA) "); + f = freedv_open(FREEDV_MODE_800XA); + assert(f != NULL); + printf("Passed\n"); + + printf("freedv_get_mode() "); + int mode = freedv_get_mode(f); + assert(mode == FREEDV_MODE_800XA); + printf("Passed\n"); + + printf("freedv_get_n_max_modem_samples() "); + int max_samples = freedv_get_n_max_modem_samples(f); + assert(max_samples == 660); + printf("%d Passed\n", max_samples); + + printf("freedv_get_n_nom_modem_samples() "); + int nom_samples = freedv_get_n_nom_modem_samples(f); + assert(nom_samples == 640); + printf("%d Passed\n", nom_samples); + + printf("freedv_get_n_speech_samples() "); + int speech_samples = freedv_get_n_speech_samples(f); + assert(speech_samples == 640); + printf("%d Passed\n", speech_samples); + + printf("freedv_get_n_bits_per_codec_frame() "); + int codec_bits = freedv_get_bits_per_codec_frame(f); + assert(codec_bits == 28); + printf("%d Passed\n", codec_bits); + + printf("freedv_get_n_bits_per_modem_frame() "); + int frame_bits = freedv_get_bits_per_modem_frame(f); + assert(frame_bits == 56); + printf("%d Passed\n", frame_bits); + + /* Note: A codec frame is only 3.5 bytes! + so the fourth and eight bytes will be half empty! + */ + unsigned char payload[8] = { 0x12, 0x34, 0x56, 0x70, 0x89, 0xab, 0xcd, 0xe0 }; + unsigned char payload_tx[7] = { 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde }; + + printf("freedv_codec_frames_from_rawdata() "); + unsigned char codec_frames[8] = { 0 }; + freedv_codec_frames_from_rawdata(f, codec_frames, payload_tx); + int fails = 0; + for (i = 0; i < 8; i++) { + if (codec_frames[i] != payload[i]) { + printf("byte %d: 0x%02x does not match expected 0x%02x\n", i, codec_frames[i], payload[i]); + fails++; + } + } + if (fails) + goto fail; + printf("Passed\n"); + + printf("freedv_rawdata_from_codec_frames() "); + unsigned char rawdata[7] = { 0 }; + freedv_rawdata_from_codec_frames(f, rawdata, payload); + fails = 0; + for (i = 0; i < 7; i++) { + if (rawdata[i] != payload_tx[i]) { + printf("byte %d: 0x%02x does not match expected 0x%02x\n", i, rawdata[i], payload_tx[i]); + fails++; + } + } + if (fails) + goto fail; + printf("Passed\n"); + + printf("freedv_rawdatatx()/freedv_rawdatarx() "); + int frames = 0; + fails = 0; + { + short mod[nom_samples * 10]; + for (i = 0; i < 10; i ++) { + freedv_rawdatatx(f, mod + i * nom_samples, payload_tx); + } + int nin = 0; + for (i = 0; i < nom_samples * 9; i += nin) { + nin = freedv_nin(f); + unsigned char payload_rx[8] = {0}; + int r = freedv_rawdatarx(f, payload_rx, mod + i); + if (r == 7) { + int b; + for (b = 0; b < 7; b++) { + if (payload_tx[b] != payload_rx[b]) { + printf("Received codec bits 0x%02x do not match expected 0x%02x\n", payload_rx[b], payload_tx[b]); + fails++; + } + } + frames++; + } + } + } + if (!frames) { + printf("Did not decode any frames successfully\n"); + goto fail; + } + if (fails) + goto fail; + printf("Passed\n"); + + printf("Tests passed\n"); + return 0; +fail: + printf("Test failed\n"); + return 1; +} diff --git a/libcodec2-android/src/codec2/unittest/tfreedv_data_channel.c b/libcodec2-android/src/codec2/unittest/tfreedv_data_channel.c new file mode 100644 index 0000000..ef713eb --- /dev/null +++ b/libcodec2-android/src/codec2/unittest/tfreedv_data_channel.c @@ -0,0 +1,315 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: tfreedv_data_channel + AUTHOR......: Jeroen Vreeken + DATE CREATED: May 3 2016 + + Tests for the data channel code. + Data channel frame behaviour is tested with test vectors. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2016 Jeroen Vreeken + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include "freedv_data_channel.h" + +#include +#include + +unsigned char test_header[] = { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66 }; +unsigned char bcast_header[] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; + + +struct testvec { + char *testname; + + unsigned char *data; + size_t data_size; + + size_t frame_size; + + unsigned char *frame_data; + size_t frame_data_size; + + unsigned char *flags; +} testvec[] = { + { + "Regular packet, does not match header and no broadcast", + (unsigned char[]){ + 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, + 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, + 0x11, 0x12 + }, + 0x12, + 8, + (unsigned char[]){ + 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x01, 0x02, + 0x03, 0x04, 0x05, 0x06, 0x0d, 0x0e, 0x0f, 0x10, + 0x11, 0x12, 0x47, 0x6e + }, + 0x14, + (unsigned char[]){ 0x00, 0x00, 0x04 }, + }, + { + "Header", + NULL, + 0, + 8, + (unsigned char[]){ 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x5a, 0x60 }, + 0x08, + (unsigned char[]){ 0x08 }, + }, + { + "Broadcast packet", + (unsigned char[]){ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x11, 0x22, + 0x33, 0x44, 0x55, 0x66, 0x05, 0x06, 0x07, 0x08, + 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, + 0x11 + }, + 0x19, + 8, + (unsigned char[]){ + 0x05, 0x06, 0x07, 0x08, + 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, + 0x11, 0x3c, 0xbe + }, + 0x0f, + (unsigned char[]){ 0xc0, 0x07 }, + }, + { + "Broadcast packet, header does not match", + (unsigned char[]){ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaa, 0x22, + 0xbb, 0xcc, 0xdd, 0xee, 0x05, 0x06, 0x07, 0x08, + 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, + 0x11 + }, + 0x19, + 8, + (unsigned char[]){ + 0xaa, 0x22, + 0xbb, 0xcc, 0xdd, 0xee, 0x05, 0x06, 0x07, 0x08, + 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, + 0x11, 0x1a, 0x68 + }, + 0x15, + (unsigned char[]){ 0x40, 0x00, 0x05 }, + }, + { + "Header 6 bytes", + NULL, + 0, + 6, + (unsigned char[]){ 0x11, 0x22, 0x33, 0x44, 0x55, 0x66 }, + 0x06, + (unsigned char[]){ 0x2f }, + }, + { + "Broadcast packet (6 byte frames)", + (unsigned char[]){ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x11, 0x22, + 0x33, 0x44, 0x55, 0x66, 0x05, 0x06, 0x07, 0x08, + 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, + 0x11 + }, + 0x19, + 6, + (unsigned char[]){ + 0x05, 0x06, 0x07, 0x08, + 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, + 0x11, 0x3c, 0xbe + }, + 0x0f, + (unsigned char[]){ 0xc0, 0x00, 0x03 }, + }, + { + "Broadcast packet, header does not match (6 byte frames)", + (unsigned char[]){ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaa, 0x22, + 0xbb, 0xcc, 0xdd, 0xee, 0x05, 0x06, 0x07, 0x08, + 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, + 0x11 + }, + 0x19, + 6, + (unsigned char[]){ + 0xaa, 0x22, + 0xbb, 0xcc, 0xdd, 0xee, 0x05, 0x06, 0x07, 0x08, + 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, + 0x11, 0x1a, 0x68 + }, + 0x15, + (unsigned char[]){ 0x40, 0x00, 0x00, 0x03 }, + }, +}; + + +static int ret = 0; +static int vector = 0; +static size_t frame_data_pos = 0; +static int rx_done = 0; + +void *tx_cb_arg = (void*)0xaa55; +void *rx_cb_arg = (void*)0xbb44; + +void tfreedv_data_callback_tx(void *arg, unsigned char *packet, size_t *size) +{ + if (tx_cb_arg != arg) { + ret++; + printf("FAIL: %s called with wrong argument value\n", __func__); + } + printf("--------------------------------------\n"); + printf("TX callback called for test %zd bytes data for test %d:\n'%s'\n", + testvec[vector].data_size, vector, + testvec[vector].testname); + + memcpy(packet, testvec[vector].data, testvec[vector].data_size); + *size = testvec[vector].data_size; + + return; +} + +void tfreedv_data_callback_rx(void *arg, unsigned char *packet, size_t size) +{ + if (rx_cb_arg != arg) { + ret++; + printf("FAIL: %s called with wrong argument value\n", __func__); + } + printf("RX callback called with %zd bytes\n", size); + + if (testvec[vector].data_size) { + size_t data_size = testvec[vector].data_size; + if (data_size != size) { + printf("FAIL: Received size does not match test vector: %zd != %zd\n", + size, data_size); + ret++; + } else { + size_t i; + for (i = 0; i < data_size; i++) { + if (packet[i] != testvec[vector].data[i]) { + printf("FAIL: byte %zd does not match 0x%02x != 0x%02x\n", + i, packet[i], testvec[vector].data[i]); + ret++; + } + } + } + } else { + if (size != 12) { + printf("FAIL: Received header is not 12 bytes: %zd\n", size); + ret++; + } else { + if (memcmp(packet, bcast_header, 6)) { + printf("FAIL: Header is not a broadcast!\n"); + ret++; + } + if (memcmp(packet+6, test_header, 6)) { + printf("FAIL: Header does not match!\n"); + ret++; + } + } + } + + rx_done = 1; +} + +int main(int argc, char **argv) +{ + struct freedv_data_channel *fdc; + + fdc = freedv_data_channel_create(); + + freedv_data_set_header(fdc, test_header); + freedv_data_set_cb_tx(fdc, tfreedv_data_callback_tx, tx_cb_arg); + freedv_data_set_cb_rx(fdc, tfreedv_data_callback_rx, rx_cb_arg); + + while (vector < sizeof(testvec)/sizeof(struct testvec)) { + size_t frame_size = testvec[vector].frame_size; + unsigned char frame[frame_size]; + int from, bcast, crc, end; + int i; + size_t check_size; + unsigned char flags; + int nr_frames; + + freedv_data_channel_tx_frame(fdc, frame, frame_size, &from, &bcast, &crc, &end); + + check_size = frame_size; + if (frame_data_pos + check_size > testvec[vector].frame_data_size) + check_size = testvec[vector].frame_data_size - frame_data_pos; + + flags = from * 0x80 + bcast * 0x40 + crc * 0x20 + end; + printf("0x%02x:", flags); + for (i = 0; i < check_size; i++) { + if (frame[i] != testvec[vector].frame_data[frame_data_pos + i]) { + printf(" [0x%02x!=0x%02x]", + frame[i], testvec[vector].frame_data[frame_data_pos + i]); + ret++; + } else { + printf(" 0x%02x", frame[i]); + } + } + printf("\n"); + + if (flags != testvec[vector].flags[frame_data_pos / frame_size]) { + printf("FAIL: Flags byte does not match 0x%02x != 0x%02x\n", + flags, testvec[vector].flags[frame_data_pos / frame_size]); + ret++; + } + + freedv_data_channel_rx_frame(fdc, frame, frame_size, from, bcast, crc, end); + + frame_data_pos += frame_size; + + nr_frames = freedv_data_get_n_tx_frames(fdc, frame_size); + + if (frame_data_pos >= testvec[vector].frame_data_size) { + if (nr_frames) { + printf("FAIL: nr_frames is not zero: %d\n", nr_frames); + ret++; + } + vector++; + frame_data_pos = 0; + if (!rx_done) { + printf("FAIL: RX callback not executed\n"); + ret++; + } + rx_done = 0; + } else { + int vec_frames = (testvec[vector].frame_data_size - frame_data_pos); + vec_frames /= frame_size; + vec_frames++; + if (nr_frames != vec_frames) { + printf("FAIL: nr_frames != vec_frames: %d != %d\n", nr_frames, vec_frames); + ret++; + } + } + } + + freedv_data_channel_destroy(fdc); + + printf("--------------------------------------\n"); + printf("tfreedv_data_channel test result: "); + if (ret) { + printf("Failed %d\n", ret); + } else { + printf("Passed\n"); + } + + return ret; +} diff --git a/libcodec2-android/src/codec2/unittest/tfsk.c b/libcodec2-android/src/codec2/unittest/tfsk.c new file mode 100644 index 0000000..35aa970 --- /dev/null +++ b/libcodec2-android/src/codec2/unittest/tfsk.c @@ -0,0 +1,232 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: tfsk.c + AUTHOR......: Brady O'Brien + DATE CREATED: 20 January 2016 + + C test driver for fsk_mod and fsk_demod in fsk.c. Reads a file with input + bits/rf and spits out modulated/demoduladed samples and a dump of internal + state. To run unit test, see octave/tfsk.m + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2016 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + + +//#define MODEMPROBE_ENABLE + +#include "modem_probe.h" +#include + +/* Note: This is a dirty hack to force fsk.c to compile with modem probing enabled */ +#include "fsk.c" + +#define ST_BITS 10000 +#define ST_FS 8000 +#define ST_RS 100 +#define ST_F1 1200 +#define ST_Fs 400 +#define ST_EBNO 8 +#define ST_M 2 + +#define TEST_SELF_FULL 1 /* No-arg self test */ +#define TEST_MOD 2 /* Test modulator using in and out file */ +#define TEST_MOD_H 3 /* Test modulator using in and out file */ +#define TEST_DEMOD 4 /* Test demodulator using in and out file */ +#define TEST_DEMOD_H 5 /* Test demodulator using in and out file */ + + +int main(int argc,char *argv[]){ + struct FSK *fsk; + int Fs,Rs,f1,fs,M, lock_nin; + FILE *fin,*fout; + + uint8_t *bitbuf = NULL; + float *modbuf = NULL; + uint8_t *bitbufp; + float *modbufp; + + size_t bitbufsize = 0; + size_t modbufsize = 0; + + int test_type; + + int i; + + fin = NULL; + fout = NULL; + + /* Set up full self-test */ + if(argc == 1){ + test_type = TEST_SELF_FULL; + modem_probe_init("fsk2","fsk2_tfsk_log.txt"); + Fs = ST_FS; + Rs = ST_RS; + f1 = ST_F1; + fs = ST_Fs; + M = ST_M; + lock_nin = 0; + } else if (argc<10){ + /* Not running any test */ + printf("Usage: %s [(M|D|DX) Mode TXFreq1 TXFreqSpace SampleRate SymbolRate lock_nin InputFile OutputFile OctaveLogFile]\n",argv[0]); + exit(1); + } else { + /* Running stim-drivin test */ + /* Mod test */ + if(strcmp(argv[1],"MX")==0){ + test_type = TEST_MOD_H; + } else if(strcmp(argv[1],"M")==0 || strcmp(argv[1],"m")==0) { + test_type = TEST_MOD; + /* Demod test */ + } else if(strcmp(argv[1],"DX")==0) { + test_type = TEST_DEMOD_H; + } else if(strcmp(argv[1],"D")==0 || strcmp(argv[1],"d")==0) { + test_type = TEST_DEMOD; + } else { + printf("Must specify mod or demod test with M or D\n"); + exit(1); + } + /* Extract parameters */ + M = atoi(argv[2]); + f1 = atoi(argv[3]); + fs = atoi(argv[4]); + Fs = atoi(argv[5]); + Rs = atoi(argv[6]); + lock_nin = atoi(argv[7]); + + /* Open files */ + fin = fopen(argv[8],"r"); + fout = fopen(argv[9],"w"); + + if(fin == NULL || fout == NULL){ + printf("Couldn't open test vector files\n"); + exit(1); + } + /* Init modem probing */ + modem_probe_init("fsk",argv[10]); + + } + + srand(1); + /* set up FSK */ + if(test_type == TEST_DEMOD_H || test_type == TEST_MOD_H){ + fsk = fsk_create_hbr(Fs,Rs,M,10,FSK_DEFAULT_NSYM,f1,fs); + if(test_type == TEST_DEMOD_H) + test_type = TEST_DEMOD; + else + test_type = TEST_MOD; + }else{ + fsk = fsk_create(Fs,Rs,M,f1,fs); + } + fsk_set_freq_est_limits(fsk, 300, 2800); + fsk->lock_nin = lock_nin; + + /* Modulate! */ + if(test_type == TEST_MOD || test_type == TEST_SELF_FULL){ + /* Generate random bits for self test */ + if(test_type == TEST_SELF_FULL){ + bitbufsize = ST_BITS; + bitbuf = (uint8_t*) malloc(sizeof(uint8_t)*ST_BITS); + for(i=0; iNbits,fin) == fsk->Nbits){ + i++; + bitbufp+=fsk->Nbits; + /* Make sure we don't break the buffer */ + if(i*fsk->Nbits > bitbufsize){ + bitbuf = realloc(bitbuf,sizeof(uint8_t)*(bitbufsize+fsk->Nbits)); + bitbufsize += fsk->Nbits; + } + } + } + /* Allocate modulation buffer */ + modbuf = (float*)malloc(sizeof(float)*(bitbufsize/fsk->Nbits)*fsk->N*4); + modbufsize = (bitbufsize/fsk->Nbits)*fsk->N; + /* Do the modulation */ + modbufp = modbuf; + bitbufp = bitbuf; + while( bitbufp < bitbuf+bitbufsize){ + fsk_mod(fsk, modbufp, bitbufp, fsk->Nbits); + modbufp += fsk->N; + bitbufp += fsk->Nbits; + } + /* For a mod-only test, write out the result */ + if(test_type == TEST_MOD){ + fwrite(modbuf,sizeof(float),modbufsize,fout); + free(modbuf); + } + /* Free bit buffer */ + free(bitbuf); + } + + /* Now test the demod */ + if(test_type == TEST_DEMOD || test_type == TEST_SELF_FULL){ + free(modbuf); + modbuf = malloc(sizeof(float)*(fsk->N+fsk->Ts*2)); + bitbuf = malloc(sizeof(uint8_t)*fsk->Nbits); + /* Demod-only test */ + if(test_type == TEST_DEMOD){ + while( fread(modbuf,sizeof(float),fsk_nin(fsk),fin) == fsk_nin(fsk) ){ + int n = fsk_nin(fsk); + COMP modbuf_comp[n]; + for(i=0; iNbits,fout); + } + } + /* Demod after channel imp. and mod */ + else{ + bitbufp = bitbuf; + modbufp = modbuf; + while( modbufp < modbuf + modbufsize){ + int n = fsk_nin(fsk); + COMP modbuf_comp[n]; + for(i=0; i +#include +#include "mpdecode_core.h" + +#define M 4 +#define BPS 2 +#define NSYM 5 +#define V_EST 2 +#define SNR_EST 10 + +/* Generated test vectors with: + + octave:100> init_cml('~/cml/'); + octave:101> rx_filt=[1 0 0 0; 0 1 0 0; 0 0 1 0; 0 0 0 1] + octave:102> symL = DemodFSK(rx_filt,10,1); -Somap(symL) +*/ + +/* one col per symbol: + 0 1 2 3 4 */ + float rx_filt[] = { + 1.0, 0.0, 0.0, 0.0, 1.0, /* filter 0 */ + 0.0, 1.0, 0.0, 0.0, 0.0, /* filter 1 */ + 0.0, 0.0, 1.0, 0.0, 0.0, /* filter 2 */ + 0.0, 0.0, 0.0, 1.0, 0.0 /* filter 3 */ +}; + +float llrs_target[] = { + 7.3252, 7.3252, /* bit 0, 1 */ + 7.3252, -7.3252, /* 2, 3, ... */ + -7.3252, 7.3252, + -7.3252, -7.3252, + 7.3252, 7.3252 +}; + +int main(void) { + float llrs[BPS*NSYM] = {0}; + + fsk_rx_filt_to_llrs(llrs, rx_filt, V_EST, SNR_EST, M, NSYM); + + float error = 0.0; + for(int i=0; i +#include "freedv_api.h" + +int main(void) { + printf("%s\n", freedv_get_hash()); + return 0; +} + + diff --git a/libcodec2-android/src/codec2/unittest/tnewamp1.c b/libcodec2-android/src/codec2/unittest/tnewamp1.c new file mode 100644 index 0000000..fcc548f --- /dev/null +++ b/libcodec2-android/src/codec2/unittest/tnewamp1.c @@ -0,0 +1,301 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: tnewamp1.c + AUTHOR......: David Rowe + DATE CREATED: Jan 2017 + + Tests for the C version of the newamp1 amplitude modelling used for + 700c. This program outputs a file of Octave vectors that are loaded + and automatically tested against the Octave version of the modem by + the Octave script tnewamp1.m + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2017 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include "defines.h" +#include "codec2_fft.h" +#include "sine.h" +#include "nlp.h" +#include "dump.h" +#include "octave.h" +#include "newamp1.h" +#include "quantise.h" + +#define FRAMES 300 + +int main(int argc, char *argv[]) { + int Fs = 8000; + C2CONST c2const = c2const_create(Fs, N_S); + int n_samp = c2const.n_samp; + int m_pitch = c2const.m_pitch; + short buf[n_samp]; /* input/output buffer */ + float Sn[m_pitch]; /* float input speech samples */ + COMP Sw[FFT_ENC]; /* DFT of Sn[] */ + codec2_fft_cfg fft_fwd_cfg; /* fwd FFT states */ + float w[m_pitch]; /* time domain hamming window */ + float W[FFT_ENC]; /* DFT of w[] */ + MODEL model; + void *nlp_states; + codec2_fft_cfg phase_fft_fwd_cfg, phase_fft_inv_cfg; + float pitch, prev_f0; + int i,m,f,k; + + if (argc != 2) { + printf("usage: ./tnewamp1 RawFile\n"); + exit(1); + } + nlp_states = nlp_create(&c2const); + prev_f0 = 1.0/P_MAX_S; + fft_fwd_cfg = codec2_fft_alloc(FFT_ENC, 0, NULL, NULL); + make_analysis_window(&c2const,fft_fwd_cfg, w, W); + + phase_fft_fwd_cfg = codec2_fft_alloc(NEWAMP1_PHASE_NFFT, 0, NULL, NULL); + phase_fft_inv_cfg = codec2_fft_alloc(NEWAMP1_PHASE_NFFT, 1, NULL, NULL); + + for(i=0; i Octave + float rate_K_surface[FRAMES][K]; // rate K vecs for each frame, form a surface that makes pretty graphs + float rate_K_surface_no_mean[FRAMES][K]; // mean removed surface + float rate_K_surface_no_mean_[FRAMES][K]; // quantised mean removed surface + float mean[FRAMES]; + float mean_[FRAMES]; + float rate_K_surface_[FRAMES][K]; // quantised rate K vecs for each frame + float interpolated_surface_[FRAMES][K]; // dec/interpolated surface + //int voicing[FRAMES]; + int voicing_[FRAMES]; + float model_octave_[FRAMES][MAX_AMP+2]; + COMP H[FRAMES][MAX_AMP]; + int indexes[FRAMES][NEWAMP1_N_INDEXES]; + float se = 0.0; + float eq[K]; + + for(k=0; k= M) { + for(i=0; i tnewamp1(\"../path/to/build_linux/src/hts1a\", \"../path/to/build_linux/unittest\")\n"); + return 0; +} + diff --git a/libcodec2-android/src/codec2/unittest/tnlp.c b/libcodec2-android/src/codec2/unittest/tnlp.c new file mode 100644 index 0000000..82f0a96 --- /dev/null +++ b/libcodec2-android/src/codec2/unittest/tnlp.c @@ -0,0 +1,164 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: tnlp.c + AUTHOR......: David Rowe + DATE CREATED: 23/3/93 + + Test program for non linear pitch estimation functions. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2009 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + + +#include +#include +#include +#include + +#include "defines.h" +#include "dump.h" +#include "sine.h" +#include "nlp.h" +#include "kiss_fft.h" + +int frames; + +/*---------------------------------------------------------------------------*\ + + switch_present() + + Searches the command line arguments for a "switch". If the switch is + found, returns the command line argument where it ws found, else returns + NULL. + +\*---------------------------------------------------------------------------*/ + +int switch_present(sw,argc,argv) + char sw[]; /* switch in string form */ + int argc; /* number of command line arguments */ + char *argv[]; /* array of command line arguments in string form */ +{ + int i; /* loop variable */ + + for(i=1; i. +*/ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "ofdm_internal.h" +#include "codec2_ofdm.h" +#include "octave.h" +#include "test_bits_ofdm.h" +#include "comp_prim.h" +#include "mpdecode_core.h" + +#include "HRA_112_112.h" /* generated by ldpc_fsk_lib.m:ldpc_decode() */ + +#define NFRAMES 10 +#define SAMPLE_CLOCK_OFFSET_PPM 100 +#define FOFF_HZ 0.5f + +#define ASCALE (2E5f * 1.1491f / 2.0f) /* scale from shorts back to floats */ + +#define CODED_BITSPERFRAME 224 /* number of LDPC codeword bits/frame */ + +/* QPSK constellation for symbol likelihood calculations */ + +static COMP S_matrix[] = { + { 1.0f, 0.0f}, + { 0.0f, 1.0f}, + { 0.0f, -1.0f}, + {-1.0f, 0.0f} +}; + +/* constants we use a lot and don't want to have to deference all the time */ + +static float ofdm_tx_centre; /* TX Center frequency */ +static float ofdm_rx_centre; /* RX Center frequency */ +static float ofdm_fs; /* Sample rate */ +static float ofdm_ts; /* Symbol cycle time */ +static float ofdm_rs; /* Symbol rate */ +static float ofdm_tcp; /* Cyclic prefix duration */ +static float ofdm_timing_mx_thresh; /* See 700D Part 4 Acquisition blog post and ofdm_dev.m routines for how this was set */ + +static int ofdm_nc; /* NS-1 data symbols between pilots */ +static int ofdm_ns; +static int ofdm_bps; /* Bits per symbol */ +static int ofdm_m; /* duration of each symbol in samples */ +static int ofdm_ncp; /* duration of CP in samples */ + +static int ofdm_ftwindowwidth; +static int ofdm_bitsperframe; +static int ofdm_rowsperframe; +static int ofdm_samplesperframe; +static int ofdm_samplespersymbol; +static int ofdm_max_samplesperframe; +static int ofdm_nrxbuf; +static int ofdm_ntxtbits; /* reserve bits/frame for auxillary text information */ +static int ofdm_nuwbits; /* Unique word, used for positive indication of lock */ + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: fs_offset() + AUTHOR......: David Rowe + DATE CREATED: May 2015 + + Simulates small Fs offset between mod and demod. + (Note: Won't work with float, works OK with double) + +\*---------------------------------------------------------------------------*/ + +static int fs_offset(COMP out[], COMP in[], int n, float sample_rate_ppm) { + double f; + double tin = 0.0; + double step = 1.0 + sample_rate_ppm/1E6; + int t1, t2; + int tout = 0; + + while (tin < (double) (n-1)) { + t1 = (int) floor(tin); + t2 = (int) ceil(tin); + assert(t2 < n); + f = tin - (double) t1; + + out[tout].real = ((double)1.0-f)*(double)in[t1].real + f*(double)in[t2].real; + out[tout].imag = ((double)1.0-f)*(double)in[t1].imag + f*(double)in[t2].imag; + + tin += step; + tout++; + //printf("tin: %f tout: %d f: %f\n", tin, tout, f); + } + + return tout; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: freq_shift() + AUTHOR......: David Rowe + DATE CREATED: 26/4/2012 + + Frequency shift modem signal. The use of complex input and output allows + single sided frequency shifting (no images). + +\*---------------------------------------------------------------------------*/ + +static void freq_shift(COMP rx_fdm_fcorr[], COMP rx_fdm[], float foff, COMP *foff_phase_rect, int nin) { + float temp = (TAU * foff / ofdm_fs); + COMP foff_rect = { cosf(temp), sinf(temp) }; + int i; + + for (i = 0; i < nin; i++) { + *foff_phase_rect = cmult(*foff_phase_rect, foff_rect); + rx_fdm_fcorr[i] = cmult(rx_fdm[i], *foff_phase_rect); + } + + /* normalise digital oscillator as the magnitude can drift over time */ + + float mag = cabsolute(*foff_phase_rect); + foff_phase_rect->real /= mag; + foff_phase_rect->imag /= mag; +} + +int main(int argc, char *argv[]) +{ + int opt_Nc = 0; + int ldpc_enable = 1; + struct OFDM *ofdm; + struct OFDM_CONFIG *ofdm_config; + + static struct option long_options[] = { + {"nc", required_argument, 0, 'n'}, + {"noldpc", no_argument, 0, 'l'}, + {0, 0, 0, 0} + }; + + int opt_index = 0; char c; + + while ((c = getopt_long (argc, argv, "n:l", long_options, &opt_index)) != -1) { + switch (c) { + case 'n': + opt_Nc = atoi(optarg); + fprintf(stderr, "Nc = %d\n", opt_Nc); + break; + case 'l': + ldpc_enable = 0; + fprintf(stderr, "LDPC disabled\n"); + break; + default: + fprintf(stderr,"usage: %s [Options]:\n [-l --noldpc]\n [-n --nc NumberoFCarriers]\n", argv[0]); + exit(1); + } + } + + // init once to get a copy of default config params + + ofdm = ofdm_create(NULL); + assert(ofdm != NULL); + struct OFDM_CONFIG ofdm_config_default; + memcpy(&ofdm_config_default, ofdm_get_config_param(ofdm), sizeof(struct OFDM_CONFIG)); + ofdm_destroy(ofdm); + + // now do a little customisation on default config, and re-create modem instance + + if (opt_Nc) + ofdm_config_default.nc = opt_Nc; + //printf("ofdm_create() 2\n"); + ofdm = ofdm_create(&ofdm_config_default); + assert(ofdm != NULL); + ofdm_config = ofdm_get_config_param(ofdm); + + // make local copies for convenience + ofdm_tx_centre = ofdm_config->tx_centre; + ofdm_rx_centre = ofdm_config->rx_centre; + ofdm_fs = ofdm_config->fs; + ofdm_ts = ofdm_config->ts; + ofdm_rs = ofdm_config->rs; + ofdm_tcp = ofdm_config->tcp; + ofdm_timing_mx_thresh = ofdm_config->timing_mx_thresh; + ofdm_nc = ofdm_config->nc; + ofdm_ns = ofdm_config->ns; + ofdm_bps = ofdm_config->bps; + ofdm_m = (int) (ofdm_config->fs / ofdm_config->rs); + ofdm_ncp = (int) (ofdm_config->tcp * ofdm_config->fs); + ofdm_ftwindowwidth = ofdm_config->ftwindowwidth; + ofdm_bitsperframe = ofdm_get_bits_per_frame(ofdm); + ofdm_rowsperframe = ofdm_bitsperframe / (ofdm_config->nc * ofdm_config->bps); + ofdm_samplesperframe = ofdm_get_samples_per_frame(ofdm); + ofdm_samplespersymbol = (ofdm->m + ofdm->ncp); + ofdm_max_samplesperframe = ofdm_get_max_samples_per_frame(ofdm); + ofdm_nrxbuf = 3 * ofdm_samplesperframe + 3 * ofdm_samplespersymbol; + ofdm_ntxtbits = ofdm_config->txtbits; + ofdm_nuwbits = ofdm_config->nuwbits; + + int tx_bits[ofdm_samplesperframe]; + COMP tx[ofdm_samplesperframe]; /* one frame of tx samples */ + + int rx_bits[ofdm_bitsperframe]; /* one frame of rx bits */ + printf("Nc = %d ofdm_bitsperframe: %d\n", ofdm_nc, ofdm_bitsperframe); + + /* log arrays */ + + int tx_bits_log[ofdm_bitsperframe*NFRAMES]; + COMP tx_log[ofdm_samplesperframe*NFRAMES]; + COMP rx_log[ofdm_samplesperframe*NFRAMES]; + COMP rxbuf_in_log[ofdm_max_samplesperframe*NFRAMES]; + COMP rxbuf_log[ofdm_nrxbuf*NFRAMES]; + COMP rx_sym_log[(ofdm_ns + 3)*NFRAMES][ofdm_nc + 2]; + float phase_est_pilot_log[ofdm_rowsperframe*NFRAMES][ofdm_nc]; + COMP rx_np_log[ofdm_rowsperframe*ofdm_nc*NFRAMES]; + float rx_amp_log[ofdm_rowsperframe*ofdm_nc*NFRAMES]; + float foff_hz_log[NFRAMES]; + int rx_bits_log[ofdm_bitsperframe*NFRAMES]; + int timing_est_log[NFRAMES]; + int timing_valid_log[NFRAMES]; + float timing_mx_log[NFRAMES]; + float coarse_foff_est_hz_log[NFRAMES]; + int sample_point_log[NFRAMES]; + float symbol_likelihood_log[ (CODED_BITSPERFRAME/ofdm_bps) * (1<tx_uw[i]; + } + for(i=ofdm_nuwbits; i 16384; + uint8_t txt_bits[ofdm_ntxtbits]; + for (i = 0; i < ofdm_ntxtbits; i++) + txt_bits[i] = 0; + + uint8_t tx_bits_char[ofdm_bitsperframe]; + ofdm_assemble_qpsk_modem_packet(ofdm, tx_bits_char, payload_bits, txt_bits); + for(i=0; irxbuf[ofdm_nrxbuf-nin+i] = rx_log[prx].real + rx_log[prx].imag * I; + } +#endif + + int nin_tot = 0; + + /* disable estimators for initial testing */ + + ofdm_set_verbose(ofdm, false); + ofdm_set_timing_enable(ofdm, true); + ofdm_set_foff_est_enable(ofdm, true); + ofdm_set_phase_est_enable(ofdm, true); + +//#define TESTING_FILE +#ifdef TESTING_FILE + FILE *fin=fopen("~/codec2-dev/octave/ofdm_test.raw", "rb"); + assert(fin != NULL); + int Nbitsperframe = ofdm_bitsperframe; + int Nmaxsamperframe = ofdm_max_samplesperframe; + short rx_scaled[Nmaxsamperframe]; +#endif + + /* start this with something sensible otherwise LDPC decode fails in tofdm.m */ + + ofdm->mean_amp = 1.0; + + for(f=0; frx_np[j]); + ldpc_codeword_symbols[i].imag = cimagf(ofdm->rx_np[j]); + } + + float *ldpc_codeword_symbol_amps = &ofdm->rx_amp[(ofdm_nuwbits+ofdm_ntxtbits)/ofdm_bps]; + + Demod2D(symbol_likelihood, ldpc_codeword_symbols, S_matrix, EsNo, ldpc_codeword_symbol_amps, ofdm->mean_amp, CODED_BITSPERFRAME/ofdm_bps); + Somap(bit_likelihood, symbol_likelihood, 1<rxbuf[i]); + rxbuf_log[ofdm_nrxbuf*f+i].imag = cimagf(ofdm->rxbuf[i]); + } + + for (i = 0; i < (ofdm_ns + 3); i++) { + for (j = 0; j < (ofdm_nc + 2); j++) { + rx_sym_log[(ofdm_ns + 3)*f+i][j].real = crealf(ofdm->rx_sym[i][j]); + rx_sym_log[(ofdm_ns + 3)*f+i][j].imag = cimagf(ofdm->rx_sym[i][j]); + } + } + + /* note corrected phase (rx no phase) is one big linear array for frame */ + + for (i = 0; i < ofdm_rowsperframe*ofdm_nc; i++) { + rx_np_log[ofdm_rowsperframe*ofdm_nc*f + i].real = crealf(ofdm->rx_np[i]); + rx_np_log[ofdm_rowsperframe*ofdm_nc*f + i].imag = cimagf(ofdm->rx_np[i]); + } + + /* note phase/amp ests the same for each col, but check them all anyway */ + + for (i = 0; i < ofdm_rowsperframe; i++) { + for (j = 0; j < ofdm_nc; j++) { + phase_est_pilot_log[ofdm_rowsperframe*f+i][j] = ofdm->aphase_est_pilot_log[ofdm_nc*i+j]; + rx_amp_log[ofdm_rowsperframe*ofdm_nc*f+ofdm_nc*i+j] = ofdm->rx_amp[ofdm_nc*i+j]; + } + } + + foff_hz_log[f] = ofdm->foff_est_hz; + timing_est_log[f] = ofdm->timing_est + 1; /* offset by 1 to match Octave */ + timing_valid_log[f] = ofdm->timing_valid; + timing_mx_log[f] = ofdm->timing_mx; + coarse_foff_est_hz_log[f] = ofdm->coarse_foff_est_hz; + sample_point_log[f] = ofdm->sample_point + 1; /* offset by 1 to match Octave */ + sig_var_log[f] = ofdm->sig_var; + noise_var_log[f] = ofdm->noise_var; + mean_amp_log[f] = ofdm->mean_amp; + + memcpy(&rx_bits_log[ofdm_bitsperframe*f], rx_bits, sizeof(rx_bits)); + + if (ldpc_enable) { + for(i=0; i<(CODED_BITSPERFRAME/ofdm_bps) * (1<pilot_samples, 1, ofdm_samplespersymbol, ofdm_samplespersymbol); + octave_save_int(fout, "tx_bits_log_c", tx_bits_log, 1, ofdm_bitsperframe*NFRAMES); + octave_save_complex(fout, "tx_log_c", (COMP*)tx_log, 1, ofdm_samplesperframe*NFRAMES, ofdm_samplesperframe*NFRAMES); + octave_save_complex(fout, "rx_log_c", (COMP*)rx_log, 1, ofdm_samplesperframe*NFRAMES, ofdm_samplesperframe*NFRAMES); + octave_save_complex(fout, "rxbuf_in_log_c", (COMP*)rxbuf_in_log, 1, nin_tot, nin_tot); + octave_save_complex(fout, "rxbuf_log_c", (COMP*)rxbuf_log, 1, ofdm_nrxbuf*NFRAMES, ofdm_nrxbuf*NFRAMES); + octave_save_complex(fout, "rx_sym_log_c", (COMP*)rx_sym_log, (ofdm_ns + 3)*NFRAMES, ofdm_nc + 2, ofdm_nc + 2); + octave_save_float(fout, "phase_est_pilot_log_c", (float*)phase_est_pilot_log, ofdm_rowsperframe*NFRAMES, ofdm_nc, ofdm_nc); + octave_save_float(fout, "rx_amp_log_c", (float*)rx_amp_log, 1, ofdm_rowsperframe*ofdm_nc*NFRAMES, ofdm_rowsperframe*ofdm_nc*NFRAMES); + octave_save_float(fout, "foff_hz_log_c", foff_hz_log, NFRAMES, 1, 1); + octave_save_int(fout, "timing_est_log_c", timing_est_log, NFRAMES, 1); + octave_save_int(fout, "timing_valid_log_c", timing_valid_log, NFRAMES, 1); + octave_save_float(fout, "timing_mx_log_c", timing_mx_log, NFRAMES, 1, 1); + octave_save_float(fout, "coarse_foff_est_hz_log_c", coarse_foff_est_hz_log, NFRAMES, 1, 1); + octave_save_int(fout, "sample_point_log_c", sample_point_log, NFRAMES, 1); + octave_save_complex(fout, "rx_np_log_c", (COMP*)rx_np_log, 1, ofdm_rowsperframe*ofdm_nc*NFRAMES, ofdm_rowsperframe*ofdm_nc*NFRAMES); + octave_save_int(fout, "rx_bits_log_c", rx_bits_log, 1, ofdm_bitsperframe*NFRAMES); + octave_save_float(fout, "symbol_likelihood_log_c", symbol_likelihood_log, (CODED_BITSPERFRAME/ofdm_bps) * (1< +#include +#include +#include +#include "lpc.h" + +#define N 10 +#define F 10 + +int main() { + FILE *fprede; + float Sn[N], Sn_pre[N], Sn_de[N]; + float pre_mem = 0.0, de_mem = 0.0; + int i, f; + + fprede = fopen("prede.txt", "wt"); + assert(fprede != NULL); + + for(i=0; i +#include "ofdm_internal.h" + +int main(void) { + int c; + for(c=0; c<16; c++) { + int tx_bits[4], rx_bits[4]; + for(int i=0; i<4; i++) + tx_bits[i] = (c >> (3-i)) & 0x1; + complex float symbol = qam16_mod(tx_bits); + qam16_demod(symbol, rx_bits); + if (memcmp(tx_bits, rx_bits, 4)) { + fprintf(stderr, "FAIL on %d!\ntx_bits: ",c); + for(int i=0; i<4; i++) fprintf(stderr, "%d ", tx_bits[i]); + fprintf(stderr, "%f %f\nrx_bits: ", creal(symbol), cimag(symbol)); + for(int i=0; i<4; i++) fprintf(stderr, "%d ", rx_bits[i]); + fprintf(stderr, "%f %f\n", creal(symbol), cimag(symbol)); + return 1; + } + } + + fprintf(stderr, "%d tested OK...\nPASS!\n", c); + return 0; +} + + diff --git a/libcodec2-android/src/codec2/unittest/tst_codec2_fft_init.c b/libcodec2-android/src/codec2/unittest/tst_codec2_fft_init.c new file mode 100644 index 0000000..71ddc38 --- /dev/null +++ b/libcodec2-android/src/codec2/unittest/tst_codec2_fft_init.c @@ -0,0 +1,97 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: tst_codec2_fft_init.c, + AUTHOR......: David Rowe, Don Reid + DATE CREATED: 30 May 2013, Oct 2018, Feb 2018 + + Test FFT Window initialization in Codec2_create + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2014 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include +#include +#include + +#include "codec2.h" +#include "codec2_internal.h" +#include "defines.h" + +#include "machdep.h" + +static const float expect_w[] = { + 0.004293, 0.004301, 0.004309, 0.004315, + 0.004320, 0.004323, 0.004326, 0.004328, + 0.004328, 0.004328, 0.004326, 0.004323, + 0.004320, 0.004315, 0.004309, 0.004301}; + + +static const float expect_W[] = { + -0.002176, 0.002195, 0.004429, -0.008645, + -0.012196, 0.065359, 0.262390, 0.495616, + 0.601647, 0.495616, 0.262390, 0.065359, + -0.012196, -0.008645, 0.004429, 0.002195}; + + +int float_cmp(float a, float b) { + if ( fabsf(a - b) < 1e-6f ) return 1; + else return 0; + } + +int main(int argc, char *argv[]) { + + struct CODEC2 *codec2; + int i, j; + + //////// + codec2 = codec2_create(CODEC2_MODE_700C); + + j = (codec2->c2const.m_pitch / 2) - 8; + for (i=0; i<16; i++) { + printf("w[%d] = %f", j+i, + (double)codec2->w[j+i]); + if (!float_cmp(codec2->w[j+i], expect_w[i])) { + printf(" Error, expected %f", (double)expect_w[i]); + } + printf("\n"); + } + + printf("\n"); + + j = (FFT_ENC / 2) - 8; + for (i=0; i<16; i++) { + printf("W[%d] = %f", j+i, + (double)codec2->W[j+i]); + if (!float_cmp(codec2->W[j+i], expect_W[i])) { + printf(" Error, expected %f", (double)expect_W[i]); + } + printf("\n"); + } + + codec2_destroy(codec2); + + printf("\nEnd of Test\n"); + fclose(stdout); + fclose(stderr); + + return(0); +} + +/* vi:set ts=4 et sts=4: */ diff --git a/libcodec2-android/src/codec2/unittest/tvq_mbest.c b/libcodec2-android/src/codec2/unittest/tvq_mbest.c new file mode 100644 index 0000000..6ff3737 --- /dev/null +++ b/libcodec2-android/src/codec2/unittest/tvq_mbest.c @@ -0,0 +1,28 @@ +/* + tvq_mbest.c + David Rowe Dec 2019 + + Generate some test vectors to exercise misc/vq_mbest.c +*/ + +#include +#include +#include + +void write_float_file(char fn[], float *values, int n) { + FILE *f=fopen(fn,"wb"); + assert(f != NULL); + assert(fwrite(values, sizeof(float), n, f) == n); + fclose(f); +} + +int main(void) { + float target[] = {1.0,1,0}; write_float_file("target.f32", target, 2); + float vq1[] = {0.9,0.9, /* this will be a better match on first stage */ + 0.8,0.8}; /* but after second stage should choose this */ + write_float_file("vq1.f32", vq1, 4); + float vq2[] = {0.3,0.3, + 0.2,0.2}; /* 0.8+0.2 == 1.0 so best 2nd stage entry */ + write_float_file("vq2.f32", vq2, 4); + return 0; +} diff --git a/libcodec2-android/src/codec2/wav/all.wav b/libcodec2-android/src/codec2/wav/all.wav new file mode 100644 index 0000000..ba37838 Binary files /dev/null and b/libcodec2-android/src/codec2/wav/all.wav differ diff --git a/libcodec2-android/src/codec2/wav/cross.wav b/libcodec2-android/src/codec2/wav/cross.wav new file mode 100644 index 0000000..f9f2d04 Binary files /dev/null and b/libcodec2-android/src/codec2/wav/cross.wav differ diff --git a/libcodec2-android/src/codec2/wav/david4.wav b/libcodec2-android/src/codec2/wav/david4.wav new file mode 100644 index 0000000..909a7cb Binary files /dev/null and b/libcodec2-android/src/codec2/wav/david4.wav differ diff --git a/libcodec2-android/src/codec2/wav/f2400.wav b/libcodec2-android/src/codec2/wav/f2400.wav new file mode 100644 index 0000000..35c41d9 Binary files /dev/null and b/libcodec2-android/src/codec2/wav/f2400.wav differ diff --git a/libcodec2-android/src/codec2/wav/forig.wav b/libcodec2-android/src/codec2/wav/forig.wav new file mode 100644 index 0000000..81f3f9f Binary files /dev/null and b/libcodec2-android/src/codec2/wav/forig.wav differ diff --git a/libcodec2-android/src/codec2/wav/hts1a.wav b/libcodec2-android/src/codec2/wav/hts1a.wav new file mode 100644 index 0000000..f605089 Binary files /dev/null and b/libcodec2-android/src/codec2/wav/hts1a.wav differ diff --git a/libcodec2-android/src/codec2/wav/hts2a.wav b/libcodec2-android/src/codec2/wav/hts2a.wav new file mode 100644 index 0000000..644b536 Binary files /dev/null and b/libcodec2-android/src/codec2/wav/hts2a.wav differ diff --git a/libcodec2-android/src/codec2/wav/m2400.wav b/libcodec2-android/src/codec2/wav/m2400.wav new file mode 100644 index 0000000..a1fe1a5 Binary files /dev/null and b/libcodec2-android/src/codec2/wav/m2400.wav differ diff --git a/libcodec2-android/src/codec2/wav/mmt1.wav b/libcodec2-android/src/codec2/wav/mmt1.wav new file mode 100644 index 0000000..b0526cb Binary files /dev/null and b/libcodec2-android/src/codec2/wav/mmt1.wav differ diff --git a/libcodec2-android/src/codec2/wav/morig.wav b/libcodec2-android/src/codec2/wav/morig.wav new file mode 100644 index 0000000..eaf52d1 Binary files /dev/null and b/libcodec2-android/src/codec2/wav/morig.wav differ diff --git a/libcodec2-android/src/codec2/wav/ve9qrp.wav b/libcodec2-android/src/codec2/wav/ve9qrp.wav new file mode 100644 index 0000000..38454a5 Binary files /dev/null and b/libcodec2-android/src/codec2/wav/ve9qrp.wav differ diff --git a/libcodec2-android/src/codec2/wav/vk2tpm_004.wav b/libcodec2-android/src/codec2/wav/vk2tpm_004.wav new file mode 100644 index 0000000..b0778fe Binary files /dev/null and b/libcodec2-android/src/codec2/wav/vk2tpm_004.wav differ diff --git a/libcodec2-android/src/codec2/wav/vk5qi.wav b/libcodec2-android/src/codec2/wav/vk5qi.wav new file mode 100644 index 0000000..b1aaed9 Binary files /dev/null and b/libcodec2-android/src/codec2/wav/vk5qi.wav differ diff --git a/libcodec2-android/src/codec2/wav/wia_16kHz.wav b/libcodec2-android/src/codec2/wav/wia_16kHz.wav new file mode 100644 index 0000000..8bdd729 Binary files /dev/null and b/libcodec2-android/src/codec2/wav/wia_16kHz.wav differ diff --git a/libcodec2-android/src/main/AndroidManifest.xml b/libcodec2-android/src/main/AndroidManifest.xml new file mode 100644 index 0000000..3c78fb9 --- /dev/null +++ b/libcodec2-android/src/main/AndroidManifest.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/libcodec2-android/src/main/cpp/CMakeLists.txt b/libcodec2-android/src/main/cpp/CMakeLists.txt new file mode 100644 index 0000000..23f342e --- /dev/null +++ b/libcodec2-android/src/main/cpp/CMakeLists.txt @@ -0,0 +1,41 @@ +# For more information about using CMake with Android Studio, read the +# documentation: https://d.android.com/studio/projects/add-native-code.html + +# Sets the minimum version of CMake required to build the native library. + +cmake_minimum_required(VERSION 3.4.1) +set(main_DIR ${CMAKE_SOURCE_DIR}) +add_library(libcodec2 SHARED IMPORTED) +set_target_properties(libcodec2 PROPERTIES IMPORTED_LOCATION + ${main_DIR}/../../../build/imported-lib/${ANDROID_ABI}/libcodec2.so) + +include_directories(${main_DIR}/codec2/) + + +# Searches for a specified prebuilt library and stores the path as a +## variable. Because CMake includes system libraries in the search path by +# default, you only need to specify the name of the public NDK library +# you want to add. CMake verifies that the library exists before +# completing its build. + + +add_library( # Sets the name of the library. + Codec2JNI + ## Sets the library as a shared library. + SHARED + ## Provides a relative path to your source file(s). + Codec2JNI.cpp) + +find_library( # Sets the name of the path variable. + log-lib + # Specifies the name of the NDK library that + # you want CMake to locate. + log) + +# Specifies libraries CMake should link to your target library. You +# can link multiple libraries, such as libraries you define in this +# build script, prebuilt third-party libraries, or system libraries. +target_link_libraries( + Codec2JNI + libcodec2 + ${log-lib}) \ No newline at end of file diff --git a/libcodec2-android/src/main/cpp/Codec2JNI.cpp b/libcodec2-android/src/main/cpp/Codec2JNI.cpp new file mode 100644 index 0000000..7729f2a --- /dev/null +++ b/libcodec2-android/src/main/cpp/Codec2JNI.cpp @@ -0,0 +1,120 @@ +#include +#include +#include "codec2/codec2_fdmdv.h" +#include "codec2/codec2.h" + +namespace Java_com_ustadmobile_codec2_Codec2 { + + struct Context { + struct CODEC2 *c2; + short *buf; //raw audio data + unsigned char *bits; //codec2 data + int nsam; //nsam: number of samples per frame - e.g. raw (uncompressed) size = samples per frame + int nbit; + int nbyte;//size of one frame of codec2 data + }; + + static Context *getContext(jlong jp) { + unsigned long p = (unsigned long) jp; + Context *con; + con = (Context *) p; + return con; + } + + static jlong create(JNIEnv *env, jclass clazz, int mode) { + struct Context *con; + con = (struct Context *) malloc(sizeof(struct Context)); + struct CODEC2 *c; + c = codec2_create(mode); + con->c2 = c; + con->nsam = codec2_samples_per_frame(c); + con->nbit = codec2_bits_per_frame(con->c2); + con->buf = (short*)malloc(con->nsam*sizeof(short)); + con->nbyte = (con->nbit + 7) / 8; + con->bits = (unsigned char*)malloc(con->nbyte*sizeof(char)); + unsigned long pv = (unsigned long) con; + + return pv; + } + + static jint c2spf(JNIEnv *env, jclass clazz, jlong n) { + Context *con = getContext(n); + return con->nsam; + } + + static jint c2bits(JNIEnv *env, jclass clazz, jlong n) { + Context *con = getContext(n); + return con->nbyte; + } + + static jint destroy(JNIEnv *env, jclass clazz, jlong n) { + Context *con = getContext(n); + codec2_destroy(con->c2); + free(con->bits); + free(con->buf); + free(con); + return 0; + } + + static jlong encode(JNIEnv *env, jclass clazz, jlong n, + jshortArray inputBuffer, + jcharArray outputBits) { + Context *con = getContext(n); + int i; + jshort *jbuf = env->GetShortArrayElements(inputBuffer, 0); + for (i = 0; i < con->nsam; i++) { + short v = (short) jbuf[i]; + con->buf[i] = v; + } + env->ReleaseShortArrayElements(inputBuffer, jbuf, 0); + //env->DeleteLocalRef(inputBuffer); + codec2_encode(con->c2, con->bits, con->buf); + jchar *jbits = env->GetCharArrayElements(outputBits, 0); + for (i = 0; i < con->nbyte; i++) { + jbits[i] = con->bits[i]; + } + env->ReleaseCharArrayElements(outputBits, jbits, 0); + //env->DeleteLocalRef(outputBits); + return 0; + } + + static jlong decode(JNIEnv *env, jclass clazz, jlong n, jshortArray outBuffer, jbyteArray inBuffer) { + Context *con = getContext(n); + + env->GetByteArrayRegion (inBuffer, 0, con->nbyte, reinterpret_cast(con->bits)); + + codec2_decode_ber(con->c2, con->buf, con->bits, 0.0); + + env->SetShortArrayRegion(outBuffer, 0, con->nsam, con->buf); + + return 0; + } + + static JNINativeMethod method_table[] = { + {"create", "(I)J", (void *) create}, + {"getSamplesPerFrame", "(J)I", (void *) c2spf}, + {"getBitsSize", "(J)I", (void *) c2bits}, + {"destroy", "(J)I", (void *) destroy}, + {"encode", "(J[S[C)J", (void *) encode}, + {"decode", "(J[S[B)J", (void *) decode}}; + +} + +using namespace Java_com_ustadmobile_codec2_Codec2; + +extern "C" jint JNI_OnLoad(JavaVM *vm, void *reserved) { + JNIEnv *env; + if (vm->GetEnv(reinterpret_cast(&env), JNI_VERSION_1_6) != JNI_OK) { + return JNI_ERR; + } else { + jclass clazz = env->FindClass("com/ustadmobile/codec2/Codec2"); + if (clazz) { + jint ret = env->RegisterNatives(clazz, method_table, + sizeof(method_table) / sizeof(method_table[0])); + env->DeleteLocalRef(clazz); + return ret == 0 ? JNI_VERSION_1_6 : JNI_ERR; + } else { + return JNI_ERR; + } + } +} \ No newline at end of file diff --git a/libcodec2-android/src/main/cpp/codec2/codec2.h b/libcodec2-android/src/main/cpp/codec2/codec2.h new file mode 100644 index 0000000..9b5abe8 --- /dev/null +++ b/libcodec2-android/src/main/cpp/codec2/codec2.h @@ -0,0 +1,74 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: codec2.h + AUTHOR......: David Rowe + DATE CREATED: 21 August 2010 + + Codec 2 fully quantised encoder and decoder functions. If you want use + Codec 2, these are the functions you need to call. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2010 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#ifdef __cplusplus + extern "C" { +#endif + +#ifndef __CODEC2__ +#define __CODEC2__ + +#include "codec2/version.h" + +#define CODEC2_MODE_3200 0 +#define CODEC2_MODE_2400 1 +#define CODEC2_MODE_1600 2 +#define CODEC2_MODE_1400 3 +#define CODEC2_MODE_1300 4 +#define CODEC2_MODE_1200 5 +#define CODEC2_MODE_700 6 +#define CODEC2_MODE_700B 7 +#define CODEC2_MODE_700C 8 +#define CODEC2_MODE_WB 9 +#define CODEC2_MODE_450 10 +#define CODEC2_MODE_450PWB 11 + +struct CODEC2; + +struct CODEC2 * codec2_create(int mode); +void codec2_destroy(struct CODEC2 *codec2_state); +void codec2_encode(struct CODEC2 *codec2_state, unsigned char * bits, short speech_in[]); +void codec2_decode(struct CODEC2 *codec2_state, short speech_out[], const unsigned char *bits); +void codec2_decode_ber(struct CODEC2 *codec2_state, short speech_out[], const unsigned char *bits, float ber_est); +int codec2_samples_per_frame(struct CODEC2 *codec2_state); +int codec2_bits_per_frame(struct CODEC2 *codec2_state); + +void codec2_set_lpc_post_filter(struct CODEC2 *codec2_state, int enable, int bass_boost, float beta, float gamma); +int codec2_get_spare_bit_index(struct CODEC2 *codec2_state); +int codec2_rebuild_spare_bit(struct CODEC2 *codec2_state, int unpacked_bits[]); +void codec2_set_natural_or_gray(struct CODEC2 *codec2_state, int gray); +void codec2_set_softdec(struct CODEC2 *c2, float *softdec); +float codec2_get_energy(struct CODEC2 *codec2_state, const unsigned char *bits); + + +#endif + +#ifdef __cplusplus +} +#endif + diff --git a/libcodec2-android/src/main/cpp/codec2/codec2/version.h b/libcodec2-android/src/main/cpp/codec2/codec2/version.h new file mode 100644 index 0000000..a3688a7 --- /dev/null +++ b/libcodec2-android/src/main/cpp/codec2/codec2/version.h @@ -0,0 +1,37 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: version.h + AUTHOR......: Tomas Härdin + DATE CREATED: 03 November 2017 + + Codec 2 VERSION #defines + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2017 Tomas Härdin + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +//this functions both as an include guard and your typical HAVE macro +#ifndef CODEC2_HAVE_VERSION +#define CODEC2_HAVE_VERSION + +#define CODEC2_VERSION_MAJOR 0 +#define CODEC2_VERSION_MINOR 8 +/* #undef CODEC2_VERSION_PATCH */ +#define CODEC2_VERSION "0.8" + +#endif //CODEC2_HAVE_VERSION diff --git a/libcodec2-android/src/main/cpp/codec2/codec2_fdmdv.h b/libcodec2-android/src/main/cpp/codec2/codec2_fdmdv.h new file mode 100644 index 0000000..4298fab --- /dev/null +++ b/libcodec2-android/src/main/cpp/codec2/codec2_fdmdv.h @@ -0,0 +1,113 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: codec2_fdmdv.h + AUTHOR......: David Rowe + DATE CREATED: April 14 2012 + + A 1400 bit/s (nominal) Frequency Division Multiplexed Digital Voice + (FDMDV) modem. Used for digital audio over HF SSB. See + README_fdmdv.txt for more information, and fdmdv_mod.c and + fdmdv_demod.c for example usage. + + The name codec2_fdmdv.h is used to make it unique when "make + installed". + + References: + + [1] http://n1su.com/fdmdv/FDMDV_Docs_Rel_1_4b.pdf + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2012 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#ifndef __FDMDV__ +#define __FDMDV__ + +#ifdef __cplusplus +extern "C" { +#endif + +/* set up the calling convention for DLL function import/export for + WIN32 cross compiling */ + +#ifdef __CODEC2_WIN32__ +#ifdef __CODEC2_BUILDING_DLL__ +#define CODEC2_WIN32SUPPORT __declspec(dllexport) __stdcall +#else +#define CODEC2_WIN32SUPPORT __declspec(dllimport) __stdcall +#endif +#else +#define CODEC2_WIN32SUPPORT +#endif + +#include "comp.h" +#include "modem_stats.h" + +#define FDMDV_NC 14 /* default number of data carriers */ +#define FDMDV_NC_MAX 20 /* maximum number of data carriers */ +#define FDMDV_BITS_PER_FRAME 28 /* 20ms frames, for nominal 1400 bit/s */ +#define FDMDV_NOM_SAMPLES_PER_FRAME 160 /* modulator output samples/frame and nominal demod samples/frame */ + /* at 8000 Hz sample rate */ +#define FDMDV_MAX_SAMPLES_PER_FRAME 200 /* max demod samples/frame, use this to allocate storage */ +#define FDMDV_SCALE 1000 /* suggested scaling for 16 bit shorts */ +#define FDMDV_FCENTRE 1500 /* Centre frequency, Nc/2 carriers below this, Nc/2 carriers above (Hz) */ + +/* 8 to 48 kHz sample rate conversion */ + +#define FDMDV_OS 2 /* oversampling rate */ +#define FDMDV_OS_TAPS_16K 48 /* number of OS filter taps at 16kHz */ +#define FDMDV_OS_TAPS_8K (FDMDV_OS_TAPS_16K/FDMDV_OS) /* number of OS filter taps at 8kHz */ + +/* FDMDV states and stats structures */ + +struct FDMDV; + +struct FDMDV * fdmdv_create(int Nc); +void fdmdv_destroy(struct FDMDV *fdmdv_state); +void fdmdv_use_old_qpsk_mapping(struct FDMDV *fdmdv_state); +int fdmdv_bits_per_frame(struct FDMDV *fdmdv_state); +float fdmdv_get_fsep(struct FDMDV *fdmdv_state); +void fdmdv_set_fsep(struct FDMDV *fdmdv_state, float fsep); + +void fdmdv_mod(struct FDMDV *fdmdv_state, COMP tx_fdm[], int tx_bits[], int *sync_bit); +void fdmdv_demod(struct FDMDV *fdmdv_state, int rx_bits[], int *reliable_sync_bit, COMP rx_fdm[], int *nin); + +void fdmdv_get_test_bits(struct FDMDV *fdmdv_state, int tx_bits[]); +int fdmdv_error_pattern_size(struct FDMDV *fdmdv_state); +void fdmdv_put_test_bits(struct FDMDV *f, int *sync, short error_pattern[], int *bit_errors, int *ntest_bits, int rx_bits[]); + +void fdmdv_get_demod_stats(struct FDMDV *fdmdv_state, struct MODEM_STATS *stats); + +void fdmdv_8_to_16(float out16k[], float in8k[], int n); +void fdmdv_8_to_16_short(short out16k[], short in8k[], int n); +void fdmdv_16_to_8(float out8k[], float in16k[], int n); +void fdmdv_16_to_8_short(short out8k[], short in16k[], int n); + +void fdmdv_freq_shift(COMP rx_fdm_fcorr[], COMP rx_fdm[], float foff, COMP *foff_phase_rect, int nin); + +/* debug/development function(s) */ + +void fdmdv_dump_osc_mags(struct FDMDV *f); +void fdmdv_simulate_channel(float *sig_pwr_av, COMP samples[], int nin, float target_snr); + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/libcodec2-android/src/main/cpp/codec2/comp.h b/libcodec2-android/src/main/cpp/codec2/comp.h new file mode 100644 index 0000000..ffc20c1 --- /dev/null +++ b/libcodec2-android/src/main/cpp/codec2/comp.h @@ -0,0 +1,38 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: comp.h + AUTHOR......: David Rowe + DATE CREATED: 24/08/09 + + Complex number definition. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2009 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#ifndef __COMP__ +#define __COMP__ + +/* Complex number */ + +typedef struct { + float real; + float imag; +} COMP; + +#endif diff --git a/libcodec2-android/src/main/cpp/codec2/kiss_fft.h b/libcodec2-android/src/main/cpp/codec2/kiss_fft.h new file mode 100644 index 0000000..c01722c --- /dev/null +++ b/libcodec2-android/src/main/cpp/codec2/kiss_fft.h @@ -0,0 +1,124 @@ +#ifndef KISS_FFT_H +#define KISS_FFT_H + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + ATTENTION! + If you would like a : + -- a utility that will handle the caching of fft objects + -- real-only (no imaginary time component ) FFT + -- a multi-dimensional FFT + -- a command-line utility to perform ffts + -- a command-line utility to perform fast-convolution filtering + + Then see kfc.h kiss_fftr.h kiss_fftnd.h fftutil.c kiss_fastfir.c + in the tools/ directory. +*/ + +#ifdef USE_SIMD +# include +# define kiss_fft_scalar __m128 +#define KISS_FFT_MALLOC(nbytes) _mm_malloc(nbytes,16) +#define KISS_FFT_FREE _mm_free +#else +#define KISS_FFT_MALLOC malloc +#define KISS_FFT_FREE free +#endif + + +#ifdef FIXED_POINT +#include +# if (FIXED_POINT == 32) +# define kiss_fft_scalar int32_t +# else +# define kiss_fft_scalar int16_t +# endif +#else +# ifndef kiss_fft_scalar +/* default is float */ +# define kiss_fft_scalar float +# endif +#endif + +typedef struct { + kiss_fft_scalar r; + kiss_fft_scalar i; +}kiss_fft_cpx; + +typedef struct kiss_fft_state* kiss_fft_cfg; + +/* + * kiss_fft_alloc + * + * Initialize a FFT (or IFFT) algorithm's cfg/state buffer. + * + * typical usage: kiss_fft_cfg mycfg=kiss_fft_alloc(1024,0,NULL,NULL); + * + * The return value from fft_alloc is a cfg buffer used internally + * by the fft routine or NULL. + * + * If lenmem is NULL, then kiss_fft_alloc will allocate a cfg buffer using malloc. + * The returned value should be free()d when done to avoid memory leaks. + * + * The state can be placed in a user supplied buffer 'mem': + * If lenmem is not NULL and mem is not NULL and *lenmem is large enough, + * then the function places the cfg in mem and the size used in *lenmem + * and returns mem. + * + * If lenmem is not NULL and ( mem is NULL or *lenmem is not large enough), + * then the function returns NULL and places the minimum cfg + * buffer size in *lenmem. + * */ + +kiss_fft_cfg kiss_fft_alloc(int nfft,int inverse_fft,void * mem,size_t * lenmem); + +/* + * kiss_fft(cfg,in_out_buf) + * + * Perform an FFT on a complex input buffer. + * for a forward FFT, + * fin should be f[0] , f[1] , ... ,f[nfft-1] + * fout will be F[0] , F[1] , ... ,F[nfft-1] + * Note that each element is complex and can be accessed like + f[k].r and f[k].i + * */ +void kiss_fft(kiss_fft_cfg cfg,const kiss_fft_cpx *fin,kiss_fft_cpx *fout); + +/* + A more generic version of the above function. It reads its input from every Nth sample. + * */ +void kiss_fft_stride(kiss_fft_cfg cfg,const kiss_fft_cpx *fin,kiss_fft_cpx *fout,int fin_stride); + +/* If kiss_fft_alloc allocated a buffer, it is one contiguous + buffer and can be simply free()d when no longer needed*/ +#define kiss_fft_free free + +/* + Cleans up some memory that gets managed internally. Not necessary to call, but it might clean up + your compiler output to call this before you exit. +*/ +void kiss_fft_cleanup(void); + + +/* + * Returns the smallest integer k, such that k>=n and k has only "fast" factors (2,3,5) + */ +int kiss_fft_next_fast_size(int n); + +/* for real ffts, we need an even size */ +#define kiss_fftr_next_fast_size_real(n) \ + (kiss_fft_next_fast_size( ((n)+1)>>1)<<1) + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/libcodec2-android/src/main/cpp/codec2/modem_stats.h b/libcodec2-android/src/main/cpp/codec2/modem_stats.h new file mode 100644 index 0000000..7df3322 --- /dev/null +++ b/libcodec2-android/src/main/cpp/codec2/modem_stats.h @@ -0,0 +1,80 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: modem_stats.h + AUTHOR......: David Rowe + DATE CREATED: June 2015 + + Common structure for returning demod stats from fdmdv and cohpsk modems. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2015 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#ifdef __cplusplus + extern "C" { +#endif + +#ifndef __MODEM_STATS__ +#define __MODEM_STATS__ + +#include "comp.h" +#include "kiss_fft.h" + +#define MODEM_STATS_NC_MAX 20 +#define MODEM_STATS_NR_MAX 8 +#define MODEM_STATS_ET_MAX 8 +#define MODEM_STATS_NSPEC 512 +#define MODEM_STATS_MAX_F_HZ 4000 +#define MODEM_STATS_MAX_F_EST 4 + +struct MODEM_STATS { + int Nc; + float snr_est; /* estimated SNR of rx signal in dB (3 kHz noise BW) */ + COMP rx_symbols[MODEM_STATS_NR_MAX][MODEM_STATS_NC_MAX+1]; + /* latest received symbols, for scatter plot */ + int nr; /* number of rows in rx_symbols */ + int sync; /* demod sync state */ + float foff; /* estimated freq offset in Hz */ + float rx_timing; /* estimated optimum timing offset in samples */ + float clock_offset; /* Estimated tx/rx sample clock offset in ppm */ + + /* eye diagram traces */ + /* Eye diagram plot -- first dim is trace number, second is the trace idx */ + float rx_eye[MODEM_STATS_ET_MAX][80]; + int neyetr; /* How many eye traces are plotted */ + int neyesamp; /* How many samples in the eye diagram */ + + /* optional for FSK modems - est tone freqs */ + + float f_est[MODEM_STATS_MAX_F_EST]; + + /* Buf for FFT/waterfall */ + + float fft_buf[2*MODEM_STATS_NSPEC]; + kiss_fft_cfg fft_cfg; +}; + +void modem_stats_open(struct MODEM_STATS *f); +void modem_stats_close(struct MODEM_STATS *f); +void modem_stats_get_rx_spectrum(struct MODEM_STATS *f, float mag_spec_dB[], COMP rx_fdm[], int nin); + +#endif + +#ifdef __cplusplus +} +#endif diff --git a/libcodec2-android/src/main/cpp/codec2/varicode.h b/libcodec2-android/src/main/cpp/codec2/varicode.h new file mode 100644 index 0000000..d9fb441 --- /dev/null +++ b/libcodec2-android/src/main/cpp/codec2/varicode.h @@ -0,0 +1,52 @@ +//========================================================================== +// Name: varicode.h +// Purpose: Varicode encoded and decode functions +// Created: Nov 24, 2012 +// Authors: David Rowe +// +// License: +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2.1, +// as published by the Free Software Foundation. This program is +// distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public +// License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, see . +// +//========================================================================== + +#ifndef __VARICODE__ +#define __VARICODE__ + +#ifdef __cplusplus +extern "C" { + +#endif + +#define VARICODE_MAX_BITS (10+2) /* max varicode bits for each ascii character */ + /* 10 bits for code plus 2 0 bits for inter-character space */ + +struct VARICODE_DEC { + int state; + int n_zeros; + int v_len; + unsigned short packed; + int code_num; + int n_in; + int in[2]; +}; + +int varicode_encode(short varicode_out[], char ascii_in[], int max_out, int n_in, int code_num); +void varicode_decode_init(struct VARICODE_DEC *dec_states, int code_num); +int varicode_decode(struct VARICODE_DEC *dec_states, char ascii_out[], short varicode_in[], int max_out, int n_in); +void varicode_set_code_num(struct VARICODE_DEC *dec_states, int code_num); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/libcodec2-android/src/main/java/com/ustadmobile/codec2/Codec2.java b/libcodec2-android/src/main/java/com/ustadmobile/codec2/Codec2.java new file mode 100644 index 0000000..fd5e6a3 --- /dev/null +++ b/libcodec2-android/src/main/java/com/ustadmobile/codec2/Codec2.java @@ -0,0 +1,53 @@ +package com.ustadmobile.codec2; + +import androidx.annotation.RequiresApi; + +@RequiresApi(23) +public class Codec2 { + + static { + System.loadLibrary("codec2"); + System.loadLibrary("Codec2JNI"); + } + + public static final int CODEC2_MODE_3200 = 0; + public static final int CODEC2_MODE_2400 = 1; + public static final int CODEC2_MODE_1600 = 2; + public static final int CODEC2_MODE_1400 = 3; + public static final int CODEC2_MODE_1300 = 4; + public static final int CODEC2_MODE_1200 = 5; + public static final int CODEC2_MODE_700 = 6; + public static final int CODEC2_MODE_700B = 7; + public static final int CODEC2_MODE_700C = 8; + public static final int CODEC2_MODE_WB = 9; + public static final int CODEC2_MODE_450=10; + public static final int CODEC2_MODE_450PWB=11; + + /** + * The size of the file header that is written when using c2enc. When decoding, this must be + * skipped. + */ + public static final int CODEC2_FILE_HEADER_SIZE = 7; + + public native static long create(int mode); + + public native static int getSamplesPerFrame(long con); + + public native static int getBitsSize(long con); + + public native static int destroy(long con); + + public native static long encode(long con, short[] buf, char[] bits); + + /** + * Decode one frame from codec2. + * + * @param con pointer long, as from the create method + * @param outputBuffer buffer which will be filled with raw PCM audio decoded + * @param bits input buffer containing one frame of audio + * + * @return 0 on successful completion + */ + public native static long decode(long con, short[] outputBuffer, byte[] bits); + +} \ No newline at end of file diff --git a/libcodec2-android/src/main/res/drawable-v24/ic_launcher_foreground.xml b/libcodec2-android/src/main/res/drawable-v24/ic_launcher_foreground.xml new file mode 100644 index 0000000..1f6bb29 --- /dev/null +++ b/libcodec2-android/src/main/res/drawable-v24/ic_launcher_foreground.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + diff --git a/libcodec2-android/src/main/res/drawable/ic_launcher_background.xml b/libcodec2-android/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 0000000..0d025f9 --- /dev/null +++ b/libcodec2-android/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/libcodec2-android/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/libcodec2-android/src/main/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 0000000..eca70cf --- /dev/null +++ b/libcodec2-android/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/libcodec2-android/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/libcodec2-android/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 0000000..eca70cf --- /dev/null +++ b/libcodec2-android/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/libcodec2-android/src/main/res/mipmap-hdpi/ic_launcher.png b/libcodec2-android/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000..898f3ed Binary files /dev/null and b/libcodec2-android/src/main/res/mipmap-hdpi/ic_launcher.png differ diff --git a/libcodec2-android/src/main/res/mipmap-hdpi/ic_launcher_round.png b/libcodec2-android/src/main/res/mipmap-hdpi/ic_launcher_round.png new file mode 100644 index 0000000..dffca36 Binary files /dev/null and b/libcodec2-android/src/main/res/mipmap-hdpi/ic_launcher_round.png differ diff --git a/libcodec2-android/src/main/res/mipmap-mdpi/ic_launcher.png b/libcodec2-android/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000..64ba76f Binary files /dev/null and b/libcodec2-android/src/main/res/mipmap-mdpi/ic_launcher.png differ diff --git a/libcodec2-android/src/main/res/mipmap-mdpi/ic_launcher_round.png b/libcodec2-android/src/main/res/mipmap-mdpi/ic_launcher_round.png new file mode 100644 index 0000000..dae5e08 Binary files /dev/null and b/libcodec2-android/src/main/res/mipmap-mdpi/ic_launcher_round.png differ diff --git a/libcodec2-android/src/main/res/mipmap-xhdpi/ic_launcher.png b/libcodec2-android/src/main/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000..e5ed465 Binary files /dev/null and b/libcodec2-android/src/main/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/libcodec2-android/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/libcodec2-android/src/main/res/mipmap-xhdpi/ic_launcher_round.png new file mode 100644 index 0000000..14ed0af Binary files /dev/null and b/libcodec2-android/src/main/res/mipmap-xhdpi/ic_launcher_round.png differ diff --git a/libcodec2-android/src/main/res/mipmap-xxhdpi/ic_launcher.png b/libcodec2-android/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000..b0907ca Binary files /dev/null and b/libcodec2-android/src/main/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/libcodec2-android/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/libcodec2-android/src/main/res/mipmap-xxhdpi/ic_launcher_round.png new file mode 100644 index 0000000..d8ae031 Binary files /dev/null and b/libcodec2-android/src/main/res/mipmap-xxhdpi/ic_launcher_round.png differ diff --git a/libcodec2-android/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/libcodec2-android/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000..2c18de9 Binary files /dev/null and b/libcodec2-android/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/libcodec2-android/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/libcodec2-android/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png new file mode 100644 index 0000000..beed3cd Binary files /dev/null and b/libcodec2-android/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png differ diff --git a/libcodec2-android/src/main/res/values/colors.xml b/libcodec2-android/src/main/res/values/colors.xml new file mode 100644 index 0000000..69b2233 --- /dev/null +++ b/libcodec2-android/src/main/res/values/colors.xml @@ -0,0 +1,6 @@ + + + #008577 + #00574B + #D81B60 + diff --git a/libcodec2-android/src/main/res/values/strings.xml b/libcodec2-android/src/main/res/values/strings.xml new file mode 100644 index 0000000..77e0869 --- /dev/null +++ b/libcodec2-android/src/main/res/values/strings.xml @@ -0,0 +1,3 @@ + + Codec2 + diff --git a/libcodec2-android/src/main/res/values/styles.xml b/libcodec2-android/src/main/res/values/styles.xml new file mode 100644 index 0000000..2c90fa4 --- /dev/null +++ b/libcodec2-android/src/main/res/values/styles.xml @@ -0,0 +1,13 @@ + + + + + + diff --git a/libcodec2-android/src/test/java/com/ustadmobile/codec2/ExampleUnitTest.java b/libcodec2-android/src/test/java/com/ustadmobile/codec2/ExampleUnitTest.java new file mode 100644 index 0000000..43cd414 --- /dev/null +++ b/libcodec2-android/src/test/java/com/ustadmobile/codec2/ExampleUnitTest.java @@ -0,0 +1,17 @@ +package com.ustadmobile.codec2; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +/** + * Example local unit test, which will execute on the development machine (host). + * + * @see Testing documentation + */ +public class ExampleUnitTest { + @Test + public void addition_isCorrect() { + assertEquals(4, 2 + 2); + } +} \ No newline at end of file diff --git a/settings.gradle b/settings.gradle index 75bde64..3bb20a9 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,2 +1,2 @@ -include ':codec2talkie' +include ':libcodec2-android', ':codec2talkie' rootProject.name = "Codec2Talkie" \ No newline at end of file